use crate::iq::SpreadingCode;
use crate::sdr::{CaCode, CA_CHIP_RATE_HZ, CA_CODE_LEN, L1_HZ};
#[derive(Clone, Debug)]
pub struct GpsL1Ca {
code: CaCode,
}
impl GpsL1Ca {
pub fn new(prn: u8) -> Option<Self> {
CaCode::new(prn).map(|code| Self { code })
}
pub fn prn(&self) -> u8 {
self.code.prn
}
pub fn ca_code(&self) -> &CaCode {
&self.code
}
}
impl SpreadingCode for GpsL1Ca {
fn name(&self) -> String {
format!("GPS L1 C/A PRN {}", self.code.prn)
}
fn chip_rate_hz(&self) -> f64 {
CA_CHIP_RATE_HZ
}
fn len_chips(&self) -> usize {
CA_CODE_LEN
}
fn carrier_hz(&self) -> f64 {
L1_HZ
}
fn value_at(&self, code_phase_chips: f64) -> f64 {
let idx = code_phase_chips.floor().rem_euclid(CA_CODE_LEN as f64) as usize;
self.code.bipolar[idx % CA_CODE_LEN]
}
}