215 lines
5.8 KiB
C
215 lines
5.8 KiB
C
//
|
|
// Created by cfif on 04.10.2022.
|
|
//
|
|
|
|
#ifndef TRACERT_H
|
|
#define TRACERT_H
|
|
|
|
#include <SerialPortIO.h>
|
|
#include <DeviceStorageIni.h>
|
|
#include <Gnss.h>
|
|
#include "ModemMain.h"
|
|
#include "External.h"
|
|
#include "TaskAdc.h"
|
|
|
|
typedef struct {
|
|
uint8_t filename[9];
|
|
uint8_t static_null;
|
|
uint8_t version;
|
|
uint8_t len;
|
|
uint8_t nAt[3];
|
|
uint8_t reserve;
|
|
} tStructTracertHeader;
|
|
|
|
// Точка tracert датчики
|
|
#pragma scalar_storage_order big-endian
|
|
typedef struct __attribute__ ((packed)) {
|
|
// Точка tracert время
|
|
// Слово времени
|
|
uint32_t year: 6; // Год
|
|
uint32_t mouth: 4; // Месяц
|
|
uint32_t day: 5; // День
|
|
uint32_t hour: 5; // Часы
|
|
uint32_t min: 6; // Минуты
|
|
uint32_t sec: 6; // Секунды
|
|
|
|
// Точка tracert координаты
|
|
uint32_t lat_data_static: 2; // 01 - Резерв
|
|
uint32_t lat_latLonFlag: 1; // Полушарие N - 0 S - 1
|
|
uint32_t lat_direction: 1; // 0 - Признак широты
|
|
uint32_t lat_absFullDeg: 8; // Градусы
|
|
uint32_t lat_absFullMin: 6; // Минуты
|
|
uint32_t lat_absFrOfMin: 14; // Доли минут после точки
|
|
|
|
// Точка tracert координаты
|
|
uint32_t lon_data_static: 2; // 01 - Резерв
|
|
uint32_t lon_latLonFlag: 1; // 0 - Признак широты
|
|
uint32_t lon_direction: 1; // Полушарие N - 0 S - 1
|
|
uint32_t lon_absFullDeg: 8; // Градусы
|
|
uint32_t lon_absFullMin: 6; // Минуты
|
|
uint32_t lon_absFrOfMin: 14; // Доли минут после точки
|
|
|
|
// Слово датчиков
|
|
uint32_t id_static2: 4; // 1000 - Резерв
|
|
uint32_t EC: 1; // Признак слова курса
|
|
uint32_t reserver2: 2;
|
|
uint32_t D3: 1; //
|
|
uint32_t D2: 1; //
|
|
uint32_t D1: 1; // Датчик вскрытия
|
|
uint32_t AL: 1; // Тревога
|
|
uint32_t IG: 1; // Зажигание
|
|
uint32_t sensor_B: 10; //
|
|
uint32_t sensor_A: 10; //
|
|
|
|
// Точка tracert курс скорость температура
|
|
uint32_t id_static1: 4; // 1001
|
|
uint32_t reserved: 1;
|
|
uint32_t temperature: 8;
|
|
uint32_t curse: 9; //
|
|
uint32_t speed: 10; //
|
|
|
|
// Доп. Данные
|
|
uint8_t addition[12];
|
|
|
|
} tStructTracertPoint;
|
|
#pragma scalar_storage_order little-endian
|
|
|
|
|
|
// Точка tracert координаты
|
|
#pragma scalar_storage_order big-endian
|
|
typedef struct __attribute__ ((packed)) {
|
|
uint32_t data_static: 2; // 01 - Резерв
|
|
uint32_t latLonFlag: 1; // 0 - Признак широты
|
|
uint32_t direction: 1; // Полушарие N - 0 S - 1
|
|
uint32_t absFullDeg: 8; // Градусы
|
|
uint32_t absFullMin: 6; // Минуты
|
|
uint32_t absFrOfMin: 14; // Доли минут после точки
|
|
} tStructTracertCoord;
|
|
#pragma scalar_storage_order little-endian
|
|
|
|
// Точка tracert время
|
|
#pragma scalar_storage_order big-endian
|
|
typedef struct __attribute__ ((packed)) {
|
|
// Слово времени
|
|
uint32_t year: 6; // Год
|
|
uint32_t mouth: 4; // Месяц
|
|
uint32_t day: 5; // День
|
|
uint32_t hour: 5; // Часы
|
|
uint32_t min: 6; // Минуты
|
|
uint32_t sec: 6; // Секунды
|
|
} tStructTracertDateTime;
|
|
#pragma scalar_storage_order little-endian
|
|
|
|
// Точка tracert курс скорость температура
|
|
#pragma scalar_storage_order big-endian
|
|
typedef struct __attribute__ ((packed)) {
|
|
uint32_t id_static: 4; // 1001
|
|
uint32_t reserved: 1;
|
|
uint32_t temperature: 8;
|
|
uint32_t curse: 9; //
|
|
uint32_t speed: 10; //
|
|
} tStructTracertSpeedCursePoint;
|
|
#pragma scalar_storage_order little-endian
|
|
|
|
|
|
// Слово датчиков
|
|
#pragma scalar_storage_order big-endian
|
|
typedef struct __attribute__ ((packed)) {
|
|
uint32_t id_static: 4; // 1000 - Резерв
|
|
uint32_t EC: 1; // Признак слова курса
|
|
uint32_t reserver2: 2;
|
|
uint32_t D3: 1; //
|
|
uint32_t D2: 1; //
|
|
uint32_t D1: 1; // Датчик вскрытия
|
|
uint32_t AL: 1; // Тревога
|
|
uint32_t IG: 1; // Зажигание
|
|
uint32_t sensor_B: 10; //
|
|
uint32_t sensor_A: 10; //
|
|
} tStructTracertSensorAB;
|
|
#pragma scalar_storage_order little-endian
|
|
|
|
/*
|
|
typedef struct {
|
|
tSerialPortIO *io;
|
|
tDeviceStorageIni *store;
|
|
|
|
struct {
|
|
uint8_t modemRx[512];
|
|
uint8_t modemTx[512];
|
|
} mem;
|
|
|
|
tAtCmd tracertAt;
|
|
osMutexId_t sensorAccess;
|
|
uint8_t sensorA[2];
|
|
uint8_t sensorB[2];
|
|
uint8_t sensorExt1[4];
|
|
uint8_t sensorExt2[4];
|
|
uint8_t sensorExt3[4];
|
|
uint8_t sensorExt4[4];
|
|
|
|
struct {
|
|
osThreadId_t id;
|
|
uint32_t stack[2048];
|
|
StaticTask_t controlBlock;
|
|
osThreadAttr_t attr;
|
|
} thread;
|
|
|
|
} tTracertSensor;
|
|
*/
|
|
typedef struct {
|
|
tDeviceStorageIni *store;
|
|
tGnss *gnss;
|
|
|
|
struct {
|
|
osThreadId_t id;
|
|
uint32_t stack[2048];
|
|
StaticTask_t controlBlock;
|
|
osThreadAttr_t attr;
|
|
} thread;
|
|
|
|
uint8_t bufTracert[1300];
|
|
uint8_t stepPoint;
|
|
uint32_t posInBlock;
|
|
tExternal *external;
|
|
tFs *fs;
|
|
tRtcIO *rtcIO;
|
|
|
|
osMutexId_t accessTracert;
|
|
|
|
tModemMain *modemMain;
|
|
|
|
tTaskAdc *taskAdc;
|
|
|
|
bool isSpeedCurse;
|
|
bool isDataAddition;
|
|
bool isModemCreateAccess;
|
|
bool isModemDelAccess;
|
|
|
|
tLoggerInterface *logger;
|
|
|
|
} tTracertMain;
|
|
|
|
void TracertMain_Init(
|
|
tTracertMain *env,
|
|
tGnss *gnss,
|
|
tDeviceStorageIni *store,
|
|
tExternal *external,
|
|
tFs *fs,
|
|
tTaskAdc *taskAdc,
|
|
tRtcIO *rtcIo,
|
|
tModemMain *modemMain,
|
|
osMutexId_t accessTracert
|
|
);
|
|
|
|
|
|
//void TracertSensor_Init(
|
|
// tTracertSensor *env,
|
|
// tSerialPortIO *io,
|
|
// tDeviceStorageIni *store
|
|
//);
|
|
|
|
void TracertMain_StartThread(tTracertMain *env);
|
|
//void TracertSensor_StartThread(tTracertSensor *env);
|
|
|
|
#endif //TRACERT_H
|