diff options
-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(); |