]> git.donarmstrong.com Git - kiibohd-controller.git/commitdiff
Adding timeout to virtual serial port writes
authorJacob Alexander <haata@kiibohd.com>
Sat, 4 Oct 2014 21:50:42 +0000 (14:50 -0700)
committerJacob Alexander <haata@kiibohd.com>
Sat, 4 Oct 2014 21:50:42 +0000 (14:50 -0700)
- Was causing lock-ups until the serial port was read
- Also checking each of the NKRO key types in each send loop

Output/pjrcUSB/avr/usb_keyboard_serial.c

index 9c2324ee3437e6722556e11de9e70ae0cb0d30c2..260733d53b491521f5ccd4571eabdb98c172cd20 100644 (file)
@@ -114,7 +114,7 @@ inline void usb_keyboard_send()
                        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 @@ inline void usb_keyboard_send()
                        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 @@ inline void usb_keyboard_send()
                        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 @@ inline void usb_keyboard_send()
                        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 @@ inline void usb_keyboard_send()
                        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 @@ void usb_serial_flush_input()
 }
 
 // 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 @@ int8_t usb_serial_putchar(uint8_t c)
 
 // 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 @@ int8_t usb_serial_putchar_nowait(uint8_t c)
 // 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 @@ int8_t usb_serial_write(const char *buffer, uint16_t size)
        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 @@ int8_t usb_serial_write(const char *buffer, uint16_t size)
                }
                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 @@ int8_t usb_serial_write(const char *buffer, uint16_t size)
 // 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 @@ uint8_t usb_serial_get_control()
 // 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;