A wrapper Class library for using the touch LCD on the DISCO-F469NI Development board. The class uses the existing BSP class created by Team ST.

Dependencies:   BSP_DISCO_F469NI LCD_DISCO_F469NI TS_DISCO_F469NI

Files at this revision

API Documentation at this revision

Comitter:
grantphillips
Date:
Thu Mar 01 10:21:06 2018 +0000
Commit message:
V1.0

Changed in this revision

BSP_DISCO_F469NI.lib Show annotated file Show diff for this revision Revisions of this file
DISCOF469LCD.cpp Show annotated file Show diff for this revision Revisions of this file
DISCOF469LCD.h Show annotated file Show diff for this revision Revisions of this file
LCD_DISCO_F469NI.lib Show annotated file Show diff for this revision Revisions of this file
TS_DISCO_F469NI.lib Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BSP_DISCO_F469NI.lib	Thu Mar 01 10:21:06 2018 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/teams/ST/code/BSP_DISCO_F469NI/#3cdfcc4f7c9d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DISCOF469LCD.cpp	Thu Mar 01 10:21:06 2018 +0000
@@ -0,0 +1,134 @@
+#include "DISCOF469LCD.h"
+#include "mbed.h"
+
+/* ***************************************** Public Functions ***************************************** */
+
+DISCOF469LCD::DISCOF469LCD(void) {
+    //mTouches=0;
+    ts.Init(lcd.GetXSize(), lcd.GetYSize());
+    Clear(LCD_BLACK);
+}
+
+void DISCOF469LCD::Clear(uint32_t Color) {
+    lcd.Clear(Color);
+}
+
+void DISCOF469LCD::DrawPixel(uint16_t Xpos, uint16_t Ypos, uint32_t RGB_Code)
+{
+    lcd.DrawPixel(Xpos, Ypos, RGB_Code);
+}
+
+uint32_t DISCOF469LCD::ReadPixel(uint16_t Xpos, uint16_t Ypos)
+{
+    return(lcd.ReadPixel(Xpos, Ypos));
+}
+
+void DISCOF469LCD::DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint32_t Color)
+{
+    lcd.SetTextColor(Color);
+    lcd.DrawLine(x1, y1, x2, y2);
+}
+
+void DISCOF469LCD::DrawRectangle(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height, uint32_t Color)
+{
+    lcd.SetTextColor(Color);
+    lcd.DrawRect(Xpos, Ypos, Width, Height);
+}
+
+void DISCOF469LCD::FillRectangle(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height, uint32_t Color)
+{
+    lcd.SetTextColor(Color);
+    lcd.FillRect(Xpos, Ypos, Width, Height);
+}
+
+void DISCOF469LCD::DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius, uint32_t Color)
+{
+    lcd.SetTextColor(Color);
+    lcd.DrawCircle(Xpos, Ypos, Radius);
+}
+
+void DISCOF469LCD::FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius, uint32_t Color)
+{
+    lcd.SetTextColor(Color);
+    lcd.FillCircle(Xpos, Ypos, Radius);
+}
+
+void DISCOF469LCD::DrawEllipse(uint16_t Xpos, uint16_t Ypos, uint16_t XRadius, uint16_t YRadius, uint32_t Color)
+{
+    lcd.SetTextColor(Color);
+    lcd.DrawEllipse(Xpos, Ypos, XRadius, YRadius);
+}
+
+
+void DISCOF469LCD::FillEllipse(uint16_t Xpos, uint16_t Ypos, uint16_t XRadius, uint16_t YRadius, uint32_t Color)
+{
+    lcd.SetTextColor(Color);
+    lcd.FillEllipse(Xpos, Ypos, XRadius, YRadius);
+}
+
+void DISCOF469LCD::DrawStringAtXY(uint16_t Xpos, uint16_t Ypos, uint8_t FontSize, uint32_t TextColor, uint32_t BackColor, char *Text)
+{
+    switch(FontSize)
+    {
+        case 0:    BSP_LCD_SetFont(&Font8); break;
+        case 1:    BSP_LCD_SetFont(&Font12); break; 
+        case 2:    BSP_LCD_SetFont(&Font16); break; 
+        case 3:    BSP_LCD_SetFont(&Font20); break;
+        case 4:    BSP_LCD_SetFont(&Font24); break;
+        default:   BSP_LCD_SetFont(&Font8); 
+    }
+    lcd.SetBackColor(BackColor);
+    lcd.SetTextColor(TextColor);
+    lcd.DisplayStringAt(Xpos, Ypos, (uint8_t *)Text, LEFT_MODE);
+}
+
+void DISCOF469LCD::DrawStringAtLine(uint16_t Line, uint8_t FontSize, uint32_t TextColor, uint32_t BackColor, uint8_t Mode, char *Text)
+{
+    switch(FontSize)
+    {
+        case 0:    BSP_LCD_SetFont(&Font8); break;
+        case 1:    BSP_LCD_SetFont(&Font12); break; 
+        case 2:    BSP_LCD_SetFont(&Font16); break; 
+        case 3:    BSP_LCD_SetFont(&Font20); break;
+        case 4:    BSP_LCD_SetFont(&Font24); break;
+        default:   BSP_LCD_SetFont(&Font8); 
+    }
+    lcd.SetBackColor(BackColor);
+    lcd.SetTextColor(TextColor);
+    switch(Mode)
+    {
+        case 0:    lcd.DisplayStringAt(0, LINE(Line), (uint8_t *)Text, LEFT_MODE); break;
+        case 1:    lcd.DisplayStringAt(0, LINE(Line), (uint8_t *)Text, CENTER_MODE); break;
+        case 2:    lcd.DisplayStringAt(0, LINE(Line), (uint8_t *)Text, RIGHT_MODE); break;
+        default:    lcd.DisplayStringAt(0, LINE(Line), (uint8_t *)Text, LEFT_MODE);
+    }
+    
+}
+
+uint8_t DISCOF469LCD::Touches(void)
+{
+    TS_StateTypeDef TS_State;
+    
+    ts.GetState(&TS_State);
+    return TS_State.touchDetected;
+}
+
+void DISCOF469LCD::GetTouch1(uint16_t *x, uint16_t *y)
+{
+    TS_StateTypeDef TS_State;
+    
+    ts.GetState(&TS_State);
+    *x = TS_State.touchX[0];
+    *y = TS_State.touchY[0];
+}
+
+void DISCOF469LCD::GetTouch2(uint16_t *x, uint16_t *y)
+{
+    TS_StateTypeDef TS_State;
+    
+    ts.GetState(&TS_State);
+    *x = TS_State.touchX[1];
+    *y = TS_State.touchY[1];
+}
+
+/* ***************************************** Private Functions ***************************************** */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DISCOF469LCD.h	Thu Mar 01 10:21:06 2018 +0000
@@ -0,0 +1,291 @@
+/* DISCOF469LCD Library v1.0
+ * Copyright (c) 2018 Grant Phillips
+ * grant.phillips@mandela.ac.za
+ *
+ *
+ * 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 DISCOF469LCD_H
+#define DISCOF469LCD_H
+ 
+#include "mbed.h"
+#include "TS_DISCO_F469NI.h"
+#include "LCD_DISCO_F469NI.h"
+
+#define LCD_WHITE   0xffffffff
+#define LCD_SILVER  0xffC0C0C0
+#define LCD_GRAY    0xff808080
+#define LCD_BLACK   0xff000000
+#define LCD_RED     0xffff0000
+#define LCD_MAROON  0xff800000
+#define LCD_YELLOW  0xffffff00
+#define LCD_OLIVE   0xff808000
+#define LCD_LIME    0xff00ff00
+#define LCD_GREEN   0xff008000
+#define LCD_AQUA    0xff00ffff
+#define LCD_TEAL    0xff008080
+#define LCD_BLUE    0xff0000ff
+#define LCD_NAVY    0xff000080
+#define LCD_FUCHSIA 0xffff00ff
+#define LCD_PURPLE  0xff800080
+
+/** A wrapper Class library for using the touch lcd on the DISCO-F469NI Development board.  The class
+ * uses the existing BSP class created by Team ST.
+ *
+ * Example:
+ * @code
+ * #include "mbed.h"
+ * #include "DISCOF469LCD.h"
+ * 
+ * DISCOF469LCD lcd;
+ * 
+ * void DisplayPattern(void);
+ * 
+ * int main() {
+ *     char buf[40];               
+ *     int numtouches;             
+ *     bool cleared = false;
+ *     uint16_t x1, y1, x2, y2;
+ * 
+ *     DisplayPattern();
+ *     wait(4.0);
+ *     lcd.Clear(LCD_WHITE);
+ *     
+ *     while(1) 
+ *     {
+ *         numtouches = lcd.Touches();     //read if the screen is touched
+ *         if(numtouches > 0)              //has the screen been touched?
+ *         {
+ *             cleared = false;            //reset clear flag
+ *             if(numtouches == 1)         //if one finger is on the screen
+ *             {
+ *                 lcd.GetTouch1(&x1, &y1);
+ *                 sprintf(buf, "Touch 1: x=%3u y=%3u", x1, y1);
+ *                 lcd.DrawStringAtLine(0,4,LCD_BLUE, LCD_WHITE, 0, buf);
+ *                 lcd.FillCircle(x1, y1, 50, LCD_RED);
+ *             }
+ *             else if(numtouches == 2)    //if two fingers are on the screen
+ *             {
+ *                 lcd.GetTouch1(&x1, &y1);
+ *                 lcd.GetTouch2(&x2, &y2);
+ *                 sprintf(buf, "Touch 1: x=%3u y=%3u", x1, y1);
+ *                 lcd.DrawStringAtLine(0,4,LCD_BLUE, LCD_WHITE, 0, buf);
+ *                 sprintf(buf, "Touch 2: x=%3u y=%3u", x2, y2);
+ *                 lcd.DrawStringAtLine(1,4,LCD_BLUE, LCD_WHITE, 0, buf);
+ *                 lcd.FillCircle(x1, y1, 50, LCD_RED);
+ *                 lcd.FillCircle(x2, y2, 50, LCD_BLUE);
+ *             }
+ *         }
+ *         else
+ *         {
+ *             if(!cleared)                //if the screen hasn't been cleared 
+ *             {
+ *                 lcd.Clear(LCD_WHITE);   //clear the screen after fingers left screen
+ *                 cleared = true;
+ *             }
+ *         }
+ *     }
+ * }
+ * 
+ * void DisplayPattern(void)
+ * {
+ *     lcd.FillRectangle(0, 0, 50, 479,LCD_WHITE);
+ *     lcd.FillRectangle(50, 0, 50, 479,LCD_SILVER);
+ *     lcd.FillRectangle(100, 0, 50, 479,LCD_GRAY);
+ *     lcd.FillRectangle(150, 0, 50, 479,LCD_BLACK);
+ *     lcd.FillRectangle(200, 0, 50, 479,LCD_RED);
+ *     lcd.FillRectangle(250, 0, 50, 479,LCD_MAROON);
+ *     lcd.FillRectangle(300, 0, 50, 479,LCD_YELLOW);
+ *     lcd.FillRectangle(350, 0, 50, 479,LCD_OLIVE);
+ *     lcd.FillRectangle(400, 0, 50, 479,LCD_LIME);
+ *     lcd.FillRectangle(450, 0, 50, 479,LCD_GREEN);
+ *     lcd.FillRectangle(500, 0, 50, 479,LCD_AQUA);
+ *     lcd.FillRectangle(550, 0, 50, 479,LCD_TEAL);
+ *     lcd.FillRectangle(600, 0, 50, 479,LCD_BLUE);
+ *     lcd.FillRectangle(650, 0, 50, 479,LCD_NAVY);
+ *     lcd.FillRectangle(700, 0, 50, 479,LCD_FUCHSIA);
+ *     lcd.FillRectangle(750, 0, 50, 479,LCD_PURPLE);
+ *     lcd.DrawStringAtXY(0, 0, 1, LCD_WHITE, LCD_BLACK, "White");
+ *     lcd.DrawStringAtXY(50, 0, 1, LCD_WHITE, LCD_BLACK, "Silver");
+ *     lcd.DrawStringAtXY(100, 0, 1, LCD_WHITE, LCD_BLACK, "Gray");
+ *     lcd.DrawStringAtXY(150, 0, 1, LCD_WHITE, LCD_BLACK, "Black");
+ *     lcd.DrawStringAtXY(200, 0, 1, LCD_WHITE, LCD_BLACK, "Red");
+ *     lcd.DrawStringAtXY(250, 0, 1, LCD_WHITE, LCD_BLACK, "Maroon");
+ *     lcd.DrawStringAtXY(300, 0, 1, LCD_WHITE, LCD_BLACK, "Yellow");
+ *     lcd.DrawStringAtXY(350, 0, 1, LCD_WHITE, LCD_BLACK, "Olive");
+ *     lcd.DrawStringAtXY(400, 0, 1, LCD_WHITE, LCD_BLACK, "Lime");
+ *     lcd.DrawStringAtXY(450, 0, 1, LCD_WHITE, LCD_BLACK, "Green");
+ *     lcd.DrawStringAtXY(500, 0, 1, LCD_WHITE, LCD_BLACK, "Aqua");
+ *     lcd.DrawStringAtXY(550, 0, 1, LCD_WHITE, LCD_BLACK, "Teal");
+ *     lcd.DrawStringAtXY(600, 0, 1, LCD_WHITE, LCD_BLACK, "Blue");
+ *     lcd.DrawStringAtXY(650, 0, 1, LCD_WHITE, LCD_BLACK, "Navy");
+ *     lcd.DrawStringAtXY(700, 0, 1, LCD_WHITE, LCD_BLACK, "Fuchsia");
+ *     lcd.DrawStringAtXY(750, 0, 1, LCD_WHITE, LCD_BLACK, "Purple");
+ * }
+ * @endcode
+ */
+ 
+class DISCOF469LCD {
+  public:
+    /** Create a DISCOF469LCD object for using the graphics LCD on the DISCO-F469NI Development board.
+    */
+    DISCOF469LCD(void);
+    
+    /** 
+    * @brief Clears the LCD by filling it with the specified color pixels. 
+    * @param Color Color to fill the screen with - represented in ARGB8888 color space format.
+    */
+    void Clear(uint32_t Color);
+
+    /**
+    * @brief  Draws a pixel on the LCD.
+    * @param  Xpos X position
+    * @param  Ypos Y position
+    * @param  Color Pixel color in ARGB mode (8-8-8-8)
+    */
+    void DrawPixel(uint16_t Xpos, uint16_t Ypos, uint32_t Color);
+
+    /**
+    * @brief  Reads the color of an LCD pixel.
+    * @param  Xpos X position
+    * @param  Ypos Y position
+    * @retval uint32_t Pixel color in ARGB mode (8-8-8-8)
+    */
+    uint32_t ReadPixel(uint16_t Xpos, uint16_t Ypos);
+    
+    /** 
+    * @brief  Draws a line on the LCD.
+    * @param  x1 Point 1 X position
+    * @param  y1 Point 1 Y position
+    * @param  x2 Point 2 X position
+    * @param  y2 Point 2 Y position
+    * @param Color Line color in ARGB mode (8-8-8-8)
+    */
+    void DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint32_t Color);
+
+    /**
+    * @brief  Draws a rectangle on the LCD.
+    * @param  Xpos X position
+    * @param  Ypos Y position
+    * @param  Width Rectangle width
+    * @param  Height Rectangle height
+    * @param  Color Rectangle color in ARGB mode (8-8-8-8)
+    */
+    void DrawRectangle(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height, uint32_t Color);
+    
+    /**
+    * @brief  Draws a filled rectangle on the LCD.
+    * @param  Xpos X position
+    * @param  Ypos Y position
+    * @param  Width Rectangle width
+    * @param  Height Rectangle height
+    * @param  Color Rectangle color in ARGB mode (8-8-8-8)
+    */
+    void FillRectangle(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height, uint32_t Color);
+
+    /**
+    * @brief  Draws a circle on the LCD.
+    * @param  Xpos X position
+    * @param  Ypos Y position
+    * @param  Radius Circle radius
+    * @param  Color Circle color in ARGB mode (8-8-8-8)
+    */
+    void DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius, uint32_t Color);
+    
+    /**
+    * @brief  Draws a filled circle on the LCD.
+    * @param  Xpos X position
+    * @param  Ypos Y position
+    * @param  Radius Circle radius
+    * @param  Color Circle color in ARGB mode (8-8-8-8)
+    */
+    void FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius, uint32_t Color);
+
+    /**
+    * @brief  Draws an ellipse on the LCD.
+    * @param  Xpos X position
+    * @param  Ypos Y position
+    * @param  XRadius Ellipse X radius
+    * @param  YRadius Ellipse Y radius
+    * @param  Color Ellipse color in ARGB mode (8-8-8-8)
+    */
+    void DrawEllipse(uint16_t Xpos, uint16_t Ypos, uint16_t XRadius, uint16_t YRadius, uint32_t Color);
+    
+    /**
+    * @brief  Draws a filled ellipse on the LCD.
+    * @param  Xpos X position
+    * @param  Ypos Y position
+    * @param  XRadius Ellipse X radius
+    * @param  YRadius Ellipse Y radius
+    * @param  Color Ellipse color in ARGB mode (8-8-8-8)
+    */
+    void FillEllipse(uint16_t Xpos, uint16_t Ypos, uint16_t XRadius, uint16_t YRadius, uint32_t Color);
+    
+    /**
+    * @brief  Displays a string on the LCD at Xpos,Ypos.
+    * @param  Xpos X position (in pixel)
+    * @param  Ypos Y position (in pixel)
+    * @param  FontSize The size of the text (0 - 4)
+    * @param  TextColor The text foreground color
+    * @param  BackColor The text background color
+    * @param  Text String to display on LCD
+    */
+    void DrawStringAtXY(uint16_t Xpos, uint16_t Ypos, uint8_t FontSize, uint32_t TextColor, uint32_t BackColor, char *Text);
+    
+    /**
+    * @brief  Displays a string on the LCD at a certain line based on the font size.
+    * @param  Line Line where to display the string
+    * @param  FontSize The size of the text (0 - 4)
+    * @param  TextColor The text foreground color
+    * @param  BackColor The text background color
+    * @param  Mode Display mode (0=LEFT mode; 1=CENTER mode; 2=RIGHT mode)
+    * @param  Text String to display on LCD
+    */
+    void DrawStringAtLine(uint16_t Line, uint8_t FontSize, uint32_t TextColor, uint32_t BackColor, uint8_t Mode, char *Text);
+
+    /** Determines if the touchscreen is being touched or not. 
+    *
+    * @retval uint8_t Number of simulantanous touches on screen. 0 = not touched.
+    */
+    uint8_t Touches(void);
+           
+    /**
+    * @brief  Gets the x and y coordinates of the first touch on the touchscreen.
+    * @param  x Pointer to the x coordinate
+    * @param  y Pointer to the y coordinate
+    */
+    void GetTouch1(uint16_t *x, uint16_t *y);
+    
+    /**
+    * @brief  Gets the x and y coordinates of the second touch on the touchscreen.
+    * @param  x Pointer to the x coordinate
+    * @param  y Pointer to the y coordinate
+    */
+    void GetTouch2(uint16_t *x, uint16_t *y);
+    
+  
+  private:
+    
+    LCD_DISCO_F469NI lcd;
+    TS_DISCO_F469NI ts;
+
+};
+ 
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LCD_DISCO_F469NI.lib	Thu Mar 01 10:21:06 2018 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/teams/ST/code/LCD_DISCO_F469NI/#d38374480318
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TS_DISCO_F469NI.lib	Thu Mar 01 10:21:06 2018 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/teams/ST/code/TS_DISCO_F469NI/#ee8fa51422c7