Tiny graphics library for STM32F746G-DISCO board

Dependents:   RadarDemo 3DDemo RadarDemoT

Committer:
karpent
Date:
Fri Nov 11 12:05:16 2016 +0000
Revision:
3:1ddc4aa1e5cb
Parent:
2:02b7b78e8510
Missing method DrawChar() added, DrawText() corrected.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
karpent 0:566855d63a2f 1 //
karpent 0:566855d63a2f 2 // RK043FN48H.h - Graphics commands for DISCO_F746NG display build on top of stm32746g driver.
karpent 0:566855d63a2f 3 //
karpent 0:566855d63a2f 4
karpent 0:566855d63a2f 5 #pragma once
karpent 0:566855d63a2f 6
karpent 0:566855d63a2f 7 #include "Commons.h"
karpent 0:566855d63a2f 8 #include "Display.h"
karpent 0:566855d63a2f 9 #include "stm32746g_discovery_lcd.h"
karpent 2:02b7b78e8510 10 #include "GrFont.h"
karpent 0:566855d63a2f 11
karpent 0:566855d63a2f 12 #define ALPHA_MASK 0x00FFFFFF
karpent 0:566855d63a2f 13
karpent 0:566855d63a2f 14 /**
karpent 0:566855d63a2f 15 * @brief Display layers available for RK043FN48H
karpent 0:566855d63a2f 16 */
karpent 0:566855d63a2f 17 typedef enum ELayer {
karpent 0:566855d63a2f 18 Background = 0, // Bottom
karpent 0:566855d63a2f 19 Foreground = 1 // Upper
karpent 0:566855d63a2f 20 } Layer;
karpent 0:566855d63a2f 21
karpent 0:566855d63a2f 22 /**
karpent 0:566855d63a2f 23 * @brief DISCO_F746NG display
karpent 0:566855d63a2f 24 */
karpent 0:566855d63a2f 25 class RK043FN48H : public Display
karpent 0:566855d63a2f 26 {
karpent 0:566855d63a2f 27 public:
karpent 0:566855d63a2f 28 RK043FN48H();
karpent 0:566855d63a2f 29 ~RK043FN48H();
karpent 0:566855d63a2f 30
karpent 0:566855d63a2f 31 /**
karpent 0:566855d63a2f 32 * @brief Clear the active layer using background color.
karpent 0:566855d63a2f 33 * @retval None
karpent 0:566855d63a2f 34 */
karpent 2:02b7b78e8510 35 void virtual Clear();
karpent 0:566855d63a2f 36
karpent 0:566855d63a2f 37 /**
karpent 0:566855d63a2f 38 * @brief Clear the active layer using given color.
karpent 0:566855d63a2f 39 * @retval None
karpent 0:566855d63a2f 40 */
karpent 0:566855d63a2f 41 void Clear(uint32_t color);
karpent 0:566855d63a2f 42
karpent 0:566855d63a2f 43 /**
karpent 0:566855d63a2f 44 * @brief Clear selected layer using given color.
karpent 0:566855d63a2f 45 * @retval None
karpent 0:566855d63a2f 46 */
karpent 0:566855d63a2f 47 void ClearLayer(Layer layer, uint32_t color);
karpent 2:02b7b78e8510 48
karpent 0:566855d63a2f 49 /**
karpent 0:566855d63a2f 50 * @brief Set background color for active layer.
karpent 0:566855d63a2f 51 * @retval None
karpent 0:566855d63a2f 52 */
karpent 0:566855d63a2f 53 void SetBackgroundColor(uint32_t color);
karpent 0:566855d63a2f 54
karpent 0:566855d63a2f 55 /**
karpent 0:566855d63a2f 56 * @brief Set foreground color for active layer.
karpent 0:566855d63a2f 57 * @retval None
karpent 0:566855d63a2f 58 */
karpent 0:566855d63a2f 59 void SetForegroundColor(uint32_t color);
karpent 2:02b7b78e8510 60
karpent 0:566855d63a2f 61 /// <summary>
karpent 0:566855d63a2f 62 /// Sets the color of the draw.
karpent 0:566855d63a2f 63 /// </summary>
karpent 0:566855d63a2f 64 /// <param name="red">The red.</param>
karpent 0:566855d63a2f 65 /// <param name="green">The green.</param>
karpent 0:566855d63a2f 66 /// <param name="blue">The blue.</param>
karpent 0:566855d63a2f 67 /// <param name="alpha">The alpha.</param>
karpent 0:566855d63a2f 68 void virtual SetDrawColor(uint8_t red, uint8_t green, uint8_t blue, uint8_t alpha);
karpent 2:02b7b78e8510 69
karpent 2:02b7b78e8510 70 /// <summary>
karpent 2:02b7b78e8510 71 /// Gets the color of the draw.
karpent 2:02b7b78e8510 72 /// </summary>
karpent 2:02b7b78e8510 73 /// <returns>Draw color value</returns>
karpent 2:02b7b78e8510 74 uint32_t virtual GetDrawColor();
karpent 2:02b7b78e8510 75
karpent 0:566855d63a2f 76 /// <summary>
karpent 2:02b7b78e8510 77 /// Sets the clear color.
karpent 0:566855d63a2f 78 /// </summary>
karpent 2:02b7b78e8510 79 /// <param name="red">The red.</param>
karpent 2:02b7b78e8510 80 /// <param name="green">The green.</param>
karpent 2:02b7b78e8510 81 /// <param name="blue">The blue.</param>
karpent 2:02b7b78e8510 82 /// <param name="alpha">The alpha.</param>
karpent 2:02b7b78e8510 83 void virtual SetClearColor(uint8_t red, uint8_t green, uint8_t blue, uint8_t alpha);
karpent 2:02b7b78e8510 84
karpent 2:02b7b78e8510 85 /// <summary>
karpent 2:02b7b78e8510 86 /// Gets the clear color.
karpent 2:02b7b78e8510 87 /// </summary>
karpent 2:02b7b78e8510 88 /// <returns>Clear color value</returns>
karpent 2:02b7b78e8510 89 uint32_t virtual GetClearColor();
karpent 2:02b7b78e8510 90
karpent 0:566855d63a2f 91 /// <summary>
karpent 0:566855d63a2f 92 /// Draws the point.
karpent 0:566855d63a2f 93 /// </summary>
karpent 0:566855d63a2f 94 /// <param name="posX">The position x.</param>
karpent 0:566855d63a2f 95 /// <param name="posY">The position y.</param>
karpent 0:566855d63a2f 96 /// <param name="colorMask">The color mask.</param>
karpent 0:566855d63a2f 97 void virtual DrawPoint(int posX, int posY, uint32_t colorMask);
karpent 2:02b7b78e8510 98
karpent 0:566855d63a2f 99 //void virtual DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
karpent 0:566855d63a2f 100
karpent 0:566855d63a2f 101 //void virtual FillRectangle(uint16_t posX, uint16_t posY, uint16_t x2, uint16_t y2);
karpent 0:566855d63a2f 102
karpent 0:566855d63a2f 103 void CopyBitmap(Layer layer, uint8_t *bitmap, uint32_t width, uint32_t height, uint32_t rgbGolorCode);
karpent 0:566855d63a2f 104
karpent 0:566855d63a2f 105 /// <summary>
karpent 0:566855d63a2f 106 /// Returns screen width.
karpent 0:566855d63a2f 107 /// </summary>
karpent 0:566855d63a2f 108 /// <returns></returns>
karpent 0:566855d63a2f 109 uint16_t virtual DisplayWidth();
karpent 0:566855d63a2f 110
karpent 0:566855d63a2f 111 /// <summary>
karpent 0:566855d63a2f 112 /// Returns screen height.
karpent 0:566855d63a2f 113 /// </summary>
karpent 0:566855d63a2f 114 /// <returns></returns>
karpent 0:566855d63a2f 115 uint16_t virtual DisplayHeight();
karpent 2:02b7b78e8510 116
karpent 0:566855d63a2f 117 void SetActiveLayer(Layer layer);
karpent 2:02b7b78e8510 118
karpent 0:566855d63a2f 119 Layer GetActiveLayer();
karpent 2:02b7b78e8510 120
karpent 0:566855d63a2f 121 void SetLayersTransparency( uint8_t background, uint8_t foreground);
karpent 2:02b7b78e8510 122
karpent 0:566855d63a2f 123 void SetLayersVisibility( bool background, bool foreground);
karpent 2:02b7b78e8510 124
karpent 2:02b7b78e8510 125 //==============================================================================
karpent 2:02b7b78e8510 126 //
karpent 2:02b7b78e8510 127 // Text output
karpent 2:02b7b78e8510 128 //
karpent 2:02b7b78e8510 129 //==============================================================================
karpent 2:02b7b78e8510 130
karpent 2:02b7b78e8510 131 /**
karpent 2:02b7b78e8510 132 * @brief Change current text cursor location for the given position on the screen.
karpent 2:02b7b78e8510 133 * Remark - cursor is unvisible.
karpent 2:02b7b78e8510 134 * @param x : X position
karpent 2:02b7b78e8510 135 * @param y : Y position
karpent 2:02b7b78e8510 136 * @retval None
karpent 2:02b7b78e8510 137 */
karpent 2:02b7b78e8510 138 void GotoXY(int x, int y);
karpent 2:02b7b78e8510 139
karpent 2:02b7b78e8510 140 /**
karpent 2:02b7b78e8510 141 * @brief Put character on the screen using current font and cursor location.
karpent 2:02b7b78e8510 142 * See also: gotoXY(x,y), SetFont(type), SetForegroundColor(c), SetBackgroundColor(c)
karpent 2:02b7b78e8510 143 * @param ch: Character to print
karpent 2:02b7b78e8510 144 * @retval None
karpent 2:02b7b78e8510 145 */
karpent 2:02b7b78e8510 146 void putch(char ch);
karpent 2:02b7b78e8510 147
karpent 2:02b7b78e8510 148 /**
karpent 2:02b7b78e8510 149 * @brief Put string on the screen using current font and cursor location.
karpent 2:02b7b78e8510 150 * See also: gotoXY(x,y), SetFont(type), SetForegroundColor(c), SetBackgroundColor(c)
karpent 2:02b7b78e8510 151 * @param str: C string (char *) to print.
karpent 2:02b7b78e8510 152 * @retval None
karpent 2:02b7b78e8510 153 */
karpent 2:02b7b78e8510 154 void puts(const char * str);
karpent 2:02b7b78e8510 155
karpent 2:02b7b78e8510 156 /**
karpent 2:02b7b78e8510 157 * @brief Draw string on the screen at given position using current font.
karpent 2:02b7b78e8510 158 * See also: SetFont(type), SetForegroundColor(c), SetBackgroundColor(c)
karpent 2:02b7b78e8510 159 * @param str: C string (char *) to print.
karpent 2:02b7b78e8510 160 * @retval None
karpent 2:02b7b78e8510 161 */
karpent 2:02b7b78e8510 162 void virtual DrawText(int posX, int posY, char * str);
karpent 2:02b7b78e8510 163
karpent 0:566855d63a2f 164 private:
karpent 0:566855d63a2f 165
karpent 2:02b7b78e8510 166 // Frame buffer addresses for layers
karpent 0:566855d63a2f 167 uint32_t FbForegroundStartAdress;
karpent 0:566855d63a2f 168 uint32_t FbBackgroundStartAdress;
karpent 0:566855d63a2f 169
karpent 0:566855d63a2f 170 /**
karpent 0:566855d63a2f 171 * @brief Mirror structure for drivers DropProp,
karpent 0:566855d63a2f 172 * Contains selected font, background and foreground color
karpent 0:566855d63a2f 173 */
karpent 0:566855d63a2f 174 LCD_DrawPropTypeDef actualDrawProp[MAX_LAYER_NUMBER];
karpent 2:02b7b78e8510 175
karpent 2:02b7b78e8510 176 /**
karpent 2:02b7b78e8510 177 * @brief Actual cursor text position for text output
karpent 2:02b7b78e8510 178 */
karpent 2:02b7b78e8510 179 Point _cursorPos[MAX_LAYER_NUMBER];
karpent 2:02b7b78e8510 180
karpent 2:02b7b78e8510 181 /**
karpent 2:02b7b78e8510 182 * @brief Current fonts for layers
karpent 2:02b7b78e8510 183 */
karpent 2:02b7b78e8510 184 GrFont _selectedFont[MAX_LAYER_NUMBER];
karpent 2:02b7b78e8510 185
karpent 2:02b7b78e8510 186 /**
karpent 2:02b7b78e8510 187 * @brief Internal method to move text coursor to the next line
karpent 2:02b7b78e8510 188 * depending on font height. Font width is not used.
karpent 2:02b7b78e8510 189 * @param w : Font width
karpent 2:02b7b78e8510 190 * @param h : Font height
karpent 2:02b7b78e8510 191 */
karpent 2:02b7b78e8510 192 void gotoNewLine(int w, int h);
karpent 2:02b7b78e8510 193
karpent 0:566855d63a2f 194 };
karpent 0:566855d63a2f 195