nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 10 Dec 2019 01:16



Reply to topic  [ 52 posts ]  Go to page Previous  1, 2, 3, 4  Next
Подключение PS/2 клавиатуры через COM порт 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Потратил я немного времени, чтобы посмотреть какую-либо техническую информацию по этим
самым клавиатурам с RS-232 интерфейсом: Palm portable keyboard и Apple Newton Keyboard...

Заинтересовало, поскольку по ASCII Serial keyboard я тут в первый заход ничего путного не нашел. :osad:
Теперь хоть знал - что конкретно искать, хотя задачу это сильно не облегчило - уходит эта информация,
ссылки битые, на других ссылках уже и информация другая... :-?

Но по Palm portable keyboard я некоторую техническую информацию нашел! :wink:
http://wb9kzy.com/palm.htm ; http://www.splorp.com/pdf/stowawayhwref.pdf
Attachment:
Palm Portable Keyboard.gif
Palm Portable Keyboard.gif [ 82.33 KiB | Viewed 2500 times ]

В мануале stowawayhwref.pdf расписаны особенности RS-232 интерфейса к Palm и приведена
таблица кодов: Key Code Matrix.
Attachment:
Key Code Matrix.gif
Key Code Matrix.gif [ 22.27 KiB | Viewed 2500 times ]

При взгляде на таблицу, возникает мысль, что Palm portable keyboard - это не ASCII Serial keyboard, и, возможно,
в драйвере придется сделать перекодировку либо в скан-коды, либо - сразу в ASCII-коды.

Насколько я успел посмотреть, в тексте драйвера NTKEY2LX.COM какая-то перекодировка вроде тоже есть...


P.S. По драйверу NTKEY2LX.COM см. предыдущую страницу.

_________________
iLavr


07 Jun 2018 13:00
Profile
Junior

Joined: 06 Jun 2018 05:13
Posts: 5
Reply with quote
Quote:
При взгляде на таблицу, возникает мысль, что Palm portable keyboard - это не ASCII Serial keyboard, и, возможно,
в драйвере придется сделать перекодировку либо в скан-коды, либо - сразу в ASCII-коды.

Насколько я успел посмотреть, в тексте драйвера NTKEY2LX.COM какая-то перекодировка вроде тоже есть...


