# vim: set et sw=4 sts=4 fileencoding=utf-8: # # Python header conversion # Copyright (c) 2013-2017 Dave Jones # # Original headers # Copyright (c) 2012, Broadcom Europe Ltd # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the copyright holder nor the # names of its contributors may be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. from __future__ import ( unicode_literals, print_function, division, absolute_import, ) # Make Py2's str equivalent to Py3's str = type('') import ctypes as ct import warnings _lib = ct.CDLL('libbcm_host.so') # bcm_host.h ################################################################# bcm_host_init = _lib.bcm_host_init bcm_host_init.argtypes = [] bcm_host_init.restype = None bcm_host_deinit = _lib.bcm_host_deinit bcm_host_deinit.argtypes = [] bcm_host_deinit.restype = None graphics_get_display_size = _lib.graphics_get_display_size graphics_get_display_size.argtypes = [ct.c_uint16, ct.POINTER(ct.c_uint32), ct.POINTER(ct.c_uint32)] graphics_get_display_size.restype = ct.c_int32 # vchi.h ##################################################################### VCHI_INSTANCE_T = ct.c_void_p VCHI_CONNECTION_T = ct.c_void_p # vcos_platform.h ############################################################ VCOS_UNSIGNED = ct.c_uint32 # vcos_types.h ############################################################### VCOS_STATUS_T = ct.c_uint32 # enum ( VCOS_SUCCESS, VCOS_EAGAIN, VCOS_ENOENT, VCOS_ENOSPC, VCOS_EINVAL, VCOS_EACCESS, VCOS_ENOMEM, VCOS_ENOSYS, VCOS_EEXIST, VCOS_ENXIO, VCOS_EINTR, ) = range(11) vcos_bool_t = ct.c_int32 vcos_fourcc_t = ct.c_int32 def VCOS_ALIGN_UP(value, round_to): # Note: this function assumes round_to is some power of 2. return (value + (round_to - 1)) & ~(round_to - 1) def VCOS_ALIGN_DOWN(value, round_to): # Note: this function assumes round_to is some power of 2. return value & ~(round_to - 1) # vc_image_types.h ########################################################### class VC_RECT_T(ct.Structure): _fields_ = [ ('x', ct.c_int32), ('y', ct.c_int32), ('width', ct.c_int32), ('height', ct.c_int32), ] VC_IMAGE_TYPE_T = ct.c_uint32 # enum ( VC_IMAGE_MIN, VC_IMAGE_RGB565, VC_IMAGE_1BPP, VC_IMAGE_YUV420, VC_IMAGE_48BPP, VC_IMAGE_RGB888, VC_IMAGE_8BPP, VC_IMAGE_4BPP, VC_IMAGE_3D32, VC_IMAGE_3D32B, VC_IMAGE_3D32MAT, VC_IMAGE_RGB2X9, VC_IMAGE_RGB666, VC_IMAGE_PAL4_OBSOLETE, VC_IMAGE_PAL8_OBSOLETE, VC_IMAGE_RGBA32, VC_IMAGE_YUV422, VC_IMAGE_RGBA565, VC_IMAGE_RGBA16, VC_IMAGE_YUV_UV, VC_IMAGE_TF_RGBA32, VC_IMAGE_TF_RGBX32, VC_IMAGE_TF_FLOAT, VC_IMAGE_TF_RGBA16, VC_IMAGE_TF_RGBA5551, VC_IMAGE_TF_RGB565, VC_IMAGE_TF_YA88, VC_IMAGE_TF_BYTE, VC_IMAGE_TF_PAL8, VC_IMAGE_TF_PAL4, VC_IMAGE_TF_ETC1, VC_IMAGE_BGR888, VC_IMAGE_BGR888_NP, VC_IMAGE_BAYER, VC_IMAGE_CODEC, VC_IMAGE_YUV_UV32, VC_IMAGE_TF_Y8, VC_IMAGE_TF_A8, VC_IMAGE_TF_SHORT, VC_IMAGE_TF_1BPP, VC_IMAGE_OPENGL, VC_IMAGE_YUV444I, VC_IMAGE_YUV422PLANAR, VC_IMAGE_ARGB8888, VC_IMAGE_XRGB8888, VC_IMAGE_YUV422YUYV, VC_IMAGE_YUV422YVYU, VC_IMAGE_YUV422UYVY, VC_IMAGE_YUV422VYUY, VC_IMAGE_RGBX32, VC_IMAGE_RGBX8888, VC_IMAGE_BGRX8888, VC_IMAGE_YUV420SP, VC_IMAGE_YUV444PLANAR, VC_IMAGE_TF_U8, VC_IMAGE_TF_V8, VC_IMAGE_MAX, ) = range(57) TRANSFORM_HFLIP = 1 << 0 TRANSFORM_VFLIP = 1 << 1 TRANSFORM_TRANSPOSE = 1 << 2 VC_IMAGE_TRANSFORM_T = ct.c_uint32 # enum VC_IMAGE_ROT0 = 0 VC_IMAGE_MIRROR_ROT0 = TRANSFORM_HFLIP VC_IMAGE_MIRROR_ROT180 = TRANSFORM_VFLIP VC_IMAGE_ROT180 = TRANSFORM_HFLIP | TRANSFORM_VFLIP VC_IMAGE_MIRROR_ROT90 = TRANSFORM_TRANSPOSE VC_IMAGE_ROT270 = TRANSFORM_TRANSPOSE | TRANSFORM_HFLIP VC_IMAGE_ROT90 = TRANSFORM_TRANSPOSE | TRANSFORM_VFLIP VC_IMAGE_MIRROR_ROT270 = TRANSFORM_TRANSPOSE | TRANSFORM_HFLIP | TRANSFORM_VFLIP VC_IMAGE_BAYER_ORDER_T = ct.c_uint32 # enum ( VC_IMAGE_BAYER_RGGB, VC_IMAGE_BAYER_GBRG, VC_IMAGE_BAYER_BGGR, VC_IMAGE_BAYER_GRBG, ) = range(4) VC_IMAGE_BAYER_FORMAT_T = ct.c_uint32 # enum ( VC_IMAGE_BAYER_RAW6, VC_IMAGE_BAYER_RAW7, VC_IMAGE_BAYER_RAW8, VC_IMAGE_BAYER_RAW10, VC_IMAGE_BAYER_RAW12, VC_IMAGE_BAYER_RAW14, VC_IMAGE_BAYER_RAW16, VC_IMAGE_BAYER_RAW10_8, VC_IMAGE_BAYER_RAW12_8, VC_IMAGE_BAYER_RAW14_8, VC_IMAGE_BAYER_RAW10L, VC_IMAGE_BAYER_RAW12L, VC_IMAGE_BAYER_RAW14L, VC_IMAGE_BAYER_RAW16_BIG_ENDIAN, VC_IMAGE_BAYER_RAW4, ) = range(15) # vc_display_types.h ######################################################### VCOS_DISPLAY_INPUT_FORMAT_T = ct.c_uint32 # enum ( VCOS_DISPLAY_INPUT_FORMAT_INVALID, VCOS_DISPLAY_INPUT_FORMAT_RGB888, VCOS_DISPLAY_INPUT_FORMAT_RGB565 ) = range(3) DISPLAY_INPUT_FORMAT_INVALID = VCOS_DISPLAY_INPUT_FORMAT_INVALID DISPLAY_INPUT_FORMAT_RGB888 = VCOS_DISPLAY_INPUT_FORMAT_RGB888 DISPLAY_INPUT_FORMAT_RGB565 = VCOS_DISPLAY_INPUT_FORMAT_RGB565 DISPLAY_INPUT_FORMAT_T = VCOS_DISPLAY_INPUT_FORMAT_T DISPLAY_3D_FORMAT_T = ct.c_uint32 # enum ( DISPLAY_3D_UNSUPPORTED, DISPLAY_3D_INTERLEAVED, DISPLAY_3D_SBS_FULL_AUTO, DISPLAY_3D_SBS_HALF_HORIZ, DISPLAY_3D_TB_HALF, DISPLAY_3D_FRAME_PACKING, DISPLAY_3D_FRAME_SEQUENTIAL, DISPLAY_3D_FORMAT_MAX, ) = range(8) DISPLAY_INTERFACE_T = ct.c_uint32 # enum ( DISPLAY_INTERFACE_MIN, DISPLAY_INTERFACE_SMI, DISPLAY_INTERFACE_DPI, DISPLAY_INTERFACE_DSI, DISPLAY_INTERFACE_LVDS, DISPLAY_INTERFACE_MAX, ) = range(6) DISPLAY_DITHER_T = ct.c_uint32 # enum ( DISPLAY_DITHER_NONE, DISPLAY_DITHER_RGB666, DISPLAY_DITHER_RGB565, DISPLAY_DITHER_RGB555, DISPLAY_DITHER_MAX, ) = range(5) class DISPLAY_INFO_T(ct.Structure): _fields_ = [ ('type', DISPLAY_INTERFACE_T), ('width', ct.c_uint32), ('height', ct.c_uint32), ('input_format', DISPLAY_INPUT_FORMAT_T), ('interlaced', ct.c_uint32), ('output_dither', DISPLAY_DITHER_T), ('pixel_freq', ct.c_uint32), ('line_rate', ct.c_uint32), ('format_3d', DISPLAY_3D_FORMAT_T), ('use_pixelvalve_1', ct.c_uint32), ('dsi_video_mode', ct.c_uint32), ('hvs_channel', ct.c_uint32), ] # vc_dispmanx_types.h ######################################################## DISPMANX_DISPLAY_HANDLE_T = ct.c_uint32 DISPMANX_UPDATE_HANDLE_T = ct.c_uint32 DISPMANX_ELEMENT_HANDLE_T = ct.c_uint32 DISPMANX_RESOURCE_HANDLE_T = ct.c_uint32 DISPMANX_PROTECTION_T = ct.c_uint32 DISPMANX_TRANSFORM_T = ct.c_uint32 # enum DISPMANX_NO_ROTATE = 0 DISPMANX_ROTATE_90 = 1 DISPMANX_ROTATE_180 = 2 DISPMANX_ROTATE_270 = 3 DISPMANX_FLIP_HRIZ = 1 << 16 DISPMANX_FLIP_VERT = 1 << 17 DISPMANX_STEREOSCOPIC_INVERT = 1 << 19 DISPMANX_STEREOSCOPIC_NONE = 0 << 20 DISPMANX_STEREOSCOPIC_MONO = 1 << 20 DISPMANX_STEREOSCOPIC_SBS = 2 << 20 DISPMANX_STEREOSCOPIC_TB = 3 << 20 DISPMANX_STEREOSCOPIC_MASK = 15 << 20 DISPMANX_SNAPSHOT_NO_YUV = 1 << 24 DISPMANX_SNAPSHOT_NO_RGB = 1 << 25 DISPMANX_SNAPSHOT_FILL = 1 << 26 DISPMANX_SNAPSHOT_SWAP_RED_BLUE = 1 << 27 DISPMANX_SNAPSHOT_PACK = 1 << 28 DISPMANX_FLAGS_ALPHA_T = ct.c_uint32 # enum DISPMANX_FLAGS_ALPHA_FROM_SOURCE = 0 DISPMANX_FLAGS_ALPHA_FIXED_ALL_PIXELS = 1 DISPMANX_FLAGS_ALPHA_FIXED_NON_ZERO = 2 DISPMANX_FLAGS_ALPHA_FIXED_EXCEED_0X07 = 3 DISPMANX_FLAGS_ALPHA_PREMULT = 1 << 16 DISPMANX_FLAGS_ALPHA_MIX = 1 << 17 class DISPMANX_ALPHA_T(ct.Structure): _fields_ = [ ('flags', DISPMANX_FLAGS_ALPHA_T), ('opacity', ct.c_uint32), ('mask', ct.c_void_p), ] class VC_DISPMANX_ALPHA_T(ct.Structure): _fields_ = [ ('flags', DISPMANX_FLAGS_ALPHA_T), ('opacity', ct.c_uint32), ('mask', DISPMANX_RESOURCE_HANDLE_T), ] DISPMANX_FLAGS_CLAMP_T = ct.c_uint32 # enum ( DISPMANX_FLAGS_CLAMP_NONE, DISPMANX_FLAGS_CLAMP_LUMA_TRANSPARENT, DISPMANX_FLAGS_CLAMP_TRANSPARENT, DISPMANX_FLAGS_CLAMP_REPLACE, ) = range(4) DISPMANX_FLAGS_KEYMASK_T = ct.c_uint32 # enum DISPMANX_FLAGS_KEYMASK_OVERRIDE = 1 DISPMANX_FLAGS_KEYMASK_SMOOTH = 1 << 1 DISPMANX_FLAGS_KEYMASK_CR_INV = 1 << 2 DISPMANX_FLAGS_KEYMASK_CB_INV = 1 << 3 DISPMANX_FLAGS_KEYMASK_YY_INV = 1 << 4 class _YUV(ct.Structure): _fields_ = [ ('yy_upper', ct.c_uint8), ('yy_lower', ct.c_uint8), ('cr_upper', ct.c_uint8), ('cr_lower', ct.c_uint8), ('cb_upper', ct.c_uint8), ('cb_lower', ct.c_uint8), ] class _RGB(ct.Structure): _fields_ = [ ('red_upper', ct.c_uint8), ('red_lower', ct.c_uint8), ('green_upper', ct.c_uint8), ('green_lower', ct.c_uint8), ('blue_upper', ct.c_uint8), ('blue_lower', ct.c_uint8), ] class DISPMANX_CLAMP_KEYS_T(ct.Union): _fields_ = [ ('yuv', _YUV), ('rgb', _RGB), ] class DISPMANX_CLAMP_T(ct.Structure): _fields_ = [ ('mode', DISPMANX_FLAGS_CLAMP_T), ('key_mask', DISPMANX_FLAGS_KEYMASK_T), ('key_value', DISPMANX_CLAMP_KEYS_T), ('replace_value', ct.c_uint32), ] class DISPMANX_MODEINFO_T(ct.Structure): _fields_ = [ ('width', ct.c_int32), ('height', ct.c_int32), ('transform', DISPMANX_TRANSFORM_T), ('input_format', DISPLAY_INPUT_FORMAT_T), ('display_num', ct.c_uint32), ] DISPMANX_CALLBACK_FUNC_T = ct.CFUNCTYPE( None, DISPMANX_UPDATE_HANDLE_T, ct.c_void_p) DISPMANX_PROGRESS_CALLBACK_FUNC_T = ct.CFUNCTYPE( None, DISPMANX_UPDATE_HANDLE_T, ct.c_uint32, ct.c_void_p) # vc_dispmanx.h ############################################################## vc_dispmanx_stop = _lib.vc_dispmanx_stop vc_dispmanx_stop.argtypes = [] vc_dispmanx_stop.restype = None vc_dispmanx_rect_set = _lib.vc_dispmanx_rect_set vc_dispmanx_rect_set.argtypes = [ct.POINTER(VC_RECT_T), ct.c_uint32, ct.c_uint32, ct.c_uint32, ct.c_uint32] vc_dispmanx_rect_set.restype = ct.c_int vc_dispmanx_resource_create = _lib.vc_dispmanx_resource_create vc_dispmanx_resource_create.argtypes = [VC_IMAGE_TYPE_T, ct.c_uint32, ct.c_uint32, ct.POINTER(ct.c_uint32)] vc_dispmanx_resource_create.restype = DISPMANX_RESOURCE_HANDLE_T vc_dispmanx_resource_write_data = _lib.vc_dispmanx_resource_write_data vc_dispmanx_resource_write_data.argtypes = [DISPMANX_RESOURCE_HANDLE_T, VC_IMAGE_TYPE_T, ct.c_int, ct.c_void_p, ct.POINTER(VC_RECT_T)] vc_dispmanx_resource_write_data.restype = ct.c_int vc_dispmanx_resource_read_data = _lib.vc_dispmanx_resource_read_data vc_dispmanx_resource_read_data.argtypes = [DISPMANX_RESOURCE_HANDLE_T, ct.POINTER(VC_RECT_T), ct.c_void_p, ct.c_uint32] vc_dispmanx_resource_read_data.restype = ct.c_int vc_dispmanx_resource_delete = _lib.vc_dispmanx_resource_delete vc_dispmanx_resource_delete.argtypes = [DISPMANX_RESOURCE_HANDLE_T] vc_dispmanx_resource_delete.restype = ct.c_int vc_dispmanx_display_open = _lib.vc_dispmanx_display_open vc_dispmanx_display_open.argtypes = [ct.c_uint32] vc_dispmanx_display_open.restype = DISPMANX_DISPLAY_HANDLE_T vc_dispmanx_display_open_mode = _lib.vc_dispmanx_display_open_mode vc_dispmanx_display_open_mode.argtypes = [ct.c_uint32, ct.c_uint32] vc_dispmanx_display_open_mode.restype = DISPMANX_DISPLAY_HANDLE_T vc_dispmanx_display_open_offscreen = _lib.vc_dispmanx_display_open_offscreen vc_dispmanx_display_open_offscreen.argtypes = [DISPMANX_RESOURCE_HANDLE_T, DISPMANX_TRANSFORM_T] vc_dispmanx_display_open_offscreen.restype = DISPMANX_DISPLAY_HANDLE_T vc_dispmanx_display_reconfigure = _lib.vc_dispmanx_display_reconfigure vc_dispmanx_display_reconfigure.argtypes = [DISPMANX_DISPLAY_HANDLE_T, ct.c_uint32] vc_dispmanx_display_reconfigure.restype = ct.c_int vc_dispmanx_display_set_destination = _lib.vc_dispmanx_display_set_destination vc_dispmanx_display_set_destination.argtypes = [DISPMANX_DISPLAY_HANDLE_T, DISPMANX_RESOURCE_HANDLE_T] vc_dispmanx_display_set_destination.restype = ct.c_int vc_dispmanx_display_set_background = _lib.vc_dispmanx_display_set_background vc_dispmanx_display_set_background.argtypes = [DISPMANX_UPDATE_HANDLE_T, DISPMANX_DISPLAY_HANDLE_T, ct.c_uint8, ct.c_uint8, ct.c_uint8] vc_dispmanx_display_set_background.restype = ct.c_int vc_dispmanx_display_get_info = _lib.vc_dispmanx_display_get_info vc_dispmanx_display_get_info.argtypes = [DISPMANX_DISPLAY_HANDLE_T, ct.POINTER(DISPMANX_MODEINFO_T)] vc_dispmanx_display_get_info.restype = ct.c_int vc_dispmanx_display_close = _lib.vc_dispmanx_display_close vc_dispmanx_display_close.argtypes = [DISPMANX_DISPLAY_HANDLE_T] vc_dispmanx_display_close.restype = ct.c_int vc_dispmanx_update_start = _lib.vc_dispmanx_update_start vc_dispmanx_update_start.argtypes = [ct.c_int32] vc_dispmanx_update_start.restype = DISPMANX_UPDATE_HANDLE_T vc_dispmanx_element_add = _lib.vc_dispmanx_element_add vc_dispmanx_element_add.argtypes = [DISPMANX_UPDATE_HANDLE_T, DISPMANX_DISPLAY_HANDLE_T, ct.c_int32, ct.POINTER(VC_RECT_T), DISPMANX_RESOURCE_HANDLE_T, ct.POINTER(VC_RECT_T), DISPMANX_PROTECTION_T, VC_DISPMANX_ALPHA_T, DISPMANX_CLAMP_T, DISPMANX_TRANSFORM_T] vc_dispmanx_element_add.restype = DISPMANX_ELEMENT_HANDLE_T vc_dispmanx_element_change_source = _lib.vc_dispmanx_element_change_source vc_dispmanx_element_change_source.argtypes = [DISPMANX_UPDATE_HANDLE_T, DISPMANX_ELEMENT_HANDLE_T, DISPMANX_RESOURCE_HANDLE_T] vc_dispmanx_element_change_source.restype = ct.c_int vc_dispmanx_element_change_layer = _lib.vc_dispmanx_element_change_layer vc_dispmanx_element_change_layer.argtypes = [DISPMANX_UPDATE_HANDLE_T, DISPMANX_ELEMENT_HANDLE_T, ct.c_int32] vc_dispmanx_element_change_layer.restype = ct.c_int vc_dispmanx_element_modified = _lib.vc_dispmanx_element_modified vc_dispmanx_element_modified.argtypes = [DISPMANX_UPDATE_HANDLE_T, DISPMANX_ELEMENT_HANDLE_T, ct.POINTER(VC_RECT_T)] vc_dispmanx_element_modified.restype = ct.c_int vc_dispmanx_element_remove = _lib.vc_dispmanx_element_remove vc_dispmanx_element_remove.argtypes = [DISPMANX_UPDATE_HANDLE_T, DISPMANX_ELEMENT_HANDLE_T] vc_dispmanx_element_remove.restype = ct.c_int vc_dispmanx_update_submit = _lib.vc_dispmanx_update_submit vc_dispmanx_update_submit.argtypes = [DISPMANX_UPDATE_HANDLE_T, DISPMANX_CALLBACK_FUNC_T, ct.c_void_p] vc_dispmanx_update_submit.restype = ct.c_int vc_dispmanx_update_submit_sync = _lib.vc_dispmanx_update_submit_sync vc_dispmanx_update_submit_sync.argtypes = [DISPMANX_UPDATE_HANDLE_T] vc_dispmanx_update_submit_sync.restype = ct.c_int vc_dispmanx_query_image_formats = _lib.vc_dispmanx_query_image_formats vc_dispmanx_query_image_formats.argtypes = [ct.POINTER(ct.c_uint32)] vc_dispmanx_query_image_formats.restype = ct.c_int vc_dispmanx_element_change_attributes = _lib.vc_dispmanx_element_change_attributes vc_dispmanx_element_change_attributes.argtypes = [DISPMANX_UPDATE_HANDLE_T, DISPMANX_ELEMENT_HANDLE_T, ct.c_uint32, ct.c_int32, ct.c_uint8, ct.POINTER(VC_RECT_T), ct.POINTER(VC_RECT_T), DISPMANX_RESOURCE_HANDLE_T, DISPMANX_TRANSFORM_T] vc_dispmanx_element_change_attributes.restype = ct.c_int vc_vchi_dispmanx_init = _lib.vc_vchi_dispmanx_init vc_vchi_dispmanx_init.argtypes = [VCHI_INSTANCE_T, ct.POINTER(VCHI_CONNECTION_T), ct.c_uint32] vc_vchi_dispmanx_init.restype = None vc_dispmanx_snapshot = _lib.vc_dispmanx_snapshot vc_dispmanx_snapshot.argtypes = [DISPMANX_DISPLAY_HANDLE_T, DISPMANX_RESOURCE_HANDLE_T, DISPMANX_TRANSFORM_T] vc_dispmanx_snapshot.restype = ct.c_int vc_dispmanx_resource_set_palette = _lib.vc_dispmanx_resource_set_palette vc_dispmanx_resource_set_palette.argtypes = [DISPMANX_RESOURCE_HANDLE_T, ct.c_void_p, ct.c_int, ct.c_int] vc_dispmanx_resource_set_palette.restype = ct.c_int vc_dispmanx_vsync_callback = _lib.vc_dispmanx_vsync_callback vc_dispmanx_vsync_callback.argtypes = [DISPMANX_DISPLAY_HANDLE_T, DISPMANX_CALLBACK_FUNC_T, ct.c_void_p] vc_dispmanx_vsync_callback.restype = ct.c_int # vc_cec.h ################################################################### CEC_BROADCAST_ADDR = 0xF CEC_TV_ADDRESS = 0 CEC_MAX_XMIT_LENGTH = 15 CEC_CLEAR_ADDR = 0xFFFF CEC_VERSION = 0x4 CEC_VENDOR_ID_BROADCOM = 0x18C086 CEC_VENDOR_ID_ONKYO = 0x0009B0 CEC_VENDOR_ID_PANASONIC_EUROPE = 0x000F12 CEC_VENDOR_ID = 0 CEC_BLOCKING = 1 CEC_NONBLOCKING = 0 CEC_AllDevices_T = ct.c_uint32 # enum ( CEC_AllDevices_eTV, CEC_AllDevices_eRec1, CEC_AllDevices_eRec2, CEC_AllDevices_eSTB1, CEC_AllDevices_eDVD1, CEC_AllDevices_eAudioSystem, CEC_AllDevices_eSTB2, CEC_AllDevices_eSTB3, CEC_AllDevices_eDVD2, CEC_AllDevices_eRec3, CEC_AllDevices_eSTB4, CEC_AllDevices_eDVD3, CEC_AllDevices_eRsvd3, CEC_AllDevices_eRsvd4, CEC_AllDevices_eFreeUse, CEC_AllDevices_eUnRegistered, ) = range(16) CEC_DEVICE_TYPE_T = ct.c_uint32 # enum ( CEC_DeviceType_TV, CEC_DeviceType_Rec, CEC_DeviceType_Reserved, CEC_DeviceType_Tuner, CEC_DeviceType_Playback, CEC_DeviceType_Audio, CEC_DeviceType_Switch, CEC_DeviceType_VidProc, ) = range(8) CEC_DeviceType_Invalid = 0xF CEC_OPCODE_T = ct.c_uint32 # enum CEC_Opcode_FeatureAbort = 0x00 CEC_Opcode_ImageViewOn = 0x04 CEC_Opcode_TunerStepIncrement = 0x05 CEC_Opcode_TunerStepDecrement = 0x06 CEC_Opcode_TunerDeviceStatus = 0x07 CEC_Opcode_GiveTunerDeviceStatus = 0x08 CEC_Opcode_RecordOn = 0x09 CEC_Opcode_RecordStatus = 0x0A CEC_Opcode_RecordOff = 0x0B CEC_Opcode_TextViewOn = 0x0D CEC_Opcode_RecordTVScreen = 0x0F CEC_Opcode_GiveDeckStatus = 0x1A CEC_Opcode_DeckStatus = 0x1B CEC_Opcode_SetMenuLanguage = 0x32 CEC_Opcode_ClearAnalogTimer = 0x33 CEC_Opcode_SetAnalogTimer = 0x34 CEC_Opcode_TimerStatus = 0x35 CEC_Opcode_Standby = 0x36 CEC_Opcode_Play = 0x41 CEC_Opcode_DeckControl = 0x42 CEC_Opcode_TimerClearedStatus = 0x43 CEC_Opcode_UserControlPressed = 0x44 CEC_Opcode_UserControlReleased = 0x45 CEC_Opcode_GiveOSDName = 0x46 CEC_Opcode_SetOSDName = 0x47 CEC_Opcode_SetOSDString = 0x64 CEC_Opcode_SetTimerProgramTitle = 0x67 CEC_Opcode_SystemAudioModeRequest = 0x70 CEC_Opcode_GiveAudioStatus = 0x71 CEC_Opcode_SetSystemAudioMode = 0x72 CEC_Opcode_ReportAudioStatus = 0x7A CEC_Opcode_GiveSystemAudioModeStatus = 0x7D CEC_Opcode_SystemAudioModeStatus = 0x7E CEC_Opcode_RoutingChange = 0x80 CEC_Opcode_RoutingInformation = 0x81 CEC_Opcode_ActiveSource = 0x82 CEC_Opcode_GivePhysicalAddress = 0x83 CEC_Opcode_ReportPhysicalAddress = 0x84 CEC_Opcode_RequestActiveSource = 0x85 CEC_Opcode_SetStreamPath = 0x86 CEC_Opcode_DeviceVendorID = 0x87 CEC_Opcode_VendorCommand = 0x89 CEC_Opcode_VendorRemoteButtonDown = 0x8A CEC_Opcode_VendorRemoteButtonUp = 0x8B CEC_Opcode_GiveDeviceVendorID = 0x8C CEC_Opcode_MenuRequest = 0x8D CEC_Opcode_MenuStatus = 0x8E CEC_Opcode_GiveDevicePowerStatus = 0x8F CEC_Opcode_ReportPowerStatus = 0x90 CEC_Opcode_GetMenuLanguage = 0x91 CEC_Opcode_SelectAnalogService = 0x92 CEC_Opcode_SelectDigitalService = 0x93 CEC_Opcode_SetDigitalTimer = 0x97 CEC_Opcode_ClearDigitalTimer = 0x99 CEC_Opcode_SetAudioRate = 0x9A CEC_Opcode_InactiveSource = 0x9D CEC_Opcode_CECVersion = 0x9E CEC_Opcode_GetCECVersion = 0x9F CEC_Opcode_VendorCommandWithID = 0xA0 CEC_Opcode_ClearExternalTimer = 0xA1 CEC_Opcode_SetExternalTimer = 0xA2 CEC_Opcode_ReportShortAudioDescriptor = 0xA3 CEC_Opcode_RequestShortAudioDescriptor = 0xA4 CEC_Opcode_InitARC = 0xC0 CEC_Opcode_ReportARCInited = 0xC1 CEC_Opcode_ReportARCTerminated = 0xC2 CEC_Opcode_RequestARCInit = 0xC3 CEC_Opcode_RequestARCTermination = 0xC4 CEC_Opcode_TerminateARC = 0xC5 CEC_Opcode_CDC = 0xF8 CEC_Opcode_Abort = 0xFF CEC_ABORT_REASON_T = ct.c_uint32 # enum ( CEC_Abort_Reason_Unrecognised_Opcode, CEC_Abort_Reason_Wrong_Mode, CEC_Abort_Reason_Cannot_Provide_Source, CEC_Abort_Reason_Invalid_Operand, CEC_Abort_Reason_Refused, CEC_Abort_Reason_Undetermined, ) = range(6) CEC_DISPLAY_CONTROL_T = ct.c_uint32 # enum CEC_DISPLAY_CONTROL_DEFAULT_TIME = 0 CEC_DISPLAY_CONTROL_UNTIL_CLEARED = 1 << 6 CEC_DISPLAY_CONTROL_CLEAR_PREV_MSG = 1 << 7 CEC_POWER_STATUS_T = ct.c_uint32 # enum ( CEC_POWER_STATUS_ON, CEC_POWER_STATUS_STANDBY, CEC_POWER_STATUS_ON_PENDING, CEC_POWER_STATUS_STANDBY_PENDING, ) = range(4) CEC_MENU_STATE_T = ct.c_uint32 # enum ( CEC_MENU_STATE_ACTIVATED, CEC_MENU_STATE_DEACTIVATED, CEC_MENU_STATE_QUERY, ) = range(3) CEC_DECK_INFO_T = ct.c_uint32 # enum ( CEC_DECK_INFO_PLAY, CEC_DECK_INFO_RECORD, CEC_DECK_INFO_PLAY_REVERSE, CEC_DECK_INFO_STILL, CEC_DECK_INFO_SLOW, CEC_DECK_INFO_SLOW_REVERSE, CEC_DECK_INFO_SEARCH_FORWARD, CEC_DECK_INFO_SEARCH_REVERSE, CEC_DECK_INFO_NO_MEDIA, CEC_DECK_INFO_STOP, CEC_DECK_INFO_WIND, CEC_DECK_INFO_REWIND, CEC_DECK_IDX_SEARCH_FORWARD, CEC_DECK_IDX_SEARCH_REVERSE, CEC_DECK_OTHER_STATUS, ) = range(0x11, 0x20) CEC_DECK_CTRL_MODE_T = ct.c_uint32 # enum ( CEC_DECK_CTRL_FORWARD, CEC_DECK_CTRL_BACKWARD, CEC_DECK_CTRL_STOP, CEC_DECK_CTRL_EJECT, ) = range(1, 5) CEC_PLAY_MODE_T = ct.c_uint32 # enum CEC_PLAY_FORWARD = 0x24 CEC_PLAY_REVERSE = 0x20 CEC_PLAY_STILL = 0x25 CEC_PLAY_SCAN_FORWARD_MIN_SPEED = 0x05 CEC_PLAY_SCAN_FORWARD_MED_SPEED = 0x06 CEC_PLAY_SCAN_FORWARD_MAX_SPEED = 0x07 CEC_PLAY_SCAN_REVERSE_MIN_SPEED = 0x09 CEC_PLAY_SCAN_REVERSE_MED_SPEED = 0x0A CEC_PLAY_SCAN_REVERSE_MAX_SPEED = 0x0B CEC_PLAY_SLOW_FORWARD_MIN_SPEED = 0x15 CEC_PLAY_SLOW_FORWARD_MED_SPEED = 0x16 CEC_PLAY_SLOW_FORWARD_MAX_SPEED = 0x17 CEC_PLAY_SLOW_REVERSE_MIN_SPEED = 0x19 CEC_PLAY_SLOW_REVERSE_MED_SPEED = 0x1A CEC_PLAY_SLOW_REVERSE_MAX_SPEED = 0x1B CEC_DECK_STATUS_REQUEST_T = ct.c_uint32 # enum ( CEC_DECK_STATUS_ON, CEC_DECK_STATUS_OFF, CEC_DECK_STATUS_ONCE, ) = range(1, 4) CEC_USER_CONTROL_T = ct.c_uint32 # enum CEC_User_Control_Select = 0x00 CEC_User_Control_Up = 0x01 CEC_User_Control_Down = 0x02 CEC_User_Control_Left = 0x03 CEC_User_Control_Right = 0x04 CEC_User_Control_RightUp = 0x05 CEC_User_Control_RightDown = 0x06 CEC_User_Control_LeftUp = 0x07 CEC_User_Control_LeftDown = 0x08 CEC_User_Control_RootMenu = 0x09 CEC_User_Control_SetupMenu = 0x0A CEC_User_Control_ContentsMenu = 0x0B CEC_User_Control_FavoriteMenu = 0x0C CEC_User_Control_Exit = 0x0D CEC_User_Control_Number0 = 0x20 CEC_User_Control_Number1 = 0x21 CEC_User_Control_Number2 = 0x22 CEC_User_Control_Number3 = 0x23 CEC_User_Control_Number4 = 0x24 CEC_User_Control_Number5 = 0x25 CEC_User_Control_Number6 = 0x26 CEC_User_Control_Number7 = 0x27 CEC_User_Control_Number8 = 0x28 CEC_User_Control_Number9 = 0x29 CEC_User_Control_Dot = 0x2A CEC_User_Control_Enter = 0x2B CEC_User_Control_Clear = 0x2C CEC_User_Control_ChannelUp = 0x30 CEC_User_Control_ChannelDown = 0x31 CEC_User_Control_PreviousChannel = 0x32 CEC_User_Control_SoundSelect = 0x33 CEC_User_Control_InputSelect = 0x34 CEC_User_Control_DisplayInformation = 0x35 CEC_User_Control_Help = 0x36 CEC_User_Control_PageUp = 0x37 CEC_User_Control_PageDown = 0x38 CEC_User_Control_Power = 0x40 CEC_User_Control_VolumeUp = 0x41 CEC_User_Control_VolumeDown = 0x42 CEC_User_Control_Mute = 0x43 CEC_User_Control_Play = 0x44 CEC_User_Control_Stop = 0x45 CEC_User_Control_Pause = 0x46 CEC_User_Control_Record = 0x47 CEC_User_Control_Rewind = 0x48 CEC_User_Control_FastForward = 0x49 CEC_User_Control_Eject = 0x4A CEC_User_Control_Forward = 0x4B CEC_User_Control_Backward = 0x4C CEC_User_Control_Angle = 0x50 CEC_User_Control_Subpicture = 0x51 CEC_User_Control_VideoOnDemand = 0x52 CEC_User_Control_EPG = 0x53 CEC_User_Control_TimerProgramming = 0x54 CEC_User_Control_InitialConfig = 0x55 CEC_User_Control_PlayFunction = 0x60 CEC_User_Control_PausePlayFunction = 0x61 CEC_User_Control_RecordFunction = 0x62 CEC_User_Control_PauseRecordFunction = 0x63 CEC_User_Control_StopFunction = 0x64 CEC_User_Control_MuteFunction = 0x65 CEC_User_Control_RestoreVolumeFunction = 0x66 CEC_User_Control_TuneFunction = 0x67 CEC_User_Control_SelectDiskFunction = 0x68 CEC_User_Control_SelectAVInputFunction = 0x69 CEC_User_Control_SelectAudioInputFunction = 0x6A CEC_User_Control_F1Blue = 0x71 CEC_User_Control_F2Red = 0x72 CEC_User_Control_F3Green = 0x73 CEC_User_Control_F4Yellow = 0x74 CEC_User_Control_F5 = 0x75 class VC_CEC_TOPOLOGY_T(ct.Structure): _fields_ = [ ('active_mask', ct.c_uint16), ('num_devices', ct.c_uint16), ('device_attr', ct.c_uint32 * 16), ] class VC_CEC_MESSAGE_T(ct.Structure): _fields_ = [ ('length', ct.c_uint32), ('initiator', CEC_AllDevices_T), ('follower', CEC_AllDevices_T), ('payload', ct.c_uint8 * (CEC_MAX_XMIT_LENGTH + 1)), ] VC_CEC_NOTIFY_T = ct.c_uint32 # enum VC_CEC_NOTIFY_NONE = 0 VC_CEC_TX = 1 << 0 VC_CEC_RX = 1 << 1 VC_CEC_BUTTON_PRESSED = 1 << 2 VC_CEC_BUTTON_RELEASE = 1 << 3 VC_CEC_REMOTE_PRESSED = 1 << 4 VC_CEC_REMOTE_RELEASE = 1 << 5 VC_CEC_LOGICAL_ADDR = 1 << 6 VC_CEC_TOPOLOGY = 1 << 7 VC_CEC_LOGICAL_ADDR_LOST = 1 << 15 CEC_CALLBACK_T = ct.CFUNCTYPE( None, ct.c_void_p, ct.c_uint32, ct.c_uint32, ct.c_uint32, ct.c_uint32) CEC_CB_REASON = lambda x: x & 0xFFFF CEC_CB_MSG_LENGTH = lambda x: (x >> 16) & 0xFF CEC_CB_RC = lambda x: (x >> 24) & 0xFF CEC_CB_INITIATOR = lambda x: (x >> 4) & 0xF CEC_CB_FOLLOWER = lambda x: x & 0xF CEC_CB_OPCODE = lambda x: (x >> 8) & 0xFF CEC_CB_OPERAND1 = lambda x: (x >> 16) & 0xFF CEC_CB_OPERAND2 = lambda x: (x >> 24) & 0xFF VC_CEC_ERROR_T = ct.c_uint32 # enum ( VC_CEC_SUCCESS, VC_CEC_ERROR_NO_ACK, VC_CEC_ERROR_SHUTDOWN, VC_CEC_ERROR_BUSY, VC_CEC_ERROR_NO_LA, VC_CEC_ERROR_NO_PA, VC_CEC_ERROR_NO_TOPO, VC_CEC_ERROR_INVALID_FOLLOWER, VC_CEC_ERROR_INVALID_ARGUMENT, ) = range(9) # vc_cecservice.h ############################################################ CECSERVICE_CALLBACK_T = ct.CFUNCTYPE( None, ct.c_void_p, ct.c_uint32, ct.c_uint32, ct.c_uint32, ct.c_uint32, ct.c_uint32) vc_vchi_cec_init = _lib.vc_vchi_cec_init vc_vchi_cec_init.argtypes = [VCHI_INSTANCE_T, ct.POINTER(ct.POINTER(VCHI_CONNECTION_T)), ct.c_uint32] vc_vchi_cec_init.restype = None vc_vchi_cec_stop = _lib.vc_vchi_cec_stop vc_vchi_cec_stop.argtypes = [] vc_vchi_cec_stop.restype = None vc_cec_register_callback = _lib.vc_cec_register_callback vc_cec_register_callback.argtypes = [CECSERVICE_CALLBACK_T, ct.c_void_p] vc_cec_register_callback.restype = None vc_cec_register_command = _lib.vc_cec_register_command vc_cec_register_command.argtypes = [CEC_OPCODE_T] vc_cec_register_command.restype = ct.c_int vc_cec_register_all = _lib.vc_cec_register_all vc_cec_register_all.argtypes = [] vc_cec_register_all.restype = ct.c_int vc_cec_deregister_command = _lib.vc_cec_deregister_command vc_cec_deregister_command.argtypes = [CEC_OPCODE_T] vc_cec_deregister_command.restype = ct.c_int vc_cec_deregister_all = _lib.vc_cec_deregister_all vc_cec_deregister_all.argtypes = [] vc_cec_deregister_all.restype = ct.c_int vc_cec_send_message = _lib.vc_cec_send_message vc_cec_send_message.argtypes = [ct.c_uint32, ct.POINTER(ct.c_uint8), ct.c_uint32, vcos_bool_t] vc_cec_send_message.restype = ct.c_int vc_cec_get_logical_address = _lib.vc_cec_get_logical_address vc_cec_get_logical_address.argtypes = [ct.POINTER(CEC_AllDevices_T)] vc_cec_get_logical_address.restype = ct.c_int vc_cec_alloc_logical_address = _lib.vc_cec_alloc_logical_address vc_cec_alloc_logical_address.argtypes = [] vc_cec_alloc_logical_address.restype = ct.c_int vc_cec_release_logical_address = _lib.vc_cec_release_logical_address vc_cec_release_logical_address.argtypes = [] vc_cec_release_logical_address.restype = ct.c_int vc_cec_get_topology = _lib.vc_cec_get_topology vc_cec_get_topology.argtypes = [ct.POINTER(VC_CEC_TOPOLOGY_T)] vc_cec_get_topology.restype = ct.c_int vc_cec_set_vendor_id = _lib.vc_cec_set_vendor_id vc_cec_set_vendor_id.argtypes = [ct.c_uint32] vc_cec_set_vendor_id.restype = ct.c_int vc_cec_set_osd_name = _lib.vc_cec_set_osd_name vc_cec_set_osd_name.argtypes = [ct.c_char_p] vc_cec_set_osd_name.restype = ct.c_int vc_cec_get_physical_address = _lib.vc_cec_get_physical_address vc_cec_get_physical_address.argtypes = [ct.POINTER(ct.c_uint16)] vc_cec_get_physical_address.restype = ct.c_int vc_cec_get_vendor_id = _lib.vc_cec_get_vendor_id vc_cec_get_vendor_id.argtypes = [CEC_AllDevices_T, ct.POINTER(ct.c_uint32)] vc_cec_get_vendor_id.restype = ct.c_int vc_cec_device_type = _lib.vc_cec_device_type vc_cec_device_type.argtypes = [CEC_AllDevices_T] vc_cec_device_type.restype = CEC_DEVICE_TYPE_T vc_cec_send_message2 = _lib.vc_cec_send_message2 vc_cec_send_message2.argtypes = [ct.POINTER(VC_CEC_MESSAGE_T)] vc_cec_send_message2.restype = ct.c_int vc_cec_param2message = _lib.vc_cec_param2message vc_cec_param2message.argtypes = [ct.c_uint32, ct.c_uint32, ct.c_uint32, ct.c_uint32, ct.c_uint32, ct.POINTER(VC_CEC_MESSAGE_T)] vc_cec_param2message.restype = ct.c_int vc_cec_poll_address = _lib.vc_cec_poll_address vc_cec_poll_address.argtypes = [CEC_AllDevices_T] vc_cec_poll_address.restype = ct.c_int vc_cec_set_logical_address = _lib.vc_cec_set_logical_address vc_cec_set_logical_address.argtypes = [CEC_AllDevices_T, CEC_DEVICE_TYPE_T, ct.c_uint32] vc_cec_set_logical_address.restype = ct.c_int vc_cec_add_device = _lib.vc_cec_add_device vc_cec_add_device.argtypes = [CEC_AllDevices_T, ct.c_uint16, CEC_DEVICE_TYPE_T, vcos_bool_t] vc_cec_add_device.restype = ct.c_int vc_cec_set_passive = _lib.vc_cec_set_passive vc_cec_set_passive.argtypes = [vcos_bool_t] vc_cec_set_passive.restype = ct.c_int vc_cec_send_FeatureAbort = _lib.vc_cec_send_FeatureAbort vc_cec_send_FeatureAbort.argtypes = [ct.c_uint32, CEC_OPCODE_T, CEC_ABORT_REASON_T] vc_cec_send_FeatureAbort.restype = ct.c_int vc_cec_send_ActiveSource = _lib.vc_cec_send_ActiveSource vc_cec_send_ActiveSource.argtypes = [ct.c_uint16, vcos_bool_t] vc_cec_send_ActiveSource.restype = ct.c_int vc_cec_send_ImageViewOn = _lib.vc_cec_send_ImageViewOn vc_cec_send_ImageViewOn.argtypes = [ct.c_uint32, vcos_bool_t] vc_cec_send_ImageViewOn.restype = ct.c_int vc_cec_send_SetOSDString = _lib.vc_cec_send_SetOSDString vc_cec_send_SetOSDString.argtypes = [ct.c_uint32, CEC_DISPLAY_CONTROL_T, ct.c_char_p, vcos_bool_t] vc_cec_send_SetOSDString.restype = ct.c_int vc_cec_send_Standby = _lib.vc_cec_send_Standby vc_cec_send_Standby.argtypes = [ct.c_uint32, vcos_bool_t] vc_cec_send_Standby.restype = ct.c_int vc_cec_send_MenuStatus = _lib.vc_cec_send_MenuStatus vc_cec_send_MenuStatus.argtypes = [ct.c_uint32, CEC_MENU_STATE_T, vcos_bool_t] vc_cec_send_MenuStatus.restype = ct.c_int vc_cec_send_ReportPhysicalAddress = _lib.vc_cec_send_ReportPhysicalAddress vc_cec_send_ReportPhysicalAddress.argtypes = [ct.c_uint16, CEC_DEVICE_TYPE_T, vcos_bool_t] vc_cec_send_ReportPhysicalAddress.restype = ct.c_int # vc_gencmd.h ################################################################ vc_gencmd_init = _lib.vc_gencmd_init vc_gencmd_init.argtypes = [] vc_gencmd_init.restype = ct.c_int vc_gencmd_stop = _lib.vc_gencmd_stop vc_gencmd_stop.argtypes = [] vc_gencmd_stop.restype = None vc_gencmd_send = _lib.vc_gencmd_send vc_gencmd_send.argtypes = [ct.c_char_p] vc_gencmd_send.restype = ct.c_int vc_gencmd_read_response = _lib.vc_gencmd_read_response vc_gencmd_read_response.argtypes = [ct.c_char_p, ct.c_int] vc_gencmd_read_response.restype = ct.c_int vc_gencmd = _lib.vc_gencmd vc_gencmd.argtypes = [ct.c_char_p, ct.c_int, ct.c_char_p] vc_gencmd.restype = ct.c_int vc_gencmd_string_property = _lib.vc_gencmd_string_property vc_gencmd_string_property.argtypes = [ct.c_char_p, ct.c_char_p, ct.POINTER(ct.c_char_p), ct.POINTER(ct.c_int)] vc_gencmd_string_property.restype = ct.c_int vc_gencmd_number_property = _lib.vc_gencmd_number_property vc_gencmd_number_property.argtypes = [ct.c_char_p, ct.c_char_p, ct.POINTER(ct.c_int)] vc_gencmd_number_property.restype = ct.c_int vc_gencmd_until = _lib.vc_gencmd_until vc_gencmd_until.argtypes = [ct.c_char_p, ct.c_char_p, ct.c_char_p, ct.c_char_p, ct.c_int] vc_gencmd_until.restype = ct.c_int