Skip to content

Commit

Permalink
API v0.2.0 commit
Browse files Browse the repository at this point in the history
  • Loading branch information
scaryghost committed Nov 3, 2017
1 parent cf8a421 commit 4eb6407
Show file tree
Hide file tree
Showing 7 changed files with 91 additions and 12 deletions.
2 changes: 1 addition & 1 deletion MetaWear-SDK-Cpp
Submodule MetaWear-SDK-Cpp updated 100 files
76 changes: 76 additions & 0 deletions examples/anonymous_datasignals.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# usage: python anonymous_datasignals.py [mac]
from __future__ import print_function
from mbientlab.metawear import MetaWear, libmetawear, parse_value
from mbientlab.metawear.cbindings import *
from time import sleep
from threading import Event

import platform
import sys

if sys.version_info[0] == 2:
range = xrange

metawear = MetaWear(sys.argv[1])
metawear.connect()
print("Connected")

sync_event = Event()
result = {}
def handler(board, signals, len):
result['length'] = len
result['signals'] = cast(signals, POINTER(c_void_p * len)) if signals is not None else None
sync_event.set()
handler_fn = FnVoid_VoidP_VoidP_UInt(handler)

class DataHandler:
def __init__(self, signal):
raw = libmetawear.mbl_mw_anonymous_datasignal_get_identifier(signal)
self.identifier = cast(raw, c_char_p).value.decode("ascii")
self.data_handler_fn = FnVoid_DataP(lambda ptr: print({"identifier": self.identifier, "epoch": ptr.contents.epoch, "value": parse_value(ptr)}))

libmetawear.mbl_mw_memory_free(raw)

print("Creating anonymous signals")
libmetawear.mbl_mw_settings_set_connection_parameters(metawear.board, 7.5, 7.5, 0, 6000)
sleep(1.0)
libmetawear.mbl_mw_metawearboard_create_anonymous_datasignals(metawear.board, handler_fn)
sync_event.wait()

if (result['signals'] == None):
if (result['length'] != 0):
print("Error creating anonymous signals, status = " + str(result['length']))
else:
print("No active loggers detected")
else:
dl_event = Event()
libmetawear.mbl_mw_logging_stop(metawear.board)

print(str(result['length']) + " active loggers discovered")
handlers = []
for x in range(0, result['length']):
wrapper = DataHandler(result['signals'].contents[x])
libmetawear.mbl_mw_anonymous_datasignal_subscribe(result['signals'].contents[x], wrapper.data_handler_fn)
handlers.append(wrapper)

def progress_update_handler(left, total):
if (left == 0):
dl_event.set()

def unknown_entry_handler(id, epoch, data, length):
print("unknown entry = " + str(id))

print("Downloading log")
progress_update_fn = FnVoid_UInt_UInt(progress_update_handler)
unknown_entry_fn = FnVoid_UByte_Long_UByteP_UByte(unknown_entry_handler)
download_handler= LogDownloadHandler(received_progress_update = progress_update_fn,
received_unknown_entry = unknown_entry_fn, received_unhandled_entry = cast(None, FnVoid_DataP))
libmetawear.mbl_mw_logging_download(metawear.board, 10, byref(download_handler))
dl_event.wait()

print("Download completed")
libmetawear.mbl_mw_macro_erase_all(metawear.board)
libmetawear.mbl_mw_debug_reset_after_gc(metawear.board)
libmetawear.mbl_mw_debug_disconnect(metawear.board)

sleep(1.0)
1 change: 1 addition & 0 deletions examples/led.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# usage: python led.py [mac]
from mbientlab.metawear import MetaWear, libmetawear
from mbientlab.metawear.cbindings import *
from time import sleep
Expand Down
8 changes: 6 additions & 2 deletions examples/multi_device.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# usage: python multi_device [mac1] [mac2] ... [mac(n)]
from mbientlab.metawear import MetaWear, libmetawear, parse_value
from mbientlab.metawear.cbindings import *
from time import sleep
Expand All @@ -6,6 +7,9 @@
import platform
import sys

if sys.version_info[0] == 2:
range = xrange

class State:
def __init__(self, device):
self.device = device
Expand All @@ -17,15 +21,15 @@ def data_handler(self, data):
self.samples+= 1

states = []
for i in xrange(len(sys.argv) - 1):
for i in range(len(sys.argv) - 1):
d = MetaWear(sys.argv[i + 1])
d.connect()
print("Connected to " + d.address)
states.append(State(d))

