Edit online

接口设计

26 Nov 2024
Read time: 3 minute(s)

Driver 层接口设计

以下接口是 Watchdog 设备驱动框架的标准接口。
struct rt_watchdog_ops
{
    rt_err_t (*init)(rt_watchdog_t *wdt);
    rt_err_t (*control)(rt_watchdog_t *wdt, int cmd, void *arg);
};
1. drv_wdt_init
函数原型 rt_err_t drv_wdt_init(rt_watchdog_t *wdt)
功能说明 Watchdog 控制器的初始化
参数定义
返回值 0,成功;<0,失败
注意事项 -
2. drv_wdt_control
函数原型 rt_err_t drv_wdt_control(rt_watchdog_t *wdt, int cmd, void *args)
功能说明 Watchdog 驱动的 ioctl 接口
参数定义
wdt - 指向 Watchdog 设备
cmd - ioctl 命令码
args - ioctl 命令相应的参数
返回值 0,成功;<0,失败
注意事项 -

CMD 命令码可以用于控制 Watchdog 的行为,例如设置超时时间、获取剩余时间、刷新看门狗等。CMD 命令码详细定义描述如下:

  • 标准命令码:
    #define RT_DEVICE_CTRL_WDT_GET_TIMEOUT    (RT_DEVICE_CTRL_BASE(WDT) + 1) /* get timeout(in seconds) */
    #define RT_DEVICE_CTRL_WDT_SET_TIMEOUT    (RT_DEVICE_CTRL_BASE(WDT) + 2) /* set timeout(in seconds) */
    #define RT_DEVICE_CTRL_WDT_GET_TIMELEFT   (RT_DEVICE_CTRL_BASE(WDT) + 3) /* get the left time before reboot(in seconds) */
    #define RT_DEVICE_CTRL_WDT_KEEPALIVE      (RT_DEVICE_CTRL_BASE(WDT) + 4) /* refresh watchdog */
    #define RT_DEVICE_CTRL_WDT_START          (RT_DEVICE_CTRL_BASE(WDT) + 5) /* start watchdog */
    #define RT_DEVICE_CTRL_WDT_STOP           (RT_DEVICE_CTRL_BASE(WDT) + 6) /* stop watchdog */

    详见 rt-thread/components/drivers/include/watchdog.h

  • AIC 特定的命令码
    #define RT_DEVICE_CTRL_WDT_SET_IRQ_TIMEOUT  (RT_DEVICE_CTRL_BASE(WDT) + 7)  /* set pretimeout(in seconds) */
    #define RT_DEVICE_CTRL_WDT_IRQ_ENABLE       (RT_DEVICE_CTRL_BASE(WDT) + 8)  /* start pretreatment */
    #define RT_DEVICE_CTRL_WDT_IRQ_DISABLE      (RT_DEVICE_CTRL_BASE(WDT) + 9)  /* stop pretreatment */
    #define RT_DEVICE_CTRL_WDT_SET_CLR_THD      (RT_DEVICE_CTRL_BASE(WDT) + 10) /* set clear threshold */

    详见 bsp/arcinchip/include/drv/aic_drv_wdt.h

HAL 层接口设计

HAL 层的函数接口声明存放在 hal_wdt.h 中,主要接口有:
void hal_wdt_op_clr(u32 thd);
s32 hal_wdt_is_running(void);
void hal_wdt_clr_thd_set(u32 ch, struct aic_wdt *wdt);
void hal_wdt_irq_thd_set(u32 ch, struct aic_wdt *wdt);
void hal_wdt_rst_thd_set(u32 ch, struct aic_wdt *wdt);
void hal_wdt_switch_chan(int chan);

u32 hal_wdt_remain(struct aic_wdt *wdt);
void hal_wdt_enable(u32 enable, u32 dbg_continue);
void hal_wdt_irq_enable(u32 enable);
int hal_wdt_irq_sta(void);
void hal_wdt_thd_get(u32 ch, struct aic_wdt *wdt);
int hal_wdt_clr_int(void);

void hal_wdt_status_show(u32 ch);

HAL 层接口设计

HAL 层的函数接口声明存放在 hal_wdt.h 中,主要接口有:
void hal_wdt_op_clr(u32 thd);
s32 hal_wdt_is_running(void);
void hal_wdt_clr_thd_set(u32 ch, struct aic_wdt *wdt);
void hal_wdt_irq_thd_set(u32 ch, struct aic_wdt *wdt);
void hal_wdt_rst_thd_set(u32 ch, struct aic_wdt *wdt);
void hal_wdt_switch_chan(int chan);

u32 hal_wdt_remain(struct aic_wdt *wdt);
void hal_wdt_enable(u32 enable, u32 dbg_continue);
void hal_wdt_irq_enable(u32 enable);
int hal_wdt_irq_sta(void);
void hal_wdt_thd_get(u32 ch, struct aic_wdt *wdt);
int hal_wdt_clr_int(void);

void hal_wdt_status_show(u32 ch);