Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of FT800_3 by
FT_Hal_Utils.cpp
- Committer:
- dreschpe
- Date:
- 2015-02-10
- Revision:
- 6:16e22c789f7d
- Parent:
- 5:c0ffdb08b8a5
File content as of revision 6:16e22c789f7d:
#include "FT_Platform.h" #include "mbed.h" /* function to load jpg file from filesystem */ /* return 0 if jpg is ok */ /* return x_size and y_size of jpg */ int FT800::Load_jpg(char* filename, ft_int16_t* x_size, ft_int16_t* y_size) { unsigned char pbuff[8291]; unsigned short marker; unsigned short length; unsigned char data[4]; ft_uint16_t blocklen; FILE *fp = fopen(filename, "r"); if(fp == NULL) return (-1); // connot open file // search for 0xFFC0 marker fseek(fp, 0, SEEK_END); unsigned int Fsize = ftell(fp); fseek(fp, 2, SEEK_SET); fread(data,4,1,fp); marker = data[0] << 8 | data[1]; length = data[2] << 8 | data[3]; do { if(marker == 0xFFC0) break; if(marker & 0xFF00 != 0xFF00) break; if (fseek(fp, length - 2,SEEK_CUR) != 0) break; fread(data,4,1,fp); marker = data[0] << 8 | data[1]; length = data[2] << 8 | data[3]; } while(1); if(marker != 0xFFC0) return (-2); // no FFC0 Marker, wrong format no baseline DCT-based JPEG fseek(fp, 1,SEEK_CUR); fread(data,4,1,fp); *y_size = (data[0] << 8 | data[1]); *x_size = (data[2] << 8 | data[3]); //if(*x_size > DispWidth || *y_size > DispHeight) return (-3); // to big to fit on screen fseek(fp, 0, SEEK_SET); WrCmd32(CMD_LOADIMAGE); // load a JPEG image WrCmd32(0); //destination address of jpg decode WrCmd32(0); //output format of the bitmap - default is rgb565 while(Fsize > 0) { /* download the data into the command buffer by 8kb one shot */ blocklen = Fsize>8192?8192:Fsize; /* copy the data into pbuff and then transfter it to command buffer */ fread(pbuff,1,blocklen,fp); Fsize -= blocklen; /* copy data continuously into command memory */ WrCmdBuf(pbuff, blocklen); //alignment is already taken care by this api } fclose(fp); return(0); } /* calibrate touch */ ft_void_t FT800::Calibrate() { /*************************************************************************/ /* Below code demonstrates the usage of calibrate function. Calibrate */ /* function will wait untill user presses all the three dots. Only way to*/ /* come out of this api is to reset the coprocessor bit. */ /*************************************************************************/ { DLstart(); // start a new display command list DL(CLEAR_COLOR_RGB(64,64,64)); // set the clear color R, G, B DL(CLEAR(1,1,1)); // clear buffers -> color buffer,stencil buffer, tag buffer DL(COLOR_RGB(0xff,0xff,0xff)); // set the current color R, G, B Text((DispWidth/2), (DispHeight/2), 27, OPT_CENTER, "Please Tap on the dot"); // draw Text at x,y, font 27, centered Calibrate(0); // start the calibration of touch screen Flush_Co_Buffer(); // download the commands into FT800 FIFO WaitCmdfifo_empty(); // Wait till coprocessor completes the operation } } /* API to give fadeout effect by changing the display PWM from 100 till 0 */ ft_void_t FT800::fadeout() { ft_int32_t i; for (i = 100; i >= 0; i -= 3) { Wr8(REG_PWM_DUTY,i); Sleep(2);//sleep for 2 ms } } /* API to perform display fadein effect by changing the display PWM from 0 till 100 and finally 128 */ ft_void_t FT800::fadein() { ft_int32_t i; for (i = 0; i <=100 ; i += 3) { Wr8(REG_PWM_DUTY,i); Sleep(2);//sleep for 2 ms } /* Finally make the PWM 100% */ i = 128; Wr8(REG_PWM_DUTY,i); } ft_void_t FT800::read_calibrate(ft_uint8_t data[24]){ unsigned int i; for(i=0;i<24;i++){ data[i] = Rd8(REG_TOUCH_TRANSFORM_A + i); } } ft_void_t FT800::write_calibrate(ft_uint8_t data[24]){ unsigned int i; for(i=0;i<24;i++) { Wr8(REG_TOUCH_TRANSFORM_A + i,data[i]); } } ft_uint32_t FT800::color_rgb(ft_uint8_t red,ft_uint8_t green, ft_uint8_t blue){ return ((4UL<<24)|(((red)&255UL)<<16)|(((green)&255UL)<<8)|(((blue)&255UL)<<0)); } ft_uint32_t FT800::clear_color_rgb(ft_uint8_t red,ft_uint8_t green, ft_uint8_t blue){ return ((2UL<<24)|(((red)&255UL)<<16)|(((green)&255UL)<<8)|(((blue)&255UL)<<0)); }