Added custom fonts. Added triangle drawing function

Dependents:   sc100016x4lcd REVO_Updated_Steering Driving_game Arkanoid_v1 ... more

Revision:
1:a368f2688222
Parent:
0:135b9a0a816e
Child:
2:03d27b3fce6e
--- a/KS0108.cpp	Tue Jan 04 18:35:28 2011 +0000
+++ b/KS0108.cpp	Wed Jan 05 00:01:45 2011 +0000
@@ -1,11 +1,28 @@
-#include "KS0108.h"     
-#include <math.h>
+/*************************************************************************
+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.
 
-/*Constructor, initializes the lcd on the respective pins.
- *
- *@param pins 
- *@param databus
- */
+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.
+*******************************************************************************/
+
+#include "KS0108.h"     
+
+
 KS0108::KS0108 (PinName _RST,PinName _DI, PinName _RW, PinName _E, PinName _CS2, PinName _CS1, PinName DB0, PinName DB1, PinName DB2, PinName DB3, PinName DB4, PinName DB5, PinName DB6, PinName DB7)
     : DB(DB0,DB1,DB2,DB3,DB4,DB5,DB6,DB7),RST (_RST),DI(_DI), RW(_RW), E(_E), CS2(_CS2), CS1(_CS1) {
    
@@ -20,13 +37,7 @@
 }
 
 
-/*Write instruction to the specific controller.
- *
- *@param Command command to send
- *@param side controller side can be LEFT or RIGHT
- *@return none
- *
- */
+
 void  KS0108::WriteInstruction(unsigned int Command,unsigned int side){
     E.write(0); 
     DI.write(0);
@@ -42,13 +53,7 @@
     E.write(0);
 }
 
-/*Write data to the controller. 
- *
- *@param data data to send
- *@param side controller side can be LEFT or RIGHT
- *
- *@return none
- */
+
 void  KS0108::WriteData(unsigned int data,unsigned char side){
        E.write(0); 
     DI.write(1);
@@ -64,14 +69,7 @@
     E = 0;
 }
 
-/*Write data to the screen on specific page and column 
- *
- *@param page page varies from0-7 for each side
- *@param col col varies from 0-64 for each side 
- *@param data info to be written on given coordinates
- *@return none
- *
- */
+
 void KS0108::WriteDataColPag(unsigned int page, unsigned int col,  unsigned int data){
     
     SelectSide(NONE);  
@@ -95,12 +93,7 @@
     SelectSide(NONE);
 }
 
-/*Read data from diplay
- *
- *@param none
- *@return data
- *
- */
+
 unsigned int KS0108::ReadData(){
    unsigned int data;
    DB.input();
@@ -118,12 +111,7 @@
    return data;     
 }
 
-/*Read status of display , and check if it's busy
- *
- *@param none
- *@return status status of display
- * 
- */
+
 unsigned int KS0108::ReadStatus(){
    unsigned int status;
    DB.input();
@@ -142,12 +130,7 @@
    return status;     
 }
 
-/*Read status of display
- *
- *@param side controller side can be LEFT or RIGHT
- *@return none
- *
- */
+
 void KS0108::SelectSide(unsigned char side){
     if(side==LEFT)
         {CS1.write(1);CS2.write(0);}
@@ -159,12 +142,7 @@
         {CS1.write(0);CS2.write(0);}
 }
 
