New work version with additional functions

Dependencies:   4DGL-UC ConfigFile MODSERIAL mbed mbos

Fork of CDU_Mbed_35 by Engravity-CDU

screen_handler.cpp

Committer:
WillemBraat
Date:
2014-07-21
Revision:
13:d60c746c097c
Parent:
10:9a5f1b389973
Child:
15:d13786882692

File content as of revision 13:d60c746c097c:

#include "mbed.h"
#include "TFT_4DGL.h"
#include "display.h"
#include "FS_datastructures.h"
#include "MODSERIAL.h"
 
#include <string>
using namespace std;
 
extern MODSERIAL SERIAL_DEBUG; // <----- debug only !!
 
extern int FSdata_received_flag;    
extern TFT_4DGL display;            //Prototype of Display Driver (declared in display.cpp)
//Prototype of indicators (declared in keyboard.cpp)
extern DigitalOut EXEC;
extern DigitalOut FAIL;
extern DigitalOut DSPY;
extern DigitalOut  MSG;
extern DigitalOut OFST;

//VGA control lines
extern DigitalOut VGA_SOURCE;
extern DigitalOut VGA_SELECT;

extern void CDU_SET_BGL_INTENSITY( int nVal );      //Prototype of function controlling CDU backlight (declared in keyboard.cpp)
extern int nFontSize( int nfont_number );           //Prototype of function for fontselection (declared in display.cpp)
extern int nFontWidth (int nfont_number );          //Prototype of function to retrieve font width (declared in display.cpp)
extern int nLine2Pixel( int nLine );                //Prototype of function to calculate vertical pixelposition from line number (declared in display.cpp)
extern int LeftOrRight( int nTextLine, string cString, int nChars, int nCharWidth ); //declared in display.cpp
extern int cRGB( char cRED, char cGREEN, char cBLUE ); //Prototype of function for assembly color word (declared in display.cpp)

// FS_data_update_ID:
// These global flags indicate what data has been updated.
// Should be tested when FS_DATA_EVENT occurs.
extern int Background_Col_Update;    // 1 when color was updated, must be reset to 0 when data has been read
extern int CDU_Status_Update    ;    // 1 when status was updated, must be reset to 0 when data has been read
extern int DO_CLR_SCREEN        ;    // 1 when screen should be cleared, must be reset to 0 when done
extern int Text_Line_Update     ;    // equal to line number whose text was updated, must be reset to 0 when text has been read
extern int Key_Maintext_Update  ;    // equal to keynumber whose main text line was updated, must be reset to -1 (!)when text has been read
extern int Key_Subtext_Update   ;    // equal to keynumber whose sub text line was updated, must be reset to -1 (!) when text has been read
extern int S_Exec               ;    // setup flag
                                  
// --------------------------------------------------------------------------------------------------
void CDU_DSP_CSS()
/*Check flags to see if action is required
Background_Col_Update;    // : 1 when color was updated, must be reset to 0 when data has been read
CDU_Status_Update    ;    // : 1 when status was updated, must be reset to 0 when data has been read
DO_CLR_SCREEN        ;    // : 1 when screen should be cleared, must be reset to 0 when done
Text_Line_Update     ;    // : equal to line number whose text was updated, must be reset to 0 when text has been read
Key_Maintext_Update  ;    // : equal to keynumber whose main text line was updated, must be reset to -1 (!)when text has been read
Key_Subtext_Update   ;    // : equal to keynumber whose sub text line was updated, must be reset to -1 (!) when text has been read
S_Exec               ;    // : when set do not update screen
*/
  
