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