diff options
Diffstat (limited to 'arm9/source/types/wakequeue.c')
-rw-r--r-- | arm9/source/types/wakequeue.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/arm9/source/types/wakequeue.c b/arm9/source/types/wakequeue.c new file mode 100644 index 0000000..8876123 --- /dev/null +++ b/arm9/source/types/wakequeue.c @@ -0,0 +1,30 @@ +#include "wakequeue.h" + +/* +TODO: This is unused at the moment. It will eventually be used for keeping +track of which device last woke a Bedrock instance, to optimally choose +which device to use when waking from sleep. +*/ + +// Reset a wake queue. +void wakequeue_reset(WakeQueue *queue) { + // Populate the queue with fifteen slot numbers. Slot zero is excluded, + // as it always comes last in the wake order. + for (int i=0; i<15; i++) queue->mem[i] = i+1; +} + +// TODO: Not quite done yet. +bool wakequeue_wake(WakeQueue *queue, u16 device_list) { + // Test each entry in the queue against the device list. + for (int i=0; i<15; i++) { + u8 slot_number = queue->mem[i]; + if (TEST(device_list, 0x8000 >> slot_number)) { + // Move the matched entry to the back of the queue. + for (; i<14; i++) queue->mem[i] = queue->mem[i+1]; + queue->mem[14] = slot_number; + return true; + } + } + // Test system device last. + return TEST(device_list, 0x8000); +} |