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.
Dependents: FT810_RGB_demo FT81x_TripComp_test FT810_LoadJPG
Fork of FT800_2 by
FT_Hal_Utils.cpp
- Committer:
- davidchilds
- Date:
- 2016-02-24
- Revision:
- 7:a69ac4d39afd
- Parent:
- 6:16e22c789f7d
File content as of revision 7:a69ac4d39afd:
#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));
}
