/* $Id: drv_Trefon.c,v 1.6 2006/01/30 06:25:54 reinelt Exp $ * * driver for TREFON USB LCD displays - http://www.trefon.de * * Copyright (C) 2005 Michael Reinelt * 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. * * * $Log: drv_Trefon.c,v $ * Revision 1.6 2006/01/30 06:25:54 reinelt * added CVS Revision * * Revision 1.5 2005/08/21 08:18:56 reinelt * CrystalFontz ACK processing * * Revision 1.4 2005/08/20 10:10:13 reinelt * TREFON patch from Stephan Trautvetter: * drv_TF_init: CHAR0 set to 0 instead of 1 * drv_TF_write: combine the GOTO and the data into one packet * drv_TF_write: add GOTO-Case for resolutions 8x1/20x4 characters * drv_TF_start: test for existing resolutions from TREFON USB-LCDs implemented * the use of 'asc255bug 1' is recommendable * * Revision 1.3 2005/05/08 04:32:44 reinelt * CodingStyle added and applied * * Revision 1.2 2005/04/24 05:27:09 reinelt * Trefon Backlight added * * Revision 1.1 2005/04/24 04:33:46 reinelt * driver for TREFON USB LCD's added * */ /* * * exported fuctions: * * struct DRIVER drv_Trefon * */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include "debug.h" #include "cfg.h" #include "qprintf.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" #define LCD_USB_VENDOR 0xfff0 #define LCD_USB_DEVICE 0xfffe #define PKT_START 0x02 #define PKT_BACKLIGHT 0x01 #define PKT_DATA 0x02 #define PKT_CTRL 0x06 #define PKT_END 0xff static char Name[] = "TREFON"; static usb_dev_handle *lcd; static int interface; extern int usb_debug; extern int got_signal; /****************************************/ /*** hardware dependant functions ***/ /****************************************/ static int drv_TF_open(void) { struct usb_bus *busses, *bus; struct usb_device *dev; lcd = NULL; info("%s: scanning USB for TREFON LCD...", Name); usb_debug = 0; usb_init(); usb_find_busses(); usb_find_devices(); busses = usb_get_busses(); for (bus = busses; bus; bus = bus->next) { for (dev = bus->devices; dev; dev = dev->next) { if ((dev->descriptor.idVendor == LCD_USB_VENDOR) && (dev->descriptor.idProduct == LCD_USB_DEVICE)) { info("%s: found TREFON USB LCD on bus %s device %s", Name, bus->dirname, dev->filename); lcd = usb_open(dev); if (usb_set_configuration(lcd, 1) < 0) { error("%s: usb_set_configuration() failed!", Name); return -1; } interface = 0; if (usb_claim_interface(lcd, interface) < 0) { error("%s: usb_claim_interface() failed!", Name); return -1; } return 0; } } } return -1; } static int drv_TF_close(void) { usb_release_interface(lcd, interface); usb_close(lcd); return 0; } static void drv_TF_send(char *data, int size) { char buffer[64]; /* the controller always wants a 64-byte packet */ memset(buffer, 0, 64); memcpy(buffer, data, size); // Endpoint hardcoded to 2 usb_bulk_write(lcd, 2, buffer, 64, 2000); } static void drv_TF_command(const unsigned char cmd) { char buffer[4] = { PKT_START, PKT_CTRL, 0, PKT_END }; buffer[2] = cmd; drv_TF_send(buffer, 4); } static void drv_TF_clear(void) { drv_TF_command(0x01); } static void drv_TF_write(const int row, const int col, const char *data, const int len) { char buffer[64]; char *p; int pos = 0; if (DCOLS == 8 && DROWS == 1) { // 8x1 Characters pos = row * 0x40 + col; } else if (DCOLS == 16 && DROWS == 2) { // 16x2 Characters pos = row * 0x40 + col; } else if (DCOLS == 20 && DROWS == 4) { // 20x4 Characters pos = row * 0x20 + col; } else { error("%s: internal error: DCOLS=%d DROWS=%d", Name, DCOLS, DROWS); return;
# Channel table for Pires Do Rio - GO - Brazil
# Source: https://portalbsd.com.br/terrestres_channels.php?cidade=1727

# Physical channel 27 (virtual 48.1)
[TV Serra Dourada]
	DELIVERY_SYSTEM = ISDBT
	BANDWIDTH_HZ = 6000000
	FREQUENCY = 551142857
	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

# Physical channel 33 (virtual 25.1)
[TV Anhanguera Catalão]
	DELIVERY_SYSTEM = ISDBT
	BANDWIDTH_HZ = 6000000
	FREQUENCY = 587142857
	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