onConnect method

  1. @override
Future<DeviceStatus> onConnect()
override

Callback on connect. Returns the DeviceStatus of the device.

Is to be overridden in sub-classes.

Implementation

@override
Future<DeviceStatus> onConnect() async {
  if (deviceDescriptor?.deviceName == null ||
      deviceDescriptor!.deviceName!.isEmpty) return DeviceStatus.error;

  manager = ESenseManager(id);

  // listen for connection events
  manager?.connectionEvents.listen((event) {
    debug('$runtimeType - $event');

    switch (event.type) {
      case ConnectionType.connected:
        status = DeviceStatus.connected;

        // this is a hack! - don't know why, but the sensorEvents stream
        // needs a kick in the ass to get started...
        manager?.sensorEvents.listen(null);

        // when connected, listen for battery events
        manager!.eSenseEvents.listen((event) {
          if (event is BatteryRead) {
            _voltageLevel = event.voltage ?? 4;
          }
        });

        // set up a timer that asks for the voltage level
        Timer.periodic(const Duration(minutes: 2), (_) {
          if (status == DeviceStatus.connected) {
            manager?.getBatteryVoltage();
          }
        });
        break;
      case ConnectionType.unknown:
        status = DeviceStatus.unknown;
        break;
      case ConnectionType.device_found:
        status = DeviceStatus.connecting;
        break;
      case ConnectionType.device_not_found:
      case ConnectionType.disconnected:
        status = DeviceStatus.disconnected;
        _voltageLevel = null;
        // _eventSubscription?.cancel();
        break;
    }
  });

  manager?.connect();
  return DeviceStatus.connecting;
}