Skip to content

Commit 6e8b518

Browse files
committed
updated examples and packages
1 parent f5b7f18 commit 6e8b518

15 files changed

+924
-339
lines changed

examples/acc_thresh_detect.js

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
var MetaWear = require('../index')//require('metawear');
2+
var ref = require('ref');
3+
// Store the log event for later download. If your program needs to terminate
4+
// before performing the log download, you will need to use mbl_mw_metawearboard_serialize
5+
// to store the device state and that pass that state as the second argument to
6+
// connectAndSetUp when you are ready to download. Use mbl_mw_logger_lookup_id
7+
// to retrieve this accelLogger object
8+
var thsLogger = null;
9+
10+
MetaWear.discoverByAddress('f9:b5:f9:81:3f:77', function(device) {
11+
console.log('Discovered');
12+
device.connectAndSetUp(async function (error) {
13+
14+
// setup accelerometer (odr 50Hz and 2Gs)
15+
console.log('Set up acc');
16+
MetaWear.mbl_mw_acc_bmi160_set_odr(device.board, 6);
17+
MetaWear.mbl_mw_acc_set_range(device.board, 1);
18+
MetaWear.mbl_mw_acc_write_acceleration_config(device.board);
19+
20+
// start to setup rms->avg->thresh->log chain
21+
console.log('Get acc signal');
22+
var acc = MetaWear.mbl_mw_acc_get_acceleration_data_signal(device.board);
23+
24+
// create RMS - root mean square of acc X,Y,Z
25+
console.log('Create RMS');
26+
let promise = new Promise((resolve, reject) => {
27+
var rms = MetaWear.mbl_mw_dataprocessor_rms_create(acc, ref.NULL, MetaWear.FnVoid_VoidP_DataProcessorP.toPointer(function onSignal(context, dataPtr) {
28+
console.log('RMS Created');
29+
resolve(dataPtr);
30+
}));
31+
});
32+
let rms = await promise;
33+
console.log(rms);
34+
35+
// setup averager - averages over 8 RMS samples @ 50Hz
36+
console.log('Create AVG');
37+
promise = new Promise((resolve, reject) => {
38+
var avg = MetaWear.mbl_mw_dataprocessor_average_create(rms, 8, ref.NULL, MetaWear.FnVoid_VoidP_DataProcessorP.toPointer(function onSignal(context, dataPtr) {
39+
console.log('AVG Created');
40+
resolve(dataPtr);
41+
}));
42+
});
43+
let avg = await promise;
44+
console.log(avg);
45+
46+
// setup event on avg - reset averager
47+
console.log('Record COMMAND');
48+
MetaWear.mbl_mw_event_record_commands(avg);
49+
console.log('First command: reset averager after it fires -> 8 data pts');
50+
MetaWear.mbl_mw_dataprocessor_average_reset(avg);
51+
console.log('End Record COMMAND');
52+
promise = new Promise((resolve, reject) => {
53+
var rec = MetaWear.mbl_mw_event_end_record(avg, ref.NULL, MetaWear.FnVoid_VoidP_EventP_Int.toPointer(function onSignal(context, dataPtr, lstatus) {
54+
console.log('COMMAND Created');
55+
resolve(lstatus);
56+
}));
57+
});
58+
let rec = await promise;
59+
console.log(rec);
60+
61+
// setup threshold detector - detect anything above 1
62+
console.log('Create THRESH');
63+
promise = new Promise((resolve, reject) => {
64+
var ths = MetaWear.mbl_mw_dataprocessor_threshold_create(avg, 1, 1.0, 0.0, ref.NULL, MetaWear.FnVoid_VoidP_DataProcessorP.toPointer(function onSignal(context, dataPtr) {
65+
console.log('THRESH Created:' + dataPtr);
66+
resolve(dataPtr);
67+
}));
68+
});
69+
let ths = await promise;
70+
console.log(ths);
71+
72+
// setup logger - log the final signal of the averaged data
73+
console.log('Create LOGGER');
74+
promise = new Promise((resolve, reject) => {
75+
var thsl = MetaWear.mbl_mw_datasignal_log(ths, ref.NULL, MetaWear.FnVoid_VoidP_DataLoggerP.toPointer(function onSignal(context, logger) {
76+
console.log('LOGGER Created: ' + logger);
77+
resolve(logger);
78+
}));
79+
});
80+
thsLogger = await promise;
81+
console.log(thsLogger);
82+
83+
// Start logging
84+
startLogging(device, function (error) {
85+
if (error) {
86+
console.log(error);
87+
process.exit(1);
88+
}
89+
console.log('wait 10s');
90+
// Stop logging after 10 seconds
91+
setTimeout(function () {
92+
console.log('done waiting');
93+
downloadLog(device, function (error) {
94+
device.once('disconnect', function (reason) {
95+
console.log('disconnect');
96+
process.exit(0);
97+
});
98+
MetaWear.mbl_mw_debug_reset(device.board);
99+
});
100+
}, 10000);
101+
});
102+
});
103+
});
104+
105+
function startLogging(device, callback) {
106+
console.log('Enable Acc and Start logging');
107+
MetaWear.mbl_mw_acc_enable_acceleration_sampling(device.board);
108+
MetaWear.mbl_mw_acc_start(device.board);
109+
MetaWear.mbl_mw_logging_start(device.board, 0);
110+
callback(null);
111+
}
112+
113+
function downloadLog(device, callback) {
114+
console.log('Disable Acc and Stop logging');
115+
// Shutdown accel and logger
116+
MetaWear.mbl_mw_acc_stop(device.board);
117+
MetaWear.mbl_mw_acc_disable_acceleration_sampling(device.board);
118+
MetaWear.mbl_mw_logging_stop(device.board);
119+
console.log('Setup Download');
120+
// Setup handerl for accel data points
121+
console.log(thsLogger);
122+
MetaWear.mbl_mw_logger_subscribe(thsLogger, ref.NULL, MetaWear.FnVoid_VoidP_DataP.toPointer(function onSignal(context, dataPtr) {
123+
var data = dataPtr.deref();
124+
var pt = data.parseValue();
125+
console.log('received_entry: ' + data.epoch + ' ' + pt);
126+
}));
127+
// Setup the handlers for events during the download
128+
var downloadHandler = new MetaWear.LogDownloadHandler();
129+
downloadHandler.received_progress_update = MetaWear.FnVoid_VoidP_UInt_UInt.toPointer(function onSignal(context, entriesLeft, totalEntries) {
130+
console.log('received_progress_update entriesLeft:' + entriesLeft + ' totalEntries:' + totalEntries);
131+
if (entriesLeft === 0) {
132+
// Remove all log entries if told to stop logging
133+
MetaWear.mbl_mw_metawearboard_tear_down(device.board);
134+
callback(null);
135+
}
136+
});
137+
downloadHandler.received_unknown_entry = MetaWear.FnVoid_VoidP_UByte_Long_UByteP_UByte.toPointer(function onSignal(context, id, epoch, data, length) {
138+
console.log('received_unknown_entry');
139+
});
140+
downloadHandler.received_unhandled_entry = MetaWear.FnVoid_VoidP_DataP.toPointer(function onSignal(context, dataPtr) {
141+
var data = dataPtr.deref();
142+
var dataPoint = data.parseValue();
143+
console.log('received_unhandled_entry: ' + dataPoint);
144+
});
145+
// Actually start the log download, this will cause all the handlers we setup to be invoked
146+
console.log('Start Download');
147+
MetaWear.mbl_mw_logging_download(device.board, 20, downloadHandler.ref());
148+
}
149+

