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
29#include <fcntl.h>
30#include <unistd.h>
31#include <stdlib.h>
32#include <stdio.h>
33
34void rng_init(void) {}
35
36void rng_deinit(void) {}
37
38// Return true only if we got a new number
39// that is different from the previous one
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.
63 uint32_t tmp = 0;
64 while (!rng_get(&tmp)) {};
65 return tmp;
66}
void rng_deinit(void)
Definition rng_arch.c:82
bool rng_get(uint32_t *rand_nr)
Definition rng_arch.c:89
uint32_t rng_wait_and_get(void)
Definition rng_arch.c:104
void rng_init(void)
Definition rng_arch.c:77
uint16_t foo
Definition main_demo5.c:58
arch independent Random Number Generator API
int fd
Definition serial.c:26
unsigned int uint32_t
Typedef defining 32 bit unsigned int type.
unsigned char uint8_t
Typedef defining 8 bit unsigned char type.