@@ -154,6 +154,7 @@ LfpDisplayOptions::LfpDisplayOptions (LfpDisplayCanvas* canvas_, LfpDisplaySplit
154154 typeButtons.add (tbut);
155155
156156 // Ranges for AUX/accelerometer data
157+ voltageRanges[ContinuousChannel::Type::AUX].add (" Auto" );
157158 voltageRanges[ContinuousChannel::Type::AUX].add (" 25" );
158159 voltageRanges[ContinuousChannel::Type::AUX].add (" 50" );
159160 voltageRanges[ContinuousChannel::Type::AUX].add (" 100" );
@@ -163,7 +164,7 @@ LfpDisplayOptions::LfpDisplayOptions (LfpDisplayCanvas* canvas_, LfpDisplaySplit
163164 voltageRanges[ContinuousChannel::Type::AUX].add (" 750" );
164165 voltageRanges[ContinuousChannel::Type::AUX].add (" 1000" );
165166 voltageRanges[ContinuousChannel::Type::AUX].add (" 2000" );
166- selectedVoltageRange[ContinuousChannel::Type::AUX] = 9 ;
167+ selectedVoltageRange[ContinuousChannel::Type::AUX] = 1 ; // Default to Auto
167168 rangeGain[ContinuousChannel::Type::AUX] = 0 .001f ; // mV
168169 rangeSteps[ContinuousChannel::Type::AUX] = 10 ;
169170 rangeUnits.add (" mV" );
@@ -549,11 +550,23 @@ LfpDisplayOptions::LfpDisplayOptions (LfpDisplayCanvas* canvas_, LfpDisplaySplit
549550 * rangeGain[ContinuousChannel::Type::ELECTRODE],
550551 ContinuousChannel::Type::ELECTRODE);
551552 lfpDisplay->setRange (voltageRanges[ContinuousChannel::Type::ADC][selectedVoltageRange[ContinuousChannel::Type::ADC] - 1 ].getFloatValue ()
552- * rangeGain[ContinuousChannel::Type::AUX ],
553+ * rangeGain[ContinuousChannel::Type::ADC ],
553554 ContinuousChannel::Type::ADC);
554- lfpDisplay->setRange (voltageRanges[ContinuousChannel::Type::AUX][selectedVoltageRange[ContinuousChannel::Type::AUX] - 1 ].getFloatValue ()
555- * rangeGain[ContinuousChannel::Type::AUX],
556- ContinuousChannel::Type::AUX);
555+
556+ // Handle Auto scaling for AUX channels during initialization
557+ String auxRangeValue = voltageRanges[ContinuousChannel::Type::AUX][selectedVoltageRange[ContinuousChannel::Type::AUX] - 1 ];
558+ if (auxRangeValue.equalsIgnoreCase (" Auto" ))
559+ {
560+ // Set a default range value for the type (used as fallback)
561+ lfpDisplay->setRange (2000 .0f * rangeGain[ContinuousChannel::Type::AUX], ContinuousChannel::Type::AUX);
562+ // Apply individual auto-scaling to each AUX channel based on their InputRange
563+ lfpDisplay->setAutoRangeForAuxChannels ();
564+ }
565+ else
566+ {
567+ lfpDisplay->setRange (auxRangeValue.getFloatValue () * rangeGain[ContinuousChannel::Type::AUX],
568+ ContinuousChannel::Type::AUX);
569+ }
557570}
558571
559572void LfpDisplayOptions::timerCallback ()
@@ -1198,17 +1211,39 @@ void LfpDisplayOptions::comboBoxChanged (ComboBox* cb)
11981211 {
11991212 if (cb->getSelectedId ())
12001213 {
1201- lfpDisplay->setRange (voltageRanges[selectedChannelType][cb->getSelectedId () - 1 ].getFloatValue () * rangeGain[selectedChannelType], selectedChannelType);
1214+ String selectedText = voltageRanges[selectedChannelType][cb->getSelectedId () - 1 ];
1215+
1216+ // Check if "Auto" is selected for AUX channels
1217+ if (selectedChannelType == ContinuousChannel::Type::AUX && selectedText.equalsIgnoreCase (" Auto" ))
1218+ {
1219+ // Set a default range value for the type (used as fallback)
1220+ lfpDisplay->setRange (2000 .0f * rangeGain[selectedChannelType], selectedChannelType);
1221+ // Apply individual auto-scaling to each AUX channel based on their InputRange
1222+ lfpDisplay->setAutoRangeForAuxChannels ();
1223+ }
1224+ else
1225+ {
1226+ lfpDisplay->setRange (selectedText.getFloatValue () * rangeGain[selectedChannelType], selectedChannelType);
1227+ }
12021228 }
12031229 else
12041230 {
12051231 float vRange = cb->getText ().getFloatValue ();
12061232 if (vRange)
12071233 {
1208- if (vRange < voltageRanges[selectedChannelType][0 ].getFloatValue ())
1234+ // Check if we should skip the first item (Auto) when validating range
1235+ int firstRangeIndex = 0 ;
1236+ if (selectedChannelType == ContinuousChannel::Type::AUX &&
1237+ voltageRanges[selectedChannelType][0 ].equalsIgnoreCase (" Auto" ))
12091238 {
1210- cb->setSelectedId (1 , dontSendNotification);
1211- vRange = voltageRanges[selectedChannelType][0 ].getFloatValue ();
1239+ firstRangeIndex = 1 ;
1240+ }
1241+
1242+ if (firstRangeIndex < voltageRanges[selectedChannelType].size () &&
1243+ vRange < voltageRanges[selectedChannelType][firstRangeIndex].getFloatValue ())
1244+ {
1245+ cb->setSelectedId (firstRangeIndex + 1 , dontSendNotification);
1246+ vRange = voltageRanges[selectedChannelType][firstRangeIndex].getFloatValue ();
12121247 }
12131248 else if (vRange > voltageRanges[selectedChannelType][voltageRanges[selectedChannelType].size () - 1 ].getFloatValue ())
12141249 {
@@ -1396,6 +1431,11 @@ ContinuousChannel::Type LfpDisplayOptions::getSelectedType()
13961431 return selectedChannelType;
13971432}
13981433
1434+ bool LfpDisplayOptions::isAuxAutoScaleEnabled ()
1435+ {
1436+ return selectedVoltageRangeValues[ContinuousChannel::Type::AUX].equalsIgnoreCase (" Auto" );
1437+ }
1438+
13991439void LfpDisplayOptions::setSelectedType (ContinuousChannel::Type type, bool toggleButton)
14001440{
14011441 if (selectedChannelType == type)
@@ -1547,7 +1587,20 @@ void LfpDisplayOptions::loadParameters (XmlElement* xml)
15471587 selectedVoltageRange[2 ] = voltageRanges[2 ].indexOf (ranges[2 ]) + 1 ;
15481588 rangeSelection->setText (ranges[selectedChannelType]);
15491589 lfpDisplay->setRange (ranges[0 ].getFloatValue () * rangeGain[0 ], ContinuousChannel::Type::ELECTRODE);
1550- lfpDisplay->setRange (ranges[1 ].getFloatValue () * rangeGain[1 ], ContinuousChannel::Type::AUX);
1590+
1591+ // Handle Auto scaling for AUX channels
1592+ if (ranges[1 ].equalsIgnoreCase (" Auto" ))
1593+ {
1594+ // Set a default range value for the type (used as fallback)
1595+ lfpDisplay->setRange (2000 .0f * rangeGain[ContinuousChannel::Type::AUX], ContinuousChannel::Type::AUX);
1596+ // Apply individual auto-scaling to each AUX channel based on their InputRange
1597+ lfpDisplay->setAutoRangeForAuxChannels ();
1598+ }
1599+ else
1600+ {
1601+ lfpDisplay->setRange (ranges[1 ].getFloatValue () * rangeGain[1 ], ContinuousChannel::Type::AUX);
1602+ }
1603+
15511604 lfpDisplay->setRange (ranges[2 ].getFloatValue () * rangeGain[2 ], ContinuousChannel::Type::ADC);
15521605
15531606 // LOGD(" Set range in ", MS_FROM_START, " milliseconds");
0 commit comments