mirror of
https://github.com/netfun2000/lcd4linux.git
synced 2026-02-27 09:44:34 +08:00
new driver 'HD44780-I2C'
git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@739 3ae390bd-cb1e-0410-b409-cd5a39f66f1f
This commit is contained in:
@@ -449,6 +449,9 @@
|
||||
/* NULL driver */
|
||||
#undef WITH_NULL
|
||||
|
||||
/* parport bus driver */
|
||||
#undef WITH_PARPORT
|
||||
|
||||
/* PNG driver */
|
||||
#undef WITH_PNG
|
||||
|
||||
@@ -464,6 +467,9 @@
|
||||
/* serdisplib driver */
|
||||
#undef WITH_SERDISPLIB
|
||||
|
||||
/* serial bus driver */
|
||||
#undef WITH_SERIAL
|
||||
|
||||
/* SimpleLCD driver */
|
||||
#undef WITH_SIMPLELCD
|
||||
|
||||
|
||||
@@ -7272,6 +7272,9 @@ for driver in $drivers; do
|
||||
HD44780)
|
||||
HD44780=$val
|
||||
;;
|
||||
HD44780-I2C)
|
||||
HD44780_I2C=$val
|
||||
;;
|
||||
LCD2USB)
|
||||
LCD2USB=$val
|
||||
;;
|
||||
@@ -7468,6 +7471,18 @@ _ACEOF
|
||||
|
||||
fi
|
||||
|
||||
if test "$HD44780_I2C" = "yes"; then
|
||||
TEXT="yes"
|
||||
I2C="yes"
|
||||
GPIO="yes"
|
||||
DRIVERS="$DRIVERS drv_HD44780.o"
|
||||
|
||||
cat >>confdefs.h <<\_ACEOF
|
||||
#define WITH_HD44780 1
|
||||
_ACEOF
|
||||
|
||||
fi
|
||||
|
||||
if test "$LCD2USB" = "yes"; then
|
||||
if test "$has_usb" = "true"; then
|
||||
TEXT="yes"
|
||||
@@ -7818,11 +7833,21 @@ fi
|
||||
# generic parport driver
|
||||
if test "$PARPORT" = "yes"; then
|
||||
DRIVERS="$DRIVERS drv_generic_parport.o"
|
||||
|
||||
cat >>confdefs.h <<\_ACEOF
|
||||
#define WITH_PARPORT 1
|
||||
_ACEOF
|
||||
|
||||
fi
|
||||
|
||||
# generic serial driver
|
||||
if test "$SERIAL" = "yes"; then
|
||||
DRIVERS="$DRIVERS drv_generic_serial.o"
|
||||
|
||||
cat >>confdefs.h <<\_ACEOF
|
||||
#define WITH_SERIAL 1
|
||||
_ACEOF
|
||||
|
||||
fi
|
||||
|
||||
# generic i2c driver
|
||||
|
||||
+13
@@ -110,6 +110,9 @@ for driver in $drivers; do
|
||||
HD44780)
|
||||
HD44780=$val
|
||||
;;
|
||||
HD44780-I2C)
|
||||
HD44780_I2C=$val
|
||||
;;
|
||||
LCD2USB)
|
||||
LCD2USB=$val
|
||||
;;
|
||||
@@ -272,6 +275,14 @@ if test "$HD44780" = "yes"; then
|
||||
AC_DEFINE(WITH_HD44780,1,[HD44780 driver])
|
||||
fi
|
||||
|
||||
if test "$HD44780_I2C" = "yes"; then
|
||||
TEXT="yes"
|
||||
I2C="yes"
|
||||
GPIO="yes"
|
||||
DRIVERS="$DRIVERS drv_HD44780.o"
|
||||
AC_DEFINE(WITH_HD44780,1,[HD44780 driver])
|
||||
fi
|
||||
|
||||
if test "$LCD2USB" = "yes"; then
|
||||
if test "$has_usb" = "true"; then
|
||||
TEXT="yes"
|
||||
@@ -516,11 +527,13 @@ fi
|
||||
# generic parport driver
|
||||
if test "$PARPORT" = "yes"; then
|
||||
DRIVERS="$DRIVERS drv_generic_parport.o"
|
||||
AC_DEFINE(WITH_PARPORT, 1, [parport bus driver])
|
||||
fi
|
||||
|
||||
# generic serial driver
|
||||
if test "$SERIAL" = "yes"; then
|
||||
DRIVERS="$DRIVERS drv_generic_serial.o"
|
||||
AC_DEFINE(WITH_SERIAL, 1, [serial bus driver])
|
||||
fi
|
||||
|
||||
# generic i2c driver
|
||||
|
||||
+53
-8
@@ -66,7 +66,10 @@
|
||||
#include "drv.h"
|
||||
#include "drv_generic_text.h"
|
||||
#include "drv_generic_gpio.h"
|
||||
|
||||
#ifdef WITH_PARPORT
|
||||
#include "drv_generic_parport.h"
|
||||
#endif
|
||||
|
||||
#ifdef WITH_I2C
|
||||
#include "drv_generic_i2c.h"
|
||||
@@ -80,10 +83,13 @@ static int Capabilities;
|
||||
|
||||
|
||||
/* Timings */
|
||||
#ifdef WITH_PARPORT
|
||||
static int T_CY, T_PW, T_AS, T_AH;
|
||||
static int T_POWER, T_INIT1, T_INIT2, T_EXEC, T_WRCG, T_CLEAR, T_HOME, T_ONOFF;
|
||||
static int T_GPO_ST, T_GPO_PW;
|
||||
static int T_POWER;
|
||||
#endif
|
||||
static int T_INIT1, T_INIT2, T_EXEC, T_WRCG, T_CLEAR, T_HOME, T_ONOFF;
|
||||
#ifdef WITH_PARPORT
|
||||
static int T_POWER, T_GPO_ST, T_GPO_PW;
|
||||
#endif
|
||||
|
||||
static int Bits = 0;
|
||||
static int numControllers = 0;
|
||||
@@ -100,9 +106,12 @@ static unsigned char SIGNAL_ENABLE;
|
||||
static unsigned char SIGNAL_ENABLE2;
|
||||
static unsigned char SIGNAL_ENABLE3;
|
||||
static unsigned char SIGNAL_ENABLE4;
|
||||
static unsigned char SIGNAL_BACKLIGHT;
|
||||
|
||||
static unsigned char SIGNAL_GPO;
|
||||
#ifdef WITH_PARPORT
|
||||
static unsigned char SIGNAL_BACKLIGHT;
|
||||
static unsigned char SIGNAL_POWER;
|
||||
#endif
|
||||
|
||||
/* maximum time to wait for the busy-flag (in usec) */
|
||||
#define MAX_BUSYFLAG_WAIT 10000
|
||||
@@ -111,11 +120,14 @@ static unsigned char SIGNAL_POWER;
|
||||
#define MAX_BUSYFLAG_ERRORS 20
|
||||
|
||||
/* flag for busy-waiting vs. busy flag checking */
|
||||
#ifdef WITH_PARPORT
|
||||
static int UseBusy = 0;
|
||||
#endif
|
||||
|
||||
/* buffer holding the GPO state */
|
||||
#ifdef WITH_PARPORT
|
||||
static unsigned char GPO = 0;
|
||||
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
int type;
|
||||
@@ -162,6 +174,8 @@ static void (*drv_HD_stop) (void);
|
||||
/*** parport dependant functions ***/
|
||||
/****************************************/
|
||||
|
||||
#ifdef WITH_PARPORT
|
||||
|
||||
static void drv_HD_PP_busy(const int controller)
|
||||
{
|
||||
static unsigned int errors = 0;
|
||||
@@ -658,6 +672,8 @@ static void drv_HD_PP_stop(void)
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef WITH_I2C
|
||||
|
||||
@@ -888,6 +904,8 @@ static void drv_HD_defchar(const int ascii, const unsigned char *matrix)
|
||||
}
|
||||
|
||||
|
||||
#ifdef WITH_PARPORT
|
||||
|
||||
static int drv_HD_backlight(int backlight)
|
||||
{
|
||||
if (!(Capabilities & CAP_BACKLIGHT))
|
||||
@@ -899,10 +917,12 @@ static int drv_HD_backlight(int backlight)
|
||||
backlight = 1;
|
||||
|
||||
drv_generic_parport_control(SIGNAL_BACKLIGHT, backlight ? SIGNAL_BACKLIGHT : 0);
|
||||
|
||||
|
||||
return backlight;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
static int drv_HD_brightness(int brightness)
|
||||
{
|
||||
@@ -925,6 +945,8 @@ static int drv_HD_brightness(int brightness)
|
||||
}
|
||||
|
||||
|
||||
#ifdef WITH_PARPORT
|
||||
|
||||
static int drv_HD_GPO(const int num, const int val)
|
||||
{
|
||||
int v;
|
||||
@@ -952,6 +974,10 @@ static int drv_HD_GPO(const int num, const int val)
|
||||
return v;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef WITH_PARPORT
|
||||
|
||||
static void drv_HD_LCM162_timer(void __attribute__ ((unused)) * notused)
|
||||
{
|
||||
@@ -981,6 +1007,8 @@ static void drv_HD_LCM162_timer(void __attribute__ ((unused)) * notused)
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
static int drv_HD_start(const char *section, const int quiet)
|
||||
{
|
||||
@@ -1018,14 +1046,23 @@ static int drv_HD_start(const char *section, const int quiet)
|
||||
}
|
||||
|
||||
if (strcasecmp(bus, "parport") == 0) {
|
||||
|
||||
#ifdef WITH_PARPORT
|
||||
info("%s: using parallel port", Name);
|
||||
Bus = BUS_PP;
|
||||
drv_HD_load = drv_HD_PP_load;
|
||||
drv_HD_command = drv_HD_PP_command;
|
||||
drv_HD_data = drv_HD_PP_data;
|
||||
drv_HD_stop = drv_HD_PP_stop;
|
||||
#else
|
||||
error("%s: %s.Bus '%s' from %s not available:", Name, section, bus, cfg_source());
|
||||
error("%s: lcd4linux was compiled without parport support!", Name);
|
||||
free(bus);
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
} else if (strcasecmp(bus, "i2c") == 0) {
|
||||
|
||||
#ifdef WITH_I2C
|
||||
info("%s: using I2C bus", Name);
|
||||
Bus = BUS_I2C;
|
||||
@@ -1152,6 +1189,7 @@ static int drv_HD_start(const char *section, const int quiet)
|
||||
drv_HD_command(allControllers, 0x03, T_HOME); /* return home */
|
||||
|
||||
/* maybe set backlight */
|
||||
#ifdef WITH_PARPORT
|
||||
if (Capabilities & CAP_BACKLIGHT) {
|
||||
int backlight;
|
||||
if (cfg_number(section, "Backlight", 0, 0, 1, &backlight) > 0) {
|
||||
@@ -1159,6 +1197,7 @@ static int drv_HD_start(const char *section, const int quiet)
|
||||
drv_HD_backlight(backlight);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* maybe set brightness */
|
||||
if (Capabilities & CAP_BRIGHTNESS) {
|
||||
@@ -1170,9 +1209,11 @@ static int drv_HD_start(const char *section, const int quiet)
|
||||
}
|
||||
|
||||
/* install keypad polling timer for LCM-162 */
|
||||
#ifdef WITH_PARPORT
|
||||
if (Capabilities & CAP_LCM162) {
|
||||
timer_add(drv_HD_LCM162_timer, NULL, 10, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!quiet) {
|
||||
char buffer[40];
|
||||
@@ -1192,6 +1233,7 @@ static int drv_HD_start(const char *section, const int quiet)
|
||||
/****************************************/
|
||||
|
||||
|
||||
#ifdef WITH_PARPORT
|
||||
static void plugin_backlight(RESULT * result, RESULT * arg1)
|
||||
{
|
||||
double backlight;
|
||||
@@ -1199,7 +1241,7 @@ static void plugin_backlight(RESULT * result, RESULT * arg1)
|
||||
backlight = drv_HD_backlight(R2N(arg1));
|
||||
SetResult(&result, R_NUMBER, &backlight);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static void plugin_brightness(RESULT * result, RESULT * arg1)
|
||||
{
|
||||
@@ -1257,8 +1299,9 @@ int drv_HD_init(const char *section, const int quiet)
|
||||
/* real worker functions */
|
||||
drv_generic_text_real_write = drv_HD_write;
|
||||
drv_generic_text_real_defchar = drv_HD_defchar;
|
||||
#ifdef WITH_PARPORT
|
||||
drv_generic_gpio_real_set = drv_HD_GPO;
|
||||
|
||||
#endif
|
||||
|
||||
/* start display */
|
||||
if ((ret = drv_HD_start(section, quiet)) != 0)
|
||||
@@ -1305,9 +1348,11 @@ int drv_HD_init(const char *section, const int quiet)
|
||||
widget_register(&wc);
|
||||
|
||||
/* register plugins */
|
||||
#ifdef WITH_PARPORT
|
||||
if (Capabilities & CAP_BACKLIGHT) {
|
||||
AddFunction("LCD::backlight", 1, plugin_backlight);
|
||||
}
|
||||
#endif
|
||||
if (Capabilities & CAP_BRIGHTNESS) {
|
||||
AddFunction("LCD::brightness", 1, plugin_brightness);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user