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

潍坊网站建设尚荣百度seo排名查询

潍坊网站建设尚荣,百度seo排名查询,静态网站安全性,微信应用开发平台BLE链接过程分析见【Bluedroid】BLE连接过程详解-CSDN博客,本篇主要围绕HCI_LE_Create_Connection展开。基于Android14源码进行分析。在蓝牙低功耗技术中,设备之间建立连接是进行数据传输等操作的前提。HCI LE Extended Create Connection Command 提供了一种更灵活、功能更丰…

BLE链接过程分析见【Bluedroid】BLE连接过程详解-CSDN博客,本篇主要围绕HCI_LE_Create_Connection展开。基于Android14源码进行分析。在蓝牙低功耗技术中,设备之间建立连接是进行数据传输等操作的前提。HCI LE Extended Create Connection Command 提供了一种更灵活、功能更丰富的方式来创建连接,相比传统的连接创建命令,它能支持更多的参数配置和功能特性,以满足不同应用场景下的连接需求。

一、创建连接指令下发(HCI_LE_Create_Connection)过程

  • 主设备发起:主设备发送 HCI LE Extended Create Connection Command 命令,其中包含了指定的连接参数等信息,如连接间隔和连接延迟等。
  • 从设备响应:从设备接收到命令后,会根据自身的能力和配置来决定是否接受连接。如果从设备支持主设备所请求的连接参数,并且当前资源允许,它会发送一个响应消息,表示接受连接请求。
  • 连接建立:双方根据协商好的连接参数开始建立连接,按照设定的连接间隔进行数据交互等操作,从设备会根据连接延迟参数来控制自身的休眠和唤醒时间,以实现节能和数据传输的平衡。

二、源码分析

BTM_AcceptlistAdd

从BTM_AcceptlistAdd开始分析:

/packages/modules/Bluetooth/system/stack/btm/btm_ble_bgconn.cc
bool BTM_AcceptlistAdd(const RawAddress& address) {return BTM_AcceptlistAdd(address, false);
}bool BTM_AcceptlistAdd(const RawAddress& address, bool is_direct) {if (!controller_get_interface()->SupportsBle()) {log::warn("Controller does not support Le");return false;}return bluetooth::shim::ACL_AcceptLeConnectionFrom(BTM_Sec_GetAddressWithType(address), is_direct);
}

BTM_AcceptlistAdd将对端地址添加到BLE连接列表中。由于BLE连接的建立是异步的,因此即使这个函数返回了 true,也并不意味着连接已经成功建立,而只是表示连接请求已经被接受并开始处理。

另外,is_direct 参数可能用于指示连接请求是否是通过某种直接方式(如通过已知的设备地址发起连接)发出的。

bluetooth::shim::ACL_AcceptLeConnectionFrom

/packages/modules/Bluetooth/system/main/shim/acl_api.cc
bool bluetooth::shim::ACL_AcceptLeConnectionFrom(const tBLE_BD_ADDR& legacy_address_with_type, bool is_direct) {std::promise<bool> promise;  // 用于异步操作的对象// 调用promise.get_future()获取与promise关联的future对象。future用于在异步操作完成后获取结果值auto future = promise.get_future();// 调用 AcceptLeConnectionFrom 方法Stack::GetInstance()->GetAcl()->AcceptLeConnectionFrom(ToAddressWithTypeFromLegacy(legacy_address_with_type), is_direct,std::move(promise));//调用future.get()等待异步操作完成并获取结果。future.get()会阻塞当前线程,直到异步操作完成并设置了结果值return future.get();}

接受来自特定蓝牙低功耗(BLE)设备的连接请求。它使用 std::promise 和 std::future 实现了异步操作的同步等待,确保在接受连接请求的操作完成后,返回操作结果(是否成功接受连接)。

  • 注意:由于BLE连接的建立是一个异步过程,即使这个函数返回true,也不意味着连接已经成功建立。只是表示连接请求已经被接受,并且连接建立过程已经开始。

shim::legacy::Acl::AcceptLeConnectionFrom

/packages/modules/Bluetooth/system/main/shim/acl.cc
void shim::legacy::Acl::AcceptLeConnectionFrom(const hci::AddressWithType& address_with_type, bool is_direct,std::promise<bool> promise) {LOG_DEBUG("AcceptLeConnectionFrom %s",ADDRESS_TO_LOGGABLE_CSTR(address_with_type.GetAddress()));handler_->CallOn(pimpl_.get(), &Acl::impl::accept_le_connection_from,address_with_type, is_direct, std::move(promise));
}

将实际的处理逻辑委托给 Acl::impl 类的 accept_le_connection_from 方法,并使用 handler_ 来确保操作在合适的线程或上下文环境中执行。

  • pimpl_.get():使用了指向 Acl::impl 实现的智能指针,并通过 get() 方法获取原始指针。这是一种实现隐藏(Pimpl Idiom)的常见方式,用于在接口和实现之间提供清晰的分离。

  • &Acl::impl::accept_le_connection_from:指向 Acl::impl 类中 accept_le_connection_from 成员函数的指针。

  • address_with_type, is_direct, std::move(promise):这些是传递给 accept_le_connection_from 函数的参数。注意,promise 参数被 std::move 了,意味着它的所有权被转移给了 CallOn 方法。

关于 std::promise<bool> 的使用:

std::promise<bool> 被用作异步操作的结果传递机制。当 accept_le_connection_from 函数完成其工作时,它应该调用 promise.set_value(some_bool_value) 来设置结果,其中 some_bool_value 表示操作的成功或失败。然后,任何持有与 promise 相关联的 std::future<bool> 的代码都可以调用 future.get() 来等待结果并获取它。

http://www.dtcms.com/wzjs/120490.html

相关文章:

  • 如何进行网站的seo优化教程网下载
  • 自己怎么建网站关键词优化如何
  • 做网站的为什么那么多骗子网络营销与管理
  • 上海设计公司名称大全武汉网站seo德升
  • 深圳市手机网站建设哪家好网络运营商
  • 南昌哪里学做网站aso优化服务站
  • 网站搭建准备重庆seo结算
  • 网站优化文章怎么做搜索引擎推广简称
  • 百度网站源码优化检测国家重大新闻
  • 云南网站建设快速优化郑州seo排名优化公司
  • 视频网站开发难点seo服务公司招聘
  • 做类似58类型网站人民网舆情数据中心官网
  • 科技公司网站模版百度推广费用怎么算
  • 做网站需要的素材资料郑州疫情最新情况
  • 把自己做的网站传到网上微信公众号的推广
  • 政府门户网站的重要性百度推广联盟
  • 哪个网站系统做的好巩义网络推广公司
  • 淘宝上做网站 源代码怎么给你seo网络培训学校
  • 郑州网站制作-中国互联怎么创建网站的快捷方式
  • 做伊瑞尔竞技场的网站2022最近热点事件及评述
  • app设计模板网站免费的网络推广平台
  • 做泵阀生意到哪个网站惠州seo全网营销
  • 个人网站用什么域名好营销平台有哪些
  • 非凡网站建设 新三板网址外链平台
  • 电脑QQ浮动窗口怎做电脑网站seo自学网站
  • 做海报网站推广普通话手抄报简单又好看内容
  • 自己有网站怎么推广西安seo网站建设
  • 长沙精品网站制作百度地址
  • 直播网站开发多少钱银川seo优化
  • 网站文件大小怎样建立自己网站