Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public enum CHANNEL_DATA_TYPE{
UNKOWN(0, 0, false),
UINT8(8, 1, false),
UINT12(12, 2, false),
UINT14(14, 2, false),
UINT16(16, 2, false),
UINT24(24, 3, false),
UINT32(32, 4, false),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,10 @@ public static long[] parseData(byte[] data, String[] dataType){
iData=iData+1;
} else if (dataType[i]=="u12") {

formattedData[i]=(int)((int)(data[iData] & 0xFF) + ((int)(data[iData+1] & 0xFF) << 8));
iData=iData+2;
} else if (dataType[i]=="u14") {

formattedData[i]=(int)((int)(data[iData] & 0xFF) + ((int)(data[iData+1] & 0xFF) << 8));
iData=iData+2;
} else if (dataType[i]=="i12>") {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ public static class DatabaseChannelHandlesCommon{

public SENSORS mSensorType = null;
protected String mSensorName = "";
protected ShimmerVerObject mShimmerVerObject = new ShimmerVerObject();
protected static ShimmerVerObject mShimmerVerObject = new ShimmerVerObject();

protected static boolean mEnableCalibration = true;
protected boolean mIsDebugOutput = false;
Expand Down
147 changes: 142 additions & 5 deletions ShimmerDriver/src/main/java/com/shimmerresearch/sensors/SensorADC.java
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,14 @@ public static class DatabaseChannelHandles{
public static final String INT_ADC_A12 = "F5437a_Int_A12";
public static final String INT_ADC_A13 = "F5437a_Int_A13";
public static final String INT_ADC_A14 = "F5437a_Int_A14";

public static final String EXT_ADC_A9 = "F5437a_Ext_A9";
public static final String EXT_ADC_A11 = "F5437a_Ext_A11";
public static final String EXT_ADC_A12 = "F5437a_Ext_A12";
public static final String INT_ADC_A17 = "F5437a_Int_A17";
public static final String INT_ADC_A10 = "F5437a_Int_A10";
public static final String INT_ADC_A15 = "F5437a_Int_A15";
public static final String INT_ADC_A16 = "F5437a_Int_A16";
}

//GUI AND EXPORT CHANNELS
Expand All @@ -85,6 +93,14 @@ public static class ObjectClusterSensorName{
public static String INT_EXP_ADC_A12 = "Int_Exp_A12";
public static String INT_EXP_ADC_A13 = "Int_Exp_A13";
public static String INT_EXP_ADC_A14 = "Int_Exp_A14";

public static String EXT_EXP_ADC_A9 = "Ext_Exp_A9";
public static String EXT_EXP_ADC_A11 = "Ext_Exp_A11";
public static String EXT_EXP_ADC_A12 = "Ext_Exp_A12";
public static String INT_EXP_ADC_A17 = "Ext_Exp_A17";
public static String INT_EXP_ADC_A10 = "Ext_Exp_A10";
public static String INT_EXP_ADC_A15 = "Ext_Exp_A15";
public static String INT_EXP_ADC_A16 = "Ext_Exp_A16";
}


Expand Down Expand Up @@ -308,6 +324,15 @@ public static MICROCONTROLLER_ADC_PROPERTIES getMicrocontrollerAdcPropertiesForS
CHANNEL_UNITS.MILLIVOLTS,
Arrays.asList(CHANNEL_TYPE.CAL, CHANNEL_TYPE.UNCAL),
0x0D);

public static final ChannelDetails channel_EXT_EXP_ADC_A9 = new ChannelDetails(
ObjectClusterSensorName.EXT_EXP_ADC_A9,
ObjectClusterSensorName.EXT_EXP_ADC_A9,
DatabaseChannelHandles.EXT_ADC_A9,
CHANNEL_DATA_TYPE.UINT14, 2, CHANNEL_DATA_ENDIAN.LSB,
CHANNEL_UNITS.MILLIVOLTS,
Arrays.asList(CHANNEL_TYPE.CAL, CHANNEL_TYPE.UNCAL),
0x0D);

public static final ChannelDetails channel_EXT_EXP_ADC_A6 = new ChannelDetails(
ObjectClusterSensorName.EXT_EXP_ADC_A6,
Expand All @@ -317,6 +342,15 @@ public static MICROCONTROLLER_ADC_PROPERTIES getMicrocontrollerAdcPropertiesForS
CHANNEL_UNITS.MILLIVOLTS,
Arrays.asList(CHANNEL_TYPE.CAL, CHANNEL_TYPE.UNCAL),
0x0E);

public static final ChannelDetails channel_EXT_EXP_ADC_A11 = new ChannelDetails(
ObjectClusterSensorName.EXT_EXP_ADC_A11,
ObjectClusterSensorName.EXT_EXP_ADC_A11,
DatabaseChannelHandles.EXT_ADC_A11,
CHANNEL_DATA_TYPE.UINT14, 2, CHANNEL_DATA_ENDIAN.LSB,
CHANNEL_UNITS.MILLIVOLTS,
Arrays.asList(CHANNEL_TYPE.CAL, CHANNEL_TYPE.UNCAL),
0x0E);
//TODO add this to all of the ADC channels?
// {
// channel_EXT_EXP_ADC_A6.mDefaultUncalUnit = CHANNEL_UNITS.NO_UNITS;
Expand All @@ -330,6 +364,15 @@ public static MICROCONTROLLER_ADC_PROPERTIES getMicrocontrollerAdcPropertiesForS
CHANNEL_UNITS.MILLIVOLTS,
Arrays.asList(CHANNEL_TYPE.CAL, CHANNEL_TYPE.UNCAL),
0x0F);

public static final ChannelDetails channel_EXT_EXP_ADC_A12 = new ChannelDetails(
ObjectClusterSensorName.EXT_EXP_ADC_A12,
ObjectClusterSensorName.EXT_EXP_ADC_A12,
DatabaseChannelHandles.EXT_ADC_A12,
CHANNEL_DATA_TYPE.UINT14, 2, CHANNEL_DATA_ENDIAN.LSB,
CHANNEL_UNITS.MILLIVOLTS,
Arrays.asList(CHANNEL_TYPE.CAL, CHANNEL_TYPE.UNCAL),
0x0F);

// Internal ADCs
public static final ChannelDetails channel_INT_EXP_ADC_A1 = new ChannelDetails(
Expand All @@ -340,6 +383,15 @@ public static MICROCONTROLLER_ADC_PROPERTIES getMicrocontrollerAdcPropertiesForS
CHANNEL_UNITS.MILLIVOLTS,
Arrays.asList(CHANNEL_TYPE.CAL, CHANNEL_TYPE.UNCAL),
0x10);

public static final ChannelDetails channel_INT_EXP_ADC_A17 = new ChannelDetails(
ObjectClusterSensorName.INT_EXP_ADC_A17,
ObjectClusterSensorName.INT_EXP_ADC_A17,
DatabaseChannelHandles.INT_ADC_A17,
CHANNEL_DATA_TYPE.UINT14, 2, CHANNEL_DATA_ENDIAN.LSB,
CHANNEL_UNITS.MILLIVOLTS,
Arrays.asList(CHANNEL_TYPE.CAL, CHANNEL_TYPE.UNCAL),
0x10);


public static final ChannelDetails channel_INT_EXP_ADC_A12 = new ChannelDetails(
Expand All @@ -350,6 +402,15 @@ public static MICROCONTROLLER_ADC_PROPERTIES getMicrocontrollerAdcPropertiesForS
CHANNEL_UNITS.MILLIVOLTS,
Arrays.asList(CHANNEL_TYPE.CAL, CHANNEL_TYPE.UNCAL),
0x11);

public static final ChannelDetails channel_INT_EXP_ADC_A10 = new ChannelDetails(
ObjectClusterSensorName.INT_EXP_ADC_A10,
ObjectClusterSensorName.INT_EXP_ADC_A10,
DatabaseChannelHandles.INT_ADC_A10,
CHANNEL_DATA_TYPE.UINT14, 2, CHANNEL_DATA_ENDIAN.LSB,
CHANNEL_UNITS.MILLIVOLTS,
Arrays.asList(CHANNEL_TYPE.CAL, CHANNEL_TYPE.UNCAL),
0x11);


public static final ChannelDetails channel_INT_EXP_ADC_A13 = new ChannelDetails(
Expand All @@ -361,6 +422,15 @@ public static MICROCONTROLLER_ADC_PROPERTIES getMicrocontrollerAdcPropertiesForS
Arrays.asList(CHANNEL_TYPE.CAL, CHANNEL_TYPE.UNCAL),
0x12);

public static final ChannelDetails channel_INT_EXP_ADC_A15 = new ChannelDetails(
ObjectClusterSensorName.INT_EXP_ADC_A15,
ObjectClusterSensorName.INT_EXP_ADC_A15,
DatabaseChannelHandles.INT_ADC_A15,
CHANNEL_DATA_TYPE.UINT14, 2, CHANNEL_DATA_ENDIAN.LSB,
CHANNEL_UNITS.MILLIVOLTS,
Arrays.asList(CHANNEL_TYPE.CAL, CHANNEL_TYPE.UNCAL),
0x12);

public static final ChannelDetails channel_INT_EXP_ADC_A14 = new ChannelDetails(
ObjectClusterSensorName.INT_EXP_ADC_A14,
ObjectClusterSensorName.INT_EXP_ADC_A14,
Expand All @@ -369,6 +439,15 @@ public static MICROCONTROLLER_ADC_PROPERTIES getMicrocontrollerAdcPropertiesForS
CHANNEL_UNITS.MILLIVOLTS,
Arrays.asList(CHANNEL_TYPE.CAL, CHANNEL_TYPE.UNCAL),
0x13);

public static final ChannelDetails channel_INT_EXP_ADC_A16 = new ChannelDetails(
ObjectClusterSensorName.INT_EXP_ADC_A16,
ObjectClusterSensorName.INT_EXP_ADC_A16,
DatabaseChannelHandles.INT_ADC_A16,
CHANNEL_DATA_TYPE.UINT14, 2, CHANNEL_DATA_ENDIAN.LSB,
CHANNEL_UNITS.MILLIVOLTS,
Arrays.asList(CHANNEL_TYPE.CAL, CHANNEL_TYPE.UNCAL),
0x13);

public static final Map<String, ChannelDetails> mChannelMapRef;
static {
Expand All @@ -384,6 +463,21 @@ public static MICROCONTROLLER_ADC_PROPERTIES getMicrocontrollerAdcPropertiesForS
aMap.put(ObjectClusterSensorName.INT_EXP_ADC_A14, channel_INT_EXP_ADC_A14);
mChannelMapRef = Collections.unmodifiableMap(aMap);
}

public static final Map<String, ChannelDetails> mChannelMapRef3r;
static {
Map<String, ChannelDetails> aMap = new LinkedHashMap<String, ChannelDetails>();
// External ADCs
aMap.put(ObjectClusterSensorName.EXT_EXP_ADC_A9, channel_EXT_EXP_ADC_A9);
aMap.put(ObjectClusterSensorName.EXT_EXP_ADC_A11, channel_EXT_EXP_ADC_A11);
aMap.put(ObjectClusterSensorName.EXT_EXP_ADC_A12, channel_EXT_EXP_ADC_A12);
// Internal ADCs
aMap.put(ObjectClusterSensorName.INT_EXP_ADC_A17, channel_INT_EXP_ADC_A17);
aMap.put(ObjectClusterSensorName.INT_EXP_ADC_A10, channel_INT_EXP_ADC_A10);
aMap.put(ObjectClusterSensorName.INT_EXP_ADC_A15, channel_INT_EXP_ADC_A15);
aMap.put(ObjectClusterSensorName.INT_EXP_ADC_A16, channel_INT_EXP_ADC_A16);
mChannelMapRef3r = Collections.unmodifiableMap(aMap);
}

//--------- Sensor info end --------------

Expand All @@ -400,7 +494,12 @@ public SensorADC(ShimmerVerObject svo) {
//--------- Abstract methods implemented start --------------
@Override
public void generateSensorMap() {
super.createLocalSensorMapWithCustomParser(mSensorMapRef, mChannelMapRef);
if (getHardwareVersion()==HW_ID.SHIMMER_3R) {
super.createLocalSensorMapWithCustomParser(mSensorMapRef, mChannelMapRef3r);
}
else {
super.createLocalSensorMapWithCustomParser(mSensorMapRef, mChannelMapRef);
}
}

@Override
Expand Down Expand Up @@ -534,16 +633,28 @@ public static double calibrateMspAdcChannelToMillivolts(double unCalData){
}

public static double calibrateAdcChannelToMillivolts(double unCalData, MICROCONTROLLER_ADC_PROPERTIES microcontrollerAdcProperties){
double calData = calibrateU12AdcValueToMillivolts(unCalData, microcontrollerAdcProperties.offset, microcontrollerAdcProperties.vRefP, microcontrollerAdcProperties.gain);
double calData;
if(mShimmerVerObject.isShimmerGen3R()){
calData = calibrateU14AdcValueToMillivolts(unCalData, microcontrollerAdcProperties.offset, microcontrollerAdcProperties.vRefP, microcontrollerAdcProperties.gain);
}
else {
calData = calibrateU12AdcValueToMillivolts(unCalData, microcontrollerAdcProperties.offset, microcontrollerAdcProperties.vRefP, microcontrollerAdcProperties.gain);
}
return calData;
}

public static double calibrateMspAdcChannelToVolts(double unCalData){
public double calibrateMspAdcChannelToVolts(double unCalData){
return calibrateAdcChannelToVolts(unCalData, MICROCONTROLLER_ADC_PROPERTIES.SHIMMER2R3_3V0);
}

public static double calibrateAdcChannelToVolts(double unCalData, MICROCONTROLLER_ADC_PROPERTIES microcontrollerAdcProperties){
double calData = calibrateU12AdcValueToVolts(unCalData, microcontrollerAdcProperties.offset, microcontrollerAdcProperties.vRefP, microcontrollerAdcProperties.gain);
double calData;
if(mShimmerVerObject.isShimmerGen3R()){
calData = calibrateU14AdcValueToVolts(unCalData, microcontrollerAdcProperties.offset, microcontrollerAdcProperties.vRefP, microcontrollerAdcProperties.gain);
}
else {
calData = calibrateU12AdcValueToVolts(unCalData, microcontrollerAdcProperties.offset, microcontrollerAdcProperties.vRefP, microcontrollerAdcProperties.gain);
}
return calData;
}

Expand All @@ -552,7 +663,14 @@ public static int uncalibrateMspAdcChannelFromVolts(double unCalData){
}

public static int uncalibrateAdcChannelFromVolts(double unCalData, MICROCONTROLLER_ADC_PROPERTIES microcontrollerAdcProperties){
int calData = uncalibrateU12AdcValueFromVolts(unCalData, microcontrollerAdcProperties.offset, microcontrollerAdcProperties.vRefP, microcontrollerAdcProperties.gain);
int calData;
if(mShimmerVerObject.isShimmerGen3R()){
calData = uncalibrateU14AdcValueFromVolts(unCalData, microcontrollerAdcProperties.offset, microcontrollerAdcProperties.vRefP, microcontrollerAdcProperties.gain);
}
else {
calData = uncalibrateU12AdcValueFromVolts(unCalData, microcontrollerAdcProperties.offset, microcontrollerAdcProperties.vRefP, microcontrollerAdcProperties.gain);
}

return calData;
}

Expand All @@ -564,6 +682,15 @@ public static double calibrateU12AdcValueToVolts(double uncalibratedData, double
double calibratedData = (uncalibratedData-offset) * ((vRefP/gain)/4095);
return calibratedData;
}

public static double calibrateU14AdcValueToMillivolts(double uncalibratedData, double offset, double vRefP, double gain){
return calibrateU14AdcValueToVolts(uncalibratedData, offset, vRefP*1000, gain);
}

public static double calibrateU14AdcValueToVolts(double uncalibratedData, double offset, double vRefP, double gain){
double calibratedData = (uncalibratedData-offset) * ((vRefP/gain)/16383);
return calibratedData;
}

public static double calibrateAdcValueToMillivolts(double uncalibratedData, double offset, double vRefP, double gain, CHANNEL_DATA_TYPE channelDataType){
double calibratedData = (uncalibratedData-offset) * (((vRefP*1000)/gain)/channelDataType.getMaxVal());
Expand All @@ -581,5 +708,15 @@ public static int uncalibrateU12AdcValueFromVolts(double calibratedData, double
double adcVal = (calibratedData / (((vRefP)/gain)/4095)) + offset;
return (int) adcVal;
}

public static int uncalibrateU14AdcValueFromMillivolts(double calibratedData, double offset, double vRefP, double gain) {
double adcVal = (calibratedData / (((vRefP*1000)/gain)/16383)) + offset;
return (int) adcVal;
}

public static int uncalibrateU14AdcValueFromVolts(double calibratedData, double offset, double vRefP, double gain) {
double adcVal = (calibratedData / (((vRefP)/gain)/16383)) + offset;
return (int) adcVal;
}

}
Loading