首页 > 其他分享 >HCI_LE_Set_Event_Mask(0x0001)命令全面解析

HCI_LE_Set_Event_Mask(0x0001)命令全面解析

时间:2024-10-21 09:18:31浏览次数:7  
标签:LE Mask 0x0001 Set 事件 掩码 HCI Event

目录

一、命令概述

二、命令格式

2.1. 一般格式

2.2. 格式示例

2.3. 发送命令

三、命令参数详解

3.1. LE_Event_Mask

3.2. 常见事件掩码

3.3. 使用注意事项

四、命令返回参数说明

4.1. 返回事件:HCI_Command_Complete

4.2. 返回事件参数

五、命令的执行流程

5.1. 命令发送(主机端)

5.2. 控制器处理

5.3. 命令完成通知(控制器端)

5.4. 主机处理(主机端)

5.5. 代码示例

 六、命令的应用场景

6.1. 优化设备性能

6.2. 调试和诊断

6.3. 定制化功能实现

6.4. 系统管理

6.5. 兼容性和互操作性

6.6. 应用示例:BLE设备连接管理

6.6.1. 场景描述

6.6.2. 操作步骤

6.6.3. 示例代码(伪代码)

七、使用注意事项

7.1. 牙控制器状态确认

7.2. 事件选择与管理

7.3. 控制器支持性检查

7.4. LE Meta事件位设置

7.5. 其他注意事项

八、总结


HCI_LE_Set_Event_Mask 是蓝牙低功耗(Bluetooth Low Energy, BLE)协议栈中的一个主机控制器接口(Host Controller Interface, HCI)命令。该命令用于设置蓝牙设备在BLE模式下感兴趣的事件类型。通过配置事件掩码(Event Mask),主机可以指定哪些BLE事件应该被报告给主机。

一、命令概述

HCI_LE_Set_Event_Mask 命令允许主机通过HCI(主机控制器接口)来控制哪些LE(低功耗)事件会被生成并报告给主机。

BLUETOOTH CORE SPECIFICATION Version 5.4 | Vol 4, Part E page 2341 

该命令的主要功能:

  • 事件控制:通过设置LE_Event_Mask,主机可以精确地指定它感兴趣的事件类型,从而避免接收到不必要的事件通知,减少系统开销。
  • 性能优化:通过仅启用必要的事件,主机可以减少中断和数据处理的频率,从而优化蓝牙低功耗设备的性能和响应时间。
  • 兼容性保障:控制器会忽略不支持或为未来保留的位,这确保了HCI_LE_Set_Event_Mask命令的向后兼容性和对未来扩展的支持。

此外,要生成LE事件,还需要确保Event_Mask中的LE Meta事件位被设置。如果该位未设置,则无论LE_Event_Mask如何配置,都不会生成LE事件。

二、命令格式

2.1. 一般格式

HCI_LE_Set_Event_Mask 命令的格式如下:

  • OGF (Opcode Group Field): 0x08,表示这是一个LE(低功耗)相关的命令组。
  • OCF (Opcode Command Field): 0x0001,表示这是一个设置事件掩码的命令。
  • Parameter Length: 8字节(因为事件掩码是64位),表明紧随其后的参数长度为8字节,即事件掩码的大小。
  • Parameters
    • Event Mask (8 bytes)
      • 这是一个64位的二进制位掩码,每一位与一个特定的事件相关联。
      • 如果某一位被设置为1,则表明主机对该事件感兴趣,期望接收其通知。
      • 如果某一位被设置为0,则表明主机对该事件不感兴趣,不希望接收其通知。

2.2. 格式示例

以下是一个HCI_LE_Set_Event_Mask命令的示例,其中事件掩码被设置为一个具体的值(仅为示例,实际值应根据需要设置):

OGF:         0x08  
OCF:         0x0001  
Parameter Length: 0x08  
Event Mask:    0x1122334455667788  (示例值,每位代表一个事件的兴趣状态)

在实际应用中,Event Mask的值将基于主机希望接收的事件类型来设置。例如,如果主机只对连接建立和断开事件感兴趣,那么它将相应地设置这些事件对应的位为1,而其他位则为0。

2.3. 发送命令

当主机准备好发送HCI_LE_Set_Event_Mask命令时,它会将上述字段组合成一个完整的HCI命令数据包,并通过HCI接口发送给蓝牙控制器。蓝牙控制器在接收到命令后,会解析事件掩码,并根据其配置来生成和报告事件给主机。

