| datapipe = new_Pipe(dev, 3, endpoint, 1, 8, interval); | datapipe = new_Pipe(dev, 3, endpoint, 1, 8, interval); | ||||
| datapipe->callback_function = callback; | datapipe->callback_function = callback; | ||||
| queue_Data_Transfer(datapipe, report, 8, this); | queue_Data_Transfer(datapipe, report, 8, this); | ||||
| mk_setup(setup, 0x21, 10, 0, 0, 0); // 10=SET_IDLE | |||||
| mk_setup(setup, 0x21, 11, 0, 0, 0); // 11=SET_PROTOCOL BOOT | |||||
| queue_Control_Transfer(dev, &setup, NULL, this); | queue_Control_Transfer(dev, &setup, NULL, this); | ||||
| return true; | return true; | ||||
| } | } | ||||
| void KeyboardController::control(const Transfer_t *transfer) | void KeyboardController::control(const Transfer_t *transfer) | ||||
| { | { | ||||
| println("control callback (keyboard)"); | |||||
| print_hexbytes(transfer->buffer, transfer->length); | |||||
| // To decode hex dump to human readable HID report summary: | |||||
| // http://eleccelerator.com/usbdescreqparser/ | |||||
| uint32_t mesg = transfer->setup.word1; | |||||
| println(" mesg = ", mesg, HEX); | |||||
| if (mesg == 0x001021 && transfer->length == 0) { // SET_PROTOCOL | |||||
| mk_setup(setup, 0x21, 10, 0, 0, 0); // 10=SET_IDLE | |||||
| queue_Control_Transfer(device, &setup, NULL, this); | |||||
| } | |||||
| } | } | ||||
| void KeyboardController::callback(const Transfer_t *transfer) | void KeyboardController::callback(const Transfer_t *transfer) |