84 lines
2.2 KiB
C
Executable File
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;
|
|
} |