diff options
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | drminfo.c | 62 | ||||
-rw-r--r-- | drmtest.c | 32 | ||||
-rw-r--r-- | drmtools.c | 76 | ||||
-rw-r--r-- | drmtools.h | 3 |
5 files changed, 110 insertions, 67 deletions
@@ -13,5 +13,5 @@ clean: rm -f $(TARGETS) rm -f *~ -drminfo: drminfo.o -drmtest: drmtest.o +drminfo: drminfo.o drmtools.o +drmtest: drmtest.o drmtools.o @@ -12,61 +12,7 @@ #include <xf86drm.h> #include <xf86drmMode.h> -/* ------------------------------------------------------------------ */ - -static const char *conn_type[] = { - [ DRM_MODE_CONNECTOR_Unknown ] = "Unknown", - [ DRM_MODE_CONNECTOR_VGA ] = "VGA", - [ DRM_MODE_CONNECTOR_DVII ] = "DVII", - [ DRM_MODE_CONNECTOR_DVID ] = "DVID", - [ DRM_MODE_CONNECTOR_DVIA ] = "DVIA", - [ DRM_MODE_CONNECTOR_Composite ] = "Composite", - [ DRM_MODE_CONNECTOR_SVIDEO ] = "SVIDEO", - [ DRM_MODE_CONNECTOR_LVDS ] = "LVDS", - [ DRM_MODE_CONNECTOR_Component ] = "Component", - [ DRM_MODE_CONNECTOR_9PinDIN ] = "9PinDIN", - [ DRM_MODE_CONNECTOR_DisplayPort ] = "DisplayPort", - [ DRM_MODE_CONNECTOR_HDMIA ] = "HDMIA", - [ DRM_MODE_CONNECTOR_HDMIB ] = "HDMIB", - [ DRM_MODE_CONNECTOR_TV ] = "TV", - [ DRM_MODE_CONNECTOR_eDP ] = "eDP", - [ DRM_MODE_CONNECTOR_VIRTUAL ] = "VIRTUAL", - [ DRM_MODE_CONNECTOR_DSI ] = "DSI", -}; - -static const char *conn_mode[] = { - [ DRM_MODE_CONNECTED ] = "connected", - [ DRM_MODE_DISCONNECTED ] = "disconnected", - [ DRM_MODE_UNKNOWNCONNECTION ] = "unknown", -}; - -static const char *enc_type[] = { - [ DRM_MODE_ENCODER_NONE ] = "NONE", - [ DRM_MODE_ENCODER_DAC ] = "DAC", - [ DRM_MODE_ENCODER_TMDS ] = "TMDS", - [ DRM_MODE_ENCODER_LVDS ] = "LVDS", - [ DRM_MODE_ENCODER_TVDAC ] = "TVDAC", - [ DRM_MODE_ENCODER_VIRTUAL ] = "VIRTUAL", - [ DRM_MODE_ENCODER_DSI ] = "DSI", -}; - -static const char *enum2name(const char *names[], int len, int nr) -{ - if (nr >= len) - return "???"; - if (!names[nr]) - return "???"; - return names[nr]; -} - -#define connector_type_name(_i) \ - enum2name((conn_type), (sizeof(conn_type)/sizeof(conn_type[0])), (_i)) - -#define connector_mode_name(_i) \ - enum2name((conn_mode), (sizeof(conn_mode)/sizeof(conn_mode[0])), (_i)) - -#define encoder_type_name(_i) \ - enum2name((enc_type), (sizeof(enc_type)/sizeof(enc_type[0])), (_i)) +#include "drmtools.h" /* ------------------------------------------------------------------ */ @@ -99,9 +45,9 @@ static void drm_info(int devnr) fprintf(stdout, "id %d: %s-%d, %s\n", conn->connector_id, - connector_type_name(conn->connector_type), + drm_connector_type_name(conn->connector_type), conn->connector_type_id, - connector_mode_name(conn->connection)); + drm_connector_mode_name(conn->connection)); if (conn->count_encoders) { fprintf(stdout, " %d encoders\n", @@ -112,7 +58,7 @@ static void drm_info(int devnr) continue; fprintf(stdout, " id %d: %s", enc->encoder_id, - encoder_type_name(enc->encoder_type)); + drm_encoder_type_name(enc->encoder_type)); if (enc->encoder_id == conn->encoder_id) fprintf(stdout, ", active"); if (enc->crtc_id) { @@ -27,6 +27,8 @@ static struct drm_mode_create_dumb creq; static uint32_t fb_id; static uint8_t *fbmem; +/* ------------------------------------------------------------------ */ + static void drm_init_dev(int devnr, bool need_dumb, bool need_master) { drmModeRes *res; @@ -95,6 +97,8 @@ static void drm_fini_dev(void) } } +/* ------------------------------------------------------------------ */ + static void drm_init_dumb_fb(void) { struct drm_mode_map_dumb mreq; @@ -164,6 +168,10 @@ static void drm_show_dumb_fb(void) /* ------------------------------------------------------------------ */ + + +/* ------------------------------------------------------------------ */ + static void usage(FILE *fp) { fprintf(fp, @@ -179,16 +187,20 @@ static void usage(FILE *fp) int main(int argc, char **argv) { int card = 0; + bool gl = false; int c; for (;;) { - c = getopt(argc, argv, "hc:"); + c = getopt(argc, argv, "hgc:"); if (c == -1) break; switch (c) { case 'c': card = atoi(optarg); break; + case 'g': + gl = true; + break; case 'h': usage(stdout); exit(0); @@ -198,11 +210,17 @@ int main(int argc, char **argv) } } - drm_init_dev(card, true, true); - drm_init_dumb_fb(); - drm_draw_dumb_fb(); - drm_show_dumb_fb(); - sleep(3); - drm_fini_dev(); + if (gl) { + drm_init_dev(card, true, true); + sleep(3); + drm_fini_dev(); + } else { + drm_init_dev(card, true, true); + drm_init_dumb_fb(); + drm_draw_dumb_fb(); + drm_show_dumb_fb(); + sleep(3); + drm_fini_dev(); + } return 0; } diff --git a/drmtools.c b/drmtools.c new file mode 100644 index 0000000..46f321a --- /dev/null +++ b/drmtools.c @@ -0,0 +1,76 @@ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <fcntl.h> +#include <errno.h> +#include <string.h> +#include <inttypes.h> + +#include <sys/ioctl.h> + +#include <xf86drm.h> +#include <xf86drmMode.h> + +#include "drmtools.h" + +/* ------------------------------------------------------------------ */ + +static const char *conn_type[] = { + [ DRM_MODE_CONNECTOR_Unknown ] = "Unknown", + [ DRM_MODE_CONNECTOR_VGA ] = "VGA", + [ DRM_MODE_CONNECTOR_DVII ] = "DVII", + [ DRM_MODE_CONNECTOR_DVID ] = "DVID", + [ DRM_MODE_CONNECTOR_DVIA ] = "DVIA", + [ DRM_MODE_CONNECTOR_Composite ] = "Composite", + [ DRM_MODE_CONNECTOR_SVIDEO ] = "SVIDEO", + [ DRM_MODE_CONNECTOR_LVDS ] = "LVDS", + [ DRM_MODE_CONNECTOR_Component ] = "Component", + [ DRM_MODE_CONNECTOR_9PinDIN ] = "9PinDIN", + [ DRM_MODE_CONNECTOR_DisplayPort ] = "DisplayPort", + [ DRM_MODE_CONNECTOR_HDMIA ] = "HDMIA", + [ DRM_MODE_CONNECTOR_HDMIB ] = "HDMIB", + [ DRM_MODE_CONNECTOR_TV ] = "TV", + [ DRM_MODE_CONNECTOR_eDP ] = "eDP", + [ DRM_MODE_CONNECTOR_VIRTUAL ] = "VIRTUAL", + [ DRM_MODE_CONNECTOR_DSI ] = "DSI", +}; + +static const char *conn_mode[] = { + [ DRM_MODE_CONNECTED ] = "connected", + [ DRM_MODE_DISCONNECTED ] = "disconnected", + [ DRM_MODE_UNKNOWNCONNECTION ] = "unknown", +}; + +static const char *enc_type[] = { + [ DRM_MODE_ENCODER_NONE ] = "NONE", + [ DRM_MODE_ENCODER_DAC ] = "DAC", + [ DRM_MODE_ENCODER_TMDS ] = "TMDS", + [ DRM_MODE_ENCODER_LVDS ] = "LVDS", + [ DRM_MODE_ENCODER_TVDAC ] = "TVDAC", + [ DRM_MODE_ENCODER_VIRTUAL ] = "VIRTUAL", + [ DRM_MODE_ENCODER_DSI ] = "DSI", +}; + +static const char *enum2name(const char *names[], int len, int nr) +{ + if (nr >= len) + return "???"; + if (!names[nr]) + return "???"; + return names[nr]; +} + +const char *drm_connector_type_name(int nr) +{ + return enum2name(conn_type, sizeof(conn_type)/sizeof(conn_type[0]), nr); +} + +const char *drm_connector_mode_name(int nr) +{ + return enum2name(conn_mode, sizeof(conn_mode)/sizeof(conn_mode[0]), nr); +} + +const char *drm_encoder_type_name(int nr) +{ + return enum2name(enc_type, sizeof(enc_type)/sizeof(enc_type[0]), nr); +} diff --git a/drmtools.h b/drmtools.h new file mode 100644 index 0000000..910f83d --- /dev/null +++ b/drmtools.h @@ -0,0 +1,3 @@ +const char *drm_connector_type_name(int nr); +const char *drm_connector_mode_name(int nr); +const char *drm_encoder_type_name(int nr); |