Skip to content

Commit d8f37d8

Browse files
committed
More fixes for keyboard
1 parent 51370d0 commit d8f37d8

1 file changed

Lines changed: 21 additions & 17 deletions

File tree

libogc/pad.c

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -438,9 +438,9 @@ static void __pad_enable(u32 chan)
438438
static void __pad_enablekeyboard(u32 chan)
439439
{
440440
u32 buf[2];
441-
#ifdef _PAD_DEBUG
441+
//#ifdef _PAD_DEBUG
442442
printf("__pad_enablekeyboard(%d)\n",chan);
443-
#endif
443+
//#endif
444444
__pad_enabledbits |= PAD_ENABLEDMASK(chan);
445445
SI_GetResponse(chan,(void*)buf);
446446
SI_SetCommand(chan,__pad_cmdinitkeyboard);
@@ -687,7 +687,7 @@ void PAD_ControlMotor(s32 chan,u32 cmd)
687687
mask = PAD_ENABLEDMASK(chan);
688688
if(__pad_enabledbits&mask) {
689689
type = SI_GetType(chan);
690-
if(!(type&SI_GC_NOMOTOR)) {
690+
if(!(type&SI_GC_NOMOTOR) && !(type&SI_GC_KEYBOARD)) {
691691
if(__pad_spec<2 && cmd==PAD_MOTOR_STOP_HARD) cmd = 0;
692692

693693
cmd = 0x00400000|__pad_analogmode|(cmd&0x03);
@@ -787,25 +787,21 @@ u32 PAD_ScanPads(void)
787787

788788
switch(padstatus[i].err) {
789789
case PAD_ERR_NONE:
790+
printf("PAD_ERR_NONE\n");
790791
if (type == PAD_TYPE_KEYBOARD) {
791792
keys[0] = (u8)(padstatus[i].substickX - 128);
792793
keys[1] = (u8)(padstatus[i].substickY - 128);
793794
keys[2] = (u8)(padstatus[i].triggerL);
795+
printf("%d %d %d\n", keys[0], keys[1], keys[2]);
794796

795797
// Only update if keys did not roll over
796798
if (keys[0] != 1 && keys[1] != 1 && keys[2] != 1 &&
797799
keys[0] != 2 && keys[1] != 2 && keys[2] != 2) {
798800
oldkeys[0] = __pad_keys[i].keyboard_state[0];
799801
oldkeys[1] = __pad_keys[i].keyboard_state[1];
800802
oldkeys[2] = __pad_keys[i].keyboard_state[2];
801-
802-
__pad_keys[i].keyboard_down[0] = 0;
803-
__pad_keys[i].keyboard_down[1] = 0;
804-
__pad_keys[i].keyboard_down[2] = 0;
805-
806-
__pad_keys[i].keyboard_up[0] = 0;
807-
__pad_keys[i].keyboard_up[1] = 0;
808-
__pad_keys[i].keyboard_up[2] = 0;
803+
804+
memset(&__pad_keys[i],0,sizeof(keyinput));
809805

810806
// Check if any keyboard keys are being newly pressed
811807
if (keys[0] && ((keys[0] != oldkeys[0]) && (keys[0] != oldkeys[1]) && (keys[0] != oldkeys[2])))
@@ -850,7 +846,9 @@ u32 PAD_ScanPads(void)
850846
__pad_keys[i].keyboard_state[2] = keys[2];
851847
}
852848
} else {
853-
oldstate = __pad_keys[i].state;
849+
printf("GC pad\n");
850+
oldstate = __pad_keys[i].state;
851+
memset(&__pad_keys[i],0,sizeof(keyinput));
854852
state = padstatus[i].button;
855853
__pad_keys[i].stickX = padstatus[i].stickX;
856854
__pad_keys[i].stickY = padstatus[i].stickY;
@@ -867,12 +865,14 @@ u32 PAD_ScanPads(void)
867865
break;
868866

869867
case PAD_ERR_NO_CONTROLLER:
868+
printf("No pad\n");
870869
if(__pad_keys[i].chan!=-1) memset(&__pad_keys[i],0,sizeof(keyinput));
871870
__pad_keys[i].chan = -1;
872871
resetBits |= padBit;
873872
break;
874873

875874
default:
875+
printf("Default\n");
876876
break;
877877
}
878878
}
@@ -907,9 +907,10 @@ u16 PAD_ButtonsHeld(int pad)
907907
s32 PAD_KeyboardUp(int pad, u8 *keys)
908908
{
909909
s32 i, count = 0;
910-
if(pad<PAD_CHAN0 || pad>PAD_CHAN3 || __pad_keys[pad].chan==-1 || keys==NULL || PAD_GetType(pad) != PAD_TYPE_KEYBOARD) return 0;
910+
if (keys == NULL) return 0;
911+
memset(keys, 0, 3);
912+
if(pad<PAD_CHAN0 || pad>PAD_CHAN3 || __pad_keys[pad].chan==-1 || PAD_GetType(pad) != PAD_TYPE_KEYBOARD) return 0;
911913
for (i = 0; i < 3; i++) {
912-
keys[i] = 0;
913914
if (__pad_keys[pad].keyboard_up[i]) {
914915
keys[i] = __pad_keys[pad].keyboard_up[i];
915916
count++;
@@ -923,9 +924,10 @@ s32 PAD_KeyboardUp(int pad, u8 *keys)
923924
s32 PAD_KeyboardDown(int pad, u8 *keys)
924925
{
925926
s32 i, count = 0;
926-
if(pad<PAD_CHAN0 || pad>PAD_CHAN3 || __pad_keys[pad].chan==-1 || keys==NULL || PAD_GetType(pad) != PAD_TYPE_KEYBOARD) return 0;
927+
if (keys == NULL) return 0;
928+
memset(keys, 0, 3);
929+
if(pad<PAD_CHAN0 || pad>PAD_CHAN3 || __pad_keys[pad].chan==-1 || PAD_GetType(pad) != PAD_TYPE_KEYBOARD) return 0;
927930
for (i = 0; i < 3; i++) {
928-
keys[i] = 0;
929931
if (__pad_keys[pad].keyboard_down[i]) {
930932
keys[i] = __pad_keys[pad].keyboard_down[i];
931933
count++;
@@ -939,7 +941,9 @@ s32 PAD_KeyboardDown(int pad, u8 *keys)
939941
s32 PAD_KeyboardHeld(int pad, u8 *keys)
940942
{
941943
s32 i, count = 0;
942-
if(pad<PAD_CHAN0 || pad>PAD_CHAN3 || __pad_keys[pad].chan==-1 || keys==NULL || PAD_GetType(pad) != PAD_TYPE_KEYBOARD) return 0;
944+
if (keys == NULL) return 0;
945+
memset(keys, 0, 3);
946+
if(pad<PAD_CHAN0 || pad>PAD_CHAN3 || __pad_keys[pad].chan==-1 || PAD_GetType(pad) != PAD_TYPE_KEYBOARD) return 0;
943947
for (i = 0; i < 3; i++) {
944948
keys[i] = 0;
945949
if (__pad_keys[pad].keyboard_state[i]) {

0 commit comments

Comments
 (0)