/* $Id$ * $URL$ * * new style driver for Matrix Orbital serial display modules * * Copyright (C) 1999, 2000 Michael Reinelt * Copyright (C) 2004 The LCD4Linux Team * * This file is part of LCD4Linux. * * LCD4Linux is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * LCD4Linux is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */ /* * * exported fuctions: * * struct DRIVER drv_MatrixOrbital * */ #include "config.h" #include #include #include #include #include #include "debug.h" #include "cfg.h" #include "plugin.h" #include "widget.h" #include "widget_text.h" #include "widget_icon.h" #include "widget_bar.h" #include "drv.h" #include "drv_generic_text.h" #include "drv_generic_gpio.h" #include "drv_generic_serial.h" static char Name[] = "MatrixOrbital"; static int Model; static int Protocol; static char dispBuffer[4][20]; typedef struct { int type; char *name; int rows; int cols; int gpis; int gpos; int protocol; } MODEL; /* Fixme #1: number of gpo's should be verified */ /* Fixme #2: protocol should be verified */ static MODEL Models[] = { {0x01, "LCD0821", 2, 8, 0, 1, 1}, {0x03, "LCD2021", 2, 20, 0, 1, 1}, {0x04, "LCD1641", 4, 16, 0, 1, 1}, {0x05, "LCD2041", 4, 20, 0, 1, 1}, {0x06, "LCD4021", 2, 40, 0, 1, 1}, {0x07, "LCD4041", 4, 40, 0, 1, 1}, {0x08, "LK202-25", 2, 20, 8, 8, 2}, {0x09, "LK204-25", 4, 20, 8, 8, 2}, {0x0a, "LK404-55", 4, 40, 8, 8, 2}, {0x0b, "VFD2021", 2, 20, 0, 1, 1}, {0x0c, "VFD2041", 4, 20, 0, 1, 1}, {0x0d, "VFD4021", 2, 40, 0, 1, 1}, {0x0e, "VK202-25", 2, 20, 0, 1, 1}, {0x0f, "VK204-25", 4, 20, 0, 1, 1}, {0x10, "GLC12232", -1, -1, 0, 1, 1}, {0x13, "GLC24064", -1, -1, 0, 1, 1}, {0x15, "GLK24064-25", -1, -1, 0, 1, 1}, {0x22, "GLK12232-25", -1, -1, 0, 1, 1}, {0x31, "LK404-AT", 4, 40, 8, 8, 2}, {0x32, "VFD1621", 2, 16, 0, 1, 1}, {0x33, "LK402-12", 2, 40, 8, 8, 2}, {0x34, "LK162-12", 2, 16, 8, 8, 2}, {0x35, "LK204-25PC", 4, 20, 8, 8, 2}, {0x36, "LK202-24-USB", 2, 20, 8, 8, 2}, {0x38, "LK204-24-USB", 4, 20, 8, 8, 2}, {0x39, "VK204-24-USB", 4, 20, 8, 8, 2}, {0x40, "DE-LD011", 2, 16, 0, 0, 3}, /* Sure electronics USB LCD board Rev.I */ {0x41, "DE-LD021", 4, 20, 0, 0, 3}, {0x42, "DE-LD023", 4, 20, 0, 0, 4}, {0xff, "Unknown", -1, -1, 0, 0, 0} }; /****************************************/ /*** hardware dependant functions ***/ /****************************************/ static void drv_MO_write(const int row, const int col, const char *data, const int len) { char cmd[5] = "\376Gyx"; if (Models[Model].protocol == 3 || Models[Model].protocol == 4) { // Sure electronics USB LCD board - full line output cmd[2] = (char) 1; cmd[3] = (char) row + 1; strncpy(&(dispBuffer[row][col]), data, len); drv_generic_serial_write(cmd, 4); drv_generic_serial_write(dispBuffer[row], Models[Model].cols); } else { cmd[2] = (char) col + 1; cmd[3] = (char) row + 1; drv_generic_serial_write(cmd, 4); drv_generic_serial_write(data, len); } } static void drv_MO_clear(void) { int i, j; switch (Protocol) { case 1: drv_generic_serial_write("\014", 1); /* Clear Screen */ break; case 2: drv_generic_serial_write("\376\130", 2); /* Clear Screen */ break; default: /* Sure electronics USB LCD board - clear buffer */ /* protocol 3 and 4 */ for (i = 0; i < Models[Model].rows; i++) { for (j = 0; j < Models[Model].cols; j++) { dispBuffer[i][j] = ' '; } drv_MO_write(1, i + 1, dispBuffer[i], Models[Model].cols); } break; } } static void drv_MO_defchar(const int ascii, const unsigned char *matrix) { int i; char cmd[11] = "\376N"; cmd[2] = (char) ascii; for (i = 0; i < 8; i++) { cmd[i + 3] = matrix[i] & 0x1f; } drv_generic_serial_write(cmd, 11); } static int drv_MO_contrast(int contrast) { static unsigned char Contrast = 0; char cmd[3] = "\376Pn"; /* -1 is used to query the current contrast */ if (contrast == -1) return Contrast; if (contrast < 0) contrast = 0; if (contrast > 255) contrast = 255; Contrast = contrast; cmd[2] = Contrast; drv_generic_serial_write(cmd, 3); return Contrast; } static int drv_MO_backlight(int backlight) { static unsigned char Backlight = 0; char cmd[3] = "\376Bn"; /* -1 is used to query the current backlight */ if (backlight == -1) return Backlight; if (backlight < 0) backlight = 0; if (backlight > 255) backlight = 255; Backlight = backlight; if (backlight <= 0) { /* backlight off */ drv_generic_serial_write("\376F", 2); } else { /* backlight on for n minutes */ cmd[2] = Backlight; drv_generic_serial_write(cmd, 3); } return Backlight; } static int drv_M
/*
 * wavemon - a wireless network monitoring aplication
 *
 * Copyright (c) 2001-2002 Jan Morgenstern <jan@jm-music.de>
 *
 * wavemon is free software; you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free
 * Software Foundation; either version 2, or (at your option) any later
 * version.
 *
 * wavemon is distributed in the hope that it will be useful, but WITHOUT ANY
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License along
 * with wavemon; see the file COPYING.  If not, write to the Free Software
 * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */
#include "wavemon.h"

/* GLOBALS */
static WINDOW *w_about;

static char *about_lines[] = {
	"wavemon - status monitor for wireless network devices",
	"version " PACKAGE_VERSION " (built " BUILD_DATE ")",
	"",
	"original by jan morgenstern <jan@jm-music.de>",
	"distributed under the GNU general public license v3",
	"",
	"wavemon uses the wireless extensions by",
	"jean tourrilhes <jt@hpl.hp.com>",
	"",
	"please send suggestions and bug reports to ",
	PACKAGE_BUGREPORT,
	"",
	PACKAGE_URL
};

static int *linecd[ARRAY_SIZE(about_lines)], i, j;

void scr_about_init(void)
{
	w_about = newwin_title(0, WAV_HEIGHT, "About", false);

	for (i = 0; i < ARRAY_SIZE(about_lines); i++) {
		linecd[i] = malloc(strlen(about_lines[i]) * sizeof(int));
		for (j = 0; j < strlen(about_lines[i]); j++)
			linecd[i][j] = (rand() / (float)RAND_MAX) * 120 + 60;
	}
}

int scr_about_loop(WINDOW *w_menu)
{
	char buf[0x100];

	for (i = 0; i < ARRAY_SIZE(about_lines); i++) {
		for (j = 0; j < strlen(about_lines[i]); j++) {
			if (linecd[i][j] > 60) {
				buf[j] = ' ';
				linecd[i][j]--;
			} else if (linecd[i][j]) {
				buf[j] = (rand() / (float)RAND_MAX) * 54 + 65;
				linecd[i][j]--;
			} else {
				buf[j] = about_lines[i][j];
			}
		}
		buf[j] = '\0';
		waddstr_center(w_about, (WAV_HEIGHT - ARRAY_SIZE(about_lines))/2 + i, buf);
	}
	wrefresh(w_about);
	return wgetch(w_menu);
}

void scr_about_fini(void)
{
	delwin(w_about);
	for (i = 0; i < ARRAY_SIZE(about_lines); i++)
		free(linecd[i]);
}