Added custom fonts. Added triangle drawing function

Dependents:   sc100016x4lcd REVO_Updated_Steering Driving_game Arkanoid_v1 ... more

Revision:
5:e4b50f4c13a8
Parent:
4:bdc04bb2ffc1
--- a/KS0108.h	Thu Feb 10 03:06:19 2011 +0000
+++ b/KS0108.h	Mon May 02 19:05:30 2011 +0000
@@ -1,31 +1,9 @@
-/*************************************************************************
-Copyright (c) 2010 Dimiter Kentri
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*******************************************************************************/
-
 #ifndef KS0108_H
 #define KS0108_H
 
-#define VERSION 1.11
+#define VERSION 2.0
 
-#include "mbed.h"
+#include <mbed.h>
 #include "SystemFont5x7.h"
 
 /************************************************************************************/
@@ -37,8 +15,8 @@
 #define LCD_DISP_START      0xC0
 
 //Controller directives
-#define LEFT                1
-#define RIGHT               2
+#define LEFT                0
+#define RIGHT               1
 #define BOTH                3
 #define NONE                4
 
@@ -49,8 +27,10 @@
 //Screen dimensions
 #define SCREEN_HEIGHT    64
 #define SCREEN_WIDTH    128
+#define CHIP_WIDTH         64
 
 /***********************************************************************************/
+//helper functions 
 
 #define absDiff(x,y) ((x>y) ?  (x-y) : (y-x))
 #define swap(a,b) \
@@ -60,8 +40,7 @@
     t=a;\
     a=b;\
     b=t;\
-} while(0)
-
+} while(0)    
 
 /**************************************************************************************/
 
@@ -73,6 +52,15 @@
 #define FONT_CHAR_COUNT     5
 #define FONT_WIDTH_TABLE    6
 
+
+/*************************Callback function definietion for fonts *********************/
+typedef unsigned int (*FontCallback)(unsigned int*);
+
+/*************************Callback function    for reading font array*********************/
+static unsigned int ReadData(unsigned int* ptr) {  
+    return *ptr;
+}
+
 /*************************************************************************************/
 #define MAX_IMG_SIZE 128*64
 
@@ -82,7 +70,17 @@
     unsigned char imgarray[MAX_IMG_SIZE];
 }Image;
 
