MCPcopy Create free account
hub / github.com/bfbbdecomp/bfbb / PADRead

Function PADRead

src/dolphin/src/pad/Pad.c:396–510  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

394#define offsetof(type, memb) ((u32) & ((type*)0)->memb)
395
396u32 PADRead(PADStatus* status)
397{
398 BOOL enabled;
399 s32 chan;
400 u32 data[2];
401 u32 chanBit;
402 u32 sr;
403 int chanShift;
404 u32 motor;
405
406 enabled = OSDisableInterrupts();
407
408 motor = 0;
409 for (chan = 0; chan < SI_MAX_CHAN; chan++, status++)
410 {
411 chanBit = PAD_CHAN0_BIT >> chan;
412 chanShift = 8 * (SI_MAX_CHAN - 1 - chan);
413
414 if (PendingBits & chanBit)
415 {
416 PADReset(0);
417 status->err = PAD_ERR_NOT_READY;
418 memset(status, 0, offsetof(PADStatus, err));
419 continue;
420 }
421
422 if ((ResettingBits & chanBit) || ResettingChan == chan)
423 {
424 status->err = PAD_ERR_NOT_READY;
425 memset(status, 0, offsetof(PADStatus, err));
426 continue;
427 }
428
429 if (!(EnabledBits & chanBit))
430 {
431 status->err = (s8)PAD_ERR_NO_CONTROLLER;
432 memset(status, 0, offsetof(PADStatus, err));
433 continue;
434 }
435
436 if (SIIsChanBusy(chan))
437 {
438 status->err = PAD_ERR_TRANSFER;
439 memset(status, 0, offsetof(PADStatus, err));
440 continue;
441 }
442
443 sr = SIGetStatus(chan);
444 if (sr & SI_ERROR_NO_RESPONSE)
445 {
446 SIGetResponse(chan, data);
447
448 if (WaitingBits & chanBit)
449 {
450 status->err = (s8)PAD_ERR_NONE;
451 memset(status, 0, offsetof(PADStatus, err));
452
453 if (!(CheckingBits & chanBit))

Callers 1

iPadUpdateFunction · 0.85

Calls 9

OSDisableInterruptsFunction · 0.85
PADResetFunction · 0.85
memsetFunction · 0.85
SIIsChanBusyFunction · 0.85
SIGetStatusFunction · 0.85
SIGetResponseFunction · 0.85
SIGetTypeAsyncFunction · 0.85
SIGetTypeFunction · 0.85
SITransferFunction · 0.85

Tested by

no test coverage detected