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 并包含上述头文件目录。