1. acl_interface_t 介绍

acl_interface_t 结构体及其子结构体,目的是封装处理 Classic、LE、SCO 连接及链路事件的回调函数,用于 HCI 事件与上层蓝牙协议栈的解耦分发

  • system/main/shim/acl_legacy_interface.h
typedef struct {void (*on_connected)(const RawAddress& bda, uint16_t handle,uint8_t enc_mode);void (*on_failed)(const RawAddress& bda, tHCI_STATUS status);void (*on_disconnected)(tHCI_STATUS status, uint16_t handle,tHCI_STATUS reason);
} acl_classic_connection_interface_t;typedef struct {void (*on_connected)(const tBLE_BD_ADDR& address_with_type, uint16_t handle,tHCI_ROLE role, uint16_t conn_interval,uint16_t conn_latency, uint16_t conn_timeout,const RawAddress& local_rpa, const RawAddress& peer_rpa,tBLE_ADDR_TYPE peer_addr_type);void (*on_failed)(const tBLE_BD_ADDR& address_with_type, uint16_t handle,bool enhanced, tHCI_STATUS status);void (*on_disconnected)(tHCI_STATUS status, uint16_t handle,tHCI_STATUS reason);void (*on_iso_disconnected)(uint16_t handle, tHCI_STATUS reason);
} acl_le_connection_interface_t;typedef struct {void (*on_esco_connect_request)(const RawAddress&,const types::ClassOfDevice&);void (*on_sco_connect_request)(const RawAddress&,const types::ClassOfDevice&);void (*on_disconnected)(uint16_t handle, tHCI_REASON reason);
} acl_sco_connection_interface_t;typedef struct {void (*on_authentication_complete)(uint16_t handle, tHCI_STATUS status);void (*on_change_connection_link_key_complete)();void (*on_encryption_change)(bool enabled);void (*on_flow_specification_complete)(uint16_t flow_direction,uint16_t service_type,uint32_t token_rate,uint32_t token_bucket_size,uint32_t peak_bandwidth,uint32_t access_latency);void (*on_flush_occurred)();void (*on_central_link_key_complete)(uint8_t key_flag);void (*on_mode_change)(tHCI_STATUS status, uint16_t handle,tHCI_MODE current_mode, uint16_t interval);void (*on_sniff_subrating)(tHCI_STATUS status, uint16_t handle,uint16_t maximum_transmit_latency,uint16_t maximum_receive_latency,uint16_t minimum_remote_timeout,uint16_t minimum_local_timeout);void (*on_packet_type_changed)(uint16_t packet_type);void (*on_qos_setup_complete)(uint16_t service_type, uint32_t token_rate,uint32_t peak_bandwidth, uint32_t latency,uint32_t delay_variation);void (*on_read_afh_channel_map_complete)(uint8_t afh_mode,uint8_t afh_channel_map[]);void (*on_read_automatic_flush_timeout_complete)(uint16_t flush_timeout);void (*on_read_clock_complete)(uint32_t clock, uint16_t accuracy);void (*on_read_clock_offset_complete)(uint16_t clock_offset);void (*on_read_failed_contact_counter_complete)(uint16_t failed_contact_counter);void (*on_read_link_policy_settings_complete)(uint16_t link_policy_settings);void (*on_read_link_quality_complete)(uint8_t link_quality);void (*on_read_link_supervision_timeout_complete)(uint16_t link_supervision_timeout);void (*on_read_remote_supported_features_complete)(uint16_t handle,uint64_t features);void (*on_read_remote_extended_features_complete)(uint16_t handle,uint8_t current_page_number,uint8_t max_page_number,uint64_t features);void (*on_read_remote_version_information_complete)(tHCI_STATUS status, uint16_t handle, uint8_t lmp_version,uint16_t manufacturer_name, uint16_t sub_version);void (*on_read_rssi_complete)(uint8_t rssi);void (*on_read_transmit_power_level_complete)(uint8_t transmit_power_level);void (*on_role_change)(tHCI_STATUS status, const RawAddress& bd_addr,tHCI_ROLE new_role);void (*on_role_discovery_complete)(tHCI_ROLE current_role);
} acl_classic_link_interface_t;typedef struct {void (*on_connection_update)(tHCI_STATUS status, uint16_t handle,uint16_t connection_interval,uint16_t connection_latency,uint16_t supervision_timeout);void (*on_data_length_change)(uint16_t handle, uint16_t max_tx_octets,uint16_t max_tx_time, uint16_t max_rx_octets,uint16_t max_rx_time);void (*on_read_remote_version_information_complete)(tHCI_STATUS status, uint16_t handle, uint8_t lmp_version,uint16_t manufacturer_name, uint16_t sub_version);void (*on_phy_update)(tGATT_STATUS status, uint16_t handle, uint8_t tx_phy,uint8_t rx_phy);
} acl_le_link_interface_t;typedef struct {acl_classic_connection_interface_t classic;acl_le_connection_interface_t le;acl_sco_connection_interface_t sco;
} acl_connection_interface_t;typedef struct {acl_classic_link_interface_t classic;acl_le_link_interface_t le;
} acl_link_interface_t;typedef struct {void (*on_send_data_upwards)(BT_HDR*);void (*on_packets_completed)(uint16_t handle, uint16_t num_packets);acl_connection_interface_t connection;acl_link_interface_t link;
} acl_interface_t;

