Edit online

接口设计

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);    // 暂未实现
};
1. rtc_ops_init
函数原型 rt_err_t rtc_ops_init(void)
功能说明 RTC 控制器的初始化
参数定义
返回值 0,成功
注意事项 -
2. rtc_ops_get_secs
函数原型 rt_err_t rtc_ops_get_secs(time_t *sec)
功能说明 获取当前的 RTC 时间
参数定义 sec - 用于保存返回的时间信息,单位:秒
返回值 0,成功
注意事项 -
3. rtc_ops_set_secs
函数原型 rt_err_t rtc_ops_set_secs(time_t *sec)
功能说明 设置当前的 RTC 时间
参数定义 sec - 用于保存要设置的时间信息,单位:秒
返回值 0,成功
注意事项 -
4. rtc_ops_get_alarm
函数原型 rt_err_t rtc_ops_get_alarm(struct rt_rtc_wkalarm *alarm)
功能说明 获取当前的 Alarm 信息
参数定义 alarm - 用于保存返回的 alarm 信息
返回值 0,成功
注意事项 -
5. rtc_ops_set_alarm
函数原型 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);
    }
}