1
0
Fork 0
forked from len0rd/rockbox

Revert "Introduce plugin_crt0.c that every plugin links."

Too much errors and no time to fix them now.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27863 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Thomas Martitz 2010-08-23 17:12:26 +00:00
parent abdc5935be
commit 93cb949372
142 changed files with 341 additions and 372 deletions

View file

@ -155,13 +155,9 @@ void* plugin_get_buffer(size_t *buffer_size);
#define PLUGIN_MIN_API_VERSION 190 #define PLUGIN_MIN_API_VERSION 190
/* plugin return codes */ /* plugin return codes */
/* internal returns start at 0x100 to make exit(1..255) work */
#define INTERNAL_PLUGIN_RETVAL_START 0x100
enum plugin_status { enum plugin_status {
PLUGIN_OK = 0, /* PLUGIN_OK == EXIT_SUCCESS */ PLUGIN_OK = 0,
/* 1...255 reserved for exit() */ PLUGIN_USB_CONNECTED,
PLUGIN_USB_CONNECTED = INTERNAL_PLUGIN_RETVAL_START,
PLUGIN_POWEROFF,
PLUGIN_GOTO_WPS, PLUGIN_GOTO_WPS,
PLUGIN_ERROR = -1, PLUGIN_ERROR = -1,
}; };
@ -916,14 +912,14 @@ extern unsigned char plugin_end_addr[];
const struct plugin_header __header \ const struct plugin_header __header \
__attribute__ ((section (".header")))= { \ __attribute__ ((section (".header")))= { \
PLUGIN_MAGIC, TARGET_ID, PLUGIN_API_VERSION, \ PLUGIN_MAGIC, TARGET_ID, PLUGIN_API_VERSION, \
plugin_start_addr, plugin_end_addr, plugin__start, &rb }; plugin_start_addr, plugin_end_addr, plugin_start, &rb };
#else /* PLATFORM_HOSTED */ #else /* PLATFORM_HOSTED */
#define PLUGIN_HEADER \ #define PLUGIN_HEADER \
const struct plugin_api *rb DATA_ATTR; \ const struct plugin_api *rb DATA_ATTR; \
const struct plugin_header __header \ const struct plugin_header __header \
__attribute__((visibility("default"))) = { \ __attribute__((visibility("default"))) = { \
PLUGIN_MAGIC, TARGET_ID, PLUGIN_API_VERSION, \ PLUGIN_MAGIC, TARGET_ID, PLUGIN_API_VERSION, \
NULL, NULL, plugin__start, &rb }; NULL, NULL, plugin_start, &rb };
#endif /* CONFIG_PLATFORM */ #endif /* CONFIG_PLATFORM */
#ifdef PLUGIN_USE_IRAM #ifdef PLUGIN_USE_IRAM
@ -958,7 +954,7 @@ void plugin_tsr(bool (*exit_callback)(bool reenter));
/* defined by the plugin */ /* defined by the plugin */
extern const struct plugin_api *rb; extern const struct plugin_api *rb;
enum plugin_status plugin__start(const void* parameter) enum plugin_status plugin_start(const void* parameter)
NO_PROF_ATTR; NO_PROF_ATTR;
#endif /* __PCTOOL__ */ #endif /* __PCTOOL__ */

View file

@ -22,7 +22,7 @@
#include "plugin.h" #include "plugin.h"
#include "lib/pluginlib_actions.h" #include "lib/pluginlib_actions.h"
PLUGIN_HEADER
const struct button_mapping *plugin_contexts[] = { pla_main_ctx }; const struct button_mapping *plugin_contexts[] = { pla_main_ctx };

View file

@ -36,7 +36,7 @@
/* Only build for (correct) target */ /* Only build for (correct) target */
#if CONFIG_CPU==SH7034 && !(CONFIG_STORAGE & STORAGE_MMC) #if CONFIG_CPU==SH7034 && !(CONFIG_STORAGE & STORAGE_MMC)
PLUGIN_HEADER
#ifdef HAVE_LCD_CHARCELLS /* player model */ #ifdef HAVE_LCD_CHARCELLS /* player model */
#define LINES 2 #define LINES 2

View file

@ -22,7 +22,7 @@
#include "version.h" #include "version.h"
#include "plugin.h" #include "plugin.h"
PLUGIN_HEADER
#define BATTERY_LOG "/battery_bench.txt" #define BATTERY_LOG "/battery_bench.txt"
#define BUF_SIZE 16000 #define BUF_SIZE 16000

View file

@ -26,7 +26,7 @@
#include "midi/sequencer.h" #include "midi/sequencer.h"
#include "midi/midifile.h" #include "midi/midifile.h"
PLUGIN_HEADER
PLUGIN_IRAM_DECLARE PLUGIN_IRAM_DECLARE
/* variable button definitions */ /* variable button definitions */

View file

@ -23,7 +23,7 @@
#include "plugin.h" #include "plugin.h"
#include "lib/jpeg_mem.h" #include "lib/jpeg_mem.h"
PLUGIN_HEADER
/* a null output plugin to save memory and better isolate decode cost */ /* a null output plugin to save memory and better isolate decode cost */
static unsigned int get_size_null(struct bitmap *bm) static unsigned int get_size_null(struct bitmap *bm)

View file

@ -23,7 +23,7 @@
#include "plugin.h" #include "plugin.h"
#include "lib/jpeg_mem.h" #include "lib/jpeg_mem.h"
PLUGIN_HEADER
static unsigned char output; static unsigned char output;
static int output_y = 0; static int output_y = 0;

View file

@ -26,7 +26,7 @@
#include "lib/highscore.h" #include "lib/highscore.h"
#include "lib/playback_control.h" #include "lib/playback_control.h"
PLUGIN_HEADER
/* save files */ /* save files */
#define SCORE_FILE PLUGIN_GAMES_DIR "/blackjack.score" #define SCORE_FILE PLUGIN_GAMES_DIR "/blackjack.score"

View file

@ -22,7 +22,7 @@
#include "time.h" #include "time.h"
#include "lib/fixedpoint.h" #include "lib/fixedpoint.h"
PLUGIN_HEADER
#define SS_TITLE "Bouncer" #define SS_TITLE "Bouncer"

View file

@ -41,7 +41,7 @@
#include "pluginbitmaps/brickmania_break.h" #include "pluginbitmaps/brickmania_break.h"
#endif #endif
PLUGIN_HEADER
/* /*

View file

@ -31,6 +31,8 @@
#include "lib/playback_control.h" #include "lib/playback_control.h"
#include "lib/highscore.h" #include "lib/highscore.h"
PLUGIN_HEADER
/* files */ /* files */
#define SCORE_FILE PLUGIN_GAMES_DIR "/bubbles.score" #define SCORE_FILE PLUGIN_GAMES_DIR "/bubbles.score"
#define SAVE_FILE PLUGIN_GAMES_DIR "/bubbles.save" #define SAVE_FILE PLUGIN_GAMES_DIR "/bubbles.save"

View file

@ -78,7 +78,7 @@ F3: equal to "="
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
#include "math.h" #include "math.h"
PLUGIN_HEADER
#define M_TWOPI (M_PI * 2.0) #define M_TWOPI (M_PI * 2.0)

View file

@ -25,7 +25,7 @@
#include "lib/playback_control.h" #include "lib/playback_control.h"
#include "lib/configfile.h" #include "lib/configfile.h"
PLUGIN_HEADER
#if CONFIG_KEYPAD == RECORDER_PAD #if CONFIG_KEYPAD == RECORDER_PAD
#define CALENDAR_QUIT BUTTON_OFF #define CALENDAR_QUIT BUTTON_OFF

View file

@ -24,7 +24,7 @@
#include "lib/overlay.h" #include "lib/overlay.h"
PLUGIN_HEADER
/* this is the plugin entry point */ /* this is the plugin entry point */
enum plugin_status plugin_start(const void* parameter) enum plugin_status plugin_start(const void* parameter)

View file

