From f707153c4f4878d994c384a6dc89dd13fe9af73f Mon Sep 17 00:00:00 2001 From: mrwastl Date: Wed, 9 Nov 2011 19:06:00 +0100 Subject: added support for serdisp_defaultdevice() introduced in serdisp v2.00 --- glcddrivers/serdisp.c | 20 +++++++++++++------- glcddrivers/serdisp.h | 2 ++ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/glcddrivers/serdisp.c b/glcddrivers/serdisp.c index f6863c7..8c29ede 100644 --- a/glcddrivers/serdisp.c +++ b/glcddrivers/serdisp.c @@ -208,6 +208,8 @@ int cDriverSerDisp::Init(void) fp_SDGPI_isenabled = (int (*)(void*, uint8_t)) dlsym(sdhnd, "SDGPI_isenabled"); fp_SDGPI_enable = (int (*)(void*, uint8_t, int)) dlsym(sdhnd, "SDGPI_enable"); fp_SDEVLP_add_listener = (int (*)(void*, uint8_t, fp_eventlistener_t)) dlsym(sdhnd, "SDEVLP_add_listener"); + fp_serdisp_defaultdevice = (const char* (*)(const char*)) dlsym(sdhnd, "serdisp_defaultdevice"); + // done loading all required symbols @@ -246,14 +248,9 @@ int cDriverSerDisp::Init(void) } - if (config->device == "") + if (config->device == "" && config->port > 0) /* port will only be used if device is not set */ { // use DirectIO - - // neither device nor port is set - if (config->port == 0) - return -1; - char temp[10]; snprintf(temp, 8, "0x%x", config->port); @@ -269,7 +266,16 @@ int cDriverSerDisp::Init(void) } else { - sdcd = fp_SDCONN_open(config->device.c_str()); + if (config->device == "") { + if (fp_serdisp_defaultdevice) { // supported only in serdisplib >= v2.00 + sdcd = fp_SDCONN_open(fp_serdisp_defaultdevice(controller.c_str())); + } else { + // neither device nor port is set and getting default device expression is not supported -> exit + return -1; + } + } else { + sdcd = fp_SDCONN_open(config->device.c_str()); + } if (sdcd == 0) { syslog(LOG_ERR, "%s: error: unable to open device %s for display %s. (cDriver::Init)\n", diff --git a/glcddrivers/serdisp.h b/glcddrivers/serdisp.h index e8cd277..db8ff60 100644 --- a/glcddrivers/serdisp.h +++ b/glcddrivers/serdisp.h @@ -99,6 +99,8 @@ private: int (*fp_SDGPI_isenabled) (void* dd, uint8_t gpid); int (*fp_SDGPI_enable) (void* dd, uint8_t gpid, int enable); int (*fp_SDEVLP_add_listener) (void* dd, uint8_t gpid, fp_eventlistener_t eventlistener ); + const char* + (*fp_serdisp_defaultdevice) (const char* dispname); int CheckSetup(); -- cgit v1.2.3