let tempTimer = 0;
let util = null;
let mDeviceEvent = null;
let mac_id;
let self = {
	data: {
		deviceId: null,
		isConnected: false,
		failure: false,
		value: 0,
		desc: "请耐心等待...",
		isChecksum: true,
		isEncrypt: true,
		flagEnd: false,
		defaultData: 1,
		ssidType: 2,
		passwordType: 3,
		meshIdType: 3,
		deviceId: "",
		ssid: "",
		uuid: "",
		serviceId: "",
		password: "",
		meshId: "",
		processList: [],
		result: [],
		service_uuid: "000000FF-0000-1000-8000-00805F9B34FB",
		characteristic_write_uuid: "0000FF01-0000-1000-8000-00805F9B34FB",
		characteristic_read_uuid: "0000FF02-0000-1000-8000-00805F9B34FB",
		customData: null,
		md5Key: 0
	}
};

function Utf8ArrayToStr(buffer) {
	var out, i, len, c;
	var char2, char3;
	var array = new Uint8Array(buffer)
	// console.log('array',array);
	// console.log('array.ArrayBuffer',array.ArrayBuffer);
	// console.log('array[[Uint8Array]]',array.ArrayBuffer);
	out = "";
	len = array.length;
	i = 0;
	// console.log('len',len);
	while (i < len) {
		c = array[i++];
		switch (c >> 4) {
			case 0:
			case 1:
			case 2:
			case 3:
			case 4:
			case 5:
			case 6:
			case 7:
				// 0xxxxxxx
				out += String.fromCharCode(c);
				break;
			case 12:
			case 13:
				// 110x xxxx 10xx xxxx
				char2 = array[i++];
				out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
				break;
			case 14:
				// 1110 xxxx 10xx xxxx 10xx xxxx
				char2 = array[i++];
				char3 = array[i++];
				out += String.fromCharCode(((c & 0x0F) << 12) |
					((char2 & 0x3F) << 6) |
					((char3 & 0x3F) << 0));
				break;
		}
	}
	// console.log('out',out);
	return out;
}





function string2buffer(str) {
	var bytes = new Array();
	for (var i = 0; i < str.length; i++) {
		var c = str.charCodeAt(i);
		var s = parseInt(c).toString(2);
		if (c >= parseInt('000080', 16) && c <= parseInt('0007FF', 16)) {
			var af = '';
			for (var j = 0; j < (11 - s.length); j++) {
				af += '0';
			}
			af += s;
			var n1 = parseInt('110' + af.substring(0, 5), 2);
			var n2 = parseInt('110' + af.substring(5), 2);
			if (n1 > 127) n1 -= 256;
			if (n2 > 127) n2 -= 256;
			bytes.push(n1);
			bytes.push(n2);
		} else if (c >= parseInt('000800', 16) && c <= parseInt('00FFFF', 16)) {
			var af = '';
			for (var j = 0; j < (16 - s.length); j++) {
				af += '0';
			}
			af += s;
			var n1 = parseInt('1110' + af.substring(0, 4), 2);
			var n2 = parseInt('10' + af.substring(4, 10), 2);
			var n3 = parseInt('10' + af.substring(10), 2);
			if (n1 > 127) n1 -= 256;
			if (n2 > 127) n2 -= 256;
			if (n3 > 127) n3 -= 256;
			bytes.push(n1);
			bytes.push(n2);
			bytes.push(n3);
		} else if (c >= parseInt('010000', 16) && c <= parseInt('10FFFF', 16)) {
			var af = '';
			for (var j = 0; j < (21 - s.length); j++) {
				af += '0';
			}
			af += s;
			var n1 = parseInt('11110' + af.substring(0, 3), 2);
			var n2 = parseInt('10' + af.substring(3, 9), 2);
			var n3 = parseInt('10' + af.substring(9, 15), 2);
			var n4 = parseInt('10' + af.substring(15), 2);
			if (n1 > 127) n1 -= 256;
			if (n2 > 127) n2 -= 256;
			if (n3 > 127) n3 -= 256;
			if (n4 > 127) n4 -= 256;
			bytes.push(n1);
			bytes.push(n2);
			bytes.push(n3);
			bytes.push(n4);
		} else {
			bytes.push(c & 0xff);
		}
	}

	let array = [];
	for (let i = 0; i < bytes.length; i++) {
		array[i] = bytes[i]
	}
	let array_int8 = Uint8Array.from(array)

	return array_int8.buffer;
}
function buf2hex(buffer) {
	return Array.prototype.map.call(new Uint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)).join('');
}


