diff options
author | Christian Pointner <equinox@mur.at> | 2013-03-06 03:34:55 +0000 |
---|---|---|
committer | Christian Pointner <equinox@mur.at> | 2013-03-06 03:34:55 +0000 |
commit | fd62a0cfe9e6cbf4a5205d42ff22e52fa168c687 (patch) | |
tree | 8d1333424e7a2da0a26017ff720ab1e147d36f7e /software/rda1846dongle/rda1846.c | |
parent | added LTC3533 (diff) |
rda1846dongle: api contains now most needed functions
git-svn-id: https://svn.spreadspace.org/mur.sat@695 7de4ea59-55d0-425e-a1af-a3118ea81d4c
Diffstat (limited to 'software/rda1846dongle/rda1846.c')
-rw-r--r-- | software/rda1846dongle/rda1846.c | 79 |
1 files changed, 60 insertions, 19 deletions
diff --git a/software/rda1846dongle/rda1846.c b/software/rda1846dongle/rda1846.c index 6c14aae..46b29cc 100644 --- a/software/rda1846dongle/rda1846.c +++ b/software/rda1846dongle/rda1846.c @@ -25,25 +25,7 @@ #include <stdio.h> #include "rda1846.h" - -#define RDA1846_CHIP_ADDR 0xE2 -#define RDA1846_ADDR_W (0<<7) -#define RDA1846_ADDR_R (1<<7) -#define RDA1846_ADDR_LIMIT 0x7F - -#define RDA1846_RF_BAND_2M 0x00C0 -#define RDA1846_BAND_LOW 134000 -#define RDA1846_BAND_HIGH 174000 -#define RDA1846_XTAL_FREQ 12288 -#define RDA1846_ADCLK_FREQ 6144 -#define RDA1846_CLK_MODE (1<<0) - -#define RDA1846_REG_CLK_MODE 0x04 -#define RDA1846_REG_RF_BAND 0x0F -#define RDA1846_REG_FREQH 0x29 -#define RDA1846_REG_FREQL 0x2A -#define RDA1846_REG_XTAL 0x2B -#define RDA1846_REG_ADCLK 0x2C +#include "rda1846_defines.h" static uint8_t rda1846_write_register_raw(const uint8_t addr, const uint16_t data) { @@ -135,6 +117,65 @@ void rda1846_init(void) rda1846_write_register(RDA1846_REG_XTAL, RDA1846_XTAL_FREQ); rda1846_write_register(RDA1846_REG_ADCLK, RDA1846_ADCLK_FREQ); rda1846_write_register(RDA1846_REG_CLK_MODE, RDA1846_CLK_MODE); + + rda1846_write_register(RDA1846_REG_CTL, RDA1846_CTL_CH_12K5 | RDA1846_CTL_RX_M_TX_M | RDA1846_CTL_RX); + rda1846_write_register(RDA1846_REG_INT, RDA1846_INT_DTMF_IDLE); + + // use this if VOX, SQ, TXON_RF, RXON_RF are meant as outputs + rda1846_write_register(RDA1846_REG_GPIO, RDA1846_GPIO_7_VOX | RDA1846_GPIO_6_SQ | + RDA1846_GPIO_5_TXON_RF | RDA1846_GPIO_4_RXON_RF | + RDA1846_GPIO_2_INT); + // use this if VOX, SQ, TXON_RF, RXON_RF are meant as inputs +// rda1846_write_register(RDA1846_REG_GPIO, RDA1846_GPIO_2_INT); + + rda1846_write_register(RDA1846_REG_TX_VOICE, RDA1846_TX_VOICE_NONE); + rda1846_write_register(RDA1846_REG_DTMF_CTL, RDA1846_DTMF_DUAL | RDA1846_DTMF_EN); +} + +void rda1846_soft_reset(void) +{ + rda1846_write_register(RDA1846_REG_CTL, RDA1846_CTL_SOFT_RST); +} + + +int16_t rda1846_get_rssi(void) +{ + uint16_t data; + if(rda1846_read_register(RDA1846_REG_RSSI, &data)) + return -1; + + return (int16_t)data; +} + +int16_t rda1846_get_vssi(void) +{ + uint16_t data; + if(rda1846_read_register(RDA1846_REG_VSSI, &data)) + return -1; + + return (int16_t)data; +} + +uint16_t rda1846_get_flags(void) +{ + uint16_t data; + if(rda1846_read_register(RDA1846_REG_VSSI, &data)) + return 0xFFFF; + + return data; +} + +uint8_t rda1846_get_dtmf(uint8_t* idx1, uint8_t* idx2, uint8_t* code) +{ + uint16_t data; + if(rda1846_read_register(RDA1846_REG_DTMF_OUT, &data)) + return 1; + + if(idx1) *idx1 = (uint8_t)((data & 0x0380)>>7); + if(idx2) *idx2 = (uint8_t)((data & 0x0070)>>4); + if(code) *code = (uint8_t)(data & 0x000F); + + return 0; } int32_t rda1846_get_freq_kHz(void) |