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@2:cf256181972f, 2015-04-12 (annotated)
- Committer:
- star297
- Date:
- Sun Apr 12 16:26:11 2015 +0000
- Revision:
- 2:cf256181972f
- Parent:
- 1:2c8a64e71afd
- Child:
- 3:bdd691977de4
Tidy RDS text code
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 | 0:527aa96336ac | 18 | void Read(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 | |
star297 | 1:2c8a64e71afd | 37 | // Initialise internal variables before starting or after a change to another channel. |
star297 | 1:2c8a64e71afd | 38 | void RDSinit(); |
star297 | 1:2c8a64e71afd | 39 | |
star297 | 1:2c8a64e71afd | 40 | // Pass all available RDS data through this function. |
star297 | 1:2c8a64e71afd | 41 | void processData(); |
star297 | 0:527aa96336ac | 42 | |
star297 | 0:527aa96336ac | 43 | //-------------------------------------------------------------- |
star297 | 0:527aa96336ac | 44 | // Definitions |
star297 | 0:527aa96336ac | 45 | //-------------------------------------------------------------- |
star297 | 0:527aa96336ac | 46 | /* I2C Address */ |
star297 | 1:2c8a64e71afd | 47 | #define RDASequential 0x20 // Write address |
star297 | 1:2c8a64e71afd | 48 | #define RDARandom 0x22 // Read address |
star297 | 0:527aa96336ac | 49 | /* Initialization Options */ |
star297 | 0:527aa96336ac | 50 | #define StartingFreq 87.000 |
star297 | 0:527aa96336ac | 51 | #define EndingFreq 108.00 |
star297 | 2:cf256181972f | 52 | #define DefaultFreq 98.80 |
star297 | 1:2c8a64e71afd | 53 | #define InitialVolume 4 |
star297 | 0:527aa96336ac | 54 | /* RDA5807M Function Code */ |
star297 | 0:527aa96336ac | 55 | /* Register 0x02H (16Bits) */ |
star297 | 0:527aa96336ac | 56 | #define RDA_DHIZ 0x8000 |
star297 | 0:527aa96336ac | 57 | #define RDA_MUTE 0x8000 |
star297 | 0:527aa96336ac | 58 | #define RDA_MONO_ON 0x2000 |
star297 | 0:527aa96336ac | 59 | #define RDA_MONO_OFF 0xDFFF |
star297 | 0:527aa96336ac | 60 | #define RDA_BASS_ON 0x1000 |
star297 | 0:527aa96336ac | 61 | #define RDA_BASS_OFF 0xEFFF |
star297 | 0:527aa96336ac | 62 | #define RDA_RCLK_MODE 0x0800 |
star297 | 0:527aa96336ac | 63 | #define RDA_RCLK_DIRECT 0x0400 |
star297 | 0:527aa96336ac | 64 | #define RDA_SEEK_UP 0x0300 |
star297 | 0:527aa96336ac | 65 | #define RDA_SEEK_DOWN 0x0100 |
star297 | 0:527aa96336ac | 66 | #define RDA_SEEK_STOP 0xFCFF |
star297 | 0:527aa96336ac | 67 | #define RDA_SEEK_WRAP 0x0080 |
star297 | 0:527aa96336ac | 68 | #define RDA_SEEK_NOWRAP 0xFF7F |
star297 | 0:527aa96336ac | 69 | #define RDA_CLK_0327 0x0000 |
star297 | 0:527aa96336ac | 70 | #define RDA_CLK_1200 0x0010 |
star297 | 0:527aa96336ac | 71 | #define RDA_CLK_2400 0x0050 |
star297 | 0:527aa96336ac | 72 | #define RDA_CLK_1300 0x0020 |
star297 | 0:527aa96336ac | 73 | #define RDA_CLK_2600 0x0060 |
star297 | 0:527aa96336ac | 74 | #define RDA_CLK_1920 0x0030 |
star297 | 0:527aa96336ac | 75 | #define RDA_CLK_3840 0x0070 |
star297 | 0:527aa96336ac | 76 | #define RDA_RDS_ON 0x0008 |
star297 | 0:527aa96336ac | 77 | #define RDA_RDS_OFF 0xFFF7 |
star297 | 0:527aa96336ac | 78 | #define RDA_NEW 0x0004 |
star297 | 0:527aa96336ac | 79 | #define RDA_RESET 0x0002 |
star297 | 0:527aa96336ac | 80 | #define RDA_POWER 0x0001 |
star297 | 0:527aa96336ac | 81 | /* Register 0x03H (16Bits) */ |
star297 | 0:527aa96336ac | 82 | #define RDA_TUNE_ON 0x0010 |
star297 | 0:527aa96336ac | 83 | #define RDA_TUNE_OFF 0xFFEF |
star297 | 0:527aa96336ac | 84 | //-------------------------------------------------------------- |
star297 | 0:527aa96336ac | 85 | // Global Variables |
star297 | 0:527aa96336ac | 86 | //-------------------------------------------------------------- |
star297 | 0:527aa96336ac | 87 | // |
star297 | 1:2c8a64e71afd | 88 | int tuneok,nochannel,power,volume,softblend,bass,mute,softmute,mono,afc,stereo,signal,fmready,fmstation; |
star297 | 1:2c8a64e71afd | 89 | int rdsblockerror,rdssynchro,rdsready,rds,block1,block2,block3,block4; |
star297 | 1:2c8a64e71afd | 90 | |
star297 | 1:2c8a64e71afd | 91 | char StationName[10]; // Station Name. 8 characters |
star297 | 1:2c8a64e71afd | 92 | char RDSText[66]; // RDS test message 64 characters |
star297 | 1:2c8a64e71afd | 93 | int CTtime; // CT time 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 | 1:2c8a64e71afd | 102 | unsigned int RDA5807M_WriteReg[8],RDA5807M_ReadReg[7],RDA5807M_RDS[32]; |
star297 | 0:527aa96336ac | 103 | |
star297 | 1:2c8a64e71afd | 104 | // ----- actual RDS values |
star297 | 1:2c8a64e71afd | 105 | int textAB, lasttextAB, lastTextIDX; |
star297 | 1:2c8a64e71afd | 106 | int rdsGroupType, rdsTP, rdsPTY; |
star297 | 1:2c8a64e71afd | 107 | // Program Service Name |
star297 | 1:2c8a64e71afd | 108 | char PSName1[10]; // including trailing '\00' character. |
star297 | 1:2c8a64e71afd | 109 | char PSName2[10]; // including trailing '\00' character. |
star297 | 1:2c8a64e71afd | 110 | |
star297 | 1:2c8a64e71afd | 111 | typedef void(*receiveServicenNameFunction)(char *name); |
star297 | 1:2c8a64e71afd | 112 | typedef void(*receiveTextFunction)(char *name); |
star297 | 1:2c8a64e71afd | 113 | typedef void(*receiveTimeFunction)(uint8_t hour, uint8_t minute); |
star297 | 1:2c8a64e71afd | 114 | |
star297 | 1:2c8a64e71afd | 115 | receiveServicenNameFunction sendServiceName; ///< Registered ServiceName function. |
star297 | 1:2c8a64e71afd | 116 | receiveTimeFunction sendTime; ///< Registered Time function. |
star297 | 1:2c8a64e71afd | 117 | receiveTextFunction sendText; |
star297 | 1:2c8a64e71afd | 118 | |
star297 | 1:2c8a64e71afd | 119 | }; |