三、命令参数详解

3.1. LE_Event_Mask

LE_Event_Mask 是一个 64 位的字段,用于指定蓝牙低功耗(BLE)设备中主机控制器接口(HCI)应报告给主机的事件类型。每一位都对应一个特定的事件,这些事件的类型和含义由蓝牙低功耗技术的规范来定义。

以下是蓝牙规范的版本5.4定义的事件及其对应的位(注意:这些位的具体分配可能会根据蓝牙规范的版本有所不同)

1. 位数与事件对应

  • Event Mask 共有 64 位,每一位代表一个可能的事件。
  • 如果某一位被设置为 1,则表明主机对该事件感兴趣,并希望接收其通知。
  • 如果某一位被设置为 0,则表明主机对该事件不感兴趣,不希望接收其通知。

2. 事件类型与含义

  • 事件的类型和具体含义由蓝牙低功耗技术的规范详细定义。
  • 这些事件可能包括连接建立、连接断开、广播报告、连接更新完成等。

3. 默认值与全零值

  • 当所有位都被设置为 0 时,表示没有指定任何事件。
  • 默认情况下,位 0 到 4(即值 0x0000 0000 0000 001F)被设置为 1,这通常对应于一些基本或常见的事件类型。

4. 保留位

  • 在此表中未列出的所有位都保留为将来使用。
  • 这意味着这些位目前不应被设置或修改,因为它们可能在未来版本的蓝牙规范中用于定义新的事件。

3.2. 常见事件掩码

以下是一些常见的事件及其对应的位(注意:这些位的具体分配可能会根据蓝牙规范的版本有所不同,以下列出的是一些常见的事件):

1. LE Connection Complete Event(0x0000000000000001)

  • 当BLE设备成功建立或断开一个连接时,会触发此事件。
  • 主机可以通过此事件了解连接的建立或断开状态,以及相关的连接参数。

2. LE Advertising Report Event(0x0000000000000002)

  • 当BLE设备在扫描过程中接收到其他设备的广播数据时,会触发此事件。
  • 主机可以通过此事件获取广播设备的地址、类型、数据等信息。

3. LE Connection Update Complete Event(0x0000000000000004)

  • 当BLE设备成功更新连接参数(如连接间隔、从设备延迟等)时,会触发此事件。
  • 主机可以通过此事件了解连接参数的更新结果。

4. LE Read Remote Features Complete Event(0x0000000000000008)

  • 当BLE设备成功读取远程设备的特性集时,会触发此事件。
  • 主机可以通过此事件了解远程设备支持的特性。

5. LE Long Term Key Request Event(0x0000000000000010)

  • 当BLE设备需要生成或请求长期密钥(LTK)时,会触发此事件。
  • 主机可以通过此事件处理LTK的生成或请求过程。

6. LE Remote Connection Parameter Request Event(0x0000000000000020)

  • 当BLE设备接收到远程设备提出的连接参数更新请求时,会触发此事件。
  • 主机可以通过此事件决定是否接受或拒绝远程设备的连接参数更新请求。

7. LE Data Length Change Event(0x0000000000000040)

  • 当BLE设备成功更改数据包的长度时,会触发此事件。
  • 主机可以通过此事件了解数据包长度的更改结果。

8. LE Read Local P-256 Public Key Complete Event(0x0000000000000080)

  • 当BLE设备成功读取本地P-256公钥时,会触发此事件。
  • 主机可以通过此事件获取本地设备的P-256公钥。

9. LE Generate DHKey Complete Event(0x0000000000000100)

  • 当BLE设备成功生成DHKey(Diffie-Hellman密钥)时,会触发此事件。
  • 主机可以通过此事件获取生成的DHKey。

10. LE Enhanced Connection Complete Event(0x0000000000000200)

  • 当BLE设备成功建立或断开一个增强型连接时,会触发此事件。
  • 与LE Connection Complete Event类似,但可能包含更多关于增强型连接的信息。

11. LE Direct Advertising Report Event(0x0000000000000400)

  • 当BLE设备在定向扫描过程中接收到特定设备的广播数据时,会触发此事件。
  • 与LE Advertising Report Event类似,但定向扫描更加高效,因为它只针对特定的设备地址。

