HID коды сканирования всегда 8-битные. Комбинации клавиш, такие как left- CTRL + ‹, в данном случае, представляют собой последовательность« ключевого модификатора »(0x01 для left- CTRL ) и код клавиши (0x36 для ‹,).
Поскольку 0x0136 оказывается равным 310 10, было бы ошибкой думать о последовательностях многобайтовых кодов сканирования как о единственном целом числе, а не о последовательности байтов по ряду причин:
- целочисленный байт для архитектуры машины может не совпадать с байтом, определенным для последовательностей кода HID,
- В отчете HID-клавиатуры есть один байт модификатора клавиши и до шести кодов клавиш - для комбинаций до 6 обычных клавиш и восьми битов модификатора для комбинаций shift, alt, ctrl и т. Д., Нажатых одновременно,
- В отчете о клавиатуре HID есть «зарезервированный» байт между модификатором и первым кодом клавиши в любом случае, поэтому 0x01 и 0x36 не являются смежными в любом случае, независимо от порядка байтов машины.
В случае кодов сканирования HID ваш 310 10 находится в Фактически два байта 0x01 и 0x36 (в шестнадцатеричном формате). Говоря о последовательностях байтов, более естественно использовать шестнадцатеричную нотацию - особенно в случае модификатора, который представляет собой битовую маску для нескольких клавиш shift / ctrl и т. Д. 0x36 представляет собой ключ ‹,, а 0x01 - это ключевой модификатор для left- CTRL.
Если ваше значение 310 было усечено, когда вы присвоили его 16-битному целому числу, скорее всего, вы передали его как одно значение интерфейсу, который ожидал uint8_t
. Но, как объяснялось выше, отправка 16-битного целого числа в любом случае неверна.
Вместо того, чтобы отправлять 0x0136 или 310 10, вам нужно отправить последовательность байтов, чтобы сформировать действительный отчет с клавиатуры, как описано дескриптором отчета с клавиатуры вашего устройства. В отчете HID-клавиатуры первый байт - это «маска модификатора» (0x01 / left- CTRL), второй байт зарезервирован, затем есть до 6 кодов клавиш (что позволяет использовать несколько клавиш комбинации) фактическое количество поддерживаемых ключей и, следовательно, длина отчета определяется дескриптором отчета.
Глядя на API в демонстрации HID, которую вы связали, становится ясно, что все это абстрагировано, и кажется, что вам действительно нужно сделать что-то вроде:
uint8_t key = HID_KEY_COMMA ;
esp_hidd_send_keyboard_value( hid_conn_id, LEFT_CONTROL_KEY_MASK, &key, 1 ) ;
Обратите внимание, что модификатор - это битовая маска, допускающая любую комбинацию клавиш-модификаторов, например LEFT_CONTROL_KEY_MASK|RIGHT_CONTROL_KEY_MASK
. HID будет использовать это, чтобы указать несколько сдвигов, но получатель может использовать его, чтобы разрешить левую или правую клавиши без различия.
person
Clifford
schedule
24.05.2019
155
. Двоичный0011 0110
является десятичным54
. Десятичное число155
составляет половину требуемого310
, так что вы что-то упустили? - person Weather Vane   schedule 24.05.2019CTRL+,
?. Затем, возможно, представил ваши неудачные попытки в коде (не описания кода). Вместо этого вы придумали ошибочное решение и спросили, в чем проблема, связанная с решением, и скрывая, чего вы действительно хотите достичь. Возможно, есть о чем подумать в следующий раз. - person Clifford   schedule 25.05.2019