Loading Makefile +4 −0 Original line number Diff line number Diff line Loading @@ -116,6 +116,10 @@ ifeq (${wakeup}, 1) COMMON_FLAGS += -DWITH_WAKEUP endif ifeq (${ostream}, 1) COMMON_FLAGS += -DWITH_OSTREAM endif include src/arch/${arch}/Makefile.inc clean: arch_clean Loading include/object/outputstream.h +7 −0 Original line number Diff line number Diff line Loading @@ -2,6 +2,9 @@ #define OUTPUTSTREAM_H #include <stdint.h> #ifdef WITH_OSTREAM #include <ostream> #endif class OutputStream { private: Loading Loading @@ -39,6 +42,10 @@ class OutputStream { OutputStream & operator<<(double number); OutputStream & operator<<(OutputStream & (*fun) (OutputStream &)); #ifdef WITH_OSTREAM OutputStream & operator<<(std::string s); #endif void setBase(uint8_t b); void printf_uint8(uint8_t num); void printf_float(float num); Loading src/app/prototest/main.cc +43 −3 Original line number Diff line number Diff line Loading @@ -9,15 +9,48 @@ char buf[256]; // TODOs // // Code -> JSON // Code -> XDR // Code -> MsgPack // Code -> ProtoBuf // Code -> CBOR // // JSON -> Code/Data // XDR -> Code/Data // MsgPack -> Code/Data // ProtoBuf -> Code/Data // CBOR -> Code/Data void loop(void) { static unsigned int ts = 0; char json[] = "{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}"; ArduinoJson::StaticJsonBuffer<200> jsonBuffer; ArduinoJson::JsonObject& root = jsonBuffer.parseObject(json); const char *sensor = root["sensor"]; kout << "sensor: " << sensor << endl; /* * nlohmann modernjson serialization */ nlohmann::json js1; js1["sensor"] = "gps"; js1["time"] = ts; js1["data"] = {48.756080, 2.302038}; kout << js1.dump() << endl; nlohmann::json js2 = { {"sensor", "gps"}, {"time", ts}, {"data", {48.756080, 2.302038} } }; kout << js2.dump() << endl; nlohmann::json j = R"({"compact": true, "schema": 0})"_json; j["ts"] = ts; std::vector<std::uint8_t> v_cbor = nlohmann::json::to_cbor(j); kout << "CBOR vector is " << hex; Loading @@ -26,15 +59,21 @@ void loop(void) } kout << endl; kout << "manual JSON: {\"sensor\":\"gps\",\"time\":" << dec << 1351824120; kout << "manual JSON: {\"sensor\":\"gps\",\"time\":" << dec << ts; kout << ",\"data\":[" << 48.756080 << "," << 2.302038 << "]}" << endl; /* * nlohmann modernjson deserialization */ auto jd1 = R"({"compact": true, "schema": 0})"_json; BufferOutput<XDRStream> foostream(buf); XDRInput input(buf); char test[] = "Obai World!"; foostream << 123 << -2 << 123456 << 0 << 4294967296 << 0; foostream << 123 << -2 << ts << 0 << 4294967296 << 0; foostream.setNextArrayLen(3); foostream << fixed << "Hai"; foostream.setNextArrayLen(sizeof(test)); Loading @@ -50,7 +89,7 @@ void loop(void) kout << dec; kout << "foostream = " << input.get_uint32() << " = " << 123; kout << ", " << input.get_int32() << " = " << -2; kout << ", " << input.get_uint32() << " = " << 123456; kout << ", " << input.get_uint32() << " = " << ts; kout << ", " << input.get_uint32(); kout << ", " << input.get_uint64(); kout << ", " << input.get_uint32(); Loading @@ -63,6 +102,7 @@ void loop(void) #ifdef TIMER_S kout << dec << uptime.get_s() << endl; #endif ts++; } int main(void) Loading src/os/object/outputstream.cc +10 −0 Original line number Diff line number Diff line Loading @@ -140,6 +140,16 @@ OutputStream & OutputStream::operator<<(OutputStream & (*fkt) (OutputStream &)) return fkt(*this); } #ifdef WITH_OSTREAM OutputStream & OutputStream::operator<<(std::string s) { for (auto c : s) { put(c); } return *this; } #endif void OutputStream::setBase(uint8_t b) { if (b == 2 || b == 8 || b == 10 || b == 16) { Loading Loading
Makefile +4 −0 Original line number Diff line number Diff line Loading @@ -116,6 +116,10 @@ ifeq (${wakeup}, 1) COMMON_FLAGS += -DWITH_WAKEUP endif ifeq (${ostream}, 1) COMMON_FLAGS += -DWITH_OSTREAM endif include src/arch/${arch}/Makefile.inc clean: arch_clean Loading
include/object/outputstream.h +7 −0 Original line number Diff line number Diff line Loading @@ -2,6 +2,9 @@ #define OUTPUTSTREAM_H #include <stdint.h> #ifdef WITH_OSTREAM #include <ostream> #endif class OutputStream { private: Loading Loading @@ -39,6 +42,10 @@ class OutputStream { OutputStream & operator<<(double number); OutputStream & operator<<(OutputStream & (*fun) (OutputStream &)); #ifdef WITH_OSTREAM OutputStream & operator<<(std::string s); #endif void setBase(uint8_t b); void printf_uint8(uint8_t num); void printf_float(float num); Loading
src/app/prototest/main.cc +43 −3 Original line number Diff line number Diff line Loading @@ -9,15 +9,48 @@ char buf[256]; // TODOs // // Code -> JSON // Code -> XDR // Code -> MsgPack // Code -> ProtoBuf // Code -> CBOR // // JSON -> Code/Data // XDR -> Code/Data // MsgPack -> Code/Data // ProtoBuf -> Code/Data // CBOR -> Code/Data void loop(void) { static unsigned int ts = 0; char json[] = "{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}"; ArduinoJson::StaticJsonBuffer<200> jsonBuffer; ArduinoJson::JsonObject& root = jsonBuffer.parseObject(json); const char *sensor = root["sensor"]; kout << "sensor: " << sensor << endl; /* * nlohmann modernjson serialization */ nlohmann::json js1; js1["sensor"] = "gps"; js1["time"] = ts; js1["data"] = {48.756080, 2.302038}; kout << js1.dump() << endl; nlohmann::json js2 = { {"sensor", "gps"}, {"time", ts}, {"data", {48.756080, 2.302038} } }; kout << js2.dump() << endl; nlohmann::json j = R"({"compact": true, "schema": 0})"_json; j["ts"] = ts; std::vector<std::uint8_t> v_cbor = nlohmann::json::to_cbor(j); kout << "CBOR vector is " << hex; Loading @@ -26,15 +59,21 @@ void loop(void) } kout << endl; kout << "manual JSON: {\"sensor\":\"gps\",\"time\":" << dec << 1351824120; kout << "manual JSON: {\"sensor\":\"gps\",\"time\":" << dec << ts; kout << ",\"data\":[" << 48.756080 << "," << 2.302038 << "]}" << endl; /* * nlohmann modernjson deserialization */ auto jd1 = R"({"compact": true, "schema": 0})"_json; BufferOutput<XDRStream> foostream(buf); XDRInput input(buf); char test[] = "Obai World!"; foostream << 123 << -2 << 123456 << 0 << 4294967296 << 0; foostream << 123 << -2 << ts << 0 << 4294967296 << 0; foostream.setNextArrayLen(3); foostream << fixed << "Hai"; foostream.setNextArrayLen(sizeof(test)); Loading @@ -50,7 +89,7 @@ void loop(void) kout << dec; kout << "foostream = " << input.get_uint32() << " = " << 123; kout << ", " << input.get_int32() << " = " << -2; kout << ", " << input.get_uint32() << " = " << 123456; kout << ", " << input.get_uint32() << " = " << ts; kout << ", " << input.get_uint32(); kout << ", " << input.get_uint64(); kout << ", " << input.get_uint32(); Loading @@ -63,6 +102,7 @@ void loop(void) #ifdef TIMER_S kout << dec << uptime.get_s() << endl; #endif ts++; } int main(void) Loading
src/os/object/outputstream.cc +10 −0 Original line number Diff line number Diff line Loading @@ -140,6 +140,16 @@ OutputStream & OutputStream::operator<<(OutputStream & (*fkt) (OutputStream &)) return fkt(*this); } #ifdef WITH_OSTREAM OutputStream & OutputStream::operator<<(std::string s) { for (auto c : s) { put(c); } return *this; } #endif void OutputStream::setBase(uint8_t b) { if (b == 2 || b == 8 || b == 10 || b == 16) { Loading