#ifndef LIB_HAL_ARDGFX_INIT_H
#define LIB_HAL_ARDGFX_INIT_H
#include <pins_arduino.h>

#if defined(USE_ARDUINO_GFX)

#include <Arduino_GFX_Library.h>

static const lcd_init_cmd_t hi8561_lcd_init_cmd[] = {
    //  {cmd, { data }, data_size, delay_ms}
    /**** CMD_Page 3 ****/
    {0xDF, (uint8_t[]){0x90, 0x69, 0xF9},                                                                   3,  0  },
    {0xDE, (uint8_t[]){0x00},                                                                               1,  0  },
    {0xBB, (uint8_t[]){0x0F, 0x10, 0x43, 0x50, 0x32, 0x44, 0x44},                                           7,  0  },
    {0xBF, (uint8_t[]){0x46, 0x32},                                                                         2,  0  },
    {0xC0, (uint8_t[]){0x01, 0xAD, 0x01, 0xAD},                                                             4,  0  },
    {0xBD, (uint8_t[]){0x00, 0xB4},                                                                         2,  0  },
    {0xC6,
     (uint8_t[]){0x00, 0x7D, 0x00, 0xC8, 0x00, 0x17, 0x1A, 0x82, 0x00, 0x00, 0x00, 0x01,
                 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01},
     23,                                                                                                        0  },
    {0xC8, (uint8_t[]){0x23, 0x48, 0x87},                                                                   3,  0  },
    // {0xCC, (uint8_t[]){0x33}, 1, 0},//4lane
    {0xCC, (uint8_t[]){0x31},                                                                               1,  0  }, // 2lane
    // {0xCC, (uint8_t[]){0x30}, 1, 0}, // 1lane
    {0xBC, (uint8_t[]){0x2E, 0x80, 0x84},                                                                   3,  0  },
    {0xC3,
     (uint8_t[]){0x3B, 0x01, 0x02, 0x05, 0x0C, 0x0C, 0x75, 0x0A, 0x79, 0x0A, 0x79, 0x02, 0x6E,
                 0x02, 0x6E, 0x02, 0x6E, 0x0A, 0x0D, 0x0A, 0x0F, 0x0A, 0x0F, 0x0A, 0x0F},
     25,                                                                                                        0  },
    {0xC4,
     (uint8_t[]){0x01, 0x02, 0x05, 0x0C, 0x0C, 0x75, 0x0A, 0x79, 0x0A, 0x79, 0x02, 0x6E,
                 0x02, 0x6E, 0x02, 0x6E, 0x0A, 0x0D, 0x0A, 0x0F, 0x0A, 0x0F, 0x0A, 0x0F},
     24,                                                                                                        0  },
    {0xC5,
     (uint8_t[]){0x03, 0x05, 0x0C, 0x0C, 0x75, 0x0A, 0x79, 0x0A, 0x79, 0x02, 0x6E, 0x02,
                 0x6E, 0x02, 0x6E, 0x0A, 0x0D, 0x0A, 0x0F, 0x0A, 0x0F, 0x0A, 0x0F},
     23,                                                                                                        0  },
    {0xD7,
     (uint8_t[]){
         0x00, 0x0A, 0x63, 0x0A, 0x63, 0x0A, 0x63, 0x0A, 0x63, 0x0A, 0x63, 0x0A, 0x63, 0x0A, 0x63, 0x0A, 0x63
     },                                                                                                     17,
     0                                                                                                             },
    {0xCB,
     (uint8_t[]){0x7F, 0x78, 0x71, 0x64, 0x5A, 0x58, 0x4B, 0x51, 0x3A, 0x53, 0x51, 0x4F, 0x6A, 0x54, 0x57,
                 0x46, 0x3F, 0x2F, 0x1B, 0x0F, 0x08, 0x7F, 0x78, 0x71, 0x64, 0x5A, 0x58, 0x4B, 0x51, 0x3A,
                 0x53, 0x51, 0x4F, 0x6A, 0x54, 0x57, 0x46, 0x3F, 0x2F, 0x1B, 0x0F, 0x08, 0x00},
     43,                                                                                                        0  },
    {0xCE,
     (uint8_t[]){0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
                 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C},
     23,                                                                                                        0  },
    {0xCF,
     (uint8_t[]){0x00, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
                 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
     45,                                                                                                        0  },
    {0xD0,
     (uint8_t[]){0x00, 0x1F, 0x1F, 0x11, 0x1E, 0x1F, 0x0F, 0x0F, 0x0D, 0x0D, 0x0B, 0x0B, 0x09, 0x09, 0x07,
                 0x07, 0x05, 0x05, 0x01, 0x1F, 0x1F, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
     29,                                                                                                        0  },
    {0xD1,
     (uint8_t[]){0x00, 0x1F, 0x1F, 0x10, 0x1E, 0x1F, 0x0E, 0x0E, 0x0C, 0x0C, 0x0A, 0x0A, 0x08, 0x08, 0x06,
                 0x06, 0x04, 0x04, 0x00, 0x1F, 0x1F, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
     29,                                                                                                        0  },
    {0xD2,
     (uint8_t[]){0x00, 0x5F, 0x1F, 0x10, 0x1F, 0x1E, 0x08, 0x08, 0x4A, 0x0A, 0x0C, 0x0C, 0x0E, 0x0E, 0x04,
                 0x04, 0x06, 0x06, 0x00, 0x1F, 0x1F, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
     29,                                                                                                        0  },
    {0xD3,
     (uint8_t[]){0x00, 0x1F, 0x1F, 0x11, 0x1F, 0x1E, 0x09, 0x09, 0x0B, 0x0B, 0x0D, 0x0D, 0x0F, 0x0F, 0x05,
                 0x05, 0x07, 0x07, 0x01, 0x1F, 0x1F, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
     29,                                                                                                        0  },
    {0xD4,
     (uint8_t[]){0x00, 0x20, 0x0B, 0x00, 0x0D, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                 0x00, 0x00, 0x03, 0x03, 0x03, 0x00, 0x81, 0x04, 0xAE, 0x04, 0xB0, 0x04, 0xB2, 0x04, 0xB4,
                 0x04, 0xB6, 0x04, 0xB8, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x06,
                 0x44, 0x06, 0x46, 0x03, 0x03, 0x00, 0x00, 0x07, 0x00, 0x06, 0x04, 0xA7, 0x04, 0xA8, 0x00,
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00},
     87,                                                                                                        0  },
    {0xD5,
     (uint8_t[]){0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00,
                 0x07, 0x32, 0x5A, 0x00, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x1E, 0xB3, 0x00, 0x0F,
                 0x06, 0x0C, 0x00, 0x71, 0x20, 0x04, 0x10, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00,
                 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00,
                 0x1F, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
     61,                                                                                                        0  },
    {0xCD, (uint8_t[]){0x00, 0x00},                                                                         2,  0  },

    {0xDE, (uint8_t[]){0x01},                                                                               1,  0  },
    {0xB9, (uint8_t[]){0x00, 0xFF, 0xFF, 0x04},                                                             4,  0  },
    {0xC7, (uint8_t[]){0x1F, 0x14, 0x0E},                                                                   3,  0  },

    {0xDE, (uint8_t[]){0x02},                                                                               1,  0  },
    {0xE5,
     (uint8_t[]){0x00, 0x60, 0x60, 0x02, 0x18, 0x60, 0x18, 0x60, 0x09, 0x04, 0x00, 0xC5,
                 0x01, 0x2C, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04},
     24,                                                                                                        0  },
    {0xE6, (uint8_t[]){0x10, 0x10, 0x82},                                                                   3,  0  },
    {0xC4, (uint8_t[]){0x00, 0x11, 0x07, 0x00, 0x11, 0x01, 0x08},                                           7,  0  },
    {0xC3, (uint8_t[]){0x20, 0xFF},                                                                         2,  0  },
    {0xBD, (uint8_t[]){0x1B},                                                                               1,  0  },
    {0xC6, (uint8_t[]){0x4A, 0x00},                                                                         2,  0  },
    {0xCD, (uint8_t[]){0x14, 0x64, 0x11, 0x40},                                                             4,  0  },
    {0xC1, (uint8_t[]){0x00, 0x40, 0x00, 0x02, 0x02, 0x02, 0x02, 0x7F, 0x00, 0x00},                         10, 0  },
    {0xB3, (uint8_t[]){0x00, 0xA8},                                                                         2,  0  },
    {0xBB, (uint8_t[]){0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x40, 0x43, 0x04},                   11, 0  },
    {0xC2, (uint8_t[]){0x02, 0x42, 0x50, 0x00, 0x02, 0xE4, 0x61, 0x73, 0xF9, 0x08},                         10, 0  },
    {0xEC,
     (uint8_t[]){0x07, 0x07, 0x40, 0x00, 0x22, 0x02, 0x00, 0xFF, 0x08, 0x7C, 0x00, 0x00, 0x00, 0x00},
     14,                                                                                                        0  },

    {0xDE, (uint8_t[]){0x03},                                                                               1,  0  },
    {0xD1, (uint8_t[]){0x00, 0x00, 0x21, 0xFF, 0x00},                                                       5,  0  },

    {0xDE, (uint8_t[]){0x00},                                                                               1,  0  },
    {0x35, (uint8_t[]){0x00},                                                                               0,  30 },

    {0x11, (uint8_t[]){0x00},                                                                               0,  120},

    {0x29, (uint8_t[]){0x00},                                                                               0,  50 },

    //============ Gamma END===========
};

#define CONFIG_SCREEN_PIXEL_FORMAT_RGB565 1

static const lcd_init_cmd_t rm69a10_lcd_init_cmd[] = {
    //  {cmd, { data }, data_size, delay_ms}
    /**** CMD_Page 3 ****/
    {0xFE, (uint8_t[]){0xFD},                   1, 0  },
    {0x80, (uint8_t[]){0xFC},                   1, 0  },
    {0xFE, (uint8_t[]){0x00},                   1, 0  },
    {0x2A, (uint8_t[]){0x00, 0x00, 0x02, 0x37}, 4, 0  },
    {0x2B, (uint8_t[]){0x00, 0x00, 0x04, 0xCF}, 4, 0  },
    {0x31, (uint8_t[]){0x00, 0x03, 0x02, 0x34}, 4, 0  },
    {0x30, (uint8_t[]){0x00, 0x00, 0x04, 0xCF}, 4, 0  },
    {0x12, (uint8_t[]){0x00},                   1, 0  },
    {0x35, (uint8_t[]){0x00},                   1, 0  },
#if CONFIG_SCREEN_PIXEL_FORMAT_RGB565
    {0x3A, (uint8_t[]){0x75},                   1, 0  }, // interface pixel format 16bit/pixel
#elif CONFIG_SCREEN_PIXEL_FORMAT_RGB888
    {0x3A, (uint8_t[]){0x77}, 1, 0}, // interface pixel format 24bit/pixel
#endif
    {0x51, (uint8_t[]){0xFE},                   1, 0  }, // Brightness to 100
    // {0x51, (uint8_t[]){0x00}, 1, 0}, // 设置屏幕亮度为0
    {0x11, (uint8_t[]){0x00},                   0, 120},
    {0x29, (uint8_t[]){0x00},                   0, 0  },
    //============ Gamma END===========
};
#endif
#endif
