1337 lines
50 KiB
C
1337 lines
50 KiB
C
//
|
||
// Created by cfif on 20.03.23.
|
||
//
|
||
#include <stddef.h>
|
||
#include <SystemDelayInterface.h>
|
||
#include <ModemMain.h>
|
||
#include <CmsisRtosThreadUtils.h>
|
||
#include "SerialPort.h"
|
||
#include "stdlib.h"
|
||
#include "string.h"
|
||
#include "httpd_types.h"
|
||
#include "httpd_base_func.h"
|
||
#include "fs_base_func.h"
|
||
#include "math.h"
|
||
#include "fs_base_func.h"
|
||
#include "file_logger.h"
|
||
#include "ModemReceiveFunc.h"
|
||
#include "ModemSendFunc.h"
|
||
#include "ModemAlmanah.h"
|
||
|
||
#define LOGGER env->logger
|
||
#define LOG_SIGN "GONEC"
|
||
|
||
|
||
bool isModemCheck(tModemMain *env) {
|
||
if (!env->isModemCheck) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN, "Модем ГОНЕЦ не доступен");
|
||
}
|
||
|
||
return env->isModemCheck;
|
||
}
|
||
|
||
// Загрузка ключей с проверкой
|
||
idPostResult_t ModemLoadKey(tModemMain *env, uint32_t key_num, char *buf, size_t buf_len) {
|
||
bool result = false;
|
||
if (!isModemCheck(env)) return Post_LOAD_KEY_ERR;
|
||
|
||
if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
|
||
|
||
result = Modem_LoadKey(&env->modemAt, key_num, buf, buf_len);
|
||
if (!result) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды записи ключа в модем");
|
||
}
|
||
|
||
|
||
osMutexRelease(env->accessMODEM);
|
||
} else {
|
||
return Post_MUTEX_ERR;
|
||
}
|
||
|
||
if (!result)
|
||
return Post_LOAD_KEY_ERR;
|
||
|
||
return Post_OK;
|
||
}
|
||
|
||
|
||
// Прошивка крипто-платы
|
||
idPostResult_t ModemCryptoWrite(tModemMain *env, uint8_t *pBuf, uint32_t crc, uint32_t offset, uint32_t size) {
|
||
bool result = false;
|
||
|
||
if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
|
||
// Останов ожидания маркерного сигнала
|
||
// result = Modem_Stop(&env->modemAt);
|
||
// if (!result) {
|
||
// LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
// "Ошибка выполнения команды модема: Переход в режим ожидания команды (AT#STOP)");
|
||
// }
|
||
|
||
result = Modem_CryptoSend(&env->modemAt, pBuf, crc, offset, size);
|
||
if (!result) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды записи в модем: Запись прошивки модема или крипто-платы (WRITE)");
|
||
}
|
||
|
||
// Запуск ожидания маркерного сигнала
|
||
// result = Modem_Start(&env->modemAt);
|
||
// if (!result) {
|
||
// LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
// "Ошибка выполнения команды модема: Переход в основной режим работы (AT#START)");
|
||
// }
|
||
|
||
osMutexRelease(env->accessMODEM);
|
||
} else {
|
||
return Post_MUTEX_ERR;
|
||
}
|
||
|
||
if (!result)
|
||
return Post_SET_MODEM;
|
||
|
||
return Post_OK;
|
||
}
|
||
|
||
// Запуск получения альманаха
|
||
bool AlmaRun(tModemMain *env) {
|
||
|
||
bool result = false;
|
||
if (!isModemCheck(env)) return false;
|
||
|
||
if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
|
||
#ifdef DEBUG_MODEM
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN, "Запуск задачи получения альманаха");
|
||
#endif
|
||
result = Modem_AlmaRun(&env->modemAt);
|
||
if (!result) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Запуск получения альманаха (AT#STARTALMANACTASK)");
|
||
}
|
||
|
||
env->stateRequest.stateReqAlma = StateReqAlmaSendStatus;
|
||
|
||
osMutexRelease(env->accessMODEM);
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
// Останов получения альманаха
|
||
bool AlmaStop(tModemMain *env) {
|
||
|
||
bool result = false;
|
||
if (!isModemCheck(env)) return false;
|
||
|
||
if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
|
||
#ifdef DEBUG_MODEM
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN, "Останов задачи получения альманаха");
|
||
#endif
|
||
result = Modem_AlmaStop(&env->modemAt);
|
||
if (!result) {
|
||
#ifdef DEBUG_MODEM
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Запуск получения альманаха (AT#STOPALMANACTASK)");
|
||
#endif
|
||
|
||
}
|
||
|
||
|
||
// env->stateRequest.stateReqAlma = StateReqAlmaNoSendStatus;
|
||
|
||
osMutexRelease(env->accessMODEM);
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
bool ModemDateTime(tModemMain *env, time_t *timestamp) {
|
||
bool result = false;
|
||
if (!isModemCheck(env)) return false;
|
||
|
||
if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
|
||
// Останов ожидания маркерного сигнала
|
||
// result = Modem_Stop(&env->modemAt);
|
||
// if (!result) {
|
||
// LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
// "Ошибка выполнения команды модема: Переход в режим ожидания команды (AT#STOP)");
|
||
// }
|
||
// Очистка слота
|
||
result = Modem_DateTime(&env->modemAt, timestamp);
|
||
|
||
if (!result) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды модема: Установка даты и времени (AT#DATETIME)");
|
||
}
|
||
|
||
// Запуск ожидания маркерного сигнала
|
||
// result = Modem_Start(&env->modemAt);
|
||
// if (!result) {
|
||
// LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
// "Ошибка выполнения команды модема: Переход в основной режим работы (AT#START)");
|
||
// }
|
||
|
||
osMutexRelease(env->accessMODEM);
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
// Запрос чтения состояния получения альманаха
|
||
bool AlmaGetRun(tModemMain *env, uint8_t *status) {
|
||
bool result = false;
|
||
if (!isModemCheck(env)) return false;
|
||
|
||
// if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
|
||
// Чтение состояния
|
||
result = Modem_Get_AlmaRun(&env->modemAt, status);
|
||
|
||
// if (!result) {
|
||
// LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
// "Ошибка выполнения команды модема: Запрос чтения состояния получения альманаха (AT#STATUSALMANACTASK)");
|
||
// }
|
||
|
||
if (result) {
|
||
if (*status == 1)
|
||
env->stateRequest.stateReqAlma = StateReqAlmaSendStatus;
|
||
|
||
if (*status == 0)
|
||
env->stateRequest.stateReqAlma = StateReqAlmaNoSendStatus;
|
||
}
|
||
|
||
// osMutexRelease(env->accessMODEM);
|
||
// }
|
||
|
||
|
||
|
||
return result;
|
||
}
|
||
|
||
// Запрос состояния получения альманаха
|
||
bool AlmaStatus(tModemMain *env, uint8_t *status) {
|
||
bool result = false;
|
||
if (!isModemCheck(env)) return false;
|
||
|
||
if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
|
||
// Чтение состояния
|
||
result = Modem_AlmaStatus(&env->modemAt, status);
|
||
|
||
if (!result) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды модема: Запрос состояния получения альманаха (AT#GETRESALMANACTASK)");
|
||
}
|
||
|
||
osMutexRelease(env->accessMODEM);
|
||
}
|
||
|
||
|
||
return result;
|
||
}
|
||
|
||
// Чтение альманаха
|
||
bool AlmaRead(tModemMain *env) {
|
||
bool result = false;
|
||
if (!isModemCheck(env)) return false;
|
||
|
||
if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
|
||
// Останов ожидания маркерного сигнала
|
||
// result = Modem_Stop(&env->modemAt);
|
||
// if (!result) {
|
||
// LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
// "Ошибка выполнения команды модема: Переход в режим ожидания команды (AT#STOP)");
|
||
// }
|
||
// Чтение данных из слота
|
||
result = Modem_Read_Alma(&env->modemAt, &env->bufReceivedPacketLen, env->bufReceivedPacket);
|
||
|
||
if (!result) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды модема: Чтение пакета альманаха (AT#ALMAREAD)");
|
||
}
|
||
|
||
// Запуск ожидания маркерного сигнала
|
||
// result = Modem_Start(&env->modemAt);
|
||
// if (!result) {
|
||
// LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
// "Ошибка выполнения команды модема: Переход в основной режим работы (AT#START)");
|
||
// }
|
||
|
||
osMutexRelease(env->accessMODEM);
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
|
||
// Очистка данных пакета альманаха
|
||
bool AlmaClear(tModemMain *env) {
|
||
bool result = false;
|
||
if (!isModemCheck(env)) return false;
|
||
|
||
if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
|
||
// Останов ожидания маркерного сигнала
|
||
// result = Modem_Stop(&env->modemAt);
|
||
// if (!result) {
|
||
// LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
// "Ошибка выполнения команды модема: Переход в режим ожидания команды (AT#STOP)");
|
||
// }
|
||
// Очистка слота
|
||
result = Modem_Clear_Alma(&env->modemAt);
|
||
|
||
if (!result) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды модема: Очистка пакета альманаха (AT#ALMACLEAR)");
|
||
}
|
||
|
||
// Запуск ожидания маркерного сигнала
|
||
// result = Modem_Start(&env->modemAt);
|
||
// if (!result) {
|
||
// LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
// "Ошибка выполнения команды модема: Переход в основной режим работы (AT#START)");
|
||
// }
|
||
|
||
osMutexRelease(env->accessMODEM);
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
bool ModemGetSlot(tModemMain *env, uint8_t id[], uint8_t status[], uint8_t count) {
|
||
bool result = false;
|
||
if (!isModemCheck(env)) return false;
|
||
|
||
if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
|
||
// Получение слотов
|
||
result = Modem_Get_Slot(&env->modemAt, id, status, count);
|
||
|
||
osMutexRelease(env->accessMODEM);
|
||
}
|
||
|
||
return result;
|
||
|
||
}
|
||
|
||
bool ModemGetLog(tModemMain *env, int32_t *rssi, int32_t *temp, uint32_t *pwramp, uint32_t *state, uint32_t *wasreboot,
|
||
uint32_t *size, uint8_t *pBuf) {
|
||
bool result = false;
|
||
if (!isModemCheck(env)) return false;
|
||
|
||
if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
// Получение логов
|
||
result = Modem_Get_Log(&env->modemAt, rssi, temp, pwramp, state, wasreboot, size, pBuf);
|
||
osMutexRelease(env->accessMODEM);
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
bool ModemStopSend(tModemMain *env) {
|
||
bool result = false;
|
||
if (!isModemCheck(env)) return false;
|
||
|
||
if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
|
||
#ifdef DEBUG_MODEM
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN, "Останов задачи передачи сообщений");
|
||
#endif
|
||
|
||
// Останов передачи
|
||
result = Modem_StopSendTask(&env->modemAt);
|
||
if (!result) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды модема: Останов задачи передачи сообщений (AT#STOPSENDTASK)");
|
||
|
||
}
|
||
osMutexRelease(env->accessMODEM);
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
|
||
bool ModemStartSend(tModemMain *env) {
|
||
bool result = false;
|
||
if (!isModemCheck(env)) return false;
|
||
|
||
if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
|
||
#ifdef DEBUG_MODEM
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN, "Запуск задачи передачи сообщений");
|
||
#endif
|
||
|
||
// Останов передачи
|
||
result = Modem_StartSendTask(&env->modemAt);
|
||
if (!result) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды модема: Запуск задачи передачи (AT#STARTSENDTASK)");
|
||
|
||
}
|
||
|
||
osMutexRelease(env->accessMODEM);
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
// Запись данных в пакет
|
||
bool SlotWrite(tModemMain *env, uint8_t id, uint32_t addressAT, uint32_t addressEND, uint32_t urgency,
|
||
uint32_t confirmation, uint32_t lenTransPaket) {
|
||
bool result = false;
|
||
if (!isModemCheck(env)) return false;
|
||
|
||
if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
|
||
// Останов передачи
|
||
// result = Modem_StopSendTask(&env->modemAt);
|
||
// if (!result) {
|
||
// LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
// "Ошибка выполнения команды модема: Останов задачи передачи (AT#STOPSENDTASK)");
|
||
//
|
||
// }
|
||
|
||
// Запись данных в слот
|
||
result = Modem_Write_Slot(&env->modemAt, env->modemStatus.id[id], addressAT, addressEND, urgency,
|
||
confirmation, lenTransPaket,
|
||
env->bufSendPacket);
|
||
if (!result) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды модема: Запись данных в пакет (AT#WRITEPKT)");
|
||
}
|
||
|
||
// Запуск передачи
|
||
// result = Modem_StartSendTask(&env->modemAt);
|
||
// if (!result) {
|
||
// LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
// "Ошибка выполнения команды модема: Запуск задачи передачи (AT#STARTSENDTASK)");
|
||
//
|
||
// }
|
||
|
||
osMutexRelease(env->accessMODEM);
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
|
||
// Чтение данных из пакета
|
||
bool SlotRecvRead(tModemMain *env, uint8_t id) {
|
||
bool result = false;
|
||
if (!isModemCheck(env)) return false;
|
||
|
||
if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
|
||
// Чтение данных из слота
|
||
result = Modem_Read_Recv_Slot(&env->modemAt, id, &env->bufReceivedPacketLen, env->bufReceivedPacket);
|
||
|
||
if (!result) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды модема: Чтение данных из пакета (AT#READPKT)");
|
||
}
|
||
|
||
osMutexRelease(env->accessMODEM);
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
// Очистка данных из пакета приема
|
||
bool SlotRecvClear(tModemMain *env, char *id) {
|
||
bool result = false;
|
||
if (!isModemCheck(env)) return false;
|
||
|
||
if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
|
||
// Останов приема
|
||
// result = Modem_StopRecvTask(&env->modemAt);
|
||
// if (!result) {
|
||
// LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
// "Ошибка выполнения команды модема: Останов задачи приема (AT#STOPRECVTASK)");
|
||
// }
|
||
|
||
// Очистка слота
|
||
result = Modem_Clear_Recv_Slot(&env->modemAt, id);
|
||
|
||
if (!result) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды модема: Очистка пакета (AT#DELRECVPKT)");
|
||
}
|
||
|
||
// Старт приема
|
||
// result = Modem_StartRecvTask(&env->modemAt);
|
||
// if (!result) {
|
||
// LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
// "Ошибка выполнения команды модема: Запуск задачи приема (AT#STARTRECVTASK)");
|
||
// }
|
||
|
||
osMutexRelease(env->accessMODEM);
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
// Получение состояния слотов приема
|
||
bool ModemGetRecvSlot(tModemMain *env, uint8_t id[], uint8_t status[], uint8_t count) {
|
||
bool result = false;
|
||
if (!isModemCheck(env)) return false;
|
||
|
||
if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
|
||
result = Modem_Get_Recv_Slot(&env->modemAt, id, status, count);
|
||
|
||
osMutexRelease(env->accessMODEM);
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
// Очистка данных из пакета
|
||
bool SlotClearNoStartTask(tModemMain *env, char *id) {
|
||
bool result = false;
|
||
if (!isModemCheck(env)) return false;
|
||
|
||
if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
|
||
env->modemWorkingState = MODEM_WORKING_NONE;
|
||
|
||
// Останов передачи
|
||
result = Modem_StopSendTask(&env->modemAt);
|
||
if (!result) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды модема: Останов задачи передачи (AT#STOPSENDTASK)");
|
||
}
|
||
|
||
// Очистка слота
|
||
result = Modem_Clear_Slot(&env->modemAt, id);
|
||
|
||
if (!result) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды модема: Очистка пакета (AT#DELSENDPKT)");
|
||
}
|
||
|
||
osMutexRelease(env->accessMODEM);
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
// Очистка данных из пакета
|
||
bool SlotClearNoStopTask(tModemMain *env, char *id) {
|
||
bool result = false;
|
||
if (!isModemCheck(env)) return false;
|
||
|
||
if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
|
||
// Очистка слота
|
||
result = Modem_Clear_Slot(&env->modemAt, id);
|
||
|
||
if (!result) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды модема: Очистка пакета (AT#DELSENDPKT)");
|
||
}
|
||
|
||
osMutexRelease(env->accessMODEM);
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
// Очистка данных из пакета
|
||
bool SlotClear(tModemMain *env, char *id) {
|
||
bool result = false;
|
||
if (!isModemCheck(env)) return false;
|
||
|
||
if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
|
||
// Останов передачи
|
||
result = Modem_StopSendTask(&env->modemAt);
|
||
if (!result) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды модема: Останов задачи передачи (AT#STOPSENDTASK)");
|
||
}
|
||
|
||
// Очистка слота
|
||
result = Modem_Clear_Slot(&env->modemAt, id);
|
||
|
||
if (!result) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды модема: Очистка пакета (AT#DELSENDPKT)");
|
||
}
|
||
|
||
// Старт передачи
|
||
result = Modem_StartSendTask(&env->modemAt);
|
||
if (!result) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды модема: Запуск задачи передачи (AT#STARTSENDTASK)");
|
||
}
|
||
|
||
osMutexRelease(env->accessMODEM);
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
|
||
idPostResult_t ModemGetInitAt(tModemMain *env, bool *isWriteMem, bool grp1, bool grp2, bool grp3, bool grp25) {
|
||
bool ret;
|
||
bool b1 = false, b2 = false, b3 = false, b4 = false, /*b5 = false,*/ b6 = false, b7 = false, b8 = false, b9 = false, b10 = false;
|
||
bool b11 = false, /*b12 = false,*/ b13 = false, b14 = false;
|
||
bool b15 = false;
|
||
bool b16 = false;
|
||
bool b17 = false;
|
||
|
||
*isWriteMem = false;
|
||
|
||
if (!isModemCheck(env)) return Post_SET_MODEM;
|
||
|
||
uint32_t value1;
|
||
uint32_t value2;
|
||
uint32_t value3;
|
||
uint32_t value4;
|
||
char valueStr255[255];
|
||
|
||
bool isErrorAtModem = false;
|
||
|
||
|
||
// if ((grp1) || (grp2) || (grp3)) {
|
||
// Останов ожидания маркерного сигнала
|
||
// ret = Modem_Stop(&env->modemAt);
|
||
// if (!ret) {
|
||
// LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
// "Ошибка выполнения команды модема: Переход в режим ожидания команды (AT#STOP)");
|
||
// return Post_SET_MODEM;
|
||
// }
|
||
// }
|
||
|
||
if (grp1) {
|
||
// Ввод сетевого адреса модема - 1
|
||
ret = Modem_Get_NetAddress(&env->modemAt, &b2, env->store->runtime.Settings_General.ATnum_v, &value1);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN, "Ошибка выполнения команды чтения из модема: Сетевой адрес AT (AT#NETADDRESS)");
|
||
isErrorAtModem = true;
|
||
}
|
||
if (b2)
|
||
env->store->runtime.Settings_General.ATnum_v = value1;
|
||
|
||
// Установка приоритета - 2
|
||
ret = Modem_Get_Priority(&env->modemAt, &b7, env->store->runtime.Settings_General.ATpriority_v, &value1);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды чтения из модема: Приоритет AT (AT#PRIORITY)");
|
||
isErrorAtModem = true;
|
||
}
|
||
if (b7)
|
||
env->store->runtime.Settings_General.ATpriority_v = value1;
|
||
|
||
|
||
// Запрещенные КА - 10
|
||
if (strlen(env->store->runtime.BannedSAT_ex) > 0) {
|
||
|
||
} else {
|
||
ret = Modem_Get_RestrictSc(&env->modemAt, &b8, env->store->runtime.Settings_General.BannedSAT_v,
|
||
valueStr255);
|
||
}
|
||
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды чтения из модема: Запрещенные КА (AT#RESTRICTSC)");
|
||
isErrorAtModem = true;
|
||
}
|
||
|
||
if (b8) {
|
||
memset(env->store->runtime.Settings_General.BannedSAT_v, 0, sizeof(valueStr255));
|
||
strcpy(env->store->runtime.Settings_General.BannedSAT_v, valueStr255);
|
||
}
|
||
|
||
}
|
||
|
||
|
||
if (grp2) {
|
||
// Ввод каналов ожидания маркерного сигнала 18, 19
|
||
ret = Modem_Get_MarkerCh(&env->modemAt, &b3, env->store->runtime.Settings_Frequency_Speed.freqMC1_v,
|
||
env->store->runtime.Settings_Frequency_Speed.freqMC2_v, &value1, &value2);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN, "Ошибка выполнения команды чтения из модема: Номер частоты МС1, MC2 (MARKERCH)");
|
||
isErrorAtModem = true;
|
||
}
|
||
|
||
if (b3) {
|
||
env->store->runtime.Settings_Frequency_Speed.freqMC1_v = value1;
|
||
env->store->runtime.Settings_Frequency_Speed.freqMC2_v = value2;
|
||
}
|
||
|
||
|
||
// Установка скоростей - 20
|
||
ret = Modem_Get_RxTxBitrate(&env->modemAt, &b6, env->store->runtime.Settings_Frequency_Speed.SpeedPKsig_v,
|
||
env->store->runtime.Settings_Frequency_Speed.SpeedPKdata_v,
|
||
env->store->runtime.Settings_Frequency_Speed.SpeedOKsig_v,
|
||
env->store->runtime.Settings_Frequency_Speed.SpeedOKdata_v,
|
||
&value1, &value2, &value3, &value4);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды чтения из модема: Скорости ПК, ОК каналов данных (AT#RXTXBITRATE)");
|
||
isErrorAtModem = true;
|
||
}
|
||
|
||
if (b6) {
|
||
env->store->runtime.Settings_Frequency_Speed.SpeedPKsig_v = value1;
|
||
env->store->runtime.Settings_Frequency_Speed.SpeedPKdata_v = value2;
|
||
env->store->runtime.Settings_Frequency_Speed.SpeedOKsig_v = value3;
|
||
env->store->runtime.Settings_Frequency_Speed.SpeedOKdata_v = value4;
|
||
}
|
||
|
||
|
||
// 25
|
||
ret = Modem_Get_DelTasi(&env->modemAt, &b1, env->store->runtime.Settings_Frequency_Speed.SItimeAdv_v,
|
||
&value1);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды чтения из модема: Опережение СИ борта (AT#DELTASI)");
|
||
isErrorAtModem = true;
|
||
}
|
||
|
||
if (b1)
|
||
env->store->runtime.Settings_Frequency_Speed.SItimeAdv_v = value1;
|
||
|
||
// Установка региона - 29
|
||
ret = Modem_Get_RegRegion(&env->modemAt, &b9, env->store->runtime.Settings_Frequency_Speed.RegionRegistr_v,
|
||
&value1);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды чтения из модема: Георегион регистрации (AT#REGREGION)");
|
||
isErrorAtModem = true;
|
||
}
|
||
|
||
if (b9)
|
||
env->store->runtime.Settings_Frequency_Speed.RegionRegistr_v = value1;
|
||
|
||
// Время жизни регистрации - 28
|
||
ret = Modem_Get_RegTime(&env->modemAt, &b10, env->store->runtime.Settings_Frequency_Speed.TimeLifeRegistr_v,
|
||
&value1);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды чтения из модема: Время жизни регистрации (AT#REGTIME)");
|
||
isErrorAtModem = true;
|
||
}
|
||
|
||
if (b10)
|
||
env->store->runtime.Settings_Frequency_Speed.TimeLifeRegistr_v = value1;
|
||
|
||
|
||
|
||
|
||
// Максимальная дальность до КА
|
||
ret = Modem_Get_MaxDist(&env->modemAt, &b15, env->store->runtime.Settings_Frequency_Speed.MaxDistanceSAT_v,
|
||
&value1);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды чтения из модема: Максимальная дальность до КА (AT#MAXDIST)");
|
||
isErrorAtModem = true;
|
||
}
|
||
|
||
if (b15)
|
||
env->store->runtime.Settings_Frequency_Speed.MaxDistanceSAT_v = value1;
|
||
|
||
// Запрещенные георегионы
|
||
// if (strlen(env->store->runtime.Settings_Frequency_Speed.AllowedReg_v) > 0) {
|
||
ret = Modem_Get_Reg(&env->modemAt, &b16, env->store->runtime.Settings_Frequency_Speed.AllowedReg_v,
|
||
valueStr255);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды чтения из модема: Разрешенные георегионы (AT#REGION)");
|
||
isErrorAtModem = true;
|
||
// }
|
||
}
|
||
|
||
if (b16) {
|
||
memset(env->store->runtime.Settings_Frequency_Speed.AllowedReg_v, 0, sizeof(valueStr255));
|
||
strcpy(env->store->runtime.Settings_Frequency_Speed.AllowedReg_v, valueStr255);
|
||
}
|
||
|
||
|
||
}
|
||
|
||
if (grp3) {
|
||
|
||
|
||
// Периодичность запроса на съем, МС:
|
||
ret = Modem_Get_PerDown(&env->modemAt, &b17, env->store->runtime.Settings_Basic_Access.PerReqDown_v,
|
||
&value1);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды чтения из модема: Периодичность запроса на съем, МС (AT#PERDOWN)");
|
||
isErrorAtModem = true;
|
||
}
|
||
|
||
if (b17)
|
||
env->store->runtime.Settings_Basic_Access.PerReqDown_v = value1;
|
||
|
||
|
||
// Ввод тип адреса 2 - косвенный; 1 - прямой
|
||
ret = Modem_Get_AddressType(&env->modemAt, &b4,
|
||
env->store->runtime.Settings_Basic_Access.TypeAddressing_v - 1,
|
||
&value1);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды чтения из модема: Режим доступа (AT#ADDRESSTYPE)");
|
||
isErrorAtModem = true;
|
||
}
|
||
|
||
if (b4)
|
||
env->store->runtime.Settings_Basic_Access.TypeAddressing_v = value1 - 1;
|
||
}
|
||
|
||
if (grp25) {
|
||
|
||
ret = Modem_Get_TransmitterPWR(&env->modemAt, &b11,
|
||
env->store->runtime.Settings_Transmitter.CorPwr1,
|
||
env->store->runtime.Settings_Transmitter.CorPwr2,
|
||
env->store->runtime.Settings_Transmitter.CorPwr3,
|
||
env->store->runtime.Settings_Transmitter.CorPwr4,
|
||
&value1,
|
||
&value2,
|
||
&value3,
|
||
&value4);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды чтения из модема: Коррекция передатчика (AT#SETUPPWR)");
|
||
isErrorAtModem = true;
|
||
}
|
||
|
||
if (b11) {
|
||
env->store->runtime.Settings_Transmitter.CorPwr1 = value1;
|
||
env->store->runtime.Settings_Transmitter.CorPwr2 = value2;
|
||
env->store->runtime.Settings_Transmitter.CorPwr3 = value3;
|
||
env->store->runtime.Settings_Transmitter.CorPwr4 = value4;
|
||
}
|
||
|
||
|
||
ret = Modem_Get_SelectPWR(&env->modemAt, &b14, env->store->runtime.Settings_Transmitter.SelectCorPwr, &value1);
|
||
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды чтения из модема: Выбор параметра мощности (AT#SELECTPWR)");
|
||
isErrorAtModem = true;
|
||
}
|
||
|
||
if (b14) {
|
||
env->store->runtime.Settings_Transmitter.SelectCorPwr = value1;
|
||
}
|
||
|
||
|
||
ret = Modem_Get_LogExtended(&env->modemAt, &b13,
|
||
env->store->runtime.Settings_Transmitter.LogExtendedEn,
|
||
&value1);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды чтения из модема: Разрешение системных логов (AT#SYSLOGENABLE)");
|
||
isErrorAtModem = true;
|
||
}
|
||
|
||
if (b13)
|
||
env->store->runtime.Settings_Transmitter.LogExtendedEn = value1;
|
||
|
||
|
||
}
|
||
|
||
//
|
||
// ret = Modem_Region(&env->modemAt, &b5, 1, 11, 25, 33, 49, 52, 51, 8);
|
||
// if (!ret)
|
||
// LoggerInfoStatic(LOGGER, LOG_SIGN, "Ошибка выполнения команды REGION");
|
||
|
||
|
||
// if ((grp1) || (grp2) || (grp3)) {
|
||
// Запуск ожидания маркерного сигнала
|
||
// ret = Modem_Start(&env->modemAt);
|
||
// if (!ret) {
|
||
// LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
// "Ошибка выполнения команды модема: Переход в основной режим работы (AT#START)");
|
||
// return Post_SET_MODEM;
|
||
// }
|
||
// }
|
||
|
||
// Если было изменение настроек, записать в настройки
|
||
if ((b1) || (b2) || (b3) || (b4) || /*(b5) ||*/ (b6) || (b7) || (b8) || (b9) || (b10) || (b11) ||
|
||
/*(b12) ||*/ (b13) || (b14) || (b15) || (b16) || (b17)) {
|
||
*isWriteMem = true;
|
||
}
|
||
|
||
if (isErrorAtModem) {
|
||
return Post_SET_MODEM;
|
||
}
|
||
|
||
|
||
return Post_OK;
|
||
}
|
||
|
||
idPostResult_t ModemInitAt(tModemMain *env, bool grp1, bool grp2, bool grp3, bool grp25) {
|
||
bool ret;
|
||
bool b1 = false, b2 = false, b3 = false, b4 = false, /*b5 = false,*/ b6 = false, b7 = false, b8 = false, b9 = false, b10 = false;
|
||
bool b11 = false, /*b12 = false,*/ b13 = false;
|
||
bool b14 = false;
|
||
bool b15 = false;
|
||
bool b16 = false;
|
||
bool b17 = false;
|
||
|
||
if (!isModemCheck(env)) return Post_SET_MODEM;
|
||
|
||
// if ((grp1) || (grp2) || (grp3)) {
|
||
// Останов ожидания маркерного сигнала
|
||
// ret = Modem_Stop(&env->modemAt);
|
||
// if (!ret) {
|
||
// LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
// "Ошибка выполнения команды модема: Переход в режим ожидания команды (AT#STOP)");
|
||
// return Post_SET_MODEM;
|
||
// }
|
||
// }
|
||
|
||
bool isErrorAtModem = false;
|
||
|
||
if (grp1) {
|
||
// Ввод сетевого адреса модема - 1
|
||
ret = Modem_NetAddress(&env->modemAt, &b2, env->store->runtime.Settings_General.ATnum_v);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN, "Ошибка выполнения команды записи в модем: Сетевой адрес AT (AT#NETADDRESS)");
|
||
isErrorAtModem = true;
|
||
}
|
||
|
||
// Установка приоритета - 2
|
||
ret = Modem_Priority(&env->modemAt, &b7, env->store->runtime.Settings_General.ATpriority_v);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды записи в модем: Приоритет AT (AT#PRIORITY)");
|
||
isErrorAtModem = true;
|
||
}
|
||
// Запрещенные КА - 10
|
||
// if (strlen(env->store->runtime.Settings_General.BannedSAT_v) > 0) {
|
||
ret = Modem_RestrictSc(&env->modemAt, &b8, env->store->runtime.Settings_General.BannedSAT_v);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды записи в модем: Запрещенные КА (AT#RESTRICTSC)");
|
||
isErrorAtModem = true;
|
||
// }
|
||
}
|
||
|
||
}
|
||
|
||
|
||
if (grp2) {
|
||
// Ввод каналов ожидания маркерного сигнала 18, 19
|
||
ret = Modem_MarkerCh(&env->modemAt, &b3, env->store->runtime.Settings_Frequency_Speed.freqMC1_v,
|
||
env->store->runtime.Settings_Frequency_Speed.freqMC2_v);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN, "Ошибка выполнения команды записи в модем: Номер частоты МС1, MC2 (MARKERCH)");
|
||
isErrorAtModem = true;
|
||
}
|
||
|
||
// Установка скоростей - 20
|
||
ret = Modem_RxTxBitrate(&env->modemAt, &b6, env->store->runtime.Settings_Frequency_Speed.SpeedPKsig_v,
|
||
env->store->runtime.Settings_Frequency_Speed.SpeedPKdata_v,
|
||
env->store->runtime.Settings_Frequency_Speed.SpeedOKsig_v,
|
||
env->store->runtime.Settings_Frequency_Speed.SpeedOKdata_v);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды записи в модем: Скорости ПК, ОК каналов данных (AT#RXTXBITRATE)");
|
||
isErrorAtModem = true;
|
||
}
|
||
|
||
// 25
|
||
ret = Modem_DelTasi(&env->modemAt, &b1, env->store->runtime.Settings_Frequency_Speed.SItimeAdv_v);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды записи в модем: Опережение СИ борта (AT#DELTASI)");
|
||
isErrorAtModem = true;
|
||
}
|
||
|
||
// Установка региона - 29
|
||
ret = Modem_RegRegion(&env->modemAt, &b9, env->store->runtime.Settings_Frequency_Speed.RegionRegistr_v);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды записи в модем: Георегион регистрации (AT#REGREGION)");
|
||
isErrorAtModem = true;
|
||
}
|
||
|
||
// Время жизни регистрации - 28
|
||
ret = Modem_RegTime(&env->modemAt, &b10, env->store->runtime.Settings_Frequency_Speed.TimeLifeRegistr_v);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды записи в модем: Время жизни регистрации (AT#REGTIME)");
|
||
isErrorAtModem = true;
|
||
}
|
||
|
||
|
||
// Максимальная дальность до КА
|
||
ret = Modem_MaxDist(&env->modemAt, &b15, env->store->runtime.Settings_Frequency_Speed.MaxDistanceSAT_v);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды записи в модем: Максимальная дальность до КА (AT#MAXDIST)");
|
||
isErrorAtModem = true;
|
||
}
|
||
|
||
// Запрещенные георегионы
|
||
ret = Modem_Reg(&env->modemAt, &b16, env->store->runtime.Settings_Frequency_Speed.AllowedReg_v);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды записи в модем: Разрешенные георегионы (AT#REGION)");
|
||
isErrorAtModem = true;
|
||
}
|
||
|
||
}
|
||
|
||
if (grp3) {
|
||
|
||
// Периодичность запроса на съем, МС:
|
||
ret = Modem_PerDown(&env->modemAt, &b17, env->store->runtime.Settings_Basic_Access.PerReqDown_v);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды записи в модема: Периодичность запроса на съем, МС (AT#PERDOWN)");
|
||
isErrorAtModem = true;
|
||
}
|
||
|
||
|
||
// Ввод тип адреса 2 - косвенный; 1 - прямой
|
||
|
||
ret = Modem_AddressType(&env->modemAt, &b4, env->store->runtime.Settings_Basic_Access.TypeAddressing_v + 1);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды записи в модем: Режим доступа (AT#ADDRESSTYPE)");
|
||
isErrorAtModem = true;
|
||
}
|
||
|
||
}
|
||
|
||
|
||
if (grp25) {
|
||
|
||
ret = Modem_TransmitterPWR(&env->modemAt, &b11, env->store->runtime.Settings_Transmitter.CorPwr1,
|
||
env->store->runtime.Settings_Transmitter.CorPwr2,
|
||
env->store->runtime.Settings_Transmitter.CorPwr3,
|
||
env->store->runtime.Settings_Transmitter.CorPwr4);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды записи в модем: Коррекция передатчика (AT#SETUPPWR)");
|
||
isErrorAtModem = true;
|
||
}
|
||
|
||
ret = Modem_SelectPWR(&env->modemAt, &b14, env->store->runtime.Settings_Transmitter.SelectCorPwr);
|
||
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды модема: Выбор параметра мощности (AT#SELECTPWR)");
|
||
}
|
||
|
||
|
||
// ret = Modem_LogEnable(&env->modemAt, &b12, env->store->runtime.Settings_Transmitter.LogEn);
|
||
// if (!ret) {
|
||
// LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
// "Ошибка выполнения команды записи в модем: Разрешение логов (AT#LOGENABLE)");
|
||
// isErrorAtModem = true;
|
||
// }
|
||
|
||
ret = Modem_LogExtended(&env->modemAt, &b13, env->store->runtime.Settings_Transmitter.LogExtendedEn);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды записи в модем: Разрешение системных логов (AT#SYSLOGENABLE)");
|
||
isErrorAtModem = true;
|
||
}
|
||
|
||
}
|
||
|
||
|
||
//
|
||
// ret = Modem_Region(&env->modemAt, &b5, 1, 11, 25, 33, 49, 52, 51, 8);
|
||
// if (!ret)
|
||
// LoggerInfoStatic(LOGGER, LOG_SIGN, "Ошибка выполнения команды REGION");
|
||
|
||
|
||
// Если было изменение настроек, записать во флеш модема
|
||
if ((b1) || (b2) || (b3) || (b4) || /*(b5) ||*/ (b6) || (b7) || (b8) || (b9) || (b10) || (b11) ||
|
||
/* (b12) ||*/ (b13) || (b14) || (b15) || (b16) || (b17)) {
|
||
// Запись во флеш модема
|
||
ret = Modem_WriteMem(&env->modemAt);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды: Запись текущих настроек в память (AT#WRITEMEM)");
|
||
isErrorAtModem = true;
|
||
}
|
||
}
|
||
|
||
// if ((grp1) || (grp2) || (grp3)) {
|
||
// Запуск ожидания маркерного сигнала
|
||
// ret = Modem_Start(&env->modemAt);
|
||
// if (!ret) {
|
||
// LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
// "Ошибка выполнения команды модема: Переход в основной режим работы (AT#START)");
|
||
// return Post_SET_MODEM;
|
||
// }
|
||
// }
|
||
|
||
if (isErrorAtModem) {
|
||
return Post_SET_MODEM;
|
||
} else {
|
||
return Post_OK;
|
||
}
|
||
}
|
||
|
||
// Переход в основной режим работы
|
||
idPostResult_t ModemStartAt(tModemMain *env) {
|
||
bool ret;
|
||
|
||
// Запуск ожидания маркерного сигнала
|
||
ret = Modem_Start(&env->modemAt);
|
||
if (!ret) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды модема: Переход в основной режим работы (AT#START)");
|
||
return Post_SET_MODEM;
|
||
}
|
||
|
||
return Post_OK;
|
||
}
|
||
|
||
|
||
|
||
|
||
// Запрос версий
|
||
bool Modem_Get_Version_Modem(tModemMain *env, char *versionModem, uint8_t *sizeModem, char *versionCrypto,
|
||
uint8_t *sizeCrypto) {
|
||
bool result = false;
|
||
|
||
if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
|
||
|
||
result = Modem_Get_Version(&env->modemAt, versionModem, sizeModem, versionCrypto, sizeCrypto);
|
||
|
||
if (!result) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды модема: Запрос версий (VERSION)");
|
||
}
|
||
|
||
osMutexRelease(env->accessMODEM);
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
// Запуск прошивки
|
||
bool RunModemOrCrypto(tModemMain *env) {
|
||
bool result = false;
|
||
|
||
if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
|
||
// Запуск прошивки
|
||
result = Modem_RunModemOrCrypto(&env->modemAt);
|
||
|
||
if (!result) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды модема: Запуск прошивки (RUN)");
|
||
}
|
||
|
||
osMutexRelease(env->accessMODEM);
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
|
||
|
||
// Запуск регистрации
|
||
bool StartRegTask(tModemMain *env) {
|
||
bool result = false;
|
||
if (!isModemCheck(env)) return false;
|
||
|
||
if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
|
||
#ifdef DEBUG_MODEM
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN, "Запуск задачи регистрации");
|
||
#endif
|
||
// Останов ожидания маркерного сигнала
|
||
// result = Modem_Stop(&env->modemAt);
|
||
// if (!result) {
|
||
// LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
// "Ошибка выполнения команды модема: Переход в режим ожидания команды (AT#STOP)");
|
||
// }
|
||
|
||
result = Modem_StartRegTask(&env->modemAt);
|
||
|
||
if (!result) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды модема: Запуск регистрации (AT#STARTREGTASK)");
|
||
}
|
||
|
||
// Запуск ожидания маркерного сигнала
|
||
// result = Modem_Start(&env->modemAt);
|
||
// if (!result) {
|
||
// LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
// "Ошибка выполнения команды модема: Переход в основной режим работы (AT#START)");
|
||
// }
|
||
|
||
osMutexRelease(env->accessMODEM);
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
// Останов регистрации
|
||
bool StopRegTask(tModemMain *env) {
|
||
bool result = false;
|
||
if (!isModemCheck(env)) return false;
|
||
|
||
if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
|
||
|
||
#ifdef DEBUG_MODEM
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN, "Останов задачи регистрации");
|
||
#endif
|
||
|
||
// Останов ожидания маркерного сигнала
|
||
// result = Modem_Stop(&env->modemAt);
|
||
// if (!result) {
|
||
// LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
// "Ошибка выполнения команды модема: Переход в режим ожидания команды (AT#STOP)");
|
||
// }
|
||
|
||
result = Modem_StopRegTask(&env->modemAt);
|
||
|
||
if (!result) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды модема: Останов регистрации (AT#STOPREGTASK)");
|
||
}
|
||
|
||
// Запуск ожидания маркерного сигнала
|
||
// result = Modem_Start(&env->modemAt);
|
||
// if (!result) {
|
||
// LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
// "Ошибка выполнения команды модема: Переход в основной режим работы (AT#START)");
|
||
// }
|
||
|
||
osMutexRelease(env->accessMODEM);
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
// Запрос статуса регистрации
|
||
bool ModemGetRegStatus(tModemMain *env, uint8_t *status) {
|
||
bool result = false;
|
||
if (!isModemCheck(env)) return false;
|
||
|
||
if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
|
||
// Чтение состояния
|
||
result = Modem_RegStatus(&env->modemAt, status);
|
||
|
||
if (!result) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды модема: Запрос состояния регистрации (AT#GETREGSTATUS)");
|
||
}
|
||
|
||
osMutexRelease(env->accessMODEM);
|
||
}
|
||
|
||
|
||
return result;
|
||
}
|
||
|
||
|
||
// Установка координат
|
||
bool ModemSet_Coord(tModemMain *env, int latitude, int longitude) {
|
||
bool result = false;
|
||
if (!isModemCheck(env)) return false;
|
||
|
||
if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
|
||
// Останов ожидания маркерного сигнала
|
||
// result = Modem_Stop(&env->modemAt);
|
||
// if (!result) {
|
||
// LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
// "Ошибка выполнения команды модема: Переход в режим ожидания команды (AT#STOP)");
|
||
// }
|
||
|
||
result = Modem_Coord(&env->modemAt, latitude, longitude);
|
||
|
||
if (!result) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды модема: Установка координат (AT#SETCOORD)");
|
||
}
|
||
|
||
// Запуск ожидания маркерного сигнала
|
||
// result = Modem_Start(&env->modemAt);
|
||
// if (!result) {
|
||
// LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
// "Ошибка выполнения команды модема: Переход в основной режим работы (AT#START)");
|
||
// }
|
||
|
||
osMutexRelease(env->accessMODEM);
|
||
}
|
||
|
||
|
||
return result;
|
||
}
|
||
|
||
|
||
bool TestAFU(tModemMain *env) {
|
||
bool result = false;
|
||
if (!isModemCheck(env)) return false;
|
||
|
||
if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
|
||
// Чтение данных из слота
|
||
result = Modem_TestAFU(&env->modemAt);
|
||
|
||
if (!result) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды модема: Запуск теста АФУ (AT#TESTAFU)");
|
||
}
|
||
|
||
osMutexRelease(env->accessMODEM);
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
bool TestAPO(tModemMain *env) {
|
||
bool result = false;
|
||
if (!isModemCheck(env)) return false;
|
||
|
||
if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
|
||
result = Modem_TestAPO(&env->modemAt);
|
||
|
||
if (!result) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды модема: Запуск приемника в режиме измерения шума (AT#RSSIAPO)");
|
||
}
|
||
|
||
osMutexRelease(env->accessMODEM);
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
bool SetRoutingRestrictSc(tModemMain *env, char *banned) {
|
||
bool result = false;
|
||
if (!isModemCheck(env)) return false;
|
||
|
||
if (osMutexAcquire(env->accessMODEM, TIME_MUTEX_MODEM_ACCESS) == osOK) {
|
||
|
||
bool fl;
|
||
result = Modem_RestrictSc(&env->modemAt, &fl, banned);
|
||
if (!result) {
|
||
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||
"Ошибка выполнения команды записи в модем: Запрещенные КА (AT#RESTRICTSC)");
|
||
}
|
||
|
||
osMutexRelease(env->accessMODEM);
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|