tweaking pandora frontend
[libpicofe.git] / pandora / picorestore.c
CommitLineData
f6eaae4f 1#include <stdio.h>
2#include <sys/types.h>
3#include <sys/stat.h>
4#include <fcntl.h>
5#include <unistd.h>
6#include <sys/ioctl.h>
7#include <linux/fb.h>
8#include <termios.h>
9#include <linux/kd.h>
10
11int main()
12{
13 struct fb_var_screeninfo fbvar;
14 struct termios kbd_termios;
15 int ret, fbdev, kbdfd;
16 FILE *tios_f;
17
18 fbdev = open("/dev/fb0", O_RDWR);
19 if (fbdev == -1) {
20 perror("open");
21 return 1;
22 }
23
24 ret = ioctl(fbdev, FBIOGET_VSCREENINFO, &fbvar);
25 if (ret == -1) {
26 perror("FBIOGET_VSCREENINFO ioctl");
27 goto end_fb;
28 }
29
30 if (fbvar.yoffset != 0) {
31 printf("fixing yoffset.. ");
32 fbvar.yoffset = 0;
33 ret = ioctl(fbdev, FBIOPAN_DISPLAY, &fbvar);
34 if (ret < 0)
35 perror("ioctl FBIOPAN_DISPLAY");
36 else
37 printf("ok\n");
38 }
39
40end_fb:
41 close(fbdev);
42
43 tios_f = fopen("/tmp/pico_tios", "rb");
44 if (tios_f != NULL) {
45 kbdfd = open("/dev/tty", O_RDWR);
46 if (kbdfd == -1) {
47 perror("open /dev/tty");
48 return 1;
49 }
50
51 if (fread(&kbd_termios, sizeof(kbd_termios), 1, tios_f) == 1) {
52 if (ioctl(kbdfd, KDSETMODE, KD_TEXT) == -1)
53 perror("KDSETMODE KD_TEXT");
54
55 printf("restoring termios.. ");
56 if (tcsetattr(kbdfd, TCSAFLUSH, &kbd_termios) == -1)
57 perror("tcsetattr");
58 else
59 printf("ok\n");
60 }
61
62 close(kbdfd);
63 fclose(tios_f);
64 }
65
66 return 0;
67}