static uint8_t m2_check_fn_get_wh(m2_rom_void_p element, uint8_t msg) { m2_el_fnarg_t arg; arg.msg = msg; arg.element = element; arg.nav = &m2_draw_current; return m2_rom_get_el_fnptr(arg.element)(&arg); }
int8_t m2_el_s8_get_val(m2_el_fnarg_p fn_arg) { if ( m2_rom_get_el_fnptr(fn_arg->element) == m2_el_s8numfn_fn ) { m2_s8fn_fnptr fn = m2_el_s8_get_callback(fn_arg); return fn(fn_arg->element, M2_S8_MSG_GET_VALUE, 0); } else { return *m2_el_s8_get_val_ptr(fn_arg); } }
void m2_el_s8_set_val(m2_el_fnarg_p fn_arg, int8_t val) { if ( m2_rom_get_el_fnptr(fn_arg->element) == m2_el_s8numfn_fn ) { m2_s8fn_fnptr fn = m2_el_s8_get_callback(fn_arg); if ( val != fn(fn_arg->element, M2_S8_MSG_GET_VALUE, 0) ) fn(fn_arg->element, M2_S8_MSG_SET_VALUE, val); } else { *m2_el_s8_get_val_ptr(fn_arg) = val; } }
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)); } }