From 144d9e0391567411d9ed6c452d4bde71cff5babe Mon Sep 17 00:00:00 2001 From: korolev Date: Fri, 7 Mar 2025 09:35:11 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=B0=D0=BB=D0=B3=D0=BE=D1=80=D0=B8=D1=82=D0=BC=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D0=BF=D0=B0=D0=BA=D0=B5?= =?UTF-8?q?=D1=82=D0=B0,=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B0=D0=B2?= =?UTF-8?q?=D0=B0=D0=B5=D0=BC=D0=BE=D0=B3=D0=BE=20=D0=BD=D0=B0=20=D1=81?= =?UTF-8?q?=D0=B5=D1=80=D0=B2=D0=B5=D1=80=20=D1=82=D0=B5=D0=BB=D0=B5=D0=BC?= =?UTF-8?q?=D0=B0=D1=82=D0=B8=D0=BA=D0=B8,=20=D0=B4=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=20=D1=80=D0=B0=D1=81=D1=87=D0=B5=D1=82?= =?UTF-8?q?=20=D0=BC=D0=B0=D0=BD=D0=B5=D1=80=D1=8B=20=D0=B2=D0=BE=D0=B6?= =?UTF-8?q?=D0=B4=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=8D=D1=82=D0=B8=20=D1=80?= =?UTF-8?q?=D0=B0=D1=81=D1=87=D0=B5=D1=82=D0=BD=D1=8B=D0=B5=20=D0=B4=D0=B0?= =?UTF-8?q?=D0=BD=D0=BD=D1=8B=D0=B5=20(=D0=BA=D0=BE=D0=BB=D0=B8=D1=87?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D0=B2=D0=BE=20=D1=82=D0=BE=D1=80=D0=BC=D0=BE?= =?UTF-8?q?=D0=B6=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=B8=20=D1=83=D1=81=D0=BA?= =?UTF-8?q?=D0=BE=D1=80=D0=B5=D0=BD=D0=B8=D0=B9)=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=B2=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=D0=B0=D0=B2=D0=B0=D0=B5=D0=BC=D1=8B=D0=B9=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80=20=D0=BF?= =?UTF-8?q?=D0=B0=D0=BA=D0=B5=D1=82,=20=D1=82=D0=B0=D0=BA=20=D0=B6=D0=B5?= =?UTF-8?q?=20=D0=B2=20=D0=BF=D0=B0=D0=BA=D0=B5=D1=82=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=B4=D0=B0=D0=BD=D0=BD?= =?UTF-8?q?=D1=8B=D0=B5=20=D0=BE=20=D0=B2=D0=BD=D0=B5=D1=88=D0=BD=D0=B5?= =?UTF-8?q?=D0=B9=20=D1=82=D0=B5=D0=BC=D0=BF=D0=B5=D1=80=D0=B0=D1=82=D1=83?= =?UTF-8?q?=D1=80=D0=B5,=20=D0=B2=D0=BD=D1=83=D1=82=D1=80=D0=B5=D0=BD?= =?UTF-8?q?=D0=B5=D0=B9,=20=D0=BC=D0=BE=D0=BC=D0=B5=D0=BD=D1=82=D0=B0?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D0=BE=D0=BC=20=D1=80=D0=B0=D1=81=D1=85=D0=BE?= =?UTF-8?q?=D0=B4=D0=B5=20=D1=82=D0=BE=D0=BF=D0=BB=D0=B8=D0=B2=D0=B0,=20?= =?UTF-8?q?=D1=81=D0=BA=D0=BE=D1=80=D0=BE=D1=81=D1=82=D0=B8=20=D0=B8=20?= =?UTF-8?q?=D1=83=D1=80=D0=BE=D0=B2=D0=BD=D1=8F=20=D1=82=D0=BE=D0=BF=D0=BB?= =?UTF-8?q?=D0=B8=D0=B2=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Network.c | 183 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 141 insertions(+), 42 deletions(-) diff --git a/Network.c b/Network.c index 777a88b..b65c1ab 100644 --- a/Network.c +++ b/Network.c @@ -3,11 +3,13 @@ // #ifdef UVEOS_ADD_TELEMATICA +#include #include "Network.h" #include "EgtsOutputCommands.h" #include "SystemDelayInterface.h" #include "AtGsmQuerySignalQuality.h" #include "AtGsmGNSS.h" +#include "n32g45x_can.h" #define LOG_SIGN "EGTS_INFO" #define LOGGER &env->slog->logger @@ -40,23 +42,75 @@ void ResetGPS(tEgtsProcessing *env) { } } -void _Noreturn EgtsProcessing_InfoTask(tEgtsProcessing *env) { +void calc_driver_scoring(tCanMainAdditional *env, float new_speed) { + if (!env->gnss_config.acc_calc_time) + return; + + if ((env->EngineSpeed > 100) && (new_speed >= (float) env->gnss_config.gnss_course_speed) && + (env->calc_scoring.old_speed >= (float) env->gnss_config.gnss_course_speed)) { + float acc_sum = 0; + float coef_acc = 1.0f; + + if (env->gnss_config.reference_speed && new_speed > ((float) env->gnss_config.reference_speed)) + coef_acc = (float) sqrt((double) new_speed / ((double) env->gnss_config.reference_speed)); + + env->calc_scoring.acc_last[env->calc_scoring.index] = ((new_speed - env->calc_scoring.old_speed) * coef_acc); + + for (uint32_t i = 0; i < env->gnss_config.acc_calc_time; i++) { + acc_sum += env->calc_scoring.acc_last[i]; + } + + if ((float) env->gnss_config.diff_speed_up > 0.0f && acc_sum >= (float) env->gnss_config.diff_speed_up) { + env->state_get.trip_acceleration++; + env->bc_get.total_acceleration++; + env->bc_get.acceleration++; + for (int i = 0; i < NUM_ACC_COUNT_MAX; i++) { + env->calc_scoring.acc_last[i] = 0.0f; + } + } else if ((float) env->gnss_config.diff_speed_down > 0.0f && + acc_sum <= ((-1.0f) * (float) env->gnss_config.diff_speed_down)) { + env->state_get.trip_braking++; + env->bc_get.total_braking++; + env->bc_get.braking++; + for (int i = 0; i < NUM_ACC_COUNT_MAX; i++) { + env->calc_scoring.acc_last[i] = 0.0f; + } + } + + if ((++env->calc_scoring.index) > (env->gnss_config.acc_calc_time - 1)) + env->calc_scoring.index = 0; + + env->calc_scoring.data_erase = false; + } else if (!env->calc_scoring.data_erase) { + for (int i = 0; i < NUM_ACC_COUNT_MAX; i++) { + env->calc_scoring.acc_last[i] = 0.0f; + } + env->calc_scoring.index = 0; + env->calc_scoring.data_erase = true; + } + env->calc_scoring.old_speed = new_speed; +} + +void _Noreturn EgtsProcessing_InfoTask(tEgtsProcessing *env) { +// env->state_get uint32_t timeOutCheckNetworkStatus = 0; uint32_t timeNavUpdate = 0; char status = 'V'; uint32_t timeStampCheck = 0; - + uint32_t tm = 0; bool oneOn = true; bool oneOff = true; - + bool bl = false; + double volatile EngineOXTemperature; + float realSpeed = 0; + uint8_t fuelLevel; while (1) { + EngineOXTemperature = env->canData->engineOXTemperature * 0.75 - 48; 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); @@ -83,64 +137,109 @@ void _Noreturn EgtsProcessing_InfoTask(tEgtsProcessing *env) { } } -///---конец-------------------------------------Проверка навигации на сбой приемника------------------------------------ - - - } 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 + if (tm < SystemGetMs()) { + if (EngineOXTemperature < 100) { + EngineOXTemperature++; + } else { + EngineOXTemperature = 0; + } + if (env->state_get.trip_acceleration < 10) { + env->state_get.trip_acceleration++; + } else { + env->state_get.trip_acceleration = 0; + } + if (env->state_get.trip_braking < 20) { + env->state_get.trip_braking++; + } else { + env->state_get.trip_braking = 0; + } - // По умолчанию в SLEEP, до этого было в TS_STATUS_STANDBY - eEgtsTsStatus SENSORS_AN_VehicleStatus_loc = TS_STATUS_SLEEP; + if (realSpeed < 300) { + fuelLevel++; + realSpeed = realSpeed * 0.01f; + } else { + fuelLevel = 0; + realSpeed = realSpeed * 0.01f; + } - // Поднят пин зажигания - if (GpioPinGet(env->ignition)) { - SENSORS_AN_VehicleStatus_loc = TS_STATUS_IGNITION; + if (fuelLevel < 80) { + fuelLevel++; + } else { + fuelLevel = 0; + } - } else { + if (env->canData->externalTemperature < 10) { + env->canData->externalTemperature++; + } else { + env->canData->externalTemperature = 0; + } + + if (env->canData->engineSpeed < 500) { + env->canData->engineSpeed++; + } else { + env->canData->engineSpeed = 110; + } + + tm = SystemGetMs() + 5000; } - // Установка значения сенсора состояния - env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_VehicleStatus].value = SENSORS_AN_VehicleStatus_loc; + if (env->timeAbsSpeedOnSecond < SystemGetMs()) { + env->timeAbsSpeedOnSecond = SystemGetMs() + 1000; + double FuelLevel = fuelLevel * 0.5; + env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_FuelLevel].value = (uint8_t) (FuelLevel / + 0.5); - if (timeOutCheckNetworkStatus < SystemGetMs()) { - timeOutCheckNetworkStatus = SystemGetMs() + AURUS_CHECK_NETWORK_STATUS; + calc_driver_scoring(env->canMainAdditional, realSpeed); -/* - uint8_t status = EpsNetworkRegistrationStatus(env->gsm); + env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_ANS4].value = env->canData->engineSpeed; + env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_ANS5].value = (uint32_t) realSpeed; + env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_NumberAccelerations].value = env->state_get.trip_acceleration; + env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_NumberBraking].value = env->state_get.trip_braking; - if (status == 0) - env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_NetworkType].value = 0; + if (env->canData->externalTemperature != 0xFF) { + double ExternalTemperature = env->canData->externalTemperature * 1.0 - 40; + env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_ExternalTemperature].value = (uint16_t) ( + (ExternalTemperature + 40) / 0.5); - 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 + env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_Uptime].value = + SystemGetMs() / 60000; // Uptime + + if (EngineOXTemperature < -39.5) { + env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_EngineOXTemperature].value = 0; + } else { + env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_EngineOXTemperature].value = (uint16_t) ( + (EngineOXTemperature + 40) / 0.5); } - if (status >= 8) { - env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_NetworkType].value = 76; // LTE + // По умолчанию в SLEEP, до этого было в TS_STATUS_STANDBY + eEgtsTsStatus SENSORS_AN_VehicleStatus_loc = TS_STATUS_SLEEP; + + // Поднят пин зажигания + if (GpioPinGet(env->ignition)) { + SENSORS_AN_VehicleStatus_loc = TS_STATUS_IGNITION; + + } else { } -*/ - uint8_t rssi = QuerySignalQuality(env); - env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_RSSI].value = rssi; + + // Установка значения сенсора состояния + env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_VehicleStatus].value = SENSORS_AN_VehicleStatus_loc; + + if (timeOutCheckNetworkStatus < SystemGetMs()) { + timeOutCheckNetworkStatus = SystemGetMs() + AURUS_CHECK_NETWORK_STATUS; + 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); + SystemDelayMs(500); } }