diff options
author | Kartik Agaram <vc@akkartik.com> | 2019-09-14 01:42:29 -0700 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2019-09-14 01:45:55 -0700 |
commit | 46bb1d3157f9ad575c83a4bfa1e32b0d21bc8546 (patch) | |
tree | 28918f653d7cf970d33d5592047ef663289aca40 /kernel.soso/random.c | |
parent | ded2b24ce28f4a9df75ce40117f0f06f09574369 (diff) | |
download | mu-46bb1d3157f9ad575c83a4bfa1e32b0d21bc8546.tar.gz |
5650 - support a second OS: soso
https://github.com/ozkl/soso + Much smaller than Linux; builds instantly + Supports graphics - No network support - Doesn't work on a cloud server (yet?)
Diffstat (limited to 'kernel.soso/random.c')
-rw-r--r-- | kernel.soso/random.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/kernel.soso/random.c b/kernel.soso/random.c new file mode 100644 index 00000000..0c231793 --- /dev/null +++ b/kernel.soso/random.c @@ -0,0 +1,62 @@ +#include "random.h" +#include "devfs.h" +#include "device.h" +#include "common.h" +#include "process.h" +#include "sleep.h" + +static BOOL random_open(File *file, uint32 flags); +static int32 random_read(File *file, uint32 size, uint8 *buffer); + +void initializeRandom() +{ + Device device; + memset((uint8*)&device, 0, sizeof(Device)); + strcpy(device.name, "random"); + device.deviceType = FT_CharacterDevice; + device.open = random_open; + device.read = random_read; + + registerDevice(&device); +} + +static BOOL random_open(File *file, uint32 flags) +{ + return TRUE; +} + +static int32 random_read(File *file, uint32 size, uint8 *buffer) +{ + if (size == 0) + { + return 0; + } + + //Screen_PrintF("random_read: calling sleep\n"); + + //sleep(10000); + + //Screen_PrintF("random_read: returned from sleep\n"); + + uint32 number = rand(); + + if (size == 1) + { + *buffer = (uint8)number; + return 1; + } + else if (size == 2 || size == 3) + { + *((uint16*)buffer) = (uint16)number; + return 2; + } + else if (size >= 4) + { + //Screen_PrintF("random_read: buffer is %x, writing %x to buffer\n", buffer, number); + + *((uint32*)buffer) = number; + return 4; + } + + return 0; +} |