void applyDefaultLedStripConfig(ledConfig_t *ledConfigs) { memset(ledConfigs, 0, MAX_LED_STRIP_LENGTH * sizeof(ledConfig_t)); memcpy(ledConfigs, &defaultLedStripConfig, sizeof(defaultLedStripConfig)); reevalulateLedConfig(); }
void ledStripEnable(void) { reevalulateLedConfig(); ledStripInitialised = true; ws2811LedStripInit(); }
void ledStripInit(ledConfig_t *ledConfigsToUse, hsvColor_t *colorsToUse, failsafe_t* failsafeToUse) { ledConfigs = ledConfigsToUse; colors = colorsToUse; failsafe = failsafeToUse; reevalulateLedConfig(); ledStripInitialised = true; }
bool parseLedStripConfig(uint8_t ledIndex, const char *config) { char chunk[CHUNK_BUFFER_SIZE]; uint8_t chunkIndex; uint8_t val; uint8_t parseState = X_COORDINATE; bool ok = true; if (ledIndex >= MAX_LED_STRIP_LENGTH) { return !ok; } ledConfig_t *ledConfig = &ledConfigs[ledIndex]; memset(ledConfig, 0, sizeof(ledConfig_t)); while (ok) { char chunkSeparator = chunkSeparators[parseState]; memset(&chunk, 0, sizeof(chunk)); chunkIndex = 0; while (*config && chunkIndex < CHUNK_BUFFER_SIZE && *config != chunkSeparator) { chunk[chunkIndex++] = *config++; } if (*config++ != chunkSeparator) { ok = false; break; } switch((parseState_e)parseState) { case X_COORDINATE: val = atoi(chunk); ledConfig->xy |= CALCULATE_LED_X(val); break; case Y_COORDINATE: val = atoi(chunk); ledConfig->xy |= CALCULATE_LED_Y(val); break; case DIRECTIONS: for (chunkIndex = 0; chunk[chunkIndex] && chunkIndex < CHUNK_BUFFER_SIZE; chunkIndex++) { for (uint8_t mappingIndex = 0; mappingIndex < DIRECTION_COUNT; mappingIndex++) { if (directionCodes[mappingIndex] == chunk[chunkIndex]) { ledConfig->flags |= directionMappings[mappingIndex]; break; } } } break; case FUNCTIONS: for (chunkIndex = 0; chunk[chunkIndex] && chunkIndex < CHUNK_BUFFER_SIZE; chunkIndex++) { for (uint8_t mappingIndex = 0; mappingIndex < FUNCTION_COUNT; mappingIndex++) { if (functionCodes[mappingIndex] == chunk[chunkIndex]) { ledConfig->flags |= functionMappings[mappingIndex]; break; } } } break; case RING_COLORS: if (atoi(chunk) < CONFIGURABLE_COLOR_COUNT) { ledConfig->color = atoi(chunk); } else { ledConfig->color = 0; } break; default : break; } parseState++; if (parseState >= PARSE_STATE_COUNT) { break; } } if (!ok) { memset(ledConfig, 0, sizeof(ledConfig_t)); } reevalulateLedConfig(); return ok; }