diff options
Diffstat (limited to 'demos/applications')
| -rw-r--r-- | demos/applications/console/main.c | 59 | ||||
| -rw-r--r-- | demos/applications/graph/main.c | 51 | ||||
| -rw-r--r-- | demos/applications/mandelbrot/main.c | 80 | ||||
| -rw-r--r-- | demos/applications/notepad/main.c | 120 | 
4 files changed, 310 insertions, 0 deletions
diff --git a/demos/applications/console/main.c b/demos/applications/console/main.c new file mode 100644 index 00000000..b0e0fb7f --- /dev/null +++ b/demos/applications/console/main.c @@ -0,0 +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/>.
 +*/
 +
 +/*
 + * 	!!! IMPORTANT !!!
 + *
 + *	This example dosen't compile yet, there's a problem in the console source.
 + *  This issue will be fixed soon.
 + */
 +
 +/*
 + * Please add the following to your halconf.h
 + *
 + * #define GFX_USE_CONSOLE TRUE
 + * #define GDISP_NEED_SCROLL TRUE
 + */
 +
 +#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);
 +	}
 +}
 +
 diff --git a/demos/applications/graph/main.c b/demos/applications/graph/main.c new file mode 100644 index 00000000..bd50cf60 --- /dev/null +++ b/demos/applications/graph/main.c @@ -0,0 +1,51 @@ +#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);	
 +	}
 +}
 +
 diff --git a/demos/applications/mandelbrot/main.c b/demos/applications/mandelbrot/main.c new file mode 100644 index 00000000..6ab19de1 --- /dev/null +++ b/demos/applications/mandelbrot/main.c @@ -0,0 +1,80 @@ +/*
 +    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 "gdisp.h"
 +
 +void mandelbrot(float x1, float y1, float x2, float y2) {
 +	unsigned int i,j, width, height;
 +	uint16_t iter;
 +	color_t color;
 +	float fwidth, fheight;
 +	
 +	float sy = y2 - y1;
 +	float sx = x2 - x1;
 +	const int MAX = 512;
 +	
 +	width = (unsigned int)gdispGetWidth();
 +	height = (unsigned int)gdispGetHeight();
 +	fwidth = width;
 +	fheight = height;
 +	
 +	for(i = 0; i < width; i++) {
 +		for(j = 0; j < height; j++) {
 +			float cy = j * sy / fheight + y1;
 +			float cx = i * sx / fwidth + x1;
 +			float x=0.0f, y=0.0f, xx=0.0f, yy=0.0f;
 +			for(iter=0; iter <= MAX && xx+yy<4.0f; iter++) {
 +				xx = x*x;
 +				yy = y*y;
 +				y = 2.0f*x*y + cy;
 +				x = xx - yy + cx;
 +			}
 +			//color = ((iter << 8) | (iter&0xFF));
 +			color = RGB2COLOR(iter<<7, iter<<4, iter);
 +			gdispDrawPixel(i, j, color);
 +		}
 +	}
 +}
 +
 +int main(void) {
 +	float cx, cy;
 +	float zoom = 1.0f;
 +
 +	halInit();
 +	chSysInit();
 +
 +	gdispInit();
 +	gdispSetOrientation(GDISP_ROTATE_270);
 +
 +	/* where to zoom in */
 +	cx = -0.086f;
 +	cy = 0.85f;
 +
 +	while(TRUE) {
 +		mandelbrot(-2.0f*zoom+cx, -1.5f*zoom+cy, 2.0f*zoom+cx, 1.5f*zoom+cy);
 +
 +		zoom *= 0.7f;
 +		if(zoom <= 0.00001f)
 +			zoom = 1.0f;	
 +	}
 +}
 +
 diff --git a/demos/applications/notepad/main.c b/demos/applications/notepad/main.c new file mode 100644 index 00000000..7fec864f --- /dev/null +++ b/demos/applications/notepad/main.c @@ -0,0 +1,120 @@ +/*
 +    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 "gdisp.h"
 +#include "touchscreen.h"
 +
 +#define COLOR_SIZE	20
 +#define PEN_SIZE	20
 +#define OFFSET		3
 +
 +#define COLOR_BOX(a)		(x >= a && x <= a + COLOR_SIZE)
 +#define PEN_BOX(a)			(y >= a && y <= a + COLOR_SIZE)
 +#define GET_COLOR(a)		(COLOR_BOX(a * COLOR_SIZE + OFFSET))
 +#define GET_PEN(a)			(PEN_BOX(a * 2 * PEN_SIZE + OFFSET))
 +#define DRAW_COLOR(a)		(a * COLOR_SIZE + OFFSET)
 +#define DRAW_PEN(a)			(a * 2 * PEN_SIZE + OFFSET)
 +#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);
 +	
 +	/* colors */
 +	gdispFillArea(0 * COLOR_SIZE + 3, 3, COLOR_SIZE, COLOR_SIZE, Black);	/* Black */
 +	gdispFillArea(1 * COLOR_SIZE + 3, 3, COLOR_SIZE, COLOR_SIZE, Red);		/* Red */
 +	gdispFillArea(2 * COLOR_SIZE + 3, 3, COLOR_SIZE, COLOR_SIZE, Yellow);	/* Yellow */
 +	gdispFillArea(3 * COLOR_SIZE + 3, 3, COLOR_SIZE, COLOR_SIZE, Green);	/* Green */
 +	gdispFillArea(4 * COLOR_SIZE + 3, 3, COLOR_SIZE, COLOR_SIZE, Blue);		/* Blue */
 +	gdispDrawBox (5 * COLOR_SIZE + 3, 3, COLOR_SIZE, COLOR_SIZE, Black);	/* White */
 +
 +	/* pens */	
 +	gdispDrawString(OFFSET * 2, DRAW_PEN(1), "1", &fontLargeNumbers, Black);
 +	gdispDrawString(OFFSET * 2, DRAW_PEN(2), "2", &fontLargeNumbers, Black);
 +	gdispDrawString(OFFSET * 2, DRAW_PEN(3), "3", &fontLargeNumbers, Black);
 +	gdispDrawString(OFFSET * 2, DRAW_PEN(4), "4", &fontLargeNumbers, Black);
 +	gdispDrawString(OFFSET * 2, DRAW_PEN(5), "5", &fontLargeNumbers, Black);
 +}
 +
 +int main(void) {
 +	volatile uint16_t x, y;
 +	color_t color = Black;
 +	uint16_t pen = 0;
 +
 +	halInit();
 +	chSysInit();
 +
 +	gdispInit();
 +	tsInit(&TOUCHPADD1);
 +
 +	drawScreen();
 +
 +	while (TRUE) {
 +		x = tsReadX();
 +		y = tsReadY();
 +
 +		/* inside color box ? */
 +		if(y >= OFFSET && y <= COLOR_SIZE) {	 
 +			     if(GET_COLOR(0)) 	color = Black;
 +			else if(GET_COLOR(1))	color = Red;
 +			else if(GET_COLOR(2))	color = Yellow;
 +			else if(GET_COLOR(3))	color = Green;
 +			else if(GET_COLOR(4))	color = Blue;
 +			else if(GET_COLOR(5))	color = White;
 +		
 +		/* inside pen box ? */
 +		} else if(x >= OFFSET && x <= PEN_SIZE) {
 +			     if(GET_PEN(1))		pen = 0;
 +			else if(GET_PEN(2))		pen = 1;
 +			else if(GET_PEN(3))		pen = 2;
 +			else if(GET_PEN(4))		pen = 3;
 +			else if(GET_PEN(5))		pen = 4;		
 +
 +		/* inside drawing area ? */
 +		} else if(DRAW_AREA(x, y)) {
 +			if(pen == 0)
 +				gdispDrawPixel(x, y, color);
 +			else
 +				gdispFillCircle(x, y, pen, color);
 +		}
 +	}
 +}
 +
  | 