Попробовал подключить клавиатуру (Palm) по rs232 (использовал только GND и RXD контакты, питание 3v от palm кпк).
Драйвер NTKEY2LX.COM ни как не реагировал на нажатия :(
Попробовал "послушать" что принимает com port через приложение DataCom- терминал порта, реакция на нажатия клавиш есть (хоть что-то...).
На разные кнопки показываются различные символы (обычно 3, по типу: DDD ... /// FFF ), т.е. можно забиндить как-то по таблице эти символы к реальным кнопкам.
И получается вы правы, в терминале должны выводиться ASCII символы, а показываются как есть, то что пришло от клавиатуры.

Настройки подключения такие ставил COM 1, скорость 9600, bit-1.

Attachment:
File comment: palm portable keyboard pinout rs232
tungsten t3

IMG_20180605_195633_sm.jpg
IMG_20180605_195633_sm.jpg [ 269.01 KiB | Viewed 2499 times ]
Attachment:
File comment: ms dos hp 200lx rs232 gnd rxd connection
palm portable keyboard

IMG_20180607_164113_sm_sm.jpg
IMG_20180607_164113_sm_sm.jpg [ 151.36 KiB | Viewed 2499 times ]


07 Jun 2018 13:26
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
be3 wrote:
Попробовал "послушать" что принимает com port через приложение DataCom- терминал порта, реакция на нажатия клавиш есть (хоть что-то...).
На разные кнопки показываются различные символы (обычно 3, по типу: DDD ... /// FFF ), т.е. можно забиндить как-то по таблице эти символы к реальным кнопкам.

А вы можете заставить приложение DataCom-терминал порта показывать то, что принимает, в HEX-виде?
Ну типа 0А, 0С, 1В ... вот это меня зело смущает: "обычно 3, по типу: DDD ... /// FFF ".

Но, согласно мануалу, похоже, что их действительно дожно быть 3:
Attachment:
KeyDown.gif
KeyDown.gif [ 37.84 KiB | Viewed 2481 times ]

А X и Y - берутся из таблицы в моём предыдущем посте.

В общем - задача решаемая: что выдаёт клавиатура - известно (хотя неплохо и проверить).
Образец написания драйвера есть - если что непонятно - смотреть у Р. Джордейна.

Примерная суть работы драйвера (кратко):
1. При старте драйвер проверяет, не был ли он запущен уже (в коде это есть).
2. Если драйвер запущен впервые, он подменяет прерывание INT 9 клавиатуры на прерывание от COM-порта - эта программа внутри самого драйвера.
3. Драйвер устанавливаеся резидентно (есть такая функция).

4. Если пришло прерывние от COM-порта - попадаем в код нашего драйвера.
5. Проверяем не было ли ошибок COM-порта (см.у Р. Джордейна.)
6. Если нет ошибок читаем код из буфера COM-порта.
7. Перекодируем код клавиши.
8. Сохраняем полученное значение в кольцевой буфер клавиатуры.

9. Если драйвер запущен повторно, он выдаст сообщение и не установится.
10. Если драйвер запущен с нужным ключом, он вернет на место прерывание INT 9 клавиатуры и завершит работу.

Как-то так... 8)

_________________
iLavr


07 Jun 2018 13:57
Profile
Doomed
User avatar

Joined: 19 Feb 2017 04:46
Posts: 361
Location: С-Петербург
Reply with quote
Lavr wrote:
некоторые программы сами подменяют INT 9 и работают с клавиатурой
напрямую. Они либо не будут работать

То, что другие программы не будут работать, это не волнует. Гораздо хуже, когда другие программы вредят твоей программе подменяющей INT 9. DOS-овые эмуляторы В.Пыхонина и А.Дёмина не подменяли обработчик INT 9 к тому же ещё нуждались в русификаторе, причём большая часть русификаторов конфликтовала с этими эмуляторами.

А я в своих эмуляторах РК и ОРИОНА для MSDOS в 90-тые ставил свой обработчик на вектор INT 9 и функциями MSDOS и ROM-BIOS для ввода с клавиатуры и вывода на экран вообще не пользовался. Из-за этого, кстати, никакие программы получения копии экрана не работают. В режиме отладчика на экран VGA выводил мой цветной графический драйвер на 64 символа в строке (т.к у меня плохое зрение и я всегда предпочитаю более крупные буквы) русские буквы выводились без русификаторов. Потому проблем с эмуляцией клавиатуры ни на Win 98, ни на Win ME не было.

И на Win XP проблем тоже не было до 2017 года. Пока я недавно не стал пользоваться Punto Switcher-ом. А он оказался наглым и каким-то образом вредит. Я полагаю, что он сам нагло и постоянно во времени восстанавливает вектор INT 9 на себя, потому что иногда вообще в запущенном с ним эмуляторе не работают клавиши в режиме монитора отладчика эмулятора (в режиме монитора эмулятора INT 9 восстановлен на тот, что был на момент старта эмулятора), но это бывает редко и влияет только в режиме отладчика.

А вот в режиме эмуляции (при входе в режим эмуляции ставится свой INT 9) с загруженным Punto Switcher-ом - всегда проблемы. Нажимаешь на клавишу в программе ОРИОНА, - 0.5-2 секунды нет реакции, а затем выскакивает сразу десяток букв. Это делает невозможным пользование эмулятором.

Причём мой обработчик INT 9 ставится не цепочечно, а только на себя. Потому никакой Punto Switcher или другая программа не должна влиять, она не получает управления по нажатиям. Но влияет. Это значит, что он нагло восстанавливает INT 9 на себя.

Из-за этого для пользования эмулятором приходится выгружать Punto Switcher. А он постоянно нужен, т.к я уже привык переключать РУС-ЛАТ левым и правым шифтами (одновременное нажатие CTRL+Shift, то что в Windows по умолчанию неудобно). Причём, что нагло, в настройке Punto Switcher-а можно указать программы при работе которых Punto Switcher не должен работать и как-либо влиять. Но это не работает, возможно имеется ввиду, что такая услуга Punto Switcher-а работает только для программ Windows, не MSDOS.

Lavr wrote:
сталкивался с такой ситуацией - так поступает QBasic. Долго мучался как его обмануть...
Подскажите что-нибудь по борьбе за INT 9, чтобы чужие программы Windows не влияли на мои программы.


Last edited by barsik on 08 Jun 2018 13:23, edited 1 time in total.



08 Jun 2018 11:21
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
barsik wrote:
Lavr wrote:
сталкивался с такой ситуацией - так поступает QBasic. Долго мучался как его обмануть...
Подскажите что-нибудь по борьбе за INT 9, чтобы чужие программы Windows не влияли на мои программы.

Мне кажется, я поступил, как поступает упомянутый вами Punto Switcher - отбирал INT 9 у QBasic-а.
Я ему приделывал всплывающее меню, более привычное для программ Windows:

Image

Всё, что я делал - подробно расписано вот здесь:
http://www.nedopc.org/forum/viewtopic.php?p=97419#p97419

Единственное, что могу добавить, отобрав INT 9 у QBasic-а, я еще патчил в нём, кажется,
несколько байт на некотором удалении от входа в его собственное INT 9.
Зачем-то это было надо: кажется, чтобы он не делал повторно то, что я уже сделал в своём INT 9.

_________________
iLavr


08 Jun 2018 12:33
Profile
Junior

Joined: 06 Jun 2018 05:13
Posts: 5
Reply with quote
Lavr, Большое спасибо за такое подробное описание драйвера :surprised:

Попробовал подключить клавиатуру без КПК и проверил что клавиатура шлет в HEX
Тестировал с помощью программы COMMCHK.EXE (Commchk v1.8 Serial protocol analizer), запускал с параметрами: COMMCHK -I 1 -B 9600 -P N -W 8 -S 1
* программу прикрепил

Подключал вот так:
Palm keyboard pin = rs232
    7 - GND = GND
    9 - Vout = +3.2V-5v (battery)
    10 - RxD = RS-232 RxD
    14 - RTS = LOW after HIGH will activate keyboard (if Vout on)

Потыкал разные клавиши, вот такой результат:
Action = Responce
    On keyboard connect, after LOW => HIGH on RTS = fa fd
    1 = 00 80 80
    2 = 01 81 81
    3 = 02 82 82
    4 = 04 84 84
    5 = 05 85 85
    q = 09 89 89
    w = 0a 8a 8a
    shift = 58 d8 d8
    enter = 41 c1 c1
    space = 17 97 97
    del = 50 d0 d0
    up = 49 c9 c9
    down = 52 d2 d2
    left = 51 d1 d1
    right = 53 d3 d3
    backspace = 32 b2 b2
    tab = 19 99 99

Пока такие проблемы клавиатурой:
1) Чтобы клавиатура активизировалась после подачи питания, нужно на 14pin(RTS) подать LOW потом HIGH - пока вручную прикрутил включатель on\off :econfused:
Как я понял что то похожее происходит в исходнике (988 строка, функция init_com):
Code:
mov   al,00001001B   ; OUT2=1 OUT1=RTS=0 DTR=1...for kbd power

и если подключить com DTR к RTS клавиатуры, то она тоже включится :roll:

В драйвере для определения клавиши используется 2 байта, а в palm клавиатуре 3 байта:
Нажимаем 8-бит отправляется:
• Первый бит - 0 если нажата клавиша
• След 4 бита: Y номер из таблицы
• Еще 3 бита: X номер из таблицы
Когда отпускаем клавишу, отправляется все тоже самое(8-бит) но первый бит 1 (!)
И еще важно, если отпускаем клавишу и не нажато не одной другой клавиши, последние 8-бит отправляются еще раз (поэтому и получается 1 = 00 80 80)

Для питания использую 3.7v аккумулятор, возможно получится питать от COM (безопасно ли это?)

Думаю, проблемы получится решить и тогда будет готовый ms dos rs232 драйвер для Palm клавиатур


Attachments:
File comment: hp200lx vs portable palm keyboard connection
IMG_20180608_210118_lol.jpg
IMG_20180608_210118_lol.jpg [ 45.19 KiB | Viewed 2436 times ]
File comment: hp200lx Commchk rs232 serial output from palm keyboard
IMG_20180608_193940_rs232_input.jpg
IMG_20180608_193940_rs232_input.jpg [ 145.15 KiB | Viewed 2436 times ]
File comment: ms dos rs232 Commchk v1.8 Serial protocol analizer. HEX ASCII input output
COMCHK18.zip [30.2 KiB]
Downloaded 62 times
08 Jun 2018 13:31
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
be3 wrote:
Большое спасибо за такое подробное описание драйвера :surprised:

Вот здесь я забыл один момент, хотя он в принципе очевиден:
4. Если пришло прерывние от COM-порта - попадаем в код нашего драйвера.
5. Проверяем не было ли ошибок COM-порта (см.у Р. Джордейна.)
6. Если нет ошибок читаем код из буфера COM-порта.
7. Перекодируем код клавиши.
8. Сохраняем полученное значение в кольцевой буфер клавиатуры.
8'. Выходим из аппаратного прерывания. (IRET)

be3 wrote:
Для питания использую 3.7v аккумулятор, возможно получится питать от COM (безопасно ли это?)
Судя по описанию - stowawayhwref.pdf - должно быть вполне безопасно до +5В.
Обычно COM-порты строятся так, чтобы выдерживать короткое замыкание на любой линии.
Надеюсь, что у HP 200lx COM-порт тоже способен это выдержать.
Есть только один нюанс: стандартный COM-порт выдает на линии от +/-12 В до +/-3В.
Померяйте сначала - если в пределах +/-5В сигналы, то питать клавиатуру можно, хотя и осторожно:
не подавать на неё -5В (т.е. питание от COM-порта подавать через диод Шоттки).
Если на линиях будет +/-12 В - сделать через диод и малый резистор, а в параллель клавиатуре -
стабилитрон на 3.6...4.7В и параллельно с ним - электролит.

Я выкроил немного времени и почитал исходник драйвера NTKEY2LX.ASM - в принципе все основные
части драйвера в нём есть - надо только внимательно разобраться в них и изменить лишь то, что
касается приема и перекодировки кода от клавиатуры.

За одно взглянул я, что за зверь "Hewlett-Packard серии LX" - там MS-DOS 5.0 сидит в ПЗУ?

_________________
iLavr


08 Jun 2018 16:17
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Но по Palm portable keyboard я некоторую техническую информацию нашел! :wink:
http://wb9kzy.com/palm.htm ; http://www.splorp.com/pdf/stowawayhwref.pdf

Ссылка на stowawayhwref.pdf подохла, если кому он нужен, то есть здесь:
http://www.umlib.com/brand/HP/category/PDA/model/Jornada%20928/document/540662

_________________
iLavr


15 Jul 2019 05:21
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18145
Location: Colorado
Reply with quote
Было у меня что-то похожее 15 лет назад :mrgreen:

Image

Но только для старых Пальмов где тръу-RS232 :)

