diff options
| author | Björn Stenberg <bjorn@haxx.se> | 2011-03-14 12:25:48 +0000 |
|---|---|---|
| committer | Björn Stenberg <bjorn@haxx.se> | 2011-03-14 12:25:48 +0000 |
| commit | e50cc0e3d760d4fdb99f971070a6943ee15a9a98 (patch) | |
| tree | 9d22cde7d39a2aefbc75cd970916fbc161f53cac /firmware | |
| parent | 606bed035ed898df1d1bf4a8c7be904f76b118ff (diff) | |
| download | rockbox-e50cc0e3d760d4fdb99f971070a6943ee15a9a98.zip rockbox-e50cc0e3d760d4fdb99f971070a6943ee15a9a98.tar.gz rockbox-e50cc0e3d760d4fdb99f971070a6943ee15a9a98.tar.bz2 rockbox-e50cc0e3d760d4fdb99f971070a6943ee15a9a98.tar.xz | |
Listen to and follow external Android volume changes. (Based on FS#11914 by Maurus Cuelenaere)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29586 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
| -rw-r--r-- | firmware/export/config/android.h | 3 | ||||
| -rw-r--r-- | firmware/export/kernel.h | 1 | ||||
| -rw-r--r-- | firmware/export/system.h | 4 | ||||
| -rw-r--r-- | firmware/target/hosted/android/pcm-android.c | 25 |
4 files changed, 33 insertions, 0 deletions
diff --git a/firmware/export/config/android.h b/firmware/export/config/android.h index ed1a283..69a758d 100644 --- a/firmware/export/config/android.h +++ b/firmware/export/config/android.h @@ -79,6 +79,9 @@ /* define this if the target has volume keys which can be used in the lists */ #define HAVE_VOLUME_IN_LIST +/* define this if the host platform can change volume outside of rockbox */ +#define PLATFORM_HAS_VOLUME_CHANGE + #define HAVE_SW_TONE_CONTROLS /* Define current usage levels. */ diff --git a/firmware/export/kernel.h b/firmware/export/kernel.h index 6aaf11d..66efce3 100644 --- a/firmware/export/kernel.h +++ b/firmware/export/kernel.h @@ -83,6 +83,7 @@ #define SYS_IAP_HANDLEPKT MAKE_SYS_EVENT(SYS_EVENT_CLS_MISC, 2) #define SYS_CALL_INCOMING MAKE_SYS_EVENT(SYS_EVENT_CLS_MISC, 3) #define SYS_CALL_HUNG_UP MAKE_SYS_EVENT(SYS_EVENT_CLS_MISC, 4) +#define SYS_VOLUME_CHANGED MAKE_SYS_EVENT(SYS_EVENT_CLS_MISC, 5) #define IS_SYSEVENT(ev) ((ev & SYS_EVENT) == SYS_EVENT) diff --git a/firmware/export/system.h b/firmware/export/system.h index 78bddae..3f626c3 100644 --- a/firmware/export/system.h +++ b/firmware/export/system.h @@ -137,6 +137,10 @@ int get_cpu_boost_counter(void); #undef htobe32 #endif +#if (CONFIG_PLATFORM & PLATFORM_HOSTED) && defined(PLATFORM_HAS_VOLUME_CHANGE) +int hosted_get_volume(void); +#endif + /* Get the byte offset of a type's member */ #define OFFSETOF(type, membername) ((off_t)&((type *)0)->membername) diff --git a/firmware/target/hosted/android/pcm-android.c b/firmware/target/hosted/android/pcm-android.c index 4c34e3c..24881bd 100644 --- a/firmware/target/hosted/android/pcm-android.c +++ b/firmware/target/hosted/android/pcm-android.c @@ -179,3 +179,28 @@ void pcm_set_mixer_volume(int volume) (*env_ptr)->CallVoidMethod(env_ptr, RockboxPCM_instance, set_volume_method, volume); } + +/* Due to limitations of default_event_handler(), parameters gets swallowed when + * being posted with queue_broadcast(), so workaround this by caching the last + * value. + */ +static int lastPostedVolume = -1; +int hosted_get_volume(void) +{ + return lastPostedVolume; +} + +JNIEXPORT void JNICALL +Java_org_rockbox_RockboxPCM_postVolumeChangedEvent(JNIEnv *env, + jobject this, + jint volume) +{ + (void) env; + (void) this; + + if (volume != lastPostedVolume) + { + lastPostedVolume = volume; + queue_broadcast(SYS_VOLUME_CHANGED, 0); + } +} |