我对 C# 有点陌生,我决定尝试一下,因为我听说它类似于 Java,对于我的第一个项目,我决定看看 libusbk 的 C# 绑定。
经过反复试验,我找到了我的设备并能够读写数据,唯一的问题是它只能让我发送一次数据。我需要发送 197272 字节的数据,但我一次只能发送 4096 字节,并且由于某种原因,它只能通过一次写入成功,而在下一次写入失败。
这是我的代码,它非常基本,但我只是在试验。
static void Main(string[] args) {
byte[] data = new byte[0x30298];
// Create data to be written
int device_count = 0;
KLST_DEVINFO_HANDLE device_info;
LstK lst = new LstK(KLST_FLAG.NONE);
lst.Count(ref device_count);
while (lst.MoveNext(out device_info)) {
if (device_info.Common.Vid == 0x0955 && device_info.Common.Pid == 0x7321) {
Console.WriteLine("Device detected");
UsbK usb = new UsbK(device_info);
usb.ClaimInterface(0, true);
byte[] read_buffer = new byte[16];
bool readID = usb.ReadPipe(IN_ENDPOINT, read_buffer, 16, out int t, IntPtr.Zero);
int offset = 0;
int chunk_size = 0x1000;
int total_bytes_sent = 0;
while (offset < data.Length) {
int length = offset + chunk_size > data.Length ? (data.Length - offset) % chunk_size : chunk_size;
byte[] temp = new byte[length];
Array.Copy(data, offset, temp, 0, length);
offset += length;
bool transfered = usb.WritePipe(0x01, data, length, out int length_transfered, IntPtr.Zero);
if (transfered) {
Console.WriteLine("Sent " + length_transfered + " bytes to device.");
total_bytes_sent += length_transfered;
} else if (!transfered || length_transfered != length) {
Console.WriteLine("Transfer failed. Sent " + length_transfered + " out of " + length + " bytes to device.");
break;
}
}
if (total_bytes_sent != data.Length) {
Console.WriteLine("Transfer failed.");
}
}
}
}
输出如上所述,第一次写入成功,下一次写入失败。我主要关注的是如何使用此绑定的书面指南,开发工具包中的示例并未解释如何使用它。任何帮助将不胜感激。