【android bluetooth 协议分析 01】【HCI 层介绍 5】【SetEventMask命令介绍】
1. HCI_Set_Event_Mask 命令作用
项目 | 内容 |
---|---|
命令名 | HCI_Set_Event_Mask |
OCF | 0x0001 |
作用 | 主机通过设置 Event Mask 告诉控制器:我只对某些事件感兴趣,屏蔽其他事件,以减少中断。 |
事件来源 | 事件是 HCI 与主机之间通信的反馈机制,控制器通过这些事件通知主机状态变化等信息。 |
关键点 | 设置位为 1 → 启用该事件;设置位为 0 → 屏蔽该事件。 控制器不支持的事件/保留位 → 自动忽略。 |
5 2025-04-24 15:55:53.350452 host controller HCI_CMD 12 Sent Set Event MaskBluetooth HCI Command - Set Event MaskCommand Opcode: Set Event Mask (0x0c01)0000 11.. .... .... = Opcode Group Field: Host Controller & Baseband Commands (0x03).... ..00 0000 0001 = Opcode Command Field: Set Event Mask (0x001)Parameter Total Length: 8.... ...1 = Inquiry Complete: true (0x1).... ..1. = Inquiry Result: true (0x1).... .1.. = Connect Complete: true (0x1).... 1... = Connect Request: true (0x1)...1 .... = Disconnect Complete: true (0x1)..1. .... = Auth Complete: true (0x1).1.. .... = Remote Name Req Complete: true (0x1)1... .... = Encrypt Change: true (0x1).... ...1 = Change Connection Link Key Complete: true (0x1).... ..1. = Master Link Key Complete: true (0x1).... .1.. = Read Remote Supported Features: true (0x1).... 1... = Read Remote Ver Info Complete: true (0x1)...1 .... = QoS Setup Complete: true (0x1)1... .... = Hardware Error: true (0x1).... ...1 = Flush Occurred: true (0x1).... ..1. = Role Change: true (0x1).... 1... = Mode Change: true (0x1)...1 .... = Return Link Keys: true (0x1)..1. .... = PIN Code Request: true (0x1).1.. .... = Link Key Request: true (0x1)1... .... = Link Key Notification: true (0x1).... ...1 = Loopback Command: true (0x1).... ..1. = Data Buffer Overflow: true (0x1).... .1.. = Max Slots Change: true (0x1).... 1... = Read Clock Offset Complete: true (0x1)...1 .... = Connection Packet Type Changed: true (0x1)..1. .... = QoS Violation: true (0x1).1.. .... = Page Scan Mode Change: true (0x1)1... .... = Page Scan Repetition Mode Change: true (0x1).... ...1 = Flow Specification Complete: true (0x1).... ..1. = Inquiry Result With RSSI: true (0x1).... .1.. = Read Remote Ext. Features Complete: true (0x1).... 1... = Synchronous Connection Complete: true (0x1)...1 .... = Synchronous Connection Changed: true (0x1)..1. .... = Sniff Subrate: true (0x1).1.. .... = Extended Inquiry Result: true (0x1)1... .... = Encryption Key Refresh Complete: true (0x1).... ...1 = IO Capability Request: true (0x1).... ..1. = IO Capability Response: true (0x1).... .1.. = User Confirmation Request: true (0x1).... 1... = User Passkey Request: true (0x1)...1 .... = Remote OOB Data Request: true (0x1)..1. .... = Simple Pairing Complete: true (0x1)1... .... = Link Supervision Timeout Changed: true (0x1).... ...1 = Enhanced Flush Complete: true (0x1).... .1.. = User Passkey Notification: true (0x1).... 1... = Keypress Notification: true (0x1)[Response in frame: 6][Command-Response Delta: 0.756ms]
2. BLE 支持相关说明
在 Event_Mask
的第 61 位(即第 8 字节的第 5 位)是一个关键:
位 | 名称 | 说明 |
---|---|---|
61 | LE Meta Event | 启用所有 BLE 相关事件(0x3E),必须设置为 1,否则即使你用 HCI_LE_Set_Event_Mask 配置了子事件也没用。 |
3. Event_Mask 各位的详细含义(按位表格)
Event_Mask 是一个 **8 字节(64 位)的位掩码,每个 bit 控制一个事件类型。如下是规范中定义的位:
Bit | 事件名称 | 说明 / 功能描述 | 典型使用场景 |
---|---|---|---|
0 | Inquiry Complete | 查询流程完成 | 蓝牙设备搜索结束通知主机 |
1 | Inquiry Result | 查询结果到达 | 返回找到的设备信息列表 |
2 | Connection Complete | 连接建立完成 | 用于通知主机连接建立成功或失败 |
3 | Connection Request | 收到连接请求 | 从设备请求连接时主机收到通知 |
4 | Disconnection Complete | 断开连接完成 | 链路断开后通知主机 |
5 | Authentication Complete | 认证完成 | 完成配对认证流程 |
6 | Remote Name Request Complete | 远程设备名称请求完成 | 请求远程设备名称后返回结果 |
7 | Encryption Change | 加密状态变化 | 链路加密启用/禁用时通知主机 |
8 | Change Connection Link Key Complete | 更改连接密钥完成 | 更换加密密钥后通知主机 |
9 | Link Key Type Changed | 连接密钥类型改变 | 使用新密钥类型时通知主机 |
10 | Read Remote Supported Features Complete | 读取远程设备支持特性完成 | 蓝牙能力协商完成 |
11 | Read Remote Version Information Complete | 读取远程版本信息完成 | 获取设备蓝牙协议栈版本等信息 |
12 | QoS Setup Complete | QoS配置完成 | 设置服务质量后通知 |
15 | Hardware Error | 硬件错误 | 控制器发生严重错误 |
16 | Flush Occurred | 数据被 flush(清除) | 数据包被主动丢弃 |
17 | Role Change | 主/从角色切换完成 | 比如从 peripheral 变为 central |
19 | Mode Change | 工作模式切换完成 | 如 sniff 模式进入/退出 |
20 | Return Link Keys | 返回本地已保存的配对密钥 | 快速重连旧设备 |
21 | PIN Code Request | 请求 PIN 码 | 传统配对方式 |
22 | Link Key Request | 请求配对密钥 | 用于重连时安全验证 |
23 | Link Key Notification | 通知新密钥已生成 | 用于主机存储该密钥 |
24 | Loopback Command | 回环命令完成 | 测试链路时使用 |
25 | Data Buffer Overflow | 数据缓冲区溢出 | 数据发送过快时通知主机 |
26 | Max Slots Change | 最大时隙数变化 | 动态调整带宽时通知 |
27 | Read Clock Offset Complete | 读取时钟偏移完成 | 用于同步 |
28 | Connection Packet Type Changed | 链路包类型更改 | 切换数据包传输类型 |
29 | QoS Violation | QoS 违例 | 控制器未满足QoS需求 |
30 | Previously used (忽略) | 已废弃或保留位 | 无需使用 |
31 | Page Scan Repetition Mode Change | 页面扫描重复模式变化 | 页面扫描配置更新时通知主机 |
32 | Flow Specification Complete | 数据流规格设置完成 | 高级 QoS 控制场景 |
33 | Inquiry Result with RSSI | 查询结果包含 RSSI 值 | 精细设备选择,如距离靠近优先连接 |
34 | Read Remote Extended Features Complete | 读取远程扩展特性完成 | 了解对端是否支持 SSP、Secure Conn 等 |
43 | Synchronous Connection Complete | 同步连接建立完成(如 SCO/eSCO) | 通话或音频传输 |
44 | Synchronous Connection Changed | 同步连接参数改变 | 音频流参数调整 |
45 | Sniff Subrating | Sniff 子速率事件 | 低功耗优化场景 |
46 | Extended Inquiry Result | 扩展查询结果(含设备类别、名称等) | 提供更丰富的设备信息 |
47 | Encryption Key Refresh Complete | 加密密钥刷新完成 | LE 安全连接或 BR/EDR 密钥刷新后 |
48 | IO Capability Request | 请求设备输入输出能力(SSP配对过程) | 用户确认配对过程 |
49 | IO Capability Response | 返回对端 IO 能力 | SSP 安全确认 |
50 | User Confirmation Request | 请求用户确认配对 | 显示“是否配对此设备” |
51 | User Passkey Request | 请求用户输入配对码 | 键盘输入型配对 |
52 | Remote OOB Data Request | 请求 Out-of-Band 数据 | NFC 等配对方式 |
53 | Simple Pairing Complete | 简单配对完成(SSP) | 通知主机配对是否成功 |
55 | Link Supervision Timeout Changed | 链路监督超时时间改变 | 控制器断链检测参数更新 |
56 | Enhanced Flush Complete | 完成增强型 flush | 高优先级清除数据缓冲 |
58 | User Passkey Notification | 通知用户对方输入的配对码 | 显示数字以供用户核对 |
59 | Keypress Notification | 对方输入配对码状态(正在输入、删除等) | 增强用户体验 |
60 | Remote Host Supported Features Notification | 通知主机远程设备支持的特性 | 功能协商 |
61 | LE Meta Event | 开启所有 LE(低功耗蓝牙)相关事件 | BLE 通信必要事件掩码 |
注意:
默认值 是 bit 0~44 设为 1(值为
0x00001FFFFFFFFFFF
),表示支持经典蓝牙核心事件。若想启用 BLE,必须额外设置 bit 61 为 1。
4. 典型使用流程(含 BLE)
一个 BLE 主机设备通常在初始化时使用以下 HCI 命令序列:
HCI_Reset
HCI_Write_LE_Host_Support (0x01)
声明主机支持 BLEHCI_Set_Event_Mask
使能 bit 61(LE Meta Event)HCI_LE_Set_Event_Mask
控制哪些 BLE 子事件开启(如连接、广播报告等)
5. aosp 示例代码片段
static constexpr uint64_t kDefaultEventMask = 0x3dbfffffffffffff;static constexpr uint64_t kDefaultLeEventMask = 0x000000004d02fe7f;// system/gd/hci/controller.ccstruct Controller::impl {void Start(hci::HciLayer* hci) {
...le_set_event_mask(kDefaultLeEventMask);set_event_mask(kDefaultEventMask);write_le_host_support(Enable::ENABLED, Enable::DISABLED);...
}void set_event_mask(uint64_t event_mask) {std::unique_ptr<SetEventMaskBuilder> packet = SetEventMaskBuilder::Create(event_mask);hci_->EnqueueCommand(std::move(packet), module_.GetHandler()->BindOnceOn(this, &Controller::impl::check_status<SetEventMaskCompleteView>));}
- 在初始化 Controller 模块时, 在 Controller::impl::Start 函数中就会调用 set_event_mask 函数去设置
- 这里设置的 mask 为 0x3dbfffffffffffff
- 这里默认 [61] 位是设置了 1: 表示支持 ble
6. 注意事项
问题 | 描述 |
---|---|
未设置 bit 61 | 控制器不会发送任何 BLE 相关事件(0x3E),即使设置了 LE_Set_Event_Mask |
只设置 LE_Set_Event_Mask 而无 HCI_Set_Event_Mask | 无效,BLE 子事件不会触发 |
设置未知/保留位 | 控制器自动忽略,不会报错 |
7. 总结
关键点 | 内容 |
---|---|
命令名称 | HCI_Set_Event_Mask (0x0001) |
参数长度 | 8 字节(每一位控制一个事件) |
BLE 启用关键位 | 第 61 位(LE Meta Event)必须设置为 1 |
与 LE_Set_Event_Mask 关系 | 前者启用 BLE 总事件,后者启用子事件 |
默认值 | 仅经典蓝牙事件被启用(bit 0~44) |
相关文章:
【android bluetooth 协议分析 01】【HCI 层介绍 5】【SetEventMask命令介绍】
1. HCI_Set_Event_Mask 命令作用 项目内容命令名HCI_Set_Event_MaskOCF0x0001作用主机通过设置 Event Mask 告诉控制器:我只对某些事件感兴趣,屏蔽其他事件,以减少中断。事件来源事件是 HCI 与主机之间通信的反馈机制,控制器通过…...
python打卡day29
类的装饰器 知识点回顾 类的装饰器装饰器思想的进一步理解:外部修改、动态类方法的定义:内部定义和外部定义 回顾一下,函数的装饰器是 :接收一个函数,返回一个修改后的函数。类也有修饰器,类装饰器本质上确…...
【数据结构】树状数组
树状数组 假设一个数可以 x x x可以被二进制分解成 x 2 i 1 2 i 2 . . . 2 i m x 2^{i_1} 2^{i_2} ... 2^{i_m} x2i12i2...2im,不妨设 i 1 > i 2 > . . . > i m i_1 > i_2 > ... > i_m i1>i2>...>im,进…...
Java虚拟机 - JVM与Java体系结构
Java虚拟机 JVM与Java体系结构为什么要学习JVMJava与JVM简介Java 语言的核心特性JVM:Java 生态的基石JVM的架构模型基于栈的指令集架构(Stack-Based)基于寄存器的指令集架构(Register-Based)JVM生命周期 总结 JVM与Jav…...
翻译:20250518
翻译题 文章目录 翻译题一带一路中国结 一带一路 The “One Belt and One Road” Initiative aims to achieve win-win and shared development. China remains unchanged in its commitment to foster partnerships. China pursues an independent foreign policy of peace, …...
SparkSQL基本操作
以下是 Spark SQL 的基本操作总结,涵盖数据读取、转换、查询、写入等核心功能: 一、初始化 SparkSession scala import org.apache.spark.sql.SparkSession val spark SparkSession.builder() .appName("Spark SQL Demo") .master("…...
Ansible模块——文件内容修改
修改文件单行内容 ansible.builtin.lineinfile 可以按行修改文件内容,一次修改一行,支持正则表达式。 选项名 类型 默认值 描述 attributesstrnull 设置目标文件的 Linux 文件系统属性(attribute bits),作用类似于…...
基于单片机路灯自动控制仪仿真设计
标题:基于单片机路灯自动控制仪仿真设计 内容:1.摘要 本设计旨在解决传统路灯控制方式效率低、能耗大的问题,开展了基于单片机的路灯自动控制仪仿真设计。采用单片机作为核心控制单元,结合光照传感器、时钟模块等硬件,运用相关软件进行编程和…...
Spring Web MVC————入门(3)
今天我们来一个大练习,我们要实现一个登录界面,登录进去了先获取到登录人信息,可以选择计算器和留言板两个功能,另外我们是学后端的,对于前端我们会些基础的就行了,知道ajax怎么用,知道怎么关联…...
拓展运算符与数组解构赋值的区别
拓展运算符与数组解构赋值是ES6中用于处理数组的两种不同的特性,它们有以下区别: 概念与作用 • 拓展运算符:主要用于将数组展开成一系列独立的元素,或者将多个数组合并为一个数组,以及在函数调用时将数组作为可变参…...
【Linux】第二十章 管理基本存储
目录 1. 对 Linux 磁盘进行分区时有哪两种方案?分别加以详细说明。 2. 简单说下创建MBR磁盘分区涉及哪几个步骤? 3. 创建GPT分区与创建MBR分区有什么不同? 4. 在创建分区时就会在分区上创建文件系统吗? 5. 如何持久挂载文件系…...
DeepSeek本地部署全攻略:从零搭建到Web可视化及数据训练
目录 1. 环境准备与硬件要求2. 安装Ollama框架3. 部署DeepSeek模型4. Web可视化配置5. 数据投喂与模型训练6. 进阶技巧与常见问题1. 环境准备与硬件要求 硬件配置建议 基础配置:16GB内存 + RTX 3060显卡(流畅运行7B参数模型)进阶配置:32GB内存 + RTX 4090显卡(支持14B模型…...
JavaScript性能优化实战(12):大型应用性能优化实战案例
在前面的系列文章中,我们探讨了各种JavaScript性能优化技术和策略。本篇将聚焦于实际的大型应用场景,通过真实案例展示如何综合运用这些技术,解决复杂应用中的性能挑战。 目录 电商平台首屏加载优化全流程复杂数据可视化应用性能优化案例在线协作工具的实时响应优化移动端W…...
前缀和——中心数组下标
此题我们不应局限于前缀和的模板,因为该中心下标把数组分为两个部分且每个部分都要求和,我们就一个再创建一个”后缀和” 定义两个数组f,g。f[i]表示[0,i-1]所有元素的和 f[i]f[i-1]nums[i-1];g[i]表示[i1,n-1]的和 g[i]g[i1]nums[i1];因为依…...
Java——创建多线程的四种方式
一、继承Thread 步骤 1.定义一个类继承Thread 2.重写run方法,在方法中设置线程任务(此线程具体执行的代码) 3.创建自定义线程类对象 4.调用Thread中的start方法,开启线程,jvm自动调用run方法 常用方法 void sta…...
广域网学习
PPPoE技术(拨号上网) PPPoE ( PPP over Ethernet ,以太网承载 PPP 协议)是一种把 PPP 帧封装到以太网帧中的链路层协议。 PPPoE 可以使以太网网络中的多台主机连接到远端的宽带接入服务器。 应用场景 PPPoE 组网结构采…...
inverse-design-of-grating-coupler-3d
一、设计和优化3D光栅耦合器 1.1 代码讲解 通过预定义的环形间距参数(distances数组),在FDTD中生成椭圆光栅结构,并通过用户交互确认几何正确性后,可进一步执行参数扫描优化。 # os:用于操作系统相关功能(如文件路径操作) import os import sys# lumapi:Lumerical 的…...
渗透测试流程-中篇
#作者:允砸儿 #日期:乙巳青蛇年 四月廿一(2025年5月18日) 今天笔者带大家继续学习,网安的知识比较杂且知识面很广,这一部分会介绍很多需要使用的工具。会用各种工具是做网安的基础,ok咱们继续…...
2026武汉门窗门业移门木门铝艺门智能锁展会3月国博举办
展出面积:60000㎡ 观众:80000人次 参展企业:800 专业活动:20 2026武汉门窗门业移门木门铝艺门智能锁展会3月国博举办 2026第二届中国武汉整装定制家居暨门窗装饰材料博览会/2026武汉建博会 时间:2026年3月20-22日 …...
如何用mockito+junit测试代码
Mockito 是一个流行的 Java 模拟测试框架,用于创建和管理测试中的模拟对象(mock objects)。它可以帮助开发者编写干净、可维护的单元测试,特别是在需要隔离被测组件与其他依赖项时。 目录 核心概念 1. 模拟对象(Mock Objects) 2. 打桩(Stubbing) 3. 验…...
31、魔法生物图鉴——React 19 Web Workers
一、守护神协议(核心原理) 1. 灵魂分裂术(线程架构) // 主组件中初始化Workerconst workerRef useRef(null);useEffect(() > {workerRef.current new Worker(new URL(./creatureWorker.js, import.meta.url));workerRef.…...
洛谷题目:P4052 [JSOI2007] 文本生成器 题解 本题(极难)
个人介绍: 题目传送门: P4052 [JSOI2007] 文本生成器 - 洛谷 (luogu.com.cn) 前言: 这道题要求计算长度为 m 的文章中,至少包含一个给定单词的可读文章的数量,并且结果需要对 10007 取模。下面是小亦为大家逐步分析解题思路: 题目整体思路: 为了方便计算…...
【Linux】命令行参数和环境变量
目录 一、命令行参数 二、环境变量 (一)PATH (二)查看环境变量 (三)获取环境环境变量 (四)为什么要环境变量 (五)环境变量特点总结 (1&am…...
AGI大模型(23):LangChain框架快速入门之LangChain介绍
1 什么是LangChain? LangChain是一个基于大语言模型用于构建端到端语言模型应用的框架,它提供了一系列工具、套件和接口,让开发者使用语言模型来实现各种复杂的任务,如文本到图像的生成、文档问答、聊天机器人等。 官网地址:https://python.langchain.com/docs/introduc…...
vmware虚拟机运行多个产生卡顿问题
最近在工作中使用电脑运行两个虚拟机,用来测试程序。运行的时候发现电脑会非常卡顿。导致调试工作进行到一半就会闪退卡死。 首先尝试的解决方案是开一个虚拟机,然后在windows上部署测试程序,后面发现操作很受限制。然后使用windows管…...
八股碎碎念01——HashMap原理
Java面试题周总结 HashMap HashMap实现原理 Java 1.7版本 在Java1.7中HashMap通过数组链表的方式实现,由于链表查询速度为O(n),因此在插入大量元素后查询速度会明显降低。 Java 1.8版本 在Java1.8中对HashMap进行改进,采用数组链表/红黑…...
长篇小说《白鹿原》原著版本在当当网可购到
著名作家陈忠实所真实描写上世纪1959年、1960年、1961年我国三年饥荒时人吃人的长篇小说《白鹿原》原著版本,现能在当当网上购到,价格仅26元。特此推荐。 笔者是从那段不堪回首的饥饿历史中幸存下来的过来人,也是在改革开放初期的文艺复兴年代…...
ColorAid —— 一个面向设计师的色盲模拟工具开发记
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 起因:CodeBuddy,说干就干 起初只是一个随口的想法——我想做一个“色盲辅助工具”&…...
对称加密与非对称加密在 JWT 中的应用详解
文章目录 对称加密与非对称加密在 JWT 中的应用详解引言对称加密与非对称加密概述对称加密(Symmetric Encryption)非对称加密(Asymmetric Encryption) 对称加密生成和验证 JWT 的过程生成 JWT(HS256 示例)验…...
Python 中 if 和 else 基础知识的详解和使用
一、基本语法结构 if 条件1:# 条件1 为真时执行的代码块 elif 条件2:# 条件1 不成立,条件2 成立时执行 else:# 所有条件都不成立时执行注意: elif 是“else if”的缩写,可以有多个;else 可省略;条件表达式必须是可以…...
学习黑客Active Directory 入门指南(三)
Active Directory 入门指南(三):关键服务、用户与组管理 🤝💻 大家好!欢迎来到 “Active Directory 入门指南” 系列的第三篇。在前两篇中,我们已经了解了AD的基本概念、逻辑结构(对…...
10.9 LangChain LCEL革命:43%性能提升+声明式语法,AI开发效率飙升实战指南
LangChain 表达式语言(LCEL)架构解析:新一代链式编排引擎 关键词:LangChain Expression Language, Runnable 协议, 链式编排, 并行处理, 生产级应用开发 1. LCEL 设计理念与技术突破 LangChain Expression Language(LCEL)是 LangChain v0.3 的核心革命性升级,重新定义…...
一文读懂-嵌入式Ubuntu平台
现在直接在一些嵌入式Soc上移植ubuntu来用到产品上,刚开始感觉还挺臃肿的,后来细聊了下感觉还是有一定的优势。 ubuntu相信大家在熟悉不过了,几乎无处不在,小到咖啡机,大到火星车,为什么ubuntu如此广泛&am…...
centos7.9扩展已有分区空间
新增50G硬盘 分区 fdisk /dev/sdb Command (m for help): p #打印分区表Disk /dev/sdb: 53.7 GB, 53687091200 bytes, 104857600 sectors Units sectors of 1 * 512 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 byte…...
ubuntu22.04搭建ROS2环境
在 Ubuntu 22.04 上安装 ROS 2(Humble Hawksbill)时,针对国内网络问题,建议使用镜像源加速。以下是分步指南: 1. 更换 Ubuntu 系统源(使用清华镜像) sudo sed -i "shttp://.*archive.ubunt…...
java中sleep()和wait()暂停线程的区别
1. Thread.sleep() 所属类:它是Thread类的静态方法。作用:让当前正在执行的线程暂停指定的时间,在暂停期间,线程会一直持有对象锁(也就是synchronized锁)。中断响应:当线程处于sleep()状态时&a…...
printf函数参数与入栈顺序
01. printf()的核心功能 作用:将 格式化数据 输出到 标准输出(stdout),支持多种数据类型和格式控制。 int printf(const char *format, ...);参数: format:格式字符串,字符串或%开头格式符...:…...
代码案例分析
以下是一个使用线性回归进行简单房价预测的机器学习代码案例分析: 代码示例 import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split # 生成一些示例数据…...
Baklib赋能企业知识资产AI化升级
AI驱动知识管理革新 在数字化转型浪潮中,企业知识管理的范式正经历AI技术的深度重构。传统知识库受限于静态存储与人工维护,而Baklib通过构建知识中台架构,将多模态数据处理与语义理解引擎深度融合,实现知识资产的动态聚合与智能…...
Leetcode 3552. Grid Teleportation Traversal
Leetcode 3552. Grid Teleportation Traversal 1. 解题思路2. 代码实现 题目链接:3552. Grid Teleportation Traversal 1. 解题思路 这一题的话核心就是一个广度优先遍历,我们只需要从原点开始,一点点考察其所能到达的位置,直至…...
【Bluedroid】蓝牙HID DEVICE 报告发送与电源管理源码解析
本文基于Android蓝牙协议栈代码,深度解析HID设备(如键盘、鼠标)从应用层发送输入报告到主机设备的完整流程,涵盖数据封装、通道选择、L2CAP传输、电源管理四大核心模块。通过函数调用链(send_report → BTA_HdSendRepo…...
day15-进程管理
1. 概述 运行起来的软件就是进程,在内存中运行守护进程/服务:一直运行的进程 2. 僵尸进程 2.1. 僵尸进程zombie 当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸…...
抖音视频下载工具 v1.1 自用分享
用免费的公益接口用AI写了个简单的抖音视频下载工具,自用的,不支持批量下载 内置两套API,解析失败会自动切换,支持视频预览播放,视频截图等操作 使用方法也很简单: 软件打开后会监听粘贴板,当检…...
46、什么是Windows服务,它的⽣命周期与标准的EXE程序有什么不同?
Windows服务是一种在Windows操作系统后台运行的特殊应用程序,与标准的EXE程序相比,其生命周期在启动方式、运行持续性、用户交互、运行账户、管理方式、进程状态及开发要求等方面存在显著差异。以下是对Windows服务及其与标准EXE程序生命周期差异的详细分…...
用 UniApp 构建习惯打卡 App —— HabitLoop 开发记
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 当我脑海中突然冒出一个念头:“做一个自己能每天打卡的习惯 App 吧”,我立刻打开了 Cod…...
NB-IoT技术深度解析:部署模式与节能机制全指南
知识点1【NB-IoT的介绍】 NB-IoT 是指Narrow Band Internet of Things,聚集于低功耗窄带宽广域物联网。 1、License介绍 “有牌照”(license)频谱,指的是政府或者监管机构通过拍卖,划拨等方式,授予给各个…...
Vue百日学习计划Day28-32天详细计划-Gemini版
总目标: 在 Day 28-32 深入理解 Vue 3 的响应式机制,熟练掌握 Composition API 中的 setup, ref, reactive, toRefs, readonly, computed, watch, watchEffect 等核心 API 的使用。 所需资源: Vue 3 官方文档 (组合式 API): https://cn.vuejs.org/guide/introducti…...
Leetcode134加油站
题目链接 134 题意图解: 题目给了n个节点,这些节点呈现环状,每次到一个低点要消耗cost[i]的油量。 从中我们可以得出一个结论:看一个点能不能到下一个点,就要用当前的油量减去消耗的量,那么gas[i] - cost…...
用算术右移实现逻辑右移及用逻辑右移实现算术右移
函数srl()用算术右移实现逻辑右移,函数sra()用逻辑右移实现算术右移。 程序代码 int sra(int x,int k); unsigned int srl(unsigned int x, int k);void main() {int rx1,k,x1;unsigned int rx2,x2;k3;x10x8777;x20x8777;rx1sra(x1, k);rx2srl(x2, k);while(1); }…...
箭头函数及其与普通函数区别的详细解释
一、箭头函数的基本特性 语法简洁性 箭头函数使用 > 符号定义,省略 function 关键字,适合快速定义匿名函数或简单表达式。 // 普通函数 function sum(a, b) { return a b; } // 箭头函数 const sum (a, b) > a b;若函数体为单行表达式&#x…...