RDA5807M FM Radio library with RDS.

Dependents:   RDA5807M-FM-Radio EFM32 RDA5807M RDS Radio

Example program here:

https://developer.mbed.org/users/star297/code/RDA5807M-FM-Radio/

Revision:
1:2c8a64e71afd
Parent:
0:527aa96336ac
Child:
2:cf256181972f
--- a/RDA5807M.h	Tue Mar 31 22:26:32 2015 +0000
+++ b/RDA5807M.h	Sat Apr 11 22:53:22 2015 +0000
@@ -5,7 +5,7 @@
 {
     public:
 
-    RDA5807M(PinName sda, PinName scl, int addr);
+    RDA5807M(PinName sda, PinName scl);
     
     ~RDA5807M();
 
@@ -25,24 +25,32 @@
 void Softmute(void);
 void SoftBlend(void);
 void BassBoost(void);
-void Volume(int volume);
+void AFC(void);
+void Volume(int vol);
 void SeekUp(void);
 void SeekDown(void);
 void Frequency(float Freq);
 void Channel(void);
+void getRDS(void);
+
+
+// Initialise internal variables before starting or after a change to another channel.
+void RDSinit();
+
+// Pass all available RDS data through this function.
+void processData();
 
 //--------------------------------------------------------------
 // Definitions
 //--------------------------------------------------------------
 /* I2C Address */
-#define RDASequential     0x20  //Current Working Communication
-#define RDARandom         0x22  //To Do Soon
-#define TEA5767Mode       0x60  //Not implemented
+#define RDASequential     0x20  // Write address
+#define RDARandom         0x22  // Read address
 /* Initialization Options */
 #define StartingFreq    87.000
 #define EndingFreq      108.00
-#define DefaultFreq     87.000
-#define StartingVolume  0x4
+#define DefaultFreq     104.50
+#define InitialVolume        4
 /* RDA5807M Function Code  */
 /* Register 0x02H (16Bits) */
 #define RDA_DHIZ        0x8000
@@ -77,15 +85,35 @@
 // Global Variables
 //--------------------------------------------------------------
 //
-int rdsready,tuneok,nochannel,rdssynchro,stereo,signal,fmready,fmstation,rdsblockerror;
-float freq;
-unsigned int RDA5807M_WriteReg[8],RDA5807M_ReadReg[7],RDA5807M_RDS[32];
+int tuneok,nochannel,power,volume,softblend,bass,mute,softmute,mono,afc,stereo,signal,fmready,fmstation;
+int rdsblockerror,rdssynchro,rdsready,rds,block1,block2,block3,block4;
+
+char    StationName[10];    // Station Name. 8 characters
+char    RDSText[66];        // RDS test message 64 characters
+int     CTtime;             // CT time transmitted on the minute 
+float   freq;               // Tuned frequency
 
 //--------------------------------------------------------------
 
 private:
 
 I2C i2c;
-int addr; 
+
+  unsigned int RDA5807M_WriteReg[8],RDA5807M_ReadReg[7],RDA5807M_RDS[32];
 
-};
+// ----- actual RDS values
+  int textAB, lasttextAB, lastTextIDX;
+  int rdsGroupType, rdsTP, rdsPTY;
+// Program Service Name
+  char PSName1[10]; // including trailing '\00' character.
+  char PSName2[10]; // including trailing '\00' character.
+  
+  typedef void(*receiveServicenNameFunction)(char *name);
+  typedef void(*receiveTextFunction)(char *name);
+  typedef void(*receiveTimeFunction)(uint8_t hour, uint8_t minute);
+  
+  receiveServicenNameFunction sendServiceName; ///< Registered ServiceName function.
+  receiveTimeFunction sendTime; ///< Registered Time function.
+  receiveTextFunction sendText; 
+
+};
\ No newline at end of file