void gui_set_bluetooth_item(uint8_t index, char * text, uint8_t * flags, char * sub_text) { switch (index) { case (0): sprintf_P(text, PSTR("Bluetooth module")); *flags |= GUI_LIST_SUB_TEXT; switch (bt_get_module_type()) { case(BT_UNKNOWN): sprintf_P(sub_text, PSTR("Unknown")); break; case(BT_PAN1026): sprintf_P(sub_text, PSTR("pan1026 v4.0")); break; case(BT_PAN1322): sprintf_P(sub_text, PSTR("pan1322 v2.1")); break; } break; case (1): sprintf_P(text, PSTR("Enabled")); if (config.system.use_bt) *flags |= GUI_LIST_CHECK_ON; else *flags |= GUI_LIST_CHECK_OFF; break; case (2): sprintf_P(text, PSTR("Protocol")); *flags |= GUI_LIST_SUB_TEXT; switch(config.system.protocol) { case(PROTOCOL_DIGIFLY): sprintf_P(sub_text, PSTR("DigiFly")); break; case(PROTOCOL_LK8EX1): sprintf_P(sub_text, PSTR("LK8EX1")); break; case(PROTOCOL_BLUEFLY): sprintf_P(sub_text, PSTR("BlueFly")); break; } break; case (3): sprintf_P(text, PSTR("Forward GPS")); if (config.system.forward_gps) *flags |= GUI_LIST_CHECK_ON; else *flags |= GUI_LIST_CHECK_OFF; break; } }
void gui_factory_test_loop() { gui_dialog_P(PSTR("Factory test")); bool blik = GUI_BLINK_TGL(1000); bool res; bool err = false; if (f_test_lcd) { char tmp[16]; disp.LoadFont(F_TEXT_L); switch (f_test_lcd) { case(FTEST_LCD_MIN_AUTO): strcpy_P(tmp, PSTR("Min auto")); break; case(FTEST_LCD_MIN): strcpy_P(tmp, PSTR("Set minimum")); break; case(FTEST_LCD_MAX_AUTO): strcpy_P(tmp, PSTR("Max auto")); break; case(FTEST_LCD_MAX): strcpy_P(tmp, PSTR("Set maximum")); break; case(FTEST_LCD_MID): strcpy_P(tmp, PSTR("Set optimal")); break; } gui_caligh_text(tmp, GUI_DISP_WIDTH / 2, GUI_DIALOG_TOP); disp.DrawLine(4, 24, 14, 24, 1); disp.DrawLine(4, 26, 14, 26, 1); disp.DrawLine(4, 28, 14, 28, 1); disp.DrawLine(4, 30, 14, 30, 1); disp.DrawLine(4, 32, 14, 32, 1); disp.DrawLine(16, 24, 16, 32, 1); disp.DrawLine(18, 24, 18, 32, 1); disp.DrawLine(20, 24, 20, 32, 1); disp.DrawLine(22, 24, 22, 32, 1); disp.DrawLine(24, 24, 24, 32, 1); disp.DrawRectangle(26, 24, 35, 33, 1, 1); disp.DrawRectangle(37, 24, 46, 33, 1, 0); disp.DrawRectangle(48, 24, 57, 33, 1, 0); disp.DrawRectangle(50, 26, 55, 31, 1, 0); disp.DrawRectangle(52, 28, 53, 29, 1, 0); disp.DrawCircle(71, 35, 1, 1); disp.DrawCircle(71, 35, 3, 1); disp.DrawCircle(71, 35, 5, 1); disp.DrawCircle(71, 35, 7, 1); disp.DrawCircle(71, 35, 9, 1); disp.LoadFont(F_TEXT_M); disp.GotoXY(4, 36); fprintf_P(lcd_out, PSTR("%03d"), f_test_lcd_cont_min); disp.GotoXY(24, 36); fprintf_P(lcd_out, PSTR("%03d"), f_test_lcd_cont); disp.GotoXY(44, 36); fprintf_P(lcd_out, PSTR("%03d"), f_test_lcd_cont_max); if (f_test_lcd == FTEST_LCD_MIN_AUTO || f_test_lcd == FTEST_LCD_MAX_AUTO) { f_test_lcd_cont = (f_test_lcd_cont + 1) % 128; } led_set(0, f_test_lcd_cont / 4, 0); if (f_test_lcd == FTEST_LCD_MID) disp.SetContrast(lcd_contrast_min + ((lcd_contrast_max - lcd_contrast_min) * f_test_lcd_cont) / GUI_CONTRAST_STEPS); else disp.SetContrast(f_test_lcd_cont); return; } //store contrast values eeprom_busy_wait(); eeprom_update_byte(&config_ro.lcd_contrast_max, f_test_lcd_cont_max); eeprom_update_byte(&config_ro.lcd_contrast_min, f_test_lcd_cont_min); eeprom_update_byte(&config_ee.gui.contrast, f_test_lcd_cont); eeprom_busy_wait(); //reload contrast value gui_load_eeprom(); disp.LoadFont(F_TEXT_S); uint8_t f_h = disp.GetTextHeight(); if (!mems_i2c_selftest()) { if (blik) { disp.GotoXY(4, f_h * 3.5 + 3); fprintf_P(lcd_out, PSTR("I2C ERROR")); assert(0); } err = true; } else { res = ms5611.SelfTest(); if (!res) err = true; if (res || blik) { disp.GotoXY(4, f_h * 2 + 3); fprintf_P(lcd_out, PSTR("MS5611:%s"), (res) ? "OK" : "ERR"); assert(res); } res = lsm303d.SelfTest(); if (!res) err = true; if (res || blik) { disp.GotoXY(4, f_h * 3 + 3); fprintf_P(lcd_out, PSTR("LSM303:%s"), (res) ? "OK" : "ERR"); assert(res); } res = l3gd20.SelfTest(); if (!res) err = true; if (res || blik) { disp.GotoXY(4, f_h * 4 + 3); fprintf_P(lcd_out, PSTR("L3GD20:%s"), (res) ? "OK" : "ERR"); assert(res); } res = sht21.SelfTest(); if (!res) err = true; if (res || blik) { disp.GotoXY(4, f_h * 5 + 3); fprintf_P(lcd_out, PSTR("SHT21:%s"), (res) ? "OK" : "ERR"); assert(res); } } res = bt_ready(); if (!res) err = true; if (res || blik) { assert(res); disp.GotoXY(4, f_h * 6 + 3); if (!res) { fprintf_P(lcd_out, PSTR("BT:ERR")); } else { if (bt_get_module_type() == BT_PAN1322) fprintf_P(lcd_out, PSTR("BT:1322")); else fprintf_P(lcd_out, PSTR("BT:1026")); } } res = storage_ready(); if (!res) err = true; if (res || blik) { disp.GotoXY(GUI_DISP_WIDTH / 2, f_h * 2 + 3); fprintf_P(lcd_out, PSTR("SD:%s"), (res) ? "OK" : "ERR"); assert(res); } res = gps_selftest(); if (!res) err = true; if (res || blik) { disp.GotoXY(GUI_DISP_WIDTH / 2, f_h * 3 + 3); fprintf_P(lcd_out, PSTR("GPS:%s"), (res) ? "OK" : "ERR"); assert(res); } res = f_test_button_test == 0b00000111; if (!res) err = true; if (res || blik) { disp.GotoXY(GUI_DISP_WIDTH / 2, f_h * 4 + 3); fprintf_P(lcd_out, PSTR("BUT:%d %d %d"), f_test_button_test & (1 << 0), (f_test_button_test & (1 << 1)) >> 1, (f_test_button_test & (1 << 2)) >> 2); assert(res); }