This commit is contained in:
cfif 2025-06-02 14:32:56 +03:00
commit 81f8941556
25 changed files with 1507 additions and 0 deletions

21
Inc/AtGsmSimComA7600.h Normal file
View File

@ -0,0 +1,21 @@
//
// Created by xemon on 10.05.23.
//
#ifndef ATGSMSIMCOMA7600_H
#define ATGSMSIMCOMA7600_H
#include "AtGsmSimComA7600_DefinePdpContext.h"
#include "AtGsmSimComA7600_StartSocketService.h"
#include "AtGsmSimComA7600_StopSocketService.h"
#include "AtGsmSimComA7600_EstablishConnection.h"
#include "AtGsmSimComA7600_SocketSendData.h"
#include "AtGsmSimComA7600_SSL_DefinePdpContext.h"
#include "AtGsmSimComA7600_SSL_StartSocketService.h"
#include "AtGsmSimComA7600_SSL_StopSocketService.h"
#include "AtGsmSimComA7600_SSL_EstablishConnection.h"
#include "AtGsmSimComA7600_SSL_SocketSendData.h"
#endif //ATGSMSIMCOMA7600_H

View File

@ -0,0 +1,30 @@
//
// Created by xemon on 10.05.23.
//
#ifndef ATGSMSIMCOMA7600_DEFINEPDPCONTEXT_H
#define ATGSMSIMCOMA7600_DEFINEPDPCONTEXT_H
#include "AtCmdCommon.h"
typedef enum {
AtGsmSimComA7600_PdpType_IP,
AtGsmSimComA7600_PdpType_IPV6,
AtGsmSimComA7600_PdpType_IPV4V6
} eAtGsmSimComA7600_PdpType;
AtCommandResult AtGsmSimComA7600_DefinePdpContext(
tAtCmd *env, uint8_t cid, eAtGsmSimComA7600_PdpType pdpType, const char *apn, uint8_t apnLen
);
AtCommandResult AtGsmSimComA7600_PdpActivate(tAtCmd *env, uint8_t cid);
AtCommandResult AtGsmSimComA7600_PdpDeactivate(tAtCmd *env, uint8_t cid);
AtCommandResult AtGsmSimComA7600_DefinePdpAuthContext(
tAtCmd *env, uint8_t cid, uint8_t auth_type, const char *user, uint8_t userLen, const char *pass, uint8_t passLen
);
#define AtGsmSimComA7600_DefinePdpIpContextStaticApn(ENV, CID, APN) AtGsmSimComA7600_DefinePdpContext(ENV,CID,AtGsmSimComA7600_PdpType_IP,APN,sizeof(APN)-1)
#endif //ATGSMSIMCOMA7600_DEFINEPDPCONTEXT_H

View File

@ -0,0 +1,32 @@
//
// Created by xemon on 10.05.23.
//
#ifndef ATGSMSIMCOMA7600_ESTEBLISHCONNECTION_H
#define ATGSMSIMCOMA7600_ESTEBLISHCONNECTION_H
#include "AtCmdCommon.h"
typedef enum {
eAtGsmSimComA7600_IpType_TCP,
eAtGsmSimComA7600_IpType_UDP,
} eAtGsmSimComA7600_IpType;
AtCommandResult AtGsmSimComA7600_EstablishConnection(
tAtCmd *env,
uint8_t linkNum,
eAtGsmSimComA7600_IpType type,
char *srvIp,
uint8_t srvIpLen,
uint16_t srvPort,
uint16_t localPort
);
#define AtGsmSimComA7600_EstablishTcpConnStatic(ENV, LNK, SRV, PORT) AtGsmSimComA7600_EstablishConnection(ENV,LNK,eAtGsmSimComA7600_IpType_TCP,SRV,sizeof(SRV)-1,PORT,0)
AtCommandResult AtGsmSimComA7600_HasConnection(tAtCmd *env, uint8_t linkNum, bool *status);
AtCommandResult AtGsmSimComA7600_CloseConnection(tAtCmd *env, uint8_t linkNum);
#endif //ATGSMSIMCOMA7600_ESTEBLISHCONNECTION_H

View File

@ -0,0 +1,44 @@
//
// Created by xemon on 10.07.23.
//
#ifndef ATGSMSIMCOMA7600_ATGSMSIMCOMA7600_HTTP_H
#define ATGSMSIMCOMA7600_ATGSMSIMCOMA7600_HTTP_H
#include "AtCmdCommon.h"
typedef enum {
eAtGsmSimComA7600_HttpMethod_GET = '0',
eAtGsmSimComA7600_HttpMethod_POST = '1',
eAtGsmSimComA7600_HttpMethod_HEAD = '2',
eAtGsmSimComA7600_HttpMethod_DELETE = '3',
} eAtGsmSimComA7600_HttpMethod;
AtCommandResult AtGsmSimComA7600_HttpInit(tAtCmd *env);
AtCommandResult AtGsmSimComA7600_HttpHead(tAtCmd *env);
AtCommandResult AtGsmSimComA7600_HttpTerminate(tAtCmd *env);
AtCommandResult AtGsmSimComA7600_HttpSetUrl(tAtCmd *env, char *url, size_t urlSize);
AtCommandResult AtGsmSimComA7600_HttpSetCid(tAtCmd *env, uint8_t cid);
AtCommandResult AtGsmSimComA7600_HttpMethodAction(
tAtCmd *env,
eAtGsmSimComA7600_HttpMethod method,
uint16_t *resultCode,
size_t *responseLen,
uint32_t timeout
);
AtCommandResult AtGsmSimComA7600_HttpRead(
tAtCmd *env,
uint8_t *data,
size_t dataOffset,
size_t dataLimit,
size_t *readLen
);
#endif //ATGSMSIMCOMA7600_ATGSMSIMCOMA7600_HTTP_H

View File

@ -0,0 +1,16 @@
//
// Created by cfif on 24.05.2024.
//
#ifndef SMART_COMPONENTS_ATGSMSIMCOMA7600_SSL_DEFINEPDPCONTEXT_H
#define SMART_COMPONENTS_ATGSMSIMCOMA7600_SSL_DEFINEPDPCONTEXT_H
typedef enum {
eAtGsmSimComA7600_SslCfgType_INT,
eAtGsmSimComA7600_SslCfgType_STR,
} eAtGsmSimComA7600_SSL_Cfg_Type;
AtCommandResult AtGsmSimComA7600_SSL_SetContext(tAtCmd *env, uint8_t linkNum, uint8_t ctx);
AtCommandResult AtGsmSimComA7600_SSL_CfgContext(tAtCmd *env, eAtGsmSimComA7600_SSL_Cfg_Type type, char *param, uint8_t paramLen, uint8_t ctx, char *value, uint8_t valueLen);
#endif //SMART_COMPONENTS_ATGSMSIMCOMA7600_SSL_DEFINEPDPCONTEXT_H

