package andraus.bluetoothhidemu.spoof; import java.io.IOException; import andraus.bluetoothhidemu.util.DoLog; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import android.content.Context; public class BluetoothAdapterSpooferMoto extends BluetoothAdapterSpoofer { private int mHidSdpHandle; BluetoothAdapterSpooferMoto(BluetoothAdapter adapter) { super(null, adapter); } /** * Returns current bluetooth device class number. * * format: 0xaabbcc, where: * 0xaa -> service class number * 0xbb -> major device number * 0xcc -> minor device number * * @return */ @Override protected int getBluetoothDeviceClass() { return mAdapter.getAdapterClass(); } /** * Spoof the bluetooth device class number. Format of <i>deviceClass</i> follows the same pattern from method * <i>getBluetoothDeviceClass</i>. * * @param deviceClass * @return */ @Override protected int spoofBluetoothDeviceClass(int deviceClass) { mOriginalDeviceClass = getBluetoothDeviceClass(); return mAdapter.spoofAdapterClass(deviceClass); } /** * Adds a custom SDP record to enable HID emulation over bluetooth. * * @return */ @Override protected int addHidDeviceSdpRecord(SpoofMode mode) { if (mHidSdpHandle != 0) { DoLog.w(TAG, String.format("HID SDP record already present. Handle: 0x%06X",mHidSdpHandle)); return mHidSdpHandle; } mHidSdpHandle = (mode == SpoofMode.HID_GENERIC) ? mAdapter.addHidKeybSdpRecord() : mAdapter.addHidBdRemoteRecord(); return mHidSdpHandle; } /** * Removes a SDP record identified by <i>handle</i>. * implementation. * */ @Override protected void delHidDeviceSdpRecord() { if (mHidSdpHandle == 0) { DoLog.w(TAG, "No HID SDP record handle present."); return; } mAdapter.removeServiceRecord(mHidSdpHandle); mHidSdpHandle = 0; } @Override public BluetoothSocket connectL2capSocket(BluetoothDevice device, int port, boolean auth, boolean encrypt) throws IOException { return device.createl2capSocket(port, auth, encrypt); } @Override public boolean requirementsCheck() { // TODO implement check for frameworks support return true; } }