-/*Clears display
- *
- *@param none
- *@return none
- *
- */
+
 void KS0108::ClearScreen(){
      for (int col=0;col<128;col++) {
         for (int page=0;page<8;page++)
@@ -177,14 +155,7 @@
 
 /*******************************************************************************************/      
 
-
-/*Set pixel to specific location on the screen.  
- *@param x page varies from 0-128 
- *@param y col varies from 0-64 
- *@param color color of pixel, can be BLACK or WHITE
- *@return none
- *
- */  
+ 
 void KS0108::SetPixel(unsigned int x,  unsigned int y,  unsigned int color){    
   
   unsigned int position;
@@ -221,16 +192,7 @@
 }       
 
 
-/*Draw a filled reactangle 
- *
- *@param Xaxis1 
- *@param Yaxis1 
- *@param Xaxis2 
- *@param Yaxis2 
- *@param color can be BLACK or WHITE
- *@return none
- *
- */
+
 void KS0108::FullRectangle(unsigned int Xaxis1, unsigned int Yaxis1, unsigned int Xaxis2 ,unsigned int Yaxis2,unsigned int color){
            
     for(unsigned int i=Xaxis1;i<=Xaxis2;i++){
@@ -240,15 +202,7 @@
     }   
 }  
 
-/*Draw an empty rectangle 
- *@param Xaxis1 
- *@param Yaxis1 
- *@param Xaxis2 
- *@param Yaxis2 
- *@param color can be BLACK or WHITE
- *@return none
- *
- */
+
 void KS0108::EmptyRectangle(unsigned int Xaxis1,unsigned int Yaxis1, unsigned int Xaxis2,unsigned int Yaxis2,unsigned int color){
       unsigned int CurrentValue;
 
@@ -267,15 +221,7 @@
     }
 }
 
-/*Draw a rectangle with round corners
- *@param Xaxis1 
- *@param Yaxis1 
- *@param Xaxis2 
- *@param Yaxis2 
- *@param color can be BLACK or WHITE
- *@return none
- *
- */
+
 void KS0108::RoundRectangle(unsigned int x, unsigned int y, unsigned int width, unsigned int height, unsigned int radius, unsigned int color) {
       int tSwitch, x1 = 0, y1 = radius;
       tSwitch = 3 - 2 * radius;
@@ -308,66 +254,30 @@
     VLineShort(x+width, y+radius,height-(2*radius),  color);        // right
 }
 
-/*Draw a horizontal line
- *@param Xaxis1 
- *@param Xaxis2 
- *@param Yaxis 
- *@param color can be BLACK or WHITE
- *@return none
- *
- */
+
 void KS0108::HLine(unsigned int Xaxis1, unsigned int Xaxis2 ,unsigned int Yaxis,unsigned int color){
     FullRectangle(Xaxis1,Yaxis,Xaxis2,Yaxis,color);
 
 }
 
-/*Draw a horizontal line
- *@param Xaxis1 
- *@param Xaxis2 
- *@param Yaxis 
- *@param color can be BLACK or WHITE
- *@return none
- *
- */
+
 void KS0108::HLineShort(unsigned int Xaxis, unsigned int Yaxis,unsigned int width ,unsigned int color){
     FullRectangle(Xaxis,Yaxis,Xaxis+width,Yaxis,color);
 
 } 
 
-/*Draw a horizontal line
- *@param Xaxis1 
- *@param Xaxis2 
- *@param Yaxis 
- *@param color can be BLACK or WHITE
- *@return none
- *
- */ 
+
 void KS0108::VLine(unsigned int Xaxis, unsigned int Yaxis1 ,unsigned int Yaxis2,unsigned int color){
     FullRectangle(Xaxis,Yaxis1,Xaxis,Yaxis2,color);    
 }
 
-/*Draw a horizontal line
- *@param Xaxis1 
- *@param Xaxis2 
- *@param Yaxis 
- *@param color can be BLACK or WHITE
- *@return none
- * 
- */
+
 void KS0108::VLineShort(unsigned int Xaxis,unsigned int Yaxis, unsigned int height ,unsigned int color){
     FullRectangle(Xaxis,Yaxis,Xaxis,Yaxis+height,color);
 
 }
 
-/*
- *Draws a line from x,y at given degree from inner_radius to outer_radius.
- *@param Xaxis1 
- *@param Xaxis2 
- *@param Yaxis 
- *@param color can be BLACK or WHITE
- *@return none
- *
- */
+
 void KS0108::DegreeLine(unsigned int x, int y,unsigned int degree,unsigned int inner_radius,unsigned int outer_radius, unsigned int color){
   int fx,fy,tx,ty;
   fx = x + dfloor(inner_radius * sin(degree * 3.14 / 180));
@@ -377,12 +287,7 @@
   SlantyLine(fx,fy,tx,ty,color);
 }
 
-/*
- *Round a double
- *@param double 
- *@return value 
- *
- */
+
 double KS0108::dfloor( double value ) {
   
   if (value < 0.0)
@@ -392,16 +297,7 @@
     
 }
 
-/*
- *Draws a line from x,y at given degree from inner_radius to outer_radius.
- *@param lX1   x coordinate of one side
- *@param lY1   y coordinate of one side
- *@param lX2   x coordinate of other side
- *@param lY2   y coordinate of other side
- *@param color can be BLACK or WHITE
- *@return none
- *
- */
+
 void KS0108::SlantyLine(unsigned int lX1, unsigned int lY1, unsigned int lX2,unsigned int lY2,unsigned int color){
     long lError, lDeltaX, lDeltaY, lYStep, bSteep;       
     
@@ -475,16 +371,7 @@
 }
 
 
-/*
- *Draws a line from x1,y1 to x2,y2
- *@param lX1   x coordinate of one side
- *@param lY1   y coordinate of one side
- *@param lX2   x coordinate of other side
- *@param lY2   y coordinate of other side
- *@param color can be BLACK or WHITE
- *@return none 
- *
- */
+
 void KS0108::Line(unsigned int x1, unsigned int  y1, unsigned int  x2, unsigned int  y2, unsigned int color){
 unsigned int  deltax, deltay, x,y, steep;
 int lerror, ystep;
@@ -517,16 +404,7 @@
     }
 }
 
