【0x0019】HCI_Remote_Name_Request详解

目录

一、概述

二、命令格式参数说明

2.1. BD_ADDR

2.2. Page_Scan_Repetition_Mode

2.3. Reserved

2.4. Clock_Offset 

三、响应事件及参数说明

3.1. HCI_Command_Status事件

3.2. (可选)HCI_Remote_Host_Supported_Features_Notification事件

3.3. HCI_Remote_Name_Request_Complete事件

3.4. 注意事项

四、命令的执行流程

4.1. 命令发起与准备阶段

4.2. 命令接收与状态反馈阶段

4.3. 连接建立与特性获取阶段(如必要)

4.4. 名称请求与响应阶段

4.5. 清理与结束阶段

4.6. 示例代码

 五、使用场景

5.1. 设备发现与识别

5.2. 蓝牙配对与连接

5.3. 设备管理与监控

5.4. 用户体验提升

5.5. 安全与访问控制

六、注意事项

6.1. 设备连接状态相关

6.2. 参数准确性和有效性

6.3. 隐私和安全问题

6.4. 内存和资源管理

6.5. 其他注意事项


HCI_Remote_Name_Request 命令是蓝牙主机控制器接口(HCI)中的一个重要命令,用于在蓝牙设备之间获取远程设备的名称,而无需先建立完整的ACL连接,其目的在于能够快速、高效地获取设备名称信息,以便进行设备识别、管理等操作。

一、概述

HCI_Remote_Name_Request 命令主要用于获取另一个基本速率 / 增强数据速率(BR/EDR)控制器的用户友好名称。这个用户友好名称能够帮助用户区分不同的 BR/EDR 控制器,在蓝牙设备的识别与管理等方面起着关键作用。

在蓝牙设备的交互体系中,该命令扮演着重要的角色。它处于设备发现和设备识别环节之间,是在初步发现设备后,进一步获取详细设备名称信息的关键步骤。例如,当蓝牙设备进行扫描并发现周围存在多个蓝牙设备时,通过 HCI_Remote_Name_Request 命令,可以更精准地了解每个设备的名称,而不仅仅是依靠设备地址等较为抽象的信息。

二、命令格式参数说明

HCI_Remote_Name_Request命令的格式通常包括命令头部和参数部分。命令头部包含命令类型、操作码(Opcode)等信息,而参数部分则包含执行该命令所需的具体参数。

  • OGF(Opcode Group Field):操作码组字段,用于指示命令所属的组。对于HCI_Remote_Name_Request命令,OGF的值通常为0x01,表示该命令属于链路控制组(Link Control Group)。
  • OCF(Opcode Command Field):操作码命令字段,用于指示命令的具体类型。对于HCI_Remote_Name_Request命令,OCF的值通常为0x0019。
  • BD_ADDR(Bluetooth Device Address):蓝牙设备地址,是一个6字节(48位)的字段,用于唯一标识一个蓝牙设备。在HCI_Remote_Name_Request命令中,BD_ADDR用于指定要获取名称的远端设备的地址。
  • Page_Scan_Repetition_Mode:页面扫描重复模式,是一个1字节的字段。它用于指定在搜索远端设备时页面扫描的重复次数和间隔。该参数的值通常为0x00(表示R0)、0x01(表示R1)或0x02(表示R2)。
  • Reserved:保留字段,通常设置为0x00。该字段在HCI_Remote_Name_Request命令中不起实际作用,但为了保持命令格式的完整性而保留。
  • Clock_Offset:时钟偏移量,是一个2字节的字段。它表示本地时钟与远端设备时钟之间的偏移量,用于后续的时钟同步和跳频操作。Clock_Offset的最高位(bit 15)表示时钟偏移是否有效(Clock_Offset_Valid_Flag),而其余位(bit 0-14)则对应时钟的具体偏移值。

以下是一个HCI_Remote_Name_Request命令的示例:

0x01: 表示HCI Command Packet(命令包)
0x0419: 表示HCI_Remote_Name_Request command(操作码),其中OGF=0x01(0000 01),OCF=0x0019(00 0001 1001)
0x0a: 表示Parameter_Total_Length=10(参数总长度为10个字节)
0xeb 0x01 0xce 0x55 0x36 0x34: 表示远端设备地址BD_ADDR(0x34:0x36:0x55:0xce:0x01:0xeb)
0x01: 表示Page_Scan_Repetition_Mode=0x01(R1)
0x00: Reserved(保留字段,设置为0x00)
0xf094: 表示Clock_Offset(时钟偏移量),其中bit 15为1表示时钟偏移有效,bit 0-14为0x7094(28820)

在这个示例中,命令包以0x01开头,表示这是一个HCI命令包。紧接着是操作码0x0419,指示这是一个HCI_Remote_Name_Request命令。参数总长度为10个字节,包括远端设备地址、页面扫描重复模式、保留字段和时钟偏移量等参数。 

2.1. BD_ADDR

在蓝牙通信协议中,BD_ADDR(Bluetooth Device Address)是一个至关重要的参数,它用于唯一标识每一个蓝牙设备。这个地址由6个八位字节(octets)组成,总共48位,通常展现为16进制数字串,格式类似于0xXXXXXXXXXXXX(这里的X代表十六进制数字0-9以及字母A-F)。

BD_ADDR 用于明确指定要获取其名称的那个设备。在 HCI_Remote_Name_Request 命令中,当主机想要知晓某个特定蓝牙设备的用户友好名称时,就需要通过这个参数准确地告知蓝牙控制器具体是哪个设备。打个比方,如果把蓝牙设备的世界看作是一个社区,那么 BD_ADDR 就相当于每家每户的门牌号,通过它就能精准定位到目标 “住户”(蓝牙设备),进而发起获取其名称的请求,确保整个命令执行的目标明确性,避免出现获取名称时的混淆或者错误指向其他不需要的设备的情况。

2.2. Page_Scan_Repetition_Mode

Page_Scan_Repetition_Mode是蓝牙通信协议中的一个参数,它指定了远端设备在进行page扫描时的重复模式。这个参数的大小为1个八位字节(octet),其取值范围及对应的描述如下: 

  • 0x00 - R0含义:表示远程设备采用 R0 寻呼扫描重复模式。这种模式可能具有特定的寻呼扫描行为,例如寻呼扫描的频率、持续时间等参数有其固定的设置。在蓝牙通信中,R0 模式下的设备扫描行为可能是按照蓝牙协议中对 R0 模式的规定来执行的,这可能涉及到设备在一定时间间隔内开启扫描窗口,用于接收其他设备的寻呼信号,并且该时间间隔、扫描窗口的长度等参数都是由 R0 模式所定义的。
  • 0x01 - R1含义:值为 0x01 对应 R1 寻呼扫描重复模式。R1 模式与 R0 模式不同,它代表了另一种寻呼扫描行为。在这种模式下,设备的扫描周期、扫描时长或者其他与扫描相关的参数会按照 R1 模式的定义进行调整。例如,R1 模式可能比 R0 模式具有更短的扫描间隔,使得设备能够更频繁地扫描是否有其他设备在寻呼它,这在一些对连接及时性要求较高的应用场景中可能会用到。
  • 0x02 - R2含义:0x02 对应的 R2 寻呼扫描重复模式又是一种不同的扫描行为方式。R2 模式下的设备在扫描过程中可能会有自己独特的参数设置,比如扫描窗口的起始时间、持续时间或者扫描的频率等与 R0 和 R1 模式有所差异。这些差异可能会影响本地设备在向其发送寻呼信号以获取名称时的策略,例如需要根据 R2 模式的特点选择合适的寻呼时间,以提高获取名称的成功率。

2.3. Reserved

“Reserved”字段是一个在蓝牙通信协议中常见的保留字段,其值必须被设置为0x00。在使用蓝牙通信协议时,需要特别注意这个字段,并确保其值被正确设置,以确保协议的兼容性和稳定性。

2.4. Clock_Offset 

“Clock_Offset”字段在蓝牙通信中起着至关重要的作用,它用于表示从设备的本地时钟与主设备或参考时钟之间的偏移量,并包含一个有效标志来指示该偏移量是否有效。在使用时,需要特别注意其值的计算和更新,以确保蓝牙通信的稳定性和可靠性。

