Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BaiXuePrincess
rt-thread
提交
ce6b0a6e
R
rt-thread
项目概览
BaiXuePrincess
/
rt-thread
与 Fork 源项目一致
Fork自
RT-Thread / rt-thread
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ce6b0a6e
编写于
2月 16, 2018
作者:
armink_ztl
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[DeviceDriver] Add NTP auto sync time for RTC device.
上级
c4f4710b
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
73 addition
and
14 deletion
+73
-14
components/drivers/rtc/rtc.c
components/drivers/rtc/rtc.c
+73
-14
未找到文件。
components/drivers/rtc/rtc.c
浏览文件 @
ce6b0a6e
...
...
@@ -22,16 +22,31 @@
* 2012-01-29 aozima first version.
* 2012-04-12 aozima optimization: find rtc device only first.
* 2012-04-16 aozima add scheduler lock for set_date and set_time.
* 2018-02-16 armink add auto sync time by NTP
*/
#include <time.h>
#include <string.h>
#include <rtthread.h>
/** \brief returns the current time.
/* Using NTP auto sync RTC time */
#ifdef RTC_SYNC_USING_NTP
/* NTP first sync delay time for network connect, unit: second */
#ifndef RTC_NTP_FIRST_SYNC_DELAY
#define RTC_NTP_FIRST_SYNC_DELAY (30)
#endif
/* NTP sync period, unit: second */
#ifndef RTC_NTP_SYNC_PERIOD
#define RTC_NTP_SYNC_PERIOD (1L*60L*60L)
#endif
#endif
/* RTC_SYNC_USING_NTP */
/**
* Returns the current time.
*
* @param time_t * t the timestamp pointer, if not used, keep NULL.
*
* \param time_t * t the timestamp pointer, if not used, keep NULL.
* \return time_t return timestamp current.
* @return time_t return timestamp current.
*
*/
/* for IAR 6.2 later Compiler */
...
...
@@ -70,12 +85,14 @@ time_t time(time_t *t)
return
time_now
;
}
/** \brief set system date(time not modify).
/**
* Set system date(time not modify).
*
* \param rt_uint32_t year e.g: 2012.
* \param rt_uint32_t month e.g: 12 (1~12).
* \param rt_uint32_t day e.g: e.g: 31.
* \return rt_err_t if set success, return RT_EOK.
* @param rt_uint32_t year e.g: 2012.
* @param rt_uint32_t month e.g: 12 (1~12).
* @param rt_uint32_t day e.g: 31.
*
* @return rt_err_t if set success, return RT_EOK.
*
*/
rt_err_t
set_date
(
rt_uint32_t
year
,
rt_uint32_t
month
,
rt_uint32_t
day
)
...
...
@@ -118,12 +135,14 @@ rt_err_t set_date(rt_uint32_t year, rt_uint32_t month, rt_uint32_t day)
return
ret
;
}
/** \brief set system time(date not modify).
/**
* Set system time(date not modify).
*
* @param rt_uint32_t hour e.g: 0~23.
* @param rt_uint32_t minute e.g: 0~59.
* @param rt_uint32_t second e.g: 0~59.
*
* \param rt_uint32_t hour e.g: 0~23.
* \param rt_uint32_t minute e.g: 0~59.
* \param rt_uint32_t second e.g: 0~59.
* \return rt_err_t if set success, return RT_EOK.
* @return rt_err_t if set success, return RT_EOK.
*
*/
rt_err_t
set_time
(
rt_uint32_t
hour
,
rt_uint32_t
minute
,
rt_uint32_t
second
)
...
...
@@ -166,6 +185,45 @@ rt_err_t set_time(rt_uint32_t hour, rt_uint32_t minute, rt_uint32_t second)
return
ret
;
}
#ifdef RTC_SYNC_USING_NTP
static
void
ntp_sync_thread_enrty
(
void
*
param
)
{
extern
time_t
ntp_sync_to_rtc
(
void
);
/* first sync delay for network connect */
rt_thread_delay
(
RTC_NTP_FIRST_SYNC_DELAY
*
RT_TICK_PER_SECOND
);
while
(
1
)
{
ntp_sync_to_rtc
();
rt_thread_delay
(
RTC_NTP_SYNC_PERIOD
*
RT_TICK_PER_SECOND
);
}
}
int
rt_rtc_ntp_sync_init
(
void
)
{
static
rt_bool_t
init_ok
=
RT_FALSE
;
rt_thread_t
thread
;
if
(
init_ok
)
{
return
0
;
}
thread
=
rt_thread_create
(
"ntp_sync"
,
ntp_sync_thread_enrty
,
RT_NULL
,
1536
,
26
,
2
);
if
(
thread
)
{
rt_thread_startup
(
thread
);
}
else
{
return
-
RT_ENOMEM
;
}
init_ok
=
RT_TRUE
;
}
INIT_COMPONENT_EXPORT
(
rt_rtc_ntp_sync_init
);
#endif
/* RTC_SYNC_USING_NTP */
#ifdef RT_USING_FINSH
#include <finsh.h>
#include <rtdevice.h>
...
...
@@ -181,4 +239,5 @@ FINSH_FUNCTION_EXPORT(list_date, show date and time.)
FINSH_FUNCTION_EXPORT
(
set_date
,
set
date
.
e
.
g
:
set_date
(
2010
,
2
,
28
))
FINSH_FUNCTION_EXPORT
(
set_time
,
set
time
.
e
.
g
:
set_time
(
23
,
59
,
59
))
#endif
#endif
/* RT_USING_FINSH */
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录