From 04f089472b7bc16673532f5d6d49782609d52d49 Mon Sep 17 00:00:00 2001 From: cfif Date: Fri, 24 Jan 2025 13:22:32 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BD=D0=BE=D1=81=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BD=D0=BE=D0=B2=D1=83=D1=8E=20=D0=BE=D1=80?= =?UTF-8?q?=D0=B3=D0=B0=D0=BD=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8E=20GONEC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Inc/json_func.h | 109 ++++++++ Src/json_func.c | 643 ++++++++++++++++++++++++++++++++++++++++++++++++ modular.json | 18 ++ 3 files changed, 770 insertions(+) create mode 100644 Inc/json_func.h create mode 100644 Src/json_func.c create mode 100644 modular.json diff --git a/Inc/json_func.h b/Inc/json_func.h new file mode 100644 index 0000000..ed684d8 --- /dev/null +++ b/Inc/json_func.h @@ -0,0 +1,109 @@ +// +// Created by cfif on 04.10.2022. +// + +#ifndef JSONFUNC_H +#define JSONFUNC_H + +#include "tiny-json.h" +#include "mtojson.h" +#include "ModemMain.h" + + +// Ответ статуса обновления WEB +size_t json_generate_webup_answer(char *buf, size_t len_buf, uint32_t webup); + +// Ответ stat +size_t json_generate_stat_answer(char *buf, size_t len_buf, uint32_t NumFileOutBox, uint32_t NumFileInbox, + uint32_t CntMsgsOutBox, uint32_t stn1, uint32_t stn2, uint32_t stn3); + +// Ответ с событием +size_t json_generate_event(char *buf, size_t len_buf, tEventWebState *eventWebState, uint32_t timestampWriteLog, uint32_t timestampWriteLog2); + + +// Ответ спутника ЗВР +size_t json_generate_getalma(char *buf, size_t len_buf, uint32_t sec, uint32_t number); + +size_t json_generate_answer_get_ex_elem_fs(char *buf, size_t len_buf, uint32_t err, uint32_t count, const char *dir); + +// Ответ состояния кнопок +size_t json_generate_state_answer(char *buf, size_t len_buf, uint32_t alma); + +// Ответ с состоянием альманаха +size_t json_generate_alma_state_answer(char *buf, size_t len_buf, uint32_t state); + +// Ответ с ошибкой +size_t json_generate_err_answer(char *buf, size_t len_buf, uint32_t err); + +// Ответ с ошибкой и id +size_t +json_generate_err_id_end_myid_answer(char *buf, size_t len_buf, uint32_t err, uint32_t id, uint32_t end, uint32_t myid); + +size_t json_generate_err_id_end_answer(char *buf, size_t len_buf, uint32_t err, uint32_t id, uint32_t end); + +// Формирование элемента структуры файловой системы +size_t +json_generate_get_elem_fs(char *buf, size_t len_buf, const char *nam, uint8_t tpf, uint32_t fsz, const char *fdt); + +// Ответ квитанция +size_t json_generate_answer_get_elem_fs(char *buf, size_t len_buf, uint32_t err, const char *dir); + +// Ответ квитанция +size_t +json_generate_answer_get_elem_file_fs(char *buf, size_t len_buf, uint32_t err, const char *file_name, uint32_t pos, + uint32_t len); + +// Текущий уровень аторизации +size_t json_generate_auth_send_answer(char *buf, size_t len_buf, uint32_t auth); + +// Ответ timestamp +size_t json_generate_timestamp_answer(char *buf, size_t len_buf, uint32_t timestamp_gnss, uint32_t timestamp_block, + uint32_t timestamp_work); + +// Ответ координат +size_t json_generate_coordinates_answer(char *buf, size_t len_buf, uint32_t valid, float latitude, float longitude, + uint32_t routing, uint32_t angle, uint32_t timeZoneInSat); + + +// Ответ vars +size_t json_generate_vars_send_answer(char *buf, size_t len_buf, uint32_t at, const char *username, uint32_t diskall, uint32_t diskfree); + +// Ответ АДЦ +size_t json_generate_adc_answer(char *buf, size_t len_buf, uint32_t vcc); + +// Ответ rssi +size_t json_generate_rssi_answer(char *buf, size_t len_buf, int32_t rssi); + +// Ответ версии +size_t json_generate_version_answer(char *buf, size_t len_buf, char *versionModem, char *versionCrypto); + +// Ответ с размером файла +size_t json_generate_fileinfo_answer(char *buf, size_t len_buf, uint32_t size); + +// Ответ процент передачи +//size_t json_generate_proc_send_answer(char *buf, size_t len_buf, tFileSendInfoForJson *fileSendInfo); + + +size_t json_generate_get_data(char *buf, size_t len_buf, + uint32_t timestamp_gnss, + uint32_t timestamp_block, + uint32_t timestamp_rtc, + uint32_t timestamp_work, + + uint32_t vcc, + + int32_t temp, + + int32_t *rssi, + uint32_t tracert, + + uint32_t valid, + float latitude, + float longitude, + + tEventWebState *eventWebState, + uint32_t timestampWriteLog, + uint32_t timestampWriteLog2 +); + +#endif //JSONFUNC_H diff --git a/Src/json_func.c b/Src/json_func.c new file mode 100644 index 0000000..b36c744 --- /dev/null +++ b/Src/json_func.c @@ -0,0 +1,643 @@ +// +// Created by cfif on 04.10.2022. +// +#include "json_func.h" +#include "time.h" +#include "string.h" +#include "FirmwareMetadataSection.h" + +// Ответ с размером файла +size_t json_generate_fileinfo_answer(char *buf, size_t len_buf, uint32_t size) { + struct to_json jsonResponse_Post[] = { + {.name = "size", .value = &size, .vtype = t_to_uint32_t, .stype = t_to_object}, + {NULL} + }; + + buf[0] = '['; + size_t len_json = json_generate(&buf[1], jsonResponse_Post, len_buf - 1); + buf[len_json + 1] = ']'; + + return len_json + 2; +} + + +// Ответ с событием +size_t json_generate_event(char *buf, size_t len_buf, tEventWebState *eventWebState, uint32_t timestampWriteLog, + uint32_t timestampWriteLog2) { + struct to_json jsonResponse_Post[] = { + {.name = "outbox", .value = &eventWebState->EVENT_OUTBOX, .vtype = t_to_uint32_t, .stype = t_to_object}, + {.name = "sentbox", .value = &eventWebState->EVENT_SENTBOX, .vtype = t_to_uint32_t}, + {.name = "inbox", .value = &eventWebState->EVENT_INBOX, .vtype = t_to_uint32_t}, + {.name = "alma", .value = &eventWebState->EVENT_ALMA, .vtype = t_to_uint32_t}, + {.name = "log", .value = ×tampWriteLog, .vtype = t_to_uint32_t}, + {.name = "log2", .value = ×tampWriteLog2, .vtype = t_to_uint32_t}, + {NULL} + }; + + buf[0] = '['; + size_t len_json = json_generate(&buf[1], jsonResponse_Post, len_buf - 1); + buf[len_json + 1] = ']'; + + return len_json + 2; +} + +// Ответ состояния кнопок +size_t json_generate_state_answer(char *buf, size_t len_buf, uint32_t alma) { + struct to_json jsonResponse_Post[] = { + {.name = "alma", .value = &alma, .vtype = t_to_uint32_t, .stype = t_to_object}, + {NULL} + }; + + buf[0] = '['; + size_t len_json = json_generate(&buf[1], jsonResponse_Post, len_buf - 1); + buf[len_json + 1] = ']'; + + return len_json + 2; +} + +// Ответ с состоянием альманаха +size_t json_generate_alma_state_answer(char *buf, size_t len_buf, uint32_t state) { + struct to_json jsonResponse_Post[] = { + {.name = "almastate", .value = &state, .vtype = t_to_uint32_t, .stype = t_to_object}, + {NULL} + }; + + buf[0] = '['; + size_t len_json = json_generate(&buf[1], jsonResponse_Post, len_buf - 1); + buf[len_json + 1] = ']'; + + return len_json + 2; +} + + +// Ответ спутника ЗВР +size_t json_generate_getalma(char *buf, size_t len_buf, uint32_t sec, uint32_t number) { + uint32_t num = 100; + uint32_t grp = 15; + + struct to_json jsonResponse_Post1[] = { + {.name = "num", .value = &num, .vtype = t_to_uint32_t, .stype = t_to_object}, + {.name = "grp", .value = &grp, .vtype = t_to_uint32_t}, + {.name = "typ", .value = "dec", .vtype = t_to_string}, + {.name = "val", .value = &sec, .vtype = t_to_uint32_t}, + {.name = "hlp", .value = "AlmhSecToSAT", .vtype = t_to_string}, + {NULL} + }; + + struct to_json jsonResponse_Post2[] = { + {.name = "num", .value = &num, .vtype = t_to_uint32_t, .stype = t_to_object}, + {.name = "grp", .value = &grp, .vtype = t_to_uint32_t}, + {.name = "typ", .value = "dec", .vtype = t_to_string}, + {.name = "val", .value = &number, .vtype = t_to_uint32_t}, + {.name = "hlp", .value = "AlmhNumSAT", .vtype = t_to_string}, + {NULL} + }; + + buf[0] = '['; + size_t len1_json = json_generate(&buf[1], jsonResponse_Post1, len_buf - 1); + + buf[len1_json + 1] = ','; + + num = 101; + size_t len2_json = json_generate(&buf[len1_json + 2], jsonResponse_Post2, len_buf - 1); + buf[len1_json + len2_json + 2] = ']'; + + return len1_json + len2_json + 3; +} + +// Ответ статуса обновления WEB +size_t json_generate_webup_answer(char *buf, size_t len_buf, uint32_t webup) { + struct to_json jsonResponse_Post[] = { + {.name = "status", .value = &webup, .vtype = t_to_uint32_t, .stype = t_to_object}, + {NULL} + }; + + buf[0] = '['; + size_t len_json = json_generate(&buf[1], jsonResponse_Post, len_buf - 1); + buf[len_json + 1] = ']'; + + return len_json + 2; +} + +// Ответ с ошибкой +size_t json_generate_err_answer(char *buf, size_t len_buf, uint32_t err) { + struct to_json jsonResponse_Post[] = { + {.name = "err", .value = &err, .vtype = t_to_uint32_t, .stype = t_to_object}, + {NULL} + }; + + buf[0] = '['; + size_t len_json = json_generate(&buf[1], jsonResponse_Post, len_buf - 1); + buf[len_json + 1] = ']'; + + return len_json + 2; +} + +// Ответ с ошибкой и id end myid +size_t json_generate_err_id_end_myid_answer(char *buf, size_t len_buf, uint32_t err, uint32_t id, uint32_t end, + uint32_t myid) { + struct to_json jsonResponse_Post[] = { + {.name = "err", .value = &err, .vtype = t_to_uint32_t, .stype = t_to_object}, + {.name = "id", .value = &id, .vtype = t_to_uint32_t}, + {.name = "end", .value = &end, .vtype = t_to_uint32_t}, + {.name = "myid", .value = &myid, .vtype = t_to_uint32_t}, + {NULL} + }; + + buf[0] = '['; + size_t len_json = json_generate(&buf[1], jsonResponse_Post, len_buf - 1); + buf[len_json + 1] = ']'; + + return len_json + 2; +} + +// Ответ с ошибкой и id end +size_t json_generate_err_id_end_answer(char *buf, size_t len_buf, uint32_t err, uint32_t id, uint32_t end) { + struct to_json jsonResponse_Post[] = { + {.name = "err", .value = &err, .vtype = t_to_uint32_t, .stype = t_to_object}, + {.name = "id", .value = &id, .vtype = t_to_uint32_t}, + {.name = "end", .value = &end, .vtype = t_to_uint32_t}, + {NULL} + }; + + buf[0] = '['; + size_t len_json = json_generate(&buf[1], jsonResponse_Post, len_buf - 1); + buf[len_json + 1] = ']'; + + return len_json + 2; +} + +// Ответ квитанция +size_t json_generate_answer_get_ex_elem_fs(char *buf, size_t len_buf, uint32_t err, uint32_t count, const char *dir) { + struct to_json jsonResponse_Post[] = { + {.name = "err", .value = &err, .vtype = t_to_uint32_t, .stype = t_to_object}, + {.name = "dir", .value = dir, .vtype = t_to_string, .stype = t_to_object}, + {.name = "count_all", .value = &count, .vtype = t_to_uint32_t, .stype = t_to_object}, + {NULL} + }; + + size_t len_json = json_generate(&buf[0], jsonResponse_Post, len_buf); + + return len_json; +} + +// Ответ квитанция +size_t json_generate_answer_get_elem_fs(char *buf, size_t len_buf, uint32_t err, const char *dir) { + struct to_json jsonResponse_Post[] = { + {.name = "err", .value = &err, .vtype = t_to_uint32_t, .stype = t_to_object}, + {.name = "dir", .value = dir, .vtype = t_to_string, .stype = t_to_object}, + {NULL} + }; + + size_t len_json = json_generate(&buf[0], jsonResponse_Post, len_buf); + + return len_json; +} + +// Ответ квитанция +size_t +json_generate_answer_get_elem_file_fs(char *buf, size_t len_buf, uint32_t err, const char *file_name, uint32_t pos, + uint32_t len) { + struct to_json jsonResponse_Post[] = { + {.name = "err", .value = &err, .vtype = t_to_uint32_t, .stype = t_to_object}, + {.name = "file", .value = file_name, .vtype = t_to_string, .stype = t_to_object}, + {.name = "pos", .value = &pos, .vtype = t_to_uint32_t, .stype = t_to_object}, + {.name = "len", .value = &len, .vtype = t_to_uint32_t, .stype = t_to_object}, + {NULL} + }; + + size_t len_json = json_generate(&buf[0], jsonResponse_Post, len_buf); + + return len_json; +} + +// Формирование элемента структуры файловой системы +size_t +json_generate_get_elem_fs(char *buf, size_t len_buf, const char *nam, uint8_t tpf, uint32_t fsz, const char *fdt) { + struct to_json jsonResponse_Post[] = { + {.name = "nam", .value = nam, .vtype = t_to_string, .stype = t_to_object}, + {.name = "tpf", .value = &tpf, .vtype = t_to_uint8_t}, + {.name = "fsz", .value = &fsz, .vtype = t_to_uint32_t}, + {.name = "fdt", .value = fdt, .vtype = t_to_string}, + {NULL} + }; + + size_t len_json = json_generate(&buf[0], jsonResponse_Post, len_buf); + + return len_json; +} + + +size_t json_generate_get_data(char *buf, size_t len_buf, + uint32_t timestamp_gnss, + uint32_t timestamp_block, + uint32_t timestamp_rtc, + uint32_t timestamp_work, + + uint32_t vcc, + + int32_t temp, + + int32_t *rssi, + + uint32_t tracert, + + uint32_t valid, + float latitude, + float longitude, + + tEventWebState *eventWebState, + uint32_t timestampWriteLog, + uint32_t timestampWriteLog2 +) { + + const struct to_json json_ArrayRssi[] = { + {.value = &rssi[0], .vtype = t_to_int32_t}, + {.value = &rssi[1], .vtype = t_to_int32_t}, + {.value = &rssi[2], .vtype = t_to_int32_t}, + {.value = &rssi[3], .vtype = t_to_int32_t}, + {.value = &rssi[4], .vtype = t_to_int32_t}, + {.value = &rssi[5], .vtype = t_to_int32_t}, + {.value = &rssi[6], .vtype = t_to_int32_t}, + {.value = &rssi[7], .vtype = t_to_int32_t}, + {.value = &rssi[8], .vtype = t_to_int32_t}, + {.value = &rssi[9], .vtype = t_to_int32_t}, + {NULL} + }; + + + struct to_json jsonResponse_Post[] = { + {.name = "timestamp_gnss", .value = ×tamp_gnss, .vtype = t_to_uint32_t, .stype = t_to_object}, + {.name = "timestamp_block", .value = ×tamp_block, .vtype = t_to_uint32_t, .stype = t_to_object}, + {.name = "timestamp_rtc", .value = ×tamp_rtc, .vtype = t_to_uint32_t, .stype = t_to_object}, + + {.name = "timestamp_work", .value = ×tamp_work, .vtype = t_to_uint32_t, .stype = t_to_object}, + + {.name = "vcc", .value = &vcc, .vtype = t_to_uint32_t, .stype = t_to_object}, + + {.name = "temp", .value = &temp, .vtype = t_to_int32_t, .stype = t_to_object}, + + {.name = "rssi", .value = &json_ArrayRssi, .vtype = t_to_array, .stype = t_to_object}, + + {.name = "tracert_view", .value = &tracert, .vtype = t_to_uint32_t, .stype = t_to_object}, + + {.name = "valid_gnss", .value = &valid, .vtype = t_to_uint32_t, .stype = t_to_object}, + {.name = "latitude", .value = &latitude, .vtype = t_to_float, .stype = t_to_object}, + {.name = "longitude", .value = &longitude, .vtype = t_to_float}, + + {.name = "outbox", .value = &eventWebState->EVENT_OUTBOX, .vtype = t_to_uint32_t, .stype = t_to_object}, + {.name = "sentbox", .value = &eventWebState->EVENT_SENTBOX, .vtype = t_to_uint32_t}, + {.name = "inbox", .value = &eventWebState->EVENT_INBOX, .vtype = t_to_uint32_t}, + {.name = "tracert", .value = &eventWebState->EVENT_TRACERT, .vtype = t_to_uint32_t}, + {.name = "alma", .value = &eventWebState->EVENT_ALMA, .vtype = t_to_uint32_t}, + {.name = "log", .value = ×tampWriteLog, .vtype = t_to_uint32_t}, + {.name = "log2", .value = ×tampWriteLog2, .vtype = t_to_uint32_t}, + + + {NULL} + }; + + buf[0] = '['; + size_t len_json = json_generate(&buf[1], jsonResponse_Post, len_buf - 1); + buf[len_json + 1] = ']'; + + return len_json + 2; + +} + + +// Ответ timestamp +size_t json_generate_timestamp_answer(char *buf, size_t len_buf, uint32_t timestamp_gnss, uint32_t timestamp_block, + uint32_t timestamp_work) { + struct to_json jsonResponse_Post[] = { + {.name = "timestamp_gnss", .value = ×tamp_gnss, .vtype = t_to_uint32_t, .stype = t_to_object}, + {.name = "timestamp_block", .value = ×tamp_block, .vtype = t_to_uint32_t, .stype = t_to_object}, + {.name = "timestamp_work", .value = ×tamp_work, .vtype = t_to_uint32_t, .stype = t_to_object}, + {NULL} + }; + + buf[0] = '['; + size_t len_json = json_generate(&buf[1], jsonResponse_Post, len_buf - 1); + buf[len_json + 1] = ']'; + + return len_json + 2; +} + +// Ответ координат +size_t json_generate_coordinates_answer(char *buf, size_t len_buf, uint32_t valid, float latitude, float longitude, + uint32_t routing, uint32_t angle, uint32_t timeZoneInSat) { + struct to_json jsonResponse_Post[] = { +// {.name = "valid_gnss", .value = &valid, .vtype = t_to_uint32_t, .stype = t_to_object}, +// {.name = "latitude", .value = &latitude, .vtype = t_to_float, .stype = t_to_object}, +// {.name = "longitude", .value = &longitude, .vtype = t_to_float}, + {.name = "routing", .value = &routing, .vtype = t_to_uint32_t, .stype = t_to_object}, + {.name = "time", .value = &timeZoneInSat, .vtype = t_to_uint32_t}, + {.name = "dist", .value = &angle, .vtype = t_to_uint32_t}, + {NULL} + }; + + + buf[0] = '['; + size_t len_json = json_generate(&buf[1], jsonResponse_Post, len_buf - 1); + buf[len_json + 1] = ']'; + + return len_json + 2; +} + +// Ответ АДЦ +size_t json_generate_adc_answer(char *buf, size_t len_buf, uint32_t vcc) { + struct to_json jsonResponse_Post[] = { + {.name = "vcc", .value = &vcc, .vtype = t_to_uint32_t, .stype = t_to_object}, + {NULL} + }; + + + buf[0] = '['; + size_t len_json = json_generate(&buf[1], jsonResponse_Post, len_buf - 1); + buf[len_json + 1] = ']'; + + return len_json + 2; +} + + +// Ответ stat +size_t json_generate_stat_answer(char *buf, size_t len_buf, uint32_t NumFileOutBox, uint32_t NumFileInbox, + uint32_t CntMsgsOutBox, uint32_t stn1, uint32_t stn2, uint32_t stn3) { + + if (stn1) + stn1 = 1; + + if (stn2) + stn2 = 2; + + if (stn3) + stn3 = 3; + + const struct to_json jsonResponse_Post1[] = { + {.name = "stn", .value = &stn1, .vtype = t_to_uint32_t, .stype = t_to_object}, + {.name = "typ", .value = "dec", .vtype = t_to_string}, + {.name = "val", .value = &NumFileOutBox, .vtype = t_to_uint32_t}, + {.name = "hlp", .value = "NumFileOutBox", .vtype = t_to_string}, + {NULL} + }; + + const struct to_json jsonResponse_Post2[] = { + {.name = "stn", .value = &stn2, .vtype = t_to_uint32_t, .stype = t_to_object}, + {.name = "typ", .value = "dec", .vtype = t_to_string}, + {.name = "val", .value = &NumFileInbox, .vtype = t_to_uint32_t}, + {.name = "hlp", .value = "NumFileInbox", .vtype = t_to_string}, + {NULL} + }; + + const struct to_json jsonResponse_Post3[] = { + {.name = "stn", .value = &stn3, .vtype = t_to_uint32_t, .stype = t_to_object}, + {.name = "typ", .value = "dec", .vtype = t_to_string}, + {.name = "val", .value = &CntMsgsOutBox, .vtype = t_to_uint32_t}, + {.name = "hlp", .value = "CntMsgsOutBox", .vtype = t_to_string}, + {NULL} + }; + + + buf[0] = '['; + buf[1] = '\0'; + + char bufTmp[255]; + + if (stn1) { + json_generate(bufTmp, jsonResponse_Post1, sizeof(bufTmp)); + + if ((stn2) || (stn3)) + strcat(bufTmp, ","); + + strcat(buf, bufTmp); + } + + if (stn2) { + json_generate(bufTmp, jsonResponse_Post2, sizeof(bufTmp)); + + if (stn3) + strcat(bufTmp, ","); + + strcat(buf, bufTmp); + } + + if (stn3) { + json_generate(bufTmp, jsonResponse_Post3, sizeof(bufTmp)); + strcat(buf, bufTmp); + } + + strcat(buf, "]"); + + return strlen(buf); +} + +// Ответ rssi +size_t json_generate_rssi_answer(char *buf, size_t len_buf, int32_t rssi) { + struct to_json jsonResponse_Post[] = { + {.name = "rssi", .value = &rssi, .vtype = t_to_int32_t, .stype = t_to_object}, + {NULL} + }; + + buf[0] = '['; + size_t len_json = json_generate(&buf[1], jsonResponse_Post, len_buf - 1); + buf[len_json + 1] = ']'; + + return len_json + 2; +} + +// Текущий уровень авторизации +size_t json_generate_auth_send_answer(char *buf, size_t len_buf, uint32_t auth) { + + uint32_t num = 103; + uint32_t grp = 15; + +// AUTH_NONE = 0, +// AUTH_USER = 1, +// AUTH_INTEG = 2, +// AUTH_ADMIN = 3 + + uint32_t val = 0; + if (auth == 1) + val = 103; + if (auth == 2) + val = 131; + if (auth == 3) + val = 133; + + + struct to_json jsonResponse_Post[] = { + {.name = "num", .value = &num, .vtype = t_to_uint32_t, .stype = t_to_object}, + {.name = "grp", .value = &grp, .vtype = t_to_uint32_t, .stype = t_to_object}, + {.name = "typ", .value = "dec", .vtype = t_to_string, .stype = t_to_object}, + {.name = "val", .value = &val, .vtype = t_to_uint32_t, .stype = t_to_object}, + {.name = "typ", .value = "IsAuthorizedNow", .vtype = t_to_string, .stype = t_to_object}, + {NULL} + }; + + buf[0] = '['; + size_t len_json = json_generate(&buf[1], jsonResponse_Post, len_buf - 1); + buf[len_json + 1] = ']'; + + return len_json + 2; +} + +// Ответ vars +size_t json_generate_vars_send_answer(char *buf, size_t len_buf, uint32_t at, const char *username, uint32_t diskall, + uint32_t diskfree) { + + struct to_json jsonResponse_Post[] = { + {.name = "numat", .value = &at, .vtype = t_to_int32_t, .stype = t_to_object}, + {.name = "username", .value = username, .vtype = t_to_string, .stype = t_to_object}, + {.name = "disksize", .value = &diskall, .vtype = t_to_uint32_t, .stype = t_to_object}, + {.name = "diskfree", .value = &diskfree, .vtype = t_to_uint32_t, .stype = t_to_object}, + {NULL} + }; + + buf[0] = '['; + size_t len_json = json_generate(&buf[1], jsonResponse_Post, len_buf - 1); + buf[len_json + 1] = ']'; + + return len_json + 2; +} + +// Ответ версии +size_t json_generate_version_answer(char *buf, size_t len_buf, char *versionModem, char *versionCrypto) { + + + char META_HW_NAME_BUF[32]; + memset(META_HW_NAME_BUF, 0, sizeof(META_HW_NAME_BUF)); + //memcpy(&META_HW_NAME_BUF, META_HW_NAME, META_HW_NAME_SIZE); + strcat(META_HW_NAME_BUF, "MAIN_APP"); + + + char META_FW_NAME_BUF[32]; + memset(META_FW_NAME_BUF, 0, sizeof(META_FW_NAME_BUF)); + memcpy(&META_FW_NAME_BUF, META_FW_NAME, META_FW_NAME_SIZE); + + char *firmwareModemBoot = "null\0"; + firmwareModemBoot = (char *) strchr(versionModem, ','); + if (firmwareModemBoot != NULL) { + *firmwareModemBoot = '\0'; + firmwareModemBoot++; + } + + char *firmwareModemBootEnd = (char *) strchr(firmwareModemBoot, '\r'); + if (firmwareModemBootEnd != NULL) { + *firmwareModemBootEnd = '\0'; + firmwareModemBootEnd++; + } + + char *firmwareCryptoBoot = "null\0"; + firmwareCryptoBoot = (char *) strchr(versionCrypto, ','); + if (firmwareCryptoBoot != NULL) { + *firmwareCryptoBoot = '\0'; + firmwareCryptoBoot++; + } + + char *firmwareCryptoBootEnd = (char *) strchr(firmwareCryptoBoot, '\r'); + if (firmwareCryptoBootEnd != NULL) { + *firmwareCryptoBootEnd = '\0'; + firmwareCryptoBootEnd++; + } + + struct to_json jsonResponse_Post[] = { + {.name = "hardwareMain", .value = META_HW_NAME_BUF, .vtype = t_to_string, .stype = t_to_object}, + {.name = "firmwareMain", .value = META_FW_NAME_BUF, .vtype = t_to_string}, + {.name = "hardwareModem", .value = versionModem, .vtype = t_to_string}, + {.name = "firmwareModem", .value = firmwareModemBoot, .vtype = t_to_string}, + {.name = "hardwareCrypto", .value = versionCrypto, .vtype = t_to_string}, + {.name = "firmwareCrypto", .value = firmwareCryptoBoot, .vtype = t_to_string}, + + {NULL} + }; + + buf[0] = '['; + size_t len_json = json_generate(&buf[1], jsonResponse_Post, len_buf - 1); + buf[len_json + 1] = ']'; + + return len_json + 2; + + +/* + char META_FW_NAME_BUF[32]; + memset(META_FW_NAME_BUF, 0, sizeof(META_FW_NAME_BUF)); + memcpy(META_FW_NAME_BUF, META_FW_NAME, META_FW_NAME_SIZE); + + + struct to_json jsonResponse_Post[] = { + {.name = "hardware", .value = "ГОНЕЦ PRO", .vtype = t_to_string, .stype = t_to_object}, + {.name = "firmware", .value = META_FW_NAME_BUF, .vtype = t_to_string}, + {.name = "ATnum", .value = &ATnum, .vtype = t_to_uint32_t}, + {NULL} + }; + + buf[0] = '['; + size_t len_json = json_generate(&buf[1], jsonResponse_Post, len_buf - 1); + buf[len_json + 1] = ']'; + + return len_json + 2; + */ +} + +/* +typedef struct { + struct to_json objJson[6]; +} tObjJson; + +tObjJson jsonResponse_States[maxFilesOutBox]; +struct to_json objsMesJsonLinks[maxFilesOutBox + 1]; + +// Ответ процент передачи +size_t json_generate_proc_send_answer(char *buf, size_t len_buf, tFileSendInfoForJson *fileSendInfo) { + + int j = 0; + for (int i = 0; i < maxFilesOutBox; ++i) { + if (fileSendInfo[i].valid) { + + struct to_json jsonResponse_State[] = { + {.name = "mnum", .value = &fileSendInfo[i].mnum, .vtype = t_to_uint32_t, .stype = t_to_object}, + {.name = "kvs", .value = &fileSendInfo[i].kvs, .vtype = t_to_uint8_t}, + {.name = "isSendAll", .value = &fileSendInfo[i].isSendAll, .vtype = t_to_uint8_t}, + {.name = "bytes_sending", .value = &fileSendInfo[i].bytes_sending, .vtype = t_to_uint32_t}, + {.name = "bytes_no_sending", .value = &fileSendInfo[i].bytes_no_sending, .vtype = t_to_uint32_t}, + {NULL} + }; + + jsonResponse_States[j].objJson[0] = jsonResponse_State[0]; + jsonResponse_States[j].objJson[1] = jsonResponse_State[1]; + jsonResponse_States[j].objJson[2] = jsonResponse_State[2]; + jsonResponse_States[j].objJson[3] = jsonResponse_State[3]; + jsonResponse_States[j].objJson[4] = jsonResponse_State[4]; + jsonResponse_States[j].objJson[5] = jsonResponse_State[5]; + + const struct to_json objJsonLink[] = { + {.value = &jsonResponse_States[j].objJson, .vtype = t_to_object}, + {NULL} + }; + + objsMesJsonLinks[j] = objJsonLink[0]; + objsMesJsonLinks[j + 1] = objJsonLink[1]; + + ++j; + } + } + + + struct to_json jsonResponse_Post[] = { + {.name = "InfoSend", .value = &objsMesJsonLinks, .vtype = t_to_array, .stype = t_to_object}, + {NULL} + }; + + if (j == 0) { + buf[0] = '['; + buf[1] = ']'; + buf[2] = '\0'; + return 2; + } else { + size_t len_json = json_generate(buf, jsonResponse_Post, len_buf); + return len_json; + + } + +} +*/ diff --git a/modular.json b/modular.json new file mode 100644 index 0000000..b3bcd33 --- /dev/null +++ b/modular.json @@ -0,0 +1,18 @@ +{ + "dep": [ + { + "type": "git", + "provider": "GONEC", + "repo": "JSON" + } + ], + + "cmake": { + "inc_dirs": [ + "Inc" + ], + "srcs": [ + "Src/**.c" + ] + } +} \ No newline at end of file