@ -49,7 +49,7 @@ struct cb_command {
extern const fb_data chessbox_pieces[]; extern const fb_data chessbox_pieces[];
PLUGIN_HEADER
/* Tile size defined by the assigned bitmap */ /* Tile size defined by the assigned bitmap */
#include "pluginbitmaps/chessbox_pieces.h" #include "pluginbitmaps/chessbox_pieces.h"

View file

@ -21,7 +21,7 @@
#include "plugin.h" #include "plugin.h"
#include "lib/playback_control.h" #include "lib/playback_control.h"
PLUGIN_HEADER
/* variable button definitions */ /* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD #if CONFIG_KEYPAD == RECORDER_PAD

View file

@ -21,7 +21,7 @@
****************************************************************************/ ****************************************************************************/
#include "plugin.h" #include "plugin.h"
PLUGIN_HEADER
#define EXTERN static #define EXTERN static
#define STATIC static #define STATIC static

View file

@ -26,7 +26,7 @@
#include "lib/helper.h" #include "lib/helper.h"
#include "lib/playback_control.h" #include "lib/playback_control.h"
PLUGIN_HEADER
/* /*
Still To do: Still To do:

View file

@ -22,7 +22,7 @@
#include "lib/playback_control.h" #include "lib/playback_control.h"
#include "lib/display_text.h" #include "lib/display_text.h"
PLUGIN_HEADER
#if (CONFIG_KEYPAD == SANSA_E200_PAD) #if (CONFIG_KEYPAD == SANSA_E200_PAD)
#define CLIX_BUTTON_QUIT BUTTON_POWER #define CLIX_BUTTON_QUIT BUTTON_POWER

View file

@ -22,7 +22,6 @@
#include "plugin.h" #include "plugin.h"
#include "time.h" #include "time.h"
#include "lib/pluginlib_actions.h" #include "lib/pluginlib_actions.h"
#include "lib/pluginlib_exit.h"
#include "lib/xlcd.h" #include "lib/xlcd.h"
#include "clock.h" #include "clock.h"
@ -31,7 +30,7 @@
#include "clock_menu.h" #include "clock_menu.h"
#include "clock_settings.h" #include "clock_settings.h"
PLUGIN_HEADER
/* Keymaps */ /* Keymaps */
const struct button_mapping* plugin_contexts[]={ const struct button_mapping* plugin_contexts[]={
@ -57,8 +56,9 @@ const struct button_mapping* plugin_contexts[]={
/************************** /**************************
* Cleanup on plugin return * Cleanup on plugin return
*************************/ *************************/
void cleanup(void) void cleanup(void *parameter)
{ {
(void)parameter;
clock_draw_restore_colors(); clock_draw_restore_colors();
if(clock_settings.general.save_settings == 1) if(clock_settings.general.save_settings == 1)
save_settings(); save_settings();
@ -115,7 +115,6 @@ enum plugin_status plugin_start(const void* parameter){
struct counter counter; struct counter counter;
bool exit_clock = false; bool exit_clock = false;
(void)parameter; (void)parameter;
atexit(cleanup);
#if LCD_DEPTH > 1 #if LCD_DEPTH > 1
rb->lcd_set_backdrop(NULL); rb->lcd_set_backdrop(NULL);
@ -175,7 +174,9 @@ enum plugin_status plugin_start(const void* parameter){
exit_clock=main_menu(); exit_clock=main_menu();
break; break;
default: default:
exit_on_usb(button); if(rb->default_event_handler_ex(button, cleanup, NULL)
== SYS_USB_CONNECTED)
return PLUGIN_USB_CONNECTED;
if(time.second != last_second){ if(time.second != last_second){
last_second=time.second; last_second=time.second;
redraw=true; redraw=true;
@ -192,5 +193,6 @@ enum plugin_status plugin_start(const void* parameter){
} }
} }
cleanup(NULL);
return PLUGIN_OK; return PLUGIN_OK;
} }

View file

@ -24,7 +24,7 @@
#include "lib/playback_control.h" #include "lib/playback_control.h"
#include "lib/pluginlib_actions.h" #include "lib/pluginlib_actions.h"
PLUGIN_HEADER
/* Limits */ /* Limits */
#define MAX_PIECES_COUNT 5 #define MAX_PIECES_COUNT 5

View file

@ -21,7 +21,7 @@
#include "plugin.h" #include "plugin.h"
#include "lib/helper.h" #include "lib/helper.h"
PLUGIN_HEADER
static const char* const credits[] = { static const char* const credits[] = {
#include "credits.raw" /* generated list of names from docs/CREDITS */ #include "credits.raw" /* generated list of names from docs/CREDITS */

View file

@ -37,7 +37,7 @@
#include "plugin.h" #include "plugin.h"
PLUGIN_HEADER
static void aes_encrypt(void* data, uint32_t size) static void aes_encrypt(void* data, uint32_t size)
{ {

View file

@ -22,7 +22,6 @@
***************************************************************************/ ***************************************************************************/
#include "plugin.h" #include "plugin.h"
#include "lib/playergfx.h" #include "lib/playergfx.h"
#include "lib/pluginlib_exit.h"
#if LCD_DEPTH > 1 #if LCD_DEPTH > 1
#include "lib/mylcd.h" /* MYLCD_CFG_RB_XLCD or MYLCD_CFG_PGFX */ #include "lib/mylcd.h" /* MYLCD_CFG_RB_XLCD or MYLCD_CFG_PGFX */
#include "lib/grey.h" #include "lib/grey.h"
@ -33,6 +32,8 @@
#include "lib/xlcd.h" #include "lib/xlcd.h"
#include "lib/fixedpoint.h" #include "lib/fixedpoint.h"
PLUGIN_HEADER
/* Loops that the values are displayed */ /* Loops that the values are displayed */
#define DISP_TIME 30 #define DISP_TIME 30
@ -610,8 +611,10 @@ static void cube_draw(void)
} }
} }
void cleanup(void) void cleanup(void *parameter)
{ {
(void)parameter;
#ifdef USEGSLIB #ifdef USEGSLIB
grey_release(); grey_release();
#elif defined HAVE_LCD_CHARCELLS #elif defined HAVE_LCD_CHARCELLS
@ -635,7 +638,7 @@ enum plugin_status plugin_start(const void* parameter)
bool highspeed = false; bool highspeed = false;
bool paused = false; bool paused = false;
bool redraw = true; bool redraw = true;
bool quit = false; bool exit = false;
(void)(parameter); (void)(parameter);
@ -648,7 +651,6 @@ enum plugin_status plugin_start(const void* parameter)
rb->splash(HZ, "Couldn't init greyscale display"); rb->splash(HZ, "Couldn't init greyscale display");
return PLUGIN_ERROR; return PLUGIN_ERROR;
} }
/* init lcd_ function pointers */ /* init lcd_ function pointers */
lcdfuncs.update = rb->lcd_update; lcdfuncs.update = rb->lcd_update;
lcdfuncs.clear_display = rb->lcd_clear_display; lcdfuncs.clear_display = rb->lcd_clear_display;
@ -671,8 +673,7 @@ enum plugin_status plugin_start(const void* parameter)
pgfx_display(0, 0); pgfx_display(0, 0);
#endif #endif
atexit(cleanup); while(!exit)
while(!quit)
{ {
if (redraw) if (redraw)
{ {
@ -829,17 +830,24 @@ enum plugin_status plugin_start(const void* parameter)
case CUBE_RC_QUIT: case CUBE_RC_QUIT:
#endif #endif
case CUBE_QUIT: case CUBE_QUIT:
exit(EXIT_SUCCESS); exit = true;
break; break;
default: default:
exit_on_usb(button); if (rb->default_event_handler_ex(button, cleanup, NULL)
== SYS_USB_CONNECTED)
return PLUGIN_USB_CONNECTED;
break; break;
} }
if (button != BUTTON_NONE) if (button != BUTTON_NONE)
lastbutton = button; lastbutton = button;
} }
#ifdef USEGSLIB
grey_release();
#elif defined(HAVE_LCD_CHARCELLS)
pgfx_release();
#endif
return PLUGIN_OK; return PLUGIN_OK;
} }

View file

@ -22,12 +22,11 @@
****************************************************************************/ ****************************************************************************/
#include "plugin.h" #include "plugin.h"
#include "lib/pluginlib_exit.h"
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
#include "lib/pluginlib_actions.h" #include "lib/pluginlib_actions.h"
#include "lib/helper.h" #include "lib/helper.h"
PLUGIN_HEADER
#define DEFAULT_WAIT_TIME 3 #define DEFAULT_WAIT_TIME 3
#define DEFAULT_NB_POLYGONS 7 #define DEFAULT_NB_POLYGONS 7
@ -260,8 +259,10 @@ void polygons_draw(struct polygon_fifo * polygons, struct screen * display)
} }
} }
void cleanup(void) void cleanup(void *parameter)
{ {
(void)parameter;
backlight_use_settings(); backlight_use_settings();
#ifdef HAVE_REMOTE_LCD #ifdef HAVE_REMOTE_LCD
remote_backlight_use_settings(); remote_backlight_use_settings();
@ -393,6 +394,7 @@ int plugin_main(void)
switch(action) switch(action)
{ {
case DEMYSTIFY_QUIT: case DEMYSTIFY_QUIT:
cleanup(NULL);
return PLUGIN_OK; return PLUGIN_OK;
case DEMYSTIFY_ADD_POLYGON: case DEMYSTIFY_ADD_POLYGON:
@ -419,7 +421,9 @@ int plugin_main(void)
break; break;
default: default:
exit_on_usb(action); if (rb->default_event_handler_ex(action, cleanup, NULL)
== SYS_USB_CONNECTED)
return PLUGIN_USB_CONNECTED;
break; break;
} }
} }
@ -432,8 +436,6 @@ enum plugin_status plugin_start(const void* parameter)
int ret; int ret;
(void)parameter; (void)parameter;
atexit(cleanup);
#if LCD_DEPTH > 1 #if LCD_DEPTH > 1
rb->lcd_set_backdrop(NULL); rb->lcd_set_backdrop(NULL);
#endif #endif

