⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 graph_api.c

📁 fr-400 嵌入式系统板的 图形 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 + -