v0.5 kick-off
This commit is contained in:
@@ -6,40 +6,124 @@
|
||||
|
||||
enum ifWidth { IF_4bit, IF_8bit };
|
||||
|
||||
//void common_init (enum ifWidth ifwidth);
|
||||
void common_init ();
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
# if TIME_WITH_SYS_TIME
|
||||
# include <sys/time.h>
|
||||
# include <time.h>
|
||||
# else
|
||||
# if HAVE_SYS_TIME_H
|
||||
# include <sys/time.h>
|
||||
# else
|
||||
# include <time.h>
|
||||
# endif
|
||||
# endif
|
||||
|
||||
|
||||
//struct hwDependentFns;
|
||||
|
||||
// Maximum sizes of the keypad
|
||||
// DO NOT CHANGE THESE 2 VALUES, unless you change the functions too
|
||||
#define KEYPAD_MAXX 5
|
||||
#define KEYPAD_MAXY 11
|
||||
|
||||
typedef struct ConnectionMapping {
|
||||
char *name;
|
||||
int (*init_fn) (Driver *drvthis);
|
||||
const char *helpMsg;
|
||||
} ConnectionMapping;
|
||||
|
||||
typedef struct driver_private_data {
|
||||
|
||||
unsigned int port;
|
||||
|
||||
int width, height;
|
||||
int cellwidth, cellheight;
|
||||
|
||||
// The framebuffer
|
||||
char *framebuf;
|
||||
|
||||
// For incremental updates store last lcd contents
|
||||
char *lcd_contents;
|
||||
|
||||
// Connection type data
|
||||
int connectiontype_index;
|
||||
struct hwDependentFns *hd44780_functions;
|
||||
|
||||
// spanList[line number] = display line number is in
|
||||
int *spanList;
|
||||
int numLines;
|
||||
|
||||
// dispVOffset is a cumulative sized array of line numbers for each display.
|
||||
// use this to determine the vertical positioning on a given display
|
||||
int *dispVOffset;
|
||||
int numDisplays;
|
||||
|
||||
// dispSizes is the vertical size of each display. This is the same as the
|
||||
// input span list but is kept to save some cpu cycles.
|
||||
int *dispSizes;
|
||||
|
||||
// Keypad, backlight extended interface and delay options
|
||||
char have_keypad; // off by default
|
||||
char have_backlight; // off by default
|
||||
char extIF; // off by default
|
||||
int delayMult; // Delay multiplier for slow displays
|
||||
char delayBus; // Delay if the computer can send data too fast over
|
||||
// its bus to LPT port
|
||||
|
||||
// keyMapDirect contains an array of the ascii-codes that should be generated
|
||||
// when a directly connected key is pressed (not in matrix).
|
||||
char *keyMapDirect[KEYPAD_MAXX];
|
||||
|
||||
// keyMapMatrix contrains an array with arrays of the ascii-codes that should be generated
|
||||
// when a key in the matrix is pressed.
|
||||
char *keyMapMatrix[KEYPAD_MAXY][KEYPAD_MAXX];
|
||||
|
||||
char pressed_key;
|
||||
int pressed_key_repetitions;
|
||||
struct timeval pressed_key_time;
|
||||
|
||||
int stuckinputs;
|
||||
|
||||
int backlight_bit;
|
||||
|
||||
} PrivateData;
|
||||
|
||||
// Structures holding pointers to HD44780 specific functions
|
||||
typedef struct hwDependentFns {
|
||||
// microsec pauses
|
||||
void (*uPause) (int microSecondsTenths);
|
||||
void (*uPause) (PrivateData *p, int usecs);
|
||||
|
||||
// Senddata to the LCD
|
||||
// dispID - display to send data to (0 = all displays)
|
||||
// flags - data or instruction command (RS_DATA | RS_INSTR)
|
||||
// ch - character to display or instruction value
|
||||
void (*senddata) (unsigned char dispID, unsigned char flags, unsigned char ch);
|
||||
void (*senddata) (PrivateData *p, unsigned char dispID, unsigned char flags, unsigned char ch);
|
||||
|
||||
// Switch the backlight on or off
|
||||
// state - to be or not to be on
|
||||
void (*backlight) (unsigned char state);
|
||||
void (*backlight) (PrivateData *p, unsigned char state);
|
||||
|
||||
// Read the keypad
|
||||
// Ydata - the up to 11 bits that should be put on the Y side of the matrix
|
||||
// return - the up to 5 bits that are read out on the X side of the matrix
|
||||
unsigned char (*readkeypad) (unsigned int Ydata);
|
||||
unsigned char (*readkeypad) (PrivateData *p, unsigned int Ydata);
|
||||
|
||||
// Scan the keypad and return a scancode.
|
||||
// The code is the Yvalue in the high nibble and the Xvalue in the low nibble.
|
||||
// A subdriver should do only one of two things:
|
||||
// - set readkeypad; or
|
||||
// - override scankeypad.
|
||||
unsigned char (*scankeypad) ();
|
||||
unsigned char (*scankeypad) (PrivateData *p);
|
||||
|
||||
|
||||
} HD44780_functions; /* for want of a better name :-) */
|
||||
|
||||
extern HD44780_functions *hd44780_functions;
|
||||
|
||||
void common_init (PrivateData *p);
|
||||
|
||||
|
||||
// commands for senddata
|
||||
#define RS_DATA 0x00
|
||||
|
||||
Reference in New Issue
Block a user