get pixel return value implemented in struct

remotes/origin_old/ugfx_release_2.6
trsaunders 2012-07-24 17:22:50 +01:00
commit e4094ad468
15 changed files with 131 additions and 119 deletions

View File

@ -2,17 +2,3 @@ This are a few demos, showing how to use the library.
Please note that this are not compilable projects. Please note that this are not compilable projects.
Your boarfile do need to contain the following informations:
#define TP_PORT GPIOC
#define TP_IRQ 4
#define TP_CS 6
#define LCD_DATA_PORT GPIOE
#define LCD_CMD_PORT GPIOD
#define LCD_CS 12
#define LCD_RS 13
#define LCD_WR 14
#define LCD_RD 15

View File

@ -0,0 +1,30 @@
#include "ch.h"
#include "hal.h"
#include "glcd.h"
#include "test.h"
#include "console.h"
static GLCDDriver GLCDD1;
static GLCDConsole CON1;
int main(void) {
halInit();
chSysInit();
// init LCD and clear it
lcdInit(&GLCDD1);
lcdClear(Black);
// init console
lcdConsoleInit(&CON1, 0, 0, lcdGetWidth(), lcdGetHeight(), font_Small, Black, White);
// use test thread for console output
TestThread((BaseSequentialStream*)&CON1);
while (TRUE) {
chThdSleepMilliseconds(200);
}
return 0;
}

View File

