From a1ef7973c2b16be90ab2cbd1f182d11e80dfe84e Mon Sep 17 00:00:00 2001 From: kugel Date: Sat, 15 May 2010 21:02:47 +0000 Subject: [PATCH] - Move uisimulator/sdl/*.[ch] into the target tree, under firmware/target/hosted/sdl, uisdl.c is split up across button-sdl.c and system-sdl.c. - Refactor the program startup. main() is now in main.c like on target, and the implicit application thread will now act as our main thread (previously a separate one was created for this in thread initialization). This is part of Rockbox as an application and is the first step to make an application port from the uisimulator. In a further step the sim bits from the sdl build will be separated out. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26065 a1c6a512-1295-4272-9138-f99709370657 --- apps/main.c | 13 +- firmware/SOURCES | 21 ++ firmware/drivers/audio/sdl.c | 186 ++++++++++++++++++ firmware/drivers/button.c | 9 +- firmware/export/audiohw.h | 6 +- firmware/export/config/sim.h | 4 + firmware/export/system.h | 1 + firmware/kernel.c | 5 +- firmware/libc/include/stdlib.h | 3 +- firmware/sound.c | 85 +------- .../target/hosted/sdl/button-sdl.c | 121 +++++++++++- .../target/hosted/sdl/button-sdl.h | 26 ++- .../target/hosted}/sdl/kernel-sdl.c | 17 +- .../target/hosted}/sdl/lcd-bitmap.c | 3 +- .../target/hosted}/sdl/lcd-bitmap.h | 0 .../target/hosted}/sdl/lcd-charcells.c | 9 +- .../target/hosted}/sdl/lcd-charcells.h | 0 .../target/hosted}/sdl/lcd-remote-bitmap.c | 3 +- .../target/hosted}/sdl/lcd-remote-bitmap.h | 0 .../target/hosted}/sdl/lcd-sdl.c | 3 +- .../target/hosted}/sdl/lcd-sdl.h | 1 + .../target/hosted/sdl/pcm-sdl.c | 131 ++++--------- .../target/hosted/sdl/sim-ui-defines.h | 5 +- .../target/hosted/sdl/system-sdl.c | 218 ++++----------------- .../target/hosted}/sdl/system-sdl.h | 5 +- .../target/hosted}/sdl/thread-sdl.c | 65 ++---- .../target/hosted}/sdl/thread-sdl.h | 15 +- .../target/hosted/sdl/timer-sdl.c | 0 tools/configure | 4 + uisimulator/common/io.c | 4 +- uisimulator/common/powermgmt-sim.c | 4 - uisimulator/common/stubs.c | 16 -- uisimulator/sdl/Makefile | 64 ------ uisimulator/sdl/README | 6 - uisimulator/sdl/SOURCES | 15 -- uisimulator/sdl/button-sdl.h | 46 ----- uisimulator/sdl/timefuncs.h | 7 - uisimulator/uisimulator.make | 7 +- 38 files changed, 505 insertions(+), 623 deletions(-) create mode 100644 firmware/drivers/audio/sdl.c rename uisimulator/sdl/button.c => firmware/target/hosted/sdl/button-sdl.c (92%) rename uisimulator/sdl/sound.h => firmware/target/hosted/sdl/button-sdl.h (75%) rename {uisimulator => firmware/target/hosted}/sdl/kernel-sdl.c (92%) rename {uisimulator => firmware/target/hosted}/sdl/lcd-bitmap.c (99%) rename {uisimulator => firmware/target/hosted}/sdl/lcd-bitmap.h (100%) rename {uisimulator => firmware/target/hosted}/sdl/lcd-charcells.c (99%) rename {uisimulator => firmware/target/hosted}/sdl/lcd-charcells.h (100%) rename {uisimulator => firmware/target/hosted}/sdl/lcd-remote-bitmap.c (98%) rename {uisimulator => firmware/target/hosted}/sdl/lcd-remote-bitmap.h (100%) rename {uisimulator => firmware/target/hosted}/sdl/lcd-sdl.c (98%) rename {uisimulator => firmware/target/hosted}/sdl/lcd-sdl.h (97%) rename uisimulator/sdl/sound.c => firmware/target/hosted/sdl/pcm-sdl.c (76%) rename uisimulator/sdl/uisdl.h => firmware/target/hosted/sdl/sim-ui-defines.h (99%) rename uisimulator/sdl/uisdl.c => firmware/target/hosted/sdl/system-sdl.c (50%) rename {uisimulator => firmware/target/hosted}/sdl/system-sdl.h (90%) rename {uisimulator => firmware/target/hosted}/sdl/thread-sdl.c (91%) rename {uisimulator => firmware/target/hosted}/sdl/thread-sdl.h (69%) rename uisimulator/sdl/timer.c => firmware/target/hosted/sdl/timer-sdl.c (100%) delete mode 100644 uisimulator/sdl/Makefile delete mode 100644 uisimulator/sdl/README delete mode 100644 uisimulator/sdl/SOURCES delete mode 100644 uisimulator/sdl/button-sdl.h delete mode 100644 uisimulator/sdl/timefuncs.h diff --git a/apps/main.c b/apps/main.c index b043daced..e4b9286b4 100644 --- a/apps/main.c +++ b/apps/main.c @@ -124,8 +124,14 @@ const char appsversion[]=APPSVERSION; static void init(void); -#ifdef SIMULATOR -void app_main(void) +#ifdef HAVE_SDL +#if defined(WIN32) && defined(main) +/* Don't use SDL_main on windows -> no more stdio redirection */ +#undef main +#endif +int main(int argc, char *argv[]) +{ + sys_handle_argv(argc, argv); #else /* main(), and various functions called by main() and init() may be * be INIT_ATTR. These functions must not be called after the final call @@ -133,8 +139,8 @@ void app_main(void) * see definition of INIT_ATTR in config.h */ int main(void) INIT_ATTR __attribute__((noreturn)); int main(void) -#endif { +#endif int i; CHART(">init"); init(); @@ -313,6 +319,7 @@ static void init_tagcache(void) static void init(void) { + system_init(); kernel_init(); buffer_init(); enable_irq(); diff --git a/firmware/SOURCES b/firmware/SOURCES index 68074dbbe..47249a2d6 100644 --- a/firmware/SOURCES +++ b/firmware/SOURCES @@ -18,6 +18,22 @@ rolo.c thread.c timer.c #endif /* SIMULATOR */ +#ifdef HAVE_SDL +target/hosted/sdl/button-sdl.c +target/hosted/sdl/kernel-sdl.c +#ifdef HAVE_LCD_BITMAP +target/hosted/sdl/lcd-bitmap.c +#elif defined(HAVE_LCD_CHARCELLS) +target/hosted/sdl/lcd-charcells.c +#endif +#ifdef HAVE_REMOTE_LCD +target/hosted/sdl/lcd-remote-bitmap.c +#endif +target/hosted/sdl/lcd-sdl.c +target/hosted/sdl/system-sdl.c +target/hosted/sdl/thread-sdl.c +target/hosted/sdl/timer-sdl.c +#endif panic.c debug.c @@ -292,6 +308,11 @@ drivers/audio/ak4537.c #elif defined(HAVE_UDA1341) drivers/audio/uda1341.c #endif /* defined(HAVE_*) */ +#elif defined(HAVE_SDL_AUDIO) +drivers/audio/sdl.c +#if CONFIG_CODEC == SWCODEC +target/hosted/sdl/pcm-sdl.c +#endif #endif /* !defined(SIMULATOR) && !defined(BOOTLOADER) */ /* USB Stack */ diff --git a/firmware/drivers/audio/sdl.c b/firmware/drivers/audio/sdl.c new file mode 100644 index 000000000..c06319287 --- /dev/null +++ b/firmware/drivers/audio/sdl.c @@ -0,0 +1,186 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright © 2010 Thomas Martitz + * + * 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. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include +#include "config.h" +#include "audiohw.h" + +/** + * Audio Hardware api. Make them do nothing as we cannot properly simulate with + * SDL. if we used DSP we would run code that doesn't actually run on the target + **/ + +extern void pcm_set_mixer_volume(int); + +void audiohw_set_volume(int volume) +{ +#if CONFIG_CODEC == SWCODEC + pcm_set_mixer_volume( + SDL_MIX_MAXVOLUME * ((volume - VOLUME_MIN) / 10) / (VOLUME_RANGE / 10)); +#else + (void)volume; +#endif +} + +const struct sound_settings_info audiohw_settings[] = { + [SOUND_VOLUME] = {"dB", 0, 1, VOLUME_MIN / 10, VOLUME_MAX / 10, -25}, +/* Bass and treble tone controls */ +#ifdef AUDIOHW_HAVE_BASS + [SOUND_BASS] = {"dB", 0, 1, -24, 24, 0}, +#endif +#ifdef AUDIOHW_HAVE_TREBLE + [SOUND_TREBLE] = {"dB", 0, 1, -24, 24, 0}, +#endif + [SOUND_BALANCE] = {"%", 0, 1,-100, 100, 0}, + [SOUND_CHANNELS] = {"", 0, 1, 0, 5, 0}, + [SOUND_STEREO_WIDTH] = {"%", 0, 5, 0, 250, 100}, +#if defined(HAVE_RECORDING) + [SOUND_LEFT_GAIN] = {"dB", 1, 1,-128, 96, 0}, + [SOUND_RIGHT_GAIN] = {"dB", 1, 1,-128, 96, 0}, + [SOUND_MIC_GAIN] = {"dB", 1, 1,-128, 108, 16}, +#endif +#if defined(AUDIOHW_HAVE_BASS_CUTOFF) + [SOUND_BASS_CUTOFF] = {"", 0, 1, 1, 4, 1}, +#endif +#if defined(AUDIOHW_HAVE_TREBLE_CUTOFF) + [SOUND_TREBLE_CUTOFF] = {"", 0, 1, 1, 4, 1}, +#endif +#if defined(AUDIOHW_HAVE_DEPTH_3D) + [SOUND_DEPTH_3D] = {"%", 0, 1, 0, 15, 0}, +#endif +/* Hardware EQ tone controls */ +#if defined(AUDIOHW_HAVE_EQ_BAND1) + [SOUND_EQ_BAND1_GAIN] = {"dB", 0, 1, -12, 12, 0}, +#endif +#if defined(AUDIOHW_HAVE_EQ_BAND2) + [SOUND_EQ_BAND2_GAIN] = {"dB", 0, 1, -12, 12, 0}, +#endif +#if defined(AUDIOHW_HAVE_EQ_BAND3) + [SOUND_EQ_BAND3_GAIN] = {"dB", 0, 1, -12, 12, 0}, +#endif +#if defined(AUDIOHW_HAVE_EQ_BAND4) + [SOUND_EQ_BAND4_GAIN] = {"dB", 0, 1, -12, 12, 0}, +#endif +#if defined(AUDIOHW_HAVE_EQ_BAND5) + [SOUND_EQ_BAND5_GAIN] = {"dB", 0, 1, -12, 12, 0}, +#endif +#if defined(AUDIOHW_HAVE_EQ_BAND1_FREQUENCY) + [SOUND_EQ_BAND1_FREQUENCY] = {"", 0, 1, 1, 4, 1}, +#endif +#if defined(AUDIOHW_HAVE_EQ_BAND2_FREQUENCY) + [SOUND_EQ_BAND2_FREQUENCY] = {"", 0, 1, 1, 4, 1}, +#endif +#if defined(AUDIOHW_HAVE_EQ_BAND3_FREQUENCY) + [SOUND_EQ_BAND3_FREQUENCY] = {"", 0, 1, 1, 4, 1}, +#endif +#if defined(AUDIOHW_HAVE_EQ_BAND4_FREQUENCY) + [SOUND_EQ_BAND4_FREQUENCY] = {"", 0, 1, 1, 4, 1}, +#endif +#if defined(AUDIOHW_HAVE_EQ_BAND5_FREQUENCY) + [SOUND_EQ_BAND5_FREQUENCY] = {"", 0, 1, 1, 4, 1}, +#endif +#if defined(AUDIOHW_HAVE_EQ_BAND2_WIDTH) + [SOUND_EQ_BAND2_WIDTH] = {"", 0, 1, 0, 1, 0}, +#endif +#if defined(AUDIOHW_HAVE_EQ_BAND3_WIDTH) + [SOUND_EQ_BAND3_WIDTH] = {"", 0, 1, 0, 1, 0}, +#endif +#if defined(AUDIOHW_HAVE_EQ_BAND4_WIDTH) + [SOUND_EQ_BAND4_WIDTH] = {"", 0, 1, 0, 1, 0}, +#endif + +#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) + [SOUND_LOUDNESS] = {"dB", 0, 1, 0, 17, 0}, + [SOUND_AVC] = {"", 0, 1, -1, 4, 0}, + [SOUND_MDB_STRENGTH] = {"dB", 0, 1, 0, 127, 48}, + [SOUND_MDB_HARMONICS] = {"%", 0, 1, 0, 100, 50}, + [SOUND_MDB_CENTER] = {"Hz", 0, 10, 20, 300, 60}, + [SOUND_MDB_SHAPE] = {"Hz", 0, 10, 50, 300, 90}, + [SOUND_MDB_ENABLE] = {"", 0, 1, 0, 1, 0}, + [SOUND_SUPERBASS] = {"", 0, 1, 0, 1, 0}, +#endif /* (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) */ +}; + +/** + * stubs here, for the simulator + **/ + +#if defined(AUDIOHW_HAVE_PRESCALER) +void audiohw_set_prescaler(int value) { (void)value; } +#endif +#if defined(AUDIOHW_HAVE_BALANCE) +void audiohw_set_balance(int value) { (void)value; } +#endif +#if defined(AUDIOHW_HAVE_BASS) +void audiohw_set_bass(int value) { (void)value; } +#endif +#if defined(AUDIOHW_HAVE_TREBLE) +void audiohw_set_treble(int value) { (void)value; } +#endif +#if CONFIG_CODEC != SWCODEC +void audiohw_set_channel(int value) { (void)value; } +void audiohw_set_stereo_width(int value){ (void)value; } +#endif +#if defined(AUDIOHW_HAVE_BASS_CUTOFF) +void audiohw_set_bass_cutoff(int value) { (void)value; } +#endif +#if defined(AUDIOHW_HAVE_TREBLE_CUTOFF) +void audiohw_set_treble_cutoff(int value){ (void)value; } +#endif +/* EQ-based tone controls */ +#if defined(AUDIOHW_HAVE_EQ) +void audiohw_set_eq_band_gain(unsigned int band, int value) + { (void)band; (void)value; } +#endif +#if defined(AUDIOHW_HAVE_EQ_FREQUENCY) +void audiohw_set_eq_band_frequency(unsigned int band, int value) + { (void)band; (void)value; } +#endif +#if defined(AUDIOHW_HAVE_EQ_WIDTH) +void audiohw_set_eq_band_width(unsigned int band, int value) + { (void)band; (void)value; } +#endif +#if defined(AUDIOHW_HAVE_DEPTH_3D) +void audiohw_set_depth_3d(int value) + { (void)value; } +#endif +#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) +int mas_codec_readreg(int reg) +{ + (void)reg; + return 0; +} + +int mas_codec_writereg(int reg, unsigned int val) +{ + (void)reg; + (void)val; + return 0; +} +int mas_writemem(int bank, int addr, const unsigned long* src, int len) +{ + (void)bank; + (void)addr; + (void)src; + (void)len; + return 0; +} +#endif diff --git a/firmware/drivers/button.c b/firmware/drivers/button.c index 100957b77..f116ad646 100644 --- a/firmware/drivers/button.c +++ b/firmware/drivers/button.c @@ -429,7 +429,6 @@ void button_init(void) tick_add_task(button_tick); } -#ifndef SIMULATOR #ifdef BUTTON_DRIVER_CLOSE void button_close(void) { @@ -443,9 +442,10 @@ void button_close(void) */ static int button_flip(int button) { - int newbutton; + int newbutton = button; - newbutton = button & +#ifndef SIMULATOR + newbutton &= ~(BUTTON_LEFT | BUTTON_RIGHT #if defined(BUTTON_UP) && defined(BUTTON_DOWN) | BUTTON_UP | BUTTON_DOWN @@ -503,7 +503,7 @@ static int button_flip(int button) if (button & BUTTON_PREV) newbutton |= BUTTON_NEXT; #endif - +#endif /* !SIMULATOR */ return newbutton; } @@ -523,7 +523,6 @@ void button_set_flip(bool flip) } } #endif /* HAVE_LCD_FLIP */ -#endif /* SIMULATOR */ #ifdef HAVE_BACKLIGHT void set_backlight_filter_keypress(bool value) diff --git a/firmware/export/audiohw.h b/firmware/export/audiohw.h index d7ee551e4..b8214e67b 100644 --- a/firmware/export/audiohw.h +++ b/firmware/export/audiohw.h @@ -66,6 +66,10 @@ #elif defined(HAVE_AK4537) #include "ak4537.h" #endif +#if defined(HAVE_SDL_AUDIO) +/* #include gives errors in other code areas, + * we don't really need it here, so don't. but it should maybe be fixed */ +#endif @@ -369,7 +373,7 @@ void audiohw_postinit(void); */ void audiohw_close(void); -#ifdef AUDIOHW_HAVE_CLIPPING +#if defined(AUDIOHW_HAVE_CLIPPING) || defined(HAVE_SDL_AUDIO) /** * Set new volume value * @param val to set. diff --git a/firmware/export/config/sim.h b/firmware/export/config/sim.h index 6d2e6d24e..d65b0fbbf 100644 --- a/firmware/export/config/sim.h +++ b/firmware/export/config/sim.h @@ -80,6 +80,8 @@ #undef HAVE_SPEAKER +#undef BUTTON_DRIVER_CLOSE + #if CONFIG_BACKLIGHT_FADING == BACKLIGHT_FADING_SW_HW_REG #undef CONFIG_BACKLIGHT_FADING /* simulate SW_SETTING, as we handle sdl very similary */ @@ -97,4 +99,6 @@ #define DEFAULT_BRIGHTNESS_SETTING MAX_BRIGHTNESS_SETTING #endif +#define HAVE_SDL +#define HAVE_SDL_AUDIO #define _ISOC99_SOURCE 1 diff --git a/firmware/export/system.h b/firmware/export/system.h index bd31c0302..fc582aac0 100644 --- a/firmware/export/system.h +++ b/firmware/export/system.h @@ -235,6 +235,7 @@ enum { #if !defined(SIMULATOR) && !defined(__PCTOOL__) #include "system-target.h" #else /* SIMULATOR */ +#include "system-sdl.h" static inline uint16_t swap16(uint16_t value) /* result[15..8] = value[ 7..0]; diff --git a/firmware/kernel.c b/firmware/kernel.c index 64c814254..d8c67e848 100644 --- a/firmware/kernel.c +++ b/firmware/kernel.c @@ -22,14 +22,11 @@ #include #include "config.h" #include "kernel.h" -#ifdef SIMULATOR -#include "system-sdl.h" -#include "debug.h" -#endif #include "thread.h" #include "cpu.h" #include "system.h" #include "panic.h" +#include "debug.h" /* Make this nonzero to enable more elaborate checks on objects */ #if defined(DEBUG) || defined(SIMULATOR) diff --git a/firmware/libc/include/stdlib.h b/firmware/libc/include/stdlib.h index 5f6db6da8..57553367c 100644 --- a/firmware/libc/include/stdlib.h +++ b/firmware/libc/include/stdlib.h @@ -29,6 +29,7 @@ void *malloc(size_t); void *calloc (size_t nmemb, size_t size); void free(void *); void *realloc(void *, size_t); +int atexit(void (*)(void)); #define RAND_MAX INT_MAX @@ -51,7 +52,7 @@ void exit(int status); #endif int atoi (const char *str); - + #ifdef __cplusplus } #endif diff --git a/firmware/sound.c b/firmware/sound.c index fb2f353d7..dccca1226 100644 --- a/firmware/sound.c +++ b/firmware/sound.c @@ -43,89 +43,6 @@ extern bool audio_is_initialized; -#ifdef SIMULATOR -extern void audiohw_set_volume(int value); -/* dummy for sim */ -const struct sound_settings_info audiohw_settings[] = { - [SOUND_VOLUME] = {"dB", 0, 1, VOLUME_MIN / 10, VOLUME_MAX / 10, -25}, -/* Bass and treble tone controls */ -#ifdef AUDIOHW_HAVE_BASS - [SOUND_BASS] = {"dB", 0, 1, -24, 24, 0}, -#endif -#ifdef AUDIOHW_HAVE_TREBLE - [SOUND_TREBLE] = {"dB", 0, 1, -24, 24, 0}, -#endif - [SOUND_BALANCE] = {"%", 0, 1,-100, 100, 0}, - [SOUND_CHANNELS] = {"", 0, 1, 0, 5, 0}, - [SOUND_STEREO_WIDTH] = {"%", 0, 5, 0, 250, 100}, -#if defined(HAVE_RECORDING) - [SOUND_LEFT_GAIN] = {"dB", 1, 1,-128, 96, 0}, - [SOUND_RIGHT_GAIN] = {"dB", 1, 1,-128, 96, 0}, - [SOUND_MIC_GAIN] = {"dB", 1, 1,-128, 108, 16}, -#endif -#if defined(AUDIOHW_HAVE_BASS_CUTOFF) - [SOUND_BASS_CUTOFF] = {"", 0, 1, 1, 4, 1}, -#endif -#if defined(AUDIOHW_HAVE_TREBLE_CUTOFF) - [SOUND_TREBLE_CUTOFF] = {"", 0, 1, 1, 4, 1}, -#endif -#if defined(AUDIOHW_HAVE_DEPTH_3D) - [SOUND_DEPTH_3D] = {"%", 0, 1, 0, 15, 0}, -#endif -/* Hardware EQ tone controls */ -#if defined(AUDIOHW_HAVE_EQ_BAND1) - [SOUND_EQ_BAND1_GAIN] = {"dB", 0, 1, -12, 12, 0}, -#endif -#if defined(AUDIOHW_HAVE_EQ_BAND2) - [SOUND_EQ_BAND2_GAIN] = {"dB", 0, 1, -12, 12, 0}, -#endif -#if defined(AUDIOHW_HAVE_EQ_BAND3) - [SOUND_EQ_BAND3_GAIN] = {"dB", 0, 1, -12, 12, 0}, -#endif -#if defined(AUDIOHW_HAVE_EQ_BAND4) - [SOUND_EQ_BAND4_GAIN] = {"dB", 0, 1, -12, 12, 0}, -#endif -#if defined(AUDIOHW_HAVE_EQ_BAND5) - [SOUND_EQ_BAND5_GAIN] = {"dB", 0, 1, -12, 12, 0}, -#endif -#if defined(AUDIOHW_HAVE_EQ_BAND1_FREQUENCY) - [SOUND_EQ_BAND1_FREQUENCY] = {"", 0, 1, 1, 4, 1}, -#endif -#if defined(AUDIOHW_HAVE_EQ_BAND2_FREQUENCY) - [SOUND_EQ_BAND2_FREQUENCY] = {"", 0, 1, 1, 4, 1}, -#endif -#if defined(AUDIOHW_HAVE_EQ_BAND3_FREQUENCY) - [SOUND_EQ_BAND3_FREQUENCY] = {"", 0, 1, 1, 4, 1}, -#endif -#if defined(AUDIOHW_HAVE_EQ_BAND4_FREQUENCY) - [SOUND_EQ_BAND4_FREQUENCY] = {"", 0, 1, 1, 4, 1}, -#endif -#if defined(AUDIOHW_HAVE_EQ_BAND5_FREQUENCY) - [SOUND_EQ_BAND5_FREQUENCY] = {"", 0, 1, 1, 4, 1}, -#endif -#if defined(AUDIOHW_HAVE_EQ_BAND2_WIDTH) - [SOUND_EQ_BAND2_WIDTH] = {"", 0, 1, 0, 1, 0}, -#endif -#if defined(AUDIOHW_HAVE_EQ_BAND3_WIDTH) - [SOUND_EQ_BAND3_WIDTH] = {"", 0, 1, 0, 1, 0}, -#endif -#if defined(AUDIOHW_HAVE_EQ_BAND4_WIDTH) - [SOUND_EQ_BAND4_WIDTH] = {"", 0, 1, 0, 1, 0}, -#endif - -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - [SOUND_LOUDNESS] = {"dB", 0, 1, 0, 17, 0}, - [SOUND_AVC] = {"", 0, 1, -1, 4, 0}, - [SOUND_MDB_STRENGTH] = {"dB", 0, 1, 0, 127, 48}, - [SOUND_MDB_HARMONICS] = {"%", 0, 1, 0, 100, 50}, - [SOUND_MDB_CENTER] = {"Hz", 0, 10, 20, 300, 60}, - [SOUND_MDB_SHAPE] = {"Hz", 0, 10, 50, 300, 90}, - [SOUND_MDB_ENABLE] = {"", 0, 1, 0, 1, 0}, - [SOUND_SUPERBASS] = {"", 0, 1, 0, 1, 0}, -#endif /* (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) */ -}; -#endif - const char *sound_unit(int setting) { return audiohw_settings[setting].unit; @@ -356,7 +273,7 @@ static void set_prescaled_volume(void) #elif defined(HAVE_TLV320) || defined(HAVE_WM8978) || defined(HAVE_WM8985) audiohw_set_headphone_vol(tenthdb2master(l), tenthdb2master(r)); -#elif defined(HAVE_JZ4740_CODEC) +#elif defined(HAVE_JZ4740_CODEC) || defined(HAVE_SDL_AUDIO) audiohw_set_volume(current_volume); #endif #else /* SIMULATOR */ diff --git a/uisimulator/sdl/button.c b/firmware/target/hosted/sdl/button-sdl.c similarity index 92% rename from uisimulator/sdl/button.c rename to firmware/target/hosted/sdl/button-sdl.c index 2bb776478..51ba8cff9 100644 --- a/uisimulator/sdl/button.c +++ b/firmware/target/hosted/sdl/button-sdl.c @@ -19,7 +19,8 @@ * ****************************************************************************/ -#include "uisdl.h" +#include +#include "sim-ui-defines.h" #include "lcd-charcells.h" #include "lcd-remote.h" #include "config.h" @@ -61,6 +62,8 @@ int remote_type(void) } #endif +static int xy2button(int x, int y); + struct event_queue button_queue; static int btn = 0; /* Hopefully keeps track of currently pressed keys... */ @@ -78,8 +81,109 @@ bool remote_button_hold(void) { return remote_hold_button_state; } #endif +static void button_event(int key, bool pressed); +extern bool debug_wps; +extern bool mapping; +static void gui_message_loop(void) +{ + SDL_Event event; + static int x,y,xybutton = 0; + + if (SDL_PollEvent(&event)) + { + switch(event.type) + { + case SDL_KEYDOWN: + button_event(event.key.keysym.sym, true); + break; + case SDL_KEYUP: + button_event(event.key.keysym.sym, false); + case SDL_MOUSEBUTTONDOWN: + switch ( event.button.button ) { +#ifdef HAVE_SCROLLWHEEL + case SDL_BUTTON_WHEELUP: + button_event( SDLK_UP, true ); + break; + case SDL_BUTTON_WHEELDOWN: + button_event( SDLK_DOWN, true ); + break; +#endif + case SDL_BUTTON_LEFT: + case SDL_BUTTON_MIDDLE: + if ( mapping && background ) { + x = event.button.x; + y = event.button.y; + } + if ( background ) { + xybutton = xy2button( event.button.x, event.button.y ); + if( xybutton ) + button_event( xybutton, true ); + } + break; + default: + break; + } + + if (debug_wps && event.button.button == 1) + { + if ( background ) +#ifdef HAVE_REMOTE + if ( event.button.y < UI_REMOTE_POSY ) /* Main Screen */ + printf("Mouse at: (%d, %d)\n", event.button.x - UI_LCD_POSX -1 , event.button.y - UI_LCD_POSY - 1 ); + else + printf("Mouse at: (%d, %d)\n", event.button.x - UI_REMOTE_POSX -1 , event.button.y - UI_REMOTE_POSY - 1 ); +#else + printf("Mouse at: (%d, %d)\n", event.button.x - UI_LCD_POSX -1 , event.button.y - UI_LCD_POSY - 1 ); +#endif + else + if ( event.button.y/display_zoom < LCD_HEIGHT ) /* Main Screen */ + printf("Mouse at: (%d, %d)\n", event.button.x/display_zoom, event.button.y/display_zoom ); +#ifdef HAVE_REMOTE + else + printf("Mouse at: (%d, %d)\n", event.button.x/display_zoom, event.button.y/display_zoom - LCD_HEIGHT ); +#endif + } + break; + case SDL_MOUSEBUTTONUP: + switch ( event.button.button ) { + /* The scrollwheel button up events are ignored as they are queued immediately */ + case SDL_BUTTON_LEFT: + case SDL_BUTTON_MIDDLE: + if ( mapping && background ) { + printf(" { SDLK_, %d, %d, %d, \"\" },\n", x, +#define SQUARE(x) ((x)*(x)) + y, (int)sqrt( SQUARE(x-(int)event.button.x) + + SQUARE(y-(int)event.button.y)) ); + } + if ( background && xybutton ) { + button_event( xybutton, false ); + xybutton = 0; + } +#ifdef HAVE_TOUCHSCREEN + else { + button_event(BUTTON_TOUCHSCREEN, false); + } +#endif + break; + default: + break; + } + break; + + + case SDL_QUIT: + { + exit(EXIT_SUCCESS); + break; + } + default: + /*printf("Unhandled event\n"); */ + break; + } + } +} -void button_event(int key, bool pressed) +static void button_event(int key, bool pressed) { int new_btn = 0; static bool usb_connected = false; @@ -1380,7 +1484,6 @@ int button_read_device(int* data) int button_read_device(void) { #endif - #ifdef HAS_BUTTON_HOLD int hold_button = button_hold(); @@ -1396,7 +1499,9 @@ int button_read_device(void) if (hold_button) return BUTTON_NONE; + else #endif + gui_message_loop(); return btn; } @@ -1430,8 +1535,9 @@ void mouse_tick_task(void) } #endif -void button_init_sdl(void) +void button_init_device(void) { + SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); #ifdef HAVE_TOUCHSCREEN tick_add_task(mouse_tick_task); #endif @@ -1441,6 +1547,10 @@ void button_init_sdl(void) /* Run sim with --mapping to get coordinates */ /* or --debugbuttons to check */ /* The First matching button is returned */ +struct button_map { + int button, x, y, radius; + char *description; +}; #ifdef SANSA_FUZE struct button_map bm[] = { @@ -1892,7 +2002,8 @@ struct button_map bm[] = { }; #endif -int xy2button( int x, int y) { +static int xy2button( int x, int y) +{ int i; extern bool debug_buttons; diff --git a/uisimulator/sdl/sound.h b/firmware/target/hosted/sdl/button-sdl.h similarity index 75% rename from uisimulator/sdl/sound.h rename to firmware/target/hosted/sdl/button-sdl.h index 5f4cc6eaf..75a68c49b 100644 --- a/uisimulator/sdl/sound.h +++ b/firmware/target/hosted/sdl/button-sdl.h @@ -1,13 +1,13 @@ /*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ * $Id$ * - * Copyright (C) 2005 by Daniel Stenberg + * Copyright (C) 2009 by Thomas Martitz * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -19,6 +19,14 @@ * ****************************************************************************/ -int sound_playback_thread(void* p); -extern void (*sound_get_pcm)(unsigned char** start, long* size); +#ifndef __BUTTON_SDL_H__ +#define __BUTTON_SDL_H__ + +#include +#include "config.h" + +bool button_hold(void); +void button_init_device(void); + +#endif /* __BUTTON_SDL_H__ */ diff --git a/uisimulator/sdl/kernel-sdl.c b/firmware/target/hosted/sdl/kernel-sdl.c similarity index 92% rename from uisimulator/sdl/kernel-sdl.c rename to firmware/target/hosted/sdl/kernel-sdl.c index 3288a6f97..d796921e3 100644 --- a/uisimulator/sdl/kernel-sdl.c +++ b/firmware/target/hosted/sdl/kernel-sdl.c @@ -20,14 +20,15 @@ ****************************************************************************/ #include +#include #include #include #include "memory.h" #include "system-sdl.h" -#include "uisdl.h" -#include "kernel.h" #include "thread-sdl.h" +#include "kernel.h" #include "thread.h" +#include "panic.h" #include "debug.h" static SDL_TimerID tick_timer_id; @@ -90,19 +91,19 @@ void sim_exit_irq_handler(void) SDL_UnlockMutex(sim_irq_mtx); } -bool sim_kernel_init(void) +static bool sim_kernel_init(void) { sim_irq_mtx = SDL_CreateMutex(); if (sim_irq_mtx == NULL) { - fprintf(stderr, "Cannot create sim_handler_mtx\n"); + panicf("Cannot create sim_handler_mtx\n"); return false; } sim_thread_cond = SDL_CreateCond(); if (sim_thread_cond == NULL) { - fprintf(stderr, "Cannot create sim_thread_cond\n"); + panicf("Cannot create sim_thread_cond\n"); return false; } @@ -141,6 +142,12 @@ Uint32 tick_timer(Uint32 interval, void *param) void tick_start(unsigned int interval_in_ms) { + if (!sim_kernel_init()) + { + panicf("Could not initialize kernel!"); + exit(-1); + } + if (tick_timer_id != NULL) { SDL_RemoveTimer(tick_timer_id); diff --git a/uisimulator/sdl/lcd-bitmap.c b/firmware/target/hosted/sdl/lcd-bitmap.c similarity index 99% rename from uisimulator/sdl/lcd-bitmap.c rename to firmware/target/hosted/sdl/lcd-bitmap.c index 0bd90196e..6dfbffff3 100644 --- a/uisimulator/sdl/lcd-bitmap.c +++ b/firmware/target/hosted/sdl/lcd-bitmap.c @@ -20,7 +20,8 @@ ****************************************************************************/ #include "debug.h" -#include "uisdl.h" +#include "sim-ui-defines.h" +#include "system.h" #include "lcd-sdl.h" #include "screendump.h" diff --git a/uisimulator/sdl/lcd-bitmap.h b/firmware/target/hosted/sdl/lcd-bitmap.h similarity index 100% rename from uisimulator/sdl/lcd-bitmap.h rename to firmware/target/hosted/sdl/lcd-bitmap.h diff --git a/uisimulator/sdl/lcd-charcells.c b/firmware/target/hosted/sdl/lcd-charcells.c similarity index 99% rename from uisimulator/sdl/lcd-charcells.c rename to firmware/target/hosted/sdl/lcd-charcells.c index 05513ab26..900cbb04d 100644 --- a/uisimulator/sdl/lcd-charcells.c +++ b/firmware/target/hosted/sdl/lcd-charcells.c @@ -19,17 +19,18 @@ * ****************************************************************************/ +#include +#include +#include +#include "system.h" #include "debug.h" #include "lcd.h" #include "lcd-charcell.h" #include "screendump.h" #include "general.h" -#include -#include -#include #include "lcd-playersim.h" -#include "uisdl.h" +#include "sim-ui-defines.h" #include "lcd-sdl.h" /* can't include file.h here */ diff --git a/uisimulator/sdl/lcd-charcells.h b/firmware/target/hosted/sdl/lcd-charcells.h similarity index 100% rename from uisimulator/sdl/lcd-charcells.h rename to firmware/target/hosted/sdl/lcd-charcells.h diff --git a/uisimulator/sdl/lcd-remote-bitmap.c b/firmware/target/hosted/sdl/lcd-remote-bitmap.c similarity index 98% rename from uisimulator/sdl/lcd-remote-bitmap.c rename to firmware/target/hosted/sdl/lcd-remote-bitmap.c index c44e47628..9972f3e42 100644 --- a/uisimulator/sdl/lcd-remote-bitmap.c +++ b/firmware/target/hosted/sdl/lcd-remote-bitmap.c @@ -19,10 +19,11 @@ * ****************************************************************************/ -#include "uisdl.h" +#include "sim-ui-defines.h" #include "lcd-sdl.h" #include "lcd-remote-bitmap.h" #include "screendump.h" +#include "system.h" /* background */ SDL_Surface *remote_surface = 0; diff --git a/uisimulator/sdl/lcd-remote-bitmap.h b/firmware/target/hosted/sdl/lcd-remote-bitmap.h similarity index 100% rename from uisimulator/sdl/lcd-remote-bitmap.h rename to firmware/target/hosted/sdl/lcd-remote-bitmap.h diff --git a/uisimulator/sdl/lcd-sdl.c b/firmware/target/hosted/sdl/lcd-sdl.c similarity index 98% rename from uisimulator/sdl/lcd-sdl.c rename to firmware/target/hosted/sdl/lcd-sdl.c index f1ffe8a76..15e4ba95c 100644 --- a/uisimulator/sdl/lcd-sdl.c +++ b/firmware/target/hosted/sdl/lcd-sdl.c @@ -19,8 +19,9 @@ * ****************************************************************************/ +#include #include "lcd-sdl.h" -#include "uisdl.h" +#include "sim-ui-defines.h" #include "system.h" /* for MIN() and MAX() */ int display_zoom = 1; diff --git a/uisimulator/sdl/lcd-sdl.h b/firmware/target/hosted/sdl/lcd-sdl.h similarity index 97% rename from uisimulator/sdl/lcd-sdl.h rename to firmware/target/hosted/sdl/lcd-sdl.h index 9ffa5246c..1f57b06b9 100644 --- a/uisimulator/sdl/lcd-sdl.h +++ b/firmware/target/hosted/sdl/lcd-sdl.h @@ -27,6 +27,7 @@ /* Default display zoom level */ extern int display_zoom; +extern SDL_Surface *gui_surface; void sdl_update_rect(SDL_Surface *surface, int x_start, int y_start, int width, int height, int max_x, int max_y, diff --git a/uisimulator/sdl/sound.c b/firmware/target/hosted/sdl/pcm-sdl.c similarity index 76% rename from uisimulator/sdl/sound.c rename to firmware/target/hosted/sdl/pcm-sdl.c index 0f8d5d493..1772db94f 100644 --- a/uisimulator/sdl/sound.c +++ b/firmware/target/hosted/sdl/pcm-sdl.c @@ -8,6 +8,7 @@ * $Id$ * * Copyright (C) 2005 by Nick Lanham + * Copyright (C) 2010 by Thomas Martitz * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -23,17 +24,20 @@ #include #include -#include -#include "kernel.h" +#include +#include "config.h" +#include "debug.h" #include "sound.h" #include "audiohw.h" +#include "system.h" #include "pcm.h" #include "pcm_sampr.h" -#include "SDL.h" -/*#define LOGF_ENABLE*/ -#include "logf.h" +#ifdef DEBUG +#include +extern bool debug_audio; +#endif static int sim_volume = 0; @@ -45,23 +49,19 @@ static size_t pcm_data_size; static size_t pcm_sample_bytes; static size_t pcm_channel_bytes; -static struct pcm_udata +struct pcm_udata { Uint8 *stream; Uint32 num_in; Uint32 num_out; +#ifdef DEBUG FILE *debug; +#endif } udata; static SDL_AudioSpec obtained; static SDL_AudioCVT cvt; -extern bool debug_audio; - -#ifndef MIN -#define MIN(a, b) (((a) < (b)) ? (a) : (b)) -#endif - void pcm_play_lock(void) { SDL_LockAudio(); @@ -102,11 +102,13 @@ void pcm_play_dma_start(const void *addr, size_t size) void pcm_play_dma_stop(void) { SDL_PauseAudio(1); +#ifdef DEBUG if (udata.debug != NULL) { fclose(udata.debug); udata.debug = NULL; DEBUGF("Audio debug file closed\n"); } +#endif } void pcm_play_dma_pause(bool pause) @@ -122,13 +124,14 @@ size_t pcm_get_bytes_waiting(void) return pcm_data_size; } -extern int sim_volume; /* in firmware/sound.c */ -static void write_to_soundcard(struct pcm_udata *udata) { +void write_to_soundcard(struct pcm_udata *udata) +{ +#ifdef DEBUG if (debug_audio && (udata->debug == NULL)) { udata->debug = fopen("audiodebug.raw", "ab"); DEBUGF("Audio debug file open\n"); } - +#endif if (cvt.needed) { Uint32 rd = udata->num_in; Uint32 wr = (double)rd * cvt.len_ratio; @@ -162,10 +165,11 @@ static void write_to_soundcard(struct pcm_udata *udata) { udata->num_in = cvt.len / pcm_sample_bytes; udata->num_out = cvt.len_cvt / pcm_sample_bytes; +#ifdef DEBUG if (udata->debug != NULL) { fwrite(cvt.buf, sizeof(Uint8), cvt.len_cvt, udata->debug); } - +#endif free(cvt.buf); } else { @@ -191,26 +195,27 @@ static void write_to_soundcard(struct pcm_udata *udata) { break; } } - +#ifdef DEBUG if (udata->debug != NULL) { fwrite(udata->stream, sizeof(Uint8), wr, udata->debug); } +#endif } } else { udata->num_in = udata->num_out = MIN(udata->num_in, udata->num_out); SDL_MixAudio(udata->stream, pcm_data, udata->num_out * pcm_sample_bytes, sim_volume); - +#ifdef DEBUG if (udata->debug != NULL) { fwrite(pcm_data, sizeof(Uint8), udata->num_out * pcm_sample_bytes, udata->debug); } +#endif } } -static void sdl_audio_callback(struct pcm_udata *udata, Uint8 *stream, int len) +void sdl_audio_callback(struct pcm_udata *udata, Uint8 *stream, int len) { - logf("sdl_audio_callback: len %d, pcm %d\n", len, pcm_data_size); udata->stream = stream; /* Write what we have in the PCM buffer */ @@ -221,6 +226,7 @@ static void sdl_audio_callback(struct pcm_udata *udata, Uint8 *stream, int len) while (len > 0) { if ((ssize_t)pcm_data_size <= 0) { pcm_data_size = 0; + if (pcm_callback_for_more) pcm_callback_for_more(&pcm_data, &pcm_data_size); } @@ -302,14 +308,20 @@ const void * pcm_rec_dma_get_peak_buffer(void) void pcm_play_dma_init(void) { + if (SDL_InitSubSystem(SDL_INIT_AUDIO)) + { + DEBUGF("Could not initialize SDL audio subsystem!\n"); + return; + } + SDL_AudioSpec wanted_spec; +#ifdef DEBUG udata.debug = NULL; - if (debug_audio) { udata.debug = fopen("audiodebug.raw", "wb"); DEBUGF("Audio debug file open\n"); } - +#endif /* Set 16-bit stereo audio at 44Khz */ wanted_spec.freq = 44100; wanted_spec.format = AUDIO_S16SYS; @@ -322,7 +334,7 @@ void pcm_play_dma_init(void) /* Open the audio device and start playing sound! */ if(SDL_OpenAudio(&wanted_spec, &obtained) < 0) { - fprintf(stderr, "Unable to open audio: %s\n", SDL_GetError()); + DEBUGF("Unable to open audio: %s\n", SDL_GetError()); return; } @@ -339,7 +351,7 @@ void pcm_play_dma_init(void) pcm_channel_bytes = 2; break; default: - fprintf(stderr, "Unknown sample format obtained: %u\n", + DEBUGF("Unknown sample format obtained: %u\n", (unsigned)obtained.format); return; } @@ -353,74 +365,9 @@ void pcm_postinit(void) { } -#endif /* CONFIG_CODEC == SWCODEC */ - -/** - * Audio Hardware api. Make them do nothing as we cannot properly simulate with - * SDL. if we used DSP we would run code that doesn't actually run on the target - **/ -void audiohw_set_volume(int volume) +void pcm_set_mixer_volume(int volume) { - sim_volume = SDL_MIX_MAXVOLUME * ((volume - VOLUME_MIN) / 10) / (VOLUME_RANGE / 10); -} -#if defined(AUDIOHW_HAVE_PRESCALER) -void audiohw_set_prescaler(int value) { (void)value; } -#endif -#if defined(AUDIOHW_HAVE_BALANCE) -void audiohw_set_balance(int value) { (void)value; } -#endif -#if defined(AUDIOHW_HAVE_BASS) -void audiohw_set_bass(int value) { (void)value; } -#endif -#if defined(AUDIOHW_HAVE_TREBLE) -void audiohw_set_treble(int value) { (void)value; } -#endif -#if CONFIG_CODEC != SWCODEC -void audiohw_set_channel(int value) { (void)value; } -void audiohw_set_stereo_width(int value){ (void)value; } -#endif -#if defined(AUDIOHW_HAVE_BASS_CUTOFF) -void audiohw_set_bass_cutoff(int value) { (void)value; } -#endif -#if defined(AUDIOHW_HAVE_TREBLE_CUTOFF) -void audiohw_set_treble_cutoff(int value){ (void)value; } -#endif -/* EQ-based tone controls */ -#if defined(AUDIOHW_HAVE_EQ) -void audiohw_set_eq_band_gain(unsigned int band, int value) - { (void)band; (void)value; } -#endif -#if defined(AUDIOHW_HAVE_EQ_FREQUENCY) -void audiohw_set_eq_band_frequency(unsigned int band, int value) - { (void)band; (void)value; } -#endif -#if defined(AUDIOHW_HAVE_EQ_WIDTH) -void audiohw_set_eq_band_width(unsigned int band, int value) - { (void)band; (void)value; } -#endif -#if defined(AUDIOHW_HAVE_DEPTH_3D) -void audiohw_set_depth_3d(int value) - { (void)value; } -#endif -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) -int mas_codec_readreg(int reg) -{ - (void)reg; - return 0; + sim_volume = volume; } -int mas_codec_writereg(int reg, unsigned int val) -{ - (void)reg; - (void)val; - return 0; -} -int mas_writemem(int bank, int addr, const unsigned long* src, int len) -{ - (void)bank; - (void)addr; - (void)src; - (void)len; - return 0; -} -#endif +#endif /* CONFIG_CODEC == SWCODEC */ diff --git a/uisimulator/sdl/uisdl.h b/firmware/target/hosted/sdl/sim-ui-defines.h similarity index 99% rename from uisimulator/sdl/uisdl.h rename to firmware/target/hosted/sdl/sim-ui-defines.h index dac84ffb7..567a618fc 100644 --- a/uisimulator/sdl/uisdl.h +++ b/firmware/target/hosted/sdl/sim-ui-defines.h @@ -397,12 +397,9 @@ #define UI_LCD_POSX 101 #define UI_LCD_POSY 195 -#else +#elif defined(SIMULATOR) #error no UI defines #endif -extern SDL_Surface *gui_surface; -extern bool background; /* True if the background image is enabled */ -extern int display_zoom; #endif /* #ifndef __UISDL_H__ */ diff --git a/uisimulator/sdl/uisdl.c b/firmware/target/hosted/sdl/system-sdl.c similarity index 50% rename from uisimulator/sdl/uisdl.c rename to firmware/target/hosted/sdl/system-sdl.c index 8cf4b42ba..693e8d1b5 100644 --- a/uisimulator/sdl/uisdl.c +++ b/firmware/target/hosted/sdl/system-sdl.c @@ -19,15 +19,13 @@ * ****************************************************************************/ +#include #include #include #include -#include "autoconf.h" -#include "button.h" #include "system-sdl.h" -#include "thread.h" -#include "kernel.h" -#include "uisdl.h" +#include "thread-sdl.h" +#include "sim-ui-defines.h" #include "lcd-sdl.h" #ifdef HAVE_LCD_BITMAP #include "lcd-bitmap.h" @@ -37,162 +35,58 @@ #ifdef HAVE_REMOTE_LCD #include "lcd-remote-bitmap.h" #endif -#include "thread-sdl.h" -#include "SDL_mutex.h" -#include "SDL_thread.h" -#include "math.h" +#include "panic.h" +#include "debug.h" +SDL_Surface *gui_surface; -/* extern functions */ -extern void new_key(int key); -extern int xy2button( int x, int y); -void button_event(int key, bool pressed); - -SDL_Surface *gui_surface; -bool background = true; /* use backgrounds by default */ +bool background = true; /* use backgrounds by default */ #ifdef HAVE_REMOTE_LCD -static bool showremote = true; /* include remote by default */ +bool showremote = true; /* include remote by default */ #endif -bool mapping = false; -bool debug_buttons = false; +bool mapping = false; +bool debug_buttons = false; -bool lcd_display_redraw = true; /* Used for player simulator */ -char having_new_lcd = true; /* Used for player simulator */ -bool sim_alarm_wakeup = false; -const char *sim_root_dir = NULL; +bool lcd_display_redraw = true; /* Used for player simulator */ +char having_new_lcd = true; /* Used for player simulator */ +bool sim_alarm_wakeup = false; +const char *sim_root_dir = NULL; +extern int display_zoom; +#ifdef DEBUG bool debug_audio = false; +#endif bool debug_wps = false; int wps_verbose_level = 3; -void irq_button_event(int key, bool pressed) { - sim_enter_irq_handler(); - button_event( key, pressed ); - sim_exit_irq_handler(); -} - -int sqr( int a ) { - return a*a; -} - -void gui_message_loop(void) +void sys_poweroff(void) { - SDL_Event event; - bool done = false; - static int x,y,xybutton = 0; - - while(!done && SDL_WaitEvent(&event)) - { - switch(event.type) - { - case SDL_KEYDOWN: - irq_button_event(event.key.keysym.sym, true); - break; - case SDL_KEYUP: - irq_button_event(event.key.keysym.sym, false); - case SDL_MOUSEBUTTONDOWN: - switch ( event.button.button ) { -#ifdef HAVE_SCROLLWHEEL - case SDL_BUTTON_WHEELUP: - irq_button_event( SDLK_UP, true ); - break; - case SDL_BUTTON_WHEELDOWN: - irq_button_event( SDLK_DOWN, true ); - break; -#endif - case SDL_BUTTON_LEFT: - case SDL_BUTTON_MIDDLE: - if ( mapping && background ) { - x = event.button.x; - y = event.button.y; - } - if ( background ) { - xybutton = xy2button( event.button.x, event.button.y ); - if( xybutton ) - irq_button_event( xybutton, true ); - } - break; - default: - break; - } - - if (debug_wps && event.button.button == 1) - { - if ( background ) -#ifdef HAVE_REMOTE - if ( event.button.y < UI_REMOTE_POSY ) /* Main Screen */ - printf("Mouse at: (%d, %d)\n", event.button.x - UI_LCD_POSX -1 , event.button.y - UI_LCD_POSY - 1 ); - else - printf("Mouse at: (%d, %d)\n", event.button.x - UI_REMOTE_POSX -1 , event.button.y - UI_REMOTE_POSY - 1 ); -#else - printf("Mouse at: (%d, %d)\n", event.button.x - UI_LCD_POSX -1 , event.button.y - UI_LCD_POSY - 1 ); -#endif - else - if ( event.button.y/display_zoom < LCD_HEIGHT ) /* Main Screen */ - printf("Mouse at: (%d, %d)\n", event.button.x/display_zoom, event.button.y/display_zoom ); -#ifdef HAVE_REMOTE - else - printf("Mouse at: (%d, %d)\n", event.button.x/display_zoom, event.button.y/display_zoom - LCD_HEIGHT ); -#endif - } - break; - case SDL_MOUSEBUTTONUP: - switch ( event.button.button ) { - /* The scrollwheel button up events are ignored as they are queued immediately */ - case SDL_BUTTON_LEFT: - case SDL_BUTTON_MIDDLE: - if ( mapping && background ) { - printf(" { SDLK_, %d, %d, %d, \"\" },\n", x, y, (int)sqrt( sqr(x-(int)event.button.x) + sqr(y-(int)event.button.y)) ); - } - if ( background && xybutton ) { - irq_button_event( xybutton, false ); - xybutton = 0; - } -#ifdef HAVE_TOUCHSCREEN - else { - irq_button_event(BUTTON_TOUCHSCREEN, false); - } -#endif - break; - default: - break; - } - break; - - - case SDL_QUIT: - done = true; - break; - default: - /*printf("Unhandled event\n"); */ - break; - } - } + /* Order here is relevent to prevent deadlocks and use of destroyed + sync primitives by kernel threads */ + sim_thread_shutdown(); + sim_kernel_shutdown(); + SDL_Quit(); } -bool gui_startup(void) +void system_init(void) { SDL_Surface *picture_surface; int width, height; - if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO|SDL_INIT_TIMER)) { - fprintf(stderr, "fatal: %s\n", SDL_GetError()); - return false; - } - - atexit(SDL_Quit); + if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER)) + panicf("%s", SDL_GetError()); /* Try and load the background image. If it fails go without */ if (background) { picture_surface = SDL_LoadBMP("UI256.bmp"); if (picture_surface == NULL) { background = false; - fprintf(stderr, "warn: %s\n", SDL_GetError()); + DEBUGF("warn: %s\n", SDL_GetError()); } } - + /* Set things up */ if (background) { @@ -217,8 +111,7 @@ bool gui_startup(void) if ((gui_surface = SDL_SetVideoMode(width * display_zoom, height * display_zoom, 24, SDL_HWSURFACE|SDL_DOUBLEBUF)) == NULL) { - fprintf(stderr, "fatal: %s\n", SDL_GetError()); - return false; + panicf("%s", SDL_GetError()); } SDL_WM_SetCaption(UI_TITLE, NULL); @@ -229,43 +122,38 @@ bool gui_startup(void) sim_lcd_remote_init(); #endif - SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); - if (background && picture_surface != NULL) { SDL_BlitSurface(picture_surface, NULL, gui_surface, NULL); SDL_UpdateRect(gui_surface, 0, 0, 0, 0); } - - return true; } -bool gui_shutdown(void) +void system_exception_wait(void) { - /* Order here is relevent to prevent deadlocks and use of destroyed - sync primitives by kernel threads */ - thread_sdl_shutdown(); - sim_kernel_shutdown(); - return true; + sim_thread_exception_wait(); } -#if defined(WIN32) && defined(main) -/* Don't use SDL_main on windows -> no more stdio redirection */ -#undef main -#endif +void system_reboot(void) +{ + sim_thread_exception_wait(); +} -int main(int argc, char *argv[]) +void sys_handle_argv(int argc, char *argv[]) { if (argc >= 1) { int x; for (x = 1; x < argc; x++) { +#ifdef DEBUG if (!strcmp("--debugaudio", argv[x])) { debug_audio = true; printf("Writing debug audio file.\n"); - } - else if (!strcmp("--debugwps", argv[x])) + } + else +#endif + if (!strcmp("--debugwps", argv[x])) { debug_wps = true; printf("WPS debug mode enabled.\n"); @@ -325,7 +213,9 @@ int main(int argc, char *argv[]) { printf("rockboxui\n"); printf("Arguments:\n"); +#ifdef DEBUG printf(" --debugaudio \t Write raw PCM data to audiodebug.raw\n"); +#endif printf(" --debugwps \t Print advanced WPS debug info\n"); printf(" --nobackground \t Disable the background image\n"); #ifdef HAVE_REMOTE_LCD @@ -340,29 +230,7 @@ int main(int argc, char *argv[]) } } } - if (display_zoom > 1) { background = false; } - - if (!sim_kernel_init()) { - fprintf(stderr, "sim_kernel_init failed\n"); - return -1; - } - - if (!gui_startup()) { - fprintf(stderr, "gui_startup failed\n"); - return -1; - } - - /* app_main will be called by the new main thread */ - if (!thread_sdl_init(NULL)) { - fprintf(stderr, "thread_sdl_init failed\n"); - return -1; - } - - gui_message_loop(); - - return gui_shutdown(); } - diff --git a/uisimulator/sdl/system-sdl.h b/firmware/target/hosted/sdl/system-sdl.h similarity index 90% rename from uisimulator/sdl/system-sdl.h rename to firmware/target/hosted/sdl/system-sdl.h index 04e033e33..917e6e89d 100644 --- a/uisimulator/sdl/system-sdl.h +++ b/firmware/target/hosted/sdl/system-sdl.h @@ -41,9 +41,12 @@ int set_irq_level(int level); void sim_enter_irq_handler(void); void sim_exit_irq_handler(void); -bool sim_kernel_init(void); void sim_kernel_shutdown(void); +void sys_poweroff(void); +void sys_handle_argv(int argc, char *argv[]); +extern bool background; /* True if the background image is enabled */ +extern int display_zoom; extern long start_tick; #endif /* _SYSTEM_SDL_H_ */ diff --git a/uisimulator/sdl/thread-sdl.c b/firmware/target/hosted/sdl/thread-sdl.c similarity index 91% rename from uisimulator/sdl/thread-sdl.c rename to firmware/target/hosted/sdl/thread-sdl.c index e9b5fc205..fbe2621d4 100644 --- a/uisimulator/sdl/thread-sdl.c +++ b/firmware/target/hosted/sdl/thread-sdl.c @@ -56,12 +56,15 @@ struct thread_entry threads[MAXTHREADS]; * in their start routines responding to messages so this is the only * way to get them back in there so they may exit */ static jmp_buf thread_jmpbufs[MAXTHREADS]; +/* this mutex locks out other Rockbox threads while one runs, + * that enables us to simulate a cooperative environment even if + * the host is preemptive */ static SDL_mutex *m; static volatile bool threads_exit = false; extern long start_tick; -void thread_sdl_shutdown(void) +void sim_thread_shutdown(void) { int i; @@ -79,6 +82,7 @@ void thread_sdl_shutdown(void) for (i = 0; i < MAXTHREADS; i++) { struct thread_entry *thread = &threads[i]; + /* exit all current threads, except the main one */ if (thread->context.t != NULL) { /* Signal thread on delay or block */ @@ -128,30 +132,9 @@ static struct thread_entry * find_empty_thread_slot(void) return thread; } -/* Do main thread creation in this file scope to avoid the need to double- - return to a prior call-level which would be unaware of the fact setjmp - was used */ -extern void app_main(void *param); -static int thread_sdl_app_main(void *param) -{ - SDL_LockMutex(m); - cores[CURRENT_CORE].running = &threads[0]; - - /* Set the jump address for return */ - if (setjmp(thread_jmpbufs[0]) == 0) - { - app_main(param); - /* should not ever be reached but... */ - THREAD_PANICF("app_main returned!\n"); - } - - /* Unlock and exit */ - SDL_UnlockMutex(m); - return 0; -} /* Initialize SDL threading */ -bool thread_sdl_init(void *param) +void init_threads(void) { struct thread_entry *thread; int n; @@ -164,7 +147,7 @@ bool thread_sdl_init(void *param) if (SDL_LockMutex(m) == -1) { fprintf(stderr, "Couldn't lock mutex\n"); - return false; + return; } /* Initialize all IDs */ @@ -180,30 +163,21 @@ bool thread_sdl_init(void *param) thread->name = "main"; thread->state = STATE_RUNNING; thread->context.s = SDL_CreateSemaphore(0); + thread->context.t = NULL; /* NULL for the implicit main thread */ cores[CURRENT_CORE].running = thread; if (thread->context.s == NULL) { fprintf(stderr, "Failed to create main semaphore\n"); - return false; - } - - thread->context.t = SDL_CreateThread(thread_sdl_app_main, param); - - if (thread->context.t == NULL) - { - SDL_DestroySemaphore(thread->context.s); - fprintf(stderr, "Failed to create main thread\n"); - return false; + return; } THREAD_SDL_DEBUGF("Main thread: %p\n", thread); - SDL_UnlockMutex(m); - return true; + return; } -void thread_sdl_exception_wait(void) +void sim_thread_exception_wait(void) { while (1) { @@ -214,7 +188,7 @@ void thread_sdl_exception_wait(void) } /* A way to yield and leave the threading system for extended periods */ -void thread_sdl_thread_lock(void *me) +void sim_thread_lock(void *me) { SDL_LockMutex(m); cores[CURRENT_CORE].running = (struct thread_entry *)me; @@ -223,7 +197,7 @@ void thread_sdl_thread_lock(void *me) thread_exit(); } -void * thread_sdl_thread_unlock(void) +void * sim_thread_unlock(void) { struct thread_entry *current = cores[CURRENT_CORE].running; SDL_UnlockMutex(m); @@ -529,19 +503,6 @@ unsigned int create_thread(void (*function)(void), return thread->id; } -void init_threads(void) -{ - /* Main thread is already initialized */ - if (cores[CURRENT_CORE].running != &threads[0]) - { - THREAD_PANICF("Wrong main thread in init_threads: %p\n", - cores[CURRENT_CORE].running); - } - - THREAD_SDL_DEBUGF("First Thread: %d (%s)\n", - 0, THREAD_SDL_GET_NAME(&threads[0])); -} - #ifndef ALLOW_REMOVE_THREAD static void remove_thread(unsigned int thread_id) #else diff --git a/uisimulator/sdl/thread-sdl.h b/firmware/target/hosted/sdl/thread-sdl.h similarity index 69% rename from uisimulator/sdl/thread-sdl.h rename to firmware/target/hosted/sdl/thread-sdl.h index f221aa5a7..9384e6060 100644 --- a/uisimulator/sdl/thread-sdl.h +++ b/firmware/target/hosted/sdl/thread-sdl.h @@ -22,16 +22,11 @@ #ifndef __THREADSDL_H__ #define __THREADSDL_H__ -#include "SDL_thread.h" - -extern SDL_Thread *gui_thread; /* The "main" thread */ -void thread_sdl_thread_lock(void *me); -void * thread_sdl_thread_unlock(void); -void thread_sdl_exception_wait(void); -bool thread_sdl_init(void *param); /* Init the sim threading API - thread created calls app_main */ -void thread_sdl_shutdown(void); /* Shut down all kernel threads gracefully */ -void thread_sdl_lock(void); /* Sync with SDL threads */ -void thread_sdl_unlock(void); /* Sync with SDL threads */ +/* extra thread functions that only apply when running on hosting platforms */ +void sim_thread_lock(void *me); +void * sim_thread_unlock(void); +void sim_thread_exception_wait(void); +void sim_thread_shutdown(void); /* Shut down all kernel threads gracefully */ #endif /* #ifndef __THREADSDL_H__ */ diff --git a/uisimulator/sdl/timer.c b/firmware/target/hosted/sdl/timer-sdl.c similarity index 100% rename from uisimulator/sdl/timer.c rename to firmware/target/hosted/sdl/timer-sdl.c diff --git a/tools/configure b/tools/configure index 6b58e432e..bf49be8a9 100755 --- a/tools/configure +++ b/tools/configure @@ -2973,6 +2973,10 @@ EOF if test -n "$t_cpu"; then TARGET_INC="-I\$(FIRMDIR)/target/$t_cpu/$t_manufacturer/$t_model" + if [ "$simulator" = "yes" ]; then # a few more includes for the sim target tree + TARGET_INC="$TARGET_INC -I\$(FIRMDIR)/target/hosted/sdl/" + TARGET_INC="$TARGET_INC -I\$(FIRMDIR)/target/hosted/" + fi TARGET_INC="$TARGET_INC -I\$(FIRMDIR)/target/$t_cpu/$t_manufacturer" TARGET_INC="$TARGET_INC -I\$(FIRMDIR)/target/$t_cpu" GCCOPTS="$GCCOPTS" diff --git a/uisimulator/common/io.c b/uisimulator/common/io.c index cddb19c9a..bdcc7e6ca 100644 --- a/uisimulator/common/io.c +++ b/uisimulator/common/io.c @@ -233,7 +233,7 @@ static ssize_t io_trigger_and_wait(int cmd) { /* Allow other rockbox threads to run */ io.accum = 0; - mythread = thread_sdl_thread_unlock(); + mythread = sim_thread_unlock(); } switch (cmd) @@ -249,7 +249,7 @@ static ssize_t io_trigger_and_wait(int cmd) /* Regain our status as current */ if (mythread != NULL) { - thread_sdl_thread_lock(mythread); + sim_thread_lock(mythread); } return result; diff --git a/uisimulator/common/powermgmt-sim.c b/uisimulator/common/powermgmt-sim.c index e2ce8c10d..dbd3149fb 100644 --- a/uisimulator/common/powermgmt-sim.c +++ b/uisimulator/common/powermgmt-sim.c @@ -157,10 +157,6 @@ void shutdown_hw(void) { } -void sys_poweroff(void) -{ -} - void cancel_shutdown(void) { } diff --git a/uisimulator/common/stubs.c b/uisimulator/common/stubs.c index d1ec4ec6c..d4a9af126 100644 --- a/uisimulator/common/stubs.c +++ b/uisimulator/common/stubs.c @@ -314,25 +314,9 @@ void cpu_sleep(bool enabled) (void)enabled; } -void button_set_flip(bool yesno) -{ - (void)yesno; -} - #ifdef HAVE_TOUCHPAD_SENSITIVITY_SETTING void touchpad_set_sensitivity(int level) { (void)level; } #endif - -void system_exception_wait(void) -{ - thread_sdl_exception_wait(); -} - -void system_reboot(void) -{ - thread_sdl_exception_wait(); -} - diff --git a/uisimulator/sdl/Makefile b/uisimulator/sdl/Makefile deleted file mode 100644 index dc76b35d6..000000000 --- a/uisimulator/sdl/Makefile +++ /dev/null @@ -1,64 +0,0 @@ -############################################################################ -# __________ __ ___. -# Open \______ \ ____ ____ | | _\_ |__ _______ ___ -# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -# \/ \/ \/ \/ \/ -# $Id$ -# -# Copyright (C) 2002, 2008 by 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. -# -############################################################################ - -SIMCOMMON = ../common - -DEPFILE = $(OBJDIR)/dep-sim - -RM = rm -f -DEBUG = -g - -# Use this for simulator-only files -INCLUDES = -I. -I$(SIMCOMMON) -I$(OBJDIR) $(TARGET_INC) -I$(FIRMDIR)/export \ --I$(APPSDIR) -I$(BUILDDIR) - -# This sets up 'SRC' based on the files mentioned in SOURCES -include $(TOOLSDIR)/makesrc.inc - -OBJS := $(SRC:%.c=$(OBJDIR)/%.o) - -DEFINES := -DHAVE_CONFIG_H -DGETTIMEOFDAY_TWO_ARGS -DSIMULATOR \ -$(TARGET) -DAPPSVERSION=\"$(VERSION)\" -DMEM=${MEMORYSIZE} $(EXTRA_DEFINES) - -SOURCES = $(SRC) - -DIRS = . - -CFLAGS = $(DEBUG) $(DEFINES) $(INCLUDES) $(GCCOPTS) -W -Wall - -OUTFILE = $(BUILDDIR)/libsim.a - -all: $(OUTFILE) - -include $(TOOLSDIR)/make.inc - -$(OUTFILE): $(OBJS) $(BUILDDIR)/UI256.bmp - $(call PRINTS,AR+RANLIB $(@F))$(AR) ruv $@ $(OBJS) >/dev/null 2>&1 - $(SILENT)$(RANLIB) $@ - -clean: - $(call PRINTS,cleaning sim)$(RM) $(OBJS) *~ core $(OUTFILE) $(DEPFILE) \ - $(BUILDDIR)/UI256.bmp $(DEPFILE) - $(SILENT)$(MAKE) -C $(SIMCOMMON) clean - -################## Specific dependencies ################## -$(BUILDDIR)/UI256.bmp: UI-$(MODELNAME).bmp - $(call PRINTS,UI)cp $< $@ - --include $(DEPFILE) diff --git a/uisimulator/sdl/README b/uisimulator/sdl/README deleted file mode 100644 index 0a293f6ad..000000000 --- a/uisimulator/sdl/README +++ /dev/null @@ -1,6 +0,0 @@ -To build: - - $ ../tools/configure - [answer questions] - $ make - $ ./rockboxui diff --git a/uisimulator/sdl/SOURCES b/uisimulator/sdl/SOURCES deleted file mode 100644 index 1d5b49824..000000000 --- a/uisimulator/sdl/SOURCES +++ /dev/null @@ -1,15 +0,0 @@ -button.c -kernel-sdl.c -#ifdef HAVE_LCD_BITMAP -lcd-bitmap.c -#elif defined(HAVE_LCD_CHARCELLS) -lcd-charcells.c -#endif -#ifdef HAVE_REMOTE_LCD -lcd-remote-bitmap.c -#endif -lcd-sdl.c -sound.c -timer.c -thread-sdl.c -uisdl.c diff --git a/uisimulator/sdl/button-sdl.h b/uisimulator/sdl/button-sdl.h deleted file mode 100644 index 948af62c5..000000000 --- a/uisimulator/sdl/button-sdl.h +++ /dev/null @@ -1,46 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2009 by Thomas Martitz - * - * 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. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ - - -#ifndef _BUTTON_SDL_H_ -#define _BUTTON_SDL_H_ - -#include -#include "config.h" -#include "button-target.h" - -#undef HAVE_LCD_FLIP - -#undef button_init_device -#define button_init_device() - -struct button_map { - int button, x, y, radius; - char *description; -}; - -int xy2button( int x, int y); -bool button_hold(void); -void button_init_sdl(void); -#undef button_init_device -#define button_init_device() button_init_sdl() - -#endif diff --git a/uisimulator/sdl/timefuncs.h b/uisimulator/sdl/timefuncs.h deleted file mode 100644 index de17fcdc7..000000000 --- a/uisimulator/sdl/timefuncs.h +++ /dev/null @@ -1,7 +0,0 @@ -#include -#include - -/* struct tm defined */ -struct tm *get_time(void); -int set_time(const struct tm *tm); -bool valid_time(const struct tm *tm); diff --git a/uisimulator/uisimulator.make b/uisimulator/uisimulator.make index 121f31e0f..86fcb2a3d 100644 --- a/uisimulator/uisimulator.make +++ b/uisimulator/uisimulator.make @@ -8,13 +8,10 @@ # INCLUDES += -I$(ROOTDIR)/uisimulator/sdl -I$(ROOTDIR)/uisimulator/common \ + -I$(FIRMDIR)/include -I$(FIRMDIR)/export $(TARGET_INC) -I$(BUILDDIR) -I$(APPSDIR) -SIMINCLUDES += -I$(ROOTDIR)/uisimulator/sdl -I$(ROOTDIR)/uisimulator/common \ - -I$(FIRMDIR)/export $(TARGET_INC) -I$(BUILDDIR) -I$(APPSDIR) +SIMFLAGS += $(INCLUDES) $(DEFINES) -DHAVE_CONFIG_H $(GCCOPTS) -SIMFLAGS += $(SIMINCLUDES) $(DEFINES) -DHAVE_CONFIG_H $(GCCOPTS) - -SIMSRC += $(call preprocess, $(ROOTDIR)/uisimulator/sdl/SOURCES) SIMSRC += $(call preprocess, $(ROOTDIR)/uisimulator/common/SOURCES) SIMOBJ = $(call c2obj,$(SIMSRC)) OTHER_SRC += $(SIMSRC) -- 2.11.4.GIT