Source code for obci.drivers.eeg.driver_discovery.amplifier_tmsi_bt_discovery
#!/usr/bin/python
# -*- coding: utf-8 -*-
import json
import bluetooth
import os
from obci.control.launcher.launcher_tools import obci_root, READY_TO_LAUNCH
_DESC_BASE_PATH = os.path.join(obci_root(), 'drivers/eeg/driver_discovery')
_TYPES = ['Porti7', 'MobiMini', 'Mobi5']
_BT_DESCS = {
'Porti7': 'amplifier_porti7_bluetooth.json',
'MobiMini': 'amplifier_mobimini.json',
'Mobi5': 'amplifier_mobi5.json'
}
_AMP_PEER = 'drivers/eeg/cpp_amplifiers/amplifier_tmsi.py'
_AMP_EXECUTABLE = 'tmsi_amplifier'
_SCENARIO = 'scenarios/amplifier/tmsi_amp_signal.ini'
def _find_bluetooth_amps():
try:
nearby_devices = bluetooth.discover_devices(duration=3, lookup_names=True)
except bluetooth.BluetoothError as e:
print("ERROR: ", str(e))
nearby_devices = []
found = []
for addr, name in nearby_devices:
is_amp, amp_type = _check_amp_name(name)
if is_amp:
found.append((addr, name, amp_type))
print("Found bluetooth devices: ", found)
return found
def _check_amp_name(name):
amp_type = ''
for type_ in _TYPES:
if name.startswith(type_):
amp_type = type_
break
name_ok = False
parts = name.split()
if len(parts) == 2:
try:
n = int(parts[1])
except Exception as e:
pass
else:
name_ok = amp_type != ''
return name_ok, amp_type
[docs]def driver_descriptions():
descriptions = []
bt = _find_bluetooth_amps()
print(bt)
for amp in bt:
desc = {
'experiment_info': {
"launch_file_path": _SCENARIO,
'experiment_status': {
'status_name': READY_TO_LAUNCH
}
},
'amplifier_peer_info': {
'driver_executable': _AMP_EXECUTABLE,
'path': _AMP_PEER},
'amplifier_params': {
'additional_params': {'usb_device': '',
'bluetooth_device': ''},
'active_channels': '',
'channel_names': '',
'sampling_rate': ''},
}
print(amp, amp[0], amp[1])
desc['amplifier_params']['additional_params']['bluetooth_device'] = amp[0]
with open(os.path.join(_DESC_BASE_PATH, _BT_DESCS[amp[2]])) as f:
desc['amplifier_params']['channels_info'] = json.load(f)
desc['amplifier_params']['channels_info']['name'] = amp[1]
descriptions.append(desc)
return descriptions