Merge pull request #40 from trsaunders/upstream

update console.c to use gdisp code
ugfx_release_2.6
Tectu 2012-08-13 04:33:44 -07:00
commit dd0aa5db1c
2 changed files with 25 additions and 23 deletions

View File

@ -19,14 +19,15 @@
*/ */
#include "ch.h" #include "ch.h"
#include "hal.h"
#include "glcd.h" #include "gdisp.h"
#include "gdisp_fonts.h"
#include "console.h" #include "console.h"
/* /*
* Interface implementation. The interface is write only * Interface implementation. The interface is write only
*/ */
static size_t writes(void *ip, const uint8_t *bp, size_t n) { static size_t writes(void *ip, const uint8_t *bp, size_t n) {
return lcdConsoleWrite((GLCDConsole *)ip, bp, n); return lcdConsoleWrite((GLCDConsole *)ip, bp, n);
} }
@ -90,14 +91,14 @@ static const struct GLCDConsoleVMT vmt = {
}; };
msg_t lcdConsoleInit(GLCDConsole *console, uint16_t x0, uint16_t y0, uint16_t width, uint16_t height, font_t font, uint16_t bkcolor, uint16_t color) { msg_t lcdConsoleInit(GLCDConsole *console, coord_t x0, coord_t y0, coord_t width, coord_t height, font_t font, pixel_t bkcolor, pixel_t color) {
const uint8_t* ptr; const uint8_t* ptr;
uint16_t chi; uint16_t chi;
uint16_t x,y; uint16_t x,y;
console->vmt = &vmt; console->vmt = &vmt;
/* read font, get height */ /* read font, get height */
console->fy = lcdGetFontHeight(font); console->fy = font->height;
/* calculate the size of the console as an integer multiple of characters height*/ /* calculate the size of the console as an integer multiple of characters height*/
console->sx = width; console->sx = width;
@ -113,7 +114,7 @@ msg_t lcdConsoleInit(GLCDConsole *console, uint16_t x0, uint16_t y0, uint16_t wi
console->font = font; console->font = font;
lcdFillArea(x0, y0, x0+width, y0+height, console->bkcolor); gdispFillArea(x0, y0, x0 + width, y0 + height, console->bkcolor);
return RDY_OK; return RDY_OK;
} }
@ -123,7 +124,7 @@ msg_t lcdConsolePut(GLCDConsole *console, char c) {
if(c == '\n') { if(c == '\n') {
/* clear the text at the end of the line */ /* clear the text at the end of the line */
if(console->cx < console->sx) if(console->cx < console->sx)
lcdFillArea(console->x0 + console->cx, console->y0 + console->cy, gdispFillArea(console->x0 + console->cx, console->y0 + console->cy,
console->x0 + console->sx, console->y0 + console->cy + console->fy, console->x0 + console->sx, console->y0 + console->cy + console->fy,
console->bkcolor); console->bkcolor);
console->cx = 0; console->cx = 0;
@ -132,10 +133,10 @@ msg_t lcdConsolePut(GLCDConsole *console, char c) {
/* TODO: work backwards through the buffer to the start of the current line */ /* TODO: work backwards through the buffer to the start of the current line */
//console->cx = 0; //console->cx = 0;
} else { } else {
width = lcdMeasureChar(c, console->font); width = _getCharWidth(console->font, c);
if((console->cx + width) >= console->sx) { if((console->cx + width) >= console->sx) {
/* clear the text at the end of the line */ /* clear the text at the end of the line */
lcdFillArea(console->x0 + console->cx, console->y0 + console->cy, gdispFillArea(console->x0 + console->cx, console->y0 + console->cy,
console->x0 + console->cx + width, console->y0 + console->cy + console->fy, console->x0 + console->cx + width, console->y0 + console->cy + console->fy,
console->bkcolor); console->bkcolor);
console->cx = 0; console->cx = 0;
@ -143,16 +144,16 @@ msg_t lcdConsolePut(GLCDConsole *console, char c) {
} }
if((console->cy > console->sy)) { if((console->cy > console->sy)) {
/* scroll the screen */
lcdVerticalScroll(console->x0, console->y0, console->x0 + console->sx, gdispVerticalScroll(console->x0, console->y0, console->x0 + console->sx,
console->y0 + console->sy + console->fy, console->fy); console->y0 + console->sy + console->fy, console->fy, console->bkcolor);
/* reset the cursor */ /* reset the cursor */
console->cx = 0; console->cx = 0;
console->cy = console->sy; console->cy = console->sy;
} }
lcdDrawChar(console->x0 + console->cx, console->y0 + console->cy, c, gdispDrawChar(console->x0 + console->cx, console->y0 + console->cy, c,
console->font, console->color, console->bkcolor, solid); console->font, console->color);
/* update cursor */ /* update cursor */
console->cx += width; console->cx += width;
@ -160,12 +161,10 @@ msg_t lcdConsolePut(GLCDConsole *console, char c) {
return RDY_OK; return RDY_OK;
} }
msg_t lcdConsoleWrite(GLCDConsole *console, uint8_t *bp, size_t n) { msg_t lcdConsoleWrite(GLCDConsole *console, char *bp, size_t n) {
size_t i; size_t i;
for(i = 0; i < n; i++) for(i = 0; i < n; i++)
lcdConsolePut(console, bp[i]); lcdConsolePut(console, bp[i]);
return RDY_OK; return RDY_OK;
} }

View File

@ -21,7 +21,10 @@
#ifndef CONSOLE_H #ifndef CONSOLE_H
#define CONSOLE_H #define CONSOLE_H
#include "glcd.h" #include "ch.h"
#include "hal.h"
#include "gdisp.h"
/** /**
* @brief Structure representing a GLCD driver. * @brief Structure representing a GLCD driver.
@ -58,13 +61,13 @@ struct GLCDConsole {
/* font */ /* font */
font_t font; font_t font;
/* lcd area to use */ /* lcd area to use */
uint16_t x0,y0; coord_t x0,y0;
/* current cursor position, in pixels */ /* current cursor position, in pixels */
uint16_t cx,cy; coord_t cx,cy;
/* console size in pixels */ /* console size in pixels */
uint16_t sx,sy; coord_t sx,sy;
/* foreground and background colour */ /* foreground and background colour */
uint16_t bkcolor, color; pixel_t bkcolor, color;
/* font size in pixels */ /* font size in pixels */
uint8_t fy; uint8_t fy;
}; };
@ -73,9 +76,9 @@ struct GLCDConsole {
extern "C" { extern "C" {
#endif #endif
msg_t lcdConsoleInit(GLCDConsole *console, uint16_t x0, uint16_t y0, uint16_t width, uint16_t height, font_t font, uint16_t bkcolor, uint16_t color); msg_t lcdConsoleInit(GLCDConsole *console, coord_t x0, coord_t y0, coord_t width, coord_t height, font_t font, pixel_t bkcolor, pixel_t color);
msg_t lcdConsolePut(GLCDConsole *console, char c); msg_t lcdConsolePut(GLCDConsole *console, char c);
msg_t lcdConsoleWrite(GLCDConsole *console, uint8_t *bp, size_t n); msg_t lcdConsoleWrite(GLCDConsole *console, char *bp, size_t n);
#ifdef __cplusplus #ifdef __cplusplus
} }