/* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico.h" #include "hardware/structs/rosc.h" static uint8_t pico_lwip_random_byte(int cycles) { static uint8_t byte; assert(cycles >= 8); assert(rosc_hw->status & ROSC_STATUS_ENABLED_BITS); for(int i=0;irandombit) ^ (byte & 0x80u ? 0x35u : 0); // delay a little because the random bit is a little slow busy_wait_at_least_cycles(30); } return byte; } unsigned int pico_lwip_rand(void) { uint32_t value = 0; for (int i = 0; i < 4; i++) { value = (value << 8u) | pico_lwip_random_byte(32); } return value; }