examples/anonymous_datasignals.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
2-
/**
3-
* Created by sschiffli on 11/2/17.
4-
*/
51
var MetaWear = require('../index')//require('metawear');
62
var ref = require('ref')
73

File renamed without changes.

examples/full_reset.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
var MetaWear = require('../index')//require('metawear');
2+
3+
MetaWear.discoverByAddress('f9:b5:f9:81:3f:77', function(device) {
4+
console.log('Discovered');
5+
//MetaWear.discover(function (device) {
6+
device.connectAndSetUp(function (error) {
7+
console.log('Connected');
8+
console.log('Stop logger and clear all entries');
9+
MetaWear.mbl_mw_logging_stop(device.board);
10+
MetaWear.mbl_mw_logging_clear_entries(device.board);
11+
console.log('Delete all macros');
12+
MetaWear.mbl_mw_macro_erase_all(device.board);
13+
console.log('Reset sensor');
14+
MetaWear.mbl_mw_debug_reset_after_gc(device.board);
15+
device.disconnect(function (error) {
16+
console.log('Disconnected');
17+
process.exit(0);
18+
});
19+
});
20+
});

examples/led.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
1-
/**
2-
* Created by sschiffli on 8/15/17.
3-
*/
41
var MetaWear = require('../index')//require('metawear');
52

