http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/a1481cb2/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/pwm/app_pwm.c
----------------------------------------------------------------------
diff --git 
a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/pwm/app_pwm.c
 
b/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/pwm/app_pwm.c
deleted file mode 100644
index 091fb70..0000000
--- 
a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/pwm/app_pwm.c
+++ /dev/null
@@ -1,876 +0,0 @@
-/* Copyright (c) 2015 Nordic Semiconductor. All Rights Reserved.
- *
- * The information contained herein is property of Nordic Semiconductor ASA.
- * Terms and conditions of usage are described in detail in NORDIC
- * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT.
- *
- * Licensees are granted free, non-transferable use of the information. NO
- * WARRANTY of ANY KIND is provided. This heading must NOT be removed from
- * the file.
- *
- */
-
-#include "app_pwm.h"
-#include "nrf_drv_timer.h"
-#include "nrf_drv_ppi.h"
-#include "nrf_drv_common.h"
-#include "nrf_drv_gpiote.h"
-#include "nrf_gpiote.h"
-#include "nrf_gpio.h"
-#include "app_util.h"
-#include "app_util_platform.h"
-#include "nrf_assert.h"
-
-#define APP_PWM_CHANNEL_INITIALIZED                1
-#define APP_PWM_CHANNEL_UNINITIALIZED              0
-
-#define APP_PWM_CHANNEL_ENABLED                    1
-#define APP_PWM_CHANNEL_DISABLED                   0
-
-#define TIMER_PRESCALER_MAX                        9
-#define TIMER_MAX_PULSEWIDTH_US_ON_16M             4095
-
-#define APP_PWM_REQUIRED_PPI_CHANNELS_PER_INSTANCE 2
-#define APP_PWM_REQUIRED_PPI_CHANNELS_PER_CHANNEL  2
-
-#define UNALLOCATED                                0xFFFFFFFFUL
-#define BUSY_STATE_CHANGING                        0xFE
-#define BUSY_STATE_IDLE                            0xFF
-
-#define PWM_MAIN_CC_CHANNEL                        2
-#define PWM_SECONDARY_CC_CHANNEL                   3
-
-#ifdef NRF52
-    static bool m_use_ppi_delay_workaround;
-#endif
-
-
-/**
- * @brief PWM busy status
- *
- * Stores the number of a channel being currently updated.
- *
- */
-static volatile uint8_t  m_pwm_busy[TIMER_COUNT];
-
-
-/**
- * @brief New duty cycle value
- *
- * When the channel duty cycle reaches this value, the update process is 
complete.
- */
-static volatile uint32_t m_pwm_target_value[TIMER_COUNT];
-
-
-/**
- * @brief PWM ready counter
- *
- * The value in this counter is decremented in every PWM cycle after 
initiating the update.
- * If an event handler function was specified by the user, it is being called
- * after two cycle events (at least one full PWM cycle).
- */
-volatile uint8_t 
m_pwm_ready_counter[TIMER_COUNT][APP_PWM_CHANNELS_PER_INSTANCE];
-
-/**
- * @brief Pointers to instances
- *
- * This array connects any active timer instance number with the pointer to 
the PWM instance.
- * It is used by the interrupt runtime.
- */
-static const app_pwm_t * m_instances[TIMER_COUNT];
-
-// Macros for getting the polarity of given instance/channel.
-#define POLARITY_ACTIVE(INST,CH)   (( 
((INST)->p_cb)->channels_cb[(CH)].polarity == \
-                 APP_PWM_POLARITY_ACTIVE_LOW)?(0):(1))
-#define POLARITY_INACTIVE(INST,CH) (( 
((INST)->p_cb)->channels_cb[(CH)].polarity == \
-                 APP_PWM_POLARITY_ACTIVE_LOW)?(1):(0))
-
-//lint -save -e534
-
-/**
- * @brief Workaround for PAN-73.
- *
- * @param[in] timer     Timer.
- * @param[in] enable    Enable or disable.
- */
-static void pan73_workaround(NRF_TIMER_Type * p_timer, bool enable)
-{
-#ifdef NRF51
-    if (p_timer == NRF_TIMER0)
-    {
-        *(uint32_t *)0x40008C0C = (enable ? 1 : 0);
-    }
-    else if (p_timer == NRF_TIMER1)
-    {
-        *(uint32_t *)0x40009C0C = (enable ? 1 : 0);
-    }
-    else if (p_timer == NRF_TIMER2)
-    {
-        *(uint32_t *)0x4000AC0C = (enable ? 1 : 0);
-    }
-#endif
-    return;
-}
-
-bool app_pwm_busy_check(app_pwm_t const * const p_instance)
-{
-    uint8_t busy_state = (m_pwm_busy[p_instance->p_timer->instance_id]);
-    bool busy = true;
-    if (busy_state != BUSY_STATE_IDLE)
-    {
-        if (busy_state != BUSY_STATE_CHANGING)
-        {
-            if (nrf_drv_timer_capture_get(p_instance->p_timer, 
(nrf_timer_cc_channel_t) busy_state) 
-                == m_pwm_target_value[p_instance->p_timer->instance_id])
-            {
-                m_pwm_busy[p_instance->p_timer->instance_id] = BUSY_STATE_IDLE;
-                busy = false;
-            }
-        }
-    }
-    else
-    {
-        busy = false;
-    }
-    return busy;
-}
-
-
-/**
- * @brief Function for enabling the IRQ for a given PWM instance.
- *
- * @param[in] p_instance  PWM instance.
- */
-__STATIC_INLINE void pwm_irq_enable(app_pwm_t const * const p_instance)
-{
-    nrf_drv_timer_compare_int_enable(p_instance->p_timer, PWM_MAIN_CC_CHANNEL);
-}
-
-
-/**
- * @brief Function for disabling the IRQ for a given PWM instance.
- *
- * @param[in] p_instance  PWM instance.
- */
-__STATIC_INLINE void pwm_irq_disable(app_pwm_t const * const p_instance)
-{
-    nrf_drv_timer_compare_int_disable(p_instance->p_timer, 
PWM_MAIN_CC_CHANNEL);
-}
-
-
-/**
- * @brief Function for disabling PWM channel PPI.
- *
- * @param[in] p_instance  PWM instance.
- */
-__STATIC_INLINE void pwm_channel_ppi_disable(app_pwm_t const * const 
p_instance, uint8_t channel)
-{
-    app_pwm_cb_t * p_cb = p_instance->p_cb;
-
-    nrf_drv_ppi_channel_disable(p_cb->channels_cb[channel].ppi_channels[0]);
-    nrf_drv_ppi_channel_disable(p_cb->channels_cb[channel].ppi_channels[1]);
-}
-
-
-/**
- * @brief Function for disabling PWM PPI.
- *
- * @param[in] p_instance  PWM instance.
- */
-__STATIC_INLINE void pwm_ppi_disable(app_pwm_t const * const p_instance)
-{
-    app_pwm_cb_t * p_cb = p_instance->p_cb;
-
-    nrf_drv_ppi_channel_disable(p_cb->ppi_channels[0]);
-    nrf_drv_ppi_channel_disable(p_cb->ppi_channels[1]);
-}
-
-
-/**
- * @brief This function is called on interrupt after duty set.
- *
- * @param[in] timer                 Timer used by PWM.
- * @param[in] timer_instance_id     Timer index.
- */
-void pwm_ready_tick(nrf_timer_event_t event_type, void * p_context)
-{
-    uint32_t timer_instance_id = (uint32_t)p_context;
-    uint8_t disable = 1;
-    
-    for (uint8_t channel = 0; channel < APP_PWM_CHANNELS_PER_INSTANCE; 
++channel)
-    {
-        if (m_pwm_ready_counter[timer_instance_id][channel])
-        {
-            --m_pwm_ready_counter[timer_instance_id][channel];
-            if (!m_pwm_ready_counter[timer_instance_id][channel])
-            {
-                app_pwm_cb_t * p_cb = m_instances[timer_instance_id]->p_cb;
-                p_cb->p_ready_callback(timer_instance_id);
-            }
-            else
-            {
-                disable = 0;
-            }
-        }
-    }
-    
-    if (disable)
-    {
-        pwm_irq_disable(m_instances[timer_instance_id]);
-    }
-}
-
-
-/**
- * @brief Function for resource de-allocation.
- *
- * @param[in] p_instance       PWM instance.
- */
-//lint -e{650}
-static void pwm_dealloc(app_pwm_t const * const p_instance)
-{
-    app_pwm_cb_t * p_cb = p_instance->p_cb;
-
-    for (uint8_t i = 0; i < APP_PWM_REQUIRED_PPI_CHANNELS_PER_INSTANCE; ++i)
-    {
-        if (p_cb->ppi_channels[i] != (nrf_ppi_channel_t)(uint8_t)(UNALLOCATED))
-        {
-            nrf_drv_ppi_channel_free(p_cb->ppi_channels[i]);
-        }
-    }
-    if (p_cb->ppi_group != (nrf_ppi_channel_group_t)UNALLOCATED)
-    {
-        nrf_drv_ppi_group_free(p_cb->ppi_group);
-    }
-
-    for (uint8_t ch = 0; ch < APP_PWM_CHANNELS_PER_INSTANCE; ++ch)
-    {
-        for (uint8_t i = 0; i < APP_PWM_REQUIRED_PPI_CHANNELS_PER_CHANNEL; ++i)
-        {
-            if (p_cb->channels_cb[ch].ppi_channels[i] != 
(nrf_ppi_channel_t)UNALLOCATED)
-            {
-                
nrf_drv_ppi_channel_free(p_cb->channels_cb[ch].ppi_channels[i]);
-                p_cb->channels_cb[ch].ppi_channels[i] = 
(nrf_ppi_channel_t)UNALLOCATED;
-            }
-        }
-        if (p_cb->channels_cb[ch].gpio_pin != UNALLOCATED)
-        {
-            nrf_drv_gpiote_out_uninit(p_cb->channels_cb[ch].gpio_pin);
-            p_cb->channels_cb[ch].gpio_pin = UNALLOCATED;
-        }
-        p_cb->channels_cb[ch].initialized = APP_PWM_CHANNEL_UNINITIALIZED;
-    }
-    nrf_drv_timer_uninit(p_instance->p_timer);
-    return;
-}
-
-
-/**
- * @brief PWM state transition from (0%, 100%) to 0% or 100%.
- *
- * @param[in] p_instance       PWM instance.
- * @param[in] channel          PWM channel number.
- * @param[in] ticks            Number of clock ticks.
- */
-static void pwm_transition_n_to_0or100(app_pwm_t const * const p_instance,
-                                       uint8_t channel, uint16_t ticks)
-{
-    app_pwm_cb_t            * p_cb     = p_instance->p_cb;
-    app_pwm_channel_cb_t    * p_ch_cb  = &p_cb->channels_cb[channel];
-    nrf_ppi_channel_group_t   p_ppigrp = p_cb->ppi_group;
-
-    pwm_ppi_disable(p_instance);
-    nrf_drv_ppi_group_clear(p_ppigrp);
-    nrf_drv_ppi_channels_include_in_group(
-            nrf_drv_ppi_channel_to_mask(p_ch_cb->ppi_channels[0]) | 
-            nrf_drv_ppi_channel_to_mask(p_ch_cb->ppi_channels[1]),
-            p_ppigrp);
-
-    if (!ticks)
-    {
-        nrf_drv_ppi_channel_assign(p_cb->ppi_channels[0],
-                    
nrf_drv_timer_compare_event_address_get(p_instance->p_timer, channel),
-                    nrf_drv_ppi_task_addr_group_disable_get(p_ppigrp));
-        nrf_drv_timer_compare(p_instance->p_timer, (nrf_timer_cc_channel_t) 
PWM_SECONDARY_CC_CHANNEL, 0, false);
-        m_pwm_target_value[p_instance->p_timer->instance_id] =
-            nrf_drv_timer_capture_get(p_instance->p_timer, 
(nrf_timer_cc_channel_t) channel);
-        nrf_drv_ppi_channel_assign(p_cb->ppi_channels[1],
-                    
nrf_drv_timer_compare_event_address_get(p_instance->p_timer, channel),
-                    
nrf_drv_timer_capture_task_address_get(p_instance->p_timer, 
PWM_SECONDARY_CC_CHANNEL));
-    }
-    else
-    {
-        ticks = p_cb->period;
-        nrf_drv_ppi_channel_assign(p_cb->ppi_channels[0],
-                    
nrf_drv_timer_compare_event_address_get(p_instance->p_timer, 
PWM_MAIN_CC_CHANNEL),
-                    nrf_drv_ppi_task_addr_group_disable_get(p_ppigrp));
-        // Set secondary CC channel to non-zero value:
-        nrf_drv_timer_compare(p_instance->p_timer, (nrf_timer_cc_channel_t) 
PWM_SECONDARY_CC_CHANNEL, 1, false);
-        m_pwm_target_value[p_instance->p_timer->instance_id] = 0;
-        // The captured value will be equal to 0, because timer clear on main 
PWM CC channel compare is enabled.
-        nrf_drv_ppi_channel_assign(p_cb->ppi_channels[1],
-                    
nrf_drv_timer_compare_event_address_get(p_instance->p_timer, 
PWM_MAIN_CC_CHANNEL),
-                    
nrf_drv_timer_capture_task_address_get(p_instance->p_timer, 
PWM_SECONDARY_CC_CHANNEL));
-    }
-    
-    nrf_drv_ppi_channel_enable(p_cb->ppi_channels[0]);
-    nrf_drv_ppi_channel_enable(p_cb->ppi_channels[1]);
-    
-    p_ch_cb->pulsewidth = ticks;
-    m_pwm_busy[p_instance->p_timer->instance_id] = PWM_SECONDARY_CC_CHANNEL;
-}
-
-
-/**
- * @brief PWM state transition from (0%, 100%) to (0%, 100%).
- *
- * @param[in] p_instance       PWM instance.
- * @param[in] channel          PWM channel number.
- * @param[in] ticks            Number of clock ticks.
- */
-static void pwm_transition_n_to_m(app_pwm_t const * const p_instance,
-                                  uint8_t channel, uint16_t ticks)
-{
-    app_pwm_cb_t            * p_cb     = p_instance->p_cb;
-    app_pwm_channel_cb_t    * p_ch_cb  = &p_cb->channels_cb[channel];
-    nrf_ppi_channel_group_t   p_ppigrp = p_cb->ppi_group;
-
-    pwm_ppi_disable(p_instance);
-    nrf_drv_ppi_group_clear(p_ppigrp);
-    nrf_drv_ppi_channels_include_in_group(
-        nrf_drv_ppi_channel_to_mask(p_cb->ppi_channels[0]) | 
-        nrf_drv_ppi_channel_to_mask(p_cb->ppi_channels[1]),
-        p_ppigrp);
-
-    nrf_drv_ppi_channel_assign(p_cb->ppi_channels[0],
-                nrf_drv_timer_compare_event_address_get(p_instance->p_timer, 
PWM_SECONDARY_CC_CHANNEL),
-                nrf_drv_timer_capture_task_address_get(p_instance->p_timer, 
channel));
-
-#ifdef NRF52
-    if (ticks + ((nrf_timer_frequency_get(p_instance->p_timer->p_reg) == 
-        (m_use_ppi_delay_workaround ? NRF_TIMER_FREQ_8MHz : 
NRF_TIMER_FREQ_16MHz) ) ? 1 : 0)
-        < p_ch_cb->pulsewidth)
-#else
-    if (ticks + ((nrf_timer_frequency_get(p_instance->p_timer->p_reg) == 
NRF_TIMER_FREQ_16MHz) ? 1 : 0)
-        < p_ch_cb->pulsewidth)
-#endif
-    {
-        // For lower value, we need one more transition. Timer task delay is 
included.
-        // If prescaler is disabled, one tick must be added because of 1 
PCLK16M clock cycle delay.
-        nrf_drv_ppi_channel_assign(p_cb->ppi_channels[1],
-                nrf_drv_timer_compare_event_address_get(p_instance->p_timer, 
PWM_SECONDARY_CC_CHANNEL),
-                nrf_drv_gpiote_out_task_addr_get(p_ch_cb->gpio_pin));
-    }
-    else
-    {
-        nrf_drv_ppi_channel_remove_from_group(p_cb->ppi_channels[1], p_ppigrp);
-    }
-    p_ch_cb->pulsewidth = ticks;
-    nrf_drv_timer_compare(p_instance->p_timer, (nrf_timer_cc_channel_t) 
PWM_SECONDARY_CC_CHANNEL, ticks, false);
-    nrf_drv_ppi_group_enable(p_ppigrp);
-    
-    m_pwm_target_value[p_instance->p_timer->instance_id] = ticks;
-    m_pwm_busy[p_instance->p_timer->instance_id] = channel;
-}
-
-
-/**
- * @brief PWM state transition from 0% or 100% to (0%, 100%).
- *
- * @param[in] p_instance       PWM instance.
- * @param[in] channel          PWM channel number.
- * @param[in] ticks            Number of clock ticks.
- */
-static void pwm_transition_0or100_to_n(app_pwm_t const * const p_instance,
-                                       uint8_t channel, uint16_t ticks)
-{
-    app_pwm_cb_t            * p_cb      = p_instance->p_cb;
-    app_pwm_channel_cb_t    * p_ch_cb   = &p_cb->channels_cb[channel];
-    nrf_ppi_channel_group_t   p_ppigrp  = p_cb->ppi_group;
-    nrf_timer_cc_channel_t    pwm_ch_cc = (nrf_timer_cc_channel_t)(channel);
-
-    pwm_ppi_disable(p_instance);
-    pwm_channel_ppi_disable(p_instance, channel);
-
-    nrf_drv_timer_compare(p_instance->p_timer, pwm_ch_cc, ticks, false);
-    nrf_drv_ppi_group_clear(p_ppigrp);
-    nrf_drv_ppi_channels_include_in_group(
-        nrf_drv_ppi_channel_to_mask(p_ch_cb->ppi_channels[0])|
-        nrf_drv_ppi_channel_to_mask(p_ch_cb->ppi_channels[1]),
-        p_ppigrp);
-
-    if (!p_ch_cb->pulsewidth)
-    {
-        // Channel is at 0%.
-        nrf_drv_ppi_channel_assign(p_cb->ppi_channels[0],
-                    
nrf_drv_timer_compare_event_address_get(p_instance->p_timer, channel),
-                    nrf_drv_ppi_task_addr_group_enable_get(p_ppigrp));
-        nrf_drv_timer_compare(p_instance->p_timer, (nrf_timer_cc_channel_t) 
PWM_SECONDARY_CC_CHANNEL, 0, false);
-        m_pwm_target_value[p_instance->p_timer->instance_id] = 
-            nrf_drv_timer_capture_get(p_instance->p_timer, 
(nrf_timer_cc_channel_t) channel);
-        nrf_drv_ppi_channel_assign(p_cb->ppi_channels[1],
-                    
nrf_drv_timer_compare_event_address_get(p_instance->p_timer, channel),
-                    
nrf_drv_timer_capture_task_address_get(p_instance->p_timer, 
PWM_SECONDARY_CC_CHANNEL));
-       
-    }
-    else
-    {
-        // Channel is at 100%.
-        nrf_drv_ppi_channel_assign(p_cb->ppi_channels[0],
-                    
nrf_drv_timer_compare_event_address_get(p_instance->p_timer, 
PWM_MAIN_CC_CHANNEL),
-                    nrf_drv_ppi_task_addr_group_enable_get(p_ppigrp));
-        // Set secondary CC channel to non-zero value:
-        nrf_drv_timer_compare(p_instance->p_timer, (nrf_timer_cc_channel_t) 
PWM_SECONDARY_CC_CHANNEL, 1, false);
-        m_pwm_target_value[p_instance->p_timer->instance_id] = 0;
-        // The captured value will be equal to 0, because timer clear on main 
PWM CC channel compare is enabled.
-        nrf_drv_ppi_channel_assign(p_cb->ppi_channels[1],
-                    
nrf_drv_timer_compare_event_address_get(p_instance->p_timer, 
PWM_MAIN_CC_CHANNEL),
-                    
nrf_drv_timer_capture_task_address_get(p_instance->p_timer, 
PWM_SECONDARY_CC_CHANNEL));
-    }
-    nrf_drv_ppi_channel_enable(p_cb->ppi_channels[0]);
-    nrf_drv_ppi_channel_enable(p_cb->ppi_channels[1]);
-    
-    p_ch_cb->pulsewidth = ticks;
-    m_pwm_busy[p_instance->p_timer->instance_id] = PWM_SECONDARY_CC_CHANNEL;
-}
-
-
-/**
- * @brief PWM state transition from 0% or 100% to 0% or 100%.
- *
- * @param[in] p_instance       PWM instance.
- * @param[in] channel          PWM channel number.
- * @param[in] ticks            Number of clock ticks.
- */
-static void pwm_transition_0or100_to_0or100(app_pwm_t const * const p_instance,
-                                            uint8_t channel, uint16_t ticks)
-{
-    app_pwm_cb_t         * p_cb      = p_instance->p_cb;
-    app_pwm_channel_cb_t * p_ch_cb   = &p_cb->channels_cb[channel];
-    nrf_timer_cc_channel_t pwm_ch_cc = (nrf_timer_cc_channel_t)(channel);
-
-    pwm_ppi_disable(p_instance);
-    pwm_channel_ppi_disable(p_instance, channel);
-    if (!ticks)
-    {
-        // Set to 0%.
-        nrf_drv_gpiote_out_task_force(p_ch_cb->gpio_pin, 
POLARITY_INACTIVE(p_instance, channel));
-    }
-    else if (ticks >= p_cb->period)
-    {
-        // Set to 100%.
-        ticks = p_cb->period;
-        nrf_drv_gpiote_out_task_force(p_ch_cb->gpio_pin, 
POLARITY_ACTIVE(p_instance, channel));
-    }
-    nrf_drv_timer_compare(p_instance->p_timer, pwm_ch_cc, ticks, false);
-    p_ch_cb->pulsewidth = ticks;
-    
-    m_pwm_busy[p_instance->p_timer->instance_id] = BUSY_STATE_IDLE;
-    return;
-}
-
-
-ret_code_t app_pwm_channel_duty_ticks_set(app_pwm_t const * const p_instance,
-                                          uint8_t           channel,
-                                          uint16_t          ticks)
-{
-    app_pwm_cb_t         * p_cb    = p_instance->p_cb;
-    app_pwm_channel_cb_t * p_ch_cb = &p_cb->channels_cb[channel];
-
-    ASSERT(channel < APP_PWM_CHANNELS_PER_INSTANCE);
-    ASSERT(p_ch_cb->initialized == APP_PWM_CHANNEL_INITIALIZED);
-
-    if (p_cb->state != NRF_DRV_STATE_POWERED_ON)
-    {
-        return NRF_ERROR_INVALID_STATE;
-    }
-    if (ticks == p_ch_cb->pulsewidth)
-    {
-        if (p_cb->p_ready_callback)
-        {
-            p_cb->p_ready_callback(p_instance->p_timer->instance_id);
-        }
-        return NRF_SUCCESS;     // No action required.
-    }
-    if (app_pwm_busy_check(p_instance))
-    {
-        return NRF_ERROR_BUSY;  // PPI channels for synchronization are still 
in use.
-    }
-    
-    m_pwm_busy[p_instance->p_timer->instance_id] = BUSY_STATE_CHANGING;
-
-    // Pulse width change sequence:
-    if (!p_ch_cb->pulsewidth || p_ch_cb->pulsewidth >= p_cb->period)
-    {
-        // Channel is disabled (0%) or at 100%.
-        if (!ticks || ticks >= p_cb->period)
-        {
-            // Set to 0 or 100%.
-            pwm_transition_0or100_to_0or100(p_instance, channel, ticks);
-        }
-        else
-        {
-            // Other value.
-            pwm_transition_0or100_to_n(p_instance, channel, ticks);
-        }
-    }
-    else
-    {
-        // Channel is at other value.
-        if (!ticks || ticks >= p_cb->period)
-        {
-            // Disable channel (set to 0%) or set to 100%.
-            pwm_transition_n_to_0or100(p_instance, channel, ticks);
-        }
-        else
-        {
-            // Set to any other value.
-            pwm_transition_n_to_m(p_instance, channel, ticks);
-        }
-    }
-    if (p_instance->p_cb->p_ready_callback)
-    {
-        //PWM ready interrupt handler will be called after one full period.
-        m_pwm_ready_counter[p_instance->p_timer->instance_id][channel] = 2;
-        pwm_irq_enable(p_instance);
-    }
-    return NRF_SUCCESS;
-}
-
-uint16_t app_pwm_channel_duty_ticks_get(app_pwm_t const * const p_instance, 
uint8_t channel)
-{
-    app_pwm_cb_t         * p_cb      = p_instance->p_cb;
-    app_pwm_channel_cb_t * p_ch_cb   = &p_cb->channels_cb[channel];
-
-    return p_ch_cb->pulsewidth;
-}
-
-uint16_t app_pwm_cycle_ticks_get(app_pwm_t const * const p_instance)
-{
-    app_pwm_cb_t * p_cb = p_instance->p_cb;
-
-    return (uint16_t)p_cb->period;
-}
-
-ret_code_t app_pwm_channel_duty_set(app_pwm_t const * const p_instance,
-                                  uint8_t channel, app_pwm_duty_t duty)
-{
-    uint32_t ticks = ((uint32_t)app_pwm_cycle_ticks_get(p_instance) * 
(uint32_t)duty) / 100UL;
-    return app_pwm_channel_duty_ticks_set(p_instance, channel, ticks);
-}
-
-
-app_pwm_duty_t app_pwm_channel_duty_get(app_pwm_t const * const p_instance, 
uint8_t channel)
-{
-    uint32_t value = ((uint32_t)app_pwm_channel_duty_ticks_get(p_instance, 
channel) * 100UL) \
-                     / (uint32_t)app_pwm_cycle_ticks_get(p_instance);
-
-    return (app_pwm_duty_t)value;
-}
-
-
-/**
- * @brief Function for initializing the PWM channel.
- *
- * @param[in] p_instance       PWM instance.
- * @param[in] channel          Channel number.
- * @param[in] pin              GPIO pin number.
- *
- * @retval    NRF_SUCCESS If initialization was successful.
- * @retval    NRF_ERROR_NO_MEM If there were not enough free resources.
- * @retval    NRF_ERROR_INVALID_STATE If the timer is already in use or 
initialization failed.
- */
-static ret_code_t app_pwm_channel_init(app_pwm_t const * const p_instance, 
uint8_t channel,
-                                     uint32_t pin, app_pwm_polarity_t polarity)
-{
-    ASSERT(channel < APP_PWM_CHANNELS_PER_INSTANCE);
-    app_pwm_cb_t * p_cb = p_instance->p_cb;
-    app_pwm_channel_cb_t * p_channel_cb = &p_cb->channels_cb[channel];
-
-    if (p_cb->state != NRF_DRV_STATE_UNINITIALIZED)
-    {
-        return NRF_ERROR_INVALID_STATE;
-    }
-
-    p_channel_cb->pulsewidth = 0;
-    p_channel_cb->polarity   = polarity;
-    ret_code_t err_code;
-
-    /* GPIOTE setup: */
-    nrf_drv_gpiote_out_config_t out_cfg = GPIOTE_CONFIG_OUT_TASK_TOGGLE( 
POLARITY_INACTIVE(p_instance, channel) );
-    err_code = nrf_drv_gpiote_out_init((nrf_drv_gpiote_pin_t)pin,&out_cfg);
-    if (err_code != NRF_SUCCESS)
-    {
-        return NRF_ERROR_NO_MEM;
-    }
-    p_cb->channels_cb[channel].gpio_pin = pin;
-
-    // Set output to inactive state.
-    if (polarity)
-    {
-        nrf_gpio_pin_clear(pin);
-    }
-    else
-    {
-        nrf_gpio_pin_set(pin);
-    }
-
-    /* PPI setup: */
-    for (uint8_t i = 0; i < APP_PWM_REQUIRED_PPI_CHANNELS_PER_CHANNEL; ++i)
-    {
-        if (nrf_drv_ppi_channel_alloc(&p_channel_cb->ppi_channels[i]) != 
NRF_SUCCESS)
-        {
-            return NRF_ERROR_NO_MEM; // Resource de-allocation is done by 
callee.
-        }
-    }
-
-    nrf_drv_ppi_channel_disable(p_channel_cb->ppi_channels[0]);
-    nrf_drv_ppi_channel_disable(p_channel_cb->ppi_channels[1]);
-    nrf_drv_ppi_channel_assign(p_channel_cb->ppi_channels[0],
-                               
nrf_drv_timer_compare_event_address_get(p_instance->p_timer, channel),
-                               
nrf_drv_gpiote_out_task_addr_get(p_channel_cb->gpio_pin));
-    nrf_drv_ppi_channel_assign(p_channel_cb->ppi_channels[1],
-                               
nrf_drv_timer_compare_event_address_get(p_instance->p_timer, 
PWM_MAIN_CC_CHANNEL),
-                               
nrf_drv_gpiote_out_task_addr_get(p_channel_cb->gpio_pin));
-
-    p_channel_cb->initialized = APP_PWM_CHANNEL_INITIALIZED;
-    m_pwm_ready_counter[p_instance->p_timer->instance_id][channel] = 0;
-
-    return NRF_SUCCESS;
-}
-
-
-/**
- * @brief Function for calculating target timer frequency, which will allow to 
set given period length.
- *
- * @param[in] period_us       Desired period in microseconds.
- *
- * @retval    Timer frequency.
- */
-__STATIC_INLINE nrf_timer_frequency_t pwm_calculate_timer_frequency(uint32_t 
period_us)
-{
-    uint32_t f   = (uint32_t) NRF_TIMER_FREQ_16MHz;
-    uint32_t min = (uint32_t) NRF_TIMER_FREQ_31250Hz;
-
-    while ((period_us > TIMER_MAX_PULSEWIDTH_US_ON_16M) && (f < min))
-    {
-        period_us >>= 1;
-        ++f;
-    }
-
-#ifdef NRF52
-    if ((m_use_ppi_delay_workaround) && (f == (uint32_t) NRF_TIMER_FREQ_16MHz))
-    {
-        f = (uint32_t) NRF_TIMER_FREQ_8MHz;
-    }
-#endif
-
-    return (nrf_timer_frequency_t) f;
-}
-
-
-ret_code_t app_pwm_init(app_pwm_t const * const p_instance, app_pwm_config_t 
const * const p_config,
-                        app_pwm_callback_t p_ready_callback)
-{
-    ASSERT(p_instance);
-
-    if (!p_config)
-    {
-        return NRF_ERROR_INVALID_DATA;
-    }
-
-    app_pwm_cb_t * p_cb = p_instance->p_cb;
-
-    if (p_cb->state != NRF_DRV_STATE_UNINITIALIZED)
-    {
-        return NRF_ERROR_INVALID_STATE;
-    }
-
-    uint32_t err_code = nrf_drv_ppi_init();
-    if ((err_code != NRF_SUCCESS) && (err_code != MODULE_ALREADY_INITIALIZED))
-    {
-        return NRF_ERROR_NO_MEM;
-    }
-
-
-    if (!nrf_drv_gpiote_is_init())
-    {
-        err_code = nrf_drv_gpiote_init();
-        if (err_code != NRF_SUCCESS)
-               {
-                       return NRF_ERROR_INTERNAL;
-               }
-    }
-
-#ifdef NRF52
-    if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x30)
-    {
-        m_use_ppi_delay_workaround = false;
-    }
-    else
-    {
-        m_use_ppi_delay_workaround = true;
-    }
-#endif
-    
-    // Innitialize resource status:
-    p_cb->ppi_channels[0] = (nrf_ppi_channel_t)UNALLOCATED;
-    p_cb->ppi_channels[1] = (nrf_ppi_channel_t)UNALLOCATED;
-    p_cb->ppi_group       = (nrf_ppi_channel_group_t)UNALLOCATED;
-
-    for (uint8_t i = 0; i < APP_PWM_CHANNELS_PER_INSTANCE; ++i)
-    {
-        p_cb->channels_cb[i].initialized     = APP_PWM_CHANNEL_UNINITIALIZED;
-        p_cb->channels_cb[i].ppi_channels[0] = (nrf_ppi_channel_t)UNALLOCATED;
-        p_cb->channels_cb[i].ppi_channels[1] = (nrf_ppi_channel_t)UNALLOCATED;
-        p_cb->channels_cb[i].gpio_pin        = UNALLOCATED;
-    }
-
-    // Allocate PPI channels and groups:
-    for (uint8_t i = 0; i < APP_PWM_REQUIRED_PPI_CHANNELS_PER_INSTANCE; ++i)
-    {
-        if (nrf_drv_ppi_channel_alloc(&p_cb->ppi_channels[i]) != NRF_SUCCESS)
-        {
-            pwm_dealloc(p_instance);
-            return NRF_ERROR_NO_MEM;
-        }
-    }
-    if (nrf_drv_ppi_group_alloc(&p_cb->ppi_group) != NRF_SUCCESS)
-    {
-        pwm_dealloc(p_instance);
-        return NRF_ERROR_NO_MEM;
-    }
-
-    // Initialize channels:
-    for (uint8_t i = 0; i < APP_PWM_CHANNELS_PER_INSTANCE; ++i)
-    {
-        if (p_config->pins[i] != APP_PWM_NOPIN)
-        {
-            err_code = app_pwm_channel_init(p_instance, i, p_config->pins[i], 
p_config->pin_polarity[i]);
-            if (err_code != NRF_SUCCESS)
-            {
-                pwm_dealloc(p_instance);
-                return err_code;
-            }
-            app_pwm_channel_duty_ticks_set(p_instance, i, 0);
-        }
-    }
-
-    // Initialize timer:
-    nrf_timer_frequency_t  timer_freq = 
pwm_calculate_timer_frequency(p_config->period_us);
-    nrf_drv_timer_config_t timer_cfg  = {
-        .frequency          = timer_freq,
-        .mode               = NRF_TIMER_MODE_TIMER,
-        .bit_width          = NRF_TIMER_BIT_WIDTH_16,
-        .interrupt_priority = APP_IRQ_PRIORITY_LOW,
-        .p_context          = (void *) (uint32_t) 
p_instance->p_timer->instance_id
-    };
-    err_code = nrf_drv_timer_init(p_instance->p_timer, &timer_cfg,
-                                  pwm_ready_tick);
-    if (err_code != NRF_SUCCESS)
-    {
-        pwm_dealloc(p_instance);
-        return err_code;
-    }
-
-    uint32_t ticks = nrf_drv_timer_us_to_ticks(p_instance->p_timer, 
p_config->period_us);
-    p_cb->period = ticks;
-    nrf_drv_timer_clear(p_instance->p_timer);
-    nrf_drv_timer_extended_compare(p_instance->p_timer, 
(nrf_timer_cc_channel_t) PWM_MAIN_CC_CHANNEL,
-                                    ticks, 
NRF_TIMER_SHORT_COMPARE2_CLEAR_MASK, true);
-    nrf_drv_timer_compare_int_disable(p_instance->p_timer, 
PWM_MAIN_CC_CHANNEL);
-
-    p_cb->p_ready_callback = p_ready_callback;
-    m_instances[p_instance->p_timer->instance_id] = p_instance;
-    m_pwm_busy[p_instance->p_timer->instance_id] = BUSY_STATE_IDLE;
-    p_cb->state = NRF_DRV_STATE_INITIALIZED;
-
-    return NRF_SUCCESS;
-}
-
-
-void app_pwm_enable(app_pwm_t const * const p_instance)
-{
-    app_pwm_cb_t * p_cb = p_instance->p_cb;
-
-    ASSERT(p_cb->state != NRF_DRV_STATE_UNINITIALIZED);
-
-    for (uint32_t channel = 0; channel < APP_PWM_CHANNELS_PER_INSTANCE; 
++channel)
-    {
-        app_pwm_channel_cb_t * p_ch_cb = &p_cb->channels_cb[channel];
-        m_pwm_ready_counter[p_instance->p_timer->instance_id][channel] = 0;
-        if (p_ch_cb->initialized)
-        {
-            nrf_drv_gpiote_out_task_force(p_ch_cb->gpio_pin, 
POLARITY_INACTIVE(p_instance, channel));
-            nrf_drv_gpiote_out_task_enable(p_ch_cb->gpio_pin);
-            p_ch_cb->pulsewidth = 0;
-        }
-    }
-    m_pwm_busy[p_instance->p_timer->instance_id] = BUSY_STATE_IDLE;
-    pan73_workaround(p_instance->p_timer->p_reg, true);
-    nrf_drv_timer_clear(p_instance->p_timer);
-    nrf_drv_timer_enable(p_instance->p_timer);
-
-    p_cb->state = NRF_DRV_STATE_POWERED_ON;
-    return;
-}
-
-
-void app_pwm_disable(app_pwm_t const * const p_instance)
-{
-    app_pwm_cb_t * p_cb = p_instance->p_cb;
-
-    ASSERT(p_cb->state != NRF_DRV_STATE_UNINITIALIZED);
-
-    nrf_drv_timer_disable(p_instance->p_timer);
-    pwm_irq_disable(p_instance);
-    for (uint8_t ppi_channel = 0; ppi_channel < 
APP_PWM_REQUIRED_PPI_CHANNELS_PER_INSTANCE; ++ppi_channel)
-    {
-        nrf_drv_ppi_channel_disable(p_cb->ppi_channels[ppi_channel]);
-    }
-    for (uint8_t channel = 0; channel < APP_PWM_CHANNELS_PER_INSTANCE; 
++channel)
-    {
-        app_pwm_channel_cb_t * p_ch_cb = &p_cb->channels_cb[channel];
-        if (p_ch_cb->initialized)
-        {
-            uint8_t polarity = POLARITY_INACTIVE(p_instance, channel);
-            if (polarity)
-            {
-                nrf_gpio_pin_set(p_ch_cb->gpio_pin);
-            }
-            else
-            {
-                nrf_gpio_pin_clear(p_ch_cb->gpio_pin);
-            }
-            nrf_drv_gpiote_out_task_disable(p_ch_cb->gpio_pin);
-            nrf_drv_ppi_channel_disable(p_ch_cb->ppi_channels[0]);
-            nrf_drv_ppi_channel_disable(p_ch_cb->ppi_channels[1]);
-        }
-    }
-    pan73_workaround(p_instance->p_timer->p_reg, false);
-
-    p_cb->state = NRF_DRV_STATE_INITIALIZED;
-    return;
-}
-
-
-ret_code_t app_pwm_uninit(app_pwm_t const * const p_instance)
-{
-    app_pwm_cb_t * p_cb = p_instance->p_cb;
-
-    if (p_cb->state == NRF_DRV_STATE_POWERED_ON)
-    {
-        app_pwm_disable(p_instance);
-    }
-    else if (p_cb->state == NRF_DRV_STATE_UNINITIALIZED)
-    {
-        return NRF_ERROR_INVALID_STATE;
-    }
-    pwm_dealloc(p_instance);
-
-    p_cb->state = NRF_DRV_STATE_UNINITIALIZED;
-    return NRF_SUCCESS;
-}
-
-
-//lint -restore

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/a1481cb2/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/pwm/app_pwm.h
----------------------------------------------------------------------
diff --git 
a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/pwm/app_pwm.h
 
