-
-
Notifications
You must be signed in to change notification settings - Fork 19.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
7 changed files
with
232 additions
and
22 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
/** | ||
* Marlin 3D Printer Firmware | ||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] | ||
* | ||
* This program is free software: you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation, either version 3 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
* | ||
*/ | ||
|
||
#if defined(ARDUINO_ARCH_STM32) && !defined(STM32GENERIC) | ||
|
||
#include "../../inc/MarlinConfig.h" | ||
#include "MarlinSerial.h" | ||
|
||
#if ENABLED(EMERGENCY_PARSER) | ||
#include "../../feature/e_parser.h" | ||
#endif | ||
|
||
#define DECLARE_SERIAL_PORT(ser_num) \ | ||
void _rx_complete_irq_ ## ser_num (serial_t * obj); \ | ||
MarlinSerial MSerial ## ser_num (USART ## ser_num, &_rx_complete_irq_ ## ser_num); \ | ||
void _rx_complete_irq_ ## ser_num (serial_t * obj) { MSerial ## ser_num ._rx_complete_irq(obj); } | ||
|
||
#define DECLARE_SERIAL_PORT_EXP(ser_num) DECLARE_SERIAL_PORT(ser_num) | ||
|
||
#if defined(SERIAL_PORT) && SERIAL_PORT >= 0 | ||
DECLARE_SERIAL_PORT_EXP(SERIAL_PORT) | ||
#endif | ||
|
||
#if defined(SERIAL_PORT_2) && SERIAL_PORT_2 >= 0 | ||
DECLARE_SERIAL_PORT_EXP(SERIAL_PORT_2) | ||
#endif | ||
|
||
#if defined(DGUS_SERIAL_PORT) && DGUS_SERIAL_PORT >= 0 | ||
DECLARE_SERIAL_PORT_EXP(DGUS_SERIAL_PORT) | ||
#endif | ||
|
||
void MarlinSerial::begin(unsigned long baud, uint8_t config) { | ||
HardwareSerial::begin(baud, config); | ||
// replace the IRQ callback with the one we have defined | ||
#if ENABLED(EMERGENCY_PARSER) | ||
_serial.rx_callback = _rx_callback; | ||
#endif | ||
} | ||
|
||
// This function is Copyright (c) 2006 Nicholas Zambetti. | ||
void MarlinSerial::_rx_complete_irq(serial_t *obj) { | ||
// No Parity error, read byte and store it in the buffer if there is room | ||
unsigned char c; | ||
|
||
if (uart_getc(obj, &c) == 0) { | ||
|
||
rx_buffer_index_t i = (unsigned int)(obj->rx_head + 1) % SERIAL_RX_BUFFER_SIZE; | ||
|
||
// if we should be storing the received character into the location | ||
// just before the tail (meaning that the head would advance to the | ||
// current location of the tail), we're about to overflow the buffer | ||
// and so we don't write the character or advance the head. | ||
if (i != obj->rx_tail) { | ||
obj->rx_buff[obj->rx_head] = c; | ||
obj->rx_head = i; | ||
} | ||
|
||
#if ENABLED(EMERGENCY_PARSER) | ||
emergency_parser.update(emergency_state, c); | ||
#endif | ||
} | ||
} | ||
|
||
#endif // ARDUINO_ARCH_STM32 && !STM32GENERIC |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
/** | ||
* Marlin 3D Printer Firmware | ||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] | ||
* | ||
* This program is free software: you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation, either version 3 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
* | ||
*/ | ||
#pragma once | ||
|
||
#include "../../inc/MarlinConfigPre.h" | ||
|
||
#if ENABLED(EMERGENCY_PARSER) | ||
#include "../../feature/e_parser.h" | ||
#endif | ||
|
||
typedef void (*usart_rx_callback_t)(serial_t * obj); | ||
|
||
class MarlinSerial : public HardwareSerial { | ||
public: | ||
MarlinSerial(void* peripheral, usart_rx_callback_t rx_callback) : | ||
HardwareSerial(peripheral), _rx_callback(rx_callback) | ||
#if ENABLED(EMERGENCY_PARSER) | ||
, emergency_state(EmergencyParser::State::EP_RESET) | ||
#endif | ||
{ } | ||
|
||
void begin(unsigned long baud, uint8_t config); | ||
inline void begin(unsigned long baud) { begin(baud, SERIAL_8N1); } | ||
|
||
void _rx_complete_irq(serial_t* obj); | ||
|
||
protected: | ||
usart_rx_callback_t _rx_callback; | ||
#if ENABLED(EMERGENCY_PARSER) | ||
EmergencyParser::State emergency_state; | ||
#endif | ||
}; | ||
|
||
extern MarlinSerial MSerial1; | ||
extern MarlinSerial MSerial2; | ||
extern MarlinSerial MSerial3; | ||
extern MarlinSerial MSerial4; | ||
extern MarlinSerial MSerial5; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
/** | ||
* Marlin 3D Printer Firmware | ||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] | ||
* | ||
* This program is free software: you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation, either version 3 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
* | ||
*/ | ||
|
||
#if defined(ARDUINO_ARCH_STM32) && !defined(STM32GENERIC) | ||
|
||
#include "../../inc/MarlinConfigPre.h" | ||
|
||
#if ENABLED(EMERGENCY_PARSER) | ||
|
||
#include "usb_serial.h" | ||
#include "../../feature/e_parser.h" | ||
|
||
EmergencyParser::State emergency_state = EmergencyParser::State::EP_RESET; | ||
|
||
int8_t (*USBD_CDC_Receive_original) (uint8_t *Buf, uint32_t *Len) = nullptr; | ||
|
||
static int8_t USBD_CDC_Receive_hook(uint8_t *Buf, uint32_t *Len) { | ||
for (uint32_t i = 0; i < *Len; i++) | ||
emergency_parser.update(emergency_state, Buf[i]); | ||
return USBD_CDC_Receive_original(Buf, Len); | ||
} | ||
|
||
typedef struct _USBD_CDC_Itf { | ||
int8_t (* Init)(void); | ||
int8_t (* DeInit)(void); | ||
int8_t (* Control)(uint8_t cmd, uint8_t *pbuf, uint16_t length); | ||
int8_t (* Receive)(uint8_t *Buf, uint32_t *Len); | ||
int8_t (* Transferred)(void); | ||
} USBD_CDC_ItfTypeDef; | ||
|
||
extern USBD_CDC_ItfTypeDef USBD_CDC_fops; | ||
|
||
void USB_Hook_init() { | ||
USBD_CDC_Receive_original = USBD_CDC_fops.Receive; | ||
USBD_CDC_fops.Receive = USBD_CDC_Receive_hook; | ||
} | ||
|
||
#endif // EMERGENCY_PARSER | ||
#endif // ARDUINO_ARCH_STM32 && !STM32GENERIC |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
/** | ||
* Marlin 3D Printer Firmware | ||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] | ||
* | ||
* This program is free software: you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation, either version 3 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
* | ||
*/ | ||
#pragma once | ||
|
||
void USB_Hook_init(); |