修改vga_setmode()
This commit is contained in:
parent
845828ba6a
commit
8ab5b8953c
145
src/fbtool.c
145
src/fbtool.c
@ -11,7 +11,8 @@
|
||||
FBDEV currFbdev;
|
||||
|
||||
//打开并且初始化该frame buffer
|
||||
int fb_open(char * sFbdev)
|
||||
int
|
||||
fb_open(char* sFbdev)
|
||||
{
|
||||
memset(&currFbdev, 0, sizeof(FBDEV));
|
||||
strcpy(currFbdev.dev, sFbdev);
|
||||
@ -25,26 +26,28 @@ int fb_open(char * sFbdev)
|
||||
}
|
||||
|
||||
// 初始化fb_var
|
||||
if(-1 == ioctl(currFbdev.fb,FBIOGET_VSCREENINFO,&(currFbdev.fb_var)))
|
||||
{
|
||||
if (-1 == ioctl(currFbdev.fb, FBIOGET_VSCREENINFO, &(currFbdev.fb_var))) {
|
||||
printf("ioctl FBIOGET_VSCREENINFO\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 初始化fb_fix
|
||||
if(-1 == ioctl(currFbdev.fb,FBIOGET_FSCREENINFO,&(currFbdev.fb_fix)))
|
||||
{
|
||||
if (-1 == ioctl(currFbdev.fb, FBIOGET_FSCREENINFO, &(currFbdev.fb_fix))) {
|
||||
printf("ioctl FBIOGET_FSCREENINFO\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
//将物理地址映射到虚拟地址
|
||||
currFbdev.fb_mem_offset = (unsigned long)currFbdev.fb_fix.smem_start & (~PAGE_MASK);
|
||||
currFbdev.fb_mem_offset =
|
||||
(unsigned long)currFbdev.fb_fix.smem_start & (~PAGE_MASK);
|
||||
|
||||
currFbdev.fb_mem = (unsigned long int)mmap(NULL,currFbdev.fb_fix.smem_len + currFbdev.fb_mem_offset,PROT_READ|PROT_WRITE,MAP_SHARED,currFbdev.fb,0);
|
||||
currFbdev.fb_mem = (unsigned long int)mmap(
|
||||
NULL, currFbdev.fb_fix.smem_len + currFbdev.fb_mem_offset,
|
||||
PROT_READ | PROT_WRITE, MAP_SHARED, currFbdev.fb, 0);
|
||||
|
||||
if(-1L == (long)currFbdev.fb_mem){
|
||||
printf("mmap error with mem:%lu,mem_offset:%lu\n",currFbdev.fb_mem_offset,currFbdev.fb_mem);
|
||||
if (-1L == (long)currFbdev.fb_mem) {
|
||||
printf("mmap error with mem:%lu,mem_offset:%lu\n", currFbdev.fb_mem_offset,
|
||||
currFbdev.fb_mem);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -52,7 +55,8 @@ int fb_open(char * sFbdev)
|
||||
}
|
||||
|
||||
//关闭frame buffer
|
||||
int fb_close(PFBDEV pFbdev)
|
||||
int
|
||||
fb_close(PFBDEV pFbdev)
|
||||
{
|
||||
int r = close(currFbdev.fb);
|
||||
currFbdev.fb = -1;
|
||||
@ -61,121 +65,138 @@ int fb_close(PFBDEV pFbdev)
|
||||
}
|
||||
|
||||
//打印frame buffer 所占内存的开始地址
|
||||
void pmem_start(PFBDEV pFbdev)
|
||||
void
|
||||
pmem_start(PFBDEV pFbdev)
|
||||
{
|
||||
printf("frame buffer所占内存的开始地址为:%lu\n",currFbdev.fb_fix.smem_start);
|
||||
printf("frame buffer所占内存的开始地址为:%lu\n", currFbdev.fb_fix.smem_start);
|
||||
}
|
||||
|
||||
//打印FB_TYPE
|
||||
void p_type(PFBDEV pFbdev)
|
||||
void
|
||||
p_type(PFBDEV pFbdev)
|
||||
{
|
||||
printf("frame buffer 的类型为:%d\n",currFbdev.fb_fix.type);
|
||||
printf("frame buffer 的类型为:%d\n", currFbdev.fb_fix.type);
|
||||
}
|
||||
|
||||
//打印可见清晰度
|
||||
void p_visible_res(PFBDEV pFbdev)
|
||||
void
|
||||
p_visible_res(PFBDEV pFbdev)
|
||||
{
|
||||
printf("frame buffer的可见清晰度为:\n\tx = %d\n\ty = %d\n",currFbdev.fb_var.xres,currFbdev.fb_var.yres);
|
||||
printf("frame buffer的可见清晰度为:\n\tx = %d\n\ty = %d\n",
|
||||
currFbdev.fb_var.xres, currFbdev.fb_var.yres);
|
||||
}
|
||||
|
||||
//打印虚拟分辨率
|
||||
void p_virt_res(PFBDEV pFbdev)
|
||||
void
|
||||
p_virt_res(PFBDEV pFbdev)
|
||||
{
|
||||
printf("frame buffer的虚拟清晰度为:\n\tx = %d\n\ty = %d\n",currFbdev.fb_var.xres_virtual,currFbdev.fb_var.yres_virtual);
|
||||
printf("frame buffer的虚拟清晰度为:\n\tx = %d\n\ty = %d\n",
|
||||
currFbdev.fb_var.xres_virtual, currFbdev.fb_var.yres_virtual);
|
||||
}
|
||||
|
||||
//打印虚拟到可见的偏移量
|
||||
void p_offset(PFBDEV pFbdev)
|
||||
void
|
||||
p_offset(PFBDEV pFbdev)
|
||||
{
|
||||
printf("frame buffer的虚拟分辨率到可见分辨率的偏移量为:\n\tx = %d\n\ty = %d\n",currFbdev.fb_var.xoffset,currFbdev.fb_var.yoffset);
|
||||
printf(
|
||||
"frame buffer的虚拟分辨率到可见分辨率的偏移量为:\n\tx = %d\n\ty = %d\n",
|
||||
currFbdev.fb_var.xoffset, currFbdev.fb_var.yoffset);
|
||||
}
|
||||
|
||||
//打印每个像素的位数
|
||||
void p_bpp(PFBDEV pFbdev)
|
||||
void
|
||||
p_bpp(PFBDEV pFbdev)
|
||||
{
|
||||
printf("frame buffer的BPP为:%d\n",currFbdev.fb_var.bits_per_pixel);
|
||||
printf("frame buffer的BPP为:%d\n", currFbdev.fb_var.bits_per_pixel);
|
||||
}
|
||||
|
||||
//打印R,G,B和透明度
|
||||
void p_rgbt(PFBDEV pFbdev)
|
||||
void
|
||||
p_rgbt(PFBDEV pFbdev)
|
||||
{
|
||||
//R位域
|
||||
// R位域
|
||||
printf("R位域:\n");
|
||||
struct fb_bitfield bf = currFbdev.fb_var.red;
|
||||
printf("\t开始:%d\n",bf.offset);
|
||||
printf("\t长度:%d\n",bf.length);
|
||||
printf("\tMSB:%d\n",bf.msb_right);
|
||||
printf("\t开始:%d\n", bf.offset);
|
||||
printf("\t长度:%d\n", bf.length);
|
||||
printf("\tMSB:%d\n", bf.msb_right);
|
||||
|
||||
//G位域
|
||||
// G位域
|
||||
printf("G位域:\n");
|
||||
bf = currFbdev.fb_var.green;
|
||||
printf("\t开始:%d\n",bf.offset);
|
||||
printf("\t长度:%d\n",bf.length);
|
||||
printf("\tMSB:%d\n",bf.msb_right);
|
||||
printf("\t开始:%d\n", bf.offset);
|
||||
printf("\t长度:%d\n", bf.length);
|
||||
printf("\tMSB:%d\n", bf.msb_right);
|
||||
|
||||
// B位域
|
||||
printf("B位域:\n");
|
||||
bf = currFbdev.fb_var.blue;
|
||||
printf("\t开始:%d\n",bf.offset);
|
||||
printf("\t长度:%d\n",bf.length);
|
||||
printf("\tMSB:%d\n",bf.msb_right);
|
||||
printf("\t开始:%d\n", bf.offset);
|
||||
printf("\t长度:%d\n", bf.length);
|
||||
printf("\tMSB:%d\n", bf.msb_right);
|
||||
|
||||
// 透明度位域
|
||||
printf("透明度位域:\n");
|
||||
bf = currFbdev.fb_var.transp;
|
||||
printf("\t开始:%d\n",bf.offset);
|
||||
printf("\t长度:%d\n",bf.length);
|
||||
printf("\tMSB:%d\n",bf.msb_right);
|
||||
printf("\t开始:%d\n", bf.offset);
|
||||
printf("\t长度:%d\n", bf.length);
|
||||
printf("\tMSB:%d\n", bf.msb_right);
|
||||
}
|
||||
|
||||
//打印在内存中的高度和宽度
|
||||
void p_hw(PFBDEV pFbdev)
|
||||
void
|
||||
p_hw(PFBDEV pFbdev)
|
||||
{
|
||||
printf("frame buffer在内存中所占的高度和宽度分别是:\n\t宽度 = %d\n\t高度 = %d\n",currFbdev.fb_var.height,currFbdev.fb_var.width);
|
||||
printf(
|
||||
"frame buffer在内存中所占的高度和宽度分别是:\n\t宽度 = %d\n\t高度 = %d\n",
|
||||
currFbdev.fb_var.height, currFbdev.fb_var.width);
|
||||
}
|
||||
|
||||
//清空控制台
|
||||
void clear_con(void *addr,int n,size_t len)
|
||||
void
|
||||
clear_con(void* addr, int n, size_t len)
|
||||
{
|
||||
memset(addr,n,len);
|
||||
memset(addr, n, len);
|
||||
}
|
||||
|
||||
//映射到内存
|
||||
void inline fb_memcpy(void *addr,void *color,size_t len)
|
||||
void inline fb_memcpy(void* addr, void* color, size_t len)
|
||||
{
|
||||
memcpy(addr,color,len);
|
||||
memcpy(addr, color, len);
|
||||
}
|
||||
|
||||
RGBT getRGBT(const char *temp){
|
||||
RGBT
|
||||
getRGBT(const char* temp)
|
||||
{
|
||||
RGBT rgbt;
|
||||
|
||||
char *c_tmp;
|
||||
c_tmp = (char *)malloc(4 * sizeof(int));
|
||||
char* c_tmp;
|
||||
c_tmp = (char*)malloc(4 * sizeof(int));
|
||||
|
||||
c_tmp[0] = '0';
|
||||
c_tmp[1] = 'x';
|
||||
int r,g,b,t;
|
||||
int r, g, b, t;
|
||||
|
||||
//RGBT值的计算
|
||||
// RGBT值的计算
|
||||
c_tmp[2] = temp[0];
|
||||
c_tmp[3] = temp[1];
|
||||
|
||||
r = strtol(c_tmp,NULL,16);
|
||||
r = strtol(c_tmp, NULL, 16);
|
||||
|
||||
c_tmp[2] = temp[2];
|
||||
c_tmp[3] = temp[3];
|
||||
|
||||
g = strtol(c_tmp,NULL,16);
|
||||
g = strtol(c_tmp, NULL, 16);
|
||||
|
||||
c_tmp[2] = temp[4];
|
||||
c_tmp[3] = temp[5];
|
||||
|
||||
b = strtol(c_tmp,NULL,16);
|
||||
b = strtol(c_tmp, NULL, 16);
|
||||
|
||||
c_tmp[2] = temp[6];
|
||||
c_tmp[3] = temp[7];
|
||||
|
||||
t = strtol(c_tmp,NULL,16);
|
||||
t = strtol(c_tmp, NULL, 16);
|
||||
|
||||
rgbt.r = r;
|
||||
rgbt.g = g;
|
||||
@ -184,23 +205,3 @@ RGBT getRGBT(const char *temp){
|
||||
|
||||
return rgbt;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
46
src/vga.c
46
src/vga.c
@ -2,11 +2,51 @@
|
||||
#include "fbtool.h"
|
||||
|
||||
//初始化framebuffer
|
||||
int vga_init(void) {
|
||||
char *fbdev = "/dev/fb0";
|
||||
int
|
||||
vga_init(void)
|
||||
{
|
||||
char* fbdev = "/dev/fb0";
|
||||
if (0 == fb_open(fbdev)) {
|
||||
printf("Open %s fail!!\n", fbdev);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
int vga_setmode(int mode) {}
|
||||
int
|
||||
vga_setmode(int mode)
|
||||
{
|
||||
struct fb_bitfield bf;
|
||||
//每个像素的位数
|
||||
if (currFbdev.fb_var.bits_per_pixel != 16) {
|
||||
printf("不支持的模式.");
|
||||
return -1;
|
||||
}
|
||||
// R位域
|
||||
bf = currFbdev.fb_var.red;
|
||||
if (bf.offset != 0 || bf.length != 5 || bf.msb_right) {
|
||||
printf("不支持的模式.\n");
|
||||
return -1
|
||||
}
|
||||
|
||||
// G位域
|
||||
bf = currFbdev.fb_var.green;
|
||||
if (bf.offset != 0 || bf.length != 5 || bf.msb_right) {
|
||||
printf("不支持的模式.\n");
|
||||
return -1
|
||||
}
|
||||
|
||||
// B位域
|
||||
bf = currFbdev.fb_var.blue;
|
||||
if (bf.offset != 0 || bf.length != 5 || bf.msb_right) {
|
||||
printf("不支持的模式.\n");
|
||||
return -1
|
||||
}
|
||||
|
||||
// 透明度位域
|
||||
bf = currFbdev.fb_var.transp;
|
||||
if (bf.offset != 0 || bf.length != 5 || bf.msb_right) {
|
||||
printf("不支持的模式.\n");
|
||||
return -1
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user