let attemptCount = 0;
let re_connect = 0;
function get_fuwu(deviceId) {
	attemptCount++;
	console.log("服务发现", deviceId)
	uni.getBLEDeviceServices({
		// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
		deviceId: deviceId,
		success: function (res) {
			console.log("服务发现456", deviceId, res.services)
			var services = res.services;
			//"000000FF-0000-1000-8000-00805F9B34FB"
			if (services.length > 0) {
				for (var i = 0; i < services.length; i++) {
					if (services[i].uuid === self.data.service_uuid) {
						// re_connect = 0;
						attemptCount = 0;

						var serviceId = services[i].uuid;
						console.log("这里有进去")
						uni.getBLEDeviceCharacteristics({
							deviceId: deviceId,
							serviceId: serviceId,
							success: function (res) {
								console.log("获取蓝牙子")
								var list = res.characteristics;
								if (list.length > 0) {
									console.log("list@@@@@@@", list)
									for (var i = 0; i < list.length; i++) {
										var uuid = list[i].uuid;
										console.log("uuid", uuid)
										if (uuid == self.data.characteristic_write_uuid) {
											self.data.serviceId = serviceId;
											self.data.uuid = uuid;
											console.log("uuid", uuid)
											uni.notifyBLECharacteristicValueChange({
												state: true,
												// 启用 notify 功能
												deviceId: deviceId,
												serviceId: serviceId,
												characteristicId: list[0].uuid,
												success: function (res) {

													console.log("成功", res)
													setTimeout(() => {
														const mtu = 212;
														uni.setBLEMTU({
															deviceId: self.data.deviceId,
															mtu,
															success: (
																res
															) => {
																console
																	.log(
																		"set1212BLEMTU success>>",
																		res
																	)
															},
															fail: (
																res
															) => {
															},
														});
													}, 1000);

													uni.onBLECharacteristicValueChange(function (res) {
														var my_str = Utf8ArrayToStr(res.value)
														if (my_str.indexOf("wifi_ok") != -1) {
															console.log("获取到wifiok设备数据OK", my_str);
															mDeviceEvent.notifyDeviceMsgEvent({
																'type': mDeviceEvent.XBLUFI_TYPE.TYPE_CONNECT_ROUTER_RESULT,
																'result': true,
																'data': {
																	'progress': 100,
																	'ssid': ""
																}
															});
														} else if (my_str.indexOf("wifi_err") != -1) {
															console.log("获取到设备数据失败", my_str);
															mDeviceEvent.notifyDeviceMsgEvent({
																'type': mDeviceEvent.XBLUFI_TYPE.TYPE_CONNECT_ROUTER_RESULT,
																'result': false,
																'data': {
																	'progress': 0,
																	'ssid': ""
																}
															});
														}
														else {
															let obj = {
																'type': mDeviceEvent.XBLUFI_TYPE.TYPE_RECIEVE_CUSTON_DATA,
																'result': true,
																'data': my_str
															};
															mDeviceEvent.notifyDeviceMsgEvent(obj);

														}
													});
												},
												fail: function (res) {

													console.log("监听", res)
													uni.onBLECharacteristicValueChange(function (res) {
														var my_str = Utf8ArrayToStr(res.value)
														{
															let obj = {
																'type': mDeviceEvent.XBLUFI_TYPE.TYPE_RECIEVE_CUSTON_DATA,
																'result': true,
																'data': my_str
															};
															mDeviceEvent.notifyDeviceMsgEvent(obj);

														}
													});
												}
											});
										}
									}
								}
							},
							fail: function (res) {

							}
						});
						break;
					}

				}

			}
			// else
			{
				if (attemptCount > 0 && attemptCount < 10) {
					console.log('进入');
					re_connect = 1;
					setTimeout(() => {
						get_fuwu(deviceId); // 递归调用自身以重试  
					}, 1000); // 延迟1秒后重试  
					
					// uni.closeBLEConnection({
					// 	deviceId: self.data.deviceId,
					// 	success: function (res) {
					// 		console.log('断开成功', self.data.deviceId);
					// 		uni.createBLEConnection({
					// 			deviceId: self.data.deviceId,
					// 			success: function (res) {
					// 				console.log("链接成功？", re_connect);
					// 				re_connect = 0;
					// 				setTimeout(() => {
					// 					get_fuwu(deviceId); // 递归调用自身以重试  
					// 				}, 1000); // 延迟1秒后重试  
					// 			},
					// 			fail: function (res) {
					// 				console.log("链接失败", re_connect);
					// 				re_connect = 1;
					// 				attemptCount = 0;
					// 				let obj = {
					// 					'type': mDeviceEvent.XBLUFI_TYPE.TYPE_STATUS_CONNECTED,
					// 					'result': res.connected,
					// 					'data': res
					// 				};
					// 				mDeviceEvent.notifyDeviceMsgEvent(obj);
					// 			}
					// 		})
					// 	},
					// 	fail: function (res) {
					// 		re_connect = 0;
					// 		attemptCount = 0;
					// 		console.log("断开123失败", re_connect);
					// 		let obj = {
					// 			'type': mDeviceEvent.XBLUFI_TYPE.TYPE_STATUS_CONNECTED,
					// 			'result': res.connected,
					// 			'data': res
					// 		};
					// 		mDeviceEvent.notifyDeviceMsgEvent(obj);
					// 	}
					// });
				}
				else {
					re_connect = 0;
					attemptCount = 0;

				}
			}
		},
		fail: function (res) {
			console.log("服务发现失败", res)
		}
	});
}



