Forked to make it possible to include this lib in a multi target setting

Fork of SLCD by Erik -

Revision:
3:f70873bc6121
Parent:
1:1579bcd31410
Child:
4:ec7b3c9b2aeb
--- a/SLCD.cpp	Mon Jan 20 21:08:32 2014 +0000
+++ b/SLCD.cpp	Mon Jan 27 21:57:38 2014 +0000
@@ -63,7 +63,7 @@
 ( SEGD+ SEGE+!SEGF+!SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = J,   offset=104
 (!SEGD+ SEGE+ SEGF+ SEGG) , ( SEGC+!SEGB+ SEGA) ,//Char = K,   offset=108
 ( SEGD+ SEGE+ SEGF+!SEGG) , (!SEGC+!SEGB+!SEGA) ,//Char = L,   offset=112
-(!SEGD+ SEGE+ SEGF+!SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = M,   offset=116
+(!SEGD+ SEGE+ SEGF+!SEGG) , ( SEGC+ SEGB+ SEGA) ,//Char = M,   offset=116
 (!SEGD+ SEGE+!SEGF+ SEGG) , ( SEGC+!SEGB+!SEGA) ,//Char = N,   offset=120
 ( SEGD+ SEGE+!SEGF+ SEGG) , ( SEGC+!SEGB+!SEGA) ,//Char = O,   offset=124
 (!SEGD+ SEGE+ SEGF+ SEGG) , (!SEGC+ SEGB+ SEGA) ,//Char = P,   offset=128
@@ -87,33 +87,23 @@
 
 SLCD::SLCD() {
     init();
-    bLCD_CharPosition = 0;    
-}
-
-int SLCD::_putc(int c) {
-    LCD_Write_Char(c);
-    return 0;
+    CharPosition = 0;    
 }
 
 void SLCD::init(){
     SIM->SCGC5 |= SIM_SCGC5_SLCD_MASK | SIM_SCGC5_PORTB_MASK | SIM_SCGC5_PORTC_MASK | SIM_SCGC5_PORTD_MASK | SIM_SCGC5_PORTE_MASK;
      
-     // configure pins for LCD operation    
+    // configure pins for LCD operation    
   PORTC->PCR[20] = 0x00000000;     //VLL2
   PORTC->PCR[21] = 0x00000000;     //VLL1
   PORTC->PCR[22] = 0x00000000;     //VCAP2
-  PORTC->PCR[23] = 0x00000000;     //VCAP1
-
-     
-     
-     // Enable IRCLK 
+  PORTC->PCR[23] = 0x00000000;     //VCAP1     
+    // Enable IRCLK 
      MCG->C1  = MCG_C1_IRCLKEN_MASK | MCG_C1_IREFSTEN_MASK;
-     MCG->C2 &= ~MCG_C2_IRCS_MASK ;  //0 32KHZ internal reference clock; 1= 4MHz irc
-     
+     MCG->C2 &= ~MCG_C2_IRCS_MASK ;  //0 32KHZ internal reference clock; 1= 4MHz irc     
      LCD->GCR = 0x0;
-     LCD->AR  = 0x0;
-     
-// LCD configurartion according to */     
+     LCD->AR  = 0x0;     
+    // LCD configurartion     
       LCD->GCR =   ( LCD_GCR_RVEN_MASK*_LCDRVEN  
                    | LCD_GCR_RVTRIM(_LCDRVTRIM)         //0-15
                    | LCD_GCR_CPSEL_MASK*_LCDCPSEL 
@@ -126,28 +116,18 @@
                    |!LCD_GCR_LCDEN_MASK                 //WILL BE ENABLE ON SUBSEQUENT STEP
                    | LCD_GCR_SOURCE_MASK*_LCDCLKSOURCE
                    | LCD_GCR_ALTSOURCE_MASK*_LCDALRCLKSOURCE  
-                   | LCD_GCR_LCLK(_LCDLCK)   //0-7
+                   | LCD_GCR_LCLK(_LCDLCK)    //0-7
                    | LCD_GCR_DUTY(_LCDDUTY)   //0-7
                  );    
-     
-      EnablePins();         // Enable LCD pins and Configure BackPlanes
-      LCD->GCR |= LCD_GCR_LCDEN_MASK;
-}
-
-void SLCD::EnablePins (void)
-  {
    uint8_t i;
    uint32_t *p_pen;
    uint8_t pen_offset;   // 0 or 1   
    uint8_t pen_bit;      // 0 to 31
-
    LCD->PEN[0] = 0x0;
    LCD->PEN[1] = 0x0;
    LCD->BPEN[0] = 0x0;
-   LCD->BPEN[1] = 0x0;
-   
+   LCD->BPEN[1] = 0x0;   
    p_pen = (uint32_t *)&LCD->PEN[0];
-
     for (i=0;i<_LCDUSEDPINS;i++) 
     {
       pen_offset = WF_ORDERING_TABLE[i]/32;
@@ -158,11 +138,16 @@
         p_pen[pen_offset+2] |= 1 << pen_bit;  // Enable  BPEN 
         LCD->WF8B[(uint8_t)WF_ORDERING_TABLE[i]] = 1 << (i - _LCDFRONTPLANES);   // fill with 0x01, 0x02, etc 
       } 
-    }
-  }
+    }    
+      LCD->GCR |= LCD_GCR_LCDEN_MASK;
+}
 