-/**************************************************************************************/
+
+typedef struct {
+    unsigned int x;
+    unsigned int y;
+    unsigned int page;
+} LCDCoord;
+
+
+/****************************************************************************************/
+
+
 
 class KS0108  {
 public:
@@ -114,6 +112,15 @@
      */
     void  WriteData(unsigned int data ,unsigned char side);
 
+
+    /**
+     *@brief Write data byte to the controller (overloaded function).
+     *
+       *@param data     data send to the controller chip
+     *@return none
+     */
+    void  WriteData(unsigned int data);
+
     /**
      *@brief Write data byte to the screen on specific page and column
      *@param page     page varies from 0-7 for each side
@@ -149,6 +156,17 @@
      */
     void SelectSide(unsigned char side);
 
+    
+       /**
+     *@brief Set cursor to specified coordinates
+     *
+     *@param  x     row
+     *@param  y     column
+     *@return none
+     */
+    void GotoXY(unsigned int x, unsigned int y); 
+
+
     /**
      *@brief Clears display
      *
@@ -158,7 +176,7 @@
      */
     void ClearScreen();
     
-        
+    
     /**
      *@brief Turn on display
      *
@@ -312,8 +330,33 @@
      */
     void RoundRectangle(unsigned int x, unsigned int y, unsigned int width, unsigned int height, unsigned int radius, unsigned int color);
 
+      
+    /**
+     *Draws a triangle .
+     *@param 
+     *@param 
+     *@param 
+     *@param 
+     *@return none
+     *
+     */
+    
+    void Triangle ( int topx, int topy, int rightx, int righty);
+    
 
-    /*
+    /**
+     *Draws a right angle triangle .
+     *@param 
+     *@param 
+     *@param 
+     *@param 
+     *@return none
+     *
+     */
+    void RightTriangle ( int topx, int topy, int rightx, int righty);
+
+
+    /**
      *Draws an empty circle centered a x,y with radius R and specific color.
      *@param CenterX   center x coordinate 
      *@param CenterY   center y coordinate
@@ -324,7 +367,7 @@
      */
     void EmptyCircle(unsigned int CenterX, unsigned int CenterY, unsigned int Radius,unsigned int color);
 
-    /*
+    /**
      * Circle fill Code is merely a modification of the midpoint
      * circle algorithem which is an adaption of Bresenham's line algorithm
      * http://en.wikipedia.org/wiki/Midpoint_circle_algorithm
@@ -338,7 +381,7 @@
      */
     void FullCircle(unsigned int CenterX, unsigned int CenterY, unsigned int Radius,unsigned int color);
 
-    /*
+    /**
      *Draws an ellipse.
      *@param CX   x coordinate of one side
      *@param CY   y coordinate of one side
@@ -353,27 +396,7 @@
     void PlotEllipse(long CX, long  CY, long XRadius,long YRadius, int color);
     void Plot4EllipsePoints(long CX,long  CY, long X, long Y, int color);
 
-    /**
-     *@brief Draws an image on screen.
-     *@param IamgeData  128x64 image array
-     *@return none
-     *
-     *
-     */
-    void FullScreenBMP (unsigned char *ImageData);
-
-
-    /**
-     *@brief Draw a 1 bit bmp image at specified coordinates
-     *
-     *@param  image struct containing img size and array
-     *@param x x-coordinate
-     *@param y y-coordinate
-     *@param color can be BLACK or WHITE
-     *@return none
-     */
-    void CustomImage(Image* image,unsigned int x, unsigned int y, unsigned int color);
-
+    
     /**
      *@brief Round a double
      *@param double
@@ -383,6 +406,38 @@
     double dfloor( double value );
 
 
+    /*****************************Bitmaps *****************************************************************/
+    
+    /**
+     *@brief Draws an image on screen.
+     *@param PictureData  128x64 image array
+     *@return none
+     *
+     *
+     */
+    void FullScreenBMP (unsigned char *ImageData);
+
+    /**
+     *@brief Draw a 1-bit bitmap
+      *
+     *@param  image struct containing img size and array
+     *@param x x-coordinate
+     *@param y y-coordinate
+     *@param color can be BLACK or WHITE
+     *@return none
+     */
+    void DrawBitmap(const unsigned int * bitmap, unsigned int x, unsigned int y, unsigned int color);
+
+    /**
+     *@brief Static function , mplemented to read an array
+     *@param  ptr     data array
+     *@return none
+     */
+    unsigned int ReadArrayData(const unsigned int* ptr); 
+
+   
+    /*************************************Font functions **************************************/
+
    /**
     *@brief Print a character on specified coordinates
     *
@@ -391,7 +446,7 @@
     *@param  c     integer value
     *@return none 
     */
-    void Putc (int page, int col,unsigned char c);
+    void Putchar (int page, int col,unsigned char c);
 
    /**
     *@brief Print a string on specified coordinates
@@ -423,17 +478,45 @@
     */ 
     void PrintInteger(int val,unsigned int x,unsigned int y);
 
+
+   /**
+    *@brief Select a specific font
+    *
+    *@param  font          font array
+    *@param  color         font color , can be BLACK or WHITE
+    *@param  callback    function pointer to load font
+    *@return none 
+    */
+    void SelectFont(unsigned int* font,unsigned int color, FontCallback callback);
+
+    
     /**
-     *@brief Set cursor to specified coordinates
+     *@brief Print a character
      *
-     *@param  x     row
-     *@param  y     column
+     *@param  c     char
      *@return none
      */
-    void CursorXY( unsigned int x, unsigned int y);
+    int PrintChar(char c);
 
-
-
+    
+    /**
+     *@brief Print a character string 
+     *
+     *@param  str     char string
+     *@return none
+     */
+    void PrintString(char* str);
+    
+    
+    /**
+     *@brief Print a number 
+     *
+     *@param  n     number
+     *@return none
+     */
+    void PrintNumber(long n);      
+                                   
+    
 private:
     BusInOut DB;
     DigitalOut RST;
@@ -442,9 +525,15 @@
     DigitalOut E;
     DigitalInOut CS2;
     DigitalInOut CS1;
-
+    bool    Inverted;                  
+    
+    LCDCoord                Coord;
+    FontCallback            FontRead ;
+    unsigned int            FontColor;
+    unsigned int*            Font;
     unsigned int color;
-    unsigned int*            Font;  
+
+   
 };