我的上一个问题里面 if ((strcmp(p_gap_evt->params.connected.peer_addr.addr, DEVICE_ADDR_1) == 0) || (strcmp(p_gap_evt->params.connected.peer_addr.addr, DEVICE_ADDR_2) == 0) || (p_ble_evt->evt.gap_evt.params.connected.peer_id_addr_info.p_id_addr->addr_type == BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE)这里为什么是判断设备地址而不是设备名称或者UUID呢?
时间: 2023-10-28 15:04:38 浏览: 91
在 BLE(蓝牙低功耗)协议中,每个设备都有一个唯一的 MAC 地址作为其硬件标识符。因此,通过检查连接事件中的设备地址,可以确定正在连接的设备。而设备名称和 UUID(通用唯一标识符)是可配置的,并且可以在不同的设备之间重复使用。因此,使用设备地址更可靠地确定正在连接的设备。此外,代码中还检查了设备地址类型是否为 BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE,这是为了支持使用随机私有可解析地址的设备。
相关问题
link_s = list_entry(poss, struct m0_node_list, list); printf("---------------------"); printf("links :%s %d %d\n", link_s->node.name, link_s->node.key, link_s->node.type); printf("---------------------"); printf("---------------------"); if (strcmp(link_s->node.name, "temp") == 0) { stm->key = link_s->node.key; stm->new_val.f_val = cJSON_GetObjectItem(cjson_r, "temp")->valuedouble; //解析对象 stm->type = link_s->node.type; printf("temp %f %d %d\n", stm->new_val.f_val, stm->key, stm->type); } if (strcmp(link_s->node.name, "humi") == 0) { stm->key = link_s->node.key; stm->new_val.i_val = cJSON_GetObjectItem(cjson_r, "humi")->valueint; //解析对象 stm->type = link_s->node.type; printf("humi %d %d %d\n", stm->new_val.i_val, stm->key, stm->type); } if (strcmp(link_s->node.name, "bat") == 0) { stm->key = link_s->node.key; stm->new_val.i_val = cJSON_GetObjectItem(cjson_r, "bat")->valueint; //解析对象 stm->type = link_s->node.type; printf("bat %d %d %d\n", stm->new_val.i_val, stm->key, stm->type); } if (strcmp(link_s->node.name, "led") == 0) { printf("---------------------"); stm->key = link_s->node.key; stm->new_val.b_val = cJSON_GetObjectItem(cjson_r, "led")->valueint; //解析对象 stm->type = link_s->node.type; printf("led %d %d %d\n", stm->new_val.b_val, stm->key, stm->type); }
这段代码看起来像是从一个链表中取出节点,然后根据节点的名称解析 JSON 数据,并将解析结果存储到一个结构体变量 stm 中。具体来说,这段代码的流程可能是这样的:
1. 从 poss 中取出一个节点 link_s。
2. 判断 link_s 的名称,如果是 "temp",则从 cjson_r 中解析出 "temp" 字段的值,赋值给 stm 的 new_val.f_val 字段。
3. 如果是 "humi",则从 cjson_r 中解析出 "humi" 字段的值,赋值给 stm 的 new_val.i_val 字段。
4. 如果是 "bat",则从 cjson_r 中解析出 "bat" 字段的值,赋值给 stm 的 new_val.i_val 字段。
5. 如果是 "led",则从 cjson_r 中解析出 "led" 字段的值,赋值给 stm 的 new_val.b_val 字段。
最后,将 stm 的 key 字段和 type 字段赋值为 link_s 的对应值。
需要注意的是,这段代码无法单独看出来是什么意思,需要结合上下文和相关代码才能理解。
if (strcmp(p->data.name, find) == 0)
这行代码表示判断当前节点的数据中的姓名是否与指定的姓名相等。
在程序中,我们通常需要对数据进行比较,例如查找特定的数据信息、排序等。而 "if (strcmp(p->data.name, find) == 0)" 就是一条用于比较字符串的语句。其中 `p` 是一个指针变量,用于指向当前节点,而 `find` 则是一个指定的字符串,用于与当前节点的数据进行比较。
在这个语句中,使用了 `strcmp` 函数来比较两个字符串是否相等。如果当前节点的数据中的姓名与指定的姓名相等,那么 `strcmp(p->data.name, find)` 的返回值就为 0,表示两个字符串相等。如果不相等,则返回一个非零的值。
通过这个语句,我们可以判断当前节点的数据中的姓名是否与指定的姓名相等,从而实现查找指定员工信息的功能。需要注意的是,在比较字符串时,需要使用 `strcmp` 函数,而不能直接使用 `==` 运算符,因为字符串是一个字符数组,在 C 语言中不能直接进行比较。
阅读全文