Skip to content
This repository was archived by the owner on Jul 20, 2025. It is now read-only.

Commit 4eb6407

Browse files
committed
API v0.2.0 commit
1 parent cf8a421 commit 4eb6407

File tree

7 files changed

+91
-12
lines changed

7 files changed

+91
-12
lines changed

MetaWear-SDK-Cpp

Submodule MetaWear-SDK-Cpp updated 100 files

examples/anonymous_datasignals.py

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# usage: python anonymous_datasignals.py [mac]
2+
from __future__ import print_function
3+
from mbientlab.metawear import MetaWear, libmetawear, parse_value
4+
from mbientlab.metawear.cbindings import *
5+
from time import sleep
6+
from threading import Event
7+
8+
import platform
9+
import sys
10+
11+
if sys.version_info[0] == 2:
12+
range = xrange
13+
14+
metawear = MetaWear(sys.argv[1])
15+
metawear.connect()
16+
print("Connected")
17+
18+
sync_event = Event()
19+
result = {}
20+
def handler(board, signals, len):
21+
result['length'] = len
22+
result['signals'] = cast(signals, POINTER(c_void_p * len)) if signals is not None else None
23+
sync_event.set()
24+
handler_fn = FnVoid_VoidP_VoidP_UInt(handler)
25+
26+
class DataHandler:
27+
def __init__(self, signal):
28+
raw = libmetawear.mbl_mw_anonymous_datasignal_get_identifier(signal)
29+
self.identifier = cast(raw, c_char_p).value.decode("ascii")
30+
self.data_handler_fn = FnVoid_DataP(lambda ptr: print({"identifier": self.identifier, "epoch": ptr.contents.epoch, "value": parse_value(ptr)}))
31+
32+
libmetawear.mbl_mw_memory_free(raw)
33+
34+
print("Creating anonymous signals")
35+
libmetawear.mbl_mw_settings_set_connection_parameters(metawear.board, 7.5, 7.5, 0, 6000)
36+
sleep(1.0)
37+
libmetawear.mbl_mw_metawearboard_create_anonymous_datasignals(metawear.board, handler_fn)
38+
sync_event.wait()
39+
40+
if (result['signals'] == None):
41+
if (result['length'] != 0):
42+
print("Error creating anonymous signals, status = " + str(result['length']))
43+
else:
44+
print("No active loggers detected")
45+
else:
46+
dl_event = Event()
47+
libmetawear.mbl_mw_logging_stop(metawear.board)
48+
49+
print(str(result['length']) + " active loggers discovered")
50+
handlers = []
51+
for x in range(0, result['length']):
52+
wrapper = DataHandler(result['signals'].contents[x])
53+
libmetawear.mbl_mw_anonymous_datasignal_subscribe(result['signals'].contents[x], wrapper.data_handler_fn)
54+
handlers.append(wrapper)
55+
56+
def progress_update_handler(left, total):
57+
if (left == 0):
58+
dl_event.set()
59+
60+
def unknown_entry_handler(id, epoch, data, length):
61+
print("unknown entry = " + str(id))
62+
63+
print("Downloading log")
64+
progress_update_fn = FnVoid_UInt_UInt(progress_update_handler)
65+
unknown_entry_fn = FnVoid_UByte_Long_UByteP_UByte(unknown_entry_handler)
66+
download_handler= LogDownloadHandler(received_progress_update = progress_update_fn,
67+
received_unknown_entry = unknown_entry_fn, received_unhandled_entry = cast(None, FnVoid_DataP))
68+
libmetawear.mbl_mw_logging_download(metawear.board, 10, byref(download_handler))
69+
dl_event.wait()
70+
71+
print("Download completed")
72+
libmetawear.mbl_mw_macro_erase_all(metawear.board)
73+
libmetawear.mbl_mw_debug_reset_after_gc(metawear.board)
74+
libmetawear.mbl_mw_debug_disconnect(metawear.board)
75+
76+
sleep(1.0)

examples/led.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# usage: python led.py [mac]
12
from mbientlab.metawear import MetaWear, libmetawear
23
from mbientlab.metawear.cbindings import *
34
from time import sleep

examples/multi_device.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# usage: python multi_device [mac1] [mac2] ... [mac(n)]
12
from mbientlab.metawear import MetaWear, libmetawear, parse_value
23
from mbientlab.metawear.cbindings import *
34
from time import sleep
@@ -6,6 +7,9 @@
67
import platform
78
import sys
89

