Пример #1
0
void settings_get_home_ref(void)
{
	SETTING_SHORT(S_REF_SERVER_NUM) = ref_home.server_num;
	SETTING_CHAR(C_REF_MODULE_CHAR) = ref_home.module_char;
	SETTING_CHAR(C_REF_TYPE) = ref_home.type;
	SETTING_CHAR(C_DCS_CONNECT_AFTER_BOOT) = ref_home.dcs_connect_after_boot;
}
Пример #2
0
void settings_set_home_ref(void)
{
	ref_home.server_num = SETTING_SHORT(S_REF_SERVER_NUM);
	ref_home.module_char = SETTING_CHAR(C_REF_MODULE_CHAR);
	ref_home.type = SETTING_CHAR(C_REF_TYPE);
	ref_home.dcs_connect_after_boot = SETTING_CHAR(C_DCS_CONNECT_AFTER_BOOT);
}
Пример #3
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
	}
}
Пример #4
0
size_t build_position_report(char* buffer, const char** parameters)
{
  size_t length = APRS_POSITION_LENGTH;
  const char* symbol = symbols[SETTING_CHAR(C_DPRS_SYMBOL)];
  // Position report with time (no messaging capability)
  buffer[0] = '/';
  // Time
  memcpy(buffer + 1, parameters[1], 6);
  buffer[7] = 'h';
  // Latitude
  memcpy(buffer + 8, parameters[3], 7);
  buffer[15] = *parameters[4];
  // Symbol table / Overlay
  buffer[16] = symbol[0];
  // Longitude
  memcpy(buffer + 17, parameters[5], 8);
  buffer[25] = *parameters[6];
  // Symbol code
  buffer[26] = symbol[1];
  // Course
  copy_extension(buffer + 27, parameters[8]);
  buffer[30] = '/';
  // Speed
  copy_extension(buffer + 31, parameters[7]);
  // Altitude (optional)
  length += build_altitude_extension(buffer + 34);
  // Commentary
  memcpy(buffer + length, settings.s.dprs_msg, DPRS_MSG_LENGTH);
  length += DPRS_MSG_LENGTH;

  return length;
}
Пример #5
0
static void set_phy_parameters(void)
{
	uint8_t value;
	
	value = SETTING_SHORT(S_PHY_TXDELAY) & 0xFF;
	snmp_set_phy_sysparam(1, &value, 1);
	value = SETTING_CHAR(C_PHY_TXGAIN) & 0xFF;
	snmp_set_phy_sysparam(2, &value, 1);
	value = SETTING_CHAR(C_PHY_RXINV) & 0xFF;
	snmp_set_phy_sysparam(3, &value, 1);
	value = SETTING_CHAR(C_PHY_TXDCSHIFT) & 0xFF;
	snmp_set_phy_sysparam(4, &value, 1);
	value = SETTING_SHORT(S_PHY_MATFST) & 0xFF;
	snmp_set_phy_sysparam(5, &value, 1);
	value = SETTING_SHORT(S_PHY_LENGTHOFVW) & 0xFF;
	snmp_set_phy_sysparam(6, &value, 1);
}
Пример #6
0
void set_phy_parameters(void)
{
	uint8_t value;
	
	value = SETTING_SHORT(S_PHY_TXDELAY) & 0xFF;
	snmp_set_phy_sysparam(1, &value, 1);
	value = SETTING_CHAR(C_PHY_TXGAIN) & 0xFF;
	snmp_set_phy_sysparam(2, &value, 1);
	value = SETTING_CHAR(C_PHY_RXINV) & 0xFF;
	snmp_set_phy_sysparam(3, &value, 1);
	value = SETTING_CHAR(C_PHY_TXDCSHIFT) & 0xFF;
	snmp_set_phy_sysparam(4, &value, 1);
	
	snmp_set_phy_sysparam_raw(5, (uint8_t *) repeater_callsign, CALLSIGN_LENGTH);
	
	/* 
	value = SETTING_SHORT(S_PHY_MATFST) & 0xFF;
	snmp_set_phy_sysparam(5, &value, 1);
	value = SETTING_SHORT(S_PHY_LENGTHOFVW) & 0xFF;
	snmp_set_phy_sysparam(6, &value, 1);
	*/
}
Пример #7
0
size_t build_aprs_call(char* buffer)
{
  size_t number;
  for (number = 0; (number < CALLSIGN_LENGTH) && (settings.s.my_callsign[number] > ' '); number ++)
    buffer[number] = settings.s.my_callsign[number];
  if ((SETTING_CHAR(C_APRS_SSID) > 0) && (SETTING_CHAR(C_APRS_SSID) < 10))
  {
    buffer[number] = '-';
    buffer[number + 1] = SETTING_CHAR(C_APRS_SSID) + 0x30;
    number += 2;
  }
  if ((SETTING_CHAR(C_APRS_SSID) >= 10) && (SETTING_CHAR(C_APRS_SSID) <= 15))
  {
    buffer[number] = '-';
    buffer[number + 1] = '1';
    buffer[number + 2] = SETTING_CHAR(C_APRS_SSID) + 0x26;
    number += 3;
  }
  return number;
}
Пример #8
0
void rmuset_ref(int act)
{
	if (feld_selected_item == 0)
	{
		for (int i = 0; i < ref_item_max_val[0]; i++)
		{
			if (memcmp(settings.s.qrg_tx, ref_qrg_MHz[i], 3) == 0)
			{
				ref_selected_item = i;
				break;
			}
		}
		
		if (act == 0)
			ref_selected_item--;
		else if (act == 1)
			ref_selected_item++;
		
		if (ref_selected_item < ref_item_min_val[0])
			ref_selected_item = ref_item_max_val[0];
		else if (ref_selected_item > ref_item_max_val[0])
			ref_selected_item = ref_item_min_val[0];
		
		memcpy(settings.s.qrg_tx, ref_qrg_MHz[ref_selected_item], 3);
		dstarRMUSetQRG();
	}
	else if (feld_selected_item == 1)
	{
		for (int i = 0; i < ref_item_max_val[1]; i++)
		{
			if (memcmp(settings.s.qrg_tx + 3, ref_qrg_100kHz[i], 1) == 0)
			{
				ref_selected_item = i;
				break;
			}
		}
		
		if (act == 0)
			ref_selected_item--;
		else if (act == 1)
			ref_selected_item++;
		
		if (ref_selected_item < ref_item_min_val[1])
			ref_selected_item = ref_item_max_val[1];
		else if (ref_selected_item > ref_item_max_val[1])
			ref_selected_item = ref_item_min_val[1];
		
		memcpy(settings.s.qrg_tx + 3, ref_qrg_100kHz[ref_selected_item], 1);
		dstarRMUSetQRG();
	}
	else if (feld_selected_item == 2)
	{
		for (int i = 0; i < ref_item_max_val[2]; i++)
		{
			if (memcmp(settings.s.qrg_tx + 4, ref_qrg_6_25kHz[i], 2) == 0)
			{
				ref_selected_item = i;
				break;
			}
		}
		
		if (act == 0)
			ref_selected_item--;
		else if (act == 1)
			ref_selected_item++;
		
		if (ref_selected_item < ref_item_min_val[2])
			ref_selected_item = ref_item_max_val[2];
		else if (ref_selected_item > ref_item_max_val[2])
			ref_selected_item = ref_item_min_val[2];
		
		memcpy(settings.s.qrg_tx + 4, ref_qrg_6_25kHz[ref_selected_item], 2);
		memcpy(settings.s.qrg_tx + 6, ref_qrg_6_25kHz[ref_selected_item] + 2, 2);
		memcpy(settings.s.qrg_tx + 8, "0", 1);
		dstarRMUSetQRG();
	}
	if (feld_selected_item == 3)
	{
		for (int i = 0; i < ref_item_max_val[0]; i++)
		{
			if (memcmp(settings.s.qrg_rx, ref_qrg_MHz[i], 3) == 0)
			{
				ref_selected_item = i;
				break;
			}
		}
		
		if (act == 0)
			ref_selected_item--;
		else if (act == 1)
			ref_selected_item++;
		
		if (ref_selected_item < ref_item_min_val[0])
			ref_selected_item = ref_item_max_val[0];
		else if (ref_selected_item > ref_item_max_val[0])
			ref_selected_item = ref_item_min_val[0];
		
		memcpy(settings.s.qrg_rx, ref_qrg_MHz[ref_selected_item], 3);
		dstarRMUSetQRG();
	}
	else if (feld_selected_item == 4)
	{
		for (int i = 0; i < ref_item_max_val[1]; i++)
		{
			if (memcmp(settings.s.qrg_rx + 3, ref_qrg_100kHz[i], 1) == 0)
			{
				ref_selected_item = i;
				break;
			}
		}
		
		if (act == 0)
			ref_selected_item--;
		else if (act == 1)
			ref_selected_item++;
		
		if (ref_selected_item < ref_item_min_val[1])
			ref_selected_item = ref_item_max_val[1];
		else if (ref_selected_item > ref_item_max_val[1])
			ref_selected_item = ref_item_min_val[1];
		
		memcpy(settings.s.qrg_rx + 3, ref_qrg_100kHz[ref_selected_item], 1);
		dstarRMUSetQRG();
	}
	else if (feld_selected_item == 5)
	{
		for (int i = 0; i < ref_item_max_val[2]; i++)
		{
			if (memcmp(settings.s.qrg_rx + 4, ref_qrg_6_25kHz[i], 2) == 0)
			{
				ref_selected_item = i;
				break;
			}
		}
		
		if (act == 0)
			ref_selected_item--;
		else if (act == 1)
			ref_selected_item++;
		
		if (ref_selected_item < ref_item_min_val[2])
			ref_selected_item = ref_item_max_val[2];
		else if (ref_selected_item > ref_item_max_val[2])
			ref_selected_item = ref_item_min_val[2];
		
		memcpy(settings.s.qrg_rx + 4, ref_qrg_6_25kHz[ref_selected_item], 2);
		memcpy(settings.s.qrg_rx + 6, ref_qrg_6_25kHz[ref_selected_item] + 2, 2);
		memcpy(settings.s.qrg_rx + 8, "0", 1);
		dstarRMUSetQRG();
	}
	else if (feld_selected_item == 6)
	{
		ref_selected_item = SETTING_CHAR(C_RMU_ENABLED);
		
		if (act == 0)
			ref_selected_item--;
		else if (act == 1)
			ref_selected_item++;
			
		if (ref_selected_item < ref_item_min_val[3])
			ref_selected_item = ref_item_max_val[3];
		else if (ref_selected_item > ref_item_max_val[3])
			ref_selected_item = ref_item_min_val[3];
			
		SETTING_CHAR(C_RMU_ENABLED) = ref_selected_item;
		dstarRMUEnable();
	}
}
Пример #9
0
bool rmuset_enabled(void)
{
	return (SETTING_CHAR(C_RMU_ENABLED) == 1 && (rmu_enabled)) ? true : false;
}
Пример #10
0
static void phy_start_tx(void)
{

	// Schalte UP4DAR auf Senden um
	
    send_cmd(tx_on, 1);
	
	// Bereite einen Header vor
	
	header[0] = 0x20;
	header[1] = (SETTING_CHAR(C_DV_DIRECT) == 1) ? 0 :	// "1st control byte"
				  (1 << 6)	// Setze den Repeater-Flag
				;
				
	
	
	header[2] = 0x0;				// "2nd control byte"
	header[3] = 0x0;				// "3rd control byte"
	
	for (short i=0; i<CALLSIGN_LENGTH; ++i){
		if (SETTING_CHAR(C_DV_DIRECT) == 1)
		{
			header[4+i] = direct_callsign[i];
		}
		else
		{
			header[4+i] = settings.s.rpt2[ ((SETTING_CHAR(C_DV_USE_RPTR_SETTING) - 1)*CALLSIGN_LENGTH) + i];
		}		
	}
	
	for (short i=0; i<CALLSIGN_LENGTH; ++i){
		if (SETTING_CHAR(C_DV_DIRECT) == 1)
		{
			header[12+i] = direct_callsign[i];
		}
		else
		{
			header[12+i] = settings.s.rpt1[ ((SETTING_CHAR(C_DV_USE_RPTR_SETTING) - 1)*CALLSIGN_LENGTH) + i];
		}
	}
	
	for (short i=0; i<CALLSIGN_LENGTH; ++i){
		header[20+i] = settings.s.urcall[ ((SETTING_CHAR(C_DV_USE_URCALL_SETTING  ) - 1)*CALLSIGN_LENGTH) + i];
	}
	
	for (short i=0; i<CALLSIGN_LENGTH; ++i){
		header[28+i] = settings.s.my_callsign[i];
	}
	
	for (short i=0; i<CALLSIGN_EXT_LENGTH; ++i){
		header[36+i] = settings.s.my_ext[i];
	}
	
	// Bis zu 70ms kann man sich Zeit lassen, bevor die Header-Daten uebergeben werden.
	// Die genaue Wartezeit ist natruerlich von TX-DELAY abhaengig.
	//usleep(70000);
	
	// vTaskDelay (50); // 50ms
	
	send_cmd(header, 40);
	
	// phy_frame_counter = 0;
	txmsg_counter = 0;
}
Пример #11
0
int gps_get_slow_data(uint8_t * slow_data)
{
	int ret_val = 0;
	
	slow_data[0] = 0x66; // NOP data
	slow_data[1] = 0x66;
	
	if (SETTING_CHAR(C_DPRS_ENABLED) != 1)
	{
		return 0;
	}
	
	// vdisp_printc_xy(0,0,VDISP_FONT_6x8, 0, 0x30 + slow_data_state);
	
	switch (slow_data_state)
	{
		case 0:  // no data to send
			break;
			
		case 1: // send GPGGA 
			if (slow_data_ptr == 0)
			{
				slow_data_state = 4; // end
			}
			else
			{
				if (copy_slow_data(&ret_val, slow_data) != 0) // if all bytes are copied
				{
					slow_data_state = 2;
					slow_data_ptr = gprmc_data;
				}
			}
			break;
		
		case 2: // send GPRMC
			if (slow_data_ptr == 0)
			{
				slow_data_state = 4; // end
			}
			else
			{
				if (copy_slow_data(&ret_val, slow_data) != 0) // if all bytes are copied
				{
					memcpy (gps_id, settings.s.my_callsign, CALLSIGN_LENGTH);
					gps_id[8] = ',';
					memcpy (gps_id + 9, dprs_symbol[SETTING_CHAR(C_DPRS_SYMBOL)], 4);
					
					memset (gps_id + 13, ' ', 16); // spaces
					gps_id[29] = 13;
					gps_id[30] = 10;
					gps_id[31] = 0;
					
					memcpy (gps_id + 13, settings.s.dprs_msg, 13);
					
					int i = 26;
					while (i > 13)
					{
						if (gps_id[i-1] != ' ') // space
							break;
						
						i--;
					}
					
					int chksum = 0;
					
					int j;
					
					for (j=0; j < i; j++)
					{
						chksum = chksum ^ gps_id[j];
					}
					
					gps_id[i] = '*';
					gps_id[i+1] = hex_char(chksum >> 4);
					gps_id[i+2] = hex_char(chksum & 0x0F);
					
					slow_data_state = 3;
					slow_data_ptr = gps_id;
				}
			}
			break;
			
		case 3: // send gps_id
			if (slow_data_ptr == 0)
			{
				slow_data_state = 4; // end
			}
			else
			{
				if (copy_slow_data(&ret_val, slow_data) != 0) // if all bytes are copied
				{
					slow_data_state = 4;
					slow_data_ptr = 0;
				}
			}
			break;
			
		case 4:
			gps_reset_slow_data();
			break;
	}
Пример #12
0
static int ref_app_key_event_handler (void * app_context, int key_num, int key_event)
{
	// app_context_t * a = (app_context_t *) app_context;
	char v;
	
	if ((key_event == A_KEY_PRESSED) || (key_event == A_KEY_REPEAT))
	{
		switch (key_num)
		{
			case A_KEY_BUTTON_1:  // connect button
				
				if (dcs_mode != 0)
				{
					ref_selected_item = REF_SELECTION_SPECIAL;
					dcs_on();
					if (repeater_mode || hotspot_mode)
						ambe_set_ref_timer(1);
					SETTING_CHAR(C_DCS_CONNECT_AFTER_BOOT) = 1;
				}
				break;
			
			case A_KEY_BUTTON_2:  // disconnect button
			
				ref_selected_item = 0;
			
				if (dcs_mode != 0)
				{
					dcs_off();
					if (repeater_mode || hotspot_mode)
						ambe_set_ref_timer(0);
					SETTING_CHAR(C_DCS_CONNECT_AFTER_BOOT) = 0;
				}
				break;
			
			case A_KEY_BUTTON_3:  // select button
				if (!dcs_is_connected())
				{
					int num_items = REF_NUM_ITEMS;
					
					num_items -= (repeater_mode || hotspot_mode) ? 0 : 1;
					
					ref_selected_item ++;
					if (ref_selected_item >= num_items)
					{
						ref_selected_item = 0;
					}
				}
				break;
				
			case A_KEY_BUTTON_UP:
				if (ref_selected_item != REF_SELECTION_SPECIAL)
				{
					v = ref_items[(int) ref_selected_item];
					v++;
					if (v > ref_item_max_val[(int) ref_selected_item])
					{
						v = 0;
					}
					ref_items[(int) ref_selected_item] = v;
				}				
				break;
				
			case A_KEY_BUTTON_DOWN:
				if (ref_selected_item != REF_SELECTION_SPECIAL)
				{
					v = ref_items[(int) ref_selected_item];
				
					if (v == 0)
					{
						v = ref_item_max_val[(int) ref_selected_item];
					}
					else
					{
						v--;
					}
					ref_items[(int) ref_selected_item] = v;
				}					
				break;
				
		}
		
		
		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]);
		
		SETTING_CHAR(C_REF_TYPE) = ref_items[1];
		SETTING_SHORT(S_REF_SERVER_NUM) = n;
		SETTING_CHAR(C_REF_MODULE_CHAR) = ref_items[5] + 0x41;
		SETTING_CHAR(C_DCS_MODE) = ref_items[0];
		SETTING_CHAR(C_REF_TIMER) = ref_items[6];
		
		//settings_set_home_ref();
		
		ref_print_status();
		
		

	}
	
	
	return 1;	
}
Пример #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;
				}
			}				
		}
	}			
}
Пример #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;
	}
}
Пример #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();
}