X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=app%2Fdemo%2Fdemo.c;h=9c2169ccef7e1236b2c464016341906a902468de;hb=6b7a2e7b20bc7fe05a61c17d6d96eb70c67a09c9;hp=82167d18d987e887a0d071cd08bead6f58fc070d;hpb=3047e012fdf960da206f3c12e97b4e54ce082b9a;p=bertos.git diff --git a/app/demo/demo.c b/app/demo/demo.c old mode 100755 new mode 100644 index 82167d18..9c2169cc --- a/app/demo/demo.c +++ b/app/demo/demo.c @@ -1,61 +1,67 @@ /** * \file * + * This file is part of BeRTOS. + * + * Bertos 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 2 of the License, or + * (at your option) any later version. + * + * This program 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * As a special exception, you may use this file as part of a free software + * library without restriction. Specifically, if other files instantiate + * templates or use macros or inline functions from this file, or you compile + * this file and link it with other files to produce an executable, this + * file does not by itself cause the resulting executable to be covered by + * the GNU General Public License. This exception does not however + * invalidate any other reasons why the executable file might be covered by + * the GNU General Public License. * - * \version $Id$ + * Copyright 2006, 2008 Develer S.r.l. (http://www.develer.com/) + * --> * - * \author Bernardo Innocenti + * \brief Multifunction system test for BeRTOS modules. * - * \brief Windowing system test. + * \version $Id: demo.c 18242 2007-10-08 17:35:23Z marco $ + * \author Bernie Innocenti */ -/*#* - *#* $Log$ - *#* Revision 1.7 2006/05/27 22:31:18 bernie - *#* Clean it up a bit more. - *#* - *#* Revision 1.6 2006/05/27 17:16:38 bernie - *#* Make demos a bit more interesting. - *#* - *#* Revision 1.5 2006/05/15 07:25:29 bernie - *#* Move menu to gui/. - *#* - *#* Revision 1.4 2006/04/27 05:43:07 bernie - *#* Fix naming conventions. - *#* - *#* Revision 1.3 2006/04/11 00:07:32 bernie - *#* Implemenent MF_SAVESEL flag. - *#* - *#* Revision 1.2 2006/03/27 04:49:50 bernie - *#* Add bouncing logo demo. - *#* - *#* Revision 1.1 2006/03/22 09:52:13 bernie - *#* Add demo application. - *#* - *#* Revision 1.1 2006/01/23 23:14:29 bernie - *#* Implement simple, but impressive windowing system. - *#* - *#*/ +#include #include + +#include #include +#include +#include + #include #include #include #include + #include #include #include #include + #include #include -#include /** * Draw a pentacle in the provided bitmap. + * + * This is invoked by the keyboard polling routine, as a poor man's surrogate + * of true task switching. */ void schedule(void) { @@ -76,14 +82,14 @@ static void magic(struct Bitmap *bitmap, coord_t x, coord_t y) gfx_lineTo(bitmap, coords[i]/2 + x, coords[i+1]/3 + y); } -void hello_world(Bitmap *bm) +static void hello_world(Bitmap *bm) { + extern const Font font_ncenB18; const Font *old_font = bm->font; gfx_bitmapClear(bm); /* Set big font */ - extern const Font font_ncenB18; gfx_setFont(bm, &font_ncenB18); text_xprintf(bm, 1, 0, STYLEF_BOLD | TEXT_FILL | TEXT_CENTER, @@ -99,12 +105,12 @@ void hello_world(Bitmap *bm) /** * Show the splash screen */ -void bouncing_logo(Bitmap *bm) +static void bouncing_logo(Bitmap *bm) { const long SPEED_SCALE = 1000; const long GRAVITY_ACCEL = 10; const long BOUNCE_ELASTICITY = 2; - long h = (long)(-project_grl_logo.height) * SPEED_SCALE; + long h = (long)(-bertos_logo.height) * SPEED_SCALE; long speed = 1000; /* Repeat until logo stands still on the bottom edge */ @@ -126,9 +132,9 @@ void bouncing_logo(Bitmap *bm) /* Update graphics */ gfx_bitmapClear(bm); gfx_blitImage(bm, - (bm->width - project_grl_logo.width) / 2, + (bm->width - bertos_logo.width) / 2, h / SPEED_SCALE, - &project_grl_logo); + &bertos_logo); lcd_blitBitmap(bm); timer_delay(10); @@ -142,8 +148,8 @@ void win_demo(Bitmap *bm) Window root_win, small_win, large_win; Bitmap small_bm, large_bm; - uint8_t small_raster[RASTER_SIZE(small_width, small_height)]; - uint8_t large_raster[RASTER_SIZE(large_width, large_height)]; + uint8_t small_raster[RAST_SIZE(small_width, small_height)]; + uint8_t large_raster[RAST_SIZE(large_width, large_height)]; win_create(&root_win, bm); @@ -218,14 +224,24 @@ void win_demo(Bitmap *bm) } } +void proc_demo(void) +{ + proc_testRun(); +} -/* SETTINGS SUBMENU ***************************/ +void timer_demo(void) +{ + timer_testRun(); + timer_testTearDown(); +} + + +/* SETTINGS SUBMENU */ static struct MenuItem settings_items[] = { { (const_iptr_t)"System", 0, (MenuHook)0, (iptr_t)0 }, - { (const_iptr_t)"Mouse", 0, (MenuHook)0, (iptr_t)0 }, - { (const_iptr_t)"Keyboard", 0, (MenuHook)0, (iptr_t)0 }, + { (const_iptr_t)"Language", 0, (MenuHook)0, (iptr_t)0 }, { (const_iptr_t)"Networking", 0, (MenuHook)0, (iptr_t)0 }, { (const_iptr_t)"Date & Time",0, (MenuHook)0, (iptr_t)0 }, { (const_iptr_t)"Power Saving", MIF_TOGGLE, (MenuHook)0, (iptr_t)0 }, @@ -233,7 +249,22 @@ static struct MenuItem settings_items[] = }; static struct Menu settings_menu = { settings_items, "Settings Menu", MF_STICKY | MF_SAVESEL, &lcd_bitmap, 0 }; -/*** DISPLAY MENU ****************************/ + +/* MX SUBMENU */ + +static struct MenuItem mx_items[] = +{ + { (const_iptr_t)"Mouse", MIF_CHECKIT | MIF_EXCLUDE_1 | MIF_EXCLUDE_2, (MenuHook)0, (iptr_t)0 }, + { (const_iptr_t)"Keyboard", MIF_CHECKED | MIF_CHECKIT | MIF_EXCLUDE_0 | MIF_EXCLUDE_2, (MenuHook)0, (iptr_t)0 }, + { (const_iptr_t)"Joystick", MIF_CHECKIT | MIF_EXCLUDE_0 | MIF_EXCLUDE_1, (MenuHook)0, (iptr_t)0 }, + { (const_iptr_t)"Autosave", MIF_CHECKED | MIF_CHECKIT | MIF_TOGGLE, (MenuHook)0, (iptr_t)0 }, + { (const_iptr_t)0, 0, NULL, (iptr_t)0 } +}; + +static struct Menu mx_menu = { mx_items, (const_iptr_t)0, MF_STICKY | MF_SAVESEL, &lcd_bitmap, 0 }; + + +/* DISPLAY SUBMENU */ static struct MenuItem display_items[] = { @@ -246,43 +277,39 @@ static struct MenuItem display_items[] = static struct Menu display_menu = { display_items, "Display Menu", MF_SAVESEL, &lcd_bitmap, 0 }; -/*** SETUP MENU ******************************/ - -static struct MenuItem setup_items[] = -{ - { (const_iptr_t)"S\xC8tup 0", 0, (MenuHook)NULL, (iptr_t)0 }, - { (const_iptr_t)"Set\xDAp 1", 0, (MenuHook)NULL, (iptr_t)0 }, - { (const_iptr_t)0, 0, NULL, NULL } -}; -static struct Menu setup_menu = { setup_items, "Setup Menu", MF_STICKY | MF_SAVESEL, &lcd_bitmap, 0 }; - - -/*** MAIN MENU *******************************/ +/* MAIN MENU */ static struct MenuItem main_items[] = { { (const_iptr_t)"Win Fly", 0, (MenuHook)win_demo, (iptr_t)&lcd_bitmap }, { (const_iptr_t)"Bounce!", 0, (MenuHook)bouncing_logo,(iptr_t)&lcd_bitmap }, { (const_iptr_t)"Hello World", 0, (MenuHook)hello_world, (iptr_t)&lcd_bitmap }, - { (const_iptr_t)"Settings", 0, (MenuHook)menu_handle, (iptr_t)&settings_menu }, + { (const_iptr_t)"Scheduling", 0, (MenuHook)proc_demo, (iptr_t)&lcd_bitmap }, + { (const_iptr_t)"Timer Test", 0, (MenuHook)timer_demo, (iptr_t)&lcd_bitmap }, + { (const_iptr_t)"Menu MX", 0, (MenuHook)menu_handle, (iptr_t)&mx_menu }, { (const_iptr_t)"Display", 0, (MenuHook)menu_handle, (iptr_t)&display_menu }, - { (const_iptr_t)"Setup", 0, (MenuHook)menu_handle, (iptr_t)&setup_menu }, + { (const_iptr_t)"Settings", 0, (MenuHook)menu_handle, (iptr_t)&settings_menu }, { (const_iptr_t)0, 0, NULL, (iptr_t)0 } }; static struct Menu main_menu = { main_items, "Main Menu", MF_STICKY, &lcd_bitmap, 0 }; +static cpu_stack_t monitor_stack[CONFIG_KERN_MINSTACKSIZE / sizeof(cpu_stack_t)]; + int main(int argc, char *argv[]) { emul_init(&argc, argv); + irq_init(); timer_init(); buz_init(); kbd_init(); lcd_init(); proc_init(); + monitor_start(sizeof(monitor_stack), monitor_stack); menu_handle(&main_menu); + timer_cleanup(); emul_cleanup(); return 0; }