Paparazzi UAS
v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
Loading...
Searching...
No Matches
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
}
rng_deinit
void rng_deinit(void)
Definition
rng_arch.c:82
rng_get
bool rng_get(uint32_t *rand_nr)
Definition
rng_arch.c:89
rng_wait_and_get
uint32_t rng_wait_and_get(void)
Definition
rng_arch.c:104
rng_init
void rng_init(void)
Definition
rng_arch.c:77
foo
uint16_t foo
Definition
main_demo5.c:58
rng.h
arch independent Random Number Generator API
last
uint32_t last
Definition
rng_arch.c:31
uint32_t
unsigned int uint32_t
Typedef defining 32 bit unsigned int type.
Definition
vl53l1_types.h:78
sw
airborne
arch
stm32
mcu_periph
rng_arch.c
Generated on Wed Jan 15 2025 22:21:32 for Paparazzi UAS by
1.9.8