Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions example/macos/Flutter/GeneratedPluginRegistrant.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@ import Foundation

import file_picker
import flutter_archive
import path_provider_foundation
import universal_ble

func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
FilePickerPlugin.register(with: registry.registrar(forPlugin: "FilePickerPlugin"))
FlutterArchivePlugin.register(with: registry.registrar(forPlugin: "FlutterArchivePlugin"))
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
UniversalBlePlugin.register(with: registry.registrar(forPlugin: "UniversalBlePlugin"))
}
68 changes: 38 additions & 30 deletions example/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.19.1"
complex:
dependency: transitive
description:
name: complex
sha256: dba084899c0a4bd2fcba9a36760409171d7bee7c35a749cc4451348270361325
url: "https://pub.dev"
source: hosted
version: "0.7.2"
convert:
dependency: transitive
description:
Expand Down Expand Up @@ -186,10 +194,10 @@ packages:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
sha256: "306f0596590e077338312f38837f595c04f28d6cdeeac392d3d74df2f0003687"
sha256: c2fe1001710127dfa7da89977a08d591398370d099aacdaa6d44da7eb14b8476
url: "https://pub.dev"
source: hosted
version: "2.0.32"
version: "2.0.31"
flutter_svg:
dependency: "direct main"
description:
Expand Down Expand Up @@ -232,6 +240,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "4.1.2"
iirjdart:
dependency: transitive
description:
name: iirjdart
sha256: "5bd8aa6af6ee67473fbf7fbbfc7b992d0bb95768a16aaa62e70613389e564df8"
url: "https://pub.dev"
source: hosted
version: "0.1.0"
json_annotation:
dependency: transitive
description:
Expand All @@ -244,26 +260,26 @@ packages:
dependency: transitive
description:
name: leak_tracker
sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0"
url: "https://pub.dev"
source: hosted
version: "11.0.2"
version: "10.0.9"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
url: "https://pub.dev"
source: hosted
version: "3.0.10"
version: "3.0.9"
leak_tracker_testing:
dependency: transitive
description:
name: leak_tracker_testing
sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
url: "https://pub.dev"
source: hosted
version: "3.0.2"
version: "3.0.1"
lints:
dependency: transitive
description:
Expand Down Expand Up @@ -316,10 +332,10 @@ packages:
dependency: "direct main"
description:
name: meta
sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
url: "https://pub.dev"
source: hosted
version: "1.17.0"
version: "1.16.0"
nested:
dependency: transitive
description:
Expand All @@ -328,14 +344,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.0"
objective_c:
dependency: transitive
description:
name: objective_c
sha256: "1f81ed9e41909d44162d7ec8663b2c647c202317cc0b56d3d56f6a13146a0b64"
url: "https://pub.dev"
source: hosted
version: "9.1.0"
open_earable_flutter:
dependency: "direct main"
description:
Expand Down Expand Up @@ -371,18 +379,18 @@ packages:
dependency: transitive
description:
name: path_provider_android
sha256: "95c68a74d3cab950fd0ed8073d9fab15c1c06eb1f3eec68676e87aabc9ecee5a"
sha256: "3b4c1fc3aa55ddc9cd4aa6759984330d5c8e66aa7702a6223c61540dc6380c37"
url: "https://pub.dev"
source: hosted
version: "2.2.21"
version: "2.2.19"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_foundation
sha256: "6192e477f34018ef1ea790c56fffc7302e3bc3efede9e798b934c252c8c105ba"
sha256: "16eef174aacb07e09c351502740fa6254c165757638eba1e9116b0a781201bbd"
url: "https://pub.dev"
source: hosted
version: "2.5.0"
version: "2.4.2"
path_provider_linux:
dependency: transitive
description:
Expand Down Expand Up @@ -560,10 +568,10 @@ packages:
dependency: transitive
description:
name: test_api
sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55
sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
url: "https://pub.dev"
source: hosted
version: "0.7.7"
version: "0.7.4"
tuple:
dependency: transitive
description:
Expand Down Expand Up @@ -624,18 +632,18 @@ packages:
dependency: transitive
description:
name: vector_math
sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
url: "https://pub.dev"
source: hosted
version: "2.2.0"
version: "2.1.4"
vm_service:
dependency: transitive
description:
name: vm_service
sha256: "45caa6c5917fa127b5dbcfbd1fa60b14e583afdc08bfc96dda38886ca252eb60"
sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02
url: "https://pub.dev"
source: hosted
version: "15.0.2"
version: "15.0.0"
web:
dependency: transitive
description:
Expand Down Expand Up @@ -669,5 +677,5 @@ packages:
source: hosted
version: "6.6.1"
sdks:
dart: ">=3.9.0 <4.0.0"
flutter: ">=3.35.0"
dart: ">=3.8.0 <4.0.0"
flutter: ">=3.32.0"
2 changes: 2 additions & 0 deletions lib/open_earable_flutter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'dart:async';

