@ -86,37 +86,47 @@ void app::loop(void) { 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    yield ( ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    if ( checkTicker ( & mRxTicker ,  5 ) )  {  
			
		
	
		
			
				
					    if ( checkTicker ( & mRxTicker ,  5 ) )   
			
		
	
		
			
				
					    {  
			
		
	
		
			
				
					        bool  rxRdy  =  mSys - > Radio . switchRxCh ( ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if ( ! mSys - > BufCtrl . empty ( ) )  {  
			
		
	
		
			
				
					        if ( ! mSys - > BufCtrl . empty ( ) )   
			
		
	
		
			
				
					        {  
			
		
	
		
			
				
					            uint8_t  len ;  
			
		
	
		
			
				
					            packet_t  * p  =  mSys - > BufCtrl . getBack ( ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            if ( mSys - > Radio . checkPaketCrc ( p - > packet ,  & len ,  p - > rxCh ) )  {  
			
		
	
		
			
				
					            if ( mSys - > Radio . checkPaketCrc ( p - > packet ,  & len ,  p - > rxCh ) )   
			
		
	
		
			
				
					            {  
			
		
	
		
			
				
					                // process buffer only on first occurrence
  
			
		
	
		
			
				
					                if ( mConfig . serialDebug )  {  
			
		
	
		
			
				
					                    DPRINT ( DBG_INFO ,  " RX  "  +  String ( len )  +  " B Ch "  +  String ( p - > rxCh )  +  "  |  " ) ;  
			
		
	
		
			
				
					                    mSys - > Radio . dumpBuf ( NULL ,  p - > packet ,  len ) ;  
			
		
	
		
			
				
					                }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                mStat . frmCnt + + ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                if ( 0  ! =  len )  {  
			
		
	
		
			
				
					                if ( 0  ! =  len )   
			
		
	
		
			
				
					                {  
			
		
	
		
			
				
					                    Inverter < >  * iv  =  mSys - > findInverter ( & p - > packet [ 1 ] ) ;  
			
		
	
		
			
				
					                    if ( ( NULL  ! =  iv )  & &  ( p - > packet [ 0 ]  = =  ( TX_REQ_INFO  +  ALL_FRAMES ) ) )  {  // response from get information command
  
			
		
	
		
			
				
					                    if ( ( NULL  ! =  iv )  & &  ( p - > packet [ 0 ]  = =  ( TX_REQ_INFO  +  ALL_FRAMES ) ) )   // response from get information command
  
			
		
	
		
			
				
					                    {  
			
		
	
		
			
				
					                        mPayload [ iv - > id ] . txId  =  p - > packet [ 0 ] ;  
			
		
	
		
			
				
					                        DPRINTLN ( DBG_DEBUG ,  F ( " Response from info request received " ) ) ;  
			
		
	
		
			
				
					                        uint8_t  * pid  =  & p - > packet [ 9 ] ;  
			
		
	
		
			
				
					                        if  ( * pid  = =  0x00 )  
			
		
	
		
			
				
					                            DPRINT ( DBG_DEBUG ,  " fragment number zero received and ignored " ) ;  
			
		
	
		
			
				
					                        else  {  
			
		
	
		
			
				
					                        {  
			
		
	
		
			
				
					                            DPRINT ( DBG_DEBUG ,  F ( " fragment number zero received and ignored " ) ) ;  
			
		
	
		
			
				
					                        }   
			
		
	
		
			
				
					                        else   
			
		
	
		
			
				
					                        {  
			
		
	
		
			
				
					                            DPRINTLN ( DBG_DEBUG ,  " PID: 0x "  +  String ( * pid ,  HEX ) ) ;  
			
		
	
		
			
				
					                            if  ( ( * pid  &  0x7F )  <  5 )  {  
			
		
	
		
			
				
					                                memcpy ( mPayload [ iv - > id ] . data [ ( * pid  &  0x7F )  -  1 ] ,  & p - > packet [ 10 ] ,  len  -  11 ) ;  
			
		
	
		
			
				
					                                mPayload [ iv - > id ] . len [ ( * pid  &  0x7F )  -  1 ]  =  len  -  11 ;  
			
		
	
		
			
				
					                            }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                            if  ( ( * pid  &  ALL_FRAMES )  = =  ALL_FRAMES )  {  
			
		
	
		
			
				
					                            if  ( ( * pid  &  ALL_FRAMES )  = =  ALL_FRAMES )   
			
		
	
		
			
				
					                            {  
			
		
	
		
			
				
					                                // Last packet
  
			
		
	
		
			
				
					                                if  ( ( * pid  &  0x7f )  >  mPayload [ iv - > id ] . maxPackId )  {  
			
		
	
		
			
				
					                                    mPayload [ iv - > id ] . maxPackId  =  ( * pid  &  0x7f ) ;  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -126,15 +136,17 @@ void app::loop(void) { 
			
		
	
		
			
				
					                            }  
			
		
	
		
			
				
					                        }  
			
		
	
		
			
				
					                    }  
			
		
	
		
			
				
					                    if ( ( NULL  ! =  iv )  & &  ( p - > packet [ 0 ]  = =  ( TX_REQ_DEVCONTROL  +  ALL_FRAMES ) ) )  {   
			
		
	
		
			
				
					                        mPayload [ iv - > id ] . txId  =  p - > packet [ 0 ] ;   
			
		
	
		
			
				
					                    if ( ( NULL  ! =  iv )  & &  ( p - > packet [ 0 ]  = =  ( TX_REQ_DEVCONTROL  +  ALL_FRAMES ) ) )   
			
		
	
		
			
				
					                    {  
			
		
	
		
			
				
					                        DPRINTLN ( DBG_DEBUG ,  F ( " Response from devcontrol request received " ) ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                        mPayload [ iv - > id ] . txId  =  p - > packet [ 0 ] ;  
			
		
	
		
			
				
					                        iv - > devControlRequest  =  false ;  
			
		
	
		
			
				
					                        if  ( ( p - > packet [ 12 ]  = =  ActivePowerContr )  & &  ( p - > packet [ 13 ]  = =  0x00 ) )  {  
			
		
	
		
			
				
					                             if  ( p - > packet [ 10 ]  = =  0x00   & &  p - > packet [ 11  ]  = =  0x00 )  
			
		
	
		
			
				
					                                DPRINTLN ( DBG_INFO ,  F ( " Inverter  " )  +  String ( iv - > id )  +  F ( "  has accepted power limit set point  " )  +  String ( iv - > powerLimit [ 0 ] )  +  F ( "  with PowerLimitControl  " )   +  String ( iv - > powerLimit [ 1 ] ) ) ;   
			
		
	
		
			
				
					                            else  
			
		
	
		
			
				
					                                 DPRINTLN ( DBG_INFO ,  F ( " Inverter  " )  +  String ( iv - > id )  +  F ( "  has NOT accepted power limit set point " ) +  String ( iv - > powerLimit [ 0 ] )  +  F ( "  with PowerLimitControl  " )   +  String ( iv - > powerLimit [ 1 ] ) ) ;  
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					                        if  ( ( p - > packet [ 12 ]  = =  ActivePowerContr )   & &  ( p - > packet [ 13  ]  = =  0x00 ) )   
			
		
	
		
			
				
					                        {  
			
		
	
		
			
				
					                            String  msg  =  ( p - > packet [ 10 ]  = =  0x00  & &  p - > packet [ 11 ]  = =  0x00 )  ?  " "  :  " NOT  " ;  
			
		
	
		
			
				
					                            DPRINTLN ( DBG_INFO ,  F ( " Inverter  " )  +  String ( iv - > id )  +  msg +  String ( iv - > powerLimit [ 0 ] )  +  F ( "  with PowerLimitControl  " )   +  String ( iv - > powerLimit [ 1 ] ) ) ;     
			
		
	
		
			
				
					                        }  
			
		
	
		
			
				
					                        iv - > devControlCmd  =  Init ;  
			
		
	
		
			
				
					                    }  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -241,7 +253,9 @@ void app::loop(void) { 
			
		
	
		
			
				
					                        DPRINTLN ( DBG_DEBUG ,  F ( " app:loop WiFi WiFi.status  " )  +  String ( WiFi . status ( ) ) ) ;  
			
		
	
		
			
				
					                        DPRINTLN ( DBG_INFO ,  F ( " Requesting Inverter SN  " )  +  String ( iv - > serial . u64 ,  HEX ) ) ;  
			
		
	
		
			
				
					                    }  
			
		
	
		
			
				
					                    if ( iv - > devControlRequest )  {  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                    if ( iv - > devControlRequest )   
			
		
	
		
			
				
					                    {  
			
		
	
		
			
				
					                        if ( mConfig . serialDebug )  
			
		
	
		
			
				
					                            DPRINTLN ( DBG_INFO ,  F ( " Devcontrol request  " )  +  String ( iv - > devControlCmd )  +  F ( "  power limit  " )  +  String ( iv - > powerLimit [ 0 ] ) ) ;  
			
		
	
		
			
				
					                        mSys - > Radio . sendControlPacket ( iv - > radioId . u64 ,  iv - > devControlCmd ,  iv - > powerLimit ) ;  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -249,7 +263,8 @@ void app::loop(void) { 
			
		
	
		
			
				
					                        iv - > clearCmdQueue ( ) ;  
			
		
	
		
			
				
					                        iv - > enqueCommand < InfoCommand > ( SystemConfigPara ) ;  
			
		
	
		
			
				
					                    }  
			
		
	
		
			
				
					                    else  {  
			
		
	
		
			
				
					                    else   
			
		
	
		
			
				
					                    {  
			
		
	
		
			
				
					                        uint8_t  cmd  =  iv - > getQueuedCmd ( ) ;  
			
		
	
		
			
				
					                        mSys - > Radio . sendTimePacket ( iv - > radioId . u64 ,  cmd ,  mPayload [ iv - > id ] . ts ,  iv - > alarmMesIndex ) ;  
			
		
	
		
			
				
					                        mPayload [ iv - > id ] . txCmd  =  cmd ;  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -257,8 +272,9 @@ void app::loop(void) { 
			
		
	
		
			
				
					                    }  
			
		
	
		
			
				
					                }  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					            else  if ( mConfig . serialDebug )  
			
		
	
		
			
				
					            else  if ( mConfig . serialDebug )  {   
			
		
	
		
			
				
					                DPRINTLN ( DBG_WARN ,  F ( " time not set, can't request inverter! " ) ) ;  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					            yield ( ) ;  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					    }