// // 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; } } */