{
if (!S_Exec )
{
    int nLine = 1;          //default line number
    int nCharsLine = 24;    //characters per line
    //check common flag
 
        if ( Background_Col_Update == 1)
        {
            display.background_color( cRGB( BACKGROUND_COL.BG_RED, BACKGROUND_COL.BG_GREEN, BACKGROUND_COL.BG_BLUE ) );
            Background_Col_Update = 0;
        }
      
        if ( Key_Maintext_Update > -1 )
            //Key_Maintext_Update contains the line number 00-49 is LSK text, 50-99 is RSK text
            //Currently used:
            //00-14 left  side of screen --> left  adjust, horizontal position = 0
            //50-64 right side of screen --> right adjust, horizontal position calculated with righttext() (declared in display.cpp)
          
            //00 = LSK1         50 = RSK1   Print on LINE 3
            //01 = LSK2         51 = RSK2   Print on LINE 5
            //02 = LSK3         52 = RSK3   Print on LINE 7
            //03 = LSK4         53 = RSK4   Print on LINE 9
            //04 = LSK5         54 = RSK5   Print on LINE 11
            //05 = LSK6         55 = RSK6   Print on LINE 13
        {
            switch ( Key_Maintext_Update )
            {
                case ( 00 ): nLine = 3; break;
                case ( 50 ): nLine = 3; break;
                case ( 01 ): nLine = 5; break;
                case ( 51 ): nLine = 5; break;
                case ( 02 ): nLine = 7; break;
                case ( 52 ): nLine = 7; break;
                case ( 03 ): nLine = 9; break;
                case ( 53 ): nLine = 9; break;
                case ( 04 ): nLine = 11; break;
                case ( 54 ): nLine = 11; break;
                case ( 05 ): nLine = 13; break;
                case ( 55 ): nLine = 13; break;
            }
           
            switch ( SELKEY_MAINTEXT[Key_Maintext_Update].font_size )
            {
                case ( 0 ): nCharsLine = 48; break;
                case ( 1 ): nCharsLine = 24; break;
            }
           
            //SERIAL_DEBUG.printf("Key MAINTEXT is : %s\r\n",SELKEY_MAINTEXT[Key_Maintext_Update].text );       // DEBUG, show text
            
            //display.graphic_string(char *s, int x, int y, char font, int color, char width multiplier, char height multiplier)
           
            display.graphic_string( SELKEY_MAINTEXT[Key_Maintext_Update].text ,                         //Text to display
                                    LeftOrRight( Key_Maintext_Update, SELKEY_MAINTEXT[Key_Maintext_Update].text, nCharsLine, nFontWidth( SELKEY_MAINTEXT[Key_Maintext_Update].font_size )) ,    //Horizontal position
                                    nLine2Pixel( nLine ),                                 //Vertical position
                                    SELKEY_MAINTEXT[Key_Maintext_Update].font_size,        //Font
                                    cRGB( SELKEY_MAINTEXT[Key_Maintext_Update].text_RED ,SELKEY_MAINTEXT[Key_Maintext_Update].text_GREEN ,SELKEY_MAINTEXT[Key_Maintext_Update].text_BLUE ),
                                    1, 1 );
          
 
            Key_Maintext_Update = -1;
        }
      
        if ( Key_Subtext_Update > -1 )
            //Key Subtext_Update contains the line number 00-49 is LSK subtext, 50-99 is RSK subtext
            //Currently used:
            //00-14 left  side of screen --> left  adjust, horizontal position = 0
            //50-64 right side of screen --> right adjust, horizontal position calculated with righttext() (declared in display.cpp)          
            //00 = LSK1         50 = RSK1   Print on LINE 2
            //01 = LSK2         51 = RSK2   Print on LINE 4
            //02 = LSK3         52 = RSK3   Print on LINE 6
            //03 = LSK4         53 = RSK4   Print on LINE 8
            //04 = LSK5         54 = RSK5   Print on LINE 10
            //05 = LSK6         55 = RSK6   Print on LINE 12
        {
            switch ( Key_Subtext_Update )
            {
                case ( 00 ): nLine = 2; break;
                case ( 50 ): nLine = 2; break;
                case ( 01 ): nLine = 4; break;
                case ( 51 ): nLine = 4; break;
                case ( 02 ): nLine = 6; break;
                case ( 52 ): nLine = 6; break;
                case ( 03 ): nLine = 8; break;
                case ( 53 ): nLine = 8; break;
                case ( 04 ): nLine = 10; break;
                case ( 54 ): nLine = 10; break;
                case ( 05 ): nLine = 12; break;
                case ( 55 ): nLine = 12; break;
            }
           
            switch ( SELKEY_SUBTEXT[Key_Subtext_Update].font_size )
            {
                case ( 0 ): nCharsLine = 48; break;
                case ( 1 ): nCharsLine = 24; break;
            }           
            //display.graphic_string(char *s, int x, int y, char font, int color, char width multiplier, char height multiplier)          
            display.graphic_string( SELKEY_SUBTEXT[Key_Subtext_Update].text ,                       //Text to display
                                    LeftOrRight( Key_Subtext_Update, SELKEY_SUBTEXT[Key_Subtext_Update].text, nCharsLine, nFontWidth( SELKEY_SUBTEXT[Key_Subtext_Update].font_size )) ,  //Horizontal position
                                    nLine2Pixel( nLine ),                              //Vertical position
                                    SELKEY_SUBTEXT[Key_Subtext_Update].font_size,      //Font
                                    cRGB( SELKEY_SUBTEXT[Key_Subtext_Update].text_RED ,SELKEY_SUBTEXT[Key_Subtext_Update].text_GREEN ,SELKEY_SUBTEXT[Key_Subtext_Update].text_BLUE ),
                                    1, 1 ); //multiplier always on 1
            Key_Subtext_Update = -1;
        }
      
        if ( Text_Line_Update > 0)
        {
            //Text_Line_Update contains the the line number to write
             display.graphic_string( TEXTLINE[Text_Line_Update].text ,                      //Text to display
                                    0,                                                      //Horizontal position always 0
                                    nLine2Pixel( Text_Line_Update ),                        //Vertical position
                                    TEXTLINE[Text_Line_Update].font_size,      //Font
                                    cRGB( TEXTLINE[Text_Line_Update].text_RED ,TEXTLINE[Text_Line_Update].text_GREEN ,TEXTLINE[Text_Line_Update].text_BLUE ),
                                    1, 1 ); //multiplier always on 1
            Text_Line_Update = 0;
        }
      
        if ( CDU_Status_Update == 1 )
        {
             
            if ( CDU_STATUS.stby_mode == 1 )       //  : 0 = operational mode, 1 = standby mode
            {
                    VGA_SELECT = 1;                //  : switch VGA off
                    CDU_SET_BGL_INTENSITY( 0 );    //  : backlighting off
                    MSG  = 0;                      //  : indicators off
                    EXEC = 0;
                    FAIL = 0;
                    DSPY = 0;
                    OFST = 0;
                                
            }
            else
            {
                VGA_SELECT = 0;                    //  : switch VGA on
                CDU_SET_BGL_INTENSITY( 100 );      //  : backlighting on  
                MSG  = CDU_STATUS.msg_indicator;   //  : restore indicators
                EXEC = CDU_STATUS.exec_indicator;
                FAIL = CDU_STATUS.fail_indicator;
                DSPY = CDU_STATUS.dspy_indicator;
                OFST = CDU_STATUS.ofst_indicator;                                  
            }
    
    
            if ( (CDU_STATUS.backlight) && (!CDU_STATUS.stby_mode) )         // Backlight control
            {
                CDU_SET_BGL_INTENSITY( 100 );
            }
            else
            {
                CDU_SET_BGL_INTENSITY( 0 );
            }
            
            // Set CDU indicators
            //MSG  = CDU_STATUS.msg_indicator;
            //EXEC = CDU_STATUS.exec_indicator;
            //FAIL = CDU_STATUS.fail_indicator;
            //DSPY = CDU_STATUS.dspy_indicator;
            //OFST = CDU_STATUS.ofst_indicator;
            CDU_Status_Update =0;
        }
        
        if ( DO_CLR_SCREEN )
        {
            display.cls();
            DO_CLR_SCREEN =0;
        }
        
        FSdata_received_flag = false; // : reset commomn FS data update flag = all updates ready <-------- !!!!
}        
}