diff --git a/communications/include/serial_console.h b/communications/include/serial_console.h index e21d13fd147c8ee3d2a863894cf37a00d1fd9810..e0b20230a7b37bc5976a1359774d69858193425a 100644 --- a/communications/include/serial_console.h +++ b/communications/include/serial_console.h @@ -12,6 +12,8 @@ void serial_console_init(uint32_t baudrate); uint8_t serial_console_get_num_data(void); int cm510_printf(const char *fmt, ...); int cm510_scanf(const char *fmt, ... ); +uint8_t cm510_read(uint8_t *data,uint8_t len); +uint8_t cm510_write(uint8_t *data,uint8_t len); #ifdef __cplusplus } diff --git a/communications/src/serial_console.c b/communications/src/serial_console.c index af72a027b39da22565406ddc29c855ccda09e069..2deb73ddd58fb5742abb80a3ef1158832e58b19a 100644 --- a/communications/src/serial_console.c +++ b/communications/src/serial_console.c @@ -48,7 +48,6 @@ void serial_console_set_baudrate(uint32_t baudrate) int serial_console_putchar(char c,FILE *dev) { - if(c=='\n') { serial_console_tx_buffer[serial_console_tx_write_ptr]='\r'; @@ -156,3 +155,49 @@ int cm510_scanf(const char *fmt, ...) return done; } + +uint8_t cm510_read(uint8_t *data,uint8_t len) +{ + uint8_t i; + + for(i=0;i<len;i++) + { + if(serial_console_rx_num_data>0) + { + data[i]=serial_console_rx_buffer[serial_console_rx_read_ptr]; + serial_console_rx_read_ptr=(serial_console_rx_read_ptr+1)%SERIAL_CONSOLE_MAX_BUFFER_LEN; + serial_console_rx_num_data--; + } + else + break; + } + + return i; +} + +uint8_t cm510_write(uint8_t *data,uint8_t len) +{ + uint8_t i; + + for(i=0;i<len;i++) + { + if(serial_console_sending==0x00) + { + UDR1=data[i]; + serial_console_sending=0x01; + } + else + { + if(serial_console_tx_num_data<SERIAL_CONSOLE_MAX_BUFFER_LEN) + { + serial_console_tx_buffer[serial_console_tx_write_ptr]=data[i]; + serial_console_tx_write_ptr=(serial_console_tx_write_ptr+1)%SERIAL_CONSOLE_MAX_BUFFER_LEN; + serial_console_tx_num_data++; + } + else + break; + } + } + + return i; +}