Я создаю Bluetooth LE HID для навигации VoiceOver на iOS с помощью сочетаний клавиш.Аппаратное обеспечение - плата Adafruit Bluefruit LE 32u4.До сих пор я получил комбинации клавиш-модификаторов, работающих на других платформах (Android, Windows 10).Однако, когда я пытаюсь вызвать ярлык control-option-h, он не работает (используя CTRL + ALT в качестве модификаторов).На экране справки VoiceOver очень быстро отображаются «control», «option», «h».Как получить комбинацию клавиш control-option-h для регистрации одним нажатием?
Я использую библиотеку Adafruit Bluefruit LE nRF51 и отправляю ключи с помощью команд AT + BLEKEYBOARDCODE.
Когда я пытаюсь использовать другую комбинацию, такую как left_arrow-right_arrow, она отображается как одновременное нажатие.Индивидуально ключи прописываются правильно.Клавиша ALT регистрируется как ключ опции.
Я также попытался разбить прессы на отдельные пакеты, как показано ниже.На Android комбинации также работают, когда они помещены в один пакет.
Я возился с задержками на стороне 32u4, а также попытался увеличить «интервал повторения клавиш» в настройках iPhone, а также отключить его.полностью.
Код, который я использую, выглядит следующим образом, где data
- это массив из 8 uint8_t
.Клавиша control-option-h содержит данные {5, 0, 11, 0, 0, 0, 0, 0}
.(CTRL = 1, ALT = 4. 4 + 1 = 5. И клавиша H имеет код 11).
ble.atcommand("AT+BLEKEYBOARDCODE", data, 8);
/* Found this to be unnecessary on Android, on iOS I tried with and without
if (! ble.waitForOK() ) {
}*/
//release with all zeros
ble.atcommand("AT+BLEKEYBOARDCODE", (uint8_t*) &emptyArray, 8);
Поскольку это не сработало, я также попытался сначала нажать клавишу «Control», затем «Option», а затем'H' и только потом освобождает:
uint8_t mydata[8] = {0};
ble.atcommand("AT+BLEKEYBOARDCODE", mydata, 8);
delay(100);
mydata[0] = 1;
ble.atcommand("AT+BLEKEYBOARDCODE", mydata, 8);
delay(100);
mydata[0] = 5;
ble.atcommand("AT+BLEKEYBOARDCODE", mydata, 8);
delay(100);
mydata[2] = 11;
ble.atcommand("AT+BLEKEYBOARDCODE", mydata, 8);
delay(200);
mydata[0] = 0;
mydata[2] = 0;
ble.atcommand("AT+BLEKEYBOARDCODE", mydata, 8);
delay(100);
Что должно имитировать более естественный способ, которым человек будет нажимать комбинацию клавиш, но, увы, оно тоже не сработало.
Как описано вышекомбинация отображается как быстрое последовательное нажатие клавиши вместо одного одновременного нажатия.Я в недоумении о том, как действовать дальше и нахожу странным, что он работает на Android.IPhone, на котором я тестирую, имеет iOS 11.4.1.Любые идеи, какие ресурсы я должен изучить?
Большое спасибо за чтение всего вопроса, -Gijs