]> git.donarmstrong.com Git - kiibohd-controller.git/commitdiff
Fixed bug with standalone UART CLI
authorJacob Alexander <haata@kiibohd.com>
Sat, 28 Jun 2014 21:12:56 +0000 (14:12 -0700)
committerJacob Alexander <haata@kiibohd.com>
Sat, 28 Jun 2014 21:12:56 +0000 (14:12 -0700)
- Sending characters to the UART before it's ready would overflow the buffer causing it to hang
- Added a check to make sure the interface is ready before starting to send characters
- Removed the incorrect check for the usbMuxUart to make sure usb is ready before sending over the uart

CMakeLists.txt
Output/uartOut/arm/uart_serial.c
Output/uartOut/output_com.c
Output/usbMuxUart/output_com.c

index 8360750233fa69ca3aca0b48083ea0f4674c452c..7cae1d35daf1d99575e669959ff88aa1c938f631 100644 (file)
@@ -53,7 +53,7 @@ set(   ScanModule "MDPure" )
 set(  MacroModule "PartialMap" )
 
 ##| Sends the current list of usb key codes through USB HID
-set( OutputModule "usbMuxUart" )
+set( OutputModule "uartOut" )
 
 ##| Debugging source to use, each module has it's own set of defines that it sets
 set(  DebugModule "full" )
index 0b807c863e31009a41088d2c8e9febf222820133..461ef0d4b612435f8c734a134951bec635be4546 100644 (file)
@@ -32,6 +32,9 @@ volatile uint8_t uart0_buffer_tail = 0;
 volatile uint8_t uart0_buffer_items = 0;
 volatile uint8_t uart0_buffer[uart0_buffer_size];
 
+volatile uint8_t uart_configured = 0;
+
+
 
 // ----- Interrupt Functions -----
 
@@ -84,10 +87,14 @@ void uart0_status_isr()
 }
 
 
+
 // ----- Functions -----
 
 void uart_serial_setup()
 {
+       // Indication that the UART is not ready yet
+       uart_configured = 0;
+
        // Setup the the UART interface for keyboard data input
        SIM_SCGC4 |= SIM_SCGC4_UART0; // Disable clock gating
 
@@ -133,12 +140,18 @@ void uart_serial_setup()
 
        // Add interrupt to the vector table
        NVIC_ENABLE_IRQ( IRQ_UART0_STATUS );
+
+       // UART is now ready to use
+       uart_configured = 1;
 }
 
 
 // Get the next character, or -1 if nothing received
 int uart_serial_getchar()
 {
+       if ( !uart_configured )
+               return -1;
+
        unsigned int value = -1;
 
        // Check to see if the FIFO has characters
@@ -177,6 +190,9 @@ void uart_serial_flush_input()
 // Transmit a character.  0 returned on success, -1 on error
 int uart_serial_putchar( uint8_t c )
 {
+       if ( !uart_configured )
+               return -1;
+
        while ( !( UART0_SFIFO & UART_SFIFO_TXEMPT ) ); // Wait till there is room to send
        UART0_D = c;
 
@@ -186,6 +202,9 @@ int uart_serial_putchar( uint8_t c )
 
 int uart_serial_write( const void *buffer, uint32_t size )
 {
+       if ( !uart_configured )
+               return -1;
+
        const uint8_t *data = (const uint8_t *)buffer;
        uint32_t position = 0;
 
index 37cadc51be864c7ef944196e657b0c75f4b7bb78..16fd892412ef5fb1fa9cef1c7b13043bbc1155a8 100644 (file)
@@ -31,7 +31,6 @@
 
 // USB Includes
 #if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_)
-#include "avr/uart_serial.h"
 #elif defined(_mk20dx128_) || defined(_mk20dx128vlf5_) || defined(_mk20dx256_)
 #include "arm/uart_serial.h"
 #endif
@@ -118,7 +117,6 @@ inline void Output_send(void)
 inline void Output_firmwareReload()
 {
 #if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_)
-       uart_debug_reload();
 #elif defined(_mk20dx128_) || defined(_mk20dx128vlf5_) || defined(_mk20dx256_)
        uart_device_reload();
 #endif
@@ -136,8 +134,6 @@ inline unsigned int Output_availablechar()
 inline int Output_getchar()
 {
 #if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_)
-       // XXX Make sure to check output_availablechar() first! Information is lost with the cast (error codes)
-       return (int)uart_serial_getchar();
 #elif defined(_mk20dx128_) || defined(_mk20dx128vlf5_) || defined(_mk20dx256_)
        return uart_serial_getchar();
 #endif
@@ -155,7 +151,6 @@ inline int Output_putchar( char c )
 inline int Output_putstr( char* str )
 {
 #if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) // AVR
-       uint16_t count = 0;
 #elif defined(_mk20dx128_) || defined(_mk20dx128vlf5_) || defined(_mk20dx256_) // ARM
        uint32_t count = 0;
 #endif
@@ -171,7 +166,6 @@ inline int Output_putstr( char* str )
 inline void Output_softReset()
 {
 #if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_)
-       uart_debug_software_reset();
 #elif defined(_mk20dx128_) || defined(_mk20dx128vlf5_) || defined(_mk20dx256_)
        SOFTWARE_RESET();
 #endif
index daf601da8f8fc055120df0b7b7d962b6ab39abfe..5011ece150ea47341a5e7682074337f2945f32de 100644 (file)
@@ -203,12 +203,8 @@ inline int Output_putstr( char* str )
        while ( str[count] != '\0' )
                count++;
 
-       // Make sure USB is configured first
-       if ( usb_configured() )
-       {
-               // First send to UART
-               uart_serial_write( str, count );
-       }
+       // First send to UART
+       uart_serial_write( str, count );
 
        // Then send to USB
        return usb_serial_write( str, count );