Clock_Offset 参数的大小为 2 个八位字节(octets),即总共 16 位。这 16 位承载着与本地设备和远程设备时钟差异相关的关键信息,用于在蓝牙通信,特别是执行 HCI_Remote_Name_Request 命令过程中协助进行时间相关的协调操作。

  • 0 到 14 位(对应 Bits 2 到 16 of CLKNPeripheral - CLK)

    • 含义:这 14 位用于表示本地设备时钟(CLK)与远程设备时钟(CLKNPeripheral)之间差值的部分信息。具体来说,它反映的是这个差值从第 2 位到第 16 位的内容。在蓝牙通信中,不同设备的时钟可能存在一定的差异,而知晓这个差值对于准确地安排诸如寻呼、数据传输等操作的时间点是非常重要的。通过获取和分析这部分时钟差值信息,本地设备可以更好地与远程设备在时间上进行同步,确保各种通信行为能够在合适的时间进行,进而提高获取远程设备名称等操作的成功率和效率。
    • 举例:假设经过计算或者其他机制得到本地设备和远程设备时钟差值的二进制表示为 0000000000000101(这里仅为示例方便理解,实际情况更复杂),那么这 14 位(从第 2 位开始取)就会被提取出来放入 Clock_Offset 参数的 0 到 14 位中,用于后续的时间协调判断等操作。
  • 15 位(Clock_Offset_Valid_Flag)

    • 含义:这一位作为一个标志位,起到了指示时钟偏移是否有效的关键作用。当该位的值为 0 时,表示当前的 Clock_Offset(也就是前面 0 到 14 位所表示的时钟差值信息)是无效的;而当这一位的值为 1 时,则意味着 Clock_Offset 是有效的,本地设备可以依据所获取到的时钟差值信息来进行后续与时间相关的操作,比如根据有效的时钟差值去确定合适的寻呼时间、数据传输的时机等,以更好地与远程设备进行通信交互,完成像获取远程设备名称这样的任务。
    • 应用场景示例:在实际的蓝牙通信中,由于各种原因(比如信号干扰、设备临时故障等),可能会导致计算或者获取到的时钟差值不准确。此时,通过 Clock_Offset_Valid_Flag 这个标志位,设备可以快速判断出当前的时钟差值能否被信任,若为无效(标志位为 0),可能就需要重新尝试获取或者采用其他备用的时间同步机制,来确保后续操作能够正常进行,保障整个通信流程的顺畅以及获取远程设备名称命令执行的可靠性。

三、响应事件及参数说明

3.1. HCI_Command_Status事件

当BR/EDR控制器接收到HCI_Remote_Name_Request命令时,它首先会向主机发送一个HCI_Command_Status事件。这个事件用于通知主机,BR/EDR控制器已经成功接收并处理了该命令。

3.2. (可选)HCI_Remote_Host_Supported_Features_Notification事件

如果为了获取远程主机的支持特性,建立了一个临时的链路层(Link Layer)连接,那么在链路管理器(Link Manager)完成LMP(Link Manager Protocol)序列以获取远程主机支持的特性后,本地设备上的BR/EDR控制器会向主机发送一个HCI_Remote_Host_Supported_Features_Notification事件。

  • 注意:这个事件是可选的,取决于远程主机是否支持特性页。

该事件向主机传达了关于远程主机所支持特性的相关信息,这对于主机全面了解远程设备的功能和能力很有帮助。例如,主机可以根据这些特性信息来判断后续与远程设备进行其他交互(如数据传输、连接维持等)时能够采用的方式和模式,同时也为获取远程设备名称这一主要任务提供了更多背景信息,辅助后续操作更顺利地进行。

3.3. HCI_Remote_Name_Request_Complete事件

不论是否发送了特性通知事件,当链路管理器完成LMP消息以获取远程名称后,本地BR/EDR控制器都会向主机发送一个HCI_Remote_Name_Request_Complete事件。这个事件标志着远程名称请求过程的完成,并包含远程设备的名称(如果成功获取到的话)。

此事件意味着获取远程设备名称的操作已经完成,主机接收到这个事件后,就可以知道此时应该去查看是否已经成功获取到了目标远程设备的名称,或者根据该事件进一步判断整个获取名称的过程是否出现异常等情况,是整个 HCI_Remote_Name_Request 命令执行流程中非常关键的最终反馈事件。

