Армейская мудрость гласит:"Пусть безобразно, зато единообразно!".
Это я к тому, что заменять драйвер, содержащий ошибки, но тем не менее как-то работающий, на исправленный, но из-за этого имеющий несколько иную логику работы, было не лучшим решением из-за потери совместимости. Что и проявилось у нескольких форумчан при попытке повторить мои поделки.
Суть ошибок штатного драйвера:
контакты (пины) serport.0.pin-Х-in и serport.0.pin-X-in-not перепутаны между собой.
причем контакт serport.0.pin-1-in-not не работает вообще (всегда 0)
При помощи нехитрых костылей эти проблемы обходятся. Как показала практика, это лучше, чем править драйвер.
Поэтому публикую варианты hal-файлов демок для штатного драйвера.
12-кнопочная клавиатура
COM-порт: клавиатура и другие антикризисные решения. #1
Код: Выделить всё
loadrt threads name1=base-thread period1=30000 fp1=0 name2=servo-thread period2=1000000
loadusr -Wn comkbd pyvcp -c comkbd comkbd.xml
loadrt serport io=0x3f8
addf serport.0.read base-thread
addf serport.0.write base-thread
loadrt not
addf not.0 base-thread
loadrt matrix_kb config=3x4s
addf matrix_kb.0 servo-thread
setp matrix_kb.0.negative-logic 0
net col0 serport.0.pin-9-in-not => matrix_kb.0.col-00-in
net col1 serport.0.pin-8-in-not => matrix_kb.0.col-01-in
net col2 serport.0.pin-6-in-not => matrix_kb.0.col-02-in
net col3n serport.0.pin-1-in => not.0.in
net col3 not.0.out => matrix_kb.0.col-03-in
net row0 matrix_kb.0.row-00-out => serport.0.pin-4-out
net row1 matrix_kb.0.row-01-out => serport.0.pin-3-out
net row2 matrix_kb.0.row-02-out => serport.0.pin-7-out
net led0 matrix_kb.0.key.r0c0 => comkbd.led0
net led1 matrix_kb.0.key.r0c1 => comkbd.led1
net led2 matrix_kb.0.key.r0c2 => comkbd.led2
net led3 matrix_kb.0.key.r0c3 => comkbd.led3
net led4 matrix_kb.0.key.r1c0 => comkbd.led4
net led5 matrix_kb.0.key.r1c1 => comkbd.led5
net led6 matrix_kb.0.key.r1c2 => comkbd.led6
net led7 matrix_kb.0.key.r1c3 => comkbd.led7
net led8 matrix_kb.0.key.r2c0 => comkbd.led8
net led9 matrix_kb.0.key.r2c1 => comkbd.led9
net led10 matrix_kb.0.key.r2c2 => comkbd.led10
net led11 matrix_kb.0.key.r2c3 => comkbd.led11
start
32-кнопочная клавиатура
Re: COM-порт: клавиатура и другие антикризисные решения. #62
Код: Выделить всё
loadrt threads name1=base-thread period1=30000 fp1=0 name2=servo-thread period2=1000000
loadusr -Wn comkbd32 pyvcp -c comkbd32 comkbd32.xml
loadrt serport io=0x3f8
addf serport.0.read base-thread
addf serport.0.write base-thread
loadrt not
addf not.0 base-thread
loadrt matrix_kb config=8x4s
addf matrix_kb.0 servo-thread
setp matrix_kb.0.negative-logic 0
loadrt logic count=3 personality=0x204,0x204,0x204
addf logic.0 base-thread
addf logic.1 base-thread
addf logic.2 base-thread
net col0 serport.0.pin-9-in-not => matrix_kb.0.col-00-in
net col1 serport.0.pin-8-in-not => matrix_kb.0.col-01-in
net col2 serport.0.pin-6-in-not => matrix_kb.0.col-02-in
net col3n serport.0.pin-1-in => not.0.in
net col3 not.0.out => matrix_kb.0.col-03-in
net row0 matrix_kb.0.row-00-out
net row1 matrix_kb.0.row-01-out => logic.0.in-00
net row2 matrix_kb.0.row-02-out => logic.1.in-00
net row3 matrix_kb.0.row-03-out => logic.0.in-01 logic.1.in-01
net row4 matrix_kb.0.row-04-out => logic.2.in-00
net row5 matrix_kb.0.row-05-out => logic.0.in-02 logic.2.in-01
net row6 matrix_kb.0.row-06-out => logic.1.in-02 logic.2.in-02
net row7 matrix_kb.0.row-07-out => logic.0.in-03 logic.1.in-03 logic.2.in-03
net code-row1 logic.0.or => serport.0.pin-4-out
net code-row2 logic.1.or => serport.0.pin-3-out
net code-row4 logic.2.or => serport.0.pin-7-out
net led0 matrix_kb.0.key.r0c0 => comkbd32.led0
net led1 matrix_kb.0.key.r1c0 => comkbd32.led1
net led2 matrix_kb.0.key.r2c0 => comkbd32.led2
net led3 matrix_kb.0.key.r3c0 => comkbd32.led3
net led4 matrix_kb.0.key.r4c0 => comkbd32.led4
net led5 matrix_kb.0.key.r5c0 => comkbd32.led5
net led6 matrix_kb.0.key.r6c0 => comkbd32.led6
net led7 matrix_kb.0.key.r7c0 => comkbd32.led7
net led8 matrix_kb.0.key.r0c1 => comkbd32.led8
net led9 matrix_kb.0.key.r1c1 => comkbd32.led9
net led10 matrix_kb.0.key.r2c1 => comkbd32.led10
net led11 matrix_kb.0.key.r3c1 => comkbd32.led11
net led12 matrix_kb.0.key.r4c1 => comkbd32.led12
net led13 matrix_kb.0.key.r5c1 => comkbd32.led13
net led14 matrix_kb.0.key.r6c1 => comkbd32.led14
net led15 matrix_kb.0.key.r7c1 => comkbd32.led15
net led16 matrix_kb.0.key.r0c2 => comkbd32.led16
net led17 matrix_kb.0.key.r1c2 => comkbd32.led17
net led18 matrix_kb.0.key.r2c2 => comkbd32.led18
net led19 matrix_kb.0.key.r3c2 => comkbd32.led19
net led20 matrix_kb.0.key.r4c2 => comkbd32.led20
net led21 matrix_kb.0.key.r5c2 => comkbd32.led21
net led22 matrix_kb.0.key.r6c2 => comkbd32.led22
net led23 matrix_kb.0.key.r7c2 => comkbd32.led23
net led24 matrix_kb.0.key.r0c3 => comkbd32.led24
net led25 matrix_kb.0.key.r1c3 => comkbd32.led25
net led26 matrix_kb.0.key.r2c3 => comkbd32.led26
net led27 matrix_kb.0.key.r3c3 => comkbd32.led27
net led28 matrix_kb.0.key.r4c3 => comkbd32.led28
net led29 matrix_kb.0.key.r5c3 => comkbd32.led29
net led30 matrix_kb.0.key.r6c3 => comkbd32.led30
net led31 matrix_kb.0.key.r7c3 => comkbd32.led31
start