static void resetConf(void) { createDefaultConfig(&masterConfig); setProfile(0); #ifdef LED_STRIP reevaluateLedConfig(); #endif }
void resetConfigs(void) { pgResetAll(); #if defined(USE_TARGET_CONFIG) targetConfiguration(); #endif #ifndef USE_OSD_SLAVE setPidProfile(0); setControlRateProfile(0); #endif #ifdef USE_LED_STRIP reevaluateLedConfig(); #endif }
bool parseLedStripConfig(int ledIndex, const char *config) { if (ledIndex >= LED_MAX_STRIP_LENGTH) return false; enum parseState_e { X_COORDINATE, Y_COORDINATE, DIRECTIONS, FUNCTIONS, RING_COLORS, PARSE_STATE_COUNT }; static const char chunkSeparators[PARSE_STATE_COUNT] = {',', ':', ':',':', '\0'}; ledConfig_t *ledConfig = &masterConfig.ledConfigs[ledIndex]; memset(ledConfig, 0, sizeof(ledConfig_t)); int x = 0, y = 0, color = 0; // initialize to prevent warnings int baseFunction = 0; int overlay_flags = 0; int direction_flags = 0; for (enum parseState_e parseState = 0; parseState < PARSE_STATE_COUNT; parseState++) { char chunk[CHUNK_BUFFER_SIZE]; { char chunkSeparator = chunkSeparators[parseState]; int chunkIndex = 0; while (*config && *config != chunkSeparator && chunkIndex < (CHUNK_BUFFER_SIZE - 1)) { chunk[chunkIndex++] = *config++; } chunk[chunkIndex++] = 0; // zero-terminate chunk if (*config != chunkSeparator) { return false; } config++; // skip separator } switch (parseState) { case X_COORDINATE: x = atoi(chunk); break; case Y_COORDINATE: y = atoi(chunk); break; case DIRECTIONS: for (char *ch = chunk; *ch; ch++) { for (ledDirectionId_e dir = 0; dir < LED_DIRECTION_COUNT; dir++) { if (directionCodes[dir] == *ch) { direction_flags |= LED_FLAG_DIRECTION(dir); break; } } } break; case FUNCTIONS: for (char *ch = chunk; *ch; ch++) { for (ledBaseFunctionId_e fn = 0; fn < LED_BASEFUNCTION_COUNT; fn++) { if (baseFunctionCodes[fn] == *ch) { baseFunction = fn; break; } } for (ledOverlayId_e ol = 0; ol < LED_OVERLAY_COUNT; ol++) { if (overlayCodes[ol] == *ch) { overlay_flags |= LED_FLAG_OVERLAY(ol); break; } } } break; case RING_COLORS: color = atoi(chunk); if (color >= LED_CONFIGURABLE_COLOR_COUNT) color = 0; break; case PARSE_STATE_COUNT:; // prevent warning } } *ledConfig = DEFINE_LED(x, y, color, direction_flags, baseFunction, overlay_flags, 0); reevaluateLedConfig(); return true; }