Exemplo n.º 1
0
static int drv_BW_start(const char *section, const int quiet)
{
    int contrast;
    int rows = -1, cols = -1;
    char *s;

    s = cfg_get(section, "Size", NULL);
    if (s == NULL || *s == '\0') {
	error("%s: no '%s.Size' entry from %s", Name, section, cfg_source());
	return -1;
    }
    if (sscanf(s, "%dx%d", &cols, &rows) != 2 || rows < 1 || cols < 1) {
	error("%s: bad %s.Size '%s' from %s", Name, section, s, cfg_source());
	free(s);
	return -1;
    }

    DROWS = rows;
    DCOLS = cols;

    if (drv_BW_open() < 0) {
	error("%s: could not find a BWCT USB LCD", Name);
	return -1;
    }

    /* reset */
    drv_BW_send(LCD_RESET, 0);

    /* initialize display */
    drv_BW_command(0x29);	/* 8 Bit mode, 1/16 duty cycle, 5x8 font */
    drv_BW_command(0x08);	/* Display off, cursor off, blink off */
    drv_BW_command(0x0c);	/* Display on, cursor off, blink off */
    drv_BW_command(0x06);	/* curser moves to right, no shift */


    if (cfg_number(section, "Contrast", 0, 0, 255, &contrast) > 0) {
	drv_BW_contrast(contrast);
    }

    drv_BW_clear();		/* clear display */

    if (!quiet) {
	char buffer[40];
	qprintf(buffer, sizeof(buffer), "%s %dx%d", Name, DCOLS, DROWS);
	if (drv_generic_text_greet(buffer, "www.bwct.de")) {
	    sleep(3);
	    drv_BW_clear();
	}
    }

    return 0;
}
Exemplo n.º 2
0
/* close driver & display */
int drv_LT_quit(const int quiet)
{

    info("%s: shutting down.", Name);

    drv_generic_text_quit();

    /* clear display */
    drv_LT_clear();

    /* say goodbye... */
    if (!quiet) {
        drv_generic_text_greet("goodbye!", NULL);
    }

    drv_generic_serial_close();

    return (0);
}
Exemplo n.º 3
0
/* use this function for a text display */
int drv_FW8888_init(const char *section, const int quiet)
{
    WIDGET_CLASS wc;
    int ret;

    info("%s: %s", Name, "$Rev$");

    /* display preferences */
    XRES = 5;			/* pixel width of one char  */
    YRES = 7;			/* pixel height of one char  */
    CHARS = 0;			/* number of user-defineable characters */
    CHAR0 = 0;			/* ASCII of first user-defineable char */

    /* real worker functions */
    drv_generic_text_real_write = drv_FW8888_write;

    /* start display */
    if ((ret = drv_FW8888_start(section)) != 0)
	return ret;

    if (!quiet) {
	char buffer[40];
	qprintf(buffer, sizeof(buffer), "%s %dx%d", Name, DCOLS, DROWS);
	if (drv_generic_text_greet(buffer, "www.linum.com")) {
	    sleep(3);
	    drv_FW8888_clear();
	}
    }

    /* initialize generic text driver */
    if ((ret = drv_generic_text_init(section, Name)) != 0)
	return ret;

    /* register text widget */
    wc = Widget_Text;
    wc.draw = drv_generic_text_draw;
    widget_register(&wc);

    /* register plugins */
    //    AddFunction("LCD::contrast", 1, plugin_contrast);

    return 0;
}
Exemplo n.º 4
0
static int drv_TF_start(const char *section, const int quiet)
{
    int backlight;
    int rows = -1, cols = -1;
    char *s;

    s = cfg_get(section, "Size", NULL);
    if (s == NULL || *s == '\0') {
	error("%s: no '%s.Size' entry from %s", Name, section, cfg_source());
	return -1;
    }
    if (sscanf(s, "%dx%d", &cols, &rows) != 2 || drv_TF_valid_resolution(rows, cols) < 0) {
	error("%s: bad %s.Size '%s' (only 8x1/16x2/20x4) from %s", Name, section, s, cfg_source());
	free(s);
	return -1;
    }

    DROWS = rows;
    DCOLS = cols;

    if (drv_TF_open() < 0) {
	error("%s: could not find a TREFON USB LCD", Name);
	return -1;
    }

    if (cfg_number(section, "Backlight", 1, 0, 1, &backlight) > 0) {
	drv_TF_backlight(backlight);
    }

    drv_TF_clear();		/* clear display */

    if (!quiet) {
	char buffer[40];
	qprintf(buffer, sizeof(buffer), "%s %dx%d", Name, DCOLS, DROWS);
	if (drv_generic_text_greet(buffer, "www.trefon.de")) {
	    sleep(3);
	    drv_TF_clear();
	}
    }

    return 0;
}
Exemplo n.º 5
0
/* close driver & display */
int drv_TF_quit(const int quiet)
{

    info("%s: shutting down.", Name);

    drv_generic_text_quit();

    /* clear display */
    drv_TF_clear();

    /* say goodbye... */
    if (!quiet) {
	drv_generic_text_greet("goodbye!", NULL);
    }

    debug("closing USB connection");
    drv_TF_close();

    return (0);
}
Exemplo n.º 6
0
/* close driver & display */
int drv_LL_quit(const int quiet)
{

    info("%s: shutting down.", Name);

    drv_generic_text_quit();

    /* clear display */
    drv_LL_clear();

    /* say goodbye... */
    if (!quiet) {
	drv_generic_text_greet("goodbye!", NULL);
    }

    /* Enable control characters interpretation. */
    /* No return value check since this ioctl cannot fail */
    ioctl(lcdlinux_fd, LCDL_RAW_MODE, 0);

    /* close device */
    close(lcdlinux_fd);

    return (0);
}
Exemplo n.º 7
0
/* close driver & display */
int drv_MO_quit(const int quiet)
{

    info("%s: shutting down display.", Name);

    drv_generic_text_quit();
    drv_generic_gpio_quit();

    /* clear display */
    drv_MO_clear();

    usleep(300000);

    /* say goodbye... */
    if (!quiet) {
	drv_generic_text_greet("goodbye!", NULL);
    }

    usleep(300000);

    drv_generic_serial_close();

    return (0);
}
Exemplo n.º 8
0
static int drv_LL_start(const char *section, const int quiet)
{
    char *s;
    int rows = -1, cols = -1;
    int use_busy = 0, bus4bits = 0, commit = 0;
    struct lcd_parameters buf;

    /* emit version information */
    info("%s: Version %s", Name, LCD_LINUX_VERSION);

    /* get size from config file */
    s = cfg_get(section, "Size", NULL);
    if (s != NULL || *s != '\0') {
	if (sscanf(s, "%dx%d", &cols, &rows) != 2 || rows < 1 || cols < 1) {
	    error("%s: bad %s.Size '%s' from %s", Name, section, s, cfg_source());
	    free(s);
	    return -1;
	}
    }
    free(s);

    /* open device */
    lcdlinux_fd = open(Device, O_WRONLY);
    if (lcdlinux_fd == -1) {
	error("%s: open(%s) failed: %s", Name, Device, strerror(errno));
	return -1;
    }

    /* get display size */
    memset(&buf, 0, sizeof(buf));
    if (ioctl(lcdlinux_fd, LCDL_GET_PARAM, &buf) != 0) {
	error("%s: ioctl(LCDL_GET_PARAM) failed: %s", Name, strerror(errno));
	error("%s: Could not query display information!", Name);
	return -1;
    }
    info("%s: %dx%d display with %d controllers, flags=0x%02lx:",
	 Name, buf.cntr_cols, buf.cntr_rows * buf.num_cntr, buf.num_cntr, buf.flags);
    info("%s:   busy-flag checking %sabled", Name, (buf.flags & HD44780_CHECK_BF) ? "en" : "dis");
    info("%s:   bus width %d bits", Name, (buf.flags & HD44780_4BITS_BUS) ? 4 : 8);
    info("%s:   font size %s", Name, (buf.flags & HD44780_5X10_FONT) ? "5x10" : "5x8");

    /* overwrite width size from lcd4linux.conf */
    if (buf.vs_rows || buf.vs_cols) {
	info("%s: disabling virtual screen", Name);
	buf.vs_rows = 0;
	buf.vs_cols = 0;
	commit = 1;
    }

    if ((rows > 0 && rows != buf.cntr_rows * buf.num_cntr) || (cols > 0 && cols != buf.cntr_cols)) {
	info("%s: changing size to %dx%d", Name, cols, rows);
	buf.cntr_rows = rows / buf.num_cntr;
	buf.cntr_cols = cols;
	commit = 1;
    }

    DROWS = buf.cntr_rows * buf.num_cntr;
    DCOLS = buf.cntr_cols;

    /* overwrite busy-flag checking from lcd4linux.conf */
    cfg_number(section, "UseBusy", 0, 0, 1, &use_busy);
    if (use_busy && !(buf.flags & HD44780_CHECK_BF)) {
	info("%s: activating busy-flag checking", Name);
	buf.flags |= HD44780_CHECK_BF;
	commit = 1;
    } else if (!use_busy && (buf.flags & HD44780_CHECK_BF)) {
	info("%s: deactivating busy-flag checking", Name);
	buf.flags &= ~HD44780_CHECK_BF;
	commit = 1;
    }

    /* overwrite bus length from lcd4linux.conf */
    cfg_number(section, "Bus4Bit", 0, 0, 1, &bus4bits);
    if (bus4bits && !(buf.flags & HD44780_4BITS_BUS)) {
	info("%s: setting bus length to 4 bits", Name);
	buf.flags |= HD44780_4BITS_BUS;
	commit = 1;
    } else if (!bus4bits && (buf.flags & HD44780_4BITS_BUS)) {
	info("%s: setting bus length to 8 bits", Name);
	buf.flags &= ~HD44780_4BITS_BUS;
	commit = 1;
    }

    if (commit && ioctl(lcdlinux_fd, LCDL_SET_PARAM, &buf) != 0) {
	error("%s: ioctl(LCDL_SET_PARAM) failed: %s", Name, strerror(errno));
	return -1;
    }

    /* initialize display */
    drv_LL_clear();		/* clear display */

    /* Disable control characters interpretation. */
    /* No return value check since this ioctl cannot fail */
    ioctl(lcdlinux_fd, LCDL_RAW_MODE, 1);

    if (!quiet) {
	char buffer[40];
	qprintf(buffer, sizeof(buffer), "%s %dx%d", Name, DCOLS, DROWS);
	if (drv_generic_text_greet(buffer, "lcd-linux.sf.net")) {
	    sleep(3);
	    drv_LL_clear();
	}
    }

    return 0;
}
Exemplo n.º 9
0
static int drv_MO_start(const char *section, const int quiet)
{
    int i;
    char *model;
    char buffer[256];

    model = cfg_get(section, "Model", NULL);
    if (model != NULL && *model != '\0') {
	for (i = 0; Models[i].type != 0xff; i++) {
	    if (strcasecmp(Models[i].name, model) == 0)
		break;
	}
	if (Models[i].type == 0xff) {
	    error("%s: %s.Model '%s' is unknown from %s", Name, section, model, cfg_source());
	    return -1;
	}
	Model = i;
	info("%s: using model '%s'", Name, Models[Model].name);
    } else {
	info("%s: no '%s.Model' entry from %s, auto-dedecting", Name, section, cfg_source());
	Model = -1;
    }

    if (Model != -1 && Models[Model].protocol == 3) {	// Sure electronics USB LCD board - full line output
	int i, j;
	for (i = 0; i < Models[Model].rows; i++) {	// Clear buffer
	    for (j = 0; j < Models[Model].cols; j++) {
		dispBuffer[i][j] = ' ';
	    }
	}
    }

    if (drv_generic_serial_open(section, Name, 0) < 0)
	return -1;

    if (Model == -1 || Models[Model].protocol > 1) {
	/* read module type */
	drv_generic_serial_write("\3767", 2);
	usleep(1000);
	if (drv_generic_serial_read(buffer, 1) == 1) {
	    for (i = 0; Models[i].type != 0xff; i++) {
		if (Models[i].type == (int) *buffer)
		    break;
	    }
	    info("%s: display reports model '%s' (type 0x%02x)", Name, Models[i].name, Models[i].type);

	    /* auto-dedection */
	    if (Model == -1)
		Model = i;

	    /* auto-dedection matches specified model? */
	    if (Models[i].type != 0xff && Model != i) {
		error("%s: %s.Model '%s' from %s does not match dedected Model '%s'", Name, section, model,
		      cfg_source(), Models[i].name);
		return -1;
	    }

	} else {
	    info("%s: display detection failed.", Name);
	}
    }

    /* initialize global variables */
    DROWS = Models[Model].rows;
    DCOLS = Models[Model].cols;
    GPIS = Models[Model].gpis;
    GPOS = Models[Model].gpos;
    Protocol = Models[Model].protocol;

    if (Protocol > 1) {
	/* read serial number */
	drv_generic_serial_write("\3765", 2);
	usleep(100000);
	if (drv_generic_serial_read(buffer, 2) == 2) {
	    info("%s: display reports serial number 0x%x", Name, *(short *) buffer);
	}

	/* read version number */
	drv_generic_serial_write("\3766", 2);
	usleep(100000);
	if (drv_generic_serial_read(buffer, 1) == 1) {
	    info("%s: display reports firmware version 0x%x", Name, *buffer);
	}
    }

    drv_MO_clear();

    drv_generic_serial_write("\376B", 3);	/* backlight on */
    drv_generic_serial_write("\376K", 2);	/* cursor off */
    drv_generic_serial_write("\376T", 2);	/* blink off */
    drv_generic_serial_write("\376D", 2);	/* line wrapping off */
    drv_generic_serial_write("\376R", 2);	/* auto scroll off */

    /* set contrast */
    if (cfg_number(section, "Contrast", 0, 0, 255, &i) > 0) {
	drv_MO_contrast(i);
    }

    /* set backlight */
    if (cfg_number(section, "Backlight", 0, 0, 255, &i) > 0) {
	drv_MO_backlight(i);
    }

    if (!quiet) {
	if (drv_generic_text_greet(Models[Model].name, "MatrixOrbital")) {
	    sleep(3);
	    drv_MO_clear();
	}
    }

    return 0;
}
Exemplo n.º 10
0
/* initialize driver & display */
int drv_Pertelian_init(const char *section, const int quiet)
{
    WIDGET_CLASS wc;
    int ret;

    info("%s: %s", Name, "$Rev: 975 $");

    /* display preferences */
    XRES = 5;			/* pixel width of one char  */
    YRES = 8;			/* pixel height of one char  */
    CHARS = 8;			/* number of user-defineable characters */
    CHAR0 = 0;			/* ASCII of first user-defineable char */
    GOTO_COST = 2;		/* number of bytes a goto command requires */

    /* real worker functions */
    drv_generic_text_real_write = drv_Pertelian_write;
    drv_generic_text_real_defchar = drv_Pertelian_defchar;


    /* start display */
    if ((ret = drv_Pertelian_start(section)) != 0)
	return ret;

    if (!quiet) {
	char buffer[40];
	qprintf(buffer, sizeof(buffer), "%s %dx%d", Name, DCOLS, DROWS);
	if (drv_generic_text_greet(buffer, "LinITX.com")) {
	    sleep(3);
	    drv_Pertelian_clear();
	}
    }

    /* initialize generic text driver */
    if ((ret = drv_generic_text_init(section, Name)) != 0)
	return ret;

    /* initialize generic icon driver */
    if ((ret = drv_generic_text_icon_init()) != 0)
	return ret;

    /* initialize generic bar driver */
    if ((ret = drv_generic_text_bar_init(0)) != 0)
	return ret;

    /* add fixed chars to the bar driver */
    drv_generic_text_bar_add_segment(0, 0, 255, 32);	/* ASCII  32 = blank */


    /* register text widget */
    wc = Widget_Text;
    wc.draw = drv_generic_text_draw;
    widget_register(&wc);

    /* register icon widget */
    wc = Widget_Icon;
    wc.draw = drv_generic_text_icon_draw;
    widget_register(&wc);

    /* register bar widget */
    wc = Widget_Bar;
    wc.draw = drv_generic_text_bar_draw;
    widget_register(&wc);
    AddFunction("LCD::backlight", 1, plugin_backlight);
    return 0;
}
Exemplo n.º 11
0
/* initialize driver & display */
int drv_BuE_init(const char *section, const int quiet)
{
    WIDGET_CLASS wc;
    int ret;

    info("%s: %s", Name, "$Rev: 840 $");

    /* start display */
    if ((ret = drv_BuE_start(section)) != 0) {
	return ret;
    }

    /* display preferences */
    XRES = 5;			/* pixel width of one char  */
    YRES = 8;			/* pixel height of one char  */
    CHARS = 8;			/* number of user-defineable characters */

    /* real worker functions */
    switch (Protocol) {
    case 1:
	CHAR0 = 0;		/* ASCII of first user-defineable char */
	GOTO_COST = 6;		/* number of bytes a goto command requires */
	drv_generic_text_real_write = drv_BuE_MT_write;
	drv_generic_text_real_defchar = drv_BuE_MT_defchar;
	break;
    case 2:
	CHAR0 = 128;		/* ASCII of first user-defineable char */
	GOTO_COST = 6;		/* number of bytes a goto command requires */
	drv_generic_text_real_write = drv_BuE_CT_write;
	drv_generic_text_real_defchar = drv_BuE_CT_defchar;
	break;
    }

    if (!quiet) {
	char buffer[40];
	qprintf(buffer, sizeof(buffer), "%s %s", Name, Models[Model].name);
	if (drv_generic_text_greet(buffer, "www.bue.com")) {
	    sleep(3);
	    drv_BuE_clear();
	}
    }

    /* initialize generic text driver */
    if ((ret = drv_generic_text_init(section, Name)) != 0)
	return ret;

    /* initialize generic icon driver */
    if ((ret = drv_generic_text_icon_init()) != 0)
	return ret;

    /* initialize generic bar driver */
    if ((ret = drv_generic_text_bar_init(0)) != 0)
	return ret;

    /* add fixed chars to the bar driver */
    drv_generic_text_bar_add_segment(0, 0, 255, 32);	/* ASCII  32 = blank */
    drv_generic_text_bar_add_segment(255, 255, 255, 255);	/* ASCII 255 = block */

    /* register text widget */
    wc = Widget_Text;
    wc.draw = drv_generic_text_draw;
    widget_register(&wc);

    /* register icon widget */
    wc = Widget_Icon;
    wc.draw = drv_generic_text_icon_draw;
    widget_register(&wc);

    /* register bar widget */
    wc = Widget_Bar;
    wc.draw = drv_generic_text_bar_draw;
    widget_register(&wc);

    /* register plugins */
    AddFunction("LCD::contrast", -1, plugin_contrast);
    AddFunction("LCD::backlight", -1, plugin_backlight);
    AddFunction("LCD::gpo", -1, plugin_gpo);
    AddFunction("LCD::gpi", 1, plugin_gpi);
    AddFunction("LCD::adc", 0, plugin_adc);
    AddFunction("LCD::pwm", -1, plugin_pwm);

    return 0;
}