View File

@ -0,0 +1,28 @@
//
// Created by cfif on 24.05.2024.
//
#ifndef SMART_COMPONENTS_ATGSMSIMCOMA7600_SSL_ESTABLISHCONNECTION_H
#define SMART_COMPONENTS_ATGSMSIMCOMA7600_SSL_ESTABLISHCONNECTION_H
#include "AtCmdCommon.h"
#include "AtGsmSimComSSLType.h"
AtCommandResult AtGsmSimComA7600_SSL_EstablishConnection(
tAtCmd *env,
uint8_t linkNum,
char *srvIp,
uint8_t srvIpLen,
uint16_t srvPort,
eAtGsmSimComA7600_SSL_Type clientType,
uint8_t *codeResultOpen
);
AtCommandResult AtGsmSimComA7600_SSL_HasConnection(tAtCmd *env, uint8_t linkNum, bool *status);
AtCommandResult AtGsmSimComA7600_SSL_CloseConnection(
tAtCmd *env,
uint8_t linkNum
);
#endif //SMART_COMPONENTS_ATGSMSIMCOMA7600_SSL_ESTABLISHCONNECTION_H

View File

@ -0,0 +1,25 @@
//
// Created by cfif on 24.05.2024.
//
#ifndef SMART_COMPONENTS_ATGSMSIMCOMA7600_SSL_SOCKETSENDDATA_H
#define SMART_COMPONENTS_ATGSMSIMCOMA7600_SSL_SOCKETSENDDATA_H
#include "AtCmdCommon.h"
AtCommandResult AtGsmSimComA7600_SSL_SocketSendData(
tAtCmd *env, uint8_t linkNum, uint8_t *data, uint16_t dataLen, uint32_t timeout
);
AtCommandResult AtGsmSimComA7600_SSL_SocketSendDataEx(
tAtCmd *env,
uint8_t linkNum,
uint8_t *data,
uint16_t dataLen,
char *srvIp,
uint8_t srvIpLen,
uint16_t srvPort,
uint32_t timeout
);
#endif //SMART_COMPONENTS_ATGSMSIMCOMA7600_SSL_SOCKETSENDDATA_H

View File

@ -0,0 +1,11 @@
//
// Created by cfif on 24.05.2024.
//
#ifndef SMART_COMPONENTS_ATGSMSIMCOMA7600_SSL_STARTSOCKETSERVICE_H
#define SMART_COMPONENTS_ATGSMSIMCOMA7600_SSL_STARTSOCKETSERVICE_H
AtCommandResult AtGsmSimComA7600_SSL_StartSocketService(tAtCmd *env);
AtCommandResult AtGsmSimComA7600_SSL_HasIp(tAtCmd *env);
#endif //SMART_COMPONENTS_ATGSMSIMCOMA7600_SSL_STARTSOCKETSERVICE_H

View File

@ -0,0 +1,12 @@
//
// Created by cfif on 24.05.2024.
//
#ifndef SMART_COMPONENTS_ATGSMSIMCOMA7600_SSL_STOPSOCKETSERVICE_H
#define SMART_COMPONENTS_ATGSMSIMCOMA7600_SSL_STOPSOCKETSERVICE_H
#include "AtCmdCommon.h"
AtCommandResult AtGsmSimComA7600_SSL_StopSocketService(tAtCmd *env);
#endif //SMART_COMPONENTS_ATGSMSIMCOMA7600_SSL_STOPSOCKETSERVICE_H

View File

@ -0,0 +1,28 @@
//
// Created by xemon on 10.05.23.
//
#ifndef ATGSMSIMCOMA7600_SOCKETSENDDATA_H
#define ATGSMSIMCOMA7600_SOCKETSENDDATA_H
#include "AtCmdCommon.h"
AtCommandResult AtGsmSimComA7600_SocketSendData(
tAtCmd *env, uint8_t linkNum, uint8_t *data, uint16_t dataLen, uint32_t timeout
);
AtCommandResult AtGsmSimComA7600_SocketSendDataUdp(
tAtCmd *env,
uint8_t linkNum,
uint8_t *data,
uint16_t dataLen,
char *srvIp,
uint8_t srvIpLen,
uint16_t srvPort,
uint32_t timeout
);
#define AtGsmSimComA7600_SocketSendDataStatic(ENV, LNK, STR, TOUT) AtGsmSimComA7600_SocketSendData(ENV,LNK,(uint8_t*)STR,sizeof(STR)-1,TOUT)
#endif //ATGSMSIMCOMA7600_SOCKETSENDDATA_H

View File

@ -0,0 +1,12 @@
//
// Created by xemon on 10.05.23.
//
#ifndef ATGSMSIMCOMA7600_STARTSOCKETSERVICE_H
#define ATGSMSIMCOMA7600_STARTSOCKETSERVICE_H
#include "AtCmdCommon.h"
AtCommandResult AtGsmSimComA7600_StartSocketService(tAtCmd *env);
AtCommandResult AtGsmSimComA7600_HasIp(tAtCmd *env);
#endif //ATGSMSIMCOMA7600_STARTSOCKETSERVICE_H

View File

@ -0,0 +1,12 @@
//
// Created by xemon on 10.05.23.
//
#ifndef ATGSMSIMCOMA7600_STOPSOCKETSERVICE_H
#define ATGSMSIMCOMA7600_STOPSOCKETSERVICE_H
#include "AtCmdCommon.h"
AtCommandResult AtGsmSimComA7600_StopSocketService(tAtCmd *env);
#endif //ATGSMSIMCOMA7600_STOPSOCKETSERVICE_H

13
Inc/AtGsmSimComSSLType.h Normal file
View File

@ -0,0 +1,13 @@
//
// Created by cfif on 05.07.2024.
//
#ifndef SMART_COMPONENTS_BOOT_ATGSMSIMCOMSSLTYPE_H
#define SMART_COMPONENTS_BOOT_ATGSMSIMCOMSSLTYPE_H
typedef enum {
eAtGsmSimComA7600_SslType_TCP = 1,
eAtGsmSimComA7600_SslType_TLS = 2,
} eAtGsmSimComA7600_SSL_Type;
#endif //SMART_COMPONENTS_BOOT_ATGSMSIMCOMSSLTYPE_H

View File

