// // Created by cfif on 23.05.2024. // #include "AtGsmSimComA7600_SSL_LOAD_CA.h" #include "SystemDelayInterface.h" #include "string.h" tIsFind AtGsmSimComA7600_SSL_CHECK_CA(tAtCmd *env, const char *fileName1, uint16_t FileNameLen1, const char *fileName2, uint16_t FileNameLen2, const char *fileName3, uint16_t FileNameLen3, uint32_t timeout) { tIsFind isFind; isFind.isFind1 = false; isFind.isFind2 = false; isFind.isFind3 = false; AtCmdPrepare(env); AtCmdRxClear(env); AtCmdSendStatic(env, "AT+CCERTLIST\r\n"); uint32_t endMs = SystemGetMs() + timeout; uint32_t leftMs = timeout; while ((AtCmdReceiveNextLine(env, leftMs) == AT_OK) && (SystemGetMs() < endMs)) { leftMs = endMs - SystemGetMs(); if (AtCmdRxBeginWithStatic(env, "+CCERTLIST: ")) { if (!isFind.isFind1) { if (memcmp(fileName1, env->rxBuffer.data + sizeof("+CCERTLIST: "), FileNameLen1) == 0) { isFind.isFind1 = true; } } if (!isFind.isFind2) { if (memcmp(fileName2, env->rxBuffer.data + sizeof("+CCERTLIST: "), FileNameLen2) == 0) { isFind.isFind2 = true; } } if (!isFind.isFind3) { if (memcmp(fileName3, env->rxBuffer.data + sizeof("+CCERTLIST: "), FileNameLen3) == 0) { isFind.isFind3 = true; } } if ((isFind.isFind1) && (isFind.isFind2) && (isFind.isFind3)) return isFind; } } return isFind; } void AtGsmSimComA7600_SSL_DEL_ONE_CA(tAtCmd *env, const char *fileName1, uint16_t FileNameLen1) { AtCmdPrepare(env); AtCmdTxClear(env); AtCmdTxAddStatic(env, "AT+CCERTDELE="); AtCmdTxAddChar(env, '"'); AtCmdTxAdd(env, (char *) fileName1, FileNameLen1); AtCmdTxAddChar(env, '"'); AtCmdTxSendLn(env); AtCmdOkErrAnswer(env, env->stdRxTimeout); } void AtGsmSimComA7600_SSL_DEL_CA(tAtCmd *env, const char *fileName1, uint16_t FileNameLen1, const char *fileName2, uint16_t FileNameLen2, const char *fileName3, uint16_t FileNameLen3) { AtCmdPrepare(env); AtCmdTxClear(env); AtCmdTxAddStatic(env, "AT+CCERTDELE="); AtCmdTxAddChar(env, '"'); AtCmdTxAdd(env, (char *) fileName1, FileNameLen1); AtCmdTxAddChar(env, '"'); AtCmdTxSendLn(env); AtCmdOkErrAnswer(env, env->stdRxTimeout); AtCmdTxClear(env); AtCmdTxAddStatic(env, "AT+CCERTDELE="); AtCmdTxAddChar(env, '"'); AtCmdTxAdd(env, (char *) fileName2, FileNameLen2); AtCmdTxAddChar(env, '"'); AtCmdTxSendLn(env); AtCmdOkErrAnswer(env, env->stdRxTimeout); AtCmdTxClear(env); AtCmdTxAddStatic(env, "AT+CCERTDELE="); AtCmdTxAddChar(env, '"'); AtCmdTxAdd(env, (char *) fileName3, FileNameLen3); AtCmdTxAddChar(env, '"'); AtCmdTxSendLn(env); AtCmdOkErrAnswer(env, env->stdRxTimeout); } AtCommandResult AtGsmSimComA7600_SSL_LOAD_CA(tAtCmd *env, const char *fileName, uint16_t FileNameLen, unsigned char *data, uint16_t dataLen, uint32_t timeout) { AtCmdPrepare(env); AtCmdTxClear(env); AtCmdTxAddStatic(env, "AT+CCERTDOWN="); AtCmdTxAddChar(env, '"'); AtCmdTxAdd(env, (char *) fileName, FileNameLen); AtCmdTxAddChar(env, '"'); AtCmdTxAddChar(env, ','); AtCmdTxAddDecimalIntWithLimit(env, dataLen, 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_TIMEOUT; }