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@4:3e7968bd455d, 2015-06-19 (annotated)
- Committer:
- star297
- Date:
- Fri Jun 19 16:19:31 2015 +0000
- Revision:
- 4:3e7968bd455d
- Parent:
- 3:bdd691977de4
Update RDS Text function
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
star297 | 0:527aa96336ac | 1 | |
star297 | 0:527aa96336ac | 2 | #include "mbed.h" |
star297 | 0:527aa96336ac | 3 | |
star297 | 0:527aa96336ac | 4 | class RDA5807M |
star297 | 0:527aa96336ac | 5 | { |
star297 | 0:527aa96336ac | 6 | public: |
star297 | 0:527aa96336ac | 7 | |
star297 | 1:2c8a64e71afd | 8 | RDA5807M(PinName sda, PinName scl); |
star297 | 0:527aa96336ac | 9 | |
star297 | 0:527aa96336ac | 10 | ~RDA5807M(); |
star297 | 0:527aa96336ac | 11 | |
star297 | 0:527aa96336ac | 12 | //-------------------------------------------------------------- |
star297 | 0:527aa96336ac | 13 | // Global Functions |
star297 | 0:527aa96336ac | 14 | //-------------------------------------------------------------- |
star297 | 0:527aa96336ac | 15 | void WriteAll(void); |
star297 | 0:527aa96336ac | 16 | void WriteReg(int address,int data); |
star297 | 0:527aa96336ac | 17 | void Init(void); |
star297 | 3:bdd691977de4 | 18 | void Readregisters(void); |
star297 | 0:527aa96336ac | 19 | void Reset(void); |
star297 | 0:527aa96336ac | 20 | void PowerOn(void); |
star297 | 0:527aa96336ac | 21 | void PowerOff(void); |
star297 | 0:527aa96336ac | 22 | void RDS(void); |
star297 | 0:527aa96336ac | 23 | void Mute(void); |
star297 | 0:527aa96336ac | 24 | void Mono(void); |
star297 | 0:527aa96336ac | 25 | void Softmute(void); |
star297 | 0:527aa96336ac | 26 | void SoftBlend(void); |
star297 | 0:527aa96336ac | 27 | void BassBoost(void); |
star297 | 1:2c8a64e71afd | 28 | void AFC(void); |
star297 | 1:2c8a64e71afd | 29 | void Volume(int vol); |
star297 | 0:527aa96336ac | 30 | void SeekUp(void); |
star297 | 0:527aa96336ac | 31 | void SeekDown(void); |
star297 | 0:527aa96336ac | 32 | void Frequency(float Freq); |
star297 | 0:527aa96336ac | 33 | void Channel(void); |
star297 | 1:2c8a64e71afd | 34 | void getRDS(void); |
star297 | 1:2c8a64e71afd | 35 | |
star297 | 1:2c8a64e71afd | 36 | // Initialise internal variables before starting or after a change to another channel. |
star297 | 1:2c8a64e71afd | 37 | void RDSinit(); |
star297 | 1:2c8a64e71afd | 38 | |
star297 | 1:2c8a64e71afd | 39 | // Pass all available RDS data through this function. |
star297 | 3:bdd691977de4 | 40 | void ProcessData(); |
star297 | 0:527aa96336ac | 41 | |
star297 | 0:527aa96336ac | 42 | //-------------------------------------------------------------- |
star297 | 0:527aa96336ac | 43 | // Definitions |
star297 | 0:527aa96336ac | 44 | //-------------------------------------------------------------- |
star297 | 0:527aa96336ac | 45 | /* I2C Address */ |
star297 | 1:2c8a64e71afd | 46 | #define RDASequential 0x20 // Write address |
star297 | 1:2c8a64e71afd | 47 | #define RDARandom 0x22 // Read address |
star297 | 0:527aa96336ac | 48 | /* Initialization Options */ |
star297 | 3:bdd691977de4 | 49 | #define StartingFreq 87.00 |
star297 | 0:527aa96336ac | 50 | #define EndingFreq 108.00 |
star297 | 3:bdd691977de4 | 51 | #define DefaultFreq 87.50 |
star297 | 1:2c8a64e71afd | 52 | #define InitialVolume 4 |
star297 | 0:527aa96336ac | 53 | /* RDA5807M Function Code */ |
star297 | 0:527aa96336ac | 54 | /* Register 0x02H (16Bits) */ |
star297 | 0:527aa96336ac | 55 | #define RDA_DHIZ 0x8000 |
star297 | 0:527aa96336ac | 56 | #define RDA_MUTE 0x8000 |
star297 | 0:527aa96336ac | 57 | #define RDA_MONO_ON 0x2000 |
star297 | 0:527aa96336ac | 58 | #define RDA_MONO_OFF 0xDFFF |
star297 | 0:527aa96336ac | 59 | #define RDA_BASS_ON 0x1000 |
star297 | 0:527aa96336ac | 60 | #define RDA_BASS_OFF 0xEFFF |
star297 | 0:527aa96336ac | 61 | #define RDA_RCLK_MODE 0x0800 |
star297 | 0:527aa96336ac | 62 | #define RDA_RCLK_DIRECT 0x0400 |
star297 | 0:527aa96336ac | 63 | #define RDA_SEEK_UP 0x0300 |
star297 | 0:527aa96336ac | 64 | #define RDA_SEEK_DOWN 0x0100 |
star297 | 0:527aa96336ac | 65 | #define RDA_SEEK_STOP 0xFCFF |
star297 | 0:527aa96336ac | 66 | #define RDA_SEEK_WRAP 0x0080 |
star297 | 0:527aa96336ac | 67 | #define RDA_SEEK_NOWRAP 0xFF7F |
star297 | 0:527aa96336ac | 68 | #define RDA_CLK_0327 0x0000 |
star297 | 0:527aa96336ac | 69 | #define RDA_CLK_1200 0x0010 |
star297 | 0:527aa96336ac | 70 | #define RDA_CLK_2400 0x0050 |
star297 | 0:527aa96336ac | 71 | #define RDA_CLK_1300 0x0020 |
star297 | 0:527aa96336ac | 72 | #define RDA_CLK_2600 0x0060 |
star297 | 0:527aa96336ac | 73 | #define RDA_CLK_1920 0x0030 |
star297 | 0:527aa96336ac | 74 | #define RDA_CLK_3840 0x0070 |
star297 | 0:527aa96336ac | 75 | #define RDA_RDS_ON 0x0008 |
star297 | 0:527aa96336ac | 76 | #define RDA_RDS_OFF 0xFFF7 |
star297 | 0:527aa96336ac | 77 | #define RDA_NEW 0x0004 |
star297 | 0:527aa96336ac | 78 | #define RDA_RESET 0x0002 |
star297 | 0:527aa96336ac | 79 | #define RDA_POWER 0x0001 |
star297 | 0:527aa96336ac | 80 | /* Register 0x03H (16Bits) */ |
star297 | 0:527aa96336ac | 81 | #define RDA_TUNE_ON 0x0010 |
star297 | 0:527aa96336ac | 82 | #define RDA_TUNE_OFF 0xFFEF |
star297 | 0:527aa96336ac | 83 | //-------------------------------------------------------------- |
star297 | 0:527aa96336ac | 84 | // Global Variables |
star297 | 0:527aa96336ac | 85 | //-------------------------------------------------------------- |
star297 | 0:527aa96336ac | 86 | // |
star297 | 1:2c8a64e71afd | 87 | int tuneok,nochannel,power,volume,softblend,bass,mute,softmute,mono,afc,stereo,signal,fmready,fmstation; |
star297 | 1:2c8a64e71afd | 88 | int rdsblockerror,rdssynchro,rdsready,rds,block1,block2,block3,block4; |
star297 | 1:2c8a64e71afd | 89 | |
star297 | 1:2c8a64e71afd | 90 | char StationName[10]; // Station Name. 8 characters |
star297 | 1:2c8a64e71afd | 91 | char RDSText[66]; // RDS test message 64 characters |
star297 | 3:bdd691977de4 | 92 | char CTtime[12]; // CT time string formatted as 'CT hh:mm' |
star297 | 3:bdd691977de4 | 93 | int minutes; // CT minutes transmitted on the minute |
star297 | 1:2c8a64e71afd | 94 | float freq; // Tuned frequency |
star297 | 0:527aa96336ac | 95 | |
star297 | 0:527aa96336ac | 96 | //-------------------------------------------------------------- |
star297 | 0:527aa96336ac | 97 | |
star297 | 0:527aa96336ac | 98 | private: |
star297 | 0:527aa96336ac | 99 | |
star297 | 0:527aa96336ac | 100 | I2C i2c; |
star297 | 1:2c8a64e71afd | 101 | |
star297 | 3:bdd691977de4 | 102 | unsigned int RDA5807M_WriteReg[8],RDA5807M_ReadReg[7],RDA5807M_RDS[32]; |
star297 | 0:527aa96336ac | 103 | |
star297 | 3:bdd691977de4 | 104 | // ----- actual RDS values |
star297 | 3:bdd691977de4 | 105 | int textAB, lasttextAB, lastTextIDX; |
star297 | 3:bdd691977de4 | 106 | int rdsGroupType, rdsTP, rdsPTY; |
star297 | 3:bdd691977de4 | 107 | |
star297 | 3:bdd691977de4 | 108 | int mins; // RDS time in minutes |
star297 | 3:bdd691977de4 | 109 | int lastmins; |
star297 | 3:bdd691977de4 | 110 | int i,n; |
star297 | 3:bdd691977de4 | 111 | int idx; // index of rdsText |
star297 | 3:bdd691977de4 | 112 | int offset; // RDS time offset and sign |
star297 | 3:bdd691977de4 | 113 | char c1, c2; |
star297 | 3:bdd691977de4 | 114 | char RDSTxt[66]; |
star297 | 3:bdd691977de4 | 115 | char PSName[10]; // including trailing '\00' character. |
star297 | 3:bdd691977de4 | 116 | char PSName1[10]; |
star297 | 3:bdd691977de4 | 117 | char PSName2[10]; |
star297 | 1:2c8a64e71afd | 118 | }; |