HarmonyOS 鸿蒙Next USB控制传输(usb.controlTransfer方式)

发布于 1周前 作者 caililin 来自 鸿蒙OS

HarmonyOS 鸿蒙Next USB控制传输(usb.controlTransfer方式)

安卓的USB控制传输:
val length = it.controlTransfer(64, 6, 0, 0, command.rawData, command.rawData.size, 4000)
EDLog.i(“USB 写入数据:${length}”)
var readLength = it.controlTransfer(192, 12, 0, 0, readBuffer, readBuffer.size, 500)
EDLog.i(“USB 读取数据:${readLength}”)

python的USB控制传输:
print(f"发送指令:{buffer}")
assert self.dev.ctrl_transfer(bmRequestType=64, bRequest=6, wValue=0, wIndex=0,
data_or_wLength=buffer) == len(
buffer)
ret = self.dev.ctrl_transfer(bmRequestType=192, bRequest=12, wValue=0, wIndex=0,
data_or_wLength=64)
print(f"接收指令:{ret}")
 

鸿蒙的控制传输:

public controlTransfer(device: usb.USBDevice, buffer: Uint8Array): void {

// 打开设备,获取数据传输通道。
let pipe : usb.USBDevicePipe = usb.connectDevice(device);

let sendBuffer: Uint8Array = buffer
let readBuffer: Uint8Array = new Uint8Array(this.maxLength)

let sendParam: PARA = {
request: 6, reqType: 64, target:0, value: 0, index: 0, data: sendBuffer
};

let readParam: PARA = {
request: 12, reqType: 192, target:0, value: 0, index: 0, data: readBuffer
};

// 发送指令
usb.controlTransfer(pipe, sendParam, 4000).then((dataLength : number) => {
if (dataLength >= 0) {
console.info("usb writeData result write length : " + dataLength);
} else {
console.info(“writeData failed”);
}
}).catch((error : BusinessError) => {
console.info("usb writeData error : " + JSON.stringify(error));
});

// 接收指令
usb.controlTransfer(pipe, readParam, 500).then((dataLength : number) => {
if (dataLength >= 0) {
console.info("usb readData result write length : " + dataLength);
} else {
console.info(“readData failed”);
}
}).catch((error : BusinessError) => {
console.info("usb readData error : " + JSON.stringify(error));
});
}

1 回复

HarmonyOS鸿蒙Next的USB控制传输(usb.controlTransfer方式)主要通过USB API实现,该方式允许应用与USB设备进行数据传输和控制命令传输。在HarmonyOS中,开发者可以使用usbManager等API进行USB设备的控制传输。需要确保设备已连接并获取操作权限,然后调用controlTransfer方法,传入必要的参数如请求类型、请求码、值、索引和数据缓冲区等。如果问题依旧没法解决请加我微信,我的微信是itying888。

回到顶部