@ -5,7 +5,6 @@ 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					# pragma once  
			
		
	
		
			
				
					# include  "Display_Mono.h"  
			
		
	
		
			
				
					# include  "../../utils/dbg.h"  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					class  DisplayMono84X48  :  public  DisplayMono  {  
			
		
	
		
			
				
					    public :  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -23,6 +22,9 @@ class DisplayMono84X48 : public DisplayMono { 
			
		
	
		
			
				
					            u8g2_cb_t  * rot  =  ( u8g2_cb_t  * ) ( ( rotation  ! =  0x00 )  ?  U8G2_R2  :  U8G2_R0 ) ;  
			
		
	
		
			
				
					            monoInit ( new  U8G2_PCD8544_84X48_F_4W_SW_SPI ( rot ,  clock ,  data ,  cs ,  dc ,  reset ) ,  type ,  displayData ) ;  
			
		
	
		
			
				
					            calcLinePositions ( ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            initPowerGraph ( mDispWidth  -  16 ,  mLineYOffsets [ 4 ]  -  mLineYOffsets [ 1 ]  -  2 ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            printText ( " Ahoy! " ,  l_Ahoy ,  0xff ) ;  
			
		
	
		
			
				
					            printText ( " ahoydtu.de " ,  l_Website ,  0xff ) ;  
			
		
	
		
			
				
					            printText ( mDisplayData - > version ,  l_Version ,  0xff ) ;  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -45,16 +47,9 @@ class DisplayMono84X48 : public DisplayMono { 
			
		
	
		
			
				
					            mDisplay - > drawPixel ( mDispWidth - 1 ,  mDispHeight - 1 ) ;  
			
		
	
		
			
				
					            */  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            // print total power 
  
			
		
	
		
			
				
					            // add new power data to power graph 
  
			
		
	
		
			
				
					            if  ( mDisplayData - > nrProducing  >  0 )  {  
			
		
	
		
			
				
					                if  ( mDisplayData - > totalPower  >  9999.0 )  
			
		
	
		
			
				
					                    snprintf ( mFmtText ,  DISP_FMT_TEXT_LEN ,  " %.2f kW " ,  ( mDisplayData - > totalPower  /  1000.0 ) ) ;  
			
		
	
		
			
				
					                else  
			
		
	
		
			
				
					                    snprintf ( mFmtText ,  DISP_FMT_TEXT_LEN ,  " %.0f W " ,  mDisplayData - > totalPower ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                printText ( mFmtText ,  l_TotalPower ,  0xff ) ;  
			
		
	
		
			
				
					            }  else  {  
			
		
	
		
			
				
					                printText ( " offline " ,  l_TotalPower ,  0xff ) ;  
			
		
	
		
			
				
					                addPowerGraphEntry ( mDisplayData - > totalPower ) ;  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            // print Date and time
  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -80,31 +75,51 @@ class DisplayMono84X48 : public DisplayMono { 
			
		
	
		
			
				
					                printText ( mFmtText ,  l_Status ,  0xff ) ;  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            // print yields
  
			
		
	
		
			
				
					            printText ( " \x88 " ,  l_YieldDay ,    10 ) ;         // day symbol
  
			
		
	
		
			
				
					            printText ( " \x83 " ,  l_YieldTotal ,  10 ) ;         // total symbol
  
			
		
	
		
			
				
					            if  ( mDispSwitchState  = =  d_POWER_TEXT )  {  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                // print total power
  
			
		
	
		
			
				
					                if  ( mDisplayData - > nrProducing  >  0 )  {  
			
		
	
		
			
				
					                    if  ( mDisplayData - > totalPower  >  9999.0 )  
			
		
	
		
			
				
					                        snprintf ( mFmtText ,  DISP_FMT_TEXT_LEN ,  " %.2f kW " ,  ( mDisplayData - > totalPower  /  1000.0 ) ) ;  
			
		
	
		
			
				
					                    else  
			
		
	
		
			
				
					                        snprintf ( mFmtText ,  DISP_FMT_TEXT_LEN ,  " %.0f W " ,  mDisplayData - > totalPower ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                    printText ( mFmtText ,  l_TotalPower ,  0xff ) ;  
			
		
	
		
			
				
					                }  else  {  
			
		
	
		
			
				
					                    printText ( " offline " ,  l_TotalPower ,  0xff ) ;  
			
		
	
		
			
				
					                }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                // print day yield
  
			
		
	
		
			
				
					                printText ( " \x88 " ,  l_YieldDay ,    10 ) ;         // day symbol
  
			
		
	
		
			
				
					                if  ( mDisplayData - > totalYieldDay  >  9999.0 )  
			
		
	
		
			
				
					                    snprintf ( mFmtText ,  DISP_FMT_TEXT_LEN ,  " %.2f kWh " ,  mDisplayData - > totalYieldDay  /  1000.0 ) ;  
			
		
	
		
			
				
					                else  
			
		
	
		
			
				
					                    snprintf ( mFmtText ,  DISP_FMT_TEXT_LEN ,  " %.0f Wh " ,  mDisplayData - > totalYieldDay ) ;  
			
		
	
		
			
				
					                printText ( mFmtText ,  l_YieldDay ,  0xff ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                // print total yield
  
			
		
	
		
			
				
					                printText ( " \x83 " ,  l_YieldTotal ,  10 ) ;         // total symbol
  
			
		
	
		
			
				
					                if  ( mDisplayData - > totalYieldTotal  >  9999.0 )  
			
		
	
		
			
				
					                    snprintf ( mFmtText ,  DISP_FMT_TEXT_LEN ,  " %.2f MWh " ,  mDisplayData - > totalYieldTotal  /  1000.0 ) ;  
			
		
	
		
			
				
					                else  
			
		
	
		
			
				
					                    snprintf ( mFmtText ,  DISP_FMT_TEXT_LEN ,  " %.0f kWh " ,  mDisplayData - > totalYieldTotal ) ;  
			
		
	
		
			
				
					                printText ( mFmtText ,  l_YieldTotal ,  0xff ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            // draw dynamic Nokia RSSI bars
  
			
		
	
		
			
				
					            }  else  {  
			
		
	
		
			
				
					                // plot power graph
  
			
		
	
		
			
				
					                plotPowerGraph ( 8 ,  mLineYOffsets [ 4 ]  -  1 ) ;  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            // draw dynamic RSSI bars
  
			
		
	
		
			
				
					            int  rssi_bar_height  =  7 ;  
			
		
	
		
			
				
					            for  ( int  i = 0 ;  i < 4 ; i + + )  {  
			
		
	
		
			
				
					                int  radio_rssi_threshold  =  - 60  -  i * 10 ;  // radio rssi not yet tested in reality!
  
			
		
	
		
			
				
					                int  wifi_rssi_threshold  =  - 60  -  i * 10 ;  
			
		
	
		
			
				
					            for  ( int  i  =  0 ;  i  <  4 ;  i + + )  {  
			
		
	
		
			
				
					                int  radio_rssi_threshold  =  - 60  -  i  *  10 ;  
			
		
	
		
			
				
					                int  wifi_rssi_threshold  =  - 60  -  i  *  10 ;  
			
		
	
		
			
				
					                uint8_t  barwidth  =  std : : min ( 4  -  i ,  3 ) ;  
			
		
	
		
			
				
					                if  ( mDisplayData - > RadioRSSI  >  radio_rssi_threshold )  
			
		
	
		
			
				
					                    mDisplay - > drawBox ( 0 ,               8 + ( rssi_bar_height + 1 ) * i ,   4 - i , rssi_bar_height ) ;  
			
		
	
		
			
				
					                    mDisplay - > drawBox ( 0 ,                       8   +   ( rssi_bar_height  +  1 )  *  i ,  barwidth ,   rssi_bar_height ) ;  
			
		
	
		
			
				
					                if  ( mDisplayData - > WifiRSSI  >  wifi_rssi_threshold )  
			
		
	
		
			
				
					                    mDisplay - > drawBox ( mDispWidth - 4 + i ,  8 + ( rssi_bar_height + 1 ) * i ,   4 - i , rssi_bar_height ) ;  
			
		
	
		
			
				
					                    mDisplay - > drawBox ( mDispWidth  -  barwidth  ,  8   +   ( rssi_bar_height  +  1 )  *  i ,  barwidth ,   rssi_bar_height ) ;  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            // draw dynamic antenna and WiFi symbols
  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -150,7 +165,7 @@ class DisplayMono84X48 : public DisplayMono { 
			
		
	
		
			
				
					                yOff  + =  asc ;  
			
		
	
		
			
				
					                mLineYOffsets [ i ]  =  yOff ;  
			
		
	
		
			
				
					                dsc  =  mDisplay - > getDescent ( ) ;  
			
		
	
		
			
				
					                if  ( l_TotalPower ! = i )    // power line needs no descent spacing
  
			
		
	
		
			
				
					                if  ( l_TotalPower   ! =   i )    // power line needs no descent spacing
  
			
		
	
		
			
				
					                    yOff  - =  dsc ;  
			
		
	
		
			
				
					                yOff + + ;      // instead lets spend one pixel space between all lines
  
			
		
	
		
			
				
					                i + + ;  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -158,7 +173,8 @@ class DisplayMono84X48 : public DisplayMono { 
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        inline  void  setLineFont ( uint8_t  line )  {  
			
		
	
		
			
				
					            if  ( ( line  = =  l_TotalPower )  | |  ( line  = =  l_Ahoy ) )  
			
		
	
		
			
				
					            if  ( ( line  = =  l_TotalPower )  | |  
			
		
	
		
			
				
					                ( line  = =  l_Ahoy ) )  
			
		
	
		
			
				
					                mDisplay - > setFont ( u8g2_font_logisoso16_tr ) ;  
			
		
	
		
			
				
					            else  
			
		
	
		
			
				
					                mDisplay - > setFont ( u8g2_font_5x8_symbols_ahoy ) ;