RNG
介绍
对于不同底层驱动的rng操作实现,统一封装成本文所述hal rng接口。 hal相关头文件位于目录:include/aos/hal hal相关实现位于具体的mcu目录下,如:platform/mcu/stm32f1xx/hal/
API列表
函数名称 | 功能描述 |
---|---|
hal_random_num_read | 获取随机数 |
API详情
相关结数据结构
random_dev_t
typedef struct {
uint8_t port; /* random device port */
void *priv; /* priv data */
} random_dev_t;
hal_random_num_read
获取随机数
函数原型
int32_t hal_random_num_read(random_dev_t random, void *buf, int32_t bytes);
参数
参数名称 | 出入参 | 参数描述 | 参数示例 |
---|---|---|---|
random_dev_t random | 入参 | RNG设备描述 | 用户自定义一个random_dev_t结构体 |
void *buf | 出参 | 返回的数据指针 | char buf[4]; 传入buf |
int32_t bytes | 入参 | 数据字节数 | 4 |
返回值
返回成功或失败, 返回0表示获取随机数成功,非0表示失败
调用示例
#define RNG1_PORT_NUM 1
/* define dev */
random_dev_t rng1;
int value = 0;
rng1.port = RNG1_PORT_NUM;
ret = hal_random_num_read(rng1, &value, sizeof(int));
使用
添加该组件
在相应的platform/mcu的mk内,添加对应hal文件的编译包含。
包含头文件
#include "aos/hal/rng.h"
使用示例
#include <aos/hal/rng.h>
#define RNG1_PORT_NUM 1
/* define dev */
random_dev_t rng1;
int application_start(int argc, char *argv[])
{
int ret = -1;
int value = 0;
rng1.port = RNG1_PORT_NUM;
ret = hal_random_num_read(rng1, &value, sizeof(int));
if (ret != 0) {
printf("rng read error !\n");
}
while(1) {
/* sleep 500ms */
aos_msleep(500);
};
}
注:port为逻辑端口号,其与物理端口号的对应关系见具体的对接实现
移植说明
新建hal_rng_xxmcu.c和hal_rng_xxmcu.h的文件,并将这两个文件放到platform/mcu/xxmcu/hal目录下。在hal_rng_xxmcu.c中实现所需要的hal函数,hal_rng_xxmcu.h中放置相关宏定义