Exemplo n.º 1
0
static void set_speaker_volume (int up)
{
	int new_volume = SETTING_CHAR(C_SPKR_VOLUME) + ( up ? 1 : -1 );
	
	if ((new_volume <= 6) && (new_volume >= -57))
	{
		SETTING_CHAR(C_SPKR_VOLUME) = new_volume;
		
		char buf[4];
		
		if (new_volume < 0)
		{
			new_volume = -new_volume;
			buf[0] = '-';
		}
		else
		{
			buf[0] = '+';
		}
		
		lcd_show_menu_layer(help_layer);
		help_layer_timer = 0; // display permanent
		
		vd_clear_rect(help_layer, 0, 12, 146, 43);

		vdisp_i2s(buf + 1, 2, 10, 1, new_volume);
		vd_prints_xy(help_layer, 30, 30, VDISP_FONT_6x8, 0, "Volume");
		vd_prints_xy(help_layer, 70, 30, VDISP_FONT_6x8, 0, buf);
		
		lcd_show_help_layer(help_layer);
		help_layer_timer = 3; // approx 2 seconds
	}
}
Exemplo n.º 2
0
static void set_help_text (void)
{
	const app_context_t * a = current_app;
	
	vd_clear_rect(help_layer, 0, 0, 40, 6); // name
	vd_prints_xy(help_layer, 0, 0, VDISP_FONT_4x6, 0, a->name);
	
	vd_clear_rect(help_layer, 0, 58, 25, 6); // button 1
	vd_prints_xy(help_layer, 0, 58, VDISP_FONT_4x6, 0, a->button_text[0]);
	
	vd_clear_rect(help_layer, 34, 58, 24, 6); // button 2
	vd_prints_xy(help_layer, 34, 58, VDISP_FONT_4x6, 0, a->button_text[1]);
	
	vd_clear_rect(help_layer, 66, 58, 24, 6); // button 3
	vd_prints_xy(help_layer, 66, 58, VDISP_FONT_4x6, 0, a->button_text[2]);
	
	vd_clear_rect(help_layer, 98, 58, 24, 6); // button 4
	vd_prints_xy(help_layer, 98, 58, VDISP_FONT_4x6, 0, a->button_text[3]);
	
	/*
	vd_clear_rect(help_layer, 91, 14, 32, 6); // button UP
	vd_prints_xy(help_layer, 91, 14, VDISP_FONT_4x6, 0, a->button_text[3]);
	
	vd_clear_rect(help_layer, 91, 38, 32, 6); // button DOWN
	vd_prints_xy(help_layer, 91, 38, VDISP_FONT_4x6, 0, a->button_text[4]);
	*/
}
Exemplo n.º 3
0
void ccs_input_packet ( const uint8_t * data, int data_len, const uint8_t * ipv4_src_addr)
{
	if (memcmp(ipv4_src_addr, ccs_server_ipaddr, sizeof ipv4_addr) != 0)
	{
		// packet is not from the currently selected server
		return;
	}
	
	
	if (data_len == 14) // connect response packet
	{
		if (ccs_state == CCS_CONNECT_REQ_SENT)
		{
			if ((data[8] == repeater_callsign[7]) &&
			  (memcmp(data + 10, "ACK", 3) == 0))
			{
				ccs_rx_callsign[0] = 0;
				ccs_state = CCS_CONNECTED;
				ccs_timeout_timer = CCS_KEEPALIVE_TIMEOUT;
				vd_prints_xy(VDISP_DEBUG_LAYER, 104, 16, VDISP_FONT_6x8, 0, "ACK ");
			}
			else
			{
				ccs_state = CCS_DISCONNECTED;
				udp_socket_ports[UDP_SOCKET_CCS] = 0; // stop receiving frames
				vd_prints_xy(VDISP_DEBUG_LAYER, 104, 16, VDISP_FONT_6x8, 0, "NACK");
			} 
		}
		else if (ccs_state == CCS_DISCONNECT_REQ_SENT)
		{
			if (data[9] == ' ')
			{
				ccs_state = CCS_DISCONNECTED;
				udp_socket_ports[UDP_SOCKET_CCS] = 0; // stop receiving frames
				vd_prints_xy(VDISP_DEBUG_LAYER, 104, 16, VDISP_FONT_6x8, 0, "DISC");
			}
		}
	}
	else if (data_len == CCS_KEEPALIVE_RESP_FRAME_SIZE)  // keep alive packet 
	{
		if (ccs_state == CCS_CONNECTED)
		{
			ccs_timeout_timer = CCS_KEEPALIVE_TIMEOUT;
			ccs_keepalive_response();
		}
	}
}
Exemplo n.º 4
0
static void ref_print_status (void)
{
	
	vd_prints_xy(VDISP_REF_LAYER, 36, 12, VDISP_FONT_6x8, (ref_selected_item == 0),
		ref_modes[(int) ref_items[0]]);
	
	#define XPOS_NODEINFO_LAYER 10
	vd_prints_xy(VDISP_REF_LAYER, XPOS_NODEINFO_LAYER, 24, VDISP_FONT_6x8, (ref_selected_item == 1),
		ref_types[(int) ref_items[1]]);
	
	vd_printc_xy(VDISP_REF_LAYER, XPOS_NODEINFO_LAYER + 3*6, 24, VDISP_FONT_6x8, (ref_selected_item == 2),
		ref_items[2] + 0x30);
	vd_printc_xy(VDISP_REF_LAYER, XPOS_NODEINFO_LAYER + 4*6, 24, VDISP_FONT_6x8, (ref_selected_item == 3),
		ref_items[3] + 0x30);
	vd_printc_xy(VDISP_REF_LAYER, XPOS_NODEINFO_LAYER + 5*6, 24, VDISP_FONT_6x8, (ref_selected_item == 4),
		ref_items[4] + 0x30);
	
	vd_printc_xy(VDISP_REF_LAYER, XPOS_NODEINFO_LAYER + 6*6, 24, VDISP_FONT_6x8, (ref_selected_item == 5),
		0x20);
	vd_printc_xy(VDISP_REF_LAYER, XPOS_NODEINFO_LAYER + 7*6, 24, VDISP_FONT_6x8, (ref_selected_item == 5),
		ref_items[5] + 0x41);
	vd_printc_xy(VDISP_REF_LAYER, XPOS_NODEINFO_LAYER + 8*6, 24, VDISP_FONT_6x8, (ref_selected_item == 5),
		0x20);
		
	vd_clear_rect(VDISP_REF_LAYER, 0, 36, 120, 12);

	if (repeater_mode || hotspot_mode)
	{
		vd_prints_xy(VDISP_REF_LAYER, 0, 36, VDISP_FONT_6x8, 0, "Hometimer");
	
		vd_prints_xy(VDISP_REF_LAYER, 60, 36, VDISP_FONT_6x8, (ref_selected_item == 6),
			ref_timer[(int) ref_items[6]]);
	}
	
	#undef XPOS
}
Exemplo n.º 5
0
static void vServiceTask( void *pvParameters )
{
	
	int last_backlight = -1;
	int last_contrast = -1;
	char last_repeater_mode = 0;
	char last_parrot_mode = 0;
	char dcs_boot_timer = 8;
	// bool update = true;
	bool last_rmu_enabled = false;

	for (;;)
	{	
		
		vTaskDelay(500); 
		
		// gpio_toggle_pin(AVR32_PIN_PB28);
		//gpio_toggle_pin(AVR32_PIN_PB18);
			
		// x_counter ++;
			
		
		// rtclock_disp_xy(84, 0, x_counter & 0x02, 1);
		rtclock_disp_xy(84, 0, 2, 1);
			
			
			
		vdisp_i2s( tmp_buf, 5, 10, 0, voltage);
		tmp_buf[3] = tmp_buf[2];
		tmp_buf[2] = '.';
		tmp_buf[4] = 'V';
		tmp_buf[5] = 0;
			
			
		vdisp_prints_xy( 55, 0, VDISP_FONT_4x6, 0, tmp_buf );
			
		// vdisp_i2s( tmp_buf, 5, 10, 0, serial_rx_error );
		// vd_prints_xy(VDISP_DEBUG_LAYER, 108, 28, VDISP_FONT_4x6, 0, tmp_buf );
		vdisp_i2s( tmp_buf, 5, 10, 0, serial_rx_ok );
		vd_prints_xy(VDISP_DEBUG_LAYER, 108, 34, VDISP_FONT_4x6, 0, tmp_buf );	
		// vdisp_i2s( tmp_buf, 5, 10, 0, serial_timeout_error );
		vdisp_i2s( tmp_buf, 5, 10, 0, dstar_pos_not_correct );
		vd_prints_xy(VDISP_DEBUG_LAYER, 108, 40, VDISP_FONT_4x6, 0, tmp_buf );
		vdisp_i2s( tmp_buf, 5, 10, 0, serial_putc_q_full );
		vd_prints_xy(VDISP_DEBUG_LAYER, 108, 46, VDISP_FONT_4x6, 0, tmp_buf );
		vdisp_i2s( tmp_buf, 5, 10, 0, initialHeapSize );
		vd_prints_xy(VDISP_DEBUG_LAYER, 108, 52, VDISP_FONT_4x6, 0, tmp_buf );
		vdisp_i2s( tmp_buf, 5, 10, 0, xPortGetFreeHeapSize() );
		vd_prints_xy(VDISP_DEBUG_LAYER, 108, 58, VDISP_FONT_4x6, 0, tmp_buf );
		
		
		int v = 0;
			
		switch (eth_autoneg_state)
		{
			case 0:
			if (SETTING_BOOL(B_ONLY_TEN_MBIT))
			{
				AVR32_MACB.man = 0x50920061; // write register 0x04, advertise only 10MBit/s for autoneg
			}
			eth_autoneg_state = 1;
			break;
			
			case 1:
			AVR32_MACB.man = 0x50821200; // write register 0x00, power on, autoneg, restart autoneg
			eth_autoneg_state = 2;
			break;
			
			case 2:
			AVR32_MACB.man = 0x60C20000; // read register 0x10
			eth_autoneg_state = 3;
			break;
			
			case 3:
			v = AVR32_MACB.MAN.data; // read data from previously read register 0x10
			AVR32_MACB.man = 0x60C20000; // read register 0x10
			break;
		}
		
		dvset();
		nodeinfo_print();
				
		if (last_rmu_enabled != rmu_enabled)
		{
			rmuset_print();
			last_rmu_enabled = rmu_enabled;
		}

			
		const char * net_status = "     ";
			
		dhcp_set_link_state( v & 1 );
			
		if (v & 1)  // Ethernet link is active
		{
			v = ((v >> 1) & 0x03) ^ 0x01;
				
			switch (v)
			{
				case 0:
					net_status = " 10HD";
					break;
				case 1:
					net_status = "100HD";
					break;
				case 2:
					net_status = " 10FD";
					break;
				case 3:
					net_status = "100FD";
					break;
			}
				
			AVR32_MACB.ncfgr = 0x00000800 | v;  // SPD, FD, CLK = MCK / 32 -> 1.875 MHz
				
			vdisp_prints_xy( 28, 0, VDISP_FONT_4x6, 
				(dhcp_is_ready() != 0) ? 0 : 1, net_status );
		}
		else
		{
Exemplo n.º 6
0
void rmuset_print(void)
{
	char str[RMUSET_LINE_LENGTH];
	
	vd_clear_rect(VDISP_RMUSET_LAYER, 0, 12, 146, 43);
	
	vd_printc_xy(VDISP_RMUSET_LAYER, 120, 13, VDISP_FONT_8x12, 0, 0x1e); // arrow up
	vd_printc_xy(VDISP_RMUSET_LAYER, 120, 39, VDISP_FONT_8x12, 0, 0x1f); // arrow up
	
	vd_prints_xy(VDISP_RMUSET_LAYER, 0, 12, VDISP_FONT_5x8, 0, "TX-QRG:");
	vd_prints_xy(VDISP_RMUSET_LAYER, 0, 23, VDISP_FONT_5x8, 0, "RX-QRG:");


	vd_prints_xy(VDISP_RMUSET_LAYER, 93, 12, VDISP_FONT_5x8, 0, "MHz");
	vd_prints_xy(VDISP_RMUSET_LAYER, 93, 23, VDISP_FONT_5x8, 0, "MHz");
	
	if (!rmuset_enabled())
	{
		vd_prints_xy(VDISP_RMUSET_LAYER, 40, 12, VDISP_FONT_5x8, 0, "---.---.--");
		vd_prints_xy(VDISP_RMUSET_LAYER, 40, 23, VDISP_FONT_5x8, 0, "---.---.--");
		
		feld_selected_item = 6;
		enabled_invers = 1;
	}
	else
	{
		memset(str, '\0', RMUSET_LINE_LENGTH);
		memcpy(str, settings.s.qrg_tx, 3);
		vd_prints_xy(VDISP_RMUSET_LAYER, 39, 12, VDISP_FONT_5x8, tx_qrg_MHz_invers, str);
		vd_prints_xy(VDISP_RMUSET_LAYER, 54, 12, VDISP_FONT_5x8, 0, ".");
	
		memset(str, '\0', RMUSET_LINE_LENGTH);
		memcpy(str, settings.s.qrg_tx + 3, 1);
		vd_prints_xy(VDISP_RMUSET_LAYER, 59, 12, VDISP_FONT_5x8, tx_qrg_100kHz_invers, str);
	
		memset(str, '\0', RMUSET_LINE_LENGTH);
		memcpy(str, settings.s.qrg_tx + 4, 2);
		vd_prints_xy(VDISP_RMUSET_LAYER, 65, 12, VDISP_FONT_5x8, tx_qrg_6_25kHz_invers, str);

		memset(str, '\0', RMUSET_LINE_LENGTH);
		memcpy(str, ".", 1);
		memcpy(str + 1, settings.s.qrg_tx + 6, 2);
		vd_prints_xy(VDISP_RMUSET_LAYER, 75, 12, VDISP_FONT_5x8, tx_qrg_6_25kHz_invers, str);

		memset(str, '\0', RMUSET_LINE_LENGTH);
		memcpy(str, settings.s.qrg_rx, 3);
		vd_prints_xy(VDISP_RMUSET_LAYER, 39, 23, VDISP_FONT_5x8, rx_qrg_MHz_invers, str);
		vd_prints_xy(VDISP_RMUSET_LAYER, 54, 23, VDISP_FONT_5x8, 0, ".");
	
		memset(str, '\0', RMUSET_LINE_LENGTH);
		memcpy(str, settings.s.qrg_rx + 3, 1);
		vd_prints_xy(VDISP_RMUSET_LAYER, 59, 23, VDISP_FONT_5x8, rx_qrg_100kHz_invers, str);
	
		memset(str, '\0', RMUSET_LINE_LENGTH);
		memcpy(str, settings.s.qrg_rx + 4, 2);
		vd_prints_xy(VDISP_RMUSET_LAYER, 65, 23, VDISP_FONT_5x8, rx_qrg_6_25kHz_invers, str);

		memset(str, '\0', RMUSET_LINE_LENGTH);
		memcpy(str, ".", 1);
		memcpy(str + 1, settings.s.qrg_rx + 6, 2);
		vd_prints_xy(VDISP_RMUSET_LAYER, 75, 23, VDISP_FONT_5x8, rx_qrg_6_25kHz_invers, str);
	}
		
	vd_prints_xy(VDISP_RMUSET_LAYER, 40, 35, VDISP_FONT_5x8, enabled_invers, ref_enabled[rmuset_enabled()]);
}
Exemplo n.º 7
0
int dns2_req_A (const char * name)
{
	
	int i;
	int handle = -1;
	int link_zero_slot = -1;
	int ttl_min = 65535;
	
	for (i=0; i < DNS_NUMBER_OF_ENTRIES; i++)
	{
		struct dns2_cache * cur = dc + i;
		
		if (cur->reqname_len == 0)
		{
			handle = i; // free slot
			break;
		}
		
		if (cur->link == 0) // slot currently not in use
		{
			if (cur->ttl < ttl_min)
			{
				ttl_min = cur->ttl;
				link_zero_slot = i; // unused slot with the lowest TTL
			}
		}
	}
	
	if (handle < 0)
	{
		if (link_zero_slot < 0) // could not find slot that is not in use
			return -1; // no free slots
	
		handle = link_zero_slot; // use entry with smallest ttl left	
	}
	
	if (dns2_parse_domain(handle, name) != 0)
	{
		return -1;  // something wrong with the requested name
	}
	
	struct dns2_cache * cur = dc + handle;
	
	for (i=0; i < DNS_NUMBER_OF_ENTRIES; i++)
	{		
		if (i == handle) // skip the newly created entry
			continue;
		
		struct dns2_cache * cached = dc + i;
		
		if (cur->reqname_len == cached->reqname_len)
		{
			if ((memcmp(cur->reqname, cached->reqname, cached->reqname_len) == 0)
				&& (cached->ttl > 0))
			{  // same name requested and some TTL left
				cached->link ++;
				cur->reqname_len = 0; // free the newly created handle
				return i; // return the cached handle 
			}
		}
	}
	
	if (strcmp(name, "tst002.reflector.up4dar.de") == 0)
	{
		memcpy (cur->result_data, tst002addr, sizeof tst002addr);
		cur->result_data_len = sizeof tst002addr;
		cur->state = DNS_STATE_RESULT_OK;
		cur->ttl = 5;
		cur->link = 1;
		return handle;
	}
		
	if (memcmp(ipv4_dns_pri, ipv4_zero_addr, sizeof ipv4_addr) == 0)
	{  // no primary DNS server
		return -1;
	}
		
	cur->retry = DNS_REQ_RETRY;
	cur->timeout = 0;
	cur->primary_server = 1; // begin with primary server
	cur->link = 1; // one client links to this
	cur->state = DNS_STATE_REQ_A;
	cur->udp_local_port = 0; // select new port
	
	vd_prints_xy(VDISP_DEBUG_LAYER, 0, 48, VDISP_FONT_4x6, 0, "AREQ");
	vd_prints_xy(VDISP_DEBUG_LAYER, 20, 48, VDISP_FONT_4x6, 0, name);
	vd_clear_rect(VDISP_DEBUG_LAYER, 0, 54, 80, 6);
	return handle; // OK
}
Exemplo n.º 8
0
static void recv_gpgsv(int num_sats)
{
	int total = get_nmea_num(1);
	int msgnum = get_nmea_num(2);
	
	if (msgnum == 1) // first msg
	{
		gps_init_satlist();  // clear list
	}
	
	
	
	int j;
	int i;
	
	for (i=0; i < num_sats; i++)
	{
		int s_ptr = i + ((msgnum - 1) << 2);
		
		if (s_ptr < MAX_SATELLITES)
		{
			if ( (*(nmea_params[ 4 + i * 4 ])) == 0) // empty parameter
			{
				sats[s_ptr].sat_id = NO_SAT;
			}
			else
			{
				sats[s_ptr].sat_id = get_nmea_num( 4 + i * 4 );
				sats[s_ptr].elevation = get_nmea_num( 5 + i * 4 );
				sats[s_ptr].azimuth = get_nmea_num( 6 + i * 4 );
				sats[s_ptr].snr = get_nmea_num( 7 + i * 4 );
			}
			
		}
	}

	if (msgnum == total) // last record, print it
	{
		vd_clear_rect (VDISP_GPS_LAYER, 0, 0, 128, 64);
		
		
		if (gps_fix >= 2)
		{
			buf[0] = 0x30 + gps_fix;
			buf[1] = 0;
			
			vd_prints_xy(VDISP_GPS_LAYER, 62, 46, VDISP_FONT_4x6, 0, buf);
			vd_prints_xy(VDISP_GPS_LAYER, 66, 46, VDISP_FONT_4x6, 0, "D FIX");
		}
		else
		{
			vd_prints_xy(VDISP_GPS_LAYER, 62, 46, VDISP_FONT_4x6, 0, "NO FIX");
		}
		
		/*
		if (gpgga_fix_info > 0)
		{
			buf[0] = 0x30 + gpgga_fix_info;
			buf[1] = 0;
			
			vd_prints_xy(VDISP_GPS_LAYER, 0, 56, VDISP_FONT_6x8, 0, buf);
		}
		else
		{
			vd_prints_xy(VDISP_GPS_LAYER, 0, 56, VDISP_FONT_6x8, 0, "-");
		}
		
		if (gprmc_fix_mode > 0)
		{
			buf[0] = gprmc_fix_mode;
			buf[1] = 0;
			
			vd_prints_xy(VDISP_GPS_LAYER, 6, 0, VDISP_FONT_6x8, 0, buf);
		}
		else
		{
			vd_prints_xy(VDISP_GPS_LAYER, 6, 0, VDISP_FONT_6x8, 0, "-");
		}
		
		if (gprmc_status > 0)
		{
			buf[0] = gprmc_status;
			buf[1] = 0;
			
			vd_prints_xy(VDISP_GPS_LAYER, 12, 0, VDISP_FONT_6x8, 0, buf);
		}
		else
		{
			vd_prints_xy(VDISP_GPS_LAYER, 12, 0, VDISP_FONT_6x8, 0, "-");
		}
		*/
		
		/*
		for (i=0; i < 360; i+= 45)
		{
			vd_set_pixel(VDISP_GPS_LAYER, 32 + (fixpoint_sin(i) / 700),
				32 + (fixpoint_cos(i) / 700), 0, 1, 1);
		}
		*/
		
		for (i=0; i < 360; i+= 10)
		{
			vd_set_pixel(VDISP_GPS_LAYER, 32 + (fixpoint_sin(i) / 357),
				32 + (fixpoint_cos(i) / 357), 0, 1, 1);
		}			
				
		vd_prints_xy(VDISP_GPS_LAYER, 0, 28, VDISP_FONT_6x8, 0, "W");
		vd_prints_xy(VDISP_GPS_LAYER, 58, 28, VDISP_FONT_6x8, 0, "E");
		vd_prints_xy(VDISP_GPS_LAYER, 29, 0, VDISP_FONT_6x8, 0, "N");
		vd_prints_xy(VDISP_GPS_LAYER, 29, 56, VDISP_FONT_6x8, 0, "S");
		
		
		for (i=0; i < MAX_SATELLITES; i++)
		{
			if (sats[i].sat_id != NO_SAT)
			{
				int x = 120 - (i % 6) * 10;
				int y = (i / 6) * 21;
				
				
				
				int used_in_fix = 0;
				
				for (j=0; j < GPGSA_NUM_DATA; j++)
				{
					if (sats[i].sat_id == gpgsa_data[j])
					{
						used_in_fix = 1;
					}
				}
				
				if (sats[i].elevation > 0)
				{
					int xx = 28 + fixpoint_cos(sats[i].elevation) * fixpoint_sin(sats[i].azimuth) / 3570000;
					int yy = 29 - fixpoint_cos(sats[i].elevation) * fixpoint_cos(sats[i].azimuth) / 3570000;
					
					vdisp_i2s(buf, 2, 10, 1, sats[i].sat_id);
					vd_prints_xy(VDISP_GPS_LAYER, xx, yy+1, VDISP_FONT_4x6, used_in_fix, buf);
					
					for (j=0; j < 8; j++)
					{
						vd_set_pixel(VDISP_GPS_LAYER, xx + j, yy, 0, used_in_fix, 1);
					}
					
					for (j=0; j < 7; j++)
					{
						vd_set_pixel(VDISP_GPS_LAYER, xx + 8, yy + j, 0, used_in_fix, 1);
					}
				}
				
				vdisp_i2s(buf, 2, 10, 1, sats[i].sat_id);
				vd_prints_xy(VDISP_GPS_LAYER, x, y + 14, VDISP_FONT_4x6, 0, buf);
				
				int v = fixpoint_sin(sats[i].snr) / 833;
				
				vd_set_pixel(VDISP_GPS_LAYER, x+1, y + 12, 0, 0x7F, 7);
				
				for (j=1; j < v; j++)
				{
					vd_set_pixel(VDISP_GPS_LAYER, x+1, y + 12 - j, 0,
						used_in_fix ? 0x7F : 0x41 , 7);
				}
				
				vd_set_pixel(VDISP_GPS_LAYER, x+1, y + 12 - v, 0, 0x7F, 7);
				
				/*
				vdisp_i2s(buf, 3, 10, 1, sats[i].sat_id);
				vd_prints_xy(VDISP_GPS_LAYER, x +  0, y, VDISP_FONT_4x6, used_in_fix, buf);
			
				vdisp_i2s(buf, 2, 10, 1, sats[i].elevation);
				vd_prints_xy(VDISP_GPS_LAYER, x + 16, y, VDISP_FONT_4x6, 0, buf);	
				
				vdisp_i2s(buf, 3, 10, 1, sats[i].azimuth);
				vd_prints_xy(VDISP_GPS_LAYER, x + 28, y, VDISP_FONT_4x6, 0, buf);
				
				vdisp_i2s(buf, 2, 10, 1, sats[i].snr);
				vd_prints_xy(VDISP_GPS_LAYER, x + 44, y, VDISP_FONT_4x6, 0, buf);	
				
				*/
			}
		}
		
		
	}
	
	
	for (i=0; i < 2; i++)
	{
		vd_prints_xy(VDISP_GPS_LAYER, 56, 52 + (i*6), VDISP_FONT_4x6, 0, fix_data[i]);
	}	
	
	
	/*
	vdisp_i2s(buf, 2, 10, 1, get_nmea_num(1));
	vd_prints_xy(VDISP_GPS_LAYER, 0, 58, VDISP_FONT_4x6, 0, buf);
	vdisp_i2s(buf, 2, 10, 1, get_nmea_num(2));
	vd_prints_xy(VDISP_GPS_LAYER, 12, 58, VDISP_FONT_4x6, 0, buf);
	vdisp_i2s(buf, 2, 10, 1, get_nmea_num(3));
	vd_prints_xy(VDISP_GPS_LAYER, 24, 58, VDISP_FONT_4x6, 0, buf);
	*/
}
Exemplo n.º 9
0
void ccs_service (void)
{
	if (ccs_timeout_timer > 0)
	{
		ccs_timeout_timer --;
	}
	
	
	switch (ccs_state)
	{
		case CCS_CONNECTED:
		if (ccs_timeout_timer == 0)
		{
			ccs_timeout_timer = 2; // 1 second
			ccs_state = CCS_WAIT;
			udp_socket_ports[UDP_SOCKET_CCS] = 0; // stop receiving frames
			vd_prints_xy(VDISP_DEBUG_LAYER, 104, 16, VDISP_FONT_6x8, 0, "NOWD");
		}
		else
		{
			if (ccs_rx_callsign[0] != 0)
			{
				ccs_send_info_frame();
				ccs_rx_callsign[0] = 0;
			}
		}
		break;
		
		
		
		case CCS_CONNECT_REQ_SENT:
		if (ccs_timeout_timer == 0)
		{
			if (ccs_retry_counter > 0)
			{
				ccs_retry_counter --;
			}
			
			if (ccs_retry_counter == 0)
			{
				ccs_timeout_timer = CCS_FAILURE_TIMEOUT;
				ccs_state = CCS_WAIT;
				// ccs_next_server();
				udp_socket_ports[UDP_SOCKET_CCS] = 0; // stop receiving frames
				vd_prints_xy(VDISP_DEBUG_LAYER, 104, 16, VDISP_FONT_6x8, 0, "RQTO");
			}
			else
			{
				ccs_send_connect();
				ccs_timeout_timer = CCS_CONNECT_REQ_TIMEOUT;
			}
		}
		break;
		
		case CCS_DISCONNECT_REQ:
			ccs_send_disconnect();
			ccs_timeout_timer = CCS_DISCONNECT_REQ_TIMEOUT;
			ccs_state = CCS_DISCONNECT_REQ_SENT;
			ccs_retry_counter = CCS_DISCONNECT_RETRIES;
		
		break;
		
		
		case CCS_DISCONNECT_REQ_SENT:
		if (ccs_timeout_timer == 0)
		{
			if (ccs_retry_counter > 0)
			{
				ccs_retry_counter --;
			}
			
			if (ccs_retry_counter == 0)
			{
				ccs_state = CCS_DISCONNECTED;
				udp_socket_ports[UDP_SOCKET_CCS] = 0; // stop receiving frames
			}
			else
			{
				ccs_send_disconnect();
				ccs_timeout_timer = CCS_DISCONNECT_REQ_TIMEOUT;
			}
		}
		break;
		
		case CCS_DNS_REQ:
		
		dns_handle = dns2_req_A(ccs_current_servername());
		
		if (dns_handle >= 0) // resolver not busy
		{
			ccs_state = CCS_DNS_REQ_SENT;
		}
		else if (ccs_timeout_timer == 0)
		{
			if (ccs_retry_counter > 0)
			{
				ccs_retry_counter --;
			}
			
			if (ccs_retry_counter == 0)
			{
				ccs_timeout_timer = CCS_FAILURE_TIMEOUT;
				ccs_state = CCS_WAIT;
				// ccs_next_server();
			}
			else
			{
				ccs_timeout_timer = CCS_DNS_TIMEOUT;
			}
		}
		break;
		
		case CCS_DNS_REQ_SENT:
		if (dns2_result_available(dns_handle)) // resolver is ready
		{
			uint8_t * addrptr;
			if (dns2_get_A_addr(dns_handle, &addrptr) <= 0) // DNS didn't work
			{
				ccs_timeout_timer = CCS_FAILURE_TIMEOUT;
				ccs_state = CCS_WAIT;
				// ccs_next_server();
			}
			else
			{
				memcpy (ccs_server_ipaddr, addrptr, 4); // use first address of DNS result
				
				udp_socket_ports[UDP_SOCKET_CCS] = udp_get_new_srcport();
				
				ccs_send_connect();
				
				ccs_state = CCS_CONNECT_REQ_SENT;
				ccs_retry_counter = CCS_CONNECT_RETRIES;
				ccs_timeout_timer =  CCS_CONNECT_REQ_TIMEOUT;
			}
			
			dns2_free(dns_handle);
		}
		break;
		
		case CCS_WAIT:
		if (ccs_timeout_timer == 0)
		{
			ccs_retry_counter = CCS_DNS_INITIAL_RETRIES;
			ccs_timeout_timer = CCS_DNS_TIMEOUT;
			ccs_state = CCS_DNS_REQ;
		}
		break;
	}
}
Exemplo n.º 10
0
void nodeinfo_print(void)
{
	char str[NODEINFO_LINE_LENGTH];
	
	vd_clear_rect(VDISP_NODEINFO_LAYER, 0, 12, 146, 43);
	
	vd_printc_xy(VDISP_NODEINFO_LAYER, 120, 13, VDISP_FONT_8x12, 0, 0x1e); // arrow up
	vd_printc_xy(VDISP_NODEINFO_LAYER, 120, 39, VDISP_FONT_8x12, 0, 0x1f); // arrow up
	
	vd_prints_xy(VDISP_NODEINFO_LAYER, 0, 12, VDISP_FONT_5x8, 0, "LAT:");
	vd_prints_xy(VDISP_NODEINFO_LAYER, 0, 22, VDISP_FONT_5x8, 0, "LON:");
	vd_prints_xy(VDISP_NODEINFO_LAYER, 0, 32, VDISP_FONT_5x8, 0, "QRG:");
	vd_prints_xy(VDISP_NODEINFO_LAYER, 0, 42, VDISP_FONT_5x8, 0, "DUP:");
	
	memset(str, '\0', NODEINFO_LINE_LENGTH);
	memcpy(str, settings.s.node_pos_lat, 1);
	vd_prints_xy(VDISP_NODEINFO_LAYER, XPOS_NODEINFO_LAYER, 12, VDISP_FONT_5x8, (nodeinfo_pos == 0), str);
	
	memset(str, '\0', NODEINFO_LINE_LENGTH);
	memcpy(str, settings.s.node_pos_lat + 1, 1);
	vd_prints_xy(VDISP_NODEINFO_LAYER, XPOS_NODEINFO_LAYER + 1 * 5, 12, VDISP_FONT_5x8, (nodeinfo_pos == 1), str);
	vd_prints_xy(VDISP_NODEINFO_LAYER, XPOS_NODEINFO_LAYER + 2 * 5, 12, VDISP_FONT_5x8, 0, ".");
	
	memset(str, '\0', NODEINFO_LINE_LENGTH);
	memcpy(str, settings.s.node_pos_lat + 2, 1);
	vd_prints_xy(VDISP_NODEINFO_LAYER, XPOS_NODEINFO_LAYER + 3 * 5, 12, VDISP_FONT_5x8, (nodeinfo_pos == 2), str);
	
	memset(str, '\0', NODEINFO_LINE_LENGTH);
	memcpy(str, settings.s.node_pos_lat + 3, 1);
	vd_prints_xy(VDISP_NODEINFO_LAYER, XPOS_NODEINFO_LAYER + 4 * 5, 12, VDISP_FONT_5x8, (nodeinfo_pos == 3), str);
	
	memset(str, '\0', NODEINFO_LINE_LENGTH);
	memcpy(str, settings.s.node_pos_lat + 4, 1);
	vd_prints_xy(VDISP_NODEINFO_LAYER, XPOS_NODEINFO_LAYER + 5 * 5, 12, VDISP_FONT_5x8, (nodeinfo_pos == 4), str);
	
	memset(str, '\0', NODEINFO_LINE_LENGTH);
	memcpy(str, settings.s.node_pos_lat + 5, 1);
	vd_prints_xy(VDISP_NODEINFO_LAYER, XPOS_NODEINFO_LAYER + 6 * 5, 12, VDISP_FONT_5x8, (nodeinfo_pos == 5), str);

	memset(str, '\0', NODEINFO_LINE_LENGTH);
	memcpy(str, settings.s.node_pos_lon, 1);
	vd_prints_xy(VDISP_NODEINFO_LAYER, XPOS_NODEINFO_LAYER, 22, VDISP_FONT_5x8, (nodeinfo_pos == 6), str);
	
	memset(str, '\0', NODEINFO_LINE_LENGTH);
	memcpy(str, settings.s.node_pos_lon + 1, 1);
	vd_prints_xy(VDISP_NODEINFO_LAYER, XPOS_NODEINFO_LAYER + 1 * 5, 22, VDISP_FONT_5x8, (nodeinfo_pos == 7), str);
	vd_prints_xy(VDISP_NODEINFO_LAYER, XPOS_NODEINFO_LAYER + 2 * 5, 22, VDISP_FONT_5x8, 0, ".");
	
	memset(str, '\0', NODEINFO_LINE_LENGTH);
	memcpy(str, settings.s.node_pos_lon + 2, 1);
	vd_prints_xy(VDISP_NODEINFO_LAYER, XPOS_NODEINFO_LAYER + 3 * 5, 22, VDISP_FONT_5x8, (nodeinfo_pos == 8), str);
	
	memset(str, '\0', NODEINFO_LINE_LENGTH);
	memcpy(str, settings.s.node_pos_lon + 3, 1);
	vd_prints_xy(VDISP_NODEINFO_LAYER, XPOS_NODEINFO_LAYER + 4 * 5, 22, VDISP_FONT_5x8, (nodeinfo_pos == 9), str);
	
	memset(str, '\0', NODEINFO_LINE_LENGTH);
	memcpy(str, settings.s.node_pos_lon + 4, 1);
	vd_prints_xy(VDISP_NODEINFO_LAYER, XPOS_NODEINFO_LAYER + 5 * 5, 22, VDISP_FONT_5x8, (nodeinfo_pos == 10), str);
	
	memset(str, '\0', NODEINFO_LINE_LENGTH);
	memcpy(str, settings.s.node_pos_lon + 5, 1);
	vd_prints_xy(VDISP_NODEINFO_LAYER, XPOS_NODEINFO_LAYER + 6 * 5, 22, VDISP_FONT_5x8, (nodeinfo_pos == 11), str);

	memset(str, '\0', NODEINFO_LINE_LENGTH);
	memcpy(str, settings.s.node_qrg, 1);
	vd_prints_xy(VDISP_NODEINFO_LAYER, XPOS_NODEINFO_LAYER, 32, VDISP_FONT_5x8, (nodeinfo_pos == 12), str);
	
	memset(str, '\0', NODEINFO_LINE_LENGTH);
	memcpy(str, settings.s.node_qrg + 1, 1);
	vd_prints_xy(VDISP_NODEINFO_LAYER, XPOS_NODEINFO_LAYER + 1 * 5, 32, VDISP_FONT_5x8, (nodeinfo_pos == 13), str);

	memset(str, '\0', NODEINFO_LINE_LENGTH);
	memcpy(str, settings.s.node_qrg + 2, 1);
	vd_prints_xy(VDISP_NODEINFO_LAYER, XPOS_NODEINFO_LAYER + 2 * 5, 32, VDISP_FONT_5x8, (nodeinfo_pos == 14), str);
	vd_prints_xy(VDISP_NODEINFO_LAYER, XPOS_NODEINFO_LAYER + 3 * 5, 32, VDISP_FONT_5x8, 0, ".");

	memset(str, '\0', NODEINFO_LINE_LENGTH);
	memcpy(str, settings.s.node_qrg + 3, 1);
	vd_prints_xy(VDISP_NODEINFO_LAYER, XPOS_NODEINFO_LAYER + 4 * 5, 32, VDISP_FONT_5x8, (nodeinfo_pos == 15), str);

	memset(str, '\0', NODEINFO_LINE_LENGTH);
	memcpy(str, settings.s.node_qrg + 4, 1);
	vd_prints_xy(VDISP_NODEINFO_LAYER, XPOS_NODEINFO_LAYER + 5 * 5, 32, VDISP_FONT_5x8, (nodeinfo_pos == 16), str);

	memset(str, '\0', NODEINFO_LINE_LENGTH);
	memcpy(str, settings.s.node_qrg + 5, 1);
	vd_prints_xy(VDISP_NODEINFO_LAYER, XPOS_NODEINFO_LAYER + 6 * 5, 32, VDISP_FONT_5x8, (nodeinfo_pos == 17), str);

	memset(str, '\0', NODEINFO_LINE_LENGTH);
	memcpy(str, settings.s.node_dup, 1);
	vd_prints_xy(VDISP_NODEINFO_LAYER, XPOS_NODEINFO_LAYER, 42, VDISP_FONT_5x8, (nodeinfo_pos == 18), str);
	
	memset(str, '\0', NODEINFO_LINE_LENGTH);
	memcpy(str, settings.s.node_dup + 1, 1);
	vd_prints_xy(VDISP_NODEINFO_LAYER, XPOS_NODEINFO_LAYER + 1 * 5, 42, VDISP_FONT_5x8, (nodeinfo_pos == 19), str);

	memset(str, '\0', NODEINFO_LINE_LENGTH);
	memcpy(str, settings.s.node_dup + 2, 1);
	vd_prints_xy(VDISP_NODEINFO_LAYER, XPOS_NODEINFO_LAYER + 2 * 5, 42, VDISP_FONT_5x8, (nodeinfo_pos == 20), str);
	vd_prints_xy(VDISP_NODEINFO_LAYER, XPOS_NODEINFO_LAYER + 3 * 5, 42, VDISP_FONT_5x8, 0, ".");

	memset(str, '\0', NODEINFO_LINE_LENGTH);
	memcpy(str, settings.s.node_dup + 3, 1);
	vd_prints_xy(VDISP_NODEINFO_LAYER, XPOS_NODEINFO_LAYER + 4 * 5, 42, VDISP_FONT_5x8, (nodeinfo_pos == 21), str);

	memset(str, '\0', NODEINFO_LINE_LENGTH);
	memcpy(str, settings.s.node_dup + 4, 1);
	vd_prints_xy(VDISP_NODEINFO_LAYER, XPOS_NODEINFO_LAYER + 5 * 5, 42, VDISP_FONT_5x8, (nodeinfo_pos == 22), str);

	memset(str, '\0', NODEINFO_LINE_LENGTH);
	memcpy(str, settings.s.node_dup + 5, 1);
	vd_prints_xy(VDISP_NODEINFO_LAYER, XPOS_NODEINFO_LAYER + 6 * 5, 42, VDISP_FONT_5x8, (nodeinfo_pos == 23), str);
}
Exemplo n.º 11
0
static int main_app_key_event_handler (void * app_context, int key_num, int event_type)
{
	// app_context_t * a = (app_context_t *) app_context;
	
	if ((key_num == A_KEY_BUTTON_1) && (event_type == A_KEY_PRESSED))
	{
		software_ptt = 1;
		return 1;
	}
	else if ((key_num == A_KEY_BUTTON_1) && (event_type == A_KEY_RELEASED))
	{
		software_ptt = 0;
		return 1;
	}
	else if ((key_num == A_KEY_BUTTON_2) && (event_type == A_KEY_RELEASED))
	{
		if ((!key_douple_function) && (key_lock == 0))
		{
			if (ambe_get_automute() != 0) // automute is currently on
			{
				ambe_set_automute(0);
			}
			else
			{
				ambe_set_automute(1);
			}
		}
		else
		{
			key_douple_function = false;
		}
		
		return 1;
	}
	else if ((key_num == A_KEY_BUTTON_2) && (event_type == A_KEY_HOLD_2S))
	{
		key_douple_function = true;
		if (key_lock != 0)
		{
			key_lock = 0;
		}
		else
		{
			key_lock = 1;
		}
	}
	else if ((key_num == A_KEY_BUTTON_3) && (event_type == A_KEY_PRESSED))
	{
		if (r2cs_count() >= 0)
		{
			if (!r2cs_flag)
			{
				r2cs_flag = true;
				r2cs_idx = 0;

				lcd_show_menu_layer(help_layer);
				help_layer_timer = 0; // display permanent
			
				a_set_button_text_pos(main_screen, "SET", 2);
				vd_clear_rect(help_layer, 66, 58, 24, 6); // button 3
				vd_prints_xy(help_layer, 66, 58, VDISP_FONT_4x6, 0, main_screen->button_text[2]);
				
				r2cs_print(help_layer, r2cs_idx);
			}
			else
			{
				lcd_show_menu_layer(help_layer);
				help_layer_timer = 3; // approx 2 seconds

				a_set_button_text_pos(main_screen, "R>CS", 2);
				vd_clear_rect(help_layer, 66, 58, 24, 6); // button 3
				vd_prints_xy(help_layer, 66, 58, VDISP_FONT_4x6, 0, main_screen->button_text[2]);

				r2cs_flag = false;
				r2cs(help_layer, r2cs_idx);
			}
		}
		
		return 1;
	}
	else if ((key_num == A_KEY_BUTTON_3) && (event_type == A_KEY_HOLD_2S))
	{
		r2cs_flag = false;
		lcd_show_menu_layer(help_layer);
		help_layer_timer = 3; // approx 2 seconds
		r2cs(help_layer, -1);
		
		a_set_button_text_pos(main_screen, "R>CS", 2);
		vd_clear_rect(help_layer, 66, 58, 24, 6); // button 3
		vd_prints_xy(help_layer, 66, 58, VDISP_FONT_4x6, 0, main_screen->button_text[2]);
		
		return 1;
	}
	else if ((key_num == A_KEY_BUTTON_DOWN) && (event_type == A_KEY_PRESSED) && (r2cs_flag) && (r2cs_idx < r2cs_count()))
	{
		r2cs_idx++;
		r2cs_print(help_layer, r2cs_idx);
		
		return 1;
	}
	else if ((key_num == A_KEY_BUTTON_UP) && (event_type == A_KEY_PRESSED) && (r2cs_flag) && (r2cs_idx > 0))
	{
		r2cs_idx--;
		r2cs_print(help_layer, r2cs_idx);
		
		return 1;
	}
	
	return 0;
}
Exemplo n.º 12
0
static int dvset_app_key_event_handler (void * app_context, int key_num, int event_type)
{
	// app_context_t * a = (app_context_t *) app_context;
	
	if ((key_num == A_KEY_BUTTON_1) && (event_type == A_KEY_PRESSED))
	{
		refresh_main_menu = true;

		if (dvset_isedit())
		{
			a_set_button_text_pos(main_screen, "WRITE", 0);
			vd_clear_rect(help_layer, 0, 58, 24, 6); // button 1
			vd_prints_xy(help_layer, 0, 58, VDISP_FONT_4x6, 0, main_screen->button_text[0]);
			
			a_set_button_text_pos(main_screen, "CLEAR", 1);
			vd_clear_rect(help_layer, 34, 58, 24, 6); // button 2
			vd_prints_xy(help_layer, 34, 58, VDISP_FONT_4x6, 0, main_screen->button_text[1]);
			
			a_set_button_text_pos(main_screen, "EDIT", 2);
			vd_clear_rect(help_layer, 66, 58, 24, 6); // button 3
			vd_prints_xy(help_layer, 66, 58, VDISP_FONT_4x6, 0, main_screen->button_text[2]);
			
			a_set_button_text_pos(main_screen, "CANCEL", 3);
			vd_clear_rect(help_layer, 98, 58, 24, 6); // button 4
			vd_prints_xy(help_layer, 98, 58, VDISP_FONT_4x6, 0, main_screen->button_text[3]);
			
			dvset_store();
		}
		else
		{
			if (!dvset_isselected())
			{
				a_set_button_text_pos(main_screen, "WRITE", 0);
				vd_clear_rect(help_layer, 0, 58, 24, 6); // button 1
				vd_prints_xy(help_layer, 0, 58, VDISP_FONT_4x6, 0, main_screen->button_text[0]);
			
				a_set_button_text_pos(main_screen, "CLEAR", 1);
				vd_clear_rect(help_layer, 34, 58, 24, 6); // button 2
				vd_prints_xy(help_layer, 34, 58, VDISP_FONT_4x6, 0, main_screen->button_text[1]);
			
				a_set_button_text_pos(main_screen, "EDIT", 2);
				vd_clear_rect(help_layer, 66, 58, 24, 6); // button 3
				vd_prints_xy(help_layer, 66, 58, VDISP_FONT_4x6, 0, main_screen->button_text[2]);
			
				a_set_button_text_pos(main_screen, "CANCEL", 3);
				vd_clear_rect(help_layer, 98, 58, 24, 6); // button 4
				vd_prints_xy(help_layer, 98, 58, VDISP_FONT_4x6, 0, main_screen->button_text[3]);
			
				dvset_select(true);
			}
			else
			{
				a_set_button_text_pos(main_screen, "SELECT", 0);
				vd_clear_rect(help_layer, 0, 58, 24, 6); // button 1
				vd_prints_xy(help_layer, 0, 58, VDISP_FONT_4x6, 0, main_screen->button_text[0]);
			
				a_set_button_text_pos(main_screen, "", 1);
				vd_clear_rect(help_layer, 34, 58, 24, 6); // button 2
				vd_prints_xy(help_layer, 34, 58, VDISP_FONT_4x6, 0, main_screen->button_text[1]);
			
				a_set_button_text_pos(main_screen, "", 2);
				vd_clear_rect(help_layer, 66, 58, 24, 6); // button 3
				vd_prints_xy(help_layer, 66, 58, VDISP_FONT_4x6, 0, main_screen->button_text[2]);
			
				a_set_button_text_pos(main_screen, "MENU", 3);
				vd_clear_rect(help_layer, 98, 58, 24, 6); // button 4
				vd_prints_xy(help_layer, 98, 58, VDISP_FONT_4x6, 0, main_screen->button_text[3]);
			
				dvset_select(false);
			}
		}
			
		dvset_print();
	}
	else if ((key_num == A_KEY_BUTTON_2) && (event_type == A_KEY_PRESSED))
	{
		if (dvset_isedit())
		{
			dvset_backspace();
		}
		else
		{
			dvset_clear();
		}

		dvset_print();
	}
	else if ((key_num == A_KEY_BUTTON_3) && (event_type == A_KEY_PRESSED))
	{
		if (dvset_isedit())
		{
			dvset_cursor(0);
		}
		else
		{
			refresh_main_menu = true;

			a_set_button_text_pos(main_screen, "STORE", 0);
			vd_clear_rect(help_layer, 0, 58, 24, 6); // button 1
			vd_prints_xy(help_layer, 0, 58, VDISP_FONT_4x6, 0, main_screen->button_text[0]);
			
			a_set_button_text_pos(main_screen, "BS", 1);
			vd_clear_rect(help_layer, 34, 58, 24, 6); // button 2
			vd_prints_xy(help_layer, 34, 58, VDISP_FONT_4x6, 0, main_screen->button_text[1]);
			
			a_set_button_text_pos(main_screen, "   <", 2);
			vd_clear_rect(help_layer, 66, 58, 24, 6); // button 3
			vd_prints_xy(help_layer, 66, 58, VDISP_FONT_4x6, 0, main_screen->button_text[2]);
			
			a_set_button_text_pos(main_screen, "   >", 3);
			vd_clear_rect(help_layer, 98, 58, 24, 6); // button 4
			vd_prints_xy(help_layer, 98, 58, VDISP_FONT_4x6, 0, main_screen->button_text[3]);
			
			dvset_goedit();
		}
		
		dvset_print();
	}
	else if ((key_num == A_KEY_BUTTON_DOWN) && (event_type == A_KEY_PRESSED || event_type == A_KEY_REPEAT))
	{
		dvset_field(1);
			
		dvset_print();
		
		return 1;
	}
	else if ((key_num == A_KEY_BUTTON_UP) && (event_type == A_KEY_PRESSED || event_type == A_KEY_REPEAT))
	{
		dvset_field(0);
			
		dvset_print();
		
		return 1;
	}
	
	return 1;
}
Exemplo n.º 13
0
void a_dispatch_key_event( int layer_num, int key_num, int key_event )
{
	if ((key_lock) && (key_num != A_KEY_BUTTON_2)) return;
	
	if (key_num == A_KEY_BUTTON_APP_MANAGER)
	{
		if (key_event == A_KEY_PRESSED)
		{
			if (dvset_isedit())
			{
				dvset_cursor(1);
				dvset_print();
				
				return;
			}
			else if (dvset_isselected())
			{
				a_set_button_text_pos(main_screen, "SELECT", 0);
				vd_clear_rect(help_layer, 0, 58, 24, 6); // button 1
				vd_prints_xy(help_layer, 0, 58, VDISP_FONT_4x6, 0, main_screen->button_text[0]);

				a_set_button_text_pos(main_screen, "", 1);
				vd_clear_rect(help_layer, 34, 58, 24, 6); // button 2
				vd_prints_xy(help_layer, 34, 58, VDISP_FONT_4x6, 0, main_screen->button_text[1]);
				
				a_set_button_text_pos(main_screen, "", 2);
				vd_clear_rect(help_layer, 66, 58, 24, 6); // button 3
				vd_prints_xy(help_layer, 66, 58, VDISP_FONT_4x6, 0, main_screen->button_text[2]);
				
				a_set_button_text_pos(main_screen, "MENU", 3);
				vd_clear_rect(help_layer, 98, 58, 24, 6); // button 4
				vd_prints_xy(help_layer, 98, 58, VDISP_FONT_4x6, 0, main_screen->button_text[3]);

				settings_init();
				dvset_cancel();
				dvset_print();
				
				refresh_main_menu = true;
			
				return;
			}
			else if (r2cs_flag)
			{
				r2cs_flag = false;
				lcd_show_menu_layer(help_layer);
				help_layer_timer = 3; // approx 2 seconds
			
				a_set_button_text_pos(main_screen, "R>CS", 2);
				vd_clear_rect(help_layer, 66, 58, 24, 6); // button 3
				vd_prints_xy(help_layer, 66, 58, VDISP_FONT_4x6, 0, main_screen->button_text[2]);
			
				return;
			}
			
			if (refresh_main_menu)
			{
				a_set_button_text_pos(main_screen, "PTT", 0);
				vd_clear_rect(help_layer, 0, 58, 24, 6); // button 1
				vd_prints_xy(help_layer, 0, 58, VDISP_FONT_4x6, 0, main_screen->button_text[0]);

				a_set_button_text_pos(main_screen, "MUTE", 1);
				vd_clear_rect(help_layer, 34, 58, 24, 6); // button 2
				vd_prints_xy(help_layer, 34, 58, VDISP_FONT_4x6, 0, main_screen->button_text[1]);
				
				a_set_button_text_pos(main_screen, "R>CS", 2);
				vd_clear_rect(help_layer, 66, 58, 24, 6); // button 3
				vd_prints_xy(help_layer, 66, 58, VDISP_FONT_4x6, 0, main_screen->button_text[2]);
				
				a_set_button_text_pos(main_screen, "MENU", 3);
				vd_clear_rect(help_layer, 98, 58, 24, 6); // button 4
				vd_prints_xy(help_layer, 98, 58, VDISP_FONT_4x6, 0, main_screen->button_text[3]);

				refresh_main_menu = false;
			}
		
			snmp_reset_cmnty = 0;
			
			software_ptt = 0; // prevent TXing forever...
			
			app_manager_select_next();
			lcd_show_help_layer(help_layer);
			
			if ((current_app->screen_num == VDISP_REF_LAYER) ||
				(current_app->screen_num == VDISP_DVSET_LAYER) ||
				(current_app->screen_num == VDISP_MAIN_LAYER && r2csURCALL()))
			{
				help_layer_timer = 0; // show help forever..
			}
			else if (current_app->screen_num == VDISP_RMUSET_LAYER)
			{
				help_layer_timer = 0; // show help forever..

				rmuset_print();				
			}
			else
			{
				help_layer_timer = 5; // approx 2 seconds
			}			
		}
		
		if (key_event == A_KEY_HOLD_5S)
		{
			if (SETTING_CHAR(C_DISABLE_UDP_BEACON) != 0)  // toggle UDP beacon
			{
				SETTING_CHAR(C_DISABLE_UDP_BEACON) = 0; // beacon is now on
				dhcp_init(0); // switch on DHCP
				wm8510_beep(50, 1200, 100);
				
				snmp_reset_cmnty = 1;
			}
			else
			{
				SETTING_CHAR(C_DISABLE_UDP_BEACON) = 1; // // beacon is now off
				wm8510_beep(800, 300, 100);
			}
		}
		
		if (key_event == A_KEY_HOLD_10S)
		{
			if ((snmp_reset_cmnty == 2) && (SETTING_CHAR(C_DISABLE_UDP_BEACON) == 0))
			{
				settings.s.snmp_cmnty[0] = 0; // erase first byte, new string will then
				   // be generated automatically
				wm8510_beep(500, 1200, 100);
				snmp_reset_cmnty = 0;
			}
		}			
		
	}
	else
	{
		if (snmp_reset_cmnty == 1)
		{
			if ((key_num == A_KEY_BUTTON_UP) && (key_event == A_KEY_HOLD_2S))
			{
				snmp_reset_cmnty = 2;
			}
		}
		
		int res = 0;
		
		if (layer_num == VDISP_CURRENT_LAYER)
		{
			if (current_app->key_event_handler != NULL)
			{
				res = current_app->key_event_handler(current_app, key_num, key_event);
			}
		}
		else
		{
			app_context_t * tmp_app = app_list_head;
			
			while (tmp_app != NULL)
			{
				if ((tmp_app->screen_num == layer_num) && 
					(tmp_app->key_event_handler != NULL))
				{
					res = tmp_app->key_event_handler(tmp_app, key_num, key_event);
					break;
				}
				
				tmp_app = tmp_app->next;
			}
		}
		
		if (res == 0) // handler didn't use this event
		{
			if (((key_event == A_KEY_PRESSED) || (key_event == A_KEY_REPEAT)) && (!r2cs_flag))
			{
				switch (key_num)
				{
					case A_KEY_BUTTON_UP:
						set_speaker_volume(1);
						break;
						
					case A_KEY_BUTTON_DOWN:
						set_speaker_volume(0);
						break;
				}
			}				
		}
	}			
}
Exemplo n.º 14
0
void tx_info_on(void)
{
	if ((!tx_info)  && (!r2cs_flag) && (current_app->screen_num == VDISP_MAIN_LAYER))
	{
		char str[22];

		lcd_show_menu_layer(help_layer);
		help_layer_timer = 0; // display permanent
	
		vd_clear_rect(help_layer, 0, 12, 146, 43);	

		for (int i = 8; i < 66; i++)
		{
			vd_set_pixel(help_layer, i, 19, 0, 1, 1);
			vd_set_pixel(help_layer, i, 30, 0, 1, 1);
			vd_set_pixel(help_layer, i + 1, 31, 0, 1, 1);
		}
		for (int i = 19; i < 30; i++)
		{
			vd_set_pixel(help_layer, 8, i, 0, 1, 1);
			vd_set_pixel(help_layer, 65, i, 0, 1, 1);
			vd_set_pixel(help_layer, 66, i + 1, 0, 1, 1);
		}
	
		for (int i = 8; i < 112; i++)
		{
			vd_set_pixel(help_layer, i, 37, 0, 1, 1);
			vd_set_pixel(help_layer, i, 48, 0, 1, 1);
			vd_set_pixel(help_layer, i + 1, 49, 0, 1, 1);
		}
		for (int i = 37; i < 49; i++)
		{
			vd_set_pixel(help_layer, 8, i, 0, 1, 1);
			vd_set_pixel(help_layer, 112, i, 0, 1, 1);
			vd_set_pixel(help_layer, 113, i + 1, 0, 1, 1);
		}

		memset(str, '\0', 22);
		memcpy(str, getURCALL(), CALLSIGN_LENGTH);
	
		vd_prints_xy(help_layer, 10, 21, VDISP_FONT_5x8, 0, "ur");
		vd_prints_xy(help_layer, 20, 21, VDISP_FONT_5x8, 0, str);
	
		vd_prints_xy(help_layer, 70, 18, VDISP_FONT_4x6, 0, "R1");
		vd_prints_xy(help_layer, 70, 26, VDISP_FONT_4x6, 0, "R2");
		
		if (SETTING_CHAR(C_DV_DIRECT) != 1)
		{
			memset(str, '\0', 22);
		
			memcpy(str, settings.s.rpt1 + ((SETTING_CHAR(C_DV_USE_RPTR_SETTING) - 1)*CALLSIGN_LENGTH), CALLSIGN_LENGTH);
		
			vd_prints_xy(help_layer, 80, 18, VDISP_FONT_4x6, 0, str);
		
			memset(str, '\0', 22);
		
			memcpy(str, settings.s.rpt2 + ((SETTING_CHAR(C_DV_USE_RPTR_SETTING) - 1)*CALLSIGN_LENGTH), CALLSIGN_LENGTH);
		
			vd_prints_xy(help_layer, 80, 26, VDISP_FONT_4x6, 0, str);
		}
		else
		{
			vd_prints_xy(help_layer, 80, 18, VDISP_FONT_4x6, 0, "DIRECT  ");
			vd_prints_xy(help_layer, 80, 26, VDISP_FONT_4x6, 0, "DIRECT  ");
		}
	
		memset(str, '\0', 22);
		memcpy(str, settings.s.txmsg, TXMSG_LENGTH);
	
		vd_prints_xy(help_layer, 10, 40, VDISP_FONT_5x8, 0, str);

		tx_info = true;
	}
}
Exemplo n.º 15
0
void a_app_manager_init(void)
{
	
	app_context_t * a;
	
	a = a_new_app( "DSTAR", VDISP_MAIN_LAYER);
	a_set_button_text(a, "PTT", "MUTE", "R>CS", "MENU");
	a_set_key_event_handler(a, main_app_key_event_handler);
	main_screen = a;
	
	a = a_new_app( "RMU SET", VDISP_RMUSET_LAYER);
	a_set_button_text(a, "", "", "SELECT", "MENU");
	a_set_key_event_handler(a, rmuset_app_key_event_handler);
	
	a = a_new_app( "DV SET", VDISP_DVSET_LAYER);
	a_set_button_text(a, "SELECT", "", "", "MENU");
	a_set_key_event_handler(a, dvset_app_key_event_handler);
	
	a = a_new_app( "GPS", VDISP_GPS_LAYER);
	a_set_button_text(a, "", "", "", "MENU");
	
	a = a_new_app( "MODE SET", VDISP_REF_LAYER);
	a_set_button_text(a, "CONNECT", "DISC", "SELECT", "MENU");
	a_set_key_event_handler(a, ref_app_key_event_handler);
	
	a = a_new_app( "AUDIO", VDISP_AUDIO_LAYER);
	a_set_button_text(a, "", "", "", "MENU");
	// a_set_key_event_handler(a, debug_app_key_event_handler);
	
	a = a_new_app( "DEBUG", VDISP_DEBUG_LAYER);
	a_set_button_text(a, "", "REBOOT", "", "MENU");
	a_set_key_event_handler(a, debug_app_key_event_handler);
	
	a = a_new_app( "NODE INFO", VDISP_NODEINFO_LAYER);
	a_set_button_text(a, "GPS", "", "", "MENU");
	// a_set_key_event_handler(a, debug_app_key_event_handler);
	
	help_layer = vd_new_screen();
	
	if ((SETTING_SHORT(S_REF_SERVER_NUM) > 0) &&
	     (SETTING_SHORT(S_REF_SERVER_NUM) < 1000))
	{
		int n = SETTING_SHORT(S_REF_SERVER_NUM);
		
		ref_items[4] = n % 10;
		n /= 10;
		ref_items[3] = n % 10;
		n /= 10;
		ref_items[2] = n % 10;
	}
	
	if ((SETTING_CHAR(C_REF_MODULE_CHAR) >= 'A') &&
		(SETTING_CHAR(C_REF_MODULE_CHAR) <= 'Z'))
	{
		ref_items[5] = SETTING_CHAR(C_REF_MODULE_CHAR) - 0x41;
	}
	
	if ((SETTING_CHAR(C_REF_TIMER) >= 0) &&
		(SETTING_CHAR(C_REF_TIMER) <= 7))
	{
		ref_items[6] = SETTING_CHAR(C_REF_TIMER);
	}
	
	if ((SETTING_CHAR(C_DCS_MODE) >= 0) &&
		(SETTING_CHAR(C_DCS_MODE) <= 5))
	{
		ref_items[0] = SETTING_CHAR(C_DCS_MODE);
	}		
	
	if ((SETTING_CHAR(C_REF_TYPE) >= 0) &&
		(SETTING_CHAR(C_REF_TYPE) <= 2))
	{
		ref_items[1] = SETTING_CHAR(C_REF_TYPE);
	}
	
	set_mode_vars();
	
	int n = ref_items[2] * 100 +
	ref_items[3] * 10 +
	ref_items[4];
	
	dcs_select_reflector( n, ref_items[5] + 0x41,  ref_items[1]);
	
	if ((dcs_mode != 0)  && 
		(SETTING_CHAR(C_DCS_CONNECT_AFTER_BOOT) == 1)) 
	{
		ref_selected_item = REF_SELECTION_SPECIAL;
		dcs_on();
	}
	
	settings_set_home_ref();
	
	// TODO error handling
	
	// vd_clear_rect(help_layer, 0, 0, 128, 64);
	
	int i;
	
	for (i=0; i < 128; i++)
	{
		vd_set_pixel(help_layer, i, 56, 0, 1, 1);
	}
	
	
	
#define SIDEBOX_WIDTH 41
// #define SIDEBOX_HEIGHT 12
#define BOX1_YPOS 10
#define BOX2_YPOS 34
	
	for (i=0; i < 7; i++)
	{
		vd_set_pixel(help_layer, 32, 57+i, 0, 1, 1);
		vd_set_pixel(help_layer, 64, 57+i, 0, 1, 1);
		vd_set_pixel(help_layer, 96, 57+i, 0, 1, 1);
		vd_set_pixel(help_layer, SIDEBOX_WIDTH - 1, i, 0, 1, 1);
	}


	for (i=0; i < SIDEBOX_WIDTH; i++)
	{
		vd_set_pixel(help_layer, i, 7, 0, 1, 1);
	}
	
	/*
	for (i=0; i <= SIDEBOX_HEIGHT; i++)
	{
		vd_set_pixel(help_layer, 127-SIDEBOX_WIDTH, BOX1_YPOS+i, 0, 1, 1);
		vd_set_pixel(help_layer, 127-SIDEBOX_WIDTH, BOX2_YPOS+i, 0, 1, 1);
	}
	*/

	// vd_prints_xy(help_layer, 4, 58, VDISP_FONT_4x6, 0,"TEST");
	
	vd_prints_xy(VDISP_REF_LAYER, 0, 12, VDISP_FONT_6x8, 0, "Mode:");
	
	vd_printc_xy(VDISP_REF_LAYER, 120, 13, VDISP_FONT_8x12, 0, 0x1e); // arrow up
	vd_printc_xy(VDISP_REF_LAYER, 120, 39, VDISP_FONT_8x12, 0, 0x1f); // arrow up
	
	vd_printc_xy(VDISP_DVSET_LAYER, 120, 13, VDISP_FONT_8x12, 0, 0x1e); // arrow up
	vd_printc_xy(VDISP_DVSET_LAYER, 120, 39, VDISP_FONT_8x12, 0, 0x1f); // arrow up
	
	vd_printc_xy(VDISP_RMUSET_LAYER, 120, 13, VDISP_FONT_8x12, 0, 0x1e); // arrow up
	vd_printc_xy(VDISP_RMUSET_LAYER, 120, 39, VDISP_FONT_8x12, 0, 0x1f); // arrow up
	
	set_help_text();
}
Exemplo n.º 16
0
static void vDNSTask( void *pvParameters )
{
	uint16_t ttl_check_counter = 0;
	
	while(1)
	{
		int i;
		
		if (ttl_check_counter > 0)
		{
			ttl_check_counter --;
		}
		
		char entry_counter[2];
		entry_counter[0] = 0x30;
		entry_counter[1] = 0;
		
		for (i=0; i < DNS_NUMBER_OF_ENTRIES; i++)
		{
			vTaskDelay(DNS_WAIT_TIME_PER_SLOT); // give time to other threads
			
			struct dns2_cache * cur = dc + i;
			
			if (cur->reqname_len == 0) // skip inactive slots
				continue; 
			
			entry_counter[0] ++;
			
			if (cur->timeout > 0)
			{
				cur->timeout --;
			}
		
			switch (cur->state)
			{
			case DNS_STATE_REQ_A:
				if (cur->timeout == 0)
				{
					if (cur->retry > 0)
					{
						cur->retry --;
					}
				
					if (cur->retry == 0)
					{
						if (cur->primary_server != 0)
						{
							if (memcmp(ipv4_dns_sec, ipv4_zero_addr, sizeof ipv4_addr) == 0)
							{  // no secondary DNS server
								cur->state = DNS_STATE_RESULT_TIMEOUT;
							}
							else
							{
								cur->primary_server = 0; // try the secondary server
								cur->udp_local_port = 0; // with new port number
								cur->retry = DNS_REQ_RETRY;
							}
						}
						else
						{
							cur->state = DNS_STATE_RESULT_TIMEOUT;
						}
					}
					else
					{
						if (dns2_send_req(i, DNS_QTYPE_A) != 0)  // send failed
						{
							cur->state = DNS_STATE_RESULT_ERR;
						}
					}
				}
				break;
			
			}
			
			if (ttl_check_counter == 0)
			{
				if (cur->ttl > 0)
				{
					cur->ttl --;
				}
				
				if ((cur->ttl == 0) && (cur->link == 0)) // TTL expired and entry unused
				{
					cur->reqname_len = 0; // free entry
				}
			}
			
			
		} // for
		
		if (ttl_check_counter == 0)
		{
			ttl_check_counter = (DNS_TTL_COUNTER_TIMER / DNS_WAIT_TIME_PER_SLOT) / DNS_NUMBER_OF_ENTRIES; // decrease TTL every 3 seconds
		}
		
		vd_prints_xy(VDISP_DEBUG_LAYER, 0, 54, VDISP_FONT_4x6, 0, entry_counter);
		
	} // while(1)
}