| 2056 | } |
| 2057 | |
| 2058 | async fn _update_relay_conf(&mut self) -> Result<()> { |
| 2059 | trace!("Updating Relay Conf"); |
| 2060 | |
| 2061 | let ds = self.device.get_device_session_mut()?; |
| 2062 | let relay_params = self.device_profile.relay_params.clone().unwrap_or_default(); |
| 2063 | |
| 2064 | // Get the current relay state. |
| 2065 | let relay = if let Some(r) = &ds.relay { |
| 2066 | r.clone() |
| 2067 | } else { |
| 2068 | internal::Relay::default() |
| 2069 | }; |
| 2070 | |
| 2071 | if relay.enabled != relay_params.relay_enabled |
| 2072 | || relay.cad_periodicity != relay_params.relay_cad_periodicity as u32 |
| 2073 | || relay.default_channel_index != relay_params.default_channel_index as u32 |
| 2074 | || relay.second_channel_freq != relay_params.second_channel_freq |
| 2075 | || relay.second_channel_dr != relay_params.second_channel_dr as u32 |
| 2076 | || relay.second_channel_ack_offset != relay_params.second_channel_ack_offset as u32 |
| 2077 | { |
| 2078 | let set = lrwn::MACCommandSet::new(vec![lrwn::MACCommand::RelayConfReq( |
| 2079 | lrwn::RelayConfReqPayload { |
| 2080 | channel_settings_relay: lrwn::ChannelSettingsRelay { |
| 2081 | start_stop: match relay_params.relay_enabled { |
| 2082 | true => 1, |
| 2083 | false => 0, |
| 2084 | }, |
| 2085 | cad_periodicity: relay_params.relay_cad_periodicity, |
| 2086 | default_ch_idx: relay_params.default_channel_index, |
| 2087 | second_ch_idx: if relay_params.second_channel_freq > 0 { |
| 2088 | 1 |
| 2089 | } else { |
| 2090 | 0 |
| 2091 | }, |
| 2092 | second_ch_dr: relay_params.second_channel_dr, |
| 2093 | second_ch_ack_offset: relay_params.second_channel_ack_offset, |
| 2094 | }, |
| 2095 | second_ch_freq: relay_params.second_channel_freq, |
| 2096 | }, |
| 2097 | )]); |
| 2098 | self.mac_commands.push(set); |
| 2099 | } |
| 2100 | |
| 2101 | ds.relay = Some(relay); |
| 2102 | |
| 2103 | Ok(()) |
| 2104 | } |
| 2105 | |
| 2106 | async fn _update_end_device_conf(&mut self) -> Result<()> { |
| 2107 | trace!("Updating End Device Conf"); |