rotatefb.c

来自「Android 一些工具」· C语言 代码 · 共 72 行

C
72
字号
#include <ctype.h>#include <stdio.h>#include <stdlib.h>#include <sys/mman.h>#include <fcntl.h>#include <string.h>#include <termios.h>#include <unistd.h>#include <errno.h>#include <linux/fb.h>int rotatefb_main(int argc, char *argv[]){    int c;    char *fbdev = "/dev/graphics/fb0";    int rotation = 0;    int fd;    int res;    struct fb_var_screeninfo fbinfo;    do {        c = getopt(argc, argv, "d:");        if (c == EOF)            break;        switch (c) {        case 'd':            fbdev = optarg;            break;        case '?':            fprintf(stderr, "%s: invalid option -%c\n",                argv[0], optopt);            exit(1);        }    } while (1);    if(optind + 1 != argc) {        fprintf(stderr, "%s: specify rotation\n", argv[0]);        exit(1);    }    rotation = atoi(argv[optind]);    fd = open(fbdev, O_RDWR);    if(fd < 0) {        fprintf(stderr, "cannot open %s\n", fbdev);        return 1;    }    res = ioctl(fd, FBIOGET_VSCREENINFO, &fbinfo);    if(res < 0) {        fprintf(stderr, "failed to get fbinfo: %s\n", strerror(errno));        return 1;    }    if((fbinfo.rotate ^ rotation) & 1) {        unsigned int xres = fbinfo.yres;        fbinfo.yres = fbinfo.xres;        fbinfo.xres = xres;        fbinfo.xres_virtual = fbinfo.xres;        fbinfo.yres_virtual = fbinfo.yres * 2;        if(fbinfo.yoffset == xres)            fbinfo.yoffset = fbinfo.yres;    }    fbinfo.rotate = rotation;     res = ioctl(fd, FBIOPUT_VSCREENINFO, &fbinfo);    if(res < 0) {        fprintf(stderr, "failed to set fbinfo: %s\n", strerror(errno));        return 1;    }    return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?