12. LE PHY Update Complete Event(0x0000000000000800)

  • 当BLE设备成功更新物理层(PHY)参数时,会触发此事件。
  • 主机可以通过此事件了解PHY参数的更新结果。

请注意,上述事件及其对应的位可能会根据蓝牙规范的版本而有所不同。因此,在实际应用中,建议查阅最新的蓝牙核心规范以获取最准确的信息。此外,当配置事件掩码时,主机应确保只设置它感兴趣的事件位,以避免不必要的中断和数据处理开销。

3.3. 使用注意事项

  • 在设置 Event Mask 时,主机应仔细考虑它感兴趣的事件类型,并相应地设置或清除相应的位。
  • 主机应定期检查和更新 Event Mask,以确保它能够接收所有重要的事件通知。
  • 如果主机设置了控制器不支持的事件位,控制器将忽略这些位。因此,在设置 Event Mask 之前,主机应查阅控制器的文档以了解它支持哪些事件。

Event Mask 是蓝牙低功耗技术中一个重要的配置参数,它决定了哪些事件会被报告给主机。通过合理地设置 Event Mask,主机可以优化系统的性能和响应性,并确保它能够接收所有重要的事件通知。

四、命令返回参数说明

当HCI_LE_Set_Event_Mask命令执行完成后,会生成一个特定的返回事件来通知主机命令的结果。

4.1. 返回事件:HCI_Command_Complete

这是HCI(主机控制器接口)用于通知主机某个命令已经完成执行的标准事件。对于HCI_LE_Set_Event_Mask命令,当命令成功执行后,将会生成并发送一个HCI_Command_Complete事件给主机。

4.2. 返回事件参数

  • 事件代码:这是一个特定的代码,用于标识HCI_Command_Complete事件。在HCI规范中,每个命令完成时生成的事件都有一个唯一的代码。
  • 参数长度:表示随后跟随的参数字节数。对于HCI_Command_Complete事件,这个长度通常包括状态字节和可能的返回参数(如果有的话)。
  • 状态:一个字节,用于指示命令的执行结果。
    • 如果命令成功执行,则状态字节通常为0x00。
    • 如果命令执行失败,则状态字节将包含一个非零的错误代码,该代码指示了失败的原因。
  • 返回参数(可选):
    • 对于某些命令,当命令成功执行时,会返回一些额外的参数。然而,对于HCI_LE_Set_Event_Mask命令,通常没有额外的返回参数,因为该命令的主要作用是配置事件掩码,而不是检索或返回任何信息。

五、命令的执行流程

HCI_LE_Set_Event_Mask命令的执行流程主要涉及以下几个步骤。

5.1. 命令发送(主机端)

  • 命令构建:主机(Host)首先根据需求构建一个HCI_LE_Set_Event_Mask命令,该命令包含一个64位的事件掩码,用于指定哪些HCI事件应该被报告给主机。
  • 发送命令:构建完成后,主机通过HCI接口(如UART、USB等)将命令发送给蓝牙控制器(Controller)。

5.2. 控制器处理

  • 命令接收:蓝牙控制器接收来自主机的HCI_LE_Set_Event_Mask命令。
  • 命令解析:控制器解析命令内容,提取出64位的事件掩码。
  • 事件掩码设置:根据提取出的事件掩码,控制器更新其内部的事件过滤机制,确保只有被事件掩码允许的事件才会被报告给主机。

5.3. 命令完成通知(控制器端)

  • 生成事件:当HCI_LE_Set_Event_Mask命令成功执行并完成后,控制器会生成一个HCI_Command_Complete事件。这个事件是HCI用于通知主机某个命令已经完成执行的标准机制。

  • 事件发送:控制器将HCI_Command_Complete事件发送给主机。这个事件包含了命令的状态(成功或失败)以及任何相关的返回参数(对于HCI_LE_Set_Event_Mask命令,通常没有额外的返回参数)。

5.4. 主机处理(主机端)

  • 事件接收:主机接收来自控制器的HCI_Command_Complete事件。

  • 事件解析:主机解析事件,检查命令的状态。如果状态为0x00,表示命令成功执行;如果状态为非零值,表示命令执行失败,并可以根据错误代码进一步诊断问题。

  • 后续处理:根据命令的执行结果,主机可以调整其后续的行为或处理逻辑。例如,如果命令成功执行,主机可以确信事件掩码已经被正确设置,并据此调整其事件处理机制。