// #define CMD_IAP_PROM 0x80   // IAP编程命令
// #define CMD_IAP_ERASE 0x81  // IAP擦除命令
// #define CMD_IAP_VERIFY 0x82 // IAP校验命令
// #define CMD_IAP_END 0x83    // IAP结束标志
// #define CMD_IAP_INFO 0x84   // IAP获取设备信息
// #define CMD_IAP_SUM 0x85    // 校验和
// #define CMD_OTHER 0xee      // 校验和

const CMD_IAP_PROM = 0x80;
const CMD_IAP_ERASE = 0x81;
const CMD_IAP_VERIFY = 0x82;
const CMD_IAP_END = 0x83;
const CMD_IAP_INFO = 0x84;
const CMD_IAP_SUM = 0x85;

function write_cmd_erase(deviceId, serviceId, characteristicId, data) {

	var value = util.write_ota_erase(CMD_IAP_ERASE, 4, 0, 0);
	var typedArray = new Uint8Array(value);
	console.log("送擦除数据")
	uni.writeBLECharacteristicValue({
		deviceId: deviceId,
		serviceId: serviceId,
		characteristicId: characteristicId,
		value: typedArray.buffer,
		// value: buffer,
		success: function (res) {
			//console.log("送数据成功")
		},
		fail: function (res) { //console.log(257);
		}
	});
}