3.4. 注意事项

  • 事件顺序:如果远程主机支持特性页,则HCI_Remote_Host_Supported_Features_Notification事件会在HCI_Remote_Name_Request_Complete事件之前发送。如果没有远程主机支持的特性页,则只发送HCI_Remote_Name_Request_Complete事件。
  • 事件屏蔽:某些情况下,这些事件可能会被屏蔽(masked away)。例如,如果主机已经配置了相应的过滤器或策略来忽略某些事件,则这些事件可能不会被发送到上层应用程序。
  • 错误处理:如果在获取远程名称或特性时发生错误(如超时、连接失败等),则可能会生成相应的错误事件或状态,这些需要由主机或上层应用程序进行处理。

当BR/EDR控制器接收到HCI_Remote_Name_Request命令时,它会按照上述流程生成并发送一系列事件给主机。这些事件提供了远程设备名称和(可选的)支持特性的信息,是蓝牙通信中设备发现和连接建立过程中的重要环节。

四、命令的执行流程

4.1. 命令发起与准备阶段

  • 主机准备命令:主机构建HCI_Remote_Name_Request命令,包括必要的参数:
    • Clock_Offset(时钟偏移,可能根据设备状态计算得出)
    • Reserved(预留参数,通常设为0x00)
    • Page_Scan_Repetition_Mode(页面扫描重复模式)
    • BD_ADDR(目标设备蓝牙地址)
  • 发送命令:主机通过HCI(蓝牙主机控制器接口)将命令发送给蓝牙控制器。

4.2. 命令接收与状态反馈阶段

  • 控制器接收命令:蓝牙控制器接收并解析HCI_Remote_Name_Request命令。
  • 发送命令状态事件:控制器向主机发送HCI_Command_Status事件,确认命令已成功接收。

4.3. 连接建立与特性获取阶段(如必要)

  • 检查并建立连接:控制器检查与目标设备是否存在ACL连接。若无连接,则尝试建立临时ACL连接。
  • 获取远程设备LMP特性:若连接建立,控制器可能读取远程设备的LMP特性(如支持的功能等)。控制器向主机发送HCI_Remote_Host_Supported_Features_Notification事件(如果特性获取成功且事件未被屏蔽)。

4.4. 名称请求与响应阶段

  • 发送名称请求:控制器通过已建立的连接向远程设备发送名称请求。
  • 接收名称响应:远程设备响应并返回其名称。
  • 发送名称请求完成事件:控制器向主机发送HCI_Remote_Name_Request_Complete事件,包含远程设备的名称。

4.5. 清理与结束阶段

  • 断开临时连接:若之前建立了临时连接,则在获取名称后断开该连接。
  • 流程结束:主机接收并处理名称,执行流程结束。

4.6. 示例代码

以下代码示例将是一个高度简化的版本,旨在展示流程的主要步骤,而不涉及实际的HCI命令发送和接收细节。在实际应用中,会使用蓝牙协议栈提供的API来发送HCI命令、处理事件和响应。以下代码仅用于说明目的:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
// 假设的蓝牙协议栈API函数声明(在实际应用中,这些函数将由蓝牙协议栈库提供)
void hci_send_remote_name_request(const unsigned char *bd_addr, unsigned char page_scan_rep_mode, unsigned short clock_offset);
void hci_event_callback(unsigned char event_code, const unsigned char *event_data, int event_length);
 
// 假设的蓝牙协议栈事件处理函数
void handle_command_status_event(const unsigned char *event_data) {
    // 处理HCI_Command_Status事件
    printf("Command Status Event received\n");
}
 
void handle_remote_name_request_complete_event(const unsigned char *event_data) {
    // 处理HCI_Remote_Name_Request_Complete事件
    // 假设event_data包含远程设备名称
    char remote_name[249]; // 蓝牙设备名称最大长度为248字节,加1用于空终止符
    memcpy(remote_name, event_data + 1, event_data[0]);
    remote_name[event_data[0]] = '\0'; // 添加空终止符
    printf("Remote Name: %s\n", remote_name);
}
 
