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; }
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); }
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 } }
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; }
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); }
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); */ }
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; }
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(); } }
bool rmuset_enabled(void) { return (SETTING_CHAR(C_RMU_ENABLED) == 1 && (rmu_enabled)) ? true : false; }
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; }
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; }
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; }
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; } } } } }
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; } }
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(); }