Files
KoboShare/Kobo_dev/screen.c
T
2026-06-12 20:44:16 +02:00

67 lines
1.4 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/fb.h>
#include <sys/ioctl.h>
int main() {
const char *fb_path = "/dev/fb0";
const char *output_dir = "/mnt/onboard/screenshots/";
int fb = open(fb_path, O_RDONLY);
if (fb < 0) {
perror("open framebuffer");
return 1;
}
struct fb_var_screeninfo vinfo;
if (ioctl(fb, FBIOGET_VSCREENINFO, &vinfo)) {
perror("ioctl");
close(fb);
return 1;
}
int width = vinfo.xres;
int height = vinfo.yres;
int bpp = vinfo.bits_per_pixel;
size_t screensize = width * height * (bpp / 8);
unsigned char *buffer = malloc(screensize);
if (!buffer) {
perror("malloc");
close(fb);
return 1;
}
int counter = 0;
while (1) {
if (lseek(fb, 0, SEEK_SET) < 0) { // torna all'inizio del framebuffer
perror("lseek");
break;
}
if (read(fb, buffer, screensize) != screensize) {
perror("read");
break;
}
char filename[256];
snprintf(filename, sizeof(filename), "%s/screen%03d.raw", output_dir, counter++);
FILE *out = fopen(filename, "wb");
if (!out) {
perror("fopen");
break;
}
fwrite(buffer, 1, screensize, out);
fclose(out);
sleep(1);
}
free(buffer);
close(fb);
return 0;
}