5.5. 代码示例

以下是一个简化的代码示例,用于展示如何在BLE设备的主机端构建并发送HCI_LE_Set_Event_Mask命令,以及接收并处理来自控制器的HCI_Command_Complete事件。

请注意,此示例代码是高度简化的,并不包含完整的BLE栈实现或错误处理逻辑。在实际应用中,需要根据BLE协议栈和硬件平台进行相应的调整。此外,可能还需要处理其他类型的HCI事件,并根据应用需求来调整事件掩码。

#include <stdint.h>  
#include <stdbool.h>  
#include <stdio.h>  
  
// 假设这些宏和函数是由BLE协议栈或硬件抽象层提供的  
#define HCI_CMD_LE_SET_EVENT_MASK 0x0008  
#define HCI_EVT_COMMAND_COMPLETE 0x0E  
#define HCI_SUCCESS 0x00  
  
// 假设这是发送HCI命令的函数  
bool hci_send_command(uint16_t opcode, const uint8_t *params, uint8_t param_len);  
  
// 假设这是接收HCI事件的回调函数  
void hci_event_callback(const uint8_t *event, uint8_t event_len);  
  
// 事件掩码,这里我们假设只对连接建立和断开事件感兴趣  
const uint8_t event_mask[8] = {  
    0x01, // 第一字节,表示连接建立事件(bit 0)  
    0x00, // 第二字节,其他位不感兴趣  
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 剩余的6个字节  
    0x08  // 第八字节,表示连接断开事件(bit 3)  
};  
  
// 发送HCI_LE_Set_Event_Mask命令的函数  
bool set_event_mask() {  
    // 构建命令参数,包括事件掩码  
    uint8_t params[9] = {0x08}; // 参数长度(1字节,这里为8,因为事件掩码是8字节)  
    memcpy(params + 1, event_mask, 8); // 复制事件掩码到参数中  
  
    // 发送命令  
    return hci_send_command(HCI_CMD_LE_SET_EVENT_MASK, params, sizeof(params));  
}  
  
// 接收并处理HCI事件的回调函数  
void hci_event_callback(const uint8_t *event, uint8_t event_len) {  
    if (event_len < 4) {  
        // 事件长度不足,忽略  
        return;  
    }  
  
    uint8_t evt_code = event[1];  
    uint16_t opcode = (event[2] << 8) | event[3];  
  
    if (evt_code == HCI_EVT_COMMAND_COMPLETE && opcode == (HCI_CMD_LE_SET_EVENT_MASK << 10)) {  
        // 这是我们发送的HCI_LE_Set_Event_Mask命令的完成事件  
        uint8_t status = event[4];  
        if (status == HCI_SUCCESS) {  
            printf("HCI_LE_Set_Event_Mask command succeeded.\n");  
            // 在这里可以添加后续处理逻辑,比如开始广播、扫描等  
        } else {  
            printf("HCI_LE_Set_Event_Mask command failed with status 0x%02X.\n", status);  
            // 在这里可以添加错误处理逻辑  
        }  
    } else {  
        // 处理其他HCI事件  
        // ...  
    }  
}  
  
int main() {  
    // 初始化BLE栈和硬件(这部分代码省略)  
  
    // 设置事件掩码  
    if (!set_event_mask()) {  
        printf("Failed to set event mask.\n");  
        return -1;  
    }  
  
    // 主循环(这部分代码省略,通常在这里你会等待并处理HCI事件)  
  
    return 0;  
}  
  
// 假设的hci_send_command和hci_event_callback函数的实现需要根据你的BLE栈和硬件平台来编写  
// 这里只是提供了一个框架和思路

 在这个示例中,set_event_mask函数负责构建并发送HCI_LE_Set_Event_Mask命令。hci_event_callback函数是一个回调函数,用于接收并处理来自控制器的HCI事件。在主函数main中,我们调用了set_event_mask函数来设置事件掩码,并假设有一个主循环在后台等待并处理HCI事件(这部分代码在示例中被省略了)。

HCI_LE_Set_Event_Mask命令的执行流程包括命令的发送、控制器的处理、命令完成通知以及主机的处理。这个流程确保了主机能够灵活地配置其感兴趣的事件,从而优化设备的性能和响应速度。

 六、命令的应用场景

以下是HCI_LE_Set_Event_Mask命令的一些主要应用场景。