_________________
:eugeek: https://twitter.com/Shaos1973


16 Jul 2019 17:13
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
... только для старых Пальмов где тръу-RS232 :)

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

Но единственная правдоподобная информация, которую нашел, это для вот этой Palm portable keyboard.
Кстати, через USB-RS232 переходник эти клавиатуры, как пишут, тоже работают.

Нет никакой информации (или я не нашел), какие коды должна выдавать Serial keyboard в RS232, если
включить в Винде вот эту поддержку:

Image

_________________
iLavr


17 Jul 2019 06:16
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
я всё и ищу, по какому протоколу (или соглашению) работают Serial клавиатуры через этот самый тръу-RS232...
Или хотя бы через IrDA - мне думается, должно быть похоже...

Есть ещё вот такой вариант соглашения, какие коды должна посылать Serial keyboard по RS232.
К сожалению, это не настоящая Serial keyboard, а конвертер PS/2 Keyboard to RS232 Serial Keyboard.
PS2ADPT wrote:
Поскольку стандартный 7–битный набор символов ASCII содержит только 128 знаков (от 0x00 до 0x7F), с тем чтобы поддерживать функциональные клавиши, клавиши дополнительной клавиатуры и клавиши с модификатором CTRL, PS2_ADPTер посылает 8-битные символы для идентификации этих «непечатаемый» кодов клавиш. И чтобы поддержать использование клавиши ALT, как символ модификатора, PS2_ADPTер отправляет два символа для определения комбинации клавиш ALT–x. Для определения передаваемых по последовательному интерфейсу кодов, обратитесь к документации http://www.versalent.biz/manuals/STAManKeyMap.pdf, на которой представлена схема 102-клавишной клавиатуры PS/2, показаны все позиции клавиш, и связанные с ними символы, передаваемые PS2_ADPTером при нажатии клавиши. Вы заметите, что на каждую клавишу приходится 5 символов (в шестнадцатеричном значении), определяющих, какие 8-битные символы выводятся при нажатии каждой клавиши:

