Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

JLDeviceWechat+33Protocol.js 12KB

1
  1. var TAG='JLDeviceWechar+33Protocol';var onfire=require('./onfire');var request33=require('./JLObuWechat33Pack.js');var recive33=require('./JLObuWecha33UnPackt.js');var config=require('./JLConfig');var ble=require('./JLAlipayBleManager.js');var dataTool=require('./dataTool');var revc_count=0;var sendTimeOut=10000;var connectTimeOut=30000;var wechat_arr=[];var dataArray=[];var isConnect=false;var frame_total=1;var frame_count=1;var fireFlag='';var timeId;var receive_data='';var receive_data_total_len='';var wechat1=false;var wechat2=false;var timeId;var cmd_count=0;var all_cmdArray=[];var flag=0;var result_arr=[];var errMsg_arr=[];export function scanDevice(nameFlag,timeOut,callBack){timeId=setTimeout((res)=>{ble.scan_stopScanBleDevice((res)=>{callBack.call(this,{code:config.timeOutCode(),err_msg:"扫描超时",data:null,msg:''})})},timeOut);ble.scan_stopScanBleDevice((res)=>{ble.scan_StartScanBleDevice(nameFlag,(res)=>{clearTimeout(timeId);console.log('返回上层数据:'+JSON.stringify(res));callBack.call(this,res)})})}export function stopScanDevice(callBack){ble.scan_stopScanBleDevice((res)=>{callBack.call(this,res)})}export function connectDevice(device,callBack){console.log('==========connectDevice_Start==========:'+JSON.stringify(device));config.message.api='connectDevice';receive_data='';if(device==null||device=='undefined'){callBack.call(this,{code:10003,err_msg:'参数错误',data:null,msg:''});return}timeId=setTimeout((res)=>{disConnectDevice();callBack.call(this,{code:config.timeOutCode(),err_msg:'连接超时',data:null,msg:''});config.message.api='';config.message.sendCm=[];config.message.status='';config.message.reciveCmd=[]},connectTimeOut);ble.connectDevice(device,(res)=>{if(res.code==config.successCode()){ble.findDeviceServices(res.data,(res)=>{console.info(JSON.stringify(res));ble.setParams(res.data.id);if(res.code!=config.successCode()){disConnectDevice();clearTimeout(timeId);callBack.call(this,{code:config.bleErrorCode(),err_msg:'连接失败',data:null,msg:''});config.message.api='';config.message.sendCm=[];config.message.status='';config.message.reciveCmd=[]}},(res1)=>{dealReceiveData(res1.data.value,(res)=>{clearTimeout(timeId);config.message.api='';config.message.sendCm=[];config.message.status='';config.message.reciveCmd=[];ICCReset((res)=>{if(res.code==0){callBack.call(this,{code:config.bleSuccessCode(),err_msg:'连接成功,卡片复位成功',data:null,msg:''})}else{disConnectDevice((res)=>{callBack.call(this,{code:config.bleErrorCode(),err_msg:'断开连接,卡片复位失败',data:null,msg:''})})}})})},(res2)=>{})}else{callBack.call(this,res)}})}export function onConnectState(callBack){ble.onDeviceConnectStateChange((res)=>{receive_data='';isConnect=false;dataArray=[];frame_count=0;frame_total=0;onfire.clear();clearTimeout(timeId);config.message.api='';config.message.sendCm=[];config.message.status='';config.message.reciveCmd=[];console.log('返回上层数据:'+JSON.stringify(res));callBack.call(this,res)})}export function disConnectDevice(callBack){receive_data='';ble.disConnectDevice((res)=>{isConnect=false;dataArray=[];frame_count=0;frame_total=0;onfire.clear();clearTimeout(timeId);config.message.api='';config.message.sendCm=[];config.message.status='';config.message.reciveCmd=[];console.log('返回上层数据:'+JSON.stringify(res));callBack.call(this,res)})}export function initAuth(src,mac,callBack){fireFlag=config.Auth();console.log('==========initAuth_Start==========');config.message.api='initAuth';receive_data='';timeOutAction('设备认证超时',callBack);var cmd_arr=request33.obuAuth(src,mac);ble.sendMessageToDevice(cmd_arr,(res)=>{recive33.receiveObuAuth((res)=>{clearTimeout(timeId);console.log('返回上层数据:'+JSON.stringify(res));callBack.call(this,res)})})}export function deviceInfo(callBack){fireFlag=config.DeviceInfo();console.log('==========deviceInfo_Start==========');config.message.api='deviceInfo';receive_data='';timeOutAction('获取设备信息超时',callBack);var cmd_arr=request33.DevicesInfo();ble.sendMessageToDevice(cmd_arr,(res)=>{recive33.receivedeviceinfo((res)=>{clearTimeout(timeId);console.log('返回上层数据:'+JSON.stringify(res));callBack.call(this,res)})})}export function ESAMRset(callBack){fireFlag=config.ResetFlag();console.log('==========ESAMReset_Protocol_Start==========');config.message.api='ESAMReset_Protocol';receive_data='';timeOutAction('ESAM复位超时',callBack);var cmd_arr=request33.ESAMResetReq();ble.sendMessageToDevice(cmd_arr,(res)=>{recive33.receiveReset((res)=>{clearTimeout(timeId);console.log('返回上层数据:'+JSON.stringify(res));callBack.call(this,res)})})}export function ESAMChannel(cmd,callBack){fireFlag=config.ChannelFlag();console.log('==========ESAMChannel_Protocol_Start==========:'+cmd);config.message.api='ESAMChannel_Protocol';var cmd_arr=request33.ESAMChannelTransmission('00',[cmd]);timeOutAction('ESAM透传超时',callBack);ble.sendMessageToDevice(cmd_arr,(res)=>{recive33.receiveChannel((res)=>{clearTimeout(timeId);console.log('返回上层数据:'+JSON.stringify(res));callBack.call(this,res);if(errMsg_arr.length==0){config.message.api='';config.message.sendCmd=[];config.message.status='';config.message.reciveCmd=[]}})})}export function ESAMChannel_CmdArray(cmdArray,callBack){config.message.api='ESAMChannel_CmdArray';cmd_count=cmdArray.length;all_cmdArray=cmdArray;ESAMTransfro((res)=>{callBack.call(this,res)})}function ESAMTransfro(callBack){var cmd=all_cmdArray[flag];var that=this;ESAMChannel(cmd,(res)=>{if(res.code==0){flag++;if(errMsg_arr.length==0){result_arr.push(res.data)}if(flag<cmd_count){ESAMTransfro(callBack)}else{cmd_count=0;all_cmdArray=[];flag=0;if(errMsg_arr.length==0){res.data=result_arr}result_arr=[];config.message.api='';config.message.sendCmd=[];config.message.status='';config.message.reciveCmd=[];callBack.call(this,res)}}else{if(errMsg_arr.length>0){res.err_msg=errMsg_arr[flag]}errMsg_arr=[];cmd_count=0;all_cmdArray=[];flag=0;config.message.api='';config.message.sendCm=[];config.message.status='';config.message.reciveCmd=[];callBack.call(this,res)}})}export function ICCReset(callBack){fireFlag=config.ResetFlag();console.log('==========ICCReset_Protocol_Start==========');config.message.api='ICCReset_Protocol';receive_data='';timeOutAction('ICC复位超时',callBack);var cmd_arr=request33.ICCResetReq();ble.sendMessageToDevice(cmd_arr,(res)=>{recive33.receiveReset((res)=>{clearTimeout(timeId);console.log('返回上层数据:'+JSON.stringify(res));callBack.call(this,res)})})}export function ICCChannel(cmd,callBack){fireFlag=config.ChannelFlag();console.log('==========ICCChannel_Protocol_Start==========:'+cmd);config.message.api='ICCChannel_Protocol';var cmd_arr=request33.ICCChannelTransmission('00',[cmd]);timeOutAction('ICC透传超时',callBack);ble.sendMessageToDevice(cmd_arr,(res)=>{recive33.receiveChannel((res)=>{clearTimeout(timeId);console.log('返回上层数据:'+JSON.stringify(res));callBack.call(this,res);if(errMsg_arr.length==0){config.message.api='';config.message.sendCmd=[];config.message.status='';config.message.reciveCmd=[]}})})}export function ICCChannel_CmdArray(cmdArray,callBack){config.message.api='ICCChannel_CmdArray';cmd_count=cmdArray.length;all_cmdArray=cmdArray;ICCTransfro((res)=>{callBack.call(this,res)})}function ICCTransfro(callBack){var cmd=all_cmdArray[flag];var that=this;ICCChannel(cmd,(res)=>{if(res.code==0){flag++;if(errMsg_arr.length==0){result_arr.push(res.data)}if(flag<cmd_count){ICCTransfro(callBack)}else{cmd_count=0;all_cmdArray=[];flag=0;if(errMsg_arr.length==0){res.data=result_arr}result_arr=[];config.message.api='';config.message.sendCm=[];config.message.status='';config.message.reciveCmd=[];callBack.call(this,res)}}else{if(errMsg_arr.length>0){res.err_msg=errMsg_arr[flag]}cmd_count=0;all_cmdArray=[];result_arr=[];flag=0;config.message.api='';config.message.sendCm=[];config.message.status='';config.message.reciveCmd=[];callBack.call(this,res)}})}export function getCardInfo(callBack){console.log('==========Read_0015_Start==========');config.message.api='read0015File';errMsg_arr=['选择3F00目录失败','选择1001目录失败','读0015文件失败'];ICCChannel_CmdArray(['00A40000023F00','00A40000021001','00B095002B'],(res)=>{errMsg_arr=[];callBack.call(this,res)})}export function getCardholderInfo(callBack){console.log('==========Read_0016_Start==========');config.message.api='read0016File';errMsg_arr=['选择3F00目录失败','读0016文件失败'];ICCChannel_CmdArray(['00A40000023F00','00b0960037'],(res)=>{errMsg_arr=[];callBack.call(this,res)})}export function getCardRandNum(type,callBack){console.log('==========readCardRand_Start==========type:'+type);config.message.api='readCardRand';if(type==0){errMsg_arr=['选择3F00目录失败','选择1001目录失败','读卡0015随机失败'];ICCChannel_CmdArray(['00A40000023F00','00A40000021001','0084000004'],(res)=>{errMsg_arr=[];callBack.call(this,res)})}if(type==1){errMsg_arr=['选择3F00目录失败','读卡0015随机失败'];ICCChannel_CmdArray(['00A40000023F00','0084000004'],(res)=>{errMsg_arr=[];callBack.call(this,res)})}}export function getSystemInfo(callBack){console.log('==========readSystemInfo_Start==========');config.message.api='readSystemInfo';errMsg_arr=['选择3F00目录失败','读系统信息失败'];ESAMChannel_CmdArray(['00A40000023F00','00B081001B'],(res)=>{errMsg_arr=[];callBack.call(this,res)})}export function getCarInfo(rand,callBack){console.log('==========readCarInfo_Start==========');config.message.api='readCarInfo';errMsg_arr=['选择3F00目录失败','选择DF01目录失败','读车辆信息失败'];ESAMChannel_CmdArray(['00A40000023F00','00A4000002DF01','00B400000A'+rand+'3B00'],(res)=>{errMsg_arr=[];callBack.call(this,res)})}export function getObuRadom(type,callBack){console.log('==========readESAMRandInfo_Start==========type:'+type);config.message.api='readESAMRandInfo';if(type==0){errMsg_arr=['选择3F00目录失败','读系统信息随机数失败'];ESAMChannel_CmdArray(['00A40000023F00','0084000004'],(res)=>{errMsg_arr=[];callBack.call(this,res)})}if(type==1){errMsg_arr=['选择3F00目录失败','选择DF01目录失败','读车辆信息随机数失败'];ESAMChannel_CmdArray(['00A40000023F00','00A4000002DF01','0084000004'],(res)=>{errMsg_arr=[];callBack.call(this,res)})}}export function creditForLoad_Init(credit,terminalNo,pinCode,procType,keyIndex,callBack){console.log('==========initCreditForLoad_Start==========');console.log('credit:'+credit+'====terminalNo:'+terminalNo+'====pinCode:'+pinCode+'====procType:'+procType+'====keyIndex:'+keyIndex);config.message.api='initCreditForLoad';errMsg_arr=['选择1001目录失败','选择1001目录失败','验PIN失败','圈存初始化失败'];ICCChannel_CmdArray(['00A40000023F00','00A40000021001','00200000'+dataTool.tenToHex(pinCode.length/2,2)+pinCode,'805000'+procType+'0B'+keyIndex+credit+terminalNo],(res)=>{errMsg_arr=[];callBack.call(this,res)})}export function creditForLoad_Load(mac2,callBack){console.log('==========initCreditForLoad_Start==========mac2:'+mac2);config.message.api='creditForLoad';receive_data='';timeOutAction('圈存写卡失败',callBack);errMsg_arr=['圈存写卡失败'];ICCChannel_CmdArray(['805200000B'+mac2],(res)=>{errMsg_arr=[];callBack.call(this,res)})}function timeOutAction(info,callBack){timeId=setTimeout((res)=>{receive_data='';errMsg_arr=[];callBack.call(this,{code:config.timeOutCode(),err_msg:info,data:null,msg:''})},sendTimeOut)}function dealReceiveData(data,callBack){if(receive_data.length==0&&data.substr(0,4)!='FE01'){return}if(revc_count==0){if(data.substr(0,4)=='FE01'){receive_data+=data;revc_count++}}else{receive_data+=data;revc_count++}var blg=parseInt(receive_data.substring(4,8),16)*2==receive_data.length?true:false;if(blg){var flag_protocol=receive_data.substr(24,2);var flag_wechat=receive_data.substr(8,4);if(flag_protocol=='33'){console.log(TAG+'----fireFlag:'+fireFlag);var pack_count=receive_data.substr(28,2);wechat_arr.push(receive_data);receive_data='';if(pack_count=='80'||pack_count=='00'){onfire.fire(fireFlag,wechat_arr);revc_count==0;wechat_arr=[]}}else if(flag_wechat=='2711'||flag_wechat=='2713'){if(flag_wechat=='2711'){var mac=receive_data.substring(40,44);var cmd_arr=request33.wechatInit1(mac);receive_data='';revc_count==0;ble.sendMessageToDevice(cmd_arr,(res)=>{})}else if(flag_wechat=='2713'){var cmd_arr=request33.wechatInit2(mac);receive_data='';ble.sendMessageToDevice(cmd_arr,(res)=>{receive_data='';revc_count==0;callBack.call(this,{code:config.bleSuccessCode(),msg:'连接成功',data:null})})}else{callBack.call(this,{code:config.bleErrorCode(),msg:'非法连接',data:null})}}else{callBack.call(this,{code:config.bleErrorCode(),msg:'非法连接',data:null})}}}