6.1. 优化设备性能

  • 事件过滤:通过设置事件掩码,设备可以只接收和处理与当前操作相关的事件,从而减少不必要的处理开销,提高设备性能。
  • 节能:减少不必要的事件处理有助于降低设备的功耗,这对于需要长时间运行的BLE设备尤为重要。

6.2. 调试和诊断

  • 事件监控:在开发和调试阶段,开发人员可以使用HCI_LE_Set_Event_Mask命令来监控特定的事件,以便诊断问题或验证设备行为。
  • 问题追踪:通过精确控制事件报告,开发人员可以更容易地追踪和定位问题,从而加快问题解决速度。

6.3. 定制化功能实现

  • 行为定制:根据应用需求,开发人员可以通过设置不同的事件掩码来定制设备的行为。例如,在某些应用中,设备可能只需要接收连接建立或断开的事件,而不需要接收其他类型的事件。
  • 应用逻辑优化:通过精确控制事件报告,开发人员可以优化应用逻辑,提高设备的响应速度和用户体验。

6.4. 系统管理

  • 事件管理:在系统管理层面,HCI_LE_Set_Event_Mask命令可以用于控制事件报告的粒度,以便更好地管理系统资源。
  • 设备状态监控:通过设置适当的事件掩码,系统可以实时监控设备的状态变化,从而及时采取相应的管理措施。

6.5. 兼容性和互操作性

  • 协议兼容性:确保设备遵循蓝牙低功耗协议的要求,通过正确设置事件掩码来与其他BLE设备实现互操作性。
  • 设备兼容性测试:在兼容性测试阶段,可以使用HCI_LE_Set_Event_Mask命令来验证设备对不同事件的响应是否符合预期。

6.6. 应用示例:BLE设备连接管理

6.6.1. 场景描述

假设我们有一个BLE设备,它需要在特定条件下与其他BLE设备进行连接。为了优化设备的性能和功耗,我们希望该设备在不需要时能够过滤掉不必要的事件,只接收与连接管理相关的事件。

6.6.2. 操作步骤

1. 初始化BLE设备

  • 执行HCI_Reset命令,将BLE设备重置为已知状态。
  • 读取设备支持的命令、特性和地址等信息,以确保设备配置正确。

2. 设置事件掩码

  • 使用HCI_LE_Set_Event_Mask命令设置事件掩码,只接收与连接管理相关的事件。例如,我们可以设置只接收连接建立(Connection Complete)和连接断开(Disconnection Complete)事件。

3. 配置设备

  • 根据应用需求,配置设备的广播参数、扫描参数等。
  • 如果需要,还可以设置设备的名称、类别等。

4. 开始广播/扫描:根据设备的角色(主设备或从设备),开始广播或扫描以寻找其他BLE设备。

5. 处理事件:当BLE设备接收到连接建立或断开事件时,根据事件信息执行相应的操作。例如,当连接建立时,可以开始数据传输;当连接断开时,可以释放相关资源并准备进行下一次连接。

6. 优化性能:通过监控设备的性能和功耗,调整事件掩码和配置参数,以进一步优化设备的性能。

6.6.3. 示例代码(伪代码)

// 初始化BLE设备  
HCI_Reset();  
HCI_Read_Local_Version_Information();  
HCI_Read_Local_Supported_Commands();  
// ... 其他初始化操作  
  
// 设置事件掩码,只接收连接管理相关的事件  
event_mask = HCI_EVT_MASK_CONNECTION_COMPLETE | HCI_EVT_MASK_DISCONNECTION_COMPLETE;  
HCI_LE_Set_Event_Mask(event_mask);  
  
// 配置设备(例如设置广播参数)  
HCI_LE_Set_Advertising_Parameters(...);  
  
// 开始广播  
HCI_LE_Set_Advertising_Data(...);  
HCI_LE_Start_Advertising(...);  
  
// 事件处理循环  
while (true) {  
    event = Receive_Event();  
    if (event == HCI_EVT_LE_META) {  
        sub_event = event.sub_event;  
        if (sub_event == HCI_SUB_EVT_LE_CONNECTION_COMPLETE) {  
            // 处理连接建立事件  
            handle_connection_complete(event.data);  
        } else if (sub_event == HCI_SUB_EVT_DISCONNECTION_COMPLETE) {  
            // 处理连接断开事件  
            handle_disconnection_complete(event.data);  
        }  
    }  
    // ... 处理其他事件  
}

