接口设计
Driver 层接口设计
以下接口是 RTC 设备驱动框架的标准接口。
struct rt_rtc_ops
{
rt_err_t (*init)(void);
rt_err_t (*get_secs)(time_t *sec);
rt_err_t (*set_secs)(time_t *sec);
rt_err_t (*get_alarm)(struct rt_rtc_wkalarm *alarm);
rt_err_t (*set_alarm)(struct rt_rtc_wkalarm *alarm);
rt_err_t (*get_timeval)(struct timeval *tv); // 暂未实现
rt_err_t (*set_timeval)(struct timeval *tv); // 暂未实现
};| 函数原型 | rt_err_t rtc_ops_init(void) |
|---|---|
| 功能说明 | RTC 控制器的初始化 |
| 参数定义 | 无 |
| 返回值 | 0,成功 |
| 注意事项 | - |
| 函数原型 | rt_err_t rtc_ops_get_secs(time_t *sec) |
|---|---|
| 功能说明 | 获取当前的 RTC 时间 |
| 参数定义 | sec - 用于保存返回的时间信息,单位:秒 |
| 返回值 | 0,成功 |
| 注意事项 | - |
| 函数原型 | rt_err_t rtc_ops_set_secs(time_t *sec) |
|---|---|
| 功能说明 | 设置当前的 RTC 时间 |
| 参数定义 | sec - 用于保存要设置的时间信息,单位:秒 |
| 返回值 | 0,成功 |
| 注意事项 | - |
| 函数原型 | rt_err_t rtc_ops_get_alarm(struct rt_rtc_wkalarm *alarm) |
|---|---|
| 功能说明 | 获取当前的 Alarm 信息 |
| 参数定义 | alarm - 用于保存返回的 alarm 信息 |
| 返回值 | 0,成功 |
| 注意事项 | - |
| 函数原型 | rt_err_t rtc_ops_set_alarm(struct rt_rtc_wkalarm *alarm) |
|---|---|
| 功能说明 | 设置 Alarm 信息 |
| 参数定义 | alarm - 用于保存要设置的 Alarm 信息 |
| 返回值 | 0,成功 |
| 注意事项 | - |
HAL 层接口设计
HAL 层的函数接口声明存放在 hal_rtc.h
中,主要接口有:
static void test_alarm_callback(rt_alarm_t alarm, time_t timestamp)
{
pr_info("Test alarm callback function.\n");
}
static void cmd_test_alarm(int argc, char **argv)
{
struct rt_alarm_setup setup;
struct rt_alarm *alarm = RT_NULL;
u32 timeout = 0;
time_t now;
struct tm p_tm;
if (argc != 2) {
pr_err("Invalid parameter\n");
return;
}
sscanf((char *)argv[1], "%u", &timeout);
now = time(NULL) + timeout;
gmtime_r(&now, &p_tm);
setup.wktime = p_tm;
alarm = rt_alarm_create(test_alarm_callback, &setup);
if (alarm) {
alarm->flag = RT_ALARM_ONESHOT;
rt_alarm_start(alarm);
}
}