Initial commit
This commit is contained in:
335
libs/CommonTypes.h
Normal file
335
libs/CommonTypes.h
Normal file
@@ -0,0 +1,335 @@
|
||||
/*
|
||||
* CommonTypes.h
|
||||
*
|
||||
* Created on: 16 апр. 2015 г.
|
||||
* Author: esaulenko
|
||||
*/
|
||||
|
||||
#ifndef COMMON_COMMONTYPES_H_
|
||||
#define COMMON_COMMONTYPES_H_
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
#define member_size(type, member) sizeof(((type*)nullptr)->member)
|
||||
|
||||
//typedef uint8_t byte;
|
||||
//typedef uint16_t word;
|
||||
typedef unsigned int uint;
|
||||
typedef unsigned long ulong;
|
||||
|
||||
//#define bbRAM(Var,Bit) ((uint*)(((uint)&Var + 0x22000000/32)*32))[Bit]
|
||||
#define bbRAM(Var,Bit) ((volatile uint*)(((uint)&Var + SRAM_BB_BASE/32)*32))[Bit]
|
||||
// !!! Начиная с компилятора версии 7, что-то в оптимизаторе изменилось.. и теперь, без volatile
|
||||
// программа компилируется неверно. Поэтому добавляем признак volatile !!!
|
||||
|
||||
#define KByte *1024
|
||||
|
||||
union TSysStateRecord
|
||||
{
|
||||
uint16_t Record;
|
||||
struct {
|
||||
uint8_t Value; // Значение состояния Системы
|
||||
uint8_t Check; // Проверка данных
|
||||
} __attribute__((packed));
|
||||
} __attribute__((packed));
|
||||
|
||||
typedef TSysStateRecord TSysState[2 KByte / sizeof(TSysStateRecord)];
|
||||
|
||||
struct TFwRegions
|
||||
{
|
||||
#if defined MOBICAR_1_2
|
||||
// страницы по 2 кбайта
|
||||
const uint8_t Boot[16 KByte];
|
||||
const uint8_t Core[96 KByte];
|
||||
const uint8_t CanFw[16 KByte];
|
||||
const uint8_t Upload[96 KByte];
|
||||
const uint8_t Settings1[4 KByte];
|
||||
const uint8_t Settings2[4 KByte];
|
||||
const uint8_t Reserved[20 KByte];
|
||||
const uint8_t ImmoLearn[2 KByte];
|
||||
const TSysState SysState;
|
||||
#elif defined MOBICAR_3
|
||||
const uint8_t Boot[16 KByte]; // sector 0
|
||||
const uint8_t Settings1[16 KByte]; // sector 1
|
||||
const uint8_t Settings2[16 KByte]; // sector 2
|
||||
const uint8_t CanFw[16 KByte]; // sector 3
|
||||
struct {
|
||||
const uint8_t UploadAux[64 KByte - sizeof(TSysState)]; // sector 4
|
||||
const TSysState SysState;
|
||||
} __attribute__((packed));
|
||||
union {
|
||||
const uint8_t Upload[128 KByte]; // sector 5
|
||||
const uint8_t ImmoLearn[2 KByte];
|
||||
} __attribute__((packed));
|
||||
const uint8_t Core[2 * 128 KByte]; // sector 6, 7
|
||||
#endif
|
||||
};
|
||||
#define FW_AREAS ((TFwRegions const *)0x08000000)
|
||||
|
||||
// специальное значение для контрольной суммы - используется только в отладочной прошивке
|
||||
#define CHKSUM_DEBUG 0xDebac0ab
|
||||
|
||||
// битовая настройка, используется в модуле настроек. Для простоты реализации занимает в ОЗУ 1 байт.
|
||||
typedef uint8_t bit_t;
|
||||
|
||||
// **********
|
||||
// * Версия *
|
||||
// **********
|
||||
union TVersion
|
||||
{
|
||||
uint32_t Value;
|
||||
struct {
|
||||
uint8_t Day;
|
||||
uint8_t Month;
|
||||
uint8_t Year;
|
||||
uint8_t Version;
|
||||
} __attribute__((packed));
|
||||
} __attribute__((packed));
|
||||
|
||||
struct TBootInfo {
|
||||
TVersion Version; // Версия загрузчика
|
||||
uint16_t Build; // Номер билда загрузчика
|
||||
uint8_t HwVer; // Версия железа
|
||||
uint8_t Model; // Модель устройства. Mobicar1 = 0 (!), Mobicar2 = 2
|
||||
uint32_t SerialNumber; // Серийный номер устройства
|
||||
uint32_t reserved2;
|
||||
|
||||
uint8_t FirmwareKey[32]; // Ключ дешифрования прошивки
|
||||
uint8_t ServerRegKey[12]; // ключ регистрации на сервере
|
||||
uint8_t ServerExchKey[16]; // ключ установки соединения с сервером
|
||||
uint32_t BluetoothPairingCode; // статический код для подшивания BLE устройств
|
||||
|
||||
uint32_t reserved[120];
|
||||
} __attribute__((packed, aligned(4)));
|
||||
#define TBootInfoSize __builtin_offsetof (TBootInfo, FirmwareKey)
|
||||
static_assert (TBootInfoSize == 16, "TBootInfo changed!");
|
||||
|
||||
struct TCoreInfo {
|
||||
TVersion Version; // Версия ПО
|
||||
uint16_t Build; // Номер билда ядра
|
||||
uint16_t reserved1;
|
||||
uint32_t const * pCRC32; // Адрес, где расположена CRC32 в прошивке Ядра
|
||||
uint32_t reserved2;
|
||||
char TextInfo[64]; // Текстовая информация о прошивке Ядра
|
||||
} __attribute__((packed, aligned(4)));
|
||||
static_assert (sizeof(TCoreInfo) == 80, "TCoreInfo changed!");
|
||||
|
||||
// Структура массива информации о CAN-прошивке
|
||||
struct TCanFwInfo {
|
||||
TVersion Version; // Версия ПО
|
||||
uint32_t Build; // Хеш коммита в репозитории git
|
||||
uint32_t const * pCRC32; // Адрес, где расположена CRC32
|
||||
uint32_t reserved2;
|
||||
uint8_t TextInfo[64]; // Текстовая информация
|
||||
} __attribute__((packed, aligned(4)));
|
||||
static_assert (sizeof(TCanFwInfo) == 80, "TCanFwInfo changed!");
|
||||
|
||||
// ********************
|
||||
// * НАСТРОЙКА ВХОДОВ *
|
||||
// ********************
|
||||
struct TInputPinSettings {
|
||||
uint16_t T1:14; // период активного импульса
|
||||
uint16_t P1:2; // Подтяжка: [xy]: непрограммируемая(x=0)/программируемая(x=1)/pulldown(y=0)/pullup(y=1).
|
||||
uint16_t T2:14; // период пассивного импульса
|
||||
uint16_t P2:2; // Подтяжка: [xy]: непрограммируемая(x=0)/программируемая(x=1)/pulldown(y=0)/pullup(y=1).
|
||||
// Таблица истинности:
|
||||
// T1 P1 T2 P2 Debounce
|
||||
// 0 p 0 x tick статика, без антидребезга
|
||||
// >0 p 0 x T1 статика с периодом антидребезга равного T1
|
||||
// 0 p >0 p tick динамика, P1 включается на TICK, затем P2 включается на T2, без антидребезга.
|
||||
// >0 p >0 p T1 динамика, P1 включается на T1*2, затем P2 включается на T2, антидребезг T1.
|
||||
} __attribute__((packed));
|
||||
|
||||
struct TInputSettings {
|
||||
uint8_t Input:7; // номер физического входа
|
||||
uint8_t Invert:1; // Инвертировать состояние
|
||||
|
||||
bool operator== (const TInputSettings &other)
|
||||
{ return *((uint8_t*)this) == *((uint8_t*)(&other)); }
|
||||
bool operator!= (const TInputSettings &other)
|
||||
{ return ! (*this == other); }
|
||||
} __attribute__((packed));
|
||||
|
||||
enum {
|
||||
SequenceLength = 16,
|
||||
maxSequences = 32, // кол-во импульсных последовательностей одновременно запущенных
|
||||
};
|
||||
|
||||
// последовательности управления выходами
|
||||
union TSequence {
|
||||
uint8_t Byte[SequenceLength];
|
||||
union {
|
||||
uint8_t Value;
|
||||
struct {
|
||||
uint8_t Mantissa:5;
|
||||
uint8_t Power:3;
|
||||
};
|
||||
} Step;
|
||||
} __attribute__((packed));
|
||||
|
||||
typedef uint8_t TKeyAES[16]; // ключ шифрования радио
|
||||
|
||||
typedef uint8_t TVehicleID[17]; // VIN-код
|
||||
|
||||
//typedef uint8_t TImmoKey[124]; // ключ обходчика иммобилайзера
|
||||
typedef uint8_t TImmoKey[32]; // ключ обходчика иммобилайзера
|
||||
|
||||
|
||||
// настройка таймера запуска
|
||||
struct TStartTimerSetting {
|
||||
uint16_t Time; // количество минут с начала суток. У выключенного таймера биты инвертированы
|
||||
uint8_t DayMask; // Биты дней недели, когда разрешён запуск - 0..6. Для "старого" механизма устанавливается 0xFF
|
||||
} __attribute__((packed));
|
||||
|
||||
// CAN data forward declarations
|
||||
struct TCanInit;
|
||||
struct TCanPkt;
|
||||
|
||||
enum TCanChannel {
|
||||
CANch1 = 0,
|
||||
CANch2 = 1,
|
||||
};
|
||||
|
||||
enum TLinChannel {
|
||||
LINch1 = 0,
|
||||
LINch2 = 1,
|
||||
#if defined MOBICAR_3
|
||||
LINch3 = 2,
|
||||
#endif
|
||||
};
|
||||
|
||||
enum TGuardEvents {
|
||||
geSetSysMode = 0, // события о смене режима Системы
|
||||
geRESET = 0, // событие сброс по Питанию
|
||||
geTEST = 1, // включился режим Теста
|
||||
geSERVICE = 2, // включился режим Автосервис
|
||||
geDISARM = 3, // включился режим Вне Охраны
|
||||
geHIJACK = 4, // включился режим Антизахват
|
||||
geARM = 5, // включился режим Охрана
|
||||
geGM6 = 6, // резерв
|
||||
geGM7 = 7, // резерв
|
||||
aseSetMode = 8, // события о смене режима Автозапуска
|
||||
aseIDLE = 8, // Дежурный режим
|
||||
aseREADY = 9, // Включение поддержки зажигания
|
||||
asePRESTART_WaitForIgnOn = 10, // Подготовка к запуску двигателя: Ожидание включения Зажигания
|
||||
asePRESTART_WaitForIgnOff = 11, // Подготовка к запуску двигателя: Ожидание выключения Зажигания
|
||||
aseCRANK = 12, // Запуск двигателя (стартер)
|
||||
asePRESUPPORT = 13, //
|
||||
aseSUPPORT = 14, // Поддержка зажигания после запуска
|
||||
asePITSTOP = 15, // Режим PITSTOP
|
||||
aseSTOP = 16, // Режим STOP
|
||||
aseISOFF = 17, // Режим ISOFF
|
||||
aseDoorWag = 18, // Махание дверью
|
||||
aseStopDoorWag = 19, // Остановка процесса махания дверью
|
||||
aseSetIDLE = 20, // Переход в дежурный режим
|
||||
aseSetREADY = 21, // Переход в режим поддержки зажигания
|
||||
aseSetPITSTOP = 22, // Переход в режим PITSTOP
|
||||
aseSetPRESTART = 23, // Переход в режим подготовки к запуску двигателя
|
||||
aseSetSUPPORT = 24, // Переход в режим поддержки зажигания
|
||||
aseSetSTOP = 25, // Остановка двигателя
|
||||
aseSetISOFF = 26, // Выключение поддержки зажигания
|
||||
aseLauncher = 27, // Мотор запущен внешним запуском
|
||||
asePreHeater = 28, // Предпусковой подогреватель включен
|
||||
aseASM21 = 29, // резерв
|
||||
aseReloadTimer = 30, // продление/перезагрузка времени режима
|
||||
aseCommandError = 31, // ошибка выполнения команды или не возможность выполнить команду
|
||||
// Общие события
|
||||
geLocked = 32, // ЦЗ закрыт
|
||||
geUnLocked = 33, // ЦЗ открыт
|
||||
geBlockageOff = 34, // Блокировка выключена
|
||||
geBlockageOn = 35, // Блокировка включена
|
||||
geReservationOff = 36, // Резервирование выключено
|
||||
geReservationOn = 37, // Резервирование включено
|
||||
geEngineStopped = 38, // Двигатель остановился
|
||||
geEngineRuns = 39, // Двигатель завелся
|
||||
geTurboTimerEnd = 40, // Турботаймер завершился
|
||||
geTurboTimerStart = 41, // Турботаймер запустился
|
||||
gePanicOff = 42, // выключился режим Паника
|
||||
gePanicOn = 43, // включился режим Паника
|
||||
geArmDefeatZone = 44, // оповещение об открытых зонах во время постановки в Охрану
|
||||
geAlarmOff = 45, // выключился режим Тревоги
|
||||
geAlarmOn = 46, // включить тревогу снова
|
||||
geDoorsAlarm = 47, // включилась Тревога по дверям (салону)
|
||||
geTrunkAlarm = 48, // включилась Тревога по багажнику
|
||||
geHoodAlarm = 49, // включилась Тревога по капоту
|
||||
geIgnAlarm = 50, // включилась Тревога по зажиганию
|
||||
geShockAlarm = 51, // включилась Тревога по датчику Удара
|
||||
geResetAlarm = 52, // включилась Тревога по сбросу Питания
|
||||
geDoorsDefeated = 53, // отключилась охранная зона по двери
|
||||
geTrunkDefeated = 54, // отключилась охранная зона по багажнику
|
||||
geHoodDefeated = 55, // отключилась охранная зона по капоту
|
||||
geIgnDefeated = 56, // отключилась охранная зона по зажиганию
|
||||
geShockDefeated = 57, // отключилась охранная зона по датчику Удара
|
||||
geTrunkOpened = 58, // багажник открыт
|
||||
geTrunkClosed = 59, // багажник закрыт
|
||||
geShockNotify = 60, // предупреждение по датчику Удара
|
||||
geShockArmOff = 61, // оперативное отключение зоны датчика Удара
|
||||
geCarOwnerCall = 62, // вызов владельца автомобиля
|
||||
geTiltAlarm = 63, // включилась Тревога по датчику Наклона
|
||||
geTiltDefeated = 64, // отключилась охранная зона по датчику Наклона
|
||||
geValetArm = 65, // событие поставить в Охрану в режиме Автосервис
|
||||
geValetDisarm = 66, // событие снять с Охраны в режиме Автосервис
|
||||
geAlarmEnd = 67, // событие прекращения тревоги
|
||||
geTrunkUnLock = 68, // багажник отпирается или отперт
|
||||
geTrunkLock = 69, // багажник запирается или заперт
|
||||
geImHereOff = 70, // выключился механизм поиска Автомобиля на стоянке
|
||||
geImHereOn = 71, // включился механизм поиска Автомобиля на стоянке
|
||||
geMotionAlarm = 72, // включилась Тревога по датчику Перемещений
|
||||
geMotionDefeated = 73, // отключилась охранная зона по датчику Перемещений
|
||||
geArmed = 74, // Система встала под Охрану
|
||||
geArmReturnOff = 75, // Перепостановка отключена
|
||||
geArmReturnOn = 76, // Активирован режим перепостановки
|
||||
geAux1Off = 77, // Доп.канал #1 выключен
|
||||
geAux1On = 78, // Доп.канал #1 включен
|
||||
geAux2Off = 79, // Доп.канал #2 выключен
|
||||
geAux2On = 80, // Доп.канал #2 включен
|
||||
geAux3Off = 81, // Доп.канал #3 выключен
|
||||
geAux3On = 82, // Доп.канал #3 включен
|
||||
geSensorAlarm = 83, // тревога по внешнему Сенсору
|
||||
geSensorDefeated = 84, // отключилась охранная зона по входу от внешнего Сенсора
|
||||
geHandsfreeDisabled = 85, // сообщение о временном запрете Автопостановки/Автоснятия
|
||||
geHandsfreeEnabled = 86, // сообщение о разрешении Автопостановки/Автоснятия
|
||||
geValetDisabledByImm = 87, // включение режима Автосервис заблокировано по причине активированного Иммобилайзера
|
||||
geDisarmDisabledByTag = 88, // снятие с Охраны заблокировано по причине отсутствия Метки
|
||||
geUnTrunkDisabledByTag = 89, // отпирание багажника заблокировано по причине отсутствия Метки
|
||||
geImmoIndicationStart = 90, // индикация включенного иммобилайзера
|
||||
geSensorNotify = 91, // предупреждение по внешнему Сенсору
|
||||
geDrivingEnabled = 92, // поездка разрешена (иммобилайзер был отключен ПИН кодом)
|
||||
geTripFinish = 93, // Поездка закончилась
|
||||
geTripStart = 94, // Поездка началась
|
||||
geTripPaused = 95, // Поездка приостановилась
|
||||
|
||||
// Команды Брелока (176+)
|
||||
bcSendState = 0xB0, // Выслать текущий режим Системы (она же ресинхронизация)
|
||||
bcChangeSoundMode, // Изменение режима выдачи звуков
|
||||
bcChangeShockMode, // Изменение режима работы датчика Удара
|
||||
bcChangeAutomatics, // Изменения в режимах работы Автоматических запусков
|
||||
bcChangeInternetOption, // Изменения в режиме работы INTERNET опции
|
||||
bcProgMenuEnter, // Перевести брелок в меню программирования
|
||||
bcProgMenuExit, // Выход из меню программирования Брелока
|
||||
vmShowPinCode, // Показать на индикаторе текущее значение ПИН-кода
|
||||
bcProgMenu2, // Переход к меню 2
|
||||
bcBleMenuEnter, // Переход к меню спаривания BLE
|
||||
bcHandsfreeModeChange, // Изменение режима работы "Свободных рук"
|
||||
|
||||
geDEBUG = 0xFE,
|
||||
geNONE = 0xFF // нет события, т.е. его не нужно никуда отправлять
|
||||
};
|
||||
|
||||
union TDiagnosticTroubleCode {
|
||||
uint16_t B1B0;
|
||||
uint8_t Byte[2];
|
||||
struct {
|
||||
uint8_t B0;
|
||||
uint8_t B1;
|
||||
} __attribute__((packed));
|
||||
struct {
|
||||
uint16_t X:4;
|
||||
uint16_t N:2;
|
||||
uint16_t K:2;
|
||||
uint16_t Z:4;
|
||||
uint16_t Y:4;
|
||||
} __attribute__((packed));
|
||||
} __attribute__((packed));
|
||||
|
||||
#endif /* COMMON_COMMONTYPES_H_ */
|
||||
Reference in New Issue
Block a user