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
+38 -10
View File
@@ -26,6 +26,7 @@
#endif #endif
#include "lcd.h" #include "lcd.h"
#include "lcd_lib.h"
#include "MtxOrb.h" #include "MtxOrb.h"
#include "drv_base.h" #include "drv_base.h"
#include "shared/debug.h" #include "shared/debug.h"
@@ -1037,30 +1038,57 @@ static void
MtxOrb_draw_frame (char *dat) MtxOrb_draw_frame (char *dat)
{ {
char out[12]; char out[12];
int i; int i,j,mv = 1;
char *old = NULL; static char *old = NULL;
char *p, *q;
if (!dat) if (!dat)
return; return;
if (!old) { if (old == NULL) {
old = malloc(MtxOrb->wid * MtxOrb->hgt); 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 { } else {
if (! new_framebuf(MtxOrb, old)) if (! new_framebuf(MtxOrb, old))
return; return;
} }
strncpy(old, dat, MtxOrb->wid * MtxOrb->hgt); p = dat;
q = old;
// snprintf(out, sizeof(out), "%cG%c%c", 254, 1, 1); for (i = 1; i <= MtxOrb->hgt; i++) {
// write(fd, out, 4); for (j = 1; j <= MtxOrb->wid; j++) {
// write(fd, dat, lcd.wid*lcd.hgt);
for (i = 0; i < MtxOrb->hgt; i++) { if ((*p) == (*q))
snprintf (out, sizeof(out), "\x0FEG\x001%c", i + 1); mv = 1;
else {
if (mv == 1) {
snprintf(out, sizeof(out), "\x0FEG%c%c", j, i);
write (fd, out, 4); write (fd, out, 4);
write (fd, dat + (MtxOrb->wid * i), MtxOrb->wid); 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);
} }
///////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////