-/*
- *Draws an empty circle centered a x,y with radius R and specific color.
- *@param lX1   x coordinate of one side
- *@param lY1   y coordinate of one side
- *@param lX2   x coordinate of other side
- *@param lY2   y coordinate of other side
- *@param color can be BLACK or WHITE
- *@return none
- *
- */
+
 void KS0108::EmptyCircle(unsigned int CenterX, unsigned int CenterY, unsigned int Radius,unsigned int color){
   unsigned int y=0, x=0, d = 0;
   int part; 
@@ -554,18 +432,7 @@
 
 }  
 
-/*
- * 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
- * http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm
- * Adapted from arduino lib
- *
- *@param  CenterX
- *@param CenterY
- *@param Radius
- *@param color 
- */ 
+ 
 void KS0108::FullCircle(unsigned int CenterX, unsigned int CenterY, unsigned int Radius,unsigned int color){  
 
 int f = 1 - Radius;
@@ -603,18 +470,7 @@
 }                 
 
 
-/*
- *Draws a line from x,y at given degree from inner_radius to outer_radius.
- *@param lX1   x coordinate of one side
- *@param lY1   y coordinate of one side
- *@param lX2   x coordinate of other side
- *@param lY2   y coordinate of other side
- *@param color can be BLACK or WHITE
- *@return none
- *
- * Ported the algorithm found at http://homepage.smc.edu/kennedy_john/belipse.pdf
- * 
- */
+
 void KS0108::PlotEllipse(long CX, long  CY, long XRadius,long YRadius, int color) {
 
 
@@ -673,18 +529,7 @@
 } 
 
 
-/*
- *Helper function for drawing an ellipse.
- *@param CX   x coordinate of one side
- *@param CY   y coordinate of one side
- *@param X   x coordinate of other side
- *@param Y   y coordinate of other side
- *@param color can be BLACK or WHITE
- *@return none
- *
- * Portted the algorithm found at http://homepage.smc.edu/kennedy_john/belipse.pdf
- * 
- */
+
 void KS0108::Plot4EllipsePoints(long CX,long  CY, long X, long Y, int color){
   SetPixel(CX+X, CY+Y, color); //{point in quadrant 1}
   SetPixel(CX-X, CY+Y, color); //{point in quadrant 2}
@@ -694,13 +539,7 @@
 
 /***********************************************************************************/
 
-/*
- *Draws an image on screen.
- *@param PictureData  128x64 image array
- *@return none
- *
- * 
- */
+
 void KS0108::FullScreenBMP (unsigned char *PictureData){
     unsigned int Page=0;
       unsigned int Column=0;
@@ -726,13 +565,7 @@
    
 /******************************************************************************************/
 
-/*
- *Moves cursor to x,y.
- *@param x   x coordinate
- *@param y   y coordinate 
- *@return none
- * 
- */
+
 void KS0108::CursorXY(unsigned int x, unsigned int y){   
   if( (x > SCREEN_WIDTH-1) || (y > SCREEN_HEIGHT-1) )    // exit if coordinates are not legal
     return;  
@@ -748,15 +581,7 @@
   }     
 }
 
-/*
- *Print a char on the specified coordinates
- *@param page   row coordinate 
- *@param col   y coordinate 
- *@param c   character from systemfont
- *@return none
- *
- * 
- */ 
+ 
 void KS0108::Putc (int page, int col,unsigned char c) {
     if (c>31 && c<127){
     for(int i=0;i<5;i++){
@@ -766,15 +591,7 @@
 }
 
 
-/*
- *Print a string on the specified coordinates.
- *@param x   row coordinate 
- *@param y   y coordinate 
- *@param str   character string 
- *@return none
- *
- * 
- */
+
 void KS0108::PutString(unsigned int x, unsigned int y,char* str){
 
     while(*str != 0){
@@ -787,15 +604,6 @@
 
 
 
-/*
- *Print a float on the specified coordiantes.
- *@param val float number
- *@param x  row coordinate
- *@param y  y coordinate
- *@return none
- *
- * 
- */
 void KS0108::PrintFloat(float val, unsigned int x,unsigned int y){
    char buf[20] = {};  // prints up to 20 digits         
    sprintf(buf,"%f",val);
@@ -803,20 +611,9 @@
 
 }
 
-/*
- *Print an integer on th specified coordinates.
- *@param val integer number
- *@param x row coordinate
- *@param y column coordinate 
- *@return none
- * 
- */
+
 void KS0108::PrintInteger(int val,unsigned int x,unsigned int y){
    char buf[20] = {};  // prints up to 20 digits         
    sprintf(buf,"%d",val);
    PutString(x,y,buf);
 }
-
-
-
-