summaryrefslogtreecommitdiff
path: root/src/boot/O2/padsetup.c
blob: bde45704aa82e00753670a7840cecc9e953f80cb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include "ultra64.h"

s32 PadSetup_Init(OSMesgQueue* mq, u8* outMask, OSContStatus* status) {
    s32 ret;
    s32 i;

    *outMask = 0xFF;
    ret = osContInit(mq, outMask, status);
    if (ret != 0) {
        return ret;
    }

    if (*outMask == 0xFF) {
        if (osContStartQuery(mq) != 0) {
            return 1;
        }

        osRecvMesg(mq, NULL, OS_MESG_BLOCK);
        osContGetQuery(status);

        *outMask = 0;
        for (i = 0; i < MAXCONTROLLERS; i++) {
            switch (status[i].errno) {
                case 0:
                    if (status[i].type == CONT_TYPE_NORMAL) {
                        *outMask |= 1 << i;
                    }
                    break;

                default:
                    break;
            }
        }
    }

    return 0;
}