Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of nRF51822 by
softdevice_handler.h
00001 /* Copyright (c) 2013 Nordic Semiconductor. All Rights Reserved. 00002 * 00003 * The information contained herein is property of Nordic Semiconductor ASA. 00004 * Terms and conditions of usage are described in detail in NORDIC 00005 * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. 00006 * 00007 * Licensees are granted free, non-transferable use of the information. NO 00008 * WARRANTY of ANY KIND is provided. This heading must NOT be removed from 00009 * the file. 00010 * 00011 */ 00012 00013 /** @file 00014 * 00015 * @defgroup softdevice_handler SoftDevice Event Handler 00016 * @{ 00017 * @ingroup app_common 00018 * @brief API for initializing and disabling the SoftDevice 00019 * 00020 * @details This API contains the functions and defines exposed by the @ref lib_softdevice_handler. 00021 * For more information on the library and how the application should use it, please refer 00022 * @ref lib_softdevice_handler. 00023 * 00024 * @note Use the USE_SCHEDULER parameter of the SOFTDEVICE_HANDLER_INIT() macro to select if 00025 * the @ref app_scheduler is to be used or not. 00026 * 00027 * @note Even if the scheduler is not used, softdevice_handler.h will include app_scheduler.h. 00028 * So when compiling, app_scheduler.h must be available in one of the compiler include 00029 * paths. 00030 */ 00031 00032 #ifndef SOFTDEVICE_HANDLER_H__ 00033 #define SOFTDEVICE_HANDLER_H__ 00034 00035 #include <stdlib.h> 00036 #include "nordic_common.h" 00037 #include "nrf_sdm.h" 00038 #include "app_error.h" 00039 #include "app_util.h" 00040 #include "ble_stack_handler_types.h " 00041 #include "ant_stack_handler_types.h " 00042 00043 #ifdef __cplusplus 00044 extern "C" { 00045 #endif // #ifdef __cplusplus 00046 00047 #define SOFTDEVICE_SCHED_EVT_SIZE 0 /**< Size of button events being passed through the scheduler (is to be used for computing the maximum size of scheduler events). For SoftDevice events, this size is 0, since the events are being pulled in the event handler. */ 00048 #define SYS_EVT_MSG_BUF_SIZE sizeof(uint32_t) /**< Size of System (SOC) event message buffer. */ 00049 00050 /**@brief Type of function for passing events from the stack handler module to the scheduler. */ 00051 typedef uint32_t (*softdevice_evt_schedule_func_t) (void); 00052 00053 /**@brief Application System (SOC) event handler type. */ 00054 typedef void (*sys_evt_handler_t) (uint32_t evt_id); 00055 00056 00057 /**@brief Macro for initializing the stack event handler. 00058 * 00059 * @details It will handle dimensioning and allocation of the memory buffer required for reading 00060 * events from the stack, making sure the buffer is correctly aligned. It will also 00061 * connect the stack event handler to the scheduler/RTOS (if specified). 00062 * 00063 * @param[in] CLOCK_SOURCE Low frequency clock source and accuracy (type nrf_clock_lfclksrc_t, 00064 * see sd_softdevice_enable() for details). 00065 * @param[in] EVT_HANDLER scheduler/RTOS event handler function. 00066 * 00067 * @note Since this macro allocates a buffer, it must only be called once (it is OK to call it 00068 * several times as long as it is from the same location, that is to do a 00069 * reinitialization). 00070 */ 00071 /*lint -emacro(506, SOFTDEVICE_HANDLER_INIT) */ /* Suppress "Constant value Boolean */ 00072 #define SOFTDEVICE_HANDLER_INIT(CLOCK_SOURCE, \ 00073 EVT_HANDLER) \ 00074 do \ 00075 { \ 00076 static uint32_t BLE_EVT_BUFFER[CEIL_DIV(BLE_STACK_EVT_MSG_BUF_SIZE, sizeof(uint32_t))]; \ 00077 uint32_t ERR_CODE; \ 00078 ERR_CODE = softdevice_handler_init((CLOCK_SOURCE), \ 00079 BLE_EVT_BUFFER, \ 00080 sizeof(BLE_EVT_BUFFER), \ 00081 EVT_HANDLER); \ 00082 APP_ERROR_CHECK(ERR_CODE); \ 00083 } while (0) 00084 00085 00086 /**@brief Function for initializing the stack handler module. 00087 * 00088 * @details Enables the SoftDevice and the stack event interrupt handler. 00089 * 00090 * @note This function must be called before calling any function in the SoftDevice API. 00091 * 00092 * @note Normally initialization should be done using the SOFTDEVICE_HANDLER_INIT() macro, 00093 * as that will both allocate the event buffer, and also align the buffer correctly. 00094 * 00095 * @param[in] clock_source Low frequency clock source to be used by the SoftDevice. 00096 * @param[in] p_ble_evt_buffer Buffer for holding one BLE stack event. Since heap is not being 00097 * used, this buffer must be provided by the application. The 00098 * buffer must be large enough to hold the biggest stack event the 00099 * application is supposed to handle. The buffer must be aligned to 00100 * a 4 byte boundary. This parameter is unused if BLE stack support 00101 * is not required. 00102 * @param[in] ble_evt_buffer_size Size of SoftDevice BLE event buffer. This parameter is unused if 00103 * BLE stack support is not required. 00104 * @param[in] evt_schedule_func Function for passing events to the scheduler. Point to 00105 * ble_ant_stack_evt_schedule() to connect to the scheduler. 00106 * Set to NULL to make the stack handler module call the event 00107 * handler directly from the stack event interrupt handler. 00108 * 00109 * @retval NRF_SUCCESS Successful initialization. 00110 * @retval NRF_ERROR_INVALID_PARAM Invalid parameter (buffer not aligned to a 4 byte 00111 * boundary) or NULL. 00112 */ 00113 uint32_t softdevice_handler_init(nrf_clock_lfclksrc_t clock_source, 00114 void * p_ble_evt_buffer, 00115 uint16_t ble_evt_buffer_size, 00116 softdevice_evt_schedule_func_t evt_schedule_func); 00117 00118 00119 /**@brief Function for disabling the SoftDevice. 00120 * 00121 * @details This function will disable the SoftDevice. It will also update the internal state 00122 * of this module. 00123 */ 00124 uint32_t softdevice_handler_sd_disable(void); 00125 00126 00127 /**@brief Function for registering for System (SOC) events. 00128 * 00129 * @details The application should use this function to register for receiving System (SOC) 00130 * events from the SoftDevice. If the application does not call this function, then any 00131 * System (SOC) events that may be generated by the SoftDevice will NOT be fetched. Once 00132 * the application has registered for the events, it is not possible to possible to 00133 * cancel the registration. However, it is possible to register a different function for 00134 * handling the events at any point of time. 00135 * 00136 * @param[in] sys_evt_handler Function to be called for each received System (SOC) event. 00137 * 00138 * @retval NRF_SUCCESS Successful registration. 00139 * @retval NRF_ERROR_NULL Null pointer provided as input. 00140 */ 00141 uint32_t softdevice_sys_evt_handler_set(sys_evt_handler_t sys_evt_handler); 00142 00143 00144 // Functions for connecting the Stack Event Handler to the scheduler: 00145 /**@cond NO_DOXYGEN */ 00146 void intern_softdevice_events_execute(void); 00147 00148 00149 /**@endcond */ 00150 00151 #ifdef __cplusplus 00152 } 00153 #endif // #ifdef __cplusplus 00154 00155 #endif // SOFTDEVICE_HANDLER_H__ 00156 00157 /** @} */
Generated on Tue Jul 12 2022 19:22:47 by
