summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2006-07-21 08:42:28 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2006-07-21 08:42:28 +0000
commited4d7a33bdeba5ce11512ee617398a2840797203 (patch)
tree1027077148ace8e13c8fa49ae3794b2038a2d67a /apps
parente8818efbe9c814ad3b46ee0e5d0ae250b7c96cf4 (diff)
downloadrockbox-ed4d7a33bdeba5ce11512ee617398a2840797203.zip
rockbox-ed4d7a33bdeba5ce11512ee617398a2840797203.tar.gz
rockbox-ed4d7a33bdeba5ce11512ee617398a2840797203.tar.bz2
rockbox-ed4d7a33bdeba5ce11512ee617398a2840797203.tar.xz
Patch #5347 by Rani Hod - Adds FM radio and recording features to the iAudio X5.
Also includes a rewrite of the Coldfire I2C driver to include both read and write. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10272 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r--apps/main.c4
-rw-r--r--apps/recorder/radio.c57
-rw-r--r--apps/recorder/recording.c16
3 files changed, 70 insertions, 7 deletions
diff --git a/apps/main.c b/apps/main.c
index 4f31cdb..8ee6adf 100644
--- a/apps/main.c
+++ b/apps/main.c
@@ -72,7 +72,7 @@
#else
#define pcmbuf_init()
#endif
-#if (defined(IRIVER_H100_SERIES) || defined(IRIVER_H300_SERIES)) && !defined(SIMULATOR)
+#if (CONFIG_CODEC == SWCODEC) && defined(HAVE_RECORDING) && !defined(SIMULATOR)
#include "pcm_record.h"
#define SETTINGS_RESET BUTTON_REC
#endif
@@ -425,7 +425,7 @@ void init(void)
talk_init();
audio_init();
-#if (defined(IRIVER_H100_SERIES) || defined(IRIVER_H300_SERIES)) && !defined(SIMULATOR)
+#if (CONFIG_CODEC == SWCODEC) && defined(HAVE_RECORDING) && !defined(SIMULATOR)
pcm_rec_init();
#endif
diff --git a/apps/recorder/radio.c b/apps/recorder/radio.c
index 291079b..a29620b 100644
--- a/apps/recorder/radio.c
+++ b/apps/recorder/radio.c
@@ -64,7 +64,13 @@
#ifdef CONFIG_TUNER
#if CONFIG_CODEC == SWCODEC
+#ifdef HAVE_UDA1380
#include "uda1380.h"
+#endif
+#ifdef HAVE_TLV320
+#include "tlv320.h"
+#endif
+
#include "pcm_record.h"
#endif
@@ -109,6 +115,35 @@
#define FM_STOP BUTTON_OFF
#define FM_RC_STOP BUTTON_RC_STOP
+#elif (CONFIG_KEYPAD == IAUDIO_X5_PAD)
+/* pause/play - short PLAY */
+#define FM_PLAY_PRE BUTTON_PLAY
+#define FM_RC_PLAY_PRE BUTTON_RC_PLAY
+#define FM_PLAY (BUTTON_PLAY | BUTTON_REL)
+#define FM_RC_PLAY (BUTTON_RC_PLAY | BUTTON_REL)
+/* preset/scan mode - long PLAY */
+#define FM_MODE (BUTTON_PLAY | BUTTON_REPEAT)
+#define FM_RC_MODE (BUTTON_RC_PLAY | BUTTON_REPEAT)
+/* preset menu - short SELECT */
+#define FM_PRESET_PRE BUTTON_SELECT
+#define FM_RC_PRESET_PRE BUTTON_RC_MENU
+#define FM_PRESET (BUTTON_SELECT | BUTTON_REL)
+#define FM_RC_PRESET (BUTTON_RC_MENU | BUTTON_REL)
+/* fm menu - long SELECT */
+#define FM_MENU (BUTTON_SELECT | BUTTON_REPEAT)
+#define FM_RC_MENU (BUTTON_RC_MENU | BUTTON_REPEAT)
+/* main menu(exit radio while playing) - REC */
+#define FM_EXIT_PRE BUTTON_REC
+#define FM_EXIT (BUTTON_REC | BUTTON_REL)
+#define FM_RC_EXIT_PRE BUTTON_RC_MODE
+#define FM_RC_EXIT (BUTTON_RC_MODE | BUTTON_REL)
+/* prev/next preset on the remote - REW/FF */
+#define FM_NEXT_PRESET (BUTTON_RC_FF | BUTTON_REL)
+#define FM_PREV_PRESET (BUTTON_RC_REW | BUTTON_REL)
+/* stop and exit radio - ON */
+#define FM_STOP BUTTON_POWER
+#define FM_RC_STOP (BUTTON_RC_MODE | BUTTON_REPEAT)
+
#elif CONFIG_KEYPAD == ONDIO_PAD /* restricted keypad */
#define FM_MENU (BUTTON_MENU | BUTTON_REPEAT)
#define FM_RECORD_DBLPRE BUTTON_MENU
@@ -158,7 +193,7 @@ int radio_get(int setting);
#if CONFIG_TUNER == S1A0903X01 /* FM recorder */
#define radio_set samsung_set
#define radio_get samsung_get
-#elif CONFIG_TUNER == TEA5767 /* Iriver */
+#elif CONFIG_TUNER == TEA5767 /* iriver, iaudio */
#define radio_set philips_set
#define radio_get philips_get
#elif CONFIG_TUNER == (S1A0903X01 | TEA5767) /* OndioFM */
@@ -387,8 +422,15 @@ bool radio_screen(void)
#else
peak_meter_enabled = false;
+
+#ifdef HAVE_UDA1380
uda1380_enable_recording(false);
uda1380_set_monitor(true);
+#elif defined(HAVE_TLV320)
+ //tlv320_enable_recording(false);
+ tlv320_set_recvol(23, 23, AUDIO_GAIN_LINEIN); /* 0dB */
+ tlv320_set_monitor(true);
+#endif
/* Set the input multiplexer to FM */
pcm_rec_mux(1);
@@ -971,7 +1013,7 @@ bool radio_screen(void)
while(1)
{
button = button_get(true);
- if(button == (BUTTON_OFF | BUTTON_REL))
+ if(button == (FM_STOP | BUTTON_REL))
break;
}
}
@@ -1004,6 +1046,11 @@ bool radio_screen(void)
radio_stop();
#ifndef SIMULATOR /* SIMULATOR. Catch FMRADIO_OFF status for the sim. */
#if CONFIG_CODEC == SWCODEC
+#ifdef HAVE_TLV320
+ //tlv320_disable_recording();
+ tlv320_set_monitor(false);
+#endif
+
pcm_rec_mux(0); /* Line In */
peak_meter_enabled = true;
#endif
@@ -1320,7 +1367,7 @@ int handle_radio_presets_cb(int key, int m)
key = BUTTON_NONE;
break;
#endif
-#if (CONFIG_KEYPAD != IRIVER_H100_PAD) && (CONFIG_KEYPAD != IRIVER_H300_PAD)
+#if (CONFIG_KEYPAD != IRIVER_H100_PAD) && (CONFIG_KEYPAD != IRIVER_H300_PAD) && (CONFIG_KEYPAD != IAUDIO_X5_PAD)
#ifdef FM_PRESET
case FM_PRESET:
menu_draw(m);
@@ -1565,7 +1612,7 @@ int radio_menu_cb(int key, int m)
(void)m;
switch(key)
{
-#if (CONFIG_KEYPAD != IRIVER_H100_PAD) && (CONFIG_KEYPAD != IRIVER_H300_PAD)
+#if (CONFIG_KEYPAD != IRIVER_H100_PAD) && (CONFIG_KEYPAD != IRIVER_H300_PAD) && (CONFIG_KEYPAD != IAUDIO_X5_PAD)
#ifdef MENU_ENTER2
case MENU_ENTER2:
#endif
@@ -1574,7 +1621,7 @@ int radio_menu_cb(int key, int m)
key = BUTTON_NONE; /* eat the downpress, next menu reacts on release */
break;
-#if (CONFIG_KEYPAD != IRIVER_H100_PAD) && (CONFIG_KEYPAD != IRIVER_H300_PAD)
+#if (CONFIG_KEYPAD != IRIVER_H100_PAD) && (CONFIG_KEYPAD != IRIVER_H300_PAD) && (CONFIG_KEYPAD != IAUDIO_X5_PAD)
#ifdef MENU_ENTER2
case MENU_ENTER2 | BUTTON_REL:
#endif
diff --git a/apps/recorder/recording.c b/apps/recorder/recording.c
index 09ec0f4..d4094a2 100644
--- a/apps/recorder/recording.c
+++ b/apps/recorder/recording.c
@@ -34,6 +34,9 @@
#ifdef HAVE_UDA1380
#include "uda1380.h"
#endif
+#ifdef HAVE_TLV320
+#include "tlv320.h"
+#endif
#include "mp3_playback.h"
#include "mas.h"
@@ -109,6 +112,16 @@
#define REC_RC_PREV BUTTON_RC_REW
#define REC_RC_SETTINGS BUTTON_RC_MODE
+#elif (CONFIG_KEYPAD == IAUDIO_X5_PAD)
+#define REC_SHUTDOWN (BUTTON_POWER | BUTTON_REPEAT)
+#define REC_STOPEXIT BUTTON_POWER
+#define REC_RECPAUSE BUTTON_REC
+#define REC_INC BUTTON_RIGHT
+#define REC_DEC BUTTON_LEFT
+#define REC_NEXT BUTTON_DOWN
+#define REC_PREV BUTTON_UP
+#define REC_SETTINGS BUTTON_PLAY
+
#elif CONFIG_KEYPAD == GMINI100_PAD
#define REC_SHUTDOWN (BUTTON_OFF | BUTTON_REPEAT)
#define REC_STOPEXIT BUTTON_OFF
@@ -362,6 +375,9 @@ bool recording_screen(void)
audio_stop();
/* Set peak meter to recording mode */
peak_meter_playback(false);
+#ifdef IAUDIO_X5
+ pcm_rec_mux(0); /* select line-in (not radio) */
+#endif
#if defined(HAVE_SPDIF_IN) && !defined(SIMULATOR)
if (global_settings.rec_source == SOURCE_SPDIF)