# # $Id: README.MatrixOrbital,v 1.2 2000/03/22 07:33:50 reinelt Exp $ # This is the README file for the MatrixOrbital display driver for lcd4linux This driver supports the serial interface alphanumeric display modules by Matrix Orbital Corporation (http://www.matrixorbital.com). I could only test it with the LCD2041 model, but I think every other (LCD) model should work. These displays are supported: LCD0821: 2 lines by 8 characters LCD1621: 2 lines by 16 characters LCD2021: 2 lines by 20 characters LCD2041: 4 lines by 20 characters (tested) LCD4021: 2 lines by 40 characters I could not test the vacuum fluorescent display models, but I think they should work, too. There are no entries for this models in the driver table (at the bottom of MatrixOrbital.c), but they could be easily added. The displays come with an RS-232 and an I2C interface. The driver supports the RS-232 interface only (because I have no idea how to find the I2C bus on my motherboard). Power can be applied either via an external DC power supply, a modified floppy power connector (be aware that you can destroy your display if you get the pins wrong!) or via the RI (ring) signal of the RS-232 port. I choosed the latter, and modified a serial card so that it supplies +5V from the ISA bus to this pin (again, be aware that this is dangerous if you connect any other serial device to this modified port). The driver supports vertical, horizontal and split bars (two independent bars in one line), all bar types can be used simultanously. As the displays only have 8 user-defined characters, the needed characters to display all the bars must be reduced to 8. This is done by replacing characters with similar ones. To reduce flicker, a character which is displayed at the moment, will not be redefined, even if it's not used in this run. Only if the character compaction fails, this characters will be redefined, too. The displays have a GPO (general purpose output), where you can connect a LED or something. The driver supports controlling this GPO, but this function is unused by now. Configuration: The driver needs/supports the following entries in lcd4linux.conf: Display: a valid Matrix Orbital Display name (e.g. "LCD2041") Port: serial device the display is attached to (e.g. /dev/ttyS2) Speed: the baud rate from the display (configured via jumpers) must match this value. Possible values are 1200, 2400, 9600 and 19200 Contrast: sets the LCD display contrast to a level between 0 (light) and 256 (dark). Default value: 160 5651'>plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/* $Id: debug.c,v 1.7 2004/02/10 07:42:35 reinelt Exp $
 *
 * debug() and error() functions
 *
 * Copyright 1999, 2000 Michael Reinelt <reinelt@eunet.at>
 *
 * This file is part of LCD4Linux.
 *
 * LCD4Linux is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2, or (at your option)
 * any later version.
 *
 * LCD4Linux is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 *
 * $Log: debug.c,v $
 * Revision 1.7  2004/02/10 07:42:35  reinelt
 * cut off all old-style files which are no longer used with NextGeneration
 *
 * Revision 1.6  2003/10/05 17:58:50  reinelt
 * libtool junk; copyright messages cleaned up
 *
 * Revision 1.5  2003/08/24 05:17:58  reinelt
 * liblcd4linux patch from Patrick Schemitz
 *
 * Revision 1.4  2003/08/08 06:58:06  reinelt
 * improved forking
 *
 * Revision 1.3  2001/03/12 12:39:36  reinelt
 *
 * reworked autoconf a lot: drivers may be excluded, #define's went to config.h
 *
 * Revision 1.2  2001/03/09 13:08:11  ltoetsch
 * Added Text driver
 *
 * Revision 1.1  2000/11/28 20:20:38  reinelt
 *
 * added debug.c
 * things like that should not hapen. debug.c exists for a few months now, but was never added to CVS. Shit happens....
 *
 */

/* 
 * exported functions:
 *
 * message (level, format, ...)
 *   passes the arguments to vsprintf() and
 *   writes the resulting string either to stdout
 *   or syslog.
 *   this function should not be called directly,
 *   but the macros info(), debug() and error()
 *
 */

#include "config.h"

#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
#include <syslog.h>

#include "debug.h"

int running_foreground = 0;
int running_background = 0;

int verbose_level = 0;

void message (int level, const char *format, ...)
{
  va_list ap;
  char buffer[256];
  static int log_open=0;

  if (level>verbose_level) return;

  va_start(ap, format);
  (void) vsnprintf(buffer, sizeof(buffer), format, ap);
  va_end(ap);
  
  if (!running_background) {
    // Fixme
#if 0
#ifdef WITH_TEXT
    extern int curs_err(char *);
    if (!curs_err(buffer))
#endif
#endif      
      fprintf (level?stdout:stderr, "%s\n", buffer);
  }
  
  if (running_foreground)
    return;
  
  if (!log_open) {
    openlog ("LCD4Linux", LOG_PID, LOG_USER);
    log_open=1;
  }
  
  switch (level) {
  case 0:
    syslog (LOG_ERR, "%s", buffer);
    break;
  case 1:
    syslog (LOG_INFO, "%s", buffer);
    break;
  default:
    syslog (LOG_DEBUG, "%s", buffer);
  }
}