/* $Id: SIN.c,v 1.2 2000/11/28 17:27:19 reinelt Exp $ * * driver for SIN router displays * * Copyright 2000 by Michael Reinelt (reinelt@eunet.at) * * 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 * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program 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: SIN.c,v $ * Revision 1.2 2000/11/28 17:27:19 reinelt * * changed decimal values for screen, row, column to ascii values (shame on you!) * * Revision 1.1 2000/11/28 16:46:11 reinelt * * first try to support display of SIN router * * */ /* * * exported fuctions: * * struct LCD SIN[] * */ #include #include #include #include #include #include #include #include "debug.h" #include "cfg.h" #include "lock.h" #include "display.h" #define XRES 5 #define YRES 8 // Fixme: Bar Support disabled #define BARS 0 static LCD Lcd; static char *Port=NULL; static int Device=-1; static char Txt[8][40]; static int SIN_open (void) { int fd; pid_t pid; struct termios portset; if ((pid=lock_port(Port))!=0) { if (pid==-1) error ("SIN: port %s could not be locked", Port); else error ("SIN: port %s is locked by process %d", Port, pid); return -1; } fd = open(Port, O_RDWR | O_NOCTTY | O_NDELAY); if (fd==-1) { error ("SIN: open(%s) failed: %s", Port, strerror(errno)); return -1; } if (tcgetattr(fd, &portset)==-1) { error ("SIN: tcgetattr(%s) failed: %s", Port, strerror(errno)); return -1; } cfmakeraw(&portset); cfsetospeed(&portset, B9600); if (tcsetattr(fd, TCSANOW, &portset)==-1) { error ("SIN: tcsetattr(%s) failed: %s", Port, strerror(errno)); return -1; } return fd; } static void SIN_write (char *string, int len) { if (Device==-1) return; if (write (Device, string, len)==-1) { if (errno==EAGAIN) { usleep(1000); if (write (Device, string, len)>=0) return; } error ("SIN: write(%s) failed: %s", Port, strerror(errno)); } } int SIN_clear (void) { int row, col; for (row=0; row SIN_write (buffer, p-buffer); } } return 0; } int SIN_quit (void) { debug ("closing port %s", Port); close (Device); unlock_port(Port); return (0); } LCD SIN[] = { { "SIN", 8, 40, XRES, YRES, BARS, SIN_init, SIN_clear, SIN_put, NULL, SIN_flush, SIN_quit }, { NULL } };