@ -0,0 +1,118 @@
//
// Created by cfif on 10.05.23.
//
#include "AtGsmSimComA7600_DefinePdpContext.h"
#include "AtCmdCommonProtected.h"
#include "SystemDelayInterface.h"
AtCommandResult AtGsmSimComA7600_DefinePdpAuthContext(
tAtCmd *env, uint8_t cid, uint8_t auth_type, const char *user, uint8_t userLen, const char *pass, uint8_t passLen
) {
AtCmdPrepare(env);
AtCmdRxClear(env);
if (cid > 15) {
return AT_ERROR;
}
AtCmdTxClear(env);
AtCmdTxAddStatic(env, "AT+CGAUTH=");
AtCmdTxAddDecimalIntWithLimit(env, cid, 2);
AtCmdTxAddChar(env, ',');
AtCmdTxAddDecimalIntWithLimit(env, auth_type, 2);
AtCmdTxAddChar(env, ',');
AtCmdTxAddChar(env, '"');
AtCmdTxAdd(env, pass, passLen);
AtCmdTxAddChar(env, '"');
AtCmdTxAddChar(env, ',');
AtCmdTxAddChar(env, '"');
AtCmdTxAdd(env, user, userLen);
AtCmdTxAddChar(env, '"');
AtCmdTxSendLn(env);
return AtCmdOkErrAnswer(env, 10000);
}
AtCommandResult AtGsmSimComA7600_DefinePdpContext(
tAtCmd *env, uint8_t cid, eAtGsmSimComA7600_PdpType pdpType, const char *apn, uint8_t apnLen
) {
AtCmdPrepare(env);
AtCmdRxClear(env);
if (cid > 15) {
return AT_ERROR;
}
AtCmdTxClear(env);
AtCmdTxAddStatic(env, "AT+CGDCONT=");
AtCmdTxAddDecimalIntWithLimit(env, cid, 2);
AtCmdTxAddChar(env, ',');
AtCmdTxAddChar(env, '"');
switch (pdpType) {
case AtGsmSimComA7600_PdpType_IP:
AtCmdTxAddStatic(env, "IP");
break;
case AtGsmSimComA7600_PdpType_IPV6:
AtCmdTxAddStatic(env, "IPV6");
break;
case AtGsmSimComA7600_PdpType_IPV4V6:
AtCmdTxAddStatic(env, "IPV4V6");
break;
default:
return AT_ERROR;
}
AtCmdTxAddChar(env, '"');
AtCmdTxAddChar(env, ',');
AtCmdTxAddChar(env, '"');
AtCmdTxAdd(env, apn, apnLen);
AtCmdTxAddChar(env, '"');
AtCmdTxSendLn(env);
return AtCmdOkErrAnswer(env, 10000);
}
AtCommandResult AtGsmSimComA7600_PdpActivate(tAtCmd *env, uint8_t cid) {
AtCmdPrepare(env);
AtCmdRxClear(env);
if (cid > 15) {
return AT_ERROR;
}
AtCmdTxClear(env);
AtCmdTxAddStatic(env, "AT+CGACT=1,");
AtCmdTxAddDecimalIntWithLimit(env, cid, 2);
AtCmdTxSendLn(env);
return AtCmdOkErrAnswer(env, env->stdRxTimeout);
}
AtCommandResult AtGsmSimComA7600_PdpDeactivate(tAtCmd *env, uint8_t cid) {
AtCmdPrepare(env);
if (cid > 15) {
return AT_ERROR;
}
AtCmdTxClear(env);
AtCmdTxAddStatic(env, "AT+CGACT=0,");
AtCmdTxAddDecimalIntWithLimit(env, cid, 2);
AtCmdTxSendLn(env);
return AtCmdOkErrAnswer(env, env->stdRxTimeout*10);
}

View File

@ -0,0 +1,178 @@
//
// Created by cfif on 10.05.23.
//
#include <memory.h>
#include "AtGsmSimComA7600_EstablishConnection.h"
#include "AtCmdCommonProtected.h"
#include "SystemDelayInterface.h"
AtCommandResult AtGsmSimComA7600_EstablishConnection(
tAtCmd *env,
uint8_t linkNum,
eAtGsmSimComA7600_IpType type,
char *srvIp,
uint8_t srvIpLen,
uint16_t srvPort,
uint16_t localPort
) {
AtCmdPrepare(env);
AtCmdRxClear(env);
if (linkNum > 9) {
return AT_ERROR;
}
AtCmdTxClear(env);
AtCmdTxAddStatic(env, "AT+CIPOPEN=");
AtCmdTxAddDecimalIntWithLimit(env, linkNum, 1);
AtCmdTxAddChar(env, ',');
AtCmdTxAddChar(env, '"');
switch (type) {
case eAtGsmSimComA7600_IpType_TCP:
AtCmdTxAddStatic(env, "TCP");
break;
case eAtGsmSimComA7600_IpType_UDP:
AtCmdTxAddStatic(env, "UDP");
break;
default:
return AT_ERROR;
}
AtCmdTxAddChar(env, '"');
AtCmdTxAddChar(env, ',');
if (srvIpLen) {
AtCmdTxAddChar(env, '"');
AtCmdTxAdd(env, srvIp, srvIpLen);
AtCmdTxAddChar(env, '"');
}
AtCmdTxAddChar(env, ',');
if (srvPort) {
AtCmdTxAddDecimalIntWithLimit(env, srvPort, 5);
}
if (localPort) {
AtCmdTxAddChar(env, ',');
AtCmdTxAddDecimalIntWithLimit(env, localPort, 5);
}
AtCmdTxSendLn(env);
uint32_t timeout = 20000;
uint32_t endMs = SystemGetMs() + timeout;
uint32_t leftMs = timeout;
while ((AtCmdReceiveNextLine(env, leftMs) == AT_OK) && (SystemGetMs() < endMs)) {
leftMs = endMs - SystemGetMs();
if (AtCmdRxBeginWithStatic(env, "OK")) {
AtCmdRxClear(env);
} else if (AtCmdRxBeginWithStatic(env, "+CIPOPEN: ")) {
AtCommandResult res = (env->rxBuffer.data[sizeof("+CIPOPEN: X,") - 1] == '0') ? AT_OK : AT_ERROR;
AtCmdRxClear(env);
return res;
} else if (AtCmdRxBeginWithStatic(env, "ERROR")) {
AtCmdRxClear(env);
return AT_ERROR;
} else {
AtCmdProcessUnresolvedLine(env);
AtCmdRxClear(env);
continue;
}
}
return AT_TIMEOUT;
}
AtCommandResult AtGsmSimComA7600_HasConnection(tAtCmd *env, uint8_t linkNum, bool *status) {
char pattern[11];
memcpy(pattern, "+CIPOPEN: X", 11);
pattern[sizeof(pattern) - 1] = vAsciiStringDecimalIntToChar(linkNum);
uint8_t pattern_len = sizeof(pattern);
*status = false;
AtCmdPrepare(env);
AtCmdSendStatic(env, "AT+CIPOPEN?\r\n");
uint32_t timeout = env->stdRxTimeout;
uint32_t endMs = SystemGetMs() + timeout;
uint32_t leftMs = timeout;
while ((AtCmdReceiveNextLine(env, leftMs) == AT_OK) && (SystemGetMs() < endMs)) {
leftMs = endMs - SystemGetMs();
if (AtCmdRxBeginWithStatic(env, "OK")) {
AtCmdRxClear(env);
return AT_OK;
} else if (AtCmdRxBeginWithStatic(env, "+CIPOPEN")) {
if (AtCmdRxBeginWith(env, pattern, pattern_len)) {
if (env->rxBuffer.data[pattern_len] == '\r')
*status = false;
else if (env->rxBuffer.data[pattern_len] == ',') {
*status = true;
}
}
AtCmdRxClear(env);
} else if (AtCmdRxBeginWithStatic(env, "ERROR")) {
AtCmdRxClear(env);
return AT_ERROR;
} else {
AtCmdProcessUnresolvedLine(env);
AtCmdRxClear(env);
continue;
}
}
return AT_TIMEOUT;
}
AtCommandResult AtGsmSimComA7600_CloseConnection(
tAtCmd *env,
uint8_t linkNum
) {
AtCmdPrepare(env);
if (linkNum > 9) {
return AT_ERROR;
}
AtCmdTxClear(env);
AtCmdTxAddStatic(env, "AT+CIPClOSE=");
AtCmdTxAddDecimalIntWithLimit(env, linkNum, 1);
AtCmdTxSendLn(env);
uint32_t timeout = 1000;//env->stdRxTimeout;
uint32_t endMs = SystemGetMs() + timeout;
uint32_t leftMs = timeout;
while ((AtCmdReceiveNextLine(env, leftMs) == AT_OK) && (SystemGetMs() < endMs)) {
leftMs = endMs - SystemGetMs();
if (AtCmdRxBeginWithStatic(env, "OK")) {
AtCmdRxClear(env);
} else if (AtCmdRxBeginWithStatic(env, "CLOSED")) {
AtCmdRxClear(env);
return AT_OK;
} else if (AtCmdRxBeginWithStatic(env, "ERROR")) {
AtCmdRxClear(env);
return AT_ERROR;
} else {
AtCmdProcessUnresolvedLine(env);
AtCmdRxClear(env);
continue;
}
}
return AT_TIMEOUT;
}

