sink-pdos = <PDO_FIXED(5000, 1325, PDO_FIXED_USB_COMM)>;
时间: 2024-04-02 13:31:28 浏览: 39
这看起来像一个CANopen网络中的对象字典条目,其中"PDO_FIXED"是一个数据类型,代表固定长度的PDO(Process Data Object)。这个条目的含义是,当接收到一个特定的CANopen PDO(来自节点ID为1325的设备,对象字典索引为5000)时,会将其解析为一个USB通信相关的数据结构。具体的数据结构定义应该在对象字典的其他条目中给出。
相关问题
sink-pdos = <PDO_FIXED(5000, 1325, PDO_FIXED_USB_COMM)>代码分析
这行代码定义了一个名为 "sink-pdos" 的变量,其值为一个包含一个 "PDO_FIXED" 对象的列表。
"PDO_FIXED" 是一种对象类型,用于表示固定的电源数据对象(PDO)。这个对象有三个参数,分别表示电压、最大电流和通信协议。在这里,这个对象表示电压为 5000mV,最大电流为 1325mA,通信协议为 USB。
尖括号 "<>" 表示这是一个列表,尖括号中的内容表示列表的元素。因此,这个变量的值是一个包含一个 "PDO_FIXED" 对象的列表。
pd->num_sink_caps = device_property_read_u32_array(parent, "qcom,default-sink-caps", NULL, 0); if (pd->num_sink_caps > 0) { int i; u32 sink_caps[14]; if (pd->num_sink_caps % 2 || pd->num_sink_caps > 14) { ret = -EINVAL; usbpd_err(&pd->dev, "default-sink-caps must be be specified as voltage/current, max 7 pairs\n"); goto put_psy; } ret = device_property_read_u32_array(parent, "qcom,default-sink-caps", sink_caps, pd->num_sink_caps); if (ret) { usbpd_err(&pd->dev, "Error reading default-sink-caps\n"); goto put_psy; } pd->num_sink_caps /= 2; for (i = 0; i < pd->num_sink_caps; i++) { int v = sink_caps[i * 2] / 50; int c = sink_caps[i * 2 + 1] / 10; pd->sink_caps[i] = PD_SNK_PDO_FIXED(0, 0, 0, 0, 0, v, c); } /* First PDO includes additional capabilities */ pd->sink_caps[0] |= PD_SNK_PDO_FIXED(1, 0, 0, 1, 1, 0, 0); } else { memcpy(pd->sink_caps, default_snk_caps, sizeof(default_snk_caps)); pd->num_sink_caps = ARRAY_SIZE(default_snk_caps); }代码分析
这段代码的作用是从设备树中读取默认的sink capabilities(下沉能力),并将其转换为对应的PDO(Power Data Object)格式存储在pd->sink_caps数组中。
首先,代码通过调用device_property_read_u32_array函数读取"qcom,default-sink-caps"属性对应的整型数组,并将其存储在pd->num_sink_caps变量中。如果读取成功,且数组的长度大于0,则进入if语句中处理读取到的sink capabilities。
在if语句中,代码首先检查sink capabilities数组的长度是否为偶数且不超过14,如果不满足条件则返回-EINVAL错误码。然后,代码再次调用device_property_read_u32_array函数,将读取到的sink capabilities存储在sink_caps数组中。如果读取失败,则返回错误码并跳转到put_psy标签处处理。
接下来,代码将pd->num_sink_caps除以2得到sink capabilities的个数,并遍历数组中每一对voltage和current,将其转换为对应的PDO格式存储在pd->sink_caps数组中。
最后,代码为pd->sink_caps数组的第一个PDO设置了额外的capabilities(能力),并将pd->num_sink_caps设置为存储在数组中的PDO的个数。如果从设备树中没有读取到sink capabilities,则代码将默认的sink capabilities存储在pd->sink_caps数组中,并将pd->num_sink_caps设置为默认数组的长度。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![gz](https://img-home.csdnimg.cn/images/20210720083447.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)