25 Commits
1.0.4 ... 1.0.6

Author SHA1 Message Date
Knutwurst
5d3be2c342 - Rework of Touchscreen serial protocol handling
- Disable Endstop Beep
- Bugfix when stopping sd print while heating leads to a endless printing loop
- Bump version to 1.0.6 for next release
2020-07-11 13:29:06 +02:00
Knutwurst
f6836ebdcb Add correct Version to TFT which supports it. 2020-07-06 13:37:28 +02:00
Knutwurst
6e76022b13 Update README.md 2020-07-03 13:09:26 +02:00
Knutwurst
b0095e511c Update print bed size so gain a max of 220x225x210, which is within the limits of the hardware. 2020-07-03 13:05:06 +02:00
Knutwurst
0b2ea96958 - Hotend reheat fix
- Change default E steps for S Extruder
2020-06-27 22:45:26 +02:00
Knutwurst
c4cf58490e Update README.md 2020-06-21 23:36:48 +02:00
Knutwurst
e5029452e2 Add something to the readme ;) 2020-06-21 23:34:42 +02:00
Knutwurst
759e42beac Bump Version to 1.0.5 2020-06-21 16:55:26 +02:00
Knutwurst
db6707d78e Fix issue #1 where M600 did not work. Also implemented advanced pause and parging feature and fixed bug, which prevents resuming from pared nozzle. 2020-06-21 12:52:21 +02:00
Knutwurst
e7731a4b72 Add startup chime, endstop beep and extremely annoying thermal runaway warning sound, since the touchscreen can not display an error message. 2020-06-15 11:01:40 +02:00
Knutwurst
0b2a577fe8 Fix typo in readme. 2020-06-14 18:52:55 +02:00
Knutwurst
e04691b248 - Code cleanup
- Bump version to 1.0.5-prerelease
2020-06-14 17:47:42 +02:00
Knutwurst
fb801fb3ec Some file dialog fixes regarding too long filenames and special menu 2020-06-14 14:06:33 +02:00
Knutwurst
9b1009a65b Fix typo 2020-06-13 16:37:07 +02:00
Knutwurst
3952be65c3 Update README.md 2020-06-13 13:53:45 +02:00
Knutwurst
3010e0e14a Update README.md to reflect the current firmware status. 2020-06-13 13:43:31 +02:00
Knutwurst
d656a841b7 Trigorilla Board selection fix, thanks to Daniel Epp. This is necessary if you want to use a BLTouch sensor in thins setup. 2020-06-12 12:02:16 +02:00
Knutwurst
d090049594 Take anycubic's approach to implement power outage support. SD card wearing can be prevented by disabling it via POWER_OUTAGE_TEST flag. 2020-06-11 15:36:23 +02:00
Knutwurst
a52dc3c7e9 Smaller buffersize for serial communication between touchscreen and mainboard because it's not needed anymore. 2020-06-09 16:12:12 +02:00
Knutwurst
f16f964ab3 Tweak annoying keepalive interval 2020-06-09 16:09:44 +02:00
Knutwurst
f78522d3bd Restore leveling state after G28 2020-06-09 16:05:14 +02:00
Knutwurst
6e120164a2 Revert linear advance settings 2020-06-09 11:54:07 +02:00
Knutwurst
c5b7370b87 Reenable babystepping, linear advance and disable ARC support. 2020-06-09 11:51:03 +02:00
Knutwurst
1c1b9c343c Add platformIO project file 2020-06-08 18:56:43 +02:00
Knutwurst
ac8ec5cf4f Update FAQ. 2020-06-08 18:48:52 +02:00
19 changed files with 1181 additions and 236 deletions

View File

@@ -40,6 +40,7 @@
#define KNUTWURST_MEGAS
#define KNUTWURST_TMC
//#define POWER_OUTAGE_TEST
//===========================================================================
//============================= Getting Started =============================
@@ -128,7 +129,19 @@
// Enable the Bluetooth serial interface on AT90USB devices
//#define BLUETOOTH
// Choose the name from boards.h that matches your setup
/**
* Select your version of the Trigorilla (RAMPS1.4) board here.
*
* BOARD_TRIGORILLA_14 = Default Trigorilla
* BOARD_TRIGORILLA_14_11 = Newer Trigorilla v1.1 (first seen late 2018)
*
* The only major difference is a slight change on the servo pin mapping.
* This setting only is relevant if you want to use BLtouch or similar
* mods to be used via servo pins.
* The new version is to be identified by a "TRIGORILLA1.1" lettering
* on the upper left of the PCB silkscreen.
*/
#ifndef MOTHERBOARD
#define MOTHERBOARD BOARD_TRIGORILLA_14
#endif
@@ -759,7 +772,7 @@
*/
#if ENABLED(KNUTWURST_MEGAS)
#define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 400, 384 }
#define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 400, 392 }
#endif
#if DISABLED(KNUTWURST_MEGAS)
@@ -1163,16 +1176,16 @@
// @section machine
// The size of the print bed
#define X_BED_SIZE 215
#define Y_BED_SIZE 215
#define X_BED_SIZE 225
#define Y_BED_SIZE 220
// Travel limits (mm) after homing, corresponding to endstop positions.
#define X_MIN_POS -5
#define X_MIN_POS 0
#define Y_MIN_POS 0
#define Z_MIN_POS 0
#define X_MAX_POS X_BED_SIZE
#define Y_MAX_POS Y_BED_SIZE
#define Z_MAX_POS 205
#define Z_MAX_POS 210
/**
* Software Endstops
@@ -1283,7 +1296,7 @@
* Normally G28 leaves leveling disabled on completion. Enable
* this option to have G28 restore the prior leveling state.
*/
//#define RESTORE_LEVELING_AFTER_G28
#define RESTORE_LEVELING_AFTER_G28
/**
* Enable detailed logging of G28, G29, M48, etc.
@@ -1528,7 +1541,7 @@
// every couple of seconds when it can't accept commands.
//
#define HOST_KEEPALIVE_FEATURE // Disable this if your host doesn't like keepalive messages
#define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
#define DEFAULT_KEEPALIVE_INTERVAL 5 // Number of seconds between "busy" messages. Set with M113.
#define BUSY_WHILE_HEATING // Some hosts require "busy" messages even during heating
//
@@ -1819,7 +1832,7 @@
// Play a (non-earpiercing) startup chime on startup/serial connection
// of the Trigorilla board
//#define STARTUP_CHIME
#define STARTUP_CHIME
//
// ENDSTOP BEEP
@@ -2338,22 +2351,8 @@
// Allow servo angle to be edited and saved to EEPROM
//#define EDITABLE_SERVO_ANGLES
/**
* Select your version of the Trigorilla (RAMPS1.4) board here.
*
* 0 = Default Trigorilla
* 1 = Newer Trigorilla v1.1 (first seen late 2018)
*
* The only major difference is a slight change on the servo pin mapping.
* This setting only is relevant if you want to use BLtouch or similar
* mods to be used via servo pins.
* The new version is to be identified by a "TRIGORILLA1.1" lettering
* on the upper left of the PCB silkscreen.
*/
#define TRIGORILLA_VERSION 0
// Enable Anycubic TFT
#define ANYCUBIC_TOUCHSCREEN
#define ANYCUBIC_FILAMENT_RUNOUT_SENSOR
//#define ANYCUBIC_TFT_DEBUG
//#define KNUTWURST_MEGAS_DEBUG
//#define KNUTWURST_TMC_DEBUG

View File

@@ -33,6 +33,9 @@
*/
#define CONFIGURATION_ADV_H_VERSION 020005
#define KNUTWURST_MEGAS_ADV
#define KNUTWURST_TMC_ADV
// @section temperature
//===========================================================================
@@ -1628,7 +1631,7 @@
//
// G2/G3 Arc Support
//
#define ARC_SUPPORT // Disable this feature to save ~3226 bytes
//#define ARC_SUPPORT // Disable this feature to save ~3226 bytes
#if ENABLED(ARC_SUPPORT)
#define MM_PER_ARC_SEGMENT 1 // (mm) Length (or minimum length) of each arc segment
//#define ARC_SEGMENTS_PER_R 1 // Max segment length, MM_PER = Min
@@ -1867,7 +1870,7 @@
* Requires NOZZLE_PARK_FEATURE.
* This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
*/
//#define ADVANCED_PAUSE_FEATURE
#define ADVANCED_PAUSE_FEATURE
#if ENABLED(ADVANCED_PAUSE_FEATURE)
#define PAUSE_PARK_RETRACT_FEEDRATE 60 // (mm/s) Initial retract feedrate.
#define PAUSE_PARK_RETRACT_LENGTH 4 // (mm) Initial retract.
@@ -3142,3 +3145,6 @@
// Enable Marlin dev mode which adds some special commands
//#define MARLIN_DEV_MODE
//#define KNUTWURST_MEGAS_ADV
//#define KNUTWURST_TMC_ADV

View File

@@ -38,7 +38,7 @@
* Defines the version of the Marlin build. Not to be confused with
* Marlin's own build number, e.g. 2.0.x.
*/
#define CUSTOM_BUILD_VERSION "1.0.4"
#define CUSTOM_BUILD_VERSION "1.0.6"
#ifndef STRING_DISTRIBUTION_DATE
#define STRING_DISTRIBUTION_DATE "2020-03-31"

View File

@@ -42,9 +42,9 @@
// to which to write the next incoming character and tail is the index of the
// location from which to read.
#if (RAMEND < 1000)
#define SERIAL_BUFFER_SIZE 64
#define SERIAL_BUFFER_SIZE 16
#else
#define SERIAL_BUFFER_SIZE 128
#define SERIAL_BUFFER_SIZE 64
#endif
struct ring_buffer

View File

