From 70f7361f8b860c73e1e9a438f3cfa44042e8b909 Mon Sep 17 00:00:00 2001 From: wangbo Date: Tue, 9 Jan 2024 07:13:39 +0000 Subject: [PATCH] =?UTF-8?q?ADD=201.=E5=A2=9E=E5=8A=A0=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E7=B3=BB=E7=BB=9F=E6=97=B6=E9=97=B4;2.?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=90=8E=E5=8F=B0=E9=87=8D=E5=90=AF=E8=AE=BE?= =?UTF-8?q?=E5=A4=87;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/include/ca_csg.h | 6 +++++ app/lib/a_process/ca_csg.c | 50 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/app/include/ca_csg.h b/app/include/ca_csg.h index c099b3b..ec097f2 100755 --- a/app/include/ca_csg.h +++ b/app/include/ca_csg.h @@ -113,6 +113,12 @@ typedef struct pthread_mutex_t mutex; } csg_t; +typedef struct +{ + unsigned int utc; + unsigned int resverd[8]; +} csg_utc_t; + /* Exported macro ------------------------------------------------------------*/ /* Extern global variables ---------------------------------------------------*/ diff --git a/app/lib/a_process/ca_csg.c b/app/lib/a_process/ca_csg.c index 2175b01..85b1bea 100755 --- a/app/lib/a_process/ca_csg.c +++ b/app/lib/a_process/ca_csg.c @@ -15,6 +15,7 @@ #include #include #include +#include /* 用户代码头文件. */ #include "cmd.h" @@ -379,6 +380,49 @@ int _csg_response_realtime_data(int sendtype) return 0; } +void _csg_set_system_time(unsigned int time) +{ + struct tm *p =localtime((time_t *)&time); + char buf[128] = {0}; + sprintf(buf,"date -s \"%d-%d-%d %d:%d:%d\"",1900+p->tm_year,1+p->tm_mon,p->tm_mday,p->tm_hour,p->tm_min,p->tm_sec); + LOG("%s U32:0x%08x",buf,time); + system(buf); + system("hwclock -w"); +} + + +int _csg_set_utc_time(char *databuf, int datalen) +{ + if (datalen != sizeof(csg_utc_t)) + { + int result = 0; + DBG(DBG_M_CA_CSG_ERR, "msg reallen:%d,expect len:%d\n", datalen, sizeof(csg_utc_t)); + return _csg_send_packet(Res_SetUTC, (char *)&result, sizeof(result)); + } + + csg_utc_t *msg = (csg_utc_t *)databuf; + unsigned int stime = msg->utc + SHIQUCHA; + + if (abs(stime - time(NULL)) > 60) + { + unsigned int tmp = time(NULL) - sysctrl.start_time; + _csg_set_system_time(stime); + sysctrl.start_time = time(NULL) - tmp; + } + + csg_utc_t ack = {0}; + ack.utc = time(NULL) - SHIQUCHA; + _csg_send_packet(Res_SetUTC, (char *)&ack, sizeof(csg_utc_t)); + return 0; +} + +void _csg_reboot_system() +{ + unsigned int ack[9] = {0}; + _csg_send_packet(Res_Reboot, (char *)&ack, sizeof(ack)); + reboot_system(LOG_CSG, BOOT_REMOTE_RESET); +} + int _csg_get_system_config() { struct in_addr addr; @@ -568,6 +612,12 @@ int _csg_recv_process(char *buf) case Cmd_ReqRTD2: _csg_response_realtime_data(1); break; + case Cmd_SetUTC: + _csg_set_utc_time(pdata, dataLen); + break; + case Cmd_Reboot: + _csg_reboot_system(); + break; case Cmd_ReqSysCfg: _csg_get_system_config(); break;