const char *GetBoxSource(char *str, int src) { if (src) { #if HAS_RTC if (src <= NUM_RTC) return RTC_Name(str, src - 1); #endif if (src - NUM_RTC <= NUM_TIMERS) return TIMER_Name(str, src - NUM_RTC - 1); else if( src - NUM_RTC - NUM_TIMERS <= NUM_TELEM) return TELEMETRY_Name(str, src - NUM_RTC - NUM_TIMERS); } return INPUT_SourceName(str, src ? src - (NUM_TELEM + NUM_TIMERS + NUM_RTC) + NUM_INPUTS : 0); }
const char *DATALOG_Source(char *str, int idx) { #if HAS_RTC if (idx == DLOG_TIME) { strcpy(str, _tr("RTC Time")); } else #endif if (idx == DLOG_GPSTIME) { strcpy(str, _tr("GPS Time")); } else if (idx == DLOG_GPSLOC) { strcpy(str, _tr("GPS Coords")); } else if (idx == DLOG_GPSALT) { strcpy(str, _tr("GPS Alt.")); } else if (idx == DLOG_GPSSPEED) { strcpy(str, _tr("GPS Speed")); } else if (idx >= DLOG_INPUTS) { return INPUT_SourceName(str, idx - DLOG_INPUTS + 1); } else if (idx >= DLOG_TELEMETRY) { return TELEMETRY_Name(str, idx - DLOG_TELEMETRY + 1); } else { // idx >= DLOG_TIMERS return TIMER_Name(str, idx); } return str; }
static int layout_ini_handler(void* user, const char* section, const char* name, const char* value) { struct Model *m = (struct Model *)user; u16 i; int offset_x = 0, offset_y = 0; CLOCK_ResetWatchdog(); int idx; if (MATCH_START(name, GUI_QUICKPAGE)) { u8 idx = name[9] - '1'; if (idx >= NUM_QUICKPAGES) { printf("%s: Only %d quickpages are supported\n", section, NUM_QUICKPAGES); return 1; } int max = PAGE_GetNumPages(); for(i = 0; i < max; i++) { if(mapstrcasecmp(PAGE_GetName(i), value) == 0) { m->pagecfg2.quickpage[idx] = i; return 1; } } printf("%s: Unknown page '%s' for quickpage%d\n", section, value, idx+1); return 1; } #ifdef ENABLE_320x240_GUI static u8 seen_res = 0; enum { LOWRES = 1, HIRES, }; if (! MATCH_SECTION(SECTION_GUI)) { if(MATCH_SECTION("gui-320x240") && (! ELEM_USED(Model.pagecfg2.elem[0]) || seen_res != HIRES)) { seen_res = LOWRES; offset_x = (LCD_WIDTH - 320) / 2; offset_y = (LCD_HEIGHT - 240) / 2; } else return 1; } else { if (seen_res == LOWRES) { memset(&Model.pagecfg2.elem, 0, sizeof(Model.pagecfg2.elem)); } seen_res = HIRES; } #else if (! MATCH_SECTION(SECTION_GUI)) return 1; #endif for (idx = 0; idx < NUM_ELEMS; idx++) { if (! ELEM_USED(Model.pagecfg2.elem[idx])) break; } if (idx == NUM_ELEMS) { printf("No free element available (max = %d)\n", NUM_ELEMS); return 1; } int type; for (type = 0; type < ELEM_LAST; type++) if(mapstrcasecmp(name, GetElemName(type)) == 0) break; if (type == ELEM_LAST) return 1; int count = 5; s16 data[6] = {0}; const char *ptr = parse_partial_int_list(value, data, &count, S16); data[0] += offset_x; data[1] += offset_y; if (count > 3) { printf("Could not parse coordinates from %s=%s\n", name,value); return 1; } switch(type) { //case ELEM_MODEL: //x, y case ELEM_VTRIM: //x, y, src case ELEM_HTRIM: //x, y, src data[5] = data[2]; data[2] = 0; break; case ELEM_SMALLBOX: //x, y, src case ELEM_BIGBOX: //x. y. src { s16 src = -1; char str[20]; if (count != 3) return 1; #if HAS_RTC for(i = 0; i < NUM_RTC; i++) { if(mapstrcasecmp(ptr, RTC_Name(str, i)) == 0) { src = i + 1; break; } } #endif if (src == -1) { for(i = 0; i < NUM_TIMERS; i++) { if(mapstrcasecmp(ptr, TIMER_Name(str, i)) == 0) { src = i + 1 + NUM_RTC; break; } } } if (src == -1) { for(i = 0; i < NUM_TELEM; i++) { if(mapstrcasecmp(ptr, TELEMETRY_Name(str, i+1)) == 0) { src = i + 1 + NUM_RTC + NUM_TIMERS; break; } } } if (src == -1) { u8 newsrc = get_source(section, ptr); if(newsrc >= NUM_INPUTS) { src = newsrc - (NUM_INPUTS + 1 - (NUM_RTC + NUM_TIMERS + NUM_TELEM + 1)); } } if (src == -1) src = 0; data[5] = src; break; } case ELEM_BAR: //x, y, src { if (count != 3) return 1; u8 src = get_source(section, ptr); if (src < NUM_INPUTS) src = 0; data[5] = src - NUM_INPUTS; break; } case ELEM_TOGGLE: //x, y, tgl0, tgl1, tgl2, src { if(count) return 1; for (int j = 0; j <= NUM_SOURCES; j++) { char cmp[10]; if(mapstrcasecmp(INPUT_SourceNameAbbrevSwitchReal(cmp, j), ptr+1) == 0) { data[5] = j; break; } } break; } } create_element(&m->pagecfg2.elem[idx], type, data); return 1; }