static void m2_el_u32_set_accumulator_by_parent(m2_nav_p nav) { m2_rom_void_p element = m2_nav_get_parent_element(nav); if ( m2_rom_get_el_fnptr(element) == m2_el_u32fn_fn ) { m2_u32fn_fnptr fn = (m2_u32fn_fnptr)m2_rom_get_ram_ptr(element, offsetof(m2_el_u32fn_t, u32_callback)); m2_el_u32_accumulator = fn(element, M2_U32_MSG_GET_VALUE, 0); } else { m2_el_u32_accumulator = *(uint32_t *)m2_rom_get_ram_ptr(element, offsetof(m2_el_u32_t, val)); } }
static char *m2_get_char_ptr(m2_nav_p nav) { uint8_t pos; char *text; /* depth is at least 2, because this is a virtual field of a text entry field */ pos = nav->pos[nav->depth-2]; /* also, the parent must be the text-element */ text = (char *)m2_rom_get_ram_ptr(m2_nav_get_parent_element(nav), offsetof(m2_el_text_t, text)); /* now the pointer to the char can be calulacted */ return text + pos; }
char *m2_el_strptr_get_str(m2_el_fnarg_p fn_arg) { return *(char **)m2_rom_get_ram_ptr(fn_arg->element, offsetof(m2_el_strptr_t, strptr)); /*return (char *)m2_get_ae_ptr( &(fn_arg->ae), offsetof(m2_el_str_t, str));*/ }
static uint8_t m2_el_comboptr_get_len(m2_el_fnarg_p fn_arg) { return *(uint8_t *)m2_rom_get_ram_ptr(fn_arg->element, offsetof(m2_el_comboptr_t, cnt_ptr)); }
m2_rom_void_p m2_el_align_get_element(m2_el_fnarg_p fn_arg) { return (m2_rom_void_p)m2_rom_get_ram_ptr(fn_arg->element, offsetof(m2_el_align_t, element)); }
uint8_t *m2_el_u8_get_val_ptr(m2_el_fnarg_p fn_arg) { return (uint8_t *)m2_rom_get_ram_ptr(fn_arg->element, offsetof(m2_el_u8_t, val)); }
m2_rom_void_p m2_el_root_get_ae(m2_el_fnarg_p fn_arg) { return (m2_rom_void_p)m2_rom_get_ram_ptr(fn_arg->element, offsetof(m2_el_root_t, element)); }
m2_xmenu_entry *m2_el_x2lmenu_get_menu_data_ptr(m2_rom_void_p element) { return (m2_xmenu_entry *)m2_rom_get_ram_ptr(element, offsetof(m2_el_2lmenu_t, menu_entries)); }