2. 总体结构图

acl_interface_t
├── void (*on_send_data_upwards)(BT_HDR*)
├── void (*on_packets_completed)(uint16_t handle, uint16_t num_packets)
├── acl_connection_interface_t connection
│   ├── acl_classic_connection_interface_t classic
│   ├── acl_le_connection_interface_t le
│   └── acl_sco_connection_interface_t sco
└── acl_link_interface_t link├── acl_classic_link_interface_t classic└── acl_le_link_interface_t le

3. 每个结构体及函数指针用途说明

1. acl_interface_t

typedef struct {void (*on_send_data_upwards)(BT_HDR*);void (*on_packets_completed)(uint16_t handle, uint16_t num_packets);acl_connection_interface_t connection;acl_link_interface_t link;
} acl_interface_t;

顶层接口,作为 shim 层对上提供的主入口,包含连接建立和链路管理的分发处理。

  • on_send_data_upwards: 当有 ACL 数据包(BT_HDR)需要上传到上层时调用,例如传递 L2CAP 数据。

  • on_packets_completed: 通知上层,控制器完成多少包的发送(ACL 信道流控机制)。


2. acl_connection_interface_t

处理连接建立/断开的事件(包括 Classic、LE、SCO 三种类型)。

typedef struct {acl_classic_connection_interface_t classic;acl_le_connection_interface_t le;acl_sco_connection_interface_t sco;
} acl_connection_interface_t;

1.acl_classic_connection_interface_t

用于处理 Classic ACL 连接建立/失败/断开等事件。

typedef struct {void (*on_connected)(const RawAddress& bda, uint16_t handle,uint8_t enc_mode);void (*on_failed)(const RawAddress& bda, tHCI_STATUS status);void (*on_disconnected)(tHCI_STATUS status, uint16_t handle,tHCI_STATUS reason);
} acl_classic_connection_interface_t;
函数名使用场景
on_connected控制器报告 BR/EDR(Classic)连接成功时调用。
on_failedClassic 连接失败(如超时、被拒)时调用。
on_disconnectedClassic ACL 断开时调用,带有断开原因。

2.acl_le_connection_interface_t

用于处理 BLE 连接建立/断开等事件。

typedef struct {void (*on_connected)(const tBLE_BD_ADDR& address_with_type, uint16_t handle,tHCI_ROLE role, uint16_t conn_interval,uint16_t conn_latency, uint16_t conn_timeout,const RawAddress& local_rpa, const RawAddress& peer_rpa,tBLE_ADDR_TYPE peer_addr_type);void (*on_failed)(const tBLE_BD_ADDR& address_with_type, uint16_t handle,bool enhanced, tHCI_STATUS status);void (*on_disconnected)(tHCI_STATUS status, uint16_t handle,tHCI_STATUS reason);void (*on_iso_disconnected)(uint16_t handle, tHCI_STATUS reason);
} acl_le_connection_interface_t;
函数名使用场景
on_connectedBLE 连接成功,包括 handle、间隔、latency 等参数。
on_failedBLE 连接失败,包括是否 enhanced 和失败状态。
on_disconnectedBLE ACL 断开时调用。
on_iso_disconnectedLE-ISO(如 CIS/BIS)断开事件。

