pile_nav_new/lib/pages/setting/child_pages/XyChange/connect.dart
2024-11-06 17:23:29 +08:00

187 lines
5.2 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'dart:developer';
import 'dart:typed_data';
import 'package:flutter/material.dart';
import '../connect/bluetooth_page.dart';
import '../connect/config/socket_setting.dart';
import '../connect/config/app_config.dart';
import '../connect/config/blue_params.dart';
import '../connect/config/connect_type.dart';
import 'coor_trans.dart';
class Connect {
SocketSetting socket = SocketSetting();
BlueSetting blueSetting = BlueSetting();
Config config = Config();
init() async {
await AppConfig.load();
config = Config.fromJson(AppConfig.config);
if (config.connectType != null) {
// if (config.connectType == "wifi") {
// config.connectType = ConnectType.wifi;
// } else {
// config.connectType = ConnectType.bluetooth;
// }
blueToothController.connectedType.value =
config.connectType ?? ConnectType.none;
if (config.connectType == ConnectType.wifi) {
if (config.ip != null) {
socket.ip = config.ip ?? "192.168.4.1";
socket.port = config.port ?? 6000;
await socket.connect();
}
} else {
if (config.deviceId != "") {
blueToothController.connectedDeviceID.value = config.deviceId!;
//蓝牙
await blueSetting.connect(config.deviceId!);
}
}
}
}
disconnect(ConnectType type) {
if (type == ConnectType.wifi) {
socket.disConnect();
} else {
blueSetting.disConnect(blueToothController.connectedDeviceID.value);
}
}
// 实时读写
write(Uint8List value) {
if (blueToothController.connectedType.value == ConnectType.wifi) {
socket.write(value);
} else if (blueToothController.connectedType.value ==
ConnectType.bluetooth) {
blueSetting.write(blueToothController.connectedDeviceID.value, value);
} else {
log("暂无连接");
}
}
writeCoorTransValue(String deviceId, CoorTransModel coorTrans) {
Uint8List bytes = Uint8List(20);
ByteData data = ByteData.view(bytes.buffer);
// 0xF0 + 2字节地址 + 1字节数据长度以字节为单位+ 数据
data.setInt8(0, 0xF0);
data.setInt16(1, 608, Endian.little);
data.setInt8(3, 16);
// data.setFloat64(4, coorTrans.L0);
// 椭球基准 601 2
sendData(
bytes, 601, 2, [toCoordString(coorTrans.dstEllipsoid).index], deviceId);
// L0,elevation 608 16
Future.delayed(const Duration(milliseconds: 2000), () {
sendData(
bytes,
608,
16,
[(coorTrans.L0 * 1e8).toInt(), (coorTrans.elevation * 1000).toInt()],
deviceId);
});
// x 616 16
Future.delayed(const Duration(milliseconds: 3000), () {
sendData(
bytes,
616,
16,
[(coorTrans.dx * 1000).toInt(), (coorTrans.wx * 1000).toInt()],
deviceId);
});
// y 624 16
Future.delayed(const Duration(milliseconds: 4000), () {
sendData(
bytes,
624,
16,
[(coorTrans.dy * 1000).toInt(), (coorTrans.wy * 1000).toInt()],
deviceId);
});
// z 632 16
Future.delayed(const Duration(milliseconds: 4000), () {
sendData(
bytes,
632,
16,
[(coorTrans.dz * 1000).toInt(), (coorTrans.wz * 1000).toInt()],
deviceId);
});
// k 640 8
Future.delayed(const Duration(milliseconds: 5000), () {
ByteData data = ByteData.view(bytes.buffer);
data.setInt8(0, 0xF0);
data.setInt16(1, 640, Endian.little);
data.setInt8(3, 8);
data.setInt64(4, (coorTrans.k * 1000).toInt(), Endian.little);
write(bytes);
});
Future.delayed(const Duration(milliseconds: 7000), () {
save(deviceId, bytes, data);
});
}
void sendData(Uint8List bytes, int code, int length, List<int> values,
String deviceId) {
ByteData data = ByteData.view(bytes.buffer);
data.setInt8(0, 0xF0);
data.setInt16(1, code, Endian.little);
data.setInt8(3, length);
for (int i = 0; i < values.length; i++) {
data.setInt64(4 + i * 8, (values[i] * 1000).toInt(), Endian.little);
}
write(bytes);
}
save(String deviceId, Uint8List bytes, ByteData data) {
// 采用 0X55BB 600 2
data.setInt16(1, 600, Endian.little);
data.setInt8(3, 2);
data.setUint16(4, 0x55AA, Endian.little);
write(bytes);
}
Coord toCoordString(String coord) {
switch (coord) {
case "BJ54":
return Coord.BJ54;
case "XA80":
return Coord.XA80;
case "WGS84":
return Coord.WGS84;
case "WGS2000":
return Coord.WGS2000;
default:
return Coord.WGS2000;
}
}
writeAntenna(Offset center, Offset right, String deviceId) {
Uint8List bytes = Uint8List(20);
ByteData data = ByteData.view(bytes.buffer);
// 604 8 X0右侧天线 X1 中心点
data.setInt8(0, 0xF0);
data.setInt16(1, 604, Endian.little);
data.setInt8(3, 8);
data.setInt16(4, (right.dx * 1000).toInt(), Endian.little);
data.setInt16(6, (right.dy * 1000).toInt(), Endian.little);
data.setInt16(8, (center.dx * 1000).toInt(), Endian.little);
data.setInt16(10, (center.dy * 1000).toInt(), Endian.little);
write(bytes);
Future.delayed(const Duration(milliseconds: 1000), () {
save(deviceId, bytes, data);
});
}
}