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

Method send_downlink_frame_passive_roaming

chirpstack/src/downlink/data.rs:1091–1153  ·  view source on GitHub ↗
(&self)

Source from the content-addressed store, hash-verified

1089 }
1090
1091 async fn send_downlink_frame_passive_roaming(&self) -> Result<()> {
1092 trace!("Sending downlink-frame using passive-roaming");
1093
1094 let ufs = self.uplink_frame_set.as_ref().unwrap();
1095 let ds = self.device.get_device_session()?;
1096 let roaming_meta = ufs.roaming_meta_data.as_ref().unwrap();
1097
1098 let net_id = NetID::from_slice(&roaming_meta.base_payload.sender_id)?;
1099 let client = roaming::get(&net_id).await?;
1100
1101 let mut req = backend::XmitDataReqPayload {
1102 phy_payload: self.downlink_frame.items[0].phy_payload.clone(),
1103 dl_meta_data: Some(backend::DLMetaData {
1104 class_mode: Some("A".to_string()),
1105 dev_eui: self.device.dev_eui.to_vec(),
1106 f_ns_ul_token: roaming_meta.ul_meta_data.f_ns_ul_token.clone(),
1107 dl_freq_1: {
1108 let rx1_freq = self
1109 .region_conf
1110 .get_rx1_frequency_for_uplink_frequency(ufs.tx_info.frequency)?;
1111 Some(rx1_freq as f64 / 1_000_000.0)
1112 },
1113 dl_freq_2: Some(ds.rx2_frequency as f64 / 1_000_000.0),
1114 data_rate_1: {
1115 let rx1_dr = self
1116 .region_conf
1117 .get_rx1_data_rate_index(ds.dr as u8, ds.rx1_dr_offset as usize)?;
1118 Some(rx1_dr)
1119 },
1120 data_rate_2: Some(ds.rx2_dr as u8),
1121 rx_delay_1: Some(ds.rx1_delay as usize),
1122 gw_info: roaming_meta
1123 .ul_meta_data
1124 .gw_info
1125 .iter()
1126 .filter(|gw| gw.dl_allowed.unwrap_or_default())
1127 .map(|gw| backend::GWInfoElement {
1128 ul_token: gw.ul_token.clone(),
1129 ..Default::default()
1130 })
1131 .collect(),
1132 ..Default::default()
1133 }),
1134 ..Default::default()
1135 };
1136
1137 #[cfg(test)]
1138 {
1139 req.base.transaction_id = 1234
1140 }
1141
1142 let async_receiver = match client.is_async() {
1143 false => None,
1144 true => {
1145 Some(get_async_receiver(req.base.transaction_id, client.get_async_timeout()).await?)
1146 }
1147 };
1148 client

Callers 1

_handle_responseMethod · 0.80

Calls 13

get_async_receiverFunction · 0.85
unwrapMethod · 0.80
as_refMethod · 0.80
get_device_sessionMethod · 0.80
to_stringMethod · 0.80
iterMethod · 0.80
is_asyncMethod · 0.80
get_async_timeoutMethod · 0.80
xmit_data_reqMethod · 0.80
getFunction · 0.50
to_vecMethod · 0.45

Tested by

no test coverage detected