This is the code I'm using to try to read and write to the QHY5L-II:
...
#define QHY 0x1618
#define QHY5L_II_M 2336
#define QHY163M 0xC163
int main (int argc, char *argv [])
{
libusb_context *ctx = 0;
setbuf (stdout, NULL);
Pcheck (libusb_init (&ctx));
libusb_set_debug (ctx, 4);
uint32_t c;
printf ("Supports Capability = %s\n", YesNo (libusb_has_capability (LIBUSB_CAP_HAS_CAPABILITY)));
printf ("Supports HotPlug = %s\n", YesNo (libusb_has_capability (LIBUSB_CAP_HAS_HOTPLUG)));
printf ("Supports HIDAccess = %s\n", YesNo (libusb_has_capability (LIBUSB_CAP_HAS_HID_ACCESS)));
printf ("Supports DetachDriver = %s\n", YesNo (libusb_has_capability (LIBUSB_CAP_SUPPORTS_DETACH_KERNEL_DRIVER)));
printf ("\n");
libusb_device **devlist;
ssize_t ndev = libusb_get_device_list (ctx, &devlist);
libusb_device *dev = 0;
libusb_device_descriptor desc;
for (int i = 0; i < ndev; ++i) {
Pcheck (libusb_get_device_descriptor (devlist [i], &desc));
switch (desc.idVendor) {
case QHY:
switch (desc.idProduct) {
case QHY5L_II_M:
case QHY163M:
dev = devlist [i];
break;
default:
printf ("Unrecognized QHY camera %d/%d ignored\n", desc.idVendor, desc.idProduct);
}
}
}
if (dev == 0) {
printf ("No camera found.\n");
exit (1);
}
Pcheck (libusb_get_device_descriptor (dev, &desc));
libusb_device_handle *cam;
Pcheck (libusb_open (dev, &cam));
printf ("Camera %04x/%04x found and opened.\n", desc.idVendor, desc.idProduct);
// libusb_free_device_list (devlist, 1);
int cx;
Pcheck (libusb_get_configuration (cam, &cx));
printf ("Current configuration = %d\n", cx);
printf ("Claiming...\n");
Pcheck (libusb_claim_interface (cam, 0));
sleep (3);
unsigned int TimeOut = 3000;
unsigned char buff [1024];
memset (buff, '\0', sizeof (buff));
int e;
unsigned req = 0x00 | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE;
printf ("Reading...\n");
e = libusb_control_transfer (cam, 0x80 | req,
0xD2, 0, 0, buff, 64, TimeOut);
printf ("%s\n", ByteString (buff, 64));
memset (buff, '\0', sizeof (buff));
buff [0] = 0xA0;
buff [1] = 0x01;
buff [2] = 0x00;
buff [3] = 0x01;
buff [4] = 0x00;
buff [5] = 0x01;
printf ("Writing...\n");
e = libusb_control_transfer (cam, req, 0xD1, 0, 0, buff, 16, TimeOut);
Pcheck (e);
libusb_close (cam);
libusb_exit (ctx);
return 0;
}