You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by cc...@apache.org on 2016/11/23 18:51:48 UTC
[25/70] [abbrv] [partial] incubator-mynewt-core git commit: Remove
non-Apache-compatible Nordic SDK files.
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
-
-/** @} */