2022-12-23 18:35:00 +00:00
|
|
|
#pragma once
|
|
|
|
#include <stdint.h>
|
2017-06-29 16:35:43 +00:00
|
|
|
|
|
|
|
extern const char* FW_VERSION_STR_P();
|
|
|
|
|
|
|
|
// Definition of a firmware flavor numerical values.
|
2022-12-06 12:18:52 +00:00
|
|
|
// To keep it short as possible
|
|
|
|
// DEVs/ALPHAs/BETAs limited to max 8 flavor versions
|
|
|
|
// RCs limited to 32 flavor versions
|
|
|
|
// Final Release always 64 as highest
|
2022-11-23 10:59:10 +00:00
|
|
|
enum FirmwareRevisionFlavorType : uint16_t {
|
2022-12-06 12:18:52 +00:00
|
|
|
FIRMWARE_REVISION_RELEASED = 0x0040,
|
|
|
|
FIRMWARE_REVISION_DEV = 0x0000,
|
|
|
|
FIRMWARE_REVISION_ALPHA = 0x008,
|
|
|
|
FIRMWARE_REVISION_BETA = 0x0010,
|
|
|
|
FIRMWARE_REVISION_RC = 0x0020
|
2017-06-29 16:35:43 +00:00
|
|
|
};
|
|
|
|
|
2022-12-21 16:11:58 +00:00
|
|
|
bool show_upgrade_dialog_if_version_newer(const char *version_string);
|
|
|
|
bool eeprom_fw_version_older_than(const uint16_t (&req_ver)[4]);
|
|
|
|
void update_current_firmware_version_to_eeprom();
|
2017-06-29 16:35:43 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inline int8_t eeprom_read_int8(unsigned char* addr) {
|
|
|
|
uint8_t v = eeprom_read_byte(addr);
|
|
|
|
return *reinterpret_cast<int8_t*>(&v);
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void eeprom_update_int8(unsigned char* addr, int8_t v) {
|
|
|
|
eeprom_update_byte(addr, *reinterpret_cast<uint8_t*>(&v));
|
|
|
|
}
|
|
|
|
|
2019-03-13 23:36:56 +00:00
|
|
|
|
|
|
|
//-//
|
2019-09-23 15:13:33 +00:00
|
|
|
#define EEPROM_NOZZLE_DIAMETER_uM_DEFAULT 400
|
|
|
|
|
2019-07-03 15:21:11 +00:00
|
|
|
enum class ClPrintChecking:uint_least8_t
|
|
|
|
{
|
|
|
|
_Nozzle=1,
|
|
|
|
_Model=2,
|
|
|
|
_Smodel=3,
|
|
|
|
_Version=4,
|
|
|
|
_Gcode=5
|
|
|
|
};
|
2019-03-13 23:36:56 +00:00
|
|
|
|
2019-07-03 15:21:11 +00:00
|
|
|
enum class ClNozzleDiameter:uint_least8_t
|
2019-03-13 23:36:56 +00:00
|
|
|
{
|
2019-07-03 15:21:11 +00:00
|
|
|
_Diameter_250=25,
|
|
|
|
_Diameter_400=40,
|
|
|
|
_Diameter_600=60,
|
2021-01-08 12:52:39 +00:00
|
|
|
_Diameter_800=80,
|
2019-07-03 15:21:11 +00:00
|
|
|
_Diameter_Undef=EEPROM_EMPTY_VALUE
|
|
|
|
};
|
2019-03-13 23:36:56 +00:00
|
|
|
|
2019-07-03 15:21:11 +00:00
|
|
|
enum class ClCheckMode:uint_least8_t
|
2019-03-13 23:36:56 +00:00
|
|
|
{
|
2019-07-03 15:21:11 +00:00
|
|
|
_None,
|
|
|
|
_Warn,
|
|
|
|
_Strict,
|
|
|
|
_Undef=EEPROM_EMPTY_VALUE
|
|
|
|
};
|
|
|
|
|
|
|
|
enum class ClCheckModel:uint_least8_t
|
|
|
|
{
|
|
|
|
_None,
|
|
|
|
_Warn,
|
|
|
|
_Strict,
|
|
|
|
_Undef=EEPROM_EMPTY_VALUE
|
|
|
|
};
|
|
|
|
|
|
|
|
enum class ClCheckVersion:uint_least8_t
|
|
|
|
{
|
|
|
|
_None,
|
|
|
|
_Warn,
|
|
|
|
_Strict,
|
|
|
|
_Undef=EEPROM_EMPTY_VALUE
|
|
|
|
};
|
|
|
|
|
|
|
|
enum class ClCheckGcode:uint_least8_t
|
|
|
|
{
|
|
|
|
_None,
|
|
|
|
_Warn,
|
|
|
|
_Strict,
|
|
|
|
_Undef=EEPROM_EMPTY_VALUE
|
|
|
|
};
|
2019-03-13 23:36:56 +00:00
|
|
|
|
2019-07-09 10:16:51 +00:00
|
|
|
#define COMPARE_VALUE_EQUAL (((uint8_t)ClCompareValue::_Equal<<6)+((uint8_t)ClCompareValue::_Equal<<4)+((uint8_t)ClCompareValue::_Equal<<2)+((uint8_t)ClCompareValue::_Equal))
|
|
|
|
enum class ClCompareValue:uint_least8_t
|
|
|
|
{
|
|
|
|
_Less=0,
|
|
|
|
_Equal=1,
|
|
|
|
_Greater=2
|
|
|
|
};
|
|
|
|
|
2019-07-03 15:21:11 +00:00
|
|
|
extern ClNozzleDiameter oNozzleDiameter;
|
|
|
|
extern ClCheckMode oCheckMode;
|
|
|
|
extern ClCheckModel oCheckModel;
|
|
|
|
extern ClCheckVersion oCheckVersion;
|
|
|
|
extern ClCheckGcode oCheckGcode;
|
2019-03-13 23:36:56 +00:00
|
|
|
|
|
|
|
void fCheckModeInit();
|
|
|
|
void nozzle_diameter_check(uint16_t nDiameter);
|
2019-07-03 15:21:11 +00:00
|
|
|
void printer_model_check(uint16_t nPrinterModel);
|
2022-08-06 21:15:46 +00:00
|
|
|
void printer_smodel_check(const char* pStrPos);
|
2019-07-03 15:21:11 +00:00
|
|
|
void fw_version_check(const char *pVersion);
|
|
|
|
void gcode_level_check(uint16_t nGcodeLevel);
|
2019-03-13 23:36:56 +00:00
|
|
|
|
2019-07-09 10:16:51 +00:00
|
|
|
void fSetMmuMode(bool bMMu);
|
|
|
|
|
2021-02-02 11:21:16 +00:00
|
|
|
#define IP4_STR_SIZE 16
|
|
|
|
extern void ip4_to_str(char* dest, uint8_t* IP);
|
|
|
|
|
2022-12-23 18:35:00 +00:00
|
|
|
// Calibration status of the machine
|
|
|
|
// (unsigned char*)EEPROM_CALIBRATION_STATUS_V2
|
|
|
|
typedef uint8_t CalibrationStatus;
|
|
|
|
const CalibrationStatus CALIBRATION_STATUS_SELFTEST = 0b00000001; // Selftest
|
|
|
|
const CalibrationStatus CALIBRATION_STATUS_XYZ = 0b00000010; // XYZ calibration
|
|
|
|
const CalibrationStatus CALIBRATION_STATUS_Z = 0b00000100; // Z calibration
|
|
|
|
#ifdef TEMP_MODEL
|
|
|
|
const CalibrationStatus CALIBRATION_STATUS_TEMP_MODEL = 0b00001000; // Temperature model calibration
|
|
|
|
#endif
|
|
|
|
const CalibrationStatus CALIBRATION_STATUS_LIVE_ADJUST = 0b00010000; // 1st layer calibration
|
|
|
|
const CalibrationStatus CALIBRATION_STATUS_UNKNOWN = 0b10000000; // Freshly assembled or unknown status
|
|
|
|
|
|
|
|
// Calibration steps performed by the wizard
|
|
|
|
const CalibrationStatus CALIBRATION_WIZARD_STEPS =
|
|
|
|
CALIBRATION_STATUS_SELFTEST |
|
|
|
|
CALIBRATION_STATUS_XYZ |
|
|
|
|
CALIBRATION_STATUS_Z |
|
|
|
|
#ifdef TEMP_MODEL
|
|
|
|
CALIBRATION_STATUS_TEMP_MODEL |
|
|
|
|
#endif
|
|
|
|
CALIBRATION_STATUS_LIVE_ADJUST;
|
|
|
|
|
|
|
|
// Calibration steps enforced after service prep
|
|
|
|
const CalibrationStatus CALIBRATION_FORCE_PREP = CALIBRATION_STATUS_Z;
|
|
|
|
|
|
|
|
bool calibration_status_get(CalibrationStatus components);
|
|
|
|
void calibration_status_set(CalibrationStatus components);
|
|
|
|
void calibration_status_clear(CalibrationStatus components);
|
|
|
|
|
|
|
|
// PINDA has an independent calibration flag
|
|
|
|
inline bool calibration_status_pinda() { return eeprom_read_byte((uint8_t*)EEPROM_CALIBRATION_STATUS_PINDA); }
|