(Arduino Uno перепрошил как USB HID) Как отправить клавишу Scroll Lock? - PullRequest
0 голосов
/ 29 апреля 2019

Мне трудно использовать USB HID-буферы, и я хочу отправить клавишу блокировки прокрутки, когда нажимаю кнопку.

Я попытался отправить то, что я считал блокировкой прокрутки (0x47), и вместо этого он посылает клавиши ctrl, left alt и right alt. Я использовал таблицу здесь для справки: https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf

Это свободно основано на http://mitchtech.net/arduino-usb-hid-keyboard/

/* Arduino USB Keyboard HID demo
 * Cut/Copy/Paste Keys
 */

#define SCRLCK  0x47
//#define KEY_LEFT_SHIFT  0x02
//#define KEY_RIGHT_CTRL  0x10
//#define KEY_RIGHT_SHIFT 0x20

uint8_t buf[8] = { 
  0 };  /* Keyboard report buffer */

#define PIN_PTT 2
//#define PIN_CUT 6
//#define PIN_PASTE 7

int state = 1;
int prevState;

void setup() 
{
  Serial.begin(9600);

  pinMode(PIN_PTT, INPUT);
  //pinMode(PIN_CUT, INPUT);
  //pinMode(PIN_PASTE, INPUT);
  // Enable internal pull-ups
  digitalWrite(PIN_PTT, 1); 
  //digitalWrite(PIN_CUT, 1);
  //digitalWrite(PIN_PASTE, 1); 

  delay(200);
}

void loop() 
{
  state = digitalRead(PIN_PTT);
  if (prevState != state) {
    buf[0] = SCRLCK;   // Scroll Lock
    // buf[2] = 27;    // Letter X
    // buf[2] = 123;    // Cut key: Less portable
    Serial.write(buf, 8); // Send keypress
    prevState = state;
    releaseKey();
  } 
}

void releaseKey() 
{
  buf[0] = 0;
  Serial.write(buf, 8); // Release key  
  delay(100);
}

Я ожидаю отправки блокировки прокрутки, но после использования пароля KeyboardTest я вижу, что вместо этого отправляются ctrl, left alt и right alt.

1 Ответ

0 голосов
/ 30 апреля 2019

Вы должны отправить первый код клавиши, начиная со смещения 2:

buf [2] = SCRLCK;

Смещение 0 используется для флагов-модификаторов клавиш, таких как ctrl, alt и т. Д.

...