function send_ota_data(deviceId, serviceId, characteristicId, data) {
	return new Promise(function (resolve, reject) {
		uni.writeBLECharacteristicValue({
			deviceId: deviceId,
			serviceId: serviceId,
			characteristicId: characteristicId,
			value: data,
			// value: buffer,
			success: function (res) {
				//console.log("送数据成功")
				let obj = {
					'type': mDeviceEvent
						.XBLUFI_TYPE
						.TYPE_RECIEVE_MY_DATA,
					'result': true,
					'data': 99
				};
				mDeviceEvent
					.notifyDeviceMsgEvent(
						obj
					);

				resolve(res)
			},
			fail: function (res) {
				//console.log("送数据失败")
				reject(res)
			}
		});
	});
}
let send_num = 0
function send_ota_data_num(deviceId, serviceId, characteristicId, data, num) {
	return new Promise(function (resolve, reject) {
		// console.log("送数12据")
		if (send_num++ % 5 == 0) {
			uni.writeBLECharacteristicValue({
				deviceId: deviceId,
				serviceId: serviceId,
				characteristicId: characteristicId,
				value: data,
				writeType: 'write',
				success: function (res) {
					res = true
					resolve(res)
				},
				fail: function (res) {
					res = false
					//console.log("送数据失败")
					// reject(FALSE)
					reject(res)
				}
			});
		}
		else {
			uni.writeBLECharacteristicValue({
				deviceId: deviceId,
				serviceId: serviceId,
				characteristicId: characteristicId,
				value: data,
				writeType: 'writeNoResponse',
				success: function (res) {
					res = true
					resolve(res)
				},
				fail: function (res) {
					//console.log("送数据失败", res)
					res = false
					reject(res)
				}
			});
		}
	});
}

function send_end_data(deviceId, serviceId, characteristicId, data) {
	return new Promise(function (resolve, reject) {
		uni.writeBLECharacteristicValue({
			deviceId: deviceId,
			serviceId: serviceId,
			characteristicId: characteristicId,
			value: data,
			// value: buffer,
			success: function (res) {
				//console.log("送数据成功")
				let obj = {
					'type': mDeviceEvent
						.XBLUFI_TYPE
						.TYPE_RECIEVE_MY_DATA,
					'result': true,
					'data': 100
				};
				mDeviceEvent
					.notifyDeviceMsgEvent(
						obj
					);
				resolve(res)
			},
			fail: function (res) {
				//console.log("送数据失败")
				reject(res)
			}
		});
	});
}


function sleep6() {

	return new Promise(function (resolve, reject) {

		setTimeout(function () {

			resolve('ok');

		}, 6000);

	});

}

var StreamBinaryString = function (s) {
	this._p = 0;
	this._s = this.fromBinaryString(s);
};
StreamBinaryString.prototype = {
	constructor: StreamBinaryString,

	fromBinaryString(e) {
		var t = e || '';
		var f = [];
		for (var i = 0; i < t.length; i++) {
			f[i] = String.fromCharCode(t.charCodeAt(i) & 255);
		}
		return f.join('');
	},

	read: function (array, offset, count) {
		if (arguments.length == 1) {
			var result = this._s.substr(this._p, array);
			this._p += array;
			return result;
		} else {
			var result = 0;
			for (var i = 0; i < count; i++) {
				array[i] = this._s.charCodeAt(this._p);
				this._p += 1;
				result++;
			}
			return result;
		}
	},

	readByte: function () {
		var result = this._s.charCodeAt(this._p);
		this._p += 1;
		return result;
	},

	readInt8: function (signed) {
		var result = this._s.charCodeAt(this._p);
		if (signed && result > 127) {
			result -= 256;
		}
		this._p += 1;
		return result;
	},

	readInt16: function () {
		var result = ((this._s.charCodeAt(this._p) << 8) + this._s.charCodeAt(this._p + 1));
		this._p += 2;
		return result;
	},

	readInt32: function () {
		var result = ((this._s.charCodeAt(this._p) << 24) + (this._s.charCodeAt(this._p + 1) << 16) + (this._s
			.charCodeAt(
				this._p + 2) << 8) + this._s.charCodeAt(this._p + 3));
		this._p += 4;
		return result;
	},

	eof: function () {
		return this._p >= this._s.length;
	}
};

