From d64dcf7e115ec0898383c1843b7b0cceaf400110 Mon Sep 17 00:00:00 2001 From: marschap Date: Wed, 26 Dec 2007 15:40:58 +0000 Subject: [PATCH] more complete hd44780 initialization; a bit more dox; typo fixes in docs --- ChangeLog | 1 + docs/lcdproc-user/drivers/hd44780.docbook | 4 ++-- server/drivers/hd44780-drivers.h | 28 +++++++++++++---------- server/drivers/hd44780.c | 20 +++++++++++----- 4 files changed, 33 insertions(+), 20 deletions(-) diff --git a/ChangeLog b/ChangeLog index 439da9e..a8fbc96 100644 --- a/ChangeLog +++ b/ChangeLog @@ -43,6 +43,7 @@ v.0.5dev (ongoing development) + hd44780 driver: new ConnectionType ftdi (Thomas Jarosch) * shuttleVFD driver: fix VendorID, support newer models (Miska Sulander) + i2500vfd driver for a graphocal Noritake VFD (Thomas Jarosch) + * hd44780 driver: more complete initialization (idea by Pierre Ossman) v.0.5.2 * fix switching on/off the Load screen in lcdproc client using the menu diff --git a/docs/lcdproc-user/drivers/hd44780.docbook b/docs/lcdproc-user/drivers/hd44780.docbook index 2170cb8..c09bb18 100644 --- a/docs/lcdproc-user/drivers/hd44780.docbook +++ b/docs/lcdproc-user/drivers/hd44780.docbook @@ -980,7 +980,7 @@ This type of connection should work with winamp. nSTRB - (1) + 1 EN 6 @@ -2128,7 +2128,7 @@ The board, driven by the bwctusb connection type, does neither support a keypad for input, nor more than one single-controller display, nor does it allow setting the backlight or brightness. But you can set the display's contrast using software -(see the Constrast= configuration parameter). +(see the Contrast= configuration parameter). diff --git a/server/drivers/hd44780-drivers.h b/server/drivers/hd44780-drivers.h index 0fec9a1..61f09bd 100644 --- a/server/drivers/hd44780-drivers.h +++ b/server/drivers/hd44780-drivers.h @@ -2,9 +2,9 @@ * Interface to low-level driver types, headers and names. * * To add support for a new driver in this file: - * \li 1. include your header file - * \li 2. Add a new connectionType - * \li 3. Add an entry in the \c ConnectionMapping structure + * -# include your header file + * -# Add a new connectionType + * -# Add an entry in the \c ConnectionMapping structure */ #ifndef HD44780_DRIVERS_H @@ -32,26 +32,28 @@ // add new connection type header files here -// connectionType enumerator: -// - string to identify connection in config file -// - connection type identifier -// - interface type -// - initialisation function +/** connectionType mapping table: + * - string to identify connection in config file + * - connection type identifier + * - interface type + * - initialisation function + */ static const ConnectionMapping connectionMapping[] = { #ifdef HAVE_PCSTYLE_LPT_CONTROL + /* parallel connection types */ { "4bit", HD44780_CT_4BIT, IF_TYPE_PARPORT, hd_init_4bit }, { "8bit", HD44780_CT_8BIT, IF_TYPE_PARPORT, hd_init_ext8bit }, { "serialLpt", HD44780_CT_SERIALLPT, IF_TYPE_PARPORT, hd_init_serialLpt }, { "winamp", HD44780_CT_WINAMP, IF_TYPE_PARPORT, hd_init_winamp }, #endif - /* Serial connectiontypes */ + /* serial connection types */ { "picanlcd", HD44780_CT_PICANLCD, IF_TYPE_SERIAL, hd_init_serial }, { "lcdserializer", HD44780_CT_LCDSERIALIZER, IF_TYPE_SERIAL, hd_init_serial }, { "los-panel", HD44780_CT_LOS_PANEL, IF_TYPE_SERIAL, hd_init_serial }, { "vdr-lcd", HD44780_CT_VDR_LCD, IF_TYPE_SERIAL, hd_init_serial }, { "vdr-wakeup", HD44780_CT_VDR_WAKEUP, IF_TYPE_SERIAL, hd_init_serial }, { "pertelian", HD44780_CT_PERTELIAN, IF_TYPE_SERIAL, hd_init_serial }, - /* End serial connectiontypes */ + /* USB connection types */ { "lis2", HD44780_CT_LIS2, IF_TYPE_USB, hd_init_lis2 }, { "mplay", HD44780_CT_MPLAY, IF_TYPE_USB, hd_init_lis2 }, #ifdef HAVE_LIBUSB @@ -61,11 +63,13 @@ static const ConnectionMapping connectionMapping[] = { #ifdef HAVE_LIBFTDI { "ftdi", HD44780_CT_FTDI, IF_TYPE_USB, hd_init_ftdi }, #endif + /* I2C connection types */ #ifdef HAVE_I2C { "i2c", HD44780_CT_I2C, IF_TYPE_I2C, hd_init_i2c }, #endif - // add new connection types and their string specifier here - // default, end of structure element (do not delete) + // add new connection types here + // .... + // default, end of structure element (do not delete) { NULL, HD44780_CT_UNKNOWN, IF_TYPE_UNKNOWN, NULL } }; diff --git a/server/drivers/hd44780.c b/server/drivers/hd44780.c index 09c0d32..d89be0c 100644 --- a/server/drivers/hd44780.c +++ b/server/drivers/hd44780.c @@ -456,16 +456,20 @@ HD44780_init(Driver *drvthis) /** - * Common initialisation sequence - sets cursor off and not blinking, - * clear display and homecursor - * Does not set twoline mode nor small characters (5x8). The init function of - * the connectiontype should do this. + * Common initialisation sequence: + * - set twoline mode, small (5x8) charactersi & 4- or 8-bit mode + * - set display on & cursor off, not blinking, + * - set output mode to lefto-to-right & turn off display scolling + * - clear display & move cursor home + * . + * \param p Pointer to PrivateData structure. + * \param if_bit Command bits for 4- resp. 8-bit mode */ void common_init(PrivateData *p, unsigned char if_bit) { if (p->ext_mode) { - // Set up extended mode */ + // Set up extended mode p->hd44780_functions->senddata(p, 0, RS_INSTR, FUNCSET | if_bit | TWOLINE | SMALLCHAR | EXTREG); p->hd44780_functions->uPause(p, 40); p->hd44780_functions->senddata(p, 0, RS_INSTR, EXTMODESET | FOURLINE); @@ -475,6 +479,8 @@ common_init(PrivateData *p, unsigned char if_bit) p->hd44780_functions->uPause(p, 40); p->hd44780_functions->senddata(p, 0, RS_INSTR, ONOFFCTRL | DISPON | CURSOROFF | CURSORNOBLINK); p->hd44780_functions->uPause(p, 40); + p->hd44780_functions->senddata(p, 0, RS_INSTR, ENTRYMODE | E_MOVERIGHT | NOSCROLL); + p->hd44780_functions->uPause(p, 40); p->hd44780_functions->senddata(p, 0, RS_INSTR, CLEAR); p->hd44780_functions->uPause(p, 1600); p->hd44780_functions->senddata(p, 0, RS_INSTR, HOMECURSOR); @@ -483,7 +489,9 @@ common_init(PrivateData *p, unsigned char if_bit) /** - * Delay a number of microseconds + * Delay a number of microseconds. + * \param p Pointer to PrivateData structure. + * \param usecs Number of micro-seconds to sleep. */ void uPause(PrivateData *p, int usecs)