def setup(self): libmetawear.mbl_mw_settings_set_connection_parameters(self.device.board, 7.5, 7.5, 0, 600) sleep(1.5) e = Event() def processor_created(context, pointer): self.processor = pointer e.set() fn_wrapper = cbindings.FnVoid_VoidP_VoidP(processor_created) # set accelerometer to 100Hz sampling rate and range to +/- 16 g's libmetawear.mbl_mw_acc_set_odr(s.device.board, 100.0) libmetawear.mbl_mw_acc_set_range(s.device.board, 16.0) libmetawear.mbl_mw_acc_write_acceleration_config(s.device.board) # set gyro to 100Hz sampling rate and +/- 1000 deg/sec. libmetawear.mbl_mw_gyro_bmi160_set_odr(s.device.board, MBL_MW_GYRO_BMI160_ODR_100Hz) libmetawear.mbl_mw_gyro_bmi160_set_range(s.device.board, MBL_MW_GYRO_BMI160_RANGE_1000dps) libmetawear.mbl_mw_gyro_bmi160_write_config(s.device.board) acc = libmetawear.mbl_mw_acc_get_acceleration_data_signal(self.device.board) gyro = libmetawear.mbl_mw_gyro_bmi160_get_rotation_data_signal(self.device.board) signals = (c_void_p * 1)() signals[0] = gyro # libmetawear.mbl_mw_dataprocessor_accounter_create(signals, None, fn_wrapper) fuser = create_voidp(lambda fn: libmetawear.mbl_mw_dataprocessor_fuser_create(acc, signals, 1, None, fn), resource = "fuser", event = e) accounter = create_voidp(lambda fn: libmetawear.mbl_mw_dataprocessor_accounter_create(fuser, None, fn), resource = "accounter", event = e) # libmetawear.mbl_mw_datasignal_subscribe(self.processor, None, self.callback) libmetawear.mbl_mw_datasignal_subscribe(accounter, None, self.callback)
def setup(self): # set BLE connection params (min connect interval, max interval, # latency, timeout) all in milliseconds libmetawear.mbl_mw_settings_set_connection_parameters( self.device.board, 7.5, 7.5, 0, 6000) # set BLE advertising strength (higher strength = higher power consumption # but theoretically better connectivity) libmetawear.mbl_mw_settings_set_tx_power(self.device.board, 4) sleep(1.5) e = Event() def processor_created(context, pointer): self.processor = pointer e.set() fn_wrapper = metacbindings.FnVoid_VoidP_VoidP(processor_created) # set accelerometer to 100Hz sampling rate and range to +/- 16 g's libmetawear.mbl_mw_acc_set_odr(s.device.board, 100.0) libmetawear.mbl_mw_acc_set_range(s.device.board, 16.0) libmetawear.mbl_mw_acc_write_acceleration_config(s.device.board) # set gyro to 100Hz sampling rate and +/- 1000 deg/sec. libmetawear.mbl_mw_gyro_bmi160_set_odr(s.device.board, MBL_MW_GYRO_BMI160_ODR_100Hz) libmetawear.mbl_mw_gyro_bmi160_set_range( s.device.board, MBL_MW_GYRO_BMI160_RANGE_1000dps) libmetawear.mbl_mw_gyro_bmi160_write_config(s.device.board) # get pointers referencing the acc and gyro data signals acc = libmetawear.mbl_mw_acc_get_acceleration_data_signal( self.device.board) gyro = libmetawear.mbl_mw_gyro_bmi160_get_rotation_data_signal( self.device.board) signals = (c_void_p * 1)() signals[0] = gyro # //libmetawear.mbl_mw_dataprocessor_accounter_create(signals, None, fn_wrapper) # chain two processors together (fuser and accounter) to get timestamped acc+gyro data # create a fuser "data processor" which packages the acc and gyro signals into same packets before sending fuser = create_voidp( lambda fn: libmetawear.mbl_mw_dataprocessor_fuser_create( acc, signals, 1, None, fn), resource="fuser", event=e) # accounter processor adds correct epoch data to BLE packets, necessary for timestamping stream-mode data accounter = create_voidp( lambda fn: libmetawear.mbl_mw_dataprocessor_accounter_create( fuser, None, fn), resource="accounter", event=e) # //libmetawear.mbl_mw_datasignal_subscribe(self.processor, None, self.callback) libmetawear.mbl_mw_datasignal_subscribe(accounter, None, self.callback)
# signal = libmetawear.mbl_mw_acc_get_acceleration_data_signal(s.device.board) signal = libmetawear.mbl_mw_gyro_bmi160_get_rotation_data_signal(s.device.board) s.processor = None # print("Processor: ", s.processor) def processor_created(context, pointer): s.processor = pointer e.set() # while(s.processor is None): print("Trying to create processor...") e = Event() fn_wrapper = FnVoid_VoidP_VoidP(processor_created) libmetawear.mbl_mw_dataprocessor_accounter_create(signal, None, fn_wrapper) e.wait() input("Press enter to start streaming...") # libmetawear.mbl_mw_datasignal_subscribe(signal, None, s.callback) try: libmetawear.mbl_mw_datasignal_subscribe(s.processor, None, s.callback) except OSError: raise OSError("Processor pointer unassignable...reconnect") except: raise ValueError("Unexpected Error...") libmetawear.mbl_mw_gyro_bmi160_enable_rotation_sampling(s.device.board) libmetawear.mbl_mw_gyro_bmi160_start(s.device.board)