nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 16:20



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

Joined: 06 Jun 2018 04: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 11360 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 11360 times ]


07 Jun 2018 12:26
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08: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 11342 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 12:57
Profile
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 584
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 12:23, edited 1 time in total.



08 Jun 2018 10:21
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08: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 11:33
Profile
Junior

Joined: 06 Jun 2018 04: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 11297 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 11297 times ]
File comment: ms dos rs232 Commchk v1.8 Serial protocol analizer. HEX ASCII input output
COMCHK18.zip [30.2 KiB]
Downloaded 440 times
08 Jun 2018 12:31
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08: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 15:17
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08: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 04:21
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Было у меня что-то похожее 15 лет назад :mrgreen:

Image

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

_________________
:dj: https://mastodon.social/@Shaos


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

Joined: 21 Oct 2009 08: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 05:16
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08: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 9932 times ]

_________________
iLavr


17 Jul 2019 12:37
Profile
Admin
User avatar

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

_________________
:dj: https://mastodon.social/@Shaos


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

Joined: 21 Oct 2009 08: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 01:43
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08: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 11:41
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Lavr wrote:
To есть, так получается, что ASCII Serial KeyBoard - это "кто во что горазд"? :roll:

Я имел ввиду пальмовые клавки - они стопудово кто во что...

_________________
:dj: https://mastodon.social/@Shaos


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

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
rw6hrm wrote:
...как показало гугление, альтернативный ввод до сих пор используется достаточно активно, в том числе и в онлайн-кассах (сканеры штрих-кодов в частности).
...
Исходя из этого не думаю, что получится найти в недрах Сети что-то универсальное, ...

В общем-то в недрах Сети что-то универсальное уже найдено и даже не в одном экземпляре.
Мелкомягкие почему-то решили, начиная с Висты, свалить поддержку альтернативных устройств
на сторонних производителей, а у себя вставили на это место голосовую поддержку...
При этом сами же M$ в своём "трабблшуттинге" дают рекомендации - какой сторонний бесплатный
софт способен на поддержку альтернативных устройств ввода.

В лоб я вижу решение только такое: у меня 2 ноутбука с Вендой 98 и Вендой 7. Венда 98 поддерживает
альтернатиные устройства - соединить нутбуки по COM-портам и запустить под Вендой 7 терминалку.
Через терминалку подавать коды и смотреть, как на них реагирует драйвер ввода с альтернативных
устройств под Вендой 98...
Только вот хотелось этого гимора избежать... :-?


P.S. Еще один вариант перекодировки PS/2 -> ASCII нашел вот здесь:
http://wearcam.org/seatsale/programs/www.beyondlogic.org/keyboard/keybrd.htm

_________________
iLavr


19 Jul 2019 07:21
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 50 posts ]  Go to page Previous  1, 2, 3, 4  Next

Who is online

Users browsing this forum: No registered users and 29 guests


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.