3.acl_sco_connection_interface_t

用于 SCO/eSCO 音频连接的请求和断开事件处理。

typedef struct {void (*on_esco_connect_request)(const RawAddress&,const types::ClassOfDevice&);void (*on_sco_connect_request)(const RawAddress&,const types::ClassOfDevice&);void (*on_disconnected)(uint16_t handle, tHCI_REASON reason);
} acl_sco_connection_interface_t;
函数名使用场景
on_sco_connect_request对方发起 SCO 音频连接请求。
on_esco_connect_request对方发起 eSCO 音频连接请求。
on_disconnectedSCO 音频通道断开时。

3. acl_link_interface_t

处理已经建立连接后的 链路状态管理与信息读取

typedef struct {acl_classic_link_interface_t classic;acl_le_link_interface_t le;
} acl_link_interface_t;

1.acl_classic_link_interface_t

Classic BR/EDR 的链路层事件处理。

typedef struct {void (*on_authentication_complete)(uint16_t handle, tHCI_STATUS status);void (*on_change_connection_link_key_complete)();void (*on_encryption_change)(bool enabled);void (*on_flow_specification_complete)(uint16_t flow_direction,uint16_t service_type,uint32_t token_rate,uint32_t token_bucket_size,uint32_t peak_bandwidth,uint32_t access_latency);void (*on_flush_occurred)();void (*on_central_link_key_complete)(uint8_t key_flag);void (*on_mode_change)(tHCI_STATUS status, uint16_t handle,tHCI_MODE current_mode, uint16_t interval);void (*on_sniff_subrating)(tHCI_STATUS status, uint16_t handle,uint16_t maximum_transmit_latency,uint16_t maximum_receive_latency,uint16_t minimum_remote_timeout,uint16_t minimum_local_timeout);void (*on_packet_type_changed)(uint16_t packet_type);void (*on_qos_setup_complete)(uint16_t service_type, uint32_t token_rate,uint32_t peak_bandwidth, uint32_t latency,uint32_t delay_variation);void (*on_read_afh_channel_map_complete)(uint8_t afh_mode,uint8_t afh_channel_map[]);void (*on_read_automatic_flush_timeout_complete)(uint16_t flush_timeout);void (*on_read_clock_complete)(uint32_t clock, uint16_t accuracy);void (*on_read_clock_offset_complete)(uint16_t clock_offset);void (*on_read_failed_contact_counter_complete)(uint16_t failed_contact_counter);void (*on_read_link_policy_settings_complete)(uint16_t link_policy_settings);void (*on_read_link_quality_complete)(uint8_t link_quality);void (*on_read_link_supervision_timeout_complete)(uint16_t link_supervision_timeout);void (*on_read_remote_supported_features_complete)(uint16_t handle,uint64_t features);void (*on_read_remote_extended_features_complete)(uint16_t handle,uint8_t current_page_number,uint8_t max_page_number,uint64_t features);void (*on_read_remote_version_information_complete)(tHCI_STATUS status, uint16_t handle, uint8_t lmp_version,uint16_t manufacturer_name, uint16_t sub_version);void (*on_read_rssi_complete)(uint8_t rssi);void (*on_read_transmit_power_level_complete)(uint8_t transmit_power_level);void (*on_role_change)(tHCI_STATUS status, const RawAddress& bd_addr,tHCI_ROLE new_role);void (*on_role_discovery_complete)(tHCI_ROLE current_role);
} acl_classic_link_interface_t;
函数名使用场景
on_authentication_complete认证过程完成时。
on_change_connection_link_key_complete改变连接密钥完成时。
on_encryption_change加密状态改变。
on_flow_specification_completeQoS flow 配置结果。
on_flush_occurred数据 flush 完成通知。
on_mode_changesniff/hold 等模式变更。
on_sniff_subratingSniff 子速率设置结果。
on_read_rssi_completeRSSI 读取完成。
on_read_link_quality_completeLink quality 查询结果。
on_role_change主从角色切换事件。

