removed unsed files
This commit is contained in:
@@ -1,34 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2008 Nedim Jackman
|
|
||||||
|
|
||||||
This file is part of Wiiboard Simple
|
|
||||||
|
|
||||||
Wiiboard Simple is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
Wiiboard Simple is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with Wiiboard Simple. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.example.fitbot.bluetooth;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* In very basic structure, all bluetooth devices have an address that the connection
|
|
||||||
* is associated with.
|
|
||||||
*/
|
|
||||||
public interface BluetoothDevice {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The fixed address of the device.
|
|
||||||
* Constant throughout the connection of the device.
|
|
||||||
*/
|
|
||||||
public String getBluetoothAddress();
|
|
||||||
|
|
||||||
}
|
|
@@ -1,133 +0,0 @@
|
|||||||
package com.example.fitbot.bluetooth;
|
|
||||||
|
|
||||||
import android.bluetooth.BluetoothAdapter;
|
|
||||||
import android.bluetooth.BluetoothDevice;
|
|
||||||
import android.bluetooth.BluetoothSocket;
|
|
||||||
import android.content.BroadcastReceiver;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.IntentFilter;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
public class BluetoothManager {
|
|
||||||
|
|
||||||
private BluetoothAdapter bluetoothAdapter;
|
|
||||||
private Context context;
|
|
||||||
|
|
||||||
public BluetoothManager(Context context) {
|
|
||||||
this.context = context;
|
|
||||||
this.bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isBluetoothSupported() {
|
|
||||||
return bluetoothAdapter != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isBluetoothEnabled() {
|
|
||||||
return bluetoothAdapter.isEnabled();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void startDiscovery() {
|
|
||||||
if (!isBluetoothEnabled()) {
|
|
||||||
Log.e("BluetoothManager", "Bluetooth is not enabled");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bluetoothAdapter.isDiscovering()) {
|
|
||||||
bluetoothAdapter.cancelDiscovery();
|
|
||||||
Log.d("BluetoothManager", "Cancelling current discovery process...");
|
|
||||||
}
|
|
||||||
|
|
||||||
IntentFilter filter = new IntentFilter();
|
|
||||||
filter.addAction(BluetoothDevice.ACTION_FOUND);
|
|
||||||
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
|
|
||||||
context.registerReceiver(receiver, filter);
|
|
||||||
|
|
||||||
bluetoothAdapter.startDiscovery();
|
|
||||||
Log.d("BluetoothManager", "Starting discovery process...");
|
|
||||||
}
|
|
||||||
|
|
||||||
public final BroadcastReceiver receiver = new BroadcastReceiver() {
|
|
||||||
public void onReceive(Context context, Intent intent) {
|
|
||||||
String action = intent.getAction();
|
|
||||||
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
|
|
||||||
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
|
|
||||||
if (device.getName() != null && device.getName().contains("Nintendo RVL-WBC-01")) {
|
|
||||||
Log.d("BluetoothManager", "Wii Balance Board found: " + device.getName() + " [" + device.getAddress() + "]");
|
|
||||||
connectToDevice(device);
|
|
||||||
}
|
|
||||||
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
|
|
||||||
context.unregisterReceiver(this);
|
|
||||||
Log.d("BluetoothManager", "Discovery finished.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
public void connectToDevice(BluetoothDevice device) {
|
|
||||||
new Thread(() -> {
|
|
||||||
BluetoothSocket socket = null;
|
|
||||||
final int MAX_RETRIES = 3;
|
|
||||||
final long RETRY_DELAY_MS = 1000;
|
|
||||||
boolean isConnected = false;
|
|
||||||
|
|
||||||
for (int attempt = 1; attempt <= MAX_RETRIES; attempt++) {
|
|
||||||
try {
|
|
||||||
UUID SPP_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
|
|
||||||
socket = device.createRfcommSocketToServiceRecord(SPP_UUID);
|
|
||||||
bluetoothAdapter.cancelDiscovery();
|
|
||||||
|
|
||||||
byte[] pinBytes = getPinBytes(device.getAddress());
|
|
||||||
try {
|
|
||||||
Method setPinMethod = device.getClass().getDeclaredMethod("setPin", byte[].class);
|
|
||||||
setPinMethod.invoke(device, pinBytes);
|
|
||||||
Log.d("BluetoothManager", "PIN set successfully");
|
|
||||||
} catch (Exception e) {
|
|
||||||
Log.e("BluetoothManager", "Failed to set PIN", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
socket.connect();
|
|
||||||
Log.d("BluetoothManager", "Connected to Wii Balance Board");
|
|
||||||
isConnected = true;
|
|
||||||
break;
|
|
||||||
} catch (IOException e) {
|
|
||||||
Log.e("BluetoothManager", "Connection attempt " + attempt + " failed", e);
|
|
||||||
if (attempt < MAX_RETRIES) {
|
|
||||||
try {
|
|
||||||
Thread.sleep(RETRY_DELAY_MS);
|
|
||||||
} catch (InterruptedException ie) {
|
|
||||||
Thread.currentThread().interrupt();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
if (!isConnected && socket != null) {
|
|
||||||
try {
|
|
||||||
socket.close();
|
|
||||||
} catch (IOException ex) {
|
|
||||||
Log.e("BluetoothManager", "Could not close the client socket", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isConnected) {
|
|
||||||
Log.e("BluetoothManager", "All connection attempts failed.");
|
|
||||||
}
|
|
||||||
}).start();
|
|
||||||
}
|
|
||||||
|
|
||||||
private byte[] getPinBytes(String address) {
|
|
||||||
String[] addrParts = address.split(":");
|
|
||||||
byte[] pin = new byte[addrParts.length];
|
|
||||||
for (int i = 0; i < addrParts.length; i++) {
|
|
||||||
pin[i] = (byte) Integer.parseInt(addrParts[addrParts.length - 1 - i], 16);
|
|
||||||
}
|
|
||||||
Log.i("BluetoothManager", "PIN: " + pin);
|
|
||||||
return pin;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,48 +0,0 @@
|
|||||||
package com.example.fitbot.wiiboard;
|
|
||||||
|
|
||||||
import android.bluetooth.BluetoothAdapter;
|
|
||||||
import android.bluetooth.BluetoothDevice;
|
|
||||||
import android.bluetooth.BluetoothSocket;
|
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
|
|
||||||
public class WiiBoard {
|
|
||||||
private static final String TAG = "WiiBoard";
|
|
||||||
|
|
||||||
public static void connectToExtension(String address) {
|
|
||||||
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
|
|
||||||
BluetoothDevice device = bluetoothAdapter.getRemoteDevice(address);
|
|
||||||
BluetoothSocket socket = null;
|
|
||||||
final int maxTries = 3;
|
|
||||||
int currentTry = 0;
|
|
||||||
|
|
||||||
while (currentTry < maxTries) {
|
|
||||||
try {
|
|
||||||
// Use reflection to create a BluetoothSocket without UUID
|
|
||||||
Method m = device.getClass().getMethod("createRfcommSocket", new Class[]{int.class});
|
|
||||||
socket = (BluetoothSocket) m.invoke(device, 1);
|
|
||||||
|
|
||||||
bluetoothAdapter.cancelDiscovery();
|
|
||||||
socket.connect();
|
|
||||||
|
|
||||||
Log.i(TAG, "Connected to WiiBoard");
|
|
||||||
// Handle your communication here
|
|
||||||
|
|
||||||
return; // Exit the method upon successful connection
|
|
||||||
} catch (Exception e) { // Catching Exception to handle reflection exceptions too
|
|
||||||
Log.e(TAG, "Attempt " + (currentTry + 1) + " failed to connect", e);
|
|
||||||
currentTry++;
|
|
||||||
try {
|
|
||||||
// Wait a bit before retrying
|
|
||||||
Thread.sleep(1000);
|
|
||||||
} catch (InterruptedException ie) {
|
|
||||||
Log.e(TAG, "Interrupted while waiting to retry connection", ie);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Log.e(TAG, "Could not connect to WiiBoard after " + maxTries + " attempts.");
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,66 +0,0 @@
|
|||||||
package com.example.fitbot.wiiboard;
|
|
||||||
|
|
||||||
import android.bluetooth.BluetoothAdapter;
|
|
||||||
import android.bluetooth.BluetoothDevice;
|
|
||||||
import android.content.BroadcastReceiver;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.IntentFilter;
|
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
public class WiiBoardDiscoverer {
|
|
||||||
private BluetoothAdapter bluetoothAdapter;
|
|
||||||
private Context context;
|
|
||||||
private String discoveredAddress;
|
|
||||||
private boolean isSearching;
|
|
||||||
|
|
||||||
private final BroadcastReceiver receiver = new BroadcastReceiver() {
|
|
||||||
public void onReceive(Context context, Intent intent) {
|
|
||||||
String action = intent.getAction();
|
|
||||||
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
|
|
||||||
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
|
|
||||||
String name = device.getName();
|
|
||||||
if ("Nintendo RVL-WBC-01".equals(name)) {
|
|
||||||
discoveredAddress = device.getAddress();
|
|
||||||
Log.i("WiiBoardDiscoverer", "Discovered " + name + " " + discoveredAddress + ".");
|
|
||||||
isSearching = false;
|
|
||||||
bluetoothAdapter.cancelDiscovery();
|
|
||||||
context.unregisterReceiver(this); // Important to unregister
|
|
||||||
WiiBoard.connectToExtension(discoveredAddress);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
public WiiBoardDiscoverer(Context context) {
|
|
||||||
this.context = context;
|
|
||||||
this.bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
|
|
||||||
if (bluetoothAdapter == null) {
|
|
||||||
Log.i("WiiBoardDiscoverer", "Device doesn't support Bluetooth. Exiting.");
|
|
||||||
System.exit(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void startWiiBoardSearch() {
|
|
||||||
if (!isSearching && !bluetoothAdapter.isDiscovering()) {
|
|
||||||
isSearching = true;
|
|
||||||
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
|
|
||||||
context.registerReceiver(receiver, filter);
|
|
||||||
bluetoothAdapter.startDiscovery();
|
|
||||||
Log.i("WiiBoardDiscoverer", "WiiBoard Discovery Started");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void stopWiiBoardSearch() {
|
|
||||||
if (bluetoothAdapter.isDiscovering()) {
|
|
||||||
bluetoothAdapter.cancelDiscovery();
|
|
||||||
}
|
|
||||||
isSearching = false;
|
|
||||||
try {
|
|
||||||
context.unregisterReceiver(receiver);
|
|
||||||
} catch (IllegalArgumentException e) {
|
|
||||||
// This can happen if the receiver was not registered or already unregistered
|
|
||||||
Log.i("WiiBoardDiscoverer", "Receiver was not registered or already unregistered");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,13 +0,0 @@
|
|||||||
package com.example.fitbot.wiiboard;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Implement this interface to be notified of WiiBoards that are connected to. Register your
|
|
||||||
* listener with an instance of WiiBoardDiscoverer.
|
|
||||||
*/
|
|
||||||
public interface WiiBoardDiscoveryListener {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Is called by a WiiBoardDiscoverer when a WiiBoard has been found and successfully connected to.
|
|
||||||
*/
|
|
||||||
public void wiiBoardDiscovered(WiiBoard wiiboard);
|
|
||||||
}
|
|
Reference in New Issue
Block a user