예제 #1
0
    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)
예제 #2
0
    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)
예제 #3
0
    # 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)