diff --git a/ChangeLog b/ChangeLog index a128c0f..657520a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -24,6 +24,7 @@ v.0.5dev (ongoing development) * Pyramid: Convert set_char to 8 byte bitmap, add support for bignum * Convert set_char of drivers bayrad, lb216, lcterm, mtc_s16209x, wirz-sli * CFontzPacket: Fix not using select() even if its available + * CFontzPacket: Use cellwidth = 5 on CFA-631 and CFA-635 too v0.5.4 * Update driver includes and LDFLAGS (fixed glk and bayrad binding error) diff --git a/server/drivers/CFontzPacket.c b/server/drivers/CFontzPacket.c index 72b4c23..801eff1 100644 --- a/server/drivers/CFontzPacket.c +++ b/server/drivers/CFontzPacket.c @@ -1,22 +1,20 @@ /** \file server/drivers/CFontzPacket.c * LCDd \c CFontzPacket driver for the CFA533, CFA631, CFA633 & CFA635 display - * series by CrystalFontz, Inc. + * series by CrystalFontz, Inc which use a packet based protocol. + * + * Applicable Data Sheets: + * \li http://www.crystalfontz.com/products/533/data_sheet/data_sheet.html + * \li http://www.crystalfontz.com/products/631/data_sheet/data_sheet.html + * \li http://www.crystalfontz.com/products/633/data_sheet/data_sheet.html + * \li http://www.crystalfontz.com/products/635/data_sheet/data_sheet.html + * + * \todo Add a cache for the custom characters. */ -/* - * This is the LCDproc driver for CrystalFontz LCD using Packet protocol. - * It support the CrystalFontz 533/633 USB/Serial, the 631 USB and the 635 USB - * (get yours from http://www.crystalfontz.com) - * - * Applicable Data Sheets: - * - http://www.crystalfontz.com/products/533/data_sheet/data_sheet.html - * - http://www.crystalfontz.com/products/631/data_sheet/data_sheet.html - * - http://www.crystalfontz.com/products/633/data_sheet/data_sheet.html - * - http://www.crystalfontz.com/products/635/data_sheet/data_sheet.html - * - * Copyright (C) 2002 David GLAUDE - * Portions Copyright (C) 2005 Peter Marschall - * Portions Copyright (C) 2005 Nicolas Croiset +/*- + * Copyright (c) 2002 David GLAUDE + * 2005 Peter Marschall + * 2005 Nicolas Croiset * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -33,22 +31,6 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 */ -/* - * Driver history - * 04/04/2002: Working driver - * 05/06/2002: Reading of return value - * 02/09/2002: KeyPad handling and return string - * 03/09/2002: New icon incorporated - * 27/01/2003: Adapted for CFontz 631 - * 16/05/2005: Adapted for CFontz 635 - * 24/01/2010: Add CFontz 533, add model description - * - * THINGS TO DO: - * + Make the caching at least for heartbeat icon - * - */ - - #include #include #include @@ -135,10 +117,10 @@ typedef struct CFontzPacket_private_data { /** List of known models and their default settings and features */ static CFA_Model CFA_ModelList[] = { {533, "16x2", 5, 19200 , HD44780_charmap, CFA_HAS_TEMP | CFA_HAS_4_TEMP_SLOTS}, - {631, "20x2", 6, 115200, CFontz_charmap , CFA_HAS_FAN | CFA_HAS_TEMP | + {631, "20x2", 5, 115200, CFontz_charmap , CFA_HAS_FAN | CFA_HAS_TEMP | CFA_HAS_KS0073 | CFA_HAS_4_TEMP_SLOTS}, {633, "16x2", 5, 19200 , HD44780_charmap, CFA_HAS_FAN | CFA_HAS_TEMP}, - {635, "20x4", 6, 115200, CFontz_charmap , CFA_HAS_KS0073}, + {635, "20x4", 5, 115200, CFontz_charmap , CFA_HAS_KS0073}, {0, NULL, 0, 0, NULL, 0} }; @@ -284,7 +266,7 @@ CFontzPacket_init (Driver *drvthis) report(RPT_INFO, "%s: USB is indicated (in config)", drvthis->name); /* Set up io port correctly, and open it... */ - debug(RPT_DEBUG, "%s: Opening device: %s", __FUNCTION__, p->device); + debug(RPT_INFO, "%s: Opening device: %s", __FUNCTION__, p->device); p->fd = open(p->device, (p->usb) ? (O_RDWR | O_NOCTTY) : (O_RDWR | O_NOCTTY | O_NDELAY)); if (p->fd == -1) { report(RPT_ERR, "%s: open(%s) failed (%s)", drvthis->name, p->device, strerror(errno)); @@ -592,7 +574,7 @@ CFontzPacket_get_key (Driver *drvthis) case CFP_KEY_UR_RELEASE: case CFP_KEY_LL_RELEASE: case CFP_KEY_LR_RELEASE: - // report(RPT_INFO, "%s: Ignoring key release 0x%02X", drvthis->name, key); + /* Key release events are ignored */ return NULL; break; default: @@ -619,7 +601,7 @@ CFontzPacket_chr (Driver *drvthis, int x, int y, char c) { PrivateData *p = drvthis->private_data; - debug(RPT_INFO, "%s: x=%d, y=%d, ch=0x%02X", __FUNCTION__, x, y, c); + debug(RPT_DEBUG, "%s: x=%d, y=%d, ch=0x%02X", __FUNCTION__, x, y, c); y--; x--; @@ -630,7 +612,8 @@ CFontzPacket_chr (Driver *drvthis, int x, int y, char c) /** - * Print a raw character on the screen at position (x,y). + * Print a character on the screen at position (x,y) bypassing the character + * mapping table. * The upper-left corner is (1,1), the lower-right corner is (p->width, p->height). * \param drvthis Pointer to driver structure. * \param x Horizontal character position (column). @@ -642,7 +625,7 @@ CFontzPacket_raw_chr (Driver *drvthis, int x, int y, unsigned char c) { PrivateData *p = drvthis->private_data; - debug(RPT_INFO, "%s: x=%d, y=%d, ch=0x%02X", __FUNCTION__, x, y, c); + debug(RPT_DEBUG, "%s: x=%d, y=%d, ch=0x%02X", __FUNCTION__, x, y, c); y--; x--; @@ -733,7 +716,6 @@ CFontzPacket_set_brightness(Driver *drvthis, int state, int promille) else { p->offbrightness = promille; } - //CFontzPacket_backlight(drvthis, state); } @@ -978,22 +960,20 @@ CFontzPacket_set_char (Driver *drvthis, int n, unsigned char *dat) unsigned char mask = (1 << p->cellwidth) - 1; int row; - if ((n < 0) || (n >= NUM_CCs)) + if ((n < 0) || (n >= NUM_CCs) || (!dat)) return; - if (!dat) - return; - - out[0] = n; /* Custom char to define. */ /* * Models with a KS0073 (631, 635) have a seamless display. Clear the * last line on those to avoid the custom characters banging together - * with other characters. This actually makes vBars not seamless. This - * is supposed to be a feature, not a bug. + * with other characters (except if big numbers are to be shown). This + * actually makes vBars not seamless. This is supposed to be a feature, + * not a bug. */ - if (p->model_desc->flags & CFA_HAS_KS0073) + if ((p->model_desc->flags & CFA_HAS_KS0073) && (p->ccmode != bignum)) dat[p->cellheight-1] = 0; + out[0] = n; /* Custom char to define. */ for (row = 0; row < p->cellheight; row++) { out[row+1] = dat[row] & mask; } @@ -1015,7 +995,7 @@ CFontzPacket_icon (Driver *drvthis, int x, int y, int icon) { PrivateData *p = drvthis->private_data; - debug(RPT_INFO, "%s: x=%d, y=%d, icon=0x%02X", __FUNCTION__, x, y, icon); + debug(RPT_DEBUG, "%s: x=%d, y=%d, icon=0x%02X", __FUNCTION__, x, y, icon); static unsigned char heart_open[] = { b__XXXXX, @@ -1053,26 +1033,6 @@ CFontzPacket_icon (Driver *drvthis, int x, int y, int icon) b___XXX_, b____X__, b_______ }; - /* - static unsigned char arrow_left[] = - { b_______, - b____X__, - b___X___, - b__XXXXX, - b___X___, - b____X__, - b_______, - b_______ }; - static unsigned char arrow_right[] = - { b_______, - b____X__, - b_____X_, - b__XXXXX, - b_____X_, - b____X__, - b_______, - b_______ }; - */ static unsigned char checkbox_off[] = { b_______, b_______, @@ -1100,49 +1060,11 @@ CFontzPacket_icon (Driver *drvthis, int x, int y, int icon) b__X_X_X, b__XXXXX, b_______ }; - /* - static unsigned char selector_left[] = - { b___X___, - b___XX__, - b___XXX_, - b___XXXX, - b___XXX_, - b___XX__, - b___X___, - b_______ }; - static unsigned char selector_right[] = - { b_____X_, - b____XX_, - b___XXX_, - b__XXXX_, - b___XXX_, - b____XX_, - b_____X_, - b_______ }; - static unsigned char ellipsis[] = - { b_______, - b_______, - b_______, - b_______, - b_______, - b_______, - b__X_X_X, - b_______ }; - static unsigned char block_filled[] = - { b__XXXXX, - b__XXXXX, - b__XXXXX, - b__XXXXX, - b__XXXXX, - b__XXXXX, - b__XXXXX, - b__XXXXX }; - */ switch (icon) { case ICON_BLOCK_FILLED: if (p->model_desc->flags & CFA_HAS_KS0073) { - CFontzPacket_raw_chr(drvthis, x, y, 31); + CFontzPacket_raw_chr(drvthis, x, y, 214); } else CFontzPacket_raw_chr(drvthis, x, y, 255);