feat:usb调试
This commit is contained in:
		
							parent
							
								
									711e031fec
								
							
						
					
					
						commit
						489b470e83
					
				| @ -1,15 +1,9 @@ | ||||
| // 导入USB接口api包。
 | ||||
| import usb from '@ohos.usbManager'; | ||||
| const LOGTAG = 'USBSERVICES' | ||||
| 
 | ||||
| function stringToUint8Array(str){ | ||||
|   var arr = []; | ||||
|   for (var i = 0, j = str.length; i < j; ++i) { | ||||
|     arr.push(str.charCodeAt(i)); | ||||
|   } | ||||
|   var tmpUint8Array = new Uint8Array(arr); | ||||
|   return tmpUint8Array | ||||
| } | ||||
| 
 | ||||
| //字符串转字节
 | ||||
| function stringToArr(str){ | ||||
|   var arr = []; | ||||
|   for (var i = 0, j = str.length; i < j; ++i) { | ||||
| @ -18,61 +12,81 @@ function stringToArr(str){ | ||||
|   return arr | ||||
| } | ||||
| 
 | ||||
| //plc数据转成无锡科研所usb字节数据
 | ||||
| function plcStrToWXCodeArr(wuXiDataStr){ | ||||
|   const arr = stringToArr(wuXiDataStr); | ||||
|   //数据包总长度 有效长度
 | ||||
|   let packetSize = 65,maxDataSize = 63; | ||||
|   let packetArr = [] | ||||
|   const loop =  Math.ceil(arr.length / maxDataSize) | ||||
|   for(let i = 0; i< loop; i++){ | ||||
|     const thisPacket = arr.slice(i * maxDataSize,(i + 1) * maxDataSize) | ||||
|     const oSize = maxDataSize - thisPacket.length; | ||||
|     //补齐0x00
 | ||||
|     if(oSize > 0){ | ||||
|       let oSizeArr = [] | ||||
|       for(let j  = 0;j < oSize;j++){oSizeArr.push(0)} | ||||
|       // packetArr.push([0,thisPacket.length].concat(thisPacket).concat(oSizeArr));
 | ||||
|     }else{ | ||||
|       packetArr.push([thisPacket.length].concat(thisPacket)); | ||||
|     } | ||||
|   } | ||||
|   return packetArr | ||||
| } | ||||
| 
 | ||||
| const initUsbServicesFn = () => { | ||||
|   // 获取设备列表。
 | ||||
|   let deviceList : Array<usb.USBDevice> = usb.getDevices(); | ||||
| 
 | ||||
|   deviceList.forEach(async (device:usb.USBDevice) => { | ||||
|     const {vendorId,productId} = device; | ||||
|     console.log('surenjun',JSON.stringify(device)); | ||||
|     console.log(LOGTAG,JSON.stringify(device)); | ||||
| 
 | ||||
|     //无锡所检测设备接入
 | ||||
|     if(vendorId === 6790 && productId === 58409){ | ||||
|     // if(vendorId === 2385 && productId === 5734){
 | ||||
|       // 申请操作指定的device的操作权限。
 | ||||
|       try { | ||||
| 
 | ||||
|         let bool = usb.hasRight(device.name); | ||||
|         console.info(LOGTAG,'bool =>' + bool) | ||||
|         const isExit = await usb.requestRight(device.name); | ||||
|         console.info('surenjun',isExit) | ||||
|         console.info(LOGTAG,'isExit =>' + isExit) | ||||
|         if(isExit){ | ||||
|           let devicepipe : usb.USBDevicePipe = usb.connectDevice(device); | ||||
|           let interfaces = device.configs[0].interfaces[0]; | ||||
|           let ret = usb.claimInterface(devicepipe, interfaces,true); | ||||
|           console.info('surenjun',ret); | ||||
|           console.info(LOGTAG,'ret =>' + ret); | ||||
| 
 | ||||
|           if(ret === 0 ){ | ||||
|             let outEndpoint : usb.USBEndpoint = interfaces.endpoints[0]; | ||||
|             const outputData = new Uint8Array(65); // 要发送的数据包
 | ||||
|             setInterval(()=>{ | ||||
|             let outEndpoint : usb.USBEndpoint = interfaces.endpoints[1]; | ||||
|             let inEndpoint : usb.USBEndpoint = interfaces.endpoints[0]; | ||||
|             setInterval(async ()=>{ | ||||
|               const wuXiDataStr = '$KSXT,20240320134841021,118.27269490,32.20290610,46.5220,190.31,0.13,0,5,0.00,3,3,25,20,0,0,0,0,0,0,E046,0081,1308,0xFFFFFFFF*'; | ||||
|               // const wuXiDataStr = '$KSXT,19700101091317.10,117.13159937,31.80907367,24.973,269.4,0.91,,11.232,,4,,,,,,,,,,0005,0001,816,0xFFFFFFF'
 | ||||
|               const arr = stringToArr(wuXiDataStr); | ||||
|               const firstArr = [0x00,63].concat(arr.slice(0,63)); | ||||
|               const secondArr = [0x00,62].concat(arr.slice(64,127)).concat([0x00]); | ||||
|               // $KSXT,19700101091317.10,117.13159937,31.80907367,24.973,269.4,0.91,,11.232,,4,,,,,,,,,,00017,0010,816,0xFFFFFFF
 | ||||
|               // $KSXT,20190719020615.80,117.12960038,31.80900947,23.8370,89.50,1.96,89.90,33.623,0.00,3,3,33,32,-1192.153,-2413.781,-30.162,,,,1.10,1.0,*BB
 | ||||
|               if(wuXiDataStr){ | ||||
|                 // 发送数据,在device信息中选取对应数据发送的endpoint来做数据传输。(endpoint.direction == 0)
 | ||||
|                 console.info('surenjun',firstArr.join(',')) | ||||
|                 let buffer =  new Uint8Array(128); | ||||
|                 usb.bulkTransfer(devicepipe, outEndpoint, buffer).then((dataLength : number) => { | ||||
|                   if (dataLength >= 0) { | ||||
|                     console.info("surenjun usb writeData result write length : " + dataLength); | ||||
|                   } else { | ||||
|                     console.info("surenjun writeData failed"); | ||||
|               const codeArr = plcStrToWXCodeArr(wuXiDataStr); | ||||
|               // console.info(LOGTAG,firstArr)
 | ||||
|               // console.info(LOGTAG,secondArr)
 | ||||
| 
 | ||||
|               for(let i = 0; i < codeArr.length;i++){ | ||||
|                   try { | ||||
|                     console.info(LOGTAG,codeArr[i]) | ||||
|                     const f = await usb.bulkTransfer(devicepipe, outEndpoint, new Uint8Array(codeArr[i])) | ||||
|                     console.info(LOGTAG,f) | ||||
|                   } catch (e) { | ||||
|                     console.info(LOGTAG,JSON.stringify(e)) | ||||
|                   } | ||||
|                 }).catch((error) => { | ||||
|                   console.info(" surenjunusb writeData error : " + JSON.stringify(error)); | ||||
|                 }); | ||||
|               } | ||||
|             },200) | ||||
|             },2000) | ||||
|              | ||||
|           }else{ | ||||
|             console.info('surenjun','usb claimInterface failed') | ||||
|             console.info(LOGTAG,'usb claimInterface failed') | ||||
|           } | ||||
| 
 | ||||
|         }; | ||||
|         }else{ | ||||
|           console.info(LOGTAG,'isExit =>' +'false') | ||||
|         } | ||||
| 
 | ||||
|       } catch (e) { | ||||
| 
 | ||||
|         console.info(LOGTAG,'e=>' + JSON.stringify(e)) | ||||
|       } | ||||
| 
 | ||||
|     } | ||||
| @ -80,4 +94,5 @@ const initUsbServicesFn = () => { | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| export default initUsbServicesFn | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user