From db0374896fe6ae709ef98d71c0ba0e4185cf14fb Mon Sep 17 00:00:00 2001 From: "D.R.racer" Date: Wed, 20 Apr 2022 17:12:00 +0200 Subject: [PATCH] Implement mmu2 serial interface --- Firmware/mmu2_serial.cpp | 30 +++++++++++++++++++++++------- Firmware/uart2.c | 4 ++-- Firmware/uart2.h | 2 +- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/Firmware/mmu2_serial.cpp b/Firmware/mmu2_serial.cpp index 2b9388624..5ac8e3e29 100644 --- a/Firmware/mmu2_serial.cpp +++ b/Firmware/mmu2_serial.cpp @@ -1,14 +1,30 @@ #include "mmu2_serial.h" - -//@@TODO implement for MK3 +#include "uart2.h" namespace MMU2 { -void MMU2Serial::begin(uint32_t baud){ } -void MMU2Serial::close() { } -int MMU2Serial::read() { } -void MMU2Serial::flush() { } -size_t MMU2Serial::write(const uint8_t *buffer, size_t size) { } +void MMU2Serial::begin(uint32_t baud){ + uart2_init(baud); // @@TODO we may skip the baud rate setting in case of 8bit FW ... could save some bytes... +} + +void MMU2Serial::close() { + // @@TODO - probably turn off the UART +} + +int MMU2Serial::read() { + return fgetc(uart2io); +} + +void MMU2Serial::flush() { + // @@TODO - clear the output buffer +} + +size_t MMU2Serial::write(const uint8_t *buffer, size_t size) { + while(size--){ + fputc(*buffer, uart2io); + ++buffer; + } +} MMU2Serial mmu2Serial; diff --git a/Firmware/uart2.c b/Firmware/uart2.c index f3da9ed33..57b0f77a6 100644 --- a/Firmware/uart2.c +++ b/Firmware/uart2.c @@ -33,13 +33,13 @@ int uart2_getchar(_UNUSED FILE *stream) } //uart init (io + FILE stream) -void uart2_init(void) +void uart2_init(uint32_t baudRate) { DDRH &= ~0x01; PORTH |= 0x01; rbuf_ini(uart2_ibuf, sizeof(uart2_ibuf) - 4); UCSR2A |= (1 << U2X2); // baudrate multiplier - UBRR2L = UART_BAUD_SELECT(UART2_BAUD, F_CPU); // select baudrate + UBRR2L = UART_BAUD_SELECT(baudRate, F_CPU); // select baudrate UCSR2B = (1 << RXEN2) | (1 << TXEN2); // enable receiver and transmitter UCSR2B |= (1 << RXCIE2); // enable rx interrupt fdev_setup_stream(uart2io, uart2_putchar, uart2_getchar, _FDEV_SETUP_WRITE | _FDEV_SETUP_READ); //setup uart2 i/o stream diff --git a/Firmware/uart2.h b/Firmware/uart2.h index 05f15d8ff..4c72daa83 100644 --- a/Firmware/uart2.h +++ b/Firmware/uart2.h @@ -15,7 +15,7 @@ extern FILE _uart2io; #define uart2io (&_uart2io) -extern void uart2_init(void); +extern void uart2_init(uint32_t baudRate); extern int8_t uart2_rx_str_P(const char* str);