Организация интерфейса во встраиваемых системах с использованием экрана
Имеется измерительный и контролирующий прибор. Нужно для него разработать интерфейс с кучей различной информации, настроек и пояснений, разбросанный по куче экранчиков (физически экран один).
Текст может быть выделяемый и невыделяемый (то есть при нажатии кнопок навигации, с ним ничего не происходит, для заголовков экранчиков и прочих статичных подписей). Может быть ещё и редактируемый - когда после выделения и нажатия определённой кнопки значение выбранного параметра может быть скорректировано. Располагаться текст может тоже достаточно произвольно. Может меняться шрифт (из трёх-четырёх различных), например, для задания индексов по длине строки.
Для выделенного пункта нужен один фон, для редактируемого - другой.
В тексте могут встречаться различные динамические численные и строковые величины. "У няши есть %d пирожков", условно. Условно, так как printf и иже с ним не используется.
А ещё некоторые пункты, кои имеют динамические величины в своём составе должны перерисовываться регулярно с актуальной информацией от датчиков.
И вот проблема - как представить все эти экранчики (т.е. структуру как одного экранчика, так и их отношений) в памяти контроллера. То ли делать какое-то большое дерево из структур, описывающих всё это, то ли как-то делать для каждого экранчика свою функцию вывода и обработки ввода. Не знаю.
И чтобы из управляющего кода это выглядело достаточно просто:
DrawMenu(1);
while(1)
{
int key = GetKey();
switch(key)
{
case 0: OperateMenu(1, MNU_NEXTITEM); break;
...
}
}
Как поступить грамотно и с коего места подойти к этому вопросу?