int main(int argc, char* args[]) { int ret = 0; int fbfd = 0; struct pollfd evpoll = { .events = POLLIN, }; srand (time(NULL)); evpoll.fd = open_evdev("Raspberry Pi Sense HAT Joystick"); if (evpoll.fd < 0) { fprintf(stderr, "Event device not found.\n"); return evpoll.fd; } fbfd = open_fbdev("RPi-Sense FB"); if (fbfd <= 0) { ret = fbfd; printf("Error: cannot open framebuffer device.\n"); goto err_ev; } fb = mmap(0, 128, PROT_READ | PROT_WRITE, MAP_SHARED, fbfd, 0); if (!fb) { ret = EXIT_FAILURE; printf("Failed to mmap.\n"); goto err_fb; } memset(fb, 0, 128); snake.tail = &snake.head; reset(); while (running) { while (poll(&evpoll, 1, 0) > 0) handle_events(evpoll.fd); game_logic(); if (check_collision(0)) { reset(); } render(); usleep (300000); } memset(fb, 0, 128); reset(); munmap(fb, 128); err_fb: close(fbfd); err_ev: close(evpoll.fd); return ret; }
int gr_init(void) { gr_init_font(); gr_vt_fd = open("/dev/tty0", O_RDWR | O_SYNC); if (gr_vt_fd < 0) { // This is non-fatal; post-Cupcake kernels don't have tty0. perror("can't open /dev/tty0"); } else if (ioctl(gr_vt_fd, KDSETMODE, (void*) KD_GRAPHICS)) { // However, if we do open tty0, we expect the ioctl to work. perror("failed KDSETMODE to KD_GRAPHICS on tty0"); gr_exit(); return -1; } gr_backend = open_adf(); if (gr_backend) { gr_draw = gr_backend->init(gr_backend); if (!gr_draw) { gr_backend->exit(gr_backend); } } if (!gr_draw) { gr_backend = open_fbdev(); gr_draw = gr_backend->init(gr_backend); if (gr_draw == NULL) { return -1; } } overscan_offset_x = gr_draw->width * overscan_percent / 100; overscan_offset_y = gr_draw->height * overscan_percent / 100; gr_flip(); gr_flip(); return 0; }