在这个示例中,我们通过设置HCI_LE_Set_Event_Mask命令的事件掩码,只接收与连接管理相关的事件,从而减少了不必要的事件处理开销,优化了设备的性能和功耗。同时,我们也展示了如何使用伪代码来描述BLE设备的初始化、配置、广播和事件处理过程。需要注意的是,实际的应用代码可能会更加复杂,并且需要根据具体的硬件平台和软件框架进行调整。 

HCI_LE_Set_Event_Mask命令在蓝牙低功耗技术中具有广泛的应用场景,包括优化设备性能、调试和诊断、定制化功能实现、系统管理和兼容性与互操作性等方面。通过灵活设置事件掩码,开发人员可以实现对设备行为的精确控制,从而满足各种应用需求。

七、使用注意事项

在使用HCI_LE_Set_Event_Mask命令时,确实需要注意多个方面以确保命令的正确执行和蓝牙系统的有效运行。

7.1. 牙控制器状态确认

  • 初始化完成:在发送HCI_LE_Set_Event_Mask命令之前,必须确保蓝牙控制器已经完成了初始化,并且处于可配置状态。如果控制器未初始化或正在忙于其他任务,该命令可能会被忽略或导致错误。
  • 状态检查:可以通过发送状态查询命令或检查控制器返回的状态信息来确认其是否已准备好接收配置命令。

7.2. 事件选择与管理

  • 谨慎选择事件:主机应谨慎选择其感兴趣的事件,以避免不必要的中断和数据处理开销。过多的不必要事件可能会增加系统的负担,降低性能。
  • 优先级排序:在选择事件时,需要考虑事件的优先级和紧急性。确保关键事件能够被及时响应和处理,以维持系统的稳定性和响应性。

7.3. 控制器支持性检查

  • 查阅文档:在配置事件掩码之前,务必查阅蓝牙控制器的官方文档,了解它支持哪些事件。这有助于避免设置控制器不支持的事件位,从而防止这些事件无法被正确报告。
  • 兼容性验证:在实际应用中,进行兼容性验证可以确保事件掩码的设置与控制器兼容,避免潜在的问题。

7.4. LE Meta事件位设置

  • 设置LE Meta事件位:为了确保LE事件的生成和报告,必须在Event_Mask中正确设置LE Meta事件位。这是LE相关事件报告的基础。
  • 配置LE_Event_Mask:除了设置LE Meta事件位外,还需要根据具体需求配置相关的子事件。例如,对于连接建立、连接更新或广播报告等子事件,需要确保它们在LE_Event_Mask中被正确设置。

7.5. 其他注意事项

  • 命令格式:确保HCI_LE_Set_Event_Mask命令的格式正确,包括参数的长度和顺序。
  • 错误处理:准备好处理可能发生的错误,例如命令被拒绝或参数无效等。
  • 更新频率:事件掩码的设置可能需要在系统运行期间进行更新,以适应不同的操作模式或应用需求。

正确配置HCI_LE_Set_Event_Mask命令对于蓝牙系统的有效运行至关重要。通过仔细考虑上述注意事项,可以确保系统的稳定性、性能和响应性。

八、总结

HCI_LE_Set_Event_Mask命令在BLE(蓝牙低功耗)设备中扮演着关键角色,它用于配置HCI(主机控制器接口)事件掩码。这一掩码是一个64位的二进制值,每一位都对应着一个特定的BLE事件。通过巧妙地设置这个掩码,BLE设备的主机能够精确地控制哪些事件会被蓝牙控制器捕获并报告给它。

当HCI_LE_Set_Event_Mask命令被成功执行后,蓝牙控制器会生成一个HCI_Command_Complete事件来通知主机。值得注意的是,这个HCI_Command_Complete事件本身并不包含关于事件掩码具体设置的详细信息。它的主要作用是作为一个信号,表明HCI_LE_Set_Event_Mask命令已经被蓝牙控制器成功接收并执行,同时意味着新的事件掩码设置已经生效。

主机在接收到这个HCI_Command_Complete事件后,可以确信事件掩码已经被正确设置。基于这一确认,主机可以进一步调整其后续的行为或处理逻辑。例如,它可以根据新的事件掩码来过滤和处理从蓝牙控制器接收到的事件通知,确保只关注那些真正感兴趣的事件,从而优化资源利用和提高系统效率。

