added random number generator driver and stuff
This commit is contained in:
@@ -12,7 +12,7 @@
|
||||
#include "gpio.h"
|
||||
#include "i2c.h"
|
||||
#include "pwm.h"
|
||||
//#include "rtc.h"
|
||||
#include "rng.h"
|
||||
#include "spi.h"
|
||||
#include "uart.h"
|
||||
|
||||
@@ -34,8 +34,10 @@ int drv_open(const struct driver *driver)
|
||||
case DRIVER_TYPE_PWM:
|
||||
ret = pwm_open((const struct pwm *)(driver->device_driver));
|
||||
break;
|
||||
case DRIVER_TYPE_RNG:
|
||||
ret = rng_open((const struct rng *)(driver->device_driver));
|
||||
break;
|
||||
case DRIVER_TYPE_RTC:
|
||||
// ret = rtc_open((const struct rtc *)(driver->device_driver));
|
||||
break;
|
||||
case DRIVER_TYPE_SPI:
|
||||
ret = spi_open((const struct spi *)(driver->device_driver));
|
||||
@@ -65,8 +67,10 @@ int drv_close(const struct driver *driver)
|
||||
case DRIVER_TYPE_PWM:
|
||||
ret = pwm_close((const struct pwm *)(driver->device_driver));
|
||||
break;
|
||||
case DRIVER_TYPE_RNG:
|
||||
ret = rng_close((const struct rng *)(driver->device_driver));
|
||||
break;
|
||||
case DRIVER_TYPE_RTC:
|
||||
// ret = rtc_close((const struct rtc *)(driver->device_driver));
|
||||
break;
|
||||
case DRIVER_TYPE_SPI:
|
||||
ret = spi_close((const struct spi *)(driver->device_driver));
|
||||
@@ -96,7 +100,9 @@ int drv_read(const struct driver *driver, char *buffer, int len)
|
||||
case DRIVER_TYPE_I2C:
|
||||
break;
|
||||
case DRIVER_TYPE_PWM:
|
||||
ret = -1;
|
||||
break;
|
||||
case DRIVER_TYPE_RNG:
|
||||
ret = rng_read((const struct rng *)(driver->device_driver));
|
||||
break;
|
||||
case DRIVER_TYPE_RTC:
|
||||
break;
|
||||
@@ -129,7 +135,8 @@ int drv_write(const struct driver *driver, const char *buffer, int len)
|
||||
case DRIVER_TYPE_I2C:
|
||||
break;
|
||||
case DRIVER_TYPE_PWM:
|
||||
ret = -1;
|
||||
break;
|
||||
case DRIVER_TYPE_RNG:
|
||||
break;
|
||||
case DRIVER_TYPE_RTC:
|
||||
break;
|
||||
@@ -166,6 +173,8 @@ int drv_ioctl(const struct driver *driver, unsigned int cmd, const void *data)
|
||||
return pwm_get_pulse_width_ns((const struct pwm *)(driver->device_driver));
|
||||
}
|
||||
break;
|
||||
case DRIVER_TYPE_RNG:
|
||||
break;
|
||||
case DRIVER_TYPE_RTC:
|
||||
break;
|
||||
case DRIVER_TYPE_SPI:
|
||||
|
30
source/firmware/kernel/driver/include/rng.h
Normal file
30
source/firmware/kernel/driver/include/rng.h
Normal file
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* rng.h
|
||||
*
|
||||
* Created on: Aug 30, 2016
|
||||
* Author: tkl
|
||||
*/
|
||||
|
||||
#ifndef SOURCE_FIRMWARE_KERNEL_DRIVER_INCLUDE_RNG_H_
|
||||
#define SOURCE_FIRMWARE_KERNEL_DRIVER_INCLUDE_RNG_H_
|
||||
|
||||
typedef int (*rng_fp_open_t)(const void*);
|
||||
typedef int (*rng_fp_close_t)(const void*);
|
||||
typedef unsigned int (*rng_fp_read_t)(const void*);
|
||||
|
||||
struct rng_fp {
|
||||
const rng_fp_open_t open;
|
||||
const rng_fp_close_t close;
|
||||
const rng_fp_read_t read;
|
||||
};
|
||||
|
||||
struct rng {
|
||||
const void *arch_dep_device;
|
||||
const struct rng_fp *fp;
|
||||
};
|
||||
|
||||
int rng_open(const struct rng *device);
|
||||
int rng_close(const struct rng *device);
|
||||
unsigned int rng_read(const struct rng *device);
|
||||
|
||||
#endif /* SOURCE_FIRMWARE_KERNEL_DRIVER_INCLUDE_RNG_H_ */
|
36
source/firmware/kernel/driver/rng.c
Normal file
36
source/firmware/kernel/driver/rng.c
Normal file
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* rng.c
|
||||
*
|
||||
* Created on: Aug 30, 2016
|
||||
* Author: tkl
|
||||
*/
|
||||
|
||||
#include <stddef.h>
|
||||
#include "rng.h"
|
||||
|
||||
int rng_open(const struct rng *device)
|
||||
{
|
||||
if(device == NULL)
|
||||
return -1;
|
||||
|
||||
rng_fp_open_t open = device->fp->open;
|
||||
return open(device->arch_dep_device);
|
||||
}
|
||||
|
||||
int rng_close(const struct rng *device)
|
||||
{
|
||||
if(device == NULL)
|
||||
return -1;
|
||||
|
||||
rng_fp_close_t close = device->fp->close;
|
||||
return close(device->arch_dep_device);
|
||||
}
|
||||
|
||||
unsigned int rng_read(const struct rng *device)
|
||||
{
|
||||
if(device == NULL)
|
||||
return 0;
|
||||
|
||||
rng_fp_read_t read = device->fp->read;
|
||||
return read(device->arch_dep_device);
|
||||
}
|
@@ -17,6 +17,7 @@ enum driver_type {
|
||||
DRIVER_TYPE_GPIO,
|
||||
DRIVER_TYPE_I2C,
|
||||
DRIVER_TYPE_PWM,
|
||||
DRIVER_TYPE_RNG,
|
||||
DRIVER_TYPE_RTC,
|
||||
DRIVER_TYPE_SPI,
|
||||
DRIVER_TYPE_UART
|
||||
|
Reference in New Issue
Block a user