(pl: backend::XmitDataReqPayload, dl_meta: backend::DLMetaData)
| 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"); |
nothing calls this directly
no test coverage detected