This commit is contained in:
cfif 2024-12-04 13:10:47 +03:00
commit 6ad6c614b5
7 changed files with 308 additions and 0 deletions

20
DeviceDataNonVolatile.c Normal file
View File

@ -0,0 +1,20 @@
//
// Created by xemon on 19.12.22.
//
#include "DeviceDataNonVolatilePrivate.h"
void DeviceDataNonVolatile_InitDefaults(tDeviceDataNonVolatile *env) {
DeviceStorageInitDeviceSettings(&env->device);
vUveosGostSettingsInitDefaults(&env->gost);
DeviceStorageInitCodec(&env->audioCodec);
CarFlipDetection_InitSettings(&env->flip);
EraGlonassMsdTable_Init(&env->msdTable);
//проверка соответствия версии хранилища
//позволяет принудительно сбросить хранилище
//к значениям по умолчанию вслучае установки
//значения большее чем в придыдущих прошивках
env->version = DEVICE_DATA_NO_VOLATILE_VERSION;
}

90
DeviceDataNonVolatile.h Normal file
View File

@ -0,0 +1,90 @@
//
// Created by xemon on 19.10.22.
//
#ifndef UVEOS_ON_NATION_DEVICEDATANONVOLATILE_H
#define UVEOS_ON_NATION_DEVICEDATANONVOLATILE_H
#include <max9860.h>
#include <CarFlipDetection.h>
#include <UveosGostSettings.h>
#include <EraGlonassMsdTable.h>
#include <VariablesTable.h>
#define DEVICE_DATA_NO_VOLATILE_VERSION 0x10
typedef struct {
bool telematicaIsActive;
tString32 EGTS_SERVER_ADDRESS; // Адрес:порт сервера №1
tString64 EGTS_GPRS_APN; // APN
uint32_t EGTS_UNIT_ID; // идентификационный номер терминала
uint32_t EGTS_SERVER_CHECK_IN_PERIOD; // Время между попытками установить соединение с сервером (сек)
uint32_t EGTS_SERVER_CHECK_IN_ATTEMPTS; // Количество попыток соединения с сервером
uint32_t EGTS_SERVER_PACKET_TOUT; // Время ожидания ответа от сервера (сек)
uint32_t EGTS_SERVER_PACKET_RETRANSMIT_ATTEMPTS; // Количество попыток отправки неподтвержденного пакета на сервер
uint32_t EGTS_FLEET_IGN_ON_PERIOD; // Таймер передачи данных при включенном зажигании (сек)
uint32_t EGTS_FLEET_IGN_OFF_PERIOD; // Таймер передачи данных при выключенном зажигании (сек)
uint32_t EGTS_FLEET_EM_MON_PERIOD; // Таймер передачи данных при экстренном слежении (сек)
uint32_t EGTS_FLEET_COURSE_THRESHOLD; // Изменение курсового угла после которого нужно послать данные (градусы)
uint32_t EGTS_GNSS_COURSE_SPEED; // Скорость ниже которой не учитывается изменение курсового угла (км/ч)
uint32_t EGTS_FLEET_DIST_THRESHOLD; // Изменение дистанции после которого нужно послать данные (100 метров)
tString32 EGTS_TELE_VERS;
bool EGTS_SERVER_ENABLE_TELEMATICA;
} tDeviceSettingsTelematica;
typedef struct {
tDeviceSettingsTelematica telematica;
} tDeviceTeledataStorageData;
typedef struct {
bool useInternalAnt;
struct {
tString16 value;
uint16_t writeAccess;
} serialNumber;
tString32 smsServiceCenter;
bool useMutePositive;
bool garageMode;
tString64 rawCodecRegisters;
tString32 softVers;
tString32 hardVers;
tString32 ccid;
tString32 cgsmid;
tString32 codecConf;
uint16_t disallowWrite;
} tDeviceSettings;
typedef struct {
uint32_t version;
tUveosGostSettings gost;
MAX9860_ComplexAudioConfig audioCodec;
tCarFlipDetectionSettings flip;
tDeviceSettings device;
tDeviceTeledataStorageData deviceTeledataStorageData;
tEraGlonassMsdTable msdTable;
} tDeviceDataNonVolatile;
void DeviceDataNonVolatile_InitDefaults(tDeviceDataNonVolatile *env);
void DeviceDataNonVolatile_AddToVarTab(
tDeviceDataNonVolatile *env,
tVariablesTable *variablesTable,
uint32_t VARIABLES_GROUP
);
#endif //UVEOS_ON_NATION_DEVICEDATANONVOLATILE_H

View File