// 蓝牙事件回调函数实现
void hci_event_callback(unsigned char event_code, const unsigned char *event_data, int event_length) {
    switch (event_code) {
        case 0x0F: // HCI_Command_Status_Event
            handle_command_status_event(event_data);
            break;
        case 0x07: // HCI_Remote_Name_Request_Complete_Event
            handle_remote_name_request_complete_event(event_data);
            break;
        // 处理其他事件...
        default:
            printf("Unknown Event Code: %02X\n", event_code);
            break;
    }
}
 
// 发送HCI_Remote_Name_Request命令的函数
void send_remote_name_request(const unsigned char *bd_addr) {
    unsigned char page_scan_rep_mode = 0x02; // 示例值,根据实际情况设置
    unsigned short clock_offset = 0x0000;    // 示例值,根据实际情况计算或获取
 
    // 发送HCI_Remote_Name_Request命令
    hci_send_remote_name_request(bd_addr, page_scan_rep_mode, clock_offset);
 
    // 在实际应用中,这里可能需要等待事件回调或检查命令状态
    // 由于这是示例代码,我们不会实现等待逻辑
}
 
int main() {
    // 假设的蓝牙设备地址(BD_ADDR),通常为6个字节
    unsigned char bd_addr[] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55};
 
    // 发送远程名称请求
    send_remote_name_request(bd_addr);
 
    // 在实际应用中,这里将是一个事件循环,等待并处理来自蓝牙控制器的回调
    // 由于这是示例代码,我们不会实现事件循环
 
    // 注意:在实际应用中,不要在此处立即退出程序,因为那样将无法接收和处理来自蓝牙控制器的回调
    // 这里只是为了演示目的而提前结束
 
    return 0;
}
  • 上述代码中的hci_send_remote_name_requesthci_event_callback函数是假设的,在实际应用中应由蓝牙协议栈库提供。

  • 在实际应用中,需要实现一个事件循环来等待和处理来自蓝牙控制器的回调。通常涉及到一个或多个线程或异步I/O机制。

  • 权限与安全:在实际应用中,获取远程设备名称可能需要适当的权限。确保程序具有必要的权限,并处理任何安全相关的错误或异常。

  • 设备兼容性:不同版本的蓝牙设备和不同厂商的设备在执行该命令时可能存在差异。确保程序能够处理这些差异,并适当地处理任何兼容性相关的问题。

  • 错误处理:在实际应用中,需要实现全面的错误处理逻辑来处理可能发生的各种错误情况(如连接失败、设备不支持等)。

 五、使用场景

HCI_Remote_Name_Request命令在蓝牙通信中扮演着重要的角色,它主要用于获取远程蓝牙设备的名称。以下是该命令的主要使用场景。

5.1. 设备发现与识别

  • 场景描述:在蓝牙设备扫描过程中,用户或系统需要识别并区分周围的蓝牙设备。设备地址虽然唯一,但不够直观,难以记忆和识别。
  • 应用实例
    • 智能家居:用户扫描家中的蓝牙设备,通过设备名称(如“客厅灯”、“卧室空调”)快速识别并连接控制。
    • 蓝牙音箱:在公共场所,用户扫描到多个蓝牙音箱,通过名称选择想要连接的音箱进行音乐播放。
  • 核心作用:提供直观的设备名称,便于用户识别和操作。

5.2. 蓝牙配对与连接

  • 场景描述:在蓝牙设备配对和连接过程中,用户需要确认是否要与目标设备进行连接。设备名称作为重要信息,可以帮助用户做出判断。
  • 应用实例
    • 车载蓝牙:用户驾驶时,通过设备名称快速识别并连接车载蓝牙,实现通话和音乐播放。
    • 蓝牙耳机:用户同时拥有多个蓝牙耳机,通过名称选择并连接想要使用的耳机。
  • 核心作用:辅助用户确认连接目标,避免连接错误的设备。

5.3. 设备管理与监控

  • 场景描述:在蓝牙设备管理系统或监控系统中,需要定期获取设备的名称以进行状态监控和管理。
  • 应用实例
    • 智能家居系统:通过获取设备名称,系统更新设备列表,方便用户查看和管理。
    • 企业级设备管理系统:管理员通过设备名称监控设备的连接状态、电量等信息,进行维护和管理。
  • 核心作用:提供设备名称信息,便于系统管理和监控。

