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
29
#include <fcntl.h>
30
#include <unistd.h>
31
#include <stdlib.h>
32
#include <stdio.h>
33
34
void
rng_init
(
void
) {}
35
36
void
rng_deinit
(
void
) {}
37
38
// Return true only if we got a new number
39
// that is different from the previous one
40
bool
rng_get
(
uint32_t
*rand_nr)
41
{
42
int
fd
= open(
"/dev/urandom"
, O_RDONLY);
43
if
(
fd
== -1) {
44
printf(
"Cannot open /dev/urandom\n"
);
45
return
false
;
46
}
47
48
uint8_t
len =
sizeof
(
uint32_t
);
49
uint8_t
res = read(
fd
, rand_nr, len);
50
if
(res != len) {
51
printf(
"Error on reading, expected %u bytes, got %u bytes\n"
,
52
len, res);
53
return
false
;
54
}
55
close(
fd
);
56
return
true
;
57
}
58
59
// Wait until we get a new number that is different
60
// from the previous one. We can wait forever here if
61
// the clocks are not setup properly.
62
uint32_t
rng_wait_and_get
(
void
) {
63
uint32_t
tmp = 0;
64
while
(!
rng_get
(&tmp)) {};
65
return
tmp;
66
}
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
uint8_t
unsigned char uint8_t
Definition:
types.h:14
rng_get
bool rng_get(uint32_t *rand_nr)
Definition:
rng_arch.c:89
fd
int fd
Definition:
serial.c:26
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
sim
mcu_periph
rng_arch.c
Generated on Tue Feb 1 2022 13:51:12 for Paparazzi UAS by
1.8.17