@@ -73,7 +73,7 @@ void NiclaSenseEnv::end() {
7373 }
7474}
7575
76- bool NiclaSenseEnv::storeSettingsInFlash () {
76+ bool NiclaSenseEnv::persistSettings () {
7777 uint8_t controlRegisterData = readFromRegister<uint8_t >(CONTROL_REGISTER_INFO);
7878
7979 writeToRegister (CONTROL_REGISTER_INFO, controlRegisterData | (1 << 7 ));
@@ -137,7 +137,7 @@ bool NiclaSenseEnv::restoreFactorySettings() {
137137 boardControlRegisterData = readFromRegister<uint8_t >(CONTROL_REGISTER_INFO);
138138
139139 if ((boardControlRegisterData & (1 << 5 )) == 0 ) {
140- return storeSettingsInFlash ();
140+ return persistSettings ();
141141 }
142142 Serial.println (" ⌛️ Waiting for factory reset to complete..." );
143143 // Exponential sleep duration
@@ -152,81 +152,122 @@ int NiclaSenseEnv::UARTBaudRate() {
152152 return baudRateMap[uartControlRegisterData];
153153}
154154
155- void NiclaSenseEnv::setUARTBaudRate (int baudRate) {
155+ bool NiclaSenseEnv::setUARTBaudRate (int baudRate, bool persist ) {
156156 int baudRateIndex = baudRateNativeValue (baudRate);
157157 if (baudRateIndex == -1 ) {
158- return ; // Baud rate not found
158+ return false ; // Baud rate not found
159159 }
160160
161161 uint8_t uartControlRegisterData = readFromRegister<uint8_t >(UART_CONTROL_REGISTER_INFO);
162162 if ((uartControlRegisterData & 7 ) == baudRateIndex) {
163- return ; // Value is already the same
163+ return true ; // Value is already the same
164164 }
165- writeToRegister (UART_CONTROL_REGISTER_INFO, (uartControlRegisterData & ~7 ) | baudRateIndex);
165+ if (!writeToRegister (UART_CONTROL_REGISTER_INFO, (uartControlRegisterData & ~7 ) | baudRateIndex)){
166+ return false ;
167+ }
168+
169+ if (persist) {
170+ return persistRegister (UART_CONTROL_REGISTER_INFO);
171+ }
172+
173+ return true ;
166174}
167175
168176bool NiclaSenseEnv::isUARTCSVOutputEnabled () {
169177 uint8_t boardControlRegisterData = readFromRegister<uint8_t >(CONTROL_REGISTER_INFO);
170178 return (boardControlRegisterData & (1 << 1 )) != 0 ;
171179}
172180
173- void NiclaSenseEnv::setUARTCSVOutputEnabled (bool enabled) {
181+ bool NiclaSenseEnv::setUARTCSVOutputEnabled (bool enabled, bool persist ) {
174182 uint8_t boardControlRegisterData = readFromRegister<uint8_t >(CONTROL_REGISTER_INFO);
175183 if ((boardControlRegisterData & 2 ) == static_cast <int >(enabled)) {
176- return ; // Value is already the same
184+ return true ; // Value is already the same
185+ }
186+ if (!writeToRegister (CONTROL_REGISTER_INFO, (boardControlRegisterData & ~2 ) | (enabled << 1 ))){
187+ return false ;
177188 }
178- writeToRegister (CONTROL_REGISTER_INFO, (boardControlRegisterData & ~2 ) | (enabled << 1 ));
189+
190+ if (persist) {
191+ return persistRegister (CONTROL_REGISTER_INFO);
192+ }
193+
194+ return true ;
179195}
180196
181197char NiclaSenseEnv::CSVDelimiter () {
182198 uint8_t csvDelimiterRegisterData = readFromRegister<uint8_t >(CSV_DELIMITER_REGISTER_INFO);
183199 return static_cast <char >(csvDelimiterRegisterData);
184200}
185201
186- void NiclaSenseEnv::setCSVDelimiter (char delimiter) {
202+ bool NiclaSenseEnv::setCSVDelimiter (char delimiter, bool persist ) {
187203 char currentDelimiter = CSVDelimiter ();
188204 if (currentDelimiter == delimiter) {
189- return ; // Value is already the same
205+ return true ; // Value is already the same
190206 }
191207
192208 // Define prohibited delimiters
193209 const char prohibitedDelimiters[] = {' \r ' , ' \n ' , ' \\ ' , ' "' , ' \' ' };
194210
195211 for (auto prohibitedDelimiter : prohibitedDelimiters) {
196212 if (delimiter == prohibitedDelimiter) {
197- return ; // Delimiter is prohibited
213+ return false ; // Delimiter is prohibited
198214 }
199215 }
200216
201217 // Use ASCII code of the delimiter character
202- writeToRegister (CSV_DELIMITER_REGISTER_INFO, static_cast <uint8_t >(delimiter));
218+ if (!writeToRegister (CSV_DELIMITER_REGISTER_INFO, static_cast <uint8_t >(delimiter))){
219+ return false ;
220+ }
221+
222+ if (persist) {
223+ return persistRegister (CSV_DELIMITER_REGISTER_INFO);
224+ }
225+
226+ return true ;
203227}
204228
205229bool NiclaSenseEnv::isDebuggingEnabled () {
206230 uint8_t boardControlRegisterData = readFromRegister<uint8_t >(CONTROL_REGISTER_INFO);
207231 return (boardControlRegisterData & 1 ) != 0 ;
208232}
209233
210- void NiclaSenseEnv::setDebuggingEnabled (bool enabled) {
234+ bool NiclaSenseEnv::setDebuggingEnabled (bool enabled, bool persist ) {
211235 uint8_t boardControlRegisterData = readFromRegister<uint8_t >(CONTROL_REGISTER_INFO);
212236 if ((boardControlRegisterData & 1 ) == static_cast <int >(enabled)) {
213- return ; // Value is already the same
237+ return true ; // Value is already the same
238+ }
239+ if (!writeToRegister (CONTROL_REGISTER_INFO, (boardControlRegisterData & ~1 ) | enabled)){
240+ return false ;
214241 }
215- writeToRegister (CONTROL_REGISTER_INFO, (boardControlRegisterData & ~1 ) | enabled);
242+
243+ if (persist){
244+ return persistRegister (CONTROL_REGISTER_INFO);
245+ }
246+
247+ return true ;
216248}
217249
218- void NiclaSenseEnv::setDeviceAddress (int address) {
250+ bool NiclaSenseEnv::setDeviceAddress (int address, bool persist ) {
219251 if (address < 0 || address > 127 ) {
220- return ; // Invalid address
252+ return false ; // Invalid address
221253 }
222254 uint8_t addressRegisterData = readFromRegister<uint8_t >(SLAVE_ADDRESS_REGISTER_INFO);
223255 // Check bits 0 - 6
224256 if ((addressRegisterData & 127 ) == address) {
225- return ; // Value is already the same
257+ return true ; // Value is already the same
226258 }
227- writeToRegister (SLAVE_ADDRESS_REGISTER_INFO, (addressRegisterData & ~127 ) | address);
259+ if (!writeToRegister (SLAVE_ADDRESS_REGISTER_INFO, (addressRegisterData & ~127 ) | address)){
260+ return false ;
261+ }
262+
228263 delayMicroseconds (100 ); // Wait for the new address to take effect
229264 this ->i2cDeviceAddress = address;
265+
266+ if (persist) {
267+ return persistRegister (SLAVE_ADDRESS_REGISTER_INFO);
268+ }
269+
270+ return true ;
230271}
231272
232273// Function to get the index for a given baud rate
0 commit comments