Digital input data signal logging failed with out_of_range error in MMS

Hi
I am using MMS and trying to log the digital input signal with reference to examples/log_temp.py.
I have successfully logged by replacing the mbl_mw_multi_chnl_temp_get_temperature_data_signal function in examples/log_temp.py with the mbl_mw_gpio_get_digital_input_data_signal function. But when I divided the scripts to start logging and anonymous download for long-term logging, out_of_range error occurs with the following message at mbl_mw_metawearboard_create_anonymous_datasignals.

terminate called after throwing an instance of 'std::out_of_range'
  what():  _Map_base::at
Aborted (core dumped)

This error doesn’t happen for temperature logging so I guess mbl_mw_metawearboard_create_anonymous_datasignals doesn’t support digital input signal logging or C++ library bug. If you know anything about it, please reply.

  • Environment

    • Ubuntu 20.04
    • Bluez 5.50
    • MetaWear SDK for Python by MBIENTLAB
  • Start logging script based on examples/log_temp.py

# usage: python3 log_temp.py [mac]
from __future__ import print_function
from mbientlab.metawear import MetaWear, libmetawear, parse_value, create_voidp, create_voidp_int
from mbientlab.metawear.cbindings import *
from time import sleep
from threading import Event

import sys

# connect
print("Searching for device...")
d = MetaWear(sys.argv[1])
d.connect()
print("Connected to " + d.address + " over " + ("USB" if d.usb.is_connected else "BLE"))

try:
    # setup events
    e = Event()
    print("Configuring device")

    # get temp signal and setup logger
    print("Get and log digital input")
    di_signal = libmetawear.mbl_mw_gpio_get_digital_input_data_signal(d.board, 2)
    di_logger = create_voidp(lambda fn: libmetawear.mbl_mw_datasignal_log(di_signal, None, fn), resource = "di_logger", event=e)

    # create a timer
    timer = create_voidp(lambda fn: libmetawear.mbl_mw_timer_create_indefinite(d.board, 1000, 0, None, fn), resource = "timer", event = e)

    # record an event
    libmetawear.mbl_mw_event_record_commands(timer)

    # event is to read temp signal
    libmetawear.mbl_mw_datasignal_read(di_signal)
    create_voidp_int(lambda fn: libmetawear.mbl_mw_event_end_record(timer, None, fn), event = e)

    # start logging
    libmetawear.mbl_mw_logging_start(d.board, 0)

    # start timer
    libmetawear.mbl_mw_timer_start(timer)

except RuntimeError as err:
    print(err)
finally:
    e = Event()
    d.on_disconnect = lambda status: e.set()
    d.disconnect()
    e.wait()
  • Anonymous download script → examples/log_download.py

Thanks

Sign In or Register to comment.