From 9b4057bbd43dfeaf69785605407e4625f01be069 Mon Sep 17 00:00:00 2001 From: Rafaël Carré Date: Sun, 1 Nov 2009 22:51:31 +0000 Subject: Sansa AMS recording support (Microphone and FM) Still disabled on all targets: - Fuze and e200v2 see spurious interrupts with no source defined - Clip/m200v4 deadlock instantly when starting recording (perhaps due to low memory size) Having the code in SVN will make working on this feature easier Also add keymaps for Fuze, and correct Frequency section of recording options : the 22.05kHz limitation of e200v1 and c200v1 doesn't apply to Sansa AMS (different I2S hardware, unrelated to as3514) Flyspray: FS#10371 Authors: Fred Bauer and myself git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23476 a1c6a512-1295-4272-9138-f99709370657 --- firmware/target/arm/as3525/audio-as3525.c | 61 ++++++++++++++++++++++--------- 1 file changed, 44 insertions(+), 17 deletions(-) (limited to 'firmware/target/arm/as3525/audio-as3525.c') diff --git a/firmware/target/arm/as3525/audio-as3525.c b/firmware/target/arm/as3525/audio-as3525.c index 410fdfad79..b616153eae 100644 --- a/firmware/target/arm/as3525/audio-as3525.c +++ b/firmware/target/arm/as3525/audio-as3525.c @@ -25,44 +25,71 @@ #include "audiohw.h" #include "sound.h" -int audio_channels = 2; -int audio_output_source = AUDIO_SRC_PLAYBACK; - void audio_set_output_source(int source) { - if ((unsigned)source >= AUDIO_NUM_SOURCES) - source = AUDIO_SRC_PLAYBACK; - - audio_output_source = source; -} /* audio_set_output_source */ + (void)source; +} void audio_input_mux(int source, unsigned flags) { static int last_source = AUDIO_SRC_PLAYBACK; - - (void)flags; +#ifdef HAVE_RECORDING + static bool last_recording = false; + const bool recording = flags & SRCF_RECORDING; +#else + (void) flags; +#endif switch (source) { default: /* playback - no recording */ source = AUDIO_SRC_PLAYBACK; case AUDIO_SRC_PLAYBACK: - audio_channels = 2; if (source != last_source) { audiohw_set_monitor(false); +#ifdef HAVE_RECORDING + audiohw_disable_recording(); +#endif + } + break; + +#ifdef HAVE_RECORDING + case AUDIO_SRC_MIC: /* recording only */ + if (source != last_source) + { + audiohw_set_monitor(false); + audiohw_enable_recording(true); /* source mic */ } break; +#endif case AUDIO_SRC_FMRADIO: /* recording and playback */ - audio_channels = 2; - if (source == last_source) + if (source == last_source +#ifdef HAVE_RECORDING + && recording == last_recording +#endif + ) break; - audiohw_set_monitor(true); +#ifdef HAVE_RECORDING + last_recording = recording; + + if (recording) + { + audiohw_set_monitor(false); + audiohw_enable_recording(false); + } + else +#endif + { +#ifdef HAVE_RECORDING + audiohw_disable_recording(); +#endif + audiohw_set_monitor(true); /* line 2 analog audio path */ + } break; - } /* end switch */ + } last_source = source; -} /* audio_input_mux */ - +} -- cgit v1.2.3