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

Method _handle

chirpstack/src/downlink/data_fns.rs:35–72  ·  view source on GitHub ↗
(pl: backend::XmitDataReqPayload, dl_meta: backend::DLMetaData)

Source from the content-addressed store, hash-verified

33 }
34
35 async fn _handle(pl: backend::XmitDataReqPayload, dl_meta: backend::DLMetaData) -> Result<()> {
36 let mut uplink_rx_info = roaming::dl_meta_data_to_uplink_rx_info(&dl_meta)?;
37 uplink_rx_info.sort_by(|a, b| {
38 if a.snr == b.snr {
39 return a.rssi.partial_cmp(&b.rssi).unwrap();
40 }
41 b.snr.partial_cmp(&a.snr).unwrap()
42 });
43
44 if uplink_rx_info.is_empty() {
45 return Err(anyhow!("DLMetaData is not set"));
46 }
47
48 let rf_region = uplink_rx_info[0]
49 .metadata
50 .get("rf_region")
51 .cloned()
52 .unwrap_or_default();
53 let region_common_name = CommonName::from_str(&rf_region)?;
54 let region_config_id = region::get_region_config_id(region_common_name)?;
55
56 let mut ctx = Data {
57 region_config_id,
58 uplink_rx_info,
59 xmit_data_req: pl,
60 dl_meta_data: dl_meta,
61 downlink_frame: gw::DownlinkFrame {
62 downlink_id: rand::rng().random(),
63 ..Default::default()
64 },
65 };
66
67 ctx.set_downlink_frame()?;
68 ctx.save_downlink_frame().await?;
69 ctx.send_downlink_frame().await?;
70
71 Ok(())
72 }
73
74 fn set_downlink_frame(&mut self) -> Result<()> {
75 trace!("Setting DownlinkFrame parameters");

Callers

nothing calls this directly

Calls 7

get_region_config_idFunction · 0.85
unwrapMethod · 0.80
getMethod · 0.45
set_downlink_frameMethod · 0.45
save_downlink_frameMethod · 0.45
send_downlink_frameMethod · 0.45

Tested by

no test coverage detected