Skip to content

Commit 9024872

Browse files
authored
feat(visual): replace LED managers with LEDC-driven drivers (#435)
1 parent 78a3fa3 commit 9024872

16 files changed

Lines changed: 424 additions & 214 deletions

.changeset/smooth-leds-dance.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'firmware': minor
3+
---
4+
5+
feat(visual): Replace LED managers with LEDC-driven drivers, enabling hardware PWM brightness control on mono LEDs

include/serial/command_handlers/index.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ namespace OpenShock::Serial::CommandHandlers {
2121
OpenShock::Serial::CommandGroup RawConfigHandler();
2222
OpenShock::Serial::CommandGroup RfTransmitHandler();
2323
OpenShock::Serial::CommandGroup FactoryResetHandler();
24+
OpenShock::Serial::CommandGroup LedTestHandler();
2425

2526
inline std::vector<OpenShock::Serial::CommandGroup> AllCommandHandlers()
2627
{
@@ -41,6 +42,7 @@ namespace OpenShock::Serial::CommandHandlers {
4142
RawConfigHandler(),
4243
RfTransmitHandler(),
4344
FactoryResetHandler(),
45+
LedTestHandler(),
4446
};
4547
}
4648
} // namespace OpenShock::Serial::CommandHandlers
Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,19 @@
1212
#include <vector>
1313

1414
namespace OpenShock {
15-
class PinPatternManager {
16-
DISABLE_DEFAULT(PinPatternManager);
17-
DISABLE_COPY(PinPatternManager);
18-
DISABLE_MOVE(PinPatternManager);
15+
class MonoLedDriver {
16+
DISABLE_DEFAULT(MonoLedDriver);
17+
DISABLE_COPY(MonoLedDriver);
18+
DISABLE_MOVE(MonoLedDriver);
1919

2020
public:
2121
struct State {
2222
bool level;
2323
uint32_t duration;
2424
};
2525

26-
PinPatternManager(gpio_num_t gpioPin);
27-
~PinPatternManager();
26+
MonoLedDriver(gpio_num_t gpioPin);
27+
~MonoLedDriver();
2828

2929
bool IsValid() const { return m_gpioPin != GPIO_NUM_NC; }
3030

@@ -36,11 +36,14 @@ namespace OpenShock {
3636
}
3737
void ClearPattern();
3838

39+
void SetBrightness(uint8_t brightness);
40+
3941
private:
4042
void ClearPatternInternal();
4143
void RunPattern();
4244

4345
gpio_num_t m_gpioPin;
46+
uint8_t m_brightness;
4447
std::vector<State> m_pattern;
4548
TaskHandle_t m_taskHandle;
4649
SimpleMutex m_taskMutex;
Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@
1414
#include <vector>
1515

1616
namespace OpenShock {
17-
class RGBPatternManager {
18-
DISABLE_DEFAULT(RGBPatternManager);
19-
DISABLE_COPY(RGBPatternManager);
20-
DISABLE_MOVE(RGBPatternManager);
17+
class RgbLedDriver {
18+
DISABLE_DEFAULT(RgbLedDriver);
19+
DISABLE_COPY(RgbLedDriver);
20+
DISABLE_MOVE(RgbLedDriver);
2121

2222
public:
23-
RGBPatternManager(gpio_num_t gpioPin);
24-
~RGBPatternManager();
23+
RgbLedDriver(gpio_num_t gpioPin);
24+
~RgbLedDriver();
2525

2626
bool IsValid() const { return m_gpioPin != GPIO_NUM_NC; }
2727

@@ -38,12 +38,13 @@ namespace OpenShock {
3838
{
3939
SetPattern(pattern, N);
4040
}
41-
void SetBrightness(uint8_t brightness);
4241
void ClearPattern();
4342

43+
void SetBrightness(uint8_t brightness);
44+
4445
private:
4546
void ClearPatternInternal();
46-
static void RunPattern(void* arg);
47+
void RunPattern();
4748

4849
gpio_num_t m_gpioPin;
4950
uint8_t m_brightness; // 0-255
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,7 @@ namespace OpenShock::VisualStateManager {
88

99
void SetCriticalError();
1010
void SetScanningStarted();
11+
12+
/// Cycles through all LED patterns for visual verification. Blocks for ~20s.
13+
void RunLedTest();
1114
} // namespace OpenShock::VisualStateManager

platformio.ini

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,8 @@ custom_openshock.chip = ESP32-S3
105105
custom_openshock.flash_size = 4MB
106106
build_flags = ${env.build_flags}
107107
-DOPENSHOCK_LED_WS2812B=47
108-
-DOPENSHOCK_LED_FLIP_RG_CHANNELS=1
108+
-DOPENSHOCK_LED_SWAP_RG_CHANNELS=1
109+
-DARDUINO_USB_CDC_ON_BOOT=1
109110

110111
; https://www.waveshare.com/wiki/ESP32-S3-Zero
111112
[env:Waveshare_esp32_s3_zero]
@@ -115,7 +116,8 @@ custom_openshock.flash_size = 4MB
115116
build_flags = ${env.build_flags}
116117
-DOPENSHOCK_RF_TX_GPIO=1
117118
-DOPENSHOCK_LED_WS2812B=21
118-
-DOPENSHOCK_LED_FLIP_RG_CHANNELS=1
119+
-DOPENSHOCK_LED_SWAP_RG_CHANNELS=1
120+
-DARDUINO_USB_CDC_ON_BOOT=1
119121

120122
[env:Pishock-2023]
121123
board = Wemos-D1-Mini-ESP32 ; override

src/GatewayClient.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ const char* const TAG = "GatewayClient";
1010
#include "message_handlers/WebSocket.h"
1111
#include "OtaUpdateManager.h"
1212
#include "serialization/WSGateway.h"
13-
#include "VisualStateManager.h"
13+
#include "visual/VisualStateManager.h"
1414

1515
using namespace OpenShock;
1616

src/GatewayConnectionManager.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
const char* const TAG = "GatewayConnectionManager";
44

5-
#include "VisualStateManager.h"
5+
#include "visual/VisualStateManager.h"
66

77
#include "captiveportal/Manager.h"
88
#include "config/Config.h"

src/PinPatternManager.cpp

Lines changed: 0 additions & 109 deletions
This file was deleted.

0 commit comments

Comments
 (0)