diff options
Diffstat (limited to 'driver/mcdp28x0.c')
-rw-r--r-- | driver/mcdp28x0.c | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/driver/mcdp28x0.c b/driver/mcdp28x0.c index de2572c87e..7fba0bd035 100644 --- a/driver/mcdp28x0.c +++ b/driver/mcdp28x0.c @@ -10,6 +10,7 @@ #include "common.h" #include "ec_commands.h" #include "mcdp28x0.h" +#include "stream_adaptor.h" #include "timer.h" #include "usart-stm32f0.h" #include "util.h" @@ -34,8 +35,17 @@ static inline void print_buffer(uint8_t *buf, int cnt) static inline void print_buffer(uint8_t *buf, int cnt) {} #endif -USART_CONFIG(usart_mcdp, CONFIG_MCDP28X0, 115200, MCDP_INBUF_MAX, - MCDP_OUTBUF_MAX, NULL, NULL); +QUEUE_CONFIG(rx_queue, MCDP_INBUF_MAX, uint8_t); +QUEUE_CONFIG(tx_queue, MCDP_OUTBUF_MAX, uint8_t); + +struct usart_config const usart_mcdp; + +IN_STREAM_FROM_PRODUCER(usart_in, usart_mcdp.producer, rx_queue, NULL) +OUT_STREAM_FROM_CONSUMER(usart_out, usart_mcdp.consumer, tx_queue, NULL) + +USART_CONFIG(usart_mcdp, CONFIG_MCDP28X0, 115200, rx_queue, tx_queue, + usart_in.consumer, usart_out.producer); + /** * Compute checksum. @@ -73,16 +83,16 @@ static int tx_serial(const uint8_t *msg, int cnt) uint8_t out = cnt + 2; uint8_t chksum = compute_checksum(msg, cnt); - if (out_stream_write(&usart_mcdp.out, &out, 1) != 1) + if (out_stream_write(&usart_out.out, &out, 1) != 1) return EC_ERROR_UNKNOWN; - if (out_stream_write(&usart_mcdp.out, msg, cnt) != cnt) + if (out_stream_write(&usart_out.out, msg, cnt) != cnt) return EC_ERROR_UNKNOWN; - if (out_stream_write(&usart_mcdp.out, &chksum, 1) != 1) + if (out_stream_write(&usart_out.out, &chksum, 1) != 1) return EC_ERROR_UNKNOWN; - print_buffer(usart_mcdp_tx_buffer, cnt + 2); + print_buffer(tx_queue_buffer, cnt + 2); return EC_SUCCESS; } @@ -99,10 +109,10 @@ static int rx_serial(uint8_t *msg, int cnt) size_t read; int retry = 2; - read = in_stream_read(&usart_mcdp.in, msg, cnt); + read = in_stream_read(&usart_in.in, msg, cnt); while ((read < cnt) && retry) { usleep(100*MSEC); - read += in_stream_read(&usart_mcdp.in, msg + read, + read += in_stream_read(&usart_in.in, msg + read, cnt - read); retry--; } |