static int _adjust_src_for_telemetry(int src, int dir) { if (src > NUM_RTC + NUM_TIMERS && src <= NUM_RTC + NUM_TIMERS + NUM_TELEM) { if (PROTOCOL_GetTelemetryState() != PROTO_TELEM_ON) { //We chose a telemetry item, but there is no telemetry src = (dir > 0) ? NUM_RTC + NUM_TIMERS + NUM_TELEM + 1 : NUM_RTC + NUM_TIMERS; } else { int max = TELEMETRY_GetNumTelemSrc(); if (src > NUM_RTC + NUM_TIMERS + max) { src = (dir > 0) ? NUM_RTC + NUM_TIMERS + NUM_TELEM + 1 : NUM_RTC + NUM_TIMERS + max; } } } return src; }
static const char *telem_name_cb(guiObject_t *obj, int dir, void *data) { (void)obj; int val = (long)data; struct TelemetryAlarm *alarm = &Model.alarms[val]; int telem_src = alarm->src; int last = TELEMETRY_GetNumTelemSrc(); u8 changed; //skip over (don't allow selection of) telemetry src's with max=0 (eg. JETCAT_STATUS, JETCAT_OFFCOND) while (1) { telem_src = GUI_TextSelectHelper(telem_src, 0, last, dir, 1, 1, &changed); if (telem_src == 0 || TELEMETRY_GetMaxValue(telem_src)) break; if (telem_src == last) dir = -1; } alarm->src = telem_src; if (changed) { guiObject_t *valObj = _get_obj(val, 2); if (valObj) GUI_Redraw(valObj); } return TELEMETRY_ShortName(tempstring, alarm->src); }