1) Normal keypress with no other keys pressed
2) Key pressed with SHIFT pressed (or CAPSLOCK active)
3) Key pressed with ALT pressed
4) Key pressed with CRTL pressed
5) Key pressed with NUMLOCK active

 ASCII Serial Keyboard Map
Attachment:
STAManKeyMap.gif
STAManKeyMap.gif [ 161.17 KiB | Viewed 1071 times ]

_________________
iLavr


17 Jul 2019 13:37
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18145
Location: Colorado
Reply with quote
Я так думаю если эти клавки требут собственных драйверов, то стандарта не существует - все делали свое собственное что во что горазд...

_________________
:eugeek: https://twitter.com/Shaos1973


17 Jul 2019 19:40
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
To есть, так получается, что ASCII Serial KeyBoard - это "кто во что горазд"? :roll:
Я так не думаю... и вот по какой причине.

Есть сайт разработчика драйвера для различных устройств на СОМ-портах, работающих по протоколу RS-232:
232key - free RS-232 to keyboard software

У них есть страничка поддерживаемых уникальных устройств:
https://www.232key.com/documentation/index.html

Так вот среди уникальных устройств - ридеры штрих-кодов, умные весы и прочие похожие гаджеты.
Клавиатур я там не нашел, а искал - хотел почитать мануал какой-либо обыденной Serial KeyBoard.
Выходит, что Serial KeyBoard-ы работают более-менее стандартно и идентично...

