Пример #1
0
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;

	}
}
Пример #2
0
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);
	}