Skip to content

Commit

Permalink
v3.2 release.
Browse files Browse the repository at this point in the history
  • Loading branch information
Ludovic-Lesur committed Jun 16, 2023
1 parent fe79e21 commit f04424f
Show file tree
Hide file tree
Showing 24 changed files with 751 additions and 645 deletions.
31 changes: 31 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,32 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [v3.2](https://github.com/sigfox-tech-radio/sigfox-ep-lib/releases/tag/v3.2) - 16 Jun 2023

### Added

* New `LATENCY_COMPENSATION` flag which enables **radio latency compensation** to improve MCU timers accuracy. Delay computation is now performed by the core library.
* Add `SIGFOX_ERROR_SOURCE_HW_API` item to handle **board drivers errors** in RF API or MCU API implementation.

### Changed

* Remove **anonymous structures** to improve compilers compatibility.
* Reduce **RAM usage of AES function** with a 16 bytes array whatever the UL payload length.
* Improve **error naming** and TX control **flags naming**.
* Reduce **stack usage** by using global context directly when calling core functions.
* Add **cast operations** to reduce warnings.
* Change **default output power** to 14dBm in flags.

### Fixed

* Fix **bistream size** macro issue when defining `UL_PAYLOAD_SIZE` and `CONTROL_KEEP_ALIVE_MESSAGE` or `BIDIRECTIONAL`.
* Wrong **status assignment** in TX control driver.

### Known limitations

* **Payload encryption** not supported.
* **Secure element** not supported.

## [v3.1](https://github.com/sigfox-tech-radio/sigfox-ep-lib/releases/tag/v3.1) - 01 Mar 2023

### General
Expand Down Expand Up @@ -44,6 +70,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

* Remove `dl_phy_content_size` field in **RX data structure**, as it is fixed to `SIGFOX_DL_PHY_CONTENT_SIZE_BYTES`.

### Known limitations

* **Payload encryption** not supported.
* **Secure element** not supported.

## [v3.0](https://github.com/sigfox-tech-radio/sigfox-ep-lib/releases/tag/v3.0) - 12 Dec 2022

### General
Expand Down
19 changes: 15 additions & 4 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,11 @@ if(NOT sigfox_ep_addon_rfp_IS_TOP_LEVEL)
opt(TYPE_BOOL ADDON_RFP OFF "Add RFP addon contents to build it with library")
endif()
#Option RF API contents
if(NOT manuf_rf_api_IS_TOP_LEVEL)
opt(TYPE_BOOL MANUF_RF_API OFF "Add RF API contents to build it with library")
if(NOT s2lp_rf_api_IS_TOP_LEVEL)
opt(TYPE_BOOL S2LP_RF_API OFF "Add RF API contents to build it with library")
if(S2LP_RF_API)
list(REMOVE_ITEM MANUF_SOURCES "src/manuf/rf_api.c")
endif()
else()
list(REMOVE_ITEM MANUF_SOURCES "src/manuf/rf_api.c")
endif()
Expand All @@ -94,6 +97,7 @@ if(${USE_SIGFOX_EP_FLAGS_H} STREQUAL "ON")
unset(ASYNCHRONOUS CACHE)
unset(LOW_LEVEL_OPEN_CLOSE CACHE)
unset(REGULATORY CACHE)
unset(LATENCY_COMPENSATION CACHE)
unset(SINGLE_FRAME CACHE)
unset(PARAMETERS_CHECK CACHE)
unset(CERTIFICATION CACHE)
Expand Down Expand Up @@ -124,6 +128,7 @@ else()
opt(TYPE_BOOL ASYNCHRONOUS ON "Support Asynchronous mode")
opt(TYPE_BOOL LOW_LEVEL_OPEN_CLOSE ON "Enable MCU and RF open/close functions")
opt(TYPE_BOOL REGULATORY ON "Enable Regulatory before transmission (DC, FH or LBT)")
opt(TYPE_BOOL LATENCY_COMPENSATION ON "Enable radio latency compensation to improve MCU timers accuracy")
opt(TYPE_BOOL SINGLE_FRAME OFF "Send only 1 frame per message (N=1)")
opt(TYPE_BOOL PARAMETERS_CHECK ON "Enable parameters check")
opt(TYPE_BOOL CERTIFICATION ON "Enable certification functions")
Expand Down Expand Up @@ -179,12 +184,18 @@ if(ADDON_RFP)
include(addon_rfp)
endif()
#Addon RFP module
if(MANUF_RF_API)
include(manuf_rf_api)
if(S2LP_RF_API)
include(s2lp_rf_api)
endif()

mark_as_advanced(CMAKE_BUILD_TYPE CMAKE_INSTALL_PREFIX LIB_LOCATION API_LOCATION)

add_library(${PROJECT_NAME}_obj OBJECT EXCLUDE_FROM_ALL ${LIB_SOURCES})
target_include_directories( ${PROJECT_NAME}_obj PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/inc
)
target_compile_definitions(${PROJECT_NAME}_obj PUBLIC ${DEF_FLAG_LIST})

add_library(${PROJECT_NAME} STATIC ${PRECOMPIL_LIB_SOURCES})
target_include_directories(${PROJECT_NAME} PUBLIC ${PRECOMPIL_DIR}/inc)
target_compile_definitions(${PROJECT_NAME} PUBLIC ${DEF_FLAG_LIST})
Expand Down
15 changes: 15 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ Below is the list of available flags.
| `ASYNCHRONOUS` | `undefined` / `defined` | Asynchronous mode if defined, blocking mode otherwise. |
| `LOW_LEVEL_OPEN_CLOSE` | `undefined` / `defined` | Enable MCU and RF open/close functions if defined. |
| `REGULATORY` | `undefined` / `defined` | Enable radio regulatory control (DC, FH or LBT check) if defined. |
| `LATENCY_COMPENSATION` | `undefined` / `defined` | Enable radio latency compensation to improve MCU timers accuracy. |
| `SINGLE_FRAME` | `undefined` / `defined` | Send 1 frame per message (N=1) if defined. Otherwise number of frames per message is dynamically given when sending a message (N=1, N=2 or N=3). |
| `UL_BIT_RATE_BPS` | `undefined` / `100` / `600` | If defined, give the only uplink bit rate supported (100 or 600 depending on the RC). Otherwise, value is dynamically given when sending a message. |
| `TX_POWER_DBM_EIRP` | `undefined` / `<tx_power_dbm_eirp>` | If defined, give the only TX power supported by the radio. Otherwise the value is dynamically given when sending a message. |
Expand Down Expand Up @@ -114,6 +115,7 @@ $ cmake -DUSE_SIGFOX_EP_FLAGS_H=OFF \
-DASYNCHRONOUS=ON \
-DLOW_LEVEL_OPEN_CLOSE=ON \
-DREGULATORY=ON \
-DLATENCY_COMPENSATION=ON \
-DSINGLE_FRAME=ON \
-DPARAMETERS_CHECK=ON \
-DCERTIFICATION=ON \
Expand Down Expand Up @@ -153,4 +155,17 @@ The addon can be directly generated from the Sigfox End-Point library **cmake**

```bash
$ cmake <all previous flags> -DADDON_RFP=ON ..
$ make sigfox_ep_addon_rfp
```

## RF API implementation examples


### ST S2LP

The [S2LP RF API example code](https://github.com/sigfox-tech-radio/sigfox-ep-rf-api-st-s2lp) can be directly generated from the Sigfox End-Point library **cmake** by using the `S2LP_RF_API` option:

```bash
$ cmake <all previous flags> -DS2LP_RF_API=ON ..
$ make s2lp_rf_api
```
2 changes: 1 addition & 1 deletion cmake/addon_rfp.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Set(FETCHCONTENT_QUIET FALSE)
FetchContent_Declare(
addon_rfp
GIT_REPOSITORY "https://github.com/sigfox-tech-radio/sigfox-ep-addon-rfp"
GIT_TAG "v1.1"
GIT_TAG "v1.2"
GIT_PROGRESS TRUE
GIT_SHALLOW 1
#SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/addons/rfp
Expand Down
33 changes: 2 additions & 31 deletions cmake/precompile.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,13 @@ find_program(UNIFDEF unifdef REQUIRED)
if(NOT UNIFDEF)
message(FATAL_ERROR "unifdef not found!")
endif()
find_program(SPLINT splint REQUIRED)
if(NOT SPLINT)
message(FATAL_ERROR "splint not found!")
endif()
mark_as_advanced(SPLINT UNIFDEF PRECOMPIL_DIR)
mark_as_advanced(UNIFDEF PRECOMPIL_DIR)
# specify the precompil files location
set(PRECOMPIL_DIR ${CMAKE_BINARY_DIR}/precompil CACHE STRING "")

#List of precompileInc and precompileSrc files
foreach(X IN LISTS LIB_SOURCES)
LIST(APPEND PRECOMPIL_LIB_SOURCES "${PRECOMPIL_DIR}/${X}")
LIST(APPEND SPLINT_PRECOMPIL_LIB_SOURCES "${PRECOMPIL_DIR}/splint/${X}")
endforeach()
foreach(X IN LISTS MANUF_SOURCES)
LIST(APPEND PRECOMPIL_MANUF_SOURCES "${PRECOMPIL_DIR}/${X}")
Expand All @@ -40,29 +35,12 @@ add_custom_command(
)
endforeach()

#Custom command Loop for all Sources : SPLINT analysis
foreach(X IN LISTS LIB_SOURCES MANUF_SOURCES)
add_custom_command(
OUTPUT "${PRECOMPIL_DIR}/splint/${X}"
DEPENDS ${CMAKE_BINARY_DIR}/undefs_file
DEPENDS ${CMAKE_BINARY_DIR}/defs_file
DEPENDS ${LIB_HEADERS}
DEPENDS ${X}
COMMAND ${CMAKE_COMMAND} -E make_directory ${PRECOMPIL_DIR}/splint ${PRECOMPIL_DIR}/splint/src/core ${PRECOMPIL_DIR}/splint/src/manuf
COMMAND splint +linelength 150 +weak +show-summary +stats -slashslashcomment -preproc -I${PRECOMPIL_DIR}/inc/core/ -I${PRECOMPIL_DIR}/inc/manuf/ -I${PRECOMPIL_DIR}/inc/ ${PRECOMPIL_DIR}/${X} > ${PRECOMPIL_DIR}/splint/${X}.log
# Keep a log trace even if the splint failed
COMMAND cat ${PRECOMPIL_DIR}/splint/${X}.log > ${PRECOMPIL_DIR}/splint/${X}
# VERBATIM
)
endforeach()


#Custom command Loop for all Headers
foreach(X IN LISTS LIB_HEADERS MANUF_HEADERS)
if(${X} STREQUAL "inc/sigfox_types.h" AND ${USE_SIGFOX_EP_FLAGS_H} STREQUAL "OFF" AND NOT "${DEF_FLAG_WITH_VALUE_LIST}" STREQUAL "")
#Add Specific Macro in sigfox_types.h file
foreach(X IN LISTS DEF_FLAG_WITH_VALUE_LIST)
string(CONCAT DEF_FLAG_STRING ${DEF_FLAG_STRING} "\r\\n" "#define ${X} ${${X}}")
string(CONCAT DEF_FLAG_STRING ${DEF_FLAG_STRING} "#define ${X} ${${X}}\\n")
endforeach()
add_custom_command(
OUTPUT ${PRECOMPIL_DIR}/${X}
Expand Down Expand Up @@ -110,10 +88,3 @@ add_custom_target(precompil
VERBATIM
)

add_custom_target(splintanalysis
DEPENDS precompil
DEPENDS ${SPLINT_PRECOMPIL_LIB_SOURCES}
VERBATIM
)


12 changes: 6 additions & 6 deletions cmake/manuf_rf_api.cmake → cmake/s2lp_rf_api.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,21 @@ include(ExternalProject)
include(FetchContent)
Set(FETCHCONTENT_QUIET FALSE)
FetchContent_Declare(
manuf_rf_api
GIT_REPOSITORY "https://github.com/sigfox-tech-radio/manuf-rf-api"
s2lp_rf_api
GIT_REPOSITORY "https://github.com/sigfox-tech-radio/sigfox-ep-rf-api-st-s2lp"
GIT_TAG "v1.0"
GIT_PROGRESS TRUE
GIT_SHALLOW 1
#SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/addons/rfp
UPDATE_DISCONNECTED TRUE
STEP_TARGETS update
)
FetchContent_GetProperties(manuf_rf_api)
FetchContent_GetProperties(s2lp_rf_api)
if (NOT platform_POPULATED)
FetchContent_Populate(manuf_rf_api)
add_subdirectory(${manuf_rf_api_SOURCE_DIR} ${manuf_rf_api_BINARY_DIR})
FetchContent_Populate(s2lp_rf_api)
add_subdirectory(${s2lp_rf_api_SOURCE_DIR} ${s2lp_rf_api_BINARY_DIR})
endif()
mark_as_advanced(FETCHCONTENT_QUIET FETCHCONTENT_BASE_DIR FETCHCONTENT_FULLY_DISCONNECTED FETCHCONTENT_UPDATES_DISCONNECTED)
mark_as_advanced(FETCHCONTENT_SOURCE_DIR_MANUF_RF_API FETCHCONTENT_UPDATES_DISCONNECTED_MANUF_RF_API)
mark_as_advanced(FETCHCONTENT_SOURCE_DIR_S2LP_RF_API FETCHCONTENT_UPDATES_DISCONNECTED_S2LP_RF_API)
#FetchContent_MakeAvailable(addon_rfp)

Binary file modified docs/images/sigfox_ep_lib_architecture.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 4 additions & 2 deletions inc/core/sigfox_crc.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@
typedef enum {
SIGFOX_CRC_SUCCESS = 0,
SIGFOX_CRC_ERROR_NULL_PARAMETER,
// Last index.
SIGFOX_CRC_ERROR_LAST
} SIGFOX_CRC_status_t;
#else
typedef void SIGFOX_CRC_status_t;
Expand Down Expand Up @@ -94,7 +96,7 @@ SIGFOX_CRC_status_t SIGFOX_CRC_compute_crc8(sfx_u8 *crc_data, sfx_u8 data_size,
* \retval none
*******************************************************************/
#ifdef ERROR_STACK
#define SIGFOX_CRC_stack_error(void) SIGFOX_ERROR_stack(SIGFOX_ERROR_SOURCE_CRC, crc_status)
#define SIGFOX_CRC_stack_error(void) SIGFOX_ERROR_stack(SIGFOX_ERROR_SOURCE_SIGFOX_CRC, sigfox_crc_status)
#else
#define SIGFOX_CRC_stack_error(void)
#endif
Expand All @@ -108,7 +110,7 @@ SIGFOX_CRC_status_t SIGFOX_CRC_compute_crc8(sfx_u8 *crc_data, sfx_u8 data_size,
* \param[out] none
* \retval none
*******************************************************************/
#define SIGFOX_CRC_check_status(error) { if (crc_status != SIGFOX_CRC_SUCCESS) { SIGFOX_CRC_stack_error(); EXIT_ERROR(error) } }
#define SIGFOX_CRC_check_status(error) { if (sigfox_crc_status != SIGFOX_CRC_SUCCESS) { SIGFOX_CRC_stack_error(); EXIT_ERROR(error) } }
#endif

#endif /* CRC_HW */
Expand Down
13 changes: 8 additions & 5 deletions inc/core/sigfox_ep_bitstream.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,12 @@ typedef enum {
SIGFOX_EP_BITSTREAM_ERROR_KEY_TYPE,
SIGFOX_EP_BITSTREAM_ERROR_FRAME_RANK,
SIGFOX_EP_BITSTREAM_ERROR_MESSAGE_COUNTER,
// Low level errors.
SIGFOX_EP_BITSTREAM_ERROR_CRC,
SIGFOX_EP_BITSTREAM_ERROR_MCU
// Low level drivers errors.
// Activate the ERROR_STACK flag and use the SIGFOX_EP_API_unstack_error() function to get more details.
SIGFOX_EP_BITSTREAM_ERROR_DRIVER_SIGFOX_CRC,
SIGFOX_EP_BITSTREAM_ERROR_DRIVER_MCU_API,
// Last index.
SIGFOX_EP_BITSTREAM_ERROR_LAST
} SIGFOX_EP_BITSTREAM_status_t;
#else
typedef void SIGFOX_EP_BITSTREAM_status_t;
Expand Down Expand Up @@ -185,7 +188,7 @@ SIGFOX_EP_BITSTREAM_status_t SIGFOX_EP_BITSTREAM_decode_downlink_frame(SIGFOX_EP
* \retval none
*******************************************************************/
#ifdef ERROR_STACK
#define SIGFOX_EP_BITSTREAM_stack_error(void) SIGFOX_ERROR_stack(SIGFOX_ERROR_SOURCE_BITSTREAM, bitstream_status)
#define SIGFOX_EP_BITSTREAM_stack_error(void) SIGFOX_ERROR_stack(SIGFOX_ERROR_SOURCE_SIGFOX_EP_BITSTREAM, sigfox_ep_bitstream_status)
#else
#define SIGFOX_EP_BITSTREAM_stack_error(void)
#endif
Expand All @@ -199,7 +202,7 @@ SIGFOX_EP_BITSTREAM_status_t SIGFOX_EP_BITSTREAM_decode_downlink_frame(SIGFOX_EP
* \param[out] none
* \retval none
*******************************************************************/
#define SIGFOX_EP_BITSTREAM_check_status(error) { if (bitstream_status != SIGFOX_EP_BITSTREAM_SUCCESS) { SIGFOX_EP_BITSTREAM_stack_error(); EXIT_ERROR(error) } }
#define SIGFOX_EP_BITSTREAM_check_status(error) { if (sigfox_ep_bitstream_status != SIGFOX_EP_BITSTREAM_SUCCESS) { SIGFOX_EP_BITSTREAM_stack_error(); EXIT_ERROR(error) } }
#endif

#endif /* __SIGFOX_EP_BITSTREAM_H__ */
8 changes: 4 additions & 4 deletions inc/core/sigfox_ep_frequency.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ typedef enum {
SIGFOX_EP_FREQUENCY_ERROR_SPECTRUM_ACCESS_TYPE,
SIGFOX_EP_FREQUENCY_ERROR_RANDOM_GENERATION,
SIGFOX_EP_FREQUENCY_ERROR_FRAME_1_FREQUENCY,
// Last index.
SIGFOX_EP_FREQUENCY_ERROR_LAST
} SIGFOX_EP_FREQUENCY_status_t;
#else
typedef void SIGFOX_EP_FREQUENCY_status_t;
Expand All @@ -70,9 +72,7 @@ typedef void SIGFOX_EP_FREQUENCY_status_t;
typedef struct {
SIGFOX_ul_frame_rank_t ul_frame_rank;
sfx_u8 number_of_frames;
#ifdef BIDIRECTIONAL
sfx_bool bidirectional_flag;
#endif
} SIGFOX_EP_FREQUENCY_uplink_signal_t;
#endif

Expand Down Expand Up @@ -139,7 +139,7 @@ SIGFOX_EP_FREQUENCY_status_t SIGFOX_EP_FREQUENCY_get_random_value(sfx_u16 *rando
* \retval none
*******************************************************************/
#ifdef ERROR_STACK
#define SIGFOX_EP_FREQUENCY_stack_error(void) SIGFOX_ERROR_stack(SIGFOX_ERROR_SOURCE_FREQUENCY, frequency_status)
#define SIGFOX_EP_FREQUENCY_stack_error(void) SIGFOX_ERROR_stack(SIGFOX_ERROR_SOURCE_SIGFOX_EP_FREQUENCY, sigfox_ep_frequency_status)
#else
#define SIGFOX_EP_FREQUENCY_stack_error(void)
#endif
Expand All @@ -153,7 +153,7 @@ SIGFOX_EP_FREQUENCY_status_t SIGFOX_EP_FREQUENCY_get_random_value(sfx_u16 *rando
* \param[out] none
* \retval none
*******************************************************************/
#define SIGFOX_EP_FREQUENCY_check_status(error) { if (frequency_status != SIGFOX_EP_FREQUENCY_SUCCESS) { SIGFOX_EP_FREQUENCY_stack_error(); EXIT_ERROR(error) } }
#define SIGFOX_EP_FREQUENCY_check_status(error) { if (sigfox_ep_frequency_status != SIGFOX_EP_FREQUENCY_SUCCESS) { SIGFOX_EP_FREQUENCY_stack_error(); EXIT_ERROR(error) } }
#endif

#endif /* __SIGFOX_EP_FREQUENCY_H__ */
20 changes: 12 additions & 8 deletions inc/core/sigfox_tx_control.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,12 @@ typedef enum {
SIGFOX_TX_CONTROL_SUCCESS = 0,
SIGFOX_TX_CONTROL_ERROR_NULL_PARAMETER,
SIGFOX_TX_CONTROL_ERROR_SPECTRUM_ACCESS,
// Low level errors.
SIGFOX_TX_CONTROL_ERROR_MCU,
SIGFOX_TX_CONTROL_ERROR_RF
// Low level drivers errors.
// Activate the ERROR_STACK flag and use the SIGFOX_EP_API_unstack_error() function to get more details.
SIGFOX_TX_CONTROL_ERROR_DRIVER_MCU_API,
SIGFOX_TX_CONTROL_ERROR_DRIVER_RF_API,
// Last index.
SIGFOX_TX_CONTROL_ERROR_LAST
} SIGFOX_TX_CONTROL_status_t;
#else
typedef void SIGFOX_TX_CONTROL_status_t;
Expand All @@ -66,7 +69,8 @@ typedef void SIGFOX_TX_CONTROL_status_t;
typedef enum {
SIGFOX_TX_CONTROL_RESULT_ALLOWED,
SIGFOX_TX_CONTROL_RESULT_FORBIDDEN,
SIGFOX_TX_CONTROL_RESULT_PENDING
SIGFOX_TX_CONTROL_RESULT_PENDING,
SIGFOX_TX_CONTROL_RESULT_LAST
} SIGFOX_TX_CONTROL_result_t;

#ifdef ASYNCHRONOUS
Expand Down Expand Up @@ -112,10 +116,10 @@ typedef struct {
#endif
#ifdef CERTIFICATION
#ifdef SPECTRUM_ACCESS_FH
sfx_bool fh_timer_enable;
sfx_bool fh_check_enable;
#endif
#ifdef SPECTRUM_ACCESS_LBT
sfx_bool lbt_enable;
sfx_bool lbt_check_enable;
sfx_u32 lbt_cs_max_duration_first_frame_ms;
#endif
#ifdef SPECTRUM_ACCESS_LDC
Expand Down Expand Up @@ -197,7 +201,7 @@ SIGFOX_TX_CONTROL_status_t SIGFOX_TX_CONTROL_get_result(SIGFOX_TX_CONTROL_result
* \retval none
*******************************************************************/
#ifdef ERROR_STACK
#define SIGFOX_TX_CONTROL_stack_error(void) SIGFOX_ERROR_stack(SIGFOX_ERROR_SOURCE_TX_CONTROL, tx_control_status)
#define SIGFOX_TX_CONTROL_stack_error(void) SIGFOX_ERROR_stack(SIGFOX_ERROR_SOURCE_SIGFOX_TX_CONTROL, sigfox_tx_control_status)
#else
#define SIGFOX_TX_CONTROL_stack_error(void)
#endif
Expand All @@ -211,7 +215,7 @@ SIGFOX_TX_CONTROL_status_t SIGFOX_TX_CONTROL_get_result(SIGFOX_TX_CONTROL_result
* \param[out] none
* \retval none
*******************************************************************/
#define SIGFOX_TX_CONTROL_check_status(error) { if (tx_control_status != SIGFOX_TX_CONTROL_SUCCESS) { SIGFOX_TX_CONTROL_stack_error(); EXIT_ERROR(error) } }
#define SIGFOX_TX_CONTROL_check_status(error) { if (sigfox_tx_control_status != SIGFOX_TX_CONTROL_SUCCESS) { SIGFOX_TX_CONTROL_stack_error(); EXIT_ERROR(error) } }
#endif

#endif /* REGULATORY */
Expand Down
Loading

0 comments on commit f04424f

Please sign in to comment.