Pictureflow: Don't show the playback control one targets that can't have playback...
[kugel-rb.git] / apps / plugin.h
blob105be0bfe2d9379de0bd6996fc8029bfbbd1ff69
1 /***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
10 * Copyright (C) 2002 Björn Stenberg
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 ****************************************************************************/
21 #ifndef _PLUGIN_H_
22 #define _PLUGIN_H_
24 /* instruct simulator code to not redefine any symbols when compiling plugins.
25 (the PLUGIN macro is defined in apps/plugins/Makefile) */
26 #ifdef PLUGIN
27 #define NO_REDEFINES_PLEASE
28 #endif
30 #ifndef MEM
31 #define MEM 2
32 #endif
34 #include <stdbool.h>
35 #include <sys/types.h>
36 #include <stdarg.h>
37 #include <stdio.h>
38 #include <stdlib.h>
39 #include <string.h>
41 void* plugin_get_buffer(size_t *buffer_size);
43 #ifndef __PCTOOL__
44 #include "config.h"
45 #include "system.h"
46 #include "dir.h"
47 #include "general.h"
48 #include "kernel.h"
49 #include "thread.h"
50 #include "button.h"
51 #include "action.h"
52 #include "usb.h"
53 #include "font.h"
54 #include "lcd.h"
55 #include "metadata.h"
56 #include "sound.h"
57 #include "mpeg.h"
58 #include "audio.h"
59 #include "mp3_playback.h"
60 #include "talk.h"
61 #ifdef RB_PROFILE
62 #include "profile.h"
63 #endif
64 #include "misc.h"
65 #if (CONFIG_CODEC == SWCODEC)
66 #include "dsp.h"
67 #include "codecs.h"
68 #include "playback.h"
69 #ifdef HAVE_RECORDING
70 #include "recording.h"
71 #endif
72 #else
73 #include "mas.h"
74 #endif /* CONFIG_CODEC == SWCODEC */
75 #include "settings.h"
76 #include "timer.h"
77 #include "playlist.h"
78 #ifdef HAVE_LCD_BITMAP
79 #include "screendump.h"
80 #include "scrollbar.h"
81 #include "jpeg_load.h"
82 #include "../recorder/bmp.h"
83 #endif
84 #include "statusbar.h"
85 #include "menu.h"
86 #include "rbunicode.h"
87 #include "list.h"
88 #include "tree.h"
89 #include "color_picker.h"
90 #include "buffering.h"
91 #include "tagcache.h"
92 #include "viewport.h"
93 #include "ata_idle_notify.h"
94 #include "settings_list.h"
95 #include "timefuncs.h"
97 #ifdef HAVE_ALBUMART
98 #include "albumart.h"
99 #endif
101 #ifdef HAVE_REMOTE_LCD
102 #include "lcd-remote.h"
103 #endif
105 #include "yesno.h"
107 #ifdef PLUGIN
109 #if defined(DEBUG) || defined(SIMULATOR)
110 #undef DEBUGF
111 #define DEBUGF rb->debugf
112 #undef LDEBUGF
113 #define LDEBUGF rb->debugf
114 #else
115 #define DEBUGF(...)
116 #define LDEBUGF(...)
117 #endif
119 #ifdef ROCKBOX_HAS_LOGF
120 #undef LOGF
121 #define LOGF rb->logf
122 #else
123 #define LOGF(...)
124 #endif
126 #endif
128 #define PLUGIN_MAGIC 0x526F634B /* RocK */
130 /* increase this every time the api struct changes */
131 #define PLUGIN_API_VERSION 155
133 /* update this to latest version if a change to the api struct breaks
134 backwards compatibility (and please take the opportunity to sort in any
135 new function which are "waiting" at the end of the function table) */
136 #define PLUGIN_MIN_API_VERSION 151
138 /* plugin return codes */
139 enum plugin_status {
140 PLUGIN_OK = 0,
141 PLUGIN_USB_CONNECTED,
142 PLUGIN_ERROR = -1,
145 /* NOTE: To support backwards compatibility, only add new functions at
146 the end of the structure. Every time you add a new function,
147 remember to increase PLUGIN_API_VERSION. If you make changes to the
148 existing APIs then also update PLUGIN_MIN_API_VERSION to current
149 version
151 struct plugin_api {
153 /* lcd */
155 #ifdef HAVE_LCD_CONTRAST
156 void (*lcd_set_contrast)(int x);
157 #endif
158 void (*lcd_update)(void);
159 void (*lcd_clear_display)(void);
160 int (*lcd_getstringsize)(const unsigned char *str, int *w, int *h);
161 void (*lcd_putsxy)(int x, int y, const unsigned char *string);
162 void (*lcd_puts)(int x, int y, const unsigned char *string);
163 void (*lcd_puts_scroll)(int x, int y, const unsigned char* string);
164 void (*lcd_stop_scroll)(void);
165 #ifdef HAVE_LCD_CHARCELLS
166 void (*lcd_define_pattern)(unsigned long ucs, const char *pattern);
167 unsigned long (*lcd_get_locked_pattern)(void);
168 void (*lcd_unlock_pattern)(unsigned long ucs);
169 void (*lcd_putc)(int x, int y, unsigned long ucs);
170 void (*lcd_put_cursor)(int x, int y, unsigned long ucs);
171 void (*lcd_remove_cursor)(void);
172 void (*lcd_icon)(int icon, bool enable);
173 void (*lcd_double_height)(bool on);
174 #else /* HAVE_LCD_BITMAP */
175 fb_data* lcd_framebuffer;
176 void (*lcd_update_rect)(int x, int y, int width, int height);
177 void (*lcd_set_drawmode)(int mode);
178 int (*lcd_get_drawmode)(void);
179 void (*lcd_setfont)(int font);
180 void (*lcd_drawpixel)(int x, int y);
181 void (*lcd_drawline)(int x1, int y1, int x2, int y2);
182 void (*lcd_hline)(int x1, int x2, int y);
183 void (*lcd_vline)(int x, int y1, int y2);
184 void (*lcd_drawrect)(int x, int y, int width, int height);
185 void (*lcd_fillrect)(int x, int y, int width, int height);
186 void (*lcd_mono_bitmap_part)(const unsigned char *src, int src_x, int src_y,
187 int stride, int x, int y, int width, int height);
188 void (*lcd_mono_bitmap)(const unsigned char *src, int x, int y,
189 int width, int height);
190 #if LCD_DEPTH > 1
191 void (*lcd_set_foreground)(unsigned foreground);
192 unsigned (*lcd_get_foreground)(void);
193 void (*lcd_set_background)(unsigned foreground);
194 unsigned (*lcd_get_background)(void);
195 void (*lcd_bitmap_part)(const fb_data *src, int src_x, int src_y,
196 int stride, int x, int y, int width, int height);
197 void (*lcd_bitmap)(const fb_data *src, int x, int y, int width,
198 int height);
199 fb_data* (*lcd_get_backdrop)(void);
200 void (*lcd_set_backdrop)(fb_data* backdrop);
201 #endif
202 #if LCD_DEPTH == 16
203 void (*lcd_bitmap_transparent_part)(const fb_data *src,
204 int src_x, int src_y, int stride,
205 int x, int y, int width, int height);
206 void (*lcd_bitmap_transparent)(const fb_data *src, int x, int y,
207 int width, int height);
208 void (*lcd_blit_yuv)(unsigned char * const src[3],
209 int src_x, int src_y, int stride,
210 int x, int y, int width, int height);
211 #if defined(TOSHIBA_GIGABEAT_F) || defined(SANSA_E200) || defined(SANSA_C200) \
212 || defined(IRIVER_H10) || defined(COWON_D2) || defined(PHILIPS_HDD1630) || defined(SANSA_FUZE) || defined(SANSA_E200V2)
213 void (*lcd_yuv_set_options)(unsigned options);
214 #endif
215 #elif (LCD_DEPTH < 4) && !defined(SIMULATOR)
216 void (*lcd_blit_mono)(const unsigned char *data, int x, int by, int width,
217 int bheight, int stride);
218 void (*lcd_blit_grey_phase)(unsigned char *values, unsigned char *phases,
219 int bx, int by, int bwidth, int bheight,
220 int stride);
221 #endif /* LCD_DEPTH */
222 #if defined(HAVE_LCD_MODES) && (HAVE_LCD_MODES & LCD_MODE_PAL256)
223 void (*lcd_blit_pal256)(unsigned char *src, int src_x, int src_y, int x, int y,
224 int width, int height);
225 void (*lcd_pal256_update_pal)(fb_data *palette);
226 #endif
227 void (*lcd_puts_style)(int x, int y, const unsigned char *str, int style);
228 void (*lcd_puts_scroll_style)(int x, int y, const unsigned char* string,
229 int style);
230 #ifdef HAVE_LCD_INVERT
231 void (*lcd_set_invert_display)(bool yesno);
232 #endif /* HAVE_LCD_INVERT */
233 #if defined(HAVE_LCD_MODES)
234 void (*lcd_set_mode)(int mode);
235 #endif
237 #if defined(HAVE_LCD_ENABLE) || defined(HAVE_LCD_SLEEP)
238 void (*lcd_activation_set_hook)(void (*enable_hook)(void));
239 struct event_queue *button_queue;
240 #endif
241 unsigned short *(*bidi_l2v)( const unsigned char *str, int orientation );
242 const unsigned char *(*font_get_bits)( struct font *pf, unsigned short char_code );
243 struct font* (*font_load)(const char *path);
244 struct font* (*font_get)(int font);
245 int (*font_getstringsize)(const unsigned char *str, int *w, int *h,
246 int fontnumber);
247 int (*font_get_width)(struct font* pf, unsigned short char_code);
248 void (*screen_clear_area)(struct screen * display, int xstart, int ystart,
249 int width, int height);
250 void (*gui_scrollbar_draw)(struct screen * screen, int x, int y,
251 int width, int height, int items,
252 int min_shown, int max_shown,
253 unsigned flags);
254 #endif /* HAVE_LCD_BITMAP */
255 const char* (*get_codepage_name)(int cp);
257 /* backlight */
258 /* The backlight_* functions must be present in the API regardless whether
259 * HAVE_BACKLIGHT is defined or not. The reason is that the stock Ondio has
260 * no backlight but can be modded to have backlight (it's prepared on the
261 * PCB). This makes backlight an all-target feature API wise, and keeps API
262 * compatible between stock and modded Ondio.
263 * For OLED targets like the Sansa Clip, the backlight_* functions control
264 * the display enable, which has essentially the same effect. */
265 void (*backlight_on)(void);
266 void (*backlight_off)(void);
267 void (*backlight_set_timeout)(int index);
268 #ifdef HAVE_BACKLIGHT_BRIGHTNESS
269 void (*backlight_set_brightness)(int val);
270 #endif /* HAVE_BACKLIGHT_BRIGHTNESS */
272 #if CONFIG_CHARGING
273 void (*backlight_set_timeout_plugged)(int index);
274 #endif
275 bool (*is_backlight_on)(bool ignore_always_off);
276 void (*splash)(int ticks, const char *str);
277 void (*splashf)(int ticks, const char *fmt, ...) ATTRIBUTE_PRINTF(2, 3);
279 #ifdef HAVE_REMOTE_LCD
280 /* remote lcd */
281 void (*lcd_remote_set_contrast)(int x);
282 void (*lcd_remote_clear_display)(void);
283 void (*lcd_remote_puts)(int x, int y, const unsigned char *string);
284 void (*lcd_remote_puts_scroll)(int x, int y, const unsigned char* string);
285 void (*lcd_remote_stop_scroll)(void);
286 void (*lcd_remote_set_drawmode)(int mode);
287 int (*lcd_remote_get_drawmode)(void);
288 void (*lcd_remote_setfont)(int font);
289 int (*lcd_remote_getstringsize)(const unsigned char *str, int *w, int *h);
290 void (*lcd_remote_drawpixel)(int x, int y);
291 void (*lcd_remote_drawline)(int x1, int y1, int x2, int y2);
292 void (*lcd_remote_hline)(int x1, int x2, int y);
293 void (*lcd_remote_vline)(int x, int y1, int y2);
294 void (*lcd_remote_drawrect)(int x, int y, int nx, int ny);
295 void (*lcd_remote_fillrect)(int x, int y, int nx, int ny);
296 void (*lcd_remote_mono_bitmap_part)(const unsigned char *src, int src_x,
297 int src_y, int stride, int x, int y,
298 int width, int height);
299 void (*lcd_remote_mono_bitmap)(const unsigned char *src, int x, int y,
300 int width, int height);
301 void (*lcd_remote_putsxy)(int x, int y, const unsigned char *string);
302 void (*lcd_remote_puts_style)(int x, int y, const unsigned char *str, int style);
303 void (*lcd_remote_puts_scroll_style)(int x, int y, const unsigned char* string,
304 int style);
305 fb_remote_data* lcd_remote_framebuffer;
306 void (*lcd_remote_update)(void);
307 void (*lcd_remote_update_rect)(int x, int y, int width, int height);
309 void (*remote_backlight_on)(void);
310 void (*remote_backlight_off)(void);
311 void (*remote_backlight_set_timeout)(int index);
312 #if CONFIG_CHARGING
313 void (*remote_backlight_set_timeout_plugged)(int index);
314 #endif
315 #endif /* HAVE_REMOTE_LCD */
316 struct screen* screens[NB_SCREENS];
317 #if defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1)
318 void (*lcd_remote_set_foreground)(unsigned foreground);
319 unsigned (*lcd_remote_get_foreground)(void);
320 void (*lcd_remote_set_background)(unsigned background);
321 unsigned (*lcd_remote_get_background)(void);
322 void (*lcd_remote_bitmap_part)(const fb_remote_data *src, int src_x, int src_y,
323 int stride, int x, int y, int width, int height);
324 void (*lcd_remote_bitmap)(const fb_remote_data *src, int x, int y, int width,
325 int height);
326 #endif
327 void (*viewport_set_defaults)(struct viewport *vp, enum screen_type screen);
328 int (*viewportmanager_set_statusbar)(int enable_status);
329 /* list */
330 void (*gui_synclist_init)(struct gui_synclist * lists,
331 list_get_name callback_get_item_name, void * data,
332 bool scroll_all,int selected_size,
333 struct viewport parent[NB_SCREENS]);
334 void (*gui_synclist_set_nb_items)(struct gui_synclist * lists, int nb_items);
335 void (*gui_synclist_set_icon_callback)(struct gui_synclist * lists, list_get_icon icon_callback);
336 int (*gui_synclist_get_nb_items)(struct gui_synclist * lists);
337 int (*gui_synclist_get_sel_pos)(struct gui_synclist * lists);
338 void (*gui_synclist_draw)(struct gui_synclist * lists);
339 void (*gui_synclist_select_item)(struct gui_synclist * lists,
340 int item_number);
341 void (*gui_synclist_add_item)(struct gui_synclist * lists);
342 void (*gui_synclist_del_item)(struct gui_synclist * lists);
343 void (*gui_synclist_limit_scroll)(struct gui_synclist * lists, bool scroll);
344 bool (*gui_synclist_do_button)(struct gui_synclist * lists,
345 int *action, enum list_wrap wrap);
346 void (*gui_synclist_set_title)(struct gui_synclist *lists, char* title, int icon);
347 enum yesno_res (*gui_syncyesno_run)(const struct text_message * main_message,
348 const struct text_message * yes_message,
349 const struct text_message * no_message);
350 void (*simplelist_info_init)(struct simplelist_info *info, char* title,
351 int count, void* data);
352 bool (*simplelist_show_list)(struct simplelist_info *info);
354 /* button */
355 long (*button_get)(bool block);
356 long (*button_get_w_tmo)(int ticks);
357 int (*button_status)(void);
358 #ifdef HAVE_BUTTON_DATA
359 intptr_t (*button_get_data)(void);
360 #endif
361 void (*button_clear_queue)(void);
362 int (*button_queue_count)(void);
363 #ifdef HAS_BUTTON_HOLD
364 bool (*button_hold)(void);
365 #endif
366 #ifdef HAVE_TOUCHSCREEN
367 void (*touchscreen_set_mode)(enum touchscreen_mode);
368 #endif
369 #ifdef HAVE_BUTTON_LIGHT
370 void (*buttonlight_set_timeout)(int value);
371 void (*buttonlight_off)(void);
372 void (*buttonlight_on)(void);
373 #ifdef HAVE_BUTTONLIGHT_BRIGHTNESS
374 void (*buttonlight_set_brightness)(int val);
375 #endif /* HAVE_BUTTONLIGHT_BRIGHTNESS */
376 #endif /* HAVE_BUTTON_LIGHT */
378 /* file */
379 int (*open)(const char* pathname, int flags);
380 int (*close)(int fd);
381 ssize_t (*read)(int fd, void* buf, size_t count);
382 off_t (*lseek)(int fd, off_t offset, int whence);
383 int (*creat)(const char *pathname);
384 ssize_t (*write)(int fd, const void* buf, size_t count);
385 int (*remove)(const char* pathname);
386 int (*rename)(const char* path, const char* newname);
387 int (*ftruncate)(int fd, off_t length);
388 off_t (*filesize)(int fd);
389 int (*fdprintf)(int fd, const char *fmt, ...) ATTRIBUTE_PRINTF(2, 3);
390 int (*read_line)(int fd, char* buffer, int buffer_size);
391 bool (*settings_parseline)(char* line, char** name, char** value);
392 void (*storage_sleep)(void);
393 void (*storage_spin)(void);
394 void (*storage_spindown)(int seconds);
395 #if USING_STORAGE_CALLBACK
396 void (*register_storage_idle_func)(storage_idle_notify function);
397 void (*unregister_storage_idle_func)(storage_idle_notify function, bool run);
398 #endif /* USING_STORAGE_CALLBACK */
399 void (*reload_directory)(void);
400 char *(*create_numbered_filename)(char *buffer, const char *path,
401 const char *prefix, const char *suffix,
402 int numberlen IF_CNFN_NUM_(, int *num));
403 bool (*file_exists)(const char *file);
404 char* (*strip_extension)(char* buffer, int buffer_size, const char *filename);
407 /* dir */
408 DIR* (*opendir)(const char* name);
409 int (*closedir)(DIR* dir);
410 struct dirent* (*readdir)(DIR* dir);
411 int (*mkdir)(const char *name);
412 int (*rmdir)(const char *name);
413 bool (*dir_exists)(const char *path);
415 /* kernel/ system */
416 #ifdef CPU_ARM
417 void (*__div0)(void);
418 #endif
419 void (*sleep)(int ticks);
420 void (*yield)(void);
421 volatile long* current_tick;
422 long (*default_event_handler)(long event);
423 long (*default_event_handler_ex)(long event, void (*callback)(void *), void *parameter);
424 unsigned int (*create_thread)(void (*function)(void), void* stack,
425 size_t stack_size, unsigned flags,
426 const char *name
427 IF_PRIO(, int priority)
428 IF_COP(, unsigned int core));
429 void (*thread_exit)(void);
430 void (*thread_wait)(unsigned int thread_id);
431 #if CONFIG_CODEC == SWCODEC
432 void (*thread_thaw)(unsigned int thread_id);
433 #ifdef HAVE_PRIORITY_SCHEDULING
434 int (*thread_set_priority)(unsigned int thread_id, int priority);
435 #endif
436 void (*mutex_init)(struct mutex *m);
437 void (*mutex_lock)(struct mutex *m);
438 void (*mutex_unlock)(struct mutex *m);
439 #endif
441 void (*reset_poweroff_timer)(void);
442 #ifndef SIMULATOR
443 int (*system_memory_guard)(int newmode);
444 long *cpu_frequency;
445 #ifdef HAVE_ADJUSTABLE_CPU_FREQ
446 #ifdef CPU_BOOST_LOGGING
447 void (*cpu_boost_)(bool on_off,char*location,int line);
448 #else
449 void (*cpu_boost)(bool on_off);
450 #endif
451 #endif /* HAVE_ADJUSTABLE_CPU_FREQ */
452 #endif /* !SIMULATOR */
453 #ifdef HAVE_SCHEDULER_BOOSTCTRL
454 void (*trigger_cpu_boost)(void);
455 void (*cancel_cpu_boost)(void);
456 #endif
457 #if NUM_CORES > 1
458 void (*cpucache_flush)(void);
459 void (*cpucache_invalidate)(void);
460 #endif
461 bool (*timer_register)(int reg_prio, void (*unregister_callback)(void),
462 long cycles, int int_prio,
463 void (*timer_callback)(void) IF_COP(, int core));
464 void (*timer_unregister)(void);
465 bool (*timer_set_period)(long count);
467 void (*queue_init)(struct event_queue *q, bool register_queue);
468 void (*queue_delete)(struct event_queue *q);
469 void (*queue_post)(struct event_queue *q, long id, intptr_t data);
470 void (*queue_wait_w_tmo)(struct event_queue *q, struct queue_event *ev,
471 int ticks);
472 #if CONFIG_CODEC == SWCODEC
473 void (*queue_enable_queue_send)(struct event_queue *q,
474 struct queue_sender_list *send,
475 unsigned int thread_id);
476 bool (*queue_empty)(const struct event_queue *q);
477 void (*queue_wait)(struct event_queue *q, struct queue_event *ev);
478 intptr_t (*queue_send)(struct event_queue *q, long id,
479 intptr_t data);
480 void (*queue_reply)(struct event_queue *q, intptr_t retval);
481 #endif /* CONFIG_CODEC == SWCODEC */
483 void (*usb_acknowledge)(long id);
484 #ifdef RB_PROFILE
485 void (*profile_thread)(void);
486 void (*profstop)(void);
487 void (*profile_func_enter)(void *this_fn, void *call_site);
488 void (*profile_func_exit)(void *this_fn, void *call_site);
489 #endif
491 #ifdef SIMULATOR
492 /* special simulator hooks */
493 #if defined(HAVE_LCD_BITMAP) && LCD_DEPTH < 8
494 void (*sim_lcd_ex_init)(unsigned long (*getpixel)(int, int));
495 void (*sim_lcd_ex_update_rect)(int x, int y, int width, int height);
496 #endif
497 #endif
499 /* strings and memory */
500 int (*snprintf)(char *buf, size_t size, const char *fmt, ...)
501 ATTRIBUTE_PRINTF(3, 4);
502 int (*vsnprintf)(char *buf, int size, const char *fmt, va_list ap);
503 char* (*strcpy)(char *dst, const char *src);
504 char* (*strncpy)(char *dst, const char *src, size_t length);
505 size_t (*strlen)(const char *str);
506 char * (*strrchr)(const char *s, int c);
507 int (*strcmp)(const char *, const char *);
508 int (*strncmp)(const char *, const char *, size_t);
509 int (*strcasecmp)(const char *, const char *);
510 int (*strncasecmp)(const char *s1, const char *s2, size_t n);
511 void* (*memset)(void *dst, int c, size_t length);
512 void* (*memcpy)(void *out, const void *in, size_t n);
513 void* (*memmove)(void *out, const void *in, size_t n);
514 const unsigned char *_rbctype_;
515 int (*atoi)(const char *str);
516 char *(*strchr)(const char *s, int c);
517 char *(*strcat)(char *s1, const char *s2);
518 void *(*memchr)(const void *s1, int c, size_t n);
519 int (*memcmp)(const void *s1, const void *s2, size_t n);
520 char *(*strcasestr) (const char* phaystack, const char* pneedle);
521 char* (*strtok_r)(char *ptr, const char *sep, char **end);
522 /* unicode stuff */
523 const unsigned char* (*utf8decode)(const unsigned char *utf8, unsigned short *ucs);
524 unsigned char* (*iso_decode)(const unsigned char *iso, unsigned char *utf8, int cp, int count);
525 unsigned char* (*utf16LEdecode)(const unsigned char *utf16, unsigned char *utf8, int count);
526 unsigned char* (*utf16BEdecode)(const unsigned char *utf16, unsigned char *utf8, int count);
527 unsigned char* (*utf8encode)(unsigned long ucs, unsigned char *utf8);
528 unsigned long (*utf8length)(const unsigned char *utf8);
529 int (*utf8seek)(const unsigned char* utf8, int offset);
531 /* sound */
532 void (*sound_set)(int setting, int value);
533 int (*sound_default)(int setting);
534 int (*sound_min)(int setting);
535 int (*sound_max)(int setting);
536 const char * (*sound_unit)(int setting);
537 int (*sound_val2phys)(int setting, int value);
538 #ifndef SIMULATOR
539 void (*mp3_play_data)(const unsigned char* start, int size, void (*get_more)(unsigned char** start, size_t* size));
540 void (*mp3_play_pause)(bool play);
541 void (*mp3_play_stop)(void);
542 bool (*mp3_is_playing)(void);
543 #if CONFIG_CODEC != SWCODEC
544 void (*bitswap)(unsigned char *data, int length);
545 #endif
546 #endif /* !SIMULATOR */
547 #if CONFIG_CODEC == SWCODEC
548 const unsigned long *audio_master_sampr_list;
549 const unsigned long *hw_freq_sampr;
550 void (*pcm_apply_settings)(void);
551 void (*pcm_play_data)(pcm_more_callback_type get_more,
552 unsigned char* start, size_t size);
553 void (*pcm_play_stop)(void);
554 void (*pcm_set_frequency)(unsigned int frequency);
555 bool (*pcm_is_playing)(void);
556 bool (*pcm_is_paused)(void);
557 void (*pcm_play_pause)(bool play);
558 size_t (*pcm_get_bytes_waiting)(void);
559 void (*pcm_calculate_peaks)(int *left, int *right);
560 void (*pcm_play_lock)(void);
561 void (*pcm_play_unlock)(void);
562 #ifdef HAVE_RECORDING
563 const unsigned long *rec_freq_sampr;
564 void (*pcm_init_recording)(void);
565 void (*pcm_close_recording)(void);
566 void (*pcm_record_data)(pcm_more_callback_type2 more_ready,
567 void *start, size_t size);
568 void (*pcm_record_more)(void *start, size_t size);
569 void (*pcm_stop_recording)(void);
570 void (*pcm_calculate_rec_peaks)(int *left, int *right);
571 void (*audio_set_recording_gain)(int left, int right, int type);
572 #endif /* HAVE_RECORDING */
573 #if INPUT_SRC_CAPS != 0
574 void (*audio_set_output_source)(int monitor);
575 void (*audio_set_input_source)(int source, unsigned flags);
576 #endif
577 void (*dsp_set_crossfeed)(bool enable);
578 void (*dsp_set_eq)(bool enable);
579 void (*dsp_dither_enable)(bool enable);
580 intptr_t (*dsp_configure)(struct dsp_config *dsp, int setting,
581 intptr_t value);
582 int (*dsp_process)(struct dsp_config *dsp, char *dest,
583 const char *src[], int count);
584 #endif /* CONFIG_CODEC == SWCODC */
586 /* playback control */
587 int (*playlist_amount)(void);
588 int (*playlist_resume)(void);
589 void (*playlist_start)(int start_index, int offset);
590 int (*playlist_add)(const char *filename);
591 void (*playlist_sync)(struct playlist_info* playlist);
592 int (*playlist_remove_all_tracks)(struct playlist_info *playlist);
593 int (*playlist_create)(const char *dir, const char *file);
594 int (*playlist_insert_track)(struct playlist_info* playlist,
595 const char *filename, int position, bool queue, bool sync);
596 int (*playlist_shuffle)(int random_seed, int start_index);
597 void (*audio_play)(long offset);
598 void (*audio_stop)(void);
599 void (*audio_pause)(void);
600 void (*audio_resume)(void);
601 void (*audio_next)(void);
602 void (*audio_prev)(void);
603 void (*audio_ff_rewind)(long newtime);
604 struct mp3entry* (*audio_next_track)(void);
605 int (*audio_status)(void);
606 struct mp3entry* (*audio_current_track)(void);
607 void (*audio_flush_and_reload_tracks)(void);
608 int (*audio_get_file_pos)(void);
609 #if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)
610 unsigned long (*mpeg_get_last_header)(void);
611 #endif
612 #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) || \
613 (CONFIG_CODEC == SWCODEC)
614 void (*sound_set_pitch)(int pitch);
615 #endif
617 /* MAS communication */
618 #if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)
619 int (*mas_readmem)(int bank, int addr, unsigned long* dest, int len);
620 int (*mas_writemem)(int bank, int addr, const unsigned long* src, int len);
621 int (*mas_readreg)(int reg);
622 int (*mas_writereg)(int reg, unsigned int val);
623 #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
624 int (*mas_codec_writereg)(int reg, unsigned int val);
625 int (*mas_codec_readreg)(int reg);
626 void (*i2c_begin)(void);
627 void (*i2c_end)(void);
628 int (*i2c_write)(int address, const unsigned char* buf, int count );
629 #endif
630 #endif
632 /* menu */
633 int (*do_menu)(const struct menu_item_ex *menu, int *start_selected,
634 struct viewport parent[NB_SCREENS], bool hide_bars);
636 /* scroll bar */
637 struct gui_syncstatusbar *statusbars;
638 void (*gui_syncstatusbar_draw)(struct gui_syncstatusbar * bars, bool force_redraw);
640 /* options */
641 const struct settings_list* (*get_settings_list)(int*count);
642 const struct settings_list* (*find_setting)(const void* variable, int *id);
643 bool (*option_screen)(const struct settings_list *setting,
644 struct viewport parent[NB_SCREENS],
645 bool use_temp_var, unsigned char* option_title);
646 bool (*set_option)(const char* string, const void* variable,
647 enum optiontype type, const struct opt_items* options,
648 int numoptions, void (*function)(int));
649 bool (*set_bool_options)(const char* string, const bool* variable,
650 const char* yes_str, int yes_voice,
651 const char* no_str, int no_voice,
652 void (*function)(bool));
653 bool (*set_int)(const unsigned char* string, const char* unit, int voice_unit,
654 const int* variable, void (*function)(int), int step,
655 int min, int max,
656 void (*formatter)(char*, size_t, int, const char*) );
657 bool (*set_bool)(const char* string, const bool* variable );
659 #ifdef HAVE_LCD_COLOR
660 bool (*set_color)(struct screen *display, char *title, unsigned *color,
661 unsigned banned_color);
662 #endif
663 /* action handling */
664 int (*get_custom_action)(int context,int timeout,
665 const struct button_mapping* (*get_context_map)(int));
666 int (*get_action)(int context, int timeout);
667 #ifdef HAVE_TOUCHSCREEN
668 int (*action_get_touchscreen_press)(short *x, short *y);
669 #endif
670 bool (*action_userabort)(int timeout);
672 /* power */
673 int (*battery_level)(void);
674 bool (*battery_level_safe)(void);
675 int (*battery_time)(void);
676 #ifndef SIMULATOR
677 unsigned int (*battery_voltage)(void);
678 #endif
679 #if CONFIG_CHARGING
680 bool (*charger_inserted)(void);
681 # if CONFIG_CHARGING >= CHARGING_MONITOR
682 bool (*charging_state)(void);
683 # endif
684 #endif
685 #ifdef HAVE_USB_POWER
686 bool (*usb_powered)(void);
687 #endif
689 /* misc */
690 void (*srand)(unsigned int seed);
691 int (*rand)(void);
692 void (*qsort)(void *base, size_t nmemb, size_t size,
693 int(*compar)(const void *, const void *));
694 int (*kbd_input)(char* buffer, int buflen);
695 struct tm* (*get_time)(void);
696 int (*set_time)(const struct tm *tm);
697 #if CONFIG_RTC
698 time_t (*mktime)(struct tm *t);
699 #endif
700 void* (*plugin_get_buffer)(size_t *buffer_size);
701 void* (*plugin_get_audio_buffer)(size_t *buffer_size);
702 void (*plugin_tsr)(bool (*exit_callback)(bool reenter));
703 char* (*plugin_get_current_filename)(void);
704 #ifdef PLUGIN_USE_IRAM
705 void (*plugin_iram_init)(char *iramstart, char *iramcopy, size_t iram_size,
706 char *iedata, size_t iedata_size);
707 #endif
708 #if defined(DEBUG) || defined(SIMULATOR)
709 void (*debugf)(const char *fmt, ...) ATTRIBUTE_PRINTF(1, 2);
710 #endif
711 #ifdef ROCKBOX_HAS_LOGF
712 void (*logf)(const char *fmt, ...) ATTRIBUTE_PRINTF(1, 2);
713 #endif
714 struct user_settings* global_settings;
715 struct system_status *global_status;
716 void (*talk_disable)(bool disable);
717 #if CONFIG_CODEC == SWCODEC
718 void (*codec_thread_do_callback)(void (*fn)(void),
719 unsigned int *audio_thread_id);
720 int (*codec_load_file)(const char* codec, struct codec_api *api);
721 const char *(*get_codec_filename)(int cod_spec);
722 #endif
723 bool (*get_metadata)(struct mp3entry* id3, int fd, const char* trackname);
724 bool (*mp3info)(struct mp3entry *entry, const char *filename);
725 int (*count_mp3_frames)(int fd, int startpos, int filesize,
726 void (*progressfunc)(int));
727 int (*create_xing_header)(int fd, long startpos, long filesize,
728 unsigned char *buf, unsigned long num_frames,
729 unsigned long rec_time, unsigned long header_template,
730 void (*progressfunc)(int), bool generate_toc);
731 unsigned long (*find_next_frame)(int fd, long *offset,
732 long max_offset, unsigned long last_header);
734 #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
735 unsigned short (*peak_meter_scale_value)(unsigned short val,
736 int meterwidth);
737 void (*peak_meter_set_use_dbfs)(bool use);
738 bool (*peak_meter_get_use_dbfs)(void);
739 #endif
740 #ifdef HAVE_LCD_BITMAP
741 int (*read_bmp_file)(const char* filename, struct bitmap *bm, int maxsize,
742 int format, const struct custom_format *cformat);
743 int (*read_bmp_fd)(int fd, struct bitmap *bm, int maxsize,
744 int format, const struct custom_format *cformat);
745 #ifdef HAVE_JPEG
746 int (*read_jpeg_file)(const char* filename, struct bitmap *bm, int maxsize,
747 int format, const struct custom_format *cformat);
748 int (*read_jpeg_fd)(int fd, struct bitmap *bm, int maxsize,
749 int format, const struct custom_format *cformat);
750 #endif
751 void (*screen_dump_set_hook)(void (*hook)(int fh));
752 #endif
753 int (*show_logo)(void);
754 struct tree_context* (*tree_get_context)(void);
755 void (*set_current_file)(char* path);
756 void (*set_dirfilter)(int l_dirfilter);
758 #ifdef HAVE_WHEEL_POSITION
759 int (*wheel_status)(void);
760 void (*wheel_send_events)(bool send);
761 #endif
763 #ifdef IRIVER_H100_SERIES
764 /* Routines for the iriver_flash -plugin. */
765 bool (*detect_original_firmware)(void);
766 bool (*detect_flashed_ramimage)(void);
767 bool (*detect_flashed_romimage)(void);
768 #endif
770 void (*led)(bool on);
772 #if (CONFIG_CODEC == SWCODEC)
773 /* buffering API */
774 int (*bufopen)(const char *file, size_t offset, enum data_type type);
775 int (*bufalloc)(const void *src, size_t size, enum data_type type);
776 bool (*bufclose)(int handle_id);
777 int (*bufseek)(int handle_id, size_t newpos);
778 int (*bufadvance)(int handle_id, off_t offset);
779 ssize_t (*bufread)(int handle_id, size_t size, void *dest);
780 ssize_t (*bufgetdata)(int handle_id, size_t size, void **data);
781 ssize_t (*bufgettail)(int handle_id, size_t size, void **data);
782 ssize_t (*bufcuttail)(int handle_id, size_t size);
784 ssize_t (*buf_get_offset)(int handle_id, void *ptr);
785 ssize_t (*buf_handle_offset)(int handle_id);
786 void (*buf_request_buffer_handle)(int handle_id);
787 void (*buf_set_base_handle)(int handle_id);
788 size_t (*buf_used)(void);
789 #endif
791 #ifdef HAVE_TAGCACHE
792 bool (*tagcache_search)(struct tagcache_search *tcs, int tag);
793 void (*tagcache_search_set_uniqbuf)(struct tagcache_search *tcs,
794 void *buffer, long length);
795 bool (*tagcache_search_add_filter)(struct tagcache_search *tcs,
796 int tag, int seek);
797 bool (*tagcache_get_next)(struct tagcache_search *tcs);
798 bool (*tagcache_retrieve)(struct tagcache_search *tcs, int idxid,
799 int tag, char *buf, long size);
800 void (*tagcache_search_finish)(struct tagcache_search *tcs);
801 long (*tagcache_get_numeric)(const struct tagcache_search *tcs, int tag);
802 #ifdef HAVE_TC_RAMCACHE
803 bool (*tagcache_fill_tags)(struct mp3entry *id3, const char *filename);
804 #endif
805 #endif
807 #ifdef HAVE_ALBUMART
808 bool (*find_albumart)(const struct mp3entry *id3, char *buf, int buflen);
809 bool (*search_albumart_files)(const struct mp3entry *id3, const char *size_string,
810 char *buf, int buflen);
811 #endif
813 #ifdef HAVE_SEMAPHORE_OBJECTS
814 void (*semaphore_init)(struct semaphore *s, int max, int start);
815 void (*semaphore_wait)(struct semaphore *s);
816 void (*semaphore_release)(struct semaphore *s);
817 #endif
819 const char *appsversion;
820 /* new stuff at the end, sort into place next time
821 the API gets incompatible */
824 /* plugin header */
825 struct plugin_header {
826 unsigned long magic;
827 unsigned short target_id;
828 unsigned short api_version;
829 unsigned char *load_addr;
830 unsigned char *end_addr;
831 enum plugin_status(*entry_point)(const void*);
832 const struct plugin_api **api;
835 #ifdef PLUGIN
836 #ifndef SIMULATOR
837 extern unsigned char plugin_start_addr[];
838 extern unsigned char plugin_end_addr[];
839 #define PLUGIN_HEADER \
840 const struct plugin_api *rb DATA_ATTR; \
841 const struct plugin_header __header \
842 __attribute__ ((section (".header")))= { \
843 PLUGIN_MAGIC, TARGET_ID, PLUGIN_API_VERSION, \
844 plugin_start_addr, plugin_end_addr, plugin_start, &rb };
845 #else /* SIMULATOR */
846 #define PLUGIN_HEADER \
847 const struct plugin_api *rb DATA_ATTR; \
848 const struct plugin_header __header \
849 __attribute__((visibility("default"))) = { \
850 PLUGIN_MAGIC, TARGET_ID, PLUGIN_API_VERSION, \
851 NULL, NULL, plugin_start, &rb };
852 #endif /* SIMULATOR */
854 #ifdef PLUGIN_USE_IRAM
855 /* Declare IRAM variables */
856 #define PLUGIN_IRAM_DECLARE \
857 extern char iramcopy[]; \
858 extern char iramstart[]; \
859 extern char iramend[]; \
860 extern char iedata[]; \
861 extern char iend[];
862 /* Initialize IRAM */
863 #define PLUGIN_IRAM_INIT(api) \
864 (api)->plugin_iram_init(iramstart, iramcopy, iramend-iramstart, \
865 iedata, iend-iedata);
866 #else
867 #define PLUGIN_IRAM_DECLARE
868 #define PLUGIN_IRAM_INIT(api)
869 #endif /* PLUGIN_USE_IRAM */
870 #endif /* PLUGIN */
872 int plugin_load(const char* plugin, const void* parameter);
873 void* plugin_get_audio_buffer(size_t *buffer_size);
874 #ifdef PLUGIN_USE_IRAM
875 void plugin_iram_init(char *iramstart, char *iramcopy, size_t iram_size,
876 char *iedata, size_t iedata_size);
877 #endif
879 /* plugin_tsr,
880 callback returns true to allow the new plugin to load,
881 reenter means the currently running plugin is being reloaded */
882 void plugin_tsr(bool (*exit_callback)(bool reenter));
884 /* defined by the plugin */
885 extern const struct plugin_api *rb;
886 enum plugin_status plugin_start(const void* parameter)
887 NO_PROF_ATTR;
889 #endif /* __PCTOOL__ */
890 #endif