【0x02】HCI_Inquiry_Result事件详解

目录

一、事件概述

1.1. 事件参数 

1.2. 事件描述

1.3. 与查询过程的关联

1.4. 相关事件对比

二、事件内容

2.1. HCI_Inquiry_Result事件格式

2.2. Num_Responses

2.3. BD_ADDR[i]

2.4. Page_Scan_Repetition_Mode[i]

2.5. Reserved[i]

2.6. Class_Of_Device[i]

2.7. Clock_Offset[i]

三、事件触发时机

3.1. HCI_Inquiry_Result事件触发时机

3.2. 查询过程的结束

四、事件处理流程

3.1. 事件触发阶段

3.2. 事件生成与上传阶段

3.3. 事件处理阶段

3.4. 相关事件处理

3.5. 示例代码

五、注意事项

5.1. 协议兼容性

5.2. 数据处理

5.3. 资源管理

5.4. 设备连接和后续操作

5.5. 其他注意事项


HCI_Inquiry_Result事件是蓝牙通信中的一个重要事件,它发生在蓝牙设备执行查询(Inquiry)操作时,当主机控制器(Host Controller)发现周围的蓝牙设备并成功接收到其响应时,就会触发该事件。

一、事件概述

HCI_Inquiry_Result 事件主要用于在当前的蓝牙设备查询(Inquiry)过程中,向主机反馈已经接收到的来自蓝牙基本速率 / 增强数据速率(BR/EDR)控制器或者多个此类控制器的响应情况。简单来说,就是把查询过程中发现的蓝牙设备相关信息传递给主机,为主机后续决定与哪些设备进一步交互、连接等操作提供依据。

1.1. 事件参数 

  • Num_Responses:表示搜索到的设备数量,即该事件中包含的响应数量。
  • BD_ADDR[i]:表示每个搜索到的设备的蓝牙设备地址(Bluetooth Device Address),其中i表示设备的索引。
  • Page_Scan_Repetition_Mode[i]:表示每个设备的page扫描重复模式(Page Scan Repetition Mode),它决定了设备在响应查询时的扫描重复模式。常见的取值包括R0、R1和R2等。
  • Reserved[i]:保留字段,通常被忽略。
  • Class_Of_Device[i]:表示每个设备的设备类(Class of Device),它提供了关于设备功能和特性的信息。
  • Clock_Offset[i]:表示每个设备的时钟偏移(Clock Offset),它用于在建立连接时同步设备的时钟。

1.2. 事件描述

  • 当远程设备仅支持强制page方案时,一旦从远程设备接收到查询响应,BR/EDR Controller就会尽快将HCI_Inquiry_Result事件发送给Host。
  • BR/EDR Controller可能会将这些查询响应进行排队,并在一个HCI_Inquiry_Result事件中发送多个BR/EDR Controller的信息。
  • 该事件可以用于在一个事件中返回一个或多个查询响应。
  • 只有当上一个HCI_Write_Inquiry_Mode命令的Inquiry_Mode参数被设置为0x00(标准查询结果事件格式)者未使用HCI_Write_Inquiry_Mode命令时,才会生成该事件。

1.3. 与查询过程的关联

在整个蓝牙设备查询流程中,主机发送 HCI_Inquiry 命令来启动查询操作。在查询过程中,当主机控制器发现一个或多个蓝牙设备并获取其相关信息后,就会产生 HCI_Inquiry_Result 事件,将这些设备信息逐个或批量地发送给主机。

1.4. 相关事件对比

  • HCI_Inquiry_Result_with_RSSI 事件:与 HCI_Inquiry_Result 事件类似,但它额外包含了 RSSI(接收信号强度指示)数据。这个数据可以用于评估响应设备与当前蓝牙设备之间的信号强度,在选择信号质量好的设备进行连接等操作时非常有用。
  • HCI_Extended_Inquiry_Result 事件:包含比 HCI_Inquiry_Result 更丰富的信息,如 EIR Data(扩展查询响应数据)。EIR Data 中可能包含设备的蓝牙名字、设备支持的服务等内容,能让主机获取更详细的设备信息,用于更精准的设备连接和管理决策。
  • HCI_Inquiry_Complete 事件:当查询过程结束时触发,用于通知主机查询已经完成。主机可以根据这个事件进行后续处理,如结束查询流程、处理查询结果等,标志着整个查询过程的结束。

