1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
use pico_common::PicoChannel;
use std::collections::HashMap;
#[derive(Clone)]
pub enum StreamingEvent {
Start,
Stop,
Data {
length: usize,
samples_per_second: u32,
channels: HashMap<PicoChannel, RawChannelDataBlock>,
},
LostConnection,
}
#[derive(Clone)]
pub struct RawChannelDataBlock {
pub max_adc_value: f32,
pub max_scaled_value: f32,
pub samples: Vec<i16>,
}
impl RawChannelDataBlock {
pub fn scale_samples(&self) -> Vec<f32> {
let multiplier = self.max_scaled_value / self.max_adc_value;
self.samples
.iter()
.map(|v| *v as f32 * multiplier)
.collect()
}
pub fn scale_sample(&self, index: usize) -> f32 {
let multiplier = self.max_scaled_value / self.max_adc_value;
self.samples[index] as f32 * multiplier
}
}