|
1 | | -# usage: python log_temp [mac] |
| 1 | +# usage: python log_temp.py [mac] |
2 | 2 | from __future__ import print_function |
3 | | -from mbientlab.metawear import MetaWear, libmetawear, parse_value |
| 3 | +from mbientlab.metawear import MetaWear, libmetawear, parse_value, create_voidp, create_voidp_int |
4 | 4 | from mbientlab.metawear.cbindings import * |
5 | 5 | from time import sleep |
6 | 6 | from threading import Event |
7 | 7 |
|
8 | | -import platform |
9 | 8 | import sys |
10 | 9 |
|
11 | | -if sys.version_info[0] == 2: |
12 | | - range = xrange |
13 | | - |
14 | | -class State: |
15 | | - def __init__(self, device): |
16 | | - self.device = device |
17 | | - |
18 | | - def setup_logger(self): |
19 | | - e = Event() |
20 | | - result = [None] |
21 | | - |
22 | | - def logger_handler(ctx, pointer): |
23 | | - result[0] = RuntimeError("Could not create logger") if pointer == None else pointer |
24 | | - e.set() |
25 | | - fn_wrapper = FnVoid_VoidP_VoidP(logger_handler) |
26 | | - |
27 | | - #streaming and logging |
28 | | - signal = libmetawear.mbl_mw_multi_chnl_temp_get_temperature_data_signal(self.device.board, \ |
29 | | - MetaWearRProChannel.ON_BOARD_THERMISTOR) |
30 | | - libmetawear.mbl_mw_datasignal_log(signal, None, fn_wrapper) |
31 | | - e.wait() |
32 | | - |
33 | | - if (result[0] is RuntimeError): |
34 | | - raise result[0] |
35 | | - |
36 | | - self.logger = result[0] |
37 | | - self.timer = self._setup_timer() |
38 | | - self._setup_read_event(self.timer, signal) |
39 | | - |
40 | | - libmetawear.mbl_mw_logging_start(self.device.board, 0); |
41 | | - libmetawear.mbl_mw_timer_start(self.timer) |
42 | | - |
43 | | - def _setup_timer(self): |
44 | | - e = Event() |
45 | | - result = [None] |
46 | | - |
47 | | - def timer_handler(ctx, pointer): |
48 | | - result[0] = RuntimeError("Could not create timer") if pointer == None else pointer |
49 | | - e.set() |
50 | | - fn_wrapper = FnVoid_VoidP_VoidP(timer_handler) |
51 | | - |
52 | | - libmetawear.mbl_mw_timer_create_indefinite(self.device.board, 1000, 0, None, fn_wrapper) |
53 | | - e.wait() |
54 | | - |
55 | | - if (result[0] is RuntimeError): |
56 | | - raise result[0] |
57 | | - |
58 | | - return result[0] |
59 | | - |
60 | | - def _setup_read_event(self, timer, signal): |
61 | | - e = Event() |
62 | | - result = [None] |
63 | | - |
64 | | - def commands_recorded(ctx, event, status): |
65 | | - result[0] = RuntimeError("Could not create read event") if status != Const.STATUS_OK else None |
66 | | - e.set() |
67 | | - fn_wrapper = FnVoid_VoidP_VoidP_Int(commands_recorded) |
68 | | - |
69 | | - libmetawear.mbl_mw_event_record_commands(timer) |
70 | | - libmetawear.mbl_mw_datasignal_read(signal) |
71 | | - libmetawear.mbl_mw_event_end_record(timer, None, fn_wrapper) |
72 | | - e.wait() |
73 | | - |
74 | | - if (result[0] is RuntimeError): |
75 | | - raise result[0] |
76 | | - |
77 | | - def download_data(self): |
78 | | - libmetawear.mbl_mw_timer_remove(self.timer) |
79 | | - libmetawear.mbl_mw_logging_stop(self.device.board) |
80 | | - |
81 | | - e = Event() |
82 | | - def progress_update_handler(context, entries_left, total_entries): |
83 | | - if (entries_left == 0): |
84 | | - e.set() |
85 | | - |
86 | | - fn_wrapper = FnVoid_VoidP_UInt_UInt(progress_update_handler) |
87 | | - download_handler= LogDownloadHandler(context = None, \ |
88 | | - received_progress_update = fn_wrapper, \ |
89 | | - received_unknown_entry = cast(None, FnVoid_VoidP_UByte_Long_UByteP_UByte), \ |
90 | | - received_unhandled_entry = cast(None, FnVoid_VoidP_DataP)) |
91 | | - |
92 | | - callback = FnVoid_VoidP_DataP(lambda ctx, p: print("%f" % (parse_value(p)))) |
93 | | - libmetawear.mbl_mw_logger_subscribe(self.logger, None, callback) |
94 | | - libmetawear.mbl_mw_logging_download(self.device.board, 0, byref(download_handler)) |
95 | | - e.wait() |
96 | | - |
97 | | - |
98 | | - |
99 | 10 | print("Searching for device...") |
100 | 11 | d = MetaWear(sys.argv[1]) |
101 | 12 | d.connect() |
102 | 13 | print("Connected to " + d.address) |
103 | | -s = State(d) |
104 | | - |
105 | | -print("Configuring device") |
106 | | -libmetawear.mbl_mw_settings_set_connection_parameters(s.device.board, 7.5, 7.5, 0, 6000) |
107 | | -sleep(1.0) |
108 | 14 |
|
109 | 15 | try: |
| 16 | + e = Event() |
| 17 | + |
| 18 | + print("Configuring device") |
110 | 19 | #logging |
111 | | - s.setup_logger() |
| 20 | + signal = libmetawear.mbl_mw_multi_chnl_temp_get_temperature_data_signal(d.board, MetaWearRProChannel.ON_BOARD_THERMISTOR) |
| 21 | + logger = create_voidp(lambda fn: libmetawear.mbl_mw_datasignal_log(signal, None, fn), resource = "temp_logger", event = e) |
| 22 | + |
| 23 | + timer = create_voidp(lambda fn: libmetawear.mbl_mw_timer_create_indefinite(d.board, 1000, 0, None, fn), resource = "timer", event = e) |
| 24 | + libmetawear.mbl_mw_event_record_commands(timer) |
| 25 | + libmetawear.mbl_mw_datasignal_read(signal) |
| 26 | + create_voidp_int(lambda fn: libmetawear.mbl_mw_event_end_record(timer, None, fn), event = e) |
| 27 | + |
| 28 | + libmetawear.mbl_mw_logging_start(d.board, 0) |
| 29 | + libmetawear.mbl_mw_timer_start(timer) |
112 | 30 |
|
113 | 31 | print("Logging data for 15s") |
114 | 32 | sleep(15.0) |
115 | 33 |
|
116 | | - s.download_data() |
117 | | -except RuntimeError as e: |
118 | | - print(e) |
| 34 | + libmetawear.mbl_mw_timer_remove(timer) |
| 35 | + libmetawear.mbl_mw_logging_stop(d.board) |
| 36 | + |
| 37 | + print("Downloading data") |
| 38 | + libmetawear.mbl_mw_settings_set_connection_parameters(d.board, 7.5, 7.5, 0, 6000) |
| 39 | + sleep(1.0) |
| 40 | + |
| 41 | + def progress_update_handler(context, entries_left, total_entries): |
| 42 | + if (entries_left == 0): |
| 43 | + e.set() |
| 44 | + |
| 45 | + fn_wrapper = FnVoid_VoidP_UInt_UInt(progress_update_handler) |
| 46 | + download_handler = LogDownloadHandler(context = None, \ |
| 47 | + received_progress_update = fn_wrapper, \ |
| 48 | + received_unknown_entry = cast(None, FnVoid_VoidP_UByte_Long_UByteP_UByte), \ |
| 49 | + received_unhandled_entry = cast(None, FnVoid_VoidP_DataP)) |
| 50 | + |
| 51 | + callback = FnVoid_VoidP_DataP(lambda ctx, p: print("{epoch: %d, value: %s}" % (p.contents.epoch, parse_value(p)))) |
| 52 | + libmetawear.mbl_mw_logger_subscribe(logger, None, callback) |
| 53 | + libmetawear.mbl_mw_logging_download(d.board, 0, byref(download_handler)) |
| 54 | + e.wait() |
| 55 | +except RuntimeError as err: |
| 56 | + print(err) |
119 | 57 | finally: |
120 | 58 | print("Resetting device") |
121 | 59 | e = Event() |
122 | | - s.device.on_disconnect = lambda status: e.set() |
123 | | - libmetawear.mbl_mw_debug_reset(s.device.board) |
| 60 | + d.on_disconnect = lambda status: e.set() |
| 61 | + libmetawear.mbl_mw_debug_reset(d.board) |
124 | 62 | e.wait() |
0 commit comments