mirror of
https://github.com/MrUnknownDE/OpenIris-ESPIDF.git
synced 2026-05-07 06:06:05 +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_SHUNT_MILLIOHM=22000
|
||||||
CONFIG_MONITORING_LED_SAMPLES=10
|
CONFIG_MONITORING_LED_SAMPLES=10
|
||||||
CONFIG_MONITORING_LED_INTERVAL_MS=500
|
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_GENERAL_ENABLE_WIRELESS is not set
|
||||||
CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80=y
|
CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80=y
|
||||||
# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_160 is not set
|
# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_160 is not set
|
||||||
@@ -77,3 +77,6 @@ CONFIG_ESP32S3_DEFAULT_CPU_FREQ_80=y
|
|||||||
# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_160 is not set
|
# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_160 is not set
|
||||||
# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240 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_SHUNT_MILLIOHM=22000
|
||||||
CONFIG_MONITORING_LED_SAMPLES=10
|
CONFIG_MONITORING_LED_SAMPLES=10
|
||||||
CONFIG_MONITORING_LED_INTERVAL_MS=500
|
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_GENERAL_ENABLE_WIRELESS is not set
|
||||||
CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80=y
|
CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80=y
|
||||||
# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_160 is not set
|
# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_160 is not set
|
||||||
@@ -77,3 +77,6 @@ CONFIG_ESP32S3_DEFAULT_CPU_FREQ_80=y
|
|||||||
# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_160 is not set
|
# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_160 is not set
|
||||||
# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240 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"
|
||||||
@@ -77,3 +77,6 @@ CONFIG_ESP32S3_DEFAULT_CPU_FREQ_80=y
|
|||||||
# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_160 is not set
|
# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_160 is not set
|
||||||
# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240 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()
|
void LEDManager::setup()
|
||||||
{
|
{
|
||||||
ESP_LOGI(LED_MANAGER_TAG, "Setting up status led.");
|
ESP_LOGI(LED_MANAGER_TAG, "Setting up status led.");
|
||||||
|
#ifdef CONFIG_LED_DEBUG_ENABLE
|
||||||
gpio_reset_pin(blink_led_pin);
|
gpio_reset_pin(blink_led_pin);
|
||||||
/* Set the GPIO as a push/pull output */
|
|
||||||
gpio_set_direction(blink_led_pin, GPIO_MODE_OUTPUT);
|
gpio_set_direction(blink_led_pin, GPIO_MODE_OUTPUT);
|
||||||
this->toggleLED(LED_OFF);
|
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
|
#ifdef CONFIG_LED_EXTERNAL_CONTROL
|
||||||
ESP_LOGI(LED_MANAGER_TAG, "Setting up illuminator led.");
|
ESP_LOGI(LED_MANAGER_TAG, "Setting up illuminator led.");
|
||||||
@@ -168,6 +171,31 @@ void LEDManager::updateState(const LEDStates_e newState)
|
|||||||
if (newState == this->currentState)
|
if (newState == this->currentState)
|
||||||
return;
|
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->currentState = newState;
|
||||||
this->currentPatternIndex = 0;
|
this->currentPatternIndex = 0;
|
||||||
this->finishedPattern = false;
|
this->finishedPattern = false;
|
||||||
@@ -175,7 +203,20 @@ void LEDManager::updateState(const LEDStates_e newState)
|
|||||||
|
|
||||||
void LEDManager::toggleLED(const bool state) const
|
void LEDManager::toggleLED(const bool state) const
|
||||||
{
|
{
|
||||||
|
#ifdef CONFIG_LED_DEBUG_ENABLE
|
||||||
gpio_set_level(blink_led_pin, state);
|
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)
|
void LEDManager::setExternalLEDDutyCycle(uint8_t dutyPercent)
|
||||||
|
|||||||
@@ -70,6 +70,11 @@ private:
|
|||||||
size_t currentPatternIndex = 0;
|
size_t currentPatternIndex = 0;
|
||||||
size_t timeToDelayFor = 100;
|
size_t timeToDelayFor = 100;
|
||||||
bool finishedPattern = false;
|
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);
|
void HandleLEDDisplayTask(void *pvParameter);
|
||||||
|
|||||||
@@ -109,6 +109,14 @@ endmenu
|
|||||||
|
|
||||||
menu "OpenIris: LED Configuration"
|
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
|
config LED_DEBUG_GPIO
|
||||||
int "Debug LED GPIO number"
|
int "Debug LED GPIO number"
|
||||||
range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX
|
range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX
|
||||||
@@ -130,6 +138,17 @@ menu "OpenIris: LED Configuration"
|
|||||||
help
|
help
|
||||||
Enable this if your board can control external IR LEDs.
|
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
|
config LED_EXTERNAL_PWM_FREQ
|
||||||
int "External LED PWM frequency (Hz)"
|
int "External LED PWM frequency (Hz)"
|
||||||
default 5000
|
default 5000
|
||||||
|
|||||||
@@ -28,7 +28,12 @@
|
|||||||
#include <UVCStream.hpp>
|
#include <UVCStream.hpp>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_LED_DEBUG_ENABLE
|
||||||
#define BLINK_GPIO (gpio_num_t) CONFIG_LED_DEBUG_GPIO
|
#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
|
#define CONFIG_LED_C_PIN_GPIO (gpio_num_t) CONFIG_LED_EXTERNAL_GPIO
|
||||||
|
|
||||||
TaskHandle_t serialManagerHandle;
|
TaskHandle_t serialManagerHandle;
|
||||||
|
|||||||
Reference in New Issue
Block a user