From 89efaf1be153e6773acd31530d6051e45070023a Mon Sep 17 00:00:00 2001 From: Terje Date: Sun, 14 Mar 2021 21:57:09 +0100 Subject: [PATCH] Updated for shared stream buffer for tool change protocol. --- grblHAL_Teensy4/src/driver.c | 20 ++++++-------------- grblHAL_Teensy4/src/uart.c | 21 ++++----------------- grblHAL_Teensy4/src/usb_serial_ard.cpp | 21 ++++----------------- grblHAL_Teensy4/src/usb_serial_pjrc.c | 22 ++++------------------ 4 files changed, 18 insertions(+), 66 deletions(-) diff --git a/grblHAL_Teensy4/src/driver.c b/grblHAL_Teensy4/src/driver.c index 0de63c7..0273387 100644 --- a/grblHAL_Teensy4/src/driver.c +++ b/grblHAL_Teensy4/src/driver.c @@ -392,12 +392,8 @@ static void enetStreamWriteS (const char *data) .get_rx_buffer_available = TCPStreamRxFree, .reset_read_buffer = TCPStreamRxFlush, .cancel_read_buffer = TCPStreamRxCancel, - .enqueue_realtime_command = protocol_enqueue_realtime_command, - #if M6_ENABLE - .suspend_read = NULL // for now... - #else - .suspend_read = NULL - #endif + .suspend_read = TCPStreamSuspendInput, + .enqueue_realtime_command = protocol_enqueue_realtime_command }; #endif @@ -410,12 +406,8 @@ static void enetStreamWriteS (const char *data) .get_rx_buffer_available = WsStreamRxFree, .reset_read_buffer = WsStreamRxFlush, .cancel_read_buffer = WsStreamRxCancel, - .enqueue_realtime_command = protocol_enqueue_realtime_command, - #if M6_ENABLE - .suspend_read = NULL // for now... - #else - .suspend_read = NULL - #endif + .suspend_read = WsStreamSuspendInput, + .enqueue_realtime_command = protocol_enqueue_realtime_command }; #endif @@ -472,7 +464,7 @@ static void (*systick_isr_org)(void) = NULL; // Millisecond resolution delay function // Will return immediately if a callback function is provided -static void driver_delay_ms (uint32_t ms, void (*callback)(void)) +static void driver_delay_ms (uint32_t ms, delay_callback_ptr callback) { if(ms) { grbl_delay.ms = ms; @@ -2086,7 +2078,7 @@ bool driver_init (void) options[strlen(options) - 1] = '\0'; hal.info = "iMXRT1062"; - hal.driver_version = "210221"; + hal.driver_version = "210313"; #ifdef BOARD_NAME hal.board = BOARD_NAME; #endif diff --git a/grblHAL_Teensy4/src/uart.c b/grblHAL_Teensy4/src/uart.c index 22b0dcc..210845a 100644 --- a/grblHAL_Teensy4/src/uart.c +++ b/grblHAL_Teensy4/src/uart.c @@ -3,7 +3,7 @@ Part of grblHAL - Some parts of this code is Copyright (c) 2020 Terje Io + Some parts of this code is Copyright (c) 2020-2021 Terje Io Some parts are derived from HardwareSerial.cpp in the Teensyduino Core Library @@ -141,7 +141,7 @@ void transmitterEnable(uint8_t pin) static uint16_t tx_fifo_size; static stream_tx_buffer_t txbuffer = {0}; -static stream_rx_buffer_t rxbuffer = {0}, rxbackup; +static stream_rx_buffer_t rxbuffer = {0}; void serialInit (uint32_t baud_rate) { @@ -339,20 +339,9 @@ void serialWrite(const char *s, uint16_t length) serialPutC(*ptr++); } -// "dummy" version of serialGetC -static int16_t serialGetNull (void) -{ - return -1; -} - bool serialSuspendInput (bool suspend) { - if(suspend) - hal.stream.read = serialGetNull; - else if(rxbuffer.backup) - memcpy(&rxbuffer, &rxbackup, sizeof(stream_rx_buffer_t)); - - return rxbuffer.tail != rxbuffer.head; + return stream_rx_suspend(&rxbuffer, suspend); } uint16_t serialTxCount(void) { @@ -413,9 +402,7 @@ static void uart_interrupt_handler (void) rxbuffer.head = bptr; // and update pointer #else if(data == CMD_TOOL_ACK && !rxbuffer.backup) { - memcpy(&rxbackup, &rxbuffer, sizeof(stream_rx_buffer_t)); - rxbuffer.backup = true; - rxbuffer.tail = rxbuffer.head; + stream_rx_backup(&rxbuffer); hal.stream.read = serialGetC; // restore normal input } else if(!hal.stream.enqueue_realtime_command((char)data)) { rxbuffer.data[rxbuffer.head] = (char)data; // Add data to buffer diff --git a/grblHAL_Teensy4/src/usb_serial_ard.cpp b/grblHAL_Teensy4/src/usb_serial_ard.cpp index ef30e97..a8debdb 100644 --- a/grblHAL_Teensy4/src/usb_serial_ard.cpp +++ b/grblHAL_Teensy4/src/usb_serial_ard.cpp @@ -4,7 +4,7 @@ Part of grblHAL - Copyright (c) 2018-2020 Terje Io + Copyright (c) 2018-2021 Terje Io Grbl is free software: you can redistribute it and/or modify @@ -38,7 +38,7 @@ extern "C" { static stream_block_tx_buffer_t txbuf = {0}; static char rxbuf[BLOCK_RX_BUFFER_SIZE]; -static stream_rx_buffer_t usb_rxbuffer, usb_rxbackup; +static stream_rx_buffer_t usb_rxbuffer; void usb_serialInit(void) { @@ -183,20 +183,9 @@ int16_t usb_serialGetC (void) return (int16_t)data; } -// "dummy" version of serialGetC -static int16_t serialGetNull (void) -{ - return -1; -} - bool usb_serialSuspendInput (bool suspend) { - if(suspend) - hal.stream.read = serialGetNull; - else if(usb_rxbuffer.backup) - memcpy(&usb_rxbuffer, &usb_rxbackup, sizeof(stream_rx_buffer_t)); - - return usb_rxbuffer.tail != usb_rxbuffer.head; + return stream_rx_suspend(&usb_rxbuffer, suspend); } // @@ -221,9 +210,7 @@ void usb_execute_realtime (uint_fast16_t state) while(avail--) { c = *dp++; if(c == CMD_TOOL_ACK && !usb_rxbuffer.backup) { - memcpy(&usb_rxbackup, &usb_rxbuffer, sizeof(stream_rx_buffer_t)); - usb_rxbuffer.backup = true; - usb_rxbuffer.tail = usb_rxbuffer.head; + stream_rx_backup(&usb_rxbuffer); hal.stream.read = usb_serialGetC; // restore normal input } else if(!hal.stream.enqueue_realtime_command(c)) { uint32_t bptr = (usb_rxbuffer.head + 1) & (RX_BUFFER_SIZE - 1); // Get next head pointer diff --git a/grblHAL_Teensy4/src/usb_serial_pjrc.c b/grblHAL_Teensy4/src/usb_serial_pjrc.c index a3c91e0..1ce4b74 100644 --- a/grblHAL_Teensy4/src/usb_serial_pjrc.c +++ b/grblHAL_Teensy4/src/usb_serial_pjrc.c @@ -4,7 +4,7 @@ Part of grblHAL - Copyright (c) 2018-2020 Terje Io + Copyright (c) 2018-2021 Terje Io Grbl is free software: you can redistribute it and/or modify @@ -34,7 +34,7 @@ static stream_block_tx_buffer_t txbuf = {0}; static char rxbuf[BLOCK_RX_BUFFER_SIZE]; -static stream_rx_buffer_t usb_rxbuffer, usb_rxbackup; +static stream_rx_buffer_t usb_rxbuffer; void usb_serialInit(void) { @@ -42,7 +42,6 @@ void usb_serialInit(void) txbuf.s = txbuf.data; txbuf.max_length = usb_serial_write_buffer_free(); // 6144 txbuf.max_length = (txbuf.max_length > BLOCK_TX_BUFFER_SIZE ? BLOCK_TX_BUFFER_SIZE : txbuf.max_length) - 20; - } // @@ -172,20 +171,9 @@ int16_t usb_serialGetC (void) return (int16_t)data; } -// "dummy" version of serialGetC -static int16_t serialGetNull (void) -{ - return -1; -} - bool usb_serialSuspendInput (bool suspend) { - if(suspend) - hal.stream.read = serialGetNull; - else if(usb_rxbuffer.backup) - memcpy(&usb_rxbuffer, &usb_rxbackup, sizeof(stream_rx_buffer_t)); - - return usb_rxbuffer.tail != usb_rxbuffer.head; + return stream_rx_suspend(&usb_rxbuffer, suspend); } // @@ -210,9 +198,7 @@ void usb_execute_realtime (uint_fast16_t state) while(avail--) { c = *dp++; if(c == CMD_TOOL_ACK && !usb_rxbuffer.backup) { - memcpy(&usb_rxbackup, &usb_rxbuffer, sizeof(stream_rx_buffer_t)); - usb_rxbuffer.backup = true; - usb_rxbuffer.tail = usb_rxbuffer.head; + stream_rx_backup(&usb_rxbuffer); hal.stream.read = usb_serialGetC; // restore normal input } else if(!hal.stream.enqueue_realtime_command(c)) { uint32_t bptr = (usb_rxbuffer.head + 1) & (RX_BUFFER_SIZE - 1); // Get next head pointer