# FDSMeshLibDemo **Repository Path**: chenbabys/FDSMeshLibDemo ## Basic Information - **Project Name**: FDSMeshLibDemo - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-12-06 - **Last Updated**: 2026-01-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Android Mesh SDK说明⽂档 ## ⼀.SDK说明 ### 1,mesh核心库 GodoxMeshLib_v1.2.3 LsTiBleMeshLib_v1.2.3 ### 2,mesh数据协议库 GodoxAgmLib_v1.1.2 ### 3,⽀持的Android版本: Android5.0以上(包含) ### 4,开发语⾔: kotlin Java ### 5,编译环境: gradle-7.3.3 ## ⼆.⼯程介绍 ### 1.下载和集成 代码仓库: https://github.com/JaelynWuJionglin/FDSMeshLibDemo.git aar路径: FDSMeshLibDemo -> App -> libs ### 2.权限配置 注意:蓝牙权限动态需动态申请,并且需要开启GPS,具体参考Demo ``` ``` ### 3.SDK集成配置 (1)build.gradle中配置 ``` //引入aar包 implementation fileTree(dir: 'libs', include: ['*.aar']) //加密(SDK需要) implementation 'com.madgag.spongycastle:core:1.58.0.0' implementation 'com.madgag.spongycastle:prov:1.58.0.0' //gson(SDK需要) implementation "com.google.code.gson:gson:${project.gson_version}" ``` (2)Sdk的MeshApp继承自Application,需要将app的Application继承MeshApp。 (3)MeshConfigure为sdk的初始化配置,在Application中,建议使用demo中的默认配置。 (4)初始化mesh数据 ``` App.instance.initMeshData() 注意:会获取Android_ID等设备信息,生成唯一ID,故首次启动app,需要在用户同意隐私政策后调用,避免商店上架问题。 ``` (5)混淆 ``` -keep class org.spongycastle** {*;} -keep class com.godox.sdk** {*;} -keep class com.base.mesh.api** {*;} -keep class com.telink.ble.mesh** {*;} ``` ## 三. Api接⼝ ### 1,设备搜索 接⼝类:FDSSearchDevicesApi 调⽤⽅式:类⽅法调⽤ ``` /** * 扫描设备 * @param filterName 基于设备的localname进行过滤,传空默认不过滤 * @param scanOutTime 扫描超时时间 * @param callBack 蓝牙外设对象回调 */ fun startScanDevice(context: Context,filterName: String, scanOutTime: Long, callBack: FDSBleDevCallBack) /** * 停止扫描 */ fun stopScan() /** * 销毁释放资源 */ fun destroy() ``` ### 2.设备入网和退网 接⼝类:FDSAddOrRemoveDeviceApi 调⽤⽅式:类⽅法调⽤ ``` /** * 设备组网 * @param advertisingDevice 蓝牙外设对象 * @param fdsAddNetworkCallBack 组网回调 */ fun deviceAddNetWork( advertisingDevice: AdvertisingDevice, fdsAddNetworkCallBack: FDSAddNetWorkCallBack ) fun deviceAddNetWork( advertisingDeviceList: MutableList, fdsAddNetworkCallBack: FDSAddNetWorkCallBack ) /** * 移除节点(退网) * @param fdsNodeInfo 节点 * @param isSupportOutOfLine 是否支持删除离线节点 * @param fdsRemoveNodeCallBack true表示删除成功,false表示删除失败 */ fun deviceRemoveNetWork( fdsNodeInfo: FDSNodeInfo, isSupportOutOfLine: Boolean, fdsRemoveNodeCallBack: FDSRemoveNodeCallBack ) fun deviceRemoveNetWork( fdsNodeInfoList: MutableList, isSupportOutOfLine: Boolean, fdsRemoveNodeCallBack: FDSRemoveNodeCallBack ) /** * 销毁资源 */ fun destroy() ``` ### 3,MeshApi 接⼝类: FDSMeshApi 调⽤⽅式:单例模式 ``` /** * 设置接入使用需要申请AppId * @param appId 应用AppId */ fun setWithAppId(appId: String) /** * 获取SDK版本号 * @return 版本x.x.x */ fun getVersion(): String /** * 设置mesh参数配置,初始化时调用。不设置则为默认。 */ fun setMeshConfigure(meshConfigure: MeshConfigure) /** * 设置Mesh发送数据包承载模式(需要固件支持) * NONE:默认都不使用长包 * GATT:直连节点长包 * GATT_ADV:全部长包 */ fun resetExtendBearerMode(extendBearerMode: ExtendBearerMode) /** * 启用SDK日志 * @param isOpen true表示启用,false表示关闭 * @param isSave true表示保存日志,false表示不保存日志 */ fun initSdkLog(isOpen: Boolean, isSave: Boolean) /** * 获取节点列表 * @return 节点列表 */ fun getFDSNodes(): MutableList /** * 获取组列表 * @return 组列表 */ fun getGroups(): MutableList /** * 获取订阅组的设备节点列表 * @param address 组地址 * @return 节点列表 */ fun getGroupFDSNodes(address: Int): MutableList /** * 获取未订阅组的节点列表 * @return 节点列表 */ fun getFDSNodeWhitOutGroup(): MutableList /** * 获取直连节点 * @return 直连节点 */ fun getConnectedFDSNodeInfo(): FDSNodeInfo? /** * 根据MAC地址获取指定节点 * @param macAddress 节点MAC地址 * @return */ fun getFDSNodeInfoByMacAddress(macAddress: String): FDSNodeInfo? /** * 根据节点mesh地址获取指定节点 * @param meshAddress 节点mesh地址 * @return FDSNodeInfo */ fun getFDSNodeInfoByMeshAddress(meshAddress: Int): FDSNodeInfo? /** * 根据组地址获取组 * @param address 组地址 * @return */ fun getGroupByAddress(address: Int): FDSGroupInfo? /** * 获取设备订阅的组 * @param meshAddress 设备地址 * @return */ fun getGroupByDeviceAddressFirst(meshAddress: Int): FDSGroupInfo? /** * 重命名节点名称和类型 * @param renameList 要修改的设备信息列表 * renameBean.meshAddress 节点地址 * renameBean.name 节点名称 * renameBean.type 节点类型 * @return true表示重命名成功,false表示重命名失败 */ fun renameFDSNodeInfo(renameList: MutableList): Boolean /** * 创建组 * @param name 组名称 * @return 组对象,不为null则为创建成功 */ fun createGroup(name: String): FDSGroupInfo? /** * 重命名组 * @param groupInfo 组 * @param name 组名称 * @return true表示重命名成功,false表示重命名失败 */ fun renameGroup(groupInfo: FDSGroupInfo, name: String): Boolean /** * 移除组 * @param groupInfo 组 * @return true表示删除成功,false表示删除失败 */ fun removeGroup(groupInfo: FDSGroupInfo): Boolean /** * 配置节点“订阅/取消订阅”组 * @param fdsNodeInfo 节点 * @param groupInfo 组 * @param isSubscribe true表示订阅到组,false表示取消订阅 * @param subscribeListener true表示成功,false表示失败 */ fun configSubscribe( fdsNodeInfo: FDSNodeInfo, groupInfo: FDSGroupInfo, isSubscribe: Boolean, subscribeListener: (Boolean) -> Unit ) /** * 检测和刷新节点在线状态 */ fun refreshFDSNodeInfoState(): Boolean /** * 设置节点在线状态改变的监听 */ fun addFDSNodeStatusChangeCallBack( fdsNodeStatusChangeListener: NodeStatusChangeListener) /** * 取消节点在线状态改变的监听 */ fun removeFDSNodeStatusChangeCallBack( fdsNodeStatusChangeListener: NodeStatusChangeListener) /** * 配置节点自动上报在线状态 * @param isOn true表示开启自动上报,false表示取消自动上报 * @param fdsNodeInfo 节点 */ fun configFDSNodePublishState(isOn: Boolean, fdsNodeInfo: FDSNodeInfo): Boolean /** * 发送消息数据 * @param address 发送地址 * @param data 消息数据 * @param responseOpcode 回响应操作码 - #{SendCmdUtils.RES_OPCODE_F0,SendCmdUtils.RES_OPCODE_F1} */ fun sendData(address: Int, data: ByteArray, responseOpcode: Int): Boolean /** * 发送数据响应 * @param fdsResponseCallBack 发送数据响应回调 */ fun setResponseDataCallBack(fdsResponseCallBack: FDSResponseCallBack) /** * 获取当前使用的Mesh信息 */ fun getCurrentMeshInfo(): MeshInfo /** * 获取app唯一uuid */ fun getAppLocalUUID(): String /** * 根据json解析出部分有用的信息 * @param meshJson mesh导出的json数据 */ fun getMeshInfoByJson(meshJson: String): MeshJsonInfo /** * 更新json中的ProvisionAddress * @param meshJson 组网JSON信息 * @param newProvisionerAddress 新的provisionAddress (<=Ox7FFF) */ fun updateMeshJsonProvisionerAddress(meshJson: String, newProvisionerAddress: Int): String /** * 更新ProvisionAddress后再导入/替换Mesh信息 * @param meshJson 组网JSON信息 * @param newProvisionerAddress 新的provisionAddress (<=Ox7FFF) */ fun updateAndImportMeshJson(meshJson: String, newProvisionerAddress: Int): Boolean /** * 导入/替换Mesh信息 * @param meshJson 组网JSON信息 */ fun importMeshJson(meshJson: String): Boolean /** * 获取初始Mesh信息(新增场景时需要) * @return Mesh Json字符串 */ fun getInitMeshJson(): String /** * 获取当前Mesh信息(保存或分享场景时需要) * @return Mesh Json字符串 */ fun getCurrentMeshJson(): String /** * 开启OTA升级 * @param otaData 固件数据 * @param fdsNodeInfo 节点 * @param listener OTA升级回调 * @return true表示开启成功,false表示开启失败 */ fun startOTAWithOtaData( otaData: ByteArray, fdsNodeInfo: FDSNodeInfo, listener: MeshOtaListener ): Boolean /** * 结束OTA升级 */ fun stopOTA() /** * 开启MCU OTA升级 * @param otaData 固件数据 * @param version 固件版本 * @param fdsNodeInfo 节点 * @param listener MCU OTA升级回调 * @return true表示开启成功,false表示开启失败 */ fun startMcuOTAWithOtaData( otaData: ByteArray, version: Int, fdsNodeInfo: FDSNodeInfo, listener: MeshOtaListener ): Boolean /** * 结束MCU OTA升级 */ fun stopMcuOTA() /** * 销毁并释放资源 */ fun destroy() ```