二、事件内容

2.1. HCI_Inquiry_Result事件格式

HCI_Inquiry_Result 事件主要由事件头、事件参数两大部分构成,整体上用于向主机传递在蓝牙设备查询(Inquiry)过程中所获取到的相关设备信息,协助主机完成诸如设备发现、连接及后续管理等操作。

  • 事件头:
    • Event Code:0x02,表示这是一个HCI_Inquiry_Result事件。
    • Parameter Length:指示后续参数的总长度(以字节为单位)。这个长度会根据查询到的设备数量而变化。
  • 事件参数:
    • Num_Responses(1字节):表示在该HCI_Inquiry_Result事件中报告的设备数量。
    • 设备信息块(对于每个查询到的设备):
      • 每个设备信息块包含以下字段:
        • BD_ADDR(6字节):蓝牙设备地址,是设备的唯一标识符。
        • Page_Scan_Repetition_Mode(1字节):页面扫描重复模式,表示设备在响应查询时的扫描重复模式。
        • Reserved(1字节):保留字段,通常被设置为0。
        • Class_Of_Device(3字节):设备类,提供了关于设备功能和特性的信息。
        • Clock_Offset(2字节):时钟偏移,用于在建立连接时同步设备的时钟。
  • 示例:假设一个HCI_Inquiry_Result事件报告了两个设备,事件内容可能如下所示:
- Class_Of_Device: XX:XX:XX
- Clock_Offset: XX:XX
 
Device 2:
- BD_ADDR: YY:YY:YY:YY:YY:YY
- Page_Scan_Repetition_Mode: 0x00
- Reserved: 0x00
- Class_Of_Device: YY:YY:YY
- Clock_Offset: YY:YY

解析HCI_Inquiry_Result事件的内容,主机可以获取到查询到的蓝牙设备的详细信息,并根据这些信息执行后续操作,如发起连接请求、获取设备名称等。

2.2. Num_Responses

Num_Responses 用于表示此次事件中包含的响应数量,也就是一共携带了多少个蓝牙设备的相关信息。通过这个参数,主机可以提前知晓后续要解析的设备信息组数,方便对整个事件数据进行合理的处理和拆分。

示例应用场景:比如在一个蓝牙设备发现应用中,主机接收到的 HCI_Inquiry_Result 事件里 Num_Responses 的值为 5,那就意味着后面跟着的是 5 组不同蓝牙设备的详细信息,主机就可以按照这个数量依次去解析和处理每组设备信息,为后续展示设备列表、进行设备连接等操作做准备。

2.3. BD_ADDR[i]

BD_ADDR [i] 是一个数组形式的参数,其中每个元素代表一个被查询到的蓝牙设备的地址(蓝牙设备地址,Bluetooth Device Address)。它是一个在全球范围内唯一标识蓝牙设备的标识符,其长度通常是固定的(比如 48 位,以十六进制表示形式较为常见),作用类似于设备的 “身份证号码”,主机通过这个地址能精准区分不同的蓝牙设备。蓝牙MAC地址-CSDN博客

2.4. Page_Scan_Repetition_Mode[i]

Page_Scan_Repetition_Mode [i] 同样是一个数组形式的参数,每个元素对应一个被查询到的蓝牙设备,用于表示该设备的寻呼扫描重复模式。不同的模式决定了设备在被寻呼(例如,后续主机尝试与该设备建立连接等操作时)时的扫描频率、响应方式等行为特点,是了解设备寻呼相关特性的重要参数。

主机在接收到 HCI_Inquiry_Result 事件后,会解析 Page_Scan_Repetition_Mode 数组,并根据这些信息执行后续操作,如优化连接请求的时序、处理不同设备的响应等。

  • R0(0x00):表示设备不进行额外的页面扫描重复,即只响应一次查询。
  • R1(0x01):表示设备在响应查询之前会重复page扫描一次。
  • R2(0x02):表示设备在响应查询之前会重复page扫描两次。
  • 所有其他值都是保留的,目前未使用。 

2.5. Reserved[i]

Reserved [i] 是预留参数,在当前的蓝牙协议规范下,它暂时可能没有实际的使用用途。