+int SLCD::_putc(int c) {
+    Write_Char(c);
+    return 0;
+}
 
-void SLCD::LCD_Write_Char (char lbValue) {
+void SLCD::Write_Char (char lbValue) {
   uint8_t char_val;
   uint8_t temp;
   uint8_t *lbpLCDWF;
@@ -170,9 +155,8 @@
   uint16_t arrayOffset;
   uint8_t position;
   
-  if (bLCD_CharPosition >= _CHARNUM)
-    bLCD_CharPosition = 0;
-  
+  if (CharPosition >= _CHARNUM)
+    CharPosition = 0;  
   lbpLCDWF = (uint8_t *)&LCD->WF8B[0];
   /* only ascii character if value not writeable write as @ */
   if (lbValue>='a' && lbValue<='z') {
@@ -186,7 +170,7 @@
   // ensure bLCD position is in valid limit
   lbCounter = 0;  //number of writings to complete one char
   while (lbCounter<_CHAR_SIZE) {
-    position = (bLCD_CharPosition) *_LCDTYPE + lbCounter; 
+    position = (CharPosition) *_LCDTYPE + lbCounter; 
     temp=0;
     if (lbCounter==1) {
       temp = lbpLCDWF[WF_ORDERING_TABLE[position]] & 0x01;//bit 0 has the special symbol information
@@ -195,33 +179,22 @@
     lbpLCDWF[WF_ORDERING_TABLE[position]] = char_val | temp;
     //  if (char_val==0) lbCounter = _CHAR_SIZE; //end of this character
     lbCounter++;
-  }
-  
-  bLCD_CharPosition++;
+  }  
+  CharPosition++;
 }
 
-/*  Fill Backplanes with normal mask for  0x01, 0x02,  according to BP_ORDERING_TABLE;*/
-void SLCD::SetBackplanes(void)
+void SLCD::Home (void)
  {
-   uint8_t i;
-   for (i=0;i<_LCDBACKPLANES;i++)
-   {
-       LCD->WF8B[(uint8_t)WF_ORDERING_TABLE[i+_LCDFRONTPLANES]] = 0x01<<i;
-   }  
-  }
-  
-void SLCD::LCD_Home (void)
- {
-      bLCD_CharPosition =  0;
+      CharPosition =  0;
  }
 
-void SLCD::LCD_Contrast (uint8_t lbContrast)
-{
+void SLCD::Contrast (uint8_t lbContrast)
+{ 
        lbContrast &= 0x0F;              //Forced to the only values accepted 
        LCD->GCR |= LCD_GCR_RVTRIM(lbContrast);
 }
  
-void SLCD::LCD_All_Segments_ON (void)
+void SLCD::All_Segments (int mode)
 {
  uint8_t lbTotalBytes = _CHARNUM * _LCDTYPE;              
  uint8_t lbCounter=0;
@@ -230,77 +203,41 @@
     lbpLCDWF = (uint8_t *)&LCD->WF8B[0];      
         while (lbCounter < lbTotalBytes)
           {
-              lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[lbCounter++]]=_ALLON;
+              if (mode==1){lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[lbCounter++]]=_ALLON;}
+                else {lbpLCDWF[WF_ORDERING_TABLE[lbCounter++]]=0;}
           }         
 }
 
-void SLCD::LCD_All_Segments_OFF (void)
-{              
- uint8_t lbTotalBytes = _CHARNUM * _LCDTYPE;              
- uint8_t lbCounter=0;
- uint8_t *lbpLCDWF;
- 
-    lbpLCDWF = (uint8_t *)&LCD->WF8B[0];
-        while (lbCounter < lbTotalBytes)
-          {
-              lbpLCDWF[WF_ORDERING_TABLE[lbCounter++]]=0;
-          }
-}
-
-void SLCD::DP1_ON (void)
+void SLCD::DP1 (int mode)
 {
   uint8_t *lbpLCDWF; 
     lbpLCDWF = (uint8_t *)&LCD->WF8B[0];       
-              lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[1]]=1;                 
+        if (mode==1){lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[1]]|=1;}
+            else {lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[1]]&=~1;}                
 }
