@ -6,6 +6,11 @@ 
			
		
	
		
			
				
					# ifndef __SETTINGS_H__  
			
		
	
		
			
				
					# define __SETTINGS_H__  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					# if defined(F) && defined(ESP32)  
			
		
	
		
			
				
					  # undef F  
			
		
	
		
			
				
					  # define F(sl) (sl)  
			
		
	
		
			
				
					# endif  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					# include  <Arduino.h>  
			
		
	
		
			
				
					# include  <ArduinoJson.h>  
			
		
	
		
			
				
					# include  <LittleFS.h>  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -410,12 +415,12 @@ class settings { 
			
		
	
		
			
				
					                ah : : ip2Char ( mCfg . sys . ip . dns2 ,  buf ) ;     obj [ F ( " dns2 " ) ]  =  String ( buf ) ;  
			
		
	
		
			
				
					                ah : : ip2Char ( mCfg . sys . ip . gateway ,  buf ) ;  obj [ F ( " gtwy " ) ]  =  String ( buf ) ;  
			
		
	
		
			
				
					            }  else  {  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " ssid " ) ) )  snprintf ( mCfg . sys . stationSsid ,  SSID_LEN ,     " %s " ,  obj [ F ( " ssid " ) ] . as < const  char * > ( ) ) ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " pwd " ) ) )  snprintf ( mCfg . sys . stationPwd ,    PWD_LEN ,      " %s " ,  obj [ F ( " pwd " ) ] . as < const  char * > ( ) ) ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " dev " ) ) )  snprintf ( mCfg . sys . deviceName ,    DEVNAME_LEN ,  " %s " ,  obj [ F ( " dev " ) ] . as < const  char * > ( ) ) ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " adm " ) ) )  snprintf ( mCfg . sys . adminPwd ,      PWD_LEN ,      " %s " ,  obj [ F ( " adm " ) ] . as < const  char * > ( ) ) ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " prot_mask " ) ) )  mCfg . sys . protectionMask  =  obj [ F ( " prot_mask "  ) ] ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " dark " ) ) )  mCfg . sys . darkMode        =  obj [ F ( " dark "  ) ] ;  
			
		
	
		
			
				
					                getChar ( obj ,  F ( " ssid " ) ,  mCfg . sys . stationSsid ,  SSID_LEN ) ;  
			
		
	
		
			
				
					                getChar ( obj ,  F ( " pwd " ) ,  mCfg . sys . stationPwd ,  PWD_LEN ) ;  
			
		
	
		
			
				
					                getChar ( obj ,  F ( " adm " ) ,  mCfg . sys . deviceName ,  DEVNAME_LEN ) ;  
			
		
	
		
			
				
					                getChar ( obj ,  F ( " dev " ) ,  mCfg . sys . adminPwd ,  PWD_LEN ) ;  
			
		
	
		
			
				
					                getVal < uint16_t > ( obj ,  F ( " prot_mask " ) ,  & mCfg . sys . protectionMask ) ;  
			
		
	
		
			
				
					                getVal < bool > ( obj ,  F ( " dark " ) ,  & mCfg . sys . darkMode ) ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " ip " ) ) )  ah : : ip2Arr ( mCfg . sys . ip . ip ,       obj [ F ( " ip " ) ] . as < const  char * > ( ) ) ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " mask " ) ) )  ah : : ip2Arr ( mCfg . sys . ip . mask ,     obj [ F ( " mask " ) ] . as < const  char * > ( ) ) ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " dns1 " ) ) )  ah : : ip2Arr ( mCfg . sys . ip . dns1 ,     obj [ F ( " dns1 " ) ] . as < const  char * > ( ) ) ;  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -440,15 +445,15 @@ class settings { 
			
		
	
		
			
				
					                obj [ F ( " miso " ) ]       =  mCfg . nrf . pinMiso ;  
			
		
	
		
			
				
					                obj [ F ( " pwr " ) ]        =  mCfg . nrf . amplifierPower ;  
			
		
	
		
			
				
					            }  else  {  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " ssid " ) ) )  mCfg . nrf . sendInterval       =  obj [ F ( " intvl " ) ] ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " maxRetry " ) ) )  mCfg . nrf . maxRetransPerPyld  =  obj [ F ( " maxRetry "  ) ] ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " cs " ) ) )  mCfg . nrf . pinCs              =  obj [ F ( " cs " ) ] ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " ce " ) ) )  mCfg . nrf . pinCe              =  obj [ F ( " ce " ) ] ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " irq " ) ) )  mCfg . nrf . pinIrq             =  obj [ F ( " irq " ) ] ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " sclk " ) ) )  mCfg . nrf . pinSclk            =  obj [ F ( " sclk " ) ] ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " mosi " ) ) )  mCfg . nrf . pinMosi            =  obj [ F ( " mosi "  ) ] ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " miso " ) ) )  mCfg . nrf . pinMiso            =  obj [ F ( " miso "  ) ] ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " pwr " ) ) )  mCfg . nrf . amplifierPower     =  obj [ F ( " pwr "  ) ] ;  
			
		
	
		
			
				
					                getVal < uint16_t > ( obj ,  F ( " intvl " ) ,  & mCfg . nrf . sendInterval ) ;  
			
		
	
		
			
				
					                getVal < uint8_t > ( obj ,  F ( " maxRetry " ) ,  & mCfg . nrf . maxRetransPerPyld ) ;  
			
		
	
		
			
				
					                getVal < uint8_t > ( obj ,  F ( " cs " ) ,  & mCfg . nrf . pinCs ) ;  
			
		
	
		
			
				
					                getVal < uint8_t > ( obj ,  F ( " ce " ) ,  & mCfg . nrf . pinCe ) ;  
			
		
	
		
			
				
					                getVal < uint8_t > ( obj ,  F ( " irq " ) ,  & mCfg . nrf . pinIrq ) ;  
			
		
	
		
			
				
					                getVal < uint8_t > ( obj ,  F ( " sclk " ) ,  & mCfg . nrf . pinSclk ) ;  
			
		
	
		
			
				
					                getVal < uint8_t > ( obj ,  F ( " mosi " ) ,  & mCfg . nrf . pinMosi ) ;  
			
		
	
		
			
				
					                getVal < uint8_t > ( obj ,  F ( " miso " ) ,  & mCfg . nrf . pinMiso ) ;  
			
		
	
		
			
				
					                getVal < uint8_t > ( obj ,  F ( " pwr " ) ,  & mCfg . nrf . amplifierPower ) ;  
			
		
	
		
			
				
					                if ( ( obj [ F ( " cs " ) ]  = =  obj [ F ( " ce " ) ] ) )  {  
			
		
	
		
			
				
					                    mCfg . nrf . pinCs    =  DEF_CS_PIN ;  
			
		
	
		
			
				
					                    mCfg . nrf . pinCe    =  DEF_CE_PIN ;  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -465,8 +470,8 @@ class settings { 
			
		
	
		
			
				
					                obj [ F ( " addr " ) ]  =  mCfg . ntp . addr ;  
			
		
	
		
			
				
					                obj [ F ( " port " ) ]  =  mCfg . ntp . port ;  
			
		
	
		
			
				
					            }  else  {  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " addr " ) ) )  snprintf ( mCfg . ntp . addr ,  NTP_ADDR_LEN ,  " %s " ,  obj [ F ( " addr " ) ] . as < const  char * > ( ) ) ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " port " ) ) )  mCfg . ntp . port  =  obj [ F ( " port " ) ] ;  
			
		
	
		
			
				
					                getChar ( obj ,  F ( " addr " ) ,  mCfg . ntp . addr ,  NTP_ADDR_LEN ) ;  
			
		
	
		
			
				
					                getVal < uint16_t > ( obj ,  F ( " port " ) ,  & mCfg . ntp . port ) ;  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -477,10 +482,10 @@ class settings { 
			
		
	
		
			
				
					                obj [ F ( " dis " ) ]   =  mCfg . sun . disNightCom ;  
			
		
	
		
			
				
					                obj [ F ( " offs " ) ]  =  mCfg . sun . offsetSec ;  
			
		
	
		
			
				
					            }  else  {  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " lat " ) ) )  mCfg . sun . lat          =  obj [ F ( " lat " ) ] ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " lon " ) ) )  mCfg . sun . lon          =  obj [ F ( " lon " ) ] ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " dis " ) ) )  mCfg . sun . disNightCom  =  obj [ F ( " dis "  ) ] ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " offs " ) ) )  mCfg . sun . offsetSec    =  obj [ F ( " offs "  ) ] ;  
			
		
	
		
			
				
					                getVal < float > ( obj ,  F ( " lat " ) ,  & mCfg . sun . lat ) ;  
			
		
	
		
			
				
					                getVal < float > ( obj ,  F ( " lon " ) ,  & mCfg . sun . lon ) ;  
			
		
	
		
			
				
					                getVal < bool > ( obj ,  F ( " dis " ) ,  & mCfg . sun . disNightCom ) ;  
			
		
	
		
			
				
					                getVal < uint16_t > ( obj ,  F ( " offs " ) ,  & mCfg . sun . offsetSec ) ;  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -490,9 +495,9 @@ class settings { 
			
		
	
		
			
				
					                obj [ F ( " show " ) ]   =  mCfg . serial . showIv ;  
			
		
	
		
			
				
					                obj [ F ( " debug " ) ]  =  mCfg . serial . debug ;  
			
		
	
		
			
				
					            }  else  {  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " intvl " ) ) )  mCfg . serial . interval  =  obj [ F ( " intvl "  ) ] ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " show " ) ) )  mCfg . serial . showIv    =  obj [ F ( " show "  ) ] ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " debug " ) ) )  mCfg . serial . debug     =  obj [ F ( " debug "  ) ] ;  
			
		
	
		
			
				
					                getVal < uint16_t > ( obj ,  F ( " intvl " ) ,  & mCfg . serial . interval ) ;  
			
		
	
		
			
				
					                getVal < bool > ( obj ,  F ( " show " ) ,  & mCfg . serial . showIv ) ;  
			
		
	
		
			
				
					                getVal < bool > ( obj ,  F ( " debug " ) ,  & mCfg . serial . debug ) ;  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -506,12 +511,12 @@ class settings { 
			
		
	
		
			
				
					                obj [ F ( " intvl " ) ]   =  mCfg . mqtt . interval ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            }  else  {  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " port " ) ) )  mCfg . mqtt . port      =  obj [ F ( " port " ) ] ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " intvl " ) ) )  mCfg . mqtt . interval  =  obj [ F ( " intvl "  ) ] ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " broker " ) ) )  snprintf ( mCfg . mqtt . broker ,  MQTT_ADDR_LEN ,   " %s " ,  obj [ F ( " broker " ) ] . as < const  char * > ( ) ) ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " user " ) ) )  snprintf ( mCfg . mqtt . user ,     MQTT_USER_LEN ,   " %s " ,  obj [ F ( " user " ) ] . as < const  char * > ( ) ) ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " pwd " ) ) )  snprintf ( mCfg . mqtt . pwd ,      MQTT_PWD_LEN ,    " %s " ,  obj [ F ( " pwd " ) ] . as < const  char * > ( ) ) ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " topic " ) ) )  snprintf ( mCfg . mqtt . topic ,    MQTT_TOPIC_LEN ,  " %s " ,  obj [ F ( " topic " ) ] . as < const  char * > ( ) ) ;  
			
		
	
		
			
				
					                getVal < uint16_t > ( obj ,  F ( " port " ) ,  & mCfg . mqtt . port ) ;  
			
		
	
		
			
				
					                getVal < uint16_t > ( obj ,  F ( " intvl " ) ,  & mCfg . mqtt . interval ) ;  
			
		
	
		
			
				
					                getChar ( obj ,  F ( " broker " ) ,  mCfg . mqtt . broker ,  MQTT_ADDR_LEN ) ;  
			
		
	
		
			
				
					                getChar ( obj ,  F ( " user " ) ,  mCfg . mqtt . user ,  MQTT_USER_LEN ) ;  
			
		
	
		
			
				
					                getChar ( obj ,  F ( " pwd " ) ,  mCfg . mqtt . pwd ,  MQTT_PWD_LEN ) ;  
			
		
	
		
			
				
					                getChar ( obj ,  F ( " topic " ) ,  mCfg . mqtt . topic ,  MQTT_TOPIC_LEN ) ;  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -519,11 +524,11 @@ class settings { 
			
		
	
		
			
				
					            if ( set )  {  
			
		
	
		
			
				
					                obj [ F ( " 0 " ) ]  =  mCfg . led . led0 ;  
			
		
	
		
			
				
					                obj [ F ( " 1 " ) ]  =  mCfg . led . led1 ;  
			
		
	
		
			
				
					                obj [ F ( " led_high_active " ) ]  =  mCfg . led . led_high_active ;  
			
		
	
		
			
				
					                obj [ F ( " act_high " ) ]  =  mCfg . led . led_high_active ;  
			
		
	
		
			
				
					            }  else  {  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " 0 " ) ) )  mCfg . led . led0  =  obj [ F ( " 0 " ) ] ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " 1 " ) ) )  mCfg . led . led1  =  obj [ F ( " 1 " ) ] ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " led_high_active " ) ) )  mCfg . led . led_high_active  =  obj [ F ( " led_high_active " ) ] ;  
			
		
	
		
			
				
					                getVal < uint8_t > ( obj ,  F ( " 0 " ) ,  & mCfg . led . led0 ) ;  
			
		
	
		
			
				
					                getVal < uint8_t > ( obj ,  F ( " 1 " ) ,  & mCfg . led . led1 ) ;  
			
		
	
		
			
				
					                getVal < uint8_t > ( obj ,  F ( " act_high " ) ,  & mCfg . led . led_high_active ) ;  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -545,19 +550,19 @@ class settings { 
			
		
	
		
			
				
					                disp [ F ( " dc " ) ]  =  mCfg . plugin . display . disp_dc ;  
			
		
	
		
			
				
					            }  else  {  
			
		
	
		
			
				
					                JsonObject  disp  =  obj [ " disp " ] ;  
			
		
	
		
			
				
					                if ( disp . containsKey ( F ( " type " ) ) )  mCfg . plugin . display . type  =  disp [ F ( " type "  ) ] ;  
			
		
	
		
			
				
					                if ( disp . containsKey ( F ( " pwrSafe " ) ) )  mCfg . plugin . display . pwrSaveAtIvOffline  =  ( bool  ) disp [ F ( " pwrSafe " ) ] ;  
			
		
	
		
			
				
					                if ( disp . containsKey ( F ( " pxShift " ) ) )  mCfg . plugin . display . pxShift  =  ( bool  ) disp [ F ( " pxShift " ) ] ;  
			
		
	
		
			
				
					                if ( disp . containsKey ( F ( " rotation " ) ) )  mCfg . plugin . display . rot  =  disp [ F ( " rotation "  ) ] ;  
			
		
	
		
			
				
					                getVal < uint8_t > ( disp ,  F ( " type " ) ,  & mCfg . plugin . display . type ) ;  
			
		
	
		
			
				
					                getVal < bool > ( disp ,  F ( " pwrSafe " ) ,  & mCfg . plugin . display . pwrSaveAtIvOffline ) ;  
			
		
	
		
			
				
					                getVal < bool > ( disp ,  F ( " pxShift " ) ,  & mCfg . plugin . display . pxShift ) ;  
			
		
	
		
			
				
					                getVal < uint8_t > ( disp ,  F ( " rotation " ) ,  & mCfg . plugin . display . rot ) ;  
			
		
	
		
			
				
					                //mCfg.plugin.display.wakeUp = disp[F("wake")];
  
			
		
	
		
			
				
					                //mCfg.plugin.display.sleepAt = disp[F("sleep")];
  
			
		
	
		
			
				
					                if ( disp . containsKey ( F ( " contrast " ) ) )  mCfg . plugin . display . contrast  =  disp [ F ( " contrast "  ) ] ;  
			
		
	
		
			
				
					                if ( disp . containsKey ( F ( " data " ) ) )  mCfg . plugin . display . disp_data  =  disp [ F ( " data "  ) ] ;  
			
		
	
		
			
				
					                if ( disp . containsKey ( F ( " clock " ) ) )  mCfg . plugin . display . disp_clk  =  disp [ F ( " clock "  ) ] ;  
			
		
	
		
			
				
					                if ( disp . containsKey ( F ( " cs " ) ) )  mCfg . plugin . display . disp_cs  =  disp [ F ( " cs "  ) ] ;  
			
		
	
		
			
				
					                if ( disp . containsKey ( F ( " reset " ) ) )  mCfg . plugin . display . disp_reset  =  disp [ F ( " reset "  ) ] ;  
			
		
	
		
			
				
					                if ( disp . containsKey ( F ( " busy " ) ) )  mCfg . plugin . display . disp_busy  =  disp [ F ( " busy "  ) ] ;  
			
		
	
		
			
				
					                if ( disp . containsKey ( F ( " dc " ) ) )  mCfg . plugin . display . disp_dc  =  disp [ F ( " dc "  ) ] ;  
			
		
	
		
			
				
					                getVal < uint8_t > ( disp ,  F ( " contrast " ) ,  & mCfg . plugin . display . contrast ) ;  
			
		
	
		
			
				
					                getVal < uint8_t > ( disp ,  F ( " data " ) ,  & mCfg . plugin . display . disp_data ) ;  
			
		
	
		
			
				
					                getVal < uint8_t > ( disp ,  F ( " clock " ) ,  & mCfg . plugin . display . disp_clk ) ;  
			
		
	
		
			
				
					                getVal < uint8_t > ( disp ,  F ( " cs " ) ,  & mCfg . plugin . display . disp_cs ) ;  
			
		
	
		
			
				
					                getVal < uint8_t > ( disp ,  F ( " reset " ) ,  & mCfg . plugin . display . disp_reset ) ;  
			
		
	
		
			
				
					                getVal < uint8_t > ( disp ,  F ( " busy " ) ,  & mCfg . plugin . display . disp_busy ) ;  
			
		
	
		
			
				
					                getVal < uint8_t > ( disp ,  F ( " dc " ) ,  & mCfg . plugin . display . disp_dc ) ;  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -569,10 +574,10 @@ class settings { 
			
		
	
		
			
				
					                obj [ F ( " rstComStop " ) ]   =  ( bool ) mCfg . inst . rstValsCommStop ;  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					            else  {  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " en " ) ) )  mCfg . inst . enabled  =  ( bool ) obj [ F ( " en " ) ] ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " rstMidNight " ) ) )  mCfg . inst . rstYieldMidNight  =  ( bool  ) obj [ " rstMidNight " ] ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " rstNotAvail " ) ) )  mCfg . inst . rstValsNotAvail   =  ( bool  ) obj [ " rstNotAvail " ] ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " rstComStop " ) ) )  mCfg . inst . rstValsCommStop   =  ( bool  ) obj [ " rstComStop " ] ;  
			
		
	
		
			
				
					                getVal < bool > ( obj ,  F ( " en " ) ,  & mCfg . inst . enabled ) ;  
			
		
	
		
			
				
					                getVal < bool > ( obj ,  F ( " rstMidNight " ) ,  & mCfg . inst . rstYieldMidNight ) ;  
			
		
	
		
			
				
					                getVal < bool > ( obj ,  F ( " rstNotAvail " ) ,  & mCfg . inst . rstValsNotAvail ) ;  
			
		
	
		
			
				
					                getVal < bool > ( obj ,  F ( " rstComStop " ) ,  & mCfg . inst . rstValsCommStop ) ;  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            JsonArray  ivArr ;  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -582,11 +587,8 @@ class settings { 
			
		
	
		
			
				
					                if ( set )  {  
			
		
	
		
			
				
					                    if ( mCfg . inst . iv [ i ] . serial . u64  ! =  0ULL )  
			
		
	
		
			
				
					                        jsonIv ( ivArr . createNestedObject ( ) ,  & mCfg . inst . iv [ i ] ,  true ) ;  
			
		
	
		
			
				
					                }  
			
		
	
		
			
				
					                else  {  
			
		
	
		
			
				
					                    if ( ! obj [ F ( " iv " ) ] [ i ] . isNull ( ) )  
			
		
	
		
			
				
					                        jsonIv ( obj [ F ( " iv " ) ] [ i ] ,  & mCfg . inst . iv [ i ] ) ;  
			
		
	
		
			
				
					                }  
			
		
	
		
			
				
					                }  else  if ( ! obj [ F ( " iv " ) ] [ i ] . isNull ( ) )  
			
		
	
		
			
				
					                    jsonIv ( obj [ F ( " iv " ) ] [ i ] ,  & mCfg . inst . iv [ i ] ) ;  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -601,17 +603,41 @@ class settings { 
			
		
	
		
			
				
					                    obj [ F ( " chName " ) ] [ i ]  =  cfg - > chName [ i ] ;  
			
		
	
		
			
				
					                }  
			
		
	
		
			
				
					            }  else  {  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " en " ) ) )  cfg - > enabled  =  ( bool ) obj [ F ( " en " ) ] ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " name " ) ) )  snprintf ( cfg - > name ,  MAX_NAME_LENGTH ,  " %s " ,  obj [ F ( " name " ) ] . as < const  char * > ( ) ) ;  
			
		
	
		
			
				
					                if ( obj . containsKey ( F ( " sn " ) ) )  cfg - > serial . u64  =  obj [ F ( " sn " ) ] ;  
			
		
	
		
			
				
					                getVal < bool > ( obj ,  F ( " en " ) ,  & cfg - > enabled ) ;  
			
		
	
		
			
				
					                getChar ( obj ,  F ( " name " ) ,  cfg - > name ,  MAX_NAME_LENGTH ) ;  
			
		
	
		
			
				
					                getVal < uint64_t > ( obj ,  F ( " sn " ) ,  & cfg - > serial . u64 ) ;  
			
		
	
		
			
				
					                for ( uint8_t  i  =  0 ;  i  <  4 ;  i + + )  {  
			
		
	
		
			
				
					                    if ( obj . containsKey ( F ( " yield " ) ) )  cfg - > yieldCor [ i ]  =  obj [ F ( " yield "  ) ] [ i ] ;  
			
		
	
		
			
				
					                    if ( obj . containsKey ( F ( " pwr " ) ) )  cfg - > chMaxPwr [ i ]  =  obj [ F ( " pwr "  ) ] [ i ] ;  
			
		
	
		
			
				
					                    if ( obj . containsKey ( F ( " chName " ) ) )  snprintf ( cfg - > chName [ i ] ,  MAX_NAME_LENGTH ,  " %s " ,  obj [ F ( " chName " ) ] [ i ] . as < const  char * > ( ) ) ;  
			
		
	
		
			
				
					                    getVal < int32_t > ( obj ,  F ( " yield " ) ,  & cfg - > yieldCor [ i ] ) ;  
			
		
	
		
			
				
					                    getVal < uint16_t > ( obj ,  F ( " pwr " ) ,  & cfg - > chMaxPwr [ i ] ) ;  
			
		
	
		
			
				
					                    getChar ( obj ,  F ( " chName " ) ,  cfg - > chName [ i ] ,  MAX_NAME_LENGTH ) ;  
			
		
	
		
			
				
					                }  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    # if defined(ESP32)  
			
		
	
		
			
				
					        void  getChar ( JsonObject  obj ,  const  char  * key ,  char  * dst ,  int  maxLen )  {  
			
		
	
		
			
				
					            if ( obj . containsKey ( key ) )  
			
		
	
		
			
				
					                snprintf ( dst ,  maxLen ,  " %s " ,  obj [ key ] . as < const  char * > ( ) ) ;  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        template < typename  T = uint8_t >  
			
		
	
		
			
				
					        void  getVal ( JsonObject  obj ,  const  char  * key ,  T  * dst )  {  
			
		
	
		
			
				
					            if ( obj . containsKey ( key ) )  
			
		
	
		
			
				
					                * dst  =  obj [ key ] ;  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					    # else  
			
		
	
		
			
				
					        void  getChar ( JsonObject  obj ,  const  __FlashStringHelper  * key ,  char  * dst ,  int  maxLen )  {  
			
		
	
		
			
				
					            if ( obj . containsKey ( key ) )  
			
		
	
		
			
				
					                snprintf ( dst ,  maxLen ,  " %s " ,  obj [ key ] . as < const  char * > ( ) ) ;  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        template < typename  T = uint8_t >  
			
		
	
		
			
				
					        void  getVal ( JsonObject  obj ,  const  __FlashStringHelper  * key ,  T  * dst )  {  
			
		
	
		
			
				
					            if ( obj . containsKey ( key ) )  
			
		
	
		
			
				
					                * dst  =  obj [ key ] ;  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					    # endif  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        settings_t  mCfg ;  
			
		
	
		
			
				
					        bool  mLastSaveSucceed ;  
			
		
	
		
			
				
					} ;