@ -100,16 +100,16 @@ __inline void lld_lcdReadStream(uint16_t *buffer, size_t size) {
uint16_t i; uint16_t i;
volatile uint16_t dummy; volatile uint16_t dummy;
dummy = lld_lcdReadGPIO(); dummy = lld_lcdReadData();
for(i = 0; i < size; i++) for(i = 0; i < size; i++)
buffer[i] = lld_lcdReadData(); buffer[i] = lld_lcdReadData();
} }
#endif #endif // LCD_USE_GPIO
#ifdef LCD_USE_SPI #ifdef LCD_USE_SPI
/* TODO */ /* TODO */
#endif #endif // LCD_USE_SPI
#ifdef LCD_USE_FSMC #ifdef LCD_USE_FSMC
@ -170,7 +170,7 @@ __inline void lld_lcdReadStream(uint16_t *buffer, size_t size) {
buffer[i] = LCD_RAM; buffer[i] = LCD_RAM;
} }
} }
#endif #endif // LCD_USE_FSMC
static __inline void lld_lcdDelay(uint16_t us) { static __inline void lld_lcdDelay(uint16_t us) {
chThdSleepMicroseconds(us); chThdSleepMicroseconds(us);

View File

@ -2,7 +2,7 @@
#ifdef TOUCHPAD_USE_ADS7843 #ifdef TOUCHPAD_USE_ADS7843
__inline uint16_t lld_readX(void) { __inline uint16_t lld_tpReadX(void) {
uint8_t txbuf[1]; uint8_t txbuf[1];
uint8_t rxbuf[2]; uint8_t rxbuf[2];
uint16_t x; uint16_t x;
@ -19,7 +19,7 @@ __inline uint16_t lld_readX(void) {
return x; return x;
} }
__inline uint16_t lld_readY(void) { __inline uint16_t lld_tpReadY(void) {
uint8_t txbuf[1]; uint8_t txbuf[1];
uint8_t rxbuf[2]; uint8_t rxbuf[2];
uint16_t y; uint16_t y;
@ -36,7 +36,7 @@ __inline uint16_t lld_readY(void) {
return y; return y;
} }
__inline uint16_t lld_readZ(void) { __inline uint16_t lld_tpReadZ(void) {
return 0; return 0;
} }

View File

@ -6,9 +6,9 @@
#ifdef TOUCHPAD_USE_ADS7843 #ifdef TOUCHPAD_USE_ADS7843
uint16_t lld_readX(void); uint16_t lld_tpReadX(void);
uint16_t lld_readY(void); uint16_t lld_tpReadY(void);
uint16_t lld_readZ(void); uint16_t lld_tpReadZ(void);
#endif #endif
#endif #endif

View File

@ -2,7 +2,7 @@
#ifdef TOUCHPAD_USE_XPT2046 #ifdef TOUCHPAD_USE_XPT2046
__inline uint16_t lld_readX(void) { __inline uint16_t lld_tpReadX(void) {
uint8_t txbuf[1]; uint8_t txbuf[1];
uint8_t rxbuf[2]; uint8_t rxbuf[2];
uint16_t x; uint16_t x;
@ -19,7 +19,7 @@ __inline uint16_t lld_readX(void) {
return x; return x;
} }
__inline uint16_t lld_readY(void) { __inline uint16_t lld_tpReadY(void) {
uint8_t txbuf[1]; uint8_t txbuf[1];
uint8_t rxbuf[2]; uint8_t rxbuf[2];
uint16_t y; uint16_t y;
@ -36,7 +36,7 @@ __inline uint16_t lld_readY(void) {
return y; return y;
} }
__inline uint16_t lld_readZ(void) { __inline uint16_t lld_tpReadZ(void) {
return 0; return 0;
} }

View File

@ -6,9 +6,9 @@
#ifdef TOUCHPAD_USE_XPT2046 #ifdef TOUCHPAD_USE_XPT2046
uint16_t lld_readX(void); uint16_t lld_tpReadX(void);
uint16_t lld_readY(void); uint16_t lld_tpReadY(void);
uint16_t lld_readZ(void); uint16_t lld_tpReadZ(void);
#endif #endif
#endif #endif

View File

@ -116,30 +116,26 @@ float sintable[91] = {
}; };
float getSin(unsigned int degree) float getSin(unsigned int degree) {
{
degree = degree % 360; degree = degree % 360;
if(degree <= 90)
{ if(degree <= 90) {
return sintable[degree]; return sintable[degree];
} }
else if(degree <= 180) else if(degree <= 180) {
{
return sintable[180-degree]; return sintable[180-degree];
} }
else if(degree <= 270) else if(degree <= 270) {
{
return sintable[degree-180]*(-1.0); return sintable[degree-180]*(-1.0);
} }
else else {
{
return sintable[360-degree]*(-1.0); return sintable[360-degree]*(-1.0);
} }
} }
double getCos(unsigned int degree) double getCos(unsigned int degree) {
{
degree = degree % 360; degree = degree % 360;
return getSin(degree+90); return getSin(degree+90);
} }
@ -148,12 +144,11 @@ char sgn(char x){
return (x > 0) ? 1 : (x < 0) ? -1 : 0; return (x > 0) ? 1 : (x < 0) ? -1 : 0;
} }
unsigned char max(unsigned char a, unsigned char b) unsigned char max(unsigned char a, unsigned char b) {
{
return (a<b) ? b : a; return (a<b) ? b : a;
} }
unsigned char min (unsigned char a, unsigned char b) unsigned char min (unsigned char a, unsigned char b) {
{
return (a<b) ? a : b; return (a<b) ? a : b;
} }

View File

@ -19,12 +19,13 @@
* Copyright: 2011 Roland Domke * Copyright: 2011 Roland Domke
*/ */
#ifndef FASTMATH_H_ #ifndef FASTMATH_H
#define FASTMATH_H_ #define FASTMATH_H
char sgn(char x); char sgn(char x);
double getCos(unsigned int degree); double getCos(unsigned int degree);
double getSin(unsigned int degree); double getSin(unsigned int degree);
unsigned char max(unsigned char a, unsigned char b); unsigned char max(unsigned char a, unsigned char b);
unsigned char min(unsigned char a, unsigned char b); unsigned char min(unsigned char a, unsigned char b);
#endif /* FASTMATH_H_ */ #endif /* FASTMATH_H_ */

View File

@ -1,6 +1,4 @@
#include "glcd.h" #include "glcd.h"
#include <stdlib.h>
#include <math.h>
#define EMSG(a) const struct a *emsg = (const struct a*)msg #define EMSG(a) const struct a *emsg = (const struct a*)msg
@ -68,8 +66,9 @@ static msg_t ThreadGLCDWorker(void *arg) {
} }
case GLCD_GET_PIXEL_COLOR: { case GLCD_GET_PIXEL_COLOR: {
/* ToDo */ EMSG(glcd_msg_get_pixel_color);
((struct glcd_msg_get_pixel_color *)emsg)->color =
lld_lcdGetPixelColor(emsg->x, emsg->y);
result = GLCD_DONE; result = GLCD_DONE;
break; break;
} }
@ -110,6 +109,7 @@ static msg_t ThreadGLCDWorker(void *arg) {
/* Done, release msg again. */ /* Done, release msg again. */
chMsgRelease(p, (msg_t)result); chMsgRelease(p, (msg_t)result);
} }
return 0; return 0;
@ -206,16 +206,14 @@ glcd_result_t lcdClear(uint16_t color) {
uint16_t lcdGetPixelColor(uint16_t x, uint16_t y) { uint16_t lcdGetPixelColor(uint16_t x, uint16_t y) {
struct glcd_msg_get_pixel_color msg; struct glcd_msg_get_pixel_color msg;
uint16_t result;
msg.action = GLCD_GET_PIXEL_COLOR; msg.action = GLCD_GET_PIXEL_COLOR;
msg.x = x; msg.x = x;
msg.y = y; msg.y = y;
msg.color = &result;
chMsgSend(workerThread, (msg_t)&msg); chMsgSend(workerThread, (msg_t)&msg);
return result; return msg.color;
} }
glcd_result_t lcdDrawPixel(uint16_t x, uint16_t y, uint16_t color) { glcd_result_t lcdDrawPixel(uint16_t x, uint16_t y, uint16_t color) {
@ -269,6 +267,13 @@ glcd_result_t lcdVerticalScroll(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t
} }
void lcdDrawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color) { void lcdDrawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color) {
// speed improvement if vertical or horizontal
if(x0 == x1) {
lcdFillArea(x0, y0, x0+1, y1, color);
} else if (y0 == y1) {
lcdFillArea(x0, y0, x1, y0+1, color);
} else {
int16_t dy, dx; int16_t dy, dx;
int16_t addx = 1, addy = 1; int16_t addx = 1, addy = 1;
int16_t P, diff; int16_t P, diff;
@ -316,6 +321,7 @@ void lcdDrawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t co
} }
} }
} }
}
uint16_t lcdDrawChar(uint16_t cx, uint16_t cy, char c, font_t font, uint16_t color, uint16_t bkcolor, bool_t tpText) { uint16_t lcdDrawChar(uint16_t cx, uint16_t cy, char c, font_t font, uint16_t color, uint16_t bkcolor, bool_t tpText) {
/* Working pointer */ /* Working pointer */
@ -456,9 +462,7 @@ void lcdDrawRect(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint8_t fil
y0 = TempY; y0 = TempY;
} }
if(filled) { if(filled) {
for(i=x0; i<x1; i++) lcdFillArea(x0, y0, x1, y1, color);
for(j=y0; j<y1; j++)
lcdDrawPixel(i , j , color);
} else { } else {
lcdDrawLine(x0, y0, x1, y0, color); lcdDrawLine(x0, y0, x1, y0, color);
lcdDrawLine(x0, y1, x1, y1, color); lcdDrawLine(x0, y1, x1, y1, color);

View File

@ -4,7 +4,8 @@
#include "ch.h" #include "ch.h"
#include "hal.h" #include "hal.h"
#include "fonts.h" #include "fonts.h"
#include "worker.h" #include "fastMath.h"
#include "glcdWorker.h"
#if !defined(LCD_USE_FSMC) && !defined(LCD_USE_GPIO) && !defined(LCD_USE_SPI) #if !defined(LCD_USE_FSMC) && !defined(LCD_USE_GPIO) && !defined(LCD_USE_SPI)
#include "glcdconf.h" #include "glcdconf.h"

View File

@ -1,5 +1,5 @@
#ifndef WORKER_H #ifndef GLCD_WORKER_H
#define WORKER_H #define GLCD_WORKER_H
#define GLCD_WORKER_SIZE 512 #define GLCD_WORKER_SIZE 512

View File

@ -89,7 +89,7 @@ static inline void buttonUpdate(struct guiNode_t *node) {
} }
static inline void sliderUpdate(struct guiNode_t *node) { static inline void sliderUpdate(struct guiNode_t *node) {
uint16_t length; uint16_t length = 1;
if(node->orientation == horizontal) if(node->orientation == horizontal)
length = node->x1 - node->x0; length = node->x1 - node->x0;
@ -113,8 +113,6 @@ static inline void sliderUpdate(struct guiNode_t *node) {
// a bit of safety here // a bit of safety here
if(node->percentage > 100) if(node->percentage > 100)
node->percentage = 100; node->percentage = 100;
if(node->percentage < 0)
node->percentage = 0;
if(node->orientation == horizontal) { if(node->orientation == horizontal) {
node->value = ((((node->x1)-(node->x0)) * node->percentage) / 100); node->value = ((((node->x1)-(node->x0)) * node->percentage) / 100);
@ -303,6 +301,11 @@ uint8_t guiDrawKeymatrix(uint16_t x0, uint16_t y0, uint16_t size, uint16_t space
return 0; return 0;
// lcdDraw functions // lcdDraw functions
(void)size;
(void)space;
(void)buttonColor;
(void)fontColor;
(void)font;
chHeapFree(newNode); chHeapFree(newNode);

2
readme
View File

@ -5,7 +5,7 @@ http://chibios.org/dokuwiki/doku.php?id=chibios:community
### Maintainer & Contributors ### Maintainer & Contributors
Contributors: - Badger -> console implementation and FSMC for F1 and SSD1289 Contributors: - Badger -> console implementation and FSMC
- Abhishek -> font rendering - Abhishek -> font rendering
- Ben William -> fastMath and lcdDrawEllipse() - Ben William -> fastMath and lcdDrawEllipse()
- dxli (Dongxu Li) -> lcdDrawEllipse() filled option - dxli (Dongxu Li) -> lcdDrawEllipse() filled option

View File

@ -16,14 +16,6 @@ void tpInit(SPIDriver *spip) {
spiStart(spip, &spicfg); spiStart(spip, &spicfg);
} }
static __inline uint16_t readX(void) {
return lld_readX();
}
static __inline uint16_t readY(void) {
return lld_readY();
}
uint8_t tpIRQ(void) { uint8_t tpIRQ(void) {
return (!palReadPad(TP_IRQ_PORT, TP_IRQ)); return (!palReadPad(TP_IRQ_PORT, TP_IRQ));
} }
@ -33,8 +25,8 @@ static uint16_t tpReadRealX(void) {
uint16_t i, x; uint16_t i, x;
for(i=0; i<CONVERSIONS; i++) { for(i=0; i<CONVERSIONS; i++) {
readX(); lld_tpReadX();
results += readX(); results += lld_tpReadX();
} }
x = (((SCREEN_WIDTH-1) * (results/CONVERSIONS)) / 2048); x = (((SCREEN_WIDTH-1) * (results/CONVERSIONS)) / 2048);
@ -47,8 +39,8 @@ static uint16_t tpReadRealY(void) {
uint16_t i, y; uint16_t i, y;
for(i=0; i<CONVERSIONS; i++) { for(i=0; i<CONVERSIONS; i++) {
readY(); lld_tpReadY();
results += readY(); results += lld_tpReadY();
} }
y = (((SCREEN_HEIGHT-1) * (results/CONVERSIONS)) / 2048); y = (((SCREEN_HEIGHT-1) * (results/CONVERSIONS)) / 2048);
@ -97,7 +89,7 @@ uint16_t tpReadY(void) {
} }
uint16_t tpReadZ(void) { uint16_t tpReadZ(void) {
return lld_readZ(); return lld_tpReadZ();
} }
static void tpDrawCross(uint16_t x, uint16_t y) { static void tpDrawCross(uint16_t x, uint16_t y) {