feat:无锡usb设备调试
This commit is contained in:
		
							parent
							
								
									982fd6273d
								
							
						
					
					
						commit
						94e060187e
					
				
							
								
								
									
										116
									
								
								entry/src/main/ets/common/service/usbService.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								entry/src/main/ets/common/service/usbService.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,116 @@ | ||||
| // 导入USB接口api包。
 | ||||
| import usb from '@ohos.usbManager'; | ||||
| const LOGTAG = 'USBSERVICES' | ||||
| 
 | ||||
| 
 | ||||
| //字符串转字节
 | ||||
| function stringToArr(str){ | ||||
|   var arr = []; | ||||
|   for (var i = 0, j = str.length; i < j; ++i) { | ||||
|     arr.push(str.charCodeAt(i)); | ||||
|   } | ||||
|   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(0x00)} | ||||
|       packetArr.push([thisPacket.length].concat(thisPacket).concat(oSizeArr)); | ||||
|     }else{ | ||||
|       packetArr.push([thisPacket.length].concat(thisPacket)); | ||||
|     } | ||||
|   } | ||||
|   return packetArr | ||||
| } | ||||
| 
 | ||||
| export default class UsbService{ | ||||
|   private  devicepipe : usb.USBDevicePipe | ||||
|   private  outEndpoint: usb.USBEndpoint | ||||
|   public  isWXUSBDevice:Boolean | ||||
| 
 | ||||
|   constructor() { | ||||
|     //是否是无锡检测设备
 | ||||
|     this.isWXUSBDevice = false | ||||
|     this.devicepipe | ||||
|     this.init() | ||||
|   } | ||||
| 
 | ||||
|   init = async()=>{ | ||||
|     // 获取设备列表。
 | ||||
|     let deviceList : Array<usb.USBDevice> = usb.getDevices(); | ||||
| 
 | ||||
|     deviceList.forEach(async (device:usb.USBDevice) => { | ||||
|       const {vendorId,productId} = 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(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(LOGTAG,'ret =>' + ret); | ||||
| 
 | ||||
|             if(ret === 0 ){ | ||||
|               let outEndpoint : usb.USBEndpoint = interfaces.endpoints[1]; | ||||
|               let inEndpoint : usb.USBEndpoint = interfaces.endpoints[0]; | ||||
|               this.isWXUSBDevice = true; | ||||
|               this.devicepipe = devicepipe | ||||
|               this.outEndpoint = outEndpoint | ||||
| 
 | ||||
|             }else{ | ||||
|               console.info(LOGTAG,'usb claimInterface failed') | ||||
|             } | ||||
| 
 | ||||
|           }else{ | ||||
|             console.info(LOGTAG,'isExit =>' +'false') | ||||
|           } | ||||
| 
 | ||||
|         } catch (e) { | ||||
|           console.info(LOGTAG,'e=>' + JSON.stringify(e)) | ||||
|         } | ||||
| 
 | ||||
|       } | ||||
|     }); | ||||
| 
 | ||||
|   } | ||||
| 
 | ||||
|   sendUSB =async (wuXiDataStr) => { | ||||
|     const {devicepipe,isWXUSBDevice,outEndpoint} = this; | ||||
|     if(isWXUSBDevice){ | ||||
|       const codeArr = plcStrToWXCodeArr(wuXiDataStr); | ||||
|       for(let i = 0; i < codeArr.length;i++){ | ||||
|         try { | ||||
|           const f = await usb.bulkTransfer(devicepipe, outEndpoint, new Uint8Array(codeArr[i])) | ||||
|           console.info(LOGTAG,'发送成功数据长度为:' + f) | ||||
|         } catch (e) { | ||||
|           console.info(LOGTAG,JSON.stringify(e)) | ||||
|         } | ||||
|       } | ||||
|     }else{ | ||||
|       console.info(LOGTAG,'usb设备初始化失败') | ||||
|     } | ||||
| 
 | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| // export default initUsbServicesFn
 | ||||
| @ -20,8 +20,10 @@ import {writeObjectOut,uploadExamProgressData} from '../../api/judge' | ||||
| import {deepClone,getCurrentTime,stringToASC,string2Bytes,fillZero,Array2Byte,convertGpsCoord2} from '../../common/utils/tools' | ||||
| import {getTranslateSignals,getCarStatus,getCarStatusType,getCenterProjectStatus,plcStrToJson,plcStrToWXJson,promptWxCode,getKmProjectVoice}  from './utils//judge-common' | ||||
| import {examJudgeSetLogCallback,examJudgeBeginExam,examJudgeInit,examJudgeRealExam,examJudgeSetRealExamCallback,examJudgeSetPerformCallback,examJudgeEndExam,examJudgeArtificialMark,examJudgeArtificialItem} from './api/index' | ||||
| import UsbService from '../../common/service/usbService' | ||||
| 
 | ||||
| import prompt from '@ohos.prompt'; | ||||
| import usbManager from '@ohos.usbManager'; | ||||
| 
 | ||||
| const judgeTag = 'SURENJUN_JUDGE' | ||||
| 
 | ||||
| @ -40,6 +42,8 @@ export default class Judge{ | ||||
|     this.fileUtil = new FileUtil(judgeUI.context) | ||||
|     this.judgeTask = new JudgeTask() | ||||
|     const mediaTest= new FilePhoto(judgeUI.context); | ||||
|     const usbService = new UsbService(); | ||||
|     this.usbService = usbService | ||||
|     this.filePhoto = mediaTest | ||||
|     this.kfArr = judgeUI.kfArr | ||||
|     this.xmmcStr = '';this.xmmcCode = '';this.carztStr = ''; | ||||
| @ -1001,6 +1005,7 @@ export default class Judge{ | ||||
|   private xmxh:string | ||||
|   private fileModel:FileModel | ||||
|   private filePhoto:FilePhoto | ||||
|   private usbService:UsbService | ||||
|   //是否是考试模式
 | ||||
|   private isExam:boolean | ||||
|   //考试是否结束了
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user