static int pd_eval_src_caps(struct usbpd *pd) { int i; union power_supply_propval val; bool pps_found = false; u32 first_pdo = pd->received_pdos[0]; int pdo_select = -1; u32 mv_select = 0, ma_select = 0; if (PD_SRC_PDO_TYPE(first_pdo) != PD_SRC_PDO_TYPE_FIXED) { usbpd_err(&pd->dev, "First src_cap invalid! %08x\n", first_pdo); return -EINVAL; } pd->peer_usb_comm = PD_SRC_PDO_FIXED_USB_COMM(first_pdo); pd->peer_pr_swap = PD_SRC_PDO_FIXED_PR_SWAP(first_pdo); pd->peer_dr_swap = PD_SRC_PDO_FIXED_DR_SWAP(first_pdo); val.intval = PD_SRC_PDO_FIXED_USB_SUSP(first_pdo); power_supply_set_property(pd->usb_psy, POWER_SUPPLY_PROP_PD_USB_SUSPEND_SUPPORTED, &val); /* Check for PPS APDOs */ if (pd->spec_rev == USBPD_REV_30) { for (i = 1; i < PD_MAX_DATA_OBJ; i++) { if ((PD_SRC_PDO_TYPE(pd->received_pdos[i]) == PD_SRC_PDO_TYPE_AUGMENTED) && !PD_APDO_PPS(pd->received_pdos[i])) { pps_found = true; break; } } } val.intval = pps_found ? POWER_SUPPLY_PD_PPS_ACTIVE : POWER_SUPPLY_PD_ACTIVE; power_supply_set_property(pd->usb_psy, POWER_SUPPLY_PROP_PD_ACTIVE, &val); /* First time connecting to a PD source and it supports USB data */ if (pd->peer_usb_comm && pd->current_dr == DR_UFP && !pd->pd_connected) start_usb_peripheral(pd); /* Select the first PDO (vSafe5V) immediately. */ pdo_select = select_match_pdo(pd,&mv_select,&ma_select); if (pdo_select == -1) { usbpd_dbg(&pd->dev, "%s, invaild pdo select\n",__func__); pd_select_pdo(pd, 1, 0, 0); } else { usbpd_dbg(&pd->dev, "%s, pdo_select = %d, mv= %dmV, ma = %dmA\n",__func__,pdo_select + 1,mv_select,ma_select); pd_select_pdo(pd, pdo_select + 1, mv_select * 1000, ma_select * 1000); } return 0; }代码分析
时间: 2023-09-12 19:08:15 浏览: 47
这段代码是一个函数,名为pd_eval_src_caps,接收一个usbpd结构体指针作为参数。这个函数的作用是评估PD源设备的能力,并设置相关的属性。函数中有许多变量和语句,我们逐一来看:
1. 变量i是一个整型变量,用于循环迭代。
2. 变量val是一个power_supply_propval类型的联合体,用于存储电源供应器的属性值。
3. 变量pps_found是一个布尔型变量,表示是否找到了PPS APDO。
4. 变量first_pdo是一个32位无符号整型变量,表示接收到的第一个PDO。
5. 变量pdo_select是一个整型变量,用于选择PDO。
6. 变量mv_select和ma_select是两个整型变量,用于存储所选PDO的电压和电流值。
7. 如果接收到的第一个PDO不是固定类型的,则函数返回错误。
8. 解析第一个PDO的一些属性,并将这些属性存储到usbpd结构体中。
9. 检查是否有PPS APDO,如果有,则设置PD的活动状态为PPS活动状态,否则为PD活动状态。
10. 如果PD支持USB数据,并且当前的数据角色是UFP,则启动USB外设。
11. 选择第一个PDO(vSafe5V),并设置该PDO的电压和电流值。
12. 函数返回0表示执行成功。
总之,这段代码是用于评估PD源设备的能力并设置相关属性的函数,其中包括了一些错误检查和选择PDO的逻辑。
相关问题
extcon_set_property(pd->extcon, EXTCON_USB, EXTCON_PROP_USB_TYPEC_MED_HIGH_CURRENT, eval);分析
这是一个函数调用语句,它的作用是设置外部连接器(extcon)的属性。具体来说,它设置了一个叫做EXTCON_USB的连接器的属性,即USB Type-C 中等高电流属性(EXTCON_PROP_USB_TYPEC_MED_HIGH_CURRENT),属性值为eval。
该函数调用语句包含了以下参数:
- pd->extcon:指向extcon结构体的指针,用于标识要设置属性的连接器。
- EXTCON_USB:指定要设置的连接器的类型。
- EXTCON_PROP_USB_TYPEC_MED_HIGH_CURRENT:指定要设置的属性类型,即USB Type-C 中等高电流属性。
- eval:要设置的属性值,该值的类型可能是整数或枚举类型,具体取决于属性类型。
总体来说,这行代码用于设置USB Type-C连接器的中等高电流属性,以便控制电源管理和设备充电等方面的行为。
import datasets.voc_eval as voc_eval
`import datasets.voc_eval as voc_eval`是Python中导入voc_eval模块的语句。该模块是用于计算PASCAL VOC数据集上目标检测算法的mAP(平均精度)的。在使用该模块之前,需要先安装PASCAL VOC数据集,并将其存储在本地文件夹中。然后,可以使用`voc_eval`函数来计算mAP。该函数的输入参数包括检测结果文件路径、标注文件路径、图像集文件路径、类别名称、缓存目录、重叠阈值等。具体使用方法可以参考引用和引用中的代码示例。