195
Src/AtGsmSimComA7600_Http.c Normal file
View File

@ -0,0 +1,195 @@
//
// Created by cfif on 10.07.23.
//
#include <SystemDelayInterface.h>
#include "AtGsmSimComA7600_Http.h"
#include "AtCmdCommonProtected.h"
#include "AsciiStringParsingUtils.h"
#include "stdlib.h"
AtCommandResult AtGsmSimComA7600_HttpInit(tAtCmd *env) {
AtCmdPrepare(env);
AtCmdRxClear(env);
AtCmdSendStatic(env, "AT+HTTPINIT\r\n");
return AtCmdOkErrAnswer(env, 10000);
}
AtCommandResult AtGsmSimComA7600_HttpHead(tAtCmd *env) {
AtCmdPrepare(env);
AtCmdRxClear(env);
AtCmdSendStatic(env, "AT+HTTPHEAD\r\n");
return AtCmdOkErrAnswer(env, env->stdRxTimeout);
}
AtCommandResult AtGsmSimComA7600_HttpTerminate(tAtCmd *env) {
AtCmdPrepare(env);
AtCmdRxClear(env);
AtCmdSendStatic(env, "AT+HTTPTERM\r\n");
return AtCmdOkErrAnswer(env, env->stdRxTimeout);
}
AtCommandResult AtGsmSimComA7600_HttpSetUrl(tAtCmd *env, char *url, size_t urlSize) {
AtCmdPrepare(env);
AtCmdRxClear(env);
AtCmdTxClear(env);
AtCmdTxAddStatic(env, "AT+HTTPPARA=\"URL\",");
AtCmdTxAddChar(env, '"');
AtCmdTxAdd(env, url, urlSize);
AtCmdTxAddChar(env, '"');
AtCmdTxSendLn(env);
return AtCmdOkErrAnswer(env, env->stdRxTimeout);
}
AtCommandResult AtGsmSimComA7600_HttpSetCid(tAtCmd *env, uint8_t cid) {
AtCmdPrepare(env);
AtCmdRxClear(env);
AtCmdTxClear(env);
AtCmdTxAddStatic(env, "AT+HTTPPARA=\"CID\",");
AtCmdTxAddDecimalIntWithLimit(env, cid, 2);
AtCmdTxSendLn(env);
return AtCmdOkErrAnswer(env, env->stdRxTimeout);
}
AtCommandResult AtGsmSimComA7600_HttpMethodAction(
tAtCmd *env,
eAtGsmSimComA7600_HttpMethod method,
uint16_t *resultCode,
size_t *responseLen,
uint32_t timeout
) {
AtCmdPrepare(env);
AtCmdRxClear(env);
AtCmdTxClear(env);
AtCmdTxAddStatic(env, "AT+HTTPACTION=");
AtCmdTxAddChar(env, method);
AtCmdTxSendLn(env);
// uint32_t timeout = env->stdRxTimeout * 5;
uint32_t endMs = SystemGetMs() + timeout;
uint32_t leftMs = timeout;
while ((AtCmdReceiveNextLine(env, leftMs) == AT_OK) && (SystemGetMs() < endMs)) {
leftMs = endMs - SystemGetMs();
if (AtCmdRxBeginWithStatic(env, "OK")) {
AtCmdRxClear(env);
} else if (AtCmdRxBeginWithStatic(env, "+HTTPACTION: ")) {
char *blockBeginPos = env->rxBuffer.data + (sizeof("+HTTPACTION: ") - 1) - 1;
char *blockDividerPos = blockBeginPos;
char *strEnd = env->rxBuffer.data + env->rxBuffer.len;
iAsciiStringMoveToNextParsingBlock(&blockBeginPos, &blockDividerPos, strEnd, ',');
eAtGsmSimComA7600_HttpMethod methodRes = (eAtGsmSimComA7600_HttpMethod) *((char *) blockBeginPos);
iAsciiStringMoveToNextParsingBlock(&blockBeginPos, &blockDividerPos, strEnd, ',');
*resultCode = iAsciiStringParseUnsignedLongDecimalNumber(blockBeginPos, blockDividerPos);
iAsciiStringMoveToNextParsingBlock(&blockBeginPos, &blockDividerPos, strEnd, ',');
*responseLen = iAsciiStringParseUnsignedLongDecimalNumber(blockBeginPos, blockDividerPos);
AtCmdRxClear(env);
return methodRes == method ? AT_OK : AT_ERROR;
} else if (AtCmdRxBeginWithStatic(env, "ERROR")) {
AtCmdRxClear(env);
return AT_ERROR;
} else {
AtCmdProcessUnresolvedLine(env);
AtCmdRxClear(env);
continue;
}
}
return AT_TIMEOUT;
}
AtCommandResult AtGsmSimComA7600_HttpRead(
tAtCmd *env,
uint8_t *data,
size_t dataOffset,// непонятный параметр,
size_t dataLimit,
size_t *readLen
) {
AtCmdPrepare(env);
AtCmdRxClear(env);
AtCmdTxClear(env);
AtCmdTxAddStatic(env, "AT+HTTPREAD=");
AtCmdTxAddDecimalIntWithLimit(env, dataOffset, 16);
AtCmdTxAddChar(env, ',');
AtCmdTxAddDecimalIntWithLimit(env, dataLimit, 16);
AtCmdTxSendLn(env);
uint32_t timeout = 20000;
uint32_t endMs = SystemGetMs() + timeout;
uint32_t leftMs = timeout;
bool dataOk = false;
while ((AtCmdReceiveNextLine(env, leftMs) == AT_OK) && (SystemGetMs() < endMs)) {
leftMs = endMs - SystemGetMs();
if (AtCmdRxBeginWithStatic(env, "OK")) {
AtCmdRxClear(env);
// return dataOk ? AT_OK : AT_ERROR;
} else if (AtCmdRxBeginWithStatic(env, "+HTTPREAD: ")) {
*readLen = iAsciiStringParseUnsignedLongDecimalNumber(
env->rxBuffer.data + sizeof("+HTTPREAD: DATA,") - 1, env->rxBuffer.data + env->rxBuffer.len - 1
);
uint16_t bufferLen = SerialPortReceive(env->io, data, *readLen, timeout);
/*
char *blockBeginPos = env->rxBuffer.data + (sizeof("+HTTPREAD: ") - 1) - 1;
char *blockDividerPos = blockBeginPos;
char *strEnd = env->rxBuffer.data + env->rxBuffer.len;
// DATA word
// iAsciiStringMoveToNextParsingBlock(&blockBeginPos, &blockDividerPos, strEnd, ',');
iAsciiStringMoveToNextParsingBlock(&blockBeginPos, &blockDividerPos, strEnd, ',');
*readLen = iAsciiStringParseUnsignedLongDecimalNumber(blockBeginPos, blockDividerPos);
AtCmdRxReadRAW(env, data, *readLen, timeout);
*/
dataOk = true;
AtCmdRxClear(env);
return AT_OK;
} else if (AtCmdRxBeginWithStatic(env, "ERROR")) {
AtCmdRxClear(env);
return AT_ERROR;
} else {
AtCmdProcessUnresolvedLine(env);
AtCmdRxClear(env);
continue;
}
}
return AT_TIMEOUT;
}