View file

@ -45,7 +45,7 @@ struct dices
}; };
#define PRINT_BUFFER_LENGTH MAX_DICES*4 #define PRINT_BUFFER_LENGTH MAX_DICES*4
PLUGIN_HEADER
static struct dices dice; static struct dices dice;
static int sides_index; static int sides_index;

View file

@ -22,7 +22,7 @@
#include "plugin.h" #include "plugin.h"
#include "lib/simple_viewer.h" #include "lib/simple_viewer.h"
PLUGIN_HEADER
#define MIN_DESC_BUF_SIZE 0x400 /* arbitrary minimum size for description */ #define MIN_DESC_BUF_SIZE 0x400 /* arbitrary minimum size for description */

View file

@ -21,7 +21,7 @@
#include "plugin.h" #include "plugin.h"
#include "errno.h" #include "errno.h"
PLUGIN_HEADER
/* function return values */ /* function return values */
enum tidy_return enum tidy_return

View file

@ -41,7 +41,7 @@
#include "st_stuff.h" #include "st_stuff.h"
#include "lib/helper.h" #include "lib/helper.h"
PLUGIN_HEADER
PLUGIN_IRAM_DECLARE PLUGIN_IRAM_DECLARE
extern boolean timingdemo, singledemo, demoplayback, fastdemo; // killough extern boolean timingdemo, singledemo, demoplayback, fastdemo; // killough

View file

@ -45,7 +45,7 @@ To do:
- The Irish currency needs 6 digits after the . to have sufficient precision on big number - The Irish currency needs 6 digits after the . to have sufficient precision on big number
*/ */
PLUGIN_HEADER
/* Name and path of the config file*/ /* Name and path of the config file*/
static const char cfg_filename[] = "euroconverter.cfg"; static const char cfg_filename[] = "euroconverter.cfg";
@ -387,8 +387,10 @@ static int euro_menu(void)
/* Call when the program end */ /* Call when the program end */
static void euro_exit(void) static void euro_exit(void *parameter)
{ {
(void)parameter;
//Restore the old pattern (i don't find another way to do this. An idea?) //Restore the old pattern (i don't find another way to do this. An idea?)
rb->lcd_unlock_pattern(heuro); rb->lcd_unlock_pattern(heuro);
rb->lcd_unlock_pattern(hhome); rb->lcd_unlock_pattern(hhome);
@ -409,7 +411,6 @@ enum plugin_status plugin_start(const void* parameter)
/* if you don't use the parameter, you can do like /* if you don't use the parameter, you can do like
this to avoid the compiler warning about it */ this to avoid the compiler warning about it */
(void)parameter; (void)parameter;
atexit(euro_exit);
/*Get the pattern handle*/ /*Get the pattern handle*/
heuro=rb->lcd_get_locked_pattern(); heuro=rb->lcd_get_locked_pattern();
@ -586,7 +587,9 @@ enum plugin_status plugin_start(const void* parameter)
break; break;
default: default:
exit_on_usb(button); if (rb->default_event_handler_ex(button, euro_exit, NULL)
== SYS_USB_CONNECTED)
return PLUGIN_USB_CONNECTED;
break; break;
} }
/*Display*/ /*Display*/
@ -596,6 +599,7 @@ enum plugin_status plugin_start(const void* parameter)
e=mydiv(h,currency[country]); e=mydiv(h,currency[country]);
display(e,h,pos); display(e,h,pos);
} }
euro_exit(NULL);
return PLUGIN_OK; return PLUGIN_OK;
} }

View file

@ -29,7 +29,7 @@
#endif #endif
#include "lib/mylcd.h" #include "lib/mylcd.h"
PLUGIN_HEADER
#ifndef HAVE_LCD_COLOR #ifndef HAVE_LCD_COLOR
GREY_INFO_STRUCT GREY_INFO_STRUCT

View file

@ -41,6 +41,8 @@
#define FIRE_XPOS 0 #define FIRE_XPOS 0
#endif #endif
PLUGIN_HEADER
#ifndef HAVE_LCD_COLOR #ifndef HAVE_LCD_COLOR
GREY_INFO_STRUCT GREY_INFO_STRUCT
static unsigned char draw_buffer[FIRE_WIDTH]; static unsigned char draw_buffer[FIRE_WIDTH];

View file

@ -22,7 +22,7 @@
#include "lib/helper.h" #include "lib/helper.h"
#include "lib/playback_control.h" #include "lib/playback_control.h"
PLUGIN_HEADER
/*** /***
* FIREWORKS.C by ZAKK ROBERTS * FIREWORKS.C by ZAKK ROBERTS

View file

@ -77,7 +77,7 @@
#error this platform is not (yet) flashable #error this platform is not (yet) flashable
#endif #endif
PLUGIN_HEADER
#if CONFIG_KEYPAD == ONDIO_PAD /* limited keypad */ #if CONFIG_KEYPAD == ONDIO_PAD /* limited keypad */
#define KEY1 BUTTON_LEFT #define KEY1 BUTTON_LEFT

View file

@ -20,7 +20,7 @@
****************************************************************************/ ****************************************************************************/
#include "plugin.h" #include "plugin.h"
PLUGIN_HEADER
/* variable button definitions */ /* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD #if CONFIG_KEYPAD == RECORDER_PAD

View file

@ -29,7 +29,6 @@
#include "fractal_rect.h" #include "fractal_rect.h"
#include "fractal_sets.h" #include "fractal_sets.h"
#include "mandelbrot_set.h" #include "mandelbrot_set.h"
#include "lib/pluginlib_exit.h"
#ifdef USEGSLIB #ifdef USEGSLIB
GREY_INFO_STRUCT GREY_INFO_STRUCT
@ -42,7 +41,7 @@ static size_t gbuf_size = 0;
#define REDRAW_FULL 2 #define REDRAW_FULL 2
#define REDRAW_FULL_OVERLAY 3 #define REDRAW_FULL_OVERLAY 3
PLUGIN_HEADER
/* returns 1 if a button has been pressed, 0 otherwise */ /* returns 1 if a button has been pressed, 0 otherwise */
static int button_yield(void *ctx) static int button_yield(void *ctx)
@ -86,8 +85,9 @@ static int button_yield(void *ctx)
} }
} }
static void cleanup(void) static void cleanup(void *parameter)
{ {
(void)parameter;
#ifdef USEGSLIB #ifdef USEGSLIB
grey_release(); grey_release();
#endif #endif
@ -109,13 +109,11 @@ enum plugin_status plugin_start(const void* parameter)
if (!grey_init(gbuf, gbuf_size, GREY_ON_COP, LCD_WIDTH, LCD_HEIGHT, NULL)) if (!grey_init(gbuf, gbuf_size, GREY_ON_COP, LCD_WIDTH, LCD_HEIGHT, NULL))
{ {
rb->splash(HZ, "Couldn't init greyscale display"); rb->splash(HZ, "Couldn't init greyscale display");
return PLUGIN_ERROR; return 0;
} }
grey_show(true); /* switch on greyscale overlay */ grey_show(true); /* switch on greyscale overlay */
#endif #endif
/* release greylib on exit */
atexit(cleanup);
#if LCD_DEPTH > 1 #if LCD_DEPTH > 1
rb->lcd_set_backdrop(NULL); rb->lcd_set_backdrop(NULL);
#endif #endif
@ -163,6 +161,9 @@ enum plugin_status plugin_start(const void* parameter)
case FRACTAL_RC_QUIT: case FRACTAL_RC_QUIT:
#endif #endif
case FRACTAL_QUIT: case FRACTAL_QUIT:
#ifdef USEGSLIB
grey_release();
#endif
return PLUGIN_OK; return PLUGIN_OK;
case FRACTAL_ZOOM_OUT: case FRACTAL_ZOOM_OUT:
@ -245,13 +246,18 @@ enum plugin_status plugin_start(const void* parameter)
break; break;
default: default:
exit_on_usb(button); if (rb->default_event_handler_ex(button, cleanup, NULL)
== SYS_USB_CONNECTED)
return PLUGIN_USB_CONNECTED;
break; break;
} }
if (button != BUTTON_NONE) if (button != BUTTON_NONE)
lastbutton = button; lastbutton = button;
} }
#ifdef USEGSLIB
grey_release();
#endif
return PLUGIN_OK; return PLUGIN_OK;
} }

View file

