1 /* 2 * Copyright (c) 2016 - 2020, 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 /** @brief Struct for RNG configuration. */ 49 typedef struct 50 { 51 bool error_correction : 1; /**< Error correction flag. */ 52 uint8_t interrupt_priority; /**< Interrupt priority. */ 53 } nrfx_rng_config_t; 54 55 /** 56 * @brief RNG default configuration. 57 * Basic usage: 58 * @code 59 * nrfx_rng_config_t config = NRFX_RNG_DEFAULT_CONFIG; 60 * if (nrfx_rng_init(&config, handler) 61 * { ... 62 * @endcode 63 * 64 * This configuration sets up randon number generator with the following options: 65 * - error correction enabled 66 */ 67 #define NRFX_RNG_DEFAULT_CONFIG \ 68 { \ 69 .error_correction = true, \ 70 .interrupt_priority = NRFX_RNG_DEFAULT_CONFIG_IRQ_PRIORITY, \ 71 } 72 73 /** @brief RNG driver event handler type. */ 74 typedef void (* nrfx_rng_evt_handler_t)(uint8_t rng_data); 75 76 /** 77 * @brief Function for initializing the nrfx_rng module. 78 * 79 * @param[in] p_config Pointer to the structure with the initial configuration. 80 * @param[in] handler Event handler provided by the user. Must not be NULL. 81 * 82 * @retval NRFX_SUCCESS Driver was successfully initialized. 83 * @retval NRFX_ERROR_ALREADY_INITIALIZED Driver was already initialized. 84 */ 85 nrfx_err_t nrfx_rng_init(nrfx_rng_config_t const * p_config, nrfx_rng_evt_handler_t handler); 86 87 /** 88 * @brief Function for starting the generation of random values. 89 * 90 * New data should be handled by handler passed to the @ref nrfx_rng_init() function. 91 */ 92 void nrfx_rng_start(void); 93 94 /** 95 * @brief Function for stopping the generation of random values. 96 * 97 * Function disables interrupts in peripheral and stops the generation of new random values. 98 */ 99 void nrfx_rng_stop(void); 100 101 /** @brief Function for uninitializing the nrfx_rng module. */ 102 void nrfx_rng_uninit(void); 103 104 /** @} */ 105 106 107 void nrfx_rng_irq_handler(void); 108 109 110 #ifdef __cplusplus 111 } 112 #endif 113 114 #endif // NRFX_RNG_H__ 115