注:许多函数与 HCI command complete 或 HCI event 对应,例如 HCI_READ_REMOTE_VERSION_INFORMATION, HCI_READ_LINK_QUALITY

2.acl_le_link_interface_t

BLE 链路状态的事件回调。

typedef struct {void (*on_connection_update)(tHCI_STATUS status, uint16_t handle,uint16_t connection_interval,uint16_t connection_latency,uint16_t supervision_timeout);void (*on_data_length_change)(uint16_t handle, uint16_t max_tx_octets,uint16_t max_tx_time, uint16_t max_rx_octets,uint16_t max_rx_time);void (*on_read_remote_version_information_complete)(tHCI_STATUS status, uint16_t handle, uint8_t lmp_version,uint16_t manufacturer_name, uint16_t sub_version);void (*on_phy_update)(tGATT_STATUS status, uint16_t handle, uint8_t tx_phy,uint8_t rx_phy);
} acl_le_link_interface_t;
函数名使用场景
on_connection_update连接参数更新完成。
on_data_length_change数据包最大长度变化(DLE)。
on_read_remote_version_information_complete查询 BLE peer 版本信息。
on_phy_updatePHY 层更新结果(1M/2M/Coded)。

4.小结

模块结构体用途
连接管理acl_classic_connection_interface_t处理 Classic 连接建立/失败/断开
连接管理acl_le_connection_interface_t处理 BLE 连接建立/失败/断开(含 ISO)
连接管理acl_sco_connection_interface_t处理 SCO/eSCO 连接请求及断开
链路管理acl_classic_link_interface_tClassic 链路状态变更及查询(如 role、RSSI)
链路管理acl_le_link_interface_tLE 链路参数更新、PHY 变更等
数据与流控on_send_data_upwards, on_packets_completed数据上传 & 发送完成反馈

  • controller 层收到对应 HCI Event 或 Command Complete 后,会查找并调用对应回调函数,从而解耦事件分发。

4. GetAclInterface

如下是我们 协议栈里面的 对于 acl_interface_t 结构变量的赋值。

  • system/main/shim/acl_legacy_interface.cc

const acl_interface_t GetAclInterface() {acl_interface_t acl_interface{.on_send_data_upwards = acl_rcv_acl_data,.on_packets_completed = acl_packets_completed,.connection.classic.on_connected = on_acl_br_edr_connected,.connection.classic.on_failed = on_acl_br_edr_failed,.connection.classic.on_disconnected = btm_acl_disconnected,.connection.le.on_connected =acl_ble_enhanced_connection_complete_from_shim,.connection.le.on_failed = acl_ble_connection_fail,.connection.le.on_disconnected = btm_acl_disconnected,.connection.le.on_iso_disconnected = btm_acl_iso_disconnected,.connection.sco.on_esco_connect_request = btm_sco_on_esco_connect_request,.connection.sco.on_sco_connect_request = btm_sco_on_sco_connect_request,.connection.sco.on_disconnected = btm_sco_on_disconnected,.link.classic.on_authentication_complete = btm_sec_auth_complete,.link.classic.on_central_link_key_complete = nullptr,.link.classic.on_change_connection_link_key_complete = nullptr,.link.classic.on_encryption_change = nullptr,.link.classic.on_flow_specification_complete = nullptr,.link.classic.on_flush_occurred = nullptr,.link.classic.on_mode_change = btm_pm_on_mode_change,.link.classic.on_packet_type_changed = nullptr,.link.classic.on_qos_setup_complete = nullptr,.link.classic.on_read_afh_channel_map_complete = nullptr,.link.classic.on_read_automatic_flush_timeout_complete = nullptr,.link.classic.on_sniff_subrating = btm_pm_on_sniff_subrating,.link.classic.on_read_clock_complete = nullptr,.link.classic.on_read_clock_offset_complete = nullptr,.link.classic.on_read_failed_contact_counter_complete = nullptr,.link.classic.on_read_link_policy_settings_complete = nullptr,.link.classic.on_read_link_quality_complete = nullptr,.link.classic.on_read_link_supervision_timeout_complete = nullptr,.link.classic.on_read_remote_version_information_complete =btm_read_remote_version_complete,.link.classic.on_read_remote_supported_features_complete =acl_process_supported_features,.link.classic.on_read_remote_extended_features_complete =acl_process_extended_features,.link.classic.on_read_rssi_complete = nullptr,.link.classic.on_read_transmit_power_level_complete = nullptr,.link.classic.on_role_change = btm_acl_role_changed,.link.classic.on_role_discovery_complete = nullptr,.link.le.on_connection_update = acl_ble_update_event_received,.link.le.on_data_length_change = acl_ble_data_length_change_event,.link.le.on_read_remote_version_information_complete =btm_read_remote_version_complete,.link.le.on_phy_update = gatt_notify_phy_updated,};return acl_interface;
}

