diff --git a/apps/plugin.h b/apps/plugin.h index 624b7039b8..17c36fa8b1 100644 --- a/apps/plugin.h +++ b/apps/plugin.h @@ -147,17 +147,21 @@ void* plugin_get_buffer(size_t *buffer_size); #define PLUGIN_MAGIC 0x526F634B /* RocK */ /* increase this every time the api struct changes */ -#define PLUGIN_API_VERSION 190 +#define PLUGIN_API_VERSION 191 /* update this to latest version if a change to the api struct breaks backwards compatibility (and please take the opportunity to sort in any new function which are "waiting" at the end of the function table) */ -#define PLUGIN_MIN_API_VERSION 190 +#define PLUGIN_MIN_API_VERSION 191 /* plugin return codes */ +/* internal returns start at 0x100 to make exit(1..255) work */ +#define INTERNAL_PLUGIN_RETVAL_START 0x100 enum plugin_status { - PLUGIN_OK = 0, - PLUGIN_USB_CONNECTED, + PLUGIN_OK = 0, /* PLUGIN_OK == EXIT_SUCCESS */ + /* 1...255 reserved for exit() */ + PLUGIN_USB_CONNECTED = INTERNAL_PLUGIN_RETVAL_START, + PLUGIN_POWEROFF, PLUGIN_GOTO_WPS, PLUGIN_ERROR = -1, }; @@ -912,14 +916,14 @@ extern unsigned char plugin_end_addr[]; const struct plugin_header __header \ __attribute__ ((section (".header")))= { \ 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 */ #define PLUGIN_HEADER \ const struct plugin_api *rb DATA_ATTR; \ const struct plugin_header __header \ __attribute__((visibility("default"))) = { \ PLUGIN_MAGIC, TARGET_ID, PLUGIN_API_VERSION, \ - NULL, NULL, plugin_start, &rb }; + NULL, NULL, plugin__start, &rb }; #endif /* CONFIG_PLATFORM */ #ifdef PLUGIN_USE_IRAM @@ -954,7 +958,7 @@ void plugin_tsr(bool (*exit_callback)(bool reenter)); /* defined by the plugin */ 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; #endif /* __PCTOOL__ */ diff --git a/apps/plugins/alarmclock.c b/apps/plugins/alarmclock.c index a22a2f29a5..3ccb0c3ebd 100644 --- a/apps/plugins/alarmclock.c +++ b/apps/plugins/alarmclock.c @@ -22,7 +22,7 @@ #include "plugin.h" #include "lib/pluginlib_actions.h" -PLUGIN_HEADER + const struct button_mapping *plugin_contexts[] = { pla_main_ctx }; diff --git a/apps/plugins/alpine_cdc.c b/apps/plugins/alpine_cdc.c index 9357b2e5ab..f6b236895d 100644 --- a/apps/plugins/alpine_cdc.c +++ b/apps/plugins/alpine_cdc.c @@ -36,7 +36,7 @@ /* Only build for (correct) target */ #if CONFIG_CPU==SH7034 && !(CONFIG_STORAGE & STORAGE_MMC) -PLUGIN_HEADER + #ifdef HAVE_LCD_CHARCELLS /* player model */ #define LINES 2 diff --git a/apps/plugins/battery_bench.c b/apps/plugins/battery_bench.c index e6efd38d96..bb0e4f594b 100644 --- a/apps/plugins/battery_bench.c +++ b/apps/plugins/battery_bench.c @@ -22,7 +22,7 @@ #include "version.h" #include "plugin.h" -PLUGIN_HEADER + #define BATTERY_LOG "/battery_bench.txt" #define BUF_SIZE 16000 diff --git a/apps/plugins/beatbox/beatbox.c b/apps/plugins/beatbox/beatbox.c index a51f738cd2..9cb7dd4465 100644 --- a/apps/plugins/beatbox/beatbox.c +++ b/apps/plugins/beatbox/beatbox.c @@ -26,7 +26,7 @@ #include "midi/sequencer.h" #include "midi/midifile.h" -PLUGIN_HEADER + PLUGIN_IRAM_DECLARE /* variable button definitions */ diff --git a/apps/plugins/bench_mem_jpeg.c b/apps/plugins/bench_mem_jpeg.c index 5169286fe3..4e24f2a405 100644 --- a/apps/plugins/bench_mem_jpeg.c +++ b/apps/plugins/bench_mem_jpeg.c @@ -23,7 +23,7 @@ #include "plugin.h" #include "lib/jpeg_mem.h" -PLUGIN_HEADER + /* a null output plugin to save memory and better isolate decode cost */ static unsigned int get_size_null(struct bitmap *bm) diff --git a/apps/plugins/bench_scaler.c b/apps/plugins/bench_scaler.c index 246271dcc8..5db2987ec7 100644 --- a/apps/plugins/bench_scaler.c +++ b/apps/plugins/bench_scaler.c @@ -23,7 +23,7 @@ #include "plugin.h" #include "lib/jpeg_mem.h" -PLUGIN_HEADER + static unsigned char output; static int output_y = 0; diff --git a/apps/plugins/blackjack.c b/apps/plugins/blackjack.c index 7b3dbef805..8b28b815b8 100644 --- a/apps/plugins/blackjack.c +++ b/apps/plugins/blackjack.c @@ -26,7 +26,7 @@ #include "lib/highscore.h" #include "lib/playback_control.h" -PLUGIN_HEADER + /* save files */ #define SCORE_FILE PLUGIN_GAMES_DIR "/blackjack.score" diff --git a/apps/plugins/bounce.c b/apps/plugins/bounce.c index f193818850..1ee5b1eaeb 100644 --- a/apps/plugins/bounce.c +++ b/apps/plugins/bounce.c @@ -22,7 +22,7 @@ #include "time.h" #include "lib/fixedpoint.h" -PLUGIN_HEADER + #define SS_TITLE "Bouncer" diff --git a/apps/plugins/brickmania.c b/apps/plugins/brickmania.c index 98de3d439f..50ceaa7557 100644 --- a/apps/plugins/brickmania.c +++ b/apps/plugins/brickmania.c @@ -41,7 +41,7 @@ #include "pluginbitmaps/brickmania_break.h" #endif -PLUGIN_HEADER + /* diff --git a/apps/plugins/bubbles.c b/apps/plugins/bubbles.c index f169a2ef45..320fd3e4c6 100644 --- a/apps/plugins/bubbles.c +++ b/apps/plugins/bubbles.c @@ -31,8 +31,6 @@ #include "lib/playback_control.h" #include "lib/highscore.h" -PLUGIN_HEADER - /* files */ #define SCORE_FILE PLUGIN_GAMES_DIR "/bubbles.score" #define SAVE_FILE PLUGIN_GAMES_DIR "/bubbles.save" diff --git a/apps/plugins/calculator.c b/apps/plugins/calculator.c index 95b35e903c..8068b9c4f3 100644 --- a/apps/plugins/calculator.c +++ b/apps/plugins/calculator.c @@ -78,7 +78,7 @@ F3: equal to "=" #ifdef HAVE_LCD_BITMAP #include "math.h" -PLUGIN_HEADER + #define M_TWOPI (M_PI * 2.0) diff --git a/apps/plugins/calendar.c b/apps/plugins/calendar.c index 13abdfc29a..32d4501920 100644 --- a/apps/plugins/calendar.c +++ b/apps/plugins/calendar.c @@ -25,7 +25,7 @@ #include "lib/playback_control.h" #include "lib/configfile.h" -PLUGIN_HEADER + #if CONFIG_KEYPAD == RECORDER_PAD #define CALENDAR_QUIT BUTTON_OFF diff --git a/apps/plugins/chessbox.c b/apps/plugins/chessbox.c index a6db7ba949..14d2936848 100644 --- a/apps/plugins/chessbox.c +++ b/apps/plugins/chessbox.c @@ -24,7 +24,7 @@ #include "lib/overlay.h" -PLUGIN_HEADER + /* this is the plugin entry point */ enum plugin_status plugin_start(const void* parameter) diff --git a/apps/plugins/chessbox/chessbox.c b/apps/plugins/chessbox/chessbox.c index 45f052d30a..4e298a8214 100644 --- a/apps/plugins/chessbox/chessbox.c +++ b/apps/plugins/chessbox/chessbox.c @@ -49,7 +49,7 @@ struct cb_command { extern const fb_data chessbox_pieces[]; -PLUGIN_HEADER + /* Tile size defined by the assigned bitmap */ #include "pluginbitmaps/chessbox_pieces.h" diff --git a/apps/plugins/chessclock.c b/apps/plugins/chessclock.c index 3afa705bf1..0ddfcb59fc 100644 --- a/apps/plugins/chessclock.c +++ b/apps/plugins/chessclock.c @@ -21,7 +21,7 @@ #include "plugin.h" #include "lib/playback_control.h" -PLUGIN_HEADER + /* variable button definitions */ #if CONFIG_KEYPAD == RECORDER_PAD diff --git a/apps/plugins/chip8.c b/apps/plugins/chip8.c index f60bdb36c0..cca6229a3f 100644 --- a/apps/plugins/chip8.c +++ b/apps/plugins/chip8.c @@ -21,7 +21,7 @@ ****************************************************************************/ #include "plugin.h" -PLUGIN_HEADER + #define EXTERN static #define STATIC static diff --git a/apps/plugins/chopper.c b/apps/plugins/chopper.c index 67cb9ee760..86f1bfba5d 100644 --- a/apps/plugins/chopper.c +++ b/apps/plugins/chopper.c @@ -26,7 +26,7 @@ #include "lib/helper.h" #include "lib/playback_control.h" -PLUGIN_HEADER + /* Still To do: diff --git a/apps/plugins/clix.c b/apps/plugins/clix.c index 0735656839..0bdf693f54 100644 --- a/apps/plugins/clix.c +++ b/apps/plugins/clix.c @@ -22,7 +22,7 @@ #include "lib/playback_control.h" #include "lib/display_text.h" -PLUGIN_HEADER + #if (CONFIG_KEYPAD == SANSA_E200_PAD) #define CLIX_BUTTON_QUIT BUTTON_POWER diff --git a/apps/plugins/clock/clock.c b/apps/plugins/clock/clock.c index f06f3e15e4..8a1a55e17f 100644 --- a/apps/plugins/clock/clock.c +++ b/apps/plugins/clock/clock.c @@ -22,6 +22,7 @@ #include "plugin.h" #include "time.h" #include "lib/pluginlib_actions.h" +#include "lib/pluginlib_exit.h" #include "lib/xlcd.h" #include "clock.h" @@ -30,7 +31,7 @@ #include "clock_menu.h" #include "clock_settings.h" -PLUGIN_HEADER + /* Keymaps */ const struct button_mapping* plugin_contexts[]={ @@ -56,9 +57,8 @@ const struct button_mapping* plugin_contexts[]={ /************************** * Cleanup on plugin return *************************/ -void cleanup(void *parameter) +void cleanup(void) { - (void)parameter; clock_draw_restore_colors(); if(clock_settings.general.save_settings == 1) save_settings(); @@ -115,6 +115,7 @@ enum plugin_status plugin_start(const void* parameter){ struct counter counter; bool exit_clock = false; (void)parameter; + atexit(cleanup); #if LCD_DEPTH > 1 rb->lcd_set_backdrop(NULL); @@ -174,9 +175,7 @@ enum plugin_status plugin_start(const void* parameter){ exit_clock=main_menu(); break; default: - if(rb->default_event_handler_ex(button, cleanup, NULL) - == SYS_USB_CONNECTED) - return PLUGIN_USB_CONNECTED; + exit_on_usb(button); if(time.second != last_second){ last_second=time.second; redraw=true; @@ -193,6 +192,5 @@ enum plugin_status plugin_start(const void* parameter){ } } - cleanup(NULL); return PLUGIN_OK; } diff --git a/apps/plugins/codebuster.c b/apps/plugins/codebuster.c index 810bd0c570..1169f265c3 100644 --- a/apps/plugins/codebuster.c +++ b/apps/plugins/codebuster.c @@ -24,7 +24,7 @@ #include "lib/playback_control.h" #include "lib/pluginlib_actions.h" -PLUGIN_HEADER + /* Limits */ #define MAX_PIECES_COUNT 5 diff --git a/apps/plugins/credits.c b/apps/plugins/credits.c index 0251849c11..a05b44c20d 100644 --- a/apps/plugins/credits.c +++ b/apps/plugins/credits.c @@ -21,7 +21,7 @@ #include "plugin.h" #include "lib/helper.h" -PLUGIN_HEADER + static const char* const credits[] = { #include "credits.raw" /* generated list of names from docs/CREDITS */ diff --git a/apps/plugins/crypt_firmware.c b/apps/plugins/crypt_firmware.c index 051a3d1bd9..f9bdd4d031 100644 --- a/apps/plugins/crypt_firmware.c +++ b/apps/plugins/crypt_firmware.c @@ -37,7 +37,7 @@ #include "plugin.h" -PLUGIN_HEADER + static void aes_encrypt(void* data, uint32_t size) { diff --git a/apps/plugins/cube.c b/apps/plugins/cube.c index 2b1e00d690..7dec822d56 100644 --- a/apps/plugins/cube.c +++ b/apps/plugins/cube.c @@ -22,6 +22,7 @@ ***************************************************************************/ #include "plugin.h" #include "lib/playergfx.h" +#include "lib/pluginlib_exit.h" #if LCD_DEPTH > 1 #include "lib/mylcd.h" /* MYLCD_CFG_RB_XLCD or MYLCD_CFG_PGFX */ #include "lib/grey.h" @@ -32,8 +33,6 @@ #include "lib/xlcd.h" #include "lib/fixedpoint.h" -PLUGIN_HEADER - /* Loops that the values are displayed */ #define DISP_TIME 30 @@ -611,10 +610,8 @@ static void cube_draw(void) } } -void cleanup(void *parameter) +void cleanup(void) { - (void)parameter; - #ifdef USEGSLIB grey_release(); #elif defined HAVE_LCD_CHARCELLS @@ -638,7 +635,7 @@ enum plugin_status plugin_start(const void* parameter) bool highspeed = false; bool paused = false; bool redraw = true; - bool exit = false; + bool quit = false; (void)(parameter); @@ -651,6 +648,7 @@ enum plugin_status plugin_start(const void* parameter) rb->splash(HZ, "Couldn't init greyscale display"); return PLUGIN_ERROR; } + /* init lcd_ function pointers */ lcdfuncs.update = rb->lcd_update; lcdfuncs.clear_display = rb->lcd_clear_display; @@ -673,7 +671,8 @@ enum plugin_status plugin_start(const void* parameter) pgfx_display(0, 0); #endif - while(!exit) + atexit(cleanup); + while(!quit) { if (redraw) { @@ -830,24 +829,17 @@ enum plugin_status plugin_start(const void* parameter) case CUBE_RC_QUIT: #endif case CUBE_QUIT: - exit = true; + exit(EXIT_SUCCESS); break; default: - if (rb->default_event_handler_ex(button, cleanup, NULL) - == SYS_USB_CONNECTED) - return PLUGIN_USB_CONNECTED; + exit_on_usb(button); break; } if (button != BUTTON_NONE) lastbutton = button; } -#ifdef USEGSLIB - grey_release(); -#elif defined(HAVE_LCD_CHARCELLS) - pgfx_release(); -#endif return PLUGIN_OK; } diff --git a/apps/plugins/demystify.c b/apps/plugins/demystify.c index 468f1806ce..6a8f1eb0c1 100644 --- a/apps/plugins/demystify.c +++ b/apps/plugins/demystify.c @@ -22,11 +22,12 @@ ****************************************************************************/ #include "plugin.h" +#include "lib/pluginlib_exit.h" #ifdef HAVE_LCD_BITMAP #include "lib/pluginlib_actions.h" #include "lib/helper.h" -PLUGIN_HEADER + #define DEFAULT_WAIT_TIME 3 #define DEFAULT_NB_POLYGONS 7 @@ -259,10 +260,8 @@ void polygons_draw(struct polygon_fifo * polygons, struct screen * display) } } -void cleanup(void *parameter) +void cleanup(void) { - (void)parameter; - backlight_use_settings(); #ifdef HAVE_REMOTE_LCD remote_backlight_use_settings(); @@ -394,7 +393,6 @@ int plugin_main(void) switch(action) { case DEMYSTIFY_QUIT: - cleanup(NULL); return PLUGIN_OK; case DEMYSTIFY_ADD_POLYGON: @@ -421,9 +419,7 @@ int plugin_main(void) break; default: - if (rb->default_event_handler_ex(action, cleanup, NULL) - == SYS_USB_CONNECTED) - return PLUGIN_USB_CONNECTED; + exit_on_usb(action); break; } } @@ -436,6 +432,8 @@ enum plugin_status plugin_start(const void* parameter) int ret; (void)parameter; + atexit(cleanup); + #if LCD_DEPTH > 1 rb->lcd_set_backdrop(NULL); #endif diff --git a/apps/plugins/dice.c b/apps/plugins/dice.c index 7bd51122ee..7acb2e79ca 100644 --- a/apps/plugins/dice.c +++ b/apps/plugins/dice.c @@ -45,7 +45,7 @@ struct dices }; #define PRINT_BUFFER_LENGTH MAX_DICES*4 -PLUGIN_HEADER + static struct dices dice; static int sides_index; diff --git a/apps/plugins/dict.c b/apps/plugins/dict.c index 13fe8e3cc6..a9c481742d 100644 --- a/apps/plugins/dict.c +++ b/apps/plugins/dict.c @@ -22,7 +22,7 @@ #include "plugin.h" #include "lib/simple_viewer.h" -PLUGIN_HEADER + #define MIN_DESC_BUF_SIZE 0x400 /* arbitrary minimum size for description */ diff --git a/apps/plugins/disktidy.c b/apps/plugins/disktidy.c index 8d8515e27b..d83ecf4312 100644 --- a/apps/plugins/disktidy.c +++ b/apps/plugins/disktidy.c @@ -21,7 +21,7 @@ #include "plugin.h" #include "errno.h" -PLUGIN_HEADER + /* function return values */ enum tidy_return diff --git a/apps/plugins/doom/rockdoom.c b/apps/plugins/doom/rockdoom.c index 042212812a..324cb24d51 100644 --- a/apps/plugins/doom/rockdoom.c +++ b/apps/plugins/doom/rockdoom.c @@ -41,7 +41,7 @@ #include "st_stuff.h" #include "lib/helper.h" -PLUGIN_HEADER + PLUGIN_IRAM_DECLARE extern boolean timingdemo, singledemo, demoplayback, fastdemo; // killough diff --git a/apps/plugins/euroconverter.c b/apps/plugins/euroconverter.c index f85ee798c4..24cebe69d1 100644 --- a/apps/plugins/euroconverter.c +++ b/apps/plugins/euroconverter.c @@ -45,7 +45,7 @@ To do: - The Irish currency needs 6 digits after the . to have sufficient precision on big number */ -PLUGIN_HEADER + /* Name and path of the config file*/ static const char cfg_filename[] = "euroconverter.cfg"; @@ -387,10 +387,8 @@ static int euro_menu(void) /* Call when the program end */ -static void euro_exit(void *parameter) +static void euro_exit(void) { - (void)parameter; - //Restore the old pattern (i don't find another way to do this. An idea?) rb->lcd_unlock_pattern(heuro); rb->lcd_unlock_pattern(hhome); @@ -411,6 +409,7 @@ enum plugin_status plugin_start(const void* parameter) /* if you don't use the parameter, you can do like this to avoid the compiler warning about it */ (void)parameter; + atexit(euro_exit); /*Get the pattern handle*/ heuro=rb->lcd_get_locked_pattern(); @@ -587,9 +586,7 @@ enum plugin_status plugin_start(const void* parameter) break; default: - if (rb->default_event_handler_ex(button, euro_exit, NULL) - == SYS_USB_CONNECTED) - return PLUGIN_USB_CONNECTED; + exit_on_usb(button); break; } /*Display*/ @@ -599,7 +596,6 @@ enum plugin_status plugin_start(const void* parameter) e=mydiv(h,currency[country]); display(e,h,pos); } - euro_exit(NULL); return PLUGIN_OK; } diff --git a/apps/plugins/fft/fft.c b/apps/plugins/fft/fft.c index e352c1c041..a9724196ac 100644 --- a/apps/plugins/fft/fft.c +++ b/apps/plugins/fft/fft.c @@ -29,7 +29,7 @@ #endif #include "lib/mylcd.h" -PLUGIN_HEADER + #ifndef HAVE_LCD_COLOR GREY_INFO_STRUCT diff --git a/apps/plugins/fire.c b/apps/plugins/fire.c index e1362dc900..268a934692 100644 --- a/apps/plugins/fire.c +++ b/apps/plugins/fire.c @@ -41,8 +41,6 @@ #define FIRE_XPOS 0 #endif -PLUGIN_HEADER - #ifndef HAVE_LCD_COLOR GREY_INFO_STRUCT static unsigned char draw_buffer[FIRE_WIDTH]; diff --git a/apps/plugins/fireworks.c b/apps/plugins/fireworks.c index 1ad5f9a2ca..1954f19cac 100644 --- a/apps/plugins/fireworks.c +++ b/apps/plugins/fireworks.c @@ -22,7 +22,7 @@ #include "lib/helper.h" #include "lib/playback_control.h" -PLUGIN_HEADER + /*** * FIREWORKS.C by ZAKK ROBERTS diff --git a/apps/plugins/firmware_flash.c b/apps/plugins/firmware_flash.c index 317bc92f04..02c4098ec1 100644 --- a/apps/plugins/firmware_flash.c +++ b/apps/plugins/firmware_flash.c @@ -77,7 +77,7 @@ #error this platform is not (yet) flashable #endif -PLUGIN_HEADER + #if CONFIG_KEYPAD == ONDIO_PAD /* limited keypad */ #define KEY1 BUTTON_LEFT diff --git a/apps/plugins/flipit.c b/apps/plugins/flipit.c index d4c5702bc0..44ad011a64 100644 --- a/apps/plugins/flipit.c +++ b/apps/plugins/flipit.c @@ -20,7 +20,7 @@ ****************************************************************************/ #include "plugin.h" -PLUGIN_HEADER + /* variable button definitions */ #if CONFIG_KEYPAD == RECORDER_PAD diff --git a/apps/plugins/fractals/fractal.c b/apps/plugins/fractals/fractal.c index 971ae506ca..179bc3e562 100644 --- a/apps/plugins/fractals/fractal.c +++ b/apps/plugins/fractals/fractal.c @@ -29,6 +29,7 @@ #include "fractal_rect.h" #include "fractal_sets.h" #include "mandelbrot_set.h" +#include "lib/pluginlib_exit.h" #ifdef USEGSLIB GREY_INFO_STRUCT @@ -41,7 +42,7 @@ static size_t gbuf_size = 0; #define REDRAW_FULL 2 #define REDRAW_FULL_OVERLAY 3 -PLUGIN_HEADER + /* returns 1 if a button has been pressed, 0 otherwise */ static int button_yield(void *ctx) @@ -85,9 +86,8 @@ static int button_yield(void *ctx) } } -static void cleanup(void *parameter) +static void cleanup(void) { - (void)parameter; #ifdef USEGSLIB grey_release(); #endif @@ -109,11 +109,13 @@ enum plugin_status plugin_start(const void* parameter) if (!grey_init(gbuf, gbuf_size, GREY_ON_COP, LCD_WIDTH, LCD_HEIGHT, NULL)) { rb->splash(HZ, "Couldn't init greyscale display"); - return 0; + return PLUGIN_ERROR; } grey_show(true); /* switch on greyscale overlay */ #endif + /* release greylib on exit */ + atexit(cleanup); #if LCD_DEPTH > 1 rb->lcd_set_backdrop(NULL); #endif @@ -161,9 +163,6 @@ enum plugin_status plugin_start(const void* parameter) case FRACTAL_RC_QUIT: #endif case FRACTAL_QUIT: -#ifdef USEGSLIB - grey_release(); -#endif return PLUGIN_OK; case FRACTAL_ZOOM_OUT: @@ -246,18 +245,13 @@ enum plugin_status plugin_start(const void* parameter) break; default: - if (rb->default_event_handler_ex(button, cleanup, NULL) - == SYS_USB_CONNECTED) - return PLUGIN_USB_CONNECTED; + exit_on_usb(button); break; } if (button != BUTTON_NONE) lastbutton = button; } -#ifdef USEGSLIB - grey_release(); -#endif return PLUGIN_OK; } diff --git a/apps/plugins/frotz/frotz.c b/apps/plugins/frotz/frotz.c index aff91002ef..23da650706 100644 --- a/apps/plugins/frotz/frotz.c +++ b/apps/plugins/frotz/frotz.c @@ -23,7 +23,7 @@ #include "lib/pluginlib_exit.h" #include "lib/pluginlib_actions.h" -PLUGIN_HEADER + extern int frotz_main(void); extern bool hot_key_quit(void); @@ -41,7 +41,7 @@ enum plugin_status plugin_start(const void* parameter) int i; char* ext; - PLUGINLIB_EXIT_INIT_ATEXIT(atexit_cleanup); + atexit(atexit_cleanup); if (!parameter) return PLUGIN_ERROR; diff --git a/apps/plugins/goban.c b/apps/plugins/goban.c index 7bb6744dde..1a121202c6 100644 --- a/apps/plugins/goban.c +++ b/apps/plugins/goban.c @@ -24,7 +24,7 @@ #include "lib/overlay.h" -PLUGIN_HEADER + enum plugin_status plugin_start(const void* parameter) { diff --git a/apps/plugins/goban/goban.c b/apps/plugins/goban/goban.c index 4e20e71a37..b2306c00a8 100644 --- a/apps/plugins/goban/goban.c +++ b/apps/plugins/goban/goban.c @@ -23,7 +23,7 @@ #include "lib/playback_control.h" #include "lib/configfile.h" -PLUGIN_HEADER + #include "goban.h" #include "game.h" diff --git a/apps/plugins/greyscale.c b/apps/plugins/greyscale.c index 73dd98b216..33254439b6 100644 --- a/apps/plugins/greyscale.c +++ b/apps/plugins/greyscale.c @@ -27,7 +27,7 @@ #if defined(HAVE_LCD_BITMAP) && (LCD_DEPTH < 4) #include "lib/grey.h" -PLUGIN_HEADER + /* variable button definitions */ #if CONFIG_KEYPAD == RECORDER_PAD @@ -316,9 +316,7 @@ int main(void) button = rb->button_get(true); - if (rb->default_event_handler_ex(button, cleanup, NULL) - == SYS_USB_CONNECTED) - return PLUGIN_USB_CONNECTED; + exit_on_usb(button); if (button & GREYSCALE_SHIFT) { @@ -369,8 +367,6 @@ int main(void) case GREYSCALE_RC_OFF: #endif case GREYSCALE_OFF: - - cleanup(NULL); return PLUGIN_OK; } } @@ -382,6 +378,7 @@ enum plugin_status plugin_start(const void* parameter) { (void)parameter; + atexit(cleanup); return main(); } diff --git a/apps/plugins/helloworld.c b/apps/plugins/helloworld.c index e582eb77b3..f1093f0a8b 100644 --- a/apps/plugins/helloworld.c +++ b/apps/plugins/helloworld.c @@ -24,7 +24,7 @@ /* This macros must always be included. Should be placed at the top by convention, although the actual position doesn't matter */ -PLUGIN_HEADER + /* this is the plugin entry point */ enum plugin_status plugin_start(const void* parameter) diff --git a/apps/plugins/imageviewer/imageviewer.c b/apps/plugins/imageviewer/imageviewer.c index 0fd25e7b29..e581407290 100644 --- a/apps/plugins/imageviewer/imageviewer.c +++ b/apps/plugins/imageviewer/imageviewer.c @@ -25,7 +25,7 @@ #include #include "imageviewer.h" -PLUGIN_HEADER + #ifdef USEGSLIB GREY_INFO_STRUCT diff --git a/apps/plugins/invadrox.c b/apps/plugins/invadrox.c index 851487cf9a..ea4a0a28e5 100644 --- a/apps/plugins/invadrox.c +++ b/apps/plugins/invadrox.c @@ -61,7 +61,7 @@ #define FIRE_WIDTH BMPWIDTH_invadrox_fire #define FIRE_HEIGHT BMPHEIGHT_invadrox_fire -PLUGIN_HEADER + /* Original graphics is only 1bpp so it should be portable * to most targets. But for now, only support the simple ones. diff --git a/apps/plugins/iriver_flash.c b/apps/plugins/iriver_flash.c index 24542a9398..a1ce22c83f 100644 --- a/apps/plugins/iriver_flash.c +++ b/apps/plugins/iriver_flash.c @@ -35,7 +35,7 @@ ssize_t audiobuf_size; #ifdef PLATFORM_ID -PLUGIN_HEADER + #if CONFIG_KEYPAD == IRIVER_H100_PAD #define KEY1 BUTTON_OFF diff --git a/apps/plugins/iriverify.c b/apps/plugins/iriverify.c index 4e8ca5b420..1109cde179 100644 --- a/apps/plugins/iriverify.c +++ b/apps/plugins/iriverify.c @@ -25,7 +25,7 @@ ****************************************************************************/ #include "plugin.h" -PLUGIN_HEADER + ssize_t buf_size; static char *filename; diff --git a/apps/plugins/jackpot.c b/apps/plugins/jackpot.c index 56c2910b70..abf1cf8fb2 100644 --- a/apps/plugins/jackpot.c +++ b/apps/plugins/jackpot.c @@ -22,8 +22,9 @@ #include "plugin.h" #include "lib/pluginlib_actions.h" #include "lib/picture.h" +#include "lib/pluginlib_exit.h" + -PLUGIN_HEADER const struct button_mapping* plugin_contexts[]={pla_main_ctx}; #define NB_PICTURES 9 @@ -109,9 +110,8 @@ void patterns_deinit(struct screen* display) #endif /* HAVE_LCD_CHARCELLS */ /*Call when the program exit*/ -void jackpot_exit(void *parameter) +void jackpot_exit(void) { - (void)parameter; #ifdef HAVE_LCD_CHARCELLS patterns_deinit(rb->screens[SCREEN_MAIN]); #endif /* HAVE_LCD_CHARCELLS */ @@ -298,6 +298,7 @@ enum plugin_status plugin_start(const void* parameter) int action, i; struct jackpot game; (void)parameter; + atexit(jackpot_exit); rb->srand(*rb->current_tick); #ifdef HAVE_LCD_CHARCELLS patterns_init(rb->screens[SCREEN_MAIN]); @@ -323,12 +324,9 @@ enum plugin_status plugin_start(const void* parameter) break; default: - if (rb->default_event_handler_ex(action, jackpot_exit, NULL) - == SYS_USB_CONNECTED) - return PLUGIN_USB_CONNECTED; + exit_on_usb(action); break; } } - jackpot_exit(NULL); return PLUGIN_OK; } diff --git a/apps/plugins/jewels.c b/apps/plugins/jewels.c index c2340aa557..fdf4ff70e5 100644 --- a/apps/plugins/jewels.c +++ b/apps/plugins/jewels.c @@ -29,7 +29,7 @@ #ifdef HAVE_LCD_BITMAP -PLUGIN_HEADER + /* button definitions */ #if CONFIG_KEYPAD == RECORDER_PAD diff --git a/apps/plugins/keybox.c b/apps/plugins/keybox.c index a241e40440..8ac4064996 100644 --- a/apps/plugins/keybox.c +++ b/apps/plugins/keybox.c @@ -21,7 +21,7 @@ #include "plugin.h" #include "lib/playback_control.h" #include "lib/md5.h" -PLUGIN_HEADER + #define KEYBOX_FILE PLUGIN_APPS_DIR "/keybox.dat" #define BLOCK_SIZE 8 diff --git a/apps/plugins/lamp.c b/apps/plugins/lamp.c index 8c2dff5254..0074933fd8 100644 --- a/apps/plugins/lamp.c +++ b/apps/plugins/lamp.c @@ -25,7 +25,7 @@ #include "plugin.h" #include "lib/helper.h" -PLUGIN_HEADER + /* variable button definitions - only targets with a colour display */ #if defined(HAVE_LCD_COLOR) diff --git a/apps/plugins/lib/SOURCES b/apps/plugins/lib/SOURCES index 1db9896065..6f17c70b90 100644 --- a/apps/plugins/lib/SOURCES +++ b/apps/plugins/lib/SOURCES @@ -2,7 +2,6 @@ gcc-support.c pluginlib_actions.c helper.c md5.c -pluginlib_exit.c jhash.c configfile.c fixedpoint.c diff --git a/apps/plugins/lib/pluginlib_exit.c b/apps/plugins/lib/pluginlib_exit.c deleted file mode 100644 index 82ae11aca0..0000000000 --- a/apps/plugins/lib/pluginlib_exit.c +++ /dev/null @@ -1,25 +0,0 @@ -/*************************************************************************** -* __________ __ ___. -* 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; - diff --git a/apps/plugins/lib/pluginlib_exit.h b/apps/plugins/lib/pluginlib_exit.h index 8c7f0c437f..411d0751d1 100644 --- a/apps/plugins/lib/pluginlib_exit.h +++ b/apps/plugins/lib/pluginlib_exit.h @@ -22,31 +22,33 @@ #ifndef __PLUGINLIB_EXIT_H__ #define __PLUGINLIB_EXIT_H__ -#include "config.h" -#include +/* make sure we are in sync with the real definitions, especially on + * hosted systems */ +#include +#include "gcc_extensions.h" -#define _PLUGINLIB_EXIT_INIT(atexit) switch(setjmp(__exit_env)) \ - { \ - case 1: \ - atexit \ - return PLUGIN_OK; \ - case 2: \ - atexit \ - return PLUGIN_ERROR; \ - case 0: \ - default: \ - break; \ - } +/* 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 -/* 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. +#ifndef EXIT_SUCCESS +#define EXIT_SUCCESS 0 +#define EXIT_FAILURE 1 +#endif + +/** + * helper function to handle USB connected events coming from + * button_get() + * + * it will exit the plugin if usb is detected, but it will call the atexit func + * before actually showing the usb screen + * + * it additionally handles power off as well, with the same behavior */ -#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) +extern void exit_on_usb(int button); #endif /* __PLUGINLIB_EXIT_H__ */ diff --git a/apps/plugins/logo.c b/apps/plugins/logo.c index db692840ba..43a7c3fd46 100644 --- a/apps/plugins/logo.c +++ b/apps/plugins/logo.c @@ -21,7 +21,7 @@ #include "plugin.h" #include "lib/playergfx.h" -PLUGIN_HEADER + #ifdef HAVE_LCD_BITMAP #define DISPLAY_WIDTH LCD_WIDTH diff --git a/apps/plugins/lrcplayer.c b/apps/plugins/lrcplayer.c index 43f3b8e359..9f43849d5b 100644 --- a/apps/plugins/lrcplayer.c +++ b/apps/plugins/lrcplayer.c @@ -24,7 +24,7 @@ #include "lib/helper.h" #include -PLUGIN_HEADER + #define MAX_LINE_LEN 256 #define LRC_BUFFER_SIZE 0x3000 /* 12 kiB */ diff --git a/apps/plugins/lua/rocklua.c b/apps/plugins/lua/rocklua.c index b92c274fb0..00bfd8e43e 100644 --- a/apps/plugins/lua/rocklua.c +++ b/apps/plugins/lua/rocklua.c @@ -20,7 +20,6 @@ ****************************************************************************/ #include "plugin.h" -#include "lib/pluginlib_exit.h" #include "lua.h" #include "lauxlib.h" #include "lualib.h" @@ -28,7 +27,7 @@ #include "rockmalloc.h" #include "luadir.h" -PLUGIN_HEADER + static const luaL_Reg lualibs[] = { {"", luaopen_base}, @@ -148,8 +147,6 @@ enum plugin_status plugin_start(const void* parameter) const char* filename; int status; - PLUGINLIB_EXIT_INIT - if (parameter == NULL) { rb->splash(HZ, "Play a .lua file!"); diff --git a/apps/plugins/matrix.c b/apps/plugins/matrix.c index 5a13b3aa38..d3429699af 100644 --- a/apps/plugins/matrix.c +++ b/apps/plugins/matrix.c @@ -34,7 +34,7 @@ #include "plugin.h" -PLUGIN_HEADER + /* Images */ #include "pluginbitmaps/matrix_bold.h" diff --git a/apps/plugins/maze.c b/apps/plugins/maze.c index 465dfa9e84..231b602911 100644 --- a/apps/plugins/maze.c +++ b/apps/plugins/maze.c @@ -33,7 +33,7 @@ #include "plugin.h" #include "lib/helper.h" -PLUGIN_HEADER + /* key assignments */ diff --git a/apps/plugins/mazezam.c b/apps/plugins/mazezam.c index f4b76df374..bb93825453 100644 --- a/apps/plugins/mazezam.c +++ b/apps/plugins/mazezam.c @@ -25,7 +25,7 @@ #include "lib/playback_control.h" /* Include standard plugin macro */ -PLUGIN_HEADER + #if (CONFIG_KEYPAD == IPOD_3G_PAD) # define MAZEZAM_MENU BUTTON_MENU diff --git a/apps/plugins/md5sum.c b/apps/plugins/md5sum.c index 9dd8f5a8a7..fe1c65efb0 100644 --- a/apps/plugins/md5sum.c +++ b/apps/plugins/md5sum.c @@ -22,7 +22,7 @@ #include "plugin.h" #include "lib/md5.h" -PLUGIN_HEADER + #define BUFFERSIZE 16384 diff --git a/apps/plugins/metronome.c b/apps/plugins/metronome.c index 37a7329b22..b38f0bbf2c 100644 --- a/apps/plugins/metronome.c +++ b/apps/plugins/metronome.c @@ -20,8 +20,9 @@ ****************************************************************************/ #include "plugin.h" #include "lib/pluginlib_actions.h" +#include "lib/pluginlib_exit.h" + -PLUGIN_HEADER #if CONFIG_CODEC != SWCODEC /* tick sound from a metronome */ @@ -846,13 +847,14 @@ void timer_callback(void) } } -void cleanup(void *parameter) +void cleanup(void) { - (void)parameter; - rb->timer_unregister(); MET_PLAY_STOP; /* stop audio ISR */ rb->led(0); +#if CONFIG_CODEC == SWCODEC + rb->pcm_set_frequency(HW_SAMPR_DEFAULT); +#endif } void tap(void) @@ -885,9 +887,9 @@ enum plugin_status plugin_start(const void* parameter) { int button; static int last_button = BUTTON_NONE; - enum plugin_status status; (void)parameter; + atexit(cleanup); if (MET_IS_PLAYING) MET_PLAY_STOP; /* stop audio IS */ @@ -927,9 +929,7 @@ enum plugin_status plugin_start(const void* parameter) case METRONOME_QUIT: /* get out of here */ - cleanup(NULL); - status = PLUGIN_OK; - goto metronome_exit; + return PLUGIN_OK; case METRONOME_PAUSE: if(!sound_paused) @@ -981,12 +981,7 @@ enum plugin_status plugin_start(const void* parameter) #endif default: - if (rb->default_event_handler_ex(button, cleanup, NULL) - == SYS_USB_CONNECTED) - { - status = PLUGIN_USB_CONNECTED; - goto metronome_exit; - } + exit_on_usb(button); reset_tap = false; break; @@ -998,11 +993,5 @@ enum plugin_status plugin_start(const void* parameter) } rb->yield(); } - -metronome_exit: -#if CONFIG_CODEC == SWCODEC - rb->pcm_set_frequency(HW_SAMPR_DEFAULT); -#endif - return status; } diff --git a/apps/plugins/midi/midiplay.c b/apps/plugins/midi/midiplay.c index d9e215158e..442a747d89 100644 --- a/apps/plugins/midi/midiplay.c +++ b/apps/plugins/midi/midiplay.c @@ -25,7 +25,7 @@ #include "sequencer.h" #include "midifile.h" -PLUGIN_HEADER + PLUGIN_IRAM_DECLARE /* variable button definitions */ @@ -450,7 +450,6 @@ static int midimain(const void * filename) enum plugin_status plugin_start(const void* parameter) { int retval; - PLUGINLIB_EXIT_INIT; PLUGIN_IRAM_INIT(rb) diff --git a/apps/plugins/minesweeper.c b/apps/plugins/minesweeper.c index 58e56de159..5793ddedf8 100644 --- a/apps/plugins/minesweeper.c +++ b/apps/plugins/minesweeper.c @@ -25,7 +25,7 @@ #include "lib/playback_control.h" -PLUGIN_HEADER + /* what the minesweeper() function can return */ enum minesweeper_status { diff --git a/apps/plugins/mosaique.c b/apps/plugins/mosaique.c index 43efc27d77..42c9254259 100644 --- a/apps/plugins/mosaique.c +++ b/apps/plugins/mosaique.c @@ -22,7 +22,7 @@ #include "lib/playergfx.h" #include "lib/mylcd.h" -PLUGIN_HEADER + #ifdef HAVE_LCD_BITMAP #define GFX_X (LCD_WIDTH/2-1) diff --git a/apps/plugins/mp3_encoder.c b/apps/plugins/mp3_encoder.c index da749b82c9..06d28a344a 100644 --- a/apps/plugins/mp3_encoder.c +++ b/apps/plugins/mp3_encoder.c @@ -14,7 +14,7 @@ #include #include "plugin.h" -PLUGIN_HEADER + PLUGIN_IRAM_DECLARE #define SAMP_PER_FRAME 1152 diff --git a/apps/plugins/mpegplayer/mpegplayer.c b/apps/plugins/mpegplayer/mpegplayer.c index 961214f407..8142c6f43e 100644 --- a/apps/plugins/mpegplayer/mpegplayer.c +++ b/apps/plugins/mpegplayer/mpegplayer.c @@ -108,7 +108,7 @@ #include "stream_thread.h" #include "stream_mgr.h" -PLUGIN_HEADER + PLUGIN_IRAM_DECLARE /* button definitions */ diff --git a/apps/plugins/nim.c b/apps/plugins/nim.c index 460e2751e9..3301277410 100644 --- a/apps/plugins/nim.c +++ b/apps/plugins/nim.c @@ -48,7 +48,7 @@ V1.2 : 2003-07-30 take a match. Later you are obliged to take at least one.) */ -PLUGIN_HEADER + /*Pattern for the game*/ static unsigned char smile[]={0x00, 0x11, 0x04, 0x04, 0x00, 0x11, 0x0E}; /* :-) */ @@ -144,6 +144,7 @@ enum plugin_status plugin_start(const void* parameter) int x,v,min; bool ok; bool go; + atexit(nim_exit); /* if you don't use the parameter, you can do like this to avoid the compiler warning about it */ @@ -193,7 +194,6 @@ enum plugin_status plugin_start(const void* parameter) { case BUTTON_STOP|BUTTON_REL: go = true; - nim_exit(NULL); return PLUGIN_OK; break; @@ -214,9 +214,7 @@ enum plugin_status plugin_start(const void* parameter) break; default: - if (rb->default_event_handler_ex(button, nim_exit, - NULL) == SYS_USB_CONNECTED) - return PLUGIN_USB_CONNECTED; + exit_on_usb(button); break; } display_first_line(x); @@ -291,7 +289,6 @@ enum plugin_status plugin_start(const void* parameter) min=1; } } - nim_exit(NULL); return PLUGIN_OK; } #endif diff --git a/apps/plugins/oscilloscope.c b/apps/plugins/oscilloscope.c index 4195d96d5f..e9c21ff119 100644 --- a/apps/plugins/oscilloscope.c +++ b/apps/plugins/oscilloscope.c @@ -23,12 +23,13 @@ #include "plugin.h" #include "lib/helper.h" +#include "lib/pluginlib_exit.h" #ifdef HAVE_LCD_BITMAP #include "lib/xlcd.h" #include "lib/configfile.h" -PLUGIN_HEADER + /* variable button definitions */ #if CONFIG_KEYPAD == RECORDER_PAD @@ -751,9 +752,8 @@ void anim_vertical(int cur_left, int cur_right) last_pos = cur_y; } -void cleanup(void *parameter) +void cleanup(void) { - (void)parameter; #if LCD_DEPTH > 1 rb->lcd_set_foreground(LCD_DEFAULT_FG); rb->lcd_set_background(LCD_DEFAULT_BG); @@ -772,6 +772,7 @@ enum plugin_status plugin_start(const void* parameter) (void)parameter; + atexit(cleanup); configfile_load(cfg_filename, disk_config, sizeof(disk_config) / sizeof(disk_config[0]), CFGFILE_MINVERSION); @@ -892,9 +893,7 @@ enum plugin_status plugin_start(const void* parameter) break; default: - if (rb->default_event_handler_ex(button, cleanup, NULL) - == SYS_USB_CONNECTED) - return PLUGIN_USB_CONNECTED; + exit_on_usb(button); break; } if (button != BUTTON_NONE) @@ -908,7 +907,6 @@ enum plugin_status plugin_start(const void* parameter) displaymsg = true; } } - cleanup(NULL); if (rb->memcmp(&osc, &osc_disk, sizeof(osc))) /* save settings if changed */ { rb->memcpy(&osc_disk, &osc, sizeof(osc)); diff --git a/apps/plugins/pacbox/pacbox.c b/apps/plugins/pacbox/pacbox.c index 7f40822e0d..db25b1c0f1 100644 --- a/apps/plugins/pacbox/pacbox.c +++ b/apps/plugins/pacbox/pacbox.c @@ -32,7 +32,7 @@ #include "lib/configfile.h" #include "lib/playback_control.h" -PLUGIN_HEADER + PLUGIN_IRAM_DECLARE struct pacman_settings { diff --git a/apps/plugins/pdbox/pdbox.c b/apps/plugins/pdbox/pdbox.c index 4fa6978417..7f4a7ac6dc 100644 --- a/apps/plugins/pdbox/pdbox.c +++ b/apps/plugins/pdbox/pdbox.c @@ -28,7 +28,7 @@ #include "PDa/src/s_stuff.h" /* Welcome to the PDBox plugin */ -PLUGIN_HEADER + PLUGIN_IRAM_DECLARE /* Name of the file to open. */ diff --git a/apps/plugins/pegbox.c b/apps/plugins/pegbox.c index a429b00166..a953c6804b 100644 --- a/apps/plugins/pegbox.c +++ b/apps/plugins/pegbox.c @@ -26,7 +26,7 @@ #include "pluginbitmaps/pegbox_header.h" #include "pluginbitmaps/pegbox_pieces.h" -PLUGIN_HEADER + #define CONFIG_FILE_NAME "pegbox.cfg" diff --git a/apps/plugins/pictureflow.c b/apps/plugins/pictureflow.c index 75dc4052c5..738ca2f672 100644 --- a/apps/plugins/pictureflow.c +++ b/apps/plugins/pictureflow.c @@ -24,7 +24,7 @@ #include "lib/overlay.h" -PLUGIN_HEADER + /* this is the plugin entry point */ enum plugin_status plugin_start(const void* parameter) diff --git a/apps/plugins/pictureflow/pictureflow.c b/apps/plugins/pictureflow/pictureflow.c index 546afad217..8ad62b0238 100644 --- a/apps/plugins/pictureflow/pictureflow.c +++ b/apps/plugins/pictureflow/pictureflow.c @@ -27,6 +27,7 @@ #include #include "lib/read_image.h" #include "lib/pluginlib_actions.h" +#include "lib/pluginlib_exit.h" #include "lib/helper.h" #include "lib/configfile.h" #include "lib/grey.h" @@ -34,7 +35,7 @@ #include "lib/feature_wrappers.h" #include "lib/buflib.h" -PLUGIN_HEADER + /******************************* Globals ***********************************/ @@ -2068,9 +2069,8 @@ void update_scroll_animation(void) /** Cleanup the plugin */ -void cleanup(void *parameter) +void cleanup(void) { - (void) parameter; int i; #ifdef HAVE_ADJUSTABLE_CPU_FREQ rb->cpu_boost(false); @@ -2610,19 +2610,6 @@ int main(void) cache_version = CACHE_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); if (!(empty_slide_hid = read_pfraw(EMPTY_SLIDE, 0))) @@ -2841,9 +2828,7 @@ int main(void) } break; default: - if (rb->default_event_handler_ex(button, cleanup, NULL) - == SYS_USB_CONNECTED) - return PLUGIN_USB_CONNECTED; + exit_on_usb(button); break; } } @@ -2855,6 +2840,7 @@ enum plugin_status plugin_start(const void *parameter) { int ret, i; (void) parameter; + atexit(cleanup); FOR_NB_SCREENS(i) rb->viewportmanager_theme_enable(i, false, NULL); @@ -2873,6 +2859,21 @@ enum plugin_status plugin_start(const void *parameter) } #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(); if ( ret == PLUGIN_OK || ret == PLUGIN_GOTO_WPS) { if (configfile_save(CONFIG_FILE, config, CONFIG_NUM_ITEMS, @@ -2882,7 +2883,5 @@ enum plugin_status plugin_start(const void *parameter) ret = PLUGIN_ERROR; } } - - cleanup(NULL); return ret; } diff --git a/apps/plugins/pitch_detector.c b/apps/plugins/pitch_detector.c index 36248a540d..b3003cd522 100644 --- a/apps/plugins/pitch_detector.c +++ b/apps/plugins/pitch_detector.c @@ -68,7 +68,7 @@ #include "lib/helper.h" #include "pluginbitmaps/pitch_notes.h" -PLUGIN_HEADER + PLUGIN_IRAM_DECLARE /* Some fixed point calculation stuff */ diff --git a/apps/plugins/plasma.c b/apps/plugins/plasma.c index 637d948f3d..35bc03ba1f 100644 --- a/apps/plugins/plasma.c +++ b/apps/plugins/plasma.c @@ -27,6 +27,7 @@ #include "plugin.h" #include "lib/helper.h" #include "lib/pluginlib_actions.h" +#include "lib/pluginlib_exit.h" #ifdef HAVE_LCD_BITMAP @@ -35,7 +36,6 @@ #endif #include "lib/fixedpoint.h" -PLUGIN_HEADER /******************************* Globals ***********************************/ @@ -131,10 +131,8 @@ static void shades_generate(void) } #endif -void cleanup(void *parameter) +void cleanup(void) { - (void)parameter; - #ifdef HAVE_ADJUSTABLE_CPU_FREQ if (boosted) rb->cpu_boost(false); @@ -144,6 +142,9 @@ void cleanup(void *parameter) #endif /* Turn on backlight timeout (revert to settings) */ 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 } /* @@ -180,10 +181,15 @@ int main(void) /* get the remainder of the plugin buffer */ gbuf = (unsigned char *) rb->plugin_get_buffer(&gbuf_size); - 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"); + return PLUGIN_ERROR; + } /* switch on greyscale overlay */ grey_show(true); #endif + atexit(cleanup); sp1 = 4; sp2 = 2; sp3 = 4; @@ -261,7 +267,6 @@ int main(void) { case PLA_EXIT: case PLA_CANCEL: - cleanup(NULL); return PLUGIN_OK; break; @@ -299,9 +304,7 @@ int main(void) #endif default: - if (rb->default_event_handler_ex(action, cleanup, NULL) - == SYS_USB_CONNECTED) - return PLUGIN_USB_CONNECTED; + exit_on_usb(action); break; } } @@ -311,8 +314,6 @@ int main(void) enum plugin_status plugin_start(const void* parameter) { - int ret; - (void)parameter; #if LCD_DEPTH > 1 rb->lcd_set_backdrop(NULL); @@ -323,14 +324,7 @@ enum plugin_status plugin_start(const void* parameter) #if defined(HAVE_LCD_MODES) && (HAVE_LCD_MODES & LCD_MODE_PAL256) rb->lcd_set_mode(LCD_MODE_PAL256); #endif - - ret = main(); - -#if defined(HAVE_LCD_MODES) && (HAVE_LCD_MODES & LCD_MODE_PAL256) - rb->lcd_set_mode(LCD_MODE_RGB565); -#endif - - return ret; + return main(); } #endif /* HAVE_LCD_BITMAP */ diff --git a/apps/plugins/plugin_crt0.c b/apps/plugins/plugin_crt0.c new file mode 100755 index 0000000000..ff117be002 --- /dev/null +++ b/apps/plugins/plugin_crt0.c @@ -0,0 +1,112 @@ +/*************************************************************************** +* __________ __ ___. +* 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" +#include + +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); +} diff --git a/apps/plugins/plugins.make b/apps/plugins/plugins.make index 532dba68c0..ed432d92be 100644 --- a/apps/plugins/plugins.make +++ b/apps/plugins/plugins.make @@ -33,7 +33,7 @@ PLUGIN_LDS := $(APPSDIR)/plugins/plugin.lds PLUGINLINK_LDS := $(BUILDDIR)/apps/plugins/plugin.link OVERLAYREF_LDS := $(BUILDDIR)/apps/plugins/overlay_ref.link endif - +PLUGIN_CRT0 := $(BUILDDIR)/apps/plugins/plugin_crt0.o # multifile plugins (subdirs): PLUGINSUBDIRS := $(call preprocess, $(APPSDIR)/plugins/SUBDIRS) @@ -49,7 +49,7 @@ PLUGINFLAGS = -I$(APPSDIR)/plugins -DPLUGIN $(CFLAGS) $(ROCKS1): $(BUILDDIR)/%.rock: $(BUILDDIR)/%.o # dependency for all plugins -$(ROCKS): $(APPSDIR)/plugin.h $(PLUGINLINK_LDS) $(PLUGINLIB) $(PLUGINBITMAPLIB) +$(ROCKS): $(APPSDIR)/plugin.h $(PLUGINLINK_LDS) $(PLUGINLIB) $(PLUGINBITMAPLIB) $(PLUGIN_CRT0) $(LIBSETJMP) $(PLUGINLIB): $(PLUGINLIB_OBJ) $(SILENT)$(shell rm -f $@) @@ -89,7 +89,7 @@ else endif PLUGINLDFLAGS += $(GLOBAL_LDOPTS) -$(BUILDDIR)/%.rock: $(LIBSETJMP) +$(BUILDDIR)/%.rock: $(call PRINTS,LD $(@F))$(CC) $(PLUGINFLAGS) -o $(BUILDDIR)/$*.elf \ $(filter %.o, $^) \ $(filter %.a, $+) \ @@ -103,7 +103,7 @@ endif $(BUILDDIR)/apps/plugins/%.lua: $(ROOTDIR)/apps/plugins/%.lua $(call PRINTS,CP $(subst $(ROOTDIR)/,,$<))cp $< $(BUILDDIR)/apps/plugins/ -$(BUILDDIR)/%.refmap: $(APPSDIR)/plugin.h $(OVERLAYREF_LDS) $(PLUGINLIB) $(PLUGINBITMAPLIB) +$(BUILDDIR)/%.refmap: $(APPSDIR)/plugin.h $(OVERLAYREF_LDS) $(PLUGINLIB) $(PLUGINBITMAPLIB) $(LIBSETJMP) $(PLUGIN_CRT0) $(call PRINTS,LD $(@F))$(CC) $(PLUGINFLAGS) -o /dev/null \ $(filter %.o, $^) \ $(filter %.a, $+) \ diff --git a/apps/plugins/pong.c b/apps/plugins/pong.c index 08899d767a..8a41d9eeb2 100644 --- a/apps/plugins/pong.c +++ b/apps/plugins/pong.c @@ -22,7 +22,7 @@ #ifdef HAVE_LCD_BITMAP -PLUGIN_HEADER + #define PAD_HEIGHT LCD_HEIGHT / 6 /* Recorder: 10 iRiver: 21 */ #define PAD_WIDTH LCD_WIDTH / 50 /* Recorder: 2 iRiver: 2 */ diff --git a/apps/plugins/ppmviewer.c b/apps/plugins/ppmviewer.c index c947af10bd..035fffe92a 100644 --- a/apps/plugins/ppmviewer.c +++ b/apps/plugins/ppmviewer.c @@ -24,7 +24,7 @@ #if defined(HAVE_LCD_COLOR) -PLUGIN_HEADER + /* Magic constants. */ #define PPM_MAGIC1 'P' diff --git a/apps/plugins/properties.c b/apps/plugins/properties.c index 9d9020f023..2e34a4e048 100644 --- a/apps/plugins/properties.c +++ b/apps/plugins/properties.c @@ -20,7 +20,7 @@ ****************************************************************************/ #include "plugin.h" -PLUGIN_HEADER + bool its_a_dir = false; diff --git a/apps/plugins/random_folder_advance_config.c b/apps/plugins/random_folder_advance_config.c index 9a589dfff6..55d9bf99ab 100644 --- a/apps/plugins/random_folder_advance_config.c +++ b/apps/plugins/random_folder_advance_config.c @@ -21,7 +21,7 @@ #include "plugin.h" #include "file.h" -PLUGIN_HEADER + static bool cancel; static int fd; diff --git a/apps/plugins/remote_control.c b/apps/plugins/remote_control.c index e00d5de54c..a5ad4423a1 100644 --- a/apps/plugins/remote_control.c +++ b/apps/plugins/remote_control.c @@ -23,7 +23,7 @@ #include "lib/pluginlib_actions.h" -PLUGIN_HEADER + #define PLUGIN_CONTINUE 10 diff --git a/apps/plugins/reversi/reversi-gui.c b/apps/plugins/reversi/reversi-gui.c index 67ccf19456..dcdfe5fd35 100644 --- a/apps/plugins/reversi/reversi-gui.c +++ b/apps/plugins/reversi/reversi-gui.c @@ -47,7 +47,7 @@ further options: #include "lib/playback_control.h" -PLUGIN_HEADER + /* 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 diff --git a/apps/plugins/robotfindskitten.c b/apps/plugins/robotfindskitten.c index 0e5c94ea7e..003087b5c3 100644 --- a/apps/plugins/robotfindskitten.c +++ b/apps/plugins/robotfindskitten.c @@ -34,7 +34,7 @@ /* This macros must always be included. Should be placed at the top by convention, although the actual position doesn't matter */ -PLUGIN_HEADER + /*Be sure to change MESSAGES when you change the array, or bad things will happen.*/ diff --git a/apps/plugins/rockblox.c b/apps/plugins/rockblox.c index 084eaa5830..90df401ef9 100644 --- a/apps/plugins/rockblox.c +++ b/apps/plugins/rockblox.c @@ -28,7 +28,7 @@ #include "lib/playergfx.h" #include "lib/mylcd.h" -PLUGIN_HEADER + #if (CONFIG_KEYPAD == IPOD_4G_PAD) || \ (CONFIG_KEYPAD == IPOD_3G_PAD) || \ diff --git a/apps/plugins/rockblox1d.c b/apps/plugins/rockblox1d.c index 5006d88a2d..1306cc9932 100644 --- a/apps/plugins/rockblox1d.c +++ b/apps/plugins/rockblox1d.c @@ -22,7 +22,7 @@ #include "plugin.h" -PLUGIN_HEADER + #ifdef HAVE_LCD_BITMAP diff --git a/apps/plugins/rockbox_flash.c b/apps/plugins/rockbox_flash.c index 17c5e51ee2..f1c4f537da 100644 --- a/apps/plugins/rockbox_flash.c +++ b/apps/plugins/rockbox_flash.c @@ -25,7 +25,7 @@ #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 */ diff --git a/apps/plugins/rockboy.c b/apps/plugins/rockboy.c index bd72dea1f8..b4520733ae 100644 --- a/apps/plugins/rockboy.c +++ b/apps/plugins/rockboy.c @@ -24,7 +24,7 @@ #include "lib/overlay.h" -PLUGIN_HEADER + /* this is the plugin entry point */ enum plugin_status plugin_start(const void* parameter) diff --git a/apps/plugins/rockboy/rockboy.c b/apps/plugins/rockboy/rockboy.c index 797971c734..7fc919912e 100644 --- a/apps/plugins/rockboy/rockboy.c +++ b/apps/plugins/rockboy/rockboy.c @@ -26,7 +26,7 @@ #include "hw.h" #include "pcm.h" -PLUGIN_HEADER + PLUGIN_IRAM_DECLARE int shut,cleanshut; diff --git a/apps/plugins/rocklife.c b/apps/plugins/rocklife.c index 210cffa78d..afe442f989 100644 --- a/apps/plugins/rocklife.c +++ b/apps/plugins/rocklife.c @@ -64,7 +64,7 @@ #include "lib/pluginlib_actions.h" #include "lib/helper.h" -PLUGIN_HEADER + #define ROCKLIFE_PLAY_PAUSE PLA_SELECT #define ROCKLIFE_INIT PLA_DOWN diff --git a/apps/plugins/rockpaint.c b/apps/plugins/rockpaint.c index 264e4f6b14..7032a8e793 100644 --- a/apps/plugins/rockpaint.c +++ b/apps/plugins/rockpaint.c @@ -33,7 +33,7 @@ #include "lib/rgb_hsv.h" #include "lib/playback_control.h" -PLUGIN_HEADER + /*********************************************************************** * Buttons diff --git a/apps/plugins/search.c b/apps/plugins/search.c index 7edb7e229a..76d8711feb 100644 --- a/apps/plugins/search.c +++ b/apps/plugins/search.c @@ -22,7 +22,7 @@ #include "plugin.h" #include -PLUGIN_HEADER + #define BUFFER_SIZE 16384 diff --git a/apps/plugins/searchengine/searchengine.c b/apps/plugins/searchengine/searchengine.c index f737a27621..4e8bc452f1 100644 --- a/apps/plugins/searchengine/searchengine.c +++ b/apps/plugins/searchengine/searchengine.c @@ -23,7 +23,7 @@ #include "token.h" #include "dbinterface.h" -PLUGIN_HEADER + void *audio_bufferbase; void *audio_bufferpointer; diff --git a/apps/plugins/settings_dumper.c b/apps/plugins/settings_dumper.c index 93c4f67657..381cdeebaa 100644 --- a/apps/plugins/settings_dumper.c +++ b/apps/plugins/settings_dumper.c @@ -20,7 +20,7 @@ ****************************************************************************/ #include "plugin.h" -PLUGIN_HEADER + #define FILENAME "/settings_dumper.txt" static int setting_count = 0; diff --git a/apps/plugins/shopper.c b/apps/plugins/shopper.c index b05395bec2..61cf2953af 100644 --- a/apps/plugins/shopper.c +++ b/apps/plugins/shopper.c @@ -21,7 +21,7 @@ #include "plugin.h" #include "lib/playback_control.h" -PLUGIN_HEADER + #define MAX_LIST_SIZE 400 #define DESC_SIZE 40 diff --git a/apps/plugins/shortcuts/shortcuts_append.c b/apps/plugins/shortcuts/shortcuts_append.c index 69b2a445f3..3eea87e46e 100644 --- a/apps/plugins/shortcuts/shortcuts_append.c +++ b/apps/plugins/shortcuts/shortcuts_append.c @@ -22,7 +22,7 @@ #include "shortcuts.h" -PLUGIN_HEADER + bool append_entry_to_file(sc_file_t *file, char *path, bool is_dir) diff --git a/apps/plugins/shortcuts/shortcuts_view.c b/apps/plugins/shortcuts/shortcuts_view.c index a63e26d7c6..469241fd84 100644 --- a/apps/plugins/shortcuts/shortcuts_view.c +++ b/apps/plugins/shortcuts/shortcuts_view.c @@ -22,7 +22,7 @@ #include "shortcuts.h" -PLUGIN_HEADER + enum sc_list_action_type { diff --git a/apps/plugins/sliding_puzzle.c b/apps/plugins/sliding_puzzle.c index 7bf49c123d..4d7d2c00ca 100644 --- a/apps/plugins/sliding_puzzle.c +++ b/apps/plugins/sliding_puzzle.c @@ -21,7 +21,7 @@ #include "plugin.h" #ifdef HAVE_LCD_BITMAP -PLUGIN_HEADER + /* variable button definitions */ #if CONFIG_KEYPAD == RECORDER_PAD diff --git a/apps/plugins/snake.c b/apps/plugins/snake.c index c3fe84e6d0..00a43e5cc7 100644 --- a/apps/plugins/snake.c +++ b/apps/plugins/snake.c @@ -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/playback_control.h" -PLUGIN_HEADER + /* variable button definitions */ #if CONFIG_KEYPAD == RECORDER_PAD diff --git a/apps/plugins/snake2.c b/apps/plugins/snake2.c index 414d924c4a..3fbf40b8f9 100644 --- a/apps/plugins/snake2.c +++ b/apps/plugins/snake2.c @@ -34,7 +34,7 @@ Head and Tail are stored #include "lib/highscore.h" #include "lib/playback_control.h" -PLUGIN_HEADER + #define WIDTH 28 #define HEIGHT 16 diff --git a/apps/plugins/snow.c b/apps/plugins/snow.c index c3c9b7458a..c9abae4b97 100644 --- a/apps/plugins/snow.c +++ b/apps/plugins/snow.c @@ -22,7 +22,7 @@ #include "lib/playergfx.h" #include "lib/mylcd.h" -PLUGIN_HEADER + #ifdef HAVE_LCD_BITMAP #define NUM_PARTICLES (LCD_WIDTH * LCD_HEIGHT / 72) diff --git a/apps/plugins/sokoban.c b/apps/plugins/sokoban.c index b2721c84e9..6e94519803 100644 --- a/apps/plugins/sokoban.c +++ b/apps/plugins/sokoban.c @@ -24,7 +24,7 @@ #include "plugin.h" #include "lib/playback_control.h" -PLUGIN_HEADER + #define SOKOBAN_TITLE "Sokoban" diff --git a/apps/plugins/solitaire.c b/apps/plugins/solitaire.c index 1c7aefb1c3..1d2535f657 100644 --- a/apps/plugins/solitaire.c +++ b/apps/plugins/solitaire.c @@ -28,7 +28,7 @@ #ifdef HAVE_LCD_BITMAP -PLUGIN_HEADER + #define min(a,b) (aread_bmp_file #endif -PLUGIN_HEADER + GREY_INFO_STRUCT static unsigned char grey_bm_buf[LCD_WIDTH * LCD_HEIGHT + BM_SCALED_SIZE(LCD_WIDTH,0,FORMAT_NATIVE,0)]; diff --git a/apps/plugins/test_mem.c b/apps/plugins/test_mem.c index f648c0073a..7758e35b98 100644 --- a/apps/plugins/test_mem.c +++ b/apps/plugins/test_mem.c @@ -21,7 +21,7 @@ #include "plugin.h" -PLUGIN_HEADER + #if PLUGIN_BUFFER_SIZE <= 0x8000 #define BUF_SIZE (1<<12) /* 16 KB = (1<<12)*sizeof(int) */ diff --git a/apps/plugins/test_mem_jpeg.c b/apps/plugins/test_mem_jpeg.c index 6e7d381a2d..72f613135a 100644 --- a/apps/plugins/test_mem_jpeg.c +++ b/apps/plugins/test_mem_jpeg.c @@ -25,7 +25,7 @@ #include "lib/grey.h" #include "lib/jpeg_mem.h" #include "lib/mylcd.h" -PLUGIN_HEADER + /* different graphics libraries */ #if LCD_DEPTH < 8 diff --git a/apps/plugins/test_resize.c b/apps/plugins/test_resize.c index 8ee4989bcf..2ab10eb7ee 100644 --- a/apps/plugins/test_resize.c +++ b/apps/plugins/test_resize.c @@ -28,7 +28,7 @@ #include "lib/pluginlib_actions.h" #include "lib/pluginlib_bmp.h" -PLUGIN_HEADER + const struct button_mapping *plugin_contexts[] = {pla_main_ctx}; diff --git a/apps/plugins/test_sampr.c b/apps/plugins/test_sampr.c index 1f6ee351e1..85525c543b 100644 --- a/apps/plugins/test_sampr.c +++ b/apps/plugins/test_sampr.c @@ -28,7 +28,7 @@ * with sample rate. */ -PLUGIN_HEADER + PLUGIN_IRAM_DECLARE; static int hw_freq IDATA_ATTR = HW_FREQ_DEFAULT; diff --git a/apps/plugins/test_scanrate.c b/apps/plugins/test_scanrate.c index 1aa9febf30..81d8248013 100644 --- a/apps/plugins/test_scanrate.c +++ b/apps/plugins/test_scanrate.c @@ -23,7 +23,7 @@ #if defined(HAVE_LCD_BITMAP) && (LCD_DEPTH < 4) && !defined(SIMULATOR) -PLUGIN_HEADER + #if (CONFIG_KEYPAD == RECORDER_PAD) || (CONFIG_KEYPAD == ONDIO_PAD) \ || (CONFIG_KEYPAD == IRIVER_H100_PAD) diff --git a/apps/plugins/test_touchscreen.c b/apps/plugins/test_touchscreen.c index 902a2bd089..0c9cdc7302 100644 --- a/apps/plugins/test_touchscreen.c +++ b/apps/plugins/test_touchscreen.c @@ -20,7 +20,7 @@ ****************************************************************************/ #include "plugin.h" -PLUGIN_HEADER + #if (CONFIG_KEYPAD == COWON_D2_PAD) #define TOUCHSCREEN_QUIT BUTTON_POWER diff --git a/apps/plugins/test_viewports.c b/apps/plugins/test_viewports.c index 08c23a91c8..be61c7792e 100644 --- a/apps/plugins/test_viewports.c +++ b/apps/plugins/test_viewports.c @@ -21,7 +21,7 @@ #include "plugin.h" -PLUGIN_HEADER + #ifdef HAVE_LCD_BITMAP diff --git a/apps/plugins/text_editor.c b/apps/plugins/text_editor.c index acd82b8794..ceb71e4495 100644 --- a/apps/plugins/text_editor.c +++ b/apps/plugins/text_editor.c @@ -22,7 +22,7 @@ #include "lib/playback_control.h" #define MAX_LINE_LEN 2048 -PLUGIN_HEADER + static unsigned char *buffer; static size_t buffer_size; diff --git a/apps/plugins/text_viewer/text_viewer.c b/apps/plugins/text_viewer/text_viewer.c index eae85213ac..5d06d4b477 100644 --- a/apps/plugins/text_viewer/text_viewer.c +++ b/apps/plugins/text_viewer/text_viewer.c @@ -21,11 +21,12 @@ * ****************************************************************************/ #include "plugin.h" +#include "lib/pluginlib_exit.h" #include "tv_action.h" #include "tv_button.h" #include "tv_preferences.h" -PLUGIN_HEADER + enum plugin_status plugin_start(const void* file) { @@ -56,6 +57,7 @@ enum plugin_status plugin_start(const void* file) return PLUGIN_ERROR; } + atexit(tv_exit); while (!done) { #ifdef HAVE_LCD_BITMAP if (rb->global_settings->statusbar != STATUSBAR_OFF && preferences->statusbar) @@ -79,12 +81,12 @@ enum plugin_status plugin_start(const void* file) if (res != TV_MENU_RESULT_EXIT_MENU) { - tv_exit(NULL); - done = true; if (res == TV_MENU_RESULT_ATTACHED_USB) return PLUGIN_USB_CONNECTED; else if (res == TV_MENU_RESULT_ERROR) return PLUGIN_ERROR; + else + done = true; } } break; @@ -195,7 +197,6 @@ enum plugin_status plugin_start(const void* file) #ifdef TV_QUIT2 case TV_QUIT2: #endif - tv_exit(NULL); done = true; break; @@ -204,9 +205,7 @@ enum plugin_status plugin_start(const void* file) break; default: - if (rb->default_event_handler_ex(button, tv_exit, NULL) - == SYS_USB_CONNECTED) - return PLUGIN_USB_CONNECTED; + exit_on_usb(button); display_update = false; break; } diff --git a/apps/plugins/text_viewer/tv_action.c b/apps/plugins/text_viewer/tv_action.c index c95ece0649..1e5473b438 100644 --- a/apps/plugins/text_viewer/tv_action.c +++ b/apps/plugins/text_viewer/tv_action.c @@ -47,10 +47,8 @@ static void tv_finalize_action(void) tv_finalize_window(); } -void tv_exit(void *parameter) +void tv_exit(void) { - (void)parameter; - /* save preference and bookmarks */ if (!tv_save_settings()) rb->splash(HZ, "Can't save preferences and bookmarks"); diff --git a/apps/plugins/text_viewer/tv_action.h b/apps/plugins/text_viewer/tv_action.h index fba008dbe9..5b3571db30 100644 --- a/apps/plugins/text_viewer/tv_action.h +++ b/apps/plugins/text_viewer/tv_action.h @@ -58,11 +58,8 @@ bool tv_init_action(unsigned char **buf, size_t *bufsize); /* * finalize modules - * - * [In] parameter - * this argument does not use */ -void tv_exit(void *parameter); +void tv_exit(void); /* * load the file diff --git a/apps/plugins/theme_remove.c b/apps/plugins/theme_remove.c index f818ac4afe..d679338ff8 100644 --- a/apps/plugins/theme_remove.c +++ b/apps/plugins/theme_remove.c @@ -20,7 +20,7 @@ #include "plugin.h" #include "lib/configfile.h" -PLUGIN_HEADER + /* taken from apps/gui/wps_parser.c */ #define WPS_DEFAULTCFG WPS_DIR "/rockbox_default.wps" diff --git a/apps/plugins/vbrfix.c b/apps/plugins/vbrfix.c index ba13dc53f9..71c502bc67 100644 --- a/apps/plugins/vbrfix.c +++ b/apps/plugins/vbrfix.c @@ -20,7 +20,7 @@ ****************************************************************************/ #include "plugin.h" -PLUGIN_HEADER + static char *audiobuf; static size_t audiobuflen; diff --git a/apps/plugins/video.c b/apps/plugins/video.c index 6b0a47c7c6..869a053886 100644 --- a/apps/plugins/video.c +++ b/apps/plugins/video.c @@ -33,7 +33,7 @@ #ifdef HAVE_LCD_BITMAP /* and definitely not for the Player, haha */ -PLUGIN_HEADER + /* variable button definitions */ #if CONFIG_KEYPAD == RECORDER_PAD diff --git a/apps/plugins/vu_meter.c b/apps/plugins/vu_meter.c index fc04bc7842..6dc69d1d4e 100644 --- a/apps/plugins/vu_meter.c +++ b/apps/plugins/vu_meter.c @@ -21,7 +21,7 @@ #include "lib/fixedpoint.h" #include "lib/playback_control.h" -PLUGIN_HEADER + /* variable button definitions */ #if CONFIG_KEYPAD == RECORDER_PAD diff --git a/apps/plugins/wav2wv.c b/apps/plugins/wav2wv.c index 3211203db9..98b4c0fe4f 100644 --- a/apps/plugins/wav2wv.c +++ b/apps/plugins/wav2wv.c @@ -25,7 +25,7 @@ #include -PLUGIN_HEADER + #define SAMPLES_PER_BLOCK 22050 diff --git a/apps/plugins/wavplay.c b/apps/plugins/wavplay.c index 94fef9faa0..cbd4dfbeda 100644 --- a/apps/plugins/wavplay.c +++ b/apps/plugins/wavplay.c @@ -20,7 +20,7 @@ ****************************************************************************/ #include "plugin.h" -PLUGIN_HEADER + /************ Start of MAS pcm codec, raw i2c blocks ************/ diff --git a/apps/plugins/wavrecord.c b/apps/plugins/wavrecord.c index 83b63e9805..375642ec4b 100644 --- a/apps/plugins/wavrecord.c +++ b/apps/plugins/wavrecord.c @@ -21,7 +21,7 @@ #include "plugin.h" #include "lib/configfile.h" -PLUGIN_HEADER + /************ Start of MAS pcm codec, raw i2c blocks ************/ diff --git a/apps/plugins/wavview.c b/apps/plugins/wavview.c index 2b19d3d18a..ddf72e10af 100644 --- a/apps/plugins/wavview.c +++ b/apps/plugins/wavview.c @@ -20,7 +20,7 @@ ****************************************************************************/ #include "plugin.h" -PLUGIN_HEADER + /* temp byte buffer */ uint8_t samples[10 * 1024]; /* read 10KB at the time */ diff --git a/apps/plugins/wormlet.c b/apps/plugins/wormlet.c index 037f4005a2..191c995ad6 100644 --- a/apps/plugins/wormlet.c +++ b/apps/plugins/wormlet.c @@ -23,7 +23,7 @@ #include "lib/helper.h" #include "lib/playback_control.h" -PLUGIN_HEADER + /* size of the field the worm lives in */ #define FIELD_RECT_X 1 diff --git a/apps/plugins/xobox.c b/apps/plugins/xobox.c index 4dd673c370..871cb2bdf5 100644 --- a/apps/plugins/xobox.c +++ b/apps/plugins/xobox.c @@ -24,7 +24,7 @@ #include "lib/helper.h" #include "lib/playback_control.h" -PLUGIN_HEADER + #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) diff --git a/apps/plugins/zxbox.c b/apps/plugins/zxbox.c index 94f7807bad..08e07d582a 100644 --- a/apps/plugins/zxbox.c +++ b/apps/plugins/zxbox.c @@ -21,7 +21,7 @@ #include "lib/overlay.h" -PLUGIN_HEADER + /* this is the plugin entry point */ enum plugin_status plugin_start(const void* parameter) diff --git a/apps/plugins/zxbox/zxbox.c b/apps/plugins/zxbox/zxbox.c index f33b51b9f6..459e0625b9 100644 --- a/apps/plugins/zxbox/zxbox.c +++ b/apps/plugins/zxbox/zxbox.c @@ -21,7 +21,7 @@ #include "zxconfig.h" -PLUGIN_HEADER + PLUGIN_IRAM_DECLARE #include "spkey_p.h"