rbutilQt: Add Uninstallation for Rockbox and Bootloaders. Also add Talkfiles to the...
[Rockbox.git] / apps / plugin.h
bloba424531a963b7f5d0ebe8192c57a77a463c5de14
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 71
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 71
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 void (*screen_clear_area)(struct screen * display, int xstart, int ystart,
208 int width, int height);
209 #endif
210 void (*backlight_on)(void);
211 void (*backlight_off)(void);
212 void (*backlight_set_timeout)(int index);
213 void (*splash)(int ticks, const char *fmt, ...) ATTRIBUTE_PRINTF(2, 3);
215 #ifdef HAVE_REMOTE_LCD
216 /* remote lcd */
217 void (*lcd_remote_set_contrast)(int x);
218 void (*lcd_remote_clear_display)(void);
219 void (*lcd_remote_puts)(int x, int y, const unsigned char *string);
220 void (*lcd_remote_lcd_puts_scroll)(int x, int y, const unsigned char* string);
221 void (*lcd_remote_lcd_stop_scroll)(void);
222 void (*lcd_remote_set_drawmode)(int mode);
223 int (*lcd_remote_get_drawmode)(void);
224 void (*lcd_remote_setfont)(int font);
225 int (*lcd_remote_getstringsize)(const unsigned char *str, int *w, int *h);
226 void (*lcd_remote_drawpixel)(int x, int y);
227 void (*lcd_remote_drawline)(int x1, int y1, int x2, int y2);
228 void (*lcd_remote_hline)(int x1, int x2, int y);
229 void (*lcd_remote_vline)(int x, int y1, int y2);
230 void (*lcd_remote_drawrect)(int x, int y, int nx, int ny);
231 void (*lcd_remote_fillrect)(int x, int y, int nx, int ny);
232 void (*lcd_remote_mono_bitmap_part)(const unsigned char *src, int src_x,
233 int src_y, int stride, int x, int y,
234 int width, int height);
235 void (*lcd_remote_mono_bitmap)(const unsigned char *src, int x, int y,
236 int width, int height);
237 void (*lcd_remote_putsxy)(int x, int y, const unsigned char *string);
238 void (*lcd_remote_puts_style)(int x, int y, const unsigned char *str, int style);
239 void (*lcd_remote_puts_scroll_style)(int x, int y, const unsigned char* string,
240 int style);
241 fb_remote_data* lcd_remote_framebuffer;
242 void (*lcd_remote_update)(void);
243 void (*lcd_remote_update_rect)(int x, int y, int width, int height);
245 void (*remote_backlight_on)(void);
246 void (*remote_backlight_off)(void);
247 #endif
248 struct screen* screens[NB_SCREENS];
249 #if defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1)
250 void (*lcd_remote_set_foreground)(unsigned foreground);
251 unsigned (*lcd_remote_get_foreground)(void);
252 void (*lcd_remote_set_background)(unsigned background);
253 unsigned (*lcd_remote_get_background)(void);
254 void (*lcd_remote_bitmap_part)(const fb_remote_data *src, int src_x, int src_y,
255 int stride, int x, int y, int width, int height);
256 void (*lcd_remote_bitmap)(const fb_remote_data *src, int x, int y, int width,
257 int height);
258 #endif
259 #if defined(HAVE_LCD_COLOR) && !defined(SIMULATOR)
260 void (*lcd_yuv_blit)(unsigned char * const src[3],
261 int src_x, int src_y, int stride,
262 int x, int y, int width, int height);
263 #endif
265 /* list */
266 void (*gui_synclist_init)(struct gui_synclist * lists,
267 list_get_name callback_get_item_name,void * data,
268 bool scroll_all,int selected_size);
269 void (*gui_synclist_set_nb_items)(struct gui_synclist * lists, int nb_items);
270 void (*gui_synclist_set_icon_callback)(struct gui_synclist * lists, list_get_icon icon_callback);
271 int (*gui_synclist_get_nb_items)(struct gui_synclist * lists);
272 int (*gui_synclist_get_sel_pos)(struct gui_synclist * lists);
273 void (*gui_synclist_draw)(struct gui_synclist * lists);
274 void (*gui_synclist_select_item)(struct gui_synclist * lists,
275 int item_number);
276 void (*gui_synclist_add_item)(struct gui_synclist * lists);
277 void (*gui_synclist_del_item)(struct gui_synclist * lists);
278 void (*gui_synclist_limit_scroll)(struct gui_synclist * lists, bool scroll);
279 void (*gui_synclist_flash)(struct gui_synclist * lists);
280 unsigned (*gui_synclist_do_button)(struct gui_synclist * lists,
281 unsigned button,enum list_wrap wrap);
282 void (*gui_synclist_set_title)(struct gui_synclist *lists, char* title, int icon);
284 /* button */
285 long (*button_get)(bool block);
286 long (*button_get_w_tmo)(int ticks);
287 int (*button_status)(void);
288 void (*button_clear_queue)(void);
289 #ifdef HAS_BUTTON_HOLD
290 bool (*button_hold)(void);
291 #endif
293 /* file */
294 int (*PREFIX(open))(const char* pathname, int flags);
295 int (*close)(int fd);
296 ssize_t (*read)(int fd, void* buf, size_t count);
297 off_t (*PREFIX(lseek))(int fd, off_t offset, int whence);
298 int (*PREFIX(creat))(const char *pathname);
299 ssize_t (*write)(int fd, const void* buf, size_t count);
300 int (*PREFIX(remove))(const char* pathname);
301 int (*PREFIX(rename))(const char* path, const char* newname);
302 int (*PREFIX(ftruncate))(int fd, off_t length);
303 off_t (*PREFIX(filesize))(int fd);
304 int (*fdprintf)(int fd, const char *fmt, ...) ATTRIBUTE_PRINTF(2, 3);
305 int (*read_line)(int fd, char* buffer, int buffer_size);
306 bool (*settings_parseline)(char* line, char** name, char** value);
307 #ifndef SIMULATOR
308 void (*ata_sleep)(void);
309 bool (*ata_disk_is_active)(void);
310 #endif
311 void (*ata_spindown)(int seconds);
312 void (*reload_directory)(void);
313 char *(*create_numbered_filename)(char *buffer, const char *path,
314 const char *prefix, const char *suffix,
315 int numberlen IF_CNFN_NUM_(, int *num));
317 /* dir */
318 DIR* (*opendir)(const char* name);
319 int (*closedir)(DIR* dir);
320 struct dirent* (*readdir)(DIR* dir);
321 int (*mkdir)(const char *name);
322 int (*rmdir)(const char *name);
324 /* kernel/ system */
325 void (*PREFIX(sleep))(int ticks);
326 void (*yield)(void);
327 #ifdef HAVE_PRIORITY_SCHEDULING
328 void (*priority_yield)(void);
329 #endif
330 volatile long* current_tick;
331 long (*default_event_handler)(long event);
332 long (*default_event_handler_ex)(long event, void (*callback)(void *), void *parameter);
333 struct thread_entry* threads;
334 struct thread_entry* (*create_thread)(void (*function)(void), void* stack,
335 int stack_size, const char *name
336 IF_PRIO(, int priority)
337 IF_COP(, unsigned int core, bool fallback));
338 void (*remove_thread)(struct thread_entry *thread);
339 void (*reset_poweroff_timer)(void);
340 #ifndef SIMULATOR
341 int (*system_memory_guard)(int newmode);
342 long *cpu_frequency;
343 #ifdef HAVE_ADJUSTABLE_CPU_FREQ
344 #ifdef CPU_BOOST_LOGGING
345 void (*cpu_boost_)(bool on_off,char*location,int line);
346 #else
347 void (*cpu_boost)(bool on_off);
348 #endif
349 #endif
350 #endif
351 bool (*timer_register)(int reg_prio, void (*unregister_callback)(void),
352 long cycles, int int_prio,
353 void (*timer_callback)(void));
354 void (*timer_unregister)(void);
355 bool (*timer_set_period)(long count);
357 void (*queue_init)(struct event_queue *q, bool register_queue);
358 void (*queue_delete)(struct event_queue *q);
359 void (*queue_post)(struct event_queue *q, long id, intptr_t data);
360 void (*queue_wait_w_tmo)(struct event_queue *q, struct event *ev,
361 int ticks);
362 void (*usb_acknowledge)(long id);
363 #ifdef RB_PROFILE
364 void (*profile_thread)(void);
365 void (*profstop)(void);
366 void (*profile_func_enter)(void *this_fn, void *call_site);
367 void (*profile_func_exit)(void *this_fn, void *call_site);
368 #endif
370 #ifdef SIMULATOR
371 /* special simulator hooks */
372 #if defined(HAVE_LCD_BITMAP) && LCD_DEPTH < 8
373 void (*sim_lcd_ex_init)(int shades, unsigned long (*getpixel)(int, int));
374 void (*sim_lcd_ex_update_rect)(int x, int y, int width, int height);
375 #endif
376 #endif
378 /* strings and memory */
379 int (*snprintf)(char *buf, size_t size, const char *fmt, ...)
380 ATTRIBUTE_PRINTF(3, 4);
381 int (*vsnprintf)(char *buf, int size, const char *fmt, va_list ap);
382 char* (*strcpy)(char *dst, const char *src);
383 char* (*strncpy)(char *dst, const char *src, size_t length);
384 size_t (*strlen)(const char *str);
385 char * (*strrchr)(const char *s, int c);
386 int (*strcmp)(const char *, const char *);
387 int (*strncmp)(const char *, const char *, size_t);
388 int (*strcasecmp)(const char *, const char *);
389 int (*strncasecmp)(const char *s1, const char *s2, size_t n);
390 void* (*memset)(void *dst, int c, size_t length);
391 void* (*memcpy)(void *out, const void *in, size_t n);
392 void* (*memmove)(void *out, const void *in, size_t n);
393 const unsigned char *_ctype_;
394 int (*atoi)(const char *str);
395 char *(*strchr)(const char *s, int c);
396 char *(*strcat)(char *s1, const char *s2);
397 void *(*memchr)(const void *s1, int c, size_t n);
398 int (*memcmp)(const void *s1, const void *s2, size_t n);
399 char *(*strcasestr) (const char* phaystack, const char* pneedle);
400 char* (*strtok_r)(char *ptr, const char *sep, char **end);
401 /* unicode stuff */
402 const unsigned char* (*utf8decode)(const unsigned char *utf8, unsigned short *ucs);
403 unsigned char* (*iso_decode)(const unsigned char *iso, unsigned char *utf8, int cp, int count);
404 unsigned char* (*utf16LEdecode)(const unsigned char *utf16, unsigned char *utf8, int count);
405 unsigned char* (*utf16BEdecode)(const unsigned char *utf16, unsigned char *utf8, int count);
406 unsigned char* (*utf8encode)(unsigned long ucs, unsigned char *utf8);
407 unsigned long (*utf8length)(const unsigned char *utf8);
408 int (*utf8seek)(const unsigned char* utf8, int offset);
410 /* sound */
411 #if CONFIG_CODEC == SWCODEC
412 int (*sound_default)(int setting);
413 #endif
414 void (*sound_set)(int setting, int value);
415 int (*sound_min)(int setting);
416 int (*sound_max)(int setting);
417 #ifndef SIMULATOR
418 void (*mp3_play_data)(const unsigned char* start, int size, void (*get_more)(unsigned char** start, size_t* size));
419 void (*mp3_play_pause)(bool play);
420 void (*mp3_play_stop)(void);
421 bool (*mp3_is_playing)(void);
422 #if CONFIG_CODEC != SWCODEC
423 void (*bitswap)(unsigned char *data, int length);
424 #endif
425 #endif /* !SIMULATOR */
426 #if CONFIG_CODEC == SWCODEC
427 const unsigned long *audio_master_sampr_list;
428 const unsigned long *hw_freq_sampr;
429 void (*pcm_apply_settings)(void);
430 void (*pcm_play_data)(pcm_more_callback_type get_more,
431 unsigned char* start, size_t size);
432 void (*pcm_play_stop)(void);
433 void (*pcm_set_frequency)(unsigned int frequency);
434 bool (*pcm_is_playing)(void);
435 bool (*pcm_is_paused)(void);
436 void (*pcm_play_pause)(bool play);
437 size_t (*pcm_get_bytes_waiting)(void);
438 void (*pcm_calculate_peaks)(int *left, int *right);
439 #ifdef HAVE_RECORDING
440 const unsigned long *rec_freq_sampr;
441 void (*pcm_init_recording)(void);
442 void (*pcm_close_recording)(void);
443 void (*pcm_record_data)(pcm_more_callback_type2 more_ready,
444 void *start, size_t size);
445 void (*pcm_record_more)(void *start, size_t size);
446 void (*pcm_stop_recording)(void);
447 void (*pcm_calculate_rec_peaks)(int *left, int *right);
448 void (*audio_set_recording_gain)(int left, int right, int type);
449 #endif /* HAVE_RECORDING */
450 #if INPUT_SRC_CAPS != 0
451 void (*audio_set_output_source)(int monitor);
452 void (*audio_set_input_source)(int source, unsigned flags);
453 #endif
454 #endif /* CONFIG_CODEC == SWCODC */
456 /* playback control */
457 int (*playlist_amount)(void);
458 int (*playlist_resume)(void);
459 int (*playlist_start)(int start_index, int offset);
460 void (*PREFIX(audio_play))(long offset);
461 void (*audio_stop)(void);
462 void (*audio_pause)(void);
463 void (*audio_resume)(void);
464 void (*audio_next)(void);
465 void (*audio_prev)(void);
466 void (*audio_ff_rewind)(long newtime);
467 struct mp3entry* (*audio_next_track)(void);
468 int (*audio_status)(void);
469 bool (*audio_has_changed_track)(void);
470 struct mp3entry* (*audio_current_track)(void);
471 void (*audio_flush_and_reload_tracks)(void);
472 int (*audio_get_file_pos)(void);
473 #if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)
474 unsigned long (*mpeg_get_last_header)(void);
475 #endif
476 #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) || \
477 (CONFIG_CODEC == SWCODEC)
478 void (*sound_set_pitch)(int pitch);
479 #endif
481 /* MAS communication */
482 #if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)
483 int (*mas_readmem)(int bank, int addr, unsigned long* dest, int len);
484 int (*mas_writemem)(int bank, int addr, const unsigned long* src, int len);
485 int (*mas_readreg)(int reg);
486 int (*mas_writereg)(int reg, unsigned int val);
487 #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
488 int (*mas_codec_writereg)(int reg, unsigned int val);
489 int (*mas_codec_readreg)(int reg);
490 void (*i2c_begin)(void);
491 void (*i2c_end)(void);
492 int (*i2c_write)(int address, unsigned char* buf, int count );
493 #endif
494 #endif
496 /* menu */
497 int (*do_menu)(const struct menu_item_ex *menu, int *start_selected);
499 /* scroll bar */
500 struct gui_syncstatusbar *statusbars;
501 void (*gui_syncstatusbar_draw)(struct gui_syncstatusbar * bars, bool force_redraw);
503 /* options */
504 const struct settings_list* (*find_setting)(void* variable, int *id);
505 bool (*option_screen)(struct settings_list *setting,
506 bool use_temp_var, unsigned char* option_title);
507 bool (*set_option)(const char* string, void* variable,
508 enum optiontype type, const struct opt_items* options,
509 int numoptions, void (*function)(int));
510 bool (*set_bool_options)(const char* string, bool* variable,
511 const char* yes_str, int yes_voice,
512 const char* no_str, int no_voice,
513 void (*function)(bool));
514 bool (*set_int)(const unsigned char* string, const char* unit, int voice_unit,
515 int* variable, void (*function)(int), int step, int min,
516 int max, void (*formatter)(char*, int, int, const char*) );
517 bool (*set_bool)(const char* string, bool* variable );
519 #ifdef HAVE_LCD_COLOR
520 bool (*set_color)(struct screen *display, char *title, unsigned *color,
521 unsigned banned_color);
522 #endif
523 /* action handling */
524 int (*get_custom_action)(int context,int timeout,
525 const struct button_mapping* (*get_context_map)(int));
526 int (*get_action)(int context, int timeout);
527 bool (*action_userabort)(int timeout);
529 /* power */
530 int (*battery_level)(void);
531 bool (*battery_level_safe)(void);
532 int (*battery_time)(void);
533 #ifndef SIMULATOR
534 unsigned int (*battery_voltage)(void);
535 #endif
536 #if CONFIG_CHARGING
537 bool (*charger_inserted)(void);
538 # if CONFIG_CHARGING == CHARGING_MONITOR
539 bool (*charging_state)(void);
540 # endif
541 #endif
542 #ifdef HAVE_USB_POWER
543 bool (*usb_powered)(void);
544 #endif
546 /* misc */
547 void (*srand)(unsigned int seed);
548 int (*rand)(void);
549 void (*qsort)(void *base, size_t nmemb, size_t size,
550 int(*compar)(const void *, const void *));
551 int (*kbd_input)(char* buffer, int buflen);
552 struct tm* (*get_time)(void);
553 int (*set_time)(const struct tm *tm);
554 #if CONFIG_RTC
555 time_t (*mktime)(struct tm *t);
556 #endif
557 void* (*plugin_get_buffer)(size_t *buffer_size);
558 void* (*plugin_get_audio_buffer)(size_t *buffer_size);
559 void (*plugin_tsr)(bool (*exit_callback)(bool reenter));
560 char* (*plugin_get_current_filename)(void);
561 #ifdef IRAM_STEAL
562 void (*plugin_iram_init)(char *iramstart, char *iramcopy, size_t iram_size,
563 char *iedata, size_t iedata_size);
564 #endif
565 #if defined(DEBUG) || defined(SIMULATOR)
566 void (*debugf)(const char *fmt, ...) ATTRIBUTE_PRINTF(1, 2);
567 #endif
568 #ifdef ROCKBOX_HAS_LOGF
569 void (*logf)(const char *fmt, ...) ATTRIBUTE_PRINTF(1, 2);
570 #endif
571 struct user_settings* global_settings;
572 struct system_status *global_status;
573 bool (*mp3info)(struct mp3entry *entry, const char *filename, bool v1first);
574 int (*count_mp3_frames)(int fd, int startpos, int filesize,
575 void (*progressfunc)(int));
576 int (*create_xing_header)(int fd, long startpos, long filesize,
577 unsigned char *buf, unsigned long num_frames,
578 unsigned long rec_time, unsigned long header_template,
579 void (*progressfunc)(int), bool generate_toc);
580 unsigned long (*find_next_frame)(int fd, long *offset,
581 long max_offset, unsigned long last_header);
583 #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
584 unsigned short (*peak_meter_scale_value)(unsigned short val,
585 int meterwidth);
586 void (*peak_meter_set_use_dbfs)(bool use);
587 bool (*peak_meter_get_use_dbfs)(void);
588 #endif
589 #ifdef HAVE_LCD_BITMAP
590 int (*read_bmp_file)(char* filename, struct bitmap *bm, int maxsize,
591 int format);
592 void (*screen_dump_set_hook)(void (*hook)(int fh));
593 #endif
594 int (*show_logo)(void);
595 struct tree_context* (*tree_get_context)(void);
596 void (*set_current_file)(char* path);
597 void (*set_dirfilter)(int l_dirfilter);
599 #ifdef HAVE_WHEEL_POSITION
600 int (*wheel_status)(void);
601 void (*wheel_send_events)(bool send);
602 #endif
604 #ifdef IRIVER_H100_SERIES
605 /* Routines for the iriver_flash -plugin. */
606 bool (*detect_original_firmware)(void);
607 bool (*detect_flashed_ramimage)(void);
608 bool (*detect_flashed_romimage)(void);
609 #endif
610 /* new stuff at the end, sort into place next time
611 the API gets incompatible */
613 #if (CONFIG_CODEC == SWCODEC)
614 void (*spinlock_init)(struct mutex *m);
615 void (*spinlock_lock)(struct mutex *m);
616 void (*spinlock_unlock)(struct mutex *m);
618 int (*codec_load_file)(const char* codec, struct codec_api *api);
619 const char *(*get_codec_filename)(int cod_spec);
620 bool (*get_metadata)(struct track_info* track, int fd, const char* trackname,
621 bool v1first);
622 #endif
623 void (*led)(bool on);
626 /* plugin header */
627 struct plugin_header {
628 unsigned long magic;
629 unsigned short target_id;
630 unsigned short api_version;
631 unsigned char *load_addr;
632 unsigned char *end_addr;
633 enum plugin_status(*entry_point)(struct plugin_api*, void*);
636 #ifdef PLUGIN
637 #ifndef SIMULATOR
638 extern unsigned char plugin_start_addr[];
639 extern unsigned char plugin_end_addr[];
640 #define PLUGIN_HEADER \
641 const struct plugin_header __header \
642 __attribute__ ((section (".header")))= { \
643 PLUGIN_MAGIC, TARGET_ID, PLUGIN_API_VERSION, \
644 plugin_start_addr, plugin_end_addr, plugin_start };
645 #else /* SIMULATOR */
646 #define PLUGIN_HEADER \
647 const struct plugin_header __header = { \
648 PLUGIN_MAGIC, TARGET_ID, PLUGIN_API_VERSION, \
649 NULL, NULL, plugin_start };
650 #endif /* SIMULATOR */
652 #ifdef USE_IRAM
653 /* Declare IRAM variables */
654 #define PLUGIN_IRAM_DECLARE \
655 extern char iramcopy[]; \
656 extern char iramstart[]; \
657 extern char iramend[]; \
658 extern char iedata[]; \
659 extern char iend[];
660 /* Initialize IRAM */
661 #define PLUGIN_IRAM_INIT(api) \
662 (api)->plugin_iram_init(iramstart, iramcopy, iramend-iramstart, \
663 iedata, iend-iedata);
664 #else
665 #define PLUGIN_IRAM_DECLARE
666 #define PLUGIN_IRAM_INIT(api)
667 #endif /* USE_IRAM */
668 #endif /* PLUGIN */
670 int plugin_load(const char* plugin, void* parameter);
671 void* plugin_get_buffer(size_t *buffer_size);
672 void* plugin_get_audio_buffer(size_t *buffer_size);
673 #ifdef IRAM_STEAL
674 void plugin_iram_init(char *iramstart, char *iramcopy, size_t iram_size,
675 char *iedata, size_t iedata_size);
676 #endif
678 /* plugin_tsr,
679 callback returns true to allow the new plugin to load,
680 reenter means the currently running plugin is being reloaded */
681 void plugin_tsr(bool (*exit_callback)(bool reenter));
683 /* defined by the plugin */
684 enum plugin_status plugin_start(struct plugin_api* rockbox, void* parameter)
685 NO_PROF_ATTR;
687 /* Use this macro in plugins where gcc tries to optimize by calling
688 * these functions directly */
689 #define MEM_FUNCTION_WRAPPERS(api) \
690 void *memcpy(void *dest, const void *src, size_t n) \
692 return (api)->memcpy(dest, src, n); \
694 void *memset(void *dest, int c, size_t n) \
696 return (api)->memset(dest, c, n); \
698 void *memmove(void *dest, const void *src, size_t n) \
700 return (api)->memmove(dest, src, n); \
702 int memcmp(const void *s1, const void *s2, size_t n) \
704 return (api)->memcmp(s1, s2, n); \
707 #endif