b/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/pwm/app_pwm.h
deleted file mode 100644
index eb3c1d4..0000000
--- 
a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/pwm/app_pwm.h
+++ /dev/null
@@ -1,303 +0,0 @@
-/* Copyright (c) 2015 Nordic Semiconductor. All Rights Reserved.
- *
- * The information contained herein is property of Nordic Semiconductor ASA.
- * Terms and conditions of usage are described in detail in NORDIC
- * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT.
- *
- * Licensees are granted free, non-transferable use of the information. NO
- * WARRANTY of ANY KIND is provided. This heading must NOT be removed from
- * the file.
- *
- */
-
-/** @file
- *
- * @defgroup app_pwm Pulse-width modulation (PWM)
- * @{
- * @ingroup app_common
- *
- * @brief Module for generating a pulse-width modulated output signal.
- *
- * @details This module provides a PWM implementation using timers, GPIOTE, 
and PPI.
- *
- * Resource usage:
- * - 2 PPI channels per instance + 2 PPI channels per PWM channel.
- * - 1 PPI group per instance.
- * - 1 GPIOTE channel per PWM channel.
- *
- * For example, a PWM instance with two channels will consume 2+4 PPI 
channels, 1 PPI group, and 2 GPIOTE channels.
- *
- * The maximum number of PWM channels per instance is 2.
- */
-
-#ifndef APP_PWM_H__
-#define APP_PWM_H__
-
-#include <stdint.h>
-#include "sdk_errors.h"
-#include "nrf_drv_timer.h"
-#include "nrf_drv_common.h"
-#include "nrf_drv_ppi.h"
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define APP_PWM_NOPIN                 0xFFFFFFFF
-
-/** @brief Number of channels for one timer instance (fixed to 2 due to timer 
properties).*/
-#define APP_PWM_CHANNELS_PER_INSTANCE 2
-
-/**@brief Macro for creating a PWM instance. */
-#define APP_PWM_INSTANCE(name, num)                                           \
-    const nrf_drv_timer_t m_pwm_##name##_timer = NRF_DRV_TIMER_INSTANCE(num); \
-    app_pwm_cb_t m_pwm_##name##_cb;                                           \
-    /*lint -e{545}*/                                                          \
-    const app_pwm_t name = {                                                  \
-        .p_cb    = &m_pwm_##name##_cb,                                        \
-        .p_timer = &m_pwm_##name##_timer,                                     \
-    }
-
-
-/**@brief PWM instance default configuration (1 channel). */
-#define APP_PWM_DEFAULT_CONFIG_1CH(period_in_us, pin)                          
        \
