MCPcopy Create free account
hub / github.com/chirpstack/chirpstack / start_roaming

Method start_roaming

chirpstack/src/uplink/join_fns.rs:104–160  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

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

Callers 1

_start_prMethod · 0.80

Calls 11

get_rx_timestamp_chronoFunction · 0.85
rx_info_to_gw_infoFunction · 0.85
get_async_receiverFunction · 0.85
to_stringMethod · 0.80
unwrapMethod · 0.80
as_refMethod · 0.80
is_asyncMethod · 0.80
get_async_timeoutMethod · 0.80
pr_start_reqMethod · 0.80
handleFunction · 0.50
to_vecMethod · 0.45

Tested by

no test coverage detected