对于不同底层驱动的rng操作实现,统一封装成本文所述hal rng接口。 hal相关头文件位于目录:include/aos/hal。hal相关实现位于具体的mcu目录下,如:platform/mcu/stm32f1xx/hal/。

API列表

hal_random_num_read 获取随机数

API详情

请参考include/aos/hal/rng.h

相关结数据结构

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中放置相关宏定义