summaryrefslogtreecommitdiff
path: root/src/dlo_mode.h
diff options
context:
space:
mode:
authorlibdlo <libdlo@displaylink.com>2009-05-11 15:16:33 -0700
committerlibdlo <libdlo@displaylink.com>2009-05-11 15:16:33 -0700
commit7fe939243d35de59f5277984a26c404327b96d87 (patch)
tree708b5d64fe0d7e2dae9397455a6ace5dfb6d99f8 /src/dlo_mode.h
parentbd2142f13e32922d59e440e1682165e6fbf06b12 (diff)
libdlo working with HP dock plugged in (but not working with dock iteself)
Diffstat (limited to 'src/dlo_mode.h')
-rw-r--r--src/dlo_mode.h127
1 files changed, 127 insertions, 0 deletions
diff --git a/src/dlo_mode.h b/src/dlo_mode.h
new file mode 100644
index 0000000..822cd0a
--- /dev/null
+++ b/src/dlo_mode.h
@@ -0,0 +1,127 @@
+/** @file dlo_mode.h
+ *
+ * @brief Definitions for the screen mode-related functions.
+ *
+ * These functions have been separated-out into a distinct compilation unit so that
+ * it would be possible to build a distribution of the DisplayLink library which
+ * inludes the object(s) associated with this unit as pre-built binaries (i.e.
+ * without the dlo_mode.c source file included).
+ *
+ * DisplayLink Open Source Software (libdlo)
+ * Copyright (C) 2009, DisplayLink
+ * www.displaylink.com
+ *
+ * This library is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Library General Public License as published by the Free
+ * Software Foundation; LGPL version 2, dated June 1991.
+ *
+ * This library is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef DLO_MODE_H
+#define DLO_MODE_H /**< Avoid multiple inclusion. */
+
+#include "dlo_structs.h"
+
+
+/** Size of an EDID structure, as read from a device (bytes).
+ */
+#define EDID_STRUCT_SZ (128)
+
+
+/** An undefined mode number. Used to indicate a failed look-up or an unknown mode.
+ */
+#define DLO_INVALID_MODE ((dlo_modenum_t)-1)
+
+
+/** Initialise the screen mode handling functions.
+ *
+ * @param flags Initialisation flags word (unused flags ignored).
+ *
+ * @return Return code, zero for no error.
+ */
+extern dlo_retcode_t dlo_mode_init(const dlo_init_t flags);
+
+
+/** Finalisation call for the screen mode handling functions.
+ *
+ * @param flags Finalisation flags word (unused flags ignored).
+ *
+ * @return Return code, zero for no error.
+ */
+extern dlo_retcode_t dlo_mode_final(const dlo_final_t flags);
+
+
+/** Return a block of mode information for a given mode number.
+ *
+ * @param num Mode number for best match to the supplied bitmap.
+ *
+ * @return Pointer to mode information block (in static workspace), or NULL if error.
+ */
+extern dlo_mode_t *dlo_mode_from_number(const dlo_modenum_t num);
+
+
+/** Select a display mode given a set of parameters.
+ *
+ * @param dev Pointer to @a dlo_device_t structure.
+ * @param width Width of desired display (pixels).
+ * @param height Hieght of desired display (pixels) - zero to select first available.
+ * @param refresh Desired refresh rate (Hz) - zero to select first available.
+ * @param bpp Colour depth (bits per pixel) - zero to select first available.
+ *
+ * @return Return code, zero for no error.
+ *
+ * Will find the best match it can from the VESA timings, given the parameters specified.
+ * If no matching mode can be found, an error will be returned and the device's screen
+ * mode will not be changed.
+ */
+extern dlo_modenum_t dlo_mode_lookup(dlo_device_t * const dev, const uint16_t width, const uint16_t height, const uint8_t refresh, uint8_t bpp);
+
+
+/** Perform a mode change into the specified mode number.
+ *
+ * @param dev Pointer to @a dlo_device_t structure.
+ * @param desc Pointer to mode description structure.
+ * @param mode Mode number for best match to the mode descriptor (or @a DLO_INVALID_MODE if not known).
+ *
+ * @return Return code, zero for no error.
+ *
+ * This call will change the screen mode into the specified mode number (if one was given)
+ * or look for one which matches the specified mode description. Chaging mode does not imply
+ * clearing the screen!
+ *
+ * Note: this call will cause any buffered commands to be sent to the device.
+ */
+extern dlo_retcode_t dlo_mode_change(dlo_device_t * const dev, const dlo_mode_t * const desc, dlo_modenum_t mode);
+
+
+/** Parse the EDID structure read from a display device and build a list of supported modes.
+ *
+ * @param dev Pointer to @a dlo_device_t structure.
+ * @param ptr Pointer to EDID structure.
+ * @param size Size of EDID structure (bytes).
+ *
+ * @return Return code, zero for no error.
+ *
+ * This call updates the @a dlo_device_t structure by constructing a list of supported
+ * modes. Any modes which were not supplied in the EDID structure will be refused for
+ * that device.
+ */
+extern dlo_retcode_t dlo_mode_parse_edid(dlo_device_t * const dev, const uint8_t * const ptr, const size_t size);
+
+
+/** Reset the supported modes array for a device to include all of the default VESA mode timings.
+ *
+ * @param dev Pointer to @a dlo_device_t structure.
+ */
+extern void use_default_modes(dlo_device_t * const dev);
+
+
+#endif