From 0ab50d5887cb94138239bb1991b86adcabe3c3d2 Mon Sep 17 00:00:00 2001
From: Mattias Andrée <maandree@operamail.com>
Date: Tue, 1 Apr 2014 12:37:14 +0200
Subject: enable more warnings and add .h files
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Mattias Andrée <maandree@operamail.com>
---
 src/blueshift_drm_c.c     |  45 +--------
 src/blueshift_drm_c.h     | 235 ++++++++++++++++++++++++++++++++++++++++++++++
 src/blueshift_randr_c.c   |  39 +-------
 src/blueshift_randr_c.h   |  99 +++++++++++++++++++
 src/blueshift_vidmode_c.c |   8 +-
 src/blueshift_vidmode_c.h |  67 +++++++++++++
 6 files changed, 406 insertions(+), 87 deletions(-)
 create mode 100644 src/blueshift_drm_c.h
 create mode 100644 src/blueshift_randr_c.h
 create mode 100644 src/blueshift_vidmode_c.h

(limited to 'src')

diff --git a/src/blueshift_drm_c.c b/src/blueshift_drm_c.c
index a521545..1d04f86 100644
--- a/src/blueshift_drm_c.c
+++ b/src/blueshift_drm_c.c
@@ -14,46 +14,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <fcntl.h>
-#include <alloca.h>
-
-#ifndef O_CLOEXEC
-  #define O_CLOEXEC  02000000
-#endif
-
-/* Requires video group */
-#include <xf86drm.h>
-#include <xf86drmMode.h>
-
-
-
-/**
- * Resources for an open connection to a graphics card
- */
-typedef struct _card_connection
-{
-  /**
-   * File descriptor for the connection
-   */
-  int fd;
-  
-  /**
-   * Card resources
-   */
-  drmModeRes* res;
-  
-  /**
-   * Resources for open connectors
-   */
-   drmModeConnector** connectors;
-  
-} card_connection;
+#include "blueshift_drm_c.h"
 
 
 /**
@@ -91,7 +52,7 @@ static long card_connection_reuse_size = 0;
 /**
  * Free all resources, but you need to close all connections first
  */