@ -23,7 +23,7 @@
#include "lib/pluginlib_exit.h" #include "lib/pluginlib_exit.h"
#include "lib/pluginlib_actions.h" #include "lib/pluginlib_actions.h"
PLUGIN_HEADER
extern int frotz_main(void); extern int frotz_main(void);
extern bool hot_key_quit(void); extern bool hot_key_quit(void);
@ -41,7 +41,7 @@ enum plugin_status plugin_start(const void* parameter)
int i; int i;
char* ext; char* ext;
atexit(atexit_cleanup); PLUGINLIB_EXIT_INIT_ATEXIT(atexit_cleanup);
if (!parameter) if (!parameter)
return PLUGIN_ERROR; return PLUGIN_ERROR;

View file

@ -24,7 +24,7 @@
#include "lib/overlay.h" #include "lib/overlay.h"
PLUGIN_HEADER
enum plugin_status plugin_start(const void* parameter) enum plugin_status plugin_start(const void* parameter)
{ {

View file

@ -23,7 +23,7 @@
#include "lib/playback_control.h" #include "lib/playback_control.h"
#include "lib/configfile.h" #include "lib/configfile.h"
PLUGIN_HEADER
#include "goban.h" #include "goban.h"
#include "game.h" #include "game.h"

View file

@ -27,7 +27,7 @@
#if defined(HAVE_LCD_BITMAP) && (LCD_DEPTH < 4) #if defined(HAVE_LCD_BITMAP) && (LCD_DEPTH < 4)
#include "lib/grey.h" #include "lib/grey.h"
PLUGIN_HEADER
/* variable button definitions */ /* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD #if CONFIG_KEYPAD == RECORDER_PAD
@ -316,7 +316,9 @@ int main(void)
button = rb->button_get(true); button = rb->button_get(true);
exit_on_usb(button); if (rb->default_event_handler_ex(button, cleanup, NULL)
== SYS_USB_CONNECTED)
return PLUGIN_USB_CONNECTED;
if (button & GREYSCALE_SHIFT) if (button & GREYSCALE_SHIFT)
{ {
@ -367,6 +369,8 @@ int main(void)
case GREYSCALE_RC_OFF: case GREYSCALE_RC_OFF:
#endif #endif
case GREYSCALE_OFF: case GREYSCALE_OFF:
cleanup(NULL);
return PLUGIN_OK; return PLUGIN_OK;
} }
} }
@ -378,7 +382,6 @@ enum plugin_status plugin_start(const void* parameter)
{ {
(void)parameter; (void)parameter;
atexit(cleanup);
return main(); return main();
} }

View file

@ -24,7 +24,7 @@
/* This macros must always be included. Should be placed at the top by /* This macros must always be included. Should be placed at the top by
convention, although the actual position doesn't matter */ convention, although the actual position doesn't matter */
PLUGIN_HEADER
/* this is the plugin entry point */ /* this is the plugin entry point */
enum plugin_status plugin_start(const void* parameter) enum plugin_status plugin_start(const void* parameter)

View file

@ -25,7 +25,7 @@
#include <lib/configfile.h> #include <lib/configfile.h>
#include "imageviewer.h" #include "imageviewer.h"
PLUGIN_HEADER
#ifdef USEGSLIB #ifdef USEGSLIB
GREY_INFO_STRUCT GREY_INFO_STRUCT

View file

@ -61,7 +61,7 @@
#define FIRE_WIDTH BMPWIDTH_invadrox_fire #define FIRE_WIDTH BMPWIDTH_invadrox_fire
#define FIRE_HEIGHT BMPHEIGHT_invadrox_fire #define FIRE_HEIGHT BMPHEIGHT_invadrox_fire
PLUGIN_HEADER
/* Original graphics is only 1bpp so it should be portable /* Original graphics is only 1bpp so it should be portable
* to most targets. But for now, only support the simple ones. * to most targets. But for now, only support the simple ones.

View file

@ -35,7 +35,7 @@ ssize_t audiobuf_size;
#ifdef PLATFORM_ID #ifdef PLATFORM_ID
PLUGIN_HEADER
#if CONFIG_KEYPAD == IRIVER_H100_PAD #if CONFIG_KEYPAD == IRIVER_H100_PAD
#define KEY1 BUTTON_OFF #define KEY1 BUTTON_OFF

View file

@ -25,7 +25,7 @@
****************************************************************************/ ****************************************************************************/
#include "plugin.h" #include "plugin.h"
PLUGIN_HEADER
ssize_t buf_size; ssize_t buf_size;
static char *filename; static char *filename;

View file

@ -22,9 +22,8 @@
#include "plugin.h" #include "plugin.h"
#include "lib/pluginlib_actions.h" #include "lib/pluginlib_actions.h"
#include "lib/picture.h" #include "lib/picture.h"
#include "lib/pluginlib_exit.h"
PLUGIN_HEADER
const struct button_mapping* plugin_contexts[]={pla_main_ctx}; const struct button_mapping* plugin_contexts[]={pla_main_ctx};
#define NB_PICTURES 9 #define NB_PICTURES 9
@ -110,8 +109,9 @@ void patterns_deinit(struct screen* display)
#endif /* HAVE_LCD_CHARCELLS */ #endif /* HAVE_LCD_CHARCELLS */
/*Call when the program exit*/ /*Call when the program exit*/
void jackpot_exit(void) void jackpot_exit(void *parameter)
{ {
(void)parameter;
#ifdef HAVE_LCD_CHARCELLS #ifdef HAVE_LCD_CHARCELLS
patterns_deinit(rb->screens[SCREEN_MAIN]); patterns_deinit(rb->screens[SCREEN_MAIN]);
#endif /* HAVE_LCD_CHARCELLS */ #endif /* HAVE_LCD_CHARCELLS */
@ -298,7 +298,6 @@ enum plugin_status plugin_start(const void* parameter)
int action, i; int action, i;
struct jackpot game; struct jackpot game;
(void)parameter; (void)parameter;
atexit(jackpot_exit);
rb->srand(*rb->current_tick); rb->srand(*rb->current_tick);
#ifdef HAVE_LCD_CHARCELLS #ifdef HAVE_LCD_CHARCELLS
patterns_init(rb->screens[SCREEN_MAIN]); patterns_init(rb->screens[SCREEN_MAIN]);
@ -324,9 +323,12 @@ enum plugin_status plugin_start(const void* parameter)
break; break;
default: default:
exit_on_usb(action); if (rb->default_event_handler_ex(action, jackpot_exit, NULL)
== SYS_USB_CONNECTED)
return PLUGIN_USB_CONNECTED;
break; break;
} }
} }
jackpot_exit(NULL);
return PLUGIN_OK; return PLUGIN_OK;
} }

View file

@ -29,7 +29,7 @@
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
/* button definitions */ /* button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD #if CONFIG_KEYPAD == RECORDER_PAD

View file

@ -21,7 +21,7 @@
#include "plugin.h" #include "plugin.h"
#include "lib/playback_control.h" #include "lib/playback_control.h"
#include "lib/md5.h" #include "lib/md5.h"
PLUGIN_HEADER
#define KEYBOX_FILE PLUGIN_APPS_DIR "/keybox.dat" #define KEYBOX_FILE PLUGIN_APPS_DIR "/keybox.dat"
#define BLOCK_SIZE 8 #define BLOCK_SIZE 8

View file

@ -25,7 +25,7 @@
#include "plugin.h" #include "plugin.h"
#include "lib/helper.h" #include "lib/helper.h"
PLUGIN_HEADER
/* variable button definitions - only targets with a colour display */ /* variable button definitions - only targets with a colour display */
#if defined(HAVE_LCD_COLOR) #if defined(HAVE_LCD_COLOR)

View file

@ -2,6 +2,7 @@ gcc-support.c
pluginlib_actions.c pluginlib_actions.c
helper.c helper.c
md5.c md5.c
pluginlib_exit.c
jhash.c jhash.c
configfile.c configfile.c
fixedpoint.c fixedpoint.c

View file

@ -0,0 +1,25 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2009 by Maurus Cuelenaere
*
* This program 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 software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
#include "pluginlib_exit.h"
jmp_buf __exit_env DATA_ATTR;

View file

@ -22,33 +22,35 @@
#ifndef __PLUGINLIB_EXIT_H__ #ifndef __PLUGINLIB_EXIT_H__
#define __PLUGINLIB_EXIT_H__ #define __PLUGINLIB_EXIT_H__
/* make sure we are in sync with the real definitions, especially on #include "config.h"
* hosted systems */ #if (CONFIG_PLATFORM & PLATFORM_NATIVE)
#include <stdlib.h> #include "../../codecs/lib/setjmp.h"
#include "gcc_extensions.h" #else
#include <setjmp.h>
/* these are actually implemented in plugin_crt0.c which all plugins link */
extern int atexit(void (*func)(void));
extern void exit(int status) NORETURN_ATTR;
/* these don't call the exit handlers */
extern void _exit(int status) NORETURN_ATTR;
/* C99 version */
#define _Exit _exit
#ifndef EXIT_SUCCESS
#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1
#endif #endif
/** #define _PLUGINLIB_EXIT_INIT(atexit) switch(setjmp(__exit_env)) \
* helper function to handle USB connected events coming from { \
* button_get() case 1: \
* atexit \
* it will exit the plugin if usb is detected, but it will call the atexit func return PLUGIN_OK; \
* before actually showing the usb screen case 2: \
* atexit \
* it additionally handles power off as well, with the same behavior return PLUGIN_ERROR; \
case 0: \
default: \
break; \
}
/* Either PLUGINLIB_EXIT_INIT or PLUGINLIB_EXIT_INIT_ATEXIT needs to be placed
* as the first line in plugin_start. The _ATEXIT version will call the named
* no-argument function when exit() is called before exiting the plugin, to
* allow for cleanup.
*/ */
extern void exit_on_usb(int button); #define PLUGINLIB_EXIT_INIT _PLUGINLIB_EXIT_INIT()
#define PLUGINLIB_EXIT_INIT_ATEXIT(atexit) _PLUGINLIB_EXIT_INIT(atexit();)
extern jmp_buf __exit_env;
#define exit(status) longjmp(__exit_env, status != 0 ? 2 : 1)
#endif /* __PLUGINLIB_EXIT_H__ */ #endif /* __PLUGINLIB_EXIT_H__ */

View file

@ -21,7 +21,7 @@
#include "plugin.h" #include "plugin.h"
#include "lib/playergfx.h" #include "lib/playergfx.h"
PLUGIN_HEADER
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
#define DISPLAY_WIDTH LCD_WIDTH #define DISPLAY_WIDTH LCD_WIDTH

View file

@ -24,7 +24,7 @@
#include "lib/helper.h" #include "lib/helper.h"
#include <ctype.h> #include <ctype.h>
PLUGIN_HEADER
#define MAX_LINE_LEN 256 #define MAX_LINE_LEN 256
#define LRC_BUFFER_SIZE 0x3000 /* 12 kiB */ #define LRC_BUFFER_SIZE 0x3000 /* 12 kiB */

View file

@ -20,6 +20,7 @@
****************************************************************************/ ****************************************************************************/
#include "plugin.h" #include "plugin.h"
#include "lib/pluginlib_exit.h"
#include "lua.h" #include "lua.h"
#include "lauxlib.h" #include "lauxlib.h"
#include "lualib.h" #include "lualib.h"
@ -27,7 +28,7 @@
#include "rockmalloc.h" #include "rockmalloc.h"
#include "luadir.h" #include "luadir.h"
PLUGIN_HEADER
static const luaL_Reg lualibs[] = { static const luaL_Reg lualibs[] = {
{"", luaopen_base}, {"", luaopen_base},
@ -147,6 +148,8 @@ enum plugin_status plugin_start(const void* parameter)
const char* filename; const char* filename;
int status; int status;
PLUGINLIB_EXIT_INIT
if (parameter == NULL) if (parameter == NULL)
{ {
rb->splash(HZ, "Play a .lua file!"); rb->splash(HZ, "Play a .lua file!");

View file

@ -34,7 +34,7 @@
#include "plugin.h" #include "plugin.h"
PLUGIN_HEADER
/* Images */ /* Images */
#include "pluginbitmaps/matrix_bold.h" #include "pluginbitmaps/matrix_bold.h"

View file

@ -33,7 +33,7 @@
#include "plugin.h" #include "plugin.h"
#include "lib/helper.h" #include "lib/helper.h"
PLUGIN_HEADER
/* key assignments */ /* key assignments */

View file

@ -25,7 +25,7 @@
#include "lib/playback_control.h" #include "lib/playback_control.h"
/* Include standard plugin macro */ /* Include standard plugin macro */
PLUGIN_HEADER
#if (CONFIG_KEYPAD == IPOD_3G_PAD) #if (CONFIG_KEYPAD == IPOD_3G_PAD)
# define MAZEZAM_MENU BUTTON_MENU # define MAZEZAM_MENU BUTTON_MENU

View file

@ -22,7 +22,7 @@
#include "plugin.h" #include "plugin.h"
#include "lib/md5.h" #include "lib/md5.h"
PLUGIN_HEADER
#define BUFFERSIZE 16384 #define BUFFERSIZE 16384

View file

@ -20,9 +20,8 @@
****************************************************************************/ ****************************************************************************/
#include "plugin.h" #include "plugin.h"
#include "lib/pluginlib_actions.h" #include "lib/pluginlib_actions.h"
#include "lib/pluginlib_exit.h"
PLUGIN_HEADER
#if CONFIG_CODEC != SWCODEC #if CONFIG_CODEC != SWCODEC
/* tick sound from a metronome */ /* tick sound from a metronome */
@ -847,14 +846,13 @@ void timer_callback(void)
} }
} }
void cleanup(void) void cleanup(void *parameter)
{ {
(void)parameter;
rb->timer_unregister(); rb->timer_unregister();
MET_PLAY_STOP; /* stop audio ISR */ MET_PLAY_STOP; /* stop audio ISR */
rb->led(0); rb->led(0);
#if CONFIG_CODEC == SWCODEC
rb->pcm_set_frequency(HW_SAMPR_DEFAULT);
#endif
} }
void tap(void) void tap(void)
@ -887,9 +885,9 @@ enum plugin_status plugin_start(const void* parameter)
{ {
int button; int button;
static int last_button = BUTTON_NONE; static int last_button = BUTTON_NONE;
enum plugin_status status;
(void)parameter; (void)parameter;
atexit(cleanup);
if (MET_IS_PLAYING) if (MET_IS_PLAYING)
MET_PLAY_STOP; /* stop audio IS */ MET_PLAY_STOP; /* stop audio IS */
@ -929,7 +927,9 @@ enum plugin_status plugin_start(const void* parameter)
case METRONOME_QUIT: case METRONOME_QUIT:
/* get out of here */ /* get out of here */
return PLUGIN_OK; cleanup(NULL);
status = PLUGIN_OK;
goto metronome_exit;
case METRONOME_PAUSE: case METRONOME_PAUSE:
if(!sound_paused) if(!sound_paused)
@ -981,7 +981,12 @@ enum plugin_status plugin_start(const void* parameter)
#endif #endif
default: default:
exit_on_usb(button); if (rb->default_event_handler_ex(button, cleanup, NULL)
== SYS_USB_CONNECTED)
{
status = PLUGIN_USB_CONNECTED;
goto metronome_exit;
}
reset_tap = false; reset_tap = false;
break; break;
@ -993,5 +998,11 @@ enum plugin_status plugin_start(const void* parameter)
} }
rb->yield(); rb->yield();
} }
metronome_exit:
#if CONFIG_CODEC == SWCODEC
rb->pcm_set_frequency(HW_SAMPR_DEFAULT);
#endif
return status;
} }

View file

@ -25,7 +25,7 @@
#include "sequencer.h" #include "sequencer.h"
#include "midifile.h" #include "midifile.h"
PLUGIN_HEADER
PLUGIN_IRAM_DECLARE PLUGIN_IRAM_DECLARE
/* variable button definitions */ /* variable button definitions */
@ -450,6 +450,7 @@ static int midimain(const void * filename)
enum plugin_status plugin_start(const void* parameter) enum plugin_status plugin_start(const void* parameter)
{ {
int retval; int retval;
PLUGINLIB_EXIT_INIT;
PLUGIN_IRAM_INIT(rb) PLUGIN_IRAM_INIT(rb)

View file

@ -25,7 +25,7 @@
#include "lib/playback_control.h" #include "lib/playback_control.h"
PLUGIN_HEADER
/* what the minesweeper() function can return */ /* what the minesweeper() function can return */
enum minesweeper_status { enum minesweeper_status {

View file

@ -22,7 +22,7 @@
#include "lib/playergfx.h" #include "lib/playergfx.h"
#include "lib/mylcd.h" #include "lib/mylcd.h"
PLUGIN_HEADER
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
#define GFX_X (LCD_WIDTH/2-1) #define GFX_X (LCD_WIDTH/2-1)

View file

@ -14,7 +14,7 @@
#include <inttypes.h> #include <inttypes.h>
#include "plugin.h" #include "plugin.h"
PLUGIN_HEADER
PLUGIN_IRAM_DECLARE PLUGIN_IRAM_DECLARE
#define SAMP_PER_FRAME 1152 #define SAMP_PER_FRAME 1152

View file

@ -108,7 +108,7 @@
#include "stream_thread.h" #include "stream_thread.h"
#include "stream_mgr.h" #include "stream_mgr.h"
PLUGIN_HEADER
PLUGIN_IRAM_DECLARE PLUGIN_IRAM_DECLARE
/* button definitions */ /* button definitions */

View file

@ -48,7 +48,7 @@ V1.2 : 2003-07-30
take a match. Later you are obliged to take at least one.) take a match. Later you are obliged to take at least one.)
*/ */
PLUGIN_HEADER
/*Pattern for the game*/ /*Pattern for the game*/
static unsigned char smile[]={0x00, 0x11, 0x04, 0x04, 0x00, 0x11, 0x0E}; /* :-) */ static unsigned char smile[]={0x00, 0x11, 0x04, 0x04, 0x00, 0x11, 0x0E}; /* :-) */
@ -144,7 +144,6 @@ enum plugin_status plugin_start(const void* parameter)
int x,v,min; int x,v,min;
bool ok; bool ok;
bool go; bool go;
atexit(nim_exit);
/* if you don't use the parameter, you can do like /* if you don't use the parameter, you can do like
this to avoid the compiler warning about it */ this to avoid the compiler warning about it */
@ -194,6 +193,7 @@ enum plugin_status plugin_start(const void* parameter)
{ {
case BUTTON_STOP|BUTTON_REL: case BUTTON_STOP|BUTTON_REL:
go = true; go = true;
nim_exit(NULL);
return PLUGIN_OK; return PLUGIN_OK;
break; break;
@ -214,7 +214,9 @@ enum plugin_status plugin_start(const void* parameter)
break; break;
default: default:
exit_on_usb(button); if (rb->default_event_handler_ex(button, nim_exit,
NULL) == SYS_USB_CONNECTED)
return PLUGIN_USB_CONNECTED;
break; break;
} }
display_first_line(x); display_first_line(x);
@ -289,6 +291,7 @@ enum plugin_status plugin_start(const void* parameter)
min=1; min=1;
} }
} }
nim_exit(NULL);
return PLUGIN_OK; return PLUGIN_OK;
} }
#endif #endif