10+
if sys.version_info[0] == 2:
11+
range = xrange
12+
913
class State:
1014
def __init__(self, device):
1115
self.device = device
@@ -17,15 +21,15 @@ def data_handler(self, data):
1721
self.samples+= 1
1822

1923
states = []
20-
for i in xrange(len(sys.argv) - 1):
24+
for i in range(len(sys.argv) - 1):
2125
d = MetaWear(sys.argv[i + 1])
2226
d.connect()
2327
print("Connected to " + d.address)
2428
states.append(State(d))
2529

2630
for s in states:
2731
print("configuring device")
28-
libmetawear.mbl_mw_settings_set_connection_parameters(s.device.board, 7.5, 7.5, 0, 6000);
32+
libmetawear.mbl_mw_settings_set_connection_parameters(s.device.board, 7.5, 7.5, 0, 6000)
2933
libmetawear.mbl_mw_acc_set_odr(s.device.board, 25.0);
3034
libmetawear.mbl_mw_acc_set_range(s.device.board, 16.0);
3135
libmetawear.mbl_mw_acc_write_acceleration_config(s.device.board);

examples/scan_connect.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# usage: python scan_connect.py
12
from mbientlab.metawear import MetaWear
23
from mbientlab.metawear.cbindings import *
34
from gattlib import DiscoveryService

mbientlab/metawear/__init__.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import os
1010
import platform
1111
import requests
12-
import sets
1312
import time
1413
import uuid
1514

@@ -45,8 +44,8 @@ def parse_value(p_data):
4544
"""
4645
if (p_data.contents.type_id == DataTypeId.UINT32):
4746
return cast(p_data.contents.value, POINTER(c_uint)).contents.value
48-
elif (p_data.contents.type_id == DataTypeId.INT32):
49-
return cast(p_data.contents.value, POINTER(c_int).contents).value
47+
elif (p_data.contents.type_id == DataTypeId.INT32 or p_data.contents.type_id == DataTypeId.SENSOR_ORIENTATION):
48+
return cast(p_data.contents.value, POINTER(c_int)).contents.value
5049
elif (p_data.contents.type_id == DataTypeId.FLOAT):
5150
return cast(p_data.contents.value, POINTER(c_float)).contents.value
5251
elif (p_data.contents.type_id == DataTypeId.CARTESIAN_FLOAT):
@@ -87,8 +86,6 @@ def on_notification(self, handle, data):
8786

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

9390
def __init__(self, address, **kwargs):
9491
"""
@@ -148,7 +145,7 @@ def connect(self, **kwargs):
148145
"""
149146
self.gatt.connect(True, channel_type='random')
150147

151-
self.services = sets.Set()
148+
self.services = set()
152149
for s in self.gatt.discover_primary():
153150
self.services.add(s['uuid'])
154151

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

187184
handle = self.characteristics[_gattchar_to_string(ptr_gattchar.contents)]
188-
if self.in_metaboot_mode and ptr_gattchar.contents == MetaWear._METABOOT_CONTROL_POINT:
185+
if (write_type == GattCharWriteType.WITH_RESPONSE):
189186
self.gatt.write_by_handle_async(handle, bytes(bytearray(buffer)), self.response)
190187
else:
191188
self.gatt.write_cmd_by_handle(handle, bytes(bytearray(buffer)))
@@ -292,7 +289,7 @@ def print_dfu_start():
292289
self._on_error = FnVoid_charP(self._dfu_error)
293290

294291
path = self._download_firmware() if 'version' not in kwargs else self._download_firmware(version = kwargs['version'])
295-
buffer = create_string_buffer(bytes(path))
292+
buffer = create_string_buffer(path.encode('ascii'))
296293
self._dfu_delegate = DfuDelegate(on_dfu_started = self._on_started, on_dfu_cancelled = self._on_cancelled,
297294
on_transfer_percentage = self._on_transfer, on_successful_file_transferred = self._on_successful, on_error = self._on_error)
298295
libmetawear.mbl_mw_metawearboard_perform_dfu(self.board, byref(self._dfu_delegate), buffer.raw)

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def run(self):
3232
setup(
3333
name='metawear',
3434
packages=['mbientlab', 'mbientlab.metawear'],
35-
version='0.1.9',
35+
version='0.2.0',
3636
description='Python bindings for the MetaWear C++ SDK by MbientLab',
3737
long_description=open(os.path.join(os.path.dirname(__file__), "README.rst")).read(),
3838
package_data={'mbientlab.metawear': ['libmetawear.so*']},

0 commit comments

Comments
 (0)