Есть ли руководство по использованию привязки libusbk C#? - PullRequest
0 голосов
/ 07 августа 2020

Я как бы новичок в C#, я решил попробовать, потому что слышал, что он похож на Java, для моего первого проекта я решил взглянуть на привязку C# libusbk .

Путем проб и ошибок я смог найти свое устройство и иметь возможность читать и записывать данные, единственная проблема в том, что он позволяет мне отправлять данные только один раз. Мне нужно отправить 197272 байта данных, но я могу отправить только 4096 байтов за раз, и по какой-то причине он успешно выполняется только при одной записи и терпит неудачу при следующей.

Вот мой код, он довольно базовый c, но я просто экспериментирую.

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

Результат такой, как описано выше: первая запись завершается успешно, а следующая - неуспешно. В основном я ищу письменное руководство по использованию этой привязки, примеры в комплекте разработчика не объясняют, как ее использовать. Любая помощь будет оценена по достоинству.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...