@ -0,0 +1,14 @@
//
// Created by xemon on 19.12.22.
//
#ifndef UVEOS_ON_NATION_DEVICEDATANONVOLATILEPRIVATE_H
#define UVEOS_ON_NATION_DEVICEDATANONVOLATILEPRIVATE_H
#include "DeviceDataNonVolatile.h"
void DeviceStorageInitCodec(MAX9860_ComplexAudioConfig *audioConfig);
void DeviceStorageInitDeviceSettings(tDeviceSettings *env);
#endif //UVEOS_ON_NATION_DEVICEDATANONVOLATILEPRIVATE_H

View File

@ -0,0 +1,64 @@
//
// Created by xemon on 19.12.22.
//
#include "DeviceDataNonVolatilePrivate.h"
#include "UveosGostSettings_AddToVarsTab.h"
#define ADD_VAR_SIZE(TYPE, NAME, VALUE, LEN, GROUP) \
VariablesTableAdd( \
variablesTable, \
#NAME, \
sizeof (#NAME)-1, \
VARIABLE_TYPE_##TYPE, \
(VALUE), \
(LEN), \
0, \
GROUP \
)
#define ADD_VAR(TYPE, NAME, VALUE) ADD_VAR_SIZE(TYPE, NAME, VALUE, 0, group)
#define ADD_VAR_STR_OBJ(TYPE, NAME, VALUE) ADD_VAR_SIZE(TYPE, NAME, &(VALUE).data, &(VALUE).length,group)
// Добавление переменных в таблицу
void DeviceDataNonVolatile_AddToVarTab(
tDeviceDataNonVolatile *env,
tVariablesTable *variablesTable,
uint32_t group
) {
//Uveos Gost Settings
UveosGostSettings_AddToVarsTab(&env->gost, variablesTable, group);
//Flip detection parameters
ADD_VAR(FLOAT32, FLIP_DETECT_GRAVITY_X, &env->flip.gravity.x);
ADD_VAR(FLOAT32, FLIP_DETECT_GRAVITY_Y, &env->flip.gravity.y);
ADD_VAR(FLOAT32, FLIP_DETECT_GRAVITY_Z, &env->flip.gravity.z);
ADD_VAR(BOOL, FLIP_DETECT_ENABLE, &env->flip.enabled);
ADD_VAR(FLOAT32, FLIP_DETECT_TRESHOLD_ANGLE_COS, &env->flip.thresholds.angleCos);
ADD_VAR(UINT32, FLIP_DETECT_TRESHOLD_ANTIFLIGHT, &env->flip.thresholds.antiFlightMs);
//Devices
ADD_VAR_STR_OBJ(STRING, DEVICE_ID, env->device.serialNumber.value);
VariablesTable_GetLast(variablesTable)->writeAttempts = &env->device.serialNumber.writeAccess;
ADD_VAR(BOOL, USE_INTERNAL_ANT, &env->device.useInternalAnt);
ADD_VAR(BOOL, USE_MUTE_POSITIVE, &env->device.useMutePositive);
ADD_VAR_STR_OBJ(STRING, SMS_CENTER, env->device.smsServiceCenter);
ADD_VAR_STR_OBJ(STRING, SOFTWARE_VERS, env->device.softVers);
VariablesTable_GetLast(variablesTable)->writeAttempts = &env->device.disallowWrite;
ADD_VAR_STR_OBJ(STRING, HARDWARE_VERS, env->device.hardVers);
VariablesTable_GetLast(variablesTable)->writeAttempts = &env->device.disallowWrite;
ADD_VAR_STR_OBJ(STRING, GSM_CCID, env->device.ccid);
VariablesTable_GetLast(variablesTable)->writeAttempts = &env->device.disallowWrite;
ADD_VAR_STR_OBJ(STRING, GSM_CGSN, env->device.cgsmid);
VariablesTable_GetLast(variablesTable)->writeAttempts = &env->device.disallowWrite;
ADD_VAR_STR_OBJ(STRING, CODEC_CONF, env->device.codecConf);
}
#undef ADD_VAR_SIZE
#undef ADD_VAR
#undef ADD_VAR_STR_OBJ

73
DeviceData_InitCodec.c Normal file
View File

@ -0,0 +1,73 @@
//
// Created by zemon on 28.07.2021.
//
#include "DeviceDataNonVolatilePrivate.h"
/////////////////////////////////////// INTERFACE ///////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
//MAX9860_ClocksState MAX9860_INIT_CLOCK = {
// .MCLK_TO_PCLK_Prescaler=MAX9860_ICM_PCLK_IS_12MHZ,
// .IntegerClockMode=MAX9860_ICM_NORMAL,
// .EXACTLY_16KHZ=false,
// .PLL_Enable=false,
// .LRCLK_Driver=0x1062,
//};
//MAX9860_AudioInterfaceState MAX9860_INIT_AUDIO_INTERFACE = {
// .MasterMode = false,
// .LRCLK_Invert = true,
// .DAC_BCLK_Invert = false,
// .DAC_DelayMode = false,
// .SDOUT_HighImpedanceMode = false,
// .TDM_ModeSelect = false,
// .ADC_BCLK_Invert = false,
// .ADC_Delay_Mode= false,
// .StereoEnable= false,
// .BCLK_Select= 0x00,
//};
//
//MAX9860_PowerManagementState MAX9860_INIT_POWER = {
// .FullPowerOn=true,
// .DAC_Enabled=true,
// .ADC_EnabledLeft=true,
// .ADC_EnabledRight=false,
//};
/////////////////////////////// AUDIO SETTINGS ////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
MAX9860_DigitalFiltersState MAX9860_INIT_FILTERS = {
.ADC_DigitalFilter = MAX9860_DIGITAL_FILTER_BUTTERWORTH_16KHZ,
.DAC_DigitalFilter = MAX9860_DIGITAL_FILTER_DISABLED,
};
MAX9860_DigitalLevelControlState MAX9860_INIT_CONTROLS = {
.DAC_LevelAdjust = MAX9860_DAC_LEVEL_ADJUST__DB(+3),
.ADC_OutputLevelRight = MAX9860_ADC_OUTPUT_LEVEL__DB(-12),
.ADC_OutputLevelLeft = MAX9860_ADC_OUTPUT_LEVEL__DB(-12),
.DAC_Gain = MAX9860_DAC_GAIN__PLUS_18DB,
.Sidetone = MAX9860_SIDETONE_DISABLED,
};
MAX9860_MicrophoneInputState MAX9860_INIT_MIC_INPUT = {
.MicrophonePreampGain = MAX9860_MIC_PREAMP_GAIN__0,
.MicrophoneProgrammableGain = MAX9860_MIC_PROGRAMMABLE_GAIN_PLUS_DB(0),
};
MAX9860_AutomaticGainControlAndNoiseGateState MAX9860_INIT_NOISE_GATE_AND_AUTO_GAIN = {
.NoiseGateSource = MAX9860_NOISE_GATE_SOURCE_LEFT_ONLY,
.ReleaseTime = MAX9860_AUTOMATIC_GAIN_CONTROL_RELEASE_TIME_78_MS,
.AttackTime = MAX9860_AUTOMATIC_GAIN_CONTROL_ATTACK_TIME_3_MS,
.HoldTime = MAX9860_AUTOMATIC_GAIN_CONTROL_DISABLED,
.NoiseGateThreshold = 0x0,
.AutomaticGainControlThreshold = 0x0,
};
void DeviceStorageInitCodec(MAX9860_ComplexAudioConfig *audioConfig) {
audioConfig->filters = MAX9860_INIT_FILTERS;
audioConfig->levelControl = MAX9860_INIT_CONTROLS;
audioConfig->microphoneGains = MAX9860_INIT_MIC_INPUT;
audioConfig->autoGainAndNoiseGate = MAX9860_INIT_NOISE_GATE_AND_AUTO_GAIN;
}

View File

@ -0,0 +1,15 @@
//
// Created by xemon on 19.10.22.
//
#include "DeviceDataNonVolatilePrivate.h"
void DeviceStorageInitDeviceSettings(tDeviceSettings *env) {
String16CopyStatic(&env->serialNumber.value, "Нет ID!");
String32CopyStatic(&env->smsServiceCenter, "+79418100013");
String32CopyStatic(&env->codecConf, "00109000040033060f20320000008a");
env->serialNumber.writeAccess = 1;
env->disallowWrite = 0;
env->useInternalAnt = true;
env->useMutePositive = false;
env->garageMode = false;
}

32
modular.json Normal file
View File

@ -0,0 +1,32 @@
{
"dep": [
{
"type": "git",
"provider": "NAVIGATOR_UVEOS_NATION_TELIT",
"repo": "UveosGostSettings"
},
{
"type": "git",
"provider": "NAVIGATOR_UVEOS_NATION_TELIT",
"repo": "UveosGostSettings_AddToVarsTab"
},
{
"type": "git",
"provider": "NAVIGATOR_UVEOS_NATION_TELIT",
"repo": "AudioCodec_MAX9860"
},
{
"type": "git",
"provider": "NAVIGATOR_UVEOS_NATION_TELIT",
"repo": "VariablesTable"
}
],
"cmake": {
"inc_dirs": [
"./"
],
"srcs": [
"./**.c"
]
}
}