接口设计
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);
};
函数原型 | rt_err_t drv_wdt_init(rt_watchdog_t *wdt) |
---|---|
功能说明 | Watchdog 控制器的初始化 |
参数定义 | 无 |
返回值 | 0,成功;<0,失败 |
注意事项 | - |
函数原型 | 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);