def timer_created(timer): global bsignal bsignal = libmetawear.mbl_mw_settings_get_battery_state_data_signal(device.board) libmetawear.mbl_mw_datasignal_subscribe(bsignal, batt_handler_fn) libmetawear.mbl_mw_event_record_commands(timer) libmetawear.mbl_mw_datasignal_read(bsignal) libmetawear.mbl_mw_event_end_record(timer, getStatusFn_handler_fn) libmetawear.mbl_mw_timer_start(timer)
def setup_dc_event(device): # Setup disconnect event to blink the blue led 10x when fired dc_event = libmetawear.mbl_mw_settings_get_disconnect_event(device.board) libmetawear.mbl_mw_event_record_commands(dc_event) #libmetawear.mbl_mw_led_write_pattern(device.board, byref(pattern), LedColor.BLUE) #libmetawear.mbl_mw_led_play(device.board) libmetawear.mbl_mw_debug_reset(device.board) libmetawear.mbl_mw_event_end_record(dc_event, getStatusFn_handler_fn)
def _setup_read_event(self, timer, signal): e = Event() result = [None] def commands_recorded(ctx, event, status): result[0] = RuntimeError("Could not create read event") if status != Const.STATUS_OK else None e.set() fn_wrapper = FnVoid_VoidP_VoidP_Int(commands_recorded) libmetawear.mbl_mw_event_record_commands(timer) libmetawear.mbl_mw_datasignal_read(signal) libmetawear.mbl_mw_event_end_record(timer, None, fn_wrapper) e.wait() if (result[0] is RuntimeError): raise result[0]
def createTimer(mmr): mmr.parameters = I2cReadParameters(device_addr=AD7745_ADDR, register_addr=REG_CAP_DATA) e = Event() mmr.timer = create_voidp( lambda fn: libmetawear.mbl_mw_timer_create_indefinite( mmr.device.board, 11, 0, None, fn), resource="timer", event=e) libmetawear.mbl_mw_event_record_commands(mmr.timer) libmetawear.mbl_mw_datasignal_read_with_parameters(mmr.i2c_signal, byref(mmr.parameters)) create_voidp_int( lambda fn: libmetawear.mbl_mw_event_end_record(mmr.timer, None, fn), event=e) print(mmr.timer) mmr.timer_id = libmetawear.mbl_mw_timer_get_id(mmr.timer) print("id" + str(mmr.timer_id))
print("Connected to " + d.address) try: # setup events e = Event() print("Configuring device") # get temp signal and setup logger signal = libmetawear.mbl_mw_multi_chnl_temp_get_temperature_data_signal(d.board, MetaWearRProChannel.ON_BOARD_THERMISTOR) logger = create_voidp(lambda fn: libmetawear.mbl_mw_datasignal_log(signal, None, fn), resource = "temp_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(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) # log 10s print("Logging data for 10s") sleep(10.0)
# wait 1s sleep(1.0) # setup any motion libmetawear.mbl_mw_acc_bosch_set_any_motion_count(s.device.board, 2) libmetawear.mbl_mw_acc_bosch_set_any_motion_threshold(s.device.board, 0.1) libmetawear.mbl_mw_acc_bosch_write_motion_config(s.device.board, AccBoschMotion.ANYMOTION) print("setup bmi160 motion recognition") # get motion signal motion_signal = libmetawear.mbl_mw_acc_bosch_get_motion_data_signal(s.device.board) print("get motion signal") # create event that changes count based on motion signal s.events["event"].clear() libmetawear.mbl_mw_event_record_commands(motion_signal) libmetawear.mbl_mw_dataprocessor_passthrough_set_count(s.passthrough_signal, 10) print("create event that changes counter based on motion") libmetawear.mbl_mw_event_end_record(motion_signal, None, event_created_fn) s.events["event"].wait() # start print("Start") libmetawear.mbl_mw_logging_start(s.device.board, 0) libmetawear.mbl_mw_acc_enable_acceleration_sampling(s.device.board) libmetawear.mbl_mw_acc_start(s.device.board) libmetawear.mbl_mw_acc_bosch_enable_motion_detection(s.device.board) libmetawear.mbl_mw_acc_bosch_start(s.device.board) print("0 min") sleep(60.0)
# create RMS - root mean square of acc X,Y,Z rms = create_voidp(lambda fn: libmetawear.mbl_mw_dataprocessor_rms_create( acc_signal, None, fn), resource="RMS", event=e) print("RMS created") # setup averager - averages over 8 RMS samples @ 50Hz avg = create_voidp(lambda fn: libmetawear. mbl_mw_dataprocessor_average_create(rms, 8, None, fn), resource="averager", event=e) print("Averager created") # setup event on avg - reset averager libmetawear.mbl_mw_event_record_commands(avg) libmetawear.mbl_mw_dataprocessor_average_reset(avg) create_voidp_int( lambda fn: libmetawear.mbl_mw_event_end_record(avg, None, fn), event=e) # setup threshold detector - detect anything above 1 ths = create_voidp( lambda fn: libmetawear.mbl_mw_dataprocessor_threshold_create( avg, ThresholdMode.BINARY, 1.0, 0.0, None, fn), resource="threshold detector", event=e) print("Threshold detector created") # setup logger - log the final signal of the averaged data ths_logger = create_voidp( lambda fn: libmetawear.mbl_mw_datasignal_log(ths, None, fn),
lambda fn: libmetawear.mbl_mw_dataprocessor_comparator_create( threshold, ComparatorOperation.EQ, -1.0, None, fn), resource="ths_below", event=e) ths_above = create_voidp( lambda fn: libmetawear.mbl_mw_dataprocessor_comparator_create( threshold, ComparatorOperation.EQ, 1.0, None, fn), resource="ths_above", event=e) pattern = LedPattern(pulse_duration_ms=1000, high_time_ms=500, high_intensity=16, low_intensity=16, repeat_count=Const.LED_REPEAT_INDEFINITELY) libmetawear.mbl_mw_event_record_commands(ths_below) libmetawear.mbl_mw_led_write_pattern(device.board, byref(pattern), LedColor.BLUE) libmetawear.mbl_mw_led_play(device.board) create_voidp_int( lambda fn: libmetawear.mbl_mw_event_end_record(ths_below, None, fn), event=e) libmetawear.mbl_mw_event_record_commands(ths_above) libmetawear.mbl_mw_led_stop_and_clear(device.board) create_voidp_int( lambda fn: libmetawear.mbl_mw_event_end_record(ths_above, None, fn), event=e) libmetawear.mbl_mw_acc_enable_acceleration_sampling(device.board) libmetawear.mbl_mw_acc_start(device.board)