5.4. 用户体验提升

  • 场景描述:在蓝牙应用中,用户更希望看到设备的名称而不是蓝牙地址,以提高使用的便捷性和友好性。
  • 应用实例
    • 蓝牙音箱应用:在应用界面中显示设备名称,用户可以通过名称选择和控制音箱。
    • 蓝牙耳机应用:在连接列表中显示耳机名称,用户可以通过名称快速连接耳机。
  • 核心作用:提升用户界面的友好性和便捷性,增强用户体验。

5.5. 安全与访问控制

  • 场景描述:在安全要求较高的蓝牙应用场景中,设备名称可以作为身份验证和访问控制的一部分。
  • 应用实例
    • 蓝牙门禁系统:通过设备名称验证设备的合法性,只允许授权设备进入。
    • 医疗设备网络:通过设备名称控制访问权限,确保敏感数据的安全。
  • 核心作用:增强蓝牙通信的安全性,防止未授权设备的接入。

HCI_Remote_Name_Request命令在蓝牙通信中具有广泛的应用场景,它可以帮助设备实现发现、识别、配对、连接、管理和监控等功能,同时提升用户体验和系统的安全性。在开发蓝牙应用时,需要充分考虑这些使用场景,并根据实际需求进行合理的实现和优化。

六、注意事项

使用HCI_Remote_Name_Request命令时需要关注命令参数、命令执行过程以及注意事项等多个方面。通过仔细检查和准备,可以确保命令的正确执行并获取所需的远端设备名称信息。

6.1. 设备连接状态相关

  • 连接建立的可能性:考虑到临时连接建立对系统资源和设备功耗的影响,开发者需评估在发送命令前是否已有连接,并设计连接失败的处理机制。考虑到连接建立可能受环境干扰,需设计重试策略或提示用户连接失败。
  • 已有连接的情况:在已有ACL连接时,远程名称请求将作为可选服务执行,不会进行寻呼或断开连接。开发者需清楚这种情况下的执行差异。

6.2. 参数准确性和有效性

  • BD_ADDR参数
    • 确保提供的BD_ADDR准确无误,避免获取错误设备的名称或无法获取名称。
    • 从其他来源获取BD_ADDR时,进行数据验证,防止地址错误或无效。
  • Page_Scan_Repetition_Mode参数
    • 确保提供的寻呼扫描重复模式信息准确,避免影响寻呼操作的效率。
    • 在设备信息可能变化的动态环境中,适时更新该参数。
  • Clock_Offset参数
    • 确保时钟偏移信息的准确性,避免寻呼操作错过最佳时间窗口。
    • 正确设置时钟偏移有效标志,避免干扰寻呼过程和命令执行。

6.3. 隐私和安全问题

  • 设备隐私设置
    • 考虑设备可能设置的隐私模式,合理处理隐私限制导致的获取失败情况。
    • 遵循隐私政策,确保不会泄露用户敏感信息或侵犯用户隐私。
  • 安全风险防范
    • 注意设备名称可能被伪造,结合其他安全机制提高系统安全性。
    • 避免在不安全的网络环境中发送敏感信息。

6.4. 内存和资源管理

  • 内存空间预留
    • 确保本地设备有足够的内存空间存储返回的设备名称。
    • 预估设备名称的最大长度,并合理分配内存。
  • 资源占用时间
    • 考虑命令执行过程对系统资源(如处理器时间、通信带宽)的占用。
    • 合理安排命令执行时间,采用异步操作减少对其他任务的干扰。

6.5. 其他注意事项

  • 命令有效性:确保发送的HCI_Remote_Name_Request命令操作码正确,远端设备支持该命令。
  • 参数正确性:确保命令参数正确无误,避免收到无效HCI命令参数错误代码。
  • 错误处理:妥善处理可能收到的错误事件和错误代码,如页面超时错误代码。
  • 资源限制:评估当前资源使用情况,避免资源不足导致命令执行失败或设备性能下降。

