Copyright (c) 2024 Shenzhen Kaihong Digital Industry Development Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
SLE C++ 接口说明
1. 整体架构
sle/interface/cpp_interface 提供 SLE 的 C++ 面向对象接口,命名空间统一为:
OHOS::NearLink::SleStandard
当前代码实现采用分层结构:
- C++ 接口层:
sle/interface/cpp_interface/*.h - Framework 实现层:
sle/sle_standard/frameworks/source/*.cpp - IPC 调用层:
sle/sle_standard/frameworks/ipc - 服务与 HAL 层:
sle/sle_standard/services+sle/sle_hal
调用链路可概括为:
应用 -> C++ 接口类 -> Framework Impl(Pimpl) -> IPC Proxy -> SLE Service -> HAL/驱动
2. 接口介绍
2.1 Host 管理(sle_host_interface.h)
类:SleHost
主要能力:
- 获取默认实例:
GetDefaultHost() - 使能/关闭 SLE:
EnableSle()、DisableSle() - 查询状态与本机信息:
GetSleState()、GetHostAddress()、SetHostName()、GetHostName() - 流量监控:
StartFlowMonitor()、StopFlowMonitor() - 获取默认连接参数:
GetHostDefaultConnectConfig() - 回调注册:
RegisterHostCallback()、UnregisterHostCallback()
回调基类:SleHostCallback
OnSleStateChange(SleDeviceState state)OnFlowMonitorEvent(float flow)
2.2 广播(sle_announce_interface.h)
类:SleAnnounce
主要能力:
- 广播实例管理:
AddAnnounce()、RemoveAnnounce() - 广播控制:
StartAnnounce()、StopAnnounce() - 默认广播参数:
GetDefaultAnnounceParamConfig() - 回调注册:
RegisterAnnounceCallback()、UnregisterAnnounceCallback()
回调基类:SleAnnounceCallback
OnAnnounceStateChange(uint8_t announceId, SleAnnounceState state, bool terminal)
2.3 扫描(sle_seek_interface.h)
类:SleSeek
主要能力:
- 获取默认实例:
GetDefaultSeek() - 扫描控制:
StartSeek()、StopSeek() - 默认扫描参数:
GetDefaultSeekParamConfig() - 回调注册:
RegisterSeekCallback()、UnregisterSeekCallback()
回调基类:SleSeekCallback
OnSeekStateChange(SleSeekState status)OnSeekResult(SleSeekResult &result)
2.4 连接管理(sle_connect_interface.h)
类:SleConnectManager
主要能力:
- 连接管理:
Connect()、Disconnect()、GetConnectId()、GetConnectState() - 连接参数:
UpdateConnectParam()、UpdateAllConnectParam()、GetRecomSendDataSize() - 配对管理:
SendPairRequest()、RemovePairedDevice()、RemoveAllPairedDevices() - 已连接/已配对设备查询:
GetConnectDeviceList()、GetPairedDevicesNum()、GetPairedDevices()、GetPairState() - 其他:
ReadRemoteRssi() - 回调注册:
RegisterConnectCallback()、UnregisterConnectCallback()
回调基类:SleConnectManagerCallback
OnConnectStateChange(...)OnConnectParamUpdateComplete(...)OnAuthComplete(...)OnPairComplete(...)
2.5 SSAP Server(sle_ssap_server_interface.h)
类:SleSsapServer(需传入 SleUuid 构造)
主要能力:
- 服务建模:
AddService()、AddProperty()、AddDescriptor()、RemoveAllServices() - 服务启动:
StartService() - 数据交互:
SendResponse()、NotifyIndicate()、NotifyIndicateByUuid() - MTU:
SetServerMtuInfo() - 回调注册:
RegisterServerCallback()、UnregisterServerCallback()
回调基类:SleSsapServerCallback
OnReadRequest(...)OnWriteRequest(...)OnMtuInfoChanged(...)
2.6 SSAP Client(sle_ssap_client_interface.h)
类:SleSsapClient(需传入 SleUuid 构造)
主要能力:
- 结构发现:
FindSsapStructure() - 读写:
ReadRequestByUuid()、ReadRequest()、WriteRequest()、WriteCommand() - MTU 协商:
ExchangeInfo() - 回调注册:
RegisterClientCallback()、UnregisterClientCallback()
回调基类:SleSsapClientCallback
OnFindService(...)、OnFindProperty(...)、OnFindComplete(...)OnWriteResult(...)、OnReadResult(...)、OnReadByUuidComplete(...)OnExchangeInfo(...)OnNotification(...)、OnIndication(...)
3. 使用示例
以下示例展示一个最小流程:注册 Host/Seek 回调 -> 使能 SLE -> 启动扫描 -> 关闭扫描与 SLE。
#include <memory>
#include "sle_host_interface.h"
#include "sle_seek_interface.h"
using namespace OHOS::NearLink::SleStandard;
class DemoHostCallback : public SleHostCallback {
public:
void OnSleStateChange(SleDeviceState state) override
{
// 可在此根据状态执行后续流程
(void)state;
}
void OnFlowMonitorEvent(float flow) override
{
(void)flow;
}
};
class DemoSeekCallback : public SleSeekCallback {
public:
void OnSeekStateChange(SleSeekState status) override
{
(void)status;
}
void OnSeekResult(SleSeekResult &result) override
{
// 在此保存设备地址,后续可用 SleConnectManager::Connect 发起连接
(void)result;
}
};
int main()
{
auto hostCb = std::make_shared<DemoHostCallback>();
auto seekCb = std::make_shared<DemoSeekCallback>();
SleHost &host = SleHost::GetDefaultHost();
SleSeek &seek = SleSeek::GetDefaultSeek();
if (host.RegisterHostCallback(hostCb) != SLE_NO_ERROR) {
return -1;
}
if (seek.RegisterSeekCallback(seekCb) != SLE_NO_ERROR) {
(void)host.UnregisterHostCallback(hostCb);
return -1;
}
if (host.EnableSle() != SLE_NO_ERROR) {
(void)seek.UnregisterSeekCallback(seekCb);
(void)host.UnregisterHostCallback(hostCb);
return -1;
}
SleSeekParam seekParam {};
if (seek.GetDefaultSeekParamConfig(seekParam) == SLE_NO_ERROR) {
(void)seek.StartSeek(seekParam);
}
// ... 业务逻辑运行
(void)seek.StopSeek();
(void)host.DisableSle();
(void)seek.UnregisterSeekCallback(seekCb);
(void)host.UnregisterHostCallback(hostCb);
return 0;
}
4. 编译与依赖说明
- C++ 接口实现库目标:
//foundation/communication/nearlink/sle/sle_standard/frameworks:sle_frameworks - C 适配层目标:
//foundation/communication/nearlink/sle/sle_standard/c_adapter:sle_adapter_standard - 对外头文件目录:
//foundation/communication/nearlink/sle/interface/cpp_interface
建议在业务模块中按需依赖 sle_frameworks 并包含上述头文件目录。