📄 vdc_api.c
字号:
#include <stdio.h>#include <stdlib.h>#include <time.h>#include <fcntl.h>#include <unistd.h>#include <sys/mman.h>#include <sys/stat.h>#include <linux/fr400cc_vdc.h>int fd;unsigned char *vdc_init();void vdc_close();/* VDC regs * PHTC RHDC RHFP RHSC RHBP * RVTC RVDC RVFP RVSC RVBP * RHIP RVIP RCK */static int prms_lcd[13] = {0,320, 10, 1, 10,0,240,10,1, 10,0,0,6};/*static int prms_rgb[13] = {858,640,11,67, 60, 1,480,2,4,16,0,0,2};static int prms_ntsc[13] ={858,720, 4, 4,130,262,240,2,4,16,0,0,4};*/unsigned char *vdc_init(){ unsigned char *Vram; static struct fr400vdc_config cfg; /* open device file */ if((fd = open("/dev/fr400cc_vdc", O_RDONLY | O_NONBLOCK )) < 0){ fprintf(stderr, "fd=%d\n", fd); exit(-1); } /*LCD and RGB config*/ cfg.pix_x = 320; /*LCD width*/ cfg.pix_y = 240; /*LCD height*/ cfg.pix_sz = 3; /*byte per pixel*/ cfg.skipbf = 0; /* skip bottom field */ cfg.buf_unit_sz = cfg.pix_x*cfg.pix_y*cfg.pix_sz; /*buffer size*/ cfg.buf_num = 2; /*frame buffer num*/ cfg.stop_immidiate = 1; cfg.rd_count_buf_idx=1; bcopy(prms_lcd, cfg.prm, 4*13); cfg.rddl = 1; /* for underrun */ cfg.hls = 0; cfg.pal = 0; /* PAL */ cfg.cscv = 0; /*direct*/ cfg.dbls = 0; cfg.r601 = 0; cfg.tfop = 0; cfg.dsm = 0; cfg.dfp = 0; /*pack RGB data*/ cfg.die = 1; cfg.enop = 0; cfg.vsop = 0; cfg.hsop = 0; cfg.dsr = 0; cfg.csron = 0; // cursor cfg.dpf = 1; /*RGB output*/ cfg.dms = 3; cfg.dma_mode = 3; cfg.dma_ats = 2; cfg.dma_rs = 1; /*mmap buffer*/ if((Vram = (unsigned char *)mmap(NULL, cfg.buf_unit_sz*cfg.buf_num, PROT_READ | PROT_WRITE, MAP_SHARED,fd, 0)) ==(void *)MAP_FAILED){ fprintf(stderr, "mmap err\n"); close(fd); exit(-1); } /*set all buffer to 0 (black)*/ bzero(Vram,cfg.pix_x*cfg.pix_y*3); /*set new config to vdc*/ if(ioctl(fd, VDCIOCSCFG, &cfg) != 0){ fprintf(stderr, "ioctl set cfg err\n"); close(fd); exit(-1); } /*start vdc*/ ioctl(fd,VDCIOCSDAT, 0); if(ioctl(fd, VDCIOCSTART, 0) != 0){ fprintf(stderr, "ioctl start err\n"); close(fd); exit(-1); } return Vram;}void vdc_close(){ if(fd>0) { if(ioctl(fd, VDCIOCSTOP, 0) != 0){ printf("error stop VDC\n"); exit(-1); } close(fd); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -