From 450ed5273a6ccfc75994d731d05f11a71de812b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20H=C3=A4ggqvist?= Date: Tue, 27 Nov 2007 00:35:52 +0000 Subject: [PATCH] Matrix demo plugin for colour targets. Ported from Ipodlinux who ported it from cmatrix for Linux. Closes FS#7920. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15824 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/CATEGORIES | 1 + apps/plugins/SOURCES | 1 + apps/plugins/bitmaps/native/SOURCES | 3 + apps/plugins/bitmaps/native/matrix_bold.bmp | Bin 0 -> 17694 bytes apps/plugins/bitmaps/native/matrix_normal.bmp | Bin 0 -> 17694 bytes apps/plugins/matrix.c | 301 ++++++++++++++++++ docs/CREDITS | 3 + 7 files changed, 309 insertions(+) create mode 100755 apps/plugins/bitmaps/native/matrix_bold.bmp create mode 100755 apps/plugins/bitmaps/native/matrix_normal.bmp create mode 100644 apps/plugins/matrix.c diff --git a/apps/plugins/CATEGORIES b/apps/plugins/CATEGORIES index 046eb8a5c2..709c5be93c 100644 --- a/apps/plugins/CATEGORIES +++ b/apps/plugins/CATEGORIES @@ -1,3 +1,4 @@ +matrix,demos alpine_cdc,apps battery_bench,apps blackjack,games diff --git a/apps/plugins/SOURCES b/apps/plugins/SOURCES index ebe4aa8b03..609afb2b97 100644 --- a/apps/plugins/SOURCES +++ b/apps/plugins/SOURCES @@ -44,6 +44,7 @@ disktidy.c flipit.c #ifdef HAVE_LCD_BITMAP /* Not for the Player */ +matrix.c maze.c mazezam.c text_editor.c diff --git a/apps/plugins/bitmaps/native/SOURCES b/apps/plugins/bitmaps/native/SOURCES index e6e01036cb..467ff1df76 100644 --- a/apps/plugins/bitmaps/native/SOURCES +++ b/apps/plugins/bitmaps/native/SOURCES @@ -411,6 +411,9 @@ solitaire_suitsi.13x52x1.bmp /* Star */ #ifdef HAVE_LCD_COLOR +/* matrix */ +matrix_bold.bmp +matrix_normal.bmp #if LCD_WIDTH >= 320 && LCD_HEIGHT >= 188 star_tiles.20x20.bmp #elif LCD_WIDTH >= 240 && LCD_HEIGHT >= 143 diff --git a/apps/plugins/bitmaps/native/matrix_bold.bmp b/apps/plugins/bitmaps/native/matrix_bold.bmp new file mode 100755 index 0000000000000000000000000000000000000000..c9a415c3c33731affa5e268305c9676a6fbcf101 GIT binary patch literal 17694 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 literal 0 HcmV?d00001 diff --git a/apps/plugins/matrix.c b/apps/plugins/matrix.c new file mode 100644 index 0000000000..4253b5dd0c --- /dev/null +++ b/apps/plugins/matrix.c @@ -0,0 +1,301 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id: $ + * + * Copyright (C) 1999 Chris Allegretta + * Copyright (C) 2005 Alastair S - ported to podzilla + * Copyright (C) 2005 Jonas Häggqvist - ported to rockbox + * + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +/* + * TODO: + * - The font is a bit large, create smaller one + * - For colour/greyscale displays, the font from the xscreensaver xmatrix + * should be converted and used + * BUGS: + * - The animation "dies" after a few seconds, not sure why. Works in sim. + * Symtom Fixed Oct 2007 GRaTT (Gerritt Gonzales) + */ + + +#include "plugin.h" +PLUGIN_HEADER + +/* Images */ +#define MAXCHARS 27 - 1 +extern const fb_data matrix_bold[]; +extern const fb_data matrix_normal[]; +#define COL_W 14 +#define COL_H 15 + +#define COLS LCD_WIDTH/COL_W +#define ROWS LCD_HEIGHT/COL_H + +#define LEFTMARGIN (LCD_WIDTH-(COLS*COL_W))/2 +#define TOPMARGIN (LCD_HEIGHT-(ROWS*COL_H))/2 + +#if (CONFIG_KEYPAD == IPOD_4G_PAD) +#define MATRIX_EXIT BUTTON_MENU +#define MATRIX_SLEEP_MORE BUTTON_SCROLL_BACK|BUTTON_REPEAT +#define MATRIX_SLEEP_LESS BUTTON_SCROLL_FWD|BUTTON_REPEAT +#define MATRIX_PAUSE BUTTON_PLAY +#elif (CONFIG_KEYPAD == IRIVER_H300_PAD) +#define MATRIX_EXIT BUTTON_OFF +#define MATRIX_SLEEP_MORE BUTTON_UP +#define MATRIX_SLEEP_LESS BUTTON_DOWN +#define MATRIX_PAUSE BUTTON_SELECT +#elif (CONFIG_KEYPAD == IRIVER_H10_PAD) +#define MATRIX_EXIT BUTTON_POWER +#define MATRIX_SLEEP_MORE BUTTON_SCROLL_UP|BUTTON_REPEAT +#define MATRIX_SLEEP_LESS BUTTON_SCROLL_DOWN|BUTTON_REPEAT +#define MATRIX_PAUSE BUTTON_PLAY +#elif (CONFIG_KEYPAD == IAUDIO_X5M5_PAD) +#define MATRIX_EXIT BUTTON_POWER +#define MATRIX_SLEEP_MORE BUTTON_UP +#define MATRIX_SLEEP_LESS BUTTON_DOWN +#define MATRIX_PAUSE BUTTON_PLAY +#elif (CONFIG_KEYPAD == GIGABEAT_PAD) +#define MATRIX_EXIT BUTTON_A +#define MATRIX_SLEEP_MORE BUTTON_UP +#define MATRIX_SLEEP_LESS BUTTON_DOWN +#define MATRIX_PAUSE BUTTON_SELECT +#elif CONFIG_KEYPAD == SANSA_E200_PAD +#define MATRIX_EXIT BUTTON_POWER +#define MATRIX_SLEEP_MORE BUTTON_SCROLL_UP|BUTTON_REPEAT +#define MATRIX_SLEEP_LESS BUTTON_SCROLL_DOWN|BUTTON_REPEAT +#define MATRIX_PAUSE BUTTON_SELECT +#elif CONFIG_KEYPAD == SANSA_C200_PAD +#define MATRIX_EXIT BUTTON_POWER +#define MATRIX_SLEEP_MORE BUTTON_UP +#define MATRIX_SLEEP_LESS BUTTON_DOWN +#define MATRIX_PAUSE BUTTON_SELECT +#else +#error Unsupported keypad +#endif + +#define SLEEP HZ/50 + +/* Codec api pointer */ +static struct plugin_api* rb; + +/* Each position is of this type */ +typedef struct cmatrix { + int val; + int bold; +} cmatrix; + +/* The matrix - who'd have guessed it was just a few hundred bytes? */ +static cmatrix matrix[ROWS][COLS]; +static int length[COLS]; +static int spaces[COLS]; +static int updates[COLS]; + +static void matrix_init(void) { + int i,j; + + /* Seed rand */ + rb->srand(*rb->current_tick); + + /* Make the matrix */ + for (i = 0; i <= ROWS; i++) { + for (j = 0; j <= COLS - 1; j++ ) { + matrix[i][j].val = -1; + matrix[i][j].bold = 0; + } + } + + for (j = 0; j <= COLS - 1; j++) { + /* Set up spaces[] array of how many spaces to skip */ + spaces[j] = rb->rand() % ROWS + 1; + + /* And length of the stream */ + length[j] = rb->rand() % (ROWS - 3) + 3; + + /* Sentinel value for creation of new objects */ + matrix[1][j].val = 129; + + /* And set updates[] array for update speed. */ + updates[j] = rb->rand() % 3 + 1; + } +} + +static void matrix_blit_char(const int row, const int col, int cha) +{ + if (cha == 129 || cha == 2 || cha > MAXCHARS) + cha = 0; + + if (matrix[row][col].bold == 1) { + rb->lcd_bitmap_part(matrix_bold, cha*COL_W, 0, 392, + col*COL_W + LEFTMARGIN, row*COL_H + TOPMARGIN, COL_W, COL_H); + } + else { + rb->lcd_bitmap_part(matrix_normal, cha*COL_W, 0, 392, + col*COL_W + LEFTMARGIN, row*COL_H + TOPMARGIN, COL_W, COL_H); + } +} + +static void matrix_loop(void) +{ + int i, j = 0, y, z, firstcoldone = 0; + static int count = 0; + int randomness = 6; + + count++; + if (count > 4) + count = 1; + + for (j = 0; j <= COLS - 1; j++) { + if (count > updates[j]) { + /* New style scrolling */ + if (matrix[0][j].val == -1 && matrix[1][j].val == 129 + && spaces[j] > 0) { + matrix[0][j].val = -1; + spaces[j]--; + } else if (matrix[0][j].val == -1 && matrix[1][j].val == 129){ + length[j] = rb->rand() % (ROWS - 3) + 3; + matrix[0][j].val = rb->rand() % (MAXCHARS-1) + 1; + if (rb->rand() % 2 == 1) + matrix[0][j].bold = 2; + spaces[j] = rb->rand() % ROWS + 1; + } + i = 0; + y = 0; + firstcoldone = 0; + while (i <= ROWS) { + /* Skip over spaces */ + /* this is whear the characters were disappearing */ +/* + while (i <= ROWS && (matrix[i][j].val == 129 || + matrix[i][j].val == -1)) + i++; +*/ + /* A little more random now for spaces */ + if (rb->rand() % randomness == 1){ + while (i <= ROWS && (matrix[i][j].val == 129 || + matrix[i][j].val == -1)){ + i++; + randomness--; + if(randomness <=1) + randomness = 6;} + }else{ + randomness++; + if(randomness >6) + randomness = 6; + } + + + if (i > ROWS) + break; + + /* Go to the head of this collumn */ + z = i; + y = 0; + while (i <= ROWS && (matrix[i][j].val != 129 && + matrix[i][j].val != -1)) { + i++; + y++; + } + + if (i > ROWS) { + matrix[z][j].val = 129; + matrix[ROWS][j].bold = 1; + matrix_blit_char(z - 1, j, matrix[z][j].val); + continue; + } + + matrix[i][j].val = rb->rand() % (MAXCHARS-1) + 1; + + if (matrix[i - 1][j].bold == 2) { + matrix[i - 1][j].bold = 1; + matrix[i][j].bold = 2; + } + + /* If we're at the top of the collumn and it's reached its + * full length (about to start moving down), we do this + * to get it moving. This is also how we keep segments + * not already growing from growing accidentally => + */ + if (y > length[j] || firstcoldone) { + matrix[z][j].val = 129; + matrix[0][j].val = -1; + } + firstcoldone = 1; + i++; + } + for (i = 1; i <= ROWS; i++) { + if (matrix[i][j].val == 0 || matrix[i][j].bold == 2) { + if (matrix[i][j].val == 0) + matrix_blit_char(i - 1, j, 20); + else + matrix_blit_char(i - 1, j, matrix[i][j].val); + } else { + if (matrix[i][j].val == 1) + matrix_blit_char(i - 1, j, 2); + else if (matrix[i][j].val == -1) + matrix_blit_char(i - 1, j, 129); + else + matrix_blit_char(i - 1, j, matrix[i][j].val); + } + } + } + } +} + +enum plugin_status plugin_start(struct plugin_api* api, void* parameter) { + int button; + int sleep = SLEEP; + bool frozen = false; + + (void)parameter; + rb = api; + + rb->lcd_set_background(LCD_BLACK); + rb->lcd_set_backdrop(NULL); + rb->lcd_clear_display(); + matrix_init(); + + while (1) { + if (!frozen) { + matrix_loop(); + rb->lcd_update(); + rb->sleep(sleep); + } + button = rb->button_get(false); + switch(button) { + case MATRIX_PAUSE: + frozen = !frozen; + break; + case MATRIX_EXIT: + return PLUGIN_OK; + break; + case MATRIX_SLEEP_MORE: + /* Sleep longer */ + sleep += SLEEP; + break; + case MATRIX_SLEEP_LESS: + /* Sleep less */ + sleep -= SLEEP; + if (sleep < 0) sleep = 0; + break; + default: + if (rb->default_event_handler(button) == SYS_USB_CONNECTED) { + return PLUGIN_USB_CONNECTED; + } + break; + } + } + return PLUGIN_OK; +} diff --git a/docs/CREDITS b/docs/CREDITS index 50ccd6a2c5..4e5536e6a8 100644 --- a/docs/CREDITS +++ b/docs/CREDITS @@ -348,6 +348,9 @@ James Espinoza Franz Rühmland Jordan Anderson Maurus Cuelenaere +Chris Allegretta +Alastair S +Gerritt Gonzales The libmad team The wavpack team