rsiot/components/cmp_plc/plc/library/drives/select_sp/
logic.rs1use super::{IHmiCommand, QHmiPermission, QHmiStatus, I, Q, S};
2
3pub fn logic(input: &I, stat: &mut S) -> Q {
4 stat.sp_plc_act = match input.sp_en_source {
5 false => match input.hmi_command {
7 IHmiCommand::no_command => stat.sp_plc_act,
8 IHmiCommand::sp_hmi_en => false,
9 IHmiCommand::sp_plc_en => true,
10 IHmiCommand::sp_hmi(_) => stat.sp_plc_act,
11 },
12
13 true => {
15 if input.sp_hmi_en {
16 false
17 } else if input.sp_plc_en {
18 true
19 } else {
20 stat.sp_plc_act
21 }
22 }
23 };
24
25 if let IHmiCommand::sp_hmi(sp) = input.hmi_command {
26 stat.sp_hmi = sp
27 };
28
29 let sp = match stat.sp_plc_act {
30 true => {
31 stat.sp_hmi = input.sp_plc;
32 input.sp_plc
33 }
34 false => stat.sp_hmi,
35 };
36
37 Q {
38 hmi_status: QHmiStatus {
39 hmi_permission: QHmiPermission {
40 sp_hmi_en: !input.sp_en_source && stat.sp_plc_act,
41 sp_plc_en: !input.sp_en_source && !stat.sp_plc_act,
42 sp_hmi_plc_en: !input.sp_en_source,
43 sp_hmi: !stat.sp_plc_act,
44 },
45 sp_plc_act: stat.sp_plc_act,
46 sp_hmi_act: !stat.sp_plc_act,
47 sp,
48 },
49 sp_plc_act: stat.sp_plc_act,
50 sp_hmi_act: !stat.sp_plc_act,
51 sp,
52 }
53}