Subversion Repositories libOLED

Rev

Rev 5 | Rev 7 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * displayclass.H
  3.  *
  4.  *  Created on: 31 Oct 2020
  5.  *      Author: mike
  6.  */
  7.  
  8. #pragma once
  9. #include <cstdint>
  10. #include "libOLED/fontclass.H"
  11.  
  12. inline int constexpr
  13. dataSize (int const width, int const height)
  14. {
  15.   return (width * height / 8);
  16. }
  17.  
  18. enum colour_t
  19. {
  20.   BLACK, WHITE, INVERT
  21. };
  22.  
  23. class display_t
  24. {
  25. public:
  26.   display_t (int const width, int const height, int const ramwidth,
  27.              uint8_t *const data);
  28.  
  29.   virtual
  30.   ~display_t ();
  31.  
  32.   uint8_t
  33.   getRotation ();
  34.   int16_t
  35.   width ();
  36.   int16_t
  37.   height ();
  38.  
  39.   void
  40.   init ();
  41.  
  42.   /// \brief Clear display to colour
  43.   void
  44.   clearDisplay (colour_t colour = colour_t::BLACK);
  45.   void
  46.   invertDisplay (uint8_t i);
  47.   void
  48.   display ();
  49.  
  50.   void
  51.   startscrollright (uint8_t start, uint8_t stop);
  52.   void
  53.   startscrollleft (uint8_t start, uint8_t stop);
  54.  
  55.   void
  56.   startscrolldiagright (uint8_t start, uint8_t stop);
  57.   void
  58.   startscrolldiagleft (uint8_t start, uint8_t stop);
  59.   void
  60.   stopscroll (void);
  61.  
  62.   void
  63.   dim (uint8_t contrast);
  64.  
  65.   void
  66.   drawPixel (int16_t x, int16_t y, colour_t color);
  67.  
  68.   void
  69.   drawLine (int16_t x1, int16_t y1, int16_t x2, int16_t y2, colour_t color);
  70.  
  71.   void drawRectangle (int16_t x1, int16_t y1, int16_t x2, int16_t y2, colour_t color);
  72.  
  73.  
  74.   void
  75.   gotoxy (int x, int y)
  76.   {
  77.     m_cursor_x = x;
  78.     m_cursor_y = y;
  79.   }
  80.   ;
  81.  
  82.   // pixel to pixel plotting
  83.   /// \param font The font to use
  84.   /// \param string The characters to plot
  85.   /// \param length The length of the string
  86.   /// \param colour
  87.   void
  88.   printString (font_t &font, char const *string, uint16_t length,
  89.                colour_t colour);
  90.  
  91.   // scaled plotting
  92.   /// \param font The font to use
  93.   /// \param string The characters to plot
  94.   /// \param length The length of the string
  95.   /// \param scale The scale factor is 256/scale so 256 is 1:1, 128 is twice the size
  96.   /// \param colour
  97.   void
  98.   printScaledString (font_t &font, char const *string,
  99.                                   uint16_t length, uint16_t scale,
  100.                                   colour_t colour);
  101.  
  102.   void
  103.   fontDigits (font_t &font, uint8_t digits, uint8_t dp_pos, int val);
  104.  
  105.   void
  106.   fontSigDigits (font_t &font,uint8_t x, uint8_t y, bool right_justify, uint8_t dp_pos,
  107.                  int val);
  108.  
  109.   int
  110.   cursor_x ()
  111.   {
  112.     return m_cursor_x;
  113.   }
  114.   ;
  115.  
  116.   int
  117.   cursor_y ()
  118.   {
  119.     return m_cursor_y;
  120.   }
  121.   ;
  122.  
  123. private:
  124.  
  125.   // set=1 means send data set=0 means send control
  126.   virtual void
  127.   oledSetCD (uint8_t set) =0;
  128.  
  129.   virtual void
  130.   oledWrite (uint8_t d) =0;
  131.  
  132.   virtual void
  133.   oledReset () = 0;
  134.  
  135.   virtual void
  136.   oledWrite (uint8_t *buff, uint8_t len) = 0;
  137.  
  138.  
  139.   uint8_t formatNum (char *buff, uint8_t siz, uint8_t digits, uint8_t dp_pos, int val);
  140.  
  141.  
  142.   int const m_width; // pixel width
  143.   int const m_height; // pixel height
  144.   int const m_ramwidth; // OLED controller ram pixel width
  145.  
  146.   int m_cursor_x;
  147.   int m_cursor_y;
  148.   int m_rotation;
  149.  
  150.   uint8_t *const m_data;
  151.  
  152. };
  153.