Index: firmware/App/Drivers/InternalADC.c =================================================================== diff -u -r0b17c6271cdc3c55697a74ecaadb477d9c8f5687 -r8467f8ff09e382e0991f14d02683080dc811e24e --- firmware/App/Drivers/InternalADC.c (.../InternalADC.c) (revision 0b17c6271cdc3c55697a74ecaadb477d9c8f5687) +++ firmware/App/Drivers/InternalADC.c (.../InternalADC.c) (revision 8467f8ff09e382e0991f14d02683080dc811e24e) @@ -135,14 +135,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