| 77a37381 |
1 | #include "stdafx.h" |
| 2 | #include "tester1.h" |
| 3 | #include <commctrl.h> |
| 4 | //#include <aygshell.h> |
| 5 | #include <sipapi.h> |
| 6 | #include "setup.h" |
| 7 | |
| 8 | |
| 9 | /* TO DO: Detect whether we're running on an AXIM or an iPAQ at runtime, |
| 10 | and set accordingly. */ |
| 11 | |
| 12 | #ifdef AXIM |
| 13 | # define FB_ADR 0x14042000 |
| 14 | #else |
| 15 | # define FB_ADR 0xA0051000 |
| 16 | #endif |
| 17 | |
| 18 | |
| 19 | |
| 20 | #define SET 0xffffffff |
| 21 | #define LCD_X_RES 240 |
| 22 | #define LCD_Y_RES 320 |
| 23 | UINT16 *fb; |
| 24 | |
| 25 | |
| 26 | void init_fb() |
| 27 | { |
| 28 | fb=(UINT16*)VirtualAlloc((void*)0x0,LCD_X_RES*LCD_Y_RES*2, MEM_RESERVE,PAGE_READWRITE); |
| 29 | VirtualCopy((void*)fb,(void *) (FB_ADR/256),LCD_X_RES*LCD_Y_RES*2, PAGE_READWRITE|PAGE_NOCACHE|PAGE_PHYSICAL); |
| 30 | } |
| 31 | |
| 32 | void try_fb() |
| 33 | { |
| 34 | // fb[1]=SET; |
| 35 | } |
| 36 | |
| 37 | Image ReadBMP(char FileName[30]) |
| 38 | { |
| 39 | FILE *stream; |
| 40 | char buff[29]; |
| 41 | UINT32 x,y; |
| 42 | unsigned char red,green,blue; |
| 43 | unsigned long offset; |
| 44 | UINT16 *p,c; |
| 45 | Image image={NULL}; |
| 46 | stream=fopen(FileName,"rb"); |
| 47 | if(!stream) return image; |
| 48 | fread(buff,26,1,stream); |
| 49 | |
| 50 | offset=(unsigned char)buff[13]*16777216+(unsigned char)buff[12]*65536+(unsigned char)buff[11]*256+(unsigned char)buff[10]; |
| 51 | x=(unsigned char)buff[21]*256*256*256+(unsigned char)buff[20]*256*256+(unsigned char)buff[19]*256+(unsigned char)buff[18]; |
| 52 | y=(unsigned char)buff[25]*256*256*256+(unsigned char)buff[24]*256*256+(unsigned char)buff[23]*256+(unsigned char)buff[22]; |
| 53 | // offset=54; |
| 54 | UINT32 imgx=x,imgy=y; |
| 55 | if(x<32) x=32; |
| 56 | if(y<32) y=32; |
| 57 | p=image.p=(UINT16*)malloc(x*y*2); |
| 58 | if(!image.p) return(image); |
| 59 | fseek(stream,offset,SEEK_SET); |
| 60 | p+=(x*y+x); |
| 61 | |
| 62 | for(UINT32 zz=0;zz<y;zz++) |
| 63 | { |
| 64 | p-=2*x; |
| 65 | |
| 66 | for(UINT32 yy=0;yy<x;yy++) |
| 67 | { |
| 68 | blue=fgetc(stream); |
| 69 | green=fgetc(stream); |
| 70 | red=fgetc(stream); |
| 71 | c=(red/8)*2048+(green/4)*32+blue/8; |
| 72 | *p=c; |
| 73 | p++; |
| 74 | |
| 75 | } |
| 76 | |
| 77 | } |
| 78 | //image.p=p; |
| 79 | image.x=imgx; |
| 80 | image.y=imgy-1; |
| 81 | fclose(stream); |
| 82 | return(image); |
| 83 | } |
| 84 | |
| 85 | // shows picture pointed to by p, with res (x by y), at (x_pos, y_pos) |
| 86 | void ShowImage(UINT16 *p, int x, int y,int x_pos,int y_pos) |
| 87 | { |
| 88 | UINT16 *fb=::fb; |
| 89 | if(!p) return; |
| 90 | fb+=y_pos*LCD_X_RES+x_pos; |
| 91 | for(int yy=0;yy<y;yy++) |
| 92 | { |
| 93 | for(int xx=0;xx<x;xx++) |
| 94 | { |
| 95 | *fb=*p; |
| 96 | fb++; |
| 97 | p++; |
| 98 | } |
| 99 | if(x<LCD_X_RES) fb+=LCD_X_RES-x; |
| 100 | } |
| 101 | } |