Commit 44830a3f authored by MagoKimbra's avatar MagoKimbra

Same fix and clear code

parent 4e9b158c
...@@ -262,7 +262,7 @@ float stored_position[NUM_POSITON_SLOTS][NUM_AXIS]; ...@@ -262,7 +262,7 @@ float stored_position[NUM_POSITON_SLOTS][NUM_AXIS];
static long gcode_N, gcode_LastN, Stopped_gcode_LastN = 0; static long gcode_N, gcode_LastN, Stopped_gcode_LastN = 0;
static char *current_command, *current_command_args; static char* current_command, *current_command_args;
static int cmd_queue_index_r = 0; static int cmd_queue_index_r = 0;
static int cmd_queue_index_w = 0; static int cmd_queue_index_w = 0;
static int commands_in_queue = 0; static int commands_in_queue = 0;
...@@ -292,7 +292,7 @@ static bool relative_mode = false; //Determines Absolute or Relative Coordinate ...@@ -292,7 +292,7 @@ static bool relative_mode = false; //Determines Absolute or Relative Coordinate
static char serial_char; static char serial_char;
static int serial_count = 0; static int serial_count = 0;
static boolean comment_mode = false; static boolean comment_mode = false;
static char *seen_pointer; // < A pointer to find chars in the command string (X, Y, Z, E, etc.) static char* seen_pointer; // < A pointer to find chars in the command string (X, Y, Z, E, etc.)
const char* queued_commands_P = NULL; /* pointer to the current line in the active sequence of commands, or NULL when none */ const char* queued_commands_P = NULL; /* pointer to the current line in the active sequence of commands, or NULL when none */
const int sensitive_pins[] = SENSITIVE_PINS; ///< Sensitive pin list for M42 const int sensitive_pins[] = SENSITIVE_PINS; ///< Sensitive pin list for M42
// Inactivity shutdown // Inactivity shutdown
...@@ -493,7 +493,7 @@ inline void refresh_cmd_timeout() { previous_cmd_ms = millis(); } ...@@ -493,7 +493,7 @@ inline void refresh_cmd_timeout() { previous_cmd_ms = millis(); }
void process_next_command(); void process_next_command();
void plan_arc(float target[NUM_AXIS], float *offset, uint8_t clockwise); void plan_arc(float target[NUM_AXIS], float* offset, uint8_t clockwise);
bool setTargetedHotend(int code); bool setTargetedHotend(int code);
...@@ -531,7 +531,7 @@ bool setTargetedHotend(int code); ...@@ -531,7 +531,7 @@ bool setTargetedHotend(int code);
// top_of_stack() returns the location of a variable on its stack frame. The value returned is above // top_of_stack() returns the location of a variable on its stack frame. The value returned is above
// the stack once the function returns to the caller. // the stack once the function returns to the caller.
unsigned char *top_of_stack() { unsigned char* top_of_stack() {
unsigned char x; unsigned char x;
return &x + 1; // x is pulled on return; return &x + 1; // x is pulled on return;
} }
...@@ -560,7 +560,7 @@ bool setTargetedHotend(int code); ...@@ -560,7 +560,7 @@ bool setTargetedHotend(int code);
// how_many_E5s_are_here() is a utility function to easily find out how many 0xE5's are // how_many_E5s_are_here() is a utility function to easily find out how many 0xE5's are
// at the specified location. Having this logic as a function simplifies the search code. // at the specified location. Having this logic as a function simplifies the search code.
// //
int how_many_E5s_are_here( unsigned char *p) { int how_many_E5s_are_here( unsigned char* p) {
int n; int n;
for(n = 0; n < 32000; n++) { for(n = 0; n < 32000; n++) {
...@@ -614,12 +614,12 @@ void enqueuecommands_P(const char* pgcode) { ...@@ -614,12 +614,12 @@ void enqueuecommands_P(const char* pgcode) {
* This is done in a non-safe way and needs a rework someday. * This is done in a non-safe way and needs a rework someday.
* Returns false if it doesn't add any command * Returns false if it doesn't add any command
*/ */
bool enqueuecommand(const char *cmd) { bool enqueuecommand(const char* cmd) {
if (*cmd == ';' || commands_in_queue >= BUFSIZE) return false; if (*cmd == ';' || commands_in_queue >= BUFSIZE) return false;
// This is dangerous if a mixing of serial and this happens // This is dangerous if a mixing of serial and this happens
char *command = command_queue[cmd_queue_index_w]; char* command = command_queue[cmd_queue_index_w];
strcpy(command, cmd); strcpy(command, cmd);
ECHO_SMV(DB, MSG_ENQUEUEING, command); ECHO_SMV(DB, MSG_ENQUEUEING, command);
ECHO_EM("\""); ECHO_EM("\"");
...@@ -907,7 +907,7 @@ void loop() { ...@@ -907,7 +907,7 @@ void loop() {
#if ENABLED(SDSUPPORT) #if ENABLED(SDSUPPORT)
if (card.saving) { if (card.saving) {
char *command = command_queue[cmd_queue_index_r]; char* command = command_queue[cmd_queue_index_r];
if (strstr_P(command, PSTR("M29"))) { if (strstr_P(command, PSTR("M29"))) {
// M29 closes the file // M29 closes the file
card.closeFile(); card.closeFile();
...@@ -938,7 +938,7 @@ void loop() { ...@@ -938,7 +938,7 @@ void loop() {
idle(); idle();
} }
void gcode_line_error(const char *err, bool doFlush = true) { void gcode_line_error(const char* err, bool doFlush = true) {
ECHO_S(ER); ECHO_S(ER);
PS_PGM(err); PS_PGM(err);
ECHO_EV(gcode_LastN); ECHO_EV(gcode_LastN);
...@@ -988,58 +988,47 @@ void get_command() { ...@@ -988,58 +988,47 @@ void get_command() {
if (!serial_count) return; // empty lines just exit if (!serial_count) return; // empty lines just exit
char *command = command_queue[cmd_queue_index_w]; char* command = command_queue[cmd_queue_index_w];
command[serial_count] = 0; // terminate string command[serial_count] = 0; // terminate string
// this item in the queue is not from sd // this item in the queue is not from sd
#if ENABLED(SDSUPPORT) #if ENABLED(SDSUPPORT)
fromsd[cmd_queue_index_w] = false; fromsd[cmd_queue_index_w] = false;
#endif #endif
char* npos = strchr(command, 'N');
char *npos = strchr(command, 'N'); char* apos = strchr(command, '*');
char *apos = strchr(command, '*');
if (npos) { if (npos) {
boolean M110 = strstr_P(command, PSTR("M110")) != NULL; boolean M110 = strstr_P(command, PSTR("M110")) != NULL;
if (M110) { if (M110) {
char *n2pos = strchr(command + 4, 'N'); char* n2pos = strchr(command + 4, 'N');
if (n2pos) npos = n2pos; if (n2pos) npos = n2pos;
} }
gcode_N = strtol(npos + 1, NULL, 10); gcode_N = strtol(npos + 1, NULL, 10);
if (gcode_N != gcode_LastN + 1 && !M110) { if (gcode_N != gcode_LastN + 1 && !M110) {
gcode_line_error(PSTR(MSG_ERR_LINE_NO)); gcode_line_error(PSTR(MSG_ERR_LINE_NO));
return; return;
} }
if (apos) { if (apos) {
byte checksum = 0, count = 0; byte checksum = 0, count = 0;
while (command[count] != '*') checksum ^= command[count++]; while (command[count] != '*') checksum ^= command[count++];
if (strtol(apos + 1, NULL, 10) != checksum) { if (strtol(apos + 1, NULL, 10) != checksum) {
gcode_line_error(PSTR(MSG_ERR_CHECKSUM_MISMATCH)); gcode_line_error(PSTR(MSG_ERR_CHECKSUM_MISMATCH));
return; return;
} }
// if no errors, continue parsing // if no errors, continue parsing
} } else if (npos == command) {
else if (npos == command) {
gcode_line_error(PSTR(MSG_ERR_NO_CHECKSUM)); gcode_line_error(PSTR(MSG_ERR_NO_CHECKSUM));
return; return;
} }
gcode_LastN = gcode_N; gcode_LastN = gcode_N;
// if no errors, continue parsing // if no errors, continue parsing
} } else if (apos) { // No '*' without 'N'
else if (apos) { // No '*' without 'N'
gcode_line_error(PSTR(MSG_ERR_NO_LINENUMBER_WITH_CHECKSUM), false); gcode_line_error(PSTR(MSG_ERR_NO_LINENUMBER_WITH_CHECKSUM), false);
return; return;
} }
// Movement commands alert when stopped // Movement commands alert when stopped
if (IsStopped()) { if (IsStopped()) {
char *gpos = strchr(command, 'G'); char* gpos = strchr(command, 'G');
if (gpos) { if (gpos) {
int codenum = strtol(gpos + 1, NULL, 10); int codenum = strtol(gpos + 1, NULL, 10);
switch (codenum) { switch (codenum) {
...@@ -1053,40 +1042,30 @@ void get_command() { ...@@ -1053,40 +1042,30 @@ void get_command() {
} }
} }
} }
// If command was e-stop process now // If command was e-stop process now
if (strcmp(command, "M112") == 0) kill(PSTR(MSG_KILLED)); if (strcmp(command, "M112") == 0) kill(PSTR(MSG_KILLED));
cmd_queue_index_w = (cmd_queue_index_w + 1) % BUFSIZE; cmd_queue_index_w = (cmd_queue_index_w + 1) % BUFSIZE;
commands_in_queue += 1; commands_in_queue += 1;
serial_count = 0; //clear buffer serial_count = 0; //clear buffer
} } else if (serial_char == '\\') { // Handle escapes
else if (serial_char == '\\') { // Handle escapes
if (MYSERIAL.available() > 0 && commands_in_queue < BUFSIZE) { if (MYSERIAL.available() > 0 && commands_in_queue < BUFSIZE) {
// if we have one more character, copy it over // if we have one more character, copy it over
serial_char = MYSERIAL.read(); serial_char = MYSERIAL.read();
command_queue[cmd_queue_index_w][serial_count++] = serial_char; command_queue[cmd_queue_index_w][serial_count++] = serial_char;
} }
// otherwise do nothing // otherwise do nothing
} } else { // its not a newline, carriage return or escape char
else { // its not a newline, carriage return or escape char
if (serial_char == ';') comment_mode = true; if (serial_char == ';') comment_mode = true;
if (!comment_mode) command_queue[cmd_queue_index_w][serial_count++] = serial_char; if (!comment_mode) command_queue[cmd_queue_index_w][serial_count++] = serial_char;
} }
} }
#if ENABLED(SDSUPPORT)
#if ENABLED(SDSUPPORT)
if (!card.sdprinting || serial_count) return; if (!card.sdprinting || serial_count) return;
// '#' stops reading from SD to the buffer prematurely, so procedural macro calls are possible // '#' stops reading from SD to the buffer prematurely, so procedural macro calls are possible
// if it occurs, stop_buffering is triggered and the buffer is ran dry. // if it occurs, stop_buffering is triggered and the buffer is ran dry.
// this character _can_ occur in serial com, due to checksums. however, no checksums are used in SD printing // this character _can_ occur in serial com, due to checksums. however, no checksums are used in SD printing
static bool stop_buffering = false; static bool stop_buffering = false;
if (commands_in_queue == 0) stop_buffering = false; if (commands_in_queue == 0) stop_buffering = false;
while (!card.eof() && commands_in_queue < BUFSIZE && !stop_buffering) { while (!card.eof() && commands_in_queue < BUFSIZE && !stop_buffering) {
int16_t n = card.get(); int16_t n = card.get();
serial_char = (char)n; serial_char = (char)n;
...@@ -1107,7 +1086,6 @@ void get_command() { ...@@ -1107,7 +1086,6 @@ void get_command() {
card.checkautostart(true); card.checkautostart(true);
} }
if (serial_char == '#') stop_buffering = true; if (serial_char == '#') stop_buffering = true;
if (!serial_count) { if (!serial_count) {
comment_mode = false; //for new command comment_mode = false; //for new command
return; //if empty line return; //if empty line
...@@ -1120,14 +1098,12 @@ void get_command() { ...@@ -1120,14 +1098,12 @@ void get_command() {
// } // }
comment_mode = false; //for new command comment_mode = false; //for new command
serial_count = 0; //clear buffer serial_count = 0; //clear buffer
} } else {
else {
if (serial_char == ';') comment_mode = true; if (serial_char == ';') comment_mode = true;
if (!comment_mode) command_queue[cmd_queue_index_w][serial_count++] = serial_char; if (!comment_mode) command_queue[cmd_queue_index_w][serial_count++] = serial_char;
} }
} }
#endif // SDSUPPORT
#endif // SDSUPPORT
} }
bool code_has_value() { bool code_has_value() {
...@@ -1140,13 +1116,12 @@ bool code_has_value() { ...@@ -1140,13 +1116,12 @@ bool code_has_value() {
float code_value() { float code_value() {
float ret; float ret;
char *e = strchr(seen_pointer, 'E'); char* e = strchr(seen_pointer, 'E');
if (e) { if (e) {
*e = 0; *e = 0;
ret = strtod(seen_pointer + 1, NULL); ret = strtod(seen_pointer + 1, NULL);
*e = 'E'; *e = 'E';
} } else
else
ret = strtod(seen_pointer + 1, NULL); ret = strtod(seen_pointer + 1, NULL);
return ret; return ret;
} }
...@@ -1156,8 +1131,8 @@ long code_value_long() { return strtol(seen_pointer + 1, NULL, 10); } ...@@ -1156,8 +1131,8 @@ long code_value_long() { return strtol(seen_pointer + 1, NULL, 10); }
int16_t code_value_short() { return (int16_t)strtol(seen_pointer + 1, NULL, 10); } int16_t code_value_short() { return (int16_t)strtol(seen_pointer + 1, NULL, 10); }
bool code_seen(char code) { bool code_seen(char code) {
seen_pointer = strchr(current_command_args, code); // +3 since "G0 " is the shortest prefix seen_pointer = strchr(current_command_args, code);
return (seen_pointer != NULL); //Return True if a character was found return (seen_pointer != NULL); // Return TRUE if the code-letter was found
} }
#define DEFINE_PGM_READ_ANY(type, reader) \ #define DEFINE_PGM_READ_ANY(type, reader) \
...@@ -1168,9 +1143,9 @@ DEFINE_PGM_READ_ANY(float, float); ...@@ -1168,9 +1143,9 @@ DEFINE_PGM_READ_ANY(float, float);
DEFINE_PGM_READ_ANY(signed char, byte); DEFINE_PGM_READ_ANY(signed char, byte);
#define XYZ_CONSTS_FROM_CONFIG(type, array, CONFIG) \ #define XYZ_CONSTS_FROM_CONFIG(type, array, CONFIG) \
static const PROGMEM type array##_P[3] = \ static const PROGMEM type array##_P[3] = \
{ X_##CONFIG, Y_##CONFIG, Z_##CONFIG }; \ { X_##CONFIG, Y_##CONFIG, Z_##CONFIG }; \
static inline type array(int axis) \ static inline type array(int axis) \
{ return pgm_read_any(&array##_P[axis]); } { return pgm_read_any(&array##_P[axis]); }
#if MECH(CARTESIAN) || MECH(COREXY) || MECH(COREXZ) || MECH(SCARA) #if MECH(CARTESIAN) || MECH(COREXY) || MECH(COREXZ) || MECH(SCARA)
...@@ -1184,13 +1159,13 @@ XYZ_CONSTS_FROM_CONFIG(signed char, home_dir, HOME_DIR); ...@@ -1184,13 +1159,13 @@ XYZ_CONSTS_FROM_CONFIG(signed char, home_dir, HOME_DIR);
#if ENABLED(DUAL_X_CARRIAGE) #if ENABLED(DUAL_X_CARRIAGE)
#define DXC_FULL_CONTROL_MODE 0 #define DXC_FULL_CONTROL_MODE 0
#define DXC_AUTO_PARK_MODE 1 #define DXC_AUTO_PARK_MODE 1
#define DXC_DUPLICATION_MODE 2 #define DXC_DUPLICATION_MODE 2
static int dual_x_carriage_mode = DEFAULT_DUAL_X_CARRIAGE_MODE; static int dual_x_carriage_mode = DEFAULT_DUAL_X_CARRIAGE_MODE;
static float x_home_pos(int extruder) { static float x_home_pos(int extruder) {
if (extruder == 0) if (extruder == 0)
return base_home_pos(X_AXIS) + home_offset[X_AXIS]; return base_home_pos(X_AXIS) + home_offset[X_AXIS];
else else
...@@ -1199,23 +1174,23 @@ XYZ_CONSTS_FROM_CONFIG(signed char, home_dir, HOME_DIR); ...@@ -1199,23 +1174,23 @@ XYZ_CONSTS_FROM_CONFIG(signed char, home_dir, HOME_DIR);
// This allow soft recalibration of the second extruder offset position without firmware reflash // This allow soft recalibration of the second extruder offset position without firmware reflash
// (through the M218 command). // (through the M218 command).
return (hotend_offset[X_AXIS][1] > 0) ? hotend_offset[X_AXIS][1] : X2_HOME_POS; return (hotend_offset[X_AXIS][1] > 0) ? hotend_offset[X_AXIS][1] : X2_HOME_POS;
} }
static int x_home_dir(int extruder) { static int x_home_dir(int extruder) {
return (extruder == 0) ? X_HOME_DIR : X2_HOME_DIR; return (extruder == 0) ? X_HOME_DIR : X2_HOME_DIR;
} }
static float inactive_extruder_x_pos = X2_MAX_POS; // used in mode 0 & 1 static float inactive_extruder_x_pos = X2_MAX_POS; // used in mode 0 & 1
static bool active_extruder_parked = false; // used in mode 1 & 2 static bool active_extruder_parked = false; // used in mode 1 & 2
static float raised_parked_position[NUM_AXIS]; // used in mode 1 static float raised_parked_position[NUM_AXIS]; // used in mode 1
static millis_t delayed_move_time = 0; // used in mode 1 static millis_t delayed_move_time = 0; // used in mode 1
static float duplicate_hotend_x_offset = DEFAULT_DUPLICATION_X_OFFSET; // used in mode 2 static float duplicate_hotend_x_offset = DEFAULT_DUPLICATION_X_OFFSET; // used in mode 2
static float duplicate_extruder_temp_offset = 0; // used in mode 2 static float duplicate_extruder_temp_offset = 0; // used in mode 2
bool extruder_duplication_enabled = false; // used in mode 2 bool extruder_duplication_enabled = false; // used in mode 2
#endif //DUAL_X_CARRIAGE #endif //DUAL_X_CARRIAGE
void print_xyz(const char *prefix, const float x, const float y, const float z, bool eol = true) { void print_xyz(const char* prefix, const float x, const float y, const float z, bool eol = true) {
ECHO_V(prefix); ECHO_V(prefix);
ECHO_MV(": (", x); ECHO_MV(": (", x);
ECHO_MV(", ", y); ECHO_MV(", ", y);
...@@ -1223,21 +1198,19 @@ void print_xyz(const char *prefix, const float x, const float y, const float z, ...@@ -1223,21 +1198,19 @@ void print_xyz(const char *prefix, const float x, const float y, const float z,
ECHO_M(")"); ECHO_M(")");
if (eol) ECHO_E; if (eol) ECHO_E;
} }
void print_xyz(const char *prefix, const float xyz[], bool eol = true) { void print_xyz(const char* prefix, const float xyz[], bool eol = true) {
print_xyz(prefix, xyz[X_AXIS], xyz[Y_AXIS], xyz[Z_AXIS], eol); print_xyz(prefix, xyz[X_AXIS], xyz[Y_AXIS], xyz[Z_AXIS], eol);
} }
static void set_axis_is_at_home(AxisEnum axis) { static void set_axis_is_at_home(AxisEnum axis) {
#if ENABLED(DUAL_X_CARRIAGE)
#if ENABLED(DUAL_X_CARRIAGE)
if (axis == X_AXIS) { if (axis == X_AXIS) {
if (active_extruder != 0) { if (active_extruder != 0) {
current_position[X_AXIS] = x_home_pos(active_extruder); current_position[X_AXIS] = x_home_pos(active_extruder);
min_pos[X_AXIS] = X2_MIN_POS; min_pos[X_AXIS] = X2_MIN_POS;
max_pos[X_AXIS] = max(hotend_offset[X_AXIS][1], X2_MAX_POS); max_pos[X_AXIS] = max(hotend_offset[X_AXIS][1], X2_MAX_POS);
return; return;
} } else if (dual_x_carriage_mode == DXC_DUPLICATION_MODE) {
else if (dual_x_carriage_mode == DXC_DUPLICATION_MODE) {
float xoff = home_offset[X_AXIS]; float xoff = home_offset[X_AXIS];
current_position[X_AXIS] = base_home_pos(X_AXIS) + xoff; current_position[X_AXIS] = base_home_pos(X_AXIS) + xoff;
min_pos[X_AXIS] = base_min_pos(X_AXIS) + xoff; min_pos[X_AXIS] = base_min_pos(X_AXIS) + xoff;
...@@ -1245,61 +1218,50 @@ static void set_axis_is_at_home(AxisEnum axis) { ...@@ -1245,61 +1218,50 @@ static void set_axis_is_at_home(AxisEnum axis) {
return; return;
} }
} }
#endif #endif
#if MECH(SCARA)
#if MECH(SCARA)
if (axis == X_AXIS || axis == Y_AXIS) { if (axis == X_AXIS || axis == Y_AXIS) {
float homeposition[3]; float homeposition[3];
for (int i = 0; i < 3; i++) homeposition[i] = base_home_pos(i); for (int i = 0; i < 3; i++) homeposition[i] = base_home_pos(i);
// ECHO_MV("homeposition[x]= ", homeposition[0]); // ECHO_MV("homeposition[x]= ", homeposition[0]);
// ECHO_EMV(" homeposition[y]= ", homeposition[1]); // ECHO_EMV("homeposition[y]= ", homeposition[1]);
// Works out real Home position angles using inverse kinematics, // Works out real Home position angles using inverse kinematics,
// and calculates homing offset using forward kinematics // and calculates homing offset using forward kinematics
calculate_delta(homeposition); calculate_delta(homeposition);
// ECHO_MV("base Theta= ", delta[X_AXIS]); // ECHO_MV("base Theta= ", delta[X_AXIS]);
// ECHO_EMV(" base Psi+Theta=", delta[Y_AXIS]); // ECHO_EMV(" base Psi+Theta=", delta[Y_AXIS]);
for (int i = 0; i < 2; i++) delta[i] -= home_offset[i]; for (int i = 0; i < 2; i++) delta[i] -= home_offset[i];
// ECHO_MV("addhome X=", home_offset[X_AXIS]); // ECHO_MV("addhome X=", home_offset[X_AXIS]);
// ECHO_MV(" addhome Y=", home_offset[Y_AXIS]); // ECHO_MV(" addhome Y=", home_offset[Y_AXIS]);
// ECHO_MV(" addhome Theta=", delta[X_AXIS]); // ECHO_MV(" addhome Theta=", delta[X_AXIS]);
// ECHO_EMV(" addhome Psi+Theta=", delta[Y_AXIS]); // ECHO_EMV(" addhome Psi+Theta=", delta[Y_AXIS]);
calculate_SCARA_forward_Transform(delta); calculate_SCARA_forward_Transform(delta);
// ECHO_MV("Delta X=", delta[X_AXIS]); // ECHO_MV("Delta X=", delta[X_AXIS]);
// ECHO_EMV(" Delta Y=", delta[Y_AXIS]); // ECHO_EMV(" Delta Y=", delta[Y_AXIS]);
current_position[axis] = delta[axis]; current_position[axis] = delta[axis];
// SCARA home positions are based on configuration since the actual limits are determined by the // SCARA home positions are based on configuration since the actual limits are determined by the
// inverse kinematic transform. // inverse kinematic transform.
min_pos[axis] = base_min_pos(axis); // + (delta[axis] - base_home_pos(axis)); min_pos[axis] = base_min_pos(axis); // + (delta[axis] - base_home_pos(axis));
max_pos[axis] = base_max_pos(axis); // + (delta[axis] - base_home_pos(axis)); max_pos[axis] = base_max_pos(axis); // + (delta[axis] - base_home_pos(axis));
} } else {
else {
current_position[axis] = base_home_pos(axis) + home_offset[axis]; current_position[axis] = base_home_pos(axis) + home_offset[axis];
min_pos[axis] = base_min_pos(axis) + home_offset[axis]; min_pos[axis] = base_min_pos(axis) + home_offset[axis];
max_pos[axis] = base_max_pos(axis) + home_offset[axis]; max_pos[axis] = base_max_pos(axis) + home_offset[axis];
} }
#elif MECH(DELTA) #elif MECH(DELTA)
current_position[axis] = base_home_pos[axis] + home_offset[axis]; current_position[axis] = base_home_pos[axis] + home_offset[axis];
min_pos[axis] = base_min_pos(axis) + home_offset[axis]; min_pos[axis] = base_min_pos(axis) + home_offset[axis];
max_pos[axis] = base_max_pos[axis] + home_offset[axis]; max_pos[axis] = base_max_pos[axis] + home_offset[axis];
#else #else
current_position[axis] = base_home_pos(axis) + home_offset[axis]; current_position[axis] = base_home_pos(axis) + home_offset[axis];
min_pos[axis] = base_min_pos(axis) + home_offset[axis]; min_pos[axis] = base_min_pos(axis) + home_offset[axis];
max_pos[axis] = base_max_pos(axis) + home_offset[axis]; max_pos[axis] = base_max_pos(axis) + home_offset[axis];
#endif #endif
#if ENABLED(AUTO_BED_LEVELING_FEATURE) && Z_HOME_DIR < 0 #if ENABLED(AUTO_BED_LEVELING_FEATURE) && Z_HOME_DIR < 0
if (axis == Z_AXIS) current_position[Z_AXIS] -= zprobe_zoffset; if (axis == Z_AXIS) current_position[Z_AXIS] -= zprobe_zoffset;
#endif #endif
if (debugLevel & DEBUG_INFO) { if (debugLevel & DEBUG_INFO) {
ECHO_SMV(DB, "set_axis_is_at_home ", (unsigned long)axis); ECHO_SMV(DB, "set_axis_is_at_home ", (unsigned long)axis);
...@@ -1628,7 +1590,7 @@ static void clean_up_after_endstop_move() { ...@@ -1628,7 +1590,7 @@ static void clean_up_after_endstop_move() {
} }
#endif #endif
#if SERVO_LEVELING && HASNT(Z_PROBE_SLED) #if HAS(SERVO_ENDSTOPS) && HASNT(Z_PROBE_SLED)
// Deploy a probe if there is one, and homing towards the bed // Deploy a probe if there is one, and homing towards the bed
if (axis == Z_AXIS) { if (axis == Z_AXIS) {
if (axis_home_dir < 0) deploy_z_probe(); if (axis_home_dir < 0) deploy_z_probe();
...@@ -1724,7 +1686,7 @@ static void clean_up_after_endstop_move() { ...@@ -1724,7 +1686,7 @@ static void clean_up_after_endstop_move() {
} }
#endif #endif
#if SERVO_LEVELING && HASNT(Z_PROBE_SLED) #if HAS(SERVO_ENDSTOPS) && HASNT(Z_PROBE_SLED)
// Deploy a probe if there is one, and homing towards the bed // Deploy a probe if there is one, and homing towards the bed
if (axis == Z_AXIS) { if (axis == Z_AXIS) {
if (axis_home_dir < 0) { if (axis_home_dir < 0) {
...@@ -3533,7 +3495,7 @@ inline void gcode_G28() { ...@@ -3533,7 +3495,7 @@ inline void gcode_G28() {
#if ENABLED(AUTO_BED_LEVELING_FEATURE) #if ENABLED(AUTO_BED_LEVELING_FEATURE)
void out_of_range_error(const char *p_edge) { void out_of_range_error(const char* p_edge) {
ECHO_M("?Probe "); ECHO_M("?Probe ");
PS_PGM(p_edge); PS_PGM(p_edge);
ECHO_EM(" position out of range."); ECHO_EM(" position out of range.");
...@@ -4282,7 +4244,7 @@ inline void gcode_G92() { ...@@ -4282,7 +4244,7 @@ inline void gcode_G92() {
* M1: // M1 - Conditional stop - Wait for user button press on LCD * M1: // M1 - Conditional stop - Wait for user button press on LCD
*/ */
inline void gcode_M0_M1() { inline void gcode_M0_M1() {
char *args = current_command_args; char* args = current_command_args;
millis_t codenum = 0; millis_t codenum = 0;
bool hasP = false, hasS = false; bool hasP = false, hasS = false;
...@@ -4956,7 +4918,7 @@ inline void gcode_M92() { ...@@ -4956,7 +4918,7 @@ inline void gcode_M92() {
#if ENABLED(M100_FREE_MEMORY_WATCHER) #if ENABLED(M100_FREE_MEMORY_WATCHER)
inline void gcode_M100() { inline void gcode_M100() {
static int m100_not_initialized = 1; static int m100_not_initialized = 1;
unsigned char *sp, *ptr; unsigned char* sp, *ptr;
int i, j, n; int i, j, n;
// //
...@@ -4970,7 +4932,7 @@ inline void gcode_M92() { ...@@ -4970,7 +4932,7 @@ inline void gcode_M92() {
// //
#if ENABLED(M100_FREE_MEMORY_DUMPER) // Comment out to remove Dump sub-command #if ENABLED(M100_FREE_MEMORY_DUMPER) // Comment out to remove Dump sub-command
if ( code_seen('D') ) { if ( code_seen('D') ) {
ptr = (unsigned char *) __brkval; ptr = (unsigned char*) __brkval;
// //
// We want to start and end the dump on a nice 16 byte boundry even though // We want to start and end the dump on a nice 16 byte boundry even though
...@@ -4978,14 +4940,14 @@ inline void gcode_M92() { ...@@ -4978,14 +4940,14 @@ inline void gcode_M92() {
// //
ECHO_M("\n__brkval : "); ECHO_M("\n__brkval : ");
prt_hex_word( (unsigned int) ptr ); prt_hex_word( (unsigned int) ptr );
ptr = (unsigned char *) ((unsigned long) ptr & 0xfff0); ptr = (unsigned char*) ((unsigned long) ptr & 0xfff0);
sp = top_of_stack(); sp = top_of_stack();
ECHO_M("\nStack Pointer : "); ECHO_M("\nStack Pointer : ");
prt_hex_word( (unsigned int) sp ); prt_hex_word( (unsigned int) sp );
ECHO_M("\n"); ECHO_M("\n");
sp = (unsigned char *) ((unsigned long) sp | 0x000f); sp = (unsigned char*) ((unsigned long) sp | 0x000f);
n = sp - ptr; n = sp - ptr;
// //
...@@ -5026,7 +4988,7 @@ inline void gcode_M92() { ...@@ -5026,7 +4988,7 @@ inline void gcode_M92() {
int max_addr = (int) __brkval; int max_addr = (int) __brkval;
int max_cnt = 0; int max_cnt = 0;
int block_cnt = 0; int block_cnt = 0;
ptr = (unsigned char *) __brkval; ptr = (unsigned char*) __brkval;
sp = top_of_stack(); sp = top_of_stack();
n = sp - ptr; n = sp - ptr;
...@@ -5034,7 +4996,7 @@ inline void gcode_M92() { ...@@ -5034,7 +4996,7 @@ inline void gcode_M92() {
for(i = 0; i < n; i++) { for(i = 0; i < n; i++) {
if ( *(ptr+i) == (unsigned char) 0xe5) { if ( *(ptr+i) == (unsigned char) 0xe5) {
j = how_many_E5s_are_here( (unsigned char *) ptr+i ); j = how_many_E5s_are_here( (unsigned char*) ptr+i );
if ( j > 8) { if ( j > 8) {
ECHO_MV("Found ", j ); ECHO_MV("Found ", j );
ECHO_M(" bytes free at 0x"); ECHO_M(" bytes free at 0x");
...@@ -5065,7 +5027,7 @@ inline void gcode_M92() { ...@@ -5065,7 +5027,7 @@ inline void gcode_M92() {
int x; // x gets the # of locations to corrupt within the memory pool int x; // x gets the # of locations to corrupt within the memory pool
x = code_value(); x = code_value();
ECHO_EM("Corrupting free memory block.\n"); ECHO_EM("Corrupting free memory block.\n");
ptr = (unsigned char *) __brkval; ptr = (unsigned char*) __brkval;
ECHO_MV("\n__brkval : ",(long) ptr ); ECHO_MV("\n__brkval : ",(long) ptr );
ptr += 8; ptr += 8;
...@@ -5092,7 +5054,7 @@ inline void gcode_M92() { ...@@ -5092,7 +5054,7 @@ inline void gcode_M92() {
// //
if (m100_not_initialized || code_seen('I') ) { // If no sub-command is specified, the first time if (m100_not_initialized || code_seen('I') ) { // If no sub-command is specified, the first time
ECHO_EM("Initializing free memory block.\n"); // this happens, it will Initialize. ECHO_EM("Initializing free memory block.\n"); // this happens, it will Initialize.
ptr = (unsigned char *) __brkval; // Repeated M100 with no sub-command will not destroy the ptr = (unsigned char*) __brkval; // Repeated M100 with no sub-command will not destroy the
ECHO_MV("\n__brkval : ",(long) ptr ); // state of the initialized free memory pool. ECHO_MV("\n__brkval : ",(long) ptr ); // state of the initialized free memory pool.
ptr += 8; ptr += 8;
...@@ -5871,11 +5833,11 @@ inline void gcode_M226() { ...@@ -5871,11 +5833,11 @@ inline void gcode_M226() {
servo_position = code_value_short(); servo_position = code_value_short();
if (servo_index >= 0 && servo_index < NUM_SERVOS && servo_index != DONDOLO_SERVO_INDEX) { if (servo_index >= 0 && servo_index < NUM_SERVOS && servo_index != DONDOLO_SERVO_INDEX) {
Servo *srv = &servo[servo_index]; Servo *srv = &servo[servo_index];
#if SERVO_LEVELING #if HAS(SERVO_ENDSTOPS)
srv->attach(0); srv->attach(0);
#endif #endif
srv->write(servo_position); srv->write(servo_position);
#if SERVO_LEVELING #if HAS(SERVO_ENDSTOPS)
delay(PROBE_SERVO_DEACTIVATION_DELAY); delay(PROBE_SERVO_DEACTIVATION_DELAY);
srv->detach(); srv->detach();
#endif #endif
...@@ -5897,11 +5859,11 @@ inline void gcode_M226() { ...@@ -5897,11 +5859,11 @@ inline void gcode_M226() {
servo_position = code_value_short(); servo_position = code_value_short();
if (servo_index >= 0 && servo_index < NUM_SERVOS) { if (servo_index >= 0 && servo_index < NUM_SERVOS) {
Servo *srv = &servo[servo_index]; Servo *srv = &servo[servo_index];
#if SERVO_LEVELING #if HAS(SERVO_ENDSTOPS)
srv->attach(0); srv->attach(0);
#endif #endif
srv->write(servo_position); srv->write(servo_position);
#if SERVO_LEVELING #if HAS(SERVO_ENDSTOPS)
delay(SERVO_DEACTIVATION_DELAY); delay(SERVO_DEACTIVATION_DELAY);
srv->detach(); srv->detach();
#endif #endif
...@@ -7040,7 +7002,7 @@ void process_next_command() { ...@@ -7040,7 +7002,7 @@ void process_next_command() {
while (*current_command >= '0' && *current_command <= '9') ++current_command; // skip [0-9]* while (*current_command >= '0' && *current_command <= '9') ++current_command; // skip [0-9]*
while (*current_command == ' ') ++current_command; while (*current_command == ' ') ++current_command;
} }
char *starpos = strchr(current_command, '*'); // * should always be the last parameter char* starpos = strchr(current_command, '*'); // * should always be the last parameter
if (starpos) while (*starpos == ' ' || *starpos == '*') *starpos-- = '\0'; // nullify '*' and ' ' if (starpos) while (*starpos == ' ' || *starpos == '*') *starpos-- = '\0'; // nullify '*' and ' '
// Get the command code, which must be G, M, or T // Get the command code, which must be G, M, or T
...@@ -7396,7 +7358,7 @@ void process_next_command() { ...@@ -7396,7 +7358,7 @@ void process_next_command() {
case 400: // M400 finish all moves case 400: // M400 finish all moves
gcode_M400(); break; gcode_M400(); break;
#if SERVO_LEVELING #if HAS(SERVO_ENDSTOPS)
case 401: case 401:
gcode_M401(); break; gcode_M401(); break;
case 402: case 402:
...@@ -8182,7 +8144,7 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) { ...@@ -8182,7 +8144,7 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) {
check_axes_activity(); check_axes_activity();
} }
void kill(const char *lcd_msg) { void kill(const char* lcd_msg) {
#if ENABLED(ULTRA_LCD) #if ENABLED(ULTRA_LCD)
lcd_setalertstatuspgm(lcd_msg); lcd_setalertstatuspgm(lcd_msg);
#endif #endif
......
...@@ -2,10 +2,10 @@ ...@@ -2,10 +2,10 @@
blinkm.cpp - Library for controlling a BlinkM over i2c blinkm.cpp - Library for controlling a BlinkM over i2c
Created by Tim Koster, August 21 2013. Created by Tim Koster, August 21 2013.
*/ */
#include "base.h" #include "base.h"
#if ENABLED(BLINKM) #if ENABLED(BLINKM)
#include "blinkm.h" #include "blinkm.h"
void SendColors(byte red, byte grn, byte blu) { void SendColors(byte red, byte grn, byte blu) {
...@@ -19,4 +19,5 @@ void SendColors(byte red, byte grn, byte blu) { ...@@ -19,4 +19,5 @@ void SendColors(byte red, byte grn, byte blu) {
Wire.endTransmission(); Wire.endTransmission();
} }
#endif #endif // BLINKM
#include "base.h" #include "base.h"
#if HAS(BUZZER) #if HAS(BUZZER)
#include "buzzer.h" #include "buzzer.h"
#include "ultralcd.h" #include "ultralcd.h"
void buzz(long duration, uint16_t freq) { void buzz(long duration, uint16_t freq) {
if (freq > 0) { if (freq > 0) {
#if ENABLED(LCD_USE_I2C_BUZZER) #if ENABLED(LCD_USE_I2C_BUZZER)
lcd_buzz(duration, freq); lcd_buzz(duration, freq);
#elif PIN_EXISTS(BEEPER) // on-board buzzers have no further condition #elif PIN_EXISTS(BEEPER) // on-board buzzers have no further condition
SET_OUTPUT(BEEPER_PIN); SET_OUTPUT(BEEPER_PIN);
#if ENABLED(SPEAKER) // a speaker needs a AC ore a pulsed DC #if ENABLED(SPEAKER) // a speaker needs a AC ore a pulsed DC
//tone(BEEPER_PIN, freq, duration); // needs a PWMable pin //tone(BEEPER_PIN, freq, duration); // needs a PWMable pin
unsigned int delay = 1000000 / freq / 2; unsigned int delay = 1000000 / freq / 2;
int i = duration * freq / 1000; int i = duration * freq / 1000;
...@@ -21,17 +19,15 @@ void buzz(long duration, uint16_t freq) { ...@@ -21,17 +19,15 @@ void buzz(long duration, uint16_t freq) {
WRITE(BEEPER_PIN, LOW); WRITE(BEEPER_PIN, LOW);
delayMicroseconds(delay); delayMicroseconds(delay);
} }
#else // buzzer has its own resonator - needs a DC #else // buzzer has its own resonator - needs a DC
WRITE(BEEPER_PIN, HIGH); WRITE(BEEPER_PIN, HIGH);
delay(duration); delay(duration);
WRITE(BEEPER_PIN, LOW); WRITE(BEEPER_PIN, LOW);
#endif #endif
#else #else
delay(duration); delay(duration);
#endif #endif
} } else
else {
delay(duration); delay(duration);
}
} }
#endif #endif
...@@ -23,20 +23,17 @@ CardReader::CardReader() { ...@@ -23,20 +23,17 @@ CardReader::CardReader() {
workDirDepth = 0; workDirDepth = 0;
file_subcall_ctr = 0; file_subcall_ctr = 0;
memset(workDirParents, 0, sizeof(workDirParents)); memset(workDirParents, 0, sizeof(workDirParents));
autostart_stilltocheck = true; //the SD start is delayed, because otherwise the serial cannot answer fast enough to make contact with the host software. autostart_stilltocheck = true; //the SD start is delayed, because otherwise the serial cannot answer fast enough to make contact with the host software.
autostart_index = 0; autostart_index = 0;
//power to SD reader //power to SD reader
#if SDPOWER > -1 #if SDPOWER > -1
OUT_WRITE(SDPOWER, HIGH); OUT_WRITE(SDPOWER, HIGH);
#endif //SDPOWER #endif //SDPOWER
next_autostart_ms = millis() + SPLASH_SCREEN_DURATION; next_autostart_ms = millis() + SPLASH_SCREEN_DURATION;
} }
char *createFilename(char *buffer, const dir_t &p) { //buffer > 12characters char* createFilename(char* buffer, const dir_t& p) { //buffer > 12characters
char *pos = buffer; char* pos = buffer;
for (uint8_t i = 0; i < 11; i++) { for (uint8_t i = 0; i < 11; i++) {
if (p.name[i] == ' ') continue; if (p.name[i] == ' ') continue;
if (i == 8) *pos++ = '.'; if (i == 8) *pos++ = '.';
...@@ -52,34 +49,27 @@ char *createFilename(char *buffer, const dir_t &p) { //buffer > 12characters ...@@ -52,34 +49,27 @@ char *createFilename(char *buffer, const dir_t &p) { //buffer > 12characters
* LS_GetFilename - Get the filename of the file indexed by nrFiles * LS_GetFilename - Get the filename of the file indexed by nrFiles
* LS_SerialPrint - Print the full path of each file to serial output * LS_SerialPrint - Print the full path of each file to serial output
*/ */
void CardReader::lsDive(const char *prepend, SdFile parent, const char * const match/*=NULL*/) { void CardReader::lsDive(const char* prepend, SdFile parent, const char* const match/*=NULL*/) {
dir_t p; dir_t p;
uint8_t cnt = 0; uint8_t cnt = 0;
// Read the next entry from a directory // Read the next entry from a directory
while (parent.readDir(p, longFilename) > 0) { while (parent.readDir(p, longFilename) > 0) {
// If the entry is a directory and the action is LS_SerialPrint // If the entry is a directory and the action is LS_SerialPrint
if (DIR_IS_SUBDIR(&p) && lsAction != LS_Count && lsAction != LS_GetFilename) { if (DIR_IS_SUBDIR(&p) && lsAction != LS_Count && lsAction != LS_GetFilename) {
// Get the short name for the item, which we know is a folder // Get the short name for the item, which we know is a folder
char lfilename[FILENAME_LENGTH]; char lfilename[FILENAME_LENGTH];
createFilename(lfilename, p); createFilename(lfilename, p);
// Allocate enough stack space for the full path to a folder, trailing slash, and nul // Allocate enough stack space for the full path to a folder, trailing slash, and nul
boolean prepend_is_empty = (prepend[0] == '\0'); boolean prepend_is_empty = (prepend[0] == '\0');
int len = (prepend_is_empty ? 1 : strlen(prepend)) + strlen(lfilename) + 1 + 1; int len = (prepend_is_empty ? 1 : strlen(prepend)) + strlen(lfilename) + 1 + 1;
char path[len]; char path[len];
// Append the FOLDERNAME12/ to the passed string. // Append the FOLDERNAME12/ to the passed string.
// It contains the full path to the "parent" argument. // It contains the full path to the "parent" argument.
// We now have the full path to the item in this folder. // We now have the full path to the item in this folder.
strcpy(path, prepend_is_empty ? "/" : prepend); // root slash if prepend is empty strcpy(path, prepend_is_empty ? "/" : prepend); // root slash if prepend is empty
strcat(path, lfilename); // FILENAME_LENGTH-1 characters maximum strcat(path, lfilename); // FILENAME_LENGTH-1 characters maximum
strcat(path, "/"); // 1 character strcat(path, "/"); // 1 character
// Serial.print(path); // Serial.print(path);
// Get a new directory object using the full path // Get a new directory object using the full path
// and dive recursively into it. // and dive recursively into it.
SdFile dir; SdFile dir;
...@@ -90,19 +80,14 @@ void CardReader::lsDive(const char *prepend, SdFile parent, const char * const m ...@@ -90,19 +80,14 @@ void CardReader::lsDive(const char *prepend, SdFile parent, const char * const m
} }
lsDive(path, dir); lsDive(path, dir);
// close() is done automatically by destructor of SdFile // close() is done automatically by destructor of SdFile
} } else {
else {
char pn0 = p.name[0]; char pn0 = p.name[0];
if (pn0 == DIR_NAME_FREE) break; if (pn0 == DIR_NAME_FREE) break;
if (pn0 == DIR_NAME_DELETED || pn0 == '.') continue; if (pn0 == DIR_NAME_DELETED || pn0 == '.') continue;
if (longFilename[0] == '.') continue; if (longFilename[0] == '.') continue;
if (!DIR_IS_FILE_OR_SUBDIR(&p)) continue; if (!DIR_IS_FILE_OR_SUBDIR(&p)) continue;
filenameIsDir = DIR_IS_SUBDIR(&p); filenameIsDir = DIR_IS_SUBDIR(&p);
if (!filenameIsDir && (p.name[8] != 'G' || p.name[9] == '~')) continue; if (!filenameIsDir && (p.name[8] != 'G' || p.name[9] == '~')) continue;
switch (lsAction) { switch (lsAction) {
case LS_Count: case LS_Count:
nrFiles++; nrFiles++;
...@@ -116,8 +101,7 @@ void CardReader::lsDive(const char *prepend, SdFile parent, const char * const m ...@@ -116,8 +101,7 @@ void CardReader::lsDive(const char *prepend, SdFile parent, const char * const m
createFilename(filename, p); createFilename(filename, p);
if (match != NULL) { if (match != NULL) {
if (strcasecmp(match, filename) == 0) return; if (strcasecmp(match, filename) == 0) return;
} } else if (cnt == nrFiles) return;
else if (cnt == nrFiles) return;
cnt++; cnt++;
break; break;
} }
...@@ -133,47 +117,33 @@ void CardReader::ls() { ...@@ -133,47 +117,33 @@ void CardReader::ls() {
#if ENABLED(LONG_FILENAME_HOST_SUPPORT) #if ENABLED(LONG_FILENAME_HOST_SUPPORT)
/** /**
* Get a long pretty path based on a DOS 8.3 path * Get a long pretty path based on a DOS 8.3 path
*/ */
void CardReader::printLongPath(char *path) { void CardReader::printLongPath(char* path) {
lsAction = LS_GetFilename; lsAction = LS_GetFilename;
int i, pathLen = strlen(path); int i, pathLen = strlen(path);
// ECHO_M("Full Path: "); ECHO_EV(path); // ECHO_M("Full Path: "); ECHO_EV(path);
// Zero out slashes to make segments // Zero out slashes to make segments
for (i = 0; i < pathLen; i++) if (path[i] == '/') path[i] = '\0'; for (i = 0; i < pathLen; i++) if (path[i] == '/') path[i] = '\0';
SdFile diveDir = root; // start from the root for segment 1 SdFile diveDir = root; // start from the root for segment 1
for (i = 0; i < pathLen;) { for (i = 0; i < pathLen;) {
if (path[i] == '\0') i++; // move past a single nul if (path[i] == '\0') i++; // move past a single nul
char* segment = &path[i]; // The segment after most slashes
char *segment = &path[i]; // The segment after most slashes
// If a segment is empty (extra-slash) then exit // If a segment is empty (extra-slash) then exit
if (!*segment) break; if (!*segment) break;
// Go to the next segment // Go to the next segment
while (path[++i]) { } while (path[++i]) { }
// ECHO_M("Looking for segment: "); ECHO_EV(segment); // ECHO_M("Looking for segment: "); ECHO_EV(segment);
// Find the item, setting the long filename // Find the item, setting the long filename
diveDir.rewind(); diveDir.rewind();
lsDive("", diveDir, segment); lsDive("", diveDir, segment);
// Print /LongNamePart to serial output // Print /LongNamePart to serial output
ECHO_C('/'); ECHO_C('/');
ECHO_V(longFilename[0] ? longFilename : "???"); ECHO_V(longFilename[0] ? longFilename : "???");
// If the filename was printed then that's it // If the filename was printed then that's it
if (!filenameIsDir) break; if (!filenameIsDir) break;
// ECHO_M("Opening dir: "); ECHO_EV(segment); // ECHO_M("Opening dir: "); ECHO_EV(segment);
// Open the sub-item as the new dive parent // Open the sub-item as the new dive parent
SdFile dir; SdFile dir;
if (!dir.open(diveDir, segment, O_READ)) { if (!dir.open(diveDir, segment, O_READ)) {
...@@ -181,43 +151,35 @@ void CardReader::ls() { ...@@ -181,43 +151,35 @@ void CardReader::ls() {
ECHO_SMV(DB, MSG_SD_CANT_OPEN_SUBDIR, segment); ECHO_SMV(DB, MSG_SD_CANT_OPEN_SUBDIR, segment);
break; break;
} }
diveDir.close(); diveDir.close();
diveDir = dir; diveDir = dir;
} // while i<pathLen } // while i<pathLen
ECHO_E; ECHO_E;
} }
#endif // LONG_FILENAME_HOST_SUPPORT #endif // LONG_FILENAME_HOST_SUPPORT
void CardReader::initsd() { void CardReader::initsd() {
cardOK = false; cardOK = false;
if (root.isOpen()) root.close(); if (root.isOpen()) root.close();
#if ENABLED(SDEXTRASLOW)
#if ENABLED(SDEXTRASLOW)
#define SPI_SPEED SPI_QUARTER_SPEED #define SPI_SPEED SPI_QUARTER_SPEED
#elif ENABLED(SDSLOW) #elif ENABLED(SDSLOW)
#define SPI_SPEED SPI_HALF_SPEED #define SPI_SPEED SPI_HALF_SPEED
#else #else
#define SPI_SPEED SPI_FULL_SPEED #define SPI_SPEED SPI_FULL_SPEED
#endif #endif
if (!card.init(SPI_SPEED, SDSS)
if (!card.init(SPI_SPEED,SDSS) #if defined(LCD_SDSS) && (LCD_SDSS != SDSS)
#if defined(LCD_SDSS) && (LCD_SDSS != SDSS)
&& !card.init(SPI_SPEED, LCD_SDSS) && !card.init(SPI_SPEED, LCD_SDSS)
#endif #endif
) { ) {
ECHO_LM(DB, MSG_SD_INIT_FAIL); ECHO_LM(DB, MSG_SD_INIT_FAIL);
} } else if (!volume.init(&card)) {
else if (!volume.init(&card)) {
ECHO_LM(ER, MSG_SD_VOL_INIT_FAIL); ECHO_LM(ER, MSG_SD_VOL_INIT_FAIL);
} } else if (!root.openRoot(&volume)) {
else if (!root.openRoot(&volume)) {
ECHO_LM(ER, MSG_SD_OPENROOT_FAIL); ECHO_LM(ER, MSG_SD_OPENROOT_FAIL);
} } else {
else {
cardOK = true; cardOK = true;
ECHO_LM(DB, MSG_SD_CARD_OK); ECHO_LM(DB, MSG_SD_CARD_OK);
} }
...@@ -250,9 +212,8 @@ void CardReader::release() { ...@@ -250,9 +212,8 @@ void CardReader::release() {
} }
void CardReader::startFileprint() { void CardReader::startFileprint() {
if (cardOK) { if (cardOK)
sdprinting = true; sdprinting = true;
}
} }
void CardReader::pauseSDPrint() { void CardReader::pauseSDPrint() {
...@@ -264,12 +225,12 @@ void CardReader::openLogFile(char* name) { ...@@ -264,12 +225,12 @@ void CardReader::openLogFile(char* name) {
openFile(name, false); openFile(name, false);
} }
void CardReader::getAbsFilename(char *t) { void CardReader::getAbsFilename(char* t) {
uint8_t cnt = 0; uint8_t cnt = 0;
*t = '/'; t++; cnt++; *t = '/'; t++; cnt++;
for (uint8_t i = 0; i < workDirDepth; i++) { for (uint8_t i = 0; i < workDirDepth; i++) {
workDirParents[i].getFilename(t); //SDBaseFile.getfilename! workDirParents[i].getFilename(t); //SDBaseFile.getfilename!
while(*t && cnt < MAXPATHNAMELENGTH) { t++; cnt++; } //crawl counter forward. while (*t && cnt < MAXPATHNAMELENGTH) { t++; cnt++; } //crawl counter forward.
} }
if (cnt < MAXPATHNAMELENGTH - FILENAME_LENGTH) if (cnt < MAXPATHNAMELENGTH - FILENAME_LENGTH)
file.getFilename(t); file.getFilename(t);
...@@ -297,23 +258,19 @@ void CardReader::openFile(char* name, bool read, bool replace_current/*=true*/, ...@@ -297,23 +258,19 @@ void CardReader::openFile(char* name, bool read, bool replace_current/*=true*/,
ECHO_EMV("\" pos", sdpos); ECHO_EMV("\" pos", sdpos);
filespos[file_subcall_ctr] = sdpos; filespos[file_subcall_ctr] = sdpos;
file_subcall_ctr++; file_subcall_ctr++;
} } else {
else {
ECHO_LMV(DB, "Now doing file: ", name); ECHO_LMV(DB, "Now doing file: ", name);
} }
file.close(); file.close();
} } else { // opening fresh file
else { // opening fresh file
file_subcall_ctr = 0; // resetting procedure depth in case user cancels print while in procedure file_subcall_ctr = 0; // resetting procedure depth in case user cancels print while in procedure
ECHO_LMV(DB, "Now fresh file: ", name); ECHO_LMV(DB, "Now fresh file: ", name);
} }
sdprinting = false; sdprinting = false;
SdFile myDir; SdFile myDir;
curDir = &root; curDir = &root;
char *fname = name; char* fname = name;
char* dirname_start, *dirname_end;
char *dirname_start, *dirname_end;
if (name[0] == '/') { if (name[0] == '/') {
dirname_start = &name[1]; dirname_start = &name[1];
while (dirname_start > 0) { while (dirname_start > 0) {
...@@ -327,26 +284,20 @@ void CardReader::openFile(char* name, bool read, bool replace_current/*=true*/, ...@@ -327,26 +284,20 @@ void CardReader::openFile(char* name, bool read, bool replace_current/*=true*/,
ECHO_SMV(ER, MSG_SD_OPEN_FILE_FAIL, subdirname); ECHO_SMV(ER, MSG_SD_OPEN_FILE_FAIL, subdirname);
ECHO_EM("."); ECHO_EM(".");
return; return;
} } else {
else {
//ECHO_EM("dive ok"); //ECHO_EM("dive ok");
} }
curDir = &myDir; curDir = &myDir;
dirname_start = dirname_end + 1; dirname_start = dirname_end + 1;
} } else { // the remainder after all /fsa/fdsa/ is the filename
else { // the remainder after all /fsa/fdsa/ is the filename
fname = dirname_start; fname = dirname_start;
//ECHO_EM("remainder"); //ECHO_EM("remainder");
//ECHO_EV(fname); //ECHO_EV(fname);
break; break;
} }
} }
} } else //relative path
else { //relative path
curDir = &workDir; curDir = &workDir;
}
if (read) { if (read) {
if (file.open(curDir, fname, O_READ)) { if (file.open(curDir, fname, O_READ)) {
filesize = file.fileSize(); filesize = file.fileSize();
...@@ -357,36 +308,30 @@ void CardReader::openFile(char* name, bool read, bool replace_current/*=true*/, ...@@ -357,36 +308,30 @@ void CardReader::openFile(char* name, bool read, bool replace_current/*=true*/,
ECHO_EM(MSG_SD_FILE_SELECTED); ECHO_EM(MSG_SD_FILE_SELECTED);
getfilename(0, fname); getfilename(0, fname);
if(lcd_status) lcd_setstatus(longFilename[0] ? longFilename : fname); if(lcd_status) lcd_setstatus(longFilename[0] ? longFilename : fname);
} } else {
else {
ECHO_MV(MSG_SD_OPEN_FILE_FAIL, fname); ECHO_MV(MSG_SD_OPEN_FILE_FAIL, fname);
ECHO_PGM(".\n"); ECHO_PGM(".\n");
} }
} } else { //write
else { //write
if (!file.open(curDir, fname, O_CREAT | O_APPEND | O_WRITE | O_TRUNC)) { if (!file.open(curDir, fname, O_CREAT | O_APPEND | O_WRITE | O_TRUNC)) {
ECHO_SMV(ER, MSG_SD_OPEN_FILE_FAIL, fname); ECHO_SMV(ER, MSG_SD_OPEN_FILE_FAIL, fname);
ECHO_EM("."); ECHO_EM(".");
} } else {
else {
saving = true; saving = true;
ECHO_LMV(DB, MSG_SD_WRITE_TO_FILE, name); ECHO_LMV(DB, MSG_SD_WRITE_TO_FILE, name);
if(lcd_status) lcd_setstatus(fname); if (lcd_status) lcd_setstatus(fname);
} }
} }
} }
void CardReader::removeFile(char* name) { void CardReader::removeFile(char* name) {
if (!cardOK) return; if (!cardOK) return;
file.close(); file.close();
sdprinting = false; sdprinting = false;
SdFile myDir; SdFile myDir;
curDir = &root; curDir = &root;
char *fname = name; char* fname = name;
char* dirname_start, *dirname_end;
char *dirname_start, *dirname_end;
if (name[0] == '/') { if (name[0] == '/') {
dirname_start = strchr(name, '/') + 1; dirname_start = strchr(name, '/') + 1;
while (dirname_start > 0) { while (dirname_start > 0) {
...@@ -404,22 +349,17 @@ void CardReader::removeFile(char* name) { ...@@ -404,22 +349,17 @@ void CardReader::removeFile(char* name) {
curDir = &myDir; curDir = &myDir;
dirname_start = dirname_end + 1; dirname_start = dirname_end + 1;
} } else { // the remainder after all /fsa/fdsa/ is the filename
else { // the remainder after all /fsa/fdsa/ is the filename
fname = dirname_start; fname = dirname_start;
break; break;
} }
} }
} } else // relative path
else { // relative path
curDir = &workDir; curDir = &workDir;
}
if (file.remove(curDir, fname)) { if (file.remove(curDir, fname)) {
ECHO_EMV(MSG_SD_FILE_DELETED, fname); ECHO_EMV(MSG_SD_FILE_DELETED, fname);
sdpos = 0; sdpos = 0;
} } else {
else {
ECHO_MV(MSG_SD_FILE_DELETION_ERR, fname); ECHO_MV(MSG_SD_FILE_DELETION_ERR, fname);
ECHO_C('.'); ECHO_C('.');
} }
...@@ -429,17 +369,14 @@ void CardReader::getStatus() { ...@@ -429,17 +369,14 @@ void CardReader::getStatus() {
if (cardOK) { if (cardOK) {
ECHO_MV(MSG_SD_PRINTING_BYTE, sdpos); ECHO_MV(MSG_SD_PRINTING_BYTE, sdpos);
ECHO_EMV(MSG_SD_SLASH, filesize); ECHO_EMV(MSG_SD_SLASH, filesize);
} } else
else {
ECHO_EM(MSG_SD_NOT_PRINTING); ECHO_EM(MSG_SD_NOT_PRINTING);
}
} }
void CardReader::write_command(char *buf) { void CardReader::write_command(char* buf) {
char* begin = buf; char* begin = buf;
char* npos = 0; char* npos = 0;
char* end = buf + strlen(buf) - 1; char* end = buf + strlen(buf) - 1;
file.writeError = false; file.writeError = false;
if ((npos = strchr(buf, 'N')) != NULL) { if ((npos = strchr(buf, 'N')) != NULL) {
begin = strchr(npos, ' ') + 1; begin = strchr(npos, ' ') + 1;
...@@ -457,22 +394,16 @@ void CardReader::write_command(char *buf) { ...@@ -457,22 +394,16 @@ void CardReader::write_command(char *buf) {
void CardReader::checkautostart(bool force) { void CardReader::checkautostart(bool force) {
if (!force && (!autostart_stilltocheck || next_autostart_ms >= millis())) if (!force && (!autostart_stilltocheck || next_autostart_ms >= millis()))
return; return;
autostart_stilltocheck = false; autostart_stilltocheck = false;
if (!cardOK) { if (!cardOK) {
initsd(); initsd();
if (!cardOK) return; // fail if (!cardOK) return; // fail
} }
char autoname[10]; char autoname[10];
sprintf_P(autoname, PSTR("auto%i.g"), autostart_index); sprintf_P(autoname, PSTR("auto%i.g"), autostart_index);
for (int8_t i = 0; i < (int8_t)strlen(autoname); i++) autoname[i] = tolower(autoname[i]); for (int8_t i = 0; i < (int8_t)strlen(autoname); i++) autoname[i] = tolower(autoname[i]);
dir_t p; dir_t p;
root.rewind(); root.rewind();
bool found = false; bool found = false;
while (root.readDir(p, NULL) > 0) { while (root.readDir(p, NULL) > 0) {
for (int8_t i = 0; i < (int8_t)strlen((char*)p.name); i++) p.name[i] = tolower(p.name[i]); for (int8_t i = 0; i < (int8_t)strlen((char*)p.name); i++) p.name[i] = tolower(p.name[i]);
...@@ -494,7 +425,6 @@ void CardReader::closeFile(bool store_location) { ...@@ -494,7 +425,6 @@ void CardReader::closeFile(bool store_location) {
file.sync(); file.sync();
file.close(); file.close();
saving = logging = false; saving = logging = false;
if (store_location) { if (store_location) {
//future: store printer state, filename and position for continuing a stopped print //future: store printer state, filename and position for continuing a stopped print
// so one can unplug the printer and continue printing the next day. // so one can unplug the printer and continue printing the next day.
...@@ -508,7 +438,7 @@ void CardReader::closeFile(bool store_location) { ...@@ -508,7 +438,7 @@ void CardReader::closeFile(bool store_location) {
* *
*/ */
void CardReader::parseKeyLine(char *key, char *value, int &len_k, int &len_v) { void CardReader::parseKeyLine(char* key, char* value, int &len_k, int &len_v) {
if (!cardOK || !isFileOpen()) { if (!cardOK || !isFileOpen()) {
key[0] = value[0] = '\0'; key[0] = value[0] = '\0';
len_k = len_v = 0; len_k = len_v = 0;
...@@ -567,7 +497,7 @@ void CardReader::parseKeyLine(char *key, char *value, int &len_k, int &len_v) { ...@@ -567,7 +497,7 @@ void CardReader::parseKeyLine(char *key, char *value, int &len_k, int &len_v) {
} }
} }
void CardReader::unparseKeyLine(const char *key, char *value) { void CardReader::unparseKeyLine(const char* key, char* value) {
if (!cardOK || !isFileOpen()) return; if (!cardOK || !isFileOpen()) return;
file.writeError = false; file.writeError = false;
file.write(key); file.write(key);
...@@ -601,7 +531,7 @@ void CardReader::unparseKeyLine(const char *key, char *value) { ...@@ -601,7 +531,7 @@ void CardReader::unparseKeyLine(const char *key, char *value) {
/** /**
* Get the name of a file in the current directory by index * Get the name of a file in the current directory by index
*/ */
void CardReader::getfilename(uint16_t nr, const char * const match/*=NULL*/) { void CardReader::getfilename(uint16_t nr, const char* const match/*=NULL*/) {
curDir = &workDir; curDir = &workDir;
lsAction = LS_GetFilename; lsAction = LS_GetFilename;
nrFiles = nr; nrFiles = nr;
...@@ -618,16 +548,13 @@ uint16_t CardReader::getnrfilenames() { ...@@ -618,16 +548,13 @@ uint16_t CardReader::getnrfilenames() {
return nrFiles; return nrFiles;
} }
void CardReader::chdir(const char * relpath) { void CardReader::chdir(const char* relpath) {
SdFile newfile; SdFile newfile;
SdFile *parent = &root; SdFile* parent = &root;
if (workDir.isOpen()) parent = &workDir; if (workDir.isOpen()) parent = &workDir;
if (!newfile.open(*parent, relpath, O_READ)) { if (!newfile.open(*parent, relpath, O_READ)) {
ECHO_LMV(DB, MSG_SD_CANT_ENTER_SUBDIR, relpath); ECHO_LMV(DB, MSG_SD_CANT_ENTER_SUBDIR, relpath);
} } else {
else {
if (workDirDepth < MAX_DIR_DEPTH) { if (workDirDepth < MAX_DIR_DEPTH) {
++workDirDepth; ++workDirDepth;
for (int d = workDirDepth; d--;) workDirParents[d + 1] = workDirParents[d]; for (int d = workDirDepth; d--;) workDirParents[d + 1] = workDirParents[d];
...@@ -642,7 +569,7 @@ void CardReader::updir() { ...@@ -642,7 +569,7 @@ void CardReader::updir() {
--workDirDepth; --workDirDepth;
workDir = workDirParents[0]; workDir = workDirParents[0];
for (uint16_t d = 0; d < workDirDepth; d++) for (uint16_t d = 0; d < workDirDepth; d++)
workDirParents[d] = workDirParents[d+1]; workDirParents[d] = workDirParents[d + 1];
} }
} }
...@@ -654,8 +581,7 @@ void CardReader::printingHasFinished() { ...@@ -654,8 +581,7 @@ void CardReader::printingHasFinished() {
openFile(filenames[file_subcall_ctr], true, true); openFile(filenames[file_subcall_ctr], true, true);
setIndex(filespos[file_subcall_ctr]); setIndex(filespos[file_subcall_ctr]);
startFileprint(); startFileprint();
} } else {
else {
file.close(); file.close();
sdprinting = false; sdprinting = false;
if (SD_FINISHED_STEPPERRELEASE) { if (SD_FINISHED_STEPPERRELEASE) {
...@@ -665,4 +591,5 @@ void CardReader::printingHasFinished() { ...@@ -665,4 +591,5 @@ void CardReader::printingHasFinished() {
autotempShutdown(); autotempShutdown();
} }
} }
#endif
#endif //SDSUPPORT
...@@ -9,38 +9,38 @@ ...@@ -9,38 +9,38 @@
enum LsAction { LS_SerialPrint, LS_Count, LS_GetFilename }; enum LsAction { LS_SerialPrint, LS_Count, LS_GetFilename };
class CardReader { class CardReader {
public: public:
CardReader(); CardReader();
void initsd(); void initsd();
void write_command(char *buf); void write_command(char* buf);
//files auto[0-9].g on the sd card are performed in a row //files auto[0-9].g on the sd card are performed in a row
//this is to delay autostart and hence the initialisaiton of the sd card to some seconds after the normal init, so the device is available quick after a reset //this is to delay autostart and hence the initialisaiton of the sd card to some seconds after the normal init, so the device is available quick after a reset
void checkautostart(bool x); void checkautostart(bool x);
void openFile(char* name,bool read,bool replace_current=true,bool lcd_status=true); void openFile(char* name, bool read, bool replace_current = true, bool lcd_status = true);
void openLogFile(char* name); void openLogFile(char* name);
void removeFile(char* name); void removeFile(char* name);
void closeFile(bool store_location = false); void closeFile(bool store_location = false);
void parseKeyLine(char *key, char *value, int &len_k, int &len_v); void parseKeyLine(char* key, char* value, int &len_k, int &len_v);
void unparseKeyLine(const char *key, char *value); void unparseKeyLine(const char* key, char* value);
void release(); void release();
void startFileprint(); void startFileprint();
void pauseSDPrint(); void pauseSDPrint();
void getStatus(); void getStatus();
void printingHasFinished(); void printingHasFinished();
#if ENABLED(LONG_FILENAME_HOST_SUPPORT) #if ENABLED(LONG_FILENAME_HOST_SUPPORT)
void printLongPath(char *path); void printLongPath(char* path);
#endif #endif
void getfilename(uint16_t nr, const char* const match=NULL); void getfilename(uint16_t nr, const char* const match = NULL);
uint16_t getnrfilenames(); uint16_t getnrfilenames();
void getAbsFilename(char *t); void getAbsFilename(char* t);
void ls(); void ls();
void chdir(const char * relpath); void chdir(const char* relpath);
void updir(); void updir();
void setroot(bool temporary = false); void setroot(bool temporary = false);
void setlast(); void setlast();
...@@ -53,18 +53,18 @@ public: ...@@ -53,18 +53,18 @@ public:
FORCE_INLINE uint8_t percentDone() { return (isFileOpen() && filesize) ? sdpos / ((filesize + 99) / 100) : 0; } FORCE_INLINE uint8_t percentDone() { return (isFileOpen() && filesize) ? sdpos / ((filesize + 99) / 100) : 0; }
FORCE_INLINE char* getWorkDirName() { workDir.getFilename(filename); return filename; } FORCE_INLINE char* getWorkDirName() { workDir.getFilename(filename); return filename; }
public: public:
bool saving, logging, sdprinting, cardOK, filenameIsDir; bool saving, logging, sdprinting, cardOK, filenameIsDir;
char filename[FILENAME_LENGTH], longFilename[LONG_FILENAME_LENGTH]; char filename[FILENAME_LENGTH], longFilename[LONG_FILENAME_LENGTH];
int autostart_index; int autostart_index;
private: private:
SdFile root, *curDir, workDir, lastDir, workDirParents[MAX_DIR_DEPTH]; SdFile root, *curDir, workDir, lastDir, workDirParents[MAX_DIR_DEPTH];
uint16_t workDirDepth; uint16_t workDirDepth;
Sd2Card card; Sd2Card card;
SdVolume volume; SdVolume volume;
SdFile file; SdFile file;
#define SD_PROCEDURE_DEPTH 1 #define SD_PROCEDURE_DEPTH 1
#define MAXPATHNAMELENGTH (FILENAME_LENGTH*MAX_DIR_DEPTH + MAX_DIR_DEPTH + 1) #define MAXPATHNAMELENGTH (FILENAME_LENGTH*MAX_DIR_DEPTH + MAX_DIR_DEPTH + 1)
uint8_t file_subcall_ctr; uint8_t file_subcall_ctr;
uint32_t filespos[SD_PROCEDURE_DEPTH]; uint32_t filespos[SD_PROCEDURE_DEPTH];
char filenames[SD_PROCEDURE_DEPTH][MAXPATHNAMELENGTH]; char filenames[SD_PROCEDURE_DEPTH][MAXPATHNAMELENGTH];
...@@ -77,7 +77,7 @@ private: ...@@ -77,7 +77,7 @@ private:
LsAction lsAction; //stored for recursion. LsAction lsAction; //stored for recursion.
uint16_t nrFiles; //counter for the files in the current directory and recycled as position counter for getting the nrFiles'th name in the directory. uint16_t nrFiles; //counter for the files in the current directory and recycled as position counter for getting the nrFiles'th name in the directory.
char* diveDirName; char* diveDirName;
void lsDive(const char *prepend, SdFile parent, const char * const match=NULL); void lsDive(const char* prepend, SdFile parent, const char* const match = NULL);
}; };
extern CardReader card; extern CardReader card;
......
...@@ -372,11 +372,6 @@ ...@@ -372,11 +372,6 @@
#endif #endif
#endif #endif
/**
* Servo Leveling
*/
//#define SERVO_LEVELING (ENABLED(SERVO_ENDSTOPS) && ENABLED(DEACTIVATE_SERVOS_AFTER_MOVE))
/** /**
* Sled Options * Sled Options
*/ */
......
...@@ -112,7 +112,7 @@ ...@@ -112,7 +112,7 @@
* *
*/ */
void _EEPROM_writeData(int &pos, uint8_t* value, uint8_t size) { void _EEPROM_writeData(int& pos, uint8_t* value, uint8_t size) {
uint8_t c; uint8_t c;
while(size--) { while(size--) {
eeprom_write_byte((unsigned char*)pos, *value); eeprom_write_byte((unsigned char*)pos, *value);
...@@ -125,7 +125,7 @@ void _EEPROM_writeData(int &pos, uint8_t* value, uint8_t size) { ...@@ -125,7 +125,7 @@ void _EEPROM_writeData(int &pos, uint8_t* value, uint8_t size) {
}; };
} }
void _EEPROM_readData(int &pos, uint8_t* value, uint8_t size) { void _EEPROM_readData(int& pos, uint8_t* value, uint8_t size) {
do { do {
*value = eeprom_read_byte((unsigned char*)pos); *value = eeprom_read_byte((unsigned char*)pos);
pos++; pos++;
......
...@@ -7,42 +7,42 @@ void Config_ResetDefault(); ...@@ -7,42 +7,42 @@ void Config_ResetDefault();
void ConfigSD_ResetDefault(); void ConfigSD_ResetDefault();
#if DISABLED(DISABLE_M503) #if DISABLED(DISABLE_M503)
void Config_PrintSettings(bool forReplay = false); void Config_PrintSettings(bool forReplay = false);
void ConfigSD_PrintSettings(bool forReplay = false); void ConfigSD_PrintSettings(bool forReplay = false);
#else #else
FORCE_INLINE void Config_PrintSettings(bool forReplay=false) {} FORCE_INLINE void Config_PrintSettings(bool forReplay = false) {}
FORCE_INLINE void ConfigSD_PrintSettings(bool forReplay = false) {} FORCE_INLINE void ConfigSD_PrintSettings(bool forReplay = false) {}
#endif #endif
#if ENABLED(EEPROM_SETTINGS) #if ENABLED(EEPROM_SETTINGS)
void Config_StoreSettings(); void Config_StoreSettings();
void Config_RetrieveSettings(); void Config_RetrieveSettings();
#else #else
FORCE_INLINE void Config_StoreSettings() {} FORCE_INLINE void Config_StoreSettings() {}
FORCE_INLINE void Config_RetrieveSettings() { Config_ResetDefault(); Config_PrintSettings(); } FORCE_INLINE void Config_RetrieveSettings() { Config_ResetDefault(); Config_PrintSettings(); }
#endif #endif
#if ENABLED(SDSUPPORT) && ENABLED(SD_SETTINGS) #if ENABLED(SDSUPPORT) && ENABLED(SD_SETTINGS)
static const char *cfgSD_KEY[] = { //Keep this in lexicographical order for better search performance(O(Nlog2(N)) insted of O(N*N)) (if you don't keep this sorted, the algorithm for find the key index won't work, keep attention.) static const char *cfgSD_KEY[] = { //Keep this in lexicographical order for better search performance(O(Nlog2(N)) insted of O(N*N)) (if you don't keep this sorted, the algorithm for find the key index won't work, keep attention.)
#if HAS(POWER_CONSUMPTION_SENSOR) #if HAS(POWER_CONSUMPTION_SENSOR)
"PWR", "PWR",
#endif #endif
"TME", "TME",
}; };
enum cfgSD_ENUM { //This need to be in the same order as cfgSD_KEY enum cfgSD_ENUM { //This need to be in the same order as cfgSD_KEY
#if HAS(POWER_CONSUMPTION_SENSOR) #if HAS(POWER_CONSUMPTION_SENSOR)
SD_CFG_PWR, SD_CFG_PWR,
#endif #endif
SD_CFG_TME, SD_CFG_TME,
SD_CFG_END //Leave this always as the last SD_CFG_END //Leave this always as the last
}; };
void ConfigSD_StoreSettings(); void ConfigSD_StoreSettings();
void ConfigSD_RetrieveSettings(bool addValue = false); void ConfigSD_RetrieveSettings(bool addValue = false);
int ConfigSD_KeyIndex(char *key); int ConfigSD_KeyIndex(char *key);
#else #else
FORCE_INLINE void ConfigSD_RetrieveSettings() { ConfigSD_ResetDefault(); } FORCE_INLINE void ConfigSD_RetrieveSettings() { ConfigSD_ResetDefault(); }
#endif #endif
#endif //CONFIGURATION_STORE_H #endif //CONFIGURATION_STORE_H
#include "base.h" #include "base.h"
#if ENABLED(DIGIPOT_I2C) #if ENABLED(DIGIPOT_I2C)
...@@ -10,7 +9,7 @@ ...@@ -10,7 +9,7 @@
#include "digipot_mcp4451.h" #include "digipot_mcp4451.h"
static byte current_to_wiper(float current) { static byte current_to_wiper(float current) {
return byte(ceil(float((DIGIPOT_I2C_FACTOR*current)))); return byte(ceil(float((DIGIPOT_I2C_FACTOR * current))));
} }
static void i2c_send(byte addr, byte a, byte b) { static void i2c_send(byte addr, byte a, byte b) {
...@@ -22,7 +21,7 @@ static void i2c_send(byte addr, byte a, byte b) { ...@@ -22,7 +21,7 @@ static void i2c_send(byte addr, byte a, byte b) {
// This is for the MCP4451 I2C based digipot // This is for the MCP4451 I2C based digipot
void digipot_i2c_set_current(int channel, float current) { void digipot_i2c_set_current(int channel, float current) {
current = min( (float) max( current, 0.0f ), DIGIPOT_I2C_MAX_CURRENT); current = min((float) max(current, 0.0f), DIGIPOT_I2C_MAX_CURRENT);
// these addresses are specific to Azteeg X3 Pro, can be set to others, // these addresses are specific to Azteeg X3 Pro, can be set to others,
// In this case first digipot is at address A0=0, A1= 0, second one is at A0=0, A1= 1 // In this case first digipot is at address A0=0, A1= 0, second one is at A0=0, A1= 1
byte addr = 0x2C; // channel 0-3 byte addr = 0x2C; // channel 0-3
...@@ -30,11 +29,9 @@ void digipot_i2c_set_current(int channel, float current) { ...@@ -30,11 +29,9 @@ void digipot_i2c_set_current(int channel, float current) {
addr = 0x2E; // channel 4-7 addr = 0x2E; // channel 4-7
channel -= 4; channel -= 4;
} }
// Initial setup // Initial setup
i2c_send(addr, 0x40, 0xff); i2c_send(addr, 0x40, 0xff);
i2c_send(addr, 0xA0, 0xff); i2c_send(addr, 0xA0, 0xff);
// Set actual wiper value // Set actual wiper value
byte addresses[4] = { 0x00, 0x10, 0x60, 0x70 }; byte addresses[4] = { 0x00, 0x10, 0x60, 0x70 };
i2c_send(addr, addresses[channel], current_to_wiper(current)); i2c_send(addr, addresses[channel], current_to_wiper(current));
...@@ -44,9 +41,8 @@ void digipot_i2c_init() { ...@@ -44,9 +41,8 @@ void digipot_i2c_init() {
const float digipot_motor_current[] = DIGIPOT_I2C_MOTOR_CURRENTS; const float digipot_motor_current[] = DIGIPOT_I2C_MOTOR_CURRENTS;
Wire.begin(); Wire.begin();
// setup initial currents as defined in Configuration_adv.h // setup initial currents as defined in Configuration_adv.h
for(int i = 0; i < COUNT(digipot_motor_current); i++) { for (int i = 0; i < COUNT(digipot_motor_current); i++)
digipot_i2c_set_current(i, digipot_motor_current[i]); digipot_i2c_set_current(i, digipot_motor_current[i]);
}
} }
#endif //DIGIPOT_I2C #endif //DIGIPOT_I2C
...@@ -4,31 +4,31 @@ ...@@ -4,31 +4,31 @@
#define START_BMPHIGH #define START_BMPHIGH
#if ENABLED(SHOW_BOOTSCREEN) #if ENABLED(SHOW_BOOTSCREEN)
#if ENABLED(START_BMPHIGH) #if ENABLED(START_BMPHIGH)
#define START_BMPWIDTH 112 #define START_BMPWIDTH 112
#define START_BMPHEIGHT 38 #define START_BMPHEIGHT 38
#define START_BMPBYTEWIDTH 14 #define START_BMPBYTEWIDTH 14
#define START_BMPBYTES 532 // START_BMPWIDTH * START_BMPHEIGHT / 8 #define START_BMPBYTES 532 // START_BMPWIDTH * START_BMPHEIGHT / 8
const unsigned char start_bmp[START_BMPBYTES] PROGMEM = { const unsigned char start_bmp[START_BMPBYTES] PROGMEM = {
0x3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x78,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c,0x70,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe,0x60,0x0,0x0,0x0,0x0,0x30,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x6,0xe0,0x1f,0x7c,0x0,0x0,0x33,0x0,0x0,0x0,0x0,0x1,0x80,0x3,0x87,0xc0,0x3f,0xfe,0x0,0x0,0x33,0x0,0x0,0x0,0x0,0x1,0xc0,0x2,0x83, 0x3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x78,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c,0x70,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe,0x60,0x0,0x0,0x0,0x0,0x30,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x6,0xe0,0x1f,0x7c,0x0,0x0,0x33,0x0,0x0,0x0,0x0,0x1,0x80,0x3,0x87,0xc0,0x3f,0xfe,0x0,0x0,0x33,0x0,0x0,0x0,0x0,0x1,0xc0,0x2,0x83,
0xc0,0x73,0xce,0x0,0x0,0x30,0x0,0x0,0x0,0x0,0x3,0xc0,0x3,0x83,0xc0,0xf3,0xce,0x3c,0xf,0x33,0xf,0x0,0x0,0x0,0x3,0xc0,0x2,0x83,0xc0,0xe3,0x8e,0x7e,0x1f,0xb3,0x1f,0x80,0x0,0x0,0x1f,0xe0,0x0,0x3,0xc0,0xe3,0x8e,0xe7,0x39,0xb3,0x39,0xc0,0x0,0x0,0xff,0xfc,0x3,0x83,0xc0,0xe3,0x8e,0xc3,0x31,0xb3,0x38,0xc0,0x0,0x0,0x3f,0xff,0x2,0x3,0xc0,0xe3,0x8e,0xc3,0x30,0x33,0x38,0xc0,0x0,0x0,0x7,0xf0,0x2,0x3,0xc0,0xe3,0x8e,0xe3,0x30,0x33,0x38,0xc0,0x0,0x1,0x7,0xf0,0x3,0x83,0xc0,0xe3,0x8e,0xfb,0xf0,0x3f,0xf8,0xc0,0x0,0x3,0x83,0xf0,0x0,0x3, 0xc0,0x73,0xce,0x0,0x0,0x30,0x0,0x0,0x0,0x0,0x3,0xc0,0x3,0x83,0xc0,0xf3,0xce,0x3c,0xf,0x33,0xf,0x0,0x0,0x0,0x3,0xc0,0x2,0x83,0xc0,0xe3,0x8e,0x7e,0x1f,0xb3,0x1f,0x80,0x0,0x0,0x1f,0xe0,0x0,0x3,0xc0,0xe3,0x8e,0xe7,0x39,0xb3,0x39,0xc0,0x0,0x0,0xff,0xfc,0x3,0x83,0xc0,0xe3,0x8e,0xc3,0x31,0xb3,0x38,0xc0,0x0,0x0,0x3f,0xff,0x2,0x3,0xc0,0xe3,0x8e,0xc3,0x30,0x33,0x38,0xc0,0x0,0x0,0x7,0xf0,0x2,0x3,0xc0,0xe3,0x8e,0xe3,0x30,0x33,0x38,0xc0,0x0,0x1,0x7,0xf0,0x3,0x83,0xc0,0xe3,0x8e,0xfb,0xf0,0x3f,0xf8,0xc0,0x0,0x3,0x83,0xf0,0x0,0x3,
0xc0,0x63,0x8e,0x7b,0xf0,0x1f,0xf8,0xc0,0x0,0x7,0xc1,0xf8,0x0,0x3,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x9f,0xfe,0x0,0x3,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x80,0x43,0xe0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7f,0xff,0xf8,0xc3,0xf0,0x0,0x0,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x33,0xff,0xff,0xc3,0xf8,0x0,0x0,0x30,0xf0,0x0,0x3,0x0,0x0,0x0,0x19,0xff,0xff,0x83,0xfc,0x0,0x0,0x71,0xe6,0x0,0x3,0x0,0x0,0x0,0xc,0x7f,0xff,0x3,0xfe,0x0,0x0,0x73,0xc6,0x0,0x3,0x0,0x0,0x0,0x6,0x7f,0xff,0x3, 0xc0,0x63,0x8e,0x7b,0xf0,0x1f,0xf8,0xc0,0x0,0x7,0xc1,0xf8,0x0,0x3,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x9f,0xfe,0x0,0x3,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x80,0x43,0xe0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7f,0xff,0xf8,0xc3,0xf0,0x0,0x0,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x33,0xff,0xff,0xc3,0xf8,0x0,0x0,0x30,0xf0,0x0,0x3,0x0,0x0,0x0,0x19,0xff,0xff,0x83,0xfc,0x0,0x0,0x71,0xe6,0x0,0x3,0x0,0x0,0x0,0xc,0x7f,0xff,0x3,0xfe,0x0,0x0,0x73,0xc6,0x0,0x3,0x0,0x0,0x0,0x6,0x7f,0xff,0x3,
0xff,0x0,0x0,0x77,0x80,0x0,0x3,0x0,0x0,0x0,0x3,0x3f,0xfe,0x3,0xff,0x80,0x0,0x7f,0x6,0x7f,0xe3,0xf0,0xf0,0xf0,0x1,0x9f,0xfc,0x3,0xff,0xc0,0x0,0x7e,0x6,0xff,0xf3,0xf9,0xf9,0xf8,0x0,0xcf,0xf8,0x3,0xff,0xe0,0x0,0x7c,0x6,0xe7,0x33,0x9b,0x9b,0x9c,0x0,0x67,0xf0,0x3,0xff,0xf0,0x0,0x7e,0x6,0xe3,0x1b,0x1b,0x1b,0xc,0x0,0x33,0xc0,0x3,0xff,0xf8,0x0,0x7f,0x6,0xe3,0x1b,0x1b,0x3,0xc,0x0,0x19,0x0,0x3,0xff,0xfc,0x0,0x73,0x86,0xe3,0x1b,0x3b,0x3,0x8c,0x0,0xc,0x0,0x3,0xff,0xfe,0x0,0x71,0xc6,0xe3,0x1b,0xf3,0x3,0xef,0x0,0x6,0x0,0x7, 0xff,0x0,0x0,0x77,0x80,0x0,0x3,0x0,0x0,0x0,0x3,0x3f,0xfe,0x3,0xff,0x80,0x0,0x7f,0x6,0x7f,0xe3,0xf0,0xf0,0xf0,0x1,0x9f,0xfc,0x3,0xff,0xc0,0x0,0x7e,0x6,0xff,0xf3,0xf9,0xf9,0xf8,0x0,0xcf,0xf8,0x3,0xff,0xe0,0x0,0x7c,0x6,0xe7,0x33,0x9b,0x9b,0x9c,0x0,0x67,0xf0,0x3,0xff,0xf0,0x0,0x7e,0x6,0xe3,0x1b,0x1b,0x1b,0xc,0x0,0x33,0xc0,0x3,0xff,0xf8,0x0,0x7f,0x6,0xe3,0x1b,0x1b,0x3,0xc,0x0,0x19,0x0,0x3,0xff,0xfc,0x0,0x73,0x86,0xe3,0x1b,0x3b,0x3,0x8c,0x0,0xc,0x0,0x3,0xff,0xfe,0x0,0x71,0xc6,0xe3,0x1b,0xf3,0x3,0xef,0x0,0x6,0x0,0x7,
0xff,0xff,0x0,0x30,0xe6,0x63,0x19,0xe3,0x1,0xef,0x0,0x2,0x0,0x6,0xff,0xff,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe,0xff,0xff,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c,0xff,0xff,0xe0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x78,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0 0xff,0xff,0x0,0x30,0xe6,0x63,0x19,0xe3,0x1,0xef,0x0,0x2,0x0,0x6,0xff,0xff,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe,0xff,0xff,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c,0xff,0xff,0xe0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x78,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0
}; };
#else #else
#define START_BMPWIDTH 56 #define START_BMPWIDTH 56
#define START_BMPHEIGHT 19 #define START_BMPHEIGHT 19
#define START_BMPBYTEWIDTH 7 #define START_BMPBYTEWIDTH 7
#define START_BMPBYTES 133 // START_BMPWIDTH * START_BMPHEIGHT / 8 #define START_BMPBYTES 133 // START_BMPWIDTH * START_BMPHEIGHT / 8
const unsigned char start_bmp[START_BMPBYTES] PROGMEM = { const unsigned char start_bmp[START_BMPBYTES] PROGMEM = {
0x1f,0xff,0xff,0xff,0xff,0xff,0xfc,0x30,0x0,0x0,0x0,0x0,0x0,0x6,0x60,0x0,0x0,0x0,0x0,0x0,0x3,0xc3,0x60,0x5,0x0,0x0,0x8,0x1,0x84,0x90,0x4,0x0,0x0,0x18,0x1,0x84,0x97,0x75,0x70,0x0,0x3c,0x1,0x84,0x95,0x45,0x50,0x0,0x7f,0x1,0x84,0x95,0x45,0x50,0x0,0x1c,0x1, 0x1f,0xff,0xff,0xff,0xff,0xff,0xfc,0x30,0x0,0x0,0x0,0x0,0x0,0x6,0x60,0x0,0x0,0x0,0x0,0x0,0x3,0xc3,0x60,0x5,0x0,0x0,0x8,0x1,0x84,0x90,0x4,0x0,0x0,0x18,0x1,0x84,0x97,0x75,0x70,0x0,0x3c,0x1,0x84,0x95,0x45,0x50,0x0,0x7f,0x1,0x84,0x95,0x45,0x50,0x0,0x1c,0x1,
0x84,0x97,0xc5,0x50,0x1,0x8e,0x1,0x80,0x0,0x0,0x0,0x0,0xff,0x81,0xc0,0x0,0x0,0x10,0x0,0x5f,0xf9,0xe0,0x2,0xd0,0x10,0x0,0x27,0xf1,0xf0,0x3,0x80,0x10,0x0,0x17,0xf1,0xf8,0x3,0x17,0xde,0xee,0xb,0xe1,0xfc,0x3,0x15,0x52,0x8a,0x5,0x81,0xfe,0x3,0x95,0x52,0x8a,0x2,0x1, 0x84,0x97,0xc5,0x50,0x1,0x8e,0x1,0x80,0x0,0x0,0x0,0x0,0xff,0x81,0xc0,0x0,0x0,0x10,0x0,0x5f,0xf9,0xe0,0x2,0xd0,0x10,0x0,0x27,0xf1,0xf0,0x3,0x80,0x10,0x0,0x17,0xf1,0xf8,0x3,0x17,0xde,0xee,0xb,0xe1,0xfc,0x3,0x15,0x52,0x8a,0x5,0x81,0xfe,0x3,0x95,0x52,0x8a,0x2,0x1,
0xff,0x2,0xd5,0x5e,0x8f,0x1,0x1,0xff,0x80,0x0,0x0,0x0,0x0,0x3,0xff,0xff,0xff,0xff,0xff,0xff,0xfe 0xff,0x2,0xd5,0x5e,0x8f,0x1,0x1,0xff,0x80,0x0,0x0,0x0,0x0,0x3,0xff,0xff,0xff,0xff,0xff,0xff,0xfe
}; };
#endif #endif
#endif #endif
// Here comes a compile-time operation to match the extruder symbols // Here comes a compile-time operation to match the extruder symbols
...@@ -38,153 +38,153 @@ ...@@ -38,153 +38,153 @@
// be displayed. // be displayed.
#if HOTENDS == 1 #if HOTENDS == 1
#define STATUS_SCREENWIDTH 115 //Width in pixels #define STATUS_SCREENWIDTH 115 //Width in pixels
#define STATUS_SCREENHEIGHT 19 //Height in pixels #define STATUS_SCREENHEIGHT 19 //Height in pixels
#define STATUS_SCREENBYTEWIDTH 15 //Width in bytes #define STATUS_SCREENBYTEWIDTH 15 //Width in bytes
const unsigned char status_screen0_bmp[] PROGMEM = { //AVR-GCC, WinAVR const unsigned char status_screen0_bmp[] PROGMEM = { //AVR-GCC, WinAVR
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x0C,0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x0C, 0x60,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x0E,0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x0E, 0x20,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4F,0x0F,0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x0F, 0x20,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5F,0x0F,0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x0F, 0xA0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5E,0x07,0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x07, 0xA0,
0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x04,0x00,0x40,0x60,0x20, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x40, 0x60, 0x20,
0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x82,0x00,0x40,0xF0,0x20, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x00, 0x40, 0xF0, 0x20,
0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x82,0x00,0x40,0xF0,0x20, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x00, 0x40, 0xF0, 0x20,
0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x04,0x00,0x40,0x60,0x20, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x40, 0x60, 0x20,
0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x08,0x00,0x5E,0x07,0xA0, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x08, 0x00, 0x5E, 0x07, 0xA0,
0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x10,0x00,0x5F,0x0F,0xA0, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x10, 0x00, 0x5F, 0x0F, 0xA0,
0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x10,0x00,0x4F,0x0F,0x20, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x10, 0x00, 0x4F, 0x0F, 0x20,
0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x08,0x00,0x47,0x0E,0x20, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x08, 0x00, 0x47, 0x0E, 0x20,
0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x04,0x00,0x63,0x0C,0x60, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x63, 0x0C, 0x60,
0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0xE0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0x80,0x7F,0xFF,0xE0, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xE0,
0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0x80,0x00,0x00,0x00 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00
}; };
#define STATUS_SCREENWIDTH 115 //Width in pixels #define STATUS_SCREENWIDTH 115 //Width in pixels
#define STATUS_SCREENHEIGHT 19 //Height in pixels #define STATUS_SCREENHEIGHT 19 //Height in pixels
#define STATUS_SCREENBYTEWIDTH 15 //Width in bytes #define STATUS_SCREENBYTEWIDTH 15 //Width in bytes
const unsigned char status_screen1_bmp[] PROGMEM = { //AVR-GCC, WinAVR const unsigned char status_screen1_bmp[] PROGMEM = { //AVR-GCC, WinAVR
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0xF8,0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xF8, 0x60,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0xF8,0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xF8, 0x20,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xF0,0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xF0, 0x20,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x60,0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, 0x20,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x01,0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x01, 0xA0,
0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x04,0x00,0x5C,0x63,0xA0, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x5C, 0x63, 0xA0,
0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x82,0x00,0x5E,0xF7,0xA0, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x00, 0x5E, 0xF7, 0xA0,
0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x82,0x00,0x5E,0xF7,0xA0, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x00, 0x5E, 0xF7, 0xA0,
0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x04,0x00,0x5C,0x63,0xA0, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x5C, 0x63, 0xA0,
0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x08,0x00,0x58,0x01,0xA0, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x08, 0x00, 0x58, 0x01, 0xA0,
0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x10,0x00,0x40,0x60,0x20, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x10, 0x00, 0x40, 0x60, 0x20,
0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x10,0x00,0x40,0xF0,0x20, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x10, 0x00, 0x40, 0xF0, 0x20,
0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x08,0x00,0x41,0xF8,0x20, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x08, 0x00, 0x41, 0xF8, 0x20,
0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x04,0x00,0x61,0xF8,0x60, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x61, 0xF8, 0x60,
0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0xE0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0x80,0x7F,0xFF,0xE0, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xE0,
0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0x80,0x00,0x00,0x00 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00
}; };
#elif HOTENDS == 2 #elif HOTENDS == 2
#define STATUS_SCREENWIDTH 115 //Width in pixels #define STATUS_SCREENWIDTH 115 //Width in pixels
#define STATUS_SCREENHEIGHT 19 //Height in pixels #define STATUS_SCREENHEIGHT 19 //Height in pixels
#define STATUS_SCREENBYTEWIDTH 15 //Width in bytes #define STATUS_SCREENBYTEWIDTH 15 //Width in bytes
const unsigned char status_screen0_bmp[] PROGMEM = { //AVR-GCC, WinAVR const unsigned char status_screen0_bmp[] PROGMEM = { //AVR-GCC, WinAVR
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x0C,0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x0C, 0x60,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x0E,0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x0E, 0x20,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4F,0x0F,0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x0F, 0x20,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5F,0x0F,0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x0F, 0xA0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5E,0x07,0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x07, 0xA0,
0x7F,0x80,0x00,0x3F,0xC0,0x00,0x00,0x00,0x00,0x41,0x04,0x00,0x40,0x60,0x20, 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x40, 0x60, 0x20,
0xFB,0xC0,0x00,0x79,0xE0,0x00,0x00,0x00,0x00,0x20,0x82,0x00,0x40,0xF0,0x20, 0xFB, 0xC0, 0x00, 0x79, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x00, 0x40, 0xF0, 0x20,
0xF3,0xC0,0x00,0x76,0xE0,0x00,0x00,0x00,0x00,0x20,0x82,0x00,0x40,0xF0,0x20, 0xF3, 0xC0, 0x00, 0x76, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x00, 0x40, 0xF0, 0x20,
0xEB,0xC0,0x00,0x7E,0xE0,0x00,0x00,0x00,0x00,0x41,0x04,0x00,0x40,0x60,0x20, 0xEB, 0xC0, 0x00, 0x7E, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x40, 0x60, 0x20,
0x7B,0x80,0x00,0x3D,0xC0,0x00,0x00,0x00,0x00,0x82,0x08,0x00,0x5E,0x07,0xA0, 0x7B, 0x80, 0x00, 0x3D, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x82, 0x08, 0x00, 0x5E, 0x07, 0xA0,
0x7B,0x80,0x00,0x3B,0xC0,0x00,0x00,0x00,0x01,0x04,0x10,0x00,0x5F,0x0F,0xA0, 0x7B, 0x80, 0x00, 0x3B, 0xC0, 0x00, 0x00, 0x00, 0x01, 0x04, 0x10, 0x00, 0x5F, 0x0F, 0xA0,
0xFB,0xC0,0x00,0x77,0xE0,0x00,0x00,0x00,0x01,0x04,0x10,0x00,0x4F,0x0F,0x20, 0xFB, 0xC0, 0x00, 0x77, 0xE0, 0x00, 0x00, 0x00, 0x01, 0x04, 0x10, 0x00, 0x4F, 0x0F, 0x20,
0xFB,0xC0,0x00,0x70,0xE0,0x00,0x00,0x00,0x00,0x82,0x08,0x00,0x47,0x0E,0x20, 0xFB, 0xC0, 0x00, 0x70, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x82, 0x08, 0x00, 0x47, 0x0E, 0x20,
0xFF,0xC0,0x00,0x7F,0xE0,0x00,0x00,0x00,0x00,0x41,0x04,0x00,0x63,0x0C,0x60, 0xFF, 0xC0, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x63, 0x0C, 0x60,
0x3F,0x00,0x00,0x1F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0xE0, 0x3F, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
0x1E,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0x80,0x7F,0xFF,0xE0, 0x1E, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xE0,
0x0C,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0x80,0x00,0x00,0x00 0x0C, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00
}; };
#define STATUS_SCREENWIDTH 115 //Width in pixels #define STATUS_SCREENWIDTH 115 //Width in pixels
#define STATUS_SCREENHEIGHT 19 //Height in pixels #define STATUS_SCREENHEIGHT 19 //Height in pixels
#define STATUS_SCREENBYTEWIDTH 15 //Width in bytes #define STATUS_SCREENBYTEWIDTH 15 //Width in bytes
const unsigned char status_screen1_bmp[] PROGMEM = { //AVR-GCC, WinAVR const unsigned char status_screen1_bmp[] PROGMEM = { //AVR-GCC, WinAVR
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0xF8,0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xF8, 0x60,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0xF8,0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xF8, 0x20,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xF0,0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xF0, 0x20,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x60,0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, 0x20,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x01,0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x01, 0xA0,
0x7F,0x80,0x00,0x3F,0xC0,0x00,0x00,0x00,0x00,0x41,0x04,0x00,0x5C,0x63,0xA0, 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x5C, 0x63, 0xA0,
0xFB,0xC0,0x00,0x79,0xE0,0x00,0x00,0x00,0x00,0x20,0x82,0x00,0x5E,0xF7,0xA0, 0xFB, 0xC0, 0x00, 0x79, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x00, 0x5E, 0xF7, 0xA0,
0xF3,0xC0,0x00,0x76,0xE0,0x00,0x00,0x00,0x00,0x20,0x82,0x00,0x5E,0xF7,0xA0, 0xF3, 0xC0, 0x00, 0x76, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x00, 0x5E, 0xF7, 0xA0,
0xEB,0xC0,0x00,0x7E,0xE0,0x00,0x00,0x00,0x00,0x41,0x04,0x00,0x5C,0x63,0xA0, 0xEB, 0xC0, 0x00, 0x7E, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x5C, 0x63, 0xA0,
0x7B,0x80,0x00,0x3D,0xC0,0x00,0x00,0x00,0x00,0x82,0x08,0x00,0x58,0x01,0xA0, 0x7B, 0x80, 0x00, 0x3D, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x82, 0x08, 0x00, 0x58, 0x01, 0xA0,
0x7B,0x80,0x00,0x3B,0xC0,0x00,0x00,0x00,0x01,0x04,0x10,0x00,0x40,0x60,0x20, 0x7B, 0x80, 0x00, 0x3B, 0xC0, 0x00, 0x00, 0x00, 0x01, 0x04, 0x10, 0x00, 0x40, 0x60, 0x20,
0xFB,0xC0,0x00,0x77,0xE0,0x00,0x00,0x00,0x01,0x04,0x10,0x00,0x40,0xF0,0x20, 0xFB, 0xC0, 0x00, 0x77, 0xE0, 0x00, 0x00, 0x00, 0x01, 0x04, 0x10, 0x00, 0x40, 0xF0, 0x20,
0xFB,0xC0,0x00,0x70,0xE0,0x00,0x00,0x00,0x00,0x82,0x08,0x00,0x41,0xF8,0x20, 0xFB, 0xC0, 0x00, 0x70, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x82, 0x08, 0x00, 0x41, 0xF8, 0x20,
0xFF,0xC0,0x00,0x7F,0xE0,0x00,0x00,0x00,0x00,0x41,0x04,0x00,0x61,0xF8,0x60, 0xFF, 0xC0, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x61, 0xF8, 0x60,
0x3F,0x00,0x00,0x1F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0xE0, 0x3F, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
0x1E,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0x80,0x7F,0xFF,0xE0, 0x1E, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xE0,
0x0C,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0x80,0x00,0x00,0x00 0x0C, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00
}; };
#else #else
#define STATUS_SCREENWIDTH 115 //Width in pixels #define STATUS_SCREENWIDTH 115 //Width in pixels
#define STATUS_SCREENHEIGHT 19 //Height in pixels #define STATUS_SCREENHEIGHT 19 //Height in pixels
#define STATUS_SCREENBYTEWIDTH 15 //Width in bytes #define STATUS_SCREENBYTEWIDTH 15 //Width in bytes
const unsigned char status_screen0_bmp[] PROGMEM = { //AVR-GCC, WinAVR const unsigned char status_screen0_bmp[] PROGMEM = { //AVR-GCC, WinAVR
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x0C,0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x0C, 0x60,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x0E,0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x0E, 0x20,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4F,0x0F,0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x0F, 0x20,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5F,0x0F,0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x0F, 0xA0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5E,0x07,0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x07, 0xA0,
0x7F,0x80,0x00,0x3F,0xC0,0x00,0x3F,0xC0,0x00,0x41,0x04,0x00,0x40,0x60,0x20, 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x3F, 0xC0, 0x00, 0x41, 0x04, 0x00, 0x40, 0x60, 0x20,
0xFB,0xC0,0x00,0x79,0xE0,0x00,0x79,0xE0,0x00,0x20,0x82,0x00,0x40,0xF0,0x20, 0xFB, 0xC0, 0x00, 0x79, 0xE0, 0x00, 0x79, 0xE0, 0x00, 0x20, 0x82, 0x00, 0x40, 0xF0, 0x20,
0xF3,0xC0,0x00,0x76,0xE0,0x00,0x76,0xE0,0x00,0x20,0x82,0x00,0x40,0xF0,0x20, 0xF3, 0xC0, 0x00, 0x76, 0xE0, 0x00, 0x76, 0xE0, 0x00, 0x20, 0x82, 0x00, 0x40, 0xF0, 0x20,
0xEB,0xC0,0x00,0x7E,0xE0,0x00,0x7E,0xE0,0x00,0x41,0x04,0x00,0x40,0x60,0x20, 0xEB, 0xC0, 0x00, 0x7E, 0xE0, 0x00, 0x7E, 0xE0, 0x00, 0x41, 0x04, 0x00, 0x40, 0x60, 0x20,
0x7B,0x80,0x00,0x3D,0xC0,0x00,0x39,0xC0,0x00,0x82,0x08,0x00,0x5E,0x07,0xA0, 0x7B, 0x80, 0x00, 0x3D, 0xC0, 0x00, 0x39, 0xC0, 0x00, 0x82, 0x08, 0x00, 0x5E, 0x07, 0xA0,
0x7B,0x80,0x00,0x3B,0xC0,0x00,0x3E,0xC0,0x01,0x04,0x10,0x00,0x5F,0x0F,0xA0, 0x7B, 0x80, 0x00, 0x3B, 0xC0, 0x00, 0x3E, 0xC0, 0x01, 0x04, 0x10, 0x00, 0x5F, 0x0F, 0xA0,
0xFB,0xC0,0x00,0x77,0xE0,0x00,0x76,0xE0,0x01,0x04,0x10,0x00,0x4F,0x0F,0x20, 0xFB, 0xC0, 0x00, 0x77, 0xE0, 0x00, 0x76, 0xE0, 0x01, 0x04, 0x10, 0x00, 0x4F, 0x0F, 0x20,
0xFB,0xC0,0x00,0x70,0xE0,0x00,0x79,0xE0,0x00,0x82,0x08,0x00,0x47,0x0E,0x20, 0xFB, 0xC0, 0x00, 0x70, 0xE0, 0x00, 0x79, 0xE0, 0x00, 0x82, 0x08, 0x00, 0x47, 0x0E, 0x20,
0xFF,0xC0,0x00,0x7F,0xE0,0x00,0x7F,0xE0,0x00,0x41,0x04,0x00,0x63,0x0C,0x60, 0xFF, 0xC0, 0x00, 0x7F, 0xE0, 0x00, 0x7F, 0xE0, 0x00, 0x41, 0x04, 0x00, 0x63, 0x0C, 0x60,
0x3F,0x00,0x00,0x1F,0x80,0x00,0x1F,0x80,0x00,0x00,0x00,0x00,0x70,0x00,0xE0, 0x3F, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
0x1E,0x00,0x00,0x0F,0x00,0x00,0x0F,0x00,0x01,0xFF,0xFF,0x80,0x7F,0xFF,0xE0, 0x1E, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xE0,
0x0C,0x00,0x00,0x06,0x00,0x00,0x06,0x00,0x01,0xFF,0xFF,0x80,0x00,0x00,0x00 0x0C, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00
}; };
#define STATUS_SCREENWIDTH 115 //Width in pixels #define STATUS_SCREENWIDTH 115 //Width in pixels
#define STATUS_SCREENHEIGHT 19 //Height in pixels #define STATUS_SCREENHEIGHT 19 //Height in pixels
#define STATUS_SCREENBYTEWIDTH 15 //Width in bytes #define STATUS_SCREENBYTEWIDTH 15 //Width in bytes
const unsigned char status_screen1_bmp[] PROGMEM = { //AVR-GCC, WinAVR const unsigned char status_screen1_bmp[] PROGMEM = { //AVR-GCC, WinAVR
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0xF8,0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xF8, 0x60,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0xF8,0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xF8, 0x20,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xF0,0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xF0, 0x20,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x60,0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, 0x20,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x01,0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x01, 0xA0,
0x7F,0x80,0x00,0x3F,0xC0,0x00,0x3F,0xC0,0x00,0x41,0x04,0x00,0x5C,0x63,0xA0, 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x3F, 0xC0, 0x00, 0x41, 0x04, 0x00, 0x5C, 0x63, 0xA0,
0xFB,0xC0,0x00,0x79,0xE0,0x00,0x79,0xE0,0x00,0x20,0x82,0x00,0x5E,0xF7,0xA0, 0xFB, 0xC0, 0x00, 0x79, 0xE0, 0x00, 0x79, 0xE0, 0x00, 0x20, 0x82, 0x00, 0x5E, 0xF7, 0xA0,
0xF3,0xC0,0x00,0x76,0xE0,0x00,0x76,0xE0,0x00,0x20,0x82,0x00,0x5E,0xF7,0xA0, 0xF3, 0xC0, 0x00, 0x76, 0xE0, 0x00, 0x76, 0xE0, 0x00, 0x20, 0x82, 0x00, 0x5E, 0xF7, 0xA0,
0xEB,0xC0,0x00,0x7E,0xE0,0x00,0x7E,0xE0,0x00,0x41,0x04,0x00,0x5C,0x63,0xA0, 0xEB, 0xC0, 0x00, 0x7E, 0xE0, 0x00, 0x7E, 0xE0, 0x00, 0x41, 0x04, 0x00, 0x5C, 0x63, 0xA0,
0x7B,0x80,0x00,0x3D,0xC0,0x00,0x39,0xC0,0x00,0x82,0x08,0x00,0x58,0x01,0xA0, 0x7B, 0x80, 0x00, 0x3D, 0xC0, 0x00, 0x39, 0xC0, 0x00, 0x82, 0x08, 0x00, 0x58, 0x01, 0xA0,
0x7B,0x80,0x00,0x3B,0xC0,0x00,0x3E,0xC0,0x01,0x04,0x10,0x00,0x40,0x60,0x20, 0x7B, 0x80, 0x00, 0x3B, 0xC0, 0x00, 0x3E, 0xC0, 0x01, 0x04, 0x10, 0x00, 0x40, 0x60, 0x20,
0xFB,0xC0,0x00,0x77,0xE0,0x00,0x76,0xE0,0x01,0x04,0x10,0x00,0x40,0xF0,0x20, 0xFB, 0xC0, 0x00, 0x77, 0xE0, 0x00, 0x76, 0xE0, 0x01, 0x04, 0x10, 0x00, 0x40, 0xF0, 0x20,
0xFB,0xC0,0x00,0x70,0xE0,0x00,0x79,0xE0,0x00,0x82,0x08,0x00,0x41,0xF8,0x20, 0xFB, 0xC0, 0x00, 0x70, 0xE0, 0x00, 0x79, 0xE0, 0x00, 0x82, 0x08, 0x00, 0x41, 0xF8, 0x20,
0xFF,0xC0,0x00,0x7F,0xE0,0x00,0x7F,0xE0,0x00,0x41,0x04,0x00,0x61,0xF8,0x60, 0xFF, 0xC0, 0x00, 0x7F, 0xE0, 0x00, 0x7F, 0xE0, 0x00, 0x41, 0x04, 0x00, 0x61, 0xF8, 0x60,
0x3F,0x00,0x00,0x1F,0x80,0x00,0x1F,0x80,0x00,0x00,0x00,0x00,0x70,0x00,0xE0, 0x3F, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
0x1E,0x00,0x00,0x0F,0x00,0x00,0x0F,0x00,0x01,0xFF,0xFF,0x80,0x7F,0xFF,0xE0, 0x1E, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xE0,
0x0C,0x00,0x00,0x06,0x00,0x00,0x06,0x00,0x01,0xFF,0xFF,0x80,0x00,0x00,0x00 0x0C, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00
}; };
#endif // Extruders #endif // Extruders
...@@ -9,149 +9,150 @@ ...@@ -9,149 +9,150 @@
X Font ascent = 6 descent=-2 X Font ascent = 6 descent=-2
Max Font ascent = 7 descent=-2 Max Font ascent = 7 descent=-2
*/ */
#include <utility/u8g.h> #include <U8glib.h>
const u8g_fntpgm_uint8_t u8g_font_6x9[2300] U8G_SECTION(".progmem.u8g_font_6x9") = { const u8g_fntpgm_uint8_t u8g_font_6x9[2300] U8G_SECTION(".progmem.u8g_font_6x9") = {
0,6,9,0,254,6,1,137,2,254,32,255,254,7,254,6, 0, 6, 9, 0, 254, 6, 1, 137, 2, 254, 32, 255, 254, 7, 254, 6,
254,0,0,0,6,0,7,1,6,6,6,2,0,128,128,128, 254, 0, 0, 0, 6, 0, 7, 1, 6, 6, 6, 2, 0, 128, 128, 128,
128,0,128,3,3,3,6,1,3,160,160,160,5,7,7,6, 128, 0, 128, 3, 3, 3, 6, 1, 3, 160, 160, 160, 5, 7, 7, 6,
0,255,80,80,248,80,248,80,80,5,9,9,6,0,254,32, 0, 255, 80, 80, 248, 80, 248, 80, 80, 5, 9, 9, 6, 0, 254, 32,
112,168,160,112,40,168,112,32,6,8,8,6,0,255,64,168, 112, 168, 160, 112, 40, 168, 112, 32, 6, 8, 8, 6, 0, 255, 64, 168,
72,16,32,72,84,8,5,7,7,6,0,255,96,144,144,96, 72, 16, 32, 72, 84, 8, 5, 7, 7, 6, 0, 255, 96, 144, 144, 96,
152,144,104,1,3,3,6,2,3,128,128,128,2,7,7,6, 152, 144, 104, 1, 3, 3, 6, 2, 3, 128, 128, 128, 2, 7, 7, 6,
2,255,64,128,128,128,128,128,64,2,7,7,6,2,255,128, 2, 255, 64, 128, 128, 128, 128, 128, 64, 2, 7, 7, 6, 2, 255, 128,
64,64,64,64,64,128,5,5,5,6,0,0,136,80,248,80, 64, 64, 64, 64, 64, 128, 5, 5, 5, 6, 0, 0, 136, 80, 248, 80,
136,5,5,5,6,0,0,32,32,248,32,32,2,4,4,6, 136, 5, 5, 5, 6, 0, 0, 32, 32, 248, 32, 32, 2, 4, 4, 6,
2,254,192,64,64,128,5,1,1,6,0,2,248,2,2,2, 2, 254, 192, 64, 64, 128, 5, 1, 1, 6, 0, 2, 248, 2, 2, 2,
6,2,0,192,192,4,6,6,6,1,0,16,16,32,64,128, 6, 2, 0, 192, 192, 4, 6, 6, 6, 1, 0, 16, 16, 32, 64, 128,
128,4,6,6,6,1,0,96,144,144,144,144,96,3,6,6, 128, 4, 6, 6, 6, 1, 0, 96, 144, 144, 144, 144, 96, 3, 6, 6,
6,1,0,64,192,64,64,64,224,4,6,6,6,1,0,96, 6, 1, 0, 64, 192, 64, 64, 64, 224, 4, 6, 6, 6, 1, 0, 96,
144,16,32,64,240,4,6,6,6,1,0,240,32,96,16,16, 144, 16, 32, 64, 240, 4, 6, 6, 6, 1, 0, 240, 32, 96, 16, 16,
224,5,6,6,6,0,0,16,48,80,144,248,16,4,6,6, 224, 5, 6, 6, 6, 0, 0, 16, 48, 80, 144, 248, 16, 4, 6, 6,
6,1,0,240,128,224,16,16,224,4,6,6,6,1,0,96, 6, 1, 0, 240, 128, 224, 16, 16, 224, 4, 6, 6, 6, 1, 0, 96,
128,224,144,144,96,4,6,6,6,1,0,240,16,16,32,64, 128, 224, 144, 144, 96, 4, 6, 6, 6, 1, 0, 240, 16, 16, 32, 64,
64,4,6,6,6,1,0,96,144,96,144,144,96,4,6,6, 64, 4, 6, 6, 6, 1, 0, 96, 144, 96, 144, 144, 96, 4, 6, 6,
6,1,0,96,144,144,112,16,96,2,5,5,6,2,0,192, 6, 1, 0, 96, 144, 144, 112, 16, 96, 2, 5, 5, 6, 2, 0, 192,
192,0,192,192,2,7,7,6,2,254,192,192,0,192,64,64, 192, 0, 192, 192, 2, 7, 7, 6, 2, 254, 192, 192, 0, 192, 64, 64,
128,5,5,5,6,0,0,24,96,128,96,24,5,3,3,6, 128, 5, 5, 5, 6, 0, 0, 24, 96, 128, 96, 24, 5, 3, 3, 6,
0,1,248,0,248,5,5,5,6,0,0,192,48,8,48,192, 0, 1, 248, 0, 248, 5, 5, 5, 6, 0, 0, 192, 48, 8, 48, 192,
4,7,7,6,1,0,96,144,16,96,64,0,64,5,6,6, 4, 7, 7, 6, 1, 0, 96, 144, 16, 96, 64, 0, 64, 5, 6, 6,
6,0,0,112,144,168,176,128,112,5,6,6,6,0,0,32, 6, 0, 0, 112, 144, 168, 176, 128, 112, 5, 6, 6, 6, 0, 0, 32,
80,136,248,136,136,5,6,6,6,0,0,240,136,240,136,136, 80, 136, 248, 136, 136, 5, 6, 6, 6, 0, 0, 240, 136, 240, 136, 136,
240,4,6,6,6,1,0,96,144,128,128,144,96,4,6,6, 240, 4, 6, 6, 6, 1, 0, 96, 144, 128, 128, 144, 96, 4, 6, 6,
6,1,0,224,144,144,144,144,224,4,6,6,6,1,0,240, 6, 1, 0, 224, 144, 144, 144, 144, 224, 4, 6, 6, 6, 1, 0, 240,
128,224,128,128,240,4,6,6,6,1,0,240,128,224,128,128, 128, 224, 128, 128, 240, 4, 6, 6, 6, 1, 0, 240, 128, 224, 128, 128,
128,4,6,6,6,1,0,96,144,128,176,144,96,4,6,6, 128, 4, 6, 6, 6, 1, 0, 96, 144, 128, 176, 144, 96, 4, 6, 6,
6,1,0,144,144,240,144,144,144,3,6,6,6,1,0,224, 6, 1, 0, 144, 144, 240, 144, 144, 144, 3, 6, 6, 6, 1, 0, 224,
64,64,64,64,224,5,6,6,6,0,0,56,16,16,16,144, 64, 64, 64, 64, 224, 5, 6, 6, 6, 0, 0, 56, 16, 16, 16, 144,
96,4,6,6,6,1,0,144,160,192,160,144,144,4,6,6, 96, 4, 6, 6, 6, 1, 0, 144, 160, 192, 160, 144, 144, 4, 6, 6,
6,1,0,128,128,128,128,128,240,5,6,6,6,0,0,136, 6, 1, 0, 128, 128, 128, 128, 128, 240, 5, 6, 6, 6, 0, 0, 136,
216,168,168,136,136,4,6,6,6,1,0,144,208,176,144,144, 216, 168, 168, 136, 136, 4, 6, 6, 6, 1, 0, 144, 208, 176, 144, 144,
144,5,6,6,6,0,0,112,136,136,136,136,112,4,6,6, 144, 5, 6, 6, 6, 0, 0, 112, 136, 136, 136, 136, 112, 4, 6, 6,
6,1,0,224,144,144,224,128,128,4,7,7,6,1,255,96, 6, 1, 0, 224, 144, 144, 224, 128, 128, 4, 7, 7, 6, 1, 255, 96,
144,144,208,176,96,16,4,6,6,6,1,0,224,144,144,224, 144, 144, 208, 176, 96, 16, 4, 6, 6, 6, 1, 0, 224, 144, 144, 224,
144,144,4,6,6,6,1,0,96,144,64,32,144,96,5,6, 144, 144, 4, 6, 6, 6, 1, 0, 96, 144, 64, 32, 144, 96, 5, 6,
6,6,0,0,248,32,32,32,32,32,4,6,6,6,1,0, 6, 6, 0, 0, 248, 32, 32, 32, 32, 32, 4, 6, 6, 6, 1, 0,
144,144,144,144,144,96,4,6,6,6,1,0,144,144,144,240, 144, 144, 144, 144, 144, 96, 4, 6, 6, 6, 1, 0, 144, 144, 144, 240,
96,96,5,6,6,6,0,0,136,136,168,168,216,136,5,6, 96, 96, 5, 6, 6, 6, 0, 0, 136, 136, 168, 168, 216, 136, 5, 6,
6,6,0,0,136,80,32,32,80,136,5,6,6,6,0,0, 6, 6, 0, 0, 136, 80, 32, 32, 80, 136, 5, 6, 6, 6, 0, 0,
136,136,80,32,32,32,4,6,6,6,1,0,240,16,32,64, 136, 136, 80, 32, 32, 32, 4, 6, 6, 6, 1, 0, 240, 16, 32, 64,
128,240,3,6,6,6,1,0,224,128,128,128,128,224,4,6, 128, 240, 3, 6, 6, 6, 1, 0, 224, 128, 128, 128, 128, 224, 4, 6,
6,6,1,0,128,128,64,32,16,16,3,6,6,6,1,0, 6, 6, 1, 0, 128, 128, 64, 32, 16, 16, 3, 6, 6, 6, 1, 0,
224,32,32,32,32,224,5,3,3,6,0,3,32,80,136,5, 224, 32, 32, 32, 32, 224, 5, 3, 3, 6, 0, 3, 32, 80, 136, 5,
1,1,6,0,254,248,2,2,2,6,2,4,128,64,4,4, 1, 1, 6, 0, 254, 248, 2, 2, 2, 6, 2, 4, 128, 64, 4, 4,
4,6,1,0,112,144,144,112,4,6,6,6,1,0,128,128, 4, 6, 1, 0, 112, 144, 144, 112, 4, 6, 6, 6, 1, 0, 128, 128,
224,144,144,224,4,4,4,6,1,0,112,128,128,112,4,6, 224, 144, 144, 224, 4, 4, 4, 6, 1, 0, 112, 128, 128, 112, 4, 6,
6,6,1,0,16,16,112,144,144,112,4,4,4,6,1,0, 6, 6, 1, 0, 16, 16, 112, 144, 144, 112, 4, 4, 4, 6, 1, 0,
96,176,192,112,4,6,6,6,1,0,32,80,64,224,64,64, 96, 176, 192, 112, 4, 6, 6, 6, 1, 0, 32, 80, 64, 224, 64, 64,
4,6,6,6,1,254,96,144,144,112,16,96,4,6,6,6, 4, 6, 6, 6, 1, 254, 96, 144, 144, 112, 16, 96, 4, 6, 6, 6,
1,0,128,128,224,144,144,144,3,6,6,6,1,0,64,0, 1, 0, 128, 128, 224, 144, 144, 144, 3, 6, 6, 6, 1, 0, 64, 0,
192,64,64,224,3,8,8,6,1,254,32,0,96,32,32,32, 192, 64, 64, 224, 3, 8, 8, 6, 1, 254, 32, 0, 96, 32, 32, 32,
160,64,4,6,6,6,1,0,128,128,160,192,160,144,3,6, 160, 64, 4, 6, 6, 6, 1, 0, 128, 128, 160, 192, 160, 144, 3, 6,
6,6,1,0,192,64,64,64,64,224,5,4,4,6,0,0, 6, 6, 1, 0, 192, 64, 64, 64, 64, 224, 5, 4, 4, 6, 0, 0,
208,168,168,136,4,4,4,6,1,0,224,144,144,144,4,4, 208, 168, 168, 136, 4, 4, 4, 6, 1, 0, 224, 144, 144, 144, 4, 4,
4,6,1,0,96,144,144,96,4,6,6,6,1,254,224,144, 4, 6, 1, 0, 96, 144, 144, 96, 4, 6, 6, 6, 1, 254, 224, 144,
144,224,128,128,4,6,6,6,1,254,112,144,144,112,16,16, 144, 224, 128, 128, 4, 6, 6, 6, 1, 254, 112, 144, 144, 112, 16, 16,
4,4,4,6,1,0,160,208,128,128,4,4,4,6,1,0, 4, 4, 4, 6, 1, 0, 160, 208, 128, 128, 4, 4, 4, 6, 1, 0,
112,192,48,224,4,6,6,6,1,0,64,64,224,64,80,32, 112, 192, 48, 224, 4, 6, 6, 6, 1, 0, 64, 64, 224, 64, 80, 32,
4,4,4,6,1,0,144,144,144,112,4,4,4,6,1,0, 4, 4, 4, 6, 1, 0, 144, 144, 144, 112, 4, 4, 4, 6, 1, 0,
144,144,96,96,5,4,4,6,0,0,136,168,168,80,4,4, 144, 144, 96, 96, 5, 4, 4, 6, 0, 0, 136, 168, 168, 80, 4, 4,
4,6,1,0,144,96,96,144,4,6,6,6,1,254,144,144, 4, 6, 1, 0, 144, 96, 96, 144, 4, 6, 6, 6, 1, 254, 144, 144,
144,112,144,96,4,4,4,6,1,0,240,32,64,240,3,7, 144, 112, 144, 96, 4, 4, 4, 6, 1, 0, 240, 32, 64, 240, 3, 7,
7,6,1,0,32,64,64,128,64,64,32,1,7,7,6,2, 7, 6, 1, 0, 32, 64, 64, 128, 64, 64, 32, 1, 7, 7, 6, 2,
255,128,128,128,128,128,128,128,3,7,7,6,1,0,128,64, 255, 128, 128, 128, 128, 128, 128, 128, 3, 7, 7, 6, 1, 0, 128, 64,
64,32,64,64,128,4,2,2,6,1,3,80,160,255,255,255, 64, 32, 64, 64, 128, 4, 2, 2, 6, 1, 3, 80, 160, 255, 255, 255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0,
0,6,0,7,1,6,6,6,2,0,128,0,128,128,128,128, 0, 6, 0, 7, 1, 6, 6, 6, 2, 0, 128, 0, 128, 128, 128, 128,
4,6,6,6,1,255,32,112,160,160,112,32,5,7,7,6, 4, 6, 6, 6, 1, 255, 32, 112, 160, 160, 112, 32, 5, 7, 7, 6,
0,255,48,72,64,240,64,64,248,5,5,5,6,0,0,168, 0, 255, 48, 72, 64, 240, 64, 64, 248, 5, 5, 5, 6, 0, 0, 168,
80,136,80,168,5,6,6,6,0,0,136,80,248,32,248,32, 80, 136, 80, 168, 5, 6, 6, 6, 0, 0, 136, 80, 248, 32, 248, 32,
1,7,7,6,2,255,128,128,128,0,128,128,128,4,7,7, 1, 7, 7, 6, 2, 255, 128, 128, 128, 0, 128, 128, 128, 4, 7, 7,
6,1,255,112,128,96,144,96,16,224,3,1,1,6,1,5, 6, 1, 255, 112, 128, 96, 144, 96, 16, 224, 3, 1, 1, 6, 1, 5,
160,6,7,7,6,0,0,120,132,148,164,148,132,120,3,5, 160, 6, 7, 7, 6, 0, 0, 120, 132, 148, 164, 148, 132, 120, 3, 5,
5,6,1,1,96,160,96,0,224,5,5,5,6,0,0,40, 5, 6, 1, 1, 96, 160, 96, 0, 224, 5, 5, 5, 6, 0, 0, 40,
80,160,80,40,4,3,3,6,1,0,240,16,16,4,1,1, 80, 160, 80, 40, 4, 3, 3, 6, 1, 0, 240, 16, 16, 4, 1, 1,
6,1,2,240,6,7,7,6,0,0,120,132,180,164,164,132, 6, 1, 2, 240, 6, 7, 7, 6, 0, 0, 120, 132, 180, 164, 164, 132,
120,4,1,1,6,1,5,240,4,3,3,6,1,2,96,144, 120, 4, 1, 1, 6, 1, 5, 240, 4, 3, 3, 6, 1, 2, 96, 144,
96,5,7,7,6,0,255,32,32,248,32,32,0,248,3,5, 96, 5, 7, 7, 6, 0, 255, 32, 32, 248, 32, 32, 0, 248, 3, 5,
5,6,1,1,64,160,32,64,224,3,5,5,6,1,1,192, 5, 6, 1, 1, 64, 160, 32, 64, 224, 3, 5, 5, 6, 1, 1, 192,
32,64,32,192,2,2,2,6,2,4,64,128,4,5,5,6, 32, 64, 32, 192, 2, 2, 2, 6, 2, 4, 64, 128, 4, 5, 5, 6,
1,255,144,144,176,208,128,5,6,6,6,0,0,120,232,232, 1, 255, 144, 144, 176, 208, 128, 5, 6, 6, 6, 0, 0, 120, 232, 232,
104,40,40,1,1,1,6,2,2,128,2,2,2,6,2,254, 104, 40, 40, 1, 1, 1, 6, 2, 2, 128, 2, 2, 2, 6, 2, 254,
64,128,3,5,5,6,1,1,64,192,64,64,224,3,5,5, 64, 128, 3, 5, 5, 6, 1, 1, 64, 192, 64, 64, 224, 3, 5, 5,
6,1,1,64,160,64,0,224,5,5,5,6,0,0,160,80, 6, 1, 1, 64, 160, 64, 0, 224, 5, 5, 5, 6, 0, 0, 160, 80,
40,80,160,5,8,8,6,0,255,64,192,64,80,112,48,120, 40, 80, 160, 5, 8, 8, 6, 0, 255, 64, 192, 64, 80, 112, 48, 120,
16,5,8,8,6,0,255,64,192,64,80,104,8,16,56,5, 16, 5, 8, 8, 6, 0, 255, 64, 192, 64, 80, 104, 8, 16, 56, 5,
8,8,6,0,255,192,32,64,48,240,48,120,16,4,7,7, 8, 8, 6, 0, 255, 192, 32, 64, 48, 240, 48, 120, 16, 4, 7, 7,
6,1,0,32,0,32,96,128,144,96,5,7,7,6,0,0, 6, 1, 0, 32, 0, 32, 96, 128, 144, 96, 5, 7, 7, 6, 0, 0,
64,32,32,80,112,136,136,5,7,7,6,0,0,16,32,32, 64, 32, 32, 80, 112, 136, 136, 5, 7, 7, 6, 0, 0, 16, 32, 32,
80,112,136,136,5,7,7,6,0,0,32,80,32,80,112,136, 80, 112, 136, 136, 5, 7, 7, 6, 0, 0, 32, 80, 32, 80, 112, 136,
136,5,7,7,6,0,0,40,80,32,80,112,136,136,5,7, 136, 5, 7, 7, 6, 0, 0, 40, 80, 32, 80, 112, 136, 136, 5, 7,
7,6,0,0,80,0,32,80,112,136,136,5,7,7,6,0, 7, 6, 0, 0, 80, 0, 32, 80, 112, 136, 136, 5, 7, 7, 6, 0,
0,32,80,32,80,112,136,136,5,6,6,6,0,0,120,160, 0, 32, 80, 32, 80, 112, 136, 136, 5, 6, 6, 6, 0, 0, 120, 160,
240,160,160,184,4,8,8,6,1,254,96,144,128,128,144,96, 240, 160, 160, 184, 4, 8, 8, 6, 1, 254, 96, 144, 128, 128, 144, 96,
32,64,4,7,7,6,1,0,64,32,240,128,224,128,240,4, 32, 64, 4, 7, 7, 6, 1, 0, 64, 32, 240, 128, 224, 128, 240, 4,
7,7,6,1,0,32,64,240,128,224,128,240,4,7,7,6, 7, 7, 6, 1, 0, 32, 64, 240, 128, 224, 128, 240, 4, 7, 7, 6,
1,0,32,80,240,128,224,128,240,4,7,7,6,1,0,80, 1, 0, 32, 80, 240, 128, 224, 128, 240, 4, 7, 7, 6, 1, 0, 80,
0,240,128,224,128,240,3,7,7,6,1,0,128,64,224,64, 0, 240, 128, 224, 128, 240, 3, 7, 7, 6, 1, 0, 128, 64, 224, 64,
64,64,224,3,7,7,6,1,0,32,64,224,64,64,64,224, 64, 64, 224, 3, 7, 7, 6, 1, 0, 32, 64, 224, 64, 64, 64, 224,
3,7,7,6,1,0,64,160,224,64,64,64,224,3,7,7, 3, 7, 7, 6, 1, 0, 64, 160, 224, 64, 64, 64, 224, 3, 7, 7,
6,1,0,160,0,224,64,64,64,224,5,6,6,6,0,0, 6, 1, 0, 160, 0, 224, 64, 64, 64, 224, 5, 6, 6, 6, 0, 0,
112,72,232,72,72,112,4,7,7,6,1,0,80,160,144,208, 112, 72, 232, 72, 72, 112, 4, 7, 7, 6, 1, 0, 80, 160, 144, 208,
176,144,144,4,7,7,6,1,0,64,32,96,144,144,144,96, 176, 144, 144, 4, 7, 7, 6, 1, 0, 64, 32, 96, 144, 144, 144, 96,
4,7,7,6,1,0,32,64,96,144,144,144,96,4,7,7, 4, 7, 7, 6, 1, 0, 32, 64, 96, 144, 144, 144, 96, 4, 7, 7,
6,1,0,32,80,96,144,144,144,96,4,7,7,6,1,0, 6, 1, 0, 32, 80, 96, 144, 144, 144, 96, 4, 7, 7, 6, 1, 0,
80,160,96,144,144,144,96,4,7,7,6,1,0,80,0,96, 80, 160, 96, 144, 144, 144, 96, 4, 7, 7, 6, 1, 0, 80, 0, 96,
144,144,144,96,5,5,5,6,0,0,136,80,32,80,136,4, 144, 144, 144, 96, 5, 5, 5, 6, 0, 0, 136, 80, 32, 80, 136, 4,
8,8,6,1,255,16,112,176,176,208,208,224,128,4,7,7, 8, 8, 6, 1, 255, 16, 112, 176, 176, 208, 208, 224, 128, 4, 7, 7,
6,1,0,64,32,144,144,144,144,96,4,7,7,6,1,0, 6, 1, 0, 64, 32, 144, 144, 144, 144, 96, 4, 7, 7, 6, 1, 0,
32,64,144,144,144,144,96,4,7,7,6,1,0,32,80,144, 32, 64, 144, 144, 144, 144, 96, 4, 7, 7, 6, 1, 0, 32, 80, 144,
144,144,144,96,4,7,7,6,1,0,80,0,144,144,144,144, 144, 144, 144, 96, 4, 7, 7, 6, 1, 0, 80, 0, 144, 144, 144, 144,
96,5,7,7,6,0,0,16,32,136,80,32,32,32,4,6, 96, 5, 7, 7, 6, 0, 0, 16, 32, 136, 80, 32, 32, 32, 4, 6,
6,6,1,0,128,224,144,144,224,128,4,6,6,6,1,0, 6, 6, 1, 0, 128, 224, 144, 144, 224, 128, 4, 6, 6, 6, 1, 0,
96,144,160,160,144,160,4,7,7,6,1,0,64,32,0,112, 96, 144, 160, 160, 144, 160, 4, 7, 7, 6, 1, 0, 64, 32, 0, 112,
144,144,112,4,7,7,6,1,0,32,64,0,112,144,144,112, 144, 144, 112, 4, 7, 7, 6, 1, 0, 32, 64, 0, 112, 144, 144, 112,
4,7,7,6,1,0,32,80,0,112,144,144,112,4,7,7, 4, 7, 7, 6, 1, 0, 32, 80, 0, 112, 144, 144, 112, 4, 7, 7,
6,1,0,80,160,0,112,144,144,112,4,6,6,6,1,0, 6, 1, 0, 80, 160, 0, 112, 144, 144, 112, 4, 6, 6, 6, 1, 0,
80,0,112,144,144,112,4,7,7,6,1,0,32,80,32,112, 80, 0, 112, 144, 144, 112, 4, 7, 7, 6, 1, 0, 32, 80, 32, 112,
144,144,112,5,4,4,6,0,0,112,168,176,120,4,6,6, 144, 144, 112, 5, 4, 4, 6, 0, 0, 112, 168, 176, 120, 4, 6, 6,
6,1,254,112,128,128,112,32,64,4,7,7,6,1,0,64, 6, 1, 254, 112, 128, 128, 112, 32, 64, 4, 7, 7, 6, 1, 0, 64,
32,0,96,176,192,112,4,7,7,6,1,0,32,64,0,96, 32, 0, 96, 176, 192, 112, 4, 7, 7, 6, 1, 0, 32, 64, 0, 96,
176,192,112,4,7,7,6,1,0,32,80,0,96,176,192,112, 176, 192, 112, 4, 7, 7, 6, 1, 0, 32, 80, 0, 96, 176, 192, 112,
4,6,6,6,1,0,80,0,96,176,192,112,3,7,7,6, 4, 6, 6, 6, 1, 0, 80, 0, 96, 176, 192, 112, 3, 7, 7, 6,
1,0,128,64,0,192,64,64,224,3,7,7,6,1,0,32, 1, 0, 128, 64, 0, 192, 64, 64, 224, 3, 7, 7, 6, 1, 0, 32,
64,0,192,64,64,224,3,7,7,6,1,0,64,160,0,192, 64, 0, 192, 64, 64, 224, 3, 7, 7, 6, 1, 0, 64, 160, 0, 192,
64,64,224,3,6,6,6,1,0,160,0,192,64,64,224,4, 64, 64, 224, 3, 6, 6, 6, 1, 0, 160, 0, 192, 64, 64, 224, 4,
7,7,6,1,0,48,96,16,112,144,144,96,4,7,7,6, 7, 7, 6, 1, 0, 48, 96, 16, 112, 144, 144, 96, 4, 7, 7, 6,
1,0,80,160,0,224,144,144,144,4,7,7,6,1,0,64, 1, 0, 80, 160, 0, 224, 144, 144, 144, 4, 7, 7, 6, 1, 0, 64,
32,0,96,144,144,96,4,7,7,6,1,0,32,64,0,96, 32, 0, 96, 144, 144, 96, 4, 7, 7, 6, 1, 0, 32, 64, 0, 96,
144,144,96,4,7,7,6,1,0,32,80,0,96,144,144,96, 144, 144, 96, 4, 7, 7, 6, 1, 0, 32, 80, 0, 96, 144, 144, 96,
4,7,7,6,1,0,80,160,0,96,144,144,96,4,6,6, 4, 7, 7, 6, 1, 0, 80, 160, 0, 96, 144, 144, 96, 4, 6, 6,
6,1,0,80,0,96,144,144,96,5,5,5,6,0,0,32, 6, 1, 0, 80, 0, 96, 144, 144, 96, 5, 5, 5, 6, 0, 0, 32,
0,248,0,32,4,4,4,6,1,0,112,176,208,224,4,7, 0, 248, 0, 32, 4, 4, 4, 6, 1, 0, 112, 176, 208, 224, 4, 7,
7,6,1,0,64,32,0,144,144,144,112,4,7,7,6,1, 7, 6, 1, 0, 64, 32, 0, 144, 144, 144, 112, 4, 7, 7, 6, 1,
0,32,64,0,144,144,144,112,4,7,7,6,1,0,32,80, 0, 32, 64, 0, 144, 144, 144, 112, 4, 7, 7, 6, 1, 0, 32, 80,
0,144,144,144,112,4,6,6,6,1,0,80,0,144,144,144, 0, 144, 144, 144, 112, 4, 6, 6, 6, 1, 0, 80, 0, 144, 144, 144,
112,4,9,9,6,1,254,32,64,0,144,144,144,112,144,96, 112, 4, 9, 9, 6, 1, 254, 32, 64, 0, 144, 144, 144, 112, 144, 96,
4,8,8,6,1,254,128,128,224,144,144,224,128,128,4,8, 4, 8, 8, 6, 1, 254, 128, 128, 224, 144, 144, 224, 128, 128, 4, 8,
8,6,1,254,80,0,144,144,144,112,144,96}; 8, 6, 1, 254, 80, 0, 144, 144, 144, 112, 144, 96
};
...@@ -9,163 +9,164 @@ ...@@ -9,163 +9,164 @@
X Font ascent = 7 descent=-1 X Font ascent = 7 descent=-1
Max Font ascent = 8 descent=-1 Max Font ascent = 8 descent=-1
*/ */
#include <utility/u8g.h> #include <U8glib.h>
const u8g_fntpgm_uint8_t HD44780_C_5x7[2522] U8G_SECTION(".progmem.HD44780_C_5x7") = { const u8g_fntpgm_uint8_t HD44780_C_5x7[2522] U8G_SECTION(".progmem.HD44780_C_5x7") = {
0,6,9,0,254,7,1,145,3,34,32,255,255,8,255,7, 0, 6, 9, 0, 254, 7, 1, 145, 3, 34, 32, 255, 255, 8, 255, 7,
255,0,0,0,6,0,0,1,7,7,6,2,0,128,128,128, 255, 0, 0, 0, 6, 0, 0, 1, 7, 7, 6, 2, 0, 128, 128, 128,
128,128,0,128,3,2,2,6,1,5,160,160,5,7,7,6, 128, 128, 0, 128, 3, 2, 2, 6, 1, 5, 160, 160, 5, 7, 7, 6,
0,0,80,80,248,80,248,80,80,5,7,7,6,0,0,32, 0, 0, 80, 80, 248, 80, 248, 80, 80, 5, 7, 7, 6, 0, 0, 32,
120,160,112,40,240,32,5,7,7,6,0,0,192,200,16,32, 120, 160, 112, 40, 240, 32, 5, 7, 7, 6, 0, 0, 192, 200, 16, 32,
64,152,24,5,7,7,6,0,0,96,144,160,64,168,144,104, 64, 152, 24, 5, 7, 7, 6, 0, 0, 96, 144, 160, 64, 168, 144, 104,
2,3,3,6,1,4,192,64,128,3,7,7,6,1,0,32, 2, 3, 3, 6, 1, 4, 192, 64, 128, 3, 7, 7, 6, 1, 0, 32,
64,128,128,128,64,32,3,7,7,6,1,0,128,64,32,32, 64, 128, 128, 128, 64, 32, 3, 7, 7, 6, 1, 0, 128, 64, 32, 32,
32,64,128,5,5,5,6,0,1,32,168,112,168,32,5,5, 32, 64, 128, 5, 5, 5, 6, 0, 1, 32, 168, 112, 168, 32, 5, 5,
5,6,0,1,32,32,248,32,32,2,3,3,6,2,255,192, 5, 6, 0, 1, 32, 32, 248, 32, 32, 2, 3, 3, 6, 2, 255, 192,
64,128,5,1,1,6,0,3,248,2,2,2,6,2,0,192, 64, 128, 5, 1, 1, 6, 0, 3, 248, 2, 2, 2, 6, 2, 0, 192,
192,5,5,5,6,0,1,8,16,32,64,128,5,7,7,6, 192, 5, 5, 5, 6, 0, 1, 8, 16, 32, 64, 128, 5, 7, 7, 6,
0,0,112,136,152,168,200,136,112,3,7,7,6,1,0,64, 0, 0, 112, 136, 152, 168, 200, 136, 112, 3, 7, 7, 6, 1, 0, 64,
192,64,64,64,64,224,5,7,7,6,0,0,112,136,8,112, 192, 64, 64, 64, 64, 224, 5, 7, 7, 6, 0, 0, 112, 136, 8, 112,
128,128,248,5,7,7,6,0,0,248,16,32,16,8,8,240, 128, 128, 248, 5, 7, 7, 6, 0, 0, 248, 16, 32, 16, 8, 8, 240,
5,7,7,6,0,0,16,48,80,144,248,16,16,5,7,7, 5, 7, 7, 6, 0, 0, 16, 48, 80, 144, 248, 16, 16, 5, 7, 7,
6,0,0,248,128,240,8,8,136,112,5,7,7,6,0,0, 6, 0, 0, 248, 128, 240, 8, 8, 136, 112, 5, 7, 7, 6, 0, 0,
48,64,128,240,136,136,112,5,7,7,6,0,0,248,8,16, 48, 64, 128, 240, 136, 136, 112, 5, 7, 7, 6, 0, 0, 248, 8, 16,
32,32,32,32,5,7,7,6,0,0,112,136,136,112,136,136, 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 112, 136, 136, 112, 136, 136,
112,5,7,7,6,0,0,112,136,136,120,8,16,96,2,5, 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 120, 8, 16, 96, 2, 5,
5,6,2,0,192,192,0,192,192,2,6,6,6,2,255,192, 5, 6, 2, 0, 192, 192, 0, 192, 192, 2, 6, 6, 6, 2, 255, 192,
192,0,192,64,128,4,7,7,6,0,0,16,32,64,128,64, 192, 0, 192, 64, 128, 4, 7, 7, 6, 0, 0, 16, 32, 64, 128, 64,
32,16,5,3,3,6,0,2,248,0,248,4,7,7,6,1, 32, 16, 5, 3, 3, 6, 0, 2, 248, 0, 248, 4, 7, 7, 6, 1,
0,128,64,32,16,32,64,128,5,7,7,6,0,0,112,136, 0, 128, 64, 32, 16, 32, 64, 128, 5, 7, 7, 6, 0, 0, 112, 136,
8,16,32,0,32,5,6,6,6,0,0,112,136,8,104,168, 8, 16, 32, 0, 32, 5, 6, 6, 6, 0, 0, 112, 136, 8, 104, 168,
112,5,7,7,6,0,0,112,136,136,248,136,136,136,5,7, 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 248, 136, 136, 136, 5, 7,
7,6,0,0,240,136,136,240,136,136,240,5,7,7,6,0, 7, 6, 0, 0, 240, 136, 136, 240, 136, 136, 240, 5, 7, 7, 6, 0,
0,112,136,128,128,128,136,112,5,7,7,6,0,0,224,144, 0, 112, 136, 128, 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 224, 144,
136,136,136,144,224,5,7,7,6,0,0,248,128,128,240,128, 136, 136, 136, 144, 224, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128,
128,248,5,7,7,6,0,0,248,128,128,240,128,128,128,5, 128, 248, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128, 128, 128, 5,
7,7,6,0,0,112,136,128,184,136,136,112,5,7,7,6, 7, 7, 6, 0, 0, 112, 136, 128, 184, 136, 136, 112, 5, 7, 7, 6,
0,0,136,136,136,248,136,136,136,1,7,7,6,2,0,128, 0, 0, 136, 136, 136, 248, 136, 136, 136, 1, 7, 7, 6, 2, 0, 128,
128,128,128,128,128,128,5,7,7,6,0,0,56,16,16,16, 128, 128, 128, 128, 128, 128, 5, 7, 7, 6, 0, 0, 56, 16, 16, 16,
16,144,96,5,7,7,6,0,0,136,144,160,192,160,144,136, 16, 144, 96, 5, 7, 7, 6, 0, 0, 136, 144, 160, 192, 160, 144, 136,
5,7,7,6,0,0,128,128,128,128,128,128,248,5,7,7, 5, 7, 7, 6, 0, 0, 128, 128, 128, 128, 128, 128, 248, 5, 7, 7,
6,0,0,136,216,168,136,136,136,136,5,7,7,6,0,0, 6, 0, 0, 136, 216, 168, 136, 136, 136, 136, 5, 7, 7, 6, 0, 0,
136,136,200,168,152,136,136,5,7,7,6,0,0,112,136,136, 136, 136, 200, 168, 152, 136, 136, 5, 7, 7, 6, 0, 0, 112, 136, 136,
136,136,136,112,5,7,7,6,0,0,240,136,136,240,128,128, 136, 136, 136, 112, 5, 7, 7, 6, 0, 0, 240, 136, 136, 240, 128, 128,
128,5,7,7,6,0,0,112,136,136,136,168,144,104,5,7, 128, 5, 7, 7, 6, 0, 0, 112, 136, 136, 136, 168, 144, 104, 5, 7,
7,6,0,0,240,136,136,240,160,144,136,5,7,7,6,0, 7, 6, 0, 0, 240, 136, 136, 240, 160, 144, 136, 5, 7, 7, 6, 0,
0,120,128,128,112,8,8,240,5,7,7,6,0,0,248,32, 0, 120, 128, 128, 112, 8, 8, 240, 5, 7, 7, 6, 0, 0, 248, 32,
32,32,32,32,32,5,7,7,6,0,0,136,136,136,136,136, 32, 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136,
136,112,5,7,7,6,0,0,136,136,136,136,136,80,32,5, 136, 112, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 80, 32, 5,
7,7,6,0,0,136,136,136,136,136,168,80,5,7,7,6, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 168, 80, 5, 7, 7, 6,
0,0,136,136,80,32,80,136,136,5,7,7,6,0,0,136, 0, 0, 136, 136, 80, 32, 80, 136, 136, 5, 7, 7, 6, 0, 0, 136,
136,136,80,32,32,32,5,7,7,6,0,0,248,8,16,32, 136, 136, 80, 32, 32, 32, 5, 7, 7, 6, 0, 0, 248, 8, 16, 32,
64,128,248,3,7,7,6,1,0,224,128,128,128,128,128,224, 64, 128, 248, 3, 7, 7, 6, 1, 0, 224, 128, 128, 128, 128, 128, 224,
5,7,7,6,0,0,32,112,160,160,168,112,32,3,7,7, 5, 7, 7, 6, 0, 0, 32, 112, 160, 160, 168, 112, 32, 3, 7, 7,
6,1,0,224,32,32,32,32,32,224,5,3,3,6,0,4, 6, 1, 0, 224, 32, 32, 32, 32, 32, 224, 5, 3, 3, 6, 0, 4,
32,80,136,5,1,1,6,0,0,248,2,2,2,6,2,5, 32, 80, 136, 5, 1, 1, 6, 0, 0, 248, 2, 2, 2, 6, 2, 5,
128,64,5,5,5,6,0,0,112,8,120,136,120,5,7,7, 128, 64, 5, 5, 5, 6, 0, 0, 112, 8, 120, 136, 120, 5, 7, 7,
6,0,0,128,128,176,200,136,136,240,5,5,5,6,0,0, 6, 0, 0, 128, 128, 176, 200, 136, 136, 240, 5, 5, 5, 6, 0, 0,
112,128,128,136,112,5,7,7,6,0,0,8,8,104,152,136, 112, 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 8, 8, 104, 152, 136,
136,120,5,5,5,6,0,0,112,136,248,128,112,5,7,7, 136, 120, 5, 5, 5, 6, 0, 0, 112, 136, 248, 128, 112, 5, 7, 7,
6,0,0,48,72,224,64,64,64,64,5,6,6,6,0,255, 6, 0, 0, 48, 72, 224, 64, 64, 64, 64, 5, 6, 6, 6, 0, 255,
112,136,136,120,8,112,5,7,7,6,0,0,128,128,176,200, 112, 136, 136, 120, 8, 112, 5, 7, 7, 6, 0, 0, 128, 128, 176, 200,
136,136,136,1,7,7,6,2,0,128,0,128,128,128,128,128, 136, 136, 136, 1, 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128,
3,8,8,6,1,255,32,0,32,32,32,32,160,64,4,7, 3, 8, 8, 6, 1, 255, 32, 0, 32, 32, 32, 32, 160, 64, 4, 7,
7,6,0,0,128,128,144,160,192,160,144,3,7,7,6,1, 7, 6, 0, 0, 128, 128, 144, 160, 192, 160, 144, 3, 7, 7, 6, 1,
0,192,64,64,64,64,64,224,5,5,5,6,0,0,208,168, 0, 192, 64, 64, 64, 64, 64, 224, 5, 5, 5, 6, 0, 0, 208, 168,
168,168,168,5,5,5,6,0,0,176,200,136,136,136,5,5, 168, 168, 168, 5, 5, 5, 6, 0, 0, 176, 200, 136, 136, 136, 5, 5,
5,6,0,0,112,136,136,136,112,5,6,6,6,0,255,240, 5, 6, 0, 0, 112, 136, 136, 136, 112, 5, 6, 6, 6, 0, 255, 240,
136,136,240,128,128,5,6,6,6,0,255,120,136,136,120,8, 136, 136, 240, 128, 128, 5, 6, 6, 6, 0, 255, 120, 136, 136, 120, 8,
8,5,5,5,6,0,0,176,200,128,128,128,5,5,5,6, 8, 5, 5, 5, 6, 0, 0, 176, 200, 128, 128, 128, 5, 5, 5, 6,
0,0,112,128,112,8,240,5,7,7,6,0,0,64,64,224, 0, 0, 112, 128, 112, 8, 240, 5, 7, 7, 6, 0, 0, 64, 64, 224,
64,64,72,48,5,5,5,6,0,0,136,136,136,152,104,5, 64, 64, 72, 48, 5, 5, 5, 6, 0, 0, 136, 136, 136, 152, 104, 5,
5,5,6,0,0,136,136,136,80,32,5,5,5,6,0,0, 5, 5, 6, 0, 0, 136, 136, 136, 80, 32, 5, 5, 5, 6, 0, 0,
136,136,168,168,80,5,5,5,6,0,0,136,80,32,80,136, 136, 136, 168, 168, 80, 5, 5, 5, 6, 0, 0, 136, 80, 32, 80, 136,
5,6,6,6,0,255,136,136,136,120,8,112,5,5,5,6, 5, 6, 6, 6, 0, 255, 136, 136, 136, 120, 8, 112, 5, 5, 5, 6,
0,0,248,16,32,64,248,5,5,5,6,0,2,184,168,168, 0, 0, 248, 16, 32, 64, 248, 5, 5, 5, 6, 0, 2, 184, 168, 168,
168,184,5,5,5,6,0,2,184,136,184,160,184,5,5,5, 168, 184, 5, 5, 5, 6, 0, 2, 184, 136, 184, 160, 184, 5, 5, 5,
6,0,2,184,160,184,136,184,5,6,6,6,0,1,8,40, 6, 0, 2, 184, 160, 184, 136, 184, 5, 6, 6, 6, 0, 1, 8, 40,
72,248,64,32,5,5,5,6,0,0,56,112,224,136,240,0, 72, 248, 64, 32, 5, 5, 5, 6, 0, 0, 56, 112, 224, 136, 240, 0,
0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0,
0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0,
0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0,
0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0,
0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0,
0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0,
0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0,
0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,5, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 5,
7,7,6,0,0,248,136,128,240,136,136,240,5,7,7,6, 7, 7, 6, 0, 0, 248, 136, 128, 240, 136, 136, 240, 5, 7, 7, 6,
0,0,248,136,128,128,128,128,128,5,7,7,6,0,0,80, 0, 0, 248, 136, 128, 128, 128, 128, 128, 5, 7, 7, 6, 0, 0, 80,
0,248,128,240,128,248,5,7,7,6,0,0,168,168,168,112, 0, 248, 128, 240, 128, 248, 5, 7, 7, 6, 0, 0, 168, 168, 168, 112,
168,168,168,5,7,7,6,0,0,240,8,8,112,8,8,240, 168, 168, 168, 5, 7, 7, 6, 0, 0, 240, 8, 8, 112, 8, 8, 240,
5,7,7,6,0,0,136,136,152,168,200,136,136,5,8,8, 5, 7, 7, 6, 0, 0, 136, 136, 152, 168, 200, 136, 136, 5, 8, 8,
6,0,0,80,32,136,152,168,168,200,136,5,7,7,6,0, 6, 0, 0, 80, 32, 136, 152, 168, 168, 200, 136, 5, 7, 7, 6, 0,
0,120,40,40,40,40,168,72,5,7,7,6,0,0,248,136, 0, 120, 40, 40, 40, 40, 168, 72, 5, 7, 7, 6, 0, 0, 248, 136,
136,136,136,136,136,5,7,7,6,0,0,136,136,136,80,32, 136, 136, 136, 136, 136, 5, 7, 7, 6, 0, 0, 136, 136, 136, 80, 32,
64,128,5,7,7,6,0,0,32,112,168,168,168,112,32,5, 64, 128, 5, 7, 7, 6, 0, 0, 32, 112, 168, 168, 168, 112, 32, 5,
7,7,6,0,0,136,136,136,120,8,8,8,5,7,7,6, 7, 7, 6, 0, 0, 136, 136, 136, 120, 8, 8, 8, 5, 7, 7, 6,
0,0,168,168,168,168,168,168,248,5,7,7,6,0,0,192, 0, 0, 168, 168, 168, 168, 168, 168, 248, 5, 7, 7, 6, 0, 0, 192,
64,64,112,72,72,112,5,7,7,6,0,0,136,136,136,200, 64, 64, 112, 72, 72, 112, 5, 7, 7, 6, 0, 0, 136, 136, 136, 200,
168,168,200,5,7,7,6,0,0,112,136,8,56,8,136,112, 168, 168, 200, 5, 7, 7, 6, 0, 0, 112, 136, 8, 56, 8, 136, 112,
5,7,7,6,0,0,144,168,168,232,168,168,144,5,7,7, 5, 7, 7, 6, 0, 0, 144, 168, 168, 232, 168, 168, 144, 5, 7, 7,
6,0,0,120,136,136,120,40,72,136,5,7,7,6,0,0, 6, 0, 0, 120, 136, 136, 120, 40, 72, 136, 5, 7, 7, 6, 0, 0,
24,96,128,240,136,136,112,4,5,5,6,0,0,224,144,224, 24, 96, 128, 240, 136, 136, 112, 4, 5, 5, 6, 0, 0, 224, 144, 224,
144,224,5,5,5,6,0,0,248,136,128,128,128,5,7,7, 144, 224, 5, 5, 5, 6, 0, 0, 248, 136, 128, 128, 128, 5, 7, 7,
6,0,0,80,0,112,136,248,128,112,5,5,5,6,0,0, 6, 0, 0, 80, 0, 112, 136, 248, 128, 112, 5, 5, 5, 6, 0, 0,
168,168,112,168,168,5,5,5,6,0,0,240,8,48,8,240, 168, 168, 112, 168, 168, 5, 5, 5, 6, 0, 0, 240, 8, 48, 8, 240,
5,5,5,6,0,0,136,152,168,200,136,5,7,7,6,0, 5, 5, 5, 6, 0, 0, 136, 152, 168, 200, 136, 5, 7, 7, 6, 0,
0,80,32,136,152,168,200,136,4,5,5,6,0,0,144,160, 0, 80, 32, 136, 152, 168, 200, 136, 4, 5, 5, 6, 0, 0, 144, 160,
192,160,144,5,5,5,6,0,0,248,40,40,168,72,5,5, 192, 160, 144, 5, 5, 5, 6, 0, 0, 248, 40, 40, 168, 72, 5, 5,
5,6,0,0,136,216,168,136,136,5,5,5,6,0,0,136, 5, 6, 0, 0, 136, 216, 168, 136, 136, 5, 5, 5, 6, 0, 0, 136,
136,248,136,136,5,5,5,6,0,0,248,136,136,136,136,5, 136, 248, 136, 136, 5, 5, 5, 6, 0, 0, 248, 136, 136, 136, 136, 5,
5,5,6,0,0,248,32,32,32,32,5,5,5,6,0,0, 5, 5, 6, 0, 0, 248, 32, 32, 32, 32, 5, 5, 5, 6, 0, 0,
136,136,120,8,8,5,5,5,6,0,0,168,168,168,168,248, 136, 136, 120, 8, 8, 5, 5, 5, 6, 0, 0, 168, 168, 168, 168, 248,
5,5,5,6,0,0,192,64,112,72,112,5,5,5,6,0, 5, 5, 5, 6, 0, 0, 192, 64, 112, 72, 112, 5, 5, 5, 6, 0,
0,136,136,200,168,200,4,5,5,6,0,0,128,128,224,144, 0, 136, 136, 200, 168, 200, 4, 5, 5, 6, 0, 0, 128, 128, 224, 144,
224,5,5,5,6,0,0,112,136,56,136,112,5,5,5,6, 224, 5, 5, 5, 6, 0, 0, 112, 136, 56, 136, 112, 5, 5, 5, 6,
0,0,144,168,232,168,144,5,5,5,6,0,0,120,136,120, 0, 0, 144, 168, 232, 168, 144, 5, 5, 5, 6, 0, 0, 120, 136, 120,
40,72,5,5,5,6,0,1,32,72,144,72,32,5,5,5, 40, 72, 5, 5, 5, 6, 0, 1, 32, 72, 144, 72, 32, 5, 5, 5,
6,0,1,32,144,72,144,32,5,3,3,6,0,0,72,144, 6, 0, 1, 32, 144, 72, 144, 32, 5, 3, 3, 6, 0, 0, 72, 144,
216,5,3,3,6,0,4,216,72,144,5,7,7,6,0,0, 216, 5, 3, 3, 6, 0, 4, 216, 72, 144, 5, 7, 7, 6, 0, 0,
144,208,176,144,56,40,56,5,7,7,6,0,0,32,0,32, 144, 208, 176, 144, 56, 40, 56, 5, 7, 7, 6, 0, 0, 32, 0, 32,
64,128,136,112,5,7,7,6,0,0,24,32,32,112,32,32, 64, 128, 136, 112, 5, 7, 7, 6, 0, 0, 24, 32, 32, 112, 32, 32,
192,5,7,7,6,0,0,32,80,64,240,64,64,120,1,2, 192, 5, 7, 7, 6, 0, 0, 32, 80, 64, 240, 64, 64, 120, 1, 2,
2,6,2,0,128,128,1,4,4,6,2,0,128,128,128,128, 2, 6, 2, 0, 128, 128, 1, 4, 4, 6, 2, 0, 128, 128, 128, 128,
3,5,5,6,1,0,160,160,160,0,224,3,5,5,6,1, 3, 5, 5, 6, 1, 0, 160, 160, 160, 0, 224, 3, 5, 5, 6, 1,
0,160,160,160,0,160,5,7,7,6,0,0,160,0,232,16, 0, 160, 160, 160, 0, 160, 5, 7, 7, 6, 0, 0, 160, 0, 232, 16,
32,64,128,5,5,5,6,0,1,216,112,32,112,216,5,7, 32, 64, 128, 5, 5, 5, 6, 0, 1, 216, 112, 32, 112, 216, 5, 7,
7,6,0,0,160,64,168,16,32,64,128,3,6,6,6,1, 7, 6, 0, 0, 160, 64, 168, 16, 32, 64, 128, 3, 6, 6, 6, 1,
1,224,64,64,64,64,224,5,6,6,6,0,1,248,80,80, 1, 224, 64, 64, 64, 64, 224, 5, 6, 6, 6, 0, 1, 248, 80, 80,
80,80,248,5,7,7,6,0,0,32,112,168,32,32,32,32, 80, 80, 248, 5, 7, 7, 6, 0, 0, 32, 112, 168, 32, 32, 32, 32,
5,7,7,6,0,0,32,32,32,32,168,112,32,5,7,7, 5, 7, 7, 6, 0, 0, 32, 32, 32, 32, 168, 112, 32, 5, 7, 7,
6,0,0,128,144,176,248,176,144,128,5,7,7,6,0,0, 6, 0, 0, 128, 144, 176, 248, 176, 144, 128, 5, 7, 7, 6, 0, 0,
8,72,104,248,104,72,8,5,7,7,6,0,0,128,136,168, 8, 72, 104, 248, 104, 72, 8, 5, 7, 7, 6, 0, 0, 128, 136, 168,
248,168,136,128,5,7,7,6,0,0,128,224,136,16,32,64, 248, 168, 136, 128, 5, 7, 7, 6, 0, 0, 128, 224, 136, 16, 32, 64,
128,2,2,2,6,2,2,192,192,5,8,8,6,0,255,120, 128, 2, 2, 2, 6, 2, 2, 192, 192, 5, 8, 8, 6, 0, 255, 120,
40,40,40,72,136,248,136,5,8,8,6,0,255,136,136,136, 40, 40, 40, 72, 136, 248, 136, 5, 8, 8, 6, 0, 255, 136, 136, 136,
136,136,136,248,8,5,8,8,6,0,255,168,168,168,168,168, 136, 136, 136, 248, 8, 5, 8, 8, 6, 0, 255, 168, 168, 168, 168, 168,
168,248,8,5,6,6,6,0,255,120,40,72,136,248,136,5, 168, 248, 8, 5, 6, 6, 6, 0, 255, 120, 40, 72, 136, 248, 136, 5,
7,7,6,0,255,32,32,112,168,168,112,32,5,6,6,6, 7, 7, 6, 0, 255, 32, 32, 112, 168, 168, 112, 32, 5, 6, 6, 6,
0,255,136,136,136,136,248,8,5,6,6,6,0,255,168,168, 0, 255, 136, 136, 136, 136, 248, 8, 5, 6, 6, 6, 0, 255, 168, 168,
168,168,248,8,2,2,2,6,2,6,64,128,3,1,1,6, 168, 168, 248, 8, 2, 2, 2, 6, 2, 6, 64, 128, 3, 1, 1, 6,
1,7,160,5,2,2,6,0,6,72,176,5,8,8,6,0, 1, 7, 160, 5, 2, 2, 6, 0, 6, 72, 176, 5, 8, 8, 6, 0,
0,16,32,0,112,136,248,128,112,5,6,6,6,0,255,112, 0, 16, 32, 0, 112, 136, 248, 128, 112, 5, 6, 6, 6, 0, 255, 112,
128,136,112,32,96,3,7,7,6,1,0,160,0,160,160,160, 128, 136, 112, 32, 96, 3, 7, 7, 6, 1, 0, 160, 0, 160, 160, 160,
32,192,5,6,6,6,0,1,32,112,112,112,248,32,5,5, 32, 192, 5, 6, 6, 6, 0, 1, 32, 112, 112, 112, 248, 32, 5, 5,
5,6,0,1,80,0,136,0,80,5,5,5,6,0,1,112, 5, 6, 0, 1, 80, 0, 136, 0, 80, 5, 5, 5, 6, 0, 1, 112,
136,136,136,112,5,7,7,6,0,0,136,144,168,88,184,8, 136, 136, 136, 112, 5, 7, 7, 6, 0, 0, 136, 144, 168, 88, 184, 8,
8,5,7,7,6,0,0,136,144,184,72,184,8,56,5,7, 8, 5, 7, 7, 6, 0, 0, 136, 144, 184, 72, 184, 8, 56, 5, 7,
7,6,0,0,136,144,184,72,152,32,56,5,8,8,6,0, 7, 6, 0, 0, 136, 144, 184, 72, 152, 32, 56, 5, 8, 8, 6, 0,
0,192,64,192,72,216,56,8,8,5,7,7,6,0,0,136, 0, 192, 64, 192, 72, 216, 56, 8, 8, 5, 7, 7, 6, 0, 0, 136,
248,136,248,136,248,136,4,5,5,6,0,2,192,0,48,0, 248, 136, 248, 136, 248, 136, 4, 5, 5, 6, 0, 2, 192, 0, 48, 0,
96,5,8,8,6,0,0,64,160,224,168,8,40,120,32,5, 96, 5, 8, 8, 6, 0, 0, 64, 160, 224, 168, 8, 40, 120, 32, 5,
8,8,6,0,0,64,112,64,120,64,112,64,224,5,8,8, 8, 8, 6, 0, 0, 64, 112, 64, 120, 64, 112, 64, 224, 5, 8, 8,
6,0,0,32,112,32,248,32,112,32,112,5,7,7,6,0, 6, 0, 0, 32, 112, 32, 248, 32, 112, 32, 112, 5, 7, 7, 6, 0,
0,104,0,232,0,104,16,56,5,8,8,6,0,0,16,112, 0, 104, 0, 232, 0, 104, 16, 56, 5, 8, 8, 6, 0, 0, 16, 112,
16,240,16,112,16,56,5,7,7,6,0,1,32,112,32,248, 16, 240, 16, 112, 16, 56, 5, 7, 7, 6, 0, 1, 32, 112, 32, 248,
32,112,32,5,8,8,6,0,0,16,144,80,48,80,144,16, 32, 112, 32, 5, 8, 8, 6, 0, 0, 16, 144, 80, 48, 80, 144, 16,
56,5,8,8,6,0,0,48,72,32,80,80,32,144,96,5, 56, 5, 8, 8, 6, 0, 0, 48, 72, 32, 80, 80, 32, 144, 96, 5,
7,7,6,0,0,120,168,168,120,40,40,40,5,8,8,6, 7, 7, 6, 0, 0, 120, 168, 168, 120, 40, 40, 40, 5, 8, 8, 6,
0,0,248,248,248,248,248,248,248,248}; 0, 0, 248, 248, 248, 248, 248, 248, 248, 248
};
...@@ -9,161 +9,162 @@ ...@@ -9,161 +9,162 @@
X Font ascent = 7 descent=-1 X Font ascent = 7 descent=-1
Max Font ascent = 8 descent=-2 Max Font ascent = 8 descent=-2
*/ */
#include <utility/u8g.h> #include <U8glib.h>
const u8g_fntpgm_uint8_t HD44780_J_5x7[2491] U8G_SECTION(".progmem.HD44780_J_5x7") = { const u8g_fntpgm_uint8_t HD44780_J_5x7[2491] U8G_SECTION(".progmem.HD44780_J_5x7") = {
0,6,9,0,254,7,1,145,3,34,32,255,255,8,254,7, 0, 6, 9, 0, 254, 7, 1, 145, 3, 34, 32, 255, 255, 8, 254, 7,
255,0,0,0,6,0,8,1,7,7,6,2,0,128,128,128, 255, 0, 0, 0, 6, 0, 8, 1, 7, 7, 6, 2, 0, 128, 128, 128,
128,128,0,128,3,2,2,6,1,5,160,160,5,7,7,6, 128, 128, 0, 128, 3, 2, 2, 6, 1, 5, 160, 160, 5, 7, 7, 6,
0,0,80,80,248,80,248,80,80,5,7,7,6,0,0,32, 0, 0, 80, 80, 248, 80, 248, 80, 80, 5, 7, 7, 6, 0, 0, 32,
120,160,112,40,240,32,5,7,7,6,0,0,192,200,16,32, 120, 160, 112, 40, 240, 32, 5, 7, 7, 6, 0, 0, 192, 200, 16, 32,
64,152,24,5,7,7,6,0,0,96,144,160,64,168,144,104, 64, 152, 24, 5, 7, 7, 6, 0, 0, 96, 144, 160, 64, 168, 144, 104,
2,3,3,6,1,4,192,64,128,3,7,7,6,1,0,32, 2, 3, 3, 6, 1, 4, 192, 64, 128, 3, 7, 7, 6, 1, 0, 32,
64,128,128,128,64,32,3,7,7,6,1,0,128,64,32,32, 64, 128, 128, 128, 64, 32, 3, 7, 7, 6, 1, 0, 128, 64, 32, 32,
32,64,128,5,5,5,6,0,1,32,168,112,168,32,5,5, 32, 64, 128, 5, 5, 5, 6, 0, 1, 32, 168, 112, 168, 32, 5, 5,
5,6,0,1,32,32,248,32,32,2,3,3,6,2,255,192, 5, 6, 0, 1, 32, 32, 248, 32, 32, 2, 3, 3, 6, 2, 255, 192,
64,128,5,1,1,6,0,3,248,2,2,2,6,2,0,192, 64, 128, 5, 1, 1, 6, 0, 3, 248, 2, 2, 2, 6, 2, 0, 192,
192,5,5,5,6,0,1,8,16,32,64,128,5,7,7,6, 192, 5, 5, 5, 6, 0, 1, 8, 16, 32, 64, 128, 5, 7, 7, 6,
0,0,112,136,152,168,200,136,112,3,7,7,6,1,0,64, 0, 0, 112, 136, 152, 168, 200, 136, 112, 3, 7, 7, 6, 1, 0, 64,
192,64,64,64,64,224,5,7,7,6,0,0,112,136,8,112, 192, 64, 64, 64, 64, 224, 5, 7, 7, 6, 0, 0, 112, 136, 8, 112,
128,128,248,5,7,7,6,0,0,248,16,32,16,8,8,240, 128, 128, 248, 5, 7, 7, 6, 0, 0, 248, 16, 32, 16, 8, 8, 240,
5,7,7,6,0,0,16,48,80,144,248,16,16,5,7,7, 5, 7, 7, 6, 0, 0, 16, 48, 80, 144, 248, 16, 16, 5, 7, 7,
6,0,0,248,128,240,8,8,136,112,5,7,7,6,0,0, 6, 0, 0, 248, 128, 240, 8, 8, 136, 112, 5, 7, 7, 6, 0, 0,
48,64,128,240,136,136,112,5,7,7,6,0,0,248,8,16, 48, 64, 128, 240, 136, 136, 112, 5, 7, 7, 6, 0, 0, 248, 8, 16,
32,32,32,32,5,7,7,6,0,0,112,136,136,112,136,136, 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 112, 136, 136, 112, 136, 136,
112,5,7,7,6,0,0,112,136,136,120,8,16,96,2,5, 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 120, 8, 16, 96, 2, 5,
5,6,2,0,192,192,0,192,192,2,6,6,6,2,255,192, 5, 6, 2, 0, 192, 192, 0, 192, 192, 2, 6, 6, 6, 2, 255, 192,
192,0,192,64,128,4,7,7,6,0,0,16,32,64,128,64, 192, 0, 192, 64, 128, 4, 7, 7, 6, 0, 0, 16, 32, 64, 128, 64,
32,16,5,3,3,6,0,2,248,0,248,4,7,7,6,1, 32, 16, 5, 3, 3, 6, 0, 2, 248, 0, 248, 4, 7, 7, 6, 1,
0,128,64,32,16,32,64,128,5,7,7,6,0,0,112,136, 0, 128, 64, 32, 16, 32, 64, 128, 5, 7, 7, 6, 0, 0, 112, 136,
8,16,32,0,32,5,6,6,6,0,0,112,136,8,104,168, 8, 16, 32, 0, 32, 5, 6, 6, 6, 0, 0, 112, 136, 8, 104, 168,
112,5,7,7,6,0,0,112,136,136,248,136,136,136,5,7, 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 248, 136, 136, 136, 5, 7,
7,6,0,0,240,136,136,240,136,136,240,5,7,7,6,0, 7, 6, 0, 0, 240, 136, 136, 240, 136, 136, 240, 5, 7, 7, 6, 0,
0,112,136,128,128,128,136,112,5,7,7,6,0,0,224,144, 0, 112, 136, 128, 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 224, 144,
136,136,136,144,224,5,7,7,6,0,0,248,128,128,240,128, 136, 136, 136, 144, 224, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128,
128,248,5,7,7,6,0,0,248,128,128,240,128,128,128,5, 128, 248, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128, 128, 128, 5,
7,7,6,0,0,112,136,128,184,136,136,112,5,7,7,6, 7, 7, 6, 0, 0, 112, 136, 128, 184, 136, 136, 112, 5, 7, 7, 6,
0,0,136,136,136,248,136,136,136,1,7,7,6,2,0,128, 0, 0, 136, 136, 136, 248, 136, 136, 136, 1, 7, 7, 6, 2, 0, 128,
128,128,128,128,128,128,5,7,7,6,0,0,56,16,16,16, 128, 128, 128, 128, 128, 128, 5, 7, 7, 6, 0, 0, 56, 16, 16, 16,
16,144,96,5,7,7,6,0,0,136,144,160,192,160,144,136, 16, 144, 96, 5, 7, 7, 6, 0, 0, 136, 144, 160, 192, 160, 144, 136,
5,7,7,6,0,0,128,128,128,128,128,128,248,5,7,7, 5, 7, 7, 6, 0, 0, 128, 128, 128, 128, 128, 128, 248, 5, 7, 7,
6,0,0,136,216,168,136,136,136,136,5,7,7,6,0,0, 6, 0, 0, 136, 216, 168, 136, 136, 136, 136, 5, 7, 7, 6, 0, 0,
136,136,200,168,152,136,136,5,7,7,6,0,0,112,136,136, 136, 136, 200, 168, 152, 136, 136, 5, 7, 7, 6, 0, 0, 112, 136, 136,
136,136,136,112,5,7,7,6,0,0,240,136,136,240,128,128, 136, 136, 136, 112, 5, 7, 7, 6, 0, 0, 240, 136, 136, 240, 128, 128,
128,5,7,7,6,0,0,112,136,136,136,168,144,104,5,7, 128, 5, 7, 7, 6, 0, 0, 112, 136, 136, 136, 168, 144, 104, 5, 7,
7,6,0,0,240,136,136,240,160,144,136,5,7,7,6,0, 7, 6, 0, 0, 240, 136, 136, 240, 160, 144, 136, 5, 7, 7, 6, 0,
0,120,128,128,112,8,8,240,5,7,7,6,0,0,248,32, 0, 120, 128, 128, 112, 8, 8, 240, 5, 7, 7, 6, 0, 0, 248, 32,
32,32,32,32,32,5,7,7,6,0,0,136,136,136,136,136, 32, 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136,
136,112,5,7,7,6,0,0,136,136,136,136,136,80,32,5, 136, 112, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 80, 32, 5,
7,7,6,0,0,136,136,136,136,136,168,80,5,7,7,6, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 168, 80, 5, 7, 7, 6,
0,0,136,136,80,32,80,136,136,5,7,7,6,0,0,136, 0, 0, 136, 136, 80, 32, 80, 136, 136, 5, 7, 7, 6, 0, 0, 136,
136,136,80,32,32,32,5,7,7,6,0,0,248,8,16,32, 136, 136, 80, 32, 32, 32, 5, 7, 7, 6, 0, 0, 248, 8, 16, 32,
64,128,248,3,7,7,6,1,0,224,128,128,128,128,128,224, 64, 128, 248, 3, 7, 7, 6, 1, 0, 224, 128, 128, 128, 128, 128, 224,
5,7,7,6,0,0,136,80,248,32,248,32,32,3,7,7, 5, 7, 7, 6, 0, 0, 136, 80, 248, 32, 248, 32, 32, 3, 7, 7,
6,1,0,224,32,32,32,32,32,224,5,3,3,6,0,4, 6, 1, 0, 224, 32, 32, 32, 32, 32, 224, 5, 3, 3, 6, 0, 4,
32,80,136,5,1,1,6,0,0,248,2,2,2,6,2,5, 32, 80, 136, 5, 1, 1, 6, 0, 0, 248, 2, 2, 2, 6, 2, 5,
128,64,5,5,5,6,0,0,112,8,120,136,120,5,7,7, 128, 64, 5, 5, 5, 6, 0, 0, 112, 8, 120, 136, 120, 5, 7, 7,
6,0,0,128,128,176,200,136,136,240,5,5,5,6,0,0, 6, 0, 0, 128, 128, 176, 200, 136, 136, 240, 5, 5, 5, 6, 0, 0,
112,128,128,136,112,5,7,7,6,0,0,8,8,104,152,136, 112, 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 8, 8, 104, 152, 136,
136,120,5,5,5,6,0,0,112,136,248,128,112,5,7,7, 136, 120, 5, 5, 5, 6, 0, 0, 112, 136, 248, 128, 112, 5, 7, 7,
6,0,0,48,72,224,64,64,64,64,5,6,6,6,0,255, 6, 0, 0, 48, 72, 224, 64, 64, 64, 64, 5, 6, 6, 6, 0, 255,
112,136,136,120,8,112,5,7,7,6,0,0,128,128,176,200, 112, 136, 136, 120, 8, 112, 5, 7, 7, 6, 0, 0, 128, 128, 176, 200,
136,136,136,1,7,7,6,2,0,128,0,128,128,128,128,128, 136, 136, 136, 1, 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128,
3,8,8,6,1,255,32,0,32,32,32,32,160,64,4,7, 3, 8, 8, 6, 1, 255, 32, 0, 32, 32, 32, 32, 160, 64, 4, 7,
7,6,0,0,128,128,144,160,192,160,144,3,7,7,6,1, 7, 6, 0, 0, 128, 128, 144, 160, 192, 160, 144, 3, 7, 7, 6, 1,
0,192,64,64,64,64,64,224,5,5,5,6,0,0,208,168, 0, 192, 64, 64, 64, 64, 64, 224, 5, 5, 5, 6, 0, 0, 208, 168,
168,168,168,5,5,5,6,0,0,176,200,136,136,136,5,5, 168, 168, 168, 5, 5, 5, 6, 0, 0, 176, 200, 136, 136, 136, 5, 5,
5,6,0,0,112,136,136,136,112,5,6,6,6,0,255,240, 5, 6, 0, 0, 112, 136, 136, 136, 112, 5, 6, 6, 6, 0, 255, 240,
136,136,240,128,128,5,6,6,6,0,255,120,136,136,120,8, 136, 136, 240, 128, 128, 5, 6, 6, 6, 0, 255, 120, 136, 136, 120, 8,
8,5,5,5,6,0,0,176,200,128,128,128,5,5,5,6, 8, 5, 5, 5, 6, 0, 0, 176, 200, 128, 128, 128, 5, 5, 5, 6,
0,0,112,128,112,8,240,5,7,7,6,0,0,64,64,224, 0, 0, 112, 128, 112, 8, 240, 5, 7, 7, 6, 0, 0, 64, 64, 224,
64,64,72,48,5,5,5,6,0,0,136,136,136,152,104,5, 64, 64, 72, 48, 5, 5, 5, 6, 0, 0, 136, 136, 136, 152, 104, 5,
5,5,6,0,0,136,136,136,80,32,5,5,5,6,0,0, 5, 5, 6, 0, 0, 136, 136, 136, 80, 32, 5, 5, 5, 6, 0, 0,
136,136,168,168,80,5,5,5,6,0,0,136,80,32,80,136, 136, 136, 168, 168, 80, 5, 5, 5, 6, 0, 0, 136, 80, 32, 80, 136,
5,6,6,6,0,255,136,136,136,120,8,112,5,5,5,6, 5, 6, 6, 6, 0, 255, 136, 136, 136, 120, 8, 112, 5, 5, 5, 6,
0,0,248,16,32,64,248,3,7,7,6,1,0,32,64,64, 0, 0, 248, 16, 32, 64, 248, 3, 7, 7, 6, 1, 0, 32, 64, 64,
128,64,64,32,1,7,7,6,2,0,128,128,128,128,128,128, 128, 64, 64, 32, 1, 7, 7, 6, 2, 0, 128, 128, 128, 128, 128, 128,
128,3,7,7,6,1,0,128,64,64,32,64,64,128,5,5, 128, 3, 7, 7, 6, 1, 0, 128, 64, 64, 32, 64, 64, 128, 5, 5,
5,6,0,1,32,16,248,16,32,5,5,5,6,0,1,32, 5, 6, 0, 1, 32, 16, 248, 16, 32, 5, 5, 5, 6, 0, 1, 32,
64,248,64,32,0,0,0,6,0,8,0,0,0,6,0,8, 64, 248, 64, 32, 0, 0, 0, 6, 0, 8, 0, 0, 0, 6, 0, 8,
0,0,0,6,0,8,0,0,0,6,0,8,0,0,0,6, 0, 0, 0, 6, 0, 8, 0, 0, 0, 6, 0, 8, 0, 0, 0, 6,
0,8,0,0,0,6,0,8,0,0,0,6,0,8,0,0, 0, 8, 0, 0, 0, 6, 0, 8, 0, 0, 0, 6, 0, 8, 0, 0,
0,6,0,8,0,0,0,6,0,8,0,0,0,6,0,8, 0, 6, 0, 8, 0, 0, 0, 6, 0, 8, 0, 0, 0, 6, 0, 8,
0,0,0,6,0,8,0,0,0,6,0,8,0,0,0,6, 0, 0, 0, 6, 0, 8, 0, 0, 0, 6, 0, 8, 0, 0, 0, 6,
0,8,0,0,0,6,0,8,0,0,0,6,0,8,0,0, 0, 8, 0, 0, 0, 6, 0, 8, 0, 0, 0, 6, 0, 8, 0, 0,
0,6,0,8,0,0,0,6,0,8,0,0,0,6,0,8, 0, 6, 0, 8, 0, 0, 0, 6, 0, 8, 0, 0, 0, 6, 0, 8,
0,0,0,6,0,8,0,0,0,6,0,8,0,0,0,6, 0, 0, 0, 6, 0, 8, 0, 0, 0, 6, 0, 8, 0, 0, 0, 6,
0,8,0,0,0,6,0,8,0,0,0,6,0,8,0,0, 0, 8, 0, 0, 0, 6, 0, 8, 0, 0, 0, 6, 0, 8, 0, 0,
0,6,0,8,0,0,0,6,0,8,0,0,0,6,0,8, 0, 6, 0, 8, 0, 0, 0, 6, 0, 8, 0, 0, 0, 6, 0, 8,
0,0,0,6,0,8,0,0,0,6,0,8,0,0,0,6, 0, 0, 0, 6, 0, 8, 0, 0, 0, 6, 0, 8, 0, 0, 0, 6,
0,8,0,0,0,6,0,8,0,0,0,6,0,8,0,0, 0, 8, 0, 0, 0, 6, 0, 8, 0, 0, 0, 6, 0, 8, 0, 0,
0,6,0,8,0,0,0,6,0,8,3,3,3,6,0,0, 0, 6, 0, 8, 0, 0, 0, 6, 0, 8, 3, 3, 3, 6, 0, 0,
224,160,224,3,4,4,6,2,3,224,128,128,128,3,4,4, 224, 160, 224, 3, 4, 4, 6, 2, 3, 224, 128, 128, 128, 3, 4, 4,
6,0,0,32,32,32,224,3,3,3,6,0,0,128,64,32, 6, 0, 0, 32, 32, 32, 224, 3, 3, 3, 6, 0, 0, 128, 64, 32,
2,2,2,6,1,2,192,192,5,6,6,6,0,0,248,8, 2, 2, 2, 6, 1, 2, 192, 192, 5, 6, 6, 6, 0, 0, 248, 8,
248,8,16,32,5,5,5,6,0,0,248,8,48,32,64,4, 248, 8, 16, 32, 5, 5, 5, 6, 0, 0, 248, 8, 48, 32, 64, 4,
5,5,6,0,0,16,32,96,160,32,5,5,5,6,0,0, 5, 5, 6, 0, 0, 16, 32, 96, 160, 32, 5, 5, 5, 6, 0, 0,
32,248,136,8,48,5,4,4,6,0,0,248,32,32,248,5, 32, 248, 136, 8, 48, 5, 4, 4, 6, 0, 0, 248, 32, 32, 248, 5,
5,5,6,0,0,16,248,48,80,144,5,5,5,6,0,0, 5, 5, 6, 0, 0, 16, 248, 48, 80, 144, 5, 5, 5, 6, 0, 0,
64,248,72,80,64,5,4,4,6,0,0,112,16,16,248,4, 64, 248, 72, 80, 64, 5, 4, 4, 6, 0, 0, 112, 16, 16, 248, 4,
5,5,6,0,0,240,16,240,16,240,5,4,4,6,0,0, 5, 5, 6, 0, 0, 240, 16, 240, 16, 240, 5, 4, 4, 6, 0, 0,
168,168,8,48,5,1,1,6,0,4,248,5,7,7,6,0, 168, 168, 8, 48, 5, 1, 1, 6, 0, 4, 248, 5, 7, 7, 6, 0,
0,248,8,40,48,32,32,64,5,7,7,6,0,0,8,16, 0, 248, 8, 40, 48, 32, 32, 64, 5, 7, 7, 6, 0, 0, 8, 16,
32,96,160,32,32,5,7,7,6,0,0,32,248,136,136,8, 32, 96, 160, 32, 32, 5, 7, 7, 6, 0, 0, 32, 248, 136, 136, 8,
16,32,5,6,6,6,0,0,248,32,32,32,32,248,5,7, 16, 32, 5, 6, 6, 6, 0, 0, 248, 32, 32, 32, 32, 248, 5, 7,
7,6,0,0,16,248,16,48,80,144,16,5,7,7,6,0, 7, 6, 0, 0, 16, 248, 16, 48, 80, 144, 16, 5, 7, 7, 6, 0,
0,64,248,72,72,72,72,144,5,7,7,6,0,0,32,248, 0, 64, 248, 72, 72, 72, 72, 144, 5, 7, 7, 6, 0, 0, 32, 248,
32,248,32,32,32,5,6,6,6,0,0,120,72,136,8,16, 32, 248, 32, 32, 32, 5, 6, 6, 6, 0, 0, 120, 72, 136, 8, 16,
96,5,7,7,6,0,0,64,120,144,16,16,16,32,5,6, 96, 5, 7, 7, 6, 0, 0, 64, 120, 144, 16, 16, 16, 32, 5, 6,
6,6,0,0,248,8,8,8,8,248,5,7,7,6,0,0, 6, 6, 0, 0, 248, 8, 8, 8, 8, 248, 5, 7, 7, 6, 0, 0,
80,248,80,80,16,32,64,5,6,6,6,0,0,192,8,200, 80, 248, 80, 80, 16, 32, 64, 5, 6, 6, 6, 0, 0, 192, 8, 200,
8,16,224,5,6,6,6,0,0,248,8,16,32,80,136,5, 8, 16, 224, 5, 6, 6, 6, 0, 0, 248, 8, 16, 32, 80, 136, 5,
7,7,6,0,0,64,248,72,80,64,64,56,5,6,6,6, 7, 7, 6, 0, 0, 64, 248, 72, 80, 64, 64, 56, 5, 6, 6, 6,
0,0,136,136,72,8,16,96,5,6,6,6,0,0,120,72, 0, 0, 136, 136, 72, 8, 16, 96, 5, 6, 6, 6, 0, 0, 120, 72,
168,24,16,96,5,7,7,6,0,0,16,224,32,248,32,32, 168, 24, 16, 96, 5, 7, 7, 6, 0, 0, 16, 224, 32, 248, 32, 32,
64,5,6,6,6,0,0,168,168,168,8,16,32,5,7,7, 64, 5, 6, 6, 6, 0, 0, 168, 168, 168, 8, 16, 32, 5, 7, 7,
6,0,0,112,0,248,32,32,32,64,3,7,7,6,1,0, 6, 0, 0, 112, 0, 248, 32, 32, 32, 64, 3, 7, 7, 6, 1, 0,
128,128,128,192,160,128,128,5,7,7,6,0,0,32,32,248, 128, 128, 128, 192, 160, 128, 128, 5, 7, 7, 6, 0, 0, 32, 32, 248,
32,32,64,128,5,6,6,6,0,0,112,0,0,0,0,248, 32, 32, 64, 128, 5, 6, 6, 6, 0, 0, 112, 0, 0, 0, 0, 248,
5,6,6,6,0,0,248,8,80,32,80,128,5,6,6,6, 5, 6, 6, 6, 0, 0, 248, 8, 80, 32, 80, 128, 5, 6, 6, 6,
0,1,32,248,16,32,112,168,3,7,7,6,1,0,32,32, 0, 1, 32, 248, 16, 32, 112, 168, 3, 7, 7, 6, 1, 0, 32, 32,
32,32,32,64,128,5,6,6,6,0,0,32,16,136,136,136, 32, 32, 32, 64, 128, 5, 6, 6, 6, 0, 0, 32, 16, 136, 136, 136,
136,5,7,7,6,0,0,128,128,248,128,128,128,120,5,6, 136, 5, 7, 7, 6, 0, 0, 128, 128, 248, 128, 128, 128, 120, 5, 6,
6,6,0,0,248,8,8,8,16,96,5,5,5,6,0,1, 6, 6, 0, 0, 248, 8, 8, 8, 16, 96, 5, 5, 5, 6, 0, 1,
64,160,16,8,8,5,7,7,6,0,0,32,248,32,32,168, 64, 160, 16, 8, 8, 5, 7, 7, 6, 0, 0, 32, 248, 32, 32, 168,
168,32,5,6,6,6,0,0,248,8,8,80,32,16,4,6, 168, 32, 5, 6, 6, 6, 0, 0, 248, 8, 8, 80, 32, 16, 4, 6,
6,6,1,0,224,0,224,0,224,16,5,6,6,6,0,0, 6, 6, 1, 0, 224, 0, 224, 0, 224, 16, 5, 6, 6, 6, 0, 0,
32,64,128,136,248,8,5,6,6,6,0,0,8,8,80,32, 32, 64, 128, 136, 248, 8, 5, 6, 6, 6, 0, 0, 8, 8, 80, 32,
80,128,5,6,6,6,0,0,248,64,248,64,64,56,5,7, 80, 128, 5, 6, 6, 6, 0, 0, 248, 64, 248, 64, 64, 56, 5, 7,
7,6,0,0,64,64,248,72,80,64,64,5,7,7,6,0, 7, 6, 0, 0, 64, 64, 248, 72, 80, 64, 64, 5, 7, 7, 6, 0,
0,112,16,16,16,16,16,248,5,6,6,6,0,0,248,8, 0, 112, 16, 16, 16, 16, 16, 248, 5, 6, 6, 6, 0, 0, 248, 8,
248,8,8,248,5,7,7,6,0,0,112,0,248,8,8,16, 248, 8, 8, 248, 5, 7, 7, 6, 0, 0, 112, 0, 248, 8, 8, 16,
32,4,7,7,6,0,0,144,144,144,144,16,32,64,5,6, 32, 4, 7, 7, 6, 0, 0, 144, 144, 144, 144, 16, 32, 64, 5, 6,
6,6,0,0,32,160,160,168,168,176,5,7,7,6,0,0, 6, 6, 0, 0, 32, 160, 160, 168, 168, 176, 5, 7, 7, 6, 0, 0,
128,128,128,136,144,160,192,5,6,6,6,0,0,248,136,136, 128, 128, 128, 136, 144, 160, 192, 5, 6, 6, 6, 0, 0, 248, 136, 136,
136,136,248,5,6,6,6,0,0,248,136,136,8,16,32,5, 136, 136, 248, 5, 6, 6, 6, 0, 0, 248, 136, 136, 8, 16, 32, 5,
6,6,6,0,0,192,0,8,8,16,224,4,3,3,6,0, 6, 6, 6, 0, 0, 192, 0, 8, 8, 16, 224, 4, 3, 3, 6, 0,
4,32,144,64,3,3,3,6,0,4,224,160,224,5,5,5, 4, 32, 144, 64, 3, 3, 3, 6, 0, 4, 224, 160, 224, 5, 5, 5,
6,0,1,72,168,144,144,104,5,7,7,6,0,0,80,0, 6, 0, 1, 72, 168, 144, 144, 104, 5, 7, 7, 6, 0, 0, 80, 0,
112,8,120,136,120,4,8,8,6,1,255,96,144,144,224,144, 112, 8, 120, 136, 120, 4, 8, 8, 6, 1, 255, 96, 144, 144, 224, 144,
144,224,128,5,5,5,6,0,0,112,128,96,136,112,5,6, 144, 224, 128, 5, 5, 5, 6, 0, 0, 112, 128, 96, 136, 112, 5, 6,
6,6,0,255,136,136,152,232,136,128,5,5,5,6,0,0, 6, 6, 0, 255, 136, 136, 152, 232, 136, 128, 5, 5, 5, 6, 0, 0,
120,160,144,136,112,5,7,7,6,0,254,48,72,136,136,240, 120, 160, 144, 136, 112, 5, 7, 7, 6, 0, 254, 48, 72, 136, 136, 240,
128,128,5,8,8,6,0,254,120,136,136,136,120,8,8,112, 128, 128, 5, 8, 8, 6, 0, 254, 120, 136, 136, 136, 120, 8, 8, 112,
5,5,5,6,0,1,56,32,32,160,64,4,3,3,6,0, 5, 5, 5, 6, 0, 1, 56, 32, 32, 160, 64, 4, 3, 3, 6, 0,
3,16,208,16,4,8,8,6,0,255,16,0,48,16,16,16, 3, 16, 208, 16, 4, 8, 8, 6, 0, 255, 16, 0, 48, 16, 16, 16,
144,96,3,3,3,6,0,4,160,64,160,5,7,7,6,0, 144, 96, 3, 3, 3, 6, 0, 4, 160, 64, 160, 5, 7, 7, 6, 0,
0,32,112,160,160,168,112,32,5,7,7,6,0,0,64,64, 0, 32, 112, 160, 160, 168, 112, 32, 5, 7, 7, 6, 0, 0, 64, 64,
224,64,224,64,120,5,7,7,6,0,0,112,0,176,200,136, 224, 64, 224, 64, 120, 5, 7, 7, 6, 0, 0, 112, 0, 176, 200, 136,
136,136,5,7,7,6,0,0,80,0,112,136,136,136,112,5, 136, 136, 5, 7, 7, 6, 0, 0, 80, 0, 112, 136, 136, 136, 112, 5,
7,7,6,0,255,176,200,136,136,240,128,128,5,7,7,6, 7, 7, 6, 0, 255, 176, 200, 136, 136, 240, 128, 128, 5, 7, 7, 6,
0,255,104,152,136,136,120,8,8,5,6,6,6,0,0,112, 0, 255, 104, 152, 136, 136, 120, 8, 8, 5, 6, 6, 6, 0, 0, 112,
136,248,136,136,112,5,3,3,6,0,2,88,168,208,5,5, 136, 248, 136, 136, 112, 5, 3, 3, 6, 0, 2, 88, 168, 208, 5, 5,
5,6,0,0,112,136,136,80,216,5,7,7,6,0,0,80, 5, 6, 0, 0, 112, 136, 136, 80, 216, 5, 7, 7, 6, 0, 0, 80,
0,136,136,136,152,104,5,7,7,6,0,0,248,128,64,32, 0, 136, 136, 136, 152, 104, 5, 7, 7, 6, 0, 0, 248, 128, 64, 32,
64,128,248,5,5,5,6,0,0,248,80,80,80,152,5,7, 64, 128, 248, 5, 5, 5, 6, 0, 0, 248, 80, 80, 80, 152, 5, 7,
7,6,0,0,248,0,136,80,32,80,136,5,7,7,6,0, 7, 6, 0, 0, 248, 0, 136, 80, 32, 80, 136, 5, 7, 7, 6, 0,
255,136,136,136,136,120,8,112,5,6,6,6,0,1,8,240, 255, 136, 136, 136, 136, 120, 8, 112, 5, 6, 6, 6, 0, 1, 8, 240,
32,248,32,32,5,5,5,6,0,0,248,64,120,72,136,5, 32, 248, 32, 32, 5, 5, 5, 6, 0, 0, 248, 64, 120, 72, 136, 5,
5,5,6,0,0,248,168,248,136,136,5,5,5,6,0,1, 5, 5, 6, 0, 0, 248, 168, 248, 136, 136, 5, 5, 5, 6, 0, 1,
32,0,248,0,32,0,0,0,6,0,8,6,10,10,6,0, 32, 0, 248, 0, 32, 0, 0, 0, 6, 0, 8, 6, 10, 10, 6, 0,
254,252,252,252,252,252,252,252,252,252,252}; 254, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252
};
...@@ -9,195 +9,196 @@ ...@@ -9,195 +9,196 @@
X Font ascent = 7 descent=-1 X Font ascent = 7 descent=-1
Max Font ascent = 8 descent=-1 Max Font ascent = 8 descent=-1
*/ */
#include <utility/u8g.h> #include <U8glib.h>
const u8g_fntpgm_uint8_t HD44780_W_5x7[3034] U8G_SECTION(".progmem.HD44780_W_5x7") = { const u8g_fntpgm_uint8_t HD44780_W_5x7[3034] U8G_SECTION(".progmem.HD44780_W_5x7") = {
0,6,9,0,254,7,2,79,3,222,16,255,255,8,255,7, 0, 6, 9, 0, 254, 7, 2, 79, 3, 222, 16, 255, 255, 8, 255, 7,
255,4,7,7,6,0,0,16,48,112,240,112,48,16,4,7, 255, 4, 7, 7, 6, 0, 0, 16, 48, 112, 240, 112, 48, 16, 4, 7,
7,6,1,0,128,192,224,240,224,192,128,5,3,3,6,0, 7, 6, 1, 0, 128, 192, 224, 240, 224, 192, 128, 5, 3, 3, 6, 0,
4,216,72,144,5,3,3,6,0,4,216,144,72,5,7,7, 4, 216, 72, 144, 5, 3, 3, 6, 0, 4, 216, 144, 72, 5, 7, 7,
6,0,0,32,112,248,0,32,112,248,5,7,7,6,0,0, 6, 0, 0, 32, 112, 248, 0, 32, 112, 248, 5, 7, 7, 6, 0, 0,
248,112,32,0,248,112,32,5,5,5,6,0,1,112,248,248, 248, 112, 32, 0, 248, 112, 32, 5, 5, 5, 6, 0, 1, 112, 248, 248,
248,112,5,7,7,6,0,0,8,8,40,72,248,64,32,5, 248, 112, 5, 7, 7, 6, 0, 0, 8, 8, 40, 72, 248, 64, 32, 5,
7,7,6,0,0,32,112,168,32,32,32,32,5,7,7,6, 7, 7, 6, 0, 0, 32, 112, 168, 32, 32, 32, 32, 5, 7, 7, 6,
0,0,32,32,32,32,168,112,32,5,5,5,6,0,1,32, 0, 0, 32, 32, 32, 32, 168, 112, 32, 5, 5, 5, 6, 0, 1, 32,
64,248,64,32,5,5,5,6,0,1,32,16,248,16,32,5, 64, 248, 64, 32, 5, 5, 5, 6, 0, 1, 32, 16, 248, 16, 32, 5,
7,7,6,0,0,16,32,64,32,16,0,248,5,7,7,6, 7, 7, 6, 0, 0, 16, 32, 64, 32, 16, 0, 248, 5, 7, 7, 6,
0,0,64,32,16,32,64,0,248,5,5,5,6,0,1,32, 0, 0, 64, 32, 16, 32, 64, 0, 248, 5, 5, 5, 6, 0, 1, 32,
32,112,112,248,5,5,5,6,0,0,248,112,112,32,32,0, 32, 112, 112, 248, 5, 5, 5, 6, 0, 0, 248, 112, 112, 32, 32, 0,
0,0,6,0,0,1,7,7,6,2,0,128,128,128,128,128, 0, 0, 6, 0, 0, 1, 7, 7, 6, 2, 0, 128, 128, 128, 128, 128,
0,128,3,2,2,6,1,5,160,160,5,7,7,6,0,0, 0, 128, 3, 2, 2, 6, 1, 5, 160, 160, 5, 7, 7, 6, 0, 0,
80,80,248,80,248,80,80,5,7,7,6,0,0,32,120,160, 80, 80, 248, 80, 248, 80, 80, 5, 7, 7, 6, 0, 0, 32, 120, 160,
112,40,240,32,5,7,7,6,0,0,192,200,16,32,64,152, 112, 40, 240, 32, 5, 7, 7, 6, 0, 0, 192, 200, 16, 32, 64, 152,
24,5,7,7,6,0,0,96,144,160,64,168,144,104,2,3, 24, 5, 7, 7, 6, 0, 0, 96, 144, 160, 64, 168, 144, 104, 2, 3,
3,6,1,4,192,64,128,3,7,7,6,1,0,32,64,128, 3, 6, 1, 4, 192, 64, 128, 3, 7, 7, 6, 1, 0, 32, 64, 128,
128,128,64,32,3,7,7,6,1,0,128,64,32,32,32,64, 128, 128, 64, 32, 3, 7, 7, 6, 1, 0, 128, 64, 32, 32, 32, 64,
128,5,5,5,6,0,1,32,168,112,168,32,5,5,5,6, 128, 5, 5, 5, 6, 0, 1, 32, 168, 112, 168, 32, 5, 5, 5, 6,
0,1,32,32,248,32,32,2,3,3,6,2,255,192,64,128, 0, 1, 32, 32, 248, 32, 32, 2, 3, 3, 6, 2, 255, 192, 64, 128,
5,1,1,6,0,3,248,2,2,2,6,2,0,192,192,5, 5, 1, 1, 6, 0, 3, 248, 2, 2, 2, 6, 2, 0, 192, 192, 5,
5,5,6,0,1,8,16,32,64,128,5,7,7,6,0,0, 5, 5, 6, 0, 1, 8, 16, 32, 64, 128, 5, 7, 7, 6, 0, 0,
112,136,152,168,200,136,112,3,7,7,6,1,0,64,192,64, 112, 136, 152, 168, 200, 136, 112, 3, 7, 7, 6, 1, 0, 64, 192, 64,
64,64,64,224,5,7,7,6,0,0,112,136,8,112,128,128, 64, 64, 64, 224, 5, 7, 7, 6, 0, 0, 112, 136, 8, 112, 128, 128,
248,5,7,7,6,0,0,248,16,32,16,8,8,240,5,7, 248, 5, 7, 7, 6, 0, 0, 248, 16, 32, 16, 8, 8, 240, 5, 7,
7,6,0,0,16,48,80,144,248,16,16,5,7,7,6,0, 7, 6, 0, 0, 16, 48, 80, 144, 248, 16, 16, 5, 7, 7, 6, 0,
0,248,128,240,8,8,136,112,5,7,7,6,0,0,48,64, 0, 248, 128, 240, 8, 8, 136, 112, 5, 7, 7, 6, 0, 0, 48, 64,
128,240,136,136,112,5,7,7,6,0,0,248,8,16,32,32, 128, 240, 136, 136, 112, 5, 7, 7, 6, 0, 0, 248, 8, 16, 32, 32,
32,32,5,7,7,6,0,0,112,136,136,112,136,136,112,5, 32, 32, 5, 7, 7, 6, 0, 0, 112, 136, 136, 112, 136, 136, 112, 5,
7,7,6,0,0,112,136,136,120,8,16,96,2,5,5,6, 7, 7, 6, 0, 0, 112, 136, 136, 120, 8, 16, 96, 2, 5, 5, 6,
2,0,192,192,0,192,192,2,6,6,6,2,255,192,192,0, 2, 0, 192, 192, 0, 192, 192, 2, 6, 6, 6, 2, 255, 192, 192, 0,
192,64,128,4,7,7,6,0,0,16,32,64,128,64,32,16, 192, 64, 128, 4, 7, 7, 6, 0, 0, 16, 32, 64, 128, 64, 32, 16,
5,3,3,6,0,2,248,0,248,4,7,7,6,1,0,128, 5, 3, 3, 6, 0, 2, 248, 0, 248, 4, 7, 7, 6, 1, 0, 128,
64,32,16,32,64,128,5,7,7,6,0,0,112,136,8,16, 64, 32, 16, 32, 64, 128, 5, 7, 7, 6, 0, 0, 112, 136, 8, 16,
32,0,32,5,6,6,6,0,0,112,136,8,104,168,112,5, 32, 0, 32, 5, 6, 6, 6, 0, 0, 112, 136, 8, 104, 168, 112, 5,
7,7,6,0,0,112,136,136,248,136,136,136,5,7,7,6, 7, 7, 6, 0, 0, 112, 136, 136, 248, 136, 136, 136, 5, 7, 7, 6,
0,0,240,136,136,240,136,136,240,5,7,7,6,0,0,112, 0, 0, 240, 136, 136, 240, 136, 136, 240, 5, 7, 7, 6, 0, 0, 112,
136,128,128,128,136,112,5,7,7,6,0,0,224,144,136,136, 136, 128, 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 224, 144, 136, 136,
136,144,224,5,7,7,6,0,0,248,128,128,240,128,128,248, 136, 144, 224, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128, 128, 248,
5,7,7,6,0,0,248,128,128,240,128,128,128,5,7,7, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128, 128, 128, 5, 7, 7,
6,0,0,112,136,128,184,136,136,112,5,7,7,6,0,0, 6, 0, 0, 112, 136, 128, 184, 136, 136, 112, 5, 7, 7, 6, 0, 0,
136,136,136,248,136,136,136,1,7,7,6,2,0,128,128,128, 136, 136, 136, 248, 136, 136, 136, 1, 7, 7, 6, 2, 0, 128, 128, 128,
128,128,128,128,5,7,7,6,0,0,56,16,16,16,16,144, 128, 128, 128, 128, 5, 7, 7, 6, 0, 0, 56, 16, 16, 16, 16, 144,
96,5,7,7,6,0,0,136,144,160,192,160,144,136,5,7, 96, 5, 7, 7, 6, 0, 0, 136, 144, 160, 192, 160, 144, 136, 5, 7,
7,6,0,0,128,128,128,128,128,128,248,5,7,7,6,0, 7, 6, 0, 0, 128, 128, 128, 128, 128, 128, 248, 5, 7, 7, 6, 0,
0,136,216,168,136,136,136,136,5,7,7,6,0,0,136,136, 0, 136, 216, 168, 136, 136, 136, 136, 5, 7, 7, 6, 0, 0, 136, 136,
200,168,152,136,136,5,7,7,6,0,0,112,136,136,136,136, 200, 168, 152, 136, 136, 5, 7, 7, 6, 0, 0, 112, 136, 136, 136, 136,
136,112,5,7,7,6,0,0,240,136,136,240,128,128,128,5, 136, 112, 5, 7, 7, 6, 0, 0, 240, 136, 136, 240, 128, 128, 128, 5,
7,7,6,0,0,112,136,136,136,168,144,104,5,7,7,6, 7, 7, 6, 0, 0, 112, 136, 136, 136, 168, 144, 104, 5, 7, 7, 6,
0,0,240,136,136,240,160,144,136,5,7,7,6,0,0,120, 0, 0, 240, 136, 136, 240, 160, 144, 136, 5, 7, 7, 6, 0, 0, 120,
128,128,112,8,8,240,5,7,7,6,0,0,248,32,32,32, 128, 128, 112, 8, 8, 240, 5, 7, 7, 6, 0, 0, 248, 32, 32, 32,
32,32,32,5,7,7,6,0,0,136,136,136,136,136,136,112, 32, 32, 32, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 136, 112,
5,7,7,6,0,0,136,136,136,136,136,80,32,5,7,7, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 80, 32, 5, 7, 7,
6,0,0,136,136,136,136,136,168,80,5,7,7,6,0,0, 6, 0, 0, 136, 136, 136, 136, 136, 168, 80, 5, 7, 7, 6, 0, 0,
136,136,80,32,80,136,136,5,7,7,6,0,0,136,136,136, 136, 136, 80, 32, 80, 136, 136, 5, 7, 7, 6, 0, 0, 136, 136, 136,
80,32,32,32,5,7,7,6,0,0,248,8,16,32,64,128, 80, 32, 32, 32, 5, 7, 7, 6, 0, 0, 248, 8, 16, 32, 64, 128,
248,3,7,7,6,1,0,224,128,128,128,128,128,224,5,5, 248, 3, 7, 7, 6, 1, 0, 224, 128, 128, 128, 128, 128, 224, 5, 5,
5,6,0,1,128,64,32,16,8,3,7,7,6,1,0,224, 5, 6, 0, 1, 128, 64, 32, 16, 8, 3, 7, 7, 6, 1, 0, 224,
32,32,32,32,32,224,5,3,3,6,0,4,32,80,136,5, 32, 32, 32, 32, 32, 224, 5, 3, 3, 6, 0, 4, 32, 80, 136, 5,
1,1,6,0,0,248,2,2,2,6,2,5,128,64,5,5, 1, 1, 6, 0, 0, 248, 2, 2, 2, 6, 2, 5, 128, 64, 5, 5,
5,6,0,0,112,8,120,136,120,5,7,7,6,0,0,128, 5, 6, 0, 0, 112, 8, 120, 136, 120, 5, 7, 7, 6, 0, 0, 128,
128,176,200,136,136,240,5,5,5,6,0,0,112,128,128,136, 128, 176, 200, 136, 136, 240, 5, 5, 5, 6, 0, 0, 112, 128, 128, 136,
112,5,7,7,6,0,0,8,8,104,152,136,136,120,5,5, 112, 5, 7, 7, 6, 0, 0, 8, 8, 104, 152, 136, 136, 120, 5, 5,
5,6,0,0,112,136,248,128,112,5,7,7,6,0,0,48, 5, 6, 0, 0, 112, 136, 248, 128, 112, 5, 7, 7, 6, 0, 0, 48,
72,224,64,64,64,64,5,6,6,6,0,255,112,136,136,120, 72, 224, 64, 64, 64, 64, 5, 6, 6, 6, 0, 255, 112, 136, 136, 120,
8,112,5,7,7,6,0,0,128,128,176,200,136,136,136,1, 8, 112, 5, 7, 7, 6, 0, 0, 128, 128, 176, 200, 136, 136, 136, 1,
7,7,6,2,0,128,0,128,128,128,128,128,3,8,8,6, 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128, 3, 8, 8, 6,
1,255,32,0,32,32,32,32,160,64,4,7,7,6,0,0, 1, 255, 32, 0, 32, 32, 32, 32, 160, 64, 4, 7, 7, 6, 0, 0,
128,128,144,160,192,160,144,3,7,7,6,1,0,192,64,64, 128, 128, 144, 160, 192, 160, 144, 3, 7, 7, 6, 1, 0, 192, 64, 64,
64,64,64,224,5,5,5,6,0,0,208,168,168,168,168,5, 64, 64, 64, 224, 5, 5, 5, 6, 0, 0, 208, 168, 168, 168, 168, 5,
5,5,6,0,0,176,200,136,136,136,5,5,5,6,0,0, 5, 5, 6, 0, 0, 176, 200, 136, 136, 136, 5, 5, 5, 6, 0, 0,
112,136,136,136,112,5,6,6,6,0,255,240,136,136,240,128, 112, 136, 136, 136, 112, 5, 6, 6, 6, 0, 255, 240, 136, 136, 240, 128,
128,5,6,6,6,0,255,120,136,136,120,8,8,5,5,5, 128, 5, 6, 6, 6, 0, 255, 120, 136, 136, 120, 8, 8, 5, 5, 5,
6,0,0,176,200,128,128,128,5,5,5,6,0,0,112,128, 6, 0, 0, 176, 200, 128, 128, 128, 5, 5, 5, 6, 0, 0, 112, 128,
112,8,240,5,7,7,6,0,0,64,64,224,64,64,72,48, 112, 8, 240, 5, 7, 7, 6, 0, 0, 64, 64, 224, 64, 64, 72, 48,
5,5,5,6,0,0,136,136,136,152,104,5,5,5,6,0, 5, 5, 5, 6, 0, 0, 136, 136, 136, 152, 104, 5, 5, 5, 6, 0,
0,136,136,136,80,32,5,5,5,6,0,0,136,136,168,168, 0, 136, 136, 136, 80, 32, 5, 5, 5, 6, 0, 0, 136, 136, 168, 168,
80,5,5,5,6,0,0,136,80,32,80,136,5,6,6,6, 80, 5, 5, 5, 6, 0, 0, 136, 80, 32, 80, 136, 5, 6, 6, 6,
0,255,136,136,136,120,8,112,5,5,5,6,0,0,248,16, 0, 255, 136, 136, 136, 120, 8, 112, 5, 5, 5, 6, 0, 0, 248, 16,
32,64,248,3,7,7,6,1,0,32,64,64,128,64,64,32, 32, 64, 248, 3, 7, 7, 6, 1, 0, 32, 64, 64, 128, 64, 64, 32,
1,7,7,6,2,0,128,128,128,128,128,128,128,3,7,7, 1, 7, 7, 6, 2, 0, 128, 128, 128, 128, 128, 128, 128, 3, 7, 7,
6,1,0,128,64,64,32,64,64,128,5,6,6,6,0,1, 6, 1, 0, 128, 64, 64, 32, 64, 64, 128, 5, 6, 6, 6, 0, 1,
8,40,72,248,64,32,5,7,7,6,0,0,32,80,136,136, 8, 40, 72, 248, 64, 32, 5, 7, 7, 6, 0, 0, 32, 80, 136, 136,
136,136,248,5,7,7,6,0,0,248,136,128,240,136,136,240, 136, 136, 248, 5, 7, 7, 6, 0, 0, 248, 136, 128, 240, 136, 136, 240,
5,8,8,6,0,255,120,40,40,40,72,136,248,136,5,7, 5, 8, 8, 6, 0, 255, 120, 40, 40, 40, 72, 136, 248, 136, 5, 7,
7,6,0,0,168,168,168,112,168,168,168,5,7,7,6,0, 7, 6, 0, 0, 168, 168, 168, 112, 168, 168, 168, 5, 7, 7, 6, 0,
0,240,8,8,112,8,8,240,5,7,7,6,0,0,136,136, 0, 240, 8, 8, 112, 8, 8, 240, 5, 7, 7, 6, 0, 0, 136, 136,
152,168,200,136,136,5,8,8,6,0,0,80,32,136,152,168, 152, 168, 200, 136, 136, 5, 8, 8, 6, 0, 0, 80, 32, 136, 152, 168,
168,200,136,5,7,7,6,0,0,120,40,40,40,40,168,72, 168, 200, 136, 5, 7, 7, 6, 0, 0, 120, 40, 40, 40, 40, 168, 72,
5,7,7,6,0,0,248,136,136,136,136,136,136,5,7,7, 5, 7, 7, 6, 0, 0, 248, 136, 136, 136, 136, 136, 136, 5, 7, 7,
6,0,0,136,136,136,80,32,64,128,5,8,8,6,0,255, 6, 0, 0, 136, 136, 136, 80, 32, 64, 128, 5, 8, 8, 6, 0, 255,
136,136,136,136,136,136,248,8,5,7,7,6,0,0,136,136, 136, 136, 136, 136, 136, 136, 248, 8, 5, 7, 7, 6, 0, 0, 136, 136,
136,120,8,8,8,5,7,7,6,0,0,168,168,168,168,168, 136, 120, 8, 8, 8, 5, 7, 7, 6, 0, 0, 168, 168, 168, 168, 168,
168,248,5,8,8,6,0,255,168,168,168,168,168,168,248,8, 168, 248, 5, 8, 8, 6, 0, 255, 168, 168, 168, 168, 168, 168, 248, 8,
5,7,7,6,0,0,192,64,64,112,72,72,112,5,7,7, 5, 7, 7, 6, 0, 0, 192, 64, 64, 112, 72, 72, 112, 5, 7, 7,
6,0,0,136,136,136,200,168,168,200,5,7,7,6,0,0, 6, 0, 0, 136, 136, 136, 200, 168, 168, 200, 5, 7, 7, 6, 0, 0,
112,136,40,80,8,136,112,5,5,5,6,0,0,64,160,144, 112, 136, 40, 80, 8, 136, 112, 5, 5, 5, 6, 0, 0, 64, 160, 144,
144,104,5,7,7,6,0,0,32,48,40,40,32,224,224,5, 144, 104, 5, 7, 7, 6, 0, 0, 32, 48, 40, 40, 32, 224, 224, 5,
7,7,6,0,0,248,136,128,128,128,128,128,5,5,5,6, 7, 7, 6, 0, 0, 248, 136, 128, 128, 128, 128, 128, 5, 5, 5, 6,
0,0,248,80,80,80,152,5,7,7,6,0,0,248,128,64, 0, 0, 248, 80, 80, 80, 152, 5, 7, 7, 6, 0, 0, 248, 128, 64,
32,64,128,248,5,5,5,6,0,0,120,144,144,144,96,5, 32, 64, 128, 248, 5, 5, 5, 6, 0, 0, 120, 144, 144, 144, 96, 5,
7,7,6,0,0,48,40,56,40,200,216,24,5,6,6,6, 7, 7, 6, 0, 0, 48, 40, 56, 40, 200, 216, 24, 5, 6, 6, 6,
0,0,8,112,160,32,32,16,5,6,6,6,0,1,32,112, 0, 0, 8, 112, 160, 32, 32, 16, 5, 6, 6, 6, 0, 1, 32, 112,
112,112,248,32,5,7,7,6,0,0,112,136,136,248,136,136, 112, 112, 248, 32, 5, 7, 7, 6, 0, 0, 112, 136, 136, 248, 136, 136,
112,5,5,5,6,0,0,112,136,136,80,216,5,7,7,6, 112, 5, 5, 5, 6, 0, 0, 112, 136, 136, 80, 216, 5, 7, 7, 6,
0,0,48,72,32,80,136,136,112,5,3,3,6,0,2,88, 0, 0, 48, 72, 32, 80, 136, 136, 112, 5, 3, 3, 6, 0, 2, 88,
168,208,5,6,6,6,0,0,80,248,248,248,112,32,5,5, 168, 208, 5, 6, 6, 6, 0, 0, 80, 248, 248, 248, 112, 32, 5, 5,
5,6,0,0,112,128,96,136,112,5,7,7,6,0,0,112, 5, 6, 0, 0, 112, 128, 96, 136, 112, 5, 7, 7, 6, 0, 0, 112,
136,136,136,136,136,136,5,7,7,6,0,0,216,216,216,216, 136, 136, 136, 136, 136, 136, 5, 7, 7, 6, 0, 0, 216, 216, 216, 216,
216,216,216,1,7,7,6,2,0,128,0,128,128,128,128,128, 216, 216, 216, 1, 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128,
5,7,7,6,0,0,32,112,160,160,168,112,32,5,7,7, 5, 7, 7, 6, 0, 0, 32, 112, 160, 160, 168, 112, 32, 5, 7, 7,
6,0,0,48,64,64,224,64,80,168,5,5,5,6,0,0, 6, 0, 0, 48, 64, 64, 224, 64, 80, 168, 5, 5, 5, 6, 0, 0,
136,112,80,112,136,5,7,7,6,0,0,136,80,248,32,248, 136, 112, 80, 112, 136, 5, 7, 7, 6, 0, 0, 136, 80, 248, 32, 248,
32,32,1,7,7,6,2,0,128,128,128,0,128,128,128,5, 32, 32, 1, 7, 7, 6, 2, 0, 128, 128, 128, 0, 128, 128, 128, 5,
8,8,6,0,0,48,72,32,80,80,32,144,96,5,7,7, 8, 8, 6, 0, 0, 48, 72, 32, 80, 80, 32, 144, 96, 5, 7, 7,
6,0,0,24,32,32,112,32,32,192,5,7,7,6,0,0, 6, 0, 0, 24, 32, 32, 112, 32, 32, 192, 5, 7, 7, 6, 0, 0,
248,136,184,184,184,136,248,5,7,7,6,0,0,112,8,120, 248, 136, 184, 184, 184, 136, 248, 5, 7, 7, 6, 0, 0, 112, 8, 120,
136,120,0,248,5,5,5,6,0,1,40,80,160,80,40,5, 136, 120, 0, 248, 5, 5, 5, 6, 0, 1, 40, 80, 160, 80, 40, 5,
7,7,6,0,0,144,168,168,232,168,168,144,5,7,7,6, 7, 7, 6, 0, 0, 144, 168, 168, 232, 168, 168, 144, 5, 7, 7, 6,
0,0,120,136,136,120,40,72,136,5,7,7,6,0,0,248, 0, 0, 120, 136, 136, 120, 40, 72, 136, 5, 7, 7, 6, 0, 0, 248,
136,168,136,152,168,248,2,3,3,6,2,4,64,128,192,4, 136, 168, 136, 152, 168, 248, 2, 3, 3, 6, 2, 4, 64, 128, 192, 4,
5,5,6,0,3,96,144,144,144,96,5,7,7,6,0,0, 5, 5, 6, 0, 3, 96, 144, 144, 144, 96, 5, 7, 7, 6, 0, 0,
32,32,248,32,32,0,248,4,5,5,6,0,3,96,144,32, 32, 32, 248, 32, 32, 0, 248, 4, 5, 5, 6, 0, 3, 96, 144, 32,
64,240,3,5,5,6,0,3,224,32,224,32,224,5,8,8, 64, 240, 3, 5, 5, 6, 0, 3, 224, 32, 224, 32, 224, 5, 8, 8,
6,0,0,224,144,224,128,144,184,144,24,5,8,8,6,0, 6, 0, 0, 224, 144, 224, 128, 144, 184, 144, 24, 5, 8, 8, 6, 0,
255,136,136,136,136,152,232,128,128,5,7,7,6,0,0,120, 255, 136, 136, 136, 136, 152, 232, 128, 128, 5, 7, 7, 6, 0, 0, 120,
152,152,120,24,24,24,2,2,2,6,2,2,192,192,5,5, 152, 152, 120, 24, 24, 24, 2, 2, 2, 6, 2, 2, 192, 192, 5, 5,
5,6,0,0,80,136,168,168,80,3,5,5,6,0,3,64, 5, 6, 0, 0, 80, 136, 168, 168, 80, 3, 5, 5, 6, 0, 3, 64,
192,64,64,224,5,7,7,6,0,0,112,136,136,136,112,0, 192, 64, 64, 224, 5, 7, 7, 6, 0, 0, 112, 136, 136, 136, 112, 0,
248,5,5,5,6,0,1,160,80,40,80,160,5,7,7,6, 248, 5, 5, 5, 6, 0, 1, 160, 80, 40, 80, 160, 5, 7, 7, 6,
0,0,136,144,168,88,184,8,8,5,7,7,6,0,0,136, 0, 0, 136, 144, 168, 88, 184, 8, 8, 5, 7, 7, 6, 0, 0, 136,
144,184,72,152,32,56,5,8,8,6,0,0,192,64,192,72, 144, 184, 72, 152, 32, 56, 5, 8, 8, 6, 0, 0, 192, 64, 192, 72,
216,56,8,8,5,7,7,6,0,0,32,0,32,64,128,136, 216, 56, 8, 8, 5, 7, 7, 6, 0, 0, 32, 0, 32, 64, 128, 136,
112,5,8,8,6,0,0,64,32,32,80,136,248,136,136,5, 112, 5, 8, 8, 6, 0, 0, 64, 32, 32, 80, 136, 248, 136, 136, 5,
8,8,6,0,0,16,32,32,80,136,248,136,136,5,8,8, 8, 8, 6, 0, 0, 16, 32, 32, 80, 136, 248, 136, 136, 5, 8, 8,
6,0,0,32,80,0,112,136,248,136,136,5,8,8,6,0, 6, 0, 0, 32, 80, 0, 112, 136, 248, 136, 136, 5, 8, 8, 6, 0,
0,104,144,0,112,136,248,136,136,5,8,8,6,0,0,80, 0, 104, 144, 0, 112, 136, 248, 136, 136, 5, 8, 8, 6, 0, 0, 80,
0,32,80,136,248,136,136,5,8,8,6,0,0,32,80,32, 0, 32, 80, 136, 248, 136, 136, 5, 8, 8, 6, 0, 0, 32, 80, 32,
112,136,248,136,136,5,7,7,6,0,0,56,96,160,184,224, 112, 136, 248, 136, 136, 5, 7, 7, 6, 0, 0, 56, 96, 160, 184, 224,
160,184,5,8,8,6,0,255,112,136,128,128,136,112,32,96, 160, 184, 5, 8, 8, 6, 0, 255, 112, 136, 128, 128, 136, 112, 32, 96,
5,8,8,6,0,0,64,32,0,248,128,240,128,248,5,8, 5, 8, 8, 6, 0, 0, 64, 32, 0, 248, 128, 240, 128, 248, 5, 8,
8,6,0,0,8,16,0,248,128,240,128,248,5,8,8,6, 8, 6, 0, 0, 8, 16, 0, 248, 128, 240, 128, 248, 5, 8, 8, 6,
0,0,32,80,0,248,128,240,128,248,5,7,7,6,0,0, 0, 0, 32, 80, 0, 248, 128, 240, 128, 248, 5, 7, 7, 6, 0, 0,
80,0,248,128,240,128,248,3,8,8,6,1,0,128,64,0, 80, 0, 248, 128, 240, 128, 248, 3, 8, 8, 6, 1, 0, 128, 64, 0,
224,64,64,64,224,3,8,8,6,1,0,32,64,0,224,64, 224, 64, 64, 64, 224, 3, 8, 8, 6, 1, 0, 32, 64, 0, 224, 64,
64,64,224,3,8,8,6,1,0,64,160,0,224,64,64,64, 64, 64, 224, 3, 8, 8, 6, 1, 0, 64, 160, 0, 224, 64, 64, 64,
224,3,7,7,6,1,0,160,0,224,64,64,64,224,5,7, 224, 3, 7, 7, 6, 1, 0, 160, 0, 224, 64, 64, 64, 224, 5, 7,
7,6,0,0,112,72,72,232,72,72,112,5,8,8,6,0, 7, 6, 0, 0, 112, 72, 72, 232, 72, 72, 112, 5, 8, 8, 6, 0,
0,104,144,0,136,200,168,152,136,5,8,8,6,0,0,64, 0, 104, 144, 0, 136, 200, 168, 152, 136, 5, 8, 8, 6, 0, 0, 64,
32,112,136,136,136,136,112,5,8,8,6,0,0,16,32,112, 32, 112, 136, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 16, 32, 112,
136,136,136,136,112,5,8,8,6,0,0,32,80,0,112,136, 136, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 32, 80, 0, 112, 136,
136,136,112,5,8,8,6,0,0,104,144,0,112,136,136,136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 104, 144, 0, 112, 136, 136, 136,
112,5,8,8,6,0,0,80,0,112,136,136,136,136,112,5, 112, 5, 8, 8, 6, 0, 0, 80, 0, 112, 136, 136, 136, 136, 112, 5,
5,5,6,0,1,136,80,32,80,136,5,7,7,6,0,0, 5, 5, 6, 0, 1, 136, 80, 32, 80, 136, 5, 7, 7, 6, 0, 0,
112,32,112,168,112,32,112,5,8,8,6,0,0,64,32,136, 112, 32, 112, 168, 112, 32, 112, 5, 8, 8, 6, 0, 0, 64, 32, 136,
136,136,136,136,112,5,8,8,6,0,0,16,32,136,136,136, 136, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 16, 32, 136, 136, 136,
136,136,112,5,8,8,6,0,0,32,80,0,136,136,136,136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 32, 80, 0, 136, 136, 136, 136,
112,5,8,8,6,0,0,80,0,136,136,136,136,136,112,5, 112, 5, 8, 8, 6, 0, 0, 80, 0, 136, 136, 136, 136, 136, 112, 5,
8,8,6,0,0,16,32,136,80,32,32,32,32,5,8,8, 8, 8, 6, 0, 0, 16, 32, 136, 80, 32, 32, 32, 32, 5, 8, 8,
6,0,0,192,64,112,72,72,112,64,224,5,7,7,6,0, 6, 0, 0, 192, 64, 112, 72, 72, 112, 64, 224, 5, 7, 7, 6, 0,
0,48,72,72,112,72,72,176,5,8,8,6,0,0,64,32, 0, 48, 72, 72, 112, 72, 72, 176, 5, 8, 8, 6, 0, 0, 64, 32,
0,112,8,120,136,120,5,8,8,6,0,0,16,32,0,112, 0, 112, 8, 120, 136, 120, 5, 8, 8, 6, 0, 0, 16, 32, 0, 112,
8,120,136,120,5,8,8,6,0,0,32,80,0,112,8,120, 8, 120, 136, 120, 5, 8, 8, 6, 0, 0, 32, 80, 0, 112, 8, 120,
136,120,5,8,8,6,0,0,104,144,0,112,8,120,136,120, 136, 120, 5, 8, 8, 6, 0, 0, 104, 144, 0, 112, 8, 120, 136, 120,
5,7,7,6,0,0,80,0,112,8,120,136,120,5,8,8, 5, 7, 7, 6, 0, 0, 80, 0, 112, 8, 120, 136, 120, 5, 8, 8,
6,0,0,32,80,32,112,8,120,136,120,5,6,6,6,0, 6, 0, 0, 32, 80, 32, 112, 8, 120, 136, 120, 5, 6, 6, 6, 0,
0,208,40,120,160,168,80,5,6,6,6,0,255,112,128,136, 0, 208, 40, 120, 160, 168, 80, 5, 6, 6, 6, 0, 255, 112, 128, 136,
112,32,96,5,8,8,6,0,0,64,32,0,112,136,248,128, 112, 32, 96, 5, 8, 8, 6, 0, 0, 64, 32, 0, 112, 136, 248, 128,
112,5,8,8,6,0,0,16,32,0,112,136,248,128,112,5, 112, 5, 8, 8, 6, 0, 0, 16, 32, 0, 112, 136, 248, 128, 112, 5,
8,8,6,0,0,32,80,0,112,136,248,128,112,5,7,7, 8, 8, 6, 0, 0, 32, 80, 0, 112, 136, 248, 128, 112, 5, 7, 7,
6,0,0,80,0,112,136,248,128,112,3,8,8,6,1,0, 6, 0, 0, 80, 0, 112, 136, 248, 128, 112, 3, 8, 8, 6, 1, 0,
128,64,0,64,192,64,64,224,3,8,8,6,1,0,32,64, 128, 64, 0, 64, 192, 64, 64, 224, 3, 8, 8, 6, 1, 0, 32, 64,
0,64,192,64,64,224,3,8,8,6,1,0,64,160,0,64, 0, 64, 192, 64, 64, 224, 3, 8, 8, 6, 1, 0, 64, 160, 0, 64,
192,64,64,224,3,7,7,6,1,0,160,0,64,192,64,64, 192, 64, 64, 224, 3, 7, 7, 6, 1, 0, 160, 0, 64, 192, 64, 64,
224,5,7,7,6,0,0,160,64,160,16,120,136,112,5,8, 224, 5, 7, 7, 6, 0, 0, 160, 64, 160, 16, 120, 136, 112, 5, 8,
8,6,0,0,104,144,0,176,200,136,136,136,5,8,8,6, 8, 6, 0, 0, 104, 144, 0, 176, 200, 136, 136, 136, 5, 8, 8, 6,
0,0,64,32,0,112,136,136,136,112,5,8,8,6,0,0, 0, 0, 64, 32, 0, 112, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0,
16,32,0,112,136,136,136,112,5,8,8,6,0,0,32,80, 16, 32, 0, 112, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 32, 80,
0,112,136,136,136,112,5,8,8,6,0,0,104,144,0,112, 0, 112, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 104, 144, 0, 112,
136,136,136,112,5,7,7,6,0,0,80,0,112,136,136,136, 136, 136, 136, 112, 5, 7, 7, 6, 0, 0, 80, 0, 112, 136, 136, 136,
112,5,5,5,6,0,1,32,0,248,0,32,5,7,7,6, 112, 5, 5, 5, 6, 0, 1, 32, 0, 248, 0, 32, 5, 7, 7, 6,
0,0,16,32,112,168,112,32,64,5,8,8,6,0,0,64, 0, 0, 16, 32, 112, 168, 112, 32, 64, 5, 8, 8, 6, 0, 0, 64,
32,0,136,136,136,152,104,5,8,8,6,0,0,16,32,0, 32, 0, 136, 136, 136, 152, 104, 5, 8, 8, 6, 0, 0, 16, 32, 0,
136,136,136,152,104,5,8,8,6,0,0,32,80,0,136,136, 136, 136, 136, 152, 104, 5, 8, 8, 6, 0, 0, 32, 80, 0, 136, 136,
136,152,104,5,7,7,6,0,0,80,0,136,136,136,152,104, 136, 152, 104, 5, 7, 7, 6, 0, 0, 80, 0, 136, 136, 136, 152, 104,
5,9,9,6,0,255,16,32,0,136,136,136,248,8,112,4, 5, 9, 9, 6, 0, 255, 16, 32, 0, 136, 136, 136, 248, 8, 112, 4,
7,7,6,1,0,192,64,96,80,96,64,224,5,8,8,6, 7, 7, 6, 1, 0, 192, 64, 96, 80, 96, 64, 224, 5, 8, 8, 6,
0,255,80,0,136,136,136,248,8,112}; 0, 255, 80, 0, 136, 136, 136, 248, 8, 112
};
...@@ -9,168 +9,168 @@ ...@@ -9,168 +9,168 @@
X Font ascent = 7 descent=-1 X Font ascent = 7 descent=-1
Max Font ascent = 8 descent=-1 Max Font ascent = 8 descent=-1
*/ */
#include <utility/u8g.h> #include <U8glib.h>
const u8g_fntpgm_uint8_t ISO10646_1_5x7[2592] U8G_SECTION(".progmem.ISO10646_1_5x7") = { const u8g_fntpgm_uint8_t ISO10646_1_5x7[2592] U8G_SECTION(".progmem.ISO10646_1_5x7") = {
0,6,9,0,254,7,1,146,3,33,32,255,255,8,255,7, 0, 6, 9, 0, 254, 7, 1, 146, 3, 33, 32, 255, 255, 8, 255, 7,
255,0,0,0,6,0,0,1,7,7,6,2,0,128,128,128, 255, 0, 0, 0, 6, 0, 0, 1, 7, 7, 6, 2, 0, 128, 128, 128,
128,128,0,128,3,2,2,6,1,5,160,160,5,7,7,6, 128, 128, 0, 128, 3, 2, 2, 6, 1, 5, 160, 160, 5, 7, 7, 6,
0,0,80,80,248,80,248,80,80,5,7,7,6,0,0,32, 0, 0, 80, 80, 248, 80, 248, 80, 80, 5, 7, 7, 6, 0, 0, 32,
120,160,112,40,240,32,5,7,7,6,0,0,192,200,16,32, 120, 160, 112, 40, 240, 32, 5, 7, 7, 6, 0, 0, 192, 200, 16, 32,
64,152,24,5,7,7,6,0,0,96,144,160,64,168,144,104, 64, 152, 24, 5, 7, 7, 6, 0, 0, 96, 144, 160, 64, 168, 144, 104,
2,3,3,6,1,4,192,64,128,3,7,7,6,1,0,32, 2, 3, 3, 6, 1, 4, 192, 64, 128, 3, 7, 7, 6, 1, 0, 32,
64,128,128,128,64,32,3,7,7,6,1,0,128,64,32,32, 64, 128, 128, 128, 64, 32, 3, 7, 7, 6, 1, 0, 128, 64, 32, 32,
32,64,128,5,5,5,6,0,1,32,168,112,168,32,5,5, 32, 64, 128, 5, 5, 5, 6, 0, 1, 32, 168, 112, 168, 32, 5, 5,
5,6,0,1,32,32,248,32,32,2,3,3,6,2,255,192, 5, 6, 0, 1, 32, 32, 248, 32, 32, 2, 3, 3, 6, 2, 255, 192,
64,128,5,1,1,6,0,3,248,2,2,2,6,2,0,192, 64, 128, 5, 1, 1, 6, 0, 3, 248, 2, 2, 2, 6, 2, 0, 192,
192,5,5,5,6,0,1,8,16,32,64,128,5,7,7,6, 192, 5, 5, 5, 6, 0, 1, 8, 16, 32, 64, 128, 5, 7, 7, 6,
0,0,112,136,136,136,136,136,112,3,7,7,6,1,0,64, 0, 0, 112, 136, 136, 136, 136, 136, 112, 3, 7, 7, 6, 1, 0, 64,
192,64,64,64,64,224,5,7,7,6,0,0,112,136,8,112, 192, 64, 64, 64, 64, 224, 5, 7, 7, 6, 0, 0, 112, 136, 8, 112,
128,128,248,5,7,7,6,0,0,248,16,32,16,8,8,240, 128, 128, 248, 5, 7, 7, 6, 0, 0, 248, 16, 32, 16, 8, 8, 240,
5,7,7,6,0,0,16,48,80,144,248,16,16,5,7,7, 5, 7, 7, 6, 0, 0, 16, 48, 80, 144, 248, 16, 16, 5, 7, 7,
6,0,0,248,128,240,8,8,136,112,5,7,7,6,0,0, 6, 0, 0, 248, 128, 240, 8, 8, 136, 112, 5, 7, 7, 6, 0, 0,
112,128,128,240,136,136,112,5,7,7,6,0,0,248,8,16, 112, 128, 128, 240, 136, 136, 112, 5, 7, 7, 6, 0, 0, 248, 8, 16,
32,32,32,32,5,7,7,6,0,0,112,136,136,112,136,136, 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 112, 136, 136, 112, 136, 136,
112,5,7,7,6,0,0,112,136,136,120,8,8,112,2,5, 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 120, 8, 8, 112, 2, 5,
5,6,2,0,192,192,0,192,192,2,6,6,6,2,255,192, 5, 6, 2, 0, 192, 192, 0, 192, 192, 2, 6, 6, 6, 2, 255, 192,
192,0,192,64,128,4,7,7,6,0,0,16,32,64,128,64, 192, 0, 192, 64, 128, 4, 7, 7, 6, 0, 0, 16, 32, 64, 128, 64,
32,16,5,3,3,6,0,2,248,0,248,4,7,7,6,1, 32, 16, 5, 3, 3, 6, 0, 2, 248, 0, 248, 4, 7, 7, 6, 1,
0,128,64,32,16,32,64,128,5,7,7,6,0,0,112,136, 0, 128, 64, 32, 16, 32, 64, 128, 5, 7, 7, 6, 0, 0, 112, 136,
8,16,32,0,32,5,7,7,6,0,0,112,136,8,104,168, 8, 16, 32, 0, 32, 5, 7, 7, 6, 0, 0, 112, 136, 8, 104, 168,
168,112,5,7,7,6,0,0,112,136,136,248,136,136,136,5, 168, 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 248, 136, 136, 136, 5,
7,7,6,0,0,240,136,136,240,136,136,240,5,7,7,6, 7, 7, 6, 0, 0, 240, 136, 136, 240, 136, 136, 240, 5, 7, 7, 6,
0,0,112,136,128,128,128,136,112,5,7,7,6,0,0,240, 0, 0, 112, 136, 128, 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 240,
136,136,136,136,136,240,5,7,7,6,0,0,248,128,128,240, 136, 136, 136, 136, 136, 240, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240,
128,128,248,5,7,7,6,0,0,248,128,128,240,128,128,128, 128, 128, 248, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128, 128, 128,
5,7,7,6,0,0,112,136,128,184,136,136,112,5,7,7, 5, 7, 7, 6, 0, 0, 112, 136, 128, 184, 136, 136, 112, 5, 7, 7,
6,0,0,136,136,136,248,136,136,136,1,7,7,6,2,0, 6, 0, 0, 136, 136, 136, 248, 136, 136, 136, 1, 7, 7, 6, 2, 0,
128,128,128,128,128,128,128,5,7,7,6,0,0,56,16,16, 128, 128, 128, 128, 128, 128, 128, 5, 7, 7, 6, 0, 0, 56, 16, 16,
16,16,144,96,5,7,7,6,0,0,136,144,160,192,160,144, 16, 16, 144, 96, 5, 7, 7, 6, 0, 0, 136, 144, 160, 192, 160, 144,
136,5,7,7,6,0,0,128,128,128,128,128,128,248,5,7, 136, 5, 7, 7, 6, 0, 0, 128, 128, 128, 128, 128, 128, 248, 5, 7,
7,6,0,0,136,216,168,136,136,136,136,5,7,7,6,0, 7, 6, 0, 0, 136, 216, 168, 136, 136, 136, 136, 5, 7, 7, 6, 0,
0,136,136,200,168,152,136,136,5,7,7,6,0,0,112,136, 0, 136, 136, 200, 168, 152, 136, 136, 5, 7, 7, 6, 0, 0, 112, 136,
136,136,136,136,112,5,7,7,6,0,0,240,136,136,240,128, 136, 136, 136, 136, 112, 5, 7, 7, 6, 0, 0, 240, 136, 136, 240, 128,
128,128,5,7,7,6,0,0,112,136,136,136,168,144,104,5, 128, 128, 5, 7, 7, 6, 0, 0, 112, 136, 136, 136, 168, 144, 104, 5,
7,7,6,0,0,240,136,136,240,160,144,136,5,7,7,6, 7, 7, 6, 0, 0, 240, 136, 136, 240, 160, 144, 136, 5, 7, 7, 6,
0,0,120,128,128,112,8,8,240,5,7,7,6,0,0,248, 0, 0, 120, 128, 128, 112, 8, 8, 240, 5, 7, 7, 6, 0, 0, 248,
32,32,32,32,32,32,5,7,7,6,0,0,136,136,136,136, 32, 32, 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136,
136,136,112,5,7,7,6,0,0,136,136,136,136,136,80,32, 136, 136, 112, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 80, 32,
5,7,7,6,0,0,136,136,136,136,136,168,80,5,7,7, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 168, 80, 5, 7, 7,
6,0,0,136,136,80,32,80,136,136,5,7,7,6,0,0, 6, 0, 0, 136, 136, 80, 32, 80, 136, 136, 5, 7, 7, 6, 0, 0,
136,136,136,80,32,32,32,5,7,7,6,0,0,248,8,16, 136, 136, 136, 80, 32, 32, 32, 5, 7, 7, 6, 0, 0, 248, 8, 16,
32,64,128,248,3,7,7,6,1,0,224,128,128,128,128,128, 32, 64, 128, 248, 3, 7, 7, 6, 1, 0, 224, 128, 128, 128, 128, 128,
224,5,5,5,6,0,1,128,64,32,16,8,3,7,7,6, 224, 5, 5, 5, 6, 0, 1, 128, 64, 32, 16, 8, 3, 7, 7, 6,
1,0,224,32,32,32,32,32,224,5,3,3,6,0,4,32, 1, 0, 224, 32, 32, 32, 32, 32, 224, 5, 3, 3, 6, 0, 4, 32,
80,136,5,1,1,6,0,0,248,2,2,2,6,2,5,128, 80, 136, 5, 1, 1, 6, 0, 0, 248, 2, 2, 2, 6, 2, 5, 128,
64,5,5,5,6,0,0,112,8,120,136,120,5,7,7,6, 64, 5, 5, 5, 6, 0, 0, 112, 8, 120, 136, 120, 5, 7, 7, 6,
0,0,128,128,176,200,136,136,240,5,5,5,6,0,0,112, 0, 0, 128, 128, 176, 200, 136, 136, 240, 5, 5, 5, 6, 0, 0, 112,
128,128,136,112,5,7,7,6,0,0,8,8,104,152,136,136, 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 8, 8, 104, 152, 136, 136,
120,5,5,5,6,0,0,112,136,248,128,112,5,7,7,6, 120, 5, 5, 5, 6, 0, 0, 112, 136, 248, 128, 112, 5, 7, 7, 6,
0,0,48,72,224,64,64,64,64,5,6,6,6,0,255,112, 0, 0, 48, 72, 224, 64, 64, 64, 64, 5, 6, 6, 6, 0, 255, 112,
136,136,120,8,112,5,7,7,6,0,0,128,128,176,200,136, 136, 136, 120, 8, 112, 5, 7, 7, 6, 0, 0, 128, 128, 176, 200, 136,
136,136,1,7,7,6,2,0,128,0,128,128,128,128,128,3, 136, 136, 1, 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128, 3,
8,8,6,1,255,32,0,32,32,32,32,160,64,4,7,7, 8, 8, 6, 1, 255, 32, 0, 32, 32, 32, 32, 160, 64, 4, 7, 7,
6,0,0,128,128,144,160,192,160,144,3,7,7,6,1,0, 6, 0, 0, 128, 128, 144, 160, 192, 160, 144, 3, 7, 7, 6, 1, 0,
192,64,64,64,64,64,224,5,5,5,6,0,0,208,168,168, 192, 64, 64, 64, 64, 64, 224, 5, 5, 5, 6, 0, 0, 208, 168, 168,
168,168,5,5,5,6,0,0,176,200,136,136,136,5,5,5, 168, 168, 5, 5, 5, 6, 0, 0, 176, 200, 136, 136, 136, 5, 5, 5,
6,0,0,112,136,136,136,112,5,6,6,6,0,255,240,136, 6, 0, 0, 112, 136, 136, 136, 112, 5, 6, 6, 6, 0, 255, 240, 136,
136,240,128,128,5,6,6,6,0,255,120,136,136,120,8,8, 136, 240, 128, 128, 5, 6, 6, 6, 0, 255, 120, 136, 136, 120, 8, 8,
5,5,5,6,0,0,176,200,128,128,128,5,5,5,6,0, 5, 5, 5, 6, 0, 0, 176, 200, 128, 128, 128, 5, 5, 5, 6, 0,
0,112,128,112,8,240,4,7,7,6,0,0,64,64,224,64, 0, 112, 128, 112, 8, 240, 4, 7, 7, 6, 0, 0, 64, 64, 224, 64,
64,64,48,5,5,5,6,0,0,136,136,136,152,104,5,5, 64, 64, 48, 5, 5, 5, 6, 0, 0, 136, 136, 136, 152, 104, 5, 5,
5,6,0,0,136,136,136,80,32,5,5,5,6,0,0,136, 5, 6, 0, 0, 136, 136, 136, 80, 32, 5, 5, 5, 6, 0, 0, 136,
136,168,168,80,5,5,5,6,0,0,136,80,32,80,136,5, 136, 168, 168, 80, 5, 5, 5, 6, 0, 0, 136, 80, 32, 80, 136, 5,
6,6,6,0,255,136,136,136,120,8,112,5,5,5,6,0, 6, 6, 6, 0, 255, 136, 136, 136, 120, 8, 112, 5, 5, 5, 6, 0,
0,248,16,32,64,248,3,7,7,6,1,0,32,64,64,128, 0, 248, 16, 32, 64, 248, 3, 7, 7, 6, 1, 0, 32, 64, 64, 128,
64,64,32,1,7,7,6,2,0,128,128,128,128,128,128,128, 64, 64, 32, 1, 7, 7, 6, 2, 0, 128, 128, 128, 128, 128, 128, 128,
3,7,7,6,1,0,128,64,64,32,64,64,128,5,2,2, 3, 7, 7, 6, 1, 0, 128, 64, 64, 32, 64, 64, 128, 5, 2, 2,
6,0,2,104,144,0,0,0,6,0,0,0,0,0,6,0, 6, 0, 2, 104, 144, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0,
0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0,
0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0,
0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0,
0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0,
0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0,
0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0,
0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0,
0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0,
0,1,7,7,6,2,0,128,0,128,128,128,128,128,5,7, 0, 1, 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128, 5, 7,
7,6,0,0,32,112,168,160,168,112,32,5,7,7,6,0, 7, 6, 0, 0, 32, 112, 168, 160, 168, 112, 32, 5, 7, 7, 6, 0,
0,48,64,64,224,64,80,168,5,5,5,6,0,0,136,112, 0, 48, 64, 64, 224, 64, 80, 168, 5, 5, 5, 6, 0, 0, 136, 112,
80,112,136,5,7,7,6,0,0,136,80,32,248,32,248,32, 80, 112, 136, 5, 7, 7, 6, 0, 0, 136, 80, 32, 248, 32, 248, 32,
1,7,7,6,2,0,128,128,128,0,128,128,128,5,8,8, 1, 7, 7, 6, 2, 0, 128, 128, 128, 0, 128, 128, 128, 5, 8, 8,
6,0,0,48,72,32,80,80,32,144,96,3,1,1,6,1, 6, 0, 0, 48, 72, 32, 80, 80, 32, 144, 96, 3, 1, 1, 6, 1,
7,160,5,7,7,6,0,0,248,136,184,184,184,136,248,5, 7, 160, 5, 7, 7, 6, 0, 0, 248, 136, 184, 184, 184, 136, 248, 5,
7,7,6,0,1,112,8,120,136,120,0,248,5,5,5,6, 7, 7, 6, 0, 1, 112, 8, 120, 136, 120, 0, 248, 5, 5, 5, 6,
0,1,40,80,160,80,40,5,3,3,6,0,1,248,8,8, 0, 1, 40, 80, 160, 80, 40, 5, 3, 3, 6, 0, 1, 248, 8, 8,
2,2,2,6,2,6,64,128,5,7,7,6,0,0,248,136, 2, 2, 2, 6, 2, 6, 64, 128, 5, 7, 7, 6, 0, 0, 248, 136,
168,136,152,168,248,5,1,1,6,0,6,248,4,4,4,6, 168, 136, 152, 168, 248, 5, 1, 1, 6, 0, 6, 248, 4, 4, 4, 6,
0,3,96,144,144,96,5,7,7,6,0,0,32,32,248,32, 0, 3, 96, 144, 144, 96, 5, 7, 7, 6, 0, 0, 32, 32, 248, 32,
32,0,248,4,5,5,6,0,3,96,144,32,64,240,3,5, 32, 0, 248, 4, 5, 5, 6, 0, 3, 96, 144, 32, 64, 240, 3, 5,
5,6,0,3,224,32,224,32,224,2,2,2,6,2,6,64, 5, 6, 0, 3, 224, 32, 224, 32, 224, 2, 2, 2, 6, 2, 6, 64,
128,5,8,8,6,0,255,136,136,136,136,152,232,128,128,5, 128, 5, 8, 8, 6, 0, 255, 136, 136, 136, 136, 152, 232, 128, 128, 5,
7,7,6,0,0,120,152,152,120,24,24,24,2,2,2,6, 7, 7, 6, 0, 0, 120, 152, 152, 120, 24, 24, 24, 2, 2, 2, 6,
2,2,192,192,2,2,2,6,2,255,64,128,3,5,5,6, 2, 2, 192, 192, 2, 2, 2, 6, 2, 255, 64, 128, 3, 5, 5, 6,
0,3,64,192,64,64,224,5,7,7,6,0,1,112,136,136, 0, 3, 64, 192, 64, 64, 224, 5, 7, 7, 6, 0, 1, 112, 136, 136,
136,112,0,248,5,5,5,6,0,1,160,80,40,80,160,5, 136, 112, 0, 248, 5, 5, 5, 6, 0, 1, 160, 80, 40, 80, 160, 5,
7,7,6,0,0,136,144,168,88,184,8,8,5,7,7,6, 7, 7, 6, 0, 0, 136, 144, 168, 88, 184, 8, 8, 5, 7, 7, 6,
0,0,136,144,184,72,152,32,56,5,8,8,6,0,0,192, 0, 0, 136, 144, 184, 72, 152, 32, 56, 5, 8, 8, 6, 0, 0, 192,
64,192,72,216,56,8,8,5,7,7,6,0,0,32,0,32, 64, 192, 72, 216, 56, 8, 8, 5, 7, 7, 6, 0, 0, 32, 0, 32,
64,128,136,112,5,8,8,6,0,0,64,32,0,112,136,248, 64, 128, 136, 112, 5, 8, 8, 6, 0, 0, 64, 32, 0, 112, 136, 248,
136,136,5,8,8,6,0,0,16,32,0,112,136,248,136,136, 136, 136, 5, 8, 8, 6, 0, 0, 16, 32, 0, 112, 136, 248, 136, 136,
5,8,8,6,0,0,32,80,0,112,136,248,136,136,5,8, 5, 8, 8, 6, 0, 0, 32, 80, 0, 112, 136, 248, 136, 136, 5, 8,
8,6,0,0,104,144,0,112,136,248,136,136,5,8,8,6, 8, 6, 0, 0, 104, 144, 0, 112, 136, 248, 136, 136, 5, 8, 8, 6,
0,0,80,0,112,136,136,248,136,136,5,8,8,6,0,0, 0, 0, 80, 0, 112, 136, 136, 248, 136, 136, 5, 8, 8, 6, 0, 0,
32,80,32,112,136,248,136,136,5,7,7,6,0,0,56,96, 32, 80, 32, 112, 136, 248, 136, 136, 5, 7, 7, 6, 0, 0, 56, 96,
160,184,224,160,184,5,8,8,6,0,255,112,136,128,128,136, 160, 184, 224, 160, 184, 5, 8, 8, 6, 0, 255, 112, 136, 128, 128, 136,
112,32,96,5,8,8,6,0,0,64,32,0,248,128,240,128, 112, 32, 96, 5, 8, 8, 6, 0, 0, 64, 32, 0, 248, 128, 240, 128,
248,5,8,8,6,0,0,8,16,0,248,128,240,128,248,5, 248, 5, 8, 8, 6, 0, 0, 8, 16, 0, 248, 128, 240, 128, 248, 5,
8,8,6,0,0,32,80,0,248,128,240,128,248,5,7,7, 8, 8, 6, 0, 0, 32, 80, 0, 248, 128, 240, 128, 248, 5, 7, 7,
6,0,0,80,0,248,128,240,128,248,3,8,8,6,1,0, 6, 0, 0, 80, 0, 248, 128, 240, 128, 248, 3, 8, 8, 6, 1, 0,
128,64,0,224,64,64,64,224,3,8,8,6,1,0,32,64, 128, 64, 0, 224, 64, 64, 64, 224, 3, 8, 8, 6, 1, 0, 32, 64,
0,224,64,64,64,224,3,8,8,6,1,0,64,160,0,224, 0, 224, 64, 64, 64, 224, 3, 8, 8, 6, 1, 0, 64, 160, 0, 224,
64,64,64,224,3,7,7,6,1,0,160,0,224,64,64,64, 64, 64, 64, 224, 3, 7, 7, 6, 1, 0, 160, 0, 224, 64, 64, 64,
224,5,7,7,6,0,0,112,72,72,232,72,72,112,5,8, 224, 5, 7, 7, 6, 0, 0, 112, 72, 72, 232, 72, 72, 112, 5, 8,
8,6,0,0,104,144,0,136,200,168,152,136,5,8,8,6, 8, 6, 0, 0, 104, 144, 0, 136, 200, 168, 152, 136, 5, 8, 8, 6,
0,0,64,32,112,136,136,136,136,112,5,8,8,6,0,0, 0, 0, 64, 32, 112, 136, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0,
16,32,112,136,136,136,136,112,5,8,8,6,0,0,32,80, 16, 32, 112, 136, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 32, 80,
0,112,136,136,136,112,5,8,8,6,0,0,104,144,0,112, 0, 112, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 104, 144, 0, 112,
136,136,136,112,5,8,8,6,0,0,80,0,112,136,136,136, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 80, 0, 112, 136, 136, 136,
136,112,5,5,5,6,0,1,136,80,32,80,136,5,8,8, 136, 112, 5, 5, 5, 6, 0, 1, 136, 80, 32, 80, 136, 5, 8, 8,
6,0,255,16,112,168,168,168,168,112,64,5,8,8,6,0, 6, 0, 255, 16, 112, 168, 168, 168, 168, 112, 64, 5, 8, 8, 6, 0,
0,64,32,136,136,136,136,136,112,5,8,8,6,0,0,16, 0, 64, 32, 136, 136, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 16,
32,136,136,136,136,136,112,5,8,8,6,0,0,32,80,0, 32, 136, 136, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 32, 80, 0,
136,136,136,136,112,5,8,8,6,0,0,80,0,136,136,136, 136, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 80, 0, 136, 136, 136,
136,136,112,5,8,8,6,0,0,16,32,136,80,32,32,32, 136, 136, 112, 5, 8, 8, 6, 0, 0, 16, 32, 136, 80, 32, 32, 32,
32,5,9,9,6,0,255,192,64,112,72,72,112,64,64,224, 32, 5, 9, 9, 6, 0, 255, 192, 64, 112, 72, 72, 112, 64, 64, 224,
4,8,8,6,1,255,96,144,144,160,144,144,224,128,5,8, 4, 8, 8, 6, 1, 255, 96, 144, 144, 160, 144, 144, 224, 128, 5, 8,
8,6,0,0,64,32,0,112,8,120,136,120,5,8,8,6, 8, 6, 0, 0, 64, 32, 0, 112, 8, 120, 136, 120, 5, 8, 8, 6,
0,0,16,32,0,112,8,120,136,120,5,8,8,6,0,0, 0, 0, 16, 32, 0, 112, 8, 120, 136, 120, 5, 8, 8, 6, 0, 0,
32,80,0,112,8,120,136,120,5,8,8,6,0,0,104,144, 32, 80, 0, 112, 8, 120, 136, 120, 5, 8, 8, 6, 0, 0, 104, 144,
0,112,8,120,136,120,5,7,7,6,0,0,80,0,112,8, 0, 112, 8, 120, 136, 120, 5, 7, 7, 6, 0, 0, 80, 0, 112, 8,
120,136,120,5,8,8,6,0,0,32,80,32,112,8,120,136, 120, 136, 120, 5, 8, 8, 6, 0, 0, 32, 80, 32, 112, 8, 120, 136,
120,5,6,6,6,0,0,208,40,120,160,168,80,5,6,6, 120, 5, 6, 6, 6, 0, 0, 208, 40, 120, 160, 168, 80, 5, 6, 6,
6,0,255,112,128,136,112,32,96,5,8,8,6,0,0,64, 6, 0, 255, 112, 128, 136, 112, 32, 96, 5, 8, 8, 6, 0, 0, 64,
32,0,112,136,248,128,112,5,8,8,6,0,0,16,32,0, 32, 0, 112, 136, 248, 128, 112, 5, 8, 8, 6, 0, 0, 16, 32, 0,
112,136,248,128,112,5,8,8,6,0,0,32,80,0,112,136, 112, 136, 248, 128, 112, 5, 8, 8, 6, 0, 0, 32, 80, 0, 112, 136,
248,128,112,5,7,7,6,0,0,80,0,112,136,248,128,112, 248, 128, 112, 5, 7, 7, 6, 0, 0, 80, 0, 112, 136, 248, 128, 112,
3,8,8,6,1,0,128,64,0,64,192,64,64,224,3,8, 3, 8, 8, 6, 1, 0, 128, 64, 0, 64, 192, 64, 64, 224, 3, 8,
8,6,1,0,32,64,0,64,192,64,64,224,3,8,8,6, 8, 6, 1, 0, 32, 64, 0, 64, 192, 64, 64, 224, 3, 8, 8, 6,
1,0,64,160,0,64,192,64,64,224,3,7,7,6,1,0, 1, 0, 64, 160, 0, 64, 192, 64, 64, 224, 3, 7, 7, 6, 1, 0,
160,0,64,192,64,64,224,5,7,7,6,0,0,160,64,160, 160, 0, 64, 192, 64, 64, 224, 5, 7, 7, 6, 0, 0, 160, 64, 160,
16,120,136,112,5,8,8,6,0,0,104,144,0,176,200,136, 16, 120, 136, 112, 5, 8, 8, 6, 0, 0, 104, 144, 0, 176, 200, 136,
136,136,5,8,8,6,0,0,64,32,0,112,136,136,136,112, 136, 136, 5, 8, 8, 6, 0, 0, 64, 32, 0, 112, 136, 136, 136, 112,
5,8,8,6,0,0,16,32,0,112,136,136,136,112,5,8, 5, 8, 8, 6, 0, 0, 16, 32, 0, 112, 136, 136, 136, 112, 5, 8,
8,6,0,0,32,80,0,112,136,136,136,112,5,8,8,6, 8, 6, 0, 0, 32, 80, 0, 112, 136, 136, 136, 112, 5, 8, 8, 6,
0,0,104,144,0,112,136,136,136,112,5,7,7,6,0,0, 0, 0, 104, 144, 0, 112, 136, 136, 136, 112, 5, 7, 7, 6, 0, 0,
80,0,112,136,136,136,112,5,5,5,6,0,1,32,0,248, 80, 0, 112, 136, 136, 136, 112, 5, 5, 5, 6, 0, 1, 32, 0, 248,
0,32,5,7,7,6,0,255,16,112,168,168,168,112,64,5, 0, 32, 5, 7, 7, 6, 0, 255, 16, 112, 168, 168, 168, 112, 64, 5,
8,8,6,0,0,64,32,0,136,136,136,152,104,5,8,8, 8, 8, 6, 0, 0, 64, 32, 0, 136, 136, 136, 152, 104, 5, 8, 8,
6,0,0,16,32,0,136,136,136,152,104,5,8,8,6,0, 6, 0, 0, 16, 32, 0, 136, 136, 136, 152, 104, 5, 8, 8, 6, 0,
0,32,80,0,136,136,136,152,104,5,7,7,6,0,0,80, 0, 32, 80, 0, 136, 136, 136, 152, 104, 5, 7, 7, 6, 0, 0, 80,
0,136,136,136,152,104,5,9,9,6,0,255,16,32,0,136, 0, 136, 136, 136, 152, 104, 5, 9, 9, 6, 0, 255, 16, 32, 0, 136,
136,136,248,8,112,4,7,7,6,1,255,192,64,96,80,96, 136, 136, 248, 8, 112, 4, 7, 7, 6, 1, 255, 192, 64, 96, 80, 96,
64,224,5,8,8,6,0,255,80,0,136,136,136,120,8,112 64, 224, 5, 8, 8, 6, 0, 255, 80, 0, 136, 136, 136, 120, 8, 112
}; };
...@@ -9,166 +9,166 @@ ...@@ -9,166 +9,166 @@
X Font ascent = 7 descent=-1 X Font ascent = 7 descent=-1
Max Font ascent = 8 descent=-1 Max Font ascent = 8 descent=-1
*/ */
#include <utility/u8g.h> #include <U8glib.h>
const u8g_fntpgm_uint8_t ISO10646_5_Cyrillic_5x7[2560] U8G_SECTION(".progmem.ISO10646_5_Cyrillic_5x7") = { const u8g_fntpgm_uint8_t ISO10646_5_Cyrillic_5x7[2560] U8G_SECTION(".progmem.ISO10646_5_Cyrillic_5x7") = {
0,6,9,0,254,7,1,145,3,32,32,255,255,8,255,7, 0, 6, 9, 0, 254, 7, 1, 145, 3, 32, 32, 255, 255, 8, 255, 7,
255,0,0,0,6,0,0,1,7,7,6,2,0,128,128,128, 255, 0, 0, 0, 6, 0, 0, 1, 7, 7, 6, 2, 0, 128, 128, 128,
128,128,0,128,3,2,2,6,1,5,160,160,5,7,7,6, 128, 128, 0, 128, 3, 2, 2, 6, 1, 5, 160, 160, 5, 7, 7, 6,
0,0,80,80,248,80,248,80,80,5,7,7,6,0,0,32, 0, 0, 80, 80, 248, 80, 248, 80, 80, 5, 7, 7, 6, 0, 0, 32,
120,160,112,40,240,32,5,7,7,6,0,0,192,200,16,32, 120, 160, 112, 40, 240, 32, 5, 7, 7, 6, 0, 0, 192, 200, 16, 32,
64,152,24,5,7,7,6,0,0,96,144,160,64,168,144,104, 64, 152, 24, 5, 7, 7, 6, 0, 0, 96, 144, 160, 64, 168, 144, 104,
2,3,3,6,1,4,192,64,128,3,7,7,6,1,0,32, 2, 3, 3, 6, 1, 4, 192, 64, 128, 3, 7, 7, 6, 1, 0, 32,
64,128,128,128,64,32,3,7,7,6,1,0,128,64,32,32, 64, 128, 128, 128, 64, 32, 3, 7, 7, 6, 1, 0, 128, 64, 32, 32,
32,64,128,5,5,5,6,0,1,32,168,112,168,32,5,5, 32, 64, 128, 5, 5, 5, 6, 0, 1, 32, 168, 112, 168, 32, 5, 5,
5,6,0,1,32,32,248,32,32,2,3,3,6,2,255,192, 5, 6, 0, 1, 32, 32, 248, 32, 32, 2, 3, 3, 6, 2, 255, 192,
64,128,5,1,1,6,0,3,248,2,2,2,6,2,0,192, 64, 128, 5, 1, 1, 6, 0, 3, 248, 2, 2, 2, 6, 2, 0, 192,
192,5,5,5,6,0,1,8,16,32,64,128,5,7,7,6, 192, 5, 5, 5, 6, 0, 1, 8, 16, 32, 64, 128, 5, 7, 7, 6,
0,0,112,136,152,168,200,136,112,3,7,7,6,1,0,64, 0, 0, 112, 136, 152, 168, 200, 136, 112, 3, 7, 7, 6, 1, 0, 64,
192,64,64,64,64,224,5,7,7,6,0,0,112,136,8,112, 192, 64, 64, 64, 64, 224, 5, 7, 7, 6, 0, 0, 112, 136, 8, 112,
128,128,248,5,7,7,6,0,0,248,16,32,16,8,8,240, 128, 128, 248, 5, 7, 7, 6, 0, 0, 248, 16, 32, 16, 8, 8, 240,
5,7,7,6,0,0,16,48,80,144,248,16,16,5,7,7, 5, 7, 7, 6, 0, 0, 16, 48, 80, 144, 248, 16, 16, 5, 7, 7,
6,0,0,248,128,240,8,8,136,112,5,7,7,6,0,0, 6, 0, 0, 248, 128, 240, 8, 8, 136, 112, 5, 7, 7, 6, 0, 0,
48,64,128,240,136,136,112,5,7,7,6,0,0,248,8,16, 48, 64, 128, 240, 136, 136, 112, 5, 7, 7, 6, 0, 0, 248, 8, 16,
32,32,32,32,5,7,7,6,0,0,112,136,136,112,136,136, 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 112, 136, 136, 112, 136, 136,
112,5,7,7,6,0,0,112,136,136,120,8,16,96,2,5, 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 120, 8, 16, 96, 2, 5,
5,6,2,0,192,192,0,192,192,2,6,6,6,2,255,192, 5, 6, 2, 0, 192, 192, 0, 192, 192, 2, 6, 6, 6, 2, 255, 192,
192,0,192,64,128,4,7,7,6,0,0,16,32,64,128,64, 192, 0, 192, 64, 128, 4, 7, 7, 6, 0, 0, 16, 32, 64, 128, 64,
32,16,5,3,3,6,0,2,248,0,248,4,7,7,6,1, 32, 16, 5, 3, 3, 6, 0, 2, 248, 0, 248, 4, 7, 7, 6, 1,
0,128,64,32,16,32,64,128,5,7,7,6,0,0,112,136, 0, 128, 64, 32, 16, 32, 64, 128, 5, 7, 7, 6, 0, 0, 112, 136,
8,16,32,0,32,5,6,6,6,0,0,112,136,8,104,168, 8, 16, 32, 0, 32, 5, 6, 6, 6, 0, 0, 112, 136, 8, 104, 168,
112,5,7,7,6,0,0,112,136,136,248,136,136,136,5,7, 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 248, 136, 136, 136, 5, 7,
7,6,0,0,240,136,136,240,136,136,240,5,7,7,6,0, 7, 6, 0, 0, 240, 136, 136, 240, 136, 136, 240, 5, 7, 7, 6, 0,
0,112,136,128,128,128,136,112,5,7,7,6,0,0,224,144, 0, 112, 136, 128, 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 224, 144,
136,136,136,144,224,5,7,7,6,0,0,248,128,128,240,128, 136, 136, 136, 144, 224, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128,
128,248,5,7,7,6,0,0,248,128,128,240,128,128,128,5, 128, 248, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128, 128, 128, 5,
7,7,6,0,0,112,136,128,184,136,136,112,5,7,7,6, 7, 7, 6, 0, 0, 112, 136, 128, 184, 136, 136, 112, 5, 7, 7, 6,
0,0,136,136,136,248,136,136,136,1,7,7,6,2,0,128, 0, 0, 136, 136, 136, 248, 136, 136, 136, 1, 7, 7, 6, 2, 0, 128,
128,128,128,128,128,128,5,7,7,6,0,0,56,16,16,16, 128, 128, 128, 128, 128, 128, 5, 7, 7, 6, 0, 0, 56, 16, 16, 16,
16,144,96,5,7,7,6,0,0,136,144,160,192,160,144,136, 16, 144, 96, 5, 7, 7, 6, 0, 0, 136, 144, 160, 192, 160, 144, 136,
5,7,7,6,0,0,128,128,128,128,128,128,248,5,7,7, 5, 7, 7, 6, 0, 0, 128, 128, 128, 128, 128, 128, 248, 5, 7, 7,
6,0,0,136,216,168,136,136,136,136,5,7,7,6,0,0, 6, 0, 0, 136, 216, 168, 136, 136, 136, 136, 5, 7, 7, 6, 0, 0,
136,136,200,168,152,136,136,5,7,7,6,0,0,112,136,136, 136, 136, 200, 168, 152, 136, 136, 5, 7, 7, 6, 0, 0, 112, 136, 136,
136,136,136,112,5,7,7,6,0,0,240,136,136,240,128,128, 136, 136, 136, 112, 5, 7, 7, 6, 0, 0, 240, 136, 136, 240, 128, 128,
128,5,7,7,6,0,0,112,136,136,136,168,144,104,5,7, 128, 5, 7, 7, 6, 0, 0, 112, 136, 136, 136, 168, 144, 104, 5, 7,
7,6,0,0,240,136,136,240,160,144,136,5,7,7,6,0, 7, 6, 0, 0, 240, 136, 136, 240, 160, 144, 136, 5, 7, 7, 6, 0,
0,120,128,128,112,8,8,240,5,7,7,6,0,0,248,32, 0, 120, 128, 128, 112, 8, 8, 240, 5, 7, 7, 6, 0, 0, 248, 32,
32,32,32,32,32,5,7,7,6,0,0,136,136,136,136,136, 32, 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136,
136,112,5,7,7,6,0,0,136,136,136,136,136,80,32,5, 136, 112, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 80, 32, 5,
7,7,6,0,0,136,136,136,136,136,168,80,5,7,7,6, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 168, 80, 5, 7, 7, 6,
0,0,136,136,80,32,80,136,136,5,7,7,6,0,0,136, 0, 0, 136, 136, 80, 32, 80, 136, 136, 5, 7, 7, 6, 0, 0, 136,
136,136,80,32,32,32,5,7,7,6,0,0,248,8,16,32, 136, 136, 80, 32, 32, 32, 5, 7, 7, 6, 0, 0, 248, 8, 16, 32,
64,128,248,3,7,7,6,1,0,224,128,128,128,128,128,224, 64, 128, 248, 3, 7, 7, 6, 1, 0, 224, 128, 128, 128, 128, 128, 224,
5,5,5,6,0,1,128,64,32,16,8,3,7,7,6,1, 5, 5, 5, 6, 0, 1, 128, 64, 32, 16, 8, 3, 7, 7, 6, 1,
0,224,32,32,32,32,32,224,5,3,3,6,0,4,32,80, 0, 224, 32, 32, 32, 32, 32, 224, 5, 3, 3, 6, 0, 4, 32, 80,
136,5,1,1,6,0,0,248,2,2,2,6,2,5,128,64, 136, 5, 1, 1, 6, 0, 0, 248, 2, 2, 2, 6, 2, 5, 128, 64,
5,5,5,6,0,0,112,8,120,136,120,5,7,7,6,0, 5, 5, 5, 6, 0, 0, 112, 8, 120, 136, 120, 5, 7, 7, 6, 0,
0,128,128,176,200,136,136,240,5,5,5,6,0,0,112,128, 0, 128, 128, 176, 200, 136, 136, 240, 5, 5, 5, 6, 0, 0, 112, 128,
128,136,112,5,7,7,6,0,0,8,8,104,152,136,136,120, 128, 136, 112, 5, 7, 7, 6, 0, 0, 8, 8, 104, 152, 136, 136, 120,
5,5,5,6,0,0,112,136,248,128,112,5,7,7,6,0, 5, 5, 5, 6, 0, 0, 112, 136, 248, 128, 112, 5, 7, 7, 6, 0,
0,48,72,224,64,64,64,64,5,6,6,6,0,255,112,136, 0, 48, 72, 224, 64, 64, 64, 64, 5, 6, 6, 6, 0, 255, 112, 136,
136,120,8,112,5,7,7,6,0,0,128,128,176,200,136,136, 136, 120, 8, 112, 5, 7, 7, 6, 0, 0, 128, 128, 176, 200, 136, 136,
136,1,7,7,6,2,0,128,0,128,128,128,128,128,3,8, 136, 1, 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128, 3, 8,
8,6,1,255,32,0,32,32,32,32,160,64,4,7,7,6, 8, 6, 1, 255, 32, 0, 32, 32, 32, 32, 160, 64, 4, 7, 7, 6,
0,0,128,128,144,160,192,160,144,3,7,7,6,1,0,192, 0, 0, 128, 128, 144, 160, 192, 160, 144, 3, 7, 7, 6, 1, 0, 192,
64,64,64,64,64,224,5,5,5,6,0,0,208,168,168,168, 64, 64, 64, 64, 64, 224, 5, 5, 5, 6, 0, 0, 208, 168, 168, 168,
168,5,5,5,6,0,0,176,200,136,136,136,5,5,5,6, 168, 5, 5, 5, 6, 0, 0, 176, 200, 136, 136, 136, 5, 5, 5, 6,
0,0,112,136,136,136,112,5,6,6,6,0,255,240,136,136, 0, 0, 112, 136, 136, 136, 112, 5, 6, 6, 6, 0, 255, 240, 136, 136,
240,128,128,5,6,6,6,0,255,120,136,136,120,8,8,5, 240, 128, 128, 5, 6, 6, 6, 0, 255, 120, 136, 136, 120, 8, 8, 5,
5,5,6,0,0,176,200,128,128,128,5,5,5,6,0,0, 5, 5, 6, 0, 0, 176, 200, 128, 128, 128, 5, 5, 5, 6, 0, 0,
112,128,112,8,240,5,7,7,6,0,0,64,64,224,64,64, 112, 128, 112, 8, 240, 5, 7, 7, 6, 0, 0, 64, 64, 224, 64, 64,
72,48,5,5,5,6,0,0,136,136,136,152,104,5,5,5, 72, 48, 5, 5, 5, 6, 0, 0, 136, 136, 136, 152, 104, 5, 5, 5,
6,0,0,136,136,136,80,32,5,5,5,6,0,0,136,136, 6, 0, 0, 136, 136, 136, 80, 32, 5, 5, 5, 6, 0, 0, 136, 136,
168,168,80,5,5,5,6,0,0,136,80,32,80,136,5,6, 168, 168, 80, 5, 5, 5, 6, 0, 0, 136, 80, 32, 80, 136, 5, 6,
6,6,0,255,136,136,136,120,8,112,5,5,5,6,0,0, 6, 6, 0, 255, 136, 136, 136, 120, 8, 112, 5, 5, 5, 6, 0, 0,
248,16,32,64,248,3,7,7,6,1,0,32,64,64,128,64, 248, 16, 32, 64, 248, 3, 7, 7, 6, 1, 0, 32, 64, 64, 128, 64,
64,32,1,7,7,6,2,0,128,128,128,128,128,128,128,3, 64, 32, 1, 7, 7, 6, 2, 0, 128, 128, 128, 128, 128, 128, 128, 3,
7,7,6,1,0,128,64,64,32,64,64,128,5,2,2,6, 7, 7, 6, 1, 0, 128, 64, 64, 32, 64, 64, 128, 5, 2, 2, 6,
0,3,104,144,0,0,0,6,0,0,0,0,0,6,0,0, 0, 3, 104, 144, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
0,6,0,0,0,0,0,6,0,0,5,8,8,6,0,0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 5, 8, 8, 6, 0, 0,
64,248,128,128,240,128,128,248,5,8,8,6,0,0,80,248, 64, 248, 128, 128, 240, 128, 128, 248, 5, 8, 8, 6, 0, 0, 80, 248,
128,128,240,128,128,248,5,7,7,6,0,0,224,64,64,112, 128, 128, 240, 128, 128, 248, 5, 7, 7, 6, 0, 0, 224, 64, 64, 112,
72,72,112,5,8,8,6,0,0,16,32,248,136,128,128,128, 72, 72, 112, 5, 8, 8, 6, 0, 0, 16, 32, 248, 136, 128, 128, 128,
128,5,7,7,6,0,0,48,72,128,224,128,72,48,5,7, 128, 5, 7, 7, 6, 0, 0, 48, 72, 128, 224, 128, 72, 48, 5, 7,
7,6,0,0,112,136,128,112,8,136,112,3,7,7,6,1, 7, 6, 0, 0, 112, 136, 128, 112, 8, 136, 112, 3, 7, 7, 6, 1,
0,224,64,64,64,64,64,224,3,8,8,6,1,0,160,0, 0, 224, 64, 64, 64, 64, 64, 224, 3, 8, 8, 6, 1, 0, 160, 0,
224,64,64,64,64,224,5,7,7,6,0,0,56,16,16,16, 224, 64, 64, 64, 64, 224, 5, 7, 7, 6, 0, 0, 56, 16, 16, 16,
16,144,96,5,7,7,6,0,0,160,160,160,184,168,168,184, 16, 144, 96, 5, 7, 7, 6, 0, 0, 160, 160, 160, 184, 168, 168, 184,
5,7,7,6,0,0,160,160,160,248,168,168,184,4,7,7, 5, 7, 7, 6, 0, 0, 160, 160, 160, 248, 168, 168, 184, 4, 7, 7,
6,0,0,224,64,112,80,80,80,80,5,8,8,6,0,0, 6, 0, 0, 224, 64, 112, 80, 80, 80, 80, 5, 8, 8, 6, 0, 0,
16,32,136,144,160,224,144,136,5,8,8,6,0,0,64,32, 16, 32, 136, 144, 160, 224, 144, 136, 5, 8, 8, 6, 0, 0, 64, 32,
136,152,168,200,136,136,5,9,9,6,0,255,80,32,136,136, 136, 152, 168, 200, 136, 136, 5, 9, 9, 6, 0, 255, 80, 32, 136, 136,
136,80,32,32,32,5,8,8,6,0,255,136,136,136,136,136, 136, 80, 32, 32, 32, 5, 8, 8, 6, 0, 255, 136, 136, 136, 136, 136,
136,248,32,5,7,7,6,0,0,112,136,136,248,136,136,136, 136, 248, 32, 5, 7, 7, 6, 0, 0, 112, 136, 136, 248, 136, 136, 136,
5,7,7,6,0,0,248,128,128,240,136,136,240,5,7,7, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 136, 136, 240, 5, 7, 7,
6,0,0,240,136,136,240,136,136,240,5,7,7,6,0,0, 6, 0, 0, 240, 136, 136, 240, 136, 136, 240, 5, 7, 7, 6, 0, 0,
248,136,128,128,128,128,128,5,8,8,6,0,255,120,40,40, 248, 136, 128, 128, 128, 128, 128, 5, 8, 8, 6, 0, 255, 120, 40, 40,
40,72,136,248,136,5,7,7,6,0,0,248,128,128,240,128, 40, 72, 136, 248, 136, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128,
128,248,5,7,7,6,0,0,168,168,168,112,168,168,168,5, 128, 248, 5, 7, 7, 6, 0, 0, 168, 168, 168, 112, 168, 168, 168, 5,
7,7,6,0,0,240,8,8,112,8,8,240,5,7,7,6, 7, 7, 6, 0, 0, 240, 8, 8, 112, 8, 8, 240, 5, 7, 7, 6,
0,0,136,136,152,168,200,136,136,5,8,8,6,0,0,80, 0, 0, 136, 136, 152, 168, 200, 136, 136, 5, 8, 8, 6, 0, 0, 80,
32,136,152,168,168,200,136,5,7,7,6,0,0,136,144,160, 32, 136, 152, 168, 168, 200, 136, 5, 7, 7, 6, 0, 0, 136, 144, 160,
192,160,144,136,5,7,7,6,0,0,120,40,40,40,40,168, 192, 160, 144, 136, 5, 7, 7, 6, 0, 0, 120, 40, 40, 40, 40, 168,
72,5,7,7,6,0,0,136,216,168,136,136,136,136,5,7, 72, 5, 7, 7, 6, 0, 0, 136, 216, 168, 136, 136, 136, 136, 5, 7,
7,6,0,0,136,136,136,248,136,136,136,5,7,7,6,0, 7, 6, 0, 0, 136, 136, 136, 248, 136, 136, 136, 5, 7, 7, 6, 0,
0,112,136,136,136,136,136,112,5,7,7,6,0,0,248,136, 0, 112, 136, 136, 136, 136, 136, 112, 5, 7, 7, 6, 0, 0, 248, 136,
136,136,136,136,136,5,7,7,6,0,0,240,136,136,240,128, 136, 136, 136, 136, 136, 5, 7, 7, 6, 0, 0, 240, 136, 136, 240, 128,
128,128,5,7,7,6,0,0,112,136,128,128,128,136,112,5, 128, 128, 5, 7, 7, 6, 0, 0, 112, 136, 128, 128, 128, 136, 112, 5,
7,7,6,0,0,248,32,32,32,32,32,32,5,7,7,6, 7, 7, 6, 0, 0, 248, 32, 32, 32, 32, 32, 32, 5, 7, 7, 6,
0,0,136,136,136,80,32,64,128,5,7,7,6,0,0,32, 0, 0, 136, 136, 136, 80, 32, 64, 128, 5, 7, 7, 6, 0, 0, 32,
112,168,168,168,112,32,5,7,7,6,0,0,136,136,80,32, 112, 168, 168, 168, 112, 32, 5, 7, 7, 6, 0, 0, 136, 136, 80, 32,
80,136,136,5,8,8,6,0,255,136,136,136,136,136,136,248, 80, 136, 136, 5, 8, 8, 6, 0, 255, 136, 136, 136, 136, 136, 136, 248,
8,5,7,7,6,0,0,136,136,136,152,104,8,8,5,7, 8, 5, 7, 7, 6, 0, 0, 136, 136, 136, 152, 104, 8, 8, 5, 7,
7,6,0,0,168,168,168,168,168,168,248,5,8,8,6,0, 7, 6, 0, 0, 168, 168, 168, 168, 168, 168, 248, 5, 8, 8, 6, 0,
255,168,168,168,168,168,168,248,8,5,7,7,6,0,0,192, 255, 168, 168, 168, 168, 168, 168, 248, 8, 5, 7, 7, 6, 0, 0, 192,
64,64,112,72,72,112,5,7,7,6,0,0,136,136,136,200, 64, 64, 112, 72, 72, 112, 5, 7, 7, 6, 0, 0, 136, 136, 136, 200,
168,168,200,5,7,7,6,0,0,128,128,128,240,136,136,240, 168, 168, 200, 5, 7, 7, 6, 0, 0, 128, 128, 128, 240, 136, 136, 240,
5,7,7,6,0,0,112,136,8,56,8,136,112,5,7,7, 5, 7, 7, 6, 0, 0, 112, 136, 8, 56, 8, 136, 112, 5, 7, 7,
6,0,0,144,168,168,232,168,168,144,5,7,7,6,0,0, 6, 0, 0, 144, 168, 168, 232, 168, 168, 144, 5, 7, 7, 6, 0, 0,
120,136,136,120,40,72,136,5,5,5,6,0,0,112,8,120, 120, 136, 136, 120, 40, 72, 136, 5, 5, 5, 6, 0, 0, 112, 8, 120,
136,120,5,7,7,6,0,0,24,96,128,240,136,136,112,4, 136, 120, 5, 7, 7, 6, 0, 0, 24, 96, 128, 240, 136, 136, 112, 4,
5,5,6,0,0,224,144,224,144,224,5,5,5,6,0,0, 5, 5, 6, 0, 0, 224, 144, 224, 144, 224, 5, 5, 5, 6, 0, 0,
248,136,128,128,128,5,6,6,6,0,255,120,40,72,136,248, 248, 136, 128, 128, 128, 5, 6, 6, 6, 0, 255, 120, 40, 72, 136, 248,
136,5,5,5,6,0,0,112,136,248,128,112,5,5,5,6, 136, 5, 5, 5, 6, 0, 0, 112, 136, 248, 128, 112, 5, 5, 5, 6,
0,0,168,168,112,168,168,5,5,5,6,0,0,240,8,48, 0, 0, 168, 168, 112, 168, 168, 5, 5, 5, 6, 0, 0, 240, 8, 48,
8,240,5,5,5,6,0,0,136,152,168,200,136,5,7,7, 8, 240, 5, 5, 5, 6, 0, 0, 136, 152, 168, 200, 136, 5, 7, 7,
6,0,0,80,32,136,152,168,200,136,4,5,5,6,0,0, 6, 0, 0, 80, 32, 136, 152, 168, 200, 136, 4, 5, 5, 6, 0, 0,
144,160,192,160,144,5,5,5,6,0,0,248,40,40,168,72, 144, 160, 192, 160, 144, 5, 5, 5, 6, 0, 0, 248, 40, 40, 168, 72,
5,5,5,6,0,0,136,216,168,136,136,5,5,5,6,0, 5, 5, 5, 6, 0, 0, 136, 216, 168, 136, 136, 5, 5, 5, 6, 0,
0,136,136,248,136,136,5,5,5,6,0,0,112,136,136,136, 0, 136, 136, 248, 136, 136, 5, 5, 5, 6, 0, 0, 112, 136, 136, 136,
112,5,5,5,6,0,0,248,136,136,136,136,5,6,6,6, 112, 5, 5, 5, 6, 0, 0, 248, 136, 136, 136, 136, 5, 6, 6, 6,
0,255,240,136,136,240,128,128,5,5,5,6,0,0,112,128, 0, 255, 240, 136, 136, 240, 128, 128, 5, 5, 5, 6, 0, 0, 112, 128,
128,136,112,5,5,5,6,0,0,248,32,32,32,32,5,6, 128, 136, 112, 5, 5, 5, 6, 0, 0, 248, 32, 32, 32, 32, 5, 6,
6,6,0,255,136,136,136,120,8,112,5,6,6,6,0,0, 6, 6, 0, 255, 136, 136, 136, 120, 8, 112, 5, 6, 6, 6, 0, 0,
32,112,168,168,112,32,5,5,5,6,0,0,136,80,32,80, 32, 112, 168, 168, 112, 32, 5, 5, 5, 6, 0, 0, 136, 80, 32, 80,
136,5,6,6,6,0,255,136,136,136,136,248,8,5,5,5, 136, 5, 6, 6, 6, 0, 255, 136, 136, 136, 136, 248, 8, 5, 5, 5,
6,0,0,136,136,248,8,8,5,5,5,6,0,0,168,168, 6, 0, 0, 136, 136, 248, 8, 8, 5, 5, 5, 6, 0, 0, 168, 168,
168,168,248,5,6,6,6,0,255,168,168,168,168,248,8,5, 168, 168, 248, 5, 6, 6, 6, 0, 255, 168, 168, 168, 168, 248, 8, 5,
5,5,6,0,0,192,64,112,72,112,5,5,5,6,0,0, 5, 5, 6, 0, 0, 192, 64, 112, 72, 112, 5, 5, 5, 6, 0, 0,
136,136,200,168,200,3,5,5,6,1,0,128,128,192,160,192, 136, 136, 200, 168, 200, 3, 5, 5, 6, 1, 0, 128, 128, 192, 160, 192,
5,5,5,6,0,0,112,136,56,136,112,5,5,5,6,0, 5, 5, 5, 6, 0, 0, 112, 136, 56, 136, 112, 5, 5, 5, 6, 0,
0,144,168,232,168,144,5,5,5,6,0,0,120,136,120,40, 0, 144, 168, 232, 168, 144, 5, 5, 5, 6, 0, 0, 120, 136, 120, 40,
72,5,8,8,6,0,0,64,32,0,112,136,248,128,112,5, 72, 5, 8, 8, 6, 0, 0, 64, 32, 0, 112, 136, 248, 128, 112, 5,
7,7,6,0,0,80,0,112,136,248,128,112,5,9,9,6, 7, 7, 6, 0, 0, 80, 0, 112, 136, 248, 128, 112, 5, 9, 9, 6,
0,255,64,224,64,64,120,72,72,72,16,5,8,8,6,0, 0, 255, 64, 224, 64, 64, 120, 72, 72, 72, 16, 5, 8, 8, 6, 0,
0,16,32,0,248,136,128,128,128,5,5,5,6,0,0,112, 0, 16, 32, 0, 248, 136, 128, 128, 128, 5, 5, 5, 6, 0, 0, 112,
136,96,136,112,5,5,5,6,0,0,112,128,112,8,240,1, 136, 96, 136, 112, 5, 5, 5, 6, 0, 0, 112, 128, 112, 8, 240, 1,
7,7,6,2,0,128,0,128,128,128,128,128,3,7,7,6, 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128, 3, 7, 7, 6,
1,0,160,0,64,64,64,64,64,3,8,8,6,1,255,32, 1, 0, 160, 0, 64, 64, 64, 64, 64, 3, 8, 8, 6, 1, 255, 32,
0,32,32,32,32,160,64,5,5,5,6,0,0,160,160,184, 0, 32, 32, 32, 32, 160, 64, 5, 5, 5, 6, 0, 0, 160, 160, 184,
168,184,5,5,5,6,0,0,160,160,248,168,184,5,6,6, 168, 184, 5, 5, 5, 6, 0, 0, 160, 160, 248, 168, 184, 5, 6, 6,
6,0,0,64,224,64,120,72,72,4,8,8,6,0,0,16, 6, 0, 0, 64, 224, 64, 120, 72, 72, 4, 8, 8, 6, 0, 0, 16,
32,0,144,160,192,160,144,5,8,8,6,0,0,64,32,0, 32, 0, 144, 160, 192, 160, 144, 5, 8, 8, 6, 0, 0, 64, 32, 0,
136,152,168,200,136,5,9,9,6,0,255,80,32,0,136,136, 136, 152, 168, 200, 136, 5, 9, 9, 6, 0, 255, 80, 32, 0, 136, 136,
136,120,8,112,5,6,6,6,0,255,136,136,136,136,248,32 136, 120, 8, 112, 5, 6, 6, 6, 0, 255, 136, 136, 136, 136, 248, 32
}; };
...@@ -9,165 +9,166 @@ ...@@ -9,165 +9,166 @@
X Font ascent = 7 descent=-1 X Font ascent = 7 descent=-1
Max Font ascent = 8 descent=-1 Max Font ascent = 8 descent=-1
*/ */
#include <utility/u8g.h> #include <U8glib.h>
const u8g_fntpgm_uint8_t ISO10646_Kana_5x7[2549] U8G_SECTION(".progmem.ISO10646_Kana_5x7") = { const u8g_fntpgm_uint8_t ISO10646_Kana_5x7[2549] U8G_SECTION(".progmem.ISO10646_Kana_5x7") = {
0,6,9,0,254,7,1,145,3,32,32,255,255,8,255,7, 0, 6, 9, 0, 254, 7, 1, 145, 3, 32, 32, 255, 255, 8, 255, 7,
255,0,0,0,6,0,0,1,7,7,6,2,0,128,128,128, 255, 0, 0, 0, 6, 0, 0, 1, 7, 7, 6, 2, 0, 128, 128, 128,
128,128,0,128,3,2,2,6,1,5,160,160,5,7,7,6, 128, 128, 0, 128, 3, 2, 2, 6, 1, 5, 160, 160, 5, 7, 7, 6,
0,0,80,80,248,80,248,80,80,5,7,7,6,0,0,32, 0, 0, 80, 80, 248, 80, 248, 80, 80, 5, 7, 7, 6, 0, 0, 32,
120,160,112,40,240,32,5,7,7,6,0,0,192,200,16,32, 120, 160, 112, 40, 240, 32, 5, 7, 7, 6, 0, 0, 192, 200, 16, 32,
64,152,24,5,7,7,6,0,0,96,144,160,64,168,144,104, 64, 152, 24, 5, 7, 7, 6, 0, 0, 96, 144, 160, 64, 168, 144, 104,
2,3,3,6,1,4,192,64,128,3,7,7,6,1,0,32, 2, 3, 3, 6, 1, 4, 192, 64, 128, 3, 7, 7, 6, 1, 0, 32,
64,128,128,128,64,32,3,7,7,6,1,0,128,64,32,32, 64, 128, 128, 128, 64, 32, 3, 7, 7, 6, 1, 0, 128, 64, 32, 32,
32,64,128,5,5,5,6,0,1,32,168,112,168,32,5,5, 32, 64, 128, 5, 5, 5, 6, 0, 1, 32, 168, 112, 168, 32, 5, 5,
5,6,0,1,32,32,248,32,32,2,3,3,6,2,255,192, 5, 6, 0, 1, 32, 32, 248, 32, 32, 2, 3, 3, 6, 2, 255, 192,
64,128,5,1,1,6,0,3,248,2,2,2,6,2,0,192, 64, 128, 5, 1, 1, 6, 0, 3, 248, 2, 2, 2, 6, 2, 0, 192,
192,5,5,5,6,0,1,8,16,32,64,128,5,7,7,6, 192, 5, 5, 5, 6, 0, 1, 8, 16, 32, 64, 128, 5, 7, 7, 6,
0,0,112,136,152,168,200,136,112,3,7,7,6,1,0,64, 0, 0, 112, 136, 152, 168, 200, 136, 112, 3, 7, 7, 6, 1, 0, 64,
192,64,64,64,64,224,5,7,7,6,0,0,112,136,8,112, 192, 64, 64, 64, 64, 224, 5, 7, 7, 6, 0, 0, 112, 136, 8, 112,
128,128,248,5,7,7,6,0,0,248,16,32,16,8,8,240, 128, 128, 248, 5, 7, 7, 6, 0, 0, 248, 16, 32, 16, 8, 8, 240,
5,7,7,6,0,0,16,48,80,144,248,16,16,5,7,7, 5, 7, 7, 6, 0, 0, 16, 48, 80, 144, 248, 16, 16, 5, 7, 7,
6,0,0,248,128,240,8,8,136,112,5,7,7,6,0,0, 6, 0, 0, 248, 128, 240, 8, 8, 136, 112, 5, 7, 7, 6, 0, 0,
48,64,128,240,136,136,112,5,7,7,6,0,0,248,8,16, 48, 64, 128, 240, 136, 136, 112, 5, 7, 7, 6, 0, 0, 248, 8, 16,
32,32,32,32,5,7,7,6,0,0,112,136,136,112,136,136, 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 112, 136, 136, 112, 136, 136,
112,5,7,7,6,0,0,112,136,136,120,8,16,96,2,5, 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 120, 8, 16, 96, 2, 5,
5,6,2,0,192,192,0,192,192,2,6,6,6,2,255,192, 5, 6, 2, 0, 192, 192, 0, 192, 192, 2, 6, 6, 6, 2, 255, 192,
192,0,192,64,128,4,7,7,6,0,0,16,32,64,128,64, 192, 0, 192, 64, 128, 4, 7, 7, 6, 0, 0, 16, 32, 64, 128, 64,
32,16,5,3,3,6,0,2,248,0,248,4,7,7,6,1, 32, 16, 5, 3, 3, 6, 0, 2, 248, 0, 248, 4, 7, 7, 6, 1,
0,128,64,32,16,32,64,128,5,7,7,6,0,0,112,136, 0, 128, 64, 32, 16, 32, 64, 128, 5, 7, 7, 6, 0, 0, 112, 136,
8,16,32,0,32,5,6,6,6,0,0,112,136,8,104,168, 8, 16, 32, 0, 32, 5, 6, 6, 6, 0, 0, 112, 136, 8, 104, 168,
112,5,7,7,6,0,0,112,136,136,248,136,136,136,5,7, 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 248, 136, 136, 136, 5, 7,
7,6,0,0,240,136,136,240,136,136,240,5,7,7,6,0, 7, 6, 0, 0, 240, 136, 136, 240, 136, 136, 240, 5, 7, 7, 6, 0,
0,112,136,128,128,128,136,112,5,7,7,6,0,0,224,144, 0, 112, 136, 128, 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 224, 144,
136,136,136,144,224,5,7,7,6,0,0,248,128,128,240,128, 136, 136, 136, 144, 224, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128,
128,248,5,7,7,6,0,0,248,128,128,240,128,128,128,5, 128, 248, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128, 128, 128, 5,
7,7,6,0,0,112,136,128,184,136,136,112,5,7,7,6, 7, 7, 6, 0, 0, 112, 136, 128, 184, 136, 136, 112, 5, 7, 7, 6,
0,0,136,136,136,248,136,136,136,1,7,7,6,2,0,128, 0, 0, 136, 136, 136, 248, 136, 136, 136, 1, 7, 7, 6, 2, 0, 128,
128,128,128,128,128,128,5,7,7,6,0,0,56,16,16,16, 128, 128, 128, 128, 128, 128, 5, 7, 7, 6, 0, 0, 56, 16, 16, 16,
16,144,96,5,7,7,6,0,0,136,144,160,192,160,144,136, 16, 144, 96, 5, 7, 7, 6, 0, 0, 136, 144, 160, 192, 160, 144, 136,
5,7,7,6,0,0,128,128,128,128,128,128,248,5,7,7, 5, 7, 7, 6, 0, 0, 128, 128, 128, 128, 128, 128, 248, 5, 7, 7,
6,0,0,136,216,168,136,136,136,136,5,7,7,6,0,0, 6, 0, 0, 136, 216, 168, 136, 136, 136, 136, 5, 7, 7, 6, 0, 0,
136,136,200,168,152,136,136,5,7,7,6,0,0,112,136,136, 136, 136, 200, 168, 152, 136, 136, 5, 7, 7, 6, 0, 0, 112, 136, 136,
136,136,136,112,5,7,7,6,0,0,240,136,136,240,128,128, 136, 136, 136, 112, 5, 7, 7, 6, 0, 0, 240, 136, 136, 240, 128, 128,
128,5,7,7,6,0,0,112,136,136,136,168,144,104,5,7, 128, 5, 7, 7, 6, 0, 0, 112, 136, 136, 136, 168, 144, 104, 5, 7,
7,6,0,0,240,136,136,240,160,144,136,5,7,7,6,0, 7, 6, 0, 0, 240, 136, 136, 240, 160, 144, 136, 5, 7, 7, 6, 0,
0,120,128,128,112,8,8,240,5,7,7,6,0,0,248,32, 0, 120, 128, 128, 112, 8, 8, 240, 5, 7, 7, 6, 0, 0, 248, 32,
32,32,32,32,32,5,7,7,6,0,0,136,136,136,136,136, 32, 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136,
136,112,5,7,7,6,0,0,136,136,136,136,136,80,32,5, 136, 112, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 80, 32, 5,
7,7,6,0,0,136,136,136,136,136,168,80,5,7,7,6, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 168, 80, 5, 7, 7, 6,
0,0,136,136,80,32,80,136,136,5,7,7,6,0,0,136, 0, 0, 136, 136, 80, 32, 80, 136, 136, 5, 7, 7, 6, 0, 0, 136,
136,136,80,32,32,32,5,7,7,6,0,0,248,8,16,32, 136, 136, 80, 32, 32, 32, 5, 7, 7, 6, 0, 0, 248, 8, 16, 32,
64,128,248,3,7,7,6,1,0,224,128,128,128,128,128,224, 64, 128, 248, 3, 7, 7, 6, 1, 0, 224, 128, 128, 128, 128, 128, 224,
5,5,5,6,0,1,128,64,32,16,8,3,7,7,6,1, 5, 5, 5, 6, 0, 1, 128, 64, 32, 16, 8, 3, 7, 7, 6, 1,
0,224,32,32,32,32,32,224,5,3,3,6,0,4,32,80, 0, 224, 32, 32, 32, 32, 32, 224, 5, 3, 3, 6, 0, 4, 32, 80,
136,5,1,1,6,0,0,248,2,2,2,6,2,5,128,64, 136, 5, 1, 1, 6, 0, 0, 248, 2, 2, 2, 6, 2, 5, 128, 64,
5,5,5,6,0,0,112,8,120,136,120,5,7,7,6,0, 5, 5, 5, 6, 0, 0, 112, 8, 120, 136, 120, 5, 7, 7, 6, 0,
0,128,128,176,200,136,136,240,5,5,5,6,0,0,112,128, 0, 128, 128, 176, 200, 136, 136, 240, 5, 5, 5, 6, 0, 0, 112, 128,
128,136,112,5,7,7,6,0,0,8,8,104,152,136,136,120, 128, 136, 112, 5, 7, 7, 6, 0, 0, 8, 8, 104, 152, 136, 136, 120,
5,5,5,6,0,0,112,136,248,128,112,5,7,7,6,0, 5, 5, 5, 6, 0, 0, 112, 136, 248, 128, 112, 5, 7, 7, 6, 0,
0,48,72,224,64,64,64,64,5,6,6,6,0,255,112,136, 0, 48, 72, 224, 64, 64, 64, 64, 5, 6, 6, 6, 0, 255, 112, 136,
136,120,8,112,5,7,7,6,0,0,128,128,176,200,136,136, 136, 120, 8, 112, 5, 7, 7, 6, 0, 0, 128, 128, 176, 200, 136, 136,
136,1,7,7,6,2,0,128,0,128,128,128,128,128,3,8, 136, 1, 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128, 3, 8,
8,6,1,255,32,0,32,32,32,32,160,64,4,7,7,6, 8, 6, 1, 255, 32, 0, 32, 32, 32, 32, 160, 64, 4, 7, 7, 6,
0,0,128,128,144,160,192,160,144,3,7,7,6,1,0,192, 0, 0, 128, 128, 144, 160, 192, 160, 144, 3, 7, 7, 6, 1, 0, 192,
64,64,64,64,64,224,5,5,5,6,0,0,208,168,168,168, 64, 64, 64, 64, 64, 224, 5, 5, 5, 6, 0, 0, 208, 168, 168, 168,
168,5,5,5,6,0,0,176,200,136,136,136,5,5,5,6, 168, 5, 5, 5, 6, 0, 0, 176, 200, 136, 136, 136, 5, 5, 5, 6,
0,0,112,136,136,136,112,5,6,6,6,0,255,240,136,136, 0, 0, 112, 136, 136, 136, 112, 5, 6, 6, 6, 0, 255, 240, 136, 136,
240,128,128,5,6,6,6,0,255,120,136,136,120,8,8,5, 240, 128, 128, 5, 6, 6, 6, 0, 255, 120, 136, 136, 120, 8, 8, 5,
5,5,6,0,0,176,200,128,128,128,5,5,5,6,0,0, 5, 5, 6, 0, 0, 176, 200, 128, 128, 128, 5, 5, 5, 6, 0, 0,
112,128,112,8,240,5,7,7,6,0,0,64,64,224,64,64, 112, 128, 112, 8, 240, 5, 7, 7, 6, 0, 0, 64, 64, 224, 64, 64,
72,48,5,5,5,6,0,0,136,136,136,152,104,5,5,5, 72, 48, 5, 5, 5, 6, 0, 0, 136, 136, 136, 152, 104, 5, 5, 5,
6,0,0,136,136,136,80,32,5,5,5,6,0,0,136,136, 6, 0, 0, 136, 136, 136, 80, 32, 5, 5, 5, 6, 0, 0, 136, 136,
168,168,80,5,5,5,6,0,0,136,80,32,80,136,5,6, 168, 168, 80, 5, 5, 5, 6, 0, 0, 136, 80, 32, 80, 136, 5, 6,
6,6,0,255,136,136,136,120,8,112,5,5,5,6,0,0, 6, 6, 0, 255, 136, 136, 136, 120, 8, 112, 5, 5, 5, 6, 0, 0,
248,16,32,64,248,3,7,7,6,1,0,32,64,64,128,64, 248, 16, 32, 64, 248, 3, 7, 7, 6, 1, 0, 32, 64, 64, 128, 64,
64,32,1,7,7,6,2,0,128,128,128,128,128,128,128,3, 64, 32, 1, 7, 7, 6, 2, 0, 128, 128, 128, 128, 128, 128, 128, 3,
7,7,6,1,0,128,64,64,32,64,64,128,5,2,2,6, 7, 7, 6, 1, 0, 128, 64, 64, 32, 64, 64, 128, 5, 2, 2, 6,
0,3,104,144,0,0,0,6,0,0,0,0,0,6,0,0, 0, 3, 104, 144, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
0,6,0,0,0,0,0,6,0,0,5,3,3,6,0,2, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 5, 3, 3, 6, 0, 2,
248,0,248,5,6,6,6,0,0,248,8,40,48,32,64,5, 248, 0, 248, 5, 6, 6, 6, 0, 0, 248, 8, 40, 48, 32, 64, 5,
7,7,6,0,0,248,8,40,48,32,32,64,4,5,5,6, 7, 7, 6, 0, 0, 248, 8, 40, 48, 32, 32, 64, 4, 5, 5, 6,
0,0,16,32,96,160,32,5,7,7,6,0,0,8,16,32, 0, 0, 16, 32, 96, 160, 32, 5, 7, 7, 6, 0, 0, 8, 16, 32,
96,160,32,32,5,5,5,6,0,0,32,248,136,8,48,5, 96, 160, 32, 32, 5, 5, 5, 6, 0, 0, 32, 248, 136, 8, 48, 5,
7,7,6,0,0,32,248,136,136,8,16,32,5,4,4,6, 7, 7, 6, 0, 0, 32, 248, 136, 136, 8, 16, 32, 5, 4, 4, 6,
0,0,248,32,32,248,5,6,6,6,0,0,248,32,32,32, 0, 0, 248, 32, 32, 248, 5, 6, 6, 6, 0, 0, 248, 32, 32, 32,
32,248,5,5,5,6,0,0,16,248,48,80,144,5,7,7, 32, 248, 5, 5, 5, 6, 0, 0, 16, 248, 48, 80, 144, 5, 7, 7,
6,0,0,16,248,16,48,80,144,16,5,5,5,6,0,0, 6, 0, 0, 16, 248, 16, 48, 80, 144, 16, 5, 5, 5, 6, 0, 0,
64,248,72,80,64,5,7,7,6,0,0,40,0,64,248,72, 64, 248, 72, 80, 64, 5, 7, 7, 6, 0, 0, 40, 0, 64, 248, 72,
80,64,5,7,7,6,0,0,32,248,32,248,32,32,32,5, 80, 64, 5, 7, 7, 6, 0, 0, 32, 248, 32, 248, 32, 32, 32, 5,
8,8,6,0,0,40,0,32,248,32,248,32,32,4,6,6, 8, 8, 6, 0, 0, 40, 0, 32, 248, 32, 248, 32, 32, 4, 6, 6,
6,0,0,64,112,144,16,16,32,5,8,8,6,0,0,40, 6, 0, 0, 64, 112, 144, 16, 16, 32, 5, 8, 8, 6, 0, 0, 40,
0,64,112,144,16,16,32,5,6,6,6,0,0,64,120,144, 0, 64, 112, 144, 16, 16, 32, 5, 6, 6, 6, 0, 0, 64, 120, 144,
16,16,32,5,8,8,6,0,0,40,0,64,120,144,16,16, 16, 16, 32, 5, 8, 8, 6, 0, 0, 40, 0, 64, 120, 144, 16, 16,
32,5,5,5,6,0,0,248,8,8,8,248,5,7,7,6, 32, 5, 5, 5, 6, 0, 0, 248, 8, 8, 8, 248, 5, 7, 7, 6,
0,0,40,0,248,8,8,8,248,5,7,7,6,0,255,80, 0, 0, 40, 0, 248, 8, 8, 8, 248, 5, 7, 7, 6, 0, 255, 80,
248,80,80,16,32,64,5,9,9,6,0,255,40,0,80,248, 248, 80, 80, 16, 32, 64, 5, 9, 9, 6, 0, 255, 40, 0, 80, 248,
80,80,16,32,64,5,6,6,6,0,0,192,8,200,8,16, 80, 80, 16, 32, 64, 5, 6, 6, 6, 0, 0, 192, 8, 200, 8, 16,
224,5,8,8,6,0,0,40,0,192,8,200,8,16,224,5, 224, 5, 8, 8, 6, 0, 0, 40, 0, 192, 8, 200, 8, 16, 224, 5,
6,6,6,0,0,248,8,16,32,80,136,5,8,8,6,0, 6, 6, 6, 0, 0, 248, 8, 16, 32, 80, 136, 5, 8, 8, 6, 0,
0,40,0,248,8,16,32,80,136,5,6,6,6,0,0,64, 0, 40, 0, 248, 8, 16, 32, 80, 136, 5, 6, 6, 6, 0, 0, 64,
248,72,80,64,120,5,8,8,6,0,0,40,0,64,248,72, 248, 72, 80, 64, 120, 5, 8, 8, 6, 0, 0, 40, 0, 64, 248, 72,
80,64,120,4,4,4,6,0,1,16,208,16,224,5,7,7, 80, 64, 120, 4, 4, 4, 6, 0, 1, 16, 208, 16, 224, 5, 7, 7,
6,0,0,40,0,8,200,8,16,224,5,7,7,6,0,255, 6, 0, 0, 40, 0, 8, 200, 8, 16, 224, 5, 7, 7, 6, 0, 255,
32,120,136,40,16,40,64,5,9,9,6,0,255,40,0,32, 32, 120, 136, 40, 16, 40, 64, 5, 9, 9, 6, 0, 255, 40, 0, 32,
120,136,40,16,40,64,5,6,6,6,0,0,240,32,248,32, 120, 136, 40, 16, 40, 64, 5, 6, 6, 6, 0, 0, 240, 32, 248, 32,
64,128,5,8,8,6,0,0,40,0,240,32,248,32,64,128, 64, 128, 5, 8, 8, 6, 0, 0, 40, 0, 240, 32, 248, 32, 64, 128,
4,5,5,6,0,1,192,16,208,16,224,5,6,6,6,0, 4, 5, 5, 6, 0, 1, 192, 16, 208, 16, 224, 5, 6, 6, 6, 0,
0,192,8,200,8,16,224,5,8,8,6,0,0,40,0,192, 0, 192, 8, 200, 8, 16, 224, 5, 8, 8, 6, 0, 0, 40, 0, 192,
8,200,8,16,224,5,6,6,6,0,0,112,0,248,32,32, 8, 200, 8, 16, 224, 5, 6, 6, 6, 0, 0, 112, 0, 248, 32, 32,
64,5,8,8,6,0,0,40,0,112,0,248,32,32,64,3, 64, 5, 8, 8, 6, 0, 0, 40, 0, 112, 0, 248, 32, 32, 64, 3,
7,7,6,1,0,128,128,128,192,160,128,128,4,8,8,6, 7, 7, 6, 1, 0, 128, 128, 128, 192, 160, 128, 128, 4, 8, 8, 6,
1,0,80,0,128,128,192,160,128,128,5,7,7,6,0,0, 1, 0, 80, 0, 128, 128, 192, 160, 128, 128, 5, 7, 7, 6, 0, 0,
32,32,248,32,32,64,128,5,6,6,6,0,0,112,0,0, 32, 32, 248, 32, 32, 64, 128, 5, 6, 6, 6, 0, 0, 112, 0, 0,
0,0,248,5,6,6,6,0,0,248,8,80,32,80,128,5, 0, 0, 248, 5, 6, 6, 6, 0, 0, 248, 8, 80, 32, 80, 128, 5,
7,7,6,0,255,32,248,8,16,32,112,168,3,7,7,6, 7, 7, 6, 0, 255, 32, 248, 8, 16, 32, 112, 168, 3, 7, 7, 6,
1,0,32,32,32,32,32,64,128,5,5,5,6,0,0,16, 1, 0, 32, 32, 32, 32, 32, 64, 128, 5, 5, 5, 6, 0, 0, 16,
136,136,136,136,5,7,7,6,0,0,40,0,16,136,136,136, 136, 136, 136, 136, 5, 7, 7, 6, 0, 0, 40, 0, 16, 136, 136, 136,
136,5,8,8,6,0,0,24,24,0,16,136,136,136,136,5, 136, 5, 8, 8, 6, 0, 0, 24, 24, 0, 16, 136, 136, 136, 136, 5,
7,7,6,0,0,128,128,248,128,128,128,120,5,8,8,6, 7, 7, 6, 0, 0, 128, 128, 248, 128, 128, 128, 120, 5, 8, 8, 6,
0,0,40,128,128,248,128,128,128,120,5,8,8,6,0,0, 0, 0, 40, 128, 128, 248, 128, 128, 128, 120, 5, 8, 8, 6, 0, 0,
24,152,128,248,128,128,128,120,5,6,6,6,0,0,248,8, 24, 152, 128, 248, 128, 128, 128, 120, 5, 6, 6, 6, 0, 0, 248, 8,
8,8,16,96,5,8,8,6,0,0,40,0,248,8,8,8, 8, 8, 16, 96, 5, 8, 8, 6, 0, 0, 40, 0, 248, 8, 8, 8,
16,96,5,8,8,6,0,0,24,24,248,8,8,8,16,96, 16, 96, 5, 8, 8, 6, 0, 0, 24, 24, 248, 8, 8, 8, 16, 96,
5,5,5,6,0,1,64,160,16,8,8,5,7,7,6,0, 5, 5, 5, 6, 0, 1, 64, 160, 16, 8, 8, 5, 7, 7, 6, 0,
1,40,0,64,160,16,8,8,5,7,7,6,0,1,24,24, 1, 40, 0, 64, 160, 16, 8, 8, 5, 7, 7, 6, 0, 1, 24, 24,
64,160,16,8,8,5,6,6,6,0,0,32,248,32,32,168, 64, 160, 16, 8, 8, 5, 6, 6, 6, 0, 0, 32, 248, 32, 32, 168,
168,5,8,8,6,0,0,40,0,32,248,32,32,168,168,5, 168, 5, 8, 8, 6, 0, 0, 40, 0, 32, 248, 32, 32, 168, 168, 5,
8,8,6,0,0,24,24,32,248,32,32,168,168,5,6,6, 8, 8, 6, 0, 0, 24, 24, 32, 248, 32, 32, 168, 168, 5, 6, 6,
6,0,0,248,8,8,80,32,16,4,6,6,6,1,0,224, 6, 0, 0, 248, 8, 8, 80, 32, 16, 4, 6, 6, 6, 1, 0, 224,
0,224,0,224,16,5,6,6,6,0,0,32,64,128,144,248, 0, 224, 0, 224, 16, 5, 6, 6, 6, 0, 0, 32, 64, 128, 144, 248,
8,5,6,6,6,0,0,8,8,80,32,80,128,5,6,6, 8, 5, 6, 6, 6, 0, 0, 8, 8, 80, 32, 80, 128, 5, 6, 6,
6,0,0,120,32,248,32,32,56,5,7,7,6,0,0,64, 6, 0, 0, 120, 32, 248, 32, 32, 56, 5, 7, 7, 6, 0, 0, 64,
64,248,72,80,64,64,5,7,7,6,0,0,64,248,72,80, 64, 248, 72, 80, 64, 64, 5, 7, 7, 6, 0, 0, 64, 248, 72, 80,
64,64,64,5,5,5,6,0,0,112,16,16,16,248,5,7, 64, 64, 64, 5, 5, 5, 6, 0, 0, 112, 16, 16, 16, 248, 5, 7,
7,6,0,0,112,16,16,16,16,16,248,4,5,5,6,1, 7, 6, 0, 0, 112, 16, 16, 16, 16, 16, 248, 4, 5, 5, 6, 1,
0,240,16,240,16,240,5,7,7,6,0,0,248,8,8,248, 0, 240, 16, 240, 16, 240, 5, 7, 7, 6, 0, 0, 248, 8, 8, 248,
8,8,248,5,6,6,6,0,0,112,0,248,8,16,32,3, 8, 8, 248, 5, 6, 6, 6, 0, 0, 112, 0, 248, 8, 16, 32, 3,
6,6,6,1,0,160,160,160,160,32,64,5,6,6,6,0, 6, 6, 6, 1, 0, 160, 160, 160, 160, 32, 64, 5, 6, 6, 6, 0,
0,80,80,80,80,88,144,4,6,6,6,1,0,128,128,128, 0, 80, 80, 80, 80, 88, 144, 4, 6, 6, 6, 1, 0, 128, 128, 128,
144,160,192,5,6,6,6,0,0,248,136,136,136,248,136,5, 144, 160, 192, 5, 6, 6, 6, 0, 0, 248, 136, 136, 136, 248, 136, 5,
5,5,6,0,0,248,136,8,16,96,5,6,6,6,0,0, 5, 5, 6, 0, 0, 248, 136, 8, 16, 96, 5, 6, 6, 6, 0, 0,
248,136,8,8,16,96,5,6,6,6,0,0,16,248,80,80, 248, 136, 8, 8, 16, 96, 5, 6, 6, 6, 0, 0, 16, 248, 80, 80,
248,16,5,6,6,6,0,0,248,8,80,96,64,248,5,6, 248, 16, 5, 6, 6, 6, 0, 0, 248, 8, 80, 96, 64, 248, 5, 6,
6,6,0,0,248,8,248,8,16,32,5,6,6,6,0,0, 6, 6, 0, 0, 248, 8, 248, 8, 16, 32, 5, 6, 6, 6, 0, 0,
128,64,8,8,16,224,5,8,8,6,0,0,40,0,32,248, 128, 64, 8, 8, 16, 224, 5, 8, 8, 6, 0, 0, 40, 0, 32, 248,
136,8,24,32,5,6,6,6,0,0,64,248,72,72,136,144, 136, 8, 24, 32, 5, 6, 6, 6, 0, 0, 64, 248, 72, 72, 136, 144,
4,5,5,6,1,0,128,240,160,32,32,5,8,8,6,0, 4, 5, 5, 6, 1, 0, 128, 240, 160, 32, 32, 5, 8, 8, 6, 0,
0,40,0,248,136,8,8,16,96,5,8,8,6,0,0,40, 0, 40, 0, 248, 136, 8, 8, 16, 96, 5, 8, 8, 6, 0, 0, 40,
0,16,248,80,80,248,16,5,7,7,6,0,0,40,0,248, 0, 16, 248, 80, 80, 248, 16, 5, 7, 7, 6, 0, 0, 40, 0, 248,
16,32,32,248,5,8,8,6,0,0,40,0,248,8,248,8, 16, 32, 32, 248, 5, 8, 8, 6, 0, 0, 40, 0, 248, 8, 248, 8,
16,32,2,2,2,6,2,2,192,192,5,1,1,6,0,3, 16, 32, 2, 2, 2, 6, 2, 2, 192, 192, 5, 1, 1, 6, 0, 3,
248,5,5,5,6,0,1,128,64,32,16,8,5,6,6,6, 248, 5, 5, 5, 6, 0, 1, 128, 64, 32, 16, 8, 5, 6, 6, 6,
0,1,40,128,64,32,16,8,5,7,7,6,0,0,248,8, 0, 1, 40, 128, 64, 32, 16, 8, 5, 7, 7, 6, 0, 0, 248, 8,
8,8,8,8,8}; 8, 8, 8, 8, 8
};
...@@ -9,14 +9,15 @@ ...@@ -9,14 +9,15 @@
X Font ascent = 0 descent= 0 X Font ascent = 0 descent= 0
Max Font ascent = 8 descent=-2 Max Font ascent = 8 descent=-2
*/ */
#include <utility/u8g.h> #include <U8glib.h>
const u8g_fntpgm_uint8_t Marlin_symbols[140] U8G_SECTION(".progmem.Marlin_symbols") = { const u8g_fntpgm_uint8_t Marlin_symbols[140] U8G_SECTION(".progmem.Marlin_symbols") = {
0,6,9,0,254,0,0,0,0,0,1,9,0,8,254,0, 0, 6, 9, 0, 254, 0, 0, 0, 0, 0, 1, 9, 0, 8, 254, 0,
0,5,8,8,6,0,0,64,240,200,136,136,152,120,16,5, 0, 5, 8, 8, 6, 0, 0, 64, 240, 200, 136, 136, 152, 120, 16, 5,
8,8,6,0,0,192,248,136,136,136,136,136,248,5,5,5, 8, 8, 6, 0, 0, 192, 248, 136, 136, 136, 136, 136, 248, 5, 5, 5,
6,0,1,32,48,248,48,32,5,8,8,6,0,0,32,112, 6, 0, 1, 32, 48, 248, 48, 32, 5, 8, 8, 6, 0, 0, 32, 112,
248,32,32,32,32,224,5,9,9,6,0,255,32,112,168,168, 248, 32, 32, 32, 32, 224, 5, 9, 9, 6, 0, 255, 32, 112, 168, 168,
184,136,136,112,32,5,9,9,6,0,255,224,128,192,176,168, 184, 136, 136, 112, 32, 5, 9, 9, 6, 0, 255, 224, 128, 192, 176, 168,
40,48,40,40,5,9,9,6,0,255,248,168,136,136,136,136, 40, 48, 40, 40, 5, 9, 9, 6, 0, 255, 248, 168, 136, 136, 136, 136,
136,168,248,5,10,10,6,0,254,32,80,80,80,80,136,168, 136, 168, 248, 5, 10, 10, 6, 0, 254, 32, 80, 80, 80, 80, 136, 168,
168,136,112,3,3,3,6,0,3,64,160,64}; 168, 136, 112, 3, 3, 3, 6, 0, 3, 64, 160, 64
};
...@@ -116,7 +116,6 @@ ...@@ -116,7 +116,6 @@
#if ENABLED(U8GLIB_ST7920) #if ENABLED(U8GLIB_ST7920)
//U8GLIB_ST7920_128X64_RRD u8g(0,0,0); //U8GLIB_ST7920_128X64_RRD u8g(0,0,0);
U8GLIB_ST7920_128X64_RRD u8g(0); U8GLIB_ST7920_128X64_RRD u8g(0);
//U8GLIB_ST7920_128X64_1X u8g(LCD_PINS_D4, LCD_PINS_ENABLE, LCD_PINS_RS);
#elif ENABLED(MAKRPANEL) #elif ENABLED(MAKRPANEL)
// The MaKrPanel display, ST7565 controller as well // The MaKrPanel display, ST7565 controller as well
U8GLIB_NHD_C12864 u8g(DOGLCD_CS, DOGLCD_A0); U8GLIB_NHD_C12864 u8g(DOGLCD_CS, DOGLCD_A0);
...@@ -151,7 +150,7 @@ static unsigned char blink = 0; // Variable for visualization of fan rotation in ...@@ -151,7 +150,7 @@ static unsigned char blink = 0; // Variable for visualization of fan rotation in
static char currentfont = 0; static char currentfont = 0;
static void lcd_setFont(char font_nr) { static void lcd_setFont(char font_nr) {
switch(font_nr) { switch (font_nr) {
case FONT_STATUSMENU : {u8g.setFont(FONT_STATUSMENU_NAME); currentfont = FONT_STATUSMENU;}; break; case FONT_STATUSMENU : {u8g.setFont(FONT_STATUSMENU_NAME); currentfont = FONT_STATUSMENU;}; break;
case FONT_MENU : {u8g.setFont(FONT_MENU_NAME); currentfont = FONT_MENU;}; break; case FONT_MENU : {u8g.setFont(FONT_MENU_NAME); currentfont = FONT_MENU;}; break;
case FONT_SPECIAL : {u8g.setFont(FONT_SPECIAL_NAME); currentfont = FONT_SPECIAL;}; break; case FONT_SPECIAL : {u8g.setFont(FONT_SPECIAL_NAME); currentfont = FONT_SPECIAL;}; break;
...@@ -166,18 +165,16 @@ char lcd_print(char c) { ...@@ -166,18 +165,16 @@ char lcd_print(char c) {
u8g.print(c); u8g.print(c);
lcd_setFont(currentfont); lcd_setFont(currentfont);
return 1; return 1;
} else { } else
return charset_mapper(c); return charset_mapper(c);
}
} }
char lcd_print(char* str) { char lcd_print(char* str) {
char c; char c;
int i = 0; int i = 0;
char n = 0; char n = 0;
while ((c = str[i++])) { while ((c = str[i++]))
n += lcd_print(c); n += lcd_print(c);
}
return n; return n;
} }
...@@ -185,9 +182,8 @@ char lcd_print(char* str) { ...@@ -185,9 +182,8 @@ char lcd_print(char* str) {
char lcd_printPGM(const char* str) { char lcd_printPGM(const char* str) {
char c; char c;
char n = 0; char n = 0;
while ((c = pgm_read_byte(str++))) { while ((c = pgm_read_byte(str++)))
n += lcd_print(c); n += lcd_print(c);
}
return n; return n;
} }
...@@ -197,62 +193,55 @@ char lcd_printPGM(const char* str) { ...@@ -197,62 +193,55 @@ char lcd_printPGM(const char* str) {
/* Warning: This function is called from interrupt context */ /* Warning: This function is called from interrupt context */
static void lcd_implementation_init() { static void lcd_implementation_init() {
#if ENABLED(LCD_PIN_BL) // Enable LCD backlight
#if ENABLED(LCD_PIN_BL) // Enable LCD backlight
pinMode(LCD_PIN_BL, OUTPUT); pinMode(LCD_PIN_BL, OUTPUT);
digitalWrite(LCD_PIN_BL, HIGH); digitalWrite(LCD_PIN_BL, HIGH);
#endif #endif
#if ENABLED(LCD_PIN_RESET)
#if ENABLED(LCD_PIN_RESET)
pinMode(LCD_PIN_RESET, OUTPUT); pinMode(LCD_PIN_RESET, OUTPUT);
digitalWrite(LCD_PIN_RESET, HIGH); digitalWrite(LCD_PIN_RESET, HIGH);
#endif #endif
#if DISABLED(MINIPANEL) // setContrast not working for Mini Panel #if DISABLED(MINIPANEL) // setContrast not working for Mini Panel
u8g.setContrast(lcd_contrast); u8g.setContrast(lcd_contrast);
#endif #endif
// FIXME: remove this workaround // FIXME: remove this workaround
// Uncomment this if you have the first generation (V1.10) of STBs board // Uncomment this if you have the first generation (V1.10) of STBs board
// pinMode(17, OUTPUT); // Enable LCD backlight // pinMode(17, OUTPUT); // Enable LCD backlight
// digitalWrite(17, HIGH); // digitalWrite(17, HIGH);
#if ENABLED(LCD_SCREEN_ROT_90)
#if ENABLED(LCD_SCREEN_ROT_90)
u8g.setRot90(); // Rotate screen by 90° u8g.setRot90(); // Rotate screen by 90°
#elif ENABLED(LCD_SCREEN_ROT_180) #elif ENABLED(LCD_SCREEN_ROT_180)
u8g.setRot180(); // Rotate screen by 180° u8g.setRot180(); // Rotate screen by 180°
#elif ENABLED(LCD_SCREEN_ROT_270) #elif ENABLED(LCD_SCREEN_ROT_270)
u8g.setRot270(); // Rotate screen by 270° u8g.setRot270(); // Rotate screen by 270°
#endif #endif
#if ENABLED(SHOW_BOOTSCREEN)
#if ENABLED(SHOW_BOOTSCREEN)
int offx = (u8g.getWidth() - START_BMPWIDTH) / 2; int offx = (u8g.getWidth() - START_BMPWIDTH) / 2;
#if ENABLED(START_BMPHIGH) #if ENABLED(START_BMPHIGH)
int offy = 0; int offy = 0;
#else #else
int offy = DOG_CHAR_HEIGHT; int offy = DOG_CHAR_HEIGHT;
#endif #endif
int txt1X = (u8g.getWidth() - (sizeof(STRING_SPLASH_LINE1) - 1) * DOG_CHAR_WIDTH) / 2;
int txt1X = (u8g.getWidth() - (sizeof(STRING_SPLASH_LINE1) - 1)*DOG_CHAR_WIDTH) / 2;
u8g.firstPage(); u8g.firstPage();
do { do {
if (show_bootscreen) { if (show_bootscreen) {
u8g.drawBitmapP(offx, offy, START_BMPBYTEWIDTH, START_BMPHEIGHT, start_bmp); u8g.drawBitmapP(offx, offy, START_BMPBYTEWIDTH, START_BMPHEIGHT, start_bmp);
lcd_setFont(FONT_MENU); lcd_setFont(FONT_MENU);
#if DISABLED(STRING_SPLASH_LINE2) #if DISABLED(STRING_SPLASH_LINE2)
u8g.drawStr(txt1X, u8g.getHeight() - DOG_CHAR_HEIGHT, STRING_SPLASH_LINE1); u8g.drawStr(txt1X, u8g.getHeight() - DOG_CHAR_HEIGHT, STRING_SPLASH_LINE1);
#else #else
int txt2X = (u8g.getWidth() - (sizeof(STRING_SPLASH_LINE2) - 1)*DOG_CHAR_WIDTH) / 2; int txt2X = (u8g.getWidth() - (sizeof(STRING_SPLASH_LINE2) - 1) * DOG_CHAR_WIDTH) / 2;
u8g.drawStr(txt1X, u8g.getHeight() - DOG_CHAR_HEIGHT*3/2, STRING_SPLASH_LINE1); u8g.drawStr(txt1X, u8g.getHeight() - DOG_CHAR_HEIGHT * 3 / 2, STRING_SPLASH_LINE1);
u8g.drawStr(txt2X, u8g.getHeight() - DOG_CHAR_HEIGHT*1/2, STRING_SPLASH_LINE2); u8g.drawStr(txt2X, u8g.getHeight() - DOG_CHAR_HEIGHT * 1 / 2, STRING_SPLASH_LINE2);
#endif #endif
} }
} while (u8g.nextPage()); } while (u8g.nextPage());
if (show_bootscreen) { if (show_bootscreen) {
delay(SPLASH_SCREEN_DURATION); delay(SPLASH_SCREEN_DURATION);
show_bootscreen = false; show_bootscreen = false;
} }
#endif #endif
} }
static void lcd_implementation_clear() { } // Automatically cleared by Picture Loop static void lcd_implementation_clear() { } // Automatically cleared by Picture Loop
...@@ -260,161 +249,140 @@ static void lcd_implementation_clear() { } // Automatically cleared by Picture L ...@@ -260,161 +249,140 @@ static void lcd_implementation_clear() { } // Automatically cleared by Picture L
static void _draw_heater_status(int x, int heater) { static void _draw_heater_status(int x, int heater) {
bool isBed = heater < 0; bool isBed = heater < 0;
int y = 17 + (isBed ? 1 : 0); int y = 17 + (isBed ? 1 : 0);
lcd_setFont(FONT_STATUSMENU); lcd_setFont(FONT_STATUSMENU);
u8g.setPrintPos(x,7); u8g.setPrintPos(x, 7);
lcd_print(itostr3(int((heater >= 0 ? degTargetHotend(heater) : degTargetBed()) + 0.5))); lcd_print(itostr3(int((heater >= 0 ? degTargetHotend(heater) : degTargetBed()) + 0.5)));
lcd_printPGM(PSTR(LCD_STR_DEGREE " ")); lcd_printPGM(PSTR(LCD_STR_DEGREE " "));
u8g.setPrintPos(x,28); u8g.setPrintPos(x, 28);
lcd_print(itostr3(int(heater >= 0 ? degHotend(heater) : degBed()) + 0.5)); lcd_print(itostr3(int(heater >= 0 ? degHotend(heater) : degBed()) + 0.5));
lcd_printPGM(PSTR(LCD_STR_DEGREE " ")); lcd_printPGM(PSTR(LCD_STR_DEGREE " "));
if (!isHeatingHotend(0)) { if (!isHeatingHotend(0))
u8g.drawBox(x+7,y,2,2); u8g.drawBox(x + 7, y, 2, 2);
}
else { else {
u8g.setColorIndex(0); // white on black u8g.setColorIndex(0); // white on black
u8g.drawBox(x+7,y,2,2); u8g.drawBox(x + 7, y, 2, 2);
u8g.setColorIndex(1); // black on white u8g.setColorIndex(1); // black on white
} }
} }
static void lcd_implementation_status_screen() { static void lcd_implementation_status_screen() {
u8g.setColorIndex(1); // black on white u8g.setColorIndex(1); // black on white
// Symbols menu graphics, animated fan // Symbols menu graphics, animated fan
u8g.drawBitmapP(9,1,STATUS_SCREENBYTEWIDTH,STATUS_SCREENHEIGHT, (blink % 2) && fanSpeed ? status_screen0_bmp : status_screen1_bmp); u8g.drawBitmapP(9, 1, STATUS_SCREENBYTEWIDTH, STATUS_SCREENHEIGHT, (blink % 2) && fanSpeed ? status_screen0_bmp : status_screen1_bmp);
#if ENABLED(SDSUPPORT)
#if ENABLED(SDSUPPORT)
// SD Card Symbol // SD Card Symbol
u8g.drawBox(42, 42 - TALL_FONT_CORRECTION, 8, 7); u8g.drawBox(42, 42 - TALL_FONT_CORRECTION, 8, 7);
u8g.drawBox(50, 44 - TALL_FONT_CORRECTION, 2, 5); u8g.drawBox(50, 44 - TALL_FONT_CORRECTION, 2, 5);
u8g.drawFrame(42, 49 - TALL_FONT_CORRECTION, 10, 4); u8g.drawFrame(42, 49 - TALL_FONT_CORRECTION, 10, 4);
u8g.drawPixel(50, 43 - TALL_FONT_CORRECTION); u8g.drawPixel(50, 43 - TALL_FONT_CORRECTION);
// Progress bar frame // Progress bar frame
u8g.drawFrame(54, 49, 73, 4 - TALL_FONT_CORRECTION); u8g.drawFrame(54, 49, 73, 4 - TALL_FONT_CORRECTION);
// SD Card Progress bar and clock // SD Card Progress bar and clock
lcd_setFont(FONT_STATUSMENU); lcd_setFont(FONT_STATUSMENU);
if (IS_SD_PRINTING) { if (IS_SD_PRINTING) {
// Progress bar solid part // Progress bar solid part
u8g.drawBox(55, 50, (unsigned int)(71.f * card.percentDone() / 100.f), 2 - TALL_FONT_CORRECTION); u8g.drawBox(55, 50, (unsigned int)(71.f * card.percentDone() / 100.f), 2 - TALL_FONT_CORRECTION);
} }
u8g.setPrintPos(80, 48);
u8g.setPrintPos(80,48);
if (print_job_start_ms != 0) { if (print_job_start_ms != 0) {
#if HAS(LCD_POWER_SENSOR) #if HAS(LCD_POWER_SENSOR)
if (millis() < print_millis + 1000) { if (millis() < print_millis + 1000) {
uint16_t time = (millis() - print_job_start_ms) / 60000; uint16_t time = (millis() - print_job_start_ms) / 60000;
lcd_print(itostr2(time/60)); lcd_print(itostr2(time/60));
lcd_print(':'); lcd_print(':');
lcd_print(itostr2(time%60)); lcd_print(itostr2(time%60));
} } else {
else {
lcd_print(itostr4(power_consumption_hour-startpower)); lcd_print(itostr4(power_consumption_hour-startpower));
lcd_print("Wh"); lcd_print("Wh");
} }
#else #else
uint16_t time = (millis() - print_job_start_ms) / 60000; uint16_t time = (millis() - print_job_start_ms) / 60000;
lcd_print(itostr2(time/60)); lcd_print(itostr2(time / 60));
lcd_print(':'); lcd_print(':');
lcd_print(itostr2(time%60)); lcd_print(itostr2(time % 60));
#endif #endif
} } else
else {
lcd_printPGM(PSTR("--:--")); lcd_printPGM(PSTR("--:--"));
} #endif
#endif
// Hotends // Hotends
for (int i = 0; i < HOTENDS; i++) _draw_heater_status(6 + i * 25, i); for (int i = 0; i < HOTENDS; i++) _draw_heater_status(6 + i * 25, i);
// Heatbed // Heatbed
if (HOTENDS < 4) _draw_heater_status(81, -1); if (HOTENDS < 4) _draw_heater_status(81, -1);
// Fan // Fan
lcd_setFont(FONT_STATUSMENU); lcd_setFont(FONT_STATUSMENU);
u8g.setPrintPos(104,27); u8g.setPrintPos(104, 27);
#if HAS(FAN) #if HAS(FAN)
int per = ((fanSpeed + 1) * 100) / 256; int per = ((fanSpeed + 1) * 100) / 256;
if (per) { if (per) {
lcd_print(itostr3(per)); lcd_print(itostr3(per));
lcd_print('%'); lcd_print('%');
} } else
else #endif
#endif
{ {
lcd_printPGM(PSTR("---")); lcd_printPGM(PSTR("---"));
} }
// X, Y, Z-Coordinates // X, Y, Z-Coordinates
#define XYZ_BASELINE 38 #define XYZ_BASELINE 38
lcd_setFont(FONT_STATUSMENU); lcd_setFont(FONT_STATUSMENU);
#if ENABLED(USE_SMALL_INFOFONT)
#if ENABLED(USE_SMALL_INFOFONT) u8g.drawBox(0, 30, LCD_PIXEL_WIDTH, 10);
u8g.drawBox(0,30,LCD_PIXEL_WIDTH,10); #else
#else u8g.drawBox(0, 30, LCD_PIXEL_WIDTH, 9);
u8g.drawBox(0,30,LCD_PIXEL_WIDTH,9); #endif
#endif
u8g.setColorIndex(0); // white on black u8g.setColorIndex(0); // white on black
u8g.setPrintPos(2,XYZ_BASELINE); u8g.setPrintPos(2, XYZ_BASELINE);
lcd_print('X'); lcd_print('X');
u8g.drawPixel(8,XYZ_BASELINE - 5); u8g.drawPixel(8, XYZ_BASELINE - 5);
u8g.drawPixel(8,XYZ_BASELINE - 3); u8g.drawPixel(8, XYZ_BASELINE - 3);
u8g.setPrintPos(10,XYZ_BASELINE); u8g.setPrintPos(10, XYZ_BASELINE);
if (axis_known_position[X_AXIS]) if (axis_known_position[X_AXIS])
lcd_print(ftostr31ns(current_position[X_AXIS])); lcd_print(ftostr31ns(current_position[X_AXIS]));
else else
lcd_printPGM(PSTR("---")); lcd_printPGM(PSTR("---"));
u8g.setPrintPos(43,XYZ_BASELINE); u8g.setPrintPos(43, XYZ_BASELINE);
lcd_print('Y'); lcd_print('Y');
u8g.drawPixel(49,XYZ_BASELINE - 5); u8g.drawPixel(49, XYZ_BASELINE - 5);
u8g.drawPixel(49,XYZ_BASELINE - 3); u8g.drawPixel(49, XYZ_BASELINE - 3);
u8g.setPrintPos(51,XYZ_BASELINE); u8g.setPrintPos(51, XYZ_BASELINE);
if (axis_known_position[Y_AXIS]) if (axis_known_position[Y_AXIS])
lcd_print(ftostr31ns(current_position[Y_AXIS])); lcd_print(ftostr31ns(current_position[Y_AXIS]));
else else
lcd_printPGM(PSTR("---")); lcd_printPGM(PSTR("---"));
u8g.setPrintPos(83,XYZ_BASELINE); u8g.setPrintPos(83, XYZ_BASELINE);
lcd_print('Z'); lcd_print('Z');
u8g.drawPixel(89,XYZ_BASELINE - 5); u8g.drawPixel(89, XYZ_BASELINE - 5);
u8g.drawPixel(89,XYZ_BASELINE - 3); u8g.drawPixel(89, XYZ_BASELINE - 3);
u8g.setPrintPos(91,XYZ_BASELINE); u8g.setPrintPos(91, XYZ_BASELINE);
if (axis_known_position[Z_AXIS]) if (axis_known_position[Z_AXIS])
lcd_print(ftostr32sp(current_position[Z_AXIS])); lcd_print(ftostr32sp(current_position[Z_AXIS]));
else else
lcd_printPGM(PSTR("---.--")); lcd_printPGM(PSTR("---.--"));
u8g.setColorIndex(1); // black on white u8g.setColorIndex(1); // black on white
// Feedrate // Feedrate
lcd_setFont(FONT_MENU); lcd_setFont(FONT_MENU);
u8g.setPrintPos(3,49); u8g.setPrintPos(3, 49);
lcd_print(LCD_STR_FEEDRATE[0]); lcd_print(LCD_STR_FEEDRATE[0]);
lcd_setFont(FONT_STATUSMENU); lcd_setFont(FONT_STATUSMENU);
u8g.setPrintPos(12,49); u8g.setPrintPos(12, 49);
lcd_print(itostr3(feedrate_multiplier)); lcd_print(itostr3(feedrate_multiplier));
lcd_print('%'); lcd_print('%');
// Status line // Status line
lcd_setFont(FONT_STATUSMENU); lcd_setFont(FONT_STATUSMENU);
#if ENABLED(USE_SMALL_INFOFONT) #if ENABLED(USE_SMALL_INFOFONT)
u8g.setPrintPos(0,62); u8g.setPrintPos(0, 62);
#else #else
u8g.setPrintPos(0,63); u8g.setPrintPos(0, 63);
#endif #endif
#if HAS(LCD_FILAMENT_SENSOR) || HAS(LCD_POWER_SENSOR)
#if HAS(LCD_FILAMENT_SENSOR) || HAS(LCD_POWER_SENSOR) if (millis() < previous_lcd_status_ms + 5000) //Display both Status message line and Filament display on the last line
if (millis() < previous_lcd_status_ms + 5000) { //Display both Status message line and Filament display on the last line
lcd_print(lcd_status_message); lcd_print(lcd_status_message);
} }
#if HAS(LCD_POWER_SENSOR) #if HAS(LCD_POWER_SENSOR)
#if HAS(LCD_FILAMENT_SENSOR) #if HAS(LCD_FILAMENT_SENSOR)
else if (millis() < previous_lcd_status_ms + 10000) else if (millis() < previous_lcd_status_ms + 10000)
#else #else
else else
#endif #endif
{ {
lcd_printPGM(PSTR("P:")); lcd_printPGM(PSTR("P:"));
lcd_print(ftostr31(power_consumption_meas)); lcd_print(ftostr31(power_consumption_meas));
...@@ -422,8 +390,8 @@ static void lcd_implementation_status_screen() { ...@@ -422,8 +390,8 @@ static void lcd_implementation_status_screen() {
lcd_print(ltostr7(power_consumption_hour)); lcd_print(ltostr7(power_consumption_hour));
lcd_printPGM(PSTR("Wh")); lcd_printPGM(PSTR("Wh"));
} }
#endif #endif
#if HAS(LCD_FILAMENT_SENSOR) #if HAS(LCD_FILAMENT_SENSOR)
else { else {
lcd_printPGM(PSTR("dia:")); lcd_printPGM(PSTR("dia:"));
lcd_print(ftostr12ns(filament_width_meas)); lcd_print(ftostr12ns(filament_width_meas));
...@@ -431,10 +399,10 @@ static void lcd_implementation_status_screen() { ...@@ -431,10 +399,10 @@ static void lcd_implementation_status_screen() {
lcd_print(itostr3(100.0 * volumetric_multiplier[FILAMENT_SENSOR_EXTRUDER_NUM])); lcd_print(itostr3(100.0 * volumetric_multiplier[FILAMENT_SENSOR_EXTRUDER_NUM]));
lcd_print('%'); lcd_print('%');
} }
#endif #endif
#else #else
lcd_print(lcd_status_message); lcd_print(lcd_status_message);
#endif #endif
} }
static void lcd_implementation_mark_as_selected(uint8_t row, bool isSelected) { static void lcd_implementation_mark_as_selected(uint8_t row, bool isSelected) {
...@@ -442,8 +410,7 @@ static void lcd_implementation_mark_as_selected(uint8_t row, bool isSelected) { ...@@ -442,8 +410,7 @@ static void lcd_implementation_mark_as_selected(uint8_t row, bool isSelected) {
u8g.setColorIndex(1); // black on white u8g.setColorIndex(1); // black on white
u8g.drawBox(0, row * DOG_CHAR_HEIGHT + 3 - TALL_FONT_CORRECTION, LCD_PIXEL_WIDTH, DOG_CHAR_HEIGHT); u8g.drawBox(0, row * DOG_CHAR_HEIGHT + 3 - TALL_FONT_CORRECTION, LCD_PIXEL_WIDTH, DOG_CHAR_HEIGHT);
u8g.setColorIndex(0); // following text must be white on black u8g.setColorIndex(0); // following text must be white on black
} } else {
else {
u8g.setColorIndex(1); // unmarked text is black on white u8g.setColorIndex(1); // unmarked text is black on white
} }
u8g.setPrintPos(START_ROW * DOG_CHAR_WIDTH, (row + 1) * DOG_CHAR_HEIGHT); u8g.setPrintPos(START_ROW * DOG_CHAR_WIDTH, (row + 1) * DOG_CHAR_HEIGHT);
...@@ -452,9 +419,7 @@ static void lcd_implementation_mark_as_selected(uint8_t row, bool isSelected) { ...@@ -452,9 +419,7 @@ static void lcd_implementation_mark_as_selected(uint8_t row, bool isSelected) {
static void lcd_implementation_drawmenu_generic(bool isSelected, uint8_t row, const char* pstr, char pre_char, char post_char) { static void lcd_implementation_drawmenu_generic(bool isSelected, uint8_t row, const char* pstr, char pre_char, char post_char) {
char c; char c;
uint8_t n = LCD_WIDTH - 2; uint8_t n = LCD_WIDTH - 2;
lcd_implementation_mark_as_selected(row, isSelected); lcd_implementation_mark_as_selected(row, isSelected);
while (c = pgm_read_byte(pstr)) { while (c = pgm_read_byte(pstr)) {
n -= lcd_print(c); n -= lcd_print(c);
pstr++; pstr++;
...@@ -469,9 +434,7 @@ static void _drawmenu_setting_edit_generic(bool isSelected, uint8_t row, const c ...@@ -469,9 +434,7 @@ static void _drawmenu_setting_edit_generic(bool isSelected, uint8_t row, const c
char c; char c;
uint8_t vallen = (pgm ? lcd_strlen_P(data) : (lcd_strlen((char*)data))); uint8_t vallen = (pgm ? lcd_strlen_P(data) : (lcd_strlen((char*)data)));
uint8_t n = LCD_WIDTH - 2 - vallen; uint8_t n = LCD_WIDTH - 2 - vallen;
lcd_implementation_mark_as_selected(row, isSelected); lcd_implementation_mark_as_selected(row, isSelected);
while (c = pgm_read_byte(pstr)) { while (c = pgm_read_byte(pstr)) {
n -= lcd_print(c); n -= lcd_print(c);
pstr++; pstr++;
...@@ -479,7 +442,7 @@ static void _drawmenu_setting_edit_generic(bool isSelected, uint8_t row, const c ...@@ -479,7 +442,7 @@ static void _drawmenu_setting_edit_generic(bool isSelected, uint8_t row, const c
lcd_print(':'); lcd_print(':');
while (n--) lcd_print(' '); while (n--) lcd_print(' ');
u8g.setPrintPos(LCD_PIXEL_WIDTH - DOG_CHAR_WIDTH * vallen, (row + 1) * DOG_CHAR_HEIGHT); u8g.setPrintPos(LCD_PIXEL_WIDTH - DOG_CHAR_WIDTH * vallen, (row + 1) * DOG_CHAR_HEIGHT);
if (pgm) { lcd_printPGM(data); } else { lcd_print((char *)data); } if (pgm) lcd_printPGM(data); else lcd_print((char*)data);
} }
#define lcd_implementation_drawmenu_setting_edit_generic(sel, row, pstr, data) _drawmenu_setting_edit_generic(sel, row, pstr, data, false) #define lcd_implementation_drawmenu_setting_edit_generic(sel, row, pstr, data) _drawmenu_setting_edit_generic(sel, row, pstr, data, false)
...@@ -510,24 +473,18 @@ void lcd_implementation_drawedit(const char* pstr, char* value) { ...@@ -510,24 +473,18 @@ void lcd_implementation_drawedit(const char* pstr, char* value) {
uint8_t rows = 1; uint8_t rows = 1;
uint8_t lcd_width = LCD_WIDTH, char_width = DOG_CHAR_WIDTH; uint8_t lcd_width = LCD_WIDTH, char_width = DOG_CHAR_WIDTH;
uint8_t vallen = lcd_strlen(value); uint8_t vallen = lcd_strlen(value);
#if ENABLED(USE_BIG_EDIT_FONT)
#if ENABLED(USE_BIG_EDIT_FONT)
if (lcd_strlen_P(pstr) <= LCD_WIDTH_EDIT - 1) { if (lcd_strlen_P(pstr) <= LCD_WIDTH_EDIT - 1) {
lcd_setFont(FONT_MENU_EDIT); lcd_setFont(FONT_MENU_EDIT);
lcd_width = LCD_WIDTH_EDIT + 1; lcd_width = LCD_WIDTH_EDIT + 1;
char_width = DOG_CHAR_WIDTH_EDIT; char_width = DOG_CHAR_WIDTH_EDIT;
if (lcd_strlen_P(pstr) >= LCD_WIDTH_EDIT - vallen) rows = 2; if (lcd_strlen_P(pstr) >= LCD_WIDTH_EDIT - vallen) rows = 2;
} } else
else {
lcd_setFont(FONT_MENU); lcd_setFont(FONT_MENU);
} #endif
#endif
if (lcd_strlen_P(pstr) > LCD_WIDTH - 2 - vallen) rows = 2; if (lcd_strlen_P(pstr) > LCD_WIDTH - 2 - vallen) rows = 2;
const float kHalfChar = DOG_CHAR_HEIGHT_EDIT / 2; const float kHalfChar = DOG_CHAR_HEIGHT_EDIT / 2;
float rowHeight = u8g.getHeight() / (rows + 1); // 1/(rows+1) = 1/2 or 1/3 float rowHeight = u8g.getHeight() / (rows + 1); // 1/(rows+1) = 1/2 or 1/3
u8g.setPrintPos(0, rowHeight + kHalfChar); u8g.setPrintPos(0, rowHeight + kHalfChar);
lcd_printPGM(pstr); lcd_printPGM(pstr);
lcd_print(':'); lcd_print(':');
...@@ -535,17 +492,16 @@ void lcd_implementation_drawedit(const char* pstr, char* value) { ...@@ -535,17 +492,16 @@ void lcd_implementation_drawedit(const char* pstr, char* value) {
lcd_print(value); lcd_print(value);
} }
static void _drawmenu_sd(bool isSelected, uint8_t row, const char* pstr, const char* filename, char * const longFilename, bool isDir) { #if ENABLED(SDSUPPORT)
static void _drawmenu_sd(bool isSelected, uint8_t row, const char* pstr, const char* filename, char* const longFilename, bool isDir) {
char c; char c;
uint8_t n = LCD_WIDTH - 1; uint8_t n = LCD_WIDTH - 1;
if (longFilename[0]) { if (longFilename[0]) {
filename = longFilename; filename = longFilename;
longFilename[n] = '\0'; longFilename[n] = '\0';
} }
lcd_implementation_mark_as_selected(row, isSelected); lcd_implementation_mark_as_selected(row, isSelected);
if (isDir) lcd_print(LCD_STR_FOLDER[0]); if (isDir) lcd_print(LCD_STR_FOLDER[0]);
while ((c = *filename)) { while ((c = *filename)) {
n -= lcd_print(c); n -= lcd_print(c);
...@@ -557,6 +513,8 @@ static void _drawmenu_sd(bool isSelected, uint8_t row, const char* pstr, const c ...@@ -557,6 +513,8 @@ static void _drawmenu_sd(bool isSelected, uint8_t row, const char* pstr, const c
#define lcd_implementation_drawmenu_sdfile(sel, row, pstr, filename, longFilename) _drawmenu_sd(sel, row, pstr, filename, longFilename, false) #define lcd_implementation_drawmenu_sdfile(sel, row, pstr, filename, longFilename) _drawmenu_sd(sel, row, pstr, filename, longFilename, false)
#define lcd_implementation_drawmenu_sddirectory(sel, row, pstr, filename, longFilename) _drawmenu_sd(sel, row, pstr, filename, longFilename, true) #define lcd_implementation_drawmenu_sddirectory(sel, row, pstr, filename, longFilename) _drawmenu_sd(sel, row, pstr, filename, longFilename, true)
#endif //SDSUPPORT
#define lcd_implementation_drawmenu_back(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, LCD_STR_UPLEVEL[0], LCD_STR_UPLEVEL[0]) #define lcd_implementation_drawmenu_back(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, LCD_STR_UPLEVEL[0], LCD_STR_UPLEVEL[0])
#define lcd_implementation_drawmenu_submenu(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', LCD_STR_ARROW_RIGHT[0]) #define lcd_implementation_drawmenu_submenu(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', LCD_STR_ARROW_RIGHT[0])
#define lcd_implementation_drawmenu_gcode(sel, row, pstr, gcode) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', ' ') #define lcd_implementation_drawmenu_gcode(sel, row, pstr, gcode) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', ' ')
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment