aquastat/picamera/bcm_host.py
2023-02-01 21:37:42 +00:00

992 lines
35 KiB
Python

# vim: set et sw=4 sts=4 fileencoding=utf-8:
#
# Python header conversion
# Copyright (c) 2013-2017 Dave Jones <dave@waveform.org.uk>
#
# 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