Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: src/admw_1001.c
- Revision:
- 36:54e2418e7620
- Parent:
- 33:df7a00f1b8e1
- Child:
- 41:df78b7d7b675
--- a/src/admw_1001.c Tue Nov 19 11:28:40 2019 +0000
+++ b/src/admw_1001.c Tue Nov 19 12:10:45 2019 +0000
@@ -926,13 +926,12 @@
READ_REG_U8(hDevice, channelCountReg.VALUE8, CORE_CHANNEL_COUNTn(chId));
READ_REG_U32(hDevice, sensorDetailsReg.VALUE32, CORE_SENSOR_DETAILSn(chId));
- if (channelCountReg.Channel_Enable && !sensorDetailsReg.Do_Not_Publish) {
- ADMW_CORE_Sensor_Type_t sensorTypeReg;
+ if (channelCountReg.Channel_Enable && !sensorDetailsReg.Do_Not_Publish)
+ {
unsigned nActualChannels = 1;
- READ_REG_U16(hDevice, sensorTypeReg.VALUE16, CORE_SENSOR_TYPEn(chId));
-
- if (chId == ADMW1001_CH_ID_DIG_SPI_0) {
+ if (chId == ADMW1001_CH_ID_DIG_SPI_0)
+ {
/* Some sensors automatically generate samples on additional
* "virtual" channels so these channels must be counted as
* active when those sensors are selected and we use the count
@@ -941,10 +940,15 @@
#if 0 /* SPI sensors arent supported at present to be added back once there is
* support for these sensors
*/
+ ADMW_CORE_Sensor_Type_t sensorTypeReg;
+
+ READ_REG_U16(hDevice, sensorTypeReg.VALUE16, CORE_SENSOR_TYPEn(chId));
+
if ((sensorTypeReg.Sensor_Type >=
- CORE_SENSOR_TYPE_SPI_ACCELEROMETER_A) &&
- (sensorTypeReg.Sensor_Type <=
- CORE_SENSOR_TYPE_SPI_ACCELEROMETER_B)) {
+ CORE_SENSOR_TYPE_SPI_ACCELEROMETER_A) &&
+ (sensorTypeReg.Sensor_Type <=
+ CORE_SENSOR_TYPE_SPI_ACCELEROMETER_B))
+ {
nActualChannels += 2;
}
#endif
@@ -1102,6 +1106,14 @@
return ADMW_SUCCESS;
}
+static ADMW_RESULT admw_SetExternalReferenceVoltage(
+ ADMW_DEVICE_HANDLE hDevice,
+ float32_t externalRefVoltage)
+{
+ WRITE_REG_FLOAT(hDevice, externalRefVoltage, CORE_EXTERNAL_VOLTAGE_REFERENCE);
+
+ return ADMW_SUCCESS;
+}
static ADMW_RESULT admw_SetExternalReferenceValues(
ADMW_DEVICE_HANDLE hDevice,
@@ -1149,10 +1161,54 @@
ADMW_LOG_ERROR("Failed to set RSenseValue");
return eRet;
}
+
+ eRet = admw_SetExternalReferenceVoltage(hDevice, pMeasConfig->externalRefVoltage);
+ if (eRet != ADMW_SUCCESS)
+ {
+ ADMW_LOG_ERROR("Failed to set External reference Voltage");
+ return eRet;
+ }
+
return ADMW_SUCCESS;
}
+ADMW_RESULT admw1001_SetDiagnosticsConfig(
+ ADMW_DEVICE_HANDLE hDevice,
+ ADMW1001_DIAGNOSTICS_CONFIG *pDiagnosticsConfig)
+{
+ ADMW_CORE_Diagnostics_Control_t diagnosticsControlReg;
+ diagnosticsControlReg.VALUE8 = REG_RESET_VAL(CORE_DIAGNOSTICS_CONTROL);
+
+ if (pDiagnosticsConfig->disableMeasurementDiag)
+ diagnosticsControlReg.Diag_Meas_En = 0;
+ else
+ diagnosticsControlReg.Diag_Meas_En = 1;
+
+ switch (pDiagnosticsConfig->osdFrequency)
+ {
+ case ADMW1001_OPEN_SENSOR_DIAGNOSTICS_DISABLED:
+ diagnosticsControlReg.Diag_OSD_Freq = CORE_DIAGNOSTICS_CONTROL_OCD_OFF;
+ break;
+ case ADMW1001_OPEN_SENSOR_DIAGNOSTICS_PER_CYCLE:
+ diagnosticsControlReg.Diag_OSD_Freq = CORE_DIAGNOSTICS_CONTROL_OCD_PER_1_CYCLE;
+ break;
+ case ADMW1001_OPEN_SENSOR_DIAGNOSTICS_PER_100_CYCLES:
+ diagnosticsControlReg.Diag_OSD_Freq = CORE_DIAGNOSTICS_CONTROL_OCD_PER_10_CYCLES;
+ break;
+ case ADMW1001_OPEN_SENSOR_DIAGNOSTICS_PER_1000_CYCLES:
+ diagnosticsControlReg.Diag_OSD_Freq = CORE_DIAGNOSTICS_CONTROL_OCD_PER_100_CYCLES;
+ break;
+ default:
+ ADMW_LOG_ERROR("Invalid open-sensor diagnostic frequency %d specified",
+ pDiagnosticsConfig->osdFrequency);
+ return ADMW_INVALID_PARAM;
+ }
+
+ WRITE_REG_U8(hDevice, diagnosticsControlReg.VALUE8, CORE_DIAGNOSTICS_CONTROL);
+
+ return ADMW_SUCCESS;
+}
ADMW_RESULT admw1001_SetChannelCount(
ADMW_DEVICE_HANDLE hDevice,
@@ -1262,8 +1318,13 @@
case ADMW1001_ADC_SENSOR_THERMISTOR_2:
case ADMW1001_ADC_SENSOR_THERMISTOR_3:
case ADMW1001_ADC_SENSOR_THERMISTOR_4:
+ case ADMW1001_ADC_SENSOR_SINGLE_ENDED_ABSOLUTE:
+ case ADMW1001_ADC_SENSOR_DIFFERENTIAL_ABSOLUTE:
+ case ADMW1001_ADC_SENSOR_SINGLE_ENDED_RATIO:
+ case ADMW1001_ADC_SENSOR_DIFFERENTIAL_RATIO:
if (! (ADMW1001_CHANNEL_IS_ADC_SENSOR(eChannelId) ||
- ADMW1001_CHANNEL_IS_ADC_CJC(eChannelId))) {
+ ADMW1001_CHANNEL_IS_ADC_CJC(eChannelId) || ADMW1001_CHANNEL_IS_ADC(eChannelId) ))
+ {
ADMW_LOG_ERROR(
"Invalid ADC sensor type %d specified for channel %d",
sensorType, eChannelId);
@@ -2204,12 +2265,12 @@
return eRet;
}
-// eRet = admw1001_SetDiagnosticsConfig(hDevice, &pDeviceConfig->diagnostics);
-// if (eRet)
-// {
-// ADMW_LOG_ERROR("Failed to set diagnostics configuration");
-// return eRet;
-// }
+ eRet = admw1001_SetDiagnosticsConfig(hDevice, &pDeviceConfig->diagnostics);
+ if (eRet)
+ {
+ ADMW_LOG_ERROR("Failed to set diagnostics configuration");
+ return eRet;
+ }
for (ADMW1001_CH_ID id = ADMW1001_CH_ID_ANLG_1_UNIVERSAL;
id < ADMW1001_MAX_CHANNELS;