Mercurial > louis > kiibohd-controller
changeset 240:f0d97a9a4c1b
Adding timeout to virtual serial port writes
- Was causing lock-ups until the serial port was read
- Also checking each of the NKRO key types in each send loop
author | Jacob Alexander <haata@kiibohd.com> |
---|---|
date | Sat, 04 Oct 2014 14:50:42 -0700 |
parents | 2a4c99da1276 |
children | 9f62492034c7 |
files | Output/pjrcUSB/avr/usb_keyboard_serial.c |
diffstat | 1 files changed, 12 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/Output/pjrcUSB/avr/usb_keyboard_serial.c Thu Oct 02 22:09:34 2014 -0700 +++ b/Output/pjrcUSB/avr/usb_keyboard_serial.c Sat Oct 04 14:50:42 2014 -0700 @@ -114,7 +114,7 @@ USBKeys_Changed &= ~USBKeyChangeState_Modifiers; // Mark sent } // Check main key section - else if ( USBKeys_Changed & USBKeyChangeState_MainKeys ) + if ( USBKeys_Changed & USBKeyChangeState_MainKeys ) { UEDATX = 0x03; // ID @@ -127,7 +127,7 @@ USBKeys_Changed &= ~USBKeyChangeState_MainKeys; // Mark sent } // Check secondary key section - else if ( USBKeys_Changed & USBKeyChangeState_SecondaryKeys ) + if ( USBKeys_Changed & USBKeyChangeState_SecondaryKeys ) { UEDATX = 0x04; // ID @@ -140,7 +140,7 @@ USBKeys_Changed &= ~USBKeyChangeState_SecondaryKeys; // Mark sent } // Check tertiary key section - else if ( USBKeys_Changed & USBKeyChangeState_TertiaryKeys ) + if ( USBKeys_Changed & USBKeyChangeState_TertiaryKeys ) { UEDATX = 0x05; // ID @@ -153,7 +153,7 @@ USBKeys_Changed &= ~USBKeyChangeState_TertiaryKeys; // Mark sent } // Check system control keys - else if ( USBKeys_Changed & USBKeyChangeState_System ) + if ( USBKeys_Changed & USBKeyChangeState_System ) { UEDATX = 0x06; // ID UEDATX = USBKeys_SysCtrl; @@ -162,7 +162,7 @@ USBKeys_Changed &= ~USBKeyChangeState_System; // Mark sent } // Check consumer control keys - else if ( USBKeys_Changed & USBKeyChangeState_Consumer ) + if ( USBKeys_Changed & USBKeyChangeState_Consumer ) { UEDATX = 0x07; // ID UEDATX = (uint8_t)(USBKeys_ConsCtrl & 0x00FF); @@ -253,7 +253,7 @@ } // transmit a character. 0 returned on success, -1 on error -int8_t usb_serial_putchar(uint8_t c) +int8_t usb_serial_putchar( uint8_t c ) { uint8_t timeout, intr_state; @@ -304,7 +304,7 @@ // transmit a character, but do not wait if the buffer is full, // 0 returned on success, -1 on buffer full or error -int8_t usb_serial_putchar_nowait(uint8_t c) +int8_t usb_serial_putchar_nowait( uint8_t c ) { uint8_t intr_state; @@ -338,7 +338,7 @@ // controller in the PC will not allocate bandwitdh without a pending read request. // (thanks to Victor Suarez for testing and feedback and initial code) -int8_t usb_serial_write(const char *buffer, uint16_t size) +int8_t usb_serial_write( const char *buffer, uint16_t size ) { uint8_t timeout, intr_state, write_size; @@ -351,7 +351,7 @@ cli(); UENUM = CDC_TX_ENDPOINT; // if we gave up due to timeout before, don't wait again - /* + if (transmit_previous_timeout) { if (!(UEINTX & (1<<RWAL))) { SREG = intr_state; @@ -359,7 +359,7 @@ } transmit_previous_timeout = 0; } - */ + // each iteration of this loop transmits a packet while (size) { // wait for the FIFO to be ready to accept data @@ -474,7 +474,7 @@ // This doesn't actually transmit the data - that is impossible! // USB devices only transmit when the host allows, so the best // we can do is release the FIFO buffer for when the host wants it -void usb_serial_flush_output(void) +void usb_serial_flush_output() { uint8_t intr_state; @@ -521,7 +521,7 @@ // it remains buffered (either here or on the host) and can not be // lost because you weren't listening at the right time, like it // would in real serial communication. -int8_t usb_serial_set_control(uint8_t signals) +int8_t usb_serial_set_control( uint8_t signals ) { uint8_t intr_state;