Смартфон в качестве дисплея: начало

... Ну не лежит у меня душа к стандартным методам взаимодействия с микроконтроллером. Алфавитно-цифровые дисплеи не нравятся ограниченными возможностями вывода информации, LCD/TFT - необходимостью выделения большого количества выводов для управления ими и объемом библиотек. Да и поддержка встречного потока данных - от пользователя к микроконтроллеру - также требует ресурсов. Душа (и запланированные устройства) требовала нестандартного решения...
По этой причине было решено заполнить надвигающиеся зимние праздники разработкой универсального терминального устройства, с которым могли бы взаимодействовать все вновь разрабатываемые, а также и уже существующие устройства. В качестве устройства ввода-вывода напрашивался - напросился-таки - Android-смартфон. В качестве канала связи - Bluetooth с примкнувшим к нему UART.
Для того, чтобы устройства могли общаться друг с другом, потребовался простенький протокол обмена данными, включающий в себя как команды, отправляемые микроконтроллером и вызывающие отрисовку графических примитивов на дисплее смартфона, так и ответы смартфона, позволяющие микроконтроллеру реагировать на действия пользователя.
В первой версии реализован следующий куцый набор команд:
Cmd Параметры Примечание
FG n1,n2 Задание цвета точек/прямых. Этот параметр используется в командах GD, GW, ...
Параметр n2 не используется и введен для единообразия с другими командами настройки цветов
FD n1,n2 Определение цвета переднего и заднего фона дисплея; цвет переднего фона (n1) пока используется только при заливке дисплея командой DS
FZ n1,n2 Определение цвета шрифта и фона для вывода текста; цвет фона (n2) может задаваться как числом в диапазоне 1...16 (в этом случае под текстом будет отрисован прямоугольник соответствующего цвета, закрашивающий фон), так и нулем (текст выводится без закрашивания фона)
GD x0,y0,x1,y1 Рисование прямой по двум точкам; точка с координатами (x1,y1) запоминается в качестве текущей и используется  некоторых других командах в качестве стартовой
GR x0,y0,x1,y1 Рисование прямоугольника по двум противоположным вершинам
GW x,y Рисование прямой из текущей точки; точка с координатами (x1,y1) запоминается в качестве текущей и используется  некоторых других командах в качестве стартовой
GZ n Задание толщины рисуемых прямых
ZL x,y,<text> Вывод текста с выравниванием влево
ZC x,y,<text> Вывод текста с выравниванием по центру
ZR x,y,<text> Вывод текста с выравниванием вправо
DL Заливка графической области дисплея цветом заднего фона, заданным командой FD
DS Заливка графической области дисплея цветом переднего фона, заданным командой FD
RF x0,y0,x1,y1,n1 Заливка прямоугольной области (x0,y0)-(x1,y1) цветом, заданным параметром n1
RL x0,y0,x1,y1 Стирание (заливка цветом заднего фона дисплея) прямоугольной области (x0,y0)-(x1,y1)
RS x0,y0,x1,y1 Заливка прямоугольной области (x0,y0)-(x1,y1) цветом переднего фона дисплея
Соответственно, смартфон может ответить одной из следующих символьных последовательностей:
Cmd Параметры Примечание
RD Этой последовательностью смартфон предлагает микроконтроллеру начать взаимодействие с ним
1 Отправляется при нажатии кнопки Fn1
2 Отправляется при нажатии кнопки "^"
3  Отправляется при нажатии кнопки "<"
4  Отправляется при нажатии кнопки "v"
5  Отправляется при нажатии кнопки ">"

Смартфон в качестве дисплея: таблица стандартных цветов
Демо-версия пакета