import 'package:logger/logger.dart';
import 'package:meta/meta.dart';
import 'package:open_earable_flutter/src/managers/exg/exg_factory.dart';
import 'package:open_earable_flutter/src/models/devices/cosinuss_one_factory.dart';
import 'package:open_earable_flutter/src/models/devices/esense_factory.dart';
import 'package:open_earable_flutter/src/models/devices/open_earable_factory.dart';
Expand Down Expand Up @@ -106,6 +107,7 @@ class WearableManager {
StreamSubscription<DiscoveredDevice>? _autoconnectScanSubscription;

final List<WearableFactory> _wearableFactories = [
ExGFactory(),
OpenEarableFactory(),
CosinussOneFactory(),
PolarFactory(),
Expand Down
40 changes: 40 additions & 0 deletions lib/src/managers/exg/exg_factory.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import 'package:open_earable_flutter/src/models/devices/cosinuss_one.dart';
import 'package:open_earable_flutter/src/models/devices/discovered_device.dart';
import 'package:open_earable_flutter/src/models/devices/wearable.dart';
import 'package:open_earable_flutter/src/models/wearable_factory.dart';
import 'package:universal_ble/universal_ble.dart';
import 'exg_wearable.dart';


class ExGFactory extends WearableFactory {
// todo ExG Devices are still named OpenEarable-<ident> fixit or keep it index 0 when creating the _wearableFactories
static final RegExp _nameRegex = RegExp(r'^OpenEarable(?:[-_].*)?$');

@override
Future<bool> matches(DiscoveredDevice device, List<BleService> services) async {
final name = (device.name ?? '').trim();
return _nameRegex.hasMatch(name);
}

@override
Future<Wearable> createFromDevice(DiscoveredDevice device, { Set<ConnectionOption> options = const {} }) async {
if (bleManager == null) {
throw Exception("bleManager needs to be set before using the factory");
}
if (disconnectNotifier == null) {
throw Exception("disconnectNotifier needs to be set before using the factory");
}

final name = (device.name ?? '').trim();
if (!_nameRegex.hasMatch(name)) {
throw Exception("device is not an exg device");
}

return ExGWearable(
name: device.name,
disconnectNotifier: disconnectNotifier!,
bleManager: bleManager!,
discoveredDevice: device,
);
}
}
6 changes: 6 additions & 0 deletions lib/src/managers/exg/exg_filter_options.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
class ExGFilterOptions {
static const List<double> lowerCutoffs = [0.5, 1, 5, 10, 15];
static const List<double> higherCutoffs = [20, 30, 40, 50, 60];
static const List<int> samplingFrequencies = [100, 200, 250, 300, 400];
static const List<int> filterOrders = [1, 2, 3, 4];
}
31 changes: 31 additions & 0 deletions lib/src/managers/exg/exg_preset.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
class ExGPreset {
final String name;
final double lowerCutoff;
final double higherCutoff;
final int samplingFrequency;
final int filterOrder;

ExGPreset({
required this.name,
required this.lowerCutoff,
required this.higherCutoff,
required this.samplingFrequency,
required this.filterOrder,
});

Map<String, dynamic> toJson() => {
'name': name,
'lowerCutoff': lowerCutoff,
'higherCutoff': higherCutoff,
'samplingFrequency': samplingFrequency,
'filterOrder': filterOrder,
};

factory ExGPreset.fromJson(Map<String, dynamic> json) => ExGPreset(
name: json['name'],
lowerCutoff: (json['lowerCutoff'] as num).toDouble(),
higherCutoff: (json['higherCutoff'] as num).toDouble(),
samplingFrequency: json['samplingFrequency'],
filterOrder: json['filterOrder'],
);
}
Loading