AtGsmCommon/AtCommandsSrc/AtGsm_GetTime.c

84 lines
2.2 KiB
C
Executable File

//
// Created by ilya on 14.02.23.
//
#include "AtGsm_GetTime.h"
#include <SystemDelayInterface.h>
#include <stdlib.h>
#include "AtGsmListCurrentCalls.h"
#include "AtCmdCommonProtected.h"
static void parser (char *buf,struct tm *time)
{char *dasd;
uint32_t year;
uint32_t month;
uint32_t day;
uint32_t hour;
uint32_t min;
uint32_t sec;
char buf_year[2];
buf_year[0]=buf[1];
buf_year[1]=buf[2];
char buf_month[2];
buf_month[0]=buf[4];
buf_month[1]=buf[5];
char buf_day[2];buf_day[0]=buf[7];buf_day[1]=buf[8];
char buf_hour[2];buf_hour[0]=buf[10];buf_hour[1]=buf[11];
char buf_min[2];buf_min[0]=buf[13];buf_min[1]=buf[14];
char buf_sec[2];buf_sec[0]=buf[16];buf_sec[1]=buf[17];
year=strtol(buf_year,&dasd,10);
month=strtol(buf_month,&dasd,10);
day=strtol(buf_day,&dasd,10);
hour=strtol(buf_hour,&dasd,10);
min=strtol(buf_min,&dasd,10);
sec=strtol(buf_sec,&dasd,10);
time->tm_year=year;
time->tm_mon=month;
time->tm_mday=day;
time->tm_hour=hour;
time->tm_min=min;
time->tm_sec=sec;}
AtCommandResult AtGsm_GetTime (tAtCmd *env,struct tm *time)
{
char buf[20];
uint32_t timeout = 5000;
uint32_t endMs = SystemGetMs() + timeout;
uint32_t leftMs = timeout;
AtCmdPrepare(env);
AtCmdSendStatic(env, "AT+CCLK?\r\n");
while (AtCmdReceiveNextLine(env, leftMs) == AT_OK) {
leftMs = endMs - SystemGetMs();
if (AtCmdRxBeginWithStatic(env, "AT+CCLK")) {
AtCmdRxClear(env);
continue;
} else if (AtCmdRxBeginWithStatic(env, "OK")) {
AtCmdRxClear(env);
return AT_OK;
} else if (AtCmdRxBeginWithStatic(env, "ERROR")) {
AtCmdRxClear(env);
return AT_ERROR;
} else if (AtCmdRxBeginWithStatic(env, "+CCLK: ")) {
char *div = env->rxBuffer.data + sizeof("+CCLK:");
for (int i=0;i<18;i++)
{char*tmpadd=div+i;
buf[i]=*tmpadd;}
parser(buf,time);
AtCmdRxClear(env);
} else {
AtCmdProcessUnresolvedLine(env);
AtCmdRxClear(env);
continue;
}
}
return AT_ERROR;
}