Restructure
Create global include file called gfx.h which knows about sub-system dependancies. Deprecate Touchscreen (GINPUT touch is now working properly) Merge Graph into GWIN Change directory structure to reflect sub-system structure Many small bugs fixed Split Nokia6610 gdisp driver into GE8 and GE12 controller versions Fixed broken demos. GFX sub-systems are now clearly defined and new ones should be much easier to add.
This commit is contained in:
parent
e236a0a6b7
commit
07f3483535
@ -1,51 +0,0 @@
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
#include "graph.h"
|
||||
#include "math.h"
|
||||
|
||||
int data[5][2] = {
|
||||
{ 0, 0 },
|
||||
{ 10, 10 },
|
||||
{ 20, 20 },
|
||||
{ 30, 30 },
|
||||
{ 40, 40 }
|
||||
};
|
||||
|
||||
int main(void) {
|
||||
halInit();
|
||||
chSysInit();
|
||||
|
||||
gdispInit();
|
||||
gdispSetOrientation(GDISP_ROTATE_90);
|
||||
gdispClear(Black);
|
||||
|
||||
Graph G1 = {
|
||||
gdispGetWidth()/2,
|
||||
gdispGetHeight()/2,
|
||||
-150,
|
||||
150,
|
||||
-110,
|
||||
110,
|
||||
21,
|
||||
5,
|
||||
TRUE,
|
||||
TRUE,
|
||||
White,
|
||||
Grey,
|
||||
};
|
||||
|
||||
graphDrawSystem(&G1);
|
||||
|
||||
uint16_t i;
|
||||
for(i = 0; i < 2500; i++)
|
||||
graphDrawDot(&G1, i-170, 80*sin(2*0.2*M_PI*i/180), 1, Blue);
|
||||
|
||||
for(i = 0; i < 2500; i++)
|
||||
graphDrawDot(&G1, i/5-150, 95*sin(2*0.2*M_PI*i/180), 1, Green);
|
||||
|
||||
while(TRUE) {
|
||||
chThdSleepMilliseconds(100);
|
||||
}
|
||||
}
|
||||
|
69
demos/applications/mandelbrot/gfxconf.h
Normal file
69
demos/applications/mandelbrot/gfxconf.h
Normal file
@ -0,0 +1,69 @@
|
||||
/**
|
||||
* This file has a different license to the rest of the GFX system.
|
||||
* You can copy, modify and distribute this file as you see fit.
|
||||
* You do not need to publish your source modifications to this file.
|
||||
* The only thing you are not permitted to do is to relicense it
|
||||
* under a different license.
|
||||
*/
|
||||
|
||||
#ifndef _GFXCONF_H
|
||||
#define _GFXCONF_H
|
||||
|
||||
/* GFX sub-systems to turn on */
|
||||
#define GFX_USE_GDISP TRUE
|
||||
#define GFX_USE_GWIN FALSE
|
||||
#define GFX_USE_GEVENT FALSE
|
||||
#define GFX_USE_GTIMER FALSE
|
||||
#define GFX_USE_GINPUT FALSE
|
||||
|
||||
/* Features for the GDISP sub-system. */
|
||||
#define GDISP_NEED_VALIDATION TRUE
|
||||
#define GDISP_NEED_CLIP FALSE
|
||||
#define GDISP_NEED_TEXT FALSE
|
||||
#define GDISP_NEED_CIRCLE FALSE
|
||||
#define GDISP_NEED_ELLIPSE FALSE
|
||||
#define GDISP_NEED_ARC FALSE
|
||||
#define GDISP_NEED_SCROLL FALSE
|
||||
#define GDISP_NEED_PIXELREAD FALSE
|
||||
#define GDISP_NEED_CONTROL FALSE
|
||||
#define GDISP_NEED_MULTITHREAD FALSE
|
||||
#define GDISP_NEED_ASYNC FALSE
|
||||
#define GDISP_NEED_MSGAPI FALSE
|
||||
|
||||
/* Features for the GWIN sub-system. */
|
||||
#define GWIN_NEED_BUTTON FALSE
|
||||
#define GWIN_NEED_CONSOLE FALSE
|
||||
#define GWIN_NEED_GRAPH FALSE
|
||||
|
||||
/* Features for the GEVENT sub-system. */
|
||||
#define GEVENT_ASSERT_NO_RESOURCE FALSE
|
||||
|
||||
/* Features for the GTIMER sub-system. */
|
||||
/* NONE */
|
||||
|
||||
/* Features for the GINPUT sub-system. */
|
||||
#define GINPUT_NEED_MOUSE FALSE
|
||||
#define GINPUT_NEED_KEYBOARD FALSE
|
||||
#define GINPUT_NEED_TOGGLE FALSE
|
||||
#define GINPUT_NEED_DIAL FALSE
|
||||
|
||||
/* Optional Parameters for various sub-systems */
|
||||
/*
|
||||
#define GDISP_MAX_FONT_HEIGHT 16
|
||||
#define GEVENT_MAXIMUM_SIZE 32
|
||||
#define GEVENT_MAX_SOURCE_LISTENERS 32
|
||||
#define GTIMER_THREAD_WORKAREA_SIZE 512
|
||||
*/
|
||||
|
||||
/* Optional Low Level Driver Definitions */
|
||||
/*
|
||||
#define GDISP_USE_CUSTOM_BOARD FALSE
|
||||
#define GDISP_SCREEN_WIDTH 320
|
||||
#define GDISP_SCREEN_HEIGHT 240
|
||||
#define GDISP_USE_FSMC
|
||||
#define GDISP_USE_GPIO
|
||||
#define GDISP_VMT_NAME1(x) x##YourDriver1
|
||||
#define GDISP_VMT_NAME2(x) x##YourDriver2
|
||||
*/
|
||||
|
||||
#endif /* _GFXCONF_H */
|
@ -20,7 +20,7 @@
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
#include "gfx.h"
|
||||
|
||||
void mandelbrot(float x1, float y1, float x2, float y2) {
|
||||
unsigned int i,j, width, height;
|
||||
@ -63,7 +63,6 @@ int main(void) {
|
||||
chSysInit();
|
||||
|
||||
gdispInit();
|
||||
gdispSetOrientation(GDISP_ROTATE_270);
|
||||
|
||||
/* where to zoom in */
|
||||
cx = -0.086f;
|
||||
|
69
demos/applications/notepad/gfxconf.h
Normal file
69
demos/applications/notepad/gfxconf.h
Normal file
@ -0,0 +1,69 @@
|
||||
/**
|
||||
* This file has a different license to the rest of the GFX system.
|
||||
* You can copy, modify and distribute this file as you see fit.
|
||||
* You do not need to publish your source modifications to this file.
|
||||
* The only thing you are not permitted to do is to relicense it
|
||||
* under a different license.
|
||||
*/
|
||||
|
||||
#ifndef _GFXCONF_H
|
||||
#define _GFXCONF_H
|
||||
|
||||
/* GFX sub-systems to turn on */
|
||||
#define GFX_USE_GDISP TRUE
|
||||
#define GFX_USE_GWIN FALSE
|
||||
#define GFX_USE_GEVENT TRUE
|
||||
#define GFX_USE_GTIMER TRUE
|
||||
#define GFX_USE_GINPUT TRUE
|
||||
|
||||
/* Features for the GDISP sub-system. */
|
||||
#define GDISP_NEED_VALIDATION TRUE
|
||||
#define GDISP_NEED_CLIP TRUE
|
||||
#define GDISP_NEED_TEXT TRUE
|
||||
#define GDISP_NEED_CIRCLE TRUE
|
||||
#define GDISP_NEED_ELLIPSE FALSE
|
||||
#define GDISP_NEED_ARC FALSE
|
||||
#define GDISP_NEED_SCROLL FALSE
|
||||
#define GDISP_NEED_PIXELREAD FALSE
|
||||
#define GDISP_NEED_CONTROL FALSE
|
||||
#define GDISP_NEED_MULTITHREAD FALSE
|
||||
#define GDISP_NEED_ASYNC FALSE
|
||||
#define GDISP_NEED_MSGAPI FALSE
|
||||
|
||||
/* Features for the GWIN sub-system. */
|
||||
#define GWIN_NEED_BUTTON FALSE
|
||||
#define GWIN_NEED_CONSOLE FALSE
|
||||
#define GWIN_NEED_GRAPH FALSE
|
||||
|
||||
/* Features for the GEVENT sub-system. */
|
||||
#define GEVENT_ASSERT_NO_RESOURCE FALSE
|
||||
|
||||
/* Features for the GTIMER sub-system. */
|
||||
/* NONE */
|
||||
|
||||
/* Features for the GINPUT sub-system. */
|
||||
#define GINPUT_NEED_MOUSE TRUE
|
||||
#define GINPUT_NEED_KEYBOARD FALSE
|
||||
#define GINPUT_NEED_TOGGLE FALSE
|
||||
#define GINPUT_NEED_DIAL FALSE
|
||||
|
||||
/* Optional Parameters for various sub-systems */
|
||||
/*
|
||||
#define GDISP_MAX_FONT_HEIGHT 16
|
||||
#define GEVENT_MAXIMUM_SIZE 32
|
||||
#define GEVENT_MAX_SOURCE_LISTENERS 32
|
||||
#define GTIMER_THREAD_WORKAREA_SIZE 512
|
||||
*/
|
||||
|
||||
/* Optional Low Level Driver Definitions */
|
||||
/*
|
||||
#define GDISP_USE_CUSTOM_BOARD FALSE
|
||||
#define GDISP_SCREEN_WIDTH 320
|
||||
#define GDISP_SCREEN_HEIGHT 240
|
||||
#define GDISP_USE_FSMC
|
||||
#define GDISP_USE_GPIO
|
||||
#define GDISP_VMT_NAME1(x) x##YourDriver1
|
||||
#define GDISP_VMT_NAME2(x) x##YourDriver2
|
||||
*/
|
||||
|
||||
#endif /* _GFXCONF_H */
|
@ -20,8 +20,7 @@
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
#include "touchscreen.h"
|
||||
#include "gfx.h"
|
||||
|
||||
#define COLOR_SIZE 20
|
||||
#define PEN_SIZE 20
|
||||
@ -36,25 +35,9 @@
|
||||
#define DRAW_AREA(x, y) (x >= PEN_SIZE + OFFSET + 3 && x <= gdispGetWidth() && \
|
||||
y >= COLOR_SIZE + OFFSET + 3 && y <= gdispGetHeight())
|
||||
|
||||
static const SPIConfig spicfg = {
|
||||
NULL,
|
||||
TP_CS_PORT,
|
||||
TP_CS,
|
||||
/* SPI_CR1_BR_2 | */ SPI_CR1_BR_1 | SPI_CR1_BR_0,
|
||||
};
|
||||
|
||||
TouchscreenDriver TOUCHPADD1 = {
|
||||
&SPID1,
|
||||
&spicfg,
|
||||
TP_IRQ_PORT,
|
||||
TP_IRQ,
|
||||
TRUE
|
||||
};
|
||||
|
||||
void drawScreen(void) {
|
||||
char *msg = "ChibiOS/GFX";
|
||||
|
||||
gdispSetOrientation(GDISP_ROTATE_90);
|
||||
gdispClear(White);
|
||||
gdispDrawString(gdispGetWidth()-gdispGetStringWidth(msg, &fontUI2Double)-3, 3, msg, &fontUI2Double, Black);
|
||||
|
||||
@ -74,8 +57,9 @@ void drawScreen(void) {
|
||||
gdispDrawString(OFFSET * 2, DRAW_PEN(5), "5", &fontLargeNumbers, Black);
|
||||
}
|
||||
|
||||
GEventMouse ev;
|
||||
|
||||
int main(void) {
|
||||
volatile uint16_t x, y;
|
||||
color_t color = Black;
|
||||
uint16_t pen = 0;
|
||||
|
||||
@ -83,16 +67,17 @@ int main(void) {
|
||||
chSysInit();
|
||||
|
||||
gdispInit();
|
||||
tsInit(&TOUCHPADD1);
|
||||
ginputGetMouse(0);
|
||||
|
||||
drawScreen();
|
||||
|
||||
while (TRUE) {
|
||||
x = tsReadX();
|
||||
y = tsReadY();
|
||||
ginputGetMouseStatus(0, &ev);
|
||||
if (!(ev->current_buttons & GINPUT_MOUSE_BTN_LEFT))
|
||||
continue;
|
||||
|
||||
/* inside color box ? */
|
||||
if(y >= OFFSET && y <= COLOR_SIZE) {
|
||||
if(ev->y >= OFFSET && ev->y <= COLOR_SIZE) {
|
||||
if(GET_COLOR(0)) color = Black;
|
||||
else if(GET_COLOR(1)) color = Red;
|
||||
else if(GET_COLOR(2)) color = Yellow;
|
||||
@ -101,7 +86,7 @@ int main(void) {
|
||||
else if(GET_COLOR(5)) color = White;
|
||||
|
||||
/* inside pen box ? */
|
||||
} else if(x >= OFFSET && x <= PEN_SIZE) {
|
||||
} else if(ev->x >= OFFSET && ev->x <= PEN_SIZE) {
|
||||
if(GET_PEN(1)) pen = 0;
|
||||
else if(GET_PEN(2)) pen = 1;
|
||||
else if(GET_PEN(3)) pen = 2;
|
||||
@ -109,11 +94,11 @@ int main(void) {
|
||||
else if(GET_PEN(5)) pen = 4;
|
||||
|
||||
/* inside drawing area ? */
|
||||
} else if(DRAW_AREA(x, y)) {
|
||||
} else if(DRAW_AREA(ev->x, ev->y)) {
|
||||
if(pen == 0)
|
||||
gdispDrawPixel(x, y, color);
|
||||
gdispDrawPixel(ev->x, ev->y, color);
|
||||
else
|
||||
gdispFillCircle(x, y, pen, color);
|
||||
gdispFillCircle(ev->x, ev->y, pen, color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
69
demos/modules/console/gfxconf.h
Normal file
69
demos/modules/console/gfxconf.h
Normal file
@ -0,0 +1,69 @@
|
||||
/**
|
||||
* This file has a different license to the rest of the GFX system.
|
||||
* You can copy, modify and distribute this file as you see fit.
|
||||
* You do not need to publish your source modifications to this file.
|
||||
* The only thing you are not permitted to do is to relicense it
|
||||
* under a different license.
|
||||
*/
|
||||
|
||||
#ifndef _GFXCONF_H
|
||||
#define _GFXCONF_H
|
||||
|
||||
/* GFX sub-systems to turn on */
|
||||
#define GFX_USE_GDISP TRUE
|
||||
#define GFX_USE_GWIN TRUE
|
||||
#define GFX_USE_GEVENT FALSE
|
||||
#define GFX_USE_GTIMER FALSE
|
||||
#define GFX_USE_GINPUT FALSE
|
||||
|
||||
/* Features for the GDISP sub-system. */
|
||||
#define GDISP_NEED_VALIDATION TRUE
|
||||
#define GDISP_NEED_CLIP TRUE
|
||||
#define GDISP_NEED_TEXT TRUE
|
||||
#define GDISP_NEED_CIRCLE FALSE
|
||||
#define GDISP_NEED_ELLIPSE FALSE
|
||||
#define GDISP_NEED_ARC FALSE
|
||||
#define GDISP_NEED_SCROLL FALSE
|
||||
#define GDISP_NEED_PIXELREAD FALSE
|
||||
#define GDISP_NEED_CONTROL FALSE
|
||||
#define GDISP_NEED_MULTITHREAD FALSE
|
||||
#define GDISP_NEED_ASYNC FALSE
|
||||
#define GDISP_NEED_MSGAPI FALSE
|
||||
|
||||
/* Features for the GWIN sub-system. */
|
||||
#define GWIN_NEED_BUTTON FALSE
|
||||
#define GWIN_NEED_CONSOLE TRUE
|
||||
#define GWIN_NEED_GRAPH FALSE
|
||||
|
||||
/* Features for the GEVENT sub-system. */
|
||||
#define GEVENT_ASSERT_NO_RESOURCE FALSE
|
||||
|
||||
/* Features for the GTIMER sub-system. */
|
||||
/* NONE */
|
||||
|
||||
/* Features for the GINPUT sub-system. */
|
||||
#define GINPUT_NEED_MOUSE FALSE
|
||||
#define GINPUT_NEED_KEYBOARD FALSE
|
||||
#define GINPUT_NEED_TOGGLE FALSE
|
||||
#define GINPUT_NEED_DIAL FALSE
|
||||
|
||||
/* Optional Parameters for various sub-systems */
|
||||
/*
|
||||
#define GDISP_MAX_FONT_HEIGHT 16
|
||||
#define GEVENT_MAXIMUM_SIZE 32
|
||||
#define GEVENT_MAX_SOURCE_LISTENERS 32
|
||||
#define GTIMER_THREAD_WORKAREA_SIZE 512
|
||||
*/
|
||||
|
||||
/* Optional Low Level Driver Definitions */
|
||||
/*
|
||||
#define GDISP_USE_CUSTOM_BOARD FALSE
|
||||
#define GDISP_SCREEN_WIDTH 320
|
||||
#define GDISP_SCREEN_HEIGHT 240
|
||||
#define GDISP_USE_FSMC
|
||||
#define GDISP_USE_GPIO
|
||||
#define GDISP_VMT_NAME1(x) x##YourDriver1
|
||||
#define GDISP_VMT_NAME2(x) x##YourDriver2
|
||||
*/
|
||||
|
||||
#endif /* _GFXCONF_H */
|
@ -1,95 +1,90 @@
|
||||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Make sure you have the following stuff enabled in your halconf.h:
|
||||
*
|
||||
* #define GFX_USE_GDISP TRUE
|
||||
* #define GFX_USE_GWIN TRUE
|
||||
* #define GDISP_NEED_SCROLL TRUE (optional but recommended)
|
||||
* #define GDISP_NEED_CLIP TRUE (optional but recommended)
|
||||
* #define GWIN_NEED_CONSOLE TRUE
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "chprintf.h"
|
||||
#include "gdisp.h"
|
||||
#include "gwin.h"
|
||||
|
||||
/* The handles for our three consoles */
|
||||
GHandle GW1, GW2, GW3;
|
||||
|
||||
/* The streams for our three consoles */
|
||||
BaseSequentialStream *S1, *S2, *S3;
|
||||
|
||||
int main(void) {
|
||||
uint8_t i;
|
||||
|
||||
halInit();
|
||||
chSysInit();
|
||||
|
||||
/* initialize and clear the display */
|
||||
gdispInit();
|
||||
gdispClear(Black);
|
||||
|
||||
/* create the three console windows and set a font for each */
|
||||
GW1 = gwinCreateConsole(NULL, 0, 0, gdispGetWidth(), gdispGetHeight()/2, &fontUI2Double);
|
||||
GW2 = gwinCreateConsole(NULL, 0, gdispGetHeight()/2, gdispGetWidth()/2, gdispGetHeight(), &fontSmall);
|
||||
GW3 = gwinCreateConsole(NULL, gdispGetWidth()/2, gdispGetHeight()/2, gdispGetWidth(), gdispGetHeight(), &fontSmall);
|
||||
|
||||
/* Set the fore- and background colors for each console */
|
||||
gwinSetColor(GW1, Green);
|
||||
gwinSetBgColor(GW1, Black);
|
||||
gwinSetColor(GW2, White);
|
||||
gwinSetBgColor(GW2, Blue);
|
||||
gwinSetColor(GW3, Black);
|
||||
gwinSetBgColor(GW3, Red);
|
||||
|
||||
/* clear all console windows - to set background */
|
||||
gwinClear(GW1);
|
||||
gwinClear(GW2);
|
||||
gwinClear(GW3);
|
||||
|
||||
/* receive the stream pointers of each console */
|
||||
S1 = gwinGetConsoleStream(GW1);
|
||||
S2 = gwinGetConsoleStream(GW2);
|
||||
S3 = gwinGetConsoleStream(GW3);
|
||||
|
||||
/* Output some data on the first console */
|
||||
for(i = 0; i < 10; i++) {
|
||||
chprintf(S1, "Hello ChibiOS/GFX!\r\n");
|
||||
}
|
||||
|
||||
/* Output some data on the second console */
|
||||
for(i = 0; i < 16; i++) {
|
||||
chprintf(S2, "Message Nr.: %d\r\n", i+1);
|
||||
}
|
||||
|
||||
/* Output some data on the third console */
|
||||
for(i = 0; i < 18; i++) {
|
||||
chprintf(S3, "Message Nr.: %d\r\n", i+1);
|
||||
}
|
||||
|
||||
while(TRUE) {
|
||||
chThdSleepMilliseconds(500);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* The following stuff is optional in your gfxconf.h:
|
||||
*
|
||||
* #define GDISP_NEED_SCROLL TRUE (optional but recommended if your GDISP driver supports it)
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "chprintf.h"
|
||||
#include "gfx.h"
|
||||
|
||||
/* The handles for our three consoles */
|
||||
GHandle GW1, GW2, GW3;
|
||||
|
||||
/* The streams for our three consoles */
|
||||
BaseSequentialStream *S1, *S2, *S3;
|
||||
|
||||
int main(void) {
|
||||
uint8_t i;
|
||||
|
||||
halInit();
|
||||
chSysInit();
|
||||
|
||||
/* initialize and clear the display */
|
||||
gdispInit();
|
||||
gdispClear(Black);
|
||||
|
||||
/* create the three console windows and set a font for each */
|
||||
GW1 = gwinCreateConsole(NULL, 0, 0, gdispGetWidth(), gdispGetHeight()/2, &fontUI2Double);
|
||||
GW2 = gwinCreateConsole(NULL, 0, gdispGetHeight()/2, gdispGetWidth()/2, gdispGetHeight(), &fontSmall);
|
||||
GW3 = gwinCreateConsole(NULL, gdispGetWidth()/2, gdispGetHeight()/2, gdispGetWidth(), gdispGetHeight(), &fontSmall);
|
||||
|
||||
/* Set the fore- and background colors for each console */
|
||||
gwinSetColor(GW1, Green);
|
||||
gwinSetBgColor(GW1, Black);
|
||||
gwinSetColor(GW2, White);
|
||||
gwinSetBgColor(GW2, Blue);
|
||||
gwinSetColor(GW3, Black);
|
||||
gwinSetBgColor(GW3, Red);
|
||||
|
||||
/* clear all console windows - to set background */
|
||||
gwinClear(GW1);
|
||||
gwinClear(GW2);
|
||||
gwinClear(GW3);
|
||||
|
||||
/* receive the stream pointers of each console */
|
||||
S1 = gwinGetConsoleStream(GW1);
|
||||
S2 = gwinGetConsoleStream(GW2);
|
||||
S3 = gwinGetConsoleStream(GW3);
|
||||
|
||||
/* Output some data on the first console */
|
||||
for(i = 0; i < 10; i++) {
|
||||
chprintf(S1, "Hello ChibiOS/GFX!\r\n");
|
||||
}
|
||||
|
||||
/* Output some data on the second console */
|
||||
for(i = 0; i < 16; i++) {
|
||||
chprintf(S2, "Message Nr.: %d\r\n", i+1);
|
||||
}
|
||||
|
||||
/* Output some data on the third console */
|
||||
for(i = 0; i < 18; i++) {
|
||||
chprintf(S3, "Message Nr.: %d\r\n", i+1);
|
||||
}
|
||||
|
||||
while(TRUE) {
|
||||
chThdSleepMilliseconds(500);
|
||||
}
|
||||
}
|
||||
|
||||
|
69
demos/modules/ginput_touch_driver_test/gfxconf.h
Normal file
69
demos/modules/ginput_touch_driver_test/gfxconf.h
Normal file
@ -0,0 +1,69 @@
|
||||
/**
|
||||
* This file has a different license to the rest of the GFX system.
|
||||
* You can copy, modify and distribute this file as you see fit.
|
||||
* You do not need to publish your source modifications to this file.
|
||||
* The only thing you are not permitted to do is to relicense it
|
||||
* under a different license.
|
||||
*/
|
||||
|
||||
#ifndef _GFXCONF_H
|
||||
#define _GFXCONF_H
|
||||
|
||||
/* GFX sub-systems to turn on */
|
||||
#define GFX_USE_GDISP TRUE
|
||||
#define GFX_USE_GWIN TRUE
|
||||
#define GFX_USE_GEVENT TRUE
|
||||
#define GFX_USE_GTIMER TRUE
|
||||
#define GFX_USE_GINPUT TRUE
|
||||
|
||||
/* Features for the GDISP sub-system. */
|
||||
#define GDISP_NEED_VALIDATION TRUE
|
||||
#define GDISP_NEED_CLIP TRUE
|
||||
#define GDISP_NEED_TEXT TRUE
|
||||
#define GDISP_NEED_CIRCLE FALSE
|
||||
#define GDISP_NEED_ELLIPSE FALSE
|
||||
#define GDISP_NEED_ARC FALSE
|
||||
#define GDISP_NEED_SCROLL FALSE
|
||||
#define GDISP_NEED_PIXELREAD FALSE
|
||||
#define GDISP_NEED_CONTROL FALSE
|
||||
#define GDISP_NEED_MULTITHREAD TRUE
|
||||
#define GDISP_NEED_ASYNC FALSE
|
||||
#define GDISP_NEED_MSGAPI FALSE
|
||||
|
||||
/* Features for the GWIN sub-system. */
|
||||
#define GWIN_NEED_BUTTON TRUE
|
||||
#define GWIN_NEED_CONSOLE TRUE
|
||||
#define GWIN_NEED_GRAPH FALSE
|
||||
|
||||
/* Features for the GEVENT sub-system. */
|
||||
#define GEVENT_ASSERT_NO_RESOURCE FALSE
|
||||
|
||||
/* Features for the GTIMER sub-system. */
|
||||
/* NONE */
|
||||
|
||||
/* Features for the GINPUT sub-system. */
|
||||
#define GINPUT_NEED_MOUSE TRUE
|
||||
#define GINPUT_NEED_KEYBOARD FALSE
|
||||
#define GINPUT_NEED_TOGGLE FALSE
|
||||
#define GINPUT_NEED_DIAL FALSE
|
||||
|
||||
/* Optional Parameters for various sub-systems */
|
||||
/*
|
||||
#define GDISP_MAX_FONT_HEIGHT 16
|
||||
#define GEVENT_MAXIMUM_SIZE 32
|
||||
#define GEVENT_MAX_SOURCE_LISTENERS 32
|
||||
#define GTIMER_THREAD_WORKAREA_SIZE 512
|
||||
*/
|
||||
|
||||
/* Optional Low Level Driver Definitions */
|
||||
/*
|
||||
#define GDISP_USE_CUSTOM_BOARD FALSE
|
||||
#define GDISP_SCREEN_WIDTH 320
|
||||
#define GDISP_SCREEN_HEIGHT 240
|
||||
#define GDISP_USE_FSMC
|
||||
#define GDISP_USE_GPIO
|
||||
#define GDISP_VMT_NAME1(x) x##YourDriver1
|
||||
#define GDISP_VMT_NAME2(x) x##YourDriver2
|
||||
*/
|
||||
|
||||
#endif /* _GFXCONF_H */
|
@ -18,30 +18,10 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Make sure you have the following enabled in your halconf.h:
|
||||
*
|
||||
* #define GFX_USE_GDISP TRUE
|
||||
* #define GFX_USE_GINPUT TRUE
|
||||
* #define GFX_USE_GEVENT TRUE
|
||||
* #define GFX_USE_GTIMER TRUE
|
||||
* #define GFX_USE_GWIN TRUE
|
||||
*
|
||||
* #define GWIN_NEED_CONSOLE TRUE
|
||||
* #define GWIN_NEED_BUTTON TRUE
|
||||
*
|
||||
* #define GINPUT_NEED_MOUSE TRUE
|
||||
* #define GINPUT_NEED_TOUCH TRUE
|
||||
*
|
||||
* #define GDISP_NEED_CLIP TRUE
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "chprintf.h"
|
||||
#include "gdisp.h"
|
||||
#include "ginput.h"
|
||||
#include "gwin.h"
|
||||
#include "gfx.h"
|
||||
|
||||
static GConsoleObject gc;
|
||||
static GButtonObject gNext;
|
||||
|
69
demos/modules/graph/gfxconf.h
Normal file
69
demos/modules/graph/gfxconf.h
Normal file
@ -0,0 +1,69 @@
|
||||
/**
|
||||
* This file has a different license to the rest of the GFX system.
|
||||
* You can copy, modify and distribute this file as you see fit.
|
||||
* You do not need to publish your source modifications to this file.
|
||||
* The only thing you are not permitted to do is to relicense it
|
||||
* under a different license.
|
||||
*/
|
||||
|
||||
#ifndef _GFXCONF_H
|
||||
#define _GFXCONF_H
|
||||
|
||||
/* GFX sub-systems to turn on */
|
||||
#define GFX_USE_GDISP TRUE
|
||||
#define GFX_USE_GWIN TRUE
|
||||
#define GFX_USE_GEVENT FALSE
|
||||
#define GFX_USE_GTIMER FALSE
|
||||
#define GFX_USE_GINPUT FALSE
|
||||
|
||||
/* Features for the GDISP sub-system. */
|
||||
#define GDISP_NEED_VALIDATION TRUE
|
||||
#define GDISP_NEED_CLIP TRUE
|
||||
#define GDISP_NEED_TEXT FALSE
|
||||
#define GDISP_NEED_CIRCLE TRUE
|
||||
#define GDISP_NEED_ELLIPSE FALSE
|
||||
#define GDISP_NEED_ARC FALSE
|
||||
#define GDISP_NEED_SCROLL FALSE
|
||||
#define GDISP_NEED_PIXELREAD FALSE
|
||||
#define GDISP_NEED_CONTROL FALSE
|
||||
#define GDISP_NEED_MULTITHREAD FALSE
|
||||
#define GDISP_NEED_ASYNC FALSE
|
||||
#define GDISP_NEED_MSGAPI FALSE
|
||||
|
||||
/* Features for the GWIN sub-system. */
|
||||
#define GWIN_NEED_BUTTON FALSE
|
||||
#define GWIN_NEED_CONSOLE FALSE
|
||||
#define GWIN_NEED_GRAPH TRUE
|
||||
|
||||
/* Features for the GEVENT sub-system. */
|
||||
#define GEVENT_ASSERT_NO_RESOURCE FALSE
|
||||
|
||||
/* Features for the GTIMER sub-system. */
|
||||
/* NONE */
|
||||
|
||||
/* Features for the GINPUT sub-system. */
|
||||
#define GINPUT_NEED_MOUSE FALSE
|
||||
#define GINPUT_NEED_KEYBOARD FALSE
|
||||
#define GINPUT_NEED_TOGGLE FALSE
|
||||
#define GINPUT_NEED_DIAL FALSE
|
||||
|
||||
/* Optional Parameters for various sub-systems */
|
||||
/*
|
||||
#define GDISP_MAX_FONT_HEIGHT 16
|
||||
#define GEVENT_MAXIMUM_SIZE 32
|
||||
#define GEVENT_MAX_SOURCE_LISTENERS 32
|
||||
#define GTIMER_THREAD_WORKAREA_SIZE 512
|
||||
*/
|
||||
|
||||
/* Optional Low Level Driver Definitions */
|
||||
/*
|
||||
#define GDISP_USE_CUSTOM_BOARD FALSE
|
||||
#define GDISP_SCREEN_WIDTH 320
|
||||
#define GDISP_SCREEN_HEIGHT 240
|
||||
#define GDISP_USE_FSMC
|
||||
#define GDISP_USE_GPIO
|
||||
#define GDISP_VMT_NAME1(x) x##YourDriver1
|
||||
#define GDISP_VMT_NAME2(x) x##YourDriver2
|
||||
*/
|
||||
|
||||
#endif /* _GFXCONF_H */
|
54
demos/modules/graph/main.c
Normal file
54
demos/modules/graph/main.c
Normal file
@ -0,0 +1,54 @@
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gfx.h"
|
||||
#include "math.h"
|
||||
|
||||
int data[5][2] = {
|
||||
{ 0, 0 },
|
||||
{ 10, 10 },
|
||||
{ 20, 20 },
|
||||
{ 30, 30 },
|
||||
{ 40, 40 }
|
||||
};
|
||||
|
||||
GGraphObject g;
|
||||
|
||||
GGraphStyle GraphStyle2 = {
|
||||
{ GGRAPH_POINT_DOT, 0, Green }, // point
|
||||
{ GGRAPH_LINE_DOT, 2, Gray }, // line
|
||||
{ GGRAPH_LINE_SOLID, 0, White }, // x axis
|
||||
{ GGRAPH_LINE_SOLID, 0, White }, // y axis
|
||||
{ GGRAPH_LINE_NONE, 0, White, 0 }, // x grid
|
||||
{ GGRAPH_LINE_NONE, 0, White, 0 }, // y grid
|
||||
GWIN_GRAPH_STYLE_XAXIS_ARROWS|GWIN_GRAPH_STYLE_YAXIS_ARROWS // flags
|
||||
};
|
||||
|
||||
int main(void) {
|
||||
GHandle gh;
|
||||
uint16_t i;
|
||||
|
||||
halInit();
|
||||
chSysInit();
|
||||
|
||||
gdispInit();
|
||||
gdispClear(Black);
|
||||
|
||||
gh = gwinCreateGraph(0, 0, gdispGetWidth(), gdispGetHeight());
|
||||
|
||||
gwinGraphSetOrigin(gh, 150, 150);
|
||||
gwinGraphDrawAxis(gh);
|
||||
|
||||
for(i = 0; i < 2500; i++)
|
||||
gwinGraphDrawPoint(gh, i-170, 80*sin(2*0.2*M_PI*i/180));
|
||||
|
||||
gwinGraphStartSet(gh);
|
||||
gwinGraphSetStyle(gh, &GraphStyle2);
|
||||
|
||||
for(i = 0; i < 2500; i++)
|
||||
gwinGraphDrawPoint(gh, i/5-150, 95*sin(2*0.2*M_PI*i/180));
|
||||
|
||||
while(TRUE) {
|
||||
chThdSleepMilliseconds(100);
|
||||
}
|
||||
}
|
||||
|
69
demos/modules/gtimer/gfxconf.h
Normal file
69
demos/modules/gtimer/gfxconf.h
Normal file
@ -0,0 +1,69 @@
|
||||
/**
|
||||
* This file has a different license to the rest of the GFX system.
|
||||
* You can copy, modify and distribute this file as you see fit.
|
||||
* You do not need to publish your source modifications to this file.
|
||||
* The only thing you are not permitted to do is to relicense it
|
||||
* under a different license.
|
||||
*/
|
||||
|
||||
#ifndef _GFXCONF_H
|
||||
#define _GFXCONF_H
|
||||
|
||||
/* GFX sub-systems to turn on */
|
||||
#define GFX_USE_GDISP FALSE
|
||||
#define GFX_USE_GWIN FALSE
|
||||
#define GFX_USE_GEVENT FALSE
|
||||
#define GFX_USE_GTIMER TRUE
|
||||
#define GFX_USE_GINPUT FALSE
|
||||
|
||||
/* Features for the GDISP sub-system. */
|
||||
#define GDISP_NEED_VALIDATION TRUE
|
||||
#define GDISP_NEED_CLIP TRUE
|
||||
#define GDISP_NEED_TEXT TRUE
|
||||
#define GDISP_NEED_CIRCLE FALSE
|
||||
#define GDISP_NEED_ELLIPSE FALSE
|
||||
#define GDISP_NEED_ARC FALSE
|
||||
#define GDISP_NEED_SCROLL FALSE
|
||||
#define GDISP_NEED_PIXELREAD FALSE
|
||||
#define GDISP_NEED_CONTROL FALSE
|
||||
#define GDISP_NEED_MULTITHREAD FALSE
|
||||
#define GDISP_NEED_ASYNC FALSE
|
||||
#define GDISP_NEED_MSGAPI FALSE
|
||||
|
||||
/* Features for the GWIN sub-system. */
|
||||
#define GWIN_NEED_BUTTON FALSE
|
||||
#define GWIN_NEED_CONSOLE FALSE
|
||||
#define GWIN_NEED_GRAPH FALSE
|
||||
|
||||
/* Features for the GEVENT sub-system. */
|
||||
#define GEVENT_ASSERT_NO_RESOURCE FALSE
|
||||
|
||||
/* Features for the GTIMER sub-system. */
|
||||
/* NONE */
|
||||
|
||||
/* Features for the GINPUT sub-system. */
|
||||
#define GINPUT_NEED_MOUSE FALSE
|
||||
#define GINPUT_NEED_KEYBOARD FALSE
|
||||
#define GINPUT_NEED_TOGGLE FALSE
|
||||
#define GINPUT_NEED_DIAL FALSE
|
||||
|
||||
/* Optional Parameters for various sub-systems */
|
||||
/*
|
||||
#define GDISP_MAX_FONT_HEIGHT 16
|
||||
#define GEVENT_MAXIMUM_SIZE 32
|
||||
#define GEVENT_MAX_SOURCE_LISTENERS 32
|
||||
#define GTIMER_THREAD_WORKAREA_SIZE 512
|
||||
*/
|
||||
|
||||
/* Optional Low Level Driver Definitions */
|
||||
/*
|
||||
#define GDISP_USE_CUSTOM_BOARD FALSE
|
||||
#define GDISP_SCREEN_WIDTH 320
|
||||
#define GDISP_SCREEN_HEIGHT 240
|
||||
#define GDISP_USE_FSMC
|
||||
#define GDISP_USE_GPIO
|
||||
#define GDISP_VMT_NAME1(x) x##YourDriver1
|
||||
#define GDISP_VMT_NAME2(x) x##YourDriver2
|
||||
*/
|
||||
|
||||
#endif /* _GFXCONF_H */
|
@ -1,65 +1,59 @@
|
||||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Make sure you have enabled the GTimer module in your halconf.h:
|
||||
*
|
||||
* #define GFX_USE_GTIMER TRUE
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gtimer.h"
|
||||
|
||||
GTimer GT1, GT2;
|
||||
|
||||
void callback1(void* arg) {
|
||||
(void)arg;
|
||||
|
||||
palTogglePad(GPIOD, GPIOD_LED3);
|
||||
}
|
||||
|
||||
void callback2(void* arg) {
|
||||
(void)arg;
|
||||
|
||||
palSetPad(GPIOD, GPIOD_LED4);
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
halInit();
|
||||
chSysInit();
|
||||
|
||||
/* initialize the timers */
|
||||
gtimerInit(>1);
|
||||
gtimerInit(>2);
|
||||
|
||||
/* continious mode - callback1() called without any argument every 250ms */
|
||||
gtimerStart(>1, callback1, NULL, TRUE, 250);
|
||||
|
||||
/* single shot mode - callback2() called without any argument once after 1s */
|
||||
gtimerStart(>2, callback2, NULL, FALSE, 1000);
|
||||
|
||||
while(TRUE) {
|
||||
chThdSleepMilliseconds(500);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gfx.h"
|
||||
|
||||
GTimer GT1, GT2;
|
||||
|
||||
void callback1(void* arg) {
|
||||
(void)arg;
|
||||
|
||||
palTogglePad(GPIOD, GPIOD_LED3);
|
||||
}
|
||||
|
||||
void callback2(void* arg) {
|
||||
(void)arg;
|
||||
|
||||
palSetPad(GPIOD, GPIOD_LED4);
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
halInit();
|
||||
chSysInit();
|
||||
|
||||
/* initialize the timers */
|
||||
gtimerInit(>1);
|
||||
gtimerInit(>2);
|
||||
|
||||
/* continious mode - callback1() called without any argument every 250ms */
|
||||
gtimerStart(>1, callback1, NULL, TRUE, 250);
|
||||
|
||||
/* single shot mode - callback2() called without any argument once after 1s */
|
||||
gtimerStart(>2, callback2, NULL, FALSE, 1000);
|
||||
|
||||
while(TRUE) {
|
||||
chThdSleepMilliseconds(500);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
69
demos/modules/window/gfxconf.h
Normal file
69
demos/modules/window/gfxconf.h
Normal file
@ -0,0 +1,69 @@
|
||||
/**
|
||||
* This file has a different license to the rest of the GFX system.
|
||||
* You can copy, modify and distribute this file as you see fit.
|
||||
* You do not need to publish your source modifications to this file.
|
||||
* The only thing you are not permitted to do is to relicense it
|
||||
* under a different license.
|
||||
*/
|
||||
|
||||
#ifndef _GFXCONF_H
|
||||
#define _GFXCONF_H
|
||||
|
||||
/* GFX sub-systems to turn on */
|
||||
#define GFX_USE_GDISP TRUE
|
||||
#define GFX_USE_GWIN TRUE
|
||||
#define GFX_USE_GEVENT FALSE
|
||||
#define GFX_USE_GTIMER FALSE
|
||||
#define GFX_USE_GINPUT FALSE
|
||||
|
||||
/* Features for the GDISP sub-system. */
|
||||
#define GDISP_NEED_VALIDATION TRUE
|
||||
#define GDISP_NEED_CLIP TRUE
|
||||
#define GDISP_NEED_TEXT TRUE
|
||||
#define GDISP_NEED_CIRCLE TRUE
|
||||
#define GDISP_NEED_ELLIPSE FALSE
|
||||
#define GDISP_NEED_ARC FALSE
|
||||
#define GDISP_NEED_SCROLL FALSE
|
||||
#define GDISP_NEED_PIXELREAD FALSE
|
||||
#define GDISP_NEED_CONTROL FALSE
|
||||
#define GDISP_NEED_MULTITHREAD FALSE
|
||||
#define GDISP_NEED_ASYNC FALSE
|
||||
#define GDISP_NEED_MSGAPI FALSE
|
||||
|
||||
/* Features for the GWIN sub-system. */
|
||||
#define GWIN_NEED_BUTTON FALSE
|
||||
#define GWIN_NEED_CONSOLE FALSE
|
||||
#define GWIN_NEED_GRAPH FALSE
|
||||
|
||||
/* Features for the GEVENT sub-system. */
|
||||
#define GEVENT_ASSERT_NO_RESOURCE FALSE
|
||||
|
||||
/* Features for the GTIMER sub-system. */
|
||||
/* NONE */
|
||||
|
||||
/* Features for the GINPUT sub-system. */
|
||||
#define GINPUT_NEED_MOUSE FALSE
|
||||
#define GINPUT_NEED_KEYBOARD FALSE
|
||||
#define GINPUT_NEED_TOGGLE FALSE
|
||||
#define GINPUT_NEED_DIAL FALSE
|
||||
|
||||
/* Optional Parameters for various sub-systems */
|
||||
/*
|
||||
#define GDISP_MAX_FONT_HEIGHT 16
|
||||
#define GEVENT_MAXIMUM_SIZE 32
|
||||
#define GEVENT_MAX_SOURCE_LISTENERS 32
|
||||
#define GTIMER_THREAD_WORKAREA_SIZE 512
|
||||
*/
|
||||
|
||||
/* Optional Low Level Driver Definitions */
|
||||
/*
|
||||
#define GDISP_USE_CUSTOM_BOARD FALSE
|
||||
#define GDISP_SCREEN_WIDTH 320
|
||||
#define GDISP_SCREEN_HEIGHT 240
|
||||
#define GDISP_USE_FSMC
|
||||
#define GDISP_USE_GPIO
|
||||
#define GDISP_VMT_NAME1(x) x##YourDriver1
|
||||
#define GDISP_VMT_NAME2(x) x##YourDriver2
|
||||
*/
|
||||
|
||||
#endif /* _GFXCONF_H */
|
@ -1,72 +1,62 @@
|
||||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Make sure you have the following stuff enabled in your halconf.h:
|
||||
*
|
||||
* #define GFX_USE_GDISP TRUE
|
||||
* #define GDISP_NEED_SCROLL TRUE
|
||||
* #define GDISP_NEED_CLIP TRUE (optional but recommended)
|
||||
*/
|
||||
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
#include "gwin.h"
|
||||
|
||||
/* The handles for our two Windows */
|
||||
GHandle GW1, GW2;
|
||||
|
||||
int main(void) {
|
||||
halInit();
|
||||
chSysInit();
|
||||
|
||||
/* Initialize and clear the display */
|
||||
gdispInit();
|
||||
gdispClear(Lime);
|
||||
|
||||
/* Create two windows */
|
||||
GW1 = gwinCreateWindow(NULL, 20, 10, 200, 150);
|
||||
GW2 = gwinCreateWindow(NULL, 50, 190, 150, 100);
|
||||
|
||||
/* Set fore- and background colors for both windows */
|
||||
gwinSetColor(GW1, Black);
|
||||
gwinSetBgColor(GW1, White);
|
||||
gwinSetColor(GW2, White);
|
||||
gwinSetBgColor(GW2, Blue);
|
||||
|
||||
/* Clear both windows - to set background color */
|
||||
gwinClear(GW1);
|
||||
gwinClear(GW2);
|
||||
|
||||
/*
|
||||
* Draw two filled circles at the same coordinate
|
||||
* of each window to demonstrate the relative coordinates
|
||||
* of windows
|
||||
*/
|
||||
gwinFillCircle(GW1, 20, 20, 15);
|
||||
gwinFillCircle(GW2, 20, 20, 15);
|
||||
|
||||
while(TRUE) {
|
||||
chThdSleepMilliseconds(500);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gfx.h"
|
||||
|
||||
/* The handles for our two Windows */
|
||||
GHandle GW1, GW2;
|
||||
|
||||
int main(void) {
|
||||
halInit();
|
||||
chSysInit();
|
||||
|
||||
/* Initialize and clear the display */
|
||||
gdispInit();
|
||||
gdispClear(Lime);
|
||||
|
||||
/* Create two windows */
|
||||
GW1 = gwinCreateWindow(NULL, 20, 10, 200, 150);
|
||||
GW2 = gwinCreateWindow(NULL, 50, 190, 150, 100);
|
||||
|
||||
/* Set fore- and background colors for both windows */
|
||||
gwinSetColor(GW1, Black);
|
||||
gwinSetBgColor(GW1, White);
|
||||
gwinSetColor(GW2, White);
|
||||
gwinSetBgColor(GW2, Blue);
|
||||
|
||||
/* Clear both windows - to set background color */
|
||||
gwinClear(GW1);
|
||||
gwinClear(GW2);
|
||||
|
||||
/*
|
||||
* Draw two filled circles at the same coordinate
|
||||
* of each window to demonstrate the relative coordinates
|
||||
* of windows
|
||||
*/
|
||||
gwinFillCircle(GW1, 20, 20, 15);
|
||||
gwinFillCircle(GW2, 20, 20, 15);
|
||||
|
||||
while(TRUE) {
|
||||
chThdSleepMilliseconds(500);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -28,12 +28,12 @@
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
/* Include the emulation code for things we don't support */
|
||||
#include "lld/gdisp/emulation.c"
|
||||
#include "gdisp/lld/emulation.c"
|
||||
|
||||
#if defined(GDISP_USE_CUSTOM_BOARD) && GDISP_USE_CUSTOM_BOARD
|
||||
/* Include the user supplied board definitions */
|
||||
@ -50,9 +50,11 @@
|
||||
|
||||
/* This controller is only ever used with a 240 x 320 display */
|
||||
#if defined(GDISP_SCREEN_HEIGHT)
|
||||
#warning "GDISP: This low level driver does not support setting a screen size. It is being ignored."
|
||||
#undef GDISP_SCREEN_HEIGHT
|
||||
#endif
|
||||
#if defined(GDISP_SCREEN_WIDTH)
|
||||
#warning "GDISP: This low level driver does not support setting a screen size. It is being ignored."
|
||||
#undef GDISP_SCREEN_WIDTH
|
||||
#endif
|
||||
|
||||
|
@ -1,5 +0,0 @@
|
||||
# List the required driver.
|
||||
GFXSRC += $(GFXLIB)/drivers/gdisp/Nokia6610/gdisp_lld.c
|
||||
|
||||
# Required include directories
|
||||
GFXINC += $(GFXLIB)/drivers/gdisp/Nokia6610
|
@ -19,8 +19,8 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/Nokia6610/gdisp_lld.c
|
||||
* @brief GDISP Graphics Driver subsystem low level driver source for the Nokia6610 display.
|
||||
* @file drivers/gdisp/Nokia6610GE12/gdisp_lld.c
|
||||
* @brief GDISP Graphics Driver subsystem low level driver source for the Nokia6610 GE12 display.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
* @{
|
||||
@ -28,31 +28,27 @@
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
/* Include the emulation code for things we don't support */
|
||||
#include "lld/gdisp/emulation.c"
|
||||
#include "gdisp/lld/emulation.c"
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local definitions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/* Controller definitions */
|
||||
#if defined(GDISP_USE_GE8)
|
||||
#include "GE8.h"
|
||||
#elif defined(GDISP_USE_GE12)
|
||||
#include "GE12.h"
|
||||
#else
|
||||
#error "gdispNokia6610: Either GDISP_USE_GE8 or GDISP_USE_GE12 must be defined depending on your controller"
|
||||
#endif
|
||||
#include "GE12.h"
|
||||
|
||||
/* This controller is only ever used with a 132 x 132 display */
|
||||
#if defined(GDISP_SCREEN_HEIGHT)
|
||||
#warning "GDISP: This low level driver does not support setting a screen size. It is being ignored."
|
||||
#undef GDISP_SCREEN_HEIGHT
|
||||
#endif
|
||||
#if defined(GDISP_SCREEN_WIDTH)
|
||||
#warning "GDISP: This low level driver does not support setting a screen size. It is being ignored."
|
||||
#undef GDISP_SCREEN_WIDTH
|
||||
#endif
|
||||
#define GDISP_SCREEN_HEIGHT 132
|
||||
@ -130,87 +126,66 @@ bool_t GDISP_LLD(init)(void) {
|
||||
// Get the bus for the following initialisation commands
|
||||
acquire_bus();
|
||||
|
||||
#if defined(GDISP_USE_GE8)
|
||||
write_cmd3(DISCTL, 0x00, 0x20, 0x00); // Display control
|
||||
// P1: 0x00 = 2 divisions, switching period=8 (default)
|
||||
// P2: 0x20 = nlines/4 - 1 = 132/4 - 1 = 32)
|
||||
// P3: 0x00 = no inversely highlighted lines
|
||||
write_cmd1(COMSCN, 0x01); // COM scan P1: 0x01 = Scan 1->80, 160<-81
|
||||
write_cmd(OSCON); // Internal oscilator ON
|
||||
write_cmd(SLPOUT); // Sleep out
|
||||
write_cmd1(PWRCTR, 0x0F); // Power control - reference voltage regulator on, circuit voltage follower on, BOOST ON
|
||||
write_cmd3(DATCTL, 0x48, 0x00, 0x02); // Data control
|
||||
// P1: 0x01 = page address inverted, column address normal, address scan in column direction
|
||||
// P2: 0x00 = RGB sequence (default value)
|
||||
// P3: 0x02 = Grayscale -> 16 (selects 12-bit color, type A)
|
||||
write_cmd2(VOLCTR, GDISP_INITIAL_CONTRAST, 0x03); // Voltage control (contrast setting)
|
||||
// P1 = Contrast
|
||||
// P2 = 3 resistance ratio (only value that works)
|
||||
delayms(100); // allow power supply to stabilize
|
||||
write_cmd(DISON); // Turn on the display
|
||||
|
||||
#elif defined(GDISP_USE_GE12)
|
||||
// UNTESTED
|
||||
#if 1
|
||||
write_cmd(SLEEPOUT); // Sleep out
|
||||
write_cmd(INVON); // Inversion on: seems to be required for this controller
|
||||
write_cmd1(COLMOD, 0x03); // Color Interface Pixel Format - 0x03 = 12 bits-per-pixel
|
||||
write_cmd1(MADCTL, 0xC8); // Memory access controler - 0xC0 = mirror x and y, reverse rgb
|
||||
write_cmd1(SETCON, GDISP_INITIAL_CONTRAST); // Write contrast
|
||||
delayms(20);
|
||||
write_cmd(DISPON); // Display On
|
||||
#else
|
||||
// Alternative
|
||||
write_cmd(SOFTRST); // Software Reset
|
||||
delayms(20);
|
||||
write_cmd(INITESC); // Initial escape
|
||||
delayms(20);
|
||||
write_cmd1(REFSET, 0x00); // Refresh set
|
||||
write_cmd(DISPCTRL); // Set Display control - really 7 bytes of data
|
||||
write_data(128); // Set the lenght of one selection term
|
||||
write_data(128); // Set N inversion -> no N inversion
|
||||
write_data(134); // Set frame frequence and bias rate -> 2 devision of frequency and 1/8 bias, 1/67 duty, 96x67 size
|
||||
write_data(84); // Set duty parameter
|
||||
write_data(69); // Set duty parameter
|
||||
write_data(82); // Set duty parameter
|
||||
write_data(67); // Set duty parameter
|
||||
write_cmd(GRAYSCALE0); // Grey scale 0 position set - really 15 bytes of data
|
||||
write_data(1); // GCP1 - gray lavel to be output when the RAM data is "0001"
|
||||
write_data(2); // GCP2 - gray lavel to be output when the RAM data is "0010"
|
||||
write_data(4); // GCP3 - gray lavel to be output when the RAM data is "0011"
|
||||
write_data(8); // GCP4 - gray lavel to be output when the RAM data is "0100"
|
||||
write_data(16); // GCP5 - gray lavel to be output when the RAM data is "0101"
|
||||
write_data(30); // GCP6 - gray lavel to be output when the RAM data is "0110"
|
||||
write_data(40); // GCP7 - gray lavel to be output when the RAM data is "0111"
|
||||
write_data(50); // GCP8 - gray lavel to be output when the RAM data is "1000"
|
||||
write_data(60); // GCP9 - gray lavel to be output when the RAM data is "1001"
|
||||
write_data(70); // GCP10 - gray lavel to be output when the RAM data is "1010"
|
||||
write_data(80); // GCP11 - gray lavel to be output when the RAM data is "1011"
|
||||
write_data(90); // GCP12 - gray lavel to be output when the RAM data is "1100"
|
||||
write_data(100); // GCP13 - gray lavel to be output when the RAM data is "1101"
|
||||
write_data(110); // GCP14 - gray lavel to be output when the RAM data is "1110"
|
||||
write_data(127); // GCP15 - gray lavel to be output when the RAM data is "1111"
|
||||
write_cmd1(GAMMA, 0x01); // Gamma curve set - select gray scale - GRAYSCALE 0 or GREYSCALE 1 - Select grey scale 0
|
||||
write_cmd1(COMMONDRV, 0x00); // Command driver output - Set COM1-COM41 side come first, normal mod
|
||||
write_cmd(NORMALMODE); // Set Normal mode (my)
|
||||
// write_cmd(INVERSIONOFF); // Inversion off
|
||||
write_cmd2(COLADDRSET, 0, 131); // Column address set
|
||||
write_cmd2(PAGEADDRSET, 0, 131); // Page address set
|
||||
write_cmd1(ACCESSCTRL, 0x40); // Memory access controler - 0x40 horizontal
|
||||
// write_data(0x20); // vertical
|
||||
write_cmd1(PWRCTRL, 0x04); // Power control - Internal resistance, V1OUT -> high power mode, oscilator devision rate
|
||||
write_cmd(SLEEPOUT); // Sleep out
|
||||
write_cmd(VOLTCTRL); // Voltage control - voltage control and write contrast define LCD electronic volume
|
||||
// write_data(0x7f); // full voltage control
|
||||
// write_data(0x03); // must be "1"
|
||||
write_cmd1(CONTRAST, GDISP_INITIAL_CONTRAST); // Write contrast
|
||||
delayms(20);
|
||||
write_cmd(TEMPGRADIENT); // Temperature gradient - really 14 bytes of data
|
||||
for(i=0; i<14; i++)
|
||||
write_data(0);
|
||||
write_cmd(BOOSTVON); // Booster voltage ON
|
||||
write_cmd(DISPLAYON); // Finally - Display On
|
||||
#endif
|
||||
// UNTESTED
|
||||
#if 1
|
||||
write_cmd(SLEEPOUT); // Sleep out
|
||||
write_cmd(INVON); // Inversion on: seems to be required for this controller
|
||||
write_cmd1(COLMOD, 0x03); // Color Interface Pixel Format - 0x03 = 12 bits-per-pixel
|
||||
write_cmd1(MADCTL, 0xC8); // Memory access controler - 0xC0 = mirror x and y, reverse rgb
|
||||
write_cmd1(SETCON, GDISP_INITIAL_CONTRAST); // Write contrast
|
||||
delayms(20);
|
||||
write_cmd(DISPON); // Display On
|
||||
#else
|
||||
// Alternative
|
||||
write_cmd(SOFTRST); // Software Reset
|
||||
delayms(20);
|
||||
write_cmd(INITESC); // Initial escape
|
||||
delayms(20);
|
||||
write_cmd1(REFSET, 0x00); // Refresh set
|
||||
write_cmd(DISPCTRL); // Set Display control - really 7 bytes of data
|
||||
write_data(128); // Set the lenght of one selection term
|
||||
write_data(128); // Set N inversion -> no N inversion
|
||||
write_data(134); // Set frame frequence and bias rate -> 2 devision of frequency and 1/8 bias, 1/67 duty, 96x67 size
|
||||
write_data(84); // Set duty parameter
|
||||
write_data(69); // Set duty parameter
|
||||
write_data(82); // Set duty parameter
|
||||
write_data(67); // Set duty parameter
|
||||
write_cmd(GRAYSCALE0); // Grey scale 0 position set - really 15 bytes of data
|
||||
write_data(1); // GCP1 - gray lavel to be output when the RAM data is "0001"
|
||||
write_data(2); // GCP2 - gray lavel to be output when the RAM data is "0010"
|
||||
write_data(4); // GCP3 - gray lavel to be output when the RAM data is "0011"
|
||||
write_data(8); // GCP4 - gray lavel to be output when the RAM data is "0100"
|
||||
write_data(16); // GCP5 - gray lavel to be output when the RAM data is "0101"
|
||||
write_data(30); // GCP6 - gray lavel to be output when the RAM data is "0110"
|
||||
write_data(40); // GCP7 - gray lavel to be output when the RAM data is "0111"
|
||||
write_data(50); // GCP8 - gray lavel to be output when the RAM data is "1000"
|
||||
write_data(60); // GCP9 - gray lavel to be output when the RAM data is "1001"
|
||||
write_data(70); // GCP10 - gray lavel to be output when the RAM data is "1010"
|
||||
write_data(80); // GCP11 - gray lavel to be output when the RAM data is "1011"
|
||||
write_data(90); // GCP12 - gray lavel to be output when the RAM data is "1100"
|
||||
write_data(100); // GCP13 - gray lavel to be output when the RAM data is "1101"
|
||||
write_data(110); // GCP14 - gray lavel to be output when the RAM data is "1110"
|
||||
write_data(127); // GCP15 - gray lavel to be output when the RAM data is "1111"
|
||||
write_cmd1(GAMMA, 0x01); // Gamma curve set - select gray scale - GRAYSCALE 0 or GREYSCALE 1 - Select grey scale 0
|
||||
write_cmd1(COMMONDRV, 0x00); // Command driver output - Set COM1-COM41 side come first, normal mod
|
||||
write_cmd(NORMALMODE); // Set Normal mode (my)
|
||||
// write_cmd(INVERSIONOFF); // Inversion off
|
||||
write_cmd2(COLADDRSET, 0, 131); // Column address set
|
||||
write_cmd2(PAGEADDRSET, 0, 131); // Page address set
|
||||
write_cmd1(ACCESSCTRL, 0x40); // Memory access controler - 0x40 horizontal
|
||||
// write_data(0x20); // vertical
|
||||
write_cmd1(PWRCTRL, 0x04); // Power control - Internal resistance, V1OUT -> high power mode, oscilator devision rate
|
||||
write_cmd(SLEEPOUT); // Sleep out
|
||||
write_cmd(VOLTCTRL); // Voltage control - voltage control and write contrast define LCD electronic volume
|
||||
// write_data(0x7f); // full voltage control
|
||||
// write_data(0x03); // must be "1"
|
||||
write_cmd1(CONTRAST, GDISP_INITIAL_CONTRAST); // Write contrast
|
||||
delayms(20);
|
||||
write_cmd(TEMPGRADIENT); // Temperature gradient - really 14 bytes of data
|
||||
for(i=0; i<14; i++)
|
||||
write_data(0);
|
||||
write_cmd(BOOSTVON); // Booster voltage ON
|
||||
write_cmd(DISPLAYON); // Finally - Display On
|
||||
#endif
|
||||
|
||||
// Release the bus
|
||||
@ -541,11 +516,7 @@ void GDISP_LLD(drawpixel)(coord_t x, coord_t y, color_t color) {
|
||||
case GDISP_CONTROL_CONTRAST:
|
||||
if ((unsigned)value > 100) value = (void *)100;
|
||||
acquire_bus();
|
||||
#if defined(GDISP_USE_GE8)
|
||||
write_cmd2(VOLCTR, (unsigned)value, 0x03);
|
||||
#elif defined(GDISP_USE_GE12)
|
||||
write_cmd1(CONTRAST,(unsigned)value);
|
||||
#endif
|
||||
release_bus();
|
||||
GDISP.Contrast = (unsigned)value;
|
||||
return;
|
5
drivers/gdisp/Nokia6610GE12/gdisp_lld.mk
Normal file
5
drivers/gdisp/Nokia6610GE12/gdisp_lld.mk
Normal file
@ -0,0 +1,5 @@
|
||||
# List the required driver.
|
||||
GFXSRC += $(GFXLIB)/drivers/gdisp/Nokia6610GE12/gdisp_lld.c
|
||||
|
||||
# Required include directories
|
||||
GFXINC += $(GFXLIB)/drivers/gdisp/Nokia6610GE12
|
135
drivers/gdisp/Nokia6610GE12/gdisp_lld_board_example.h
Normal file
135
drivers/gdisp/Nokia6610GE12/gdisp_lld_board_example.h
Normal file
@ -0,0 +1,135 @@
|
||||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/Nokia6610GE12/gdisp_lld_board_example.h
|
||||
* @brief GDISP Graphic Driver subsystem board interface for the Nokia6610 GE12 display.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _GDISP_LLD_BOARD_H
|
||||
#define _GDISP_LLD_BOARD_H
|
||||
|
||||
/**
|
||||
* @brief Initialise the board for the display.
|
||||
* @notes Performs the following functions:
|
||||
* 1. initialise the spi port used by your display
|
||||
* 2. initialise the reset pin (initial state not-in-reset)
|
||||
* 3. initialise the chip select pin (initial state not-active)
|
||||
* 4. initialise the backlight pin (initial state back-light off)
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline void init_board(void) {
|
||||
/* Code here */
|
||||
#error "gdispNokia6610GE12: You must supply a definition for init_board for your board"
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set or clear the lcd reset pin.
|
||||
*
|
||||
* @param[in] state TRUE = lcd in reset, FALSE = normal operation
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline void setpin_reset(bool_t state) {
|
||||
/* Code here */
|
||||
#error "gdispNokia6610GE12: You must supply a definition for setpin_reset for your board"
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the lcd back-light level.
|
||||
* @note For now 0% turns the backlight off, anything else the backlight is on.
|
||||
* While the hardware supports PWM backlight control, we are not using it
|
||||
* yet.
|
||||
*
|
||||
* @param[in] percent 0 to 100%
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline void set_backlight(uint8_t percent) {
|
||||
/* Code here */
|
||||
#error "gdispNokia6610GE12: You must supply a definition for set_backlight for your board"
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Take exclusive control of the bus
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline void acquire_bus(void) {
|
||||
/* Code here */
|
||||
#error "gdispNokia6610GE12: You must supply a definition for acquire_bus for your board"
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Release exclusive control of the bus
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline void release_bus(void) {
|
||||
/* Code here */
|
||||
#error "gdispNokia6610GE12: You must supply a definition for release_bus for your board"
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Send an 8 bit command to the lcd.
|
||||
*
|
||||
* @param[in] cmd The command to send
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline void write_cmd(uint16_t cmd) {
|
||||
/* Code here */
|
||||
#error "gdispNokia6610GE12: You must supply a definition for write_cmd for your board"
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Send an 8 bit data to the lcd.
|
||||
*
|
||||
* @param[in] data The data to send
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline void write_data(uint16_t data) {
|
||||
/* Code here */
|
||||
#error "gdispNokia6610GE12: You must supply a definition for write_data for your board"
|
||||
}
|
||||
|
||||
#if GDISP_HARDWARE_READPIXEL || GDISP_HARDWARE_SCROLL || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Read data from the lcd.
|
||||
*
|
||||
* @return The data from the lcd
|
||||
* @note The chip select may need to be asserted/de-asserted
|
||||
* around the actual spi read
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline uint16_t read_data(void) {
|
||||
/* Code here */
|
||||
#error "gdispNokia6610GE12: You must supply a definition for read_data for your board"
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _GDISP_LLD_BOARD_H */
|
||||
/** @} */
|
196
drivers/gdisp/Nokia6610GE12/gdisp_lld_board_olimexsam7ex256.h
Normal file
196
drivers/gdisp/Nokia6610GE12/gdisp_lld_board_olimexsam7ex256.h
Normal file
@ -0,0 +1,196 @@
|
||||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/Nokia6610GE12/gdisp_lld_board_olimexsam7ex256.h
|
||||
* @brief GDISP Graphic Driver subsystem board interface for the Olimex SAM7-EX256 board.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _GDISP_LLD_BOARD_H
|
||||
#define _GDISP_LLD_BOARD_H
|
||||
|
||||
// ******************************************************
|
||||
// Pointers to AT91SAM7X256 peripheral data structures
|
||||
// ******************************************************
|
||||
volatile AT91PS_PIO pPIOA = AT91C_BASE_PIOA;
|
||||
volatile AT91PS_PIO pPIOB = AT91C_BASE_PIOB;
|
||||
volatile AT91PS_SPI pSPI = AT91C_BASE_SPI0;
|
||||
volatile AT91PS_PMC pPMC = AT91C_BASE_PMC;
|
||||
volatile AT91PS_PDC pPDC = AT91C_BASE_PDC_SPI0;
|
||||
|
||||
/**
|
||||
* @brief Initialise the board for the display.
|
||||
* @notes Performs the following functions:
|
||||
* 1. initialise the spi port used by your display
|
||||
* 2. initialise the reset pin (initial state not-in-reset)
|
||||
* 3. initialise the chip select pin (initial state not-active)
|
||||
* 4. initialise the backlight pin (initial state back-light off)
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline void init_board(void) {
|
||||
// *********************************************************************************************
|
||||
// InitSpi( )
|
||||
//
|
||||
// Sets up SPI channel 0 for communications to Nokia 6610 LCD Display
|
||||
//
|
||||
// I/O ports used: PA2 = LCD Reset (set to low to reset)
|
||||
// PA12 = LCD chip select (set to low to select the LCD chip)
|
||||
// PA16 = SPI0_MISO Master In - Slave Out (not used in LCD interface)
|
||||
// PA17 = SPI0_MOSI Master Out - Slave In pin (Serial Data to LCD slave)
|
||||
// PA18 = SPI0_SPCK Serial Clock (to LCD slave)
|
||||
// PB20 = backlight control (normally PWM control, 1 = full on)
|
||||
//
|
||||
// *********************************************************************************************}
|
||||
|
||||
/* This code should really use the ChibiOS driver for these functions */
|
||||
|
||||
// Pin for backlight
|
||||
pPIOB->PIO_CODR = PIOB_LCD_BL_MASK; // Set PB20 to LOW
|
||||
pPIOB->PIO_OER = PIOB_LCD_BL_MASK; // Configure PB20 as output
|
||||
|
||||
// Reset pin
|
||||
pPIOA->PIO_SODR = PIOA_LCD_RESET_MASK; // Set PA2 to HIGH
|
||||
pPIOA->PIO_OER = PIOA_LCD_RESET_MASK; // Configure PA2 as output
|
||||
|
||||
// CS pin - this seems to be ignored
|
||||
// pPIOA->PIO_SODR = 1<<12; // Set PA2 to HIGH
|
||||
// pPIOA->PIO_OER = 1<<12; // Configure PA2 as output
|
||||
|
||||
// Init SPI0
|
||||
// Disable the following pins from PIO control (will be used instead by the SPI0 peripheral)
|
||||
// BIT12 = PA12 -> SPI0_NPCS0 chip select
|
||||
// BIT16 = PA16 -> SPI0_MISO Master In - Slave Out (not used in LCD interface)
|
||||
// BIT17 = PA17 -> SPI0_MOSI Master Out - Slave In pin (Serial Data to LCD slave)
|
||||
// BIT18 = PA18 -> SPI0_SPCK Serial Clock (to LCD slave)
|
||||
pPIOA->PIO_PDR = (1<<12) | (1<<16) | (1<<17) | (1<<18);
|
||||
pPIOA->PIO_ASR = (1<<12) | (1<<16) | (1<<17) | (1<<18);
|
||||
pPIOA->PIO_BSR = 0;
|
||||
|
||||
//enable the clock of SPI
|
||||
pPMC->PMC_PCER = 1 << AT91C_ID_SPI0;
|
||||
|
||||
// Fixed mode
|
||||
pSPI->SPI_CR = 0x81; //SPI Enable, Sowtware reset
|
||||
pSPI->SPI_CR = 0x01; //SPI Enable
|
||||
|
||||
//pSPI->SPI_MR = 0xE0019; //Master mode, fixed select, disable decoder, FDIV=1 (MCK), PCS=1110
|
||||
pSPI->SPI_MR = 0xE0011; //Master mode, fixed select, disable decoder, FDIV=0 (MCK), PCS=1110
|
||||
|
||||
//pSPI->SPI_CSR[0] = 0x01010C11; //9bit, CPOL=1, ClockPhase=0, SCLK = 48Mhz/32*12 = 125kHz
|
||||
pSPI->SPI_CSR[0] = 0x01010311; //9bit, CPOL=1, ClockPhase=0, SCLK = 48Mhz/8 = 6MHz if using commented MR line above
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set or clear the lcd reset pin.
|
||||
*
|
||||
* @param[in] state TRUE = lcd in reset, FALSE = normal operation
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline void setpin_reset(bool_t state) {
|
||||
if (state)
|
||||
palClearPad(IOPORT1, PIOA_LCD_RESET);
|
||||
else
|
||||
palSetPad(IOPORT1, PIOA_LCD_RESET);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the lcd back-light level.
|
||||
* @note For now 0% turns the backlight off, anything else the backlight is on.
|
||||
* While the hardware supports PWM backlight control, we are not using it
|
||||
* yet.
|
||||
*
|
||||
* @param[in] percent 0 to 100%
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline void set_backlight(uint8_t percent) {
|
||||
if (percent)
|
||||
palSetPad(IOPORT2, PIOB_LCD_BL);
|
||||
else
|
||||
palClearPad(IOPORT2, PIOB_LCD_BL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Take exclusive control of the bus
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline void acquire_bus(void) {
|
||||
/* Nothing to do for this board as the LCD is the only device on the SPI port */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Release exclusive control of the bus
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline void release_bus(void) {
|
||||
// Nothing to do for this board as the LCD is the only device on the SPI port
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Send an 8 bit command to the lcd.
|
||||
*
|
||||
* @param[in] cmd The command to send
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline void write_cmd(uint16_t cmd) {
|
||||
// wait for the previous transfer to complete
|
||||
while((pSPI->SPI_SR & AT91C_SPI_TXEMPTY) == 0);
|
||||
// send the command
|
||||
pSPI->SPI_TDR = cmd & 0xFF;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Send an 8 bit data to the lcd.
|
||||
*
|
||||
* @param[in] data The data to send
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline void write_data(uint16_t data) {
|
||||
// wait for the previous transfer to complete
|
||||
while((pSPI->SPI_SR & AT91C_SPI_TXEMPTY) == 0);
|
||||
// send the data
|
||||
pSPI->SPI_TDR = data | 0x0100;
|
||||
}
|
||||
|
||||
#if GDISP_HARDWARE_READPIXEL || GDISP_HARDWARE_SCROLL || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Read data from the lcd.
|
||||
*
|
||||
* @return The data from the lcd
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static __inline uint16_t read_data(void) {
|
||||
#error "gdispNokia6610GE12: GDISP_HARDWARE_READPIXEL and GDISP_HARDWARE_SCROLL are not supported on this board"
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _GDISP_LLD_BOARD_H */
|
||||
/** @} */
|
58
drivers/gdisp/Nokia6610GE12/gdisp_lld_config.h
Normal file
58
drivers/gdisp/Nokia6610GE12/gdisp_lld_config.h
Normal file
@ -0,0 +1,58 @@
|
||||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/Nokia6610GE12/gdisp_lld_config.h
|
||||
* @brief GDISP Graphic Driver subsystem low level driver header for the Nokia6610 GE12 display.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _GDISP_LLD_CONFIG_H
|
||||
#define _GDISP_LLD_CONFIG_H
|
||||
|
||||
#if GFX_USE_GDISP
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver hardware support. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#define GDISP_DRIVER_NAME "Nokia6610GE12"
|
||||
#define GDISP_LLD(x) gdisp_lld_##x##_Nokia6610GE12
|
||||
|
||||
#define GDISP_HARDWARE_FILLS TRUE
|
||||
#define GDISP_HARDWARE_BITFILLS TRUE
|
||||
#define GDISP_HARDWARE_CONTROL TRUE
|
||||
|
||||
#define GDISP_SOFTWARE_TEXTFILLDRAW FALSE
|
||||
#define GDISP_SOFTWARE_TEXTBLITCOLUMN FALSE
|
||||
|
||||
#define GDISP_PIXELFORMAT GDISP_PIXELFORMAT_RGB444
|
||||
/* This driver supports both packed and unpacked pixel formats and line formats.
|
||||
* By default we leave these as FALSE.
|
||||
*/
|
||||
#define GDISP_PACKED_PIXELS FALSE
|
||||
#define GDISP_PACKED_LINES FALSE
|
||||
|
||||
#endif /* GFX_USE_GDISP */
|
||||
|
||||
#endif /* _GDISP_LLD_CONFIG_H */
|
||||
/** @} */
|
@ -1,16 +1,15 @@
|
||||
This driver is for the Nokia6610 Philips (GE12) controller
|
||||
|
||||
To use this driver:
|
||||
|
||||
1. Add in your halconf.h:
|
||||
a) #define GFX_USE_GDISP TRUE
|
||||
b) Any optional high level driver defines (see gdisp.h) eg: GDISP_NEED_MULTITHREAD
|
||||
c) One (only) of:
|
||||
#define GDISP_USE_GE8 /* The Epson controller */
|
||||
#define GDISP_USE_GE12 /* The Philips controller */
|
||||
d) If you are not using a known board then create a gdisp_lld_board.h file
|
||||
c) If you are not using a known board then create a gdisp_lld_board.h file
|
||||
and ensure it is on your include path.
|
||||
Use the gdisp_lld_board_example.h file as a basis.
|
||||
Currently known boards are:
|
||||
Olimex SAM7-EX256
|
||||
|
||||
2. To your makefile add the following lines:
|
||||
include $(GFXLIB)/drivers/gdisp/Nokia6610/gdisp_lld.mk
|
||||
include $(GFXLIB)/drivers/gdisp/Nokia6610GE12/gdisp_lld.mk
|
483
drivers/gdisp/Nokia6610GE8/gdisp_lld.c
Normal file
483
drivers/gdisp/Nokia6610GE8/gdisp_lld.c
Normal file
@ -0,0 +1,483 @@
|
||||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/Nokia6610GE8/gdisp_lld.c
|
||||
* @brief GDISP Graphics Driver subsystem low level driver source for the Nokia6610 GE8 display.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
/* Include the emulation code for things we don't support */
|
||||
#include "gdisp/lld/emulation.c"
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local definitions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#include "GE8.h"
|
||||
|
||||
/* This controller is only ever used with a 132 x 132 display */
|
||||
#if defined(GDISP_SCREEN_HEIGHT)
|
||||
#warning "GDISP: This low level driver does not support setting a screen size. It is being ignored."
|
||||
#undef GDISP_SCREEN_HEIGHT
|
||||
#endif
|
||||
#if defined(GDISP_SCREEN_WIDTH)
|
||||
#warning "GDISP: This low level driver does not support setting a screen size. It is being ignored."
|
||||
#undef GDISP_SCREEN_WIDTH
|
||||
#endif
|
||||
#define GDISP_SCREEN_HEIGHT 132
|
||||
#define GDISP_SCREEN_WIDTH 132
|
||||
|
||||
#define GDISP_INITIAL_CONTRAST 38
|
||||
#define GDISP_INITIAL_BACKLIGHT 100
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver exported variables. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local variables. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if defined(GDISP_USE_CUSTOM_BOARD) && GDISP_USE_CUSTOM_BOARD
|
||||
/* Include the user supplied board definitions */
|
||||
#include "gdisp_lld_board.h"
|
||||
#elif defined(BOARD_OLIMEX_SAM7_EX256)
|
||||
#include "gdisp_lld_board_olimexsam7ex256.h"
|
||||
#else
|
||||
/* Include the user supplied board definitions */
|
||||
#include "gdisp_lld_board.h"
|
||||
#endif
|
||||
|
||||
// Some macros just to make reading the code easier
|
||||
#define delayms(ms) chThdSleepMilliseconds(ms)
|
||||
#define write_data2(d1, d2) { write_data(d1); write_data(d2); }
|
||||
#define write_data3(d1, d2, d3) { write_data(d1); write_data(d2); write_data(d3); }
|
||||
#define write_cmd1(cmd, d1) { write_cmd(cmd); write_data(d1); }
|
||||
#define write_cmd2(cmd, d1, d2) { write_cmd(cmd); write_data2(d1, d2); }
|
||||
#define write_cmd3(cmd, d1, d2, d3) { write_cmd(cmd); write_data3(d1, d2, d3); }
|
||||
|
||||
// A very common thing to do.
|
||||
// An inline function has been used here incase the parameters have side effects with the internal calculations.
|
||||
static __inline void setviewport(coord_t x, coord_t y, coord_t cx, coord_t cy) {
|
||||
write_cmd2(CASET, x, x+cx-1); // Column address set
|
||||
write_cmd2(PASET, y, y+cy-1); // Page address set
|
||||
}
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver interrupt handlers. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver exported functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/* ---- Required Routines ---- */
|
||||
/*
|
||||
The following 2 routines are required.
|
||||
All other routines are optional.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Low level GDISP driver initialization.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
bool_t GDISP_LLD(init)(void) {
|
||||
/* Initialise your display */
|
||||
init_board();
|
||||
|
||||
// Hardware reset
|
||||
setpin_reset(TRUE);
|
||||
delayms(20);
|
||||
setpin_reset(FALSE);
|
||||
delayms(20);
|
||||
|
||||
// Get the bus for the following initialisation commands
|
||||
acquire_bus();
|
||||
|
||||
write_cmd3(DISCTL, 0x00, 0x20, 0x00); // Display control
|
||||
// P1: 0x00 = 2 divisions, switching period=8 (default)
|
||||
// P2: 0x20 = nlines/4 - 1 = 132/4 - 1 = 32)
|
||||
// P3: 0x00 = no inversely highlighted lines
|
||||
write_cmd1(COMSCN, 0x01); // COM scan P1: 0x01 = Scan 1->80, 160<-81
|
||||
write_cmd(OSCON); // Internal oscilator ON
|
||||
write_cmd(SLPOUT); // Sleep out
|
||||
write_cmd1(PWRCTR, 0x0F); // Power control - reference voltage regulator on, circuit voltage follower on, BOOST ON
|
||||
write_cmd3(DATCTL, 0x48, 0x00, 0x02); // Data control
|
||||
// P1: 0x01 = page address inverted, column address normal, address scan in column direction
|
||||
// P2: 0x00 = RGB sequence (default value)
|
||||
// P3: 0x02 = Grayscale -> 16 (selects 12-bit color, type A)
|
||||
write_cmd2(VOLCTR, GDISP_INITIAL_CONTRAST, 0x03); // Voltage control (contrast setting)
|
||||
// P1 = Contrast
|
||||
// P2 = 3 resistance ratio (only value that works)
|
||||
delayms(100); // allow power supply to stabilize
|
||||
write_cmd(DISON); // Turn on the display
|
||||
|
||||
// Release the bus
|
||||
release_bus();
|
||||
|
||||
/* Turn on the back-light */
|
||||
set_backlight(GDISP_INITIAL_BACKLIGHT);
|
||||
|
||||
/* Initialise the GDISP structure to match */
|
||||
GDISP.Width = GDISP_SCREEN_WIDTH;
|
||||
GDISP.Height = GDISP_SCREEN_HEIGHT;
|
||||
GDISP.Orientation = GDISP_ROTATE_0;
|
||||
GDISP.Powermode = powerOn;
|
||||
GDISP.Backlight = GDISP_INITIAL_BACKLIGHT;
|
||||
GDISP.Contrast = GDISP_INITIAL_CONTRAST;
|
||||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP
|
||||
GDISP.clipx0 = 0;
|
||||
GDISP.clipy0 = 0;
|
||||
GDISP.clipx1 = GDISP.Width;
|
||||
GDISP.clipy1 = GDISP.Height;
|
||||
#endif
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draws a pixel on the display.
|
||||
*
|
||||
* @param[in] x X location of the pixel
|
||||
* @param[in] y Y location of the pixel
|
||||
* @param[in] color The color of the pixel
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void GDISP_LLD(drawpixel)(coord_t x, coord_t y, color_t color) {
|
||||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP
|
||||
if (x < GDISP.clipx0 || y < GDISP.clipy0 || x >= GDISP.clipx1 || y >= GDISP.clipy1) return;
|
||||
#endif
|
||||
acquire_bus();
|
||||
setviewport(x, y, 1, 1);
|
||||
write_cmd3(RAMWR, 0, (color>>8) & 0x0F, color & 0xFF);
|
||||
release_bus();
|
||||
}
|
||||
|
||||
/* ---- Optional Routines ---- */
|
||||
|
||||
#if GDISP_HARDWARE_FILLS || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Fill an area with a color.
|
||||
*
|
||||
* @param[in] x, y The start filled area
|
||||
* @param[in] cx, cy The width and height to be filled
|
||||
* @param[in] color The color of the fill
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void GDISP_LLD(fillarea)(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color) {
|
||||
unsigned i, tuples;
|
||||
|
||||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP
|
||||
if (x < GDISP.clipx0) { cx -= GDISP.clipx0 - x; x = GDISP.clipx0; }
|
||||
if (y < GDISP.clipy0) { cy -= GDISP.clipy0 - y; y = GDISP.clipy0; }
|
||||
if (cx <= 0 || cy <= 0 || x >= GDISP.clipx1 || y >= GDISP.clipy1) return;
|
||||
if (x+cx > GDISP.clipx1) cx = GDISP.clipx1 - x;
|
||||
if (y+cy > GDISP.clipy1) cy = GDISP.clipy1 - y;
|
||||
#endif
|
||||
|
||||
tuples = (cx*cy+1)/2; // With an odd sized area we over-print by one pixel.
|
||||
// This extra pixel is ignored by the controller.
|
||||
|
||||
acquire_bus();
|
||||
setviewport(x, y, cx, cy);
|
||||
write_cmd(RAMWR);
|
||||
for(i=0; i < tuples; i++)
|
||||
write_data3(((color >> 4) & 0xFF), (((color << 4) & 0xF0)|((color >> 8) & 0x0F)), (color & 0xFF));
|
||||
release_bus();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if GDISP_HARDWARE_BITFILLS || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Fill an area with a bitmap.
|
||||
*
|
||||
* @param[in] x, y The start filled area
|
||||
* @param[in] cx, cy The width and height to be filled
|
||||
* @param[in] srcx, srcy The bitmap position to start the fill from
|
||||
* @param[in] srccx The width of a line in the bitmap.
|
||||
* @param[in] buffer The pixels to use to fill the area.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void GDISP_LLD(blitareaex)(coord_t x, coord_t y, coord_t cx, coord_t cy, coord_t srcx, coord_t srcy, coord_t srccx, const pixel_t *buffer) {
|
||||
coord_t endx, endy, lg;
|
||||
color_t c1, c2;
|
||||
#if GDISP_PACKED_PIXELS
|
||||
coord_t pos;
|
||||
const uint8_t *p;
|
||||
#endif
|
||||
|
||||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP
|
||||
if (x < GDISP.clipx0) { cx -= GDISP.clipx0 - x; srcx += GDISP.clipx0 - x; x = GDISP.clipx0; }
|
||||
if (y < GDISP.clipy0) { cy -= GDISP.clipy0 - y; srcy += GDISP.clipy0 - y; y = GDISP.clipy0; }
|
||||
if (srcx+cx > srccx) cx = srccx - srcx;
|
||||
if (cx <= 0 || cy <= 0 || x >= GDISP.clipx1 || y >= GDISP.clipy1) return;
|
||||
if (x+cx > GDISP.clipx1) cx = GDISP.clipx1 - x;
|
||||
if (y+cy > GDISP.clipy1) cy = GDISP.clipy1 - y;
|
||||
#endif
|
||||
|
||||
/* What are our end points */
|
||||
endx = srcx + cx;
|
||||
endy = y + cy;
|
||||
|
||||
acquire_bus();
|
||||
setviewport(x, y, cx, cy);
|
||||
write_cmd(RAMWR);
|
||||
|
||||
#if !GDISP_PACKED_PIXELS
|
||||
// Although this controller uses packed pixels we support unpacked pixel
|
||||
// formats in this blit by packing the data as we feed it to the controller.
|
||||
lg = srccx - cx;
|
||||
buffer += srcy * srccx + srcx;
|
||||
x = srcx;
|
||||
while (1) {
|
||||
/* Get a pixel */
|
||||
c1 = *buffer++;
|
||||
if (++x >= endx) {
|
||||
if (++y >= endy) {
|
||||
/* Odd pixel at end */
|
||||
write_data3(0, ((c1 >> 8) & 0x0F), (c1 & 0xFF));
|
||||
break;
|
||||
}
|
||||
x = srcx;
|
||||
buffer += lg;
|
||||
}
|
||||
/* Get the next pixel */
|
||||
c2 = *buffer++;
|
||||
write_data3(((c1 >> 4) & 0xFF), (((c1 << 4) & 0xF0)|((c2 >> 8) & 0x0F)), (c2 & 0xFF));
|
||||
if (++x >= endx) {
|
||||
if (++y >= endy)
|
||||
break;
|
||||
x = srcx;
|
||||
buffer += lg;
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
// Although this controller uses packed pixels, we may have to feed it into
|
||||
// the controller with different packing to the source bitmap
|
||||
#if !GDISP_PACKED_LINES
|
||||
srccx = (srccx + 1) & ~1;
|
||||
#endif
|
||||
pos = srcy*srccx;
|
||||
lg = (srccx - cx)/2*3;
|
||||
p = ((const uint8_t *)buffer) + ((pos+srcx)/2 * 3);
|
||||
|
||||
x = srcx;
|
||||
while (1) {
|
||||
/* Get a pixel */
|
||||
switch((pos+x)&1) {
|
||||
case 0: c1 = (((color_t)p[0]) << 4)|(((color_t)p[1])>>4); break;
|
||||
case 1: c1 = (((color_t)p[1]&0x0F) << 8)|((color_t)p[1]); break;
|
||||
}
|
||||
if (++x >= endx) {
|
||||
if (++y >= endy) {
|
||||
/* Odd pixel at end */
|
||||
write_data3(0, ((c1 >> 8) & 0x0F), (c1 & 0xFF));
|
||||
break;
|
||||
}
|
||||
x = srcx;
|
||||
p += lg;
|
||||
pos += srccx;
|
||||
}
|
||||
/* Get the next pixel */
|
||||
switch((pos+x)&1) {
|
||||
case 0: c2 = (((color_t)p[0]) << 4)|(((color_t)p[1])>>4); break;
|
||||
case 1: c2 = (((color_t)p[1]&0x0F) << 8)|((color_t)p[1]); break;
|
||||
}
|
||||
write_data3(((c1 >> 4) & 0xFF), (((c1 << 4) & 0xF0)|((c2 >> 8) & 0x0F)), (c2 & 0xFF));
|
||||
if (++x >= endx) {
|
||||
if (++y >= endy)
|
||||
break;
|
||||
x = srcx;
|
||||
p += lg;
|
||||
pos += srccx;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
release_bus();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (GDISP_NEED_PIXELREAD && GDISP_HARDWARE_PIXELREAD)
|
||||
/**
|
||||
* @brief Get the color of a particular pixel.
|
||||
* @note If x,y is off the screen, the result is undefined.
|
||||
*
|
||||
* @param[in] x, y The start of the text
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
color_t GDISP_LLD(getpixelcolor)(coord_t x, coord_t y) {
|
||||
/* NOT IMPLEMENTED */
|
||||
/* Some board hardware might support this in the future.
|
||||
* The Olimex board doesn't.
|
||||
*/
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (GDISP_NEED_SCROLL && GDISP_HARDWARE_SCROLL)
|
||||
/**
|
||||
* @brief Scroll vertically a section of the screen.
|
||||
* @note If x,y + cx,cy is off the screen, the result is undefined.
|
||||
* @note If lines is >= cy, it is equivelent to a area fill with bgcolor.
|
||||
*
|
||||
* @param[in] x, y The start of the area to be scrolled
|
||||
* @param[in] cx, cy The size of the area to be scrolled
|
||||
* @param[in] lines The number of lines to scroll (Can be positive or negative)
|
||||
* @param[in] bgcolor The color to fill the newly exposed area.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void GDISP_LLD(verticalscroll)(coord_t x, coord_t y, coord_t cx, coord_t cy, int lines, color_t bgcolor) {
|
||||
/* NOT IMPLEMENTED */
|
||||
/* The hardware seems capable of doing this.
|
||||
* It is just really complex so we leave it out for now.
|
||||
*/
|
||||
}
|
||||
#endif
|
||||
|
||||
#if GDISP_HARDWARE_CONTROL || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Driver Control
|
||||
* @details Unsupported control codes are ignored.
|
||||
* @note The value parameter should always be typecast to (void *).
|
||||
* @note There are some predefined and some specific to the low level driver.
|
||||
* @note GDISP_CONTROL_POWER - Takes a gdisp_powermode_t
|
||||
* GDISP_CONTROL_ORIENTATION - Takes a gdisp_orientation_t
|
||||
* GDISP_CONTROL_BACKLIGHT - Takes an int from 0 to 100. For a driver
|
||||
* that only supports off/on anything other
|
||||
* than zero is on.
|
||||
* GDISP_CONTROL_CONTRAST - Takes an int from 0 to 100.
|
||||
* GDISP_CONTROL_LLD - Low level driver control constants start at
|
||||
* this value.
|
||||
*
|
||||
* @param[in] what What to do.
|
||||
* @param[in] value The value to use (always cast to a void *).
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void GDISP_LLD(control)(unsigned what, void *value) {
|
||||
/* The hardware is capable of supporting...
|
||||
* GDISP_CONTROL_POWER - not implemented yet
|
||||
* GDISP_CONTROL_ORIENTATION - not implemented yet
|
||||
* GDISP_CONTROL_BACKLIGHT - supported (the OlimexSAM7EX256 board.h currently only implements off/on although PWM is supported by the hardware)
|
||||
* GDISP_CONTROL_CONTRAST - supported
|
||||
*/
|
||||
switch(what) {
|
||||
#if 0
|
||||
// NOT IMPLEMENTED YET
|
||||
case GDISP_CONTROL_POWER:
|
||||
if (GDISP.Powermode == (gdisp_powermode_t)value)
|
||||
return;
|
||||
switch((gdisp_powermode_t)value) {
|
||||
case powerOff:
|
||||
// Code here
|
||||
break;
|
||||
case powerOn:
|
||||
// Code here
|
||||
/* You may need this ---
|
||||
* if (GDISP.Powermode != powerSleep)
|
||||
* GDISP_LLD(init)();
|
||||
*/
|
||||
break;
|
||||
case powerSleep:
|
||||
/* Code here */
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
GDISP.Powermode = (gdisp_powermode_t)value;
|
||||
return;
|
||||
#endif
|
||||
#if 0
|
||||
// NOT IMPLEMENTED YET
|
||||
case GDISP_CONTROL_ORIENTATION:
|
||||
if (GDISP.Orientation == (gdisp_orientation_t)value)
|
||||
return;
|
||||
// WriteSpiData(0x48); // no mirror Y (temporary to satisfy Olimex bmptoarray utility)
|
||||
// WriteSpiData(0xC8); // restore to (mirror x and y, reverse rgb)
|
||||
switch((gdisp_orientation_t)value) {
|
||||
case GDISP_ROTATE_0:
|
||||
// Code here
|
||||
GDISP.Height = GDISP_SCREEN_HEIGHT;
|
||||
GDISP.Width = GDISP_SCREEN_WIDTH;
|
||||
break;
|
||||
case GDISP_ROTATE_90:
|
||||
// Code here
|
||||
GDISP.Height = GDISP_SCREEN_WIDTH;
|
||||
GDISP.Width = GDISP_SCREEN_HEIGHT;
|
||||
break;
|
||||
case GDISP_ROTATE_180:
|
||||
// Code here
|
||||
GDISP.Height = GDISP_SCREEN_HEIGHT;
|
||||
GDISP.Width = GDISP_SCREEN_WIDTH;
|
||||
break;
|
||||
case GDISP_ROTATE_270:
|
||||
// Code here
|
||||
GDISP.Height = GDISP_SCREEN_WIDTH;
|
||||
GDISP.Width = GDISP_SCREEN_HEIGHT;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
#if GDISP_NEED_CLIP || GDISP_NEED_VALIDATION
|
||||
GDISP.clipx0 = 0;
|
||||
GDISP.clipy0 = 0;
|
||||
GDISP.clipx1 = GDISP.Width;
|
||||
GDISP.clipy1 = GDISP.Height;
|
||||
#endif
|
||||
GDISP.Orientation = (gdisp_orientation_t)value;
|
||||
return;
|
||||
#endif
|
||||
case GDISP_CONTROL_BACKLIGHT:
|
||||
if ((unsigned)value > 100) value = (void *)100;
|
||||
set_backlight((unsigned)value);
|
||||
GDISP.Backlight = (unsigned)value;
|
||||
return;
|
||||
case GDISP_CONTROL_CONTRAST:
|
||||
if ((unsigned)value > 100) value = (void *)100;
|
||||
acquire_bus();
|
||||
write_cmd2(VOLCTR, (unsigned)value, 0x03);
|
||||
release_bus();
|
||||
GDISP.Contrast = (unsigned)value;
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GFX_USE_GDISP */
|
||||
/** @} */
|
5
drivers/gdisp/Nokia6610GE8/gdisp_lld.mk
Normal file
5
drivers/gdisp/Nokia6610GE8/gdisp_lld.mk
Normal file
@ -0,0 +1,5 @@
|
||||
# List the required driver.
|
||||
GFXSRC += $(GFXLIB)/drivers/gdisp/Nokia6610GE8/gdisp_lld.c
|
||||
|
||||
# Required include directories
|
||||
GFXINC += $(GFXLIB)/drivers/gdisp/Nokia6610GE8
|
@ -19,8 +19,8 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/Nokia6610/gdisp_lld_board_example.h
|
||||
* @brief GDISP Graphic Driver subsystem board interface for the Nokia6610 display.
|
||||
* @file drivers/gdisp/Nokia6610GE8/gdisp_lld_board_example.h
|
||||
* @brief GDISP Graphic Driver subsystem board interface for the Nokia6610 GE8 display.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
* @{
|
||||
@ -41,7 +41,7 @@
|
||||
*/
|
||||
static __inline void init_board(void) {
|
||||
/* Code here */
|
||||
#error "gdispNokia6610: You must supply a definition for init_board for your board"
|
||||
#error "gdispNokia6610GE8: You must supply a definition for init_board for your board"
|
||||
}
|
||||
|
||||
/**
|
||||
@ -53,7 +53,7 @@ static __inline void init_board(void) {
|
||||
*/
|
||||
static __inline void setpin_reset(bool_t state) {
|
||||
/* Code here */
|
||||
#error "gdispNokia6610: You must supply a definition for setpin_reset for your board"
|
||||
#error "gdispNokia6610GE8: You must supply a definition for setpin_reset for your board"
|
||||
}
|
||||
|
||||
/**
|
||||
@ -68,7 +68,7 @@ static __inline void setpin_reset(bool_t state) {
|
||||
*/
|
||||
static __inline void set_backlight(uint8_t percent) {
|
||||
/* Code here */
|
||||
#error "gdispNokia6610: You must supply a definition for set_backlight for your board"
|
||||
#error "gdispNokia6610GE8: You must supply a definition for set_backlight for your board"
|
||||
}
|
||||
|
||||
/**
|
||||
@ -77,7 +77,8 @@ static __inline void set_backlight(uint8_t percent) {
|
||||
* @notapi
|
||||
*/
|
||||
static __inline void acquire_bus(void) {
|
||||
#error "gdispNokia6610: You must supply a definition for acquire_bus for your board"
|
||||
/* Code here */
|
||||
#error "gdispNokia6610GE8: You must supply a definition for acquire_bus for your board"
|
||||
}
|
||||
|
||||
/**
|
||||
@ -86,7 +87,8 @@ static __inline void acquire_bus(void) {
|
||||
* @notapi
|
||||
*/
|
||||
static __inline void release_bus(void) {
|
||||
#error "gdispNokia6610: You must supply a definition for release_bus for your board"
|
||||
/* Code here */
|
||||
#error "gdispNokia6610GE8: You must supply a definition for release_bus for your board"
|
||||
}
|
||||
|
||||
/**
|
||||
@ -98,7 +100,7 @@ static __inline void release_bus(void) {
|
||||
*/
|
||||
static __inline void write_cmd(uint16_t cmd) {
|
||||
/* Code here */
|
||||
#error "gdispNokia6610: You must supply a definition for write_cmd for your board"
|
||||
#error "gdispNokia6610GE8: You must supply a definition for write_cmd for your board"
|
||||
}
|
||||
|
||||
/**
|
||||
@ -110,7 +112,7 @@ static __inline void write_cmd(uint16_t cmd) {
|
||||
*/
|
||||
static __inline void write_data(uint16_t data) {
|
||||
/* Code here */
|
||||
#error "gdispNokia6610: You must supply a definition for write_data for your board"
|
||||
#error "gdispNokia6610GE8: You must supply a definition for write_data for your board"
|
||||
}
|
||||
|
||||
#if GDISP_HARDWARE_READPIXEL || GDISP_HARDWARE_SCROLL || defined(__DOXYGEN__)
|
||||
@ -125,7 +127,7 @@ static __inline void write_data(uint16_t data) {
|
||||
*/
|
||||
static __inline uint16_t read_data(void) {
|
||||
/* Code here */
|
||||
#error "gdispNokia6610: You must supply a definition for read_data for your board"
|
||||
#error "gdispNokia6610GE8: You must supply a definition for read_data for your board"
|
||||
}
|
||||
#endif
|
||||
|
@ -19,7 +19,7 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/Nokia6610/gdisp_lld_board_olimexsam7ex256.h
|
||||
* @file drivers/gdisp/Nokia6610GE8/gdisp_lld_board_olimexsam7ex256.h
|
||||
* @brief GDISP Graphic Driver subsystem board interface for the Olimex SAM7-EX256 board.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
@ -187,7 +187,7 @@ static __inline void write_data(uint16_t data) {
|
||||
* @notapi
|
||||
*/
|
||||
static __inline uint16_t read_data(void) {
|
||||
#error "gdispNokia6610: GDISP_HARDWARE_READPIXEL and GDISP_HARDWARE_SCROLL are not supported on this board"
|
||||
#error "gdispNokia6610GE8: GDISP_HARDWARE_READPIXEL and GDISP_HARDWARE_SCROLL are not supported on this board"
|
||||
return 0;
|
||||
}
|
||||
#endif
|
@ -19,8 +19,8 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/Nokia6610/gdisp_lld_config.h
|
||||
* @brief GDISP Graphic Driver subsystem low level driver header for the Nokia6610 display.
|
||||
* @file drivers/gdisp/Nokia6610GE8/gdisp_lld_config.h
|
||||
* @brief GDISP Graphic Driver subsystem low level driver header for the Nokia6610 GE8 display.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
* @{
|
||||
@ -35,8 +35,8 @@
|
||||
/* Driver hardware support. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#define GDISP_DRIVER_NAME "Nokia6610"
|
||||
#define GDISP_LLD(x) gdisp_lld_##x##_Nokia6610
|
||||
#define GDISP_DRIVER_NAME "Nokia6610GE8"
|
||||
#define GDISP_LLD(x) gdisp_lld_##x##_Nokia6610GE8
|
||||
|
||||
#define GDISP_HARDWARE_FILLS TRUE
|
||||
#define GDISP_HARDWARE_BITFILLS TRUE
|
15
drivers/gdisp/Nokia6610GE8/readme.txt
Normal file
15
drivers/gdisp/Nokia6610GE8/readme.txt
Normal file
@ -0,0 +1,15 @@
|
||||
This driver is for the Nokia6610 Epson (GE8) controller
|
||||
|
||||
To use this driver:
|
||||
|
||||
1. Add in your halconf.h:
|
||||
a) #define GFX_USE_GDISP TRUE
|
||||
b) Any optional high level driver defines (see gdisp.h) eg: GDISP_NEED_MULTITHREAD
|
||||
c) If you are not using a known board then create a gdisp_lld_board.h file
|
||||
and ensure it is on your include path.
|
||||
Use the gdisp_lld_board_example.h file as a basis.
|
||||
Currently known boards are:
|
||||
Olimex SAM7-EX256
|
||||
|
||||
2. To your makefile add the following lines:
|
||||
include $(GFXLIB)/drivers/gdisp/Nokia6610GE8/gdisp_lld.mk
|
@ -28,21 +28,23 @@
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
/* Include the emulation code for things we don't support */
|
||||
#include "lld/gdisp/emulation.c"
|
||||
#include "gdisp/lld/emulation.c"
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local definitions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if defined(GDISP_SCREEN_HEIGHT)
|
||||
#warning "GDISP: This low level driver does not support setting a screen size. It is being ignored."
|
||||
#undef GISP_SCREEN_HEIGHT
|
||||
#endif
|
||||
#if defined(GDISP_SCREEN_WIDTH)
|
||||
#warning "GDISP: This low level driver does not support setting a screen size. It is being ignored."
|
||||
#undef GDISP_SCREEN_WIDTH
|
||||
#endif
|
||||
|
||||
|
@ -28,12 +28,12 @@
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
/* Include the emulation code for things we don't support */
|
||||
#include "lld/gdisp/emulation.c"
|
||||
#include "gdisp/lld/emulation.c"
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local definitions. */
|
||||
|
@ -28,12 +28,19 @@
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
/* Include the emulation code for things we don't support */
|
||||
#include "lld/gdisp/emulation.c"
|
||||
#include "gdisp/lld/emulation.c"
|
||||
|
||||
#ifndef GDISP_SCREEN_HEIGHT
|
||||
#define GDISP_SCREEN_HEIGHT 320
|
||||
#endif
|
||||
#ifndef GDISP_SCREEN_WIDTH
|
||||
#define GDISP_SCREEN_WIDTH 240
|
||||
#endif
|
||||
|
||||
/* All the board specific code should go in these include file so the driver
|
||||
* can be ported to another board just by creating a suitable file.
|
||||
|
@ -28,12 +28,19 @@
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
/* Include the emulation code for things we don't support */
|
||||
#include "lld/gdisp/emulation.c"
|
||||
#include "gdisp/lld/emulation.c"
|
||||
|
||||
#ifndef GDISP_SCREEN_HEIGHT
|
||||
#define GDISP_SCREEN_HEIGHT 128
|
||||
#endif
|
||||
#ifndef GDISP_SCREEN_WIDTH
|
||||
#define GDISP_SCREEN_WIDTH 128
|
||||
#endif
|
||||
|
||||
/* ---- Required Routines ---- */
|
||||
/*
|
||||
@ -48,8 +55,8 @@
|
||||
*/
|
||||
bool_t GDISP_LLD(init)(void) {
|
||||
/* Initialise the GDISP structure */
|
||||
GDISP.Width = 128;
|
||||
GDISP.Height = 128;
|
||||
GDISP.Width = GDISP_SCREEN_WIDTH;
|
||||
GDISP.Height = GDISP_SCREEN_HEIGHT;
|
||||
GDISP.Orientation = GDISP_ROTATE_0;
|
||||
GDISP.Powermode = powerOff;
|
||||
GDISP.Backlight = 100;
|
||||
|
@ -28,14 +28,14 @@
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
#define GDISP_LLD_NO_STRUCT
|
||||
|
||||
/* Include the emulation code for things we don't support */
|
||||
#include "lld/gdisp/emulation.c"
|
||||
#include "gdisp/lld/emulation.c"
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local definitions. */
|
||||
@ -46,6 +46,7 @@
|
||||
|
||||
/* Prototypes for lld driver functions */
|
||||
bool_t GDISP_LLD1(init)(void);
|
||||
void *GDISP_LLD1(query)(unsigned what);
|
||||
void GDISP_LLD1(clear)(color_t color);
|
||||
void GDISP_LLD1(drawpixel)(coord_t x, coord_t y, color_t color);
|
||||
void GDISP_LLD1(fillarea)(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color);
|
||||
@ -79,11 +80,9 @@ void GDISP_LLD1(drawline)(coord_t x0, coord_t y0, coord_t x1, coord_t y1, color_
|
||||
#if GDISP_NEED_CONTROL
|
||||
void GDISP_LLD1(control)(unsigned what, void *value);
|
||||
#endif
|
||||
#if GDISP_NEED_QUERY
|
||||
void *GDISP_LLD1(query)(unsigned what);
|
||||
#endif
|
||||
|
||||
bool_t GDISP_LLD2(init)(void);
|
||||
void *GDISP_LLD2(query)(unsigned what);
|
||||
void GDISP_LLD2(clear)(color_t color);
|
||||
void GDISP_LLD2(drawpixel)(coord_t x, coord_t y, color_t color);
|
||||
void GDISP_LLD2(fillarea)(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color);
|
||||
@ -117,15 +116,13 @@ void GDISP_LLD2(drawline)(coord_t x0, coord_t y0, coord_t x1, coord_t y1, color_
|
||||
#if GDISP_NEED_CONTROL
|
||||
void GDISP_LLD2(control)(unsigned what, void *value);
|
||||
#endif
|
||||
#if GDISP_NEED_QUERY
|
||||
void *GDISP_LLD2(query)(unsigned what);
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver exported variables. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/* Our VMT table variables */
|
||||
void *GDISP_LLD_VMT(query)(unsigned what);
|
||||
void GDISP_LLD_VMT(clear)(color_t color);
|
||||
void GDISP_LLD_VMT(drawpixel)(coord_t x, coord_t y, color_t color);
|
||||
void GDISP_LLD_VMT(fillarea)(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color);
|
||||
@ -162,10 +159,6 @@ void GDISP_LLD_VMT(verticalscroll)(coord_t x, coord_t y, coord_t cx, coord_t cy,
|
||||
#if GDISP_NEED_CONTROL
|
||||
void GDISP_LLD_VMT(control)(unsigned what, void *value);
|
||||
#endif
|
||||
/* Set driver specific control */
|
||||
#if GDISP_NEED_QUERY
|
||||
void *GDISP_LLD_VMT(query)(unsigned what);
|
||||
#endif
|
||||
/* Clipping Functions */
|
||||
#if GDISP_NEED_CLIP
|
||||
void GDISP_LLD_VMT(setclip)(coord_t x, coord_t y, coord_t cx, coord_t cy);
|
||||
@ -194,6 +187,7 @@ void GDISP_LLD_VMT(setclip)(coord_t x, coord_t y, coord_t cx, coord_t cy);
|
||||
|
||||
bool_t gdisp_lld_init_VMT(void) {
|
||||
if (GDISP_VMT_NAME1(gdisp_lld_init_)()) {
|
||||
gdisp_lld_query_VMT = GDISP_VMT_NAME1(gdisp_lld_query_);
|
||||
gdisp_lld_clear_VMT = GDISP_VMT_NAME1(gdisp_lld_clear_);
|
||||
gdisp_lld_drawpixel_VMT = GDISP_VMT_NAME1(gdisp_lld_drawpixel_);
|
||||
gdisp_lld_fillarea_VMT = GDISP_VMT_NAME1(gdisp_lld_fillarea_);
|
||||
@ -224,9 +218,6 @@ bool_t gdisp_lld_init_VMT(void) {
|
||||
#if GDISP_NEED_CONTROL
|
||||
gdisp_lld_control_VMT = GDISP_VMT_NAME1(gdisp_lld_control_);
|
||||
#endif
|
||||
#if GDISP_NEED_QUERY
|
||||
gdisp_lld_query_VMT = GDISP_VMT_NAME1(gdisp_lld_query_);
|
||||
#endif
|
||||
#if GDISP_NEED_CLIP
|
||||
gdisp_lld_setclip_VMT = GDISP_VMT_NAME1(gdisp_lld_setclip_);
|
||||
#endif
|
||||
@ -235,6 +226,7 @@ bool_t gdisp_lld_init_VMT(void) {
|
||||
}
|
||||
|
||||
if (GDISP_VMT_NAME2(gdisp_lld_init_)()) {
|
||||
gdisp_lld_query_VMT = GDISP_VMT_NAME2(gdisp_lld_query_);
|
||||
gdisp_lld_clear_VMT = GDISP_VMT_NAME2(gdisp_lld_clear_);
|
||||
gdisp_lld_drawpixel_VMT = GDISP_VMT_NAME2(gdisp_lld_drawpixel_);
|
||||
gdisp_lld_fillarea_VMT = GDISP_VMT_NAME2(gdisp_lld_fillarea_);
|
||||
@ -265,9 +257,6 @@ bool_t gdisp_lld_init_VMT(void) {
|
||||
#if GDISP_NEED_CONTROL
|
||||
gdisp_lld_control_VMT = GDISP_VMT_NAME2(gdisp_lld_control_);
|
||||
#endif
|
||||
#if GDISP_NEED_QUERY
|
||||
gdisp_lld_query_VMT = GDISP_VMT_NAME2(gdisp_lld_query_);
|
||||
#endif
|
||||
#if GDISP_NEED_CLIP
|
||||
gdisp_lld_setclip_VMT = GDISP_VMT_NAME2(gdisp_lld_setclip_);
|
||||
#endif
|
||||
|
@ -42,7 +42,7 @@
|
||||
#include CONFIGFILE()
|
||||
|
||||
/* Bring in our API */
|
||||
#include "gdisp.h"
|
||||
#include "gfx.h"
|
||||
|
||||
/* Add the low level driver */
|
||||
#include DRIVERFILE()
|
||||
|
@ -42,7 +42,7 @@
|
||||
#include CONFIGFILE()
|
||||
|
||||
/* Bring in our API */
|
||||
#include "gdisp.h"
|
||||
#include "gfx.h"
|
||||
|
||||
/* Add the low level driver */
|
||||
#include DRIVERFILE()
|
||||
|
@ -28,13 +28,13 @@
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gfx.h"
|
||||
|
||||
#if (GFX_USE_GINPUT && GINPUT_NEED_TOGGLE) /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
// Declare the static members in the following include file
|
||||
#define GINPUT_TOGGLE_DECLARE_CONFIG
|
||||
#include "ginput/lld/toggle.h"
|
||||
|
||||
#include "lld/ginput/toggle.h"
|
||||
GINPUT_TOGGLE_DECLARE_STRUCTURE();
|
||||
|
||||
/**
|
||||
* @brief Initialise the port.
|
||||
|
@ -29,37 +29,32 @@
|
||||
#ifndef _GDISP_LLD_TOGGLE_BOARD_H
|
||||
#define _GDISP_LLD_TOGGLE_BOARD_H
|
||||
|
||||
#ifndef _GINPUT_LLD_TOGGLE_CONFIG_H
|
||||
// Visible in ginput.h
|
||||
#error "GINPUT Toggle Pal Driver: You need to define your board definitions"
|
||||
|
||||
#define GINPUT_TOGGLE_SW1 0 // Switch 1
|
||||
#define GINPUT_TOGGLE_SW2 1 // Switch 2
|
||||
#define GINPUT_TOGGLE_UP 2 // Joystick Up
|
||||
#define GINPUT_TOGGLE_DOWN 3 // Joystick Down
|
||||
#define GINPUT_TOGGLE_LEFT 4 // Joystick Left
|
||||
#define GINPUT_TOGGLE_RIGHT 5 // Joystick Right
|
||||
#define GINPUT_TOGGLE_CENTER 6 // Joystick Center
|
||||
// The below are example values
|
||||
|
||||
#elif !defined(GINPUT_TOGGLE_DECLARE_CONFIG)
|
||||
// Visible in ginput_lld.h
|
||||
#define GINPUT_TOGGLE_NUM_PORTS 7 // The total number of toggle inputs
|
||||
#define GINPUT_TOGGLE_CONFIG_ENTRIES 2 // The total number of GToggleConfig entries
|
||||
|
||||
#define GINPUT_TOGGLE_NUM_PORTS 7 // The total number of toggle inputs
|
||||
|
||||
#else
|
||||
// Visible in ginput_lld_toggle.c
|
||||
#define GINPUT_TOGGLE_SW1 0 // Switch 1
|
||||
#define GINPUT_TOGGLE_SW2 1 // Switch 2
|
||||
#define GINPUT_TOGGLE_UP 2 // Joystick Up
|
||||
#define GINPUT_TOGGLE_DOWN 3 // Joystick Down
|
||||
#define GINPUT_TOGGLE_LEFT 4 // Joystick Left
|
||||
#define GINPUT_TOGGLE_RIGHT 5 // Joystick Right
|
||||
#define GINPUT_TOGGLE_CENTER 6 // Joystick Center
|
||||
|
||||
GToggleConfig GInputToggleConfigTable[] = {
|
||||
{AT91C_BASE_PIOB, // Switch 1 and Switch 2
|
||||
PIOB_SW1_MASK|PIOB_SW2_MASK,
|
||||
PIOB_SW1_MASK|PIOB_SW2_MASK,
|
||||
PAL_MODE_INPUT},
|
||||
{AT91C_BASE_PIOA, // B1..4 Joystick
|
||||
PIOA_B1_MASK|PIOA_B2_MASK|PIOA_B3_MASK|PIOA_B4_MASK|PIOA_B5_MASK,
|
||||
PIOA_B1_MASK|PIOA_B2_MASK|PIOA_B3_MASK|PIOA_B4_MASK|PIOA_B5_MASK,
|
||||
PAL_MODE_INPUT},
|
||||
};
|
||||
|
||||
#endif
|
||||
#define GINPUT_TOGGLE_DECLARE_STRUCTURE() \
|
||||
const GToggleConfig GInputToggleConfigTable[GINPUT_TOGGLE_CONFIG_ENTRIES] = { \
|
||||
{AT91C_BASE_PIOB, /* Switch 1 and Switch 2 */ \
|
||||
PIOB_SW1_MASK|PIOB_SW2_MASK, \
|
||||
PIOB_SW1_MASK|PIOB_SW2_MASK, \
|
||||
PAL_MODE_INPUT}, \
|
||||
{AT91C_BASE_PIOA, /* B1..4 Joystick */ \
|
||||
PIOA_B1_MASK|PIOA_B2_MASK|PIOA_B3_MASK|PIOA_B4_MASK|PIOA_B5_MASK, \
|
||||
PIOA_B1_MASK|PIOA_B2_MASK|PIOA_B3_MASK|PIOA_B4_MASK|PIOA_B5_MASK, \
|
||||
PAL_MODE_INPUT}, \
|
||||
}
|
||||
|
||||
#endif /* _GDISP_LLD_TOGGLE_BOARD_H */
|
||||
/** @} */
|
||||
|
@ -40,21 +40,17 @@
|
||||
#define GINPUT_TOGGLE_RIGHT 5 // Joystick Right
|
||||
#define GINPUT_TOGGLE_CENTER 6 // Joystick Center
|
||||
|
||||
#ifdef GINPUT_TOGGLE_DECLARE_CONFIG
|
||||
// Visible in ginput_lld_toggle.c
|
||||
|
||||
const GToggleConfig GInputToggleConfigTable[GINPUT_TOGGLE_CONFIG_ENTRIES] = {
|
||||
{AT91C_BASE_PIOB, // Switch 1 and Switch 2
|
||||
PIOB_SW1_MASK|PIOB_SW2_MASK,
|
||||
PIOB_SW1_MASK|PIOB_SW2_MASK,
|
||||
PAL_MODE_INPUT},
|
||||
{AT91C_BASE_PIOA, // B1..4 Joystick
|
||||
PIOA_B1_MASK|PIOA_B2_MASK|PIOA_B3_MASK|PIOA_B4_MASK|PIOA_B5_MASK,
|
||||
PIOA_B1_MASK|PIOA_B2_MASK|PIOA_B3_MASK|PIOA_B4_MASK|PIOA_B5_MASK,
|
||||
PAL_MODE_INPUT},
|
||||
};
|
||||
|
||||
#endif
|
||||
#define GINPUT_TOGGLE_DECLARE_STRUCTURE() \
|
||||
const GToggleConfig GInputToggleConfigTable[GINPUT_TOGGLE_CONFIG_ENTRIES] = { \
|
||||
{AT91C_BASE_PIOB, /* Switch 1 and Switch 2 */ \
|
||||
PIOB_SW1_MASK|PIOB_SW2_MASK, \
|
||||
PIOB_SW1_MASK|PIOB_SW2_MASK, \
|
||||
PAL_MODE_INPUT}, \
|
||||
{AT91C_BASE_PIOA, /* B1..4 Joystick */ \
|
||||
PIOA_B1_MASK|PIOA_B2_MASK|PIOA_B3_MASK|PIOA_B4_MASK|PIOA_B5_MASK, \
|
||||
PIOA_B1_MASK|PIOA_B2_MASK|PIOA_B3_MASK|PIOA_B4_MASK|PIOA_B5_MASK, \
|
||||
PAL_MODE_INPUT}, \
|
||||
}
|
||||
|
||||
#endif /* _GDISP_LLD_TOGGLE_BOARD_H */
|
||||
/** @} */
|
||||
|
@ -31,7 +31,10 @@
|
||||
|
||||
#if GFX_USE_GINPUT && GINPUT_NEED_TOGGLE
|
||||
|
||||
#if defined(BOARD_OLIMEX_SAM7_EX256)
|
||||
#if GINPUT_TOGGLE_USE_CUSTOM_BOARD
|
||||
/* Include the user supplied board definitions */
|
||||
#include "ginput_lld_toggle_board.h"
|
||||
#elif defined(BOARD_OLIMEX_SAM7_EX256)
|
||||
#include "ginput_lld_toggle_board_olimexsam7ex256.h"
|
||||
#else
|
||||
/* Include the user supplied board definitions */
|
||||
|
@ -105,7 +105,7 @@ static __inline void release_bus(void) {
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static uint16_t read_x_value(void) {
|
||||
static __inline uint16_t read_x_value(void) {
|
||||
uint16_t val1, val2;
|
||||
adcsample_t samples[ADC_NUM_CHANNELS * ADC_BUF_DEPTH];
|
||||
|
||||
@ -113,7 +113,7 @@ static uint16_t read_x_value(void) {
|
||||
palSetPadMode(GPIOC, 1, PAL_MODE_INPUT_ANALOG);
|
||||
palSetPadMode(GPIOC, 2, PAL_MODE_OUTPUT_PUSHPULL);
|
||||
palSetPadMode(GPIOC, 3, PAL_MODE_OUTPUT_PUSHPULL);
|
||||
|
||||
|
||||
palSetPad(GPIOC, 2);
|
||||
palClearPad(GPIOC, 3);
|
||||
chThdSleepMilliseconds(1);
|
||||
@ -135,7 +135,7 @@ static uint16_t read_x_value(void) {
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static uint16_t read_y_value(void) {
|
||||
static __inline uint16_t read_y_value(void) {
|
||||
uint16_t val1, val2;
|
||||
adcsample_t samples[ADC_NUM_CHANNELS * ADC_BUF_DEPTH];
|
||||
|
||||
@ -143,8 +143,8 @@ static uint16_t read_y_value(void) {
|
||||
palSetPadMode(GPIOC, 3, PAL_MODE_INPUT_ANALOG);
|
||||
palSetPadMode(GPIOC, 0, PAL_MODE_OUTPUT_PUSHPULL);
|
||||
palSetPadMode(GPIOC, 1, PAL_MODE_OUTPUT_PUSHPULL);
|
||||
|
||||
palSetPad(GPIOC, 1);
|
||||
|
||||
palSetPad(GPIOC, 1);
|
||||
palClearPad(GPIOC, 0);
|
||||
chThdSleepMilliseconds(1);
|
||||
adcConvert(&ADCD1, &adc_y_config, samples, ADC_BUF_DEPTH);
|
||||
|
@ -28,7 +28,7 @@
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
@ -39,16 +39,16 @@
|
||||
#include <wingdi.h>
|
||||
#include <assert.h>
|
||||
|
||||
#ifndef GINPUT_NEED_TOGGLE
|
||||
#define GINPUT_NEED_TOGGLE FALSE
|
||||
#ifndef GDISP_SCREEN_WIDTH
|
||||
#define GDISP_SCREEN_WIDTH 640
|
||||
#endif
|
||||
#ifndef GINPUT_NEED_MOUSE
|
||||
#define GINPUT_NEED_MOUSE FALSE
|
||||
#ifndef GDISP_SCREEN_HEIGHT
|
||||
#define GDISP_SCREEN_HEIGHT 480
|
||||
#endif
|
||||
|
||||
#if GINPUT_NEED_TOGGLE
|
||||
/* Include toggle support code */
|
||||
#include "lld/ginput/toggle.h"
|
||||
#include "ginput/lld/toggle.h"
|
||||
|
||||
const GToggleConfig GInputToggleConfigTable[GINPUT_TOGGLE_CONFIG_ENTRIES] = {
|
||||
{0, 0xFF, 0x00, PAL_MODE_INPUT},
|
||||
@ -57,12 +57,11 @@
|
||||
|
||||
#if GINPUT_NEED_MOUSE
|
||||
/* Include mouse support code */
|
||||
#include "ginput.h"
|
||||
#include "lld/ginput/mouse.h"
|
||||
#include "ginput/lld/mouse.h"
|
||||
#endif
|
||||
|
||||
/* Include the emulation code for things we don't support */
|
||||
#include "lld/gdisp/emulation.c"
|
||||
#include "gdisp/lld/emulation.c"
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local routines . */
|
||||
@ -621,7 +620,7 @@ void GDISP_LLD(drawpixel)(coord_t x, coord_t y, color_t color) {
|
||||
}
|
||||
#endif
|
||||
|
||||
#if GDISP_HARDWARE_BITFILLS || defined(__DOXYGEN__)
|
||||
#if (GDISP_HARDWARE_BITFILLS && GDISP_NEED_CONTROL) || defined(__DOXYGEN__)
|
||||
static pixel_t *rotateimg(coord_t cx, coord_t cy, coord_t srcx, coord_t srccx, const pixel_t *buffer) {
|
||||
pixel_t *dstbuf;
|
||||
pixel_t *dst;
|
||||
@ -667,7 +666,9 @@ void GDISP_LLD(drawpixel)(coord_t x, coord_t y, color_t color) {
|
||||
}
|
||||
return dstbuf;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if GDISP_HARDWARE_BITFILLS || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Fill an area with a bitmap.
|
||||
* @note Optional - The high level driver can emulate using software.
|
||||
|
12
gfx.mk
12
gfx.mk
@ -3,15 +3,11 @@ ifeq ($(GFXLIB),)
|
||||
GFXLIB = $(CHIBIOS)/ext/gfx
|
||||
endif
|
||||
|
||||
GFXSRC += $(GFXLIB)/src/gdisp.c \
|
||||
$(GFXLIB)/src/gdisp_fonts.c \
|
||||
$(GFXLIB)/src/gevent.c \
|
||||
$(GFXLIB)/src/gtimer.c \
|
||||
$(GFXLIB)/src/gwin.c \
|
||||
$(GFXLIB)/src/touchscreen.c \
|
||||
$(GFXLIB)/src/graph.c \
|
||||
|
||||
GFXINC += $(GFXLIB)/include
|
||||
GFXSRC +=
|
||||
|
||||
include $(GFXLIB)/src/gdisp/gdisp.mk
|
||||
include $(GFXLIB)/src/gevent/gevent.mk
|
||||
include $(GFXLIB)/src/gtimer/gtimer.mk
|
||||
include $(GFXLIB)/src/gwin/gwin.mk
|
||||
include $(GFXLIB)/src/ginput/ginput.mk
|
||||
|
@ -19,7 +19,7 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file include/gdisp.h
|
||||
* @file include/gdisp/gdisp.h
|
||||
* @brief GDISP Graphic Driver subsystem header file.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
@ -29,9 +29,16 @@
|
||||
#ifndef _GDISP_H
|
||||
#define _GDISP_H
|
||||
|
||||
#ifndef GFX_USE_GDISP
|
||||
#define GFX_USE_GDISP FALSE
|
||||
#endif
|
||||
#include "gfx.h"
|
||||
|
||||
/* This type definition is defined here as it gets used in other gfx sub-systems even
|
||||
* if GFX_USE_GDISP is FALSE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief The type for a coordinate or length on the screen.
|
||||
*/
|
||||
typedef int16_t coord_t;
|
||||
|
||||
#if GFX_USE_GDISP || defined(__DOXYGEN__)
|
||||
|
||||
@ -65,66 +72,17 @@
|
||||
#define Pink HTML2COLOR(0xFFC0CB)
|
||||
#define SkyBlue HTML2COLOR(0x87CEEB)
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver pre-compile time settings. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @name GDISP more complex functionality to be compiled
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Do the drawing functions need to be thread-safe.
|
||||
* @details Defaults to FALSE
|
||||
* @note Both GDISP_NEED_MULTITHREAD and GDISP_NEED_ASYNC make
|
||||
* the gdisp API thread-safe.
|
||||
* @note This is more efficient than GDISP_NEED_ASYNC as it only
|
||||
* requires a context switch if something else is already
|
||||
* drawing.
|
||||
*/
|
||||
#ifndef GDISP_NEED_MULTITHREAD
|
||||
#define GDISP_NEED_MULTITHREAD FALSE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Use asynchronous calls (multi-thread safe).
|
||||
* @details Defaults to FALSE
|
||||
* @note Both GDISP_NEED_MULTITHREAD and GDISP_NEED_ASYNC make
|
||||
* the gdisp API thread-safe.
|
||||
* @note Turning this on adds two context switches per transaction
|
||||
* so it can significantly slow graphics drawing.
|
||||
*/
|
||||
#ifndef GDISP_NEED_ASYNC
|
||||
#define GDISP_NEED_ASYNC FALSE
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
#if GDISP_NEED_MULTITHREAD && GDISP_NEED_ASYNC
|
||||
#error "GDISP: Only one of GDISP_NEED_MULTITHREAD and GDISP_NEED_ASYNC should be defined."
|
||||
#endif
|
||||
|
||||
#if GDISP_NEED_ASYNC
|
||||
/* Messaging API is required for Async Multi-Thread */
|
||||
#undef GDISP_NEED_MSGAPI
|
||||
#define GDISP_NEED_MSGAPI TRUE
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Low Level Driver details and error checks. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/* Include the low level driver information */
|
||||
#include "lld/gdisp/gdisp_lld.h"
|
||||
#include "gdisp/lld/gdisp_lld.h"
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Type definitions */
|
||||
/*===========================================================================*/
|
||||
|
||||
typedef struct _point_t {
|
||||
coord_t x;
|
||||
coord_t y;
|
||||
} point_t;
|
||||
|
||||
/**
|
||||
* @brief Type for the text justification.
|
||||
*/
|
||||
@ -224,9 +182,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
/* Query driver specific data */
|
||||
#if GDISP_NEED_CONTROL
|
||||
void *gdispQuery(unsigned what);
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
@ -286,8 +242,9 @@ void gdispDrawBox(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color);
|
||||
/*
|
||||
* Macro definitions
|
||||
*/
|
||||
|
||||
/* Now obsolete functions */
|
||||
#define gdispBlitArea(x, y, cx, cy, buffer) gdispBlitAreaEx(x, y, cx, cy, 0, 0, cx, buffer)
|
||||
#define gdispBlitArea(x, y, cx, cy, buffer) gdispBlitAreaEx(x, y, cx, cy, 0, 0, cx, buffer)
|
||||
|
||||
/* Macro definitions for common gets and sets */
|
||||
#define gdispSetPowerMode(powerMode) gdispControl(GDISP_CONTROL_POWER, (void *)(unsigned)(powerMode))
|
@ -667,7 +667,7 @@
|
||||
}
|
||||
#endif
|
||||
|
||||
#if GDISP_NEED_QUERY && !GDISP_HARDWARE_QUERY
|
||||
#if !GDISP_HARDWARE_QUERY
|
||||
void *GDISP_LLD(query)(unsigned what) {
|
||||
switch(what) {
|
||||
case GDISP_QUERY_WIDTH: return (void *)(unsigned)GDISP.Width;
|
||||
@ -756,11 +756,9 @@ void *GDISP_LLD(query)(unsigned what) {
|
||||
GDISP_LLD(control)(msg->control.what, msg->control.value);
|
||||
break;
|
||||
#endif
|
||||
#if GDISP_NEED_QUERY
|
||||
case GDISP_LLD_MSG_QUERY:
|
||||
msg->query.result = GDISP_LLD(query)(msg->query.what);
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#endif
|
@ -19,7 +19,7 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file include/lld/gdisp/gdisp_lld.h
|
||||
* @file include/gdisp/lld/gdisp_lld.h
|
||||
* @brief GDISP Graphic Driver subsystem low level driver header.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
@ -35,106 +35,6 @@
|
||||
/* Low level driver configuration needs */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @name GDISP low level driver more complex functionality to be compiled
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Should all operations be clipped to the screen and colors validated.
|
||||
* @details Defaults to TRUE.
|
||||
* @note If this is FALSE, any operations that extend beyond the
|
||||
* edge of the screen will have undefined results. Any
|
||||
* out-of-range colors will produce undefined results.
|
||||
* @note If defined then all low level and high level driver routines
|
||||
* must check the validity of inputs and do something sensible
|
||||
* if they are out of range. It doesn't have to be efficient,
|
||||
* just valid.
|
||||
*/
|
||||
#ifndef GDISP_NEED_VALIDATION
|
||||
#define GDISP_NEED_VALIDATION TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Are circle functions needed.
|
||||
* @details Defaults to TRUE
|
||||
*/
|
||||
#ifndef GDISP_NEED_CIRCLE
|
||||
#define GDISP_NEED_CIRCLE TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Are ellipse functions needed.
|
||||
* @details Defaults to TRUE
|
||||
*/
|
||||
#ifndef GDISP_NEED_ELLIPSE
|
||||
#define GDISP_NEED_ELLIPSE TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Are arc functions needed.
|
||||
* @details Defaults to FALSE
|
||||
*/
|
||||
#ifndef GDISP_NEED_ARC
|
||||
#define GDISP_NEED_ARC FALSE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Are text functions needed.
|
||||
* @details Defaults to TRUE
|
||||
*/
|
||||
#ifndef GDISP_NEED_TEXT
|
||||
#define GDISP_NEED_TEXT TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Is scrolling needed.
|
||||
* @details Defaults to FALSE
|
||||
*/
|
||||
#ifndef GDISP_NEED_SCROLL
|
||||
#define GDISP_NEED_SCROLL FALSE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Is the capability to read pixels back needed.
|
||||
* @details Defaults to FALSE
|
||||
*/
|
||||
#ifndef GDISP_NEED_PIXELREAD
|
||||
#define GDISP_NEED_PIXELREAD FALSE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Are clipping functions needed.
|
||||
* @details Defaults to TRUE
|
||||
*/
|
||||
#ifndef GDISP_NEED_CLIP
|
||||
#define GDISP_NEED_CLIP FALSE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Control some aspect of the drivers operation.
|
||||
* @details Defaults to FALSE
|
||||
*/
|
||||
#ifndef GDISP_NEED_CONTROL
|
||||
#define GDISP_NEED_CONTROL FALSE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Query some aspect of the drivers operation.
|
||||
* @details Defaults to TRUE
|
||||
*/
|
||||
#ifndef GDISP_NEED_QUERY
|
||||
#define GDISP_NEED_QUERY TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Is the messaging api interface required.
|
||||
* @details Defaults to FALSE
|
||||
*/
|
||||
#ifndef GDISP_NEED_MSGAPI
|
||||
#define GDISP_NEED_MSGAPI FALSE
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Include the low level driver configuration information */
|
||||
/*===========================================================================*/
|
||||
@ -537,10 +437,6 @@
|
||||
/* Driver types. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief The type for a coordinate or length on the screen.
|
||||
*/
|
||||
typedef int16_t coord_t;
|
||||
/**
|
||||
* @brief The type of a pixel.
|
||||
*/
|
||||
@ -624,9 +520,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
/* Query driver specific data */
|
||||
#if GDISP_NEED_QUERY
|
||||
extern void *GDISP_LLD_VMT(query)(unsigned what);
|
||||
#endif
|
||||
|
||||
/* Clipping Functions */
|
||||
#if GDISP_NEED_CLIP
|
@ -68,9 +68,7 @@ typedef enum gdisp_msgaction {
|
||||
#if GDISP_NEED_CONTROL
|
||||
GDISP_LLD_MSG_CONTROL,
|
||||
#endif
|
||||
#if GDISP_NEED_QUERY
|
||||
GDISP_LLD_MSG_QUERY,
|
||||
#endif
|
||||
GDISP_LLD_MSG_QUERY,
|
||||
} gdisp_msgaction_t;
|
||||
|
||||
typedef union gdisp_lld_msg {
|
||||
@ -189,7 +187,7 @@ typedef union gdisp_lld_msg {
|
||||
} query;
|
||||
} gdisp_lld_msg_t;
|
||||
|
||||
#endif /* GFX_USE_GDISP */
|
||||
#endif /* GFX_USE_GDISP && GDISP_NEED_MSGAPI */
|
||||
#endif /* _GDISP_LLD_MSGS_H */
|
||||
/** @} */
|
||||
|
208
include/gdisp/options.h
Normal file
208
include/gdisp/options.h
Normal file
@ -0,0 +1,208 @@
|
||||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file include/gdisp/options.h
|
||||
* @brief GDISP sub-system options header file.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _GDISP_OPTIONS_H
|
||||
#define _GDISP_OPTIONS_H
|
||||
|
||||
/**
|
||||
* @name GDISP Functionality to be included
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Should all operations be clipped to the screen and colors validated.
|
||||
* @details Defaults to TRUE.
|
||||
* @note If this is FALSE, any operations that extend beyond the
|
||||
* edge of the screen will have undefined results. Any
|
||||
* out-of-range colors will produce undefined results.
|
||||
* @note If defined then all low level and high level GDISP driver routines
|
||||
* must check the validity of inputs and do something sensible
|
||||
* if they are out of range. It doesn't have to be efficient,
|
||||
* just valid.
|
||||
*/
|
||||
#ifndef GDISP_NEED_VALIDATION
|
||||
#define GDISP_NEED_VALIDATION TRUE
|
||||
#endif
|
||||
/**
|
||||
* @brief Are clipping functions needed.
|
||||
* @details Defaults to TRUE
|
||||
*/
|
||||
#ifndef GDISP_NEED_CLIP
|
||||
#define GDISP_NEED_CLIP TRUE
|
||||
#endif
|
||||
/**
|
||||
* @brief Are text functions needed.
|
||||
* @details Defaults to TRUE
|
||||
*/
|
||||
#ifndef GDISP_NEED_TEXT
|
||||
#define GDISP_NEED_TEXT TRUE
|
||||
#endif
|
||||
/**
|
||||
* @brief Are circle functions needed.
|
||||
* @details Defaults to TRUE
|
||||
*/
|
||||
#ifndef GDISP_NEED_CIRCLE
|
||||
#define GDISP_NEED_CIRCLE TRUE
|
||||
#endif
|
||||
/**
|
||||
* @brief Are ellipse functions needed.
|
||||
* @details Defaults to TRUE
|
||||
*/
|
||||
#ifndef GDISP_NEED_ELLIPSE
|
||||
#define GDISP_NEED_ELLIPSE TRUE
|
||||
#endif
|
||||
/**
|
||||
* @brief Are arc functions needed.
|
||||
* @details Defaults to FALSE
|
||||
* @note Requires the maths library to be included in the link. ie -lm
|
||||
*/
|
||||
#ifndef GDISP_NEED_ARC
|
||||
#define GDISP_NEED_ARC FALSE
|
||||
#endif
|
||||
/**
|
||||
* @brief Are scrolling functions needed.
|
||||
* @details Defaults to FALSE
|
||||
* @note This function must be supported by the low level GDISP driver
|
||||
* you have included in your project. If it isn't, defining this
|
||||
* option will cause a compile error.
|
||||
*/
|
||||
#ifndef GDISP_NEED_SCROLL
|
||||
#define GDISP_NEED_SCROLL FALSE
|
||||
#endif
|
||||
/**
|
||||
* @brief Is the capability to read pixels back needed.
|
||||
* @details Defaults to FALSE
|
||||
* @note This function must be supported by the low level GDISP driver
|
||||
* you have included in your project. If it isn't, defining this
|
||||
* option will cause a compile error.
|
||||
*/
|
||||
#ifndef GDISP_NEED_PIXELREAD
|
||||
#define GDISP_NEED_PIXELREAD FALSE
|
||||
#endif
|
||||
/**
|
||||
* @brief Control some aspect of the hardware operation.
|
||||
* @details Defaults to FALSE
|
||||
* @note This allows control of hardware specific features such as
|
||||
* screen rotation, backlight levels, contrast etc
|
||||
*/
|
||||
#ifndef GDISP_NEED_CONTROL
|
||||
#define GDISP_NEED_CONTROL FALSE
|
||||
#endif
|
||||
/**
|
||||
* @brief Is the messaging api interface required.
|
||||
* @details Defaults to FALSE
|
||||
*/
|
||||
#ifndef GDISP_NEED_MSGAPI
|
||||
#define GDISP_NEED_MSGAPI FALSE
|
||||
#endif
|
||||
/**
|
||||
* @}
|
||||
*
|
||||
* @name GDISP Multi-Threading Options
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Do the drawing functions need to be thread-safe.
|
||||
* @details Defaults to FALSE
|
||||
* @note Both GDISP_NEED_MULTITHREAD and GDISP_NEED_ASYNC make
|
||||
* the gdisp API thread-safe.
|
||||
* @note This is more efficient than GDISP_NEED_ASYNC as it only
|
||||
* requires a context switch if something else is already
|
||||
* drawing.
|
||||
*/
|
||||
#ifndef GDISP_NEED_MULTITHREAD
|
||||
#define GDISP_NEED_MULTITHREAD FALSE
|
||||
#endif
|
||||
/**
|
||||
* @brief Use asynchronous calls (multi-thread safe).
|
||||
* @details Defaults to FALSE
|
||||
* @note Both GDISP_NEED_MULTITHREAD and GDISP_NEED_ASYNC make
|
||||
* the gdisp API thread-safe.
|
||||
* @note Turning this on adds two context switches per transaction
|
||||
* so it can significantly slow graphics drawing but it allows
|
||||
* drawing operations to continue in the background.
|
||||
*/
|
||||
#ifndef GDISP_NEED_ASYNC
|
||||
#define GDISP_NEED_ASYNC FALSE
|
||||
#endif
|
||||
/**
|
||||
* @}
|
||||
*
|
||||
* @name GDISP Optional Sizing Parameters
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief The maximum height of a font.
|
||||
* @details Either 16 or 32. Defaults to 16
|
||||
* @note Setting this to 32 causes the font tables to take
|
||||
* twice the internal program memory. Don't do it unless
|
||||
* you realy must define an unscaled font larger than 16 bits high.
|
||||
*/
|
||||
#ifndef GDISP_MAX_FONT_HEIGHT
|
||||
#define GDISP_MAX_FONT_HEIGHT 16
|
||||
#endif
|
||||
/**
|
||||
* @}
|
||||
*
|
||||
* @name GDISP Optional Low Level Driver Defines
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Use a custom board definition even if a board definition exists.
|
||||
* @details Defaults to FALSE
|
||||
* @details If TRUE, add gdisp_lld_board.h to your project directory and customise it.
|
||||
* @note Not all GDISP low level drivers currently use board definition files.
|
||||
*/
|
||||
#ifndef GDISP_USE_CUSTOM_BOARD
|
||||
#define GDISP_USE_CUSTOM_BOARD FALSE
|
||||
#endif
|
||||
/**
|
||||
* @brief Set the screen height and width.
|
||||
* @note Ignored by some low level GDISP drivers, optional for others.
|
||||
* @note Where these values are allowed, a default is always provided be the low level driver.
|
||||
* @note The list of GDISP low level drivers that allow these to be set are...
|
||||
* WIN32, SSD1289, SSD1963, TestStub
|
||||
*/
|
||||
/* #define GDISP_SCREEN_WIDTH nnnn */
|
||||
/* #define GDISP_SCREEN_HEIGHT nnnn */
|
||||
/**
|
||||
* @brief Define which bus interface to use.
|
||||
* @details Only required by the SSD1963 driver.
|
||||
* @note This will be replaced eventually by board definition files
|
||||
*/
|
||||
/* #define GDISP_USE_FSMC */
|
||||
/* #define GDISP_USE_GPIO */
|
||||
/**
|
||||
* @brief Define which two drivers will be used by the VMT layer.
|
||||
* @details Only required by the VMT driver.
|
||||
*/
|
||||
/* #define GDISP_VMT_NAME1(x) x##YourDriver1 */
|
||||
/* #define GDISP_VMT_NAME2(x) x##YourDriver2 */
|
||||
/** @} */
|
||||
|
||||
#endif /* _GDISP_OPTIONS_H */
|
||||
/** @} */
|
@ -18,7 +18,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
* @file gevent.h
|
||||
* @file include/gevent/gevent.h
|
||||
* @brief GEVENT GFX User Event subsystem header file.
|
||||
*
|
||||
* @addtogroup GEVENT
|
||||
@ -27,56 +27,18 @@
|
||||
#ifndef _GEVENT_H
|
||||
#define _GEVENT_H
|
||||
|
||||
#ifndef GFX_USE_GEVENT
|
||||
#define GFX_USE_GEVENT FALSE
|
||||
#endif
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GEVENT || defined(__DOXYGEN__)
|
||||
|
||||
/**
|
||||
* @name GEVENT macros and more complex functionality to be compiled
|
||||
* @{
|
||||
* @brief Data part of a static GListener initializer.
|
||||
*/
|
||||
/**
|
||||
* @brief Data part of a static GListener initializer.
|
||||
*/
|
||||
#define _GLISTENER_DATA(name) { _SEMAPHORE_DATA(name.waitqueue, 0), _BSEMAPHORE_DATA(name.eventlock, FALSE), 0, 0, {0} }
|
||||
/**
|
||||
* @brief Static GListener initializer.
|
||||
*/
|
||||
#define GLISTENER_DECL(name) GListener name = _GLISTENER_DATA(name)
|
||||
/**
|
||||
* @brief Defines the maximum size of an event status variable.
|
||||
* @details Defaults to 32 bytes
|
||||
*/
|
||||
#ifndef GEVENT_MAXIMUM_STATUS_SIZE
|
||||
#define GEVENT_MAXIMUM_STATUS_SIZE 32
|
||||
#endif
|
||||
/**
|
||||
* @brief Should routines assert() if they run out of resources.
|
||||
* @details Defaults to FALSE.
|
||||
* @details If FALSE the application must be prepared to handle these
|
||||
* failures.
|
||||
*/
|
||||
#ifndef GEVENT_ASSERT_NO_RESOURCE
|
||||
#define GEVENT_ASSERT_NO_RESOURCE FALSE
|
||||
#endif
|
||||
/**
|
||||
* @brief Defines the maximum Source/Listener pairs in the system.
|
||||
* @details Defaults to 32
|
||||
*/
|
||||
#ifndef MAX_SOURCE_LISTENERS
|
||||
#define MAX_SOURCE_LISTENERS 32
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Low Level Driver details and error checks. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if !CH_USE_MUTEXES || !CH_USE_SEMAPHORES
|
||||
#error "GEVENT: CH_USE_MUTEXES and CH_USE_SEMAPHORES must be defined in chconf.h"
|
||||
#endif
|
||||
#define _GLISTENER_DATA(name) { _SEMAPHORE_DATA(name.waitqueue, 0), _BSEMAPHORE_DATA(name.eventlock, FALSE), 0, 0, {0} }
|
||||
/**
|
||||
* @brief Static GListener initializer.
|
||||
*/
|
||||
#define GLISTENER_DECL(name) GListener name = _GLISTENER_DATA(name)
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Type definitions */
|
||||
@ -93,11 +55,11 @@ typedef uint16_t GEventType;
|
||||
|
||||
// This object can be typecast to any GEventXxxxx type to allow any sub-system (or the application) to create events.
|
||||
// The prerequisite is that the new status structure type starts with a field named 'type' of type 'GEventType'.
|
||||
// The total status structure also must not exceed GEVENT_MAXIMUM_STATUS_SIZE bytes.
|
||||
// The total status structure also must not exceed GEVENT_MAXIMUM_SIZE bytes.
|
||||
// For example, this is used by GWIN button events, GINPUT data streams etc.
|
||||
typedef union GEvent_u {
|
||||
GEventType type; // The type of this event
|
||||
char pad[GEVENT_MAXIMUM_STATUS_SIZE]; // This is here to allow static initialisation of GEventObject's in the application.
|
||||
GEventType type; // The type of this event
|
||||
char pad[GEVENT_MAXIMUM_SIZE]; // This is here to allow static initialisation of GEventObject's in the application.
|
||||
} GEvent;
|
||||
|
||||
// A special callback function
|
68
include/gevent/options.h
Normal file
68
include/gevent/options.h
Normal file
@ -0,0 +1,68 @@
|
||||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file include/gevent/options.h
|
||||
* @brief GEVENT sub-system options header file.
|
||||
*
|
||||
* @addtogroup GEVENT
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _GEVENT_OPTIONS_H
|
||||
#define _GEVENT_OPTIONS_H
|
||||
|
||||
/**
|
||||
* @name GEVENT Functionality to be included
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Should routines assert() if they run out of resources.
|
||||
* @details Defaults to FALSE.
|
||||
* @details If FALSE the application must be prepared to handle these
|
||||
* failures.
|
||||
*/
|
||||
#ifndef GEVENT_ASSERT_NO_RESOURCE
|
||||
#define GEVENT_ASSERT_NO_RESOURCE FALSE
|
||||
#endif
|
||||
/**
|
||||
* @}
|
||||
*
|
||||
* @name GEVENT Optional Sizing Parameters
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Defines the maximum size of an event status variable.
|
||||
* @details Defaults to 32 bytes
|
||||
*/
|
||||
#ifndef GEVENT_MAXIMUM_SIZE
|
||||
#define GEVENT_MAXIMUM_SIZE 32
|
||||
#endif
|
||||
/**
|
||||
* @brief Defines the maximum Source/Listener pairs in the system.
|
||||
* @details Defaults to 32
|
||||
*/
|
||||
#ifndef GEVENT_MAX_SOURCE_LISTENERS
|
||||
#define GEVENT_MAX_SOURCE_LISTENERS 32
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
#endif /* _GEVENT_OPTIONS_H */
|
||||
/** @} */
|
114
include/gfx.h
Normal file
114
include/gfx.h
Normal file
@ -0,0 +1,114 @@
|
||||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file include/gfx.h
|
||||
* @brief GFX system header file.
|
||||
*
|
||||
* @addtogroup GFX
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _GFX_H
|
||||
#define _GFX_H
|
||||
|
||||
/* gfxconf.h is the user's project configuration for the GFX system. */
|
||||
#include "gfxconf.h"
|
||||
|
||||
/**
|
||||
* @name GFX sub-systems that can be turned on
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief GFX Graphics Display Basic API
|
||||
* @details Defaults to FALSE
|
||||
* @note Also add the specific hardware driver to your makefile.
|
||||
* Eg. include $(GFXLIB)/drivers/gdisp/Nokia6610/gdisp_lld.mk
|
||||
*/
|
||||
#ifndef GFX_USE_GDISP
|
||||
#define GFX_USE_GDISP FALSE
|
||||
#endif
|
||||
/**
|
||||
* @brief GFX Graphics Windowing API
|
||||
* @details Defaults to FALSE
|
||||
* @details Extends the GDISP API to add the concept of graphic windows.
|
||||
* @note Also supports high-level "window" objects such as console windows,
|
||||
* buttons, graphing etc
|
||||
*/
|
||||
#ifndef GFX_USE_GWIN
|
||||
#define GFX_USE_GWIN FALSE
|
||||
#endif
|
||||
/**
|
||||
* @brief GFX Event API
|
||||
* @details Defaults to FALSE
|
||||
* @details Defines the concept of a "Source" that can send "Events" to "Listeners".
|
||||
*/
|
||||
#ifndef GFX_USE_GEVENT
|
||||
#define GFX_USE_GEVENT FALSE
|
||||
#endif
|
||||
/**
|
||||
* @brief GFX Timer API
|
||||
* @details Defaults to FALSE
|
||||
* @details Provides thread context timers - both one-shot and periodic.
|
||||
*/
|
||||
#ifndef GFX_USE_GTIMER
|
||||
#define GFX_USE_GTIMER FALSE
|
||||
#endif
|
||||
/**
|
||||
* @brief GFX Input Device API
|
||||
* @details Defaults to FALSE
|
||||
* @note Also add the specific hardware drivers to your makefile.
|
||||
* Eg.
|
||||
* include $(GFXLIB)/drivers/ginput/toggle/Pal/ginput_lld.mk
|
||||
* and...
|
||||
* include $(GFXLIB)/drivers/ginput/touch/MCU/ginput_lld.mk
|
||||
*/
|
||||
#ifndef GFX_USE_GINPUT
|
||||
#define GFX_USE_GINPUT FALSE
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* Get all the options for each sub-system.
|
||||
*
|
||||
*/
|
||||
#include "gevent/options.h"
|
||||
#include "gtimer/options.h"
|
||||
#include "gdisp/options.h"
|
||||
#include "gwin/options.h"
|
||||
#include "ginput/options.h"
|
||||
|
||||
/**
|
||||
* Inter-dependancy safety checks on the sub-systems.
|
||||
*
|
||||
*/
|
||||
#include "gfx_rules.h"
|
||||
|
||||
/**
|
||||
* Include the sub-system header files
|
||||
*/
|
||||
#include "gevent/gevent.h"
|
||||
#include "gtimer/gtimer.h"
|
||||
#include "gdisp/gdisp.h"
|
||||
#include "gwin/gwin.h"
|
||||
#include "ginput/ginput.h"
|
||||
|
||||
#endif /* _GFX_H */
|
||||
/** @} */
|
113
include/gfx_rules.h
Normal file
113
include/gfx_rules.h
Normal file
@ -0,0 +1,113 @@
|
||||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file include/gfx_rules.h
|
||||
* @brief GFX system safety rules header file.
|
||||
*
|
||||
* @addtogroup GFX
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _GFX_RULES_H
|
||||
#define _GFX_RULES_H
|
||||
|
||||
/**
|
||||
* Safety checks on all the defines.
|
||||
*
|
||||
* These are defined in the order of their inter-dependancies.
|
||||
*/
|
||||
|
||||
#if GFX_USE_GWIN
|
||||
#if !GFX_USE_GDISP
|
||||
#error "GWIN: GFX_USE_GDISP must be TRUE when using GWIN"
|
||||
#endif
|
||||
#if !GDISP_NEED_CLIP
|
||||
#warning "GWIN: Drawing can occur outside the defined windows as GDISP_NEED_CLIP is FALSE"
|
||||
#endif
|
||||
#if GWIN_NEED_BUTTON
|
||||
#if !GDISP_NEED_TEXT
|
||||
#error "GWIN: GDISP_NEED_TEXT is required if GWIN_NEED_BUTTON is TRUE."
|
||||
#endif
|
||||
#if !GFX_USE_GEVENT
|
||||
#warning "GWIN: GFX_USE_GEVENT is required if GWIN_NEED_BUTTON is TRUE. It has been turned on for you."
|
||||
#undef GFX_USE_GEVENT
|
||||
#define GFX_USE_GEVENT TRUE
|
||||
#endif
|
||||
#if !GFX_USE_GINPUT || !(GINPUT_NEED_MOUSE || GINPUT_NEED_TOGGLE)
|
||||
#warning "GWIN: You have set GWIN_NEED_BUTTON to TRUE but no supported GINPUT (mouse/toggle) devices have been included"
|
||||
#endif
|
||||
#if !GDISP_NEED_MULTITHREAD && !GDISP_NEED_ASYNC
|
||||
#warning "GWIN: Either GDISP_NEED_MULTITHREAD or GDISP_NEED_ASYNC is required if GWIN_NEED_BUTTON is TRUE."
|
||||
#warning "GWIN: GDISP_NEED_MULTITHREAD has been turned on for you."
|
||||
#undef GDISP_NEED_MULTITHREAD
|
||||
#define GDISP_NEED_MULTITHREAD TRUE
|
||||
#endif
|
||||
#endif
|
||||
#if GWIN_NEED_CONSOLE
|
||||
#if !GDISP_NEED_TEXT
|
||||
#error "GWIN: GDISP_NEED_TEXT is required if GWIN_NEED_CONSOLE is TRUE."
|
||||
#endif
|
||||
#endif
|
||||
#if GWIN_NEED_GRAPH
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if GFX_USE_GINPUT
|
||||
#if !GFX_USE_GEVENT
|
||||
#warning "GINPUT: GFX_USE_GEVENT is required if GFX_USE_GINPUT is TRUE. It has been turned on for you."
|
||||
#undef GFX_USE_GEVENT
|
||||
#define GFX_USE_GEVENT TRUE
|
||||
#endif
|
||||
#if !GFX_USE_GTIMER
|
||||
#warning "GINPUT: GFX_USE_GTIMER is required if GFX_USE_GINPUT is TRUE. It has been turned on for you."
|
||||
#undef GFX_USE_GTIMER
|
||||
#define GFX_USE_GTIMER TRUE
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if GFX_USE_GDISP
|
||||
#if GDISP_NEED_MULTITHREAD && GDISP_NEED_ASYNC
|
||||
#error "GDISP: Only one of GDISP_NEED_MULTITHREAD and GDISP_NEED_ASYNC should be defined."
|
||||
#endif
|
||||
#if GDISP_NEED_ASYNC
|
||||
#if !GDISP_NEED_MSGAPI
|
||||
#warning "GDISP: Messaging API is required for Async Multi-Thread. It has been turned on for you."
|
||||
#undef GDISP_NEED_MSGAPI
|
||||
#define GDISP_NEED_MSGAPI TRUE
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if GFX_USE_GEVENT
|
||||
#if !CH_USE_MUTEXES || !CH_USE_SEMAPHORES
|
||||
#error "GEVENT: CH_USE_MUTEXES and CH_USE_SEMAPHORES must be defined in chconf.h"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if GFX_USE_GTIMER
|
||||
#if GFX_USE_GDISP && !GDISP_NEED_MULTITHREAD && !GDISP_NEED_ASYNC
|
||||
#warning "GTIMER: Neither GDISP_NEED_MULTITHREAD nor GDISP_NEED_ASYNC has been specified."
|
||||
#warning "GTIMER: Make sure you are not performing any GDISP/GWIN drawing operations in the timer callback!"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif /* _GFX_H */
|
||||
/** @} */
|
74
include/gfxconf.example.h
Normal file
74
include/gfxconf.example.h
Normal file
@ -0,0 +1,74 @@
|
||||
/**
|
||||
* This file has a different license to the rest of the GFX system.
|
||||
* You can copy, modify and distribute this file as you see fit.
|
||||
* You do not need to publish your source modifications to this file.
|
||||
* The only thing you are not permitted to do is to relicense it
|
||||
* under a different license.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Copy this file into your project directory and rename it as gfxconf.h
|
||||
* Edit your copy to turn on the GFX features you want to use.
|
||||
*/
|
||||
|
||||
#ifndef _GFXCONF_H
|
||||
#define _GFXCONF_H
|
||||
|
||||
/* GFX sub-systems to turn on */
|
||||
#define GFX_USE_GDISP FALSE
|
||||
#define GFX_USE_GWIN FALSE
|
||||
#define GFX_USE_GEVENT FALSE
|
||||
#define GFX_USE_GTIMER FALSE
|
||||
#define GFX_USE_GINPUT FALSE
|
||||
|
||||
/* Features for the GDISP sub-system. */
|
||||
#define GDISP_NEED_VALIDATION TRUE
|
||||
#define GDISP_NEED_CLIP TRUE
|
||||
#define GDISP_NEED_TEXT TRUE
|
||||
#define GDISP_NEED_CIRCLE TRUE
|
||||
#define GDISP_NEED_ELLIPSE TRUE
|
||||
#define GDISP_NEED_ARC FALSE
|
||||
#define GDISP_NEED_SCROLL FALSE
|
||||
#define GDISP_NEED_PIXELREAD FALSE
|
||||
#define GDISP_NEED_CONTROL FALSE
|
||||
#define GDISP_NEED_MULTITHREAD FALSE
|
||||
#define GDISP_NEED_ASYNC FALSE
|
||||
#define GDISP_NEED_MSGAPI FALSE
|
||||
|
||||
/* Features for the GWIN sub-system. */
|
||||
#define GWIN_NEED_BUTTON FALSE
|
||||
#define GWIN_NEED_CONSOLE FALSE
|
||||
#define GWIN_NEED_GRAPH FALSE
|
||||
|
||||
/* Features for the GEVENT sub-system. */
|
||||
#define GEVENT_ASSERT_NO_RESOURCE FALSE
|
||||
|
||||
/* Features for the GTIMER sub-system. */
|
||||
/* NONE */
|
||||
|
||||
/* Features for the GINPUT sub-system. */
|
||||
#define GINPUT_NEED_MOUSE FALSE
|
||||
#define GINPUT_NEED_KEYBOARD FALSE
|
||||
#define GINPUT_NEED_TOGGLE FALSE
|
||||
#define GINPUT_NEED_DIAL FALSE
|
||||
|
||||
/* Optional Parameters for various sub-systems */
|
||||
/*
|
||||
#define GDISP_MAX_FONT_HEIGHT 16
|
||||
#define GEVENT_MAXIMUM_SIZE 32
|
||||
#define GEVENT_MAX_SOURCE_LISTENERS 32
|
||||
#define GTIMER_THREAD_WORKAREA_SIZE 512
|
||||
*/
|
||||
|
||||
/* Optional Low Level Driver Definitions */
|
||||
/*
|
||||
#define GDISP_USE_CUSTOM_BOARD FALSE
|
||||
#define GDISP_SCREEN_WIDTH 320
|
||||
#define GDISP_SCREEN_HEIGHT 240
|
||||
#define GDISP_USE_FSMC
|
||||
#define GDISP_USE_GPIO
|
||||
#define GDISP_VMT_NAME1(x) x##YourDriver1
|
||||
#define GDISP_VMT_NAME2(x) x##YourDriver2
|
||||
*/
|
||||
|
||||
#endif /* _GFXCONF_H */
|
@ -1,98 +0,0 @@
|
||||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
* @file ginput.h
|
||||
* @brief GINPUT GFX User Input subsystem header file.
|
||||
*
|
||||
* @addtogroup GINPUT
|
||||
* @{
|
||||
*/
|
||||
#ifndef _GINPUT_H
|
||||
#define _GINPUT_H
|
||||
|
||||
#ifndef GFX_USE_GINPUT
|
||||
#define GFX_USE_GINPUT FALSE
|
||||
#endif
|
||||
|
||||
#if GFX_USE_GINPUT || defined(__DOXYGEN__)
|
||||
|
||||
/**
|
||||
* @name GINPUT more complex functionality to be compiled
|
||||
* @{
|
||||
*/
|
||||
/** @} */
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Low Level Driver details and error checks. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#ifndef GFX_USE_GDISP
|
||||
#define GFX_USE_GDISP FALSE
|
||||
#endif
|
||||
#if GFX_USE_GDISP
|
||||
#include "gdisp.h"
|
||||
#else
|
||||
// We require some basic type definitions normally kept in gdisp.h
|
||||
typedef int16_t coord_t;
|
||||
#endif
|
||||
|
||||
#ifndef GFX_USE_GEVENT
|
||||
#define GFX_USE_GEVENT TRUE
|
||||
#elif !GFX_USE_GEVENT
|
||||
#error "GINPUT: GFX_USE_GEVENT must be defined"
|
||||
#endif
|
||||
#include "gevent.h"
|
||||
|
||||
#ifndef GFX_USE_GTIMER
|
||||
#define GFX_USE_GTIMER TRUE
|
||||
#elif !GFX_USE_GTIMER
|
||||
#error "GINPUT: GFX_USE_GTIMER must be defined"
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Type definitions */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* External declarations. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/* How to use...
|
||||
|
||||
1. Get source handles for all the inputs you are interested in.
|
||||
- Attempting to get a handle for one instance of an input more than once will return the same handle
|
||||
2. Create a listener
|
||||
3. Assign inputs to your listener.
|
||||
- Inputs can be assigned or released from a listener at any time.
|
||||
- An input can be assigned to more than one listener.
|
||||
4. Loop on getting listener events
|
||||
5. When complete destroy the listener
|
||||
*/
|
||||
|
||||
// Include various ginput types
|
||||
#include "ginput/ginput_mouse.h"
|
||||
#include "ginput/ginput_keyboard.h"
|
||||
#include "ginput/ginput_toggle.h"
|
||||
#include "ginput/ginput_dial.h"
|
||||
|
||||
#endif /* GFX_USE_GINPUT */
|
||||
|
||||
#endif /* _GINPUT_H */
|
||||
/** @} */
|
@ -18,7 +18,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
* @file ginput/ginput_dial.h
|
||||
* @file include/ginput/dial.h
|
||||
* @brief GINPUT GFX User Input subsystem header file.
|
||||
*
|
||||
* @addtogroup GINPUT
|
||||
@ -27,25 +27,8 @@
|
||||
#ifndef _GINPUT_DIAL_H
|
||||
#define _GINPUT_DIAL_H
|
||||
|
||||
/**
|
||||
* @name GINPUT more complex functionality to be compiled
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Should analog dial functions be included.
|
||||
* @details Defaults to FALSE
|
||||
*/
|
||||
#ifndef GINPUT_NEED_DIAL
|
||||
#define GINPUT_NEED_DIAL FALSE
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
#if GINPUT_NEED_DIAL || defined(__DOXYGEN__)
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Low Level Driver details and error checks. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Type definitions */
|
||||
/*===========================================================================*/
|
55
include/ginput/ginput.h
Normal file
55
include/ginput/ginput.h
Normal file
@ -0,0 +1,55 @@
|
||||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
* @file include/ginput/ginput.h
|
||||
* @brief GINPUT GFX User Input subsystem header file.
|
||||
*
|
||||
* @addtogroup GINPUT
|
||||
* @{
|
||||
*/
|
||||
#ifndef _GINPUT_H
|
||||
#define _GINPUT_H
|
||||
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GINPUT || defined(__DOXYGEN__)
|
||||
|
||||
/* How to use...
|
||||
|
||||
1. Get source handles for all the inputs you are interested in.
|
||||
- Attempting to get a handle for one instance of an input more than once will return the same handle
|
||||
2. Create a listener
|
||||
3. Assign inputs to your listener.
|
||||
- Inputs can be assigned or released from a listener at any time.
|
||||
- An input can be assigned to more than one listener.
|
||||
4. Loop on getting listener events
|
||||
5. When complete destroy the listener
|
||||
*/
|
||||
|
||||
// Include various ginput types
|
||||
#include "ginput/mouse.h"
|
||||
#include "ginput/keyboard.h"
|
||||
#include "ginput/toggle.h"
|
||||
#include "ginput/dial.h"
|
||||
|
||||
#endif /* GFX_USE_GINPUT */
|
||||
|
||||
#endif /* _GINPUT_H */
|
||||
/** @} */
|
@ -18,7 +18,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
* @file ginput/ginput_keyboard.h
|
||||
* @file include/ginput/keyboard.h
|
||||
* @brief GINPUT GFX User Input subsystem header file.
|
||||
*
|
||||
* @addtogroup GINPUT
|
||||
@ -27,25 +27,8 @@
|
||||
#ifndef _GINPUT_KEYBOARD_H
|
||||
#define _GINPUT_KEYBOARD_H
|
||||
|
||||
/**
|
||||
* @name GINPUT more complex functionality to be compiled
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Should keyboard functions be included.
|
||||
* @details Defaults to FALSE
|
||||
*/
|
||||
#ifndef GINPUT_NEED_KEYBOARD
|
||||
#define GINPUT_NEED_KEYBOARD FALSE
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
#if GINPUT_NEED_KEYBOARD || defined(__DOXYGEN__)
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Low Level Driver details and error checks. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Type definitions */
|
||||
/*===========================================================================*/
|
@ -18,7 +18,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
* @file lld/ginput/mouse.h
|
||||
* @file include/ginput/lld/mouse.h
|
||||
* @brief GINPUT LLD header file for mouse/touch drivers.
|
||||
*
|
||||
* @addtogroup GINPUT_MOUSE
|
||||
@ -27,14 +27,7 @@
|
||||
#ifndef _LLD_GINPUT_MOUSE_H
|
||||
#define _LLD_GINPUT_MOUSE_H
|
||||
|
||||
#ifndef GINPUT_NEED_MOUSE
|
||||
#define GINPUT_NEED_MOUSE FALSE
|
||||
#endif
|
||||
#ifndef GINPUT_NEED_TOUCH
|
||||
#define GINPUT_NEED_TOUCH FALSE
|
||||
#endif
|
||||
|
||||
#if GINPUT_NEED_MOUSE || GINPUT_NEED_TOUCH
|
||||
#if GINPUT_NEED_MOUSE || defined(__DOXYGEN__)
|
||||
|
||||
#include "ginput_lld_mouse_config.h"
|
||||
|
@ -18,7 +18,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
* @file lld/ginput/toggle.h
|
||||
* @file include/ginput/lld/toggle.h
|
||||
* @brief GINPUT header file for toggle drivers.
|
||||
*
|
||||
* @addtogroup GINPUT_TOGGLE
|
||||
@ -27,14 +27,7 @@
|
||||
#ifndef _LLD_GINPUT_TOGGLE_H
|
||||
#define _LLD_GINPUT_TOGGLE_H
|
||||
|
||||
#ifndef GFX_USE_GINPUT
|
||||
#define GFX_USE_GINPUT FALSE
|
||||
#endif
|
||||
#ifndef GINPUT_NEED_TOGGLE
|
||||
#define GINPUT_NEED_TOGGLE FALSE
|
||||
#endif
|
||||
|
||||
#if (GFX_USE_GINPUT && GINPUT_NEED_TOGGLE) || defined(__DOXYGEN__)
|
||||
#if GINPUT_NEED_TOGGLE || defined(__DOXYGEN__)
|
||||
|
||||
// Describes how the toggle bits are obtained
|
||||
typedef struct GToggleConfig_t {
|
||||
@ -44,14 +37,6 @@ typedef struct GToggleConfig_t {
|
||||
iomode_t mode;
|
||||
} GToggleConfig;
|
||||
|
||||
// This must be included after the above type definition
|
||||
#include "ginput.h"
|
||||
|
||||
// n - Millisecs between poll's
|
||||
#ifndef GINPUT_TOGGLE_POLL_PERIOD
|
||||
#define GINPUT_TOGGLE_POLL_PERIOD 200
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* External declarations. */
|
||||
/*===========================================================================*/
|
@ -18,7 +18,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
* @file ginput/ginput_mouse.h
|
||||
* @file include/ginput/mouse.h
|
||||
* @brief GINPUT GFX User Input subsystem header file for mouse and touch.
|
||||
*
|
||||
* @addtogroup GINPUT
|
||||
@ -27,25 +27,12 @@
|
||||
#ifndef _GINPUT_MOUSE_H
|
||||
#define _GINPUT_MOUSE_H
|
||||
|
||||
/**
|
||||
* @name GINPUT more complex functionality to be compiled
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Should mouse/touch functions be included.
|
||||
* @details Defaults to FALSE
|
||||
*/
|
||||
#ifndef GINPUT_NEED_MOUSE
|
||||
#define GINPUT_NEED_MOUSE FALSE
|
||||
#endif
|
||||
/** @} */
|
||||
#if GINPUT_NEED_MOUSE || defined(__DOXYGEN__)
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Type definitions */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if GINPUT_NEED_MOUSE || defined(__DOXYGEN__)
|
||||
|
||||
/* This type definition is also used by touch */
|
||||
typedef struct GEventMouse_t {
|
||||
GEventType type; // The type of this event (GEVENT_MOUSE or GEVENT_TOUCH)
|
127
include/ginput/options.h
Normal file
127
include/ginput/options.h
Normal file
@ -0,0 +1,127 @@
|
||||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file include/ginput/options.h
|
||||
* @brief GINPUT sub-system options header file.
|
||||
*
|
||||
* @addtogroup GINPUT
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _GINPUT_OPTIONS_H
|
||||
#define _GINPUT_OPTIONS_H
|
||||
|
||||
/**
|
||||
* @name GINPUT Functionality to be included
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Should mouse/touch functions be included.
|
||||
* @details Defaults to FALSE
|
||||
* @note Also add the a mouse/touch hardware driver to your makefile.
|
||||
* Eg.
|
||||
* include $(GFXLIB)/drivers/ginput/touch/MCU/ginput_lld.mk
|
||||
*/
|
||||
#ifndef GINPUT_NEED_MOUSE
|
||||
#define GINPUT_NEED_MOUSE FALSE
|
||||
#endif
|
||||
/**
|
||||
* @brief Should keyboard functions be included.
|
||||
* @details Defaults to FALSE
|
||||
* @note Also add the a keyboard hardware driver to your makefile.
|
||||
* Eg.
|
||||
* include $(GFXLIB)/drivers/ginput/keyboard/XXXX/ginput_lld.mk
|
||||
*/
|
||||
#ifndef GINPUT_NEED_KEYBOARD
|
||||
#define GINPUT_NEED_KEYBOARD FALSE
|
||||
#endif
|
||||
/**
|
||||
* @brief Should hardware toggle/switch/button functions be included.
|
||||
* @details Defaults to FALSE
|
||||
* @note Also add the a toggle hardware driver to your makefile.
|
||||
* Eg.
|
||||
* include $(GFXLIB)/drivers/ginput/toggle/Pal/ginput_lld.mk
|
||||
*/
|
||||
#ifndef GINPUT_NEED_TOGGLE
|
||||
#define GINPUT_NEED_TOGGLE FALSE
|
||||
#endif
|
||||
/**
|
||||
* @brief Should analog dial functions be included.
|
||||
* @details Defaults to FALSE
|
||||
* @note Also add the a dial hardware driver to your makefile.
|
||||
* Eg.
|
||||
* include $(GFXLIB)/drivers/ginput/dial/analog/ginput_lld.mk
|
||||
*/
|
||||
#ifndef GINPUT_NEED_DIAL
|
||||
#define GINPUT_NEED_DIAL FALSE
|
||||
#endif
|
||||
/**
|
||||
* @}
|
||||
*
|
||||
* @name GINPUT Optional Sizing Parameters
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @}
|
||||
*
|
||||
* @name GINPUT Optional Low Level Driver Defines
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Use a custom board definition for the mouse/touch driver even if a board definition exists.
|
||||
* @details Defaults to FALSE
|
||||
* @details If TRUE, add ginput_lld_mouse_board.h to your project directory and customise it.
|
||||
* @note Not all GINPUT mouse/touch low level drivers use board definition files.
|
||||
*/
|
||||
#ifndef GINPUT_MOUSE_USE_CUSTOM_BOARD
|
||||
#define GINPUT_MOUSE_USE_CUSTOM_BOARD FALSE
|
||||
#endif
|
||||
/**
|
||||
* @brief Use a custom board definition for the keyboard driver even if a board definition exists.
|
||||
* @details Defaults to FALSE
|
||||
* @details If TRUE, add ginput_lld_keyboard_board.h to your project directory and customise it.
|
||||
* @note Not all GINPUT keyboard low level drivers use board definition files.
|
||||
*/
|
||||
#ifndef GINPUT_KEYBOARD_USE_CUSTOM_BOARD
|
||||
#define GINPUT_KEYBOARD_USE_CUSTOM_BOARD FALSE
|
||||
#endif
|
||||
/**
|
||||
* @brief Use a custom board definition for the toggle driver even if a board definition exists.
|
||||
* @details Defaults to FALSE
|
||||
* @details If TRUE, add ginput_lld_toggle_board.h to your project directory and customise it.
|
||||
* @note Not all GINPUT toggle low level drivers use board definition files.
|
||||
*/
|
||||
#ifndef GINPUT_TOGGLE_USE_CUSTOM_BOARD
|
||||
#define GINPUT_TOGGLE_USE_CUSTOM_BOARD FALSE
|
||||
#endif
|
||||
/**
|
||||
* @brief Use a custom board definition for the dial driver even if a board definition exists.
|
||||
* @details Defaults to FALSE
|
||||
* @details If TRUE, add ginput_lld_dial_board.h to your project directory and customise it.
|
||||
* @note Not all GINPUT dial low level drivers use board definition files.
|
||||
*/
|
||||
#ifndef GINPUT_DIAL_USE_CUSTOM_BOARD
|
||||
#define GINPUT_DIAL_USE_CUSTOM_BOARD FALSE
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
#endif /* _GINPUT_OPTIONS_H */
|
||||
/** @} */
|
@ -18,7 +18,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
* @file ginput/ginput_toggle.h
|
||||
* @file include/ginput/toggle.h
|
||||
* @brief GINPUT GFX User Input subsystem header file.
|
||||
*
|
||||
* @addtogroup GINPUT
|
||||
@ -27,25 +27,15 @@
|
||||
#ifndef _GINPUT_TOGGLE_H
|
||||
#define _GINPUT_TOGGLE_H
|
||||
|
||||
/**
|
||||
* @name GINPUT more complex functionality to be compiled
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Should hardware toggle/switch/button (pio) functions be included.
|
||||
* @details Defaults to FALSE
|
||||
*/
|
||||
#ifndef GINPUT_NEED_TOGGLE
|
||||
#define GINPUT_NEED_TOGGLE FALSE
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
#if GINPUT_NEED_TOGGLE || defined(__DOXYGEN__)
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Low Level Driver details and error checks. */
|
||||
/*===========================================================================*/
|
||||
|
||||
// Get the hardware definitions - Number of instances etc.
|
||||
#include "ginput_lld_toggle_config.h"
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Type definitions */
|
||||
/*===========================================================================*/
|
||||
@ -53,9 +43,6 @@
|
||||
// Event types for various ginput sources
|
||||
#define GEVENT_TOGGLE (GEVENT_GINPUT_FIRST+3)
|
||||
|
||||
// Get the hardware definitions - Number of instances etc.
|
||||
#include "ginput_lld_toggle_config.h"
|
||||
|
||||
typedef struct GEventToggle_t {
|
||||
GEventType type; // The type of this event (GEVENT_TOGGLE)
|
||||
uint16_t instance; // The toggle instance
|
@ -1,84 +0,0 @@
|
||||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file include/graph.h
|
||||
* @brief GRAPH module header file.
|
||||
*
|
||||
* @addtogroup GRAPH
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef GRAPH_H
|
||||
#define GRAPH_H
|
||||
|
||||
#ifndef GFX_USE_GRAPH
|
||||
#define GFX_USE_GRAPH FALSE
|
||||
#endif
|
||||
|
||||
#if GFX_USE_GRAPH || defined(__DOXYGEN__)
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Type definitions */
|
||||
/*===========================================================================*/
|
||||
|
||||
typedef struct _Graph {
|
||||
coord_t origin_x;
|
||||
coord_t origin_y;
|
||||
coord_t xmin;
|
||||
coord_t xmax;
|
||||
coord_t ymin;
|
||||
coord_t ymax;
|
||||
uint16_t grid_size;
|
||||
uint16_t dot_space;
|
||||
bool_t full_grid;
|
||||
bool_t arrows;
|
||||
color_t axis_color;
|
||||
color_t grid_color;
|
||||
|
||||
/* do never modify values below this line manually */
|
||||
coord_t x0;
|
||||
coord_t x1;
|
||||
coord_t y0;
|
||||
coord_t y1;
|
||||
} Graph;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Type definitions */
|
||||
/*===========================================================================*/
|
||||
|
||||
void graphDrawSystem(Graph *g);
|
||||
void graphDrawDot(Graph *g, coord_t x, coord_t y, uint16_t radius, color_t color);
|
||||
void graphDrawDots(Graph *g, int coord[][2], uint16_t entries, uint16_t radius, uint16_t color);
|
||||
void graphDrawNet(Graph *g, int coord[][2], uint16_t entries, uint16_t radius, uint16_t lineColor, uint16_t dotColor);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GFX_USE_GRAPH */
|
||||
|
||||
#endif
|
||||
/** @} */
|
||||
|
@ -18,7 +18,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
* @file gtimer.h
|
||||
* @file include/gtimer/gtimer.h
|
||||
* @brief GTIMER GFX User Timer subsystem header file.
|
||||
*
|
||||
* @addtogroup GTIMER
|
||||
@ -27,46 +27,27 @@
|
||||
#ifndef _GTIMER_H
|
||||
#define _GTIMER_H
|
||||
|
||||
#ifndef GFX_USE_GTIMER
|
||||
#define GFX_USE_GTIMER FALSE
|
||||
#endif
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GTIMER || defined(__DOXYGEN__)
|
||||
|
||||
/**
|
||||
* @name GTIMER macros and more complex functionality to be compiled
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Data part of a static GTimer initializer.
|
||||
*/
|
||||
#define _GTIMER_DATA() {0,0,0,0,0,0,0}
|
||||
/**
|
||||
* @brief Static GTimer initializer.
|
||||
*/
|
||||
#define GTIMER_DECL(name) GTimer name = _GTIMER_DATA()
|
||||
/**
|
||||
* @brief Defines the size of the timer threads work area (stack+structures).
|
||||
* @details Defaults to 512 bytes
|
||||
*/
|
||||
#ifndef GTIMER_THREAD_STACK_SIZE
|
||||
#define GTIMER_THREAD_STACK_SIZE 512
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Low Level Driver details and error checks. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if !CH_USE_MUTEXES || !CH_USE_SEMAPHORES
|
||||
#error "GTIMER: CH_USE_MUTEXES and CH_USE_SEMAPHORES must be defined in chconf.h"
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Type definitions */
|
||||
/*===========================================================================*/
|
||||
|
||||
// A callback function (executed in a thread context)
|
||||
/**
|
||||
* @brief Data part of a static GTimer initializer.
|
||||
*/
|
||||
#define _GTIMER_DATA() {0,0,0,0,0,0,0}
|
||||
|
||||
/**
|
||||
* @brief Static GTimer initializer.
|
||||
*/
|
||||
#define GTIMER_DECL(name) GTimer name = _GTIMER_DATA()
|
||||
|
||||
/**
|
||||
* @brief A callback function (executed in a thread context).
|
||||
*/
|
||||
typedef void (*GTimerFunction)(void *param);
|
||||
|
||||
/**
|
@ -18,42 +18,35 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
* !!! IMPORTANT !!!
|
||||
/**
|
||||
* @file include/gtimer/options.h
|
||||
* @brief GTIMER sub-system options header file.
|
||||
*
|
||||
* This example dosen't compile yet, there's a problem in the console source.
|
||||
* This issue will be fixed soon.
|
||||
* @addtogroup GTIMER
|
||||
* @{
|
||||
*/
|
||||
|
||||
/*
|
||||
* Please add the following to your halconf.h
|
||||
*
|
||||
* #define GFX_USE_CONSOLE TRUE
|
||||
* #define GDISP_NEED_SCROLL TRUE
|
||||
#ifndef _GTIMER_OPTIONS_H
|
||||
#define _GTIMER_OPTIONS_H
|
||||
|
||||
/**
|
||||
* @name GTIMER Functionality to be included
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @}
|
||||
*
|
||||
* @name GTIMER Optional Sizing Parameters
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Defines the size of the timer threads work area (stack+structures).
|
||||
* @details Defaults to 512 bytes
|
||||
*/
|
||||
#ifndef GTIMER_THREAD_WORKAREA_SIZE
|
||||
#define GTIMER_THREAD_WORKAREA_SIZE 512
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
#include "chprintf.h"
|
||||
#include "console.h"
|
||||
|
||||
static GConsole CON1;
|
||||
|
||||
int main(void) {
|
||||
halInit();
|
||||
chSysInit();
|
||||
|
||||
gdispInit();
|
||||
gdispClear(Lime);
|
||||
|
||||
gfxConsoleInit(&CON1, 0, 0, gdispGetWidth(), gdispGetHeight(), &fontLarger, Black, White);
|
||||
chprintf((BaseSequentialStream *)&CON1, "Hello the time is %d\nGoodbye.", chTimeNow());
|
||||
|
||||
|
||||
while (TRUE) {
|
||||
|
||||
chThdSleepMilliseconds(100);
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* _GTIMER_OPTIONS_H */
|
||||
/** @} */
|
@ -18,7 +18,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
* @file gwin/gwin_button.h
|
||||
* @file include/gwin/button.h
|
||||
* @brief GWIN Graphic window subsystem header file.
|
||||
*
|
||||
* @addtogroup GWIN
|
||||
@ -27,20 +27,6 @@
|
||||
#ifndef _GWIN_BUTTON_H
|
||||
#define _GWIN_BUTTON_H
|
||||
|
||||
/**
|
||||
* @name GWIN more complex functionality to be compiled
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Should button functions be included.
|
||||
* @details Defaults to FALSE
|
||||
*/
|
||||
#ifndef GWIN_NEED_BUTTON
|
||||
#define GWIN_NEED_BUTTON FALSE
|
||||
#endif
|
||||
|
||||
/** @} */
|
||||
|
||||
#if GWIN_NEED_BUTTON || defined(__DOXYGEN__)
|
||||
|
||||
/*===========================================================================*/
|
||||
@ -50,24 +36,6 @@
|
||||
#define GW_BUTTON 0x0002
|
||||
#define GEVENT_GWIN_BUTTON (GEVENT_GWIN_FIRST+0)
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver pre-compile time settings. */
|
||||
/*===========================================================================*/
|
||||
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Low Level Driver details and error checks. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if !GDISP_NEED_TEXT
|
||||
#error "GWIN: Text support (GDISP_NEED_TEXT) is required if GWIN_NEED_BUTTON is defined."
|
||||
#endif
|
||||
|
||||
#if !defined(GFX_USE_GEVENT) || !GFX_USE_GEVENT
|
||||
#error "GWIN Buttons require GFX_USE_GEVENT"
|
||||
#endif
|
||||
#include "gevent.h"
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Type definitions */
|
||||
/*===========================================================================*/
|
@ -18,7 +18,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
* @file gwin/gwin_console.h
|
||||
* @file include/gwin/console.h
|
||||
* @brief GWIN Graphic window subsystem header file.
|
||||
*
|
||||
* @addtogroup GWIN
|
||||
@ -27,19 +27,6 @@
|
||||
#ifndef _GWIN_CONSOLE_H
|
||||
#define _GWIN_CONSOLE_H
|
||||
|
||||
/**
|
||||
* @name GWIN more complex functionality to be compiled
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Should console functions be included.
|
||||
* @details Defaults to FALSE
|
||||
*/
|
||||
#ifndef GWIN_NEED_CONSOLE
|
||||
#define GWIN_NEED_CONSOLE FALSE
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
#if GWIN_NEED_CONSOLE || defined(__DOXYGEN__)
|
||||
|
||||
/*===========================================================================*/
|
||||
@ -48,18 +35,6 @@
|
||||
|
||||
#define GW_CONSOLE 0x0001
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver pre-compile time settings. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Low Level Driver details and error checks. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if GWIN_NEED_CONSOLE && !GDISP_NEED_TEXT
|
||||
#error "GWIN: Text support (GDISP_NEED_TEXT) is required if GWIN_NEED_CONSOLE is defined."
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Type definitions */
|
||||
/*===========================================================================*/
|
156
include/gwin/graph.h
Normal file
156
include/gwin/graph.h
Normal file
@ -0,0 +1,156 @@
|
||||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file include/gwin/graph.h
|
||||
* @brief GWIN GRAPH module header file.
|
||||
*
|
||||
* @addtogroup GWIN_GRAPH
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _GWIN_GRAPH_H
|
||||
#define _GWIN_GRAPH_H
|
||||
|
||||
#if GWIN_NEED_GRAPH || defined(__DOXYGEN__)
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver constants. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#define GW_GRAPH 0x0003
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Type definitions */
|
||||
/*===========================================================================*/
|
||||
|
||||
typedef struct GGraphPoint_t {
|
||||
coord_t x, y;
|
||||
} GGraphPoint;
|
||||
|
||||
typedef enum GGraphPointType_e {
|
||||
GGRAPH_POINT_NONE, GGRAPH_POINT_DOT, GGRAPH_POINT_SQUARE, GGRAPH_POINT_CIRCLE
|
||||
} GGraphPointType;
|
||||
|
||||
typedef struct GGraphPointStyle_t {
|
||||
GGraphPointType type;
|
||||
coord_t size;
|
||||
color_t color;
|
||||
} GGraphPointStyle;
|
||||
|
||||
typedef enum GGraphLineType_e {
|
||||
GGRAPH_LINE_NONE, GGRAPH_LINE_SOLID, GGRAPH_LINE_DOT, GGRAPH_LINE_DASH
|
||||
} GGraphLineType;
|
||||
|
||||
typedef struct GGraphLineStyle_t {
|
||||
GGraphLineType type;
|
||||
coord_t size;
|
||||
color_t color;
|
||||
} GGraphLineStyle;
|
||||
|
||||
typedef struct GGraphGridStyle_t {
|
||||
GGraphLineType type;
|
||||
coord_t size;
|
||||
color_t color;
|
||||
coord_t spacing;
|
||||
} GGraphGridStyle;
|
||||
|
||||
typedef struct GGraphStyle_t {
|
||||
GGraphPointStyle point;
|
||||
GGraphLineStyle line;
|
||||
GGraphLineStyle xaxis;
|
||||
GGraphLineStyle yaxis;
|
||||
GGraphGridStyle xgrid;
|
||||
GGraphGridStyle ygrid;
|
||||
uint16_t flags;
|
||||
#define GWIN_GRAPH_STYLE_XAXIS_ARROWS 0x0001
|
||||
#define GWIN_GRAPH_STYLE_YAXIS_ARROWS 0x0002
|
||||
} GGraphStyle;
|
||||
|
||||
// A graph window
|
||||
typedef struct GGraphObject_t {
|
||||
GWindowObject gwin;
|
||||
GGraphStyle style;
|
||||
coord_t xorigin, yorigin;
|
||||
coord_t lastx, lasty;
|
||||
} GGraphObject;
|
||||
|
||||
/*===========================================================================*/
|
||||
/* External declarations. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
GHandle gwinCreateGraph(GGraphObject *gg, coord_t x, coord_t y, coord_t width, coord_t height);
|
||||
void gwinGraphSetStyle(GHandle gh, const GGraphStyle *pstyle);
|
||||
void gwinGraphSetOrigin(GHandle gh, coord_t x, coord_t y);
|
||||
void gwinGraphDrawAxis(GHandle gh);
|
||||
void gwinGraphStartSet(GHandle gh);
|
||||
void gwinGraphDrawPoint(GHandle gh, coord_t x, coord_t y);
|
||||
void gwinGraphDrawPoints(GHandle gh, const GGraphPoint *points, unsigned count);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Type definitions */
|
||||
/*===========================================================================*/
|
||||
|
||||
typedef struct _Graph {
|
||||
coord_t origin_x;
|
||||
coord_t origin_y;
|
||||
coord_t xmin;
|
||||
coord_t xmax;
|
||||
coord_t ymin;
|
||||
coord_t ymax;
|
||||
uint16_t grid_size;
|
||||
uint16_t dot_space;
|
||||
bool_t full_grid;
|
||||
bool_t arrows;
|
||||
color_t axis_color;
|
||||
color_t grid_color;
|
||||
|
||||
/* do never modify values below this line manually */
|
||||
coord_t x0;
|
||||
coord_t x1;
|
||||
coord_t y0;
|
||||
coord_t y1;
|
||||
} Graph;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Type definitions */
|
||||
/*===========================================================================*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GWIN_NEED_GRAPH */
|
||||
|
||||
#endif /* _GWIN_GRAPH_H */
|
||||
/** @} */
|
||||
|
@ -18,7 +18,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
* @file gwin.h
|
||||
* @file include/gwin/gwin.h
|
||||
* @brief GWIN Graphic window subsystem header file.
|
||||
*
|
||||
* @addtogroup GWIN
|
||||
@ -27,39 +27,10 @@
|
||||
#ifndef _GWIN_H
|
||||
#define _GWIN_H
|
||||
|
||||
#ifndef GFX_USE_GWIN
|
||||
#define GFX_USE_GWIN FALSE
|
||||
#endif
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GWIN || defined(__DOXYGEN__)
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver constants. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver pre-compile time settings. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @name GWIN more complex functionality to be compiled
|
||||
* @{
|
||||
*/
|
||||
/** @} */
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Low Level Driver details and error checks. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if !defined(GFX_USE_GDISP) || !GFX_USE_GDISP
|
||||
#error "GWIN: GFX_USE_GDISP must also be defined"
|
||||
#endif
|
||||
#include "gdisp.h"
|
||||
|
||||
#if !GDISP_NEED_CLIP
|
||||
#warning "GWIN: Drawing can occur outside the defined window as GDISP_NEED_CLIP is FALSE"
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Type definitions */
|
||||
/*===========================================================================*/
|
||||
@ -145,7 +116,7 @@ void gwinDestroyWindow(GHandle gh);
|
||||
|
||||
/* Set up for text */
|
||||
#if GDISP_NEED_TEXT
|
||||
void gwinSetFont(GHandle gh, font_t font);
|
||||
void gwinSetFont(GHandle gh, font_t font);
|
||||
#endif
|
||||
|
||||
/* Drawing Functions */
|
||||
@ -194,8 +165,9 @@ void gwinBlitArea(GHandle gh, coord_t x, coord_t y, coord_t cx, coord_t cy, coor
|
||||
#endif
|
||||
|
||||
/* Include extra window types */
|
||||
#include "gwin/gwin_console.h"
|
||||
#include "gwin/gwin_button.h"
|
||||
#include "gwin/console.h"
|
||||
#include "gwin/button.h"
|
||||
#include "gwin/graph.h"
|
||||
|
||||
#endif /* GFX_USE_GWIN */
|
||||
|
@ -18,7 +18,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
* @file gwin_internal.h
|
||||
* @file include/gwin/internal.h
|
||||
* @brief GWIN Graphic window subsystem header file.
|
||||
*
|
||||
* @addtogroup GWIN
|
||||
@ -34,8 +34,8 @@
|
||||
/*===========================================================================*/
|
||||
|
||||
#define GWIN_FLG_DYNAMIC 0x0001
|
||||
#define GWIN_FIRST_CONTROL_FLAG 0x0002
|
||||
#define GBTN_FLG_ALLOCTXT (GWIN_FIRST_CONTROL_FLAG<<0)
|
||||
#define GBTN_FLG_ALLOCTXT 0x0002
|
||||
#define GWIN_FIRST_CONTROL_FLAG 0x0004
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
71
include/gwin/options.h
Normal file
71
include/gwin/options.h
Normal file
@ -0,0 +1,71 @@
|
||||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file include/gwin_options.h
|
||||
* @brief GWIN sub-system options header file.
|
||||
*
|
||||
* @addtogroup GWIN
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _GWIN_OPTIONS_H
|
||||
#define _GWIN_OPTIONS_H
|
||||
|
||||
/**
|
||||
* @name GWIN Functionality to be included
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Should button functions be included.
|
||||
* @details Defaults to FALSE
|
||||
*/
|
||||
#ifndef GWIN_NEED_BUTTON
|
||||
#define GWIN_NEED_BUTTON FALSE
|
||||
#endif
|
||||
/**
|
||||
* @brief Should console functions be included.
|
||||
* @details Defaults to FALSE
|
||||
* @note To use chprintf() for printing in a console window you need to
|
||||
* include in your application source file...
|
||||
* #include "chprintf.h"
|
||||
* Also in your makefile, as part of your list of C source files, include
|
||||
* ${CHIBIOS}/os/various/chprintf.c
|
||||
*/
|
||||
#ifndef GWIN_NEED_CONSOLE
|
||||
#define GWIN_NEED_CONSOLE FALSE
|
||||
#endif
|
||||
/**
|
||||
* @brief Should graph functions be included.
|
||||
* @details Defaults to FALSE
|
||||
*/
|
||||
#ifndef GWIN_NEED_GRAPH
|
||||
#define GWIN_NEED_GRAPH FALSE
|
||||
#endif
|
||||
/**
|
||||
* @}
|
||||
*
|
||||
* @name GWIN Optional Sizing Parameters
|
||||
* @{
|
||||
*/
|
||||
/** @} */
|
||||
|
||||
#endif /* _GWIN_OPTIONS_H */
|
||||
/** @} */
|
@ -1,130 +0,0 @@
|
||||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file include/lld/touchscreen/touchscreen_lld.h
|
||||
* @brief TOUCHSCREEN Driver subsystem low level driver header.
|
||||
*
|
||||
* @addtogroup TOUCHSCREEN
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef TOUCHSCREEN_LLD_H
|
||||
#define TOUCHSCREEN_LLD_H
|
||||
|
||||
#if GFX_USE_TOUCHSCREEN || defined(__DOXYGEN__)
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Include the low level driver configuration information */
|
||||
/*===========================================================================*/
|
||||
|
||||
#include "touchscreen_lld_config.h"
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Error checks. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#ifndef TOUCHSCREEN_NEED_MULTITHREAD
|
||||
#define TOUCHSCREEN_NEED_MULTITHREAD FALSE
|
||||
#endif
|
||||
|
||||
#ifndef TOUCHSCREEN_XY_INVERTED
|
||||
#define TOUCHSCREEN_XY_INVERTED FALSE
|
||||
#endif
|
||||
|
||||
#ifndef TOUCHSCREEN_HAS_PRESSED
|
||||
#define TOUCHSCREEN_HAS_PRESSED FALSE
|
||||
#endif
|
||||
|
||||
#ifndef TOUCHSCREEN_HAS_PRESSURE
|
||||
#define TOUCHSCREEN_HAS_PRESSURE FALSE
|
||||
#endif
|
||||
|
||||
#ifndef TOUCHSCREEN_SPI_PROLOGUE
|
||||
#define TOUCHSCREEN_SPI_PROLOGUE()
|
||||
#endif
|
||||
|
||||
#ifndef TOUCHSCREEN_SPI_EPILOGUE
|
||||
#define TOUCHSCREEN_SPI_EPILOGUE()
|
||||
#endif
|
||||
|
||||
#ifndef TOUCHSCREEN_STORE_CALIBRATION
|
||||
#define TOUCHSCREEN_STORE_CALIBRATION FALSE
|
||||
#endif
|
||||
|
||||
#ifndef TOUCHSCREEN_VERIFY_CALIBRATION
|
||||
#define TOUCHSCREEN_VERIFY_CALIBRATION FALSE
|
||||
#endif
|
||||
|
||||
#ifndef TOUCHSCREEN_CONVERSIONS
|
||||
#define TOUCHSCREEN_CONVERSIONS 3
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver types. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Structure representing a touchscreen driver. Hardware dependant.
|
||||
*/
|
||||
typedef struct TouchscreenDriver TouchscreenDriver;
|
||||
|
||||
// Forward declaration
|
||||
struct cal_t;
|
||||
|
||||
/*===========================================================================*/
|
||||
/* External declarations. */
|
||||
/*===========================================================================*/
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Core functions */
|
||||
void ts_lld_init(const TouchscreenDriver *ts);
|
||||
|
||||
uint16_t ts_lld_read_value(uint8_t cmd);
|
||||
uint16_t ts_lld_read_x(void);
|
||||
uint16_t ts_lld_read_y(void);
|
||||
|
||||
#if TOUCHSCREEN_HAS_PRESSED
|
||||
uint8_t ts_lld_pressed(void);
|
||||
#endif
|
||||
|
||||
#if TOUCHSCREEN_HAS_PRESSURE
|
||||
uint16_t ts_lld_read_z(void);
|
||||
#endif
|
||||
|
||||
#if TOUCHSCREEN_STORE_CALIBRATION
|
||||
// These may be defined by the low level driver or by the application
|
||||
void ts_store_calibration_lld(struct cal_t *cal);
|
||||
struct cal_t *ts_restore_calibration_lld(void);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GFX_USE_TOUCHSCREEN */
|
||||
|
||||
#endif /* _TOUCHSCREEN_LLD_H */
|
||||
/** @} */
|
||||
|
@ -1,93 +0,0 @@
|
||||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file include/touchscreen.h
|
||||
* @brief TOUCHSCREEN Touchscreen driver subsystem header file.
|
||||
*
|
||||
* @addtogroup TOUCHSCREEN
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef TOUCHSCREEN_H
|
||||
#define TOUCHSCREEN_H
|
||||
|
||||
#if GFX_USE_TOUCHSCREEN || defined(__DOXYGEN__)
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver constants. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Low Level Driver details and error checks. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/* Include the low level driver information */
|
||||
#include "lld/touchscreen/touchscreen_lld.h"
|
||||
|
||||
/* For definitions of coord_t, we require gdisp.h */
|
||||
#include "gdisp.h"
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Type definitions */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Struct used for calibration
|
||||
*/
|
||||
typedef struct cal_t {
|
||||
float ax;
|
||||
float bx;
|
||||
float cx;
|
||||
float ay;
|
||||
float by;
|
||||
float cy;
|
||||
} cal_t;
|
||||
|
||||
/*===========================================================================*/
|
||||
/* External declarations. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void tsInit(const TouchscreenDriver *ts);
|
||||
coord_t tsReadX(void);
|
||||
coord_t tsReadY(void);
|
||||
void tsCalibrate(void);
|
||||
|
||||
#if TOUCHSCREEN_HAS_PRESSED
|
||||
bool_t tsPressed(void);
|
||||
#endif
|
||||
|
||||
#if TOUCHSCREEN_HAS_PRESSURE
|
||||
uint16_t tsReadZ(void);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GFX_USE_TOUCHSCREEN */
|
||||
|
||||
#endif /* TOUCHSCREEN_H */
|
||||
/** @} */
|
||||
|
22
releases.txt
22
releases.txt
@ -6,18 +6,22 @@ current stable: 1.4
|
||||
|
||||
|
||||
*** changes after 1.4 ***
|
||||
FEATURE: Added three point calibration
|
||||
FIX: Touchpad renamed into Touchscreen
|
||||
FIX: tsIRQ() renamed into tsPressed()
|
||||
FEATURE: Touchscreen support added to gdisp Win32 driver
|
||||
FIX: gdisp Win32 driver fixes
|
||||
DEPRECATE: console deprecated - replaced with gwin functionality
|
||||
FEATURE: ILI9320 GDISP driver
|
||||
FEATURE: gdisp Win32 driver - full orientation support
|
||||
FEATURE: GEVENT - for passing event structures from Sources to Listeners
|
||||
FEATURE: GTIMER - thread context based once-off and periodic timers.
|
||||
FEATURE: GINPUT - extensible, multiple device-type, input sub-system.
|
||||
|
||||
FEATURE: GWIN - full button, console and graph support
|
||||
FEATURE: Numerous touch calibration improvements
|
||||
FEATURE: Win32 driver - now support gdisp & ginput mouse/touch/toggle
|
||||
FEATURE: Win32 driver - full gdisp orientation support
|
||||
FEATURE: ILI9320 GDISP driver
|
||||
FEATURE: Nokia6610 GDISP driver split in to GE8 and GE12 variants
|
||||
FEATURE: Many GDISP drivers changed to use a board interface definition
|
||||
FEATURE: GFX source restructure with new gfx.h include file.
|
||||
DEPRECATE: console deprecated - replaced with gwin functionality
|
||||
DEPRECATE: graph deprecated - replaced with gwin functionality
|
||||
DEPRECATE: touchscreen deprecated - replaced with ginput functionality
|
||||
FEATURE: Numerous documentation improvements
|
||||
FEATURE: Added a number of module demo and test programs
|
||||
|
||||
*** changes after 1.3 ***
|
||||
FIX: Nokia 6610 fix
|
||||
|
@ -23,11 +23,9 @@
|
||||
*/
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GDISP || defined(__DOXYGEN__)
|
||||
|
||||
#if GDISP_NEED_TEXT
|
||||
#if (GFX_USE_GDISP && GDISP_NEED_TEXT) || defined(__DOXYGEN__)
|
||||
|
||||
#include "gdisp/fonts.h"
|
||||
|
||||
@ -651,7 +649,4 @@
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif /* GDISP_NEED_TEXT */
|
||||
|
||||
#endif /* GFX_USE_GDISP */
|
||||
|
||||
#endif /* GFX_USE_GDISP && GDISP_NEED_TEXT */
|
@ -27,7 +27,7 @@
|
||||
*/
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GDISP || defined(__DOXYGEN__)
|
||||
|
||||
@ -731,7 +731,7 @@ void gdispFillRoundedBox(coord_t x, coord_t y, coord_t cx, coord_t cy, coord_t r
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (GDISP_NEED_QUERY && (GDISP_NEED_MULTITHREAD || GDISP_NEED_ASYNC)) || defined(__DOXYGEN__)
|
||||
#if (GDISP_NEED_MULTITHREAD || GDISP_NEED_ASYNC) || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Query a property of the display.
|
||||
* @pre The GDISP unit must have been initialised using @p gdispInit().
|
||||
@ -1266,4 +1266,3 @@ void gdispDrawBox(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color) {
|
||||
|
||||
#endif /* GFX_USE_GDISP */
|
||||
/** @} */
|
||||
|
2
src/gdisp/gdisp.mk
Normal file
2
src/gdisp/gdisp.mk
Normal file
@ -0,0 +1,2 @@
|
||||
GFXSRC += $(GFXLIB)/src/gdisp/gdisp.c \
|
||||
$(GFXLIB)/src/gdisp/fonts.c
|
@ -27,7 +27,7 @@
|
||||
*/
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gevent.h"
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GEVENT || defined(__DOXYGEN__)
|
||||
|
||||
@ -41,14 +41,14 @@
|
||||
static MUTEX_DECL(geventMutex);
|
||||
|
||||
/* Our table of listener/source pairs */
|
||||
static GSourceListener Assignments[MAX_SOURCE_LISTENERS];
|
||||
static GSourceListener Assignments[GEVENT_MAX_SOURCE_LISTENERS];
|
||||
|
||||
/* Loop through the assignment table deleting this listener/source pair. */
|
||||
/* Null is treated as a wildcard. */
|
||||
static void deleteAssignments(GListener *pl, GSourceHandle gsh) {
|
||||
GSourceListener *psl;
|
||||
|
||||
for(psl = Assignments; psl < Assignments+MAX_SOURCE_LISTENERS; psl++) {
|
||||
for(psl = Assignments; psl < Assignments+GEVENT_MAX_SOURCE_LISTENERS; psl++) {
|
||||
if ((!pl || psl->pListener == pl) && (!gsh || psl->pSource == gsh)) {
|
||||
if (chSemGetCounterI(&psl->pListener->waitqueue) < 0) {
|
||||
chBSemWait(&psl->pListener->eventlock); // Obtain the buffer lock
|
||||
@ -101,7 +101,7 @@ bool_t geventAttachSource(GListener *pl, GSourceHandle gsh, unsigned flags) {
|
||||
|
||||
// Check if this pair is already in the table (scan for a free slot at the same time)
|
||||
pslfree = 0;
|
||||
for(psl = Assignments; psl < Assignments+MAX_SOURCE_LISTENERS; psl++) {
|
||||
for(psl = Assignments; psl < Assignments+GEVENT_MAX_SOURCE_LISTENERS; psl++) {
|
||||
|
||||
if (pl == psl->pListener && gsh == psl->pSource) {
|
||||
// Just update the flags
|
||||
@ -228,7 +228,7 @@ GSourceListener *geventGetSourceListener(GSourceHandle gsh, GSourceListener *las
|
||||
chBSemSignal(&lastlr->pListener->eventlock);
|
||||
|
||||
// Loop through the table looking for attachments to this source
|
||||
for(psl = lastlr ? (lastlr+1) : Assignments; psl < Assignments+MAX_SOURCE_LISTENERS; psl++) {
|
||||
for(psl = lastlr ? (lastlr+1) : Assignments; psl < Assignments+GEVENT_MAX_SOURCE_LISTENERS; psl++) {
|
||||
if (gsh == psl->pSource) {
|
||||
chBSemWait(&psl->pListener->eventlock); // Obtain a lock on the listener event buffer
|
||||
chMtxUnlock();
|
1
src/gevent/gevent.mk
Normal file
1
src/gevent/gevent.mk
Normal file
@ -0,0 +1 @@
|
||||
GFXSRC += $(GFXLIB)/src/gevent/gevent.c
|
@ -27,9 +27,9 @@
|
||||
*/
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "ginput.h"
|
||||
#include "gfx.h"
|
||||
|
||||
#if GINPUT_NEED_DIAL || defined(__DOXYGEN__)
|
||||
#if (GFX_USE_GINPUT && GINPUT_NEED_DIAL) || defined(__DOXYGEN__)
|
||||
#error "GINPUT: GINPUT_NEED_DIAL - Not Implemented Yet"
|
||||
#endif /* GINPUT_NEED_DIAL */
|
||||
#endif /* GFX_USE_GINPUT && GINPUT_NEED_DIAL */
|
||||
/** @} */
|
||||
|
@ -27,9 +27,9 @@
|
||||
*/
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "ginput.h"
|
||||
#include "gfx.h"
|
||||
|
||||
#if GINPUT_NEED_KEYBOARD || defined(__DOXYGEN__)
|
||||
#if (GFX_USE_GINPUT && GINPUT_NEED_KEYBOARD) || defined(__DOXYGEN__)
|
||||
#error "GINPUT: GINPUT_NEED_KEYBOARD - Not Implemented Yet"
|
||||
#endif /* GINPUT_NEED_KEYBOARD */
|
||||
#endif /* GFX_USE_GINPUT && GINPUT_NEED_KEYBOARD */
|
||||
/** @} */
|
||||
|
@ -27,12 +27,11 @@
|
||||
*/
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gtimer.h"
|
||||
#include "ginput.h"
|
||||
#include "gfx.h"
|
||||
|
||||
#if GINPUT_NEED_MOUSE || defined(__DOXYGEN__)
|
||||
#if (GFX_USE_GINPUT && GINPUT_NEED_MOUSE) || defined(__DOXYGEN__)
|
||||
|
||||
#include "lld/ginput/mouse.h"
|
||||
#include "ginput/lld/mouse.h"
|
||||
|
||||
#if GINPUT_MOUSE_NEED_CALIBRATION
|
||||
#if !defined(GFX_USE_GDISP) || !GFX_USE_GDISP
|
||||
@ -582,5 +581,5 @@ void ginputMouseWakeupI(void) {
|
||||
gtimerJabI(&MouseTimer);
|
||||
}
|
||||
|
||||
#endif /* GINPUT_NEED_MOUSE */
|
||||
#endif /* GFX_USE_GINPUT && GINPUT_NEED_MOUSE */
|
||||
/** @} */
|
||||
|
@ -27,12 +27,11 @@
|
||||
*/
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gtimer.h"
|
||||
#include "ginput.h"
|
||||
#include "gfx.h"
|
||||
|
||||
#if GINPUT_NEED_TOGGLE || defined(__DOXYGEN__)
|
||||
#if (GFX_USE_GINPUT && GINPUT_NEED_TOGGLE) || defined(__DOXYGEN__)
|
||||
|
||||
#include "lld/ginput/toggle.h"
|
||||
#include "ginput/lld/toggle.h"
|
||||
|
||||
#define GINPUT_TOGGLE_ISON 0x01
|
||||
#define GINPUT_TOGGLE_INVERT 0x02
|
||||
@ -163,5 +162,5 @@ void ginputToggleWakeupI(void) {
|
||||
gtimerJabI(&ToggleTimer);
|
||||
}
|
||||
|
||||
#endif /* GINPUT_NEED_TOGGLE */
|
||||
#endif /* GFX_USE_GINPUT && GINPUT_NEED_TOGGLE */
|
||||
/** @} */
|
||||
|
216
src/graph.c
216
src/graph.c
@ -1,216 +0,0 @@
|
||||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file src/graph.c
|
||||
* @brief GRAPH module code.
|
||||
*
|
||||
* @addtogroup GRAPH
|
||||
* @{
|
||||
*/
|
||||
#include <stdlib.h>
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
#include "graph.h"
|
||||
|
||||
#if GFX_USE_GRAPH || defined(__DOXYGEN__)
|
||||
|
||||
static void _horizontalDotLine(coord_t x0, coord_t y0, coord_t x1, uint16_t space, color_t color) {
|
||||
uint16_t offset = x0;
|
||||
uint16_t count = ((x1 - x0) / space);
|
||||
|
||||
do {
|
||||
gdispDrawPixel(offset, y0, color);
|
||||
offset += space;
|
||||
} while(count--);
|
||||
}
|
||||
|
||||
static void _verticalDotLine(coord_t x0, coord_t y0, coord_t y1, uint16_t space, color_t color) {
|
||||
uint16_t offset = y0;
|
||||
uint16_t count = ((y1 - y0) / space);
|
||||
|
||||
do {
|
||||
gdispDrawPixel(x0, offset, color);
|
||||
offset += space;
|
||||
} while(count--);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draws a graph system
|
||||
* @details Draws a graph system with two axis, X and Y.
|
||||
* Different optinal parameters like grid size, grid color,
|
||||
* arrow color (if any) etc. are defined in the struct.
|
||||
*
|
||||
* @param[in] g A pointer to a Graph struct
|
||||
*
|
||||
* @init
|
||||
*/
|
||||
void graphDrawSystem(Graph *g) {
|
||||
uint16_t i;
|
||||
|
||||
g->x0 = g->origin_x - abs(g->xmin);
|
||||
g->x1 = g->origin_x + abs(g->xmax);
|
||||
g->y0 = g->origin_y + abs(g->ymin);
|
||||
g->y1 = g->origin_y - abs(g->ymax);
|
||||
|
||||
/* X - Axis */
|
||||
if(g->full_grid) {
|
||||
for(i = 1; i <= ((g->origin_y - g->y1) / g->grid_size); i++) {
|
||||
_horizontalDotLine(g->x0, g->origin_y - g->grid_size * i, g->x1, g->dot_space, g->grid_color);
|
||||
}
|
||||
for(i = 1; i <= ((g->y0 - g->origin_y) / g->grid_size); i++) {
|
||||
_horizontalDotLine(g->x0, g->origin_y + g->grid_size * i, g->x1, g->dot_space, g->grid_color);
|
||||
}
|
||||
}
|
||||
gdispDrawLine(g->x0, g->origin_y, g->x1, g->origin_y, g->axis_color);
|
||||
if(g->arrows) {
|
||||
gdispDrawLine(g->x1, g->origin_y, g->x1-5, g->origin_y+5, g->axis_color);
|
||||
gdispDrawLine(g->x1, g->origin_y, g->x1-5, g->origin_y-5, g->axis_color);
|
||||
}
|
||||
|
||||
/* Y - Axis */
|
||||
if(g->full_grid) {
|
||||
for(i = 1; i <= ((g->origin_x - g->x0) / g->grid_size); i++) {
|
||||
_verticalDotLine(g->origin_x - g->grid_size * i, g->y1, g->y0, g->dot_space, g->grid_color);
|
||||
}
|
||||
for(i = 1; i <= ((g->x1 - g->origin_x) / g->grid_size); i++) {
|
||||
_verticalDotLine(g->origin_x + g->grid_size * i, g->y1, g->y0, g->dot_space, g->grid_color);
|
||||
}
|
||||
}
|
||||
gdispDrawLine(g->origin_x, g->y0, g->origin_x, g->y1, g->axis_color);
|
||||
if(g->arrows) {
|
||||
gdispDrawLine(g->origin_x, g->y1, g->origin_x-5, g->y1+5, g->axis_color);
|
||||
gdispDrawLine(g->origin_x, g->y1, g->origin_x+5, g->y1+5, g->axis_color);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Checks if x and y are inside the graph area
|
||||
*
|
||||
* @param[in] g The pointer to the graph
|
||||
* @param[in] x,y The coordinates to be checked
|
||||
*
|
||||
* @return 1 if outside the graph area, 0 otherwise
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static bool_t _boundaryCheck(Graph *g, coord_t x, coord_t y) {
|
||||
if(g->origin_x + x > g->x1)
|
||||
return 1;
|
||||
if(g->origin_x + x < g->x0)
|
||||
return 1;
|
||||
if(g->origin_y - y < g->y1)
|
||||
return 1;
|
||||
if(g->origin_y - y > g->y0)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draws a single dot into the graph
|
||||
* @note The dot won't be drawn if it's outsite the max and min
|
||||
* values of the graph.
|
||||
*
|
||||
* @param[in] g The pointer to the graph
|
||||
* @param[in] x,y The coordinates where the data point will be drawn
|
||||
* @param[in] radius The radius of the dot. One pixel if 0.
|
||||
* @param[in] color The color of the dot.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
void graphDrawDot(Graph *g, coord_t x, coord_t y, uint16_t radius, color_t color) {
|
||||
if(_boundaryCheck(g, x, y))
|
||||
return;
|
||||
|
||||
if(radius == 0)
|
||||
gdispDrawPixel(g->origin_x + x, g->origin_y - y, color);
|
||||
else
|
||||
gdispFillCircle(g->origin_x + x, g->origin_y - y, radius, color);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draws multiple dots into the graph
|
||||
* @note A dot won't be drawn if it's outsite the max and min
|
||||
* values of the graph.
|
||||
*
|
||||
* @param[in] g The pointer to the graph
|
||||
* @param[in] coord A two dimensional int array containing the dots coordinates.
|
||||
* @param[in] entries How many dots will be drawn (array index from 0 to entries);
|
||||
* @param[in] radius The radius of the dots. One pixel if 0.
|
||||
* @param[in] color The color of the dots.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
void graphDrawDots(Graph *g, int coord[][2], uint16_t entries, uint16_t radius, uint16_t color) {
|
||||
uint16_t i;
|
||||
|
||||
for(i = 0; i < entries; i++) {
|
||||
if(_boundaryCheck(g, coord[i][0], coord[i][1]))
|
||||
continue;
|
||||
|
||||
if(radius == 0)
|
||||
gdispDrawPixel(coord[i][0] + g->origin_x, g->origin_y - coord[i][1], color);
|
||||
else
|
||||
gdispFillCircle(coord[i][0] + g->origin_x, g->origin_y - coord[i][1], radius, color);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draws multiple dots into the graph and connects them by a line
|
||||
* @note A dot won't be drawn if it's outsite the max and min
|
||||
* values of the graph.
|
||||
*
|
||||
* @param[in] g The pointer to the graph
|
||||
* @param[in] coord A two dimensional int array containing the dots coordinates.
|
||||
* @param[in] entries How many dots will be drawn (array index from 0 to entries);
|
||||
* @param[in] radius The radius of the dots. One pixel if 0.
|
||||
* @param[in] lineColor The color of the line.
|
||||
* @param[in] dotColor The color of the dots.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
void graphDrawNet(Graph *g, int coord[][2], uint16_t entries, uint16_t radius, uint16_t lineColor, uint16_t dotColor) {
|
||||
uint16_t i;
|
||||
|
||||
/* draw lines */
|
||||
for(i = 0; i < entries-1; i++) {
|
||||
if(_boundaryCheck(g, coord[i][0], coord[i][1]))
|
||||
continue;
|
||||
|
||||
gdispDrawLine(coord[i][0] + g->origin_x, g->origin_y - coord[i][1], coord[i+1][0] + g->origin_x, g->origin_y - coord[i+1][1], lineColor);
|
||||
}
|
||||
|
||||
/* draw dots */
|
||||
for(i = 0; i < entries; i++) {
|
||||
if(_boundaryCheck(g, coord[i][0], coord[i][1]))
|
||||
continue;
|
||||
|
||||
if(radius == 0)
|
||||
gdispDrawPixel(coord[i][0] + g->origin_x, g->origin_y - coord[i][1], dotColor);
|
||||
else
|
||||
gdispFillCircle(coord[i][0] + g->origin_x, g->origin_y - coord[i][1], radius, dotColor);
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* GFX_USE_GRAPH */
|
||||
/** @} */
|
||||
|
@ -19,18 +19,22 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file src/gtimer.c
|
||||
* @brief GTIMER Driver code.
|
||||
* @file src/gtimer/gtimer.c
|
||||
* @brief GTIMER sub-system code.
|
||||
*
|
||||
* @addtogroup GTIMER
|
||||
* @{
|
||||
*/
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gtimer.h"
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GTIMER || defined(__DOXYGEN__)
|
||||
|
||||
#if !CH_USE_MUTEXES || !CH_USE_SEMAPHORES
|
||||
#error "GTIMER: CH_USE_MUTEXES and CH_USE_SEMAPHORES must be defined in chconf.h"
|
||||
#endif
|
||||
|
||||
#define GTIMER_FLG_PERIODIC 0x0001
|
||||
#define GTIMER_FLG_INFINITE 0x0002
|
||||
#define GTIMER_FLG_JABBED 0x0004
|
||||
@ -44,7 +48,7 @@ static MUTEX_DECL(mutex);
|
||||
static Thread *pThread = 0;
|
||||
static GTimer *pTimerHead = 0;
|
||||
static BSEMAPHORE_DECL(waitsem, TRUE);
|
||||
static WORKING_AREA(waTimerThread, GTIMER_THREAD_STACK_SIZE);
|
||||
static WORKING_AREA(waTimerThread, GTIMER_THREAD_WORKAREA_SIZE);
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local functions. */
|
1
src/gtimer/gtimer.mk
Normal file
1
src/gtimer/gtimer.mk
Normal file
@ -0,0 +1 @@
|
||||
GFXSRC += $(GFXLIB)/src/gtimer/gtimer.c
|
@ -20,24 +20,20 @@
|
||||
|
||||
/**
|
||||
* @file src/gwin/button.c
|
||||
* @brief GWIN Driver code.
|
||||
* @brief GWIN sub-system button code.
|
||||
*
|
||||
* @addtogroup GWIN_BUTTON
|
||||
* @{
|
||||
*/
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gwin.h"
|
||||
#include "ginput.h"
|
||||
#include "gfx.h"
|
||||
|
||||
#if (GFX_USE_GWIN && GWIN_NEED_BUTTON) || defined(__DOXYGEN__)
|
||||
|
||||
#if !GFX_USE_GINPUT
|
||||
#error "GWIN Buttons require GFX_USE_GINPUT"
|
||||
#endif
|
||||
|
||||
#include <string.h>
|
||||
#include "gwin_internal.h"
|
||||
|
||||
#include "gwin/internal.h"
|
||||
|
||||
static const GButtonStyle GButtonDefaultStyle = {
|
||||
GBTN_3D,
|
||||
@ -137,7 +133,7 @@ static void gwinButtonCallback(void *param, GEvent *pe) {
|
||||
* @brief Create a button window.
|
||||
* @return NULL if there is no resultant drawing area, otherwise a window handle.
|
||||
*
|
||||
* @param[in] gb The GConsoleWindow structure to initialise. If this is NULL the structure is dynamically allocated.
|
||||
* @param[in] gb The GButtonObject structure to initialise. If this is NULL the structure is dynamically allocated.
|
||||
* @param[in] x,y The screen co-ordinates for the bottom left corner of the window
|
||||
* @param[in] width The width of the window
|
||||
* @param[in] height The height of the window
|
||||
|
@ -20,20 +20,20 @@
|
||||
|
||||
/**
|
||||
* @file src/gwin/console.c
|
||||
* @brief GWIN Driver code.
|
||||
* @brief GWIN sub-system console code.
|
||||
*
|
||||
* @addtogroup GWIN_CONSOLE
|
||||
* @{
|
||||
*/
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gwin.h"
|
||||
#include "gfx.h"
|
||||
|
||||
#if (GFX_USE_GWIN && GWIN_NEED_CONSOLE) || defined(__DOXYGEN__)
|
||||
|
||||
#include <string.h>
|
||||
#include "gwin_internal.h"
|
||||
|
||||
#include "gwin/internal.h"
|
||||
|
||||
#define GWIN_CONSOLE_USE_CLEAR_LINES TRUE
|
||||
#define GWIN_CONSOLE_USE_FILLED_CHARS FALSE
|
||||
|
425
src/gwin/graph.c
Normal file
425
src/gwin/graph.c
Normal file
@ -0,0 +1,425 @@
|
||||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file src/gwin/button.c
|
||||
* @brief GWIN sub-system button code.
|
||||
*
|
||||
* @addtogroup GWIN_BUTTON
|
||||
* @{
|
||||
*/
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gfx.h"
|
||||
|
||||
#if (GFX_USE_GWIN && GWIN_NEED_GRAPH) || defined(__DOXYGEN__)
|
||||
|
||||
#include "gwin/internal.h"
|
||||
|
||||
#define GGRAPH_FLG_CONNECTPOINTS (GWIN_FIRST_CONTROL_FLAG<<0)
|
||||
#define GGRAPH_ARROW_SIZE 5
|
||||
|
||||
static const GGraphStyle GGraphDefaultStyle = {
|
||||
{ GGRAPH_POINT_DOT, 0, White }, // point
|
||||
{ GGRAPH_LINE_DOT, 2, Gray }, // line
|
||||
{ GGRAPH_LINE_SOLID, 0, White }, // x axis
|
||||
{ GGRAPH_LINE_SOLID, 0, White }, // y axis
|
||||
{ GGRAPH_LINE_NONE, 0, White, 0 }, // x grid
|
||||
{ GGRAPH_LINE_NONE, 0, White, 0 }, // y grid
|
||||
GWIN_GRAPH_STYLE_XAXIS_ARROWS|GWIN_GRAPH_STYLE_YAXIS_ARROWS // flags
|
||||
};
|
||||
|
||||
static void pointto(GGraphObject *gg, coord_t x, coord_t y, const GGraphPointStyle *style) {
|
||||
if (style->type == GGRAPH_POINT_NONE)
|
||||
return;
|
||||
|
||||
// Convert to device space. Note the y-axis is inverted.
|
||||
x += gg->gwin.x + gg->xorigin;
|
||||
y = gg->gwin.y + gg->gwin.height - 1 - gg->yorigin - y;
|
||||
|
||||
if (style->size <= 1) {
|
||||
gdispDrawPixel(x, y, style->color);
|
||||
return;
|
||||
}
|
||||
|
||||
switch(style->type) {
|
||||
case GGRAPH_POINT_SQUARE:
|
||||
gdispDrawBox(x-style->size, y-style->size, 2*style->size, 2*style->size, style->color);
|
||||
break;
|
||||
#if GDISP_NEED_CIRCLE
|
||||
case GGRAPH_POINT_CIRCLE:
|
||||
gdispDrawCircle(x, y, style->size, style->color);
|
||||
break;
|
||||
#endif
|
||||
case GGRAPH_POINT_DOT:
|
||||
default:
|
||||
gdispDrawPixel(x, y, style->color);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void lineto(GGraphObject *gg, coord_t x0, coord_t y0, coord_t x1, coord_t y1, const GGraphLineStyle *style) {
|
||||
coord_t dy, dx;
|
||||
coord_t addx, addy;
|
||||
coord_t P, diff, i;
|
||||
coord_t run_on, run_off, run;
|
||||
|
||||
if (style->type == GGRAPH_LINE_NONE)
|
||||
return;
|
||||
|
||||
// Convert to device space. Note the y-axis is inverted.
|
||||
x0 += gg->gwin.x + gg->xorigin;
|
||||
y0 = gg->gwin.y + gg->gwin.height - 1 - gg->yorigin - y0;
|
||||
x1 += gg->gwin.x + gg->xorigin;
|
||||
y1 += gg->gwin.y + gg->gwin.height - 1 - gg->yorigin - y1;
|
||||
|
||||
if (style->size <= 0) {
|
||||
// Use the driver to draw a solid line
|
||||
gdispDrawLine(x0, y0, x1, y1, style->color);
|
||||
return;
|
||||
}
|
||||
|
||||
switch (style->type) {
|
||||
case GGRAPH_LINE_DOT:
|
||||
run_on = 1;
|
||||
run_off = -style->size;
|
||||
break;
|
||||
|
||||
case GGRAPH_LINE_DASH:
|
||||
run_on = style->size;
|
||||
run_off = -style->size;
|
||||
break;
|
||||
|
||||
case GGRAPH_LINE_SOLID:
|
||||
default:
|
||||
// Use the driver to draw a solid line
|
||||
gdispDrawLine(x0, y0, x1, y1, style->color);
|
||||
return;
|
||||
}
|
||||
|
||||
// Use Bresenham's algorithm modified to draw a stylized line
|
||||
run = 0;
|
||||
if (x1 >= x0) {
|
||||
dx = x1 - x0;
|
||||
addx = 1;
|
||||
} else {
|
||||
dx = x0 - x1;
|
||||
addx = -1;
|
||||
}
|
||||
if (y1 >= y0) {
|
||||
dy = y1 - y0;
|
||||
addy = 1;
|
||||
} else {
|
||||
dy = y0 - y1;
|
||||
addy = -1;
|
||||
}
|
||||
|
||||
if (dx >= dy) {
|
||||
dy *= 2;
|
||||
P = dy - dx;
|
||||
diff = P - dx;
|
||||
|
||||
for(i=0; i<=dx; ++i) {
|
||||
if (run++ >= 0) {
|
||||
if (run >= run_on)
|
||||
run = run_off;
|
||||
gdispDrawPixel(x0, y0, style->color);
|
||||
}
|
||||
if (P < 0) {
|
||||
P += dy;
|
||||
x0 += addx;
|
||||
} else {
|
||||
P += diff;
|
||||
x0 += addx;
|
||||
y0 += addy;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
dx *= 2;
|
||||
P = dx - dy;
|
||||
diff = P - dy;
|
||||
|
||||
for(i=0; i<=dy; ++i) {
|
||||
if (run++ >= 0) {
|
||||
if (run >= run_on)
|
||||
run = run_off;
|
||||
gdispDrawPixel(x0, y0, style->color);
|
||||
}
|
||||
if (P < 0) {
|
||||
P += dx;
|
||||
y0 += addy;
|
||||
} else {
|
||||
P += diff;
|
||||
x0 += addx;
|
||||
y0 += addy;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Create a graph window.
|
||||
* @return NULL if there is no resultant drawing area, otherwise a window handle.
|
||||
*
|
||||
* @param[in] gg The GGraphObject structure to initialise. If this is NULL the structure is dynamically allocated.
|
||||
* @param[in] x,y The screen co-ordinates for the bottom left corner of the window
|
||||
* @param[in] width The width of the window
|
||||
* @param[in] height The height of the window
|
||||
* @note The console is not automatically cleared on creation. You must do that by calling gwinClear() (possibly after changing your background color)
|
||||
* @note The coordinate system within the window for graphing operations (but not for any other drawing
|
||||
* operation) is relative to the bottom left corner and then shifted right and up by the specified
|
||||
* graphing x and y origin. Note that this system is inverted in the y direction relative to the display.
|
||||
* This gives the best graphing arrangement ie. increasing y values are closer to the top of the display.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
GHandle gwinCreateGraph(GGraphObject *gg, coord_t x, coord_t y, coord_t width, coord_t height) {
|
||||
if (!(gg = (GGraphObject *)_gwinInit((GWindowObject *)gg, x, y, width, height, sizeof(GGraphObject))))
|
||||
return 0;
|
||||
gg->gwin.type = GW_GRAPH;
|
||||
gg->xorigin = gg->yorigin = 0;
|
||||
gg->lastx = gg->lasty = 0;
|
||||
gwinGraphSetStyle(&gg->gwin, &GGraphDefaultStyle);
|
||||
return (GHandle)gg;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the style of the graphing operations.
|
||||
*
|
||||
* @param[in] gh The window handle (must be a graph window)
|
||||
* @param[in] pstyle The graph style to set.
|
||||
* @note The graph is not automatically redrawn. The new style will apply to any new drawing operations.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
void gwinGraphSetStyle(GHandle gh, const GGraphStyle *pstyle) {
|
||||
#define gg ((GGraphObject *)gh)
|
||||
|
||||
if (gh->type != GW_GRAPH)
|
||||
return;
|
||||
|
||||
gg->style.point.type = pstyle->point.type;
|
||||
gg->style.point.size = pstyle->point.size;
|
||||
gg->style.point.color = pstyle->point.color;
|
||||
gg->style.line.type = pstyle->line.type;
|
||||
gg->style.line.size = pstyle->line.size;
|
||||
gg->style.line.color = pstyle->line.color;
|
||||
gg->style.xaxis.type = pstyle->xaxis.type;
|
||||
gg->style.xaxis.size = pstyle->xaxis.size;
|
||||
gg->style.xaxis.color = pstyle->xaxis.color;
|
||||
gg->style.yaxis.type = pstyle->yaxis.type;
|
||||
gg->style.yaxis.size = pstyle->yaxis.size;
|
||||
gg->style.yaxis.color = pstyle->yaxis.color;
|
||||
gg->style.xgrid.type = pstyle->xgrid.type;
|
||||
gg->style.xgrid.size = pstyle->xgrid.size;
|
||||
gg->style.xgrid.color = pstyle->xgrid.color;
|
||||
gg->style.xgrid.spacing = pstyle->xgrid.spacing;
|
||||
gg->style.ygrid.type = pstyle->ygrid.type;
|
||||
gg->style.ygrid.size = pstyle->ygrid.size;
|
||||
gg->style.ygrid.color = pstyle->ygrid.color;
|
||||
gg->style.ygrid.spacing = pstyle->ygrid.spacing;
|
||||
|
||||
#undef gg
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the origin for graphing operations.
|
||||
*
|
||||
* @param[in] gh The window handle (must be a graph window)
|
||||
* @param[in] x, y The new origin for the graph (in graph coordinates relative to the bottom left corner).
|
||||
* @note The graph is not automatically redrawn. The new origin will apply to any new drawing operations.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
void gwinGraphSetOrigin(GHandle gh, coord_t x, coord_t y) {
|
||||
#define gg ((GGraphObject *)gh)
|
||||
|
||||
if (gh->type != GW_GRAPH)
|
||||
return;
|
||||
|
||||
gg->xorigin = x;
|
||||
gg->yorigin = y;
|
||||
|
||||
#undef gg
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draw the axis and the background grid.
|
||||
*
|
||||
* @param[in] gh The window handle (must be a graph window)
|
||||
* @note The graph is not automatically cleared. You must do that first by calling gwinClear().
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
void gwinGraphDrawAxis(GHandle gh) {
|
||||
#define gg ((GGraphObject *)gh)
|
||||
coord_t i, xmin, ymin, xmax, ymax;
|
||||
|
||||
if (gh->type != GW_GRAPH)
|
||||
return;
|
||||
|
||||
xmin = -gg->xorigin;
|
||||
xmax = gh->width-gg->xorigin-1;
|
||||
ymin = -gg->yorigin;
|
||||
ymax = gh->height-gg->yorigin-1;
|
||||
|
||||
// x grid - this code assumes that the GGraphGridStyle is a superset of GGraphListStyle
|
||||
if (gg->style.xgrid.type != GGRAPH_LINE_NONE && gg->style.xgrid.spacing >= 2) {
|
||||
for(i = gg->style.xgrid.spacing; i <= xmax; i += gg->style.xgrid.spacing)
|
||||
lineto(gg, i, ymin, i, ymax, (GGraphLineStyle *)&gg->style.xgrid);
|
||||
for(i = -gg->style.xgrid.spacing; i >= xmin; i -= gg->style.xgrid.spacing)
|
||||
lineto(gg, i, ymin, i, ymax, (GGraphLineStyle *)&gg->style.xgrid);
|
||||
}
|
||||
|
||||
// y grid - this code assumes that the GGraphGridStyle is a superset of GGraphListStyle
|
||||
if (gg->style.ygrid.type != GGRAPH_LINE_NONE && gg->style.ygrid.spacing >= 2) {
|
||||
for(i = gg->style.ygrid.spacing; i <= ymax; i += gg->style.ygrid.spacing)
|
||||
lineto(gg, xmin, i, xmax, i, (GGraphLineStyle *)&gg->style.ygrid);
|
||||
for(i = -gg->style.ygrid.spacing; i >= ymin; i -= gg->style.ygrid.spacing)
|
||||
lineto(gg, xmin, i, xmax, i, (GGraphLineStyle *)&gg->style.ygrid);
|
||||
}
|
||||
|
||||
// x axis
|
||||
lineto(gg, xmin, 0, xmax, 0, &gg->style.xaxis);
|
||||
if ((gg->style.flags & GWIN_GRAPH_STYLE_XAXIS_ARROWS)) {
|
||||
if (xmin > 0 || xmin < -(GGRAPH_ARROW_SIZE+1)) {
|
||||
lineto(gg, xmin, 0, xmin+GGRAPH_ARROW_SIZE, GGRAPH_ARROW_SIZE, &gg->style.xaxis);
|
||||
lineto(gg, xmin, 0, xmin+GGRAPH_ARROW_SIZE, -GGRAPH_ARROW_SIZE, &gg->style.xaxis);
|
||||
}
|
||||
if (xmax < 0 || xmax > (GGRAPH_ARROW_SIZE+1)) {
|
||||
lineto(gg, xmax, 0, xmax-GGRAPH_ARROW_SIZE, GGRAPH_ARROW_SIZE, &gg->style.xaxis);
|
||||
lineto(gg, xmax, 0, xmax-GGRAPH_ARROW_SIZE, -GGRAPH_ARROW_SIZE, &gg->style.xaxis);
|
||||
}
|
||||
}
|
||||
|
||||
// y axis
|
||||
lineto(gg, 0, ymin, 0, ymax, &gg->style.yaxis);
|
||||
if ((gg->style.flags & GWIN_GRAPH_STYLE_YAXIS_ARROWS)) {
|
||||
if (ymin > 0 || ymin < -(GGRAPH_ARROW_SIZE+1)) {
|
||||
lineto(gg, 0, ymin, GGRAPH_ARROW_SIZE, ymin+GGRAPH_ARROW_SIZE, &gg->style.yaxis);
|
||||
lineto(gg, 0, ymin, -GGRAPH_ARROW_SIZE, ymin+GGRAPH_ARROW_SIZE, &gg->style.yaxis);
|
||||
}
|
||||
if (ymax < 0 || ymax > (GGRAPH_ARROW_SIZE+1)) {
|
||||
lineto(gg, 0, ymax, GGRAPH_ARROW_SIZE, ymax-GGRAPH_ARROW_SIZE, &gg->style.yaxis);
|
||||
lineto(gg, 0, ymax, -GGRAPH_ARROW_SIZE, ymax-GGRAPH_ARROW_SIZE, &gg->style.yaxis);
|
||||
}
|
||||
}
|
||||
|
||||
#undef gg
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Start a new set of graphing data.
|
||||
* @details This prevents a line being drawn from the last data point to the next point to be drawn.
|
||||
*
|
||||
* @param[in] gh The window handle (must be a graph window)
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
void gwinGraphStartSet(GHandle gh) {
|
||||
if (gh->type != GW_GRAPH)
|
||||
return;
|
||||
|
||||
gh->flags &= ~GGRAPH_FLG_CONNECTPOINTS;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draw a graph point.
|
||||
* @details A graph point and a line connecting to the previous point will be drawn.
|
||||
*
|
||||
* @param[in] gh The window handle (must be a graph window)
|
||||
* @param[in] x, y The new point for the graph.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
void gwinGraphDrawPoint(GHandle gh, coord_t x, coord_t y) {
|
||||
#define gg ((GGraphObject *)gh)
|
||||
|
||||
if (gh->type != GW_GRAPH)
|
||||
return;
|
||||
|
||||
if ((gh->flags & GGRAPH_FLG_CONNECTPOINTS)) {
|
||||
// Draw the line
|
||||
lineto(gg, gg->lastx, gg->lasty, x, y, &gg->style.line);
|
||||
|
||||
// Redraw the previous point because the line may have overwritten it
|
||||
pointto(gg, gg->lastx, gg->lasty, &gg->style.point);
|
||||
|
||||
} else
|
||||
gh->flags |= GGRAPH_FLG_CONNECTPOINTS;
|
||||
|
||||
// Save this point for next time.
|
||||
gg->lastx = x;
|
||||
gg->lasty = y;
|
||||
|
||||
// Draw this point.
|
||||
pointto(gg, x, y, &gg->style.point);
|
||||
|
||||
#undef gg
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draw multiple graph points.
|
||||
* @details A graph point and a line connecting to each previous point will be drawn.
|
||||
*
|
||||
* @param[in] gh The window handle (must be a graph window)
|
||||
* @param[in] points The array of points for the graph.
|
||||
* @param[in] count The number of points in the array.
|
||||
* @note This is slightly more efficient than calling gwinGraphDrawPoint() repeatedly.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
void gwinGraphDrawPoints(GHandle gh, const GGraphPoint *points, unsigned count) {
|
||||
#define gg ((GGraphObject *)gh)
|
||||
unsigned i;
|
||||
const GGraphPoint *p;
|
||||
|
||||
if (gh->type != GW_GRAPH)
|
||||
return;
|
||||
|
||||
// Draw the connecting lines
|
||||
for(p = points, i = 0; i < count; p++, i++) {
|
||||
if ((gh->flags & GGRAPH_FLG_CONNECTPOINTS)) {
|
||||
// Draw the line
|
||||
lineto(gg, gg->lastx, gg->lasty, p->x, p->y, &gg->style.line);
|
||||
|
||||
// Redraw the previous point because the line may have overwritten it
|
||||
if (i == 0)
|
||||
pointto(gg, gg->lastx, gg->lasty, &gg->style.point);
|
||||
|
||||
} else
|
||||
gh->flags |= GGRAPH_FLG_CONNECTPOINTS;
|
||||
|
||||
// Save this point for next time.
|
||||
gg->lastx = p->x;
|
||||
gg->lasty = p->y;
|
||||
}
|
||||
|
||||
|
||||
// Draw the points.
|
||||
for(p = points, i = 0; i < count; p++, i++)
|
||||
pointto(gg, p->x, p->y, &gg->style.point);
|
||||
|
||||
#undef gg
|
||||
}
|
||||
|
||||
#endif /* GFX_USE_GWIN && GWIN_NEED_GRAPH */
|
||||
/** @} */
|
||||
|
@ -19,19 +19,19 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file src/gwin.c
|
||||
* @brief GWIN Driver code.
|
||||
* @file src/gwin/gwin.c
|
||||
* @brief GWIN sub-system code.
|
||||
*
|
||||
* @addtogroup GWIN
|
||||
* @{
|
||||
*/
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gwin.h"
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GWIN || defined(__DOXYGEN__)
|
||||
|
||||
#include "gwin/gwin_internal.h"
|
||||
#include "gwin/internal.h"
|
||||
|
||||
// Internal routine for use by GWIN components only
|
||||
// Initialise a window creating it dynamicly if required.
|
@ -1,2 +1,5 @@
|
||||
GFXSRC += $(GFXLIB)/src/gwin/console.c \
|
||||
$(GFXLIB)/src/gwin/button.c
|
||||
GFXSRC += $(GFXLIB)/src/gwin/gwin.c \
|
||||
$(GFXLIB)/src/gwin/console.c \
|
||||
$(GFXLIB)/src/gwin/button.c \
|
||||
$(GFXLIB)/src/gwin/graph.c
|
||||
|
@ -1,369 +0,0 @@
|
||||
/* ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file src/touchscreen.c
|
||||
* @brief Touchscreen Driver code.
|
||||
*
|
||||
* @addtogroup TOUCHSCREEN
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
#include "touchscreen.h"
|
||||
|
||||
#if GFX_USE_TOUCHSCREEN || defined(__DOXYGEN__)
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local variables. */
|
||||
/*===========================================================================*/
|
||||
static struct cal_t *cal;
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
static coord_t _tsReadRealX(void) {
|
||||
int32_t results = 0;
|
||||
int16_t i;
|
||||
coord_t x;
|
||||
|
||||
for(i = 0; i < TOUCHSCREEN_CONVERSIONS; i++) {
|
||||
results += ts_lld_read_x();
|
||||
}
|
||||
|
||||
/* Take the average of the readings */
|
||||
x = results / TOUCHSCREEN_CONVERSIONS;
|
||||
|
||||
return x;
|
||||
}
|
||||
|
||||
static coord_t _tsReadRealY(void) {
|
||||
int32_t results = 0;
|
||||
int16_t i;
|
||||
coord_t y;
|
||||
|
||||
for(i = 0; i < TOUCHSCREEN_CONVERSIONS; i++) {
|
||||
results += ts_lld_read_y();
|
||||
}
|
||||
|
||||
/* Take the average of the readings */
|
||||
y = results / TOUCHSCREEN_CONVERSIONS;
|
||||
|
||||
return y;
|
||||
}
|
||||
|
||||
static void _tsDrawCross(uint16_t x, uint16_t y) {
|
||||
gdispDrawLine(x-15, y, x-2, y, White);
|
||||
gdispDrawLine(x+2, y, x+15, y, White);
|
||||
gdispDrawLine(x, y-15, x, y-2, White);
|
||||
gdispDrawLine(x, y+2, x, y+15, White);
|
||||
|
||||
gdispDrawLine(x-15, y+15, x-7, y+15, RGB2COLOR(184,158,131));
|
||||
gdispDrawLine(x-15, y+7, x-15, y+15, RGB2COLOR(184,158,131));
|
||||
|
||||
gdispDrawLine(x-15, y-15, x-7, y-15, RGB2COLOR(184,158,131));
|
||||
gdispDrawLine(x-15, y-7, x-15, y-15, RGB2COLOR(184,158,131));
|
||||
|
||||
gdispDrawLine(x+7, y+15, x+15, y+15, RGB2COLOR(184,158,131));
|
||||
gdispDrawLine(x+15, y+7, x+15, y+15, RGB2COLOR(184,158,131));
|
||||
|
||||
gdispDrawLine(x+7, y-15, x+15, y-15, RGB2COLOR(184,158,131));
|
||||
gdispDrawLine(x+15, y-15, x+15, y-7, RGB2COLOR(184,158,131));
|
||||
}
|
||||
|
||||
static void _tsTransform(coord_t *x, coord_t *y) {
|
||||
*x = (coord_t) (cal->ax * (*x) + cal->bx * (*y) + cal->cx);
|
||||
*y = (coord_t) (cal->ay * (*x) + cal->by * (*y) + cal->cy);
|
||||
}
|
||||
|
||||
static void _tsDo3PointCalibration(const coord_t (*cross)[2], coord_t (*points)[2], cal_t *c) {
|
||||
float dx, dx0, dx1, dx2, dy0, dy1, dy2;
|
||||
|
||||
/* Compute all the required determinants */
|
||||
dx = ((float)(points[0][0] - points[2][0])) * ((float)(points[1][1] - points[2][1]))
|
||||
- ((float)(points[1][0] - points[2][0])) * ((float)(points[0][1] - points[2][1]));
|
||||
|
||||
dx0 = ((float)(cross[0][0] - cross[2][0])) * ((float)(points[1][1] - points[2][1]))
|
||||
- ((float)(cross[1][0] - cross[2][0])) * ((float)(points[0][1] - points[2][1]));
|
||||
|
||||
dx1 = ((float)(points[0][0] - points[2][0])) * ((float)(cross[1][0] - cross[2][0]))
|
||||
- ((float)(points[1][0] - points[2][0])) * ((float)(cross[0][0] - cross[2][0]));
|
||||
|
||||
dx2 = cross[0][0] * ((float)points[1][0] * (float)points[2][1] - (float)points[2][0] * (float)points[1][1]) -
|
||||
cross[1][0] * ((float)points[0][0] * (float)points[2][1] - (float)points[2][0] * (float)points[0][1]) +
|
||||
cross[2][0] * ((float)points[0][0] * (float)points[1][1] - (float)points[1][0] * (float)points[0][1]);
|
||||
|
||||
dy0 = ((float)(cross[0][1] - cross[2][1])) * ((float)(points[1][1] - points[2][1]))
|
||||
- ((float)(cross[1][1] - cross[2][1])) * ((float)(points[0][1] - points[2][1]));
|
||||
|
||||
dy1 = ((float)(points[0][0] - points[2][0])) * ((float)(cross[1][1] - cross[2][1]))
|
||||
- ((float)(points[1][0] - points[2][0])) * ((float)(cross[0][1] - cross[2][1]));
|
||||
|
||||
dy2 = cross[0][1] * ((float)points[1][0] * (float)points[2][1] - (float)points[2][0] * (float)points[1][1]) -
|
||||
cross[1][1] * ((float)points[0][0] * (float)points[2][1] - (float)points[2][0] * (float)points[0][1]) +
|
||||
cross[2][1] * ((float)points[0][0] * (float)points[1][1] - (float)points[1][0] * (float)points[0][1]);
|
||||
|
||||
/* Now, calculate all the required coefficients */
|
||||
c->ax = dx0 / dx;
|
||||
c->bx = dx1 / dx;
|
||||
c->cx = dx2 / dx;
|
||||
|
||||
c->ay = dy0 / dx;
|
||||
c->by = dy1 / dx;
|
||||
c->cy = dy2 / dx;
|
||||
}
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver exported functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Touchscreen Driver initialization.
|
||||
* @note Calling this function automatically invokes a tsCalibration()
|
||||
*
|
||||
* @param[in] ts The touchscreen driver struct
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
void tsInit(const TouchscreenDriver *ts) {
|
||||
/* Initialise Mutex */
|
||||
//MUTEX_INIT
|
||||
|
||||
/* Initialise driver */
|
||||
//MUTEX_ENTER
|
||||
ts_lld_init(ts);
|
||||
//MUTEX_EXIT
|
||||
|
||||
#if TOUCHSCREEN_STORE_CALIBRATION
|
||||
cal = ts_restore_calibration_lld();
|
||||
if(cal != NULL)
|
||||
return; // All done
|
||||
#endif
|
||||
|
||||
cal = (struct cal_t*)chHeapAlloc(NULL, sizeof(struct cal_t));
|
||||
if(cal == NULL)
|
||||
return;
|
||||
|
||||
tsCalibrate();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the X-Coordinate, relative to screen zero point.
|
||||
*
|
||||
* @return The X position in pixels.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
coord_t tsReadX(void) {
|
||||
coord_t x, y;
|
||||
|
||||
#if TOUCHSCREEN_XY_INVERTED
|
||||
x = _tsReadRealY();
|
||||
y = _tsReadRealX();
|
||||
#else
|
||||
x = _tsReadRealX();
|
||||
y = _tsReadRealY();
|
||||
#endif
|
||||
|
||||
_tsTransform(&x, &y);
|
||||
|
||||
switch(gdispGetOrientation()) {
|
||||
case GDISP_ROTATE_0:
|
||||
return x;
|
||||
case GDISP_ROTATE_90:
|
||||
return y;
|
||||
case GDISP_ROTATE_180:
|
||||
return gdispGetWidth() - x - 1;
|
||||
case GDISP_ROTATE_270:
|
||||
return gdispGetWidth() - y - 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the X-Coordinate, relative to screen zero point.
|
||||
*
|
||||
* @return The Y position in pixels.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
coord_t tsReadY(void) {
|
||||
coord_t x, y;
|
||||
|
||||
#if TOUCHSCREEN_XY_INVERTED
|
||||
x = _tsReadRealY();
|
||||
y = _tsReadRealX();
|
||||
#else
|
||||
x = _tsReadRealX();
|
||||
y = _tsReadRealY();
|
||||
#endif
|
||||
|
||||
_tsTransform(&x, &y);
|
||||
|
||||
switch(gdispGetOrientation()) {
|
||||
case GDISP_ROTATE_0:
|
||||
return y;
|
||||
case GDISP_ROTATE_90:
|
||||
return gdispGetHeight() - x - 1;
|
||||
case GDISP_ROTATE_180:
|
||||
return gdispGetHeight() - y - 1;
|
||||
case GDISP_ROTATE_270:
|
||||
return x;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the pressure.
|
||||
*
|
||||
* @return The pressure.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#if TOUCHSCREEN_HAS_PRESSURE || defined(__DOXYGEN__)
|
||||
uint16_t tsReadZ(void) {
|
||||
/* ToDo */
|
||||
return (ts_lld_read_z());
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Returns if touchscreen is pressed or not
|
||||
*
|
||||
* @return TRUE if pressed, FALSE otherwise
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#if TOUCHSCREEN_HAS_PRESSED || defined(__DOXYGEN__)
|
||||
bool_t tsPressed(void) {
|
||||
return ts_lld_pressed();
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Define maximum no. of times to sample the calibration point */
|
||||
#define MAX_CAL_SAMPLES 10
|
||||
|
||||
/**
|
||||
* @brief Function to calibrate touchscreen
|
||||
* @details This function interactively performs calibration of the touchscreen
|
||||
* using 3-point calibration algorithm. Optionally, it also verifies
|
||||
* the accuracy of the calibration coefficients obtained if the symbol
|
||||
* TOUCHSCREEN_VERIFY_CALIBRATION is defined in the configuration.
|
||||
*
|
||||
* @note You don't have to call this function manually. It gets invoked by tsInit()
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
void tsCalibrate(void) {
|
||||
const uint16_t height = gdispGetHeight();
|
||||
const uint16_t width = gdispGetWidth();
|
||||
const coord_t cross[][2] = {{(width / 4), (height / 4)},
|
||||
{(width - (width / 4)) , (height / 4)},
|
||||
{(width - (width / 4)) , (height - (height / 4))},
|
||||
{(width / 2), (height / 2)}}; /* Check point */
|
||||
coord_t points[4][2];
|
||||
int32_t px, py;
|
||||
uint8_t i, j;
|
||||
|
||||
#if GDISP_NEED_CONTROL
|
||||
gdispSetOrientation(GDISP_ROTATE_0);
|
||||
#endif
|
||||
|
||||
gdispClear(Blue);
|
||||
|
||||
gdispFillStringBox(0, 5, gdispGetWidth(), 30, "Calibration", &fontUI2Double, White, Blue, justifyCenter);
|
||||
|
||||
#if TOUCHSCREEN_VERIFY_CALIBRATION
|
||||
calibrate:
|
||||
for(i = 0; i < 4; i++) {
|
||||
#else
|
||||
for(i = 0; i < 3; i++) {
|
||||
#endif
|
||||
_tsDrawCross(cross[i][0], cross[i][1]);
|
||||
|
||||
while(!tsPressed())
|
||||
chThdSleepMilliseconds(2); /* Be nice to other threads*/
|
||||
|
||||
chThdSleepMilliseconds(20); /* Allow screen to settle */
|
||||
|
||||
/* Take a little more samples per point and their average
|
||||
* for precise calibration */
|
||||
px = py = 0;
|
||||
j = 0;
|
||||
|
||||
while(j < MAX_CAL_SAMPLES) {
|
||||
if(tsPressed()) { /* We have valid pointer data */
|
||||
#if TOUCHSCREEN_XY_INVERTED
|
||||
py += _tsReadRealX();
|
||||
px += _tsReadRealY();
|
||||
#else
|
||||
px += _tsReadRealX();
|
||||
py += _tsReadRealY();
|
||||
#endif
|
||||
|
||||
j++;
|
||||
}
|
||||
}
|
||||
|
||||
points[i][0] = px / j;
|
||||
points[i][1] = py / j;
|
||||
|
||||
chThdSleepMilliseconds(100);
|
||||
|
||||
while(tsPressed())
|
||||
chThdSleepMilliseconds(2); /* Be nice to other threads*/
|
||||
|
||||
gdispFillArea(cross[i][0] - 15, cross[i][1] - 15, 42, 42, Blue);
|
||||
}
|
||||
|
||||
/* Apply 3 point calibration algorithm */
|
||||
_tsDo3PointCalibration(cross, points, cal);
|
||||
|
||||
#if TOUCHSCREEN_VERIFY_CALIBRATION
|
||||
/* Verification of correctness of calibration (optional) :
|
||||
* See if the 4th point (Middle of the screen) coincides with the calibrated
|
||||
* result. If point is with +/- 2 pixel margin, then successful calibration
|
||||
* Else, start from the beginning.
|
||||
*/
|
||||
|
||||
/* Transform the co-ordinates */
|
||||
_tpTransform(&points[3][0], &points[3][1]);
|
||||
|
||||
/* Calculate the delta */
|
||||
px = (points[3][0] - cross[3][0]) * (points[3][0] - cross[3][0]) +
|
||||
(points[3][1] - cross[3][1]) * (points[3][1] - cross[3][1]);
|
||||
|
||||
if(px > 4)
|
||||
goto calibrate;
|
||||
#endif
|
||||
|
||||
/* If enabled, serialize the calibration values for storage */
|
||||
#if TOUCHSCREEN_STORE_CALIBRATION
|
||||
ts_store_calibration_lld(cal);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif /* GFX_USE_TOUCHSCREEN */
|
||||
/** @} */
|
||||
|
Loading…
Reference in New Issue
Block a user