void PAGE_ChangeByID(enum PageID id, s8 menuPage) { if ( modal || GUI_IsModal()) return; PAGE_SaveCurrentPos(); page_scrollable = NULL; PAGE_Exit(); GUI_SelectionNotify(NULL); cur_page = id; BUTTON_InterruptLongPress(); //Make sure button press is not passed to the new page if (pages[cur_page].init == PAGE_MainInit) quick_page_enabled = 1; else if (pages[cur_page].init == PAGE_MenuInit) quick_page_enabled = 0; PAGE_RemoveAllObjects(); if (HAS_TOUCH) { GUI_ChangeSelectionOnTouch(1); } ActionCB = default_button_action_cb; pages[cur_page].init(menuPage); if (page_scrollable) { guiObject_t *obj = GUI_ShowScrollableRowOffset(page_scrollable, *current_selected); if(! HAS_TOUCH || ! GUI_InTouch()) GUI_SetSelected(obj); } }
void PAGE_RemoveAllObjects() { enter_cmd = NULL; exit_cmd = NULL; if(! GUI_IsEmpty()) { GUI_RemoveAllObjects(); memset(&gui_objs, 0, sizeof(gui_objs)); BUTTON_InterruptLongPress(); //Make sure button press is not passed to next page } }
unsigned MIXER_UpdateTrim(u32 buttons, unsigned flags, void *data) { #define TRIM_MUSIC_DURATION 100 #define START_TONE 1000 (void)data; int i; int orig_step_size = 1; int tmp; unsigned reach_end = 0; // reach either 100 , 0, or -100 if (flags & BUTTON_LONGPRESS) { if (orig_step_size == 1) orig_step_size = 9; else if (orig_step_size == 9) orig_step_size = 10; } if (! orig_step_size) return 1; unsigned volume = 10 * Transmitter.volume; for (i = 0; i < NUM_TRIMS; i++) { int step_size = orig_step_size; reach_end = 0; int neg_button = CHAN_ButtonIsPressed(buttons, Model.trims[i].neg); if (neg_button || CHAN_ButtonIsPressed(buttons, Model.trims[i].pos)) { if (Model.trims[i].step > 190) { _trim_as_switch(flags, i, neg_button); continue; } if (flags & BUTTON_RELEASE) continue; int max = 100; if (Model.trims[i].step >= 100) { step_size = Model.trims[i].step - 90; } else if (Model.trims[i].step > 10) { step_size = step_size * Model.trims[i].step / 10; } if (neg_button) step_size = -step_size; s8 *value = MIXER_GetTrim(i); tmp = (int)(*value) + step_size; //print_buttons(buttons); if ((int)*value > 0 && tmp <= 0) { *value = 0; reach_end = 1; } else if ((int)*value < 0 && tmp >= 0) { *value = 0; reach_end = 1; } else if (tmp > max) { *value = 100; reach_end = 1; } else if (tmp < -max) { *value = -100; reach_end = 1; } else { *value = tmp; } if (reach_end && (flags & BUTTON_LONGPRESS)) BUTTON_InterruptLongPress(); if (Model.trims[i].value[0] == 0) { SOUND_SetFrequency(3951, volume); SOUND_StartWithoutVibrating(TRIM_MUSIC_DURATION, NULL); } else if (CLOCK_getms()- last_trim_music_time > TRIM_MUSIC_DURATION + 50) { // Do not beep too frequently last_trim_music_time = CLOCK_getms(); tmp = (*value >= 0) ? *value : -*value; if (step_size >=9 || step_size <= -9) SOUND_SetFrequency(START_TONE + tmp * 10, volume); // start from "c2" tone, frequence = 1000 else { // for small step change: generate 2 different tone for closing to/away from mid-point if (*value < 0) step_size = -step_size; u16 tone = START_TONE + 300; if (step_size < 0) tone = START_TONE; SOUND_SetFrequency(tone, volume); //printf("tone: %d\n\n", tone); } SOUND_StartWithoutVibrating(TRIM_MUSIC_DURATION, NULL); } } } return 1; }