Events

An event is an asynchronous notification from the MetaWear board represented in the C++ API by the MblMwEvent struct.

Recording Commands

The board can be programmed to execute MetaWear commands in response to an event firing.

An event can be many things such as a data filter (average the accelerometer signal), a disconnect (the board has disconnected from the Bluetooth link), or even a timer (10 seconds have passed).

To start recording commands, call mbl_mw_event_record_commands. While in a recording state, all MetaWear functions called will instead be recorded on the board and executed when the event is fired.

To stop recording, call mbl_mw_event_end_record. This function is asynchronous and will alert the caller when it is completed via a callback function.

In this example, we use a timed event to read the temperature sensor:

MetaWear.mbl_mw_event_record_commands(tempTimer);

MetaWear.mbl_mw_datasignal_read(tempSignal);

promise = new Promise((resolve, reject) => {
    var rec = MetaWear.mbl_mw_event_end_record(tempTimer, ref.NULL, MetaWear.FnVoid_VoidP_EventP_Int.toPointer(function onSignal(context, dataPtr, status) {
        resolve(status);
    }));
});
let rec = await promise;

Here is the full example:

// Get temp signal
var temp = MetaWear.mbl_mw_multi_chnl_temp_get_temperature_data_signal(device.board,1);

// Subscribe to it
MetaWear.mbl_mw_datasignal_subscribe(temp, ref.NULL, MetaWear.FnVoid_VoidP_DataP.toPointer((ctx, pointer) => {
  console.log('got data');
  var data = pointer.deref();
  var value = data.parseValue();
  console.log('epoch: ' + data.epoch + ' temp: ' + value);
}));

// Create a timer
var promise = new Promise((resolve, reject) => {
  var timer = MetaWear.mbl_mw_timer_create_indefinite(device.board, 1000, 0, ref.NULL, MetaWear.FnVoid_VoidP_TimerP.toPointer(function onSignall(context, timer) {
    resolve(timer);
  }));
});
let timer = await promise;

// Create event based on timer and record as a command
MetaWear.mbl_mw_event_record_commands(timer);
MetaWear.mbl_mw_datasignal_read(temp);
promise = new Promise((resolve, reject) => {
  var rec = MetaWear.mbl_mw_event_end_record(timer, ref.NULL, MetaWear.FnVoid_VoidP_EventP_Int.toPointer(function onSignal(context, dataPtr, lstatus) {
    console.log('Command created');
    resolve(lstatus);
  }));
});
let rec = await promise;

// Start timer
MetaWear.mbl_mw_timer_start(timer);