static ssize_t writeUsbData (GioHandle *handle, const void *data, size_t size, int timeout) { UsbChannel *channel = handle->usb.channel; if (channel->definition.outputEndpoint) { return usbWriteEndpoint(channel->device, channel->definition.outputEndpoint, data, size, timeout); } { const UsbSerialOperations *serial = usbGetSerialOperations(channel->device); if (serial) { if (serial->writeData) { return serial->writeData(channel->device, data, size); } } } errno = ENOSYS; return -1; }
static ssize_t usbWriteData_CP2110 (UsbDevice *device, const void *data, size_t size) { const unsigned char *first = data; const unsigned char *next = first; while (size) { unsigned char report[0X40]; size_t count = sizeof(report) - 1; if (count > size) count = size; report[0] = count; memcpy(&report[1], next, count); { ssize_t result = usbWriteEndpoint(device, 2, report, count+1, 1000); if (result == -1) return result; } next += count; size -= count; } return next - first; }
static int writeUsbBytes1 (const unsigned char *buffer, int length) { return usbWriteEndpoint(usb->device, usb->definition.outputEndpoint, buffer, length, 1000); }