View File

@ -0,0 +1,89 @@
//
// Created by cfif on 24.05.2024.
//
#include "AtCmdCommonProtected.h"
#include "SystemDelayInterface.h"
#include "AtGsmSimComA7600_SSL_DefinePdpContext.h"
AtCommandResult AtGsmSimComA7600_SSL_SetContext(tAtCmd *env, uint8_t linkNum, uint8_t ctx) {
AtCmdPrepare(env);
AtCmdTxClear(env);
AtCmdTxAddStatic(env, "AT+CCHSSLCFG=");
AtCmdTxAddDecimalIntWithLimit(env, linkNum, 1);
AtCmdTxAddChar(env, ',');
AtCmdTxAddDecimalIntWithLimit(env, ctx, 1);
AtCmdTxSendLn(env);
uint32_t timeout = env->stdRxTimeout;
uint32_t endMs = SystemGetMs() + timeout;
uint32_t leftMs = timeout;
while ((AtCmdReceiveNextLine(env, leftMs) == AT_OK) && (SystemGetMs() < endMs)) {
leftMs = endMs - SystemGetMs();
if (AtCmdRxBeginWithStatic(env, "OK")) {
AtCmdRxClear(env);
return AT_OK;
} else if (AtCmdRxBeginWithStatic(env, "ERROR")) {
AtCmdRxClear(env);
return AT_ERROR;
} else {
AtCmdProcessUnresolvedLine(env);
AtCmdRxClear(env);
continue;
}
}
return AT_TIMEOUT;
}
AtCommandResult
AtGsmSimComA7600_SSL_CfgContext(tAtCmd *env, eAtGsmSimComA7600_SSL_Cfg_Type type, char *param, uint8_t paramLen,
uint8_t ctx, char *value, uint8_t valueLen) {
AtCmdPrepare(env);
AtCmdRxClear(env);
AtCmdTxClear(env);
AtCmdTxAddStatic(env, "AT+CSSLCFG=");
AtCmdTxAddChar(env, '"');
AtCmdTxAdd(env, param, paramLen);
AtCmdTxAddChar(env, '"');
AtCmdTxAddChar(env, ',');
AtCmdTxAddDecimalIntWithLimit(env, ctx, 1);
AtCmdTxAddChar(env, ',');
if (type == eAtGsmSimComA7600_SslCfgType_STR)
AtCmdTxAddChar(env, '"');
AtCmdTxAdd(env, value, valueLen);
if (type == eAtGsmSimComA7600_SslCfgType_STR)
AtCmdTxAddChar(env, '"');
AtCmdTxSendLn(env);
uint32_t timeout = env->stdRxTimeout;
uint32_t endMs = SystemGetMs() + timeout;
uint32_t leftMs = timeout;
while ((AtCmdReceiveNextLine(env, leftMs) == AT_OK) && (SystemGetMs() < endMs)) {
leftMs = endMs - SystemGetMs();
if (AtCmdRxBeginWithStatic(env, "OK")) {
AtCmdRxClear(env);
return AT_OK;
} else if (AtCmdRxBeginWithStatic(env, "ERROR")) {
AtCmdRxClear(env);
return AT_ERROR;
} else {
AtCmdProcessUnresolvedLine(env);
AtCmdRxClear(env);
continue;
}
}
return AT_TIMEOUT;
}

View File