@@ -38,6 +38,7 @@
#include "../module/stepper.h"
#include "../module/temperature.h"
#include "../sd/cardreader.h"
#include "../module/configuration_store.h"
#ifdef ANYCUBIC_TOUCHSCREEN
#include "anycubic_touchscreen.h"
@@ -45,9 +46,27 @@
char _conv[8];
#if defined(POWER_OUTAGE_TEST)
int PowerInt = 6;
unsigned char PowerTestFlag = false;
int Temp_Buf_Extuder_Temperature = 0;
int Temp_Buf_Bed_Temperature = 0;
unsigned char ResumingFlag = 0;
#endif
#define MAX_PRINTABLE_FILENAME_LEN 21
void setup_OutageTestPin()
{
#if defined(POWER_OUTAGE_TEST)
pinMode(OUTAGETEST_PIN, INPUT);
pinMode(OUTAGECON_PIN, OUTPUT);
WRITE(OUTAGECON_PIN, LOW);
#endif
}
char *itostr2(const uint8_t &x)
{
//sprintf(conv,"%5.1f",x);
int xx = x;
_conv[0] = (xx / 10) % 10 + '0';
_conv[1] = (xx) % 10 + '0';
@@ -93,7 +112,6 @@ AnycubicTouchscreenClass::AnycubicTouchscreenClass()
void AnycubicTouchscreenClass::Setup()
{
HardwareSerial.begin(115200);
//HARDWARE_SERIAL_START();
HARDWARE_SERIAL_PROTOCOLPGM("J17"); // J17 Main board reset
HARDWARE_SERIAL_ENTER();
delay(10);
@@ -118,26 +136,18 @@ void AnycubicTouchscreenClass::Setup()
}
#endif
SelectedDirectory[0] = 0;
currentTouchscreenSelection[0] = 0;
SpecialMenu = false;
FilamentSensorEnabled = true;
#ifdef STARTUP_CHIME
buzzer.tone(250, 554); // C#5
buzzer.tone(250, 740); // F#5
buzzer.tone(250, 554); // C#5
buzzer.tone(500, 831); // G#5
buzzer.tone(100, 554);
buzzer.tone(100, 740);
buzzer.tone(100, 831);
#endif
}
void AnycubicTouchscreenClass::WriteOutageEEPromData()
{
//int pos = E2END - 256;
}
void AnycubicTouchscreenClass::ReadOutageEEPromData()
{
//int pos = E2END - 256;
setup_OutageTestPin();
}
void AnycubicTouchscreenClass::KillTFT()
@@ -174,6 +184,8 @@ void AnycubicTouchscreenClass::StartPrint()
SERIAL_ECHOLNPGM("DEBUG: M24 Resume from regular pause");
#endif
IsParked = false; // remove parked flag
wait_for_heatup = false;
wait_for_user = false;
starttime = millis();
card.startFileprint(); // resume regularly
TFTstate = ANYCUBIC_TFT_STATE_SDPRINT;
@@ -203,6 +215,7 @@ void AnycubicTouchscreenClass::StartPrint()
SERIAL_ECHOLNPGM("DEBUG: M24 Resume from Filament Runout");
#endif
IsParked = false; // clear flags
wait_for_user = false;
ai3m_pause_state = 0;
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("DEBUG: Filament Pause Flag cleared");
@@ -289,22 +302,21 @@ void AnycubicTouchscreenClass::PausePrint()
TFTstate = ANYCUBIC_TFT_STATE_SDPAUSE_REQ;
}
void AnycubicTouchscreenClass::StopPrint()
inline void AnycubicTouchscreenClass::StopPrint()
{
// stop print, disable heaters
wait_for_user = false;
wait_for_heatup = false;
card.endFilePrint();
card.closefile();
//queue.clear();
#ifdef ANYCUBIC_TFT_DEBUGANYCUBIC_TFT_STATE_SDSTOP_REQ
IsParked = false;
if(card.isFileOpen) {
card.endFilePrint();
card.closefile();
}
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("DEBUG: Stopped and cleared");
#endif
print_job_timer.stop();
thermalManager.disable_all_heaters();
// we are not parked yet, do it in the display state routine
IsParked = false;
// turn off fan, cancel any heatups and set display state
ai3m_pause_state = 0;
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOPAIR(" DEBUG: AI3M Pause State: ", ai3m_pause_state);
@@ -318,16 +330,15 @@ void AnycubicTouchscreenClass::StopPrint()
void AnycubicTouchscreenClass::FilamentChangeResume()
{
wait_for_user = false; //must be done twice, since we have a bug in marlin
wait_for_heatup = false;
// call M108 to break out of M600 pause
queue.inject_P(PSTR("M108"));
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("DEBUG: M108 Resume called");
#endif
// remove waiting flags
wait_for_heatup = false;
wait_for_user = false;
wait_for_heatup = false;
// resume with proper progress state
card.startFileprint();
#ifdef ANYCUBIC_TFT_DEBUG
@@ -365,11 +376,10 @@ void AnycubicTouchscreenClass::ReheatNozzle()
// enable heaters again
HOTEND_LOOP()
//thermalManager.reset_hotend_idle_timer(e);
thermalManager.reset_hotend_idle_timer(e);
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("DEBUG: Clear flags");
#endif
// lower the pause flag by two to restore initial pause condition
if (ai3m_pause_state > 3)
{
ai3m_pause_state -= 2;
@@ -379,7 +389,6 @@ void AnycubicTouchscreenClass::ReheatNozzle()
#endif
}
// clear waiting flags
wait_for_user = false;
wait_for_heatup = false;
@@ -403,8 +412,8 @@ void AnycubicTouchscreenClass::ParkAfterStop()
SERIAL_ECHOLNPGM("DEBUG: SDSTOP: Park XY");
#endif
}
queue.inject_P(PSTR("M84")); // disable stepper motors
queue.inject_P(PSTR("M27")); // force report of SD status
queue.enqueue_now_P(PSTR("M84")); // disable stepper motors
queue.enqueue_now_P(PSTR("M27")); // force report of SD status
ai3m_pause_state = 0;
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOPAIR(" DEBUG: AI3M Pause State: ", ai3m_pause_state);
@@ -425,90 +434,94 @@ bool AnycubicTouchscreenClass::CodeSeen(char code)
void AnycubicTouchscreenClass::HandleSpecialMenu()
{
if (strcmp(SelectedDirectory, "<special menu>") == 0)
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOPAIR(" DEBUG: Special Menu Selection: ", currentTouchscreenSelection);
SERIAL_EOL();
#endif
if (strcasestr(currentTouchscreenSelection, "<Special Menu>") != NULL)
{
SpecialMenu = true;
}
else if (strcmp(SelectedDirectory, "<pid tune hotend>") == 0)
else if (strcasestr(currentTouchscreenSelection, "<PID Tune Hotend>") != NULL)
{
SERIAL_ECHOLNPGM("Special Menu: PID Tune Hotend");
queue.inject_P(PSTR("M106 S204\nM303 E0 S210 C15 U1"));
}
else if (strcmp(SelectedDirectory, "<pid tune ultrabase>") == 0)
else if (strcasestr(currentTouchscreenSelection, "<PID Tune Ultrabase>") != NULL)
{
SERIAL_ECHOLNPGM("Special Menu: PID Tune Ultrabase");
queue.inject_P(PSTR("M303 E-1 S60 C6 U1"));
}
else if (strcmp(SelectedDirectory, "<save eeprom>") == 0)
else if (strcasestr(currentTouchscreenSelection, "<Save EEPROM>") != NULL)
{
SERIAL_ECHOLNPGM("Special Menu: Save EEPROM");
queue.inject_P(PSTR("M500"));
buzzer.tone(105, 1108);
buzzer.tone(210, 1661);
}
else if (strcmp(SelectedDirectory, "<load fw defaults>") == 0)
else if (strcasestr(currentTouchscreenSelection, "<Load FW Defaults>") != NULL)
{
SERIAL_ECHOLNPGM("Special Menu: Load FW Defaults");
queue.inject_P(PSTR("M502"));
buzzer.tone(105, 1661);
buzzer.tone(210, 1108);
}
else if (strcmp(SelectedDirectory, "<preheat ultrabase>") == 0)
else if (strcasestr(currentTouchscreenSelection, "<Preheat Ultrabase>") != NULL)
{
SERIAL_ECHOLNPGM("Special Menu: Preheat Ultrabase");
queue.inject_P(PSTR("M140 S60"));
}
else if (strcmp(SelectedDirectory, "<start mesh leveling>") == 0)
else if (strcasestr(currentTouchscreenSelection, "<Start Mesh Leveling>") != NULL)
{
SERIAL_ECHOLNPGM("Special Menu: Start Mesh Leveling");
queue.inject_P(PSTR("G29 S1"));
}
else if (strcmp(SelectedDirectory, "<next mesh point>") == 0)
else if (strcasestr(currentTouchscreenSelection, "<Next Mesh Point>") != NULL)
{
SERIAL_ECHOLNPGM("Special Menu: Next Mesh Point");
queue.inject_P(PSTR("G29 S2"));
}
else if (strcmp(SelectedDirectory, "<z up 0.1>") == 0)
else if (strcasestr(currentTouchscreenSelection, "<Z Up 0.1>") != NULL)
{
SERIAL_ECHOLNPGM("Special Menu: Z Up 0.1");
queue.inject_P(PSTR("G91\nG1 Z+0.1\nG90"));
}
else if (strcmp(SelectedDirectory, "<z down 0.1>") == 0)
else if (strcasestr(currentTouchscreenSelection, "<Z Down 0.1>") != NULL)
{
SERIAL_ECHOLNPGM("Special Menu: Z Down 0.1");
queue.inject_P(PSTR("G91\nG1 Z-0.1\nG90"));
}
else if (strcmp(SelectedDirectory, "<z up 0.02>") == 0)
else if (strcasestr(currentTouchscreenSelection, "<Z Up 0.02>") != NULL)
{
SERIAL_ECHOLNPGM("Special Menu: Z Up 0.02");
queue.inject_P(PSTR("G91\nG1 Z+0.02\nG90"));
}
else if (strcmp(SelectedDirectory, "<z down 0.02>") == 0)
else if (strcasestr(currentTouchscreenSelection, "<Z Down 0.02>") != NULL)
{
SERIAL_ECHOLNPGM("Special Menu: Z Down 0.02");
queue.inject_P(PSTR("G91\nG1 Z-0.02\nG90"));
}
else if (strcmp(SelectedDirectory, "<z up 0.01>") == 0)
else if (strcasestr(currentTouchscreenSelection, "<Z Up 0.01>") != NULL)
{
SERIAL_ECHOLNPGM("Special Menu: Z Up 0.01");
queue.inject_P(PSTR("G91\nG1 Z+0.01\nG90"));
}
else if (strcmp(SelectedDirectory, "<z down 0.01>") == 0)
else if (strcasestr(currentTouchscreenSelection, "<Z Down 0.01>") != NULL)
{
SERIAL_ECHOLNPGM("Special Menu: Z Down 0.01");
queue.inject_P(PSTR("G91\nG1 Z-0.01\nG90"));
}
else if (strcmp(SelectedDirectory, "<filamentchange pause>") == 0)
else if (strcasestr(currentTouchscreenSelection, "<Fil. Change Pause>") != NULL)
{
SERIAL_ECHOLNPGM("Special Menu: FilamentChange Pause");
SERIAL_ECHOLNPGM("Special Menu: Fil. Change Pause");
FilamentChangePause();
}
else if (strcmp(SelectedDirectory, "<filamentchange resume>") == 0)
else if (strcasestr(currentTouchscreenSelection, "<Fil. Change Resume>") != NULL)
{
SERIAL_ECHOLNPGM("Special Menu: FilamentChange Resume");
SERIAL_ECHOLNPGM("Special Menu: Fil. Change Resume");
FilamentChangeResume();
}
else if (strcmp(SelectedDirectory, "<disable fil. sensor>") == 0)
else if (strcasestr(currentTouchscreenSelection, "<Disable Fil. Sensor>") != NULL)
{
SERIAL_ECHOLNPGM("Special Menu: Disable Filament Sensor");
FilamentSensorEnabled = false;
@@ -516,109 +529,91 @@ void AnycubicTouchscreenClass::HandleSpecialMenu()
buzzer.tone(105, 1108);
buzzer.tone(105, 1108);
}
else if (strcmp(SelectedDirectory, "<enable fil. sensor>") == 0)
else if (strcasestr(currentTouchscreenSelection, "<Enable Fil. Sensor>") != NULL)
{
SERIAL_ECHOLNPGM("Special Menu: Enable Filament Sensor");
FilamentSensorEnabled = true;
buzzer.tone(105, 1108);
buzzer.tone(105, 1108);
}
else if (strcmp(SelectedDirectory, "<exit>") == 0)
else if (strcasestr(currentTouchscreenSelection, "<Exit>") != NULL)
{
SpecialMenu = false;
}
}
void AnycubicTouchscreenClass::Ls()
void AnycubicTouchscreenClass::AnycubicTouchscreen()
{
if (SpecialMenu)
{
switch (filenumber)
{
case 0: // Page 1
HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Preheat Ultrabase>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Preheat Ultrabase>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<FilamentChange Pause>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<FilamentChange Pause>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<FilamentChange Resume>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<FilamentChange Resume>");
HARDWARE_SERIAL_PROTOCOLLN("<Exit>");
HARDWARE_SERIAL_PROTOCOLLN("<Exit>");
HARDWARE_SERIAL_PROTOCOLLN("<Preheat Ultrabase>");
HARDWARE_SERIAL_PROTOCOLLN("<Preheat Ultrabase>");
HARDWARE_SERIAL_PROTOCOLLN("<Fil. Change Pause>");
HARDWARE_SERIAL_PROTOCOLLN("<Fil. Change Pause>");
HARDWARE_SERIAL_PROTOCOLLN("<Fil. Change Resume>");
HARDWARE_SERIAL_PROTOCOLLN("<Fil. Change Resume>");
break;
case 4: // Page 2
HARDWARE_SERIAL_PROTOCOLLNPGM("<Start Mesh Leveling>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Start Mesh Leveling>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Next Mesh Point>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Next Mesh Point>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Up 0.1>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Up 0.1>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Down 0.1>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Down 0.1>");
HARDWARE_SERIAL_PROTOCOLLN("<Start Mesh Leveling>");
HARDWARE_SERIAL_PROTOCOLLN("<Start Mesh Leveling>");
HARDWARE_SERIAL_PROTOCOLLN("<Next Mesh Point>");
HARDWARE_SERIAL_PROTOCOLLN("<Next Mesh Point>");
HARDWARE_SERIAL_PROTOCOLLN("<Z Up 0.1>");
HARDWARE_SERIAL_PROTOCOLLN("<Z Up 0.1>");
HARDWARE_SERIAL_PROTOCOLLN("<Z Down 0.1>");
HARDWARE_SERIAL_PROTOCOLLN("<Z Down 0.1>");
break;
case 8: // Page 3
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Up 0.02>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Up 0.02>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Down 0.02>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Down 0.02>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Up 0.01>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Up 0.01>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Down 0.01>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Down 0.01>");
HARDWARE_SERIAL_PROTOCOLLN("<Z Up 0.02>");
HARDWARE_SERIAL_PROTOCOLLN("<Z Up 0.02>");
HARDWARE_SERIAL_PROTOCOLLN("<Z Down 0.02>");
HARDWARE_SERIAL_PROTOCOLLN("<Z Down 0.02>");
HARDWARE_SERIAL_PROTOCOLLN("<Z Up 0.01>");
HARDWARE_SERIAL_PROTOCOLLN("<Z Up 0.01>");
HARDWARE_SERIAL_PROTOCOLLN("<Z Down 0.01>");
HARDWARE_SERIAL_PROTOCOLLN("<Z Down 0.01>");
break;
case 12: // Page 4
HARDWARE_SERIAL_PROTOCOLLNPGM("<PID Tune Hotend>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<PID Tune Hotend>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<PID Tune Ultrabase>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<PID Tune Ultrabase>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Save EEPROM>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Save EEPROM>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Load FW Defaults>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Load FW Defaults>");
HARDWARE_SERIAL_PROTOCOLLN("<PID Tune Hotend>");
HARDWARE_SERIAL_PROTOCOLLN("<PID Tune Hotend>");
HARDWARE_SERIAL_PROTOCOLLN("<PID Tune Ultrabase>");
HARDWARE_SERIAL_PROTOCOLLN("<PID Tune Ultrabase>");
HARDWARE_SERIAL_PROTOCOLLN("<Save EEPROM>");
HARDWARE_SERIAL_PROTOCOLLN("<Save EEPROM>");
HARDWARE_SERIAL_PROTOCOLLN("<Load FW Defaults>");
HARDWARE_SERIAL_PROTOCOLLN("<Load FW Defaults>");
break;
case 16: // Page 5
HARDWARE_SERIAL_PROTOCOLLNPGM("<Disable Fil. Sensor>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Disable Fil. Sensor>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Enable Fil. Sensor>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Enable Fil. Sensor>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>");
HARDWARE_SERIAL_PROTOCOLLN("<Disable Fil. Sensor>");
HARDWARE_SERIAL_PROTOCOLLN("<Disable Fil. Sensor>");
HARDWARE_SERIAL_PROTOCOLLN("<Enable Fil. Sensor>");
HARDWARE_SERIAL_PROTOCOLLN("<Enable Fil. Sensor>");
HARDWARE_SERIAL_PROTOCOLLN("<Exit>");
HARDWARE_SERIAL_PROTOCOLLN("<Exit>");
break;
/*
case 12: // Fourth Page
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Up 0.1>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Up 0.1>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Down 0.1>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Down 0.1>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Up 0.02>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Up 0.02>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Down 0.02>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Down 0.02>");
break;
*/
default:
HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>");
break;
}
}
#ifdef SDSUPPORT
else if (card.isMounted())
{
uint16_t cnt = filenumber;
uint16_t count = filenumber;
uint16_t max_files;
uint16_t dir_files = card.countFilesInWorkDir();
// What is this shit? What if there are exactely 3 files+folders?
// TODO: find something better than this crap.
if ((dir_files - filenumber) < 4)
{
max_files = dir_files;
@@ -628,44 +623,49 @@ void AnycubicTouchscreenClass::Ls()
max_files = filenumber + 3;
}
for (cnt = filenumber; cnt <= max_files; cnt++)
for (count = filenumber; count <= max_files; count++)
{
if (cnt == 0) // Special Entry
if (count == 0) // Special Entry
{
if (strcmp(card.getWorkDirName(), "/") == 0)
{
HARDWARE_SERIAL_PROTOCOLLNPGM("<Special Menu>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Special Menu>");
SERIAL_ECHO(cnt);
HARDWARE_SERIAL_PROTOCOLLN("<Special Menu>");
HARDWARE_SERIAL_PROTOCOLLN("<Special Menu>");
SERIAL_ECHO(count);
SERIAL_ECHOLNPGM("<Special_Menu>");
}
else
{
HARDWARE_SERIAL_PROTOCOLLNPGM("/..");
HARDWARE_SERIAL_PROTOCOLLNPGM("/..");
SERIAL_ECHO(cnt);
HARDWARE_SERIAL_PROTOCOLLN("/..");
HARDWARE_SERIAL_PROTOCOLLN("/..");
SERIAL_ECHO(count);
SERIAL_ECHOLNPGM("/..");
}
}
else
{
card.selectFileByIndex(cnt - 1);
card.selectFileByIndex(count - 1);
// Bugfix for non-printable special characters
// which are now replaced by underscores.
int fileNameLen = strlen(card.longFilename);
// Cut off too long filenames.
// They don't fit on the screen anyways.
if(fileNameLen > MAX_PRINTABLE_FILENAME_LEN)
fileNameLen = MAX_PRINTABLE_FILENAME_LEN;
char buffer[fileNameLen];
for (unsigned char i = 0; i < fileNameLen; i++){
for (unsigned char i = 0; i < fileNameLen; i++)
{
buffer[i] = card.longFilename[i];
if (!isPrintable(buffer[i]))
if (!isPrintable(buffer[i]))
{
buffer[i] = '_';
}
}
buffer[fileNameLen] = '\0';
if (card.flag.filenameIsDir)
{
@@ -673,7 +673,7 @@ void AnycubicTouchscreenClass::Ls()
HARDWARE_SERIAL_PROTOCOLLN(card.filename);
HARDWARE_SERIAL_PROTOCOLPGM("/");
HARDWARE_SERIAL_PROTOCOLLN(buffer);
SERIAL_ECHO(cnt);
SERIAL_ECHO(count);
SERIAL_ECHOPGM("/");
SERIAL_ECHOLN(buffer);
}
@@ -681,7 +681,7 @@ void AnycubicTouchscreenClass::Ls()
{
HARDWARE_SERIAL_PROTOCOLLN(card.filename);
HARDWARE_SERIAL_PROTOCOLLN(buffer);
SERIAL_ECHO(cnt);
SERIAL_ECHO(count);
SERIAL_ECHOLN(buffer);
}
}
@@ -690,8 +690,7 @@ void AnycubicTouchscreenClass::Ls()
#endif
else
{
HARDWARE_SERIAL_PROTOCOLLNPGM("<Special_Menu>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Special_Menu>");
// Do nothing?
}
}
@@ -757,8 +756,6 @@ void AnycubicTouchscreenClass::StateHandler()
{
TFTstate = ANYCUBIC_TFT_STATE_SDPRINT;
starttime = millis();
// --> Send print info to display... most probably print started via gcode
}
#endif
break;
@@ -766,7 +763,6 @@ void AnycubicTouchscreenClass::StateHandler()
#ifdef SDSUPPORT
if (!card.isPrinting())
{
// It seems that we are not printing anymore... pause or stopped?
if (card.isFileOpen())
{
// File is still open --> paused
@@ -807,7 +803,6 @@ void AnycubicTouchscreenClass::StateHandler()
#ifdef SDSUPPORT
if ((!card.isPrinting()) && (!planner.movesplanned()))
{
// We have to wait until the sd card printing has been settled
if (ai3m_pause_state < 2)
{
// no flags, this is a regular pause.
@@ -861,7 +856,7 @@ void AnycubicTouchscreenClass::StateHandler()
// did we park the hotend already?
if ((!IsParked) && (!card.isPrinting()) && (!planner.movesplanned()))
{
queue.inject_P(PSTR("G91\nG1 E-1 F1800\nG90")); //retract
queue.enqueue_now_P(PSTR("G91\nG1 E-1 F1800\nG90")); //retract
ParkAfterStop();
IsParked = true;
}
@@ -874,9 +869,9 @@ void AnycubicTouchscreenClass::StateHandler()
void AnycubicTouchscreenClass::FilamentRunout()
{
if(FilamentSensorEnabled == true)
if (FilamentSensorEnabled == true)
{
#if ENABLED(ANYCUBIC_FILAMENT_RUNOUT_SENSOR)
#if ENABLED(ANYCUBIC_FILAMENT_RUNOUT_SENSOR)
FilamentTestStatus = READ(19) & 0xff;
if (FilamentTestStatus > FilamentTestLastStatus)
@@ -888,9 +883,9 @@ void AnycubicTouchscreenClass::FilamentRunout()
// since this is inside a loop, only set delay time once
if (FilamentSetMillis)
{
#ifdef ANYCUBIC_TFT_DEBUG
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("DEBUG: Set filament trigger time");
#endif
#endif
// set the delayed timestamp to 3000ms later
fil_delay = fil_ms + 3000UL;
// this doesn't need to run until the filament is recovered again
@@ -903,26 +898,26 @@ void AnycubicTouchscreenClass::FilamentRunout()
{
if (!IsParked)
{
#ifdef ANYCUBIC_TFT_DEBUG
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("DEBUG: 3000ms delay done");
#endif
#endif
if (card.isPrinting())
{
ai3m_pause_state = 3;
; // set runout pause flag
#ifdef ANYCUBIC_TFT_DEBUG
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOPAIR(" DEBUG: AI3M Pause State: ", ai3m_pause_state);
SERIAL_EOL();
#endif
#endif
PausePrint();
}
else if (!card.isPrinting())
{
HARDWARE_SERIAL_PROTOCOLPGM("J15"); //J15 FILAMENT LACK
HARDWARE_SERIAL_ENTER();
#ifdef ANYCUBIC_TFT_DEBUG
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("TFT Serial Debug: Filament runout... J15");
#endif
#endif
FilamentTestLastStatus = FilamentTestStatus;
}
}
@@ -933,11 +928,11 @@ void AnycubicTouchscreenClass::FilamentRunout()
{
FilamentSetMillis = true; // set the timestamps on the next loop again
FilamentTestLastStatus = FilamentTestStatus;
#ifdef ANYCUBIC_TFT_DEBUG
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("TFT Serial Debug: Filament runout recovered");
#endif
#endif
}
#endif
#endif
}
}
@@ -1065,9 +1060,9 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
break;
}
case 8: // A8 GET SD LIST
case 8: // A8 GET SD LIST
#ifdef SDSUPPORT
SelectedDirectory[0] = 0;
currentTouchscreenSelection[0] = 0;
if (!IS_SD_INSERTED())
{
HARDWARE_SERIAL_PROTOCOLPGM("J02");
@@ -1080,7 +1075,7 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
HARDWARE_SERIAL_PROTOCOLPGM("FN "); // Filelist start
HARDWARE_SERIAL_ENTER();
Ls();
AnycubicTouchscreen();
HARDWARE_SERIAL_PROTOCOLPGM("END"); // Filelist stop
HARDWARE_SERIAL_ENTER();
}
@@ -1149,15 +1144,15 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
starpos = (strchr(TFTstrchr_pointer + 4, '*'));
if (TFTstrchr_pointer[4] == '/')
{
strcpy(SelectedDirectory, TFTstrchr_pointer + 5);
strcpy(currentTouchscreenSelection, TFTstrchr_pointer + 5);
}
else if (TFTstrchr_pointer[4] == '<')
{
strcpy(SelectedDirectory, TFTstrchr_pointer + 4);
strcpy(currentTouchscreenSelection, TFTstrchr_pointer + 4);
}
else
{
SelectedDirectory[0] = 0;
currentTouchscreenSelection[0] = 0;
if (starpos != NULL)
*(starpos - 1) = '\0';
@@ -1203,18 +1198,21 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
#endif
break;
case 15: // A15 RESUMING FROM OUTAGE
//if((!planner.movesplanned())&&(!TFTresumingflag))
// {
// if(card.isMounted())
// FlagResumFromOutage=true;
// ResumingFlag=1;
// card.startFileprint();
// starttime=millis();
// HARDWARE_SERIAL_SUCC_START;
// }
//HARDWARE_SERIAL_ENTER();
#if defined(POWER_OUTAGE_TEST)
if ((!planner.movesplanned()) && (TFTstate != ANYCUBIC_TFT_STATE_SDPAUSE))
{
if (card.isFileOpen())
FlagResumFromOutage = true;
ResumingFlag = 1;
card.startFileprint();
starttime = millis();
HARDWARE_SERIAL_SUCC_START;
}
HARDWARE_SERIAL_ENTER();
#endif
break;
case 16: // A16 set hotend temp
case 16: // A16 set hotend temp
{
unsigned int tempvalue;
if (CodeSeen('S'))
@@ -1230,7 +1228,6 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
thermalManager.setTargetHotend(tempvalue, 0);
}
}
// HARDWARE_SERIAL_ENTER();
break;
case 17: // A17 set heated bed temp
{
@@ -1241,7 +1238,6 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
thermalManager.setTargetBed(tempbed);
}
}
// HARDWARE_SERIAL_ENTER();
break;
case 18: // A18 set fan speed
unsigned int temp;
@@ -1417,30 +1413,30 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
break;
case 26: // A26 refresh SD
#ifdef SDSUPPORT
if (SelectedDirectory[0] == 0)
if (currentTouchscreenSelection[0] == 0)
{
card.mount();
}
else
{
if ((SelectedDirectory[0] == '.') && (SelectedDirectory[1] == '.'))
if ((currentTouchscreenSelection[0] == '.') && (currentTouchscreenSelection[1] == '.'))
{
card.cdup();
}
else
{
if (SelectedDirectory[0] == '<')
if (currentTouchscreenSelection[0] == '<')
{
HandleSpecialMenu();
}
else
{
card.cd(SelectedDirectory);
card.cd(currentTouchscreenSelection);
}
}
}
SelectedDirectory[0] = 0;
currentTouchscreenSelection[0] = 0;
if (!IS_SD_INSERTED())
{
@@ -1478,7 +1474,7 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
}
TFTbufindw = (TFTbufindw + 1) % TFTBUFSIZE;
TFTbuflen += 1;
serial3_count = 0; //clear buffer
serial3_count = 0;
}
else
{
@@ -1547,5 +1543,21 @@ void AnycubicTouchscreenClass::BedHeatingDone()
#endif
}
void PowerKill()
{
#ifdef POWER_OUTAGE_TEST
Temp_Buf_Extuder_Temperature = thermalManager.degTargetHotend(0);
Temp_Buf_Bed_Temperature = thermalManager.degTargetBed();
if (PowerTestFlag == true)
{
thermalManager.disable_all_heaters();
OutageSave();
PowerTestFlag = false;
thermalManager.setTargetHotend(Temp_Buf_Extuder_Temperature, 0);
thermalManager.setTargetBed(Temp_Buf_Bed_Temperature);
}
#endif
}
AnycubicTouchscreenClass AnycubicTouchscreen;
#endif

View File

@@ -33,7 +33,7 @@ char *ftostr32(const float &);
#define TFTBUFSIZE 4
#define TFT_MAX_CMD_SIZE 96
#define MSG_MY_VERSION "V116"
#define MSG_MY_VERSION "Knutwurst-1.0.5"
#define ANYCUBIC_TFT_STATE_IDLE 0
#define ANYCUBIC_TFT_STATE_SDPRINT 1
@@ -86,6 +86,7 @@ private:
uint16_t HeaterCheckCount = 0;
bool IsParked = false;
#if defined(POWER_OUTAGE_TEST)
struct OutageDataStruct
{
char OutageDataVersion;
@@ -95,13 +96,12 @@ private:
float last_hotend_temp;
long lastSDposition;
} OutageData;
#endif
void WriteOutageEEPromData();
void ReadOutageEEPromData();
float CodeValue();
bool CodeSeen(char);
void Ls();
void AnycubicTouchscreen();
void StartPrint();
void PausePrint();
void StopPrint();
@@ -115,7 +115,7 @@ private:
void ReheatNozzle();
void ParkAfterStop();
char SelectedDirectory[30];
char currentTouchscreenSelection[30];
uint8_t SpecialMenu = false;
uint8_t FilamentSensorEnabled = true;

View File

@@ -56,6 +56,8 @@
#include "../gcode/gcode.h"
#include "../MarlinCore.h"
#include "../sd/cardreader.h"
#if EITHER(EEPROM_SETTINGS, SD_FIRMWARE_UPDATE)
#include "../HAL/shared/eeprom_api.h"
#endif
@@ -522,6 +524,9 @@ void MarlinSettings::postprocess() {
#define EEPROM_READ_ALWAYS(VAR) do{ persistentStore.read_data(eeprom_index, (uint8_t*)&VAR, sizeof(VAR), &working_crc); }while(0)
#define EEPROM_ASSERT(TST,ERR) do{ if (!(TST)) { SERIAL_ERROR_MSG(ERR); eeprom_error = true; } }while(0)
#define EEPROM_WRITE_VAR(pos, value) persistentStore.write_data(pos, (uint8_t*)&value, sizeof(value))
#define EEPROM_READ_VAR(pos, value) persistentStore.read_data(pos, (uint8_t*)&value, sizeof(value))
#if ENABLED(DEBUG_EEPROM_READWRITE)
#define _FIELD_TEST(FIELD) \
EEPROM_ASSERT( \
@@ -3682,6 +3687,45 @@ void MarlinSettings::reset() {
#endif
}
#ifdef POWER_OUTAGE_TEST
float last_position[4] = { 0.0,0.0,0.0,0.0 };
long last_sd_position[1] = { 0 };
void OutageSave()
{
char ver[4] = "000";
int j = 20;
EEPROM_WRITE_VAR(j,ver);
last_sd_position[0] = card.GetLastSDpos();
last_position[0] = current_position[E_AXIS];
last_position[1] = current_position[Z_AXIS];
last_position[2] = current_position[Y_AXIS];
last_position[3] = current_position[X_AXIS];
EEPROM_WRITE_VAR(j,last_sd_position[0]);
EEPROM_WRITE_VAR(j,last_position[0]); //E
EEPROM_WRITE_VAR(j,last_position[1]); //Z
EEPROM_WRITE_VAR(j,last_position[2]); //Y
EEPROM_WRITE_VAR(j,last_position[3]); //X
}
void OutageRead()
{
int i = 20;
char stored_ver[4];
char ver[4] = EEPROM_VERSION;
EEPROM_READ_VAR(i,stored_ver);
EEPROM_READ_VAR(i,last_sd_position[0]);
EEPROM_READ_VAR(i,last_position[0]); //E
EEPROM_READ_VAR(i,last_position[1]); //Z
EEPROM_READ_VAR(i,last_position[2]); //Y
EEPROM_READ_VAR(i,last_position[3]); //X
}
#endif
#endif // !DISABLE_M503
#pragma pack(pop)

View File

@@ -27,6 +27,15 @@
#include "../HAL/shared/eeprom_api.h"
#endif
#ifdef POWER_OUTAGE_TEST
static bool RestartFlag = false;
void OutageSave();
void OutageRead();
extern float last_position[4];
extern long last_sd_position[1];
#endif
class MarlinSettings {
public:
static uint16_t datasize();

View File

@@ -2071,22 +2071,11 @@ void Temperature::init() {
case TRRunaway:
_temp_error(heater_id, str_t_thermal_runaway, GET_TEXT(MSG_THERMAL_RUNAWAY));
BUZZ(2000, 1108);
BUZZ(2000, 1661);
BUZZ(2000, 1108);
BUZZ(2000, 1661);
BUZZ(2000, 1108);
BUZZ(2000, 1661);
BUZZ(2000, 1108);
BUZZ(2000, 1661);
BUZZ(2000, 1108);
BUZZ(2000, 1661);
BUZZ(2000, 1108);
BUZZ(2000, 1661);
BUZZ(2000, 1108);
BUZZ(2000, 1661);
BUZZ(2000, 1108);
BUZZ(2000, 1661);
for(uint8_t i = 0; i < 30; i++)
{
BUZZ(2000, 1108);
BUZZ(2000, 1661);
}
}
}

View File

@@ -90,6 +90,11 @@
#define FAN2_PIN TG_FAN2_PIN
#define ORIG_E0_AUTO_FAN_PIN TG_FAN2_PIN // Used in Anycubic Kossel example config
#ifdef POWER_OUTAGE_TEST
#define OUTAGETEST_PIN 79
#define OUTAGECON_PIN 58
#endif
#include "pins_RAMPS.h"
//

View File

@@ -34,6 +34,11 @@
#include "../gcode/queue.h"
#include "../module/configuration_store.h"
#if defined(POWER_OUTAGE_TEST)
extern unsigned char PowerTestFlag;
extern char seekdataflag;
#endif
#if ENABLED(EMERGENCY_PARSER)
#include "../feature/e_parser.h"
#endif

View File

@@ -153,6 +153,7 @@ public:
static inline int16_t get() { sdpos = file.curPosition(); return (int16_t)file.read(); }
static inline int16_t read(void* buf, uint16_t nbyte) { return file.isOpen() ? file.read(buf, nbyte) : -1; }
static inline int16_t write(void* buf, uint16_t nbyte) { return file.isOpen() ? file.write(buf, nbyte) : -1; }
static inline long GetLastSDpos() { return sdpos; };
static Sd2Card& getSd2Card() { return sd2card; }

View File

@@ -9,6 +9,7 @@ Diese Firmwarekonfiguration aktiviert viele neue erweitere Funktionen der Marlin
* Mesh-Bed Kalibrierung
* S-Kurven Beschleunigung
* "Juction Deviation" statt des klassischen "Jerk"
* "Linear Pressure Control v1.5" aktiviert (kann mit M900 konfiguriert werden)
* Babystepping während des Druckvorgangs
* Bilinear Bed Leveling (BBL)
* Manuelles Editieren der Messpunkte
@@ -18,6 +19,7 @@ Diese Firmwarekonfiguration aktiviert viele neue erweitere Funktionen der Marlin
* Automatische EEPROM Initialisierung
* Filament Runout Sensor kann im Menü deaktiviert werden
* Wiederaufnahme des Drucks nach Stromausfall (WiP)
* Druckbettgröße erweitert auf 220 x 225 x 210 mm
Besser im Vergleich zu anderen Firmwares (Bugfixes):
* Aufgeräumtes Special-Menü
@@ -50,31 +52,40 @@ Dein Bauteillüfter läuft jetzt mit voller Drehzahl, was er vorher nicht tat. S
Nein. Aber sicher auch nicht schlechter.
>Wo sind die Downloads?
Weiter unten.
>Muss ich bei TMC Treibern die Stecker drehen?
Nö. Lade dir einfach die korrekte Version herunter.
>Welche TMC2208 Motortreiber sollte ich kaufen? Lieber die V2 oder die Bigtreetech V3?
>Welche TMC Motortreiber sollte ich kaufen? Lieber die V2 oder die Bigtreetech V3?
Weder noch! Es gibt keine "V2" oder "V3". Die offizielle letzte Version von Trinamic ist v1.2 und die beiden großen primären Hersteller für die echten SilentStepSticks sind FYSETC und WATTERROTT. Lass bloß die Finger von Bigtreetech.
Weder noch! Es gibt keine "V2" oder "V3". Die offizielle letzte Version von Trinamic ist v1.2 und die beiden großen priämären Hersteller für die echten SilentStepSticks sind FYSTEC und WATTERROTT. Lass bloß die Finger von Bigtreetech.
>Ich habe die Stecker bei meinen Motoren schon gedreht, als ich die TMC Treiber eingebaut habe. Muss ich jetzt trotzdem die TMC Version flashen?
Nein. Benutze einfach die Nicht-TMC Version, da sonst die Motoren wieder in die falsche Richtung laufen.
>Als ich die Treiber eingebaut habe, qualmte mein Mainboard in der Mitte rechts. Ist das normal?
Nein. Du hast die Treiber falsch herum eingebaut. Jetzt ist die Z-Diode (733A) verbrannt. Tausche sie aus und alles funktioniert wieder. Deine falsch gesteckten Treiber kannst du aber vermutlich wegschmeißen.
>Muss ich wie bei anderen Firmwares noch die E-Steps einstellen, wenn ich einen Mega S besitze?
Nein, lade dir einfach die korrekte Version herunter. Trotzdem solltest du die Steps noch kalibrieren.
>Wieso zeigt das Display keine Fehlermeldungen an und wieso sieht es noch genau so aus wie vorher?
Dein Mainboard (Trigorilla) kann nur Grafikdisplays wie das 2004 oder 12864 ansteuern. Auf denen würdest du auch exakt das sehen, was in der Firmware wirklich passiert - eben weil diese das anzeigen, was die Firmware sagt. Texte, Fehlermeldungen etc...
Bei deinem (und auch allen anderen) Touchdisplay sieht das anders aus. Das Touch-Display ist nur eine hübsche Aufmachung und übersetzt intern die eigentlichen Befehle in etwas, was das Mainboard versteht. Es ist bloß eine "Maske" für die eigentliche Firmware.
Es besteht ein 1-zu-1 Mapping zwischen den Befehlen, die das Mainboard umsetzen kann (Setze Temperatur auf Wert x, Bewege Motor um 10 mm nach rechts etc). Stellst du die Temperatur im Display auf 200°C ein, schickst du eigentlich nur einen Gcode wie z.B. "M104 T1 S200", was schon im Display vorhanden sein muss.
Bei diesem Mapping ist man eben darauf angewiesen, dass die Funktionen, die man nutzen will, auch im Display vorhanden sind. Und leider ist nicht viel drin. Die Dateiliste ist das einzige(!) über das man einigermaßen die Kontrolle hat, da sie dynamisch angezeigt wird. Leider muss man deswegen leider auch diese dämlichen Eigenarten in Kauf nehmen, wie die Tatsache, dass nach einem Bestätigen/Aktualisieren die Liste neu aufgebaut wird und somit oben beginnt.
---
### Bilder
@@ -111,6 +122,7 @@ This firmware configuration activates many new features of the Marlin firmware:
* Mesh bed calibration
* S-curve acceleration
* "Juction Deviation" instead of the classic "Jerk"
* "Linear Pressure Control v1.5" enabled (can be configured with M900)
* Baby stepping during printing
* Bilinear Bed Leveling (BBL)
* Manual editing of the measuring points
@@ -119,6 +131,7 @@ This firmware configuration activates many new features of the Marlin firmware:
* Automatic EEPROM initialization
* Filament Runout Sensor can be deactivated in the menu
* Power outage support
* Print bed size enlarged to 220 x 225 x 210 mm
What's better in coparison to other firmwares (bug fixes):
* Tidy special menu
@@ -151,31 +164,40 @@ Your component fan is now running at full speed, which it did no before. Simply
No. But certainly not worse either.
> Where are the downloads?
Further down.
> Do I have to turn the plugs for TMC drivers?
Nope, just download the correct version.
> Which TMC2208 motor drivers should I buy? The V2 or the Bigtreetech V3?
> Which TMC motor drivers should I buy? The V2 or the Bigtreetech V3?
Neither! There is no "V2" or "V3". The official last version of Trinamic is v1.2 and the two major primary manufacturers for the real SilentStepSticks are FYSETC and WATTERROTT. Just stay away from Bigtreetech.
Neither! There is no "V2" or "V3". The official last version of Trinamic is v1.2 and the two major primary manufacturers for the real SilentStepSticks are FYSTEC and WATTERROTT. Just stay away from Bigtreetech.
> I already turned the plugs on my motors when I installed the TMC drivers. Do I still have to flash the TMC version?
No. Just use the non-TMC version, otherwise the motors will turn in the wrong direction again.
> When I installed the drivers, my mainboard gave me the "magic smoke". Is that normal?
No. You installed the drivers the wrong way round. Now the Zener diode (733A) is burned. Exchange it and everything works again. You can probably throw away your wrongly inserted drivers.
> As with other firmwares, do I still have to set the E-Steps if I have a Mega S?
No, just download the correct version. Nevertheless, you should still calibrate the e-steps.
> Why doesn't the display show any error messages and why does it still look exactly as before?
Your mainboard (Trigorilla) can only control graphic displays like the 2004 or 12864. On them you would also see exactly what really happens in the firmware - to be precise, they show what the firmware says. Texts, error messages etc.
With your (and all other) touch displays, things look different. The touch display is just a pretty presentation and internally translates the actual commands into something that the motherboard understands. It is just a "mask" for the actual firmware.
There is a 1-to-1 mapping between the commands that the mainboard has implemented (set temperature to value x, move motor by 10 mm to the right, etc.). If you set the temperature in the display to 200°C, you actually only send a Gcode such as "M104 T1 S200", which must already be on the display firmware.
With this mapping, you have to rely on the fact that the functions you want to use are also available on the display. And unfortunately there is not much in it. The file list is the only thing(!) over which you have some control because it is displayed dynamically. Unfortunately, you have to accept these stupid idiosyncrasies, such as the fact that after confirming/updating the list is rebuilt and thus starts at the top.
---
### Pictures

View File

@@ -1718,7 +1718,7 @@
//
// Short 2KHz beep when endstops are hit
//
//#define ENDSTOP_BEEP
#define ENDSTOP_BEEP
//
// The duration and frequency for the UI feedback sound.

View File

@@ -1366,7 +1366,7 @@
*
* Warning: Does not respect endstops!
*/
//#define BABYSTEPPING
#define BABYSTEPPING
#if ENABLED(BABYSTEPPING)
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
@@ -1412,7 +1412,7 @@
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
*/
#define LIN_ADVANCE
//#define LIN_ADVANCE
#if ENABLED(LIN_ADVANCE)
#define LIN_ADVANCE_K 0 // Unit: mm compression per 1mm/s extruder speed
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

After

Width:  |  Height:  |  Size: 80 KiB

853
platformio.ini Executable file
View File

@@ -0,0 +1,853 @@
#
# Marlin Firmware
# PlatformIO Configuration File
#
# For detailed documentation with EXAMPLES:
#
# http://docs.platformio.org/en/latest/projectconf.html
#
# Automatic targets - enable auto-uploading
# targets = upload
#
# By default platformio build will abort after 5 errors.
# Remove '-fmax-errors=5' from build_flags below to see all.
#
[platformio]
src_dir = Marlin
boards_dir = buildroot/share/PlatformIO/boards
default_envs = mega2560
[common]
default_src_filter = +<src/*> -<src/config> -<src/HAL> +<src/HAL/shared>
extra_scripts = pre:buildroot/share/PlatformIO/scripts/common-cxxflags.py
build_flags = -fmax-errors=5 -g -D__MARLIN_FIRMWARE__ -fmerge-all-constants
lib_deps =
LiquidCrystal
TMCStepper@>=0.6.2,<1.0.0
Adafruit NeoPixel
U8glib-HAL=https://github.com/MarlinFirmware/U8glib-HAL/archive/bugfix.zip
Adafruit_MAX31865=https://github.com/adafruit/Adafruit_MAX31865/archive/master.zip
LiquidTWI2=https://github.com/lincomatic/LiquidTWI2/archive/master.zip
Arduino-L6470=https://github.com/ameyer/Arduino-L6470/archive/0.8.0.zip
SailfishLCD=https://github.com/mikeshub/SailfishLCD/archive/master.zip
SailfishRGB_LED=https://github.com/mikeshub/SailfishRGB_LED/archive/master.zip
SlowSoftI2CMaster=https://github.com/mikeshub/SlowSoftI2CMaster/archive/master.zip
# Globally defined properties
# inherited by all environments
[env]
framework = arduino
build_flags = ${common.build_flags}
lib_deps = ${common.lib_deps}
monitor_speed = 250000
#################################
# #
# Unique Core Architectures #
# #
# Add a new "env" below if no #
# entry has values suitable to #
# build for a given board. #
# #
#################################
#
# ATmega2560
#
[env:mega2560]
platform = atmelavr
board = megaatmega2560
board_build.f_cpu = 16000000L
lib_deps = ${common.lib_deps}
TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
src_filter = ${common.default_src_filter} +<src/HAL/AVR>
#
# ATmega1280
#
[env:mega1280]
platform = atmelavr
board = megaatmega1280
board_build.f_cpu = 16000000L
lib_deps = ${common.lib_deps}
TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
src_filter = ${common.default_src_filter} +<src/HAL/AVR>
#
# RAMBo
#
[env:rambo]
platform = atmelavr
board = reprap_rambo
board_build.f_cpu = 16000000L
lib_deps = ${common.lib_deps}
TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
src_filter = ${common.default_src_filter} +<src/HAL/AVR>
#
# FYSETC F6 V1.3
#
[env:FYSETC_F6_13]
platform = atmelavr
board = fysetc_f6_13
board_build.f_cpu = 16000000L
lib_deps = ${common.lib_deps}
TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
src_filter = ${common.default_src_filter} +<src/HAL/AVR>
#
# FYSETC F6 V1.4
#
[env:FYSETC_F6_14]
platform = atmelavr
board = fysetc_f6_14
board_build.f_cpu = 16000000L
lib_deps = ${common.lib_deps}
TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
src_filter = ${common.default_src_filter} +<src/HAL/AVR>
#
# Sanguinololu (ATmega644p)
#
[env:sanguino644p]
platform = atmelavr
board = sanguino_atmega644p
lib_deps = ${common.lib_deps}
TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
src_filter = ${common.default_src_filter} +<src/HAL/AVR>
#
# Sanguinololu (ATmega1284p)
#
[env:sanguino1284p]
platform = atmelavr
board = sanguino_atmega1284p
lib_deps = ${common.lib_deps}
TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
src_filter = ${common.default_src_filter} +<src/HAL/AVR>
#
# Melzi and clones (ATmega1284p)
#
[env:melzi]
platform = atmelavr
board = sanguino_atmega1284p
lib_deps = ${common.lib_deps}
TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
src_filter = ${common.default_src_filter} +<src/HAL/AVR>
lib_ignore = TMCStepper
upload_speed = 57600
#
# Melzi and clones (Optiboot bootloader)
#
[env:melzi_optiboot]
platform = atmelavr
board = sanguino_atmega1284p
lib_deps = ${common.lib_deps}
TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
src_filter = ${common.default_src_filter} +<src/HAL/AVR>
lib_ignore = TMCStepper
upload_speed = 115200
#
# AT90USB1286 boards using CDC bootloader
# - BRAINWAVE
# - BRAINWAVE_PRO
# - SAV_MKI
# - TEENSYLU
#
[env:at90usb1286_cdc]
platform = teensy
board = at90usb1286
lib_deps = ${common.lib_deps}
TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
lib_ignore = TMCStepper
src_filter = ${common.default_src_filter} +<src/HAL/AVR>
#
# AT90USB1286 boards using DFU bootloader
# - PrintrBoard
# - PrintrBoard Rev.F
# - ? 5DPRINT ?
#
[env:at90usb1286_dfu]
platform = teensy
board = at90usb1286
lib_deps = ${common.lib_deps}
lib_ignore = TMCStepper
src_filter = ${common.default_src_filter} +<src/HAL/AVR>
#
# Due (Atmel SAM3X8E ARM Cortex-M3)
#
# - RAMPS4DUE
# - RADDS
#
[env:DUE]
platform = atmelsam
board = due
src_filter = ${common.default_src_filter} +<src/HAL/DUE>
[env:DUE_USB]
platform = atmelsam
board = dueUSB
src_filter = ${common.default_src_filter} +<src/HAL/DUE>
[env:DUE_debug]
# Used when WATCHDOG_RESET_MANUAL is enabled
platform = atmelsam
board = due
src_filter = ${common.default_src_filter} +<src/HAL/DUE>
build_flags = ${common.build_flags}
-funwind-tables
-mpoke-function-name
#
# NXP LPC176x ARM Cortex-M3
#
[env:LPC1768]
platform = https://github.com/p3p/pio-nxplpc-arduino-lpc176x/archive/0.1.2.zip
board = nxp_lpc1768
build_flags = -DU8G_HAL_LINKS -IMarlin/src/HAL/LPC1768/include -IMarlin/src/HAL/LPC1768/u8g ${common.build_flags}
# debug options for backtrace
# -funwind-tables
# -mpoke-function-name
lib_ldf_mode = off
lib_compat_mode = strict
extra_scripts = Marlin/src/HAL/LPC1768/upload_extra_script.py
src_filter = ${common.default_src_filter} +<src/HAL/LPC1768>
lib_deps = Servo
LiquidCrystal
U8glib-HAL=https://github.com/MarlinFirmware/U8glib-HAL/archive/bugfix.zip
TMCStepper@>=0.6.1,<1.0.0
Adafruit NeoPixel=https://github.com/p3p/Adafruit_NeoPixel/archive/release.zip
SailfishLCD=https://github.com/mikeshub/SailfishLCD/archive/master.zip
[env:LPC1769]
platform = https://github.com/p3p/pio-nxplpc-arduino-lpc176x/archive/0.1.2.zip
board = nxp_lpc1769
build_flags = -DU8G_HAL_LINKS -IMarlin/src/HAL/LPC1768/include -IMarlin/src/HAL/LPC1768/u8g ${common.build_flags}
# debug options for backtrace
# -funwind-tables
# -mpoke-function-name
lib_ldf_mode = off
lib_compat_mode = strict
extra_scripts = Marlin/src/HAL/LPC1768/upload_extra_script.py
src_filter = ${common.default_src_filter} +<src/HAL/LPC1768>
lib_deps = Servo
LiquidCrystal
U8glib-HAL=https://github.com/MarlinFirmware/U8glib-HAL/archive/bugfix.zip
TMCStepper@>=0.6.1,<1.0.0
Adafruit NeoPixel=https://github.com/p3p/Adafruit_NeoPixel/archive/release.zip
SailfishLCD=https://github.com/mikeshub/SailfishLCD/archive/master.zip
#
# STM32F103RC
#
[env:STM32F103RC]
platform = ststm32
board = genericSTM32F103RC
platform_packages = tool-stm32duino
build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py
${common.build_flags} -std=gnu++14
build_unflags = -std=gnu++11
src_filter = ${common.default_src_filter} +<src/HAL/STM32F1>
lib_deps = ${common.lib_deps}
SoftwareSerialM=https://github.com/FYSETC/SoftwareSerialM/archive/master.zip
lib_ignore = Adafruit NeoPixel, SPI
monitor_speed = 115200
#
# STM32F103RC_fysetc
#
[env:STM32F103RC_fysetc]
platform = ststm32
board = genericSTM32F103RC
#board_build.core = maple
platform_packages = tool-stm32duino
build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py
${common.build_flags} -std=gnu++14 -DDEBUG_LEVEL=0 -DHAVE_SW_SERIAL
build_unflags = -std=gnu++11
extra_scripts = buildroot/share/PlatformIO/scripts/STM32F103RC_fysetc.py
src_filter = ${common.default_src_filter} +<src/HAL/STM32F1>
lib_deps = ${common.lib_deps}
SoftwareSerialM=https://github.com/FYSETC/SoftwareSerialM/archive/master.zip
lib_ignore = Adafruit NeoPixel, SPI
lib_ldf_mode = chain
debug_tool = stlink
upload_protocol = serial
#
# BigTree SKR Mini V1.1 / SKR mini E3 / SKR E3 DIP (STM32F103RCT6 ARM Cortex-M3)
#
# STM32F103RC_btt ............. RCT6 with 256K
# STM32F103RC_btt_USB ......... RCT6 with 256K (USB mass storage)
# STM32F103RC_btt_512K ........ RCT6 with 512K
# STM32F103RC_btt_512K_USB .... RCT6 with 512K (USB mass storage)
#
[env:STM32F103RC_btt]
platform = ststm32
board = genericSTM32F103RC
platform_packages = tool-stm32duino
build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py
${common.build_flags} -DDEBUG_LEVEL=0 -std=gnu++14 -DHAVE_SW_SERIAL -DSS_TIMER=4
build_unflags = -std=gnu++11
extra_scripts = buildroot/share/PlatformIO/scripts/STM32F103RC_SKR_MINI.py
src_filter = ${common.default_src_filter} +<src/HAL/STM32F1>
lib_deps = ${common.lib_deps}
SoftwareSerialM=https://github.com/FYSETC/SoftwareSerialM/archive/master.zip
USBComposite for STM32F1@==0.91
lib_ignore = Adafruit NeoPixel, SPI
monitor_speed = 115200
[env:STM32F103RC_btt_USB]
platform = ststm32
board = genericSTM32F103RC
platform_packages = tool-stm32duino
build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py
${common.build_flags} -DDEBUG_LEVEL=0 -std=gnu++14 -DHAVE_SW_SERIAL -DSS_TIMER=4 -DUSE_USB_COMPOSITE
build_unflags = -std=gnu++11
extra_scripts = buildroot/share/PlatformIO/scripts/STM32F103RC_SKR_MINI.py
src_filter = ${common.default_src_filter} +<src/HAL/STM32F1>
lib_deps = ${common.lib_deps}
SoftwareSerialM=https://github.com/FYSETC/SoftwareSerialM/archive/master.zip
USBComposite for STM32F1@==0.91
lib_ignore = Adafruit NeoPixel, SPI
monitor_speed = 115200
[env:STM32F103RC_btt_512K]
platform = ststm32
board = genericSTM32F103RC
board_upload.maximum_size=524288
platform_packages = tool-stm32duino
build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py
${common.build_flags} -DDEBUG_LEVEL=0 -std=gnu++14 -DHAVE_SW_SERIAL -DSS_TIMER=4 -DSTM32_FLASH_SIZE=512
build_unflags = -std=gnu++11
extra_scripts = buildroot/share/PlatformIO/scripts/STM32F103RC_SKR_MINI.py
src_filter = ${common.default_src_filter} +<src/HAL/STM32F1>
lib_deps = ${common.lib_deps}
SoftwareSerialM=https://github.com/FYSETC/SoftwareSerialM/archive/master.zip
USBComposite for STM32F1@==0.91
lib_ignore = Adafruit NeoPixel, SPI
monitor_speed = 115200
[env:STM32F103RC_btt_512K_USB]
platform = ststm32
board = genericSTM32F103RC
board_upload.maximum_size=524288
platform_packages = tool-stm32duino
build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py
${common.build_flags} -DDEBUG_LEVEL=0 -std=gnu++14 -DHAVE_SW_SERIAL -DSS_TIMER=4 -DSTM32_FLASH_SIZE=512 -DUSE_USB_COMPOSITE
build_unflags = -std=gnu++11
extra_scripts = buildroot/share/PlatformIO/scripts/STM32F103RC_SKR_MINI.py
src_filter = ${common.default_src_filter} +<src/HAL/STM32F1>
lib_deps = ${common.lib_deps}
SoftwareSerialM=https://github.com/FYSETC/SoftwareSerialM/archive/master.zip
USBComposite for STM32F1@==0.91
lib_ignore = Adafruit NeoPixel, SPI
monitor_speed = 115200
#
# STM32F103RE
#
[env:STM32F103RE]
platform = ststm32
board = genericSTM32F103RE
platform_packages = tool-stm32duino
build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py
${common.build_flags} -std=gnu++14
build_unflags = -std=gnu++11
src_filter = ${common.default_src_filter} +<src/HAL/STM32F1>
lib_deps = ${common.lib_deps}
SoftwareSerialM=https://github.com/FYSETC/SoftwareSerialM/archive/master.zip
lib_ignore = Adafruit NeoPixel, SPI
monitor_speed = 115200
#
# STM32F103RE_btt ............. RET6
# STM32F103RE_btt_USB ......... RET6 (USB mass storage)
#
[env:STM32F103RE_btt]
platform = ststm32
board = genericSTM32F103RE
platform_packages = tool-stm32duino
build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py
${common.build_flags} -DDEBUG_LEVEL=0 -std=gnu++14 -DHAVE_SW_SERIAL -DSS_TIMER=4
build_unflags = -std=gnu++11
extra_scripts = buildroot/share/PlatformIO/scripts/STM32F103RE_SKR_E3_DIP.py
src_filter = ${common.default_src_filter} +<src/HAL/STM32F1>
lib_deps = ${common.lib_deps}
SoftwareSerialM=https://github.com/FYSETC/SoftwareSerialM/archive/master.zip
lib_ignore = Adafruit NeoPixel, SPI
debug_tool = stlink
upload_protocol = stlink
monitor_speed = 115200
[env:STM32F103RE_btt_USB]
platform = ststm32
board = genericSTM32F103RE
platform_packages = tool-stm32duino
build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py
${common.build_flags} -DDEBUG_LEVEL=0 -std=gnu++14 -DHAVE_SW_SERIAL -DSS_TIMER=4 -DUSE_USB_COMPOSITE
build_unflags = -std=gnu++11
extra_scripts = buildroot/share/PlatformIO/scripts/STM32F103RE_SKR_E3_DIP.py
src_filter = ${common.default_src_filter} +<src/HAL/STM32F1>
lib_deps = ${common.lib_deps}
SoftwareSerialM=https://github.com/FYSETC/SoftwareSerialM/archive/master.zip
lib_ignore = Adafruit NeoPixel, SPI
debug_tool = stlink
upload_protocol = stlink
monitor_speed = 115200
#
# STM32F4 with STM32GENERIC
#
[env:STM32F4]
platform = ststm32
board = disco_f407vg
build_flags = ${common.build_flags} -DUSE_STM32GENERIC -DSTM32GENERIC -DSTM32F4 -DMENU_USB_SERIAL -DMENU_SERIAL=SerialUSB -DHAL_IWDG_MODULE_ENABLED
lib_ignore = Adafruit NeoPixel, TMCStepper
src_filter = ${common.default_src_filter} +<src/HAL/STM32_F4_F7> -<src/HAL/STM32_F4_F7/STM32F7>
#
# STM32F7 with STM32GENERIC
#
[env:STM32F7]
platform = ststm32
board = remram_v1
build_flags = ${common.build_flags} -DUSE_STM32GENERIC -DSTM32GENERIC -DSTM32F7 -DMENU_USB_SERIAL -DMENU_SERIAL=SerialUSB -DHAL_IWDG_MODULE_ENABLED
lib_ignore = Adafruit NeoPixel, TMCStepper
src_filter = ${common.default_src_filter} +<src/HAL/STM32_F4_F7> -<src/HAL/STM32_F4_F7/STM32F4>
#
# ARMED (STM32)
#
[env:ARMED]
platform = ststm32
board = armed_v1
build_flags = ${common.build_flags}
-DUSBCON -DUSBD_VID=0x0483 '-DUSB_MANUFACTURER="Unknown"' '-DUSB_PRODUCT="ARMED_V1"' -DUSBD_USE_CDC
-O2 -ffreestanding -fsigned-char -fno-move-loop-invariants -fno-strict-aliasing -std=gnu11 -std=gnu++11
-IMarlin/src/HAL/STM32
lib_ignore = Adafruit NeoPixel, SoftwareSerial
src_filter = ${common.default_src_filter} +<src/HAL/STM32>
#
# Geeetech GTM32 (STM32F103VET6)
#
[env:STM32F103VE_GTM32]
platform = ststm32
board = genericSTM32F103VE
build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py
${common.build_flags} -DDEBUG_LEVEL=DEBUG_NONE -std=gnu++14 -MMD -ffunction-sections -fdata-sections -nostdlib
-DBOARD_generic_stm32f103v -DARDUINO_GENERIC_STM32F103V -DARDUINO_ARCH_STM32F1
-DCONFIG_MAPLE_MINI_NO_DISABLE_DEBUG=1 -DVECT_TAB_ADDR=0x8000000 -DERROR_LED_PORT=GPIOE -DERROR_LED_PIN=6
build_unflags = -std=gnu++11
src_filter = ${common.default_src_filter} +<src/HAL/STM32F1>
lib_ignore = Adafruit NeoPixel, SPI
upload_protocol = serial
#
# Longer 3D board in Alfawise U20 (STM32F103VET6)
#
[env:STM32F103VE_longer]
platform = ststm32
board = genericSTM32F103VE
build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py
${common.build_flags} -std=gnu++14 -USERIAL_USB
-DSTM32F1xx -DU20 -DTS_V12
build_unflags = -std=gnu++11 -DCONFIG_MAPLE_MINI_NO_DISABLE_DEBUG=1 -DERROR_LED_PORT=GPIOE -DERROR_LED_PIN=6
extra_scripts = buildroot/share/PlatformIO/scripts/STM32F103VE_longer.py
src_filter = ${common.default_src_filter} +<src/HAL/STM32F1>
lib_ignore = Adafruit NeoPixel, LiquidTWI2, SPI
#
# MKS Robin Mini (STM32F103VET6)
#
[env:mks_robin_mini]
platform = ststm32
board = genericSTM32F103VE
build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py
${common.build_flags} -std=gnu++14
build_unflags = -std=gnu++11
extra_scripts = buildroot/share/PlatformIO/scripts/mks_robin_mini.py
src_filter = ${common.default_src_filter} +<src/HAL/STM32F1>
lib_ignore = Adafruit NeoPixel, SPI
#
# MKS Robin Nano (STM32F103VET6)
#
[env:mks_robin_nano]
platform = ststm32
board = genericSTM32F103VE
platform_packages = tool-stm32duino
build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py
${common.build_flags} -std=gnu++14 -DHAVE_SW_SERIAL -DSS_TIMER=4
build_unflags = -std=gnu++11
extra_scripts = buildroot/share/PlatformIO/scripts/mks_robin_nano.py
src_filter = ${common.default_src_filter} +<src/HAL/STM32F1>
lib_deps = ${common.lib_deps}
SoftwareSerialM=https://github.com/FYSETC/SoftwareSerialM/archive/master.zip
lib_ignore = Adafruit NeoPixel, SPI
#
# MKS Robin (STM32F103ZET6)
#
[env:mks_robin]
platform = ststm32
board = genericSTM32F103ZE
build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py
${common.build_flags} -std=gnu++14 -DHAVE_SW_SERIAL -DSS_TIMER=4 -DSTM32_XL_DENSITY
build_unflags = -std=gnu++11
extra_scripts = buildroot/share/PlatformIO/scripts/mks_robin.py
src_filter = ${common.default_src_filter} +<src/HAL/STM32F1>
lib_deps = ${common.lib_deps}
SoftwareSerialM=https://github.com/FYSETC/SoftwareSerialM/archive/master.zip
lib_ignore = Adafruit NeoPixel, SPI
#
# MKS Robin Pro (STM32F103ZET6)
#
[env:mks_robin_pro]
platform = ststm32
board = genericSTM32F103ZE
extra_scripts = buildroot/share/PlatformIO/scripts/mks_robin_pro.py
build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py
${common.build_flags} -std=gnu++14 -DSTM32_XL_DENSITY
build_unflags = -std=gnu++11
src_filter = ${common.default_src_filter} +<src/HAL/STM32F1>
lib_deps = ${common.lib_deps}
lib_ignore = Adafruit NeoPixel, SPI, TMCStepper
#
# MKS Robin Lite/Lite2 (STM32F103RCT6)
#
[env:mks_robin_lite]
platform = ststm32
board = genericSTM32F103RC
build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py
${common.build_flags} -std=gnu++14
build_unflags = -std=gnu++11
extra_scripts = buildroot/share/PlatformIO/scripts/mks_robin_lite.py
src_filter = ${common.default_src_filter} +<src/HAL/STM32F1>
lib_ignore = Adafruit NeoPixel, SPI
#
# MKS ROBIN LITE3 (STM32F103RCT6)
#
[env:mks_robin_lite3]
platform = ststm32
board = genericSTM32F103RC
extra_scripts = buildroot/share/PlatformIO/scripts/mks_robin_lite3.py
build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py
${common.build_flags} -std=gnu++14
build_unflags = -std=gnu++11
src_filter = ${common.default_src_filter} +<src/HAL/STM32F1>
lib_deps = ${common.lib_deps}
lib_ignore = Adafruit NeoPixel, SPI
#
# JGAurora A5S A1 (STM32F103ZET6)
#
[env:jgaurora_a5s_a1]
platform = ststm32
board = genericSTM32F103ZE
build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py
${common.build_flags} -DSTM32F1xx -std=gnu++14 -DSTM32_XL_DENSITY
build_unflags = -std=gnu++11
extra_scripts = buildroot/share/PlatformIO/scripts/jgaurora_a5s_a1_with_bootloader.py
src_filter = ${common.default_src_filter} +<src/HAL/STM32F1>
lib_ignore = Adafruit NeoPixel, SPI
#
# Malyan M200 (STM32F103CB)
#
[env:STM32F103CB_malyan]
platform = ststm32
board = malyanM200
build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py -DMCU_STM32F103CB -D __STM32F1__=1 -std=c++1y -D MOTHERBOARD="BOARD_MALYAN_M200" -DSERIAL_USB -ffunction-sections -fdata-sections -Wl,--gc-sections
-DDEBUG_LEVEL=0 -D__MARLIN_FIRMWARE__
src_filter = ${common.default_src_filter} +<src/HAL/STM32F1>
lib_ignore = Adafruit NeoPixel, LiquidCrystal, LiquidTWI2, TMCStepper, U8glib-HAL, SPI
#
# Chitu boards like Tronxy X5s (STM32F103ZET6)
#
[env:chitu_f103]
platform = ststm32
board = genericSTM32F103ZE
build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py
${common.build_flags} -DSTM32F1xx -std=gnu++14 -DSTM32_XL_DENSITY
build_unflags = -std=gnu++11 -DCONFIG_MAPLE_MINI_NO_DISABLE_DEBUG= -DERROR_LED_PORT=GPIOE -DERROR_LED_PIN=6
extra_scripts = buildroot/share/PlatformIO/scripts/chitu_crypt.py
src_filter = ${common.default_src_filter} +<src/HAL/STM32F1>
lib_ignore = Adafruit NeoPixel
#
# STM32F401VE
# 'STEVAL-3DP001V1' STM32F401VE board - https://www.st.com/en/evaluation-tools/steval-3dp001v1.html
#
[env:STM32F401VE_STEVAL]
platform = ststm32
board = STEVAL_STM32F401VE
platform_packages = framework-arduinoststm32@>=3.107,<4
build_flags = ${common.build_flags}
-DTARGET_STM32F4 -DARDUINO_STEVAL -DSTM32F401xE
-DUSBCON -DUSBD_USE_CDC -DUSBD_VID=0x0483 -DUSB_PRODUCT=\"STEVAL_F401VE\"
-DDISABLE_GENERIC_SERIALUSB
-IMarlin/src/HAL/STM32
build_unflags = -std=gnu++11
extra_scripts = pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
buildroot/share/PlatformIO/scripts/STEVAL__F401XX.py
lib_ignore = Adafruit NeoPixel, TMCStepper, SailfishLCD, SailfishRGB_LED, SlowSoftI2CMaster, SoftwareSerial
src_filter = ${common.default_src_filter} +<src/HAL/STM32>
#
# FLYF407ZG
#
[env:FLYF407ZG]
platform = ststm32
board = FLYF407ZG
platform_packages = framework-arduinoststm32@>=3.107,<4
build_flags = ${common.build_flags}
-DSTM32F4 -DUSBCON -DUSBD_USE_CDC -DUSBD_VID=0x0483 -DUSB_PRODUCT=\"STM32F407ZG\"
-DTARGET_STM32F4 -DVECT_TAB_OFFSET=0x8000
-IMarlin/src/HAL/STM32
build_unflags = -std=gnu++11
extra_scripts = pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
lib_ignore = Adafruit NeoPixel, TMCStepper, SailfishLCD, SailfishRGB_LED, SlowSoftI2CMaster, SoftwareSerial
src_filter = ${common.default_src_filter} +<src/HAL/STM32>
#
# FYSETC S6 (STM32F446VET6 ARM Cortex-M4)
#
[env:FYSETC_S6]
platform = ststm32
board = fysetc_s6
platform_packages =
tool-stm32duino
framework-arduinoststm32@>=3.107,<4
build_flags = ${common.build_flags}
-DTARGET_STM32F4 -std=gnu++14
-DVECT_TAB_OFFSET=0x10000
-DUSBCON -DUSBD_USE_CDC -DHAL_PCD_MODULE_ENABLED -DUSBD_VID=0x0483 '-DUSB_PRODUCT="FYSETC_S6"'
build_unflags = -std=gnu++11
extra_scripts = pre:buildroot/share/PlatformIO/scripts/fysetc_STM32S6.py
src_filter = ${common.default_src_filter} +<src/HAL/STM32>
lib_ignore = Arduino-L6470
debug_tool = stlink
#upload_protocol = stlink
upload_protocol = serial
#
# STM32F407VET6 with RAMPS-like shield
# 'Black' STM32F407VET6 board - http://wiki.stm32duino.com/index.php?title=STM32F407
# Shield - https://github.com/jmz52/Hardware
#
[env:STM32F407VE_black]
platform = ststm32
board = blackSTM32F407VET6
platform_packages = framework-arduinoststm32@>=3.107,<4
build_flags = ${common.build_flags}
-DTARGET_STM32F4 -DARDUINO_BLACK_F407VE
-DUSBCON -DUSBD_USE_CDC -DUSBD_VID=0x0483 -DUSB_PRODUCT=\"BLACK_F407VE\"
-IMarlin/src/HAL/STM32
build_unflags = -std=gnu++11
extra_scripts = pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
lib_ignore = Adafruit NeoPixel, TMCStepper, SailfishLCD, SailfishRGB_LED, SlowSoftI2CMaster, SoftwareSerial
src_filter = ${common.default_src_filter} +<src/HAL/STM32>
#
# BigTreeTech SKR Pro (STM32F407ZGT6 ARM Cortex-M4)
#
[env:BIGTREE_SKR_PRO]
platform = ststm32
board = BigTree_SKR_Pro
platform_packages = framework-arduinoststm32@>=3.107,<4
build_flags = ${common.build_flags}
-DUSBCON -DUSBD_USE_CDC -DUSBD_VID=0x0483 -DUSB_PRODUCT=\"STM32F407ZG\"
-DTARGET_STM32F4 -DSTM32F407_5ZX -DVECT_TAB_OFFSET=0x8000
-IMarlin/src/HAL/STM32
build_unflags = -std=gnu++11
extra_scripts = pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
lib_ignore = SoftwareSerial, SoftwareSerialM
src_filter = ${common.default_src_filter} +<src/HAL/STM32>
#upload_protocol = stlink
#upload_command = "$PROJECT_PACKAGES_DIR/tool-stm32duino/stlink/ST-LINK_CLI.exe" -c SWD -P "$BUILD_DIR/firmware.bin" 0x8008000 -Rst -Run
debug_tool = stlink
debug_init_break =
#
# Bigtreetech GTR V1.0 (STM32F407IGT6 ARM Cortex-M4)
#
[env:BIGTREE_GTR_V1_0]
platform = ststm32@>=5.7.0
framework = arduino
platform_packages = framework-arduinoststm32@>=3.107,<4
board = BigTree_SKR_Pro
extra_scripts = pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
build_flags = ${common.build_flags}
-DUSBCON -DUSBD_USE_CDC -DUSBD_VID=0x0483 -DUSB_PRODUCT=\"STM32F407IG\"
-DTARGET_STM32F4 -DSTM32F407IX -DVECT_TAB_OFFSET=0x8000
-IMarlin/src/HAL/STM32
lib_deps =
U8glib-HAL=https://github.com/MarlinFirmware/U8glib-HAL/archive/bugfix.zip
LiquidCrystal
TMCStepper@>=0.5.2,<1.0.0
Adafruit NeoPixel
LiquidTWI2=https://github.com/lincomatic/LiquidTWI2/archive/master.zip
Arduino-L6470=https://github.com/ameyer/Arduino-L6470/archive/0.7.0.zip
lib_ignore = SoftwareSerial, SoftwareSerialM
src_filter = ${common.default_src_filter} +<src/HAL/STM32>
monitor_speed = 250000
#
# BigTreeTech BTT002 (STM32F407VET6 ARM Cortex-M4)
#
[env:BIGTREE_BTT002]
platform = ststm32@5.6.0
board = BigTree_Btt002
platform_packages = framework-arduinoststm32@>=3.107,<4
build_flags = ${common.build_flags}
-DUSBCON -DUSBD_USE_CDC -DUSBD_VID=0x0483 -DUSB_PRODUCT=\"STM32F407VE\"
-DTARGET_STM32F4 -DSTM32F407_5VX -DVECT_TAB_OFFSET=0x8000
-DHAVE_HWSERIAL2
-DHAVE_HWSERIAL3
-DPIN_SERIAL2_RX=PD_6
-DPIN_SERIAL2_TX=PD_5
build_unflags = -std=gnu++11
extra_scripts = pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
lib_ignore = Adafruit NeoPixel, SailfishLCD, SailfishRGB_LED, SlowSoftI2CMaster
src_filter = ${common.default_src_filter} +<src/HAL/STM32>
#
# Teensy 3.1 / 3.2 (ARM Cortex-M4)
#
[env:teensy31]
platform = teensy
board = teensy31
lib_deps = ${common.lib_deps}
TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
lib_ignore = Adafruit NeoPixel
src_filter = ${common.default_src_filter} +<src/HAL/TEENSY31_32>
#
# Teensy 3.5 / 3.6 (ARM Cortex-M4)
#
[env:teensy35]
platform = teensy
board = teensy35
lib_deps = ${common.lib_deps}
TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
lib_ignore = Adafruit NeoPixel
src_filter = ${common.default_src_filter} +<src/HAL/TEENSY35_36>
#
# Espressif ESP32
#
[env:esp32]
platform = espressif32@1.11.2
board = esp32dev
build_flags = ${common.build_flags} -DCORE_DEBUG_LEVEL=0
lib_deps = ${common.lib_deps}
AsyncTCP=https://github.com/me-no-dev/AsyncTCP/archive/master.zip
ESPAsyncWebServer=https://github.com/me-no-dev/ESPAsyncWebServer/archive/master.zip
ESP3DLib=https://github.com/luc-github/ESP3DLib.git
arduinoWebSockets=https://github.com/Links2004/arduinoWebSockets.git
ESP32SSDP=https://github.com/luc-github/ESP32SSDP.git
lib_ignore = LiquidCrystal, LiquidTWI2, SailfishLCD, SailfishRGB_LED, ESPAsyncTCP
src_filter = ${common.default_src_filter} +<src/HAL/ESP32>
upload_speed = 115200
#upload_port = marlinesp.local
#board_build.flash_mode = qio
#
# Native
# No supported Arduino libraries, base Marlin only
#
[env:linux_native]
platform = native
framework =
build_flags = -D__PLAT_LINUX__ -std=gnu++17 -ggdb -g -lrt -lpthread -D__MARLIN_FIRMWARE__ -Wno-expansion-to-defined
src_build_flags = -Wall -IMarlin/src/HAL/LINUX/include
build_unflags = -Wall
lib_ldf_mode = off
lib_deps =
src_filter = ${common.default_src_filter} +<src/HAL/LINUX>
#
# Adafruit Grand Central M4 (Atmel SAMD51P20A ARM Cortex-M4)
#
[env:SAMD51_grandcentral_m4]
platform = atmelsam
board = adafruit_grandcentral_m4
build_flags = ${common.build_flags} -std=gnu++17 -Wno-register
build_unflags = -std=gnu++11
src_filter = ${common.default_src_filter} +<src/HAL/SAMD51>
lib_deps = ${common.lib_deps}
SoftwareSerialM=https://github.com/FYSETC/SoftwareSerialM/archive/master.zip
Adafruit_SPIFlash=https://github.com/adafruit/Adafruit_SPIFlash/archive/master.zip
debug_tool = jlink
#
# RUMBA32
#
[env:rumba32_f446ve]
platform = ststm32
board = rumba32_f446ve
build_flags = ${common.build_flags}
-DSTM32F4xx
-DARDUINO_RUMBA32_F446VE
-DARDUINO_ARCH_STM32
"-DBOARD_NAME=\"RUMBA32_F446VE\""
-DSTM32F446xx
-DUSBCON
-DUSBD_VID=0x0483
"-DUSB_MANUFACTURER=\"Unknown\""
"-DUSB_PRODUCT=\"RUMBA32_F446VE\""
-DHAL_PCD_MODULE_ENABLED
-DUSBD_USE_CDC
-DDISABLE_GENERIC_SERIALUSB
-DHAL_UART_MODULE_ENABLED
-Os
lib_ignore = Adafruit NeoPixel
src_filter = ${common.default_src_filter} +<src/HAL/STM32>
monitor_speed = 500000
upload_protocol = dfu
#
# MKS RUMBA32 (adds TMC2208/2209 UART interface and AUX-1)
#
[env:rumba32_mks]
platform = ststm32
board = rumba32_f446ve
build_flags = ${common.build_flags}
-DSTM32F4xx -DARDUINO_RUMBA32_F446VE -DARDUINO_ARCH_STM32 "-DBOARD_NAME=\"RUMBA32_F446VE\""
-DSTM32F446xx -DUSBCON -DUSBD_VID=0x8000
"-DUSB_MANUFACTURER=\"Unknown\""
"-DUSB_PRODUCT=\"RUMBA32_F446VE\""
-DHAL_PCD_MODULE_ENABLED
-DUSBD_USE_CDC
-DDISABLE_GENERIC_SERIALUSB
-DHAL_UART_MODULE_ENABLED
-Os
lib_ignore = Adafruit NeoPixel
src_filter = ${common.default_src_filter} +<src/HAL/STM32> +<src/HAL/STM32_F4_F7> -<src/HAL/STM32_F4_F7/STM32F7>
upload_protocol = dfu
#
# Just print the dependency tree
#
[env:include_tree]
platform = atmelavr
board = megaatmega2560
build_flags = -c -H -std=gnu++11 -Wall -Os -D__MARLIN_FIRMWARE__
lib_deps = ${common.lib_deps}
TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
src_filter = +<src/Marlin.cpp>