Skip to content

Commit

Permalink
Added JSON API over serial support (Aircoookie#2156)
Browse files Browse the repository at this point in the history
* Added JSON API over serial support

* Disable Serial API if pin 3 is used

Disable serial response if pin 1 is used
  • Loading branch information
Aircoookie authored Aug 26, 2021
1 parent dbc67e0 commit 54f4658
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 2 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion wled00/wled.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
27 changes: 26 additions & 1 deletion wled00/wled_serial.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -98,6 +122,7 @@ void handleSerial()
}
break;
}
Serial.read(); //discard the byte
}
#endif
}

0 comments on commit 54f4658

Please sign in to comment.