-
-void SLCD::DP1_OFF (void)
-{
-  uint8_t *lbpLCDWF; 
-    lbpLCDWF = (uint8_t *)&LCD->WF8B[0];       
-              lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[1]]=14;                 
-}
-
-void SLCD::DP2_ON (void)
+ 
+void SLCD::DP2 (int mode)
 {
   uint8_t *lbpLCDWF; 
     lbpLCDWF = (uint8_t *)&LCD->WF8B[0];       
-              lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[3]]=1;                 
-}
+        if (mode==1){lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[3]]|=1;}
+            else {lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[3]]&=~1;}               
+} 
 
-void SLCD::DP2_OFF (void)
-{
-  uint8_t *lbpLCDWF; 
-    lbpLCDWF = (uint8_t *)&LCD->WF8B[0];       
-              lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[3]]=14;                 
-}
-
-void SLCD::DP3_ON (void)
-{
-  uint8_t *lbpLCDWF; 
-    lbpLCDWF = (uint8_t *)&LCD->WF8B[0];       
-              lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[5]]=1;                 
-}
-
-void SLCD::DP3_OFF (void)
+void SLCD::DP3 (int mode)
 {
   uint8_t *lbpLCDWF; 
-    lbpLCDWF = (uint8_t *)&LCD->WF8B[0];       
-              lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[5]]=14;                 
+    lbpLCDWF = (uint8_t *)&LCD->WF8B[0];
+        if (mode==1){lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[5]]|=1;}
+            else {lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[5]]&=~1;}
 }
-
-void SLCD::COLON_ON (void)
+ 
+void SLCD::Colon (int mode)
 {
   uint8_t *lbpLCDWF; 
-    lbpLCDWF = (uint8_t *)&LCD->WF8B[0];      
-              lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[7]]=1;                 
+    lbpLCDWF = (uint8_t *)&LCD->WF8B[0];     
+        if (mode==1){lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[7]]|=1;}
+            else {lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[7]]&=~1;}                 
 }
+ 
 
-void SLCD::COLON_OFF (void)
-{
-  
-  uint8_t *lbpLCDWF; 
-    lbpLCDWF = (uint8_t *)&LCD->WF8B[0];       
-              lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[7]]=14;                 
-}
-