Hexiwear / Hexi_OLED_SSD1351

Dependents:   Hexi_OLED_TextImage_Example Hexi_OLED_Text_Example Hexi_OLED_Image_Example security-console-app ... more

Committer:
khuang
Date:
Wed Aug 17 22:08:40 2016 +0000
Revision:
0:06f42dd3eab3
Initial Version of Hexiwear OLED Display Driver; APIs not finalized; SUBJECT TO CHANGE

Who changed what in which revision?

UserRevisionLine numberNew contents of line
khuang 0:06f42dd3eab3 1 #ifndef HG_OLED_DRIVER
khuang 0:06f42dd3eab3 2 #define HG_OLED_DRIVER
khuang 0:06f42dd3eab3 3
khuang 0:06f42dd3eab3 4 #include "mbed.h"
khuang 0:06f42dd3eab3 5 #include "OLED_types.h"
khuang 0:06f42dd3eab3 6 #include "OLED_info.h"
khuang 0:06f42dd3eab3 7
khuang 0:06f42dd3eab3 8
khuang 0:06f42dd3eab3 9
khuang 0:06f42dd3eab3 10 class OLED{
khuang 0:06f42dd3eab3 11
khuang 0:06f42dd3eab3 12 public:
khuang 0:06f42dd3eab3 13
khuang 0:06f42dd3eab3 14
khuang 0:06f42dd3eab3 15 OLED(PinName mosi,PinName sclk,PinName pwr, PinName cs,PinName rst, PinName dc);
khuang 0:06f42dd3eab3 16
khuang 0:06f42dd3eab3 17 ~OLED();
khuang 0:06f42dd3eab3 18
khuang 0:06f42dd3eab3 19 /**
khuang 0:06f42dd3eab3 20 * Send the command to OLED
khuang 0:06f42dd3eab3 21 * @param self OLED handle
khuang 0:06f42dd3eab3 22 * @param cmd OLED command from the datasheet
khuang 0:06f42dd3eab3 23 * @param isFirst designate if this is the first byte in the command
khuang 0:06f42dd3eab3 24 */
khuang 0:06f42dd3eab3 25 void OLED_SendCmd(uint32_t cmd,
khuang 0:06f42dd3eab3 26 uint8_t isFirst);
khuang 0:06f42dd3eab3 27
khuang 0:06f42dd3eab3 28
khuang 0:06f42dd3eab3 29 /**
khuang 0:06f42dd3eab3 30 * Send data to OLED
khuang 0:06f42dd3eab3 31 * @param dataToSend data to send to OLED
khuang 0:06f42dd3eab3 32 * @param dataSize data-size
khuang 0:06f42dd3eab3 33 */
khuang 0:06f42dd3eab3 34 void OLED_SendData ( const uint8_t* dataToSend,
khuang 0:06f42dd3eab3 35 uint32_t dataSize);
khuang 0:06f42dd3eab3 36
khuang 0:06f42dd3eab3 37 /**
khuang 0:06f42dd3eab3 38 * draw box on OLED
khuang 0:06f42dd3eab3 39 * @param xCrd x-coordinate for box's uper left corner
khuang 0:06f42dd3eab3 40 * @param yCrd y-coordinate for box's uper left corner
khuang 0:06f42dd3eab3 41 * @param width box's width
khuang 0:06f42dd3eab3 42 * @param height box's height
khuang 0:06f42dd3eab3 43 * @param color color of the box
khuang 0:06f42dd3eab3 44 * @return status flag
khuang 0:06f42dd3eab3 45 */
khuang 0:06f42dd3eab3 46 oled_status_t OLED_DrawBox (
khuang 0:06f42dd3eab3 47 uint16_t xCrd,
khuang 0:06f42dd3eab3 48 uint16_t yCrd,
khuang 0:06f42dd3eab3 49 uint16_t width,
khuang 0:06f42dd3eab3 50 uint16_t height,
khuang 0:06f42dd3eab3 51 uint16_t color
khuang 0:06f42dd3eab3 52 );
khuang 0:06f42dd3eab3 53
khuang 0:06f42dd3eab3 54 /**
khuang 0:06f42dd3eab3 55 * Fill the entire screen with specified color
khuang 0:06f42dd3eab3 56 * @param color color to fill with
khuang 0:06f42dd3eab3 57 */
khuang 0:06f42dd3eab3 58 void OLED_FillScreen( uint16_t color );
khuang 0:06f42dd3eab3 59
khuang 0:06f42dd3eab3 60
khuang 0:06f42dd3eab3 61
khuang 0:06f42dd3eab3 62 /**
khuang 0:06f42dd3eab3 63 * Draw a single pixel
khuang 0:06f42dd3eab3 64 * @param xCrd pixel's x coordinate
khuang 0:06f42dd3eab3 65 * @param yCrd pixel's y coordinate
khuang 0:06f42dd3eab3 66 * @param color pixel's color
khuang 0:06f42dd3eab3 67 * @return status flag
khuang 0:06f42dd3eab3 68 */
khuang 0:06f42dd3eab3 69 oled_status_t OLED_DrawPixel (
khuang 0:06f42dd3eab3 70 int16_t xCrd,
khuang 0:06f42dd3eab3 71 int16_t yCrd,
khuang 0:06f42dd3eab3 72 uint16_t color
khuang 0:06f42dd3eab3 73 );
khuang 0:06f42dd3eab3 74
khuang 0:06f42dd3eab3 75
khuang 0:06f42dd3eab3 76 /**
khuang 0:06f42dd3eab3 77 * Draw the whole screen
khuang 0:06f42dd3eab3 78 * @param image image to draw
khuang 0:06f42dd3eab3 79 * @param xCrd image x-coordinate
khuang 0:06f42dd3eab3 80 * @param yCrd image y-coordinate
khuang 0:06f42dd3eab3 81 * @param width image width
khuang 0:06f42dd3eab3 82 * @param height image height
khuang 0:06f42dd3eab3 83 * @param transition transition style for the new image arrival
khuang 0:06f42dd3eab3 84 * @return status flag
khuang 0:06f42dd3eab3 85 */
khuang 0:06f42dd3eab3 86 oled_status_t OLED_DrawScreen (
khuang 0:06f42dd3eab3 87 const uint8_t* image,
khuang 0:06f42dd3eab3 88 uint8_t xCrd,
khuang 0:06f42dd3eab3 89 uint8_t yCrd,
khuang 0:06f42dd3eab3 90 uint8_t width,
khuang 0:06f42dd3eab3 91 uint8_t height,
khuang 0:06f42dd3eab3 92 oled_transition_t transition
khuang 0:06f42dd3eab3 93 );
khuang 0:06f42dd3eab3 94
khuang 0:06f42dd3eab3 95
khuang 0:06f42dd3eab3 96 /**
khuang 0:06f42dd3eab3 97 * Set the font to use
khuang 0:06f42dd3eab3 98 * @param newFont desired font
khuang 0:06f42dd3eab3 99 * @param newColor desired color
khuang 0:06f42dd3eab3 100 * @return status flag
khuang 0:06f42dd3eab3 101 */
khuang 0:06f42dd3eab3 102 oled_status_t OLED_SetFont(
khuang 0:06f42dd3eab3 103 const uint8_t* newFont,
khuang 0:06f42dd3eab3 104 uint16_t newColor
khuang 0:06f42dd3eab3 105 );
khuang 0:06f42dd3eab3 106
khuang 0:06f42dd3eab3 107
khuang 0:06f42dd3eab3 108 /**
khuang 0:06f42dd3eab3 109 * Set OLED dynamic area
khuang 0:06f42dd3eab3 110 * @param dynamic_area data-structure with desired values
khuang 0:06f42dd3eab3 111 */
khuang 0:06f42dd3eab3 112 void OLED_SetDynamicArea(oled_dynamic_area_t *dynamic_area);
khuang 0:06f42dd3eab3 113
khuang 0:06f42dd3eab3 114 /**
khuang 0:06f42dd3eab3 115 * Destroy current OLED dynamic area
khuang 0:06f42dd3eab3 116 */
khuang 0:06f42dd3eab3 117 void OLED_DestroyDynamicArea();
khuang 0:06f42dd3eab3 118
khuang 0:06f42dd3eab3 119
khuang 0:06f42dd3eab3 120 /**
khuang 0:06f42dd3eab3 121 * Set OLED text properties
khuang 0:06f42dd3eab3 122 * @param textProperties data-structure with desired properties
khuang 0:06f42dd3eab3 123 */
khuang 0:06f42dd3eab3 124 void OLED_SetTextProperties(oled_text_properties_t *textProperties);
khuang 0:06f42dd3eab3 125
khuang 0:06f42dd3eab3 126
khuang 0:06f42dd3eab3 127 /**
khuang 0:06f42dd3eab3 128 * Return the width in [px] required for the given string to be displayed
khuang 0:06f42dd3eab3 129 * @param text desired string
khuang 0:06f42dd3eab3 130 * @return required text width in [px]
khuang 0:06f42dd3eab3 131 */
khuang 0:06f42dd3eab3 132 uint8_t OLED_GetTextWidth(const uint8_t* text);
khuang 0:06f42dd3eab3 133
khuang 0:06f42dd3eab3 134
khuang 0:06f42dd3eab3 135 /**
khuang 0:06f42dd3eab3 136 * Count the characters
khuang 0:06f42dd3eab3 137 * @param width text width
khuang 0:06f42dd3eab3 138 * @param font text font
khuang 0:06f42dd3eab3 139 * @param text given text string
khuang 0:06f42dd3eab3 140 * @param length text length
khuang 0:06f42dd3eab3 141 * @return character count
khuang 0:06f42dd3eab3 142 */
khuang 0:06f42dd3eab3 143 uint8_t OLED_CharCount(uint8_t width, const uint8_t* font, const uint8_t* text, uint8_t length);
khuang 0:06f42dd3eab3 144
khuang 0:06f42dd3eab3 145 /**
khuang 0:06f42dd3eab3 146 * Add text to the main screen buffer
khuang 0:06f42dd3eab3 147 * @param text text to add
khuang 0:06f42dd3eab3 148 * @return status flag
khuang 0:06f42dd3eab3 149 */
khuang 0:06f42dd3eab3 150 oled_status_t OLED_AddText( const uint8_t* text );
khuang 0:06f42dd3eab3 151
khuang 0:06f42dd3eab3 152 /**
khuang 0:06f42dd3eab3 153 * Write text on OLED at position set in Dynamic Area Field
khuang 0:06f42dd3eab3 154 * @param text desired text
khuang 0:06f42dd3eab3 155 * @param x x-coordinate for the given text, set through .dynamicArea variable
khuang 0:06f42dd3eab3 156 * @param y y-coordinate for the given text, set through .dynamicArea variable
khuang 0:06f42dd3eab3 157 */
khuang 0:06f42dd3eab3 158 oled_status_t OLED_DrawText ( const uint8_t* text );
khuang 0:06f42dd3eab3 159
khuang 0:06f42dd3eab3 160
khuang 0:06f42dd3eab3 161 /**
khuang 0:06f42dd3eab3 162 * Return the dimensions of image
khuang 0:06f42dd3eab3 163 * @param width given image's width
khuang 0:06f42dd3eab3 164 * @param height given image's height
khuang 0:06f42dd3eab3 165 * @param image desired image
khuang 0:06f42dd3eab3 166 */
khuang 0:06f42dd3eab3 167 void OLED_GetImageDimensions(uint8_t *width, uint8_t *height, const uint8_t* image);
khuang 0:06f42dd3eab3 168
khuang 0:06f42dd3eab3 169
khuang 0:06f42dd3eab3 170
khuang 0:06f42dd3eab3 171 /**
khuang 0:06f42dd3eab3 172 * Add image to the main screen buffer
khuang 0:06f42dd3eab3 173 * @param image desired image
khuang 0:06f42dd3eab3 174 * @return status flag
khuang 0:06f42dd3eab3 175 */
khuang 0:06f42dd3eab3 176 oled_status_t OLED_AddImage ( const uint8_t* image );
khuang 0:06f42dd3eab3 177
khuang 0:06f42dd3eab3 178 /**
khuang 0:06f42dd3eab3 179 * Draw image, i.e. send image to OLED GRAM
khuang 0:06f42dd3eab3 180 * @param image desired image
khuang 0:06f42dd3eab3 181 * @param transition desired transition style for the new image
khuang 0:06f42dd3eab3 182 * @return status flag
khuang 0:06f42dd3eab3 183 */
khuang 0:06f42dd3eab3 184 oled_status_t OLED_DrawImage ( const uint8_t* image );
khuang 0:06f42dd3eab3 185
khuang 0:06f42dd3eab3 186 /**
khuang 0:06f42dd3eab3 187 * Dim OLED screen on
khuang 0:06f42dd3eab3 188 */
khuang 0:06f42dd3eab3 189 void OLED_DimScreenON();
khuang 0:06f42dd3eab3 190
khuang 0:06f42dd3eab3 191 /**
khuang 0:06f42dd3eab3 192 * Return OLED back to full contrast
khuang 0:06f42dd3eab3 193 */
khuang 0:06f42dd3eab3 194 void OLED_DimScreenOFF();
khuang 0:06f42dd3eab3 195
khuang 0:06f42dd3eab3 196 /**
khuang 0:06f42dd3eab3 197 * Swap image's bytes per pixel to obtain the correct color format
khuang 0:06f42dd3eab3 198 * @param imgDst desired image
khuang 0:06f42dd3eab3 199 * @param imgSrc original image
khuang 0:06f42dd3eab3 200 * @param imgSize image's size
khuang 0:06f42dd3eab3 201 */
khuang 0:06f42dd3eab3 202 void OLED_Swap(
khuang 0:06f42dd3eab3 203 oled_pixel_t imgDst,
khuang 0:06f42dd3eab3 204 const uint8_t* imgSrc,
khuang 0:06f42dd3eab3 205 uint16_t imgSize
khuang 0:06f42dd3eab3 206 );
khuang 0:06f42dd3eab3 207
khuang 0:06f42dd3eab3 208
khuang 0:06f42dd3eab3 209 /**
khuang 0:06f42dd3eab3 210 * Turn on Power for OLED Display
khuang 0:06f42dd3eab3 211 */
khuang 0:06f42dd3eab3 212 void OLED_PowerON();
khuang 0:06f42dd3eab3 213
khuang 0:06f42dd3eab3 214 /**
khuang 0:06f42dd3eab3 215 * Turn off Power for OLED Display
khuang 0:06f42dd3eab3 216 */
khuang 0:06f42dd3eab3 217 void OLED_PowerOFF();
khuang 0:06f42dd3eab3 218
khuang 0:06f42dd3eab3 219 /**
khuang 0:06f42dd3eab3 220 * update the main screen buffer
khuang 0:06f42dd3eab3 221 * with the given image
khuang 0:06f42dd3eab3 222
khuang 0:06f42dd3eab3 223 * @param xCrd image x-coordinate
khuang 0:06f42dd3eab3 224 * @param yCrd image y-coordinate
khuang 0:06f42dd3eab3 225 * @param width image width
khuang 0:06f42dd3eab3 226 * @param height image height
khuang 0:06f42dd3eab3 227 * @param image image for buffer
khuang 0:06f42dd3eab3 228 */
khuang 0:06f42dd3eab3 229 void OLED_UpdateBuffer (
khuang 0:06f42dd3eab3 230 uint8_t xCrd,
khuang 0:06f42dd3eab3 231 uint8_t yCrd,
khuang 0:06f42dd3eab3 232 uint8_t width,
khuang 0:06f42dd3eab3 233 uint8_t height,
khuang 0:06f42dd3eab3 234 const uint8_t* image
khuang 0:06f42dd3eab3 235 );
khuang 0:06f42dd3eab3 236
khuang 0:06f42dd3eab3 237
khuang 0:06f42dd3eab3 238
khuang 0:06f42dd3eab3 239 private:
khuang 0:06f42dd3eab3 240
khuang 0:06f42dd3eab3 241 SPI oled_SPI;
khuang 0:06f42dd3eab3 242 DigitalOut oled_POWER;
khuang 0:06f42dd3eab3 243 DigitalOut oled_CS;
khuang 0:06f42dd3eab3 244 DigitalOut oled_RST;
khuang 0:06f42dd3eab3 245 DigitalOut oled_DC;
khuang 0:06f42dd3eab3 246
khuang 0:06f42dd3eab3 247
khuang 0:06f42dd3eab3 248 const uint8_t* selectedFont;
khuang 0:06f42dd3eab3 249
khuang 0:06f42dd3eab3 250 uint8_t
khuang 0:06f42dd3eab3 251 isFontInitialized,
khuang 0:06f42dd3eab3 252 currentChar_width,
khuang 0:06f42dd3eab3 253 currentChar_height,
khuang 0:06f42dd3eab3 254 screenBuf[OLED_GRAM_SIZE];
khuang 0:06f42dd3eab3 255
khuang 0:06f42dd3eab3 256 uint16_t
khuang 0:06f42dd3eab3 257 selectedFont_color,
khuang 0:06f42dd3eab3 258 selectedFont_firstChar, // first character in the font table
khuang 0:06f42dd3eab3 259 selectedFont_lastChar, // last character in the font table
khuang 0:06f42dd3eab3 260 selectedFont_height,
khuang 0:06f42dd3eab3 261 colorMask;
khuang 0:06f42dd3eab3 262
khuang 0:06f42dd3eab3 263 oled_dynamic_area_t oled_dynamic_area;
khuang 0:06f42dd3eab3 264 oled_text_properties_t oled_text_properties;
khuang 0:06f42dd3eab3 265
khuang 0:06f42dd3eab3 266
khuang 0:06f42dd3eab3 267 //Internal Functions
khuang 0:06f42dd3eab3 268 void Transpose( oled_pixel_t transImage, const oled_pixel_t image, uint8_t width, uint8_t height );
khuang 0:06f42dd3eab3 269 oled_status_t TopDown ( const uint8_t* image, uint8_t xCrd, uint8_t yCrd, uint8_t width, uint8_t height );
khuang 0:06f42dd3eab3 270 oled_status_t DownTop ( const uint8_t* image, uint8_t xCrd, uint8_t yCrd, uint8_t width, uint8_t height );
khuang 0:06f42dd3eab3 271 oled_status_t LeftRight ( const uint8_t* image, uint8_t xCrd, uint8_t yCrd, uint8_t width, uint8_t height );
khuang 0:06f42dd3eab3 272 oled_status_t RightLeft ( const uint8_t* image, uint8_t xCrd, uint8_t yCrd, uint8_t width, uint8_t height );
khuang 0:06f42dd3eab3 273 void SetBorders( uint8_t xCrd, uint8_t yCrd, uint8_t width, uint8_t height );
khuang 0:06f42dd3eab3 274 oled_status_t CreateTextBackground();
khuang 0:06f42dd3eab3 275 void WriteCharToBuf( uint16_t charToWrite, oled_pixel_t* chrBuf );
khuang 0:06f42dd3eab3 276 oled_status_t AddCharToTextArea( oled_pixel_t chrPtr, uint8_t chrWidth, uint8_t chrHeight, oled_pixel_t copyAddr, uint8_t imgWidth );
khuang 0:06f42dd3eab3 277 void* AllocateDynamicArea( uint32_t area );
khuang 0:06f42dd3eab3 278 oled_status_t DestroyDynamicArea(void * ptr);
khuang 0:06f42dd3eab3 279
khuang 0:06f42dd3eab3 280 };
khuang 0:06f42dd3eab3 281
khuang 0:06f42dd3eab3 282 #endif