Plugin API

Reorganize Plugin functions in prep for API bump

Stub in sound_current

add sleep_timer

Change-Id: I74b3a433c86bd6cec43a7c45ae0d2db95c97bb60
This commit is contained in:
William Wilgus 2019-07-20 04:46:14 -05:00
parent 55eb1c54eb
commit 6392e05476
2 changed files with 239 additions and 200 deletions

View File

@ -84,7 +84,7 @@ char *plugin_get_current_filename(void);
static void* plugin_get_audio_buffer(size_t *buffer_size);
static void plugin_release_audio_buffer(void);
static void plugin_tsr(bool (*exit_callback)(bool));
int sound_current(int setting); /*stub*/
#ifdef HAVE_PLUGIN_CHECK_OPEN_CLOSE
/* File handle leak prophylaxis */
@ -182,6 +182,8 @@ static const struct plugin_api rockbox_api = {
language_strings,
/* lcd */
splash,
splashf,
#ifdef HAVE_LCD_CONTRAST
lcd_set_contrast,
#endif
@ -203,7 +205,7 @@ static const struct plugin_api rockbox_api = {
lcd_remove_cursor,
lcd_icon,
lcd_double_height,
#else
#else /* HAVE_LCD_BITMAP */
&lcd_static_framebuffer[0][0],
lcd_set_viewport,
lcd_set_framebuffer,
@ -274,20 +276,6 @@ static const struct plugin_api rockbox_api = {
gui_scrollbar_draw,
#endif /* HAVE_LCD_BITMAP */
backlight_on,
backlight_off,
backlight_set_timeout,
#ifdef HAVE_BACKLIGHT_BRIGHTNESS
backlight_set_brightness,
#endif /* HAVE_BACKLIGHT_BRIGHTNESS */
#if CONFIG_CHARGING
backlight_set_timeout_plugged,
#endif
is_backlight_on,
splash,
splashf,
#ifdef HAVE_REMOTE_LCD
/* remote lcd */
lcd_remote_set_contrast,
@ -311,20 +299,7 @@ static const struct plugin_api rockbox_api = {
&lcd_remote_static_framebuffer[0][0],
lcd_remote_update,
lcd_remote_update_rect,
remote_backlight_on,
remote_backlight_off,
remote_backlight_set_timeout,
#if CONFIG_CHARGING
remote_backlight_set_timeout_plugged,
#endif
#endif /* HAVE_REMOTE_LCD */
#if NB_SCREENS == 2
{&screens[SCREEN_MAIN], &screens[SCREEN_REMOTE]},
#else
{&screens[SCREEN_MAIN]},
#endif
#if defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1)
#if (LCD_REMOTE_DEPTH > 1)
lcd_remote_set_foreground,
lcd_remote_get_foreground,
lcd_remote_set_background,
@ -332,6 +307,13 @@ static const struct plugin_api rockbox_api = {
lcd_remote_bitmap_part,
lcd_remote_bitmap,
#endif
#endif /* HAVE_REMOTE_LCD */
#if NB_SCREENS == 2
{&screens[SCREEN_MAIN], &screens[SCREEN_REMOTE]},
#else
{&screens[SCREEN_MAIN]},
#endif
viewport_set_defaults,
#ifdef HAVE_LCD_BITMAP
viewportmanager_theme_enable,
@ -339,6 +321,35 @@ static const struct plugin_api rockbox_api = {
viewport_set_fullscreen,
#endif
/* lcd backlight */
/* The backlight_* functions must be present in the API regardless whether
* HAVE_BACKLIGHT is defined or not. The reason is that the stock Ondio has
* no backlight but can be modded to have backlight (it's prepared on the
* PCB). This makes backlight an all-target feature API wise, and keeps API
* compatible between stock and modded Ondio.
* For OLED targets like the Sansa Clip, the backlight_* functions control
* the display enable, which has essentially the same effect. */
is_backlight_on,
backlight_on,
backlight_off,
backlight_set_timeout,
#ifdef HAVE_BACKLIGHT_BRIGHTNESS
backlight_set_brightness,
#endif /* HAVE_BACKLIGHT_BRIGHTNESS */
#if CONFIG_CHARGING
backlight_set_timeout_plugged,
#endif
#ifdef HAVE_REMOTE_LCD
remote_backlight_on,
remote_backlight_off,
remote_backlight_set_timeout,
#if CONFIG_CHARGING
remote_backlight_set_timeout_plugged,
#endif
#endif /* HAVE_REMOTE_LCD */
/* list */
gui_synclist_init,
gui_synclist_set_nb_items,
@ -358,6 +369,14 @@ static const struct plugin_api rockbox_api = {
simplelist_info_init,
simplelist_show_list,
/* action handling */
get_custom_action,
get_action,
#ifdef HAVE_TOUCHSCREEN
action_get_touchscreen_press,
#endif
action_userabort,
/* button */
button_get,
button_get_w_tmo,
@ -426,6 +445,11 @@ static const struct plugin_api rockbox_api = {
/* browsing */
browse_context_init,
rockbox_browse,
tree_get_context,
tree_get_entries,
tree_get_entry_at,
set_current_file,
set_dirfilter,
/* talking */
talk_id,
@ -464,8 +488,14 @@ static const struct plugin_api rockbox_api = {
mutex_lock,
mutex_unlock,
#endif
#ifdef HAVE_SEMAPHORE_OBJECTS
semaphore_init,
semaphore_wait,
semaphore_release,
#endif
reset_poweroff_timer,
set_sleeptimer_duration, /*stub*/
get_sleep_timer, /*stub*/
#if (CONFIG_PLATFORM & PLATFORM_NATIVE)
system_memory_guard,
&cpu_frequency,
@ -507,10 +537,7 @@ static const struct plugin_api rockbox_api = {
queue_send,
queue_reply,
#endif
usb_acknowledge,
#ifdef USB_ENABLE_HID
usb_hid_send,
#endif
#ifdef RB_PROFILE
profile_thread,
profstop,
@ -578,6 +605,7 @@ static const struct plugin_api rockbox_api = {
/* sound */
sound_set,
sound_current, /*stub*/
sound_default,
sound_min,
sound_max,
@ -586,6 +614,10 @@ static const struct plugin_api rockbox_api = {
#ifdef AUDIOHW_HAVE_EQ
sound_enum_hw_eq_band_setting,
#endif
#if ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) || \
(CONFIG_CODEC == SWCODEC)) && defined (HAVE_PITCHCONTROL)
sound_set_pitch,
#endif
#if (CONFIG_PLATFORM & PLATFORM_NATIVE)
mp3_play_data,
mp3_play_pause,
@ -650,6 +682,37 @@ static const struct plugin_api rockbox_api = {
system_sound_play,
keyclick_click,
#endif /* CONFIG_CODEC == SWCODEC */
#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
peak_meter_scale_value,
peak_meter_set_use_dbfs,
peak_meter_get_use_dbfs,
#endif
/* metadata */
get_metadata,
mp3info,
count_mp3_frames,
create_xing_header,
find_next_frame,
#ifdef HAVE_TAGCACHE
tagcache_search,
tagcache_search_set_uniqbuf,
tagcache_search_add_filter,
tagcache_get_next,
tagcache_retrieve,
tagcache_search_finish,
tagcache_get_numeric,
#if defined(HAVE_TC_RAMCACHE) && defined(HAVE_DIRCACHE)
tagcache_fill_tags,
#endif
#endif /* HAVE_TAGCACHE */
#ifdef HAVE_ALBUMART
search_albumart_files,
#endif
/* playback control */
playlist_amount,
playlist_resume,
@ -677,10 +740,6 @@ static const struct plugin_api rockbox_api = {
#if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)
mpeg_get_last_header,
#endif
#if ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) || \
(CONFIG_CODEC == SWCODEC)) && defined (HAVE_PITCHCONTROL)
sound_set_pitch,
#endif
#if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)
/* MAS communication */
@ -722,14 +781,6 @@ static const struct plugin_api rockbox_api = {
set_color,
#endif
/* action handling */
get_custom_action,
get_action,
#ifdef HAVE_TOUCHSCREEN
action_get_touchscreen_press,
#endif
action_userabort,
/* power */
battery_level,
battery_level_safe,
@ -741,8 +792,12 @@ static const struct plugin_api rockbox_api = {
charging_state,
# endif
#endif
/* usb */
usb_inserted,
usb_acknowledge,
#ifdef USB_ENABLE_HID
usb_hid_send,
#endif
/* misc */
#if (CONFIG_PLATFORM & PLATFORM_NATIVE)
__errno,
@ -757,14 +812,7 @@ static const struct plugin_api rockbox_api = {
#if CONFIG_RTC
mktime,
#endif
plugin_get_buffer,
plugin_get_audio_buffer, /* defined in plugin.c */
plugin_release_audio_buffer, /* defined in plugin.c */
plugin_tsr, /* defined in plugin.c */
plugin_get_current_filename,
#ifdef PLUGIN_USE_IRAM
audio_hard_stop,
#endif
#if defined(DEBUG) || defined(SIMULATOR)
debugf,
#endif
@ -781,16 +829,7 @@ static const struct plugin_api rockbox_api = {
remove_array_ptr,
round_value_to_list32,
#endif /* CONFIG_CODEC == SWCODEC */
get_metadata,
mp3info,
count_mp3_frames,
create_xing_header,
find_next_frame,
#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
peak_meter_scale_value,
peak_meter_set_use_dbfs,
peak_meter_get_use_dbfs,
#endif
#ifdef HAVE_LCD_BITMAP
read_bmp_file,
read_bmp_fd,
@ -801,11 +840,6 @@ static const struct plugin_api rockbox_api = {
screen_dump_set_hook,
#endif
show_logo,
tree_get_context,
tree_get_entries,
tree_get_entry_at,
set_current_file,
set_dirfilter,
#ifdef HAVE_WHEEL_POSITION
wheel_status,
@ -819,27 +853,15 @@ static const struct plugin_api rockbox_api = {
detect_flashed_romimage,
#endif
led,
#ifdef HAVE_TAGCACHE
tagcache_search,
tagcache_search_set_uniqbuf,
tagcache_search_add_filter,
tagcache_get_next,
tagcache_retrieve,
tagcache_search_finish,
tagcache_get_numeric,
#if defined(HAVE_TC_RAMCACHE) && defined(HAVE_DIRCACHE)
tagcache_fill_tags,
#endif
#endif
#ifdef HAVE_ALBUMART
search_albumart_files,
#endif
#ifdef HAVE_SEMAPHORE_OBJECTS
semaphore_init,
semaphore_wait,
semaphore_release,
/*plugin*/
plugin_get_buffer,
plugin_get_audio_buffer, /* defined in plugin.c */
plugin_release_audio_buffer, /* defined in plugin.c */
plugin_tsr, /* defined in plugin.c */
plugin_get_current_filename,
#ifdef PLUGIN_USE_IRAM
audio_hard_stop,
#endif
/* new stuff at the end, sort into place next time
@ -1060,3 +1082,9 @@ char *plugin_get_current_filename(void)
{
return current_plugin;
}
int sound_current(int setting) /*stub*/
{
(void) setting;
return 0;
}

View File

@ -189,13 +189,14 @@ enum plugin_status {
version
*/
struct plugin_api {
/* let's put these at the top */
const char *rbversion;
struct user_settings* global_settings;
struct system_status *global_status;
unsigned char **language_strings;
/* lcd */
void (*splash)(int ticks, const char *str);
void (*splashf)(int ticks, const char *fmt, ...) ATTRIBUTE_PRINTF(2, 3);
#ifdef HAVE_LCD_CONTRAST
void (*lcd_set_contrast)(int x);
#endif
@ -307,27 +308,6 @@ struct plugin_api {
int min_shown, int max_shown,
unsigned flags);
#endif /* HAVE_LCD_BITMAP */
/* backlight */
/* The backlight_* functions must be present in the API regardless whether
* HAVE_BACKLIGHT is defined or not. The reason is that the stock Ondio has
* no backlight but can be modded to have backlight (it's prepared on the
* PCB). This makes backlight an all-target feature API wise, and keeps API
* compatible between stock and modded Ondio.
* For OLED targets like the Sansa Clip, the backlight_* functions control
* the display enable, which has essentially the same effect. */
void (*backlight_on)(void);
void (*backlight_off)(void);
void (*backlight_set_timeout)(int index);
#ifdef HAVE_BACKLIGHT_BRIGHTNESS
void (*backlight_set_brightness)(int val);
#endif /* HAVE_BACKLIGHT_BRIGHTNESS */
#if CONFIG_CHARGING
void (*backlight_set_timeout_plugged)(int index);
#endif
bool (*is_backlight_on)(bool ignore_always_off);
void (*splash)(int ticks, const char *str);
void (*splashf)(int ticks, const char *fmt, ...) ATTRIBUTE_PRINTF(2, 3);
#ifdef HAVE_REMOTE_LCD
/* remote lcd */
@ -355,16 +335,7 @@ struct plugin_api {
fb_remote_data* lcd_remote_framebuffer;
void (*lcd_remote_update)(void);
void (*lcd_remote_update_rect)(int x, int y, int width, int height);
void (*remote_backlight_on)(void);
void (*remote_backlight_off)(void);
void (*remote_backlight_set_timeout)(int index);
#if CONFIG_CHARGING
void (*remote_backlight_set_timeout_plugged)(int index);
#endif
#endif /* HAVE_REMOTE_LCD */
struct screen* screens[NB_SCREENS];
#if defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1)
#if (LCD_REMOTE_DEPTH > 1)
void (*lcd_remote_set_foreground)(unsigned foreground);
unsigned (*lcd_remote_get_foreground)(void);
void (*lcd_remote_set_background)(unsigned background);
@ -375,6 +346,9 @@ struct plugin_api {
void (*lcd_remote_bitmap)(const fb_remote_data *src, int x, int y,
int width, int height);
#endif
#endif /* HAVE_REMOTE_LCD */
struct screen* screens[NB_SCREENS];
void (*viewport_set_defaults)(struct viewport *vp,
const enum screen_type screen);
#ifdef HAVE_LCD_BITMAP
@ -384,6 +358,36 @@ struct plugin_api {
void (*viewport_set_fullscreen)(struct viewport *vp,
const enum screen_type screen);
#endif
/* lcd backlight */
/* The backlight_* functions must be present in the API regardless whether
* HAVE_BACKLIGHT is defined or not. The reason is that the stock Ondio has
* no backlight but can be modded to have backlight (it's prepared on the
* PCB). This makes backlight an all-target feature API wise, and keeps API
* compatible between stock and modded Ondio.
* For OLED targets like the Sansa Clip, the backlight_* functions control
* the display enable, which has essentially the same effect. */
bool (*is_backlight_on)(bool ignore_always_off);
void (*backlight_on)(void);
void (*backlight_off)(void);
void (*backlight_set_timeout)(int index);
#ifdef HAVE_BACKLIGHT_BRIGHTNESS
void (*backlight_set_brightness)(int val);
#endif /* HAVE_BACKLIGHT_BRIGHTNESS */
#if CONFIG_CHARGING
void (*backlight_set_timeout_plugged)(int index);
#endif
#ifdef HAVE_REMOTE_LCD
void (*remote_backlight_on)(void);
void (*remote_backlight_off)(void);
void (*remote_backlight_set_timeout)(int index);
#if CONFIG_CHARGING
void (*remote_backlight_set_timeout_plugged)(int index);
#endif
#endif /* HAVE_REMOTE_LCD */
/* list */
void (*gui_synclist_init)(struct gui_synclist * lists,
list_get_name callback_get_item_name, void * data,
@ -413,6 +417,15 @@ struct plugin_api {
int count, void* data);
bool (*simplelist_show_list)(struct simplelist_info *info);
/* action handling */
int (*get_custom_action)(int context,int timeout,
const struct button_mapping* (*get_context_map)(int));
int (*get_action)(int context, int timeout);
#ifdef HAVE_TOUCHSCREEN
int (*action_get_touchscreen_press)(short *x, short *y);
#endif
bool (*action_userabort)(int timeout);
/* button */
long (*button_get)(bool block);
long (*button_get_w_tmo)(int ticks);
@ -486,6 +499,12 @@ struct plugin_api {
char *title, enum themable_icons icon,
const char *root, const char *selected);
int (*rockbox_browse)(struct browse_context *browse);
struct tree_context* (*tree_get_context)(void);
struct entry* (*tree_get_entries)(struct tree_context* t);
struct entry* (*tree_get_entry_at)(struct tree_context* t, int index);
void (*set_current_file)(const char* path);
void (*set_dirfilter)(int l_dirfilter);
/* talking */
int (*talk_id)(int32_t id, bool enqueue);
@ -532,8 +551,14 @@ struct plugin_api {
void (*mutex_lock)(struct mutex *m);
void (*mutex_unlock)(struct mutex *m);
#endif
#ifdef HAVE_SEMAPHORE_OBJECTS
void (*semaphore_init)(struct semaphore *s, int max, int start);
int (*semaphore_wait)(struct semaphore *s, int timeout);
void (*semaphore_release)(struct semaphore *s);
#endif
void (*reset_poweroff_timer)(void);
void (*set_sleeptimer_duration)(int minutes);
int (*get_sleep_timer)(void);
#if (CONFIG_PLATFORM & PLATFORM_NATIVE)
int (*system_memory_guard)(int newmode);
long *cpu_frequency;
@ -582,10 +607,6 @@ struct plugin_api {
void (*queue_reply)(struct event_queue *q, intptr_t retval);
#endif /* CONFIG_CODEC == SWCODEC */
void (*usb_acknowledge)(long id);
#ifdef USB_ENABLE_HID
void (*usb_hid_send)(usage_page_t usage_page, int id);
#endif
#ifdef RB_PROFILE
void (*profile_thread)(void);
void (*profstop)(void);
@ -658,6 +679,7 @@ struct plugin_api {
/* sound */
void (*sound_set)(int setting, int value);
int (*sound_current)(int setting); /*stub*/
int (*sound_default)(int setting);
int (*sound_min)(int setting);
int (*sound_max)(int setting);
@ -667,6 +689,10 @@ struct plugin_api {
int (*sound_enum_hw_eq_band_setting)(unsigned int band,
unsigned int band_setting);
#endif /* AUDIOHW_HAVE_EQ */
#if ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) || \
(CONFIG_CODEC == SWCODEC)) && defined (HAVE_PITCHCONTROL)
void (*sound_set_pitch)(int32_t pitch);
#endif
#if (CONFIG_PLATFORM & PLATFORM_NATIVE)
void (*mp3_play_data)(const void* start, size_t size,
mp3_play_callback_t get_more);
@ -743,7 +769,48 @@ struct plugin_api {
void (*pcmbuf_fade)(bool fade, bool in);
void (*system_sound_play)(enum system_sound sound);
void (*keyclick_click)(bool rawbutton, int action);
#endif /* CONFIG_CODEC == SWCODC */
#endif /* CONFIG_CODEC == SWCODEC */
#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
unsigned short (*peak_meter_scale_value)(unsigned short val,
int meterwidth);
void (*peak_meter_set_use_dbfs)(bool use);
bool (*peak_meter_get_use_dbfs)(void);
#endif
/* metadata */
bool (*get_metadata)(struct mp3entry* id3, int fd, const char* trackname);
bool (*mp3info)(struct mp3entry *entry, const char *filename);
int (*count_mp3_frames)(int fd, int startpos, int filesize,
void (*progressfunc)(int),
unsigned char* buf, size_t buflen);
int (*create_xing_header)(int fd, long startpos, long filesize,
unsigned char *buf, unsigned long num_frames,
unsigned long rec_time, unsigned long header_template,
void (*progressfunc)(int), bool generate_toc,
unsigned char* tempbuf, size_t tempbuf_len);
unsigned long (*find_next_frame)(int fd, long *offset,
long max_offset, unsigned long reference_header);
#ifdef HAVE_TAGCACHE
bool (*tagcache_search)(struct tagcache_search *tcs, int tag);
void (*tagcache_search_set_uniqbuf)(struct tagcache_search *tcs,
void *buffer, long length);
bool (*tagcache_search_add_filter)(struct tagcache_search *tcs,
int tag, int seek);
bool (*tagcache_get_next)(struct tagcache_search *tcs);
bool (*tagcache_retrieve)(struct tagcache_search *tcs, int idxid,
int tag, char *buf, long size);
void (*tagcache_search_finish)(struct tagcache_search *tcs);
long (*tagcache_get_numeric)(const struct tagcache_search *tcs, int tag);
#if defined(HAVE_TC_RAMCACHE) && defined(HAVE_DIRCACHE)
bool (*tagcache_fill_tags)(struct mp3entry *id3, const char *filename);
#endif
#endif /* HAVE_TAGCACHE */
#ifdef HAVE_ALBUMART
bool (*search_albumart_files)(const struct mp3entry *id3, const char *size_string,
char *buf, int buflen);
#endif
/* playback control */
int (*playlist_amount)(void);
@ -777,10 +844,6 @@ struct plugin_api {
#if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)
unsigned long (*mpeg_get_last_header)(void);
#endif
#if ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) || \
(CONFIG_CODEC == SWCODEC)) && defined (HAVE_PITCHCONTROL)
void (*sound_set_pitch)(int32_t pitch);
#endif
/* MAS communication */
#if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)
@ -795,7 +858,7 @@ struct plugin_api {
void (*i2c_end)(void);
int (*i2c_write)(int address, const unsigned char* buf, int count );
#endif
#endif
#endif /* !SIMULATOR && CONFIG_CODEC != SWCODEC */
/* menu */
struct menu_table *(*root_menu_get_options)(int *nb_options);
@ -805,7 +868,7 @@ struct plugin_api {
char* (*root_menu_write_to_cfg)(void* setting, char*buf, int buf_len);
void (*root_menu_load_from_cfg)(void* setting, char *value);
/* scroll bar */
/* statusbars */
struct gui_syncstatusbar *statusbars;
void (*gui_syncstatusbar_draw)(struct gui_syncstatusbar * bars, bool force_redraw);
@ -838,14 +901,6 @@ struct plugin_api {
bool (*set_color)(struct screen *display, char *title,
unsigned *color, unsigned banned_color);
#endif
/* action handling */
int (*get_custom_action)(int context,int timeout,
const struct button_mapping* (*get_context_map)(int));
int (*get_action)(int context, int timeout);
#ifdef HAVE_TOUCHSCREEN
int (*action_get_touchscreen_press)(short *x, short *y);
#endif
bool (*action_userabort)(int timeout);
/* power */
int (*battery_level)(void);
@ -860,7 +915,10 @@ struct plugin_api {
#endif
/* usb */
bool (*usb_inserted)(void);
void (*usb_acknowledge)(long id);
#ifdef USB_ENABLE_HID
void (*usb_hid_send)(usage_page_t usage_page, int id);
#endif
/* misc */
#if (CONFIG_PLATFORM & PLATFORM_NATIVE)
int * (*__errno)(void);
@ -876,14 +934,7 @@ struct plugin_api {
#if CONFIG_RTC
time_t (*mktime)(struct tm *t);
#endif
void* (*plugin_get_buffer)(size_t *buffer_size);
void* (*plugin_get_audio_buffer)(size_t *buffer_size);
void (*plugin_release_audio_buffer)(void);
void (*plugin_tsr)(bool (*exit_callback)(bool reenter));
char* (*plugin_get_current_filename)(void);
#ifdef PLUGIN_USE_IRAM
void (*audio_hard_stop)(void);
#endif
#if defined(DEBUG) || defined(SIMULATOR)
void (*debugf)(const char *fmt, ...) ATTRIBUTE_PRINTF(1, 2);
#endif
@ -904,25 +955,7 @@ struct plugin_api {
int count,
bool signd);
#endif /* CONFIG_CODEC == SWCODEC */
bool (*get_metadata)(struct mp3entry* id3, int fd, const char* trackname);
bool (*mp3info)(struct mp3entry *entry, const char *filename);
int (*count_mp3_frames)(int fd, int startpos, int filesize,
void (*progressfunc)(int),
unsigned char* buf, size_t buflen);
int (*create_xing_header)(int fd, long startpos, long filesize,
unsigned char *buf, unsigned long num_frames,
unsigned long rec_time, unsigned long header_template,
void (*progressfunc)(int), bool generate_toc,
unsigned char* tempbuf, size_t tempbuf_len);
unsigned long (*find_next_frame)(int fd, long *offset,
long max_offset, unsigned long reference_header);
#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
unsigned short (*peak_meter_scale_value)(unsigned short val,
int meterwidth);
void (*peak_meter_set_use_dbfs)(bool use);
bool (*peak_meter_get_use_dbfs)(void);
#endif
#ifdef HAVE_LCD_BITMAP
int (*read_bmp_file)(const char* filename, struct bitmap *bm, int maxsize,
int format, const struct custom_format *cformat);
@ -937,12 +970,6 @@ struct plugin_api {
void (*screen_dump_set_hook)(void (*hook)(int fh));
#endif
int (*show_logo)(void);
struct tree_context* (*tree_get_context)(void);
struct entry* (*tree_get_entries)(struct tree_context* t);
struct entry* (*tree_get_entry_at)(struct tree_context* t, int index);
void (*set_current_file)(const char* path);
void (*set_dirfilter)(int l_dirfilter);
#ifdef HAVE_WHEEL_POSITION
int (*wheel_status)(void);
@ -958,32 +985,16 @@ struct plugin_api {
void (*led)(bool on);
#ifdef HAVE_TAGCACHE
bool (*tagcache_search)(struct tagcache_search *tcs, int tag);
void (*tagcache_search_set_uniqbuf)(struct tagcache_search *tcs,
void *buffer, long length);
bool (*tagcache_search_add_filter)(struct tagcache_search *tcs,
int tag, int seek);
bool (*tagcache_get_next)(struct tagcache_search *tcs);
bool (*tagcache_retrieve)(struct tagcache_search *tcs, int idxid,
int tag, char *buf, long size);
void (*tagcache_search_finish)(struct tagcache_search *tcs);
long (*tagcache_get_numeric)(const struct tagcache_search *tcs, int tag);
#if defined(HAVE_TC_RAMCACHE) && defined(HAVE_DIRCACHE)
bool (*tagcache_fill_tags)(struct mp3entry *id3, const char *filename);
#endif
/*plugin*/
void* (*plugin_get_buffer)(size_t *buffer_size);
void* (*plugin_get_audio_buffer)(size_t *buffer_size);
void (*plugin_release_audio_buffer)(void);
void (*plugin_tsr)(bool (*exit_callback)(bool reenter));
char* (*plugin_get_current_filename)(void);
#ifdef PLUGIN_USE_IRAM
void (*audio_hard_stop)(void);
#endif
#ifdef HAVE_ALBUMART
bool (*search_albumart_files)(const struct mp3entry *id3, const char *size_string,
char *buf, int buflen);
#endif
#ifdef HAVE_SEMAPHORE_OBJECTS
void (*semaphore_init)(struct semaphore *s, int max, int start);
int (*semaphore_wait)(struct semaphore *s, int timeout);
void (*semaphore_release)(struct semaphore *s);
#endif
/* new stuff at the end, sort into place next time
the API gets incompatible */