Compare commits
	
		
			7 Commits
		
	
	
		
			902130f07a
			...
			3d5bba8022
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 3d5bba8022 | ||
|  | 2481438651 | ||
|  | e355f3d283 | ||
|  | 94e060187e | ||
|  | 982fd6273d | ||
|  | fcf41bb2f0 | ||
|  | ef94029967 | 
							
								
								
									
										120
									
								
								entry/src/main/ets/common/service/usbService.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								entry/src/main/ets/common/service/usbService.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,120 @@ | |||||||
|  | // 导入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) => { | ||||||
|  |     console.info(LOGTAG,'正在发送数据') | ||||||
|  |     const {devicepipe,isWXUSBDevice,outEndpoint} = this; | ||||||
|  |     console.info(LOGTAG,'正在发送数据') | ||||||
|  |     if(isWXUSBDevice){ | ||||||
|  |       console.info(LOGTAG,wuXiDataStr) | ||||||
|  |       const codeArr = plcStrToWXCodeArr(wuXiDataStr); | ||||||
|  |       for(let i = 0; i < codeArr.length;i++){ | ||||||
|  |         try { | ||||||
|  |           console.info(LOGTAG,'正在发送数据') | ||||||
|  |           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
 | ||||||
| @ -9,7 +9,7 @@ import Judge from './judgeSDK/judge' | |||||||
| import {defaultJudgeConfigObj} from './judgeSDK/utils//judge-common' | import {defaultJudgeConfigObj} from './judgeSDK/utils//judge-common' | ||||||
| import { | import { | ||||||
|   Project, ProjectObj, MarkRule, CDSBInfo, |   Project, ProjectObj, MarkRule, CDSBInfo, | ||||||
|   SYSTEMPARMARR,CARINFO ,MAPPOINT ,MAPITEMPOINTITEM |   SYSTEMPARMARR,CARINFO ,MAPPOINT ,MAPITEMPOINTITEM,SYSSET | ||||||
| } from './judgeSDK/api/judgeSDK.d' | } from './judgeSDK/api/judgeSDK.d' | ||||||
| import { getCurrentTime, formatTime, getCurrentHourTime,chunkArr } from '../common/utils/tools' | import { getCurrentTime, formatTime, getCurrentHourTime,chunkArr } from '../common/utils/tools' | ||||||
| import { examJudgeEndExam } from './judgeSDK/api/index' | import { examJudgeEndExam } from './judgeSDK/api/index' | ||||||
| @ -29,9 +29,7 @@ struct Index { | |||||||
|   async aboutToAppear() { |   async aboutToAppear() { | ||||||
|     globalThis.windowClass.setWindowSystemBarEnable(['']) |     globalThis.windowClass.setWindowSystemBarEnable(['']) | ||||||
|     const time = await getCurrentTime() |     const time = await getCurrentTime() | ||||||
|     const examSubject = globalThis.carInfo.examSubject |  | ||||||
| 
 | 
 | ||||||
|     this.examSubject = examSubject |  | ||||||
|     this.startTime = time.split(' ')[1] |     this.startTime = time.split(' ')[1] | ||||||
|     this.startFullTime = await getCurrentTime(1); |     this.startFullTime = await getCurrentTime(1); | ||||||
|     this.startHourTime = await getCurrentHourTime() |     this.startHourTime = await getCurrentHourTime() | ||||||
| @ -67,9 +65,8 @@ struct Index { | |||||||
|         ? await this.initSystemKm2Param() |         ? await this.initSystemKm2Param() | ||||||
|         : await this.initSystemKm3Param() |         : await this.initSystemKm3Param() | ||||||
|       await this.initMarkRules(); |       await this.initMarkRules(); | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|       await this.initSysset(); |       await this.initSysset(); | ||||||
|  |     } | ||||||
|     await this.initCDSBInfo() |     await this.initCDSBInfo() | ||||||
| 
 | 
 | ||||||
|     // 科目三新增读取表数据 |     // 科目三新增读取表数据 | ||||||
| @ -122,7 +119,6 @@ struct Index { | |||||||
|         markreal:mark.markreal * 1, |         markreal:mark.markreal * 1, | ||||||
|         markserial:mark.markserial, |         markserial:mark.markserial, | ||||||
|         kfxh:mark.kfxh, |         kfxh:mark.kfxh, | ||||||
|         //TODO 科目三评判新参数 |  | ||||||
|         OnlyOneKind:mark.onlyoneid * 1, |         OnlyOneKind:mark.onlyoneid * 1, | ||||||
|         NoCancelId:mark.nocancelid * 1, |         NoCancelId:mark.nocancelid * 1, | ||||||
|         GPS_SID:mark.gps_sid == 0 ? false : true |         GPS_SID:mark.gps_sid == 0 ? false : true | ||||||
| @ -141,34 +137,44 @@ struct Index { | |||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   // 获取sysset表信息 |   // 获取sysset表信息 | ||||||
|   async initSysset() { |   async initSysset(sysset?:SYSSET[]) { | ||||||
|     const syssetParams = await getSyncData('MA_SYSSET') |     const syssetParams = sysset ||  await getSyncData('MA_SYSSET') | ||||||
|     //@ts-ignore |     //@ts-ignore | ||||||
|     const serialNumberArr = syssetParams.filter(sys => sys.v_no === '901'); |     const serialNumberArr = syssetParams.filter(sys => sys.v_no === '901'); | ||||||
|     this.serialNumber = (serialNumberArr[0] && serialNumberArr[0].v_value) || '123456' |     this.serialNumber = (serialNumberArr[0] && serialNumberArr[0].v_value) || '123456' | ||||||
| 
 |     const {isTrajectoryOpen} = judgeConfig | ||||||
|     const judgeConfig = [] |     const syssetJudgeConfigArr = [] | ||||||
| 
 | 
 | ||||||
|     //@ts-ignore |     //@ts-ignore | ||||||
|     syssetParams.forEach((sys) => { |     syssetParams.forEach((sys) => { | ||||||
|  |       if(isTrajectoryOpen){ | ||||||
|  |         sys.v_no = sys.key; | ||||||
|  |         sys.v_name = sys.name; | ||||||
|  |         sys.v_value = sys.value | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|       const {v_no,v_value} = sys; |       const {v_no,v_value} = sys; | ||||||
|       const v_no_num = v_no * 1; |       const v_no_num = v_no * 1; | ||||||
|       const value = decodeURIComponent(v_value) |       const value = decodeURIComponent(v_value) | ||||||
|       if(v_no_num >= 10 &&v_no_num <= 900){ |       if(v_no_num >= 10 &&v_no_num <= 900){ | ||||||
|         judgeConfig.push({ |         syssetJudgeConfigArr.push({ | ||||||
|           key: v_no_num,value: value, |           key: v_no_num,value: value, | ||||||
|           name: decodeURI(sys.v_name) |           name: decodeURI(sys.v_name) | ||||||
|         }) |         }) | ||||||
|       } |       } | ||||||
|  |       //科目三应行驶距离参数 | ||||||
|  |       if(sys.v_no == '303'){ | ||||||
|  |         this.examMileage = sys.v_value + ''; | ||||||
|  |       } | ||||||
| 
 | 
 | ||||||
|       this.judgeConfigObj[sys.v_no] = value |       this.judgeConfigObj[sys.v_no] = value | ||||||
|     }); |     }); | ||||||
|     this.judgeConfig = judgeConfig; |     this.judgeConfig = syssetJudgeConfigArr; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   // 初始化systemParam表 |   // 初始化systemParam表 | ||||||
|   async initSystemKm2Param(){ |   async initSystemKm2Param(sysParam?:SYSTEMPARMARR[]){ | ||||||
|     const systemParms:any = await getSyncData('MA_SYSTEMPARM') |     const systemParms:any = sysParam || await getSyncData('MA_SYSTEMPARM') | ||||||
|     const carName = this.carName; |     const carName = this.carName; | ||||||
| 
 | 
 | ||||||
|     let carNo2 = '',allItems = []; |     let carNo2 = '',allItems = []; | ||||||
| @ -232,7 +238,6 @@ struct Index { | |||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|       const {no1,no2,no3,} = systemParm; |       const {no1,no2,no3,} = systemParm; | ||||||
| 
 |  | ||||||
|       this.systemparmArr.push({ |       this.systemparmArr.push({ | ||||||
|         'NO1':no1*1,'NO2':no2*1,'NO3':no3*1, |         'NO1':no1*1,'NO2':no2*1,'NO3':no3*1, | ||||||
|         'TXT1':decodeURIComponent(systemParm.txt1), |         'TXT1':decodeURIComponent(systemParm.txt1), | ||||||
| @ -241,7 +246,6 @@ struct Index { | |||||||
|       }) |       }) | ||||||
| 
 | 
 | ||||||
|       const txt2 = decodeURIComponent(systemParm.txt2) |       const txt2 = decodeURIComponent(systemParm.txt2) | ||||||
| 
 |  | ||||||
|       if (no1 == 6) { |       if (no1 == 6) { | ||||||
|         const currentProject = { |         const currentProject = { | ||||||
|           name: decodeURI(systemParm.txt1), |           name: decodeURI(systemParm.txt1), | ||||||
| @ -253,11 +257,10 @@ struct Index { | |||||||
|         this.projectsCenterObj[txt2] = currentProject |         this.projectsCenterObj[txt2] = currentProject | ||||||
|         this.projects.push(currentProject) |         this.projects.push(currentProject) | ||||||
|       } |       } | ||||||
|       if(no1 == 3 && no2 == 1 && no3 == 15){ |       // if(no1 == 3 && no2 == 1 && no3 == 15){ | ||||||
|         this.examMileage = decodeURI(systemParm.txt1) |       //   this.examMileage = decodeURI(systemParm.txt1) | ||||||
|       } |       // } | ||||||
|     }) |     }) | ||||||
| 
 |  | ||||||
|     const projects = this.projects; |     const projects = this.projects; | ||||||
|     if (!projects.length) { |     if (!projects.length) { | ||||||
|       prompt.showToast({ |       prompt.showToast({ | ||||||
| @ -384,11 +387,9 @@ struct Index { | |||||||
|     }) |     }) | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
|   // 初始化本地systemparam表、markrule表 |   // 初始化本地systemparam表、markrule表 | ||||||
|   async initTrajectoryParam(trajectoryPath:string){ |   async initTrajectoryParam(trajectoryPath:string){ | ||||||
|     const examSubject = globalThis.carInfo.examSubject; |     const {isTrajectoryOpen} = judgeConfig | ||||||
| 
 |  | ||||||
|     //轨迹回放读取 systemparam表、markrule表 |     //轨迹回放读取 systemparam表、markrule表 | ||||||
|     const fileUtil  = new FileUtil(this.context); |     const fileUtil  = new FileUtil(this.context); | ||||||
|     const folderPath = await fileUtil.initFolder(trajectoryPath); |     const folderPath = await fileUtil.initFolder(trajectoryPath); | ||||||
| @ -396,12 +397,16 @@ struct Index { | |||||||
|     const strArr = str.split('\n'); |     const strArr = str.split('\n'); | ||||||
|     const [initData,beginData] = [strArr[0],strArr[1]]; |     const [initData,beginData] = [strArr[0],strArr[1]]; | ||||||
|     const initDataObj = JSON.parse(initData) |     const initDataObj = JSON.parse(initData) | ||||||
| 
 |     const systemparm = initDataObj.systemparm; | ||||||
|  |     const examSubject = globalThis.carInfo.examSubject; | ||||||
|  |     this.examSubject = isTrajectoryOpen ? (initDataObj.kskm*1):examSubject; | ||||||
|  |     globalThis.carInfo.examSubject = this.examSubject | ||||||
|     examSubject == 2 |     examSubject == 2 | ||||||
|       ? await this.initSystemKm2Param() |       ? await this.initSystemKm2Param(systemparm) | ||||||
|       : await this.initSystemKm3Param(initDataObj.systemparm) |       : await this.initSystemKm3Param(systemparm) | ||||||
|     //@ts-ignore |     //@ts-ignore | ||||||
|     await this.initMarkRules(testMarkRules); |     await this.initMarkRules(testMarkRules); | ||||||
|  |     await this.initSysset(initDataObj.sysset); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -778,7 +783,7 @@ struct Index { | |||||||
| 
 | 
 | ||||||
|     const unExitManualProjects = judgeConfigObj['332'].split(',') || []; |     const unExitManualProjects = judgeConfigObj['332'].split(',') || []; | ||||||
|     const param348 = judgeConfigObj['348'] || '0'; |     const param348 = judgeConfigObj['348'] || '0'; | ||||||
|     const param387 = judgeConfigObj['348'] || '0'; |     const param387 = judgeConfigObj['387'] || '0'; | ||||||
| 
 | 
 | ||||||
|     if(judgeConfigObj['342'] === '3' || judgeConfigObj['342'] === '2'){ |     if(judgeConfigObj['342'] === '3' || judgeConfigObj['342'] === '2'){ | ||||||
|       return false |       return false | ||||||
| @ -818,7 +823,7 @@ struct Index { | |||||||
|   @State startFullTime: string = '' |   @State startFullTime: string = '' | ||||||
|   @State startHourTime: string = '' |   @State startHourTime: string = '' | ||||||
|   //科目类型 |   //科目类型 | ||||||
|   @State examSubject: 2 | 3 = 2; |   @State examSubject: 2 | 3 = 3; | ||||||
|   @State ddxkTime: number = 0; |   @State ddxkTime: number = 0; | ||||||
|   @State ddxkKsxmArr: string[] = [''] |   @State ddxkKsxmArr: string[] = [''] | ||||||
|   @State ddxkKfArr: string[] = [''] |   @State ddxkKfArr: string[] = [''] | ||||||
|  | |||||||
| @ -140,6 +140,11 @@ export interface SOUND { | |||||||
|   //语音播放提示代码
 |   //语音播放提示代码
 | ||||||
|   code:string |   code:string | ||||||
| } | } | ||||||
|  | export  interface SYSSET { | ||||||
|  |   v_no:string, | ||||||
|  |   v_name:string, | ||||||
|  |   v_value:string | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| export interface ProjectObj { | export interface ProjectObj { | ||||||
|   [k:any]:Project |   [k:any]:Project | ||||||
|  | |||||||
| @ -18,10 +18,12 @@ import { judgeConfig } from './utils/judge-config' | |||||||
| 
 | 
 | ||||||
| import {writeObjectOut,uploadExamProgressData} from '../../api/judge' | import {writeObjectOut,uploadExamProgressData} from '../../api/judge' | ||||||
| import {deepClone,getCurrentTime,stringToASC,string2Bytes,fillZero,Array2Byte,convertGpsCoord2} from '../../common/utils/tools' | 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 {getTranslateSignals,getCarStatus,getCarStatusType,getCenterProjectStatus,plcStrToJson,plcStrToWXJson,promptWxCode,getKmProjectVoice,senorToWXDataStr}  from './utils//judge-common' | ||||||
| import {examJudgeSetLogCallback,examJudgeBeginExam,examJudgeInit,examJudgeRealExam,examJudgeSetRealExamCallback,examJudgeSetPerformCallback,examJudgeEndExam,examJudgeArtificialMark,examJudgeArtificialItem} from './api/index' | import {examJudgeSetLogCallback,examJudgeBeginExam,examJudgeInit,examJudgeRealExam,examJudgeSetRealExamCallback,examJudgeSetPerformCallback,examJudgeEndExam,examJudgeArtificialMark,examJudgeArtificialItem} from './api/index' | ||||||
| import Want from '@ohos.app.ability.Want'; | import UsbService from '../../common/service/usbService' | ||||||
|  | 
 | ||||||
| import prompt from '@ohos.prompt'; | import prompt from '@ohos.prompt'; | ||||||
|  | import usbManager from '@ohos.usbManager'; | ||||||
| 
 | 
 | ||||||
| const judgeTag = 'SURENJUN_JUDGE' | const judgeTag = 'SURENJUN_JUDGE' | ||||||
| 
 | 
 | ||||||
| @ -40,6 +42,8 @@ export default class Judge{ | |||||||
|     this.fileUtil = new FileUtil(judgeUI.context) |     this.fileUtil = new FileUtil(judgeUI.context) | ||||||
|     this.judgeTask = new JudgeTask() |     this.judgeTask = new JudgeTask() | ||||||
|     const mediaTest= new FilePhoto(judgeUI.context); |     const mediaTest= new FilePhoto(judgeUI.context); | ||||||
|  |     const usbService = new UsbService(); | ||||||
|  |     this.usbService = usbService | ||||||
|     this.filePhoto = mediaTest |     this.filePhoto = mediaTest | ||||||
|     this.kfArr = judgeUI.kfArr |     this.kfArr = judgeUI.kfArr | ||||||
|     this.xmmcStr = '';this.xmmcCode = '';this.carztStr = ''; |     this.xmmcStr = '';this.xmmcCode = '';this.carztStr = ''; | ||||||
| @ -129,6 +133,7 @@ export default class Judge{ | |||||||
|     await examJudgeBeginExam(beginExamInfo); |     await examJudgeBeginExam(beginExamInfo); | ||||||
|     console.info(judgeTag,'6.开始考试注册完成') |     console.info(judgeTag,'6.开始考试注册完成') | ||||||
| 
 | 
 | ||||||
|  |     avPlayer.playAudio(['voice/ksks.WAV']) | ||||||
|     // 处理轨迹plc信息
 |     // 处理轨迹plc信息
 | ||||||
|     if(isTrajectoryOpen){ |     if(isTrajectoryOpen){ | ||||||
|       handleTrajectoryUdp(strArr); |       handleTrajectoryUdp(strArr); | ||||||
| @ -139,7 +144,7 @@ export default class Judge{ | |||||||
|     globalThis.udpClient.onMessage(async (msg) => { |     globalThis.udpClient.onMessage(async (msg) => { | ||||||
|       handleUdp(msg) |       handleUdp(msg) | ||||||
|     }) |     }) | ||||||
|     avPlayer.playAudio(['voice/ksks.WAV']) | 
 | ||||||
| 
 | 
 | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| @ -921,6 +926,7 @@ export default class Judge{ | |||||||
|   handleTrajectoryUdp = async (strArr) => { |   handleTrajectoryUdp = async (strArr) => { | ||||||
|     const {fileLog} = this; |     const {fileLog} = this; | ||||||
|     let num = 2; |     let num = 2; | ||||||
|  |     const {usbService} = this; | ||||||
|     const judgeTimer = setInterval(async ()=>{ |     const judgeTimer = setInterval(async ()=>{ | ||||||
|       const msg = JSON.parse(strArr[num]); |       const msg = JSON.parse(strArr[num]); | ||||||
|       await fileLog.setExamJudgeData(msg) |       await fileLog.setExamJudgeData(msg) | ||||||
| @ -935,6 +941,12 @@ export default class Judge{ | |||||||
|       this.tempData = msg |       this.tempData = msg | ||||||
|       this.plcData= msg |       this.plcData= msg | ||||||
|       globalThis.msgStr= '' |       globalThis.msgStr= '' | ||||||
|  |       const str = await senorToWXDataStr(msg); | ||||||
|  |       //检测到有无锡所设备接入,需要发送特定的数据,供检测
 | ||||||
|  |       if(usbService.isWXUSBDevice){ | ||||||
|  |         usbService.sendUSB(str) | ||||||
|  |       } | ||||||
|  |       console.info(judgeTag,str) | ||||||
|       await examJudgeRealExam(msg) |       await examJudgeRealExam(msg) | ||||||
|       num++ |       num++ | ||||||
|     },200) |     },200) | ||||||
| @ -1000,6 +1012,7 @@ export default class Judge{ | |||||||
|   private xmxh:string |   private xmxh:string | ||||||
|   private fileModel:FileModel |   private fileModel:FileModel | ||||||
|   private filePhoto:FilePhoto |   private filePhoto:FilePhoto | ||||||
|  |   private usbService:any | ||||||
|   //是否是考试模式
 |   //是否是考试模式
 | ||||||
|   private isExam:boolean |   private isExam:boolean | ||||||
|   //考试是否结束了
 |   //考试是否结束了
 | ||||||
|  | |||||||
| @ -301,6 +301,56 @@ export const plcStrToWXJson = async (plc:string) =>{ | |||||||
|   return wuXiDataStr |   return wuXiDataStr | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | export const senorToWXDataStr= async (tempData) => { | ||||||
|  |   const {sensor,gps} = tempData; | ||||||
|  |   const timeStr = await getTimeStr() | ||||||
|  | 
 | ||||||
|  |   const {mkg,aqd,dh1,dh2, zfxd,  yfxd,  jgd,   ygd,ssc ,  jsc,    lhq,  fsc,   lb,   ygq,wd} = sensor | ||||||
|  |   const judgeSignal = [ | ||||||
|  |   //车门 安全带  熄火    发动机启动 左转向 右转向  前照灯近灯 前照灯远灯
 | ||||||
|  |     mkg,   aqd,  dh1,   dh2,   zfxd,  yfxd,  jgd,   ygd, | ||||||
|  |     // 注车制动 行车制动 离合器 副制动   喇叭   雨刷    危险报警灯 示廓灯 系统未涉及的传感器信号
 | ||||||
|  |     ssc ,  jsc,    lhq,  fsc,   lb,   ygq,  0,  0, 0 | ||||||
|  |   ] | ||||||
|  | 
 | ||||||
|  |   const judgeAnotherSignal = [ | ||||||
|  |   // 低三挡位 左侧单边桥1 左侧单边桥2 右侧单边桥1 右侧单边桥2 雾灯
 | ||||||
|  |     '000',    '0',       '0',      '0',      '0',     '0',,'0', | ||||||
|  |     // 桩杆全无信号  左后绕车 右后绕车 右前绕车 左前绕车
 | ||||||
|  |     '000',         '0',   '0',    '0',   '0',   '0','0' | ||||||
|  |   ] | ||||||
|  |   //@ts-ignore
 | ||||||
|  |   const str1 = (judgeSignal.join('')*1).toString(16); | ||||||
|  |   //@ts-ignore
 | ||||||
|  |   const str2 = (judgeAnotherSignal.join('')*1).toString(16); | ||||||
|  | 
 | ||||||
|  |   const wuXiData = [ | ||||||
|  |   //         卫星时间     精度    纬度     高度      方位角    俯仰角    速度角  速度      横滚  卫星定位状态
 | ||||||
|  |     '$KSXT', timeStr,   gps.jd, gps.wd, gps.hbg, gps.hxj, gps.fyj, '0'    , gps.sd, '0',  gps.dwzt, | ||||||
|  |     //前天线可用星数 后天线可用星数 东向坐标位置 北向位置坐标 天向位置坐标  东向速度 北向速度 天向速度
 | ||||||
|  |     '0',            '0',         '0',        '0',       '0',        '0',      '0',    '0','0', | ||||||
|  |     //@ts-ignore 评判信号1 评判信号2 发动机转速
 | ||||||
|  |     // (judgeSignal.join('')*1).toString(16), (judgeAnotherSignal.join('')*1).toString(16) , sensor.fdjzs,
 | ||||||
|  |     '0006', '0001' , sensor.fdjzs, | ||||||
|  |     '0xFFFFFFF' | ||||||
|  |   ] | ||||||
|  |   return wuXiData.map(d => (d + '')).join(','); | ||||||
|  |   // console.log('wuXiData',wuXiData.join(','));
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export const getTimeStr = async () =>{ | ||||||
|  |   const date = await systemTime.getDate() | ||||||
|  |   const timeStr = ''; | ||||||
|  |   const Y = date.getFullYear(); | ||||||
|  |   const M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) ; | ||||||
|  |   const D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()); | ||||||
|  |   const h = (date.getHours() < 10 ? '0' + (date.getHours()) : date.getHours()); | ||||||
|  |   const m = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes()); | ||||||
|  |   const s = (date.getSeconds() < 10 ? '0' + (date.getSeconds()) : date.getSeconds()); | ||||||
|  |   const ss = (date.getMilliseconds() +'').slice(0,2); | ||||||
|  |   return timeStr + Y + M +D +h +m +s +'.' + ss | ||||||
|  | } | ||||||
|  | 
 | ||||||
| //蓝灯
 | //蓝灯
 | ||||||
| export function sendBlue(){ | export function sendBlue(){ | ||||||
|   const arrBlue = [0x55, 0xaa, 0x01, 0x00, 0x02, 0x01, 0x03, 0x00]; |   const arrBlue = [0x55, 0xaa, 0x01, 0x00, 0x02, 0x01, 0x03, 0x00]; | ||||||
|  | |||||||
| @ -3,12 +3,13 @@ | |||||||
| //考试回放开关
 | //考试回放开关
 | ||||||
| export const judgeConfig = { | export const judgeConfig = { | ||||||
|   //本地目录开关
 |   //本地目录开关
 | ||||||
|   isTrajectoryOpen: false, |   isTrajectoryOpen: true, | ||||||
|   //是否开启Udp
 |   //是否开启Udp
 | ||||||
|   udpOpen:false, |   udpOpen:false, | ||||||
|   // 本地模型地址
 |   // 本地模型地址
 | ||||||
|   modelPath: 'models/model_enc', |   modelPath: 'models/model_enc', | ||||||
|   trajectoryPath: 'logs/2024_05_14/0000000000001_342323199501470011_测试学员1_2024_05_14_11_28_31/judge_exam_data.txt' |   // 轨迹回放地址
 | ||||||
|  |   trajectoryPath: 'logs/0000000000001_342323199501470011_测试学员1_1970_01_01_08_44_33/judge_exam_data.txt' | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| //0000000000001_342323199501470011_测试学员1_2024_04_28_10_59_44
 | //0000000000001_342323199501470011_测试学员1_2024_04_28_10_59_44
 | ||||||
| @ -17,7 +18,6 @@ export const judgeConfig = { | |||||||
| 
 | 
 | ||||||
| // 济南轨迹回放
 | // 济南轨迹回放
 | ||||||
| // test_sub3_car_test_jinan-32038219990808021X-20240322173643.txt
 | // test_sub3_car_test_jinan-32038219990808021X-20240322173643.txt
 | ||||||
| 
 |  | ||||||
| // test_sub3_car_test_jinan-32038219990808021X-20240322173643.track
 | // test_sub3_car_test_jinan-32038219990808021X-20240322173643.track
 | ||||||
| // 2024_01_24_11_30_06_2210707689316_620502199005070478_马鸣五
 | // 2024_01_24_11_30_06_2210707689316_620502199005070478_马鸣五
 | ||||||
| // 2024_01_24_10_25_41_2231212226990_330184200208281821_金晓婷
 | // 2024_01_24_10_25_41_2231212226990_330184200208281821_金晓婷
 | ||||||
| @ -1,4 +1,5 @@ | |||||||
| import media from '@ohos.multimedia.media'; | import media from '@ohos.multimedia.media'; | ||||||
|  | import prompt from '@ohos.prompt'; | ||||||
| 
 | 
 | ||||||
| const TAG = 'VoiceAnnounce' | const TAG = 'VoiceAnnounce' | ||||||
| 
 | 
 | ||||||
| @ -18,7 +19,6 @@ export default class VoiceAnnounce{ | |||||||
|   async playAudio(urls:string[],shit,callback:Function){ |   async playAudio(urls:string[],shit,callback:Function){ | ||||||
|     const {isStopped,queue} = this; |     const {isStopped,queue} = this; | ||||||
|     this.callback = callback |     this.callback = callback | ||||||
|     console.info('surenjun',JSON.stringify(callback)) |  | ||||||
|     if(shit){ |     if(shit){ | ||||||
|       //队列清空,重新初始化
 |       //队列清空,重新初始化
 | ||||||
|       this.isStopped = true; |       this.isStopped = true; | ||||||
| @ -45,6 +45,7 @@ export default class VoiceAnnounce{ | |||||||
|         await go() |         await go() | ||||||
|         return |         return | ||||||
|       } |       } | ||||||
|  | 
 | ||||||
|       await avPlayer.play(queue[0],callback); |       await avPlayer.play(queue[0],callback); | ||||||
|       this.queue.shift(); |       this.queue.shift(); | ||||||
|       console.info(TAG,JSON.stringify(this.queue),'堆栈弹出'); |       console.info(TAG,JSON.stringify(this.queue),'堆栈弹出'); | ||||||
| @ -73,14 +74,22 @@ class AVPlayer { | |||||||
|     this.endCallback = callback |     this.endCallback = callback | ||||||
|     const avPlayer = await media.createAVPlayer(); |     const avPlayer = await media.createAVPlayer(); | ||||||
|     this.avPlayer = avPlayer; |     this.avPlayer = avPlayer; | ||||||
|     return new Promise(async (resolve)=>{ |     return new Promise(async (resolve,reject) => { | ||||||
|  |       let url = '' | ||||||
|       await this.setAVPlayerCallback(()=>{ |       await this.setAVPlayerCallback(()=>{ | ||||||
|         //@ts-ignore
 |         //@ts-ignore
 | ||||||
|         resolve() |         resolve() | ||||||
|       }); |       }); | ||||||
|       let url =  await globalThis.context.resourceManager.getRawFd(name) |       try { | ||||||
|  |          url =  await globalThis.context.resourceManager.getRawFd(name); | ||||||
|          this.avPlayer.fdSrc = url; |          this.avPlayer.fdSrc = url; | ||||||
| 
 |       } catch  (e) { | ||||||
|  |         prompt.showToast({ | ||||||
|  |           message: `${name}语音文件不存在`, | ||||||
|  |           duration: 4000 | ||||||
|  |         }); | ||||||
|  |         resolve(1) | ||||||
|  |       } | ||||||
|     }) |     }) | ||||||
|   } |   } | ||||||
|   //音频播放队列
 |   //音频播放队列
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user