/* handle status web page */ #include "options.h" #include #include "version.h" #include #include "status.h" #include "util.h" extern ODID_UAS_Data UAS_data; extern String status_reason; typedef struct { String name; String value; } json_table_t; static String escape_string(String s) { s.replace("\"", ""); return s; } /* create a json string from a table */ static String json_format(const json_table_t *table, uint8_t n) { String s = "{"; for (uint8_t i=0; i 0) { reason = "(" + status_reason + ")"; } const json_table_t table[] = { { "STATUS:VERSION", String(FW_VERSION_MAJOR) + "." + String(FW_VERSION_MINOR) + " " + githash}, { "STATUS:BOARD_ID", String(BOARD_ID)}, { "STATUS:UPTIME", String(hr) + ":" + String(minsec_str) }, { "STATUS:FREEMEM", String(ESP.getFreeHeap()) }, { "BASICID:UAType", ENUM_MAP(uatype, UAS_data.BasicID[0].UAType) }, { "BASICID:IDType", ENUM_MAP(idtype, UAS_data.BasicID[0].IDType) }, { "BASICID:UASID", String(UAS_data.BasicID[0].UASID) }, { "BASICID:UAType2", ENUM_MAP(uatype, UAS_data.BasicID[1].UAType) }, { "BASICID:IDType2", ENUM_MAP(idtype, UAS_data.BasicID[1].IDType) }, { "BASICID:UASID2", String(UAS_data.BasicID[1].UASID) }, { "OPERATORID:IDType", String(UAS_data.OperatorID.OperatorIdType) }, { "OPERATORID:ID", String(UAS_data.OperatorID.OperatorId) }, { "SELFID:DescType", ENUM_MAP(desctype, UAS_data.SelfID.DescType) }, { "SELFID:Desc", String(UAS_data.SelfID.Desc) }, { "SYSTEM:OperatorLocationType", ENUM_MAP(loctype, UAS_data.System.OperatorLocationType) }, { "SYSTEM:ClassificationType", ENUM_MAP(classif, UAS_data.System.ClassificationType) }, { "SYSTEM:OperatorLatitude", LatLonString(UAS_data.System.OperatorLatitude, UAS_data.System.OperatorLongitude, 0) }, { "SYSTEM:OperatorLongitude", LatLonString(UAS_data.System.OperatorLatitude, UAS_data.System.OperatorLongitude, 1) }, { "SYSTEM:AreaCount", String(UAS_data.System.AreaCount) }, { "SYSTEM:AreaRadius", String(UAS_data.System.AreaRadius) }, { "SYSTEM:AreaCeiling", AltString(UAS_data.System.AreaCeiling) }, { "SYSTEM:AreaFloor", AltString(UAS_data.System.AreaFloor) }, { "SYSTEM:CategoryEU", ENUM_MAP(cateu, UAS_data.System.CategoryEU) }, { "SYSTEM:ClassEU", ENUM_MAP(classeu, UAS_data.System.ClassEU) }, { "SYSTEM:OperatorAltitudeGeo", AltString(UAS_data.System.OperatorAltitudeGeo) }, { "SYSTEM:Timestamp", String(UAS_data.System.Timestamp) }, { "LOCATION:Status", ENUM_MAP(status, UAS_data.Location.Status)}, { "LOCATION:StatusReason", reason }, { "LOCATION:Direction", String(UAS_data.Location.Direction) }, { "LOCATION:SpeedHorizontal", String(UAS_data.Location.SpeedHorizontal) }, { "LOCATION:SpeedVertical", String(UAS_data.Location.SpeedVertical) }, { "LOCATION:Latitude", LatLonString(UAS_data.Location.Latitude, UAS_data.Location.Longitude, 0) }, { "LOCATION:Longitude", LatLonString(UAS_data.Location.Latitude, UAS_data.Location.Longitude, 1) }, { "LOCATION:AltitudeBaro", AltString(UAS_data.Location.AltitudeBaro) }, { "LOCATION:AltitudeGeo", AltString(UAS_data.Location.AltitudeGeo) }, { "LOCATION:HeightType", ENUM_MAP(height, UAS_data.Location.HeightType) }, { "LOCATION:Height", AltString(UAS_data.Location.Height) }, { "LOCATION:HorizAccuracy", ENUM_MAP(hacc, UAS_data.Location.HorizAccuracy) }, { "LOCATION:VertAccuracy", ENUM_MAP(vacc, UAS_data.Location.VertAccuracy) }, { "LOCATION:BaroAccuracy", ENUM_MAP(vacc, UAS_data.Location.BaroAccuracy) }, { "LOCATION:SpeedAccuracy", ENUM_MAP(sacc, UAS_data.Location.SpeedAccuracy) }, { "LOCATION:TSAccuracy", ENUM_MAP(tsacc, UAS_data.Location.TSAccuracy) }, { "LOCATION:TimeStamp", String(UAS_data.Location.TimeStamp) }, }; return json_format(table, ARRAY_SIZE(table)); }