-
Notifications
You must be signed in to change notification settings - Fork 7
Migration Guide to Shimmer3R
JongChern edited this page Dec 1, 2025
·
2 revisions
Old API (ShimmerHandleClass) → New API (ShimmerDeviceHandler)
This page provides a complete developer-friendly migration reference for upgrading MATLAB scripts from the legacy ShimmerHandleClass API to the new unified ShimmerDeviceHandler API.
| Feature | Old API (ShimmerHandleClass) | New API (ShimmerDeviceHandler) |
|---|---|---|
| Device Creation | shimmer = ShimmerHandleClass(comPort); |
deviceHandler = ShimmerDeviceHandler(); |
| Connection | shimmer.connect |
bluetoothManager.connectShimmerThroughCommPort(comPort) |
| Access Active Device | direct (shimmer) |
getShimmerDeviceBtConnected(comPort) |
| Sampling Rate | setsamplingrate(51.2) |
setSamplingRateShimmer(51.2) |
| Disable Sensors | disableallsensors |
disableAllSensors() |
| Enable Sensors | Macros (e.g., ACCEL) |
Integer sensor IDs |
| Apply Config | Implicit | configureFromClone() |
| Start Streaming | start |
startStreaming() |
| Stop Streaming | stop |
stopStreaming() |
| Read Data | getdata('c') |
receiveData(comPort) |
| Header Writing | writeHeadersToFile() |
newWriteHeadersToFile() |
| Packet Loss | getpercentageofpacketsreceived(ts) |
getPacketReceptionRateCurrent() |
| Disconnect | disconnect |
onCleanup(...) + disconnect()
|
shimmer = ShimmerHandleClass(comPort);
shimmer.connect;
deviceHandler = ShimmerDeviceHandler();
deviceHandler.bluetoothManager.connectShimmerThroughCommPort(comPort);
device = deviceHandler.bluetoothManager.getShimmerDeviceBtConnected(comPort);
- Communication is now routed through the Bluetooth Manager.
- You must explicitly fetch the connected Shimmer object.
shimmer.setsamplingrate(51.2);
shimmer.disableallsensors;
shimmer.setenabledsensors(SensorMacros.ACCEL,1, SensorMacros.GYRO,1, ... );
shimmerClone = device.deepClone();
shimmerClone.setSamplingRateShimmer(51.2);
shimmerClone.disableAllSensors();
shimmerClone.setEnabledAndDerivedSensorsAndUpdateMaps(0, 0);
sensorIds = javaArray('java.lang.Integer', 3);
sensorIds(1) = java.lang.Integer(deviceHandler.sensorClass.SHIMMER_ANALOG_ACCEL);
sensorIds(2) = java.lang.Integer(deviceHandler.sensorClass.SHIMMER_MPU9X50_GYRO);
sensorIds(3) = java.lang.Integer(deviceHandler.sensorClass.SHIMMER_LSM303_MAG);
shimmerClone.setSensorIdsEnabled(sensorIds);
- New API uses Integer sensor IDs instead of macros.
- Must follow the clone → modify → apply workflow.
Configuration applied automatically.
commType = javaMethod('valueOf', ...
'com.shimmerresearch.driver.Configuration$COMMUNICATION_TYPE', 'BLUETOOTH');
AssembleShimmerConfig.generateSingleShimmerConfig(shimmerClone, commType);
device.configureFromClone(shimmerClone);
- Configuration must be assembled using AssembleShimmerConfig.
- Then it must be explicitly uploaded.
shimmer.start;
shimmer.stop;
device.startStreaming();
device.stopStreaming();
while isempty(deviceHandler.obj.receiveData(comPort))
pause(0.1);
end
The above can be used to wait for the device to startStreaming
[newData, names, formats, units] = shimmer.getdata('c');
data = deviceHandler.obj.receiveData(comPort);
newData = data(1);
signalNameArray = data(2);
signalFormatArray = data(3);
signalUnitArray = data(4);
- Data arrives as Java arrays → must be converted to MATLAB char arrays.
- Channel names differ from old API (Accel_LN_X, Gyro_Z, etc.).
writeHeadersToFile(fileName, names, formats, units);
dlmwrite(fileName, newData, ...);
newWriteHeadersToFile(fileName, signalNameCellArray(chIndex), ...);
dlmwrite(fileName, double(filtredData), ...);
- Only selected channels (based on new names) are written.
- Data must be cast to double.
shimmer.getpercentageofpacketsreceived(timeStamp)
device.getPacketReceptionRateOverall()
shimmer.disconnect;
cleaner = onCleanup(@() device.disconnect());
...
device.disconnect();
- Ensures reliable cleanup even on Ctrl-C.