综上所述,HCI_Remote_Name_Request 命令是蓝牙协议栈中用于请求远程设备名称的关键命令。了解其格式、参数和响应机制对于开发高效的蓝牙应用至关重要。正确使用该命令可以帮助提升应用的用户体验和设备管理能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/928266.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络安全技术详解:虚拟专用网络(VPN) 安全信息与事件管理(SIEM)

虚拟专用网络&#xff08;VPN&#xff09;详细介绍 虚拟专用网络&#xff08;VPN&#xff09;通过在公共网络上创建加密连接来保护数据传输的安全性和隐私性。 工作原理 VPN的工作原理涉及建立安全隧道和数据加密&#xff1a; 隧道协议&#xff1a;使用协议如PPTP、L2TP/IP…

HTML5技术贴:现代网页开发的革命

引言 HTML5作为最新的HTML标准&#xff0c;为网页开发带来了革命性的变化。它不仅提高了网页的性能和可访问性&#xff0c;还提供了更多能有效增强网络应用的API。本文将深入探讨HTML5的八大新特性&#xff0c;帮助读者更好地理解和应用这些新特性。 HTML5的八大新特性 1. 语…

紫光展锐联合上汽海外发布量产车型,赋能汽车智能化

当前&#xff0c;智能汽车产业迎来重大变局&#xff0c;随着人工智能、5G、大数据等新一代信息技术的迅猛发展&#xff0c;智能网联汽车正呈现强劲发展势头。 11月26日&#xff0c;在2024紫光展锐全球合作伙伴大会汽车电子生态论坛上&#xff0c;紫光展锐与上汽海外出行联合发…

Kafka如何保证消息可靠?

大家好&#xff0c;我是锋哥。今天分享关于【Kafka如何保证消息可靠&#xff1f;】面试题。希望对大家有帮助&#xff1b; Kafka如何保证消息可靠&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Kafka通过多种机制来确保消息的可靠性&#xff0c;主要包…

comfyui更新后,新版Crystools菜单栏的CPU、GPU信息不显示的解决办法

设置->菜单->使用新版菜单先禁用&#xff0c;然后保存旧版菜单位置&#xff0c;然后再把新版菜单打开&#xff0c;改为上&#xff0c;再取消保存旧版菜单位置&#xff0c;就出来了 1. **插件名称与功能**&#xff1a; - 插件名称&#xff1a;ComfyUI-Crystools - 功能描述…

椭圆参数方程

如上图所示&#xff0c;分别作椭圆的外摆线和内摆线容易得到两个圆方程分别为 x y a&#xff0c;x y b&#xff0c;下面求出 x 和 y 的表达式。设∠AOD θ&#xff0c;而∠POD 称为旋转角&#xff0c;而这里的 θ 称为离心角&#xff0c;而 OA a&#xff0c;OB b&#x…

tcpdump抓包wireshark分析

背景 分析特定协议的数据包&#xff0c;如 HTTP、DNS、TCP、UDP 等&#xff0c;诊断网络问题&#xff0c;例如连接故障、延迟和数据包丢失。 大概过程 1.安装tcpdump yum update yum install tcpdump2.抓包&#xff0c;从当前时间起&#xff0c;一小时后停止&#xff0c…

【MyBatis源码】详解datasource包,DataSourceFactory,数据库连接池

&#x1f3ae; 作者主页&#xff1a;点击 &#x1f381; 完整专栏和代码&#xff1a;点击 &#x1f3e1; 博客主页&#xff1a;点击 文章目录 java.sql包和javax.sql包java.sql 包核心接口javax.sql 包核心接口 数据源工厂接口DataSourceFactory自定义HikariCPDataSourceFactor…

基于组件软件可信度量

基于组件软件可信度量 课程&#xff1a;软件质量分析 作业 可编写下面的java程序&#xff1a; package org.example;import java.util.Arrays;public class ComponentBasedMeasurementModel {public static void main(String[] args) {double[][] keyComponentJudgmentMatrix …

Windows.old 文件夹是什么?它可以手动删除吗?

当我们在 Windows 系统中进行重大更新&#xff0c;如从 Windows 7 升级到 Windows 10&#xff0c;或者在 Windows 10 中执行某些系统重置操作后&#xff0c;会在系统盘&#xff08;通常是 C 盘&#xff09;中发现一个名为 “Windows.old” 的文件夹。那么&#xff0c;这个文件夹…

