From 5ff36596bb0495439cfa09461eb991557350920a Mon Sep 17 00:00:00 2001 From: Raphael Assenat Date: Sat, 31 Oct 2015 01:39:24 -0400 Subject: [PATCH] Implement get_controller_type --- hiddata.c | 9 ++++++++- main.c | 9 +++++---- main.h | 6 ++++++ requests.h | 1 + 4 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 main.h diff --git a/hiddata.c b/hiddata.c index 4f8751a..7f65875 100644 --- a/hiddata.c +++ b/hiddata.c @@ -6,6 +6,7 @@ #include "bootloader.h" #include "gcn64_protocol.h" #include "version.h" +#include "main.h" // dataHidReport is 40 bytes. #define CMDBUF_SIZE 41 @@ -106,7 +107,13 @@ static void hiddata_processCommandBuffer(void) break; case RQ_GCN64_GET_SIGNATURE: strcpy_P((char*)(cmdbuf + 1), g_signature); - cmdbuf_len = 1 + strlen_P(g_version) + 1; + cmdbuf_len = 1 + strlen_P(g_signature) + 1; + break; + case RQ_GCN64_GET_CONTROLLER_TYPE: + // CMD : RQ, CHN + // Answer: RQ, CHN, TYPE + cmdbuf[2] = current_pad_type; + cmdbuf_len = 3; break; } diff --git a/main.c b/main.c index 1b9e1b5..af5755f 100644 --- a/main.c +++ b/main.c @@ -5,6 +5,7 @@ #include #include +#include "main.h" #include "util.h" #include "usart1.h" #include "usb.h" @@ -209,13 +210,13 @@ void hwinit(void) #define NUM_PAD_TYPES 2 +unsigned char current_pad_type = CONTROLLER_IS_ABSENT; + Gamepad *detectPad(void) { - char type; + current_pad_type = gcn64_detectController(); - type = gcn64_detectController(); - - switch (type) + switch (current_pad_type) { case CONTROLLER_IS_ABSENT: case CONTROLLER_IS_UNKNOWN: diff --git a/main.h b/main.h new file mode 100644 index 0000000..70e86f7 --- /dev/null +++ b/main.h @@ -0,0 +1,6 @@ +#ifndef _main_h__ +#define _main_h__ + +extern unsigned char current_pad_type; + +#endif // _main_h__ diff --git a/requests.h b/requests.h index f093fd2..86b99cc 100644 --- a/requests.h +++ b/requests.h @@ -7,6 +7,7 @@ #define RQ_GCN64_SUSPEND_POLLING 0x03 #define RQ_GCN64_GET_VERSION 0x04 #define RQ_GCN64_GET_SIGNATURE 0x05 +#define RQ_GCN64_GET_CONTROLLER_TYPE 0x06 #define RQ_GCN64_RAW_SI_COMMAND 0x80 #define RQ_GCN64_JUMP_TO_BOOTLOADER 0xFF