// // Created by cfif on 05.06.2024. // #ifdef UVEOS_ADD_TELEMATICA #include "Network.h" #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(tEgtsProcessing *env) { uint8_t rssi = 0; if (osMutexAcquire(env->gsm->gsmAt.access, 2000) == osOK) { AtGsm_QuerySignalQuality( &env->gsm->gsmAt, &rssi ); osMutexRelease(env->gsm->gsmAt.access); } else { LoggerInfoStatic(LOGGER, LOG_SIGN, "Ошибка доступа (QuerySignalQuality)") } return rssi; } 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)") } } 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; while (1) { if (onOffTelematica(env, &oneOn, &oneOff, "Задача информации")) continue; // 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------------------------------------------- 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; } else { } // Установка значения сенсора состояния env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_VehicleStatus].value = SENSORS_AN_VehicleStatus_loc; if (timeOutCheckNetworkStatus < SystemGetMs()) { timeOutCheckNetworkStatus = SystemGetMs() + AURUS_CHECK_NETWORK_STATUS; /* uint8_t status = EpsNetworkRegistrationStatus(env->gsm); if (status == 0) env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_NetworkType].value = 0; if ((status > 0) && (status <= 3)) { env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_NetworkType].value = 44; // 2G } if ((status >= 4) && (status <= 7)) { env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_NetworkType].value = 60; // 3G } if (status >= 8) { env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_NetworkType].value = 76; // LTE } */ uint8_t rssi = QuerySignalQuality(env); env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_RSSI].value = rssi; } //конец ---------------------------------Обновление RSSI NETWORK SAT-------------------------------------------- //конец ---------------------------------Обновление RSSI NETWORK SAT-------------------------------------------- //конец ---------------------------------Обновление RSSI NETWORK SAT-------------------------------------------- SystemDelayMs(1000); } } #endif