From 9cfbe91b2263181d7aa51a2c3f9b644539d88cd6 Mon Sep 17 00:00:00 2001 From: reinelt Date: Sat, 16 Aug 2003 07:31:35 +0000 Subject: [lcd4linux @ 2003-08-16 07:31:35 by reinelt] double buffering in all drivers git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@217 3ae390bd-cb1e-0410-b409-cd5a39f66f1f --- MatrixOrbital.c | 109 +++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 73 insertions(+), 36 deletions(-) (limited to 'MatrixOrbital.c') diff --git a/MatrixOrbital.c b/MatrixOrbital.c index 822fec6..7cd32f1 100644 --- a/MatrixOrbital.c +++ b/MatrixOrbital.c @@ -1,4 +1,4 @@ -/* $Id: MatrixOrbital.c,v 1.28 2003/07/24 04:48:09 reinelt Exp $ +/* $Id: MatrixOrbital.c,v 1.29 2003/08/16 07:31:35 reinelt Exp $ * * driver for Matrix Orbital serial display modules * @@ -20,6 +20,9 @@ * * * $Log: MatrixOrbital.c,v $ + * Revision 1.29 2003/08/16 07:31:35 reinelt + * double buffering in all drivers + * * Revision 1.28 2003/07/24 04:48:09 reinelt * 'soft clear' needed for virtual rows * @@ -170,9 +173,10 @@ static LCD Lcd; static char *Port=NULL; static speed_t Speed; static int Device=-1; +static int GPO; -static char Txt[4][40]; -static int GPO; +static char *FrameBuffer1=NULL; +static char *FrameBuffer2=NULL; static int MO_open (void) @@ -247,31 +251,28 @@ static void MO_define_char (int ascii, char *buffer) static int MO_clear (int protocol) { - int row, col, gpo; - - for (row=0; row5) break; + } else { + pos2=col; + equal=0; + } } - MO_write (buffer, p-buffer); + MO_write (FrameBuffer1+row*Lcd.cols+pos1, pos2-pos1+1); } } + + memcpy (FrameBuffer2, FrameBuffer1, Lcd.rows*Lcd.cols*sizeof(char)); switch (protocol) { case 1: @@ -453,9 +477,22 @@ int MO_flush2 (void) int MO_quit (void) { + info("MatrixOrbital: shutting down."); + debug ("closing port %s", Port); close (Device); unlock_port(Port); + + if (FrameBuffer1) { + free(FrameBuffer1); + FrameBuffer1=NULL; + } + + if (FrameBuffer2) { + free(FrameBuffer2); + FrameBuffer2=NULL; + } + return (0); } -- cgit v1.2.3