View file

@ -23,13 +23,12 @@
#include "plugin.h" #include "plugin.h"
#include "lib/helper.h" #include "lib/helper.h"
#include "lib/pluginlib_exit.h"
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
#include "lib/xlcd.h" #include "lib/xlcd.h"
#include "lib/configfile.h" #include "lib/configfile.h"
PLUGIN_HEADER
/* variable button definitions */ /* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD #if CONFIG_KEYPAD == RECORDER_PAD
@ -752,8 +751,9 @@ void anim_vertical(int cur_left, int cur_right)
last_pos = cur_y; last_pos = cur_y;
} }
void cleanup(void) void cleanup(void *parameter)
{ {
(void)parameter;
#if LCD_DEPTH > 1 #if LCD_DEPTH > 1
rb->lcd_set_foreground(LCD_DEFAULT_FG); rb->lcd_set_foreground(LCD_DEFAULT_FG);
rb->lcd_set_background(LCD_DEFAULT_BG); rb->lcd_set_background(LCD_DEFAULT_BG);
@ -772,7 +772,6 @@ enum plugin_status plugin_start(const void* parameter)
(void)parameter; (void)parameter;
atexit(cleanup);
configfile_load(cfg_filename, disk_config, configfile_load(cfg_filename, disk_config,
sizeof(disk_config) / sizeof(disk_config[0]), sizeof(disk_config) / sizeof(disk_config[0]),
CFGFILE_MINVERSION); CFGFILE_MINVERSION);
@ -893,7 +892,9 @@ enum plugin_status plugin_start(const void* parameter)
break; break;
default: default:
exit_on_usb(button); if (rb->default_event_handler_ex(button, cleanup, NULL)
== SYS_USB_CONNECTED)
return PLUGIN_USB_CONNECTED;
break; break;
} }
if (button != BUTTON_NONE) if (button != BUTTON_NONE)
@ -907,6 +908,7 @@ enum plugin_status plugin_start(const void* parameter)
displaymsg = true; displaymsg = true;
} }
} }
cleanup(NULL);
if (rb->memcmp(&osc, &osc_disk, sizeof(osc))) /* save settings if changed */ if (rb->memcmp(&osc, &osc_disk, sizeof(osc))) /* save settings if changed */
{ {
rb->memcpy(&osc_disk, &osc, sizeof(osc)); rb->memcpy(&osc_disk, &osc, sizeof(osc));

View file

@ -32,7 +32,7 @@
#include "lib/configfile.h" #include "lib/configfile.h"
#include "lib/playback_control.h" #include "lib/playback_control.h"
PLUGIN_HEADER
PLUGIN_IRAM_DECLARE PLUGIN_IRAM_DECLARE
struct pacman_settings { struct pacman_settings {

View file

@ -28,7 +28,7 @@
#include "PDa/src/s_stuff.h" #include "PDa/src/s_stuff.h"
/* Welcome to the PDBox plugin */ /* Welcome to the PDBox plugin */
PLUGIN_HEADER
PLUGIN_IRAM_DECLARE PLUGIN_IRAM_DECLARE
/* Name of the file to open. */ /* Name of the file to open. */

View file

@ -26,7 +26,7 @@
#include "pluginbitmaps/pegbox_header.h" #include "pluginbitmaps/pegbox_header.h"
#include "pluginbitmaps/pegbox_pieces.h" #include "pluginbitmaps/pegbox_pieces.h"
PLUGIN_HEADER
#define CONFIG_FILE_NAME "pegbox.cfg" #define CONFIG_FILE_NAME "pegbox.cfg"

View file

@ -24,7 +24,7 @@
#include "lib/overlay.h" #include "lib/overlay.h"
PLUGIN_HEADER
/* this is the plugin entry point */ /* this is the plugin entry point */
enum plugin_status plugin_start(const void* parameter) enum plugin_status plugin_start(const void* parameter)

View file

@ -27,7 +27,6 @@
#include <albumart.h> #include <albumart.h>
#include "lib/read_image.h" #include "lib/read_image.h"
#include "lib/pluginlib_actions.h" #include "lib/pluginlib_actions.h"
#include "lib/pluginlib_exit.h"
#include "lib/helper.h" #include "lib/helper.h"
#include "lib/configfile.h" #include "lib/configfile.h"
#include "lib/grey.h" #include "lib/grey.h"
@ -35,7 +34,7 @@
#include "lib/feature_wrappers.h" #include "lib/feature_wrappers.h"
#include "lib/buflib.h" #include "lib/buflib.h"
PLUGIN_HEADER
/******************************* Globals ***********************************/ /******************************* Globals ***********************************/
@ -2069,8 +2068,9 @@ void update_scroll_animation(void)
/** /**
Cleanup the plugin Cleanup the plugin
*/ */
void cleanup(void) void cleanup(void *parameter)
{ {
(void) parameter;
int i; int i;
#ifdef HAVE_ADJUSTABLE_CPU_FREQ #ifdef HAVE_ADJUSTABLE_CPU_FREQ
rb->cpu_boost(false); rb->cpu_boost(false);
@ -2610,6 +2610,19 @@ int main(void)
cache_version = CACHE_VERSION; cache_version = CACHE_VERSION;
configfile_save(CONFIG_FILE, config, CONFIG_NUM_ITEMS, CONFIG_VERSION); configfile_save(CONFIG_FILE, config, CONFIG_NUM_ITEMS, CONFIG_VERSION);
#ifdef USEGSLIB
long grey_buf_used;
if (!grey_init(buf, buf_size, GREY_BUFFERED|GREY_ON_COP,
LCD_WIDTH, LCD_HEIGHT, &grey_buf_used))
{
error_wait("Greylib init failed!");
return PLUGIN_ERROR;
}
grey_setfont(FONT_UI);
buf_size -= grey_buf_used;
buf = (void*)(grey_buf_used + (char*)buf);
#endif
buflib_init(&buf_ctx, (void *)buf, buf_size); buflib_init(&buf_ctx, (void *)buf, buf_size);
if (!(empty_slide_hid = read_pfraw(EMPTY_SLIDE, 0))) if (!(empty_slide_hid = read_pfraw(EMPTY_SLIDE, 0)))
@ -2828,7 +2841,9 @@ int main(void)
} }
break; break;
default: default:
exit_on_usb(button); if (rb->default_event_handler_ex(button, cleanup, NULL)
== SYS_USB_CONNECTED)
return PLUGIN_USB_CONNECTED;
break; break;
} }
} }
@ -2840,7 +2855,6 @@ enum plugin_status plugin_start(const void *parameter)
{ {
int ret, i; int ret, i;
(void) parameter; (void) parameter;
atexit(cleanup);
FOR_NB_SCREENS(i) FOR_NB_SCREENS(i)
rb->viewportmanager_theme_enable(i, false, NULL); rb->viewportmanager_theme_enable(i, false, NULL);
@ -2859,21 +2873,6 @@ enum plugin_status plugin_start(const void *parameter)
} }
#endif #endif
#endif #endif
#ifdef USEGSLIB
long grey_buf_used;
if (!grey_init(buf, buf_size, GREY_BUFFERED|GREY_ON_COP,
LCD_WIDTH, LCD_HEIGHT, &grey_buf_used))
{
error_wait("Greylib init failed!");
return PLUGIN_ERROR;
}
grey_setfont(FONT_UI);
buf_size -= grey_buf_used;
buf = (void*)(grey_buf_used + (char*)buf);
#endif
atexit(cleanup);
ret = main(); ret = main();
if ( ret == PLUGIN_OK || ret == PLUGIN_GOTO_WPS) { if ( ret == PLUGIN_OK || ret == PLUGIN_GOTO_WPS) {
if (configfile_save(CONFIG_FILE, config, CONFIG_NUM_ITEMS, if (configfile_save(CONFIG_FILE, config, CONFIG_NUM_ITEMS,
@ -2883,5 +2882,7 @@ enum plugin_status plugin_start(const void *parameter)
ret = PLUGIN_ERROR; ret = PLUGIN_ERROR;
} }
} }
cleanup(NULL);
return ret; return ret;
} }

