Организация интерфейса во встраиваемых системах с использованием экрана

Рейтинг: 2Ответов: 1Опубликовано: 01.05.2011

Имеется измерительный и контролирующий прибор. Нужно для него разработать интерфейс с кучей различной информации, настроек и пояснений, разбросанный по куче экранчиков (физически экран один).

Текст может быть выделяемый и невыделяемый (то есть при нажатии кнопок навигации, с ним ничего не происходит, для заголовков экранчиков и прочих статичных подписей). Может быть ещё и редактируемый - когда после выделения и нажатия определённой кнопки значение выбранного параметра может быть скорректировано. Располагаться текст может тоже достаточно произвольно. Может меняться шрифт (из трёх-четырёх различных), например, для задания индексов по длине строки.

Пример экранчика

Для выделенного пункта нужен один фон, для редактируемого - другой.

В тексте могут встречаться различные динамические численные и строковые величины. "У няши есть %d пирожков", условно. Условно, так как printf и иже с ним не используется.

А ещё некоторые пункты, кои имеют динамические величины в своём составе должны перерисовываться регулярно с актуальной информацией от датчиков.

И вот проблема - как представить все эти экранчики (т.е. структуру как одного экранчика, так и их отношений) в памяти контроллера. То ли делать какое-то большое дерево из структур, описывающих всё это, то ли как-то делать для каждого экранчика свою функцию вывода и обработки ввода. Не знаю.

И чтобы из управляющего кода это выглядело достаточно просто:

DrawMenu(1);
while(1)
{
    int key = GetKey();
    switch(key)
    {
     case 0: OperateMenu(1, MNU_NEXTITEM); break;
     ...
    }
}

Как поступить грамотно и с коего места подойти к этому вопросу?

Ответы

Ответов пока нет.