diff --git a/hyperx_elite2.c b/hyperx_elite2.c index e225b08..35e25ca 100644 --- a/hyperx_elite2.c +++ b/hyperx_elite2.c @@ -360,11 +360,15 @@ void startADC() { // forward HID report after processing bool forward_report(uint8_t instance, uint8_t const* report, uint16_t len) { - if (instance == 0x01 && report[0] == 0x03 && report[1] == 0xE2) { - mute = !mute; + if (device_state == DEVICE_ACTIVE ) { + if (instance == 0x01 && report[0] == 0x03 && report[1] == 0xE2) { + mute = !mute; + } + + return tud_hid_n_report(instance, 0, report, len); } - return tud_hid_n_report(instance, 0, report, len); + return true; } // save RGB configuration to flash diff --git a/usb_device.c b/usb_device.c index cc267a3..17040c2 100644 --- a/usb_device.c +++ b/usb_device.c @@ -75,19 +75,17 @@ void usb_device_main(void) { while (true) { switch ( device_state ) { case DEVICE_ACTIVE: + if (!tud_mounted()) { + device_state = DEVICE_INACTIVE; + } break; case DEVICE_INACTIVE: break; case DEVICE_RESTART: if (tud_disconnect()) { + device_state = DEVICE_INACTIVE; sleep_ms(10); - if (tud_connect()) { - if ( host_state == HOST_INACTIVE ) { - device_state = DEVICE_INACTIVE; - } else { - device_state = DEVICE_ACTIVE; - } - } + tud_connect(); } break; default: @@ -214,7 +212,6 @@ uint8_t const * tud_hid_descriptor_report_cb(uint8_t itf) return NULL; } - // Invoked when received SET_REPORT control request or // received data on OUT endpoint ( Report ID = 0, Type = 0 ) void tud_hid_set_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize) { @@ -238,6 +235,11 @@ uint16_t tud_hid_get_report_cb(uint8_t instance, uint8_t report_id, hid_report_t return 0; } +// Invoked when device is mounted +void tud_mount_cb(void) { + device_state = DEVICE_ACTIVE; +} + // print message to CDC in raw hex void cdc_print_hex(uint8_t const* msg, uint16_t msg_len) { (void) msg;