Added optimizations to MtxOrb driver:

* Don't send any data if there is no change.
* High optimization of MtxOrb_draw_frame - only write changed
  data to screen.
This commit is contained in:
ddouthitt
2001-10-01 03:06:25 +00:00
parent 82825e0c73
commit 3c2765891d
+39 -11
View File
@@ -26,6 +26,7 @@
#endif
#include "lcd.h"
#include "lcd_lib.h"
#include "MtxOrb.h"
#include "drv_base.h"
#include "shared/debug.h"
@@ -1037,30 +1038,57 @@ static void
MtxOrb_draw_frame (char *dat)
{
char out[12];
int i;
char *old = NULL;
int i,j,mv = 1;
static char *old = NULL;
char *p, *q;
if (!dat)
return;
if (!old) {
if (old == NULL) {
old = malloc(MtxOrb->wid * MtxOrb->hgt);
write(fd, "\x0FEG\x01\x01", 4);
write(fd, dat, MtxOrb->wid * MtxOrb->hgt);
strncpy(old, dat, MtxOrb->wid * MtxOrb->hgt);
return;
} else {
if (! new_framebuf(MtxOrb, old))
return;
}
strncpy(old, dat, MtxOrb->wid * MtxOrb->hgt);
p = dat;
q = old;
// snprintf(out, sizeof(out), "%cG%c%c", 254, 1, 1);
// write(fd, out, 4);
// write(fd, dat, lcd.wid*lcd.hgt);
for (i = 1; i <= MtxOrb->hgt; i++) {
for (j = 1; j <= MtxOrb->wid; j++) {
for (i = 0; i < MtxOrb->hgt; i++) {
snprintf (out, sizeof(out), "\x0FEG\x001%c", i + 1);
write (fd, out, 4);
write (fd, dat + (MtxOrb->wid * i), MtxOrb->wid);
if ((*p) == (*q))
mv = 1;
else {
if (mv == 1) {
snprintf(out, sizeof(out), "\x0FEG%c%c", j, i);
write (fd, out, 4);
mv = 0;
}
write (fd, p, 1);
}
p++;
q++;
}
}
//for (i = 0; i < MtxOrb->hgt; i++) {
// snprintf (out, sizeof(out), "\x0FEG\x001%c", i + 1);
// write (fd, out, 4);
// write (fd, dat + (MtxOrb->wid * i), MtxOrb->wid);
//}
strncpy(old, dat, MtxOrb->wid * MtxOrb->hgt);
}
/////////////////////////////////////////////////////////////