diff --git a/src/llcc68.cpp b/src/llcc68.cpp index 6304c7a..85eb9fd 100644 --- a/src/llcc68.cpp +++ b/src/llcc68.cpp @@ -1369,6 +1369,11 @@ LLCC68::hal_async_flush(lora_parameters_t params) { return ue(Errc::InvalidState); } APP_RADIO_RETURN_ERR_CTX(set_standby(), "tx::standby"); + APP_RADIO_RETURN_ERR_CTX(set_packet_type_lora(), "tx::set_packet_type"); + APP_RADIO_RETURN_ERR_CTX(set_lora_sync_word(params.sync_word), + "tx::set_lora_sync_word"); + APP_RADIO_RETURN_ERR_CTX(set_rf_frequency(params.frequency_mhz), + "tx::set_rf_frequency"); APP_RADIO_RETURN_ERR_CTX( set_modulation_params(params.mod_params.sf, params.mod_params.bw, params.mod_params.cr, @@ -1430,10 +1435,35 @@ LLCC68::hal_gfsk_async_flush(gfsk_parameters_t params) { if (data().tx_xfer_size == 0 || data().tx_xfer_size > MAX_BUFFER_PAYLOAD) { return ue(-EINVAL); } + if (params.sync_word_length > params.sync_word.size() || + params.packet_params.sync_length_bits > params.sync_word.size() * 8) { + return ue(-EINVAL); + } APP_RADIO_RETURN_ERR_CTX(set_standby(), "gfsk_tx::standby"); + APP_RADIO_RETURN_ERR_CTX(set_packet_type_gfsk(), + "gfsk_tx::set_packet_type"); + APP_RADIO_RETURN_ERR_CTX(set_rf_frequency(params.frequency_mhz), + "gfsk_tx::set_rf_frequency"); APP_RADIO_RETURN_ERR_CTX(set_gfsk_modulation_params(params.mod_params), "gfsk_tx::set_modulation_params"); + APP_RADIO_RETURN_ERR_CTX( + set_gfsk_sync_word(std::span{params.sync_word.data(), + params.sync_word_length}), + "gfsk_tx::set_sync_word"); + APP_RADIO_RETURN_ERR_CTX(set_gfsk_crc_seed(params.crc_seed), + "gfsk_tx::set_crc_seed"); + APP_RADIO_RETURN_ERR_CTX(set_gfsk_crc_polynomial(params.crc_polynomial), + "gfsk_tx::set_crc_polynomial"); + APP_RADIO_RETURN_ERR_CTX(set_gfsk_whitening_seed(params.whitening_seed), + "gfsk_tx::set_whitening_seed"); + if (params.packet_params.address_filtering != + GfskAddressFiltering::Disabled) { + APP_RADIO_RETURN_ERR_CTX( + set_gfsk_address_filtering(params.node_address.value_or(0), + params.broadcast_address.value_or(0)), + "gfsk_tx::set_address_filtering"); + } auto packet_params = params.packet_params; packet_params.payload_length = static_cast(data().tx_xfer_size); APP_RADIO_RETURN_ERR_CTX(set_gfsk_packet_params(packet_params), @@ -1477,6 +1507,11 @@ LLCC68::hal_gfsk_async_transmit(std::span data, expected LLCC68::hal_async_rx(lora_parameters_t params) { APP_RADIO_RETURN_ERR_CTX(set_standby(), "rx::standby"); + APP_RADIO_RETURN_ERR_CTX(set_packet_type_lora(), "rx::set_packet_type"); + APP_RADIO_RETURN_ERR_CTX(set_lora_sync_word(params.sync_word), + "rx::set_lora_sync_word"); + APP_RADIO_RETURN_ERR_CTX(set_rf_frequency(params.frequency_mhz), + "rx::set_rf_frequency"); APP_RADIO_RETURN_ERR_CTX(set_buffer_base_address(), "rx::set_buffer_base_address"); @@ -1511,11 +1546,37 @@ expected LLCC68::hal_async_rx(lora_parameters_t params) { } expected LLCC68::hal_gfsk_async_rx(gfsk_parameters_t params) { + if (params.sync_word_length > params.sync_word.size() || + params.packet_params.sync_length_bits > params.sync_word.size() * 8) { + return ue(-EINVAL); + } + APP_RADIO_RETURN_ERR_CTX(set_standby(), "gfsk_rx::standby"); + APP_RADIO_RETURN_ERR_CTX(set_packet_type_gfsk(), + "gfsk_rx::set_packet_type"); + APP_RADIO_RETURN_ERR_CTX(set_rf_frequency(params.frequency_mhz), + "gfsk_rx::set_rf_frequency"); APP_RADIO_RETURN_ERR_CTX(set_buffer_base_address(), "gfsk_rx::set_buffer_base_address"); APP_RADIO_RETURN_ERR_CTX(set_gfsk_modulation_params(params.mod_params), "gfsk_rx::set_modulation_params"); + APP_RADIO_RETURN_ERR_CTX( + set_gfsk_sync_word(std::span{params.sync_word.data(), + params.sync_word_length}), + "gfsk_rx::set_sync_word"); + APP_RADIO_RETURN_ERR_CTX(set_gfsk_crc_seed(params.crc_seed), + "gfsk_rx::set_crc_seed"); + APP_RADIO_RETURN_ERR_CTX(set_gfsk_crc_polynomial(params.crc_polynomial), + "gfsk_rx::set_crc_polynomial"); + APP_RADIO_RETURN_ERR_CTX(set_gfsk_whitening_seed(params.whitening_seed), + "gfsk_rx::set_whitening_seed"); + if (params.packet_params.address_filtering != + GfskAddressFiltering::Disabled) { + APP_RADIO_RETURN_ERR_CTX( + set_gfsk_address_filtering(params.node_address.value_or(0), + params.broadcast_address.value_or(0)), + "gfsk_rx::set_address_filtering"); + } APP_RADIO_RETURN_ERR_CTX(set_gfsk_packet_params(params.packet_params), "gfsk_rx::set_packet_params");