123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364 |
- var BLData = {
- openOK: false,//蓝牙是否打开
- BLZT: false,//蓝牙状态是否可用
- BLSO: false,//蓝牙是否正在搜索
- TS: "开始初始化蓝牙模块...",
- }
- var dayinok=false;//连接成功时,记录为 true,检测到断开后记录为false;
- var lianjieing=false;//记录是否正在尝试连接
- var dayinji = {
- uuid: "",
- suuid: "",
- nuuid: ""
- }//已连接的蓝牙设备 uuid
- var BLSB = new Array();//记录已搜索到的蓝牙设备
- function GETData() {
- return BLData;
- }
- function chonglian(back){
- console.log(dayinok)
- if(dayinok==true){
- back('ok');
- return;
- }else{
- back('设备未打开蓝牙');
- return;
- }
- if(lianjieing==true){
- back("正在尝试连接请稍后");
- return;
- }
- try {
- var value = wx.getStorageSync('dayinji')
- if (value) {
- //重新初始化蓝牙
- wx.openBluetoothAdapter({
- success: function (res) {
- lianjie(value.uuid,back);//成功则开始连接
- },
- fail: function (res) {
- lianjieing=false;
- back('请先打开蓝牙');
- BLData.TS = "请先打开蓝牙开关!"
- }
- })
- }
- } catch (e) {
- console.log("读取缓存数据错误:", e)
- }
- }
- function OpenP() {
- BLSB = new Array();
- //先关闭再打开
- wx.closeBluetoothAdapter({
- success: function (res) {
- //初始化蓝牙模块
- wx.openBluetoothAdapter({
- success: function (res) {
- console.log(res.errMsg);
- if (res.errMsg == "openBluetoothAdapter:ok") {
- BLData.openOK = true
- BLData.TS = "蓝牙模块初始化成功!"
- GetBLZT();
- }
- else {
- BLData.TS = "请先打开蓝牙开关!"
- }
- },
- fail: function (res) {
- BLData.TS = "请先打开蓝牙开关!"
- }
- })
- }
- })
-
- //wx.closeBluetoothAdapter 关闭蓝牙模块,使其进入未初始化状态
- }
- function GetBLZT() {
- //获取本机蓝牙适配器状态
- wx.getBluetoothAdapterState({
- success: function (res) {
- if (res.available) {
- BLData.BLZT = true;
- BLData.TS = "蓝牙适配器状态可用";
- SOBL();
- }
- }
- })
- //监听本机蓝牙适配器变化(蓝牙状态变化时触发)
- wx.onBluetoothAdapterStateChange(function (res) {
- if (res.available) {
- BLData.BLZT = true;
- BLData.TS = "蓝牙适配器状态可用";
- SOBL();
- } else {
- BLData.BLZT = false;
- BLData.TS = "蓝牙适配器当前不可用";
- }
- })
- }
- //开始搜索蓝牙设备
- function SOBL() {
- BLData.TS = "开始搜索蓝牙设备";
- wx.startBluetoothDevicesDiscovery({
- success: function (res) {
- if (res.errMsg == "startBluetoothDevicesDiscovery:ok") {
- BLData.BLZT = true;
- BLData.TS = "开始搜索蓝牙设备";
- newSB();
- }
- }
- })
- }
- function newSB(){
- //监听搜索到新设备事件
- wx.onBluetoothDeviceFound(function (res) {
- //console.log(res)
- var SB = {
- name: "",
- id: "",
- tp: "",
- dis: false,
- LJ: "1",
- LJOK: "0"
- };
- BLData.TS = "搜索到蓝牙设备";
- console.log("localName:", res.devices[0].localName)
- if (res.devices[0].localName == "" || !res.devices[0].localName) {
- return;
- }
- if (chongfu(res.devices[0].deviceId)) {
- return;
- }
- SB.name = res.devices[0].localName;
- SB.id = res.devices[0].deviceId;
- var xh = res.devices[0].RSSI
- if (xh > -70) {
- SB.tp = "xinhao5"
- } else if (xh > -85) {
- SB.tp = "xinhao4"
- }
- else if (xh > -90) {
- SB.tp = "xinhao3"
- }
- else if (xh > -100) {
- SB.tp = "xinhao2"
- }
- else {
- SB.tp = "xinhao1"
- }
- SB.dis = false;
- SB.LJ = "0";
- BLSB.push(SB)
- //console.log(SB)
- })
- }
- function chongfu(uuid) {
- var iscf=false;
- for (var x in BLSB) {
- if (BLSB[x].id == uuid) {
- iscf=true
- }
- }
- return iscf;
- }
- function GETSB() {
- return BLSB;
- }
- function stopSO(){
- console.log("停止搜索:")
- wx.stopBluetoothDevicesDiscovery({
- success: function (res) {
- console.log("停止搜索成功:",res)
- wx.onBluetoothAdapterStateChange(function (res) {
- console.log(`adapterState changed, now is`, res)
- })
- }, fail: function (res) {
- console.log("停止搜索失败:", res)
- }
- })
- }
- function stopBL() {
- wx.stopBluetoothDevicesDiscovery({
- success: function (res) {
- wx.closeBluetoothAdapter({
- success: function (resx) {
- console.log(resx)
- }
- })
- }
- })
- }
- var lcs = 0;//尝试连接的次数
- var cgcs = 0;//成功连接的次数
- var jianting = false;
- function lianjie(uuid,back) {
- if(lianjieing==true){
- back("正在尝试连接,请稍后再试");
- return;
- }
- if (dayinji.uuid != "" && dayinji.uuid !=uuid)
- {
- duankai(dayinji.uuid,uuid,back);
- console.log("换一个")
- }//如果有已连接的打印,并且uuid 不等于现在要连接的uuid 则 先断开之前的打印机
- else
- {
- lcs = 0;
- cgcs = 0;
- lianjiego(uuid, back);//开始连接
- hidesb(uuid, "1")
- }
- }
- function hidesb(uuid, h) {
- for (var x in BLSB) {
- if (BLSB[x].id == uuid) {
- BLSB[x].LJ = h
- }
- }
- }
- function lianjiego(deviceId,back) {
- lianjieing = true;//记录开始尝试连接
- lcs += 1;
- console.log("第" + lcs + "次尝试连接")
- wx.createBLEConnection({
- deviceId: deviceId,
- success: function (res) {
- //stopSO();
- stopSO();
- cgcs += 1;
- console.log("连接成功.第" + lcs + "次:", res)
- if (cgcs == 1) { jtlj() }
- jianting = false;
- hidesb(deviceId, '2')
- getFW(deviceId,back);//开始获取服务
- }, fail: function (res) {
- console.log("连接失败:", res)
- dayinok=false;
- if (lcs > 5) {
- back('连接失败,请重新配置打印机');
- lianjieing=false;//已经不在尝试连接了
- hidesb(deviceId, "3");
- } else {
- lianjiego(deviceId,back);//再次尝试连接
- }
- }
- })
- }
- function duankai(deviceId,uuid,back) {
- hidesb(deviceId, "0")
- jianting = true;
- wx.closeBLEConnection({
- deviceId: deviceId,
- success: function (res) {
- dayinok = false;
- console.log("断开成功:",res)
- if(uuid!="no"){
- console.log("断开再连接")
- lcs = 0;
- cgcs = 0;
- lianjiego(uuid, back);//开始连接
- hidesb(uuid, "1")
- }
- }
- })
- }
- function jtlj() {
- wx.onBLEConnectionStateChange(function (res) {
- if (res.connected == false && jianting == false) {
- dayinok=false;//记录已断开
- console.log("监测到断开,自动重连");
- hidesb(res.deviceId, "1");
- lcs = 0;
- cgcs = 0;
- lianjiego(res.deviceId,function(res){
- //console.log("打印机断开了连接");
- });
- jianting = true;
- }
- })
- }
- var tzz = 0;
- //获取蓝牙设备所有 service(服务)
- function getFW(deviceId,back) {
- tzz=0;
- wx.getBLEDeviceServices({
- deviceId: deviceId,
- success: function (res) {
- console.log("所有服务:",res)
- for(var p in res.services) {
- if(tzz==1)break;
- getTZ(deviceId, res.services[p].uuid,back);//开始获取特征吗
-
- }
- }
- })
- }
- //获取蓝牙设备某个服务中的所有 characteristic(特征值)
- function getTZ(xuuid, xsuuid,back) {
- if(tzz==1)return;
- wx.getBLEDeviceCharacteristics({
- deviceId: xuuid,
- serviceId: xsuuid,
- success: function (res) {
- // console.log("所有特征值:",res)
- for (var p in res.characteristics) {
- var rr = res.characteristics[p].properties
- console.log(rr)
- //if (rr.notify && rr.read && rr.write) {
- // if (rr.notify && rr.write) {
- if (rr.write) {
- dayinji.uuid = xuuid;
- dayinji.suuid = xsuui3d;
- dayinji.nuuid = res.characteristics[p].uuid;
- console.log("AA当前打印机:uuid:"+dayinji.uuid+"suuid:"+dayinji.suuid+"nuuid:"+dayinji.nuuid);
- wx.setStorage({
- key: "dayinji",
- data: dayinji
- })
- dayinok = true;
- lianjieing=false;
- tzz = 1;
- back('ok');
- break;
- }
- }
- }
- })
- }
- function zdlianjie(){
- try {
- var value = wx.getStorageSync('dayinji')
- if (value) {
- wx.openBluetoothAdapter({
- success: function (res) {
- lianjie(value.uuid,function(re){});
- },
- fail: function (res) {
- BLData.TS = "请先打开蓝牙开关!"
- }
- })
- }
- } catch (e) {
- console.log("读取缓存数据错误:",e)
- }
- }
- module.exports = {
- dayinji: dayinji,//连接的打印机信息
- OpenPrint: OpenP,
- GETData: GETData,
- GETSB: GETSB,
- stopBL: stopBL,
- lianjie: lianjie,
- duankai: duankai,
- zdlj:zdlianjie,
- chonglian:chonglian,
- };
|