feat:usb调试

This commit is contained in:
Surenjun 2024-06-19 17:27:28 +08:00
parent 711e031fec
commit 489b470e83

View File

@ -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