mirror of https://github.com/ArduPilot/ardupilot
AP_HAL_ChibiOS: allow HW without HW_RNG to SW-based create psuedo-random
This commit is contained in:
parent
f885cb2eb6
commit
d841d250d8
|
@ -705,9 +705,7 @@ bool Util::get_random_vals(uint8_t* data, size_t size)
|
|||
{
|
||||
#if HAL_USE_HW_RNG && defined(RNG)
|
||||
size_t true_random_vals = stm32_rand_generate_nonblocking(data, size);
|
||||
if (true_random_vals == size) {
|
||||
return true;
|
||||
} else {
|
||||
if (true_random_vals != size) {
|
||||
if (!(true_random_vals % 2)) {
|
||||
data[true_random_vals] = (uint8_t)(get_random16() & 0xFF);
|
||||
true_random_vals++;
|
||||
|
@ -718,10 +716,18 @@ bool Util::get_random_vals(uint8_t* data, size_t size)
|
|||
true_random_vals+=sizeof(uint16_t);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
#else
|
||||
return false;
|
||||
size_t true_random_vals = 0;
|
||||
while(true_random_vals < size) {
|
||||
uint16_t val = get_random16();
|
||||
memcpy(&data[true_random_vals], &val, sizeof(uint16_t));
|
||||
true_random_vals+=sizeof(uint16_t);
|
||||
}
|
||||
if (size % 2) {
|
||||
data[size-1] = get_random16() & 0xFF;
|
||||
}
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -177,6 +177,9 @@ bool stm32_rand_generate_blocking(unsigned char* output, unsigned int sz, uint32
|
|||
unsigned int stm32_rand_generate_nonblocking(unsigned char* output, unsigned int sz);
|
||||
#endif
|
||||
|
||||
// To be defined in HAL code
|
||||
extern uint32_t chibios_rand_generate(void);
|
||||
|
||||
void stm32_flash_protect_flash(bool bootloader, bool protect);
|
||||
void stm32_flash_unprotect_flash(void);
|
||||
|
||||
|
|
|
@ -304,6 +304,13 @@ void __entry_hook()
|
|||
}
|
||||
#endif
|
||||
|
||||
uint32_t chibios_rand_generate()
|
||||
{
|
||||
uint32_t val;
|
||||
hal.util->get_random_vals((uint8_t*)&val, sizeof(val));
|
||||
return val;
|
||||
}
|
||||
|
||||
}
|
||||
namespace AP_HAL {
|
||||
|
||||
|
|
Loading…
Reference in New Issue