# mtsdk **Repository Path**: Travelease/mtsdk ## Basic Information - **Project Name**: mtsdk - **Description**: No description available - **Primary Language**: Dart - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-11-03 - **Last Updated**: 2023-11-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 概述:曼唐Flutter SDK 文档 SDK基本信息 :::tips - **版本**:`0.01` - **日期**:`2023-11-7` ::: ### SDKFlutter版本要求: | 环境 | 版本 | | --- | --- | | Dart SDK | >= 3.0.5 <4.0.0 | | Flutter | >=3.3.0 | ### 集成方式: 使用git方式来集成,在pubspec.yaml文件的dependencies:下添加依赖。 ``` mtsdk: git: url: https://gitee.com/Travelease/mtsdk.git ref: master ``` SDK依赖更新:先将SDK的依赖注释掉,执行一次flutter pub get,将旧的依赖移除;然后再取消注释,重新执行一次flutter pub get,拉取新的SDK依赖; ### 权限要求: Android在清单文件:AndroidManifest.xml中声明权限: ```xml ``` iOS在Runner目录下的Info.plist文件中添加权限声明 ```json NSBluetoothAlwaysUsageDescription APP需要使用您的蓝牙来连接外部设备,用来控制设备振动 NSBluetoothPeripheralUsageDescription APP需要使用您的蓝牙来连接外部设备,用来控制设备振动 ``` ### SDK初始化 ```dart MTSdk kit = MTSdk(); MTSdk.init(); ``` ### 蓝牙搜索 1、设置回调 ```dart final List devices = []; final List deviceNames = []; ScanManager.sharedInstance().setScanCallback( ScanCallback( onScanResult: onScanResult, onScanStop: onScanStop, onScanTimeout: onScanTimeout, ), ); /// /// 搜索到设备 /// void onScanResult(BluetoothDevice device) { if (devices.contains(device) || device.platformName.isEmpty) { return; } devices.add(device); setState(() {}); debugPrint("Bluetooth Device info = ${device.toString()}"); } /// /// 停止搜索 /// void onScanStop() { debugPrint("Stop scan device"); } /// /// 搜索超时,未发现设备 /// void onScanTimeout() { debugPrint("Scan device timeout"); } ``` 2、开始搜索设备 ```dart /// /// 开始扫描 /// [timeout] 搜索超时时间,默认是10秒钟 /// [specialNames] 搜索指定名称的设备,默认为空,即不过滤设备名称 /// ScanManager.sharedInstance().startScan(specialNames: deviceNames,timeout: 20); ``` ### 设备连接 1、连接设备之前,首先要设置好回调函数: ```dart // 设置回调函数 ConnectManager.sharedInstance().init( GattCallback( onConnected: onConnected, onDisconnect: onDisconnect, onDeviceData: onDeviceData, onMTUSetup: onMTUSetup, onConnectTimeout: onConnectTimeout, onDeviceReportData: onDeviceReportData, onDeviceBatteryNotify: onDeviceBatteryNotify, onNotifyOpenFailed: onNotifyOpenFailed, onWriteResult: onWriteResult, onConnectError: onConnectError, ), ); // 设置蓝牙日志输出级别 ConnectManager.sharedInstance().setLog(logLevel: LogLevel.none); ``` 2、设置交互操作回调函数 ```dart CommandManager.sharedInstance().init( CmdCallback( onDeviceWiFiTurn: onDeviceWiFiTurn, onCmdError: onCmdError, onHostInfo: onHostInfo, onBatteryReport: onBatteryReport, onCmdSuccess: onCmdSuccess, writeCommandData: writeCommandData, onQueryMC: onQueryMC, onQueryTemperature: onQueryTemperature, onVideoUrl: onVideoUrl, onWiFiInfo: onWiFiInfo, onInnerStickTemperature: onInnerStickTemperature, onHostNotifyInfo: onHostNotifyInfo, onReceiveNotifyTimeout: onReceiveNotifyTimeout, ), ); ``` 3、连接蓝牙设备: ```dart // 连接蓝牙设备 ConnectManager.sharedInstance().connect(item); ``` ```dart // 断开连接蓝牙设备 ConnectManager.sharedInstance().disconnect(); ``` 4、蓝牙mtu修改成功之后,开始发起指令交互 ```dart /// /// 设备MTU修改成功 /// void onMTUSetup(bool result) { debugPrint("设备MTU修改结果 == $result"); } ``` ### 指令发送 ```dart /// /// 向设备写入数据 /// void writeCommandData(Uint8List data) { ConnectManager.sharedInstance().writeCommand(data); } /// /// 指令响应错误 /// void onCmdError(MTCmdResult result) { debugPrint("CmdCallback ===== code = ${result.code} / msg = ${result.msg}"); } /// /// 指令响应成功 /// void onCmdSuccess(int cmd, MTCmdResult result, Uint8List data) { debugPrint( "CmdCallback ===== 命令 = $cmd / code = ${result.code} / msg = ${result.msg}"); } ``` ### 上报处理 1、上报数据处理: ```dart /// /// 设备上报的数据 /// void onDeviceReportData(List data) { CommandManager.reportDataStream.add(data); // 固定写法 } ``` 2、接收电量信息 ```dart /// /// 设备上报电量 /// void onBatteryReport(int battery) { debugPrint("当前设备的电量 == $battery"); } ``` 3、主机报文 ```dart /// /// 主机上报的信息 /// void onHostNotifyInfo(HostNotifyInfo hostNotifyInfo) { debugPrint("主机上报的信息 = $hostNotifyInfo"); } ``` 4、主机通知报文超时处理 ```dart /// /// 接收上报通知超时的回调,超过5秒钟未收到上报的数据,则判断为失败已经断开连接 /// void onReceiveNotifyTimeout() { debugPrint("主机上报的信息接收超时,设备已经断开连接"); connectState = ConnectState.disconnected; onDisconnect(); } ``` ### 交互操作 1、轮询发送心跳包,在设置mtu成功之后,延迟开启心跳包发送 ```dart /// /// 设备MTU修改成功 /// void onMTUSetup(bool result) { debugPrint("设备MTU修改结果 == $result"); // 开启轮询发送心跳包,一般在连接成功之后,延迟一秒开启发送心跳包 Future.delayed(const Duration(seconds: 1), () { CommandManager.sharedInstance().startHeartBeat(); }); } // 设备断开连接,或者接收操作时,调用停止发送心跳包的函数 CommandManager.sharedInstance().stopHeartBeat(); ``` 2、获取主机信息 ```dart // 请求获取 CommandManager.sharedInstance().hostInfo(); /// /// 主机信息 /// void onHostInfo(HostInfo hostInfo) { debugPrint("主机信息 = $hostInfo"); } ``` 3、WiFi操作 ```dart // 开启WiFi CommandManager.sharedInstance().wifiActionOn(); // 关闭WiFi CommandManager.sharedInstance().wifiActionOn(); /// /// WIFI操作开启状态的回调 /// void onDeviceWiFiTurn(bool turn) { debugPrint("WIFI开关状态 == $turn"); } /// /// 开启WiFi之后,返回的WiFi信息 /// void onWiFiInfo(WiFiInfo wiFiInfo) { debugPrint("设备的WiFi信息 = $wiFiInfo"); } ``` ### 内窥棒 1、摄像头 ```dart // 摄像头开启 CommandManager.sharedInstance().cameraOn(); // 摄像头关闭 CommandManager.sharedInstance().cameraOff(); /// /// 内窥镜推流链接的地址 /// void onVideoUrl(String rtspUrl) { debugPrint("内窥棒摄像头开启成功,推流地址 = $rtspUrl"); } ``` 2、震动 ```dart // 开启内窥棒震动 CommandManager.sharedInstance().vibrateStart( deviceType: DeviceType.innerStick, // 设备类型为:内窥棒 mode: VibrateMode.mode3, // 震动模式 level: VibrateLevel.level1, // 震动强度 ); // 关闭内窥棒震动 CommandManager.sharedInstance().vibrateStop( deviceType: DeviceType.innerStick, // 设备类型为:内窥棒 ); ``` 3、肌电流 ```dart // 开启 CommandManager.sharedInstance().emgOn(); // 关闭 CommandManager.sharedInstance().emgOff(); ``` 4、温度 ```dart // 开启 CommandManager.sharedInstance().temperatureOn(); // 关闭 CommandManager.sharedInstance().temperatureOff(); /// /// 内窥棒关闭时的温度回调 /// void onInnerStickTemperature(double temperature) { debugPrint("内窥棒关闭时的温度 = $temperature"); } ``` ### 凯格尔 1、压力的开启和关闭 ```dart int pressure = Random().nextInt(300); // 模拟压力值 // 开启压力 CommandManager.sharedInstance() .kegelPressureOn(pressure: pressure); // 关闭压力 CommandManager.sharedInstance().kegelPressureOff(); ``` 2、震动开启和关闭 ```dart // 开启凯格尔震动 CommandManager.sharedInstance().vibrateStart( deviceType: DeviceType.kagel, // 设备类型为:凯格尔 mode: VibrateMode.mode3, // 震动模式 level: VibrateLevel.level1, // 震动强度 ); // 关闭凯格尔震动 CommandManager.sharedInstance().vibrateStop( deviceType: DeviceType.kagel, // 设备类型为:凯格尔 ); ``` ### 护垫 1、加热模式 ```dart // 开启护垫加热,指定加热的温度 CommandManager.sharedInstance().padHeatOn(temperature: 38); // 关闭护垫加热 CommandManager.sharedInstance().padHeatOff(); // 当前护垫温度查询 CommandManager.sharedInstance().padHeatQuery(); /// /// 护垫温度查询的结果 /// void onQueryTemperature(int temperature) { debugPrint("护垫温度查询结果 = $temperature"); } ``` 2、微电流 ```dart // 开启护垫微电流,需要指定模式和强度 int mode = Random().nextInt(10); int level = Random().nextInt(19); CommandManager.sharedInstance().microCurrentOn( deviceType: DeviceType.pad, // 设备类型 mode: MicroCurrentMode.values[mode], // 模式 level: MicroCurrentLevel.values[level], // 强度 ); // 关闭护垫微电流 CommandManager.sharedInstance().microCurrentOff( deviceType: DeviceType.pad, ); // 当前护垫微电流信息查询 CommandManager.sharedInstance().microCurrentQuery( deviceType: DeviceType.pad, ); /// /// 微电流数据查询的结果 /// void onQueryMC(int mode, int level) { debugPrint("微电流数据 mode = $mode / level = $level"); } ```