1*150812a8SEvalZero /* 2*150812a8SEvalZero * Copyright (c) 2016 - 2018, Nordic Semiconductor ASA 3*150812a8SEvalZero * All rights reserved. 4*150812a8SEvalZero * 5*150812a8SEvalZero * Redistribution and use in source and binary forms, with or without 6*150812a8SEvalZero * modification, are permitted provided that the following conditions are met: 7*150812a8SEvalZero * 8*150812a8SEvalZero * 1. Redistributions of source code must retain the above copyright notice, this 9*150812a8SEvalZero * list of conditions and the following disclaimer. 10*150812a8SEvalZero * 11*150812a8SEvalZero * 2. Redistributions in binary form must reproduce the above copyright 12*150812a8SEvalZero * notice, this list of conditions and the following disclaimer in the 13*150812a8SEvalZero * documentation and/or other materials provided with the distribution. 14*150812a8SEvalZero * 15*150812a8SEvalZero * 3. Neither the name of the copyright holder nor the names of its 16*150812a8SEvalZero * contributors may be used to endorse or promote products derived from this 17*150812a8SEvalZero * software without specific prior written permission. 18*150812a8SEvalZero * 19*150812a8SEvalZero * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20*150812a8SEvalZero * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21*150812a8SEvalZero * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22*150812a8SEvalZero * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 23*150812a8SEvalZero * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24*150812a8SEvalZero * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25*150812a8SEvalZero * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26*150812a8SEvalZero * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27*150812a8SEvalZero * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28*150812a8SEvalZero * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29*150812a8SEvalZero * POSSIBILITY OF SUCH DAMAGE. 30*150812a8SEvalZero */ 31*150812a8SEvalZero #ifndef NRFX_RNG_H__ 32*150812a8SEvalZero #define NRFX_RNG_H__ 33*150812a8SEvalZero 34*150812a8SEvalZero #include <nrfx.h> 35*150812a8SEvalZero #include <hal/nrf_rng.h> 36*150812a8SEvalZero 37*150812a8SEvalZero #ifdef __cplusplus 38*150812a8SEvalZero extern "C" { 39*150812a8SEvalZero #endif 40*150812a8SEvalZero 41*150812a8SEvalZero /** 42*150812a8SEvalZero * @defgroup nrfx_rng RNG driver 43*150812a8SEvalZero * @{ 44*150812a8SEvalZero * @ingroup nrf_rng 45*150812a8SEvalZero * @brief Random Number Generator (RNG) peripheral driver. 46*150812a8SEvalZero */ 47*150812a8SEvalZero 48*150812a8SEvalZero /** 49*150812a8SEvalZero * @brief Struct for RNG configuration. 50*150812a8SEvalZero */ 51*150812a8SEvalZero typedef struct 52*150812a8SEvalZero { 53*150812a8SEvalZero bool error_correction : 1; /**< Error correction flag. */ 54*150812a8SEvalZero uint8_t interrupt_priority; /**< interrupt priority */ 55*150812a8SEvalZero } nrfx_rng_config_t; 56*150812a8SEvalZero 57*150812a8SEvalZero /** 58*150812a8SEvalZero * @brief RNG default configuration. 59*150812a8SEvalZero * Basic usage: 60*150812a8SEvalZero * @code 61*150812a8SEvalZero * nrfx_rng_config_t config = NRFX_RNG_DEFAULT_CONFIG; 62*150812a8SEvalZero * if (nrfx_rng_init(&config, handler) 63*150812a8SEvalZero * { ... 64*150812a8SEvalZero * @endcode 65*150812a8SEvalZero */ 66*150812a8SEvalZero #define NRFX_RNG_DEFAULT_CONFIG \ 67*150812a8SEvalZero { \ 68*150812a8SEvalZero .error_correction = NRFX_RNG_CONFIG_ERROR_CORRECTION, \ 69*150812a8SEvalZero .interrupt_priority = NRFX_RNG_CONFIG_IRQ_PRIORITY, \ 70*150812a8SEvalZero } 71*150812a8SEvalZero 72*150812a8SEvalZero /** 73*150812a8SEvalZero * @brief RNG driver event handler type. 74*150812a8SEvalZero */ 75*150812a8SEvalZero typedef void (* nrfx_rng_evt_handler_t)(uint8_t rng_data); 76*150812a8SEvalZero 77*150812a8SEvalZero /** 78*150812a8SEvalZero * @brief Function for initializing the nrfx_rng module. 79*150812a8SEvalZero * 80*150812a8SEvalZero * @param[in] p_config Pointer to the structure with initial configuration. 81*150812a8SEvalZero * @param[in] handler Event handler provided by the user. Must not be NULL. 82*150812a8SEvalZero * 83*150812a8SEvalZero * @retval NRFX_SUCCESS Driver was successfully initialized. 84*150812a8SEvalZero * @retval NRFX_ERROR_ALREADY_INITIALIZED Driver was already initialized. 85*150812a8SEvalZero */ 86*150812a8SEvalZero nrfx_err_t nrfx_rng_init(nrfx_rng_config_t const * p_config, nrfx_rng_evt_handler_t handler); 87*150812a8SEvalZero 88*150812a8SEvalZero /** 89*150812a8SEvalZero * @brief Function for starting the random value generation. 90*150812a8SEvalZero * 91*150812a8SEvalZero * Function enables interrupts in perihperal and start them. 92*150812a8SEvalZero */ 93*150812a8SEvalZero void nrfx_rng_start(void); 94*150812a8SEvalZero 95*150812a8SEvalZero /** 96*150812a8SEvalZero * @brief Function for stoping the random value generation. 97*150812a8SEvalZero * 98*150812a8SEvalZero * Function disables interrupts in perihperal and stop generation of new random values. 99*150812a8SEvalZero */ 100*150812a8SEvalZero void nrfx_rng_stop(void); 101*150812a8SEvalZero 102*150812a8SEvalZero /** 103*150812a8SEvalZero * @brief Function for uninitializing the nrfx_rng module. 104*150812a8SEvalZero */ 105*150812a8SEvalZero void nrfx_rng_uninit(void); 106*150812a8SEvalZero 107*150812a8SEvalZero 108*150812a8SEvalZero void nrfx_rng_irq_handler(void); 109*150812a8SEvalZero 110*150812a8SEvalZero 111*150812a8SEvalZero /** @} */ 112*150812a8SEvalZero 113*150812a8SEvalZero #ifdef __cplusplus 114*150812a8SEvalZero } 115*150812a8SEvalZero #endif 116*150812a8SEvalZero 117*150812a8SEvalZero #endif // NRFX_RNG_H__ 118