diff options
-rw-r--r-- | software/rda1846dongle/rda1846.c | 16 | ||||
-rw-r--r-- | software/rda1846dongle/rda1846.h | 2 | ||||
-rw-r--r-- | software/rda1846dongle/rda1846_defines.h | 9 | ||||
-rw-r--r-- | software/rda1846dongle/rda1846dongle.c | 28 |
4 files changed, 42 insertions, 13 deletions
diff --git a/software/rda1846dongle/rda1846.c b/software/rda1846dongle/rda1846.c index c7f612c..6607ec8 100644 --- a/software/rda1846dongle/rda1846.c +++ b/software/rda1846dongle/rda1846.c @@ -130,6 +130,7 @@ char* rda1846_rf_band_to_string(rf_band_t b) switch(b) { case b_2m: return "2m (134-174 MHz)"; + case b_1m5: return "1.5m (200-260 MHz)"; case b_70cm: return "70cm (400-520 MHz)"; } return ""; @@ -198,7 +199,10 @@ void rda1846_soft_reset(void) void rda1846_set_band(rf_band_t b) { - if(!rda1846_write_register(RDA1846_REG_RF_BAND, b == b_2m ? RDA1846_RF_BAND_2M : RDA1846_RF_BAND_70CM)) + uint16_t data = RDA1846_RF_BAND_2M; + if(b == b_1m5) data = RDA1846_RF_BAND_1M5; + if(b == b_70cm) data = RDA1846_RF_BAND_70CM; + if(!rda1846_write_register(RDA1846_REG_RF_BAND, data)) rf_band_ = b; } @@ -226,8 +230,9 @@ channel_bw_t rda1846_get_bw(void) uint8_t rda1846_set_freq_kHz(int32_t freq) { - if(freq < (rf_band_ == b_2m ? RDA1846_BAND_2M_LOW : RDA1846_BAND_70CM_LOW) || - freq > (rf_band_ == b_2m ? RDA1846_BAND_2M_HIGH : RDA1846_BAND_70CM_HIGH)) + if((rf_band_ == b_2m && (freq < RDA1846_BAND_2M_LOW || freq > RDA1846_BAND_2M_HIGH)) || + (rf_band_ == b_1m5 && (freq < RDA1846_BAND_1M5_LOW || freq > RDA1846_BAND_1M5_HIGH)) || + (rf_band_ == b_70cm && (freq < RDA1846_BAND_70CM_LOW || freq > RDA1846_BAND_70CM_HIGH)) ) return 1; freq = freq<<3; @@ -240,7 +245,10 @@ uint8_t rda1846_set_freq_kHz(int32_t freq) static int32_t corr_freq(int32_t f) { - return (int32_t)(((float)f)/(rf_band_ == b_2m ? RDA1846_FREQ_CORR_2M : RDA1846_FREQ_CORR_70CM)); + float corr = RDA1846_FREQ_CORR_2M; + if(rf_band_ == b_1m5) corr = RDA1846_FREQ_CORR_1M5; + if(rf_band_ == b_70cm) corr = RDA1846_FREQ_CORR_70CM; + return (int32_t)(((float)f)/corr); } int32_t rda1846_get_freq_kHz(void) diff --git a/software/rda1846dongle/rda1846.h b/software/rda1846dongle/rda1846.h index e25a655..fd6ac17 100644 --- a/software/rda1846dongle/rda1846.h +++ b/software/rda1846dongle/rda1846.h @@ -33,7 +33,7 @@ #ifndef MURSAT_rda1846_h_INCLUDED #define MURSAT_rda1846_h_INCLUDED -typedef enum { b_2m, b_70cm } rf_band_t; +typedef enum { b_2m, b_1m5, b_70cm } rf_band_t; char* rda1846_rf_band_to_string(rf_band_t); typedef enum { bw_12k5, bw_25k } channel_bw_t; char* rda1846_channel_bw_to_string(channel_bw_t); diff --git a/software/rda1846dongle/rda1846_defines.h b/software/rda1846dongle/rda1846_defines.h index 403d326..6b9c29a 100644 --- a/software/rda1846dongle/rda1846_defines.h +++ b/software/rda1846dongle/rda1846_defines.h @@ -77,6 +77,7 @@ //freq #define RDA1846_FREQ_CORR_2M 73.1428567759 +#define RDA1846_FREQ_CORR_1M5 RDA1846_FREQ_CORR_2M/1.5 #define RDA1846_FREQ_CORR_70CM RDA1846_FREQ_CORR_2M/3.0 @@ -85,9 +86,13 @@ #define RDA1846_BAND_2M_LOW 134000 // kHz #define RDA1846_BAND_2M_HIGH 174000 // kHZ +#define RDA1846_RF_BAND_1M5 0x00A4 // select 1.5m Band +#define RDA1846_BAND_1M5_LOW 200000 // kHz +#define RDA1846_BAND_1M5_HIGH 260000 // kHZ + #define RDA1846_RF_BAND_70CM 0x0024 // select 70cm Band -#define RDA1846_BAND_70CM_LOW 400000 // kHz -#define RDA1846_BAND_70CM_HIGH 520000 // kHZ +#define RDA1846_BAND_70CM_LOW 400000 // kHz +#define RDA1846_BAND_70CM_HIGH 520000 // kHZ #define RDA1846_XTAL_FREQ 12288 // 12.288 MHz #define RDA1846_ADCLK_FREQ 6144 // 12.288/2 MHz diff --git a/software/rda1846dongle/rda1846dongle.c b/software/rda1846dongle/rda1846dongle.c index 8316d62..e058c9d 100644 --- a/software/rda1846dongle/rda1846dongle.c +++ b/software/rda1846dongle/rda1846dongle.c @@ -43,7 +43,8 @@ #include "rda1846.h" #include "rda1846_defines.h" -#define DEFAULT_FREQ_2M 145900 +#define DEFAULT_FREQ_2M 145000 +#define DEFAULT_FREQ_1M5 230000 #define DEFAULT_FREQ_70CM 435000 int32_t default_freq = DEFAULT_FREQ_2M; int32_t current_freq_kHz = DEFAULT_FREQ_2M; @@ -92,21 +93,30 @@ static void update_current_freq(void) rda1846_idle(); if(rda1846_set_freq_kHz(current_freq_kHz)) - printf("error\r\n"); + printf("error .. "); else - printf("ok\r\n"); + printf("ok .. "); if(old_state == receive) rda1846_receive(); else if(old_state == transmit) rda1846_transmit(); + + if(current_freq_kHz != rda1846_get_freq_kHz()) { + printf("NACK!\r\n"); + print_actual_freq(); + } else { + printf("ACK\r\n"); + } } static void set_band(rf_band_t b) { printf("setting band to %s\r\n", rda1846_rf_band_to_string(b)); rda1846_set_band(b); - default_freq = b == b_2m ? DEFAULT_FREQ_2M : DEFAULT_FREQ_70CM; + if(b == b_2m) default_freq = DEFAULT_FREQ_2M; + else if(b == b_1m5) default_freq = DEFAULT_FREQ_1M5; + else if(b == b_70cm) default_freq = DEFAULT_FREQ_70CM; set_default_freq(); } @@ -167,12 +177,18 @@ static void handle_cmd(uint8_t cmd) case 'i': reinit_rda(); break; case '2': set_band(b_2m); break; + case '3': set_band(b_1m5); break; case '7': set_band(b_70cm); break; case 'b': set_bw(bw_12k5); break; case 'B': set_bw(bw_25k); break; case 'F': set_default_freq(); break; - case '+': current_freq_kHz+=25; update_current_freq(); break; - case '-': current_freq_kHz-=25; update_current_freq(); break; + + case '#': current_freq_kHz+=100; update_current_freq(); break; + case '+': current_freq_kHz+=10; update_current_freq(); break; + case ':': current_freq_kHz+=1; update_current_freq(); break; + case '.': current_freq_kHz-=1; update_current_freq(); break; + case '-': current_freq_kHz-=10; update_current_freq(); break; + case '_': current_freq_kHz-=100; update_current_freq(); break; case 'P': rda1846_powerdown(); print_status(); break; case 'I': rda1846_idle(); print_status(); break; |