Smart

Dependencies:   Hexi_KW40Z

Revision:
0:69293b19ee19
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Hexi_OLED_SSD1351.h	Wed Feb 28 16:34:40 2018 +0000
@@ -0,0 +1,388 @@
+/** OLED Display Driver for Hexiwear 
+ *  This file contains OLED driver functionality for drawing images and text
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this list
+ * of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice, this
+ * list of conditions and the following disclaimer in the documentation and/or
+ * other materials provided with the distribution.
+ *
+ * Neither the name of NXP, nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * visit: http://www.mikroe.com and http://www.nxp.com
+ *
+ * get support at: http://www.mikroe.com/forum and https://community.nxp.com
+ *
+ * Project HEXIWEAR, 2015
+ */
+
+#ifndef HG_HEXI_OLED_SSD1351
+#define HG_HEXI_OLED_SSD1351
+
+#include "mbed.h"
+#include "OLED_types.h" 
+#include "OLED_info.h"
+
+
+/** OLED Display Driver for Hexiwear
+*/
+class SSD1351{
+
+public:
+
+ /**
+  * Create a Hexiwear OLED Driver connected to the specified pins
+  *
+  * @param mosiPin SPI Master Out, Slave In Pin
+  * @param sclkPin SPI CLock Pin
+  * @param pwrPin  OLED Power Pin
+  * @param csPin   OLED Chip Select Pin
+  * @param rstPin  OLED Reset Pin
+  * @param dcPin   OLED DC Pin
+  *
+  * @note Default TextProperties
+  *
+  *       .font       = OpenSans_10x15_Regular,    
+  *       .fontColor  = COLOR_WHITE,
+  *       .alignParam = OLED_TEXT_ALIGN_CENTER, 
+  *       .background = NULL
+  *
+  */
+  SSD1351(PinName mosiPin,PinName sclkPin,PinName pwrPin, PinName csPin,PinName rstPin, PinName dcPin);
+
+  /**
+  * Destroy the Hexiwear instance
+  */   
+  ~SSD1351(); 
+
+  /**
+   * Send the command to OLED
+   * @param  cmd     OLED command from the datasheet
+   * @param  isFirst designate if this is the first byte in the command
+   */
+  void SendCmd(uint32_t cmd,
+                     uint8_t isFirst);
+
+
+  /**
+   * Send data to OLED
+   * @param  dataToSend data to send to OLED
+   * @param  dataSize   data-size
+   */
+  void SendData ( const uint8_t* dataToSend, 
+                             uint32_t dataSize);
+
+  /**
+   * draw box on OLED
+   * @param  xCrd   x-coordinate for box's uper left corner
+   * @param  yCrd   y-coordinate for box's uper left corner
+   * @param  width  box's width
+   * @param  height box's height
+   * @param  color  color of the box
+   * @return        status flag
+   */
+  oled_status_t DrawBox (
+                              int8_t xCrd,
+                              int8_t yCrd,
+                              uint8_t width,
+                              uint8_t height,
+                              uint16_t color
+                            );
+
+  /**
+   * Fill the entire screen with specified color
+   * @param  color color to fill with
+   */
+  void FillScreen( uint16_t color );
+
+
+
+  /**
+   * Draw a single pixel
+   * @param  xCrd  pixel's x coordinate
+   * @param  yCrd  pixel's y coordinate
+   * @param  color pixel's color
+   * @return       status flag
+   */
+  oled_status_t DrawPixel (
+                                 int8_t xCrd,
+                                 int8_t yCrd,
+                                uint16_t color
+                              );
+
+
+  /**
+   * Draw the whole screen
+   * @param  image      image to draw
+   * @param  xCrd       image x-coordinate
+   * @param  yCrd       image y-coordinate
+   * @param  width      image width
+   * @param  height     image height
+   * @param  transition transition style for the new image arrival
+   * @return            status flag
+   */
+  oled_status_t DrawScreen (
+                                     const uint8_t* image,
+                                            int8_t xCrd,
+                                            int8_t yCrd,
+                                            uint8_t width,
+                                            uint8_t height,
+                                  oled_transition_t transition
+                                );
+
+
+  /**
+   * Set the font to use
+   * @param newFont  desired font
+   * @param newColor desired color
+   * @return         status flag
+   */
+  oled_status_t SetFont(
+                              const uint8_t* newFont,
+                                    uint16_t newColor
+                            );
+
+
+  /**
+   * Set OLED dynamic area
+   * @param dynamic_area data-structure with desired values
+   */
+  void SetDynamicArea(oled_dynamic_area_t *dynamic_area);
+
+  /**
+   * Destroy current OLED dynamic area
+   */
+  void DestroyDynamicArea();
+
+
+  /**
+   * Set OLED class text properties from parameter 
+   * @param textProperties data-structure with desired properties
+   */
+  void SetTextProperties(oled_text_properties_t *textProperties);
+
+  /**
+   * Copy OLED class text properties to parameter
+   * @param textProperties destination data-structure
+   */
+  void GetTextProperties(oled_text_properties_t *textProperties);
+
+  /**
+   * Return the width in [px] required for the given string to be displayed
+   * @param  text desired string
+   * @return      required text width in [px]
+   */
+  uint8_t GetTextWidth(const uint8_t* text);
+
+
+  /**
+   * Count the characters
+   * @param  width  text width
+   * @param  font   text font
+   * @param  text   given text string
+   * @param  length text length
+   * @return        character count
+   */
+  uint8_t CharCount(uint8_t width, const uint8_t* font, const uint8_t* text, uint8_t length);
+
+  /**
+   * Add text to the main screen buffer at position x,y. 
+   * @param text    text to add
+   * @param xCrd    x-coordinate for the given text
+   * @param yCrd    y-coordinate for the given text
+   * @return        status flag
+   */
+  oled_status_t AddText( const uint8_t* text,int8_t xCrd, int8_t yCrd );
+    /**
+   * Add text to the main screen buffer. Used with SetDynamicArea() Function.
+   * @param  text text to add
+   * @return      status flag
+   */
+  oled_status_t AddText( const uint8_t* text);
+ 
+  /**
+   * Write text on OLED at position set in Dynamic Area Field. Used with SetDynamicArea() Function.
+   * @param text desired text
+   * 
+   */
+  oled_status_t DrawText ( const uint8_t* text);
+
+  /**
+   * Return the dimensions of image 
+   * @param width  given image's width
+   * @param height given image's height
+   * @param image  desired image
+   */
+  void GetImageDimensions(uint8_t *width, uint8_t *height, const uint8_t* image);
+
+  /**
+   * Add image to the main screen buffer.Used with SetDynamicArea() Function.
+   * @param  image      desired image
+   * @return            status flag
+   */
+  oled_status_t AddImage ( const uint8_t* image );
+
+    /**
+   * Add image to the main screen buffer at position x,y 
+   * @param  image      desired image
+   * @param  xCrd       image x-coordinate
+   * @param  yCrd       image y-coordinate
+   * @return            status flag
+   */
+  oled_status_t AddImage ( const uint8_t* image, int8_t xCrd, int8_t yCrd );
+
+  /**
+   * Send image to OLED GRAM.Used with SetDynamicArea() Function for positioning image. 
+   * @param  image      desired image
+   * @return            status flag
+   */
+  oled_status_t DrawImage ( const uint8_t* image );
+    /**
+   * Send image to OLED GRAM at position x,y.
+   * @param  image      desired image
+   * @param  xCrd       image x-coordinate
+   * @param  yCrd       image y-coordinate
+   * @return            status flag
+   */
+  oled_status_t DrawImage ( const uint8_t* image, int8_t xCrd, int8_t yCrd );
+
+  /**
+   * Dim OLED screen on
+   */
+  void DimScreenON();
+
+  /**
+   * Return OLED back to full contrast
+   */
+  void DimScreenOFF();
+
+  /**
+   * Swap image's bytes per pixel to obtain the correct color format
+   * @param imgDst  desired image
+   * @param imgSrc  original image
+   * @param imgSize image's size
+   */
+  void Swap(
+                      oled_pixel_t imgDst,
+                    const uint8_t* imgSrc,
+                          uint16_t imgSize
+                  );
+    
+
+  /**
+   * Turn on Power for OLED Display
+   */              
+  void PowerON();
+
+  /**
+   * Turn off Power for OLED Display
+   */ 
+  void PowerOFF(); 
+
+  /**
+   * update the main screen buffer
+   * with the given image
+
+   * @param  xCrd       image x-coordinate
+   * @param  yCrd       image y-coordinate
+   * @param  width      image width
+   * @param  height     image height
+   * @param  image      image for buffer
+   */
+  void UpdateBuffer (
+                                int8_t xCrd,
+                                int8_t yCrd,
+                                uint8_t width,
+                                uint8_t height,
+                                const uint8_t* image
+                              );
+
+
+    /**
+   * Write text on OLED at position x,y. Recommended for Static Text. 
+   * @param text    desired text
+   * @param xCrd    x-coordinate for the given text
+   * @param yCrd    y-coordinate for the given text
+   */
+
+  oled_status_t Label(const uint8_t* text,
+                            int8_t xCrd, 
+                            int8_t yCrd );
+
+  /**
+  * Create a text box of width,height at position x,y. Recommended for Dynamic Text.
+  * Text is aligned in textbox accordingly to the align parameter set by SetTextProperties(). 
+  * @param text    desired text
+  * @param xCrd    x-coordinate for the textbox
+  * @param yCrd    y-coordinate for the textbox
+  * @param width   width of the textbox
+  * @param height  height of the textbox 
+  */
+  
+  oled_status_t TextBox(const uint8_t* text,
+                              int8_t xCrd, 
+                              int8_t yCrd,
+                              uint8_t width,
+                              uint8_t height);
+
+
+private:
+
+  SPI spi;
+  DigitalOut power;
+  DigitalOut cs;
+  DigitalOut rst; 
+  DigitalOut dc;
+
+ 
+  const uint8_t* selectedFont;
+
+  uint8_t
+    currentChar_width,
+    currentChar_height,
+    screenBuf[OLED_GRAM_SIZE];
+
+  uint16_t
+    selectedFont_color,
+    selectedFont_firstChar, /* first character in the font table */
+    selectedFont_lastChar,  /* last character in the font table */
+    selectedFont_height,
+    colorMask;
+
+  oled_dynamic_area_t oled_dynamic_area;
+  oled_text_properties_t oled_text_properties;
+
+  
+  /* Internal Functions */
+  void Transpose( oled_pixel_t transImage, const oled_pixel_t image, uint8_t width, uint8_t height );
+  oled_status_t TopDown   ( const uint8_t* image, int8_t xCrd, int8_t yCrd, uint8_t width, uint8_t height );
+  oled_status_t DownTop   ( const uint8_t* image, int8_t xCrd, int8_t yCrd, uint8_t width, uint8_t height );
+  oled_status_t LeftRight ( const uint8_t* image, int8_t xCrd, int8_t yCrd, uint8_t width, uint8_t height );
+  oled_status_t RightLeft ( const uint8_t* image, int8_t xCrd, int8_t yCrd, uint8_t width, uint8_t height );
+  void SetBorders( int8_t xCrd, int8_t yCrd, uint8_t width, uint8_t height );
+  oled_status_t CreateTextBackground();
+  void WriteCharToBuf( uint16_t charToWrite, oled_pixel_t* chrBuf );
+  oled_status_t AddCharToTextArea( oled_pixel_t chrPtr, uint8_t chrWidth, uint8_t chrHeight, oled_pixel_t copyAddr, uint8_t imgWidth );
+  void* AllocateDynamicArea( uint32_t area );
+  oled_status_t DestroyDynamicArea(void * ptr);
+
+};
+
+#endif