usbIsolate function

void usbIsolate(
  1. USBIsolateInit initData
)

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();
    }
  });
}