View file

@ -68,7 +68,7 @@
#include "lib/helper.h" #include "lib/helper.h"
#include "pluginbitmaps/pitch_notes.h" #include "pluginbitmaps/pitch_notes.h"
PLUGIN_HEADER
PLUGIN_IRAM_DECLARE PLUGIN_IRAM_DECLARE
/* Some fixed point calculation stuff */ /* Some fixed point calculation stuff */

View file

@ -27,7 +27,6 @@
#include "plugin.h" #include "plugin.h"
#include "lib/helper.h" #include "lib/helper.h"
#include "lib/pluginlib_actions.h" #include "lib/pluginlib_actions.h"
#include "lib/pluginlib_exit.h"
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
@ -36,6 +35,7 @@
#endif #endif
#include "lib/fixedpoint.h" #include "lib/fixedpoint.h"
PLUGIN_HEADER
/******************************* Globals ***********************************/ /******************************* Globals ***********************************/
@ -131,8 +131,10 @@ static void shades_generate(void)
} }
#endif #endif
void cleanup(void) void cleanup(void *parameter)
{ {
(void)parameter;
#ifdef HAVE_ADJUSTABLE_CPU_FREQ #ifdef HAVE_ADJUSTABLE_CPU_FREQ
if (boosted) if (boosted)
rb->cpu_boost(false); rb->cpu_boost(false);
@ -142,9 +144,6 @@ void cleanup(void)
#endif #endif
/* Turn on backlight timeout (revert to settings) */ /* Turn on backlight timeout (revert to settings) */
backlight_use_settings(); /* backlight control in lib/helper.c */ backlight_use_settings(); /* backlight control in lib/helper.c */
#if defined(HAVE_LCD_MODES) && (HAVE_LCD_MODES & LCD_MODE_PAL256)
rb->lcd_set_mode(LCD_MODE_RGB565);
#endif
} }
/* /*
@ -181,15 +180,10 @@ int main(void)
/* get the remainder of the plugin buffer */ /* get the remainder of the plugin buffer */
gbuf = (unsigned char *) rb->plugin_get_buffer(&gbuf_size); gbuf = (unsigned char *) rb->plugin_get_buffer(&gbuf_size);
if (!grey_init(gbuf, gbuf_size, GREY_ON_COP, LCD_WIDTH, LCD_HEIGHT, NULL)) grey_init(gbuf, gbuf_size, GREY_ON_COP, LCD_WIDTH, LCD_HEIGHT, NULL);
{
rb->splash(HZ, "Couldn't init greyscale display");
return PLUGIN_ERROR;
}
/* switch on greyscale overlay */ /* switch on greyscale overlay */
grey_show(true); grey_show(true);
#endif #endif
atexit(cleanup);
sp1 = 4; sp1 = 4;
sp2 = 2; sp2 = 2;
sp3 = 4; sp3 = 4;
@ -267,6 +261,7 @@ int main(void)
{ {
case PLA_EXIT: case PLA_EXIT:
case PLA_CANCEL: case PLA_CANCEL:
cleanup(NULL);
return PLUGIN_OK; return PLUGIN_OK;
break; break;
@ -304,7 +299,9 @@ int main(void)
#endif #endif
default: default:
exit_on_usb(action); if (rb->default_event_handler_ex(action, cleanup, NULL)
== SYS_USB_CONNECTED)
return PLUGIN_USB_CONNECTED;
break; break;
} }
} }
@ -314,6 +311,8 @@ int main(void)
enum plugin_status plugin_start(const void* parameter) enum plugin_status plugin_start(const void* parameter)
{ {
int ret;
(void)parameter; (void)parameter;
#if LCD_DEPTH > 1 #if LCD_DEPTH > 1
rb->lcd_set_backdrop(NULL); rb->lcd_set_backdrop(NULL);
@ -324,7 +323,14 @@ enum plugin_status plugin_start(const void* parameter)
#if defined(HAVE_LCD_MODES) && (HAVE_LCD_MODES & LCD_MODE_PAL256) #if defined(HAVE_LCD_MODES) && (HAVE_LCD_MODES & LCD_MODE_PAL256)
rb->lcd_set_mode(LCD_MODE_PAL256); rb->lcd_set_mode(LCD_MODE_PAL256);
#endif #endif
return main();
ret = main();
#if defined(HAVE_LCD_MODES) && (HAVE_LCD_MODES & LCD_MODE_PAL256)
rb->lcd_set_mode(LCD_MODE_RGB565);
#endif
return ret;
} }
#endif /* HAVE_LCD_BITMAP */ #endif /* HAVE_LCD_BITMAP */

View file

@ -1,116 +0,0 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2010 by Thomas Martitz
*
* This program 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 software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
#include "plugin.h"
#if (CONFIG_PLATFORM & PLATFORM_NATIVE)
#include "../codecs/lib/setjmp.h"
#else
#include <setjmp.h>
#endif
PLUGIN_HEADER
/*
* EXIT_MAGIC magic, because 0 cannot be used due to setjmp()
* must be > 0
*/
#define EXIT_MAGIC 0x0CDEBABE
extern enum plugin_status plugin_start(const void*);
static jmp_buf __exit_env;
/* only 1 atexit handler for now, chain in the exit handler if you need more */
static void (*atexit_handler)(void);
int atexit(void (*fn)(void))
{
if (atexit_handler)
return -1;
atexit_handler = fn;
return 0;
}
void exit(int status)
{ /* jump back in time to before starting the plugin */
longjmp(__exit_env, status != 0 ? status : EXIT_MAGIC);
}
void _exit(int status)
{ /* don't call exit handler */
atexit_handler = NULL;
exit(status);
}
enum plugin_status plugin__start(const void *param)
{
int exit_ret;
enum plugin_status ret;
/* we come back here if exit() was called or the plugin returned normally */
exit_ret = setjmp(__exit_env);
if (exit_ret == 0)
{ /* start the plugin */
ret = plugin_start(param);
}
else
{ /* plugin exit via exit() */
if (exit_ret == EXIT_MAGIC)
{ /* exit(EXIT_SUCCESS) */
ret = PLUGIN_OK;
}
else if (exit_ret < INTERNAL_PLUGIN_RETVAL_START)
{ /* exit(EXIT_FAILURE) */
ret = PLUGIN_ERROR;
}
else
{ /* exit(PLUGIN_XXX) */
ret = (enum plugin_status)exit_ret;
}
}
/* before finishing, call the exit handler if there was one */
if (atexit_handler != NULL)
atexit_handler();
return ret;
}
static void cleanup_wrapper(void *param)
{
(void)param;
if (atexit_handler)
atexit_handler();
}
void exit_on_usb(int button)
{ /* the default handler will call the exit handler before
* showing the usb screen; after that we don't want the exit handler
* to be called a second time, hence _exit()
*
* if not usb, then the handler will only be called if powering off
* if poweroff, the plugin doesn't want to run any further so exit as well*/
long result = rb->default_event_handler_ex(button, cleanup_wrapper, NULL);
if (result == SYS_USB_CONNECTED)
_exit(PLUGIN_USB_CONNECTED);
else if (result == SYS_POWEROFF)
_exit(PLUGIN_POWEROFF);
}

View file

