/*********** * FT810.h * ***********/ /**************************************************************************** * Written By Mark Pelletier 2017 - Aleph Objects, Inc. * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * To view a copy of the GNU General Public License, go to the following * * location: . * ****************************************************************************/ /**************************************************************************** * This header defines registers and commands for the FTDI FT810 LCD Driver * * chip. * ****************************************************************************/ /************************************************************************************************************ * FT810 * * * * START ADDRESS END ADDRESS SIZE NAME DESCRIPTION * * * * 0x000000 0x0FFFFF 1024 kB RAM_G Main Graphics RAM 0 to 1048572 * * * * 0x0C0000 0x0C0003 4 B ROM_CHIPID [0:1] 0x800 [1:2] 0x0100 Chip Id, Version ID * * * * 0x1E0000 0x2FFFFB 1152 kB ROM_FONT Font table and bitmap * * * * 0x2FFFFC 0x2FFFFF 4 B ROM_FONT_ADDR Font table pointer address * * * * 0x300000 0x301FFF 8 kB RAM_DL Display List RAM * * * * 0x302000 0x302FFF 4 kB REG_* Registers * * * * 0x308000 0x308FFF 4 kB RAM_CMD Command Buffer * * * ************************************************************************************************************/ #ifndef _AO_FT810_H #define _AO_FT810_H // Uncomment this line if using an Arduino board instead of a Printer Controller board. // This allows the use of the Arduino SPI Library and SPI Peripheral instead of the bit-banged SPI // of the Printer Controllers (RAMBo, Mini RAMBo, Einsy, Archim). // This is used by the CLCD_spiTransfer(uint8_t) function and CLCD_spiInit() function. // #define IS_ARDUINO namespace FT800 { // MEMORY LOCATIONS FT800 const uint32_t RAM_G = 0x000000; // Main Graphics RAM const uint32_t ROM_FONT = 0x0BB23C; // Font ROM const uint32_t ROM_FONT_ADDR = 0x0FFFFC; // Font Table Pointer const uint32_t RAM_DL = 0x100000; // Display List RAM const uint32_t RAM_PAL = 0x102000; // Palette RAM const uint32_t RAM_REG = 0x102400; // Registers const uint32_t RAM_CMD = 0x108000; // Command Buffer const uint32_t RAM_G_SIZE = 256l*1024l; // 256k } namespace FT810 { // MEMORY LOCATIONS FT810 const uint32_t RAM_G = 0x000000; // Main Graphics RAM const uint32_t ROM_CHIPID = 0x0C0000; // Chip ID ROM const uint32_t ROM_FONT = 0x1E0000; // Font ROM const uint32_t ROM_FONT_ADDR = 0x2FFFFC; // Font Table Pointer const uint32_t RAM_DL = 0x300000; // Display List RAM const uint32_t RAM_REG = 0x302000; // Registers const uint32_t RAM_CMD = 0x308000; // Command Buffer const uint32_t RAM_G_SIZE = 1024l*1024l; // 1024k } namespace FT800 { // REGISTERS AND ADDRESSES FT800 // REGISTER ADDRESS SIZE RESET VALUE TYPE DESCRIPTION const uint32_t REG_ID = 0x102400; // 8 0x7C r Identification Register, Always 0x7C const uint32_t REG_FRAMES = 0x102404; // 32 0x00000000 r Frame Counter, Since Reset const uint32_t REG_CLOCK = 0x102408; // 32 0x00000000 r Clock cycles, Since Reset const uint32_t REG_FREQUENCY = 0x10240C; // 28 0x03938700 r/w Main Clock Frequency const uint32_t REG_RENDERMODE = 0x102410; // 1 0x00 r/w Rendering Mode: 0 = normal, 1 = single-line const uint32_t REG_SNAPY = 0x102414; // 11 0x0000 r/w Scan Line Select for RENDERMODE 1 const uint32_t REG_SNAPSHOT = 0x102418; // 1 - r Trigger for RENDERMODE 1 const uint32_t REG_CPURESET = 0x10241C; // 3 0x02 r/w RESET Bit2 Audio - Bit1 Touch - Bit0 Graphics const uint32_t REG_TAP_CRC = 0x102420; // 32 - r Live Video Tap const uint32_t REG_TAP_MASK = 0x102424; // 32 0xFFFFFFFF r/w Live Video Tap Mask const uint32_t REG_HCYCLE = 0x102428; // 12 0x224 r/w Horizontal Total Cycle Count const uint32_t REG_HOFFSET = 0x10242C; // 12 0x02B r/w Horizontal Display Start Offset const uint32_t REG_HSIZE = 0x102430; // 12 0x1E0 r/w Horizontal Display Pixel Count const uint32_t REG_HSYNC0 = 0x102434; // 12 0x000 r/w Horizontal Sync Fall Offset const uint32_t REG_HSYNC1 = 0x102438; // 12 0x029 r/w Horizontal Sync Rise Offset const uint32_t REG_VCYCLE = 0x10243C; // 12 0x124 r/w Vertical Total Cycle Count const uint32_t REG_VOFFSET = 0x102440; // 12 0x00C r/w Vertical Display Start Offset const uint32_t REG_VSIZE = 0x102444; // 12 0x110 r/w Vertical Display Line Count const uint32_t REG_VSYNC0 = 0x102448; // 10 0x000 r/w Vertical Sync Fall Offset const uint32_t REG_VSYNC1 = 0x10244C; // 10 0x00A r/w Vertical Sync Rise Offset const uint32_t REG_DLSWAP = 0x102450; // 2 0x00 r/w Display List Swap Control const uint32_t REG_ROTATE = 0x102454; // 3 0x00 r/w Screen 90,180, 270 degree rotate const uint32_t REG_OUTBITS = 0x102458; // 9 0x1B6 r/w Output Resolution, 3x3x3 Bits const uint32_t REG_DITHER = 0x10245C; // 1 0x01 r/w Output Dither Enable const uint32_t REG_SWIZZLE = 0x102460; // 4 0x00 r/w Output RGB Swizzle, Pin Change for PCB Routing const uint32_t REG_CSPREAD = 0x102464; // 1 0x01 r/w Output Clock Spreading Enable const uint32_t REG_PCLK_POL = 0x102468; // 1 0x00 r/w PCLK Polarity: 0 = Rising Edge, 1 = Falling Edge const uint32_t REG_PCLK = 0x10246C; // 8 0x00 r/w PCLK Frequency Divider, 0 = Disable Clock const uint32_t REG_TAG_X = 0x102470; // 11 0x000 r/w Tag Query X Coordinate const uint32_t REG_TAG_Y = 0x102474; // 11 0x000 r/w Tag Query Y Coordinate const uint32_t REG_TAG = 0x102478; // 8 0x00 r Tag Query Result const uint32_t REG_VOL_PB = 0x10247C; // 8 0xFF r/w Audio Playback Volume const uint32_t REG_VOL_SOUND = 0x102480; // 8 0xFF r/w Audio Synthesizer Volume const uint32_t REG_SOUND = 0x102484; // 16 0x0000 r/w Audio Sound Effect Select const uint32_t REG_PLAY = 0x102488; // 1 0x00 r/w Audio Start Effect Playback const uint32_t REG_GPIO_DIR = 0x10248C; // 8 0x80 r/w GPIO Pin Direction: 0 = Input , 1 = Output const uint32_t REG_GPIO = 0x102490; // 8 0x00 r/w GPIO Pin Values for 0, 1, 7 Drive Strength 2, 3, 4, 5, 6 const uint32_t REG_INT_FLAGS = 0x102498; // 8 0x00 r Interrupt Flags, Clear by Reading const uint32_t REG_INT_EN = 0x10249C; // 1 0x00 r/w Global Interrupt Enable const uint32_t REG_INT_MASK = 0x1024A0; // 8 0xFF r/w Interrupt Enable Mask const uint32_t REG_PLAYBACK_START = 0x1024A4; // 20 0x00000 r/w Audio Playback RAM Start Address const uint32_t REG_PLAYBACK_LENGTH = 0x1024A8; // 20 0x00000 r/w Audio Playback Sample Length (Bytes) const uint32_t REG_PLAYBACK_READPTR = 0x1024AC; // 20 - r Audio Playback Read Pointer const uint32_t REG_PLAYBACK_FREQ = 0x1024B0; // 16 0x1F40 r/w Audio Playback Frequency (Hz) const uint32_t REG_PLAYBACK_FORMAT = 0x1024B4; // 2 0x00 r/w Audio Playback Format const uint32_t REG_PLAYBACK_LOOP = 0x1024B8; // 1 0x00 r/w Audio Playback Loop Enable const uint32_t REG_PLAYBACK_PLAY = 0x1024BC; // 1 0x00 r Audio Start Playback const uint32_t REG_PWM_HZ = 0x1024C0; // 14 0x00FA r/w Backlight PWM Frequency (Hz) const uint32_t REG_PWM_DUTY = 0x1024C4; // 8 0x80 r/w Backlight PWM Duty Cycle: 0 = 0%, 128 = 100% const uint32_t REG_MACRO_0 = 0x1024C8; // 32 0x00000000 r/w Display List Macro Command 0 const uint32_t REG_MACRO_1 = 0x1024CC; // 32 0x00000000 r/w Display List Macro Command 1 const uint32_t REG_CMD_READ = 0x1024E4; // 12 0x000 r/w Command Buffer Read Pointer const uint32_t REG_CMD_WRITE = 0x1024E8; // 12 0x000 r/w Command Buffer Write Pointer const uint32_t REG_CMD_DL = 0x1024EC; // 13 0x0000 r/w Command Display List Offset const uint32_t REG_TOUCH_MODE = 0x1024F0; // 2 0x03 r/w Touch-Screen Sampling Mode const uint32_t REG_TOUCH_ADC_MODE = 0x1024F4; // 1 0x01 r/w Select Single Ended or Differential Sampling const uint32_t REG_TOUCH_CHARGE = 0x1024F8; // 16 0x1770 r/w Touch Screen Charge Time, n x 6 Clocks const uint32_t REG_TOUCH_SETTLE = 0x1024FC; // 4 0x03 r/w Touch-Screen Settle Time, n x 6 Clocks const uint32_t REG_TOUCH_OVERSAMPLE = 0x102500; // 4 0x07 r/w Touch-Screen Oversample Factor const uint32_t REG_TOUCH_RZTHRESH = 0x102504; // 16 0xFFFF r/w Touch-Screen Resistance Threshold const uint32_t REG_TOUCH_RAW_XY = 0x102508; // 32 - r Touch-Screen Raw (x-MSB16; y-LSB16) const uint32_t REG_TOUCH_RZ = 0x10250C; // 16 - r Touch-Screen Resistance const uint32_t REG_TOUCH_SCREEN_XY = 0x102510; // 32 - r Touch-Screen Screen (x-MSB16; y-LSB16) const uint32_t REG_TOUCH_TAG_XY = 0x102514; // 32 - r Touch-Screen Tag 0 Lookup (x-MSB16; y-LSB16) const uint32_t REG_TOUCH_TAG = 0x102518; // 8 - r Touch-Screen Tag 0 Result const uint32_t REG_TOUCH_TRANSFORM_A = 0x10251C; // 32 0x00010000 r/w Touch-Screen Transform Coefficient A (s15.16) const uint32_t REG_TOUCH_TRANSFORM_B = 0x102520; // 32 0x00000000 r/w Touch-Screen Transform Coefficient B (s15.16) const uint32_t REG_TOUCH_TRANSFORM_C = 0x102524; // 32 0x00000000 r/w Touch-Screen Transform Coefficient C (s15.16) const uint32_t REG_TOUCH_TRANSFORM_D = 0x102528; // 32 0x00000000 r/w Touch-Screen Transform Coefficient D (s15.16) const uint32_t REG_TOUCH_TRANSFORM_E = 0x10252C; // 32 0x00010000 r/w Touch-Screen Transform Coefficient E (s15.16) const uint32_t REG_TOUCH_TRANSFORM_F = 0x102530; // 32 0x00000000 r/w Touch-Screen Transform Coefficient F (s15.16) // Reserved Addresses 0x102434 - 0x102470 const uint32_t REG_TOUCH_DIRECT_XY = 0x102574; // 32 - r Touch-Screen Direct Conversions XY (x-MSB16; y-LSB16) const uint32_t REG_TOUCH_DIRECT_Z1Z2 = 0x102578; // 32 - r Touch-Screen Direct Conversions Z (z1-MSB16; z2-LSB16) const uint32_t REG_TRACKER = 0x109000; // 32 0x00000000 r/w Track Register (Track Value – MSB16; Tag Value - LSB8) }; namespace FT810 { // REGISTERS AND ADDRESSES FT810 // REGISTER ADDRESS SIZE RESET VALUE TYPE DESCRIPTION const uint32_t REG_ID = 0x302000; // 8 0x7C r Identification Register, Always 0x7C const uint32_t REG_FRAMES = 0x302004; // 32 0x00000000 r Frame Counter, Since Reset const uint32_t REG_CLOCK = 0x302008; // 32 0x00000000 r Clock cycles, Since Reset const uint32_t REG_FREQUENCY = 0x30200C; // 28 0x03938700 r/w Main Clock Frequency const uint32_t REG_RENDERMODE = 0x302010; // 1 0x00 r/w Rendering Mode: 0 = normal, 1 = single-line const uint32_t REG_SNAPY = 0x302014; // 11 0x0000 r/w Scan Line Select for RENDERMODE 1 const uint32_t REG_SNAPSHOT = 0x302018; // 1 - r Trigger for RENDERMODE 1 const uint32_t REG_SNAPFORMAT = 0x30201C; // 6 0x20 r/w Pixel Format for Scanline Readout const uint32_t REG_CPURESET = 0x302020; // 3 0x02 r/w RESET Bit2 Audio - Bit1 Touch - Bit0 Graphics const uint32_t REG_TAP_CRC = 0x302024; // 32 - r Live Video Tap const uint32_t REG_TAP_MASK = 0x302028; // 32 0xFFFFFFFF r/w Live Video Tap Mask const uint32_t REG_HCYCLE = 0x30202C; // 12 0x224 r/w Horizontal Total Cycle Count const uint32_t REG_HOFFSET = 0x302030; // 12 0x02B r/w Horizontal Display Start Offset const uint32_t REG_HSIZE = 0x302034; // 12 0x1E0 r/w Horizontal Display Pixel Count const uint32_t REG_HSYNC0 = 0x302038; // 12 0x000 r/w Horizontal Sync Fall Offset const uint32_t REG_HSYNC1 = 0x30203C; // 12 0x029 r/w Horizontal Sync Rise Offset const uint32_t REG_VCYCLE = 0x302040; // 12 0x124 r/w Vertical Total Cycle Count const uint32_t REG_VOFFSET = 0x302044; // 12 0x00C r/w Vertical Display Start Offset const uint32_t REG_VSIZE = 0x302048; // 12 0x110 r/w Vertical Display Line Count const uint32_t REG_VSYNC0 = 0x30204C; // 10 0x000 r/w Vertical Sync Fall Offset const uint32_t REG_VSYNC1 = 0x302050; // 10 0x00A r/w Vertical Sync Rise Offset const uint32_t REG_DLSWAP = 0x302054; // 2 0x00 r/w Display List Swap Control const uint32_t REG_ROTATE = 0x302058; // 3 0x00 r/w Screen 90,180, 270 degree rotate const uint32_t REG_OUTBITS = 0x30205C; // 9 0x1B6 r/w Output Resolution, 3x3x3 Bits const uint32_t REG_DITHER = 0x302060; // 1 0x01 r/w Output Dither Enable const uint32_t REG_SWIZZLE = 0x302064; // 4 0x00 r/w Output RGB Swizzle, Pin Change for PCB Routing const uint32_t REG_CSPREAD = 0x302068; // 1 0x01 r/w Output Clock Spreading Enable const uint32_t REG_PCLK_POL = 0x30206C; // 1 0x00 r/w PCLK Polarity: 0 = Rising Edge, 1 = Falling Edge const uint32_t REG_PCLK = 0x302070; // 8 0x00 r/w PCLK Frequency Divider, 0 = Disable Clock const uint32_t REG_TAG_X = 0x302074; // 11 0x000 r/w Tag Query X Coordinate const uint32_t REG_TAG_Y = 0x302078; // 11 0x000 r/w Tag Query Y Coordinate const uint32_t REG_TAG = 0x30207C; // 8 0x00 r Tag Query Result const uint32_t REG_VOL_PB = 0x302080; // 8 0xFF r/w Audio Playback Volume const uint32_t REG_VOL_SOUND = 0x302084; // 8 0xFF r/w Audio Synthesizer Volume const uint32_t REG_SOUND = 0x302088; // 16 0x0000 r/w Audio Sound Effect Select const uint32_t REG_PLAY = 0x30208C; // 1 0x00 r/w Audio Start Effect Playback const uint32_t REG_GPIO_DIR = 0x302090; // 8 0x80 r/w GPIO Pin Direction: 0 = Input , 1 = Output const uint32_t REG_GPIO = 0x302094; // 8 0x00 r/w GPIO Pin Values for 0, 1, 7 Drive Strength 2, 3, 4, 5, 6 const uint32_t REG_GPIOX_DIR = 0x302098; // 16 0x8000 r/w Extended GPIO Pin Direction const uint32_t REG_GPIOX = 0x30209C; // 16 0x0080 r/w Extended GPIO Pin Values // Reserved Addr 0x3020A0 // Reserved Addr 0x3020A4 const uint32_t REG_INT_FLAGS = 0x3020A8; // 8 0x00 r Interrupt Flags, Clear by Reading const uint32_t REG_INT_EN = 0x3020AC; // 1 0x00 r/w Global Interrupt Enable const uint32_t REG_INT_MASK = 0x3020B0; // 8 0xFF r/w Interrupt Enable Mask const uint32_t REG_PLAYBACK_START = 0x3020B4; // 20 0x00000 r/w Audio Playback RAM Start Address const uint32_t REG_PLAYBACK_LENGTH = 0x3020B8; // 20 0x00000 r/w Audio Playback Sample Length (Bytes) const uint32_t REG_PLAYBACK_READPTR = 0x3020BC; // 20 - r Audio Playback Read Pointer const uint32_t REG_PLAYBACK_FREQ = 0x3020C0; // 16 0x1F40 r/w Audio Playback Frequency (Hz) const uint32_t REG_PLAYBACK_FORMAT = 0x3020C4; // 2 0x00 r/w Audio Playback Format const uint32_t REG_PLAYBACK_LOOP = 0x3020C8; // 1 0x00 r/w Audio Playback Loop Enable const uint32_t REG_PLAYBACK_PLAY = 0x3020CC; // 1 0x00 r Audio Start Playback const uint32_t REG_PWM_HZ = 0x3020D0; // 14 0x00FA r/w Backlight PWM Frequency (Hz) const uint32_t REG_PWM_DUTY = 0x3020D4; // 8 0x80 r/w Backlight PWM Duty Cycle: 0 = 0%, 128 = 100% const uint32_t REG_MACRO_0 = 0x3020D8; // 32 0x00000000 r/w Display List Macro Command 0 const uint32_t REG_MACRO_1 = 0x3020DC; // 32 0x00000000 r/w Display List Macro Command 1 // Reserved Addr 0x3020E0 // Reserved Addr 0x3020E4 // Reserved Addr 0x3020E8 // Reserved Addr 0x3020EC // Reserved Addr 0x3020F0 // Reserved Addr 0x3020F4 const uint32_t REG_CMD_READ = 0x3020F8; // 12 0x000 r/w Command Buffer Read Pointer const uint32_t REG_CMD_WRITE = 0x3020FC; // 12 0x000 r/w Command Buffer Write Pointer const uint32_t REG_CMD_DL = 0x302100; // 13 0x0000 r/w Command Display List Offset const uint32_t REG_TOUCH_MODE = 0x302104; // 2 0x03 r/w Touch-Screen Sampling Mode const uint32_t REG_TOUCH_ADC_MODE = 0x302108; // 1 0x01 r/w Select Single Ended or Differential Sampling const uint32_t REG_TOUCH_CHARGE = 0x30210C; // 16 0x1770 r/w Touch Screen Charge Time, n x 6 Clocks const uint32_t REG_TOUCH_SETTLE = 0x302110; // 4 0x03 r/w Touch-Screen Settle Time, n x 6 Clocks const uint32_t REG_TOUCH_OVERSAMPLE = 0x302114; // 4 0x07 r/w Touch-Screen Oversample Factor const uint32_t REG_TOUCH_RZTHRESH = 0x302118; // 16 0xFFFF r/w Touch-Screen Resistance Threshold const uint32_t REG_TOUCH_RAW_XY = 0x30211C; // 32 - r Touch-Screen Raw (x-MSB16; y-LSB16) const uint32_t REG_TOUCH_RZ = 0x302120; // 16 - r Touch-Screen Resistance const uint32_t REG_TOUCH_SCREEN_XY = 0x302124; // 32 - r Touch-Screen Screen (x-MSB16; y-LSB16) const uint32_t REG_TOUCH_TAG_XY = 0x302128; // 32 - r Touch-Screen Tag 0 Lookup (x-MSB16; y-LSB16) const uint32_t REG_TOUCH_TAG = 0x30212C; // 8 - r Touch-Screen Tag 0 Result const uint32_t REG_TOUCH_TAG1_XY = 0x302130; // 32 - r Touch-Screen Tag 1 Lookup const uint32_t REG_TOUCH_TAG1 = 0x302134; // 8 - r Touch-Screen Tag 1 Result const uint32_t REG_TOUCH_TAG2_XY = 0x302138; // 32 - r Touch-Screen Tag 2 Lookup const uint32_t REG_TOUCH_TAG2 = 0x30213C; // 8 - r Touch-Screen Tag 2 Result const uint32_t REG_TOUCH_TAG3_XY = 0x302140; // 32 - r Touch-Screen Tag 3 Lookup const uint32_t REG_TOUCH_TAG3 = 0x302144; // 8 - r Touch-Screen Tag 3 Result const uint32_t REG_TOUCH_TAG4_XY = 0x302148; // 32 - r Touch-Screen Tag 4 Lookup const uint32_t REG_TOUCH_TAG4 = 0x30214C; // 8 - r Touch-Screen Tag 4 Result const uint32_t REG_TOUCH_TRANSFORM_A = 0x302150; // 32 0x00010000 r/w Touch-Screen Transform Coefficient A (s15.16) const uint32_t REG_TOUCH_TRANSFORM_B = 0x302154; // 32 0x00000000 r/w Touch-Screen Transform Coefficient B (s15.16) const uint32_t REG_TOUCH_TRANSFORM_C = 0x302158; // 32 0x00000000 r/w Touch-Screen Transform Coefficient C (s15.16) const uint32_t REG_TOUCH_TRANSFORM_D = 0x30215C; // 32 0x00000000 r/w Touch-Screen Transform Coefficient D (s15.16) const uint32_t REG_TOUCH_TRANSFORM_E = 0x302160; // 32 0x00010000 r/w Touch-Screen Transform Coefficient E (s15.16) const uint32_t REG_TOUCH_TRANSFORM_F = 0x302164; // 32 0x00000000 r/w Touch-Screen Transform Coefficient F (s15.16) const uint32_t REG_TOUCH_CONFIG = 0x302168; // 16 0x8381 r/w Touch Configuration const uint32_t REG_CTOUCH_TOUCH4_X = 0x30216C; // 16 - r Extended Mode Touch Screen // Reserved Addresses 0x302170 const uint32_t REG_BIST_EN = 0x302174; // 1 0 r/w BIST Memory Mapping Enable // Reserved Addr 0x302178 // Reserved Addr 0x30217C const uint32_t REG_TRIM = 0x302180; // 8 0 r/w Internal Clock Trimming const uint32_t REG_ANA_COMP = 0x302184; // 8 0 r/w Analog Control Register const uint32_t REG_SPI_WIDTH = 0x302188; // 3 0 r/w QSPI Bus Width Setting const uint32_t REG_TOUCH_DIRECT_XY = 0x30218C; // 32 - r Touch-Screen Direct Conversions XY (x-MSB16; y-LSB16) const uint32_t REG_TOUCH_DIRECT_Z1Z2 = 0x302190; // 32 - r Touch-Screen Direct Conversions Z (z1-MSB16; z2-LSB16) // Reserved Addresses 0x302194 - 0x302560 const uint32_t REG_DATESTAMP = 0x320564; // 128 - r Stamp Date Code const uint32_t REG_CMDB_SPACE = 0x302574; // 12 0xFFC r/w Command DL Space Available const uint32_t REG_CMDB_WRITE = 0x302578; // 32 0 w Command DL Write } // OPTIONS namespace FTDI { const uint16_t OPT_3D = 0x0000; const uint16_t OPT_RGB565 = 0x0000; const uint16_t OPT_MONO = 0x0001; const uint16_t OPT_NODL = 0x0002; const uint16_t OPT_FLAT = 0x0100; const uint16_t OPT_SIGNED = 0x0100; const uint16_t OPT_CENTERX = 0x0200; const uint16_t OPT_CENTERY = 0x0400; const uint16_t OPT_CENTER = (OPT_CENTERX | OPT_CENTERY); const uint16_t OPT_RIGHTX = 0x0800; const uint16_t OPT_NOBACK = 0x1000; const uint16_t OPT_NOTICKS = 0x2000; const uint16_t OPT_NOHM = 0x4000; const uint16_t OPT_NOPOINTER = 0x4000; const uint16_t OPT_NOSECS = 0x8000; const uint16_t OPT_NOHANDS = (OPT_NOPOINTER | OPT_NOSECS); } // GPIO Bits namespace FT800 { const uint8_t GPIO_GP0 = 1 << 0; const uint8_t GPIO_GP1 = 1 << 1; const uint8_t GPIO_DISP = 1 << 7; } namespace FT810 { const uint16_t GPIOX_GP0 = 1 << 0; const uint16_t GPIOX_GP1 = 1 << 1; const uint16_t GPIOX_DISP = 1 << 15; } // GLOBAL LCD REGISTER SET VALUES FOR WQVGA 480x272 DISPLAY /* * Settings for the Aleph Objects Color LCD User Interface 4.3" (Prototype) 480x272, SPI, FT810 (HDA430T-6S-WV) * Haoyu Electronics, 4.3" Graphical LCD Touchscreen, 480x272, SPI, FT800 (FT800CB-HY43B) * Haoyu Electronics, 5" Graphical LCD Touchscreen, 480x272, SPI, FT800 (FT800CB-HY50B) * 4D Systems, 4.3" Embedded SPI Display 480x272, SPI, FT800 (4DLCD-FT843) * * http://www.hotmcu.com/43-graphical-lcd-touchscreen-480x272-spi-ft800-p-111.html?cPath=6_16 * http://www.hotmcu.com/5-graphical-lcd-touchscreen-480x272-spi-ft800-p-124.html?cPath=6_16 * http://www.4dsystems.com.au/product/4DLCD_FT843/ * * Datasheet: * * http://www.hantronix.com/files/data/1278363262430-3.pdf * http://www.haoyuelectronics.com/Attachment/HY43-LCD/LCD%20DataSheet.pdf * http://www.haoyuelectronics.com/Attachment/HY5-LCD-HD/KD50G21-40NT-A1.pdf * http://www.4dsystems.com.au/productpages/4DLCD-FT843/downloads/FT843-4.3-Display_datasheet_R_1_2.pdf * */ namespace FTDI_LCD_480x272 { const int Vsync0 = 0; const int Vsync1 = 10; const int Voffset = 12; const int Vcycle = 292; const int Hsync0 = 0; const int Hsync1 = 41; const int Hoffset = 43; const int Hcycle = 548; const int Hsize = 480; const int Vsize = 272; const int Pclkpol = 1; const int Swizzle = 0; const int Pclk = 5; const int Clksel = 0x44; #if defined(LCD_PORTRAIT) const uint32_t default_transform_a = 0xFFFFFEA3; const uint32_t default_transform_b = 0xFFFFB05D; const uint32_t default_transform_c = 0x012C5254; const uint32_t default_transform_d = 0xFFFF8303; const uint32_t default_transform_e = 0xFFFFFDF8; const uint32_t default_transform_f = 0x01F32984; #else const uint32_t default_transform_a = 0x00008100; const uint32_t default_transform_b = 0x00000000; const uint32_t default_transform_c = 0xFFF18000; const uint32_t default_transform_d = 0x00000000; const uint32_t default_transform_e = 0xFFFFB100; const uint32_t default_transform_f = 0x0120D000; #endif } // GLOBAL LCD REGISTER SET VALUES FOR 800x480 DISPLAY /* * Settings for the Haoyu Electronics, 5" Graphical LCD Touchscreen, 800x480, SPI, FT810 * * http://www.hotmcu.com/5-graphical-lcd-touchscreen-800x480-spi-ft810-p-286.html * * Datasheet: * * http://www.haoyuelectronics.com/Attachment/HY5-LCD-HD/KD50G21-40NT-A1.pdf * */ namespace FTDI_LCD_800x480 { const int Vsync0 = 0; const int Vsync1 = 13; const int Voffset = 16; const int Vcycle = 525; const int Hsync0 = 0; const int Hsync1 = 40; const int Hoffset = 88; const int Hcycle = 928; const int Hsize = 800; const int Vsize = 480; const int Pclkpol = 1; const int Swizzle = 0; const int Pclk = 2; const int Clksel = 0x45; const uint32_t default_transform_a = 0x0000012B; const uint32_t default_transform_b = 0xFFFF7BFC; const uint32_t default_transform_c = 0x01F2443A; const uint32_t default_transform_d = 0xFFFF25ED; const uint32_t default_transform_e = 0x000000F9; const uint32_t default_transform_f = 0x033F61DA; } // HOST COMMANDS namespace FTDI { const uint8_t ACTIVE = 0x00; const uint8_t STANDBY = 0x41; const uint8_t SLEEP = 0x42; const uint8_t PWRDOWN = 0x50; const uint8_t CLKEXT = 0x44; const uint8_t CLKINT = 0x48; const uint8_t CORESET = 0x68; } namespace FT800 { const uint8_t CLK48M = 0x62; const uint8_t CLK36M = 0x61; } namespace FT810 { const uint8_t CLKSEL = 0x61; } // DISPLAY LIST COMMANDS namespace FTDI { const uint32_t ALPHA_FUNC = 0x09000000; const uint32_t ALPHA_FUNC_NEVER = 0x00000000; const uint32_t ALPHA_FUNC_LESS = 0x00010000; const uint32_t ALPHA_FUNC_LEQUAL = 0x00020000; const uint32_t ALPHA_FUNC_GREATER = 0x00030000; const uint32_t ALPHA_FUNC_GEQUAL = 0x00040000; const uint32_t ALPHA_FUNC_EQUAL = 0x00050000; const uint32_t ALPHA_FUNC_NOTEQUAL = 0x00060000; const uint32_t ALPHA_FUNC_ALWAYS = 0x00070000; const uint32_t BEGIN = 0x1F000000; const uint32_t BEGIN_BITMAPS = 0x00000001; const uint32_t BEGIN_POINTS = 0x00000002; const uint32_t BEGIN_LINES = 0x00000003; const uint32_t BEGIN_LINE_STRIP = 0x00000004; const uint32_t BEGIN_STRIP_R = 0x00000005; const uint32_t BEGIN_STRIP_L = 0x00000006; const uint32_t BEGIN_STRIP_A = 0x00000007; const uint32_t BEGIN_STRIP_B = 0x00000008; const uint32_t BEGIN_STRIP_RECTS = 0x00000009; const uint32_t BITMAP_HANDLE = 0x05000000; const uint32_t BITMAP_LAYOUT = 0x07000000; const uint32_t BITMAP_LAYOUT_ARGB1555 = 0x00000000; const uint32_t BITMAP_LAYOUT_L1 = 0x00080000; const uint32_t BITMAP_LAYOUT_L4 = 0x00100000; const uint32_t BITMAP_LAYOUT_L8 = 0x00180000; const uint32_t BITMAP_LAYOUT_RGB332 = 0x00200000; const uint32_t BITMAP_LAYOUT_ARGB2 = 0x00280000; const uint32_t BITMAP_LAYOUT_ARGB4 = 0x00300000; const uint32_t BITMAP_LAYOUT_RGB565 = 0x00380000; const uint32_t BITMAP_LAYOUT_PALETTED = 0x00400000; const uint32_t BITMAP_LAYOUT_TEXT8X8 = 0x00480000; const uint32_t BITMAP_LAYOUT_TEXTVGA = 0x00500000; const uint32_t BITMAP_LAYOUT_BARGRAPH = 0x00580000; const uint8_t ARGB1555 = 0x00; const uint8_t L1 = 0x01; const uint8_t L4 = 0x02; const uint8_t L8 = 0x03; const uint8_t RGB332 = 0x04; const uint8_t ARGB2 = 0x05; const uint8_t ARGB4 = 0x06; const uint8_t RGB565 = 0x07; const uint8_t PALETTED = 0x08; const uint8_t TEXT8X8 = 0x09; const uint8_t TEXTVGA = 0x0A; const uint8_t BARGRAPH = 0x0B; const uint32_t BITMAP_SIZE = 0x08000000; const uint8_t NEAREST = 0x00; const uint8_t BILINEAR = 0x01; const uint8_t BORDER = 0x00; const uint8_t REPEAT = 0x01; const uint32_t BITMAP_SOURCE = 0x01000000; const uint32_t BITMAP_TRANSFORM_A = 0x15000000; const uint32_t BITMAP_TRANSFORM_B = 0x16000000; const uint32_t BITMAP_TRANSFORM_C = 0x17000000; const uint32_t BITMAP_TRANSFORM_D = 0x18000000; const uint32_t BITMAP_TRANSFORM_E = 0x19000000; const uint32_t BITMAP_TRANSFORM_F = 0x1A000000; const uint32_t BLEND_FUNC = 0x0B000000; const uint32_t BLEND_FUNC_SRC_ZERO = 0x00000000; const uint32_t BLEND_FUNC_SRC_ONE = 0x00000008; const uint32_t BLEND_FUNC_SRC_SRC_ALPHA = 0x00000010; const uint32_t BLEND_FUNC_SRC_DST_ALPHA = 0x00000018; const uint32_t BLEND_FUNC_SRC_ONE_MINUS_SRC_ALPHA = 0x00000020; const uint32_t BLEND_FUNC_SRC_ONE_MINUS_DST_ALPHA = 0x00000028; const uint32_t BLEND_FUNC_DST_ZERO = 0x00000000; const uint32_t BLEND_FUNC_DST_ONE = 0x00000001; const uint32_t BLEND_FUNC_DST_SRC_ALPHA = 0x00000002; const uint32_t BLEND_FUNC_DST_DST_ALPHA = 0x00000003; const uint32_t BLEND_FUNC_DST_ONE_MINUS_SRC_ALPHA = 0x00000004; const uint32_t BLEND_FUNC_DST_ONE_MINUS_DST_ALPHA = 0x00000005; const uint32_t CALL = 0x1D000000; const uint32_t CELL = 0x06000000; const uint32_t CLEAR = 0x26000000; const uint32_t CLEAR_COLOR_BUFFER = 0x00000004; const uint32_t CLEAR_STENCIL_BUFFER = 0x00000002; const uint32_t CLEAR_TAG_BUFFER = 0x00000001; const uint32_t CLEAR_COLOR_A = 0x0F000000; const uint32_t CLEAR_COLOR_RGB = 0x02000000; const uint32_t CLEAR_STENCIL = 0x11000000; const uint32_t CLEAR_TAG = 0x12000000; const uint32_t COLOR_A = 0x10000000; const uint32_t COLOR_MASK = 0x20000000; const uint32_t COLOR_MASK_RED = 0x00000008; const uint32_t COLOR_MASK_GRN = 0x00000004; const uint32_t COLOR_MASK_BLU = 0x00000002; const uint32_t COLOR_MASK_ALPHA = 0x00000001; const uint32_t COLOR_RGB = 0x04000000; const uint32_t DL_DISPLAY = 0x00000000; const uint32_t END = 0x21000000; const uint32_t JUMP = 0x1E000000; const uint32_t LINE_WIDTH = 0x0E000000; const uint32_t MACRO = 0x25000000; const uint32_t POINT_SIZE = 0x0D000000; const uint32_t RESTORE_CONTEXT = 0x23000000; const uint32_t RETURN = 0x24000000; const uint32_t SAVE_CONTEXT = 0x22000000; const uint32_t SCISSOR_SIZE = 0x1C000000; const uint32_t SCISSOR_XY = 0x1B000000; const uint32_t STENCIL_FUNC = 0x0A000000; const uint32_t STENCIL_FUNC_NEVER = 0x00000000; const uint32_t STENCIL_FUNC_LESS = 0x00010000; const uint32_t STENCIL_FUNC_LEQUAL = 0x00020000; const uint32_t STENCIL_FUNC_GREATER = 0x00030000; const uint32_t STENCIL_FUNC_GEQUAL = 0x00040000; const uint32_t STENCIL_FUNC_EQUAL = 0x00050000; const uint32_t STENCIL_FUNC_NOTEQUAL = 0x00060000; const uint32_t STENCIL_FUNC_ALWAYS = 0x00070000; const uint32_t STENCIL_MASK = 0x13000000; const uint32_t STENCIL_OP = 0x0C000000; const uint32_t STENCIL_OP_PASS_ZERO = 0x00000000; const uint32_t STENCIL_OP_PASS_KEEP = 0x00000001; const uint32_t STENCIL_OP_PASS_REPLACE = 0x00000002; const uint32_t STENCIL_OP_PASS_INCR = 0x00000003; const uint32_t STENCIL_OP_PASS_DECR = 0x00000004; const uint32_t STENCIL_OP_PASS_INVERT = 0x00000005; const uint32_t STENCIL_OP_FAIL_ZERO = 0x00000000; const uint32_t STENCIL_OP_FAIL_KEEP = 0x00000008; const uint32_t STENCIL_OP_FAIL_REPLACE = 0x00000010; const uint32_t STENCIL_OP_FAIL_INCR = 0x00000018; const uint32_t STENCIL_OP_FAIL_DECR = 0x00000020; const uint32_t STENCIL_OP_FAIL_INVERT = 0x00000028; const uint32_t TAG = 0x03000000; const uint32_t TAG_MASK = 0x14000000; const uint32_t VERTEX2F = 0x40000000; const uint32_t VERTEX2II = 0x80000000; } // CO-PROCESSOR ENGINE COMMANDS namespace FTDI { const uint32_t CMD_DLSTART = 0xFFFFFF00; const uint32_t CMD_SWAP = 0xFFFFFF01; const uint32_t CMD_COLDSTART = 0xFFFFFF32; const uint32_t CMD_INTERRUPT = 0xFFFFFF02; const uint32_t CMD_APPEND = 0xFFFFFF1E; const uint32_t CMD_REGREAD = 0xFFFFFF19; const uint32_t CMD_MEMWRITE = 0xFFFFFF1A; const uint32_t CMD_INFLATE = 0xFFFFFF22; const uint32_t CMD_LOADIMAGE = 0xFFFFFF24; const uint32_t CMD_MEMCRC = 0xFFFFFF18; const uint32_t CMD_MEMZERO = 0xFFFFFF1C; const uint32_t CMD_MEMSET = 0xFFFFFF1B; const uint32_t CMD_MEMCPY = 0xFFFFFF1D; const uint32_t CMD_BUTTON = 0xFFFFFF0D; const uint32_t CMD_CLOCK = 0xFFFFFF14; const uint32_t CMD_FGCOLOR = 0xFFFFFF0A; const uint32_t CMD_BGCOLOR = 0xFFFFFF09; const uint32_t CMD_GRADCOLOR = 0xFFFFFF34; const uint32_t CMD_GAUGE = 0xFFFFFF13; const uint32_t CMD_GRADIENT = 0xFFFFFF0B; const uint32_t CMD_KEYS = 0xFFFFFF0E; const uint32_t CMD_PROGRESS = 0xFFFFFF0F; const uint32_t CMD_SCROLLBAR = 0xFFFFFF11; const uint32_t CMD_SLIDER = 0xFFFFFF10; const uint32_t CMD_DIAL = 0xFFFFFF2D; const uint32_t CMD_TOGGLE = 0xFFFFFF12; const uint32_t CMD_TEXT = 0xFFFFFF0C; const uint32_t CMD_NUMBER = 0xFFFFFF2E; const uint32_t CMD_LOADIDENTITY = 0xFFFFFF26; const uint32_t CMD_SETMATRIX = 0xFFFFFF2A; const uint32_t CMD_GETMATRIX = 0xFFFFFF33; const uint32_t CMD_GETPTR = 0xFFFFFF23; const uint32_t CMD_GETPROPS = 0xFFFFFF25; const uint32_t CMD_SCALE = 0xFFFFFF28; const uint32_t CMD_ROTATE = 0xFFFFFF29; const uint32_t CMD_TRANSLATE = 0xFFFFFF27; const uint32_t CMD_CALIBRATE = 0xFFFFFF15; const uint32_t CMD_SPINNER = 0xFFFFFF16; const uint32_t CMD_SCREENSAVER = 0xFFFFFF2F; const uint32_t CMD_SKETCH = 0xFFFFFF30; const uint32_t CMD_STOP = 0xFFFFFF17; const uint32_t CMD_SETFONT = 0xFFFFFF2B; const uint32_t CMD_TRACK = 0xFFFFFF2C; const uint32_t CMD_SNAPSHOT = 0xFFFFFF1F; const uint32_t CMD_LOGO = 0xFFFFFF31; } namespace FTDI { enum effect_t { SILENCE = 0x00, SQUARE_WAVE = 0x01, SINE_WAVE = 0x02, SAWTOOTH_WAVE = 0x03, TRIANGLE_WAVE = 0x04, BEEPING = 0x05, ALARM = 0x06, WARBLE = 0x07, CAROUSEL = 0x08, SHORT_PIPS_1 = 0x10, SHORT_PIPS_2 = 0x11, SHORT_PIPS_3 = 0x12, SHORT_PIPS_4 = 0x13, SHORT_PIPS_5 = 0x14, SHORT_PIPS_6 = 0x15, SHORT_PIPS_7 = 0x16, SHORT_PIPS_8 = 0x17, SHORT_PIPS_9 = 0x18, SHORT_PIPS_10 = 0x19, SHORT_PIPS_11 = 0x1A, SHORT_PIPS_12 = 0x1B, SHORT_PIPS_13 = 0x1C, SHORT_PIPS_14 = 0x1D, SHORT_PIPS_15 = 0x1E, SHORT_PIPS_16 = 0x1F, DTMF_POUND = 0x23, DTMF_STAR = 0x2C, DTMF_0 = 0x30, DTMF_1 = 0x31, DTMF_2 = 0x32, DTMF_3 = 0x33, DTMF_4 = 0x34, DTMF_5 = 0x35, DTMF_6 = 0x36, DTMF_7 = 0x37, DTMF_8 = 0x38, DTMF_9 = 0x39, HARP = 0x40, XYLOPHONE = 0x41, TUBA = 0x42, GLOCKENSPIEL = 0x43, ORGAN = 0x44, TRUMPET = 0x45, PIANO = 0x46, CHIMES = 0x47, MUSIC_BOX = 0x48, BELL = 0x49, CLICK = 0x50, SWITCH = 0x51, COWBELL = 0x52, NOTCH = 0x53, HIHAT = 0x54, KICKDRUM = 0x55, POP = 0x56, CLACK = 0x57, CHACK = 0x58, MUTE = 0x60, UNMUTE = 0x61 }; enum note_t { END_SONG = 0x00, NOTE_C3 = 0x32, NOTE_D3 = 0x33, NOTE_D3S = 0x34, NOTE_F3 = 0x35, NOTE_F3S = 0x36, NOTE_G3 = 0x37, NOTE_G3S = 0x38, NOTE_A3 = 0x39, NOTE_A3S = 0x3A, NOTE_B3 = 0x3B, NOTE_C4 = 0x3C, NOTE_C4S = 0x3D, NOTE_D4 = 0x3E, NOTE_D4S = 0x3F, NOTE_E4 = 0x40, NOTE_F4 = 0x41, NOTE_F4S = 0x42, NOTE_G4 = 0x43, NOTE_G4S = 0x44 }; } // If LCD_IS_FT800 is defined, then copy the FT800 namespace into the FTDI namespace // If LCD_IS_FT810 is defined, then copy the FT810 namespace into the FTDI namespace #if defined(LCD_IS_FT800) namespace FTDI { using namespace FT800; } #elif defined(LCD_IS_FT810) namespace FTDI { using namespace FT810; } #endif #endif // _AO_FT810_H