diff --git a/src/epics/util/lib/GaussianNoise.pm b/src/epics/util/lib/GaussianNoiseGenerator.pm similarity index 76% rename from src/epics/util/lib/GaussianNoise.pm rename to src/epics/util/lib/GaussianNoiseGenerator.pm index 60635fdf671337682645a03572c55120cf4195e9..4a03fde48deff674776691ef2071923bda571ff0 100644 --- a/src/epics/util/lib/GaussianNoise.pm +++ b/src/epics/util/lib/GaussianNoiseGenerator.pm @@ -1,11 +1,11 @@ -package CDS::GaussianNoise; +package CDS::GaussianNoiseGenerator; use Exporter; @ISA = ('Exporter'); -#// \page GaussianNoise Noise.pm -#// Documentation for GaussianNoise.pm -#// This GaussianNoise part generates gaussian random noise around -#// the given mean with the given standard deviation. +#// \page GaussianNoiseGenerator Noise.pm +#// Documentation for GaussianNoiseGenerator.pm +#// This GaussianNoiseGenerator part generates gaussian +#// random noise with 0 mean and 1 standard deviation. #// #// #// @@ -17,7 +17,7 @@ $init_code_printed = 0; 1; sub partType { - return GaussianNoise; + return GaussianNoiseGenerator; } # Print Epics communication structure into a header file @@ -46,7 +46,7 @@ static inline double gaussianRandomDouble( void ) { uint64_t gaussRandomUint; ligo_get_random_bytes(&gaussRandomUint, sizeof(gaussRandomUint)); - return qnorm5( ((double)gaussRandomUint/0xFFFFFFFFFFFFFFFF), 0 /*mean*/, 1/*standard deviation*/, 1, 0); + return qnorm5_s( ((double)gaussRandomUint/0xFFFFFFFFFFFFFFFF), 1, 0); } END @@ -87,6 +87,6 @@ sub frontEndInitCode { # Returns calculated code string sub frontEndCode { my ($i) = @_; - my $calcExp = "// GaussiaNoise\n"; - $calcExp .= "\L$::xpartName[$i] = gaussianRandomDouble(" . . ", " . . ");\n"; + my $calcExp = "// GaussiaNoiseGenerator\n"; + $calcExp .= "\L$::xpartName[$i] " . "= gaussianRandomDouble();\n"; } diff --git a/src/include/util/random_bytes.h b/src/include/util/random_bytes.h new file mode 100644 index 0000000000000000000000000000000000000000..c082da1b71f71532578c4bd2e5ee50fc28d82ea8 --- /dev/null +++ b/src/include/util/random_bytes.h @@ -0,0 +1,33 @@ +#ifndef LIGO_RAMDOM_BYTES_H +#define LIGO_RAMDOM_BYTES_H + +#ifdef __KERNEL__ + +#include <linux/random.h> + +#define ligo_get_random_bytes get_random_bytes + +static inline void ligo_get_random_bytes(void *buf, int nbytes) +{ + return get_random_bytes(buf, nbytes); +} + +#else + +#include <sys/random.h> + +static inline void ligo_get_random_bytes(void *buf, int nbytes) +{ + getrandom(buf, nbytes, GRND_NONBLOCK); + //This can fail if the urandom source has not yet been initialized + return; +} + + +#endif + + + + + +#endif //LIGO_RAMDOM_BYTES_H