Reserved [i] 参数的大小为 Num_Responses × 2 个八位字节(octets)。意味着它的总字节长度取决于此次 HCI_Inquiry_Result 事件中所包含的设备响应数量(由 Num_Responses 确定),每个响应设备都对应着 2 个字节的预留空间。

对于主机来说,在接收到 HCI_Inquiry_Result 事件时,可以忽略 Reserved[i] 参数的值,因为它当前没有定义具体的功能。 

2.6. Class_Of_Device[i]

Class_Of_Device [i] 是一个数组形式的参数,用于标识每个被查询到的蓝牙设备的设备类别。它按照蓝牙协议规定的编码格式,通过不同的位组合来表示设备属于何种类型,比如是音频播放设备、输入设备(像键盘、鼠标等)、打印设备还是其他类型,有助于主机快速对设备进行分类筛选。

2.7. Clock_Offset[i]

Clock_Offset [i] 是一个数组形式的参数,用于表示每个被查询到的蓝牙设备的时钟偏移量。蓝牙设备之间在通信时需要进行时钟同步,这个参数所体现的时钟偏移量就是衡量设备内部时钟与主机时钟差异的关键指标,对于后续准确、高效地进行数据传输以及设备间的同步协作有着重要意义。

  • Value: 设备类别值是一个24位的十六进制数,根据蓝牙核心规范中的规定,对设备的服务类别、主要设备类别及次要设备类别进行了编码。
    • 服务类别(Service Class):通常位于值的最高有效位部分,用于描述设备提供的特定服务(例如,音频、电话、对象推送等)。
    • 主要设备类别(Major Device Class):描述了设备的主要类型(例如,计算机、电话、音频/视频设备等)。
    • 次要设备类别(Minor Device Class):提供了主要设备类别下的进一步细分(例如,键盘、鼠标、头戴式耳机等)。
  • 注意事项:设备类别信息是基于蓝牙设备在出厂时或用户配置时提供的,有时可能不够准确或最新。

三、事件触发时机

在蓝牙通信中,为了发现和连接其他蓝牙设备,主机(Host)会向控制器(Controller)发送HCI_Inquiry命令,启动设备查询流程。控制器接收到命令后,会发送ID包以寻找周围的蓝牙设备。这些设备接收到ID包后,会响应并发送包含自身信息的FHS包。控制器解析这些包,并将找到的设备信息通过HCI_Inquiry_Result等事件返回给主机。【0x0001】HCI_Inquiry命令详解-CSDN博客

3.1. HCI_Inquiry_Result事件触发时机

  • 设备响应查询:当控制器在查询过程中接收到来自其他蓝牙设备的响应时,会触发HCI_Inquiry_Result事件。该事件包含响应设备的蓝牙地址、设备类别、时钟偏移量等关键信息。如果查询模式支持,还可能包含RSSI(接收信号强度指示)值。
  • 多个设备响应:在查询过程中,如果有多个设备响应,控制器会多次触发HCI_Inquiry_Result事件(或相关事件),以报告所有找到的设备。触发次数取决于响应设备的数量和查询模式的设置,如查询时长和响应数限制。
  • 查询模式限制:如果查询模式设置为标准查询结果格式(Inquiry_Mode参数为0x00),或未使用HCI_Write_Inquiry_Mode命令设置查询模式,则控制器在收到设备响应后会触发HCI_Inquiry_Result事件。否则,可能会采用其他方式处理和传递设备响应信息。

3.2. 查询过程的结束

  • 主动停止查询:主机可以使用HCI_Inquiry_Cancel命令通知控制器立即停止查询过程。
  • 自动停止查询
    • 如果主机未主动停止查询,且查询上报的结果已达数量限制或查询时长已到,控制器会自动停止查询。
    • 此时,控制器会触发HCI_Inquiry_Complete事件,通知主机查询过程已结束。

HCI_Inquiry_Result事件是在蓝牙设备查询过程中,由控制器在接收到其他蓝牙设备响应时触发的事件。该事件包含响应设备的相关信息,并用于报告给主机以便进一步处理。了解这些触发时机有助于更好地理解蓝牙设备查询流程,并在实际应用中进行相应的处理和优化。

四、事件处理流程

HCI_Inquiry_Result事件处理流程是一个复杂的蓝牙设备查询和处理过程,涉及事件触发、生成与上传、以及事件处理等多个阶段。通过该流程,蓝牙设备能够获取周围蓝牙设备的信息,并根据这些信息执行后续操作,如设备连接、信息显示、通知发送、设备筛选和分类等。

