Подготовка клавиатуры к работе
В этом разделе описаны шаги, необходимые для настройки объекта kp. Все приготовления нужно выполнять при отключённой клавиатуре (kp.enabled = 0 - NO), иначе настройка не сработает.
Выбор режима работы
Начните с выбора типа используемой клавиатуры - матричная или двоичная. Это делается свойством kp.mode.
Если клавиатура двоичная, дополнительно задайте свойство kp.idlecode.
Назначение линий сканирования и возврата
Далее определите списки линий сканирования и возврата. Линии сканирования нужны только для матричных клавиатур. Линии возврата необходимы и для матричных, и для двоичных клавиатур.
Одно из замечательных свойств объекта kp. - возможность назначить («отобразить») любую линию ввода-вывода вашего устройства линией сканирования или возврата. Линии ввода-вывода, служащие линиями сканирования или возврата, даже не обязаны идти «подряд» (иметь последовательные номера). Линии сканирования назначаются свойством kp.scanlinesmapping, линии возврата - свойством kp.returnlinesmapping.
На платформах с явным управлением выходными буферами каждую линию сканирования нужно настроить как выход, а каждую линию возврата - как вход.
Ограничения:
- Линий сканирования и линий возврата не может быть больше восьми каждых
- Должна быть хотя бы одна линия возврата
- Любая линия ввода-вывода может быть либо линией сканирования, либо линией возврата, но не обеими сразу
Например, вот как выбрать линии 24, 20 и 27 линиями сканирования, а 28, 21 и 25 - линиями возврата:
kp.scanlinesmapping="24,20,27"
kp.returnlinesmapping="28,21,25"
'this is only necessary on devices with explicit output buffer control
io.num=PL_IO_NUM_24
io.enabled=YES
io.num=PL_IO_NUM_20_INT4
io.enabled=YES
io.num=PL_IO_NUM_27
io.enabled=YES
Номера линий зависят от платформы. Они берутся из перечисления pl_io_num - его объявление смотрите в разделе «Platform-Dependent Constants» документации по платформе вашего устройства (например, для EM1000 она находится здесь). Перечисление pl_io_num - это список констант вроде «PL_IO_NUM_24», и просто подставить «PL_IO_NUM_24» в kp.scanlinesmapping (или kp.returnlinesmapping) нельзя. Правильно написать «24» или использовать str(PL_IO_NUM_24). Так что ту же настройку можно выполнить иначе:
kp.scanlinesmapping=str(PL_IO_NUM_24)+","+str(PL_IO_NUM_20_INT4)+","+str(PL_IO_NUM_27)
kp.returnlinesmapping=str(PL_IO_NUM_28)+","+str(PL_IO_NUM_21_INT5)+","+str(PL_IO_NUM_25)
...
s=kp.returnlinesmapping 's will be equal to '28,21,25'
Задание задержек переходов между состояниями
Третий шаг - задать подходящие времена задержек для переходов между состояниями клавиш. За это отвечают пять свойств: kp.pressdelay, kp.longpressdelay, kp.repeatdelay, kp.releasedelay и kp.longreleasedelay. Каждое свойство задаёт время задержки перехода с шагом 10 мс. Значение 0 означает, что соответствующий переход никогда не произойдёт. Максимальное значение каждого свойства - 254. У всех пяти свойств уже есть разумные значения по умолчанию, поэтому менять их нужно, только если выбранные Tibbo значения вас не устраивают:
kp.pressdelay=4 '40ms (4 successive keypad scans) to confirm that the key is pressed
kp.longpressdelay=150 '1.5 seconds
kp.repeatdelay=0 'we do not want auto-repeat to work
kp.releasedelay=4 '40ms
kp.longreleasedelay=200 '2 seconds
Завершающие шаги
Если вы хотите, чтобы клавиатура отключалась при переходе определённых клавиш в определённые состояния, используйте свойство kp.autodisablecodes. В примере ниже объект kp. настроен на отключение, когда клавиша с кодом 49 переходит в _LONGPRESSED или клавиша с кодом 20 - в _PRESSED.
Также можно выбрать, как получать события клавиатуры: через обработчик события on_kp (по умолчанию) или через метод kp.getkey.
Наконец, включите клавиатуру, и всё готово.
kp.autodisablecodes=str(PL_KP_EVENT_LONGPRESSED)+",49,"+str(PL_KP_EVENT_PRESSED)+",20" 'see the next topic for the explanation of key codes
kp.genkpevent=NO 'polling mode selected
kp.enabled=YES