总的来说,HCI_LE_Set_Event_Mask命令是BLE设备中用于事件管理和优化的重要工具。通过合理地配置事件掩码,主机能够实现对BLE事件的精确控制,进而提升整个BLE系统的性能和用户体验。

标签:LE,Mask,0x0001,Set,事件,掩码,HCI,Event
From: https://blog.csdn.net/weixin_37800531/article/details/143084896

相关文章

  • 【题解】Solution Set - NOIP2024集训Day57 字符串
    【题解】SolutionSet-NOIP2024集训Day57字符串https://www.becoder.com.cn/contest/5653「CF213E」TwoPermutations「CF961F」k-substrings「CF580E」KefaandWatch「CF504E」MishaandLCPonTree......
  • 三,TreeMap和HashMap,TreeSet和HashMap的区别以及方法使用上的不同
    TreeMap和HashMap的区别TreeMap:基于红黑树实现。提供了范围查询和排序功能。所有操作的时间复杂度为O(logn)。不允许键为null。键必须实现Comparable接口或提供一个Comparator。HashMap:基于哈希表实现。提供快速的查找、插入和删除操作。平均时间复杂度为O(1),......
  • MLE 5217 : Take-Home Dataset Classification
    Dept.ofMaterialsScience&EngineeringNUSMLE5217:Take-HomeAssignmentsLecturerSasaniJayawardhanaObjectivesBasedonthechemicalcompositionofmaterialsbuildaclassificationmodeltodistinguishmetalsandnon-metalsModel1),andthenb......
  • STL-set学习笔记
    set本质是平衡数,插入的数会自动排序并去重插入s.insert(1)删除<1>erase(id)删除指针id指向的数<2>erase(lid,rid)删除lid到rid所指向区间的数,且该区间为前闭后开区间<3>erase(val)删除值val遍历set的遍历涉及指针,其数据类型为set<int>::iterator,因为是指针......
  • CS209A Analysis of the Olympic Historical Dataset
    [CS209A-24Fall]Assignment1(100points)Thissummer,we'veenjoyedtheOlympicGamesParis2024.ManyofusarestillrelivingtheexcitingmomentsofthesummerOlympics,andmanyofusmaybeinterestedintheeventofpastOlympicsandthepastpe......
  • ManualResetEvent&ManualResetEventSlim
    ManualResetEventManualResetEvent有三个重要的方法,分别为:waiteone(),set(),reset(),其含义如下:1.WaitOne()即等待信号发出,即可往下运行。2.set()发出信号,让线程方法继续往下运行,并允许其他线程(如有)一并往下运行。3.reset()重新初始化(即:去掉票据)变为ManualResetEvent(false)形......
  • Inno Setup 下载/设置中文
    官网下载:Download进入InnoSetup的安装目录,复制Default.isl文件备份,更改其内容:;***InnoSetupversion6.1.0+ChineseSimplifiedmessages***;;Todownloaduser-contributedtranslationsofthisfile,goto:;https://jrsoftware.org/files/istrans/;;N......
  • 《Pytorch深度学习实践》P8 Dataset and DataLoader 笔记+代码+作业:DataLoader的使用
     b站的up主刘二大人的《PyTorch深度学习实践》P8笔记+代码,视频链接。所需糖尿病数据可以在视频评论区下方的网盘资源里下载(转载评论区):链接:https://pan.baidu.com/s/1cUI518pgLWY1oCn2DkjuEQ?pwd=kif1 提取码:kif1或者是点击链接下载:【免费】b站的up主刘二大人的《PyTorc......
  • 移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——13.map&&set(无习题)
    C++中的set和map容器详细总结1.概述C++标准模板库(STL)提供了多种关联容器,用于管理键值对和集合的数据。其中,set和map是最常用的两种关联容器。set用于存储唯一的元素集合,而map则用于存储键值对,其中每个键都是唯一的。它们都使用红黑树(自平衡二叉搜索树)作为底......
  • SuperSet安装
    安装Python环境mkdir/opt/softcurl-Ohttps://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.shbashMiniconda3-latest-Linux-x86_64.sh回车之后,一直按空格,提示Pleaseanswer‘yes’or‘no’:’输入yes。指定安装路径/opt/soft/conda,回车默认/opt/......