diff --git a/Network.c b/Network.c index bab570c..777a88b 100644 --- a/Network.c +++ b/Network.c @@ -7,22 +7,23 @@ #include "EgtsOutputCommands.h" #include "SystemDelayInterface.h" #include "AtGsmQuerySignalQuality.h" +#include "AtGsmGNSS.h" #define LOG_SIGN "EGTS_INFO" #define LOGGER &env->slog->logger -uint8_t QuerySignalQuality(tGsmWithGnss *env) { +uint8_t QuerySignalQuality(tEgtsProcessing *env) { uint8_t rssi = 0; - if (osMutexAcquire(env->gsmAt.access, 2000) == osOK) { + if (osMutexAcquire(env->gsm->gsmAt.access, 2000) == osOK) { AtGsm_QuerySignalQuality( - &env->gsmAt, + &env->gsm->gsmAt, &rssi ); - osMutexRelease(&env->gsmAt.access); + osMutexRelease(env->gsm->gsmAt.access); } else { LoggerInfoStatic(LOGGER, LOG_SIGN, "Ошибка доступа (QuerySignalQuality)") } @@ -30,40 +31,21 @@ uint8_t QuerySignalQuality(tGsmWithGnss *env) { return rssi; } - -void ProcessInfo(tEgtsProcessing *env) { - - env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_Uptime].value = - 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; +void ResetGPS(tEgtsProcessing *env) { + if (osMutexAcquire(env->gsm->gsmAt.access, 5000) == osOK) { + AtGsm_ReceiverGnssResetColdstart(&env->gsm->gsmAt); + osMutexRelease(env->gsm->gsmAt.access); } 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) { uint32_t timeOutCheckNetworkStatus = 0; + uint32_t timeNavUpdate = 0; + char status = 'V'; + uint32_t timeStampCheck = 0; bool oneOn = 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; + 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------------------------------------------- @@ -117,7 +133,7 @@ void _Noreturn EgtsProcessing_InfoTask(tEgtsProcessing *env) { 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; } //конец ---------------------------------Обновление RSSI NETWORK SAT-------------------------------------------- @@ -127,4 +143,5 @@ void _Noreturn EgtsProcessing_InfoTask(tEgtsProcessing *env) { SystemDelayMs(1000); } } + #endif \ No newline at end of file