diff options
Diffstat (limited to 'protocol/pjrc/usb.c')
| -rw-r--r-- | protocol/pjrc/usb.c | 22 | 
1 files changed, 14 insertions, 8 deletions
diff --git a/protocol/pjrc/usb.c b/protocol/pjrc/usb.c index 393b36f78..1e6ba8719 100644 --- a/protocol/pjrc/usb.c +++ b/protocol/pjrc/usb.c @@ -38,6 +38,7 @@  #include "sleep_led.h"  #endif  #include "suspend.h" +#include "action.h"  #include "action_util.h" @@ -628,6 +629,7 @@ uint8_t usb_configured(void)  void usb_remote_wakeup(void)  {      UDCON |= (1<<RMWKUP); +    while (UDCON & (1<<RMWKUP));  } @@ -692,20 +694,20 @@ ISR(USB_GEN_vect)  		}                  /* TODO: should keep IDLE rate on each keyboard interface */  #ifdef NKRO_ENABLE -		if (!keyboard_nkro && usb_keyboard_idle_config && (++div4 & 3) == 0) { +		if (!keyboard_nkro && keyboard_idle && (++div4 & 3) == 0) {  #else -		if (usb_keyboard_idle_config && (++div4 & 3) == 0) { +		if (keyboard_idle && (++div4 & 3) == 0) {  #endif  			UENUM = KBD_ENDPOINT;  			if (UEINTX & (1<<RWAL)) {  				usb_keyboard_idle_count++; -				if (usb_keyboard_idle_count == usb_keyboard_idle_config) { +				if (usb_keyboard_idle_count == keyboard_idle) {  					usb_keyboard_idle_count = 0;                                          /* TODO: fix keyboard_report inconsistency */  /* To avoid Mac SET_IDLE behaviour.  					UEDATX = keyboard_report_prev->mods;  					UEDATX = 0; -                                        uint8_t keys = usb_keyboard_protocol ? KBD_REPORT_KEYS : 6; +                                        uint8_t keys = keyboard_protocol ? KBD_REPORT_KEYS : 6;  					for (uint8_t i=0; i<keys; i++) {  						UEDATX = keyboard_report_prev->keys[i];  					} @@ -901,13 +903,13 @@ ISR(USB_COM_vect)  				}  				if (bRequest == HID_GET_IDLE) {  					usb_wait_in_ready(); -					UEDATX = usb_keyboard_idle_config; +					UEDATX = keyboard_idle;  					usb_send_in();  					return;  				}  				if (bRequest == HID_GET_PROTOCOL) {  					usb_wait_in_ready(); -					UEDATX = usb_keyboard_protocol; +					UEDATX = keyboard_protocol;  					usb_send_in();  					return;  				} @@ -921,14 +923,18 @@ ISR(USB_COM_vect)  					return;  				}  				if (bRequest == HID_SET_IDLE) { -					usb_keyboard_idle_config = (wValue >> 8); +					keyboard_idle = (wValue >> 8);  					usb_keyboard_idle_count = 0;  					//usb_wait_in_ready();  					usb_send_in();  					return;  				}  				if (bRequest == HID_SET_PROTOCOL) { -					usb_keyboard_protocol = wValue; +					keyboard_protocol = wValue; +#ifdef NKRO_ENABLE +                                        keyboard_nkro = !!keyboard_protocol; +#endif +                                        clear_keyboard();  					//usb_wait_in_ready();  					usb_send_in();  					return;  | 
