usbIsolate function
Implementation
void usbIsolate(USBIsolateInit initData) {
var mainToIsolateStream = ReceivePort();
var dev = bindings.hid_open(
initData.vendorId, initData.productId, Pointer.fromAddress(0));
if (dev.address == 0) {
var errorMsg = toString(bindings.hid_error(Pointer.fromAddress(0)));
Isolate.exit(initData.responsePort,
USBIsolateResponse(USBDeviceStatus.fail, null, errorMsg));
}
initData.responsePort.send(mainToIsolateStream.sendPort);
mainToIsolateStream.listen((data) {
var command = data as USBIsolateCommand;
switch (command.command) {
case USBDeviceCommand.close:
bindings.hid_close(dev);
command.responsePort
.send(USBIsolateResponse(USBDeviceStatus.ok, null, null));
break;
case USBDeviceCommand.readReport:
_readReport(initData, dev, command);
break;
case USBDeviceCommand.writeReport:
_writeReport(initData, dev, command);
break;
default:
Isolate.exit();
}
});
}