diff options
author | FreeArtMan <dos21h@gmail.com> | 2016-05-08 16:02:01 +0100 |
---|---|---|
committer | FreeArtMan <dos21h@gmail.com> | 2016-05-08 16:02:01 +0100 |
commit | e42911405c4bc2f8c097f47d4598baf8522ef3da (patch) | |
tree | 9eb767c5e6a4443e8773b18ea76cf4216f6c8758 /hw/sdr.c | |
parent | 9b95088bddcf1f83e3a8f73f08f49b38ecb0f500 (diff) | |
download | radiola-e42911405c4bc2f8c097f47d4598baf8522ef3da.tar.gz radiola-e42911405c4bc2f8c097f47d4598baf8522ef3da.zip |
Diffstat (limited to 'hw/sdr.c')
-rw-r--r-- | hw/sdr.c | 315 |
1 files changed, 0 insertions, 315 deletions
diff --git a/hw/sdr.c b/hw/sdr.c deleted file mode 100644 index a9590da..0000000 --- a/hw/sdr.c +++ /dev/null @@ -1,315 +0,0 @@ -#include "sdr.h" - -sdr_t* sdr_init() -{ - sdr_t *sdr=NULL; - - sdr = malloc( sizeof(sdr_t) ); - if (sdr == NULL) - return NULL; - - memset( sdr, 0, sizeof(sdr_t) ); - - return sdr; -} - - -//index of device in oter list -//return inner device list -int sdr_open_device( sdr_t *sdr, int dev_index ) -{ - int ret; - dongle_t *dng=NULL; - rtlsdr_dev_t *rtl=NULL; - - //for now only one device will be supported - if (sdr == NULL) - return -1; - - if (sdr->dongle != NULL) - return -1; - - dng = malloc(sizeof(dongle_t)); - memset(dng, 0, sizeof(dongle_t)); - //set default values for dongle_t - DEF_DONGLE_VALUES(dng); - - ret = hw_open( &rtl, (uint32_t)dev_index ); - if ( ret < 0 ) - { - printf("Cannot open device %02d\n", dev_index ); - goto exit_dng_err; - } - - ret = hw_reset_buffer( rtl ); - if ( ret < 0 ) - { - printf("Couldnt reset buffer\n"); - goto exit_dng_err; - } - - ret = hw_set_sample_rate( rtl, dng->rate ); - if ( ret < 0 ) - { - printf("Couldnt set sample rate to %d\n", dng->rate); - goto exit_dng_err; - } - - ret = hw_set_center_freq( rtl, dng->freq ); - if ( ret < 0 ) - { - printf("Couldnt set frequency %d\n", dng->freq ); - goto exit_dng_err; - } - - ret = hw_set_tuner_gain_mode( rtl, dng->gain ); - if ( ret < 0 ) - { - printf("Cannot set autogain mode\n"); - goto exit_dng_err; - } - - ret = hw_set_agc_mode( rtl, 1 ); - if ( ret < 0 ) - { - printf("Cannot set agc mode\n"); - goto exit_dng_err; - } - - dng->dev_index = dev_index; - dng->dev = rtl; - sdr->dongle = dng; - - return 0; - -exit_dng_err: - free( dng ); - - return -1; -} - - -//associate audio device that going to be used -//int sdr_open_audio( sdr_t *sdr, int dev_index );//?should be just device from list or device name? - - -//get device structure from sdr manager by pluged device num -//dont try to free it muahaha -dongle_t* sdr_get_device_id( sdr_t *sdr, int dev_index) -{ - dongle_t *dng=NULL; - - if ( sdr == NULL ) - return NULL; - - if (sdr->dongle == NULL) - return NULL; - - if (sdr->dongle->dev_index != dev_index) - { - printf("Cannot find device with such device ID\n"); - return NULL; - } - - return sdr->dongle; -} - - - -//get index in list of devices of structure from outer device index -//? do we need? -//int sdr_get_dongle_idx( sdr_t *sdr, int idx ); -//close device by internal list index -int sdr_close_device( sdr_t *sdr, int dev_index ) -{ - if ( sdr == NULL ) - return -1; - - if ( sdr->dongle == NULL ) - { - return -1; - } - - if ( sdr->dongle->dev == NULL ) - return -1; - - if ( sdr->dongle->dev_index != dev_index ) - return -1; - - hw_close( sdr->dongle->dev ); - free( sdr->dongle->dev ); - sdr->dongle->dev = NULL; - - free( sdr->dongle ); - sdr->dongle = NULL; - - return 0; -} - - - -//close sdr -//if there is opened audios then close -//if there is opened devices then close -int sdr_close( sdr_t *sdr ) -{ - if ( sdr != NULL ) - { - if ( sdr->dongle != NULL ) - { - if ( sdr->dongle->dev != NULL ) - { - hw_close( sdr->dongle->dev ); - //all ready free'd by rtlsdr - //free( sdr->dongle->dev ); - sdr->dongle->dev = NULL; - } - free( sdr->dongle ); - sdr->dongle = NULL; - } - free(sdr); - sdr = NULL; - return 0; - } - return -1; -} - - - -//stop any action that associated with dongle -//not yet implemented -int dongle_stop( dongle_t *dongle ) -{ - return -1; -} - - -//int dongle_open( sdr_t *); -//set dongle frequency -int dongle_set_freq( dongle_t *dongle, uint32_t freq) -{ - int ret = 0; - if ( dongle == NULL ) - return -1; - - if ( dongle->dev == NULL ) - return -1; - - ret = hw_set_center_freq( dongle->dev, freq ); - if ( ret < 0 ) - { - printf("Cannot set device frequency to %ud\n", freq); - return -1; - } - - return 0; -} - - -//set gain -int dongle_set_gain( dongle_t *dongle, int gain) -{ - - int ret; - - if ( dongle == NULL ) - return -1; - - if ( dongle->dev == NULL ) - return -1; - - ret = hw_set_tuner_gain_mode( dongle->dev, gain ); - if ( ret < 0 ) - { - printf("Cannot set tunner gain level %d\n", gain ); - return -1; - } - - return 0; -} - - -//set dongle sample rate -int dongle_set_sample_rate( dongle_t *dongle, uint32_t rate ) -{ - int ret; - - if ( dongle == NULL ) - { - return -1; - } - - if ( dongle->dev == NULL ) - return -1; - - ret = hw_set_sample_rate( dongle->dev, rate ); - if ( ret < 0 ) - { - printf("Cannot set sample rate to %uMsps\n", rate); - return -1; - } - - return 0; -} - -int dongle_set_agc( dongle_t *dongle, int mode) -{ - int ret; - - if ( dongle == NULL ) - return -1; - - if ( dongle->dev == NULL ) - return -1; - - //need mode check things - ret = hw_set_agc_mode( dongle->dev, mode ); - if ( ret < 0 ) - { - printf("Cannot set agc gain mode\n"); - return -1; - } - - return 0; -} - - -uint32_t dongle_get_freq( dongle_t *dongle ) -{ - return dongle->freq; -} - - -int dongle_get_gain( dongle_t *dongle ) -{ - return dongle->gain; -} - - -uint32_t dongle_get_sample_rate( dongle_t *dongle ) -{ - return dongle->rate; -} - - -int dongle_read_samples( dongle_t *dongle, uint8_t *buf, int len ) -{ - int ret, read_num; - - if ( dongle == NULL ) - return -1; - - if ( dongle->dev == NULL ) - return -1; - - - - ret = hw_read_sync( dongle->dev, buf, len, &read_num ); - if ( ret < 0 ) - { - printf("Couldnt read samples\n"); - return -1; - } - - return 0; -}
\ No newline at end of file |