diff --git a/software/libcariboulite/src/cariboulite.c b/software/libcariboulite/src/cariboulite.c index bbc79a3..38b20e3 100644 --- a/software/libcariboulite/src/cariboulite.c +++ b/software/libcariboulite/src/cariboulite.c @@ -95,6 +95,7 @@ int cariboulite_init(bool force_fpga_prog, cariboulite_log_level_en log_lvl) //============================================================================= void cariboulite_close(void) { + if (!ctx.initialized) return; cariboulite_release_driver(&sys); } diff --git a/software/libcariboulite/src/cariboulite.h b/software/libcariboulite/src/cariboulite.h index 777e45d..5138640 100644 --- a/software/libcariboulite/src/cariboulite.h +++ b/software/libcariboulite/src/cariboulite.h @@ -150,7 +150,7 @@ unsigned int cariboulite_get_sn(); * passed to the radio manipulation functions in "cariboulite_radio.h" * * @param type the radio channel (6G/2.4G or ISM) - * @return 0 (sucess), -1 (fail) + * @return the handle of the channel, or NULL if invalid channel id */ cariboulite_radio_state_st* cariboulite_get_radio(cariboulite_channel_en ch); diff --git a/software/libcariboulite/src/cariboulite_radio.c b/software/libcariboulite/src/cariboulite_radio.c index 2abfa87..1ef5f9d 100644 --- a/software/libcariboulite/src/cariboulite_radio.c +++ b/software/libcariboulite/src/cariboulite_radio.c @@ -21,6 +21,11 @@ #define GET_MODEM_CH(rad_ch) ((rad_ch)==cariboulite_channel_s1g ? at86rf215_rf_channel_900mhz : at86rf215_rf_channel_2400mhz) #define GET_SMI_CH(rad_ch) ((rad_ch)==cariboulite_channel_s1g ? caribou_smi_channel_900 : caribou_smi_channel_2400) +static float sample_rate_middles[] = {3000, 1666, 1166, 900, 733, 583, 450}; +static float rx_bandwidth_middles[] = {225, 281, 356, 450, 562, 706, 893, 1125, 1406, 1781, 2250}; +static float tx_bandwidth_middles[] = {90, 112, 142, 180, 225, 282, 357, 450, 562, 712, 900}; + + //========================================================================= int cariboulite_radio_init(cariboulite_radio_state_st* radio, sys_st *sys, cariboulite_channel_en type) { @@ -182,19 +187,6 @@ int cariboulite_radio_set_rx_bandwidth(cariboulite_radio_state_st* radio, cariboulite_radio_rx_bw_en rx_bw) { cariboulite_radio_f_cut_en fcut = cariboulite_radio_rx_f_cut_half_fs; - - // Automatically calculate the digital f_cut - if (rx_bw >= cariboulite_radio_rx_bw_BW160KHZ_IF250KHZ && rx_bw <= cariboulite_radio_rx_bw_BW500KHZ_IF500KHZ) - fcut = cariboulite_radio_rx_f_cut_0_25_half_fs; - else if (rx_bw >= cariboulite_radio_rx_bw_BW630KHZ_IF1000KHZ && rx_bw <= cariboulite_radio_rx_bw_BW630KHZ_IF1000KHZ) - fcut = cariboulite_radio_rx_f_cut_0_375_half_fs; - else if (rx_bw >= cariboulite_radio_rx_bw_BW800KHZ_IF1000KHZ && rx_bw <= cariboulite_radio_rx_bw_BW1000KHZ_IF1000KHZ) - fcut = cariboulite_radio_rx_f_cut_0_5_half_fs; - else if (rx_bw >= cariboulite_radio_rx_bw_BW1250KHZ_IF2000KHZ && rx_bw <= cariboulite_radio_rx_bw_BW1250KHZ_IF2000KHZ) - fcut = cariboulite_radio_rx_f_cut_0_75_half_fs; - else - fcut = cariboulite_radio_rx_f_cut_half_fs; - radio->rx_fcut = fcut; at86rf215_radio_set_rx_bw_samp_st cfg = @@ -213,6 +205,27 @@ int cariboulite_radio_set_rx_bandwidth(cariboulite_radio_state_st* radio, return 0; } +//========================================================================= +int cariboulite_radio_set_rx_bandwidth_flt(cariboulite_radio_state_st* radio, float bw_hz) +{ + cariboulite_radio_rx_bw_en bw = cariboulite_radio_rx_bw_200KHz; + + if (bw_hz <= rx_bandwidth_middles[0]) bw = cariboulite_radio_rx_bw_200KHz; + else if (bw_hz <= rx_bandwidth_middles[1]) bw = cariboulite_radio_rx_bw_250KHz; + else if (bw_hz <= rx_bandwidth_middles[2]) bw = cariboulite_radio_rx_bw_312KHz; + else if (bw_hz <= rx_bandwidth_middles[3]) bw = cariboulite_radio_rx_bw_400KHz; + else if (bw_hz <= rx_bandwidth_middles[4]) bw = cariboulite_radio_rx_bw_500KHz; + else if (bw_hz <= rx_bandwidth_middles[5]) bw = cariboulite_radio_rx_bw_625KHz; + else if (bw_hz <= rx_bandwidth_middles[6]) bw = cariboulite_radio_rx_bw_787KHz; + else if (bw_hz <= rx_bandwidth_middles[7]) bw = cariboulite_radio_rx_bw_1000KHz; + else if (bw_hz <= rx_bandwidth_middles[8]) bw = cariboulite_radio_rx_bw_1250KHz; + else if (bw_hz <= rx_bandwidth_middles[9]) bw = cariboulite_radio_rx_bw_1562KHz; + else if (bw_hz <= rx_bandwidth_middles[10]) bw = cariboulite_radio_rx_bw_2000KHz; + else bw = cariboulite_radio_rx_bw_2500KHz; + + return cariboulite_radio_set_rx_bandwidth(radio, bw); +} + //========================================================================= int cariboulite_radio_get_rx_bandwidth(cariboulite_radio_state_st* radio, cariboulite_radio_rx_bw_en *rx_bw) @@ -226,6 +239,33 @@ int cariboulite_radio_get_rx_bandwidth(cariboulite_radio_state_st* radio, return 0; } +//========================================================================= +int cariboulite_radio_get_rx_bandwidth_flt(cariboulite_radio_state_st* radio, float* bw_hz) +{ + cariboulite_radio_rx_bw_en bw; + cariboulite_radio_get_rx_bandwidth(radio, &bw); + + if (bw_hz == NULL) return 0; + + switch(bw) + { + case cariboulite_radio_rx_bw_200KHz: *bw_hz = 200e5; break; + case cariboulite_radio_rx_bw_250KHz: *bw_hz = 250e5; break; + case cariboulite_radio_rx_bw_312KHz: *bw_hz = 312e5; break; + case cariboulite_radio_rx_bw_400KHz: *bw_hz = 400e5; break; + case cariboulite_radio_rx_bw_500KHz: *bw_hz = 500e5; break; + case cariboulite_radio_rx_bw_625KHz: *bw_hz = 625e5; break; + case cariboulite_radio_rx_bw_787KHz: *bw_hz = 787e5; break; + case cariboulite_radio_rx_bw_1000KHz: *bw_hz = 1000e5; break; + case cariboulite_radio_rx_bw_1250KHz: *bw_hz = 1250e5; break; + case cariboulite_radio_rx_bw_1562KHz: *bw_hz = 1562e5; break; + case cariboulite_radio_rx_bw_2000KHz: *bw_hz = 2000e5; break; + case cariboulite_radio_rx_bw_2500KHz: + default: *bw_hz = 2500e5; break; + } + return 0; +} + //========================================================================= int cariboulite_radio_set_rx_samp_cutoff(cariboulite_radio_state_st* radio, cariboulite_radio_sample_rate_en rx_sample_rate, @@ -265,6 +305,24 @@ int cariboulite_radio_set_rx_samp_cutoff(cariboulite_radio_state_st* radio, return 0; } +//========================================================================= +int cariboulite_radio_set_rx_sample_rate_flt(cariboulite_radio_state_st* radio, float sample_rate_hz) +{ + cariboulite_radio_sample_rate_en rx_sample_rate = cariboulite_radio_rx_sample_rate_4000khz; + cariboulite_radio_f_cut_en rx_cutoff = radio->rx_fcut; + + if (sample_rate_hz >= sample_rate_middles[0]) rx_sample_rate = cariboulite_radio_rx_sample_rate_4000khz; + else if (sample_rate_hz >= sample_rate_middles[1]) rx_sample_rate = cariboulite_radio_rx_sample_rate_2000khz; + else if (sample_rate_hz >= sample_rate_middles[2]) rx_sample_rate = cariboulite_radio_rx_sample_rate_1333khz; + else if (sample_rate_hz >= sample_rate_middles[3]) rx_sample_rate = cariboulite_radio_rx_sample_rate_1000khz; + else if (sample_rate_hz >= sample_rate_middles[4]) rx_sample_rate = cariboulite_radio_rx_sample_rate_800khz; + else if (sample_rate_hz >= sample_rate_middles[5]) rx_sample_rate = cariboulite_radio_rx_sample_rate_666khz; + else if (sample_rate_hz >= sample_rate_middles[6]) rx_sample_rate = cariboulite_radio_rx_sample_rate_500khz; + else rx_sample_rate = cariboulite_radio_rx_sample_rate_400khz; + + return cariboulite_radio_set_rx_samp_cutoff(radio, rx_sample_rate, rx_cutoff); +} + //========================================================================= int cariboulite_radio_get_rx_samp_cutoff(cariboulite_radio_state_st* radio, cariboulite_radio_sample_rate_en *rx_sample_rate, @@ -276,6 +334,30 @@ int cariboulite_radio_get_rx_samp_cutoff(cariboulite_radio_state_st* radio, return 0; } +//========================================================================= +int cariboulite_radio_get_rx_sample_rate_flt(cariboulite_radio_state_st* radio, float *sample_rate_hz) +{ + cariboulite_radio_sample_rate_en rx_sample_rate; + cariboulite_radio_get_rx_samp_cutoff(radio, &rx_sample_rate, NULL); + + if (sample_rate_hz == NULL) return 0; + + *sample_rate_hz = 4000000; + switch(rx_sample_rate) + { + case cariboulite_radio_rx_sample_rate_4000khz: *sample_rate_hz = 4000000; break; + case cariboulite_radio_rx_sample_rate_2000khz: *sample_rate_hz = 2000000; break; + case cariboulite_radio_rx_sample_rate_1333khz: *sample_rate_hz = 1333000; break; + case cariboulite_radio_rx_sample_rate_1000khz: *sample_rate_hz = 1000000; break; + case cariboulite_radio_rx_sample_rate_800khz: *sample_rate_hz = 800000; break; + case cariboulite_radio_rx_sample_rate_666khz: *sample_rate_hz = 666000; break; + case cariboulite_radio_rx_sample_rate_500khz: *sample_rate_hz = 500000; break; + case cariboulite_radio_rx_sample_rate_400khz: *sample_rate_hz = 400000; break; + default: *sample_rate_hz = 4000000; break; + } + return 0; +} + //========================================================================= int cariboulite_radio_set_tx_power(cariboulite_radio_state_st* radio, int tx_power_dbm) { diff --git a/software/libcariboulite/src/cariboulite_radio.h b/software/libcariboulite/src/cariboulite_radio.h index 29b36bd..f328688 100644 --- a/software/libcariboulite/src/cariboulite_radio.h +++ b/software/libcariboulite/src/cariboulite_radio.h @@ -54,18 +54,18 @@ typedef enum typedef enum { - cariboulite_radio_rx_bw_BW160KHZ_IF250KHZ = 0x0, // cariboulite_radio_rx_f_cut_0_25_half_fs - cariboulite_radio_rx_bw_BW200KHZ_IF250KHZ = 0x1, // cariboulite_radio_rx_f_cut_0_25_half_fs - cariboulite_radio_rx_bw_BW250KHZ_IF250KHZ = 0x2, // cariboulite_radio_rx_f_cut_0_25_half_fs - cariboulite_radio_rx_bw_BW320KHZ_IF500KHZ = 0x3, // cariboulite_radio_rx_f_cut_0_25_half_fs - cariboulite_radio_rx_bw_BW400KHZ_IF500KHZ = 0x4, // cariboulite_radio_rx_f_cut_0_25_half_fs - cariboulite_radio_rx_bw_BW500KHZ_IF500KHZ = 0x5, // cariboulite_radio_rx_f_cut_0_25_half_fs - cariboulite_radio_rx_bw_BW630KHZ_IF1000KHZ = 0x6, // cariboulite_radio_rx_f_cut_0_375_half_fs - cariboulite_radio_rx_bw_BW800KHZ_IF1000KHZ = 0x7, // cariboulite_radio_rx_f_cut_0_5_half_fs - cariboulite_radio_rx_bw_BW1000KHZ_IF1000KHZ = 0x8, // cariboulite_radio_rx_f_cut_0_5_half_fs - cariboulite_radio_rx_bw_BW1250KHZ_IF2000KHZ = 0x9, // cariboulite_radio_rx_f_cut_0_75_half_fs - cariboulite_radio_rx_bw_BW1600KHZ_IF2000KHZ = 0xA, // cariboulite_radio_rx_f_cut_half_fs - cariboulite_radio_rx_bw_BW2000KHZ_IF2000KHZ = 0xB, // cariboulite_radio_rx_f_cut_half_fs + cariboulite_radio_rx_bw_200KHz = 0x0, + cariboulite_radio_rx_bw_250KHz = 0x1, + cariboulite_radio_rx_bw_312KHz = 0x2, + cariboulite_radio_rx_bw_400KHz = 0x3, + cariboulite_radio_rx_bw_500KHz = 0x4, + cariboulite_radio_rx_bw_625KHz = 0x5, + cariboulite_radio_rx_bw_787KHz = 0x6, + cariboulite_radio_rx_bw_1000KHz = 0x7, + cariboulite_radio_rx_bw_1250KHz = 0x8, + cariboulite_radio_rx_bw_1562KHz = 0x9, + cariboulite_radio_rx_bw_2000KHz = 0xA, + cariboulite_radio_rx_bw_2500KHz = 0xB, } cariboulite_radio_rx_bw_en; typedef enum @@ -324,6 +324,7 @@ int cariboulite_radio_get_rx_gain_limits(cariboulite_radio_state_st* radio, */ int cariboulite_radio_set_rx_bandwidth(cariboulite_radio_state_st* radio, cariboulite_radio_rx_bw_en rx_bw); +int cariboulite_radio_set_rx_bandwidth_flt(cariboulite_radio_state_st* radio, float bw_hz); /** * @brief Modem get RX analog bandwidth @@ -336,6 +337,7 @@ int cariboulite_radio_set_rx_bandwidth(cariboulite_radio_state_st* radio, */ int cariboulite_radio_get_rx_bandwidth(cariboulite_radio_state_st* radio, cariboulite_radio_rx_bw_en *rx_bw); +int cariboulite_radio_get_rx_bandwidth_flt(cariboulite_radio_state_st* radio, float* bw_hz); /** * @brief Modem set RX sample cut-off bandwidth @@ -350,6 +352,7 @@ int cariboulite_radio_get_rx_bandwidth(cariboulite_radio_state_st* radio, int cariboulite_radio_set_rx_samp_cutoff(cariboulite_radio_state_st* radio, cariboulite_radio_sample_rate_en rx_sample_rate, cariboulite_radio_f_cut_en rx_cutoff); +int cariboulite_radio_set_rx_sample_rate_flt(cariboulite_radio_state_st* radio, float sample_rate_hz); /** * @brief Modem get RX sample cut-off bandwidth @@ -364,6 +367,7 @@ int cariboulite_radio_set_rx_samp_cutoff(cariboulite_radio_state_st* radio, int cariboulite_radio_get_rx_samp_cutoff(cariboulite_radio_state_st* radio, cariboulite_radio_sample_rate_en *rx_sample_rate, cariboulite_radio_f_cut_en *rx_cutoff); +int cariboulite_radio_get_rx_sample_rate_flt(cariboulite_radio_state_st* radio, float *sample_rate_hz); /** * @brief Modem set TX power diff --git a/software/libcariboulite/src/cariboulite_setup.c b/software/libcariboulite/src/cariboulite_setup.c index ca85564..b309774 100644 --- a/software/libcariboulite/src/cariboulite_setup.c +++ b/software/libcariboulite/src/cariboulite_setup.c @@ -393,12 +393,12 @@ int cariboulite_init_submodules (sys_st* sys) cariboulite_radio_set_rx_samp_cutoff(&sys->radio_low, cariboulite_radio_rx_sample_rate_4000khz, cariboulite_radio_rx_f_cut_half_fs); cariboulite_radio_set_tx_samp_cutoff(&sys->radio_low, cariboulite_radio_rx_sample_rate_4000khz, cariboulite_radio_rx_f_cut_half_fs); - cariboulite_radio_set_rx_bandwidth(&sys->radio_low, cariboulite_radio_rx_bw_BW2000KHZ_IF2000KHZ); + cariboulite_radio_set_rx_bandwidth(&sys->radio_low, cariboulite_radio_rx_bw_2500KHz); cariboulite_radio_set_tx_bandwidth(&sys->radio_low, cariboulite_radio_tx_cut_off_1000khz); cariboulite_radio_set_rx_samp_cutoff(&sys->radio_high, cariboulite_radio_rx_sample_rate_4000khz, cariboulite_radio_rx_f_cut_half_fs); cariboulite_radio_set_tx_samp_cutoff(&sys->radio_high, cariboulite_radio_rx_sample_rate_4000khz, cariboulite_radio_rx_f_cut_half_fs); - cariboulite_radio_set_rx_bandwidth(&sys->radio_high, cariboulite_radio_rx_bw_BW2000KHZ_IF2000KHZ); + cariboulite_radio_set_rx_bandwidth(&sys->radio_high, cariboulite_radio_rx_bw_2500KHz); cariboulite_radio_set_tx_bandwidth(&sys->radio_high, cariboulite_radio_tx_cut_off_1000khz); cariboulite_radio_activate_channel(&sys->radio_low, cariboulite_channel_dir_rx, false); @@ -816,5 +816,6 @@ void cariboulite_print_board_info(sys_st *sys, bool log) cariboulite_radio_state_st* cariboulite_get_radio_handle(sys_st* sys, cariboulite_channel_en type) { if (type == cariboulite_channel_s1g) return &sys->radio_low; - else return &sys->radio_high; + else if (type == cariboulite_channel_hif) return &sys->radio_high; + return NULL; } \ No newline at end of file diff --git a/software/libcariboulite/src/soapy_api/Cariboulite.cpp b/software/libcariboulite/src/soapy_api/Cariboulite.cpp index 3de1413..d23f3ef 100644 --- a/software/libcariboulite/src/soapy_api/Cariboulite.cpp +++ b/software/libcariboulite/src/soapy_api/Cariboulite.cpp @@ -311,38 +311,38 @@ std::vector Cariboulite::listSampleRates( const int direction, const siz static cariboulite_radio_rx_bw_en convertRxBandwidth(double bw_numeric) { float fact = BW_SHIFT_FACT; - if (fabs(bw_numeric - (160000*fact)) < 1) return cariboulite_radio_rx_bw_BW160KHZ_IF250KHZ; - if (fabs(bw_numeric - (200000*fact)) < 1) return cariboulite_radio_rx_bw_BW200KHZ_IF250KHZ; - if (fabs(bw_numeric - (250000*fact)) < 1) return cariboulite_radio_rx_bw_BW250KHZ_IF250KHZ; - if (fabs(bw_numeric - (320000*fact)) < 1) return cariboulite_radio_rx_bw_BW320KHZ_IF500KHZ; - if (fabs(bw_numeric - (400000*fact)) < 1) return cariboulite_radio_rx_bw_BW400KHZ_IF500KHZ; - if (fabs(bw_numeric - (500000*fact)) < 1) return cariboulite_radio_rx_bw_BW500KHZ_IF500KHZ; - if (fabs(bw_numeric - (630000*fact)) < 1) return cariboulite_radio_rx_bw_BW630KHZ_IF1000KHZ; - if (fabs(bw_numeric - (800000*fact)) < 1) return cariboulite_radio_rx_bw_BW800KHZ_IF1000KHZ; - if (fabs(bw_numeric - (1000000*fact)) < 1) return cariboulite_radio_rx_bw_BW1000KHZ_IF1000KHZ; - if (fabs(bw_numeric - (1250000*fact)) < 1) return cariboulite_radio_rx_bw_BW1250KHZ_IF2000KHZ; - if (fabs(bw_numeric - (1600000*fact)) < 1) return cariboulite_radio_rx_bw_BW1600KHZ_IF2000KHZ; - if (fabs(bw_numeric - (2000000*fact)) < 1) return cariboulite_radio_rx_bw_BW2000KHZ_IF2000KHZ; + if (fabs(bw_numeric - (160000*fact)) < 1) return cariboulite_radio_rx_bw_200KHz; + if (fabs(bw_numeric - (200000*fact)) < 1) return cariboulite_radio_rx_bw_250KHz; + if (fabs(bw_numeric - (250000*fact)) < 1) return cariboulite_radio_rx_bw_312KHz; + if (fabs(bw_numeric - (320000*fact)) < 1) return cariboulite_radio_rx_bw_400KHz; + if (fabs(bw_numeric - (400000*fact)) < 1) return cariboulite_radio_rx_bw_500KHz; + if (fabs(bw_numeric - (500000*fact)) < 1) return cariboulite_radio_rx_bw_625KHz; + if (fabs(bw_numeric - (630000*fact)) < 1) return cariboulite_radio_rx_bw_787KHz; + if (fabs(bw_numeric - (800000*fact)) < 1) return cariboulite_radio_rx_bw_1000KHz; + if (fabs(bw_numeric - (1000000*fact)) < 1) return cariboulite_radio_rx_bw_1250KHz; + if (fabs(bw_numeric - (1250000*fact)) < 1) return cariboulite_radio_rx_bw_1562KHz; + if (fabs(bw_numeric - (1600000*fact)) < 1) return cariboulite_radio_rx_bw_2000KHz; + if (fabs(bw_numeric - (2000000*fact)) < 1) return cariboulite_radio_rx_bw_2500KHz; - return cariboulite_radio_rx_bw_BW2000KHZ_IF2000KHZ; + return cariboulite_radio_rx_bw_2500KHz; } //======================================================== static double convertRxBandwidth(cariboulite_radio_rx_bw_en bw_en) { float fact = BW_SHIFT_FACT; - if (cariboulite_radio_rx_bw_BW160KHZ_IF250KHZ == bw_en) return 160000 * fact; - if (cariboulite_radio_rx_bw_BW200KHZ_IF250KHZ == bw_en) return 200000 * fact; - if (cariboulite_radio_rx_bw_BW250KHZ_IF250KHZ == bw_en) return 250000 * fact; - if (cariboulite_radio_rx_bw_BW320KHZ_IF500KHZ == bw_en) return 320000 * fact; - if (cariboulite_radio_rx_bw_BW400KHZ_IF500KHZ == bw_en) return 400000 * fact; - if (cariboulite_radio_rx_bw_BW500KHZ_IF500KHZ == bw_en) return 500000 * fact; - if (cariboulite_radio_rx_bw_BW630KHZ_IF1000KHZ == bw_en) return 630000 * fact; - if (cariboulite_radio_rx_bw_BW800KHZ_IF1000KHZ == bw_en) return 800000 * fact; - if (cariboulite_radio_rx_bw_BW1000KHZ_IF1000KHZ == bw_en) return 1000000 * fact; - if (cariboulite_radio_rx_bw_BW1250KHZ_IF2000KHZ == bw_en) return 1250000 * fact; - if (cariboulite_radio_rx_bw_BW1600KHZ_IF2000KHZ == bw_en) return 1600000 * fact; - if (cariboulite_radio_rx_bw_BW2000KHZ_IF2000KHZ == bw_en) return 2000000 * fact; + if (cariboulite_radio_rx_bw_200KHz == bw_en) return 160000 * fact; + if (cariboulite_radio_rx_bw_250KHz == bw_en) return 200000 * fact; + if (cariboulite_radio_rx_bw_312KHz == bw_en) return 250000 * fact; + if (cariboulite_radio_rx_bw_400KHz == bw_en) return 320000 * fact; + if (cariboulite_radio_rx_bw_500KHz == bw_en) return 400000 * fact; + if (cariboulite_radio_rx_bw_625KHz == bw_en) return 500000 * fact; + if (cariboulite_radio_rx_bw_787KHz == bw_en) return 630000 * fact; + if (cariboulite_radio_rx_bw_1000KHz == bw_en) return 800000 * fact; + if (cariboulite_radio_rx_bw_1250KHz == bw_en) return 1000000 * fact; + if (cariboulite_radio_rx_bw_1562KHz == bw_en) return 1250000 * fact; + if (cariboulite_radio_rx_bw_2000KHz == bw_en) return 1600000 * fact; + if (cariboulite_radio_rx_bw_2500KHz == bw_en) return 2000000 * fact; return 2000000 * fact; }