-void blueshift_drm_close()
+void blueshift_drm_close(void)
 {
   if (card_connections)
     free(card_connections);
@@ -113,7 +74,7 @@ void blueshift_drm_close()
  * 
  * @return  The number of cards present on the system
  */
-int blueshift_drm_card_count()
+int blueshift_drm_card_count(void)
 {
   long maxlen = strlen(DRM_DIR_NAME) + strlen(DRM_DEV_NAME) + 10;
   char* pathname = alloca(maxlen * sizeof(char));
diff --git a/src/blueshift_drm_c.h b/src/blueshift_drm_c.h
new file mode 100644
index 0000000..3a4f738
--- /dev/null
+++ b/src/blueshift_drm_c.h
@@ -0,0 +1,235 @@
+/**
+ * Copyright © 2014  Mattias Andrée (maandree@member.fsf.org)
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program 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 General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef BLUESHIFT_DRM_C_H
+#define BLUESHIFT_DRM_C_H
+
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <alloca.h>
+
+#ifndef O_CLOEXEC
+  #define O_CLOEXEC  02000000
+#endif
+
+/* Requires video group */
+#include <xf86drm.h>
+#include <xf86drmMode.h>
+
+
+
+/**
+ * Resources for an open connection to a graphics card
+ */
+typedef struct _card_connection
+{
+  /**
+   * File descriptor for the connection
+   */
+  int fd;
+  
+  /**
+   * Card resources
+   */
+  drmModeRes* res;
+  
+  /**
+   * Resources for open connectors
+   */
+   drmModeConnector** connectors;
+  
+} card_connection;
+
+
+
+/**
+ * Free all resources, but you need to close all connections first
+ */
+void blueshift_drm_close(void);
+
+/**
+ * Get the number of cards present on the system
+ * 
+ * @return  The number of cards present on the system
+ */
+int blueshift_drm_card_count(void);
+
+/**
+ * Open connection to a graphics card
+ * 
+ * @param   card_index  The index of the graphics card
+ * @return              -1 on failure, otherwise an identifier for the connection to the card
+ */
+int blueshift_drm_open_card(int card_index);
+
+/**
+ * Update the resource, required after `blueshift_drm_open_card`
+ * 
+ * @param  connection  The identifier for the connection to the card
+ */
+void blueshift_drm_update_card(int connection);
+
+/**
+ * Close connection to the graphics card
+ * 
+ * @param  connection  The identifier for the connection to the card
+ */
+void blueshift_drm_close_card(int connection);
+
+/**
+ * Return the number of CRTC:s on the opened card
+ * 
+ * @param   connection  The identifier for the connection to the card
+ * @return              The number of CRTC:s on the opened card
+ */
+int blueshift_drm_crtc_count(int connection);
+
+/**
+ * Return the number of connectors on the opened card
+ * 
+ * @param   connection  The identifier for the connection to the card
+ * @return              The number of connectors on the opened card
+ */
+int blueshift_drm_connector_count(int connection);
+
+/**
+ * Return the size of the gamma ramps on a CRTC
+ * 
+ * @param   connection  The identifier for the connection to the card
+ * @param   crtc_index  The index of the CRTC
+ * @return              The size of the gamma ramps on a CRTC
+ */
+int blueshift_drm_gamma_size(int connection, int crtc_index);
+
+/**
+ * Get the current gamma ramps of a monitor
+ * 
+ * @param   connection  The identifier for the connection to the card
+ * @param   crtc_index  The index of the CRTC to read from
+ * @param   gamma_size  The size a gamma ramp
+ * @param   red         Storage location for the red gamma ramp
+ * @param   green       Storage location for the green gamma ramp
+ * @param   blue        Storage location for the blue gamma ramp
+ * @return              Zero on success
+ */
+int blueshift_drm_get_gamma_ramps(int connection, int crtc_index, int gamma_size, uint16_t* red, uint16_t* green, uint16_t* blue);
+
+/**
+ * Set the gamma ramps of the of a monitor
+ * 
+ * @param   connection  The identifier for the connection to the card
+ * @param   crtc_index  The index of the CRTC to read from
+ * @param   gamma_size  The size a gamma ramp
+ * @param   red         The red gamma ramp
+ * @param   green       The green gamma ramp
+ * @param   blue        The blue gamma ramp
+ * @return              Zero on success
+ */
+int blueshift_drm_set_gamma_ramps(int connection, int crtc_index, int gamma_size, uint16_t* red, uint16_t* green, uint16_t* blue);
+
+/**
+ * Acquire information about a connector
+ * 
+ * @param  connection       The identifier for the connection to the card
+ * @param  connector_index  The index of the connector
+ */
+void blueshift_drm_open_connector(int connection, int connector_index);
+
+/**
+ * Release information about a connector
+ * 
+ * @param  connection       The identifier for the connection to the card
+ * @param  connector_index  The index of the connector
+ */
+void blueshift_drm_close_connector(int connection, int connector_index);
+
+/**
+ * Get the physical width the monitor connected to a connector
+ * 
+ * @param   connection       The identifier for the connection to the card
+ * @param   connector_index  The index of the connector
+ * @return                   The physical width of the monitor in millimetres, 0 if unknown or not connected
+ */
+int blueshift_drm_get_width(int connection, int connector_index);
+
+/**
+ * Get the physical height the monitor connected to a connector
+ * 
+ * @param   connection       The identifier for the connection to the card
+ * @param   connector_index  The index of the connector
+ * @return                   The physical height of the monitor in millimetres, 0 if unknown or not connected
+ */
+int blueshift_drm_get_height(int connection, int connector_index);
+
+/**
+ * Get whether a monitor is connected to a connector
+ * 
+ * @param   connection       The identifier for the connection to the card
+ * @param   connector_index  The index of the connector
+ * @return                   1 if there is a connection, 0 otherwise, -1 if unknown
+ */
+int blueshift_drm_is_connected(int connection, int connector_index);
+
+/**
+ * Get the index of the CRTC of the monitor connected to a connector
+ * 
+ * @param   connection       The identifier for the connection to the card
+ * @param   connector_index  The index of the connector
+ * @return                   The index of the CRTC
+ */
+int blueshift_drm_get_crtc(int connection, int connector_index);
+
+/**
+ * Get the index of the type of a connector
+ * 
+ * @param   connection       The identifier for the connection to the card
+ * @param   connector_index  The index of the connector
+ * @return                   The connector type by index, 0 for unknown
+ */
+int blueshift_drm_get_connector_type_index(int connection, int connector_index);
+
+/**
+ * Get the name of the type of a connector
+ * 
+ * @param   connection       The identifier for the connection to the card
+ * @param   connector_index  The index of the connector
+ * @return                   The connector type by name, "Unknown" if not identifiable,
+ *                           "Unrecognised" if Blueshift does not recognise it.
+ */
+const char* blueshift_drm_get_connector_type_name(int connection, int connector_index);
+
+/**
+ * Get the extended display identification data for the monitor connected to a connector
+ * 
+ * @param   connection       The identifier for the connection to the card
+ * @param   connector_index  The index of the connector
+ * @param   edid             Storage location for the EDID, it should be 128 bytes, 256 bytes + zero termination if hex
+ * @param   size             The size allocated to `edid` excluding your zero termination
+ * @param   hexadecimal      Whether to convert to hexadecimal representation, this is preferable
+ * @return                   The length of the found value, 0 if none, as if hex is false
+ */
+long blueshift_drm_get_edid(int connection, int connector_index, char* edid, long size, int hexadecimal);
+
+
+
+#endif
+
diff --git a/src/blueshift_randr_c.c b/src/blueshift_randr_c.c
index ef3c2a5..ddc19b9 100644
--- a/src/blueshift_randr_c.c
+++ b/src/blueshift_randr_c.c
@@ -14,44 +14,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-#include <stdlib.h>
-#include <stdio.h>
-#include <inttypes.h>
-
-#include <xcb/xcb.h>
-#include <xcb/randr.h>
-
-
-
-/**
- * The major version of RandR the program expects
- */
-#define RANDR_VERSION_MAJOR  1U
-
-/**
- * The minor version of RandR the program expects
- */
-#define RANDR_VERSION_MINOR  3U
-
-
-
-/**
- * Data structure for CRTC caches
- */
-typedef struct blueshift_randr_crtc
-{
-  /**
-   * Size of colour curves on the X-axis
-   */
-  unsigned int curve_size;
-  
-  /**
-   * CRT controller
-   */
-  xcb_randr_crtc_t* crtc;
-  
-} blueshift_randr_crtc_t;
-
+#include "blueshift_randr_c.h"
 
 
 /**
diff --git a/src/blueshift_randr_c.h b/src/blueshift_randr_c.h
new file mode 100644
index 0000000..5bae1de
--- /dev/null
+++ b/src/blueshift_randr_c.h
@@ -0,0 +1,99 @@
+/**
+ * Copyright © 2014  Mattias Andrée (maandree@member.fsf.org)
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program 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 General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef BLUESHIFT_RANDR_C_H
+#define BLUESHIFT_RANDR_C_H
+
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <inttypes.h>
+
+#include <xcb/xcb.h>
+#include <xcb/randr.h>
+
+
+
+/**
+ * The major version of RandR the program expects
+ */
+#define RANDR_VERSION_MAJOR  1U
+
+/**
+ * The minor version of RandR the program expects
+ */
+#define RANDR_VERSION_MINOR  3U
+
+
+
+/**
+ * Data structure for CRTC caches
+ */
+typedef struct blueshift_randr_crtc
+{
+  /**
+   * Size of colour curves on the X-axis
+   */
+  unsigned int curve_size;
+  
+  /**
+   * CRT controller
+   */
+  xcb_randr_crtc_t* crtc;
+  
+} blueshift_randr_crtc_t;
+
+
+
+/**
+ * Start stage of colour curve control
+ * 
+ * @param   use_screen  The screen to use
+ * @return              Zero on success
+ */
+int blueshift_randr_open(int use_screen);
+
+/**
+ * Gets the current colour curves
+ * 
+ * @param   use_crtc  The CRTC to use
+ * @return            {the size of the red curve, *the red curve,
+ *                    the size of the green curve, *the green curve,
+ *                    the size of the blue curve, *the blue curve},
+ *                    needs to be free:d. `NULL` on error.
+ */
+uint16_t* blueshift_randr_read(int use_crtc);
+
+/**
+ * Apply stage of colour curve control
+ * 
+ * @param   use_crtcs  Mask of CRTC:s to use
+ * @param   r_curve    The red colour curve
+ * @param   g_curve    The green colour curve
+ * @param   b_curve    The blue colour curve
+ * @return             Zero on success
+ */
+int blueshift_randr_apply(uint64_t use_crtcs, uint16_t* r_curve, uint16_t* g_curve, uint16_t* b_curve);
+
+/**
+ * Resource freeing stage of colour curve control
+ */
+void blueshift_randr_close(void);
+
+
+
+#endif
+
diff --git a/src/blueshift_vidmode_c.c b/src/blueshift_vidmode_c.c
index 72c8053..2f393c5 100644
--- a/src/blueshift_vidmode_c.c
+++ b/src/blueshift_vidmode_c.c
@@ -14,13 +14,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-#include <stdlib.h>
-#include <stdio.h>
-#include <inttypes.h>
-
-#include <X11/Xlib.h>
-#include <X11/extensions/xf86vmode.h>
-
+#include "blueshift_vidmode_c.h"
 
 
 /**
diff --git a/src/blueshift_vidmode_c.h b/src/blueshift_vidmode_c.h
new file mode 100644
index 0000000..c99f841
--- /dev/null
+++ b/src/blueshift_vidmode_c.h
@@ -0,0 +1,67 @@
+/**
+ * Copyright © 2014  Mattias Andrée (maandree@member.fsf.org)
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program 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 General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef BLUESHIFT_VIDMODE_C_H
+#define BLUESHIFT_VIDMODE_C_H
+
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <inttypes.h>
+
+#include <X11/Xlib.h>
+#include <X11/extensions/xf86vmode.h>
+
+
+
+/**
+ * Start stage of colour curve control
+ * 
+ * @param   use_screen  The screen to use
+ * @return              Zero on error, otherwise the size of colours curves
+ */
+int blueshift_vidmode_open(int use_screen);
+
+/**
+ * Gets the current colour curves
+ * 
+ * @param   use_crtc  The CRTC to use
+ * @param   r_gamma   Storage location for the red colour curve
+ * @param   g_gamma   Storage location for the green colour curve
+ * @param   b_gamma   Storage location for the blue colour curve
+ * @return            Zero on success
+ */
+int blueshift_vidmode_read(int use_crtc, uint16_t* r_gamma, uint16_t* g_gamma, uint16_t* b_gamma);
+
+/**
+ * Apply stage of colour curve control
+ * 
+ * @param   use_crtcs  Mask of CRTC:s to use
+ * @param   r_curve    The red colour curve
+ * @param   g_curve    The green colour curve
+ * @param   b_curve    The blue colour curve
+ * @return             Zero on success
+ */
+int blueshift_vidmode_apply(uint64_t use_crtcs, uint16_t* r_curve, uint16_t* g_curve, uint16_t* b_curve);
+
+/**
+ * Resource freeing stage of colour curve control
+ */
+void blueshift_vidmode_close(void);
+
+
+#endif
+
-- 
cgit v1.2.3-70-g09d2