update s140 to 6.0.0
This commit is contained in:
parent
d362ad1c53
commit
9f6f48c586
430
softdevice/6.0.0/common/nrf_sdh.c
Normal file
430
softdevice/6.0.0/common/nrf_sdh.c
Normal file
@ -0,0 +1,430 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2017 - 2018, Nordic Semiconductor ASA
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||||
|
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||||
|
* such product, must reproduce the above copyright notice, this list of
|
||||||
|
* conditions and the following disclaimer in the documentation and/or other
|
||||||
|
* materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* 4. This software, with or without modification, must only be used with a
|
||||||
|
* Nordic Semiconductor ASA integrated circuit.
|
||||||
|
*
|
||||||
|
* 5. Any software provided in binary form under this license must not be reverse
|
||||||
|
* engineered, decompiled, modified and/or disassembled.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||||
|
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "sdk_common.h"
|
||||||
|
#if NRF_MODULE_ENABLED(NRF_SDH)
|
||||||
|
|
||||||
|
#include "nrf_sdh.h"
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include "nrf_sdm.h"
|
||||||
|
#include "nrf_nvic.h"
|
||||||
|
#include "sdk_config.h"
|
||||||
|
#include "app_error.h"
|
||||||
|
#include "app_util_platform.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define NRF_LOG_MODULE_NAME nrf_sdh
|
||||||
|
#if NRF_SDH_LOG_ENABLED
|
||||||
|
#define NRF_LOG_LEVEL NRF_SDH_LOG_LEVEL
|
||||||
|
#define NRF_LOG_INFO_COLOR NRF_SDH_INFO_COLOR
|
||||||
|
#define NRF_LOG_DEBUG_COLOR NRF_SDH_DEBUG_COLOR
|
||||||
|
#else
|
||||||
|
#define NRF_LOG_LEVEL 0
|
||||||
|
#endif // NRF_SDH_LOG_ENABLED
|
||||||
|
#include "nrf_log.h"
|
||||||
|
NRF_LOG_MODULE_REGISTER();
|
||||||
|
|
||||||
|
|
||||||
|
// Validate configuration options.
|
||||||
|
|
||||||
|
#if (NRF_SDH_DISPATCH_MODEL == NRF_SDH_DISPATCH_MODEL_APPSH)
|
||||||
|
#if (!APP_SCHEDULER_ENABLED)
|
||||||
|
#error app_scheduler is required when NRF_SDH_DISPATCH_MODEL is set to NRF_SDH_DISPATCH_MODEL_APPSH
|
||||||
|
#endif
|
||||||
|
#include "app_scheduler.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if ( (NRF_SDH_CLOCK_LF_SRC == NRF_CLOCK_LF_SRC_RC) \
|
||||||
|
&& (NRF_SDH_CLOCK_LF_ACCURACY != NRF_CLOCK_LF_ACCURACY_500_PPM))
|
||||||
|
#warning Please select NRF_CLOCK_LF_ACCURACY_500_PPM when using NRF_CLOCK_LF_SRC_RC
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// Create section "sdh_req_observers".
|
||||||
|
NRF_SECTION_SET_DEF(sdh_req_observers, nrf_sdh_req_observer_t, NRF_SDH_REQ_OBSERVER_PRIO_LEVELS);
|
||||||
|
|
||||||
|
// Create section "sdh_state_observers".
|
||||||
|
NRF_SECTION_SET_DEF(sdh_state_observers, nrf_sdh_state_observer_t, NRF_SDH_STATE_OBSERVER_PRIO_LEVELS);
|
||||||
|
|
||||||
|
// Create section "sdh_stack_observers".
|
||||||
|
NRF_SECTION_SET_DEF(sdh_stack_observers, nrf_sdh_stack_observer_t, NRF_SDH_STACK_OBSERVER_PRIO_LEVELS);
|
||||||
|
|
||||||
|
|
||||||
|
static bool m_nrf_sdh_enabled; /**< Variable to indicate whether the SoftDevice is enabled. */
|
||||||
|
static bool m_nrf_sdh_suspended; /**< Variable to indicate whether this module is suspended. */
|
||||||
|
static bool m_nrf_sdh_continue; /**< Variable to indicate whether enable/disable process was started. */
|
||||||
|
|
||||||
|
|
||||||
|
/**@brief Function for notifying request observers.
|
||||||
|
*
|
||||||
|
* @param[in] evt Type of request event.
|
||||||
|
*/
|
||||||
|
static ret_code_t sdh_request_observer_notify(nrf_sdh_req_evt_t req)
|
||||||
|
{
|
||||||
|
nrf_section_iter_t iter;
|
||||||
|
|
||||||
|
NRF_LOG_DEBUG("State request: 0x%08X", req);
|
||||||
|
|
||||||
|
for (nrf_section_iter_init(&iter, &sdh_req_observers);
|
||||||
|
nrf_section_iter_get(&iter) != NULL;
|
||||||
|
nrf_section_iter_next(&iter))
|
||||||
|
{
|
||||||
|
nrf_sdh_req_observer_t * p_observer;
|
||||||
|
nrf_sdh_req_evt_handler_t handler;
|
||||||
|
|
||||||
|
p_observer = (nrf_sdh_req_observer_t *) nrf_section_iter_get(&iter);
|
||||||
|
handler = p_observer->handler;
|
||||||
|
|
||||||
|
if (handler(req, p_observer->p_context))
|
||||||
|
{
|
||||||
|
NRF_LOG_DEBUG("Notify observer 0x%08X => ready", p_observer);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Process is stopped.
|
||||||
|
NRF_LOG_DEBUG("Notify observer 0x%08X => blocking", p_observer);
|
||||||
|
return NRF_ERROR_BUSY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NRF_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**@brief Function for stage request observers.
|
||||||
|
*
|
||||||
|
* @param[in] evt Type of stage event.
|
||||||
|
*/
|
||||||
|
static void sdh_state_observer_notify(nrf_sdh_state_evt_t evt)
|
||||||
|
{
|
||||||
|
nrf_section_iter_t iter;
|
||||||
|
|
||||||
|
NRF_LOG_DEBUG("State change: 0x%08X", evt);
|
||||||
|
|
||||||
|
for (nrf_section_iter_init(&iter, &sdh_state_observers);
|
||||||
|
nrf_section_iter_get(&iter) != NULL;
|
||||||
|
nrf_section_iter_next(&iter))
|
||||||
|
{
|
||||||
|
nrf_sdh_state_observer_t * p_observer;
|
||||||
|
nrf_sdh_state_evt_handler_t handler;
|
||||||
|
|
||||||
|
p_observer = (nrf_sdh_state_observer_t *) nrf_section_iter_get(&iter);
|
||||||
|
handler = p_observer->handler;
|
||||||
|
|
||||||
|
handler(evt, p_observer->p_context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void softdevices_evt_irq_enable(void)
|
||||||
|
{
|
||||||
|
#ifdef SOFTDEVICE_PRESENT
|
||||||
|
ret_code_t ret_code = sd_nvic_EnableIRQ((IRQn_Type)SD_EVT_IRQn);
|
||||||
|
APP_ERROR_CHECK(ret_code);
|
||||||
|
#else
|
||||||
|
// In case of serialization, NVIC must be accessed directly.
|
||||||
|
NVIC_EnableIRQ(SD_EVT_IRQn);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void softdevice_evt_irq_disable(void)
|
||||||
|
{
|
||||||
|
#ifdef SOFTDEVICE_PRESENT
|
||||||
|
ret_code_t ret_code = sd_nvic_DisableIRQ((IRQn_Type)SD_EVT_IRQn);
|
||||||
|
APP_ERROR_CHECK(ret_code);
|
||||||
|
#else
|
||||||
|
// In case of serialization, NVIC must be accessed directly.
|
||||||
|
NVIC_DisableIRQ(SD_EVT_IRQn);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef S140
|
||||||
|
static void swi_interrupt_priority_workaround(void)
|
||||||
|
{
|
||||||
|
// The priority of SoftDevice SWI SD_EVT_IRQn and RADIO_NOTIFICATION_IRQn in
|
||||||
|
// S132 v5.0.0, S112 v5.0.0, S212 v5.0.0 and S332 v5.0.0 is set to 6.
|
||||||
|
// Change it to APP_IRQ_PRIORITY_LOWEST (7) so that they do not preempt peripherals' interrupts.
|
||||||
|
|
||||||
|
#ifdef SOFTDEVICE_PRESENT
|
||||||
|
ret_code_t ret_code;
|
||||||
|
ret_code = sd_nvic_SetPriority(SD_EVT_IRQn, APP_IRQ_PRIORITY_LOWEST);
|
||||||
|
APP_ERROR_CHECK(ret_code);
|
||||||
|
ret_code = sd_nvic_SetPriority(RADIO_NOTIFICATION_IRQn, APP_IRQ_PRIORITY_LOWEST);
|
||||||
|
APP_ERROR_CHECK(ret_code);
|
||||||
|
#else
|
||||||
|
// In case of serialization, NVIC must be accessed directly.
|
||||||
|
NVIC_SetPriority(SD_EVT_IRQn, APP_IRQ_PRIORITY_LOWEST);
|
||||||
|
NVIC_SetPriority(RADIO_NOTIFICATION_IRQn, APP_IRQ_PRIORITY_LOWEST);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
ret_code_t nrf_sdh_enable_request(void)
|
||||||
|
{
|
||||||
|
ret_code_t ret_code;
|
||||||
|
|
||||||
|
if (m_nrf_sdh_enabled)
|
||||||
|
{
|
||||||
|
return NRF_ERROR_INVALID_STATE;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_nrf_sdh_continue = true;
|
||||||
|
|
||||||
|
// Notify observers about SoftDevice enable request.
|
||||||
|
if (sdh_request_observer_notify(NRF_SDH_EVT_ENABLE_REQUEST) == NRF_ERROR_BUSY)
|
||||||
|
{
|
||||||
|
// Enable process was stopped.
|
||||||
|
return NRF_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Notify observers about starting SoftDevice enable process.
|
||||||
|
sdh_state_observer_notify(NRF_SDH_EVT_STATE_ENABLE_PREPARE);
|
||||||
|
|
||||||
|
nrf_clock_lf_cfg_t const clock_lf_cfg =
|
||||||
|
{
|
||||||
|
.source = NRF_SDH_CLOCK_LF_SRC,
|
||||||
|
.rc_ctiv = NRF_SDH_CLOCK_LF_RC_CTIV,
|
||||||
|
.rc_temp_ctiv = NRF_SDH_CLOCK_LF_RC_TEMP_CTIV,
|
||||||
|
.accuracy = NRF_SDH_CLOCK_LF_ACCURACY
|
||||||
|
};
|
||||||
|
|
||||||
|
CRITICAL_REGION_ENTER();
|
||||||
|
#ifdef ANT_LICENSE_KEY
|
||||||
|
ret_code = sd_softdevice_enable(&clock_lf_cfg, app_error_fault_handler, ANT_LICENSE_KEY);
|
||||||
|
#else
|
||||||
|
ret_code = sd_softdevice_enable(&clock_lf_cfg, app_error_fault_handler);
|
||||||
|
#endif
|
||||||
|
m_nrf_sdh_enabled = (ret_code == NRF_SUCCESS);
|
||||||
|
CRITICAL_REGION_EXIT();
|
||||||
|
|
||||||
|
if (ret_code != NRF_SUCCESS)
|
||||||
|
{
|
||||||
|
return ret_code;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_nrf_sdh_continue = false;
|
||||||
|
m_nrf_sdh_suspended = false;
|
||||||
|
|
||||||
|
#ifndef S140
|
||||||
|
// Set the interrupt priority after enabling the SoftDevice, since
|
||||||
|
// sd_softdevice_enable() sets the SoftDevice interrupt priority.
|
||||||
|
swi_interrupt_priority_workaround();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Enable event interrupt.
|
||||||
|
// Interrupt priority has already been set by the stack.
|
||||||
|
softdevices_evt_irq_enable();
|
||||||
|
|
||||||
|
// Notify observers about a finished SoftDevice enable process.
|
||||||
|
sdh_state_observer_notify(NRF_SDH_EVT_STATE_ENABLED);
|
||||||
|
|
||||||
|
return NRF_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ret_code_t nrf_sdh_disable_request(void)
|
||||||
|
{
|
||||||
|
ret_code_t ret_code;
|
||||||
|
|
||||||
|
if (!m_nrf_sdh_enabled)
|
||||||
|
{
|
||||||
|
return NRF_ERROR_INVALID_STATE;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_nrf_sdh_continue = true;
|
||||||
|
|
||||||
|
// Notify observers about SoftDevice disable request.
|
||||||
|
if (sdh_request_observer_notify(NRF_SDH_EVT_DISABLE_REQUEST) == NRF_ERROR_BUSY)
|
||||||
|
{
|
||||||
|
// Disable process was stopped.
|
||||||
|
return NRF_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Notify observers about starting SoftDevice disable process.
|
||||||
|
sdh_state_observer_notify(NRF_SDH_EVT_STATE_DISABLE_PREPARE);
|
||||||
|
|
||||||
|
CRITICAL_REGION_ENTER();
|
||||||
|
ret_code = sd_softdevice_disable();
|
||||||
|
m_nrf_sdh_enabled = false;
|
||||||
|
CRITICAL_REGION_EXIT();
|
||||||
|
|
||||||
|
if (ret_code != NRF_SUCCESS)
|
||||||
|
{
|
||||||
|
return ret_code;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_nrf_sdh_continue = false;
|
||||||
|
|
||||||
|
softdevice_evt_irq_disable();
|
||||||
|
|
||||||
|
// Notify observers about a finished SoftDevice enable process.
|
||||||
|
sdh_state_observer_notify(NRF_SDH_EVT_STATE_DISABLED);
|
||||||
|
|
||||||
|
return NRF_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ret_code_t nrf_sdh_request_continue(void)
|
||||||
|
{
|
||||||
|
if (!m_nrf_sdh_continue)
|
||||||
|
{
|
||||||
|
return NRF_ERROR_INVALID_STATE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_nrf_sdh_enabled)
|
||||||
|
{
|
||||||
|
return nrf_sdh_disable_request();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return nrf_sdh_enable_request();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool nrf_sdh_is_enabled(void)
|
||||||
|
{
|
||||||
|
return m_nrf_sdh_enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void nrf_sdh_suspend(void)
|
||||||
|
{
|
||||||
|
if (!m_nrf_sdh_enabled)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
softdevice_evt_irq_disable();
|
||||||
|
m_nrf_sdh_suspended = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void nrf_sdh_resume(void)
|
||||||
|
{
|
||||||
|
if ((!m_nrf_sdh_suspended) || (!m_nrf_sdh_enabled))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Force calling ISR again to make sure that events not previously pulled have been processed.
|
||||||
|
#ifdef SOFTDEVICE_PRESENT
|
||||||
|
ret_code_t ret_code = sd_nvic_SetPendingIRQ((IRQn_Type)SD_EVT_IRQn);
|
||||||
|
APP_ERROR_CHECK(ret_code);
|
||||||
|
#else
|
||||||
|
NVIC_SetPendingIRQ((IRQn_Type)SD_EVT_IRQn);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
softdevices_evt_irq_enable();
|
||||||
|
|
||||||
|
m_nrf_sdh_suspended = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool nrf_sdh_is_suspended(void)
|
||||||
|
{
|
||||||
|
return (!m_nrf_sdh_enabled) || (m_nrf_sdh_suspended);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void nrf_sdh_evts_poll(void)
|
||||||
|
{
|
||||||
|
nrf_section_iter_t iter;
|
||||||
|
|
||||||
|
// Notify observers about pending SoftDevice event.
|
||||||
|
for (nrf_section_iter_init(&iter, &sdh_stack_observers);
|
||||||
|
nrf_section_iter_get(&iter) != NULL;
|
||||||
|
nrf_section_iter_next(&iter))
|
||||||
|
{
|
||||||
|
nrf_sdh_stack_observer_t * p_observer;
|
||||||
|
nrf_sdh_stack_evt_handler_t handler;
|
||||||
|
|
||||||
|
p_observer = (nrf_sdh_stack_observer_t *) nrf_section_iter_get(&iter);
|
||||||
|
handler = p_observer->handler;
|
||||||
|
|
||||||
|
handler(p_observer->p_context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if (NRF_SDH_DISPATCH_MODEL == NRF_SDH_DISPATCH_MODEL_INTERRUPT)
|
||||||
|
|
||||||
|
void SD_EVT_IRQHandler(void)
|
||||||
|
{
|
||||||
|
nrf_sdh_evts_poll();
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif (NRF_SDH_DISPATCH_MODEL == NRF_SDH_DISPATCH_MODEL_APPSH)
|
||||||
|
|
||||||
|
/**@brief Function for polling SoftDevice events.
|
||||||
|
*
|
||||||
|
* @note This function is compatible with @ref app_sched_event_handler_t.
|
||||||
|
*
|
||||||
|
* @param[in] p_event_data Pointer to the event data.
|
||||||
|
* @param[in] event_size Size of the event data.
|
||||||
|
*/
|
||||||
|
static void appsh_events_poll(void * p_event_data, uint16_t event_size)
|
||||||
|
{
|
||||||
|
UNUSED_PARAMETER(p_event_data);
|
||||||
|
UNUSED_PARAMETER(event_size);
|
||||||
|
|
||||||
|
nrf_sdh_evts_poll();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SD_EVT_IRQHandler(void)
|
||||||
|
{
|
||||||
|
ret_code_t ret_code = app_sched_event_put(NULL, 0, appsh_events_poll);
|
||||||
|
APP_ERROR_CHECK(ret_code);
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif (NRF_SDH_DISPATCH_MODEL == NRF_SDH_DISPATCH_MODEL_POLLING)
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#error "Unknown SoftDevice handler dispatch model."
|
||||||
|
|
||||||
|
#endif // NRF_SDH_DISPATCH_MODEL
|
||||||
|
|
||||||
|
#endif // NRF_MODULE_ENABLED(NRF_SDH)
|
305
softdevice/6.0.0/common/nrf_sdh.h
Normal file
305
softdevice/6.0.0/common/nrf_sdh.h
Normal file
@ -0,0 +1,305 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2017 - 2018, Nordic Semiconductor ASA
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||||
|
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||||
|
* such product, must reproduce the above copyright notice, this list of
|
||||||
|
* conditions and the following disclaimer in the documentation and/or other
|
||||||
|
* materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* 4. This software, with or without modification, must only be used with a
|
||||||
|
* Nordic Semiconductor ASA integrated circuit.
|
||||||
|
*
|
||||||
|
* 5. Any software provided in binary form under this license must not be reverse
|
||||||
|
* engineered, decompiled, modified and/or disassembled.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||||
|
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @file
|
||||||
|
*
|
||||||
|
* @defgroup nrf_sdh SoftDevice Handler
|
||||||
|
* @{
|
||||||
|
* @ingroup app_common
|
||||||
|
* @brief API for initializing and disabling the SoftDevice.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef NRF_SDH_H__
|
||||||
|
#define NRF_SDH_H__
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include "sdk_config.h"
|
||||||
|
#include "sdk_errors.h"
|
||||||
|
#include "nrf_section_iter.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name Softdevice Handler dispatch models
|
||||||
|
* @{
|
||||||
|
* @ingroup nrf_sdh */
|
||||||
|
|
||||||
|
/**@brief SoftDevice events are passed to the application from the interrupt context. */
|
||||||
|
#define NRF_SDH_DISPATCH_MODEL_INTERRUPT 0
|
||||||
|
|
||||||
|
/**@brief SoftDevice events are passed to the application using @ref app_scheduler.
|
||||||
|
*
|
||||||
|
* @note @ref app_scheduler must be initialized before enabling the SoftDevice handler.
|
||||||
|
*/
|
||||||
|
#define NRF_SDH_DISPATCH_MODEL_APPSH 1
|
||||||
|
|
||||||
|
/**@brief SoftDevice events are polled manually using @ref nrf_sdh_evts_poll().
|
||||||
|
*
|
||||||
|
* @note In this mode, a user application can also implement SD_EVT_IRQHandler() to receive a
|
||||||
|
* notification about incoming events.
|
||||||
|
*/
|
||||||
|
#define NRF_SDH_DISPATCH_MODEL_POLLING 2
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name SoftDevice Handler state change requests
|
||||||
|
* @{
|
||||||
|
* @ingroup nrf_sdh */
|
||||||
|
|
||||||
|
/**@brief SoftDevice Handler state requests. */
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
NRF_SDH_EVT_ENABLE_REQUEST, //!< Request to enable the SoftDevice.
|
||||||
|
NRF_SDH_EVT_DISABLE_REQUEST, //!< Request to disable the SoftDevice.
|
||||||
|
} nrf_sdh_req_evt_t;
|
||||||
|
|
||||||
|
/**@brief SoftDevice Handler state request handler.
|
||||||
|
*
|
||||||
|
* @retval true If ready for the SoftDevice to change state.
|
||||||
|
* @retval false If not ready for the SoftDevice to change state.
|
||||||
|
* If false is returned, the state change is aborted.
|
||||||
|
*/
|
||||||
|
typedef bool (*nrf_sdh_req_evt_handler_t)(nrf_sdh_req_evt_t request, void * p_context);
|
||||||
|
|
||||||
|
/**@brief SoftDevice Handler state request observer. */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
nrf_sdh_req_evt_handler_t handler; //!< Request handler.
|
||||||
|
void * p_context; //!< A parameter to the handler function.
|
||||||
|
} const nrf_sdh_req_observer_t;
|
||||||
|
|
||||||
|
/**@brief Macro for registering a SoftDevice state change request observer.
|
||||||
|
*
|
||||||
|
* An observer of SoftDevice state change requests receives requests to change the state of the
|
||||||
|
* SoftDevice from enabled to disabled and vice versa. These requests may or may not be acknowledged
|
||||||
|
* by the observer, depending on the value returned by its request handler function. Thus, a
|
||||||
|
* request observer has the capability to defer the change of state of the SoftDevice. If it does
|
||||||
|
* so, it has the responsibility to call @ref nrf_sdh_request_continue when it is ready to let the
|
||||||
|
* SoftDevice change its state. If such capability is not necessary and you only need to be informed
|
||||||
|
* about changes of the SoftDevice state, use the @ref NRF_SDH_STATE_OBSERVER macro instead.
|
||||||
|
*
|
||||||
|
* @note This macro places the observer in a section named "sdh_req_observers".
|
||||||
|
*
|
||||||
|
* @param[in] _observer Name of the observer.
|
||||||
|
* @param[in] _prio Priority of the observer's event handler.
|
||||||
|
* The smaller the number, the higher the priority.
|
||||||
|
* @hideinitializer
|
||||||
|
*/
|
||||||
|
#define NRF_SDH_REQUEST_OBSERVER(_observer, _prio) \
|
||||||
|
STATIC_ASSERT(NRF_SDH_ENABLED, "NRF_SDH_ENABLED not set!"); \
|
||||||
|
STATIC_ASSERT(_prio < NRF_SDH_REQ_OBSERVER_PRIO_LEVELS, "Priority level unavailable."); \
|
||||||
|
/*lint -esym(528,*_observer) -esym(529,*_observer) : Symbol not referenced. */ \
|
||||||
|
NRF_SECTION_SET_ITEM_REGISTER(sdh_req_observers, _prio, nrf_sdh_req_observer_t const _observer)
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name SoftDevice Handler state events
|
||||||
|
* @{
|
||||||
|
* @ingroup nrf_sdh */
|
||||||
|
|
||||||
|
/**@brief SoftDevice Handler state events. */
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
NRF_SDH_EVT_STATE_ENABLE_PREPARE, //!< SoftDevice is going to be enabled.
|
||||||
|
NRF_SDH_EVT_STATE_ENABLED, //!< SoftDevice is enabled.
|
||||||
|
NRF_SDH_EVT_STATE_DISABLE_PREPARE, //!< SoftDevice is going to be disabled.
|
||||||
|
NRF_SDH_EVT_STATE_DISABLED, //!< SoftDevice is disabled.
|
||||||
|
} nrf_sdh_state_evt_t;
|
||||||
|
|
||||||
|
/**@brief SoftDevice Handler state event handler. */
|
||||||
|
typedef void (*nrf_sdh_state_evt_handler_t)(nrf_sdh_state_evt_t state, void * p_context);
|
||||||
|
|
||||||
|
/**@brief SoftDevice Handler state observer. */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
nrf_sdh_state_evt_handler_t handler; //!< State event handler.
|
||||||
|
void * p_context; //!< A parameter to the event handler.
|
||||||
|
} const nrf_sdh_state_observer_t;
|
||||||
|
|
||||||
|
/**@brief Macro for registering a SoftDevice state observer.
|
||||||
|
*
|
||||||
|
* A SoftDevice state observer receives events when the SoftDevice state has changed or is
|
||||||
|
* about to change. These events are only meant to inform the state observer, which, contrary
|
||||||
|
* to a state change request observer, does not have the capability to defer the change of state.
|
||||||
|
* If such capability is required, use the @ref NRF_SDH_REQUEST_OBSERVER macro instead.
|
||||||
|
*
|
||||||
|
* This macro places the observer in a section named "sdh_state_observers".
|
||||||
|
*
|
||||||
|
* @param[in] _observer Name of the observer.
|
||||||
|
* @param[in] _prio Priority of the observer's event handler.
|
||||||
|
* The smaller the number, the higher the priority.
|
||||||
|
* @hideinitializer
|
||||||
|
*/
|
||||||
|
#define NRF_SDH_STATE_OBSERVER(_observer, _prio) \
|
||||||
|
STATIC_ASSERT(NRF_SDH_ENABLED, "NRF_SDH_ENABLED not set!"); \
|
||||||
|
STATIC_ASSERT(_prio < NRF_SDH_STATE_OBSERVER_PRIO_LEVELS, "Priority level unavailable."); \
|
||||||
|
/*lint -esym(528,*_observer) -esym(529,*_observer) : Symbol not referenced. */ \
|
||||||
|
NRF_SECTION_SET_ITEM_REGISTER(sdh_state_observers, _prio, static nrf_sdh_state_observer_t const _observer)
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name SoftDevice stack events
|
||||||
|
* @{
|
||||||
|
* @ingroup nrf_sdh */
|
||||||
|
|
||||||
|
/**@brief SoftDevice stack event handler. */
|
||||||
|
typedef void (*nrf_sdh_stack_evt_handler_t)(void * p_evt);
|
||||||
|
|
||||||
|
/**@brief SoftDevice stack event observer. */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
nrf_sdh_stack_evt_handler_t handler; //!< SoftDevice event handler.
|
||||||
|
void * p_context; //!< A parameter to the event handler.
|
||||||
|
} const nrf_sdh_stack_observer_t;
|
||||||
|
|
||||||
|
/**@brief Macro for registering a SoftDevice stack events observer.
|
||||||
|
*
|
||||||
|
* A SoftDevice stack event observer receives all events from the SoftDevice. These events can be
|
||||||
|
* either BLE, ANT, or SoC events. If you need to receive BLE, ANT, or SoC events separately, use the
|
||||||
|
* @ref NRF_SDH_BLE_OBSERVER, @ref NRF_SDH_ANT_OBSERVER, or @ref NRF_SDH_SOC_OBSERVER macros
|
||||||
|
* respectively.
|
||||||
|
*
|
||||||
|
* @note This macro places the observer in a section named "sdh_stack_observers".
|
||||||
|
*
|
||||||
|
* @param[in] _observer Name of the observer.
|
||||||
|
* @param[in] _prio Priority of the observer's event handler.
|
||||||
|
* The smaller the number, the higher the priority.
|
||||||
|
** @hideinitializer
|
||||||
|
*/
|
||||||
|
#define NRF_SDH_STACK_OBSERVER(_observer, _prio) \
|
||||||
|
STATIC_ASSERT(NRF_SDH_ENABLED, "NRF_SDH_ENABLED not set!"); \
|
||||||
|
STATIC_ASSERT(_prio < NRF_SDH_STACK_OBSERVER_PRIO_LEVELS, "Priority level unavailable."); \
|
||||||
|
/*lint -esym(528,*_observer) -esym(529,*_observer) : Symbol not referenced. */ \
|
||||||
|
NRF_SECTION_SET_ITEM_REGISTER(sdh_stack_observers, _prio, static nrf_sdh_stack_observer_t const _observer)
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
|
||||||
|
/**@brief Function for requesting to enable the SoftDevice.
|
||||||
|
*
|
||||||
|
* This function issues a @ref NRF_SDH_EVT_ENABLE_REQUEST request to all observers that
|
||||||
|
* were registered using the @ref NRF_SDH_REQUEST_OBSERVER macro. The observers may or
|
||||||
|
* may not acknowledge the request. If all observers acknowledge the request, the
|
||||||
|
* SoftDevice will be enabled. Otherwise, the process will be stopped and the observers
|
||||||
|
* that did not acknowledge have the responsibility to restart it by calling
|
||||||
|
* @ref nrf_sdh_request_continue when they are ready for the SoftDevice to change state.
|
||||||
|
*
|
||||||
|
* @retval NRF_SUCCESS The process is started.
|
||||||
|
* @retval NRF_ERROR_INVALID_STATE The SoftDevice is already enabled.
|
||||||
|
*/
|
||||||
|
ret_code_t nrf_sdh_enable_request(void);
|
||||||
|
|
||||||
|
|
||||||
|
/**@brief Function for requesting to disable the SoftDevice.
|
||||||
|
*
|
||||||
|
* This function issues a @ref NRF_SDH_EVT_DISABLE_REQUEST request to all observers that
|
||||||
|
* were registered using the @ref NRF_SDH_REQUEST_OBSERVER macro. The observers may or
|
||||||
|
* may not acknowledge the request. If all observers acknowledge the request, the
|
||||||
|
* SoftDevice will be disabled. Otherwise, the process will be stopped and the observers
|
||||||
|
* that did not acknowledge have the responsibility to restart it by calling
|
||||||
|
* @ref nrf_sdh_request_continue when they are ready for the SoftDevice to change state.
|
||||||
|
*
|
||||||
|
* @retval NRF_SUCCESS The process is started.
|
||||||
|
* @retval NRF_ERROR_INVALID_STATE The SoftDevice is already disabled.
|
||||||
|
*/
|
||||||
|
ret_code_t nrf_sdh_disable_request(void);
|
||||||
|
|
||||||
|
|
||||||
|
/**@brief Function for restarting the SoftDevice Enable/Disable process.
|
||||||
|
*
|
||||||
|
* Modules which did not acknowledge a @ref NRF_SDH_EVT_ENABLE_REQUEST or
|
||||||
|
* @ref NRF_SDH_EVT_DISABLE_REQUEST request must call this function to restart the
|
||||||
|
* SoftDevice state change process.
|
||||||
|
*
|
||||||
|
* @retval NRF_SUCCESS The process is restarted.
|
||||||
|
* @retval NRF_ERROR_INVALID_STATE No state change request was pending.
|
||||||
|
*/
|
||||||
|
ret_code_t nrf_sdh_request_continue(void);
|
||||||
|
|
||||||
|
|
||||||
|
/**@brief Function for retrieving the SoftDevice state.
|
||||||
|
*
|
||||||
|
* @retval true If the SoftDevice is enabled.
|
||||||
|
* @retval false If the SoftDevice is disabled.
|
||||||
|
*/
|
||||||
|
bool nrf_sdh_is_enabled(void);
|
||||||
|
|
||||||
|
|
||||||
|
/**@brief Function for stopping the incoming stack events.
|
||||||
|
*
|
||||||
|
* This function disables the SoftDevice interrupt. To resume polling for events,
|
||||||
|
* call @ref nrf_sdh_resume.
|
||||||
|
*/
|
||||||
|
void nrf_sdh_suspend(void);
|
||||||
|
|
||||||
|
|
||||||
|
/**@brief Function for resuming polling incoming events from the SoftDevice. */
|
||||||
|
void nrf_sdh_resume(void);
|
||||||
|
|
||||||
|
|
||||||
|
/**@brief Function for retrieving the information about the module state.
|
||||||
|
*
|
||||||
|
* @retval true The SoftDevice handler is paused, and it will not fetch events from the stack.
|
||||||
|
* @retval false The SoftDevice handler is running, and it will fetch and dispatch events from
|
||||||
|
* the stack to the registered stack observers.
|
||||||
|
*/
|
||||||
|
bool nrf_sdh_is_suspended(void);
|
||||||
|
|
||||||
|
|
||||||
|
/**@brief Function for polling stack events from the SoftDevice.
|
||||||
|
*
|
||||||
|
* The events are passed to the application using the registered event handlers.
|
||||||
|
*
|
||||||
|
* @note @ref NRF_SDH_DISPATCH_MODEL_POLLING must be selected to use this function.
|
||||||
|
*/
|
||||||
|
void nrf_sdh_evts_poll(void);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // NRF_SDH_H__
|
||||||
|
|
||||||
|
/** @} */
|
324
softdevice/6.0.0/common/nrf_sdh_ble.c
Normal file
324
softdevice/6.0.0/common/nrf_sdh_ble.c
Normal file
@ -0,0 +1,324 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2017 - 2018, Nordic Semiconductor ASA
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||||
|
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||||
|
* such product, must reproduce the above copyright notice, this list of
|
||||||
|
* conditions and the following disclaimer in the documentation and/or other
|
||||||
|
* materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* 4. This software, with or without modification, must only be used with a
|
||||||
|
* Nordic Semiconductor ASA integrated circuit.
|
||||||
|
*
|
||||||
|
* 5. Any software provided in binary form under this license must not be reverse
|
||||||
|
* engineered, decompiled, modified and/or disassembled.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||||
|
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "sdk_common.h"
|
||||||
|
#if NRF_MODULE_ENABLED(NRF_SDH_BLE)
|
||||||
|
|
||||||
|
#include "nrf_sdh_ble.h"
|
||||||
|
|
||||||
|
#include "nrf_sdh.h"
|
||||||
|
#include "app_error.h"
|
||||||
|
#include "nrf_strerror.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define NRF_LOG_MODULE_NAME nrf_sdh_ble
|
||||||
|
#if NRF_SDH_BLE_LOG_ENABLED
|
||||||
|
#define NRF_LOG_LEVEL NRF_SDH_BLE_LOG_LEVEL
|
||||||
|
#define NRF_LOG_INFO_COLOR NRF_SDH_BLE_INFO_COLOR
|
||||||
|
#define NRF_LOG_DEBUG_COLOR NRF_SDH_BLE_DEBUG_COLOR
|
||||||
|
#else
|
||||||
|
#define NRF_LOG_LEVEL 0
|
||||||
|
#endif // NRF_SDH_BLE_LOG_ENABLED
|
||||||
|
#include "nrf_log.h"
|
||||||
|
NRF_LOG_MODULE_REGISTER();
|
||||||
|
|
||||||
|
|
||||||
|
// Create section set "sdh_ble_observers".
|
||||||
|
NRF_SECTION_SET_DEF(sdh_ble_observers, nrf_sdh_ble_evt_observer_t, NRF_SDH_BLE_OBSERVER_PRIO_LEVELS);
|
||||||
|
|
||||||
|
|
||||||
|
//lint -save -e10 -e19 -e40 -e27 Illegal character (0x24)
|
||||||
|
#if defined(__CC_ARM)
|
||||||
|
extern uint32_t Image$$RW_IRAM1$$Base;
|
||||||
|
uint32_t const * const m_ram_start = &Image$$RW_IRAM1$$Base;
|
||||||
|
#elif defined(__ICCARM__)
|
||||||
|
extern uint32_t __ICFEDIT_region_RAM_start__;
|
||||||
|
uint32_t const * const m_ram_start = &__ICFEDIT_region_RAM_start__;
|
||||||
|
#elif defined(__SES_ARM)
|
||||||
|
extern uint32_t __app_ram_start__;
|
||||||
|
uint32_t const * const m_ram_start = &__app_ram_start__;
|
||||||
|
#elif defined(__GNUC__)
|
||||||
|
extern uint32_t __data_start__;
|
||||||
|
uint32_t const * const m_ram_start = &__data_start__;
|
||||||
|
#endif
|
||||||
|
//lint -restore
|
||||||
|
|
||||||
|
#define RAM_START 0x20000000
|
||||||
|
#define APP_RAM_START (uint32_t)m_ram_start
|
||||||
|
|
||||||
|
|
||||||
|
static bool m_stack_is_enabled;
|
||||||
|
|
||||||
|
|
||||||
|
ret_code_t nrf_sdh_ble_app_ram_start_get(uint32_t * p_app_ram_start)
|
||||||
|
{
|
||||||
|
if (p_app_ram_start == NULL)
|
||||||
|
{
|
||||||
|
return NRF_ERROR_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
*p_app_ram_start = APP_RAM_START;
|
||||||
|
|
||||||
|
return NRF_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ret_code_t nrf_sdh_ble_default_cfg_set(uint8_t conn_cfg_tag, uint32_t * p_ram_start)
|
||||||
|
{
|
||||||
|
uint32_t ret_code;
|
||||||
|
|
||||||
|
ret_code = nrf_sdh_ble_app_ram_start_get(p_ram_start);
|
||||||
|
if (ret_code != NRF_SUCCESS)
|
||||||
|
{
|
||||||
|
return ret_code;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef S112
|
||||||
|
STATIC_ASSERT(NRF_SDH_BLE_CENTRAL_LINK_COUNT == 0, "When using s112, NRF_SDH_BLE_CENTRAL_LINK_COUNT must be 0.");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Overwrite some of the default settings of the BLE stack.
|
||||||
|
// If any of the calls to sd_ble_cfg_set() fail, log the error but carry on so that
|
||||||
|
// wrong RAM settings can be caught by nrf_sdh_ble_enable() and a meaningful error
|
||||||
|
// message will be printed to the user suggesting the correct value.
|
||||||
|
ble_cfg_t ble_cfg;
|
||||||
|
|
||||||
|
#if (NRF_SDH_BLE_TOTAL_LINK_COUNT != 0)
|
||||||
|
// Configure the connection count.
|
||||||
|
memset(&ble_cfg, 0, sizeof(ble_cfg));
|
||||||
|
ble_cfg.conn_cfg.conn_cfg_tag = conn_cfg_tag;
|
||||||
|
ble_cfg.conn_cfg.params.gap_conn_cfg.conn_count = NRF_SDH_BLE_TOTAL_LINK_COUNT;
|
||||||
|
ble_cfg.conn_cfg.params.gap_conn_cfg.event_length = NRF_SDH_BLE_GAP_EVENT_LENGTH;
|
||||||
|
|
||||||
|
ret_code = sd_ble_cfg_set(BLE_CONN_CFG_GAP, &ble_cfg, *p_ram_start);
|
||||||
|
if (ret_code != NRF_SUCCESS)
|
||||||
|
{
|
||||||
|
NRF_LOG_ERROR("sd_ble_cfg_set() returned %s when attempting to set BLE_CONN_CFG_GAP.",
|
||||||
|
nrf_strerror_get(ret_code));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Configure the connection roles.
|
||||||
|
memset(&ble_cfg, 0, sizeof(ble_cfg));
|
||||||
|
ble_cfg.gap_cfg.role_count_cfg.periph_role_count = NRF_SDH_BLE_PERIPHERAL_LINK_COUNT;
|
||||||
|
#ifndef S112
|
||||||
|
ble_cfg.gap_cfg.role_count_cfg.central_role_count = NRF_SDH_BLE_CENTRAL_LINK_COUNT;
|
||||||
|
ble_cfg.gap_cfg.role_count_cfg.central_sec_count = MIN(NRF_SDH_BLE_CENTRAL_LINK_COUNT,
|
||||||
|
BLE_GAP_ROLE_COUNT_CENTRAL_SEC_DEFAULT);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ret_code = sd_ble_cfg_set(BLE_GAP_CFG_ROLE_COUNT, &ble_cfg, *p_ram_start);
|
||||||
|
if (ret_code != NRF_SUCCESS)
|
||||||
|
{
|
||||||
|
NRF_LOG_ERROR("sd_ble_cfg_set() returned %s when attempting to set BLE_GAP_CFG_ROLE_COUNT.",
|
||||||
|
nrf_strerror_get(ret_code));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Configure the maximum ATT MTU.
|
||||||
|
#if (NRF_SDH_BLE_GATT_MAX_MTU_SIZE != 23)
|
||||||
|
memset(&ble_cfg, 0x00, sizeof(ble_cfg));
|
||||||
|
ble_cfg.conn_cfg.conn_cfg_tag = conn_cfg_tag;
|
||||||
|
ble_cfg.conn_cfg.params.gatt_conn_cfg.att_mtu = NRF_SDH_BLE_GATT_MAX_MTU_SIZE;
|
||||||
|
|
||||||
|
ret_code = sd_ble_cfg_set(BLE_CONN_CFG_GATT, &ble_cfg, *p_ram_start);
|
||||||
|
if (ret_code != NRF_SUCCESS)
|
||||||
|
{
|
||||||
|
NRF_LOG_ERROR("sd_ble_cfg_set() returned %s when attempting to set BLE_CONN_CFG_GATT.",
|
||||||
|
nrf_strerror_get(ret_code));
|
||||||
|
}
|
||||||
|
#endif // NRF_SDH_BLE_GATT_MAX_MTU_SIZE != 23
|
||||||
|
#endif // NRF_SDH_BLE_TOTAL_LINK_COUNT != 0
|
||||||
|
|
||||||
|
// Configure number of custom UUIDS.
|
||||||
|
memset(&ble_cfg, 0, sizeof(ble_cfg));
|
||||||
|
ble_cfg.common_cfg.vs_uuid_cfg.vs_uuid_count = NRF_SDH_BLE_VS_UUID_COUNT;
|
||||||
|
|
||||||
|
ret_code = sd_ble_cfg_set(BLE_COMMON_CFG_VS_UUID, &ble_cfg, *p_ram_start);
|
||||||
|
if (ret_code != NRF_SUCCESS)
|
||||||
|
{
|
||||||
|
NRF_LOG_ERROR("sd_ble_cfg_set() returned %s when attempting to set BLE_COMMON_CFG_VS_UUID.",
|
||||||
|
nrf_strerror_get(ret_code));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Configure the GATTS attribute table.
|
||||||
|
memset(&ble_cfg, 0x00, sizeof(ble_cfg));
|
||||||
|
ble_cfg.gatts_cfg.attr_tab_size.attr_tab_size = NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE;
|
||||||
|
|
||||||
|
ret_code = sd_ble_cfg_set(BLE_GATTS_CFG_ATTR_TAB_SIZE, &ble_cfg, *p_ram_start);
|
||||||
|
if (ret_code != NRF_SUCCESS)
|
||||||
|
{
|
||||||
|
NRF_LOG_ERROR("sd_ble_cfg_set() returned %s when attempting to set BLE_GATTS_CFG_ATTR_TAB_SIZE.",
|
||||||
|
nrf_strerror_get(ret_code));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Configure Service Changed characteristic.
|
||||||
|
memset(&ble_cfg, 0x00, sizeof(ble_cfg));
|
||||||
|
ble_cfg.gatts_cfg.service_changed.service_changed = NRF_SDH_BLE_SERVICE_CHANGED;
|
||||||
|
|
||||||
|
ret_code = sd_ble_cfg_set(BLE_GATTS_CFG_SERVICE_CHANGED, &ble_cfg, *p_ram_start);
|
||||||
|
if (ret_code != NRF_SUCCESS)
|
||||||
|
{
|
||||||
|
NRF_LOG_ERROR("sd_ble_cfg_set() returned %s when attempting to set BLE_GATTS_CFG_SERVICE_CHANGED.",
|
||||||
|
nrf_strerror_get(ret_code));
|
||||||
|
}
|
||||||
|
|
||||||
|
return NRF_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**@brief Function for finding the end address of the RAM. */
|
||||||
|
static uint32_t ram_end_address_get(void)
|
||||||
|
{
|
||||||
|
uint32_t ram_total_size;
|
||||||
|
|
||||||
|
#ifdef NRF51
|
||||||
|
uint32_t block_size = NRF_FICR->SIZERAMBLOCKS;
|
||||||
|
ram_total_size = block_size * NRF_FICR->NUMRAMBLOCK;
|
||||||
|
#else
|
||||||
|
ram_total_size = NRF_FICR->INFO.RAM * 1024;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return RAM_START + ram_total_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ret_code_t nrf_sdh_ble_enable(uint32_t * const p_app_ram_start)
|
||||||
|
{
|
||||||
|
// Start of RAM, obtained from linker symbol.
|
||||||
|
uint32_t const app_ram_start_link = *p_app_ram_start;
|
||||||
|
|
||||||
|
ret_code_t ret_code = sd_ble_enable(p_app_ram_start);
|
||||||
|
if (*p_app_ram_start > app_ram_start_link)
|
||||||
|
{
|
||||||
|
NRF_LOG_WARNING("Insufficient RAM allocated for the SoftDevice.");
|
||||||
|
|
||||||
|
NRF_LOG_WARNING("Change the RAM start location from 0x%x to 0x%x.",
|
||||||
|
app_ram_start_link, *p_app_ram_start);
|
||||||
|
NRF_LOG_WARNING("Maximum RAM size for application is 0x%x.",
|
||||||
|
ram_end_address_get() - (*p_app_ram_start));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
NRF_LOG_DEBUG("RAM starts at 0x%x", app_ram_start_link);
|
||||||
|
if (*p_app_ram_start != app_ram_start_link)
|
||||||
|
{
|
||||||
|
NRF_LOG_DEBUG("RAM start location can be adjusted to 0x%x.", *p_app_ram_start);
|
||||||
|
|
||||||
|
NRF_LOG_DEBUG("RAM size for application can be adjusted to 0x%x.",
|
||||||
|
ram_end_address_get() - (*p_app_ram_start));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ret_code == NRF_SUCCESS)
|
||||||
|
{
|
||||||
|
m_stack_is_enabled = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
NRF_LOG_ERROR("sd_ble_enable() returned %s.", nrf_strerror_get(ret_code));
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret_code;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**@brief Function for polling BLE events.
|
||||||
|
*
|
||||||
|
* @param[in] p_context Context of the observer.
|
||||||
|
*/
|
||||||
|
static void nrf_sdh_ble_evts_poll(void * p_context)
|
||||||
|
{
|
||||||
|
UNUSED_VARIABLE(p_context);
|
||||||
|
|
||||||
|
ret_code_t ret_code;
|
||||||
|
|
||||||
|
if (!m_stack_is_enabled)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
/*lint -save -e(587) */
|
||||||
|
__ALIGN(4) uint8_t evt_buffer[NRF_SDH_BLE_EVT_BUF_SIZE];
|
||||||
|
/*lint -restore */
|
||||||
|
|
||||||
|
ble_evt_t * p_ble_evt;
|
||||||
|
uint16_t evt_len = (uint16_t)sizeof(evt_buffer);
|
||||||
|
|
||||||
|
ret_code = sd_ble_evt_get(evt_buffer, &evt_len);
|
||||||
|
if (ret_code != NRF_SUCCESS)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
p_ble_evt = (ble_evt_t *)evt_buffer;
|
||||||
|
|
||||||
|
NRF_LOG_DEBUG("BLE event: 0x%x.", p_ble_evt->header.evt_id);
|
||||||
|
|
||||||
|
// Forward the event to BLE observers.
|
||||||
|
nrf_section_iter_t iter;
|
||||||
|
for (nrf_section_iter_init(&iter, &sdh_ble_observers);
|
||||||
|
nrf_section_iter_get(&iter) != NULL;
|
||||||
|
nrf_section_iter_next(&iter))
|
||||||
|
{
|
||||||
|
nrf_sdh_ble_evt_observer_t * p_observer;
|
||||||
|
nrf_sdh_ble_evt_handler_t handler;
|
||||||
|
|
||||||
|
p_observer = (nrf_sdh_ble_evt_observer_t *)nrf_section_iter_get(&iter);
|
||||||
|
handler = p_observer->handler;
|
||||||
|
|
||||||
|
handler(p_ble_evt, p_observer->p_context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ret_code != NRF_ERROR_NOT_FOUND)
|
||||||
|
{
|
||||||
|
APP_ERROR_HANDLER(ret_code);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NRF_SDH_STACK_OBSERVER(m_nrf_sdh_ble_evts_poll, NRF_SDH_BLE_STACK_OBSERVER_PRIO) =
|
||||||
|
{
|
||||||
|
.handler = nrf_sdh_ble_evts_poll,
|
||||||
|
.p_context = NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // NRF_MODULE_ENABLED(NRF_SDH_BLE)
|
184
softdevice/6.0.0/common/nrf_sdh_ble.h
Normal file
184
softdevice/6.0.0/common/nrf_sdh_ble.h
Normal file
@ -0,0 +1,184 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2017 - 2018, Nordic Semiconductor ASA
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||||
|
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||||
|
* such product, must reproduce the above copyright notice, this list of
|
||||||
|
* conditions and the following disclaimer in the documentation and/or other
|
||||||
|
* materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* 4. This software, with or without modification, must only be used with a
|
||||||
|
* Nordic Semiconductor ASA integrated circuit.
|
||||||
|
*
|
||||||
|
* 5. Any software provided in binary form under this license must not be reverse
|
||||||
|
* engineered, decompiled, modified and/or disassembled.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||||
|
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**@file
|
||||||
|
*
|
||||||
|
* @defgroup nrf_sdh_ble BLE support in SoftDevice Handler
|
||||||
|
* @{
|
||||||
|
* @ingroup nrf_sdh
|
||||||
|
* @brief This file contains the declarations of types and functions required for BLE stack
|
||||||
|
* support.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef NRF_SDH_BLE_H__
|
||||||
|
#define NRF_SDH_BLE_H__
|
||||||
|
|
||||||
|
#include "app_util.h"
|
||||||
|
#include "ble.h"
|
||||||
|
#include "nrf_section_iter.h"
|
||||||
|
#include "sdk_config.h"
|
||||||
|
#include "sdk_errors.h"
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/** @brief Size of the buffer for a BLE event. */
|
||||||
|
#define NRF_SDH_BLE_EVT_BUF_SIZE BLE_EVT_LEN_MAX(NRF_SDH_BLE_GATT_MAX_MTU_SIZE)
|
||||||
|
|
||||||
|
|
||||||
|
#if !(defined(__LINT__))
|
||||||
|
/**@brief Macro for registering @ref nrf_sdh_soc_evt_observer_t. Modules that want to be
|
||||||
|
* notified about SoC events must register the handler using this macro.
|
||||||
|
*
|
||||||
|
* @details This macro places the observer in a section named "sdh_soc_observers".
|
||||||
|
*
|
||||||
|
* @param[in] _name Observer name.
|
||||||
|
* @param[in] _prio Priority of the observer event handler.
|
||||||
|
* The smaller the number, the higher the priority.
|
||||||
|
* @param[in] _handler BLE event handler.
|
||||||
|
* @param[in] _context Parameter to the event handler.
|
||||||
|
* @hideinitializer
|
||||||
|
*/
|
||||||
|
#define NRF_SDH_BLE_OBSERVER(_name, _prio, _handler, _context) \
|
||||||
|
STATIC_ASSERT(NRF_SDH_BLE_ENABLED, "NRF_SDH_BLE_ENABLED not set!"); \
|
||||||
|
STATIC_ASSERT(_prio < NRF_SDH_BLE_OBSERVER_PRIO_LEVELS, "Priority level unavailable."); \
|
||||||
|
NRF_SECTION_SET_ITEM_REGISTER(sdh_ble_observers, _prio, static nrf_sdh_ble_evt_observer_t _name) = \
|
||||||
|
{ \
|
||||||
|
.handler = _handler, \
|
||||||
|
.p_context = _context \
|
||||||
|
}
|
||||||
|
|
||||||
|
/**@brief Macro for registering an array of @ref nrf_sdh_ble_evt_observer_t.
|
||||||
|
* Modules that want to be notified about SoC events must register the handler using
|
||||||
|
* this macro.
|
||||||
|
*
|
||||||
|
* Each observer's handler will be dispatched an event with its relative context from @p _context.
|
||||||
|
* This macro places the observer in a section named "sdh_ble_observers".
|
||||||
|
*
|
||||||
|
* @param[in] _name Observer name.
|
||||||
|
* @param[in] _prio Priority of the observer event handler.
|
||||||
|
* The smaller the number, the higher the priority.
|
||||||
|
* @param[in] _handler BLE event handler.
|
||||||
|
* @param[in] _context An array of parameters to the event handler.
|
||||||
|
* @param[in] _cnt Number of observers to register.
|
||||||
|
* @hideinitializer
|
||||||
|
*/
|
||||||
|
#define NRF_SDH_BLE_OBSERVERS(_name, _prio, _handler, _context, _cnt) \
|
||||||
|
STATIC_ASSERT(NRF_SDH_BLE_ENABLED, "NRF_SDH_BLE_ENABLED not set!"); \
|
||||||
|
STATIC_ASSERT(_prio < NRF_SDH_BLE_OBSERVER_PRIO_LEVELS, "Priority level unavailable."); \
|
||||||
|
NRF_SECTION_SET_ITEM_REGISTER(sdh_ble_observers, _prio, static nrf_sdh_ble_evt_observer_t _name[_cnt]) = \
|
||||||
|
{ \
|
||||||
|
MACRO_REPEAT_FOR(_cnt, HANDLER_SET, _handler, _context) \
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !(defined(DOXYGEN))
|
||||||
|
#define HANDLER_SET(_idx, _handler, _context) \
|
||||||
|
{ \
|
||||||
|
.handler = _handler, \
|
||||||
|
.p_context = _context[_idx], \
|
||||||
|
},
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#else // __LINT__
|
||||||
|
|
||||||
|
/* Swallow semicolons */
|
||||||
|
/*lint -save -esym(528, *) -esym(529, *) : Symbol not referenced. */
|
||||||
|
#define NRF_SDH_BLE_OBSERVER(A, B, C, D) static int semicolon_swallow_##A
|
||||||
|
#define NRF_SDH_BLE_OBSERVERS(A, B, C, D, E) static int semicolon_swallow_##A
|
||||||
|
/*lint -restore */
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/**@brief BLE stack event handler. */
|
||||||
|
typedef void (*nrf_sdh_ble_evt_handler_t)(ble_evt_t const * p_ble_evt, void * p_context);
|
||||||
|
|
||||||
|
/**@brief BLE event observer. */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
nrf_sdh_ble_evt_handler_t handler; //!< BLE event handler.
|
||||||
|
void * p_context; //!< A parameter to the event handler.
|
||||||
|
} const nrf_sdh_ble_evt_observer_t;
|
||||||
|
|
||||||
|
|
||||||
|
/**@brief Function for retrieving the address of the start of application's RAM.
|
||||||
|
*
|
||||||
|
* @param[out] p_app_ram_start Address of the start of application's RAM.
|
||||||
|
*
|
||||||
|
* @retval NRF_SUCCESS If the address was successfully retrieved.
|
||||||
|
* @retval NRF_ERROR_NULL If @p p_app_ram_start was @c NULL.
|
||||||
|
*/
|
||||||
|
ret_code_t nrf_sdh_ble_app_ram_start_get(uint32_t * p_app_ram_start);
|
||||||
|
|
||||||
|
|
||||||
|
/**@brief Set the default BLE stack configuration.
|
||||||
|
*
|
||||||
|
* This function configures the BLE stack with the settings specified in the
|
||||||
|
* SoftDevice handler BLE configuration. The following configurations will be set:
|
||||||
|
* - Number of peripheral links
|
||||||
|
* - Number of central links
|
||||||
|
* - ATT MTU size (for the given connection)
|
||||||
|
* - Vendor specific UUID count
|
||||||
|
* - GATTS Attribute table size
|
||||||
|
* - Service changed
|
||||||
|
*
|
||||||
|
* @param[in] conn_cfg_tag The connection to configure.
|
||||||
|
* @param[out] p_ram_start Application RAM start address.
|
||||||
|
*/
|
||||||
|
ret_code_t nrf_sdh_ble_default_cfg_set(uint8_t conn_cfg_tag, uint32_t * p_ram_start);
|
||||||
|
|
||||||
|
|
||||||
|
/**@brief Function for configuring and enabling the BLE stack.
|
||||||
|
*
|
||||||
|
* @param[in] p_app_ram_start Address of the start of application's RAM.
|
||||||
|
*/
|
||||||
|
ret_code_t nrf_sdh_ble_enable(uint32_t * p_app_ram_start);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // NRF_SDH_BLE_H__
|
||||||
|
|
||||||
|
/** @} */
|
118
softdevice/6.0.0/common/nrf_sdh_soc.c
Normal file
118
softdevice/6.0.0/common/nrf_sdh_soc.c
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2017 - 2018, Nordic Semiconductor ASA
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||||
|
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||||
|
* such product, must reproduce the above copyright notice, this list of
|
||||||
|
* conditions and the following disclaimer in the documentation and/or other
|
||||||
|
* materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* 4. This software, with or without modification, must only be used with a
|
||||||
|
* Nordic Semiconductor ASA integrated circuit.
|
||||||
|
*
|
||||||
|
* 5. Any software provided in binary form under this license must not be reverse
|
||||||
|
* engineered, decompiled, modified and/or disassembled.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||||
|
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "sdk_common.h"
|
||||||
|
#if NRF_MODULE_ENABLED(NRF_SDH_SOC)
|
||||||
|
|
||||||
|
#include "nrf_sdh_soc.h"
|
||||||
|
|
||||||
|
#include "nrf_sdh.h"
|
||||||
|
#include "nrf_soc.h"
|
||||||
|
#include "app_error.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define NRF_LOG_MODULE_NAME nrf_sdh_soc
|
||||||
|
#if NRF_SDH_SOC_LOG_ENABLED
|
||||||
|
#define NRF_LOG_LEVEL NRF_SDH_SOC_LOG_LEVEL
|
||||||
|
#define NRF_LOG_INFO_COLOR NRF_SDH_SOC_INFO_COLOR
|
||||||
|
#define NRF_LOG_DEBUG_COLOR NRF_SDH_SOC_DEBUG_COLOR
|
||||||
|
#else
|
||||||
|
#define NRF_LOG_LEVEL 0
|
||||||
|
#endif // NRF_SDH_SOC_LOG_ENABLED
|
||||||
|
#include "nrf_log.h"
|
||||||
|
NRF_LOG_MODULE_REGISTER();
|
||||||
|
|
||||||
|
|
||||||
|
// Create section set "sdh_soc_observers".
|
||||||
|
NRF_SECTION_SET_DEF(sdh_soc_observers, nrf_sdh_soc_evt_observer_t, NRF_SDH_SOC_OBSERVER_PRIO_LEVELS);
|
||||||
|
|
||||||
|
|
||||||
|
/**@brief Function for polling SoC events.
|
||||||
|
*
|
||||||
|
* @param[in] p_context Context of the observer.
|
||||||
|
*/
|
||||||
|
static void nrf_sdh_soc_evts_poll(void * p_context)
|
||||||
|
{
|
||||||
|
ret_code_t ret_code;
|
||||||
|
|
||||||
|
UNUSED_VARIABLE(p_context);
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
uint32_t evt_id;
|
||||||
|
|
||||||
|
ret_code = sd_evt_get(&evt_id);
|
||||||
|
if (ret_code != NRF_SUCCESS)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
NRF_LOG_DEBUG("SoC event: 0x%x.", evt_id);
|
||||||
|
|
||||||
|
// Forward the event to SoC observers.
|
||||||
|
nrf_section_iter_t iter;
|
||||||
|
for (nrf_section_iter_init(&iter, &sdh_soc_observers);
|
||||||
|
nrf_section_iter_get(&iter) != NULL;
|
||||||
|
nrf_section_iter_next(&iter))
|
||||||
|
{
|
||||||
|
nrf_sdh_soc_evt_observer_t * p_observer;
|
||||||
|
nrf_sdh_soc_evt_handler_t handler;
|
||||||
|
|
||||||
|
p_observer = (nrf_sdh_soc_evt_observer_t *) nrf_section_iter_get(&iter);
|
||||||
|
handler = p_observer->handler;
|
||||||
|
|
||||||
|
handler(evt_id, p_observer->p_context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ret_code != NRF_ERROR_NOT_FOUND)
|
||||||
|
{
|
||||||
|
APP_ERROR_HANDLER(ret_code);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NRF_SDH_STACK_OBSERVER(m_nrf_sdh_soc_evts_poll, NRF_SDH_SOC_STACK_OBSERVER_PRIO) =
|
||||||
|
{
|
||||||
|
.handler = nrf_sdh_soc_evts_poll,
|
||||||
|
.p_context = NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // NRF_MODULE_ENABLED(NRF_SDH_SOC)
|
143
softdevice/6.0.0/common/nrf_sdh_soc.h
Normal file
143
softdevice/6.0.0/common/nrf_sdh_soc.h
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2017 - 2018, Nordic Semiconductor ASA
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||||
|
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||||
|
* such product, must reproduce the above copyright notice, this list of
|
||||||
|
* conditions and the following disclaimer in the documentation and/or other
|
||||||
|
* materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* 4. This software, with or without modification, must only be used with a
|
||||||
|
* Nordic Semiconductor ASA integrated circuit.
|
||||||
|
*
|
||||||
|
* 5. Any software provided in binary form under this license must not be reverse
|
||||||
|
* engineered, decompiled, modified and/or disassembled.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||||
|
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**@file
|
||||||
|
*
|
||||||
|
* @defgroup nrf_sdh_soc SoC support in SoftDevice Handler
|
||||||
|
* @{
|
||||||
|
* @ingroup nrf_sdh
|
||||||
|
* @brief This file contains the declarations of types and functions required for SoftDevice Handler
|
||||||
|
* SoC support.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef NRF_SDH_SOC_H__
|
||||||
|
#define NRF_SDH_SOC_H__
|
||||||
|
|
||||||
|
#include "sdk_common.h"
|
||||||
|
#include "nrf_section_iter.h"
|
||||||
|
#include "nrf_soc.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if !(defined(__LINT__))
|
||||||
|
/**@brief Macro for registering @ref nrf_sdh_soc_evt_observer_t. Modules that want to be
|
||||||
|
* notified about SoC events must register the handler using this macro.
|
||||||
|
*
|
||||||
|
* @details This macro places the observer in a section named "sdh_soc_observers".
|
||||||
|
*
|
||||||
|
* @param[in] _name Observer name.
|
||||||
|
* @param[in] _prio Priority of the observer event handler.
|
||||||
|
* The smaller the number, the higher the priority.
|
||||||
|
* @param[in] _handler SoC event handler.
|
||||||
|
* @param[in] _context Parameter to the event handler.
|
||||||
|
* @hideinitializer
|
||||||
|
*/
|
||||||
|
#define NRF_SDH_SOC_OBSERVER(_name, _prio, _handler, _context) \
|
||||||
|
STATIC_ASSERT(NRF_SDH_SOC_ENABLED, "NRF_SDH_SOC_ENABLED not set!"); \
|
||||||
|
STATIC_ASSERT(_prio < NRF_SDH_SOC_OBSERVER_PRIO_LEVELS, "Priority level unavailable."); \
|
||||||
|
NRF_SECTION_SET_ITEM_REGISTER(sdh_soc_observers, _prio, static nrf_sdh_soc_evt_observer_t _name) = \
|
||||||
|
{ \
|
||||||
|
.handler = _handler, \
|
||||||
|
.p_context = _context \
|
||||||
|
}
|
||||||
|
|
||||||
|
/**@brief Macro for registering an array of @ref nrf_sdh_soc_evt_observer_t.
|
||||||
|
* Modules that want to be notified about SoC events must register the handler using
|
||||||
|
* this macro.
|
||||||
|
*
|
||||||
|
* Each observer's handler will be dispatched an event with its relative context from @p _context.
|
||||||
|
* This macro places the observer in a section named "sdh_soc_observers".
|
||||||
|
*
|
||||||
|
* @param[in] _name Observer name.
|
||||||
|
* @param[in] _prio Priority of the observer event handler.
|
||||||
|
* The smaller the number, the higher the priority.
|
||||||
|
* @param[in] _handler SoC event handler.
|
||||||
|
* @param[in] _context An array of parameters to the event handler.
|
||||||
|
* @param[in] _cnt Number of observers to register.
|
||||||
|
* @hideinitializer
|
||||||
|
*/
|
||||||
|
#define NRF_SDH_SOC_EVENT_OBSERVERS(_name, _prio, _handler, _context, _cnt) \
|
||||||
|
STATIC_ASSERT(NRF_SDH_SOC_ENABLED, "NRF_SDH_SOC_ENABLED not set!"); \
|
||||||
|
STATIC_ASSERT(_prio < NRF_SDH_SOC_OBSERVER_PRIO_LEVELS, "Priority level unavailable."); \
|
||||||
|
NRF_SECTION_SET_ITEM_REGISTER(sdh_soc_observers, _prio, static nrf_sdh_soc_evt_observer_t _name[_cnt]) = \
|
||||||
|
{ \
|
||||||
|
MACRO_REPEAT_FOR(_cnt, HANDLER_SET, _handler, _context) \
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !(defined(DOXYGEN))
|
||||||
|
#define HANDLER_SET(_idx, _handler, _context) \
|
||||||
|
{ \
|
||||||
|
.handler = _handler, \
|
||||||
|
.p_context = _context[_idx], \
|
||||||
|
},
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#else // __LINT__
|
||||||
|
|
||||||
|
/* Swallow semicolons */
|
||||||
|
/*lint -save -esym(528, *) -esym(529, *) : Symbol not referenced. */
|
||||||
|
#define NRF_SDH_SOC_OBSERVER(A, B, C, D) static int semicolon_swallow_##A
|
||||||
|
#define NRF_SDH_SOC_OBSERVERS(A, B, C, D, E) static int semicolon_swallow_##A
|
||||||
|
/*lint -restore */
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/**@brief SoC event handler. */
|
||||||
|
typedef void (*nrf_sdh_soc_evt_handler_t) (uint32_t evt_id, void * p_context);
|
||||||
|
|
||||||
|
/**@brief SoC event observer. */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
nrf_sdh_soc_evt_handler_t handler; //!< SoC event handler.
|
||||||
|
void * p_context; //!< A parameter to the event handler.
|
||||||
|
} const nrf_sdh_soc_evt_observer_t;
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // NRF_SDH_SOC_H__
|
||||||
|
|
||||||
|
/** @} */
|
@ -81,13 +81,13 @@ enum NRF_MBR_SVCS
|
|||||||
/**@brief Possible values for ::sd_mbr_command_t.command */
|
/**@brief Possible values for ::sd_mbr_command_t.command */
|
||||||
enum NRF_MBR_COMMANDS
|
enum NRF_MBR_COMMANDS
|
||||||
{
|
{
|
||||||
SD_MBR_COMMAND_COPY_BL, /**< Copy a new BootLoader. @see sd_mbr_command_copy_bl_t*/
|
SD_MBR_COMMAND_COPY_BL, /**< Copy a new BootLoader. @see ::sd_mbr_command_copy_bl_t*/
|
||||||
SD_MBR_COMMAND_COPY_SD, /**< Copy a new SoftDevice. @see ::sd_mbr_command_copy_sd_t*/
|
SD_MBR_COMMAND_COPY_SD, /**< Copy a new SoftDevice. @see ::sd_mbr_command_copy_sd_t*/
|
||||||
SD_MBR_COMMAND_INIT_SD, /**< Initialize forwarding interrupts to SD, and run reset function in SD*/
|
SD_MBR_COMMAND_INIT_SD, /**< Initialize forwarding interrupts to SD, and run reset function in SD. Does not require any parameters in ::sd_mbr_command_t params.*/
|
||||||
SD_MBR_COMMAND_COMPARE, /**< This command works like memcmp. @see ::sd_mbr_command_compare_t*/
|
SD_MBR_COMMAND_COMPARE, /**< This command works like memcmp. @see ::sd_mbr_command_compare_t*/
|
||||||
SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET, /**< Change the address the MBR starts after a reset @see ::sd_mbr_command_vector_table_base_set_t*/
|
SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET, /**< Change the address the MBR starts after a reset. @see ::sd_mbr_command_vector_table_base_set_t*/
|
||||||
SD_MBR_COMMAND_RESERVED,
|
SD_MBR_COMMAND_RESERVED,
|
||||||
SD_MBR_COMMAND_IRQ_FORWARD_ADDRESS_SET, /**< Start forwarding all interrupts to this address @see ::sd_mbr_command_irq_forward_address_set_t*/
|
SD_MBR_COMMAND_IRQ_FORWARD_ADDRESS_SET, /**< Start forwarding all interrupts to this address. @see ::sd_mbr_command_irq_forward_address_set_t*/
|
||||||
};
|
};
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
@ -96,6 +96,7 @@ enum NRF_MBR_COMMANDS
|
|||||||
* @{ */
|
* @{ */
|
||||||
|
|
||||||
/**@brief This command copies part of a new SoftDevice
|
/**@brief This command copies part of a new SoftDevice
|
||||||
|
*
|
||||||
* The destination area is erased before copying.
|
* The destination area is erased before copying.
|
||||||
* If dst is in the middle of a flash page, that whole flash page will be erased.
|
* If dst is in the middle of a flash page, that whole flash page will be erased.
|
||||||
* If (dst+len) is in the middle of a flash page, that whole flash page will be erased.
|
* If (dst+len) is in the middle of a flash page, that whole flash page will be erased.
|
||||||
@ -127,14 +128,17 @@ typedef struct
|
|||||||
|
|
||||||
|
|
||||||
/**@brief This command copies a new BootLoader.
|
/**@brief This command copies a new BootLoader.
|
||||||
* With this command, destination of BootLoader is always the address written in NRF_UICR->BOOTADDR.
|
|
||||||
*
|
*
|
||||||
* Destination is erased by this function.
|
* With this command, destination of BootLoader is always the address written in
|
||||||
* If (destination+bl_len) is in the middle of a flash page, that whole flash page will be erased.
|
* NRF_UICR->BOOTADDR.
|
||||||
*
|
*
|
||||||
* This function will use PROTENSET to protect the flash that is not intended to be written.
|
* Destination is erased by this function.
|
||||||
|
* If (destination+bl_len) is in the middle of a flash page, that whole flash page will be erased.
|
||||||
*
|
*
|
||||||
* On success, this function will not return. It will start the new BootLoader from reset-vector as normal.
|
* This function will use the flash protect peripheral (BPROT or ACL) to protect the flash that is
|
||||||
|
* not intended to be written.
|
||||||
|
*
|
||||||
|
* On success, this function will not return. It will start the new BootLoader from reset-vector as normal.
|
||||||
*
|
*
|
||||||
* @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen.
|
* @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen.
|
||||||
* @retval ::NRF_ERROR_FORBIDDEN if NRF_UICR->BOOTADDR is not set.
|
* @retval ::NRF_ERROR_FORBIDDEN if NRF_UICR->BOOTADDR is not set.
|
||||||
@ -149,10 +153,12 @@ typedef struct
|
|||||||
|
|
||||||
/**@brief Change the address the MBR starts after a reset
|
/**@brief Change the address the MBR starts after a reset
|
||||||
*
|
*
|
||||||
* Once this function has been called, this address is where the MBR will start to forward interrupts to after a reset.
|
* Once this function has been called, this address is where the MBR will start to forward
|
||||||
|
* interrupts to after a reset.
|
||||||
*
|
*
|
||||||
* To restore default forwarding this function should be called with @param address set to 0.
|
* To restore default forwarding this function should be called with @ref address set to 0. The
|
||||||
* The MBR will then start forwarding to interrupts to the address in NFR_UICR->BOOTADDR or to the SoftDevice if the BOOTADDR is not set.
|
* MBR will then start forwarding interrupts to the address in NFR_UICR->BOOTADDR or to the
|
||||||
|
* SoftDevice if the BOOTADDR is not set.
|
||||||
*
|
*
|
||||||
* On success, this function will not return. It will reset the device.
|
* On success, this function will not return. It will reset the device.
|
||||||
*
|
*
|
||||||
@ -166,6 +172,7 @@ typedef struct
|
|||||||
} sd_mbr_command_vector_table_base_set_t;
|
} sd_mbr_command_vector_table_base_set_t;
|
||||||
|
|
||||||
/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the MBR
|
/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the MBR
|
||||||
|
*
|
||||||
* Unlike sd_mbr_command_vector_table_base_set_t, this function does not reset, and it does not
|
* Unlike sd_mbr_command_vector_table_base_set_t, this function does not reset, and it does not
|
||||||
* change where the MBR starts after reset.
|
* change where the MBR starts after reset.
|
||||||
*
|
*
|
||||||
@ -176,9 +183,15 @@ typedef struct
|
|||||||
uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/
|
uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/
|
||||||
} sd_mbr_command_irq_forward_address_set_t;
|
} sd_mbr_command_irq_forward_address_set_t;
|
||||||
|
|
||||||
|
/**@brief Input structure containing data used when calling ::sd_mbr_command
|
||||||
|
*
|
||||||
|
* Depending on what command value that is set, the corresponding params value type must also be
|
||||||
|
* set. See @ref NRF_MBR_COMMANDS for command types and corresponding params value type. If command
|
||||||
|
* @ref SD_MBR_COMMAND_INIT_SD is set, it is not necessary to set any values under params.
|
||||||
|
*/
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
uint32_t command; /**< type of command to be issued see @ref NRF_MBR_COMMANDS. */
|
uint32_t command; /**< Type of command to be issued. See @ref NRF_MBR_COMMANDS. */
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
sd_mbr_command_copy_sd_t copy_sd; /**< Parameters for copy SoftDevice.*/
|
sd_mbr_command_copy_sd_t copy_sd; /**< Parameters for copy SoftDevice.*/
|
||||||
@ -186,7 +199,7 @@ typedef struct
|
|||||||
sd_mbr_command_copy_bl_t copy_bl; /**< Parameters for copy BootLoader. Requires parameter page. */
|
sd_mbr_command_copy_bl_t copy_bl; /**< Parameters for copy BootLoader. Requires parameter page. */
|
||||||
sd_mbr_command_vector_table_base_set_t base_set; /**< Parameters for vector table base set. Requires parameter page.*/
|
sd_mbr_command_vector_table_base_set_t base_set; /**< Parameters for vector table base set. Requires parameter page.*/
|
||||||
sd_mbr_command_irq_forward_address_set_t irq_forward_address_set; /**< Parameters for irq forward address set*/
|
sd_mbr_command_irq_forward_address_set_t irq_forward_address_set; /**< Parameters for irq forward address set*/
|
||||||
} params;
|
} params; /**< Command parameters. */
|
||||||
} sd_mbr_command_t;
|
} sd_mbr_command_t;
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
@ -198,21 +211,22 @@ typedef struct
|
|||||||
*
|
*
|
||||||
* Commands used when updating a SoftDevice and bootloader.
|
* Commands used when updating a SoftDevice and bootloader.
|
||||||
*
|
*
|
||||||
* The SD_MBR_COMMAND_COPY_BL and SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET requires parameters to be
|
* The @ref SD_MBR_COMMAND_COPY_BL and @ref SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET requires
|
||||||
* retained by the MBR when resetting the IC. This is done in a separate flash page
|
* parameters to be retained by the MBR when resetting the IC. This is done in a separate flash
|
||||||
* provided by the application. The UICR register UICR.NRFFW[1] must be set
|
* page provided by the application. The UICR register UICR.NRFFW[1] must be set to an address
|
||||||
* to an address corresponding to a page in the application flash space. This page will be cleared
|
* corresponding to a page in the application flash space. This page will be cleared by the MBR and
|
||||||
* by the MBR and used to store the command before reset. When the UICR.NRFFW[1] field is set
|
* used to store the command before reset. When the UICR.NRFFW[1] field is set the page it refers
|
||||||
* the page it refers to must not be used by the application. If the UICR.NRFFW[1] is set to
|
* to must not be used by the application. If the UICR.NRFFW[1] is set to 0xFFFFFFFF (the default)
|
||||||
* 0xFFFFFFFF (the default) MBR commands which use flash will be unavailable and return
|
* MBR commands which use flash will be unavailable and return @ref NRF_ERROR_NO_MEM.
|
||||||
* NRF_ERROR_NO_MEM.
|
|
||||||
*
|
*
|
||||||
* @param[in] param Pointer to a struct describing the command.
|
* @param[in] param Pointer to a struct describing the command.
|
||||||
*
|
*
|
||||||
* @note For return values, see ::sd_mbr_command_copy_sd_t ::sd_mbr_command_copy_bl_t ::sd_mbr_command_compare_t ::sd_mbr_command_vector_table_base_set_t ::sd_mbr_command_irq_forward_address_set_t
|
* @note For return values, see ::sd_mbr_command_copy_sd_t, ::sd_mbr_command_copy_bl_t,
|
||||||
|
* ::sd_mbr_command_compare_t, ::sd_mbr_command_vector_table_base_set_t,
|
||||||
|
* ::sd_mbr_command_irq_forward_address_set_t
|
||||||
*
|
*
|
||||||
* @retval NRF_ERROR_NO_MEM if UICR.NRFFW[1] is not set (i.e. is 0xFFFFFFFF).
|
* @retval ::NRF_ERROR_NO_MEM if UICR.NRFFW[1] is not set (i.e. is 0xFFFFFFFF).
|
||||||
* @retval NRF_ERROR_INVALID_PARAM if an invalid command is given.
|
* @retval ::NRF_ERROR_INVALID_PARAM if an invalid command is given.
|
||||||
*/
|
*/
|
||||||
SVCALL(SD_MBR_COMMAND, uint32_t, sd_mbr_command(sd_mbr_command_t* param));
|
SVCALL(SD_MBR_COMMAND, uint32_t, sd_mbr_command(sd_mbr_command_t* param));
|
||||||
|
|
@ -1,90 +1,90 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2012 - 2017, Nordic Semiconductor ASA
|
* Copyright (c) 2012 - 2017, Nordic Semiconductor ASA
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modification,
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
* are permitted provided that the following conditions are met:
|
* are permitted provided that the following conditions are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
* list of conditions and the following disclaimer.
|
* list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* 2. Redistributions in binary form, except as embedded into a Nordic
|
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||||
* Semiconductor ASA integrated circuit in a product or a software update for
|
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||||
* such product, must reproduce the above copyright notice, this list of
|
* such product, must reproduce the above copyright notice, this list of
|
||||||
* conditions and the following disclaimer in the documentation and/or other
|
* conditions and the following disclaimer in the documentation and/or other
|
||||||
* materials provided with the distribution.
|
* materials provided with the distribution.
|
||||||
*
|
*
|
||||||
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||||
* contributors may be used to endorse or promote products derived from this
|
* contributors may be used to endorse or promote products derived from this
|
||||||
* software without specific prior written permission.
|
* software without specific prior written permission.
|
||||||
*
|
*
|
||||||
* 4. This software, with or without modification, must only be used with a
|
* 4. This software, with or without modification, must only be used with a
|
||||||
* Nordic Semiconductor ASA integrated circuit.
|
* Nordic Semiconductor ASA integrated circuit.
|
||||||
*
|
*
|
||||||
* 5. Any software provided in binary form under this license must not be reverse
|
* 5. Any software provided in binary form under this license must not be reverse
|
||||||
* engineered, decompiled, modified and/or disassembled.
|
* engineered, decompiled, modified and/or disassembled.
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef NRF_SVC__
|
#ifndef NRF_SVC__
|
||||||
#define NRF_SVC__
|
#define NRF_SVC__
|
||||||
|
|
||||||
#include "stdint.h"
|
#include "stdint.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef SVCALL_AS_NORMAL_FUNCTION
|
#ifdef SVCALL_AS_NORMAL_FUNCTION
|
||||||
#define SVCALL(number, return_type, signature) return_type signature
|
#define SVCALL(number, return_type, signature) return_type signature
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#ifndef SVCALL
|
#ifndef SVCALL
|
||||||
#if defined (__CC_ARM)
|
#if defined (__CC_ARM)
|
||||||
#define SVCALL(number, return_type, signature) return_type __svc(number) signature
|
#define SVCALL(number, return_type, signature) return_type __svc(number) signature
|
||||||
#elif defined (__GNUC__)
|
#elif defined (__GNUC__)
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
#define GCC_CAST_CPP (uint16_t)
|
#define GCC_CAST_CPP (uint16_t)
|
||||||
#else
|
#else
|
||||||
#define GCC_CAST_CPP
|
#define GCC_CAST_CPP
|
||||||
#endif
|
#endif
|
||||||
#define SVCALL(number, return_type, signature) \
|
#define SVCALL(number, return_type, signature) \
|
||||||
_Pragma("GCC diagnostic push") \
|
_Pragma("GCC diagnostic push") \
|
||||||
_Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \
|
_Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \
|
||||||
__attribute__((naked)) \
|
__attribute__((naked)) \
|
||||||
__attribute__((unused)) \
|
__attribute__((unused)) \
|
||||||
static return_type signature \
|
static return_type signature \
|
||||||
{ \
|
{ \
|
||||||
__asm( \
|
__asm( \
|
||||||
"svc %0\n" \
|
"svc %0\n" \
|
||||||
"bx r14" : : "I" (GCC_CAST_CPP number) : "r0" \
|
"bx r14" : : "I" (GCC_CAST_CPP number) : "r0" \
|
||||||
); \
|
); \
|
||||||
} \
|
} \
|
||||||
_Pragma("GCC diagnostic pop")
|
_Pragma("GCC diagnostic pop")
|
||||||
|
|
||||||
#elif defined (__ICCARM__)
|
#elif defined (__ICCARM__)
|
||||||
#define PRAGMA(x) _Pragma(#x)
|
#define PRAGMA(x) _Pragma(#x)
|
||||||
#define SVCALL(number, return_type, signature) \
|
#define SVCALL(number, return_type, signature) \
|
||||||
PRAGMA(swi_number = (number)) \
|
PRAGMA(swi_number = (number)) \
|
||||||
__swi return_type signature;
|
__swi return_type signature;
|
||||||
#else
|
#else
|
||||||
#define SVCALL(number, return_type, signature) return_type signature
|
#define SVCALL(number, return_type, signature) return_type signature
|
||||||
#endif
|
#endif
|
||||||
#endif // SVCALL
|
#endif // SVCALL
|
||||||
|
|
||||||
#endif // SVCALL_AS_NORMAL_FUNCTION
|
#endif // SVCALL_AS_NORMAL_FUNCTION
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif // NRF_SVC__
|
#endif // NRF_SVC__
|
@ -0,0 +1,35 @@
|
|||||||
|
Copyright (c) 2007 - 2018, Nordic Semiconductor ASA
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form, except as embedded into a Nordic
|
||||||
|
Semiconductor ASA integrated circuit in a product or a software update for
|
||||||
|
such product, must reproduce the above copyright notice, this list of
|
||||||
|
conditions and the following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from this
|
||||||
|
software without specific prior written permission.
|
||||||
|
|
||||||
|
4. This software, with or without modification, must only be used with a
|
||||||
|
Nordic Semiconductor ASA integrated circuit.
|
||||||
|
|
||||||
|
5. Any software provided in binary form under this license must not be reverse
|
||||||
|
engineered, decompiled, modified and/or disassembled.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||||
|
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
|
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
165
softdevice/6.0.0/mbr/nrf52840/hex/mbr_nrf52_2.3.0_mbr.hex
Normal file
165
softdevice/6.0.0/mbr/nrf52840/hex/mbr_nrf52_2.3.0_mbr.hex
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
:020000040000FA
|
||||||
|
:1000000000040020990900002D0600007909000075
|
||||||
|
:1000100037060000410600004B060000000000000B
|
||||||
|
:10002000000000000000000000000000BD0900000A
|
||||||
|
:1000300055060000000000005F0600006906000091
|
||||||
|
:10004000730600007D060000870600009106000090
|
||||||
|
:100050009B060000A5060000AF060000B9060000E0
|
||||||
|
:10006000C3060000CD060000D7060000E106000030
|
||||||
|
:10007000EB060000F5060000FF060000090700007F
|
||||||
|
:10008000130700001D0700002707000031070000CC
|
||||||
|
:100090003B070000450700004F070000590700001C
|
||||||
|
:1000A000630700006D07000077070000810700006C
|
||||||
|
:1000B0008B070000950700009F070000A9070000BC
|
||||||
|
:1000C000B3070000BD070000C7070000D10700000C
|
||||||
|
:1000D000DB070000E5070000EF070000F90700005C
|
||||||
|
:1000E000030800000D0800001708000021080000A8
|
||||||
|
:1000F0002B080000350800003F08000049080000F8
|
||||||
|
:10010000530800001FB500F003F88DE80F001FBD75
|
||||||
|
:1001100000F038BC70B50B46010B184400F6FF70B8
|
||||||
|
:10012000040B4FF080500022090303692403406947
|
||||||
|
:1001300043431D1B104600F0E9F929462046BDE85F
|
||||||
|
:10014000704000F0E3B9F0B54FF6FF734FF4B475AB
|
||||||
|
:100150001A466E1E12E0A94201D3344600E00C4656
|
||||||
|
:10016000B1EB040130F8027B641E3B441A44F9D120
|
||||||
|
:100170009CB204EB134394B204EB12420029EAD17F
|
||||||
|
:1001800098B200EB134002EB124140EA0140F0BD8F
|
||||||
|
:10019000C34992B00446D1E90001CDE91001FF2224
|
||||||
|
:1001A0004021684600F094FB94E80F008DE80F00B2
|
||||||
|
:1001B000684610A902E004C841F8042D8842FAD12B
|
||||||
|
:1001C00010216846FFF7BFFF1090AA208DF8440069
|
||||||
|
:1001D00000F0FAF800F0DDF84FF01024A0691022CA
|
||||||
|
:1001E0006946803000F0DEF8A069082210A900F00E
|
||||||
|
:1001F000D9F800F0C2F870B504460068A94D072888
|
||||||
|
:1002000069D2DFE800F033041929561E2500D4E92D
|
||||||
|
:10021000026564682946304600F0FDF82A4621460A
|
||||||
|
:10022000304600F0BFF8AA002146304600F024FB1B
|
||||||
|
:10023000002800D0032070BD00F0D6FB4FF48050A2
|
||||||
|
:1002400007E0201D00F0C6F80028F4D100F0CCFB38
|
||||||
|
:1002500060682860002070BD241D94E807009200AB
|
||||||
|
:1002600000F00AFB0028F6D00E2070BD00F0BEF8AA
|
||||||
|
:100270000028FAD1D4E9010100EB81034FF080504E
|
||||||
|
:10028000026945696A43934209D84FF010225369C5
|
||||||
|
:1002900003EB81030169406941438B4201D9092085
|
||||||
|
:1002A00070BD5069401C01D10F2070BD2046FFF782
|
||||||
|
:1002B0006FFF00F09BF80028F7D1201D00F08AF8AE
|
||||||
|
:1002C0000028F2D160680028F0D100F07DF800F03D
|
||||||
|
:1002D00060F800F052F8072070BD10B50C461828E1
|
||||||
|
:1002E00002D00120086010BD2068FFF784FF206065
|
||||||
|
:1002F00010BD4FF01024A069401C05D0A569A66967
|
||||||
|
:1003000080353079AA2808D06069401C2DD06069FA
|
||||||
|
:100310000068401C29D060692CE010212846FFF7B6
|
||||||
|
:1003200012FF316881421CD1A16901F18002C03104
|
||||||
|
:1003300005E030B108CA51F8040D984201D10120FE
|
||||||
|
:1003400000E000208A42F4D158B1286810B1042896
|
||||||
|
:1003500003D0FEE7284600F070F85249686808604C
|
||||||
|
:1003600008E000F016F800F008F84FF4805001683B
|
||||||
|
:10037000491C01D000F012FBFEE7BFF34F8F4A4843
|
||||||
|
:1003800001684A4A01F4E06111430160BFF34F8FF5
|
||||||
|
:10039000FEE74FF010208169491C02D0806900F00F
|
||||||
|
:1003A0008CB870472DE9F04117460D4606460024EB
|
||||||
|
:1003B00006E03046296800F093F8641C2D1D361DB8
|
||||||
|
:1003C000BC42F6D3BDE8F0814FF0102080694FF4B5
|
||||||
|
:1003D00080519FE64FF080510A69496900684A439D
|
||||||
|
:1003E000824201D810207047002070474FF08050A3
|
||||||
|
:1003F0000169406941434FF01020826902F5805243
|
||||||
|
:10040000914201D2092070478069401C01D0002030
|
||||||
|
:1004100070470420704770B50C4605464FF480665F
|
||||||
|
:1004200008E0284600F049F8B44205D3A4F58064FA
|
||||||
|
:1004300005F58055002CF4D170BD4168044609B122
|
||||||
|
:10044000012600E000264FF010256869A26892009E
|
||||||
|
:1004500000F012FAF8B1A06881006869FFF75AFE4F
|
||||||
|
:10046000BEB16E694FF08050A56864680169426949
|
||||||
|
:100470005143A1420DD9016940694143A94208D9BC
|
||||||
|
:1004800029463046FFF7C7FF2A4621463046FFF788
|
||||||
|
:1004900089FFFFF772FFFFF797FFFFF77AFFF8E793
|
||||||
|
:1004A0000C0A0000000000200CED00E00400FA053A
|
||||||
|
:1004B000144801680029FCD07047134A02211160DA
|
||||||
|
:1004C00010490B68002BFCD00F4B1B1D18600868EF
|
||||||
|
:1004D0000028FCD00020106008680028FCD070477D
|
||||||
|
:1004E000094B10B501221A60064A1468002CFCD092
|
||||||
|
:1004F000016010680028FCD00020186010680028F7
|
||||||
|
:10050000FCD010BD00E4014004E5014070B50C468C
|
||||||
|
:10051000054600F073F810B900F07EF828B12146C6
|
||||||
|
:100520002846BDE8704000F007B821462846BDE8DF
|
||||||
|
:10053000704000F037B800007FB5002200920192B1
|
||||||
|
:10054000029203920A0B000B6946012302440AE05F
|
||||||
|
:10055000440900F01F0651F8245003FA06F635430B
|
||||||
|
:1005600041F82450401C8242F2D80D490868009A94
|
||||||
|
:1005700010430860081D0168019A1143016000F0F2
|
||||||
|
:100580003DF800280AD0064910310868029A104345
|
||||||
|
:100590000860091D0868039A104308607FBD0000C9
|
||||||
|
:1005A0000006004030B50F4C002200BF04EB0213E0
|
||||||
|
:1005B000D3F800582DB9D3F8045815B9D3F8085812
|
||||||
|
:1005C0001DB1521C082AF1D330BD082AFCD204EB1D
|
||||||
|
:1005D0000212C2F80008C3F804180220C3F8080881
|
||||||
|
:1005E00030BD000000E001404FF08050D0F83001F5
|
||||||
|
:1005F000082801D000207047012070474FF080503C
|
||||||
|
:10060000D0F83011062905D0D0F83001401C01D0B7
|
||||||
|
:1006100000207047012070474FF08050D0F8300123
|
||||||
|
:100620000A2801D0002070470120704708208F4918
|
||||||
|
:1006300009680958084710208C4909680958084773
|
||||||
|
:1006400014208A4909680958084718208749096809
|
||||||
|
:100650000958084730208549096809580847382053
|
||||||
|
:1006600082490968095808473C20804909680958A7
|
||||||
|
:10067000084740207D4909680958084744207B49BC
|
||||||
|
:1006800009680958084748207849096809580847FF
|
||||||
|
:100690004C20764909680958084750207349096871
|
||||||
|
:1006A00009580847542071490968095808475820D3
|
||||||
|
:1006B0006E490968095808475C206C49096809585F
|
||||||
|
:1006C0000847602069490968095808476420674954
|
||||||
|
:1006D00009680958084768206449096809580847A3
|
||||||
|
:1006E0006C20624909680958084770205F49096809
|
||||||
|
:1006F0000958084774205D49096809580847782057
|
||||||
|
:100700005A490968095808477C2058490968095816
|
||||||
|
:1007100008478020554909680958084784205349EB
|
||||||
|
:100720000968095808478820504909680958084746
|
||||||
|
:100730008C204E4909680958084790204B490968A0
|
||||||
|
:1007400009580847942049490968095808479820DA
|
||||||
|
:1007500046490968095808479C20444909680958CE
|
||||||
|
:100760000847A0204149096809580847A4203F4983
|
||||||
|
:10077000096809580847A8203C49096809580847EA
|
||||||
|
:10078000AC203A49096809580847B0203749096838
|
||||||
|
:1007900009580847B4203549096809580847B8205E
|
||||||
|
:1007A0003249096809580847BC2030490968095886
|
||||||
|
:1007B0000847C0202D49096809580847C4202B491B
|
||||||
|
:1007C000096809580847C82028490968095808478E
|
||||||
|
:1007D000CC202649096809580847D02023490968D0
|
||||||
|
:1007E00009580847D4202149096809580847D820E2
|
||||||
|
:1007F0001E49096809580847DC201C49096809583E
|
||||||
|
:100800000847E0201949096809580847E4201749B2
|
||||||
|
:10081000096809580847E820144909680958084731
|
||||||
|
:10082000EC201249096809580847F0200F49096867
|
||||||
|
:1008300009580847F4200D49096809580847F82065
|
||||||
|
:100840000A49096809580847FC20084909680958F5
|
||||||
|
:1008500008475FF480700549096809580847000097
|
||||||
|
:1008600003480449024A034B70470000000000207F
|
||||||
|
:10087000180A0000180A000040EA010310B59B079F
|
||||||
|
:100880000FD1042A0DD310C808C9121F9C42F8D0FA
|
||||||
|
:1008900020BA19BA884201D9012010BD4FF0FF30AB
|
||||||
|
:1008A00010BD1AB1D30703D0521C07E0002010BDC1
|
||||||
|
:1008B00010F8013B11F8014B1B1B07D110F8013B4D
|
||||||
|
:1008C00011F8014B1B1B01D1921EF1D1184610BD2E
|
||||||
|
:1008D00002F0FF0343EA032242EA024200F005B8B5
|
||||||
|
:1008E0007047704770474FF000020429C0F0128033
|
||||||
|
:1008F00010F0030C00F01B80CCF1040CBCF1020FD3
|
||||||
|
:1009000018BF00F8012BA8BF20F8022BA1EB0C01A7
|
||||||
|
:1009100000F00DB85FEAC17C24BF00F8012B00F89D
|
||||||
|
:10092000012B48BF00F8012B70474FF0000200B5C3
|
||||||
|
:10093000134694469646203922BFA0E80C50A0E802
|
||||||
|
:100940000C50B1F12001BFF4F7AF090728BFA0E8B0
|
||||||
|
:100950000C5048BF0CC05DF804EB890028BF40F87C
|
||||||
|
:10096000042B08BF704748BF20F8022B11F0804FBE
|
||||||
|
:1009700018BF00F8012B7047014B1B68DB68184754
|
||||||
|
:100980000000002009480A497047FFF7FBFFFFF706
|
||||||
|
:10099000B9FB00BD20BFFDE7064B1847064A1060B3
|
||||||
|
:1009A000016881F30888406800470000180A0000C9
|
||||||
|
:1009B000180A0000F3020000000000201EF0040FDF
|
||||||
|
:1009C0000CBFEFF30881EFF30981886902380078E2
|
||||||
|
:1009D000182803D100E00000074A1047074A1268B0
|
||||||
|
:1009E0002C3212681047000000B5054B1B68054A01
|
||||||
|
:1009F0009B58984700BD0000DB020000000000206B
|
||||||
|
:100A0000080A0000040000000010000000000000C0
|
||||||
|
:080A100000FFFFFF0090D0037E
|
||||||
|
:040000050000099955
|
||||||
|
:00000001FF
|
File diff suppressed because it is too large
Load Diff
@ -1,93 +1,93 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2012 - 2017, Nordic Semiconductor ASA
|
* Copyright (c) 2012 - 2018, Nordic Semiconductor ASA
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modification,
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
* are permitted provided that the following conditions are met:
|
* are permitted provided that the following conditions are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
* list of conditions and the following disclaimer.
|
* list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* 2. Redistributions in binary form, except as embedded into a Nordic
|
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||||
* Semiconductor ASA integrated circuit in a product or a software update for
|
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||||
* such product, must reproduce the above copyright notice, this list of
|
* such product, must reproduce the above copyright notice, this list of
|
||||||
* conditions and the following disclaimer in the documentation and/or other
|
* conditions and the following disclaimer in the documentation and/or other
|
||||||
* materials provided with the distribution.
|
* materials provided with the distribution.
|
||||||
*
|
*
|
||||||
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||||
* contributors may be used to endorse or promote products derived from this
|
* contributors may be used to endorse or promote products derived from this
|
||||||
* software without specific prior written permission.
|
* software without specific prior written permission.
|
||||||
*
|
*
|
||||||
* 4. This software, with or without modification, must only be used with a
|
* 4. This software, with or without modification, must only be used with a
|
||||||
* Nordic Semiconductor ASA integrated circuit.
|
* Nordic Semiconductor ASA integrated circuit.
|
||||||
*
|
*
|
||||||
* 5. Any software provided in binary form under this license must not be reverse
|
* 5. Any software provided in binary form under this license must not be reverse
|
||||||
* engineered, decompiled, modified and/or disassembled.
|
* engineered, decompiled, modified and/or disassembled.
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@addtogroup BLE_COMMON
|
@addtogroup BLE_COMMON
|
||||||
@{
|
@{
|
||||||
@addtogroup nrf_error
|
@addtogroup nrf_error
|
||||||
@{
|
@{
|
||||||
@ingroup BLE_COMMON
|
@ingroup BLE_COMMON
|
||||||
@}
|
@}
|
||||||
|
|
||||||
@defgroup ble_err General error codes
|
@defgroup ble_err General error codes
|
||||||
@{
|
@{
|
||||||
|
|
||||||
@brief General error code definitions for the BLE API.
|
@brief General error code definitions for the BLE API.
|
||||||
|
|
||||||
@ingroup BLE_COMMON
|
@ingroup BLE_COMMON
|
||||||
*/
|
*/
|
||||||
#ifndef NRF_BLE_ERR_H__
|
#ifndef NRF_BLE_ERR_H__
|
||||||
#define NRF_BLE_ERR_H__
|
#define NRF_BLE_ERR_H__
|
||||||
|
|
||||||
#include "nrf_error.h"
|
#include "nrf_error.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* @defgroup BLE_ERRORS Error Codes
|
/* @defgroup BLE_ERRORS Error Codes
|
||||||
* @{ */
|
* @{ */
|
||||||
#define BLE_ERROR_NOT_ENABLED (NRF_ERROR_STK_BASE_NUM+0x001) /**< @ref sd_ble_enable has not been called. */
|
#define BLE_ERROR_NOT_ENABLED (NRF_ERROR_STK_BASE_NUM+0x001) /**< @ref sd_ble_enable has not been called. */
|
||||||
#define BLE_ERROR_INVALID_CONN_HANDLE (NRF_ERROR_STK_BASE_NUM+0x002) /**< Invalid connection handle. */
|
#define BLE_ERROR_INVALID_CONN_HANDLE (NRF_ERROR_STK_BASE_NUM+0x002) /**< Invalid connection handle. */
|
||||||
#define BLE_ERROR_INVALID_ATTR_HANDLE (NRF_ERROR_STK_BASE_NUM+0x003) /**< Invalid attribute handle. */
|
#define BLE_ERROR_INVALID_ATTR_HANDLE (NRF_ERROR_STK_BASE_NUM+0x003) /**< Invalid attribute handle. */
|
||||||
#define BLE_ERROR_NO_TX_PACKETS (NRF_ERROR_STK_BASE_NUM+0x004) /**< Not enough application packets available on this connection. */
|
#define BLE_ERROR_INVALID_ADV_HANDLE (NRF_ERROR_STK_BASE_NUM+0x004) /**< Invalid advertising handle. */
|
||||||
#define BLE_ERROR_INVALID_ROLE (NRF_ERROR_STK_BASE_NUM+0x005) /**< Invalid role. */
|
#define BLE_ERROR_INVALID_ROLE (NRF_ERROR_STK_BASE_NUM+0x005) /**< Invalid role. */
|
||||||
#define BLE_ERROR_BLOCKED_BY_OTHER_LINKS (NRF_ERROR_STK_BASE_NUM+0x006) /**< The attempt to change link settings failed due to the scheduling of other links. */
|
#define BLE_ERROR_BLOCKED_BY_OTHER_LINKS (NRF_ERROR_STK_BASE_NUM+0x006) /**< The attempt to change link settings failed due to the scheduling of other links. */
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
|
||||||
/** @defgroup BLE_ERROR_SUBRANGES Module specific error code subranges
|
/** @defgroup BLE_ERROR_SUBRANGES Module specific error code subranges
|
||||||
* @brief Assignment of subranges for module specific error codes.
|
* @brief Assignment of subranges for module specific error codes.
|
||||||
* @note For specific error codes, see ble_<module>.h or ble_error_<module>.h.
|
* @note For specific error codes, see ble_<module>.h or ble_error_<module>.h.
|
||||||
* @{ */
|
* @{ */
|
||||||
#define NRF_L2CAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x100) /**< L2CAP specific errors. */
|
#define NRF_L2CAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x100) /**< L2CAP specific errors. */
|
||||||
#define NRF_GAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x200) /**< GAP specific errors. */
|
#define NRF_GAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x200) /**< GAP specific errors. */
|
||||||
#define NRF_GATTC_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x300) /**< GATT client specific errors. */
|
#define NRF_GATTC_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x300) /**< GATT client specific errors. */
|
||||||
#define NRF_GATTS_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x400) /**< GATT server specific errors. */
|
#define NRF_GATTS_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x400) /**< GATT server specific errors. */
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@}
|
@}
|
||||||
@}
|
@}
|
||||||
*/
|
*/
|
File diff suppressed because it is too large
Load Diff
@ -1,223 +1,228 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2013 - 2017, Nordic Semiconductor ASA
|
* Copyright (c) 2013 - 2017, Nordic Semiconductor ASA
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modification,
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
* are permitted provided that the following conditions are met:
|
* are permitted provided that the following conditions are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
* list of conditions and the following disclaimer.
|
* list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* 2. Redistributions in binary form, except as embedded into a Nordic
|
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||||
* Semiconductor ASA integrated circuit in a product or a software update for
|
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||||
* such product, must reproduce the above copyright notice, this list of
|
* such product, must reproduce the above copyright notice, this list of
|
||||||
* conditions and the following disclaimer in the documentation and/or other
|
* conditions and the following disclaimer in the documentation and/or other
|
||||||
* materials provided with the distribution.
|
* materials provided with the distribution.
|
||||||
*
|
*
|
||||||
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||||
* contributors may be used to endorse or promote products derived from this
|
* contributors may be used to endorse or promote products derived from this
|
||||||
* software without specific prior written permission.
|
* software without specific prior written permission.
|
||||||
*
|
*
|
||||||
* 4. This software, with or without modification, must only be used with a
|
* 4. This software, with or without modification, must only be used with a
|
||||||
* Nordic Semiconductor ASA integrated circuit.
|
* Nordic Semiconductor ASA integrated circuit.
|
||||||
*
|
*
|
||||||
* 5. Any software provided in binary form under this license must not be reverse
|
* 5. Any software provided in binary form under this license must not be reverse
|
||||||
* engineered, decompiled, modified and/or disassembled.
|
* engineered, decompiled, modified and/or disassembled.
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@addtogroup BLE_GATT Generic Attribute Profile (GATT) Common
|
@addtogroup BLE_GATT Generic Attribute Profile (GATT) Common
|
||||||
@{
|
@{
|
||||||
@brief Common definitions and prototypes for the GATT interfaces.
|
@brief Common definitions and prototypes for the GATT interfaces.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef BLE_GATT_H__
|
#ifndef BLE_GATT_H__
|
||||||
#define BLE_GATT_H__
|
#define BLE_GATT_H__
|
||||||
|
|
||||||
#include "ble_types.h"
|
#include <stdint.h>
|
||||||
#include "ble_ranges.h"
|
#include "nrf_svc.h"
|
||||||
|
#include "nrf_error.h"
|
||||||
#ifdef __cplusplus
|
#include "ble_hci.h"
|
||||||
extern "C" {
|
#include "ble_ranges.h"
|
||||||
#endif
|
#include "ble_types.h"
|
||||||
|
#include "ble_err.h"
|
||||||
/** @addtogroup BLE_GATT_DEFINES Defines
|
|
||||||
* @{ */
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
/** @brief Default ATT MTU, in bytes. */
|
#endif
|
||||||
#define BLE_GATT_ATT_MTU_DEFAULT 23
|
|
||||||
|
/** @addtogroup BLE_GATT_DEFINES Defines
|
||||||
/**@brief Invalid Attribute Handle. */
|
* @{ */
|
||||||
#define BLE_GATT_HANDLE_INVALID 0x0000
|
|
||||||
|
/** @brief Default ATT MTU, in bytes. */
|
||||||
/**@brief First Attribute Handle. */
|
#define BLE_GATT_ATT_MTU_DEFAULT 23
|
||||||
#define BLE_GATT_HANDLE_START 0x0001
|
|
||||||
|
/**@brief Invalid Attribute Handle. */
|
||||||
/**@brief Last Attribute Handle. */
|
#define BLE_GATT_HANDLE_INVALID 0x0000
|
||||||
#define BLE_GATT_HANDLE_END 0xFFFF
|
|
||||||
|
/**@brief First Attribute Handle. */
|
||||||
/** @defgroup BLE_GATT_TIMEOUT_SOURCES GATT Timeout sources
|
#define BLE_GATT_HANDLE_START 0x0001
|
||||||
* @{ */
|
|
||||||
#define BLE_GATT_TIMEOUT_SRC_PROTOCOL 0x00 /**< ATT Protocol timeout. */
|
/**@brief Last Attribute Handle. */
|
||||||
/** @} */
|
#define BLE_GATT_HANDLE_END 0xFFFF
|
||||||
|
|
||||||
/** @defgroup BLE_GATT_WRITE_OPS GATT Write operations
|
/** @defgroup BLE_GATT_TIMEOUT_SOURCES GATT Timeout sources
|
||||||
* @{ */
|
* @{ */
|
||||||
#define BLE_GATT_OP_INVALID 0x00 /**< Invalid Operation. */
|
#define BLE_GATT_TIMEOUT_SRC_PROTOCOL 0x00 /**< ATT Protocol timeout. */
|
||||||
#define BLE_GATT_OP_WRITE_REQ 0x01 /**< Write Request. */
|
/** @} */
|
||||||
#define BLE_GATT_OP_WRITE_CMD 0x02 /**< Write Command. */
|
|
||||||
#define BLE_GATT_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */
|
/** @defgroup BLE_GATT_WRITE_OPS GATT Write operations
|
||||||
#define BLE_GATT_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */
|
* @{ */
|
||||||
#define BLE_GATT_OP_EXEC_WRITE_REQ 0x05 /**< Execute Write Request. */
|
#define BLE_GATT_OP_INVALID 0x00 /**< Invalid Operation. */
|
||||||
/** @} */
|
#define BLE_GATT_OP_WRITE_REQ 0x01 /**< Write Request. */
|
||||||
|
#define BLE_GATT_OP_WRITE_CMD 0x02 /**< Write Command. */
|
||||||
/** @defgroup BLE_GATT_EXEC_WRITE_FLAGS GATT Execute Write flags
|
#define BLE_GATT_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */
|
||||||
* @{ */
|
#define BLE_GATT_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */
|
||||||
#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_CANCEL 0x00 /**< Cancel prepared write. */
|
#define BLE_GATT_OP_EXEC_WRITE_REQ 0x05 /**< Execute Write Request. */
|
||||||
#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE 0x01 /**< Execute prepared write. */
|
/** @} */
|
||||||
/** @} */
|
|
||||||
|
/** @defgroup BLE_GATT_EXEC_WRITE_FLAGS GATT Execute Write flags
|
||||||
/** @defgroup BLE_GATT_HVX_TYPES GATT Handle Value operations
|
* @{ */
|
||||||
* @{ */
|
#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_CANCEL 0x00 /**< Cancel prepared write. */
|
||||||
#define BLE_GATT_HVX_INVALID 0x00 /**< Invalid Operation. */
|
#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE 0x01 /**< Execute prepared write. */
|
||||||
#define BLE_GATT_HVX_NOTIFICATION 0x01 /**< Handle Value Notification. */
|
/** @} */
|
||||||
#define BLE_GATT_HVX_INDICATION 0x02 /**< Handle Value Indication. */
|
|
||||||
/** @} */
|
/** @defgroup BLE_GATT_HVX_TYPES GATT Handle Value operations
|
||||||
|
* @{ */
|
||||||
/** @defgroup BLE_GATT_STATUS_CODES GATT Status Codes
|
#define BLE_GATT_HVX_INVALID 0x00 /**< Invalid Operation. */
|
||||||
* @{ */
|
#define BLE_GATT_HVX_NOTIFICATION 0x01 /**< Handle Value Notification. */
|
||||||
#define BLE_GATT_STATUS_SUCCESS 0x0000 /**< Success. */
|
#define BLE_GATT_HVX_INDICATION 0x02 /**< Handle Value Indication. */
|
||||||
#define BLE_GATT_STATUS_UNKNOWN 0x0001 /**< Unknown or not applicable status. */
|
/** @} */
|
||||||
#define BLE_GATT_STATUS_ATTERR_INVALID 0x0100 /**< ATT Error: Invalid Error Code. */
|
|
||||||
#define BLE_GATT_STATUS_ATTERR_INVALID_HANDLE 0x0101 /**< ATT Error: Invalid Attribute Handle. */
|
/** @defgroup BLE_GATT_STATUS_CODES GATT Status Codes
|
||||||
#define BLE_GATT_STATUS_ATTERR_READ_NOT_PERMITTED 0x0102 /**< ATT Error: Read not permitted. */
|
* @{ */
|
||||||
#define BLE_GATT_STATUS_ATTERR_WRITE_NOT_PERMITTED 0x0103 /**< ATT Error: Write not permitted. */
|
#define BLE_GATT_STATUS_SUCCESS 0x0000 /**< Success. */
|
||||||
#define BLE_GATT_STATUS_ATTERR_INVALID_PDU 0x0104 /**< ATT Error: Used in ATT as Invalid PDU. */
|
#define BLE_GATT_STATUS_UNKNOWN 0x0001 /**< Unknown or not applicable status. */
|
||||||
#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHENTICATION 0x0105 /**< ATT Error: Authenticated link required. */
|
#define BLE_GATT_STATUS_ATTERR_INVALID 0x0100 /**< ATT Error: Invalid Error Code. */
|
||||||
#define BLE_GATT_STATUS_ATTERR_REQUEST_NOT_SUPPORTED 0x0106 /**< ATT Error: Used in ATT as Request Not Supported. */
|
#define BLE_GATT_STATUS_ATTERR_INVALID_HANDLE 0x0101 /**< ATT Error: Invalid Attribute Handle. */
|
||||||
#define BLE_GATT_STATUS_ATTERR_INVALID_OFFSET 0x0107 /**< ATT Error: Offset specified was past the end of the attribute. */
|
#define BLE_GATT_STATUS_ATTERR_READ_NOT_PERMITTED 0x0102 /**< ATT Error: Read not permitted. */
|
||||||
#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHORIZATION 0x0108 /**< ATT Error: Used in ATT as Insufficient Authorization. */
|
#define BLE_GATT_STATUS_ATTERR_WRITE_NOT_PERMITTED 0x0103 /**< ATT Error: Write not permitted. */
|
||||||
#define BLE_GATT_STATUS_ATTERR_PREPARE_QUEUE_FULL 0x0109 /**< ATT Error: Used in ATT as Prepare Queue Full. */
|
#define BLE_GATT_STATUS_ATTERR_INVALID_PDU 0x0104 /**< ATT Error: Used in ATT as Invalid PDU. */
|
||||||
#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND 0x010A /**< ATT Error: Used in ATT as Attribute not found. */
|
#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHENTICATION 0x0105 /**< ATT Error: Authenticated link required. */
|
||||||
#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_LONG 0x010B /**< ATT Error: Attribute cannot be read or written using read/write blob requests. */
|
#define BLE_GATT_STATUS_ATTERR_REQUEST_NOT_SUPPORTED 0x0106 /**< ATT Error: Used in ATT as Request Not Supported. */
|
||||||
#define BLE_GATT_STATUS_ATTERR_INSUF_ENC_KEY_SIZE 0x010C /**< ATT Error: Encryption key size used is insufficient. */
|
#define BLE_GATT_STATUS_ATTERR_INVALID_OFFSET 0x0107 /**< ATT Error: Offset specified was past the end of the attribute. */
|
||||||
#define BLE_GATT_STATUS_ATTERR_INVALID_ATT_VAL_LENGTH 0x010D /**< ATT Error: Invalid value size. */
|
#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHORIZATION 0x0108 /**< ATT Error: Used in ATT as Insufficient Authorization. */
|
||||||
#define BLE_GATT_STATUS_ATTERR_UNLIKELY_ERROR 0x010E /**< ATT Error: Very unlikely error. */
|
#define BLE_GATT_STATUS_ATTERR_PREPARE_QUEUE_FULL 0x0109 /**< ATT Error: Used in ATT as Prepare Queue Full. */
|
||||||
#define BLE_GATT_STATUS_ATTERR_INSUF_ENCRYPTION 0x010F /**< ATT Error: Encrypted link required. */
|
#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND 0x010A /**< ATT Error: Used in ATT as Attribute not found. */
|
||||||
#define BLE_GATT_STATUS_ATTERR_UNSUPPORTED_GROUP_TYPE 0x0110 /**< ATT Error: Attribute type is not a supported grouping attribute. */
|
#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_LONG 0x010B /**< ATT Error: Attribute cannot be read or written using read/write blob requests. */
|
||||||
#define BLE_GATT_STATUS_ATTERR_INSUF_RESOURCES 0x0111 /**< ATT Error: Encrypted link required. */
|
#define BLE_GATT_STATUS_ATTERR_INSUF_ENC_KEY_SIZE 0x010C /**< ATT Error: Encryption key size used is insufficient. */
|
||||||
#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_BEGIN 0x0112 /**< ATT Error: Reserved for Future Use range #1 begin. */
|
#define BLE_GATT_STATUS_ATTERR_INVALID_ATT_VAL_LENGTH 0x010D /**< ATT Error: Invalid value size. */
|
||||||
#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_END 0x017F /**< ATT Error: Reserved for Future Use range #1 end. */
|
#define BLE_GATT_STATUS_ATTERR_UNLIKELY_ERROR 0x010E /**< ATT Error: Very unlikely error. */
|
||||||
#define BLE_GATT_STATUS_ATTERR_APP_BEGIN 0x0180 /**< ATT Error: Application range begin. */
|
#define BLE_GATT_STATUS_ATTERR_INSUF_ENCRYPTION 0x010F /**< ATT Error: Encrypted link required. */
|
||||||
#define BLE_GATT_STATUS_ATTERR_APP_END 0x019F /**< ATT Error: Application range end. */
|
#define BLE_GATT_STATUS_ATTERR_UNSUPPORTED_GROUP_TYPE 0x0110 /**< ATT Error: Attribute type is not a supported grouping attribute. */
|
||||||
#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_BEGIN 0x01A0 /**< ATT Error: Reserved for Future Use range #2 begin. */
|
#define BLE_GATT_STATUS_ATTERR_INSUF_RESOURCES 0x0111 /**< ATT Error: Encrypted link required. */
|
||||||
#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_END 0x01DF /**< ATT Error: Reserved for Future Use range #2 end. */
|
#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_BEGIN 0x0112 /**< ATT Error: Reserved for Future Use range #1 begin. */
|
||||||
#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_BEGIN 0x01E0 /**< ATT Error: Reserved for Future Use range #3 begin. */
|
#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_END 0x017F /**< ATT Error: Reserved for Future Use range #1 end. */
|
||||||
#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_END 0x01FC /**< ATT Error: Reserved for Future Use range #3 end. */
|
#define BLE_GATT_STATUS_ATTERR_APP_BEGIN 0x0180 /**< ATT Error: Application range begin. */
|
||||||
#define BLE_GATT_STATUS_ATTERR_CPS_CCCD_CONFIG_ERROR 0x01FD /**< ATT Common Profile and Service Error: Client Characteristic Configuration Descriptor improperly configured. */
|
#define BLE_GATT_STATUS_ATTERR_APP_END 0x019F /**< ATT Error: Application range end. */
|
||||||
#define BLE_GATT_STATUS_ATTERR_CPS_PROC_ALR_IN_PROG 0x01FE /**< ATT Common Profile and Service Error: Procedure Already in Progress. */
|
#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_BEGIN 0x01A0 /**< ATT Error: Reserved for Future Use range #2 begin. */
|
||||||
#define BLE_GATT_STATUS_ATTERR_CPS_OUT_OF_RANGE 0x01FF /**< ATT Common Profile and Service Error: Out Of Range. */
|
#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_END 0x01DF /**< ATT Error: Reserved for Future Use range #2 end. */
|
||||||
/** @} */
|
#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_BEGIN 0x01E0 /**< ATT Error: Reserved for Future Use range #3 begin. */
|
||||||
|
#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_END 0x01FC /**< ATT Error: Reserved for Future Use range #3 end. */
|
||||||
|
#define BLE_GATT_STATUS_ATTERR_CPS_CCCD_CONFIG_ERROR 0x01FD /**< ATT Common Profile and Service Error: Client Characteristic Configuration Descriptor improperly configured. */
|
||||||
/** @defgroup BLE_GATT_CPF_FORMATS Characteristic Presentation Formats
|
#define BLE_GATT_STATUS_ATTERR_CPS_PROC_ALR_IN_PROG 0x01FE /**< ATT Common Profile and Service Error: Procedure Already in Progress. */
|
||||||
* @note Found at http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml
|
#define BLE_GATT_STATUS_ATTERR_CPS_OUT_OF_RANGE 0x01FF /**< ATT Common Profile and Service Error: Out Of Range. */
|
||||||
* @{ */
|
/** @} */
|
||||||
#define BLE_GATT_CPF_FORMAT_RFU 0x00 /**< Reserved For Future Use. */
|
|
||||||
#define BLE_GATT_CPF_FORMAT_BOOLEAN 0x01 /**< Boolean. */
|
|
||||||
#define BLE_GATT_CPF_FORMAT_2BIT 0x02 /**< Unsigned 2-bit integer. */
|
/** @defgroup BLE_GATT_CPF_FORMATS Characteristic Presentation Formats
|
||||||
#define BLE_GATT_CPF_FORMAT_NIBBLE 0x03 /**< Unsigned 4-bit integer. */
|
* @note Found at http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml
|
||||||
#define BLE_GATT_CPF_FORMAT_UINT8 0x04 /**< Unsigned 8-bit integer. */
|
* @{ */
|
||||||
#define BLE_GATT_CPF_FORMAT_UINT12 0x05 /**< Unsigned 12-bit integer. */
|
#define BLE_GATT_CPF_FORMAT_RFU 0x00 /**< Reserved For Future Use. */
|
||||||
#define BLE_GATT_CPF_FORMAT_UINT16 0x06 /**< Unsigned 16-bit integer. */
|
#define BLE_GATT_CPF_FORMAT_BOOLEAN 0x01 /**< Boolean. */
|
||||||
#define BLE_GATT_CPF_FORMAT_UINT24 0x07 /**< Unsigned 24-bit integer. */
|
#define BLE_GATT_CPF_FORMAT_2BIT 0x02 /**< Unsigned 2-bit integer. */
|
||||||
#define BLE_GATT_CPF_FORMAT_UINT32 0x08 /**< Unsigned 32-bit integer. */
|
#define BLE_GATT_CPF_FORMAT_NIBBLE 0x03 /**< Unsigned 4-bit integer. */
|
||||||
#define BLE_GATT_CPF_FORMAT_UINT48 0x09 /**< Unsigned 48-bit integer. */
|
#define BLE_GATT_CPF_FORMAT_UINT8 0x04 /**< Unsigned 8-bit integer. */
|
||||||
#define BLE_GATT_CPF_FORMAT_UINT64 0x0A /**< Unsigned 64-bit integer. */
|
#define BLE_GATT_CPF_FORMAT_UINT12 0x05 /**< Unsigned 12-bit integer. */
|
||||||
#define BLE_GATT_CPF_FORMAT_UINT128 0x0B /**< Unsigned 128-bit integer. */
|
#define BLE_GATT_CPF_FORMAT_UINT16 0x06 /**< Unsigned 16-bit integer. */
|
||||||
#define BLE_GATT_CPF_FORMAT_SINT8 0x0C /**< Signed 2-bit integer. */
|
#define BLE_GATT_CPF_FORMAT_UINT24 0x07 /**< Unsigned 24-bit integer. */
|
||||||
#define BLE_GATT_CPF_FORMAT_SINT12 0x0D /**< Signed 12-bit integer. */
|
#define BLE_GATT_CPF_FORMAT_UINT32 0x08 /**< Unsigned 32-bit integer. */
|
||||||
#define BLE_GATT_CPF_FORMAT_SINT16 0x0E /**< Signed 16-bit integer. */
|
#define BLE_GATT_CPF_FORMAT_UINT48 0x09 /**< Unsigned 48-bit integer. */
|
||||||
#define BLE_GATT_CPF_FORMAT_SINT24 0x0F /**< Signed 24-bit integer. */
|
#define BLE_GATT_CPF_FORMAT_UINT64 0x0A /**< Unsigned 64-bit integer. */
|
||||||
#define BLE_GATT_CPF_FORMAT_SINT32 0x10 /**< Signed 32-bit integer. */
|
#define BLE_GATT_CPF_FORMAT_UINT128 0x0B /**< Unsigned 128-bit integer. */
|
||||||
#define BLE_GATT_CPF_FORMAT_SINT48 0x11 /**< Signed 48-bit integer. */
|
#define BLE_GATT_CPF_FORMAT_SINT8 0x0C /**< Signed 2-bit integer. */
|
||||||
#define BLE_GATT_CPF_FORMAT_SINT64 0x12 /**< Signed 64-bit integer. */
|
#define BLE_GATT_CPF_FORMAT_SINT12 0x0D /**< Signed 12-bit integer. */
|
||||||
#define BLE_GATT_CPF_FORMAT_SINT128 0x13 /**< Signed 128-bit integer. */
|
#define BLE_GATT_CPF_FORMAT_SINT16 0x0E /**< Signed 16-bit integer. */
|
||||||
#define BLE_GATT_CPF_FORMAT_FLOAT32 0x14 /**< IEEE-754 32-bit floating point. */
|
#define BLE_GATT_CPF_FORMAT_SINT24 0x0F /**< Signed 24-bit integer. */
|
||||||
#define BLE_GATT_CPF_FORMAT_FLOAT64 0x15 /**< IEEE-754 64-bit floating point. */
|
#define BLE_GATT_CPF_FORMAT_SINT32 0x10 /**< Signed 32-bit integer. */
|
||||||
#define BLE_GATT_CPF_FORMAT_SFLOAT 0x16 /**< IEEE-11073 16-bit SFLOAT. */
|
#define BLE_GATT_CPF_FORMAT_SINT48 0x11 /**< Signed 48-bit integer. */
|
||||||
#define BLE_GATT_CPF_FORMAT_FLOAT 0x17 /**< IEEE-11073 32-bit FLOAT. */
|
#define BLE_GATT_CPF_FORMAT_SINT64 0x12 /**< Signed 64-bit integer. */
|
||||||
#define BLE_GATT_CPF_FORMAT_DUINT16 0x18 /**< IEEE-20601 format. */
|
#define BLE_GATT_CPF_FORMAT_SINT128 0x13 /**< Signed 128-bit integer. */
|
||||||
#define BLE_GATT_CPF_FORMAT_UTF8S 0x19 /**< UTF-8 string. */
|
#define BLE_GATT_CPF_FORMAT_FLOAT32 0x14 /**< IEEE-754 32-bit floating point. */
|
||||||
#define BLE_GATT_CPF_FORMAT_UTF16S 0x1A /**< UTF-16 string. */
|
#define BLE_GATT_CPF_FORMAT_FLOAT64 0x15 /**< IEEE-754 64-bit floating point. */
|
||||||
#define BLE_GATT_CPF_FORMAT_STRUCT 0x1B /**< Opaque Structure. */
|
#define BLE_GATT_CPF_FORMAT_SFLOAT 0x16 /**< IEEE-11073 16-bit SFLOAT. */
|
||||||
/** @} */
|
#define BLE_GATT_CPF_FORMAT_FLOAT 0x17 /**< IEEE-11073 32-bit FLOAT. */
|
||||||
|
#define BLE_GATT_CPF_FORMAT_DUINT16 0x18 /**< IEEE-20601 format. */
|
||||||
/** @defgroup BLE_GATT_CPF_NAMESPACES GATT Bluetooth Namespaces
|
#define BLE_GATT_CPF_FORMAT_UTF8S 0x19 /**< UTF-8 string. */
|
||||||
* @{
|
#define BLE_GATT_CPF_FORMAT_UTF16S 0x1A /**< UTF-16 string. */
|
||||||
*/
|
#define BLE_GATT_CPF_FORMAT_STRUCT 0x1B /**< Opaque Structure. */
|
||||||
#define BLE_GATT_CPF_NAMESPACE_BTSIG 0x01 /**< Bluetooth SIG defined Namespace. */
|
/** @} */
|
||||||
#define BLE_GATT_CPF_NAMESPACE_DESCRIPTION_UNKNOWN 0x0000 /**< Namespace Description Unknown. */
|
|
||||||
/** @} */
|
/** @defgroup BLE_GATT_CPF_NAMESPACES GATT Bluetooth Namespaces
|
||||||
|
* @{
|
||||||
/** @} */
|
*/
|
||||||
|
#define BLE_GATT_CPF_NAMESPACE_BTSIG 0x01 /**< Bluetooth SIG defined Namespace. */
|
||||||
/** @addtogroup BLE_GATT_STRUCTURES Structures
|
#define BLE_GATT_CPF_NAMESPACE_DESCRIPTION_UNKNOWN 0x0000 /**< Namespace Description Unknown. */
|
||||||
* @{ */
|
/** @} */
|
||||||
|
|
||||||
/**
|
/** @} */
|
||||||
* @brief BLE GATT connection configuration parameters, set with @ref sd_ble_cfg_set.
|
|
||||||
*
|
/** @addtogroup BLE_GATT_STRUCTURES Structures
|
||||||
* @retval ::NRF_ERROR_INVALID_PARAM att_mtu is smaller than @ref BLE_GATT_ATT_MTU_DEFAULT.
|
* @{ */
|
||||||
*/
|
|
||||||
typedef struct
|
/**
|
||||||
{
|
* @brief BLE GATT connection configuration parameters, set with @ref sd_ble_cfg_set.
|
||||||
uint16_t att_mtu; /**< Maximum size of ATT packet the SoftDevice can send or receive.
|
*
|
||||||
The default and minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT.
|
* @retval ::NRF_ERROR_INVALID_PARAM att_mtu is smaller than @ref BLE_GATT_ATT_MTU_DEFAULT.
|
||||||
@mscs
|
*/
|
||||||
@mmsc{@ref BLE_GATTC_MTU_EXCHANGE}
|
typedef struct
|
||||||
@mmsc{@ref BLE_GATTS_MTU_EXCHANGE}
|
{
|
||||||
@endmscs
|
uint16_t att_mtu; /**< Maximum size of ATT packet the SoftDevice can send or receive.
|
||||||
*/
|
The default and minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT.
|
||||||
} ble_gatt_conn_cfg_t;
|
@mscs
|
||||||
|
@mmsc{@ref BLE_GATTC_MTU_EXCHANGE}
|
||||||
/**@brief GATT Characteristic Properties. */
|
@mmsc{@ref BLE_GATTS_MTU_EXCHANGE}
|
||||||
typedef struct
|
@endmscs
|
||||||
{
|
*/
|
||||||
/* Standard properties */
|
} ble_gatt_conn_cfg_t;
|
||||||
uint8_t broadcast :1; /**< Broadcasting of the value permitted. */
|
|
||||||
uint8_t read :1; /**< Reading the value permitted. */
|
/**@brief GATT Characteristic Properties. */
|
||||||
uint8_t write_wo_resp :1; /**< Writing the value with Write Command permitted. */
|
typedef struct
|
||||||
uint8_t write :1; /**< Writing the value with Write Request permitted. */
|
{
|
||||||
uint8_t notify :1; /**< Notification of the value permitted. */
|
/* Standard properties */
|
||||||
uint8_t indicate :1; /**< Indications of the value permitted. */
|
uint8_t broadcast :1; /**< Broadcasting of the value permitted. */
|
||||||
uint8_t auth_signed_wr :1; /**< Writing the value with Signed Write Command permitted. */
|
uint8_t read :1; /**< Reading the value permitted. */
|
||||||
} ble_gatt_char_props_t;
|
uint8_t write_wo_resp :1; /**< Writing the value with Write Command permitted. */
|
||||||
|
uint8_t write :1; /**< Writing the value with Write Request permitted. */
|
||||||
/**@brief GATT Characteristic Extended Properties. */
|
uint8_t notify :1; /**< Notification of the value permitted. */
|
||||||
typedef struct
|
uint8_t indicate :1; /**< Indications of the value permitted. */
|
||||||
{
|
uint8_t auth_signed_wr :1; /**< Writing the value with Signed Write Command permitted. */
|
||||||
/* Extended properties */
|
} ble_gatt_char_props_t;
|
||||||
uint8_t reliable_wr :1; /**< Writing the value with Queued Write operations permitted. */
|
|
||||||
uint8_t wr_aux :1; /**< Writing the Characteristic User Description descriptor permitted. */
|
/**@brief GATT Characteristic Extended Properties. */
|
||||||
} ble_gatt_char_ext_props_t;
|
typedef struct
|
||||||
|
{
|
||||||
/** @} */
|
/* Extended properties */
|
||||||
|
uint8_t reliable_wr :1; /**< Writing the value with Queued Write operations permitted. */
|
||||||
#ifdef __cplusplus
|
uint8_t wr_aux :1; /**< Writing the Characteristic User Description descriptor permitted. */
|
||||||
}
|
} ble_gatt_char_ext_props_t;
|
||||||
#endif
|
|
||||||
#endif // BLE_GATT_H__
|
/** @} */
|
||||||
|
|
||||||
/** @} */
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif // BLE_GATT_H__
|
||||||
|
|
||||||
|
/** @} */
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,135 +1,135 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2012 - 2017, Nordic Semiconductor ASA
|
* Copyright (c) 2012 - 2017, Nordic Semiconductor ASA
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modification,
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
* are permitted provided that the following conditions are met:
|
* are permitted provided that the following conditions are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
* list of conditions and the following disclaimer.
|
* list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* 2. Redistributions in binary form, except as embedded into a Nordic
|
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||||
* Semiconductor ASA integrated circuit in a product or a software update for
|
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||||
* such product, must reproduce the above copyright notice, this list of
|
* such product, must reproduce the above copyright notice, this list of
|
||||||
* conditions and the following disclaimer in the documentation and/or other
|
* conditions and the following disclaimer in the documentation and/or other
|
||||||
* materials provided with the distribution.
|
* materials provided with the distribution.
|
||||||
*
|
*
|
||||||
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||||
* contributors may be used to endorse or promote products derived from this
|
* contributors may be used to endorse or promote products derived from this
|
||||||
* software without specific prior written permission.
|
* software without specific prior written permission.
|
||||||
*
|
*
|
||||||
* 4. This software, with or without modification, must only be used with a
|
* 4. This software, with or without modification, must only be used with a
|
||||||
* Nordic Semiconductor ASA integrated circuit.
|
* Nordic Semiconductor ASA integrated circuit.
|
||||||
*
|
*
|
||||||
* 5. Any software provided in binary form under this license must not be reverse
|
* 5. Any software provided in binary form under this license must not be reverse
|
||||||
* engineered, decompiled, modified and/or disassembled.
|
* engineered, decompiled, modified and/or disassembled.
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@addtogroup BLE_COMMON
|
@addtogroup BLE_COMMON
|
||||||
@{
|
@{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef BLE_HCI_H__
|
#ifndef BLE_HCI_H__
|
||||||
#define BLE_HCI_H__
|
#define BLE_HCI_H__
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** @defgroup BLE_HCI_STATUS_CODES Bluetooth status codes
|
/** @defgroup BLE_HCI_STATUS_CODES Bluetooth status codes
|
||||||
* @{ */
|
* @{ */
|
||||||
|
|
||||||
#define BLE_HCI_STATUS_CODE_SUCCESS 0x00 /**< Success. */
|
#define BLE_HCI_STATUS_CODE_SUCCESS 0x00 /**< Success. */
|
||||||
#define BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND 0x01 /**< Unknown BLE Command. */
|
#define BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND 0x01 /**< Unknown BLE Command. */
|
||||||
#define BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER 0x02 /**< Unknown Connection Identifier. */
|
#define BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER 0x02 /**< Unknown Connection Identifier. */
|
||||||
/*0x03 Hardware Failure
|
/*0x03 Hardware Failure
|
||||||
0x04 Page Timeout
|
0x04 Page Timeout
|
||||||
*/
|
*/
|
||||||
#define BLE_HCI_AUTHENTICATION_FAILURE 0x05 /**< Authentication Failure. */
|
#define BLE_HCI_AUTHENTICATION_FAILURE 0x05 /**< Authentication Failure. */
|
||||||
#define BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING 0x06 /**< Pin or Key missing. */
|
#define BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING 0x06 /**< Pin or Key missing. */
|
||||||
#define BLE_HCI_MEMORY_CAPACITY_EXCEEDED 0x07 /**< Memory Capacity Exceeded. */
|
#define BLE_HCI_MEMORY_CAPACITY_EXCEEDED 0x07 /**< Memory Capacity Exceeded. */
|
||||||
#define BLE_HCI_CONNECTION_TIMEOUT 0x08 /**< Connection Timeout. */
|
#define BLE_HCI_CONNECTION_TIMEOUT 0x08 /**< Connection Timeout. */
|
||||||
/*0x09 Connection Limit Exceeded
|
/*0x09 Connection Limit Exceeded
|
||||||
0x0A Synchronous Connection Limit To A Device Exceeded
|
0x0A Synchronous Connection Limit To A Device Exceeded
|
||||||
0x0B ACL Connection Already Exists*/
|
0x0B ACL Connection Already Exists*/
|
||||||
#define BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED 0x0C /**< Command Disallowed. */
|
#define BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED 0x0C /**< Command Disallowed. */
|
||||||
/*0x0D Connection Rejected due to Limited Resources
|
/*0x0D Connection Rejected due to Limited Resources
|
||||||
0x0E Connection Rejected Due To Security Reasons
|
0x0E Connection Rejected Due To Security Reasons
|
||||||
0x0F Connection Rejected due to Unacceptable BD_ADDR
|
0x0F Connection Rejected due to Unacceptable BD_ADDR
|
||||||
0x10 Connection Accept Timeout Exceeded
|
0x10 Connection Accept Timeout Exceeded
|
||||||
0x11 Unsupported Feature or Parameter Value*/
|
0x11 Unsupported Feature or Parameter Value*/
|
||||||
#define BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS 0x12 /**< Invalid BLE Command Parameters. */
|
#define BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS 0x12 /**< Invalid BLE Command Parameters. */
|
||||||
#define BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION 0x13 /**< Remote User Terminated Connection. */
|
#define BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION 0x13 /**< Remote User Terminated Connection. */
|
||||||
#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES 0x14 /**< Remote Device Terminated Connection due to low resources.*/
|
#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES 0x14 /**< Remote Device Terminated Connection due to low resources.*/
|
||||||
#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF 0x15 /**< Remote Device Terminated Connection due to power off. */
|
#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF 0x15 /**< Remote Device Terminated Connection due to power off. */
|
||||||
#define BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION 0x16 /**< Local Host Terminated Connection. */
|
#define BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION 0x16 /**< Local Host Terminated Connection. */
|
||||||
/*
|
/*
|
||||||
0x17 Repeated Attempts
|
0x17 Repeated Attempts
|
||||||
0x18 Pairing Not Allowed
|
0x18 Pairing Not Allowed
|
||||||
0x19 Unknown LMP PDU
|
0x19 Unknown LMP PDU
|
||||||
*/
|
*/
|
||||||
#define BLE_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1A /**< Unsupported Remote Feature. */
|
#define BLE_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1A /**< Unsupported Remote Feature. */
|
||||||
/*
|
/*
|
||||||
0x1B SCO Offset Rejected
|
0x1B SCO Offset Rejected
|
||||||
0x1C SCO Interval Rejected
|
0x1C SCO Interval Rejected
|
||||||
0x1D SCO Air Mode Rejected*/
|
0x1D SCO Air Mode Rejected*/
|
||||||
#define BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS 0x1E /**< Invalid LMP Parameters. */
|
#define BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS 0x1E /**< Invalid LMP Parameters. */
|
||||||
#define BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR 0x1F /**< Unspecified Error. */
|
#define BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR 0x1F /**< Unspecified Error. */
|
||||||
/*0x20 Unsupported LMP Parameter Value
|
/*0x20 Unsupported LMP Parameter Value
|
||||||
0x21 Role Change Not Allowed
|
0x21 Role Change Not Allowed
|
||||||
*/
|
*/
|
||||||
#define BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT 0x22 /**< LMP Response Timeout. */
|
#define BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT 0x22 /**< LMP Response Timeout. */
|
||||||
#define BLE_HCI_STATUS_CODE_LMP_ERROR_TRANSACTION_COLLISION 0x23 /**< LMP Error Transaction Collision/LL Procedure Collision. */
|
#define BLE_HCI_STATUS_CODE_LMP_ERROR_TRANSACTION_COLLISION 0x23 /**< LMP Error Transaction Collision/LL Procedure Collision. */
|
||||||
#define BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED 0x24 /**< LMP PDU Not Allowed. */
|
#define BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED 0x24 /**< LMP PDU Not Allowed. */
|
||||||
/*0x25 Encryption Mode Not Acceptable
|
/*0x25 Encryption Mode Not Acceptable
|
||||||
0x26 Link Key Can Not be Changed
|
0x26 Link Key Can Not be Changed
|
||||||
0x27 Requested QoS Not Supported
|
0x27 Requested QoS Not Supported
|
||||||
*/
|
*/
|
||||||
#define BLE_HCI_INSTANT_PASSED 0x28 /**< Instant Passed. */
|
#define BLE_HCI_INSTANT_PASSED 0x28 /**< Instant Passed. */
|
||||||
#define BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED 0x29 /**< Pairing with Unit Key Unsupported. */
|
#define BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED 0x29 /**< Pairing with Unit Key Unsupported. */
|
||||||
#define BLE_HCI_DIFFERENT_TRANSACTION_COLLISION 0x2A /**< Different Transaction Collision. */
|
#define BLE_HCI_DIFFERENT_TRANSACTION_COLLISION 0x2A /**< Different Transaction Collision. */
|
||||||
/*
|
/*
|
||||||
0x2B Reserved
|
0x2B Reserved
|
||||||
0x2C QoS Unacceptable Parameter
|
0x2C QoS Unacceptable Parameter
|
||||||
0x2D QoS Rejected
|
0x2D QoS Rejected
|
||||||
0x2E Channel Classification Not Supported
|
0x2E Channel Classification Not Supported
|
||||||
0x2F Insufficient Security
|
0x2F Insufficient Security
|
||||||
*/
|
*/
|
||||||
#define BLE_HCI_PARAMETER_OUT_OF_MANDATORY_RANGE 0x30 /**< Parameter Out Of Mandatory Range. */
|
#define BLE_HCI_PARAMETER_OUT_OF_MANDATORY_RANGE 0x30 /**< Parameter Out Of Mandatory Range. */
|
||||||
/*
|
/*
|
||||||
0x31 Reserved
|
0x31 Reserved
|
||||||
0x32 Role Switch Pending
|
0x32 Role Switch Pending
|
||||||
0x33 Reserved
|
0x33 Reserved
|
||||||
0x34 Reserved Slot Violation
|
0x34 Reserved Slot Violation
|
||||||
0x35 Role Switch Failed
|
0x35 Role Switch Failed
|
||||||
0x36 Extended Inquiry Response Too Large
|
0x36 Extended Inquiry Response Too Large
|
||||||
0x37 Secure Simple Pairing Not Supported By Host.
|
0x37 Secure Simple Pairing Not Supported By Host.
|
||||||
0x38 Host Busy - Pairing
|
0x38 Host Busy - Pairing
|
||||||
0x39 Connection Rejected due to No Suitable Channel Found*/
|
0x39 Connection Rejected due to No Suitable Channel Found*/
|
||||||
#define BLE_HCI_CONTROLLER_BUSY 0x3A /**< Controller Busy. */
|
#define BLE_HCI_CONTROLLER_BUSY 0x3A /**< Controller Busy. */
|
||||||
#define BLE_HCI_CONN_INTERVAL_UNACCEPTABLE 0x3B /**< Connection Interval Unacceptable. */
|
#define BLE_HCI_CONN_INTERVAL_UNACCEPTABLE 0x3B /**< Connection Interval Unacceptable. */
|
||||||
#define BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT 0x3C /**< Directed Advertisement Timeout. */
|
#define BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT 0x3C /**< Directed Advertisement Timeout. */
|
||||||
#define BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE 0x3D /**< Connection Terminated due to MIC Failure. */
|
#define BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE 0x3D /**< Connection Terminated due to MIC Failure. */
|
||||||
#define BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED 0x3E /**< Connection Failed to be Established. */
|
#define BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED 0x3E /**< Connection Failed to be Established. */
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif // BLE_HCI_H__
|
#endif // BLE_HCI_H__
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
File diff suppressed because it is too large
Load Diff
@ -1,156 +1,156 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2012 - 2017, Nordic Semiconductor ASA
|
* Copyright (c) 2012 - 2018, Nordic Semiconductor ASA
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modification,
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
* are permitted provided that the following conditions are met:
|
* are permitted provided that the following conditions are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
* list of conditions and the following disclaimer.
|
* list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* 2. Redistributions in binary form, except as embedded into a Nordic
|
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||||
* Semiconductor ASA integrated circuit in a product or a software update for
|
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||||
* such product, must reproduce the above copyright notice, this list of
|
* such product, must reproduce the above copyright notice, this list of
|
||||||
* conditions and the following disclaimer in the documentation and/or other
|
* conditions and the following disclaimer in the documentation and/or other
|
||||||
* materials provided with the distribution.
|
* materials provided with the distribution.
|
||||||
*
|
*
|
||||||
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||||
* contributors may be used to endorse or promote products derived from this
|
* contributors may be used to endorse or promote products derived from this
|
||||||
* software without specific prior written permission.
|
* software without specific prior written permission.
|
||||||
*
|
*
|
||||||
* 4. This software, with or without modification, must only be used with a
|
* 4. This software, with or without modification, must only be used with a
|
||||||
* Nordic Semiconductor ASA integrated circuit.
|
* Nordic Semiconductor ASA integrated circuit.
|
||||||
*
|
*
|
||||||
* 5. Any software provided in binary form under this license must not be reverse
|
* 5. Any software provided in binary form under this license must not be reverse
|
||||||
* engineered, decompiled, modified and/or disassembled.
|
* engineered, decompiled, modified and/or disassembled.
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@addtogroup BLE_COMMON
|
@addtogroup BLE_COMMON
|
||||||
@{
|
@{
|
||||||
@defgroup ble_ranges Module specific SVC, event and option number subranges
|
@defgroup ble_ranges Module specific SVC, event and option number subranges
|
||||||
@{
|
@{
|
||||||
|
|
||||||
@brief Definition of SVC, event and option number subranges for each API module.
|
@brief Definition of SVC, event and option number subranges for each API module.
|
||||||
|
|
||||||
@note
|
@note
|
||||||
SVCs, event and option numbers are split into subranges for each API module.
|
SVCs, event and option numbers are split into subranges for each API module.
|
||||||
Each module receives its entire allocated range of SVC calls, whether implemented or not,
|
Each module receives its entire allocated range of SVC calls, whether implemented or not,
|
||||||
but return BLE_ERROR_NOT_SUPPORTED for unimplemented or undefined calls in its range.
|
but return BLE_ERROR_NOT_SUPPORTED for unimplemented or undefined calls in its range.
|
||||||
|
|
||||||
Note that the symbols BLE_<module>_SVC_LAST is the end of the allocated SVC range,
|
Note that the symbols BLE_<module>_SVC_LAST is the end of the allocated SVC range,
|
||||||
rather than the last SVC function call actually defined and implemented.
|
rather than the last SVC function call actually defined and implemented.
|
||||||
|
|
||||||
Specific SVC, event and option values are defined in each module's ble_<module>.h file,
|
Specific SVC, event and option values are defined in each module's ble_<module>.h file,
|
||||||
which defines names of each individual SVC code based on the range start value.
|
which defines names of each individual SVC code based on the range start value.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef BLE_RANGES_H__
|
#ifndef BLE_RANGES_H__
|
||||||
#define BLE_RANGES_H__
|
#define BLE_RANGES_H__
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define BLE_SVC_BASE 0x60 /**< Common BLE SVC base. */
|
#define BLE_SVC_BASE 0x60 /**< Common BLE SVC base. */
|
||||||
#define BLE_SVC_LAST 0x6B /**< Common BLE SVC last. */
|
#define BLE_SVC_LAST 0x6B /**< Common BLE SVC last. */
|
||||||
|
|
||||||
#define BLE_GAP_SVC_BASE 0x6C /**< GAP BLE SVC base. */
|
#define BLE_GAP_SVC_BASE 0x6C /**< GAP BLE SVC base. */
|
||||||
#define BLE_GAP_SVC_LAST 0x93 /**< GAP BLE SVC last. */
|
#define BLE_GAP_SVC_LAST 0x9A /**< GAP BLE SVC last. */
|
||||||
|
|
||||||
#define BLE_GATTC_SVC_BASE 0x94 /**< GATTC BLE SVC base. */
|
#define BLE_GATTC_SVC_BASE 0x9B /**< GATTC BLE SVC base. */
|
||||||
#define BLE_GATTC_SVC_LAST 0x9F /**< GATTC BLE SVC last. */
|
#define BLE_GATTC_SVC_LAST 0xA7 /**< GATTC BLE SVC last. */
|
||||||
|
|
||||||
#define BLE_GATTS_SVC_BASE 0xA0 /**< GATTS BLE SVC base. */
|
#define BLE_GATTS_SVC_BASE 0xA8 /**< GATTS BLE SVC base. */
|
||||||
#define BLE_GATTS_SVC_LAST 0xAF /**< GATTS BLE SVC last. */
|
#define BLE_GATTS_SVC_LAST 0xB7 /**< GATTS BLE SVC last. */
|
||||||
|
|
||||||
#define BLE_L2CAP_SVC_BASE 0xB0 /**< L2CAP BLE SVC base. */
|
#define BLE_L2CAP_SVC_BASE 0xB8 /**< L2CAP BLE SVC base. */
|
||||||
#define BLE_L2CAP_SVC_LAST 0xBF /**< L2CAP BLE SVC last. */
|
#define BLE_L2CAP_SVC_LAST 0xBF /**< L2CAP BLE SVC last. */
|
||||||
|
|
||||||
|
|
||||||
#define BLE_EVT_INVALID 0x00 /**< Invalid BLE Event. */
|
#define BLE_EVT_INVALID 0x00 /**< Invalid BLE Event. */
|
||||||
|
|
||||||
#define BLE_EVT_BASE 0x01 /**< Common BLE Event base. */
|
#define BLE_EVT_BASE 0x01 /**< Common BLE Event base. */
|
||||||
#define BLE_EVT_LAST 0x0F /**< Common BLE Event last. */
|
#define BLE_EVT_LAST 0x0F /**< Common BLE Event last. */
|
||||||
|
|
||||||
#define BLE_GAP_EVT_BASE 0x10 /**< GAP BLE Event base. */
|
#define BLE_GAP_EVT_BASE 0x10 /**< GAP BLE Event base. */
|
||||||
#define BLE_GAP_EVT_LAST 0x2F /**< GAP BLE Event last. */
|
#define BLE_GAP_EVT_LAST 0x2F /**< GAP BLE Event last. */
|
||||||
|
|
||||||
#define BLE_GATTC_EVT_BASE 0x30 /**< GATTC BLE Event base. */
|
#define BLE_GATTC_EVT_BASE 0x30 /**< GATTC BLE Event base. */
|
||||||
#define BLE_GATTC_EVT_LAST 0x4F /**< GATTC BLE Event last. */
|
#define BLE_GATTC_EVT_LAST 0x4F /**< GATTC BLE Event last. */
|
||||||
|
|
||||||
#define BLE_GATTS_EVT_BASE 0x50 /**< GATTS BLE Event base. */
|
#define BLE_GATTS_EVT_BASE 0x50 /**< GATTS BLE Event base. */
|
||||||
#define BLE_GATTS_EVT_LAST 0x6F /**< GATTS BLE Event last. */
|
#define BLE_GATTS_EVT_LAST 0x6F /**< GATTS BLE Event last. */
|
||||||
|
|
||||||
#define BLE_L2CAP_EVT_BASE 0x70 /**< L2CAP BLE Event base. */
|
#define BLE_L2CAP_EVT_BASE 0x70 /**< L2CAP BLE Event base. */
|
||||||
#define BLE_L2CAP_EVT_LAST 0x8F /**< L2CAP BLE Event last. */
|
#define BLE_L2CAP_EVT_LAST 0x8F /**< L2CAP BLE Event last. */
|
||||||
|
|
||||||
|
|
||||||
#define BLE_OPT_INVALID 0x00 /**< Invalid BLE Option. */
|
#define BLE_OPT_INVALID 0x00 /**< Invalid BLE Option. */
|
||||||
|
|
||||||
#define BLE_OPT_BASE 0x01 /**< Common BLE Option base. */
|
#define BLE_OPT_BASE 0x01 /**< Common BLE Option base. */
|
||||||
#define BLE_OPT_LAST 0x1F /**< Common BLE Option last. */
|
#define BLE_OPT_LAST 0x1F /**< Common BLE Option last. */
|
||||||
|
|
||||||
#define BLE_GAP_OPT_BASE 0x20 /**< GAP BLE Option base. */
|
#define BLE_GAP_OPT_BASE 0x20 /**< GAP BLE Option base. */
|
||||||
#define BLE_GAP_OPT_LAST 0x3F /**< GAP BLE Option last. */
|
#define BLE_GAP_OPT_LAST 0x3F /**< GAP BLE Option last. */
|
||||||
|
|
||||||
#define BLE_GATT_OPT_BASE 0x40 /**< GATT BLE Option base. */
|
#define BLE_GATT_OPT_BASE 0x40 /**< GATT BLE Option base. */
|
||||||
#define BLE_GATT_OPT_LAST 0x5F /**< GATT BLE Option last. */
|
#define BLE_GATT_OPT_LAST 0x5F /**< GATT BLE Option last. */
|
||||||
|
|
||||||
#define BLE_GATTC_OPT_BASE 0x60 /**< GATTC BLE Option base. */
|
#define BLE_GATTC_OPT_BASE 0x60 /**< GATTC BLE Option base. */
|
||||||
#define BLE_GATTC_OPT_LAST 0x7F /**< GATTC BLE Option last. */
|
#define BLE_GATTC_OPT_LAST 0x7F /**< GATTC BLE Option last. */
|
||||||
|
|
||||||
#define BLE_GATTS_OPT_BASE 0x80 /**< GATTS BLE Option base. */
|
#define BLE_GATTS_OPT_BASE 0x80 /**< GATTS BLE Option base. */
|
||||||
#define BLE_GATTS_OPT_LAST 0x9F /**< GATTS BLE Option last. */
|
#define BLE_GATTS_OPT_LAST 0x9F /**< GATTS BLE Option last. */
|
||||||
|
|
||||||
#define BLE_L2CAP_OPT_BASE 0xA0 /**< L2CAP BLE Option base. */
|
#define BLE_L2CAP_OPT_BASE 0xA0 /**< L2CAP BLE Option base. */
|
||||||
#define BLE_L2CAP_OPT_LAST 0xBF /**< L2CAP BLE Option last. */
|
#define BLE_L2CAP_OPT_LAST 0xBF /**< L2CAP BLE Option last. */
|
||||||
|
|
||||||
|
|
||||||
#define BLE_CFG_INVALID 0x00 /**< Invalid BLE configuration. */
|
#define BLE_CFG_INVALID 0x00 /**< Invalid BLE configuration. */
|
||||||
|
|
||||||
#define BLE_CFG_BASE 0x01 /**< Common BLE configuration base. */
|
#define BLE_CFG_BASE 0x01 /**< Common BLE configuration base. */
|
||||||
#define BLE_CFG_LAST 0x1F /**< Common BLE configuration last. */
|
#define BLE_CFG_LAST 0x1F /**< Common BLE configuration last. */
|
||||||
|
|
||||||
#define BLE_CONN_CFG_BASE 0x20 /**< BLE connection configuration base. */
|
#define BLE_CONN_CFG_BASE 0x20 /**< BLE connection configuration base. */
|
||||||
#define BLE_CONN_CFG_LAST 0x3F /**< BLE connection configuration last. */
|
#define BLE_CONN_CFG_LAST 0x3F /**< BLE connection configuration last. */
|
||||||
|
|
||||||
#define BLE_GAP_CFG_BASE 0x40 /**< GAP BLE configuration base. */
|
#define BLE_GAP_CFG_BASE 0x40 /**< GAP BLE configuration base. */
|
||||||
#define BLE_GAP_CFG_LAST 0x5F /**< GAP BLE configuration last. */
|
#define BLE_GAP_CFG_LAST 0x5F /**< GAP BLE configuration last. */
|
||||||
|
|
||||||
#define BLE_GATT_CFG_BASE 0x60 /**< GATT BLE configuration base. */
|
#define BLE_GATT_CFG_BASE 0x60 /**< GATT BLE configuration base. */
|
||||||
#define BLE_GATT_CFG_LAST 0x7F /**< GATT BLE configuration last. */
|
#define BLE_GATT_CFG_LAST 0x7F /**< GATT BLE configuration last. */
|
||||||
|
|
||||||
#define BLE_GATTC_CFG_BASE 0x80 /**< GATTC BLE configuration base. */
|
#define BLE_GATTC_CFG_BASE 0x80 /**< GATTC BLE configuration base. */
|
||||||
#define BLE_GATTC_CFG_LAST 0x9F /**< GATTC BLE configuration last. */
|
#define BLE_GATTC_CFG_LAST 0x9F /**< GATTC BLE configuration last. */
|
||||||
|
|
||||||
#define BLE_GATTS_CFG_BASE 0xA0 /**< GATTS BLE configuration base. */
|
#define BLE_GATTS_CFG_BASE 0xA0 /**< GATTS BLE configuration base. */
|
||||||
#define BLE_GATTS_CFG_LAST 0xBF /**< GATTS BLE configuration last. */
|
#define BLE_GATTS_CFG_LAST 0xBF /**< GATTS BLE configuration last. */
|
||||||
|
|
||||||
#define BLE_L2CAP_CFG_BASE 0xC0 /**< L2CAP BLE configuration base. */
|
#define BLE_L2CAP_CFG_BASE 0xC0 /**< L2CAP BLE configuration base. */
|
||||||
#define BLE_L2CAP_CFG_LAST 0xDF /**< L2CAP BLE configuration last. */
|
#define BLE_L2CAP_CFG_LAST 0xDF /**< L2CAP BLE configuration last. */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif /* BLE_RANGES_H__ */
|
#endif /* BLE_RANGES_H__ */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@}
|
@}
|
||||||
@}
|
@}
|
||||||
*/
|
*/
|
@ -1,215 +1,215 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2012 - 2017, Nordic Semiconductor ASA
|
* Copyright (c) 2012 - 2017, Nordic Semiconductor ASA
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modification,
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
* are permitted provided that the following conditions are met:
|
* are permitted provided that the following conditions are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
* list of conditions and the following disclaimer.
|
* list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* 2. Redistributions in binary form, except as embedded into a Nordic
|
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||||
* Semiconductor ASA integrated circuit in a product or a software update for
|
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||||
* such product, must reproduce the above copyright notice, this list of
|
* such product, must reproduce the above copyright notice, this list of
|
||||||
* conditions and the following disclaimer in the documentation and/or other
|
* conditions and the following disclaimer in the documentation and/or other
|
||||||
* materials provided with the distribution.
|
* materials provided with the distribution.
|
||||||
*
|
*
|
||||||
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||||
* contributors may be used to endorse or promote products derived from this
|
* contributors may be used to endorse or promote products derived from this
|
||||||
* software without specific prior written permission.
|
* software without specific prior written permission.
|
||||||
*
|
*
|
||||||
* 4. This software, with or without modification, must only be used with a
|
* 4. This software, with or without modification, must only be used with a
|
||||||
* Nordic Semiconductor ASA integrated circuit.
|
* Nordic Semiconductor ASA integrated circuit.
|
||||||
*
|
*
|
||||||
* 5. Any software provided in binary form under this license must not be reverse
|
* 5. Any software provided in binary form under this license must not be reverse
|
||||||
* engineered, decompiled, modified and/or disassembled.
|
* engineered, decompiled, modified and/or disassembled.
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@addtogroup BLE_COMMON
|
@addtogroup BLE_COMMON
|
||||||
@{
|
@{
|
||||||
@defgroup ble_types Common types and macro definitions
|
@defgroup ble_types Common types and macro definitions
|
||||||
@{
|
@{
|
||||||
|
|
||||||
@brief Common types and macro definitions for the BLE SoftDevice.
|
@brief Common types and macro definitions for the BLE SoftDevice.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef BLE_TYPES_H__
|
#ifndef BLE_TYPES_H__
|
||||||
#define BLE_TYPES_H__
|
#define BLE_TYPES_H__
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** @addtogroup BLE_TYPES_DEFINES Defines
|
/** @addtogroup BLE_TYPES_DEFINES Defines
|
||||||
* @{ */
|
* @{ */
|
||||||
|
|
||||||
/** @defgroup BLE_CONN_HANDLES BLE Connection Handles
|
/** @defgroup BLE_CONN_HANDLES BLE Connection Handles
|
||||||
* @{ */
|
* @{ */
|
||||||
#define BLE_CONN_HANDLE_INVALID 0xFFFF /**< Invalid Connection Handle. */
|
#define BLE_CONN_HANDLE_INVALID 0xFFFF /**< Invalid Connection Handle. */
|
||||||
#define BLE_CONN_HANDLE_ALL 0xFFFE /**< Applies to all Connection Handles. */
|
#define BLE_CONN_HANDLE_ALL 0xFFFE /**< Applies to all Connection Handles. */
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
|
||||||
/** @defgroup BLE_UUID_VALUES Assigned Values for BLE UUIDs
|
/** @defgroup BLE_UUID_VALUES Assigned Values for BLE UUIDs
|
||||||
* @{ */
|
* @{ */
|
||||||
/* Generic UUIDs, applicable to all services */
|
/* Generic UUIDs, applicable to all services */
|
||||||
#define BLE_UUID_UNKNOWN 0x0000 /**< Reserved UUID. */
|
#define BLE_UUID_UNKNOWN 0x0000 /**< Reserved UUID. */
|
||||||
#define BLE_UUID_SERVICE_PRIMARY 0x2800 /**< Primary Service. */
|
#define BLE_UUID_SERVICE_PRIMARY 0x2800 /**< Primary Service. */
|
||||||
#define BLE_UUID_SERVICE_SECONDARY 0x2801 /**< Secondary Service. */
|
#define BLE_UUID_SERVICE_SECONDARY 0x2801 /**< Secondary Service. */
|
||||||
#define BLE_UUID_SERVICE_INCLUDE 0x2802 /**< Include. */
|
#define BLE_UUID_SERVICE_INCLUDE 0x2802 /**< Include. */
|
||||||
#define BLE_UUID_CHARACTERISTIC 0x2803 /**< Characteristic. */
|
#define BLE_UUID_CHARACTERISTIC 0x2803 /**< Characteristic. */
|
||||||
#define BLE_UUID_DESCRIPTOR_CHAR_EXT_PROP 0x2900 /**< Characteristic Extended Properties Descriptor. */
|
#define BLE_UUID_DESCRIPTOR_CHAR_EXT_PROP 0x2900 /**< Characteristic Extended Properties Descriptor. */
|
||||||
#define BLE_UUID_DESCRIPTOR_CHAR_USER_DESC 0x2901 /**< Characteristic User Description Descriptor. */
|
#define BLE_UUID_DESCRIPTOR_CHAR_USER_DESC 0x2901 /**< Characteristic User Description Descriptor. */
|
||||||
#define BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG 0x2902 /**< Client Characteristic Configuration Descriptor. */
|
#define BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG 0x2902 /**< Client Characteristic Configuration Descriptor. */
|
||||||
#define BLE_UUID_DESCRIPTOR_SERVER_CHAR_CONFIG 0x2903 /**< Server Characteristic Configuration Descriptor. */
|
#define BLE_UUID_DESCRIPTOR_SERVER_CHAR_CONFIG 0x2903 /**< Server Characteristic Configuration Descriptor. */
|
||||||
#define BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT 0x2904 /**< Characteristic Presentation Format Descriptor. */
|
#define BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT 0x2904 /**< Characteristic Presentation Format Descriptor. */
|
||||||
#define BLE_UUID_DESCRIPTOR_CHAR_AGGREGATE_FORMAT 0x2905 /**< Characteristic Aggregate Format Descriptor. */
|
#define BLE_UUID_DESCRIPTOR_CHAR_AGGREGATE_FORMAT 0x2905 /**< Characteristic Aggregate Format Descriptor. */
|
||||||
/* GATT specific UUIDs */
|
/* GATT specific UUIDs */
|
||||||
#define BLE_UUID_GATT 0x1801 /**< Generic Attribute Profile. */
|
#define BLE_UUID_GATT 0x1801 /**< Generic Attribute Profile. */
|
||||||
#define BLE_UUID_GATT_CHARACTERISTIC_SERVICE_CHANGED 0x2A05 /**< Service Changed Characteristic. */
|
#define BLE_UUID_GATT_CHARACTERISTIC_SERVICE_CHANGED 0x2A05 /**< Service Changed Characteristic. */
|
||||||
/* GAP specific UUIDs */
|
/* GAP specific UUIDs */
|
||||||
#define BLE_UUID_GAP 0x1800 /**< Generic Access Profile. */
|
#define BLE_UUID_GAP 0x1800 /**< Generic Access Profile. */
|
||||||
#define BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME 0x2A00 /**< Device Name Characteristic. */
|
#define BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME 0x2A00 /**< Device Name Characteristic. */
|
||||||
#define BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE 0x2A01 /**< Appearance Characteristic. */
|
#define BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE 0x2A01 /**< Appearance Characteristic. */
|
||||||
#define BLE_UUID_GAP_CHARACTERISTIC_RECONN_ADDR 0x2A03 /**< Reconnection Address Characteristic. */
|
#define BLE_UUID_GAP_CHARACTERISTIC_RECONN_ADDR 0x2A03 /**< Reconnection Address Characteristic. */
|
||||||
#define BLE_UUID_GAP_CHARACTERISTIC_PPCP 0x2A04 /**< Peripheral Preferred Connection Parameters Characteristic. */
|
#define BLE_UUID_GAP_CHARACTERISTIC_PPCP 0x2A04 /**< Peripheral Preferred Connection Parameters Characteristic. */
|
||||||
#define BLE_UUID_GAP_CHARACTERISTIC_CAR 0x2AA6 /**< Central Address Resolution Characteristic. */
|
#define BLE_UUID_GAP_CHARACTERISTIC_CAR 0x2AA6 /**< Central Address Resolution Characteristic. */
|
||||||
#define BLE_UUID_GAP_CHARACTERISTIC_RPA_ONLY 0x2AC9 /**< Resolvable Private Address Only Characteristic. */
|
#define BLE_UUID_GAP_CHARACTERISTIC_RPA_ONLY 0x2AC9 /**< Resolvable Private Address Only Characteristic. */
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
|
||||||
/** @defgroup BLE_UUID_TYPES Types of UUID
|
/** @defgroup BLE_UUID_TYPES Types of UUID
|
||||||
* @{ */
|
* @{ */
|
||||||
#define BLE_UUID_TYPE_UNKNOWN 0x00 /**< Invalid UUID type. */
|
#define BLE_UUID_TYPE_UNKNOWN 0x00 /**< Invalid UUID type. */
|
||||||
#define BLE_UUID_TYPE_BLE 0x01 /**< Bluetooth SIG UUID (16-bit). */
|
#define BLE_UUID_TYPE_BLE 0x01 /**< Bluetooth SIG UUID (16-bit). */
|
||||||
#define BLE_UUID_TYPE_VENDOR_BEGIN 0x02 /**< Vendor UUID types start at this index (128-bit). */
|
#define BLE_UUID_TYPE_VENDOR_BEGIN 0x02 /**< Vendor UUID types start at this index (128-bit). */
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
|
||||||
/** @defgroup BLE_APPEARANCES Bluetooth Appearance values
|
/** @defgroup BLE_APPEARANCES Bluetooth Appearance values
|
||||||
* @note Retrieved from http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml
|
* @note Retrieved from http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml
|
||||||
* @{ */
|
* @{ */
|
||||||
#define BLE_APPEARANCE_UNKNOWN 0 /**< Unknown. */
|
#define BLE_APPEARANCE_UNKNOWN 0 /**< Unknown. */
|
||||||
#define BLE_APPEARANCE_GENERIC_PHONE 64 /**< Generic Phone. */
|
#define BLE_APPEARANCE_GENERIC_PHONE 64 /**< Generic Phone. */
|
||||||
#define BLE_APPEARANCE_GENERIC_COMPUTER 128 /**< Generic Computer. */
|
#define BLE_APPEARANCE_GENERIC_COMPUTER 128 /**< Generic Computer. */
|
||||||
#define BLE_APPEARANCE_GENERIC_WATCH 192 /**< Generic Watch. */
|
#define BLE_APPEARANCE_GENERIC_WATCH 192 /**< Generic Watch. */
|
||||||
#define BLE_APPEARANCE_WATCH_SPORTS_WATCH 193 /**< Watch: Sports Watch. */
|
#define BLE_APPEARANCE_WATCH_SPORTS_WATCH 193 /**< Watch: Sports Watch. */
|
||||||
#define BLE_APPEARANCE_GENERIC_CLOCK 256 /**< Generic Clock. */
|
#define BLE_APPEARANCE_GENERIC_CLOCK 256 /**< Generic Clock. */
|
||||||
#define BLE_APPEARANCE_GENERIC_DISPLAY 320 /**< Generic Display. */
|
#define BLE_APPEARANCE_GENERIC_DISPLAY 320 /**< Generic Display. */
|
||||||
#define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL 384 /**< Generic Remote Control. */
|
#define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL 384 /**< Generic Remote Control. */
|
||||||
#define BLE_APPEARANCE_GENERIC_EYE_GLASSES 448 /**< Generic Eye-glasses. */
|
#define BLE_APPEARANCE_GENERIC_EYE_GLASSES 448 /**< Generic Eye-glasses. */
|
||||||
#define BLE_APPEARANCE_GENERIC_TAG 512 /**< Generic Tag. */
|
#define BLE_APPEARANCE_GENERIC_TAG 512 /**< Generic Tag. */
|
||||||
#define BLE_APPEARANCE_GENERIC_KEYRING 576 /**< Generic Keyring. */
|
#define BLE_APPEARANCE_GENERIC_KEYRING 576 /**< Generic Keyring. */
|
||||||
#define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 640 /**< Generic Media Player. */
|
#define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 640 /**< Generic Media Player. */
|
||||||
#define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 704 /**< Generic Barcode Scanner. */
|
#define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 704 /**< Generic Barcode Scanner. */
|
||||||
#define BLE_APPEARANCE_GENERIC_THERMOMETER 768 /**< Generic Thermometer. */
|
#define BLE_APPEARANCE_GENERIC_THERMOMETER 768 /**< Generic Thermometer. */
|
||||||
#define BLE_APPEARANCE_THERMOMETER_EAR 769 /**< Thermometer: Ear. */
|
#define BLE_APPEARANCE_THERMOMETER_EAR 769 /**< Thermometer: Ear. */
|
||||||
#define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR 832 /**< Generic Heart rate Sensor. */
|
#define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR 832 /**< Generic Heart rate Sensor. */
|
||||||
#define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT 833 /**< Heart Rate Sensor: Heart Rate Belt. */
|
#define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT 833 /**< Heart Rate Sensor: Heart Rate Belt. */
|
||||||
#define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 896 /**< Generic Blood Pressure. */
|
#define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 896 /**< Generic Blood Pressure. */
|
||||||
#define BLE_APPEARANCE_BLOOD_PRESSURE_ARM 897 /**< Blood Pressure: Arm. */
|
#define BLE_APPEARANCE_BLOOD_PRESSURE_ARM 897 /**< Blood Pressure: Arm. */
|
||||||
#define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 898 /**< Blood Pressure: Wrist. */
|
#define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 898 /**< Blood Pressure: Wrist. */
|
||||||
#define BLE_APPEARANCE_GENERIC_HID 960 /**< Human Interface Device (HID). */
|
#define BLE_APPEARANCE_GENERIC_HID 960 /**< Human Interface Device (HID). */
|
||||||
#define BLE_APPEARANCE_HID_KEYBOARD 961 /**< Keyboard (HID Subtype). */
|
#define BLE_APPEARANCE_HID_KEYBOARD 961 /**< Keyboard (HID Subtype). */
|
||||||
#define BLE_APPEARANCE_HID_MOUSE 962 /**< Mouse (HID Subtype). */
|
#define BLE_APPEARANCE_HID_MOUSE 962 /**< Mouse (HID Subtype). */
|
||||||
#define BLE_APPEARANCE_HID_JOYSTICK 963 /**< Joystick (HID Subtype). */
|
#define BLE_APPEARANCE_HID_JOYSTICK 963 /**< Joystick (HID Subtype). */
|
||||||
#define BLE_APPEARANCE_HID_GAMEPAD 964 /**< Gamepad (HID Subtype). */
|
#define BLE_APPEARANCE_HID_GAMEPAD 964 /**< Gamepad (HID Subtype). */
|
||||||
#define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE 965 /**< Digitizer Tablet (HID Subtype). */
|
#define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE 965 /**< Digitizer Tablet (HID Subtype). */
|
||||||
#define BLE_APPEARANCE_HID_CARD_READER 966 /**< Card Reader (HID Subtype). */
|
#define BLE_APPEARANCE_HID_CARD_READER 966 /**< Card Reader (HID Subtype). */
|
||||||
#define BLE_APPEARANCE_HID_DIGITAL_PEN 967 /**< Digital Pen (HID Subtype). */
|
#define BLE_APPEARANCE_HID_DIGITAL_PEN 967 /**< Digital Pen (HID Subtype). */
|
||||||
#define BLE_APPEARANCE_HID_BARCODE 968 /**< Barcode Scanner (HID Subtype). */
|
#define BLE_APPEARANCE_HID_BARCODE 968 /**< Barcode Scanner (HID Subtype). */
|
||||||
#define BLE_APPEARANCE_GENERIC_GLUCOSE_METER 1024 /**< Generic Glucose Meter. */
|
#define BLE_APPEARANCE_GENERIC_GLUCOSE_METER 1024 /**< Generic Glucose Meter. */
|
||||||
#define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR 1088 /**< Generic Running Walking Sensor. */
|
#define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR 1088 /**< Generic Running Walking Sensor. */
|
||||||
#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE 1089 /**< Running Walking Sensor: In-Shoe. */
|
#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE 1089 /**< Running Walking Sensor: In-Shoe. */
|
||||||
#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE 1090 /**< Running Walking Sensor: On-Shoe. */
|
#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE 1090 /**< Running Walking Sensor: On-Shoe. */
|
||||||
#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP 1091 /**< Running Walking Sensor: On-Hip. */
|
#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP 1091 /**< Running Walking Sensor: On-Hip. */
|
||||||
#define BLE_APPEARANCE_GENERIC_CYCLING 1152 /**< Generic Cycling. */
|
#define BLE_APPEARANCE_GENERIC_CYCLING 1152 /**< Generic Cycling. */
|
||||||
#define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER 1153 /**< Cycling: Cycling Computer. */
|
#define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER 1153 /**< Cycling: Cycling Computer. */
|
||||||
#define BLE_APPEARANCE_CYCLING_SPEED_SENSOR 1154 /**< Cycling: Speed Sensor. */
|
#define BLE_APPEARANCE_CYCLING_SPEED_SENSOR 1154 /**< Cycling: Speed Sensor. */
|
||||||
#define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR 1155 /**< Cycling: Cadence Sensor. */
|
#define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR 1155 /**< Cycling: Cadence Sensor. */
|
||||||
#define BLE_APPEARANCE_CYCLING_POWER_SENSOR 1156 /**< Cycling: Power Sensor. */
|
#define BLE_APPEARANCE_CYCLING_POWER_SENSOR 1156 /**< Cycling: Power Sensor. */
|
||||||
#define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR 1157 /**< Cycling: Speed and Cadence Sensor. */
|
#define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR 1157 /**< Cycling: Speed and Cadence Sensor. */
|
||||||
#define BLE_APPEARANCE_GENERIC_PULSE_OXIMETER 3136 /**< Generic Pulse Oximeter. */
|
#define BLE_APPEARANCE_GENERIC_PULSE_OXIMETER 3136 /**< Generic Pulse Oximeter. */
|
||||||
#define BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 3137 /**< Fingertip (Pulse Oximeter subtype). */
|
#define BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 3137 /**< Fingertip (Pulse Oximeter subtype). */
|
||||||
#define BLE_APPEARANCE_PULSE_OXIMETER_WRIST_WORN 3138 /**< Wrist Worn(Pulse Oximeter subtype). */
|
#define BLE_APPEARANCE_PULSE_OXIMETER_WRIST_WORN 3138 /**< Wrist Worn(Pulse Oximeter subtype). */
|
||||||
#define BLE_APPEARANCE_GENERIC_WEIGHT_SCALE 3200 /**< Generic Weight Scale. */
|
#define BLE_APPEARANCE_GENERIC_WEIGHT_SCALE 3200 /**< Generic Weight Scale. */
|
||||||
#define BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS_ACT 5184 /**< Generic Outdoor Sports Activity. */
|
#define BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS_ACT 5184 /**< Generic Outdoor Sports Activity. */
|
||||||
#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_DISP 5185 /**< Location Display Device (Outdoor Sports Activity subtype). */
|
#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_DISP 5185 /**< Location Display Device (Outdoor Sports Activity subtype). */
|
||||||
#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_DISP 5186 /**< Location and Navigation Display Device (Outdoor Sports Activity subtype). */
|
#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_DISP 5186 /**< Location and Navigation Display Device (Outdoor Sports Activity subtype). */
|
||||||
#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_POD 5187 /**< Location Pod (Outdoor Sports Activity subtype). */
|
#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_POD 5187 /**< Location Pod (Outdoor Sports Activity subtype). */
|
||||||
#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_POD 5188 /**< Location and Navigation Pod (Outdoor Sports Activity subtype). */
|
#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_POD 5188 /**< Location and Navigation Pod (Outdoor Sports Activity subtype). */
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
/** @brief Set .type and .uuid fields of ble_uuid_struct to specified UUID value. */
|
/** @brief Set .type and .uuid fields of ble_uuid_struct to specified UUID value. */
|
||||||
#define BLE_UUID_BLE_ASSIGN(instance, value) do {\
|
#define BLE_UUID_BLE_ASSIGN(instance, value) do {\
|
||||||
instance.type = BLE_UUID_TYPE_BLE; \
|
instance.type = BLE_UUID_TYPE_BLE; \
|
||||||
instance.uuid = value;} while(0)
|
instance.uuid = value;} while(0)
|
||||||
|
|
||||||
/** @brief Copy type and uuid members from src to dst ble_uuid_t pointer. Both pointers must be valid/non-null. */
|
/** @brief Copy type and uuid members from src to dst ble_uuid_t pointer. Both pointers must be valid/non-null. */
|
||||||
#define BLE_UUID_COPY_PTR(dst, src) do {\
|
#define BLE_UUID_COPY_PTR(dst, src) do {\
|
||||||
(dst)->type = (src)->type; \
|
(dst)->type = (src)->type; \
|
||||||
(dst)->uuid = (src)->uuid;} while(0)
|
(dst)->uuid = (src)->uuid;} while(0)
|
||||||
|
|
||||||
/** @brief Copy type and uuid members from src to dst ble_uuid_t struct. */
|
/** @brief Copy type and uuid members from src to dst ble_uuid_t struct. */
|
||||||
#define BLE_UUID_COPY_INST(dst, src) do {\
|
#define BLE_UUID_COPY_INST(dst, src) do {\
|
||||||
(dst).type = (src).type; \
|
(dst).type = (src).type; \
|
||||||
(dst).uuid = (src).uuid;} while(0)
|
(dst).uuid = (src).uuid;} while(0)
|
||||||
|
|
||||||
/** @brief Compare for equality both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */
|
/** @brief Compare for equality both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */
|
||||||
#define BLE_UUID_EQ(p_uuid1, p_uuid2) \
|
#define BLE_UUID_EQ(p_uuid1, p_uuid2) \
|
||||||
(((p_uuid1)->type == (p_uuid2)->type) && ((p_uuid1)->uuid == (p_uuid2)->uuid))
|
(((p_uuid1)->type == (p_uuid2)->type) && ((p_uuid1)->uuid == (p_uuid2)->uuid))
|
||||||
|
|
||||||
/** @brief Compare for difference both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */
|
/** @brief Compare for difference both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */
|
||||||
#define BLE_UUID_NEQ(p_uuid1, p_uuid2) \
|
#define BLE_UUID_NEQ(p_uuid1, p_uuid2) \
|
||||||
(((p_uuid1)->type != (p_uuid2)->type) || ((p_uuid1)->uuid != (p_uuid2)->uuid))
|
(((p_uuid1)->type != (p_uuid2)->type) || ((p_uuid1)->uuid != (p_uuid2)->uuid))
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
/** @addtogroup BLE_TYPES_STRUCTURES Structures
|
/** @addtogroup BLE_TYPES_STRUCTURES Structures
|
||||||
* @{ */
|
* @{ */
|
||||||
|
|
||||||
/** @brief 128 bit UUID values. */
|
/** @brief 128 bit UUID values. */
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
uint8_t uuid128[16]; /**< Little-Endian UUID bytes. */
|
uint8_t uuid128[16]; /**< Little-Endian UUID bytes. */
|
||||||
} ble_uuid128_t;
|
} ble_uuid128_t;
|
||||||
|
|
||||||
/** @brief Bluetooth Low Energy UUID type, encapsulates both 16-bit and 128-bit UUIDs. */
|
/** @brief Bluetooth Low Energy UUID type, encapsulates both 16-bit and 128-bit UUIDs. */
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
uint16_t uuid; /**< 16-bit UUID value or octets 12-13 of 128-bit UUID. */
|
uint16_t uuid; /**< 16-bit UUID value or octets 12-13 of 128-bit UUID. */
|
||||||
uint8_t type; /**< UUID type, see @ref BLE_UUID_TYPES. If type is @ref BLE_UUID_TYPE_UNKNOWN, the value of uuid is undefined. */
|
uint8_t type; /**< UUID type, see @ref BLE_UUID_TYPES. If type is @ref BLE_UUID_TYPE_UNKNOWN, the value of uuid is undefined. */
|
||||||
} ble_uuid_t;
|
} ble_uuid_t;
|
||||||
|
|
||||||
/**@brief Data structure. */
|
/**@brief Data structure. */
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
uint8_t *p_data; /**< Pointer to the data buffer provided to/from the application. */
|
uint8_t *p_data; /**< Pointer to the data buffer provided to/from the application. */
|
||||||
uint16_t len; /**< Length of the data buffer, in bytes. */
|
uint16_t len; /**< Length of the data buffer, in bytes. */
|
||||||
} ble_data_t;
|
} ble_data_t;
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* BLE_TYPES_H__ */
|
#endif /* BLE_TYPES_H__ */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@}
|
@}
|
||||||
@}
|
@}
|
||||||
*/
|
*/
|
242
softdevice/6.0.0/s140/headers/nrf52/nrf_mbr.h
Normal file
242
softdevice/6.0.0/s140/headers/nrf52/nrf_mbr.h
Normal file
@ -0,0 +1,242 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2014 - 2017, Nordic Semiconductor ASA
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||||
|
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||||
|
* such product, must reproduce the above copyright notice, this list of
|
||||||
|
* conditions and the following disclaimer in the documentation and/or other
|
||||||
|
* materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* 4. This software, with or without modification, must only be used with a
|
||||||
|
* Nordic Semiconductor ASA integrated circuit.
|
||||||
|
*
|
||||||
|
* 5. Any software provided in binary form under this license must not be reverse
|
||||||
|
* engineered, decompiled, modified and/or disassembled.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||||
|
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
@defgroup nrf_mbr_api Master Boot Record API
|
||||||
|
@{
|
||||||
|
|
||||||
|
@brief APIs for updating SoftDevice and BootLoader
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef NRF_MBR_H__
|
||||||
|
#define NRF_MBR_H__
|
||||||
|
|
||||||
|
#include "nrf_svc.h"
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/** @addtogroup NRF_MBR_DEFINES Defines
|
||||||
|
* @{ */
|
||||||
|
|
||||||
|
/**@brief MBR SVC Base number. */
|
||||||
|
#define MBR_SVC_BASE (0x18)
|
||||||
|
|
||||||
|
/**@brief Page size in words. */
|
||||||
|
#define MBR_PAGE_SIZE_IN_WORDS (1024)
|
||||||
|
|
||||||
|
/** @brief The size that must be reserved for the MBR when a SoftDevice is written to flash.
|
||||||
|
This is the offset where the first byte of the SoftDevice hex file is written.*/
|
||||||
|
#define MBR_SIZE (0x1000)
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
|
||||||
|
/** @addtogroup NRF_MBR_ENUMS Enumerations
|
||||||
|
* @{ */
|
||||||
|
|
||||||
|
/**@brief nRF Master Boot Record API SVC numbers. */
|
||||||
|
enum NRF_MBR_SVCS
|
||||||
|
{
|
||||||
|
SD_MBR_COMMAND = MBR_SVC_BASE, /**< ::sd_mbr_command */
|
||||||
|
};
|
||||||
|
|
||||||
|
/**@brief Possible values for ::sd_mbr_command_t.command */
|
||||||
|
enum NRF_MBR_COMMANDS
|
||||||
|
{
|
||||||
|
SD_MBR_COMMAND_COPY_BL, /**< Copy a new BootLoader. @see ::sd_mbr_command_copy_bl_t*/
|
||||||
|
SD_MBR_COMMAND_COPY_SD, /**< Copy a new SoftDevice. @see ::sd_mbr_command_copy_sd_t*/
|
||||||
|
SD_MBR_COMMAND_INIT_SD, /**< Initialize forwarding interrupts to SD, and run reset function in SD. Does not require any parameters in ::sd_mbr_command_t params.*/
|
||||||
|
SD_MBR_COMMAND_COMPARE, /**< This command works like memcmp. @see ::sd_mbr_command_compare_t*/
|
||||||
|
SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET, /**< Change the address the MBR starts after a reset. @see ::sd_mbr_command_vector_table_base_set_t*/
|
||||||
|
SD_MBR_COMMAND_RESERVED,
|
||||||
|
SD_MBR_COMMAND_IRQ_FORWARD_ADDRESS_SET, /**< Start forwarding all interrupts to this address. @see ::sd_mbr_command_irq_forward_address_set_t*/
|
||||||
|
};
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
|
||||||
|
/** @addtogroup NRF_MBR_TYPES Types
|
||||||
|
* @{ */
|
||||||
|
|
||||||
|
/**@brief This command copies part of a new SoftDevice
|
||||||
|
*
|
||||||
|
* The destination area is erased before copying.
|
||||||
|
* If dst is in the middle of a flash page, that whole flash page will be erased.
|
||||||
|
* If (dst+len) is in the middle of a flash page, that whole flash page will be erased.
|
||||||
|
*
|
||||||
|
* The user of this function is responsible for setting the BPROT registers.
|
||||||
|
*
|
||||||
|
* @retval ::NRF_SUCCESS indicates that the contents of the memory blocks where copied correctly.
|
||||||
|
* @retval ::NRF_ERROR_INTERNAL indicates that the contents of the memory blocks where not verified correctly after copying.
|
||||||
|
*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint32_t *src; /**< Pointer to the source of data to be copied.*/
|
||||||
|
uint32_t *dst; /**< Pointer to the destination where the content is to be copied.*/
|
||||||
|
uint32_t len; /**< Number of 32 bit words to copy. Must be a multiple of @ref MBR_PAGE_SIZE_IN_WORDS words.*/
|
||||||
|
} sd_mbr_command_copy_sd_t;
|
||||||
|
|
||||||
|
|
||||||
|
/**@brief This command works like memcmp, but takes the length in words.
|
||||||
|
*
|
||||||
|
* @retval ::NRF_SUCCESS indicates that the contents of both memory blocks are equal.
|
||||||
|
* @retval ::NRF_ERROR_NULL indicates that the contents of the memory blocks are not equal.
|
||||||
|
*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint32_t *ptr1; /**< Pointer to block of memory. */
|
||||||
|
uint32_t *ptr2; /**< Pointer to block of memory. */
|
||||||
|
uint32_t len; /**< Number of 32 bit words to compare.*/
|
||||||
|
} sd_mbr_command_compare_t;
|
||||||
|
|
||||||
|
|
||||||
|
/**@brief This command copies a new BootLoader.
|
||||||
|
*
|
||||||
|
* With this command, destination of BootLoader is always the address written in
|
||||||
|
* NRF_UICR->BOOTADDR.
|
||||||
|
*
|
||||||
|
* Destination is erased by this function.
|
||||||
|
* If (destination+bl_len) is in the middle of a flash page, that whole flash page will be erased.
|
||||||
|
*
|
||||||
|
* This function will use the flash protect peripheral (BPROT or ACL) to protect the flash that is
|
||||||
|
* not intended to be written.
|
||||||
|
*
|
||||||
|
* On success, this function will not return. It will start the new BootLoader from reset-vector as normal.
|
||||||
|
*
|
||||||
|
* @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen.
|
||||||
|
* @retval ::NRF_ERROR_FORBIDDEN if NRF_UICR->BOOTADDR is not set.
|
||||||
|
* @retval ::NRF_ERROR_INVALID_LENGTH if parameters attempts to read or write outside flash area.
|
||||||
|
* @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see SoftDevice Specification for more info)
|
||||||
|
*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint32_t *bl_src; /**< Pointer to the source of the Bootloader to be be copied.*/
|
||||||
|
uint32_t bl_len; /**< Number of 32 bit words to copy for BootLoader. */
|
||||||
|
} sd_mbr_command_copy_bl_t;
|
||||||
|
|
||||||
|
/**@brief Change the address the MBR starts after a reset
|
||||||
|
*
|
||||||
|
* Once this function has been called, this address is where the MBR will start to forward
|
||||||
|
* interrupts to after a reset.
|
||||||
|
*
|
||||||
|
* To restore default forwarding this function should be called with @ref address set to 0. The
|
||||||
|
* MBR will then start forwarding interrupts to the address in NFR_UICR->BOOTADDR or to the
|
||||||
|
* SoftDevice if the BOOTADDR is not set.
|
||||||
|
*
|
||||||
|
* On success, this function will not return. It will reset the device.
|
||||||
|
*
|
||||||
|
* @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen.
|
||||||
|
* @retval ::NRF_ERROR_INVALID_ADDR if parameter address is outside of the flash size.
|
||||||
|
* @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see SoftDevice Specification for more info)
|
||||||
|
*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/
|
||||||
|
} sd_mbr_command_vector_table_base_set_t;
|
||||||
|
|
||||||
|
/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the MBR
|
||||||
|
*
|
||||||
|
* Unlike sd_mbr_command_vector_table_base_set_t, this function does not reset, and it does not
|
||||||
|
* change where the MBR starts after reset.
|
||||||
|
*
|
||||||
|
* @retval ::NRF_SUCCESS
|
||||||
|
*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/
|
||||||
|
} sd_mbr_command_irq_forward_address_set_t;
|
||||||
|
|
||||||
|
/**@brief Input structure containing data used when calling ::sd_mbr_command
|
||||||
|
*
|
||||||
|
* Depending on what command value that is set, the corresponding params value type must also be
|
||||||
|
* set. See @ref NRF_MBR_COMMANDS for command types and corresponding params value type. If command
|
||||||
|
* @ref SD_MBR_COMMAND_INIT_SD is set, it is not necessary to set any values under params.
|
||||||
|
*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint32_t command; /**< Type of command to be issued. See @ref NRF_MBR_COMMANDS. */
|
||||||
|
union
|
||||||
|
{
|
||||||
|
sd_mbr_command_copy_sd_t copy_sd; /**< Parameters for copy SoftDevice.*/
|
||||||
|
sd_mbr_command_compare_t compare; /**< Parameters for verify.*/
|
||||||
|
sd_mbr_command_copy_bl_t copy_bl; /**< Parameters for copy BootLoader. Requires parameter page. */
|
||||||
|
sd_mbr_command_vector_table_base_set_t base_set; /**< Parameters for vector table base set. Requires parameter page.*/
|
||||||
|
sd_mbr_command_irq_forward_address_set_t irq_forward_address_set; /**< Parameters for irq forward address set*/
|
||||||
|
} params; /**< Command parameters. */
|
||||||
|
} sd_mbr_command_t;
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
|
||||||
|
/** @addtogroup NRF_MBR_FUNCTIONS Functions
|
||||||
|
* @{ */
|
||||||
|
|
||||||
|
/**@brief Issue Master Boot Record commands
|
||||||
|
*
|
||||||
|
* Commands used when updating a SoftDevice and bootloader.
|
||||||
|
*
|
||||||
|
* The @ref SD_MBR_COMMAND_COPY_BL and @ref SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET requires
|
||||||
|
* parameters to be retained by the MBR when resetting the IC. This is done in a separate flash
|
||||||
|
* page provided by the application. The UICR register UICR.NRFFW[1] must be set to an address
|
||||||
|
* corresponding to a page in the application flash space. This page will be cleared by the MBR and
|
||||||
|
* used to store the command before reset. When the UICR.NRFFW[1] field is set the page it refers
|
||||||
|
* to must not be used by the application. If the UICR.NRFFW[1] is set to 0xFFFFFFFF (the default)
|
||||||
|
* MBR commands which use flash will be unavailable and return @ref NRF_ERROR_NO_MEM.
|
||||||
|
*
|
||||||
|
* @param[in] param Pointer to a struct describing the command.
|
||||||
|
*
|
||||||
|
* @note For return values, see ::sd_mbr_command_copy_sd_t, ::sd_mbr_command_copy_bl_t,
|
||||||
|
* ::sd_mbr_command_compare_t, ::sd_mbr_command_vector_table_base_set_t,
|
||||||
|
* ::sd_mbr_command_irq_forward_address_set_t
|
||||||
|
*
|
||||||
|
* @retval ::NRF_ERROR_NO_MEM if UICR.NRFFW[1] is not set (i.e. is 0xFFFFFFFF).
|
||||||
|
* @retval ::NRF_ERROR_INVALID_PARAM if an invalid command is given.
|
||||||
|
*/
|
||||||
|
SVCALL(SD_MBR_COMMAND, uint32_t, sd_mbr_command(sd_mbr_command_t* param));
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif // NRF_MBR_H__
|
||||||
|
|
||||||
|
/**
|
||||||
|
@}
|
||||||
|
*/
|
@ -1,90 +1,90 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2014 - 2017, Nordic Semiconductor ASA
|
* Copyright (c) 2014 - 2017, Nordic Semiconductor ASA
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modification,
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
* are permitted provided that the following conditions are met:
|
* are permitted provided that the following conditions are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
* list of conditions and the following disclaimer.
|
* list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* 2. Redistributions in binary form, except as embedded into a Nordic
|
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||||
* Semiconductor ASA integrated circuit in a product or a software update for
|
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||||
* such product, must reproduce the above copyright notice, this list of
|
* such product, must reproduce the above copyright notice, this list of
|
||||||
* conditions and the following disclaimer in the documentation and/or other
|
* conditions and the following disclaimer in the documentation and/or other
|
||||||
* materials provided with the distribution.
|
* materials provided with the distribution.
|
||||||
*
|
*
|
||||||
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||||
* contributors may be used to endorse or promote products derived from this
|
* contributors may be used to endorse or promote products derived from this
|
||||||
* software without specific prior written permission.
|
* software without specific prior written permission.
|
||||||
*
|
*
|
||||||
* 4. This software, with or without modification, must only be used with a
|
* 4. This software, with or without modification, must only be used with a
|
||||||
* Nordic Semiconductor ASA integrated circuit.
|
* Nordic Semiconductor ASA integrated circuit.
|
||||||
*
|
*
|
||||||
* 5. Any software provided in binary form under this license must not be reverse
|
* 5. Any software provided in binary form under this license must not be reverse
|
||||||
* engineered, decompiled, modified and/or disassembled.
|
* engineered, decompiled, modified and/or disassembled.
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@defgroup nrf_error SoftDevice Global Error Codes
|
@defgroup nrf_error SoftDevice Global Error Codes
|
||||||
@{
|
@{
|
||||||
|
|
||||||
@brief Global Error definitions
|
@brief Global Error definitions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Header guard */
|
/* Header guard */
|
||||||
#ifndef NRF_ERROR_H__
|
#ifndef NRF_ERROR_H__
|
||||||
#define NRF_ERROR_H__
|
#define NRF_ERROR_H__
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions
|
/** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions
|
||||||
* @{ */
|
* @{ */
|
||||||
#define NRF_ERROR_BASE_NUM (0x0) ///< Global error base
|
#define NRF_ERROR_BASE_NUM (0x0) ///< Global error base
|
||||||
#define NRF_ERROR_SDM_BASE_NUM (0x1000) ///< SDM error base
|
#define NRF_ERROR_SDM_BASE_NUM (0x1000) ///< SDM error base
|
||||||
#define NRF_ERROR_SOC_BASE_NUM (0x2000) ///< SoC error base
|
#define NRF_ERROR_SOC_BASE_NUM (0x2000) ///< SoC error base
|
||||||
#define NRF_ERROR_STK_BASE_NUM (0x3000) ///< STK error base
|
#define NRF_ERROR_STK_BASE_NUM (0x3000) ///< STK error base
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
#define NRF_SUCCESS (NRF_ERROR_BASE_NUM + 0) ///< Successful command
|
#define NRF_SUCCESS (NRF_ERROR_BASE_NUM + 0) ///< Successful command
|
||||||
#define NRF_ERROR_SVC_HANDLER_MISSING (NRF_ERROR_BASE_NUM + 1) ///< SVC handler is missing
|
#define NRF_ERROR_SVC_HANDLER_MISSING (NRF_ERROR_BASE_NUM + 1) ///< SVC handler is missing
|
||||||
#define NRF_ERROR_SOFTDEVICE_NOT_ENABLED (NRF_ERROR_BASE_NUM + 2) ///< SoftDevice has not been enabled
|
#define NRF_ERROR_SOFTDEVICE_NOT_ENABLED (NRF_ERROR_BASE_NUM + 2) ///< SoftDevice has not been enabled
|
||||||
#define NRF_ERROR_INTERNAL (NRF_ERROR_BASE_NUM + 3) ///< Internal Error
|
#define NRF_ERROR_INTERNAL (NRF_ERROR_BASE_NUM + 3) ///< Internal Error
|
||||||
#define NRF_ERROR_NO_MEM (NRF_ERROR_BASE_NUM + 4) ///< No Memory for operation
|
#define NRF_ERROR_NO_MEM (NRF_ERROR_BASE_NUM + 4) ///< No Memory for operation
|
||||||
#define NRF_ERROR_NOT_FOUND (NRF_ERROR_BASE_NUM + 5) ///< Not found
|
#define NRF_ERROR_NOT_FOUND (NRF_ERROR_BASE_NUM + 5) ///< Not found
|
||||||
#define NRF_ERROR_NOT_SUPPORTED (NRF_ERROR_BASE_NUM + 6) ///< Not supported
|
#define NRF_ERROR_NOT_SUPPORTED (NRF_ERROR_BASE_NUM + 6) ///< Not supported
|
||||||
#define NRF_ERROR_INVALID_PARAM (NRF_ERROR_BASE_NUM + 7) ///< Invalid Parameter
|
#define NRF_ERROR_INVALID_PARAM (NRF_ERROR_BASE_NUM + 7) ///< Invalid Parameter
|
||||||
#define NRF_ERROR_INVALID_STATE (NRF_ERROR_BASE_NUM + 8) ///< Invalid state, operation disallowed in this state
|
#define NRF_ERROR_INVALID_STATE (NRF_ERROR_BASE_NUM + 8) ///< Invalid state, operation disallowed in this state
|
||||||
#define NRF_ERROR_INVALID_LENGTH (NRF_ERROR_BASE_NUM + 9) ///< Invalid Length
|
#define NRF_ERROR_INVALID_LENGTH (NRF_ERROR_BASE_NUM + 9) ///< Invalid Length
|
||||||
#define NRF_ERROR_INVALID_FLAGS (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags
|
#define NRF_ERROR_INVALID_FLAGS (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags
|
||||||
#define NRF_ERROR_INVALID_DATA (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data
|
#define NRF_ERROR_INVALID_DATA (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data
|
||||||
#define NRF_ERROR_DATA_SIZE (NRF_ERROR_BASE_NUM + 12) ///< Invalid Data size
|
#define NRF_ERROR_DATA_SIZE (NRF_ERROR_BASE_NUM + 12) ///< Invalid Data size
|
||||||
#define NRF_ERROR_TIMEOUT (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out
|
#define NRF_ERROR_TIMEOUT (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out
|
||||||
#define NRF_ERROR_NULL (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer
|
#define NRF_ERROR_NULL (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer
|
||||||
#define NRF_ERROR_FORBIDDEN (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation
|
#define NRF_ERROR_FORBIDDEN (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation
|
||||||
#define NRF_ERROR_INVALID_ADDR (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address
|
#define NRF_ERROR_INVALID_ADDR (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address
|
||||||
#define NRF_ERROR_BUSY (NRF_ERROR_BASE_NUM + 17) ///< Busy
|
#define NRF_ERROR_BUSY (NRF_ERROR_BASE_NUM + 17) ///< Busy
|
||||||
#define NRF_ERROR_CONN_COUNT (NRF_ERROR_BASE_NUM + 18) ///< Maximum connection count exceeded.
|
#define NRF_ERROR_CONN_COUNT (NRF_ERROR_BASE_NUM + 18) ///< Maximum connection count exceeded.
|
||||||
#define NRF_ERROR_RESOURCES (NRF_ERROR_BASE_NUM + 19) ///< Not enough resources for operation
|
#define NRF_ERROR_RESOURCES (NRF_ERROR_BASE_NUM + 19) ///< Not enough resources for operation
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif // NRF_ERROR_H__
|
#endif // NRF_ERROR_H__
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@}
|
@}
|
||||||
*/
|
*/
|
@ -1,70 +1,70 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2012 - 2017, Nordic Semiconductor ASA
|
* Copyright (c) 2012 - 2017, Nordic Semiconductor ASA
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modification,
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
* are permitted provided that the following conditions are met:
|
* are permitted provided that the following conditions are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
* list of conditions and the following disclaimer.
|
* list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* 2. Redistributions in binary form, except as embedded into a Nordic
|
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||||
* Semiconductor ASA integrated circuit in a product or a software update for
|
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||||
* such product, must reproduce the above copyright notice, this list of
|
* such product, must reproduce the above copyright notice, this list of
|
||||||
* conditions and the following disclaimer in the documentation and/or other
|
* conditions and the following disclaimer in the documentation and/or other
|
||||||
* materials provided with the distribution.
|
* materials provided with the distribution.
|
||||||
*
|
*
|
||||||
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||||
* contributors may be used to endorse or promote products derived from this
|
* contributors may be used to endorse or promote products derived from this
|
||||||
* software without specific prior written permission.
|
* software without specific prior written permission.
|
||||||
*
|
*
|
||||||
* 4. This software, with or without modification, must only be used with a
|
* 4. This software, with or without modification, must only be used with a
|
||||||
* Nordic Semiconductor ASA integrated circuit.
|
* Nordic Semiconductor ASA integrated circuit.
|
||||||
*
|
*
|
||||||
* 5. Any software provided in binary form under this license must not be reverse
|
* 5. Any software provided in binary form under this license must not be reverse
|
||||||
* engineered, decompiled, modified and/or disassembled.
|
* engineered, decompiled, modified and/or disassembled.
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@addtogroup nrf_sdm_api
|
@addtogroup nrf_sdm_api
|
||||||
@{
|
@{
|
||||||
@defgroup nrf_sdm_error SoftDevice Manager Error Codes
|
@defgroup nrf_sdm_error SoftDevice Manager Error Codes
|
||||||
@{
|
@{
|
||||||
|
|
||||||
@brief Error definitions for the SDM API
|
@brief Error definitions for the SDM API
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Header guard */
|
/* Header guard */
|
||||||
#ifndef NRF_ERROR_SDM_H__
|
#ifndef NRF_ERROR_SDM_H__
|
||||||
#define NRF_ERROR_SDM_H__
|
#define NRF_ERROR_SDM_H__
|
||||||
|
|
||||||
#include "nrf_error.h"
|
#include "nrf_error.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN (NRF_ERROR_SDM_BASE_NUM + 0) ///< Unknown LFCLK source.
|
#define NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN (NRF_ERROR_SDM_BASE_NUM + 0) ///< Unknown LFCLK source.
|
||||||
#define NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION (NRF_ERROR_SDM_BASE_NUM + 1) ///< Incorrect interrupt configuration (can be caused by using illegal priority levels, or having enabled SoftDevice interrupts).
|
#define NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION (NRF_ERROR_SDM_BASE_NUM + 1) ///< Incorrect interrupt configuration (can be caused by using illegal priority levels, or having enabled SoftDevice interrupts).
|
||||||
#define NRF_ERROR_SDM_INCORRECT_CLENR0 (NRF_ERROR_SDM_BASE_NUM + 2) ///< Incorrect CLENR0 (can be caused by erroneous SoftDevice flashing).
|
#define NRF_ERROR_SDM_INCORRECT_CLENR0 (NRF_ERROR_SDM_BASE_NUM + 2) ///< Incorrect CLENR0 (can be caused by erroneous SoftDevice flashing).
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif // NRF_ERROR_SDM_H__
|
#endif // NRF_ERROR_SDM_H__
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@}
|
@}
|
||||||
@}
|
@}
|
||||||
*/
|
*/
|
@ -1,85 +1,85 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2012 - 2017, Nordic Semiconductor ASA
|
* Copyright (c) 2012 - 2017, Nordic Semiconductor ASA
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modification,
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
* are permitted provided that the following conditions are met:
|
* are permitted provided that the following conditions are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
* list of conditions and the following disclaimer.
|
* list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* 2. Redistributions in binary form, except as embedded into a Nordic
|
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||||
* Semiconductor ASA integrated circuit in a product or a software update for
|
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||||
* such product, must reproduce the above copyright notice, this list of
|
* such product, must reproduce the above copyright notice, this list of
|
||||||
* conditions and the following disclaimer in the documentation and/or other
|
* conditions and the following disclaimer in the documentation and/or other
|
||||||
* materials provided with the distribution.
|
* materials provided with the distribution.
|
||||||
*
|
*
|
||||||
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||||
* contributors may be used to endorse or promote products derived from this
|
* contributors may be used to endorse or promote products derived from this
|
||||||
* software without specific prior written permission.
|
* software without specific prior written permission.
|
||||||
*
|
*
|
||||||
* 4. This software, with or without modification, must only be used with a
|
* 4. This software, with or without modification, must only be used with a
|
||||||
* Nordic Semiconductor ASA integrated circuit.
|
* Nordic Semiconductor ASA integrated circuit.
|
||||||
*
|
*
|
||||||
* 5. Any software provided in binary form under this license must not be reverse
|
* 5. Any software provided in binary form under this license must not be reverse
|
||||||
* engineered, decompiled, modified and/or disassembled.
|
* engineered, decompiled, modified and/or disassembled.
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@addtogroup nrf_soc_api
|
@addtogroup nrf_soc_api
|
||||||
@{
|
@{
|
||||||
@defgroup nrf_soc_error SoC Library Error Codes
|
@defgroup nrf_soc_error SoC Library Error Codes
|
||||||
@{
|
@{
|
||||||
|
|
||||||
@brief Error definitions for the SoC library
|
@brief Error definitions for the SoC library
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Header guard */
|
/* Header guard */
|
||||||
#ifndef NRF_ERROR_SOC_H__
|
#ifndef NRF_ERROR_SOC_H__
|
||||||
#define NRF_ERROR_SOC_H__
|
#define NRF_ERROR_SOC_H__
|
||||||
|
|
||||||
#include "nrf_error.h"
|
#include "nrf_error.h"
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Mutex Errors */
|
/* Mutex Errors */
|
||||||
#define NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN (NRF_ERROR_SOC_BASE_NUM + 0) ///< Mutex already taken
|
#define NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN (NRF_ERROR_SOC_BASE_NUM + 0) ///< Mutex already taken
|
||||||
|
|
||||||
/* NVIC errors */
|
/* NVIC errors */
|
||||||
#define NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE (NRF_ERROR_SOC_BASE_NUM + 1) ///< NVIC interrupt not available
|
#define NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE (NRF_ERROR_SOC_BASE_NUM + 1) ///< NVIC interrupt not available
|
||||||
#define NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED (NRF_ERROR_SOC_BASE_NUM + 2) ///< NVIC interrupt priority not allowed
|
#define NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED (NRF_ERROR_SOC_BASE_NUM + 2) ///< NVIC interrupt priority not allowed
|
||||||
#define NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 3) ///< NVIC should not return
|
#define NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 3) ///< NVIC should not return
|
||||||
|
|
||||||
/* Power errors */
|
/* Power errors */
|
||||||
#define NRF_ERROR_SOC_POWER_MODE_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 4) ///< Power mode unknown
|
#define NRF_ERROR_SOC_POWER_MODE_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 4) ///< Power mode unknown
|
||||||
#define NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 5) ///< Power POF threshold unknown
|
#define NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 5) ///< Power POF threshold unknown
|
||||||
#define NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 6) ///< Power off should not return
|
#define NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 6) ///< Power off should not return
|
||||||
|
|
||||||
/* Rand errors */
|
/* Rand errors */
|
||||||
#define NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES (NRF_ERROR_SOC_BASE_NUM + 7) ///< RAND not enough values
|
#define NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES (NRF_ERROR_SOC_BASE_NUM + 7) ///< RAND not enough values
|
||||||
|
|
||||||
/* PPI errors */
|
/* PPI errors */
|
||||||
#define NRF_ERROR_SOC_PPI_INVALID_CHANNEL (NRF_ERROR_SOC_BASE_NUM + 8) ///< Invalid PPI Channel
|
#define NRF_ERROR_SOC_PPI_INVALID_CHANNEL (NRF_ERROR_SOC_BASE_NUM + 8) ///< Invalid PPI Channel
|
||||||
#define NRF_ERROR_SOC_PPI_INVALID_GROUP (NRF_ERROR_SOC_BASE_NUM + 9) ///< Invalid PPI Group
|
#define NRF_ERROR_SOC_PPI_INVALID_GROUP (NRF_ERROR_SOC_BASE_NUM + 9) ///< Invalid PPI Group
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif // NRF_ERROR_SOC_H__
|
#endif // NRF_ERROR_SOC_H__
|
||||||
/**
|
/**
|
||||||
@}
|
@}
|
||||||
@}
|
@}
|
||||||
*/
|
*/
|
@ -1,485 +1,486 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016 - 2017, Nordic Semiconductor ASA
|
* Copyright (c) 2016 - 2017, Nordic Semiconductor ASA
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modification,
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
* are permitted provided that the following conditions are met:
|
* are permitted provided that the following conditions are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
* list of conditions and the following disclaimer.
|
* list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* 2. Redistributions in binary form, except as embedded into a Nordic
|
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||||
* Semiconductor ASA integrated circuit in a product or a software update for
|
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||||
* such product, must reproduce the above copyright notice, this list of
|
* such product, must reproduce the above copyright notice, this list of
|
||||||
* conditions and the following disclaimer in the documentation and/or other
|
* conditions and the following disclaimer in the documentation and/or other
|
||||||
* materials provided with the distribution.
|
* materials provided with the distribution.
|
||||||
*
|
*
|
||||||
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||||
* contributors may be used to endorse or promote products derived from this
|
* contributors may be used to endorse or promote products derived from this
|
||||||
* software without specific prior written permission.
|
* software without specific prior written permission.
|
||||||
*
|
*
|
||||||
* 4. This software, with or without modification, must only be used with a
|
* 4. This software, with or without modification, must only be used with a
|
||||||
* Nordic Semiconductor ASA integrated circuit.
|
* Nordic Semiconductor ASA integrated circuit.
|
||||||
*
|
*
|
||||||
* 5. Any software provided in binary form under this license must not be reverse
|
* 5. Any software provided in binary form under this license must not be reverse
|
||||||
* engineered, decompiled, modified and/or disassembled.
|
* engineered, decompiled, modified and/or disassembled.
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @defgroup nrf_nvic_api SoftDevice NVIC API
|
* @defgroup nrf_nvic_api SoftDevice NVIC API
|
||||||
* @{
|
* @{
|
||||||
*
|
*
|
||||||
* @note In order to use this module, the following code has to be added to a .c file:
|
* @note In order to use this module, the following code has to be added to a .c file:
|
||||||
* \code
|
* \code
|
||||||
* nrf_nvic_state_t nrf_nvic_state = {0};
|
* nrf_nvic_state_t nrf_nvic_state = {0};
|
||||||
* \endcode
|
* \endcode
|
||||||
*
|
*
|
||||||
* @note Definitions and declarations starting with __ (double underscore) in this header file are
|
* @note Definitions and declarations starting with __ (double underscore) in this header file are
|
||||||
* not intended for direct use by the application.
|
* not intended for direct use by the application.
|
||||||
*
|
*
|
||||||
* @brief APIs for the accessing NVIC when using a SoftDevice.
|
* @brief APIs for the accessing NVIC when using a SoftDevice.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef NRF_NVIC_H__
|
#ifndef NRF_NVIC_H__
|
||||||
#define NRF_NVIC_H__
|
#define NRF_NVIC_H__
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "nrf.h"
|
#include "nrf.h"
|
||||||
|
#include "nrf_svc.h"
|
||||||
#include "nrf_error_soc.h"
|
#include "nrf_error.h"
|
||||||
|
#include "nrf_error_soc.h"
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
#ifdef __cplusplus
|
||||||
#endif
|
extern "C" {
|
||||||
|
#endif
|
||||||
/**@addtogroup NRF_NVIC_DEFINES Defines
|
|
||||||
* @{ */
|
/**@addtogroup NRF_NVIC_DEFINES Defines
|
||||||
|
* @{ */
|
||||||
/**@defgroup NRF_NVIC_ISER_DEFINES SoftDevice NVIC internal definitions
|
|
||||||
* @{ */
|
/**@defgroup NRF_NVIC_ISER_DEFINES SoftDevice NVIC internal definitions
|
||||||
|
* @{ */
|
||||||
#define __NRF_NVIC_NVMC_IRQn (30) /**< The peripheral ID of the NVMC. IRQ numbers are used to identify peripherals, but the NVMC doesn't have an IRQ number in the MDK. */
|
|
||||||
|
#define __NRF_NVIC_NVMC_IRQn (30) /**< The peripheral ID of the NVMC. IRQ numbers are used to identify peripherals, but the NVMC doesn't have an IRQ number in the MDK. */
|
||||||
#define __NRF_NVIC_ISER_COUNT (2) /**< The number of ISER/ICER registers in the NVIC that are used. */
|
|
||||||
|
#define __NRF_NVIC_ISER_COUNT (2) /**< The number of ISER/ICER registers in the NVIC that are used. */
|
||||||
/**@brief Interrupts used by the SoftDevice, with IRQn in the range 0-31. */
|
|
||||||
#define __NRF_NVIC_SD_IRQS_0 ((uint32_t)( \
|
/**@brief Interrupts used by the SoftDevice, with IRQn in the range 0-31. */
|
||||||
(1U << POWER_CLOCK_IRQn) \
|
#define __NRF_NVIC_SD_IRQS_0 ((uint32_t)( \
|
||||||
| (1U << RADIO_IRQn) \
|
(1U << POWER_CLOCK_IRQn) \
|
||||||
| (1U << RTC0_IRQn) \
|
| (1U << RADIO_IRQn) \
|
||||||
| (1U << TIMER0_IRQn) \
|
| (1U << RTC0_IRQn) \
|
||||||
| (1U << RNG_IRQn) \
|
| (1U << TIMER0_IRQn) \
|
||||||
| (1U << ECB_IRQn) \
|
| (1U << RNG_IRQn) \
|
||||||
| (1U << CCM_AAR_IRQn) \
|
| (1U << ECB_IRQn) \
|
||||||
| (1U << TEMP_IRQn) \
|
| (1U << CCM_AAR_IRQn) \
|
||||||
| (1U << __NRF_NVIC_NVMC_IRQn) \
|
| (1U << TEMP_IRQn) \
|
||||||
| (1U << (uint32_t)SWI5_EGU5_IRQn) \
|
| (1U << __NRF_NVIC_NVMC_IRQn) \
|
||||||
))
|
| (1U << (uint32_t)SWI5_IRQn) \
|
||||||
|
))
|
||||||
/**@brief Interrupts used by the SoftDevice, with IRQn in the range 32-63. */
|
|
||||||
#define __NRF_NVIC_SD_IRQS_1 ((uint32_t)0)
|
/**@brief Interrupts used by the SoftDevice, with IRQn in the range 32-63. */
|
||||||
|
#define __NRF_NVIC_SD_IRQS_1 ((uint32_t)0)
|
||||||
/**@brief Interrupts available for to application, with IRQn in the range 0-31. */
|
|
||||||
#define __NRF_NVIC_APP_IRQS_0 (~__NRF_NVIC_SD_IRQS_0)
|
/**@brief Interrupts available for to application, with IRQn in the range 0-31. */
|
||||||
|
#define __NRF_NVIC_APP_IRQS_0 (~__NRF_NVIC_SD_IRQS_0)
|
||||||
/**@brief Interrupts available for to application, with IRQn in the range 32-63. */
|
|
||||||
#define __NRF_NVIC_APP_IRQS_1 (~__NRF_NVIC_SD_IRQS_1)
|
/**@brief Interrupts available for to application, with IRQn in the range 32-63. */
|
||||||
|
#define __NRF_NVIC_APP_IRQS_1 (~__NRF_NVIC_SD_IRQS_1)
|
||||||
/**@} */
|
|
||||||
|
/**@} */
|
||||||
/**@} */
|
|
||||||
|
/**@} */
|
||||||
/**@addtogroup NRF_NVIC_VARIABLES Variables
|
|
||||||
* @{ */
|
/**@addtogroup NRF_NVIC_VARIABLES Variables
|
||||||
|
* @{ */
|
||||||
/**@brief Type representing the state struct for the SoftDevice NVIC module. */
|
|
||||||
typedef struct
|
/**@brief Type representing the state struct for the SoftDevice NVIC module. */
|
||||||
{
|
typedef struct
|
||||||
uint32_t volatile __irq_masks[__NRF_NVIC_ISER_COUNT]; /**< IRQs enabled by the application in the NVIC. */
|
{
|
||||||
uint32_t volatile __cr_flag; /**< Non-zero if already in a critical region */
|
uint32_t volatile __irq_masks[__NRF_NVIC_ISER_COUNT]; /**< IRQs enabled by the application in the NVIC. */
|
||||||
} nrf_nvic_state_t;
|
uint32_t volatile __cr_flag; /**< Non-zero if already in a critical region */
|
||||||
|
} nrf_nvic_state_t;
|
||||||
/**@brief Variable keeping the state for the SoftDevice NVIC module. This must be declared in an
|
|
||||||
* application source file. */
|
/**@brief Variable keeping the state for the SoftDevice NVIC module. This must be declared in an
|
||||||
extern nrf_nvic_state_t nrf_nvic_state;
|
* application source file. */
|
||||||
|
extern nrf_nvic_state_t nrf_nvic_state;
|
||||||
/**@} */
|
|
||||||
|
/**@} */
|
||||||
/**@addtogroup NRF_NVIC_INTERNAL_FUNCTIONS SoftDevice NVIC internal functions
|
|
||||||
* @{ */
|
/**@addtogroup NRF_NVIC_INTERNAL_FUNCTIONS SoftDevice NVIC internal functions
|
||||||
|
* @{ */
|
||||||
/**@brief Disables IRQ interrupts globally, including the SoftDevice's interrupts.
|
|
||||||
*
|
/**@brief Disables IRQ interrupts globally, including the SoftDevice's interrupts.
|
||||||
* @retval The value of PRIMASK prior to disabling the interrupts.
|
*
|
||||||
*/
|
* @retval The value of PRIMASK prior to disabling the interrupts.
|
||||||
__STATIC_INLINE int __sd_nvic_irq_disable(void);
|
*/
|
||||||
|
__STATIC_INLINE int __sd_nvic_irq_disable(void);
|
||||||
/**@brief Enables IRQ interrupts globally, including the SoftDevice's interrupts.
|
|
||||||
*/
|
/**@brief Enables IRQ interrupts globally, including the SoftDevice's interrupts.
|
||||||
__STATIC_INLINE void __sd_nvic_irq_enable(void);
|
*/
|
||||||
|
__STATIC_INLINE void __sd_nvic_irq_enable(void);
|
||||||
/**@brief Checks if IRQn is available to application
|
|
||||||
* @param[in] IRQn IRQ to check
|
/**@brief Checks if IRQn is available to application
|
||||||
*
|
* @param[in] IRQn IRQ to check
|
||||||
* @retval 1 (true) if the IRQ to check is available to the application
|
*
|
||||||
*/
|
* @retval 1 (true) if the IRQ to check is available to the application
|
||||||
__STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn);
|
*/
|
||||||
|
__STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn);
|
||||||
/**@brief Checks if priority is available to application
|
|
||||||
* @param[in] priority priority to check
|
/**@brief Checks if priority is available to application
|
||||||
*
|
* @param[in] priority priority to check
|
||||||
* @retval 1 (true) if the priority to check is available to the application
|
*
|
||||||
*/
|
* @retval 1 (true) if the priority to check is available to the application
|
||||||
__STATIC_INLINE uint32_t __sd_nvic_is_app_accessible_priority(uint32_t priority);
|
*/
|
||||||
|
__STATIC_INLINE uint32_t __sd_nvic_is_app_accessible_priority(uint32_t priority);
|
||||||
/**@} */
|
|
||||||
|
/**@} */
|
||||||
/**@addtogroup NRF_NVIC_FUNCTIONS SoftDevice NVIC public functions
|
|
||||||
* @{ */
|
/**@addtogroup NRF_NVIC_FUNCTIONS SoftDevice NVIC public functions
|
||||||
|
* @{ */
|
||||||
/**@brief Enable External Interrupt.
|
|
||||||
* @note Corresponds to NVIC_EnableIRQ in CMSIS.
|
/**@brief Enable External Interrupt.
|
||||||
*
|
* @note Corresponds to NVIC_EnableIRQ in CMSIS.
|
||||||
* @pre IRQn is valid and not reserved by the stack.
|
*
|
||||||
*
|
* @pre IRQn is valid and not reserved by the stack.
|
||||||
* @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS.
|
*
|
||||||
*
|
* @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS.
|
||||||
* @retval ::NRF_SUCCESS The interrupt was enabled.
|
*
|
||||||
* @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application.
|
* @retval ::NRF_SUCCESS The interrupt was enabled.
|
||||||
* @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt has a priority not available for the application.
|
* @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application.
|
||||||
*/
|
* @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt has a priority not available for the application.
|
||||||
__STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn);
|
*/
|
||||||
|
__STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn);
|
||||||
/**@brief Disable External Interrupt.
|
|
||||||
* @note Corresponds to NVIC_DisableIRQ in CMSIS.
|
/**@brief Disable External Interrupt.
|
||||||
*
|
* @note Corresponds to NVIC_DisableIRQ in CMSIS.
|
||||||
* @pre IRQn is valid and not reserved by the stack.
|
*
|
||||||
*
|
* @pre IRQn is valid and not reserved by the stack.
|
||||||
* @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS.
|
*
|
||||||
*
|
* @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS.
|
||||||
* @retval ::NRF_SUCCESS The interrupt was disabled.
|
*
|
||||||
* @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application.
|
* @retval ::NRF_SUCCESS The interrupt was disabled.
|
||||||
*/
|
* @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application.
|
||||||
__STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn);
|
*/
|
||||||
|
__STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn);
|
||||||
/**@brief Get Pending Interrupt.
|
|
||||||
* @note Corresponds to NVIC_GetPendingIRQ in CMSIS.
|
/**@brief Get Pending Interrupt.
|
||||||
*
|
* @note Corresponds to NVIC_GetPendingIRQ in CMSIS.
|
||||||
* @pre IRQn is valid and not reserved by the stack.
|
*
|
||||||
*
|
* @pre IRQn is valid and not reserved by the stack.
|
||||||
* @param[in] IRQn See the NVIC_GetPendingIRQ documentation in CMSIS.
|
*
|
||||||
* @param[out] p_pending_irq Return value from NVIC_GetPendingIRQ.
|
* @param[in] IRQn See the NVIC_GetPendingIRQ documentation in CMSIS.
|
||||||
*
|
* @param[out] p_pending_irq Return value from NVIC_GetPendingIRQ.
|
||||||
* @retval ::NRF_SUCCESS The interrupt is available for the application.
|
*
|
||||||
* @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application.
|
* @retval ::NRF_SUCCESS The interrupt is available for the application.
|
||||||
*/
|
* @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application.
|
||||||
__STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq);
|
*/
|
||||||
|
__STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq);
|
||||||
/**@brief Set Pending Interrupt.
|
|
||||||
* @note Corresponds to NVIC_SetPendingIRQ in CMSIS.
|
/**@brief Set Pending Interrupt.
|
||||||
*
|
* @note Corresponds to NVIC_SetPendingIRQ in CMSIS.
|
||||||
* @pre IRQn is valid and not reserved by the stack.
|
*
|
||||||
*
|
* @pre IRQn is valid and not reserved by the stack.
|
||||||
* @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS.
|
*
|
||||||
*
|
* @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS.
|
||||||
* @retval ::NRF_SUCCESS The interrupt is set pending.
|
*
|
||||||
* @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application.
|
* @retval ::NRF_SUCCESS The interrupt is set pending.
|
||||||
*/
|
* @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application.
|
||||||
__STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn);
|
*/
|
||||||
|
__STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn);
|
||||||
/**@brief Clear Pending Interrupt.
|
|
||||||
* @note Corresponds to NVIC_ClearPendingIRQ in CMSIS.
|
/**@brief Clear Pending Interrupt.
|
||||||
*
|
* @note Corresponds to NVIC_ClearPendingIRQ in CMSIS.
|
||||||
* @pre IRQn is valid and not reserved by the stack.
|
*
|
||||||
*
|
* @pre IRQn is valid and not reserved by the stack.
|
||||||
* @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS.
|
*
|
||||||
*
|
* @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS.
|
||||||
* @retval ::NRF_SUCCESS The interrupt pending flag is cleared.
|
*
|
||||||
* @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application.
|
* @retval ::NRF_SUCCESS The interrupt pending flag is cleared.
|
||||||
*/
|
* @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application.
|
||||||
__STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn);
|
*/
|
||||||
|
__STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn);
|
||||||
/**@brief Set Interrupt Priority.
|
|
||||||
* @note Corresponds to NVIC_SetPriority in CMSIS.
|
/**@brief Set Interrupt Priority.
|
||||||
*
|
* @note Corresponds to NVIC_SetPriority in CMSIS.
|
||||||
* @pre IRQn is valid and not reserved by the stack.
|
*
|
||||||
* @pre Priority is valid and not reserved by the stack.
|
* @pre IRQn is valid and not reserved by the stack.
|
||||||
*
|
* @pre Priority is valid and not reserved by the stack.
|
||||||
* @param[in] IRQn See the NVIC_SetPriority documentation in CMSIS.
|
*
|
||||||
* @param[in] priority A valid IRQ priority for use by the application.
|
* @param[in] IRQn See the NVIC_SetPriority documentation in CMSIS.
|
||||||
*
|
* @param[in] priority A valid IRQ priority for use by the application.
|
||||||
* @retval ::NRF_SUCCESS The interrupt and priority level is available for the application.
|
*
|
||||||
* @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application.
|
* @retval ::NRF_SUCCESS The interrupt and priority level is available for the application.
|
||||||
* @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt priority is not available for the application.
|
* @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application.
|
||||||
*/
|
* @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt priority is not available for the application.
|
||||||
__STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority);
|
*/
|
||||||
|
__STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority);
|
||||||
/**@brief Get Interrupt Priority.
|
|
||||||
* @note Corresponds to NVIC_GetPriority in CMSIS.
|
/**@brief Get Interrupt Priority.
|
||||||
*
|
* @note Corresponds to NVIC_GetPriority in CMSIS.
|
||||||
* @pre IRQn is valid and not reserved by the stack.
|
*
|
||||||
*
|
* @pre IRQn is valid and not reserved by the stack.
|
||||||
* @param[in] IRQn See the NVIC_GetPriority documentation in CMSIS.
|
*
|
||||||
* @param[out] p_priority Return value from NVIC_GetPriority.
|
* @param[in] IRQn See the NVIC_GetPriority documentation in CMSIS.
|
||||||
*
|
* @param[out] p_priority Return value from NVIC_GetPriority.
|
||||||
* @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority.
|
*
|
||||||
* @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE - IRQn is not available for the application.
|
* @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority.
|
||||||
*/
|
* @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE - IRQn is not available for the application.
|
||||||
__STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority);
|
*/
|
||||||
|
__STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority);
|
||||||
/**@brief System Reset.
|
|
||||||
* @note Corresponds to NVIC_SystemReset in CMSIS.
|
/**@brief System Reset.
|
||||||
*
|
* @note Corresponds to NVIC_SystemReset in CMSIS.
|
||||||
* @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN
|
*
|
||||||
*/
|
* @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN
|
||||||
__STATIC_INLINE uint32_t sd_nvic_SystemReset(void);
|
*/
|
||||||
|
__STATIC_INLINE uint32_t sd_nvic_SystemReset(void);
|
||||||
/**@brief Enter critical region.
|
|
||||||
*
|
/**@brief Enter critical region.
|
||||||
* @post Application interrupts will be disabled.
|
*
|
||||||
* @note sd_nvic_critical_region_enter() and ::sd_nvic_critical_region_exit() must be called in matching pairs inside each
|
* @post Application interrupts will be disabled.
|
||||||
* execution context
|
* @note sd_nvic_critical_region_enter() and ::sd_nvic_critical_region_exit() must be called in matching pairs inside each
|
||||||
* @sa sd_nvic_critical_region_exit
|
* execution context
|
||||||
*
|
* @sa sd_nvic_critical_region_exit
|
||||||
* @param[out] p_is_nested_critical_region If 1, the application is now in a nested critical region.
|
*
|
||||||
*
|
* @param[out] p_is_nested_critical_region If 1, the application is now in a nested critical region.
|
||||||
* @retval ::NRF_SUCCESS
|
*
|
||||||
*/
|
* @retval ::NRF_SUCCESS
|
||||||
__STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region);
|
*/
|
||||||
|
__STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region);
|
||||||
/**@brief Exit critical region.
|
|
||||||
*
|
/**@brief Exit critical region.
|
||||||
* @pre Application has entered a critical region using ::sd_nvic_critical_region_enter.
|
*
|
||||||
* @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called.
|
* @pre Application has entered a critical region using ::sd_nvic_critical_region_enter.
|
||||||
*
|
* @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called.
|
||||||
* @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter.
|
*
|
||||||
*
|
* @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter.
|
||||||
* @retval ::NRF_SUCCESS
|
*
|
||||||
*/
|
* @retval ::NRF_SUCCESS
|
||||||
__STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region);
|
*/
|
||||||
|
__STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region);
|
||||||
/**@} */
|
|
||||||
|
/**@} */
|
||||||
#ifndef SUPPRESS_INLINE_IMPLEMENTATION
|
|
||||||
|
#ifndef SUPPRESS_INLINE_IMPLEMENTATION
|
||||||
__STATIC_INLINE int __sd_nvic_irq_disable(void)
|
|
||||||
{
|
__STATIC_INLINE int __sd_nvic_irq_disable(void)
|
||||||
int pm = __get_PRIMASK();
|
{
|
||||||
__disable_irq();
|
int pm = __get_PRIMASK();
|
||||||
return pm;
|
__disable_irq();
|
||||||
}
|
return pm;
|
||||||
|
}
|
||||||
__STATIC_INLINE void __sd_nvic_irq_enable(void)
|
|
||||||
{
|
__STATIC_INLINE void __sd_nvic_irq_enable(void)
|
||||||
__enable_irq();
|
{
|
||||||
}
|
__enable_irq();
|
||||||
|
}
|
||||||
__STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn)
|
|
||||||
{
|
__STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn)
|
||||||
if (IRQn < 32)
|
{
|
||||||
{
|
if (IRQn < 32)
|
||||||
return ((1UL<<IRQn) & __NRF_NVIC_APP_IRQS_0) != 0;
|
{
|
||||||
}
|
return ((1UL<<IRQn) & __NRF_NVIC_APP_IRQS_0) != 0;
|
||||||
else if (IRQn < 64)
|
}
|
||||||
{
|
else if (IRQn < 64)
|
||||||
return ((1UL<<(IRQn-32)) & __NRF_NVIC_APP_IRQS_1) != 0;
|
{
|
||||||
}
|
return ((1UL<<(IRQn-32)) & __NRF_NVIC_APP_IRQS_1) != 0;
|
||||||
else
|
}
|
||||||
{
|
else
|
||||||
return 1;
|
{
|
||||||
}
|
return 1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
__STATIC_INLINE uint32_t __sd_nvic_is_app_accessible_priority(uint32_t priority)
|
|
||||||
{
|
__STATIC_INLINE uint32_t __sd_nvic_is_app_accessible_priority(uint32_t priority)
|
||||||
if(priority >= (1 << __NVIC_PRIO_BITS))
|
{
|
||||||
{
|
if(priority >= (1 << __NVIC_PRIO_BITS))
|
||||||
return 0;
|
{
|
||||||
}
|
return 0;
|
||||||
if( priority == 0
|
}
|
||||||
|| priority == 1
|
if( priority == 0
|
||||||
|| priority == 4
|
|| priority == 1
|
||||||
)
|
|| priority == 4
|
||||||
{
|
)
|
||||||
return 0;
|
{
|
||||||
}
|
return 0;
|
||||||
return 1;
|
}
|
||||||
}
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
__STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn)
|
|
||||||
{
|
__STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn)
|
||||||
if (!__sd_nvic_app_accessible_irq(IRQn))
|
{
|
||||||
{
|
if (!__sd_nvic_app_accessible_irq(IRQn))
|
||||||
return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE;
|
{
|
||||||
}
|
return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE;
|
||||||
if (!__sd_nvic_is_app_accessible_priority(NVIC_GetPriority(IRQn)))
|
}
|
||||||
{
|
if (!__sd_nvic_is_app_accessible_priority(NVIC_GetPriority(IRQn)))
|
||||||
return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED;
|
{
|
||||||
}
|
return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED;
|
||||||
|
}
|
||||||
if (nrf_nvic_state.__cr_flag)
|
|
||||||
{
|
if (nrf_nvic_state.__cr_flag)
|
||||||
nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] |= (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F));
|
{
|
||||||
}
|
nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] |= (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F));
|
||||||
else
|
}
|
||||||
{
|
else
|
||||||
NVIC_EnableIRQ(IRQn);
|
{
|
||||||
}
|
NVIC_EnableIRQ(IRQn);
|
||||||
return NRF_SUCCESS;
|
}
|
||||||
}
|
return NRF_SUCCESS;
|
||||||
|
}
|
||||||
__STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn)
|
|
||||||
{
|
__STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn)
|
||||||
if (!__sd_nvic_app_accessible_irq(IRQn))
|
{
|
||||||
{
|
if (!__sd_nvic_app_accessible_irq(IRQn))
|
||||||
return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE;
|
{
|
||||||
}
|
return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE;
|
||||||
|
}
|
||||||
if (nrf_nvic_state.__cr_flag)
|
|
||||||
{
|
if (nrf_nvic_state.__cr_flag)
|
||||||
nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] &= ~(1UL << ((uint32_t)(IRQn) & 0x1F));
|
{
|
||||||
}
|
nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] &= ~(1UL << ((uint32_t)(IRQn) & 0x1F));
|
||||||
else
|
}
|
||||||
{
|
else
|
||||||
NVIC_DisableIRQ(IRQn);
|
{
|
||||||
}
|
NVIC_DisableIRQ(IRQn);
|
||||||
|
}
|
||||||
return NRF_SUCCESS;
|
|
||||||
}
|
return NRF_SUCCESS;
|
||||||
|
}
|
||||||
__STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq)
|
|
||||||
{
|
__STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq)
|
||||||
if (__sd_nvic_app_accessible_irq(IRQn))
|
{
|
||||||
{
|
if (__sd_nvic_app_accessible_irq(IRQn))
|
||||||
*p_pending_irq = NVIC_GetPendingIRQ(IRQn);
|
{
|
||||||
return NRF_SUCCESS;
|
*p_pending_irq = NVIC_GetPendingIRQ(IRQn);
|
||||||
}
|
return NRF_SUCCESS;
|
||||||
else
|
}
|
||||||
{
|
else
|
||||||
return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE;
|
{
|
||||||
}
|
return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
__STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn)
|
|
||||||
{
|
__STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn)
|
||||||
if (__sd_nvic_app_accessible_irq(IRQn))
|
{
|
||||||
{
|
if (__sd_nvic_app_accessible_irq(IRQn))
|
||||||
NVIC_SetPendingIRQ(IRQn);
|
{
|
||||||
return NRF_SUCCESS;
|
NVIC_SetPendingIRQ(IRQn);
|
||||||
}
|
return NRF_SUCCESS;
|
||||||
else
|
}
|
||||||
{
|
else
|
||||||
return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE;
|
{
|
||||||
}
|
return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
__STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn)
|
|
||||||
{
|
__STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn)
|
||||||
if (__sd_nvic_app_accessible_irq(IRQn))
|
{
|
||||||
{
|
if (__sd_nvic_app_accessible_irq(IRQn))
|
||||||
NVIC_ClearPendingIRQ(IRQn);
|
{
|
||||||
return NRF_SUCCESS;
|
NVIC_ClearPendingIRQ(IRQn);
|
||||||
}
|
return NRF_SUCCESS;
|
||||||
else
|
}
|
||||||
{
|
else
|
||||||
return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE;
|
{
|
||||||
}
|
return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
__STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority)
|
|
||||||
{
|
__STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority)
|
||||||
if (!__sd_nvic_app_accessible_irq(IRQn))
|
{
|
||||||
{
|
if (!__sd_nvic_app_accessible_irq(IRQn))
|
||||||
return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE;
|
{
|
||||||
}
|
return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE;
|
||||||
|
}
|
||||||
if (!__sd_nvic_is_app_accessible_priority(priority))
|
|
||||||
{
|
if (!__sd_nvic_is_app_accessible_priority(priority))
|
||||||
return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED;
|
{
|
||||||
}
|
return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED;
|
||||||
|
}
|
||||||
NVIC_SetPriority(IRQn, (uint32_t)priority);
|
|
||||||
return NRF_SUCCESS;
|
NVIC_SetPriority(IRQn, (uint32_t)priority);
|
||||||
}
|
return NRF_SUCCESS;
|
||||||
|
}
|
||||||
__STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority)
|
|
||||||
{
|
__STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority)
|
||||||
if (__sd_nvic_app_accessible_irq(IRQn))
|
{
|
||||||
{
|
if (__sd_nvic_app_accessible_irq(IRQn))
|
||||||
*p_priority = (NVIC_GetPriority(IRQn) & 0xFF);
|
{
|
||||||
return NRF_SUCCESS;
|
*p_priority = (NVIC_GetPriority(IRQn) & 0xFF);
|
||||||
}
|
return NRF_SUCCESS;
|
||||||
else
|
}
|
||||||
{
|
else
|
||||||
return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE;
|
{
|
||||||
}
|
return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
__STATIC_INLINE uint32_t sd_nvic_SystemReset(void)
|
|
||||||
{
|
__STATIC_INLINE uint32_t sd_nvic_SystemReset(void)
|
||||||
NVIC_SystemReset();
|
{
|
||||||
return NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN;
|
NVIC_SystemReset();
|
||||||
}
|
return NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN;
|
||||||
|
}
|
||||||
__STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region)
|
|
||||||
{
|
__STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region)
|
||||||
int was_masked = __sd_nvic_irq_disable();
|
{
|
||||||
if (!nrf_nvic_state.__cr_flag)
|
int was_masked = __sd_nvic_irq_disable();
|
||||||
{
|
if (!nrf_nvic_state.__cr_flag)
|
||||||
nrf_nvic_state.__cr_flag = 1;
|
{
|
||||||
nrf_nvic_state.__irq_masks[0] = ( NVIC->ICER[0] & __NRF_NVIC_APP_IRQS_0 );
|
nrf_nvic_state.__cr_flag = 1;
|
||||||
NVIC->ICER[0] = __NRF_NVIC_APP_IRQS_0;
|
nrf_nvic_state.__irq_masks[0] = ( NVIC->ICER[0] & __NRF_NVIC_APP_IRQS_0 );
|
||||||
nrf_nvic_state.__irq_masks[1] = ( NVIC->ICER[1] & __NRF_NVIC_APP_IRQS_1 );
|
NVIC->ICER[0] = __NRF_NVIC_APP_IRQS_0;
|
||||||
NVIC->ICER[1] = __NRF_NVIC_APP_IRQS_1;
|
nrf_nvic_state.__irq_masks[1] = ( NVIC->ICER[1] & __NRF_NVIC_APP_IRQS_1 );
|
||||||
*p_is_nested_critical_region = 0;
|
NVIC->ICER[1] = __NRF_NVIC_APP_IRQS_1;
|
||||||
}
|
*p_is_nested_critical_region = 0;
|
||||||
else
|
}
|
||||||
{
|
else
|
||||||
*p_is_nested_critical_region = 1;
|
{
|
||||||
}
|
*p_is_nested_critical_region = 1;
|
||||||
if (!was_masked)
|
}
|
||||||
{
|
if (!was_masked)
|
||||||
__sd_nvic_irq_enable();
|
{
|
||||||
}
|
__sd_nvic_irq_enable();
|
||||||
return NRF_SUCCESS;
|
}
|
||||||
}
|
return NRF_SUCCESS;
|
||||||
|
}
|
||||||
__STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region)
|
|
||||||
{
|
__STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region)
|
||||||
if (nrf_nvic_state.__cr_flag && (is_nested_critical_region == 0))
|
{
|
||||||
{
|
if (nrf_nvic_state.__cr_flag && (is_nested_critical_region == 0))
|
||||||
int was_masked = __sd_nvic_irq_disable();
|
{
|
||||||
NVIC->ISER[0] = nrf_nvic_state.__irq_masks[0];
|
int was_masked = __sd_nvic_irq_disable();
|
||||||
NVIC->ISER[1] = nrf_nvic_state.__irq_masks[1];
|
NVIC->ISER[0] = nrf_nvic_state.__irq_masks[0];
|
||||||
nrf_nvic_state.__cr_flag = 0;
|
NVIC->ISER[1] = nrf_nvic_state.__irq_masks[1];
|
||||||
if (!was_masked)
|
nrf_nvic_state.__cr_flag = 0;
|
||||||
{
|
if (!was_masked)
|
||||||
__sd_nvic_irq_enable();
|
{
|
||||||
}
|
__sd_nvic_irq_enable();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return NRF_SUCCESS;
|
|
||||||
}
|
return NRF_SUCCESS;
|
||||||
|
}
|
||||||
#endif /* SUPPRESS_INLINE_IMPLEMENTATION */
|
|
||||||
|
#endif /* SUPPRESS_INLINE_IMPLEMENTATION */
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
#ifdef __cplusplus
|
||||||
#endif
|
}
|
||||||
|
#endif
|
||||||
#endif // NRF_NVIC_H__
|
|
||||||
|
#endif // NRF_NVIC_H__
|
||||||
/**@} */
|
|
||||||
|
/**@} */
|
59
softdevice/6.0.0/s140/headers/nrf_sd_def.h
Normal file
59
softdevice/6.0.0/s140/headers/nrf_sd_def.h
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2015 - 2018, Nordic Semiconductor ASA
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||||
|
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||||
|
* such product, must reproduce the above copyright notice, this list of
|
||||||
|
* conditions and the following disclaimer in the documentation and/or other
|
||||||
|
* materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* 4. This software, with or without modification, must only be used with a
|
||||||
|
* Nordic Semiconductor ASA integrated circuit.
|
||||||
|
*
|
||||||
|
* 5. Any software provided in binary form under this license must not be reverse
|
||||||
|
* engineered, decompiled, modified and/or disassembled.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||||
|
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#ifndef NRF_SD_DEF_H__
|
||||||
|
#define NRF_SD_DEF_H__
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define SD_PPI_CHANNELS_USED 0xFFFE0000uL /**< PPI channels utilized by SotfDevice (not available to the application). */
|
||||||
|
#define SD_PPI_GROUPS_USED 0x0000000CuL /**< PPI groups utilized by SoftDevice (not available to the application). */
|
||||||
|
#define SD_TIMERS_USED 0x00000001uL /**< Timers used by SoftDevice. */
|
||||||
|
#define SD_SWI_USED 0x0000003CuL /**< Software interrupts used by SoftDevice */
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* NRF_SD_DEF_H__ */
|
@ -1,355 +1,358 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2015 - 2017, Nordic Semiconductor ASA
|
* Copyright (c) 2015 - 2017, Nordic Semiconductor ASA
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modification,
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
* are permitted provided that the following conditions are met:
|
* are permitted provided that the following conditions are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
* list of conditions and the following disclaimer.
|
* list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* 2. Redistributions in binary form, except as embedded into a Nordic
|
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||||
* Semiconductor ASA integrated circuit in a product or a software update for
|
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||||
* such product, must reproduce the above copyright notice, this list of
|
* such product, must reproduce the above copyright notice, this list of
|
||||||
* conditions and the following disclaimer in the documentation and/or other
|
* conditions and the following disclaimer in the documentation and/or other
|
||||||
* materials provided with the distribution.
|
* materials provided with the distribution.
|
||||||
*
|
*
|
||||||
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||||
* contributors may be used to endorse or promote products derived from this
|
* contributors may be used to endorse or promote products derived from this
|
||||||
* software without specific prior written permission.
|
* software without specific prior written permission.
|
||||||
*
|
*
|
||||||
* 4. This software, with or without modification, must only be used with a
|
* 4. This software, with or without modification, must only be used with a
|
||||||
* Nordic Semiconductor ASA integrated circuit.
|
* Nordic Semiconductor ASA integrated circuit.
|
||||||
*
|
*
|
||||||
* 5. Any software provided in binary form under this license must not be reverse
|
* 5. Any software provided in binary form under this license must not be reverse
|
||||||
* engineered, decompiled, modified and/or disassembled.
|
* engineered, decompiled, modified and/or disassembled.
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@defgroup nrf_sdm_api SoftDevice Manager API
|
@defgroup nrf_sdm_api SoftDevice Manager API
|
||||||
@{
|
@{
|
||||||
|
|
||||||
@brief APIs for SoftDevice management.
|
@brief APIs for SoftDevice management.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef NRF_SDM_H__
|
#ifndef NRF_SDM_H__
|
||||||
#define NRF_SDM_H__
|
#define NRF_SDM_H__
|
||||||
|
|
||||||
#include "nrf_svc.h"
|
#include <stdint.h>
|
||||||
#include "nrf.h"
|
#include "nrf.h"
|
||||||
#include "nrf_soc.h"
|
#include "nrf_svc.h"
|
||||||
#include "nrf_error_sdm.h"
|
#include "nrf_error.h"
|
||||||
|
#include "nrf_error_sdm.h"
|
||||||
#ifdef __cplusplus
|
#include "nrf_soc.h"
|
||||||
extern "C" {
|
|
||||||
#endif
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
/** @addtogroup NRF_SDM_DEFINES Defines
|
#endif
|
||||||
* @{ */
|
|
||||||
#ifdef NRFSOC_DOXYGEN
|
/** @addtogroup NRF_SDM_DEFINES Defines
|
||||||
/// Declared in nrf_mbr.h
|
* @{ */
|
||||||
#define MBR_SIZE 0
|
#ifdef NRFSOC_DOXYGEN
|
||||||
#warning test
|
/// Declared in nrf_mbr.h
|
||||||
#endif
|
#define MBR_SIZE 0
|
||||||
|
#warning test
|
||||||
/** @brief The major version for the SoftDevice binary distributed with this header file. */
|
#endif
|
||||||
#define SD_MAJOR_VERSION (0)
|
|
||||||
|
/** @brief The major version for the SoftDevice binary distributed with this header file. */
|
||||||
/** @brief The minor version for the SoftDevice binary distributed with this header file. */
|
#define SD_MAJOR_VERSION (6)
|
||||||
#define SD_MINOR_VERSION (0)
|
|
||||||
|
/** @brief The minor version for the SoftDevice binary distributed with this header file. */
|
||||||
/** @brief The bugfix version for the SoftDevice binary distributed with this header file. */
|
#define SD_MINOR_VERSION (0)
|
||||||
#define SD_BUGFIX_VERSION (0)
|
|
||||||
|
/** @brief The bugfix version for the SoftDevice binary distributed with this header file. */
|
||||||
/** @brief The full version number for the SoftDevice binary this header file was distributed
|
#define SD_BUGFIX_VERSION (0)
|
||||||
* with, as a decimal number in the form Mmmmbbb, where:
|
|
||||||
* - M is major version (one or more digits)
|
/** @brief The full version number for the SoftDevice binary this header file was distributed
|
||||||
* - mmm is minor version (three digits)
|
* with, as a decimal number in the form Mmmmbbb, where:
|
||||||
* - bbb is bugfix version (three digits). */
|
* - M is major version (one or more digits)
|
||||||
#define SD_VERSION (SD_MAJOR_VERSION * 1000000 + SD_MINOR_VERSION * 1000 + SD_BUGFIX_VERSION)
|
* - mmm is minor version (three digits)
|
||||||
|
* - bbb is bugfix version (three digits). */
|
||||||
/** @brief SoftDevice Manager SVC Base number. */
|
#define SD_VERSION (SD_MAJOR_VERSION * 1000000 + SD_MINOR_VERSION * 1000 + SD_BUGFIX_VERSION)
|
||||||
#define SDM_SVC_BASE 0x10
|
|
||||||
|
/** @brief SoftDevice Manager SVC Base number. */
|
||||||
/** @brief SoftDevice unique string size in bytes. */
|
#define SDM_SVC_BASE 0x10
|
||||||
#define SD_UNIQUE_STR_SIZE 20
|
|
||||||
|
/** @brief SoftDevice unique string size in bytes. */
|
||||||
/** @brief Invalid info field. Returned when an info field does not exist. */
|
#define SD_UNIQUE_STR_SIZE 20
|
||||||
#define SDM_INFO_FIELD_INVALID (0)
|
|
||||||
|
/** @brief Invalid info field. Returned when an info field does not exist. */
|
||||||
/** @brief Defines the SoftDevice Information Structure location (address) as an offset from
|
#define SDM_INFO_FIELD_INVALID (0)
|
||||||
the start of the SoftDevice (without MBR)*/
|
|
||||||
#define SOFTDEVICE_INFO_STRUCT_OFFSET (0x2000)
|
/** @brief Defines the SoftDevice Information Structure location (address) as an offset from
|
||||||
|
the start of the SoftDevice (without MBR)*/
|
||||||
/** @brief Defines the absolute SoftDevice Information Structure location (address) when the
|
#define SOFTDEVICE_INFO_STRUCT_OFFSET (0x2000)
|
||||||
* SoftDevice is installed just above the MBR (the usual case). */
|
|
||||||
#define SOFTDEVICE_INFO_STRUCT_ADDRESS (SOFTDEVICE_INFO_STRUCT_OFFSET + MBR_SIZE)
|
/** @brief Defines the absolute SoftDevice Information Structure location (address) when the
|
||||||
|
* SoftDevice is installed just above the MBR (the usual case). */
|
||||||
/** @brief Defines the offset for the SoftDevice Information Structure size value relative to the
|
#define SOFTDEVICE_INFO_STRUCT_ADDRESS (SOFTDEVICE_INFO_STRUCT_OFFSET + MBR_SIZE)
|
||||||
* SoftDevice base address. The size value is of type uint8_t. */
|
|
||||||
#define SD_INFO_STRUCT_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET)
|
/** @brief Defines the offset for the SoftDevice Information Structure size value relative to the
|
||||||
|
* SoftDevice base address. The size value is of type uint8_t. */
|
||||||
/** @brief Defines the offset for the SoftDevice size value relative to the SoftDevice base address.
|
#define SD_INFO_STRUCT_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET)
|
||||||
* The size value is of type uint32_t. */
|
|
||||||
#define SD_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x08)
|
/** @brief Defines the offset for the SoftDevice size value relative to the SoftDevice base address.
|
||||||
|
* The size value is of type uint32_t. */
|
||||||
/** @brief Defines the offset for FWID value relative to the SoftDevice base address. The FWID value
|
#define SD_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x08)
|
||||||
* is of type uint16_t. */
|
|
||||||
#define SD_FWID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x0C)
|
/** @brief Defines the offset for FWID value relative to the SoftDevice base address. The FWID value
|
||||||
|
* is of type uint16_t. */
|
||||||
/** @brief Defines the offset for the SoftDevice ID relative to the SoftDevice base address. The ID
|
#define SD_FWID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x0C)
|
||||||
* is of type uint32_t. */
|
|
||||||
#define SD_ID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x10)
|
/** @brief Defines the offset for the SoftDevice ID relative to the SoftDevice base address. The ID
|
||||||
|
* is of type uint32_t. */
|
||||||
/** @brief Defines the offset for the SoftDevice version relative to the SoftDevice base address in
|
#define SD_ID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x10)
|
||||||
* the same format as @ref SD_VERSION, stored as an uint32_t. */
|
|
||||||
#define SD_VERSION_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x14)
|
/** @brief Defines the offset for the SoftDevice version relative to the SoftDevice base address in
|
||||||
|
* the same format as @ref SD_VERSION, stored as an uint32_t. */
|
||||||
/** @brief Defines the offset for the SoftDevice unique string relative to the SoftDevice base address.
|
#define SD_VERSION_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x14)
|
||||||
* The SD_UNIQUE_STR is stored as an array of uint8_t. The size of array is @ref SD_UNIQUE_STR_SIZE.
|
|
||||||
*/
|
/** @brief Defines the offset for the SoftDevice unique string relative to the SoftDevice base address.
|
||||||
#define SD_UNIQUE_STR_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x18)
|
* The SD_UNIQUE_STR is stored as an array of uint8_t. The size of array is @ref SD_UNIQUE_STR_SIZE.
|
||||||
|
*/
|
||||||
/** @brief Defines a macro for retrieving the actual SoftDevice Information Structure size value
|
#define SD_UNIQUE_STR_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x18)
|
||||||
* from a given base address. Use @ref MBR_SIZE as the argument when the SoftDevice is
|
|
||||||
* installed just above the MBR (the usual case). */
|
/** @brief Defines a macro for retrieving the actual SoftDevice Information Structure size value
|
||||||
#define SD_INFO_STRUCT_SIZE_GET(baseaddr) (*((uint8_t *) ((baseaddr) + SD_INFO_STRUCT_SIZE_OFFSET)))
|
* from a given base address. Use @ref MBR_SIZE as the argument when the SoftDevice is
|
||||||
|
* installed just above the MBR (the usual case). */
|
||||||
/** @brief Defines a macro for retrieving the actual SoftDevice size value from a given base
|
#define SD_INFO_STRUCT_SIZE_GET(baseaddr) (*((uint8_t *) ((baseaddr) + SD_INFO_STRUCT_SIZE_OFFSET)))
|
||||||
* address. Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above
|
|
||||||
* the MBR (the usual case). */
|
/** @brief Defines a macro for retrieving the actual SoftDevice size value from a given base
|
||||||
#define SD_SIZE_GET(baseaddr) (*((uint32_t *) ((baseaddr) + SD_SIZE_OFFSET)))
|
* address. Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above
|
||||||
|
* the MBR (the usual case). */
|
||||||
/** @brief Defines a macro for retrieving the actual FWID value from a given base address. Use
|
#define SD_SIZE_GET(baseaddr) (*((uint32_t *) ((baseaddr) + SD_SIZE_OFFSET)))
|
||||||
* @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the usual
|
|
||||||
* case). */
|
/** @brief Defines a macro for retrieving the actual FWID value from a given base address. Use
|
||||||
#define SD_FWID_GET(baseaddr) (*((uint16_t *) ((baseaddr) + SD_FWID_OFFSET)))
|
* @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the usual
|
||||||
|
* case). */
|
||||||
/** @brief Defines a macro for retrieving the actual SoftDevice ID from a given base address. Use
|
#define SD_FWID_GET(baseaddr) (*((uint16_t *) ((baseaddr) + SD_FWID_OFFSET)))
|
||||||
* @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the
|
|
||||||
* usual case). */
|
/** @brief Defines a macro for retrieving the actual SoftDevice ID from a given base address. Use
|
||||||
#define SD_ID_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_ID_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \
|
* @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the
|
||||||
? (*((uint32_t *) ((baseaddr) + SD_ID_OFFSET))) : SDM_INFO_FIELD_INVALID)
|
* usual case). */
|
||||||
|
#define SD_ID_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_ID_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \
|
||||||
/** @brief Defines a macro for retrieving the actual SoftDevice version from a given base address.
|
? (*((uint32_t *) ((baseaddr) + SD_ID_OFFSET))) : SDM_INFO_FIELD_INVALID)
|
||||||
* Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR
|
|
||||||
* (the usual case). */
|
/** @brief Defines a macro for retrieving the actual SoftDevice version from a given base address.
|
||||||
#define SD_VERSION_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_VERSION_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \
|
* Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR
|
||||||
? (*((uint32_t *) ((baseaddr) + SD_VERSION_OFFSET))) : SDM_INFO_FIELD_INVALID)
|
* (the usual case). */
|
||||||
|
#define SD_VERSION_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_VERSION_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \
|
||||||
/** @brief Defines a macro for retrieving the address of SoftDevice unique str based on a given base address.
|
? (*((uint32_t *) ((baseaddr) + SD_VERSION_OFFSET))) : SDM_INFO_FIELD_INVALID)
|
||||||
* Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR
|
|
||||||
* (the usual case). */
|
/** @brief Defines a macro for retrieving the address of SoftDevice unique str based on a given base address.
|
||||||
#define SD_UNIQUE_STR_ADDR_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_UNIQUE_STR_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \
|
* Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR
|
||||||
? (((uint8_t *) ((baseaddr) + SD_UNIQUE_STR_OFFSET))) : SDM_INFO_FIELD_INVALID)
|
* (the usual case). */
|
||||||
|
#define SD_UNIQUE_STR_ADDR_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_UNIQUE_STR_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \
|
||||||
/**@defgroup NRF_FAULT_ID_RANGES Fault ID ranges
|
? (((uint8_t *) ((baseaddr) + SD_UNIQUE_STR_OFFSET))) : SDM_INFO_FIELD_INVALID)
|
||||||
* @{ */
|
|
||||||
#define NRF_FAULT_ID_SD_RANGE_START 0x00000000 /**< SoftDevice ID range start. */
|
/**@defgroup NRF_FAULT_ID_RANGES Fault ID ranges
|
||||||
#define NRF_FAULT_ID_APP_RANGE_START 0x00001000 /**< Application ID range start. */
|
* @{ */
|
||||||
/**@} */
|
#define NRF_FAULT_ID_SD_RANGE_START 0x00000000 /**< SoftDevice ID range start. */
|
||||||
|
#define NRF_FAULT_ID_APP_RANGE_START 0x00001000 /**< Application ID range start. */
|
||||||
/**@defgroup NRF_FAULT_IDS Fault ID types
|
/**@} */
|
||||||
* @{ */
|
|
||||||
#define NRF_FAULT_ID_SD_ASSERT (NRF_FAULT_ID_SD_RANGE_START + 1) /**< SoftDevice assertion. The info parameter is reserved for future used. */
|
/**@defgroup NRF_FAULT_IDS Fault ID types
|
||||||
#define NRF_FAULT_ID_APP_MEMACC (NRF_FAULT_ID_APP_RANGE_START + 1) /**< Application invalid memory access. The info parameter will contain 0x00000000,
|
* @{ */
|
||||||
in case of SoftDevice RAM access violation. In case of SoftDevice peripheral
|
#define NRF_FAULT_ID_SD_ASSERT (NRF_FAULT_ID_SD_RANGE_START + 1) /**< SoftDevice assertion. The info parameter is reserved for future used. */
|
||||||
register violation the info parameter will contain the sub-region number of
|
#define NRF_FAULT_ID_APP_MEMACC (NRF_FAULT_ID_APP_RANGE_START + 1) /**< Application invalid memory access. The info parameter will contain 0x00000000,
|
||||||
PREGION[0], on whose address range the disallowed write access caused the
|
in case of SoftDevice RAM access violation. In case of SoftDevice peripheral
|
||||||
memory access fault. */
|
register violation the info parameter will contain the sub-region number of
|
||||||
/**@} */
|
PREGION[0], on whose address range the disallowed write access caused the
|
||||||
|
memory access fault. */
|
||||||
/** @} */
|
/**@} */
|
||||||
|
|
||||||
/** @addtogroup NRF_SDM_ENUMS Enumerations
|
/** @} */
|
||||||
* @{ */
|
|
||||||
|
/** @addtogroup NRF_SDM_ENUMS Enumerations
|
||||||
/**@brief nRF SoftDevice Manager API SVC numbers. */
|
* @{ */
|
||||||
enum NRF_SD_SVCS
|
|
||||||
{
|
/**@brief nRF SoftDevice Manager API SVC numbers. */
|
||||||
SD_SOFTDEVICE_ENABLE = SDM_SVC_BASE, /**< ::sd_softdevice_enable */
|
enum NRF_SD_SVCS
|
||||||
SD_SOFTDEVICE_DISABLE, /**< ::sd_softdevice_disable */
|
{
|
||||||
SD_SOFTDEVICE_IS_ENABLED, /**< ::sd_softdevice_is_enabled */
|
SD_SOFTDEVICE_ENABLE = SDM_SVC_BASE, /**< ::sd_softdevice_enable */
|
||||||
SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, /**< ::sd_softdevice_vector_table_base_set */
|
SD_SOFTDEVICE_DISABLE, /**< ::sd_softdevice_disable */
|
||||||
SVC_SDM_LAST /**< Placeholder for last SDM SVC */
|
SD_SOFTDEVICE_IS_ENABLED, /**< ::sd_softdevice_is_enabled */
|
||||||
};
|
SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, /**< ::sd_softdevice_vector_table_base_set */
|
||||||
|
SVC_SDM_LAST /**< Placeholder for last SDM SVC */
|
||||||
/** @} */
|
};
|
||||||
|
|
||||||
/** @addtogroup NRF_SDM_DEFINES Defines
|
/** @} */
|
||||||
* @{ */
|
|
||||||
|
/** @addtogroup NRF_SDM_DEFINES Defines
|
||||||
/**@defgroup NRF_CLOCK_LF_ACCURACY Clock accuracy
|
* @{ */
|
||||||
* @{ */
|
|
||||||
|
/**@defgroup NRF_CLOCK_LF_ACCURACY Clock accuracy
|
||||||
#define NRF_CLOCK_LF_ACCURACY_250_PPM (0) /**< Default: 250 ppm */
|
* @{ */
|
||||||
#define NRF_CLOCK_LF_ACCURACY_500_PPM (1) /**< 500 ppm */
|
|
||||||
#define NRF_CLOCK_LF_ACCURACY_150_PPM (2) /**< 150 ppm */
|
#define NRF_CLOCK_LF_ACCURACY_250_PPM (0) /**< Default: 250 ppm */
|
||||||
#define NRF_CLOCK_LF_ACCURACY_100_PPM (3) /**< 100 ppm */
|
#define NRF_CLOCK_LF_ACCURACY_500_PPM (1) /**< 500 ppm */
|
||||||
#define NRF_CLOCK_LF_ACCURACY_75_PPM (4) /**< 75 ppm */
|
#define NRF_CLOCK_LF_ACCURACY_150_PPM (2) /**< 150 ppm */
|
||||||
#define NRF_CLOCK_LF_ACCURACY_50_PPM (5) /**< 50 ppm */
|
#define NRF_CLOCK_LF_ACCURACY_100_PPM (3) /**< 100 ppm */
|
||||||
#define NRF_CLOCK_LF_ACCURACY_30_PPM (6) /**< 30 ppm */
|
#define NRF_CLOCK_LF_ACCURACY_75_PPM (4) /**< 75 ppm */
|
||||||
#define NRF_CLOCK_LF_ACCURACY_20_PPM (7) /**< 20 ppm */
|
#define NRF_CLOCK_LF_ACCURACY_50_PPM (5) /**< 50 ppm */
|
||||||
#define NRF_CLOCK_LF_ACCURACY_10_PPM (8) /**< 10 ppm */
|
#define NRF_CLOCK_LF_ACCURACY_30_PPM (6) /**< 30 ppm */
|
||||||
#define NRF_CLOCK_LF_ACCURACY_5_PPM (9) /**< 5 ppm */
|
#define NRF_CLOCK_LF_ACCURACY_20_PPM (7) /**< 20 ppm */
|
||||||
#define NRF_CLOCK_LF_ACCURACY_2_PPM (10) /**< 2 ppm */
|
#define NRF_CLOCK_LF_ACCURACY_10_PPM (8) /**< 10 ppm */
|
||||||
#define NRF_CLOCK_LF_ACCURACY_1_PPM (11) /**< 1 ppm */
|
#define NRF_CLOCK_LF_ACCURACY_5_PPM (9) /**< 5 ppm */
|
||||||
|
#define NRF_CLOCK_LF_ACCURACY_2_PPM (10) /**< 2 ppm */
|
||||||
/** @} */
|
#define NRF_CLOCK_LF_ACCURACY_1_PPM (11) /**< 1 ppm */
|
||||||
|
|
||||||
/**@defgroup NRF_CLOCK_LF_SRC Possible LFCLK oscillator sources
|
/** @} */
|
||||||
* @{ */
|
|
||||||
|
/**@defgroup NRF_CLOCK_LF_SRC Possible LFCLK oscillator sources
|
||||||
#define NRF_CLOCK_LF_SRC_RC (0) /**< LFCLK RC oscillator. */
|
* @{ */
|
||||||
#define NRF_CLOCK_LF_SRC_XTAL (1) /**< LFCLK crystal oscillator. */
|
|
||||||
#define NRF_CLOCK_LF_SRC_SYNTH (2) /**< LFCLK Synthesized from HFCLK. */
|
#define NRF_CLOCK_LF_SRC_RC (0) /**< LFCLK RC oscillator. */
|
||||||
|
#define NRF_CLOCK_LF_SRC_XTAL (1) /**< LFCLK crystal oscillator. */
|
||||||
/** @} */
|
#define NRF_CLOCK_LF_SRC_SYNTH (2) /**< LFCLK Synthesized from HFCLK. */
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
/** @addtogroup NRF_SDM_TYPES Types
|
/** @} */
|
||||||
* @{ */
|
|
||||||
|
/** @addtogroup NRF_SDM_TYPES Types
|
||||||
/**@brief Type representing LFCLK oscillator source. */
|
* @{ */
|
||||||
typedef struct
|
|
||||||
{
|
/**@brief Type representing LFCLK oscillator source. */
|
||||||
uint8_t source; /**< LF oscillator clock source, see @ref NRF_CLOCK_LF_SRC. */
|
typedef struct
|
||||||
uint8_t rc_ctiv; /**< Only for ::NRF_CLOCK_LF_SRC_RC: Calibration timer interval in 1/4 second
|
{
|
||||||
units (nRF52: 1-32).
|
uint8_t source; /**< LF oscillator clock source, see @ref NRF_CLOCK_LF_SRC. */
|
||||||
@note To avoid excessive clock drift, 0.5 degrees Celsius is the
|
uint8_t rc_ctiv; /**< Only for ::NRF_CLOCK_LF_SRC_RC: Calibration timer interval in 1/4 second
|
||||||
maximum temperature change allowed in one calibration timer
|
units (nRF52: 1-32).
|
||||||
interval. The interval should be selected to ensure this.
|
@note To avoid excessive clock drift, 0.5 degrees Celsius is the
|
||||||
|
maximum temperature change allowed in one calibration timer
|
||||||
@note Must be 0 if source is not ::NRF_CLOCK_LF_SRC_RC. */
|
interval. The interval should be selected to ensure this.
|
||||||
uint8_t rc_temp_ctiv; /**< Only for ::NRF_CLOCK_LF_SRC_RC: How often (in number of calibration
|
|
||||||
intervals) the RC oscillator shall be calibrated if the temperature
|
@note Must be 0 if source is not ::NRF_CLOCK_LF_SRC_RC. */
|
||||||
hasn't changed.
|
uint8_t rc_temp_ctiv; /**< Only for ::NRF_CLOCK_LF_SRC_RC: How often (in number of calibration
|
||||||
0: Always calibrate even if the temperature hasn't changed.
|
intervals) the RC oscillator shall be calibrated if the temperature
|
||||||
1: Only calibrate if the temperature has changed (legacy - nRF51 only).
|
hasn't changed.
|
||||||
2-33: Check the temperature and only calibrate if it has changed,
|
0: Always calibrate even if the temperature hasn't changed.
|
||||||
however calibration will take place every rc_temp_ctiv
|
1: Only calibrate if the temperature has changed (legacy - nRF51 only).
|
||||||
intervals in any case.
|
2-33: Check the temperature and only calibrate if it has changed,
|
||||||
|
however calibration will take place every rc_temp_ctiv
|
||||||
@note Must be 0 if source is not ::NRF_CLOCK_LF_SRC_RC.
|
intervals in any case.
|
||||||
|
|
||||||
@note For nRF52, the application must ensure calibration at least once
|
@note Must be 0 if source is not ::NRF_CLOCK_LF_SRC_RC.
|
||||||
every 8 seconds to ensure +/-500 ppm clock stability. The
|
|
||||||
recommended configuration for ::NRF_CLOCK_LF_SRC_RC on nRF52 is
|
@note For nRF52, the application must ensure calibration at least once
|
||||||
rc_ctiv=16 and rc_temp_ctiv=2. This will ensure calibration at
|
every 8 seconds to ensure +/-500 ppm clock stability. The
|
||||||
least once every 8 seconds and for temperature changes of 0.5
|
recommended configuration for ::NRF_CLOCK_LF_SRC_RC on nRF52 is
|
||||||
degrees Celsius every 4 seconds. See the Product Specification
|
rc_ctiv=16 and rc_temp_ctiv=2. This will ensure calibration at
|
||||||
for the nRF52 device being used for more information.*/
|
least once every 8 seconds and for temperature changes of 0.5
|
||||||
uint8_t accuracy; /**< External clock accuracy used in the LL to compute timing
|
degrees Celsius every 4 seconds. See the Product Specification
|
||||||
windows, see @ref NRF_CLOCK_LF_ACCURACY.*/
|
for the nRF52 device being used for more information.*/
|
||||||
} nrf_clock_lf_cfg_t;
|
uint8_t accuracy; /**< External clock accuracy used in the LL to compute timing
|
||||||
|
windows, see @ref NRF_CLOCK_LF_ACCURACY.*/
|
||||||
/**@brief Fault Handler type.
|
} nrf_clock_lf_cfg_t;
|
||||||
*
|
|
||||||
* When certain unrecoverable errors occur within the application or SoftDevice the fault handler will be called back.
|
/**@brief Fault Handler type.
|
||||||
* The protocol stack will be in an undefined state when this happens and the only way to recover will be to
|
*
|
||||||
* perform a reset, using e.g. CMSIS NVIC_SystemReset().
|
* When certain unrecoverable errors occur within the application or SoftDevice the fault handler will be called back.
|
||||||
* If the application returns from the fault handler the SoftDevice will call NVIC_SystemReset().
|
* The protocol stack will be in an undefined state when this happens and the only way to recover will be to
|
||||||
*
|
* perform a reset, using e.g. CMSIS NVIC_SystemReset().
|
||||||
* @note This callback is executed in HardFault context, thus SVC functions cannot be called from the fault callback.
|
* If the application returns from the fault handler the SoftDevice will call NVIC_SystemReset().
|
||||||
*
|
*
|
||||||
* @param[in] id Fault identifier. See @ref NRF_FAULT_IDS.
|
* @note This callback is executed in HardFault context, thus SVC functions cannot be called from the fault callback.
|
||||||
* @param[in] pc The program counter of the instruction that triggered the fault.
|
*
|
||||||
* @param[in] info Optional additional information regarding the fault. Refer to each Fault identifier for details.
|
* @param[in] id Fault identifier. See @ref NRF_FAULT_IDS.
|
||||||
*
|
* @param[in] pc The program counter of the instruction that triggered the fault.
|
||||||
* @note When id is set to @ref NRF_FAULT_ID_APP_MEMACC, pc will contain the address of the instruction being executed at the time when
|
* @param[in] info Optional additional information regarding the fault. Refer to each Fault identifier for details.
|
||||||
* the fault is detected by the CPU. The CPU program counter may have advanced up to 2 instructions (no branching) after the one that triggered the fault.
|
*
|
||||||
*/
|
* @note When id is set to @ref NRF_FAULT_ID_APP_MEMACC, pc will contain the address of the instruction being executed at the time when
|
||||||
typedef void (*nrf_fault_handler_t)(uint32_t id, uint32_t pc, uint32_t info);
|
* the fault is detected by the CPU. The CPU program counter may have advanced up to 2 instructions (no branching) after the one that triggered the fault.
|
||||||
|
*/
|
||||||
/** @} */
|
typedef void (*nrf_fault_handler_t)(uint32_t id, uint32_t pc, uint32_t info);
|
||||||
|
|
||||||
/** @addtogroup NRF_SDM_FUNCTIONS Functions
|
/** @} */
|
||||||
* @{ */
|
|
||||||
|
/** @addtogroup NRF_SDM_FUNCTIONS Functions
|
||||||
/**@brief Enables the SoftDevice and by extension the protocol stack.
|
* @{ */
|
||||||
*
|
|
||||||
* @note Some care must be taken if a low frequency clock source is already running when calling this function:
|
/**@brief Enables the SoftDevice and by extension the protocol stack.
|
||||||
* If the LF clock has a different source then the one currently running, it will be stopped. Then, the new
|
*
|
||||||
* clock source will be started.
|
* @note Some care must be taken if a low frequency clock source is already running when calling this function:
|
||||||
*
|
* If the LF clock has a different source then the one currently running, it will be stopped. Then, the new
|
||||||
* @note This function has no effect when returning with an error.
|
* clock source will be started.
|
||||||
*
|
*
|
||||||
* @post If return code is ::NRF_SUCCESS
|
* @note This function has no effect when returning with an error.
|
||||||
* - SoC library and protocol stack APIs are made available.
|
*
|
||||||
* - A portion of RAM will be unavailable (see relevant SDS documentation).
|
* @post If return code is ::NRF_SUCCESS
|
||||||
* - Some peripherals will be unavailable or available only through the SoC API (see relevant SDS documentation).
|
* - SoC library and protocol stack APIs are made available.
|
||||||
* - Interrupts will not arrive from protected peripherals or interrupts.
|
* - A portion of RAM will be unavailable (see relevant SDS documentation).
|
||||||
* - nrf_nvic_ functions must be used instead of CMSIS NVIC_ functions for reliable usage of the SoftDevice.
|
* - Some peripherals will be unavailable or available only through the SoC API (see relevant SDS documentation).
|
||||||
* - Interrupt latency may be affected by the SoftDevice (see relevant SDS documentation).
|
* - Interrupts will not arrive from protected peripherals or interrupts.
|
||||||
* - Chosen low frequency clock source will be running.
|
* - nrf_nvic_ functions must be used instead of CMSIS NVIC_ functions for reliable usage of the SoftDevice.
|
||||||
*
|
* - Interrupt latency may be affected by the SoftDevice (see relevant SDS documentation).
|
||||||
* @param p_clock_lf_cfg Low frequency clock source and accuracy.
|
* - Chosen low frequency clock source will be running.
|
||||||
If NULL the clock will be configured as an RC source with rc_ctiv = 16 and .rc_temp_ctiv = 2
|
*
|
||||||
In the case of XTAL source, the PPM accuracy of the chosen clock source must be greater than or equal to the actual characteristics of your XTAL clock.
|
* @param p_clock_lf_cfg Low frequency clock source and accuracy.
|
||||||
* @param fault_handler Callback to be invoked in case of fault, cannot be NULL.
|
If NULL the clock will be configured as an RC source with rc_ctiv = 16 and .rc_temp_ctiv = 2
|
||||||
*
|
In the case of XTAL source, the PPM accuracy of the chosen clock source must be greater than or equal to the actual characteristics of your XTAL clock.
|
||||||
* @retval ::NRF_SUCCESS
|
* @param fault_handler Callback to be invoked in case of fault, cannot be NULL.
|
||||||
* @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied.
|
*
|
||||||
* @retval ::NRF_ERROR_INVALID_STATE SoftDevice is already enabled, and the clock source and fault handler cannot be updated.
|
* @retval ::NRF_SUCCESS
|
||||||
* @retval ::NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION SoftDevice interrupt is already enabled, or an enabled interrupt has an illegal priority level.
|
* @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied.
|
||||||
* @retval ::NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN Unknown low frequency clock source selected.
|
* @retval ::NRF_ERROR_INVALID_STATE SoftDevice is already enabled, and the clock source and fault handler cannot be updated.
|
||||||
*/
|
* @retval ::NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION SoftDevice interrupt is already enabled, or an enabled interrupt has an illegal priority level.
|
||||||
SVCALL(SD_SOFTDEVICE_ENABLE, uint32_t, sd_softdevice_enable(nrf_clock_lf_cfg_t const * p_clock_lf_cfg, nrf_fault_handler_t fault_handler));
|
* @retval ::NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN Unknown low frequency clock source selected.
|
||||||
|
* @retval ::NRF_ERROR_INVALID_PARAM Invalid clock source configuration supplied in p_clock_lf_cfg.
|
||||||
|
*/
|
||||||
/**@brief Disables the SoftDevice and by extension the protocol stack.
|
SVCALL(SD_SOFTDEVICE_ENABLE, uint32_t, sd_softdevice_enable(nrf_clock_lf_cfg_t const * p_clock_lf_cfg, nrf_fault_handler_t fault_handler));
|
||||||
*
|
|
||||||
* Idempotent function to disable the SoftDevice.
|
|
||||||
*
|
/**@brief Disables the SoftDevice and by extension the protocol stack.
|
||||||
* @post SoC library and protocol stack APIs are made unavailable.
|
*
|
||||||
* @post All interrupts that was protected by the SoftDevice will be disabled and initialized to priority 0 (highest).
|
* Idempotent function to disable the SoftDevice.
|
||||||
* @post All peripherals used by the SoftDevice will be reset to default values.
|
*
|
||||||
* @post All of RAM become available.
|
* @post SoC library and protocol stack APIs are made unavailable.
|
||||||
* @post All interrupts are forwarded to the application.
|
* @post All interrupts that was protected by the SoftDevice will be disabled and initialized to priority 0 (highest).
|
||||||
* @post LFCLK source chosen in ::sd_softdevice_enable will be left running.
|
* @post All peripherals used by the SoftDevice will be reset to default values.
|
||||||
*
|
* @post All of RAM become available.
|
||||||
* @retval ::NRF_SUCCESS
|
* @post All interrupts are forwarded to the application.
|
||||||
*/
|
* @post LFCLK source chosen in ::sd_softdevice_enable will be left running.
|
||||||
SVCALL(SD_SOFTDEVICE_DISABLE, uint32_t, sd_softdevice_disable(void));
|
*
|
||||||
|
* @retval ::NRF_SUCCESS
|
||||||
/**@brief Check if the SoftDevice is enabled.
|
*/
|
||||||
*
|
SVCALL(SD_SOFTDEVICE_DISABLE, uint32_t, sd_softdevice_disable(void));
|
||||||
* @param[out] p_softdevice_enabled If the SoftDevice is enabled: 1 else 0.
|
|
||||||
*
|
/**@brief Check if the SoftDevice is enabled.
|
||||||
* @retval ::NRF_SUCCESS
|
*
|
||||||
*/
|
* @param[out] p_softdevice_enabled If the SoftDevice is enabled: 1 else 0.
|
||||||
SVCALL(SD_SOFTDEVICE_IS_ENABLED, uint32_t, sd_softdevice_is_enabled(uint8_t * p_softdevice_enabled));
|
*
|
||||||
|
* @retval ::NRF_SUCCESS
|
||||||
/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the SoftDevice
|
*/
|
||||||
*
|
SVCALL(SD_SOFTDEVICE_IS_ENABLED, uint32_t, sd_softdevice_is_enabled(uint8_t * p_softdevice_enabled));
|
||||||
* This function is only intended to be called when a bootloader is enabled.
|
|
||||||
*
|
/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the SoftDevice
|
||||||
* @param[in] address The base address of the interrupt vector table for forwarded interrupts.
|
*
|
||||||
|
* This function is only intended to be called when a bootloader is enabled.
|
||||||
* @retval ::NRF_SUCCESS
|
*
|
||||||
*/
|
* @param[in] address The base address of the interrupt vector table for forwarded interrupts.
|
||||||
SVCALL(SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, uint32_t, sd_softdevice_vector_table_base_set(uint32_t address));
|
|
||||||
|
* @retval ::NRF_SUCCESS
|
||||||
/** @} */
|
*/
|
||||||
|
SVCALL(SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, uint32_t, sd_softdevice_vector_table_base_set(uint32_t address));
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
/** @} */
|
||||||
#endif
|
|
||||||
#endif // NRF_SDM_H__
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
/**
|
#endif
|
||||||
@}
|
#endif // NRF_SDM_H__
|
||||||
*/
|
|
||||||
|
/**
|
||||||
|
@}
|
||||||
|
*/
|
File diff suppressed because it is too large
Load Diff
90
softdevice/6.0.0/s140/headers/nrf_svc.h
Normal file
90
softdevice/6.0.0/s140/headers/nrf_svc.h
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2012 - 2017, Nordic Semiconductor ASA
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||||
|
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||||
|
* such product, must reproduce the above copyright notice, this list of
|
||||||
|
* conditions and the following disclaimer in the documentation and/or other
|
||||||
|
* materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* 4. This software, with or without modification, must only be used with a
|
||||||
|
* Nordic Semiconductor ASA integrated circuit.
|
||||||
|
*
|
||||||
|
* 5. Any software provided in binary form under this license must not be reverse
|
||||||
|
* engineered, decompiled, modified and/or disassembled.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||||
|
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef NRF_SVC__
|
||||||
|
#define NRF_SVC__
|
||||||
|
|
||||||
|
#include "stdint.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef SVCALL_AS_NORMAL_FUNCTION
|
||||||
|
#define SVCALL(number, return_type, signature) return_type signature
|
||||||
|
#else
|
||||||
|
|
||||||
|
#ifndef SVCALL
|
||||||
|
#if defined (__CC_ARM)
|
||||||
|
#define SVCALL(number, return_type, signature) return_type __svc(number) signature
|
||||||
|
#elif defined (__GNUC__)
|
||||||
|
#ifdef __cplusplus
|
||||||
|
#define GCC_CAST_CPP (uint16_t)
|
||||||
|
#else
|
||||||
|
#define GCC_CAST_CPP
|
||||||
|
#endif
|
||||||
|
#define SVCALL(number, return_type, signature) \
|
||||||
|
_Pragma("GCC diagnostic push") \
|
||||||
|
_Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \
|
||||||
|
__attribute__((naked)) \
|
||||||
|
__attribute__((unused)) \
|
||||||
|
static return_type signature \
|
||||||
|
{ \
|
||||||
|
__asm( \
|
||||||
|
"svc %0\n" \
|
||||||
|
"bx r14" : : "I" (GCC_CAST_CPP number) : "r0" \
|
||||||
|
); \
|
||||||
|
} \
|
||||||
|
_Pragma("GCC diagnostic pop")
|
||||||
|
|
||||||
|
#elif defined (__ICCARM__)
|
||||||
|
#define PRAGMA(x) _Pragma(#x)
|
||||||
|
#define SVCALL(number, return_type, signature) \
|
||||||
|
PRAGMA(swi_number = (number)) \
|
||||||
|
__swi return_type signature;
|
||||||
|
#else
|
||||||
|
#define SVCALL(number, return_type, signature) return_type signature
|
||||||
|
#endif
|
||||||
|
#endif // SVCALL
|
||||||
|
|
||||||
|
#endif // SVCALL_AS_NORMAL_FUNCTION
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif // NRF_SVC__
|
@ -0,0 +1,35 @@
|
|||||||
|
Copyright (c) 2007 - 2018, Nordic Semiconductor ASA
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form, except as embedded into a Nordic
|
||||||
|
Semiconductor ASA integrated circuit in a product or a software update for
|
||||||
|
such product, must reproduce the above copyright notice, this list of
|
||||||
|
conditions and the following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from this
|
||||||
|
software without specific prior written permission.
|
||||||
|
|
||||||
|
4. This software, with or without modification, must only be used with a
|
||||||
|
Nordic Semiconductor ASA integrated circuit.
|
||||||
|
|
||||||
|
5. Any software provided in binary form under this license must not be reverse
|
||||||
|
engineered, decompiled, modified and/or disassembled.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||||
|
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
|
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
9443
softdevice/6.0.0/s140/hex/s140_nrf52_6.0.0_softdevice.hex
Normal file
9443
softdevice/6.0.0/s140/hex/s140_nrf52_6.0.0_softdevice.hex
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user