Добавлена Проверка навигации на сбой приемника и перенесен прием навигации в другой поток

This commit is contained in:
cfif 2024-12-19 14:34:54 +03:00
parent 6e01b95a61
commit 434c8b0f05
1 changed files with 49 additions and 32 deletions

View File

@ -7,22 +7,23 @@
#include "EgtsOutputCommands.h" #include "EgtsOutputCommands.h"
#include "SystemDelayInterface.h" #include "SystemDelayInterface.h"
#include "AtGsmQuerySignalQuality.h" #include "AtGsmQuerySignalQuality.h"
#include "AtGsmGNSS.h"
#define LOG_SIGN "EGTS_INFO" #define LOG_SIGN "EGTS_INFO"
#define LOGGER &env->slog->logger #define LOGGER &env->slog->logger
uint8_t QuerySignalQuality(tGsmWithGnss *env) { uint8_t QuerySignalQuality(tEgtsProcessing *env) {
uint8_t rssi = 0; uint8_t rssi = 0;
if (osMutexAcquire(env->gsmAt.access, 2000) == osOK) { if (osMutexAcquire(env->gsm->gsmAt.access, 2000) == osOK) {
AtGsm_QuerySignalQuality( AtGsm_QuerySignalQuality(
&env->gsmAt, &env->gsm->gsmAt,
&rssi &rssi
); );
osMutexRelease(&env->gsmAt.access); osMutexRelease(env->gsm->gsmAt.access);
} else { } else {
LoggerInfoStatic(LOGGER, LOG_SIGN, "Ошибка доступа (QuerySignalQuality)") LoggerInfoStatic(LOGGER, LOG_SIGN, "Ошибка доступа (QuerySignalQuality)")
} }
@ -30,40 +31,21 @@ uint8_t QuerySignalQuality(tGsmWithGnss *env) {
return rssi; return rssi;
} }
void ResetGPS(tEgtsProcessing *env) {
void ProcessInfo(tEgtsProcessing *env) { if (osMutexAcquire(env->gsm->gsmAt.access, 5000) == osOK) {
AtGsm_ReceiverGnssResetColdstart(&env->gsm->gsmAt);
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_Uptime].value = osMutexRelease(env->gsm->gsmAt.access);
SystemGetMs() / 60000; // Uptime
// По умолчанию в SLEEP, до этого было в TS_STATUS_STANDBY
eEgtsTsStatus SENSORS_AN_VehicleStatus_loc = TS_STATUS_SLEEP;
// Поднят пин зажигания
if (GpioPinGet(env->ignition)) {
SENSORS_AN_VehicleStatus_loc = TS_STATUS_IGNITION;
} else { } else {
LoggerInfoStatic(LOGGER, LOG_SIGN, "Ошибка доступа (ResetGPS)")
} }
// Установка значения сенсора состояния
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_VehicleStatus].value = SENSORS_AN_VehicleStatus_loc;
/*
// Установка значения сенсора состояния
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_VehicleStatus].value = SENSORS_AN_VehicleStatus_loc;
if (env->timeOutCheckNetworkStatus < SystemGetMs()) {
env->timeOutCheckNetworkStatus = SystemGetMs() + AURUS_CHECK_NETWORK_STATUS;
uint8_t rssi = QuerySignalQuality(env->gsm);
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_RSSI].value = rssi;
}
*/
} }
void _Noreturn EgtsProcessing_InfoTask(tEgtsProcessing *env) { void _Noreturn EgtsProcessing_InfoTask(tEgtsProcessing *env) {
uint32_t timeOutCheckNetworkStatus = 0; uint32_t timeOutCheckNetworkStatus = 0;
uint32_t timeNavUpdate = 0;
char status = 'V';
uint32_t timeStampCheck = 0;
bool oneOn = true; bool oneOn = true;
bool oneOff = true; bool oneOff = true;
@ -75,6 +57,40 @@ void _Noreturn EgtsProcessing_InfoTask(tEgtsProcessing *env) {
// env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_Voltage12Volts].value = *EXT_ENV_TELE.vBoardVoltage; // env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_Voltage12Volts].value = *EXT_ENV_TELE.vBoardVoltage;
if (osMutexAcquire(env->gsm->gsmAt.access, 1000) == osOK) {
AtGsm_Gsnss_GetNMEA_Pack(env->gsm, 400);
osMutexRelease(env->gsm->gsmAt.access);
///---начало------------------------------------Проверка навигации на сбой приемника------------------------------------
if (timeNavUpdate < SystemGetMs()) {
timeNavUpdate = SystemGetMs() + 10000;
tNmeaRmc nmeaRmc;
Gnss_GetFullNavData(env->gsm, &nmeaRmc);
uint32_t timestamp = iNmea0183TimestampFromRmc(&nmeaRmc);
if (nmeaRmc.status == 'A') {
if (timeStampCheck == timestamp) {
ResetGPS(env);
LoggerInfoStatic(LOGGER, LOG_SIGN, "Обнаружена остановка времени навигации")
timeStampCheck = 0;
} else {
timeStampCheck = timestamp;
}
}
}
///---конец-------------------------------------Проверка навигации на сбой приемника------------------------------------
} else {
LoggerTraceStatic(LOGGER, LOG_SIGN, "Ошибка доступа (EgtsProcessing_InfoTask)")
}
//начало ---------------------------------Обновление RSSI NETWORK SAT------------------------------------------- //начало ---------------------------------Обновление RSSI NETWORK SAT-------------------------------------------
//начало ---------------------------------Обновление RSSI NETWORK SAT------------------------------------------- //начало ---------------------------------Обновление RSSI NETWORK SAT-------------------------------------------
//начало ---------------------------------Обновление RSSI NETWORK SAT------------------------------------------- //начало ---------------------------------Обновление RSSI NETWORK SAT-------------------------------------------
@ -117,7 +133,7 @@ void _Noreturn EgtsProcessing_InfoTask(tEgtsProcessing *env) {
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_NetworkType].value = 76; // LTE env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_NetworkType].value = 76; // LTE
} }
*/ */
uint8_t rssi = QuerySignalQuality(env->gsm); uint8_t rssi = QuerySignalQuality(env);
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_RSSI].value = rssi; env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_RSSI].value = rssi;
} }
//конец ---------------------------------Обновление RSSI NETWORK SAT-------------------------------------------- //конец ---------------------------------Обновление RSSI NETWORK SAT--------------------------------------------
@ -127,4 +143,5 @@ void _Noreturn EgtsProcessing_InfoTask(tEgtsProcessing *env) {
SystemDelayMs(1000); SystemDelayMs(1000);
} }
} }
#endif #endif