last WIP wiimote code
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@934 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
054ff5a48f
commit
415366634f
|
@ -69,6 +69,7 @@ bool CWII_IPC_HLE_Device_usb_oh1_57e_305::IOCtlV(u32 _CommandAddress)
|
||||||
{
|
{
|
||||||
// wpadsampled.elf - patch so the USB_LOG will print somehting
|
// wpadsampled.elf - patch so the USB_LOG will print somehting
|
||||||
// even it it wasn't very useful yet...
|
// even it it wasn't very useful yet...
|
||||||
|
Memory::Write_U8(1, 0x80151488); // DebugLog
|
||||||
// Memory::Write_U8(1, 0x801514A8); // USB_LOG
|
// Memory::Write_U8(1, 0x801514A8); // USB_LOG
|
||||||
// Memory::Write_U8(1, 0x801514D8); // WUD_DEBUGPrint
|
// Memory::Write_U8(1, 0x801514D8); // WUD_DEBUGPrint
|
||||||
// Memory::Write_U8(1, 0x80148E09); // HID LOG
|
// Memory::Write_U8(1, 0x80148E09); // HID LOG
|
||||||
|
@ -398,7 +399,7 @@ bool CWII_IPC_HLE_Device_usb_oh1_57e_305::SendEventInquiryComplete()
|
||||||
SHCIEventInquiryComplete* pInquiryComplete = (SHCIEventInquiryComplete*)Event.m_buffer;
|
SHCIEventInquiryComplete* pInquiryComplete = (SHCIEventInquiryComplete*)Event.m_buffer;
|
||||||
pInquiryComplete->EventType = 0x01;
|
pInquiryComplete->EventType = 0x01;
|
||||||
pInquiryComplete->PayloadLength = sizeof(SHCIEventInquiryComplete) - 2;
|
pInquiryComplete->PayloadLength = sizeof(SHCIEventInquiryComplete) - 2;
|
||||||
pInquiryComplete->status = 0x00;
|
pInquiryComplete->Status = 0x00;
|
||||||
|
|
||||||
AddEventToQueue(Event);
|
AddEventToQueue(Event);
|
||||||
|
|
||||||
|
@ -574,7 +575,7 @@ bool CWII_IPC_HLE_Device_usb_oh1_57e_305::SendEventReadClockOffsetComplete(u16 _
|
||||||
SHCIEventReadClockOffsetComplete* pReadClockOffsetComplete = (SHCIEventReadClockOffsetComplete*)Event.m_buffer;
|
SHCIEventReadClockOffsetComplete* pReadClockOffsetComplete = (SHCIEventReadClockOffsetComplete*)Event.m_buffer;
|
||||||
pReadClockOffsetComplete->EventType = 0x1C;
|
pReadClockOffsetComplete->EventType = 0x1C;
|
||||||
pReadClockOffsetComplete->PayloadLength = sizeof(SHCIEventReadClockOffsetComplete) - 2;
|
pReadClockOffsetComplete->PayloadLength = sizeof(SHCIEventReadClockOffsetComplete) - 2;
|
||||||
pReadClockOffsetComplete->status = 0x00;
|
pReadClockOffsetComplete->Status = 0x00;
|
||||||
pReadClockOffsetComplete->ConnectionHandle = pWiiMote->GetConnectionHandle();
|
pReadClockOffsetComplete->ConnectionHandle = pWiiMote->GetConnectionHandle();
|
||||||
pReadClockOffsetComplete->ClockOffset = 0x3818;
|
pReadClockOffsetComplete->ClockOffset = 0x3818;
|
||||||
|
|
||||||
|
@ -602,7 +603,7 @@ bool CWII_IPC_HLE_Device_usb_oh1_57e_305::SendEventReadRemoteVerInfo(u16 _connec
|
||||||
SHCIEventReadRemoteVerInfo* pReadRemoteVerInfo = (SHCIEventReadRemoteVerInfo*)Event.m_buffer;
|
SHCIEventReadRemoteVerInfo* pReadRemoteVerInfo = (SHCIEventReadRemoteVerInfo*)Event.m_buffer;
|
||||||
pReadRemoteVerInfo->EventType = 0x0C;
|
pReadRemoteVerInfo->EventType = 0x0C;
|
||||||
pReadRemoteVerInfo->PayloadLength = sizeof(SHCIEventReadRemoteVerInfo) - 2;
|
pReadRemoteVerInfo->PayloadLength = sizeof(SHCIEventReadRemoteVerInfo) - 2;
|
||||||
pReadRemoteVerInfo->status = 0x00;
|
pReadRemoteVerInfo->Status = 0x00;
|
||||||
pReadRemoteVerInfo->ConnectionHandle = pWiiMote->GetConnectionHandle();
|
pReadRemoteVerInfo->ConnectionHandle = pWiiMote->GetConnectionHandle();
|
||||||
pReadRemoteVerInfo->lmp_version = pWiiMote->GetLMPVersion();
|
pReadRemoteVerInfo->lmp_version = pWiiMote->GetLMPVersion();
|
||||||
pReadRemoteVerInfo->manufacturer = pWiiMote->GetManufactorID();
|
pReadRemoteVerInfo->manufacturer = pWiiMote->GetManufactorID();
|
||||||
|
@ -634,7 +635,7 @@ bool CWII_IPC_HLE_Device_usb_oh1_57e_305::SendEventReadRemoteFeatures(u16 _conne
|
||||||
SHCIEventReadRemoteFeatures* pReadRemoteFeatures = (SHCIEventReadRemoteFeatures*)Event.m_buffer;
|
SHCIEventReadRemoteFeatures* pReadRemoteFeatures = (SHCIEventReadRemoteFeatures*)Event.m_buffer;
|
||||||
pReadRemoteFeatures->EventType = 0x0C;
|
pReadRemoteFeatures->EventType = 0x0C;
|
||||||
pReadRemoteFeatures->PayloadLength = sizeof(SHCIEventReadRemoteFeatures) - 2;
|
pReadRemoteFeatures->PayloadLength = sizeof(SHCIEventReadRemoteFeatures) - 2;
|
||||||
pReadRemoteFeatures->status = 0x00;
|
pReadRemoteFeatures->Status = 0x00;
|
||||||
pReadRemoteFeatures->ConnectionHandle = pWiiMote->GetConnectionHandle();
|
pReadRemoteFeatures->ConnectionHandle = pWiiMote->GetConnectionHandle();
|
||||||
pReadRemoteFeatures->features[0] = pWiiMote->GetFeatures()[0];
|
pReadRemoteFeatures->features[0] = pWiiMote->GetFeatures()[0];
|
||||||
pReadRemoteFeatures->features[1] = pWiiMote->GetFeatures()[1];
|
pReadRemoteFeatures->features[1] = pWiiMote->GetFeatures()[1];
|
||||||
|
@ -700,7 +701,7 @@ bool CWII_IPC_HLE_Device_usb_oh1_57e_305::SendEventAuthenticationCompleted(u16 _
|
||||||
SHCIEventAuthenticationCompleted* pEventAuthenticationCompleted = (SHCIEventAuthenticationCompleted*)Event.m_buffer;
|
SHCIEventAuthenticationCompleted* pEventAuthenticationCompleted = (SHCIEventAuthenticationCompleted*)Event.m_buffer;
|
||||||
pEventAuthenticationCompleted->EventType = 0x06;
|
pEventAuthenticationCompleted->EventType = 0x06;
|
||||||
pEventAuthenticationCompleted->PayloadLength = sizeof(SHCIEventAuthenticationCompleted) - 2;
|
pEventAuthenticationCompleted->PayloadLength = sizeof(SHCIEventAuthenticationCompleted) - 2;
|
||||||
pEventAuthenticationCompleted->value = 0;
|
pEventAuthenticationCompleted->Status = 0;
|
||||||
pEventAuthenticationCompleted->Connection_Handle = _connectionHandle;
|
pEventAuthenticationCompleted->Connection_Handle = _connectionHandle;
|
||||||
|
|
||||||
AddEventToQueue(Event);
|
AddEventToQueue(Event);
|
||||||
|
@ -741,6 +742,36 @@ bool CWII_IPC_HLE_Device_usb_oh1_57e_305::SendEventModeChange(u16 _connectionHan
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CWII_IPC_HLE_Device_usb_oh1_57e_305::SendEventDisconnect(u16 _connectionHandle, u8 _Reason)
|
||||||
|
{
|
||||||
|
CWII_IPC_HLE_WiiMote* pWiiMote = AccessWiiMote(_connectionHandle);
|
||||||
|
if (pWiiMote == NULL)
|
||||||
|
{
|
||||||
|
PanicAlert("SendEventDisconnect: Cant find WiiMote by connection handle %02x", _connectionHandle);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
SQueuedEvent Event(sizeof(SHCIEventDisconnectCompleted), _connectionHandle);
|
||||||
|
|
||||||
|
SHCIEventDisconnectCompleted* pDisconnect = (SHCIEventDisconnectCompleted*)Event.m_buffer;
|
||||||
|
pDisconnect->EventType = 0x06;
|
||||||
|
pDisconnect->PayloadLength = sizeof(SHCIEventDisconnectCompleted) - 2;
|
||||||
|
pDisconnect->Status = 0;
|
||||||
|
pDisconnect->Connection_Handle = _connectionHandle;
|
||||||
|
pDisconnect->Reason = _Reason;
|
||||||
|
|
||||||
|
AddEventToQueue(Event);
|
||||||
|
|
||||||
|
// Log
|
||||||
|
LOG(WIIMOTE, "Event: SendEventDisconnect");
|
||||||
|
LOG(WIIMOTE, " Connection_Handle: 0x%04x", pDisconnect->Connection_Handle);
|
||||||
|
LOG(WIIMOTE, " Reason: 0x%02x", pDisconnect->Reason);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -756,7 +787,7 @@ void CWII_IPC_HLE_Device_usb_oh1_57e_305::ExecuteHCICommandMessage(const SHCICom
|
||||||
u8* pInput = Memory::GetPointer(_rHCICommandMessage.m_PayLoadAddr + 3);
|
u8* pInput = Memory::GetPointer(_rHCICommandMessage.m_PayLoadAddr + 3);
|
||||||
SCommandMessage* pMsg = (SCommandMessage*)Memory::GetPointer(_rHCICommandMessage.m_PayLoadAddr);
|
SCommandMessage* pMsg = (SCommandMessage*)Memory::GetPointer(_rHCICommandMessage.m_PayLoadAddr);
|
||||||
|
|
||||||
// LOG(WIIMOTE, "ExecuteHCICommandMessage(0x%04x)", pMsg->Opcode);
|
LOG(WIIMOTE, "****************************** ExecuteHCICommandMessage(0x%04x)", pMsg->Opcode);
|
||||||
|
|
||||||
switch(pMsg->Opcode)
|
switch(pMsg->Opcode)
|
||||||
{
|
{
|
||||||
|
@ -881,7 +912,7 @@ void CWII_IPC_HLE_Device_usb_oh1_57e_305::ExecuteHCICommandMessage(const SHCICom
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HCI_CMD_DISCONNECT:
|
case HCI_CMD_DISCONNECT:
|
||||||
PanicAlert("HCI_CMD_DISCONNECT is not implemented");
|
CommandDisconnect(pInput);
|
||||||
break;
|
break;
|
||||||
//
|
//
|
||||||
// --- default ---
|
// --- default ---
|
||||||
|
@ -1261,9 +1292,13 @@ void CWII_IPC_HLE_Device_usb_oh1_57e_305::CommandInquiry(u8* _Input)
|
||||||
LOG(WIIMOTE, " num_responses: %i (N x 1.28) sec", pInquiry->num_responses);
|
LOG(WIIMOTE, " num_responses: %i (N x 1.28) sec", pInquiry->num_responses);
|
||||||
|
|
||||||
SendEventCommandStatus(HCI_CMD_INQUIRY);
|
SendEventCommandStatus(HCI_CMD_INQUIRY);
|
||||||
SendEventInquiryResponse();
|
|
||||||
|
|
||||||
SendEventInquiryComplete();
|
if (g_GlobalHandle == 0)
|
||||||
|
{
|
||||||
|
SendEventInquiryResponse();
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
SendEventInquiryComplete(); */
|
||||||
}
|
}
|
||||||
|
|
||||||
void CWII_IPC_HLE_Device_usb_oh1_57e_305::CommandWriteInquiryScanType(u8* _Input)
|
void CWII_IPC_HLE_Device_usb_oh1_57e_305::CommandWriteInquiryScanType(u8* _Input)
|
||||||
|
@ -1488,6 +1523,23 @@ void CWII_IPC_HLE_Device_usb_oh1_57e_305::CommandSniffMode(u8* _Input)
|
||||||
SendEventModeChange(pSniffMode->con_handle, 0x02, pSniffMode->max_interval); // sniff mode
|
SendEventModeChange(pSniffMode->con_handle, 0x02, pSniffMode->max_interval); // sniff mode
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CWII_IPC_HLE_Device_usb_oh1_57e_305::CommandDisconnect(u8* _Input)
|
||||||
|
{
|
||||||
|
// command parameters
|
||||||
|
hci_discon_cp* pDiscon = (hci_discon_cp*)_Input;
|
||||||
|
|
||||||
|
LOG(WIIMOTE, "Command: HCI_CMD_DISCONNECT");
|
||||||
|
LOG(WIIMOTE, "Input:");
|
||||||
|
LOG(WIIMOTE, " ConnectionHandle: 0x%04x", pDiscon->con_handle);
|
||||||
|
LOG(WIIMOTE, " Reason: 0x%02x", pDiscon->reason);
|
||||||
|
|
||||||
|
SendEventCommandStatus(HCI_CMD_DISCONNECT);
|
||||||
|
SendEventDisconnect(pDiscon->con_handle, pDiscon->reason);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
|
|
@ -161,6 +161,7 @@ private:
|
||||||
bool SendEventNumberOfCompletedPackets(u16 _connectionHandle, u16 _count);
|
bool SendEventNumberOfCompletedPackets(u16 _connectionHandle, u16 _count);
|
||||||
bool SendEventAuthenticationCompleted(u16 _connectionHandle);
|
bool SendEventAuthenticationCompleted(u16 _connectionHandle);
|
||||||
bool SendEventModeChange(u16 _connectionHandle, u8 _mode, u16 _value);
|
bool SendEventModeChange(u16 _connectionHandle, u8 _mode, u16 _value);
|
||||||
|
bool SendEventDisconnect(u16 _connectionHandle, u8 _Reason);
|
||||||
|
|
||||||
// Execute HCI Message
|
// Execute HCI Message
|
||||||
void ExecuteHCICommandMessage(const SHCICommandMessage& _rCtrlMessage);
|
void ExecuteHCICommandMessage(const SHCICommandMessage& _rCtrlMessage);
|
||||||
|
@ -178,6 +179,7 @@ private:
|
||||||
void CommandReadRemoteFeatures(u8* _Input);
|
void CommandReadRemoteFeatures(u8* _Input);
|
||||||
void CommandAuthenticationRequested(u8* _Input);
|
void CommandAuthenticationRequested(u8* _Input);
|
||||||
void CommandInquiry(u8* _Input);
|
void CommandInquiry(u8* _Input);
|
||||||
|
void CommandDisconnect(u8* _Input);
|
||||||
|
|
||||||
// OGF 0x02 Link policy commands and return parameters
|
// OGF 0x02 Link policy commands and return parameters
|
||||||
void CommandWriteLinkPolicy(u8* _Input);
|
void CommandWriteLinkPolicy(u8* _Input);
|
||||||
|
|
|
@ -2426,14 +2426,14 @@ struct SHCIEventInquiryComplete
|
||||||
{
|
{
|
||||||
u8 EventType;
|
u8 EventType;
|
||||||
u8 PayloadLength;
|
u8 PayloadLength;
|
||||||
u8 status;
|
u8 Status;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SHCIEventReadClockOffsetComplete
|
struct SHCIEventReadClockOffsetComplete
|
||||||
{
|
{
|
||||||
u8 EventType;
|
u8 EventType;
|
||||||
u8 PayloadLength;
|
u8 PayloadLength;
|
||||||
u8 status;
|
u8 Status;
|
||||||
u16 ConnectionHandle;
|
u16 ConnectionHandle;
|
||||||
u16 ClockOffset;
|
u16 ClockOffset;
|
||||||
};
|
};
|
||||||
|
@ -2442,7 +2442,7 @@ struct SHCIEventReadRemoteVerInfo
|
||||||
{
|
{
|
||||||
u8 EventType;
|
u8 EventType;
|
||||||
u8 PayloadLength;
|
u8 PayloadLength;
|
||||||
u8 status;
|
u8 Status;
|
||||||
u16 ConnectionHandle;
|
u16 ConnectionHandle;
|
||||||
u8 lmp_version;
|
u8 lmp_version;
|
||||||
u16 manufacturer;
|
u16 manufacturer;
|
||||||
|
@ -2453,7 +2453,7 @@ struct SHCIEventReadRemoteFeatures
|
||||||
{
|
{
|
||||||
u8 EventType;
|
u8 EventType;
|
||||||
u8 PayloadLength;
|
u8 PayloadLength;
|
||||||
u8 status;
|
u8 Status;
|
||||||
u16 ConnectionHandle;
|
u16 ConnectionHandle;
|
||||||
u8 features[HCI_FEATURES_SIZE];
|
u8 features[HCI_FEATURES_SIZE];
|
||||||
};
|
};
|
||||||
|
@ -2509,7 +2509,7 @@ struct SHCIEventAuthenticationCompleted
|
||||||
{
|
{
|
||||||
u8 EventType;
|
u8 EventType;
|
||||||
u8 PayloadLength;
|
u8 PayloadLength;
|
||||||
u8 value;
|
u8 Status;
|
||||||
u16 Connection_Handle;
|
u16 Connection_Handle;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2524,6 +2524,17 @@ struct SHCIEventModeChange
|
||||||
u16 Value;
|
u16 Value;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct SHCIEventDisconnectCompleted
|
||||||
|
{
|
||||||
|
u8 EventType;
|
||||||
|
u8 PayloadLength;
|
||||||
|
u8 Status;
|
||||||
|
u16 Connection_Handle;
|
||||||
|
u8 Reason;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -278,10 +278,11 @@ extern "C" void Wiimote_Update() {
|
||||||
switch(g_ReportingMode) {
|
switch(g_ReportingMode) {
|
||||||
case 0:
|
case 0:
|
||||||
break;
|
break;
|
||||||
case WM_REPORT_CORE: SendReportCore(g_ReportingChannel); break;
|
case WM_REPORT_CORE: SendReportCoreAccel(g_ReportingChannel); break;
|
||||||
case WM_REPORT_CORE_ACCEL: SendReportCoreAccel(g_ReportingChannel); break;
|
case WM_REPORT_CORE_ACCEL: SendReportCoreAccel(g_ReportingChannel); break;
|
||||||
case WM_REPORT_CORE_ACCEL_IR12: SendReportCoreAccelIr12(g_ReportingChannel);break;
|
case WM_REPORT_CORE_ACCEL_IR12: SendReportCoreAccelIr12(g_ReportingChannel);break;
|
||||||
}
|
}
|
||||||
|
// g_ReportingMode = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" unsigned int Wiimote_GetAttachedControllers() {
|
extern "C" unsigned int Wiimote_GetAttachedControllers() {
|
||||||
|
@ -332,7 +333,9 @@ void WmLeds(u16 _channelID, wm_leds* leds) {
|
||||||
|
|
||||||
void WmDataReporting(u16 _channelID, wm_data_reporting* dr) {
|
void WmDataReporting(u16 _channelID, wm_data_reporting* dr) {
|
||||||
LOG(WIIMOTE, " Set Data reporting mode");
|
LOG(WIIMOTE, " Set Data reporting mode");
|
||||||
|
LOG(WIIMOTE, " Rumble: %x", dr->rumble);
|
||||||
LOG(WIIMOTE, " Continuous: %x", dr->continuous);
|
LOG(WIIMOTE, " Continuous: %x", dr->continuous);
|
||||||
|
LOG(WIIMOTE, " All The Time: %x (not only on data change)", dr->all_the_time);
|
||||||
LOG(WIIMOTE, " Rumble: %x", dr->rumble);
|
LOG(WIIMOTE, " Rumble: %x", dr->rumble);
|
||||||
LOG(WIIMOTE, " Mode: 0x%02x", dr->mode);
|
LOG(WIIMOTE, " Mode: 0x%02x", dr->mode);
|
||||||
|
|
||||||
|
@ -348,6 +351,15 @@ void WmDataReporting(u16 _channelID, wm_data_reporting* dr) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void FillReportInfo(wm_report_core& _reportCore)
|
||||||
|
{
|
||||||
|
static bool bb = true;
|
||||||
|
bb = !bb;
|
||||||
|
_reportCore.c.a = bb ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void SendReportCore(u16 _channelID) {
|
void SendReportCore(u16 _channelID) {
|
||||||
u8 DataFrame[1024];
|
u8 DataFrame[1024];
|
||||||
u32 Offset = WriteWmReport(_channelID, DataFrame, WM_REPORT_CORE);
|
u32 Offset = WriteWmReport(_channelID, DataFrame, WM_REPORT_CORE);
|
||||||
|
@ -356,7 +368,7 @@ void SendReportCore(u16 _channelID) {
|
||||||
Offset += sizeof(wm_report_core);
|
Offset += sizeof(wm_report_core);
|
||||||
memset(pReport, 0, sizeof(wm_report_core));
|
memset(pReport, 0, sizeof(wm_report_core));
|
||||||
|
|
||||||
pReport->c.a = 1;
|
FillReportInfo(*pReport);
|
||||||
|
|
||||||
LOG(WIIMOTE, " SendReportCore()");
|
LOG(WIIMOTE, " SendReportCore()");
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,8 @@ struct wm_leds {
|
||||||
struct wm_data_reporting {
|
struct wm_data_reporting {
|
||||||
u8 rumble : 1;
|
u8 rumble : 1;
|
||||||
u8 continuous : 1;
|
u8 continuous : 1;
|
||||||
u8 : 6;
|
u8 all_the_time : 1;
|
||||||
|
u8 : 5;
|
||||||
u8 mode;
|
u8 mode;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -138,7 +139,6 @@ struct wm_ir_extended {
|
||||||
#define WM_REPORT_CORE 0x30
|
#define WM_REPORT_CORE 0x30
|
||||||
struct wm_report_core {
|
struct wm_report_core {
|
||||||
wm_core c;
|
wm_core c;
|
||||||
wm_accel a;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define WM_REPORT_CORE_ACCEL 0x31
|
#define WM_REPORT_CORE_ACCEL 0x31
|
||||||
|
|
Loading…
Reference in New Issue