Watchdog使用指导
使用流程
使用watchdog的一般流程如图1所示。
图 1 watchdog使用流程图

打开Watchdog设备
在操作Watchdog之前,需要使用WatchdogOpen打开一个Watchdog设备,一个系统可能有多个Watchdog,通过ID号来打开指定的Watchdog设备:
int32_t WatchdogOpen(int16_t wdtId);
表 1 WatchdogOpen参数和返回值描述
| 参数 | 参数描述 |
|---|---|
| wdtId | Watchdog设备号 |
| 返回值 | 返回值描述 |
| NULL | 打开失败 |
| struct DevHandle类型指针 | Watchdog设备句柄 |
1. struct DevHandle *handle = NULL;
2. handle = WatchdogOpen(0); /* 打开0号看门狗设备 */
3. if (handle == NULL) {
4. HDF_LOGE("WatchdogOpen: failed, ret %d\n", ret);
5. return;
6. }
获取Watchdog状态
int32_t WatchdogGetStatus(struct DevHandle *handle, int32_t *status);
表 2 WatchdogGetStatus参数和返回值描述
| 参数 | 参数描述 |
|---|---|
| handle | 看门狗设备句柄 |
| status | 获取到的启动状态指针 |
| 返回值 | 返回值描述 |
| 0 | 获取成功 |
| 负数 | 获取失败 |
1. int32_t ret;
2. int32_t status;
3. /* 获取Watchdog启动状态 */
4. ret = WatchdogGetStatus(handle, &status);
5. if (ret != 0) {
6. HDF_LOGE("WatchdogGetStatus: failed, ret %d\n", ret);
7. return;
8. }
设置超时时间
int32_t WatchdogSetTimeout(PalHandle *handle, uint32_t seconds);
表 3 WatchdogSetTimeout参数和返回值描述
| 参数 | 参数描述 |
|---|---|
| handle | 看门狗设备句柄 |
| seconds | 超时时间,单位为秒 |
| 返回值 | 返回值描述 |
| 0 | 设置成功 |
| 负数 | 设置失败 |
1. int32_t ret;
2. uint32_t timeOut = 60;
3. /* 设置超时时间,单位:秒 */
4. ret = WatchdogSetTimeout(handle, timeOut);
5. if (ret != 0) {
6. HDF_LOGE("WatchdogSetTimeout: failed, ret %d\n", ret);
7. return;
8. }
获取超时时间
int32_t WatchdogGetTimeout(PalHandle *handle, uint32_t *seconds);
表 4 WatchdogGetTimeout参数和返回值描述
| 参数 | 参数描述 |
|---|---|
| handle | 看门狗设备句柄 |
| seconds | 接收超时时间的指针,单位为秒 |
| 返回值 | 返回值描述 |
| 0 | 获取成功 |
| 负数 | 获取失败 |
1. int32_t ret;
2. uint32_t timeOut;
3. /* 获取超时时间,单位:秒 */
4. ret = WatchdogGetTimeout(handle, &timeOut);
5. if (ret != 0) {
6. HDF_LOGE("WatchdogGetTimeout: failed, ret %d\n", ret);
7. return;
8. }
启动Watchdog
int32_t WatchdogStart(struct DevHandle *handle);
表 5 WatchdogStart参数和返回值描述
| 参数 | 参数描述 |
|---|---|
| handle | 看门狗设备句柄 |
| 返回值 | 返回值描述 |
| 0 | 启动成功 |
| 负数 | 启动失败 |
1. int32_t ret;
2. /* 启动看门狗 */
3. ret = WatchdogStart(handle);
4. if (ret != 0) {
5. HDF_LOGE("WatchdogStart: failed, ret %d\n", ret);
6. return;
7. }
喂狗
int32_t WatchdogFeed(struct DevHandle *handle);
表 6 WatchdogFeed参数和返回值描述
| 参数 | 参数描述 |
|---|---|
| handle | 看门狗设备句柄 |
| 返回值 | 返回值描述 |
| 0 | 喂狗成功 |
| 负数 | 喂狗失败 |
1. int32_t ret;
2. /* 喂狗 */
3. ret = WatchdogFeed(handle);
4. if (ret != 0) {
5. HDF_LOGE("WatchdogFeed: failed, ret %d\n", ret);
6. return;
7. }
停止Watchdog
int32_t WatchdogStop(struct DevHandle *handle);
表 7 WatchdogStop参数和返回值描述
| 参数 | 参数描述 |
|---|---|
| handle | 看门狗设备句柄 |
| 返回值 | 返回值描述 |
| 0 | 停止成功 |
| 负数 | 停止失败 |
1. int32_t ret;
2. /* 停止看门狗 */
3. ret = WatchdogStop(handle);
4. if (ret != 0) {
5. HDF_LOGE("WatchdogStop: failed, ret %d\n", ret);
6. return;
7. }
关闭Watchdog设备
当操作完毕时,使用WatchdogClose关闭打开的设备句柄:
void WatchdogClose(struct DevHandle *handle);
表 8 WatchdogClose参数和返回值描述
| 参数 | 参数描述 |
|---|---|
| handle | 看门狗设备句柄 |
1. /* 关闭看门狗 */
2. ret = WatchdogClose(handle);
