void create_menu_utilies_hook(void) { struct MENU *menu_mem; int enabled; if( (md380_program_radio_unprohibited[4] & 0x4) == 0x4 ) { enabled = 0; } else { enabled = 1; } menu_mem = get_menu_stackpoi(); menu_mem->unknownp = &md380_menu_mem_base[md380_menu_id]; // menu_mem->numberof_menu_entries++; menu_mem->numberof_menu_entries = 6; #ifdef CONFIG_MENU md380_create_menu_entry(8, md380_wt_programradio, MKTHUMB(md380_menu_entry_programradio), MKTHUMB(md380_menu_entry_back), 0x8a, 0, enabled); #ifdef FW_D13_020 md380_create_menu_entry(11, wt_addl_func, MKTHUMB(create_menu_entry_addl_functions_screen), MKTHUMB(md380_menu_entry_back), 0x8a, 0, 1); #else if( menu_mem->numberof_menu_entries == 6 ) { // d13.020 has hidden gps entrys on this menu md380_create_menu_entry(11, wt_addl_func, MKTHUMB(create_menu_entry_addl_functions_screen), MKTHUMB(md380_menu_entry_back), 0x8a, 0, 1); } else { md380_create_menu_entry(9, wt_addl_func, MKTHUMB(create_menu_entry_addl_functions_screen), MKTHUMB(md380_menu_entry_back), 0x8a, 0, 1); } #endif #endif }
void create_menu_entry_hook(int a, const wchar_t * b , void * c, void * d, int e, int f ,int g) { #ifdef DEBUG printf("0x%x Text: 0x%x GreenKey 0x%x RedKey 0x%x 0x%x 0x%x 0x%x\n", a,b,c,d,e,f,g); printf("b: "); printhex2((char *) b,14); printf("\n"); printf(" md380_menu_depth: %d\n", md380_menu_depth); #endif md380_create_menu_entry(a,b,c,d,e,f,g); }
void mn_submenu_add_8a(const wchar_t * label, void (*func)(), int enabled) { struct MENU *menu_mem = get_menu_stackpoi(); func = MKTHUMB(func); md380_create_menu_entry(md380_menu_id + menu_mem->numberof_menu_entries, label, func, MKTHUMB(md380_menu_entry_back), 0x8a, 0, enabled); menu_mem->numberof_menu_entries++ ; }
void create_menu_entry_edit_screen(void) { struct MENU *menu_mem; uint8_t i; uint8_t *p; md380_menu_0x2001d3c1 = md380_menu_0x200011e4; mn_editbuffer_poi = md380_menu_edit_buf; /* 0x08012a8e dff8200b ldr.w r0, [pc, 0xb20] ; [0x80135b0:4]=0x20001114 0x08012a92 dff8201b ldr.w r1, [pc, 0xb20] ; [0x80135b4:4]=0x2001b716 0x08012a96 0160 str r1, [r0] 0x08012a98 0020 movs r0, 0 0x08012a9a 07e0 b 0x8012aac 0x08012a9c c0b2 uxtb r0, r0 0x08012a9e dff8101b ldr.w r1, [pc, 0xb10] ; [0x80135b0:4]=0x20001114 0x08012aa2 0968 ldr r1, [r1] 0x08012aa4 0022 movs r2, 0 0x08012aa6 21f81020 strh.w r2, [r1, r0, lsl 1] 0x08012aaa 401c adds r0, r0, 1 0x08012aac c0b2 uxtb r0, r0 0x08012aae 1128 cmp r0, 0x11 0x08012ab0 f4d3 blo 0x8012a9c */ // clear retrun buffer // see 0x08012a98 // TODO: is wchar_t (16 bits)) for (i = 0; i < 0x11; i++) { p = (uint8_t *) mn_editbuffer_poi; p = p + i; *p = 0; } md380_menu_0x2001d3ed = 8; md380_menu_0x2001d3ee = 0; md380_menu_0x2001d3ef = 0; md380_menu_0x2001d3f0 = 3; md380_menu_0x2001d3f1 = 0; md380_menu_0x2001d3f4 = 0; menu_mem = get_menu_stackpoi(); menu_mem->menu_title = wt_edit; menu_mem->unknownp = &md380_menu_mem_base[md380_menu_id]; menu_mem->numberof_menu_entries = 1; menu_mem->unknown_00 = 0; menu_mem->unknown_01 = 0; #ifdef CONFIG_MENU md380_create_menu_entry(md380_menu_id, wt_edit, MKTHUMB(create_menu_entry_edit_screen_store), MKTHUMB(md380_menu_numerical_input), 0x81, 0, 1); #endif }
void create_menu_entry_edit_screen_store(void) { #if 0 printf("your enter: "); printhex2((char *) md380_menu_edit_buf, 14); printf("\n"); #endif md380_menu_id = md380_menu_id - 1; md380_menu_depth = md380_menu_depth - 1; #ifdef CONFIG_MENU md380_create_menu_entry(md380_menu_id, md380_menu_edit_buf, MKTHUMB(md380_menu_entry_back), MKTHUMB(md380_menu_entry_back), 6, 1, 1); #endif }
void mn_create_single_timed_ack( const wchar_t *title, const wchar_t *label ) { struct MENU *menu_mem; menu_mem = get_menu_stackpoi(); menu_mem->menu_title = title; menu_mem->unknownp = &md380_menu_mem_base[md380_menu_id]; menu_mem->numberof_menu_entries = 1; menu_mem->unknown_00 = 0; menu_mem->unknown_01 = 0; md380_create_menu_entry(md380_menu_id, label, MKTHUMB(md380_menu_entry_back), MKTHUMB(md380_menu_entry_back), 6, 2, 1); }
void create_menu_entry_edit_dmr_id_screen(void) { struct MENU *menu_mem; uint8_t i; uint8_t *p; uint32_t nchars; md380_menu_0x2001d3c1 = md380_menu_0x200011e4; mn_editbuffer_poi = md380_menu_edit_buf; // clear retrun buffer // see 0x08012a98 // TODO: is wchar_t (16 bits)) for (i = 0; i < 0x11; i++) { p = (uint8_t *) mn_editbuffer_poi; p = p + i; *p = 0; } nchars = uli2w(md380_radio_config.dmrid, md380_menu_edit_buf); #if 0 printf("\ncreate_menu_entry_edit_dmr_id_screen %x %d \n", md380_menu_edit_buf, nchars); printhex2((char *) md380_menu_edit_buf, 14); printf("\n"); #endif md380_menu_0x2001d3ed = 8; // max char md380_menu_0x2001d3ee = nchars; // startpos cursor md380_menu_0x2001d3ef = nchars; // startpos cursor md380_menu_0x2001d3f0 = 3; // 3 = numerical input md380_menu_0x2001d3f1 = 0; md380_menu_0x2001d3f4 = 0; menu_mem = get_menu_stackpoi(); menu_mem->menu_title = wt_edit_dmr_id; menu_mem->unknownp = &md380_menu_mem_base[md380_menu_id]; menu_mem->numberof_menu_entries = 1; menu_mem->unknown_00 = 0; menu_mem->unknown_01 = 0; #ifdef CONFIG_MENU md380_create_menu_entry(md380_menu_id, wt_edit_dmr_id, MKTHUMB(create_menu_entry_edit_dmr_id_screen_store), MKTHUMB(md380_menu_numerical_input), 0x81, 0, 1); #endif }
void create_menu_entry_edit_dmr_id_screen_store(void) { uint32_t new_dmr_id = 0; wchar_t *bf; #if 0 printf("your enter: "); printhex2((char *) md380_menu_edit_buf, 14); printf("\n"); #endif bf = md380_menu_edit_buf; while (*bf != 0) { new_dmr_id *= 10; new_dmr_id += (*bf++) - '0'; } if ( new_dmr_id > 0xffffff ) { return; } #if 0 printf("\n%d\n", new_dmr_id); #endif global_addl_config.dmrid = new_dmr_id ; cfg_save(); cfg_fix_dmrid(); md380_menu_id = md380_menu_id - 1; md380_menu_depth = md380_menu_depth - 1; if (global_addl_config.userscsv == 1) { cfg_set_radio_name(); } #ifdef CONFIG_MENU md380_create_menu_entry(md380_menu_id, md380_menu_edit_buf, MKTHUMB(md380_menu_entry_back), MKTHUMB(md380_menu_entry_back), 6, 1, 1); #endif }