Added JSON API over serial support (#2156)

* Added JSON API over serial support

* Disable Serial API if pin 3 is used

Disable serial response if pin 1 is used
This commit is contained in:
Christian Schwinne 2021-08-26 11:04:27 +02:00 committed by GitHub
parent dbc67e077d
commit 54f4658dae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 33 additions and 2 deletions

View File

@ -2,6 +2,12 @@
### Builds after release 0.12.0 ### Builds after release 0.12.0
#### Build 2108250
- Added Sync groups (PR #2150)
- Added JSON API over Serial support
- Live color correction (PR #1902)
#### Build 2108180 #### Build 2108180
- Fixed JSON IR remote not working with codes greater than 0xFFFFFF (fixes #2135) - Fixed JSON IR remote not working with codes greater than 0xFFFFFF (fixes #2135)

View File

@ -8,7 +8,7 @@
*/ */
// version code in format yymmddb (b = daily build) // version code in format yymmddb (b = daily build)
#define VERSION 2108180 #define VERSION 2108250
//uncomment this if you have a "my_config.h" file you'd like to use //uncomment this if you have a "my_config.h" file you'd like to use
//#define WLED_USE_MY_CONFIG //#define WLED_USE_MY_CONFIG

View File

@ -21,6 +21,8 @@ enum class AdaState {
void handleSerial() void handleSerial()
{ {
if (pinManager.isPinAllocated(3)) return;
#ifdef WLED_ENABLE_ADALIGHT #ifdef WLED_ENABLE_ADALIGHT
static auto state = AdaState::Header_A; static auto state = AdaState::Header_A;
static uint16_t count = 0; static uint16_t count = 0;
@ -32,13 +34,35 @@ void handleSerial()
while (Serial.available() > 0) while (Serial.available() > 0)
{ {
yield(); yield();
byte next = Serial.read(); byte next = Serial.peek();
switch (state) { switch (state) {
case AdaState::Header_A: case AdaState::Header_A:
if (next == 'A') state = AdaState::Header_d; if (next == 'A') state = AdaState::Header_d;
else if (next == 0xC9) { //TPM2 start byte else if (next == 0xC9) { //TPM2 start byte
state = AdaState::TPM2_Header_Type; state = AdaState::TPM2_Header_Type;
} }
else if (next == '{') { //JSON API
bool verboseResponse = false;
{
DynamicJsonDocument doc(JSON_BUFFER_SIZE);
Serial.setTimeout(100);
DeserializationError error = deserializeJson(doc, Serial);
if (error) return;
fileDoc = &doc;
verboseResponse = deserializeState(doc.as<JsonObject>());
fileDoc = nullptr;
}
//only send response if TX pin is unused for other purposes
if (verboseResponse && !pinManager.isPinAllocated(1)) {
DynamicJsonDocument doc(JSON_BUFFER_SIZE);
JsonObject state = doc.createNestedObject("state");
serializeState(state);
JsonObject info = doc.createNestedObject("info");
serializeInfo(info);
serializeJson(doc, Serial);
}
}
break; break;
case AdaState::Header_d: case AdaState::Header_d:
if (next == 'd') state = AdaState::Header_a; if (next == 'd') state = AdaState::Header_a;
@ -98,6 +122,7 @@ void handleSerial()
} }
break; break;
} }
Serial.read(); //discard the byte
} }
#endif #endif
} }