NTP

AC联网模块提供了从云端服务器通过NTP标准协议获取UTC时间的功能。需要获取NTP时间时,需要调用APIAC_GetNtpTime通知AC联网模块进行NTP时间的获取,获取到时间候,AC联网模块会通过Src/ac_user_eventCallback.c中的NTP回调函数UserCallback_HandleNTP将NTP得到的数据交给UserApp,开发者可以在此添加自己的处理逻辑。开发示例如下:

    void UserCallback_HandleNTP(ZC_NTP_TIME* ntp)
    {
        int ret = 0;
        time_t tmNtp = 0;
        char DateCmd[64] = {0};
        printf("ntp time is %d-%d-%d %d:%d:%d weekday is %d\n",ZC_HTONS(ntp->year),
                                                                     ntp->month,
                                                                     ntp->day,
                                                                     ntp->hour,
                                                                     ntp->min,
                                                                     ntp->sec,
                                                                     ntp->weekday);

        /*将NTP获取到的UTC时间配置到系统时钟,再通过 hwclock -w 写入硬件时钟*/
        tmNtp = ZC_HTONL(ntp->ntp_sec);

        struct timeval tv;
        tv.tv_sec = tmNtp;
        tv.tv_usec = 0;
        ret = settimeofday(&tv, NULL);
        if (0 != ret)
        {
            printf("settimeofday failed\n");
        }

        memset(DateCmd, 0, sizeof(DateCmd));
        sprintf(DateCmd, "hwclock -w");
        if (-1 == system(DateCmd))
        {
            printf("system cmd hwclock failed\n");
            return;
        }
    }

ZC_NTP_TIME的定义如下:


    typedef struct
    {
        u16 year;
        u8 month;
        u8 day;    
        u8 weekday;
        u8 hour;
        u8 min;
        u8 sec;
        u32 ntp_sec;
    }ZC_NTP_TIME;
字段 类型 说明
year u16 年(UTC时间)
month u8 月(UTC时间)
day u8 日(UTC时间)
weekday u8 星期(UTC时间)
hour u8 时(UTC时间)
min u8 分(UTC时间)
sec u8 秒(UTC时间)
ntp_sec u32 当前时间距1970年1月1日00:00:00的描述(UTC时间)