File tree Expand file tree Collapse file tree 6 files changed +69
-13
lines changed
Expand file tree Collapse file tree 6 files changed +69
-13
lines changed Original file line number Diff line number Diff line change 77 "string" : " cpp" ,
88 "string_view" : " cpp" ,
99 "deque" : " cpp" ,
10- "vector" : " cpp"
10+ "vector" : " cpp" ,
11+ "thread" : " cpp"
1112 }
1213}
Original file line number Diff line number Diff line change @@ -373,13 +373,26 @@ class ADCBoard {
373373 }
374374
375375 void restoreCalibrationFromFlash () {
376+ if (!isCalibrationReady ()) {
377+ return ;
378+ }
379+
376380 CalibrationData data;
377381 m4ReceiveCalibrationData (data);
382+
383+ if (!data.adcCalibrated ) {
384+ return ;
385+ }
386+
378387 int boardIndex = getBoardIndex ();
379388
380389 for (int i = 0 ; i < NUM_CHANNELS_PER_ADC_BOARD; i++) {
381390 setZeroScaleCalibration (i, data.adc_offset [NUM_CHANNELS_PER_ADC_BOARD * boardIndex + i]);
382- setFullScaleCalibration (i, data.adc_gain [NUM_CHANNELS_PER_ADC_BOARD * boardIndex + i]);
391+
392+ uint32_t fullScale = data.adc_gain [NUM_CHANNELS_PER_ADC_BOARD * boardIndex + i];
393+ if (fullScale != 0 ) {
394+ setFullScaleCalibration (i, fullScale);
395+ }
383396 }
384397 }
385398
Original file line number Diff line number Diff line change @@ -26,6 +26,7 @@ class God {
2626 registerMemberFunctionVector (timeSeriesAdcRead, " TIME_SERIES_ADC_READ" );
2727 registerMemberFunction (dacChannelCalibration, " DAC_CH_CAL" );
2828 registerMemberFunctionVector (boxcarAverageRamp, " BOXCAR_BUFFER_RAMP" );
29+ registerMemberFunction (hardResetCalibrationToDefaults, " HARD_RESET_CALIBRATION" );
2930 }
3031
3132 inline static OperationResult initialize () {
@@ -34,6 +35,21 @@ class God {
3435 return OperationResult::Success (" INITIALIZATION COMPLETE" );
3536 }
3637
38+ inline static OperationResult hardResetCalibrationToDefaults () {
39+ CalibrationData calibrationData;
40+ m4ReceiveCalibrationData (calibrationData);
41+ for (int i = 0 ; i < NUM_DAC_CHANNELS; i++) {
42+ calibrationData.gain [i] = 1 .0f ;
43+ calibrationData.offset [i] = 0 .0f ;
44+ calibrationData.adc_offset [i] = 0x800000 ; // Default ADC offset
45+ calibrationData.adc_gain [i] = 0x200000 ; // Default ADC gain
46+ }
47+ calibrationData.adcCalibrated = false ;
48+ m4SendCalibrationData (calibrationData);
49+
50+ return OperationResult::Success (" Calibration data reset to defaults" );
51+ }
52+
3753
3854 struct BoardUsage {
3955 uint8_t numBoards; // how many distinct boards are in use
Original file line number Diff line number Diff line change 11#pragma once
22
3+ #define NUM_CHANNELS 16
4+
35struct CalibrationData {
4- float gain [16 ];
5- float offset [16 ];
6+ float gain [NUM_CHANNELS ];
7+ float offset [NUM_CHANNELS ];
8+
9+ bool adcCalibrated ;
10+ uint32_t adc_offset [NUM_CHANNELS ];
11+ uint32_t adc_gain [NUM_CHANNELS ];
612
7- bool adcCalibrated = false;
8- uint32_t adc_offset [16 ];
9- uint32_t adc_gain [16 ];
13+ CalibrationData () : adcCalibrated (false ) {
14+ for (int i = 0 ; i < NUM_CHANNELS ; ++ i ) {
15+ gain [i ] = 1.0f ;
16+ offset [i ] = 0.0f ;
17+ adc_offset [i ] = 0x800000u ; // Default ADC offset
18+ adc_gain [i ] = 0x200000u ; // Default ADC gain
19+ }
20+ }
1021};
Original file line number Diff line number Diff line change @@ -84,7 +84,11 @@ void setup() {
8484 } else {
8585 for (int i=0 ; i<NUM_ADC_BOARDS * NUM_CHANNELS_PER_ADC_BOARD; i++) {
8686 ADCController::setChZeroScaleCalibration (i, calibrationData.adc_offset [i]);
87- ADCController::setChFullScaleCalibration (i, calibrationData.adc_gain [i]);
87+
88+ if (calibrationData.adc_gain [i] != 0 ) {
89+ ADCController::setChFullScaleCalibration (i, calibrationData.adc_gain [i]);
90+ }
91+
8892 }
8993 }
9094}
Original file line number Diff line number Diff line change 11#pragma once
22
3+ #define NUM_CHANNELS 16
4+
35struct CalibrationData {
4- float gain [16 ];
5- float offset [16 ];
6+ float gain [NUM_CHANNELS ];
7+ float offset [NUM_CHANNELS ];
8+
9+ bool adcCalibrated ;
10+ uint32_t adc_offset [NUM_CHANNELS ];
11+ uint32_t adc_gain [NUM_CHANNELS ];
612
7- bool adcCalibrated = false; // Flag to indicate if ADC calibration is done
8- uint32_t adc_offset [16 ];
9- uint32_t adc_gain [16 ];
13+ CalibrationData () : adcCalibrated (false ) {
14+ for (int i = 0 ; i < NUM_CHANNELS ; ++ i ) {
15+ gain [i ] = 1.0f ;
16+ offset [i ] = 0.0f ;
17+ adc_offset [i ] = 0x800000u ; // Default ADC offset
18+ adc_gain [i ] = 0x200000u ; // Default ADC gain
19+ }
20+ }
1021};
You can’t perform that action at this time.
0 commit comments