The Best / Mbed 2 deprecated FT810_LoadJPG

Dependencies:   FT800_3 SDFileSystem mbed

Committer:
montgojj
Date:
Tue Mar 29 15:33:47 2016 +0000
Revision:
0:d53f428d8f41
Child:
1:9221588f4198
Displays JPG named Logo on SD card

Who changed what in which revision?

UserRevisionLine numberNew contents of line
montgojj 0:d53f428d8f41 1 /* Demo for mbed Library for FTDI FT800 Enbedded Video Engine "EVE"
montgojj 0:d53f428d8f41 2 * to show jpg file handling
montgojj 0:d53f428d8f41 3 * c by Peter Drescher, DC2PD 2014
montgojj 0:d53f428d8f41 4 * Released under the MIT License: http://mbed.org/license/mit */
montgojj 0:d53f428d8f41 5 #include "mbed.h"
montgojj 0:d53f428d8f41 6 #include "FT_Platform.h"
montgojj 0:d53f428d8f41 7 #include "FT_color.h"
montgojj 0:d53f428d8f41 8 #include "stdio.h"
montgojj 0:d53f428d8f41 9 #include "float.h"
montgojj 0:d53f428d8f41 10 #include "SDFileSystem.h"
montgojj 0:d53f428d8f41 11
montgojj 0:d53f428d8f41 12 #define SAMAPP_DELAY_BTW_APIS (1000)
montgojj 0:d53f428d8f41 13 #define SAMAPP_ENABLE_DELAY() Ft_Gpu_Hal_Sleep(SAMAPP_DELAY_BTW_APIS)
montgojj 0:d53f428d8f41 14 #define SAMAPP_ENABLE_DELAY_VALUE(x) Ft_Gpu_Hal_Sleep(x)
montgojj 0:d53f428d8f41 15
montgojj 0:d53f428d8f41 16 FT800 TFT(D11,D12,D13,D9,D8,D14);
montgojj 0:d53f428d8f41 17 SDFileSystem sd(D11, D12, D13, D10, "sd");
montgojj 0:d53f428d8f41 18
montgojj 0:d53f428d8f41 19 // global Vars
montgojj 0:d53f428d8f41 20 unsigned int r, b, g;
montgojj 0:d53f428d8f41 21 char buffer[50];
montgojj 0:d53f428d8f41 22
montgojj 0:d53f428d8f41 23
montgojj 0:d53f428d8f41 24 void hsv2rgb(double H,double S, double V)
montgojj 0:d53f428d8f41 25 {
montgojj 0:d53f428d8f41 26 double f,h,p,q,t;
montgojj 0:d53f428d8f41 27 int i;
montgojj 0:d53f428d8f41 28 if( S == 0.0) {
montgojj 0:d53f428d8f41 29 r = V * 255;
montgojj 0:d53f428d8f41 30 g = V * 255;
montgojj 0:d53f428d8f41 31 b = V * 255;
montgojj 0:d53f428d8f41 32 return;
montgojj 0:d53f428d8f41 33 }
montgojj 0:d53f428d8f41 34 if(H > 480.0) H = 0.0; // check values
montgojj 0:d53f428d8f41 35 if(S > 1.0) S = 1.0;
montgojj 0:d53f428d8f41 36 if(S < 0.0) S = 0.0;
montgojj 0:d53f428d8f41 37 if(V > 1.0) V = 1.0;
montgojj 0:d53f428d8f41 38 if(V < 0.0) V = 0.0;
montgojj 0:d53f428d8f41 39
montgojj 0:d53f428d8f41 40 h = H / 60.0;
montgojj 0:d53f428d8f41 41 i = (int) h;
montgojj 0:d53f428d8f41 42 f = h - i;
montgojj 0:d53f428d8f41 43 p = V * (1.0 - S);
montgojj 0:d53f428d8f41 44 q = V * (1.0 - (S * f));
montgojj 0:d53f428d8f41 45 t = V * (1.0 - (S * (1.0 - f)));
montgojj 0:d53f428d8f41 46
montgojj 0:d53f428d8f41 47 switch(i) {
montgojj 0:d53f428d8f41 48 case 0:
montgojj 0:d53f428d8f41 49 r = V * 255;
montgojj 0:d53f428d8f41 50 g = t * 255;
montgojj 0:d53f428d8f41 51 b = p * 255;
montgojj 0:d53f428d8f41 52 break;
montgojj 0:d53f428d8f41 53 case 1:
montgojj 0:d53f428d8f41 54 r = q * 255;
montgojj 0:d53f428d8f41 55 g = V * 255;
montgojj 0:d53f428d8f41 56 b = p * 255;
montgojj 0:d53f428d8f41 57 break;
montgojj 0:d53f428d8f41 58 case 2:
montgojj 0:d53f428d8f41 59 r = p * 255;
montgojj 0:d53f428d8f41 60 g = V * 255;
montgojj 0:d53f428d8f41 61 b = t * 255;
montgojj 0:d53f428d8f41 62 break;
montgojj 0:d53f428d8f41 63 case 3:
montgojj 0:d53f428d8f41 64 r = p * 255;
montgojj 0:d53f428d8f41 65 g = q * 255;
montgojj 0:d53f428d8f41 66 b = V * 255;
montgojj 0:d53f428d8f41 67 break;
montgojj 0:d53f428d8f41 68 case 4:
montgojj 0:d53f428d8f41 69 r = t * 255;
montgojj 0:d53f428d8f41 70 g = p * 255;
montgojj 0:d53f428d8f41 71 b = V * 255;
montgojj 0:d53f428d8f41 72 break;
montgojj 0:d53f428d8f41 73 case 5:
montgojj 0:d53f428d8f41 74 default:
montgojj 0:d53f428d8f41 75 r = V * 255;
montgojj 0:d53f428d8f41 76 g = p * 255;
montgojj 0:d53f428d8f41 77 b = q * 255;
montgojj 0:d53f428d8f41 78 break;
montgojj 0:d53f428d8f41 79 }
montgojj 0:d53f428d8f41 80 }
montgojj 0:d53f428d8f41 81 /* function to load jpg file from internal filesystem */
montgojj 0:d53f428d8f41 82 /* into FT800 buffer and decode JPG to bitmap */
montgojj 0:d53f428d8f41 83 /* return 0 if jpg is ok */
montgojj 0:d53f428d8f41 84 /* return x_size and y_size of jpg */
montgojj 0:d53f428d8f41 85
montgojj 0:d53f428d8f41 86 int main()
montgojj 0:d53f428d8f41 87 {
montgojj 0:d53f428d8f41 88 ft_int16_t x_size,y_size;
montgojj 0:d53f428d8f41 89 int err;
montgojj 0:d53f428d8f41 90
montgojj 0:d53f428d8f41 91 TFT.MemWrite(REG_ROTATE, 1);
montgojj 0:d53f428d8f41 92 TFT.Rotate(1);
montgojj 0:d53f428d8f41 93
montgojj 0:d53f428d8f41 94 TFT.DLstart(); // start a new display command list
montgojj 0:d53f428d8f41 95 TFT.DL(CLEAR_COLOR_RGB(255,255,255)); // set the clear color to white
montgojj 0:d53f428d8f41 96 TFT.DL(CLEAR(1,1,1)); // clear buffers -> color buffer,stencil buffer, tag buffe
montgojj 0:d53f428d8f41 97
montgojj 0:d53f428d8f41 98 err = TFT.Load_jpg("/sd/Logo.jpg",& x_size,& y_size); // load graphic data into buffer and decode jpg to bitmap
montgojj 0:d53f428d8f41 99 if(err != 0) { // something is wrong - display error
montgojj 0:d53f428d8f41 100 TFT.DL(COLOR_RGB(0,0,0)); // set current color
montgojj 0:d53f428d8f41 101 TFT.Text(TFT.DispWidth/2, TFT.DispHeight/2, 25, OPT_CENTERX, "Error"); // draw Text with font 31
montgojj 0:d53f428d8f41 102 TFT.Number(50,50,25,OPT_SIGNED,err);
montgojj 0:d53f428d8f41 103
montgojj 0:d53f428d8f41 104 } else { // jpg is loaded and decoded into bitmap
montgojj 0:d53f428d8f41 105
montgojj 0:d53f428d8f41 106 TFT.DL(BEGIN(BITMAPS));
montgojj 0:d53f428d8f41 107 TFT.LoadIdentity();
montgojj 0:d53f428d8f41 108 //TFT.Ft_Gpu_CoCmd_Rotate((45*65536/360));//rotate by 45 degrees anticlock wise
montgojj 0:d53f428d8f41 109 //TFT.Ft_Gpu_CoCmd_Scale(32768,32768);//scale by 2x2
montgojj 0:d53f428d8f41 110 TFT.SetMatrix();
montgojj 0:d53f428d8f41 111 TFT.DL(VERTEX2F(0,0));
montgojj 0:d53f428d8f41 112
montgojj 0:d53f428d8f41 113 /*TFT.DL(DISPLAY()); // Display the image
montgojj 0:d53f428d8f41 114 TFT.Swap(); // Swap the current display list
montgojj 0:d53f428d8f41 115 TFT.Flush_Co_Buffer(); // Download the command list into fifo
montgojj 0:d53f428d8f41 116 TFT.WaitCmdfifo_empty(); // Wait till coprocessor completes the operation*/
montgojj 0:d53f428d8f41 117
montgojj 0:d53f428d8f41 118 /* wait(2);
montgojj 0:d53f428d8f41 119 TFT.DL(BEGIN(BITMAPS));
montgojj 0:d53f428d8f41 120 TFT.LoadIdentity();
montgojj 0:d53f428d8f41 121 //TFT.Ft_Gpu_CoCmd_Rotate((45*65536/360));//rotate by 45 degrees anticlock wise
montgojj 0:d53f428d8f41 122 //TFT.Ft_Gpu_CoCmd_Scale(32768,32768);//scale by 2x2
montgojj 0:d53f428d8f41 123 TFT.SetMatrix();
montgojj 0:d53f428d8f41 124 TFT.DL(VERTEX2F(0,0));*/
montgojj 0:d53f428d8f41 125 }
montgojj 0:d53f428d8f41 126 TFT.DL(DISPLAY()); // Display the image
montgojj 0:d53f428d8f41 127 TFT.Swap(); // Swap the current display list
montgojj 0:d53f428d8f41 128 TFT.Flush_Co_Buffer(); // Download the command list into fifo
montgojj 0:d53f428d8f41 129 TFT.WaitCmdfifo_empty(); // Wait till coprocessor completes the operation
montgojj 0:d53f428d8f41 130 }
montgojj 0:d53f428d8f41 131
montgojj 0:d53f428d8f41 132
montgojj 0:d53f428d8f41 133