WIP: configfile code from stable-0-4-3... #ifdef currently
This commit is contained in:
+176
-23
@@ -154,6 +154,19 @@ static int cellwidth = LCD_DEFAULT_CELLWIDTH;
|
|||||||
static int cellheight = LCD_DEFAULT_CELLHEIGHT;
|
static int cellheight = LCD_DEFAULT_CELLHEIGHT;
|
||||||
static int contrast = DEFAULT_CONTRAST;
|
static int contrast = DEFAULT_CONTRAST;
|
||||||
|
|
||||||
|
#ifdef CONFIG_FILE
|
||||||
|
static int backlightenabled = DEFAULT_BACKLIGHT;
|
||||||
|
|
||||||
|
static int backlight_state = -1;
|
||||||
|
static int output_state = -1;
|
||||||
|
|
||||||
|
static char pause_key = MTXORB_DEFAULT_PAUSE_KEY;
|
||||||
|
static char back_key = MTXORB_DEFAULT_BACK_KEY;
|
||||||
|
static char forward_key = MTXORB_DEFAULT_FORWARD_KEY;
|
||||||
|
static char main_menu_key = MTXORB_DEFAULT_MAIN_MENU_KEY;
|
||||||
|
static int keypad_test_mode = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Vars for the server core */
|
/* Vars for the server core */
|
||||||
MODULE_EXPORT char *api_version = API_VERSION;
|
MODULE_EXPORT char *api_version = API_VERSION;
|
||||||
MODULE_EXPORT int stay_in_foreground = 0;
|
MODULE_EXPORT int stay_in_foreground = 0;
|
||||||
@@ -243,6 +256,27 @@ MtxOrb_parse_contrast (char * str) {
|
|||||||
return contrast;
|
return contrast;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef CONFIG_FILE
|
||||||
|
/* Parse one key from the configfile */
|
||||||
|
static char MtxOrb_parse_keypad_setting (char * sectionname, char * keyname, char default_value)
|
||||||
|
{
|
||||||
|
char return_val = 0;
|
||||||
|
char * s;
|
||||||
|
char buf [255];
|
||||||
|
|
||||||
|
s = config_get_string ( sectionname, keyname, 0, NULL);
|
||||||
|
if (s != NULL){
|
||||||
|
strncpy (buf, s, sizeof(buf));
|
||||||
|
buf[sizeof(buf)-1]=0;
|
||||||
|
return_val = buf[0];
|
||||||
|
} else {
|
||||||
|
return_val=default_value;
|
||||||
|
}
|
||||||
|
return return_val;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* TODO: Get the frame buffers working right */
|
/* TODO: Get the frame buffers working right */
|
||||||
|
|
||||||
/* Opens com port and sets baud correctly...
|
/* Opens com port and sets baud correctly...
|
||||||
@@ -252,6 +286,146 @@ MtxOrb_parse_contrast (char * str) {
|
|||||||
int
|
int
|
||||||
MtxOrb_init (Driver *drvthis, char *args)
|
MtxOrb_init (Driver *drvthis, char *args)
|
||||||
{
|
{
|
||||||
|
#ifdef CONFIG_FILE
|
||||||
|
/* Start of command line parsing*/
|
||||||
|
|
||||||
|
struct termios portset;
|
||||||
|
|
||||||
|
int contrast = DEFAULT_CONTRAST;
|
||||||
|
char device[256] = DEFAULT_DEVICE;
|
||||||
|
int speed = DEFAULT_SPEED;
|
||||||
|
char size[256] = DEFAULT_SIZE;
|
||||||
|
char buf[256] = "";
|
||||||
|
int tmp, w, h;
|
||||||
|
|
||||||
|
MtxOrb_type = MTXORB_LKD; // Assume it's an LCD w/keypad
|
||||||
|
|
||||||
|
MtxOrb = driver;
|
||||||
|
|
||||||
|
debug( RPT_INFO, "MtxOrb: init(%p,%s)", driver, args );
|
||||||
|
|
||||||
|
/* TODO: replace DriverName with driver->name when that field exists. */
|
||||||
|
#define DriverName "MtxOrb"
|
||||||
|
|
||||||
|
|
||||||
|
/* READ CONFIG FILE */
|
||||||
|
|
||||||
|
/* Get serial device to use */
|
||||||
|
strncpy(device, config_get_string ( DriverName , "device" , 0 , DEFAULT_DEVICE),sizeof(device));
|
||||||
|
device[sizeof(device)-1]=0;
|
||||||
|
report (RPT_INFO,"MtxOrb: Using device: %s", device);
|
||||||
|
|
||||||
|
/* Get display size */
|
||||||
|
strncpy(size, config_get_string ( DriverName , "size" , 0 , DEFAULT_SIZE),sizeof(size));
|
||||||
|
size[sizeof(size)-1]=0;
|
||||||
|
if( sscanf(size , "%dx%d", &w, &h ) != 2
|
||||||
|
|| (w <= 0) || (w > LCD_MAX_WIDTH)
|
||||||
|
|| (h <= 0) || (h > LCD_MAX_HEIGHT)) {
|
||||||
|
report (RPT_WARNING, "MtxOrb: Cannot read size: %s. Using default value %s.", size, DEFAULT_SIZE);
|
||||||
|
sscanf( DEFAULT_SIZE , "%dx%d", &w, &h );
|
||||||
|
}
|
||||||
|
driver->wid = w;
|
||||||
|
driver->hgt = h;
|
||||||
|
|
||||||
|
/* Get contrast */
|
||||||
|
if (0<=config_get_int ( DriverName , "Contrast" , 0 , DEFAULT_CONTRAST) && config_get_int ( DriverName , "Contrast" , 0 , DEFAULT_CONTRAST) <= 255) {
|
||||||
|
contrast = config_get_int ( DriverName , "Contrast" , 0 , DEFAULT_CONTRAST);
|
||||||
|
} else {
|
||||||
|
report (RPT_WARNING, "MtxOrb: Contrast must be between 0 and 255. Using default value.");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get speed */
|
||||||
|
tmp = config_get_int ( DriverName , "Speed" , 0 , DEFAULT_SPEED);
|
||||||
|
|
||||||
|
switch (tmp) {
|
||||||
|
case 1200:
|
||||||
|
speed = B1200;
|
||||||
|
break;
|
||||||
|
case 2400:
|
||||||
|
speed = B2400;
|
||||||
|
break;
|
||||||
|
case 9600:
|
||||||
|
speed = B9600;
|
||||||
|
break;
|
||||||
|
case 19200:
|
||||||
|
speed = B19200;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
speed = DEFAULT_SPEED;
|
||||||
|
switch (speed) {
|
||||||
|
case B1200:
|
||||||
|
strncpy(buf,"1200", sizeof(buf));
|
||||||
|
break;
|
||||||
|
case B2400:
|
||||||
|
strncpy(buf,"2400", sizeof(buf));
|
||||||
|
break;
|
||||||
|
case B9600:
|
||||||
|
strncpy(buf,"9600", sizeof(buf));
|
||||||
|
break;
|
||||||
|
case B19200:
|
||||||
|
strncpy(buf,"19200", sizeof(buf));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
report (RPT_WARNING , "MtxOrb: Speed must be 1200, 2400, 9600 or 19200. Using default value of %s baud!", buf);
|
||||||
|
strncpy(buf,"", sizeof(buf));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Get backlight setting*/
|
||||||
|
if(config_get_bool( DriverName , "enablebacklight" , 0 , DEFAULT_BACKLIGHT)) {
|
||||||
|
backlightenabled = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get display type */
|
||||||
|
strncpy(buf, config_get_string ( DriverName , "type" , 0 , DEFAULT_TYPE),sizeof(size));
|
||||||
|
buf[sizeof(buf)-1]=0;
|
||||||
|
|
||||||
|
if (strncasecmp(buf, "lcd", 3) == 0) {
|
||||||
|
MtxOrb_type = MTXORB_LCD;
|
||||||
|
} else if (strncasecmp(buf, "lkd", 3) == 0) {
|
||||||
|
MtxOrb_type = MTXORB_LKD;
|
||||||
|
} else if (strncasecmp (buf, "vfd", 3) == 0) {
|
||||||
|
MtxOrb_type = MTXORB_VFD;
|
||||||
|
} else if (strncasecmp (buf, "vkd", 3) == 0) {
|
||||||
|
MtxOrb_type = MTXORB_VKD;
|
||||||
|
} else {
|
||||||
|
report (RPT_ERR, "MtxOrb: unknwon display type %s; must be one of lcd, lkd, vfd, or vkd", buf);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get keypad settings*/
|
||||||
|
|
||||||
|
/* keypad test mode? */
|
||||||
|
if (config_get_bool( DriverName , "keypad_test_mode" , 0 , 0)) {
|
||||||
|
report (RPT_INFO, "MtxOrb: Entering keypad test mode...\n");
|
||||||
|
keypad_test_mode = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!keypad_test_mode) {
|
||||||
|
/* We don't send any chars to the server in keypad test mode.
|
||||||
|
* So there's no need to get them from the configfile in keypad test mode.
|
||||||
|
*/
|
||||||
|
/* pause_key */
|
||||||
|
pause_key = MtxOrb_parse_keypad_setting (DriverName, "pause_key", MTXORB_DEFAULT_PAUSE_KEY);
|
||||||
|
report (RPT_DEBUG, "MtxOrb: Using \"%c\" as pause_key.", pause_key);
|
||||||
|
|
||||||
|
/* back_key */
|
||||||
|
back_key = MtxOrb_parse_keypad_setting (DriverName, "back_key", MTXORB_DEFAULT_BACK_KEY);
|
||||||
|
report (RPT_DEBUG, "MtxOrb: Using \"%c\" as back_key", back_key);
|
||||||
|
|
||||||
|
/* forward_key */
|
||||||
|
forward_key = MtxOrb_parse_keypad_setting (DriverName, "forward_key", MTXORB_DEFAULT_FORWARD_KEY);
|
||||||
|
report (RPT_DEBUG, "MtxOrb: Using \"%c\" as forward_key", forward_key);
|
||||||
|
|
||||||
|
/* main_menu_key */
|
||||||
|
main_menu_key = MtxOrb_parse_keypad_setting (DriverName, "main_menu_key", MTXORB_DEFAULT_MAIN_MENU_KEY);
|
||||||
|
report (RPT_DEBUG, "MtxOrb: Using \"%c\" as main_menu_key", main_menu_key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* End of config file parsing*/
|
||||||
|
#else
|
||||||
|
/* Start of command line parsing*/
|
||||||
|
|
||||||
char *argv[64]; /* Notice: 64 arguments - overflows? */
|
char *argv[64]; /* Notice: 64 arguments - overflows? */
|
||||||
int argc;
|
int argc;
|
||||||
struct termios portset;
|
struct termios portset;
|
||||||
@@ -276,29 +450,6 @@ MtxOrb_init (Driver *drvthis, char *args)
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef USE_GETOPT
|
|
||||||
while ((c = getopt(argc, argv, "d:c:s:ht:")) > 0) {
|
|
||||||
switch(c) {
|
|
||||||
case 'd':
|
|
||||||
strncpy(device, optarg, sizeof(device));
|
|
||||||
break;
|
|
||||||
case 's':
|
|
||||||
speed = MtxOrb_parse_speed(optarg);
|
|
||||||
break;
|
|
||||||
case 'c':
|
|
||||||
contrast = MtxOrb_parse_contrast(optarg);
|
|
||||||
break;
|
|
||||||
case 'h':
|
|
||||||
MtxOrb_usage();
|
|
||||||
return -1;
|
|
||||||
case 't':
|
|
||||||
MtxOrb_type = MtxOrb_parse_type(optarg);
|
|
||||||
default:
|
|
||||||
MtxOrb_usage();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
for (i = 0; i < argc; i++) {
|
for (i = 0; i < argc; i++) {
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
@@ -375,6 +526,8 @@ MtxOrb_init (Driver *drvthis, char *args)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* End of command line parsing */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Set up io port correctly, and open it... */
|
/* Set up io port correctly, and open it... */
|
||||||
|
|||||||
Reference in New Issue
Block a user