# 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");
}
```