diff --git a/build/hyperx_kb_rgb.uf2 b/build/hyperx_kb_rgb.uf2 index fce9bd0..1afa1fd 100644 Binary files a/build/hyperx_kb_rgb.uf2 and b/build/hyperx_kb_rgb.uf2 differ diff --git a/hyperx_elite2.c b/hyperx_elite2.c index 5103cdf..85c6430 100644 --- a/hyperx_elite2.c +++ b/hyperx_elite2.c @@ -6,7 +6,6 @@ #include "hyperx_elite2.h" -static bool sending = false; static absolute_time_t lastSend; static absolute_time_t lastRead; static bool backlight = false; @@ -42,10 +41,10 @@ void rgb_task(uint8_t dev_addr) { // the RGB protocol used by HyperX sends individual key RGB data in // multiple packets // the code here will determine if we are in the middle of sending - // updated color info (sending==true) and continue to send the next + // updated color info (packets_sent>0) and continue to send the next // packet if so at a rate of one packet every 20ms - // otherwise, wait 1s before sending the next set of color packets - if (sending) { + // otherwise, wait 0.5s before sending the next set of color packets + if (packets_sent>0) { if ( absolute_time_diff_us(lastSend, get_absolute_time()) >= 20000) { if( backlight) { send_color(dev_addr, 0x20, 0x20, 0x20); @@ -140,8 +139,8 @@ static void send_color(uint8_t dev_addr, uint8_t red, uint8_t green, uint8_t blu packets_sent++; } } else { - // mark that sending of a full round of color packets completed - sending=false; + // a full round of color packets completed, reset packets to 0 + packets_sent=0; } } } @@ -161,9 +160,8 @@ static void send_initial(uint8_t dev_addr) { if (tuh_hid_set_report(dev_addr, 0, 0, HID_REPORT_TYPE_FEATURE, buf, BUF_SIZE)) { - // we have begun sending packets, so set flag to continue sending - // packets at regular intervals - sending = true; + // we have begun sending packets, so indicate first packet was sent + // remaining packets will be sent at regular intervals packets_sent=1; } } diff --git a/usb_device.c b/usb_device.c index 0ce47bb..4aa0873 100644 --- a/usb_device.c +++ b/usb_device.c @@ -73,7 +73,7 @@ void usb_device_main(void) { break; case DEVICE_RESTART: if (tud_disconnect()) { - sleep_ms(100); + sleep_ms(10); if (tud_connect()) { if ( host_state == HOST_INACTIVE ) { device_state = DEVICE_INACTIVE; diff --git a/usb_host.c b/usb_host.c index ee005df..4e28179 100644 --- a/usb_host.c +++ b/usb_host.c @@ -16,7 +16,6 @@ host_state_t host_state; struct report_desc *descriptors; uint8_t num_mounted=0; static absolute_time_t request_time; -static struct report_data *report; static bool enabled=false; static uint8_t kb_addr=0; @@ -91,7 +90,7 @@ void tuh_hid_mount_cb(uint8_t dev_addr, uint8_t instance, uint8_t const* desc_re cdc_count = sprintf(cdc_buf, "Mount: [%04x:%04x][%u:%u] Protocol = %u\n", vid, pid, dev_addr, instance, itf_protocol); tud_cdc_write(cdc_buf, cdc_count); - + // enable RGB control if HyperX Elite 2 is mounted if (vid==HYPERX_KEYBOARD_VID && pid==HYPERX_ELITE2_PID) { kb_addr = dev_addr; enabled = true; @@ -119,6 +118,7 @@ void tuh_hid_umount_cb(uint8_t dev_addr, uint8_t instance) remove_instance(dev_addr, instance); if (dev_addr == kb_addr) { enabled = false; + kb_addr=0; } num_mounted--; host_state=HOST_UNMOUNTED; diff --git a/usb_host.h b/usb_host.h index b37dba3..5137902 100644 --- a/usb_host.h +++ b/usb_host.h @@ -23,15 +23,7 @@ struct report_desc { bool listening; }; -struct report_data { - uint8_t dev_addr; - uint8_t instance; - uint8_t report[REPORT_MAX_SIZE]; - uint16_t len; -}; - #define REPORT_DESC_ALLOC() (struct report_desc *)malloc(sizeof(struct report_desc)) -#define REPORT_DATA_ALLOC() (struct report_data *)malloc(sizeof(struct report_data)) extern host_state_t host_state; extern struct report_desc *descriptors;