// // Created by xemon on 07.09.22. // #ifndef GSMCOMMONAT_GSMCOMMONAT_H #define GSMCOMMONAT_GSMCOMMONAT_H #include "stdint.h" #include "stddef.h" #include "SerialPort.h" #include "AtCmdBase.h" void AtCmdInit( tAtCmd *env, tSerialPortIO *io, uint8_t *txBuffer, size_t txBufferSize, uint8_t *rxBuffer, size_t rxBufferSize, uint32_t stdTxTimeout, uint32_t stdRxTimeout ); AtCommandResult AtCmd(tAtCmd *env); AtCommandResult AtCmdWaitOk(tAtCmd *env, uint32_t retryInterval, uint32_t timeout); AtCommandResult AtCmdWaitPrefix(tAtCmd *env, uint16_t timeout, char *line, size_t lineLen); AtCommandResult AtCmdWaitChar(tAtCmd *env, uint16_t timeout, char line); #define AtCmdWaitPrefixStatic(ENV, TIMEOUT, STR) AtCmdWaitPrefix(ENV,TIMEOUT,STR, sizeof(STR)-1) void AtCmdSetUrcProcessor(tAtCmd *env, void *urcProcEnv, void *urcProcFunc); void AtCmdClearUrcProcessor(tAtCmd *env); void AtCmdSetAccessMutex(tAtCmd *env, tSystemMutexInterface *accessMutex); void AtCmdClearAccessMutex(tAtCmd *env); void AtCmdProcessUnresolvedLine(tAtCmd *env); void AtCmdProcessUnresolvedLines(tAtCmd *env); //Тут все просто //ENV - это наш tAtCmd* //PAYLOAD - это код который будет безопасно выполнен //TIMEOUT - время ожидания мьютекса, если оно пройдет то PAYLOAD не выполнится //(таймаут внутри payload работает отдельно) #define AtCmd_RunSafe(ENV, TIMEOUT, PAYLOAD) \ { \ if((ENV)->access){ \ if (SystemMutex_acquire((ENV)->access, TIMEOUT) == true) { \ {PAYLOAD} \ SystemMutex_release((ENV)->access); \ }else{ \ \ } \ }else{ \ {PAYLOAD} \ } \ } //#include "AtGsmListCurrentCalls.h" #include "AtGsmErrorLogLevel.h" #endif //GSMCOMMONAT_GSMCOMMONAT_H