当前位置: 首页 > news >正文

【0x0037】HCI_Write_Link_Supervision_Timeout命令详解

目录

一、命令概述

二、命令格式及参数说明

2.2. Handle

三、生成事件及参数

3.1.  HCI_Command_Complete 事件

3.2. Status

3.3. Handle

四、命令执行流程

4.1. 命令准备阶段

4.2. 命令传输阶段

4.3. 命令处理阶段(控制器端)

4.4. 返回结果阶段

4.5. 事件通知阶段(如果未屏蔽)

4.6. 示例代码

五、应用场景

六、注意事项

6.1. 角色限制

6.2. 参数设置

6.3. 事件处理

6.4. 兼容性考虑

6.5. 连接稳定性与节能的平衡

6.6. 安全性考虑


HCI_Write_Link_Supervision_Timeout 命令是用于设置蓝牙基本速率/增强数据速率(BR/EDR)控制器中的链路监督超时(Link Supervision Timeout, LSTO)值的命令。链路监督超时是指在一定时间内如果没有接收到来自对端设备的数据包,则认为链路已经丢失,设备将断开连接。这个命令对于管理蓝牙连接的稳定性和资源非常关键。

一、命令概述

HCI_Write_Link_Supervision_Timeout 命令是蓝牙HCI(Host Controller Interface)协议中用于设置特定ACL(Asynchronous Connection-Less)连接的链路监督超时的命令。它允许主机(Host)为特定的蓝牙连接设置一个链路监督超时值。在蓝牙设备的管理和连接维护中起着重要作用。

  • 当主机(Host)向控制器(Controller)发送此命令时,它指定了一个连接句柄和期望的链路监督超时值
  • 如果控制器作为外设(Peripheral)角色,并且主机尝试修改这个值,控制器将返回错误代码“命令不允许”(Command Disallowed,错误码0x0C
  • 使用的连接句柄应该是指向目标设备的ACL连接。执行此命令后,该设备的其他同步连接句柄(Synchronous Handles)的链路监督超时值也将被设置为相同的值。 

二、命令格式及参数说明

HCI_Write_Link_Supervision_Timeout 命令的格式遵循蓝牙核心规范中定义的HCI命令结构。

该命令的详细格式: 

  • Opcode(操作码):

    • OGF(Operation Group Field): 0x03表示该命令属于链路控制命令组。

    • OCF(Operation Code Field): 0x0037表示该命令是设置链路监督超时命令。

    • 完整的Opcode: 0x03 0x0037 或组合为 0x0C37

  • Parameter Total Length(参数总长度):

    • 长度为1个字节,表示后续参数的总长度。

    • 对于HCI_Write_Link_Supervision_Timeout命令,参数总长度固定为4个字节(2个字节用于连接句柄,2个字节用于链路监督超时值)。

  • Parameters(参数):

    • Connection Handle(连接句柄):

      • 长度:2个字节。

      • 用于唯一标识一个ACL连接。

    • Link Supervision Timeout(链路监督超时值):

      • 长度:2个字节。

      • 表示链路监督超时的值,单位为0.625毫秒的倍数。例如,如果设置为0x0200,则超时时间为0x0200 * 0.625毫秒 = 512毫秒。

2.2. Handle

Handle 是指一个用于标识特定BR/EDR控制器连接的连接句柄(Connection_Handle)。在 HCI_Write_Link_Supervision_Timeout 命令中用于指定哪个连接的链路监督超时值将被写入。

 范围:从 0x0000 到 0x0EFF。这个范围限制了可以标识的连接数量,因为连接句柄只有 12 位有效。

Link_Supervision_Timeout用于定义蓝牙BR/EDR连接在没有收到来自对等设备的任何数据包时可以保持活动状态的最长时间。这个参数在 HCI_Write_Link_Supervision_Timeout 命令中用于设置特定连接的链路监督超时值。

  • 0x0000:表示没有设置链路监督超时,但在实际应用中,通常不是有效的设置,因为蓝牙核心规范为控制器定义了一个强制范围。
  • N = 0xXXXXN 是一个十六进制值,表示以BR/EDR基带时隙为单位的数量。链路监督超时值是通过将 N 乘以 0.625 毫秒来计算的,其中 0.625 毫秒是一个基带时隙的持续时间。
    • 时间范围:从 0.625 毫秒到 40.96 秒
    • 默认值0x7D00表示 20 秒的超时时间
    • 控制器的强制范围0x0190 到 0xFFFF;意味着超时值可以从 1 个基带时隙(即 0.625 毫秒)到 65535 个基带时隙(即约 40.96 秒)不等。另外,0x0000 可以表示无限超时(尽管在实际应用中,可能需要特定的实现或配置)。

三、生成事件及参数

3.1.  HCI_Command_Complete 事件

当 HCI_Write_Link_Supervision_Timeout 命令完成时,将生成一个 HCI_Command_Complete 事件。这个事件是HCI层用来通知主机命令已经执行完毕的标准机制。

  • 事件内容

    • 命令操作码(Opcode):标识触发此事件的HCI命令。
    • 返回参数:包括的StatusHandle(如果适用)。Status字段将指示命令是否成功执行(0x00表示成功,其他值表示失败及相应的错误代码)。如果命令成功,Handle字段将包含被更新链路监督超时值的连接句柄。
  • 事件处理:主机接收到HCI_Command_Complete事件后,将检查Status字段以确定命令是否成功执行。如果命令失败,主机可能会采取适当的错误处理措施,如重试命令、记录错误日志或通知用户。

3.2. Status

Status 参数用于表明 HCI_Write_Link_Supervision_Timeout 命令的执行情况。

  • 当 Status 的值为 0x00 时,代表 HCI_Write_Link_Supervision_Timeout 命令已成功执行。表示系统已成功更新了指定连接的链路监督超时值。
  • 如果 Status 的值介于 0x01 到 0xFF 之间,意味着命令执行失败。此时,具体的错误代码将提供有关失败原因的详细信息。蓝牙Controller错误代码全面概览_蓝牙错误代码-CSDN博客

3.3. Handle

Handle 参数用于指定哪个连接的链路监督超时值被 HCI_Write_Link_Supervision_Timeout 命令所更新。

HCI_Write_Link_Supervision_Timeout 命令参数中的 Handle 格式相同,用于确认操作对应的连接。如果命令执行成功,返回的 Handle 应该与发送命令时使用的 Handle 一致;如果出现错误,返回的 Handle 可能用于帮助定位问题连接。

四、命令执行流程

4.1. 命令准备阶段

  • 确定目标连接句柄:主机确定要设置链路监督超时(LSTO)值的蓝牙连接的唯一标识符(Connection_Handle),该句柄必须在0x0000到0x0EFF的范围内。
  • 设置超时值:主机设置所需的LSTO值,该值以0.625毫秒为单位,范围是0x0001到0xFFFF
  • 构建命令包:主机按照HCI命令格式,使用操作码0x0037,并附加Handle和Link_Supervision_Timeout参数,构建完整的命令数据包。

4.2. 命令传输阶段

  • 发送命令:主机通过HCI接口(如UART、USB等)将构建好的命令数据包发送给蓝牙控制器。

4.3. 命令处理阶段(控制器端)

  • 接收并解析命令:控制器接收命令包,并检查其格式是否正确。
  • 权限和范围检查
    • 控制器验证Handle对应的连接角色,确保不是从设备发出的命令(从设备不允许设置LSTO)。
    • 控制器检查Handle和LSTO参数是否在有效范围内。
  • 更新链路监督超时值:如果所有检查都通过,控制器将更新指定连接的LSTO值,包括可能的同步连接。

4.4. 返回结果阶段

  • 构建返回包:控制器根据命令执行结果构建返回包,包括Status和Handle参数。
  • 发送返回包:控制器通过HCI接口将返回包发送回主机。
  • 接收并处理返回结果
    • 主机接收返回包,检查Status参数以确定命令是否成功。
    • 根据Status值,主机执行相应的后续操作,如记录日志、更新状态或报告错误。

4.5. 事件通知阶段(如果未屏蔽)

  • 生成并发送事件:控制器生成HCI_Command_Complete事件(除非被屏蔽),并通过HCI接口发送给主机。
  • 接收并处理事件:主机接收事件,进一步确认命令已完成,并根据需要进行其他处理。

4.6. 示例代码

以下是一个简化的示例代码框架,用于说明如何在C语言中构建和发送该命令,以及如何处理响应。请注意,这只是一个示例,并不包含实际的硬件接口代码或错误处理细节。

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>// 假设有一个HCI接口库提供以下函数
// hci_send_command(uint8_t *packet, uint16_t length);
// hci_receive_event(uint8_t *event, uint16_t *length);// 示例:HCI命令包结构
typedef struct {uint16_t opcode;       // 操作码uint8_t  param_len;    // 参数长度uint16_t handle;       // 连接句柄uint16_t lsto;         // 链路监督超时值
} hci_write_lsto_cmd_t;// 示例:HCI事件包结构(简化)
typedef struct {uint8_t  evt_code;     // 事件代码uint8_t  plen;         // 参数长度uint8_t  status;       // 状态码uint16_t handle;       // 连接句柄(可能包含在返回包中)// ... 其他可能的参数
} hci_command_complete_evt_t;// 函数:构建并发送HCI_Write_Link_Supervision_Timeout命令
void send_write_lsto_command(uint16_t handle, uint16_t lsto) {hci_write_lsto_cmd_t cmd;cmd.opcode = 0x0037; // HCI_Write_Link_Supervision_Timeout 操作码cmd.param_len = 4;   // 参数长度(2字节handle + 2字节lsto)cmd.handle = handle;cmd.lsto = lsto;uint8_t packet[HCI_COMMAND_PACKET_MAX_SIZE]; // 假设定义了最大包大小memset(packet, 0, sizeof(packet));// 将命令结构复制到包中(这里需要适当的字节序转换,如果必要)memcpy(packet, &cmd, sizeof(cmd));// 发送命令hci_send_command(packet, sizeof(cmd));
}// 函数:处理HCI_Command_Complete事件
void handle_command_complete_event(uint8_t *event, uint16_t length) {if (length < sizeof(hci_command_complete_evt_t)) {// 事件包太短,无法处理return;}hci_command_complete_evt_t *evt = (hci_command_complete_evt_t *)event;if (evt->evt_code == HCI_EVENT_COMMAND_COMPLETE) {if (evt->status == 0x00) {// 命令成功执行printf("HCI_Write_Link_Supervision_Timeout command succeeded for handle 0x%04X\n", evt->handle);} else {// 命令执行失败printf("HCI_Write_Link_Supervision_Timeout command failed with status 0x%02X for handle 0x%04X\n", evt->status, evt->handle);}} else {// 不是命令完成事件printf("Unexpected event code 0x%02X\n", evt->evt_code);}
}// 主函数:示例使用
int main() {uint16_t handle = 0x0001; // 示例连接句柄uint16_t lsto = 0x0200;   // 示例链路监督超时值(512 * 0.625ms = 320ms)// 发送HCI_Write_Link_Supervision_Timeout命令send_write_lsto_command(handle, lsto);// 等待并处理HCI事件(这里需要实现一个循环来不断检查新事件)// 示例中省略了这部分,因为它通常涉及到异步I/O和事件循环机制// ...// 假设在某个时刻,我们收到了一个HCI_Command_Complete事件// uint8_t event_data[] = { ... }; // 假设这是接收到的事件数据// uint16_t event_length = ...;    // 假设这是接收到的事件长度// handle_command_complete_event(event_data, event_length);return 0;
}

在将命令结构复制到包中时,可能需要进行字节序转换(大端或小端)。这取决于HCI接口和蓝牙控制器的要求。

五、应用场景

HCI_Write_Link_Supervision_Timeout命令允许用户根据具体的应用场景和设备需求,灵活地设置链路监督超时(LSTO)的值。这一特性使得该命令在多个方面都有广泛的应用。

  • 蓝牙连接稳定性维护:在不同环境下,通过调整LSTO的值,可以优化蓝牙连接的稳定性。例如,在干扰较大的环境中缩短超时时间,以便更快地检测到连接问题;在对连接稳定性要求极高的场景中延长超时时间,以减少因短暂数据传输间隔而误判连接中断的情况。

  • 节能管理:对于电池供电的蓝牙设备,合理设置LSTO值可以在一定程度上实现节能。当设备在一段时间内没有数据交互且超时时间到达后,蓝牙控制器可以将设备置于低功耗模式或断开连接,从而减少能耗。

  • 多设备连接协调:在多设备连接到一个主设备的场景中,通过为不同设备设置不同的LSTO值,可以优化资源分配,提高连接效率和用户体验。例如,为正在使用的设备设置较长的超时时间,而为不常使用的设备设置较短的超时时间。

  • 蓝牙协议栈开发与测试:在蓝牙协议栈的开发和测试阶段,使用HCI_Write_Link_Supervision_Timeout命令可以模拟各种连接场景和故障情况,从而发现协议栈实现中的潜在问题,并优化其性能和稳定性。

HCI_Write_Link_Supervision_Timeout命令在蓝牙通信中具有广泛的应用场景和重要的实用价值。通过合理设置LSTO的值,可以优化连接稳定性、实现节能管理、协调多设备连接以及支持蓝牙协议栈的开发与测试。在实际应用中,开发人员和工程师应根据具体需求和场景来合理设置LSTO的值,以实现最佳的蓝牙通信性能和用户体验。

六、注意事项

开发者需要关注以下几个关键方面,以确保蓝牙通信的性能和用户体验得到优化:

6.1. 角色限制

  • 只有在蓝牙设备作为主设备(Master)角色时,才能发送此命令。
  • 从设备(Slave)发送此命令将失败,并返回Command Disallowed错误码。
  • 开发者需要在设计蓝牙应用程序或进行系统集成时,明确设备角色,并在合适的角色下使用此命令。

6.2. 参数设置

  • 正确设置连接句柄(Connection Handle)和LSTO值。
  • 连接句柄需确保在有效范围内(0x0000 - 0x0EFF)。
  • LSTO值需以0.625毫秒为单位进行转换,并设置在允许的范围内(0x0001 - 0xFFFF)。
  • 不恰当的参数设置可能导致命令执行失败或影响蓝牙连接的正常功能。

6.3. 事件处理

  • 应用程序或系统需正确处理HCI_Command_Complete事件。
  • 未及时处理该事件可能导致系统无法得知命令执行结果,影响后续操作。
  • 在实时性要求较高的应用中,需特别注意事件处理的及时性。

6.4. 兼容性考虑

  • 不同蓝牙设备和芯片组对命令的实现细节可能存在差异。
  • 开发者需要进行充分的测试,确保命令在各种目标设备上都能正常工作。
  • 针对老旧设备或特殊设备,可能需要进行兼容性处理。

6.5. 连接稳定性与节能的平衡

  • LSTO值的设置需在连接稳定性和节能之间取得平衡。
  • 较短的LSTO值可快速检测连接问题,但可能增加功耗和连接断开频率。
  • 较长的LSTO值可减少连接断开频率,但可能延迟对连接问题的检测。

6.6. 安全性考虑

  • 在安全性要求较高的应用中,需对LSTO的设置进行严格的控制和验证。
  • 防止恶意设备通过修改LSTO值来干扰蓝牙通信。

通过合理设置LSTO值,并遵循上述注意事项,可以优化蓝牙通信的性能和用户体验。

综上所述,HCI_Write_Link_Supervision_Timeout 命令是蓝牙设备管理中一个重要的命令,它允许主机根据需要调整链路监督超时值,从而优化连接的稳定性和资源使用。在使用此命令时,需要仔细考虑其对设备性能和功耗的影响,并确保符合蓝牙规范和应用需求。

相关文章:

【0x0037】HCI_Write_Link_Supervision_Timeout命令详解

目录 一、命令概述 二、命令格式及参数说明 2.1. HCI_Write_Link_Supervision_Timeout 命令格式 2.2. Handle 2.3. Link_Supervision_Timeout 三、生成事件及参数 3.1. HCI_Command_Complete 事件 3.2. Status 3.3. Handle 四、命令执行流程 4.1. 命令准备阶段 4.…...

Linux下如何进行内存泄漏分析

前言 正文 一、环境的安装 1、tar –xf valgrind-3.17.0.tar.bz2 2、cd valgrind-3.17.0 3、./configure // 运行配置脚本生成makefile文件&#xff0c;可以--help查看配置项&#xff0c;自行按需配置&#xff0c;比如修改编译工具、修改安装路径等 4、make 5、make…...

Colyseus Metadata 详解

Colyseus Metadata 详解 Colyseus 是一个专注于实时多人在线游戏和应用的框架&#xff0c;它的 metadata 功能为每个房间提供了一个灵活且有用的机制&#xff0c;用来存储和共享与房间相关的非实时信息。这些信息可以用来描述房间、标记房间状态、或提供额外的房间配置选项。 …...

C语言day5:shell脚本

一、练习题1 定义一个find函数&#xff0c;查找ubuntu和root的gid并使用变量接收结果 二、练习题2 定义一个数组&#xff0c;写一个函数完成对数组的冒泡排序 三、练习题3 使用break求1-100中的质数&#xff08;质数&#xff1a;只能被1和它本身整除&#xff0c;如&#xff1a;…...

微记录-Linux字符设备的write函数如何避免文件系统重复调用?

背景 linux字符设备的fops实现read write的时候&#xff0c;尤其是write&#xff0c;因为会指定写入的总长度&#xff0c;那么如果如果驱动中单次write最大个数小于需求len的时候&#xff0c;文件系统就会多次调用到write。他是根据wirte函数的返回值来判断的。如果返回值不是…...

本地调试自定义Maven Plugin步骤

添加自定义插件到dependencies 找到对应依赖的类&#xff0c;打上断点。 debug运行插件。...

二、github基础

Github基础 备用github.com网站一、用户界面-Overview&#xff08;概览&#xff09;1用户信息2 导航栏3 热门仓库4 贡献设置5贡献活动6搜索和筛选7自定义收藏8贡献统计9最近活动10其他链接 二、用户界面-Repositories&#xff08;仓库&#xff09;1 libusb_stm322 savedata3 Fi…...

如何在 Vue 2 中使用 Swiper 5.4.5 处理静态与后端数据不能切换问题

一、文章大纲 1.前言 介绍 Swiper 作为一款强大的轮播组件,常用于处理图片、文章、商品等内容的滑动展示。 在 Vue.js 项目中集成 Swiper,尤其是在 Vue 2 中使用,常见的两种数据来源:静态数据与后端数据。 在 Vue 2 项目中集成 Swiper 5.4.5 2.如何通过 npm 安装 Swiper…...

request.getSession().getAttribute(Constants.ADMIN_ID)

你提出了一个非常好的问题&#xff01; 确实&#xff0c;使用 request.getSession().getAttribute(Constants.ADMIN_ID) 也能从 Session 中获取属性&#xff0c;那么 SessionAttribute 注解和这种方式到底有什么区别呢&#xff1f; request.getSession().getAttribute(Constan…...

线性回归模型的构建与训练

1.基本的导入与配置 # To support both python 2 and python 3 from __future__ import division, print_function, unicode_literals# Common imports import numpy as np import pandas as pd import os# to make this notebooks output stable across runs np.random.seed(4…...

【JavaWeb后端学习笔记】MySQL的常用函数(字符串函数,数值函数,日期函数,流程函数)

MySQL函数 1、字符串函数2、数值函数3、日期函数4、流程函数 1、字符串函数 函数说明concat(s1, s2, …, sn)字符串拼接&#xff0c;将 s1, s2, …, sn 拼接成一个字符串lower(str)将字符串 str 全部转为小写upper(str)将字符串 str 全部转为大写lpad(str, n, pad)左填充&…...

【推送】主流的服务端推送技术的对比

推送技术的对比 以下是主流的服务端推送技术的对比表格&#xff0c;涵盖WebSocket、Server-Sent Events (SSE)、Long Polling、HTTP/2 Push和Comet&#xff1a; 特性WebSocketServer-Sent Events (SSE)Long PollingHTTP/2 PushComet通信方向双向单向&#xff08;服务器到客户…...

直观解读 JuiceFS 的数据和元数据设计(一)

大家读完觉得有意义和帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 1 JuiceFS 高层架构与组件2 搭建极简 JuiceFS 集群 2.1 搭建元数据集群2.2 搭建对象存储&#xff08;MinIO&#xff09; 2.2.1 启动 MinIO server2.2.2 创建 bucket2.3 下载 juicefs 客户端2.4 创…...

nginx配置文件没有语法颜色

第一种办法&#xff1a; nginx-1.26.2这个目录是通过解压 nginx-1.26.2.tar.gz&#xff0c;nginx官网下的 将这四个目录复制到/usr/share/vim/vimfiles/目录下 cp -ar ./* /usr/share/vim/vimfiles/ 再次进入nginx配置文件可以看到已经有颜色了 第二种方法&#xff1a; …...

PCB层叠结构设计

PCB层叠结构设计 层叠结构设计不合理完整性相关案例&#xff1a;在构成回流路径时&#xff0c;由于反焊盘的存在&#xff0c;使高速信号回流路径增长&#xff0c;造成信号回流路径阻抗不连续&#xff0c;对信号质量造成影响。 PCB层叠结构实物&#xff1a;由Core 和 Prepreg&a…...

电子应用设计方案83:智能 AI 打印机系统设计

智能 AI 打印机系统设计 一、引言 智能 AI 打印机系统旨在提供更高效、便捷和个性化的打印服务&#xff0c;融合了人工智能技术&#xff0c;以满足不断变化的用户需求。 二、系统概述 1. 系统目标 - 实现自动纸张检测、调整打印参数&#xff0c;适应不同纸张类型和尺寸。 - 具…...

windows安装rsync Shell语句使用rsync

sh脚本里使用 rsync功能&#xff0c;需要提前布置rsync环境 第一步&#xff0c;下载 libxxhash-0.8.2-1-x86_64.pkg.tar 下载压缩包地址 Index of /msys/x86_64/https://repo.msys2.org/msys/x86_64/ 下载对应版本&#xff0c;没特殊需求下载最高版本就行了 解压缩压缩包 …...

Django 模型

Django 模型 Django 模型是 Django 框架的核心组件之一,它用于定义应用程序的数据结构。在 Django 中,模型是 Python 类,通常继承自 django.db.models.Model。每个模型类代表数据库中的一个表,模型类的属性对应表中的字段。 1. 创建模型 创建 Django 模型非常简单。首先…...

CentOS — 压缩解压

文章目录 一、tar二、zip、unzip三、gzip、gunzip四、bzip2、bunzip2 一、tar 文件格式&#xff1a;.tar 压缩格式&#xff1a;tar [-参数] *.tar 目录|文件 解压格式&#xff1a;tar [-参数] *.tar [-C 目标目录] 参数 -c&#xff1a;create&#xff0c;创建&#xff0c;创…...

OpenGL变换矩阵和输入控制

在前面的文章当中我们已经成功播放了动画&#xff0c;让我们的角色动了起来&#xff0c;这一切变得比较有意思了起来。不过我们发现&#xff0c;角色虽然说是动了起来&#xff0c;不过只是在不停地原地踏步而已&#xff0c;而且我们也没有办法通过键盘来控制这个角色来进行移动…...

LCS最长公共子序列C++实现

算法思路&#xff1a;动态规划 版本1&#xff1a;只输出公共长度 #include <iostream> #include <string> using namespace std;int c[1000][1000]; //c[i][j]用来存储 Xi到Yj的最长公共子序列长度 void MaxLength(int m, int n, string x, string y) { //m&#x…...

深入刨析数据结构之排序(上)

目录 1.内部排序 1.1概述 1.2插入排序 1.2.1其他插入排序 1.2.1.1 折半插入排序 1.2.1.2 2-路插入排序 1.3希尔排序 1.4快速排序 1.4.1起泡排序 1.4.2快速排序 1.4.2.1hoare版本 1.4.2.2挖坑版本 1.4.2.3前后指针版本 1.4.2.4优化版本 1.4.2.4.1小区间插入排序优…...

【无重复字符的最长子串】

一、题目 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串的长度。示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。示例 2: 输入: s "bbbbb" 输出: 1 解释: …...

Vue3+Element Plus的表格分页实战

Element Plus 是一个基于 Vue 3 的现代化 UI 组件库,旨在帮助开发者快速构建美观且功能丰富的 Web 应用程序。它提供了大量的 UI 组件,如按钮、表单、表格、弹出框、标签页、树形控件等,涵盖了 Web 应用开发中常见的大多数场景。本文通过一个实例来说明vue3+elementplus查询…...

vue项目搭建规范

项目搭建规范 一. 代码规范1.1. 集成editorconfig配置1.2. 使用prettier工具1.3. 使用ESLint检测1.4. git Husky和eslint1.5. git commit规范1.5.1. 代码提交风格1.5.2. 代码提交验证 二. 第三方库集成2.1. vue.config.js配置2.2. vue-router集成2.3. vuex集成2.4. element-plu…...

Mac iTerm2集成DeepSeek AI

1. 去deepseek官网申请api key&#xff0c;DeepSeek 2. 安装iTerm2 AI Plugin插件&#xff0c;https://iterm2.com/ai-plugin.html&#xff0c;插件解压后直接放到和iTerms相同的位置&#xff0c;默认就在/Applications 下 3. 配置iTerm2 4. 重启iTerm2,使用快捷键呼出AI对话…...

检索增强生成(RAG)

检索增强生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;是一种结合了检索机制和生成模型的先进技术&#xff0c;旨在提高自然语言处理系统的准确性和上下文相关性。本文将详细介绍如何从零开始构建一个RAG系统&#xff0c;包括数据处理、检索、生成以及部署…...

【第二部分--Python之基础】03 容器类型的数据

Python内置的数据类型如序列&#xff08;列表、元组等&#xff09;、集合和字典等可以容纳多项数据&#xff0c;我们称它们为容器类型的数据。 序列 序列&#xff08;sequence&#xff09;是一种可迭代的、元素有序的容器类型的数据。 序列包括列表&#xff08;list&#xff…...

【人工智能机器学习基础篇】——深入详解深度学习之复杂网络结构:卷积神经网络(CNN)、循环神经网络(RNN)、生成对抗网络(GAN)等概念及原理

深入详解深度学习之复杂网络结构&#xff1a;卷积神经网络&#xff08;CNN&#xff09;、循环神经网络&#xff08;RNN&#xff09;、生成对抗网络&#xff08;GAN&#xff09; 深度学习作为人工智能的重要分支&#xff0c;通过复杂的网络结构实现对数据的高级抽象和理解。本文…...

MySQL 入门教程

MySQL是最流行的关系型数据库管理系统&#xff0c;在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System&#xff1a;关系数据库管理系统)应用软件之一。 在本教程中&#xff0c;会让大家快速掌握MySQL的基本知识&#xff0c;并轻松使用MySQL数据库。 什么…...