1. 顶层接口函数回调

功能场景回调字段名回调函数名说明
上行传输 ACL 数据on_send_data_upwardsacl_rcv_acl_data将接收到的 ACL 数据包上传到上层(如 L2CAP)
完成数据包发送通知on_packets_completedacl_packets_completed通知上层某个 handle 的 N 个数据包发送完成

2. ACL Classic 连接事件回调(BR/EDR)

功能场景回调字段名回调函数名说明
Classic 连接成功connection.classic.on_connectedon_acl_br_edr_connected连接建立成功,回调 handle 和地址
Classic 连接失败connection.classic.on_failedon_acl_br_edr_failed连接建立失败,回调失败原因
Classic 断开连接connection.classic.on_disconnectedbtm_acl_disconnectedACL 通道断开回调

3. ACL LE(BLE)连接事件回调

功能场景回调字段名回调函数名说明
BLE 连接成功connection.le.on_connectedacl_ble_enhanced_connection_complete_from_shim支持 enhanced connection
BLE 连接失败connection.le.on_failedacl_ble_connection_fail建立失败,如超时/被拒
BLE ACL 断开connection.le.on_disconnectedbtm_acl_disconnected同 classic 共用断链回调
BLE ISO 通道断开connection.le.on_iso_disconnectedbtm_acl_iso_disconnectedCIS/BIS 信道断开时调用

4. SCO/eSCO 音频连接回调

功能场景回调字段名回调函数名说明
对端请求建立 eSCO 音频connection.sco.on_esco_connect_requestbtm_sco_on_esco_connect_request提示是否接受连接
对端请求建立 SCO 音频connection.sco.on_sco_connect_requestbtm_sco_on_sco_connect_request
SCO 音频通道断开connection.sco.on_disconnectedbtm_sco_on_disconnected

5. Classic 链路管理事件回调

功能场景回调字段名回调函数名说明
身份认证完成link.classic.on_authentication_completebtm_sec_auth_complete配对阶段身份认证完成
sniff 子速率事件link.classic.on_sniff_subratingbtm_pm_on_sniff_subratingSniff 模式节能配置回调
低功耗模式变更(sniff/hold/park)link.classic.on_mode_changebtm_pm_on_mode_change模式变更事件,如进入 sniff
远端版本信息读取完成link.classic.on_read_remote_version_information_completebtm_read_remote_version_complete
远端 supported features 读取完成link.classic.on_read_remote_supported_features_completeacl_process_supported_features
远端 extended features 读取完成link.classic.on_read_remote_extended_features_completeacl_process_extended_features
主从角色变更完成link.classic.on_role_changebtm_acl_role_changed主动 role switch 或对方触发的结果

注:其它字段如 on_encryption_changeon_qos_setup_completeon_read_rssi_complete 等设置为 nullptr,表示当前 shim 或协议栈没有用到。


6. LE 链路管理事件回调

功能场景回调字段名回调函数名说明
BLE 连接参数更新完成link.le.on_connection_updateacl_ble_update_event_received参数如 interval、latency 更新
BLE 数据长度扩展更新(DLE)link.le.on_data_length_changeacl_ble_data_length_change_event控制器支持 DLE 时更新 TX/RX octet
BLE PHY 层更新完成(如 1M -> 2M)link.le.on_phy_updategatt_notify_phy_updated
BLE 远程版本读取完成link.le.on_read_remote_version_information_completebtm_read_remote_version_complete与 Classic 共用版本读取回调

