From cf0eaad38856177e070a6d3517a25c97ccc30d76 Mon Sep 17 00:00:00 2001 From: Jack Andersen Date: Sat, 25 Apr 2015 22:25:44 -1000 Subject: [PATCH] final messsage added --- include/inputdev/CDeviceBase.hpp | 1 + include/inputdev/CDolphinSmashAdapter.hpp | 1 + src/inputdev/CDolphinSmashAdapter.cpp | 13 +++++++++++-- src/inputdev/CHIDDeviceIOKit.cpp | 5 ++--- test/main.cpp | 6 ++++++ 5 files changed, 21 insertions(+), 5 deletions(-) diff --git a/include/inputdev/CDeviceBase.hpp b/include/inputdev/CDeviceBase.hpp index 1d6d3a4..f299429 100644 --- a/include/inputdev/CDeviceBase.hpp +++ b/include/inputdev/CDeviceBase.hpp @@ -25,6 +25,7 @@ public: bool sendInterruptTransfer(uint8_t pipe, const uint8_t* data, size_t length); size_t receiveInterruptTransfer(uint8_t pipe, uint8_t* data, size_t length); virtual void transferCycle() {}; + virtual void finalCycle() {}; /* High-Level API */ bool sendReport(const uint8_t* data, size_t length); diff --git a/include/inputdev/CDolphinSmashAdapter.hpp b/include/inputdev/CDolphinSmashAdapter.hpp index 0516135..f79428a 100644 --- a/include/inputdev/CDolphinSmashAdapter.hpp +++ b/include/inputdev/CDolphinSmashAdapter.hpp @@ -49,6 +49,7 @@ class CDolphinSmashAdapter final : public CDeviceBase bool m_didHandshake; void deviceDisconnected(); void transferCycle(); + void finalCycle(); public: CDolphinSmashAdapter(CDeviceToken* token); ~CDolphinSmashAdapter(); diff --git a/src/inputdev/CDolphinSmashAdapter.cpp b/src/inputdev/CDolphinSmashAdapter.cpp index acc4778..9f9c8b3 100644 --- a/src/inputdev/CDolphinSmashAdapter.cpp +++ b/src/inputdev/CDolphinSmashAdapter.cpp @@ -48,9 +48,9 @@ parseState(IDolphinSmashAdapterCallback::SDolphinControllerState* stateOut, uint stateOut->m_btns = (uint16_t)payload[1] << 8 | (uint16_t)payload[2]; stateOut->m_leftStick[0] = payload[3]; - stateOut->m_leftStick[1] = payload[4] ^ 0xFF; + stateOut->m_leftStick[1] = payload[4]; stateOut->m_rightStick[0] = payload[5]; - stateOut->m_rightStick[1] = payload[6] ^ 0xFF; + stateOut->m_rightStick[1] = payload[6]; stateOut->m_analogTriggers[0] = payload[7]; stateOut->m_analogTriggers[1] = payload[8]; @@ -118,6 +118,15 @@ void CDolphinSmashAdapter::transferCycle() } }; +void CDolphinSmashAdapter::finalCycle() +{ + if (m_didHandshake) + { + uint8_t rumbleMessage[5] = {0x11, 0, 0, 0, 0}; + sendInterruptTransfer(0, rumbleMessage, sizeof(rumbleMessage)); + } +}; + void CDolphinSmashAdapter::deviceDisconnected() { diff --git a/src/inputdev/CHIDDeviceIOKit.cpp b/src/inputdev/CHIDDeviceIOKit.cpp index 6a5001b..215d71e 100644 --- a/src/inputdev/CHIDDeviceIOKit.cpp +++ b/src/inputdev/CHIDDeviceIOKit.cpp @@ -146,10 +146,9 @@ class CHIDDeviceIOKit final : public IHIDDevice /* Start transfer loop */ while (device->m_runningTransferLoop) - { device->m_devImp.transferCycle(); - } - + device->m_devImp.finalCycle(); + /* Cleanup */ (*intf)->USBInterfaceClose(intf); (*intf)->Release(intf); diff --git a/test/main.cpp b/test/main.cpp index b58cf30..6261a8c 100644 --- a/test/main.cpp +++ b/test/main.cpp @@ -1,5 +1,8 @@ +#if __APPLE__ #include +#else +#endif #include #include @@ -55,7 +58,10 @@ int main(int argc, char** argv) { } +#if __APPLE__ CFRunLoopRun(); +#else +#endif delete ctx; return 0;