Library for FTDI FT800, Support up to 512 x 512 pixel resolution.

Dependents:   FT800-Demo-Sliders FT800-Clock FT800-Demo-Bitmap

Hardware

https://os.mbed.com/media/uploads/nz/display-43.jpg

Info

Committer:
nz
Date:
Wed Dec 30 17:12:59 2020 +0000
Revision:
5:b28ce8616b41
Parent:
4:5bcc69cb157a
update

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nz 0:b699e59d925b 1 /* mbed Library for FTDI FT800 */
nz 0:b699e59d925b 2
nz 0:b699e59d925b 3 #include "FT800.h"
nz 0:b699e59d925b 4
nz 0:b699e59d925b 5 FT800::FT800(PinName mosi, PinName miso, PinName sck,
nz 0:b699e59d925b 6 PinName ss, PinName intr, PinName pd)
nz 0:b699e59d925b 7 :
nz 0:b699e59d925b 8 _spi(mosi, miso, sck),
nz 0:b699e59d925b 9 _ss(ss),
nz 0:b699e59d925b 10 _pd(pd),
nz 0:b699e59d925b 11 _f800_isr(intr) // _f800_isr(InterruptIn(intr)) !!!!!!!!!!!
nz 0:b699e59d925b 12 {
nz 0:b699e59d925b 13 _spi.format(8,0); // 8 bit spi mode 0
nz 0:b699e59d925b 14 _spi.frequency(10000000); // start with 10 MHz SPI clock
nz 0:b699e59d925b 15 _ss = 1; // cs high
nz 0:b699e59d925b 16 _pd = 1; // PD high
nz 0:b699e59d925b 17 }
nz 0:b699e59d925b 18
nz 0:b699e59d925b 19 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 20 // Increment FIFO address offset
nz 0:b699e59d925b 21 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 22 void FT800::CMD_Offset_Inc(uint8_t command_size)
nz 0:b699e59d925b 23 {
nz 0:b699e59d925b 24 CMD_Offset += command_size;
nz 0:b699e59d925b 25 CMD_Offset %= 4096;
nz 0:b699e59d925b 26 }
nz 0:b699e59d925b 27
nz 0:b699e59d925b 28 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 29 // Set FIFO address offset
nz 0:b699e59d925b 30 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 31 void FT800::set_CMD_Offset(uint16_t offset)
nz 0:b699e59d925b 32 {
nz 0:b699e59d925b 33 CMD_Offset = offset;
nz 0:b699e59d925b 34 }
nz 0:b699e59d925b 35
nz 0:b699e59d925b 36 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 37 // Get FIFO address offset
nz 0:b699e59d925b 38 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 39 uint16_t FT800::get_CMD_Offset(void)
nz 0:b699e59d925b 40 {
nz 0:b699e59d925b 41 return CMD_Offset;
nz 0:b699e59d925b 42 }
nz 0:b699e59d925b 43
nz 0:b699e59d925b 44 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 45 // Write address. Most significant byte is sent first. mode: ADREAD, ADWRITE
nz 0:b699e59d925b 46 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 47 void FT800::WriteAddress(uint32_t addr, uint8_t mode)
nz 0:b699e59d925b 48 {
nz 0:b699e59d925b 49 uint8_t byte = 0;
nz 0:b699e59d925b 50
nz 0:b699e59d925b 51 byte = ((addr & 0x00FF0000) >> 16); // Mask the first byte to send
nz 0:b699e59d925b 52 byte = ((byte & 0x3F) | mode); // the MSBs are forced to 00 for READ, 10 for WRITE, 01 CONFIG
nz 0:b699e59d925b 53 _spi.write(byte); // Call the low-level SPI transmit routine
nz 0:b699e59d925b 54
nz 0:b699e59d925b 55 byte = ((addr & 0x0000FF00) >> 8); // Mask the next byte to be sent
nz 0:b699e59d925b 56 _spi.write(byte);
nz 0:b699e59d925b 57
nz 0:b699e59d925b 58 byte = (addr & 0x000000FF); // Mask the next byte to be sent
nz 0:b699e59d925b 59 _spi.write(byte);
nz 0:b699e59d925b 60
nz 0:b699e59d925b 61 if(mode==ADREAD) _spi.write(0x00);
nz 0:b699e59d925b 62 }
nz 0:b699e59d925b 63
nz 0:b699e59d925b 64 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 65 // Read 8 bits (BYTE) from address
nz 0:b699e59d925b 66 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 67 uint8_t FT800::Read08(uint32_t addr)
nz 0:b699e59d925b 68 {
nz 0:b699e59d925b 69 uint8_t byte = 0;
nz 0:b699e59d925b 70 _ss = 0; // SPI: active
nz 0:b699e59d925b 71 WriteAddress(addr, ADREAD);
nz 0:b699e59d925b 72 byte = _spi.write(0);
nz 0:b699e59d925b 73 _ss = 1; // SPI: inactive
nz 0:b699e59d925b 74 return byte;
nz 0:b699e59d925b 75 }
nz 0:b699e59d925b 76
nz 0:b699e59d925b 77 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 78 // Read 16 bits (WORD) from address
nz 0:b699e59d925b 79 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 80 uint16_t FT800::Read16(uint32_t addr)
nz 0:b699e59d925b 81 {
nz 0:b699e59d925b 82 uint16_t byte = 0;
nz 0:b699e59d925b 83 uint16_t word = 0; //uint16_t data;
nz 0:b699e59d925b 84 _ss = 0;
nz 0:b699e59d925b 85 WriteAddress(addr, ADREAD); //TransferStart(addr, ADREAD);
nz 0:b699e59d925b 86 byte = _spi.write(0);
nz 0:b699e59d925b 87 word |= byte;
nz 0:b699e59d925b 88 byte = _spi.write(0);
nz 0:b699e59d925b 89 word |= (byte<<8); //data = Transfer16(0);
nz 0:b699e59d925b 90 _ss = 1; //TransferEnd( );
nz 0:b699e59d925b 91 return word;
nz 0:b699e59d925b 92 }
nz 0:b699e59d925b 93
nz 0:b699e59d925b 94 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 95 // Read 32 bits (DWORD) from address
nz 0:b699e59d925b 96 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 97 uint32_t FT800::Read32(uint32_t addr)
nz 0:b699e59d925b 98 {
nz 0:b699e59d925b 99 uint32_t byte = 0;
nz 0:b699e59d925b 100 uint32_t dword= 0; //uint32_t data;
nz 0:b699e59d925b 101 _ss = 0;
nz 0:b699e59d925b 102 WriteAddress(addr, ADREAD); //TransferStart(addr, ADREAD);
nz 0:b699e59d925b 103 byte = _spi.write(0);
nz 0:b699e59d925b 104 dword |= byte;
nz 0:b699e59d925b 105 byte = _spi.write(0);
nz 0:b699e59d925b 106 dword |= (byte<<8);
nz 0:b699e59d925b 107 byte = _spi.write(0);
nz 0:b699e59d925b 108 dword |= (byte<<16);
nz 0:b699e59d925b 109 byte = _spi.write(0);
nz 0:b699e59d925b 110 dword |= (byte<<24);
nz 0:b699e59d925b 111 _ss = 1; //TransferEnd( );
nz 0:b699e59d925b 112 return dword;
nz 0:b699e59d925b 113 }
nz 0:b699e59d925b 114
nz 0:b699e59d925b 115 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 116 // Write 8 bits (BYTE) data at address
nz 0:b699e59d925b 117 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 118 void FT800::Write08(uint32_t addr, uint8_t data)
nz 0:b699e59d925b 119 {
nz 0:b699e59d925b 120 if(addr==RAM_CMD) // if writing to FIFO
nz 0:b699e59d925b 121 {
nz 0:b699e59d925b 122 addr += CMD_Offset;
nz 0:b699e59d925b 123 CMD_Offset_Inc(1); // Move the CMD Offset
nz 0:b699e59d925b 124 }
nz 0:b699e59d925b 125 _ss = 0;
nz 0:b699e59d925b 126 WriteAddress(addr, ADWRITE); //TransferStart(addr, ADWRITE);
nz 0:b699e59d925b 127 _spi.write(data); //Transfer08(data);
nz 0:b699e59d925b 128 _ss = 1; //TransferEnd( );
nz 0:b699e59d925b 129 }
nz 0:b699e59d925b 130
nz 0:b699e59d925b 131 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 132 // Write 16 bits (WORD) data at address
nz 0:b699e59d925b 133 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 134 void FT800::Write16(uint32_t addr, uint16_t data)
nz 0:b699e59d925b 135 {
nz 0:b699e59d925b 136 if(addr==RAM_CMD) // if writing to FIFO
nz 0:b699e59d925b 137 {
nz 0:b699e59d925b 138 addr += CMD_Offset;
nz 0:b699e59d925b 139 CMD_Offset_Inc(2); // Move the CMD Offset
nz 0:b699e59d925b 140 }
nz 0:b699e59d925b 141 _ss = 0;
nz 0:b699e59d925b 142 WriteAddress(addr, ADWRITE); //TransferStart(addr, ADWRITE);
nz 0:b699e59d925b 143 _spi.write( data & 0x00FF);
nz 0:b699e59d925b 144 _spi.write((data & 0xFF00)>>8); //Transfer16(data);
nz 0:b699e59d925b 145 _ss = 1; //TransferEnd( );
nz 0:b699e59d925b 146 }
nz 0:b699e59d925b 147
nz 0:b699e59d925b 148 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 149 // Write 32 bits (DWORD) data at address
nz 0:b699e59d925b 150 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 151 void FT800::Write32(uint32_t addr, uint32_t data)
nz 0:b699e59d925b 152 {
nz 0:b699e59d925b 153 if(addr==RAM_CMD) // if writing to FIFO
nz 0:b699e59d925b 154 {
nz 0:b699e59d925b 155 addr += CMD_Offset;
nz 0:b699e59d925b 156 CMD_Offset_Inc(4); // Move the CMD Offset
nz 0:b699e59d925b 157 }
nz 0:b699e59d925b 158 _ss = 0;
nz 0:b699e59d925b 159 WriteAddress(addr, ADWRITE); //TransferStart(addr, ADWRITE);
nz 0:b699e59d925b 160 _spi.write( data & 0x000000FF);
nz 0:b699e59d925b 161 _spi.write((data & 0x0000FF00)>>8);
nz 0:b699e59d925b 162 _spi.write((data & 0x00FF0000)>>16);
nz 0:b699e59d925b 163 _spi.write((data & 0xFF000000)>>24); //Transfer32(data);
nz 0:b699e59d925b 164 _ss = 1; //TransferEnd( );
nz 0:b699e59d925b 165 }
nz 0:b699e59d925b 166
nz 0:b699e59d925b 167 void FT800::HostCommand(uint8_t cmd)
nz 0:b699e59d925b 168 {
nz 0:b699e59d925b 169 _ss = 0;
nz 0:b699e59d925b 170 _spi.write(cmd);
nz 0:b699e59d925b 171 _spi.write(0);
nz 0:b699e59d925b 172 _spi.write(0);
nz 0:b699e59d925b 173 _ss = 1;
nz 0:b699e59d925b 174 }
nz 0:b699e59d925b 175
nz 0:b699e59d925b 176 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 177 // Wait ms
nz 0:b699e59d925b 178 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 179 void FT800::Sleep(uint16_t ms)
nz 0:b699e59d925b 180 {
nz 0:b699e59d925b 181 thread_sleep_for(ms); // C, ThisThread::sleep_for(ms); C++ //old wait_ms(ms);
nz 0:b699e59d925b 182 }
nz 0:b699e59d925b 183
nz 5:b28ce8616b41 184
nz 5:b28ce8616b41 185 //------------------------------MEMORY RAM_G-----------------------------------------
nz 5:b28ce8616b41 186 // Write zero to a block of memory
nz 5:b28ce8616b41 187 //-----------------------------------------------------------------------------------
nz 5:b28ce8616b41 188 void FT800::writeMemZero(uint32_t ptr, uint32_t numb)
nz 5:b28ce8616b41 189 {
nz 5:b28ce8616b41 190 Write32(RAM_CMD, CMD_MEMZERO);
nz 5:b28ce8616b41 191 Write32(RAM_CMD, ptr);
nz 5:b28ce8616b41 192 Write32(RAM_CMD, numb);
nz 5:b28ce8616b41 193 }
nz 5:b28ce8616b41 194
nz 5:b28ce8616b41 195 //-----------------------------------------------------------------------------------
nz 5:b28ce8616b41 196 // Write value to a block of memory
nz 5:b28ce8616b41 197 //-----------------------------------------------------------------------------------
nz 5:b28ce8616b41 198 void FT800::writeMemSet(uint32_t ptr, uint32_t value, uint32_t numb)
nz 5:b28ce8616b41 199 {
nz 5:b28ce8616b41 200 Write32(RAM_CMD, CMD_MEMSET);
nz 5:b28ce8616b41 201 Write32(RAM_CMD, ptr);
nz 5:b28ce8616b41 202 Write32(RAM_CMD, value);
nz 5:b28ce8616b41 203 Write32(RAM_CMD, numb);
nz 5:b28ce8616b41 204 }
nz 5:b28ce8616b41 205
nz 5:b28ce8616b41 206 //-----------------------------------------------------------------------------------
nz 5:b28ce8616b41 207 // Copy block of memory
nz 5:b28ce8616b41 208 //-----------------------------------------------------------------------------------
nz 5:b28ce8616b41 209 void FT800::writeMemCpy(uint32_t dest, uint32_t source, uint32_t numb)
nz 5:b28ce8616b41 210 {
nz 5:b28ce8616b41 211 Write32(RAM_CMD, CMD_MEMCPY);
nz 5:b28ce8616b41 212 Write32(RAM_CMD, dest);
nz 5:b28ce8616b41 213 Write32(RAM_CMD, source);
nz 5:b28ce8616b41 214 Write32(RAM_CMD, numb);
nz 5:b28ce8616b41 215 }
nz 5:b28ce8616b41 216
nz 5:b28ce8616b41 217 //-----------------------------------------------------------------------------------
nz 5:b28ce8616b41 218 // Write block of memory
nz 5:b28ce8616b41 219 //-----------------------------------------------------------------------------------
nz 5:b28ce8616b41 220 void FT800::writeMemWrt(uint32_t ptr, uint32_t numb)
nz 5:b28ce8616b41 221 {
nz 5:b28ce8616b41 222 //Write32(RAM_CMD, CMD_MEMWRITE);
nz 5:b28ce8616b41 223 //Write32(RAM_CMD, ptr);
nz 5:b28ce8616b41 224 //Write32(RAM_CMD, numb);
nz 5:b28ce8616b41 225 }
nz 5:b28ce8616b41 226
nz 0:b699e59d925b 227 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 228 // Set Backlight brightness [0-128], 0 = off, 128 = brightness 100%
nz 0:b699e59d925b 229 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 230 void FT800::setBacklight(uint8_t brightness)
nz 0:b699e59d925b 231 {
nz 0:b699e59d925b 232 if(brightness > 128) brightness = 128;
nz 0:b699e59d925b 233 Write16(REG_PWM_DUTY, brightness);
nz 0:b699e59d925b 234 }
nz 0:b699e59d925b 235
nz 0:b699e59d925b 236 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 237 // Set GPU PLL output clock, 36 or 48 MHz
nz 0:b699e59d925b 238 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 239 void FT800::setGPU_Frequency(uint8_t freq)
nz 0:b699e59d925b 240 {
nz 0:b699e59d925b 241 if(freq == 36) HostCommand(GPU_PLL_36M);
nz 0:b699e59d925b 242 if(freq == 48) HostCommand(GPU_PLL_48M);
nz 0:b699e59d925b 243 Sleep(10);
nz 0:b699e59d925b 244 }
nz 0:b699e59d925b 245
nz 0:b699e59d925b 246 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 247 // Clear/reading interrupt flags
nz 0:b699e59d925b 248 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 249 void FT800::clearIntFlags(void)
nz 0:b699e59d925b 250 {
nz 0:b699e59d925b 251 Read08(REG_INT_FLAGS);
nz 0:b699e59d925b 252 }
nz 0:b699e59d925b 253
nz 0:b699e59d925b 254 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 255 // FT800 initialize
nz 0:b699e59d925b 256 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 257 void FT800::Init()
nz 0:b699e59d925b 258 {
nz 0:b699e59d925b 259 uint8_t chipid;
nz 0:b699e59d925b 260
nz 0:b699e59d925b 261 // Toggle PD_N from low to high for Reset the FT800
nz 0:b699e59d925b 262 _pd = 0; Sleep(20);
nz 0:b699e59d925b 263 _pd = 1; Sleep(20);
nz 0:b699e59d925b 264
nz 0:b699e59d925b 265 // Configuration of GPU
nz 0:b699e59d925b 266 HostCommand(GPU_ACTIVE_M); Sleep(10); // Access address 0 to wake up the FT800
nz 0:b699e59d925b 267 HostCommand(GPU_EXTERNAL_OSC); Sleep(10); // Set the clk to external clock
nz 0:b699e59d925b 268 HostCommand(GPU_PLL_48M); Sleep(10); // Switch PLL output to 48MHz
nz 0:b699e59d925b 269 HostCommand(GPU_CORE_RESET); // Do a core reset for safer side
nz 0:b699e59d925b 270
nz 0:b699e59d925b 271 chipid = Read08(REG_ID); // Read Register ID to check if FT800 is ready.
nz 0:b699e59d925b 272 while(chipid != 0x7C)
nz 0:b699e59d925b 273 chipid = Read08(REG_ID);
nz 0:b699e59d925b 274
nz 0:b699e59d925b 275 _spi.frequency(20000000); // 20 Mhz SPI clock
nz 0:b699e59d925b 276
nz 0:b699e59d925b 277 /* Configuration of LCD Display */
nz 0:b699e59d925b 278 Write16(REG_HSIZE, DISP_WIDTH);
nz 0:b699e59d925b 279 Write16(REG_HCYCLE, DISP_HCYCLE);
nz 0:b699e59d925b 280 Write16(REG_HOFFSET, DISP_HSYNC1+DISP_HSLEN);
nz 0:b699e59d925b 281 Write16(REG_HSYNC0, DISP_HSYNC0);
nz 0:b699e59d925b 282 Write16(REG_HSYNC1, DISP_HSYNC1);
nz 0:b699e59d925b 283
nz 0:b699e59d925b 284 Write16(REG_VSIZE, DISP_HEIGHT);
nz 0:b699e59d925b 285 Write16(REG_VCYCLE, DISP_VCYCLE);
nz 0:b699e59d925b 286 Write16(REG_VOFFSET, DISP_VSYNC1+DISP_VSLEN);
nz 0:b699e59d925b 287 Write16(REG_VSYNC0, DISP_VSYNC0);
nz 0:b699e59d925b 288 Write16(REG_VSYNC1, DISP_VSYNC1);
nz 0:b699e59d925b 289
nz 0:b699e59d925b 290 Write08(REG_SWIZZLE, DISP_SWIZZLE);
nz 0:b699e59d925b 291 Write08(REG_PCLK_POL, DISP_PCLK_POL);
nz 0:b699e59d925b 292 Write08(REG_PCLK, DISP_PCLK);
nz 0:b699e59d925b 293 Write08(REG_CSPREAD, 1);
nz 0:b699e59d925b 294
nz 0:b699e59d925b 295 /* Configuration of Backlight */
nz 0:b699e59d925b 296 Write16(REG_PWM_HZ, DISP_PWM_HZ);
nz 0:b699e59d925b 297 Write16(REG_PWM_DUTY, DISP_PWM_DUTY); // full brightness
nz 0:b699e59d925b 298
nz 0:b699e59d925b 299 /* Configuration of Touch Screen */
nz 0:b699e59d925b 300 Write16(REG_TOUCH_RZTHRESH, TOUCH_SENSITIVITY);
nz 0:b699e59d925b 301 Write08(REG_TOUCH_MODE, TOUCH_MODE);
nz 0:b699e59d925b 302 Write08(REG_TOUCH_ADC_MODE, TOUCH_ADC_MODE);
nz 0:b699e59d925b 303 Write16(REG_TOUCH_CHARGE, TOUCH_CHARGE);
nz 0:b699e59d925b 304 Write08(REG_TOUCH_SETTLE, TOUCH_SETTLE);
nz 0:b699e59d925b 305 Write08(REG_TOUCH_OVERSAMPLE, TOUCH_OVERSAMPLE);
nz 0:b699e59d925b 306
nz 0:b699e59d925b 307 /* Configuration of Touch Screen interrupt */
nz 0:b699e59d925b 308 //Write08(REG_INT_EN, 0x01); Sleep(20); // enable interrupt
nz 0:b699e59d925b 309 //Write08(REG_INT_MASK,0b00000110); Sleep(20); // mask interrupt
nz 0:b699e59d925b 310 //Read08(REG_INT_FLAGS); // Reading clears interrupt flags
nz 0:b699e59d925b 311
nz 0:b699e59d925b 312 /* Configuration of GPIO */
nz 0:b699e59d925b 313 Write08(REG_GPIO_DIR, GPIO_DIR);
nz 0:b699e59d925b 314 Write08(REG_GPIO, GPIO_SET);
nz 0:b699e59d925b 315
nz 0:b699e59d925b 316 Write32(RAM_DL, 0x02000000); // Set the colour for clear Black
nz 0:b699e59d925b 317 Write32(RAM_DL+4, 0x26000007); // Clear the Colour, Stencil and Tag buffers
nz 0:b699e59d925b 318 Write32(RAM_DL+8, 0x00000000); // Ends the display list
nz 0:b699e59d925b 319 Write32(REG_DLSWAP, 1); // Writing to the DL_SWAP register...
nz 0:b699e59d925b 320 }
nz 0:b699e59d925b 321
nz 0:b699e59d925b 322
nz 0:b699e59d925b 323 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 324 // Start of display list
nz 0:b699e59d925b 325 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 326 void FT800::DLstart(void)
nz 0:b699e59d925b 327 {
nz 0:b699e59d925b 328 Write32(RAM_CMD, CMD_DLSTART);
nz 0:b699e59d925b 329 }
nz 0:b699e59d925b 330 void FT800::DLstart(uint32_t color)
nz 0:b699e59d925b 331 {
nz 0:b699e59d925b 332 Write32(RAM_CMD, CMD_DLSTART);
nz 0:b699e59d925b 333 Write32(RAM_CMD, 0x02000000|(color&0x00FFFFFF));// set clear color
nz 0:b699e59d925b 334 Write32(RAM_CMD, 0x26000007); // clear all
nz 0:b699e59d925b 335 }
nz 0:b699e59d925b 336 void FT800::DLstart(uint32_t color, uint8_t br) // br -> brightness
nz 0:b699e59d925b 337 {
nz 0:b699e59d925b 338 Write32(RAM_CMD, CMD_DLSTART);
nz 0:b699e59d925b 339 Write32(RAM_CMD, 0x02000000|(color&0x00FFFFFF));// set clear color
nz 0:b699e59d925b 340 Write32(RAM_CMD, 0x26000007); // clear all
nz 0:b699e59d925b 341 if(br > 128) br = 128;
nz 0:b699e59d925b 342 Write16(REG_PWM_DUTY, br); // set brightness
nz 0:b699e59d925b 343 }
nz 0:b699e59d925b 344
nz 0:b699e59d925b 345 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 346 // End of display list
nz 0:b699e59d925b 347 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 348 void FT800::DLend(void)
nz 0:b699e59d925b 349 {
nz 0:b699e59d925b 350 Write32(RAM_CMD, 0x00000000);
nz 0:b699e59d925b 351 Write32(RAM_CMD, CMD_SWAP);
nz 0:b699e59d925b 352 Write16(REG_CMD_WRITE, get_CMD_Offset());
nz 0:b699e59d925b 353 }
nz 0:b699e59d925b 354
nz 0:b699e59d925b 355 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 356 // Finish display list
nz 0:b699e59d925b 357 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 358 void FT800::finishList(void)
nz 0:b699e59d925b 359 {
nz 0:b699e59d925b 360 uint32_t cmdBufferWr, cmdBufferRd;
nz 0:b699e59d925b 361 do
nz 0:b699e59d925b 362 {
nz 0:b699e59d925b 363 cmdBufferWr = Read16(REG_CMD_WRITE);// Read the vaulue of the REG_CMD_WRITE register
nz 0:b699e59d925b 364 cmdBufferRd = Read16(REG_CMD_READ); // Read the vaulue of the REG_CMD_READ register
nz 0:b699e59d925b 365 } while(cmdBufferWr != cmdBufferRd);
nz 0:b699e59d925b 366 set_CMD_Offset(Read16(REG_CMD_WRITE));
nz 0:b699e59d925b 367 }
nz 0:b699e59d925b 368
nz 0:b699e59d925b 369 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 370 // Set color RGB, format 0xRRGGBB
nz 0:b699e59d925b 371 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 372 void FT800::setColor(uint32_t color)
nz 0:b699e59d925b 373 {
nz 0:b699e59d925b 374 Write32(RAM_CMD, 0x04000000|(color&0x00FFFFFF));
nz 0:b699e59d925b 375 }
nz 0:b699e59d925b 376
nz 0:b699e59d925b 377 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 378 // Set Color Alpha, alpha [0-255], alpha=128 (50% transparency), alpha=255 100%
nz 0:b699e59d925b 379 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 380 void FT800::setColorA(uint8_t alpha)
nz 0:b699e59d925b 381 {
nz 0:b699e59d925b 382 Write32(RAM_CMD, 0x10000000|alpha);
nz 0:b699e59d925b 383 }
nz 0:b699e59d925b 384
nz 0:b699e59d925b 385 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 386 // Set Clear Color - 0x00RRGGBB
nz 0:b699e59d925b 387 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 388 void FT800::setClearColor(uint32_t color)
nz 0:b699e59d925b 389 {
nz 0:b699e59d925b 390 Write32(RAM_CMD, 0x02000000|(color&0x00FFFFFF));
nz 0:b699e59d925b 391 }
nz 0:b699e59d925b 392 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 393 // Set Clear Color Alpha
nz 0:b699e59d925b 394 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 395 void FT800::setClearColorA(uint8_t alpha)
nz 0:b699e59d925b 396 {
nz 0:b699e59d925b 397 Write32(RAM_CMD, 0x0F0000000|alpha);
nz 0:b699e59d925b 398 }
nz 0:b699e59d925b 399
nz 0:b699e59d925b 400 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 401 // Set Background Color, default dark blue (0x002040)
nz 0:b699e59d925b 402 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 403 void FT800::setBgColor(uint32_t color)
nz 0:b699e59d925b 404 {
nz 0:b699e59d925b 405 Write32(RAM_CMD, CMD_BGCOLOR);
nz 0:b699e59d925b 406 Write32(RAM_CMD, (color&0x00FFFFFF));
nz 0:b699e59d925b 407 }
nz 0:b699e59d925b 408
nz 0:b699e59d925b 409 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 410 // Set Foreground Color, default light blue (0x003870)
nz 0:b699e59d925b 411 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 412 void FT800::setFgColor(uint32_t color)
nz 0:b699e59d925b 413 {
nz 0:b699e59d925b 414 Write32(RAM_CMD, CMD_FGCOLOR);
nz 0:b699e59d925b 415 Write32(RAM_CMD, (color&0x00FFFFFF));
nz 0:b699e59d925b 416 }
nz 0:b699e59d925b 417
nz 0:b699e59d925b 418 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 419 // Set Gradient Color, default white (0xffffff)
nz 0:b699e59d925b 420 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 421 void FT800::setGrColor(uint32_t color)
nz 0:b699e59d925b 422 {
nz 0:b699e59d925b 423 Write32(RAM_CMD, CMD_GRADCOLOR);
nz 0:b699e59d925b 424 Write32(RAM_CMD, (color&0x00FFFFFF));
nz 0:b699e59d925b 425 }
nz 0:b699e59d925b 426
nz 0:b699e59d925b 427 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 428 // Clear display - clear 0x2600000X
nz 0:b699e59d925b 429 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 430 void FT800::clear(uint8_t clr) // 0b0001 or 1 - clear tag buffer
nz 0:b699e59d925b 431 { // 0b0010 or 2 - clear stencil buffer
nz 0:b699e59d925b 432 Write32(RAM_CMD, 0x26000000|(clr&0x07)); // 0b0100 or 4 - clear color buffer
nz 0:b699e59d925b 433 } // 0b0111 or 7 - clear all
nz 0:b699e59d925b 434
nz 0:b699e59d925b 435 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 436 // Set Line Width - width [1-255] *16
nz 0:b699e59d925b 437 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 438 void FT800::setLineWidth(uint16_t width)
nz 0:b699e59d925b 439 {
nz 0:b699e59d925b 440 Write32(RAM_CMD, 0x0E000000|(width*16));
nz 0:b699e59d925b 441 }
nz 0:b699e59d925b 442
nz 0:b699e59d925b 443 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 444 // Set Point Size - size [1-512] *16
nz 0:b699e59d925b 445 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 446 void FT800::setPointSize(uint16_t size)
nz 0:b699e59d925b 447 {
nz 0:b699e59d925b 448 Write32(RAM_CMD, 0x0D000000|(size*16));
nz 0:b699e59d925b 449 }
nz 0:b699e59d925b 450
nz 0:b699e59d925b 451 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 452 // Set Scissor Size width & height [0-512]
nz 0:b699e59d925b 453 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 454 void FT800::setScissorSize(uint16_t width, uint16_t height)
nz 0:b699e59d925b 455 {
nz 0:b699e59d925b 456 uint32_t scissorSize = 0x1C000000;
nz 0:b699e59d925b 457 scissorSize |= (width&0x03FF)<<10;
nz 0:b699e59d925b 458 scissorSize |= (height&0x03FF);
nz 0:b699e59d925b 459 Write32(RAM_CMD, scissorSize);
nz 0:b699e59d925b 460 }
nz 0:b699e59d925b 461
nz 0:b699e59d925b 462 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 463 // Set Scissor XY - position (x,y) the top left corner of the scissor clip rectangle
nz 0:b699e59d925b 464 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 465 void FT800::setScissorXY(int16_t x, int16_t y)
nz 0:b699e59d925b 466 {
nz 0:b699e59d925b 467 uint32_t scissorXY = 0x1B000000;
nz 0:b699e59d925b 468 scissorXY |= (x&0x01FF)<<9;
nz 0:b699e59d925b 469 scissorXY |= (y&0x01FF);
nz 0:b699e59d925b 470 Write32(RAM_CMD, scissorXY);
nz 0:b699e59d925b 471 }
nz 0:b699e59d925b 472
nz 0:b699e59d925b 473 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 474 // Blend function - specifies how the source blending factor is computed.
nz 0:b699e59d925b 475 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 476 void FT800::setBlendFunc(uint8_t src, uint8_t dst)
nz 0:b699e59d925b 477 {
nz 0:b699e59d925b 478 uint32_t blend=0x0B000000;
nz 0:b699e59d925b 479 blend|=((src&0x07)<<3);
nz 0:b699e59d925b 480 blend|=(dst&0x07);
nz 0:b699e59d925b 481 Write32(RAM_CMD, blend);
nz 0:b699e59d925b 482 }
nz 0:b699e59d925b 483
nz 0:b699e59d925b 484 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 485 // align - used filling up to 32 bit (4 bytes)
nz 0:b699e59d925b 486 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 487 void FT800::align(uint8_t n)
nz 0:b699e59d925b 488 {
nz 0:b699e59d925b 489 while((n++) & 3)
nz 0:b699e59d925b 490 Write08(RAM_CMD, 0);
nz 0:b699e59d925b 491 }
nz 0:b699e59d925b 492
nz 0:b699e59d925b 493 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 494 // Base Functions of Primitives
nz 0:b699e59d925b 495 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 496 void FT800::beginBitmap() { Write32(RAM_CMD, 0x1F000001); }
nz 0:b699e59d925b 497 void FT800::beginPoint() { Write32(RAM_CMD, 0x1F000002); }
nz 0:b699e59d925b 498 void FT800::beginLine() { Write32(RAM_CMD, 0x1F000003); }
nz 0:b699e59d925b 499 void FT800::beginLineStrip(){ Write32(RAM_CMD, 0x1F000004); }
nz 0:b699e59d925b 500 void FT800::beginRect() { Write32(RAM_CMD, 0x1F000009); }
nz 0:b699e59d925b 501
nz 0:b699e59d925b 502 void FT800::drawBitmapXY(int16_t x, int16_t y) { Vertex2II(x,y,0,0); }
nz 0:b699e59d925b 503 void FT800::drawPointXY(int16_t x, int16_t y) { Vertex2F(x<<4,y<<4); }
nz 0:b699e59d925b 504 void FT800::drawLineXY(int16_t x1,int16_t y1,int16_t x2,int16_t y2) {Vertex2F(x1<<4,y1<<4);Vertex2F(x2<<4,y2<<4);}
nz 0:b699e59d925b 505
nz 0:b699e59d925b 506 void FT800::end() { Write32(RAM_CMD, 0x21000000); }
nz 0:b699e59d925b 507
nz 0:b699e59d925b 508 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 509 // Vertex2F - x & y [-16384,16383], in 1/16 of the pixel, or [-1024,1023]
nz 0:b699e59d925b 510 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 511 void FT800::Vertex2F(int16_t x, int16_t y)
nz 0:b699e59d925b 512 {
nz 0:b699e59d925b 513 uint32_t xy=0x40000000;
nz 0:b699e59d925b 514 xy |= ((x&0x7FFF)<<15); //11 bits for +-x coordinate and 4 bits for x fraction (1/16 of pixel)
nz 0:b699e59d925b 515 xy |= (y&0x7FFF); //11 bits for +-y coordinate and 4 bits for y fraction (1/16 of pixel)
nz 0:b699e59d925b 516 Write32(RAM_CMD, xy);
nz 0:b699e59d925b 517 }
nz 0:b699e59d925b 518
nz 0:b699e59d925b 519 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 520 // Vertex2II - x[0,511], y[0,511], handle [0-31], cell [0-127]
nz 0:b699e59d925b 521 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 522 void FT800::Vertex2II(uint16_t x, uint16_t y, uint8_t handle, uint8_t cell)
nz 0:b699e59d925b 523 {
nz 0:b699e59d925b 524 uint32_t xyhc=0x80000000;
nz 0:b699e59d925b 525 xyhc|=((x&0x01FF)<<21);
nz 0:b699e59d925b 526 xyhc|=((y&0x01FF)<<12);
nz 0:b699e59d925b 527 xyhc|=((handle&0x1F)<<7);
nz 0:b699e59d925b 528 xyhc|=(cell&0x7F);
nz 0:b699e59d925b 529 Write32(RAM_CMD, xyhc);
nz 0:b699e59d925b 530 }
nz 0:b699e59d925b 531
nz 0:b699e59d925b 532 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 533 // Draw Char at position (x,y), font [16-31], color, char
nz 0:b699e59d925b 534 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 535 void FT800::drawChar(uint16_t x, uint16_t y, uint8_t font, uint32_t color, char c)
nz 0:b699e59d925b 536 {
nz 0:b699e59d925b 537 Write32(RAM_CMD, 0x04000000|(color&0x00FFFFFF));// set color
nz 0:b699e59d925b 538 Write32(RAM_CMD, 0x1F000001); // begin drawing bitmap
nz 0:b699e59d925b 539 if(font>31)font=31;
nz 0:b699e59d925b 540 if(font<16)font=16;
nz 0:b699e59d925b 541 Vertex2II(x, y, font, c); // draw char
nz 0:b699e59d925b 542 Write32(RAM_CMD, 0x21000000); // draw end
nz 0:b699e59d925b 543 }
nz 0:b699e59d925b 544
nz 0:b699e59d925b 545 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 546 // Draw Point center (x,y), color, size
nz 0:b699e59d925b 547 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 548 void FT800::drawPoint(int16_t x, int16_t y, uint32_t color, uint16_t size)
nz 0:b699e59d925b 549 {
nz 0:b699e59d925b 550 Write32(RAM_CMD, 0x04000000|(color&0x00FFFFFF)); // set color
nz 0:b699e59d925b 551 Write32(RAM_CMD, 0x0D000000|(size*16)); // set size (radius)
nz 0:b699e59d925b 552 Write32(RAM_CMD, 0x1F000002); // begin drawing point
nz 0:b699e59d925b 553 Vertex2F(x<<4,y<<4); // draw coordinates
nz 0:b699e59d925b 554 Write32(RAM_CMD, 0x21000000); // draw end
nz 0:b699e59d925b 555 }
nz 0:b699e59d925b 556
nz 0:b699e59d925b 557 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 558 // Draw Line from (x1,y1) to (x2,y2) of color color and linewidth width
nz 0:b699e59d925b 559 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 560 void FT800::drawLine(int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint32_t color, uint16_t width)
nz 0:b699e59d925b 561 {
nz 0:b699e59d925b 562 Write32(RAM_CMD, 0x04000000|(color&0x00FFFFFF)); // set color rgb
nz 0:b699e59d925b 563 Write32(RAM_CMD, 0x0E000000|((width*16)&0x0FFF)); // set width of line
nz 0:b699e59d925b 564 Write32(RAM_CMD, 0x1F000003); // begin drawing line
nz 0:b699e59d925b 565 Vertex2F(x1<<4, y1<<4); // draw coordinates x1, y1
nz 0:b699e59d925b 566 Vertex2F(x2<<4, y2<<4); // draw coordinates x2, y2
nz 0:b699e59d925b 567 Write32(RAM_CMD, 0x21000000); // draw end
nz 0:b699e59d925b 568 }
nz 0:b699e59d925b 569
nz 0:b699e59d925b 570 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 571 // Draw Rectangle starting from (x1,y1) and ending at (x2,y2) of color color and linewidth width
nz 0:b699e59d925b 572 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 573 void FT800::drawRect(int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint32_t color, uint16_t width)
nz 0:b699e59d925b 574 {
nz 0:b699e59d925b 575 Write32(RAM_CMD, 0x04000000|(color&0x00FFFFFF)); // set color rgb
nz 0:b699e59d925b 576 Write32(RAM_CMD, 0x0E000000|((width*16)&0x0FFF)); // set linewidth/
nz 0:b699e59d925b 577 Write32(RAM_CMD, 0x1F000009); // begin drawing rect
nz 0:b699e59d925b 578 Vertex2F(x1<<4, y1<<4); // draw coordinates
nz 0:b699e59d925b 579 Vertex2F(x2<<4, y2<<4); // draw coordinates
nz 0:b699e59d925b 580 Write32(RAM_CMD, 0x21000000); // draw end
nz 0:b699e59d925b 581 }
nz 0:b699e59d925b 582
nz 0:b699e59d925b 583 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 584 // Draw Line Strip in number of points
nz 0:b699e59d925b 585 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 586 void FT800::drawLineStrips(int16_t x[], int16_t y[], uint16_t points, uint16_t width, uint32_t color)
nz 0:b699e59d925b 587 {
nz 0:b699e59d925b 588 uint16_t i;
nz 0:b699e59d925b 589 Write32(RAM_CMD, 0x04000000|(color&0x00FFFFFF)); // set color rgb
nz 0:b699e59d925b 590 Write32(RAM_CMD, 0x0E000000|((width*16)&0x0FFF)); // set linewidth
nz 0:b699e59d925b 591 Write32(RAM_CMD, 0x1F000004); // begin drawing linestrip
nz 0:b699e59d925b 592 for(i=0; i<points; i++) Vertex2F(x[i]<<4,y[i]<<4); // draw coordinates
nz 0:b699e59d925b 593 Write32(RAM_CMD, 0x21000000); // draw end
nz 0:b699e59d925b 594 }
nz 0:b699e59d925b 595
nz 0:b699e59d925b 596 //------------------------------------------------------------------------------
nz 0:b699e59d925b 597 // Draw Edge Line Strip (color filling) in number of points num_of_points
nz 0:b699e59d925b 598 //------------------------------------------------------------------------------
nz 0:b699e59d925b 599 void FT800::drawEdgeStrips(int16_t x[], int16_t y[], uint16_t num_of_points, uint8_t choice, uint32_t color)
nz 0:b699e59d925b 600 {
nz 0:b699e59d925b 601 uint32_t c = 0;
nz 0:b699e59d925b 602 uint16_t i;
nz 0:b699e59d925b 603 switch(choice) //choose edge side
nz 0:b699e59d925b 604 {
nz 0:b699e59d925b 605 case'R': c = 0x00000005; break; // edge side Right
nz 0:b699e59d925b 606 case'L': c = 0x00000006; break; // edge side Left
nz 0:b699e59d925b 607 case'A': c = 0x00000007; break; // edge side Above
nz 0:b699e59d925b 608 case'B': c = 0x00000008; break; // edge side Below
nz 0:b699e59d925b 609 }
nz 0:b699e59d925b 610 Write32(RAM_CMD, 0x04000000|(color&0x00FFFFFF)); // set color rgb
nz 0:b699e59d925b 611 Write32(RAM_CMD, 0x1F000000|c); // begin drawing linestrip
nz 0:b699e59d925b 612 for(i=0; i<num_of_points; i++) Vertex2F(x[i]<<4,y[i]<<4);
nz 0:b699e59d925b 613 Write32(RAM_CMD, 0x21000000); // draw end
nz 0:b699e59d925b 614 }
nz 0:b699e59d925b 615
nz 0:b699e59d925b 616 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 617 // Draw String - used text draw and object naming
nz 0:b699e59d925b 618 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 619 void FT800::drawString(const char *s)
nz 0:b699e59d925b 620 {
nz 0:b699e59d925b 621 uint16_t string_length = 0;
nz 0:b699e59d925b 622 string_length = strlen(s)+1;
nz 0:b699e59d925b 623 while(*s)
nz 0:b699e59d925b 624 {
nz 0:b699e59d925b 625 char c = *s++;
nz 0:b699e59d925b 626 Write08(RAM_CMD, c);
nz 0:b699e59d925b 627 }
nz 0:b699e59d925b 628 Write08(RAM_CMD, 0);
nz 0:b699e59d925b 629 align(string_length);
nz 0:b699e59d925b 630 }
nz 0:b699e59d925b 631
nz 0:b699e59d925b 632 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 633 // Draw Text at position (x,y), font [16-31], color, options [ie. OPT_RIGHTX], text s
nz 0:b699e59d925b 634 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 635 void FT800::drawText(int16_t x, int16_t y, uint8_t font, uint32_t color, uint16_t option, const char *s)
nz 0:b699e59d925b 636 {
nz 0:b699e59d925b 637 Write32(RAM_CMD, 0x04000000|(color&0x00FFFFFF));// set color
nz 0:b699e59d925b 638 Write32(RAM_CMD, CMD_TEXT);
nz 0:b699e59d925b 639 Write16(RAM_CMD, x);
nz 0:b699e59d925b 640 Write16(RAM_CMD, y);
nz 0:b699e59d925b 641 if(font>31)font=31;
nz 0:b699e59d925b 642 if(font<16)font=16;
nz 0:b699e59d925b 643 Write16(RAM_CMD, font);
nz 0:b699e59d925b 644 Write16(RAM_CMD, option);
nz 0:b699e59d925b 645 drawString(s);
nz 0:b699e59d925b 646 }
nz 0:b699e59d925b 647
nz 0:b699e59d925b 648 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 649 // Draw Decimal Number
nz 0:b699e59d925b 650 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 651 void FT800::drawNumber(int16_t x, int16_t y, uint8_t font, uint32_t color, uint16_t option, uint32_t n)
nz 0:b699e59d925b 652 {
nz 0:b699e59d925b 653 Write32(RAM_CMD, 0x04000000|(color&0x00FFFFFF));// set color
nz 0:b699e59d925b 654 Write32(RAM_CMD, CMD_NUMBER);
nz 0:b699e59d925b 655 Write16(RAM_CMD, x);
nz 0:b699e59d925b 656 Write16(RAM_CMD, y);
nz 0:b699e59d925b 657 if(font>31)font=31;
nz 0:b699e59d925b 658 if(font<16)font=16;
nz 0:b699e59d925b 659 Write16(RAM_CMD, font);
nz 0:b699e59d925b 660 Write16(RAM_CMD, option);
nz 0:b699e59d925b 661 Write32(RAM_CMD, n);
nz 0:b699e59d925b 662 }
nz 0:b699e59d925b 663
nz 0:b699e59d925b 664
nz 0:b699e59d925b 665
nz 0:b699e59d925b 666 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 667 // Set Bitmap Handle
nz 0:b699e59d925b 668 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 669 void FT800::bitmapHandle(uint8_t handle)
nz 0:b699e59d925b 670 {
nz 0:b699e59d925b 671 Write32(RAM_CMD, 0x05000000|(handle&0x1F));
nz 0:b699e59d925b 672 }
nz 0:b699e59d925b 673 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 674 // Bitmap Transform - scaling, rotation and translation
nz 0:b699e59d925b 675 // x1=x*A+y*B+C y1=x*D+y*E+F
nz 0:b699e59d925b 676 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 677 void FT800::bitmapTransformA(int32_t value) {
nz 0:b699e59d925b 678 Write32(RAM_CMD, 0x15000000|(value&0x00FFFFFF)); } // BMP_TRANSFORM_A 0x15000000
nz 0:b699e59d925b 679 void FT800::bitmapTransformB(int32_t value) {
nz 0:b699e59d925b 680 Write32(RAM_CMD, 0x16000000|(value&0x00FFFFFF)); } // BMP_TRANSFORM_B 0x16000000
nz 0:b699e59d925b 681 void FT800::bitmapTransformC(int32_t value) {
nz 0:b699e59d925b 682 Write32(RAM_CMD, 0x17000000|(value&0x00FFFFFF)); } // BMP_TRANSFORM_C 0x17000000
nz 0:b699e59d925b 683 void FT800::bitmapTransformD(int32_t value) {
nz 0:b699e59d925b 684 Write32(RAM_CMD, 0x18000000|(value&0x00FFFFFF)); } // BMP_TRANSFORM_D 0x18000000
nz 0:b699e59d925b 685 void FT800::bitmapTransformE(int32_t value) {
nz 0:b699e59d925b 686 Write32(RAM_CMD, 0x19000000|(value&0x00FFFFFF)); } // BMP_TRANSFORM_E 0x19000000
nz 0:b699e59d925b 687 void FT800::bitmapTransformF(int32_t value) {
nz 0:b699e59d925b 688 Write32(RAM_CMD, 0x1A000000|(value&0x00FFFFFF)); } // BMP_TRANSFORM_F 0x1A000000
nz 0:b699e59d925b 689
nz 0:b699e59d925b 690 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 691 // Bitmap Layout
nz 0:b699e59d925b 692 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 693 void FT800::bitmapLayout(uint8_t format, int16_t linestride, int16_t heigth)
nz 0:b699e59d925b 694 {
nz 0:b699e59d925b 695 uint32_t bitmap_layout = 0x07000000;
nz 0:b699e59d925b 696
nz 0:b699e59d925b 697 if(format>11) format = 11; //The valid range is from 0 to 11
nz 0:b699e59d925b 698 bitmap_layout |= (uint32_t)(format&0x1F)<<19;
nz 0:b699e59d925b 699 bitmap_layout |= (uint32_t)(linestride&0x03FF)<<9;
nz 0:b699e59d925b 700 bitmap_layout |= (heigth&0x01FF);
nz 0:b699e59d925b 701
nz 0:b699e59d925b 702 Write32(RAM_CMD, bitmap_layout);
nz 0:b699e59d925b 703 }
nz 0:b699e59d925b 704 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 705 // FT800 bitmap Size
nz 0:b699e59d925b 706 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 707 void FT800::bitmapSize(uint8_t filter, uint8_t wrapx, uint8_t wrapy, int16_t width, int16_t heigth)
nz 0:b699e59d925b 708 {
nz 0:b699e59d925b 709 uint32_t bitmap_size = 0x08000000;
nz 0:b699e59d925b 710
nz 0:b699e59d925b 711 bitmap_size |= (uint32_t)(filter&0x01)<<20;
nz 0:b699e59d925b 712 bitmap_size |= (uint32_t)(wrapx&0x01)<<19;
nz 0:b699e59d925b 713 bitmap_size |= (uint32_t)(wrapy&0x01)<<18;
nz 0:b699e59d925b 714 bitmap_size |= (uint32_t)(width&0x01FF)<<9;
nz 0:b699e59d925b 715 bitmap_size |= (uint32_t)(heigth&0x01FF);
nz 0:b699e59d925b 716
nz 0:b699e59d925b 717 Write32(RAM_CMD, bitmap_size);
nz 0:b699e59d925b 718 }
nz 0:b699e59d925b 719 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 720 // Bitmap Source
nz 0:b699e59d925b 721 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 722 void FT800::bitmapSource(uint32_t add)
nz 0:b699e59d925b 723 {
nz 0:b699e59d925b 724 Write32(RAM_CMD, 0x01000000|(add&0x000FFFFF));
nz 0:b699e59d925b 725 }
nz 0:b699e59d925b 726 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 727 // Load matrix
nz 0:b699e59d925b 728 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 729 void FT800::loadIdentity(void)
nz 0:b699e59d925b 730 {
nz 0:b699e59d925b 731 Write32(RAM_CMD, CMD_LOADIDENTITY);
nz 0:b699e59d925b 732 }
nz 0:b699e59d925b 733 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 734 // Set matrix
nz 0:b699e59d925b 735 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 736 void FT800::setMatrix(void)
nz 0:b699e59d925b 737 {
nz 0:b699e59d925b 738 Write32(RAM_CMD, CMD_SETMATRIX);
nz 0:b699e59d925b 739 }
nz 0:b699e59d925b 740 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 741 // Scale command
nz 0:b699e59d925b 742 //-----------------------------------------------------------------------------------
nz 5:b28ce8616b41 743 void FT800::scale(int16_t sx, int16_t sy)
nz 0:b699e59d925b 744 {
nz 0:b699e59d925b 745 Write32(RAM_CMD, CMD_SCALE);
nz 0:b699e59d925b 746 Write32(RAM_CMD, (int32_t)sx<<16);
nz 0:b699e59d925b 747 Write32(RAM_CMD, (int32_t)sy<<16);
nz 0:b699e59d925b 748 }
nz 0:b699e59d925b 749 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 750 // Translate command
nz 0:b699e59d925b 751 //-----------------------------------------------------------------------------------
nz 5:b28ce8616b41 752 void FT800::translate(int16_t tx, int16_t ty)
nz 0:b699e59d925b 753 {
nz 0:b699e59d925b 754 Write32(RAM_CMD, CMD_TRANSLATE);
nz 0:b699e59d925b 755 Write32(RAM_CMD, (int32_t)tx<<16);
nz 0:b699e59d925b 756 Write32(RAM_CMD, (int32_t)ty<<16);
nz 0:b699e59d925b 757 }
nz 0:b699e59d925b 758 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 759 // Rotate command
nz 0:b699e59d925b 760 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 761 void FT800::rotate(int16_t a)
nz 0:b699e59d925b 762 {
nz 0:b699e59d925b 763 Write32(RAM_CMD, CMD_ROTATE);
nz 0:b699e59d925b 764 Write32(RAM_CMD, ((int32_t)a<<16)/360);
nz 0:b699e59d925b 765 }
nz 0:b699e59d925b 766 //-----------------------------------------------------------------------------------
nz 5:b28ce8616b41 767 // Inflate command NEW
nz 5:b28ce8616b41 768 //-----------------------------------------------------------------------------------
nz 5:b28ce8616b41 769 void FT800::inflate(uint32_t ptr)
nz 5:b28ce8616b41 770 {
nz 5:b28ce8616b41 771 Write32(RAM_CMD, CMD_INFLATE);
nz 5:b28ce8616b41 772 Write32(RAM_CMD, ptr);
nz 5:b28ce8616b41 773 }
nz 5:b28ce8616b41 774 //-----------------------------------------------------------------------------------
nz 5:b28ce8616b41 775 // Load Image command. The default format for the image is RGB565. OPT_MONO - Format L8
nz 0:b699e59d925b 776 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 777 void FT800::loadJpgCMD(uint32_t ptr, uint32_t opt)
nz 0:b699e59d925b 778 {
nz 0:b699e59d925b 779 Write32(RAM_CMD, CMD_LOADIMAGE);
nz 0:b699e59d925b 780 Write32(RAM_CMD, ptr);
nz 0:b699e59d925b 781 Write32(RAM_CMD, opt);
nz 0:b699e59d925b 782 }
nz 0:b699e59d925b 783
nz 0:b699e59d925b 784
nz 0:b699e59d925b 785 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 786 // Assign Tag and Track given area for touch
nz 0:b699e59d925b 787 // all object in the given area will have the same tag - to prevent use tag mask
nz 0:b699e59d925b 788 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 789 void FT800::track(int16_t x, int16_t y, uint16_t w, uint16_t h, uint8_t tag)
nz 0:b699e59d925b 790 {
nz 0:b699e59d925b 791 Write32(RAM_CMD, CMD_TRACK);
nz 0:b699e59d925b 792 Write16(RAM_CMD, x);
nz 0:b699e59d925b 793 Write16(RAM_CMD, y);
nz 0:b699e59d925b 794 Write16(RAM_CMD, w);
nz 0:b699e59d925b 795 Write16(RAM_CMD, h);
nz 0:b699e59d925b 796 Write32(RAM_CMD, tag);
nz 0:b699e59d925b 797 Write32(RAM_CMD,0x03000000|(tag&0xFF));
nz 0:b699e59d925b 798 }
nz 0:b699e59d925b 799 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 800 // tag mask - disable(0) or enable(1) object tag
nz 0:b699e59d925b 801 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 802 void FT800::tagMask(uint8_t mask)
nz 0:b699e59d925b 803 {
nz 0:b699e59d925b 804 Write32(RAM_CMD,0x14000000|(mask&0x01));
nz 0:b699e59d925b 805 }
nz 0:b699e59d925b 806 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 807 // Read Tag value
nz 0:b699e59d925b 808 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 809 uint8_t FT800::readTag(void)
nz 0:b699e59d925b 810 {
nz 0:b699e59d925b 811 uint32_t tag;
nz 0:b699e59d925b 812 tag = Read32(REG_TRACKER)&0x000000FF;
nz 0:b699e59d925b 813 return (uint8_t)tag;
nz 0:b699e59d925b 814 }
nz 0:b699e59d925b 815 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 816 // Read Value tagged object
nz 0:b699e59d925b 817 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 818 uint16_t FT800::readValue(void)
nz 0:b699e59d925b 819 {
nz 0:b699e59d925b 820 uint32_t value;
nz 0:b699e59d925b 821 value = Read32(REG_TRACKER)&(0xFFFF0000);
nz 0:b699e59d925b 822 return (uint16_t)(value>>16);
nz 0:b699e59d925b 823 }
nz 0:b699e59d925b 824 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 825 // Draw Button
nz 0:b699e59d925b 826 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 827 void FT800::drawButton(int16_t x, int16_t y, uint16_t w, uint16_t h, uint16_t option,
nz 0:b699e59d925b 828 uint32_t colorBG, uint32_t colorTXT, uint8_t font, const char*s, uint8_t tag)
nz 0:b699e59d925b 829 {
nz 0:b699e59d925b 830 if(tag)
nz 0:b699e59d925b 831 {
nz 0:b699e59d925b 832 tagMask(1);
nz 0:b699e59d925b 833 track(x,y,w,h,tag);
nz 0:b699e59d925b 834 }
nz 0:b699e59d925b 835 setFgColor(colorBG); //button color
nz 0:b699e59d925b 836 setColor(colorTXT); //text color
nz 0:b699e59d925b 837 Write32(RAM_CMD, CMD_BUTTON);
nz 0:b699e59d925b 838 Write16(RAM_CMD, x);
nz 0:b699e59d925b 839 Write16(RAM_CMD, y);
nz 0:b699e59d925b 840 Write16(RAM_CMD, w);
nz 0:b699e59d925b 841 Write16(RAM_CMD, h);
nz 0:b699e59d925b 842 if(font>31)font=31;
nz 0:b699e59d925b 843 if(font<16)font=16;
nz 0:b699e59d925b 844 Write16(RAM_CMD, font);
nz 0:b699e59d925b 845 Write16(RAM_CMD, option);
nz 0:b699e59d925b 846 drawString(s);
nz 0:b699e59d925b 847 tagMask(0);
nz 0:b699e59d925b 848 }
nz 0:b699e59d925b 849 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 850 // Draw analog Clock
nz 0:b699e59d925b 851 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 852 void FT800::drawClock(int16_t x, int16_t y, uint16_t r, uint16_t option, uint32_t colorBG,
nz 0:b699e59d925b 853 uint32_t colorNeedle, uint16_t h, uint16_t m, uint16_t s, uint16_t ms, uint8_t tag)
nz 0:b699e59d925b 854 {
nz 0:b699e59d925b 855 if(tag)
nz 0:b699e59d925b 856 {
nz 0:b699e59d925b 857 tagMask(1);
nz 0:b699e59d925b 858 track(x,y,1,1,tag);
nz 0:b699e59d925b 859 }
nz 0:b699e59d925b 860 setBgColor(colorBG);
nz 0:b699e59d925b 861 setColor(colorNeedle);
nz 0:b699e59d925b 862 Write32(RAM_CMD, CMD_CLOCK);
nz 0:b699e59d925b 863 Write16(RAM_CMD, x);
nz 0:b699e59d925b 864 Write16(RAM_CMD, y);
nz 0:b699e59d925b 865 Write16(RAM_CMD, r);
nz 0:b699e59d925b 866 Write16(RAM_CMD, option);
nz 0:b699e59d925b 867 Write16(RAM_CMD, h);
nz 0:b699e59d925b 868 Write16(RAM_CMD, m);
nz 0:b699e59d925b 869 Write16(RAM_CMD, s);
nz 0:b699e59d925b 870 Write16(RAM_CMD, ms);
nz 0:b699e59d925b 871 tagMask(0);
nz 0:b699e59d925b 872 }
nz 0:b699e59d925b 873
nz 0:b699e59d925b 874 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 875 // Draw Dial potentiometer
nz 0:b699e59d925b 876 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 877 void FT800::drawDial(int16_t x, int16_t y, uint16_t r, uint16_t option,
nz 0:b699e59d925b 878 uint32_t colorMarker, uint32_t colorKnob, uint16_t value, uint8_t tag)
nz 0:b699e59d925b 879 {
nz 0:b699e59d925b 880 if(tag)
nz 0:b699e59d925b 881 {
nz 0:b699e59d925b 882 tagMask(1);
nz 0:b699e59d925b 883 track(x,y,1,1,tag);//rotary tracker
nz 0:b699e59d925b 884 }
nz 0:b699e59d925b 885 setColor(colorKnob);
nz 0:b699e59d925b 886 setFgColor(colorMarker);
nz 0:b699e59d925b 887 Write32(RAM_CMD, CMD_DIAL);
nz 0:b699e59d925b 888 Write16(RAM_CMD, x);
nz 0:b699e59d925b 889 Write16(RAM_CMD, y);
nz 0:b699e59d925b 890 Write16(RAM_CMD, r);
nz 0:b699e59d925b 891 Write16(RAM_CMD, option);
nz 0:b699e59d925b 892 Write16(RAM_CMD, value);
nz 0:b699e59d925b 893 Write16(RAM_CMD, 0); // align to 32
nz 0:b699e59d925b 894 tagMask(0);
nz 0:b699e59d925b 895 }
nz 0:b699e59d925b 896
nz 0:b699e59d925b 897 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 898 // Draw Gauge indicator
nz 0:b699e59d925b 899 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 900 void FT800::drawGauge(int16_t x, int16_t y, uint16_t r, uint16_t option, uint32_t colorBCG,
nz 0:b699e59d925b 901 uint32_t colorNeedle, uint8_t major, uint8_t minor, uint16_t value, uint16_t range, uint8_t tag)
nz 0:b699e59d925b 902 {
nz 0:b699e59d925b 903 if(tag)
nz 0:b699e59d925b 904 {
nz 0:b699e59d925b 905 tagMask(1);
nz 0:b699e59d925b 906 track(x,y,1,1,tag);
nz 0:b699e59d925b 907 }
nz 0:b699e59d925b 908 setColor(colorNeedle);
nz 0:b699e59d925b 909 setBgColor(colorBCG);
nz 0:b699e59d925b 910 Write32(RAM_CMD, CMD_GAUGE);
nz 0:b699e59d925b 911 Write16(RAM_CMD, x);
nz 0:b699e59d925b 912 Write16(RAM_CMD, y);
nz 0:b699e59d925b 913 Write16(RAM_CMD, r);
nz 0:b699e59d925b 914 Write16(RAM_CMD, option);
nz 0:b699e59d925b 915 Write16(RAM_CMD, major);
nz 0:b699e59d925b 916 Write16(RAM_CMD, minor);
nz 0:b699e59d925b 917 Write16(RAM_CMD, value);
nz 0:b699e59d925b 918 Write16(RAM_CMD, range);
nz 0:b699e59d925b 919 tagMask(0);
nz 0:b699e59d925b 920 }
nz 0:b699e59d925b 921
nz 0:b699e59d925b 922 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 923 // Draw gradient from color0 to color1 (use in combination with scissors)
nz 0:b699e59d925b 924 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 925 void FT800::drawGradient(int16_t x0, int16_t y0, uint32_t color0, int16_t x1, int16_t y1, uint32_t color1)
nz 0:b699e59d925b 926 {
nz 0:b699e59d925b 927 Write32(RAM_CMD, CMD_GRADIENT);
nz 0:b699e59d925b 928 Write16(RAM_CMD, x0);
nz 0:b699e59d925b 929 Write16(RAM_CMD, y0);
nz 0:b699e59d925b 930 Write32(RAM_CMD, 0x04000000|(color0&0x00FFFFFF));
nz 0:b699e59d925b 931 Write16(RAM_CMD, x1);
nz 0:b699e59d925b 932 Write16(RAM_CMD, y1);
nz 0:b699e59d925b 933 Write32(RAM_CMD, 0x04000000|(color1&0x00FFFFFF));
nz 0:b699e59d925b 934 }
nz 0:b699e59d925b 935 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 936 // Draw Keys - number of keys=number of letters in string s
nz 0:b699e59d925b 937 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 938 void FT800::drawKeys(int16_t x, int16_t y, uint16_t w, uint16_t h, uint16_t option,
nz 0:b699e59d925b 939 uint32_t colorBG, uint32_t colorTXT, uint8_t font, const char*s, uint8_t tag)
nz 0:b699e59d925b 940 {
nz 0:b699e59d925b 941 if(tag)
nz 0:b699e59d925b 942 {
nz 0:b699e59d925b 943 tagMask(1);
nz 0:b699e59d925b 944 track(x,y,w,h,tag);
nz 0:b699e59d925b 945 }
nz 0:b699e59d925b 946 setFgColor(colorBG);
nz 0:b699e59d925b 947 setColor(colorTXT);
nz 0:b699e59d925b 948 Write32(RAM_CMD, CMD_KEYS);
nz 0:b699e59d925b 949 Write16(RAM_CMD, x);
nz 0:b699e59d925b 950 Write16(RAM_CMD, y);
nz 0:b699e59d925b 951 Write16(RAM_CMD, w);
nz 0:b699e59d925b 952 Write16(RAM_CMD, h);
nz 0:b699e59d925b 953 if(font>31)font=31;
nz 0:b699e59d925b 954 if(font<16)font=16;
nz 0:b699e59d925b 955 Write16(RAM_CMD, font);
nz 0:b699e59d925b 956 Write16(RAM_CMD, option);
nz 0:b699e59d925b 957 drawString(s);
nz 0:b699e59d925b 958 tagMask(0);
nz 0:b699e59d925b 959 }
nz 0:b699e59d925b 960 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 961 // Scroll bar - if w>h: horizontal else: vertical
nz 0:b699e59d925b 962 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 963 void FT800::drawScrollBar(int16_t x, int16_t y, uint16_t w, uint16_t h, uint32_t colorBG, uint32_t colorSCR,
nz 0:b699e59d925b 964 uint16_t option, uint16_t value, uint16_t size, uint16_t range, uint8_t tag)
nz 0:b699e59d925b 965 {
nz 0:b699e59d925b 966 if(tag)
nz 0:b699e59d925b 967 {
nz 0:b699e59d925b 968 tagMask(1);
nz 0:b699e59d925b 969 track(x,y,w,h,tag);
nz 0:b699e59d925b 970 }
nz 0:b699e59d925b 971 setFgColor(colorBG);
nz 0:b699e59d925b 972 setBgColor(colorSCR);
nz 0:b699e59d925b 973 Write32(RAM_CMD, CMD_SCROLLBAR);
nz 0:b699e59d925b 974 Write16(RAM_CMD, x);
nz 0:b699e59d925b 975 Write16(RAM_CMD, y);
nz 0:b699e59d925b 976 Write16(RAM_CMD, w);
nz 0:b699e59d925b 977 Write16(RAM_CMD, h);
nz 0:b699e59d925b 978 Write16(RAM_CMD, option);
nz 0:b699e59d925b 979 Write16(RAM_CMD, value);
nz 0:b699e59d925b 980 Write16(RAM_CMD, size);
nz 0:b699e59d925b 981 Write16(RAM_CMD, range);
nz 0:b699e59d925b 982 tagMask(0);
nz 0:b699e59d925b 983 }
nz 0:b699e59d925b 984 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 985 // Draw Toggle button
nz 0:b699e59d925b 986 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 987 void FT800::drawToggle(int16_t x, int16_t y, uint16_t w, uint8_t font,
nz 0:b699e59d925b 988 uint16_t option, uint32_t colorKnob, uint32_t colorBCG, uint32_t colorTXT,
nz 0:b699e59d925b 989 uint16_t state, const char *s, uint8_t tag)
nz 0:b699e59d925b 990 {
nz 0:b699e59d925b 991 if(tag)
nz 0:b699e59d925b 992 {
nz 0:b699e59d925b 993 tagMask(1);
nz 0:b699e59d925b 994 track(x,y,w,font,tag);
nz 0:b699e59d925b 995 }
nz 0:b699e59d925b 996 setFgColor(colorKnob);
nz 0:b699e59d925b 997 setBgColor(colorBCG);
nz 0:b699e59d925b 998 setColor(colorTXT);
nz 0:b699e59d925b 999 Write32(RAM_CMD, CMD_TOGGLE);
nz 0:b699e59d925b 1000 Write16(RAM_CMD, x);
nz 0:b699e59d925b 1001 Write16(RAM_CMD, y);
nz 0:b699e59d925b 1002 Write16(RAM_CMD, w);
nz 0:b699e59d925b 1003 if(font>31)font=31;
nz 0:b699e59d925b 1004 if(font<16)font=16;
nz 0:b699e59d925b 1005 Write16(RAM_CMD, font);
nz 0:b699e59d925b 1006 Write16(RAM_CMD, option);
nz 0:b699e59d925b 1007 Write16(RAM_CMD, state);
nz 0:b699e59d925b 1008 drawString(s);
nz 0:b699e59d925b 1009 tagMask(0);
nz 0:b699e59d925b 1010 }
nz 0:b699e59d925b 1011 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 1012 // Draw Slider - if w>h: horizontal else: vertical
nz 0:b699e59d925b 1013 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 1014 void FT800::drawSlider(int16_t x, int16_t y, uint16_t w, uint16_t h, uint16_t option,
nz 0:b699e59d925b 1015 uint32_t colorR, uint32_t colorKnob, uint32_t colorL, uint16_t value, uint16_t range, uint8_t tag)
nz 0:b699e59d925b 1016 {
nz 0:b699e59d925b 1017 if(tag)
nz 0:b699e59d925b 1018 {
nz 0:b699e59d925b 1019 tagMask(1);
nz 0:b699e59d925b 1020 track(x,y,w,h,tag);
nz 0:b699e59d925b 1021 }
nz 0:b699e59d925b 1022 setColor(colorR);
nz 0:b699e59d925b 1023 setFgColor(colorKnob);
nz 0:b699e59d925b 1024 setBgColor(colorL);
nz 0:b699e59d925b 1025 Write32(RAM_CMD, CMD_SLIDER);
nz 0:b699e59d925b 1026 Write16(RAM_CMD, x);
nz 0:b699e59d925b 1027 Write16(RAM_CMD, y);
nz 0:b699e59d925b 1028 Write16(RAM_CMD, w);
nz 0:b699e59d925b 1029 Write16(RAM_CMD, h);
nz 0:b699e59d925b 1030 Write16(RAM_CMD, option);
nz 0:b699e59d925b 1031 Write16(RAM_CMD, value);
nz 0:b699e59d925b 1032 Write16(RAM_CMD, range);
nz 0:b699e59d925b 1033 Write16(RAM_CMD, 0);
nz 0:b699e59d925b 1034 tagMask(0);
nz 0:b699e59d925b 1035 }
nz 0:b699e59d925b 1036 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 1037 // Draw Progress bar - if w>h: horizontal else: vertical
nz 0:b699e59d925b 1038 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 1039 void FT800::drawProgress(int16_t x, int16_t y, uint16_t w, uint16_t h, uint16_t option,
nz 0:b699e59d925b 1040 uint32_t colorBCG, uint32_t colorPRO, uint16_t value, uint16_t range, uint8_t tag)
nz 0:b699e59d925b 1041 {
nz 0:b699e59d925b 1042 if(tag)
nz 0:b699e59d925b 1043 {
nz 0:b699e59d925b 1044 tagMask(1);
nz 0:b699e59d925b 1045 track(x,y,w,h,tag);
nz 0:b699e59d925b 1046 }
nz 0:b699e59d925b 1047 setColor(colorBCG);
nz 0:b699e59d925b 1048 setBgColor(colorPRO);
nz 0:b699e59d925b 1049 Write32(RAM_CMD, CMD_PROGRESS);
nz 0:b699e59d925b 1050 Write16(RAM_CMD, x);
nz 0:b699e59d925b 1051 Write16(RAM_CMD, y);
nz 0:b699e59d925b 1052 Write16(RAM_CMD, w);
nz 0:b699e59d925b 1053 Write16(RAM_CMD, h);
nz 0:b699e59d925b 1054 Write16(RAM_CMD, option);
nz 0:b699e59d925b 1055 Write16(RAM_CMD, value);
nz 0:b699e59d925b 1056 Write16(RAM_CMD, range);
nz 0:b699e59d925b 1057 Write16(RAM_CMD, 0); // align to 32
nz 0:b699e59d925b 1058 tagMask(0);
nz 0:b699e59d925b 1059 }
nz 5:b28ce8616b41 1060
nz 4:5bcc69cb157a 1061 //-----------------------------------------------------------------------------------
nz 5:b28ce8616b41 1062 // Write graphic RAM_G with 1 byte per pixel
nz 0:b699e59d925b 1063 //-----------------------------------------------------------------------------------
nz 5:b28ce8616b41 1064 void FT800::writeRAMG(uint32_t addr, const uint8_t data[], uint32_t lng)
nz 5:b28ce8616b41 1065 {
nz 5:b28ce8616b41 1066 uint32_t i;
nz 5:b28ce8616b41 1067 _ss = 0;
nz 5:b28ce8616b41 1068 WriteAddress(addr, ADWRITE);
nz 5:b28ce8616b41 1069 for(i = 0; i < lng; i++) _spi.write(data[i]);
nz 5:b28ce8616b41 1070 _ss = 1;
nz 5:b28ce8616b41 1071 }
nz 5:b28ce8616b41 1072 //-----------------------------------------------------------------------------------
nz 5:b28ce8616b41 1073 // Write graphic RAM with 2 bytes per pixel (uint_6t)
nz 5:b28ce8616b41 1074 //-----------------------------------------------------------------------------------
nz 5:b28ce8616b41 1075 void FT800::writeRAMG16(uint32_t addr, const uint16_t data[], uint16_t lng)
nz 4:5bcc69cb157a 1076 {
nz 4:5bcc69cb157a 1077 uint16_t i;
nz 4:5bcc69cb157a 1078 _ss = 0;
nz 4:5bcc69cb157a 1079 WriteAddress(addr, ADWRITE);
nz 5:b28ce8616b41 1080 for(i = 0; i < lng; i++)
nz 4:5bcc69cb157a 1081 {
nz 5:b28ce8616b41 1082 _spi.write( data[i] & 0x00FF); // first byte //_spi.write((data[i] & 0xFF00)>>8);
nz 5:b28ce8616b41 1083 _spi.write((data[i] & 0xFF00)>>8); // second byte //_spi.write( data[i] & 0x00FF);
nz 0:b699e59d925b 1084 }
nz 0:b699e59d925b 1085 _ss = 1;
nz 0:b699e59d925b 1086 }
nz 0:b699e59d925b 1087 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 1088 // Draw Char16, n- Number(or Unicode) of Char
nz 0:b699e59d925b 1089 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 1090 void FT800::drawChar16(int16_t x, int16_t y, const uint16_t font[], uint16_t n)
nz 0:b699e59d925b 1091 {
nz 0:b699e59d925b 1092 uint16_t address; // font[1]- start address, 0
nz 0:b699e59d925b 1093 address = font[1] + font[2]*(n - font[3]); // font[2]- next, 40 bytes per char
nz 0:b699e59d925b 1094 // font[3]=31, offset
nz 0:b699e59d925b 1095 bitmapSource(address); // read bitmap
nz 0:b699e59d925b 1096 bitmapLayout(L1, 2, 20); // font[4], font[5], font[6]
nz 0:b699e59d925b 1097 bitmapSize(NEAREST, BORDER, BORDER, 10, 20); // font[7], font[8]
nz 0:b699e59d925b 1098 Write32(RAM_CMD, 0x1F000001); // begin Bitmap
nz 0:b699e59d925b 1099 Vertex2II(x, y, 0, 0);
nz 0:b699e59d925b 1100 Write32(RAM_CMD, 0x21000000); // end
nz 0:b699e59d925b 1101 }
nz 0:b699e59d925b 1102 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 1103 // Draw Char16, n- Number(or Unicode) of Char, with color & scale
nz 0:b699e59d925b 1104 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 1105 void FT800::drawChar16(int16_t x, int16_t y, uint32_t color, int16_t scl, uint16_t n)
nz 0:b699e59d925b 1106 {
nz 0:b699e59d925b 1107 uint16_t start;
nz 0:b699e59d925b 1108 if (n > 1039) n -= 784;
nz 0:b699e59d925b 1109 start = 40*(n - 32);
nz 0:b699e59d925b 1110
nz 0:b699e59d925b 1111 Write32(RAM_CMD, 0x04000000|(color&0x00FFFFFF));// set color
nz 0:b699e59d925b 1112 bitmapSource(start); //
nz 0:b699e59d925b 1113 bitmapLayout(L1, 2, 20);
nz 0:b699e59d925b 1114 if (scl == 2) {
nz 0:b699e59d925b 1115 Write32(RAM_CMD, 0x15000080); // 128->0x80
nz 0:b699e59d925b 1116 Write32(RAM_CMD, 0x19000080); // 128->0x80
nz 0:b699e59d925b 1117 }
nz 0:b699e59d925b 1118 if (scl == 1) {
nz 0:b699e59d925b 1119 Write32(RAM_CMD, 0x15000100); // 256->0x100
nz 0:b699e59d925b 1120 Write32(RAM_CMD, 0x19000100); // 256->0x100
nz 0:b699e59d925b 1121 }
nz 0:b699e59d925b 1122 bitmapSize(NEAREST, BORDER, BORDER, 10*scl,20*scl);
nz 0:b699e59d925b 1123 Write32(RAM_CMD, 0x1F000001); // begin Bitmap
nz 0:b699e59d925b 1124 Vertex2II(x, y, 0, 0);
nz 0:b699e59d925b 1125 Write32(RAM_CMD, 0x21000000); // end
nz 0:b699e59d925b 1126 }
nz 0:b699e59d925b 1127
nz 0:b699e59d925b 1128
nz 0:b699e59d925b 1129 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 1130 // Run Touch screen Calibration
nz 0:b699e59d925b 1131 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 1132 void FT800::runTouchCalibration(void)
nz 0:b699e59d925b 1133 {
nz 0:b699e59d925b 1134 Write32(RAM_CMD, CMD_CALIBRATE);
nz 0:b699e59d925b 1135 }
nz 0:b699e59d925b 1136
nz 0:b699e59d925b 1137 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 1138 // Draw Animated Spinner
nz 0:b699e59d925b 1139 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 1140 void FT800::drawAnimSpinner(int16_t x, int16_t y, uint8_t style, uint8_t scale)
nz 0:b699e59d925b 1141 {
nz 0:b699e59d925b 1142 Write32(RAM_CMD, CMD_SPINNER);
nz 0:b699e59d925b 1143 Write16(RAM_CMD, x);
nz 0:b699e59d925b 1144 Write16(RAM_CMD, y);
nz 0:b699e59d925b 1145 if(style>3) style=0;
nz 0:b699e59d925b 1146 Write16(RAM_CMD, style);
nz 0:b699e59d925b 1147 Write16(RAM_CMD, scale);
nz 0:b699e59d925b 1148 }
nz 0:b699e59d925b 1149
nz 0:b699e59d925b 1150 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 1151 // Draw FTDI animated Lgo
nz 0:b699e59d925b 1152 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 1153 void FT800::drawLogo(void)
nz 0:b699e59d925b 1154 {
nz 0:b699e59d925b 1155 Write32(RAM_CMD, CMD_LOGO);
nz 0:b699e59d925b 1156 }
nz 0:b699e59d925b 1157
nz 0:b699e59d925b 1158 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 1159 // Wait Logo to finish
nz 0:b699e59d925b 1160 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 1161 void FT800::waitLogo(void)
nz 0:b699e59d925b 1162 {
nz 0:b699e59d925b 1163 Write16(REG_CMD_WRITE, get_CMD_Offset()); //executeCommands();
nz 0:b699e59d925b 1164 Sleep(1); //DELAY(1);
nz 0:b699e59d925b 1165 while((Read16(REG_CMD_WRITE) != 0));
nz 0:b699e59d925b 1166 Sleep(1); //DELAY(1);
nz 0:b699e59d925b 1167 finishList();
nz 0:b699e59d925b 1168 }
nz 0:b699e59d925b 1169
nz 0:b699e59d925b 1170 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 1171 // Draw Screensaver
nz 0:b699e59d925b 1172 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 1173 void FT800::drawScreensaver(void)
nz 0:b699e59d925b 1174 {
nz 0:b699e59d925b 1175 Write32(RAM_CMD, CMD_SCREENSAVER);
nz 0:b699e59d925b 1176 }
nz 0:b699e59d925b 1177
nz 0:b699e59d925b 1178 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 1179 // Draw Sketch
nz 0:b699e59d925b 1180 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 1181 void FT800::drawSketch(int16_t x, int16_t y, uint16_t w, uint16_t h, uint32_t pointer, uint16_t format)
nz 0:b699e59d925b 1182 {
nz 0:b699e59d925b 1183 Write32(RAM_CMD, CMD_SKETCH);
nz 0:b699e59d925b 1184 Write16(RAM_CMD, x);
nz 0:b699e59d925b 1185 Write16(RAM_CMD, y);
nz 0:b699e59d925b 1186 Write16(RAM_CMD, w);
nz 0:b699e59d925b 1187 Write16(RAM_CMD, h);
nz 0:b699e59d925b 1188 Write32(RAM_CMD, pointer);
nz 0:b699e59d925b 1189 Write16(RAM_CMD, format);
nz 0:b699e59d925b 1190 Write16(RAM_CMD, 0x0000); //align
nz 0:b699e59d925b 1191 }
nz 0:b699e59d925b 1192
nz 0:b699e59d925b 1193 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 1194 // Macro
nz 0:b699e59d925b 1195 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 1196 void FT800::macro(uint8_t m)
nz 0:b699e59d925b 1197 {
nz 0:b699e59d925b 1198 uint32_t macro = 0x25000000;
nz 0:b699e59d925b 1199
nz 0:b699e59d925b 1200 macro |= (m&0x01);
nz 0:b699e59d925b 1201 Write32(RAM_CMD, macro);
nz 0:b699e59d925b 1202 }
nz 0:b699e59d925b 1203
nz 0:b699e59d925b 1204 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 1205 // Stop Spinner, Screensaver or Sketch
nz 0:b699e59d925b 1206 //-----------------------------------------------------------------------------------
nz 0:b699e59d925b 1207 void FT800::stop(void)
nz 0:b699e59d925b 1208 {
nz 0:b699e59d925b 1209 Write32(RAM_CMD, CMD_STOP);
nz 0:b699e59d925b 1210 }