#pragma once #include /** * @brief Sets the seed for the PRNG. * * @param s The specific seed value or zero. If zero is passed, it will call * rand_reseed(). */ void sprand(uint64_t s); /** * @brief Generates a pseudo-random 64-bit number. * * Saves PRNG state to flash periodically. * * Uses a simple Linear Congruential Generator (LCG) to produce * a sequence of pseudo-random numbers. * * @return A pseudo-random 64-bit unsigned integer. */ uint64_t prand(); /** * @brief Generates a random number within a specified range. * * Produces a random number in the inclusive range [min, max]. * Ensures uniform distribution by applying a modulo operation. * * @param min The lower bound of the range (inclusive). * @param max The upper bound of the range (inclusive). * @return A random number between min and max. */ uint64_t prand_range(uint64_t min, uint64_t max); /** * @brief Saves the current PRNG seed to flash memory. * * This function erases the designated flash page and writes the current seed * to ensure the PRNG state persists across resets. */ void rand_save_to_flash(); /** * @brief Re-seeds the PRNG seed state from either flash or BUILD_SEED. * * This function will not write to flash. */ void rand_reseed();