Loop based vusb_transfer_keyboard
This commit is contained in:
		
				
					committed by
					
						 Jack Humbert
						Jack Humbert
					
				
			
			
				
	
			
			
			
						parent
						
							8a27703ef4
						
					
				
				
					commit
					095b28e006
				
			| @@ -27,6 +27,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| #include "host_driver.h" | ||||
| #include "vusb.h" | ||||
| #include "bootloader.h" | ||||
| #include <util/delay.h> | ||||
|  | ||||
|  | ||||
| static uint8_t vusb_keyboard_leds = 0; | ||||
| @@ -46,22 +47,26 @@ typedef struct { | ||||
|  | ||||
| static keyboard_report_t keyboard_report; // sent to PC | ||||
|  | ||||
| #define VUSB_TRANSFER_KEYBOARD_MAX_TRIES 10 | ||||
|  | ||||
| /* transfer keyboard report from buffer */ | ||||
| void vusb_transfer_keyboard(void) | ||||
| { | ||||
|     if (usbInterruptIsReady()) { | ||||
|         if (kbuf_head != kbuf_tail) { | ||||
|             usbSetInterrupt((void *)&kbuf[kbuf_tail], sizeof(report_keyboard_t)); | ||||
|             kbuf_tail = (kbuf_tail + 1) % KBUF_SIZE; | ||||
|             if (debug_keyboard) { | ||||
|                 print("V-USB: kbuf["); pdec(kbuf_tail); print("->"); pdec(kbuf_head); print("]("); | ||||
|                 phex((kbuf_head < kbuf_tail) ? (KBUF_SIZE - kbuf_tail + kbuf_head) : (kbuf_head - kbuf_tail)); | ||||
|                 print(")\n"); | ||||
|     for (int i = 0; i < VUSB_TRANSFER_KEYBOARD_MAX_TRIES; i++) { | ||||
|         if (usbInterruptIsReady()) { | ||||
|             if (kbuf_head != kbuf_tail) { | ||||
|                 usbSetInterrupt((void *)&kbuf[kbuf_tail], sizeof(report_keyboard_t)); | ||||
|                 kbuf_tail = (kbuf_tail + 1) % KBUF_SIZE; | ||||
|                 if (debug_keyboard) { | ||||
|                     print("V-USB: kbuf["); pdec(kbuf_tail); print("->"); pdec(kbuf_head); print("]("); | ||||
|                     phex((kbuf_head < kbuf_tail) ? (KBUF_SIZE - kbuf_tail + kbuf_head) : (kbuf_head - kbuf_tail)); | ||||
|                     print(")\n"); | ||||
|                 } | ||||
|             } | ||||
|             break; | ||||
|         } | ||||
|     } else { | ||||
|       usbPoll(); | ||||
|       vusb_transfer_keyboard(); | ||||
|         usbPoll(); | ||||
|         _delay_ms(1); | ||||
|     } | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user