3.1. 事件触发阶段

  • 下发HCI_Inquiry命令:
    • 蓝牙设备需要查询周围设备时,通过HCI接口下发HCI_Inquiry命令。
    • 命令中包含查询的持续时间等参数,如设定值乘以1.28秒得到实际查询时间。
  • 设备响应查询:
    • 周围蓝牙设备接收查询命令后,根据设置和状态决定是否响应。
    • 响应设备发送响应数据包。
  • Baseband Controller接收响应:蓝牙设备的Baseband Controller接收响应数据包。

3.2. 事件生成与上传阶段

  • 生成HCI_Inquiry_Result事件:
    • Baseband Controller解析响应数据包,生成HCI_Inquiry_Result事件。
    • 事件包含响应设备的地址、Page Scan重复模式、设备类型等信息。
  • 上传事件到Host:Baseband Controller通过HCI接口将生成的HCI_Inquiry_Result事件上传到Host端。

3.3. 事件处理阶段

  • 接收并解析事件:
    • Host端接收HCI_Inquiry_Result事件,解析事件数据。
    • 提取设备地址、Page Scan重复模式、设备类型等关键信息。
  • 更新查询数据库:
    • 根据解析的数据,Host端更新查询数据库。
    • 如果数据库已满,丢弃最旧条目或采取其他策略管理数据库。
  • 触发后续操作:根据查询结果,Host端可能触发后续操作,如:
    • 对设备进行筛选和分类。
    • 发送通知。
    • 显示设备信息给用户。
    • 发起连接请求。
    • 选择需要连接的蓝牙设备。

3.4. 相关事件处理

  • HCI_Inquiry_Result_with_RSSI:处理包含RSSI数据的查询结果事件,评估信号强度。
  • HCI_Extended_Inquiry_Result:处理包含更丰富信息的查询结果事件,如EIR Data(设备名称、支持服务等)。
  • HCI_Inquiry_Complete:处理查询完成事件,结束查询流程,处理查询结果。

3.5. 示例代码

以下是一个简化的伪代码或框架,以展示如何处理这类事件。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
// 假设的蓝牙设备地址类型
typedef struct {
    uint8_t address[6];
} BluetoothAddress;
 
// 假设的查询结果结构体
typedef struct {
    BluetoothAddress bd_addr;
    uint8_t page_scan_repetition_mode;
    uint8_t reserved[2];
    uint8_t class_of_device[3];
    uint16_t clock_offset;
} InquiryResult;
 
// 假设的查询数据库
typedef struct {
    InquiryResult results[10]; // 假设数据库最多存储10个设备
    int count;
} InquiryDatabase;
 
// 初始化查询数据库
void init_inquiry_database(InquiryDatabase *db) {
    memset(db, 0, sizeof(InquiryDatabase));
    db->count = 0;
}
 
// 更新查询数据库(简化版,不考虑数据库已满的情况)
void update_inquiry_database(InquiryDatabase *db, InquiryResult *result) {
    // 在这里,我们简单地添加新结果到数据库末尾
    // 在实际应用中,可能需要检查重复项、排序或执行其他操作
    memcpy(&db->results[db->count], result, sizeof(InquiryResult));
    db->count++;
}
 
