mirror of
https://github.com/netfun2000/lcd4linux.git
synced 2026-02-27 09:44:34 +08:00
picoLCDGraphic: update display regularly using a timer (*much* faster than redrawing the whole display after each changed widget; you may get the old behaviour by setting "Update 0")
git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@1094 3ae390bd-cb1e-0410-b409-cd5a39f66f1f
This commit is contained in:
@@ -53,6 +53,7 @@
|
|||||||
#include "qprintf.h"
|
#include "qprintf.h"
|
||||||
#include "udelay.h"
|
#include "udelay.h"
|
||||||
#include "plugin.h"
|
#include "plugin.h"
|
||||||
|
#include "timer.h"
|
||||||
#include "widget.h"
|
#include "widget.h"
|
||||||
#include "widget_text.h"
|
#include "widget_text.h"
|
||||||
#include "widget_icon.h"
|
#include "widget_icon.h"
|
||||||
@@ -85,6 +86,11 @@
|
|||||||
#define DEBUG(x)
|
#define DEBUG(x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* "dirty" marks the display to be redrawn from frame buffer */
|
||||||
|
static int dirty = 1;
|
||||||
|
|
||||||
|
/* timer for display redraw (set to zero for "direct updates") */
|
||||||
|
static int update = 0;
|
||||||
|
|
||||||
static char Name[] = "picoLCDGraphic";
|
static char Name[] = "picoLCDGraphic";
|
||||||
static unsigned char *pLG_framebuffer;
|
static unsigned char *pLG_framebuffer;
|
||||||
@@ -200,8 +206,14 @@ static void drv_pLG_update_img()
|
|||||||
unsigned char cs, line;
|
unsigned char cs, line;
|
||||||
unsigned char pixel;
|
unsigned char pixel;
|
||||||
|
|
||||||
info("In %s\n", __FUNCTION__);
|
/* do not redraw display if frame buffer has not changed, unless
|
||||||
|
"direct updates" have been requested (update is zero) */
|
||||||
|
if ((!dirty) && (update > 0)) {
|
||||||
|
debug("Skipping %s\n", __FUNCTION__);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
info("In %s\n", __FUNCTION__);
|
||||||
|
|
||||||
for (cs = 0; cs < 4; cs++) {
|
for (cs = 0; cs < 4; cs++) {
|
||||||
unsigned char chipsel = (cs << 2); //chipselect
|
unsigned char chipsel = (cs << 2); //chipselect
|
||||||
@@ -259,6 +271,8 @@ static void drv_pLG_update_img()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* mark display as up-to-date */
|
||||||
|
dirty = 0;
|
||||||
//drv_pLG_clear();
|
//drv_pLG_clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -286,6 +300,12 @@ static void drv_pLG_blit(const int row, const int col, const int height, const i
|
|||||||
fprintf(stderr, "\n");
|
fprintf(stderr, "\n");
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* display needs to be redrawn from frame buffer */
|
||||||
|
dirty = 1;
|
||||||
|
|
||||||
|
/* if "direct updates" have been requested, redraw now */
|
||||||
|
if (update <= 0)
|
||||||
drv_pLG_update_img();
|
drv_pLG_update_img();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -442,6 +462,9 @@ static int drv_pLG_start(const char *section, const int quiet)
|
|||||||
int value;
|
int value;
|
||||||
char *s;
|
char *s;
|
||||||
|
|
||||||
|
/* set display redraw interval (set to zero for "direct updates") */
|
||||||
|
cfg_number(section, "update", 200, 0, -1, &update);
|
||||||
|
|
||||||
s = cfg_get(section, "Size", NULL);
|
s = cfg_get(section, "Size", NULL);
|
||||||
if (s == NULL || *s == '\0') {
|
if (s == NULL || *s == '\0') {
|
||||||
error("%s: no '%s.Size' entry from %s", Name, section, cfg_source());
|
error("%s: no '%s.Size' entry from %s", Name, section, cfg_source());
|
||||||
@@ -503,6 +526,11 @@ static int drv_pLG_start(const char *section, const int quiet)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* setup a timer that regularly redraws the display from the frame
|
||||||
|
buffer (unless "direct updates" have been requested */
|
||||||
|
if (update > 0)
|
||||||
|
timer_add(drv_pLG_update_img, NULL, update, 0);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user