Index: firmware/App/Drivers/InternalADC.c =================================================================== diff -u -r08e11fb11f818dd326617362ca7361b2fae1662a -r5a36a768d11cc597a36b894c1fb3a5e5590130f1 --- firmware/App/Drivers/InternalADC.c (.../InternalADC.c) (revision 08e11fb11f818dd326617362ca7361b2fae1662a) +++ firmware/App/Drivers/InternalADC.c (.../InternalADC.c) (revision 5a36a768d11cc597a36b894c1fb3a5e5590130f1) @@ -164,14 +164,21 @@ { // process readings from last conversion for ( i = 0; i < adcRawReadingsCount; i++ ) - { - U32 ch = adcChannelNum2ChannelId[ adcRawReadings[ i ].id ]; // TODO - need to range check .id? + { + if ( adcRawReadings[ i ].id < NUM_OF_INT_ADC_CHANNELS ) + { + U32 ch = adcChannelNum2ChannelId[ adcRawReadings[ i ].id ]; - adcReadingsTotals[ ch ] -= adcReadings[ ch ][ adcReadingsIdx[ ch ] ]; - adcReadings[ ch ][ adcReadingsIdx[ ch ] ] = adcRawReadings[i].value; - adcReadingsTotals[ ch ] += adcRawReadings[ i ].value; - adcReadingsAvgs[ ch ] = adcReadingsTotals[ ch ] >> ROLLING_AVG_SHIFT_DIVIDER; - adcReadingsIdx[ ch ] = INC_WRAP( adcReadingsIdx[ ch ], 0, SIZE_OF_ROLLING_AVG - 1 ); + adcReadingsTotals[ ch ] -= adcReadings[ ch ][ adcReadingsIdx[ ch ] ]; + adcReadings[ ch ][ adcReadingsIdx[ ch ] ] = adcRawReadings[i].value; + adcReadingsTotals[ ch ] += adcRawReadings[ i ].value; + adcReadingsAvgs[ ch ] = adcReadingsTotals[ ch ] >> ROLLING_AVG_SHIFT_DIVIDER; + adcReadingsIdx[ ch ] = INC_WRAP( adcReadingsIdx[ ch ], 0, SIZE_OF_ROLLING_AVG - 1 ); + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_INT_ADC_CHANNEL_NUMBER, adcRawReadings[ i ].id ) + } } } else