diff --git a/3rd/cute_png/src/cute_png.c b/3rd/cute_png/src/cute_png.c index beb7d884..f3c68a82 100644 --- a/3rd/cute_png/src/cute_png.c +++ b/3rd/cute_png/src/cute_png.c @@ -4,13 +4,13 @@ #define CUTE_PNG_IMPLEMENTATION #include "cute_png.h" -// #if PY_SYS_PLATFORM == 5 -// #include -// #include -// #include -// #include -// #include -// #endif +#if PY_SYS_PLATFORM == 5 +#include +#include +#include +#include +#include +#endif static bool cute_png_loads(int argc, py_Ref argv) { PY_CHECK_ARGC(1); @@ -215,37 +215,37 @@ static bool cute_png_Image__to_rgb565_file(int argc, py_Ref argv) { } \ } -// #if PY_SYS_PLATFORM == 5 -// if(strcmp(path, "/dev/fb0") == 0) { -// static struct fb_fix_screeninfo finfo; -// static uint8_t* vmem_base; -// if(vmem_base == NULL) { -// int fbdev_fd = open(path, O_RDWR); -// if(fbdev_fd < 0) return OSError("open() '/dev/fb0' failed"); -// fcntl(fbdev_fd, F_SETFD, fcntl(fbdev_fd, F_GETFD) | FD_CLOEXEC); -// if(ioctl(fbdev_fd, FBIOGET_FSCREENINFO, &finfo) < 0) { -// close(fbdev_fd); -// return OSError("ioctl() '/dev/fb0' failed"); -// } -// vmem_base = mmap(0, finfo.smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fbdev_fd, 0); -// if(vmem_base == MAP_FAILED) { -// vmem_base = NULL; -// close(fbdev_fd); -// return OSError("mmap() '/dev/fb0' failed"); -// } -// close(fbdev_fd); -// } -// CONVERT_TO_RGB565( -// // use little endian -// if(size + 2 > finfo.smem_len) { -// py_newint(py_retval(), size); -// return true; -// } memcpy(vmem_base + size, &rgb565, 2); -// size += 2;) -// py_newint(py_retval(), size); -// return true; -// } -// #endif +#if PY_SYS_PLATFORM == 5 + if(strcmp(path, "/dev/fb0") == 0) { + static struct fb_fix_screeninfo finfo; + static uint8_t* vmem_base; + if(vmem_base == NULL) { + int fbdev_fd = open(path, O_RDWR); + if(fbdev_fd < 0) return OSError("open() '/dev/fb0' failed"); + fcntl(fbdev_fd, F_SETFD, fcntl(fbdev_fd, F_GETFD) | FD_CLOEXEC); + if(ioctl(fbdev_fd, FBIOGET_FSCREENINFO, &finfo) < 0) { + close(fbdev_fd); + return OSError("ioctl() '/dev/fb0' failed"); + } + vmem_base = mmap(0, finfo.smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fbdev_fd, 0); + if(vmem_base == MAP_FAILED) { + vmem_base = NULL; + close(fbdev_fd); + return OSError("mmap() '/dev/fb0' failed"); + } + close(fbdev_fd); + } + CONVERT_TO_RGB565( + // use little endian + if(size + 2 > finfo.smem_len) { + py_newint(py_retval(), size); + return true; + } memcpy(vmem_base + size, &rgb565, 2); + size += 2;) + py_newint(py_retval(), size); + return true; + } +#endif FILE* fp = fopen(path, "wb"); if(fp == NULL) return OSError("cannot open file '%s' for writing", path);