7.小结

类别事件场景回调函数
Classic ACL连接成功on_acl_br_edr_connected
连接失败on_acl_br_edr_failed
断开连接btm_acl_disconnected
BLE ACL连接成功(enhanced)acl_ble_enhanced_connection_complete_from_shim
连接失败acl_ble_connection_fail
ACL/ISO 断开btm_acl_disconnected / btm_acl_iso_disconnected
SCO/eSCO对方请求连接btm_sco_on_esco_connect_request / btm_sco_on_sco_connect_request
通道断开btm_sco_on_disconnected
链路管理配对认证完成btm_sec_auth_complete
模式变更 / sniffbtm_pm_on_mode_change / btm_pm_on_sniff_subrating
远程版本 & 特性读取btm_read_remote_version_complete
BLE 链路更新/PHY更新acl_ble_update_event_received, gatt_notify_phy_updated

5. 用处

我之所以单独将 acl_interface_t 整理出来:

  • 它在 AOSP 蓝牙协议栈中起到了事件中转中心的作用,深入理解它对快速排查问题和梳理控制流非常有帮助。
序号价值说明
1快速定位 HCI 事件与上层响应逻辑每个 HCI 事件(如连接成功/断开/参数更新)都会最终回调到这个结构体中某个函数指针,可据此快速查找处理函数。
2统一视角区分 BLE / Classic / SCO 逻辑Classic、LE、SCO 各自的连接/链路处理逻辑都被封装在不同子结构体,阅读时可以按模块区分,避免混淆。
3方便调试断点与日志定位在调试工具(如 GDB 或 logcat)中设置断点/观察变量时,可以只看 acl_interface_t 的调用路径,即可捕获事件走向。
4反查控制器事件源头与分发路径从 HCI 层(如 hci_layer.cc)或 legacy shim 层(如 acl.cc)中,控制器接收的事件如何一步步调用到这些回调函数,可以一条线串起来排查问题来源。

1. 使用场景:快速排查问题指南

场景 1:Classic 蓝牙连接失败

  • 你看到: 日志中出现连接失败错误,比如 status=0x04

  • 排查路径:

→ HCI Connection Complete Event
→ shim layer 中 acl.cc 处理该事件
→ 调用 acl_interface.connection.classic.on_failed
→ 实际函数是:on_acl_br_edr_failed()
→ 查看这个函数内部是否有日志/状态错误处理

场景 2:BLE 连接建立失败或异常断链

  • 你看到: acl_ble_connection_fail() 被调用。

  • 排查路径:

→ HCI LE Connection Complete Fail
→ 查找调用了 GetAclInterface().connection.le.on_failed 的地方
→ 实际是 shim/acl.cc 或 legacy_event_handler.cc 中触发
→ 根据 handle/peer 地址继续反查 L2CAP/GATT 层异常处理

场景 3:ACL 通道断开,无法上层感知

  • 你看到: btm_acl_disconnected() 被调用但应用未感知断开。

  • 排查路径:

→ acl_interface.connection.classic/le.on_disconnected
→ btm_acl_disconnected
→ 通常继续调用 BTM 层状态管理
→ 最终触发 callbacks 到 framework 层(如 adapter 状态变化)

场景 4:LE 参数更新失败或没生效

  • 你看到: acl_ble_update_event_received() 日志异常。

  • 排查路径:

→ HCI LE Connection Update Complete
→ 调用 acl_interface.link.le.on_connection_update
→ 函数内部检查 status / 更新 interval / latency 等
→ 如果没触发 GATT 层响应,说明下游未联动,可回溯处理路径

2.阅读代码时的实用技巧

技巧示例
使用结构体名搜索函数使用grep -r on_acl_br_edr_failed external/
使用 GetAclInterface() 作为断点入口可在调试工具里打断点: b GetAclInterface 或设置观察点
追踪调用链从 shim 层的 acl.cc 开始,查找事件如何分发给 acl_interface
加日志定位回调触发点在比如 acl_ble_enhanced_connection_complete_from_shim() 中加 log 看是否被调到

