Поддержка клавиатуры поддержана просто блестяще
SfS - ты настоящий герой недопцшного труда!
Есть предложение по доработке. Мне для реализации
прототипа наладонника с языком программирования внутри потребовалось введение еще одной виртуальной раскладки клавиатуры, которая бы включалась в режиме Fn вместо обычной дополнительной раскладки, а также нужно на уровне приложения отдетектировать режим CapsLock. Чтобы сильно не коверкать код NedoPC-90.AVROS я предлагаю внести следующие изменения в код SfS:
в файле hl/keypad40.h надо вставить две строчки:
#define KEYPAD40_KEY_CAPS 0x07
и
#define KEYPAD40_KEY_FN2 0x0F
в файле hl/keypad40.c вместо строки:
0x17, KEYPAD40_KEY_BACKSPC, KEYPAD40_KEY_BACKSPC,
надо написать:
0x17, KEYPAD40_KEY_BACKSPC, KEYPAD40_KEY_FN2,
а также вместо строки:
0x19, ' ', ' ',
надо написать:
0x19, ' ', KEYPAD40_KEY_CAPS,
далее убираем вот это:
else if((ch==KEYPAD40_SPC_KDN) && KEYPAD40_F(KEYPAD40_Fn)){KEYPAD40_INVF(KEYPAD40_FCAPSLOOK);}
а в ветку получения кода символа в режиме Fn непосредственно перед return(ch); следует вставить вот это:
if(ch==KEYPAD40_KEY_CAPS) KEYPAD40_INVF(KEYPAD40_FCAPSLOOK);
После чего сочетание клавиш Fn+BackSp получит свой уникальный код, по которому моя предполагаемая надстройка над интерфейсом SfS-a включит режим "второго Fn" для реализации еще одной дополнительной раскладки (на картинке помечено зелёным):
Причём повторное нажатие Fn+BackSp вернет обратно обычный Fn-режим (на картинке помечено красным) - при этом светодиоды Fn1 и Fn2 будут соответственно зажигаться и гаснуть в соответствии с выбранным режимом.
Кроме того выбор режима CapsLock теперь может быть прочитано программой пользователя - что позволит программно зажечь соответствющий светодиод CapsLock. Если SfS посчитает что выдавать код этого действия наружу не всегда уместно - могу предложить обернуть это дело в #ifdef - чтобы по умолчанию код не возвращался на уровень юзера, а в моём приложении - будет возвращаться.
На уровне hl думаю надо оставить только две стандартные раскладки (с моим небольшим изменением). Всё-таки на уровне системы - это реализация поддержки конкретной клавиатурки без всяких дополнительных раскладок - дополнительный слой будет этажом выше - в программе на пользовательском уровне.