@ -33,7 +33,7 @@ PLUGIN_LDS := $(APPSDIR)/plugins/plugin.lds
PLUGINLINK_LDS := $(BUILDDIR)/apps/plugins/plugin.link PLUGINLINK_LDS := $(BUILDDIR)/apps/plugins/plugin.link
OVERLAYREF_LDS := $(BUILDDIR)/apps/plugins/overlay_ref.link OVERLAYREF_LDS := $(BUILDDIR)/apps/plugins/overlay_ref.link
endif endif
PLUGIN_CRT0 := $(BUILDDIR)/apps/plugins/plugin_crt0.o
# multifile plugins (subdirs): # multifile plugins (subdirs):
PLUGINSUBDIRS := $(call preprocess, $(APPSDIR)/plugins/SUBDIRS) PLUGINSUBDIRS := $(call preprocess, $(APPSDIR)/plugins/SUBDIRS)
@ -49,7 +49,7 @@ PLUGINFLAGS = -I$(APPSDIR)/plugins -DPLUGIN $(CFLAGS)
$(ROCKS1): $(BUILDDIR)/%.rock: $(BUILDDIR)/%.o $(ROCKS1): $(BUILDDIR)/%.rock: $(BUILDDIR)/%.o
# dependency for all plugins # dependency for all plugins
$(ROCKS): $(APPSDIR)/plugin.h $(PLUGINLINK_LDS) $(PLUGINLIB) $(PLUGINBITMAPLIB) $(PLUGIN_CRT0) $(ROCKS): $(APPSDIR)/plugin.h $(PLUGINLINK_LDS) $(PLUGINLIB) $(PLUGINBITMAPLIB)
$(PLUGINLIB): $(PLUGINLIB_OBJ) $(PLUGINLIB): $(PLUGINLIB_OBJ)
$(SILENT)$(shell rm -f $@) $(SILENT)$(shell rm -f $@)

View file

@ -22,7 +22,7 @@
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
#define PAD_HEIGHT LCD_HEIGHT / 6 /* Recorder: 10 iRiver: 21 */ #define PAD_HEIGHT LCD_HEIGHT / 6 /* Recorder: 10 iRiver: 21 */
#define PAD_WIDTH LCD_WIDTH / 50 /* Recorder: 2 iRiver: 2 */ #define PAD_WIDTH LCD_WIDTH / 50 /* Recorder: 2 iRiver: 2 */

View file

@ -24,7 +24,7 @@
#if defined(HAVE_LCD_COLOR) #if defined(HAVE_LCD_COLOR)
PLUGIN_HEADER
/* Magic constants. */ /* Magic constants. */
#define PPM_MAGIC1 'P' #define PPM_MAGIC1 'P'

View file

@ -20,7 +20,7 @@
****************************************************************************/ ****************************************************************************/
#include "plugin.h" #include "plugin.h"
PLUGIN_HEADER
bool its_a_dir = false; bool its_a_dir = false;

View file

@ -21,7 +21,7 @@
#include "plugin.h" #include "plugin.h"
#include "file.h" #include "file.h"
PLUGIN_HEADER
static bool cancel; static bool cancel;
static int fd; static int fd;

View file

@ -23,7 +23,7 @@
#include "lib/pluginlib_actions.h" #include "lib/pluginlib_actions.h"
PLUGIN_HEADER
#define PLUGIN_CONTINUE 10 #define PLUGIN_CONTINUE 10

View file

@ -47,7 +47,7 @@ further options:
#include "lib/playback_control.h" #include "lib/playback_control.h"
PLUGIN_HEADER
/* This is initialized at the start of the plugin and used to determine the /* This is initialized at the start of the plugin and used to determine the
* Appropriate game board size/legend spacing if the font is larger than a cell * Appropriate game board size/legend spacing if the font is larger than a cell

View file

@ -34,7 +34,7 @@
/* This macros must always be included. Should be placed at the top by /* This macros must always be included. Should be placed at the top by
convention, although the actual position doesn't matter */ convention, although the actual position doesn't matter */
PLUGIN_HEADER
/*Be sure to change MESSAGES when you change the array, or bad things /*Be sure to change MESSAGES when you change the array, or bad things
will happen.*/ will happen.*/

View file

@ -28,7 +28,7 @@
#include "lib/playergfx.h" #include "lib/playergfx.h"
#include "lib/mylcd.h" #include "lib/mylcd.h"
PLUGIN_HEADER
#if (CONFIG_KEYPAD == IPOD_4G_PAD) || \ #if (CONFIG_KEYPAD == IPOD_4G_PAD) || \
(CONFIG_KEYPAD == IPOD_3G_PAD) || \ (CONFIG_KEYPAD == IPOD_3G_PAD) || \

View file

@ -22,7 +22,7 @@
#include "plugin.h" #include "plugin.h"
PLUGIN_HEADER
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP

View file

@ -25,7 +25,7 @@
#if (CONFIG_CPU == SH7034) /* Only for SH targets */ #if (CONFIG_CPU == SH7034) /* Only for SH targets */
PLUGIN_HEADER
/* define DUMMY if you only want to "play" with the UI, does no harm */ /* define DUMMY if you only want to "play" with the UI, does no harm */
/* #define DUMMY */ /* #define DUMMY */

View file

@ -24,7 +24,7 @@
#include "lib/overlay.h" #include "lib/overlay.h"
PLUGIN_HEADER
/* this is the plugin entry point */ /* this is the plugin entry point */
enum plugin_status plugin_start(const void* parameter) enum plugin_status plugin_start(const void* parameter)

View file

@ -26,7 +26,7 @@
#include "hw.h" #include "hw.h"
#include "pcm.h" #include "pcm.h"
PLUGIN_HEADER
PLUGIN_IRAM_DECLARE PLUGIN_IRAM_DECLARE
int shut,cleanshut; int shut,cleanshut;

View file

@ -64,7 +64,7 @@
#include "lib/pluginlib_actions.h" #include "lib/pluginlib_actions.h"
#include "lib/helper.h" #include "lib/helper.h"
PLUGIN_HEADER
#define ROCKLIFE_PLAY_PAUSE PLA_SELECT #define ROCKLIFE_PLAY_PAUSE PLA_SELECT
#define ROCKLIFE_INIT PLA_DOWN #define ROCKLIFE_INIT PLA_DOWN

View file

@ -33,7 +33,7 @@
#include "lib/rgb_hsv.h" #include "lib/rgb_hsv.h"
#include "lib/playback_control.h" #include "lib/playback_control.h"
PLUGIN_HEADER
/*********************************************************************** /***********************************************************************
* Buttons * Buttons

View file

@ -22,7 +22,7 @@
#include "plugin.h" #include "plugin.h"
#include <ctype.h> #include <ctype.h>
PLUGIN_HEADER
#define BUFFER_SIZE 16384 #define BUFFER_SIZE 16384

View file

@ -23,7 +23,7 @@
#include "token.h" #include "token.h"
#include "dbinterface.h" #include "dbinterface.h"
PLUGIN_HEADER
void *audio_bufferbase; void *audio_bufferbase;
void *audio_bufferpointer; void *audio_bufferpointer;

View file

@ -20,7 +20,7 @@
****************************************************************************/ ****************************************************************************/
#include "plugin.h" #include "plugin.h"
PLUGIN_HEADER
#define FILENAME "/settings_dumper.txt" #define FILENAME "/settings_dumper.txt"
static int setting_count = 0; static int setting_count = 0;

View file

@ -21,7 +21,7 @@
#include "plugin.h" #include "plugin.h"
#include "lib/playback_control.h" #include "lib/playback_control.h"
PLUGIN_HEADER
#define MAX_LIST_SIZE 400 #define MAX_LIST_SIZE 400
#define DESC_SIZE 40 #define DESC_SIZE 40

View file

@ -22,7 +22,7 @@
#include "shortcuts.h" #include "shortcuts.h"
PLUGIN_HEADER
bool append_entry_to_file(sc_file_t *file, char *path, bool is_dir) bool append_entry_to_file(sc_file_t *file, char *path, bool is_dir)

View file

@ -22,7 +22,7 @@
#include "shortcuts.h" #include "shortcuts.h"
PLUGIN_HEADER
enum sc_list_action_type enum sc_list_action_type
{ {

View file

@ -21,7 +21,7 @@
#include "plugin.h" #include "plugin.h"
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
/* variable button definitions */ /* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD #if CONFIG_KEYPAD == RECORDER_PAD

View file

@ -38,7 +38,7 @@ dir is the current direction of the snake - 0=up, 1=right, 2=down, 3=left;
#include "lib/highscore.h" #include "lib/highscore.h"
#include "lib/playback_control.h" #include "lib/playback_control.h"
PLUGIN_HEADER
/* variable button definitions */ /* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD #if CONFIG_KEYPAD == RECORDER_PAD

View file

@ -34,7 +34,7 @@ Head and Tail are stored
#include "lib/highscore.h" #include "lib/highscore.h"
#include "lib/playback_control.h" #include "lib/playback_control.h"
PLUGIN_HEADER
#define WIDTH 28 #define WIDTH 28
#define HEIGHT 16 #define HEIGHT 16

View file

@ -22,7 +22,7 @@
#include "lib/playergfx.h" #include "lib/playergfx.h"
#include "lib/mylcd.h" #include "lib/mylcd.h"
PLUGIN_HEADER
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
#define NUM_PARTICLES (LCD_WIDTH * LCD_HEIGHT / 72) #define NUM_PARTICLES (LCD_WIDTH * LCD_HEIGHT / 72)

Some files were not shown because too many files have changed in this diff Show more