Android13 允许桌面自动旋转

一&#xff09;需求-场景 Android13 实现允许桌面自动旋转 Android13 版本开始后&#xff0c;支持屏幕自动旋转&#xff0c;优化体验和兼容性&#xff0c;适配不同屏幕 主界面可自动旋转 二&#xff09;参考资料 android framework13-launcher3【06手机旋转问题】 Launcher默…

Goland2024.3 发布,有点东西

好多人夸我嘴甜&#xff0c;你要不要尝尝~ 上周&#xff0c;Goland2024 年最后的一个大版本正式发布了。 虽然这次的更新并不是很丰富&#xff0c;但是仍然有几个值得我们关注的几个亮点。 第一个&#xff0c;支持循环导入的检查 循环导入的出现往往是不经意的&#xff0c;但是…

数据结构之算法复杂度(超详解)

文章目录 1. 算法复杂度1.1 数据结构1.2 算法1.3 二者的重要性 2. 算法效率开胃小菜&#xff1a;复杂度概念 3. 时间复杂度3.1 大O表示法3.2 时间复杂度示例练习例1例2例3例4例5例6例7 4. 空间复杂度4.1 空间复杂度示例练习例1例2 5. 开胃小菜扩展5.1 思路2&#xff1a;采用空间…

【C++笔记】map和set的使用

【C笔记】map和set的深度剖析 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C笔记 文章目录 【C笔记】map和set的深度剖析前言一.set1.1 序列式容器和关联式容器1.2 set系列的使用1.3 set类的介绍1.4 set的构造和迭代器1.5 set的增删查1.6…

最新AI自动无人智享直播系统 —— 视频自动播软件热门之选

在当今数字化浪潮汹涌澎湃的时代&#xff0c;直播行业正经历着前所未有的变革与创新。而最新的 AI 自动无人智享直播系统&#xff0c;无疑成为了视频自动播软件中的热门之选&#xff0c;正引领着直播领域迈向新的高度。 这款 AI 自动无人智享直播系统&#xff0c;其核心优势在于…

气膜球幕:科技与艺术的完美融合,沉浸式体验引领未来—轻空间

在现代化展览和活动中&#xff0c;如何突破传统展示方式&#xff0c;吸引观众的目光&#xff0c;带来前所未有的沉浸式体验&#xff1f;气膜球幕作为一种创新的科技展示平台&#xff0c;凭借其独特的球形结构和多功能应用&#xff0c;正在成为各大展览、活动和娱乐项目的首选。…

计算机视觉硬件知识点整理六:工业相机选型

文章目录 前言一、工业数字相机的分类二、相机的主要参数三、工业数字摄像机主要接口类型四、选择工业相机的考量因素六、实例分析 前言 随着科技的不断进步&#xff0c;工业自动化领域正经历着前所未有的变革。作为工业自动化的重要组成部分&#xff0c;工业相机在工业检测、…

Mysql读写分离分库分表

读写分离 什么是读写分离 读写分离主要是为了将对数据库的读写操作分散到不同的数据库节点上。 这样的话&#xff0c;就能够小幅提升写性能&#xff0c;大幅提升读性能。一般情况下&#xff0c;我们都会选择一主多从&#xff0c;也就是一台主数据库负责写&#xff0c;其他的从…

【C语言】结构体(四)

本篇重点是typedef关键字 一&#xff0c;是什么&#xff1f; typedef用来定义新的数据类型&#xff0c;通常typedef与结构体的定义配合使用。 简单来说就是取别名 ▶ struct 是用来定义新的数据类型——结构体 ▶ typedef是给数据类型取别名。 二&#xff0c;为什么&#xf…

普中51单片机——LED流水灯模块

1、GPIO概念 GPIO&#xff08;general purpose intput output&#xff09;是通用输入输出端口的简称&#xff0c;可以通过软件来控制其输入和输出。51 单片机芯片的 GPIO 引脚与外部设备连接起来&#xff0c;从而实现与外部通讯、 控制以及数据采集的功能。 1.1、GPIO分类 &a…