From d1b04bca651f504372d330d618eb59588392e2a6 Mon Sep 17 00:00:00 2001 From: Martin Ling <martin-card10@earth.li> Date: Tue, 20 Aug 2019 20:38:22 +0000 Subject: [PATCH] feat(trng): Add TRNG read to Epicardium API --- epicardium/ble/ble.c | 3 +-- epicardium/epicardium.h | 20 ++++++++++++++++++++ epicardium/modules/hardware.c | 1 + epicardium/modules/meson.build | 1 + epicardium/modules/trng.c | 12 ++++++++++++ 5 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 epicardium/modules/trng.c diff --git a/epicardium/ble/ble.c b/epicardium/ble/ble.c index 52c4f1a9b..a667f9d1f 100644 --- a/epicardium/ble/ble.c +++ b/epicardium/ble/ble.c @@ -8,7 +8,6 @@ #include "ble_api.h" #include "hci_vs.h" #include "att_api.h" -#include "trng.h" #include "FreeRTOS.h" #include "timers.h" @@ -101,7 +100,7 @@ static void setAddress(void) bdAddr[0] = 0xCA; bdAddr[1] = 0x4D; bdAddr[2] = 0x10; - TRNG_Read(MXC_TRNG, bdAddr + 3, 3); + epic_trng_read(bdAddr + 3, 3); sprintf(buf, "%02x:%02x:%02x:%02x:%02x:%02x\n", bdAddr[0], diff --git a/epicardium/epicardium.h b/epicardium/epicardium.h index 88712b176..7ecf9b571 100644 --- a/epicardium/epicardium.h +++ b/epicardium/epicardium.h @@ -98,6 +98,9 @@ typedef _Bool bool; #define API_GPIO_GET_PIN_MODE 0xA1 #define API_GPIO_WRITE_PIN 0xA2 #define API_GPIO_READ_PIN 0xA3 + +#define API_TRNG_READ 0xB0 + /* clang-format on */ typedef uint32_t api_int_id_t; @@ -1209,4 +1212,21 @@ API(API_RTC_SCHEDULE_ALARM, int epic_rtc_schedule_alarm(uint32_t timestamp)); */ API_ISR(EPIC_INT_RTC_ALARM, epic_isr_rtc_alarm); +/** + * TRNG + * ==== + */ + +/** + * Read random bytes from the TRNG. + * + * :param uint8_t * dest: Destination buffer + * :param size: Number of bytes to read. + * :return: `0` on success or a negative value if an error occured. Possible + * errors: + * + * - ``-EFAULT``: Invalid destination address. + */ +API(API_TRNG_READ, int epic_trng_read(uint8_t *dest, size_t size)); + #endif /* _EPICARDIUM_H */ diff --git a/epicardium/modules/hardware.c b/epicardium/modules/hardware.c index 5453801eb..3905ceb81 100644 --- a/epicardium/modules/hardware.c +++ b/epicardium/modules/hardware.c @@ -18,6 +18,7 @@ #include "gpio.h" #include "i2c.h" #include "spi.h" +#include "trng.h" /* * Early init is called at the very beginning and is meant for modules which diff --git a/epicardium/modules/meson.build b/epicardium/modules/meson.build index 61e0cc634..31e7f5c07 100644 --- a/epicardium/modules/meson.build +++ b/epicardium/modules/meson.build @@ -13,5 +13,6 @@ module_sources = files( 'rtc.c', 'serial.c', 'stream.c', + 'trng.c', 'vibra.c', ) diff --git a/epicardium/modules/trng.c b/epicardium/modules/trng.c new file mode 100644 index 000000000..7faa2909c --- /dev/null +++ b/epicardium/modules/trng.c @@ -0,0 +1,12 @@ +#include "epicardium.h" +#include "trng.h" + +int epic_trng_read(uint8_t *dest, size_t size) +{ + if (dest == NULL) + return -EFAULT; + + TRNG_Read(MXC_TRNG, dest, size); + + return 0; +} -- GitLab