From 9ae9cfef339097716f9f6281b82d519d04d9f756 Mon Sep 17 00:00:00 2001 From: cfif Date: Mon, 2 Jun 2025 13:26:39 +0300 Subject: [PATCH] Init --- IncRemapSelect.h | 8 ++++ SystemSelector.c | 111 +++++++++++++++++++++++++++++++++++++++++++++++ SystemSelector.h | 38 ++++++++++++++++ modular.json | 22 ++++++++++ 4 files changed, 179 insertions(+) create mode 100644 IncRemapSelect.h create mode 100644 SystemSelector.c create mode 100644 SystemSelector.h create mode 100644 modular.json diff --git a/IncRemapSelect.h b/IncRemapSelect.h new file mode 100644 index 0000000..5c2ba58 --- /dev/null +++ b/IncRemapSelect.h @@ -0,0 +1,8 @@ +// +// Created by zemon on 27.02.25. +// + +#ifndef SMART_COMPONENTS_V2_INCREMAP_H +#define SMART_COMPONENTS_V2_INCREMAP_H +#include "ModemDataCollector.h" +#endif //SMART_COMPONENTS_V2_INCREMAP_H diff --git a/SystemSelector.c b/SystemSelector.c new file mode 100644 index 0000000..b6b27b9 --- /dev/null +++ b/SystemSelector.c @@ -0,0 +1,111 @@ +#include "SystemSelector.h" +#include "AtGsmSimcomSim7600_Gnss.h" +#include "LoggerInterface.h" +#include "PwmSim7600e.h" +#include "SystemDelayInterface.h" +#include "ModemDataCollector.h" +#include "TelematicaConnectStatus.h" +#include "ext_telematica.h" + +#define LOG_SIGN "Селектор подсистем вторичный" +#define LOGGER env->logger + +// +// Created by zemon on 29.08.24. +// +void SystemSelectorInit( + tSystemSelector *env, + tAtCmd *gsmAt, + tLoggerInterface *logger, + tSim7600ePower *sim7600ePower + ){ + env->gsmAt = gsmAt; + env->logger = logger; + env->sim7600ePower = sim7600ePower; + env->timeng = 0; +} + +void ModemDataCollector_SetThisSubSystem(tSystemSelector *env, eSubSystems subSystems) { + env->thisSsubSystem = subSystems; +} + +eSubSystems ModemDataCollector_GetThisSubSystem(tSystemSelector *env) { + return env->thisSsubSystem; +} + +void ModemDataCollector_SelectionSimChipCoolBack(void *env, uint8_t thisSimChip) { + ModemDataCollector_SelectionSimChip(env, thisSimChip); +} + +tThisSimChip ModemDataCollector_GetThisSimChip(tSystemSelector *env) { + return env->sim7600ePower->thisSimChip; +} + +void ModemDataCollector_SelectionSimChip(tSystemSelector *env, tThisSimChip thisSimChip) { + AtCommandResult res = AT_ERROR; + uint8_t count = 0; + if (osMutexAcquire(env->gsmAt->access, 10000) == osOK) { + while ((res != AT_OK)&&(count<=3)) { + LoggerInfoStatic(LOGGER, LOG_SIGN, + "Попытка переключения чипов"); + if(count != 0){ + SystemDelayMs(1000); + } + count ++; + + AtGsm_OperatorSelectionDeregister(env->gsmAt); + SystemDelayMs(150); + LoggerInfoStatic(LOGGER, LOG_SIGN, + "Переключение коммуникационного модуля в режим минимального функционирования по каналу GSM"); + res = AtGsm_Gsnss_Simcom7600_SetWorkingState(env->gsmAt, SIMCOM_FUNC_MINIMAL); + SystemDelayMs(150); + if (res == AT_OK) { + if (thisSimChip == CHIP_ERA) { + LoggerInfoStatic(LOGGER, LOG_SIGN, "Подключение SIM чипа ЭРА..."); + } else { + LoggerInfoStatic(LOGGER, LOG_SIGN, "Подключение SIM чипа коммерческого..."); + } + } else { + if (thisSimChip == CHIP_ERA) { + LoggerInfoStatic(LOGGER, LOG_SIGN, + "ОШИБКА перевода коммуникационного модуля в режим минимального функционирования код 1"); + LoggerInfoStatic(LOGGER, LOG_SIGN, "Переключение на SIM чипа ЭРА НЕ ВОЗМОЖЕНО"); + continue; + } else { + LoggerInfoStatic(LOGGER, LOG_SIGN, + "ОШИБКА перевода коммуникационного модуля в режим минимального функционирования код 2"); + LoggerInfoStatic(LOGGER, LOG_SIGN, "Подключение SIM чипа коммерческого НЕ ВОЗМОЖЕНО"); + continue; + } + } + PwmSim7600e_SimChipSelector(env->sim7600ePower, thisSimChip); + SystemDelayMs(150); + LoggerInfoStatic(LOGGER, LOG_SIGN, + "Переключение коммуникационного модуля в режим полного функционирования по каналу GSM"); + res = AtGsm_Gsnss_Simcom7600_SetWorkingState(env->gsmAt, SIMCOM_FUNC_MAXIMAL); + SystemDelayMs(700); + if (res == AT_OK) { + if (thisSimChip == CHIP_ERA) { + LoggerInfoStatic(LOGGER, LOG_SIGN, "SIM чипа ЭРА успешно подключён"); + } else { + LoggerInfoStatic(LOGGER, LOG_SIGN, "SIM чипа коммерческий успешно подключён"); + } + } else { + if (thisSimChip == CHIP_ERA) { + LoggerInfoStatic(LOGGER, LOG_SIGN, + "ОШИБКА перевода коммуникационного модуля в режим полного функционирования код 1"); + LoggerInfoStatic(LOGGER, LOG_SIGN, "Переключение на SIM чипа ЭРА НЕ ВОЗМОЖЕНО"); + continue; + } else { + LoggerInfoStatic(LOGGER, LOG_SIGN, + "ОШИБКА перевода коммуникационного модуля в режим полного функционирования код 2"); + LoggerInfoStatic(LOGGER, LOG_SIGN, "Подключение SIM чипа коммерческого НЕ ВОЗМОЖЕНО"); + continue; + } + } + } + osMutexRelease(env->gsmAt->access); + } else { + LoggerInfoStatic(LOGGER, LOG_SIGN, "Не возможен захват управления ModemDataCollector_SelectionSimChip") + } +} diff --git a/SystemSelector.h b/SystemSelector.h new file mode 100644 index 0000000..fcc4e1c --- /dev/null +++ b/SystemSelector.h @@ -0,0 +1,38 @@ +// +// Created by zemon on 29.08.24. +// + +#ifndef SMART_COMPONENTS_V2_SYSTEMSELECTOR_H +#define SMART_COMPONENTS_V2_SYSTEMSELECTOR_H + +#include "AtCmdBase.h" +#include "LoggerInterface.h" +#include "PwmSim7600e.h" + +typedef enum { + UNDEFANDET = 0, + TELEMATICA = 1, + UVEOS = 2, +}eSubSystems; + +typedef struct { + eSubSystems thisSsubSystem; + tAtCmd *gsmAt; + tLoggerInterface *logger; + tSim7600ePower *sim7600ePower; + uint32_t timeng; +} tSystemSelector; + +void SystemSelectorInit( + tSystemSelector *env, + tAtCmd *gsmAt, + tLoggerInterface *logger, + tSim7600ePower *sim7600ePower +); +void ModemDataCollector_SetThisSubSystem(tSystemSelector *env, eSubSystems subSystems); +void ModemDataCollector_SelectionSimChip(tSystemSelector *env, tThisSimChip thisSimChip); +void ModemDataCollector_SelectionSimChipCoolBack(void *env, uint8_t thisSimChip); +tThisSimChip ModemDataCollector_GetThisSimChip(tSystemSelector *env); +eSubSystems ModemDataCollector_GetThisSubSystem(tSystemSelector *env); + +#endif //SMART_COMPONENTS_V2_SYSTEMSELECTOR_H diff --git a/modular.json b/modular.json new file mode 100644 index 0000000..d21aef0 --- /dev/null +++ b/modular.json @@ -0,0 +1,22 @@ +{ + "dep": [ + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "GpioPinInterface" + }, + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "SystemDelayInterface" + } + ], + "cmake": { + "inc_dirs": [ + "./" + ], + "srcs": [ + "./**.c" + ] + } +} \ No newline at end of file