63
// If you know the MAC address, you can uncomment this line
7-
//MetaWear.discoverByAddress('cb:7d:c5:b0:20:8f', function(device) {
8-
MetaWear.discover(function (device) {
4+
MetaWear.discoverByAddress('f9:b5:f9:81:3f:77', function(device) {
5+
//MetaWear.discover(function (device) {
96
device.connectAndSetUp(function (error) {
107
var pattern = new MetaWear.LedPattern();
118
MetaWear.mbl_mw_led_load_preset_pattern(pattern.ref(), MetaWear.LedPreset.BLINK);
File renamed without changes.

examples/log_temp.js

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
var MetaWear = require('../index')//require('metawear');
2+
var ref = require('ref');
3+
var tempLogger = null;
4+
var tempTimer = null;
5+
6+
MetaWear.discoverByAddress('f9:b5:f9:81:3f:77', function(device) {
7+
console.log('Discovered');
8+
device.connectAndSetUp(async function (error) {
9+
console.log('Connected');
10+
// Start logging
11+
startLogging(device, function (error) {
12+
if (error) {
13+
console.log(error);
14+
process.exit(1);
15+
}
16+
// Stop logging after 10 seconds
17+
console.log('Wait 10 seconds');
18+
setTimeout(function () {
19+
console.log('Done waiting');
20+
downloadLog(device, function (error) {
21+
device.once('disconnect', function (reason) {
22+
console.log('Disconnected');
23+
process.exit(0);
24+
});
25+
console.log('Disconnect');
26+
MetaWear.mbl_mw_debug_reset(device.board);
27+
});
28+
}, 10000);
29+
});
30+
});
31+
});
32+
33+
function downloadLog(device, callback) {
34+
// Stop timer
35+
MetaWear.mbl_mw_timer_remove(tempTimer);
36+
// Shutdown log
37+
MetaWear.mbl_mw_logging_stop(device.board);
38+
// Setup handerl for accel data points
39+
MetaWear.mbl_mw_logger_subscribe(tempLogger, ref.NULL, MetaWear.FnVoid_VoidP_DataP.toPointer(function onSignal(context, dataPtr) {
40+
var data = dataPtr.deref();
41+
var pt = data.parseValue();
42+
console.log(data.epoch + ' ' + pt);
43+
}));
44+
// Setup the handlers for events during the download
45+
var downloadHandler = new MetaWear.LogDownloadHandler();
46+
downloadHandler.received_progress_update = MetaWear.FnVoid_VoidP_UInt_UInt.toPointer(function onSignal(context, entriesLeft, totalEntries) {
47+
console.log('received_progress_update entriesLeft:' + entriesLeft + ' totalEntries:' + totalEntries);
48+
if (entriesLeft === 0) {
49+
// Remove all log entries if told to stop logging
50+
MetaWear.mbl_mw_metawearboard_tear_down(device.board);
51+
callback(null);
52+
}
53+
});
54+
downloadHandler.received_unknown_entry = MetaWear.FnVoid_VoidP_UByte_Long_UByteP_UByte.toPointer(function onSignal(context, id, epoch, data, length) {
55+
console.log('received_unknown_entry');
56+
});
57+
downloadHandler.received_unhandled_entry = MetaWear.FnVoid_VoidP_DataP.toPointer(function onSignal(context, dataPtr) {
58+
var data = dataPtr.deref();
59+
var dataPoint = data.parseValue();
60+
console.log('received_unhandled_entry: ' + dataPoint);
61+
});
62+
// Actually start the log download, this will cause all the handlers we setup to be invoked
63+
MetaWear.mbl_mw_logging_download(device.board, 20, downloadHandler.ref());
64+
}
65+
66+
async function startLogging(device, callback) {
67+
// Get temp signal
68+
console.log('Get temp signal');
69+
var tempSignal = MetaWear.mbl_mw_multi_chnl_temp_get_temperature_data_signal(device.board, 1);
70+
// Create a timer
71+
console.log('Create timer');
72+
var promise = new Promise((resolve, reject) => {
73+
var timer = MetaWear.mbl_mw_timer_create_indefinite(device.board, 1000, 0, ref.NULL, MetaWear.FnVoid_VoidP_TimerP.toPointer(function onSignal(context, timer) {
74+
console.log(context);
75+
console.log('Timer created');
76+
console.log(timer);
77+
resolve(timer);
78+
}));
79+
});
80+
tempTimer = await promise;
81+
console.log(tempTimer);
82+
// Create event based on timer and record as a command
83+
console.log('Record command');
84+
MetaWear.mbl_mw_event_record_commands(tempTimer);
85+
console.log('Command to read temp signal');
86+
MetaWear.mbl_mw_datasignal_read(tempSignal);
87+
console.log('End record command');
88+
promise = new Promise((resolve, reject) => {
89+
var rec = MetaWear.mbl_mw_event_end_record(tempTimer, ref.NULL, MetaWear.FnVoid_VoidP_EventP_Int.toPointer(function onSignal(context, dataPtr, lstatus) {
90+
console.log('Command created');
91+
resolve(lstatus);
92+
}));
93+
});
94+
let rec = await promise;
95+
// Start timer
96+
MetaWear.mbl_mw_timer_start(tempTimer);
97+
// Create a logger
98+
MetaWear.mbl_mw_datasignal_log(tempSignal, ref.NULL, MetaWear.FnVoid_VoidP_DataLoggerP.toPointer(function (context, logger) {
99+
tempLogger = logger;
100+
callback(logger.address() ? null : new Error('failed to start logging temp'));
101+
}));
102+
// Start logger
103+
MetaWear.mbl_mw_logging_start(device.board, 0);
104+
}

examples/connect.js renamed to examples/scan_connect.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
/**
2-
* Created by sschiffli on 4/21/16.
3-
*/
41
var MetaWear = require('../index')//require('metawear');
52

63
// If you know the MAC address, you can uncomment this line

examples/stream_acc.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
var MetaWear = require('../index');
2+
var ref = require('ref')
3+
4+
async function mainAsync(mac) {
5+
var device = await new Promise((resolve, reject) => MetaWear.discoverByAddress(mac.toLowerCase(), d => resolve(d)))
6+
await new Promise((resolve, reject) => {
7+
console.log('Connecting...')
8+
device.connectAndSetUp(error => {
9+
console.log('Connected.')
10+
if(error == null) resolve(null)
11+
else reject(error)
12+
})
13+
})
14+
15+
let acc = MetaWear.mbl_mw_acc_get_acceleration_data_signal(device.board)
16+
console.log('Set up stream.')
17+
MetaWear.mbl_mw_datasignal_subscribe(acc, ref.NULL, MetaWear.FnVoid_VoidP_DataP.toPointer((ctx, pointer) => {
18+
var data = pointer.deref();
19+
var value = data.parseValue();
20+
console.log('epoch: ' + data.epoch + ' acc: ' + value.x + ' ' + value.y + ' ' + value.z)
21+
}))
22+
23+
console.log('Start accelerometer.')
24+
MetaWear.mbl_mw_acc_enable_acceleration_sampling(device.board)
25+
MetaWear.mbl_mw_acc_start(device.board)
26+
27+
process.openStdin().addListener("data", data => {
28+
console.log('Reset.')
29+
MetaWear.mbl_mw_debug_reset(device.board)
30+
})
31+
}
32+
33+
mainAsync(process.argv[2])

examples/stream_acc_gyro.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
var MetaWear = require('../index');
2+
var ref = require('ref')
3+
4+
async function mainAsync(mac) {
5+
var device = await new Promise((resolve, reject) => MetaWear.discoverByAddress(mac.toLowerCase(), d => resolve(d)))
6+
await new Promise((resolve, reject) => {
7+
console.log('Connecting...')
8+
device.connectAndSetUp(error => {
9+
console.log('Connected.')
10+
if(error == null) resolve(null)
11+
else reject(error)
12+
})
13+
})
14+
15+
console.log('Get gyro and acc signal');
16+
let acc = MetaWear.mbl_mw_acc_get_acceleration_data_signal(device.board)
17+
let gyro = MetaWear.mbl_mw_gyro_bmi160_get_rotation_data_signal(device.board)
18+
console.log('Set up stream.')
19+
MetaWear.mbl_mw_datasignal_subscribe(acc, ref.NULL, MetaWear.FnVoid_VoidP_DataP.toPointer((ctx, pointer) => {
20+
var data = pointer.deref();
21+
var value = data.parseValue();
22+
console.log('epoch: ' + data.epoch + ' acc: ' + value.x + ' ' + value.y + ' ' + value.z)
23+
}))
24+
MetaWear.mbl_mw_datasignal_subscribe(gyro, ref.NULL, MetaWear.FnVoid_VoidP_DataP.toPointer((ctx, pointer) => {
25+
var data = pointer.deref();
26+
var value = data.parseValue();
27+
console.log('epoch: ' + data.epoch + ' gyro: ' + value.x + ' ' + value.y + ' ' + value.z)
28+
}))
29+
30+
console.log('Start accelerometer.')
31+
MetaWear.mbl_mw_acc_enable_acceleration_sampling(device.board)
32+
MetaWear.mbl_mw_acc_start(device.board)
33+
console.log('Start gyroscope.')
34+
MetaWear.mbl_mw_gyro_bmi160_enable_rotation_sampling(device.board)
35+
MetaWear.mbl_mw_gyro_bmi160_start(device.board)
36+
37+
process.openStdin().addListener("data", data => {
38+
console.log('Reset.')
39+
MetaWear.mbl_mw_debug_reset(device.board)
40+
})
41+
}
42+
43+
mainAsync(process.argv[2])

0 commit comments

Comments
 (0)