Source code for pymetawear.client

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Main module for PyMetaWear

.. moduleauthor:: hbldh <henrik.blidh@nedomkull.com>

Created on 2016-03-30

"""

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import logging

from mbientlab.metawear import MetaWear, libmetawear

from pymetawear import add_stream_logger, modules


log = logging.getLogger(__name__)

_model_names = [
    "Unknown",
    "MetaWear R",
    "MetaWear RG",
    "MetaWear RPro",
    "MetaWear C",
    "MetaWear CPro",
    "MetaEnvironment",
    "MetaDetector",
    "MetaHealth",
    "MetaTracker",
    "MetaMotion R",
    "MetaMotion C"
]


[docs]class MetaWearClient(object): """A MetaWear communication client. This client bridges the gap between the `MetaWear C++ API <https://github.com/mbientlab/Metawear-CppAPI>`_ and a GATT communication package in Python. It provides Pythonic interface to using the MetaWear boards, allowing for rapid development and testing. :param str address: A Bluetooth MAC address to a MetaWear board. :param str device: Specifying which Bluetooth device to use. Defaults to ``hci0`` on Linux. Not available on Windows. :param bool connect: If client should connect automatically, or wait for explicit :py:meth:`~MetaWearClient.connect` call. Default is ``True``. :param bool debug: If printout of all sent and received data should be done. """ def __init__(self, address, device='hci0', connect=True, debug=False): """Constructor.""" self._address = address self._debug = debug if self._debug: add_stream_logger() log.info("Creating MetaWearClient for {0}...".format(address)) self.mw = MetaWear(self._address, hci_mac=device) log.debug("Client started for BLE device {0}...".format(self._address)) self.accelerometer = None #self.gpio = None self.gyroscope = None self.magnetometer = None self.barometer = None self.ambient_light = None self.switch = None self.settings = None self.temperature = None self.haptic = None self.led = None self.sensorfusion = None if connect: self.connect() @property def board(self): return self.mw.board @property def firmware_version(self): return self.mw.info['firmware'] @property def hardware_version(self): return self.mw.info['hardware'] @property def manufacturer(self): return self.mw.info['manufacturer'] @property def serial(self): return self.mw.info['serial'] @property def model(self): return self.mw.info['model'] def __str__(self): return "MetaWearClient, {0}: {1}".format( self._address, self.mw.info) def __repr__(self): return "<MetaWearClient, {0}>".format(self._address)
[docs] def connect(self): """Connect this client to the MetaWear device.""" self.mw.connect() self._initialize_modules()
[docs] def disconnect(self): """Disconnects this client from the MetaWear device.""" self.mw.disconnect()
def _initialize_modules(self): #self.gpio = modules.GpioModule( # self.board, # libmetawear.mbl_mw_metawearboard_lookup_module( # self.board, modules.Modules.MBL_MW_MODULE_GPIO)) self.accelerometer = modules.AccelerometerModule( self.board, libmetawear.mbl_mw_metawearboard_lookup_module( self.board, modules.Modules.MBL_MW_MODULE_ACCELEROMETER)) self.gyroscope = modules.GyroscopeModule( self.board, libmetawear.mbl_mw_metawearboard_lookup_module( self.board, modules.Modules.MBL_MW_MODULE_GYRO)) self.magnetometer = modules.MagnetometerModule( self.board, libmetawear.mbl_mw_metawearboard_lookup_module( self.board, modules.Modules.MBL_MW_MODULE_MAGNETOMETER)) self.barometer = modules.BarometerModule( self.board, libmetawear.mbl_mw_metawearboard_lookup_module( self.board, modules.Modules.MBL_MW_MODULE_BAROMETER)) self.ambient_light = modules.AmbientLightModule( self.board, libmetawear.mbl_mw_metawearboard_lookup_module( self.board, modules.Modules.MBL_MW_MODULE_AMBIENT_LIGHT)) self.switch = modules.SwitchModule(self.board) self.settings = modules.SettingsModule(self.board) self.temperature = modules.TemperatureModule(self.board) self.haptic = modules.HapticModule(self.board) self.led = modules.LEDModule(self.board) self.sensorfusion = modules.SensorFusionModule( self.board, libmetawear.mbl_mw_metawearboard_lookup_module( self.board, modules.Modules.MBL_MW_MODULE_SENSOR_FUSION))