Graphics Drawing Interface EZLCD4 display using serial

Revision:
0:607ac6f9ce7a
Child:
1:683ac9b65344
diff -r 000000000000 -r 607ac6f9ce7a gdiezl4.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gdiezl4.cpp	Mon Mar 14 15:58:13 2011 +0000
@@ -0,0 +1,329 @@
+/*****************************************************************************
+//   $Workfile: $
+//    Function: graphics drive - EZLCD04 implementation
+//      Author: Bill Basser
+//   $JustDate: $
+//   $Revision: $
+//
+//    This document contains proprietary data and information of
+//  Cyber Integration LLC.  It is the exclusive property of
+//  Cyber Integration, LLC and will not be disclosed in any form to
+//  any party without prior written permission of Cyber Integration, LLC.
+//  This document may not be reproduced or further used without the
+//  prior written permission of Cyber Integration, LLC.
+//
+//  Copyright (C) 2011 Cyber Integration, LLC. All Rights Reserved
+//
+//  $History: $
+ *
+ *****************************************************************************/
+
+// local includes
+#include "gdiezl4.h"
+
+// define the MSB/LSB extraction utilities
+#define    MSB(w)    (( w >> 8 ) & 0xFF )
+#define    LSB(w)    ( w & 0xFF )
+
+/******************************************************************************
+//    Function Name: GdiEzL4( tTx, tRx )
+//      Description: construction
+//            Entry: tTx = transmit pin
+//                   tRx = receive pin    
+//             Exit: none
+// Globals modified: none
+//  Locals modified: none
+//  Locals modified: none
+******************************************************************************/
+GdiEzL4::GdiEzL4( PinName pinTx, PinName pinRx ) : m_serDisp( pinTx, pinRx )
+{
+    // create the interface
+    m_serDisp.baud( 115200 );
+    m_serDisp.attach( this, &LocalCallback );
+    
+    // initialize
+    m_serDisp.putc( EZ_BTP );
+    m_serDisp.putc( ON );
+
+    // turn the backlight on/clear screen to white
+    BacklightCtl( ON );
+    ClearScreen( RGB( 255, 255, 255 ));
+}
+
+/******************************************************************************
+//    Function Name: GdiEzL4( )
+//      Description: destruction
+//            Entry: none
+//             Exit: none
+// Globals modified: none
+//  Locals modified: none
+//  Locals modified: none
+******************************************************************************/
+GdiEzL4::~GdiEzL4( void )
+{
+}
+
+/******************************************************************************
+//    Function Name: GdiBacklightCtl( bOffOn )
+//      Description: turn backlight off/on
+//            Entry: bOffOn
+//             Exit: none
+// Globals modified: none
+//  Locals modified: anBuffer, nBufLen
+******************************************************************************/
+void GdiEzL4::BacklightCtl( BOOL bOffOn )
+{
+    // set the correct state of the backlight
+    m_serDisp.putc(( bOffOn ) ? EZ_LON : EZ_LOF );
+}
+
+/******************************************************************************
+//    Function Name: GdiClearScreen( wColor )
+//      Description: clear the screen to the color
+//            Entry: wColor = background color
+//             Exit: none
+// Globals modified: none
+//  Locals modified: anBuffer, nBufLen
+******************************************************************************/
+void GdiEzL4::ClearScreen( U16 wColor )
+{
+    // clear the screen
+    m_serDisp.putc( EZ_FGC );
+    m_serDisp.putc( LSB( wColor ));
+    m_serDisp.putc( MSB( wColor ));
+    m_serDisp.putc( EZ_CLS );
+}
+
+/******************************************************************************
+//    Function Name: GdiDrawRect( U16 wColor, U16 wSx, U8 nSy, U16 wWidth, U8 nHeight, BOOL bFill )
+//      Description: draw a rectangle
+//            Entry: wColor = rectangle color
+//                   wSx = starting X
+//                   nSy = starting Y
+//                   wWidth = width of box
+//                   nHeight = height of box
+//                   bFill = fill color
+//             Exit: none
+// Globals modified: none
+//  Locals modified: anBuffer, nBufLen
+******************************************************************************/
+void GdiEzL4::DrawRect( U16 wColor, U16 wSx, U8 nSy, U16 wWidth, U8 nHeight, BOOL bFill )
+{
+    U16 wEx = wSx + wWidth - 1;
+    U8 nEy = nSy + nHeight - 1;
+
+    // draw a rectangle
+    m_serDisp.putc( EZ_FGC );
+    m_serDisp.putc( LSB( wColor ));
+    m_serDisp.putc( MSB( wColor ));
+    m_serDisp.putc( EZ_SXY );
+    m_serDisp.putc( MSB( wSx ));
+    m_serDisp.putc( LSB( wSx ));
+    m_serDisp.putc( nSy );
+    m_serDisp.putc( ( bFill ) ? EZ_BXF : EZ_BOX );
+    m_serDisp.putc( MSB( wEx ));
+    m_serDisp.putc( LSB( wEx ));
+    m_serDisp.putc( nEy );
+}
+
+/******************************************************************************
+//    Function Name: GdiDrawLine( wColor, wSx, nSy, wEx, nEy )
+//      Description: draw line
+//            Entry: wColor = color
+//                   wSx = starting X
+//                   nSy = starting Y
+//                   wEx = ending X
+//                   nEy = ending Y
+//             Exit: none
+// Globals modified: none
+//  Locals modified: anBuffer, nBufLen
+******************************************************************************/
+void GdiEzL4::DrawLine( U16 wColor, U16 wSx, U8 nSy, U16 wEx, U8 nEy )
+{
+    // set the color/set starting x/y
+    m_serDisp.putc( EZ_FGC );
+    m_serDisp.putc( LSB( wColor ));
+    m_serDisp.putc( MSB( wColor ));
+    m_serDisp.putc( EZ_SXY );
+    m_serDisp.putc( MSB( wSx ));
+    m_serDisp.putc( LSB( wSx ));
+    m_serDisp.putc( nSy );
+
+    // determine type of line
+    if ( wSx == wEx )
+    {
+        // vertical line
+        m_serDisp.putc( EZ_VLN );
+        m_serDisp.putc( nEy );
+    }
+    else if ( nSy == nEy )
+    {
+        // horizontal line
+        m_serDisp.putc( EZ_HLN );
+        m_serDisp.putc( MSB( wEx ));
+        m_serDisp.putc( LSB( wEx ));
+    }
+    else
+    {
+        // diagonal line
+        m_serDisp.putc( EZ_LIN );
+        m_serDisp.putc( MSB( wEx ));
+        m_serDisp.putc( LSB( wEx ));
+        m_serDisp.putc( nEy );
+    }
+}
+
+
+/******************************************************************************
+//    Function Name: GdiDrawIcon( wSx, nSy, nIcon )
+//      Description: draw an icon
+//            Entry: wSx = starting X
+//                   nSy = starting Y
+//                   nIcon = icon number
+//             Exit: none
+// Globals modified: none
+//  Locals modified: anBuffer, nBufLen
+******************************************************************************/
+void GdiEzL4::DrawIcon( U16 wSx, U8 nSy, U8 nIcon )
+{
+    // draw a icon
+    m_serDisp.putc( EZ_SXY );
+    m_serDisp.putc( MSB( wSx ));
+    m_serDisp.putc( LSB( wSx ));
+    m_serDisp.putc( nSy );
+    m_serDisp.putc( EZ_ICF );
+    m_serDisp.putc( nIcon );
+}
+
+/******************************************************************************
+//    Function Name: GdiDrawChar( wColor, nFont, wSx, nSy, bBackground, nDir, cChar )
+//      Description: draw a character with the designated font, color
+//            Entry: wColor = color
+//                   nFont = font number
+//                   wSx = starting X
+//                   nSy = starting Y
+//                   bBackground = true if drawn on background
+//                   nDir = text direction
+//                   cChar = color
+//             Exit: none
+// Globals modified: none
+//  Locals modified: anBuffer, nBufLen
+******************************************************************************/
+void GdiEzL4::DrawChar( U16 wColor, U8 nFont, U16 wSx, U8 nSy, BOOL bBackground, GDITXTDIR eDir, C8 cChar )
+{
+    // set the color/set xy/set font/draw character
+    m_serDisp.putc( EZ_FGC );
+    m_serDisp.putc( LSB( wColor ));
+    m_serDisp.putc( MSB( wColor ));
+    m_serDisp.putc( EZ_SXY );
+    m_serDisp.putc( MSB( wSx ));
+    m_serDisp.putc( LSB( wSx ));
+    m_serDisp.putc( nSy );
+    m_serDisp.putc( EZ_FNT );
+    m_serDisp.putc( nFont );
+    m_serDisp.putc( EZ_TXN + ( U8 )eDir );
+    m_serDisp.putc(( bBackground ) ? EZ_CHB : EZ_CHR );
+    m_serDisp.putc( cChar );
+}
+
+/******************************************************************************
+//    Function Name: GdiDrawString( wFgcClr, wBgcClr, nFont, wSx, nSy, bBackground, eDir, szMsg )
+//      Description: draw a string with the desinated font, color
+//            Entry: wFgClr = foreground color
+//                   wBgClr = background color
+//                   nFont = font number
+//                   wSx = starting X
+//                   nSy = starting Y
+//                   bBackground = true if drawn on background
+//                   eDir = text direction
+//                   szMsg -> pointer to zero delimited string
+//             Exit: none
+// Globals modified: none
+//  Locals modified: anBuffer, nBufLen
+******************************************************************************/
+void GdiEzL4::DrawString( U16 wFgClr, U16 wBgClr, U8 nFont, U16 wSx, U8 nSy, BOOL bBackground, GDITXTDIR eDir, PC8 pszMsg )
+{
+    // if backgound
+    if ( bBackground )
+    {
+        // set the background color
+        m_serDisp.putc( EZ_BGC );
+        m_serDisp.putc( LSB( wBgClr ));
+        m_serDisp.putc( MSB( wBgClr ));
+    }
+
+    // set color/set sx/set font/send command
+    m_serDisp.putc( EZ_FGC );
+    m_serDisp.putc( LSB( wFgClr ));
+    m_serDisp.putc( MSB( wFgClr ));
+    m_serDisp.putc( EZ_SXY );
+    m_serDisp.putc( MSB( wSx ));
+    m_serDisp.putc( LSB( wSx ));
+    m_serDisp.putc( nSy );
+    m_serDisp.putc( EZ_FNT );
+    m_serDisp.putc( nFont );
+    m_serDisp.putc( EZ_TXN + ( U8 )eDir );
+    m_serDisp.putc(( bBackground ) ? EZ_STB : EZ_STR );
+
+    // copy the string till buffer size
+    U8    nChar = 0;
+    while (( nChar = *( pszMsg++ )) != '\0' )
+        m_serDisp.putc( nChar );
+
+    // stuff the delimiter
+    m_serDisp.putc( nChar );
+}
+
+/*****************************************************************************
+//    Function Name: GdiDrawButton( nIndex, ptBtnDef )
+//      Description: draws a button
+//            Entry: nIndex = button index
+//                   ptBtnDef -> button definition structure
+//             Exit: none
+// Globals modified: none
+//  Locals modified: none
+******************************************************************************/
+void GdiEzL4::DrawButton( U8 nBtnIdx, GDIBTNDEF* ptBtnDef )
+{
+    // draw a button
+    m_serDisp.putc( EZ_BTD );
+    m_serDisp.putc( nBtnIdx );
+    m_serDisp.putc( ptBtnDef->eInitalState );
+    m_serDisp.putc( ptBtnDef->nUpIcon );
+    m_serDisp.putc( ptBtnDef->nDnIcon );
+    m_serDisp.putc( ptBtnDef->nDsIcon );
+    m_serDisp.putc( MSB( ptBtnDef->wUpLfX ));
+    m_serDisp.putc( LSB( ptBtnDef->wUpLfX ));
+    m_serDisp.putc( ptBtnDef->nUpLfY );
+    m_serDisp.putc( ptBtnDef->nTouchWidth );
+    m_serDisp.putc( ptBtnDef->nTouchHeight );
+}
+
+/*****************************************************************************
+//    Function Name: GdiRemoveAllButton( )
+//      Description: remove all button
+//            Entry: none
+//             Exit: none
+// Globals modified: none
+//  Locals modified: none
+******************************************************************************/
+void GdiEzL4::RemoveAllButtons( void )
+{
+    // send the remove all buttons command
+    m_serDisp.putc( EZ_BDL );
+}
+
+void GdiEzL4::PingDisplay( void )
+{
+    // send a ping
+    m_serDisp.putc( EZ_PNG );
+}
+
+void GdiEzL4::LocalCallback( void )
+{
+	U8	nChar;
+	
+	// call the callback
+	nChar = m_serDisp.getc( );
+	m_pvFuncCallBack.call( nChar );
+}