From f08bf5a16a23cdb61a36e6d95fc24a61bce84224 Mon Sep 17 00:00:00 2001 From: NiLuJe Date: Wed, 20 Feb 2019 23:37:51 +0100 Subject: [PATCH 1/9] Ah. Knew I remembered another one somewhere... --- ffi/koptcontext.lua | 2 +- ffi/leptonica_h.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ffi/koptcontext.lua b/ffi/koptcontext.lua index 4bab4f4e9..cfbb4df1b 100644 --- a/ffi/koptcontext.lua +++ b/ffi/koptcontext.lua @@ -371,7 +371,7 @@ function KOPTContext_mt.__index:exportSrcPNGString(pboxes, drawer) local pix = self:getSrcPix(pboxes, drawer) if pix ~= nil then local pdata = ffi.new("char *[1]") - local psize = ffi.new("unsigned int[1]") + local psize = ffi.new("size_t[1]") leptonica.pixWriteMemPng(pdata, psize, pix, 0.0) leptonica.pixDestroy(ffi.new('PIX *[1]', pix)) if pdata[0] ~= nil then diff --git a/ffi/leptonica_h.lua b/ffi/leptonica_h.lua index 4abf7c5cb..ed1e2cab0 100644 --- a/ffi/leptonica_h.lua +++ b/ffi/leptonica_h.lua @@ -81,7 +81,7 @@ void boxaDestroy(BOXA **); void numaDestroy(NUMA **); void pixDestroy(PIX **); l_int32 pixWritePng(const char *, PIX *, l_float32); -l_int32 pixWriteMemPng(l_uint8 **, unsigned int *, PIX *, l_float32); +l_int32 pixWriteMemPng(l_uint8 **, size_t *, PIX *, l_float32); l_int32 pixGetWidth(PIX *); l_int32 pixGetHeight(PIX *); l_int32 pixGetDepth(PIX *); From 99d7b66eac092eed203626934e8b8fd4f3be59c0 Mon Sep 17 00:00:00 2001 From: NiLuJe Date: Wed, 20 Feb 2019 23:38:55 +0100 Subject: [PATCH 2/9] Latest Linux headers Not that we care, but, still ;p. --- ffi/linux_fb_h.lua | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ffi/linux_fb_h.lua b/ffi/linux_fb_h.lua index c7cdfe106..bcdaf27df 100644 --- a/ffi/linux_fb_h.lua +++ b/ffi/linux_fb_h.lua @@ -23,7 +23,8 @@ struct fb_fix_screeninfo { long unsigned int mmio_start; unsigned int mmio_len; unsigned int accel; - short unsigned int reserved[3]; + short unsigned int capabilities; + short unsigned int reserved[2]; }; struct fb_var_screeninfo { unsigned int xres; @@ -53,6 +54,7 @@ struct fb_var_screeninfo { unsigned int sync; unsigned int vmode; unsigned int rotate; - unsigned int reserved[5]; + unsigned int colorspace; + unsigned int reserved[4]; }; ]] From e65a7645b491ed9f9bce40f04ea9b5956fed9c95 Mon Sep 17 00:00:00 2001 From: NiLuJe Date: Thu, 21 Feb 2019 00:02:41 +0100 Subject: [PATCH 3/9] And MuPDF, too... --- ffi/mupdf_h.lua | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/ffi/mupdf_h.lua b/ffi/mupdf_h.lua index 061b72fef..786a40b23 100644 --- a/ffi/mupdf_h.lua +++ b/ffi/mupdf_h.lua @@ -64,11 +64,11 @@ struct fz_key_storable_s { short int store_key_refs; }; void fz_install_external_font_funcs(fz_context *); -struct fz_buffer_s *mupdf_new_buffer_from_shared_data(fz_context *, const unsigned char *, unsigned int); +struct fz_buffer_s *mupdf_new_buffer_from_shared_data(fz_context *, const unsigned char *, size_t); void *mupdf_drop_buffer(fz_context *, struct fz_buffer_s *); typedef struct fz_alloc_context_s fz_alloc_context; typedef struct fz_colorspace_s fz_colorspace; -fz_context *fz_new_context_imp(const fz_alloc_context *, const struct fz_locks_context_s *, unsigned int, const char *); +fz_context *fz_new_context_imp(const fz_alloc_context *, const struct fz_locks_context_s *, size_t, const char *); void fz_drop_context(fz_context *); void fz_register_document_handlers(fz_context *); typedef struct fz_image_s fz_image; @@ -92,7 +92,7 @@ struct fz_image_s { fz_colorspace *colorspace; void (*drop_image)(fz_context *, fz_image *); fz_pixmap *(*get_pixmap)(fz_context *, fz_image *, fz_irect *, int, int, int *); - unsigned int (*get_size)(fz_context *, fz_image *); + size_t (*get_size)(fz_context *, fz_image *); int colorkey[64]; float decode[64]; }; @@ -106,7 +106,7 @@ struct fz_pixmap_s { unsigned char s; unsigned char alpha; unsigned char flags; - int stride; + ptrdiff_t stride; struct fz_separations_s *seps; int xres; int yres; @@ -119,7 +119,7 @@ fz_pixmap *mupdf_get_pixmap_from_image(fz_context *, fz_image *, const fz_irect void *mupdf_save_pixmap_as_png(fz_context *, fz_pixmap *, const char *); fz_image *fz_keep_image(fz_context *, fz_image *); void fz_drop_image(fz_context *, fz_image *); -fz_pixmap *fz_load_png(fz_context *, const unsigned char *, unsigned int); +fz_pixmap *fz_load_png(fz_context *, const unsigned char *, size_t); int fz_runetochar(char *, int); typedef struct fz_annot_s fz_annot; struct fz_annot_s { @@ -157,8 +157,8 @@ struct fz_document_s { }); fz_outline *(*load_outline)(fz_context *, fz_document *); void (*layout)(fz_context *, fz_document *, float, float, float); - int (*make_bookmark)(fz_context *, fz_document *, int); - int (*lookup_bookmark)(fz_context *, fz_document *, int); + intptr_t (*make_bookmark)(fz_context *, fz_document *, int); + int (*lookup_bookmark)(fz_context *, fz_document *, intptr_t); int (*resolve_link)(fz_context *, fz_document *, const char *, float *, float *); int (*count_pages)(fz_context *, fz_document *); fz_page *(*load_page)(fz_context *, fz_document *, int); @@ -204,7 +204,7 @@ void fz_drop_link(fz_context *, fz_link *); fz_outline *mupdf_load_outline(fz_context *, fz_document *); void fz_drop_outline(fz_context *, fz_outline *); void *mupdf_drop_stream(fz_context *, struct fz_stream_s *); -struct fz_stream_s *mupdf_open_memory(fz_context *, const unsigned char *, unsigned int); +struct fz_stream_s *mupdf_open_memory(fz_context *, const unsigned char *, size_t); typedef struct fz_stext_char_s fz_stext_char; struct fz_stext_char_s { int c; @@ -323,7 +323,7 @@ struct pdf_lexbuf_s { int size; int base_size; int len; - long long int i; + int64_t i; float f; char *scratch; char buffer[256]; @@ -350,8 +350,8 @@ struct pdf_document_s { fz_document super; struct fz_stream_s *file; int version; - long long int startxref; - long long int file_size; + int64_t startxref; + int64_t file_size; struct pdf_crypt_s *crypt; struct pdf_ocg_descriptor_s *ocg; struct pdf_portfolio_s *portfolio; @@ -372,28 +372,28 @@ struct pdf_document_s { struct pdf_rev_page_map_s *rev_page_map; int repair_attempted; int file_reading_linearly; - long long int file_length; + int64_t file_length; int linear_page_count; pdf_obj *linear_obj; pdf_obj **linear_page_refs; int linear_page1_obj_num; - long long int linear_pos; + int64_t linear_pos; int linear_page_num; int hint_object_offset; int hint_object_length; int hints_loaded; struct { int number; - long long int offset; - long long int index; + int64_t offset; + int64_t index; } *hint_page; int *hint_shared_ref; struct { int number; - long long int offset; + int64_t offset; } *hint_shared; int hint_obj_offsets_max; - long long int *hint_obj_offsets; + int64_t *hint_obj_offsets; int resources_localised; pdf_lexbuf_large lexbuf; pdf_annot *focus; From 29e8b1d0aa16bff0a454db2a66a1b296554a5988 Mon Sep 17 00:00:00 2001 From: NiLuJe Date: Thu, 21 Feb 2019 00:07:54 +0100 Subject: [PATCH 4/9] Resync Cervantes MXCFB headers w/ FBInk The SEND_UPDATE appears to have previously pointed to the Kobo ioctl?! --- ffi-cdecl/include/mxcfb-cervantes.h | 288 ++++++++++++++++++++++++---- ffi-cdecl/mxcfb_cervantes_decl.c | 1 - ffi/mxcfb_cervantes_h.lua | 2 +- 3 files changed, 256 insertions(+), 35 deletions(-) diff --git a/ffi-cdecl/include/mxcfb-cervantes.h b/ffi-cdecl/include/mxcfb-cervantes.h index d792e1bfc..79705e818 100644 --- a/ffi-cdecl/include/mxcfb-cervantes.h +++ b/ffi-cdecl/include/mxcfb-cervantes.h @@ -1,8 +1,11 @@ /* * Copyright 2004-2013 Freescale Semiconductor, Inc. All Rights Reserved. * - * Unified header for BQ Cervantes/Fnac Touchlight devices. - * https://github.com/bq/cervantes-qt/tree/eink-imx508/src/plugins/gfxdrivers/einkfb + * Unified header for BQ Cervantes/Fnac Touchlight devices + * Heavily based on mxcfb-kobo.h, with some notes from bq kernel sources. + * c.f., https://blog.bq.com/es/bq-ereaders-developers-program/ + * When I'm not using the proper model names, + * C1 means the oldest kernel, and C4 the latest. * * The code contained herein is licensed under the GNU Lesser General * Public License. You may obtain a copy of the GNU Lesser General @@ -19,71 +22,290 @@ * * @ingroup Framebuffer */ - #ifndef __ASM_ARCH_MXCFB_H__ #define __ASM_ARCH_MXCFB_H__ +//#include + +#define FB_SYNC_OE_LOW_ACT 0x80000000 +#define FB_SYNC_CLK_LAT_FALL 0x40000000 +#define FB_SYNC_DATA_INVERT 0x20000000 +#define FB_SYNC_CLK_IDLE_EN 0x10000000 +#define FB_SYNC_SHARP_MODE 0x08000000 +#define FB_SYNC_SWAP_RGB 0x04000000 + +// Cervantes 2013/Fnac Touch Light and higher +#define FB_ACCEL_TRIPLE_FLAG 0x00000000 +#define FB_ACCEL_DOUBLE_FLAG 0x00000001 + +struct mxcfb_gbl_alpha { + int enable; + int alpha; +}; + +struct mxcfb_loc_alpha { + int enable; + int alpha_in_pixel; + unsigned long alpha_phy_addr0; + unsigned long alpha_phy_addr1; +}; + +struct mxcfb_color_key { + int enable; + __u32 color_key; +}; + +struct mxcfb_pos { + __u16 x; + __u16 y; +}; + +struct mxcfb_gamma { + int enable; + int constk[16]; + int slopek[16]; +}; + +struct mxcfb_rect { + __u32 top; + __u32 left; + __u32 width; + __u32 height; +}; + +#define GRAYSCALE_8BIT 0x1 +#define GRAYSCALE_8BIT_INVERTED 0x2 +// C2+ +#define GRAYSCALE_4BIT 0x3 +#define GRAYSCALE_4BIT_INVERTED 0x4 + +#define AUTO_UPDATE_MODE_REGION_MODE 0 +#define AUTO_UPDATE_MODE_AUTOMATIC_MODE 1 + +#define UPDATE_SCHEME_SNAPSHOT 0 +#define UPDATE_SCHEME_QUEUE 1 +#define UPDATE_SCHEME_QUEUE_AND_MERGE 2 + #define UPDATE_MODE_PARTIAL 0x0 #define UPDATE_MODE_FULL 0x1 -#define WAVEFORM_MODE_AUTO 257 +/* Those are sneaked in in drivers/video/mxc/mxc_epdc_fb.c, same as Kobo */ +#define NTX_WFM_MODE_INIT 0 +#define NTX_WFM_MODE_DU 1 +#define NTX_WFM_MODE_GC16 2 +#define NTX_WFM_MODE_GC4 3 +#define NTX_WFM_MODE_A2 4 +#define NTX_WFM_MODE_GL16 5 +#define NTX_WFM_MODE_GLR16 6 +#define NTX_WFM_MODE_GLD16 7 +#define NTX_WFM_MODE_TOTAL 8 -#define TEMP_USE_AMBIENT 0x1000 +/* Match 'em to the Kindle ones, for sanity's sake... */ +#define WAVEFORM_MODE_INIT NTX_WFM_MODE_INIT +#define WAVEFORM_MODE_DU NTX_WFM_MODE_DU +#define WAVEFORM_MODE_GC4 NTX_WFM_MODE_GC4 +#define WAVEFORM_MODE_GC16 NTX_WFM_MODE_GC16 +#define WAVEFORM_MODE_A2 NTX_WFM_MODE_A2 +#define WAVEFORM_MODE_GL16 NTX_WFM_MODE_GL16 -/* from https://github.com/bq/cervantes-qt/blob/eink-imx508/src/plugins/gfxdrivers/einkfb/einkfb.cpp */ -#define WAVEFORM_MODE_INIT 0 /* init mode, turn the screen white */ -#define WAVEFORM_MODE_DU 1 /* fast 1bit update without flashing */ -#define WAVEFORM_MODE_GC16 2 /* High fidelity (flashing) */ -#define WAVEFORM_MODE_A2 4 /* Fast page flipping at reduced contrast */ +// for Cervantes 2013 +#define WAVEFORM_MODE_REAGL NTX_WFM_MODE_GLR16 +#define WAVEFORM_MODE_REAGLD NTX_WFM_MODE_GLD16 -/* new waveform modes introduced in Cervantes 2013 (from drivers/video/mxc/mxc_epdc_fb.c */ -#define WAVEFORM_MODE_GL16 5 /* High fidelity from white transition */ -#define WAVEFORM_MODE_GLR16 6 /* Ghost compensation waveform */ -#define WAVEFORM_MODE_GLD16 7 /* Ghost compensation waveform with dithering */ +// for Cervantes 3+ +#define WAVEFORM_MODE_AA NTX_WFM_MODE_GLR16 +#define WAVEFORM_MODE_GLR16 NTX_WFM_MODE_GLR16 +#define WAVEFORM_MODE_AAD NTX_WFM_MODE_GLD16 +#define WAVEFORM_MODE_GLD16 NTX_WFM_MODE_GLD16 -/* common flags */ -#define EPDC_FLAG_ENABLE_INVERSION 0x01 -#define EPDC_FLAG_FORCE_MONOCHROME 0x02 -#define EPDC_FLAG_USE_ALT_BUFFER 0x100 +#define WAVEFORM_MODE_AUTO 257 -/* introduced in Cervantes2013 */ +#define TEMP_USE_AMBIENT 0x1000 + +#define EPDC_FLAG_ENABLE_INVERSION 0x01 +#define EPDC_FLAG_FORCE_MONOCHROME 0x02 +// C2+ #define EPDC_FLAG_USE_CMAP 0x04 + +#define EPDC_FLAG_USE_ALT_BUFFER 0x100 +// C2+ #define EPDC_FLAG_TEST_COLLISION 0x200 #define EPDC_FLAG_GROUP_UPDATE 0x400 #define EPDC_FLAG_USE_DITHERING_Y1 0x2000 #define EPDC_FLAG_USE_DITHERING_Y4 0x4000 -/* introduced in Cervantes3 */ +// New stuff (2016+) #define EPDC_FLAG_USE_AAD 0x1000 #define EPDC_FLAG_USE_DITHERING_NTX_D8 0x100000 -struct mxcfb_rect { - __u32 top; - __u32 left; - __u32 width; - __u32 height; +// NOTE: This is *UNSUPPORTED* on current devices! +// We just happen to need these defined to build ;). +enum mxcfb_dithering_mode { + EPDC_FLAG_USE_DITHERING_PASSTHROUGH = 0x0, + EPDC_FLAG_USE_DITHERING_FLOYD_STEINBERG, + EPDC_FLAG_USE_DITHERING_ATKINSON, + EPDC_FLAG_USE_DITHERING_ORDERED, + EPDC_FLAG_USE_DITHERING_QUANT_ONLY, + EPDC_FLAG_USE_DITHERING_MAX, }; +#define FB_POWERDOWN_DISABLE -1 + struct mxcfb_alt_buffer_data { void *virt_addr; __u32 phys_addr; __u32 width; /* width of entire buffer */ __u32 height; /* height of entire buffer */ - struct mxcfb_rect alt_update_region; /* region within buffer to update */ + struct mxcfb_rect alt_update_region; /* region within buffer to update */ }; struct mxcfb_update_data { - struct mxcfb_rect update_region; - __u32 waveform_mode; - __u32 update_mode; - __u32 update_marker; - int temp; - unsigned int flags; - struct mxcfb_alt_buffer_data alt_buffer_data; + struct mxcfb_rect update_region; + __u32 waveform_mode; + __u32 update_mode; + __u32 update_marker; + int temp; + unsigned int flags; + struct mxcfb_alt_buffer_data alt_buffer_data; }; +// NTX Shenanigans, like on the Kobo Aura. +// Apparently applies to the Cervantes 2013 & Cervantes 4, but not the Cervantes 3... +// Use the Cervantes 4 nomenclature, as it matches Kobo. +struct mxcfb_alt_buffer_data_org { + __u32 phys_addr; + __u32 width; /* width of entire buffer */ + __u32 height; /* height of entire buffer */ + struct mxcfb_rect alt_update_region; /* region within buffer to update */ +}; + +struct mxcfb_update_data_org { + struct mxcfb_rect update_region; + __u32 waveform_mode; + __u32 update_mode; + __u32 update_marker; + int temp; + unsigned int flags; + struct mxcfb_alt_buffer_data_org alt_buffer_data; +}; + +// C2+ +struct mxcfb_update_marker_data { + __u32 update_marker; + __u32 collision_test; +}; + +/* + * Structure used to define waveform modes for driver + * Needed for driver to perform auto-waveform selection + */ +struct mxcfb_waveform_modes { + int mode_init; + int mode_du; + int mode_gc4; + int mode_gc8; + int mode_gc16; + int mode_gc32; + int mode_aa; // was mode_reagl on Cervantes 2013/Fnac Touch Light + int mode_aad; // was mode_reagld on Cervantes 2013/Fnac Touch Light + int mode_gl16; + int mode_a2; +}; + +// Cervantes < 2013 ONLY (C1) +struct mxcfb_waveform_modes_old { + int mode_init; + int mode_du; + int mode_gc4; + int mode_gc8; + int mode_gc16; + int mode_gc32; +}; + +// C2+ +/* + * Structure used to define a 5*3 matrix of parameters for + * setting IPU DP CSC module related to this framebuffer. + */ +struct mxcfb_csc_matrix { + int param[5][3]; +}; + +#define MXCFB_WAIT_FOR_VSYNC _IOW('F', 0x20, u_int32_t) +#define MXCFB_SET_GBL_ALPHA _IOW('F', 0x21, struct mxcfb_gbl_alpha) +#define MXCFB_SET_CLR_KEY _IOW('F', 0x22, struct mxcfb_color_key) +#define MXCFB_SET_OVERLAY_POS _IOWR('F', 0x24, struct mxcfb_pos) +#define MXCFB_GET_FB_IPU_CHAN _IOR('F', 0x25, u_int32_t) +#define MXCFB_SET_LOC_ALPHA _IOWR('F', 0x26, struct mxcfb_loc_alpha) +#define MXCFB_SET_LOC_ALP_BUF _IOW('F', 0x27, unsigned long) +#define MXCFB_SET_GAMMA _IOW('F', 0x28, struct mxcfb_gamma) +#define MXCFB_GET_FB_IPU_DI _IOR('F', 0x29, u_int32_t) +#define MXCFB_GET_DIFMT _IOR('F', 0x2A, u_int32_t) +#define MXCFB_GET_FB_BLANK _IOR('F', 0x2B, u_int32_t) +#define MXCFB_SET_DIFMT _IOW('F', 0x2C, u_int32_t) +// C3+ +#define MXCFB_ENABLE_VSYNC_EVENT _IOW('F', 0x33, int32_t) +// C2+ +#define MXCFB_CSC_UPDATE _IOW('F', 0x2D, struct mxcfb_csc_matrix) + /* IOCTLs for E-ink panel updates */ +#define MXCFB_SET_WAVEFORM_MODES _IOW('F', 0x2B, struct mxcfb_waveform_modes) +// C1 ONLY +#define MXCFB_SET_WAVEFORM_MODES_OLD _IOW('F', 0x2B, struct mxcfb_waveform_modes_old) + +#define MXCFB_SET_TEMPERATURE _IOW('F', 0x2C, int32_t) +#define MXCFB_SET_AUTO_UPDATE_MODE _IOW('F', 0x2D, __u32) #define MXCFB_SEND_UPDATE _IOW('F', 0x2E, struct mxcfb_update_data) +// C2 & C4 ONLY +#define MXCFB_SEND_UPDATE_ORG _IOW('F', 0x2E, struct mxcfb_update_data_org) + #define MXCFB_WAIT_FOR_UPDATE_COMPLETE _IOW('F', 0x2F, __u32) +// C2+ +// Default if !MX50_COMPAT +#define MXCFB_WAIT_FOR_UPDATE_COMPLETE2 _IOWR('F', 0x35, struct mxcfb_update_marker_data) +// C2 ONLY +#define MXCFB_WAIT_FOR_UPDATE_COMPLETE3 _IOWR('F', 0x2F, struct mxcfb_update_marker_data) + +#define MXCFB_SET_PWRDOWN_DELAY _IOW('F', 0x30, int32_t) +#define MXCFB_GET_PWRDOWN_DELAY _IOR('F', 0x31, int32_t) +#define MXCFB_SET_UPDATE_SCHEME _IOW('F', 0x32, __u32) +// C1 ONLY +#define MXCFB_SET_MERGE_ON_WAVEFORM_MISMATCH _IOW('F', 0x37, int32_t) +// C2+ +#define MXCFB_GET_WORK_BUFFER _IOWR('F', 0x34, unsigned long) + +#ifdef __KERNEL__ + +extern struct fb_videomode mxcfb_modedb[]; +extern int mxcfb_modedb_sz; + +enum { + MXC_DISP_SPEC_DEV = 0, + MXC_DISP_DDC_DEV = 1, +}; + +enum { + MXCFB_REFRESH_OFF, + MXCFB_REFRESH_AUTO, + MXCFB_REFRESH_PARTIAL, +}; + +int mxcfb_set_refresh_mode(struct fb_info *fbi, int mode, + struct mxcfb_rect *update_region); +// C1 ONLY +void mxcfb_register_mode(int disp_port, + const struct fb_videomode *modedb, + int num_modes, int dev_mode); + +int mxc_elcdif_frame_addr_setup(dma_addr_t phys); + +// C2+ +void mxcfb_elcdif_register_mode(const struct fb_videomode *modedb, + int num_modes, int dev_mode); + +// C1 ONLY +void mxcfb_register_presetup(int disp_port, + int (*pre_setup)(struct fb_info *info)); +#endif /* __KERNEL__ */ #endif diff --git a/ffi-cdecl/mxcfb_cervantes_decl.c b/ffi-cdecl/mxcfb_cervantes_decl.c index c1fa35b22..0cf6f0699 100644 --- a/ffi-cdecl/mxcfb_cervantes_decl.c +++ b/ffi-cdecl/mxcfb_cervantes_decl.c @@ -34,6 +34,5 @@ cdecl_struct(mxcfb_rect) cdecl_struct(mxcfb_alt_buffer_data) cdecl_struct(mxcfb_update_data) - cdecl_const(MXCFB_SEND_UPDATE) cdecl_const(MXCFB_WAIT_FOR_UPDATE_COMPLETE) diff --git a/ffi/mxcfb_cervantes_h.lua b/ffi/mxcfb_cervantes_h.lua index 8df864acc..733786c57 100644 --- a/ffi/mxcfb_cervantes_h.lua +++ b/ffi/mxcfb_cervantes_h.lua @@ -44,6 +44,6 @@ struct mxcfb_update_data { unsigned int flags; struct mxcfb_alt_buffer_data alt_buffer_data; }; -static const int MXCFB_SEND_UPDATE = 1078216238; +static const int MXCFB_SEND_UPDATE = 1079002670; static const int MXCFB_WAIT_FOR_UPDATE_COMPLETE = 1074021935; ]] From b8fedc586db38a40031a2d98512a0392b40e6806 Mon Sep 17 00:00:00 2001 From: NiLuJe Date: Thu, 21 Feb 2019 00:10:45 +0100 Subject: [PATCH 5/9] Duh. That's because I was using an x86_64 compiler. --- ffi/mxcfb_cervantes_h.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ffi/mxcfb_cervantes_h.lua b/ffi/mxcfb_cervantes_h.lua index 733786c57..8df864acc 100644 --- a/ffi/mxcfb_cervantes_h.lua +++ b/ffi/mxcfb_cervantes_h.lua @@ -44,6 +44,6 @@ struct mxcfb_update_data { unsigned int flags; struct mxcfb_alt_buffer_data alt_buffer_data; }; -static const int MXCFB_SEND_UPDATE = 1079002670; +static const int MXCFB_SEND_UPDATE = 1078216238; static const int MXCFB_WAIT_FOR_UPDATE_COMPLETE = 1074021935; ]] From a2a5bcb781faa5e63380814e0872e7504f06d3a3 Mon Sep 17 00:00:00 2001 From: NiLuJe Date: Thu, 21 Feb 2019 00:13:09 +0100 Subject: [PATCH 6/9] Tweak that, but the header is incomplete anyway, so, don't refresh it. --- ffi-cdecl/include/mxcfb-sony.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ffi-cdecl/include/mxcfb-sony.h b/ffi-cdecl/include/mxcfb-sony.h index 262e15635..543d2b506 100644 --- a/ffi-cdecl/include/mxcfb-sony.h +++ b/ffi-cdecl/include/mxcfb-sony.h @@ -110,7 +110,7 @@ struct mxcfb_update_data { __u32 update_mode; __u32 update_marker; int temp; - uint flags; + unsigned int flags; struct mxcfb_alt_buffer_data alt_buffer_data; }; From a26c6e51631a6dffe949b4654d83cb3f53d4ea2d Mon Sep 17 00:00:00 2001 From: NiLuJe Date: Thu, 21 Feb 2019 00:27:10 +0100 Subject: [PATCH 7/9] And posix... --- ffi-cdecl/posix_decl.c | 1 + ffi/posix_h.lua | 34 +++++++++++----------------------- ffi/posix_types_arm_h.lua | 26 ++++++++++++++++++++++++++ ffi/posix_types_x64_h.lua | 25 +++++++++++++++++++++++++ ffi/posix_types_x86_h.lua | 26 ++++++++++++++++++++++++++ 5 files changed, 89 insertions(+), 23 deletions(-) create mode 100644 ffi/posix_types_arm_h.lua create mode 100644 ffi/posix_types_x64_h.lua create mode 100644 ffi/posix_types_x86_h.lua diff --git a/ffi-cdecl/posix_decl.c b/ffi-cdecl/posix_decl.c index e5cd370c8..047ec11ca 100644 --- a/ffi-cdecl/posix_decl.c +++ b/ffi-cdecl/posix_decl.c @@ -17,6 +17,7 @@ #include "ffi-cdecl.h" cdecl_type(size_t) +cdecl_type(ssize_t) cdecl_type(off_t) cdecl_struct(timeval) diff --git a/ffi/posix_h.lua b/ffi/posix_h.lua index ff3a502bc..6e961d96b 100644 --- a/ffi/posix_h.lua +++ b/ffi/posix_h.lua @@ -1,27 +1,15 @@ local ffi = require("ffi") +-- Handle arch-dependent typedefs... +if ffi.arch == "x64" then + require("ffi/posix_types_x64_h") +elseif ffi.arch == "x86" then + require("ffi/posix_types_x86_h") +else + require("ffi/posix_types_def_h") +end + ffi.cdef[[ -typedef unsigned int size_t; -typedef long int off_t; -struct timeval { - long int tv_sec; - long int tv_usec; -}; -struct statvfs { - long unsigned int f_bsize; - long unsigned int f_frsize; - long unsigned int f_blocks; - long unsigned int f_bfree; - long unsigned int f_bavail; - long unsigned int f_files; - long unsigned int f_ffree; - long unsigned int f_favail; - long unsigned int f_fsid; - int __f_unused; - long unsigned int f_flag; - long unsigned int f_namemax; - int __f_spare[6]; -}; int pipe(int *) __attribute__((__nothrow__, __leaf__)); int fork(void) __attribute__((nothrow)); int dup(int) __attribute__((__nothrow__, __leaf__)); @@ -36,8 +24,8 @@ int execl(const char *, const char *, ...) __attribute__((__nothrow__, __leaf__) int execlp(const char *, const char *, ...) __attribute__((__nothrow__, __leaf__)); int execv(const char *, char *const *) __attribute__((__nothrow__, __leaf__)); int execvp(const char *, char *const *) __attribute__((__nothrow__, __leaf__)); -int write(int, const void *, size_t); -int read(int, void *, size_t); +ssize_t write(int, const void *, size_t); +ssize_t read(int, void *, size_t); int kill(int, int) __attribute__((__nothrow__, __leaf__)); int waitpid(int, int *, int); int getpid(void) __attribute__((__nothrow__, __leaf__)); diff --git a/ffi/posix_types_arm_h.lua b/ffi/posix_types_arm_h.lua new file mode 100644 index 000000000..3651bab94 --- /dev/null +++ b/ffi/posix_types_arm_h.lua @@ -0,0 +1,26 @@ +local ffi = require("ffi") + +ffi.cdef[[ +typedef unsigned int size_t; +typedef int ssize_t; +typedef long int off_t; +struct timeval { + long int tv_sec; + long int tv_usec; +}; +struct statvfs { + long unsigned int f_bsize; + long unsigned int f_frsize; + long unsigned int f_blocks; + long unsigned int f_bfree; + long unsigned int f_bavail; + long unsigned int f_files; + long unsigned int f_ffree; + long unsigned int f_favail; + long unsigned int f_fsid; + int __f_unused; + long unsigned int f_flag; + long unsigned int f_namemax; + int __f_spare[6]; +}; +]] diff --git a/ffi/posix_types_x64_h.lua b/ffi/posix_types_x64_h.lua new file mode 100644 index 000000000..a26ea7d05 --- /dev/null +++ b/ffi/posix_types_x64_h.lua @@ -0,0 +1,25 @@ +local ffi = require("ffi") + +ffi.cdef[[ +typedef long unsigned int size_t; +typedef long int ssize_t; +typedef long int off_t; +struct timeval { + long int tv_sec; + long int tv_usec; +}; +struct statvfs { + long unsigned int f_bsize; + long unsigned int f_frsize; + long unsigned int f_blocks; + long unsigned int f_bfree; + long unsigned int f_bavail; + long unsigned int f_files; + long unsigned int f_ffree; + long unsigned int f_favail; + long unsigned int f_fsid; + long unsigned int f_flag; + long unsigned int f_namemax; + int __f_spare[6]; +}; +]] diff --git a/ffi/posix_types_x86_h.lua b/ffi/posix_types_x86_h.lua new file mode 100644 index 000000000..3651bab94 --- /dev/null +++ b/ffi/posix_types_x86_h.lua @@ -0,0 +1,26 @@ +local ffi = require("ffi") + +ffi.cdef[[ +typedef unsigned int size_t; +typedef int ssize_t; +typedef long int off_t; +struct timeval { + long int tv_sec; + long int tv_usec; +}; +struct statvfs { + long unsigned int f_bsize; + long unsigned int f_frsize; + long unsigned int f_blocks; + long unsigned int f_bfree; + long unsigned int f_bavail; + long unsigned int f_files; + long unsigned int f_ffree; + long unsigned int f_favail; + long unsigned int f_fsid; + int __f_unused; + long unsigned int f_flag; + long unsigned int f_namemax; + int __f_spare[6]; +}; +]] From 3af0d075a00b64c27a15b6422ed1dc2777eeda07 Mon Sep 17 00:00:00 2001 From: NiLuJe Date: Thu, 21 Feb 2019 00:31:06 +0100 Subject: [PATCH 8/9] Refresh SDL 2 (2.0.9, x86_64) --- ffi/SDL2_0_h.lua | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ffi/SDL2_0_h.lua b/ffi/SDL2_0_h.lua index cea566f32..0cce1e62d 100644 --- a/ffi/SDL2_0_h.lua +++ b/ffi/SDL2_0_h.lua @@ -269,6 +269,7 @@ typedef enum { SDL_APP_DIDENTERBACKGROUND = 260, SDL_APP_WILLENTERFOREGROUND = 261, SDL_APP_DIDENTERFOREGROUND = 262, + SDL_DISPLAYEVENT = 336, SDL_WINDOWEVENT = 512, SDL_SYSWMEVENT = 513, SDL_KEYDOWN = 768, @@ -306,6 +307,7 @@ typedef enum { SDL_DROPCOMPLETE = 4099, SDL_AUDIODEVICEADDED = 4352, SDL_AUDIODEVICEREMOVED = 4353, + SDL_SENSORUPDATE = 4608, SDL_RENDER_TARGETS_RESET = 8192, SDL_RENDER_DEVICE_RESET = 8193, SDL_USEREVENT = 32768, @@ -559,6 +561,7 @@ struct SDL_DropEvent { union SDL_Event { Uint32 type; struct SDL_CommonEvent common; + struct SDL_DisplayEvent display; struct SDL_WindowEvent window; struct SDL_KeyboardEvent key; struct SDL_TextEditingEvent edit; @@ -575,6 +578,7 @@ union SDL_Event { struct SDL_ControllerButtonEvent cbutton; struct SDL_ControllerDeviceEvent cdevice; struct SDL_AudioDeviceEvent adevice; + struct SDL_SensorEvent sensor; struct SDL_QuitEvent quit; struct SDL_UserEvent user; struct SDL_SysWMEvent syswm; @@ -797,7 +801,7 @@ static const int SDL_INIT_HAPTIC = 4096; static const int SDL_INIT_GAMECONTROLLER = 8192; static const int SDL_INIT_EVENTS = 16384; static const int SDL_INIT_NOPARACHUTE = 1048576; -static const int SDL_INIT_EVERYTHING = 29233; +static const int SDL_INIT_EVERYTHING = 62001; static const int SDL_WINDOWPOS_UNDEFINED = 536805376; static const int SDL_WINDOW_FULLSCREEN = 1; static const int SDL_WINDOW_FULLSCREEN_DESKTOP = 4097; From 5cb3a3bc72ed909772435eb60681c50c8aab0b1f Mon Sep 17 00:00:00 2001 From: NiLuJe Date: Thu, 21 Feb 2019 00:41:25 +0100 Subject: [PATCH 9/9] And finally, zmq --- ffi/zeromq_h.lua | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ffi/zeromq_h.lua b/ffi/zeromq_h.lua index 2bd52ab60..3d9d6e09a 100644 --- a/ffi/zeromq_h.lua +++ b/ffi/zeromq_h.lua @@ -96,7 +96,7 @@ void zyre_set_name(zyre_t *, const char *); void zyre_set_header(zyre_t *, const char *, const char *, ...); void zyre_set_verbose(zyre_t *); void zyre_set_port(zyre_t *, int); -void zyre_set_interval(zyre_t *, unsigned int); +void zyre_set_interval(zyre_t *, size_t); void zyre_set_interface(zyre_t *, const char *); int zyre_start(zyre_t *); void zyre_stop(zyre_t *); @@ -117,7 +117,7 @@ char *zyre_event_name(zyre_event_t *); char *zyre_event_address(zyre_event_t *); char *zyre_event_header(zyre_event_t *, char *); char *zyre_event_group(zyre_event_t *); -int zmq_getsockopt(void *, int, void *, unsigned int *) __attribute__((visibility("default"))); +int zmq_getsockopt(void *, int, void *, size_t *) __attribute__((visibility("default"))); zctx_t *zctx_new(void); void zctx_destroy(zctx_t **); void *zsocket_new(zctx_t *, int); @@ -126,11 +126,11 @@ void zsocket_set_identity(void *, const char *); char *zsocket_identity(void *); void zsocket_destroy(zctx_t *, void *); zframe_t *zframe_recv(void *); -unsigned int zframe_size(zframe_t *); +size_t zframe_size(zframe_t *); unsigned char *zframe_data(zframe_t *); zmsg_t *zmsg_new(void); -unsigned int zmsg_size(zmsg_t *); -int zmsg_addmem(zmsg_t *, const void *, unsigned int); +size_t zmsg_size(zmsg_t *); +int zmsg_addmem(zmsg_t *, const void *, size_t); int zmsg_send(zmsg_t **, void *); char *zmsg_popstr(zmsg_t *); void zstr_free(char **);