diff --git a/cellular/src/iir_filter.rs b/cellular/src/iir_filter.rs new file mode 100644 index 0000000..246b1a1 --- /dev/null +++ b/cellular/src/iir_filter.rs @@ -0,0 +1,36 @@ +struct IIRFilter { + iter: i32, + a0: f64, + a1: f64, + a2: f64, + b1: f64, + b2: f64, + z1: f64, + z2: f64, +} + +impl IIRFilter { + pub fn lowpass_init(&mut self, frequency: f64, samplerate: i32, iterations: i32) { + + } + + pub fn highpass_init(&mut self, frequency: f64, samplerate: i32, iterations: i32) { + + } + + pub fn bandpass_init(&mut self, frequency: f64, samplerate: i32, iterations: i32) { + + } + + pub fn notch_init(&mut self, frequency: f64, samplerate: i32, iterations: i32, Q: f64) { + + } + + pub fn process(&mut self, samples: Sample, length: i32) { + + } + + pub fn process_baseband(&mut self, filter: IIRFilter, baseband: f64, length: i32) { + + } +} \ No newline at end of file diff --git a/cellular/src/libmobile_sender.rs b/cellular/src/libmobile_sender.rs new file mode 100644 index 0000000..2ba2b87 --- /dev/null +++ b/cellular/src/libmobile_sender.rs @@ -0,0 +1,45 @@ +enum PagingSignal { + NONE = 0, + TONE, + NOTONE, + POSITIVE, + NEGATIVE, +} + +struct Sender { + // System Info + channel: char, + send_freq: f64, + recv_freq: f64, + + // FM/AM levels + am: i32, + max_deviation: f64, + max_modulation: f64, + speech_deviation: f64, + modulation_index: f64, + max_display: f64, + + // Audio + audio: void, + device: char, + audio_open: void, + audio_start: i32, + audio_close: void, + audio_write: i32, + audio_get_tosend: i32, + samplerate: i32, + samplerate_state: SampleRate, + rx_gain: f64, + tx_gain: f64, + pre_emphasis: i32, + de_emphasis: i32, + epmphasis_state: EmphasisState, + + // Loopback + loopback: i32, + + // Record & Playback + + +} \ No newline at end of file diff --git a/cellular/src/main.rs b/cellular/src/main.rs index 11ae420..aebd30a 100644 --- a/cellular/src/main.rs +++ b/cellular/src/main.rs @@ -3,6 +3,10 @@ use std::io::{stdout, BufWriter}; mod sdr; mod amps; +mod libmobile_sender; +mod iir_filter; +mod samplerate; + fn main() -> Result<(), Box> { let stdout = stdout(); let message = String::from("Welcome to the Cellular Revolution!"); diff --git a/cellular/src/samplerate.rs b/cellular/src/samplerate.rs new file mode 100644 index 0000000..4d38fae --- /dev/null +++ b/cellular/src/samplerate.rs @@ -0,0 +1,45 @@ +struct SampleRate { + factor: f64, + filter_cutoff: f64, + down: DownSampler, + up: UpSampler, +} + +struct DownSampler { + lp: IIRFilter, + last_sample: Sample, + in_index: f64, +} + +struct UpSampler { + lp: IIRFilter, + current_sample: Sample, + last_sample: Sample, + in_index: f64, +} + +impl SampleRate { + pub fn init(&mut self, low_samplerate: f64, high_samplerate: f64, filter_cutoff: f64) -> Result<(), i32> { + // Implementation goes here + + Ok(()) + // or Err(error_code) if there's an error + } + + pub fn downsample(&mut self, state: SampleRate, samples: Sample, input_num: i32) -> Result<(), i32> { + Ok(()) + } + + pub fn upsample_input_num(&mut self, state: SampleRate, output_num: i32) -> Result<(), i32> { + Ok(()) + } + + pub fn upsample_output_num(&mut self, state: SampleRate, input_num: i32) -> Result<(), i32> { + Ok(()) + } + + pub fn upsample(&mut self, state: SampleRate, input: Sample, input_num: i32, output: Sample, output_num: i32) { + + } + +} \ No newline at end of file