Я как бы новичок в 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.");
}
}
}
}
Результат такой, как описано выше: первая запись завершается успешно, а следующая - неуспешно. В основном я ищу письменное руководство по использованию этой привязки, примеры в комплекте разработчика не объясняют, как ее использовать. Любая помощь будет оценена по достоинству.