3.总结

总结项内容
设计目的acl_interface_t 是 shim 层对上暴露的统一回调注册接口
涵盖内容连接相关(classic, le, sco)+ 链路管理(role、版本、phy、dle)+ 数据流控
阅读价值快速从 HCI 层回溯事件到处理函数 / 快速跳转到逻辑异常的根源
故障排查尤其适合处理连接建立失败、BLE 参数异常、断链无感、SCO 音频断开等问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/86042.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/86042.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/86042.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TouchDIVER Pro触觉手套:虚拟现实中的多模态交互新选择

随着虚拟现实技术的发展,用户对沉浸式体验的需求不断提升。TouchDIVER Pro触觉手套通过力反馈、纹理渲染和温度提示三种核心机制,为用户提供更真实的触觉感知体验。六个驱动点分布于五指与手掌,结合全手追踪与低延迟连接,实现精准…

想考华为HCIA-AI,应该怎么入门?

华为HCIA-AI Solution认证作为华为人工智能认证体系的起点,吸引了许多希望进入AI领域或提升专业技能的学习者。如果你正考虑考取这个认证,这份纯科普向的入门指南希望能够帮你理清学习路径和关键准备点! 第一、明确认证目标与要求 HCIA-AI S…

【Oracle篇】Windows平台单进程多线程架构设计与实现(比对Linux多进程架构)

💫《博主主页》: 🔎 CSDN主页__奈斯DB 🔎 IF Club社区主页__奈斯、 🔥《擅长领域》:擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控;并对SQLserver、N…

在微服务中使用 Sentinel

在微服务中集成 Sentinel 1. 添加依赖 对于 Spring Cloud 项目&#xff0c;首先需要添加 Sentinel 的依赖&#xff1a; <!-- Spring Cloud Alibaba Sentinel --> <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-…

中断控制与实现

一、中断基本概念 1、中断 中断是一种异步事件&#xff0c;用于通知处理器某个事件已经发生&#xff0c;需要处理器立即处理。由于I/O操作的不确定因素以及处理器和I/O设备之间的速度不匹配&#xff0c;I/O设备可以通过某种硬件信号异步唤醒对应的处理器的响应&#xff0c;这些…

前端跨域解决方案(7):Node中间件

1 Node 中间件核心 1.1 为什么开发环境需要 Node 代理&#xff1f; 在前端开发中&#xff0c;我们常遇到&#xff1a;前端运行在localhost:3000&#xff0c;后端 API 在localhost:4000&#xff0c;跨域导致请求失败。而传统解决方案有以下局限性&#xff1a; 修改后端 CORS 配…

iwebsec靶场-文件上传漏洞

01-前端JS过滤绕过 1&#xff0c;查看前端代码对文件上传的限制策略 function checkFile() { var file document.getElementsByName(upfile)[0].value; if (file null || file "") { alert("你还没有选择任何文件&a…

