mbed version of the Adafruit Si4713 library (FM transmitter)
Dependents: Adafruit_Si4173_Demo Radio_Transmitter_Working
Adafruit_Si4713.h
- Committer:
- JLarkin
- Date:
- 2017-01-24
- Revision:
- 0:6643c5542090
File content as of revision 0:6643c5542090:
/*************************************************** This is a library for the Si4713 FM Radio Transmitter with RDS Designed specifically to work with the Si4713 breakout in the adafruit shop ----> https://www.adafruit.com/products/1958 These transmitters use I2C to communicate, plus reset pin. 3 pins are required to interface Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit! Written by Limor Fried/Ladyada for Adafruit Industries. BSD license, all text above must be included in any redistribution ****************************************************/ /*************************************************** Modified to work with ARM mbed by John M. Larkin January 2017 ******************************************************/ //!Library for the Adafruit Si4713. /*! The Si4713 is an FM radio transmitter with RDS */ #include "mbed.h" //#define SI4713_CMD_DEBUG #define SI4710_ADDR0 0x11<<1 // if SEN is low #define SI4710_ADDR1 0x63<<1 // if SEN is high, default! #define SI4710_STATUS_CTS 0x80 /* COMMANDS */ #define SI4710_CMD_POWER_UP 0x01 #define SI4710_CMD_GET_REV 0x10 #define SI4710_CMD_POWER_DOWN 0x11 #define SI4710_CMD_SET_PROPERTY 0x12 #define SI4710_CMD_GET_PROPERTY 0x13 #define SI4710_CMD_GET_INT_STATUS 0x14 #define SI4710_CMD_PATCH_ARGS 0x15 #define SI4710_CMD_PATCH_DATA 0x16 #define SI4710_CMD_TX_TUNE_FREQ 0x30 #define SI4710_CMD_TX_TUNE_POWER 0x31 #define SI4710_CMD_TX_TUNE_MEASURE 0x32 #define SI4710_CMD_TX_TUNE_STATUS 0x33 #define SI4710_CMD_TX_ASQ_STATUS 0x34 #define SI4710_CMD_TX_RDS_BUFF 0x35 #define SI4710_CMD_TX_RDS_PS 0x36 #define SI4710_CMD_TX_AGC_OVERRIDE 0x48 #define SI4710_CMD_GPO_CTL 0x80 #define SI4710_CMD_GPO_SET 0x81 /* Parameters */ #define SI4713_PROP_GPO_IEN 0x0001 #define SI4713_PROP_DIGITAL_INPUT_FORMAT 0x0101 #define SI4713_PROP_DIGITAL_INPUT_SAMPLE_RATE 0x0103 #define SI4713_PROP_REFCLK_FREQ 0x0201 #define SI4713_PROP_REFCLK_PRESCALE 0x0202 #define SI4713_PROP_TX_COMPONENT_ENABLE 0x2100 #define SI4713_PROP_TX_AUDIO_DEVIATION 0x2101 #define SI4713_PROP_TX_PILOT_DEVIATION 0x2102 #define SI4713_PROP_TX_RDS_DEVIATION 0x2103 #define SI4713_PROP_TX_LINE_LEVEL_INPUT_LEVEL 0x2104 #define SI4713_PROP_TX_LINE_INPUT_MUTE 0x2105 #define SI4713_PROP_TX_PREEMPHASIS 0x2106 #define SI4713_PROP_TX_PILOT_FREQUENCY 0x2107 #define SI4713_PROP_TX_ACOMP_ENABLE 0x2200 #define SI4713_PROP_TX_ACOMP_THRESHOLD 0x2201 #define SI4713_PROP_TX_ATTACK_TIME 0x2202 #define SI4713_PROP_TX_RELEASE_TIME 0x2203 #define SI4713_PROP_TX_ACOMP_GAIN 0x2204 #define SI4713_PROP_TX_LIMITER_RELEASE_TIME 0x2205 #define SI4713_PROP_TX_ASQ_INTERRUPT_SOURCE 0x2300 #define SI4713_PROP_TX_ASQ_LEVEL_LOW 0x2301 #define SI4713_PROP_TX_ASQ_DURATION_LOW 0x2302 #define SI4713_PROP_TX_AQS_LEVEL_HIGH 0x2303 #define SI4713_PROP_TX_AQS_DURATION_HIGH 0x2304 #define SI4713_PROP_TX_RDS_INTERRUPT_SOURCE 0x2C00 #define SI4713_PROP_TX_RDS_PI 0x2C01 #define SI4713_PROP_TX_RDS_PS_MIX 0x2C02 #define SI4713_PROP_TX_RDS_PS_MISC 0x2C03 #define SI4713_PROP_TX_RDS_PS_REPEAT_COUNT 0x2C04 #define SI4713_PROP_TX_RDS_MESSAGE_COUNT 0x2C05 #define SI4713_PROP_TX_RDS_PS_AF 0x2C06 #define SI4713_PROP_TX_RDS_FIFO_SIZE 0x2C07 /* REGISTERS */ int min(int a, int b); class Adafruit_Si4713 { public: //!Creates an instance of the class. /*! Connect module at I2C address addr using I2C port pins sda and scl. A digital output is used to reset the device. TMP102 \param i2c An I2C object created elsewhere \param rstpin A digital out pin used to toggle the device reset. \param addr The I2C address the device. */ Adafruit_Si4713(I2C i2c, PinName rstpin, uint8_t addr = SI4710_ADDR1); bool begin(); void reset(); void powerUp(void); void configure(void); uint8_t getRev(void); void tuneFM(uint16_t freqKHz); uint8_t getStatus(void); void readTuneStatus(void); void readTuneMeasure(uint16_t freq); void setTXpower(uint8_t pwr, uint8_t antcap = 0); void readASQ(void); void setProperty(uint16_t p, uint16_t v); // RDS stuff void beginRDS(uint16_t programID = 0xADAF); void setRDSstation(char *s); void setRDSbuffer(char *s); uint16_t currFreq; uint8_t currdBuV, currAntCap, currNoiseLevel, currASQ; int8_t currInLevel; void setGPIO(uint8_t x); void setGPIOctrl(uint8_t x); private: void sendCommand(uint8_t len); I2C _i2c; DigitalOut _rst; char _i2ccommand[10]; // holds the command buffer char _i2caddr; };