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-06-19
- Revision:
- 4:3e7968bd455d
- Parent:
- 3:bdd691977de4
File content as of revision 4:3e7968bd455d:
#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 Readregisters(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.00
#define EndingFreq 108.00
#define DefaultFreq 87.50
#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
char CTtime[12]; // CT time string formatted as 'CT hh:mm'
int minutes; // CT minutes 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;
int mins; // RDS time in minutes
int lastmins;
int i,n;
int idx; // index of rdsText
int offset; // RDS time offset and sign
char c1, c2;
char RDSTxt[66];
char PSName[10]; // including trailing '\00' character.
char PSName1[10];
char PSName2[10];
};