// show firmware version static void gs_firmware(u8 change) { if (change == 0xff) { lcd_set(L7SEG, LB_EMPTY); return; } lcd_7seg(L7_F); lcd_chars(VERSION); }
static void gs_endpoint_max(u8 change) { u8 *addr = &cg.endpoint_max; if (change == 0xff) { lcd_segment(LS_MENU_EPO, LS_OFF); lcd_segment(LS_SYM_PERCENT, LS_OFF); lcd_set(L7SEG, LB_EMPTY); return; } if (change) *addr = (u8)menu_change_val(*addr, 100, 150, 5, 0); lcd_segment(LS_SYM_PERCENT, LS_ON); lcd_segment(LS_MENU_EPO, LS_ON); lcd_char_num3(*addr); if (*addr > 120) { lcd_7seg(L7_D); lcd_set_blink(L7SEG, LB_SPC); } else lcd_set(L7SEG, LB_EMPTY); }
static void gs_throttle_dead(u8 change) { u8 *addr = &cg.throttle_dead_zone; if (change == 0xff) { lcd_set(L7SEG, LB_EMPTY); return; } if (change) *addr = (u8)menu_change_val(*addr, 0, 50, 2, 0); lcd_7seg(2); lcd_char_num3(*addr); }
static void gs_long_press_delay(u8 change) { u8 *addr = &cg.long_press_delay; if (change == 0xff) { lcd_set(L7SEG, LB_EMPTY); return; } if (change) *addr = (u8)menu_change_val(*addr, 20, 200, 5, 0); lcd_7seg(L7_D); lcd_char_num3(*addr * 5); }
static void gs_key_beep(u8 change) { if (change == 0xff) { lcd_set(L7SEG, LB_EMPTY); return; } if (change) cg.key_beep ^= 1; lcd_7seg(L7_B); if (cg.key_beep) lcd_chars("ON "); else lcd_chars("OFF"); }
static void gs_backlight_time(u8 change) { s8 i; u16 *addr = &cg.backlight_time; if (change == 0xff) { lcd_set(L7SEG, LB_EMPTY); return; } if (change) { if (btn(BTN_ROT_L)) { // find lower value for (i = BL_STEPS_SIZE - 1; i >= 0; i--) { if (bl_steps[i] >= *addr) continue; *addr = bl_steps[i]; break; } if (i < 0) *addr = bl_steps[BL_STEPS_SIZE - 1]; } else { // find upper value for (i = 0; i < BL_STEPS_SIZE; i++) { if (bl_steps[i] <= *addr) continue; *addr = bl_steps[i]; break; } if (i == BL_STEPS_SIZE) *addr = bl_steps[0]; } } lcd_7seg(L7_L); if (*addr < 60) { // seconds bl_num2((u8)*addr); lcd_char(LCHR3, 'S'); } else if (*addr < 3600) { // minutes bl_num2((u8)(*addr / 60)); lcd_char(LCHR3, 'M'); } else if (*addr != BACKLIGHT_MAX) { // hours bl_num2((u8)(*addr / 3600)); lcd_char(LCHR3, 'H'); } else { // max lcd_chars("MAX"); } }
static void gs_reset_model_all(u8 change) { if (change == 0xff) { lcd_set(L7SEG, LB_EMPTY); if (gs_reset_flag) { gs_reset_flag = 0; cg.model = 0; config_global_save(); eeprom_empty_models(); menu_load_model(); } return; } if (change) gs_reset_flag ^= 1; lcd_7seg(L7_R); if (gs_reset_flag) lcd_chars("YES"); else lcd_chars("MOD"); }
static void gs_inactivity_alarm(u8 change) { if (change == 0xff) { lcd_set(L7SEG, LB_EMPTY); return; } if (change) { cg.inactivity_alarm = (u8)menu_change_val(cg.inactivity_alarm, 0, 10, 1, 1); reset_inactivity_timer(); } lcd_7seg(L7_A); if (!cg.inactivity_alarm) lcd_chars("OFF"); else { bl_num2(cg.inactivity_alarm); lcd_char(LCHR3, 'M'); } }
void menu_key_test(void) { u8 i; u16 bit; // cleanup screen and disable possible low bat warning buzzer_off(); key_beep(); menu_battery_low = 0; // it will be set automatically again battery_low_shutup = 0; // do full screen blink lcd_set_full_on(); delay_menu_always(2); while (btns(BTN_ENTER)) stop(); // wait for release of ENTER lcd_clear(); button_autorepeat(0); // disable autorepeats btnra(); // show intro text lcd_chars("KEY"); lcd_update_stop(); // wait for key while (1) { if (btnl(BTN_BACK | BTN_ENTER)) break; for (i = 0, bit = 1; i < 16; i++, bit <<= 1) { if (btn(bit)) { key_beep(); lcd_chars(key_ids[i]); if (btnl(bit)) lcd_7seg(L7_L); else lcd_set(L7SEG, LB_EMPTY); lcd_update(); break; } } btnra(); stop(); } key_beep(); apply_model_config(); }
// delete all symbols and clean 7seg static void menu_key_empty_id(void) { menu_clear_symbols(); lcd_set(L7SEG, LB_EMPTY); }
// select menu-s void lcd_menu(u8 menus) { lcd_set(LMENU, (u8 *)(menus | 0xff00)); }
// write given number to 7-segment display void lcd_7seg(u8 number) { lcd_set(L7SEG, lcd_7segmap + number); }
// write char to LCD item id (LCHR1..3) void lcd_char(u8 id, u8 c) { if (c < LCHAR_MIN || c > LCHAR_MAX) c = '?'; lcd_set(id, lcd_charmap + (c - LCHAR_MIN) * LCD_CHAR_COLS); }