Animation demo with MIP8F_SPI_Ver60

Dependencies:   mbed MIP8F_SPI_Ver60 MIP8f_FRDM_LineBuffer_sample MIP8f_FRDM_TransferMode_sample

Introduction

Animation Demo. Some Goldfish swin in water, from left to right, from bottom to top. Color and monochrome version

Only for LPM027M128x (400x240) ,JDI DIsplay.

Other information , please refer to https://os.mbed.com/teams/JapanDisplayInc/code/MIP8f_FRDM_sample/

Usage

Copy Setting File and Image to micro SD-CARD. you can NOT use same sample color images of OTHER VERSION SAMPLE.

a) Download the following file corresponding to the target panel, and rename file identifier (.bin -> .zip), and unzip the file on micro SD Card's root directory.

LPM027M128x (400x240) :/media/uploads/JDI_Mbed_Team/goldfish_400x240.bin

b) Insert micro SD-CARD to FRDM-K64F. c) Upload binary file to FRDM-K64F.and push Reset Button.

Other information

refer to Usage on https://os.mbed.com/teams/JapanDisplayInc/code/MIP8f_FRDM_sample/

this Sample Code (.bin)

/media/uploads/JDI_Mbed_Team/mip8f_frdm_animation_sample.k64f.bin

Committer:
JDI_Mbed_Team
Date:
Thu Nov 22 07:46:49 2018 +0000
Revision:
21:d1beeb6c4a53
Parent:
20:1129e4e1ab76
bug fixed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JDI_Mbed_Team 0:33fe30a2b785 1 /**
JDI_Mbed_Team 1:e5796aa9f1aa 2 * @file main.cpp
JDI_Mbed_Team 19:487e9b5ed392 3 * @brief Ver6.0 Sample source code for MIP8 diplay.
JDI_Mbed_Team 1:e5796aa9f1aa 4 * @details
JDI_Mbed_Team 19:487e9b5ed392 5 * Ver6.0 Addtional function is Animation sample code. goldfish swin form left to right, from bottom to top.
JDI_Mbed_Team 16:7c472f8a81a5 6 * Ver5.0 Addtional function is checking the refresh display speed between 4bit,3bit and 1bit transfer mode
JDI_Mbed_Team 12:40156f03a763 7 * Ver4.0 Addtional function is Line buffer version.the Sample bitmap display color and monochrome by line buffer.
JDI_Mbed_Team 10:167df76b02d0 8 * Ver3.0 Addtional function is font display. this demo code is the nunber is counted up like a meter panel
JDI_Mbed_Team 7:c7a676157b4d 9 * ver2.0 Addtional function is Monochome display by 1bit mode of SPI transfer.
JDI_Mbed_Team 1:e5796aa9f1aa 10 *
JDI_Mbed_Team 1:e5796aa9f1aa 11 * spi-transfer to Display has 3 mode.
JDI_Mbed_Team 14:9d58f49f326f 12 * 4bit mode is color display, this bit arrange is R,G,B,x. R,G,B = R,G,B subpixel bit. x bit is Dummy.
JDI_Mbed_Team 14:9d58f49f326f 13 * 3bit mode is color display, this bit arrange is R,G,B. R,G,B = R,G,B subpixel bit. No bit is Dummy.
JDI_Mbed_Team 1:e5796aa9f1aa 14 * 1bit mode is monocrome display,high speed refresh mode. a only Green subpixel of bitmap data is transfered.
JDI_Mbed_Team 1:e5796aa9f1aa 15 * <License>
JDI_Mbed_Team 1:e5796aa9f1aa 16 * Copyright 2018 Japan Display Inc.
JDI_Mbed_Team 1:e5796aa9f1aa 17 * Licensed under the Apache License, Version 2.0 (the "License");
JDI_Mbed_Team 1:e5796aa9f1aa 18 * you may not use this file except in compliance with the License.
JDI_Mbed_Team 1:e5796aa9f1aa 19 * You may obtain a copy of the License at
JDI_Mbed_Team 1:e5796aa9f1aa 20 *
JDI_Mbed_Team 1:e5796aa9f1aa 21 * http://www.apache.org/licenses/LICENSE-2.0
JDI_Mbed_Team 1:e5796aa9f1aa 22 *
JDI_Mbed_Team 1:e5796aa9f1aa 23 * Unless required by applicable law or agreed to in writing, software
JDI_Mbed_Team 1:e5796aa9f1aa 24 * distributed under the License is distributed on an "AS IS" BASIS,
JDI_Mbed_Team 1:e5796aa9f1aa 25 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
JDI_Mbed_Team 1:e5796aa9f1aa 26 * See the License for the specific language governing permissions and
JDI_Mbed_Team 1:e5796aa9f1aa 27 * limitations under the License.
JDI_Mbed_Team 1:e5796aa9f1aa 28 */
JDI_Mbed_Team 1:e5796aa9f1aa 29 #include "stdio.h"
JDI_Mbed_Team 0:33fe30a2b785 30 #include "string"
JDI_Mbed_Team 0:33fe30a2b785 31 #include "mbed.h"
JDI_Mbed_Team 0:33fe30a2b785 32 #include "MIP8F_SPI.h"
JDI_Mbed_Team 0:33fe30a2b785 33 #include "SDFileSystem.h"
JDI_Mbed_Team 0:33fe30a2b785 34 #include "StateSW.h"
JDI_Mbed_Team 0:33fe30a2b785 35 #include "TglSW.h"
JDI_Mbed_Team 0:33fe30a2b785 36
JDI_Mbed_Team 0:33fe30a2b785 37 #include "Arial12x12.h"
JDI_Mbed_Team 0:33fe30a2b785 38 #include "Arial24x23.h"
JDI_Mbed_Team 0:33fe30a2b785 39 #include "Arial28x28.h"
JDI_Mbed_Team 7:c7a676157b4d 40 #include "Arial37x36.h"
JDI_Mbed_Team 7:c7a676157b4d 41 #include "Arial42x42.h"
JDI_Mbed_Team 0:33fe30a2b785 42 #include "font_big.h"
JDI_Mbed_Team 7:c7a676157b4d 43 #include "Arial94x94.h"
JDI_Mbed_Team 0:33fe30a2b785 44
JDI_Mbed_Team 0:33fe30a2b785 45 #define ON 1
JDI_Mbed_Team 0:33fe30a2b785 46 #define OFF 0
JDI_Mbed_Team 0:33fe30a2b785 47
JDI_Mbed_Team 0:33fe30a2b785 48 //K64F
JDI_Mbed_Team 0:33fe30a2b785 49 SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); // mosi,miso,sck,cs
JDI_Mbed_Team 0:33fe30a2b785 50 memLCD8 WD(PTD2,PTD3,PTD1,PTD0,PTC4,PTD3); //PTC12); // mosi,miso,clk,cs,disp,power
JDI_Mbed_Team 0:33fe30a2b785 51 PwmOut BK(PTC3);
JDI_Mbed_Team 0:33fe30a2b785 52 PwmOut COM60HZ(PTC10); //add 20161108
JDI_Mbed_Team 0:33fe30a2b785 53 DigitalOut COMSEL(PTA2,0); //add 20161108
JDI_Mbed_Team 0:33fe30a2b785 54 DigitalOut BLCTRL(PTB10,0); //add 20171115
JDI_Mbed_Team 0:33fe30a2b785 55 // SW2
JDI_Mbed_Team 0:33fe30a2b785 56 StateSW swPWMorOFF(SW2); //PTC6);
JDI_Mbed_Team 0:33fe30a2b785 57 InterruptIn PWMorOFF(SW2);
JDI_Mbed_Team 0:33fe30a2b785 58 // SW3
JDI_Mbed_Team 0:33fe30a2b785 59 TglSW HaltSW(SW3); //PTA4);
JDI_Mbed_Team 0:33fe30a2b785 60 DigitalIn TexSW(SW3);
JDI_Mbed_Team 0:33fe30a2b785 61
JDI_Mbed_Team 1:e5796aa9f1aa 62 //for debug
JDI_Mbed_Team 14:9d58f49f326f 63 Serial pc(USBTX, USBRX); // tx, rx
JDI_Mbed_Team 7:c7a676157b4d 64
JDI_Mbed_Team 14:9d58f49f326f 65 void SDtex2BUF(char *filepath);
JDI_Mbed_Team 0:33fe30a2b785 66
JDI_Mbed_Team 1:e5796aa9f1aa 67 //function prototype
JDI_Mbed_Team 0:33fe30a2b785 68 void SD2BUF(char *filepath);
JDI_Mbed_Team 0:33fe30a2b785 69 void ifOFFseq(void);
JDI_Mbed_Team 0:33fe30a2b785 70 void ifswPWM(void);
JDI_Mbed_Team 0:33fe30a2b785 71 void OffSequence(void);
JDI_Mbed_Team 0:33fe30a2b785 72 void DispAllDir(const char *fsrc);
JDI_Mbed_Team 14:9d58f49f326f 73 void ReadBmp(const char *fsrc, uint32_t FileNum);
JDI_Mbed_Team 0:33fe30a2b785 74 uint32_t CntFile(const char *fsrc);
JDI_Mbed_Team 17:b1f9a00145b8 75
JDI_Mbed_Team 17:b1f9a00145b8 76 void fish_swim_RightToLeft(int y,int Speed,int No,int transfermode);
JDI_Mbed_Team 17:b1f9a00145b8 77 void fish_swim_LeftToRight(int y,int Speed,int No,int transfermode);
JDI_Mbed_Team 17:b1f9a00145b8 78 void fish_swim_BottomToTop(int x,int Speed,int No,int transfermode);
JDI_Mbed_Team 17:b1f9a00145b8 79 void fish_swim_TopToBottom(int x,int Speed,int No,int transfermode);
JDI_Mbed_Team 17:b1f9a00145b8 80 void fish_Surprise_LeftToRight(int y,int Speed,int no,int no2,int transfermode);
JDI_Mbed_Team 1:e5796aa9f1aa 81 //Grobal value
JDI_Mbed_Team 0:33fe30a2b785 82 int ifMargeTXT = 0;
JDI_Mbed_Team 0:33fe30a2b785 83 int width = 400;
JDI_Mbed_Team 0:33fe30a2b785 84 int height= 240;
JDI_Mbed_Team 0:33fe30a2b785 85
JDI_Mbed_Team 0:33fe30a2b785 86 float BKduty = 0;
JDI_Mbed_Team 0:33fe30a2b785 87 float BKjudge = 0;
JDI_Mbed_Team 0:33fe30a2b785 88 //double BKduty = 0;
JDI_Mbed_Team 0:33fe30a2b785 89 float bk_timer = 1.0;
JDI_Mbed_Team 0:33fe30a2b785 90 int blduty = 0;
JDI_Mbed_Team 0:33fe30a2b785 91 int bloff = 0;
JDI_Mbed_Team 1:e5796aa9f1aa 92 int blctrl_sel = 0; //0:40mA, 1:160mA //Y.S
JDI_Mbed_Team 7:c7a676157b4d 93 // Readed bitmap format, Color bit size = 1,4,8,(16),24,32
JDI_Mbed_Team 7:c7a676157b4d 94 uint16_t bmp_bitcount;
JDI_Mbed_Team 0:33fe30a2b785 95
JDI_Mbed_Team 17:b1f9a00145b8 96 void ReadMovieBmp(const char *fsrc, uint32_t FileNum);
JDI_Mbed_Team 17:b1f9a00145b8 97
JDI_Mbed_Team 0:33fe30a2b785 98 int main() {
JDI_Mbed_Team 0:33fe30a2b785 99
JDI_Mbed_Team 17:b1f9a00145b8 100 uint32_t filenum;
JDI_Mbed_Team 20:1129e4e1ab76 101 char filepath[60];
JDI_Mbed_Team 17:b1f9a00145b8 102 uint32_t filenum2;
JDI_Mbed_Team 20:1129e4e1ab76 103 char filepath2[60];
JDI_Mbed_Team 17:b1f9a00145b8 104 //char countup[3+1];
JDI_Mbed_Team 17:b1f9a00145b8 105 //char KMPH[4+1];
JDI_Mbed_Team 17:b1f9a00145b8 106 //char Trans[13+1];
JDI_Mbed_Team 14:9d58f49f326f 107
JDI_Mbed_Team 0:33fe30a2b785 108 sd.disk_initialize();
JDI_Mbed_Team 0:33fe30a2b785 109 HaltSW.Enable(1);
JDI_Mbed_Team 0:33fe30a2b785 110
JDI_Mbed_Team 14:9d58f49f326f 111
JDI_Mbed_Team 0:33fe30a2b785 112 FILE *fp = fopen("/sd/settings2.txt", "rb"); //read binary
JDI_Mbed_Team 0:33fe30a2b785 113 if(fp != NULL) {
JDI_Mbed_Team 0:33fe30a2b785 114 fscanf(fp, "%d",&width); //width read
JDI_Mbed_Team 0:33fe30a2b785 115 fscanf(fp, "%d",&height); //height read
JDI_Mbed_Team 0:33fe30a2b785 116 fscanf(fp, "%d",&blctrl_sel);//blct_sel read //0:40mA, 1:160mA
JDI_Mbed_Team 17:b1f9a00145b8 117 //sprintf(filepath,"/sd/%dx%d",width,height); //DispAllDir("/sd/180x180") //file name write to filepath
JDI_Mbed_Team 18:81201ac909c6 118 sprintf(filepath,"/sd/backgrand_logo%dx%d",width,height); //DispAllDir("/sd/180x180") //file name write to filepath
JDI_Mbed_Team 17:b1f9a00145b8 119 sprintf(filepath2,"/sd/fish%dx%d",width,height); //DispAllDir("/sd/180x180") //file name write to filepath
JDI_Mbed_Team 0:33fe30a2b785 120 fclose(fp);
JDI_Mbed_Team 0:33fe30a2b785 121 } else {
JDI_Mbed_Team 0:33fe30a2b785 122 FILE *fp = fopen("/sd/settings.txt", "rb"); //read binary
JDI_Mbed_Team 0:33fe30a2b785 123 if(fp != NULL) {
JDI_Mbed_Team 0:33fe30a2b785 124 fscanf(fp, "%d",&width); //width read
JDI_Mbed_Team 0:33fe30a2b785 125 fscanf(fp, "%d",&height); //height read
JDI_Mbed_Team 0:33fe30a2b785 126 sprintf(filepath,"/sd/%dx%d",width,height); //DispAllDir("/sd/180x180") //file name write to filepath
JDI_Mbed_Team 0:33fe30a2b785 127 fclose(fp);
JDI_Mbed_Team 0:33fe30a2b785 128 } else{
JDI_Mbed_Team 0:33fe30a2b785 129 width =180;
JDI_Mbed_Team 0:33fe30a2b785 130 height=180;
JDI_Mbed_Team 0:33fe30a2b785 131 sprintf(filepath,"/sd/180x180"); //DispAllDir("/sd/180x180")
JDI_Mbed_Team 0:33fe30a2b785 132 }
JDI_Mbed_Team 0:33fe30a2b785 133 }
JDI_Mbed_Team 0:33fe30a2b785 134
JDI_Mbed_Team 0:33fe30a2b785 135 COMSEL.write(1); //
JDI_Mbed_Team 0:33fe30a2b785 136
JDI_Mbed_Team 0:33fe30a2b785 137 BLCTRL.write(blctrl_sel); //
JDI_Mbed_Team 0:33fe30a2b785 138
JDI_Mbed_Team 0:33fe30a2b785 139 WD.setWH(width,height); //input -> width, height
JDI_Mbed_Team 0:33fe30a2b785 140 WD.background(Black); //background = black
JDI_Mbed_Team 0:33fe30a2b785 141 WD.clsBUF(); //data initialize
JDI_Mbed_Team 0:33fe30a2b785 142 WD.writeDISP(); //picture write(black)
JDI_Mbed_Team 0:33fe30a2b785 143 WD.SwDisp(1); //disp on
JDI_Mbed_Team 0:33fe30a2b785 144
JDI_Mbed_Team 0:33fe30a2b785 145 PWMorOFF.fall(&ifswPWM); // Backlight //sw2 fall edge
JDI_Mbed_Team 0:33fe30a2b785 146 PWMorOFF.rise(&ifOFFseq); // OFF Sequence //sw2 rise edge
JDI_Mbed_Team 0:33fe30a2b785 147
JDI_Mbed_Team 0:33fe30a2b785 148 swPWMorOFF.Enable(8, 2, 1); //int ModeNum, int NoiseCancel, int OpenTime //????
JDI_Mbed_Team 0:33fe30a2b785 149 swPWMorOFF.IfCntClose(ON);
JDI_Mbed_Team 0:33fe30a2b785 150 swPWMorOFF.IfCntState(ON);
JDI_Mbed_Team 0:33fe30a2b785 151
JDI_Mbed_Team 0:33fe30a2b785 152 COM60HZ.period_ms(8); //add 20161108
JDI_Mbed_Team 5:069467469900 153 COM60HZ.write(0.5); //add 20161108
JDI_Mbed_Team 0:33fe30a2b785 154
JDI_Mbed_Team 0:33fe30a2b785 155 BK.period_ms(1); //1ms cycle 20161012
JDI_Mbed_Team 7:c7a676157b4d 156 BK.write(1); //low output 20160725 <- high output
JDI_Mbed_Team 7:c7a676157b4d 157
JDI_Mbed_Team 7:c7a676157b4d 158 //DIR *d;
JDI_Mbed_Team 17:b1f9a00145b8 159 filenum = CntFile(filepath); //file number read
JDI_Mbed_Team 17:b1f9a00145b8 160 pc.printf("filenum=%d\n",filenum);
JDI_Mbed_Team 17:b1f9a00145b8 161
JDI_Mbed_Team 17:b1f9a00145b8 162 filenum2 = CntFile(filepath2); //file number read
JDI_Mbed_Team 17:b1f9a00145b8 163 pc.printf("filenum2=%d\n",filenum2);
JDI_Mbed_Team 17:b1f9a00145b8 164 for(int i = 0; i < filenum2; i++)
JDI_Mbed_Team 17:b1f9a00145b8 165 {
JDI_Mbed_Team 17:b1f9a00145b8 166 ReadMovieBmp(filepath2,i);
JDI_Mbed_Team 17:b1f9a00145b8 167 }
JDI_Mbed_Team 0:33fe30a2b785 168
JDI_Mbed_Team 17:b1f9a00145b8 169
JDI_Mbed_Team 17:b1f9a00145b8 170 //int x,y;
JDI_Mbed_Team 5:069467469900 171 while(1)
JDI_Mbed_Team 1:e5796aa9f1aa 172 { //BITMAPS
JDI_Mbed_Team 17:b1f9a00145b8 173
JDI_Mbed_Team 17:b1f9a00145b8 174 for(int i = 0; i < filenum;i++)
JDI_Mbed_Team 17:b1f9a00145b8 175 {
JDI_Mbed_Team 17:b1f9a00145b8 176 //pc.printf("1\n");
JDI_Mbed_Team 17:b1f9a00145b8 177 while(HaltSW.State()); // VCOM invert when image is still
JDI_Mbed_Team 17:b1f9a00145b8 178 HaltSW.Clear();
JDI_Mbed_Team 17:b1f9a00145b8 179 if( i%2 == 0 )
JDI_Mbed_Team 17:b1f9a00145b8 180 {
JDI_Mbed_Team 17:b1f9a00145b8 181 //color anime
JDI_Mbed_Team 17:b1f9a00145b8 182 ReadBmp(filepath,i);
JDI_Mbed_Team 17:b1f9a00145b8 183 WD.writeDISP(TrBIT3);
JDI_Mbed_Team 18:81201ac909c6 184 fish_swim_RightToLeft(60,10,2,TrBIT3);
JDI_Mbed_Team 17:b1f9a00145b8 185 fish_swim_TopToBottom(200,15,0,TrBIT3);
JDI_Mbed_Team 17:b1f9a00145b8 186 fish_swim_BottomToTop(100,10,4,TrBIT3);
JDI_Mbed_Team 18:81201ac909c6 187 fish_Surprise_LeftToRight(80,30,2,6,TrBIT3);
JDI_Mbed_Team 18:81201ac909c6 188 fish_swim_RightToLeft(80,10,8,TrBIT3);
JDI_Mbed_Team 17:b1f9a00145b8 189 }else{
JDI_Mbed_Team 17:b1f9a00145b8 190 //monochrome anime
JDI_Mbed_Team 17:b1f9a00145b8 191 ReadBmp(filepath,i);
JDI_Mbed_Team 17:b1f9a00145b8 192 WD.writeDISP(TrBIT1);
JDI_Mbed_Team 18:81201ac909c6 193 fish_swim_RightToLeft(60,10,2,TrBIT1);
JDI_Mbed_Team 17:b1f9a00145b8 194 fish_swim_TopToBottom(200,15,4,TrBIT1);
JDI_Mbed_Team 17:b1f9a00145b8 195 fish_swim_BottomToTop(100,10,4,TrBIT1);
JDI_Mbed_Team 18:81201ac909c6 196 fish_Surprise_LeftToRight(80,30,2,6,TrBIT1);
JDI_Mbed_Team 18:81201ac909c6 197 fish_swim_RightToLeft(80,5,8,TrBIT1);
JDI_Mbed_Team 17:b1f9a00145b8 198 }
JDI_Mbed_Team 17:b1f9a00145b8 199 }
JDI_Mbed_Team 17:b1f9a00145b8 200
JDI_Mbed_Team 0:33fe30a2b785 201 }
JDI_Mbed_Team 0:33fe30a2b785 202 }
JDI_Mbed_Team 17:b1f9a00145b8 203 /**
JDI_Mbed_Team 17:b1f9a00145b8 204 * @brief Fish(bmp) swim from Right to Left
JDI_Mbed_Team 17:b1f9a00145b8 205 */
JDI_Mbed_Team 17:b1f9a00145b8 206 void fish_swim_RightToLeft(int y,int Speed,int no,int transfermode)
JDI_Mbed_Team 17:b1f9a00145b8 207 {
JDI_Mbed_Team 17:b1f9a00145b8 208 int x;
JDI_Mbed_Team 17:b1f9a00145b8 209 int i=no;
JDI_Mbed_Team 17:b1f9a00145b8 210 for(x = width ; x >=-80 ; x-=Speed )
JDI_Mbed_Team 17:b1f9a00145b8 211 {
JDI_Mbed_Team 17:b1f9a00145b8 212 //pc.printf("2\n");
JDI_Mbed_Team 17:b1f9a00145b8 213 WD.makeMovieFrame(x,y,i);
JDI_Mbed_Team 17:b1f9a00145b8 214 //backgrand display
JDI_Mbed_Team 17:b1f9a00145b8 215 WD.writeDISP(y,y+MOVIE_VERT_SIZE,transfermode);
JDI_Mbed_Team 17:b1f9a00145b8 216 WD.RestoreMovieFrame(x,y,i);
JDI_Mbed_Team 17:b1f9a00145b8 217 if( ++i > no+1 ) i = no;
JDI_Mbed_Team 17:b1f9a00145b8 218 }
JDI_Mbed_Team 17:b1f9a00145b8 219 }
JDI_Mbed_Team 17:b1f9a00145b8 220 /**
JDI_Mbed_Team 17:b1f9a00145b8 221 * @brief Fish(bmp) swim from Left to Right
JDI_Mbed_Team 17:b1f9a00145b8 222 */
JDI_Mbed_Team 17:b1f9a00145b8 223 void fish_swim_LeftToRight(int y,int Speed,int no,int transfermode)
JDI_Mbed_Team 17:b1f9a00145b8 224 {
JDI_Mbed_Team 17:b1f9a00145b8 225 int x;
JDI_Mbed_Team 17:b1f9a00145b8 226 int i=no;
JDI_Mbed_Team 17:b1f9a00145b8 227 for(x = -80 ; x <=width+80 ; x+=Speed )
JDI_Mbed_Team 17:b1f9a00145b8 228 {
JDI_Mbed_Team 17:b1f9a00145b8 229 //pc.printf("2\n");
JDI_Mbed_Team 17:b1f9a00145b8 230 WD.makeMovieFrame_Reverse(x,y,i);
JDI_Mbed_Team 17:b1f9a00145b8 231 //backgrand display
JDI_Mbed_Team 17:b1f9a00145b8 232 WD.writeDISP(y,y+MOVIE_VERT_SIZE,transfermode);
JDI_Mbed_Team 17:b1f9a00145b8 233 WD.RestoreMovieFrame(x,y,i);
JDI_Mbed_Team 17:b1f9a00145b8 234 if( ++i > no+1 ) i = no;
JDI_Mbed_Team 17:b1f9a00145b8 235 }
JDI_Mbed_Team 17:b1f9a00145b8 236 }
JDI_Mbed_Team 17:b1f9a00145b8 237 /**
JDI_Mbed_Team 17:b1f9a00145b8 238 * @brief Fish(bmp) swim from Left to Right,but he surprise!! and return
JDI_Mbed_Team 17:b1f9a00145b8 239 */
JDI_Mbed_Team 17:b1f9a00145b8 240 void fish_Surprise_LeftToRight(int y,int Speed,int no,int no2,int transfermode)
JDI_Mbed_Team 17:b1f9a00145b8 241 {
JDI_Mbed_Team 17:b1f9a00145b8 242 int x;
JDI_Mbed_Team 17:b1f9a00145b8 243 int i;
JDI_Mbed_Team 17:b1f9a00145b8 244 i=no;
JDI_Mbed_Team 17:b1f9a00145b8 245 for(x = -80 ; x <=width-120 ; x+=Speed )
JDI_Mbed_Team 17:b1f9a00145b8 246 {
JDI_Mbed_Team 17:b1f9a00145b8 247 //pc.printf("2\n");
JDI_Mbed_Team 17:b1f9a00145b8 248 WD.makeMovieFrame_Reverse(x,y,i);
JDI_Mbed_Team 17:b1f9a00145b8 249 //backgrand display
JDI_Mbed_Team 17:b1f9a00145b8 250 WD.writeDISP(y,y+MOVIE_VERT_SIZE,transfermode);
JDI_Mbed_Team 17:b1f9a00145b8 251 WD.RestoreMovieFrame(x,y,i);
JDI_Mbed_Team 17:b1f9a00145b8 252 if( ++i > no+1 ) i = no;
JDI_Mbed_Team 17:b1f9a00145b8 253 }
JDI_Mbed_Team 17:b1f9a00145b8 254 //surprise
JDI_Mbed_Team 17:b1f9a00145b8 255 i = no2;
JDI_Mbed_Team 17:b1f9a00145b8 256 for(int j = 0 ; j < 6 ; j++ )
JDI_Mbed_Team 17:b1f9a00145b8 257 {
JDI_Mbed_Team 17:b1f9a00145b8 258 x = width-120;
JDI_Mbed_Team 17:b1f9a00145b8 259 //pc.printf("2\n");
JDI_Mbed_Team 17:b1f9a00145b8 260 WD.makeMovieFrame(x,y,i);
JDI_Mbed_Team 17:b1f9a00145b8 261 //backgrand display
JDI_Mbed_Team 17:b1f9a00145b8 262 WD.writeDISP(y,y+MOVIE_VERT_SIZE,transfermode);
JDI_Mbed_Team 17:b1f9a00145b8 263 WD.RestoreMovieFrame(x,y,i);
JDI_Mbed_Team 17:b1f9a00145b8 264 if( ++i > no2+1 ) i = no2;
JDI_Mbed_Team 17:b1f9a00145b8 265 }
JDI_Mbed_Team 17:b1f9a00145b8 266 // swim reverse
JDI_Mbed_Team 17:b1f9a00145b8 267 i = no;
JDI_Mbed_Team 17:b1f9a00145b8 268 for(x = width-120 ; x >= -80 ; x-=Speed )
JDI_Mbed_Team 17:b1f9a00145b8 269 {
JDI_Mbed_Team 17:b1f9a00145b8 270 //pc.printf("2\n");
JDI_Mbed_Team 17:b1f9a00145b8 271 WD.makeMovieFrame(x,y,i);
JDI_Mbed_Team 17:b1f9a00145b8 272 //backgrand display
JDI_Mbed_Team 17:b1f9a00145b8 273 WD.writeDISP(y,y+MOVIE_VERT_SIZE,transfermode);
JDI_Mbed_Team 17:b1f9a00145b8 274 WD.RestoreMovieFrame(x,y,i);
JDI_Mbed_Team 17:b1f9a00145b8 275 if( ++i > no+1 ) i = no;
JDI_Mbed_Team 17:b1f9a00145b8 276 }
JDI_Mbed_Team 17:b1f9a00145b8 277 }
JDI_Mbed_Team 0:33fe30a2b785 278
JDI_Mbed_Team 14:9d58f49f326f 279 /**
JDI_Mbed_Team 17:b1f9a00145b8 280 * @brief Fish(bmp) swim from bottom to top
JDI_Mbed_Team 17:b1f9a00145b8 281 */
JDI_Mbed_Team 17:b1f9a00145b8 282 void fish_swim_BottomToTop(int x,int Speed,int no,int transfermode)
JDI_Mbed_Team 17:b1f9a00145b8 283 {
JDI_Mbed_Team 17:b1f9a00145b8 284 int y;
JDI_Mbed_Team 17:b1f9a00145b8 285 int i=no;
JDI_Mbed_Team 17:b1f9a00145b8 286 for(y = height ; y >=-MOVIE_VERT_SIZE ; y-=Speed )
JDI_Mbed_Team 17:b1f9a00145b8 287 {
JDI_Mbed_Team 17:b1f9a00145b8 288 //pc.printf("2\n");
JDI_Mbed_Team 17:b1f9a00145b8 289 WD.makeMovieFrame(x,y,i);
JDI_Mbed_Team 17:b1f9a00145b8 290 //backgrand display
JDI_Mbed_Team 17:b1f9a00145b8 291 WD.writeDISP(y,y+MOVIE_VERT_SIZE+Speed,transfermode);
JDI_Mbed_Team 17:b1f9a00145b8 292 WD.RestoreMovieFrame(x,y,i);
JDI_Mbed_Team 17:b1f9a00145b8 293 if( ++i > no+1 ) i = no;
JDI_Mbed_Team 17:b1f9a00145b8 294 }
JDI_Mbed_Team 17:b1f9a00145b8 295 }
JDI_Mbed_Team 17:b1f9a00145b8 296 /**
JDI_Mbed_Team 17:b1f9a00145b8 297 * @brief Fish(bmp) swim from top to bottom
JDI_Mbed_Team 17:b1f9a00145b8 298 */
JDI_Mbed_Team 17:b1f9a00145b8 299 void fish_swim_TopToBottom(int x,int Speed,int no,int transfermode)
JDI_Mbed_Team 17:b1f9a00145b8 300 {
JDI_Mbed_Team 17:b1f9a00145b8 301 int y;
JDI_Mbed_Team 17:b1f9a00145b8 302 int i=no;
JDI_Mbed_Team 17:b1f9a00145b8 303 for(y = -MOVIE_VERT_SIZE ; y < height+Speed; y+=Speed )
JDI_Mbed_Team 17:b1f9a00145b8 304 {
JDI_Mbed_Team 17:b1f9a00145b8 305 //pc.printf("2\n");
JDI_Mbed_Team 17:b1f9a00145b8 306 WD.makeMovieFrame_Updown(x,y,i);
JDI_Mbed_Team 17:b1f9a00145b8 307 //backgrand display
JDI_Mbed_Team 17:b1f9a00145b8 308 WD.writeDISP(y-Speed,y+MOVIE_VERT_SIZE,transfermode);
JDI_Mbed_Team 17:b1f9a00145b8 309 WD.RestoreMovieFrame(x,y,i);
JDI_Mbed_Team 17:b1f9a00145b8 310 if( ++i > no+1 ) i = no;
JDI_Mbed_Team 17:b1f9a00145b8 311 }
JDI_Mbed_Team 17:b1f9a00145b8 312 }
JDI_Mbed_Team 17:b1f9a00145b8 313 /**
JDI_Mbed_Team 14:9d58f49f326f 314 * @brief read a bitmap file in SD. 8color mode
JDI_Mbed_Team 14:9d58f49f326f 315 */
JDI_Mbed_Team 14:9d58f49f326f 316 void SD2BUF(char *filepath){
JDI_Mbed_Team 14:9d58f49f326f 317 char R8[1],G8[1],B8[1] ,DUMMY[1],bc[2];
JDI_Mbed_Team 14:9d58f49f326f 318 char RGB;
JDI_Mbed_Team 14:9d58f49f326f 319 FILE *fp ;
JDI_Mbed_Team 14:9d58f49f326f 320
JDI_Mbed_Team 14:9d58f49f326f 321 pc.printf("file=%s\n",filepath);
JDI_Mbed_Team 14:9d58f49f326f 322 fp = fopen(filepath, "rb");
JDI_Mbed_Team 14:9d58f49f326f 323 if(fp != NULL) {
JDI_Mbed_Team 14:9d58f49f326f 324 //for(int i=0; i< 54 ; i++) fscanf(fp,"%c",DUMMY); // Discard Header 54bytes
JDI_Mbed_Team 14:9d58f49f326f 325 for(int i=0; i< 28 ; i++) fscanf(fp,"%c",DUMMY); // Discard Header 26bytes
JDI_Mbed_Team 14:9d58f49f326f 326 fscanf(fp,"%c",&(bc[0]));// color bit size 2bytes
JDI_Mbed_Team 14:9d58f49f326f 327 fscanf(fp,"%c",&(bc[1]));// color bit size 2bytes
JDI_Mbed_Team 14:9d58f49f326f 328 for(int i=0; i< 24 ; i++) fscanf(fp,"%c",DUMMY); // Discard Header 26bytes
JDI_Mbed_Team 14:9d58f49f326f 329 bmp_bitcount = bc[0]+bc[1]*256;
JDI_Mbed_Team 14:9d58f49f326f 330 if( bmp_bitcount == 1 )
JDI_Mbed_Team 14:9d58f49f326f 331 {
JDI_Mbed_Team 14:9d58f49f326f 332 for(int i=0; i< 8 ; i++) fscanf(fp,"%c",DUMMY); // Pallet Data
JDI_Mbed_Team 14:9d58f49f326f 333 int x;
JDI_Mbed_Team 14:9d58f49f326f 334 for(int y=height-1; y>=0; y--) {
JDI_Mbed_Team 14:9d58f49f326f 335 for(x=0; x< width; x += 8) { //1bit monochrome
JDI_Mbed_Team 14:9d58f49f326f 336 fscanf(fp, "%c",G8);
JDI_Mbed_Team 14:9d58f49f326f 337 for(int i=0; i < 8 ; i++ ){
JDI_Mbed_Team 14:9d58f49f326f 338 RGB = 0;
JDI_Mbed_Team 14:9d58f49f326f 339 if( (*G8 & 0x80) != 0) RGB = RGB|0x0e;
JDI_Mbed_Team 14:9d58f49f326f 340 WD.pixel(x+i,y,RGB);
JDI_Mbed_Team 14:9d58f49f326f 341 *G8 = *G8 << 1;
JDI_Mbed_Team 14:9d58f49f326f 342 }
JDI_Mbed_Team 14:9d58f49f326f 343 }
JDI_Mbed_Team 14:9d58f49f326f 344 if( width%8 != 0 )
JDI_Mbed_Team 14:9d58f49f326f 345 {
JDI_Mbed_Team 14:9d58f49f326f 346 fscanf(fp, "%c",G8);
JDI_Mbed_Team 14:9d58f49f326f 347 int i;
JDI_Mbed_Team 14:9d58f49f326f 348 for(i=0; i < (width%8) ; i++ ){
JDI_Mbed_Team 14:9d58f49f326f 349 RGB = 0;
JDI_Mbed_Team 14:9d58f49f326f 350 if( (*G8 & 0x40) != 0) RGB = RGB|0x0e;
JDI_Mbed_Team 14:9d58f49f326f 351 WD.pixel(x+i,y,RGB);
JDI_Mbed_Team 14:9d58f49f326f 352 *G8 = *G8 << 1;
JDI_Mbed_Team 14:9d58f49f326f 353 }
JDI_Mbed_Team 14:9d58f49f326f 354 }
JDI_Mbed_Team 14:9d58f49f326f 355 if( y!=0){ // The last data column doesn't need padding
JDI_Mbed_Team 14:9d58f49f326f 356 int wbyte = width/8 + ( width%8 == 0 ? 0:1 );
JDI_Mbed_Team 14:9d58f49f326f 357 for(int x=(wbyte*3)%4; (x%4 !=0); x++) fscanf(fp, "%c",DUMMY);// 4byte boundery for every column(only windows bitmap format)
JDI_Mbed_Team 14:9d58f49f326f 358 }
JDI_Mbed_Team 14:9d58f49f326f 359 }
JDI_Mbed_Team 14:9d58f49f326f 360 }else
JDI_Mbed_Team 14:9d58f49f326f 361 if( bmp_bitcount == 24 )
JDI_Mbed_Team 14:9d58f49f326f 362 {
JDI_Mbed_Team 14:9d58f49f326f 363 for(int y=height-1; y>=0; y--) {
JDI_Mbed_Team 14:9d58f49f326f 364 for(int x=0; x< width; x++) { //24bit color B 8bit -> G 8bit -> R 8bit
JDI_Mbed_Team 14:9d58f49f326f 365 fscanf(fp, "%c",B8);
JDI_Mbed_Team 14:9d58f49f326f 366 fscanf(fp, "%c",G8);
JDI_Mbed_Team 14:9d58f49f326f 367 fscanf(fp, "%c",R8);
JDI_Mbed_Team 14:9d58f49f326f 368
JDI_Mbed_Team 14:9d58f49f326f 369 RGB = RGB8(*R8,*G8,*B8); //6bit(8bit) MIP MASK 0000 1110
JDI_Mbed_Team 14:9d58f49f326f 370 WD.pixel(x,y,RGB);
JDI_Mbed_Team 14:9d58f49f326f 371 }
JDI_Mbed_Team 14:9d58f49f326f 372 if( y!=0) // The last data column doesn't need padding
JDI_Mbed_Team 14:9d58f49f326f 373 for(int x=(width*3)%4; (x%4 !=0); x++) fscanf(fp, "%c",DUMMY); // 4byte boundery for every column(only windows bitmap format)
JDI_Mbed_Team 14:9d58f49f326f 374 }
JDI_Mbed_Team 14:9d58f49f326f 375 }
JDI_Mbed_Team 14:9d58f49f326f 376 }
JDI_Mbed_Team 14:9d58f49f326f 377 fclose(fp);
JDI_Mbed_Team 14:9d58f49f326f 378 }
JDI_Mbed_Team 14:9d58f49f326f 379
JDI_Mbed_Team 14:9d58f49f326f 380 /**
JDI_Mbed_Team 14:9d58f49f326f 381 * @brief read a text file in SD.
JDI_Mbed_Team 14:9d58f49f326f 382 */
JDI_Mbed_Team 14:9d58f49f326f 383 void SDtex2BUF(char *filepath){
JDI_Mbed_Team 14:9d58f49f326f 384 int x,y,font,color;
JDI_Mbed_Team 14:9d58f49f326f 385 char text[40];
JDI_Mbed_Team 14:9d58f49f326f 386 int ifEOF;
JDI_Mbed_Team 14:9d58f49f326f 387 FILE *fp ;
JDI_Mbed_Team 14:9d58f49f326f 388
JDI_Mbed_Team 14:9d58f49f326f 389 fp = fopen(filepath, "r");
JDI_Mbed_Team 14:9d58f49f326f 390 if(fp != NULL) {
JDI_Mbed_Team 14:9d58f49f326f 391 while(ifEOF != -1){
JDI_Mbed_Team 14:9d58f49f326f 392 ifEOF = fscanf(fp,"%d,%d,%d,%d,%[^,],",&x,&y,&font,&color,text);
JDI_Mbed_Team 14:9d58f49f326f 393 WD.locate(x,y);
JDI_Mbed_Team 14:9d58f49f326f 394 WD.foreground(color);
JDI_Mbed_Team 14:9d58f49f326f 395 if (font ==1) WD.set_font((unsigned char*) Arial12x12);
JDI_Mbed_Team 14:9d58f49f326f 396 else if (font ==2) WD.set_font((unsigned char*) Arial24x23);
JDI_Mbed_Team 14:9d58f49f326f 397 else if (font ==3) WD.set_font((unsigned char*) Arial28x28);
JDI_Mbed_Team 14:9d58f49f326f 398 else WD.set_font((unsigned char*) Neu42x35);
JDI_Mbed_Team 14:9d58f49f326f 399
JDI_Mbed_Team 14:9d58f49f326f 400 WD.printf("%s",text);
JDI_Mbed_Team 14:9d58f49f326f 401 }
JDI_Mbed_Team 14:9d58f49f326f 402 }
JDI_Mbed_Team 14:9d58f49f326f 403 fclose(fp);
JDI_Mbed_Team 14:9d58f49f326f 404 }
JDI_Mbed_Team 14:9d58f49f326f 405
JDI_Mbed_Team 14:9d58f49f326f 406 /*
JDI_Mbed_Team 14:9d58f49f326f 407 void DispAllDir(const char *fsrc)
JDI_Mbed_Team 14:9d58f49f326f 408 {
JDI_Mbed_Team 14:9d58f49f326f 409 DIR *d = opendir(fsrc);
JDI_Mbed_Team 14:9d58f49f326f 410 struct dirent *p;
JDI_Mbed_Team 14:9d58f49f326f 411 char filepath[40];
JDI_Mbed_Team 14:9d58f49f326f 412
JDI_Mbed_Team 14:9d58f49f326f 413 while ((p = readdir(d)) != NULL) {
JDI_Mbed_Team 14:9d58f49f326f 414 sprintf(filepath, "%s/%s",fsrc,p->d_name);
JDI_Mbed_Team 14:9d58f49f326f 415 SD2BUF(filepath);
JDI_Mbed_Team 14:9d58f49f326f 416 WD.writeDISP();
JDI_Mbed_Team 14:9d58f49f326f 417 }
JDI_Mbed_Team 14:9d58f49f326f 418 closedir(d);
JDI_Mbed_Team 14:9d58f49f326f 419 }
JDI_Mbed_Team 14:9d58f49f326f 420 */
JDI_Mbed_Team 14:9d58f49f326f 421
JDI_Mbed_Team 14:9d58f49f326f 422 /**
JDI_Mbed_Team 14:9d58f49f326f 423 * @brief read a bitmap file in SD by file number.
JDI_Mbed_Team 14:9d58f49f326f 424 */
JDI_Mbed_Team 14:9d58f49f326f 425 void ReadBmp(const char *fsrc, uint32_t FileNum)
JDI_Mbed_Team 14:9d58f49f326f 426 {
JDI_Mbed_Team 14:9d58f49f326f 427 DIR *d = opendir(fsrc);
JDI_Mbed_Team 14:9d58f49f326f 428 struct dirent *p;
JDI_Mbed_Team 20:1129e4e1ab76 429 char filepath[60];
JDI_Mbed_Team 14:9d58f49f326f 430
JDI_Mbed_Team 14:9d58f49f326f 431 for(uint32_t i=0; i< FileNum; i++) readdir(d);
JDI_Mbed_Team 14:9d58f49f326f 432 if ((p = readdir(d)) != NULL) {
JDI_Mbed_Team 14:9d58f49f326f 433 sprintf(filepath, "%s/%s",fsrc,p->d_name);
JDI_Mbed_Team 14:9d58f49f326f 434 SD2BUF(filepath);
JDI_Mbed_Team 14:9d58f49f326f 435 if(ifMargeTXT){
JDI_Mbed_Team 14:9d58f49f326f 436 sprintf(filepath, "%s_txt/%s.txt",fsrc,p->d_name);
JDI_Mbed_Team 14:9d58f49f326f 437 SDtex2BUF(filepath);
JDI_Mbed_Team 14:9d58f49f326f 438 }
JDI_Mbed_Team 14:9d58f49f326f 439 }
JDI_Mbed_Team 14:9d58f49f326f 440 closedir(d);
JDI_Mbed_Team 14:9d58f49f326f 441 }
JDI_Mbed_Team 14:9d58f49f326f 442
JDI_Mbed_Team 0:33fe30a2b785 443 uint32_t CntFile(const char *fsrc)
JDI_Mbed_Team 0:33fe30a2b785 444 {
JDI_Mbed_Team 0:33fe30a2b785 445 DIR *d = opendir(fsrc);
JDI_Mbed_Team 0:33fe30a2b785 446 uint32_t counter = 0;
JDI_Mbed_Team 0:33fe30a2b785 447 while (readdir(d)!= NULL) counter++;
JDI_Mbed_Team 0:33fe30a2b785 448 closedir(d);
JDI_Mbed_Team 0:33fe30a2b785 449 return counter;
JDI_Mbed_Team 0:33fe30a2b785 450 }
JDI_Mbed_Team 0:33fe30a2b785 451
JDI_Mbed_Team 0:33fe30a2b785 452 void OffSequence(void){
JDI_Mbed_Team 0:33fe30a2b785 453 BK.write(0); //add 20160712 17:00
JDI_Mbed_Team 0:33fe30a2b785 454 WD.background(Black);
JDI_Mbed_Team 0:33fe30a2b785 455 WD.clsBUF();
JDI_Mbed_Team 0:33fe30a2b785 456 WD.SwDisp(0);
JDI_Mbed_Team 0:33fe30a2b785 457 WD.writeDISP();
JDI_Mbed_Team 14:9d58f49f326f 458 WD.writeDISP();
JDI_Mbed_Team 0:33fe30a2b785 459 bloff = 1;
JDI_Mbed_Team 0:33fe30a2b785 460 }
JDI_Mbed_Team 0:33fe30a2b785 461
JDI_Mbed_Team 0:33fe30a2b785 462 void ifswPWM(void){
JDI_Mbed_Team 0:33fe30a2b785 463 if(bloff == 0){
JDI_Mbed_Team 0:33fe30a2b785 464 if(blduty >= 10){ //0
JDI_Mbed_Team 0:33fe30a2b785 465 blduty = 0; //10
JDI_Mbed_Team 0:33fe30a2b785 466 COMSEL.write(1); //
JDI_Mbed_Team 0:33fe30a2b785 467 }else{
JDI_Mbed_Team 0:33fe30a2b785 468 blduty += 1; //-=
JDI_Mbed_Team 0:33fe30a2b785 469 COMSEL.write(1); //
JDI_Mbed_Team 0:33fe30a2b785 470 }
JDI_Mbed_Team 0:33fe30a2b785 471 }else{
JDI_Mbed_Team 0:33fe30a2b785 472 blduty = 0;
JDI_Mbed_Team 0:33fe30a2b785 473 COMSEL.write(1); //
JDI_Mbed_Team 0:33fe30a2b785 474 }
JDI_Mbed_Team 0:33fe30a2b785 475 // BKduty = BKduty - 0.125;
JDI_Mbed_Team 0:33fe30a2b785 476 // BKduty -= 0.125;
JDI_Mbed_Team 0:33fe30a2b785 477 // if(BKduty <= 0) BKduty = 1;
JDI_Mbed_Team 0:33fe30a2b785 478 // BK.write(BKduty);
JDI_Mbed_Team 0:33fe30a2b785 479 BK.write(blduty*0.1); //
JDI_Mbed_Team 0:33fe30a2b785 480 if(blduty == 0){
JDI_Mbed_Team 0:33fe30a2b785 481 bk_timer = 1.0;
JDI_Mbed_Team 0:33fe30a2b785 482 }else{
JDI_Mbed_Team 0:33fe30a2b785 483 bk_timer = 0.008; //0.016 20160712
JDI_Mbed_Team 0:33fe30a2b785 484 }
JDI_Mbed_Team 0:33fe30a2b785 485 }
JDI_Mbed_Team 0:33fe30a2b785 486
JDI_Mbed_Team 0:33fe30a2b785 487 void ifOFFseq(void){
JDI_Mbed_Team 0:33fe30a2b785 488 if(swPWMorOFF.IfAtTime()){
JDI_Mbed_Team 0:33fe30a2b785 489 swPWMorOFF.IfCntClose(OFF);
JDI_Mbed_Team 0:33fe30a2b785 490 swPWMorOFF.IfCntState(OFF);
JDI_Mbed_Team 0:33fe30a2b785 491 OffSequence();
JDI_Mbed_Team 0:33fe30a2b785 492 }
JDI_Mbed_Team 0:33fe30a2b785 493 }
JDI_Mbed_Team 17:b1f9a00145b8 494 /**
JDI_Mbed_Team 17:b1f9a00145b8 495 * @brief read a bitmap,Animation page file in SD.
JDI_Mbed_Team 17:b1f9a00145b8 496 */
JDI_Mbed_Team 17:b1f9a00145b8 497 void SD2MOVIEBUF(char *filepath,int memnum){
JDI_Mbed_Team 17:b1f9a00145b8 498 char R8[1],G8[1],B8[1] ,DUMMY[1],bc[2];
JDI_Mbed_Team 17:b1f9a00145b8 499 char RGB;
JDI_Mbed_Team 17:b1f9a00145b8 500 FILE *fp ;
JDI_Mbed_Team 0:33fe30a2b785 501
JDI_Mbed_Team 17:b1f9a00145b8 502 pc.printf("[%d]%s\n",memnum,filepath);
JDI_Mbed_Team 17:b1f9a00145b8 503 fp = fopen(filepath, "rb");
JDI_Mbed_Team 17:b1f9a00145b8 504 if(fp != NULL) {
JDI_Mbed_Team 17:b1f9a00145b8 505 //for(int i=0; i< 54 ; i++) fscanf(fp,"%c",DUMMY); // Discard Header 54bytes
JDI_Mbed_Team 17:b1f9a00145b8 506 for(int i=0; i< 28 ; i++) fscanf(fp,"%c",DUMMY); // Discard Header 26bytes
JDI_Mbed_Team 17:b1f9a00145b8 507 fscanf(fp,"%c",&(bc[0]));// color bit size 2bytes
JDI_Mbed_Team 17:b1f9a00145b8 508 fscanf(fp,"%c",&(bc[1]));// color bit size 2bytes
JDI_Mbed_Team 17:b1f9a00145b8 509 for(int i=0; i< 24 ; i++) fscanf(fp,"%c",DUMMY); // Discard Header 26bytes
JDI_Mbed_Team 17:b1f9a00145b8 510 bmp_bitcount = bc[0]+bc[1]*256;
JDI_Mbed_Team 17:b1f9a00145b8 511 pc.printf("bitcount=%d\n",bmp_bitcount);
JDI_Mbed_Team 17:b1f9a00145b8 512 if( bmp_bitcount == 1 )
JDI_Mbed_Team 17:b1f9a00145b8 513 {
JDI_Mbed_Team 17:b1f9a00145b8 514 for(int i=0; i< 8 ; i++) fscanf(fp,"%c",DUMMY); // Pallet Data
JDI_Mbed_Team 17:b1f9a00145b8 515 int x;
JDI_Mbed_Team 17:b1f9a00145b8 516 for(int y=MOVIE_VERT_SIZE-1; y>=0; y--) {
JDI_Mbed_Team 17:b1f9a00145b8 517 for(x=0; x< MOVIE_HORI_SIZE; x += 8) { //1bit monochrome
JDI_Mbed_Team 17:b1f9a00145b8 518 fscanf(fp, "%c",G8);
JDI_Mbed_Team 17:b1f9a00145b8 519 for(int i=0; i < 8 ; i++ ){
JDI_Mbed_Team 17:b1f9a00145b8 520 RGB = 0;
JDI_Mbed_Team 17:b1f9a00145b8 521 if( (*G8 & 0x80) != 0) RGB = RGB|0x0e;
JDI_Mbed_Team 17:b1f9a00145b8 522 WD.movie_pixel(x+i,y,RGB,memnum);
JDI_Mbed_Team 17:b1f9a00145b8 523 *G8 = *G8 << 1;
JDI_Mbed_Team 17:b1f9a00145b8 524 }
JDI_Mbed_Team 17:b1f9a00145b8 525 }
JDI_Mbed_Team 17:b1f9a00145b8 526 if( MOVIE_HORI_SIZE%8 != 0 )
JDI_Mbed_Team 17:b1f9a00145b8 527 {
JDI_Mbed_Team 17:b1f9a00145b8 528 fscanf(fp, "%c",G8);
JDI_Mbed_Team 17:b1f9a00145b8 529 int i;
JDI_Mbed_Team 17:b1f9a00145b8 530 for(i=0; i < (width%8) ; i++ ){
JDI_Mbed_Team 17:b1f9a00145b8 531 RGB = 0;
JDI_Mbed_Team 17:b1f9a00145b8 532 if( (*G8 & 0x40) != 0) RGB = RGB|0x0e;
JDI_Mbed_Team 17:b1f9a00145b8 533 WD.movie_pixel(x+i,y,RGB,memnum);
JDI_Mbed_Team 17:b1f9a00145b8 534 *G8 = *G8 << 1;
JDI_Mbed_Team 17:b1f9a00145b8 535 }
JDI_Mbed_Team 17:b1f9a00145b8 536 }
JDI_Mbed_Team 17:b1f9a00145b8 537 if( y!=0){ // The last data column doesn't need padding
JDI_Mbed_Team 17:b1f9a00145b8 538 int wbyte = MOVIE_HORI_SIZE/8 + ( MOVIE_HORI_SIZE%8 == 0 ? 0:1 );
JDI_Mbed_Team 17:b1f9a00145b8 539 for(int x=(wbyte*3)%4; (x%4 !=0); x++) fscanf(fp, "%c",DUMMY);// 4byte boundery for every column(only windows bitmap format)
JDI_Mbed_Team 17:b1f9a00145b8 540 }
JDI_Mbed_Team 17:b1f9a00145b8 541 }
JDI_Mbed_Team 17:b1f9a00145b8 542 }else
JDI_Mbed_Team 17:b1f9a00145b8 543 if( bmp_bitcount == 24 )
JDI_Mbed_Team 17:b1f9a00145b8 544 {
JDI_Mbed_Team 17:b1f9a00145b8 545 for(int y=MOVIE_VERT_SIZE-1; y>=0; y--) {
JDI_Mbed_Team 17:b1f9a00145b8 546 for(int x=0; x< MOVIE_HORI_SIZE; x++) { //24bit color B 8bit -> G 8bit -> R 8bit
JDI_Mbed_Team 17:b1f9a00145b8 547 fscanf(fp, "%c",B8);
JDI_Mbed_Team 17:b1f9a00145b8 548 fscanf(fp, "%c",G8);
JDI_Mbed_Team 17:b1f9a00145b8 549 fscanf(fp, "%c",R8);
JDI_Mbed_Team 17:b1f9a00145b8 550
JDI_Mbed_Team 17:b1f9a00145b8 551 RGB = RGB8(*R8,*G8,*B8); //6bit(8bit) MIP MASK 0000 1110
JDI_Mbed_Team 17:b1f9a00145b8 552 WD.movie_pixel(x,y,RGB,memnum);
JDI_Mbed_Team 17:b1f9a00145b8 553 }
JDI_Mbed_Team 17:b1f9a00145b8 554 if( y!=0) // The last data column doesn't need padding
JDI_Mbed_Team 17:b1f9a00145b8 555 for(int x=(MOVIE_HORI_SIZE*3)%4; (x%4 !=0); x++) fscanf(fp, "%c",DUMMY); // 4byte boundery for every column(only windows bitmap format)
JDI_Mbed_Team 17:b1f9a00145b8 556 }
JDI_Mbed_Team 17:b1f9a00145b8 557 }
JDI_Mbed_Team 17:b1f9a00145b8 558 }
JDI_Mbed_Team 17:b1f9a00145b8 559 fclose(fp);
JDI_Mbed_Team 17:b1f9a00145b8 560 }
JDI_Mbed_Team 17:b1f9a00145b8 561 /**
JDI_Mbed_Team 17:b1f9a00145b8 562 * @brief read a bitmap,All Animation page file in SD.
JDI_Mbed_Team 17:b1f9a00145b8 563 */
JDI_Mbed_Team 17:b1f9a00145b8 564 void ReadMovieBmp(const char *fsrc, uint32_t FileNum)
JDI_Mbed_Team 17:b1f9a00145b8 565 {
JDI_Mbed_Team 17:b1f9a00145b8 566 DIR *d = opendir(fsrc);
JDI_Mbed_Team 17:b1f9a00145b8 567 struct dirent *p;
JDI_Mbed_Team 21:d1beeb6c4a53 568 char filepath[60];
JDI_Mbed_Team 17:b1f9a00145b8 569
JDI_Mbed_Team 17:b1f9a00145b8 570 if( FileNum >= MOVIE_NUM ) return;
JDI_Mbed_Team 17:b1f9a00145b8 571
JDI_Mbed_Team 17:b1f9a00145b8 572 pc.printf("read bmp No%d\n",FileNum);
JDI_Mbed_Team 17:b1f9a00145b8 573 for(uint32_t i=0; i< FileNum; i++) readdir(d);
JDI_Mbed_Team 17:b1f9a00145b8 574 if ((p = readdir(d)) != NULL) {
JDI_Mbed_Team 17:b1f9a00145b8 575 sprintf(filepath, "%s/%s",fsrc,p->d_name);
JDI_Mbed_Team 17:b1f9a00145b8 576 SD2MOVIEBUF(filepath,FileNum);
JDI_Mbed_Team 17:b1f9a00145b8 577 pc.printf("read finish\n");
JDI_Mbed_Team 17:b1f9a00145b8 578 }
JDI_Mbed_Team 17:b1f9a00145b8 579 closedir(d);
JDI_Mbed_Team 17:b1f9a00145b8 580 }