Skip to content

Commit ced9a76

Browse files
committed
Increase udp responsetime (20ms) and process all messages
backend ======= - main: add last20ms and use for devices - devices: loop20 for direct response, readudp loops over received packets, use preset.selected
1 parent 1990708 commit ced9a76

3 files changed

Lines changed: 61 additions & 45 deletions

File tree

.coderabbit.yaml

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
1+
# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
12
language: "en-US"
2-
3-
review:
4-
enable_review: true
5-
enable_fix_suggestions: true
6-
enable_tests_generation: false
7-
8-
context:
9-
timeout_ms: 900000 # 15 minutes max
3+
early_access: true
4+
reviews:
5+
profile: "chill"
6+
request_changes_workflow: true
7+
high_level_summary: true
8+
poem: true
9+
review_status: true
10+
collapse_walkthrough: false
11+
auto_review:
12+
enabled: true
13+
drafts: true
14+
tools:
15+
github-checks:
16+
timeout_ms: 900000 # 15 minutes max
17+
chat:
18+
auto_reply: true

src/MoonBase/Modules/ModuleDevices.h

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
#include "MoonBase/Module.h"
1818
#include "MoonBase/Utilities.h"
19+
#include "MoonBase/pal.h"
1920

2021
struct UDPMessage {
2122
uint8_t rommel[6];
@@ -40,22 +41,22 @@ class ModuleDevices : public Module {
4041

4142
_moduleLightsControl->addUpdateHandler([this](const String& originId) {
4243
if (deviceUDP.beginPacket(IPAddress(255, 255, 255, 255), deviceUDPPort)) {
43-
UDPMessage message;
44+
UDPMessage message{}; // {}: zero message
4445
message.name = esp32sveltekit.getWiFiSettingsService()->getHostname().c_str();
4546
message.version = APP_VERSION;
4647
_moduleLightsControl->read(
4748
[&](ModuleState& state) {
4849
message.brightness = state.data["brightness"];
4950
message.palette = state.data["palette"];
50-
message.preset = state.data["preset"];
51+
message.preset = state.data["preset"]["selected"];
5152
String ddd;
5253
serializeJson(state.data["preset"], ddd);
5354
EXT_LOGD(MB_TAG, "pr %s", ddd.c_str());
5455
},
5556
_moduleName);
56-
57+
5758
EXT_LOGD(MB_TAG, "b: %d pa %d pr %d", message.brightness, message.palette, message.preset);
58-
message.uptime = time(nullptr) - millis() / 1000;
59+
message.uptime = time(nullptr) - pal::millis() / 1000;
5960
deviceUDP.write((uint8_t*)&message, sizeof(message));
6061
deviceUDP.endPacket();
6162

@@ -90,7 +91,7 @@ class ModuleDevices : public Module {
9091
}
9192
}
9293

93-
void loop1s() {
94+
void loop20ms() {
9495
if (!WiFi.localIP() && !ETH.localIP()) return;
9596

9697
if (!deviceUDPConnected) return;
@@ -166,15 +167,16 @@ class ModuleDevices : public Module {
166167
}
167168

168169
void readUDP() {
169-
size_t packetSize = deviceUDP.parsePacket();
170-
if (packetSize >= 38) { // WLED has 44, MM had ! 38
171-
char buffer[packetSize];
172-
UDPMessage message;
173-
deviceUDP.read(buffer, packetSize);
174-
memcpy(&message, buffer, ::min(packetSize, sizeof(message)));
175-
// EXT_LOGD(ML_TAG, "UDP packet read from %d: %s (%d)", deviceUDP.remoteIP()[3], buffer + 6, packetSize);
170+
while (size_t packetSize = deviceUDP.parsePacket()) {
171+
if (packetSize >= 38) { // WLED has 44, MM had ! 38
172+
char buffer[packetSize];
173+
UDPMessage message;
174+
deviceUDP.read(buffer, packetSize);
175+
memcpy(&message, buffer, ::min(packetSize, sizeof(message)));
176+
// EXT_LOGD(ML_TAG, "UDP packet read from %d: %s (%d)", deviceUDP.remoteIP()[3], buffer + 6, packetSize);
176177

177-
updateDevices(message, deviceUDP.remoteIP());
178+
updateDevices(message, deviceUDP.remoteIP());
179+
}
178180
}
179181
}
180182

@@ -187,11 +189,11 @@ class ModuleDevices : public Module {
187189
[&](ModuleState& state) {
188190
message.brightness = state.data["brightness"];
189191
message.palette = state.data["palette"];
190-
message.preset = state.data["preset"];
192+
message.preset = state.data["preset"]["selected"];
191193
},
192194
_moduleName);
193195

194-
message.uptime = time(nullptr) - millis() / 1000;
196+
message.uptime = time(nullptr) ? time(nullptr) - pal::millis() / 1000 : pal::millis() / 1000;
195197
deviceUDP.write((uint8_t*)&message, sizeof(message));
196198
deviceUDP.endPacket();
197199

src/main.cpp

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -361,37 +361,42 @@ void setup() {
361361
esp32sveltekit.addLoopFunction([]() {
362362
for (Module* module : modules) module->loop();
363363

364-
// every second
365-
static unsigned long lastSecond = 0;
366-
if (millis() - lastSecond >= 1000) {
367-
lastSecond = millis();
364+
static unsigned long last20ms = 0;
365+
if (millis() - last20ms >= 20) {
366+
last20ms = millis();
367+
moduleDevices.loop20ms();
368368

369-
moduleIO.loop1s();
370-
moduleDevices.loop1s();
371-
moduleTasks.loop1s();
369+
// every second
370+
static unsigned long lastSecond = 0;
371+
if (millis() - lastSecond >= 1000) {
372+
lastSecond = millis();
372373

373-
// logYield();
374+
moduleIO.loop1s();
375+
moduleTasks.loop1s();
376+
377+
// logYield();
374378

375379
#if FT_ENABLED(FT_MOONLIGHT)
376-
// set shared data (eg used in scrolling text effect)
377-
sharedData.fps = esp32sveltekit.getAnalyticsService()->lps;
378-
sharedData.connectionStatus = (uint8_t)esp32sveltekit.getConnectionStatus();
379-
sharedData.clientListSize = esp32sveltekit.getServer()->getClientList().size();
380-
sharedData.connectedClients = esp32sveltekit.getSocket()->getConnectedClients();
381-
sharedData.activeClients = esp32sveltekit.getSocket()->getActiveClients();
380+
// set shared data (eg used in scrolling text effect)
381+
sharedData.fps = esp32sveltekit.getAnalyticsService()->lps;
382+
sharedData.connectionStatus = (uint8_t)esp32sveltekit.getConnectionStatus();
383+
sharedData.clientListSize = esp32sveltekit.getServer()->getClientList().size();
384+
sharedData.connectedClients = esp32sveltekit.getSocket()->getConnectedClients();
385+
sharedData.activeClients = esp32sveltekit.getSocket()->getActiveClients();
382386

383387
#if FT_ENABLED(FT_LIVESCRIPT)
384-
moduleLiveScripts.loop1s();
388+
moduleLiveScripts.loop1s();
385389
#endif
386390
#endif
387-
}
388-
389-
// every 10 seconds
390-
static unsigned long last10Second = 0;
391-
if (millis() - last10Second >= 10000) {
392-
last10Second = millis();
391+
392+
// every 10 seconds
393+
static unsigned long last10Second = 0;
394+
if (millis() - last10Second >= 10000) {
395+
last10Second = millis();
393396

394-
moduleDevices.loop10s();
397+
moduleDevices.loop10s();
398+
}
399+
}
395400
}
396401
});
397402

0 commit comments

Comments
 (0)