Arduino и светодиод Caps Lock

Alex_LMD
Offline
Зарегистрирован: 19.08.2020

Всем привет!

Уважаемые друзья, может кто либо из вас сталкивался с такой задачей.

Необходимо "превратить" ардуинку в эмулятор клавиатуры для подключения к ПК. Девайс должен отсылать в компьютер некую информацию. С этим особо проблем нет, библиотеки есть рабочие.

Но кроме этого при эмулировании клавиши Caps Lock Ардуино должна "поймать" ответ от ПК - активацию светодиода Caps Lock. Мы все знаем, что при включении функций Caps Lock, Num Lock и Scroll Lock на клавиатуре загораются светодиоды.

Меня очень интересует как поймать Ардуиной этот сигнал от ПК.

Заранее всем благодарен.

b707
Offline
Зарегистрирован: 26.05.2017

А кто вам сказал, что ПК посылает в клаву какие-то сигналы для зажигания светодиодов?

sadman41
Offline
Зарегистрирован: 19.10.2016

Во времена доса баловались "цветомузыкой" на светодиодах клавиатуры. Через BIOS можно было поджечь/потушить индикатор. Сейчас не знаю как, но винда тоже вроде предлагает активировать Num Lock при загрузке.

Alex_LMD
Offline
Зарегистрирован: 19.08.2020

Ну это мои предположения которые основаны на следующем:

- во многих БИОСах можно отключить зажигание светодиодов

- в Виндовс используя утилиты так же можно либо отключить либо переназначить светодиоды.

- в Линукс это вообще делается обычной правкой конфигов

- пробовали ли вы когда нибудь нажимать любую из этих трёх клавиш в тот момент когда компьютер только-только включается? Реакции на нажатие до определённого момента не будет (светодиоды не загоряться).

- я своими глазами видел некие эмуляторы к которым подключалась стандартная ЮСБ клавиатура и лампочки на которой этот эмулятор зажигал разными способами.

Из всего этого можно сделать предположение что ПК отправляет подтверждение активации этих функций (кнопок).

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Alex_LMD пишет:

Ну это мои предположения которые основаны на следующем:

 

Посмотри здесь - https://www.avrfreaks.net/forum/how-usb-keyboard-led-toggle

Green
Offline
Зарегистрирован: 01.10.2015

Хост не только светодиоды зажигает. Там ещё куча команд имеется: задание скорости автоповтора, выбор раскладки и пр.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

насколько я с децтва помню, на старых АТ клавиатурах, еще с DIN-5 разъёмами, унутре стоял 8051.  С тех пор, я думаю, мало что изменилось. 

__Alexander
Offline
Зарегистрирован: 24.10.2012

В LUFA в проекте Keyboard есть нужный callback:

void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo,
                                          const uint8_t ReportID,
                                          const uint8_t ReportType,
                                          const void* ReportData,
                                          const uint16_t ReportSize)
{
	uint8_t  LEDMask   = LEDS_NO_LEDS;
	uint8_t* LEDReport = (uint8_t*)ReportData;

	if (*LEDReport & HID_KEYBOARD_LED_NUMLOCK)
	  LEDMask |= LEDS_LED1;

	if (*LEDReport & HID_KEYBOARD_LED_CAPSLOCK)
	  LEDMask |= LEDS_LED3;

	if (*LEDReport & HID_KEYBOARD_LED_SCROLLLOCK)
	  LEDMask |= LEDS_LED4; 

 

Green
Offline
Зарегистрирован: 01.10.2015

DetSimen пишет:

насколько я с децтва помню, на старых АТ клавиатурах, еще с DIN-5 разъёмами, унутре стоял 8051.  С тех пор, я думаю, мало что изменилось. 

На АТ, PS/2 8042.

Alex_LMD
Offline
Зарегистрирован: 19.08.2020

Господа.

Благодарю всех отписавшихся.

__Alexander спасибо за информацию. Но для Ардуино это немного сложновато.

В общем, я нашёл вариант. Есть вот такая библиотека: https://github.com/NicoHood/HID

Здесь можно получать состояние светодиодов.

__Alexander
Offline
Зарегистрирован: 24.10.2012

Alex_LMD пишет:

__Alexander спасибо за информацию. Но для Ардуино это немного сложновато.

Это очень сложно. У меня вот заняло 4 минуты чтобы прошить pro micro и получить состояние caps lock.

yuhenotix@2p-ma...
Offline
Зарегистрирован: 09.06.2019

DetSimen пишет:

насколько я с децтва помню, на старых АТ клавиатурах, еще с DIN-5 разъёмами, унутре стоял 8051.  С тех пор, я думаю, мало что изменилось. 

ИзмИнИлАсЬ аБсалЮтНа ФСио, УсбЭ КлАвиаТурЫ ДажЕ нИкАкиХ сКан кАдоФ нИ пИРиДаЮт, таК  чтА ТваЙО ДетСтва сиЛьНа  ЗаТянУласЬ.

yuhenotix@2p-ma...
Offline
Зарегистрирован: 09.06.2019

Я такой затеей заморачивался, есть  реализации на V-USB, кроме  LUFA. Выявилась проблема. Почему-то  иногда комп  отправляет  состояние  светодиодов только на ту клавиатуру которая инициировала   загорание  светодиода, для начала воткните две  клавиатуры  USB (так же варианты PS2 клава +USB клава,   PS2 клава через USB адаптер + USB  клава) и посмотрите  будет ли загораться светодиод  в нужной вам программе   на второй (или первой) клавиатуре, при нажатии на другой. То есть ваша  хренька может быть бесполезна, конкретно  для вашей задумки, например если нажать  CL на другой клаве  ваше устройство ничего не узнает и  все пойдет не по плану:) А 100%ый  вариант  -  воткнуть ps2 клаву, врезаться  в ps2 кабель и ловить и передавать,  такие эмуляторы тоже есть. Но если в системе  будет  только одна ваша USB "клавиатура", проблем   никаких не возникнет.