2003-06-29 16:33:04 +00:00
|
|
|
/***************************************************************************
|
|
|
|
* __________ __ ___.
|
|
|
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
|
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
|
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
|
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
|
|
* \/ \/ \/ \/ \/
|
|
|
|
* $Id$
|
|
|
|
*
|
2009-03-23 17:08:46 +00:00
|
|
|
* Copyright (C) 2002 Björn Stenberg
|
2003-06-29 16:33:04 +00:00
|
|
|
*
|
2008-06-28 18:10:04 +00:00
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU General Public License
|
|
|
|
* as published by the Free Software Foundation; either version 2
|
|
|
|
* of the License, or (at your option) any later version.
|
2003-06-29 16:33:04 +00:00
|
|
|
*
|
|
|
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
|
|
* KIND, either express or implied.
|
|
|
|
*
|
|
|
|
****************************************************************************/
|
|
|
|
#ifndef _PLUGIN_H_
|
|
|
|
#define _PLUGIN_H_
|
|
|
|
|
|
|
|
/* instruct simulator code to not redefine any symbols when compiling plugins.
|
|
|
|
(the PLUGIN macro is defined in apps/plugins/Makefile) */
|
|
|
|
#ifdef PLUGIN
|
|
|
|
#define NO_REDEFINES_PLEASE
|
|
|
|
#endif
|
|
|
|
|
2007-04-10 14:18:30 +00:00
|
|
|
#include <stdbool.h>
|
2010-05-06 21:04:40 +00:00
|
|
|
#include <inttypes.h>
|
2006-11-11 05:11:05 +00:00
|
|
|
#include <sys/types.h>
|
|
|
|
#include <stdarg.h>
|
2003-06-29 16:33:04 +00:00
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
2008-08-12 20:11:18 +00:00
|
|
|
#include <string.h>
|
2010-05-06 21:04:40 +00:00
|
|
|
#include "string-extra.h"
|
2010-07-25 14:44:29 +00:00
|
|
|
#include "gcc_extensions.h"
|
2008-05-19 14:37:16 +00:00
|
|
|
|
2012-01-22 19:33:37 +00:00
|
|
|
|
|
|
|
|
|
|
|
/* on some platforms strcmp() seems to be a tricky define which
|
|
|
|
* breaks if we write down strcmp's prototype */
|
|
|
|
#undef strcmp
|
|
|
|
#undef strncmp
|
|
|
|
#undef strchr
|
|
|
|
|
2009-07-14 13:57:45 +00:00
|
|
|
char* strncpy(char *, const char *, size_t);
|
2008-05-19 14:37:16 +00:00
|
|
|
void* plugin_get_buffer(size_t *buffer_size);
|
|
|
|
|
|
|
|
#ifndef __PCTOOL__
|
2003-06-29 16:33:04 +00:00
|
|
|
#include "config.h"
|
2006-11-11 05:11:05 +00:00
|
|
|
#include "system.h"
|
2003-06-29 16:33:04 +00:00
|
|
|
#include "dir.h"
|
2007-11-08 05:17:20 +00:00
|
|
|
#include "general.h"
|
2003-06-29 16:33:04 +00:00
|
|
|
#include "kernel.h"
|
2006-11-11 05:11:05 +00:00
|
|
|
#include "thread.h"
|
2003-06-29 16:33:04 +00:00
|
|
|
#include "button.h"
|
2006-08-15 12:27:07 +00:00
|
|
|
#include "action.h"
|
2010-09-09 16:17:21 +00:00
|
|
|
#include "load_code.h"
|
2006-01-25 18:29:56 +00:00
|
|
|
#include "usb.h"
|
2003-06-29 16:33:04 +00:00
|
|
|
#include "font.h"
|
|
|
|
#include "lcd.h"
|
2008-10-15 06:38:51 +00:00
|
|
|
#include "metadata.h"
|
2006-11-11 05:11:05 +00:00
|
|
|
#include "sound.h"
|
2003-07-20 21:29:16 +00:00
|
|
|
#include "mpeg.h"
|
2005-04-04 12:06:29 +00:00
|
|
|
#include "audio.h"
|
2004-01-30 22:30:40 +00:00
|
|
|
#include "mp3_playback.h"
|
2006-11-11 05:11:05 +00:00
|
|
|
#include "talk.h"
|
2006-01-18 20:54:13 +00:00
|
|
|
#ifdef RB_PROFILE
|
|
|
|
#include "profile.h"
|
|
|
|
#endif
|
2005-09-02 05:39:09 +00:00
|
|
|
#include "misc.h"
|
2010-08-01 16:15:27 +00:00
|
|
|
#include "filefuncs.h"
|
2006-03-26 23:00:24 +00:00
|
|
|
#if (CONFIG_CODEC == SWCODEC)
|
2011-06-29 06:37:04 +00:00
|
|
|
#include "pcm_mixer.h"
|
2011-12-04 18:19:39 +00:00
|
|
|
#include "dsp-util.h"
|
2012-04-29 21:31:30 +00:00
|
|
|
#include "dsp_core.h"
|
|
|
|
#include "dsp_proc_settings.h"
|
2007-05-07 17:23:31 +00:00
|
|
|
#include "codecs.h"
|
|
|
|
#include "playback.h"
|
2009-10-31 19:17:36 +00:00
|
|
|
#include "codec_thread.h"
|
2006-11-11 05:11:05 +00:00
|
|
|
#ifdef HAVE_RECORDING
|
|
|
|
#include "recording.h"
|
|
|
|
#endif
|
2006-03-26 23:00:24 +00:00
|
|
|
#else
|
2010-10-31 21:09:34 +00:00
|
|
|
#include "mas35xx.h"
|
2006-11-11 05:11:05 +00:00
|
|
|
#endif /* CONFIG_CODEC == SWCODEC */
|
2004-01-30 22:30:40 +00:00
|
|
|
#include "settings.h"
|
2005-07-26 20:01:11 +00:00
|
|
|
#include "timer.h"
|
2004-06-19 09:36:03 +00:00
|
|
|
#include "playlist.h"
|
2004-07-08 13:14:44 +00:00
|
|
|
#ifdef HAVE_LCD_BITMAP
|
2009-02-10 23:43:37 +00:00
|
|
|
#include "screendump.h"
|
2006-11-19 14:11:42 +00:00
|
|
|
#include "scrollbar.h"
|
2009-05-01 23:24:23 +00:00
|
|
|
#include "jpeg_load.h"
|
2008-12-26 07:03:22 +00:00
|
|
|
#include "../recorder/bmp.h"
|
2004-07-08 13:14:44 +00:00
|
|
|
#endif
|
2007-05-08 11:55:43 +00:00
|
|
|
#include "statusbar.h"
|
2005-09-22 08:54:48 +00:00
|
|
|
#include "menu.h"
|
2005-12-06 13:27:15 +00:00
|
|
|
#include "rbunicode.h"
|
2006-04-03 08:51:08 +00:00
|
|
|
#include "list.h"
|
2006-11-11 05:11:05 +00:00
|
|
|
#include "tree.h"
|
2007-06-18 13:37:57 +00:00
|
|
|
#include "color_picker.h"
|
2011-08-30 16:48:36 +00:00
|
|
|
#include "buflib.h"
|
2007-12-09 18:48:02 +00:00
|
|
|
#include "buffering.h"
|
|
|
|
#include "tagcache.h"
|
2008-03-26 03:35:24 +00:00
|
|
|
#include "viewport.h"
|
2008-08-14 22:35:00 +00:00
|
|
|
#include "ata_idle_notify.h"
|
2008-10-26 11:44:21 +00:00
|
|
|
#include "settings_list.h"
|
2009-03-08 20:28:15 +00:00
|
|
|
#include "timefuncs.h"
|
2009-11-22 18:48:07 +00:00
|
|
|
#include "crc32.h"
|
2011-12-25 21:04:40 +00:00
|
|
|
#include "rbpaths.h"
|
2007-12-09 19:14:31 +00:00
|
|
|
|
|
|
|
#ifdef HAVE_ALBUMART
|
2007-12-09 18:48:02 +00:00
|
|
|
#include "albumart.h"
|
2007-12-09 19:14:31 +00:00
|
|
|
#endif
|
2003-07-24 09:35:32 +00:00
|
|
|
|
2005-04-15 12:55:31 +00:00
|
|
|
#ifdef HAVE_REMOTE_LCD
|
|
|
|
#include "lcd-remote.h"
|
|
|
|
#endif
|
|
|
|
|
2008-07-07 14:04:18 +00:00
|
|
|
#include "yesno.h"
|
|
|
|
|
2010-12-28 14:18:37 +00:00
|
|
|
#include "filetypes.h"
|
|
|
|
|
2009-09-30 10:06:04 +00:00
|
|
|
#ifdef USB_ENABLE_HID
|
2009-07-18 12:58:29 +00:00
|
|
|
#include "usbstack/usb_hid_usage_tables.h"
|
|
|
|
#endif
|
|
|
|
|
2010-05-06 21:04:40 +00:00
|
|
|
|
2004-06-10 13:29:52 +00:00
|
|
|
#ifdef PLUGIN
|
2005-06-18 19:19:12 +00:00
|
|
|
|
2004-06-10 13:29:52 +00:00
|
|
|
#if defined(DEBUG) || defined(SIMULATOR)
|
2005-02-22 12:19:12 +00:00
|
|
|
#undef DEBUGF
|
2004-08-30 19:52:45 +00:00
|
|
|
#define DEBUGF rb->debugf
|
2005-02-22 12:19:12 +00:00
|
|
|
#undef LDEBUGF
|
2004-06-10 13:29:52 +00:00
|
|
|
#define LDEBUGF rb->debugf
|
|
|
|
#else
|
2010-05-18 18:45:10 +00:00
|
|
|
#undef DEBUGF
|
|
|
|
#define DEBUGF(...) do { } while(0)
|
|
|
|
#undef LDEBUGF
|
|
|
|
#define LDEBUGF(...) do { } while(0)
|
2004-06-10 13:29:52 +00:00
|
|
|
#endif
|
2005-06-18 19:19:12 +00:00
|
|
|
|
|
|
|
#ifdef ROCKBOX_HAS_LOGF
|
|
|
|
#undef LOGF
|
|
|
|
#define LOGF rb->logf
|
|
|
|
#else
|
|
|
|
#define LOGF(...)
|
|
|
|
#endif
|
|
|
|
|
2004-06-10 13:29:52 +00:00
|
|
|
#endif
|
|
|
|
|
2006-01-15 18:20:18 +00:00
|
|
|
#define PLUGIN_MAGIC 0x526F634B /* RocK */
|
|
|
|
|
2003-06-29 16:33:04 +00:00
|
|
|
/* increase this every time the api struct changes */
|
2012-05-03 00:53:07 +00:00
|
|
|
#define PLUGIN_API_VERSION 220
|
2003-07-25 23:04:59 +00:00
|
|
|
|
|
|
|
/* update this to latest version if a change to the api struct breaks
|
2006-05-01 05:45:18 +00:00
|
|
|
backwards compatibility (and please take the opportunity to sort in any
|
2004-02-03 23:56:25 +00:00
|
|
|
new function which are "waiting" at the end of the function table) */
|
2012-05-03 00:53:07 +00:00
|
|
|
#define PLUGIN_MIN_API_VERSION 220
|
2003-06-29 16:33:04 +00:00
|
|
|
|
|
|
|
/* plugin return codes */
|
2010-08-24 14:30:46 +00:00
|
|
|
/* internal returns start at 0x100 to make exit(1..255) work */
|
|
|
|
#define INTERNAL_PLUGIN_RETVAL_START 0x100
|
2003-06-29 16:33:04 +00:00
|
|
|
enum plugin_status {
|
2010-08-24 14:30:46 +00:00
|
|
|
PLUGIN_OK = 0, /* PLUGIN_OK == EXIT_SUCCESS */
|
|
|
|
/* 1...255 reserved for exit() */
|
|
|
|
PLUGIN_USB_CONNECTED = INTERNAL_PLUGIN_RETVAL_START,
|
|
|
|
PLUGIN_POWEROFF,
|
2009-07-05 22:12:42 +00:00
|
|
|
PLUGIN_GOTO_WPS,
|
2006-01-15 18:20:18 +00:00
|
|
|
PLUGIN_ERROR = -1,
|
2003-06-29 16:33:04 +00:00
|
|
|
};
|
|
|
|
|
2003-07-25 23:04:59 +00:00
|
|
|
/* NOTE: To support backwards compatibility, only add new functions at
|
|
|
|
the end of the structure. Every time you add a new function,
|
|
|
|
remember to increase PLUGIN_API_VERSION. If you make changes to the
|
|
|
|
existing APIs then also update PLUGIN_MIN_API_VERSION to current
|
|
|
|
version
|
|
|
|
*/
|
2003-06-29 16:33:04 +00:00
|
|
|
struct plugin_api {
|
|
|
|
|
|
|
|
/* lcd */
|
2009-03-30 16:06:02 +00:00
|
|
|
|
|
|
|
#ifdef HAVE_LCD_CONTRAST
|
2005-06-24 22:33:21 +00:00
|
|
|
void (*lcd_set_contrast)(int x);
|
2009-03-30 16:06:02 +00:00
|
|
|
#endif
|
2007-03-31 09:58:49 +00:00
|
|
|
void (*lcd_update)(void);
|
2003-06-29 16:33:04 +00:00
|
|
|
void (*lcd_clear_display)(void);
|
2007-03-26 07:52:13 +00:00
|
|
|
int (*lcd_getstringsize)(const unsigned char *str, int *w, int *h);
|
|
|
|
void (*lcd_putsxy)(int x, int y, const unsigned char *string);
|
2010-08-30 20:47:53 +00:00
|
|
|
void (*lcd_putsxyf)(int x, int y, const unsigned char *fmt, ...);
|
2004-08-01 21:50:57 +00:00
|
|
|
void (*lcd_puts)(int x, int y, const unsigned char *string);
|
2010-08-30 20:47:53 +00:00
|
|
|
void (*lcd_putsf)(int x, int y, const unsigned char *fmt, ...);
|
2004-08-16 23:37:23 +00:00
|
|
|
void (*lcd_puts_scroll)(int x, int y, const unsigned char* string);
|
2003-06-29 16:33:04 +00:00
|
|
|
void (*lcd_stop_scroll)(void);
|
|
|
|
#ifdef HAVE_LCD_CHARCELLS
|
2007-03-26 07:52:13 +00:00
|
|
|
void (*lcd_define_pattern)(unsigned long ucs, const char *pattern);
|
|
|
|
unsigned long (*lcd_get_locked_pattern)(void);
|
|
|
|
void (*lcd_unlock_pattern)(unsigned long ucs);
|
|
|
|
void (*lcd_putc)(int x, int y, unsigned long ucs);
|
|
|
|
void (*lcd_put_cursor)(int x, int y, unsigned long ucs);
|
2004-07-27 14:10:48 +00:00
|
|
|
void (*lcd_remove_cursor)(void);
|
2007-04-03 18:06:13 +00:00
|
|
|
void (*lcd_icon)(int icon, bool enable);
|
2005-09-02 05:39:09 +00:00
|
|
|
void (*lcd_double_height)(bool on);
|
2008-03-24 00:35:53 +00:00
|
|
|
#else /* HAVE_LCD_BITMAP */
|
|
|
|
fb_data* lcd_framebuffer;
|
2008-03-24 00:45:03 +00:00
|
|
|
void (*lcd_update_rect)(int x, int y, int width, int height);
|
2005-06-24 22:33:21 +00:00
|
|
|
void (*lcd_set_drawmode)(int mode);
|
|
|
|
int (*lcd_get_drawmode)(void);
|
|
|
|
void (*lcd_setfont)(int font);
|
|
|
|
void (*lcd_drawpixel)(int x, int y);
|
|
|
|
void (*lcd_drawline)(int x1, int y1, int x2, int y2);
|
2005-06-28 23:15:47 +00:00
|
|
|
void (*lcd_hline)(int x1, int x2, int y);
|
|
|
|
void (*lcd_vline)(int x, int y1, int y2);
|
|
|
|
void (*lcd_drawrect)(int x, int y, int width, int height);
|
|
|
|
void (*lcd_fillrect)(int x, int y, int width, int height);
|
2005-07-06 22:58:02 +00:00
|
|
|
void (*lcd_mono_bitmap_part)(const unsigned char *src, int src_x, int src_y,
|
|
|
|
int stride, int x, int y, int width, int height);
|
|
|
|
void (*lcd_mono_bitmap)(const unsigned char *src, int x, int y,
|
|
|
|
int width, int height);
|
2005-07-26 20:01:11 +00:00
|
|
|
#if LCD_DEPTH > 1
|
2005-11-16 21:09:23 +00:00
|
|
|
void (*lcd_set_foreground)(unsigned foreground);
|
|
|
|
unsigned (*lcd_get_foreground)(void);
|
|
|
|
void (*lcd_set_background)(unsigned foreground);
|
|
|
|
unsigned (*lcd_get_background)(void);
|
2005-11-14 20:43:49 +00:00
|
|
|
void (*lcd_bitmap_part)(const fb_data *src, int src_x, int src_y,
|
2005-07-26 20:01:11 +00:00
|
|
|
int stride, int x, int y, int width, int height);
|
2005-11-14 20:43:49 +00:00
|
|
|
void (*lcd_bitmap)(const fb_data *src, int x, int y, int width,
|
2005-07-26 20:01:11 +00:00
|
|
|
int height);
|
2007-06-22 09:34:57 +00:00
|
|
|
fb_data* (*lcd_get_backdrop)(void);
|
2006-11-19 14:11:42 +00:00
|
|
|
void (*lcd_set_backdrop)(fb_data* backdrop);
|
2006-02-07 20:38:55 +00:00
|
|
|
#endif
|
|
|
|
#if LCD_DEPTH == 16
|
|
|
|
void (*lcd_bitmap_transparent_part)(const fb_data *src,
|
|
|
|
int src_x, int src_y, int stride,
|
|
|
|
int x, int y, int width, int height);
|
2006-03-05 19:34:54 +00:00
|
|
|
void (*lcd_bitmap_transparent)(const fb_data *src, int x, int y,
|
2006-02-07 20:38:55 +00:00
|
|
|
int width, int height);
|
2009-06-21 14:09:48 +00:00
|
|
|
#if MEMORYSIZE > 2
|
2008-03-24 00:35:53 +00:00
|
|
|
void (*lcd_blit_yuv)(unsigned char * const src[3],
|
|
|
|
int src_x, int src_y, int stride,
|
|
|
|
int x, int y, int width, int height);
|
|
|
|
#if defined(TOSHIBA_GIGABEAT_F) || defined(SANSA_E200) || defined(SANSA_C200) \
|
2009-07-15 22:02:42 +00:00
|
|
|
|| defined(IRIVER_H10) || defined(COWON_D2) || defined(PHILIPS_HDD1630) \
|
2010-03-28 02:41:29 +00:00
|
|
|
|| defined(SANSA_FUZE) || defined(SANSA_E200V2) || defined(SANSA_FUZEV2) \
|
2011-01-11 01:21:31 +00:00
|
|
|
|| defined(TOSHIBA_GIGABEAT_S) || defined(PHILIPS_SA9200)
|
2008-03-24 00:35:53 +00:00
|
|
|
void (*lcd_yuv_set_options)(unsigned options);
|
2005-07-26 20:01:11 +00:00
|
|
|
#endif
|
2009-06-21 14:09:48 +00:00
|
|
|
#endif /* MEMORYSIZE > 2 */
|
2010-06-21 16:53:00 +00:00
|
|
|
#elif (LCD_DEPTH < 4) && (CONFIG_PLATFORM & PLATFORM_NATIVE)
|
2008-03-24 00:35:53 +00:00
|
|
|
void (*lcd_blit_mono)(const unsigned char *data, int x, int by, int width,
|
|
|
|
int bheight, int stride);
|
|
|
|
void (*lcd_blit_grey_phase)(unsigned char *values, unsigned char *phases,
|
|
|
|
int bx, int by, int bwidth, int bheight,
|
|
|
|
int stride);
|
|
|
|
#endif /* LCD_DEPTH */
|
2009-05-06 04:53:56 +00:00
|
|
|
#if defined(HAVE_LCD_MODES) && (HAVE_LCD_MODES & LCD_MODE_PAL256)
|
|
|
|
void (*lcd_blit_pal256)(unsigned char *src, int src_x, int src_y, int x, int y,
|
|
|
|
int width, int height);
|
|
|
|
void (*lcd_pal256_update_pal)(fb_data *palette);
|
|
|
|
#endif
|
2004-08-01 21:50:57 +00:00
|
|
|
void (*lcd_puts_style)(int x, int y, const unsigned char *str, int style);
|
2004-10-23 09:59:53 +00:00
|
|
|
void (*lcd_puts_scroll_style)(int x, int y, const unsigned char* string,
|
|
|
|
int style);
|
2008-05-15 06:58:36 +00:00
|
|
|
#ifdef HAVE_LCD_INVERT
|
|
|
|
void (*lcd_set_invert_display)(bool yesno);
|
|
|
|
#endif /* HAVE_LCD_INVERT */
|
2009-05-06 04:53:56 +00:00
|
|
|
#if defined(HAVE_LCD_MODES)
|
|
|
|
void (*lcd_set_mode)(int mode);
|
|
|
|
#endif
|
2008-12-25 04:24:47 +00:00
|
|
|
|
2009-03-17 02:43:47 +00:00
|
|
|
#if defined(HAVE_LCD_ENABLE) || defined(HAVE_LCD_SLEEP)
|
2008-06-23 13:20:35 +00:00
|
|
|
struct event_queue *button_queue;
|
|
|
|
#endif
|
2008-03-24 00:35:53 +00:00
|
|
|
unsigned short *(*bidi_l2v)( const unsigned char *str, int orientation );
|
2010-05-24 16:42:32 +00:00
|
|
|
#ifdef HAVE_LCD_BITMAP
|
|
|
|
bool (*is_diacritic)(const unsigned short char_code, bool *is_rtl);
|
|
|
|
#endif
|
2008-03-24 00:35:53 +00:00
|
|
|
const unsigned char *(*font_get_bits)( struct font *pf, unsigned short char_code );
|
2011-09-24 13:19:34 +00:00
|
|
|
int (*font_load)(const char *path);
|
|
|
|
void (*font_unload)(int font_id);
|
2005-06-24 22:33:21 +00:00
|
|
|
struct font* (*font_get)(int font);
|
2005-07-26 20:01:11 +00:00
|
|
|
int (*font_getstringsize)(const unsigned char *str, int *w, int *h,
|
|
|
|
int fontnumber);
|
2006-01-15 18:20:18 +00:00
|
|
|
int (*font_get_width)(struct font* pf, unsigned short char_code);
|
2007-08-06 13:42:52 +00:00
|
|
|
void (*screen_clear_area)(struct screen * display, int xstart, int ystart,
|
|
|
|
int width, int height);
|
2008-03-24 00:35:53 +00:00
|
|
|
void (*gui_scrollbar_draw)(struct screen * screen, int x, int y,
|
|
|
|
int width, int height, int items,
|
|
|
|
int min_shown, int max_shown,
|
|
|
|
unsigned flags);
|
|
|
|
#endif /* HAVE_LCD_BITMAP */
|
2008-12-10 08:57:10 +00:00
|
|
|
const char* (*get_codepage_name)(int cp);
|
2008-03-24 00:35:53 +00:00
|
|
|
|
|
|
|
/* backlight */
|
2008-10-31 20:06:08 +00:00
|
|
|
/* 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. */
|
2004-07-27 14:10:48 +00:00
|
|
|
void (*backlight_on)(void);
|
|
|
|
void (*backlight_off)(void);
|
2004-10-23 09:59:53 +00:00
|
|
|
void (*backlight_set_timeout)(int index);
|
2008-05-15 06:58:36 +00:00
|
|
|
#ifdef HAVE_BACKLIGHT_BRIGHTNESS
|
|
|
|
void (*backlight_set_brightness)(int val);
|
|
|
|
#endif /* HAVE_BACKLIGHT_BRIGHTNESS */
|
2008-04-23 21:15:07 +00:00
|
|
|
|
2007-08-13 22:31:11 +00:00
|
|
|
#if CONFIG_CHARGING
|
|
|
|
void (*backlight_set_timeout_plugged)(int index);
|
|
|
|
#endif
|
2008-04-04 19:38:46 +00:00
|
|
|
bool (*is_backlight_on)(bool ignore_always_off);
|
2008-08-15 08:27:39 +00:00
|
|
|
void (*splash)(int ticks, const char *str);
|
|
|
|
void (*splashf)(int ticks, const char *fmt, ...) ATTRIBUTE_PRINTF(2, 3);
|
2003-06-29 16:33:04 +00:00
|
|
|
|
2005-04-15 12:55:31 +00:00
|
|
|
#ifdef HAVE_REMOTE_LCD
|
2005-06-18 01:25:47 +00:00
|
|
|
/* remote lcd */
|
2005-06-29 01:39:50 +00:00
|
|
|
void (*lcd_remote_set_contrast)(int x);
|
|
|
|
void (*lcd_remote_clear_display)(void);
|
|
|
|
void (*lcd_remote_puts)(int x, int y, const unsigned char *string);
|
2007-12-31 00:04:27 +00:00
|
|
|
void (*lcd_remote_puts_scroll)(int x, int y, const unsigned char* string);
|
|
|
|
void (*lcd_remote_stop_scroll)(void);
|
2005-06-29 01:39:50 +00:00
|
|
|
void (*lcd_remote_set_drawmode)(int mode);
|
|
|
|
int (*lcd_remote_get_drawmode)(void);
|
|
|
|
void (*lcd_remote_setfont)(int font);
|
|
|
|
int (*lcd_remote_getstringsize)(const unsigned char *str, int *w, int *h);
|
|
|
|
void (*lcd_remote_drawpixel)(int x, int y);
|
|
|
|
void (*lcd_remote_drawline)(int x1, int y1, int x2, int y2);
|
|
|
|
void (*lcd_remote_hline)(int x1, int x2, int y);
|
|
|
|
void (*lcd_remote_vline)(int x, int y1, int y2);
|
|
|
|
void (*lcd_remote_drawrect)(int x, int y, int nx, int ny);
|
|
|
|
void (*lcd_remote_fillrect)(int x, int y, int nx, int ny);
|
2005-07-07 00:05:29 +00:00
|
|
|
void (*lcd_remote_mono_bitmap_part)(const unsigned char *src, int src_x,
|
|
|
|
int src_y, int stride, int x, int y,
|
|
|
|
int width, int height);
|
|
|
|
void (*lcd_remote_mono_bitmap)(const unsigned char *src, int x, int y,
|
2005-06-29 01:39:50 +00:00
|
|
|
int width, int height);
|
|
|
|
void (*lcd_remote_putsxy)(int x, int y, const unsigned char *string);
|
|
|
|
void (*lcd_remote_puts_style)(int x, int y, const unsigned char *str, int style);
|
|
|
|
void (*lcd_remote_puts_scroll_style)(int x, int y, const unsigned char* string,
|
|
|
|
int style);
|
2006-07-28 07:35:45 +00:00
|
|
|
fb_remote_data* lcd_remote_framebuffer;
|
2005-06-29 01:39:50 +00:00
|
|
|
void (*lcd_remote_update)(void);
|
|
|
|
void (*lcd_remote_update_rect)(int x, int y, int width, int height);
|
2005-06-18 01:25:47 +00:00
|
|
|
|
2005-04-15 12:55:31 +00:00
|
|
|
void (*remote_backlight_on)(void);
|
2005-06-18 01:25:47 +00:00
|
|
|
void (*remote_backlight_off)(void);
|
2008-03-24 00:35:53 +00:00
|
|
|
void (*remote_backlight_set_timeout)(int index);
|
|
|
|
#if CONFIG_CHARGING
|
|
|
|
void (*remote_backlight_set_timeout_plugged)(int index);
|
2005-04-15 12:55:31 +00:00
|
|
|
#endif
|
2008-03-24 00:35:53 +00:00
|
|
|
#endif /* HAVE_REMOTE_LCD */
|
2006-09-16 16:18:11 +00:00
|
|
|
struct screen* screens[NB_SCREENS];
|
|
|
|
#if defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1)
|
|
|
|
void (*lcd_remote_set_foreground)(unsigned foreground);
|
|
|
|
unsigned (*lcd_remote_get_foreground)(void);
|
2006-10-14 01:32:58 +00:00
|
|
|
void (*lcd_remote_set_background)(unsigned background);
|
2006-09-16 16:18:11 +00:00
|
|
|
unsigned (*lcd_remote_get_background)(void);
|
2009-12-20 12:59:25 +00:00
|
|
|
void (*lcd_remote_bitmap_part)(const fb_remote_data *src,
|
|
|
|
int src_x, int src_y, int stride,
|
|
|
|
int x, int y, int width, int height);
|
|
|
|
void (*lcd_remote_bitmap)(const fb_remote_data *src, int x, int y,
|
|
|
|
int width, int height);
|
2006-09-16 16:18:11 +00:00
|
|
|
#endif
|
2009-12-20 12:59:25 +00:00
|
|
|
void (*viewport_set_defaults)(struct viewport *vp,
|
2010-02-14 06:26:16 +00:00
|
|
|
const enum screen_type screen);
|
|
|
|
#ifdef HAVE_LCD_BITMAP
|
|
|
|
void (*viewportmanager_theme_enable)(enum screen_type screen, bool enable,
|
|
|
|
struct viewport *viewport);
|
|
|
|
void (*viewportmanager_theme_undo)(enum screen_type screen, bool force_redraw);
|
|
|
|
#endif
|
2006-09-16 16:18:11 +00:00
|
|
|
/* list */
|
|
|
|
void (*gui_synclist_init)(struct gui_synclist * lists,
|
2008-05-13 09:57:56 +00:00
|
|
|
list_get_name callback_get_item_name, void * data,
|
2008-03-26 03:35:24 +00:00
|
|
|
bool scroll_all,int selected_size,
|
|
|
|
struct viewport parent[NB_SCREENS]);
|
2006-09-16 16:18:11 +00:00
|
|
|
void (*gui_synclist_set_nb_items)(struct gui_synclist * lists, int nb_items);
|
2009-12-20 12:59:25 +00:00
|
|
|
void (*gui_synclist_set_icon_callback)(struct gui_synclist * lists,
|
|
|
|
list_get_icon icon_callback);
|
2006-09-16 16:18:11 +00:00
|
|
|
int (*gui_synclist_get_nb_items)(struct gui_synclist * lists);
|
|
|
|
int (*gui_synclist_get_sel_pos)(struct gui_synclist * lists);
|
|
|
|
void (*gui_synclist_draw)(struct gui_synclist * lists);
|
|
|
|
void (*gui_synclist_select_item)(struct gui_synclist * lists,
|
2009-12-20 12:59:25 +00:00
|
|
|
int item_number);
|
2006-09-16 16:18:11 +00:00
|
|
|
void (*gui_synclist_add_item)(struct gui_synclist * lists);
|
|
|
|
void (*gui_synclist_del_item)(struct gui_synclist * lists);
|
|
|
|
void (*gui_synclist_limit_scroll)(struct gui_synclist * lists, bool scroll);
|
2007-09-17 10:08:50 +00:00
|
|
|
bool (*gui_synclist_do_button)(struct gui_synclist * lists,
|
2008-12-31 05:59:26 +00:00
|
|
|
int *action, enum list_wrap wrap);
|
2009-10-11 09:40:47 +00:00
|
|
|
void (*gui_synclist_set_title)(struct gui_synclist *lists, char* title,
|
2009-07-11 00:22:26 +00:00
|
|
|
enum themable_icons icon);
|
2008-08-14 22:35:00 +00:00
|
|
|
enum yesno_res (*gui_syncyesno_run)(const struct text_message * main_message,
|
|
|
|
const struct text_message * yes_message,
|
|
|
|
const struct text_message * no_message);
|
2008-06-23 13:20:35 +00:00
|
|
|
void (*simplelist_info_init)(struct simplelist_info *info, char* title,
|
2009-12-20 12:59:25 +00:00
|
|
|
int count, void* data);
|
2008-06-23 13:20:35 +00:00
|
|
|
bool (*simplelist_show_list)(struct simplelist_info *info);
|
2006-10-14 01:32:58 +00:00
|
|
|
|
2003-06-29 16:33:04 +00:00
|
|
|
/* button */
|
2005-02-07 23:11:20 +00:00
|
|
|
long (*button_get)(bool block);
|
|
|
|
long (*button_get_w_tmo)(int ticks);
|
2008-05-15 07:13:03 +00:00
|
|
|
int (*button_status)(void);
|
2008-05-15 06:58:36 +00:00
|
|
|
#ifdef HAVE_BUTTON_DATA
|
|
|
|
intptr_t (*button_get_data)(void);
|
2009-10-20 21:54:59 +00:00
|
|
|
int (*button_status_wdata)(int *pdata);
|
2008-05-15 06:58:36 +00:00
|
|
|
#endif
|
2004-07-27 14:10:48 +00:00
|
|
|
void (*button_clear_queue)(void);
|
2008-12-25 04:24:47 +00:00
|
|
|
int (*button_queue_count)(void);
|
2006-05-01 05:45:18 +00:00
|
|
|
#ifdef HAS_BUTTON_HOLD
|
2005-06-18 01:25:47 +00:00
|
|
|
bool (*button_hold)(void);
|
|
|
|
#endif
|
2008-08-23 09:46:38 +00:00
|
|
|
#ifdef HAVE_TOUCHSCREEN
|
|
|
|
void (*touchscreen_set_mode)(enum touchscreen_mode);
|
2012-01-26 22:37:27 +00:00
|
|
|
enum touchscreen_mode (*touchscreen_get_mode)(void);
|
2008-05-15 07:13:03 +00:00
|
|
|
#endif
|
2008-05-15 06:58:36 +00:00
|
|
|
#ifdef HAVE_BUTTON_LIGHT
|
|
|
|
void (*buttonlight_set_timeout)(int value);
|
|
|
|
void (*buttonlight_off)(void);
|
|
|
|
void (*buttonlight_on)(void);
|
|
|
|
#ifdef HAVE_BUTTONLIGHT_BRIGHTNESS
|
|
|
|
void (*buttonlight_set_brightness)(int val);
|
|
|
|
#endif /* HAVE_BUTTONLIGHT_BRIGHTNESS */
|
|
|
|
#endif /* HAVE_BUTTON_LIGHT */
|
2003-06-29 16:33:04 +00:00
|
|
|
|
|
|
|
/* file */
|
2010-02-14 06:26:16 +00:00
|
|
|
int (*open_utf8)(const char* pathname, int flags);
|
2010-05-06 17:35:13 +00:00
|
|
|
int (*open)(const char* pathname, int flags, ...);
|
2009-01-07 09:53:46 +00:00
|
|
|
int (*close)(int fd);
|
|
|
|
ssize_t (*read)(int fd, void* buf, size_t count);
|
|
|
|
off_t (*lseek)(int fd, off_t offset, int whence);
|
2010-05-06 17:35:04 +00:00
|
|
|
int (*creat)(const char *pathname, mode_t mode);
|
2009-01-07 09:53:46 +00:00
|
|
|
ssize_t (*write)(int fd, const void* buf, size_t count);
|
|
|
|
int (*remove)(const char* pathname);
|
|
|
|
int (*rename)(const char* path, const char* newname);
|
|
|
|
int (*ftruncate)(int fd, off_t length);
|
|
|
|
off_t (*filesize)(int fd);
|
2007-03-17 09:02:53 +00:00
|
|
|
int (*fdprintf)(int fd, const char *fmt, ...) ATTRIBUTE_PRINTF(2, 3);
|
2003-06-29 16:33:04 +00:00
|
|
|
int (*read_line)(int fd, char* buffer, int buffer_size);
|
2004-07-27 14:10:48 +00:00
|
|
|
bool (*settings_parseline)(char* line, char** name, char** value);
|
2008-11-01 16:14:28 +00:00
|
|
|
void (*storage_sleep)(void);
|
|
|
|
void (*storage_spin)(void);
|
|
|
|
void (*storage_spindown)(int seconds);
|
|
|
|
#if USING_STORAGE_CALLBACK
|
2009-10-20 21:54:44 +00:00
|
|
|
void (*register_storage_idle_func)(void (*function)(void *data));
|
|
|
|
void (*unregister_storage_idle_func)(void (*function)(void *data), bool run);
|
2008-11-01 16:14:28 +00:00
|
|
|
#endif /* USING_STORAGE_CALLBACK */
|
2006-09-16 16:18:11 +00:00
|
|
|
void (*reload_directory)(void);
|
2007-06-22 09:34:57 +00:00
|
|
|
char *(*create_numbered_filename)(char *buffer, const char *path,
|
|
|
|
const char *prefix, const char *suffix,
|
|
|
|
int numberlen IF_CNFN_NUM_(, int *num));
|
2008-03-24 00:35:53 +00:00
|
|
|
bool (*file_exists)(const char *file);
|
2009-02-11 16:37:12 +00:00
|
|
|
char* (*strip_extension)(char* buffer, int buffer_size, const char *filename);
|
2010-02-14 06:26:16 +00:00
|
|
|
unsigned (*crc_32)(const void *src, unsigned len, unsigned crc32);
|
2008-03-24 00:35:53 +00:00
|
|
|
|
2011-01-20 17:11:23 +00:00
|
|
|
int (*filetype_get_attr)(const char* file);
|
|
|
|
|
|
|
|
|
2006-05-01 05:45:18 +00:00
|
|
|
|
2003-06-29 16:33:04 +00:00
|
|
|
/* dir */
|
2007-07-20 17:06:55 +00:00
|
|
|
DIR* (*opendir)(const char* name);
|
|
|
|
int (*closedir)(DIR* dir);
|
|
|
|
struct dirent* (*readdir)(DIR* dir);
|
|
|
|
int (*mkdir)(const char *name);
|
|
|
|
int (*rmdir)(const char *name);
|
2008-03-24 00:35:53 +00:00
|
|
|
bool (*dir_exists)(const char *path);
|
2010-10-16 12:30:06 +00:00
|
|
|
struct dirinfo (*dir_get_info)(DIR* parent, struct dirent *entry);
|
2003-06-29 16:33:04 +00:00
|
|
|
|
2011-01-20 17:11:23 +00:00
|
|
|
/* browsing */
|
|
|
|
void (*browse_context_init)(struct browse_context *browse,
|
|
|
|
int dirfilter, unsigned flags,
|
|
|
|
char *title, enum themable_icons icon,
|
|
|
|
const char *root, const char *selected);
|
|
|
|
int (*rockbox_browse)(struct browse_context *browse);
|
|
|
|
|
2004-10-23 09:59:53 +00:00
|
|
|
/* kernel/ system */
|
2010-08-03 19:00:29 +00:00
|
|
|
#if defined(CPU_ARM) && CONFIG_PLATFORM & PLATFORM_NATIVE
|
2009-02-11 16:37:12 +00:00
|
|
|
void (*__div0)(void);
|
|
|
|
#endif
|
2010-09-01 21:29:34 +00:00
|
|
|
unsigned (*sleep)(unsigned ticks);
|
2004-07-27 14:10:48 +00:00
|
|
|
void (*yield)(void);
|
2007-06-25 20:46:54 +00:00
|
|
|
volatile long* current_tick;
|
2005-02-07 22:56:37 +00:00
|
|
|
long (*default_event_handler)(long event);
|
2009-12-20 12:59:25 +00:00
|
|
|
long (*default_event_handler_ex)(long event,
|
|
|
|
void (*callback)(void *), void *parameter);
|
2008-12-10 08:57:10 +00:00
|
|
|
unsigned int (*create_thread)(void (*function)(void), void* stack,
|
|
|
|
size_t stack_size, unsigned flags,
|
|
|
|
const char *name
|
|
|
|
IF_PRIO(, int priority)
|
|
|
|
IF_COP(, unsigned int core));
|
2011-03-16 05:38:37 +00:00
|
|
|
unsigned int (*thread_self)(void);
|
2008-03-25 02:34:12 +00:00
|
|
|
void (*thread_exit)(void);
|
2008-12-10 08:57:10 +00:00
|
|
|
void (*thread_wait)(unsigned int thread_id);
|
2008-03-24 00:35:53 +00:00
|
|
|
#if CONFIG_CODEC == SWCODEC
|
2009-01-05 10:31:19 +00:00
|
|
|
void (*thread_thaw)(unsigned int thread_id);
|
|
|
|
#ifdef HAVE_PRIORITY_SCHEDULING
|
|
|
|
int (*thread_set_priority)(unsigned int thread_id, int priority);
|
|
|
|
#endif
|
2008-03-24 00:35:53 +00:00
|
|
|
void (*mutex_init)(struct mutex *m);
|
|
|
|
void (*mutex_lock)(struct mutex *m);
|
|
|
|
void (*mutex_unlock)(struct mutex *m);
|
|
|
|
#endif
|
|
|
|
|
2004-07-27 19:16:58 +00:00
|
|
|
void (*reset_poweroff_timer)(void);
|
2010-06-21 16:53:00 +00:00
|
|
|
#if (CONFIG_PLATFORM & PLATFORM_NATIVE)
|
2004-10-23 09:59:53 +00:00
|
|
|
int (*system_memory_guard)(int newmode);
|
2005-06-18 01:25:47 +00:00
|
|
|
long *cpu_frequency;
|
|
|
|
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
2007-01-22 10:41:25 +00:00
|
|
|
#ifdef CPU_BOOST_LOGGING
|
|
|
|
void (*cpu_boost_)(bool on_off,char*location,int line);
|
|
|
|
#else
|
2005-06-18 01:25:47 +00:00
|
|
|
void (*cpu_boost)(bool on_off);
|
2007-01-22 10:41:25 +00:00
|
|
|
#endif
|
2008-03-24 00:35:53 +00:00
|
|
|
#endif /* HAVE_ADJUSTABLE_CPU_FREQ */
|
2010-06-21 16:53:00 +00:00
|
|
|
#endif /* PLATFORM_NATIVE */
|
2008-03-24 00:35:53 +00:00
|
|
|
#ifdef HAVE_SCHEDULER_BOOSTCTRL
|
|
|
|
void (*trigger_cpu_boost)(void);
|
|
|
|
void (*cancel_cpu_boost)(void);
|
2007-07-29 03:43:37 +00:00
|
|
|
#endif
|
2010-10-16 12:30:06 +00:00
|
|
|
|
2011-12-17 07:27:24 +00:00
|
|
|
void (*commit_dcache)(void);
|
|
|
|
void (*commit_discard_dcache)(void);
|
2012-01-27 08:31:34 +00:00
|
|
|
void (*commit_discard_idcache)(void);
|
2010-10-16 12:30:06 +00:00
|
|
|
|
|
|
|
/* load code api for overlay */
|
|
|
|
void* (*lc_open)(const char *filename, unsigned char *buf, size_t buf_size);
|
|
|
|
void* (*lc_open_from_mem)(void* addr, size_t blob_size);
|
|
|
|
void* (*lc_get_header)(void *handle);
|
|
|
|
void (*lc_close)(void *handle);
|
|
|
|
|
2005-07-26 20:01:11 +00:00
|
|
|
bool (*timer_register)(int reg_prio, void (*unregister_callback)(void),
|
2009-06-29 14:29:46 +00:00
|
|
|
long cycles, void (*timer_callback)(void)
|
|
|
|
IF_COP(, int core));
|
2005-07-26 20:01:11 +00:00
|
|
|
void (*timer_unregister)(void);
|
|
|
|
bool (*timer_set_period)(long count);
|
2007-07-29 03:43:37 +00:00
|
|
|
|
2006-09-16 16:18:11 +00:00
|
|
|
void (*queue_init)(struct event_queue *q, bool register_queue);
|
2006-02-07 20:38:55 +00:00
|
|
|
void (*queue_delete)(struct event_queue *q);
|
2006-12-19 16:50:07 +00:00
|
|
|
void (*queue_post)(struct event_queue *q, long id, intptr_t data);
|
2007-10-16 01:25:17 +00:00
|
|
|
void (*queue_wait_w_tmo)(struct event_queue *q, struct queue_event *ev,
|
2006-02-07 20:38:55 +00:00
|
|
|
int ticks);
|
2008-03-24 00:35:53 +00:00
|
|
|
#if CONFIG_CODEC == SWCODEC
|
|
|
|
void (*queue_enable_queue_send)(struct event_queue *q,
|
2008-03-25 02:34:12 +00:00
|
|
|
struct queue_sender_list *send,
|
2008-12-10 08:57:10 +00:00
|
|
|
unsigned int thread_id);
|
2008-03-24 00:35:53 +00:00
|
|
|
bool (*queue_empty)(const struct event_queue *q);
|
|
|
|
void (*queue_wait)(struct event_queue *q, struct queue_event *ev);
|
|
|
|
intptr_t (*queue_send)(struct event_queue *q, long id,
|
|
|
|
intptr_t data);
|
|
|
|
void (*queue_reply)(struct event_queue *q, intptr_t retval);
|
|
|
|
#endif /* CONFIG_CODEC == SWCODEC */
|
|
|
|
|
2006-02-07 20:38:55 +00:00
|
|
|
void (*usb_acknowledge)(long id);
|
2009-09-30 10:06:04 +00:00
|
|
|
#ifdef USB_ENABLE_HID
|
2009-08-03 15:09:41 +00:00
|
|
|
void (*usb_hid_send)(usage_page_t usage_page, int id);
|
|
|
|
#endif
|
2006-02-07 20:38:55 +00:00
|
|
|
#ifdef RB_PROFILE
|
|
|
|
void (*profile_thread)(void);
|
|
|
|
void (*profstop)(void);
|
|
|
|
void (*profile_func_enter)(void *this_fn, void *call_site);
|
|
|
|
void (*profile_func_exit)(void *this_fn, void *call_site);
|
|
|
|
#endif
|
2009-10-20 21:54:59 +00:00
|
|
|
/* event api */
|
|
|
|
bool (*add_event)(unsigned short id, bool oneshot, void (*handler)(void *data));
|
|
|
|
void (*remove_event)(unsigned short id, void (*handler)(void *data));
|
|
|
|
void (*send_event)(unsigned short id, void *data);
|
2003-06-29 16:33:04 +00:00
|
|
|
|
2010-06-21 16:53:00 +00:00
|
|
|
#if (CONFIG_PLATFORM & PLATFORM_HOSTED)
|
2006-03-11 09:28:49 +00:00
|
|
|
/* special simulator hooks */
|
|
|
|
#if defined(HAVE_LCD_BITMAP) && LCD_DEPTH < 8
|
2009-02-09 00:32:59 +00:00
|
|
|
void (*sim_lcd_ex_init)(unsigned long (*getpixel)(int, int));
|
2006-03-11 09:28:49 +00:00
|
|
|
void (*sim_lcd_ex_update_rect)(int x, int y, int width, int height);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
2003-06-29 16:33:04 +00:00
|
|
|
/* strings and memory */
|
2007-03-17 09:02:53 +00:00
|
|
|
int (*snprintf)(char *buf, size_t size, const char *fmt, ...)
|
|
|
|
ATTRIBUTE_PRINTF(3, 4);
|
2010-05-06 21:04:40 +00:00
|
|
|
int (*vsnprintf)(char *buf, size_t size, const char *fmt, va_list ap);
|
2004-10-23 09:59:53 +00:00
|
|
|
char* (*strcpy)(char *dst, const char *src);
|
2009-07-14 13:57:45 +00:00
|
|
|
size_t (*strlcpy)(char *dst, const char *src, size_t length);
|
2003-06-29 16:33:04 +00:00
|
|
|
size_t (*strlen)(const char *str);
|
2004-07-13 14:14:30 +00:00
|
|
|
char * (*strrchr)(const char *s, int c);
|
2004-07-27 14:10:48 +00:00
|
|
|
int (*strcmp)(const char *, const char *);
|
2005-07-26 20:01:11 +00:00
|
|
|
int (*strncmp)(const char *, const char *, size_t);
|
2004-07-27 14:10:48 +00:00
|
|
|
int (*strcasecmp)(const char *, const char *);
|
2004-10-23 09:59:53 +00:00
|
|
|
int (*strncasecmp)(const char *s1, const char *s2, size_t n);
|
|
|
|
void* (*memset)(void *dst, int c, size_t length);
|
|
|
|
void* (*memcpy)(void *out, const void *in, size_t n);
|
2006-02-07 20:38:55 +00:00
|
|
|
void* (*memmove)(void *out, const void *in, size_t n);
|
2010-06-21 16:53:00 +00:00
|
|
|
#if (CONFIG_PLATFORM & PLATFORM_NATIVE)
|
2009-05-21 19:01:41 +00:00
|
|
|
const unsigned char *_rbctype_;
|
2010-05-14 12:37:05 +00:00
|
|
|
#endif
|
2004-07-27 19:16:58 +00:00
|
|
|
int (*atoi)(const char *str);
|
2005-02-22 12:19:12 +00:00
|
|
|
char *(*strchr)(const char *s, int c);
|
|
|
|
char *(*strcat)(char *s1, const char *s2);
|
2010-02-14 06:26:16 +00:00
|
|
|
size_t (*strlcat)(char *dst, const char *src, size_t length);
|
2006-09-16 16:18:11 +00:00
|
|
|
void *(*memchr)(const void *s1, int c, size_t n);
|
2005-02-22 12:19:12 +00:00
|
|
|
int (*memcmp)(const void *s1, const void *s2, size_t n);
|
2005-06-18 01:25:47 +00:00
|
|
|
char *(*strcasestr) (const char* phaystack, const char* pneedle);
|
2006-10-31 11:17:00 +00:00
|
|
|
char* (*strtok_r)(char *ptr, const char *sep, char **end);
|
2006-01-15 18:20:18 +00:00
|
|
|
/* unicode stuff */
|
|
|
|
const unsigned char* (*utf8decode)(const unsigned char *utf8, unsigned short *ucs);
|
|
|
|
unsigned char* (*iso_decode)(const unsigned char *iso, unsigned char *utf8, int cp, int count);
|
2006-07-25 18:12:57 +00:00
|
|
|
unsigned char* (*utf16LEdecode)(const unsigned char *utf16, unsigned char *utf8, int count);
|
|
|
|
unsigned char* (*utf16BEdecode)(const unsigned char *utf16, unsigned char *utf8, int count);
|
2006-01-15 18:20:18 +00:00
|
|
|
unsigned char* (*utf8encode)(unsigned long ucs, unsigned char *utf8);
|
|
|
|
unsigned long (*utf8length)(const unsigned char *utf8);
|
2006-09-16 16:18:11 +00:00
|
|
|
int (*utf8seek)(const unsigned char* utf8, int offset);
|
2003-06-29 16:33:04 +00:00
|
|
|
|
2011-10-17 18:28:35 +00:00
|
|
|
/* the buflib memory management library */
|
|
|
|
void (*buflib_init)(struct buflib_context* ctx, void* buf, size_t size);
|
|
|
|
size_t (*buflib_available)(struct buflib_context* ctx);
|
|
|
|
int (*buflib_alloc)(struct buflib_context* ctx, size_t size);
|
|
|
|
int (*buflib_alloc_ex)(struct buflib_context* ctx, size_t size,
|
|
|
|
const char* name, struct buflib_callbacks *ops);
|
|
|
|
int (*buflib_alloc_maximum)(struct buflib_context* ctx, const char* name,
|
|
|
|
size_t* size, struct buflib_callbacks *ops);
|
|
|
|
void (*buflib_buffer_in)(struct buflib_context* ctx, int size);
|
|
|
|
void* (*buflib_buffer_out)(struct buflib_context* ctx, size_t* size);
|
|
|
|
int (*buflib_free)(struct buflib_context* ctx, int handle);
|
|
|
|
bool (*buflib_shrink)(struct buflib_context* ctx, int handle,
|
|
|
|
void* new_start, size_t new_size);
|
|
|
|
void* (*buflib_get_data)(struct buflib_context* ctx, int handle);
|
|
|
|
const char* (*buflib_get_name)(struct buflib_context* ctx, int handle);
|
|
|
|
|
2003-06-29 16:33:04 +00:00
|
|
|
/* sound */
|
2005-04-01 13:41:03 +00:00
|
|
|
void (*sound_set)(int setting, int value);
|
2008-03-24 00:35:53 +00:00
|
|
|
int (*sound_default)(int setting);
|
2006-01-15 18:20:18 +00:00
|
|
|
int (*sound_min)(int setting);
|
|
|
|
int (*sound_max)(int setting);
|
2008-03-24 00:35:53 +00:00
|
|
|
const char * (*sound_unit)(int setting);
|
|
|
|
int (*sound_val2phys)(int setting, int value);
|
2010-05-24 16:42:32 +00:00
|
|
|
#ifdef AUDIOHW_HAVE_EQ
|
|
|
|
int (*sound_enum_hw_eq_band_setting)(unsigned int band,
|
|
|
|
unsigned int band_setting);
|
|
|
|
#endif /* AUDIOHW_HAVE_EQ */
|
2010-06-21 16:53:00 +00:00
|
|
|
#if (CONFIG_PLATFORM & PLATFORM_NATIVE)
|
2012-03-04 19:44:43 +00:00
|
|
|
void (*mp3_play_data)(const void* start, size_t size,
|
|
|
|
mp3_play_callback_t get_more);
|
2004-07-27 14:10:48 +00:00
|
|
|
void (*mp3_play_pause)(bool play);
|
|
|
|
void (*mp3_play_stop)(void);
|
|
|
|
bool (*mp3_is_playing)(void);
|
2005-08-29 21:15:27 +00:00
|
|
|
#if CONFIG_CODEC != SWCODEC
|
2004-07-27 14:10:48 +00:00
|
|
|
void (*bitswap)(unsigned char *data, int length);
|
2005-06-06 00:34:07 +00:00
|
|
|
#endif
|
2010-06-21 16:53:00 +00:00
|
|
|
#endif /* PLATFORM_NATIVE */
|
2005-08-29 21:15:27 +00:00
|
|
|
#if CONFIG_CODEC == SWCODEC
|
2007-04-10 14:18:30 +00:00
|
|
|
const unsigned long *audio_master_sampr_list;
|
|
|
|
const unsigned long *hw_freq_sampr;
|
|
|
|
void (*pcm_apply_settings)(void);
|
2010-05-24 16:42:32 +00:00
|
|
|
void (*pcm_play_data)(pcm_play_callback_type get_more,
|
2012-02-23 13:14:46 +00:00
|
|
|
pcm_status_callback_type status_cb,
|
|
|
|
const void *start, size_t size);
|
2005-06-18 01:25:47 +00:00
|
|
|
void (*pcm_play_stop)(void);
|
|
|
|
void (*pcm_set_frequency)(unsigned int frequency);
|
|
|
|
bool (*pcm_is_playing)(void);
|
2007-04-10 14:18:30 +00:00
|
|
|
bool (*pcm_is_paused)(void);
|
2005-06-18 01:25:47 +00:00
|
|
|
void (*pcm_play_pause)(bool play);
|
2007-04-10 14:18:30 +00:00
|
|
|
size_t (*pcm_get_bytes_waiting)(void);
|
2006-03-11 09:38:12 +00:00
|
|
|
void (*pcm_calculate_peaks)(int *left, int *right);
|
2010-02-10 19:44:11 +00:00
|
|
|
const void* (*pcm_get_peak_buffer)(int *count);
|
2008-03-24 00:35:53 +00:00
|
|
|
void (*pcm_play_lock)(void);
|
|
|
|
void (*pcm_play_unlock)(void);
|
2011-06-29 06:37:04 +00:00
|
|
|
void (*beep_play)(unsigned int frequency, unsigned int duration,
|
|
|
|
unsigned int amplitude);
|
2007-04-10 14:18:30 +00:00
|
|
|
#ifdef HAVE_RECORDING
|
|
|
|
const unsigned long *rec_freq_sampr;
|
|
|
|
void (*pcm_init_recording)(void);
|
|
|
|
void (*pcm_close_recording)(void);
|
2010-05-24 16:42:32 +00:00
|
|
|
void (*pcm_record_data)(pcm_rec_callback_type more_ready,
|
2012-02-23 13:14:46 +00:00
|
|
|
pcm_status_callback_type status_cb,
|
2007-04-10 14:18:30 +00:00
|
|
|
void *start, size_t size);
|
|
|
|
void (*pcm_stop_recording)(void);
|
|
|
|
void (*pcm_calculate_rec_peaks)(int *left, int *right);
|
|
|
|
void (*audio_set_recording_gain)(int left, int right, int type);
|
|
|
|
#endif /* HAVE_RECORDING */
|
2007-06-08 23:42:04 +00:00
|
|
|
#if INPUT_SRC_CAPS != 0
|
|
|
|
void (*audio_set_output_source)(int monitor);
|
|
|
|
void (*audio_set_input_source)(int source, unsigned flags);
|
2006-03-11 09:38:12 +00:00
|
|
|
#endif
|
2012-03-27 23:52:15 +00:00
|
|
|
void (*dsp_crossfeed_enable)(bool enable);
|
|
|
|
void (*dsp_eq_enable)(bool enable);
|
2008-03-24 00:35:53 +00:00
|
|
|
void (*dsp_dither_enable)(bool enable);
|
2012-03-27 23:52:15 +00:00
|
|
|
#ifdef HAVE_PITCHSCREEN
|
|
|
|
void (*dsp_set_timestretch)(int32_t percent);
|
|
|
|
#endif
|
|
|
|
intptr_t (*dsp_configure)(struct dsp_config *dsp,
|
|
|
|
unsigned int setting, intptr_t value);
|
|
|
|
struct dsp_config * (*dsp_get_config)(enum dsp_ids id);
|
|
|
|
void (*dsp_process)(struct dsp_config *dsp, struct dsp_buffer *src,
|
|
|
|
struct dsp_buffer *dst);
|
2011-08-03 09:52:23 +00:00
|
|
|
|
|
|
|
enum channel_status (*mixer_channel_status)(enum pcm_mixer_channel channel);
|
2012-02-23 13:14:46 +00:00
|
|
|
const void * (*mixer_channel_get_buffer)(enum pcm_mixer_channel channel,
|
|
|
|
int *count);
|
2011-08-03 09:52:23 +00:00
|
|
|
void (*mixer_channel_calculate_peaks)(enum pcm_mixer_channel channel,
|
2012-05-03 00:53:07 +00:00
|
|
|
struct pcm_peaks *peaks);
|
2011-08-03 09:52:23 +00:00
|
|
|
void (*mixer_channel_play_data)(enum pcm_mixer_channel channel,
|
|
|
|
pcm_play_callback_type get_more,
|
2012-02-23 13:14:46 +00:00
|
|
|
const void *start, size_t size);
|
2011-08-03 09:52:23 +00:00
|
|
|
void (*mixer_channel_play_pause)(enum pcm_mixer_channel channel, bool play);
|
|
|
|
void (*mixer_channel_stop)(enum pcm_mixer_channel channel);
|
|
|
|
void (*mixer_channel_set_amplitude)(enum pcm_mixer_channel channel,
|
|
|
|
unsigned int amplitude);
|
|
|
|
size_t (*mixer_channel_get_bytes_waiting)(enum pcm_mixer_channel channel);
|
|
|
|
|
|
|
|
void (*system_sound_play)(enum system_sound sound);
|
2012-03-03 12:52:13 +00:00
|
|
|
void (*keyclick_click)(bool rawbutton, int action);
|
2007-06-08 23:42:04 +00:00
|
|
|
#endif /* CONFIG_CODEC == SWCODC */
|
2003-06-29 16:33:04 +00:00
|
|
|
|
2004-07-27 14:10:48 +00:00
|
|
|
/* playback control */
|
2007-04-10 14:18:30 +00:00
|
|
|
int (*playlist_amount)(void);
|
|
|
|
int (*playlist_resume)(void);
|
2009-05-31 14:33:33 +00:00
|
|
|
void (*playlist_start)(int start_index, int offset);
|
2009-06-01 21:08:49 +00:00
|
|
|
int (*playlist_add)(const char *filename);
|
|
|
|
void (*playlist_sync)(struct playlist_info* playlist);
|
|
|
|
int (*playlist_remove_all_tracks)(struct playlist_info *playlist);
|
|
|
|
int (*playlist_create)(const char *dir, const char *file);
|
|
|
|
int (*playlist_insert_track)(struct playlist_info* playlist,
|
|
|
|
const char *filename, int position, bool queue, bool sync);
|
2009-07-05 18:07:58 +00:00
|
|
|
int (*playlist_insert_directory)(struct playlist_info* playlist,
|
|
|
|
const char *dirname, int position, bool queue,
|
|
|
|
bool recurse);
|
2009-06-01 21:08:49 +00:00
|
|
|
int (*playlist_shuffle)(int random_seed, int start_index);
|
2009-01-07 09:53:46 +00:00
|
|
|
void (*audio_play)(long offset);
|
2005-04-04 12:06:29 +00:00
|
|
|
void (*audio_stop)(void);
|
|
|
|
void (*audio_pause)(void);
|
|
|
|
void (*audio_resume)(void);
|
|
|
|
void (*audio_next)(void);
|
|
|
|
void (*audio_prev)(void);
|
2008-03-28 12:51:33 +00:00
|
|
|
void (*audio_ff_rewind)(long newtime);
|
2005-04-04 12:06:29 +00:00
|
|
|
struct mp3entry* (*audio_next_track)(void);
|
|
|
|
int (*audio_status)(void);
|
|
|
|
struct mp3entry* (*audio_current_track)(void);
|
|
|
|
void (*audio_flush_and_reload_tracks)(void);
|
|
|
|
int (*audio_get_file_pos)(void);
|
2005-08-29 21:15:27 +00:00
|
|
|
#if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)
|
2005-04-25 08:21:10 +00:00
|
|
|
unsigned long (*mpeg_get_last_header)(void);
|
2005-04-25 08:59:19 +00:00
|
|
|
#endif
|
2010-09-17 20:28:47 +00:00
|
|
|
#if ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) || \
|
|
|
|
(CONFIG_CODEC == SWCODEC)) && defined (HAVE_PITCHSCREEN)
|
2009-07-11 16:46:19 +00:00
|
|
|
void (*sound_set_pitch)(int32_t pitch);
|
2006-03-05 19:46:33 +00:00
|
|
|
#endif
|
2004-07-27 19:16:58 +00:00
|
|
|
|
|
|
|
/* MAS communication */
|
2005-08-29 21:15:27 +00:00
|
|
|
#if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)
|
2004-07-27 19:16:58 +00:00
|
|
|
int (*mas_readmem)(int bank, int addr, unsigned long* dest, int len);
|
2004-08-17 01:45:48 +00:00
|
|
|
int (*mas_writemem)(int bank, int addr, const unsigned long* src, int len);
|
2004-07-27 19:16:58 +00:00
|
|
|
int (*mas_readreg)(int reg);
|
|
|
|
int (*mas_writereg)(int reg, unsigned int val);
|
2005-08-29 21:15:27 +00:00
|
|
|
#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
|
2004-07-27 19:16:58 +00:00
|
|
|
int (*mas_codec_writereg)(int reg, unsigned int val);
|
|
|
|
int (*mas_codec_readreg)(int reg);
|
2006-09-16 16:18:11 +00:00
|
|
|
void (*i2c_begin)(void);
|
|
|
|
void (*i2c_end)(void);
|
2008-04-28 14:33:03 +00:00
|
|
|
int (*i2c_write)(int address, const unsigned char* buf, int count );
|
2004-07-27 19:16:58 +00:00
|
|
|
#endif
|
|
|
|
#endif
|
2004-10-23 09:59:53 +00:00
|
|
|
|
2006-01-15 18:20:18 +00:00
|
|
|
/* menu */
|
2008-03-26 03:35:24 +00:00
|
|
|
int (*do_menu)(const struct menu_item_ex *menu, int *start_selected,
|
2010-01-26 20:14:42 +00:00
|
|
|
struct viewport parent[NB_SCREENS], bool hide_theme);
|
2006-01-15 18:20:18 +00:00
|
|
|
|
2007-05-08 11:55:43 +00:00
|
|
|
/* scroll bar */
|
|
|
|
struct gui_syncstatusbar *statusbars;
|
|
|
|
void (*gui_syncstatusbar_draw)(struct gui_syncstatusbar * bars, bool force_redraw);
|
2008-12-25 04:24:47 +00:00
|
|
|
|
2007-05-08 11:55:43 +00:00
|
|
|
/* options */
|
2008-12-10 08:57:10 +00:00
|
|
|
const struct settings_list* (*get_settings_list)(int*count);
|
2008-03-25 15:24:03 +00:00
|
|
|
const struct settings_list* (*find_setting)(const void* variable, int *id);
|
2008-05-15 06:58:36 +00:00
|
|
|
bool (*option_screen)(const struct settings_list *setting,
|
2008-04-23 11:07:40 +00:00
|
|
|
struct viewport parent[NB_SCREENS],
|
2007-07-23 05:40:45 +00:00
|
|
|
bool use_temp_var, unsigned char* option_title);
|
2008-03-25 15:24:03 +00:00
|
|
|
bool (*set_option)(const char* string, const void* variable,
|
2008-03-28 12:51:33 +00:00
|
|
|
enum optiontype type, const struct opt_items* options,
|
|
|
|
int numoptions, void (*function)(int));
|
2008-03-25 15:24:03 +00:00
|
|
|
bool (*set_bool_options)(const char* string, const bool* variable,
|
2008-03-28 12:51:33 +00:00
|
|
|
const char* yes_str, int yes_voice,
|
|
|
|
const char* no_str, int no_voice,
|
2007-06-22 09:34:57 +00:00
|
|
|
void (*function)(bool));
|
2008-03-28 12:51:33 +00:00
|
|
|
bool (*set_int)(const unsigned char* string, const char* unit, int voice_unit,
|
2008-12-25 04:24:47 +00:00
|
|
|
const int* variable, void (*function)(int), int step,
|
|
|
|
int min, int max,
|
2009-08-20 16:47:44 +00:00
|
|
|
const char* (*formatter)(char*, size_t, int, const char*) );
|
2008-03-25 15:24:03 +00:00
|
|
|
bool (*set_bool)(const char* string, const bool* variable );
|
2006-03-21 09:36:13 +00:00
|
|
|
|
2007-06-22 09:34:57 +00:00
|
|
|
#ifdef HAVE_LCD_COLOR
|
2010-02-11 14:18:31 +00:00
|
|
|
bool (*set_color)(struct screen *display, char *title,
|
|
|
|
unsigned *color, unsigned banned_color);
|
2007-06-22 09:34:57 +00:00
|
|
|
#endif
|
2006-09-16 16:18:11 +00:00
|
|
|
/* 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);
|
2009-06-01 21:08:49 +00:00
|
|
|
#ifdef HAVE_TOUCHSCREEN
|
|
|
|
int (*action_get_touchscreen_press)(short *x, short *y);
|
|
|
|
#endif
|
2006-09-16 16:18:11 +00:00
|
|
|
bool (*action_userabort)(int timeout);
|
2006-03-21 09:36:13 +00:00
|
|
|
|
2006-02-07 20:38:55 +00:00
|
|
|
/* power */
|
|
|
|
int (*battery_level)(void);
|
|
|
|
bool (*battery_level_safe)(void);
|
|
|
|
int (*battery_time)(void);
|
2012-01-03 23:44:38 +00:00
|
|
|
int (*battery_voltage)(void);
|
2007-02-18 05:32:06 +00:00
|
|
|
#if CONFIG_CHARGING
|
2006-02-07 20:38:55 +00:00
|
|
|
bool (*charger_inserted)(void);
|
2009-03-24 21:59:44 +00:00
|
|
|
# if CONFIG_CHARGING >= CHARGING_MONITOR
|
2006-02-07 20:38:55 +00:00
|
|
|
bool (*charging_state)(void);
|
2006-03-05 19:34:54 +00:00
|
|
|
# endif
|
2006-02-07 20:38:55 +00:00
|
|
|
#endif
|
|
|
|
#ifdef HAVE_USB_POWER
|
|
|
|
bool (*usb_powered)(void);
|
|
|
|
#endif
|
|
|
|
|
2003-06-29 16:33:04 +00:00
|
|
|
/* misc */
|
2010-06-21 16:53:00 +00:00
|
|
|
#if (CONFIG_PLATFORM & PLATFORM_NATIVE)
|
2010-02-14 06:26:16 +00:00
|
|
|
int* __errno;
|
|
|
|
#endif
|
2005-02-15 13:28:39 +00:00
|
|
|
void (*srand)(unsigned int seed);
|
|
|
|
int (*rand)(void);
|
2003-06-29 21:42:15 +00:00
|
|
|
void (*qsort)(void *base, size_t nmemb, size_t size,
|
|
|
|
int(*compar)(const void *, const void *));
|
2003-07-09 22:36:23 +00:00
|
|
|
int (*kbd_input)(char* buffer, int buflen);
|
2003-07-24 10:02:45 +00:00
|
|
|
struct tm* (*get_time)(void);
|
2004-08-17 01:45:48 +00:00
|
|
|
int (*set_time)(const struct tm *tm);
|
2007-07-30 05:19:05 +00:00
|
|
|
#if CONFIG_RTC
|
|
|
|
time_t (*mktime)(struct tm *t);
|
|
|
|
#endif
|
2007-04-21 18:38:25 +00:00
|
|
|
void* (*plugin_get_buffer)(size_t *buffer_size);
|
|
|
|
void* (*plugin_get_audio_buffer)(size_t *buffer_size);
|
2006-10-31 11:17:00 +00:00
|
|
|
void (*plugin_tsr)(bool (*exit_callback)(bool reenter));
|
2007-08-06 13:42:52 +00:00
|
|
|
char* (*plugin_get_current_filename)(void);
|
2004-06-10 13:29:52 +00:00
|
|
|
#if defined(DEBUG) || defined(SIMULATOR)
|
2007-03-17 09:02:53 +00:00
|
|
|
void (*debugf)(const char *fmt, ...) ATTRIBUTE_PRINTF(1, 2);
|
2005-07-26 20:01:11 +00:00
|
|
|
#endif
|
|
|
|
#ifdef ROCKBOX_HAS_LOGF
|
2007-03-17 09:02:53 +00:00
|
|
|
void (*logf)(const char *fmt, ...) ATTRIBUTE_PRINTF(1, 2);
|
2004-06-10 13:48:53 +00:00
|
|
|
#endif
|
2004-07-27 19:16:58 +00:00
|
|
|
struct user_settings* global_settings;
|
2007-04-10 14:18:30 +00:00
|
|
|
struct system_status *global_status;
|
2007-10-19 15:31:42 +00:00
|
|
|
void (*talk_disable)(bool disable);
|
2007-10-16 01:25:17 +00:00
|
|
|
#if CONFIG_CODEC == SWCODEC
|
2009-01-05 10:31:19 +00:00
|
|
|
void (*codec_thread_do_callback)(void (*fn)(void),
|
|
|
|
unsigned int *audio_thread_id);
|
2011-04-27 03:08:23 +00:00
|
|
|
int (*codec_load_file)(const char* codec, struct codec_api *api);
|
|
|
|
int (*codec_run_proc)(void);
|
|
|
|
int (*codec_close)(void);
|
2007-10-16 01:25:17 +00:00
|
|
|
const char *(*get_codec_filename)(int cod_spec);
|
2010-05-24 16:42:32 +00:00
|
|
|
void ** (*find_array_ptr)(void **arr, void *ptr);
|
|
|
|
int (*remove_array_ptr)(void **arr, void *ptr);
|
2010-07-01 00:26:01 +00:00
|
|
|
int (*round_value_to_list32)(unsigned long value,
|
|
|
|
const unsigned long list[],
|
|
|
|
int count,
|
|
|
|
bool signd);
|
2010-05-24 16:42:32 +00:00
|
|
|
#endif /* CONFIG_CODEC == SWCODEC */
|
2009-03-06 01:08:02 +00:00
|
|
|
bool (*get_metadata)(struct mp3entry* id3, int fd, const char* trackname);
|
2007-09-19 10:40:55 +00:00
|
|
|
bool (*mp3info)(struct mp3entry *entry, const char *filename);
|
2011-08-14 15:13:00 +00:00
|
|
|
int (*count_mp3_frames)(int fd, int startpos, int filesize,
|
|
|
|
void (*progressfunc)(int),
|
|
|
|
unsigned char* buf, size_t buflen);
|
2005-09-15 05:29:26 +00:00
|
|
|
int (*create_xing_header)(int fd, long startpos, long filesize,
|
2006-02-07 20:38:55 +00:00
|
|
|
unsigned char *buf, unsigned long num_frames,
|
|
|
|
unsigned long rec_time, unsigned long header_template,
|
2011-08-14 15:13:00 +00:00
|
|
|
void (*progressfunc)(int), bool generate_toc,
|
|
|
|
unsigned char* tempbuf, size_t tempbuf_len);
|
2005-01-30 14:33:33 +00:00
|
|
|
unsigned long (*find_next_frame)(int fd, long *offset,
|
2011-03-16 18:45:03 +00:00
|
|
|
long max_offset, unsigned long reference_header);
|
2006-02-07 20:38:55 +00:00
|
|
|
|
2005-08-29 21:15:27 +00:00
|
|
|
#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
|
2004-07-29 13:59:04 +00:00
|
|
|
unsigned short (*peak_meter_scale_value)(unsigned short val,
|
|
|
|
int meterwidth);
|
2005-08-29 20:07:17 +00:00
|
|
|
void (*peak_meter_set_use_dbfs)(bool use);
|
|
|
|
bool (*peak_meter_get_use_dbfs)(void);
|
2004-08-30 19:52:45 +00:00
|
|
|
#endif
|
2005-04-25 07:42:10 +00:00
|
|
|
#ifdef HAVE_LCD_BITMAP
|
2007-11-10 13:26:11 +00:00
|
|
|
int (*read_bmp_file)(const char* filename, struct bitmap *bm, int maxsize,
|
2008-12-26 07:05:13 +00:00
|
|
|
int format, const struct custom_format *cformat);
|
2009-05-06 04:53:56 +00:00
|
|
|
int (*read_bmp_fd)(int fd, struct bitmap *bm, int maxsize,
|
|
|
|
int format, const struct custom_format *cformat);
|
|
|
|
#ifdef HAVE_JPEG
|
|
|
|
int (*read_jpeg_file)(const char* filename, struct bitmap *bm, int maxsize,
|
|
|
|
int format, const struct custom_format *cformat);
|
|
|
|
int (*read_jpeg_fd)(int fd, struct bitmap *bm, int maxsize,
|
|
|
|
int format, const struct custom_format *cformat);
|
|
|
|
#endif
|
2006-01-15 18:20:18 +00:00
|
|
|
void (*screen_dump_set_hook)(void (*hook)(int fh));
|
2005-04-25 07:42:10 +00:00
|
|
|
#endif
|
2005-09-02 05:39:09 +00:00
|
|
|
int (*show_logo)(void);
|
2006-02-18 20:51:34 +00:00
|
|
|
struct tree_context* (*tree_get_context)(void);
|
2011-10-17 18:28:35 +00:00
|
|
|
struct entry* (*tree_get_entries)(struct tree_context* t);
|
|
|
|
struct entry* (*tree_get_entry_at)(struct tree_context* t, int index);
|
|
|
|
|
2010-10-22 12:50:14 +00:00
|
|
|
void (*set_current_file)(const char* path);
|
2007-08-06 13:42:52 +00:00
|
|
|
void (*set_dirfilter)(int l_dirfilter);
|
2006-03-05 19:34:54 +00:00
|
|
|
|
2006-09-26 19:25:52 +00:00
|
|
|
#ifdef HAVE_WHEEL_POSITION
|
|
|
|
int (*wheel_status)(void);
|
|
|
|
void (*wheel_send_events)(bool send);
|
|
|
|
#endif
|
2006-10-31 11:17:00 +00:00
|
|
|
|
2007-01-12 18:34:00 +00:00
|
|
|
#ifdef IRIVER_H100_SERIES
|
|
|
|
/* Routines for the iriver_flash -plugin. */
|
|
|
|
bool (*detect_original_firmware)(void);
|
|
|
|
bool (*detect_flashed_ramimage)(void);
|
|
|
|
bool (*detect_flashed_romimage)(void);
|
2007-03-22 09:40:26 +00:00
|
|
|
#endif
|
2007-05-07 17:23:31 +00:00
|
|
|
|
2007-07-29 03:43:37 +00:00
|
|
|
void (*led)(bool on);
|
2007-09-25 02:59:42 +00:00
|
|
|
|
2007-12-09 18:48:02 +00:00
|
|
|
#if (CONFIG_CODEC == SWCODEC)
|
2008-03-24 00:35:53 +00:00
|
|
|
/* buffering API */
|
2009-10-16 19:14:41 +00:00
|
|
|
int (*bufopen)(const char *file, size_t offset, enum data_type type,
|
|
|
|
void *user_data);
|
2008-03-28 12:51:33 +00:00
|
|
|
int (*bufalloc)(const void *src, size_t size, enum data_type type);
|
|
|
|
bool (*bufclose)(int handle_id);
|
|
|
|
int (*bufseek)(int handle_id, size_t newpos);
|
|
|
|
int (*bufadvance)(int handle_id, off_t offset);
|
|
|
|
ssize_t (*bufread)(int handle_id, size_t size, void *dest);
|
|
|
|
ssize_t (*bufgetdata)(int handle_id, size_t size, void **data);
|
|
|
|
ssize_t (*bufgettail)(int handle_id, size_t size, void **data);
|
|
|
|
ssize_t (*bufcuttail)(int handle_id, size_t size);
|
|
|
|
|
|
|
|
ssize_t (*buf_handle_offset)(int handle_id);
|
|
|
|
void (*buf_set_base_handle)(int handle_id);
|
2007-12-09 18:48:02 +00:00
|
|
|
size_t (*buf_used)(void);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#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);
|
2008-08-14 22:35:00 +00:00
|
|
|
long (*tagcache_get_numeric)(const struct tagcache_search *tcs, int tag);
|
2010-09-30 13:09:50 +00:00
|
|
|
#if defined(HAVE_TC_RAMCACHE) && defined(HAVE_DIRCACHE)
|
2009-06-01 21:08:49 +00:00
|
|
|
bool (*tagcache_fill_tags)(struct mp3entry *id3, const char *filename);
|
|
|
|
#endif
|
2007-12-09 18:48:02 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef HAVE_ALBUMART
|
|
|
|
bool (*search_albumart_files)(const struct mp3entry *id3, const char *size_string,
|
|
|
|
char *buf, int buflen);
|
|
|
|
#endif
|
2007-12-29 19:46:35 +00:00
|
|
|
|
2008-09-23 09:59:06 +00:00
|
|
|
#ifdef HAVE_SEMAPHORE_OBJECTS
|
2008-09-20 22:13:39 +00:00
|
|
|
void (*semaphore_init)(struct semaphore *s, int max, int start);
|
2011-03-02 08:49:38 +00:00
|
|
|
int (*semaphore_wait)(struct semaphore *s, int timeout);
|
2008-09-20 22:13:39 +00:00
|
|
|
void (*semaphore_release)(struct semaphore *s);
|
2008-09-23 09:59:06 +00:00
|
|
|
#endif
|
2008-09-20 22:13:39 +00:00
|
|
|
|
2010-05-27 09:41:46 +00:00
|
|
|
const char *rbversion;
|
2010-07-07 12:42:15 +00:00
|
|
|
|
2008-03-24 00:35:53 +00:00
|
|
|
/* new stuff at the end, sort into place next time
|
|
|
|
the API gets incompatible */
|
2006-01-15 18:20:18 +00:00
|
|
|
};
|
2005-10-01 10:46:13 +00:00
|
|
|
|
2006-01-15 18:20:18 +00:00
|
|
|
/* plugin header */
|
|
|
|
struct plugin_header {
|
2010-09-09 16:17:21 +00:00
|
|
|
struct lc_header lc_hdr; /* must be the first */
|
2009-01-16 10:34:40 +00:00
|
|
|
enum plugin_status(*entry_point)(const void*);
|
|
|
|
const struct plugin_api **api;
|
2003-06-29 16:33:04 +00:00
|
|
|
};
|
2006-11-18 02:18:29 +00:00
|
|
|
|
2006-01-15 18:20:18 +00:00
|
|
|
#ifdef PLUGIN
|
2010-06-21 16:53:00 +00:00
|
|
|
#if (CONFIG_PLATFORM & PLATFORM_NATIVE)
|
2006-01-15 18:20:18 +00:00
|
|
|
extern unsigned char plugin_start_addr[];
|
|
|
|
extern unsigned char plugin_end_addr[];
|
|
|
|
#define PLUGIN_HEADER \
|
2009-02-27 07:30:41 +00:00
|
|
|
const struct plugin_api *rb DATA_ATTR; \
|
2006-01-15 18:20:18 +00:00
|
|
|
const struct plugin_header __header \
|
|
|
|
__attribute__ ((section (".header")))= { \
|
2010-09-09 16:17:21 +00:00
|
|
|
{ PLUGIN_MAGIC, TARGET_ID, PLUGIN_API_VERSION, \
|
|
|
|
plugin_start_addr, plugin_end_addr }, plugin__start, &rb };
|
2010-06-21 16:53:00 +00:00
|
|
|
#else /* PLATFORM_HOSTED */
|
2006-01-16 23:20:58 +00:00
|
|
|
#define PLUGIN_HEADER \
|
2009-02-27 07:30:41 +00:00
|
|
|
const struct plugin_api *rb DATA_ATTR; \
|
2007-10-02 09:08:08 +00:00
|
|
|
const struct plugin_header __header \
|
|
|
|
__attribute__((visibility("default"))) = { \
|
2010-09-09 16:29:21 +00:00
|
|
|
{ PLUGIN_MAGIC, TARGET_ID, PLUGIN_API_VERSION, NULL, NULL }, \
|
2010-09-09 16:17:21 +00:00
|
|
|
plugin__start, &rb };
|
2010-06-21 16:53:00 +00:00
|
|
|
#endif /* CONFIG_PLATFORM */
|
2006-11-18 02:18:29 +00:00
|
|
|
#endif /* PLUGIN */
|
2003-06-29 16:33:04 +00:00
|
|
|
|
2008-05-13 09:57:56 +00:00
|
|
|
int plugin_load(const char* plugin, const void* parameter);
|
2007-04-21 18:38:25 +00:00
|
|
|
void* plugin_get_audio_buffer(size_t *buffer_size);
|
2006-10-31 11:17:00 +00:00
|
|
|
|
2007-04-10 14:18:30 +00:00
|
|
|
/* plugin_tsr,
|
2006-10-31 11:17:00 +00:00
|
|
|
callback returns true to allow the new plugin to load,
|
|
|
|
reenter means the currently running plugin is being reloaded */
|
|
|
|
void plugin_tsr(bool (*exit_callback)(bool reenter));
|
2003-06-29 16:33:04 +00:00
|
|
|
|
|
|
|
/* defined by the plugin */
|
2009-01-16 10:34:40 +00:00
|
|
|
extern const struct plugin_api *rb;
|
2011-09-18 16:16:50 +00:00
|
|
|
enum plugin_status plugin_start(const void* parameter);
|
2010-08-24 14:30:46 +00:00
|
|
|
enum plugin_status plugin__start(const void* parameter)
|
2006-03-16 17:06:20 +00:00
|
|
|
NO_PROF_ATTR;
|
2003-06-29 16:33:04 +00:00
|
|
|
|
2008-05-19 14:37:16 +00:00
|
|
|
#endif /* __PCTOOL__ */
|
2003-06-29 16:33:04 +00:00
|
|
|
#endif
|