use crate::leo_link::antenna::Polarisation;
#[derive(Clone, Copy, Debug)]
pub struct GnssBand {
pub constellation: &'static str,
pub name: &'static str,
pub centre_hz: f64,
pub min_power_dbw: f64,
pub max_power_dbw: f64,
pub min_power_elevation_deg: f64,
pub chip_rate_hz: f64,
pub code_length_chips: f64,
pub data_rate_bps: f64,
pub polarisation: Polarisation,
pub source: &'static str,
}
const GAL: &str = "Galileo OS SIS ICD Issue 2.1 (2023), Table 12";
const GPS: &str = "IS-GPS-200 / IS-GPS-705 via arXiv 2509.19551 Table 2";
pub const GNSS_BANDS: &[GnssBand] = &[
GnssBand {
constellation: "galileo",
name: "E1",
centre_hz: 1_575.42e6,
min_power_dbw: -157.25,
max_power_dbw: -152.0,
min_power_elevation_deg: 5.0,
chip_rate_hz: 1.023e6,
code_length_chips: 4092.0,
data_rate_bps: 125.0,
polarisation: Polarisation::Rhcp,
source: GAL,
},
GnssBand {
constellation: "galileo",
name: "E5a",
centre_hz: 1_176.45e6,
min_power_dbw: -155.25,
max_power_dbw: -150.0,
min_power_elevation_deg: 5.0,
chip_rate_hz: 10.23e6,
code_length_chips: 10230.0,
data_rate_bps: 25.0,
polarisation: Polarisation::Rhcp,
source: GAL,
},
GnssBand {
constellation: "galileo",
name: "E5b",
centre_hz: 1_207.14e6,
min_power_dbw: -155.25,
max_power_dbw: -150.0,
min_power_elevation_deg: 5.0,
chip_rate_hz: 10.23e6,
code_length_chips: 10230.0,
data_rate_bps: 125.0,
polarisation: Polarisation::Rhcp,
source: GAL,
},
GnssBand {
constellation: "galileo",
name: "E6",
centre_hz: 1_278.75e6,
min_power_dbw: -155.25,
max_power_dbw: -150.0,
min_power_elevation_deg: 5.0,
chip_rate_hz: 5.115e6,
code_length_chips: 5115.0,
data_rate_bps: 500.0,
polarisation: Polarisation::Rhcp,
source: GAL,
},
GnssBand {
constellation: "gps-baseline",
name: "L1",
centre_hz: 1_575.42e6,
min_power_dbw: -158.5,
max_power_dbw: -153.0,
min_power_elevation_deg: 5.0,
chip_rate_hz: 1.023e6,
code_length_chips: 1023.0,
data_rate_bps: 50.0,
polarisation: Polarisation::Rhcp,
source: GPS,
},
GnssBand {
constellation: "gps-baseline",
name: "L5",
centre_hz: 1_176.45e6,
min_power_dbw: -154.0,
max_power_dbw: -150.0,
min_power_elevation_deg: 5.0,
chip_rate_hz: 10.23e6,
code_length_chips: 10230.0,
data_rate_bps: 50.0,
polarisation: Polarisation::Rhcp,
source: GPS,
},
];
pub fn gnss_band(constellation: &str, name: &str) -> Option<&'static GnssBand> {
let fam = |c: &str| c.split('-').next().unwrap_or(c).to_ascii_lowercase();
GNSS_BANDS
.iter()
.find(|b| fam(b.constellation) == fam(constellation) && b.name.eq_ignore_ascii_case(name))
}
pub const GNSS_COLD_START_S: f64 = 30.0;