Собственно, при нажатии на клавишу, они должны послать код ASCII символа на ней.
Возникают трудности и разночтения лишь со всякими специальными и служебными клавишами.

На одном форуме я читал, жалуется пользователь "клавиатура не передаёт у него код для переключения
РУС/ЛАТ...
"
Но ведь такого ASCII-кода нет! :wink: Есть условная комбинация клавиш. А коды клавиш Alt и Shift
ASCII-клавиатуры просто не передают...

_________________
iLavr


18 Jul 2019 02:43
Profile
Doomed
User avatar

Joined: 13 Nov 2007 12:09
Posts: 353
Location: Ставрополь
Reply with quote
Соглашусь с предыдущим оратором, что ASCII-клавиатуры не передают кодов Shift и Alt, используя нажатия этих клавиш только унутре себя и выдавая только ASCII-коды. Однак, если перейти к AT-PS/2 -клавиатурам, то скан-коды Shift и Alt передаются в явном виде, что я и использовал в http://rw6hrm.qrz.ru/adapter.htm (кроме альта, он пока не нужен). Можно почитать документ https://techdocs.altium.com/display/FPG ... Scan+Codes (пока он ещё доступен).
Если кому-то будет скушно или дорого покупать готовую конструкцию адаптера, то он может использовать исходники на Си из моей ссылки, только переделав вывод с параллельного на СОМ-порт-подобный (если памяти пика хватит).


18 Jul 2019 04:22
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
rw6hrm wrote:
Если кому-то будет скушно или дорого покупать готовую конструкцию адаптера, ...

Да дело не в адаптере и не в его цене... меня конкретно интересует, что понимает вот этот
драйвер Венды, когда включается галка "Поддержка альтернативных устройств" на COMx.

Image

Я предполагаю, что по умолчанию (а подробностей нигде нет) он должен понимать стандартную ASCII Serial KeyBoard, ибо такие существовали, даже от IBM...

Но возникает ряд вопросов: как, примеру, ASCII Serial KeyBoard передаст код от клавиши [PrntScreen]?
Или тот же [Ctrl]+[Alt]+[Del] как ASCII Serial KeyBoard сможет передать?

_________________
iLavr


18 Jul 2019 12:41
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 52 posts ]  Go to page Previous  1, 2, 3, 4  Next

Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.