@ -0,0 +1,167 @@
//
// Created by cfif on 24.05.2024.
//
#include "AtGsmSimComA7600_SSL_EstablishConnection.h"
#include "AtCmdCommonProtected.h"
#include "SystemDelayInterface.h"
#include <string.h>
#include "stdlib.h"
AtCommandResult AtGsmSimComA7600_SSL_EstablishConnection(
tAtCmd *env,
uint8_t linkNum,
char *srvIp,
uint8_t srvIpLen,
uint16_t srvPort,
eAtGsmSimComA7600_SSL_Type sslType,
uint8_t *codeResultOpen
) {
AtCmdPrepare(env);
AtCmdRxClear(env);
if (linkNum > 1) {
return AT_ERROR;
}
AtCmdTxClear(env);
AtCmdTxAddStatic(env, "AT+CCHOPEN=");
AtCmdTxAddDecimalIntWithLimit(env, linkNum, 1);
AtCmdTxAddChar(env, ',');
if (srvIpLen) {
AtCmdTxAddChar(env, '"');
AtCmdTxAdd(env, srvIp, srvIpLen);
AtCmdTxAddChar(env, '"');
}
AtCmdTxAddChar(env, ',');
if (srvPort) {
AtCmdTxAddDecimalIntWithLimit(env, srvPort, 5);
}
if (sslType) {
AtCmdTxAddChar(env, ',');
AtCmdTxAddDecimalIntWithLimit(env, sslType, 1);
}
AtCmdTxSendLn(env);
uint32_t timeout = 20000;
uint32_t endMs = SystemGetMs() + timeout;
uint32_t leftMs = timeout;
while ((AtCmdReceiveNextLine(env, leftMs) == AT_OK) && (SystemGetMs() < endMs)) {
leftMs = endMs - SystemGetMs();
if (AtCmdRxBeginWithStatic(env, "OK")) {
AtCmdRxClear(env);
} else if (AtCmdRxBeginWithStatic(env, "+CCHOPEN: ")) {
*codeResultOpen = atoi(&env->rxBuffer.data[sizeof("+CIPOPEN: X,") - 1]);
AtCommandResult res = (env->rxBuffer.data[sizeof("+CIPOPEN: X,") - 1] == '0') ? AT_OK : AT_ERROR;
AtCmdRxClear(env);
return res;
} else if (AtCmdRxBeginWithStatic(env, "ERROR")) {
*codeResultOpen = 20;
AtCmdRxClear(env);
return AT_ERROR;
} else {
AtCmdProcessUnresolvedLine(env);
AtCmdRxClear(env);
continue;
}
}
return AT_TIMEOUT;
}
AtCommandResult AtGsmSimComA7600_SSL_HasConnection(tAtCmd *env, uint8_t linkNum, bool *status) {
char pattern[13];
memcpy(pattern, "+CCHOPEN: X", 11);
pattern[10] = vAsciiStringDecimalIntToChar(linkNum);
pattern[11] = ',';
pattern[12] = '"';
uint8_t pattern_len = sizeof(pattern);
*status = false;
AtCmdPrepare(env);
AtCmdSendStatic(env, "AT+CCHOPEN?\r\n");
uint32_t timeout = env->stdRxTimeout;
uint32_t endMs = SystemGetMs() + timeout;
uint32_t leftMs = timeout;
while ((AtCmdReceiveNextLine(env, leftMs) == AT_OK) && (SystemGetMs() < endMs)) {
leftMs = endMs - SystemGetMs();
if (AtCmdRxBeginWithStatic(env, "OK")) {
AtCmdRxClear(env);
return AT_OK;
} else if (AtCmdRxBeginWithStatic(env, "+CCHOPEN")) {
if (AtCmdRxBeginWith(env, pattern, pattern_len)) {
if (env->rxBuffer.data[pattern_len] == '"')
*status = false;
else if (env->rxBuffer.data[pattern_len] != '"') {
*status = true;
}
}
AtCmdRxClear(env);
} else if (AtCmdRxBeginWithStatic(env, "ERROR")) {
AtCmdRxClear(env);
return AT_ERROR;
} else {
AtCmdProcessUnresolvedLine(env);
AtCmdRxClear(env);
continue;
}
}
return AT_TIMEOUT;
}
AtCommandResult AtGsmSimComA7600_SSL_CloseConnection(
tAtCmd *env,
uint8_t linkNum
) {
AtCmdPrepare(env);
if (linkNum > 9) {
return AT_ERROR;
}
AtCmdTxClear(env);
AtCmdTxAddStatic(env, "AT+CCHCLOSE=");
AtCmdTxAddDecimalIntWithLimit(env, linkNum, 1);
AtCmdTxSendLn(env);
uint32_t timeout = 1000;//env->stdRxTimeout;
uint32_t endMs = SystemGetMs() + timeout;
uint32_t leftMs = timeout;
while ((AtCmdReceiveNextLine(env, leftMs) == AT_OK) && (SystemGetMs() < endMs)) {
leftMs = endMs - SystemGetMs();
if (AtCmdRxBeginWithStatic(env, "OK")) {
AtCmdRxClear(env);
} else if (AtCmdRxBeginWithStatic(env, "CLOSED")) {
AtCmdRxClear(env);
return AT_OK;
} else if (AtCmdRxBeginWithStatic(env, "ERROR")) {
AtCmdRxClear(env);
return AT_ERROR;
} else {
AtCmdProcessUnresolvedLine(env);
AtCmdRxClear(env);
continue;
}
}
return AT_TIMEOUT;
}

View File

