Add platform file for Ipod 1G / 2G. Now only the front image is missing for building...
[Rockbox.git] / apps / plugin.h
blob5146e18139e1a66dc332a6031143e5d0afd82281
1 /***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
10 * Copyright (C) 2002 Björn Stenberg
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
18 ****************************************************************************/
19 #ifndef _PLUGIN_H_
20 #define _PLUGIN_H_
22 /* instruct simulator code to not redefine any symbols when compiling plugins.
23 (the PLUGIN macro is defined in apps/plugins/Makefile) */
24 #ifdef PLUGIN
25 #define NO_REDEFINES_PLEASE
26 #endif
28 #ifndef MEM
29 #define MEM 2
30 #endif
32 #include <stdbool.h>
33 #include <sys/types.h>
34 #include <stdarg.h>
35 #include <stdio.h>
36 #include <stdlib.h>
37 #include "config.h"
38 #include "system.h"
39 #include "dir.h"
40 #include "kernel.h"
41 #include "thread.h"
42 #include "button.h"
43 #include "action.h"
44 #include "usb.h"
45 #include "font.h"
46 #include "lcd.h"
47 #include "id3.h"
48 #include "sound.h"
49 #include "mpeg.h"
50 #include "audio.h"
51 #include "mp3_playback.h"
52 #include "talk.h"
53 #ifdef RB_PROFILE
54 #include "profile.h"
55 #endif
56 #include "misc.h"
57 #if (CONFIG_CODEC == SWCODEC)
58 #include "dsp.h"
59 #include "codecs.h"
60 #include "playback.h"
61 #include "metadata.h"
62 #ifdef HAVE_RECORDING
63 #include "recording.h"
64 #endif
65 #else
66 #include "mas.h"
67 #endif /* CONFIG_CODEC == SWCODEC */
68 #include "settings.h"
69 #include "timer.h"
70 #include "playlist.h"
71 #ifdef HAVE_LCD_BITMAP
72 #include "scrollbar.h"
73 #endif
74 #include "statusbar.h"
75 #include "menu.h"
76 #include "rbunicode.h"
77 #include "list.h"
78 #include "tree.h"
79 #include "color_picker.h"
81 #ifdef HAVE_REMOTE_LCD
82 #include "lcd-remote.h"
83 #endif
85 #ifdef PLUGIN
87 #if defined(DEBUG) || defined(SIMULATOR)
88 #undef DEBUGF
89 #define DEBUGF rb->debugf
90 #undef LDEBUGF
91 #define LDEBUGF rb->debugf
92 #else
93 #define DEBUGF(...)
94 #define LDEBUGF(...)
95 #endif
97 #ifdef ROCKBOX_HAS_LOGF
98 #undef LOGF
99 #define LOGF rb->logf
100 #else
101 #define LOGF(...)
102 #endif
104 #endif
106 #ifdef SIMULATOR
107 #define PREFIX(_x_) sim_ ## _x_
108 #else
109 #define PREFIX(_x_) _x_
110 #endif
112 #define PLUGIN_MAGIC 0x526F634B /* RocK */
114 /* increase this every time the api struct changes */
115 #define PLUGIN_API_VERSION 68
117 /* update this to latest version if a change to the api struct breaks
118 backwards compatibility (and please take the opportunity to sort in any
119 new function which are "waiting" at the end of the function table) */
120 #define PLUGIN_MIN_API_VERSION 68
122 /* plugin return codes */
123 enum plugin_status {
124 PLUGIN_OK = 0,
125 PLUGIN_USB_CONNECTED,
126 PLUGIN_ERROR = -1,
129 /* NOTE: To support backwards compatibility, only add new functions at
130 the end of the structure. Every time you add a new function,
131 remember to increase PLUGIN_API_VERSION. If you make changes to the
132 existing APIs then also update PLUGIN_MIN_API_VERSION to current
133 version
135 struct plugin_api {
137 /* lcd */
138 void (*lcd_set_contrast)(int x);
139 void (*lcd_update)(void);
140 void (*lcd_clear_display)(void);
141 void (*lcd_setmargins)(int x, int y);
142 int (*lcd_getstringsize)(const unsigned char *str, int *w, int *h);
143 void (*lcd_putsxy)(int x, int y, const unsigned char *string);
144 void (*lcd_puts)(int x, int y, const unsigned char *string);
145 void (*lcd_puts_scroll)(int x, int y, const unsigned char* string);
146 void (*lcd_stop_scroll)(void);
147 #ifdef HAVE_LCD_CHARCELLS
148 void (*lcd_define_pattern)(unsigned long ucs, const char *pattern);
149 unsigned long (*lcd_get_locked_pattern)(void);
150 void (*lcd_unlock_pattern)(unsigned long ucs);
151 void (*lcd_putc)(int x, int y, unsigned long ucs);
152 void (*lcd_put_cursor)(int x, int y, unsigned long ucs);
153 void (*lcd_remove_cursor)(void);
154 void (*lcd_icon)(int icon, bool enable);
155 void (*lcd_double_height)(bool on);
156 #else
157 void (*lcd_set_drawmode)(int mode);
158 int (*lcd_get_drawmode)(void);
159 void (*lcd_setfont)(int font);
160 void (*lcd_drawpixel)(int x, int y);
161 void (*lcd_drawline)(int x1, int y1, int x2, int y2);
162 void (*lcd_hline)(int x1, int x2, int y);
163 void (*lcd_vline)(int x, int y1, int y2);
164 void (*lcd_drawrect)(int x, int y, int width, int height);
165 void (*lcd_fillrect)(int x, int y, int width, int height);
166 void (*lcd_mono_bitmap_part)(const unsigned char *src, int src_x, int src_y,
167 int stride, int x, int y, int width, int height);
168 void (*lcd_mono_bitmap)(const unsigned char *src, int x, int y,
169 int width, int height);
170 #if LCD_DEPTH > 1
171 void (*lcd_set_foreground)(unsigned foreground);
172 unsigned (*lcd_get_foreground)(void);
173 void (*lcd_set_background)(unsigned foreground);
174 unsigned (*lcd_get_background)(void);
175 void (*lcd_bitmap_part)(const fb_data *src, int src_x, int src_y,
176 int stride, int x, int y, int width, int height);
177 void (*lcd_bitmap)(const fb_data *src, int x, int y, int width,
178 int height);
179 fb_data* (*lcd_get_backdrop)(void);
180 void (*lcd_set_backdrop)(fb_data* backdrop);
181 #endif
182 #if LCD_DEPTH == 16
183 void (*lcd_bitmap_transparent_part)(const fb_data *src,
184 int src_x, int src_y, int stride,
185 int x, int y, int width, int height);
186 void (*lcd_bitmap_transparent)(const fb_data *src, int x, int y,
187 int width, int height);
188 #endif
189 unsigned short *(*bidi_l2v)( const unsigned char *str, int orientation );
190 const unsigned char *(*font_get_bits)( struct font *pf, unsigned short char_code );
191 struct font* (*font_load)(const char *path);
192 void (*lcd_puts_style)(int x, int y, const unsigned char *str, int style);
193 void (*lcd_puts_scroll_style)(int x, int y, const unsigned char* string,
194 int style);
195 fb_data* lcd_framebuffer;
196 void (*lcd_blit) (const fb_data* data, int x, int by, int width,
197 int bheight, int stride);
198 void (*lcd_update_rect)(int x, int y, int width, int height);
199 void (*gui_scrollbar_draw)(struct screen * screen, int x, int y,
200 int width, int height, int items,
201 int min_shown, int max_shown,
202 unsigned flags);
203 struct font* (*font_get)(int font);
204 int (*font_getstringsize)(const unsigned char *str, int *w, int *h,
205 int fontnumber);
206 int (*font_get_width)(struct font* pf, unsigned short char_code);
207 #endif
208 void (*backlight_on)(void);
209 void (*backlight_off)(void);
210 void (*backlight_set_timeout)(int index);
211 void (*splash)(int ticks, const char *fmt, ...) ATTRIBUTE_PRINTF(2, 3);
213 #ifdef HAVE_REMOTE_LCD
214 /* remote lcd */
215 void (*lcd_remote_set_contrast)(int x);
216 void (*lcd_remote_clear_display)(void);
217 void (*lcd_remote_puts)(int x, int y, const unsigned char *string);
218 void (*lcd_remote_lcd_puts_scroll)(int x, int y, const unsigned char* string);
219 void (*lcd_remote_lcd_stop_scroll)(void);
220 void (*lcd_remote_set_drawmode)(int mode);
221 int (*lcd_remote_get_drawmode)(void);
222 void (*lcd_remote_setfont)(int font);
223 int (*lcd_remote_getstringsize)(const unsigned char *str, int *w, int *h);
224 void (*lcd_remote_drawpixel)(int x, int y);
225 void (*lcd_remote_drawline)(int x1, int y1, int x2, int y2);
226 void (*lcd_remote_hline)(int x1, int x2, int y);
227 void (*lcd_remote_vline)(int x, int y1, int y2);
228 void (*lcd_remote_drawrect)(int x, int y, int nx, int ny);
229 void (*lcd_remote_fillrect)(int x, int y, int nx, int ny);
230 void (*lcd_remote_mono_bitmap_part)(const unsigned char *src, int src_x,
231 int src_y, int stride, int x, int y,
232 int width, int height);
233 void (*lcd_remote_mono_bitmap)(const unsigned char *src, int x, int y,
234 int width, int height);
235 void (*lcd_remote_putsxy)(int x, int y, const unsigned char *string);
236 void (*lcd_remote_puts_style)(int x, int y, const unsigned char *str, int style);
237 void (*lcd_remote_puts_scroll_style)(int x, int y, const unsigned char* string,
238 int style);
239 fb_remote_data* lcd_remote_framebuffer;
240 void (*lcd_remote_update)(void);
241 void (*lcd_remote_update_rect)(int x, int y, int width, int height);
243 void (*remote_backlight_on)(void);
244 void (*remote_backlight_off)(void);
245 #endif
246 struct screen* screens[NB_SCREENS];
247 #if defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1)
248 void (*lcd_remote_set_foreground)(unsigned foreground);
249 unsigned (*lcd_remote_get_foreground)(void);
250 void (*lcd_remote_set_background)(unsigned background);
251 unsigned (*lcd_remote_get_background)(void);
252 void (*lcd_remote_bitmap_part)(const fb_remote_data *src, int src_x, int src_y,
253 int stride, int x, int y, int width, int height);
254 void (*lcd_remote_bitmap)(const fb_remote_data *src, int x, int y, int width,
255 int height);
256 #endif
257 #if defined(HAVE_LCD_COLOR) && !defined(SIMULATOR)
258 void (*lcd_yuv_blit)(unsigned char * const src[3],
259 int src_x, int src_y, int stride,
260 int x, int y, int width, int height);
261 #endif
263 /* list */
264 void (*gui_synclist_init)(struct gui_synclist * lists,
265 list_get_name callback_get_item_name,void * data,
266 bool scroll_all,int selected_size);
267 void (*gui_synclist_set_nb_items)(struct gui_synclist * lists, int nb_items);
268 void (*gui_synclist_set_icon_callback)(struct gui_synclist * lists, list_get_icon icon_callback);
269 int (*gui_synclist_get_nb_items)(struct gui_synclist * lists);
270 int (*gui_synclist_get_sel_pos)(struct gui_synclist * lists);
271 void (*gui_synclist_draw)(struct gui_synclist * lists);
272 void (*gui_synclist_select_item)(struct gui_synclist * lists,
273 int item_number);
274 void (*gui_synclist_add_item)(struct gui_synclist * lists);
275 void (*gui_synclist_del_item)(struct gui_synclist * lists);
276 void (*gui_synclist_limit_scroll)(struct gui_synclist * lists, bool scroll);
277 void (*gui_synclist_flash)(struct gui_synclist * lists);
278 unsigned (*gui_synclist_do_button)(struct gui_synclist * lists,
279 unsigned button,enum list_wrap wrap);
280 void (*gui_synclist_set_title)(struct gui_synclist *lists, char* title, int icon);
282 /* button */
283 long (*button_get)(bool block);
284 long (*button_get_w_tmo)(int ticks);
285 int (*button_status)(void);
286 void (*button_clear_queue)(void);
287 #ifdef HAS_BUTTON_HOLD
288 bool (*button_hold)(void);
289 #endif
291 /* file */
292 int (*PREFIX(open))(const char* pathname, int flags);
293 int (*close)(int fd);
294 ssize_t (*read)(int fd, void* buf, size_t count);
295 off_t (*PREFIX(lseek))(int fd, off_t offset, int whence);
296 int (*PREFIX(creat))(const char *pathname);
297 ssize_t (*write)(int fd, const void* buf, size_t count);
298 int (*PREFIX(remove))(const char* pathname);
299 int (*PREFIX(rename))(const char* path, const char* newname);
300 int (*PREFIX(ftruncate))(int fd, off_t length);
301 off_t (*PREFIX(filesize))(int fd);
302 int (*fdprintf)(int fd, const char *fmt, ...) ATTRIBUTE_PRINTF(2, 3);
303 int (*read_line)(int fd, char* buffer, int buffer_size);
304 bool (*settings_parseline)(char* line, char** name, char** value);
305 #ifndef SIMULATOR
306 void (*ata_sleep)(void);
307 bool (*ata_disk_is_active)(void);
308 #endif
309 void (*ata_spindown)(int seconds);
310 void (*reload_directory)(void);
311 char *(*create_numbered_filename)(char *buffer, const char *path,
312 const char *prefix, const char *suffix,
313 int numberlen IF_CNFN_NUM_(, int *num));
315 /* dir */
316 DIR* (*opendir)(const char* name);
317 int (*closedir)(DIR* dir);
318 struct dirent* (*readdir)(DIR* dir);
319 int (*mkdir)(const char *name);
320 int (*rmdir)(const char *name);
322 /* kernel/ system */
323 void (*PREFIX(sleep))(int ticks);
324 void (*yield)(void);
325 #ifdef HAVE_PRIORITY_SCHEDULING
326 void (*priority_yield)(void);
327 #endif
328 volatile long* current_tick;
329 long (*default_event_handler)(long event);
330 long (*default_event_handler_ex)(long event, void (*callback)(void *), void *parameter);
331 struct thread_entry* threads;
332 struct thread_entry* (*create_thread)(void (*function)(void), void* stack,
333 int stack_size, const char *name
334 IF_PRIO(, int priority)
335 IF_COP(, unsigned int core, bool fallback));
336 void (*remove_thread)(struct thread_entry *thread);
337 void (*reset_poweroff_timer)(void);
338 #ifndef SIMULATOR
339 int (*system_memory_guard)(int newmode);
340 long *cpu_frequency;
341 #ifdef HAVE_ADJUSTABLE_CPU_FREQ
342 #ifdef CPU_BOOST_LOGGING
343 void (*cpu_boost_)(bool on_off,char*location,int line);
344 #else
345 void (*cpu_boost)(bool on_off);
346 #endif
347 #endif
348 #endif
349 bool (*timer_register)(int reg_prio, void (*unregister_callback)(void),
350 long cycles, int int_prio,
351 void (*timer_callback)(void));
352 void (*timer_unregister)(void);
353 bool (*timer_set_period)(long count);
355 void (*queue_init)(struct event_queue *q, bool register_queue);
356 void (*queue_delete)(struct event_queue *q);
357 void (*queue_post)(struct event_queue *q, long id, intptr_t data);
358 void (*queue_wait_w_tmo)(struct event_queue *q, struct event *ev,
359 int ticks);
360 void (*usb_acknowledge)(long id);
361 #ifdef RB_PROFILE
362 void (*profile_thread)(void);
363 void (*profstop)(void);
364 void (*profile_func_enter)(void *this_fn, void *call_site);
365 void (*profile_func_exit)(void *this_fn, void *call_site);
366 #endif
368 #ifdef SIMULATOR
369 /* special simulator hooks */
370 #if defined(HAVE_LCD_BITMAP) && LCD_DEPTH < 8
371 void (*sim_lcd_ex_init)(int shades, unsigned long (*getpixel)(int, int));
372 void (*sim_lcd_ex_update_rect)(int x, int y, int width, int height);
373 #endif
374 #endif
376 /* strings and memory */
377 int (*snprintf)(char *buf, size_t size, const char *fmt, ...)
378 ATTRIBUTE_PRINTF(3, 4);
379 int (*vsnprintf)(char *buf, int size, const char *fmt, va_list ap);
380 char* (*strcpy)(char *dst, const char *src);
381 char* (*strncpy)(char *dst, const char *src, size_t length);
382 size_t (*strlen)(const char *str);
383 char * (*strrchr)(const char *s, int c);
384 int (*strcmp)(const char *, const char *);
385 int (*strncmp)(const char *, const char *, size_t);
386 int (*strcasecmp)(const char *, const char *);
387 int (*strncasecmp)(const char *s1, const char *s2, size_t n);
388 void* (*memset)(void *dst, int c, size_t length);
389 void* (*memcpy)(void *out, const void *in, size_t n);
390 void* (*memmove)(void *out, const void *in, size_t n);
391 const unsigned char *_ctype_;
392 int (*atoi)(const char *str);
393 char *(*strchr)(const char *s, int c);
394 char *(*strcat)(char *s1, const char *s2);
395 void *(*memchr)(const void *s1, int c, size_t n);
396 int (*memcmp)(const void *s1, const void *s2, size_t n);
397 char *(*strcasestr) (const char* phaystack, const char* pneedle);
398 char* (*strtok_r)(char *ptr, const char *sep, char **end);
399 /* unicode stuff */
400 const unsigned char* (*utf8decode)(const unsigned char *utf8, unsigned short *ucs);
401 unsigned char* (*iso_decode)(const unsigned char *iso, unsigned char *utf8, int cp, int count);
402 unsigned char* (*utf16LEdecode)(const unsigned char *utf16, unsigned char *utf8, int count);
403 unsigned char* (*utf16BEdecode)(const unsigned char *utf16, unsigned char *utf8, int count);
404 unsigned char* (*utf8encode)(unsigned long ucs, unsigned char *utf8);
405 unsigned long (*utf8length)(const unsigned char *utf8);
406 int (*utf8seek)(const unsigned char* utf8, int offset);
408 /* sound */
409 #if CONFIG_CODEC == SWCODEC
410 int (*sound_default)(int setting);
411 #endif
412 void (*sound_set)(int setting, int value);
413 int (*sound_min)(int setting);
414 int (*sound_max)(int setting);
415 #ifndef SIMULATOR
416 void (*mp3_play_data)(const unsigned char* start, int size, void (*get_more)(unsigned char** start, size_t* size));
417 void (*mp3_play_pause)(bool play);
418 void (*mp3_play_stop)(void);
419 bool (*mp3_is_playing)(void);
420 #if CONFIG_CODEC != SWCODEC
421 void (*bitswap)(unsigned char *data, int length);
422 #endif
423 #endif /* !SIMULATOR */
424 #if CONFIG_CODEC == SWCODEC
425 const unsigned long *audio_master_sampr_list;
426 const unsigned long *hw_freq_sampr;
427 void (*pcm_apply_settings)(void);
428 void (*pcm_play_data)(pcm_more_callback_type get_more,
429 unsigned char* start, size_t size);
430 void (*pcm_play_stop)(void);
431 void (*pcm_set_frequency)(unsigned int frequency);
432 bool (*pcm_is_playing)(void);
433 bool (*pcm_is_paused)(void);
434 void (*pcm_play_pause)(bool play);
435 size_t (*pcm_get_bytes_waiting)(void);
436 void (*pcm_calculate_peaks)(int *left, int *right);
437 #ifdef HAVE_RECORDING
438 const unsigned long *rec_freq_sampr;
439 void (*pcm_init_recording)(void);
440 void (*pcm_close_recording)(void);
441 void (*pcm_record_data)(pcm_more_callback_type2 more_ready,
442 void *start, size_t size);
443 void (*pcm_record_more)(void *start, size_t size);
444 void (*pcm_stop_recording)(void);
445 void (*pcm_calculate_rec_peaks)(int *left, int *right);
446 void (*audio_set_recording_gain)(int left, int right, int type);
447 #endif /* HAVE_RECORDING */
448 #if INPUT_SRC_CAPS != 0
449 void (*audio_set_output_source)(int monitor);
450 void (*audio_set_input_source)(int source, unsigned flags);
451 #endif
452 #endif /* CONFIG_CODEC == SWCODC */
454 /* playback control */
455 int (*playlist_amount)(void);
456 int (*playlist_resume)(void);
457 int (*playlist_start)(int start_index, int offset);
458 void (*PREFIX(audio_play))(long offset);
459 void (*audio_stop)(void);
460 void (*audio_pause)(void);
461 void (*audio_resume)(void);
462 void (*audio_next)(void);
463 void (*audio_prev)(void);
464 void (*audio_ff_rewind)(long newtime);
465 struct mp3entry* (*audio_next_track)(void);
466 int (*audio_status)(void);
467 bool (*audio_has_changed_track)(void);
468 struct mp3entry* (*audio_current_track)(void);
469 void (*audio_flush_and_reload_tracks)(void);
470 int (*audio_get_file_pos)(void);
471 #if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)
472 unsigned long (*mpeg_get_last_header)(void);
473 #endif
474 #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) || \
475 (CONFIG_CODEC == SWCODEC)
476 void (*sound_set_pitch)(int pitch);
477 #endif
479 /* MAS communication */
480 #if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)
481 int (*mas_readmem)(int bank, int addr, unsigned long* dest, int len);
482 int (*mas_writemem)(int bank, int addr, const unsigned long* src, int len);
483 int (*mas_readreg)(int reg);
484 int (*mas_writereg)(int reg, unsigned int val);
485 #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
486 int (*mas_codec_writereg)(int reg, unsigned int val);
487 int (*mas_codec_readreg)(int reg);
488 void (*i2c_begin)(void);
489 void (*i2c_end)(void);
490 int (*i2c_write)(int address, unsigned char* buf, int count );
491 #endif
492 #endif
494 /* menu */
495 int (*do_menu)(const struct menu_item_ex *menu, int *start_selected);
497 /* scroll bar */
498 struct gui_syncstatusbar *statusbars;
499 void (*gui_syncstatusbar_draw)(struct gui_syncstatusbar * bars, bool force_redraw);
501 /* options */
502 const struct settings_list* (*find_setting)(void* variable, int *id);
503 bool (*option_screen)(struct settings_list *setting,
504 bool use_temp_var, unsigned char* option_title);
505 bool (*set_option)(const char* string, void* variable,
506 enum optiontype type, const struct opt_items* options,
507 int numoptions, void (*function)(int));
508 bool (*set_bool_options)(const char* string, bool* variable,
509 const char* yes_str, int yes_voice,
510 const char* no_str, int no_voice,
511 void (*function)(bool));
512 bool (*set_int)(const unsigned char* string, const char* unit, int voice_unit,
513 int* variable, void (*function)(int), int step, int min,
514 int max, void (*formatter)(char*, int, int, const char*) );
515 bool (*set_bool)(const char* string, bool* variable );
517 #ifdef HAVE_LCD_COLOR
518 bool (*set_color)(struct screen *display, char *title, unsigned *color,
519 unsigned banned_color);
520 #endif
521 /* action handling */
522 int (*get_custom_action)(int context,int timeout,
523 const struct button_mapping* (*get_context_map)(int));
524 int (*get_action)(int context, int timeout);
525 bool (*action_userabort)(int timeout);
527 /* power */
528 int (*battery_level)(void);
529 bool (*battery_level_safe)(void);
530 int (*battery_time)(void);
531 #ifndef SIMULATOR
532 unsigned int (*battery_voltage)(void);
533 #endif
534 #if CONFIG_CHARGING
535 bool (*charger_inserted)(void);
536 # if CONFIG_CHARGING == CHARGING_MONITOR
537 bool (*charging_state)(void);
538 # endif
539 #endif
540 #ifdef HAVE_USB_POWER
541 bool (*usb_powered)(void);
542 #endif
544 /* misc */
545 void (*srand)(unsigned int seed);
546 int (*rand)(void);
547 void (*qsort)(void *base, size_t nmemb, size_t size,
548 int(*compar)(const void *, const void *));
549 int (*kbd_input)(char* buffer, int buflen);
550 struct tm* (*get_time)(void);
551 int (*set_time)(const struct tm *tm);
552 #if CONFIG_RTC
553 time_t (*mktime)(struct tm *t);
554 #endif
555 void* (*plugin_get_buffer)(size_t *buffer_size);
556 void* (*plugin_get_audio_buffer)(size_t *buffer_size);
557 void (*plugin_tsr)(bool (*exit_callback)(bool reenter));
558 #ifdef IRAM_STEAL
559 void (*plugin_iram_init)(char *iramstart, char *iramcopy, size_t iram_size,
560 char *iedata, size_t iedata_size);
561 #endif
562 #if defined(DEBUG) || defined(SIMULATOR)
563 void (*debugf)(const char *fmt, ...) ATTRIBUTE_PRINTF(1, 2);
564 #endif
565 #ifdef ROCKBOX_HAS_LOGF
566 void (*logf)(const char *fmt, ...) ATTRIBUTE_PRINTF(1, 2);
567 #endif
568 struct user_settings* global_settings;
569 struct system_status *global_status;
570 bool (*mp3info)(struct mp3entry *entry, const char *filename, bool v1first);
571 int (*count_mp3_frames)(int fd, int startpos, int filesize,
572 void (*progressfunc)(int));
573 int (*create_xing_header)(int fd, long startpos, long filesize,
574 unsigned char *buf, unsigned long num_frames,
575 unsigned long rec_time, unsigned long header_template,
576 void (*progressfunc)(int), bool generate_toc);
577 unsigned long (*find_next_frame)(int fd, long *offset,
578 long max_offset, unsigned long last_header);
580 #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
581 unsigned short (*peak_meter_scale_value)(unsigned short val,
582 int meterwidth);
583 void (*peak_meter_set_use_dbfs)(bool use);
584 bool (*peak_meter_get_use_dbfs)(void);
585 #endif
586 #ifdef HAVE_LCD_BITMAP
587 int (*read_bmp_file)(char* filename, struct bitmap *bm, int maxsize,
588 int format);
589 void (*screen_dump_set_hook)(void (*hook)(int fh));
590 #endif
591 int (*show_logo)(void);
592 struct tree_context* (*tree_get_context)(void);
594 #ifdef HAVE_WHEEL_POSITION
595 int (*wheel_status)(void);
596 void (*wheel_send_events)(bool send);
597 #endif
599 #ifdef IRIVER_H100_SERIES
600 /* Routines for the iriver_flash -plugin. */
601 bool (*detect_original_firmware)(void);
602 bool (*detect_flashed_ramimage)(void);
603 bool (*detect_flashed_romimage)(void);
604 #endif
605 /* new stuff at the end, sort into place next time
606 the API gets incompatible */
608 #if (CONFIG_CODEC == SWCODEC)
609 void (*spinlock_init)(struct mutex *m);
610 void (*spinlock_lock)(struct mutex *m);
611 void (*spinlock_unlock)(struct mutex *m);
613 int (*codec_load_file)(const char* codec, struct codec_api *api);
614 const char *(*get_codec_filename)(int cod_spec);
615 bool (*get_metadata)(struct track_info* track, int fd, const char* trackname,
616 bool v1first);
617 #endif
618 #ifdef HAVE_LCD_BITMAP
619 void (*screen_clear_area)(struct screen * display, int xstart, int ystart,
620 int width, int height);
621 #endif
622 void (*led)(bool on);
625 /* plugin header */
626 struct plugin_header {
627 unsigned long magic;
628 unsigned short target_id;
629 unsigned short api_version;
630 unsigned char *load_addr;
631 unsigned char *end_addr;
632 enum plugin_status(*entry_point)(struct plugin_api*, void*);
635 #ifdef PLUGIN
636 #ifndef SIMULATOR
637 extern unsigned char plugin_start_addr[];
638 extern unsigned char plugin_end_addr[];
639 #define PLUGIN_HEADER \
640 const struct plugin_header __header \
641 __attribute__ ((section (".header")))= { \
642 PLUGIN_MAGIC, TARGET_ID, PLUGIN_API_VERSION, \
643 plugin_start_addr, plugin_end_addr, plugin_start };
644 #else /* SIMULATOR */
645 #define PLUGIN_HEADER \
646 const struct plugin_header __header = { \
647 PLUGIN_MAGIC, TARGET_ID, PLUGIN_API_VERSION, \
648 NULL, NULL, plugin_start };
649 #endif /* SIMULATOR */
651 #ifdef USE_IRAM
652 /* Declare IRAM variables */
653 #define PLUGIN_IRAM_DECLARE \
654 extern char iramcopy[]; \
655 extern char iramstart[]; \
656 extern char iramend[]; \
657 extern char iedata[]; \
658 extern char iend[];
659 /* Initialize IRAM */
660 #define PLUGIN_IRAM_INIT(api) \
661 (api)->plugin_iram_init(iramstart, iramcopy, iramend-iramstart, \
662 iedata, iend-iedata);
663 #else
664 #define PLUGIN_IRAM_DECLARE
665 #define PLUGIN_IRAM_INIT(api)
666 #endif /* USE_IRAM */
667 #endif /* PLUGIN */
669 int plugin_load(const char* plugin, void* parameter);
670 void* plugin_get_buffer(size_t *buffer_size);
671 void* plugin_get_audio_buffer(size_t *buffer_size);
672 #ifdef IRAM_STEAL
673 void plugin_iram_init(char *iramstart, char *iramcopy, size_t iram_size,
674 char *iedata, size_t iedata_size);
675 #endif
677 /* plugin_tsr,
678 callback returns true to allow the new plugin to load,
679 reenter means the currently running plugin is being reloaded */
680 void plugin_tsr(bool (*exit_callback)(bool reenter));
682 /* defined by the plugin */
683 enum plugin_status plugin_start(struct plugin_api* rockbox, void* parameter)
684 NO_PROF_ATTR;
686 /* Use this macro in plugins where gcc tries to optimize by calling
687 * these functions directly */
688 #define MEM_FUNCTION_WRAPPERS(api) \
689 void *memcpy(void *dest, const void *src, size_t n) \
691 return (api)->memcpy(dest, src, n); \
693 void *memset(void *dest, int c, size_t n) \
695 return (api)->memset(dest, c, n); \
697 void *memmove(void *dest, const void *src, size_t n) \
699 return (api)->memmove(dest, src, n); \
701 int memcmp(const void *s1, const void *s2, size_t n) \
703 return (api)->memcmp(s1, s2, n); \
706 #endif