feat:usb调试
This commit is contained in:
		
							parent
							
								
									711e031fec
								
							
						
					
					
						commit
						489b470e83
					
				| @ -1,15 +1,9 @@ | |||||||
| // 导入USB接口api包。
 | // 导入USB接口api包。
 | ||||||
| import usb from '@ohos.usbManager'; | 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){ | function stringToArr(str){ | ||||||
|   var arr = []; |   var arr = []; | ||||||
|   for (var i = 0, j = str.length; i < j; ++i) { |   for (var i = 0, j = str.length; i < j; ++i) { | ||||||
| @ -18,61 +12,81 @@ function stringToArr(str){ | |||||||
|   return arr |   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 = () => { | const initUsbServicesFn = () => { | ||||||
|   // 获取设备列表。
 |   // 获取设备列表。
 | ||||||
|   let deviceList : Array<usb.USBDevice> = usb.getDevices(); |   let deviceList : Array<usb.USBDevice> = usb.getDevices(); | ||||||
| 
 | 
 | ||||||
|   deviceList.forEach(async (device:usb.USBDevice) => { |   deviceList.forEach(async (device:usb.USBDevice) => { | ||||||
|     const {vendorId,productId} = device; |     const {vendorId,productId} = device; | ||||||
|     console.log('surenjun',JSON.stringify(device)); |     console.log(LOGTAG,JSON.stringify(device)); | ||||||
| 
 | 
 | ||||||
|     //无锡所检测设备接入
 |     //无锡所检测设备接入
 | ||||||
|     if(vendorId === 6790 && productId === 58409){ |     if(vendorId === 6790 && productId === 58409){ | ||||||
|     // if(vendorId === 2385 && productId === 5734){
 |     // if(vendorId === 2385 && productId === 5734){
 | ||||||
|       // 申请操作指定的device的操作权限。
 |       // 申请操作指定的device的操作权限。
 | ||||||
|       try { |       try { | ||||||
| 
 |         let bool = usb.hasRight(device.name); | ||||||
|  |         console.info(LOGTAG,'bool =>' + bool) | ||||||
|         const isExit = await usb.requestRight(device.name); |         const isExit = await usb.requestRight(device.name); | ||||||
|         console.info('surenjun',isExit) |         console.info(LOGTAG,'isExit =>' + isExit) | ||||||
|         if(isExit){ |         if(isExit){ | ||||||
|           let devicepipe : usb.USBDevicePipe = usb.connectDevice(device); |           let devicepipe : usb.USBDevicePipe = usb.connectDevice(device); | ||||||
|           let interfaces = device.configs[0].interfaces[0]; |           let interfaces = device.configs[0].interfaces[0]; | ||||||
|           let ret = usb.claimInterface(devicepipe, interfaces,true); |           let ret = usb.claimInterface(devicepipe, interfaces,true); | ||||||
|           console.info('surenjun',ret); |           console.info(LOGTAG,'ret =>' + ret); | ||||||
|  | 
 | ||||||
|           if(ret === 0 ){ |           if(ret === 0 ){ | ||||||
|             let outEndpoint : usb.USBEndpoint = interfaces.endpoints[0]; |             let outEndpoint : usb.USBEndpoint = interfaces.endpoints[1]; | ||||||
|             const outputData = new Uint8Array(65); // 要发送的数据包
 |             let inEndpoint : usb.USBEndpoint = interfaces.endpoints[0]; | ||||||
|             setInterval(()=>{ |             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,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 codeArr = plcStrToWXCodeArr(wuXiDataStr); | ||||||
|               const arr = stringToArr(wuXiDataStr); |               // console.info(LOGTAG,firstArr)
 | ||||||
|               const firstArr = [0x00,63].concat(arr.slice(0,63)); |               // console.info(LOGTAG,secondArr)
 | ||||||
|               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
 |               for(let i = 0; i < codeArr.length;i++){ | ||||||
|               // $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
 |                   try { | ||||||
|               if(wuXiDataStr){ |                     console.info(LOGTAG,codeArr[i]) | ||||||
|                 // 发送数据,在device信息中选取对应数据发送的endpoint来做数据传输。(endpoint.direction == 0)
 |                     const f = await usb.bulkTransfer(devicepipe, outEndpoint, new Uint8Array(codeArr[i])) | ||||||
|                 console.info('surenjun',firstArr.join(',')) |                     console.info(LOGTAG,f) | ||||||
|                 let buffer =  new Uint8Array(128); |                   } catch (e) { | ||||||
|                 usb.bulkTransfer(devicepipe, outEndpoint, buffer).then((dataLength : number) => { |                     console.info(LOGTAG,JSON.stringify(e)) | ||||||
|                   if (dataLength >= 0) { |  | ||||||
|                     console.info("surenjun usb writeData result write length : " + dataLength); |  | ||||||
|                   } else { |  | ||||||
|                     console.info("surenjun writeData failed"); |  | ||||||
|                   } |                   } | ||||||
|                 }).catch((error) => { |  | ||||||
|                   console.info(" surenjunusb writeData error : " + JSON.stringify(error)); |  | ||||||
|                 }); |  | ||||||
|               } |               } | ||||||
|             },200) |             },2000) | ||||||
|  |              | ||||||
|           }else{ |           }else{ | ||||||
|             console.info('surenjun','usb claimInterface failed') |             console.info(LOGTAG,'usb claimInterface failed') | ||||||
|           } |           } | ||||||
| 
 | 
 | ||||||
|         }; |         }else{ | ||||||
|  |           console.info(LOGTAG,'isExit =>' +'false') | ||||||
|  |         } | ||||||
| 
 | 
 | ||||||
|       } catch (e) { |       } catch (e) { | ||||||
| 
 |         console.info(LOGTAG,'e=>' + JSON.stringify(e)) | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|     } |     } | ||||||
| @ -80,4 +94,5 @@ const initUsbServicesFn = () => { | |||||||
| 
 | 
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| export default initUsbServicesFn | export default initUsbServicesFn | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user