@ -0,0 +1,191 @@
//
// Created by cfif on 24.05.2024.
//
#include "AtGsmSimComA7600_SSL_SocketSendData.h"
#include "AtCmdCommonProtected.h"
#include "SystemDelayInterface.h"
AtCommandResult AtGsmSimComA7600_SSL_SocketSendData(
tAtCmd *env, uint8_t linkNum, uint8_t *data, uint16_t dataLen, uint32_t timeout
) {
return AtGsmSimComA7600_SSL_SocketSendDataEx(env, linkNum, data, dataLen, 0, 0, 0, timeout);
}
AtCommandResult AtGsmSimComA7600_SSL_SocketSendDataEx(
tAtCmd *env,
uint8_t linkNum,
uint8_t *data,
uint16_t dataLen,
char *srvIp,
uint8_t srvIpLen,
uint16_t srvPort,
uint32_t timeout
) {
AtCmdPrepare(env);
AtCmdRxClear(env);
if (linkNum > 1) {
return AT_ERROR;
}
AtCmdTxClear(env);
AtCmdTxAddStatic(env, "AT+CCHSEND=");
AtCmdTxAddDecimalIntWithLimit(env, linkNum, 1);
AtCmdTxAddChar(env, ',');
AtCmdTxAddDecimalIntWithLimit(env, dataLen, 5);
if (srvPort || srvIpLen) {
AtCmdTxAddChar(env, ',');
if (srvIpLen) {
AtCmdTxAddChar(env, '"');
AtCmdTxAdd(env, srvIp, srvIpLen);
AtCmdTxAddChar(env, '"');
}
if (srvPort) {
AtCmdTxAddChar(env, ',');
AtCmdTxAddDecimalIntWithLimit(env, srvPort, 5);
}
}
AtCmdTxSendLn(env);
uint32_t endMs = SystemGetMs() + timeout;
uint32_t leftMs = timeout;
while ((AtCmdReceiveNextChar(env, leftMs) == AT_OK) && (SystemGetMs() < endMs)) {
leftMs = endMs - SystemGetMs();
if (AtCmdRxIsCompleteLine(env)) {
if (AtCmdRxBeginWithStatic(env, ">")) {
AtCmdRxClear(env);
AtCmdSend(env, data, dataLen);
} else if (AtCmdRxBeginWithStatic(env, "ERROR")) {
AtCmdRxClear(env);
return AT_ERROR;
} else if (AtCmdRxBeginWithStatic(env, "OK")) {
AtCmdRxClear(env);
return AT_OK;
} else {
AtCmdProcessUnresolvedLine(env);
AtCmdRxClear(env);
continue;
}
} else {
if (AtCmdRxBeginWithStatic(env, ">")) {
AtCmdRxClear(env);
AtCmdSend(env, data, dataLen);
// return AT_OK;
}
}
}
return AT_TIMEOUT;
}
/*
AtCommandResult AtGsmSimComA7600_SSL_SocketSendDataEx(
tAtCmd *env,
uint8_t linkNum,
uint8_t *data,
uint16_t dataLen,
char *srvIp,
uint8_t srvIpLen,
uint16_t srvPort,
uint32_t timeout
) {
AtCmdPrepare(env);
AtCmdRxClear(env);
if (linkNum > 1) {
return AT_ERROR;
}
AtCmdTxClear(env);
AtCmdTxAddStatic(env, "AT+CCHSEND=");
AtCmdTxAddDecimalIntWithLimit(env, linkNum, 1);
AtCmdTxAddChar(env, ',');
AtCmdTxAddDecimalIntWithLimit(env, dataLen, 5);
if (srvPort || srvIpLen) {
AtCmdTxAddChar(env, ',');
if (srvIpLen) {
AtCmdTxAddChar(env, '"');
AtCmdTxAdd(env, srvIp, srvIpLen);
AtCmdTxAddChar(env, '"');
}
if (srvPort) {
AtCmdTxAddChar(env, ',');
AtCmdTxAddDecimalIntWithLimit(env, srvPort, 5);
}
}
AtCmdTxSendLn(env);
uint32_t endMs = SystemGetMs() + timeout;
uint32_t leftMs = timeout;
while ((AtCmdReceiveNextChar(env, leftMs) == AT_OK) && (SystemGetMs() < endMs)) {
leftMs = endMs - SystemGetMs();
if (AtCmdRxIsCompleteLine(env)) {
if (AtCmdRxBeginWithStatic(env, "ERROR")) {
AtCmdRxClear(env);
return AT_ERROR;
} else if (AtCmdRxBeginWithStatic(env, "OK")) {
AtCmdRxClear(env);
return AT_OK;
} else {
AtCmdProcessUnresolvedLine(env);
AtCmdRxClear(env);
continue;
}
} else {
if (AtCmdRxBeginWithStatic(env, ">")) {
AtCmdRxClear(env);
AtCmdSend(env, data, dataLen);
break;
}
}
}
while ((AtCmdReceiveNextLine(env, leftMs) == AT_OK) && (SystemGetMs() < endMs)) {
leftMs = endMs - SystemGetMs();
if (AtCmdRxBeginWithStatic(env, "ERROR")) {
AtCmdRxClear(env);
return AT_ERROR;
} else if (AtCmdRxBeginWithStatic(env, "OK")) {
AtCmdRxClear(env);
return AT_OK;
} else {
AtCmdProcessUnresolvedLine(env);
AtCmdRxClear(env);
continue;
}
}
return AT_TIMEOUT;
}
*/

View File

@ -0,0 +1,71 @@
//
// Created by cfif on 24.05.2024.
//
#include "AtCmdCommonProtected.h"
#include "SystemDelayInterface.h"
AtCommandResult AtGsmSimComA7600_SSL_StartSocketService(tAtCmd *env) {
AtCmdPrepare(env);
AtCmdRxClear(env);
AtCmdSendStatic(env, "AT+CCHSTART\r\n");
uint32_t timeout = env->stdRxTimeout;
uint32_t endMs = SystemGetMs() + timeout;
uint32_t leftMs = timeout;
while ((AtCmdReceiveNextLine(env, leftMs) == AT_OK) && (SystemGetMs() < endMs)) {
leftMs = endMs - SystemGetMs();
if (AtCmdRxBeginWithStatic(env, "OK")) {
AtCmdRxClear(env);
} else if (AtCmdRxBeginWithStatic(env, "+CCHSTART: 0")) {
AtCmdRxClear(env);
return AT_OK;
} else if (AtCmdRxBeginWithStatic(env, "+CCHSTART: 1")) {
AtCmdRxClear(env);
return AT_ERROR;
} else if (AtCmdRxBeginWithStatic(env, "ERROR")) {
AtCmdRxClear(env);
return AT_ERROR;
} else {
AtCmdProcessUnresolvedLine(env);
AtCmdRxClear(env);
continue;
}
}
return AT_TIMEOUT;
}
AtCommandResult AtGsmSimComA7600_SSL_HasIp(tAtCmd *env) {
AtCmdPrepare(env);
AtCmdSendStatic(env, "AT+CCHADDR\r\n");
uint32_t timeout = env->stdRxTimeout;
uint32_t endMs = SystemGetMs() + timeout;
uint32_t leftMs = timeout;
while ((AtCmdReceiveNextLine(env, leftMs) == AT_OK) && (SystemGetMs() < endMs)) {
leftMs = endMs - SystemGetMs();
if (AtCmdRxBeginWithStatic(env, "OK")) {
AtCmdRxClear(env);
return AT_OK;
} else if (AtCmdRxBeginWithStatic(env, "+IP ERROR:")) {
AtCmdRxClear(env);
} else if (AtCmdRxBeginWithStatic(env, "ERROR")) {
AtCmdRxClear(env);
return AT_ERROR;
} else {
AtCmdProcessUnresolvedLine(env);
AtCmdRxClear(env);
continue;
}
}
return AT_TIMEOUT;
}

View File

