// // Created by cfif on 09.11.22. // #include "Settings_General.h" #include "tiny-json.h" #include #include "JSONSettings.h" #include "MainModesArbiter.h" #include "httpd_base_func.h" extern tMma MAIN_ENV; const struct to_json jsonSettings_ArrayYesNo[] = { {.value = "No", .vtype = t_to_string}, {.value = "Yes", .vtype = t_to_string}, {NULL} }; const struct to_json jsonSettings_ArraySpeed1[] = { {.value = "none", .vtype = t_to_string}, {.value = "none", .vtype = t_to_string}, {.value = "4800", .vtype = t_to_string}, {NULL} }; const struct to_json jsonSettings_ArraySpeed2[] = { {.value = "none", .vtype = t_to_string}, {.value = "2400", .vtype = t_to_string}, {.value = "4800", .vtype = t_to_string}, {.value = "9600", .vtype = t_to_string}, {.value = "19200", .vtype = t_to_string}, {.value = "38400", .vtype = t_to_string}, {NULL} }; const struct to_json jsonSettings_ArraySpeed3[] = { {.value = "none", .vtype = t_to_string}, {.value = "none", .vtype = t_to_string}, {.value = "none", .vtype = t_to_string}, {.value = "9600", .vtype = t_to_string}, {.value = "19200", .vtype = t_to_string}, {.value = "38400", .vtype = t_to_string}, {.value = "76800", .vtype = t_to_string}, {NULL} }; const struct to_json jsonSettings_ArrayAccess[] = { {.value = "Free", .vtype = t_to_string}, {.value = "Dedicated", .vtype = t_to_string}, {NULL} }; const struct to_json jsonSettings_ArrayTypeAddressing[] = { {.value = "Direct", .vtype = t_to_string}, {.value = "Indirect", .vtype = t_to_string}, {NULL} }; const struct to_json jsonSettings_ArrayPwr[] = { {.value = "10", .vtype = t_to_string}, {.value = "5", .vtype = t_to_string}, {.value = "2", .vtype = t_to_string}, {.value = "1", .vtype = t_to_string}, {NULL} }; const struct to_json jsonSettings_TypeFuel[] = { {.value = "GASOLINE_TANK_PRESENT", .vtype = t_to_string}, {.value = "DIESEL_TANK_PRESENT", .vtype = t_to_string}, {.value = "COMPRESSED_NATURAL_GAS", .vtype = t_to_string}, {.value = "LIQUID_PROPANE_GAS", .vtype = t_to_string}, {.value = "ELECTRIC_ENERGY_STORAGE", .vtype = t_to_string}, {.value = "HYDROGEN_STORAGE", .vtype = t_to_string}, {NULL} }; const struct to_json jsonSettings_PortAssign[] = { {.value = "External protocol", .vtype = t_to_string}, {.value = "Telemetry protocol", .vtype = t_to_string}, {.value = "Ams protokol", .vtype = t_to_string}, {.value = "LoRaWan protokol", .vtype = t_to_string}, {NULL} }; const struct to_json jsonSettings_TransmissionModeData[] = { {.value = "Analog sensors", .vtype = t_to_string}, {.value = "Analog sensor and addition data", .vtype = t_to_string}, {NULL} }; const struct to_json jsonSettings_ArrayMaxSize[] = { {.value = "1300", .vtype = t_to_string}, {.value = "2600", .vtype = t_to_string}, {.value = "3900", .vtype = t_to_string}, {.value = "5200", .vtype = t_to_string}, {.value = "6500", .vtype = t_to_string}, {.value = "7800", .vtype = t_to_string}, {.value = "9100", .vtype = t_to_string}, {.value = "10400", .vtype = t_to_string}, {.value = "11700", .vtype = t_to_string}, {.value = "13000", .vtype = t_to_string}, {.value = "14300", .vtype = t_to_string}, {.value = "15600", .vtype = t_to_string}, {.value = "16900", .vtype = t_to_string}, {.value = "18200", .vtype = t_to_string}, {.value = "19500", .vtype = t_to_string}, {.value = "20800", .vtype = t_to_string}, {NULL} }; uint8_t constCurData = 0xFF; const tSettings settings[] = { // Общие {.enabled = true, .section = "General", .num = 1, .grp = 1, .from = 0, .to = 99999, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_General.ATnum_v, .hlp = "ATnum"}, {.enabled = true, .section = "General", .num = 2, .grp = 1, .from = 0, .to = 5, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_General.ATpriority_v, .hlp = "ATpriority"}, {.enabled = false, .section = "General", .num = 3, .grp = 1, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_General.ATurgency_v, .hlp = "ATurgency"}, {.enabled = true, .section = "General", .num = 4, .grp = 1, .from = 0, .to = 0, .typ = "txt", .vtype = t_to_string, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_General.loginADMIN_v, .hlp = "loginADMIN"}, {.enabled = true, .section = "General", .num = 5, .grp = 1, .from = 0, .to = 0, .typ = "psw", .vtype = t_to_string, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_General.passADMIN_v, .hlp = "passADMIN"}, {.enabled = true, .section = "General", .num = 6, .grp = 1, .from = 0, .to = 0, .typ = "txt", .vtype = t_to_string, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_General.loginINTEG_v, .hlp = "loginINTEG"}, {.enabled = true, .section = "General", .num = 7, .grp = 1, .from = 0, .to = 0, .typ = "psw", .vtype = t_to_string, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_General.passINTEG_v, .hlp = "passINTEG"}, {.enabled = true, .section = "General", .num = 8, .grp = 1, .from = 0, .to = 0, .typ = "txt", .vtype = t_to_string, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_General.loginUSER_v, .hlp = "loginUSER"}, {.enabled = true, .section = "General", .num = 9, .grp = 1, .from = 0, .to = 0, .typ = "txt", .vtype = t_to_string, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_General.UserPass_v, .hlp = "UserPass"}, {.enabled = true, .section = "General", .num = 10, .grp = 1, .from = 0, .to = 0, .typ = "txt", .vtype = t_to_string, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_General.BannedSAT_v, .hlp = "BannedSAT"}, {.enabled = true, .section = "General", .num = 11, .grp = 1, .from = -11, .to = 12, .typ = "dec", .vtype = t_to_int32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_General.GMTcorr_v, .hlp = "GMTcorr"}, {.enabled = false, .section = "General", .num = 12, .grp = 1, .from = 0, .to = 65535, .typ = "sel", .vtype = t_to_array, .cur = &MAIN_ENV.storageIni.runtime.Settings_General.GreenMode_v, .val = &jsonSettings_ArrayYesNo, .hlp = "GreenMode"}, {.enabled = true, .section = "General", .num = 13, .grp = 1, .from = -90, .to = 90, .typ = "dec", .vtype = t_to_int32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_General.DefLatiGrad_v, .hlp = "DefLatiGrad"}, {.enabled = true, .section = "General", .num = 14, .grp = 1, .from = 0, .to = 59, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_General.DefLatiMin_v, .hlp = "DefLatiMin"}, {.enabled = true, .section = "General", .num = 15, .grp = 1, .from = -180, .to = 180, .typ = "dec", .vtype = t_to_int32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_General.DefLongGrad_v, .hlp = "DefLongGrad"}, {.enabled = true, .section = "General", .num = 16, .grp = 1, .from = 0, .to = 59, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_General.DefLongMin_v, .hlp = "DefLongMin"}, {.enabled = true, .section = "General", .num = 17, .grp = 1, .from = 0, .to = 65535, .typ = "sel", .vtype = t_to_array, .cur = &MAIN_ENV.storageIni.runtime.Settings_General.SaveToSentBox_v, .val = &jsonSettings_ArrayYesNo, .hlp = "SaveToSentBox"}, // Частота и скорость {.enabled = true, .section = "Frequency and speed", .num = 18, .grp = 2, .from = 0, .to = 240, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Frequency_Speed.freqMC1_v, .hlp = "freqMC1"}, {.enabled = true, .section = "Frequency and speed", .num = 19, .grp = 2, .from = 0, .to = 240, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Frequency_Speed.freqMC2_v, .hlp = "freqMC2"}, {.enabled = true, .section = "Frequency and speed", .num = 20, .grp = 2, .from = 0, .to = 65535, .typ = "sel", .vtype = t_to_array, .cur = &MAIN_ENV.storageIni.runtime.Settings_Frequency_Speed.SpeedPKsig_v, .val = &jsonSettings_ArraySpeed1, .hlp = "SpeedPKsig"}, {.enabled = true, .section = "Frequency and speed", .num = 21, .grp = 2, .from = 0, .to = 65535, .typ = "sel", .vtype = t_to_array, .cur = &MAIN_ENV.storageIni.runtime.Settings_Frequency_Speed.SpeedPKdata_v, .val = &jsonSettings_ArraySpeed2, .hlp = "SpeedPKdata"}, {.enabled = true, .section = "Frequency and speed", .num = 22, .grp = 2, .from = 0, .to = 65535, .typ = "sel", .vtype = t_to_array, .cur = &MAIN_ENV.storageIni.runtime.Settings_Frequency_Speed.SpeedOKsig_v, .val = &jsonSettings_ArraySpeed3, .hlp = "SpeedOKsig"}, {.enabled = true, .section = "Frequency and speed", .num = 23, .grp = 2, .from = 0, .to = 65535, .typ = "sel", .vtype = t_to_array, .cur = &MAIN_ENV.storageIni.runtime.Settings_Frequency_Speed.SpeedOKdata_v, .val = &jsonSettings_ArraySpeed3, .hlp = "SpeedOKdata"}, {.enabled = false, .section = "Frequency and speed", .num = 24, .grp = 2, .from = 0, .to = 240, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Frequency_Speed.timeRespOK_v, .hlp = "timeRespOK"}, {.enabled = true, .section = "Frequency and speed", .num = 25, .grp = 2, .from = 0, .to = 240, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Frequency_Speed.SItimeAdv_v, .hlp = "SItimeAdv"}, {.enabled = true, .section = "Frequency and speed", .num = 26, .grp = 2, .from = -70, .to = -60, .typ = "dec", .vtype = t_to_int32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Frequency_Speed.minRSSI_v, .hlp = "minRSSI"}, {.enabled = false, .section = "Frequency and speed", .num = 27, .grp = 2, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Frequency_Speed.TrebootREC_v, .hlp = "TrebootREC"}, {.enabled = true, .section = "Frequency and speed", .num = 28, .grp = 2, .from = 1, .to = 500000, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Frequency_Speed.TimeLifeRegistr_v, .hlp = "TimeLifeRegistr"}, {.enabled = true, .section = "Frequency and speed", .num = 29, .grp = 2, .from = 0, .to = 60, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Frequency_Speed.RegionRegistr_v, .hlp = "RegionRegistr"}, {.enabled = true, .section = "Frequency and speed", .num = 30, .grp = 2, .from = 0, .to = 5000, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Frequency_Speed.MaxDistanceSAT_v, .hlp = "MaxDistanceSAT"}, {.enabled = true, .section = "Frequency and speed", .num = 110, .grp = 2, .from = 0, .to = 0, .typ = "txt", .vtype = t_to_string, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Frequency_Speed.AllowedReg_v, .hlp = "AllowedREG"}, // Основной режим доступа {.enabled = false, .section = "Basic access mode", .num = 31, .grp = 3, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Basic_Access.FlagAccess_v, .hlp = "FlagAccess"}, {.enabled = false, .section = "Basic access mode", .num = 32, .grp = 3, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Basic_Access.SpecRegion_v, .hlp = "SpecRegion"}, {.enabled = true, .section = "Basic access mode", .num = 33, .grp = 3, .from = 0, .to = 65535, .typ = "sel", .vtype = t_to_array, .cur = &MAIN_ENV.storageIni.runtime.Settings_Basic_Access.TypeAccess_v, .val = &jsonSettings_ArrayAccess, .hlp = "TypeAccess"}, {.enabled = true, .section = "Basic access mode", .num = 34, .grp = 3, .from = 0, .to = 255, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Basic_Access.NumGrpFrAcc_v, .hlp = "NumGrpFrAcc"}, {.enabled = true, .section = "Basic access mode", .num = 35, .grp = 3, .from = 0, .to = 255, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Basic_Access.NumGrpDedi_v, .hlp = "NumGrpDedi"}, {.enabled = true, .section = "Basic access mode", .num = 36, .grp = 3, .from = 0, .to = 1200, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Basic_Access.NumChDedi_v, .hlp = "NumChDedi"}, {.enabled = true, .section = "Basic access mode", .num = 37, .grp = 3, .from = 0, .to = 65535, .typ = "sel", .vtype = t_to_array, .cur = &MAIN_ENV.storageIni.runtime.Settings_Basic_Access.LinkGeoReg_v, .val = &jsonSettings_ArrayYesNo, .hlp = "LinkGeoReg"}, {.enabled = true, .section = "Basic access mode", .num = 38, .grp = 3, .from = 0, .to = 3, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Basic_Access.PerReqDown_v, .hlp = "PerReqDown"}, {.enabled = true, .section = "Basic access mode", .num = 39, .grp = 3, .from = 0, .to = 65535, .typ = "sel", .vtype = t_to_array, .cur = &MAIN_ENV.storageIni.runtime.Settings_Basic_Access.MaxSzDataOnKB_v, .val = &jsonSettings_ArrayMaxSize, .hlp = "MaxSzDataOnKB"}, {.enabled = true, .section = "Basic access mode", .num = 40, .grp = 3, .from = 0, .to = 99999, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Basic_Access.ServerATnum_v, .hlp = "ServerATnum"}, {.enabled = false, .section = "Basic access mode", .num = 41, .grp = 3, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Basic_Access.CountATcalls_v, .hlp = "CountATcalls"}, {.enabled = true, .section = "Basic access mode", .num = 42, .grp = 3, .from = 0, .to = 65535, .typ = "sel", .vtype = t_to_array, .cur = &MAIN_ENV.storageIni.runtime.Settings_Basic_Access.TypeAddressing_v, .val = &jsonSettings_ArrayTypeAddressing, .hlp = "TypeAddressing"}, {.enabled = true, .section = "Basic access mode", .num = 43, .grp = 3, .from = 0, .to = 99999, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Basic_Access.NumRegStation_v, .hlp = "NumRegStation"}, // Приемопередатчик {.enabled = true, .section = "Transceiver", .num = 44, .grp = 7, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Transceiver.VCOADJ_v, .hlp = "VCOADJ:"}, {.enabled = true, .section = "Transceiver", .num = 45, .grp = 7, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Transceiver.VCOBIAS_v, .hlp = "VCOBIAS:"}, {.enabled = true, .section = "Transceiver", .num = 46, .grp = 7, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Transceiver.PABIAS_v, .hlp = "PABIAS:"}, {.enabled = true, .section = "Transceiver", .num = 47, .grp = 7, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Transceiver.CHARGE_v, .hlp = "CHARGE_PUMP:"}, {.enabled = true, .section = "Transceiver", .num = 48, .grp = 7, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Transceiver.PA_LEVEL_v, .hlp = "PA_LEVEL:"}, {.enabled = true, .section = "Transceiver", .num = 49, .grp = 7, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Transceiver.FREQERR_v, .hlp = "FREQERR:"}, {.enabled = true, .section = "Transceiver", .num = 50, .grp = 7, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Transceiver.RecV2CorrFreq_v, .hlp = "RecV2CorrFreq"}, {.enabled = true, .section = "Transceiver", .num = 51, .grp = 7, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Transceiver.RecV2CFtoDSP_v, .hlp = "RecV2CFtoDSP"}, {.enabled = true, .section = "Transceiver", .num = 52, .grp = 7, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Transceiver.TypeREC_v, .hlp = "TypeREC"}, {.enabled = true, .section = "Transceiver", .num = 53, .grp = 7, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Transceiver.CorrectVolt_v, .hlp = "CorrectVolt"}, //int {.enabled = true, .section = "Transceiver", .num = 54, .grp = 7, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Transceiver.CorrVnan_v, .hlp = "CorrVnan(10mv)"}, //int {.enabled = true, .section = "Transceiver", .num = 55, .grp = 7, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Transceiver.SWRlim_v, .hlp = "SWR lim(x100)"}, {.enabled = true, .section = "Transceiver", .num = 56, .grp = 7, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Transceiver.AFUcorr_v, .hlp = "AFU corr(x100)"}, //int // Режим TRACER {.enabled = true, .section = "TRACER mode", .num = 57, .grp = 8, .from = 0, .to = 65535, .typ = "sel", .vtype = t_to_array, .cur = &MAIN_ENV.storageIni.runtime.Settings_Tracert.mTracer_v, .val = &jsonSettings_ArrayYesNo, .hlp = "mTracer"}, {.enabled = true, .section = "TRACER mode", .num = 125, .grp = 8, .from = 0, .to = 65535, .typ = "sel", .vtype = t_to_array, .cur = &MAIN_ENV.storageIni.runtime.Settings_Tracert.TransferCoordSettings_v, .val = &jsonSettings_ArrayYesNo, .hlp = "TransferCoordSettings"}, {.enabled = true, .section = "TRACER mode", .num = 58, .grp = 8, .from = 5, .to = 3600, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Tracert.PeSvCoor_v, .hlp = "PeSvCoor"}, {.enabled = false, .section = "TRACER mode", .num = 59, .grp = 8, .from = 0, .to = 15, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Tracert.cntPackExtCoord_v, .hlp = "cntPackExtCoord"}, {.enabled = true, .section = "TRACER mode", .num = 60, .grp = 8, .from = 1, .to = 38, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Tracert.minPtoSe_v, .hlp = "minPtoSe"}, {.enabled = false, .section = "TRACER mode", .num = 61, .grp = 8, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Tracert.MAXalaS_v, .hlp = "MAXalaS"}, {.enabled = false, .section = "TRACER mode", .num = 62, .grp = 8, .from = 0, .to = 65535, .typ = "sel", .vtype = t_to_array, .cur = &MAIN_ENV.storageIni.runtime.Settings_Tracert.ExtendedHeader_v, .val = &jsonSettings_ArrayYesNo, .hlp = "ExtendedHeader"}, {.enabled = true, .section = "TRACER mode", .num = 63, .grp = 8, .from = 0, .to = 65535, .typ = "sel", .vtype = t_to_array, .cur = &MAIN_ENV.storageIni.runtime.Settings_Tracert.trSendSpeed_v, .val = &jsonSettings_ArrayYesNo, .hlp = "trSendSpeed"}, {.enabled = true, .section = "TRACER mode", .num = 64, .grp = 8, .from = 0, .to = 99999, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Tracert.TrATsrv_v, .hlp = "TrATsrv"}, {.enabled = false, .section = "TRACER mode", .num = 65, .grp = 8, .from = 0, .to = 10, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Tracert.CoordUrgency_v, .hlp = "CoordUrgency"}, {.enabled = true, .section = "TRACER mode", .num = 66, .grp = 8, .from = 0, .to = 65535, .typ = "sel", .vtype = t_to_array, .cur = &MAIN_ENV.storageIni.runtime.Settings_Tracert.SensorAD0volt_v, .val = &jsonSettings_ArrayYesNo, .hlp = "SensorAD0volt"}, {.enabled = false, .section = "TRACER mode", .num = 67, .grp = 8, .from = 0, .to = 65535, .typ = "sel", .vtype = t_to_array, .cur = &MAIN_ENV.storageIni.runtime.Settings_Tracert.IgnitionInverse_v, .val = &jsonSettings_ArrayYesNo, .hlp = "IgnitionInverse"}, {.enabled = false, .section = "TRACER mode", .num = 68, .grp = 8, .from = 0, .to = 65535, .typ = "sel", .vtype = t_to_array, .cur = &MAIN_ENV.storageIni.runtime.Settings_Tracert.BatMode_v, .val = &jsonSettings_ArrayYesNo, .hlp = "BatMode"}, {.enabled = false, .section = "TRACER mode", .num = 69, .grp = 8, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Tracert.BatDistCalcSAT_v, .hlp = "BatDistCalcSAT"}, {.enabled = false, .section = "TRACER mode", .num = 70, .grp = 8, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Tracert.BatPwONsetPoint_v, .hlp = "BatPwONsetPoint"}, {.enabled = false, .section = "TRACER mode", .num = 71, .grp = 8, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Tracert.BatCntONtoTRANS_v, .hlp = "BatCntONtoTRANS"}, {.enabled = false, .section = "TRACER mode", .num = 72, .grp = 8, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Tracert.CntPbatModeRep_v, .hlp = "CntPbatModeRep"}, {.enabled = false, .section = "TRACER mode", .num = 73, .grp = 8, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Tracert.BatTimeOffSend_v, .hlp = "BatTimeOffSend"}, {.enabled = false, .section = "TRACER mode", .num = 74, .grp = 8, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Tracert.BatTimeOffSetP_v, .hlp = "BatTimeOffSetP"}, {.enabled = false, .section = "TRACER mode", .num = 75, .grp = 8, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Tracert.BatTimeOffIGN_v, .hlp = "BatTimeOffIGN"}, {.enabled = false, .section = "TRACER mode", .num = 76, .grp = 8, .from = 0, .to = 65535, .typ = "sel", .vtype = t_to_array, .cur = &MAIN_ENV.storageIni.runtime.Settings_Tracert.BatSENDshedule_v, .val = &jsonSettings_ArrayYesNo, .hlp = "BatSENDshedule"}, {.enabled = false, .section = "TRACER mode", .num = 77, .grp = 8, .from = 0, .to = 0, .typ = "txt", .vtype = t_to_string, .cur = &constCurData, .val = MAIN_ENV.storageIni.runtime.Settings_Tracert.BatSENDsheT1_v, .hlp = "BatSENDsheT1"}, {.enabled = false, .section = "TRACER mode", .num = 78, .grp = 8, .from = 0, .to = 0, .typ = "txt", .vtype = t_to_string, .cur = &constCurData, .val = MAIN_ENV.storageIni.runtime.Settings_Tracert.BatSENDsheT2_v, .hlp = "BatSENDsheT2"}, {.enabled = false, .section = "TRACER mode", .num = 79, .grp = 8, .from = 0, .to = 0, .typ = "txt", .vtype = t_to_string, .cur = &constCurData, .val = MAIN_ENV.storageIni.runtime.Settings_Tracert.BatSENDsheT3_v, .hlp = "BatSENDsheT3"}, {.enabled = false, .section = "TRACER mode", .num = 80, .grp = 8, .from = 0, .to = 0, .typ = "txt", .vtype = t_to_string, .cur = &constCurData, .val = MAIN_ENV.storageIni.runtime.Settings_Tracert.BatSENDsheT4_v, .hlp = "BatSENDsheT4"}, {.enabled = true, .section = "TRACER mode", .num = 111, .grp = 8, .from = 1, .to = 16, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Tracert.MaxBuf_v, .hlp = "MaxBuf"}, {.enabled = true, .section = "TRACER mode", .num = 123, .grp = 8, .from = 0, .to = 65535, .typ = "sel", .vtype = t_to_array, .cur = &MAIN_ENV.storageIni.runtime.Settings_Tracert.TransmissionModeData, .val = &jsonSettings_TransmissionModeData, .hlp = "TransmissionModeData"}, {.enabled = true, .section = "TRACER mode", .num = 124, .grp = 8, .from = 1, .to = 300, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Tracert.MaxFiles_v, .hlp = "MaxFiles"}, // Сетевые настройки {.enabled = true, .section = "Network settings", .num = 82, .grp = 11, .from = 0, .to = 0, .typ = "txt", .vtype = t_to_string, .cur = &constCurData, .val = MAIN_ENV.storageIni.runtime.Settings_Network.MyIPadres_v, .hlp = "MyIPadres"}, {.enabled = true, .section = "Network settings", .num = 83, .grp = 11, .from = 0, .to = 0, .typ = "txt", .vtype = t_to_string, .cur = &constCurData, .val = MAIN_ENV.storageIni.runtime.Settings_Network.MyIPmask_v, .hlp = "MyIPmask"}, {.enabled = true, .section = "Network settings", .num = 84, .grp = 11, .from = 0, .to = 0, .typ = "txt", .vtype = t_to_string, .cur = &constCurData, .val = MAIN_ENV.storageIni.runtime.Settings_Network.MyGateway_v, .hlp = "MyGateway"}, {.enabled = false, .section = "Network settings", .num = 85, .grp = 11, .from = 0, .to = 0, .typ = "txt", .vtype = t_to_string, .cur = &constCurData, .val = MAIN_ENV.storageIni.runtime.Settings_Network.ftpAddr_v, .hlp = "ftp1Addr"}, {.enabled = false, .section = "Network settings", .num = 86, .grp = 11, .from = 0, .to = 0, .typ = "txt", .vtype = t_to_string, .cur = &constCurData, .val = MAIN_ENV.storageIni.runtime.Settings_Network.ftpLogin_v, .hlp = "ftpLogin"}, {.enabled = false, .section = "Network settings", .num = 87, .grp = 11, .from = 0, .to = 0, .typ = "psw", .vtype = t_to_string, .cur = &constCurData, .val = MAIN_ENV.storageIni.runtime.Settings_Network.ftpPass_v, .hlp = "ftpPass"}, // Настройки GSM {.enabled = true, .section = "GSM settings", .num = 88, .grp = 12, .from = 0, .to = 0, .typ = "txt", .vtype = t_to_string, .cur = &constCurData, .val = MAIN_ENV.storageIni.runtime.Settings_GSM.GSMhttpAdrSrv, .hlp = "GSMhttpAdrSrv"}, {.enabled = true, .section = "GSM settings", .num = 89, .grp = 12, .from = 1, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_GSM.GSMhttpPort, .hlp = "GSMhttpPort"}, {.enabled = true, .section = "GSM settings", .num = 90, .grp = 12, .from = 0, .to = 0, .typ = "txt", .vtype = t_to_string, .cur = &constCurData, .val = MAIN_ENV.storageIni.runtime.Settings_GSM.HttpSrvLogin, .hlp = "HttpSrvLogin"}, {.enabled = true, .section = "GSM settings", .num = 91, .grp = 12, .from = 0, .to = 0, .typ = "psw", .vtype = t_to_string, .cur = &constCurData, .val = MAIN_ENV.storageIni.runtime.Settings_GSM.HttpSrvPass, .hlp = "HttpSrvPass"}, {.enabled = true, .section = "GSM settings", .num = 92, .grp = 12, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_GSM.GSMtimeMSG, .hlp = "GSMtimeMSG"}, {.enabled = true, .section = "GSM settings", .num = 93, .grp = 12, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_GSM.GSMtimeFLASH, .hlp = "GSMtimeFLASH"}, {.enabled = true, .section = "GSM settings", .num = 94, .grp = 12, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_GSM.GSMtimeSSOFT, .hlp = "GSMtimeSSOFT"}, {.enabled = true, .section = "GSM settings", .num = 95, .grp = 12, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_GSM.HttpSrvPerConn, .hlp = "HttpSrvPerConn"}, {.enabled = true, .section = "GSM settings", .num = 96, .grp = 12, .from = 0, .to = 0, .typ = "txt", .vtype = t_to_string, .cur = &constCurData, .val = MAIN_ENV.storageIni.runtime.Settings_GSM.GSMapnName, .hlp = "GSMapnName"}, // RS485 Bluetooth {.enabled = false, .section = "RS485 Bluetooth", .num = 98, .grp = 14, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_RS485_Bluetooth.TOut485_v, .hlp = "TOut485"}, {.enabled = false, .section = "RS485 Bluetooth", .num = 99, .grp = 14, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_RS485_Bluetooth.TOutBlue_v, .hlp = "TOutBlue"}, {.enabled = true, .section = "RS485 Bluetooth", .num = 100, .grp = 14, .from = 2400, .to = 921600, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_RS485_Bluetooth.rs485baudrate_v, .hlp = "rs485baudrate"}, {.enabled = false, .section = "RS485 Bluetooth", .num = 101, .grp = 14, .from = 0, .to = 65535, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_RS485_Bluetooth.BTvisible_v, .hlp = "BTvisible"}, {.enabled = true, .section = "RS485 Bluetooth", .num = 117, .grp = 14, .from = 0, .to = 65535, .typ = "sel", .vtype = t_to_array, .cur = &MAIN_ENV.storageIni.runtime.Settings_RS485_Bluetooth.PortAssign, .val = &jsonSettings_PortAssign, .hlp = "PortAssign"}, // Transmitter {.enabled = true, .section = "Transmitter", .num = 102, .grp = 25, .from = 0, .to = 4095, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Transmitter.CorPwr1, .hlp = "SetupPwr1"}, {.enabled = true, .section = "Transmitter", .num = 103, .grp = 25, .from = 0, .to = 4095, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Transmitter.CorPwr2, .hlp = "SetupPwr2"}, {.enabled = true, .section = "Transmitter", .num = 104, .grp = 25, .from = 0, .to = 4095, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Transmitter.CorPwr3, .hlp = "SetupPwr3"}, {.enabled = true, .section = "Transmitter", .num = 105, .grp = 25, .from = 0, .to = 4095, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Transmitter.CorPwr4, .hlp = "SetupPwr4"}, {.enabled = true, .section = "Transmitter", .num = 106, .grp = 25, .from = 0, .to = 65535, .typ = "sel", .vtype = t_to_array, .cur = &MAIN_ENV.storageIni.runtime.Settings_Transmitter.SelectCorPwr, .val = &jsonSettings_ArrayPwr, .hlp = "SelectCorPwr"}, {.enabled = false, .section = "Transmitter", .num = 107, .grp = 25, .from = 0, .to = 65535, .typ = "sel", .vtype = t_to_array, .cur = &MAIN_ENV.storageIni.runtime.Settings_Transmitter.LogEn, .val = &jsonSettings_ArrayYesNo, .hlp = "LogEnable"}, {.enabled = true, .section = "Transmitter", .num = 108, .grp = 25, .from = 0, .to = 65535, .typ = "sel", .vtype = t_to_array, .cur = &MAIN_ENV.storageIni.runtime.Settings_Transmitter.LogExtendedEn, .val = &jsonSettings_ArrayYesNo, .hlp = "SysLogEnable"}, {.enabled = true, .section = "Transmitter", .num = 109, .grp = 25, .from = 24, .to = 168, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Transmitter.TimeLifeFragIn, .hlp = "TimeLifeFragIn"}, {.enabled = true, .section = "MSD", .num = 112, .grp = 26, .from = 0, .to = 0, .typ = "txt", .vtype = t_to_string, .cur = &constCurData, .val = MAIN_ENV.storageIni.runtime.Settings_Msd.VIN, .hlp = "VIN"}, {.enabled = true, .section = "MSD", .num = 113, .grp = 26, .from = 0, .to = 99999, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Msd.NumHuman, .hlp = "NumHuman"}, {.enabled = true, .section = "MSD", .num = 114, .grp = 26, .from = 0, .to = 65535, .typ = "sel", .vtype = t_to_array, .cur = &MAIN_ENV.storageIni.runtime.Settings_Msd.TypeFuel, .val = &jsonSettings_TypeFuel, .hlp = "TypeFuel"}, {.enabled = true, .section = "MSD", .num = 115, .grp = 26, .from = 1, .to = 15, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Msd.SatTimeInZone, .hlp = "SatTimeInZone"}, {.enabled = true, .section = "MSD", .num = 116, .grp = 26, .from = 0, .to = 89, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Msd.AlmSatAngle, .hlp = "AlmSatAngle"}, {.enabled = true, .section = "MSD", .num = 118, .grp = 26, .from = 0, .to = 99999, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_Msd.SosATsrv, .hlp = "SosATsrv"}, {.enabled = true, .section = "AMS radar", .num = 119, .grp = 27, .from = 1, .to = 16, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_AmsRadar.AmsRadarMaxBuf, .hlp = "AmsRadarMaxBuf"}, {.enabled = true, .section = "AMS radar", .num = 120, .grp = 27, .from = 1, .to = 5, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_AmsRadar.AmsRadarNumPack, .hlp = "AmsRadarNumPack"}, {.enabled = true, .section = "AMS radar", .num = 121, .grp = 27, .from = 5, .to = 2000, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_AmsRadar.AmsRadarReqTime, .hlp = "AmsRadarReqTime"}, {.enabled = true, .section = "AMS radar", .num = 122, .grp = 27, .from = 0, .to = 99999, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_AmsRadar.AmsRadarATsrv, .hlp = "AmsRadarATsrv"}, {.enabled = true, .section = "LoRa WAN", .num = 126, .grp = 28, .from = 1, .to = 16, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_LoRaWan.LoRaWanMaxBuf, .hlp = "LoRaWanMaxBuf"}, {.enabled = true, .section = "LoRa WAN", .num = 127, .grp = 28, .from = 0, .to = 99999, .typ = "dec", .vtype = t_to_uint32_t, .cur = &constCurData, .val = &MAIN_ENV.storageIni.runtime.Settings_LoRaWan.LoRaWanATsrv, .hlp = "LoRaWanATsrv"} }; // Запрос настроек по группам size_t SettingToJSON_grp(char *buf, size_t buf_len, char *grp, typeAuth auth) { uint8_t grpArray[16]; uint8_t countGrp = 0; bool isCreateJson = false; char tmpGrp[8]; tmpGrp[0] = '\0'; struct { int paramcount; char *params_names[MAX_POST_GET_PARAMETERS]; char *params_vals[MAX_POST_GET_PARAMETERS]; } params_grp; params_grp.paramcount = extract_grp_ex_parameters(grp, params_grp.params_names, params_grp.params_vals, MAX_POST_GET_PARAMETERS); for (int i = 0; i < params_grp.paramcount; ++i) { grpArray[i] = atoi(params_grp.params_names[i]); } // grpArray[params_grp.paramcount] = 28; // ++params_grp.paramcount; char bufTmp[255]; size_t len = 0; buf[0] = '['; buf[1] = '\0'; for (int j = 0; j < params_grp.paramcount; ++j) for (int i = 0; i < SettingSizeTbl; ++i) { if (grpArray[j] == settings[i].grp) { if (settings[i].enabled == false) continue; if (auth == AUTH_USER) break; if (auth == AUTH_INTEG) { if (((settings[i].num >= 13) && (settings[i].num <= 17)) || ((settings[i].num == 28) || (settings[i].num == 29)) || ((settings[i].num >= 57) && (settings[i].num <= 61)) || ((settings[i].num == 63) || (settings[i].num == 66)) || ((settings[i].num >= 92) && (settings[i].num <= 94)) || ((settings[i].num == 96))) { } else { continue; } } if (*settings[i].cur != 0xFF) { isCreateJson = true; const struct to_json jsonSetting[] = { {.name = "num", .value = &settings[i].num, .vtype = t_to_uint32_t, .stype = t_to_object}, {.name = "grp", .value = &settings[i].grp, .vtype = t_to_uint32_t}, {.name = "typ", .value = settings[i].typ, .vtype = t_to_string}, {.name = "val", .value = settings[i].val, .vtype = settings[i].vtype}, {.name = "cur", .value = settings[i].cur, .vtype = t_to_uint8_t}, {.name = "hlp", .value = settings[i].hlp, .vtype = t_to_string}, {NULL} }; len += json_generate(bufTmp, jsonSetting, sizeof(bufTmp)); } else { isCreateJson = true; const struct to_json jsonSetting[] = { {.name = "num", .value = &settings[i].num, .vtype = t_to_uint32_t, .stype = t_to_object}, {.name = "grp", .value = &settings[i].grp, .vtype = t_to_uint32_t}, {.name = "typ", .value = settings[i].typ, .vtype = t_to_string}, {.name = "val", .value = settings[i].val, .vtype = settings[i].vtype}, {.name = "hlp", .value = settings[i].hlp, .vtype = t_to_string}, {NULL} }; len += json_generate(bufTmp, jsonSetting, sizeof(bufTmp)); } strcat(bufTmp, ","); strcat(buf, bufTmp); } } if (isCreateJson) { buf[strlen(buf) - 1] = ']'; } else { strcat(buf, "]"); } return strlen(buf); } // Запрос настроек номерам по переменных size_t SettingToJSON_num(char *buf, size_t buf_len, char *grp, typeAuth auth) { uint8_t numArray[16]; uint8_t countGrp = 0; bool isCreateJson = false; char tmpGrp[8]; tmpGrp[0] = '\0'; struct { int paramcount; char *params_names[MAX_POST_GET_PARAMETERS]; char *params_vals[MAX_POST_GET_PARAMETERS]; } params_grp; params_grp.paramcount = extract_grp_ex_parameters(grp, params_grp.params_names, params_grp.params_vals, MAX_POST_GET_PARAMETERS); for (int i = 0; i < params_grp.paramcount; ++i) { numArray[i] = atoi(params_grp.params_names[i]); } char bufTmp[255]; size_t len = 0; buf[0] = '['; buf[1] = '\0'; for (int j = 0; j < params_grp.paramcount; ++j) for (int i = 0; i < SettingSizeTbl; ++i) { if (numArray[j] == settings[i].num) { if (auth == AUTH_USER) break; if (auth == AUTH_INTEG) { if (((settings[i].num >= 13) && (settings[i].num <= 17)) || ((settings[i].num == 28) || (settings[i].num == 29)) || ((settings[i].num >= 57) && (settings[i].num <= 61)) || ((settings[i].num == 63) || (settings[i].num == 66)) || ((settings[i].num >= 92) && (settings[i].num <= 94)) || ((settings[i].num == 96))) { } else { continue; } } if (*settings[i].cur != 0xFF) { isCreateJson = true; const struct to_json jsonSetting[] = { {.name = "num", .value = &settings[i].num, .vtype = t_to_uint32_t, .stype = t_to_object}, {.name = "grp", .value = &settings[i].grp, .vtype = t_to_uint32_t}, {.name = "typ", .value = settings[i].typ, .vtype = t_to_string}, {.name = "val", .value = settings[i].val, .vtype = settings[i].vtype}, {.name = "cur", .value = settings[i].cur, .vtype = t_to_uint8_t}, {.name = "hlp", .value = settings[i].hlp, .vtype = t_to_string}, {NULL} }; len += json_generate(bufTmp, jsonSetting, sizeof(bufTmp)); } else { isCreateJson = true; const struct to_json jsonSetting[] = { {.name = "num", .value = &settings[i].num, .vtype = t_to_uint32_t, .stype = t_to_object}, {.name = "grp", .value = &settings[i].grp, .vtype = t_to_uint32_t}, {.name = "typ", .value = settings[i].typ, .vtype = t_to_string}, {.name = "val", .value = settings[i].val, .vtype = settings[i].vtype}, {.name = "hlp", .value = settings[i].hlp, .vtype = t_to_string}, {NULL} }; len += json_generate(bufTmp, jsonSetting, sizeof(bufTmp)); } strcat(bufTmp, ","); strcat(buf, bufTmp); } } if (isCreateJson) { buf[strlen(buf) - 1] = ']'; } else { strcat(buf, "]"); } return strlen(buf); } idPostResult_t testCorrectMAC(char *valStr) { char Buf[64]; memcpy(Buf, valStr, 64); struct { int paramcount; char *params_names[6]; char *params_vals[6]; } params; params.paramcount = extract_mac_ex_parameters(Buf, params.params_names, params.params_vals, 6); if (params.paramcount == 6) { uint32_t local_mac0 = atoi(params.params_names[0]); uint32_t local_mac1 = atoi(params.params_names[1]); uint32_t local_mac2 = atoi(params.params_names[2]); uint32_t local_mac3 = atoi(params.params_names[3]); uint32_t local_mac5 = atoi(params.params_names[4]); uint32_t local_mac6 = atoi(params.params_names[5]); } return Post_PARAM_ERR; } idPostResult_t testCorrectIP(char *valStr, uint32_t from, uint32_t to) { char Buf[32]; memcpy(Buf, valStr, 32); struct { int paramcount; char *params_names[4]; char *params_vals[4]; } params; params.paramcount = extract_ip_ex_parameters(Buf, params.params_names, params.params_vals, 4); if (params.paramcount == 4) { uint32_t local_ip0 = atoi(params.params_names[0]); uint32_t local_ip1 = atoi(params.params_names[1]); uint32_t local_ip2 = atoi(params.params_names[2]); uint32_t local_ip3 = atoi(params.params_names[3]); if (((local_ip0 <= to) && (local_ip0 >= from)) && ((local_ip1 <= to) && (local_ip1 >= from)) && ((local_ip2 <= to) && (local_ip2 >= from)) && ((local_ip3 <= to) && (local_ip3 >= from))) { return Post_OK; } } return Post_PARAM_ERR; } static idPostResult_t PresetSettings(uint32_t num, char *valStr, int32_t *valDec, int32_t from, int32_t to) { if (valStr == NULL) { if (*valDec < from) { *valDec = from; } if (*valDec > to) { *valDec = to; } // if ((valDec >= from) && (valDec <= to)) // return Post_OK; } else { if ((num == 82) || (num == 84) || (num == 85)) { idPostResult_t result = testCorrectIP(valStr, 0, 254); if (result) return result; } if (num == 83) { idPostResult_t result = testCorrectIP(valStr, 0, 255); if (result) return result; } return Post_OK; } return Post_OK; // return Post_PARAM_ERR; } /* // Сохранение настроек во временные void NvmToRuntimeSettings() { memcpy(&MAIN_ENV.storageIni.runtime.Settings_General, &MAIN_ENV.storageIni.nvm.Settings_General, sizeof(MAIN_ENV.storageIni.nvm.Settings_General)); memcpy(&MAIN_ENV.storageIni.runtime.Settings_Basic_Access, &MAIN_ENV.storageIni.nvm.Settings_Basic_Access, sizeof(MAIN_ENV.storageIni.nvm.Settings_Basic_Access)); memcpy(&MAIN_ENV.storageIni.runtime.Settings_Frequency_Speed, &MAIN_ENV.storageIni.nvm.Settings_Frequency_Speed, sizeof(MAIN_ENV.storageIni.nvm.Settings_Frequency_Speed)); memcpy(&MAIN_ENV.storageIni.runtime.Settings_Network, &MAIN_ENV.storageIni.nvm.Settings_Network, sizeof(MAIN_ENV.storageIni.nvm.Settings_Network)); memcpy(&MAIN_ENV.storageIni.runtime.Settings_Tracert, &MAIN_ENV.storageIni.nvm.Settings_Tracert, sizeof(MAIN_ENV.storageIni.nvm.Settings_Tracert)); memcpy(&MAIN_ENV.storageIni.runtime.Settings_Transceiver, &MAIN_ENV.storageIni.nvm.Settings_Transceiver, sizeof(MAIN_ENV.storageIni.nvm.Settings_Transceiver)); memcpy(&MAIN_ENV.storageIni.runtime.Settings_GSM, &MAIN_ENV.storageIni.nvm.Settings_GSM, sizeof(MAIN_ENV.storageIni.nvm.Settings_GSM)); memcpy(&MAIN_ENV.storageIni.runtime.Settings_RS485_Bluetooth, &MAIN_ENV.storageIni.nvm.Settings_RS485_Bluetooth, sizeof(MAIN_ENV.storageIni.nvm.Settings_RS485_Bluetooth)); } // Загрузка настроек из временных void RuntimeToNvmSettings() { memcpy(&MAIN_ENV.storageIni.nvm.Settings_General, &MAIN_ENV.storageIni.runtime.Settings_General, sizeof(MAIN_ENV.storageIni.nvm.Settings_General)); memcpy(&MAIN_ENV.storageIni.nvm.Settings_Basic_Access, &MAIN_ENV.storageIni.runtime.Settings_Basic_Access, sizeof(MAIN_ENV.storageIni.nvm.Settings_Basic_Access)); memcpy(&MAIN_ENV.storageIni.nvm.Settings_Frequency_Speed, &MAIN_ENV.storageIni.runtime.Settings_Frequency_Speed, sizeof(MAIN_ENV.storageIni.nvm.Settings_Frequency_Speed)); memcpy(&MAIN_ENV.storageIni.nvm.Settings_Network, &MAIN_ENV.storageIni.runtime.Settings_Network, sizeof(MAIN_ENV.storageIni.nvm.Settings_Network)); memcpy(&MAIN_ENV.storageIni.nvm.Settings_Tracert, &MAIN_ENV.storageIni.runtime.Settings_Tracert, sizeof(MAIN_ENV.storageIni.nvm.Settings_Tracert)); memcpy(&MAIN_ENV.storageIni.nvm.Settings_Transceiver, &MAIN_ENV.storageIni.runtime.Settings_Transceiver, sizeof(MAIN_ENV.storageIni.nvm.Settings_Transceiver)); memcpy(&MAIN_ENV.storageIni.nvm.Settings_GSM, &MAIN_ENV.storageIni.runtime.Settings_GSM, sizeof(MAIN_ENV.storageIni.nvm.Settings_GSM)); memcpy(&MAIN_ENV.storageIni.nvm.Settings_RS485_Bluetooth, &MAIN_ENV.storageIni.runtime.Settings_RS485_Bluetooth, sizeof(MAIN_ENV.storageIni.nvm.Settings_RS485_Bluetooth)); } */ //json_t pool[2048]; // Запись настроек idPostResult_t vJsonToStructure(char *jsonTextBuf, const tSettings *jsonSettings, tModemMain *ModemMain, typeAuth auth, bool *grp1, bool *grp2, bool *grp3, bool *grp8, bool *grp11, bool *grp12, bool *grp14, bool *grp25, bool *grp26) { *grp1 = false; *grp2 = false; *grp3 = false; *grp8 = false; *grp11 = false; *grp12 = false; *grp14 = false; *grp25 = false; *grp26 = false; size_t len_pool = strlen(jsonTextBuf); json_t *pool = (json_t *) &jsonTextBuf[4096]; unsigned const qty = LEN_BUF_SMALL_ANSWER_HTTP - 4096 / sizeof(json_t); // json_t *pool = (json_t *) bigBuffer; // unsigned const qty = LEN_BUF_BIG_ANSWER_HTTP / sizeof(json_t); // unsigned const qty = sizeof(pool) / sizeof(*pool); char childName[64]; json_t const *json = json_create(jsonTextBuf, pool, qty); json_t const *elementRoot0 = json_getChild(json); while (elementRoot0 != 0) { uint32_t num = 0xFFFFFFFF; typSetting typ = TYP_SETTING_STR; typSettingVal typVal = TYP_SETTING_VAL_STR; char valText[255]; uint32_t valInteger = 0xFFFFFFFF; uint32_t valCurInteger = 0xFFFFFFFF; jsonType_t const jsonType0 = json_getType(elementRoot0); if (jsonType0 == JSON_OBJ) { json_t const *elementRoot1 = json_getChild(elementRoot0); while (elementRoot1 != 0) { strcpy(childName, json_getName(elementRoot1)); jsonType_t const jsonType = json_getType(elementRoot1); if (strcmp(childName, "num") == 0) { if (jsonType != JSON_INTEGER) return Post_PARAM_ERR; num = json_getInteger(elementRoot1); } if (strcmp(childName, "cur") == 0) { if (jsonType != JSON_INTEGER) return Post_PARAM_ERR; typVal = TYP_SETTING_VAL_DEC; valCurInteger = json_getInteger(elementRoot1); } if (strcmp(childName, "typ") == 0) { if (jsonType != JSON_TEXT) return Post_PARAM_ERR; char typ_tmp[16]; typ_tmp[0] = '\0'; char const *str = json_getValue(elementRoot1); strcat(typ_tmp, str); if (strcmp(typ_tmp, "dec") == 0) { typ = TYP_SETTING_DEC; } if (strcmp(typ_tmp, "sel") == 0) { typ = TYP_SETTING_SEL; } } if (strcmp(childName, "val") == 0) { if (jsonType == JSON_TEXT) { typVal = TYP_SETTING_VAL_STR; valText[0] = '\0'; char const *str = json_getValue(elementRoot1); if (strlen(str) > 255) return Post_PARAM_ERR; strcat(valText, str); } if (jsonType == JSON_INTEGER) { typVal = TYP_SETTING_VAL_DEC; valInteger = json_getInteger(elementRoot1); } } elementRoot1 = json_getSibling(elementRoot1); } if ((typ == TYP_SETTING_DEC) && (typVal != TYP_SETTING_VAL_DEC)) { return Post_PARAM_ERR; } if ((typ == TYP_SETTING_STR) && (typVal != TYP_SETTING_VAL_STR)) { return Post_PARAM_ERR; } if ((typ == TYP_SETTING_SEL) && (typVal != TYP_SETTING_VAL_DEC)) { return Post_PARAM_ERR; } // Поиск по номеру переменной if (num != 0xFFFFFFFF) { for (int i = 0; i < SettingSizeTbl; ++i) { if (settings[i].num == num) { if (settings[i].enabled == false) continue; if (settings[i].grp == 1) *grp1 = true; if (settings[i].grp == 2) *grp2 = true; if (settings[i].grp == 3) *grp3 = true; if (settings[i].grp == 8) *grp8 = true; if (settings[i].grp == 11) *grp11 = true; if (settings[i].grp == 12) *grp12 = true; if (settings[i].grp == 14) *grp14 = true; if (settings[i].grp == 25) *grp25 = true; if (settings[i].grp == 26) *grp26 = true; if (auth == AUTH_INTEG) { if (((settings[i].num >= 13) && (settings[i].num <= 17)) || ((settings[i].num == 28) || (settings[i].num == 29)) || ((settings[i].num >= 57) && (settings[i].num <= 61)) || ((settings[i].num == 63) || (settings[i].num == 66)) || ((settings[i].num >= 92) && (settings[i].num <= 94)) || ((settings[i].num == 96))) { asm("nop"); } else { continue; } } if (typ == TYP_SETTING_STR) { size_t lenStr = 255; if (strlen(valText) > lenStr - 1) return Post_PARAM_ERR; idPostResult_t result = PresetSettings(num, valText, 0, settings[i].from, settings[i].to); if (result) return result; memset((char *) settings[i].val, 0, lenStr); memcpy((char *) settings[i].val, valText, strlen(valText)); break; } if (typ == TYP_SETTING_DEC) { if (settings[i].vtype == t_to_int) { idPostResult_t result = PresetSettings(num, NULL, &valInteger, settings[i].from, settings[i].to); if (result) return result; *(int32_t *) settings[i].val = (int32_t) valInteger; break; } if (settings[i].vtype == t_to_int32_t) { idPostResult_t result = PresetSettings(num, NULL, &valInteger, settings[i].from, settings[i].to); if (result) return result; *(int32_t *) settings[i].val = (int32_t) valInteger; } if (settings[i].vtype == t_to_uint32_t) { idPostResult_t result = PresetSettings(num, NULL, &valInteger, settings[i].from, settings[i].to); if (result) return result; *(uint32_t *) settings[i].val = (uint32_t) valInteger; } if (settings[i].vtype == t_to_uint16_t) { idPostResult_t result = PresetSettings(num, NULL, &valInteger, settings[i].from, settings[i].to); if (result) return result; *(uint16_t *) settings[i].val = (uint16_t) valInteger; break; } if (settings[i].vtype == t_to_uint8_t) { idPostResult_t result = PresetSettings(num, NULL, &valInteger, settings[i].from, settings[i].to); if (result) return result; break; } break; } if (typ == TYP_SETTING_SEL) { idPostResult_t result = PresetSettings(num, NULL, &valCurInteger, settings[i].from, settings[i].to); if (result) return result; *(uint8_t *) settings[i].cur = (uint8_t) valCurInteger; break; } } } } } elementRoot0 = json_getSibling(elementRoot0); } return Post_OK; }