static int set_charger_type(void) { int ret; static int old_type_en = 0; union power_supply_propval val; struct power_supply *psy = power_supply_get_by_name("bbc"); if (psy == NULL) { pr_info("power_supply_get_by_name error.\n"); return -1; } val.intval = chr_type_en; pr_info("set_charger_type: %d.\n", val.intval); if (val.intval) { if (!old_type_en) { ret = power_supply_set_property(psy, POWER_SUPPLY_PROP_ONLINE, &val); old_type_en = 1; } power_supply_changed(psy); val.intval = POWER_SUPPLY_TYPE_WIRELESS; ret = power_supply_set_property(psy, POWER_SUPPLY_PROP_TYPE, &val); if (!ret) { return val.intval; } else { return 0; } } else { val.intval = POWER_SUPPLY_TYPE_USB; ret = power_supply_set_property(psy, POWER_SUPPLY_PROP_TYPE, &val); if (ret < 0) pr_info("set chg psy failed\n"); power_supply_changed(psy); old_type_en = 0; } return 0; }请详细分析说明一下这段代码的流程
时间: 2024-03-30 10:35:31 浏览: 48
Moody-charger.rar_charger_充电_原理图 产品_电瓶车_量产
这段代码的作用是设置充电器的类型。下面是这段代码的流程:
1. 定义一个整形变量ret,用来保存函数返回值。
2. 定义一个静态整形变量old_type_en,用来保存之前的充电器类型是否启用的状态。
3. 定义一个power_supply_propval类型的联合体val,用来保存充电器类型的值。
4. 使用power_supply_get_by_name函数获取名为"bbc"的电源供应器对象。
5. 如果获取的电源供应器对象为空,则输出错误信息并返回-1。
6. 设置val的intval成员变量为chr_type_en,表示充电器类型的值。
7. 如果充电器类型启用,则判断之前的充电器类型是否启用。
8. 如果之前的充电器类型未启用,则调用power_supply_set_property函数设置充电器在线状态为val的值,并将old_type_en设置为1。
9. 调用power_supply_changed函数通知系统充电器状态已经改变。
10. 设置val的intval成员变量为POWER_SUPPLY_TYPE_WIRELESS,表示充电器类型为无线充电器。
11. 调用power_supply_set_property函数设置充电器类型为无线充电器。
12. 如果设置成功,则返回val的intval成员变量,否则返回0。
13. 如果充电器类型未启用,则设置val的intval成员变量为POWER_SUPPLY_TYPE_USB,表示充电器类型为USB充电器。
14. 调用power_supply_set_property函数设置充电器类型为USB充电器。
15. 如果设置失败,则输出错误信息。
16. 调用power_supply_changed函数通知系统充电器状态已经改变。
17. 将old_type_en设置为0。
18. 返回0。
在这段代码中,首先获取名为"bbc"的电源供应器对象,然后根据chr_type_en的值判断充电器类型是否启用,并根据old_type_en的值判断之前的充电器类型是否启用。接着,根据充电器类型的启用状态设置充电器在线状态和充电器类型,并调用power_supply_changed函数通知系统充电器状态已经改变。最后,返回设置的充电器类型的值。
阅读全文