summaryrefslogtreecommitdiffstats
path: root/firmware/export
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/export')
-rw-r--r--firmware/export/config.h10
-rw-r--r--firmware/export/config/gigabeats.h2
-rw-r--r--firmware/export/config/ipod4g.h1
-rw-r--r--firmware/export/config/ipod6g.h1
-rw-r--r--firmware/export/config/ipodcolor.h1
-rw-r--r--firmware/export/config/ipodmini1g.h1
-rw-r--r--firmware/export/config/ipodmini2g.h1
-rw-r--r--firmware/export/config/ipodnano1g.h1
-rw-r--r--firmware/export/config/ipodnano2g.h1
-rw-r--r--firmware/export/config/ipodvideo.h1
-rw-r--r--firmware/export/ipod_remote_tuner.h3
-rw-r--r--firmware/export/rds.h39
-rw-r--r--firmware/export/si4700.h28
-rw-r--r--firmware/export/tuner.h19
14 files changed, 78 insertions, 31 deletions
diff --git a/firmware/export/config.h b/firmware/export/config.h
index efad75f1b2..4209955c2d 100644
--- a/firmware/export/config.h
+++ b/firmware/export/config.h
@@ -712,6 +712,16 @@ Lyre prototype 1 */
#define BATTERY_CAPACITY_INC 0
#endif
+#ifdef HAVE_RDS_CAP
+/* combinable bitflags */
+#define RDS_CFG_ISR 0x1 /* uses ISR to process packets */
+#define RDS_CFG_PROCESS 0x2 /* uses raw packet processing */
+#define RDS_CFG_PUSH 0x4 /* pushes processed information */
+#ifndef CONFIG_RDS
+#define CONFIG_RDS RDS_CFG_PROCESS /* thread processing+raw processing */
+#endif /* CONFIG_RDS */
+#endif /* HAVE_RDS_CAP */
+
#ifndef CONFIG_ORIENTATION
#if LCD_HEIGHT > LCD_WIDTH
#define CONFIG_ORIENTATION SCREEN_PORTRAIT
diff --git a/firmware/export/config/gigabeats.h b/firmware/export/config/gigabeats.h
index e1bbb18529..928e8c0e60 100644
--- a/firmware/export/config/gigabeats.h
+++ b/firmware/export/config/gigabeats.h
@@ -121,7 +121,7 @@
/* Define this if you have a SI4700 fm radio tuner */
#define CONFIG_TUNER SI4700
#define HAVE_RDS_CAP
-#define RDS_ISR_PROCESSING
+#define CONFIG_RDS (RDS_CFG_ISR | RDS_CFG_PROCESS)
/* define this if you can flip your LCD */
#define HAVE_LCD_FLIP
diff --git a/firmware/export/config/ipod4g.h b/firmware/export/config/ipod4g.h
index dc83a594fc..785491a9ab 100644
--- a/firmware/export/config/ipod4g.h
+++ b/firmware/export/config/ipod4g.h
@@ -164,6 +164,7 @@
/* Define Apple remote tuner */
#define CONFIG_TUNER IPOD_REMOTE_TUNER
#define HAVE_RDS_CAP
+#define CONFIG_RDS RDS_CFG_PUSH
/* Define this if you have a PortalPlayer PP5020 */
#define CONFIG_CPU PP5020
diff --git a/firmware/export/config/ipod6g.h b/firmware/export/config/ipod6g.h
index 5494cf387a..7664fd4f90 100644
--- a/firmware/export/config/ipod6g.h
+++ b/firmware/export/config/ipod6g.h
@@ -167,6 +167,7 @@
/* Define Apple remote tuner */
//#define CONFIG_TUNER IPOD_REMOTE_TUNER
//#define HAVE_RDS_CAP
+//#define CONFIG_RDS RDS_CFG_PUSH
/* The exact type of CPU */
#define CONFIG_CPU S5L8702
diff --git a/firmware/export/config/ipodcolor.h b/firmware/export/config/ipodcolor.h
index 9f34a7955b..33533f925f 100644
--- a/firmware/export/config/ipodcolor.h
+++ b/firmware/export/config/ipodcolor.h
@@ -151,6 +151,7 @@
/* Define Apple remote tuner */
#define CONFIG_TUNER IPOD_REMOTE_TUNER
#define HAVE_RDS_CAP
+#define CONFIG_RDS RDS_CFG_PUSH
/* Define this if you have a PortalPlayer PP5020 */
#define CONFIG_CPU PP5020
diff --git a/firmware/export/config/ipodmini1g.h b/firmware/export/config/ipodmini1g.h
index 71dfe16c04..4f9f1b3dd9 100644
--- a/firmware/export/config/ipodmini1g.h
+++ b/firmware/export/config/ipodmini1g.h
@@ -163,6 +163,7 @@
/* Define Apple remote tuner */
#define CONFIG_TUNER IPOD_REMOTE_TUNER
#define HAVE_RDS_CAP
+#define CONFIG_RDS RDS_CFG_PUSH
/* Define this if you have a PortalPlayer PP5020 */
#define CONFIG_CPU PP5020
diff --git a/firmware/export/config/ipodmini2g.h b/firmware/export/config/ipodmini2g.h
index a2b199afee..977eb3da3f 100644
--- a/firmware/export/config/ipodmini2g.h
+++ b/firmware/export/config/ipodmini2g.h
@@ -164,6 +164,7 @@
/* Define Apple remote tuner */
#define CONFIG_TUNER IPOD_REMOTE_TUNER
#define HAVE_RDS_CAP
+#define CONFIG_RDS RDS_CFG_PUSH
/* Define this if you have a PortalPlayer PP5022 */
#define CONFIG_CPU PP5022
diff --git a/firmware/export/config/ipodnano1g.h b/firmware/export/config/ipodnano1g.h
index acdfff3c15..81d4a0ae4c 100644
--- a/firmware/export/config/ipodnano1g.h
+++ b/firmware/export/config/ipodnano1g.h
@@ -154,6 +154,7 @@
/* Define Apple remote tuner */
#define CONFIG_TUNER IPOD_REMOTE_TUNER
#define HAVE_RDS_CAP
+#define CONFIG_RDS RDS_CFG_PUSH
/* Define this if you have a PortalPlayer PP5022 */
#define CONFIG_CPU PP5022
diff --git a/firmware/export/config/ipodnano2g.h b/firmware/export/config/ipodnano2g.h
index aeff6aeda1..9d8c39ef7e 100644
--- a/firmware/export/config/ipodnano2g.h
+++ b/firmware/export/config/ipodnano2g.h
@@ -164,6 +164,7 @@
/* Define Apple remote tuner */
//#define CONFIG_TUNER IPOD_REMOTE_TUNER
//#define HAVE_RDS_CAP
+//#define CONFIG_RDS RDS_CFG_PUSH
/* The exact type of CPU */
#define CONFIG_CPU S5L8701
diff --git a/firmware/export/config/ipodvideo.h b/firmware/export/config/ipodvideo.h
index 2f28182731..7f1d83f4a5 100644
--- a/firmware/export/config/ipodvideo.h
+++ b/firmware/export/config/ipodvideo.h
@@ -170,6 +170,7 @@
/* Define Apple remote tuner */
#define CONFIG_TUNER IPOD_REMOTE_TUNER
#define HAVE_RDS_CAP
+#define CONFIG_RDS RDS_CFG_PUSH
/* Define this if you have a PortalPlayer PP5022 */
#define CONFIG_CPU PP5022
diff --git a/firmware/export/ipod_remote_tuner.h b/firmware/export/ipod_remote_tuner.h
index 30c83a4135..37bf412f53 100644
--- a/firmware/export/ipod_remote_tuner.h
+++ b/firmware/export/ipod_remote_tuner.h
@@ -33,13 +33,10 @@ extern void rmt_tuner_rds_data(unsigned int len, const unsigned char *buf);
int ipod_rmt_tuner_set(int setting, int value);
int ipod_rmt_tuner_get(int setting);
-char* ipod_get_rds_info(int setting);
-
#ifndef CONFIG_TUNER_MULTI
#define tuner_set ipod_rmt_tuner_set
#define tuner_get ipod_rmt_tuner_get
-#define tuner_get_rds_info ipod_get_rds_info
#endif
#endif /* _IPOD_REMOTE_TUNER_H_ */
diff --git a/firmware/export/rds.h b/firmware/export/rds.h
index ff1608f5c4..6c42e16f56 100644
--- a/firmware/export/rds.h
+++ b/firmware/export/rds.h
@@ -18,18 +18,45 @@
* KIND, either express or implied.
*
****************************************************************************/
+#ifndef RDS_H
+#define RDS_H
+
#include <stdint.h>
#include <stdbool.h>
#include "time.h"
void rds_init(void);
-
void rds_reset(void);
-bool rds_process(uint16_t data[4]);
+void rds_sync(void);
+
+#if (CONFIG_RDS & RDS_CFG_PROCESS)
+/* RDS raw data processing */
+void rds_process(const uint16_t data[4]);
+#endif /* (CONFIG_RDS & RDS_CFG_PROCESS) */
+
+enum rds_info_id
+{
+ RDS_INFO_NULL = 0,
+ RDS_INFO_CODEABLE, /* code table, right now only G0 */
+ RDS_INFO_PI, /* programme identifier */
+ RDS_INFO_PS, /* programme service name */
+ RDS_INFO_RT, /* radio text */
+ RDS_INFO_CT, /* clock time */
+};
+
+enum rds_code_table
+{
+ RDS_CT_G0, /* default code table G0 */
+ RDS_CT_G1, /* alternate code table G1 */
+ RDS_CT_G2, /* alternate code table G2 */
+};
-uint16_t rds_get_pi(void);
-char* rds_get_ps(void);
-char* rds_get_rt(void);
-time_t rds_get_ct(void);
+#if (CONFIG_RDS & RDS_CFG_PUSH)
+/* pushes preprocesed RDS information */
+void rds_push_info(enum rds_info_id info_id, uintptr_t data, size_t size);
+#endif /* (CONFIG_RDS & RDS_CFG_PUSH) */
+/* read fully-processed RDS data */
+size_t rds_pull_info(enum rds_info_id info_id, uintptr_t data, size_t size);
+#endif /* RDS_H */
diff --git a/firmware/export/si4700.h b/firmware/export/si4700.h
index 6b7992c025..bd75bf0817 100644
--- a/firmware/export/si4700.h
+++ b/firmware/export/si4700.h
@@ -35,36 +35,34 @@ struct si4700_dbg_info
};
bool si4700_detect(void);
-void si4700_init(void);
+void si4700_init(void) INIT_ATTR;
int si4700_set(int setting, int value);
int si4700_get(int setting);
void si4700_dbg_info(struct si4700_dbg_info *nfo);
/* For interrupt-based mono/stereo indicator */
bool si4700_st(void);
+#ifdef HAVE_RDS_CAP
/** RDS support **/
-void si4700_rds_init(void);
+
+void si4700_rds_init(void) INIT_ATTR;
/* Radio is fully powered up or about to be powered down */
void si4700_rds_powerup(bool on);
-#ifdef RDS_ISR_PROCESSING
+
+#if (CONFIG_RDS & RDS_CFG_ISR)
/* Read raw RDS info for processing - asynchronously */
-void si4700_read_raw_async(int count); /* implemented by target */
-void si4700_rds_read_raw_async(void);
-void si4700_rds_read_raw_async_complete(unsigned char *regbuf,
- uint16_t data[4]);
-#else /* ndef RDS_ISR_PROCESSING */
+void si4700_rds_read_raw_async(unsigned char *buf, int count); /* implemented by target */
+void si4700_rds_interrupt(void);
+#endif /* (CONFIG_RDS & RDS_CFG_ISR) */
+
/* Read raw RDS info for processing */
-bool si4700_rds_read_raw(uint16_t data[4]);
-#endif /* RDS_ISR_PROCESSING */
-/* Obtain specified string */
-char* si4700_get_rds_info(int setting);
-/* Set the event flag */
-void si4700_rds_set_event(void);
+void si4700_rds_process(void);
+
+#endif /* HAVE_RDS_CAP */
#ifndef CONFIG_TUNER_MULTI
#define tuner_set si4700_set
#define tuner_get si4700_get
-#define tuner_get_rds_info si4700_get_rds_info
#endif
#endif /* _SI4700_H_ */
diff --git a/firmware/export/tuner.h b/firmware/export/tuner.h
index 050bbd0f33..a166eacf33 100644
--- a/firmware/export/tuner.h
+++ b/firmware/export/tuner.h
@@ -25,6 +25,10 @@
#include "config.h"
#include "hwcompat.h"
+#ifdef HAVE_RDS_CAP
+#include <sys/types.h>
+#endif
+
/** Settings to the tuner layer **/
enum
{
@@ -45,8 +49,6 @@ enum
RADIO_PRESENT = 0,
RADIO_TUNED,
RADIO_STEREO,
- /* RADIO_EVENT is an event that requests a screen update */
- RADIO_EVENT,
RADIO_RSSI,
RADIO_RSSI_MIN,
RADIO_RSSI_MAX,
@@ -57,15 +59,20 @@ enum
#ifdef HAVE_RDS_CAP
/** Readback from the tuner RDS layer **/
-enum
+/* returns needed size if buffer size is inadequate */
+size_t tuner_get_rds_info(int setting, void *dst, size_t dstsize);
+
+enum RADIO_RDS_INFO
{
- RADIO_RDS_NAME,
- RADIO_RDS_TEXT,
+ RADIO_RDS_NAME, /* dst: array of char, dstsize: buffer size */
+ RADIO_RDS_TEXT, /* dst: array of char, dstsize: buffer size */
+ RADIO_RDS_PROGRAM_INFO, /* dst: uint16_t *, dstsize: >= sizeof(uint16_t) */
+ RADIO_RDS_CURRENT_TIME, /* dst: time_t *, dstsize: >= sizeof(time_t) */
/* Put new general-purpose readback values above this line */
__RADIO_GET_RDS_INFO_STANDARD_LAST
};
-#endif
+#endif /* HAVE_RDS_CAP */
/** Tuner regions **/