Skip to content

Migration Guide to Shimmer3R

JongChern edited this page Dec 1, 2025 · 2 revisions

Shimmer MATLAB API Migration Guide

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.

Side-by-Side Comparison Table (Quick Reference)

Side-by-Side Comparison: Old vs New 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()

Device Creation & Connection

Old API

shimmer = ShimmerHandleClass(comPort);
shimmer.connect;

New API

deviceHandler = ShimmerDeviceHandler();
deviceHandler.bluetoothManager.connectShimmerThroughCommPort(comPort);
device = deviceHandler.bluetoothManager.getShimmerDeviceBtConnected(comPort);

Notes

  • Communication is now routed through the Bluetooth Manager.
  • You must explicitly fetch the connected Shimmer object.

Sampling Rate & Sensor Configuration

Old API

shimmer.setsamplingrate(51.2);
shimmer.disableallsensors;
shimmer.setenabledsensors(SensorMacros.ACCEL,1, SensorMacros.GYRO,1, ... );

New API

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);

Notes

  • New API uses Integer sensor IDs instead of macros.
  • Must follow the clone → modify → apply workflow.

Applying Configuration to the Device

Old API

Configuration applied automatically.

New API

commType = javaMethod('valueOf', ...
    'com.shimmerresearch.driver.Configuration$COMMUNICATION_TYPE', 'BLUETOOTH');

AssembleShimmerConfig.generateSingleShimmerConfig(shimmerClone, commType);
device.configureFromClone(shimmerClone);

Notes

  • Configuration must be assembled using AssembleShimmerConfig.
  • Then it must be explicitly uploaded.

Start & Stop Streaming

Old API

shimmer.start;
shimmer.stop;

New API

device.startStreaming();
device.stopStreaming();

Notes

while isempty(deviceHandler.obj.receiveData(comPort))
    pause(0.1);
end

The above can be used to wait for the device to startStreaming

Reading Data

Old API

[newData, names, formats, units] = shimmer.getdata('c');

New API

data = deviceHandler.obj.receiveData(comPort);
newData = data(1);
signalNameArray = data(2);
signalFormatArray = data(3);
signalUnitArray = data(4);

Notes

  • Data arrives as Java arrays → must be converted to MATLAB char arrays.
  • Channel names differ from old API (Accel_LN_X, Gyro_Z, etc.).

Writing Headers & Data

Old API

writeHeadersToFile(fileName, names, formats, units);
dlmwrite(fileName, newData, ...);

New API

newWriteHeadersToFile(fileName, signalNameCellArray(chIndex), ...);
dlmwrite(fileName, double(filtredData), ...);

Notes

  • Only selected channels (based on new names) are written.
  • Data must be cast to double.

Packet Loss Measurement

Old API

shimmer.getpercentageofpacketsreceived(timeStamp)

New API

device.getPacketReceptionRateOverall()

Safe Disconnection

Old API

shimmer.disconnect;

New API

cleaner = onCleanup(@() device.disconnect());
...
device.disconnect();

Notes

  • Ensures reliable cleanup even on Ctrl-C.