// 处理HCI_Inquiry_Result事件的函数(简化版)
void handle_hci_inquiry_result(uint8_t *event_data, int event_length) {
    // 假设event_data已经包含了HCI_Inquiry_Result事件的所有数据
    // 并且event_length是数据的总长度(以字节为单位)
 
    // 解析Num_Responses
    int num_responses = event_data[0];
 
    // 初始化查询结果结构体数组
    InquiryResult results[num_responses];
 
    // 解析每个设备的响应信息
    for (int i = 0; i < num_responses; i++) {
        // 提取BD_ADDR
        memcpy(results[i].bd_addr.address, &event_data[1 + i * 11], 6);
 
        // 提取Page_Scan_Repetition_Mode
        results[i].page_scan_repetition_mode = event_data[7 + i * 11];
 
        // 提取Reserved(虽然这里不使用,但仍然需要读取以保持同步)
        memcpy(results[i].reserved, &event_data[8 + i * 11], 2);
 
        // 提取Class_Of_Device
        memcpy(results[i].class_of_device, &event_data[10 + i * 11], 3);
 
        // 提取Clock_Offset(注意:这里可能需要考虑字节顺序和转换)
        uint16_t clock_offset = (event_data[13 + i * 11] << 8) | event_data[14 + i * 11];
        results[i].clock_offset = clock_offset;
    }
 
    // 假设我们有一个全局的查询数据库
    static InquiryDatabase db;
    init_inquiry_database(&db); // 在实际应用中,这应该在程序开始时调用一次,而不是在这里
 
    // 更新数据库
    for (int i = 0; i < num_responses; i++) {
        update_inquiry_database(&db, &results[i]);
    }
 
    // 触发后续操作(例如,显示设备信息、发起连接请求等)
    // 这里只是简单地打印设备地址作为示例
    for (int i = 0; i < db.count; i++) {
        printf("Device found: ");
        for (int j = 0; j < 6; j++) {
            printf("%02X ", db.results[i].bd_addr.address[j]);
        }
        printf("\n");
    }
}
 
int main() {
    // 假设在某个时刻,我们接收到了HCI_Inquiry_Result事件的数据
    // 这里我们使用一个硬编码的数组来模拟接收到的数据
    uint8_t mock_event_data[] = {
        // Num_Responses, followed by device-specific data (simplified for brevity)
        1, // 1 response
        0x00, 0x11, 0x22, 0x33, 0x44, 0x55, // BD_ADDR
        0x00, // Page_Scan_Repetition_Mode
        0x00, 0x00, // Reserved
        0x18, 0x01, 0x05, // Class_Of_Device
        0x00, 0xAA // Clock_Offset (simplified, should be 16-bit)
    };
    int mock_event_length = sizeof(mock_event_data);
 
    // 处理HCI_Inquiry_Result事件
    handle_hci_inquiry_result(mock_event_data, mock_event_length);
 
    return 0;
}

五、注意事项

5.1. 协议兼容性

  • 蓝牙协议版本
    • 不同版本的蓝牙协议可能对HCI_Inquiry_Result事件的定义、参数格式和解析方式存在差异。
    • 开发人员需查阅对应版本的蓝牙协议文档,确保解析和处理符合规范。
    • 注意设备类别等参数的编码规则可能随协议版本更新而改变。
  • 自定义查询模式
    • 自定义查询模式下的事件触发时机和内容可能与标准查询结果不同。
    • 开发人员需了解自定义模式下的行为,避免按标准模式处理而导致错误。

5.2. 数据处理

  • 参数解析准确性
    • 确保按照蓝牙协议规定的大小和格式准确解析事件参数。
    • 错误解析可能导致设备信息不完整或错误,影响后续操作。
  • 数据存储和更新
    • 选择合理的存储结构,确保数据存储的高效性和一致性。
    • 更新设备信息时,避免数据丢失或重复,保持数据完整性。

5.3. 资源管理

  • 内存和缓冲区管理
    • 处理事件时,注意内存的分配和释放,避免内存泄漏。
    • 合理设置缓冲区大小,避免缓冲区溢出导致信息丢失。
  • 处理资源占用
    • 优化事件处理代码,减少不必要的计算,提高处理效率。
    • 在资源受限的设备上,采用异步处理或优化算法来减少CPU占用。

5.4. 设备连接和后续操作

  • 连接时机和策略
    • 根据事件中的设备信息确定合适的连接时机和策略。
    • 考虑设备的寻呼扫描重复模式和时钟偏移量,提高连接成功率和通信质量。
  • 异常情况处理
    • 建立完善的异常处理机制,应对连接失败、超时等异常情况。
    • 及时释放资源,向用户提示错误信息,确保系统稳定性和可靠性。

5.5. 其他注意事项

  • 安全性
    • 处理设备信息时,注意信息安全和隐私保护。
    • 在建立连接前,使用适当的配对和认证机制确保通信安全。
  • 错误处理
    • 准备错误处理逻辑,应对格式错误、数据不完整等异常情况。
    • 给出适当的错误提示,帮助用户或开发人员定位问题。
  • 文档和测试
    • 详细记录事件处理逻辑和注意事项,便于后续维护和调试。
    • 进行充分的测试,验证事件处理逻辑的正确性和稳定性。

