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
#### Build 2108250
- Added Sync groups (PR #2150)
- Added JSON API over Serial support
- Live color correction (PR #1902)
#### Build 2108180
- 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)
#define VERSION 2108180
#define VERSION 2108250
//uncomment this if you have a "my_config.h" file you'd like to use
//#define WLED_USE_MY_CONFIG

View File

@ -21,6 +21,8 @@ enum class AdaState {
void handleSerial()
{
if (pinManager.isPinAllocated(3)) return;
#ifdef WLED_ENABLE_ADALIGHT
static auto state = AdaState::Header_A;
static uint16_t count = 0;
@ -32,13 +34,35 @@ void handleSerial()
while (Serial.available() > 0)
{
yield();
byte next = Serial.read();
byte next = Serial.peek();
switch (state) {
case AdaState::Header_A:
if (next == 'A') state = AdaState::Header_d;
else if (next == 0xC9) { //TPM2 start byte
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;
case AdaState::Header_d:
if (next == 'd') state = AdaState::Header_a;
@ -98,6 +122,7 @@ void handleSerial()
}
break;
}
Serial.read(); //discard the byte
}
#endif
}