forked from len0rd/rockbox
Finally, the archos directory sandbox works in the same way for both X11 and win32 simulators. Unfortunately, this breaks the VC++ compatibility. Also, the plugin API now supports DEBUGF. Last, but not least, we have a new plugin, vbrfix.rock.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@4726 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
5fc1b64ae0
commit
a6142ab7ab
21 changed files with 415 additions and 397 deletions
|
@ -21,6 +21,7 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <atoi.h>
|
#include <atoi.h>
|
||||||
#include <timefuncs.h>
|
#include <timefuncs.h>
|
||||||
|
#include "debug.h"
|
||||||
#include "button.h"
|
#include "button.h"
|
||||||
#include "lcd.h"
|
#include "lcd.h"
|
||||||
#include "dir.h"
|
#include "dir.h"
|
||||||
|
@ -39,6 +40,7 @@
|
||||||
#include "backlight.h"
|
#include "backlight.h"
|
||||||
#include "ata.h"
|
#include "ata.h"
|
||||||
#include "talk.h"
|
#include "talk.h"
|
||||||
|
#include "mp3data.h"
|
||||||
|
|
||||||
#ifdef HAVE_LCD_BITMAP
|
#ifdef HAVE_LCD_BITMAP
|
||||||
#include "widgets.h"
|
#include "widgets.h"
|
||||||
|
@ -48,11 +50,10 @@
|
||||||
#include <debug.h>
|
#include <debug.h>
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#include "plugin-win32.h"
|
#include "plugin-win32.h"
|
||||||
#define PREFIX(_x_) _x_
|
|
||||||
#else
|
#else
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
#define PREFIX(_x_) x11_ ## _x_
|
|
||||||
#endif
|
#endif
|
||||||
|
#define PREFIX(_x_) sim_ ## _x_
|
||||||
#else
|
#else
|
||||||
#define PREFIX(_x_) _x_
|
#define PREFIX(_x_) _x_
|
||||||
#endif
|
#endif
|
||||||
|
@ -213,6 +214,12 @@ static struct plugin_api rockbox_api = {
|
||||||
#ifdef HAVE_LCD_BITMAP
|
#ifdef HAVE_LCD_BITMAP
|
||||||
font_get,
|
font_get,
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(DEBUG) || defined(SIMULATOR)
|
||||||
|
debugf,
|
||||||
|
#endif
|
||||||
|
mp3info,
|
||||||
|
count_mp3_frames,
|
||||||
|
create_xing_header,
|
||||||
};
|
};
|
||||||
|
|
||||||
int plugin_load(char* plugin, void* parameter)
|
int plugin_load(char* plugin, void* parameter)
|
||||||
|
@ -246,11 +253,8 @@ int plugin_load(char* plugin, void* parameter)
|
||||||
lcd_clear_display();
|
lcd_clear_display();
|
||||||
#endif
|
#endif
|
||||||
#ifdef SIMULATOR
|
#ifdef SIMULATOR
|
||||||
#ifdef WIN32
|
|
||||||
snprintf(path, sizeof path, "%s", plugin);
|
|
||||||
#else
|
|
||||||
snprintf(path, sizeof path, "archos%s", plugin);
|
snprintf(path, sizeof path, "archos%s", plugin);
|
||||||
#endif
|
|
||||||
pd = dlopen(path, RTLD_NOW);
|
pd = dlopen(path, RTLD_NOW);
|
||||||
if (!pd) {
|
if (!pd) {
|
||||||
snprintf(buf, sizeof buf, "Can't open %s", plugin);
|
snprintf(buf, sizeof buf, "Can't open %s", plugin);
|
||||||
|
|
|
@ -45,6 +45,16 @@
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
#include "thread.h"
|
#include "thread.h"
|
||||||
|
|
||||||
|
#ifdef PLUGIN
|
||||||
|
#if defined(DEBUG) || defined(SIMULATOR)
|
||||||
|
#define DEBUGF rb->debugf
|
||||||
|
#define LDEBUGF rb->debugf
|
||||||
|
#else
|
||||||
|
#define DEBUGF(...)
|
||||||
|
#define LDEBUGF(...)
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/* increase this every time the api struct changes */
|
/* increase this every time the api struct changes */
|
||||||
#define PLUGIN_API_VERSION 14
|
#define PLUGIN_API_VERSION 14
|
||||||
|
|
||||||
|
@ -235,6 +245,16 @@ struct plugin_api {
|
||||||
#ifdef HAVE_LCD_BITMAP
|
#ifdef HAVE_LCD_BITMAP
|
||||||
struct font* (*font_get)(int font);
|
struct font* (*font_get)(int font);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(DEBUG) || defined(SIMULATOR)
|
||||||
|
void (*debugf)(char *fmt, ...);
|
||||||
|
#endif
|
||||||
|
bool (*mp3info)(struct mp3entry *entry, char *filename) ;
|
||||||
|
int (*count_mp3_frames)(int fd, int startpos, int filesize,
|
||||||
|
void (*progressfunc)(int));
|
||||||
|
int (*create_xing_header)(int fd, int startpos, int filesize,
|
||||||
|
unsigned char *buf, int num_frames,
|
||||||
|
unsigned long header_template,
|
||||||
|
void (*progressfunc)(int), bool generate_toc);
|
||||||
};
|
};
|
||||||
|
|
||||||
/* defined by the plugin loader (plugin.c) */
|
/* defined by the plugin loader (plugin.c) */
|
||||||
|
|
|
@ -15,7 +15,7 @@ FIRMWARE = ../../firmware
|
||||||
INCLUDES = -I$(FIRMWARE)/include -I$(FIRMWARE)/export -I$(FIRMWARE)/common \
|
INCLUDES = -I$(FIRMWARE)/include -I$(FIRMWARE)/export -I$(FIRMWARE)/common \
|
||||||
-I$(FIRMWARE)/drivers -I.. -Ilib
|
-I$(FIRMWARE)/drivers -I.. -Ilib
|
||||||
CFLAGS = -O -W -Wall -m1 -nostdlib -ffreestanding -Wstrict-prototypes \
|
CFLAGS = -O -W -Wall -m1 -nostdlib -ffreestanding -Wstrict-prototypes \
|
||||||
$(INCLUDES) $(TARGET) $(EXTRA_DEFINES) -DMEM=${MEM}
|
$(INCLUDES) $(TARGET) $(EXTRA_DEFINES) -DMEM=${MEM} -DPLUGIN
|
||||||
|
|
||||||
LDS := plugin.lds
|
LDS := plugin.lds
|
||||||
LINKFILE := $(OBJDIR)/pluginlink.lds
|
LINKFILE := $(OBJDIR)/pluginlink.lds
|
||||||
|
|
280
apps/plugins/vbrfix.c
Normal file
280
apps/plugins/vbrfix.c
Normal file
|
@ -0,0 +1,280 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* __________ __ ___.
|
||||||
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||||
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||||
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||||
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||||
|
* \/ \/ \/ \/ \/
|
||||||
|
* $Id$
|
||||||
|
*
|
||||||
|
* Copyright (C) 2004 Linus Nielsen Feltzing
|
||||||
|
*
|
||||||
|
* All files in this archive are subject to the GNU General Public License.
|
||||||
|
* See the file COPYING in the source tree root for full license agreement.
|
||||||
|
*
|
||||||
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||||
|
* KIND, either express or implied.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
#include "plugin.h"
|
||||||
|
|
||||||
|
static struct plugin_api* rb;
|
||||||
|
|
||||||
|
static char *mp3buf;
|
||||||
|
static int mp3buflen;
|
||||||
|
|
||||||
|
static void xingupdate(int percent)
|
||||||
|
{
|
||||||
|
char buf[32];
|
||||||
|
|
||||||
|
rb->snprintf(buf, 32, "%d%%", percent);
|
||||||
|
rb->lcd_puts(0, 1, buf);
|
||||||
|
#ifdef HAVE_LCD_BITMAP
|
||||||
|
rb->lcd_update();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static int insert_data_in_file(char *fname, int fpos, char *buf, int num_bytes)
|
||||||
|
{
|
||||||
|
int readlen;
|
||||||
|
int rc;
|
||||||
|
int orig_fd, fd;
|
||||||
|
char tmpname[MAX_PATH];
|
||||||
|
|
||||||
|
rb->snprintf(tmpname, MAX_PATH, "%s.tmp", fname);
|
||||||
|
|
||||||
|
orig_fd = rb->open(fname, O_RDONLY);
|
||||||
|
if(orig_fd < 0) {
|
||||||
|
return 10*orig_fd - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
fd = rb->creat(tmpname, O_WRONLY);
|
||||||
|
if(fd < 0) {
|
||||||
|
rb->close(orig_fd);
|
||||||
|
return 10*fd - 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* First, copy the initial portion (the ID3 tag) */
|
||||||
|
if(fpos) {
|
||||||
|
readlen = rb->read(orig_fd, mp3buf, fpos);
|
||||||
|
if(readlen < 0) {
|
||||||
|
rb->close(fd);
|
||||||
|
rb->close(orig_fd);
|
||||||
|
return 10*readlen - 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = rb->write(fd, mp3buf, readlen);
|
||||||
|
if(rc < 0) {
|
||||||
|
rb->close(fd);
|
||||||
|
rb->close(orig_fd);
|
||||||
|
return 10*rc - 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Now insert the data into the file */
|
||||||
|
rc = rb->write(fd, buf, num_bytes);
|
||||||
|
if(rc < 0) {
|
||||||
|
rb->close(orig_fd);
|
||||||
|
rb->close(fd);
|
||||||
|
return 10*rc - 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Copy the file */
|
||||||
|
do {
|
||||||
|
readlen = rb->read(orig_fd, mp3buf, mp3buflen);
|
||||||
|
if(readlen < 0) {
|
||||||
|
rb->close(fd);
|
||||||
|
rb->close(orig_fd);
|
||||||
|
return 10*readlen - 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = rb->write(fd, mp3buf, readlen);
|
||||||
|
if(rc < 0) {
|
||||||
|
rb->close(fd);
|
||||||
|
rb->close(orig_fd);
|
||||||
|
return 10*rc - 8;
|
||||||
|
}
|
||||||
|
} while(readlen > 0);
|
||||||
|
|
||||||
|
rb->close(fd);
|
||||||
|
rb->close(orig_fd);
|
||||||
|
|
||||||
|
/* Remove the old file */
|
||||||
|
rc = rb->remove(fname);
|
||||||
|
if(rc < 0) {
|
||||||
|
return 10*rc - 9;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Replace the old file with the new */
|
||||||
|
rc = rb->rename(tmpname, fname);
|
||||||
|
if(rc < 0) {
|
||||||
|
return 10*rc - 9;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void fileerror(int rc)
|
||||||
|
{
|
||||||
|
rb->splash(HZ*2, true, "File error: %d", rc);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const unsigned char empty_id3_header[] =
|
||||||
|
{
|
||||||
|
'I', 'D', '3', 0x04, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x1f, 0x76 /* Size is 4096 minus 10 bytes for the header */
|
||||||
|
};
|
||||||
|
|
||||||
|
static bool vbr_fix(char *selected_file)
|
||||||
|
{
|
||||||
|
unsigned char xingbuf[1500];
|
||||||
|
struct mp3entry entry;
|
||||||
|
int fd;
|
||||||
|
int rc;
|
||||||
|
int flen;
|
||||||
|
int num_frames;
|
||||||
|
int numbytes;
|
||||||
|
int framelen;
|
||||||
|
int unused_space;
|
||||||
|
|
||||||
|
rb->lcd_clear_display();
|
||||||
|
rb->lcd_puts_scroll(0, 0, selected_file);
|
||||||
|
#ifdef HAVE_LCD_BITMAP
|
||||||
|
rb->lcd_update();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
xingupdate(0);
|
||||||
|
|
||||||
|
rc = rb->mp3info(&entry, selected_file);
|
||||||
|
if(rc < 0) {
|
||||||
|
fileerror(rc);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
fd = rb->open(selected_file, O_RDWR);
|
||||||
|
if(fd < 0) {
|
||||||
|
fileerror(fd);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
flen = rb->lseek(fd, 0, SEEK_END);
|
||||||
|
|
||||||
|
xingupdate(0);
|
||||||
|
|
||||||
|
num_frames = rb->count_mp3_frames(fd, entry.first_frame_offset,
|
||||||
|
flen, xingupdate);
|
||||||
|
|
||||||
|
if(num_frames) {
|
||||||
|
/* Note: We don't need to pass a template header because it will be
|
||||||
|
taken from the mpeg stream */
|
||||||
|
framelen = rb->create_xing_header(fd, entry.first_frame_offset,
|
||||||
|
flen, xingbuf, num_frames,
|
||||||
|
0, xingupdate, true);
|
||||||
|
|
||||||
|
/* Try to fit the Xing header first in the stream. Replace the existing
|
||||||
|
VBR header if there is one, else see if there is room between the
|
||||||
|
ID3 tag and the first MP3 frame. */
|
||||||
|
if(entry.first_frame_offset - entry.id3v2len >=
|
||||||
|
(unsigned int)framelen) {
|
||||||
|
DEBUGF("Using existing space between ID3 and first frame\n");
|
||||||
|
|
||||||
|
/* Seek to the beginning of the unused space */
|
||||||
|
rc = rb->lseek(fd, entry.id3v2len, SEEK_SET);
|
||||||
|
if(rc < 0) {
|
||||||
|
rb->close(fd);
|
||||||
|
fileerror(rc);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
unused_space =
|
||||||
|
entry.first_frame_offset - entry.id3v2len - framelen;
|
||||||
|
|
||||||
|
/* Fill the unused space with 0's (using the MP3 buffer)
|
||||||
|
and write it to the file */
|
||||||
|
if(unused_space)
|
||||||
|
{
|
||||||
|
rb->memset(mp3buf, 0, unused_space);
|
||||||
|
rc = rb->write(fd, mp3buf, unused_space);
|
||||||
|
if(rc < 0) {
|
||||||
|
rb->close(fd);
|
||||||
|
fileerror(rc);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Then write the Xing header */
|
||||||
|
rc = rb->write(fd, xingbuf, framelen);
|
||||||
|
if(rc < 0) {
|
||||||
|
rb->close(fd);
|
||||||
|
fileerror(rc);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
rb->close(fd);
|
||||||
|
} else {
|
||||||
|
/* If not, insert some space. If there is an ID3 tag in the
|
||||||
|
file we only insert just enough to squeeze the Xing header
|
||||||
|
in. If not, we insert an additional empty ID3 tag of 4K. */
|
||||||
|
|
||||||
|
rb->close(fd);
|
||||||
|
|
||||||
|
/* Nasty trick alert! The insert_data_in_file() function
|
||||||
|
uses the MP3 buffer when copying the data. We assume
|
||||||
|
that the ID3 tag isn't longer than 1MB so the xing
|
||||||
|
buffer won't be overwritten. */
|
||||||
|
|
||||||
|
if(entry.first_frame_offset) {
|
||||||
|
DEBUGF("Inserting %d bytes\n", framelen);
|
||||||
|
numbytes = framelen;
|
||||||
|
} else {
|
||||||
|
DEBUGF("Inserting 4096+%d bytes\n", framelen);
|
||||||
|
numbytes = 4096 + framelen;
|
||||||
|
|
||||||
|
rb->memset(mp3buf + 0x100000, 0, numbytes);
|
||||||
|
|
||||||
|
/* Insert the ID3 header */
|
||||||
|
rb->memcpy(mp3buf + 0x100000, empty_id3_header,
|
||||||
|
sizeof(empty_id3_header));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Copy the Xing header */
|
||||||
|
rb->memcpy(mp3buf + 0x100000 + numbytes - framelen,
|
||||||
|
xingbuf, framelen);
|
||||||
|
|
||||||
|
rc = insert_data_in_file(selected_file,
|
||||||
|
entry.first_frame_offset,
|
||||||
|
mp3buf + 0x100000, numbytes);
|
||||||
|
|
||||||
|
if(rc < 0) {
|
||||||
|
fileerror(rc);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
xingupdate(100);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Not a VBR file */
|
||||||
|
DEBUGF("Not a VBR file\n");
|
||||||
|
rb->splash(HZ*2, true, "Not a VBR file");
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum plugin_status plugin_start(struct plugin_api* api, void *parameter)
|
||||||
|
{
|
||||||
|
TEST_PLUGIN_API(api);
|
||||||
|
|
||||||
|
rb = api;
|
||||||
|
|
||||||
|
if (!parameter)
|
||||||
|
return PLUGIN_ERROR;
|
||||||
|
|
||||||
|
mp3buf = rb->plugin_get_mp3_buffer(&mp3buflen);
|
||||||
|
|
||||||
|
vbr_fix(parameter);
|
||||||
|
|
||||||
|
return PLUGIN_OK;
|
||||||
|
}
|
|
@ -3,3 +3,4 @@ txt,viewer.rock,55 55 55 55 55 55
|
||||||
jpg,jpeg.rock,18 24 3C 3C 24 18
|
jpg,jpeg.rock,18 24 3C 3C 24 18
|
||||||
ucl,rockbox_flash.rock,2A 7F 41 41 7F 2A
|
ucl,rockbox_flash.rock,2A 7F 41 41 7F 2A
|
||||||
rvf,video.rock,5D 7F 5D 7F 5D 7F
|
rvf,video.rock,5D 7F 5D 7F 5D 7F
|
||||||
|
mp3,vbrfix.rock,10 08 58 38 04 02
|
||||||
|
|
|
@ -75,18 +75,6 @@ typedef ssize_t (*write_func)(int fd, const void *buf, size_t count);
|
||||||
typedef void (*qsort_func)(void *base, size_t nmemb, size_t size,
|
typedef void (*qsort_func)(void *base, size_t nmemb, size_t size,
|
||||||
int(*_compar)(const void *, const void *));
|
int(*_compar)(const void *, const void *));
|
||||||
|
|
||||||
|
|
||||||
#if defined(__MINGW32__) && defined(SIMULATOR)
|
|
||||||
extern int open(const char*, int flags, ...);
|
|
||||||
extern int close(int fd);
|
|
||||||
extern int read(int, void*, unsigned int);
|
|
||||||
extern long lseek(int, long, int);
|
|
||||||
extern int creat(const char *, int);
|
|
||||||
extern int write(int, const void*, unsigned int);
|
|
||||||
extern int remove(const char*);
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#ifndef SIMULATOR
|
#ifndef SIMULATOR
|
||||||
extern int open(const char* pathname, int flags);
|
extern int open(const char* pathname, int flags);
|
||||||
extern int close(int fd);
|
extern int close(int fd);
|
||||||
|
@ -100,6 +88,5 @@ extern int rename(const char* path, const char* newname);
|
||||||
extern int ftruncate(int fd, off_t length);
|
extern int ftruncate(int fd, off_t length);
|
||||||
extern int filesize(int fd);
|
extern int filesize(int fd);
|
||||||
#endif /* SIMULATOR */
|
#endif /* SIMULATOR */
|
||||||
#endif /* __MINGW32__ */
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -16,35 +16,30 @@
|
||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#ifndef _X11_DIR_H_
|
#ifndef _SIM_DIR_H_
|
||||||
#define _X11_DIR_H_
|
#define _SIM_DIR_H_
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
typedef void DIR;
|
|
||||||
|
|
||||||
#define DIRFUNCTIONS_DEFINED /* prevent those prototypes */
|
#define DIRFUNCTIONS_DEFINED /* prevent those prototypes */
|
||||||
#define dirent x11_dirent
|
#define dirent sim_dirent
|
||||||
#include "../../firmware/include/dir.h"
|
#include "../../firmware/include/dir.h"
|
||||||
#undef dirent
|
#undef dirent
|
||||||
|
|
||||||
typedef void * MYDIR;
|
typedef void * MYDIR;
|
||||||
|
|
||||||
extern MYDIR *x11_opendir(const char *name);
|
extern MYDIR *sim_opendir(const char *name);
|
||||||
extern struct x11_dirent* x11_readdir(MYDIR* dir);
|
extern struct sim_dirent* sim_readdir(MYDIR* dir);
|
||||||
extern int x11_closedir(MYDIR *dir);
|
extern int sim_closedir(MYDIR *dir);
|
||||||
extern int x11_mkdir(char *name, int mode);
|
extern int sim_mkdir(char *name, int mode);
|
||||||
extern int x11_rmdir(char *name);
|
extern int sim_rmdir(char *name);
|
||||||
|
|
||||||
#ifndef NO_REDEFINES_PLEASE
|
|
||||||
|
|
||||||
#define DIR MYDIR
|
#define DIR MYDIR
|
||||||
#define dirent x11_dirent
|
#define dirent sim_dirent
|
||||||
#define opendir(x) x11_opendir(x)
|
#define opendir(x) sim_opendir(x)
|
||||||
#define readdir(x) x11_readdir(x)
|
#define readdir(x) sim_readdir(x)
|
||||||
#define closedir(x) x11_closedir(x)
|
#define closedir(x) sim_closedir(x)
|
||||||
#define mkdir(x, y) x11_mkdir(x, y)
|
#define mkdir(x, y) sim_mkdir(x, y)
|
||||||
#define rmdir(x) x11_rmdir(x)
|
#define rmdir(x) sim_rmdir(x)
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -17,30 +17,46 @@
|
||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#ifndef ROCKBOX_FILE_H
|
#ifndef _SIM_FILE_H_
|
||||||
#define ROCKBOX_FILE_H
|
#define _SIM_FILE_H_
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#include <io.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#else
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
int x11_open(const char *name, int opts);
|
#ifdef WIN32
|
||||||
int x11_close(int fd);
|
#ifndef _commit
|
||||||
int x11_filesize(int fd);
|
extern int _commit( int handle );
|
||||||
int x11_creat(const char *name, mode_t mode);
|
#endif
|
||||||
int x11_remove(char *name);
|
#endif
|
||||||
int x11_rename(char *oldpath, char *newpath);
|
|
||||||
|
int sim_open(const char *name, int opts);
|
||||||
|
int sim_close(int fd);
|
||||||
|
int sim_rename(const char *oldpath, const char *newpath);
|
||||||
|
int sim_filesize(int fd);
|
||||||
|
int sim_creat(const char *name, mode_t mode);
|
||||||
|
int sim_remove(const char *name);
|
||||||
|
|
||||||
#ifndef NO_REDEFINES_PLEASE
|
#ifndef NO_REDEFINES_PLEASE
|
||||||
#define open(x,y) x11_open(x,y)
|
#define open(x,y) sim_open(x,y)
|
||||||
#define close(x) x11_close(x)
|
#define close(x) sim_close(x)
|
||||||
#define filesize(x) x11_filesize(x)
|
#define filesize(x) sim_filesize(x)
|
||||||
#define creat(x,y) x11_creat(x,y)
|
#define creat(x,y) sim_creat(x,y)
|
||||||
#define remove(x) x11_remove(x)
|
#define remove(x) sim_remove(x)
|
||||||
#define rename(x,y) x11_rename(x,y)
|
#define rename(x,y) sim_rename(x,y)
|
||||||
|
#ifdef WIN32
|
||||||
|
#define fsync _commit
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "../../firmware/include/file.h"
|
#include "../../firmware/include/file.h"
|
||||||
|
|
||||||
|
#ifndef WIN32
|
||||||
int open(const char* pathname, int flags);
|
int open(const char* pathname, int flags);
|
||||||
int close(int fd);
|
int close(int fd);
|
||||||
int printf(const char *format, ...);
|
int printf(const char *format, ...);
|
||||||
|
@ -50,5 +66,6 @@ int fsync(int fd);
|
||||||
off_t lseek(int fildes, off_t offset, int whence);
|
off_t lseek(int fildes, off_t offset, int whence);
|
||||||
ssize_t read(int fd, void *buf, size_t count);
|
ssize_t read(int fd, void *buf, size_t count);
|
||||||
ssize_t write(int fd, const void *buf, size_t count);
|
ssize_t write(int fd, const void *buf, size_t count);
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -24,7 +24,7 @@
|
||||||
#ifdef __FreeBSD__
|
#ifdef __FreeBSD__
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <sys/mount.h>
|
#include <sys/mount.h>
|
||||||
#else
|
#elif !defined(WIN32)
|
||||||
#include <sys/vfs.h>
|
#include <sys/vfs.h>
|
||||||
#endif
|
#endif
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
|
@ -34,9 +34,11 @@
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
#define DIRFUNCTIONS_DEFINED /* prevent those prototypes */
|
#define DIRFUNCTIONS_DEFINED /* prevent those prototypes */
|
||||||
#define dirent x11_dirent
|
#define dirent sim_dirent
|
||||||
|
#define DIR SIMDIR
|
||||||
#include "../../firmware/include/dir.h"
|
#include "../../firmware/include/dir.h"
|
||||||
#undef dirent
|
#undef dirent
|
||||||
|
#undef DIR
|
||||||
|
|
||||||
#define SIMULATOR_ARCHOS_ROOT "archos"
|
#define SIMULATOR_ARCHOS_ROOT "archos"
|
||||||
|
|
||||||
|
@ -47,7 +49,7 @@ struct mydir {
|
||||||
|
|
||||||
typedef struct mydir MYDIR;
|
typedef struct mydir MYDIR;
|
||||||
|
|
||||||
MYDIR *x11_opendir(const char *name)
|
MYDIR *sim_opendir(const char *name)
|
||||||
{
|
{
|
||||||
char buffer[256]; /* sufficiently big */
|
char buffer[256]; /* sufficiently big */
|
||||||
DIR *dir;
|
DIR *dir;
|
||||||
|
@ -70,15 +72,15 @@ MYDIR *x11_opendir(const char *name)
|
||||||
return (MYDIR *)0;
|
return (MYDIR *)0;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct x11_dirent *x11_readdir(MYDIR *dir)
|
struct sim_dirent *sim_readdir(MYDIR *dir)
|
||||||
{
|
{
|
||||||
char buffer[512]; /* sufficiently big */
|
char buffer[512]; /* sufficiently big */
|
||||||
static struct x11_dirent secret;
|
static struct sim_dirent secret;
|
||||||
struct stat s;
|
struct stat s;
|
||||||
struct dirent *x11 = (readdir)(dir->dir);
|
struct dirent *x11 = (readdir)(dir->dir);
|
||||||
|
|
||||||
if(!x11)
|
if(!x11)
|
||||||
return (struct x11_dirent *)0;
|
return (struct sim_dirent *)0;
|
||||||
|
|
||||||
strcpy(secret.d_name, x11->d_name);
|
strcpy(secret.d_name, x11->d_name);
|
||||||
|
|
||||||
|
@ -93,7 +95,7 @@ struct x11_dirent *x11_readdir(MYDIR *dir)
|
||||||
return &secret;
|
return &secret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void x11_closedir(MYDIR *dir)
|
void sim_closedir(MYDIR *dir)
|
||||||
{
|
{
|
||||||
free(dir->name);
|
free(dir->name);
|
||||||
(closedir)(dir->dir);
|
(closedir)(dir->dir);
|
||||||
|
@ -102,7 +104,7 @@ void x11_closedir(MYDIR *dir)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int x11_open(const char *name, int opts)
|
int sim_open(const char *name, int opts)
|
||||||
{
|
{
|
||||||
char buffer[256]; /* sufficiently big */
|
char buffer[256]; /* sufficiently big */
|
||||||
|
|
||||||
|
@ -115,12 +117,12 @@ int x11_open(const char *name, int opts)
|
||||||
return (open)(name, opts);
|
return (open)(name, opts);
|
||||||
}
|
}
|
||||||
|
|
||||||
int x11_close(int fd)
|
int sim_close(int fd)
|
||||||
{
|
{
|
||||||
return (close)(fd);
|
return (close)(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
int x11_creat(const char *name, mode_t mode)
|
int sim_creat(const char *name, mode_t mode)
|
||||||
{
|
{
|
||||||
char buffer[256]; /* sufficiently big */
|
char buffer[256]; /* sufficiently big */
|
||||||
(void)mode;
|
(void)mode;
|
||||||
|
@ -133,20 +135,22 @@ int x11_creat(const char *name, mode_t mode)
|
||||||
return (creat)(name, 0666);
|
return (creat)(name, 0666);
|
||||||
}
|
}
|
||||||
|
|
||||||
int x11_mkdir(const char *name, mode_t mode)
|
int sim_mkdir(const char *name, mode_t mode)
|
||||||
{
|
{
|
||||||
char buffer[256]; /* sufficiently big */
|
char buffer[256]; /* sufficiently big */
|
||||||
(void)mode;
|
(void)mode;
|
||||||
if(name[0] == '/') {
|
|
||||||
sprintf(buffer, "%s%s", SIMULATOR_ARCHOS_ROOT, name);
|
sprintf(buffer, "%s%s", SIMULATOR_ARCHOS_ROOT, name);
|
||||||
|
|
||||||
debugf("We create the real directory '%s'\n", buffer);
|
debugf("We create the real directory '%s'\n", buffer);
|
||||||
return (mkdir)(buffer, 0666);
|
#ifdef WIN32
|
||||||
}
|
return (mkdir)(buffer);
|
||||||
return (mkdir)(name, 0666);
|
#else
|
||||||
|
return (mkdir)(buffer, 0666);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int x11_rmdir(const char *name)
|
int sim_rmdir(const char *name)
|
||||||
{
|
{
|
||||||
char buffer[256]; /* sufficiently big */
|
char buffer[256]; /* sufficiently big */
|
||||||
if(name[0] == '/') {
|
if(name[0] == '/') {
|
||||||
|
@ -158,7 +162,7 @@ int x11_rmdir(const char *name)
|
||||||
return (rmdir)(name);
|
return (rmdir)(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
int x11_remove(char *name)
|
int sim_remove(const char *name)
|
||||||
{
|
{
|
||||||
char buffer[256]; /* sufficiently big */
|
char buffer[256]; /* sufficiently big */
|
||||||
|
|
||||||
|
@ -171,7 +175,7 @@ int x11_remove(char *name)
|
||||||
return (remove)(name);
|
return (remove)(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
int x11_rename(char *oldpath, char* newpath)
|
int sim_rename(const char *oldpath, const char* newpath)
|
||||||
{
|
{
|
||||||
char buffer1[256];
|
char buffer1[256];
|
||||||
char buffer2[256];
|
char buffer2[256];
|
||||||
|
@ -186,7 +190,7 @@ int x11_rename(char *oldpath, char* newpath)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int x11_filesize(int fd)
|
int sim_filesize(int fd)
|
||||||
{
|
{
|
||||||
int old = lseek(fd, 0, SEEK_CUR);
|
int old = lseek(fd, 0, SEEK_CUR);
|
||||||
int size = lseek(fd, 0, SEEK_END);
|
int size = lseek(fd, 0, SEEK_END);
|
||||||
|
@ -197,6 +201,10 @@ int x11_filesize(int fd)
|
||||||
|
|
||||||
void fat_size(unsigned int* size, unsigned int* free)
|
void fat_size(unsigned int* size, unsigned int* free)
|
||||||
{
|
{
|
||||||
|
#ifdef WIN32
|
||||||
|
*size = 2049;
|
||||||
|
*free = 1037;
|
||||||
|
#else
|
||||||
struct statfs fs;
|
struct statfs fs;
|
||||||
|
|
||||||
if (!statfs(".", &fs)) {
|
if (!statfs(".", &fs)) {
|
||||||
|
@ -213,4 +221,5 @@ void fat_size(unsigned int* size, unsigned int* free)
|
||||||
if (free)
|
if (free)
|
||||||
*free = 0;
|
*free = 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
|
@ -96,6 +96,8 @@ ifeq ($(DISPLAY),-DHAVE_LCD_BITMAP)
|
||||||
else
|
else
|
||||||
LCDSRSC = lcd-playersim.c lcd-player.c lcd-player-charset.c font-player.c
|
LCDSRSC = lcd-playersim.c lcd-player.c lcd-player-charset.c font-player.c
|
||||||
endif
|
endif
|
||||||
|
COMMONSRCS = io.c
|
||||||
|
|
||||||
FIRMSRCS = $(LCDSRSC) id3.c mp3data.c usb.c mpeg.c mp3_playback.c \
|
FIRMSRCS = $(LCDSRSC) id3.c mp3data.c usb.c mpeg.c mp3_playback.c \
|
||||||
powermgmt.c power.c sprintf.c buffer.c lcd-common.c strtok.c random.c \
|
powermgmt.c power.c sprintf.c buffer.c lcd-common.c strtok.c random.c \
|
||||||
timefuncs.c
|
timefuncs.c
|
||||||
|
@ -111,9 +113,9 @@ ifeq ($(DISPLAY),-DHAVE_LCD_BITMAP)
|
||||||
APPS += bmp.c widgets.c
|
APPS += bmp.c widgets.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
SRCS = button.c dir-win32.c lcd-win32.c panic-win32.c thread-win32.c \
|
SRCS = button.c lcd-win32.c panic-win32.c thread-win32.c \
|
||||||
debug-win32.c kernel.c string-win32.c uisw32.c stubs.c \
|
debug-win32.c kernel.c string-win32.c uisw32.c stubs.c \
|
||||||
$(APPS) $(MENUS) $(FIRMSRCS) sim_icons.c io.c
|
$(APPS) $(MENUS) $(FIRMSRCS) $(COMMONSRCS) sim_icons.c
|
||||||
|
|
||||||
OBJS := $(OBJDIR)/lang.o $(SRCS:%.c=$(OBJDIR)/%.o) $(OBJDIR)/uisw32-res.o
|
OBJS := $(OBJDIR)/lang.o $(SRCS:%.c=$(OBJDIR)/%.o) $(OBJDIR)/uisw32-res.o
|
||||||
|
|
||||||
|
@ -303,6 +305,9 @@ $(OBJDIR)/font-player.o: $(SIMCOMMON)/font-player.c
|
||||||
$(OBJDIR)/sim_icons.o: $(SIMCOMMON)/sim_icons.c
|
$(OBJDIR)/sim_icons.o: $(SIMCOMMON)/sim_icons.c
|
||||||
$(CC) $(CFLAGS) -c $< -o $@
|
$(CC) $(CFLAGS) -c $< -o $@
|
||||||
|
|
||||||
|
$(OBJDIR)/io.o: $(SIMCOMMON)/io.c
|
||||||
|
$(CC) $(CFLAGS) -c $< -o $@
|
||||||
|
|
||||||
$(OBJDIR)/lcd-playersim.o: $(SIMCOMMON)/lcd-playersim.c
|
$(OBJDIR)/lcd-playersim.o: $(SIMCOMMON)/lcd-playersim.c
|
||||||
$(CC) $(CFLAGS) -c $< -o $@
|
$(CC) $(CFLAGS) -c $< -o $@
|
||||||
|
|
||||||
|
@ -315,7 +320,7 @@ $(OBJDIR)/%.o: %.c
|
||||||
$(CC) $(CFLAGS) -c $< -o $@
|
$(CC) $(CFLAGS) -c $< -o $@
|
||||||
|
|
||||||
$(OBJDIR)/%.po : $(PLUGINDIR)/%.c
|
$(OBJDIR)/%.po : $(PLUGINDIR)/%.c
|
||||||
$(CC) $(APPCFLAGS) -c $< -o $@
|
$(CC) $(APPCFLAGS) -DPLUGIN -c $< -o $@
|
||||||
|
|
||||||
$(OBJDIR)/%.rock : $(OBJDIR)/%.po
|
$(OBJDIR)/%.rock : $(OBJDIR)/%.po
|
||||||
$(DLLTOOL) $(DLLTOOLFLAGS) -z $(OBJDIR)/$*.def $<
|
$(DLLTOOL) $(DLLTOOLFLAGS) -z $(OBJDIR)/$*.def $<
|
||||||
|
|
|
@ -1,97 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* __________ __ ___.
|
|
||||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
* \/ \/ \/ \/ \/
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* Copyright (C) 2002 by Felix Arends
|
|
||||||
*
|
|
||||||
* All files in this archive are subject to the GNU General Public License.
|
|
||||||
* See the file COPYING in the source tree root for full license agreement.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#include <io.h>
|
|
||||||
#include <windows.h>
|
|
||||||
#include <malloc.h>
|
|
||||||
#include "dir-win32.h"
|
|
||||||
|
|
||||||
// Directory operations
|
|
||||||
//
|
|
||||||
|
|
||||||
// opendir
|
|
||||||
// open directory for scanning
|
|
||||||
DIR *opendir (
|
|
||||||
const char *dirname // directory name
|
|
||||||
)
|
|
||||||
{
|
|
||||||
DIR *p = (DIR*)malloc(sizeof(DIR));
|
|
||||||
struct _finddata_t fd;
|
|
||||||
unsigned int i;
|
|
||||||
char *s = (char*)malloc(strlen(dirname) + 5);
|
|
||||||
wsprintf (s, "%s", dirname);
|
|
||||||
|
|
||||||
for (i = 0; i < strlen(s); i++)
|
|
||||||
if (s[i] == '/')
|
|
||||||
s[i] = '\\';
|
|
||||||
|
|
||||||
if (s[i - 1] != '\\')
|
|
||||||
{
|
|
||||||
s[i] = '\\';
|
|
||||||
s[++i] = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
OutputDebugString (s);
|
|
||||||
|
|
||||||
wsprintf (s, "%s*.*", s);
|
|
||||||
|
|
||||||
if ((p->handle = _findfirst (s, &fd)) == -1)
|
|
||||||
{
|
|
||||||
free (s);
|
|
||||||
free (p);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
free (s);
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
// closedir
|
|
||||||
// close directory
|
|
||||||
int closedir (
|
|
||||||
DIR *dir // previously opened dir search
|
|
||||||
)
|
|
||||||
{
|
|
||||||
free(dir);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// read dir
|
|
||||||
// read next entry in directory
|
|
||||||
struct dirent *readdir (
|
|
||||||
DIR *dir
|
|
||||||
)
|
|
||||||
{
|
|
||||||
struct _finddata_t fd;
|
|
||||||
if (_findnext (dir->handle, &fd) == -1)
|
|
||||||
return 0;
|
|
||||||
memcpy (dir->fd.d_name, fd.name, 256);
|
|
||||||
|
|
||||||
dir->fd.attribute = fd.attrib & 0x3f;
|
|
||||||
dir->fd.size = fd.size;
|
|
||||||
dir->fd.startcluster = 0 ;
|
|
||||||
|
|
||||||
|
|
||||||
return &dir->fd;
|
|
||||||
}
|
|
||||||
|
|
||||||
void fat_size(unsigned int* size, unsigned int* free)
|
|
||||||
{
|
|
||||||
*size = 2049;
|
|
||||||
*free = 1037;
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* __________ __ ___.
|
|
||||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
* \/ \/ \/ \/ \/
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* Copyright (C) 2002 by Felix Arends
|
|
||||||
*
|
|
||||||
* All files in this archive are subject to the GNU General Public License.
|
|
||||||
* See the file COPYING in the source tree root for full license agreement.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#ifndef __DIR_WIN32_H__
|
|
||||||
#define __DIR_WIN32_H__
|
|
||||||
|
|
||||||
#include <io.h>
|
|
||||||
#include "../../firmware/include/dir.h"
|
|
||||||
|
|
||||||
#endif // #ifndef __DIR_WIN32_H__
|
|
|
@ -1,82 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* __________ __ ___.
|
|
||||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
* \/ \/ \/ \/ \/
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* Copyright (C) 2002 by Björn Stenberg
|
|
||||||
*
|
|
||||||
* All files in this archive are subject to the GNU General Public License.
|
|
||||||
* See the file COPYING in the source tree root for full license agreement.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
#ifndef _DIR_H_
|
|
||||||
#define _DIR_H_
|
|
||||||
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include "file.h"
|
|
||||||
|
|
||||||
#ifndef DIRENT_DEFINED
|
|
||||||
|
|
||||||
#define ATTR_READ_ONLY 0x01
|
|
||||||
#define ATTR_HIDDEN 0x02
|
|
||||||
#define ATTR_SYSTEM 0x04
|
|
||||||
#define ATTR_VOLUME_ID 0x08
|
|
||||||
#define ATTR_DIRECTORY 0x10
|
|
||||||
#define ATTR_ARCHIVE 0x20
|
|
||||||
|
|
||||||
struct dirent {
|
|
||||||
unsigned char d_name[MAX_PATH];
|
|
||||||
int attribute;
|
|
||||||
int size;
|
|
||||||
int startcluster;
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef SIMULATOR
|
|
||||||
|
|
||||||
#include "fat.h"
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
bool busy;
|
|
||||||
int startcluster;
|
|
||||||
struct fat_dir fatdir;
|
|
||||||
struct dirent theent;
|
|
||||||
} DIR;
|
|
||||||
|
|
||||||
#else // SIMULATOR
|
|
||||||
|
|
||||||
#ifdef WIN32
|
|
||||||
#ifndef __MINGW32__
|
|
||||||
#include <io.h>
|
|
||||||
#endif /* __MINGW32__ */
|
|
||||||
|
|
||||||
typedef struct DIRtag
|
|
||||||
{
|
|
||||||
struct dirent fd;
|
|
||||||
int handle;
|
|
||||||
} DIR;
|
|
||||||
|
|
||||||
#endif /* WIN32 */
|
|
||||||
|
|
||||||
#endif // SIMULATOR
|
|
||||||
|
|
||||||
#ifndef DIRFUNCTIONS_DEFINED
|
|
||||||
|
|
||||||
extern DIR* opendir(const char* name);
|
|
||||||
extern int closedir(DIR* dir);
|
|
||||||
extern int mkdir(const char* name, int mode);
|
|
||||||
extern int rmdir(const char* name);
|
|
||||||
|
|
||||||
extern struct dirent* readdir(DIR* dir);
|
|
||||||
|
|
||||||
#endif /* DIRFUNCTIONS_DEFINED */
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,43 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* __________ __ ___.
|
|
||||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
* \/ \/ \/ \/ \/
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* Copyright (C) 2002 by Daniel Stenberg <daniel@haxx.se>
|
|
||||||
*
|
|
||||||
* All files in this archive are subject to the GNU General Public License.
|
|
||||||
* See the file COPYING in the source tree root for full license agreement.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#ifndef _FILE_H_
|
|
||||||
|
|
||||||
#ifndef __MINGW32__
|
|
||||||
#include <io.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef _commit
|
|
||||||
extern int _commit( int handle );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int win32_rename(char *oldpath, char *newpath);
|
|
||||||
int win32_filesize(int fd);
|
|
||||||
|
|
||||||
#define rename win32_rename
|
|
||||||
#define filesize win32_filesize
|
|
||||||
#define fsync _commit
|
|
||||||
|
|
||||||
#include "../../firmware/include/file.h"
|
|
||||||
|
|
||||||
#undef rename
|
|
||||||
#define mkdir(x,y) win32_mkdir(x,y)
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,63 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* __________ __ ___.
|
|
||||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
* \/ \/ \/ \/ \/
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* Copyright (C) 2002 Daniel Stenberg
|
|
||||||
*
|
|
||||||
* All files in this archive are subject to the GNU General Public License.
|
|
||||||
* See the file COPYING in the source tree root for full license agreement.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include "file.h"
|
|
||||||
#include "debug.h"
|
|
||||||
|
|
||||||
#define SIMULATOR_ARCHOS_ROOT "archos"
|
|
||||||
|
|
||||||
int win32_rename(char *oldpath, char* newpath)
|
|
||||||
{
|
|
||||||
char buffer1[256];
|
|
||||||
char buffer2[256];
|
|
||||||
|
|
||||||
if(oldpath[0] == '/') {
|
|
||||||
sprintf(buffer1, "%s%s", SIMULATOR_ARCHOS_ROOT, oldpath);
|
|
||||||
sprintf(buffer2, "%s%s", SIMULATOR_ARCHOS_ROOT, newpath);
|
|
||||||
|
|
||||||
debugf("We rename the real file '%s' to '%s'\n", buffer1, buffer2);
|
|
||||||
return rename(buffer1, buffer2);
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int win32_filesize(int fd)
|
|
||||||
{
|
|
||||||
int old = lseek(fd, 0, SEEK_CUR);
|
|
||||||
int size = lseek(fd, 0, SEEK_END);
|
|
||||||
lseek(fd, old, SEEK_SET);
|
|
||||||
|
|
||||||
return(size);
|
|
||||||
}
|
|
||||||
|
|
||||||
extern int (mkdir)(const char *name);
|
|
||||||
|
|
||||||
int win32_mkdir(const char *name, int mode)
|
|
||||||
{
|
|
||||||
char buffer[256]; /* sufficiently big */
|
|
||||||
(void)mode;
|
|
||||||
if(name[0] == '/') {
|
|
||||||
sprintf(buffer, "%s%s", SIMULATOR_ARCHOS_ROOT, name);
|
|
||||||
|
|
||||||
debugf("We create the real directory '%s'\n", buffer);
|
|
||||||
return (mkdir)(buffer);
|
|
||||||
}
|
|
||||||
return (mkdir)(name);
|
|
||||||
}
|
|
|
@ -34,7 +34,7 @@ int set_irq_level (int level)
|
||||||
return (_lv = level);
|
return (_lv = level);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sleep(int ticks)
|
void sim_sleep(int ticks)
|
||||||
{
|
{
|
||||||
Sleep (1000 / HZ * ticks);
|
Sleep (1000 / HZ * ticks);
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,3 +18,9 @@
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "../../firmware/export/kernel.h"
|
#include "../../firmware/export/kernel.h"
|
||||||
|
|
||||||
|
#ifndef NO_REDEFINES_PLEASE
|
||||||
|
#define sleep(x) sim_sleep(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void sim_sleep(int);
|
||||||
|
|
|
@ -96,6 +96,8 @@ ifeq ($(DISPLAY),-DHAVE_LCD_BITMAP)
|
||||||
else
|
else
|
||||||
LCDSRSC = lcd-playersim.c lcd-player.c font-player.c lcd-player-charset.c
|
LCDSRSC = lcd-playersim.c lcd-player.c font-player.c lcd-player-charset.c
|
||||||
endif
|
endif
|
||||||
|
COMMONSRCS = io.c
|
||||||
|
|
||||||
FIRMSRCS = $(LCDSRSC) id3.c debug.c usb.c mpeg.c mp3_playback.c power.c\
|
FIRMSRCS = $(LCDSRSC) id3.c debug.c usb.c mpeg.c mp3_playback.c power.c\
|
||||||
powermgmt.c panic.c mp3data.c sprintf.c buffer.c timefuncs.c
|
powermgmt.c panic.c mp3data.c sprintf.c buffer.c timefuncs.c
|
||||||
|
|
||||||
|
@ -111,8 +113,8 @@ ifeq ($(DISPLAY),-DHAVE_LCD_BITMAP)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
SRCS = screenhack.c uibasic.c resources.c visual.c lcd-x11.c stubs.c \
|
SRCS = screenhack.c uibasic.c resources.c visual.c lcd-x11.c stubs.c \
|
||||||
button-x11.c io.c thread.c sim_icons.c $(APPS) $(MENUS) $(FIRMSRCS) \
|
button-x11.c thread.c sim_icons.c $(APPS) $(MENUS) $(FIRMSRCS) \
|
||||||
lcd-common.c
|
$(COMMONSRCS) lcd-common.c
|
||||||
|
|
||||||
ROCKSRC := $(wildcard $(APPDIR)/plugins/*.c)
|
ROCKSRC := $(wildcard $(APPDIR)/plugins/*.c)
|
||||||
ROCKS := $(ROCKSRC:$(APPDIR)/plugins/%.c=$(OBJDIR)/%.rock)
|
ROCKS := $(ROCKSRC:$(APPDIR)/plugins/%.c=$(OBJDIR)/%.rock)
|
||||||
|
@ -276,6 +278,9 @@ $(OBJDIR)/stubs.o: $(SIMCOMMON)/stubs.c
|
||||||
$(OBJDIR)/sim_icons.o: $(SIMCOMMON)/sim_icons.c
|
$(OBJDIR)/sim_icons.o: $(SIMCOMMON)/sim_icons.c
|
||||||
$(CC) $(CFLAGS) -c $< -o $@
|
$(CC) $(CFLAGS) -c $< -o $@
|
||||||
|
|
||||||
|
$(OBJDIR)/io.o: $(SIMCOMMON)/io.c
|
||||||
|
$(CC) $(CFLAGS) -c $< -o $@
|
||||||
|
|
||||||
$(OBJDIR)/usb.o: $(FIRMWAREDIR)/usb.c
|
$(OBJDIR)/usb.o: $(FIRMWAREDIR)/usb.c
|
||||||
$(CC) $(CFLAGS) -c $< -o $@
|
$(CC) $(CFLAGS) -c $< -o $@
|
||||||
|
|
||||||
|
|
|
@ -172,7 +172,7 @@ int button_get_w_tmo(int ticks)
|
||||||
for(i=0; i< ticks; i++) {
|
for(i=0; i< ticks; i++) {
|
||||||
bits = get_raw_button();
|
bits = get_raw_button();
|
||||||
if(!bits)
|
if(!bits)
|
||||||
x11_sleep(1);
|
sim_sleep(1);
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -193,14 +193,14 @@ int button_get(bool block)
|
||||||
do {
|
do {
|
||||||
bits = get_raw_button();
|
bits = get_raw_button();
|
||||||
if(block && !bits)
|
if(block && !bits)
|
||||||
x11_sleep(HZ/10);
|
sim_sleep(HZ/10);
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
} while(1);
|
} while(1);
|
||||||
|
|
||||||
if(!block)
|
if(!block)
|
||||||
/* delay a bit */
|
/* delay a bit */
|
||||||
x11_sleep(1);
|
sim_sleep(1);
|
||||||
|
|
||||||
return bits;
|
return bits;
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,11 +21,11 @@
|
||||||
|
|
||||||
#ifndef NO_REDEFINES_PLEASE
|
#ifndef NO_REDEFINES_PLEASE
|
||||||
|
|
||||||
#define sleep(x) x11_sleep(x)
|
#define sleep(x) sim_sleep(x)
|
||||||
#define mutex_init(x) (void)x
|
#define mutex_init(x) (void)x
|
||||||
#define mutex_lock(x) (void)x
|
#define mutex_lock(x) (void)x
|
||||||
#define mutex_unlock(x) (void)x
|
#define mutex_unlock(x) (void)x
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void x11_sleep(int);
|
void sim_sleep(int);
|
||||||
|
|
|
@ -85,7 +85,7 @@ int create_thread(void* fp, void* sp, int stk_size)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ticks is HZ per second */
|
/* ticks is HZ per second */
|
||||||
void x11_sleep(int ticks)
|
void sim_sleep(int ticks)
|
||||||
{
|
{
|
||||||
current_tick+=5;
|
current_tick+=5;
|
||||||
pthread_mutex_unlock(&mp); /* return */
|
pthread_mutex_unlock(&mp); /* return */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue