mirror of
https://github.com/MrUnknownDE/OpenIris-ESPIDF.git
synced 2026-04-18 22:13:45 +02:00
Adding new Kconfig options and updating LEDManager code for conditional debug LED and external error mirroring
This commit is contained in:
@@ -67,7 +67,7 @@ CONFIG_MONITORING_LED_GAIN=11
|
||||
CONFIG_MONITORING_LED_SHUNT_MILLIOHM=22000
|
||||
CONFIG_MONITORING_LED_SAMPLES=10
|
||||
CONFIG_MONITORING_LED_INTERVAL_MS=500
|
||||
CONFIG_GENERAL_BOARD="facefocusvr_eye"
|
||||
CONFIG_GENERAL_BOARD="facefocusvr_eye_l"
|
||||
# CONFIG_GENERAL_ENABLE_WIRELESS is not set
|
||||
CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80=y
|
||||
# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_160 is not set
|
||||
@@ -76,4 +76,7 @@ CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=80
|
||||
CONFIG_ESP32S3_DEFAULT_CPU_FREQ_80=y
|
||||
# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_160 is not set
|
||||
# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240 is not set
|
||||
CONFIG_ESP32S3_DEFAULT_CPU_FREQ_MHZ=80
|
||||
CONFIG_ESP32S3_DEFAULT_CPU_FREQ_MHZ=80
|
||||
# CONFIG_LED_DEBUG_ENABLE is not set
|
||||
CONFIG_LED_EXTERNAL_AS_DEBUG=y
|
||||
CONFIG_GENERAL_ADVERTISED_NAME="FFVR Eye L"
|
||||
@@ -67,7 +67,7 @@ CONFIG_MONITORING_LED_GAIN=11
|
||||
CONFIG_MONITORING_LED_SHUNT_MILLIOHM=22000
|
||||
CONFIG_MONITORING_LED_SAMPLES=10
|
||||
CONFIG_MONITORING_LED_INTERVAL_MS=500
|
||||
CONFIG_GENERAL_BOARD="facefocusvr_eye"
|
||||
CONFIG_GENERAL_BOARD="facefocusvr_eye_r"
|
||||
# CONFIG_GENERAL_ENABLE_WIRELESS is not set
|
||||
CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80=y
|
||||
# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_160 is not set
|
||||
@@ -76,4 +76,7 @@ CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=80
|
||||
CONFIG_ESP32S3_DEFAULT_CPU_FREQ_80=y
|
||||
# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_160 is not set
|
||||
# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240 is not set
|
||||
CONFIG_ESP32S3_DEFAULT_CPU_FREQ_MHZ=80
|
||||
CONFIG_ESP32S3_DEFAULT_CPU_FREQ_MHZ=80
|
||||
# CONFIG_LED_DEBUG_ENABLE is not set
|
||||
CONFIG_LED_EXTERNAL_AS_DEBUG=y
|
||||
CONFIG_GENERAL_ADVERTISED_NAME="FFVR Eye R"
|
||||
@@ -76,4 +76,7 @@ CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=80
|
||||
CONFIG_ESP32S3_DEFAULT_CPU_FREQ_80=y
|
||||
# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_160 is not set
|
||||
# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240 is not set
|
||||
CONFIG_ESP32S3_DEFAULT_CPU_FREQ_MHZ=80
|
||||
CONFIG_ESP32S3_DEFAULT_CPU_FREQ_MHZ=80
|
||||
# CONFIG_LED_DEBUG_ENABLE is not set
|
||||
CONFIG_LED_EXTERNAL_AS_DEBUG=y
|
||||
CONFIG_GENERAL_ADVERTISED_NAME="FFVR Face"
|
||||
@@ -73,10 +73,13 @@ LEDManager::LEDManager(gpio_num_t pin, gpio_num_t illumninator_led_pin,
|
||||
void LEDManager::setup()
|
||||
{
|
||||
ESP_LOGI(LED_MANAGER_TAG, "Setting up status led.");
|
||||
#ifdef CONFIG_LED_DEBUG_ENABLE
|
||||
gpio_reset_pin(blink_led_pin);
|
||||
/* Set the GPIO as a push/pull output */
|
||||
gpio_set_direction(blink_led_pin, GPIO_MODE_OUTPUT);
|
||||
this->toggleLED(LED_OFF);
|
||||
#else
|
||||
ESP_LOGI(LED_MANAGER_TAG, "Debug LED disabled via Kconfig (LED_DEBUG_ENABLE=n)");
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_LED_EXTERNAL_CONTROL
|
||||
ESP_LOGI(LED_MANAGER_TAG, "Setting up illuminator led.");
|
||||
@@ -168,6 +171,31 @@ void LEDManager::updateState(const LEDStates_e newState)
|
||||
if (newState == this->currentState)
|
||||
return;
|
||||
|
||||
// Handle external LED mirroring transitions (store/restore duty)
|
||||
#if defined(CONFIG_LED_EXTERNAL_CONTROL) && defined(CONFIG_LED_EXTERNAL_AS_DEBUG)
|
||||
bool wasError = ledStateMap[this->currentState].isError;
|
||||
bool willBeError = ledStateMap[newState].isError;
|
||||
if (!wasError && willBeError)
|
||||
{
|
||||
// store current duty once
|
||||
if (!hasStoredExternalDuty)
|
||||
{
|
||||
storedExternalDuty = ledc_get_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0);
|
||||
hasStoredExternalDuty = true;
|
||||
}
|
||||
}
|
||||
else if (wasError && !willBeError)
|
||||
{
|
||||
// restore duty
|
||||
if (hasStoredExternalDuty)
|
||||
{
|
||||
ESP_ERROR_CHECK_WITHOUT_ABORT(ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0, storedExternalDuty));
|
||||
ESP_ERROR_CHECK_WITHOUT_ABORT(ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0));
|
||||
hasStoredExternalDuty = false;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
this->currentState = newState;
|
||||
this->currentPatternIndex = 0;
|
||||
this->finishedPattern = false;
|
||||
@@ -175,7 +203,20 @@ void LEDManager::updateState(const LEDStates_e newState)
|
||||
|
||||
void LEDManager::toggleLED(const bool state) const
|
||||
{
|
||||
#ifdef CONFIG_LED_DEBUG_ENABLE
|
||||
gpio_set_level(blink_led_pin, state);
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_LED_EXTERNAL_CONTROL) && defined(CONFIG_LED_EXTERNAL_AS_DEBUG)
|
||||
// Mirror only for error states
|
||||
if (ledStateMap.contains(this->currentState) && ledStateMap.at(this->currentState).isError)
|
||||
{
|
||||
// For pattern ON use 50%, OFF use 0%
|
||||
uint32_t duty = (state == LED_ON) ? ((50 * 255) / 100) : 0;
|
||||
ESP_ERROR_CHECK_WITHOUT_ABORT(ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0, duty));
|
||||
ESP_ERROR_CHECK_WITHOUT_ABORT(ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void LEDManager::setExternalLEDDutyCycle(uint8_t dutyPercent)
|
||||
|
||||
@@ -70,6 +70,11 @@ private:
|
||||
size_t currentPatternIndex = 0;
|
||||
size_t timeToDelayFor = 100;
|
||||
bool finishedPattern = false;
|
||||
|
||||
#if defined(CONFIG_LED_EXTERNAL_CONTROL) && defined(CONFIG_LED_EXTERNAL_AS_DEBUG)
|
||||
mutable bool hasStoredExternalDuty = false;
|
||||
mutable uint32_t storedExternalDuty = 0; // raw 0-255
|
||||
#endif
|
||||
};
|
||||
|
||||
void HandleLEDDisplayTask(void *pvParameter);
|
||||
|
||||
@@ -109,6 +109,14 @@ endmenu
|
||||
|
||||
menu "OpenIris: LED Configuration"
|
||||
|
||||
config LED_DEBUG_ENABLE
|
||||
bool "Enable debug/status LED"
|
||||
default y
|
||||
help
|
||||
When disabled the firmware will not drive the dedicated debug/status GPIO.
|
||||
Useful on boards without a discrete status LED. Error/state patterns can
|
||||
optionally be mirrored onto the external IR LED if LED_EXTERNAL_AS_DEBUG is set.
|
||||
|
||||
config LED_DEBUG_GPIO
|
||||
int "Debug LED GPIO number"
|
||||
range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX
|
||||
@@ -130,6 +138,17 @@ menu "OpenIris: LED Configuration"
|
||||
help
|
||||
Enable this if your board can control external IR LEDs.
|
||||
|
||||
config LED_EXTERNAL_AS_DEBUG
|
||||
bool "Mirror error pattern on external LED"
|
||||
depends on LED_EXTERNAL_CONTROL
|
||||
default n
|
||||
help
|
||||
When enabled and an error LED pattern is active, the external IR LED PWM output
|
||||
will blink (0% / 50% duty) to replicate the debug/status LED pattern. If
|
||||
LED_DEBUG_ENABLE is disabled this provides visual error feedback using only
|
||||
the external LED. Normal configured PWM brightness is restored when leaving
|
||||
the error pattern.
|
||||
|
||||
config LED_EXTERNAL_PWM_FREQ
|
||||
int "External LED PWM frequency (Hz)"
|
||||
default 5000
|
||||
|
||||
@@ -28,7 +28,12 @@
|
||||
#include <UVCStream.hpp>
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_LED_DEBUG_ENABLE
|
||||
#define BLINK_GPIO (gpio_num_t) CONFIG_LED_DEBUG_GPIO
|
||||
#else
|
||||
// Use an invalid / unused GPIO when debug LED disabled to avoid accidental toggles
|
||||
#define BLINK_GPIO (gpio_num_t) -1
|
||||
#endif
|
||||
#define CONFIG_LED_C_PIN_GPIO (gpio_num_t) CONFIG_LED_EXTERNAL_GPIO
|
||||
|
||||
TaskHandle_t serialManagerHandle;
|
||||
|
||||
Reference in New Issue
Block a user