void PAGE_DrExpInit(int page) { (void)page; PAGE_SetActionCB(_action_cb); PAGE_SetModal(0); PAGE_RemoveAllObjects(); memset(mp, 0, sizeof(*mp)); int count = get_mixers(); int expected = INPUT_NumSwitchPos(mapped_std_channels.switches[SWITCHFUNC_DREXP_AIL+drexp_type]); if (count != expected) { GUI_CreateLabelBox(&gui->u.msg, 0, 10, 0, ITEM_HEIGHT, &DEFAULT_FONT, NULL, NULL, "Invalid model ini!");// must be invalid model ini return; } GUI_CreateTextSelectPlate(&gui->u.type, 0, 0, 60, ITEM_HEIGHT, &DEFAULT_FONT, NULL, set_type_cb, (void *)NULL); GUI_CreateScrollable(&gui->scrollable, 0, ITEM_SPACE, 76, LCD_HEIGHT - ITEM_SPACE, 2 *ITEM_SPACE, count, row_cb, NULL, NULL, NULL); u16 ymax = CHAN_MAX_VALUE/100 * MAX_SCALAR; s16 ymin = -ymax; GUI_CreateXYGraph(&gui->graph, 77, 2, 50, RIGHT_VIEW_HEIGHT, CHAN_MIN_VALUE, ymin, CHAN_MAX_VALUE, ymax, 0, 0, show_curve_cb, curpos_cb, NULL, NULL); GUI_Select1stSelectableObj(); }
void PAGE_SwashInit(int page) { (void)page; PAGE_SetActionCB(_action_cb); PAGE_SetModal(0); PAGE_RemoveAllObjects(); get_swash(); u8 w = 60; u8 x = 63; PAGE_ShowHeader(_tr("SwashType")); GUI_CreateTextSelectPlate(&gui->type, x-3, 0, w + 8, LINE_HEIGHT - 1, &DEFAULT_FONT, NULL, swash_val_cb, NULL); // FIXME: need a special value for header button/textsels u8 row = LINE_SPACE; GUI_CreateLabelBox(&gui->lbl[0], 0, row, 0, LINE_HEIGHT, &DEFAULT_FONT, NULL, NULL, _tr("ELE Mix")); GUI_CreateTextSelectPlate(&gui->mix[0], x, row, w, LINE_HEIGHT, &DEFAULT_FONT, NULL, swashmix_val_cb, (void *)1); row += LINE_SPACE; GUI_CreateLabelBox(&gui->lbl[1], 0, row, 0, LINE_HEIGHT, &DEFAULT_FONT, NULL, NULL, _tr("AIL Mix")); GUI_CreateTextSelectPlate(&gui->mix[1], x, row, w, LINE_HEIGHT, &DEFAULT_FONT, NULL, swashmix_val_cb, (void *)0); row += LINE_SPACE; GUI_CreateLabelBox(&gui->lbl[2], 0, row, 0, LINE_HEIGHT, &DEFAULT_FONT, NULL, NULL, _tr("PIT Mix")); GUI_CreateTextSelectPlate(&gui->mix[2], x, row, w, LINE_HEIGHT, &DEFAULT_FONT, NULL, swashmix_val_cb, (void *)2); update_swashmixes(); GUI_Select1stSelectableObj(); }
void PAGE_ToggleEditInit(int page) { tp->tglidx = page; memcpy(tp->tglicons, Model.pagecfg2.elem[tp->tglidx].extra, sizeof(tp->tglicons)); PAGE_SetActionCB(_action_cb); show_iconsel_page(0); }
static void _show_title(int page) { (void)page; mp->entries_per_page = 2; mp->max_scroll = Model.num_channels + NUM_VIRT_CHANNELS > mp->entries_per_page ? Model.num_channels + NUM_VIRT_CHANNELS - mp->entries_per_page : Model.num_channels + NUM_VIRT_CHANNELS; PAGE_SetActionCB(action_cb); mp->top_channel = top_channel; }
static void _show_page() { PAGE_ShowHeader(_tr("Timers")); // using the same name as related menu item to reduce language strings PAGE_SetActionCB(_action_cb); GUI_CreateScrollable(&gui->scrollable, 0, ITEM_HEIGHT + 1, LCD_WIDTH, LCD_HEIGHT - ITEM_HEIGHT -1, LCD_HEIGHT - ITEM_HEIGHT, NUM_TIMERS, row_cb, getobj_cb, NULL, NULL); GUI_SetSelected(GUI_ShowScrollableRowOffset(&gui->scrollable, current_selected)); }
static void calibrate_sticks(void) { // bug fix: should turn of safety dialog during calibrating, or it might fail when stick is not calibrated and safety setting is on PAGE_DisableSafetyDialog(1); PROTOCOL_DeInit(); PAGE_SetModal(1); PAGE_RemoveAllObjects(); PAGE_SetActionCB(_action_cb_calibrate); snprintf(tempstring, sizeof(tempstring), "%s", _tr("Center all \nsticks and knobs\nthen press ENT")); GUI_CreateLabelBox(&guic->msg, 1, 10, LCD_WIDTH -1, LCD_HEIGHT - 10, LCD_HEIGHT > 70? &NARROW_FONT:&DEFAULT_FONT, NULL, NULL, tempstring); memcpy(cp->calibration, Transmitter.calibration, sizeof(cp->calibration)); while(1) { CLOCK_ResetWatchdog(); if(PWR_CheckPowerSwitch()) PWR_Shutdown(); if(priority_ready & (1 << MEDIUM_PRIORITY)) { BUTTON_Handler(); priority_ready &= ~(1 << MEDIUM_PRIORITY); } if(priority_ready & (1 << LOW_PRIORITY)) { //Only sample every 100msec GUI_RefreshScreen(); priority_ready = 0; } for (u8 i = 0; i < INP_HAS_CALIBRATION; i++) { s32 value = CHAN_ReadRawInput(i + 1); if (value > Transmitter.calibration[i].max) Transmitter.calibration[i].max = value; else if (value < Transmitter.calibration[i].min) Transmitter.calibration[i].min = value; } if (calibrate_state == CALI_SUCCESSEXIT || calibrate_state == CALI_EXIT) break; } if (calibrate_state == CALI_EXIT) memcpy(Transmitter.calibration, cp->calibration, sizeof(cp->calibration)); PAGE_SetActionCB(NULL); PROTOCOL_Init(0); PAGE_TxConfigureInit(-1); // should be -1 so that devo10 can get back to previous item selection PAGE_DisableSafetyDialog(0); }
void PAGE_ChantestInit(int page) { (void)page; PAGE_SetActionCB(_action_cb); PAGE_RemoveAllObjects(); PAGE_ShowHeader(cp->type == MONITOR_RAWINPUT ? _tr("Stick input") : _tr("Mixer output")); if (cp->type != MONITOR_RAWINPUT ) cp->type = MONITOR_MIXEROUTPUT;// cp->type may not be initialized yet, so do it here _show_bar_page(0); }
static void _draw_page(u8 enable) { PAGE_RemoveAllObjects(); PAGE_ShowHeader(_tr("USB")); PAGE_SetActionCB(_action_cb); snprintf(tempstring, sizeof(tempstring), "%s %s", _tr("Press ENT to turn \nUSB drive"), enable == 0 ? _tr("On") : _tr("Off")); GUI_CreateLabelBox(&gui->label, LABEL_X, LABEL_Y, LABEL_WIDTH, LABEL_HEIGHT, &DEFAULT_FONT, NULL, NULL, tempstring); }
void PAGE_AboutInit(int page) { (void)page; PAGE_RemoveAllObjects(); PAGE_ShowHeader(PAGE_GetName(PAGEID_ABOUT)); PAGE_SetActionCB(_action_cb); strcpy(up->tmpstr, (const char *) _tr("Deviation FW version:")); GUI_CreateLabelBox(&gui->label[0], 0, 15, LCD_WIDTH, ITEM_HEIGHT, &DEFAULT_FONT, NULL, NULL, "www.deviationtx.com"); GUI_CreateLabelBox(&gui->label[1], 0, 30, LCD_WIDTH, ITEM_HEIGHT, &DEFAULT_FONT, NULL, NULL, up->tmpstr); GUI_CreateLabelBox(&gui->label[2], 0, 45, LCD_WIDTH, ITEM_HEIGHT, &MICRO_FONT, NULL, NULL, _tr_noop(DeviationVersion)); }
static void _show_buttons(int loadsave) { (void)show_loadsave_cb; load_save = loadsave; PAGE_SetActionCB(_action_cb); if (loadsave == LOAD_TEMPLATE || loadsave == LOAD_MODEL || loadsave == LOAD_ICON || loadsave == LOAD_LAYOUT) PAGE_ShowHeader(_tr("Press ENT to load")); else if (loadsave == SAVE_MODEL) PAGE_ShowHeader(_tr("Press ENT to copy to")); //u8 w = 40; //GUI_CreateButtonPlateText(LCD_WIDTH -w -5, 0, w, ITEM_HEIGHT, &DEFAULT_FONT, show_loadsave_cb, 0x0000, okcancel_cb, (void *)(loadsave+1L)); }
void PAGE_SwitchAssignInit(int page) { (void)page; PAGE_SetActionCB(_action_cb); PAGE_SetModal(0); PAGE_RemoveAllObjects(); refresh_switches(); PAGE_ShowHeader(_tr("Press ENT to change")); GUI_CreateScrollable(&gui->scrollable, 0, ITEM_HEIGHT + 1, LCD_WIDTH, LCD_HEIGHT - ITEM_HEIGHT -1, ITEM_SPACE, SWITCHFUNC_LAST, row_cb, getobj_cb, NULL, NULL); GUI_SetSelected(GUI_ShowScrollableRowOffset(&gui->scrollable, 0)); }
void PAGE_MainLayoutInit(int page) { (void)page; #if HAS_LAYOUT_EDITOR PAGE_ShowHeader(_tr_noop("Layout: Long-Press ENT")); PAGE_SetActionCB(_action_cb); #else PAGE_ShowHeader(PAGE_GetName(PAGEID_MAINCFG)); #endif memset(gui, 0, sizeof(*gui)); memset(lp, 0, sizeof(*lp)); show_config(); }
void PAGE_TxConfigureInit(int page) { (void)page; cp->enable = CALIB_NONE; PAGE_SetActionCB(_action_cb); PAGE_SetModal(0); PAGE_RemoveAllObjects(); PAGE_ShowHeader(_tr("Configure")); cp->total_items = 0; GUI_CreateScrollable(&gui->scrollable, 0, HEADER_HEIGHT, LCD_WIDTH, LCD_HEIGHT - HEADER_HEIGHT, LINE_SPACE, ITEM_LAST, row_cb, getobj_cb, size_cb, NULL); GUI_SetSelected(GUI_ShowScrollableRowOffset(&gui->scrollable, current_selected)); }
static void _show_titlerow() { (void)okcancel_cb; PAGE_SetActionCB(action_cb); mp->entries_per_page = 4; memset(gui, 0, sizeof(*gui)); labelDesc.style = LABEL_UNDERLINE; u8 w = 50; GUI_CreateLabelBox(&gui->title, 0, 0 , LCD_WIDTH, HEADER_HEIGHT, &labelDesc, MIXPAGE_ChanNameProtoCB, NULL, (void *)(long)mp->channel); labelDesc.style = LABEL_CENTER; GUI_CreateButtonPlateText(&gui->revert, LCD_WIDTH - w, 0, w, HEADER_WIDGET_HEIGHT, &labelDesc, NULL, 0, revert_cb, (void *)_tr("Revert")); }
void PAGE_TelemtestInit(int page) { (void)okcancel_cb; (void)page; PAGE_SetModal(0); PAGE_SetActionCB(_action_cb); if (telem_state_check() == 0) { current_page = telemetry_off; GUI_CreateLabelBox(&gui->msg, 20, 10, 0, 0, &DEFAULT_FONT, NULL, NULL, tempstring); return; } _show_page(TELEMETRY_Type() == TELEM_DEVO ? &devo_page[current_page] : &dsm_page[current_page]); }
void PAGE_SplashInit(int page) { (void)page; if(Transmitter.splash_delay == 0) { PAGE_ChangeByID(PAGEID_MAIN, 0); return; } PAGE_RemoveAllObjects(); PAGE_SetActionCB(_action_cb); GUI_CreateLabelBox(&gui->splash_text, 3*ITEM_SPACE, 4*LINE_HEIGHT, 0, 0, &MODELNAME_FONT, NULL, NULL, _tr("Deviation")); GUI_CreateLabelBox(&gui->version, 0, 7*LINE_HEIGHT, 0, 0, &DEFAULT_FONT, NULL, NULL, DeviationVersion); }
static void _show_page() { PAGE_SetActionCB(_action_cb); //PAGE_ShowHeader(_tr("Trim")); // no title for devo10 PAGE_ShowHeader(_tr("Input")); GUI_CreateLabelBox(&gui->steplbl, 40, 0, 30, ITEM_HEIGHT, &DEFAULT_FONT, NULL, NULL, _tr("Step")); // no enought space in Devo10, so just display trim + in the 1st page //GUI_CreateLabelBox(w + 40, 0, 0, ITEM_HEIGHT, &DEFAULT_FONT, NULL, NULL, _tr("Trim -")); GUI_CreateLabelBox(&gui->trimposlbl, 80, 0, 30, ITEM_HEIGHT, &DEFAULT_FONT, NULL, NULL, _tr("Trim +")); GUI_CreateScrollable(&gui->scrollable, 0, ITEM_HEIGHT + 1, LCD_WIDTH, LCD_HEIGHT - ITEM_HEIGHT -1, ITEM_SPACE, NUM_TRIMS, row_cb, getobj_cb, NULL, NULL); GUI_SetSelected(GUI_ShowScrollableRowOffset(&gui->scrollable, current_selected)); }
void PAGE_TelemtestInit(int page) { (void)page; PAGE_SetModal(0); PAGE_SetActionCB(_action_cb); if (telem_state_check() == 0) { current_page = telemetry_off; GUI_CreateLabelBox(&gui->msg, 20, 10, 0, 0, &DEFAULT_FONT, NULL, NULL, tempstring); return; } if (current_page > telemetry_gps) current_page = telemetry_basic; _show_page(); }
void PAGE_SplashInit(int page) { (void)page; if(Transmitter.splash_delay == 0) { PAGE_ChangeByID(PAGEID_MAIN, 0); return; } PAGE_SetActionCB(_action_cb); u16 w, h; LCD_ImageDimensions(SPLASH_FILE, &w, &h); //GUI_CreateImageOffset(&gui->splash_image, 15, 10, w-offset, h-5, offset, 0, SPLASH_FILE, NULL, NULL); if( w < LCD_WIDTH - 1 && h < LCD_HEIGHT - LINE_HEIGHT - 3) GUI_CreateImageOffset(&gui->splash_image, (LCD_WIDTH-w)/2, (LCD_HEIGHT-h-LINE_HEIGHT)/2, w, h, 0, 0, SPLASH_FILE, NULL, NULL); GUI_CreateLabelBox(&gui->version, 0, LCD_HEIGHT - LINE_HEIGHT - 1 , LCD_WIDTH, LINE_HEIGHT, &TINY_FONT, NULL, NULL, DeviationVersion); }
void PAGE_EditCurvesInit(int page) { (void)page; struct Curve *curve = edit->curveptr; u8 type = CURVE_TYPE(curve); PAGE_SetActionCB(action_cb); edit->pointnum = 0; edit->reverse = MIXER_SRC_IS_INV(pagemem.u.mixer_page.cur_mixer->src); if ((type == CURVE_EXPO || type == CURVE_DEADBAND) && curve->points[0] == curve->points[1]) { edit->pointnum = -1; } edit->curve = *curve; GUI_CreateTextSelectPlate(&gui->name, NAME_X, 0, NAME_W, HEADER_HEIGHT, &TEXTSEL_FONT, NULL, set_curvename_cb, NULL); GUI_CreateButtonPlateText(&gui->save, SAVE_X, 0, SAVE_W, HEADER_WIDGET_HEIGHT, &BUTTON_FONT , NULL, okcancel_cb, (void *)_tr("Save")); // Draw a line if (UNDERLINE) GUI_CreateRect(&gui->rect, 0, HEADER_WIDGET_HEIGHT, LCD_WIDTH, 1, &DEFAULT_FONT); u8 space = LINE_SPACE; u8 y = space; if (type >= CURVE_3POINT) { GUI_CreateLabelBox(&gui->smoothlbl, LABEL_X, y, LABEL1_W, LINE_HEIGHT, &LABEL_FONT, NULL, NULL, _tr("Smooth")); GUI_CreateTextSelectPlate(&gui->smooth, TEXTSEL1_X, y, TEXTSEL1_W, LINE_HEIGHT, &TEXTSEL_FONT, NULL, set_smooth_cb, NULL); y += space; GUI_CreateLabelBox(&gui->pointlbl, LABEL_X, y , LABEL2_W, LINE_HEIGHT, &LABEL_FONT, NULL, NULL, _tr("Point")); GUI_CreateTextSelectPlate(&gui->point, TEXTSEL2_X, y, TEXTSEL2_W, LINE_HEIGHT, &TEXTSEL_FONT, NULL, set_pointnum_cb, NULL); } else if(type == CURVE_DEADBAND || type == CURVE_EXPO) { GUI_CreateLabelBox(&gui->pointlbl, LABEL_X, y , LABEL_W, LINE_HEIGHT, &LABEL_FONT, NULL, NULL, _tr("Pos/Neg")); y += space; GUI_CreateTextSelectPlate(&gui->point, LABEL_X, y, LABEL_W, LINE_HEIGHT, &TEXTSEL_FONT, NULL, set_expopoint_cb, NULL); } y += space; GUI_CreateLabelBox(&gui->valuelbl, LABEL_X, y , LABEL_W, LINE_HEIGHT, &LABEL_FONT, NULL, NULL, _tr("Value")); y += VALUE_Y_OFFSET; GUI_CreateTextSelectPlate(&gui->value, VALUE_X, y, LABEL_W, LINE_HEIGHT, &TEXTSEL_FONT, NULL, set_value_cb, NULL); GUI_CreateXYGraph(&gui->graph, GRAPH_X, GRAPH_Y, GRAPH_W, GRAPH_H, CHAN_MIN_VALUE, CHAN_MIN_VALUE, CHAN_MAX_VALUE, CHAN_MAX_VALUE, 0, 0, //CHAN_MAX_VALUE / 4, CHAN_MAX_VALUE / 4, show_curve_cb, NULL, touch_cb, &edit->curve); GUI_SetSelected((guiObject_t *)&gui->point); }
void PAGE_LayoutEditInit(int page) { (void)page; PAGE_SetActionCB(_layaction_cb); lp->selected_x = 0; lp->selected_y = 0; for (int i = 0 ; i < 5; i++) gui->desc[i] = (struct LabelDesc){ .font = MICRO_FONT.font, .font_color = 0xffff, .fill_color = 0x0000, .outline_color = 0xffff, .style = LABEL_SQUAREBOX, }; gui->desc[1].style = LABEL_BRACKET; //Special case for trims struct LabelDesc micro = MICRO_FONT; struct LabelDesc rect = MICRO_FONT; micro.style = LABEL_LEFT; rect.fill_color = 0x0000; rect.outline_color = 0x0000; GUI_CreateRect(&gui->editelem, 41, 1, 9, 5, &rect); gui->editelem.CallBack = move_cb; GUI_CreateLabel(&gui->xlbl, 0, 1, NULL, micro, "X:"); GUI_CreateLabelBox(&gui->x, 8, 1, 13, 6, µ, pos_cb, NULL, (void *) 0L); GUI_CreateLabel(&gui->ylbl, 22, 1, NULL, micro, "Y:"); GUI_CreateLabelBox(&gui->y, 30, 1, 9, 6, µ, pos_cb, NULL, (void *) 1L); //gui->y must be the last element! GUI_SelectionNotify(notify_cb); draw_elements(); if(OBJ_IS_USED(&gui->elem[0])) GUI_SetSelected((guiObject_t *)&gui->elem[0]); } static void xpos_cb(guiObject_t *obj, int dir, void *data) { (void)obj; (void)data; if (lp->selected_for_move >= 0) { int x = GUI_TextSelectHelper(lp->selected_x, 0, LCD_WIDTH-lp->selected_w, dir, 1, 10, NULL); if (x != lp->selected_x) { lp->selected_x = x; move_elem(); } } }
void PAGE_ChantestInit(int page) { (void)channum_cb; // remove compile warning as this method is not used here (void)okcancel_cb; PAGE_SetModal(0); PAGE_SetActionCB(_action_cb); PAGE_RemoveAllObjects(); cp->return_page = NULL; if (page > 0) cp->return_val = page; if(cp->type == MONITOR_RAWINPUT ) _show_bar_page(NUM_INPUTS); else { cp->type = MONITOR_CHANNELOUTPUT;// cp->type may not be initialized yet, so do it here _show_bar_page(Model.num_channels); } }
static void _show_titlerow() { PAGE_SetActionCB(action_cb); mp->entries_per_page = 2; memset(gui, 0, sizeof(*gui)); labelDesc.style = LABEL_UNDERLINE; labelDesc.font_color = labelDesc.fill_color = labelDesc.outline_color = 0xffff; GUI_CreateLabelBox(&gui->chan, 0, 0 , LCD_WIDTH, ITEM_HEIGHT, &labelDesc, MIXPAGE_ChanNameProtoCB, NULL, (void *)((long)mp->cur_mixer->dest)); u8 x =40; u8 w = 50; labelDesc.style = LABEL_CENTER; GUI_CreateTextSelectPlate(&gui->tmpl, x, 0, w, ITEM_HEIGHT, &labelDesc, NULL, templatetype_cb, (void *)((long)mp->channel)); w = 38; GUI_CreateButtonPlateText(&gui->save, LCD_WIDTH - w, 0, w, ITEM_HEIGHT, &labelDesc, NULL, 0, okcancel_cb, (void *)_tr("Save")); }
static void _edit_cb(guiObject_t *obj, const void *data) { (void)obj; PAGE_SetActionCB(_sub_action_cb); struct Trim *trim = MIXER_GetAllTrims(); PAGE_SetModal(1); tp->index = (long)data; tp->trim = trim[tp->index]; PAGE_RemoveAllObjects(); PAGE_ShowHeader(""); // to draw a line only u8 w = 50; GUI_CreateButtonPlateText(&guit->save, LCD_WIDTH - w -1, 0, w, ITEM_HEIGHT, &DEFAULT_FONT, NULL, 0x0000, okcancel_cb, (void *)_tr("Save")); GUI_CreateScrollable(&gui->scrollable, 0, ITEM_HEIGHT + 1, LCD_WIDTH, LCD_HEIGHT - ITEM_HEIGHT -1, ITEM_SPACE, ITEM_LAST, row2_cb, getobj2_cb, NULL, NULL); GUI_SetSelected(GUI_ShowScrollableRowOffset(&gui->scrollable, 0)); }
/* * Main page * KEY_UP: Press once to start timers, press again to stop timers * KEY_DOWN: Press to rest timers * KEY_ENT: enter the main menu page */ void PAGE_MainInit(int page) { (void)page; (void)bar_cb; TGLICO_LoadFonts(); memset(mp, 0, sizeof(struct main_page));// Bug fix: must initialize this structure to avoid unpredictable issues in the PAGE_MainEvent memset(gui, 0, sizeof(struct mainpage_obj)); PAGE_SetModal(0); PAGE_SetActionCB(_action_cb); next_scan = CLOCK_getms()+BATTERY_SCAN_MSEC; GUI_CreateLabelBox(&gui->name, MODEL_NAME_X, MODEL_NAME_Y, //64, 12, LCD_WIDTH, LINE_HEIGHT, &MODELNAME_FONT, NULL, NULL, Model.name); show_elements(); //Battery mp->battery = PWR_ReadVoltage(); }
/* * Main page * KEY_UP: Press once to start timers, press again to stop timers * KEY_DOWN: Press to rest timers * KEY_ENT: enter the main menu page */ void PAGE_MainInit(int page) { (void)page; (void)bar_cb; memset(mp, 0, sizeof(struct main_page));// Bug fix: must initialize this structure to avoid unpredictable issues in the PAGE_MainEvent memset(gui, 0, sizeof(struct mainpage_obj)); PAGE_SetModal(0); PAGE_SetActionCB(_action_cb); PAGE_RemoveAllObjects(); next_scan = CLOCK_getms()+BATTERY_SCAN_MSEC; GUI_CreateLabelBox(&gui->name, 0, 1, //64, 12, 0, 0, &SMALL_FONT, NULL, NULL, Model.name); show_elements(); //Battery mp->battery = PWR_ReadVoltage(); }
void PAGE_CalibInit(int page) { (void)page; PROTOCOL_DeInit(); PAGE_SetActionCB(_action_cb_calibrate); snprintf(tempstring, sizeof(tempstring), "%s", _tr("Center all \nsticks and knobs\nthen press ENT")); GUI_CreateLabelBox(&guic->msg, 1, CALIB_Y, 0, 0, LCD_HEIGHT > 70? &NARROW_FONT:&DEFAULT_FONT, NULL, NULL, tempstring); memcpy(cp->calibration, Transmitter.calibration, sizeof(cp->calibration)); while(1) { CLOCK_ResetWatchdog(); if(PWR_CheckPowerSwitch()) PWR_Shutdown(); if(priority_ready & (1 << MEDIUM_PRIORITY)) { BUTTON_Handler(); priority_ready &= ~(1 << MEDIUM_PRIORITY); } if(priority_ready & (1 << LOW_PRIORITY)) { //Only sample every 100msec GUI_RefreshScreen(); priority_ready = 0; } for (u8 i = 0; i < INP_HAS_CALIBRATION; i++) { s32 value = CHAN_ReadRawInput(i + 1); if (value > Transmitter.calibration[i].max) Transmitter.calibration[i].max = value; else if (value < Transmitter.calibration[i].min) Transmitter.calibration[i].min = value; } if (calibrate_state == CALI_SUCCESSEXIT || calibrate_state == CALI_EXIT) break; } if (calibrate_state == CALI_EXIT) memcpy(Transmitter.calibration, cp->calibration, sizeof(cp->calibration)); PAGE_Pop(); // PAGE_SetActionCB(NULL); // PROTOCOL_Init(0); // PAGE_SetModal(0); // //cp->enable = CALIB_NONE; // PAGE_ChangeByID(PAGEID_TXCFG, 0); }
void PAGE_GyroSenseInit(int page) { (void)page; PAGE_SetActionCB(_action_cb); PAGE_SetModal(0); PAGE_RemoveAllObjects(); memset(mp, 0, sizeof(*mp)); int expected = INPUT_NumSwitchPos(mapped_std_channels.switches[SWITCHFUNC_GYROSENSE]); int count = STDMIX_GetMixers(mp->mixer_ptr, mapped_std_channels.aux2, GYROMIXER_COUNT); if (! count) { count = STDMIX_GetMixers(mp->mixer_ptr, mapped_std_channels.gear, GYROMIXER_COUNT); } if (count != expected) { GUI_CreateLabelBox(&gui->msg, 0, 10, 0, LINE_HEIGHT, &DEFAULT_FONT, NULL, NULL, "Invalid model ini!");// must be invalid model ini return; } gyro_output = mp->mixer_ptr[0]->dest; convert_output_to_percentile(); PAGE_ShowHeader(_tr("Gyro sense")); u8 w = 65; u8 x = 63; u8 row = LINE_SPACE; GUI_CreateLabelBox(&gui->chanlbl, 0, row, 0, LINE_HEIGHT, &DEFAULT_FONT, NULL, NULL, _tr("Channel")); GUI_CreateTextSelectPlate(&gui->chan, x, row, w, LINE_HEIGHT, &DEFAULT_FONT, NULL, gyro_output_cb, NULL); row += LINE_SPACE; w = 40; GUI_CreateLabelBox(&gui->gyrolbl[0], 0, row, 0, LINE_HEIGHT, &DEFAULT_FONT, label_cb, NULL, (void *)(long)0); GUI_CreateTextSelectPlate(&gui->gyro[0], x, row, w, LINE_HEIGHT, &DEFAULT_FONT, NULL, gyro_val_cb, (void *)0); row += LINE_SPACE; GUI_CreateLabelBox(&gui->gyrolbl[1], 0, row, 0, LINE_HEIGHT, &DEFAULT_FONT, label_cb, NULL, (void *)(long)1); GUI_CreateTextSelectPlate(&gui->gyro[1], x, row, w, LINE_HEIGHT, &DEFAULT_FONT, NULL, gyro_val_cb, (void *)1); if(INPUT_NumSwitchPos(mapped_std_channels.switches[SWITCHFUNC_GYROSENSE]) == 3) { row += LINE_SPACE; GUI_CreateLabelBox(&gui->gyrolbl[2], 0, row, 0, LINE_HEIGHT, &DEFAULT_FONT, label_cb, NULL, (void *)(long)2); GUI_CreateTextSelectPlate(&gui->gyro[2], x, row, w, LINE_HEIGHT, &DEFAULT_FONT, NULL, gyro_val_cb, (void *)2); } GUI_Select1stSelectableObj(); }
void PAGE_TravelAdjInit(int page) { (void)page; //if (page < 0 && current_selected > 0) // enter this page from childen page , so we need to get its previous mp->current_selected item // page = current_selected; PAGE_SetActionCB(_action_cb); PAGE_SetModal(0); PAGE_RemoveAllObjects(); PAGE_ShowHeader(("")); // draw a underline only u8 w = 35; u8 x = 50; GUI_CreateLabelBox(&gui->dnlbl, x+2, 0, w, LINE_HEIGHT, &DEFAULT_FONT, NULL, NULL, _tr("Down")); GUI_CreateLabelBox(&gui->uplbl, x + w +5, 0, w, LINE_HEIGHT, &DEFAULT_FONT, NULL, NULL, _tr("Up")); GUI_CreateScrollable(&gui->scrollable, 0, HEADER_HEIGHT, LCD_WIDTH, LCD_HEIGHT - HEADER_HEIGHT, LINE_SPACE, Model.num_channels, row_cb, getobj_cb, NULL, NULL); GUI_SetSelected(GUI_ShowScrollableRowOffset(&gui->scrollable, current_selected)); }
void PAGE_TelemconfigInit(int page) { (void)label_cb; if (page < 0) page = current_selected; PAGE_SetModal(0); PAGE_RemoveAllObjects(); PAGE_SetActionCB(_action_cb); if (telem_state_check() == 0) { GUI_CreateLabelBox(&gui->msg, 20, 10, 0, 0, &DEFAULT_FONT, NULL, NULL, tp.str); OBJ_SET_USED(&gui->value, 0); // A indication not allow to scroll up/down return; } PAGE_ShowHeader(_tr("Telemetry config")); // using the same name as related menu item to reduce language strings GUI_CreateScrollable(&gui->scrollable, 0, ITEM_HEIGHT + 1, LCD_WIDTH, LCD_HEIGHT - ITEM_HEIGHT -1, ITEM_SPACE, TELEM_NUM_ALARMS, row_cb, getobj_cb, NULL, NULL); GUI_SetSelected(GUI_ShowScrollableRowOffset(&gui->scrollable, current_selected)); }