// 使用 async 函数来等待异步操作  
function write_cmd_program(deviceId, serviceId, characteristicId, data) {
	var address = 0;
	var len = 0;
	var buf = 0;
	var dv = 0;
	let result;
	console.log("更新122")
	const mtu = 212;
	uni.setBLEMTU({
		deviceId: self
			.data
			.deviceId,
		mtu,
		success: (
			res
		) => {
			console
				.log(
					"setBLEMTU success>>",
					res
				)
		},
		fail: (
			res
		) => {
			console
				.log(
					"setBLEMTU fail>>",
					res
				)
		},
	});

	var value1 = util.write_ota_erase(CMD_IAP_ERASE, 4, 0, 0);
	var typedArray1 = new Uint8Array(value1);
	console.log("送擦除数据", result)
	send_ota_data(deviceId, serviceId, characteristicId, typedArray1.buffer);
	setTimeout(function () {
		uni.request({
			// url: 'https://www.zenghi.com/gj/地升幕.bin', //仅为示例，并非真实接口地址。
			//url: 'https://www.zenghi.com/gj/BLE钉钉.bin', //仅为示例，并非真实接口地址。
			// url: 'https://www.zenghi.com/gj/电子秤.bin', //仅为示例，并非真实接口地址。
			responseType: 'arraybuffer',
			success: (res) => {
				dv = new DataView(res.data);
				var bufferLength = dv.byteLength;
				var sum = 0;
				for (var i = 0; i < bufferLength; i++) {
					sum += dv.getUint8(i)
				}
				result = dv
				console.log(result);
				console.log("content-length", bufferLength);
				console.log("sum", sum);
				len = bufferLength
				var p_data = 0;
				var p_ii = 0;
				while (address <= len) {
					var offst = 176;
					if (address + 176 > len) {
						offst = len - address;
					}
					var value = util.write_ota_program(CMD_IAP_PROM, offst, address, result);
					var typedArray = new Uint8Array(value);
					send_ota_data_num(deviceId, serviceId, characteristicId, typedArray.buffer, (address /
						len));
					address = address + 176;

				}

				// return new Promise
				var value2 = util.write_ota_sum(CMD_IAP_SUM, bufferLength, sum);
				var typedArray2 = new Uint8Array(value2);
				console.log("送结束数据", value2)
				send_ota_data_num(deviceId, serviceId, characteristicId, typedArray2.buffer, 100);
			},
			fail: function (res) {
				console.log("获取失败");
			}
		})
	}

		, "1000");

	// var requestTask =
}

// 模拟一个异步操作，比如网络请求  
function fetchData() {
	return new Promise((resolve, reject) => {
		setTimeout(() => {
			resolve('Data fetched!');
		}, 20); // 模拟网络延迟 2 秒  
	});
}
// 模拟一个异步操作，比如网络请求
function fetchData2() {
	return new Promise((resolve, reject) => {
		setTimeout(() => {
			resolve('Data fetched!');
		}, 2000); // 模拟网络延迟 2 秒  
	});
}
// 使用 async 函数来等待异步操作  
async function main(res, my_sum, deviceId, serviceId, characteristicId) {
	var address = 0;
	var len = 0;
	var buf = 0;
	var dv = 0;
	let result;
	dv = new DataView(res.data);
	var bufferLength = dv.byteLength;
	var sum = 0;
	for (var i = 0; i < bufferLength; i++) {
		sum += dv.getUint8(i)
	}
	const data1 = await fetchData2();
	result = dv
	console.log(result);
	console.log("content-length", bufferLength);
	console.log("sum", sum);
	len = bufferLength
	if (sum != my_sum && my_sum != 100) {
		console.log("不相等my_sum", my_sum);
		return;
	}
	var p_data = 0;
	var p_ii = 0;
	while (address <= len) {
		var offst = 176;
		if (address + 176 > len) {
			offst = len - address;
		}
		var value = util.write_ota_program(CMD_IAP_PROM, offst, address, result);
		var typedArray = new Uint8Array(value);
		// console.log("12121")
		const data = await fetchData();

		var qq = await send_ota_data_num(deviceId, serviceId, characteristicId, typedArray.buffer, (address /
			len))
		if (qq == false) {
			console.log("返回", sum);
			return
		}
		address = address + 176;
		// //console.log("送数据", qq)
	}
	const data = await fetchData();
	// return new Promise
	var value2 = util.write_ota_sum(CMD_IAP_SUM, bufferLength, sum);
	var typedArray2 = new Uint8Array(value2);
	// console.log("送结束数据", value2)
	send_ota_data_num(deviceId, serviceId, characteristicId, typedArray2.buffer, 100);
}



