New plugin loader. Solves the crashes introduced with the .bss changes while keeping the small binary size. The model & api version check is now part of the plugin loader. Codecs are not yet adapted, but the old method still works for them. Simulator plugins are not (yet) version-checked. API version numbering restarted, as this is an all-new system. Uses the target ID from configure, so don't change that too often.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8349 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jens Arnold 2006-01-15 18:20:18 +00:00
parent c7c9069ed4
commit a36b1d4083
70 changed files with 270 additions and 310 deletions

View File

@ -34,7 +34,7 @@ ifdef APPEXTRA
INCLUDES += $(patsubst %,-I%,$(subst :, ,$(APPEXTRA)))
endif
CFLAGS = $(GCCOPTS) $(INCLUDES) $(TARGET) $(DEFINES) \
CFLAGS = $(GCCOPTS) $(INCLUDES) $(TARGET) $(DEFINES) -DTARGET_ID=$(TARGET_ID) \
-DAPPSVERSION=\"$(VERSION)\" $(EXTRA_DEFINES) -DMEM=${MEMORYSIZE}
OBJS := $(OBJDIR)/lang.o $(SRC:%.c=$(OBJDIR)/%.o)

View File

@ -78,13 +78,8 @@ static bool plugin_loaded = false;
static int plugin_size = 0;
static void (*pfn_tsr_exit)(void) = NULL; /* TSR exit callback */
static int plugin_test(int api_version, int model, int memsize);
static const struct plugin_api rockbox_api = {
PLUGIN_API_VERSION,
plugin_test,
/* lcd */
lcd_set_contrast,
lcd_clear_display,
@ -135,6 +130,7 @@ static const struct plugin_api rockbox_api = {
checkbox,
font_get,
font_getstringsize,
font_get_width,
#endif
backlight_on,
backlight_off,
@ -243,9 +239,18 @@ static const struct plugin_api rockbox_api = {
strcat,
memcmp,
strcasestr,
/* unicode stuff */
utf8decode,
iso_decode,
utf16LEdecode,
utf16BEdecode,
utf8encode,
utf8length,
/* sound */
sound_set,
sound_min,
sound_max,
#ifndef SIMULATOR
mp3_play_data,
mp3_play_pause,
@ -307,6 +312,21 @@ static const struct plugin_api rockbox_api = {
&rundb_fd,
&rundb_initialized,
/* menu */
menu_init,
menu_exit,
menu_show,
menu_run,
menu_cursor,
menu_description,
menu_delete,
menu_count,
menu_moveup,
menu_movedown,
menu_draw,
menu_insert,
menu_set_cursor,
/* misc */
srand,
rand,
@ -337,39 +357,13 @@ static const struct plugin_api rockbox_api = {
#endif
#ifdef HAVE_LCD_BITMAP
read_bmp_file,
screen_dump_set_hook,
#endif
show_logo,
/* new stuff at the end, sort into place next time
the API gets incompatible */
menu_init,
menu_exit,
menu_show,
menu_run,
menu_cursor,
menu_description,
menu_delete,
menu_count,
menu_moveup,
menu_movedown,
menu_draw,
menu_insert,
menu_set_cursor,
#ifdef HAVE_LCD_BITMAP
screen_dump_set_hook,
font_get_width,
#endif
utf8decode,
iso_decode,
utf16LEdecode,
utf16BEdecode,
utf8encode,
utf8length,
sound_min,
sound_max,
};
int plugin_load(const char* plugin, void* parameter)
@ -377,7 +371,8 @@ int plugin_load(const char* plugin, void* parameter)
enum plugin_status (*plugin_start)(struct plugin_api* api, void* param);
int rc;
#ifndef SIMULATOR
char buf[64];
struct plugin_header header;
ssize_t readsize;
#endif
int fd;
@ -408,28 +403,50 @@ int plugin_load(const char* plugin, void* parameter)
#else
fd = open(plugin, O_RDONLY);
if (fd < 0) {
snprintf(buf, sizeof buf, str(LANG_PLUGIN_CANT_OPEN), plugin);
gui_syncsplash(HZ*2, true, buf);
gui_syncsplash(HZ*2, true, str(LANG_PLUGIN_CANT_OPEN), plugin);
return fd;
}
/* zero out plugin buffer to ensure a properly zeroed bss area */
memset(pluginbuf, 0, PLUGIN_BUFFER_SIZE);
plugin_start = (void*)&pluginbuf;
plugin_size = read(fd, plugin_start, PLUGIN_BUFFER_SIZE);
readsize = read(fd, &header, sizeof(header));
close(fd);
/* Close for now. Less code than doing it in all error checks.
* Would need to seek back anyway. */
if (readsize != sizeof(header)) {
gui_syncsplash(HZ*2, true, str(LANG_READ_FAILED), plugin);
return -1;
}
if (header.magic != PLUGIN_MAGIC
|| header.target_id != TARGET_ID
|| header.load_addr != pluginbuf
|| header.end_addr > pluginbuf + PLUGIN_BUFFER_SIZE) {
gui_syncsplash(HZ*2, true, str(LANG_PLUGIN_WRONG_MODEL));
return -1;
}
if (header.api_version > PLUGIN_API_VERSION
|| header.api_version < PLUGIN_MIN_API_VERSION) {
gui_syncsplash(HZ*2, true, str(LANG_PLUGIN_WRONG_VERSION));
return -1;
}
/* zero out plugin buffer to ensure a properly zeroed bss area */
memset(pluginbuf, 0, header.end_addr - pluginbuf);
fd = open(plugin, O_RDONLY);
if (fd < 0) {
gui_syncsplash(HZ*2, true, str(LANG_PLUGIN_CANT_OPEN), plugin);
return fd;
}
readsize = read(fd, pluginbuf, PLUGIN_BUFFER_SIZE);
close(fd);
if (plugin_size < 0) {
if (readsize < 0) {
/* read error */
snprintf(buf, sizeof buf, str(LANG_READ_FAILED), plugin);
gui_syncsplash(HZ*2, true, buf);
return -1;
}
if (plugin_size == 0) {
/* loaded a 0-byte plugin, implying it's not for this model */
gui_syncsplash(HZ*2, true, str(LANG_PLUGIN_WRONG_MODEL));
gui_syncsplash(HZ*2, true, str(LANG_READ_FAILED), plugin);
return -1;
}
plugin_start = header.entry_point;
plugin_size = header.end_addr - header.load_addr;
#endif
plugin_loaded = true;
@ -458,14 +475,6 @@ int plugin_load(const char* plugin, void* parameter)
case PLUGIN_USB_CONNECTED:
return PLUGIN_USB_CONNECTED;
case PLUGIN_WRONG_API_VERSION:
gui_syncsplash(HZ*2, true, str(LANG_PLUGIN_WRONG_VERSION));
break;
case PLUGIN_WRONG_MODEL:
gui_syncsplash(HZ*2, true, str(LANG_PLUGIN_WRONG_MODEL));
break;
default:
gui_syncsplash(HZ*2, true, str(LANG_PLUGIN_ERROR));
break;
@ -521,19 +530,3 @@ void plugin_tsr(void (*exit_callback)(void))
{
pfn_tsr_exit = exit_callback; /* remember the callback for later */
}
static int plugin_test(int api_version, int model, int memsize)
{
if (api_version < PLUGIN_MIN_API_VERSION ||
api_version > PLUGIN_API_VERSION)
return PLUGIN_WRONG_API_VERSION;
if (model != MODEL)
return PLUGIN_WRONG_MODEL;
if (memsize != MEM)
return PLUGIN_WRONG_MODEL;
return PLUGIN_OK;
}

View File

@ -90,44 +90,23 @@
#define PREFIX(_x_) _x_
#endif
#define PLUGIN_MAGIC 0x526F634B /* RocK */
/* increase this every time the api struct changes */
#define PLUGIN_API_VERSION 54
#define PLUGIN_API_VERSION 1
/* 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 51
#define PLUGIN_MIN_API_VERSION 1
/* plugin return codes */
enum plugin_status {
PLUGIN_OK = 0,
PLUGIN_USB_CONNECTED,
PLUGIN_WRONG_API_VERSION = -1,
PLUGIN_WRONG_MODEL = -2,
PLUGIN_ERROR = -3,
PLUGIN_ERROR = -1,
};
/* different (incompatible) plugin models */
enum model {
PLAYER,
RECORDER
};
#ifdef HAVE_LCD_CHARCELLS
#define MODEL PLAYER
#else
#define MODEL RECORDER
#endif
/* compatibility test macro */
#define TEST_PLUGIN_API(_api_) \
do { \
int _rc_ = _api_->plugin_test(PLUGIN_API_VERSION, MODEL, MEM); \
if (_rc_<0) \
return _rc_; \
} while(0)
/* NOTE: To support backwards compatibility, only add new functions at
the end of the structure. Every time you add a new function,
remember to increase PLUGIN_API_VERSION. If you make changes to the
@ -135,10 +114,6 @@ do { \
version
*/
struct plugin_api {
/* these two fields must always be first, to ensure
TEST_PLUGIN_API will always work */
int version;
int (*plugin_test)(int api_version, int model, int memsize);
/* lcd */
void (*lcd_set_contrast)(int x);
@ -198,6 +173,7 @@ struct plugin_api {
struct font* (*font_get)(int font);
int (*font_getstringsize)(const unsigned char *str, int *w, int *h,
int fontnumber);
int (*font_get_width)(struct font* pf, unsigned short char_code);
#endif
void (*backlight_on)(void);
void (*backlight_off)(void);
@ -314,9 +290,18 @@ struct plugin_api {
char *(*strcat)(char *s1, const char *s2);
int (*memcmp)(const void *s1, const void *s2, size_t n);
char *(*strcasestr) (const char* phaystack, const char* pneedle);
/* unicode stuff */
const unsigned char* (*utf8decode)(const unsigned char *utf8, unsigned short *ucs);
unsigned char* (*iso_decode)(const unsigned char *iso, unsigned char *utf8, int cp, int count);
unsigned char* (*utf16LEdecode)(const unsigned char *utf16, unsigned char *utf8, unsigned int count);
unsigned char* (*utf16BEdecode)(const unsigned char *utf16, unsigned char *utf8, unsigned int count);
unsigned char* (*utf8encode)(unsigned long ucs, unsigned char *utf8);
unsigned long (*utf8length)(const unsigned char *utf8);
/* sound */
void (*sound_set)(int setting, int value);
int (*sound_min)(int setting);
int (*sound_max)(int setting);
#ifndef SIMULATOR
void (*mp3_play_data)(const unsigned char* start, int size, void (*get_more)(unsigned char** start, int* size));
void (*mp3_play_pause)(bool play);
@ -378,6 +363,23 @@ struct plugin_api {
int *rundb_fd;
int *rundb_initialized;
/* menu */
int (*menu_init)(const struct menu_item* mitems, int count,
int (*callback)(int, int),
const char *button1, const char *button2, const char *button3);
void (*menu_exit)(int menu);
int (*menu_show)(int m);
bool (*menu_run)(int menu);
int (*menu_cursor)(int menu);
char* (*menu_description)(int menu, int position);
void (*menu_delete)(int menu, int position);
int (*menu_count)(int menu);
bool (*menu_moveup)(int menu);
bool (*menu_movedown)(int menu);
void (*menu_draw)(int menu);
void (*menu_insert)(int menu, int position, char *desc, bool (*function) (void));
void (*menu_set_cursor)(int menu, int position);
/* misc */
void (*srand)(unsigned int seed);
int (*rand)(void);
@ -416,43 +418,38 @@ struct plugin_api {
#ifdef HAVE_LCD_BITMAP
int (*read_bmp_file)(char* filename, int *get_width, int *get_height,
char *bitmap, int maxsize);
void (*screen_dump_set_hook)(void (*hook)(int fh));
#endif
int (*show_logo)(void);
/* new stuff at the end, sort into place next time
the API gets incompatible */
int (*menu_init)(const struct menu_item* mitems, int count,
int (*callback)(int, int),
const char *button1, const char *button2, const char *button3);
void (*menu_exit)(int menu);
int (*menu_show)(int m);
bool (*menu_run)(int menu);
int (*menu_cursor)(int menu);
char* (*menu_description)(int menu, int position);
void (*menu_delete)(int menu, int position);
int (*menu_count)(int menu);
bool (*menu_moveup)(int menu);
bool (*menu_movedown)(int menu);
void (*menu_draw)(int menu);
void (*menu_insert)(int menu, int position, char *desc, bool (*function) (void));
void (*menu_set_cursor)(int menu, int position);
#ifdef HAVE_LCD_BITMAP
void (*screen_dump_set_hook)(void (*hook)(int fh));
int (*font_get_width)(struct font* pf, unsigned short char_code);
#endif
const unsigned char* (*utf8decode)(const unsigned char *utf8, unsigned short *ucs);
unsigned char* (*iso_decode)(const unsigned char *iso, unsigned char *utf8, int cp, int count);
unsigned char* (*utf16LEdecode)(const unsigned char *utf16, unsigned char *utf8, unsigned int count);
unsigned char* (*utf16BEdecode)(const unsigned char *utf16, unsigned char *utf8, unsigned int count);
unsigned char* (*utf8encode)(unsigned long ucs, unsigned char *utf8);
unsigned long (*utf8length)(const unsigned char *utf8);
int (*sound_min)(int setting);
int (*sound_max)(int setting);
};
#ifndef SIMULATOR
/* plugin header */
struct plugin_header {
unsigned long magic;
unsigned short target_id;
unsigned short api_version;
unsigned char *load_addr;
unsigned char *end_addr;
enum plugin_status(*entry_point)(struct plugin_api*, void*);
};
#ifdef PLUGIN
extern unsigned char plugin_start_addr[];
extern unsigned char plugin_end_addr[];
#define PLUGIN_HEADER \
const struct plugin_header __header \
__attribute__ ((section (".header")))= { \
PLUGIN_MAGIC, TARGET_ID, PLUGIN_API_VERSION, \
plugin_start_addr, plugin_end_addr, plugin_start };
#endif
#else /* SIMULATOR */
#define PLUGIN_HEADER
#endif
int plugin_load(const char* plugin, void* parameter);
void* plugin_get_buffer(int *buffer_size);
void* plugin_get_audio_buffer(int *buffer_size);

View File

@ -10,7 +10,7 @@
INCLUDES = -I$(FIRMDIR)/include -I$(FIRMDIR)/export -I$(FIRMDIR)/common \
-I$(FIRMDIR)/drivers -I$(APPSDIR) -Ilib -I$(BUILDDIR)
CFLAGS = $(GCCOPTS) $(INCLUDES) $(TARGET) $(EXTRA_DEFINES) \
-DMEM=${MEMORYSIZE} -DPLUGIN
-DTARGET_ID=$(TARGET_ID) -DMEM=${MEMORYSIZE} -DPLUGIN
ifdef APPEXTRA
INCLUDES += $(patsubst %,-I$(APPSDIR)/%,$(subst :, ,$(APPEXTRA)))

View File

@ -34,6 +34,8 @@
/* Only build for (correct) target */
#if !defined(SIMULATOR) && CONFIG_CPU==SH7034 && !defined(HAVE_MMC)
PLUGIN_HEADER
#ifdef HAVE_LCD_CHARCELLS /* player model */
#define LINES 2
#define COLUMNS 11
@ -1192,10 +1194,6 @@ int main(void* parameter)
enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
rb = api; /* copy to global api pointer */
/* now go ahead and have fun! */

View File

@ -29,6 +29,8 @@
to watch.
*/
PLUGIN_HEADER
/* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD
#define BATTERY_TEST_QUIT BUTTON_OFF
@ -136,7 +138,6 @@ enum plugin_status loop(void)
enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
TEST_PLUGIN_API(api);
(void)parameter;
rb = api;

View File

@ -21,6 +21,8 @@
#ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
#define SS_TITLE "Bouncer"
#define SS_TITLE_FONT 2
@ -443,7 +445,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
char *off = "[Off] to stop";
int len;
TEST_PLUGIN_API(api);
(void)(parameter);
rb = api;

View File

@ -76,6 +76,8 @@ F3: equal to "="
#ifdef HAVE_LCD_BITMAP
#include "math.h"
PLUGIN_HEADER
#define REC_HEIGHT 10 /* blank height = 9 */
#define REC_WIDTH 22 /* blank width = 21 */
@ -1324,7 +1326,6 @@ Main();
----------------------------------------------------------------------- */
enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
TEST_PLUGIN_API(api);
(void)parameter;
rb = api;

View File

@ -23,6 +23,8 @@
#include <timefuncs.h>
PLUGIN_HEADER
static struct plugin_api* rb;
static bool leap_year;
@ -664,9 +666,8 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
bool exit = false;
int button;
TEST_PLUGIN_API(api);
(void)(parameter);
rb = api;
calendar_init(&today, &shown);

View File

@ -18,6 +18,8 @@
****************************************************************************/
#include "plugin.h"
PLUGIN_HEADER
/* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD
#define CHC_QUIT BUTTON_OFF
@ -136,8 +138,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
bool done;
int nr;
TEST_PLUGIN_API(api);
(void)parameter;
rb=api;

View File

@ -22,6 +22,8 @@
/* Only build for (correct) target */
#ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
static struct plugin_api* rb; /* here is a global api struct pointer */
#define EXTERN static
@ -1276,10 +1278,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
char* filename;
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
rb = api; /* copy to global api pointer */
if (parameter == NULL)

View File

@ -80,6 +80,8 @@ Original release, featuring analog / digital modes and a few options.
#if defined(HAVE_LCD_BITMAP) && defined(CONFIG_RTC)
PLUGIN_HEADER
#define CLOCK_VERSION "2.60"
#define MODE_ANALOG 1
@ -2875,7 +2877,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
struct tm* current_time;
TEST_PLUGIN_API(api);
(void)parameter;
rb = api;

View File

@ -18,6 +18,8 @@
****************************************************************************/
#include "plugin.h"
PLUGIN_HEADER
void roll_credits(void);
const char* const credits[] = {
#include "credits.raw" /* generated list of names from docs/CREDITS */
@ -30,7 +32,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
int j = 0;
int btn;
TEST_PLUGIN_API(api);
(void)parameter;
rb = api;

View File

@ -22,6 +22,8 @@
#include "playergfx.h"
#include "xlcd.h"
PLUGIN_HEADER
/* Loops that the values are displayed */
#define DISP_TIME 30
@ -446,7 +448,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
bool redraw = true;
bool exit = false;
TEST_PLUGIN_API(api);
(void)(parameter);
rb = api;

View File

@ -10,7 +10,7 @@
INCLUDES = -I$(APPSDIR) -I.. -I. -I$(FIRMDIR)/include -I$(FIRMDIR)/export \
-I$(FIRMDIR)/common -I$(FIRMDIR)/drivers -I$(OUTDIR) -I$(BUILDDIR)
CFLAGS = $(GCCOPTS) -O3 $(INCLUDES) $(TARGET) $(EXTRA_DEFINES) \
-DMEM=${MEMORYSIZE} -DPLUGIN
-DTARGET_ID=$(TARGET_ID) -DMEM=${MEMORYSIZE} -DPLUGIN
ifdef APPEXTRA
INCLUDES += $(patsubst %,-I$(APPSDIR)/%,$(subst :, ,$(APPEXTRA)))

View File

@ -18,6 +18,8 @@
****************************************************************************/
#include "databox.h"
PLUGIN_HEADER
/* variable button definitions */
#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
(CONFIG_KEYPAD == IRIVER_H300_PAD)
@ -233,11 +235,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
int button,done=0,abort=0;
char filename[100],buf[100];
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
/* if you don't use the parameter, you can do like
this to avoid the compiler warning about it */
(void)parameter;

View File

@ -23,6 +23,8 @@
#ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
/* Key assignement */
#if (CONFIG_KEYPAD == IPOD_4G_PAD)
#define DEMYSTIFY_QUIT BUTTON_MENU
@ -337,19 +339,12 @@ int plugin_main(void)
enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
int ret;
/*
* this macro should be called as the first thing you do in the plugin.
* it test that the api version and model the plugin was compiled for
* matches the machine it is running on
*/
TEST_PLUGIN_API(api);
rb = api; /* copy to global api pointer */
(void)parameter;
if (rb->global_settings->backlight_timeout > 0)
rb->backlight_set_timeout(1);/* keep the light on */
ret = plugin_main();
return ret;

View File

@ -19,6 +19,8 @@
#include "plugin.h"
PLUGIN_HEADER
/* as in hello world :) */
static struct plugin_api* rb;
/* screen info */
@ -127,7 +129,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
int lines, len, outputted, next;
/* plugin stuff */
TEST_PLUGIN_API(api);
(void)parameter;
rb = api;

View File

@ -43,6 +43,8 @@ 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";
#define CFGFILE_VERSION 0 /* Current config file version */
@ -405,11 +407,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
longlong_t e,h,old_e,old_h;
int button;
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
/* if you don't use the parameter, you can do like
this to avoid the compiler warning about it */
(void)parameter;

View File

@ -1,6 +1,8 @@
#include "plugin.h"
#define FAVORITES_FILE "/favorites.m3u"
PLUGIN_HEADER
static struct plugin_api* rb;
enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
@ -9,11 +11,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
char track_path[MAX_PATH+1];
int fd, result, len;
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
rb = api;
/* If we were passed a parameter, use that as the file name,

View File

@ -25,6 +25,8 @@
#ifdef HAVE_LCD_BITMAP /* and also not for the Player */
#include "gray.h"
PLUGIN_HEADER
/******************************* Globals ***********************************/
static struct plugin_api* rb; /* global api struct pointer */
@ -278,13 +280,6 @@ int main(void)
enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
int ret;
/*
* this macro should be called as the first thing you do in the plugin.
* it test that the api version and model the plugin was compiled for
* matches the machine it is running on
*/
TEST_PLUGIN_API(api);
rb = api; // copy to global api pointer
(void)parameter;

View File

@ -79,6 +79,8 @@
#ifdef PLATFORM_ID
PLUGIN_HEADER
#if CONFIG_KEYPAD == ONDIO_PAD /* limited keypad */
#define KEY1 BUTTON_LEFT
#define KEY2 BUTTON_UP
@ -1048,7 +1050,7 @@ void DoUserDialog(char* filename)
rb->snprintf(buf, sizeof(buf), "Verify failed! %d errors", rc);
rb->lcd_puts_scroll(0, 0, buf);
}
rb->lcd_puts_scroll(0, 1, "Press any key to exit.");
WaitForButton();
}
@ -1062,11 +1064,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
int oldmode;
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
rb = api; /* copy to global api pointer */
/* now go ahead and have fun! */

View File

@ -19,6 +19,8 @@
#include "plugin.h"
#ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
/* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD
#define FLIPIT_UP BUTTON_UP
@ -294,7 +296,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
int w, h, i;
TEST_PLUGIN_API(api);
(void)parameter;
rb = api;

View File

@ -25,6 +25,8 @@
#if defined(HAVE_LCD_BITMAP) && (LCD_DEPTH < 4)
#include "gray.h"
PLUGIN_HEADER
/* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD
#define GRAYSCALE_SHIFT BUTTON_ON
@ -302,11 +304,6 @@ int main(void)
enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
rb = api; // copy to global api pointer
(void)parameter;

View File

@ -20,6 +20,10 @@
/* welcome to the example rockbox plugin */
/* This macros must always be included. Should be placed at the top by
convention, although the actual position doesn't matter */
PLUGIN_HEADER
/* here is a global api struct pointer. while not strictly necessary,
it's nice not to have to pass the api pointer in all function calls
in the plugin */
@ -28,11 +32,6 @@ static struct plugin_api* rb;
/* this is the plugin entry point */
enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
/* if you don't use the parameter, you can do like
this to avoid the compiler warning about it */
(void)parameter;

View File

@ -23,6 +23,7 @@
****************************************************************************/
#include "plugin.h"
PLUGIN_HEADER
static struct plugin_api* rb;
@ -133,7 +134,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
char *buf;
int rc;
TEST_PLUGIN_API(api);
filename = (char *)parameter;

View File

@ -29,6 +29,8 @@ History:
#ifdef HAVE_LCD_CHARCELLS
PLUGIN_HEADER
/* Jackpot game for the player */
static unsigned char pattern[]={
@ -89,11 +91,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
bool exit=false;
bool go;
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
/* if you don't use the parameter, you can do like
this to avoid the compiler warning about it */
(void)parameter;

View File

@ -20,11 +20,11 @@
****************************************************************************/
#include "plugin.h"
#include "button.h"
#include "lcd.h"
#ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
/* save files */
#define SCORE_FILE PLUGIN_DIR "/bejeweled.score"
#define SAVE_FILE PLUGIN_DIR "/bejeweled.save"
@ -2466,7 +2466,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) {
char str[19];
/* plugin init */
TEST_PLUGIN_API(api);
(void)parameter;
rb = api;
/* end of plugin init */

View File

@ -29,6 +29,8 @@
#if defined(HAVE_LCD_BITMAP) && (LCD_DEPTH < 4)
#include "gray.h"
PLUGIN_HEADER
/* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD
#define JPEG_ZOOM_IN BUTTON_PLAY
@ -1959,11 +1961,6 @@ int main(char* filename)
enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
rb = api; /* copy to global api pointer */
return main((char*)parameter);

View File

@ -19,6 +19,8 @@
#include "plugin.h"
#include "playergfx.h"
PLUGIN_HEADER
#ifdef HAVE_LCD_BITMAP
#define DISPLAY_WIDTH LCD_WIDTH
#define DISPLAY_HEIGHT LCD_HEIGHT
@ -226,7 +228,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) {
int old_cpos = -1;
#endif
TEST_PLUGIN_API(api);
(void)parameter;
#ifdef HAVE_LCD_CHARCELLS

View File

@ -24,6 +24,8 @@
#if defined(HAVE_LCD_BITMAP) && (LCD_DEPTH < 4)
#include "gray.h"
PLUGIN_HEADER
/* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD
#define MANDELBROT_QUIT BUTTON_OFF
@ -371,7 +373,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
int grayscales;
int redraw = REDRAW_FULL;
TEST_PLUGIN_API(api);
rb = api;
(void)parameter;

View File

@ -20,6 +20,8 @@
#if !defined(SIMULATOR)
PLUGIN_HEADER
/* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD
#define METRONOME_QUIT BUTTON_OFF
@ -907,7 +909,6 @@ void tap(void)
enum plugin_status plugin_start(struct plugin_api* api, void* parameter){
int button;
TEST_PLUGIN_API(api);
(void)parameter;
rb = api;

View File

@ -41,6 +41,8 @@
//#include "../codecs/lib/xxx2wav.h"
PLUGIN_HEADER
int numberOfSamples IDATA_ATTR;
long bpm;
@ -67,9 +69,6 @@ struct plugin_api * rb;
enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
TEST_PLUGIN_API(api);
rb = api;
TEST_PLUGIN_API(api);
(void)parameter;
rb = api;

View File

@ -28,11 +28,11 @@ use F3 to see how many mines are left (supposing all your flags are correct)
*****************************************************************************/
#include "plugin.h"
#include "button.h"
#include "lcd.h"
#ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
//what the minesweeper() function can return
#define MINESWEEPER_USB 3
#define MINESWEEPER_QUIT 2
@ -521,7 +521,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
bool exit = false;
/* plugin init */
TEST_PLUGIN_API(api);
(void)parameter;
rb = api;
/* end of plugin init */

View File

@ -19,6 +19,8 @@
#include "plugin.h"
#include "playergfx.h"
PLUGIN_HEADER
#ifdef HAVE_LCD_BITMAP
#define LARGE ((LCD_WIDTH - 2) / 2)
#define HAUT ((LCD_HEIGHT - 2) / 2)
@ -72,7 +74,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
int sx = 3;
int sy = 3;
struct plugin_api* rb = api;
TEST_PLUGIN_API(api);
(void)parameter;
#ifdef HAVE_LCD_CHARCELLS

View File

@ -38,6 +38,8 @@ enum e_byte_order { order_unknown, order_bigEndian, order_littleEndian };
#define memcpy rb->memcpy
#define memset rb->memset
PLUGIN_HEADER
static struct plugin_api* rb;
extern char iramcopy[];
extern char iramstart[];
@ -1892,8 +1894,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
char *bitratename[] = { "64","80","96","112","128","160","192","224","256","320" };
int brate[] = { 64,80,96,112,128,160,192,224,256,320 };
TEST_PLUGIN_API(api);
(void)parameter;
rb = api;

View File

@ -20,7 +20,7 @@
#ifdef HAVE_LCD_CHARCELLS
/* NIM game for the player
/* NIM game for the player
Rules of nim game
-----------------
@ -46,6 +46,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}; /* :-) */
@ -140,11 +141,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
bool ok;
bool go;
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
/* if you don't use the parameter, you can do like
this to avoid the compiler warning about it */
(void)parameter;

View File

@ -22,6 +22,8 @@
#ifndef SIMULATOR /* don't want this code in the simulator */
#if CONFIG_CODEC != SWCODEC /* only for MAS-targets */
PLUGIN_HEADER
/* The different drawing modes */
#define DRAW_MODE_FILLED 0
#define DRAW_MODE_OUTLINE 1
@ -93,7 +95,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
bool exit = false;
TEST_PLUGIN_API(api);
(void)parameter;
rb = api;

View File

@ -25,6 +25,8 @@
#ifdef HAVE_LCD_BITMAP /* and also not for the Player */
#if CONFIG_CODEC != SWCODEC /* only for MAS-targets */
PLUGIN_HEADER
/* The different drawing modes */
#define DRAW_MODE_FILLED 0
#define DRAW_MODE_OUTLINE 1
@ -201,7 +203,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
bool exit = false;
bool paused = false;
TEST_PLUGIN_API(api);
(void)parameter;
rb = api;

View File

@ -28,6 +28,8 @@
#ifdef HAVE_LCD_BITMAP /* and also not for the Player */
#include "gray.h"
PLUGIN_HEADER
/******************************* Globals ***********************************/
static struct plugin_api* rb; /* global api struct pointer */
@ -241,13 +243,6 @@ int main(void)
enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
int ret;
/*
* this macro should be called as the first thing you do in the plugin.
* it test that the api version and model the plugin was compiled for
* matches the machine it is running on
*/
TEST_PLUGIN_API(api);
rb = api; // copy to global api pointer
(void)parameter;

View File

@ -64,7 +64,13 @@ MEMORY
SECTIONS
{
.text :
.header : {
_plugin_start_addr = .;
plugin_start_addr = .;
KEEP(*(.header))
} > PLUGIN_RAM
.text :
{
KEEP(*(.entry))
*(.text*)
@ -80,7 +86,7 @@ SECTIONS
. = ALIGN(0x4);
} > PLUGIN_RAM
.data :
.data :
{
*(.data*)
#if defined(ARCH_IRIVER) || defined(ARCH_IPOD) || (CONFIG_CPU==PNX0101)
@ -118,6 +124,9 @@ SECTIONS
{
*(.bss*)
*(COMMON)
. = ALIGN(0x4);
_plugin_end_addr = .;
plugin_end_addr = .;
} > PLUGIN_RAM
/* Special trick to avoid a linker error when no other sections are

View File

@ -20,6 +20,8 @@
#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 */
@ -336,9 +338,7 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
/* if you don't use the parameter, you can do like
this to avoid the compiler warning about it */
(void)parameter;
TEST_PLUGIN_API(api);
rb = api; /* use the "standard" rb pointer */
/* Clear screen */

View File

@ -22,6 +22,8 @@
#ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
#if (CONFIG_KEYPAD == IPOD_4G_PAD)
#define ROCKBLOX_OFF BUTTON_MENU
#define ROCKBLOX_UP BUTTON_SCROLL_BACK
@ -420,11 +422,9 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
int ret;
TEST_PLUGIN_API(api);
(void)parameter;
rb = api;
/* Lets use the default font */
rb->lcd_setfont(FONT_SYSFIXED);

View File

@ -23,6 +23,8 @@
#if !defined(SIMULATOR) && (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 */
@ -1010,10 +1012,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
int oldmode;
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
rb = api; /* copy to global api pointer */
if (parameter == NULL)

View File

@ -22,6 +22,8 @@
#if MEM <= 8 && !defined(SIMULATOR)
PLUGIN_HEADER
#define OVL_NAME "/.rockbox/viewers/rockboy.ovl"
#define OVL_DISPLAYNAME "RockBoy"
@ -40,10 +42,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
enum plugin_status(*entry_point)(struct plugin_api*, void*);
} header;
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
rb = api;
fh = rb->open(OVL_NAME, O_RDONLY);

View File

@ -10,7 +10,7 @@
INCLUDES = -I$(APPSDIR) -I.. -I. -I$(FIRMDIR)/include -I$(FIRMDIR)/export \
-I$(FIRMDIR)/common -I$(FIRMDIR)/drivers -I$(OUTDIR) -I$(BUILDDIR)
CFLAGS = $(GCCOPTS) -O3 $(INCLUDES) $(TARGET) $(EXTRA_DEFINES) \
-DMEM=${MEMORYSIZE} -DPLUGIN
-DTARGET_ID=$(TARGET_ID) -DMEM=${MEMORYSIZE} -DPLUGIN
ifdef APPEXTRA
INCLUDES += $(patsubst %,-I$(APPSDIR)/%,$(subst :, ,$(APPEXTRA)))

View File

@ -36,6 +36,8 @@ const struct {
0x524f564c, /* ROVL */
ovl_start_addr, ovl_end_addr, plugin_start
};
#else
PLUGIN_HEADER
#endif
#ifdef USE_IRAM
@ -93,17 +95,12 @@ void setmallocpos(void *pointer)
/* this is the plugin entry point */
enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
/* if you are using a global api pointer, don't forget to copy it!
otherwise you will get lovely "I04: IllInstr" errors... :-) */
rb = api;
rb->lcd_setfont(0);
if (!parameter) {
rb->splash(HZ*3, true, "Play gameboy ROM file! (.gb/.gbc)");
return PLUGIN_OK;

View File

@ -20,6 +20,8 @@
#include "plugin.h"
#include "ctype.h"
PLUGIN_HEADER
static struct plugin_api* rb;
#define BUFFER_SIZE 16384
@ -150,8 +152,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
char *filename = parameter;
char *p;
TEST_PLUGIN_API(api);
rb = api;
DEBUGF("%s - %s\n", parameter, &filename[rb->strlen(filename)-4]);

View File

@ -10,7 +10,7 @@
INCLUDES = -I$(APPSDIR) -I.. -I. -I$(FIRMDIR)/include -I$(FIRMDIR)/export \
-I$(FIRMDIR)/common -I$(FIRMDIR)/drivers -I$(OUTDIR) -I$(BUILDDIR)
CFLAGS = $(GCCOPTS) -O3 $(INCLUDES) $(TARGET) $(EXTRA_DEFINES) \
-DMEM=${MEMORYSIZE} -DPLUGIN
-DTARGET_ID=$(TARGET_ID) -DMEM=${MEMORYSIZE} -DPLUGIN
ifdef APPEXTRA
INCLUDES += $(patsubst %,-I$(APPSDIR)/%,$(subst :, ,$(APPEXTRA)))

View File

@ -21,6 +21,8 @@
#include "token.h"
#include "dbinterface.h"
PLUGIN_HEADER
void *audio_bufferbase;
void *audio_bufferpointer;
unsigned int audio_buffer_free;
@ -58,15 +60,10 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
unsigned char *result,buf[500];
int parsefd,hits;
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
/* if you are using a global api pointer, don't forget to copy it!
otherwise you will get lovely "I04: IllInstr" errors... :-) */
rb = api;
audio_bufferbase=audio_bufferpointer=0;
audio_buffer_free=0;

View File

@ -19,6 +19,8 @@
#include "plugin.h"
#ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
/* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD
#define PUZZLE_QUIT BUTTON_OFF
@ -333,7 +335,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
int i, w, h;
TEST_PLUGIN_API(api);
(void)parameter;
rb = api;

View File

@ -33,6 +33,8 @@ dir is the current direction of the snake - 0=up, 1=right, 2=down, 3=left;
#include "plugin.h"
#ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
/* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD
#define SNAKE_QUIT BUTTON_OFF
@ -344,7 +346,6 @@ void game_init(void) {
enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
TEST_PLUGIN_API(api);
(void)(parameter);
rb = api;

View File

@ -30,6 +30,8 @@ Head and Tail are stored
#include "plugin.h"
#ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
#define WIDTH 28
#define HEIGHT 16
@ -1425,7 +1427,6 @@ void game_init(void)
enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
TEST_PLUGIN_API(api);
(void)(parameter);
rb = api;

View File

@ -19,6 +19,8 @@
#include "plugin.h"
#include "playergfx.h"
PLUGIN_HEADER
#ifdef HAVE_LCD_BITMAP
#define NUM_PARTICLES (LCD_WIDTH * LCD_HEIGHT / 72)
#define SNOW_HEIGHT LCD_HEIGHT
@ -161,7 +163,6 @@ static void snow_init(void)
enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
int button;
TEST_PLUGIN_API(api);
(void)(parameter);
rb = api;

View File

@ -22,6 +22,8 @@
#ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
#define SOKOBAN_TITLE "Sokoban"
#define SOKOBAN_TITLE_FONT 2
@ -896,7 +898,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
int w, h;
int len;
TEST_PLUGIN_API(api);
(void)(parameter);
rb = api;

View File

@ -39,6 +39,8 @@ use F3 to put card on top of the remains' stack on one of the 4 final stacks
#ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
/* here is a global api struct pointer. while not strictly necessary,
it's nice not to have to pass the api pointer in all function calls
in the plugin */
@ -1541,7 +1543,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
int result;
/* plugin init */
TEST_PLUGIN_API(api);
(void)parameter;
rb = api;
/* end of plugin init */

View File

@ -55,6 +55,8 @@
* TODO: Implement a merge sort for files larger than the buffer
****************************************************************************/
PLUGIN_HEADER
static struct plugin_api* rb;
int buf_size;
@ -178,7 +180,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
char *buf;
int rc;
TEST_PLUGIN_API(api);
filename = (char *)parameter;

View File

@ -22,6 +22,8 @@
#ifndef SIMULATOR
#ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
/* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD
#define SPLITEDIT_QUIT BUTTON_OFF

View File

@ -19,6 +19,8 @@
#include "plugin.h"
#ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
/* file which contains the levels */
#define STAR_LEVELS_FILE "/.rockbox/star/levels.txt"
@ -877,7 +879,6 @@ static int star_menu(void)
*/
enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
TEST_PLUGIN_API(api);
(void)parameter;
rb = api;

View File

@ -19,6 +19,8 @@
#ifdef HAVE_LCD_BITMAP /* and also not for the Player */
PLUGIN_HEADER
/******************************* Globals ***********************************/
static struct plugin_api* rb; /* global api struct pointer */
@ -251,13 +253,6 @@ int plugin_main(void)
enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
int ret;
/*
* this macro should be called as the first thing you do in the plugin.
* it test that the api version and model the plugin was compiled for
* matches the machine it is running on
*/
TEST_PLUGIN_API(api);
rb = api; // copy to global api pointer
(void)parameter;

View File

@ -18,6 +18,8 @@
****************************************************************************/
#include "plugin.h"
PLUGIN_HEADER
static struct plugin_api* rb;
static int files, dirs;
static int lasttick;
@ -100,7 +102,6 @@ void traversedir(char* location, char* name)
enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
int button;
TEST_PLUGIN_API(api);
(void)parameter;

View File

@ -19,6 +19,8 @@
#include "plugin.h"
PLUGIN_HEADER
#ifdef HAVE_LCD_BITMAP
#define LAP_LINES 6
#define TIMER_Y 1
@ -121,7 +123,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
int done = false;
bool update_lap = true;
TEST_PLUGIN_API(api);
(void)parameter;
rb = api;

View File

@ -57,11 +57,11 @@ Example ".ss" file, and one with a saved state:
*/
#include "plugin.h"
#include "button.h"
#include "lcd.h"
#ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
#define STATE_FILE PLUGIN_DIR "/sudoku.state"
#define GAMES_FILE PLUGIN_DIR "/sudoku.levels"
@ -2429,7 +2429,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
struct sudoku_state_t state;
/* plugin init */
TEST_PLUGIN_API(api);
rb = api;
/* end of plugin init */

View File

@ -18,6 +18,8 @@
****************************************************************************/
#include "plugin.h"
PLUGIN_HEADER
static struct plugin_api* rb;
static char *audiobuf;
@ -265,8 +267,6 @@ static bool vbr_fix(char *selected_file)
enum plugin_status plugin_start(struct plugin_api* api, void *parameter)
{
TEST_PLUGIN_API(api);
rb = api;
if (!parameter)

View File

@ -32,6 +32,8 @@
#ifndef SIMULATOR // not for simulator by now
#ifdef HAVE_LCD_BITMAP // and definitely not for the Player, haha
PLUGIN_HEADER
/* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD
#define VIDEO_STOP_SEEK BUTTON_PLAY
@ -984,11 +986,6 @@ int main(char* filename)
enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
rb = api; // copy to global api pointer
if (parameter == NULL)

View File

@ -20,9 +20,7 @@
#include "plugin.h"
#include <ctype.h>
#if PLUGIN_API_VERSION < 3
#error Scrollbar function requires PLUGIN_API_VERSION 3 at least
#endif
PLUGIN_HEADER
#define SETTINGS_FILE "/.rockbox/viewers/viewer.dat"
@ -1022,7 +1020,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* file)
int i;
int ok;
TEST_PLUGIN_API(api);
rb = api;
if (!file)

View File

@ -19,6 +19,8 @@
#if defined(HAVE_LCD_BITMAP) && (CONFIG_CODEC != SWCODEC)
PLUGIN_HEADER
/* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD
#define VUMETER_QUIT BUTTON_OFF
@ -427,7 +429,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) {
int button;
int lastbutton = BUTTON_NONE;
TEST_PLUGIN_API(api);
(void) parameter;
rb = api;

View File

@ -20,6 +20,8 @@
#include <codecs/libwavpack/wavpack.h>
PLUGIN_HEADER
#define SAMPLES_PER_BLOCK 22050
static struct plugin_api* rb;
@ -287,8 +289,6 @@ static int wav2wv (char *filename)
enum plugin_status plugin_start(struct plugin_api* api, void *parameter)
{
TEST_PLUGIN_API(api);
rb = api;
if (!parameter)

View File

@ -20,6 +20,8 @@
#if defined(HAVE_LCD_BITMAP) && (CONFIG_KEYPAD == RECORDER_PAD)
PLUGIN_HEADER
/* size of the field the worm lives in */
#define FIELD_RECT_X 1
#define FIELD_RECT_Y 1
@ -1891,7 +1893,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
bool worm_dead = false;
int button;
TEST_PLUGIN_API(api);
(void)(parameter);
rb = api;

6
tools/configure vendored
View File

@ -427,7 +427,7 @@ appsdir='\$(ROOTDIR)/apps'
echo "15 - iPod Video"
echo "16 - iriver iFP-790"
getit=`input`;
target_id=`input`;
# Set of tools built for all target platforms:
toolset="rdf2binary convbdf"
@ -437,7 +437,7 @@ appsdir='\$(ROOTDIR)/apps'
iriverbitmaptools="$toolset scramble descramble mkboot bmp2rb codepages"
ipodbitmaptools="$toolset scramble ipod_fw bmp2rb codepages"
case $getit in
case $target_id in
1)
archos="player"
@ -881,6 +881,7 @@ sed > Makefile \
-e "s,@ROOTDIR@,${rootdir},g" \
-e "s,@DEBUG@,${debug},g" \
-e "s,@MEMORY@,${memory},g" \
-e "s,@TARGET_ID@,${target_id},g" \
-e "s,@TARGET@,${target},g" \
-e "s,@ARCHOS@,${archos},g" \
-e "s,@LANGUAGE@,${language},g" \
@ -927,6 +928,7 @@ export DEBUG=@DEBUG@
export ARCHOS=@ARCHOS@
export ARCHOSROM=@ARCHOSROM@
export FLASHFILE=@FLASHFILE@
export TARGET_ID=@TARGET_ID@
export TARGET=@TARGET@
export OBJDIR=@PWD@
export BUILDDIR=@PWD@