-    {                                                                          
        \
-        .pins            = {pin, APP_PWM_NOPIN},                               
        \
-        .pin_polarity    = {APP_PWM_POLARITY_ACTIVE_LOW, 
APP_PWM_POLARITY_ACTIVE_LOW}, \
-        .num_of_channels = 1,                                                  
        \
-        .period_us       = period_in_us                                        
        \
-    }
-
-/**@brief PWM instance default configuration (2 channels). */
-#define APP_PWM_DEFAULT_CONFIG_2CH(period_in_us, pin0, pin1)                   
        \
-    {                                                                          
        \
-        .pins            = {pin0, pin1},                                       
        \
-        .pin_polarity    = {APP_PWM_POLARITY_ACTIVE_LOW, 
APP_PWM_POLARITY_ACTIVE_LOW}, \
-        .num_of_channels = 2,                                                  
        \
-        .period_us       = period_in_us                                        
        \
-    }
-
-typedef uint16_t app_pwm_duty_t;
-
-/**
- * @brief PWM callback that is executed when a PWM duty change has been 
completed.
- *
- * @param[in] pwm_id  PWM instance ID.
- */
-typedef void (* app_pwm_callback_t)(uint32_t);
-
-/**
- * @brief Channel polarity.
- */
-typedef enum
-{
-    APP_PWM_POLARITY_ACTIVE_LOW  = 0,
-    APP_PWM_POLARITY_ACTIVE_HIGH = 1
-} app_pwm_polarity_t;
-
-/**@brief PWM configuration structure used for initialization. */
-typedef struct
-{
-    uint32_t           pins[APP_PWM_CHANNELS_PER_INSTANCE];         //!< Pins 
configured as PWM output.
-    app_pwm_polarity_t pin_polarity[APP_PWM_CHANNELS_PER_INSTANCE]; //!< 
Polarity of active state on pin.
-    uint32_t           num_of_channels;                             //!< 
Number of channels that can be used.
-    uint32_t           period_us;                                   //!< PWM 
signal output period to configure (in microseconds).
-} app_pwm_config_t;
-
-
-/**
- * @cond (NODOX)
- * @defgroup app_pwm_internal Auxiliary internal types declarations
- * @{
- * @internal
- *
- * @brief Module for internal usage inside the library only
- *
- * There are some definitions that must be included in the header file because 
- * of the way the library is set up. In this way, the are accessible to the 
user.
- * However, any functions and variables defined here may change at any time 
- * without a warning, so you should not access them directly.
- */
-
-    /**
-     * @brief PWM channel instance
-     *
-     * This structure holds all data needed by a single PWM channel.
-     */
-    typedef struct
-    {
-        uint32_t           gpio_pin;        //!< Pin that is used by this PWM 
channel.
-        uint32_t           pulsewidth;      //!< The copy of duty currently 
set (in ticks).
-        nrf_ppi_channel_t  ppi_channels[2]; //!< PPI channels used by the PWM 
channel to clear and set the output.
-        app_pwm_polarity_t polarity;        //!< The active state of the pin.
-        uint8_t            initialized;     //!< The internal information if 
the selected channel was initialized.
-    } app_pwm_channel_cb_t;
-
-    /**
-     * @brief Variable part of PWM instance
-     *
-     * This structure holds instance data that may change.
-     */
-    typedef struct
-    {
-        app_pwm_channel_cb_t    channels_cb[APP_PWM_CHANNELS_PER_INSTANCE]; 
//!< Channels data
-        uint32_t                period;                                     
//!< Selected period in ticks
-        app_pwm_callback_t      p_ready_callback;                           
//!< Callback function called on PWM readiness
-        nrf_ppi_channel_t       ppi_channels[2];                            
//!< PPI channels used temporary while changing duty
-        nrf_ppi_channel_group_t ppi_group;                                  
//!< PPI group used to synchronize changes on channels
-        nrf_drv_state_t         state;                                      
//!< Current driver status
-    } app_pwm_cb_t;
-/** @}
- * @endcond
- */
-
-
-/**@brief PWM instance structure. */
-typedef struct
-{
-    app_pwm_cb_t *p_cb;                    //!< Pointer to control block 
internals.
-    nrf_drv_timer_t const * const p_timer; //!< Timer used by this PWM 
instance.
-} app_pwm_t;
-
-/**
- * @brief Function for checking if the PWM instance is busy updating the duty 
cycle.
- *
- * @param[in] p_instance  PWM instance.
- *
- * @retval True  If the PWM instance is ready for duty cycle changes.
- * @retval False If a change operation is in progress.
- */
-bool app_pwm_busy_check(app_pwm_t const * const p_instance);
-
-/**
- * @brief Function for initializing a PWM instance.
- *
- * @param[in] p_instance        PWM instance.
- * @param[in] p_config          Initial configuration.
- * @param[in] p_ready_callback  Pointer to ready callback function (or NULL to 
disable).
- *
- * @retval    NRF_SUCCESS If initialization was successful.
- * @retval    NRF_ERROR_NO_MEM If there were not enough free resources.
- * @retval    NRF_ERROR_INVALID_PARAM If an invalid configuration structure 
was passed.
- * @retval    NRF_ERROR_INVALID_STATE If the timer/PWM is already in use or if 
initialization failed.
- */
-ret_code_t app_pwm_init(app_pwm_t const * const p_instance, app_pwm_config_t 
const * const p_config,
-                        app_pwm_callback_t p_ready_callback);
-
-
-/**
- * @brief Function for uninitializing a PWM instance and releasing the 
allocated resources.
- *
- * @param[in] p_instance  PWM instance.
- *
- * @retval    NRF_SUCCESS If uninitialization was successful.
- * @retval    NRF_ERROR_INVALID_STATE If the given instance was not 
initialized.
- */
-ret_code_t app_pwm_uninit(app_pwm_t const * const p_instance);
-
-/**
- * @brief Function for enabling a PWM instance after initialization.
- *
- * @param[in] p_instance  PWM instance.
- */
-void app_pwm_enable(app_pwm_t const * const p_instance);
-
-/**
- * @brief Function for disabling a PWM instance after initialization.
- *
- * @param[in] p_instance  PWM instance.
- */
-void app_pwm_disable(app_pwm_t const * const p_instance);
-
-/**
- * @brief Function for setting the PWM channel duty cycle in percents.
- *
- * A duty cycle change requires one full PWM clock period to finish.
- * If another change is attempted for any channel of given instance before
- * the current change is complete, the new attempt will result in the error
- * NRF_ERROR_BUSY.
- *
- * @param[in] p_instance  PWM instance.
- * @param[in] channel     Channel number.
- * @param[in] duty        Duty cycle (0 - 100).
- *
- * @retval    NRF_SUCCESS If the operation was successful.
- * @retval    NRF_ERROR_BUSY If the PWM is not ready yet.
- * @retval    NRF_ERROR_INVALID_STATE If the given instance was not 
initialized.
- *
- */
-ret_code_t app_pwm_channel_duty_set(app_pwm_t const * const p_instance,
-                                  uint8_t channel, app_pwm_duty_t duty);
-
-/**
- * @brief Function for retrieving the PWM channel duty cycle in percents.
- *
- * @param[in] p_instance  PWM instance.
- * @param[in] channel     Channel number.
- *
- * @return    Duty cycle value.
- */
-app_pwm_duty_t app_pwm_channel_duty_get(app_pwm_t const * const p_instance, 
uint8_t channel);
-
-
-/**
- * @name Functions accessing values in ticks
- *
- * Auxiliary functions that allow to get values in actual timer ticks.
- * @{
- */
-
-    /**
-     * @brief Function for setting PWM channel duty cycle in clock ticks.
-     *
-     * @note      Duty cycle changes require one full PWM clock period to 
finish.
-     *            Until that, the next change attempt (for any channel of 
given instance)
-     *            will result in an NRF_ERROR_BUSY error.
-     *
-     * @param[in] p_instance  PWM instance.
-     * @param[in] channel     Channel number.
-     * @param[in] ticks       Number of PWM clock ticks.
-     *
-     * @retval    NRF_SUCCESS If the operation was successful.
-     * @retval    NRF_ERROR_BUSY If PWM is not ready yet.
-     * @retval    NRF_ERROR_INVALID_STATE If the given instance was not 
initialized.
-     */
-    ret_code_t app_pwm_channel_duty_ticks_set(app_pwm_t const * const 
p_instance,
-                                              uint8_t           channel,
-                                              uint16_t          ticks);
-
-
-    /**
-     * @brief Function for retrieving the PWM channel duty cycle in ticks.
-     *
-     * This function retrieves the real, currently set duty cycle in ticks.
-     * For one full PWM cycle the value might be different than the value set 
by the last
-     * @ref app_pwm_channel_duty_ticks_set function call.
-     *
-     * @param[in] p_instance  PWM instance.
-     * @param[in] channel     Channel number.
-     *
-     * @return    Number of ticks set for selected channel.
-     *
-     */
-    uint16_t app_pwm_channel_duty_ticks_get(app_pwm_t const * const 
p_instance, uint8_t channel);
-
-    /**
-     * @brief Function for returning the number of ticks in a whole cycle.
-     *
-     * @param[in] p_instance  PWM instance.
-     *
-     * @return    Number of ticks that corresponds to 100% of the duty cycle.
-     */
-    uint16_t app_pwm_cycle_ticks_get(app_pwm_t const * const p_instance);
-/** @} */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-/** @} */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/a1481cb2/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/scheduler/app_scheduler.c
----------------------------------------------------------------------
diff --git 
a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/scheduler/app_scheduler.c
 
