--- /dev/null
+/**************************************************************************/
+/*!
+ @file hx8340b.c
+ @author K. Townsend (microBuilder.eu)
+
+ @section DESCRIPTION
+
+ Driver for HX8340B 176x220 pixel TFT LCD displays.
+
+ This driver uses a bit-banged SPI interface and a 16-bit RGB565
+ colour palette.
+
+ @section LICENSE
+
+ Software License Agreement (BSD License)
+
+ Copyright (c) 2012 Kevin Townsend
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. 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.
+ 3. Neither the name of the copyright holders 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 ''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 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.
+*/
+/**************************************************************************/
+#include "hx8340b.h"
+#include "core/systick/systick.h"
+#include "core/gpio/gpio.h"
+
+static lcdOrientation_t lcdOrientation = LCD_ORIENTATION_PORTRAIT;
+static lcdProperties_t hx8340bProperties = { 176, 220, FALSE, FALSE, FALSE };
+
+/*************************************************/
+/* Private Methods */
+/*************************************************/
+
+/*************************************************/
+void hx8340bWriteCmd(uint8_t command)
+{
+ CLR_CS;
+
+ CLR_SDI;
+ CLR_SCL;
+ SET_SCL;
+
+ uint8_t i = 0;
+ for (i=0; i<8; i++)
+ {
+ if (command & 0x80)
+ {
+ SET_SDI;
+ }
+ else
+ {
+ CLR_SDI;
+ }
+ CLR_SCL;
+ command <<= 1;
+ SET_SCL;
+ }
+ SET_CS;
+}
+
+/*************************************************/
+void hx8340bWriteData(uint8_t data)
+{
+ CLR_CS;
+
+ SET_SDI;
+ CLR_SCL;
+ SET_SCL;
+
+ uint8_t i = 0;
+ for (i=0; i<8; i++)
+ {
+ if (data & 0x80)
+ {
+ SET_SDI;
+ }
+ else
+ {
+ CLR_SDI;
+ }
+ CLR_SCL;
+ data <<= 1;
+ SET_SCL;
+ }
+ SET_CS;
+}
+
+/*************************************************/
+void hx8340bWriteData16(uint16_t data)
+{
+ hx8340bWriteData((data>>8) & 0xFF);
+ hx8340bWriteData(data & 0xFF);
+}
+
+/*************************************************/
+void hx8340bWriteRegister(uint8_t reg, uint8_t value)
+{
+ hx8340bWriteCmd(reg);
+ hx8340bWriteCmd(value);
+}
+
+/*************************************************/
+void hx8340bInitDisplay(void)
+{
+#if defined HX8340B_ICVERSION_T
+ // Power Settings
+ hx8340bWriteRegister(HX8340B_OSCCONTROLA, 0x02); // 0x18: Frequency = 100% (60fps)
+ hx8340bWriteRegister(HX8340B_OSCCONTROLB, 0x00); // 0x21: Disable Internal Oscillator
+ hx8340bWriteRegister(HX8340B_VCOMCONTROL1, 0x30); // 0x23: VCOM Offset voltage
+ hx8340bWriteRegister(HX8340B_VCOMCONTROL2, 0x36); // 0x24: VCOM High Voltage
+ hx8340bWriteRegister(HX8340B_VCOMCONTROL3, 0x1a); // 0x25: VCOM Low Voltage
+
+ // Power Supply Settings
+ hx8340bWriteRegister(HX8340B_OSCCONTROLA, 0x44); // 0x18: Frequency = 100% (60fps) (Internal 2.52MHz RC oscillator is +/-5% and made need to be tuned)
+ hx8340bWriteRegister(HX8340B_OSCCONTROLB, 0x01); // 0x21: Enable Internal Oscillator
+ hx8340bWriteRegister(HX8340B_DISPLAYMODECONTROL, 0x00); // 0x01: Partial mode off, Sleep off, Scroll off, Invert off, Idle off
+ hx8340bWriteRegister(HX8340B_MEMACCESSCONTROL, 0x08); // 0x16: Read/Write scanning direction and color order (0x08 = BGR, 0x00 = RGB)
+ hx8340bWriteRegister(HX8340B_COLMOD, 0x55); // 0x17: RGB Data Format - 0x55 = 16bpp, 0x66 = 18bpp
+ hx8340bWriteRegister(HX8340B_POWERCONTROL5, 0x03); // 0x1C: Current driving the power-supply op-amp, 0x03 = medium
+ hx8340bWriteRegister(HX8340B_POWERCONTROL1, 0x06); // 0x19: B0 = DDVDH Step-up on/off, B1 = VGH/VGL step-up off/on, B2 = VCL step-up off/on (0x06 = all on)
+ systickDelay(6);
+
+ // Driving Settings
+ hx8340bWriteRegister(HX8340B_POWERCONTROL_INT1, 0x00); // 0x60
+ hx8340bWriteRegister(HX8340B_POWERCONTROL_INT2, 0x06); // 0x61
+ hx8340bWriteRegister(HX8340B_SOURCECONTROL_INT1, 0x00); // 0x62
+ hx8340bWriteRegister(HX8340B_SOURCECONTROL_INT2, 0xC8); // 0x63
+
+ // Gamma Settings
+ hx8340bWriteRegister(0x40,0x70);
+ hx8340bWriteRegister(0x41,0x51);
+ hx8340bWriteRegister(0x42,0x36);
+ hx8340bWriteRegister(0x43,0x04);
+ hx8340bWriteRegister(0x44,0x3B);
+ hx8340bWriteRegister(0x45,0x0E);
+ hx8340bWriteRegister(0x46,0x01);
+ hx8340bWriteRegister(0x47,0x1D);
+ hx8340bWriteRegister(0x48,0x09);
+ hx8340bWriteRegister(0x50,0x72);
+ hx8340bWriteRegister(0x51,0x20);
+ hx8340bWriteRegister(0x52,0x60);
+ hx8340bWriteRegister(0x53,0x01);
+ hx8340bWriteRegister(0x54,0x33);
+ hx8340bWriteRegister(0x55,0x0E);
+ hx8340bWriteRegister(0x56,0x02);
+ hx8340bWriteRegister(0x57,0x73);
+ hx8340bWriteRegister(HX8340B_DISPLAYCONTROL1, 0x84); // 0x26: B3 = display off/on (1 = on, 0 = off), also controls gate for VGH/VGL
+ systickDelay(40);
+ hx8340bWriteRegister(HX8340B_DISPLAYCONTROL1, 0xB8); // 0x26: Display on
+ systickDelay(40);
+ hx8340bWriteRegister(HX8340B_DISPLAYCONTROL1, 0xBC);
+
+ // Set GRAM Area
+ hx8340bWriteRegister(HX8340B_COLADDR_START2, 0x00);
+ hx8340bWriteRegister(HX8340B_COLADDR_START1, 0x00);
+ hx8340bWriteRegister(HX8340B_COLADDR_END2, 0x00);
+ hx8340bWriteRegister(HX8340B_COLADDR_END1, 0xAF); // 175
+ hx8340bWriteRegister(HX8340B_ROWADDR_START2, 0x00);
+ hx8340bWriteRegister(HX8340B_ROWADDR_START1, 0x00);
+ hx8340bWriteRegister(HX8340B_ROWADDR_END2, 0x00);
+ hx8340bWriteRegister(HX8340B_ROWADDR_END1, 0xDB); // 219
+
+ hx8340bWriteCmd(HX8340B_SRAMWRITECONTROL);
+#endif
+
+#if defined HX8340B_ICVERSION_N
+ hx8340bWriteCmd(HX8340B_N_SETEXTCMD);
+ hx8340bWriteData(0xFF);
+ hx8340bWriteData(0x83);
+ hx8340bWriteData(0x40);
+
+ hx8340bWriteCmd(HX8340B_N_SPLOUT);
+ systickDelay(100);
+
+ hx8340bWriteCmd(0xCA); // Undocumented register?
+ hx8340bWriteData(0x70);
+ hx8340bWriteData(0x00);
+ hx8340bWriteData(0xD9);
+ hx8340bWriteData(0x01);
+ hx8340bWriteData(0x11);
+
+ hx8340bWriteCmd(0xC9); // Undocumented register?
+ hx8340bWriteData(0x90);
+ hx8340bWriteData(0x49);
+ hx8340bWriteData(0x10);
+ hx8340bWriteData(0x28);
+ hx8340bWriteData(0x28);
+ hx8340bWriteData(0x10);
+ hx8340bWriteData(0x00);
+ hx8340bWriteData(0x06);
+ systickDelay(20);
+
+ hx8340bWriteCmd(HX8340B_N_SETGAMMAP);
+ hx8340bWriteData(0x60);
+ hx8340bWriteData(0x71);
+ hx8340bWriteData(0x01);
+ hx8340bWriteData(0x0E);
+ hx8340bWriteData(0x05);
+ hx8340bWriteData(0x02);
+ hx8340bWriteData(0x09);
+ hx8340bWriteData(0x31);
+ hx8340bWriteData(0x0A);
+
+ hx8340bWriteCmd(HX8340B_N_SETGAMMAN);
+ hx8340bWriteData(0x67);
+ hx8340bWriteData(0x30);
+ hx8340bWriteData(0x61);
+ hx8340bWriteData(0x17);
+ hx8340bWriteData(0x48);
+ hx8340bWriteData(0x07);
+ hx8340bWriteData(0x05);
+ hx8340bWriteData(0x33);
+ systickDelay(10);
+
+ hx8340bWriteCmd(HX8340B_N_SETPWCTR5);
+ hx8340bWriteData(0x35);
+ hx8340bWriteData(0x20);
+ hx8340bWriteData(0x45);
+
+ hx8340bWriteCmd(HX8340B_N_SETPWCTR4);
+ hx8340bWriteData(0x33);
+ hx8340bWriteData(0x25);
+ hx8340bWriteData(0x4c);
+ systickDelay(10);
+
+ hx8340bWriteCmd(HX8340B_N_COLMOD); // Color Mode
+ hx8340bWriteData(0x05); // 0x05 = 16bpp, 0x06 = 18bpp
+
+ hx8340bWriteCmd(HX8340B_N_DISPON);
+ systickDelay(10);
+
+ hx8340bWriteCmd(HX8340B_N_CASET);
+ hx8340bWriteData(0x00);
+ hx8340bWriteData(0x00);
+ hx8340bWriteData(0x00);
+ hx8340bWriteData(0xaf); // 175
+
+ hx8340bWriteCmd(HX8340B_N_PASET);
+ hx8340bWriteData(0x00);
+ hx8340bWriteData(0x00);
+ hx8340bWriteData(0x00);
+ hx8340bWriteData(0xdb); // 219
+
+ hx8340bWriteCmd(HX8340B_N_RAMWR);
+#endif
+}
+
+/*************************************************/
+void hx8340bHome(void)
+{
+#if defined HX8340B_ICVERSION_N
+ hx8340bWriteCmd(HX8340B_N_CASET);
+ hx8340bWriteData(0x00);
+ hx8340bWriteData(0x00);
+ hx8340bWriteData(0x00);
+ hx8340bWriteData(0xaf);
+ hx8340bWriteCmd(HX8340B_N_PASET);
+ hx8340bWriteData(0x00);
+ hx8340bWriteData(0x00);
+ hx8340bWriteData(0x00);
+ hx8340bWriteData(0xdb);
+#endif
+}
+
+/*************************************************/
+static inline void hx8340bSetPosition(uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1)
+{
+#if defined HX8340B_ICVERSION_N
+ hx8340bWriteCmd(HX8340B_N_CASET);
+ hx8340bWriteData(x0>>8);
+ hx8340bWriteData(x0);
+ hx8340bWriteData(x1>>8);
+ hx8340bWriteData(x1);
+
+ hx8340bWriteCmd(HX8340B_N_PASET);
+ hx8340bWriteData(y0>>8);
+ hx8340bWriteData(y0);
+ hx8340bWriteData(y1>>8);
+ hx8340bWriteData(y1);
+
+ hx8340bWriteCmd(HX8340B_N_RAMWR);
+#endif
+}
+
+/*************************************************/
+/* Public Methods */
+/*************************************************/
+
+/*************************************************/
+void lcdInit(void)
+{
+ // Set control pins to output
+ gpioSetDir(HX8340B_PORT, HX8340B_SDI_PIN, 1);
+ gpioSetDir(HX8340B_PORT, HX8340B_SCL_PIN, 1);
+ gpioSetDir(HX8340B_PORT, HX8340B_CS_PIN, 1);
+ gpioSetDir(HX8340B_PORT, HX8340B_RES_PIN, 1);
+ gpioSetDir(HX8340B_PORT, HX8340B_BL_PIN, 1);
+
+ // Set pins low by default (except reset)
+ CLR_SDI;
+ CLR_SCL;
+ CLR_CS;
+ CLR_BL;
+ SET_RES;
+
+ // Turn backlight on
+ lcdBacklight(TRUE);
+
+ // Reset display
+ SET_RES;
+ systickDelay(100);
+ CLR_RES;
+ systickDelay(50);
+ SET_RES;
+ systickDelay(50);
+
+ // Run LCD init sequence
+ hx8340bInitDisplay();
+
+ // Fill black
+ lcdFillRGB(COLOR_BLACK);
+}
+
+/*************************************************/
+void lcdBacklight(bool state)
+{
+ // Set the backlight
+ // Note: Depending on the type of transistor used
+ // to control the backlight, you made need to invert
+ // the values below
+ if (state)
+ // CLR_BL;
+ SET_BL;
+ else
+ // SET_BL;
+ CLR_BL;
+}
+
+/*************************************************/
+void lcdTest(void)
+{
+#if defined HX8340B_ICVERSION_N
+ lcdFillRGB(COLOR_GREEN);
+#endif
+}
+
+/*************************************************/
+void lcdFillRGB(uint16_t color)
+{
+#if defined HX8340B_ICVERSION_N
+ uint8_t i,j;
+ for (i=0;i<220;i++)
+ {
+ for (j=0;j<176;j++)
+ {
+ hx8340bWriteData16(color);
+ }
+ }
+#endif
+}
+
+/*************************************************/
+void lcdDrawPixel(uint16_t x, uint16_t y, uint16_t color)
+{
+ hx8340bSetPosition(x, y, x+1, y+1);
+ hx8340bWriteData16(color);
+}
+
+/**************************************************************************/
+/*!
+ @brief Draws an array of consecutive RGB565 pixels (much
+ faster than addressing each pixel individually)
+*/
+/**************************************************************************/
+void lcdDrawPixels(uint16_t x, uint16_t y, uint16_t *data, uint32_t len)
+{
+ // ToDo: Optimise this function ... currently only a placeholder
+ uint32_t i = 0;
+ do
+ {
+ lcdDrawPixel(x+i, y, data[i]);
+ i++;
+ } while (i<len);
+}
+
+/*************************************************/
+void lcdDrawHLine(uint16_t x0, uint16_t x1, uint16_t y, uint16_t color)
+{
+ // Allows for slightly better performance than setting individual pixels
+ uint16_t x, pixels;
+
+ if (x1 < x0)
+ {
+ // Switch x1 and x0
+ x = x1;
+ x1 = x0;
+ x0 = x;
+ }
+
+ // Check limits
+ if (x1 >= lcdGetWidth())
+ {
+ x1 = lcdGetWidth() - 1;
+ }
+ if (x0 >= lcdGetWidth())
+ {
+ x0 = lcdGetWidth() - 1;
+ }
+
+ hx8340bSetPosition(x0, y, x1, y+1);
+ for (pixels = 0; pixels < x1 - x0 + 1; pixels++)
+ {
+ hx8340bWriteData16(color);
+ }
+}
+
+/*************************************************/
+void lcdDrawVLine(uint16_t x, uint16_t y0, uint16_t y1, uint16_t color)
+{
+ // Allows for slightly better performance than setting individual pixels
+ uint16_t y, pixels;
+
+ if (y1 < y0)
+ {
+ // Switch y1 and y0
+ y = y1;
+ y1 = y0;
+ y0 = y;
+ }
+
+ // Check limits
+ if (y1 >= lcdGetHeight())
+ {
+ y1 = lcdGetHeight() - 1;
+ }
+ if (y0 >= lcdGetHeight())
+ {
+ y0 = lcdGetHeight() - 1;
+ }
+
+ for (pixels = 0; pixels < y1 - y0 + 1; pixels++)
+ {
+ hx8340bSetPosition(x, y0+pixels, x+1, y0+pixels+1);
+ hx8340bWriteData16(color);
+ }
+}
+
+/*************************************************/
+uint16_t lcdGetPixel(uint16_t x, uint16_t y)
+{
+ // ToDo
+ return 0;
+}
+
+/*************************************************/
+void lcdSetOrientation(lcdOrientation_t orientation)
+{
+ // ToDo
+}
+
+/*************************************************/
+lcdOrientation_t lcdGetOrientation(void)
+{
+ return lcdOrientation;
+}
+
+/*************************************************/
+uint16_t lcdGetWidth(void)
+{
+ return hx8340bProperties.width;
+}
+
+/*************************************************/
+uint16_t lcdGetHeight(void)
+{
+ return hx8340bProperties.height;
+}
+
+/*************************************************/
+void lcdScroll(int16_t pixels, uint16_t fillColor)
+{
+ // ToDo
+}
+
+/*************************************************/
+uint16_t lcdGetControllerID(void)
+{
+ return 0x8340;
+}
+
+/*************************************************/
+lcdProperties_t lcdGetProperties(void)
+{
+ return hx8340bProperties;
+}
--- /dev/null
+/**************************************************************************/
+/*!
+ @file hx8340b.h
+ @author K. Townsend (microBuilder.eu)
+
+ @section LICENSE
+
+ Software License Agreement (BSD License)
+
+ Copyright (c) 2012, microBuilder SARL
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. 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.
+ 3. Neither the name of the copyright holders 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 ''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 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.
+*/
+/**************************************************************************/
+#ifndef __HX8340B_H__
+#define __HX8340B_H__
+
+#include "projectconfig.h"
+#include "drivers/lcd/tft/lcd.h"
+
+#define HX8340B_ICVERSION_N
+// #define HX8340B_ICVERSION_T
+
+#if defined HX8340B_ICVERSION_N && defined HX8340B_ICVERSION_T
+ #error "Only one IC version can be set for HX8340B (HX8340B_ICVERSION_N or HX8340B_ICVERSION_T)"
+#endif
+#if !defined HX8340B_ICVERSION_N && !defined HX8340B_ICVERSION_T
+ #error "HX8340B_ICVERSION_N or HX8340B_ICVERSION_T must be defined for HW8340 LCDs"
+#endif
+
+/**************************************************************************
+ BTL221722-276L CONNECTOR (Use HX8340B_ICVERSION_N)
+ -----------------------------------------------------------------------
+ Pin Function Notes
+ === ============== ===============================
+ 1 VSS
+ 2 NC
+ 3 LED A/+ Vf 3.3V
+ 4 VDD 2.8-3.3V
+ 5 CS
+ 6 SDI Serial Data
+ 7 SCL Serial Clock
+ 8 RS Not used
+ 9 RESET
+ 10 VDD 2.8-3.3V
+ 11 LED K1
+ 12 LED K2
+ 13 LED K3
+ 14 VSS
+
+ **************************************************************************/
+
+// Control pins
+#define HX8340B_GPIODATAREG (*(pREG32 (0x50023FFC))) // GPIO2DATA
+#define HX8340B_PORT (2)
+#define HX8340B_SDI_PIN (2)
+#define HX8340B_SCL_PIN (3)
+#define HX8340B_CS_PIN (4)
+#define HX8340B_RES_PIN (5)
+#define HX8340B_BL_PIN (6)
+
+// Macros for control line state
+#define CLR_SDI do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_SDI_PIN); } while(0)
+#define SET_SDI do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_SDI_PIN); HX8340B_GPIODATAREG |= (1<<HX8340B_SDI_PIN); } while(0)
+#define CLR_SCL do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_SCL_PIN); } while(0)
+#define SET_SCL do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_SCL_PIN); HX8340B_GPIODATAREG |= (1<<HX8340B_SCL_PIN); } while(0)
+#define CLR_CS do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_CS_PIN); } while(0)
+#define SET_CS do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_CS_PIN); HX8340B_GPIODATAREG |= (1<<HX8340B_CS_PIN); } while(0)
+#define CLR_RES do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_RES_PIN); } while(0)
+#define SET_RES do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_RES_PIN); HX8340B_GPIODATAREG |= (1<<HX8340B_RES_PIN); } while(0)
+#define CLR_BL do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_BL_PIN); } while(0)
+#define SET_BL do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_BL_PIN); HX8340B_GPIODATAREG |= (1<<HX8340B_BL_PIN); } while(0)
+
+// HX8340-B(N) Commands (used by BTL221722-276L)
+#define HX8340B_N_NOP (0x00)
+#define HX8340B_N_SWRESET (0x01)
+#define HX8340B_N_RDDIDIF (0x04)
+#define HX8340B_N_RDDST (0x09)
+#define HX8340B_N_RDDPM (0x0A)
+#define HX8340B_N_RDDMADCTL (0x0B)
+#define HX8340B_N_RDDCOLMOD (0x0C)
+#define HX8340B_N_RDDIM (0x0D)
+#define HX8340B_N_RDDSM (0x0E)
+#define HX8340B_N_RDDSDR (0x0F)
+#define HX8340B_N_SLPIN (0x10)
+#define HX8340B_N_SPLOUT (0x11)
+#define HX8340B_N_PTLON (0x12)
+#define HX8340B_N_NORON (0x13)
+#define HX8340B_N_INVOFF (0x20)
+#define HX8340B_N_INVON (0x21)
+#define HX8340B_N_GAMSET (0x26)
+#define HX8340B_N_DISPOFF (0x28)
+#define HX8340B_N_DISPON (0x29)
+#define HX8340B_N_CASET (0x2A)
+#define HX8340B_N_PASET (0x2B)
+#define HX8340B_N_RAMWR (0x2C)
+#define HX8340B_N_RAMRD (0x2E)
+#define HX8340B_N_RGBSET (0x2D)
+#define HX8340B_N_PLTAR (0x30)
+#define HX8340B_N_VSCRDEF (0x33)
+#define HX8340B_N_TEOFF (0x34)
+#define HX8340B_N_TEON (0x35)
+#define HX8340B_N_MADCTL (0x36)
+#define HX8340B_N_VSCRSADD (0x37)
+#define HX8340B_N_IDMOFF (0x38)
+#define HX8340B_N_IDMON (0x39)
+#define HX8340B_N_COLMOD (0x3A)
+#define HX8340B_N_RDID1 (0xDA)
+#define HX8340B_N_RDID2 (0xDB)
+#define HX8340B_N_RDID3 (0xDC)
+#define HX8340B_N_SETOSC (0xB0)
+#define HX8340B_N_SETPWCTR1 (0xB1)
+#define HX8340B_N_SETPWCTR2 (0xB2)
+#define HX8340B_N_SETPWCTR3 (0xB3)
+#define HX8340B_N_SETPWCTR4 (0xB4)
+#define HX8340B_N_SETPWCTR5 (0xB5)
+#define HX8340B_N_SETDISCTRL (0xB6)
+#define HX8340B_N_SETFRMCTRL (0xB7)
+#define HX8340B_N_SETDISCYCCTRL (0xB8)
+#define HX8340B_N_SETINVCTRL (0xB9)
+#define HX8340B_N_RGBBPCTR (0xBA)
+#define HX8340B_N_SETRGBIF (0xBB)
+#define HX8340B_N_SETDODC (0xBC)
+#define HX8340B_N_SETINTMODE (0xBD)
+#define HX8340B_N_SETPANEL (0xBE)
+#define HX8340B_N_SETOTP (0xC7)
+#define HX8340B_N_SETONOFF (0xC0)
+#define HX8340B_N_SETEXTCMD (0xC1)
+#define HX8340B_N_SETGAMMAP (0xC2)
+#define HX8340B_N_SETGAMMAN (0xC3)
+
+// HX8340-B(T) Commands
+#define HX8340B_T_DISPLAYMODECONTROL (0x01)
+#define HX8340B_T_COLADDR_START2 (0x02)
+#define HX8340B_T_COLADDR_START1 (0x03)
+#define HX8340B_T_COLADDR_END2 (0x04)
+#define HX8340B_T_COLADDR_END1 (0x05)
+#define HX8340B_T_ROWADDR_START2 (0x06)
+#define HX8340B_T_ROWADDR_START1 (0x07)
+#define HX8340B_T_ROWADDR_END2 (0x08)
+#define HX8340B_T_ROWADDR_END1 (0x09)
+#define HX8340B_T_MEMACCESSCONTROL (0x16)
+#define HX8340B_T_COLMOD (0x17)
+#define HX8340B_T_OSCCONTROLA (0x18)
+#define HX8340B_T_POWERCONTROL1 (0x19)
+#define HX8340B_T_POWERCONTROL3 (0x1A)
+#define HX8340B_T_POWERCONTROL4 (0x1B)
+#define HX8340B_T_POWERCONTROL5 (0x1C)
+#define HX8340B_T_POWERCONTROL6 (0x1D)
+#define HX8340B_T_POWERCONTROL7 (0x1E)
+#define HX8340B_T_POWERCONTROL8 (0x1F)
+#define HX8340B_T_POWERCONTROL9 (0x20)
+#define HX8340B_T_OSCCONTROLB (0x21)
+#define HX8340B_T_SRAMWRITECONTROL (0x22)
+#define HX8340B_T_VCOMCONTROL1 (0x23)
+#define HX8340B_T_VCOMCONTROL2 (0x24)
+#define HX8340B_T_VCOMCONTROL3 (0x25)
+#define HX8340B_T_DISPLAYCONTROL1 (0x26)
+#define HX8340B_T_DISPLAYCONTROL2 (0x27)
+#define HX8340B_T_FRAMERATECONTROL1 (0x28)
+#define HX8340B_T_FRAMERATECONTROL2 (0x29)
+#define HX8340B_T_FRAMERATECONTROL3 (0x2A)
+#define HX8340B_T_FRAMERATECONTROL4 (0x2B)
+#define HX8340B_T_DISPLAYINVERSION (0x2F)
+#define HX8340B_T_RGBINTERFACECONTROL1 (0x31)
+#define HX8340B_T_RGBINTERFACECONTROL2 (0x32)
+#define HX8340B_T_RGBINTERFACECONTROL3 (0x33)
+#define HX8340B_T_RGBINTERFACECONTROL4 (0x34)
+#define HX8340B_T_OUTPUTSDIRECTION (0x35)
+#define HX8340B_T_INTERFACEMODE (0x36)
+#define HX8340B_T_NWNBPANELSET (0x37)
+#define HX8340B_T_OTPCONTROL1 (0x38)
+#define HX8340B_T_OTPCONTROL2 (0x39)
+#define HX8340B_T_OTPCONTROL3 (0x3A)
+#define HX8340B_T_POWERCONTROL_INT1 (0x60)
+#define HX8340B_T_POWERCONTROL_INT2 (0x61)
+#define HX8340B_T_SOURCECONTROL_INT1 (0x62)
+#define HX8340B_T_SOURCECONTROL_INT2 (0x63)
+#define HX8340B_T_SOURCEOPCONTROL (0x73)
+#define HX8340B_T_HIMAXID (0x93)
+
+#endif