You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
194 lines
7.1 KiB
194 lines
7.1 KiB
/********************
|
|
* Lulzbot_Extras.h *
|
|
********************/
|
|
|
|
/****************************************************************************
|
|
* Written By Marcio Teixeira 2018 - Aleph Objects, Inc. *
|
|
* *
|
|
* 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. *
|
|
* *
|
|
* To view a copy of the GNU General Public License, go to the following *
|
|
* location: <http://www.gnu.org/licenses/>. *
|
|
****************************************************************************/
|
|
|
|
#pragma once
|
|
#include <stdbool.h>
|
|
|
|
/******************************** EXTRA FEATURES *******************************/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" void on_reflash();
|
|
#else
|
|
void on_reflash(void);
|
|
#endif
|
|
|
|
#if ENABLED(LULZBOT_TOUCH_UI)
|
|
#define LULZBOT_ON_REFLASH on_reflash();
|
|
#endif
|
|
|
|
/******************************** EMI MITIGATION *******************************/
|
|
|
|
#if ENABLED(LULZBOT_EMI_MITIGATION)
|
|
void emi_shutoff_pins(void);
|
|
void enable_emi_pins(const bool);
|
|
#endif
|
|
|
|
/**************************** Z-OFFSET AUTO-SAVE ******************************/
|
|
|
|
/* Historically, the Lulzbot firmware would save the Z-Offset into the EEPROM
|
|
* each time it is changed. The latest Marlin made this more difficult since they
|
|
* added a CRC to the EEPROM. We work around this by bracketing the EEPROM_READ
|
|
* and EEPROM_WRITE routines such that the CRC ignores the Z-Offset value. That
|
|
* code also captures the eeprom_index so we can write only that value later.
|
|
*/
|
|
#define HAS_Z_AUTO_SAVE HAS_BED_PROBE && HAS_LCD_MENU && EITHER(EEPROM_SETTINGS, SD_FIRMWARE_UPDATE)
|
|
|
|
#if HAS_Z_AUTO_SAVE
|
|
#ifdef __cplusplus
|
|
class AutoSaveZOffset {
|
|
private:
|
|
static int eeprom_offset;
|
|
public:
|
|
static void offset(int offset) {eeprom_offset = offset;}
|
|
static void store();
|
|
};
|
|
#endif
|
|
|
|
/* The following goes in "configuration_store.h" */
|
|
#define LULZBOT_SAVE_ZOFFSET_TO_EEPROM_DECL static AutoSaveZOffset aszo;
|
|
|
|
/* The following goes in "configuration_store.cpp", before and after
|
|
* "EEPROM_WRITE(zprobe_zoffset)" and "EEPROM_READ(zprobe_zoffset)" */
|
|
#define LULZBOT_EEPROM_BEFORE_ZOFFSET \
|
|
const uint16_t saved_crc = working_crc; \
|
|
aszo.offset(eeprom_index);
|
|
|
|
#define LULZBOT_EEPROM_AFTER_ZOFFSET working_crc = saved_crc;
|
|
|
|
/* The following goes in "ultralcd.cpp" in "lcd_babystep_zoffset" */
|
|
#define LULZBOT_SAVE_ZOFFSET_TO_EEPROM settings.aszo.store();
|
|
#endif
|
|
|
|
/******************************** PROBE QUALITY CHECK *************************/
|
|
|
|
#if defined(AUTO_BED_LEVELING_LINEAR)
|
|
#ifdef __cplusplus
|
|
class BedLevelingReport {
|
|
private:
|
|
float x[4], y[4], z[4];
|
|
|
|
public:
|
|
void point(uint8_t i, float _x, float _y, float _z) {
|
|
x[i] = _x;
|
|
y[i] = _y;
|
|
z[i] = _z;
|
|
}
|
|
|
|
void report();
|
|
};
|
|
#endif
|
|
|
|
#define LULZBOT_BED_LEVELING_DECL BedLevelingReport blr;
|
|
#define LULZBOT_BED_LEVELING_POINT(i,x,y,z) blr.point(i,x,y,z);
|
|
#define LULZBOT_BED_LEVELING_SUMMARY blr.report();
|
|
#endif
|
|
|
|
/**************************** SD SUPPORT DEBUGGING ***************************/
|
|
|
|
#if defined(LULZBOT_SDSUPPORT_DEBUG)
|
|
#define LULZBOT_SDCARD_CHECK_BYTE(n) \
|
|
static bool spi_error = false; \
|
|
if(n != -1 && !isprint(n) && n != '\n' && n != '\r') spi_error = true;
|
|
|
|
#define LULZBOT_SDCARD_COMMAND_DONE(cmd) \
|
|
if(spi_error) { \
|
|
SERIAL_ECHOLNPAIR("Likely SPI read error: ", cmd); \
|
|
spi_error = false; \
|
|
}
|
|
#endif
|
|
|
|
/**************************** USB THUMBDRIVE SUPPORT ***************************/
|
|
|
|
#if defined(USB_FLASH_DRIVE_SUPPORT)
|
|
#define USB_INTR_PIN SD_DETECT_PIN
|
|
#endif
|
|
|
|
#if defined(USE_UHS3_USB)
|
|
#define LULZBOT_USB_NO_TEST_UNIT_READY // Required for removable media adapter
|
|
#define LULZBOT_SKIP_PAGE3F // Required for IOGEAR media adapter
|
|
#define LULZBOT_USB_HOST_MANUAL_POLL // Optimization to shut off IRQ automatically
|
|
|
|
// Speed up I/O operations using Marlin functions
|
|
#define LULZBOT_UHS_WRITE_SS(v) WRITE(USB_CS_PIN, v)
|
|
#define LULZBOT_UHS_READ_IRQ() READ(USB_INTR_PIN)
|
|
|
|
#if defined(LULZBOT_USB_HOST_MANUAL_POLL)
|
|
#define LULZBOT_ENABLE_FRAME_IRQ(en) enable_frame_irq(en)
|
|
#define LULZBOT_ENABLE_FRAME_IRQ_DEFN \
|
|
volatile bool frame_irq_enabled = false; \
|
|
bool enable_frame_irq(bool enable) { \
|
|
const bool prev_state = frame_irq_enabled; \
|
|
if(prev_state != enable) { \
|
|
if(enable) \
|
|
regWr(rHIEN, regRd(rHIEN) | bmFRAMEIE); \
|
|
else \
|
|
regWr(rHIEN, regRd(rHIEN) & ~bmFRAMEIE); \
|
|
frame_irq_enabled = enable; \
|
|
} \
|
|
return prev_state; \
|
|
}
|
|
#define LULZBOT_USB_IDLE_TASK \
|
|
if(usb_task_state == UHS_USB_HOST_STATE_RUNNING) { \
|
|
noInterrupts(); \
|
|
for(uint8_t x = 0; x < UHS_HOST_MAX_INTERFACE_DRIVERS; x++) { \
|
|
if(devConfig[x] && devConfig[x]->bPollEnable) { \
|
|
devConfig[x]->Poll(); \
|
|
} \
|
|
} \
|
|
interrupts(); \
|
|
}
|
|
#define LULZBOT_FRAME_IRQ_SAVE(en) const bool saved_irq_state = enable_frame_irq(en)
|
|
#define LULZBOT_FRAME_IRQ_RESTORE() enable_frame_irq(saved_irq_state)
|
|
#else
|
|
#define LULZBOT_ENABLE_FRAME_IRQ(en)
|
|
#define LULZBOT_ENABLE_FRAME_IRQ_DEFN
|
|
#define LULZBOT_FRAME_IRQ_SAVE(en)
|
|
#define LULZBOT_FRAME_IRQ_RESTORE()
|
|
#define LULZBOT_USB_IDLE_TASK
|
|
#endif
|
|
#endif
|
|
|
|
/**************************** LANGUAGE CHANGES ***************************/
|
|
|
|
#if EITHER(ULTIPANEL, EXTENSIBLE_UI)
|
|
#if defined(LULZBOT_LCD_MACHINE_NAME)
|
|
#if defined(LULZBOT_LIGHTWEIGHT_UI)
|
|
#define WELCOME_MSG _UxGT(LULZBOT_LCD_MACHINE_NAME " ready.")
|
|
#else
|
|
#define WELCOME_MSG _UxGT("LulzBot " LULZBOT_LCD_MACHINE_NAME " ready.")
|
|
#endif
|
|
#endif
|
|
|
|
// Change wording on a couple menu items
|
|
#define MSG_ERR_PROBING_FAILED _UxGT("Autolevel failed")
|
|
#define MSG_MOVE_E _UxGT("Extruder ") // Add space to extruder string
|
|
#define MSG_INFO_PRINTER_MENU _UxGT("Firmware Version") // About Printer -> Firmware Version
|
|
|
|
#define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("Changing Filament")
|
|
#define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("")
|
|
#define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("Please wait.")
|
|
|
|
#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("")
|
|
#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("End filament change")
|
|
#endif
|
|
|
|
#define LULZBOT_EXTRUDER_STR "Hotend"
|