const data_trans = getApp() const utils_base64 = require('../../utils/util.js') const websocket_api = require('../../utils/socket_api.js') const get_date_api = require('../../utils/getDate.js') var initData = '以下为操作结果:' var extraLine = []; Page({ data: { log_text: initData, inputText: '', receiveText: '', log_text_area: '', connectedDeviceId: '', services: {}, characteristics: {}, name:'', advertisData:'', connected: true, salt:'', //下拉框相关的. display: 'none', proShow: false, proindex: 0, //255 proData: [], phyAddrInfoLIst: [], //保存物理地址信息,包括中文名,英文名,枚举值 claShow: false, claindex: 0, //255 claData: [], didNameInfoList:[], //保存did信息,包括中文名,英文名 }, add: function (e) { extraLine.push(e) this.setData({ log_text_area: initData + '\n' + extraLine.join('\n') }) }, remove: function (e) { if (extraLine.length > 0) { extraLine.pop(e) this.setData({ log_text_area: initData + '\n' + extraLine.join('\n') }) } }, // 点击下拉专业显示框 selectCom() { var that = this; console.log(that.data.proShow) if (that.data.proShow) { that.setData({ display: 'none' }) } else { that.setData({ display: 'block', }) } that.setData({ proShow: !that.data.proShow, claShow: false }) }, //点击选择部件 optionUnit(e) { var that = this; var phyAddrIndex = e.currentTarget.dataset.proindex; console.log("phyAddrIndex:", phyAddrIndex) console.log("name_cn:", that.data.phyAddrInfoLIst.args[phyAddrIndex].name_cn) console.log("enum_value:", that.data.phyAddrInfoLIst.args[phyAddrIndex].enum_value) that.setData({ proindex: phyAddrIndex, proShow: !that.data.proShow, display: 'none', }) wx.request({ url: 'http://www.id27149.com:2222/codecInfo',//服务器接口地址 method:'POST',//请求类型 header: {'content-type': 'application/json'}, data: {'method':'get_read_did_name_list','args':["BMW_790", that.data.phyAddrInfoLIst.args[phyAddrIndex].enum_value]}, success: function(res) { console.log('请求did列表成功,res:', res.data) //把请求到的原始数据放到phyAddrInfoLIst里 that.setData({ didNameInfoList: res.data }) //把请求到的部件名称放到下拉框列表里面 var did_list = [] for (var i = 0; i < res.data.args.length; i++) { did_list[i] = res.data.args[i][1] } that.setData({ claData: did_list }) }, fail: function() { console.log('请求did列表失败') } }) }, //点击下拉框:功能支持情况 selectFeature() { var that = this; if (that.data.claShow) { that.setData({ display: 'none', }) } else { that.setData({ display: 'block', }) } that.setData({ claShow: !that.data.claShow, proShow: false }) }, optionFeature(e) { var that = this; var claindex = e.currentTarget.dataset.claindex; console.log("optionFeature:", claindex) that.setData({ claindex: claindex, claShow: !that.data.claShow, display: 'none' }) }, //隐藏遮罩层 hiddenShadow:function(){ this.setData({ display:'none', proShow:false, claShow:false }) }, GetSelectListInfo:function(){ var that = this; console.log("按下获取下拉框选择情况按钮") if(that.data.proData != null){ console.log("当前选择物理地址情况如下:") console.log("proindex:", that.data.proindex) console.log("name_cn:", that.data.phyAddrInfoLIst.args[that.data.proindex].name_cn) console.log("enum_value:", that.data.phyAddrInfoLIst.args[that.data.proindex].enum_value) }else{ console.log("部件下拉列表框更新失败") } if(that.data.claData != null){ console.log("当前选择did情况如下:") console.log("optionFeature:", that.data.claindex) console.log("name_en:", that.data.didNameInfoList.args[that.data.claindex][0]) console.log("name_ch:", that.data.didNameInfoList.args[that.data.claindex][1]) }else{ console.log("功能下拉列表框更新失败") } console.log("点击获取信息按钮,向服务器请求did") var phy_enum_val = that.data.phyAddrInfoLIst.args[that.data.proindex].enum_value var did_name = that.data.didNameInfoList.args[that.data.claindex][0] websocket_api.SocketTxMsg( JSON.stringify({ "method": "read_did", "args": {'N_TA':phy_enum_val,'did_list':[did_name]} }), this.WebsocketSendSuccessEvent, this.WebsocketSendFailEvent ) }, //获取文字输入框内容 bindInput: function (e) { this.setData({ inputText: e.detail.value }) console.log(e.detail.value) }, WebsocketSendSuccessEvent:function (res) { console.log("socket发送成功,res:",res) }, WebsocketSendFailEvent:function (res) { console.log("socket发送失败,res:", res) }, // // 获取设备生产日期 // GetManufactureDate: function() // { // console.log("点击获取生产日期按钮,向服务器请求did") // websocket_api.SocketTxMsg( // JSON.stringify({ // "method": "read_did", // "args": {'N_TA':18,'did_list':['UDS_MANUFACTURING_DATA']} // }), // this.WebsocketSendSuccessEvent, // this.WebsocketSendFailEvent // ) // }, // // 获取设备制造厂商 // GetManufacture: function() // { // var data = "521214" // // this.setData({inputText: "521214"}) // this.SendBleData(data) // }, //发送指令 SendBleData: function (str) { var that = this //正常的下发蓝牙数据 if (that.data.connected) { // 把string转换为hex后进行发送 var buffer = data_trans.stringToHexBuffer(str) wx.writeBLECharacteristicValue({ deviceId: that.data.connectedDeviceId, serviceId: '0000FEE7-0000-1000-8000-00805F9B34FB', characteristicId: '000036F5-0000-1000-8000-00805F9B34FB', value: buffer, success: function (res) { console.log('发送成功') } }) } else { wx.showModal({ title: '提示', content: '蓝牙已断开', showCancel: false, success: function (res) { that.setData({ searching: false }) } }) } }, // //点击发送按钮发送指令 // SendButton: function () { // var that = this // console.log("发送蓝牙数据:", that.data.inputText) // this.SendBleData(that.data.inputText) // }, onSocketMessageCallback:function(res){ console.log("收到服务器消息:res", res); if(res == "heartbeat") { console.log("rx server heartbeat") } else { //字符串转为字典. const dict = JSON.parse(res) if(dict['method'] == "send_data"){ console.log("将数据通过蓝牙发送至设备,", dict['args']) this.SendBleData(dict['args']) } else if(dict['method'] == "task_result") { //显示到界面上 var that = this // that.setData({receiveText: JSON.stringify(dict['args'])}) var date = new Date() // var nowtime = util.formatTime(date); this.add(get_date_api.formatTime(date) + ":" + JSON.stringify(dict['args'])) // this.add(JSON.stringify(dict['args'])) // that.setData({log_text_area: JSON.stringify(dict['args'])}) } } }, onLoad: function (options) { var that = this console.log(options) //刚进入界面时请求下下拉框列表 wx.request({ url: 'http://www.id27149.com:2222/codecInfo',//更新下拉框内容服务器接口地址 method:'POST',//请求类型 header: {'content-type': 'application/json'}, data: {'method':'get_device_phy_value_list','args':["BMW_790"]}, success: function(res) { console.log('请求物理列表成功,res:', res.data) //把请求到的原始数据放到phyAddrInfoLIst里 that.setData({ phyAddrInfoLIst: res.data }) //把请求到的部件名称放到下拉框列表里面 var phy_list = [] for (var i = 0; i < res.data.args.length; i++) { phy_list[i] = res.data.args[i].name_cn } that.setData({ proData: phy_list }) console.log("当前选中的物理列表index:", that.data.proindex) console.log("当前选中的物理value:", that.data.phyAddrInfoLIst.args[that.data.proindex].enum_value) //紧接着请求当前物理部件的did list wx.request({ url: 'http://www.id27149.com:2222/codecInfo',//服务器接口地址 method:'POST',//请求类型 header: {'content-type': 'application/json'}, data: {'method':'get_read_did_name_list','args':["BMW_790", that.data.phyAddrInfoLIst.args[that.data.proindex].enum_value]}, success: function(res) { console.log('请求did列表成功,res:', res.data) //把请求到的原始数据放到phyAddrInfoLIst里 that.setData({ didNameInfoList: res.data }) //把请求到的部件名称放到下拉框列表里面 var did_list = [] for (var i = 0; i < res.data.args.length; i++) { did_list[i] = res.data.args[i][1] } that.setData({ claData: did_list }) }, fail: function() { console.log('请求did列表失败') } }) }, fail: function() { console.log('请求物理列表失败') } }) // 设置socket接收到消息的回调 websocket_api.onSocketMessageCallback = this.onSocketMessageCallback; that.setData({ connectedDeviceId: options.connectedDeviceId, name:options.name, advertisData:options.advertisData }) wx.getBLEDeviceServices({ deviceId: that.data.connectedDeviceId, success: function (res) { console.log(res.services) that.setData({ services: res.services }) wx.getBLEDeviceCharacteristics({ deviceId: options.connectedDeviceId, serviceId: res.services[0].uuid, success: function (res) { console.log(res.characteristics) that.setData({ characteristics: res.characteristics }) wx.notifyBLECharacteristicValueChange({ state: true, deviceId: options.connectedDeviceId, serviceId: '0000FEE7-0000-1000-8000-00805F9B34FB', characteristicId: '000036F6-0000-1000-8000-00805F9B34FB', success: function (res) { console.log('启用notify成功') } }) } }) } }) wx.onBLEConnectionStateChange(function (res) { console.log(res.connected) that.setData({ connected: res.connected }) }) //注册接收到蓝牙消息之后的回调函数 //蓝牙设备发送的消息 wx.onBLECharacteristicValueChange(function (res) { var receiveText = data_trans.ab2hex(res.value) console.log('接收到以下蓝牙数据透传至服务器:' + receiveText) //发送至服务器, websocket_api.SocketTxMsg( JSON.stringify({"method": "data","args": receiveText}), this.WebsocketSendSuccessEvent, this.WebsocketSendFailEvent ) // //显示到界面上 // that.setData({receiveText: receiveText}) }) }, onReady: function () { }, onShow: function () { }, onHide: function () { console.log('hide') } })