Initial commit

This commit is contained in:
2025-10-22 20:40:25 +03:00
commit 63d038ee63
57 changed files with 104378 additions and 0 deletions

267
libs/Settings.h Normal file
View File

@@ -0,0 +1,267 @@
/*
* Settings.h
*
* Created on: 12 мая 2015 г.
* Author: esaulenko
*/
#ifndef COMMON_SETTINGS_H_
#define COMMON_SETTINGS_H_
#include "CommonTypes.h"
#include "source/SourcePath.h"
#ifdef SRC_TYPES
#include SRC_TYPES
#endif
class CSettings
{
public:
// глобальная структура с настройками
struct TSettings
{
#define SETTING(...) // не используется
#define SETTING_CAN(name, attrib, type, ...) type name;
#define SETTING_RSRV(...) // не используется
#define SETTING_NAME(...) // не используется
#include SRC_SETTINGS
} __attribute__((packed));
#undef SETTING
#undef SETTING_RSRV
#undef SETTING_ALIAS
#undef SETTING_CAN
#undef SETTING_NAME
// объявляем номера настроек. этот enum может расти только вниз!
enum TSettingsID : uint16_t
{
#define SETTING(name, ...) name,
#define SETTING_RSRV(name) name,
#define SETTING_ALIAS(name) name,
#include "SettingsTable.h" // настройки ядра
CanSettingsStart = 0x600, // отсюда начинаются настройки CAN-прошивки (ПРИЧЕМ, самой 0x600 не может быть!!! т.к. это enum)
#define SETTING(name, ...) // не используется
#define SETTING_RSRV(name) name,
#define SETTING_CAN(name,...) name,
#define SETTING_NAME(...) // не используется
#include SRC_SETTINGS // собственные настройки CAN-прошивки
LastVal = 0x7FF // последний параметр
};
#undef SETTING
#undef SETTING_RSRV
#undef SETTING_ALIAS
#undef SETTING_CAN
#undef SETTING_NAME
// значения по умолчанию
enum DefaultValues {
minTimeZone = -9, // значение <-9> из-за ограничения при ручной установке пояса с брелока
defTimeZone = 0,
maxTimeZone = 12,
defClockSyncMode = 2,
maxClockSyncMode = 2,
defTimeZoneSyncMode = 2,
maxTimeZoneSyncMode = 2,
defLightsAutoStartMode = 2,
maxLightsAutoStartMode = 2,
defIlluminationMode = 0,
maxIlluminationMode = 3,
defLockByDriveMode = 0,
maxLockByDriveMode = 3,
defUnlockByParkMode = 0,
maxUnlockByParkMode = 2,
defArmReturnTimeIndex = 0,
minPlafondAlarmDelay = 1,
defPlafondAlarmDelay = 20,//60,
maxPlafondAlarmDelay = 120,
minDoorsLampDeciseconds = 0,
defDoorsLampDeciseconds = 30,
maxDoorsLampDeciseconds = 100,
minTrunkLampDeciseconds = 0,
defTrunkLampDeciseconds = 30,
maxTrunkLampDeciseconds = 100,
minAlarmDoorsDeciseconds = 0,
defAlarmDoorsDeciseconds = 5, // 0.5сек по умолчанию
maxAlarmDoorsDeciseconds = 50, // 5сек максимум
minAlarmTrunkDeciseconds = 0,
defAlarmTrunkDeciseconds = 5, // 0.5сек по умолчанию
maxAlarmTrunkDeciseconds = 100, // 10сек максимум
minKillEngineDeciseconds = 10, // 1.0сек минимум
defKillEngineDeciseconds = 0x80, // по умолчанию, выключено
maxKillEngineDeciseconds = 127, // 12.7сек максимум
defTurboTimerIndex = 0,
minReadyMinutes = 1,
defReadyMinutes = 2,
maxReadyMinutes = 8,
minSupportMinutes = 10,
defSupportMinutes = 20,
maxSupportMinutes = 60,
defPitStopTimeIndex = 1,
minPreHeaterMinutes = 1,
defPreHeaterMinutes = 10,
maxPreHeaterMinutes = 60,
defSetReadyMode = 0,
maxSetReadyMode = 2,
minManualAttempts = 1,
defManualAttempts = 1,
maxManualAttempts = 3,
defClrReadyMode = 0,
maxClrReadyMode = 1,
defPrestartSSB = 0,
maxPrestartSSB = 3,
defStopSSB = 0,
maxStopSSB = 3,
minCrankDelaySeconds = 1,
defCrankDelaySeconds = 3,
maxCrankDelaySeconds = 20,
minAutoStartBatteryLevel = 108,
defAutoStartBatteryLevel = 110|0x80, // выключено по-умолчанию
maxAutoStartBatteryLevel = 126,
minAutoStartTemperature = -30,
defAutoStartTemperature = 0-128, // выключена по-умолчанию
maxAutoStartTemperature = 60,
defDailyRunCountIndex = 0,
defAutomaticsPeriodIndex = 0,
defAutomaticsLimitIndex = 0,
minEngineStartPercent = 40/2,
defEngineStartPercent = 70/2,
maxEngineStartPercent = 100/2,
minEngineRunPercent = 30/2,
defEngineRunPercent = 60/2,
maxEngineRunPercent = 80/2,
minTurboTimerPercent = 150/2,
defTurboTimerPercent = 300/2,
maxTurboTimerPercent = 350/2,
minExternalHeatersTemperature = -20,
defExternalHeatersTemperature = 0-128, // выключена по-умолчанию
maxExternalHeatersTemperature = 20,
maxExternalTemperatureSensorType = 1,
defEmergencyBraking = 2,
maxEmergencyBraking = 2,
maxShockSensTable = 1,
minWaitAnswerTimeout = 5,
defWaitAnswerTimeout = 20,
maxWaitAnswerTimeout = 60,
minCallEndTimeout = 5,
defCallEndTimeout = 10,
maxCallEndTimeout = 60,
minTripEndTimeout = 5,
defTripEndTimeout = 15,
maxTripEndTimeout = 60,
minLowBatteryVoltage = 110,
defLowBatteryVoltage = 118,
maxLowBatteryVoltage = 125,
};
private:
// заголовок таблицы настроек
struct THeader
{
uint16_t ID :11; // идентификатор. Erase=0x000; Core=[0x001..0x5FF]; CanFw=[0x601..0x7FE]; LastVal=0x7FF
uint16_t Kind : 5; // тип данных, см. SettingKind
uint8_t Fixed : 1;
uint8_t Len : 7; // длина с учётом заголовка
// uint8_t Data[0];
bool operator == (const THeader & Header) const // fixed не проверяется!
// { return (ID == Header.ID) && (Kind == Header.Kind) && (Len == Header.Len); }
// { return (*(uint16_t*)this == *(uint16_t*)&Header) && (Len == Header.Len); }
{ return (*(uint16_t*)this == *(uint16_t*)&Header); } // и длина не проверяется!
} __attribute__ ((packed)); // sizeof() = 3
enum {
minRecordSize = sizeof(THeader)+1,
maxRecordSize = sizeof(THeader)+124 // 127 = 3+124 - самый максимум, т.к. Len = 7 бит.
};
// список допустимых типов данных.
// важно! при добавлении новых необходимо расширять список!
enum SettingKind // 0..31
{
kind_bit_t,
kind_uint8_t,
kind_uint16_t,
kind_uint32_t,
kind_int8_t,
kind_int16_t,
kind_int32_t,
kind_array_t,
kind_TInputPinSettings = kind_array_t,
kind_TInputSettings = kind_array_t,
kind_TSequence = kind_array_t,
kind_TCanOutMask = kind_array_t,
kind_uint64_t = kind_array_t,
kind_TKeyAES = kind_array_t,
kind_TVehicleID = kind_array_t,
kind_TStartTimerSetting = kind_array_t,
kind_TImmoKey = kind_array_t,
kind_TPhoneNumber = kind_array_t,
kind_TModemAPN = kind_array_t,
kind_TModemLogin = kind_array_t,
kind_TModemPassword = kind_array_t,
kind_TTagRSSI = kind_array_t,
kind_SettingName = 0x1F // спецзначение - указатель на описание настройки в CAN-прошивке
};
enum SettingAttr
{
NotFixed = 0,
Fixed = 1,
};
// Подбор ближайшего множителя к указанным милисекундам: MUL = ((2^p - 1)*2^5) + m*2^p = 2^(p+5) - 2^5 + m*2^p = (m + 2^5)*2^p - 2^5
static constexpr uint8_t qMS(int ms, int p = 0)
{ return ms < ((127<<p)-64)/2 ? p*32+((2*ms+64-(63<<p))>>(p+1)) : p < 7 ? qMS(ms, p+1) : 0xFF; }
public:
// таблица с настройками CAN-прошивки
struct TCANSettingsTable
{
#define SETTING(name, attr, type, ...) \
THeader hdr_ ## name; type name;
#define SETTING_CAN(name, attr, type, ...) \
THeader hdr_ ## name; type name;
#define SETTING_RSRV(...) // не используется
#define SETTING_NAME(name,string) \
THeader hdr_ ## name ## Str; const char * p ## name ## Str;
#include SRC_SETTINGS
#undef SETTING
#undef SETTING_RSRV
#undef SETTING_ALIAS
#undef SETTING_CAN
#undef SETTING_NAME
uint16_t last_val;
} __attribute__ ((packed));
// таблица с настройками CAN-прошивки
static const TCANSettingsTable CanSettingsTable;
// таблица с названиями полей CAN-прошивки
static const char * const CanSettingsName[];
};
#endif // COMMON_SETTINGS_H_