function write_cmd_program_sum(web, sum, deviceId, serviceId, characteristicId, data) {
	var address = 0;
	var len = 0;
	var buf = 0;
	var dv = 0;
	let result;
	console.log("更新122")
	const mtu = 230;
	var value1 = util.write_ota_erase(CMD_IAP_ERASE, 4, 0, 0);
	var typedArray1 = new Uint8Array(value1);
	console.log("翻盖柜", typedArray1)
	console.log("翻盖柜", deviceId)
	console.log("翻盖柜", serviceId)
	console.log("翻盖柜", characteristicId)
	send_ota_data(deviceId, serviceId, characteristicId, typedArray1.buffer);
	// return;
	setTimeout(function () {
		uni.request({
			url: web, //仅为示例，并非真实接口地址。
			//url: 'https://www.zenghi.com/gj/BLE钉钉.bin', //仅为示例，并非真实接口地址。
			// url: 'https://www.zenghi.com/gj/电子秤.bin', //仅为示例，并非真实接口地址。
			responseType: 'arraybuffer',
			success: (res) => {
				main(res, sum, deviceId, serviceId, characteristicId)
			},
			fail: function (res) {
				console.log("获取失败");
			}
		})
	}
		, 3000);
}


function writeCutomsData(deviceId, serviceId, characteristicId, data) {
	console.log("data", data)
	if (data.sum != undefined) {
		if (data.http != undefined) {
			console.log("升级！ing", data.http)
			write_cmd_program_sum(data.http, data.sum, deviceId, serviceId, characteristicId, data)
		}
	}
	else {


		//console.log("送数据deviceId", deviceId)
		//console.log("送数据serviceId", serviceId)
		//console.log("送数据characteristicId", characteristicId)
		var buffer = string2buffer(data)
		uni.writeBLECharacteristicValue({
			deviceId: deviceId,
			serviceId: serviceId,
			characteristicId: characteristicId,
			value: buffer,
			writeType: 'write',
			success: function (res) {
				//console.log("送数据成功")
			},
			fail: function (res) {
				//console.log("送数据失败", res)
			}
		});
	}
}

