aboutsummaryrefslogtreecommitdiffstats
path: root/drv_MatrixOrbital.c
diff options
context:
space:
mode:
authorreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>2004-05-31 16:39:06 +0000
committerreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>2004-05-31 16:39:06 +0000
commit4e1eaa7205d8b7fbc64dc685d864b385a25602be (patch)
treec8548e4f6d775b1d7d3d7764fdd87156de116eff /drv_MatrixOrbital.c
parent61bd7f7bf2cef22b8d867ad7b168e4422ffd94f6 (diff)
downloadlcd4linux-4e1eaa7205d8b7fbc64dc685d864b385a25602be.tar.gz
[lcd4linux @ 2004-05-31 16:39:05 by reinelt]
added NULL display driver (for debugging/profiling purposes) added backlight/contrast initialisation for matrixOrbital added Backlight initialisation for Cwlinux git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@452 3ae390bd-cb1e-0410-b409-cd5a39f66f1f
Diffstat (limited to 'drv_MatrixOrbital.c')
-rw-r--r--drv_MatrixOrbital.c325
1 files changed, 219 insertions, 106 deletions
diff --git a/drv_MatrixOrbital.c b/drv_MatrixOrbital.c
index 5a65c54..ec1f949 100644
--- a/drv_MatrixOrbital.c
+++ b/drv_MatrixOrbital.c
@@ -1,4 +1,4 @@
-/* $Id: drv_MatrixOrbital.c,v 1.25 2004/05/31 05:38:02 reinelt Exp $
+/* $Id: drv_MatrixOrbital.c,v 1.26 2004/05/31 16:39:06 reinelt Exp $
*
* new style driver for Matrix Orbital serial display modules
*
@@ -23,6 +23,12 @@
*
*
* $Log: drv_MatrixOrbital.c,v $
+ * Revision 1.26 2004/05/31 16:39:06 reinelt
+ *
+ * added NULL display driver (for debugging/profiling purposes)
+ * added backlight/contrast initialisation for matrixOrbital
+ * added Backlight initialisation for Cwlinux
+ *
* Revision 1.25 2004/05/31 05:38:02 reinelt
*
* fixed possible bugs with user-defined chars (clear high bits)
@@ -235,6 +241,147 @@ static void drv_MO_defchar (int ascii, unsigned char *matrix)
}
+static int drv_MO_contrast (int contrast)
+{
+ static unsigned char Contrast=0;
+ char buffer[4];
+
+ // -1 is used to query the current contrast
+ if (contrast == -1) return Contrast;
+
+ if (contrast < 0 ) contrast = 0;
+ if (contrast > 255) contrast = 255;
+ Contrast = contrast;
+
+ snprintf (buffer, 4, "\376P%c", Contrast);
+ drv_generic_serial_write (buffer, 3);
+
+ return Contrast;
+}
+
+
+static int drv_MO_backlight (int backlight)
+{
+ static unsigned char Backlight=0;
+ char buffer[4];
+
+ // -1 is used to query the current backlight
+ if (backlight == -1) return Backlight;
+
+ if (backlight < 0 ) backlight = 0;
+ if (backlight > 255) backlight = 255;
+ Backlight = backlight;
+
+ if (backlight<0) {
+ // backlight off
+ snprintf (buffer, 3, "\376F");
+ drv_generic_serial_write (buffer, 2);
+ } else {
+ // backlight on for n minutes
+ snprintf (buffer, 4, "\376B%c", (int)backlight);
+ drv_generic_serial_write (buffer, 3);
+ }
+
+ return Backlight;
+}
+
+
+static int drv_MO_gpo (int num, int val)
+{
+ static int GPO[6] = { -1, -1, -1, -1, -1, -1 };
+ char cmd[3]="\376";
+
+ if (num < 1) num = 1;
+ if (num > 6) num = 6;
+
+ // -1 is used to query the current PWM
+ if (val == -1) return GPO[num-1];
+
+ if (val < 0) val = 0;
+ if (val > 1) val = 1;
+ GPO[num-1] = val;
+
+ switch (Protocol) {
+ case 1:
+ if (num == 1) {
+ if (val > 0) {
+ drv_generic_serial_write ("\376W", 2); // GPO on
+ } else {
+ drv_generic_serial_write ("\376V", 2); // GPO off
+ }
+ } else {
+ GPO[num-1] = -1;
+ }
+ break;
+
+ case 2:
+ if (val > 0) {
+ cmd[1] = 'W'; // GPO on
+ } else {
+ cmd[1] = 'V'; // GPO off
+ }
+ cmd[2] = (char)num;
+ drv_generic_serial_write (cmd, 3);
+ break;
+ }
+
+ return GPO[num-1];
+}
+
+
+static int drv_MO_pwm (int num, int val)
+{
+ static int PWM[6] = { -1, -1, -1, -1, -1, -1 };
+ char cmd[4]="\376\300";
+
+ if (num < 1) num = 1;
+ if (num > 6) num = 6;
+
+ // -1 is used to query the current PWM
+ if (val == -1) return PWM[num-1];
+
+ if (val < 0) val = 0;
+ if (val > 255) val = 255;
+ PWM[num-1] = val;
+
+ cmd[2] = (char)num;
+ cmd[3] = (char)val;
+ drv_generic_serial_write (cmd, 4);
+
+ return val;
+}
+
+
+static int drv_MO_rpm (int num)
+{
+ static int RPM[6] = { -1, -1, -1, -1, -1, -1 };
+ char cmd[3] = "\376\301";
+ char buffer[7];
+
+ if (num < 1) num = 1;
+ if (num > 6) num = 6;
+
+ cmd[2] = (char)num;
+ drv_generic_serial_write (cmd, 3);
+
+ usleep(100000);
+ drv_generic_serial_read (buffer, 7);
+
+ debug ("rpm: buffer[0]=0x%01x", buffer[0]);
+ debug ("rpm: buffer[1]=0x%01x", buffer[1]);
+ debug ("rpm: buffer[2]=0x%01x", buffer[2]);
+ debug ("rpm: buffer[3]=0x%01x", buffer[3]);
+ debug ("rpm: buffer[4]=0x%01x", buffer[4]);
+ debug ("rpm: buffer[5]=0x%01x", buffer[5]);
+ debug ("rpm: buffer[6]=0x%01x", buffer[6]);
+
+ // Fixme:
+ RPM[num-1] = 42;
+
+ return RPM[num-1];
+}
+
+
static int drv_MO_start (char *section)
{
int i;
@@ -315,6 +462,16 @@ static int drv_MO_start (char *section)
drv_generic_serial_write ("\376D", 2); // line wrapping off
drv_generic_serial_write ("\376R", 2); // auto scroll off
+ // set contrast
+ if (cfg_number(section, "Contrast", 0, 0, 255, &i)>0) {
+ drv_MO_contrast(i);
+ }
+
+ // set backlight
+ if (cfg_number(section, "Backlight", 0, 0, 255, &i)>0) {
+ drv_MO_backlight(i);
+ }
+
return 0;
}
@@ -324,136 +481,92 @@ static int drv_MO_start (char *section)
// ****************************************
-static void plugin_contrast (RESULT *result, RESULT *arg1)
+static void plugin_contrast (RESULT *result, int argc, RESULT *argv[])
{
- char buffer[4];
double contrast;
- contrast=R2N(arg1);
- if (contrast<0 ) contrast=0;
- if (contrast>255) contrast=255;
- snprintf (buffer, 4, "\376P%c", (int)contrast);
- drv_generic_serial_write (buffer, 3);
-
- SetResult(&result, R_NUMBER, &contrast);
+ switch (argc) {
+ case 0:
+ contrast = drv_MO_contrast(-1);
+ SetResult(&result, R_NUMBER, &contrast);
+ break;
+ case 1:
+ contrast = drv_MO_contrast(R2N(argv[0]));
+ SetResult(&result, R_NUMBER, &contrast);
+ break;
+ default:
+ error ("%s::contrast(): wrong number of parameters", Name);
+ SetResult(&result, R_STRING, "");
+ }
}
-static void plugin_backlight (RESULT *result, RESULT *arg1)
+static void plugin_backlight (RESULT *result, int argc, RESULT *argv[])
{
- char buffer[4];
double backlight;
-
- backlight=R2N(arg1);
- if (backlight<-1 ) backlight=-1;
- if (backlight>255) backlight=255;
- if (backlight<0) {
- // backlight off
- snprintf (buffer, 3, "\376F");
- drv_generic_serial_write (buffer, 2);
- } else {
- // backlight on for n minutes
- snprintf (buffer, 4, "\376B%c", (int)backlight);
- drv_generic_serial_write (buffer, 3);
+
+ switch (argc) {
+ case 0:
+ backlight = drv_MO_backlight(-1);
+ SetResult(&result, R_NUMBER, &backlight);
+ break;
+ case 1:
+ backlight = drv_MO_backlight(R2N(argv[0]));
+ SetResult(&result, R_NUMBER, &backlight);
+ break;
+ default:
+ error ("%s::backlight(): wrong number of parameters");
+ SetResult(&result, R_STRING, "");
}
- SetResult(&result, R_NUMBER, &backlight);
}
-static void plugin_gpo (RESULT *result, RESULT *arg1, RESULT *arg2)
+static void plugin_gpo (RESULT *result, int argc, RESULT *argv[])
{
- int num;
- double val;
- char cmd[3]="\376";
-
- num=R2N(arg1);
- val=R2N(arg2);
+ double gpo;
- if (num<1) num=1;
- if (num>6) num=6;
-
- if (val>=1.0) {
- val=1.0;
- } else {
- val=0.0;
- }
-
- switch (Protocol) {
+ switch (argc) {
case 1:
- if (num==0) {
- if (val>=1.0) {
- drv_generic_serial_write ("\376W", 2); // GPO on
- } else {
- drv_generic_serial_write ("\376V", 2); // GPO off
- }
- } else {
- error("Fixme");
- val=-1.0;
- }
+ gpo = drv_MO_gpo(R2N(argv[0]), -1);
+ SetResult(&result, R_NUMBER, &gpo);
break;
-
case 2:
- if (val>=1.0) {
- cmd[1]='W'; // GPO on
- } else {
- cmd[1]='V'; // GPO off
- }
- cmd[2]=(char)num;
- drv_generic_serial_write (cmd, 3);
+ gpo = drv_MO_gpo(R2N(argv[0]), R2N(argv[1]));
+ SetResult(&result, R_NUMBER, &gpo);
break;
+ default:
+ error ("%s:gpo(): wrong number of parameters");
+ SetResult(&result, R_STRING, "");
}
-
- SetResult(&result, R_NUMBER, &val);
}
-static void plugin_pwm (RESULT *result, RESULT *arg1, RESULT *arg2)
+static void plugin_pwm (RESULT *result, int argc, RESULT *argv[])
{
- int num;
- double val;
- char cmd[4]="\376\300";
+ double pwm;
- num=R2N(arg1);
- if (num<1) num=1;
- if (num>6) num=6;
- cmd[2]=(char)num;
-
- val=R2N(arg2);
- if (val< 0.0) val= 0.0;
- if (val>255.0) val=255.0;
- cmd[3]=(char)val;
-
- drv_generic_serial_write (cmd, 4);
-
- SetResult(&result, R_NUMBER, &val);
+ switch (argc) {
+ case 1:
+ pwm = drv_MO_pwm(R2N(argv[0]), -1);
+ SetResult(&result, R_NUMBER, &pwm);
+ break;
+ case 2:
+ pwm = drv_MO_pwm(R2N(argv[0]), R2N(argv[1]));
+ SetResult(&result, R_NUMBER, &pwm);
+ break;
+ default:
+ error ("%s:pwm(): wrong number of parameters");
+ SetResult(&result, R_STRING, "");
+ }
}
static void plugin_rpm (RESULT *result, RESULT *arg1)
{
- int num;
- double val;
- char cmd[3]="\376\301";
- char buffer[7];
-
- num=R2N(arg1);
- if (num<1) num=1;
- if (num>6) num=6;
- cmd[2]=(char)num;
-
- drv_generic_serial_write (cmd, 3);
- usleep(100000);
- drv_generic_serial_read (buffer, 7);
-
- debug ("rpm: buffer[0]=0x%01x", buffer[0]);
- debug ("rpm: buffer[1]=0x%01x", buffer[1]);
- debug ("rpm: buffer[2]=0x%01x", buffer[2]);
- debug ("rpm: buffer[3]=0x%01x", buffer[3]);
- debug ("rpm: buffer[4]=0x%01x", buffer[4]);
- debug ("rpm: buffer[5]=0x%01x", buffer[5]);
- debug ("rpm: buffer[6]=0x%01x", buffer[6]);
+ double rpm;
- SetResult(&result, R_NUMBER, &val);
+ rpm = drv_MO_rpm(R2N(arg1));
+ SetResult(&result, R_NUMBER, &rpm);
}
@@ -537,11 +650,11 @@ int drv_MO_init (char *section)
widget_register(&wc);
// register plugins
- AddFunction ("LCD::contrast", 1, plugin_contrast);
- AddFunction ("LCD::backlight", 1, plugin_backlight);
- AddFunction ("LCD::gpo", 2, plugin_gpo);
- AddFunction ("LCD::pwm", 2, plugin_pwm);
- AddFunction ("LCD::rpm", 1, plugin_rpm);
+ AddFunction ("LCD::contrast", -1, plugin_contrast);
+ AddFunction ("LCD::backlight", -1, plugin_backlight);
+ AddFunction ("LCD::gpo", -1, plugin_gpo);
+ AddFunction ("LCD::pwm", -1, plugin_pwm);
+ AddFunction ("LCD::rpm", 1, plugin_rpm);
return 0;
}