flush(): only write to LCD if buffer content changes
authorAlexander Bluem <bluem@gmit-gmbh.de>
Mon, 10 Jan 2011 12:30:35 +0000 (13:30 +0100)
committerAlexander Bluem <bluem@gmit-gmbh.de>
Mon, 10 Jan 2011 12:30:35 +0000 (13:30 +0100)
* the buffer is read character by character
  each char is summed up and the sums are then compared.

ax89063.c

index 4bbacaf..2d47241 100644 (file)
--- a/ax89063.c
+++ b/ax89063.c
@@ -117,6 +117,8 @@ MODULE_EXPORT void ax89063_flush(Driver *drvthis) {
        int x, y, result;
        PrivateData *p = drvthis->private_data;
        char *str = p->framebuf;
+       static int csum_s = 0;
+       int csum = 0;
 
        int ret = 0;
        struct timeval selectTimeout = { 0, 0 };
@@ -149,6 +151,15 @@ MODULE_EXPORT void ax89063_flush(Driver *drvthis) {
                return;
        }
 
+       // Minimize the number of writing cycles to max the responsiveness
+       for (x = 0; x < AX89063_HWFRAMEBUFLEN; x++)
+               csum += p->framebuf_hw[x];
+
+       if (csum == csum_s)
+               return;
+
+       csum_s = csum;
+
        // Flush all 80 chars at once
        result = write(p->fd, p->framebuf_hw, AX89063_HWFRAMEBUFLEN + 1);
 }