int smblib_get_pe_start(struct smb_charger *chg, union power_supply_propval *val) { /* * hvdcp timeout voter is the last one to allow pd. Use its vote * to indicate start of pe engine */ val->intval = !get_client_vote_locked(chg->pd_disallowed_votable_indirect, HVDCP_TIMEOUT_VOTER); return 0; }代码分析
时间: 2024-04-21 11:26:55 浏览: 12
这段代码是在smblib模块中获取PE起始值的函数。该函数的参数是一个指向smb_charger结构体的指针和一个指向power_supply_propval结构体的指针,该结构体用于保存查询结果。具体分析如下:
1. 首先,val->intval被赋值为一个表达式的结果,该表达式使用了一个名为get_client_vote_locked的函数,该函数的作用是获取pd_disallowed_votable_indirect投票器的投票结果,并根据投票结果返回一个布尔值(0或1)。
2. 接下来,该函数的返回值被设置为0,表示成功获取了PE起始值。
3. 在具体实现中,该函数通过检查HVDCP_TIMEOUT_VOTER投票器的投票结果来判断PE起始值。如果投票结果为0,则说明PE引擎已经开始了。
4. 总之,这段代码的作用是从hardware设备中获取PE起始值,并将结果保存在power_supply_propval结构体中。
相关问题
spdk_json_decode_array的struct spdk_json_val *val参数如何传递
函数 `spdk_json_decode_array` 的参数 `struct spdk_json_val *val` 是一个指向 `struct spdk_json_val` 结构体的指针,用于指向 JSON 数组的值。
可以通过以下几种方式传递参数 `val` :
1. 在函数内部动态创建一个 `struct spdk_json_val` 结构体,并将其指针赋值给 `val` 参数。例如:
```
struct spdk_json_val *val = calloc(1, sizeof(struct spdk_json_val));
```
2. 在函数调用前,先创建一个 `struct spdk_json_val` 结构体,然后将其指针传递给函数。例如:
```
struct spdk_json_val my_val = {0};
spdk_json_decode_array(&my_val, ...);
```
注意,此时需要保证 `my_val` 结构体在函数调用期间是有效的。
3. 如果已经定义了一个 `struct spdk_json_val` 结构体指针,可以直接将其传递给函数。例如:
```
struct spdk_json_val *val = ...; // 已定义的指针
spdk_json_decode_array(val, ...);
```
需要注意的是,传递给 `struct spdk_json_val *val` 参数的指针必须是有效的,并且指向的内存空间必须足够存储 JSON 数组的值。另外,需要根据函数的参数列表传递相应的参数。
int (*getgeo)(struct block_device *, struct hd_geometry *) 举例
这是一个函数指针声明,其返回值为 int 类型,参数列表包括一个指向 struct block_device 结构体类型的指针和一个指向 struct hd_geometry 结构体类型的指针。该函数指针可以用于指向一个具有相同返回值和参数列表的函数。例如:
```c
int my_getgeo(struct block_device *bdev, struct hd_geometry *geo) {
// 函数体
return 0;
}
int main() {
struct block_device bdev;
struct hd_geometry geo;
int (*getgeo)(struct block_device *, struct hd_geometry *) = my_getgeo;
// 调用函数指针
int result = getgeo(&bdev, &geo);
return 0;
}
```
在上面的例子中,我们定义了一个函数 my_getgeo 用于处理获取磁盘几何信息的操作。然后我们声明了一个函数指针 getgeo 并将其指向 my_getgeo 函数。最后,我们调用了函数指针 getgeo 并传入参数,得到返回值 result。