Beispiel #1
0
void Tetris_game_loop(Tetris *tetris)
{
    while (1) {
        get_key_input(tetris);

        update(tetris);

        if (tetris->renderer->buffer->dirty) {
            draw_frame(tetris);
        }

        Tetris_sleep_ms(30);
    }
}
Beispiel #2
0
bool process_menu(void)
{
	start_led_sequence(led_seq_menu_begin);

	// print the main menu
	uint8_t keycode;
	char* pEnd;
	const uint8_t BUFF_SIZE = 64;
	char string_buff[BUFF_SIZE];
	for (;;)
	{
		// welcome & version
		if (!send_text(PSTR("\x01"	// translates to Ctrl-A on the dongle
							"7G wireless\n"
							"firmware build " __DATE__ "  " __TIME__ "\n"
							"battery voltage: "), true, false))
			return true;

		get_battery_voltage_str(string_buff);
		if (!send_text(string_buff, false, false))		return true;

		// RF stats
		if (!send_text(PSTR("\nRF packet stats (total/retransmit/lost): "), true, false))		return true;

		ultoa(rf_packets_total, string_buff, 10);
		pEnd = strchr(string_buff, '\0');
		*pEnd++ = '/';

		ultoa(arc_total, pEnd, 10);
		pEnd = strchr(string_buff, '\0');
		*pEnd++ = '/';

		ultoa(plos_total, pEnd, 10);
		if (!send_text(string_buff, false, false))			return true;

		// output the time since reset
		uint16_t days;
		uint8_t hours, minutes, seconds;
		get_time(&days, &hours, &minutes, &seconds);
		if (!send_text(PSTR("\nkeyboard's been on for "), true, false))		return true;

		string_buff[0] = '\0';
		if (days > 0)
		{
			itoa(days, string_buff, 10);
			strcat_P(string_buff, PSTR(" days "));
		}

		if (hours > 0  ||  days > 0)
		{
			itoa(hours, strchr(string_buff, 0), 10);
			pEnd = strlcat_P(string_buff, PSTR(" hours "), BUFF_SIZE) + string_buff;
		} else {
			pEnd = strchr(string_buff, 0);
		}

		itoa(minutes, pEnd, 10);
		pEnd = strlcat_P(string_buff, PSTR(" minutes "), BUFF_SIZE) + string_buff;

		itoa(seconds, pEnd, 10);
		strcat_P(string_buff, PSTR(" seconds\n"));

		if (!send_text(string_buff, false, true))		return true;

		// menu
		if (!send_text(PSTR("\n\nwhat do you want to do?\n"
							"F1 - change transmitter output power (current "), true, false))		return true;
		switch (get_nrf_output_power())
		{
		case vRF_PWR_M18DBM:	send_text(PSTR("-18"), true, false); 	break;
		case vRF_PWR_M12DBM:	send_text(PSTR("-12"), true, false); 	break;
		case vRF_PWR_M6DBM:		send_text(PSTR("-6"), true, false); 	break;
		case vRF_PWR_0DBM:		send_text(PSTR("0"), true, false); 		break;
		}

		if (!send_text(PSTR("dBm)\nF2 - change LED brightness (current "), true, false))		return true;

		uint8_t fcnt;
		for (fcnt = 0; fcnt < sizeof led_brightness_lookup; ++fcnt)
		{
			if (led_brightness_lookup[fcnt] == get_led_brightness())
			{
				string_buff[0] = 'F';
				itoa(fcnt + 1, string_buff + 1, 10);
				break;
			}
		}

		// no match found in the loop?
		if (fcnt == sizeof led_brightness_lookup)
			itoa(get_led_brightness(), string_buff, 10);

		if (!send_text(string_buff, false, false))
			return true;

		if (!send_text(PSTR(")\nF3 - lock keyboard (unlock with Func+Del+LCtrl)\n"
							"F4 - reset RF packet stats\n"
							"F5 - refresh this menu\n"
							"F6 - calibrate internal RC oscillator (OSCCAL="), true, false))
			return true;

		// output OSCCAL
		itoa(OSCCAL, string_buff, 10);
		if (!send_text(string_buff, false, false))
			return true;

		if (!send_text(PSTR(")\nEsc - exit menu\n\n"), true, false))
			return true;

		// get the user response
		do {
			keycode = get_key_input();
		} while (!(keycode >= KC_F1  &&  keycode <= KC_F6)  &&  keycode != KC_ESC);

		if (keycode == KC_F1)
		{
			if (!send_text(PSTR("select power:\nF1 0dBm\nF2 -6dBm\nF3 -12dBm\nF4 -18dBm\n"), true, false))
				return true;

			while (1)
			{
				keycode = get_key_input();
				if (keycode >= KC_F1  &&  keycode <= KC_F4)
				{
					if (keycode == KC_F1)	set_nrf_output_power(vRF_PWR_0DBM);
					if (keycode == KC_F2)	set_nrf_output_power(vRF_PWR_M6DBM);
					if (keycode == KC_F3)	set_nrf_output_power(vRF_PWR_M12DBM);
					if (keycode == KC_F4)	set_nrf_output_power(vRF_PWR_M18DBM);
					break;
				}
			}
		} else if (keycode == KC_F2) {
			if (!send_text(PSTR("press F1 (dimmest) to F12 (brightest) for brightness, Esc to finish\n"), true, false))
				return true;

			do {
				keycode = get_key_input();
				if (keycode >= KC_F1  &&  keycode <= KC_F12)
				{
					set_led_brightness(led_brightness_lookup[keycode - KC_F1]);
					set_leds(7, 50);
				}
			} while (keycode != KC_ESC);

		} else if (keycode == KC_F3) {
			send_text(PSTR("Keyboard is now LOCKED!!!\nPress Func+Del+LCtrl to unlock\n\n"), true, false);
			return true;

		} else if (keycode == KC_F4) {

			// reset the counters to 0
			plos_total = arc_total = rf_packets_total = 0;

		} else if (keycode == KC_F6) {

			// recalibrate the internnal RC oscillator
			calibrate_rc();

		} else if (keycode == KC_ESC) {

			start_led_sequence(led_seq_menu_end);
			send_text(PSTR("\nexiting menu, you can type now\n"), true, true);
			break;
		}
	}

	return false;
}