for s in states:
print("configuring device")
libmetawear.mbl_mw_settings_set_connection_parameters(s.device.board, 7.5, 7.5, 0, 6000);
libmetawear.mbl_mw_settings_set_connection_parameters(s.device.board, 7.5, 7.5, 0, 6000)
libmetawear.mbl_mw_acc_set_odr(s.device.board, 25.0);
libmetawear.mbl_mw_acc_set_range(s.device.board, 16.0);
libmetawear.mbl_mw_acc_write_acceleration_config(s.device.board);
Expand Down
1 change: 1 addition & 0 deletions examples/scan_connect.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# usage: python scan_connect.py
from mbientlab.metawear import MetaWear
from mbientlab.metawear.cbindings import *
from gattlib import DiscoveryService
Expand Down
13 changes: 5 additions & 8 deletions mbientlab/metawear/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import os
import platform
import requests
import sets
import time
import uuid

Expand Down Expand Up @@ -45,8 +44,8 @@ def parse_value(p_data):
"""
if (p_data.contents.type_id == DataTypeId.UINT32):
return cast(p_data.contents.value, POINTER(c_uint)).contents.value
elif (p_data.contents.type_id == DataTypeId.INT32):
return cast(p_data.contents.value, POINTER(c_int).contents).value
elif (p_data.contents.type_id == DataTypeId.INT32 or p_data.contents.type_id == DataTypeId.SENSOR_ORIENTATION):
return cast(p_data.contents.value, POINTER(c_int)).contents.value
elif (p_data.contents.type_id == DataTypeId.FLOAT):
return cast(p_data.contents.value, POINTER(c_float)).contents.value
elif (p_data.contents.type_id == DataTypeId.CARTESIAN_FLOAT):
Expand Down Expand Up @@ -87,8 +86,6 @@ def on_notification(self, handle, data):

class MetaWear(object):
_METABOOT_SERVICE = uuid.UUID("00001530-1212-efde-1523-785feabcd123")
_METABOOT_CONTROL_POINT = GattChar(service_uuid_high = 0x000015301212efde, service_uuid_low = 0x1523785feabcd123,
uuid_high = 0x000015311212efde, uuid_low = 0x1523785feabcd123)

def __init__(self, address, **kwargs):
"""
Expand Down Expand Up @@ -148,7 +145,7 @@ def connect(self, **kwargs):
"""
self.gatt.connect(True, channel_type='random')

self.services = sets.Set()
self.services = set()
for s in self.gatt.discover_primary():
self.services.add(s['uuid'])

Expand Down Expand Up @@ -185,7 +182,7 @@ def _write_gatt_char(self, caller, write_type, ptr_gattchar, value, length):
buffer.append(value[i])

handle = self.characteristics[_gattchar_to_string(ptr_gattchar.contents)]
if self.in_metaboot_mode and ptr_gattchar.contents == MetaWear._METABOOT_CONTROL_POINT:
if (write_type == GattCharWriteType.WITH_RESPONSE):
self.gatt.write_by_handle_async(handle, bytes(bytearray(buffer)), self.response)
else:
self.gatt.write_cmd_by_handle(handle, bytes(bytearray(buffer)))
Expand Down Expand Up @@ -292,7 +289,7 @@ def print_dfu_start():
self._on_error = FnVoid_charP(self._dfu_error)

path = self._download_firmware() if 'version' not in kwargs else self._download_firmware(version = kwargs['version'])
buffer = create_string_buffer(bytes(path))
buffer = create_string_buffer(path.encode('ascii'))
self._dfu_delegate = DfuDelegate(on_dfu_started = self._on_started, on_dfu_cancelled = self._on_cancelled,
on_transfer_percentage = self._on_transfer, on_successful_file_transferred = self._on_successful, on_error = self._on_error)
libmetawear.mbl_mw_metawearboard_perform_dfu(self.board, byref(self._dfu_delegate), buffer.raw)
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ def run(self):
setup(
name='metawear',
packages=['mbientlab', 'mbientlab.metawear'],
version='0.1.9',
version='0.2.0',
description='Python bindings for the MetaWear C++ SDK by MbientLab',
long_description=open(os.path.join(os.path.dirname(__file__), "README.rst")).read(),
package_data={'mbientlab.metawear': ['libmetawear.so*']},
Expand Down

0 comments on commit 4eb6407

Please sign in to comment.