this is kazushi's branch of AD128160
Fork of AD128160 by
Diff: s_Lcd.cpp
- Revision:
- 5:39b01a6f0f75
- Parent:
- 4:1f72df1a88e0
- Child:
- 6:96576c9c7828
--- a/s_Lcd.cpp Sun Oct 23 02:06:34 2011 +0000 +++ b/s_Lcd.cpp Wed Nov 23 12:12:11 2011 +0000 @@ -1,20 +1,15 @@ #include "mbed.h" -#define kanji_file "/local/SHMZN16X.FNT" -//#defin kanji_file "/local/k12x10.fnt" - -Serial device(p9, p10); // tx, rx LCD +Serial device(p9, p10); // tx, rx +//Serial pc(USBTX, USBRX); // tx, rx DigitalOut rst(p20); //P20 --> LCD RST (Reset) LocalFileSystem local("local"); +//Serial pc(USBTX, USBRX); +int csrx = 0; +int csry = 16; -int cx = 0; -int cy = 0; -int offsety = 0; -bool kstate = false; -unsigned char kbuf; - - FILE *fp; //File open buffer + FILE *fp; unsigned short start[92], end[92]; unsigned char font[64]; @@ -42,35 +37,6 @@ device.putc(0x4E); device.putc(0xAA); } -void bmp(int x0,int y0,int bmp_no) - { - unsigned char x0H; - unsigned char x0L; - unsigned char y0H; - unsigned char y0L; - unsigned char rH; - unsigned char rL; - unsigned char sum; - - x0H = x0 >> 8; - x0L = x0 & 0xFF; - y0H = y0 >> 8; - y0L = y0 & 0xff; - rH = bmp_no >> 8; - rL = bmp_no & 0xFF; - sum = x0H+x0L+y0H+y0L+rH+rL+0x09; - device.putc(0x55); - device.putc(0x07); - device.putc(0x09);//command - device.putc(x0H); - device.putc(x0L); - device.putc(y0H); - device.putc(y0L); - device.putc(rH); - device.putc(rL); - device.putc(sum); - device.putc(0xAA); - } void cls() { @@ -81,16 +47,10 @@ device.putc(0xD5); device.putc(0xAA); } -void scroll(void){ - -} - - - void lcdputs( char data[98],int x,int y) { - unsigned char s=0; + unsigned char s; unsigned char x0H; unsigned char x0L; unsigned char y0H; @@ -112,10 +72,12 @@ { device.putc(data[a]); s = s+data[a]; +// pc.printf("%x:",data[a]); } s = s+x0H+x0L+y0H+y0L+0x0B; device.putc(s);//sumcheck device.putc(0xAA); +// pc.printf("print %x %x %x %x %x %d ",x0H,x0L,y0H,y0L,s,datalen); } void color(int rgb) @@ -134,27 +96,9 @@ device.putc(c2); device.putc(sum); device.putc(0xAA); + //pc.printf("color %x %x %x ",c1,c2,sum); } -void newline(void){ - cx = 0; - cy += 16; - if(cy > 160){ - scroll(); - cy = 0; - color(0x001f); - cls(); - color(0xffff); - } -} - -void movecorsor(int a) - { - cx+=8*a; - if(cx>=128) newline(); - } - - void pixel(int x0,int y0) { unsigned char x0H; @@ -326,97 +270,10 @@ s = data+x0H+x0L+y0H+y0L+0x0B; device.putc(s);//sumcheck device.putc(0xAA); +// pc.printf("print %x %x %x %x %x %d ",x0H,x0L,y0H,y0L,s,datalen); } - -void kanji_init(){ - //move cursor - fp = fopen(kanji_file , "r"); - - - if(!fp) { - printf("File could not be opened!\n"); - exit(1); - } - - fgets(Identifier, 6+1, fp); // FONTX2 - fgets(FontName, 8+1, fp); - fread(&XSize, 1, 1, fp); - fread(&YSize, 1, 1, fp); - fread(&CodeType, 1, 1, fp); - fread(&Tnum, 1, 1, fp); - - // Table read - for(int a=0;a< Tnum ;a++){ - fread(&start[a],1,2,fp); - fread(&end[a] ,1,2,fp); - } -} - -//Kanji puts cr = kanji cord -void k_puts(int cr){ - //kanji address - int c; - int adrs; - c=0; - adrs=0; - while(cr>start[c]){ - if(cr > end[c]){ - adrs += end[c]-start[c]+1; - } - else{ - adrs += cr - start[c]; - } - c++; - } - c--; - //printf("C=%d,adrs=%d cr=%X ",c,adrs,cr); - // Kanji image Read - fseek( fp, Tnum*4+18+32*adrs, SEEK_SET ); - fread(&font,1,32,fp); - // kanji put - c=0; - for (int y=0;y<16;y++){ - for (int x=0;x<8;x++){ - if((font[c] & 0x80)==0x80){ - pixel(cx+x,cy+y); - } - font[c] = font[c] << 1; - if((font[c+1] & 0x80)==0x80){ - pixel(cx+x+8,cy+y); - } - font[c+1] = font[c+1] << 1; - } - c+=2; - } - //move cursor - cx+=16; - if(cx>=128){ //LF control - cx=0; - cy+=16; - } -} - -void kanji_end(){ - fclose(fp); -} - -void drawc(unsigned char c){ - if(kstate){ // 2nd byte of shift-jis - kstate = false; - - k_puts(kbuf << 8 | c); - } else if((0x81 <= c && c <= 0x9f) || (0xe0 <= c && c <= 0xfc)){ // 1st byte of shift-jis - kstate = true; - kbuf = c; - } else { // Ascii Out - lcdput(c,cx,cy); - movecorsor(1); // 1byte Move - } -} - - void s_Lcdinit() { // device.baud(9600); @@ -434,13 +291,72 @@ device.putc(0x2C); device.putc(0xB6); device.putc(0xAA); - bmp(0,0,1); - lcdputs(" GingaX ",20,140); - wait(3); - bmp(0,0,0); - wait(3); cls(); - color(0xffff); - kanji_init(); + + } + +void kanji_init(){ + printf("Open File...\n"); // Drive should be marked as removed + //move cursor + fp = fopen("/local/SHMZN16X.FNT", "r"); + //FILE *fp = fopen("/local/k12x10.fnt", "r"); + + if(!fp) { + printf("File could not be opened!\n"); + exit(1); } + fgets(Identifier, 6+1, fp); // FONTX2 + fgets(FontName, 8+1, fp); + fread(&XSize, 1, 1, fp); + fread(&YSize, 1, 1, fp); + fread(&CodeType, 1, 1, fp); + fread(&Tnum, 1, 1, fp); + + Size = FONT_XBYTE*YSize; + printf("\nfget[%d]\n",fgetc( fp )); + // Table read + for(int a=0;a<=Size*4;a++){ + fread(&start[a],1,2,fp); + fread(&end[a] ,1,2,fp); + } +} + +//Kanji puts cr = kanji address +void k_puts(int cr){ + int c; + /* fp = fopen("/local/SHMZN16X.FNT", "r"); + if(!fp) { + pc.printf("File could not be opened!\n"); + exit(1); + } +*/ + // Kanji image Read + fseek( fp, Tnum*4+18+32*cr, SEEK_SET ); + fread(&font,1,32,fp); + // kanji put + c=0; + for (int y=0;y<16;y++){ + for (int x=0;x<8;x++){ + if((font[c] & 0x80)==0x80){ + pixel(csrx+x,csry+y); + } + font[c] = font[c] << 1; + if((font[c+1] & 0x80)==0x80){ + pixel(csrx+x+8,csry+y); + } + font[c+1] = font[c+1] << 1; + } + c+=2; + } + //move cursor + csrx+=16; + if(csrx>128){ //LF control + csrx=0; + csry+=16; + } +} + +void kanji_end(){ + fclose(fp); +}