diff --git a/src/include/pico/lorawan.h b/src/include/pico/lorawan.h index be0a71f..1d4fcd7 100644 --- a/src/include/pico/lorawan.h +++ b/src/include/pico/lorawan.h @@ -16,6 +16,7 @@ extern "C" { #include "hardware/spi.h" #include "LoRaMac.h" +#include "LmHandler.h" struct lorawan_sx1276_settings { struct { @@ -62,6 +63,10 @@ int lorawan_process_timeout_ms(uint32_t timeout_ms); int lorawan_send_unconfirmed(const void* data, uint8_t data_len, uint8_t app_port); +void lorawan_set_tx_callback(void (*callback)(LmHandlerTxParams_t* params)); + +void lorawan_set_rx_callback(void (*callback)(LmHandlerRxParams_t* params)); + int lorawan_receive(void* data, uint8_t data_len, uint8_t* app_port); void lorawan_debug(bool debug); diff --git a/src/lorawan.c b/src/lorawan.c index dc24e60..70681c4 100644 --- a/src/lorawan.c +++ b/src/lorawan.c @@ -586,11 +586,23 @@ static void OnJoinRequest( LmHandlerJoinParams_t* params ) } } +void (*txCallback)(LmHandlerTxParams_t* params) = NULL; +void (*rxCallback)(LmHandlerRxParams_t* params) = NULL; + static void OnTxData( LmHandlerTxParams_t* params ) { if (Debug) { DisplayTxUpdate( params ); } + + if (txCallback != NULL) { + txCallback( params ); + } +} + +void lorawan_set_tx_callback( void (*callback)(LmHandlerTxParams_t*) ) +{ + txCallback = callback; } static void OnRxData( LmHandlerAppData_t* appData, LmHandlerRxParams_t* params ) @@ -602,6 +614,15 @@ static void OnRxData( LmHandlerAppData_t* appData, LmHandlerRxParams_t* params ) memcpy(AppRxData.Buffer, appData->Buffer, appData->BufferSize); AppRxData.BufferSize = appData->BufferSize; AppRxData.Port = appData->Port; + + if (rxCallback != NULL) { + rxCallback( params ); + } +} + +void lorawan_set_rx_callback( void (*callback)(LmHandlerRxParams_t*) ) +{ + rxCallback = callback; } static void OnClassChange( DeviceClass_t deviceClass )