diff --git a/Marlin/src/lcd/anycubic_serial.cpp b/Marlin/src/lcd/HardwareSerial.cpp similarity index 90% rename from Marlin/src/lcd/anycubic_serial.cpp rename to Marlin/src/lcd/HardwareSerial.cpp index a63f0ca5..2727125e 100755 --- a/Marlin/src/lcd/anycubic_serial.cpp +++ b/Marlin/src/lcd/HardwareSerial.cpp @@ -1,9 +1,4 @@ /* - AnycubicSerial.cpp --- Support for Anycubic i3 Mega TFT serial connection - Created by Christian Hopp on 2017-12-09 - Modified by Oliver Köster on 2020-06-02 - - Original file: HardwareSerial.cpp - Hardware serial library for Wiring Copyright (c) 2006 Nicholas Zambetti. All right reserved. @@ -40,7 +35,7 @@ // this is so I can support Attiny series and any other chip without a uart #if defined(UBRR3H) -#include "anycubic_serial.h" +#include "HardwareSerial.h" // Define constants and variables for buffering incoming serial data. We're // using a ring buffer (I think), in which head is the index of the location @@ -116,7 +111,7 @@ ISR(USART3_UDRE_vect) #endif -AnycubicSerialClass::AnycubicSerialClass(ring_buffer *rx_buffer, ring_buffer *tx_buffer, +HardwareSerialClass::HardwareSerialClass(ring_buffer *rx_buffer, ring_buffer *tx_buffer, volatile uint8_t *ubrrh, volatile uint8_t *ubrrl, volatile uint8_t *ucsra, volatile uint8_t *ucsrb, volatile uint8_t *ucsrc, volatile uint8_t *udr, @@ -139,7 +134,7 @@ AnycubicSerialClass::AnycubicSerialClass(ring_buffer *rx_buffer, ring_buffer *tx // Public Methods ////////////////////////////////////////////////////////////// -void AnycubicSerialClass::begin(unsigned long baud) +void HardwareSerialClass::begin(unsigned long baud) { uint16_t baud_setting; bool use_u2x = true; @@ -182,7 +177,7 @@ try_again: cbi(*_ucsrb, _udrie); } -void AnycubicSerialClass::begin(unsigned long baud, byte config) +void HardwareSerialClass::begin(unsigned long baud, byte config) { uint16_t baud_setting; uint8_t current_config; @@ -230,7 +225,7 @@ try_again: cbi(*_ucsrb, _udrie); } -void AnycubicSerialClass::end() +void HardwareSerialClass::end() { // wait for transmission of outgoing data while (_tx_buffer->head != _tx_buffer->tail) @@ -245,12 +240,12 @@ void AnycubicSerialClass::end() _rx_buffer->head = _rx_buffer->tail; } -int AnycubicSerialClass::available(void) +int HardwareSerialClass::available(void) { return (int)(SERIAL_BUFFER_SIZE + _rx_buffer->head - _rx_buffer->tail) % SERIAL_BUFFER_SIZE; } -int AnycubicSerialClass::peek(void) +int HardwareSerialClass::peek(void) { if (_rx_buffer->head == _rx_buffer->tail) { @@ -262,7 +257,7 @@ int AnycubicSerialClass::peek(void) } } -int AnycubicSerialClass::read(void) +int HardwareSerialClass::read(void) { // if the head isn't ahead of the tail, we don't have any characters if (_rx_buffer->head == _rx_buffer->tail) @@ -277,7 +272,7 @@ int AnycubicSerialClass::read(void) } } -void AnycubicSerialClass::flush() +void HardwareSerialClass::flush() { // UDR is kept full while the buffer is not empty, so TXC triggers when EMPTY && SENT while (transmitting && !(*_ucsra & _BV(TXC0))) @@ -285,7 +280,7 @@ void AnycubicSerialClass::flush() transmitting = false; } -size_t AnycubicSerialClass::write(uint8_t c) +size_t HardwareSerialClass::write(uint8_t c) { int i = (_tx_buffer->head + 1) % SERIAL_BUFFER_SIZE; @@ -306,13 +301,13 @@ size_t AnycubicSerialClass::write(uint8_t c) return 1; } -AnycubicSerialClass::operator bool() +HardwareSerialClass::operator bool() { return true; } #if defined(UBRR3H) -AnycubicSerialClass AnycubicSerial(&rx_buffer_ajg, &tx_buffer_ajg, &UBRR3H, &UBRR3L, &UCSR3A, &UCSR3B, &UCSR3C, &UDR3, RXEN3, TXEN3, RXCIE3, UDRIE3, U2X3); +HardwareSerialClass HardwareSerial(&rx_buffer_ajg, &tx_buffer_ajg, &UBRR3H, &UBRR3L, &UCSR3A, &UCSR3B, &UCSR3C, &UDR3, RXEN3, TXEN3, RXCIE3, UDRIE3, U2X3); #endif #endif diff --git a/Marlin/src/lcd/anycubic_serial.h b/Marlin/src/lcd/HardwareSerial.h similarity index 72% rename from Marlin/src/lcd/anycubic_serial.h rename to Marlin/src/lcd/HardwareSerial.h index 2c2aa1e1..385a7bbd 100755 --- a/Marlin/src/lcd/anycubic_serial.h +++ b/Marlin/src/lcd/HardwareSerial.h @@ -1,10 +1,4 @@ /* - AnycubicSerial.h --- Support for Anycubic i3 Mega TFT serial connection - Created by Christian Hopp on 2017-12-09 - Modified by Oliver Köster on 2020-06-02 - - Original file: - HardwareSerial.h - Hardware serial library for Wiring Copyright (c) 2006 Nicholas Zambetti. All right reserved. @@ -26,8 +20,8 @@ Modified 14 August 2012 by Alarus */ -#ifndef anycubic_serial_h -#define anycubic_serial_h +#ifndef hardwareserial_h +#define hardwareserial_h #include #include @@ -38,7 +32,7 @@ struct ring_buffer; -class AnycubicSerialClass : public Stream +class HardwareSerialClass : public Stream { private: ring_buffer *_rx_buffer; @@ -57,7 +51,7 @@ private: bool transmitting; public: - AnycubicSerialClass(ring_buffer *rx_buffer, ring_buffer *tx_buffer, + HardwareSerialClass(ring_buffer *rx_buffer, ring_buffer *tx_buffer, volatile uint8_t *ubrrh, volatile uint8_t *ubrrl, volatile uint8_t *ucsra, volatile uint8_t *ucsrb, volatile uint8_t *ucsrc, volatile uint8_t *udr, @@ -105,44 +99,44 @@ public: #define SERIAL_8O2 0x3E #if defined(UBRR3H) -extern AnycubicSerialClass AnycubicSerial; +extern HardwareSerialClass HardwareSerial; #endif extern void serialEventRun(void) __attribute__((weak)); -#define ANYCUBIC_SERIAL_PROTOCOL(x) (AnycubicSerial.print(x)) -#define ANYCUBIC_SERIAL_PROTOCOL_F(x, y) (AnycubicSerial.print(x, y)) -#define ANYCUBIC_SERIAL_PROTOCOLPGM(x) (AnycubicSerialprintPGM(PSTR(x))) -#define ANYCUBIC_SERIAL_(x) (AnycubicSerial.print(x), AnycubicSerial.write('\n')) -#define ANYCUBIC_SERIAL_PROTOCOLLN(x) (AnycubicSerial.print(x), AnycubicSerial.write('\r'), AnycubicSerial.write('\n')) -#define ANYCUBIC_SERIAL_PROTOCOLLNPGM(x) (AnycubicSerialprintPGM(PSTR(x)), AnycubicSerial.write('\r'), AnycubicSerial.write('\n')) +#define ANYCUBIC_SERIAL_PROTOCOL(x) (HardwareSerial.print(x)) +#define ANYCUBIC_SERIAL_PROTOCOL_F(x, y) (HardwareSerial.print(x, y)) +#define ANYCUBIC_SERIAL_PROTOCOLPGM(x) (HardwareSerialprintPGM(PSTR(x))) +#define ANYCUBIC_SERIAL_(x) (HardwareSerial.print(x), HardwareSerial.write('\n')) +#define ANYCUBIC_SERIAL_PROTOCOLLN(x) (HardwareSerial.print(x), HardwareSerial.write('\r'), HardwareSerial.write('\n')) +#define ANYCUBIC_SERIAL_PROTOCOLLNPGM(x) (HardwareSerialprintPGM(PSTR(x)), HardwareSerial.write('\r'), HardwareSerial.write('\n')) -#define ANYCUBIC_SERIAL_START() (AnycubicSerial.write('\r'), AnycubicSerial.write('\n')) -#define ANYCUBIC_SERIAL_CMD_SEND(x) (AnycubicSerialprintPGM(PSTR(x)), AnycubicSerial.write('\r'), AnycubicSerial.write('\n')) -#define ANYCUBIC_SERIAL_ENTER() (AnycubicSerial.write('\r'), AnycubicSerial.write('\n')) -#define ANYCUBIC_SERIAL_SPACE() (AnycubicSerial.write(' ')) +#define ANYCUBIC_SERIAL_START() (HardwareSerial.write('\r'), HardwareSerial.write('\n')) +#define ANYCUBIC_SERIAL_CMD_SEND(x) (HardwareSerialprintPGM(PSTR(x)), HardwareSerial.write('\r'), HardwareSerial.write('\n')) +#define ANYCUBIC_SERIAL_ENTER() (HardwareSerial.write('\r'), HardwareSerial.write('\n')) +#define ANYCUBIC_SERIAL_SPACE() (HardwareSerial.write(' ')) const char newErr[] PROGMEM = "ERR "; const char newSucc[] PROGMEM = "OK"; -#define ANYCUBIC_SERIAL_ERROR_START (AnycubicSerialprintPGM(newErr)) +#define ANYCUBIC_SERIAL_ERROR_START (HardwareSerialprintPGM(newErr)) #define ANYCUBIC_SERIAL_ERROR(x) ANYCUBIC_SERIAL_PROTOCOL(x) #define ANYCUBIC_SERIAL_ERRORPGM(x) ANYCUBIC_SERIAL_PROTOCOLPGM(x) #define ANYCUBIC_SERIAL_ERRORLN(x) ANYCUBIC_SERIAL_PROTOCOLLN(x) #define ANYCUBIC_SERIAL_ERRORLNPGM(x) ANYCUBIC_SERIAL_PROTOCOLLNPGM(x) #define ANYCUBIC_SERIAL_ECHOLN(x) ANYCUBIC_SERIAL_PROTOCOLLN(x) -#define ANYCUBIC_SERIAL_SUCC_START (AnycubicSerialprintPGM(newSucc)) +#define ANYCUBIC_SERIAL_SUCC_START (HardwareSerialprintPGM(newSucc)) #define ANYCUBIC_SERIAL_ECHOPAIR(name, value) (serial_echopair_P(PSTR(name), (value))) #define ANYCUBIC_SERIAL_ECHOPGM(x) ANYCUBIC_SERIAL_PROTOCOLPGM(x) #define ANYCUBIC_SERIAL_ECHO(x) ANYCUBIC_SERIAL_PROTOCOL(x) -FORCE_INLINE void AnycubicSerialprintPGM(const char *str) +FORCE_INLINE void HardwareSerialprintPGM(const char *str) { char ch = pgm_read_byte(str); while (ch) { - AnycubicSerial.write(ch); + HardwareSerial.write(ch); ch = pgm_read_byte(++str); } } diff --git a/Marlin/src/lcd/anycubic_touchscreen.cpp b/Marlin/src/lcd/anycubic_touchscreen.cpp index 4c559897..2e1635e1 100755 --- a/Marlin/src/lcd/anycubic_touchscreen.cpp +++ b/Marlin/src/lcd/anycubic_touchscreen.cpp @@ -41,7 +41,7 @@ #ifdef ANYCUBIC_TOUCHSCREEN #include "anycubic_touchscreen.h" -#include "anycubic_serial.h" +#include "HardwareSerial.h" char _conv[8]; @@ -92,7 +92,7 @@ AnycubicTouchscreenClass::AnycubicTouchscreenClass() void AnycubicTouchscreenClass::Setup() { - AnycubicSerial.begin(115200); + HardwareSerial.begin(115200); //ANYCUBIC_SERIAL_START(); ANYCUBIC_SERIAL_PROTOCOLPGM("J17"); // J17 Main board reset ANYCUBIC_SERIAL_ENTER(); @@ -566,6 +566,7 @@ void AnycubicTouchscreenClass::Ls() uint16_t max_files; uint16_t dir_files = card.countFilesInWorkDir(); + // What is this shit? What if there are exactely 3 files+folders? if ((dir_files - filenumber) < 4) { max_files = dir_files; @@ -888,9 +889,9 @@ void AnycubicTouchscreenClass::FilamentRunout() void AnycubicTouchscreenClass::GetCommandFromTFT() { char *starpos = NULL; - while (AnycubicSerial.available() > 0 && TFTbuflen < TFTBUFSIZE) + while (HardwareSerial.available() > 0 && TFTbuflen < TFTBUFSIZE) { - serial3_char = AnycubicSerial.read(); + serial3_char = HardwareSerial.read(); if (serial3_char == '\n' || serial3_char == '\r' || serial3_char == ':' ||