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 {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} 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 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 = '';
|
||||||
@ -1001,6 +1005,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:UsbService
|
||||||
//是否是考试模式
|
//是否是考试模式
|
||||||
private isExam:boolean
|
private isExam:boolean
|
||||||
//考试是否结束了
|
//考试是否结束了
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user