/***************************************************************************//**
 @defgroup lip_rand Генератор псевдослучайных чисел
 @ingroup  lip_misc
 @brief Данный модуль используется для генерации псевдослучайных чисел
    в реализациях различных протоколов.

   Модуль содержит функции для генерации псевдослучайных чисел.
   В настоящий момент используется линейный конгруэнтный метод.
   Инициализация генератора осуществляется на основе mac-адреса и
   текущего времени (полученного с помощью clock_time()).
*******************************************************************************/

/***************************************************************************//**
 @addtogroup lip_rand
 @{
 @file lip_rand.h
 @brief Файл содержит определения функций и макросов для модуля @ref lip_rand,
   которые могут быть использованы в приложении.
 @author Borisov Alexey <borisov@lcard.ru>
*******************************************************************************/

#ifndef LIP_RAND_H_
#define LIP_RAND_H_

#include "lip/lip_defs.h"

/** максимальное значение случаейного числа при вызове lip_rand_next() */
#define LIP_RAND_MAX          0xFFFF

/** целый тип для представления полученных случайных чисел */
typedef uint32_t t_lip_rand;

/** Инициализация генератора случайных чисел. Осуществляется при установке
 *  mac-адреса */
void lip_rand_init(void);

/** Получение случайного числа в диапазоне от 0 до #LIP_RAND_MAX */
t_lip_rand lip_rand(void);

t_lip_rand lip_rand_next(t_lip_rand val);

/** Получение случайного числа в диапазоне от 0 до max.
    По-умолчанию max может быть от 0 до 65535. Для использования больших
    значений необходимо определить #LIP_CFG_RAND_UINT32_RANGE_SUPPORT равное 1 в файле
    конфигурации */
t_lip_rand lip_rand_range(t_lip_rand max);


#endif /* LIP_RAND_H_ */

/** @}*/
