public SeekThermal(WinUSBEnumeratedDevice dev) { device = new WinUSBDevice(dev); // device setup sequence try { device.ControlTransferOut(0x41, 0x54, 0, 0, new byte[] { 0x01 }); } catch { // Try deinit device and repeat. Deinit(); device.ControlTransferOut(0x41, 0x54, 0, 0, new byte[] { 0x01 }); } device.ControlTransferOut(0x41, 0x3c, 0, 0, new byte[] { 0x00, 0x00 }); byte[] data1 = device.ControlTransferIn(0xC1, 0x4e, 0, 0, 4); byte[] data2 = device.ControlTransferIn(0xC1, 0x36, 0, 0, 12); // Analysis of 0x56 payload: // First byte seems to be half the size of the output data. // It seems like this command may be retriving some sensor data? device.ControlTransferOut(0x41, 0x56, 0, 0, new byte[] { 0x20, 0x00, 0x30, 0x00, 0x00, 0x00 }); byte[] data3 = device.ControlTransferIn(0xC1, 0x58, 0, 0, 0x40); device.ControlTransferOut(0x41, 0x56, 0, 0, new byte[] { 0x20, 0x00, 0x50, 0x00, 0x00, 0x00 }); byte[] data4 = device.ControlTransferIn(0xC1, 0x58, 0, 0, 0x40); device.ControlTransferOut(0x41, 0x56, 0, 0, new byte[] { 0x0C, 0x00, 0x70, 0x00, 0x00, 0x00 }); byte[] data5 = device.ControlTransferIn(0xC1, 0x58, 0, 0, 0x18); device.ControlTransferOut(0x41, 0x56, 0, 0, new byte[] { 0x06, 0x00, 0x08, 0x00, 0x00, 0x00 }); byte[] data6 = device.ControlTransferIn(0xC1, 0x58, 0, 0, 0x0c); device.ControlTransferOut(0x41, 0x3E, 0, 0, new byte[] { 0x08, 0x00 }); byte[] data7 = device.ControlTransferIn(0xC1, 0x3D, 0, 0, 2); device.ControlTransferOut(0x41, 0x3E, 0, 0, new byte[] { 0x08, 0x00 }); device.ControlTransferOut(0x41, 0x3C, 0, 0, new byte[] { 0x01, 0x00 }); byte[] data8 = device.ControlTransferIn(0xC1, 0x3D, 0, 0, 2); }