| 2104 | } |
| 2105 | |
| 2106 | async fn _update_end_device_conf(&mut self) -> Result<()> { |
| 2107 | trace!("Updating End Device Conf"); |
| 2108 | |
| 2109 | let ds = self.device.get_device_session_mut()?; |
| 2110 | let relay_params = self.device_profile.relay_params.clone().unwrap_or_default(); |
| 2111 | |
| 2112 | // Get the current relay state. |
| 2113 | let relay = if let Some(r) = &ds.relay { |
| 2114 | r.clone() |
| 2115 | } else { |
| 2116 | internal::Relay::default() |
| 2117 | }; |
| 2118 | |
| 2119 | if relay.ed_activation_mode != relay_params.ed_activation_mode.to_u8() as u32 |
| 2120 | || relay.ed_smart_enable_level != relay_params.ed_smart_enable_level as u32 |
| 2121 | || relay.ed_back_off != relay_params.ed_back_off as u32 |
| 2122 | || relay.second_channel_freq != relay_params.second_channel_freq |
| 2123 | || relay.second_channel_dr != relay_params.second_channel_dr as u32 |
| 2124 | || relay.second_channel_ack_offset != relay_params.second_channel_ack_offset as u32 |
| 2125 | { |
| 2126 | let set = lrwn::MACCommandSet::new(vec![lrwn::MACCommand::EndDeviceConfReq( |
| 2127 | lrwn::EndDeviceConfReqPayload { |
| 2128 | activation_relay_mode: lrwn::ActivationRelayMode { |
| 2129 | relay_mode_activation: relay_params.ed_activation_mode, |
| 2130 | smart_enable_level: relay_params.ed_smart_enable_level, |
| 2131 | }, |
| 2132 | channel_settings_ed: lrwn::ChannelSettingsED { |
| 2133 | second_ch_ack_offset: relay_params.second_channel_ack_offset, |
| 2134 | second_ch_dr: relay_params.second_channel_dr, |
| 2135 | second_ch_idx: if relay_params.second_channel_freq > 0 { |
| 2136 | 1 |
| 2137 | } else { |
| 2138 | 0 |
| 2139 | }, |
| 2140 | backoff: relay_params.ed_back_off, |
| 2141 | }, |
| 2142 | second_ch_freq: relay_params.second_channel_freq, |
| 2143 | }, |
| 2144 | )]); |
| 2145 | self.mac_commands.push(set); |
| 2146 | } |
| 2147 | |
| 2148 | ds.relay = Some(relay); |
| 2149 | |
| 2150 | Ok(()) |
| 2151 | } |
| 2152 | |
| 2153 | fn set_tx_info_for_rx1(&mut self) -> Result<()> { |
| 2154 | trace!("Setting tx-info for RX1"); |