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包。
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){
var arr = [];
for (var i = 0, j = str.length; i < j; ++i) {
@ -18,61 +12,81 @@ function stringToArr(str){
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 = () => {
// 获取设备列表。
let deviceList : Array<usb.USBDevice> = usb.getDevices();
deviceList.forEach(async (device:usb.USBDevice) => {
const {vendorId,productId} = device;
console.log('surenjun',JSON.stringify(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('surenjun',isExit)
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('surenjun',ret);
console.info(LOGTAG,'ret =>' + ret);
if(ret === 0 ){
let outEndpoint : usb.USBEndpoint = interfaces.endpoints[0];
const outputData = new Uint8Array(65); // 要发送的数据包
setInterval(()=>{
let outEndpoint : usb.USBEndpoint = interfaces.endpoints[1];
let inEndpoint : usb.USBEndpoint = interfaces.endpoints[0];
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,19700101091317.10,117.13159937,31.80907367,24.973,269.4,0.91,,11.232,,4,,,,,,,,,,0005,0001,816,0xFFFFFFF'
const arr = stringToArr(wuXiDataStr);
const firstArr = [0x00,63].concat(arr.slice(0,63));
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
// $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
if(wuXiDataStr){
// 发送数据在device信息中选取对应数据发送的endpoint来做数据传输。endpoint.direction == 0
console.info('surenjun',firstArr.join(','))
let buffer = new Uint8Array(128);
usb.bulkTransfer(devicepipe, outEndpoint, buffer).then((dataLength : number) => {
if (dataLength >= 0) {
console.info("surenjun usb writeData result write length : " + dataLength);
} else {
console.info("surenjun writeData failed");
const codeArr = plcStrToWXCodeArr(wuXiDataStr);
// console.info(LOGTAG,firstArr)
// console.info(LOGTAG,secondArr)
for(let i = 0; i < codeArr.length;i++){
try {
console.info(LOGTAG,codeArr[i])
const f = await usb.bulkTransfer(devicepipe, outEndpoint, new Uint8Array(codeArr[i]))
console.info(LOGTAG,f)
} catch (e) {
console.info(LOGTAG,JSON.stringify(e))
}
}).catch((error) => {
console.info(" surenjunusb writeData error : " + JSON.stringify(error));
});
}
},200)
},2000)
}else{
console.info('surenjun','usb claimInterface failed')
console.info(LOGTAG,'usb claimInterface failed')
}
};
}else{
console.info(LOGTAG,'isExit =>' +'false')
}
} catch (e) {
console.info(LOGTAG,'e=>' + JSON.stringify(e))
}
}
@ -80,4 +94,5 @@ const initUsbServicesFn = () => {
}
export default initUsbServicesFn