Skip to content

Commit 51370d0

Browse files
committed
Keyboard fixes for held keys
1 parent bb2ca1f commit 51370d0

2 files changed

Lines changed: 15 additions & 10 deletions

File tree

gc/ogc/pad.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33

44
#include <gctypes.h>
55

6-
#define PAD_TYPE_NONE 0
7-
#define PAD_TYPE_STANDARD 1
8-
#define PAD_TYPE_WAVEBIRD 2
9-
#define PAD_TYPE_KEYBOARD 3
10-
#define PAD_TYPE_STEERING 4
6+
#define PAD_TYPE_NONE -1
7+
#define PAD_TYPE_STANDARD 0
8+
#define PAD_TYPE_WAVEBIRD 1
9+
#define PAD_TYPE_KEYBOARD 2
10+
#define PAD_TYPE_STEERING 3
1111

1212
#define PAD_CHAN0 0
1313
#define PAD_CHAN1 1
@@ -76,7 +76,7 @@ u32 PAD_Recalibrate(u32 mask);
7676
void PAD_Clamp(PADStatus *status);
7777
void PAD_ControlMotor(s32 chan,u32 cmd);
7878
void PAD_SetSpec(u32 spec);
79-
u32 PAD_GetType(s32 chan);
79+
s32 PAD_GetType(s32 chan);
8080

8181
u32 PAD_ScanPads(void);
8282

libogc/pad.c

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -698,17 +698,18 @@ void PAD_ControlMotor(s32 chan,u32 cmd)
698698
_CPU_ISR_Restore(level);
699699
}
700700

701-
u32 PAD_GetType(s32 chan)
701+
s32 PAD_GetType(s32 chan)
702702
{
703703
u32 level;
704704
u32 mask, sitype;
705-
u32 type = PAD_TYPE_NONE;
705+
s32 type = PAD_TYPE_NONE;
706706

707707
_CPU_ISR_Disable(level);
708708

709709
mask = PAD_ENABLEDMASK(chan);
710710
if(__pad_enabledbits&mask) {
711-
sitype = SI_GetType(chan)&~0xff;
711+
sitype = SI_GetType(chan);
712+
sitype = SI_DecodeType(sitype);
712713
switch (sitype)
713714
{
714715
case SI_GC_CONTROLLER:
@@ -792,7 +793,8 @@ u32 PAD_ScanPads(void)
792793
keys[2] = (u8)(padstatus[i].triggerL);
793794

794795
// Only update if keys did not roll over
795-
if (keys[0] != 2 && keys[1] != 2 && keys[2] != 2) {
796+
if (keys[0] != 1 && keys[1] != 1 && keys[2] != 1 &&
797+
keys[0] != 2 && keys[1] != 2 && keys[2] != 2) {
796798
oldkeys[0] = __pad_keys[i].keyboard_state[0];
797799
oldkeys[1] = __pad_keys[i].keyboard_state[1];
798800
oldkeys[2] = __pad_keys[i].keyboard_state[2];
@@ -907,6 +909,7 @@ s32 PAD_KeyboardUp(int pad, u8 *keys)
907909
s32 i, count = 0;
908910
if(pad<PAD_CHAN0 || pad>PAD_CHAN3 || __pad_keys[pad].chan==-1 || keys==NULL || PAD_GetType(pad) != PAD_TYPE_KEYBOARD) return 0;
909911
for (i = 0; i < 3; i++) {
912+
keys[i] = 0;
910913
if (__pad_keys[pad].keyboard_up[i]) {
911914
keys[i] = __pad_keys[pad].keyboard_up[i];
912915
count++;
@@ -922,6 +925,7 @@ s32 PAD_KeyboardDown(int pad, u8 *keys)
922925
s32 i, count = 0;
923926
if(pad<PAD_CHAN0 || pad>PAD_CHAN3 || __pad_keys[pad].chan==-1 || keys==NULL || PAD_GetType(pad) != PAD_TYPE_KEYBOARD) return 0;
924927
for (i = 0; i < 3; i++) {
928+
keys[i] = 0;
925929
if (__pad_keys[pad].keyboard_down[i]) {
926930
keys[i] = __pad_keys[pad].keyboard_down[i];
927931
count++;
@@ -937,6 +941,7 @@ s32 PAD_KeyboardHeld(int pad, u8 *keys)
937941
s32 i, count = 0;
938942
if(pad<PAD_CHAN0 || pad>PAD_CHAN3 || __pad_keys[pad].chan==-1 || keys==NULL || PAD_GetType(pad) != PAD_TYPE_KEYBOARD) return 0;
939943
for (i = 0; i < 3; i++) {
944+
keys[i] = 0;
940945
if (__pad_keys[pad].keyboard_state[i]) {
941946
keys[i] = __pad_keys[pad].keyboard_state[i];
942947
count++;

0 commit comments

Comments
 (0)