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/

RDA5807M.h

Committer:
star297
Date:
2015-04-12
Revision:
2:cf256181972f
Parent:
1:2c8a64e71afd
Child:
3:bdd691977de4

File content as of revision 2:cf256181972f:


#include "mbed.h"

class RDA5807M
{
    public:

    RDA5807M(PinName sda, PinName scl);
    
    ~RDA5807M();

//--------------------------------------------------------------
// Global Functions
//--------------------------------------------------------------
void WriteAll(void);
void WriteReg(int address,int data);
void Init(void);
void Read(void);
void Reset(void);
void PowerOn(void);
void PowerOff(void);
void RDS(void);
void Mute(void);
void Mono(void);
void Softmute(void);
void SoftBlend(void);
void BassBoost(void);
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  // Write address
#define RDARandom         0x22  // Read address
/* Initialization Options */
#define StartingFreq    87.000
#define EndingFreq      108.00
#define DefaultFreq      98.80
#define InitialVolume        4
/* RDA5807M Function Code  */
/* Register 0x02H (16Bits) */
#define RDA_DHIZ        0x8000
#define RDA_MUTE        0x8000
#define RDA_MONO_ON     0x2000
#define RDA_MONO_OFF    0xDFFF
#define RDA_BASS_ON     0x1000
#define RDA_BASS_OFF    0xEFFF
#define RDA_RCLK_MODE   0x0800
#define RDA_RCLK_DIRECT 0x0400
#define RDA_SEEK_UP     0x0300
#define RDA_SEEK_DOWN   0x0100
#define RDA_SEEK_STOP   0xFCFF
#define RDA_SEEK_WRAP   0x0080
#define RDA_SEEK_NOWRAP 0xFF7F
#define RDA_CLK_0327    0x0000
#define RDA_CLK_1200    0x0010
#define RDA_CLK_2400    0x0050
#define RDA_CLK_1300    0x0020
#define RDA_CLK_2600    0x0060
#define RDA_CLK_1920    0x0030
#define RDA_CLK_3840    0x0070
#define RDA_RDS_ON      0x0008
#define RDA_RDS_OFF     0xFFF7
#define RDA_NEW         0x0004
#define RDA_RESET       0x0002
#define RDA_POWER       0x0001
/* Register 0x03H (16Bits) */
#define RDA_TUNE_ON     0x0010
#define RDA_TUNE_OFF    0xFFEF
//--------------------------------------------------------------
// Global Variables
//--------------------------------------------------------------
//
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;

  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; 

};