b/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/scheduler/app_scheduler.c
deleted file mode 100644
index 829d7f9..0000000
--- 
a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/scheduler/app_scheduler.c
+++ /dev/null
@@ -1,227 +0,0 @@
-/* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved.
- *
- * The information contained herein is property of Nordic Semiconductor ASA.
- * Terms and conditions of usage are described in detail in NORDIC
- * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT.
- *
- * Licensees are granted free, non-transferable use of the information. NO
- * WARRANTY of ANY KIND is provided. This heading must NOT be removed from
- * the file.
- *
- */
-
-#include "app_scheduler.h"
-#include <stdlib.h>
-#include <stdint.h>
-#include <string.h>
-#include "nrf_soc.h"
-#include "nrf_assert.h"
-#include "app_util.h"
-#include "app_util_platform.h"
-
-/**@brief Structure for holding a scheduled event header. */
-typedef struct
-{
-    app_sched_event_handler_t handler;          /**< Pointer to event handler 
to receive the event. */
-    uint16_t                  event_data_size;  /**< Size of event data. */
-} event_header_t;
-
-STATIC_ASSERT(sizeof(event_header_t) <= APP_SCHED_EVENT_HEADER_SIZE);
-
-static event_header_t * m_queue_event_headers;  /**< Array for holding the 
queue event headers. */
-static uint8_t        * m_queue_event_data;     /**< Array for holding the 
queue event data. */
-static volatile uint8_t m_queue_start_index;    /**< Index of queue entry at 
the start of the queue. */
-static volatile uint8_t m_queue_end_index;      /**< Index of queue entry at 
the end of the queue. */
-static uint16_t         m_queue_event_size;     /**< Maximum event size in 
queue. */
-static uint16_t         m_queue_size;           /**< Number of queue entries. 
*/
-
-#ifdef APP_SCHEDULER_WITH_PROFILER
-static uint16_t m_max_queue_utilization;    /**< Maximum observed queue 
utilization. */
-#endif
-
-/**@brief Function for incrementing a queue index, and handle wrap-around.
- *
- * @param[in]   index   Old index.
- *
- * @return      New (incremented) index.
- */
-static __INLINE uint8_t next_index(uint8_t index)
-{
-    return (index < m_queue_size) ? (index + 1) : 0;
-}
-
-
-static __INLINE uint8_t app_sched_queue_full()
-{
-  uint8_t tmp = m_queue_start_index;
-  return next_index(m_queue_end_index) == tmp;
-}
-
-/**@brief Macro for checking if a queue is full. */
-#define APP_SCHED_QUEUE_FULL() app_sched_queue_full()
-
-
-static __INLINE uint8_t app_sched_queue_empty()
-{
-  uint8_t tmp = m_queue_start_index;
-  return m_queue_end_index == tmp;
-}
-
-/**@brief Macro for checking if a queue is empty. */
-#define APP_SCHED_QUEUE_EMPTY() app_sched_queue_empty()
-
-
-uint32_t app_sched_init(uint16_t event_size, uint16_t queue_size, void * 
p_event_buffer)
-{
-    uint16_t data_start_index = (queue_size + 1) * sizeof(event_header_t);
-
-    // Check that buffer is correctly aligned
-    if (!is_word_aligned(p_event_buffer))
-    {
-        return NRF_ERROR_INVALID_PARAM;
-    }
-
-    // Initialize event scheduler
-    m_queue_event_headers = p_event_buffer;
-    m_queue_event_data    = &((uint8_t *)p_event_buffer)[data_start_index];
-    m_queue_end_index     = 0;
-    m_queue_start_index   = 0;
-    m_queue_event_size    = event_size;
-    m_queue_size          = queue_size;
-
-#ifdef APP_SCHEDULER_WITH_PROFILER
-    m_max_queue_utilization = 0;
-#endif
-
-    return NRF_SUCCESS;
-}
-
-
-#ifdef APP_SCHEDULER_WITH_PROFILER
-static void queue_utilization_check(void)
-{
-    uint16_t start = m_queue_start_index;
-    uint16_t end   = m_queue_end_index;
-    uint16_t queue_utilization = (end >= start) ? (end - start) :
-        (m_queue_size + 1 - start + end);
-
-    if (queue_utilization > m_max_queue_utilization)
-    {
-        m_max_queue_utilization = queue_utilization;
-    }
-}
-
-uint16_t app_sched_queue_utilization_get(void)
-{
-    return m_max_queue_utilization;
-}
-#endif
-
-
-uint32_t app_sched_event_put(void                    * p_event_data,
-                             uint16_t                  event_data_size,
-                             app_sched_event_handler_t handler)
-{
-    uint32_t err_code;
-
-    if (event_data_size <= m_queue_event_size)
-    {
-        uint16_t event_index = 0xFFFF;
-
-        CRITICAL_REGION_ENTER();
-
-        if (!APP_SCHED_QUEUE_FULL())
-        {
-            event_index       = m_queue_end_index;
-            m_queue_end_index = next_index(m_queue_end_index);
-
-        #ifdef APP_SCHEDULER_WITH_PROFILER
-            // This function call must be protected with critical region 
because
-            // it modifies 'm_max_queue_utilization'.
-            queue_utilization_check();
-        #endif
-        }
-
-        CRITICAL_REGION_EXIT();
-
-        if (event_index != 0xFFFF)
-        {
-            // NOTE: This can be done outside the critical region since the 
event consumer will
-            //       always be called from the main loop, and will thus never 
interrupt this code.
-            m_queue_event_headers[event_index].handler = handler;
-            if ((p_event_data != NULL) && (event_data_size > 0))
-            {
-                memcpy(&m_queue_event_data[event_index * m_queue_event_size],
-                       p_event_data,
-                       event_data_size);
-                m_queue_event_headers[event_index].event_data_size = 
event_data_size;
-            }
-            else
-            {
-                m_queue_event_headers[event_index].event_data_size = 0;
-            }
-
-            err_code = NRF_SUCCESS;
-        }
-        else
-        {
-            err_code = NRF_ERROR_NO_MEM;
-        }
-    }
-    else
-    {
-        err_code = NRF_ERROR_INVALID_LENGTH;
-    }
-
-    return err_code;
-}
-
-
-/**@brief Function for reading the next event from specified event queue.
- *
- * @param[out]  pp_event_data       Pointer to pointer to event data.
- * @param[out]  p_event_data_size   Pointer to size of event data.
- * @param[out]  p_event_handler     Pointer to event handler function pointer.
- *
- * @return      NRF_SUCCESS if new event, NRF_ERROR_NOT_FOUND if event queue 
is empty.
- */
-static uint32_t app_sched_event_get(void                     ** pp_event_data,
-                                    uint16_t *                  
p_event_data_size,
-                                    app_sched_event_handler_t * 
p_event_handler)
-{
-    uint32_t err_code = NRF_ERROR_NOT_FOUND;
-
-    if (!APP_SCHED_QUEUE_EMPTY())
-    {
-        uint16_t event_index;
-
-        // NOTE: There is no need for a critical region here, as this function 
will only be called
-        //       from app_sched_execute() from inside the main loop, so it 
will never interrupt
-        //       app_sched_event_put(). Also, updating of (i.e. writing to) 
the start index will be
-        //       an atomic operation.
-        event_index         = m_queue_start_index;
-        m_queue_start_index = next_index(m_queue_start_index);
-
-        *pp_event_data     = &m_queue_event_data[event_index * 
m_queue_event_size];
-        *p_event_data_size = 
m_queue_event_headers[event_index].event_data_size;
-        *p_event_handler   = m_queue_event_headers[event_index].handler;
-
-        err_code = NRF_SUCCESS;
-    }
-
-    return err_code;
-}
-
-
-void app_sched_execute(void)
-{
-    void                    * p_event_data;
-    uint16_t                  event_data_size;
-    app_sched_event_handler_t event_handler;
-
-    // Get next event (if any), and execute handler
-    while ((app_sched_event_get(&p_event_data, &event_data_size, 
&event_handler) == NRF_SUCCESS))
-    {
-        event_handler(p_event_data, event_data_size);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/a1481cb2/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/scheduler/app_scheduler.h
----------------------------------------------------------------------
diff --git 
a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/scheduler/app_scheduler.h
 
b/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/scheduler/app_scheduler.h
deleted file mode 100644
index 40cb562..0000000
--- 
a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/scheduler/app_scheduler.h
+++ /dev/null
@@ -1,171 +0,0 @@
-/* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved.
- *
- * The information contained herein is property of Nordic Semiconductor ASA.
- * Terms and conditions of usage are described in detail in NORDIC
- * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT.
- *
- * Licensees are granted free, non-transferable use of the information. NO
- * WARRANTY of ANY KIND is provided. This heading must NOT be removed from
- * the file.
- *
- */
-
-/** @file
- *
- * @defgroup app_scheduler Scheduler
- * @{
- * @ingroup app_common
- *
- * @brief The scheduler is used for transferring execution from the interrupt 
context to the main
- *        context.
- *
- * @details See @ref seq_diagrams_sched for sequence diagrams illustrating the 
flow of events
- *          when using the Scheduler.
- *
- * @section app_scheduler_req Requirements:
- *
- * @subsection main_context_logic Logic in main context:
- *
- *   - Define an event handler for each type of event expected.
- *   - Initialize the scheduler by calling the APP_SCHED_INIT() macro before 
entering the
- *     application main loop.
- *   - Call app_sched_execute() from the main loop each time the application 
wakes up because of an
- *     event (typically when sd_app_evt_wait() returns).
- *
- * @subsection int_context_logic Logic in interrupt context:
- *
- *   - In the interrupt handler, call app_sched_event_put()
- *     with the appropriate data and event handler. This will insert an event 
into the
- *     scheduler's queue. The app_sched_execute() function will pull this 
event and call its
- *     handler in the main context.
- *
- * @if (PERIPHERAL)
- * For an example usage of the scheduler, see the implementations of
- * @ref ble_sdk_app_hids_mouse and @ref ble_sdk_app_hids_keyboard.
- * @endif
- *
- * @image html scheduler_working.jpg The high level design of the scheduler
- */
-
-#ifndef APP_SCHEDULER_H__
-#define APP_SCHEDULER_H__
-
-#include <stdint.h>
-#include "app_error.h"
-#include "app_util.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define APP_SCHED_EVENT_HEADER_SIZE 8       /**< Size of 
app_scheduler.event_header_t (only for use inside APP_SCHED_BUF_SIZE()). */
-
-/**@brief Compute number of bytes required to hold the scheduler buffer.
- *
- * @param[in] EVENT_SIZE   Maximum size of events to be passed through the 
scheduler.
- * @param[in] QUEUE_SIZE   Number of entries in scheduler queue (i.e. the 
maximum number of events
- *                         that can be scheduled for execution).
- *
- * @return    Required scheduler buffer size (in bytes).
- */
-#define APP_SCHED_BUF_SIZE(EVENT_SIZE, QUEUE_SIZE)                             
                    \
-            (((EVENT_SIZE) + APP_SCHED_EVENT_HEADER_SIZE) * ((QUEUE_SIZE) + 1))
-            
-/**@brief Scheduler event handler type. */
-typedef void (*app_sched_event_handler_t)(void * p_event_data, uint16_t 
event_size);
-
-/**@brief Macro for initializing the event scheduler.
- *
- * @details It will also handle dimensioning and allocation of the memory 
buffer required by the
- *          scheduler, making sure the buffer is correctly aligned.
- *
- * @param[in] EVENT_SIZE   Maximum size of events to be passed through the 
scheduler.
- * @param[in] QUEUE_SIZE   Number of entries in scheduler queue (i.e. the 
maximum number of events
- *                         that can be scheduled for execution).
- *
- * @note Since this macro allocates a buffer, it must only be called once (it 
is OK to call it
- *       several times as long as it is from the same location, e.g. to do a 
reinitialization).
- */
-#define APP_SCHED_INIT(EVENT_SIZE, QUEUE_SIZE)                                 
                    \
-    do                                                                         
                    \
-    {                                                                          
                    \
-        static uint32_t 
APP_SCHED_BUF[CEIL_DIV(APP_SCHED_BUF_SIZE((EVENT_SIZE), (QUEUE_SIZE)),     \
-                                               sizeof(uint32_t))];             
                    \
-        uint32_t ERR_CODE = app_sched_init((EVENT_SIZE), (QUEUE_SIZE), 
APP_SCHED_BUF);             \
-        APP_ERROR_CHECK(ERR_CODE);                                             
                    \
-    } while (0)
-
-/**@brief Function for initializing the Scheduler.
- *
- * @details It must be called before entering the main loop.
- *
- * @param[in]   max_event_size   Maximum size of events to be passed through 
the scheduler.
- * @param[in]   queue_size       Number of entries in scheduler queue (i.e. 
the maximum number of
- *                               events that can be scheduled for execution).
- * @param[in]   p_evt_buffer   Pointer to memory buffer for holding the 
scheduler queue. It must
- *                               be dimensioned using the 
APP_SCHED_BUFFER_SIZE() macro. The buffer
- *                               must be aligned to a 4 byte boundary.
- *
- * @note Normally initialization should be done using the APP_SCHED_INIT() 
macro, as that will both
- *       allocate the scheduler buffer, and also align the buffer correctly.
- *
- * @retval      NRF_SUCCESS               Successful initialization.
- * @retval      NRF_ERROR_INVALID_PARAM   Invalid parameter (buffer not 
aligned to a 4 byte
- *                                        boundary).
- */
-uint32_t app_sched_init(uint16_t max_event_size, uint16_t queue_size, void * 
p_evt_buffer);
-
-/**@brief Function for executing all scheduled events.
- *
- * @details This function must be called from within the main loop. It will 
execute all events
- *          scheduled since the last time it was called.
- */
-void app_sched_execute(void);
-
-/**@brief Function for scheduling an event.
- *
- * @details Puts an event into the event queue.
- *
- * @param[in]   p_event_data   Pointer to event data to be scheduled.
- * @param[in]   event_size   Size of event data to be scheduled.
- * @param[in]   handler        Event handler to receive the event.
- *
- * @return      NRF_SUCCESS on success, otherwise an error code.
- */
-uint32_t app_sched_event_put(void *                    p_event_data,
-                             uint16_t                  event_size,
-                             app_sched_event_handler_t handler);
-
-#ifdef APP_SCHEDULER_WITH_PROFILER
-/**@brief Function for getting the maximum observed queue utilization.
- *
- * Function for tuning the module and determining QUEUE_SIZE value and thus 
module RAM usage.
- *
- * @return Maximum number of events in queue observed so far.
- */
-uint16_t app_sched_queue_utilization_get(void);
-#endif
-
-#ifdef APP_SCHEDULER_WITH_PAUSE
-/**@brief A function to pause the scheduler.
- *
- * @details When the scheduler is paused events are not pulled from the 
scheduler queue for
- *          processing. The function can be called multiple times. To unblock 
the scheduler the
- *          function @ref app_sched_resume has to be called the same number of 
times.
- */
-void app_sched_pause(void);
-
-/**@brief A function to resume a scheduler.
- *
- * @details To unblock the scheduler this function has to be called the same 
number of times as
- *          @ref app_sched_pause function.
- */
-void app_sched_resume(void);
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-#endif // APP_SCHEDULER_H__
-
-/** @} */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/a1481cb2/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/scheduler/app_scheduler_serconn.c
----------------------------------------------------------------------
diff --git 
a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/scheduler/app_scheduler_serconn.c
 
b/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/scheduler/app_scheduler_serconn.c
deleted file mode 100644
index f411eff..0000000
--- 
a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/scheduler/app_scheduler_serconn.c
+++ /dev/null
@@ -1,262 +0,0 @@
-/* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved.
- *
- * The information contained herein is property of Nordic Semiconductor ASA.
- * Terms and conditions of usage are described in detail in NORDIC
- * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT.
- *
- * Licensees are granted free, non-transferable use of the information. NO
- * WARRANTY of ANY KIND is provided. This heading must NOT be removed from
- * the file.
- *
- */
-
-#include "app_scheduler.h"
-#include <stdlib.h>
-#include <stdint.h>
-#include <string.h>
-#include "nrf_soc.h"
-#include "nrf_assert.h"
-#include "app_util.h"
-#include "app_util_platform.h"
-
-/**@brief Structure for holding a scheduled event header. */
-typedef struct
-{
-    app_sched_event_handler_t handler;         /**< Pointer to event handler 
to receive the event. */
-    uint16_t                  event_data_size; /**< Size of event data. */
-} event_header_t;
-
-STATIC_ASSERT(sizeof (event_header_t) <= APP_SCHED_EVENT_HEADER_SIZE);
-
-static event_header_t * m_queue_event_headers; /**< Array for holding the 
queue event headers. */
-static uint8_t *        m_queue_event_data;    /**< Array for holding the 
queue event data. */
-static volatile uint8_t m_queue_start_index;   /**< Index of queue entry at 
the start of the queue. */
-static volatile uint8_t m_queue_end_index;     /**< Index of queue entry at 
the end of the queue. */
-static uint16_t         m_queue_event_size;    /**< Maximum event size in 
queue. */
-static uint16_t         m_queue_size;          /**< Number of queue entries. */
-
-#ifdef APP_SCHEDULER_WITH_PROFILER
-static uint16_t m_max_queue_utilization;    /**< Maximum observed queue 
utilization. */
-#endif
-
-static uint32_t m_scheduler_paused_counter = 0; /**< Counter storing the 
difference between pausing
-                                                     and resuming the 
scheduler. */
-
-/**@brief Function for incrementing a queue index, and handle wrap-around.
- *
- * @param[in]   index   Old index.
- *
- * @return      New (incremented) index.
- */
-static __INLINE uint8_t next_index(uint8_t index)
-{
-    return (index < m_queue_size) ? (index + 1) : 0;
-}
-
-static __INLINE uint8_t app_sched_queue_full(void)
-{
-  uint8_t tmp = m_queue_start_index;
-  return next_index(m_queue_end_index) == tmp;
-}
-
-/**@brief Macro for checking if a queue is full. */
-#define APP_SCHED_QUEUE_FULL() app_sched_queue_full()
-
-static __INLINE uint8_t app_sched_queue_empty(void)
-{
-  uint8_t tmp = m_queue_start_index;
-  return m_queue_end_index == tmp;
-}
-
-/**@brief Macro for checking if a queue is empty. */
-#define APP_SCHED_QUEUE_EMPTY() app_sched_queue_empty()
-
-
-uint32_t app_sched_init(uint16_t event_size, uint16_t queue_size, void * 
p_event_buffer)
-{
-    uint16_t data_start_index = (queue_size + 1) * sizeof (event_header_t);
-
-    //Check that buffer is correctly aligned
-    if (!is_word_aligned(p_event_buffer))
-    {
-        return NRF_ERROR_INVALID_PARAM;
-    }
-
-    //Initialize event scheduler
-    m_queue_event_headers = p_event_buffer;
-    m_queue_event_data    = &((uint8_t *)p_event_buffer)[data_start_index];
-    m_queue_end_index     = 0;
-    m_queue_start_index   = 0;
-    m_queue_event_size    = event_size;
-    m_queue_size          = queue_size;
-
-#ifdef APP_SCHEDULER_WITH_PROFILER
-    m_max_queue_utilization = 0;
-#endif
-
-    return NRF_SUCCESS;
-}
-
-
-#ifdef APP_SCHEDULER_WITH_PROFILER
-static void check_queue_utilization(void)
-{
-    uint16_t start = m_queue_start_index;
-    uint16_t end   = m_queue_end_index;
-    uint16_t queue_utilization = (end >= start) ? (end - start) :
-        (m_queue_size + 1 - start + end);
-
-    if (queue_utilization > m_max_queue_utilization)
-    {
-        m_max_queue_utilization = queue_utilization;
-    }
-}
-
-uint16_t app_sched_queue_utilization_get(void)
-{
-    return m_max_queue_utilization;
-}
-#endif
-
-
-uint32_t app_sched_event_put(void *                    p_event_data,
-                             uint16_t                  event_data_size,
-                             app_sched_event_handler_t handler)
-{
-    uint32_t err_code;
-
-    if (event_data_size <= m_queue_event_size)
-    {
-        uint16_t event_index = 0xFFFF;
-
-        CRITICAL_REGION_ENTER();
-
-        if (!APP_SCHED_QUEUE_FULL())
-        {
-            event_index       = m_queue_end_index;
-            m_queue_end_index = next_index(m_queue_end_index);
-        }
-
-        CRITICAL_REGION_EXIT();
-
-        if (event_index != 0xFFFF)
-        {
-            //NOTE: This can be done outside the critical region since the 
event consumer will
-            //always be called from the main loop, and will thus never 
interrupt this code.
-            m_queue_event_headers[event_index].handler = handler;
-
-            if ((p_event_data != NULL) && (event_data_size > 0))
-            {
-                memcpy(&m_queue_event_data[event_index * m_queue_event_size],
-                       p_event_data,
-                       event_data_size);
-                m_queue_event_headers[event_index].event_data_size = 
event_data_size;
-            }
-            else
-            {
-                m_queue_event_headers[event_index].event_data_size = 0;
-            }
-
-        #ifdef APP_SCHEDULER_WITH_PROFILER
-            check_queue_utilization();
-        #endif
-
-            err_code = NRF_SUCCESS;
-        }
-        else
-        {
-            err_code = NRF_ERROR_NO_MEM;
-        }
-    }
-    else
-    {
-        err_code = NRF_ERROR_INVALID_LENGTH;
-    }
-
-    return err_code;
-}
-
-
-/**@brief Function for reading the next event from specified event queue.
- *
- * @param[out]  pp_event_data       Pointer to pointer to event data.
- * @param[out]  p_event_data_size   Pointer to size of event data.
- * @param[out]  p_event_handler     Pointer to event handler function pointer.
- *
- * @return      NRF_SUCCESS if new event, NRF_ERROR_NOT_FOUND if event queue 
is empty.
- */
-static uint32_t app_sched_event_get(void * *                    pp_event_data,
-                                    uint16_t *                  
p_event_data_size,
-                                    app_sched_event_handler_t * 
p_event_handler)
-{
-    uint32_t err_code = NRF_ERROR_NOT_FOUND;
-
-    if (!APP_SCHED_QUEUE_EMPTY())
-    {
-        uint16_t event_index;
-
-        //NOTE: There is no need for a critical region here, as this function 
will only be called
-        //from app_sched_execute() from inside the main loop, so it will never 
interrupt
-        //app_sched_event_put(). Also, updating of (i.e. writing to) the start 
index will be
-        //an atomic operation.
-        event_index         = m_queue_start_index;
-        m_queue_start_index = next_index(m_queue_start_index);
-
-        *pp_event_data     = &m_queue_event_data[event_index * 
m_queue_event_size];
-        *p_event_data_size = 
m_queue_event_headers[event_index].event_data_size;
-        *p_event_handler   = m_queue_event_headers[event_index].handler;
-
-        err_code = NRF_SUCCESS;
-    }
-
-    return err_code;
-}
-
-
-void app_sched_pause(void)
-{
-    CRITICAL_REGION_ENTER();
-
-    if (m_scheduler_paused_counter < UINT32_MAX)
-    {
-        m_scheduler_paused_counter++;
-    }
-    CRITICAL_REGION_EXIT();
-}
-
-
-void app_sched_resume(void)
-{
-    CRITICAL_REGION_ENTER();
-
-    if (m_scheduler_paused_counter > 0)
-    {
-        m_scheduler_paused_counter--;
-    }
-    CRITICAL_REGION_EXIT();
-}
-
-/**@brief Function for checking if scheduler is paused which means that should 
break processing
- *        events.
- *
- * @return    Boolean value - true if scheduler is paused, false otherwise.
- */
-static __INLINE bool is_app_sched_paused(void)
-{
-    return (m_scheduler_paused_counter > 0);
-}
-
-
-void app_sched_execute(void)
-{
-    void *                    p_event_data;
-    uint16_t                  event_data_size;
-    app_sched_event_handler_t event_handler;
-
-    //Get next event (if any), and execute handler
-    while ((!is_app_sched_paused()) &&
-           (app_sched_event_get(&p_event_data, &event_data_size, 
&event_handler) == NRF_SUCCESS))
-    {
-        event_handler(p_event_data, event_data_size);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/a1481cb2/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/sensorsim/sensorsim.c
----------------------------------------------------------------------
diff --git 
a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/sensorsim/sensorsim.c
 
b/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/sensorsim/sensorsim.c
deleted file mode 100644
index e584666..0000000
--- 
a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/sensorsim/sensorsim.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved.
- *
- * The information contained herein is property of Nordic Semiconductor ASA.
- * Terms and conditions of usage are described in detail in NORDIC
- * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT.
- *
- * Licensees are granted free, non-transferable use of the information. NO
- * WARRANTY of ANY KIND is provided. This heading must NOT be removed from
- * the file.
- *
- */
-
-#include "sensorsim.h"
-
-
-void sensorsim_init(sensorsim_state_t     * p_state,
-                    const sensorsim_cfg_t * p_cfg)
-{
-    if (p_cfg->start_at_max)
-    {
-        p_state->current_val   = p_cfg->max;
-        p_state->is_increasing = false;
-    }
-    else
-    {
-        p_state->current_val   = p_cfg->min;
-        p_state->is_increasing = true;
-    }
-}
-
-
-uint32_t sensorsim_measure(sensorsim_state_t     * p_state,
-                           const sensorsim_cfg_t * p_cfg)
-{
-    if (p_state->is_increasing)
-    {
-        sensorsim_increment(p_state, p_cfg);
-    }
-    else
-    {
-        sensorsim_decrement(p_state, p_cfg);
-    }
-    return p_state->current_val;
-}
-
-void sensorsim_increment(sensorsim_state_t *     p_state,
-                         const sensorsim_cfg_t * p_cfg)
-{
-    if (p_cfg->max - p_state->current_val > p_cfg->incr)
-    {
-        p_state->current_val += p_cfg->incr;
-    }
-    else
-    {
-        p_state->current_val   = p_cfg->max;
-        p_state->is_increasing = false;
-    }
-}
-
-
-void sensorsim_decrement(sensorsim_state_t *     p_state,
-                         const sensorsim_cfg_t * p_cfg)
-{
-    if (p_state->current_val - p_cfg->min > p_cfg->incr)
-    {
-        p_state->current_val -= p_cfg->incr;
-    }
-    else
-    {
-        p_state->current_val   = p_cfg->min;
-        p_state->is_increasing = true;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/a1481cb2/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/sensorsim/sensorsim.h
----------------------------------------------------------------------
diff --git 
a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/sensorsim/sensorsim.h
 
b/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/sensorsim/sensorsim.h
deleted file mode 100644
index b018e30..0000000
--- 
a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/sensorsim/sensorsim.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved.
- *
- * The information contained herein is property of Nordic Semiconductor ASA.
- * Terms and conditions of usage are described in detail in NORDIC
- * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT.
- *
- * Licensees are granted free, non-transferable use of the information. NO
- * WARRANTY of ANY KIND is provided. This heading must NOT be removed from
- * the file.
- *
- */
-
-/** @file
- *
- * @defgroup ble_sdk_lib_sensorsim Sensor Data Simulator
- * @{
- * @ingroup ble_sdk_lib
- * @brief Functions for simulating sensor data.
- *
- * @details Currently only a triangular waveform simulator is implemented.
- */
-
-#ifndef SENSORSIM_H__
-#define SENSORSIM_H__
-
-#include <stdint.h>
-#include <stdbool.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**@brief Triangular waveform sensor simulator configuration. */
-typedef struct
-{
-    uint32_t min;                       /**< Minimum simulated value. */
-    uint32_t max;                       /**< Maximum simulated value. */
-    uint32_t incr;                      /**< Increment between each 
measurement. */
-    bool     start_at_max;              /**< TRUE is measurement is to start 
at the maximum value, FALSE if it is to start at the minimum. */
-} sensorsim_cfg_t;
-
-/**@brief Triangular waveform sensor simulator state. */
-typedef struct
-{
-    uint32_t current_val;               /**< Current sensor value. */
-    bool     is_increasing;             /**< TRUE if the simulator is in 
increasing state, FALSE otherwise. */
-} sensorsim_state_t;
-
-/**@brief Function for initializing a triangular waveform sensor simulator.
- *
- * @param[out]  p_state  Current state of simulator.
- * @param[in]   p_cfg    Simulator configuration.
- */
-void sensorsim_init(sensorsim_state_t *     p_state, 
-                        const sensorsim_cfg_t * p_cfg);
-
-/**@brief Function for generating a simulated sensor measurement using a 
triangular waveform generator.
- *
- * @param[in,out]  p_state  Current state of simulator.
- * @param[in]      p_cfg    Simulator configuration.
- *
- * @return         Simulator output.
- */
-uint32_t sensorsim_measure(sensorsim_state_t *     p_state,
-                               const sensorsim_cfg_t * p_cfg);
-
-/**@brief Function for incrementing a simulated sensor measurement value.
- *
- * @param[in,out]  p_state  Current state of simulator.
- * @param[in]      p_cfg    Simulator configuration.
- *
- * @return         Simulator output.
- */
-void sensorsim_increment(sensorsim_state_t *     p_state,
-                         const sensorsim_cfg_t * p_cfg);
-
-/**@brief Function for decrementing a simulated sensor measurement value.
- *
- * @param[in,out]  p_state  Current state of simulator.
- * @param[in]      p_cfg    Simulator configuration.
- *
- * @return         Simulator output.
- */
-void sensorsim_decrement(sensorsim_state_t *     p_state,
-                         const sensorsim_cfg_t * p_cfg);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // SENSORSIM_H__
-
-/** @} */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/a1481cb2/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/sha256/sha256.c
----------------------------------------------------------------------
diff --git 
a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/sha256/sha256.c
 
b/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/sha256/sha256.c
deleted file mode 100644
index 79b4484..0000000
--- 
a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/sha256/sha256.c
+++ /dev/null
@@ -1,183 +0,0 @@
-
-/* Copyright (c) 2015 Nordic Semiconductor. All Rights Reserved.
- *
- * The information contained herein is property of Nordic Semiconductor ASA.
- * Terms and conditions of usage are described in detail in NORDIC
- * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT.
- *
- * Licensees are granted free, non-transferable use of the information. NO
- * WARRANTY of ANY KIND is provided. This heading must NOT be removed from
- * the file.
- *
- */
-
-
-#include <stdlib.h>
-#include "sha256.h"
-#include "sdk_errors.h"
-#include "sdk_common.h"
-
-
-#define ROTLEFT(a,b) (((a) << (b)) | ((a) >> (32-(b))))
-#define ROTRIGHT(a,b) (((a) >> (b)) | ((a) << (32-(b))))
-
-#define CH(x,y,z) (((x) & (y)) ^ (~(x) & (z)))
-#define MAJ(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
-#define EP0(x) (ROTRIGHT(x,2) ^ ROTRIGHT(x,13) ^ ROTRIGHT(x,22))
-#define EP1(x) (ROTRIGHT(x,6) ^ ROTRIGHT(x,11) ^ ROTRIGHT(x,25))
-#define SIG0(x) (ROTRIGHT(x,7) ^ ROTRIGHT(x,18) ^ ((x) >> 3))
-#define SIG1(x) (ROTRIGHT(x,17) ^ ROTRIGHT(x,19) ^ ((x) >> 10))
-
-
-static const uint32_t k[64] = {
-    
0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5,0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5,
-    
0xd807aa98,0x12835b01,0x243185be,0x550c7dc3,0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174,
-    
0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc,0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da,
-    
0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7,0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967,
-    
0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13,0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85,
-    
0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3,0xd192e819,0xd6990624,0xf40e3585,0x106aa070,
-    
0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5,0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3,
-    
0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208,0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
-};
-
-
-/**@brief Function for calculating the hash of a 64-byte section of data.
- *
- * @param[in,out] ctx   Hash instance.
- * @param[in]     data  Aray with data to be hashed. Assumed to be 64 bytes 
long.
- */
-void sha256_transform(sha256_context_t *ctx, const uint8_t * data)
-{
-    uint32_t a, b, c, d, e, f, g, h, i, j, t1, t2, m[64];
-
-    for (i = 0, j = 0; i < 16; ++i, j += 4)
-        m[i] = (data[j] << 24) | (data[j + 1] << 16) | (data[j + 2] << 8) | 
(data[j + 3]);
-    for ( ; i < 64; ++i)
-        m[i] = SIG1(m[i - 2]) + m[i - 7] + SIG0(m[i - 15]) + m[i - 16];
-
-    a = ctx->state[0];
-    b = ctx->state[1];
-    c = ctx->state[2];
-    d = ctx->state[3];
-    e = ctx->state[4];
-    f = ctx->state[5];
-    g = ctx->state[6];
-    h = ctx->state[7];
-
-    for (i = 0; i < 64; ++i) {
-        t1 = h + EP1(e) + CH(e,f,g) + k[i] + m[i];
-        t2 = EP0(a) + MAJ(a,b,c);
-        h = g;
-        g = f;
-        f = e;
-        e = d + t1;
-        d = c;
-        c = b;
-        b = a;
-        a = t1 + t2;
-    }
-
-    ctx->state[0] += a;
-    ctx->state[1] += b;
-    ctx->state[2] += c;
-    ctx->state[3] += d;
-    ctx->state[4] += e;
-    ctx->state[5] += f;
-    ctx->state[6] += g;
-    ctx->state[7] += h;
-}
-
-
-ret_code_t sha256_init(sha256_context_t *ctx)
-{
-    VERIFY_PARAM_NOT_NULL(ctx);
-
-    ctx->datalen = 0;
-    ctx->bitlen = 0;
-    ctx->state[0] = 0x6a09e667;
-    ctx->state[1] = 0xbb67ae85;
-    ctx->state[2] = 0x3c6ef372;
-    ctx->state[3] = 0xa54ff53a;
-    ctx->state[4] = 0x510e527f;
-    ctx->state[5] = 0x9b05688c;
-    ctx->state[6] = 0x1f83d9ab;
-    ctx->state[7] = 0x5be0cd19;
-
-    return NRF_SUCCESS;
-}
-
-
-ret_code_t sha256_update(sha256_context_t *ctx, const uint8_t * data, size_t 
len)
-{
-    VERIFY_PARAM_NOT_NULL(ctx);
-    if (((len > 0) && (data == NULL)))
-    {
-        return NRF_ERROR_NULL;
-    }
-
-    uint32_t i;
-
-    for (i = 0; i < len; ++i) {
-        ctx->data[ctx->datalen] = data[i];
-        ctx->datalen++;
-        if (ctx->datalen == 64) {
-            sha256_transform(ctx, ctx->data);
-            ctx->bitlen += 512;
-            ctx->datalen = 0;
-        }
-    }
-
-    return NRF_SUCCESS;
-}
-
-
-ret_code_t sha256_final(sha256_context_t *ctx, uint8_t * hash)
-{
-    VERIFY_PARAM_NOT_NULL(ctx);
-    VERIFY_PARAM_NOT_NULL(hash);
-
-    uint32_t i;
-
-    i = ctx->datalen;
-
-    // Pad whatever data is left in the buffer.
-    if (ctx->datalen < 56) {
-        ctx->data[i++] = 0x80;
-        while (i < 56)
-            ctx->data[i++] = 0x00;
-    }
-    else {
-        ctx->data[i++] = 0x80;
-        while (i < 64)
-            ctx->data[i++] = 0x00;
-        sha256_transform(ctx, ctx->data);
-        memset(ctx->data, 0, 56);
-    }
-
-    // Append to the padding the total message's length in bits and transform.
-    ctx->bitlen += (uint64_t)ctx->datalen * 8;
-    ctx->data[63] = ctx->bitlen;
-    ctx->data[62] = ctx->bitlen >> 8;
-    ctx->data[61] = ctx->bitlen >> 16;
-    ctx->data[60] = ctx->bitlen >> 24;
-    ctx->data[59] = ctx->bitlen >> 32;
-    ctx->data[58] = ctx->bitlen >> 40;
-    ctx->data[57] = ctx->bitlen >> 48;
-    ctx->data[56] = ctx->bitlen >> 56;
-    sha256_transform(ctx, ctx->data);
-
-    // Since this implementation uses little endian uint8_t ordering and SHA 
uses big endian,
-    // reverse all the uint8_ts when copying the final state to the output 
hash.
-    for (i = 0; i < 4; ++i) {
-        hash[i]      = (ctx->state[0] >> (24 - i * 8)) & 0x000000ff;
-        hash[i + 4]  = (ctx->state[1] >> (24 - i * 8)) & 0x000000ff;
-        hash[i + 8]  = (ctx->state[2] >> (24 - i * 8)) & 0x000000ff;
-        hash[i + 12] = (ctx->state[3] >> (24 - i * 8)) & 0x000000ff;
-        hash[i + 16] = (ctx->state[4] >> (24 - i * 8)) & 0x000000ff;
-        hash[i + 20] = (ctx->state[5] >> (24 - i * 8)) & 0x000000ff;
-        hash[i + 24] = (ctx->state[6] >> (24 - i * 8)) & 0x000000ff;
-        hash[i + 28] = (ctx->state[7] >> (24 - i * 8)) & 0x000000ff;
-    }
-
-    return NRF_SUCCESS;
-}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/a1481cb2/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/sha256/sha256.h
----------------------------------------------------------------------
diff --git 
a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/sha256/sha256.h
 
b/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/sha256/sha256.h
deleted file mode 100644
index ae95fc0..0000000
--- 
a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/libraries/sha256/sha256.h
+++ /dev/null
@@ -1,99 +0,0 @@
-
-/* Copyright (c) 2015 Nordic Semiconductor. All Rights Reserved.
- *
- * The information contained herein is property of Nordic Semiconductor ASA.
- * Terms and conditions of usage are described in detail in NORDIC
- * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT.
- *
- * Licensees are granted free, non-transferable use of the information. NO
- * WARRANTY of ANY KIND is provided. This heading must NOT be removed from
- * the file.
- *
- */
-
-/** @file
- *
- * @defgroup sha256 SHA-256 hash library
- * @{
- * @ingroup app_common
- *
- * @brief  This module calculates SHA-256 (SHA-2, FIPS-180) hashes.
- *
- * @details To use this module, first call @ref sha256_init on a @ref 
sha256_context_t instance. Then call @ref
- *          sha256_update with the data to be hashed. This step can optionally 
be done with multiple
- *          calls to @ref sha256_update, each with a section of the data (in 
the correct order).
- *          After all data has been passed to @ref sha256_update, call @ref 
sha256_final to finalize
- *          and extract the hash value.
- *
- *          This code is adapted from code by Brad Conte, retrieved from
- *          https://github.com/B-Con/crypto-algorithms.
- *
- */
-
-#ifndef SHA256_H
-#define SHA256_H
-
-
-#include <stdint.h>
-#include "sdk_errors.h"
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**@brief Current state of a hash operation.
- */
-typedef struct {
-    uint8_t data[64];
-    uint32_t datalen;
-    uint64_t bitlen;
-    uint32_t state[8];
-} sha256_context_t;
-
-
-/**@brief Function for initializing a @ref sha256_context_t instance.
- *
- * @param[out] ctx  Context instance to be initialized.
- *
- * @retval NRF_SUCCESS     If the instance was successfully initialized.
- * @retval NRF_ERROR_NULL  If the parameter was NULL.
- */
-ret_code_t sha256_init(sha256_context_t *ctx);
-
-/**@brief Function for calculating the hash of an array of uint8_t data.
- *
- * @details This function can be called multiple times in sequence. This is 
equivalent to calling 
- *          the function once on a concatenation of the data from the 
different calls.
- *
- * @param[in,out] ctx   Hash instance.
- * @param[in]     data  Data to be hashed.
- * @param[in]     len   Length of the data to be hashed.
- *
- * @retval NRF_SUCCESS     If the data was successfully hashed.
- * @retval NRF_ERROR_NULL  If the ctx parameter was NULL or the data parameter 
was NULL,  while the len parameter was not zero.
- */
-ret_code_t sha256_update(sha256_context_t *ctx, const uint8_t * data, const 
size_t len);
-
-/**@brief Function for extracting the hash value from a hash instance.
- *
- * @details This function should be called after all data to be hashed has 
been passed to the hash
- *          instance (by one or more calls to @ref sha256_update).
- *
- * Do not call @ref sha256_update again after @ref sha256_final has been 
called.
- *
- * @param[in,out] ctx   Hash instance.
- * @param[out]    hash  Array to hold the extracted hash value (assumed to be 
32 bytes long).
- *
- * @retval NRF_SUCCESS     If the has value was successfully extracted.
- * @retval NRF_ERROR_NULL  If a parameter was NULL.
- */
-ret_code_t sha256_final(sha256_context_t *ctx, uint8_t * hash);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif   // SHA256_H
-
-/** @} */

Reply via email to