Original implementation of HardwareSerial lib.
This commit is contained in:
@@ -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
|
@@ -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 <inttypes.h>
|
||||
#include <avr/pgmspace.h>
|
||||
@@ -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);
|
||||
}
|
||||
}
|
@@ -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 == ':' ||
|
||||
|
Reference in New Issue
Block a user