Блютус клавиатура iOS не регистрирует VoiceOver control + одновременное нажатие клавиши опции / (CTRL + ALT) - PullRequest
0 голосов
/ 07 июня 2019

Я создаю 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

1 Ответ

0 голосов
/ 08 июня 2019

В конце концов я нашел этот старый вопрос о переполнении стека, который касался точно такой же проблемы. Этот ответ решил проблему: https://stackoverflow.com/a/24910560/5479787

Оказывается, я был очень близок со вторым блоком кода, но недостаточно близко:)

...