(&mut self)
| 102 | } |
| 103 | |
| 104 | async fn start_roaming(&mut self) -> Result<()> { |
| 105 | trace!("Starting passive-roaming"); |
| 106 | let rf_region = self |
| 107 | .uplink_frame_set |
| 108 | .region_common_name |
| 109 | .to_string() |
| 110 | .replace('_', "-"); |
| 111 | |
| 112 | let mut pr_req = backend::PRStartReqPayload { |
| 113 | phy_payload: self.uplink_frame_set.phy_payload.to_vec()?, |
| 114 | ul_meta_data: backend::ULMetaData { |
| 115 | dev_eui: self.join_request.dev_eui.to_vec(), |
| 116 | ul_freq: Some((self.uplink_frame_set.tx_info.frequency as f64) / 1_000_000.0), |
| 117 | data_rate: Some(self.uplink_frame_set.dr), |
| 118 | recv_time: helpers::get_rx_timestamp_chrono(&self.uplink_frame_set.rx_info_set), |
| 119 | rf_region: rf_region.clone(), |
| 120 | gw_cnt: Some(self.uplink_frame_set.rx_info_set.len()), |
| 121 | gw_info: roaming::rx_info_to_gw_info( |
| 122 | &rf_region, |
| 123 | &self.uplink_frame_set.rx_info_set, |
| 124 | )?, |
| 125 | ..Default::default() |
| 126 | }, |
| 127 | ..Default::default() |
| 128 | }; |
| 129 | |
| 130 | #[cfg(test)] |
| 131 | { |
| 132 | pr_req.base.transaction_id = 1234; |
| 133 | } |
| 134 | |
| 135 | let client = self.client.as_ref().unwrap(); |
| 136 | let async_receiver = match client.is_async() { |
| 137 | false => None, |
| 138 | true => Some( |
| 139 | get_async_receiver(pr_req.base.transaction_id, client.get_async_timeout()).await?, |
| 140 | ), |
| 141 | }; |
| 142 | |
| 143 | let resp = client |
| 144 | .pr_start_req(backend::Role::SNS, &mut pr_req, async_receiver) |
| 145 | .await?; |
| 146 | |
| 147 | if let Some(dl_meta) = &resp.dl_meta_data { |
| 148 | downlink::roaming::PassiveRoamingDownlink::handle( |
| 149 | self.uplink_frame_set.clone(), |
| 150 | resp.phy_payload.clone(), |
| 151 | dl_meta.clone(), |
| 152 | ) |
| 153 | .await?; |
| 154 | } else { |
| 155 | return Err(anyhow!("DLMetaData is not set")); |
| 156 | } |
| 157 | |
| 158 | self.pr_start_ans = Some(resp); |
| 159 | Ok(()) |
| 160 | } |
| 161 |
no test coverage detected