1 // Copyright 2016 Dolphin Emulator Project
2 // Licensed under GPLv2+
3 // Refer to the license.txt file included.
4 
5 #pragma once
6 
7 #ifdef ANDROID
8 #include <jni.h>
9 #include <string>
10 
11 #include "Common/StringUtil.h"
12 #include "Core/HW/WiimoteReal/WiimoteReal.h"
13 
14 namespace WiimoteReal
15 {
16 class WiimoteAndroid final : public Wiimote
17 {
18 public:
19   WiimoteAndroid(int index);
20   ~WiimoteAndroid() override;
GetId()21   std::string GetId() const override { return "Android " + std::to_string(m_mayflash_index); }
22 
23 protected:
24   bool ConnectInternal() override;
25   void DisconnectInternal() override;
26   bool IsConnected() const override;
IOWakeup()27   void IOWakeup() override{};
28   int IORead(u8* buf) override;
29   int IOWrite(u8 const* buf, size_t len) override;
30 
31 private:
32   int m_mayflash_index;
33   bool is_connected = true;
34 
35   JNIEnv* m_env;
36 
37   jmethodID m_input_func;
38   jmethodID m_output_func;
39 
40   jbyteArray m_java_wiimote_payload;
41 };
42 
43 class WiimoteScannerAndroid final : public WiimoteScannerBackend
44 {
45 public:
46   WiimoteScannerAndroid() = default;
47   ~WiimoteScannerAndroid() override = default;
IsReady()48   bool IsReady() const override { return true; }
49   void FindWiimotes(std::vector<Wiimote*>&, Wiimote*&) override;
Update()50   void Update() override {}
51 };
52 }  // namespace WiimoteReal
53 
54 #else
55 #include "Core/HW/WiimoteReal/IODummy.h"
56 namespace WiimoteReal
57 {
58 using WiimoteScannerAndroid = WiimoteScannerDummy;
59 }
60 #endif
61