AtCmdCommon/Inc/AtCmdCommon.h

70 lines
2.4 KiB
C

//
// 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