优化了下时间校准函数

This commit is contained in:
小马_666 2025-02-13 08:56:47 +08:00
parent 3f3d860222
commit 2e72e72eb5
4 changed files with 84 additions and 76 deletions

View File

@ -21,7 +21,7 @@
#define SYS_HW_VERSION (0X22U) #define SYS_HW_VERSION (0X22U)
#define SYS_SW_VERSION (0X10U) #define SYS_SW_VERSION (0X10U)
#define SYS_IOT_UPLOAD_CYCLE_MIN (0X3C00U) // 高位在前,低位在后 #define SYS_IOT_UPLOAD_CYCLE_MIN (0X3C00U) // 高位在后,低位在前
#define SYS_IOT_RETRY (0X03U) #define SYS_IOT_RETRY (0X03U)
#define SYS_TEMP_ALARM_THRESHOLD (0X30U) #define SYS_TEMP_ALARM_THRESHOLD (0X30U)
#define SYS_ALARM_VALVE (0X0AU) #define SYS_ALARM_VALVE (0X0AU)

View File

@ -2,7 +2,7 @@
* @Author : stark1898y 1658608470@qq.com * @Author : stark1898y 1658608470@qq.com
* @Date : 2024-09-04 13:33:49 * @Date : 2024-09-04 13:33:49
* @LastEditors: mbw && 1600520629@qq.com * @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2025-02-06 09:10:34 * @LastEditTime: 2025-02-13 08:55:43
* @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\src\at_device_nt26k.c * @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\src\at_device_nt26k.c
* @Description : * @Description :
* *
@ -769,6 +769,55 @@ static struct netdev *nt26k_netdev_add(const char *netdev_name)
} }
/* ============================= nt26k device operations ============================= */ /* ============================= nt26k device operations ============================= */
int Time_Calibration(struct at_device *device)
{
at_response_t resp = RT_NULL;
RT_ASSERT(device);
resp = at_create_resp(64, 2, rt_tick_from_millisecond(2000));
if (resp == RT_NULL)
{
LOG_E("no memory for resp create.");
at_delete_resp(resp);
return RT_ERROR;
}
if (at_obj_exec_cmd(device->client, resp, "AT+CCLK?") == RT_EOK)
{
TsRtcDateTime rtc_dt;
int year, mounth, days, hous, min, sec;
/*+CCLK:24/11/12,06:08:19+32*/
if (at_resp_parse_line_args_by_kw(resp, "+CCLK:", "+CCLK: \"%d/%d/%d,%d:%d:%d+32\"", &year, &mounth, &days, &hous, &min, &sec) > 0)
{
if ((year != 0) && (year < 70))//如果获取失败,则不配置 例: +CCLK:00/01/01,00:00:12+08
{
rtc_dt.year = (2000 + year);
rtc_dt.month = mounth;
rtc_dt.day = days;
rtc_dt.hour = hous; // 此时为零区时间,需要转化为东八区
rtc_dt.minute = min;
rtc_dt.second = sec;
Time_Zone_Conversion(&rtc_dt); // 时区设置
rtc_dt.week = RTC_GetWeek(rtc_dt.year, rtc_dt.month, rtc_dt.day);
RTC_SetTime(rtc_dt.year, rtc_dt.month, rtc_dt.day,
rtc_dt.hour, rtc_dt.minute, rtc_dt.second); // 设置时间
LOG_I("RTC时间: %04d-%02d-%02d %02d:%02d:%02d \n",
rtc_dt.year, rtc_dt.month, rtc_dt.day, rtc_dt.hour, rtc_dt.minute, rtc_dt.second);
ntp_flag = 1;
at_delete_resp(resp);
}
return RT_EOK;
}
else
{
ntp_flag = 0;
}
}
else
{
ntp_flag = 0;
}
at_delete_resp(resp);
return RT_ERROR;
}
/* initialize for nt26k */ /* initialize for nt26k */
static void nt26k_init_thread_entry(void *parameter) static void nt26k_init_thread_entry(void *parameter)
@ -1043,30 +1092,35 @@ static void nt26k_init_thread_entry(void *parameter)
result = -RT_ERROR; result = -RT_ERROR;
goto __exit; goto __exit;
} }
if (at_obj_exec_cmd(device->client, resp, "AT+CCLK?") == RT_EOK) // if (at_obj_exec_cmd(device->client, resp, "AT+CCLK?") == RT_EOK)
{ // {
TsRtcDateTime rtc_dt; // TsRtcDateTime rtc_dt;
int year, mounth, days, hous, min, sec; // int year, mounth, days, hous, min, sec;
/*+CCLK:24/11/12,06:08:19+32*/ // /*+CCLK:24/11/12,06:08:19+32*/
if (at_resp_parse_line_args_by_kw(resp, "+CCLK:", "+CCLK: \"%d/%d/%d,%d:%d:%d+32\"", &year, &mounth, &days, &hous, &min, &sec) > 0) // if (at_resp_parse_line_args_by_kw(resp, "+CCLK:", "+CCLK: \"%d/%d/%d,%d:%d:%d+32\"", &year, &mounth, &days, &hous, &min, &sec) > 0)
{ // {
rtc_dt.year = (2000 + year); // if ((year != 0) && (year < 70))//如果获取失败,则不配置 例: +CCLK:00/01/01,00:00:12+08
rtc_dt.month = mounth; // {
rtc_dt.day = days; // rtc_dt.year = (2000 + year);
rtc_dt.hour = hous; // 此时为零区时间,需要转化为东八区 // rtc_dt.month = mounth;
rtc_dt.minute = min; // rtc_dt.day = days;
rtc_dt.second = sec; // rtc_dt.hour = hous; // 此时为零区时间,需要转化为东八区
Time_Zone_Conversion(&rtc_dt); // 时区设置 // rtc_dt.minute = min;
rtc_dt.week = RTC_GetWeek(rtc_dt.year, rtc_dt.month, rtc_dt.day); // rtc_dt.second = sec;
RTC_SetTime(rtc_dt.year, rtc_dt.month, rtc_dt.day, // Time_Zone_Conversion(&rtc_dt); // 时区设置
rtc_dt.hour, rtc_dt.minute, rtc_dt.second); // 设置时间 // rtc_dt.week = RTC_GetWeek(rtc_dt.year, rtc_dt.month, rtc_dt.day);
LOG_I("RTC时间: %04d-%02d-%02d %02d:%02d:%02d \n", // RTC_SetTime(rtc_dt.year, rtc_dt.month, rtc_dt.day,
rtc_dt.year, rtc_dt.month, rtc_dt.day, rtc_dt.hour, rtc_dt.minute, rtc_dt.second); // rtc_dt.hour, rtc_dt.minute, rtc_dt.second); // 设置时间
// 网络时间同步标志 // LOG_I("RTC时间: %04d-%02d-%02d %02d:%02d:%02d \n",
ntp_flag = 1; // rtc_dt.year, rtc_dt.month, rtc_dt.day, rtc_dt.hour, rtc_dt.minute, rtc_dt.second);
result = RT_EOK; // // 网络时间同步标志
} // ntp_flag = 1;
} // }
// result = RT_EOK;
// }
// }
Time_Calibration(device);
/* initialize successfully */ /* initialize successfully */
result = RT_EOK; result = RT_EOK;
break; break;
@ -1385,53 +1439,6 @@ static int nt26k_control(struct at_device *device, int cmd, void *arg)
return result; return result;
} }
int Time_Calibration(struct at_device *device)
{
at_response_t resp = RT_NULL;
RT_ASSERT(device);
resp = at_create_resp(64, 2, rt_tick_from_millisecond(2000));
if (resp == RT_NULL)
{
LOG_E("no memory for resp create.");
at_delete_resp(resp);
return RT_ERROR;
}
if (at_obj_exec_cmd(device->client, resp, "AT+CCLK?") == RT_EOK)
{
TsRtcDateTime rtc_dt;
int year, mounth, days, hous, min, sec;
/*+CCLK:24/11/12,06:08:19+32*/
if (at_resp_parse_line_args_by_kw(resp, "+CCLK:", "+CCLK: \"%d/%d/%d,%d:%d:%d+32\"", &year, &mounth, &days, &hous, &min, &sec) > 0)
{
rtc_dt.year = (2000 + year);
rtc_dt.month = mounth;
rtc_dt.day = days;
rtc_dt.hour = hous; // 此时为零区时间,需要转化为东八区
rtc_dt.minute = min;
rtc_dt.second = sec;
Time_Zone_Conversion(&rtc_dt); // 时区设置
rtc_dt.week = RTC_GetWeek(rtc_dt.year, rtc_dt.month, rtc_dt.day);
RTC_SetTime(rtc_dt.year, rtc_dt.month, rtc_dt.day,
rtc_dt.hour, rtc_dt.minute, rtc_dt.second); // 设置时间
LOG_I("RTC时间: %04d-%02d-%02d %02d:%02d:%02d \n",
rtc_dt.year, rtc_dt.month, rtc_dt.day, rtc_dt.hour, rtc_dt.minute, rtc_dt.second);
ntp_flag = 1;
at_delete_resp(resp);
return RT_EOK;
}
else
{
ntp_flag = 0;
}
}
else
{
ntp_flag = 0;
}
at_delete_resp(resp);
return RT_ERROR;
}
const struct at_device_ops nt26k_device_ops = const struct at_device_ops nt26k_device_ops =
{ {

View File

@ -2,7 +2,7 @@
* @Author: mbw * @Author: mbw
* @Date: 2024-10-09 08:42:14 * @Date: 2024-10-09 08:42:14
* @LastEditors: mbw && 1600520629@qq.com * @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2025-02-08 21:11:31 * @LastEditTime: 2025-02-12 11:01:27
* @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\src\bsp_nt26k.c * @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\src\bsp_nt26k.c
* @Description: * @Description:
* *
@ -1594,6 +1594,7 @@ static void Nt26k_Life_Thread_Entry(void *parameter)
} }
nt26k_disconnect_retry_flag = 1; nt26k_disconnect_retry_flag = 1;
LOG_D("联网错误,等待10s后重连"); LOG_D("联网错误,等待10s后重连");
rt_thread_mdelay(10000);//上一版本未加延时
delay_n++; delay_n++;
if (delay_n >= 360) // 连续重连大于1小时都不行则重启设备 if (delay_n >= 360) // 连续重连大于1小时都不行则重启设备
{ {

View File

@ -15,8 +15,8 @@
/*使用动态日志及密码功能时,需开启宏 FINSH_USING_AUTH ULOG_USING_FILTER ENABLE_LOG_ALL ULOG_OUTPUT_LVL = 7 以及设置ulog.c 1522行 输出等级为0*/ /*使用动态日志及密码功能时,需开启宏 FINSH_USING_AUTH ULOG_USING_FILTER ENABLE_LOG_ALL ULOG_OUTPUT_LVL = 7 以及设置ulog.c 1522行 输出等级为0*/
/**/ /**/
#define FINSH_USING_AUTH //开启终端密码登录功能 // #define FINSH_USING_AUTH //开启终端密码登录功能
#define ULOG_USING_FILTER //开启动态修改日志等级 默认修改在ulog.c 1522行 // #define ULOG_USING_FILTER //开启动态修改日志等级 默认修改在ulog.c 1522行
#define ENABLE_LOG_ALL #define ENABLE_LOG_ALL
#define TEST_ENABLE //打开所有的终端测试程序 #define TEST_ENABLE //打开所有的终端测试程序