acid-drop

- Hacking the planet from a LilyGo T-Deck using custom firmware
git clone git://git.acid.vegas/acid-drop.git
Log | Files | Refs | Archive | README | LICENSE

Arduino_ILI9488.cpp (2698B)

      1 #include "Arduino_ILI9488.h"
      2 
      3 Arduino_ILI9488::Arduino_ILI9488(Arduino_DataBus *bus, int8_t rst, uint8_t r, bool ips)
      4     : Arduino_TFT(bus, rst, r, ips, ILI9488_TFTWIDTH, ILI9488_TFTHEIGHT, 0, 0, 0, 0)
      5 {
      6 }
      7 
      8 bool Arduino_ILI9488::begin(int32_t speed)
      9 {
     10   return Arduino_TFT::begin(speed);
     11 }
     12 
     13 /**************************************************************************/
     14 /*!
     15     @brief   Set origin of (0,0) and orientation of TFT display
     16     @param   m  The index for rotation, from 0-3 inclusive
     17 */
     18 /**************************************************************************/
     19 void Arduino_ILI9488::setRotation(uint8_t r)
     20 {
     21   Arduino_TFT::setRotation(r);
     22   switch (_rotation)
     23   {
     24   case 1:
     25     r = (ILI9488_MADCTL_BGR | ILI9488_MADCTL_MV);
     26     break;
     27   case 2:
     28     r = (ILI9488_MADCTL_BGR | ILI9488_MADCTL_MY);
     29     break;
     30   case 3:
     31     r = (ILI9488_MADCTL_BGR | ILI9488_MADCTL_MV | ILI9488_MADCTL_MX | ILI9488_MADCTL_MY);
     32     break;
     33   default: // case 0:
     34     r = (ILI9488_MADCTL_BGR | ILI9488_MADCTL_MX);
     35     break;
     36   }
     37   _bus->beginWrite();
     38   _bus->writeC8D8(ILI9488_MADCTL, r);
     39   _bus->endWrite();
     40 }
     41 
     42 void Arduino_ILI9488::writeAddrWindow(int16_t x, int16_t y, uint16_t w, uint16_t h)
     43 {
     44   if ((x != _currentX) || (w != _currentW))
     45   {
     46     _currentX = x;
     47     _currentW = w;
     48     x += _xStart;
     49     _bus->writeC8D16D16Split(ILI9488_CASET, x, x + w - 1);
     50   }
     51   if ((y != _currentY) || (h != _currentH))
     52   {
     53     _currentY = y;
     54     _currentH = h;
     55     y += _yStart;
     56     _bus->writeC8D16D16Split(ILI9488_PASET, y, y + h - 1);
     57   }
     58 
     59   _bus->writeCommand(ILI9488_RAMWR); // write to RAM
     60 }
     61 
     62 void Arduino_ILI9488::invertDisplay(bool i)
     63 {
     64   _bus->sendCommand(i ? ILI9488_INVON : ILI9488_INVOFF);
     65 }
     66 
     67 void Arduino_ILI9488::displayOn(void)
     68 {
     69   _bus->sendCommand(ILI9488_SLPOUT);
     70   delay(ILI9488_SLPOUT_DELAY);
     71 }
     72 
     73 void Arduino_ILI9488::displayOff(void)
     74 {
     75   _bus->sendCommand(ILI9488_SLPIN);
     76   delay(ILI9488_SLPIN_DELAY);
     77 }
     78 
     79 // Companion code to the above tables.  Reads and issues
     80 // a series of LCD commands stored in PROGMEM byte array.
     81 void Arduino_ILI9488::tftInit()
     82 {
     83   if (_rst != GFX_NOT_DEFINED)
     84   {
     85     pinMode(_rst, OUTPUT);
     86     digitalWrite(_rst, HIGH);
     87     delay(100);
     88     digitalWrite(_rst, LOW);
     89     delay(ILI9488_RST_DELAY);
     90     digitalWrite(_rst, HIGH);
     91     delay(ILI9488_RST_DELAY);
     92   }
     93   else
     94   {
     95     // Software Rest
     96     _bus->sendCommand(ILI9488_SWRESET);
     97     delay(ILI9488_RST_DELAY);
     98   }
     99 
    100   _bus->batchOperation(ili9488_init_operations, sizeof(ili9488_init_operations));
    101 
    102   _bus->beginWrite();
    103   _bus->writeC8D8(0x3A, 0x55); // Interface Pixel Format, 16 bit
    104   _bus->endWrite();
    105 
    106   if (_ips)
    107   {
    108     _bus->sendCommand(ILI9488_INVON);
    109   }
    110   else
    111   {
    112     _bus->sendCommand(ILI9488_INVOFF);
    113   }
    114 }