@ -0,0 +1,13 @@
//
// Created by cfif on 24.05.2024.
//
#include "AtCmdCommonProtected.h"
AtCommandResult AtGsmSimComA7600_SSL_StopSocketService(tAtCmd *env) {
AtCmdPrepare(env);
AtCmdRxClear(env);
AtCmdSendStatic(env, "AT+CCHSTOP\r\n");
return AtCmdOkErrAnswer(env, env->stdRxTimeout);
}

View File

@ -0,0 +1,97 @@
//
// Created by cfif on 10.05.23.
//
#include "AtGsmSimComA7600_SocketSendData.h"
#include "AtCmdCommonProtected.h"
#include "SystemDelayInterface.h"
AtCommandResult AtGsmSimComA7600_SocketSendData(
tAtCmd *env, uint8_t linkNum, uint8_t *data, uint16_t dataLen, uint32_t timeout
) {
return AtGsmSimComA7600_SocketSendDataUdp(env, linkNum, data, dataLen, 0, 0, 0, timeout);
}
AtCommandResult AtGsmSimComA7600_SocketSendDataUdp(
tAtCmd *env,
uint8_t linkNum,
uint8_t *data,
uint16_t dataLen,
char *srvIp,
uint8_t srvIpLen,
uint16_t srvPort,
uint32_t timeout
) {
AtCmdPrepare(env);
AtCmdRxClear(env);
if (linkNum > 9) {
return AT_ERROR;
}
AtCmdTxClear(env);
AtCmdTxAddStatic(env, "AT+CIPSEND=");
AtCmdTxAddDecimalIntWithLimit(env, linkNum, 1);
AtCmdTxAddChar(env, ',');
AtCmdTxAddDecimalIntWithLimit(env, dataLen, 5);
if (srvPort || srvIpLen) {
AtCmdTxAddChar(env, ',');
if (srvIpLen) {
AtCmdTxAddChar(env, '"');
AtCmdTxAdd(env, srvIp, srvIpLen);
AtCmdTxAddChar(env, '"');
}
if (srvPort) {
AtCmdTxAddChar(env, ',');
AtCmdTxAddDecimalIntWithLimit(env, srvPort, 5);
}
}
AtCmdTxSendLn(env);
uint32_t endMs = SystemGetMs() + timeout;
uint32_t leftMs = timeout;
while ((AtCmdReceiveNextChar(env, leftMs) == AT_OK) && (SystemGetMs() < endMs)) {
leftMs = endMs - SystemGetMs();
if (AtCmdRxIsCompleteLine(env)) {
if (AtCmdRxBeginWithStatic(env, ">")) {
AtCmdRxClear(env);
AtCmdSend(env, data, dataLen);
} else if (AtCmdRxBeginWithStatic(env, "ERROR")) {
AtCmdRxClear(env);
return AT_ERROR;
} else if (AtCmdRxBeginWithStatic(env, "+CIPERROR:")) {
AtCmdRxClear(env);
return AT_ERROR;
} else if (AtCmdRxBeginWithStatic(env, "+CIPSEND: ")) {
AtCmdRxClear(env);
return AT_OK;
} else {
AtCmdProcessUnresolvedLine(env);
AtCmdRxClear(env);
continue;
}
} else {
if (AtCmdRxBeginWithStatic(env, ">")) {
AtCmdRxClear(env);
AtCmdSend(env, data, dataLen);
// return AT_OK;
}
}
}
return AT_TIMEOUT;
}

View File

@ -0,0 +1,71 @@
//
// Created by cfif on 10.05.23.
//
#include "AtGsmSimComA7600_StartSocketService.h"
#include "AtCmdCommonProtected.h"
#include "SystemDelayInterface.h"
AtCommandResult AtGsmSimComA7600_StartSocketService(tAtCmd *env) {
AtCmdPrepare(env);
AtCmdRxClear(env);
AtCmdSendStatic(env, "AT+NETOPEN\r\n");
uint32_t timeout = env->stdRxTimeout;
uint32_t endMs = SystemGetMs() + timeout;
uint32_t leftMs = timeout;
while ((AtCmdReceiveNextLine(env, leftMs) == AT_OK) && (SystemGetMs() < endMs)) {
leftMs = endMs - SystemGetMs();
if (AtCmdRxBeginWithStatic(env, "OK")) {
AtCmdRxClear(env);
} else if (AtCmdRxBeginWithStatic(env, "+NETOPEN: 0")) {
AtCmdRxClear(env);
return AT_OK;
} else if (AtCmdRxBeginWithStatic(env, "+NETOPEN: 1")) {
AtCmdRxClear(env);
return AT_ERROR;
} else if (AtCmdRxBeginWithStatic(env, "ERROR")) {
AtCmdRxClear(env);
return AT_ERROR;
} else {
AtCmdProcessUnresolvedLine(env);
AtCmdRxClear(env);
continue;
}
}
return AT_TIMEOUT;
}
AtCommandResult AtGsmSimComA7600_HasIp(tAtCmd *env) {
AtCmdPrepare(env);
AtCmdSendStatic(env, "AT+IPADDR\r\n");
uint32_t timeout = env->stdRxTimeout;
uint32_t endMs = SystemGetMs() + timeout;
uint32_t leftMs = timeout;
while ((AtCmdReceiveNextLine(env, leftMs) == AT_OK) && (SystemGetMs() < endMs)) {
leftMs = endMs - SystemGetMs();
if (AtCmdRxBeginWithStatic(env, "OK")) {
AtCmdRxClear(env);
return AT_OK;
} else if (AtCmdRxBeginWithStatic(env, "+IP ERROR:")) {
AtCmdRxClear(env);
} else if (AtCmdRxBeginWithStatic(env, "ERROR")) {
AtCmdRxClear(env);
return AT_ERROR;
} else {
AtCmdProcessUnresolvedLine(env);
AtCmdRxClear(env);
continue;
}
}
return AT_TIMEOUT;
}

View File

@ -0,0 +1,16 @@
//
// Created by cfif on 10.05.23.
//
#include "AtGsmSimComA7600_StopSocketService.h"
#include "AtCmdCommonProtected.h"
#include "SystemDelayInterface.h"
AtCommandResult AtGsmSimComA7600_StopSocketService(tAtCmd *env) {
AtCmdPrepare(env);
AtCmdRxClear(env);
AtCmdSendStatic(env, "AT+NETCLOSE\r\n");
return AtCmdOkErrAnswer(env, env->stdRxTimeout);
}

17
modular.json Normal file
View File

@ -0,0 +1,17 @@
{
"dep": [
{
"type": "git",
"provider": "Smart_Components_Aurus",
"repo": "AtGsmCommon"
}
],
"cmake": {
"inc_dirs": [
"./Inc"
],
"srcs": [
"./Src/**.c"
]
}
}