summaryrefslogtreecommitdiff
path: root/src/libs/mynewt-nimble/nimble/drivers/native
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/mynewt-nimble/nimble/drivers/native')
-rw-r--r--src/libs/mynewt-nimble/nimble/drivers/native/src/ble_hw.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/src/libs/mynewt-nimble/nimble/drivers/native/src/ble_hw.c b/src/libs/mynewt-nimble/nimble/drivers/native/src/ble_hw.c
index 5eb1eb95..8aa29d32 100644
--- a/src/libs/mynewt-nimble/nimble/drivers/native/src/ble_hw.c
+++ b/src/libs/mynewt-nimble/nimble/drivers/native/src/ble_hw.c
@@ -20,6 +20,8 @@
#include <stdint.h>
#include <assert.h>
#include <string.h>
+#include <stdlib.h>
+#include <stdbool.h>
#include "syscfg/syscfg.h"
#include "os/os.h"
#include "nimble/ble.h"
@@ -32,6 +34,9 @@
/* We use this to keep track of which entries are set to valid addresses */
static uint8_t g_ble_hw_whitelist_mask;
+static ble_rng_isr_cb_t rng_cb;
+static bool rng_started;
+
/* Returns public device address or -1 if not present */
int
ble_hw_get_public_addr(ble_addr_t *addr)
@@ -143,7 +148,8 @@ ble_hw_encrypt_block(struct ble_encryption_block *ecb)
int
ble_hw_rng_init(ble_rng_isr_cb_t cb, int bias)
{
- return -1;
+ rng_cb = cb;
+ return 0;
}
/**
@@ -154,7 +160,15 @@ ble_hw_rng_init(ble_rng_isr_cb_t cb, int bias)
int
ble_hw_rng_start(void)
{
- return -1;
+ rng_started = true;
+
+ if (rng_cb) {
+ while (rng_started) {
+ rng_cb(rand());
+ }
+ }
+
+ return 0;
}
/**
@@ -165,7 +179,8 @@ ble_hw_rng_start(void)
int
ble_hw_rng_stop(void)
{
- return -1;
+ rng_started = false;
+ return 0;
}
/**
@@ -176,7 +191,7 @@ ble_hw_rng_stop(void)
uint8_t
ble_hw_rng_read(void)
{
- return 0;
+ return rand();
}
#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_PRIVACY)