Кодинг для Maemo 5. Пишем Bluetooth-сканнердля Nokia N900Степан "step" Ильин (step@glc.ru) Если посмотреть на репозитарий приложений месяц назад, когда я делился своими впечатлениями от общения с мини-компьютером от Nokia, и сейчас, то это две большие разницы. Программ становится все больше: часть портируется с Debian, часть со старых версий Maemo, которая использовался в предыдущих моделях интернет-планшетов, а часть разрезывается с нуля. И хотя хочется верить, что во всем этом разнообразии найдется нужный инструмент, я уже не раз оказывается в ситуации, когда подходящей программы в репозитарии не оказывалось. В частности для экспериментов с Bluetooth мне был нужен сканнер, который находил бы устройства в эфире и по MAC-адресу определял их производителя – и такого инструмента я не нашел. Но раз уж имеем дело с гиковским девайсом, то решено: пойдем до конца и напишем приложение сами. Тем более что платформа Maemo в этом плане крайне дружелюбна. Устанавливаем среду разработкиОсновным языком разработки для Maemo 5, как и для любого другого Linux, конечно же, является Си. Подробный Maemo 5 SDK, содержащий линуксовые утилиты и необходимые привязки, — лишнее тому подтверждение. Но программирование на Си безусловно требует серьезных навыков программирования, задача еще больше усложняется необходимостью изучения мобильной платформы. Но! Для Maemo5 доступен полноценный интерпретатор Python и, что не менее важно, портированы многочисленные библиотеки. Значит можно использовать всю простоту питона и без лишней прелюдии взяться за разработку нашего приложения! Интерпретатор Python доступен в виде пакета maemo-python-device-env в менеджере приложений. Убедиться, что интерпретатор установился правильно, можно, открыв X Terminal и набрав команду python. После этого ты окажется в приветственной консоли интерпретатора:
В принципе можно попробовать запустить какой-нибудь несложный сценарий на Python'е уже сейчас, используя специально заготовленный bash-скрипт: Подготовка проектаПозаимствованный у PyDev редактор кода предоставляет все прелести IDE: автодополнение кода, сниппеты, подсказки — все, что и без того может ускорить разработку. Далее схема действия Pluthon очень простая: разрабатываемыйскрипт по команде на запуск перебрасываетсячерез SSH на телефон и уже на мобильной платформе начинается его исполнение. По этой причине важно, чтобы на N900 был установлен OpenSSH сервер, это легко делается через менеджер пакетов (подробнее читай в статье прошлого номера). Особенно приятно, что телефон вовсе необязательно подключать по USB к компьютеру: намного удобнее это сделать через беспроводные Bluetooth или Wi-fi. Попробуем? Для начала создадим новый проект (меню File ->PluthonProject ->EmptyPythonProject), далее жмем Nextи выбираем способ удаленного подключения к телефону. Какой бы способ ты ни выбрал— USB, Bluetooth, WLAN ad-hoc — не поленись зайти в настройки. Здесь необходимо правильно указать IP-адрес девайса, а также имя пользователя для работы в системе. Чтобы не было проблем я обычно отлаживаю программы под рутом, хотя это и может быть небезопасно. Далее нажатием на кнопку Finish мы создаем проект. Тут надо сказать, что по умолчанию Python установлен в «голом»виде, в нем практически нет готовых модулей. Поэтому все приходится устанавливать дополнительно в виде специального пакета PyMaemo, представляющего собой сборку сортированных модулей для платформы Maemo. Нас в первую очередь интересуют два модуля:
В ином бы случай, PyMaemo пришлось устанавливать вручную, но Pluthon в момент создания нового проекта предлагает проверить мобильное устройство на наличие необходимых для комфортной разработки библиотек. В случае необходимости, все подкачивается из инета и устанавливается автоматически, а тебе остается лишь смотреть на сообщения в логе. Приступаем к разработкеТеперь, вернемся к нашей задаче — нам необходимо просканировать Bluetooth-эфир. Установив PyMaemo, который включает обертку PyBluez, мы сильно облегчили себе задачу, потому как у нас больше нет необходимости заморачиваться по поводу низкоуровнего взаимодействия с BT-модулем (вот они прелести Python!). Библиотека все сделает сама: главное не забыть ее импортировать, поэтому делаем это в первую очередь:
Операция по поиску беспроводных устройств в эфире называется Discover и реализована в библиотеке bluetooth как один из методов. Причем в качестве параметров можно указать, определять ли имена устройств (их числовой идентификатор, например, step_nokia, N900-phone и т.д.) или нет. В ответ функция возвратит список, в котором будут имена устройств и их MAC-адреса — естественно вслучае, если таковые имеются. Присвоим результат сканирования переменной nearby_devices:
Теперь остается только вывести результат сканирования. Для простоты примера представим, что имеем дело с обычном консольным приложением и для вывода будем использовать стандартную функцию для вывода текстовых данных:
Теперь соединяем все вместе и через меню Run ->Run отдаем команду на запуск, предварительно проверив, что на телефоне включен Bluetooth.В момент первого запуска Pluthon поинтересуется, каким образом ему переносить исходник на мобильное устройство: безопасно монтировать удаленный диск или копировать скрипт по SSH. Второй вариант не требует настройки, поэтому будем использовать его. Единственное, что нужно, — это ввести пароль пользователя, который ты ранее указывал в момент настройки подключения. Если ты так же, как и я, указал root, то вспомни тот пароль, который указав в момент установки приложения rootsh. В случае успеха, в панели для отладки PluThonотобразится вывод скрипта:имена всех найденных устройств, а также их MAC-адреса.Можно также запустить сценарий из консоли: передав название скрипта в качестве аргумента run-standalone.sh. Правда, прямо скажем, что на мобильное приложение это пока явно непохоже. Создаем интерфейс через QtЧего не хватает нашей программе, так это полноценного графического интерфейса. К счастью, существует несколько вариантов наверстать упущенное. Можно, как и для более ранних версий Maemo, использовать библиотеку GTK. Но раз уж компания Nokia приобрела небезызвестный набор библиотек Qt и тем более портировала его для Maemo5, то было бы глупо отказываться от использования новой технологии. Причем если ты уже имел опыт разработки с использованием Qt, то ничего ровным счетом не изменится: на N900 все работает точно также, как и под виндой или обычным линуксом. Вплоть до того, что можно взять готовые примеры и без труда запустить их на мобильной платформе! Поскольку приложение мы разрабатываем на Python, то необходимо установить для Qt необходимые привязки: PyQt (www.riverbankcomputing.co.uk) или PySide (www.pyside.org). Мы будем использовать первый вариант. Для этого, как в Debian или Ubuntu воспользуемся пакетным менеджером apt-get. Открываем консоль, переходим в режим рута (sudogainroot) и далее набираем команду для инсталляции PyQt (пакет называется python2.5-qt4):
Для того чтобы вникнуть в азы проектирования интерфейсов на Qt рекомендую прочитать очень доходчивый мануал, который выложен на диск. А пока попробуем на нашем примере разобрать общие черты приложения. Первым делом импортируем нужные библиотеки Qt:
Далее создаем класс с нашим основным окном и обозначим для него заголовок «N900 Bluetooth-scanner»:
Теперь можно оформить наше приложение в виде Debian-пакета, готового к установке. В этом опять же нас выручит среда разработки Pluthon. Достаточно запустить специальный мастер через меню Export ->PluThon ->ExporttoDebianPackage, послечеговыбравплатформуMaemo, получить готовый к распространению пакет. Дальнейшая разработкаТеперь, когда наша программа получило очертания обычного для N900 приложение и выполняет вполне конкретную цель, можно дополнить интерфейс дополнительными элементами. Я добавил кнопку «Начать сканирование» и реализовал сканирование эфира по запросу, а используя базу «MAC-адрес – производитель», реализовал определение имени производителя. Исходники мы выложили на наш DVD. Более того, возможности PyBluez позволяют легко определить, какие сервисы предоставляет беспроводное устройство, а значит, ты без труда сможешь реализовать и такую возможность! Важно, что для начала разработки приложения не надо морочить голову с изучением новой платформы. Используя уже имеющиеся знаний Python’а и библиотеку Qt, мы сходу смогли разработать работоспособное приложение для NokiaN900. Осталось выложить его в девелоперский репозитарий :). WWWWХочешь еще больше инфы об N900? На www.xakep.ru мы ведем специальный раздел, где делимся секретами работы с новой платформой Maemo5. |