Skip to main content

gmt_dos_clients_optics_state/
lib.rs

1#[cfg(feature = "gmt_dos-clients_arrow")]
2pub mod arrow;
3mod state;
4pub use state::{MirrorState, OpticalState, SegmentState, units};
5
6use interface::UniqueIdentifier;
7///
8/// M1 optics state
9pub enum M1State {}
10impl UniqueIdentifier for M1State {
11    type DataType = MirrorState;
12    const PORT: u16 = 50_012;
13}
14/// M2 optics state
15pub enum M2State {}
16impl UniqueIdentifier for M2State {
17    type DataType = MirrorState;
18    const PORT: u16 = 50_013;
19}
20
21pub enum OpticsState {}
22impl UniqueIdentifier for OpticsState {
23    type DataType = OpticalState;
24}
25
26#[cfg(test)]
27mod tests {
28    use interface::{Data, Read, Update};
29
30    use super::*;
31
32    #[test]
33    fn reset_state() {
34        let zp = OpticalState::m2(MirrorState::default().set_segment_state(
35            1,
36            SegmentState::rbms({
37                let mut rbms = vec![0f64; 7];
38                rbms[0] = 1e-6;
39                rbms
40            }),
41        ));
42        let mut state = OpticalState::default().set_zero_point(zp);
43        dbg!(&state);
44
45        let m2_state = MirrorState::default().set_segment_state(
46            1,
47            SegmentState::rbms({
48                let mut rbms = vec![0f64; 7];
49                rbms[0] = -0.25e-6;
50                rbms[1] = -1e-6;
51                rbms
52            }),
53        ).set_segment_state(
54            2,
55            SegmentState::rbms({
56                let mut rbms = vec![0f64; 7];
57                rbms[1] = -1e-6;
58                rbms
59            }),
60        );
61        dbg!(&m2_state);
62        <_ as Read<M2State>>::read(&mut state, Data::new(m2_state.clone()));
63        state.update();
64        dbg!(&state);
65        <_ as Read<M2State>>::read(&mut state, Data::new(m2_state));
66        state.update();
67        dbg!(&state);
68    }
69
70    // #[test]
71    // fn interface() {
72    //     let m1 = MirrorState::default();
73    //     let m2 = MirrorState::default()
74    //         .set_segment_state(1, SegmentState::rbms([1e-6, 0., 0., 0., 0., 0.]));
75    //     let mut optical_state = OpticalState::m1(MirrorState::default().zeros_modes(3))
76    //         .set_zero_point(OpticalState::new(&m1, &m2));
77
78    //     <_ as Read<OpticsState>>::read(&mut optical_state, Data::new(Default::default()));
79    //     let reference = OpticalState::m2(&m2).set_zero_point(OpticalState::m2(m2));
80    //     assert_eq!(reference, optical_state);
81    // }
82}