setup() { console.log(chalk.green("Setting up connection parameters")); MetaWear.mbl_mw_settings_set_connection_parameters(this.device.board, 7.5, 7.5, 0, 6000); MetaWear.mbl_mw_settings_set_tx_power(this.device.board, 4); console.log(chalk.green("Setting up acc")); MetaWear.mbl_mw_acc_set_odr(this.device.board, 100.0); MetaWear.mbl_mw_acc_set_range(this.device.board, 8.0); MetaWear.mbl_mw_acc_write_acceleration_config(this.device.board); console.log(chalk.green("Setting up gyro")); MetaWear.mbl_mw_gyro_bmi160_set_range(this.device.board, MetaWear.GyroBmi160Range._2000dps); MetaWear.mbl_mw_gyro_bmi160_set_odr(this.device.board, MetaWear.GyroBmi160Odr._50Hz); MetaWear.mbl_mw_gyro_bmi160_write_config(this.device.board); console.log(chalk.green("Getting data signals")); let acc = MetaWear.mbl_mw_acc_get_acceleration_data_signal(this.device.board); let gyro = MetaWear.mbl_mw_gyro_bmi160_get_rotation_data_signal(this.device.board); //batt signal is called separetly (not by data fuser) this.battDataPointer = MetaWear.mbl_mw_settings_get_battery_state_data_signal(this.device.board); console.log(chalk.green("Creating data fuser")); var start_time = new Date().getTime(); var data_signals = [gyro]; let fuser = new Promise((resolve, reject) => { MetaWear.mbl_mw_dataprocessor_fuser_create( acc, new MetaWear.ArrayDataSignalP(data_signals), data_signals.length, ref.NULL, MetaWear.FnVoid_VoidP_DataProcessorP.toPointer( (ctx, pointer) => { var time_elapsed_ms = new Date().getTime() - start_time if(time_elapsed_ms < 1000) { if (!pointer) { console.log(chalk.red("Fuser failed!")); reject("Failed to create fuser"); } else { console.log(chalk.green("Fuser created!")); this.sensorDataPointer = pointer resolve(); } } else { reject("Time elapsed during creating fuser. Reseting device!") } } ) ) } ).then(() => { console.log(chalk.green("Configuring disconnect macro")); var disconnect_event = MetaWear.mbl_mw_settings_get_disconnect_event(this.device.board) MetaWear.mbl_mw_event_record_commands(disconnect_event); MetaWear.mbl_mw_gyro_bmi160_stop(this.device.board); MetaWear.mbl_mw_acc_stop(this.device.board); MetaWear.mbl_mw_baro_bosch_stop(this.device.board); MetaWear.mbl_mw_event_end_record( disconnect_event, ref.NULL, MetaWear.FnVoid_VoidP_EventP_Int.toPointer( (ctx, event, status) => { console.log(chalk.green("Registered disconnect event")); } ) ) } ).then(() => { console.log(chalk.green("Subscribing to data")); MetaWear.mbl_mw_datasignal_subscribe( this.sensorDataPointer, ref.NULL, MetaWear.FnVoid_VoidP_DataP.toPointer( (ctx, pointer) => { var data = pointer.deref(); //var values = data.parseValue({'nElem': 3}); //Workaround of issue https://github.com/mbientlab/MetaWear-SDK-JavaScript/issues/15 var nElem = 2 var values = [] var value = ref.reinterpret(data.value, data.length, 0); let offset = data.length / nElem for(var i = 0; i < nElem; i++) { values.push(ref.get(value, offset * i, ref.refType(MetaWear.Data)).deref().parseValue()) } //End of workaround var index = this.get_mqtt_package_index(); mqtt_package.add_epoch(index, data.epoch); mqtt_package.add_acc_data(index, values[0].x, values[0].y, values[0].z); mqtt_package.add_gyro_data(index, values[1].x, values[1].y, values[1].z); mqtt_package.add_pressure_data(index, 0); } ) ) } ).then(() => { MetaWear.mbl_mw_datasignal_subscribe( this.battDataPointer, ref.NULL, MetaWear.FnVoid_VoidP_DataP.toPointer( (ctx, pointer) => { var data = pointer.deref(); var batt = data.parseValue(); this.battVoltageValue = batt.voltage; this.battChargeValue = batt.charge; this.update_batt_and_rssi(); } ) ) this.trigger_batt_update(); } ).then(() => { console.log(chalk.green("Start sensors")); MetaWear.mbl_mw_gyro_bmi160_enable_rotation_sampling(this.device.board) MetaWear.mbl_mw_acc_enable_acceleration_sampling(this.device.board) MetaWear.mbl_mw_gyro_bmi160_start(this.device.board) MetaWear.mbl_mw_acc_start(this.device.board) MetaWear.mbl_mw_baro_bosch_start(this.device.board) this.mqttDataSamplesCountArray = Array(3).fill(100) this.status = 'configured' } ).catch(error => { MetaWear.mbl_mw_debug_reset(this.device.board); console.log(error); } ) return fuser }