From 522f6081c5133562acbf438fd9c9fc0324b72ace Mon Sep 17 00:00:00 2001 From: John Hodge Date: Fri, 23 May 2014 08:14:00 +0800 Subject: [PATCH] UDI - Revised udi_gfx from [com]buster --- UDI/include/udi_gfx.h | 468 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 378 insertions(+), 90 deletions(-) diff --git a/UDI/include/udi_gfx.h b/UDI/include/udi_gfx.h index d9fbcb22..23da6fa9 100644 --- a/UDI/include/udi_gfx.h +++ b/UDI/include/udi_gfx.h @@ -8,51 +8,65 @@ * License: * * - * Source: - * https://www.d-rift.nl/combuster/mos3/?p=viewsource&file=/include/common/udi_gfx.h + * Origin: + * http://www.d-rift.nl/combuster/mos3/?p=viewsource&file=/include/common/udi_gfx.h */ - + // note that the specification, and thus, the contents of this file is not fixed. - + #ifndef __UDI_GFX_H__ #define __UDI_GFX_H__ - + #include - + #ifndef UDI_GFX_VERSION #error "UDI_GFX_VERSION not defined." #elif UDI_GFX_VERSION != 0x101 #error "UDI_GFX_VERSION not supported." #endif - + /** * Enumeration: UDI_GFX_PROP * Lists the various UDI properties */ - + // General state properties /* Constant: UDI_GFX_PROP_ENABLE * * Valid values: * 0 - disabled * 1 - enabled + * 2 - reset * * Ranges: - * Hardwired 1, or 0-1 - * - * The connector or engine is enabled (nonzero) or disabled (zero). A disabled - * engine forwards all data from the previous stage unmodified. A disabled - * connector does not send any data over the connector. Drivers may power down - * the physical counterparts of disabled components to preserve power, and users - * should expect delays when enabling connectors or components representing - * framebuffers. Disabling is however not recommended for sprite layers, which - * may repeatedly be enabled and disabled. A disabled component can still have - * its state changed, and the driver must complete all commands and other state - * changes as expected, regardless of disabled or power state. The valid ranges - * reported for this property may be 1 (always enabled) or 0-1 (either enabled - * or disabled). + * Must include at least 1 + * + * The primary state of the connector or engine. An enabled state indicates + * it is functioning and generating live output. A disabled state is one where + * it is not contributing to any output but is otherwise functional. Finally + * the reset state is where the driver is free to deallocate all resources + * corresponding to this component and trash any state not referenced by other + * components. + * + * A disabled or reset engine forwards all data from the previous stage + * unmodified. The disabled state indicates that the component might be + * returned to its enabled state within short notice. + * + * A disabled connector will not send pixel data, but can perform other + * initialisation communication such as DDC. A reset connector will not respond + * in any fashion and can not be used for other purposes. Hardware is expected + * to be powered down in such state. + * + * Users should expect significant delays when moving components in and out of + * the reset state. Moving engines between the enabled and disabled state should + * take effect within one frame, such transition should take effect on a frame + * boundary when supported. */ #define UDI_GFX_PROP_ENABLE 0 + +#define UDI_GFX_PROP_ENABLE_DISABLED 0 +#define UDI_GFX_PROP_ENABLE_ENABLED 1 +#define UDI_GFX_PROP_ENABLE_RESET 2 /* Constant: UDI_GFX_PROP_INPUT * * Valid values: @@ -108,20 +122,20 @@ * selected width. */ #define UDI_GFX_PROP_HEIGHT 3 - + /* Constant: UDI_GFX_PROP_CUSTOM * The first property index of the driver's custom range. These are not assigned * directly assigned by the UDI specification, but may be specified in the * operator tree. */ #define UDI_GFX_PROP_CUSTOM 1024 - + // engine properties - + /* Constant: UDI_GFX_PROP_CLIP * * Valid values: - * 0 - points outside width x height are passed from next stage + * 0 - points outside width x height are passed unmodified from input * 1 - the engine's contents is tiled with size width x height * 2 - points outside the width overflow into the y coordinate * 3 - points outside the height overflow into the x coordinate @@ -140,7 +154,7 @@ * connectors, this property is always 0 since they do not store pixel data */ #define UDI_GFX_PROP_CLIP 4 - + /* Constant: UDI_GFX_PROP_UNIT_WIDTH * * Valid values: @@ -161,7 +175,7 @@ * fonts */ #define UDI_GFX_PROP_UNIT_WIDTH 5 - + /* Constant: UDI_GFX_PROP_UNIT_HEIGHT * * Valid values: @@ -177,27 +191,87 @@ * width, or mostly independent. */ #define UDI_GFX_PROP_UNIT_HEIGHT 6 - + +/* Constant: UDI_GFX_PROP_TRANSLATEX + * + * Valid values: + * Any, signed value. + * + * Ranges: + * Any non-empty set. Typical values are hardwired zero, continuous + * between -WIDTH and WIDTH, -WIDTH to zero inclusive, or all possible values + * + * The horizontal offset where drawing starts. A positive value means the top-left + * corner moves towards the right end of the screen, a negative value moves the + * origin off the screen on the left side. Clipped areas moved off the screen do + * not reappear on the opposite side. + * + * With clipping enabled, this field combined with + * determines the area where the image should be drawn, which is the horizontal + * range from UDI_GFX_PROP_TRANSLATEX to UDI_GFX_PROP_WIDTH + + * UDI_GFX_PROP_TRANSLATEX - 1 + */ #define UDI_GFX_PROP_TRANSLATEX 7 + +/* Constant: UDI_GFX_PROP_TRANSLATEY + * + * Valid values: + * Any signed value. + * + * Ranges: + * Any non-empty set. Typical values are hardwired zero, continuous + * between -WIDTH and WIDTH, or all possible values + * + * See but for the Y direction. + */ #define UDI_GFX_PROP_TRANSLATEY 8 -#define UDI_GFX_PROP_SOURCE_WIDTH 12 -#define UDI_GFX_PROP_SOURCE_HEIGHT 13 + #define UDI_GFX_PROP_GL_VERSION 14 #define UDI_GFX_PROP_GLES_VERSION 15 #define UDI_GFX_PROP_STATE_BLOCK 16 -/** - * Each engine consists of 1 or more operators - */ -#define UDI_GFX_PROP_OPERATOR_INDEX 17 //!< Index of operator to inspect/manipulate -#define UDI_GFX_PROP_OPERATOR_OPCODE 18 //!< Operation performed by operator -#define UDI_GFX_PROP_OPERATOR_ARG_1 19 //!< argument 1 -#define UDI_GFX_PROP_OPERATOR_ARG_2 20 //!< argument 2 -#define UDI_GFX_PROP_OPERATOR_ARG_3 21 //!< argument 3 #define UDI_GFX_PROP_COLOR_BITS 22 #define UDI_GFX_PROP_GL_TARGET 23 -#define UDI_GFX_PROP_INPUTX 25 -#define UDI_GFX_PROP_INPUTY 26 - + +/* Constant: UDI_GFX_PROP_STOCK_FORMAT + * + * Value: + * Zero, or any constant from + * + * Ranges: + * Any non-empty set of valid values. + * + * This field indicates the storage format is one from a limited set of + * typical configurations. If the field is zero, the engine is not knowingly + * configured as a common framebuffer. If nonzero, the operator chain and any + * dependent settings are defined to be functionally equivalent to that of a + * typical framebuffer device. + * + * The value zero does not imply that the device does not actually follow a + * set convention. This saves drivers from writing elaborate checking code + * to determine the condition in question. + * + * Writing this field potentially modifies other property fields within the + * same engine to establish the requested configuration. Manually writing such + * properties after changing this setting may in turn revert this property to + * the zero state, even if there was no modification or the behaviour is still + * as previously advertised by this property. + */ +#define UDI_GFX_PROP_STOCK_FORMAT 27 + +/* Constant: UDI_GFX_PROP_OPERATOR_COUNT + * + * Valid values: + * Any non-zero positive number + * + * Ranges: + * Most likely constant. Can be any set of valid values. + * + * The current value is the number of entries in the operator tree that can + * be requested for this engine using and + * + */ +#define UDI_GFX_PROP_OPERATOR_COUNT 28 + // properties for removal: #define UDI_GFX_PROP_STORE_COUNT 24 // not generic #define UDI_GFX_PROP_STORE_WIDTH 9 // not generic @@ -206,7 +280,16 @@ #define UDI_GFX_PROP_PALETTE 1024 // optional, can be derived from the operator tree #define UDI_GFX_PROP_BUFFER 1025 // optional, can be derived from the operator tree #define UDI_GFX_PROP_TILESHEET 1026 // optional, can be derived from the operator tree - +#define UDI_GFX_PROP_OPERATOR_INDEX 17 // deprecated for dedicated methods +#define UDI_GFX_PROP_OPERATOR_OPCODE 18 // deprecated for dedicated methods +#define UDI_GFX_PROP_OPERATOR_ARG_1 19 // deprecated for dedicated methods +#define UDI_GFX_PROP_OPERATOR_ARG_2 20 // deprecated for dedicated methods +#define UDI_GFX_PROP_OPERATOR_ARG_3 21 // deprecated for dedicated methods +#define UDI_GFX_PROP_SOURCE_WIDTH 12 // should have been documented when I still knew what it did. +#define UDI_GFX_PROP_SOURCE_HEIGHT 13 // should have been documented when I still knew what it did. +#define UDI_GFX_PROP_INPUTX 25 // should have been documented when I still knew what it did. +#define UDI_GFX_PROP_INPUTY 26 // should have been documented when I still knew what it did. + // connector properties #define UDI_GFX_PROP_SIGNAL 23 #define UDI_GFX_PROP_CONNECTOR_TYPE 24 @@ -219,7 +302,7 @@ #define UDI_GFX_PROP_DOT_CLOCK 31 #define UDI_GFX_PROP_VGA_H_SYNC_POL 32 #define UDI_GFX_PROP_VGA_V_SYNC_POL 33 - + /** * Enumeration: UDI_GFX_SIGNAL * Lists the various signal types @@ -238,7 +321,7 @@ #define UDI_GFX_SIGNAL_HDMI 10 #define UDI_GFX_SIGNAL_TEXT 11 #define UDI_GFX_SIGNAL_CUSTOM 12 - + /** * Enumeration: UDI_GFX_CONNECTOR * Lists the various external connectors @@ -252,7 +335,8 @@ #define UDI_GFX_CONNECTOR_RF 6 #define UDI_GFX_CONNECTOR_SCART 7 #define UDI_GFX_CONNECTOR_COMPOSITE 8 - +#define UDI_GFX_CONNECTOR_MEMBUFFER 9 + /** * Enumeration: UDI_GFX_OPERATOR * Lists the display output operator @@ -296,17 +380,44 @@ #define UDI_GFX_OPERATOR_TYOFF 33 // output = vertical offset from start of tile #define UDI_GFX_OPERATOR_INPUT 34 // output = input engine[x][y] component v1 #define UDI_GFX_OPERATOR_DINPUT 35 // output = input engine[a1][a2] component v3 - - - + +/* Enumeration: UDI_GFX_STOCK_FORMAT + * Lists stock configurations + * + * When a stock configuration is used, the device is set to behave as a + * simple framebuffer device. The and + * determine the virtual size of the framebuffer, and + * and indicate the offset into that framebuffer + * that is visible (which are typically restricted to negative values) + */ +#define UDI_GFX_STOCK_FORMAT_UNKNOWN 0 +#define UDI_GFX_STOCK_FORMAT_R8G8B8X8 1 +#define UDI_GFX_STOCK_FORMAT_B8G8R8X8 2 +#define UDI_GFX_STOCK_FORMAT_R8G8B8 3 +#define UDI_GFX_STOCK_FORMAT_B8G8R8 4 +#define UDI_GFX_STOCK_FORMAT_R5G6B5 5 +#define UDI_GFX_STOCK_FORMAT_B5G6R5 6 +#define UDI_GFX_STOCK_FORMAT_R5G5B5X1 7 +#define UDI_GFX_STOCK_FORMAT_B5G5R5X1 8 +#define UDI_GFX_STOCK_FORMAT_N8 9 + +// Enumeration: UDI_GFX_BUFFER_INFO_FLAG +// Lists behavioural patterns for direct buffer accesses. +// +#define UDI_GFX_BUFFER_INFO_FLAG_R 0x0001 // buffer can be read +#define UDI_GFX_BUFFER_INFO_FLAG_W 0x0002 // buffer can be written +#define UDI_GFX_BUFFER_INFO_FLAG_BITALIGN_ENTRY 0x0004 // for non-multiple-of-eight buffer slot sizes, align on byte boundary every unit +#define UDI_GFX_BUFFER_INFO_FLAG_BITALIGN_ROW 0x0008 // for non-multiple-of-eight buffer slot sizes, align only the start of the row + + // Constant: UDI_GFX_PROVIDER_OPS_NUM // the ops number used for the graphics driver #define UDI_GFX_PROVIDER_OPS_NUM 1 - + // Constant: UDI_GFX_CLIENT_OPS_NUM // the ops number used for the graphics application #define UDI_GFX_CLIENT_OPS_NUM 2 - + // Structure: udi_gfx_bind_cb_t // Contains the operations of a driver binding request typedef struct { @@ -315,7 +426,7 @@ typedef struct { udi_cb_t gcb; } udi_gfx_bind_cb_t; #define UDI_GFX_BIND_CB_NUM 1 - + // Function: udi_block_bind_req // function pointer prototype for connecting to a block device // @@ -324,7 +435,7 @@ typedef struct { // typedef void udi_gfx_bind_req_op_t (udi_gfx_bind_cb_t *cb ); udi_gfx_bind_req_op_t udi_gfx_bind_req; - + // Function: udi_gfx_bind_ack // function pointer prototype for acknowledging a connection request // @@ -336,7 +447,7 @@ udi_gfx_bind_req_op_t udi_gfx_bind_req; // typedef void udi_gfx_bind_ack_op_t (udi_gfx_bind_cb_t *cb, udi_index_t sockets, udi_index_t engines, udi_status_t status ); udi_gfx_bind_ack_op_t udi_gfx_bind_ack; - + // Function: udi_gfx_unbind_req // function pointer prototype for disconnecting a block device // @@ -345,7 +456,7 @@ udi_gfx_bind_ack_op_t udi_gfx_bind_ack; // typedef void udi_gfx_unbind_req_op_t (udi_gfx_bind_cb_t *cb ); udi_gfx_unbind_req_op_t udi_gfx_unbind_req; - + // Function: udi_gfx_unbind_ack // function pointer prototype for connecting to a block device // @@ -354,7 +465,7 @@ udi_gfx_unbind_req_op_t udi_gfx_unbind_req; // typedef void udi_gfx_unbind_ack_op_t (udi_gfx_bind_cb_t *cb ); udi_gfx_unbind_ack_op_t udi_gfx_unbind_ack; - + // Structure: udi_gfx_state_cb_t // Contains the operations of a read/write transaction typedef struct { @@ -365,7 +476,7 @@ typedef struct { udi_ubit32_t attribute; } udi_gfx_state_cb_t; #define UDI_GFX_STATE_CB_NUM 2 - + // Function: udi_gfx_set_engine_req // function pointer prototype for setting an engine state // @@ -374,7 +485,7 @@ typedef struct { // typedef void udi_gfx_set_engine_req_op_t (udi_gfx_state_cb_t *cb, udi_ubit32_t value); udi_gfx_set_engine_req_op_t udi_gfx_set_engine_req; - + // Function: udi_gfx_set_connector_req // function pointer prototype for setting an connector state // @@ -383,7 +494,7 @@ udi_gfx_set_engine_req_op_t udi_gfx_set_engine_req; // typedef void udi_gfx_set_connector_req_op_t (udi_gfx_state_cb_t *cb, udi_ubit32_t value); udi_gfx_set_connector_req_op_t udi_gfx_set_connector_req; - + // Function: udi_gfx_set_engine_ack // function pointer prototype for setting an engine state // @@ -392,7 +503,7 @@ udi_gfx_set_connector_req_op_t udi_gfx_set_connector_req; // typedef void udi_gfx_set_engine_ack_op_t (udi_gfx_state_cb_t *cb ); udi_gfx_set_engine_ack_op_t udi_gfx_set_engine_ack; - + // Function: udi_gfx_set_connector_ack // function pointer prototype for setting an engine state // @@ -401,7 +512,7 @@ udi_gfx_set_engine_ack_op_t udi_gfx_set_engine_ack; // typedef void udi_gfx_set_connector_ack_op_t (udi_gfx_state_cb_t *cb ); udi_gfx_set_connector_ack_op_t udi_gfx_set_connector_ack; - + // Function: udi_gfx_get_engine_req // function pointer prototype for setting an engine state // @@ -410,7 +521,7 @@ udi_gfx_set_connector_ack_op_t udi_gfx_set_connector_ack; // typedef void udi_gfx_get_engine_req_op_t (udi_gfx_state_cb_t *cb ); udi_gfx_get_engine_req_op_t udi_gfx_get_engine_req; - + // Function: udi_gfx_get_connector_req // function pointer prototype for setting an connector state // @@ -419,7 +530,7 @@ udi_gfx_get_engine_req_op_t udi_gfx_get_engine_req; // typedef void udi_gfx_get_connector_req_op_t (udi_gfx_state_cb_t *cb ); udi_gfx_get_connector_req_op_t udi_gfx_get_connector_req; - + // Function: udi_gfx_get_engine_ack // function pointer prototype for setting an engine state // @@ -428,7 +539,7 @@ udi_gfx_get_connector_req_op_t udi_gfx_get_connector_req; // typedef void udi_gfx_get_engine_ack_op_t (udi_gfx_state_cb_t *cb, udi_ubit32_t value); udi_gfx_get_engine_ack_op_t udi_gfx_get_engine_ack; - + // Function: udi_gfx_get_connector_ack // function pointer prototype for setting an engine state // @@ -437,8 +548,27 @@ udi_gfx_get_engine_ack_op_t udi_gfx_get_engine_ack; // typedef void udi_gfx_get_connector_ack_op_t (udi_gfx_state_cb_t *cb, udi_ubit32_t value); udi_gfx_get_connector_ack_op_t udi_gfx_get_connector_ack; - - + +// Function: udi_gfx_set_engine_nak +// function pointer prototype for setting an engine state +// +// in: +// cb - A pointer to a +// status - An UDI status value indicative of the error +// +typedef void udi_gfx_set_engine_nak_op_t (udi_gfx_state_cb_t *cb, udi_ubit32_t status); +udi_gfx_set_engine_nak_op_t udi_gfx_set_engine_nak; + +// Function: udi_gfx_set_connector_nak +// function pointer prototype for setting an engine state +// +// in: +// cb - A pointer to a +// status - An UDI status value indicative of the error +// +typedef void udi_gfx_set_connector_nak_op_t (udi_gfx_state_cb_t *cb, udi_ubit32_t status); +udi_gfx_set_connector_nak_op_t udi_gfx_get_connector_nak; + // Structure: udi_gfx_range_cb_t // Contains the operations of a range request transaction typedef struct { @@ -450,7 +580,7 @@ typedef struct { udi_buf_t * rangedata; } udi_gfx_range_cb_t; #define UDI_GFX_RANGE_CB_NUM 3 - + // Function: udi_gfx_range_engine_req // function pointer prototype for getting an engine property range // @@ -459,7 +589,7 @@ typedef struct { // typedef void udi_gfx_range_engine_req_op_t (udi_gfx_range_cb_t *cb ); udi_gfx_range_engine_req_op_t udi_gfx_range_engine_req; - + // Function: udi_gfx_range_connector_req // function pointer prototype for getting a connector property range // @@ -468,7 +598,7 @@ udi_gfx_range_engine_req_op_t udi_gfx_range_engine_req; // typedef void udi_gfx_range_connector_req_op_t (udi_gfx_range_cb_t *cb ); udi_gfx_range_connector_req_op_t udi_gfx_range_connector_req; - + // Function: udi_gfx_range_engine_ack // function pointer prototype for replying an engine property range // @@ -477,7 +607,7 @@ udi_gfx_range_connector_req_op_t udi_gfx_range_connector_req; // typedef void udi_gfx_range_engine_ack_op_t (udi_gfx_range_cb_t *cb ); udi_gfx_range_engine_ack_op_t udi_gfx_range_engine_ack; - + // Function: udi_gfx_range_connector_ack // function pointer prototype for replying a connector property range // @@ -486,8 +616,31 @@ udi_gfx_range_engine_ack_op_t udi_gfx_range_engine_ack; // typedef void udi_gfx_range_connector_ack_op_t (udi_gfx_range_cb_t *cb ); udi_gfx_range_connector_ack_op_t udi_gfx_range_connector_ack; - - + +// Function: udi_gfx_get_engine_operator_req +// function pointer prototype for requesting the engine operator layout +// +// in: +// cb - A pointer to a +// +typedef void udi_gfx_get_engine_operator_req_op_t (udi_gfx_range_cb_t *cb ); +udi_gfx_get_engine_operator_req_op_t udi_gfx_get_engine_operator_req; + +// Function: udi_gfx_get_engine_operator_ack +// function pointer prototype for replying the engine operator layout +// +// in: +// cb - A pointer to a +// op - The operator performed at this index +// arg1 - the first argument to this operator +// arg2 - the second argument to this operator +// arg3 - the third argument to this operator +// +typedef void udi_gfx_get_engine_operator_ack_op_t (udi_gfx_range_cb_t *cb, udi_ubit32_t op, udi_ubit32_t arg1, udi_ubit32_t arg2, udi_ubit32_t arg3 ); +udi_gfx_get_engine_operator_ack_op_t udi_gfx_get_engine_operator_ack; + + + // Structure: udi_gfx_command_cb_t // Contains the operations of a command sequence typedef struct { @@ -497,27 +650,148 @@ typedef struct { udi_buf_t * commanddata; } udi_gfx_command_cb_t; #define UDI_GFX_COMMAND_CB_NUM 4 - -// Function: udi_gfx_command -// function pointer prototype for sending command data + +// Function: udi_gfx_connector_command_req +// function pointer prototype for sending command data to the output connector +// +// in: +// cb - A pointer to a +// +typedef void udi_gfx_connector_command_req_op_t (udi_gfx_command_cb_t *cb ); +udi_gfx_connector_command_req_op_t udi_gfx_connector_command_req; + +// Function: udi_gfx_engine_command_req +// function pointer prototype for sending command data to the engine // // in: // cb - A pointer to a // -typedef void udi_gfx_command_req_op_t (udi_gfx_command_cb_t *cb ); -udi_gfx_command_req_op_t udi_gfx_command_req; - -// Function: udi_gfx_command_ack -// function pointer prototype for sending command data +typedef void udi_gfx_engine_command_req_op_t (udi_gfx_command_cb_t *cb ); +udi_gfx_engine_command_req_op_t udi_gfx_engine_command_req; + +// Function: udi_gfx_connector_command_ack +// function pointer prototype for sending command data replies // // in: // cb - A pointer to a // -typedef void udi_gfx_command_ack_op_t (udi_gfx_command_cb_t *cb); -udi_gfx_command_ack_op_t udi_gfx_command_ack; - +typedef void udi_gfx_connector_command_ack_op_t (udi_gfx_command_cb_t *cb); +udi_gfx_connector_command_ack_op_t udi_gfx_connector_command_ack; + +// Function: udi_gfx_engine_command_ack +// function pointer prototype for sending engine data replies +// +// in: +// cb - A pointer to a +// +typedef void udi_gfx_engine_command_ack_op_t (udi_gfx_command_cb_t *cb); +udi_gfx_engine_command_ack_op_t udi_gfx_engine_command_ack; + +// Structure: udi_gfx_buffer_cb_t +// Contains a description of a buffer, or area thereof +typedef struct { + // Variable: gcb + // The main control block + udi_cb_t gcb; + udi_ubit32_t buffer_index; +} udi_gfx_buffer_info_cb_t; + +// Function: udi_gfx_buffer_info_req +// function pointer prototype for getting buffer configuration information +// +// in: +// cb - A pointer to a +// +typedef void udi_gfx_buffer_info_req_op_t (udi_gfx_buffer_info_cb_t *cb); +udi_gfx_buffer_info_req_op_t udi_gfx_buffer_info_req; + +// Function: udi_gfx_buffer_info_ack +// function pointer prototype for getting buffer configuration information +// +// in: +// cb - A pointer to a +// width - The width of the buffer +// height - The height of the buffer +// bitsper - The number of bits read from the buffer per pixel unit +// flags - A bitfield of indicating the exposed +// capabilities of this buffer +// +// Note that bitsper might not be a multiple of eight. +// +typedef void udi_gfx_buffer_info_ack_op_t (udi_gfx_buffer_info_cb_t *cb, udi_ubit32_t width, udi_ubit32_t height, udi_ubit32_t bitsper, udi_ubit32_t flags); +udi_gfx_buffer_info_ack_op_t udi_gfx_buffer_info_ack; + +// Structure: udi_gfx_buffer_cb_t +// Contains a description of a buffer, or area thereof +typedef struct { + // Variable: gcb + // The main control block + udi_cb_t gcb; + udi_ubit32_t buffer_index; + udi_ubit32_t x; + udi_ubit32_t y; + udi_ubit32_t width; + udi_ubit32_t height; + udi_buf_t * buffer; +} udi_gfx_buffer_cb_t; + +// Function: udi_gfx_buffer_write_req_op_t +// function pointer prototype for writing raw hardware buffers +// +// in: +// cb - A pointer to a +// +typedef void udi_gfx_buffer_write_req_op_t (udi_gfx_buffer_cb_t *cb); +udi_gfx_buffer_write_req_op_t udi_gfx_buffer_write_req; + +// Function: udi_gfx_buffer_write_req_op_t +// function pointer prototype for reading raw hardware buffers +// +// in: +// cb - A pointer to a +// +typedef void udi_gfx_buffer_read_req_op_t (udi_gfx_buffer_cb_t *cb); +udi_gfx_buffer_read_req_op_t udi_gfx_buffer_read_req; + +// Function: udi_gfx_buffer_write_ack_op_t +// function pointer prototype for writing raw hardware buffers +// +// in: +// cb - A pointer to a +// +typedef void udi_gfx_buffer_write_ack_op_t (udi_gfx_buffer_cb_t *cb); +udi_gfx_buffer_write_ack_op_t udi_gfx_buffer_write_ack; + +// Function: udi_gfx_buffer_write_ack_op_t +// function pointer prototype for reading raw hardware buffers +// +// in: +// cb - A pointer to a +// +typedef void udi_gfx_buffer_read_ack_op_t (udi_gfx_buffer_cb_t *cb); +udi_gfx_buffer_read_ack_op_t udi_gfx_buffer_read_ack; + +// Function: udi_gfx_buffer_write_nak_op_t +// error handling for buffer writes +// +// in: +// cb - A pointer to a +// +typedef void udi_gfx_buffer_write_nak_op_t (udi_gfx_buffer_cb_t *cb, udi_ubit32_t status); +udi_gfx_buffer_write_nak_op_t udi_gfx_buffer_write_nak; + +// Function: udi_gfx_buffer_write_nak_op_t +// error handling for buffer reads +// +// in: +// cb - A pointer to a +// +typedef void udi_gfx_buffer_read_nak_op_t (udi_gfx_buffer_cb_t *cb, udi_ubit32_t status); +udi_gfx_buffer_read_nak_op_t udi_gfx_buffer_read_nak; + /* Structure: udi_gfx_provider_ops_t - The graphics metalanguage e*ntry points (provider side) + * + * The graphics metalanguage entry points (provider side) */ typedef const struct { udi_channel_event_ind_op_t *channel_event_ind_op; @@ -529,10 +803,16 @@ typedef const struct { udi_gfx_get_engine_req_op_t *gfx_get_engine_req_op; udi_gfx_range_connector_req_op_t *gfx_range_connector_req_op; udi_gfx_range_engine_req_op_t *gfx_range_engine_req_op; - udi_gfx_command_req_op_t *gfx_command_op; + udi_gfx_get_engine_operator_req_op_t*gfx_get_engine_operator_req_op_t; + udi_gfx_connector_command_req_op_t *gfx_connector_command_op; + udi_gfx_engine_command_req_op_t *gfx_engine_command_op; + udi_gfx_buffer_info_req_op_t *gfx_buffer_info_ack; + udi_gfx_buffer_read_req_op_t *gfx_buffer_read_ack; + udi_gfx_buffer_write_req_op_t *gfx_buffer_write_ack; } udi_gfx_provider_ops_t; - + /* Structure: udi_gfx_client_ops_t + * * The graphics metalanguage entry points (client side) */ typedef const struct { @@ -541,14 +821,23 @@ typedef const struct { udi_gfx_unbind_ack_op_t *udi_gfx_unbind_ack; udi_gfx_set_connector_ack_op_t *udi_gfx_set_connector_ack; udi_gfx_set_engine_ack_op_t *udi_gfx_set_engine_ack; + udi_gfx_set_connector_nak_op_t *udi_gfx_set_connector_nak; + udi_gfx_set_engine_nak_op_t *udi_gfx_set_engine_nak; udi_gfx_get_connector_ack_op_t *udi_gfx_get_connector_ack; udi_gfx_get_engine_ack_op_t *udi_gfx_get_engine_ack; udi_gfx_range_connector_ack_op_t *udi_gfx_range_connector_ack; udi_gfx_range_engine_ack_op_t *udi_gfx_range_engine_ack; - udi_gfx_command_ack_op_t *udi_gfx_command_ack; + udi_gfx_get_engine_operator_req_op_t*udi_gfx_get_engine_operator_ack; + udi_gfx_connector_command_ack_op_t *udi_gfx_connector_command_ack; + udi_gfx_engine_command_ack_op_t *udi_gfx_engine_command_ack; + udi_gfx_buffer_info_ack_op_t *gfx_buffer_info_ack; + udi_gfx_buffer_read_ack_op_t *gfx_buffer_read_ack; + udi_gfx_buffer_write_ack_op_t *gfx_buffer_write_ack; + udi_gfx_buffer_read_nak_op_t *gfx_buffer_read_nak; + udi_gfx_buffer_write_nak_op_t *gfx_buffer_write_nak; } udi_gfx_client_ops_t; - - + + // temporary #ifndef UDI_ANNOY_ME void EngineReturnSimpleRange (int source, int index, int prop, int first, int last, int modulus); @@ -558,6 +847,5 @@ void ConnectorReturnConstantRange (int source, int index, int prop, int value); void EngineReturnBooleanRange (int source, int index, int prop, int value1, int value2); void ConnectorReturnBooleanRange (int source, int index, int prop, int value1, int value2); #endif - -#endif +#endif -- 2.20.1