#include <linux/kd.h>
#define PFX "oshide: "
-#define TERMIOS_DUMP_FILE "/tmp/pico_tios"
#define FPTR(f) typeof(f) * p##f
#define FPTR_LINK(xf, dl, f) { \
static void hidecon_start(void)
{
struct termios kbd_termios;
- FILE *tios_f;
int mode;
g_kbdfd = open("/dev/tty", O_RDWR);
goto fail;
}
- /* dump for picorestore */
- g_kbd_termios_saved = kbd_termios;
- tios_f = fopen(TERMIOS_DUMP_FILE, "wb");
- if (tios_f) {
- fwrite(&kbd_termios, sizeof(kbd_termios), 1, tios_f);
- fclose(tios_f);
- }
-
kbd_termios.c_lflag &= ~(ICANON | ECHO); // | ISIG);
kbd_termios.c_iflag &= ~(ISTRIP | IGNCR | ICRNL | INLCR | IXOFF | IXON);
kbd_termios.c_cc[VMIN] = 0;
if (tcsetattr(g_kbdfd, TCSAFLUSH, &g_kbd_termios_saved) == -1)
perror(PFX "tcsetattr");
- remove(TERMIOS_DUMP_FILE);
-
close(g_kbdfd);
g_kbdfd = -1;
}
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/fb.h>
-#include <termios.h>
#include <linux/kd.h>
int main()
{
struct fb_var_screeninfo fbvar;
- struct termios kbd_termios;
int ret, fbdev, kbdfd;
- FILE *tios_f;
fbdev = open("/dev/fb0", O_RDWR);
if (fbdev == -1) {
end_fb:
close(fbdev);
- tios_f = fopen("/tmp/pico_tios", "rb");
- if (tios_f != NULL) {
- kbdfd = open("/dev/tty", O_RDWR);
- if (kbdfd == -1) {
- perror("open /dev/tty");
- return 1;
- }
-
- if (fread(&kbd_termios, sizeof(kbd_termios), 1, tios_f) == 1) {
- if (ioctl(kbdfd, KDSETMODE, KD_TEXT) == -1)
- perror("KDSETMODE KD_TEXT");
+ kbdfd = open("/dev/tty", O_RDWR);
+ if (kbdfd == -1) {
+ perror("open /dev/tty");
+ return 1;
+ }
- printf("restoring termios.. ");
- if (tcsetattr(kbdfd, TCSAFLUSH, &kbd_termios) == -1)
- perror("tcsetattr");
- else
- printf("ok\n");
- }
+ if (ioctl(kbdfd, KDSETMODE, KD_TEXT) == -1)
+ perror("KDSETMODE KD_TEXT");
- close(kbdfd);
- fclose(tios_f);
- }
+ close(kbdfd);
return 0;
}