Paparazzi UAS
v5.18.0_stable
Paparazzi is a free software Unmanned Aircraft System.
rng_arch.c
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2017 Michal Podhradsky <mpodhradsky@galois.com>
3
*
4
* This file is part of Paparazzi.
5
*
6
* Paparazzi is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; either version 2, or (at your option)
9
* any later version.
10
*
11
* Paparazzi is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
15
*
16
* You should have received a copy of the GNU General Public License
17
* along with Paparazzi; see the file COPYING. If not, write to
18
* the Free Software Foundation, 59 Temple Place - Suite 330,
19
* Boston, MA 02111-1307, USA.
20
*
21
*/
22
27
#include "
mcu_periph/rng.h
"
28
#include <libopencm3/stm32/rcc.h>
29
#include <libopencm3/stm32/rng.h>
30
31
uint32_t
last
;
32
33
void
rng_init
(
void
) {
34
rcc_periph_clock_enable(RCC_RNG);
35
rng_enable();
36
// dont forget to throw away the first generated number
37
last
=
rng_wait_and_get
();
38
}
39
40
void
rng_deinit
(
void
) {
41
rng_disable();
42
rcc_periph_clock_disable(RCC_RNG);
43
}
44
45
// Return true only if we got a new number
46
// that is different from the previous one
47
bool
rng_get
(
uint32_t
*rand_nr) {
48
uint32_t
tmp = 0;
49
if
(rng_get_random(&tmp) && (tmp !=
last
)) {
50
last
= tmp;
51
*rand_nr = tmp;
52
return
true
;
53
}
else
{
54
return
false
;
55
}
56
}
57
58
// Wait until we get a new number that is different
59
// from the previous one. We can wait forever here if
60
// the clocks are not setup properly.
61
uint32_t
rng_wait_and_get
(
void
) {
62
uint32_t
tmp =
last
;
63
while
(tmp ==
last
) {
64
tmp = rng_get_random_blocking();
65
}
66
last
= tmp;
67
return
tmp;
68
}
last
uint32_t last
Definition:
rng_arch.c:31
uint32_t
unsigned long uint32_t
Definition:
types.h:18
rng_init
void rng_init(void)
Definition:
rng_arch.c:77
rng.h
arch independent Random Number Generator API
rng_get
bool rng_get(uint32_t *rand_nr)
Definition:
rng_arch.c:89
rng_deinit
void rng_deinit(void)
Definition:
rng_arch.c:82
rng_wait_and_get
uint32_t rng_wait_and_get(void)
Definition:
rng_arch.c:104
sw
airborne
arch
stm32
mcu_periph
rng_arch.c
Generated on Tue Feb 1 2022 13:51:12 for Paparazzi UAS by
1.8.17