diff options
author | mrwastl <mrwastl@users.sourceforge.net> | 2011-11-09 19:06:00 +0100 |
---|---|---|
committer | mrwastl <mrwastl@users.sourceforge.net> | 2011-11-09 19:06:00 +0100 |
commit | f707153c4f4878d994c384a6dc89dd13fe9af73f (patch) | |
tree | db9d5d5a1036d54125cb3b14a4bb48fb603e522c /glcddrivers | |
parent | c2d7a375563b93ee7dac34b22ca78c09ca928f02 (diff) | |
download | graphlcd-base-f707153c4f4878d994c384a6dc89dd13fe9af73f.tar.gz graphlcd-base-f707153c4f4878d994c384a6dc89dd13fe9af73f.tar.bz2 |
added support for serdisp_defaultdevice() introduced in serdisp v2.00
Diffstat (limited to 'glcddrivers')
-rw-r--r-- | glcddrivers/serdisp.c | 20 | ||||
-rw-r--r-- | 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(); |