📄 graph_api.c
字号:
//*
///////////////////////////////////////////////////////////
//program of api for lcd
// write by laneo
// 整理于12.3
////////////////////////////////////////////////////////////
#include<linux/fr400cc_vdc.h>
#include<stdio.h>
#include<sys/mman.h>
#include<sys/ioctl.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdio.h>
//#include"graph.h" //包含
//*
void initgraph();
void vdc_open();
void vdc_close();
void set_visual_page(unsigned char i);
void set_color(unsigned char *p);
void set_back_color(unsigned char *p);
void moveto(int ex,int ey);
void moverel(int ex,int ey)
void putpixel(int x,int y);
void line(int bx,int by,int ex,int ey);
void lineto(int ex,int ey);
void linerel(int ex,int ey);
void rectangle(int left,int top,int right,int bottom);
void arc_ellipse(int x,int y,int angs,int ange,int xr,int yr);
void arc(int x,int y,int angs,int ange,int r);
void ellipse(int x,int y,int xr,int yr);
void cirle(int x,int y,int r);
//void circle(int x,int y,int r);
void drawcurve(int pt[][2],int ptnum,int innum);
void getimage(int left,int top,int right,int bottom,char* temp);
void putimage(int left,int top,int right,int bottom,char* temp);
void SeeBitmap(char *str);
///////////////////////////////////////////////////////////*/
//*
////////////////////////////////////////////////////////////
int point[2]={0}; /*光标所在像素点*/
unsigned char rgb[3]={0,0,0}; /*前景色*/
unsigned char b_rgb[3]={0,0,0}; /*背景色*/
unsigned char *data=NULL; /*显示缓冲区×2*/
unsigned char *temp=NULL; /*数据缓冲区*/
unsigned char flag=0; /*显示缓冲区标志*/
int fd=0; /*为文件描述符*/
int pix_x=0; /*显示器行分辨率*/
int pix_y=0; /*显示器列分辨率*/
int pix_sz=0; /*其值为三,三原色*/
/////////////////////////////////////////////////////////////*/
//*
///////////////////////////////////////////////////////////////////
void vdc_open()
{
ioctl(fd,VDCIOCSTART,0);
}
void initgraph()
{
struct fr400vdc_config cfg=
{
320,240,3,0,320*240*3,2,1,1,{0,320,1,1,1,0,240,1,1,1,0,0,6},1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,3,3,2,1
};
fd=open("/dev/fr400cc_vdc",O_RDONLY|O_NONBLOCK);
if(fd==0)
{
return 0;
}
ioctl(fd,VDCIOCSCFG,&cfg);
data=mmap(0,(cfg.pix_x)*(cfg.pix_y)*(cfg.pix_sz)*2,PROT_READ|PROT_WRITE, MAP_SHARED,fd,0);
if(data==NULL)
{
return 0;
}
temp=macollo((cfg.pix_x)*(cfg.pix_y)*(cfg.pix_sz));
pix_x=cfg.pix_x;
pix_y=cfg.pix_y;
pix_sz=cfg.pix_sz;
point[0]=0;
point[1]=0;
rgb[0]=0;
rgb[1]=0;
rgb[2]=0;
SeeBitmap("start.bmp",0); //开机画面
vdc_open();
printf("Now the LCD is on control\n");
sleep(1);
return 1;
}
void vdc_close()
{
if(fd==0)
{
if(data==NULL)
{
return ;
}
else
{
munmap(data,pix_x*pix_y*pix_sz*2);
data=NULL;
return ;
}
}
else
{
if(data==NULL)
{
close(fd);
fd=0;
return ;
}
else
{
munmap(data,pix_x*pix_y*pix_sz*2);
data=NULL;
close(fd);
fd=0;
return ;
}
}
}
///////////////////////////////////////////////////////////////////*/
void set_visual_page(unsigned char i)
{
flag=1-i;
ioctl(fd,VDCIOCSDAT,i);
}
void read_in_rgb()
{
int red,green,blue;
printf("please readin RGB"\n);
printf("do like 255:255:255"\n);
scanf("%d:%d:%d",&red,&green,&blue);
temp[0]=red;
temp[1]=green;
temp[2]=blue;
return ;
}
void set_color(unsigned char *p)
{
rgb[3]={p[0],p[1],p[2]};
//free(temp);
}
void set_back_color(unsigned char *p)
{
b_rgb[3]={p[0],p[1],p[2]};
//free(temp);
}
void clear_screen()
{
int x,y;
for(y=0;y<pix_y;y++)
{
for(x=0;x<pix_x;x++)
{
data[y*pix_x*3+x*3+(320*240*3)*flag]=b_rgb[0];
data[y*pix_x*3+x*3+(320*240*3)*flag+1]=b_rgb[1];
data[y*pix_x*3+x*3+(320*240*3)*flag+2]=b_rgb[2];
}
}
set_visual_page(flag);
}
void moveto(int ex,int ey)
{
point[0]=ex;
point[1]=ey;
}
void moverel(int dx,int dy)
{
point[0]+=dx;
point[1]+=dy;
}
void putpixel(int x,int y)
{
if((data==NULL)||(fd==0))
{
return ;
}
if((x>=pix_x)||(y>=pix_y)||(x<0)||(y<0))
{
return ;
}
else
{
data[y*pix_x*3+x*3+(320*240*3)*(1-flag)]=rgb[0];
data[y*pix_x*3+x*3+1+(320*240*3)*(1-flag)]=rgb[1];
data[y*pix_x*3+x*3+2+(320*240*3)*(1-flag)]=rgb[2]; }
}
void line30(int bx,int by,int ex,int ey,int dx,int dy)
{
int p;
putpixel(bx,by);
p=dx-2*dy;
while(bx<ex)
{
bx=bx+1;
if(p>=0)
{
putpixel(bx,by);
p=p-2*dy;
}
else
{
by=by+1;
putpixel(bx,by);
p=p+2*dx-2*dy;
}
}
} /**/
void linem30(int bx,int by,int ex,int ey,int dx,int dy)
{
int p;
putpixel(-bx,by);
p=dx-2*dy;
while(bx<ex)
{
bx=bx+1;
if(p>=0)
{
putpixel(-bx,by);
p=p-2*dy;
}
else
{
by=by+1;
putpixel(-bx,by);
p=p+2*dx-2*dy;
}
}
} /**/
void line60(int bx,int by,int ex,int ey,int dx,int dy)
{
int p;
putpixel(by,bx);
p=dx-2*dy;
while(bx<ex)
{
bx=bx+1;
if(p>=0)
{
putpixel(by,bx);
p=p-2*dy;
}
else
{
by=by+1;
putpixel(by,bx);
p=p+2*dx-2*dy;
}
}
} /**/
void linem60(int bx,int by,int ex,int ey,int dx,int dy)
{
int p;
putpixel(by,-bx);
p=dx-2*dy;
while(bx<ex)
{
bx=bx+1;
if(p>=0)
{
putpixel(by,-bx);
p=p-2*dy;
}
else
{
by=by+1;
putpixel(by,-bx);
p=p+2*dx-2*dy;
}
}
} /**/
void line(int bx,int by,int ex,int ey) /*鐩寸嚎鐨勪袱涓
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -