lcd4linux_LDFLAGS = $(X_LIBS)
lcd4linux_LDADD = liblcd4linux.la @DRVLIBS@
-lcd4linux_SOURCES = lcd4linux.c pid.c pid.h parser.c parser.h processor.c processor.h evaluator.c evaluator.h client.c client.h system.c system.h isdn.c isdn.h mail.c mail.h seti.c seti.h battery.c battery.h dvb.c dvb.h filter.c filter.h widget.c widget.h exec.c exec.h mail2.c socket.c socket.h
+lcd4linux_SOURCES = lcd4linux.c pid.c pid.h parser.c parser.h processor.c processor.h evaluator.c evaluator.h client.c client.h system.c system.h isdn.c isdn.h mail.c mail.h seti.c seti.h battery.c battery.h dvb.c dvb.h filter.c filter.h widget.c widget.h exec.c exec.h mail2.c socket.c socket.h imon.c imon.h
liblcd4linux_la_DEPENDENCIES = @DRIVERS@
processor.$(OBJEXT) evaluator.$(OBJEXT) client.$(OBJEXT) \
system.$(OBJEXT) isdn.$(OBJEXT) mail.$(OBJEXT) seti.$(OBJEXT) \
battery.$(OBJEXT) dvb.$(OBJEXT) filter.$(OBJEXT) widget.$(OBJEXT) \
-exec.$(OBJEXT) mail2.$(OBJEXT) socket.$(OBJEXT)
+exec.$(OBJEXT) mail2.$(OBJEXT) socket.$(OBJEXT) imon.$(OBJEXT)
lcd4linux_DEPENDENCIES = liblcd4linux.la
CFLAGS = @CFLAGS@
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
.deps/Skeleton.P .deps/T6963.P .deps/Text.P .deps/USBLCD.P \
.deps/XWindow.P .deps/bar.P .deps/battery.P .deps/cfg.P .deps/client.P \
.deps/debug.P .deps/display.P .deps/dvb.P .deps/evaluator.P \
-.deps/exec.P .deps/filter.P .deps/fontmap.P .deps/icon.P .deps/isdn.P \
-.deps/lcd4linux.P .deps/lock.P .deps/mail.P .deps/mail2.P \
+.deps/exec.P .deps/filter.P .deps/fontmap.P .deps/icon.P .deps/imon.P \
+.deps/isdn.P .deps/lcd4linux.P .deps/lock.P .deps/mail.P .deps/mail2.P \
.deps/parport.P .deps/parser.P .deps/pid.P .deps/pixmap.P \
.deps/processor.P .deps/seti.P .deps/socket.P .deps/system.P \
.deps/udelay.P .deps/widget.P
-/* $Id: MatrixOrbital.c,v 1.46 2003/10/12 04:46:19 reinelt Exp $
+/* $Id: MatrixOrbital.c,v 1.47 2003/10/22 04:19:16 reinelt Exp $
*
* driver for Matrix Orbital serial display modules
*
*
*
* $Log: MatrixOrbital.c,v $
+ * Revision 1.47 2003/10/22 04:19:16 reinelt
+ * Makefile.in for imon.c/.h, some MatrixOrbital clients
+ *
* Revision 1.46 2003/10/12 04:46:19 reinelt
*
*
static int MO_read (char *string, int len)
{
- int ret;
-
+ int run, ret;
+
if (Device==-1) return -1;
- ret=read (Device, string, len);
- if (ret<0 && errno==EAGAIN) {
- debug ("read(): EAGAIN");
- usleep(10000);
+ for (run=0; run<10; run++) {
ret=read (Device, string, len);
+ if (ret>=0 || errno!=EAGAIN) break;
+ debug ("read(): EAGAIN");
+ usleep(1000);
}
if (ret<0) {
static void MO_write (char *string, int len)
{
+ int run, ret;
+
if (Device==-1) return;
- if (write (Device, string, len)==-1) {
- if (errno==EAGAIN) {
- usleep(1000);
- if (write (Device, string, len)>=0) return;
- }
+ for (run=0; run<10; run++) {
+ ret=write (Device, string, len);
+ if (ret>=0 || errno!=EAGAIN) break;
+ debug ("write(): EAGAIN");
+ usleep(1000);
+ }
+
+ if (ret<0) {
error ("MatrixOrbital: write(%s) failed: %s", Port, strerror(errno));
}
+
+ // Fixme
+ if (ret!=len) {
+ error ("MatrixOrbital: partial write: len=%d ret=%d", len, ret);
+ }
+
+ return;
}
num=R2N(arg1);
val=R2N(arg2);
- if (num<0.0) num=0.0;
- if (val<0.0) val=0.0;
+ if (num<1) num=1;
+ if (num>6) num=6;
+
+ if (val>=1.0) {
+ val=1.0;
+ } else {
+ val=0.0;
+ }
switch (protocol) {
case 1:
if (num==0) {
if (val>=1.0) {
- val=1.0;
MO_write ("\376W", 2); // GPO on
} else {
- val=0.0;
MO_write ("\376V", 2); // GPO off
}
} else {
case 2:
if (val>=1.0) {
- val=1.0;
cmd[1]='W'; // GPO on
} else {
- val=0.0;
cmd[1]='V'; // GPO off
}
cmd[2]=(char)num;
MO_write (cmd, 3);
break;
}
+
+ SetResult(&result, R_NUMBER, &val);
+}
+
+
+static void client_pwm (RESULT *result, RESULT *arg1, RESULT *arg2)
+{
+ int num;
+ double val;
+ char cmd[4]="\376\300";
+
+ 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;
+
+ MO_write (cmd, 4);
+
+ SetResult(&result, R_NUMBER, &val);
+}
+
+
+static void client_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;
+
+ MO_write (cmd, 3);
+ usleep(100000);
+ MO_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]);
SetResult(&result, R_NUMBER, &val);
}
}
Port=strdup(port);
- if (cfg_number("Speed", 19200, 1200,19200, &i)<0) return -1;
+ if (cfg_number("Speed", 19200, 1200, 19200, &i)<0) return -1;
switch (i) {
case 1200:
Speed=B1200;
AddFunction ("contrast", 1, client_contrast);
AddFunction ("backlight", 1, client_backlight);
AddFunction ("gpo", 2, client_gpo);
+ AddFunction ("pwm", 2, client_pwm);
+ AddFunction ("rpm", 1, client_rpm);
return 0;
}
+
int MO_init1 (LCD *Self)
{
return MO_init(Self, 1);
-/* $Id: lcd4linux.c,v 1.49 2003/10/11 06:01:53 reinelt Exp $
+/* $Id: lcd4linux.c,v 1.50 2003/10/22 04:19:16 reinelt Exp $
*
* LCD4Linux
*
*
*
* $Log: lcd4linux.c,v $
+ * Revision 1.50 2003/10/22 04:19:16 reinelt
+ * Makefile.in for imon.c/.h, some MatrixOrbital clients
+ *
* Revision 1.49 2003/10/11 06:01:53 reinelt
*
* renamed expression.{c,h} to client.{c,h}
exit (1);
}
- // now install our own signal handler
- signal(SIGHUP, handler);
- signal(SIGINT, handler);
- signal(SIGQUIT, handler);
- signal(SIGTERM, handler);
-
// process_init sets global vars tick, tack
process_init();
printf("\neval> ");
for(fgets(line, 1024, stdin); !feof(stdin); fgets(line, 1024, stdin)) {
if (line[strlen(line)-1]=='\n') line[strlen(line)-1]='\0';
- Eval(line, &result);
- if (result.type==R_NUMBER) {
- printf ("%g\n", R2N(&result));
- } else if (result.type==R_STRING) {
- printf ("'%s'\n", R2S(&result));
+ if (strlen(line)>0) {
+ Eval(line, &result);
+ if (result.type==R_NUMBER) {
+ printf ("%g\n", R2N(&result));
+ } else if (result.type==R_STRING) {
+ printf ("'%s'\n", R2S(&result));
+ }
}
printf("eval> ");
}
debug ("starting main loop");
+ // now install our own signal handler
+ signal(SIGHUP, handler);
+ signal(SIGINT, handler);
+ signal(SIGQUIT, handler);
+ signal(SIGTERM, handler);
+
while (got_signal==0) {
process ();
usleep(tack*1000);