summaryrefslogtreecommitdiff
path: root/glcddrivers
diff options
context:
space:
mode:
authormrwastl <mrwastl@users.sourceforge.net>2011-11-09 19:06:00 +0100
committermrwastl <mrwastl@users.sourceforge.net>2011-11-09 19:06:00 +0100
commitf707153c4f4878d994c384a6dc89dd13fe9af73f (patch)
treedb9d5d5a1036d54125cb3b14a4bb48fb603e522c /glcddrivers
parentc2d7a375563b93ee7dac34b22ca78c09ca928f02 (diff)
downloadgraphlcd-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.c20
-rw-r--r--glcddrivers/serdisp.h2
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();