怎么写一个psy_changed(struct notifier_block *nb, unsigned long evt, void *ptr)像系统上报插入充电器
时间: 2024-04-21 12:30:06 浏览: 89
PSY_Matlab.zip_SADF检验_adjectiveoel_matlab psy_matlab上确界_psy开发语言
5星 · 资源好评率100%
psy_changed函数的实现可以参考以下代码:
```
static int psy_changed(struct notifier_block *nb, unsigned long evt, void *ptr)
{
struct power_supply *psy = ptr;
if (!psy || strcmp(psy->desc->name, "battery") != 0)
return NOTIFY_DONE;
if (evt == PSY_EVENT_PROP_CHANGED) {
struct power_supply_battery_info info;
if (power_supply_get_battery_info(psy, &info) == 0) {
if (info.status == POWER_SUPPLY_STATUS_CHARGING) {
// 插入充电器
// 执行相应操作
} else if (info.status == POWER_SUPPLY_STATUS_FULL) {
// 充电完成
// 执行相应操作
}
}
}
return NOTIFY_OK;
}
```
该函数是一个notifier_block的回调函数,用于处理电源相关的事件。在函数内部,通过evt参数来判断事件类型,并根据电源状态执行相应操作。通常,该函数的返回值为NOTIFY_OK表示事件已被处理,返回值为NOTIFY_DONE表示事件未被处理。
在上述代码中,我们首先判断电源是否为“battery”,然后判断事件类型是否为PSY_EVENT_PROP_CHANGED,如果是,我们通过power_supply_get_battery_info获取电池信息,然后根据电池状态执行相应操作,比如插入充电器或充电完成等。
阅读全文