Mercurial > louis > kiibohd-controller
diff Scan/UARTConnect/connect_scan.c @ 390:a3825c7fc651
Adding remote capability LED control
- Works for all nodes in chain
- Synchronized to 30 ms update rate (required for ISSI chip)
* Interconnect cannot handle full update speed from Scan module
* Though it should be able to handle quite a bit more than 30 ms updates
author | Jacob Alexander <haata@kiibohd.com> |
---|---|
date | Fri, 16 Oct 2015 10:02:01 -0700 |
parents | fc2c2a1e9615 |
children | e7a3be42ae1e |
line wrap: on
line diff
--- a/Scan/UARTConnect/connect_scan.c Thu Oct 15 00:16:36 2015 -0700 +++ b/Scan/UARTConnect/connect_scan.c Fri Oct 16 10:02:01 2015 -0700 @@ -42,34 +42,6 @@ // ----- Macros ----- -// Macro for adding to each uart Tx ring buffer -#define uart_addTxBuffer( uartNum ) \ -case uartNum: \ - /* Delay UART copy until there's some space left */ \ - while ( uart_tx_buf[ uartNum ].items + count > UART_Buffer_Size ) \ - { \ - warn_msg("Too much data to send on UART0, waiting..."); \ - delay( 1 ); \ - } \ - /* Append data to ring buffer */ \ - for ( uint8_t c = 0; c < count; c++ ) \ - { \ - if ( Connect_debug ) \ - { \ - printHex( buffer[ c ] ); \ - print( " +" #uartNum NL ); \ - } \ - uart_tx_buf[ uartNum ].buffer[ uart_tx_buf[ uartNum ].tail++ ] = buffer[ c ]; \ - uart_tx_buf[ uartNum ].items++; \ - if ( uart_tx_buf[ uartNum ].tail >= UART_Buffer_Size ) \ - uart_tx_buf[ uartNum ].tail = 0; \ - if ( uart_tx_buf[ uartNum ].head == uart_tx_buf[ uartNum ].tail ) \ - uart_tx_buf[ uartNum ].head++; \ - if ( uart_tx_buf[ uartNum ].head >= UART_Buffer_Size ) \ - uart_tx_buf[ uartNum ].head = 0; \ - } \ - break - // Macro for popping from Tx ring buffer #define uart_fillTxFifo( uartNum ) \ { \ @@ -233,14 +205,41 @@ return; } - // Choose the uart - switch ( uart ) + // Invalid UART + if ( uart >= UART_Num_Interfaces ) + { + erro_print("Invalid UART to send from..."); + return; + } + + // Delay UART copy until there's some space left + while ( uart_tx_buf[ uart ].items + count > UART_Buffer_Size ) { - uart_addTxBuffer( UART_Master ); - uart_addTxBuffer( UART_Slave ); - default: - erro_msg("Invalid UART to send from..."); - break; + warn_msg("Too much data to send on UART"); + printInt8( uart ); + print( ", waiting..." NL ); + delay( 1 ); + } + + // Append data to ring buffer + for ( uint8_t c = 0; c < count; c++ ) + { + if ( Connect_debug ) + { + printHex( buffer[ c ] ); + print(" +"); + printInt8( uart ); + print( NL ); + } + + uart_tx_buf[ uart ].buffer[ uart_tx_buf[ uart ].tail++ ] = buffer[ c ]; + uart_tx_buf[ uart ].items++; + if ( uart_tx_buf[ uart ].tail >= UART_Buffer_Size ) + uart_tx_buf[ uart ].tail = 0; + if ( uart_tx_buf[ uart ].head == uart_tx_buf[ uart ].tail ) + uart_tx_buf[ uart ].head++; + if ( uart_tx_buf[ uart ].head >= UART_Buffer_Size ) + uart_tx_buf[ uart ].head = 0; } } @@ -718,7 +717,7 @@ } // - Remote Capability Variables - -#define Connect_receive_RemoteCapabilityMaxArgs 5 // XXX Calculate the max using kll +#define Connect_receive_RemoteCapabilityMaxArgs 25 // XXX Calculate the max using kll RemoteCapabilityCommand Connect_receive_RemoteCapabilityBuffer; uint8_t Connect_receive_RemoteCapabilityArgs[Connect_receive_RemoteCapabilityMaxArgs];