0

我对 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.");
                }
            }
        }
    }

输出如上所述,第一次写入成功,下一次写入失败。我主要关注的是如何使用此绑定的书面指南,开发工具包中的示例并未解释如何使用它。任何帮助将不胜感激。

4

0 回答 0