From b3230cf90f01b4d9085ddb544f4b72329a2c07f8 Mon Sep 17 00:00:00 2001 From: marschap Date: Sat, 29 Jan 2005 18:49:29 +0000 Subject: [PATCH] - update drivers to use new API (get rid of those pseudo options named 'Arguments' in the config file) - replace printf / printf calls by debug / report calls in some drivers - sort and extend LCDd.conf --- LCDd.conf | 381 ++++++++++++------------ docs/lcdproc-user/configuration.docbook | 23 +- server/drivers/CFontz.c | 6 +- server/drivers/CFontz633.c | 6 +- server/drivers/CFontzPacket.c | 6 +- server/drivers/CwLnx.c | 6 +- server/drivers/IOWarrior.c | 2 +- server/drivers/README | 2 +- server/drivers/bayrad.c | 88 ++---- server/drivers/curses_drv.c | 4 +- server/drivers/glk.c | 160 ++++------ server/drivers/hd44780-ext8bit.h | 2 +- server/drivers/hd44780.c | 6 +- server/drivers/hd44780.h | 2 +- server/drivers/icp_a106.h | 2 +- server/drivers/irmanin.c | 64 ++-- server/drivers/irmanin.h | 2 +- server/drivers/joy.c | 63 ++-- server/drivers/lb216.c | 136 +++------ server/drivers/lcd_lib.c | 10 +- server/drivers/lcd_lib.h | 2 +- server/drivers/lcdm001.h | 2 +- server/drivers/lcterm.c | 27 +- server/drivers/lcterm.h | 2 +- server/drivers/ms6931.c | 26 +- server/drivers/ms6931.h | 28 +- server/drivers/mtc_s16209x.c | 174 +++-------- server/drivers/sed1330.c | 4 +- server/drivers/sed1520.c | 69 +---- server/drivers/stv5730.c | 85 ++---- server/drivers/svgalib_drv.h | 2 +- server/drivers/text.c | 16 +- server/drivers/timing.h | 1 - server/drivers/wirz-sli.c | 87 ++---- 34 files changed, 550 insertions(+), 946 deletions(-) diff --git a/LCDd.conf b/LCDd.conf index c4ac026..ac9f2af 100644 --- a/LCDd.conf +++ b/LCDd.conf @@ -21,71 +21,58 @@ # If -d is specified on the command line, the Driver= options in the # config file are ignored. # -# The drivers can read their own options from the config file, but some of -# them don't do this yet. They expect 'command-line'-format parameters that -# were previously placed on the command line. These parameters can be -# given to the driver in the following way: -# -# Arguments="place arguments here" -# -# The arguments between the quotes are passed to the driver. -# As said before these are the same arguments that the driver would have -# been passed under the old command line format of -# -# -d "" -# -# Note that the -d option still works, but not allows driverargs anymore. +# The drivers read their own options from the respective sections. + +## Server section with all kinds of settings for the LCDd server ## [server] -# Server section with all kinds of settings for the LCDd server +# Tells the server to load the given drivers. Multiple lines can be given. +# The name of the driver is exactly the same as the name of the driver +# module that is to be loaded, including the case of the letters ! +# (That is: unless a file= option is given in the driver section) Driver=curses #Driver=hd44780 #Driver=IOWarrior #Driver=MtxOrb #Driver=CFontz633 #Driver=CwLnx -# -# Tells the server to load the given drivers. Multiple lines can be given. -# The name of the driver is exactly the same as the name of the driver -# module that is to be loaded, including the case of the letters ! -# (That is: unless a file= option is given in the driver section) -Bind=127.0.0.1 # Tells the driver to bind to the given interface +Bind=127.0.0.1 -Port=13666 # Listen on this specified port; defaults to 13666. +Port=13666 -#ReportLevel=3 # Sets the reporting level; defaults to 2 (warnings and errors only). +#ReportLevel=3 -#ReportToSyslog=yes # Should we report to syslog instead of stderr ? Default: no +#ReportToSyslog=yes -WaitTime=5 # Sets the default time in seconds to displays a screen. +WaitTime=5 -User=nobody # User to run as. LCDd will drop its root priviledges, # if any, and run as this user instead. +User=nobody -#ServerScreen=no # If yes, the the serverscreen will be rotated as a usual info screen. If no, # it will be a background screen, only visible when no other screens are # active. +#ServerScreen=no -#Foreground=no # The server will stay in the foreground if set to true. +#Foreground=no -DriverPath=server/drivers/ # Where can we find the driver modules ? # IMPORTANT: Make sure to change this setting to reflect your # specific setup! Otherwise LCDd won't be able to find # the driver modules and will thus not be able to # function properly. # NOTE: Always place a slash as last character ! +DriverPath=server/drivers/ # The "...Key=" lines define what the server does with keypresses that # don't go to any client. @@ -107,8 +94,8 @@ NextScreenKey=Right +## The menu section. The menu is an internal LCDproc client. ## [menu] -# The menu section. The menu is an internal LCDproc client. # You can configure what keys the menu should use. Note that only the menukey # will be reserved exclusively, the others in shared mode. @@ -124,87 +111,83 @@ DownKey=Down #DownKey=Down -# Driver sections are below this line, in alphabetical order + +### Driver sections are below this line, in alphabetical order ### +## EMAC BayRAD driver ## [bayrad] -# EMAC BayRAD driver -Arguments="fill in here" +# Select the output device to use [default: /dev/lcd] +Device=/dev/lcd -# -d --device Select the output device to use [/dev/lcd] -# -t --type Select the LCD type (size) [20x2] -# -s --speed Set the communication speed [19200] -# -h --help Show this help information +# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200] +Speed=9600 +## CrystalFontz driver (for CF632 & CF634) ## [CFontz] -# CrystalFontz driver -# Use this driver for CF632 and CF634. -# Select the output device to use [/dev/lcd] +# Select the output device to use [default: /dev/lcd] Device=/dev/ttyS0 -# Select the LCD type (size) [20x4] +# Select the LCD size [default: 20x4] Size=20x4 -# Set the initial contrast [140] +# Set the initial contrast [default: 140; legal: 0 - 1000] Contrast=140 -# Set the initial brightness [255] +# Set the initial brightness [default: 255; legal: 0 - 255] Brightness=255 -# Set the initial off-brightness [0] +# Set the initial off-brightness [default: 0; legal: 0 - 255] # This value is used when the display is normally # switched off in case LCDd is inactive OffBrightness=0 -# Set the communication speed [9600] -# possible values: 1200, 2400, 9600 +# Set the communication speed [default: 9600; legal: 1200, 2400, 9600 or 19200] Speed=9600 -# Set the firmware version (New means >= 2.0) [no] +# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no] NewFirmware=no -# Reinitialize the LCD's BIOS [no] +# Reinitialize the LCD's BIOS [default: no; legal: yes, no] # normally you shouldn't need this Reboot=no -[CFontz633] -# CrystalFontz633 driver -# Use this driver only for CF633. -# Select the output device to use [/dev/lcd] +## CrystalFontz633 driver (for CF633 only) ## +[CFontz633] + +# Select the output device to use [default: /dev/lcd] Device=/dev/ttyS0 -# Select the LCD type (size) [20x4] +# Select the LCD type (size) [default: 20x4] Size=16x2 -# Set the initial contrast [140] +# Set the initial contrast [default: 140; legal: 0 - 1000] Contrast=140 -# Set the initial brightness [100] -# Brightness hardware value is between 0 and 100. +# Set the initial brightness [default: 100; legal: 0 - 255] Brightness=100 -# Set the initial off-brightness [0] +# Set the initial off-brightness [default: 0; legal: 0 - 255] # This value is used when the display is normally # switched off in case LCDd is inactive OffBrightness=50 -# Set the communication speed [9600] -# possible values: 19200 +# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200] Speed=19200 -# Set the firmware version (New means >= 2.0) [no] +# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no] # Currently this flag is not in use, there is no such thing as NewFirmware. ;=) -NewFirmware=no -# Reinitialize the LCD's BIOS [no] +#NewFirmware=no +# Reinitialize the LCD's BIOS [default: no; legal: yes, no] # I want to reboot the LCD to make sure we start from a known state Reboot=yes +## Curses driver ## [curses] -# Curses driver # color settings -# foreground color [blue] +# foreground color [default: blue] foreground=blue -# background color [cyan] +# background color [default: cyan] background=cyan -# backlight color [red] +# backlight color [default: red] backlight=red -# display size [20x4] +# display size [default: 20x4] size=20x4 # What position (X,Y) to start the left top corner at... @@ -212,21 +195,22 @@ size=20x4 topleftx=7 toplefty=7 -[CwLnx] -# Cwlinux driver -# Select the output device to use [/dev/lcd] + +## Cwlinux driver ## +[CwLnx] + +# Select the output device to use [default: /dev/lcd] #Device=/dev/ttyS0 Device=/dev/ttyUSB0 -# Select the LCD type (size) [20x4] +# Select the LCD size [default: 20x4] Size=20x4 -# Set the communication speed [9600] -# possible values: 9600, 19200 +# Set the communication speed [default: 19200; legal: 9600, 19200] Speed=19200 -# Reinitialize the LCD's BIOS [no] +# Reinitialize the LCD's BIOS [default: no; legal: yes, no] # normally you shouldn't need this Reboot=no @@ -242,7 +226,6 @@ Keypad=yes # You can leave those unchanged if you have a standard keypad. # You can change it if you want to report other keystrings or have a non # standard keypad. - # KeyMap_A=Up # KeyMap_B=Down # KeyMap_C=Left @@ -255,64 +238,67 @@ Keypad=yes #keypad_test_mode=yes + +## Matrix Orbital GLK driver ## [glk] -# Matrix Orbital GLK driver -Arguments="-d /dev/ttyS0 -s 9600" +# select the serial device to use [default: /dev/lcd] +Device=/dev/lcd -# -d, --device select the serial device to use [/dev/lcd] -# -c, --contrast set the initial contrast value [140] -# -s, --speed set the serial port speed [19200] -# -h, --help display this help text +# set the initial contrast value [default: 560; legal: 0 - 1000] +Contrast=560 + +# set the serial port speed [default: 19200; legal: 9600, 19200, 38400] +Speed=19200 +## Hitachi HD44780 driver ## [hd44780] -# Hitachi HD44780 driver -Port=0x378 # Port where the LPT is. Usual values are 0x278, 0x378 and 0x3BC +Port=0x378 -ConnectionType=4bit # Select what type of connection. See documentation for types. +ConnectionType=4bit -Keypad=no # If you have a keypad connected. # You may also need to configure the keypad layout further on in this file. +Keypad=no -Backlight=no # If you have a switchable backlight. +Backlight=no -Outputport=no # If you have the additional output port ("bargraph") and you want to # be able to control it with the lcdproc OUTPUT command +Outputport=no -#Lastline=true # Specifies if the last line is pixel addressable or it controls an -# underline effect. Default: true (pixel addressable) +# underline effect. [default: true (= pixel addressable); legal: yes, no] +#Lastline=true -Size=20x4 # Specifies the size of the LCD. # In case of multiple combined displays, this should be the total size. +Size=20x4 -#vspan=2,2 # For multiple combined displays: how many lines does each display have. # Vspan=2,2 means both displays have 2 lines. +#vspan=2,2 -#ExtendedMode=yes # If you have a KS0073 or an other 'almost HD44780-compatible', set this # flag to get into extended mode (4-line linear). # This flag is NOT the old obsolete Extended option. +#ExtendedMode=yes -#DelayMult=2 # If your display is slow and cannot keep up with the flow of data from # LCDd, garbage can appear on the LCDd. Set this delay factor to 2 or 4 # to increase the delays. Default: 1. +#DelayMult=2 -DelayBus=true # You can reduce the inserted delays by setting this to false. # On fast PCs it is possible your LCD does not respond correctly. # Default: true. +DelayBus=true # If you have a keypad you can assign keystrings to the keys. # See documentation for used terms and how to wire it. @@ -320,7 +306,6 @@ DelayBus=true # KeyDirect_4=Enter # For matrix keys use the X and Y coordinates of the key: # KeyMatrix_1_3=Enter - KeyMatrix_4_1=Enter KeyMatrix_4_2=Up KeyMatrix_4_3=Down @@ -328,7 +313,13 @@ KeyMatrix_4_4=Escape -# Code Mercenaries IO-Warrior drivr +## ICP A106 driver ## +[icp_a106] +Device=/dev/ttyS1 + + + +## Code Mercenaries IO-Warrior driver ## [IOWarrior] # display dimensions @@ -339,61 +330,56 @@ Size=20x4 #SerialNumber=00000674 # Specifies if the last line is pixel addressable or it controls an -# underline effect. Default: true (pixel addressable) +# underline effect. [default: true (= pixel addressable); legal: yes, no] #Lastline=true +## IrMan driver ## [IrMan] -#IrMan driver #if in trouble with IrMan, try Lirc emulator for IrMan -Arguments="fill in here" +# Select the input device to use +#Device=/dev/irman -# -d --device Select the input device to use -# -c --config Select the configuration file to use -# -h --help Show this help information +# Select the configuration file to use +#Config=/etc/irman.cfg +## Joystick driver ## [joy] -# Joystick driver -Arguments="-d /dev/js0" +# Select the input device to use [default: /dev/js0] +Device=/dev/js0 -# -d --device Select the input device to use [/dev/js0] -# -a --axes Modify the axis map -# -b --buttons Modify the button map -# -h --help Show this help information +# Modify the axis mapa [default: EFGHIJKLMNOPQRST] +#AxisMap=EFGHIJKLMNOPQRST + +# Modify the button map [default: BDACEFGHIJKLMNOP] +#ButtonMap=BDACEFGHIJKLMNOP +## LB216 driver ## [lb216] -# LB216 driver -Arguments="-d /dev/ttyS0 -s 9600" +# Select the output device to use [default: /dev/lcd] +Device=/dev/lcd -# -d --device Select the output device to use [/dev/lcd] -# -t --type Select the LCD type (size) [16x2] -# -b --brightness Set the initial brightness [255] -# -s --speed Set the communication speed [9600] -# -r --reboot Reinitialize the LCD's BIOS -# -h --help Show this help information; +# Set the initial brightness [default: 255; legal: 0 - 255] +Brightness=255 +# Set the communication speed [default: 19200; legal: 2400, 9600] +Speed=9600 - -[mtc_s16209x] -# MTC-S16209x driver - -Arguments="-d /dev/ttyS0" - -# -d --device Select the output device to use [/dev/lcd] -# -h --help Show this help information; +# Reinitialize the LCD's BIOS [default: no; legal: yes, no] +Reboot=no +## LCDM001 driver ## [lcdm001] -# LCDM001 driver Device=/dev/ttyS1 @@ -406,7 +392,6 @@ Device=/dev/ttyS1 # BackKey Back(Go to previous screen) Up/Left # ForwardKey Forward(Go to next screen) Down/Right # MainMenuKey Open main menu Exit/Cancel - PauseKey=LeftKey BackKey=UpKey ForwardKey=DownKey @@ -417,56 +402,72 @@ MainMenuKey=RightKey +## HNE LCTerm driver ## [lcterm] -# HNE LCTerm driver Device=/dev/ttyS1 size=16x2 -[icp_a106] -# ICP A106 driver +## LIRC input driver ## +[lirc] + +# Specify an alternative location of the lircrc file [default: ~/.lircrc] +#lircrc=/etc/lircrc.lcdproc + +# Must be the same as in your lircrc +#prog=lcdd + + + +## MSI MS-6931 driver for displays in 1HU servers ## +[ms6931] + +# device to use [default: /dev/ttyS1] Device=/dev/ttyS1 - - -[lirc] -# LIRC input driver - -#lircrc=/etc/lircrc.lcdproc -# Specify an alternative location of the lircrc file, which is -# normally ~/.lircrc - -#prog=lcdd -# Must be the same as in your lircrc +# display size [default: 16x2] +#Size=16x2 +## MTC-S16209x driver ## +[mtc_s16209x] + +# Select the output device to use [default: /dev/lcd] +Device=/dev/lcd + +# Set the initial brightness [default: 255; legal: 0 - 255] +Brightness=255 + +# Reinitialize the LCD's BIOS [default: no; legal: yes, no] +Reboot=no + + + +## Matrix Orbital driver ## [MtxOrb] -# Matrix Orbital driver -# Select the output device to use [/dev/lcd] +# Select the output device to use [default: /dev/lcd] device=/dev/ttyS0 -# Set the display size [20x4] +# Set the display size [default: 20x4] size=20x4 -# Switch on the backlight? [yes] -# NOTE: The driver will ignore this if the display -# is a vfd or vfd as they crash if the backlight -# is turned off +# Switch on the backlight? [default: yes] +# NOTE: The driver will ignore this if the display is a vfd or vkd +# as they crash if the backlight is turned off enablebacklight=yes -# Set the initial contrast [140] +# Set the initial contrast [default: 140] # NOTE: The driver will ignore this if the display -# is a vfd or vfd as they don't have this feature +# is a vfd or vkd as they don't have this feature contrast=800 -# Set the communication speed [19200] +# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200] speed=19200 -# Set the display type [lcd] -# Possible settings: lcd, lkd, vfd, vkd +# Set the display type [default: lcd; legal: lcd, lkd, vfd, vkd] type=lkd # The following table translate from MtxOrb Key to Logical Key. @@ -484,81 +485,77 @@ EscapeKey=F # LCDd. LCDd will output all characters it receives. # Afterwards you can modify the settings above and set # keypad_set_mode to no again. - keypad_test_mode=no +## Seiko Epson 1330 driver ## [sed1330] -# Seiko Epson 1330 driver +# Port where the LPT is. Common values are 0x278, 0x378 and 0x3BC Port=0x378 -# Port where the LPT is. Usual values are 0x278, 0x378 and 0x3BC +# Type of LCD module (legal: G321D, G121C, G242C, G191D, G2446) +# Note: G321D is the only one that is tested currently. Type=G321D -#Type=G121C -#Type=G242C -# Type of LCD module. G321D is the only one that is tested currently. +## Seiko Epson 1520 driver ## [sed1520] -# Seiko Epson 1520 driver -Arguments="-p 0x278" - -# -p n --port n Select the output device to use port n -# -h --help Show this help information +# Port where the LPT is. Usual values are 0x278, 0x378 and 0x3BC +Port=0x378 +## stv5730 driver ## [stv5730] -# stv5730 driver -Arguments="fill in here" - -# -p n --port n Select the output device to use port n -# -h --help Show this help information +# Port the device is connectoed to [default: 0x378] +Port=0x378 +## SVGAlib driver ## [svgalib] -# SVGAlib driver - # No options. # You should of course have your svgalib configured correctly. -[T6963] -# Toshiba T6963 driver - -#Port=0x378 -#Size=20x6 -#ECPlpt=on # use bidirectional mode or not - - - +## Text driver ## [text] -# Text driver - -# Set the display size [20x4] +# Set the display size [default: 20x4] size=20x4 +## Toshiba T6963 driver ## +[t6963] + +# set display size [default: 20x6] +Size=20x6 + +# port to use [default: 0x378; legal: 0x200 - 0x400] +Port=0x378 + +# Is ECP mode on? [default: yes; legal: yes, no] +#ECPlpt=yes + +# Use graphic? [default: no; legal: yes, no] +#graphic=no + + + +## Wirz SLI LCD driver ## [Wirz-sli] -# Wirz SLI LCD driver -Arguments="fill in here" +# Select the output device to use [default: /dev/lcd] +Device=/dev/lcd -# -d --device Select the output device to use [/dev/lcd] -# -s --speed Set the communication speed [19200] -# -h --help Show this help information +# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200, 38400, 57600, 115200] +Speed=19200 - -[ms6931] -# MSI MS-6931 driver for displays in 1HU servers -Device=/dev/ttyS1 -#Size=16x2 +# EOF diff --git a/docs/lcdproc-user/configuration.docbook b/docs/lcdproc-user/configuration.docbook index aba33b2..9b2bdce 100644 --- a/docs/lcdproc-user/configuration.docbook +++ b/docs/lcdproc-user/configuration.docbook @@ -62,29 +62,12 @@ doing here. -The drivers can read their own options from the config file, but most of -them don't do this yet. They expect 'command-line'-format parameters that -were previously placed on the command line. These parameters can be -given to the driver in the following way: - - - -<filename>LCDd.conf</filename>: Compatibility mode for drivers written for 0.4.1 - - -Arguments="place arguments here" - - - - - -The arguments between the quotes are passed to the driver. -As said before these are the same arguments that would have -been passed to the driver using the old command line format of +The drivers read their own options from the config file. +For this purpose they use the config sections that are named like the driver. -LCDd -d driver "driverargs" +LCDd -d driver diff --git a/server/drivers/CFontz.c b/server/drivers/CFontz.c index b0b957a..f55ed1e 100644 --- a/server/drivers/CFontz.c +++ b/server/drivers/CFontz.c @@ -123,21 +123,21 @@ CFontz_init (Driver * drvthis, char *args) if (0<=drvthis->config_get_int ( drvthis->name , "Contrast" , 0 , DEFAULT_CONTRAST) && drvthis->config_get_int ( drvthis->name , "Contrast" , 0 , DEFAULT_CONTRAST) <= 1000) { contrast = drvthis->config_get_int ( drvthis->name , "Contrast" , 0 , DEFAULT_CONTRAST); } else { - report (RPT_WARNING, "CFontz_init: Contrast must between 0 and 1000. Using default value.\n"); + report (RPT_WARNING, "CFontz_init: Contrast must be between 0 and 1000. Using default value.\n"); } /*Which backlight brightness*/ if (0<=drvthis->config_get_int ( drvthis->name , "Brightness" , 0 , DEFAULT_BRIGHTNESS) && drvthis->config_get_int ( drvthis->name , "Brightness" , 0 , DEFAULT_BRIGHTNESS) <= 255) { brightness = drvthis->config_get_int ( drvthis->name , "Brightness" , 0 , DEFAULT_BRIGHTNESS); } else { - report (RPT_WARNING, "CFontz_init: Brightness must between 0 and 255. Using default value.\n"); + report (RPT_WARNING, "CFontz_init: Brightness must be between 0 and 255. Using default value.\n"); } /*Which backlight-off "brightness"*/ if (0<=drvthis->config_get_int ( drvthis->name , "OffBrightness" , 0 , DEFAULT_OFFBRIGHTNESS) && drvthis->config_get_int ( drvthis->name , "OffBrightness" , 0 , DEFAULT_OFFBRIGHTNESS) <= 255) { offbrightness = drvthis->config_get_int ( drvthis->name , "OffBrightness" , 0 , DEFAULT_OFFBRIGHTNESS); } else { - report (RPT_WARNING, "CFontz_init: OffBrightness must between 0 and 255. Using default value.\n"); + report (RPT_WARNING, "CFontz_init: OffBrightness must be between 0 and 255. Using default value.\n"); } diff --git a/server/drivers/CFontz633.c b/server/drivers/CFontz633.c index 218236a..055b57a 100644 --- a/server/drivers/CFontz633.c +++ b/server/drivers/CFontz633.c @@ -149,21 +149,21 @@ CFontz633_init (Driver * drvthis, char *args) if (0<=drvthis->config_get_int ( drvthis->name , "Contrast" , 0 , DEFAULT_CONTRAST) && drvthis->config_get_int ( drvthis->name , "Contrast" , 0 , DEFAULT_CONTRAST) <= 1000) { contrast = drvthis->config_get_int ( drvthis->name , "Contrast" , 0 , DEFAULT_CONTRAST); } else { - report (RPT_WARNING, "CFontz633_init: Contrast must between 0 and 1000. Using default value.\n"); + report (RPT_WARNING, "CFontz633_init: Contrast must be between 0 and 1000. Using default value.\n"); } /* Which backlight brightness */ if (0<=drvthis->config_get_int ( drvthis->name , "Brightness" , 0 , DEFAULT_BRIGHTNESS) && drvthis->config_get_int ( drvthis->name , "Brightness" , 0 , DEFAULT_BRIGHTNESS) <= 100) { brightness = drvthis->config_get_int ( drvthis->name , "Brightness" , 0 , DEFAULT_BRIGHTNESS); } else { - report (RPT_WARNING, "CFontz633_init: Brightness must between 0 and 100. Using default value.\n"); + report (RPT_WARNING, "CFontz633_init: Brightness must be between 0 and 100. Using default value.\n"); } /* Which backlight-off "brightness" */ if (0<=drvthis->config_get_int ( drvthis->name , "OffBrightness" , 0 , DEFAULT_OFFBRIGHTNESS) && drvthis->config_get_int ( drvthis->name , "OffBrightness" , 0 , DEFAULT_OFFBRIGHTNESS) <= 100) { offbrightness = drvthis->config_get_int ( drvthis->name , "OffBrightness" , 0 , DEFAULT_OFFBRIGHTNESS); } else { - report (RPT_WARNING, "CFontz633_init: OffBrightness must between 0 and 100. Using default value.\n"); + report (RPT_WARNING, "CFontz633_init: OffBrightness must be between 0 and 100. Using default value.\n"); } diff --git a/server/drivers/CFontzPacket.c b/server/drivers/CFontzPacket.c index 2b64953..2b19d69 100644 --- a/server/drivers/CFontzPacket.c +++ b/server/drivers/CFontzPacket.c @@ -195,7 +195,7 @@ else if ((0>=tmp) && (tmp<=1000)) { contrast = tmp; } else { - report (RPT_WARNING, "CFontz633_init: Contrast must between 0 and 1000. Using default value.\n"); + report (RPT_WARNING, "CFontz633_init: Contrast must be between 0 and 1000. Using default value.\n"); } /* Which backlight brightness */ @@ -204,7 +204,7 @@ else if ((0>=tmp) && (tmp<=100)) { brightness = tmp; } else { - report (RPT_WARNING, "CFontz633_init: Brightness must between 0 and 100. Using default value.\n"); + report (RPT_WARNING, "CFontz633_init: Brightness must be between 0 and 100. Using default value.\n"); } /* Which backlight-off "brightness" */ @@ -213,7 +213,7 @@ else if ((0<=tmp) && (tmp<=100)) { offbrightness = tmp; } else { - report (RPT_WARNING, "CFontz633_init: OffBrightness must between 0 and 100. Using default value.\n"); + report (RPT_WARNING, "CFontz633_init: OffBrightness must be between 0 and 100. Using default value.\n"); } diff --git a/server/drivers/CwLnx.c b/server/drivers/CwLnx.c index bb1d020..a41b244 100644 --- a/server/drivers/CwLnx.c +++ b/server/drivers/CwLnx.c @@ -545,7 +545,7 @@ int CwLnx_init(Driver * drvthis, char *args) /* Which size */ strncpy(size, drvthis->config_get_string(drvthis->name, "Size", 0, DEFAULT_SIZE), sizeof(size)); size[sizeof(size) - 1] = 0; - if (sscanf(size, "%dx%d", &w, &h) != 2 + if ((sscanf(size, "%dx%d", &w, &h) != 2) || (w <= 0) || (w > LCD_MAX_WIDTH) || (h <= 0) || (h > LCD_MAX_HEIGHT)) { report(RPT_WARNING, "CwLnx: Cannot read size: %s. Using default value.\n", size); @@ -586,13 +586,13 @@ int CwLnx_init(Driver * drvthis, char *args) /* do we have a keypad? */ - if (drvthis->config_get_bool( drvthis->name , "Keypad" , 0 , 0)) { + if (drvthis->config_get_bool( drvthis->name , "Keypad", 0, 0)) { report (RPT_INFO, "CwLnx: Config file tell us we have a keypad...\n"); p->have_keypad = 1; } /* keypad test mode? */ - if (drvthis->config_get_bool( drvthis->name , "keypad_test_mode" , 0 , 0)) { + if (drvthis->config_get_bool( drvthis->name , "keypad_test_mode", 0, 0)) { report (RPT_INFO, "CwLnx: Config tell us to test the keypad mapping...\n"); p->keypad_test_mode = 1; stay_in_foreground = 1; diff --git a/server/drivers/IOWarrior.c b/server/drivers/IOWarrior.c index ea8217c..5f889d2 100644 --- a/server/drivers/IOWarrior.c +++ b/server/drivers/IOWarrior.c @@ -58,7 +58,7 @@ static int iow_lcd_wcmd(usb_dev_handle *udh, unsigned char data[8]) { return(usb_control_msg(udh, USB_DT_HID, USB_REQ_SET_REPORT, 0, 1, - data, 8, iowTimeout) == 8) ? IOW_OK : IOW_ERROR; + data, 8, iowTimeout) == 8) ? IOW_OK : IOW_ERROR; } diff --git a/server/drivers/README b/server/drivers/README index 6e12eff..f9fdc21 100644 --- a/server/drivers/README +++ b/server/drivers/README @@ -56,7 +56,7 @@ typedef struct lcd_logical_driver { char * (*getinfo) (); // get a string of info -} lcd_logical_driver; +} Driver; ------------------------------ lcd_logical_driver ------------------------------ The first thing that is done is that lcd_init (lcd.c) is called. This function diff --git a/server/drivers/bayrad.c b/server/drivers/bayrad.c index 87b970a..2a455bd 100644 --- a/server/drivers/bayrad.c +++ b/server/drivers/bayrad.c @@ -41,6 +41,8 @@ #define CCMODE_HBAR 2 #define CCMODE_BIGNUM 3 +#define BAYRAD_DEFAULT_DEVICE "/dev/lcd" + ////////////////////////////////////////////////////////////////////////// ////////////////////// Base "class" to derive from /////////////////////// ////////////////////////////////////////////////////////////////////////// @@ -321,16 +323,10 @@ MODULE_EXPORT int bayrad_init(Driver *drvthis, char *args) { - char device[256]; - int speed=B9600; - char *argv[64]; - int argc; - int i; + char device[256] = BAYRAD_DEFAULT_DEVICE; + int speed = B9600; struct termios portset; - int tmp; - //debug(RPT_DEBUG,"bayrad_init()\n"); - strcpy(device, "/dev/lcd"); width = 20; height = 2; @@ -348,68 +344,24 @@ bayrad_init(Driver *drvthis, char *args) //cellheight = 5; //cellwidth = 8; - /*-----------------------------------------------------*/ + /* Read config file */ - //debug(RPT_DEBUG, "bayrad_init: Args(all): %s\n", args); + /* What device should be used */ + strncpy(device, drvthis->config_get_string(drvthis->name, "Device", 0, + BAYRAD_DEFAULT_DEVICE), sizeof(device)); + device[sizeof(device)-1] = '\0'; - argc = get_args(argv, args, 64); - - /* - for(i=0; i argc) { - report(RPT_ERR, "bayrad_init: %s requires an argument", - argv[i]); - return -1; - } - strcpy(device, argv[++i]); - } - else if(0 == strcmp(argv[i], "-s") || 0 == strcmp(argv[i], "--speed")) - { - if(i + 1 > argc) - { - report(RPT_ERR, "bayrad_init: %s requires an argument", argv[i]); - return -1; - } - tmp = atoi(argv[++i]); - if(tmp==1200) - speed=B1200; - else if(tmp==2400) - speed=B2400; - else if(tmp==9600) - speed=B9600; - else if(tmp==19200) - speed=B19200; - else - { - report(RPT_ERR, "bayrad_init: %s argument must be 1200, 2400, 9600 or 19200. Using default value.", - argv[i]); - } - } - else if(0 == strcmp(argv[i], "-h") || 0 == strcmp(argv[i], "--help")) - { - report(RPT_ERR, "LCDproc EMAC BayRAD LCD driver\n" - "\t-d\t--device\tSelect the output device to use [/dev/lcd]\n" - /*"\t-t\t--type\t\tSelect the LCD type (size) [20x2]\n"*/ - "\t-s\t--speed\t\tSet the communication speed [19200]\n" - "\t-h\t--help\t\tShow this help information\n"); - return -1; - } - else - { - report(RPT_ERR, "bayrad_init: Invalid parameter: %s", argv[i]); - } - - } + /* What speed to use */ + speed = drvthis->config_get_int(drvthis->name, "Speed", 0, 9600); + + if (speed == 1200) speed = B1200; + else if (speed == 2400) speed = B2400; + else if (speed == 9600) speed = B9600; + else if (speed == 19200) speed = B19200; + else { + report(RPT_WARNING, "bayrad_init: Illegal speed: %d. Must be one of 1200, 2400, 9600 or 19200. Using default.\n", speed); + speed = B9600; + } // Set up io port correctly, and open it... fd = open(device, O_RDWR | O_NOCTTY | O_NDELAY); diff --git a/server/drivers/curses_drv.c b/server/drivers/curses_drv.c index 11f7e68..1a297aa 100644 --- a/server/drivers/curses_drv.c +++ b/server/drivers/curses_drv.c @@ -249,12 +249,12 @@ curses_drv_init (Driver *drvthis, char *args) if (0<=drvthis->config_get_int ( drvthis->name , "topleftx" , 0 , CONF_DEF_TOP_LEFT_X) && drvthis->config_get_int ( drvthis->name , "topleftx" , 0 , CONF_DEF_TOP_LEFT_X) <= 255) { screen_begx = drvthis->config_get_int ( drvthis->name , "topleftx" , 0 , CONF_DEF_TOP_LEFT_X); } else { - report (RPT_WARNING, "CURSES: topleftx must between 0 and 255. Using default value %d.\n",CONF_DEF_TOP_LEFT_X); + report (RPT_WARNING, "CURSES: topleftx must be between 0 and 255. Using default value %d.\n",CONF_DEF_TOP_LEFT_X); } if (0<=drvthis->config_get_int ( drvthis->name , "toplefty" , 0 , CONF_DEF_TOP_LEFT_Y) && drvthis->config_get_int ( drvthis->name , "toplefty" , 0 , CONF_DEF_TOP_LEFT_Y) <= 255) { screen_begy = drvthis->config_get_int ( drvthis->name , "toplefty" , 0 , CONF_DEF_TOP_LEFT_Y); } else { - report (RPT_WARNING, "CURSES: toplefty must between 0 and 255. Using default value %d.\n",CONF_DEF_TOP_LEFT_Y); + report (RPT_WARNING, "CURSES: toplefty must be between 0 and 255. Using default value %d.\n",CONF_DEF_TOP_LEFT_Y); } //debug: sleep(1); diff --git a/server/drivers/glk.c b/server/drivers/glk.c index daa11de..a45c71a 100644 --- a/server/drivers/glk.c +++ b/server/drivers/glk.c @@ -31,6 +31,12 @@ #include "shared/str.h" #include "glk.h" #include "glkproto.h" +#include "report.h" + +#define GLK_DEFAULT_DEVICE "/dev/lcd" +#define GLK_DEFAULT_SPEED 19200 +#define GLK_DEFAULT_CONTRAST 560 + static GLKDisplay * PortFD ; /* Initialize pseudo-CGRAM to empty */ @@ -65,77 +71,39 @@ MODULE_EXPORT char *symbol_prefix = "glk_"; MODULE_EXPORT int glk_init(Driver *drvthis, char *args) { - char * argv[64]; - int argc; - char * device = "/dev/lcd" ; - speed_t speed = B19200 ; - int i ; - contrast = 560; + char device[256] = GLK_DEFAULT_DEVICE; + speed_t speed = GLK_DEFAULT_SPEED; + int contrast = GLK_DEFAULT_CONTRAST; + int i; -// printf("glk_init()\n"); + /* Read config file */ - argc = get_args( argv, args, 64 ); - for( i = 0 ; i < argc; ++i ) { - if( 0 == strcmp( argv[i], "-d") - || 0 == strcmp( argv[i], "--device" ) - ) { - if( i+1 >= argc ) { - fprintf( stderr, "glk: %s requires an argument\n", argv[i]); - return( -1 ); - }; - device = argv[i+1] ; - ++i ; - } else if( 0 == strcmp( argv[i], "-c" ) - || 0 == strcmp( argv[i], "--contrast" ) - ) { - int tmp ; - if( i+1 >= argc ) { - fprintf( stderr, "glk: %s requires an argument\n", argv[i]); - return( -1 ); - }; - tmp = atoi( argv[i+1] ); - if( tmp < 0 || tmp > 255 ) { - fprintf( stderr, "glk: %s argument must be between 0 and 255\n", argv[i]); - } else { - contrast = tmp ; - }; - ++i ; - } else if( 0 == strcmp( argv[i], "-s" ) - || 0 == strcmp( argv[i], "--speed" ) - ) { - int tmp ; - if( i+1 >= argc ) { - fprintf( stderr, "glk: %s requires an argument\n", argv[i]); - return( -1 ); - }; - tmp = atoi( argv[i+1] ); - if( tmp == 9600 ) { - speed = B9600 ; - } else if( tmp == 19200 ) { - speed = B19200 ; - } else if( tmp == 38400 ) { - speed = B38400 ; - } else { - fprintf( stderr, "glk: %s argument (%s) not a valid speed.\n", argv[i], argv[i+1] ); - }; - ++i ; - } else if( 0 == strcmp( argv[i], "-h" ) - || 0 == strcmp( argv[i], "--help" ) - ) { - printf( -"LCDproc Matrix-Orbital GLK Graphical LCD driver\n" -"\n" -"-d, --device select the serial device to use [/dev/lcd]\n" -"-c, --contrast set the initial contrast value [560]\n" -"-s, --speed set the serial port speed [19200]\n" -"-h, --help display this help text\n" - ); - return( -1 ); - } else { - fprintf( stderr, "glk: Invalid parameter: %s\n", argv[i] ); - }; - }; + /* What device should be used */ + strncpy(device, drvthis->config_get_string(drvthis->name, "Device", 0, + GLK_DEFAULT_DEVICE), sizeof(device)); + device[sizeof(device)-1] = '\0'; + /* What speed to use */ + speed = drvthis->config_get_int(drvthis->name, "Speed", 0, 9600); + + if (speed == 9600) speed = B9600; + else if (speed == 19200) speed = B19200; + else if (speed == 38400) speed = B38400; + else { + report(RPT_WARNING, "glk: Illegal speed: %d. Must be one of 9600, 19200 or 38400. Using default.\n", speed); + speed = B19200; + } + + /* Which contrast */ + contrast = drvthis->config_get_int ( drvthis->name , "Contrast" , 0 , GLK_DEFAULT_CONTRAST); + if ((contrast < 0) || (contrast > 1000)) { + report (RPT_WARNING, "glk: Contrast must be between 0 and 1000. Using default value.\n"); + contrast = GLK_DEFAULT_CONTRAST; + } + + /* End of config file parsing */ + + /* open device */ PortFD = glkopen( device, speed ); if( PortFD == NULL ) { return -1 ; @@ -145,7 +113,7 @@ glk_init(Driver *drvthis, char *args) glkputl( PortFD, GLKCommand, 0x37, EOF ); i = glkget( PortFD ); if( i < 0 ) { - fprintf( stderr, "glk: GLK did not respond to READ MODULE TYPE.\n" ); + report(RPT_ERR, "glk: GLK did not respond to READ MODULE TYPE.\n" ); return -1 ; } else { switch( i ) { @@ -170,7 +138,7 @@ glk_init(Driver *drvthis, char *args) case 0x24 : // GLK12232-25SM-Penguin width = 20 ; height = 4 ; gpo_count = 2 ; break ; default : - fprintf( stderr, "glk: Unrecognized module type: 0x%02x\n", i ); + report(RPT_ERR, "glk: Unrecognized module type: 0x%02x\n", i ); return( -1 ); }; }; @@ -179,7 +147,7 @@ glk_init(Driver *drvthis, char *args) screen_contents = malloc( width * height ); if(framebuf == NULL || screen_contents == NULL ) { - fprintf( stderr, "glk: Unable to allocate memory for screen buffers\n" ); + report(RPT_ERR, "glk: Unable to allocate memory for screen buffers\n" ); glk_close(drvthis); return -1; } @@ -279,7 +247,7 @@ glk_flush(Driver *drvthis) int xs ; char * ps = NULL ; -// printf( "flush()\n" ); + debug(RPT_DEBUG, "flush()\n" ); p = framebuf ; q = screen_contents ; @@ -291,7 +259,7 @@ glk_flush(Driver *drvthis) /* Write accumulated string */ glkputl( PortFD, GLKCommand, 0x79, xs*6+1, y*8, EOF ); glkputa( PortFD, x - xs, ps ); -// printf( "draw_frame: Writing at (%d,%d) for %d\n", xs, y, x-xs ); + debug(RPT_DEBUG, "draw_frame: Writing at (%d,%d) for %d\n", xs, y, x-xs ); xs = -1 ; } else if( *q != *p && xs < 0 ) { /* Start new string of changes */ @@ -304,7 +272,7 @@ glk_flush(Driver *drvthis) /* Write accumulated line */ glkputl( PortFD, GLKCommand, 0x79, xs*6+1, y*8, EOF ); glkputa( PortFD, width - xs, ps ); -// printf( "draw_frame: Writing at (%d,%d) for %d\n", xs, y, width-xs ); + debug(RPT_DEBUG, "draw_frame: Writing at (%d,%d) for %d\n", xs, y, width-xs ); }; }; /* For y */ @@ -322,7 +290,7 @@ glk_string(Driver *drvthis, int x, int y, char string[]) { char * p ; -// printf( "glk_string( %d, %d, \"%s\" )\n", x, y, string ); + debug(RPT_DEBUG, "glk_string( %d, %d, \"%s\" )\n", x, y, string ); if( x > width || y > height ) { return ; @@ -346,7 +314,7 @@ glk_chr(Driver *drvthis, int x, int y, char c) y -= 1; if( fontselected != 2 ) { -// puts( "Switching to font 2" ); + debug(RPT_DEBUG, "Switching to font 2" ); /* Select font 2 */ glkputl( PortFD, GLKCommand, 0x31, 2, EOF ); fontselected = 2 ; @@ -358,15 +326,13 @@ glk_chr(Driver *drvthis, int x, int y, char c) if( myc >= 0 && myc <= 15 ) { /* CGRAM */ -// if( myc != 0 ) { -// printf( "CGRAM changing %d => %d\n", myc, CGRAM[myc&7] ); -// }; + debug(RPT_DEBUG, "CGRAM changing %d => %d\n", myc, CGRAM[myc&7] ); myc = CGRAM[myc&7] ; } else if( myc == 255 || myc == -1 ) { /* Solid block */ myc = 133 ; } else if( (myc > 15 && myc < 32) || myc > 143 ) { - fprintf( stderr, "Attempt to write %d to (%d,%d)\n", myc, x, y ); + debug(RPT_DEBUG, "Attempt to write %d to (%d,%d)\n", myc, x, y ); myc = 133 ; }; @@ -403,7 +369,7 @@ glk_set_contrast(Driver *drvthis, int promille) contrast = promille; // Do it -// printf("Contrast: %i\n", contrast); + debug(RPT_DEBUG, "Contrast: %i\n", contrast); glkputl( PortFD, GLKCommand, 0x50, (int) ((long)promille * 255 / 1000), EOF ); } @@ -414,10 +380,10 @@ MODULE_EXPORT void glk_backlight(Driver *drvthis, int on) { if(on) { -// printf("Backlight ON\n"); + debug(RPT_DEBUG, "Backlight ON\n"); glkputl( PortFD, GLKCommand, 0x42, 0, EOF ); } else { -// printf("Backlight OFF\n"); + debug(RPT_DEBUG, "Backlight OFF\n"); glkputl( PortFD, GLKCommand, 0x46, EOF ); } } @@ -449,7 +415,7 @@ glk_output(Driver *drvthis, int on) MODULE_EXPORT void glk_init_vbar(Driver *drvthis) { -// printf("Vertical bars.\n"); + debug(RPT_DEBUG, "glk_init_vbar()\n"); } ////////////////////////////////////////////////////////////////////// @@ -458,7 +424,7 @@ glk_init_vbar(Driver *drvthis) MODULE_EXPORT void glk_init_hbar(Driver *drvthis) { -// printf("Horizontal bars.\n"); + debug(RPT_DEBUG, "glk_init_hbar()\n"); } ////////////////////////////////////////////////////////////////////// @@ -467,7 +433,7 @@ glk_init_hbar(Driver *drvthis) MODULE_EXPORT void glk_init_num(Driver *drvthis) { -// printf("Big Numbers.\n"); + debug(RPT_DEBUG, "glk_init_num()\n"); if( fontselected != 3 ) { /* Select Big Numbers font */ glkputl( PortFD, GLKCommand, 0x31, 3, EOF ); @@ -485,7 +451,7 @@ glk_init_num(Driver *drvthis) MODULE_EXPORT void glk_num(Driver *drvthis, int x, int num) { -// printf("BigNum(%i, %i)\n", x, num); + debug(RPT_DEBUG, "glk_num(%i, %i)\n", x, num); framebuf[x-1] = num + '0' ; } @@ -495,7 +461,7 @@ glk_num(Driver *drvthis, int x, int num) MODULE_EXPORT void glk_set_char(Driver *drvthis, int n, char *dat) { - printf("Set Character %i\n", n); + debug(RPT_DEBUG, "glk_set_char( %i )\n", n); } ///////////////////////////////////////////////////////////////// @@ -506,7 +472,7 @@ glk_old_vbar(Driver *drvthis, int x, int len) { int y = height ; -// printf( "glk_vbar( %d, %d )\n", x, len ); + debug(RPT_DEBUG, "glk_old_vbar( %d, %d )\n", x, len ); while( len > cellheight ) { glk_chr( drvthis, x, y, 255 ); --y ; @@ -535,7 +501,7 @@ glk_old_vbar(Driver *drvthis, int x, int len) MODULE_EXPORT void glk_old_hbar(Driver *drvthis, int x, int y, int len) { -// printf( "glk_hbar( %d, %d, %d )\n", x, y, len ); + debug(RPT_DEBUG, "glk_old_hbar( %d, %d, %d )\n", x, y, len ); while( len > cellwidth ) { glk_chr( drvthis, x, y, 255 ); ++x ; @@ -571,7 +537,7 @@ glk_old_icon(Driver *drvthis, int which, int dest) unsigned char * q ; int count ; -// printf("Char %i set to icon %i\n", dest, which); + debug(RPT_DEBUG, "glk_old_icon( %i, %i )\n", which, dest); if( dest < 0 || dest > 7 ) { /* Illegal custom character */ @@ -597,7 +563,7 @@ glk_old_icon(Driver *drvthis, int which, int dest) /* Replace all old icons with new icon in new frame */ for( count = width * height ; count ; --count ) { if( *q == old ) { -// printf( "icon %d to %d at %d\n", old, new, q - screen_contents ); + debug(RPT_DEBUG, "icon %d to %d at %d\n", old, new, q - screen_contents ); *p = new ; }; ++q ; ++p ; @@ -623,7 +589,7 @@ glk_old_getkey(Driver *drvthis) static struct timeval lastkey ; struct timeval now ; -// puts( "glk_getkey( )" ); + debug(RPT_DEBUG, "glk_getkey()" ); c = glkgetc( PortFD ); @@ -631,10 +597,10 @@ glk_old_getkey(Driver *drvthis) /* Key down event */ key = c ; gettimeofday( &lastkey, NULL ); -// printf( "KEY %c at %ld.%06ld\n", c, lastkey.tv_sec, lastkey.tv_usec ); + debug(RPT_DEBUG, "KEY %c at %ld.%06ld\n", c, lastkey.tv_sec, lastkey.tv_usec ); } else if( c >= 'a' && c <= 'z' ) { /* Key up event */ -// printf( "KEY %c UP\n", c ); + debug(RPT_DEBUG, "KEY %c UP\n", c ); key = -1 ; c = 0 ; } else { @@ -646,12 +612,12 @@ glk_old_getkey(Driver *drvthis) gettimeofday( &now, NULL ); msec_diff = (now.tv_sec - lastkey.tv_sec) * 1000 ; msec_diff += (now.tv_usec - lastkey.tv_usec) / 1000 ; -// printf( "KEY %c down for %d msec\n", key, msec_diff ); + debug(RPT_DEBUG, "KEY %c down for %d msec\n", key, msec_diff ); if( msec_diff > 1000 ) { /* Generate repeat event */ c = key | 0x20 ; /* Upper case to lower case */ ++lastkey.tv_sec ; /* HACK HACK. repeat at 1 sec intervals */ -// printf( "KEY %c REPEAT\n", c ); + debug(RPT_DEBUG, "KEY %c REPEAT\n", c ); }; }; }; diff --git a/server/drivers/hd44780-ext8bit.h b/server/drivers/hd44780-ext8bit.h index 856b984..e3e2ad9 100644 --- a/server/drivers/hd44780-ext8bit.h +++ b/server/drivers/hd44780-ext8bit.h @@ -4,6 +4,6 @@ #include "lcd.h" /* for Driver */ // initialise this particular driver -int hd_init_ext8bit (Driver *driver); +int hd_init_ext8bit (Driver *drvthis); #endif diff --git a/server/drivers/hd44780.c b/server/drivers/hd44780.c index 8824615..994f430 100644 --- a/server/drivers/hd44780.c +++ b/server/drivers/hd44780.c @@ -124,8 +124,6 @@ HD44780_init (Driver * drvthis, char *args) { // TODO: remove the two magic numbers below // TODO: single point of return - //char *argv[64]; - //int i; char buf[40]; char *s; int i; @@ -209,8 +207,10 @@ HD44780_init (Driver * drvthis, char *args) report (RPT_ERR, "Error mallocing"); } - if (timing_init() == -1) + if (timing_init() == -1) { + report(RPT_ERR, "timing_init: failed (%s)\n", strerror(errno)); return -1; + } #if defined DELAY_NANOSLEEP // Change to Round-Robin scheduling for nanosleep diff --git a/server/drivers/hd44780.h b/server/drivers/hd44780.h index 9906f48..b13735c 100644 --- a/server/drivers/hd44780.h +++ b/server/drivers/hd44780.h @@ -18,7 +18,7 @@ #include "lcd.h" -MODULE_EXPORT int HD44780_init (struct lcd_logical_driver *driver, char *args); +MODULE_EXPORT int HD44780_init (Driver *drvthis, char *args); MODULE_EXPORT void HD44780_close (Driver *drvthis); MODULE_EXPORT int HD44780_width (Driver *drvthis); MODULE_EXPORT int HD44780_height (Driver *drvthis); diff --git a/server/drivers/icp_a106.h b/server/drivers/icp_a106.h index 6260564..d601ba7 100644 --- a/server/drivers/icp_a106.h +++ b/server/drivers/icp_a106.h @@ -32,7 +32,7 @@ #define ICP_A106_H #include "lcd.h" -MODULE_EXPORT int icp_a106_init (struct lcd_logical_driver *driver, char *args); +MODULE_EXPORT int icp_a106_init (Driver *drvthis, char *args); MODULE_EXPORT void icp_a106_close (Driver *drvthis); MODULE_EXPORT int icp_a106_width (Driver *drvthis); MODULE_EXPORT int icp_a106_height (Driver *drvthis); diff --git a/server/drivers/irmanin.c b/server/drivers/irmanin.c index 4d1fd5c..e3b382b 100644 --- a/server/drivers/irmanin.c +++ b/server/drivers/irmanin.c @@ -24,6 +24,7 @@ #include "lcd.h" #include "irmanin.h" +#include "report.h" #include "../../../libirman-0.4.1b/irman.h" char *progname = "irmanin"; @@ -76,7 +77,7 @@ lcd_logical_driver *irmanin; // init() should set up any device-specific stuff, and // point all the function pointers. MODULE_EXPORT int -irmanin_init (struct lcd_logical_driver *driver, char *args) +irmanin_init (Driver *drvthis, char *args) { char device[256]; char *ptrdevice; @@ -85,72 +86,61 @@ irmanin_init (struct lcd_logical_driver *driver, char *args) char *portname; - char *argv[64]; - int argc, i, j; + int i; char *filename; ptrconfig = NULL; ptrdevice = NULL; - irmanin = driver; + irmanin = drvthis; - argc = get_args (argv, args, 64); + /* Read config file */ - for (i = 0; i < argc; i++) { - //printf("Arg(%i): %s\n", i, argv[i]); - if (0 == strcmp (argv[i], "-d") || 0 == strcmp (argv[i], "--device")) { - if (i + 1 > argc) { - fprintf (stderr, "irmanin_init: %s requires an argument\n", argv[i]); - return -1; - } - strcpy (device, argv[++i]); - ptrdevice = device; - } else if (0 == strcmp (argv[i], "-c") || 0 == strcmp (argv[i], "--config")) { - if (i + 1 > argc) { - fprintf (stderr, "irmanin_init: %s requires an argument\n", argv[i]); - return -1; - } - strcpy (config, argv[++i]); - ptrconfig = config; - } else if (0 == strcmp (argv[i], "-h") || 0 == strcmp (argv[i], "--help")) { - printf ("LCDproc IrMan input driver\n" "\t-d\t--device\tSelect the input device to use\n" "\t-d\t--config\tSelect the configuration file to use\n" "\t-h\t--help\t\tShow this help information\n"); - return -1; - } else { - printf ("Invalid parameter: %s\n", argv[i]); - } - } + /* What device should be used */ + strncpy(device, drvthis->config_get_string(drvthis->name, "Device", 0, + ""), sizeof(device)); + device[sizeof(device)-1] = '\0'; + if (*device != '\0') ptrdevice = device; + + /* What config file should be used */ + strncpy(config, drvthis->config_get_string(drvthis->name, "Config", 0, + ""), sizeof(config)); + config[sizeof(config)-1] = '\0'; + if (*config != '\0') ptrconfig = config; + + /* End of config file parsing */ if (ir_init_commands (ptrconfig, 1) < 0) { - fprintf (stderr, "error initialising commands: %s\n", strerror (errno)); + report(RPT_ERR, "error initialising commands: %s\n", strerror (errno)); exit (1); } portname = ir_default_portname (); if (portname == NULL) { - if (ptrdevice == NULL) { + if (ptrdevice != NULL) { portname = ptrdevice; } else { - fprintf (stderr, "error no device defined\n"); + report(RPT_ERR, "error no device defined\n"); exit (1); } } - driver->getkey = irmanin_getkey; - driver->close = irmanin_close; + drvthis->getkey = irmanin_getkey; + drvthis->close = irmanin_close; for (i = 1; codes[i] != NULL; i++) { if (ir_register_command (codes[i], i) < 0) { if (errno == ENOENT) { - fprintf (stderr, "%s: no code set for `%s'\n", progname, codes[i]); + report(RPT_WARNING, "%s: no code set for `%s'\n", progname, codes[i]); } else { - fprintf (stderr, "error registering `%s': `%s'\n", codes[i], strerror (errno)); + report(RPT_WARNING, "error registering `%s': `%s'\n", codes[i], strerror (errno)); } } } errno = 0; if (ir_init (portname) < 0) { - fprintf (stderr, "%s: error initialising Irman: `%s'\n", strerror (errno), portname); + report(RPT_ERR, "%s: error initialising Irman: `%s'\n", strerror (errno), portname); exit (1); } @@ -184,7 +174,7 @@ irmanin_getkey () key = (char) 0; switch (cmd = ir_poll_command ()) { case IR_CMD_ERROR: - fprintf (stderr, "%s: error reading command: %s\n", progname, strerror (errno)); + report(RPT_WARNING, "%s: error reading command: %s\n", progname, strerror (errno)); break; case IR_CMD_UNKNOWN: break; diff --git a/server/drivers/irmanin.h b/server/drivers/irmanin.h index 5461593..ff2dbca 100644 --- a/server/drivers/irmanin.h +++ b/server/drivers/irmanin.h @@ -3,7 +3,7 @@ extern lcd_logical_driver *joy; -MODULE_EXPORT int irmanin_init (struct lcd_logical_driver *driver, char *args); +MODULE_EXPORT int irmanin_init (Driver *drvthis, char *args); MODULE_EXPORT void irmanin_close (); MODULE_EXPORT char irmanin_getkey (); diff --git a/server/drivers/joy.c b/server/drivers/joy.c index 92442e3..66e4086 100644 --- a/server/drivers/joy.c +++ b/server/drivers/joy.c @@ -36,8 +36,11 @@ #include "report.h" #include "shared/str.h" -#define NAME_LENGTH 128 -#define JOY_DEFAULT_DEVICE "/dev/js0" +#define JOY_NAMELENGTH 128 +#define JOY_DEFAULT_DEVICE "/dev/js0" +#define JOY_MAPSIZE 16 +#define JOY_DEFAULT_AXISMAP "EFGHIJKLMNOPQRST" +#define JOY_DEFAULT_BUTTONMAP "BDACEFGHIJKLMNOP" int fd; @@ -45,15 +48,15 @@ struct js_event js; char axes = 2; char buttons = 2; -int jsversion = 0x000800; -char jsname[NAME_LENGTH] = "Unknown"; +int jsversion = 0x000801; +char jsname[JOY_NAMELENGTH] = "Unknown"; int *axis = NULL; int *button = NULL; // Configured for a Gravis Gamepad (2 axis, 4 button) -char *axismap = "EFGHIJKLMNOPQRST"; -char *buttonmap = "BDACEFGHIJKLMNOP"; +char axismap[JOY_MAPSIZE+1] = JOY_DEFAULT_AXISMAP; +char buttonmap[JOY_MAPSIZE+1] = JOY_DEFAULT_BUTTONMAP; // Vars for the server core MODULE_EXPORT char *api_version = API_VERSION; @@ -69,42 +72,26 @@ MODULE_EXPORT int joy_init (Driver *drvthis, char *args) { char device[256]; - char *argv[64]; - int argc, i; - strcpy (device, JOY_DEFAULT_DEVICE); + /* Read config file */ - argc = get_args (argv, args, 64); + /* What device should be used */ + strncpy(device, drvthis->config_get_string(drvthis->name, "Device", 0, + JOY_DEFAULT_DEVICE), sizeof(device)); + device[sizeof(device)-1] = '\0'; - for (i = 0; i < argc; i++) { - //printf("Arg(%i): %s\n", i, argv[i]); - if (0 == strcmp (argv[i], "-d") || 0 == strcmp (argv[i], "--device")) { - if (i + 1 > argc) { - fprintf (stderr, "joy_init: %s requires an argument\n", argv[i]); - return -1; - } - strcpy (device, argv[++i]); - } else if (0 == strcmp (argv[i], "-a") || 0 == strcmp (argv[i], "--axes")) { - if (i + 1 > argc) { - fprintf (stderr, "joy_init: %s requires an argument\n", argv[i]); - return -1; - } - strncpy (axismap, argv[++i], 16); - } else if (0 == strcmp (argv[i], "-b") || 0 == strcmp (argv[i], "--buttons")) { - if (i + 1 > argc) { - fprintf (stderr, "joy_init: %s requires an argument\n", argv[i]); - return -1; - } - strncpy (buttonmap, argv[++i], 16); - } else if (0 == strcmp (argv[i], "-h") || 0 == strcmp (argv[i], "--help")) { - printf ("LCDproc Joystick input driver\n" "\t-d\t--device\tSelect the input device to use [/dev/js0]\n" "\t-a\t--axes\t\tModify the axis map [%s]\n" "\t-b\t--buttons\tModify the button map [%s]\n" "\t-h\t--help\t\tShow this help information\n", axismap, buttonmap); - return -1; - } else { - printf ("Invalid parameter: %s\n", argv[i]); - } + /* How does the axis map look like */ + strncpy(axismap, drvthis->config_get_string(drvthis->name, "AxisMap", 0, + JOY_DEFAULT_AXISMAP), sizeof(axismap)); + axismap[sizeof(axismap)-1] = '\0'; - } + /* How does the button map look like */ + strncpy(buttonmap, drvthis->config_get_string(drvthis->name, "ButtonMap", 0, + JOY_DEFAULT_BUTTONMAP), sizeof(buttonmap)); + buttonmap[sizeof(buttonmap)-1] = '\0'; + /* End of config file parsing */ + if ((fd = open (device, O_RDONLY)) < 0) return -1; @@ -112,7 +99,7 @@ joy_init (Driver *drvthis, char *args) ioctl (fd, JSIOCGVERSION, &jsversion); ioctl (fd, JSIOCGAXES, &axes); ioctl (fd, JSIOCGBUTTONS, &buttons); - ioctl (fd, JSIOCGNAME (NAME_LENGTH), jsname); + ioctl (fd, JSIOCGNAME (JOY_NAMELENGTH), jsname); report (RPT_NOTICE, "Joystick (%s) has %d axes and %d buttons. Driver version is %d.%d.%d.\n", jsname, axes, buttons, diff --git a/server/drivers/lb216.c b/server/drivers/lb216.c index eef5abc..9477268 100644 --- a/server/drivers/lb216.c +++ b/server/drivers/lb216.c @@ -38,6 +38,10 @@ #include "report.h" //#include "drv_base.h" +#define LB216_DEFAULT_DEVICE "/dev/lcd" +#define LB216_DEFAULT_SPEED 9600 +#define LB216_DEFAULT_BRIGHTNESS 255 + static int custom=0; typedef enum { hbar = 1, @@ -71,106 +75,53 @@ MODULE_EXPORT char *symbol_prefix = "LB216_"; MODULE_EXPORT int LB216_init(Driver * drvthis, char *args) { - char *argv[64]; - int argc; struct termios portset; - int i; - int tmp; int reboot=0; - - char device[256] = "/dev/lcd"; - int speed=B9600; - int backlight_brightness = 255; + char device[256] = LB216_DEFAULT_DEVICE; + int speed = LB216_DEFAULT_SPEED; + int backlight_brightness = LB216_DEFAULT_BRIGHTNESS; - //debug("LB216_init: Args(all): %s\n", args); + /* Read config file */ - argc = get_args(argv, args, 64); + /* What device should be used */ + strncpy(device, drvthis->config_get_string(drvthis->name, "Device", 0, + LB216_DEFAULT_DEVICE), sizeof(device)); + device[sizeof(device)-1] = '\0'; - /* - for(i=0; i argc) { - fprintf(stderr, "LB216_init: %s requires an argument\n", - argv[i]); - return -1; - } - strcpy(device, argv[++i]); - } - else if(0 == strcmp(argv[i], "-b") || - 0 == strcmp(argv[i], "--brightness")) - { - if(i + 1 > argc) { - fprintf(stderr, "LB216_init: %s requires an argument\n", - argv[i]); - return -1; - } - tmp = atoi(argv[++i]); - if((tmp < 0) || (tmp > 255)){ - fprintf(stderr, "LB216_init: %s argument must between 0 and 255. Using default value.\n", - argv[i]); - } else backlight_brightness = tmp; - } - else if(0 == strcmp(argv[i], "-s") || - 0 == strcmp(argv[i], "--speed")) - { - if(i + 1 > argc) { - fprintf(stderr, "LB216_init: %s requires an argument\n", - argv[i]); - return -1; - } - tmp = atoi(argv[++i]); - if(tmp==2400) speed=B2400; - else if(tmp==9600) speed=B9600; - else { - fprintf(stderr, "LB216_init: %s argument must be 2400, or 9600. Using default value.\n", - argv[i]); - } - } - else if(0 == strcmp(argv[i], "-h") || - 0 == strcmp(argv[i], "--help")) - { - printf("LCDproc LB216 LCD driver\n" - "\t-d\t--device\tSelect the output device to use [/dev/lcd]\n" - "\t-t\t--type\t\tSelect the LCD type (size) [16x2]\n" - "\t-b\t--brightness\tSet the initial brightness [255]\n" - "\t-s\t--speed\t\tSet the communication speed [9600]\n" - "\t-r\t--reboot\tReinitialize the LCD's BIOS\n" - "\t-h\t--help\t\tShow this help information\n"); - return -1; - } - else if(0 == strcmp(argv[i], "-r") || - 0 == strcmp(argv[i], "--reboot")) - { - printf("LCDd: rebooting LB216 LCD...\n"); - reboot=1; - } - else - { - printf("Invalid parameter: %s\n", argv[i]); - } - - } + /* What speed to use */ + speed = drvthis->config_get_int(drvthis->name, "Speed", 0, LB216_DEFAULT_SPEED); + + if (speed == 2400) speed = B2400; + else if (speed == 9600) speed = B9600; + else { + report(RPT_WARNING, "lb216_init: Illegal speed: %d. Must be 2400 or 9600. Using default.\n", speed); + speed = B9600; + } + /* Which backlight brightness */ + backlight_brightness = drvthis->config_get_int ( drvthis->name , "Brightness" , 0 , LB216_DEFAULT_BRIGHTNESS); + if ((backlight_brightness < 0) || (backlight_brightness > 255)) { + report (RPT_WARNING, "lb216_init: Brightness must be between 0 and 255. Using default value.\n"); + backlight_brightness = LB216_DEFAULT_BRIGHTNESS; + } + + /* Reboot display? */ + reboot = drvthis->config_get_bool( drvthis->name , "Reboot", 0, 0); + if (reboot) + report (RPT_INFO, "LCDd: rebooting LB216 LCD...\n"); + /* End of config file parsing */ + // Set up io port correctly, and open it... fd = open(device, O_RDWR | O_NOCTTY | O_NDELAY); if (fd == -1) { - fprintf(stderr, "LB216_init: failed (%s)\n", strerror(errno)); + report(RPT_ERR, "lb216_init: open(%s) failed (%s)\n", device, strerror(errno)); return -1; } - //else fprintf(stderr, "LB216_init: opened device %s\n", device); + report(RPT_DEBUG, "lb216_init: opened device %s\n", device); + tcgetattr(fd, &portset); // We use RAW mode @@ -195,13 +146,15 @@ LB216_init(Driver * drvthis, char *args) tcsetattr(fd, TCSANOW, &portset); // Make sure the frame buffer is there... - if (framebuf) - framebuf = (unsigned char *) - malloc (width * height); + framebuf = (unsigned char *) malloc (width * height); + if (framebuf == NULL) { + report(RPT_ERR, "lb216_init: unable to create framebuffer.\n"); + return -1; + } memset (framebuf, ' ', width * height); // Set display-specific stuff.. - if(reboot) + if (reboot) { LB216_reboot(); sleep(4); @@ -224,7 +177,8 @@ LB216_close(Driver * drvthis) { close (fd); - if(framebuf) free(framebuf); + if (framebuf) + free(framebuf); framebuf = NULL; } diff --git a/server/drivers/lcd_lib.c b/server/drivers/lcd_lib.c index f167488..0f07806 100644 --- a/server/drivers/lcd_lib.c +++ b/server/drivers/lcd_lib.c @@ -19,7 +19,7 @@ ANY DRIVER SHOULD SIMPLY FREE ITS FRAMEBUFFER AT CLOSE() NO CHECKING FOR NULL NEEDED void -free_framebuf (struct lcd_logical_driver *driver) { +free_framebuf (Driver *driver) { if (!driver) return; @@ -33,7 +33,7 @@ free_framebuf (struct lcd_logical_driver *driver) { /* NEED TO BE ADAPTED TO NEW SITUATION void -clear_framebuf (struct lcd_logical_driver *driver) { +clear_framebuf (Driver *driver) { int framebuf_size; if (!driver) @@ -47,7 +47,7 @@ clear_framebuf (struct lcd_logical_driver *driver) { /* NEED TO BE ADAPTED TO NEW SITUATION int -new_framebuf (struct lcd_logical_driver *driver, char *oldbuf) { +new_framebuf (Driver *driver, char *oldbuf) { int i; if (driver->framebuf == NULL) @@ -68,7 +68,7 @@ new_framebuf (struct lcd_logical_driver *driver, char *oldbuf) { /* NEED TO BE ADAPTED TO NEW SITUATION void -insert_str_framebuf (struct lcd_logical_driver *driver, int x, int y, char *string) { +insert_str_framebuf (Driver *driver, int x, int y, char *string) { //int i; char buf[64]; char *pos; @@ -97,7 +97,7 @@ insert_str_framebuf (struct lcd_logical_driver *driver, int x, int y, char *stri /* NEED TO BE ADAPTED TO NEW SITUATION void -insert_chr_framebuf (struct lcd_logical_driver *driver, int x, int y, char c) { +insert_chr_framebuf (Driver *driver, int x, int y, char c) { if (!driver) return; diff --git a/server/drivers/lcd_lib.h b/server/drivers/lcd_lib.h index 5ba58e1..f72fe2b 100644 --- a/server/drivers/lcd_lib.h +++ b/server/drivers/lcd_lib.h @@ -5,7 +5,7 @@ #include "lcd.h" #endif -int new_framebuf (struct lcd_logical_driver *driver, char *oldbuf); +int new_framebuf (Driver *driver, char *oldbuf); void lib_hbar_static (Driver *drvthis, int x, int y, int len, int promille, int options, int cellwidth, int cc_offset); void lib_vbar_static (Driver *drvthis, int x, int y, int len, int promille, int options, int cellheight, int cc_offset); diff --git a/server/drivers/lcdm001.h b/server/drivers/lcdm001.h index 295b221..3e4de7c 100644 --- a/server/drivers/lcdm001.h +++ b/server/drivers/lcdm001.h @@ -33,7 +33,7 @@ /* REMOVE: I don't thing this is actualy needed. */ /* extern lcd_logical_driver *lcdm001; */ -MODULE_EXPORT int lcdm001_init (struct lcd_logical_driver *driver, char *args); +MODULE_EXPORT int lcdm001_init (Driver *drvthis, char *args); MODULE_EXPORT void lcdm001_close (Driver *drvthis); MODULE_EXPORT int lcdm001_width (Driver *drvthis); MODULE_EXPORT int lcdm001_height (Driver *drvthis); diff --git a/server/drivers/lcterm.c b/server/drivers/lcterm.c index e9def7d..a45c3ee 100644 --- a/server/drivers/lcterm.c +++ b/server/drivers/lcterm.c @@ -96,33 +96,32 @@ lcterm_init (Driver *drvthis, char *args) // which serial device should be used strncpy(device, drvthis->config_get_string ( drvthis->name , "Device" , 0 , DEFAULT_DEVICE), sizeof(device)); - device[sizeof(device)-1]=0; + device[sizeof(device)-1] = '\0'; report (RPT_INFO,"LCTERM: Using device: %s", device); + /* Get and parse size */ { - char *s; int w,h; + char *s = drvthis->config_get_string( drvthis->name, "size", 0, "16x2" ); - // Get and parse size - s = drvthis->config_get_string( drvthis->name, "size", 0, "16x2" ); - fprintf( stderr, "lcterm_init: size: %s\n", s ); + debug(RPT_DEBUG, "lcterm_init: reading size: %s\n", s ); - if( sscanf( s, "%dx%d", &w, &h) == 2 - && (w > 0) && (w <= LCD_MAX_WIDTH) - && (h > 0) && (h <= LCD_MAX_HEIGHT)) + if((sscanf( s, "%dx%d", &w, &h) != 2) + || (w <= 0) || (w > LCD_MAX_WIDTH) + || (h <= 0) || (h > LCD_MAX_HEIGHT)) { - p->width = w; - p->height = h; + report(RPT_WARNING, "LCDTERM: Cannot read size: %s. Using default value.\n", s); + sscanf( "16x2", "%dx%d", &w, &h); } - else - fprintf( stderr, "lcterm_init: Cannot parse size: %s\n", s ); + p->width = w; + p->height = h; } - fprintf(stderr,"size: %dx%d\n",p->width, p->height); + report (RPT_INFO,"LCTERM: Using size: %dx%d\n",p->width, p->height); p->framebuf = malloc (p->width * p->height); p->last_framebuf = malloc (p->width * p->height); if (!p->framebuf || !p->last_framebuf) { - report(RPT_ERR, "\nError: unable to create LCTERM framebuffer.\n"); + report(RPT_ERR, "Error: unable to create LCTERM framebuffer.\n"); return -1; } memset (p->framebuf, ' ', p->width * p->height); diff --git a/server/drivers/lcterm.h b/server/drivers/lcterm.h index 082fcea..b19a535 100644 --- a/server/drivers/lcterm.h +++ b/server/drivers/lcterm.h @@ -27,7 +27,7 @@ #define LCTERM_H #include "lcd.h" -MODULE_EXPORT int lcterm_init (struct lcd_logical_driver *driver, char *args); +MODULE_EXPORT int lcterm_init (Driver *drvthis, char *args); MODULE_EXPORT void lcterm_close (Driver *drvthis); MODULE_EXPORT int lcterm_width (Driver *drvthis); MODULE_EXPORT int lcterm_height (Driver *drvthis); diff --git a/server/drivers/ms6931.c b/server/drivers/ms6931.c index 23a2a40..a00e398 100644 --- a/server/drivers/ms6931.c +++ b/server/drivers/ms6931.c @@ -143,7 +143,7 @@ ms6931_draw_frame (char *dat) // Opens com port and sets baud correctly... // MODULE_EXPORT int -ms6931_init (struct lcd_logical_driver *drvthis, char *args) +ms6931_init (Driver *drvthis, char *args) { struct termios portset; int w, h; @@ -228,7 +228,7 @@ ms6931_init (struct lcd_logical_driver *drvthis, char *args) // Clean-up // MODULE_EXPORT void -ms6931_close (struct lcd_logical_driver *drvthis) +ms6931_close (Driver *drvthis) { ms6931_clear(drvthis); ms6931_flush(drvthis); @@ -247,7 +247,7 @@ ms6931_close (struct lcd_logical_driver *drvthis) ///////////////////////////////////////////////////////////////// // MODULE_EXPORT void -ms6931_flush (struct lcd_logical_driver *drvthis) +ms6931_flush (Driver *drvthis) { ms6931_draw_frame (framebuf); } @@ -256,13 +256,13 @@ ms6931_flush (struct lcd_logical_driver *drvthis) // Returns the display width/height // MODULE_EXPORT int -ms6931_width (struct lcd_logical_driver *drvthis) +ms6931_width (Driver *drvthis) { return width; } MODULE_EXPORT int -ms6931_height (struct lcd_logical_driver *drvthis) +ms6931_height (Driver *drvthis) { return height; } @@ -272,7 +272,7 @@ ms6931_height (struct lcd_logical_driver *drvthis) // upper-left is (1,1), and the lower right should be (16,2). // MODULE_EXPORT void -ms6931_chr (struct lcd_logical_driver *drvthis, int x, int y, char c) +ms6931_chr (Driver *drvthis, int x, int y, char c) { if (x>width || y>height) return; @@ -285,7 +285,7 @@ ms6931_chr (struct lcd_logical_driver *drvthis, int x, int y, char c) // switches the backlight on/off // MODULE_EXPORT void -ms6931_backlight (struct lcd_logical_driver *drvthis, int on) +ms6931_backlight (Driver *drvthis, int on) { static int saved_state = -1; static char out[3] = { '~', 0x01, 0 }; @@ -309,7 +309,7 @@ ms6931_backlight (struct lcd_logical_driver *drvthis, int on) // sets the cursor // MODULE_EXPORT void -ms6931_cursor (struct lcd_logical_driver *drvthis, int x, int y, int state) +ms6931_cursor (Driver *drvthis, int x, int y, int state) { static int saved_state = -1; static char out[3] = { '~', 0x23, 0 }; @@ -339,7 +339,7 @@ ms6931_cursor (struct lcd_logical_driver *drvthis, int x, int y, int state) // Clears the framebuffer and the display // MODULE_EXPORT void -ms6931_clear (struct lcd_logical_driver *drvthis) +ms6931_clear (Driver *drvthis) { // ms6931_write("~\042", 2); memset (framebuf, ' ', width * height); @@ -350,7 +350,7 @@ ms6931_clear (struct lcd_logical_driver *drvthis) // upper-left is (1,1), and the lower right should be (16,2). // MODULE_EXPORT void -ms6931_string (struct lcd_logical_driver *drvthis, int x, int y, char string[]) +ms6931_string (Driver *drvthis, int x, int y, char string[]) { int i; @@ -371,7 +371,7 @@ ms6931_string (struct lcd_logical_driver *drvthis, int x, int y, char string[]) // draw a horizontal bar (vertical makes no sense on ms-6931 // MODULE_EXPORT void -ms6931_hbar (struct lcd_logical_driver *drvthis, int x, int y, int len, int promille, int pattern) +ms6931_hbar (Driver *drvthis, int x, int y, int len, int promille, int pattern) { char bar[17]; int max = width - x; @@ -399,7 +399,7 @@ report(RPT_DEBUG, "ms6931_hbar: len=%d, size=%d, promile=%d", len, size, promill // Does the heartbeat... // MODULE_EXPORT void -ms6931_heartbeat (struct lcd_logical_driver *drvthis, int state) +ms6931_heartbeat (Driver *drvthis, int state) { static int timer = 0; char whichChar; @@ -423,7 +423,7 @@ ms6931_heartbeat (struct lcd_logical_driver *drvthis, int state) // MODULE_EXPORT char -ms6931_get_key (struct lcd_logical_driver *drvthis) +ms6931_get_key (Driver *drvthis) { int ret; char buf; diff --git a/server/drivers/ms6931.h b/server/drivers/ms6931.h index 03cadf0..1874e33 100644 --- a/server/drivers/ms6931.h +++ b/server/drivers/ms6931.h @@ -33,21 +33,21 @@ #define MS6931_DEF_CELL_HEIGHT 8 -MODULE_EXPORT int ms6931_init (struct lcd_logical_driver *drvthis, char *args); -MODULE_EXPORT void ms6931_close (struct lcd_logical_driver *drvthis); -MODULE_EXPORT int ms6931_width (struct lcd_logical_driver *drvthis); -MODULE_EXPORT int ms6931_height(struct lcd_logical_driver *drvthis); -MODULE_EXPORT void ms6931_flush (struct lcd_logical_driver *drvthis); +MODULE_EXPORT int ms6931_init (Driver *drvthis, char *args); +MODULE_EXPORT void ms6931_close (Driver *drvthis); +MODULE_EXPORT int ms6931_width (Driver *drvthis); +MODULE_EXPORT int ms6931_height(Driver *drvthis); +MODULE_EXPORT void ms6931_flush (Driver *drvthis); -MODULE_EXPORT int ms6931_get_contrast (struct lcd_logical_driver *drvthis); -MODULE_EXPORT void ms6931_set_contrast (struct lcd_logical_driver *drvthis, int promille); -MODULE_EXPORT void ms6931_backlight (struct lcd_logical_driver *drvthis, int on); +MODULE_EXPORT int ms6931_get_contrast (Driver *drvthis); +MODULE_EXPORT void ms6931_set_contrast (Driver *drvthis, int promille); +MODULE_EXPORT void ms6931_backlight (Driver *drvthis, int on); -MODULE_EXPORT void ms6931_chr (struct lcd_logical_driver *drvthis, int x, int y, char c); -MODULE_EXPORT void ms6931_clear (struct lcd_logical_driver *drvthis); -MODULE_EXPORT void ms6931_string (struct lcd_logical_driver *drvthis, int x, int y, char string[]); -MODULE_EXPORT char ms6931_get_key (struct lcd_logical_driver *drvthis); -MODULE_EXPORT void ms6931_hbar (struct lcd_logical_driver *drvthis, int x, int y, int len, int promille, int pattern); -MODULE_EXPORT void ms6931_heartbeat (struct lcd_logical_driver *drvthis, int state); +MODULE_EXPORT void ms6931_chr (Driver *drvthis, int x, int y, char c); +MODULE_EXPORT void ms6931_clear (Driver *drvthis); +MODULE_EXPORT void ms6931_string (Driver *drvthis, int x, int y, char string[]); +MODULE_EXPORT char ms6931_get_key (Driver *drvthis); +MODULE_EXPORT void ms6931_hbar (Driver *drvthis, int x, int y, int len, int promille, int pattern); +MODULE_EXPORT void ms6931_heartbeat (Driver *drvthis, int state); #endif /* ndef MS6931_H */ diff --git a/server/drivers/mtc_s16209x.c b/server/drivers/mtc_s16209x.c index 663b098..2c61941 100644 --- a/server/drivers/mtc_s16209x.c +++ b/server/drivers/mtc_s16209x.c @@ -57,6 +57,9 @@ //#include "shared/str.h" #include "report.h" +#define MTC_DEFAULT_DEVICE "/dev/lcd" +#define MTC_DEFAULT_BRIGHTNESS 255 + int my_error_handle; char lcd_open[] = "\xFE\x28"; // From OpenCommPort() @@ -80,39 +83,6 @@ char lcd_showunderline[] = "\xFE\x0E"; // From Show_UnderLine() char lcd_hideunderline[] = "\xFE\x0B"; // From Hide_UnderLine() -int -get_args (char **argv, char *str, int max_args) -{ - char *delimiters = " \n\0"; - char *item; - int i = 0; - - if (!argv) - return -1; - if (!str) - return 0; - if (max_args < 1) - return 0; - - //debug("get_args(%i): string=%s\n", max_args, str); - - // Parse the command line... - for (item = strtok (str, delimiters); item; - item = strtok (NULL, delimiters)) - { - //debug("get_args: item=%s\n", item); - if (i < max_args) - { - argv[i] = item; - i++; - } - else - return i; - } - - return i; -} - static int custom = 0; typedef enum @@ -147,113 +117,50 @@ MODULE_EXPORT char *symbol_prefix = "MTC_S16209X_"; MODULE_EXPORT int MTC_S16209X_init (Driver * drvthis, char *args) { - char *argv[64]; - int argc; struct termios portset; - int i; + char device[256] = MTC_DEFAULT_DEVICE; #ifdef CAN_REBOOT_LCD int reboot = 0; #endif // CAN_REBOOT_LCD - char device[256] = "/dev/lcd"; - #ifdef CAN_CONTROL_BACKLIGHT int tmp; int backlight_brightness = 255; #endif // CAN_CONTROL_BACKLIGHT - //debug("MTC_S16209X_init: Args(all): %s\n", args); + /* Read config file */ - argc = get_args (argv, args, 64); + /* What device should be used */ + strncpy(device, drvthis->config_get_string(drvthis->name, "Device", 0, + MTC_DEFAULT_DEVICE), sizeof(device)); + device[sizeof(device)-1] = '\0'; - /* - - for(i=0; i argc) - { - fprintf (stderr, "MTC_S16209X_init: %s requires an argument\n", - argv[i]); - return -1; - } - strcpy (device, argv[++i]); - } - #ifdef CAN_CONTROL_BACKLIGHT - else if (0 == strcmp (argv[i], "-b") || - 0 == strcmp (argv[i], "--brightness")) - { - if (i + 1 > argc) - { - fprintf (stderr, "MTC_S16209X_init: %s requires an argument\n", - argv[i]); - return -1; - } - tmp = atoi (argv[++i]); - if ((tmp < 0) || (tmp > 255)) - { - fprintf (stderr, - "MTC_S16209X_init: %s argument must between 0 and 255. Using default value.\n", - argv[i]); - } - else - backlight_brightness = tmp; - } + /* Which backlight brightness */ + backlight_brightness = drvthis->config_get_int ( drvthis->name , "Brightness" , 0 , MTC_DEFAULT_BRIGHTNESS); + if ((backlight_brightness < 0) || (backlight_brightness > 255)) { + report (RPT_WARNING, "MTC_S16209X_init: Brightness must be between 0 and 255. Using default value.\n"); + backlight_brightness = MTC_DEFAULT_BRIGHTNESS; + } #endif // CAN_CONTROL_BACKLIGHT - else if (0 == strcmp (argv[i], "-h") || 0 == strcmp (argv[i], "--help")) - { - printf ("LCDproc MTC_S16209X LCD driver\n" - "\t-d\t--device\tSelect the output device to use [/dev/lcd]\n" - "\t-t\t--type\t\tSelect the LCD type (size) [16x2]\n" - -#ifdef CAN_CONTROL_BACKLIGHT - "\t-b\t--brightness\tSet the initial brightness [255]\n" -#endif // CAN_CONTROL_BACKLIGHT - - "\t-r\t--reboot\tReinitialize the LCD's BIOS\n" - "\t-h\t--help\t\tShow this help information\n"); - return -1; - } - #ifdef CAN_REBOOT_LCD - else if (0 == strcmp (argv[i], "-r") || - 0 == strcmp (argv[i], "--reboot")) - { - printf ("LCDd: rebooting MTC_S16209X LCD...\n"); - reboot = 1; - } + /* Reboot display? */ + reboot = drvthis->config_get_bool( drvthis->name , "Reboot", 0, 0); + if (reboot) + report (RPT_INFO, "LCDd: rebooting MTC_S16209x LCD...\n"); #endif // CAN_REBOOT_LCD - else - { - printf ("Invalid parameter: %s\n", argv[i]); - } - - } - + /* End of config file parsing */ + // Set up io port correctly, and open it... fd = open (device, O_RDWR | O_NOCTTY | O_NDELAY); - if (fd == -1) - { - fprintf (stderr, "MTC_S16209X_init: failed (%s)\n", strerror (errno)); - return -1; - } - /* - else - fprintf (stderr, "MTC_S16209X_init: opened device %s\n", device); - */ + if (fd == -1) { + report(RPT_ERR, "MTC_S16209X_init: open(%s) failed (%s)\n", device, strerror(errno)); + return -1; + } + report(RPT_DEBUG, "MTC_S16209X_init: opened device %s\n", device); fcntl (fd, F_SETFL, 0); // Set port for reading tcgetattr (fd, &portset); // Get current port attributes @@ -277,19 +184,14 @@ MTC_S16209X_init (Driver * drvthis, char *args) my_error_handle = write (fd, lcd_open, sizeof (lcd_open)); // Send the init string to the LCD if (my_error_handle < 0) - { - fprintf (stderr, "MTC_S16209X_init(): write(lcd_open) failed (%s)\n", - strerror (errno)); - } + report(RPT_WARNING, "MTC_S16209X_init(): write(lcd_open) failed (%s)\n", + strerror(errno)); my_error_handle = write (fd, lcd_clearscreen, sizeof (lcd_clearscreen)); // Clear the LCD, unbuffered if (my_error_handle < 0) - { - fprintf (stderr, - "MTC_S16209X_init(): write(lcd_clearscreen) failed (%s)\n", - strerror (errno)); - } + report(RPT_WARNING, "MTC_S16209X_init(): write(lcd_clearscreen) failed (%s)\n", + strerror(errno)); return 0; } @@ -308,8 +210,8 @@ MTC_S16209X_close (Driver * drvthis) flock (fd, LOCK_UN); if (my_error_handle < 0) - fprintf (stderr, - "MTC_S16209X_close(): Write() failed! (%s)\n", strerror (errno)); + report(RPT_WARNING, "MTC_S16209X_close(): Write() failed! (%s)\n", + strerror(errno)); usleep (10); @@ -362,8 +264,8 @@ MTC_S16209X_flush (Driver * drvthis) flock (fd, LOCK_UN); if (my_error_handle < 0) - fprintf (stderr, "MTC_S16209X_flush(): Couldn't write 1st line (%s)\n", - strerror (errno)); + report(RPT_WARNING, "MTC_S16209X_flush(): Couldn't write 1st line (%s)\n", + strerror(errno)); // 2nd step: flush 2nd line: flock (fd, LOCK_EX); @@ -372,8 +274,8 @@ MTC_S16209X_flush (Driver * drvthis) flock (fd, LOCK_UN); if (my_error_handle < 0) - fprintf (stderr, "MTC_S16209X_flush(): Couldn't write 2nd line (%s)\n", - strerror (errno)); + report(RPT_WARNING, "MTC_S16209X_flush(): Couldn't write 2nd line (%s)\n", + strerror(errno)); // Wait until serial port cache has been emptied (else clients gets // the message to bugger off after a while) @@ -422,8 +324,8 @@ MTC_S16209X_hidecursor () flock (fd, LOCK_UN); if (my_error_handle < 0) - fprintf (stderr, "MTC_S16209X_hidecursor(): Write failed: %s\n", - strerror (errno)); + report(RPT_WARNING, "MTC_S16209X_hidecursor(): Write failed: %s\n", + strerror(errno)); } #endif // THIS_PART_SHOULD_BE_REMOVED diff --git a/server/drivers/sed1330.c b/server/drivers/sed1330.c index 2b357c5..e61aa80 100644 --- a/server/drivers/sed1330.c +++ b/server/drivers/sed1330.c @@ -466,8 +466,10 @@ sed1330_init( Driver * drvthis, char *args ) port_access(p->port+1); port_access(p->port+2); - if (timing_init() == -1) + if (timing_init() == -1) { + report(RPT_ERR, "timing_init: failed (%s)\n", strerror(errno)); return -1; + } // INITIALIZE THE LCD // End reset-state diff --git a/server/drivers/sed1520.c b/server/drivers/sed1520.c index 1fa07ab..fb5b5eb 100644 --- a/server/drivers/sed1520.c +++ b/server/drivers/sed1520.c @@ -51,6 +51,7 @@ #include "shared/str.h" #include "lcd.h" #include "sed1520.h" +#include "report.h" unsigned int sed1520_lptport = LPTPORT; @@ -148,67 +149,17 @@ drawchar2fb (int x, int y, unsigned char z) MODULE_EXPORT int sed1520_init (Driver *drvthis, char *args) { - char *argv[64], *str; - int argc, i; + /* Read config file */ - if (args) - if ((str = (char *) malloc (strlen (args) + 1))) - strcpy (str, args); - else - { - fprintf (stderr, "Error mallocing\n"); - return -1; - } - else - str = NULL; + /* What port to use */ + sed1520_lptport = drvthis->config_get_int(drvthis->name, "Port", 0, LPTPORT); + + /* End of config file parsing */ - argc = get_args (argv, args, 64); - for (i = 0; i < argc; i++) - { - if (0 == strcmp (argv[i], "-p") - || 0 == strcmp (argv[i], "--port\0")) - { - if (i + 1 >= argc) - { - fprintf (stderr, - "sed1520_init: %s requires an argument\n", - argv[i]); - return -1; - } - else - { - int myport; - if (sscanf (argv[i + 1], "%i", &myport) != 1) - { - fprintf (stderr, - "sed1520_init: Couldn't read port address -" - " using default value 0x%x\n", sed1520_lptport); - return -1; - } - else - { - sed1520_lptport = myport; - ++i; - } - } - } - else if (0 == strcmp (argv[i], "-h") - || 0 == strcmp (argv[i], "--help")) - { - //int i; - printf - ("LCDproc sed1520 driver\n\t-p n\t--port n\tSelect the output device to use port n\n"); - printf ("put the options in quotes like this: '-p 0x278'\n"); - printf ("\t-h\t--help\t\tShow this help information\n"); - return -1; - } - } - - // driver->wid = 20; - // driver->hgt = 4; - - if (timing_init() == -1) - return -1; + if (timing_init() == -1) { + report(RPT_ERR, "timing_init: failed (%s)\n", strerror(errno)); + return -1; + } // Allocate our framebuffer framebuf = malloc (122 * 4); diff --git a/server/drivers/stv5730.c b/server/drivers/stv5730.c index 7ba35dc..9e549c8 100644 --- a/server/drivers/stv5730.c +++ b/server/drivers/stv5730.c @@ -36,6 +36,7 @@ #include "shared/str.h" #include "lcd.h" #include "stv5730.h" +#include "report.h" #ifndef LPTPORT @@ -282,77 +283,32 @@ stv5730_drawchar2fb (int x, int y, unsigned char z) MODULE_EXPORT int stv5730_init (Driver *drvthis, char *args) { - char *argv[64], *str; - int argc, i; + int i; - if (args) - if ((str = (char *) malloc (strlen (args) + 1))) - strcpy (str, args); - else - { - fprintf (stderr, "Error mallocing\n"); - return -1; - } - else - str = NULL; + /* Read config file */ - argc = get_args (argv, args, 64); - for (i = 0; i < argc; i++) - { - if (0 == strcmp (argv[i], "-p") - || 0 == strcmp (argv[i], "--port\0")) - { - if (i + 1 >= argc) - { - fprintf (stderr, - "stv5730_init: %s requires an argument\n", - argv[i]); - return -1; - } - else - { - int myport; - if (sscanf (argv[i + 1], "%i", &myport) != 1) - { - fprintf (stderr, - "stv5730_init: Couldn't read port address -" - " using default value 0x%x\n", - stv5730_lptport); - return -1; - } - else - { - stv5730_lptport = myport; - ++i; - } - } - } - else if (0 == strcmp (argv[i], "-h") - || 0 == strcmp (argv[i], "--help")) - { - //int i; - printf - ("LCDproc stv5730 driver\n\t-p n\t--port n\tSelect the output device to use port n\n"); - printf ("put the options in quotes like this: '-p 0x278'\n"); - printf ("\t-h\t--help\t\tShow this help information\n"); - return -1; - } - } + /* What port to use */ + stv5730_lptport = drvthis->config_get_int(drvthis->name, "Port", 0, LPTPORT); + + /* End of config file parsing */ - if (timing_init() == -1) - return -1; + if (timing_init() == -1) { + report(RPT_ERR, "timing_init: failed (%s)\n", strerror(errno)); + return -1; + } // Initialize the Port and the stv5730 if (port_access (stv5730_lptport) || port_access (stv5730_lptport + 1)) { - printf - ("Couldn't get IO-permission for 0x%X ! Are we running as root ?\n ", - stv5730_lptport); return -1; + report(RPT_ERR, + "Couldn't get IO-permission for 0x%X ! Are we running as root ?\n ", + stv5730_lptport); + return -1; }; if (stv5730_detect ()) { - printf ("No STV5730 hardware found at 0x%X !\n ", stv5730_lptport); + report(RPT_ERR, "No STV5730 hardware found at 0x%X !\n ", stv5730_lptport); return -1; }; @@ -371,12 +327,12 @@ stv5730_init (Driver *drvthis, char *args) stv5730_write16bit (STV5730_REG_CONTROL); stv5730_write16bit (0x1FF4); - printf ("Detecting Video Signal: "); + report(RPT_INFO, "Detecting Video Signal: "); usleep (50000); if (stv5730_is_mute ()) { - printf ("No Video Signal found, using full page mode.\n"); + report(RPT_INFO, "No Video Signal found, using full page mode.\n"); // Setup Mode + Control for full page mode stv5730_charattrib = STV5730_ATTRIB; stv5730_write16bit (STV5730_REG_MODE); @@ -390,11 +346,10 @@ stv5730_init (Driver *drvthis, char *args) stv5730_write16bit (0x1ED4); #endif - } else { - printf ("Video Signal found, using mixed mode (B&W).\n"); + report(RPT_INFO, "Video Signal found, using mixed mode (B&W).\n"); // Setup Mode + Control for mixed mode, disable color stv5730_charattrib = 0; stv5730_write16bit (STV5730_REG_MODE); @@ -429,7 +384,7 @@ stv5730_init (Driver *drvthis, char *args) stv5730_write16bit (0x10C0); } - // Alocate our own framebuffer + // Allocate our own framebuffer stv5730_framebuf = malloc (STV5730_WID * STV5730_HGT); if (!stv5730_framebuf) { diff --git a/server/drivers/svgalib_drv.h b/server/drivers/svgalib_drv.h index f21a8e6..ef10c2e 100644 --- a/server/drivers/svgalib_drv.h +++ b/server/drivers/svgalib_drv.h @@ -1,7 +1,7 @@ #ifndef LCD_SVGALIB_H #define LCD_SVGALIB_H -MODULE_EXPORT int svgalib_drv_init (Driver *driver, char *args); +MODULE_EXPORT int svgalib_drv_init (Driver *drvthis, char *args); MODULE_EXPORT void svgalib_drv_close (Driver *drvthis); MODULE_EXPORT int svgalib_drv_width (Driver *drvthis); MODULE_EXPORT int svgalib_drv_height (Driver *drvthis); diff --git a/server/drivers/text.c b/server/drivers/text.c index a10b0c3..5253e8c 100644 --- a/server/drivers/text.c +++ b/server/drivers/text.c @@ -190,9 +190,7 @@ text_chr (Driver *drvthis, int x, int y, char c) MODULE_EXPORT void text_set_contrast (Driver *drvthis, int promille) { - /* - printf("Contrast: %d\n", promille); - */ + debug(RPT_DEBUG, "Contrast: %d\n", promille); } ///////////////////////////////////////////////////////////////// @@ -203,15 +201,11 @@ text_backlight (Driver *drvthis, int on) { //PrivateData * p = (PrivateData*) drvthis->private_data; -/* - if(on) - { - printf("Backlight ON\n"); + if(on) { + debug(RPT_DEBUG, "Backlight ON\n"); } - else - { - printf("Backlight OFF\n"); + else { + debug(RPT_DEBUG, "Backlight OFF\n"); } -*/ } diff --git a/server/drivers/timing.h b/server/drivers/timing.h index 6ebdaf9..a4c66b8 100644 --- a/server/drivers/timing.h +++ b/server/drivers/timing.h @@ -125,7 +125,6 @@ static inline int timing_init() { struct sched_param param; param.sched_priority=1; if (( sched_setscheduler(0, SCHED_RR, ¶m)) == -1) { - fprintf (stderr, "timing_init: failed (%s)\n", strerror (errno)); return -1; } } diff --git a/server/drivers/wirz-sli.c b/server/drivers/wirz-sli.c index 4bbcc68..7f4c320 100644 --- a/server/drivers/wirz-sli.c +++ b/server/drivers/wirz-sli.c @@ -19,10 +19,13 @@ #include "lcd.h" #include "wirz-sli.h" //#include "drv_base.h" +#include "report.h" #include "shared/debug.h" #include "shared/str.h" +#define SLI_DEFAULT_DEVICE "/dev/lcd" + static int custom = 0; typedef enum { hbar = 1, @@ -49,74 +52,44 @@ MODULE_EXPORT char *symbol_prefix = "sli_"; MODULE_EXPORT int sli_init (Driver *drvthis, char *args) { - char *argv[64]; - int argc; struct termios portset; - int i; - int tmp; char out[2]; - char device[256] = "/dev/lcd"; + char device[256] = WIRZ_DEFAULT_DEVICE; int speed = B19200; - //debug("sli_init: Args(all): %s\n", args); + /* Read config file */ - argc = get_args (argv, args, 64); - - /* - for(i=0; i argc) { - fprintf (stderr, "sli_init: %s requires an argument\n", argv[i]); - return -1; - } - strcpy (device, argv[++i]); - } else if (0 == strcmp (argv[i], "-s") || 0 == strcmp (argv[i], "--speed")) { - if (i + 1 > argc) { - fprintf (stderr, "sli_init: %s requires an argument\n", argv[i]); - return -1; - } - tmp = atoi (argv[++i]); - if (tmp == 1200) - speed = B1200; - else if (tmp == 2400) - speed = B2400; - else if (tmp == 9600) - speed = B9600; - else if (tmp == 19200) - speed = B19200; - else if (tmp == 38400) - speed = B38400; - else if (tmp == 57600) - speed = B57600; - else if (tmp == 115200) - speed = B115200; - else { - fprintf (stderr, "sli_init: %s argument must be 1200, 2400, 9600, 19200, 38400, 57600, or 115200. Using default value (19200).\n", argv[i]); - } - } else if (0 == strcmp (argv[i], "-h") || 0 == strcmp (argv[i], "--help")) { - printf ("LCDproc Wirz SLI LCD driver\n" "\t-d\t--device\tSelect the output device to use [/dev/lcd]\n" "\t-s\t--speed\t\tSet the communication speed [19200]\n" "\t-h\t--help\t\tShow this help information\n"); - return -1; - } else { - printf ("Invalid parameter: %s\n", argv[i]); - } + /* What device should be used */ + strncpy(device, drvthis->config_get_string(drvthis->name, "Device", 0, + SLI_DEFAULT_DEVICE), sizeof(device)); + device[sizeof(device)-1] = '\0'; + /* What speed to use */ + speed = drvthis->config_get_int(drvthis->name, "Speed", 0, 19200); + + if (speed == 1200) speed = B1200; + else if (speed == 2400) speed = B2400; + else if (speed == 9600) speed = B9600; + else if (speed == 19200) speed = B19200; + else if (speed == 38400) speed = B38400; + else if (speed == 57600) speed = B57600; + else if (speed == 115200) speed = B115200; + else { + report(RPT_WARNING, "sli: Illegal speed: %d. Must be one of 1200, 2400, 9600, 19200, 38400, 57600, or 115200. Using default.\n", speed); + speed = B19200; } + /* End of config file parsing */ + // Set up io port correctly, and open it... fd = open (device, O_RDWR | O_NOCTTY | O_NDELAY); if (fd == -1) { - fprintf (stderr, "sli_init: failed (%s)\n", strerror (errno)); + report(RPT_ERR, "sli_init: open(%s) failed (%s)\n", device, strerror (errno)); return -1; } - //else fprintf(stderr, "sli_init: opened device %s\n", device); + report(RPT_DEBUG, "sli_init: opened device %s\n", device); + tcgetattr (fd, &portset); // We use RAW mode @@ -142,10 +115,10 @@ sli_init (Driver *drvthis, char *args) /* Initialize SLI using autobaud detection, and then turn off cursor and clear screen */ - usleep (150000); /* 150ms delay to allow SLI to power on */ - out[0] = 13; /* CR for SLI autobaud */ + usleep (150000); /* 150ms delay to allow SLI to power on */ + out[0] = 13; /* CR for SLI autobaud */ write (fd, out, 1); - usleep (3000); /* 3ms delay.. wait for it to autobaud */ + usleep (3000); /* 3ms delay.. wait for it to autobaud */ out[0] = 0x0FE; out[1] = 0x00C; /* No cursor */ write (fd, out, 2);