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:
Sun Dec 20 23:27:17 2020 +0000
Revision:
4:5bcc69cb157a
Parent:
0:b699e59d925b
Child:
5:b28ce8616b41
add function writeGraphRAM8

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