Skip to content

Commit 968d38f

Browse files
committed
quectel: Add random number generator.
1 parent 25ee3d0 commit 968d38f

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

ports/quectel/mphalport.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ static int mthread_sleep_flag = 0;
5151
#define IS_MTHREAD_IN_SLEEP() (1 == mthread_sleep_flag)
5252
#define MP_HAL_PORT_CHECK_OPEN (mp_hal_cdcPort_State == 1)
5353

54+
#if !defined(MICROPY_PY_RANDOM_SEED_INIT_FUNC)
55+
#define MICROPY_PY_RANDOM_SEED_INIT_FUNC Helios_RTC_GetSecond()
56+
#endif
57+
5458
static uint8_t stdin_ringbuf_array[256];
5559
ringbuf_t stdin_ringbuf = {stdin_ringbuf_array, sizeof(stdin_ringbuf_array), 0, 0};
5660

@@ -209,6 +213,26 @@ uint64_t mp_hal_time_ns(void) {
209213
return 0;
210214
}
211215

216+
static void mp_hal_random_init(void) {
217+
static bool seeded = false;
218+
if (!seeded) {
219+
seeded = true;
220+
srand(MICROPY_PY_RANDOM_SEED_INIT_FUNC);
221+
}
222+
}
223+
224+
void mp_hal_get_random(size_t n, uint8_t *buf) {
225+
mp_hal_random_init();
226+
uint32_t r = 0;
227+
for (size_t i = 0; i < n; i++) {
228+
if ((i & 3) == 0) {
229+
r = rand(); // returns 32-bit random number
230+
}
231+
buf[i] = r;
232+
r >>= 8;
233+
}
234+
}
235+
212236
void mp_hal_delay_ms(mp_uint_t ms) {
213237
mp_uint_t dt = 0;
214238
mp_uint_t t0 = 0, t1 = 0;

ports/quectel/mphalport.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,8 @@ void mp_hal_port_open(uint8_t state);
6262
void mp_hal_set_interrupt_char(int c);
6363

6464
uint64_t mp_hal_time_ns(void);
65-
#endif
65+
66+
static void mp_hal_random_init(void);
67+
void mp_hal_get_random(size_t n, uint8_t *buf);
68+
69+
#endif

0 commit comments

Comments
 (0)