/* $Id: drv_PHAnderson.c 840 2008-11-19 23:56:42 guimli $ * $URL: https://ssl.bulix.org/svn/lcd4linux/trunk/drv_PHAnderson.c $ * * driver for the PHAnderson serial-to-HD44780 adapter boards * http://www.phanderson.com/lcd106/lcd107.html * http://moderndevice.com/Docs/LCD117CommandSummary.doc * http://wulfden.org/TheShoppe/k107/index.shtml * * Copyright (C) 2008 Nicolas Weill * Copyright (C) 2005 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_PHAnderson * */ #include "config.h" #include #include #include #include "debug.h" #include "cfg.h" #include "qprintf.h" #include "udelay.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_serial.h" #define PHAnderson_CMD '?' static char Name[] = "PHAnderson"; static int T_READ, T_WRITE, T_BOOT; /****************************************/ /*** hardware dependant functions ***/ /****************************************/ static int drv_PHAnderson_open(const char *section) { if (drv_generic_serial_open(section, Name, 0) < 0) return -1; return 0; } static int drv_PHAnderson_close(void) { drv_generic_serial_close(); return 0; } static void drv_PHAnderson_send(const char *data, const unsigned int len) { char buffer[255]; unsigned int i, j; j = 0; for (i = 0; i < len; i++) { if (data[i] < 8) { buffer[j++] = '?'; buffer[j++] = '0' + data[i]; drv_generic_serial_write(buffer, j); udelay(T_READ); j = 0; } else { buffer[j++] = data[i]; } } if (j > 0) { drv_generic_serial_write(buffer, j); } } static void drv_PHAnderson_clear(void) { char cmd[2]; cmd[0] = '?'; cmd[1] = 'f'; drv_PHAnderson_send(cmd, 2); } static void drv_PHAnderson_write(const int row, const int col, const char *data, int len) { char cmd[7]; cmd[0] = '?'; cmd[1] = 'y'; cmd[2] = row + '0'; cmd[3] = '?'; cmd[4] = 'x'; cmd[5] = col / 10 + '0'; cmd[6] = col % 10 + '0'; drv_PHAnderson_send(cmd, 7); drv_PHAnderson_send(data, len); } static void drv_PHAnderson_defchar(const int ascii, const unsigned char *matrix) { char cmd[19]; int i; cmd[0] = '?'; cmd[1] = 'D'; cmd[2] = ascii + '0'; for (i = 0; i < 8; i++) { cmd[i * 2 + 3] = ((matrix[i] >> 4) & 1) + '0'; cmd[i * 2 + 4] = (((matrix[i] & 0x0F) < 10) ? (matrix[i] & 0x0F) + '0' : (matrix[i] & 0x0F) + '7'); } drv_PHAnderson_send(cmd, 19); udelay(T_WRITE); } static int drv_PHAnderson_blacklight(int blacklight) { char cmd[4]; if (blacklight < 0) blacklight = 0; if (blacklight > 255) blacklight = 255; cmd[0] = '?'; cmd[1] = 'B'; cmd[2] = (((blacklight >> 4) < 10) ? (blacklight >> 4) + '0' : (blacklight >> 4) + '7'); cmd[3] = (((blacklight & 0x0F) < 10) ? (blacklight & 0x0F) + '0' : (blacklight & 0x0F) + '7'); drv_PHAnderson_send(cmd, 4); udelay(T_WRITE); return blacklight; } static int drv_PHAnderson_bootscreen(const char *bootmsg) { char cmd[255]; int i, j, k; i = 0; j = 0; k = 0; if (bootmsg == NULL || *bootmsg == '\0') { cmd[0] = '?'; cmd[1] = 'S'; cmd[2] = '0'; drv_PHAnderson_send(cmd, 3); udelay(T_WRITE); } else { cmd[0] = '?'; cmd[1] = 'S'; cmd[2] = '2'; drv_PHAnderson_send(cmd, 3); udelay(T_WRITE); cmd[0] = '?'; cmd[1] = 'C'; for (i = 0; i < DROWS; i++) { cmd[2] = '0' + i; for (k = 0; k < DCOLS; k++) { if (bootmsg[j] != '\0') { cmd[3 + k] = bootmsg[j]; j++; } else { cmd[3 + k] = ' '; } } drv_PHAnderson_send(cmd, k + 3); udelay(T_BOOT); } } return j; } static int drv_PHAnderson_start(const char *section) { int
# Channel table for Piripá - BA - Brazil
# Source: http://www.portalbsd.com.br/terrestres_channels.php?channels=2604

# Physical channel 28
[TV Sudoeste]
	DELIVERY_SYSTEM = ISDBT
	BANDWIDTH_HZ = 6000000
	FREQUENCY = 557142857
	INVERSION = AUTO
	GUARD_INTERVAL = AUTO
	TRANSMISSION_MODE = AUTO
	INVERSION = AUTO
	GUARD_INTERVAL = AUTO
	TRANSMISSION_MODE = AUTO
	ISDBT_LAYER_ENABLED = 7
	ISDBT_SOUND_BROADCASTING = 0
	ISDBT_SB_SUBCHANNEL_ID = 0
	ISDBT_SB_SEGMENT_IDX = 0
	ISDBT_SB_SEGMENT_COUNT = 0
	ISDBT_LAYERA_FEC = AUTO
	ISDBT_LAYERA_MODULATION = QAM/AUTO
	ISDBT_LAYERA_SEGMENT_COUNT = 0
	ISDBT_LAYERA_TIME_INTERLEAVING = 0
	ISDBT_LAYERB_FEC = AUTO
	ISDBT_LAYERB_MODULATION = QAM/AUTO
	ISDBT_LAYERB_SEGMENT_COUNT = 0
	ISDBT_LAYERB_TIME_INTERLEAVING = 0
	ISDBT_LAYERC_FEC = AUTO
	ISDBT_LAYERC_MODULATION = QAM/AUTO
	ISDBT_LAYERC_SEGMENT_COUNT = 0
	ISDBT_LAYERC_TIME_INTERLEAVING = 0