Сам заголовок конечно шуточный, но недавно мне взбрела занимательная идея и я начал пилить весьма интересный проект.
Недавно я написал статью, где рассказал о том, как можно писать нативные программы для старых смартфонов под «голый» Linux, не запуская Android вообще. Покумекав и поразмышляв, мне захотелось сделать реальной проект на базе этих наработок, а тут мне параллельно удалось завести модем медиатека…
Короче, я сел и начал писать открытую прошивку (под прошивкой в данном случае понимается «морда») для Android смартфонов. Максимально легко-портируемую, шуструю, с простым и понятным API для приложений. Ведроид вообще никак не задействуется.
Основной плюс перед pmOS в том, что такая прошивка легко работает на древних версиях ядрах (тестирую на 2.6), может работать на проприетарных ядрах без перекомпиляции и состоит из пары либ. На данный момент, у нас есть:
- Графическая подсистема с отрисовкой прозрачных/непрозрачных картинок, умножением цвета, автоматическим управлением формата пикселя (на смартфоне 16-битный фреймбуфер, т.е 565, на 32х-битном фреймбуфере все должно работать также), отрисовкой примитивов и растровых моноширинных шрифтов. Изначально хотел её делать на GLES, но нативный рендерер мне завести пока не удалось (буду копать исходники ведра, чтобы понять шаги инициализации), на софтрендере работает не очень плавно, но вполне шустро.
- Простой механизм для анимаций. Я изначально хотел слизать UX для прошивки с первых версий iOS, поэтому без анимаций никуда. Пока что есть примитивный интерполятор нескольких значений (X, Y, поворот и.т.п), который вполне работает.
- Обработка ввода с тачскрина с распознаванием базовых жестов (свайпы). Ну, тут все очевидно, правда пока распознается только одно нажатие - мультитача ещё нет.
- Простенький драйвер модема. Звонить и отправлять СМС-ки умеет.
- GUI. Причём я решил реализовать интерфейс самым нетривиальным по мобильным меркам способ - концепцией Immediate GUI (т.е вызвали GUI::Button - получили кнопку на экране, GUI::TextField - текстовое поле и всё это с минимальным количеством стейтов). Для сторонних приложений есть механизм «экранов».
- Менеджер питания. Замер уровня заряда АКБ, статус ЗУ, управление подсветкой - это все сюда.