GitHub 趋势日报 (2025年06月23日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 390 suna 387 system-prompts-and-models-of-ai-tools 383 Web-Dev-For-Beginners…

告别水印烦恼,一键解锁高清无痕图片与视频!

在这个数字化飞速发展的时代&#xff0c;无论是设计小白还是创意达人&#xff0c;都可能遇到这样的困扰&#xff1a;心仪的图片或视频因水印而大打折扣&#xff0c;创意灵感因水印而受限。别急&#xff0c;今天就为大家带来几款神器&#xff0c;让你轻松告别水印烦恼&#xff0…

LangChain4j在Java企业应用中的实战指南:构建RAG系统与智能应用-2

LangChain4j在Java企业应用中的实战指南&#xff1a;构建RAG系统与智能应用-2 开篇&#xff1a;LangChain4j框架及其在Java生态中的定位 随着人工智能技术的快速发展&#xff0c;尤其是大语言模型&#xff08;Large Language Models, LLMs&#xff09;的广泛应用&#xff0c;…

Cola StateMachine 的无状态(Stateless)特性详解

Cola StateMachine 的无状态&#xff08;Stateless&#xff09;特性详解 在现代分布式系统中&#xff0c;无状态设计是构建高可用、可扩展服务的关键原则之一。Cola StateMachine 作为一款轻量级的状态机框架&#xff0c;通过其独特的设计理念实现了良好的无状态特性。本文将深…

使用事件通知来处理页面回退时传递参数和赋值问题

背景。uniapp开发微信小程序。在当前页面需要选择条件&#xff0c;如选择城市。会打开新的页面。此时选择之后需要关闭页面回到当初的页面。但问题出现了。onLoad等事件是不会加载的。相关链接。uniapp页面通讯说明使用事件通知来处理页面回退时传递参数和赋值问题 页面之间的…

腾讯云COS“私有桶”下,App如何安全获得音频调用流程

流程图 #mermaid-svg-Phy4VCltBRZ90UH8 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Phy4VCltBRZ90UH8 .error-icon{fill:#552222;}#mermaid-svg-Phy4VCltBRZ90UH8 .error-text{fill:#552222;stroke:#552222;}#me…

基于深度学习的侧信道分析(DLSCA)Python实现(带测试)

一、DLSCA原理介绍 基于深度学习的侧信道分析(DLSCA)是一种结合深度神经网络与侧信道分析技术的密码分析方法。该方法利用深度学习模型从能量消耗、电磁辐射等侧信道信息中提取与密钥相关的特征模式。相比传统分析方法&#xff0c;DLSCA能够自动学习复杂的特征关系&#xff0c…

云原生 CAD 让制造业设计协同更便捷

随着互联网、云计算技术的突飞猛进&#xff0c;CAD向着网络化、协同化的方向快速发展&#xff0c;云CAD软件逐渐映入人们的眼帘。云原生CAD不仅打破了传统CAD软件对硬件配置的依赖&#xff0c;更以数据驱动的协同创新模式&#xff0c;重塑了制造业的产品研发流程与组织协作形态…

Docker容器核心操作指南:`docker run`参数深度解析

技术聚焦 作为容器化技术的起点&#xff0c;docker run命令承担着90%的容器创建工作。其关键参数-d&#xff08;后台模式&#xff09;与-it&#xff08;交互模式&#xff09;的合理运用&#xff0c;直接影响容器行为模式与运维效率。本文将深度拆解两大模式的应用场景与…

基于单片机的语音控制设计(论文)

摘要 自然语音作为人机交互在目前得以广泛的应用以及极大的发展前景。该设计介绍了基于非指定人语音芯片LD3320的语音控制器结构及其实现语音控制的方法。该语音控制器利用STM32F103C8T6单片机作为主要控制器&#xff0c;控制芯片对输入的进行语音识别并处理&#xff0c;根据语…

【论文阅读 | CVPRW 2023 |CSSA :基于通道切换和空间注意力的多模态目标检测】

论文阅读 | CVPRW 2023 |CSSA &#xff1a;基于通道切换和空间注意力的多模态目标检测 1.摘要&&引言2.方法2.1 框架概述2.2 通道切换通道注意力2.3 空间注意力 3. 实验3.1 实验设置3.1.1 数据集3.1.2 实现细节3.1.3 评估指标 3.2 对比研究3.2.1 定量结果3.2.2 定性结果…

《前端资源守卫者:SRI安全防护全解析》

SRI&#xff08;子资源完整性&#xff09;作为守护前端安全的隐形盾牌&#xff0c;以精妙的技术设计构建起资源验证防线。深入理解其工作逻辑与配置方法&#xff0c;是每位前端开发者筑牢应用安全的必修课。 SRI的核心价值&#xff0c;在于为外部资源打造独一无二的“数字身份…

项目需求评审报告参考模板

该文档是需求评审报告模板 内容涵盖评审基础信息,如项目名称、评审时间、地点、级别、方式等;包含评审签到表,记录角色、部门、职务、姓名等信息;还有评审工作量统计相关内容;以及评审问题跟踪表,记录问题描述、状态、解决人及时限等,还附有填表说明,对评审适用范围、工…