From 07aa7a3803171192852353774a8115932c0980a3 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Thu, 7 Dec 2017 19:14:17 +0100 Subject: [PATCH 1/4] support two serial lines at the same time --- Firmware/MarlinSerial.cpp | 28 ++++++++++++++-------------- Firmware/MarlinSerial.h | 25 +++++++++++++++++++------ 2 files changed, 33 insertions(+), 20 deletions(-) diff --git a/Firmware/MarlinSerial.cpp b/Firmware/MarlinSerial.cpp index c0f61d82a..b01ef459b 100644 --- a/Firmware/MarlinSerial.cpp +++ b/Firmware/MarlinSerial.cpp @@ -67,17 +67,17 @@ FORCE_INLINE void store_char(unsigned char c) } } #ifndef SNMM - SIGNAL(USART2_RX_vect) + SIGNAL(USART1_RX_vect) { if (selectedSerialPort == 1) { // Test for a framing error. - if (UCSR2A & (1<> 8; - UBRR2L = baud_setting; + UBRR1H = baud_setting >> 8; + UBRR1L = baud_setting; - sbi(UCSR2B, RXEN2); - sbi(UCSR2B, TXEN2); - sbi(UCSR2B, RXCIE2); + sbi(UCSR1B, RXEN1); + sbi(UCSR1B, TXEN1); + sbi(UCSR1B, RXCIE1); } #endif } @@ -154,9 +154,9 @@ void MarlinSerial::end() cbi(M_UCSRxB, M_RXCIEx); #ifndef SNMM - cbi(UCSR2B, RXEN2); - cbi(UCSR2B, TXEN2); - cbi(UCSR2B, RXCIE2); + cbi(UCSR1B, RXEN1); + cbi(UCSR1B, TXEN1); + cbi(UCSR1B, RXCIE1); #endif } diff --git a/Firmware/MarlinSerial.h b/Firmware/MarlinSerial.h index a4f799aa5..24e9f79fe 100644 --- a/Firmware/MarlinSerial.h +++ b/Firmware/MarlinSerial.h @@ -101,7 +101,7 @@ class MarlinSerial //: public Stream { return (unsigned int)(RX_BUFFER_SIZE + rx_buffer.head - rx_buffer.tail) % RX_BUFFER_SIZE; } - + /* FORCE_INLINE void write(uint8_t c) { while (!((M_UCSRxA) & (1 << M_UDREx))) @@ -109,7 +109,20 @@ class MarlinSerial //: public Stream M_UDRx = c; } - + */ + void write(uint8_t c) + { + if (selectedSerialPort == 0) { + while (!((M_UCSRxA) & (1 << M_UDREx))) + ; + M_UDRx = c; + } + else if (selectedSerialPort == 1) { + while (!((UCSR1A) & (1 << UDRE1))) + ; + UDR1 = c; + } + } void checkRx(void) { @@ -135,14 +148,14 @@ class MarlinSerial //: public Stream } } } else if(selectedSerialPort == 1) { - if((UCSR2A & (1< Date: Fri, 8 Dec 2017 16:56:06 +0100 Subject: [PATCH 2/4] turn on second serial line from settings menu --- Firmware/Configuration.h | 1 + Firmware/Marlin_main.cpp | 5 +++-- Firmware/language_all.cpp | 10 ++++++++++ Firmware/language_all.h | 4 ++++ Firmware/language_en.h | 3 +++ Firmware/ultralcd.cpp | 14 ++++++++++++++ 6 files changed, 35 insertions(+), 2 deletions(-) diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index 7a31986d3..462394090 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -81,6 +81,7 @@ #define EEPROM_POWER_COUNT (EEPROM_UVLO_MESH_BED_LEVELING-17) #define EEPROM_DIR_DEPTH (EEPROM_POWER_COUNT-1) #define EEPROM_DIRS (EEPROM_DIR_DEPTH-80) //8 chars for each dir name, max 10 levels +#define EEPROM_SECOND_SERIAL_ACTIVE (EEPROM_DIRS - 1) //0: use only USART0; 1: use both USART0 and USART1 //TMC2130 configuration #define EEPROM_TMC_AXIS_SIZE //axis configuration block size diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 99328679a..092429e6c 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -813,13 +813,14 @@ void setup() EEPROM_read_B(EEPROM_FARM_NUMBER, &farm_no); if ((farm_mode == 0xFF && farm_no == 0) || (farm_no == 0xFFFF)) farm_mode = false; //if farm_mode has not been stored to eeprom yet and farm number is set to zero or EEPROM is fresh, deactivate farm mode if (farm_no == 0xFFFF) farm_no = 0; + + selectedSerialPort = eeprom_read_byte((uint8_t*)EEPROM_SECOND_SERIAL_ACTIVE); + if (selectedSerialPort == 0xFF) selectedSerialPort = 0; if (farm_mode) { prusa_statistics(8); selectedSerialPort = 1; } - else - selectedSerialPort = 0; MYSERIAL.begin(BAUDRATE); fdev_setup_stream(uartout, uart_putchar, NULL, _FDEV_SETUP_WRITE); //setup uart out stream stdout = uartout; diff --git a/Firmware/language_all.cpp b/Firmware/language_all.cpp index c437e1f6b..aac351a6d 100644 --- a/Firmware/language_all.cpp +++ b/Firmware/language_all.cpp @@ -1505,6 +1505,16 @@ const char * const MSG_SD_WRITE_TO_FILE_LANG_TABLE[1] PROGMEM = { MSG_SD_WRITE_TO_FILE_EN }; +const char MSG_SECOND_SERIAL_OFF_EN[] PROGMEM = "2nd USART [off]"; +const char * const MSG_SECOND_SERIAL_OFF_LANG_TABLE[1] PROGMEM = { + MSG_SECOND_SERIAL_OFF_EN +}; + +const char MSG_SECOND_SERIAL_ON_EN[] PROGMEM = "2nd USART [on]"; +const char * const MSG_SECOND_SERIAL_ON_LANG_TABLE[1] PROGMEM = { + MSG_SECOND_SERIAL_ON_EN +}; + const char MSG_SELFTEST_EN[] PROGMEM = "Selftest "; const char * const MSG_SELFTEST_LANG_TABLE[1] PROGMEM = { MSG_SELFTEST_EN diff --git a/Firmware/language_all.h b/Firmware/language_all.h index 6fb1275af..42fffe94a 100644 --- a/Firmware/language_all.h +++ b/Firmware/language_all.h @@ -512,6 +512,10 @@ extern const char* const MSG_SD_WORKDIR_FAIL_LANG_TABLE[1]; #define MSG_SD_WORKDIR_FAIL LANG_TABLE_SELECT_EXPLICIT(MSG_SD_WORKDIR_FAIL_LANG_TABLE, 0) extern const char* const MSG_SD_WRITE_TO_FILE_LANG_TABLE[1]; #define MSG_SD_WRITE_TO_FILE LANG_TABLE_SELECT_EXPLICIT(MSG_SD_WRITE_TO_FILE_LANG_TABLE, 0) +extern const char* const MSG_SECOND_SERIAL_OFF_LANG_TABLE[1]; +#define MSG_SECOND_SERIAL_OFF LANG_TABLE_SELECT_EXPLICIT(MSG_SECOND_SERIAL_OFF_LANG_TABLE, 0) +extern const char* const MSG_SECOND_SERIAL_ON_LANG_TABLE[1]; +#define MSG_SECOND_SERIAL_ON LANG_TABLE_SELECT_EXPLICIT(MSG_SECOND_SERIAL_ON_LANG_TABLE, 0) extern const char* const MSG_SELFTEST_LANG_TABLE[1]; #define MSG_SELFTEST LANG_TABLE_SELECT_EXPLICIT(MSG_SELFTEST_LANG_TABLE, 0) extern const char* const MSG_SELFTEST_AXIS_LANG_TABLE[LANG_NUM]; diff --git a/Firmware/language_en.h b/Firmware/language_en.h index e011e12cb..b0eb0b2cd 100644 --- a/Firmware/language_en.h +++ b/Firmware/language_en.h @@ -370,3 +370,6 @@ #define(length=20, lines=2) MSG_UNLOAD_SUCCESSFULL "Repeat unloading filament?" #define(length=20, lines=2) MSG_FILE_INCOMPLETE "File incomplete. Continue anyway?" +#define(length=17, lines=1) MSG_SECOND_SERIAL_ON "2nd USART [on]" +#define(length=17, lines=1) MSG_SECOND_SERIAL_OFF "2nd USART [off]" + diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index c1dac0ffc..b00d1a51a 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -3330,6 +3330,13 @@ void lcd_temp_calibration_set() { lcd_goto_menu(lcd_settings_menu, 10); } +void lcd_second_serial_set() { + if(selectedSerialPort == 1) selectedSerialPort = 0; + else selectedSerialPort = 1; + eeprom_update_byte((unsigned char *)EEPROM_SECOND_SERIAL_ACTIVE, selectedSerialPort); + lcd_goto_menu(lcd_settings_menu, 11); +} + void lcd_calibrate_pinda() { enquecommand_P(PSTR("G76")); lcd_return_to_status(); @@ -3688,6 +3695,13 @@ static void lcd_settings_menu() else { MENU_ITEM(function, MSG_TEMP_CALIBRATION_ON, lcd_temp_calibration_set); } + if (selectedSerialPort == false) { + MENU_ITEM(function, MSG_SECOND_SERIAL_OFF, lcd_second_serial_set); + } + else { + MENU_ITEM(function, MSG_SECOND_SERIAL_ON, lcd_second_serial_set); + } + if (SilentModeMenu == 0) { MENU_ITEM(function, MSG_SILENT_MODE_OFF, lcd_silent_mode_set); } From 00945cf7c39d8c30991266e8f770e1c4e82732df Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Fri, 8 Dec 2017 16:59:45 +0100 Subject: [PATCH 3/4] version changed --- Firmware/Configuration.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index 462394090..9bcf72abe 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -9,7 +9,7 @@ // Firmware version #define FW_version "3.1.1-RC1" -#define FW_build 126 +#define FW_build 127 //#define FW_build --BUILD-NUMBER-- #define FW_version_build FW_version " b" STR(FW_build) From 5b314d08290830e36327912c92749a83a51d7f9c Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Tue, 12 Dec 2017 17:18:06 +0100 Subject: [PATCH 4/4] second serial active address in eeprom redefined --- Firmware/Configuration.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index 65f0815ac..e767cefca 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -82,6 +82,7 @@ #define EEPROM_DIR_DEPTH (EEPROM_POWER_COUNT-1) #define EEPROM_DIRS (EEPROM_DIR_DEPTH-80) //8 chars for each dir name, max 10 levels #define EEPROM_SD_SORT (EEPROM_DIRS - 1) //0 -time, 1-alpha, 2-none +#define EEPROM_SECOND_SERIAL_ACTIVE (EEPROM_SD_SORT - 1) //TMC2130 configuration #define EEPROM_TMC_AXIS_SIZE //axis configuration block size