综上所述,HCI_Inquiry_Result事件是蓝牙通信中用于提供查询到的蓝牙设备信息的重要事件。通过解析该事件的内容,主机可以获取到蓝牙设备的详细信息,并据此执行后续操作。

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

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

相关文章

[c语言日寄](bit)位检查——初探字节之下

哈喽大家好啊&#xff0c;在今天的快乐刷题中&#xff0c;我遇到了一个很有意思的题目&#xff1a; 题目 统计二进制中1的个数 基本思路 没错……这道题的对象比较特殊。 不同于过去常见的题目&#xff0c;之前的题目的对象都是基本数据类型&#xff0c;而这道题的对象却是…

音频语言模型与多模态体系结构

音频语言模型与多模态体系结构 多模态模型正在创造语言、视觉和语音等以前独立的研究领域的协同效应。这些模型使用通用架构,将每种模式视为不同的“token”,使它们能够以一种与人类认知非常相似的方式联合建模和理解世界。 ​ ​可以将多模态分为两个主要领域:输入空间(…

25/1/15 嵌入式笔记 初学STM32F108

GPIO初始化函数 GPIO_Ini&#xff1a;初始化GPIO引脚的模式&#xff0c;速度和引脚号 GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIOA的引脚0 GPIO输出控制函数 GPIO_SetBits&#xff1a;将指定的GPIO引脚设置为高电平 GPIO_SetBits(GPIOA, GPIO_Pin_0); // 将GPIO…

《机器学习》——SVD(奇异分解)降维

文章目录 SVD基本定义SVD降维的步骤SVD降维使用场景SVD 降维的优缺点SVD降维实例导入所需库定义SVD降维函数导入图像处理图像处理图像打印降维结果并显示处理后两个图像的对比图 SVD基本定义 简单来说就是&#xff0c;通过SVD&#xff08;奇异值分解&#xff09;对矩阵数据进行…

医疗集群系统中基于超融合数据库架构的应用与前景探析

一、引言 1.1 研究背景与意义 随着医疗信息化的飞速发展,医疗数据呈爆炸式增长。从日常诊疗记录、患者病历,到各类医疗影像、检查检验数据等,海量信息不断涌现。据统计,医疗数据的年增长率高达 30% 以上 ,2025 年,全球医疗数据量将达到 2314 艾字节(EB)。如此庞大的数…

闪豆多平台视频批量下载器

1. 视频链接获取与解析 首先&#xff0c;在哔哩哔哩网页中随意点击一个视频&#xff0c;比如你最近迷上了一个UP主的美食制作视频&#xff0c;想要下载下来慢慢学。点击视频后&#xff0c;复制视频页面的链接。复制完成后&#xff0c;不要急着关闭浏览器&#xff0c;因为接下来…

深度学习模块C2f代码详解

C2f 是一个用于构建卷积神经网络&#xff08;CNN&#xff09;的模块&#xff0c;特别是在 YOLOv5 和 YOLOv8 等目标检测模型中。这个模块是一个改进的 CSP&#xff08;Cross Stage Partial&#xff09;Bottleneck 结构&#xff0c;旨在提高计算效率和特征提取能力。下面是对 C2…

matlab展示龙格现象

为了展示龙格现象&#xff0c;它使用拉格朗日插值多项式&#xff0c;展示了随着插值点数目的增加&#xff0c;插值多项式在区间端点附近震荡的现象。 重新编写的 MATLAB 代码&#xff1a; % 定义目标函数 f (x) 1 ./ (1 x.^2);% 设置插值区间 x_interval [-5, 5]; % 插值…

浅谈云计算19 | OpenStack管理模块 (上)

OpenStack管理模块&#xff08;上&#xff09; 一、操作界面管理架构二、认证管理2.1 定义与作用2.2 认证原理与流程2.2.1 认证机制原理2.2.2 用户认证流程 三、镜像管理3.1 定义与功能3.2 镜像服务架构3.3 工作原理与流程3.3.1 镜像存储原理3.3.2 镜像检索流程 四、计算管理4.…

探索 Transformer²:大语言模型自适应的新突破

目录 一、来源&#xff1a; 论文链接&#xff1a;https://arxiv.org/pdf/2501.06252 代码链接&#xff1a;SakanaAI/self-adaptive-llms 论文发布时间&#xff1a;2025年1月14日 二、论文概述&#xff1a; 图1 Transformer 概述 图2 训练及推理方法概述 图3 基于提示的…

SpringBoot3-整合WebSocket指南

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞??收藏评论 SpringBoot3-整合WebSocket指南 1. 什么是WebSocket?2. 环境准备 2.1 项目依赖 3. WebSocket配置 3.1 WebSocket配置类3.2 自定义WebSocket处理器 4. 控制器5. 前端实现 5.1 HTML页面…

技术晋升读书笔记—办事的艺术

作为一名程序员&#xff0c;沟通能力对于我们这一行来说并不是强项。大多数程序员与电脑打交道的时间远远多于与人交流&#xff0c;特别工作一天有可能全程在与电脑打交道&#xff0c;因此沟通技巧的提升往往被忽视。然而&#xff0c;随着职业发展的推进&#xff0c;尤其在国内…

警惕IDEA 2024版重大Bug问题:LomBok失效、Gradle冲突、Spring Boot启动错误

一直以来我认为工具类的软件是越新越好&#xff0c;因为工具代表着一定的先进性&#xff1b;但是IDEA 2024好好的给我上了一课&#xff0c;比如lombok 不起作用、比如Spring Boot 3.4.x 启动报错、再比如MyBatis log plus冲突、再比如Gradle插件冲突. 一、Lombok 失效问题 请不…

01、flink的原理和安装部署

flink中主要有两个进程&#xff0c;分别是JobMManager和TaskManager&#xff0c;当然了根据flink的部署和运行环境不同&#xff0c;会有一些不同&#xff0c;但是主要的功能是类似的&#xff0c;下面我会讲下聊下&#xff0c;公司用的多的部署方式&#xff0c;基于yarn集群的部…

Vue2+OpenLayers实现车辆开始、暂停、重置行驶轨迹动画(提供Gitee源码)

前言&#xff1a;根据经纬度信息绘制一个完整的行驶路线&#xff0c;车辆根据绘制好的路线从开始点位行驶到结束点位&#xff0c;可以通过开始、暂停、重置按钮控制车辆状态。 目录 一、案例截图 二、安装OpenLayers库 三、​安装Element-UI ​ 四、代码实现 4.1、初始化…

两个React项目部署在同一个域名,一个主地址,一个子地址,二级白屏等问题

主域名配置的那个项目正常配置就可以了&#xff0c;但是对于子地址的项目&#xff0c;需要做很多的配置的。 注意 子地址的那个项目在配置中需要配置为子地址&#xff1a; base: /subpk 在vite.config.ts中修改&#xff1a; 如果这里没有配置正确&#xff0c;会导致白屏或者…

管理口令安全和资源(二)

DBMS_METADATA DBMS_METADATA 是 Oracle 数据库中的一个包&#xff0c;它提供了用于管理数据库元数据的工具和过程。元数据是关于数据的数据&#xff0c;它描述了数据库的结构&#xff0c;包括表、视图、索引、存储过程、用户和其他数据库对象的信息。DBMS_METADATA 包允许用户…

【狂热算法篇】探秘图论之 Floyd 算法:解锁最短路径的神秘密码(通俗易懂版)

&#xff1a; 羑悻的小杀马特.-CSDN博客羑悻的小杀马特.擅长C/C题海汇总,AI学习,c的不归之路,等方面的知识,羑悻的小杀马特.关注算法,c,c语言,青少年编程领域.https://blog.csdn.net/2401_82648291?spm1010.2135.3001.5343 在本篇文章中&#xff0c;博主将带大家去学习所谓的…

Kotlin Bytedeco OpenCV 图像图像57 图像ROI

Kotlin Bytedeco OpenCV 图像图像57 图像ROI 1 添加依赖2 测试代码3 测试结果 1 添加依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns"http://maven.apache.o…

Linux手写FrameBuffer任意引脚驱动spi屏幕

一、硬件设备 开发板&#xff1a;香橙派 5Plus&#xff0c;cpu&#xff1a;RK3588&#xff0c;带有 40pin 外接引脚。 屏幕&#xff1a;SPI 协议 0.96 寸 OLED。 二、需求 主要是想给板子增加一个可视化的监视器&#xff0c;并且主页面可调。 平时跑个模型或者服务&#xff0c;…