let devicesList = [];
function init() {
	let mOnFire = require("./other/onfire.js");
	mDeviceEvent = require("./xBlufi.js");
	util = require("./util.js");
	uni.onBLEConnectionStateChange(function (res) {
		console.log("蓝牙状态改变", re_connect)
		console.log("conn", res.connected)
		if (re_connect == 0) {
			let obj = {
				'type': mDeviceEvent.XBLUFI_TYPE.TYPE_STATUS_CONNECTED,
				'result': res.connected,
				'data': res
			};
			mDeviceEvent.notifyDeviceMsgEvent(obj);
		}
		else{
			re_connect--;
			}

	});
	mDeviceEvent.listenStartDiscoverBle(true, function (options) {
		if (options.isStart) {
			//第一步检查蓝牙适配器是否可用
			uni.onBluetoothAdapterStateChange(function (res) {
				if (!res.available) { }
			}); //第二步关闭适配器，重新来搜索

			uni.closeBluetoothAdapter({
				complete: function (res) {
					// console.log("这里蓝牙数据")
					uni.openBluetoothAdapter({
						success: function (res) {
							uni.getBluetoothAdapterState({
								success: function (res) {
									// console.log("这里蓝牙数据222")
									{
										let countsTimes = 0;
										uni.onBluetoothDeviceFound(function (devices) {
											//剔除重复设备，兼容不同设备API的不同返回值
											var isnotexist = true;

											// console.log('devices',devices);
											if (devices.deviceId) {
												if (devices.advertisData) {
													devices.advertisData = buf2hex(devices.advertisData);
												} else {
													devices.advertisData = '';
												}

												for (var i = 0; i < devicesList.length; i++) {
													if (devices.deviceId === devicesList[i].deviceId) {
														isnotexist = false;
													}
												}

												if (isnotexist) {
													devicesList.push(devices);
												}
											} else if (devices.devices) {
												// console.log(devices.devices[0])
												if (devices.devices[0].name != '开发板'
													&& devices.devices[0].name != '钉子遥控'
													&& devices.devices[0].name != '智能伸缩台'
													&& devices.devices[0].name.indexOf("CT") == -1
													&& devices.devices[0].name.indexOf("BBLE") == -1
													&& devices.devices[0].name.indexOf("CY") == -1
												) {
													isnotexist = false;
												}
												else {
													if (devices.devices[0].name == 'perfectisan-tt') {
														// console.log("改变名字")
														devices.devices[0].name = "钉子科技电动幕"
													}
													if (devices.devices[0].name == '钉子遥控') {
														devices.devices[0].name = "钉子科技智能语音遥控器"
													}
												}

												if (devices.devices[0].advertisData) {
													devices.devices[0].advertisData = buf2hex(devices.devices[0].advertisData);
												} else {
													devices.devices[0].advertisData = '';
												}

												for (var i = 0; i < devicesList.length; i++) {
													if (devices.devices[0].deviceId == devicesList[i].deviceId) {
														isnotexist = false;
													}
												}

												if (isnotexist) {
													devicesList.push(devices.devices[0]);
												}
											} else if (devices[0]) {
												if (devices[0].advertisData) {
													devices[0].advertisData = buf2hex(devices[0].advertisData);
												} else {
													devices[0].advertisData = '';
												}

												for (var i = 0; i < devices_list.length; i++) {
													if (devices[0].deviceId == devicesList[i].deviceId) {
														isnotexist = false;
													}
												}

												if (isnotexist) {
													devicesList.push(devices[0]);
												}
											}
											if (isnotexist == true) {
												console.log("发射设备名称")
												let obj = {
													'type': mDeviceEvent.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS,
													'result': true,
													'data': devicesList
												};
												mDeviceEvent.notifyDeviceMsgEvent(obj);
											}

										});
										uni.startBluetoothDevicesDiscovery({
											allowDuplicatesKey: true,
											success: function (res) {
												let obj = {
													'type': mDeviceEvent.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS_START,
													'result': true,
													'data': res
												};
												mDeviceEvent.notifyDeviceMsgEvent(obj); //开始扫码，清空列表

												devicesList.length = 0;
											},
											fail: function (res) {
												let obj = {
													'type': mDeviceEvent.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS_START,
													'result': false,
													'data': res
												};
												mDeviceEvent.notifyDeviceMsgEvent(obj);
											}
										});
									}
								},
								fail: function (res) {
									let obj = {
										'type': mDeviceEvent.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS_START,
										'result': false,
										'data': res
									};
									mDeviceEvent.notifyDeviceMsgEvent(obj);
								}
							});
						},
						fail: function (res) {
							let obj = {
								'type': mDeviceEvent.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS_START,
								'result': false,
								'data': res
							};
							mDeviceEvent.notifyDeviceMsgEvent(obj);
						}
					});
				}
			});
		} else {
			uni.stopBluetoothDevicesDiscovery({
				success: function (res) {
					clearInterval(tempTimer);
					let obj = {
						'type': mDeviceEvent.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS_STOP,
						'result': true,
						'data': res
					};
					mDeviceEvent.notifyDeviceMsgEvent(obj);
				},
				fail: function (res) {
					let obj = {
						'type': mDeviceEvent.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS_STOP,
						'result': false,
						'data': res
					};
					mDeviceEvent.notifyDeviceMsgEvent(obj);
				}
			});
		}
	});
	//蓝牙链接或者断开
	mDeviceEvent.listenConnectBle(true, function (options) {
		console.log("我要连接？", options.deviceId,options.isStart);
		if (options.isStart) {
			uni.createBLEConnection({
				deviceId: options.deviceId,
				success: function (res) {
					console.log("链接成功？", res);
					self.data.deviceId = options.deviceId;
					mDeviceEvent.notifyDeviceMsgEvent({
						'type': mDeviceEvent.XBLUFI_TYPE.TYPE_CONNECTED,
						'result': true,
						'data': {
							deviceId: options.deviceId,
							name: options.name
						}
					});
				},
				fail: function (res) {
					self.data.deviceId = null;
					mDeviceEvent.notifyDeviceMsgEvent({
						'type': mDeviceEvent.XBLUFI_TYPE.TYPE_CONNECTED,
						'result': false,
						'data': res
					});
				}
			});
		}
		else {
			console.log("断开", options.deviceId);
			//这里重新扫描，保证退出界面能重新获取名字
			devicesList = [];
			 uni.closeBLEConnection({
				deviceId: options.deviceId,
				success: function (res) {
					console.log('断开成功');
					self.data.deviceId = null;
					mDeviceEvent.notifyDeviceMsgEvent({
						'type': mDeviceEvent.XBLUFI_TYPE.TYPE_CLOSE_CONNECTED,
						'result': true,
						'data': {
							deviceId: options.deviceId,
							name: options.name
						}
					});
				},
				fail: function (res) {
					self.data.deviceId = null;
					console.log('断开失败');
					mDeviceEvent.notifyDeviceMsgEvent({
						'type': mDeviceEvent.XBLUFI_TYPE.TYPE_CLOSE_CONNECTED,
						'result': false,
						'data': res
					});
				}
			});
		}
	});
	mDeviceEvent.listenInitBleEsp32(true, function (options) {
		self = null;
		self = {
			data: {
				deviceId: null,
				isConnected: false,
				failure: false,
				value: 0,
				desc: "请耐心等待...",
				isChecksum: true,
				isEncrypt: true,
				flagEnd: false,
				defaultData: 1,
				ssidType: 2,
				passwordType: 3,
				meshIdType: 3,
				deviceId: "",
				ssid: "",
				uuid: "",
				serviceId: "",
				password: "",
				meshId: "",
				processList: [],
				result: [],
				service_uuid: "000000FF-0000-1000-8000-00805F9B34FB",
				characteristic_write_uuid: "0000FF01-0000-1000-8000-00805F9B34FB",
				characteristic_read_uuid: "0000FF02-0000-1000-8000-00805F9B34FB",
				customData: null,
				md5Key: 0
			}
		};
		let deviceId = options.deviceId;
		self.data.deviceId = options.deviceId;
		mac_id = options.deviceId;

		setTimeout(() => {
			get_fuwu(deviceId)
		}, 700);
	});

	mDeviceEvent.listenSendCustomData(true, function (options) {
		self.data.customData = options.customData;
		writeCutomsData(mac_id, self.data.service_uuid, self.data.characteristic_write_uuid, self.data.customData);
	});
}
/****************************** 对外  ***************************************/


module.exports = {
	init: init
};
