diff options
12 files changed, 489 insertions, 43 deletions
diff --git a/android/sdremote/AndroidManifest.xml b/android/sdremote/AndroidManifest.xml index 796cf81a1af3..04255fda0049 100644 --- a/android/sdremote/AndroidManifest.xml +++ b/android/sdremote/AndroidManifest.xml @@ -5,6 +5,8 @@ android:versionName="0.1-Alpha" > <uses-permission android:name="android.permission.INTERNET" /> + <uses-permission android:name="android.permission.BLUETOOTH" /> + <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-sdk android:minSdkVersion="14" diff --git a/android/sdremote/src/org/libreoffice/impressremote/SelectorActivity.java b/android/sdremote/src/org/libreoffice/impressremote/SelectorActivity.java index a239312bd98f..f6f9514de9af 100644 --- a/android/sdremote/src/org/libreoffice/impressremote/SelectorActivity.java +++ b/android/sdremote/src/org/libreoffice/impressremote/SelectorActivity.java @@ -67,7 +67,7 @@ public class SelectorActivity extends Activity { @Override public void onBackPressed() { - mCommunicationService.stopFindingServers(); + mCommunicationService.stopSearching(); Intent aIntent = new Intent(this, CommunicationService.class); stopService(aIntent); super.onBackPressed(); @@ -76,6 +76,10 @@ public class SelectorActivity extends Activity { @Override protected void onResume() { super.onResume(); + mNetworkList.removeAllViews(); + mBluetoothList.removeAllViews(); + mNetworkServers.clear(); + mBluetoothServers.clear(); doBindService(); } @@ -84,7 +88,7 @@ public class SelectorActivity extends Activity { // TODO Auto-generated method stub super.onPause(); if (mCommunicationService != null) { - mCommunicationService.stopFindingServers(); + mCommunicationService.stopSearching(); } doUnbindService(); } @@ -105,7 +109,7 @@ public class SelectorActivity extends Activity { IBinder aService) { mCommunicationService = ((CommunicationService.CBinder) aService) .getService(); - mCommunicationService.startFindingServers(); + mCommunicationService.startSearching(); } @Override @@ -137,15 +141,20 @@ public class SelectorActivity extends Activity { // Bluetooth -- Remove old for (Entry<Server, View> aEntry : mBluetoothServers.entrySet()) { if (!Arrays.asList(aServers).contains(aEntry.getKey())) { + System.out.println("Removing view " + + aEntry.getKey().getName()); mBluetoothServers.remove(aEntry.getKey()); - mBluetoothList.removeView(aEntry.getValue()); + mBluetoothList.removeView((View) aEntry.getValue() + .getParent()); } } // Network -- Remove old for (Entry<Server, View> aEntry : mNetworkServers.entrySet()) { if (!Arrays.asList(aServers).contains(aEntry.getKey())) { - mNetworkServers.remove(aEntry.getKey()); - mNetworkList.removeView(aEntry.getValue()); + System.out.println("Removing view"); + mNetworkServers.remove(aEntry.getKey().getName()); + mNetworkList.removeView((View) aEntry.getValue() + .getParent()); } } // Add all new @@ -156,7 +165,7 @@ public class SelectorActivity extends Activity { LinearLayout aLayout = aIsBluetooth ? mBluetoothList : mNetworkList; - if (!aMap.containsValue(aServer)) { + if (!aMap.containsKey(aServer)) { View aView = getLayoutInflater() .inflate(R.layout.activity_selector_sublayout_server, null); @@ -166,7 +175,7 @@ public class SelectorActivity extends Activity { aText.setOnClickListener(mClickListener); aText.setText(aServer.getName()); aLayout.addView(aView); - aMap.put(aServer, aView); + aMap.put(aServer, aText); } } @@ -188,7 +197,7 @@ public class SelectorActivity extends Activity { @Override public void onClick(View aView) { - mCommunicationService.stopFindingServers(); + mCommunicationService.stopSearching(); Server aDesiredServer = null; diff --git a/android/sdremote/src/org/libreoffice/impressremote/communication/BluetoothFinder.java b/android/sdremote/src/org/libreoffice/impressremote/communication/BluetoothFinder.java new file mode 100644 index 000000000000..bfe10a9fefb3 --- /dev/null +++ b/android/sdremote/src/org/libreoffice/impressremote/communication/BluetoothFinder.java @@ -0,0 +1,115 @@ +package org.libreoffice.impressremote.communication; + +import java.util.Collection; +import java.util.HashMap; + +import org.libreoffice.impressremote.communication.Server.Protocol; + +import android.bluetooth.BluetoothAdapter; +import android.bluetooth.BluetoothDevice; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; + +public class BluetoothFinder { + + // TODO: add removal of cached items + private Context mContext; + + private static final String CHARSET = "UTF-8"; + + BluetoothAdapter mAdapter; + + public BluetoothFinder(Context aContext) { + mContext = aContext; + mAdapter = BluetoothAdapter.getDefaultAdapter(); + + } + + public void startFinding() { + System.out.println("BT:Discovery starting"); + IntentFilter aFilter = new IntentFilter( + BluetoothAdapter.ACTION_DISCOVERY_FINISHED); + aFilter.addAction(BluetoothDevice.ACTION_FOUND); + mContext.registerReceiver(mReceiver, aFilter); + + mAdapter.enable(); + mAdapter.startDiscovery(); + } + + public void stopFinding() { + mAdapter.cancelDiscovery(); + mContext.unregisterReceiver(mReceiver); + } + + private HashMap<String, Server> mServerList = new HashMap<String, Server>(); + + public Collection<Server> getServerList() { + return mServerList.values(); + } + + private BroadcastReceiver mReceiver = new BroadcastReceiver() { + + @Override + public void onReceive(Context context, Intent aIntent) { + // TODO Auto-generated method stub + System.out.println("Received intent"); + System.out.println(aIntent.getAction()); + if (aIntent.getAction().equals(BluetoothDevice.ACTION_FOUND)) { + BluetoothDevice aDevice = (BluetoothDevice) aIntent.getExtras() + .get(BluetoothDevice.EXTRA_DEVICE); + Server aServer = new Server(Protocol.BLUETOOTH, + aDevice.getAddress(), aDevice.getName(), + System.currentTimeMillis()); + mServerList.put(aServer.getAddress(), aServer); + System.out.println("Added " + aServer.getName()); + System.out.println("Now we have: " + mServerList.size()); + Intent aNIntent = new Intent( + CommunicationService.MSG_SERVERLIST_CHANGED); + mContext.sendBroadcast(aNIntent); + // System.out.println("Found " + aDevice.getName()); + // try { + // // "f36d0a20-e876-11e1-aff1-0800200c9a66" + // BluetoothSocket aSocket = aDevice + // .createRfcommSocketToServiceRecord(UUID + // .fromString("00001101-0000-1000-8000-00805F9B34FB")); + // aSocket.connect(); + // } catch (IOException e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // System.out.println("Fallback"); + // Method m; + // try { + // m = aDevice.getClass().getMethod("createRfcommSocket", + // new Class[] { int.class }); + // BluetoothSocket aFSocket = (BluetoothSocket) m.invoke( + // aDevice, 1); + // + // mAdapter.cancelDiscovery(); + // aFSocket.connect(); + // } catch (NoSuchMethodException e1) { + // // TODO Auto-generated catch block + // e1.printStackTrace(); + // } catch (IllegalArgumentException e1) { + // // TODO Auto-generated catch block + // e1.printStackTrace(); + // } catch (IllegalAccessException e1) { + // // TODO Auto-generated catch block + // e1.printStackTrace(); + // } catch (InvocationTargetException e1) { + // // TODO Auto-generated catch block + // e1.printStackTrace(); + // } catch (IOException e1) { + // // TODO Auto-generated catch block + // e1.printStackTrace(); + // } + // System.out.println("Fallback complete"); + // + // } + } + + } + + }; +} diff --git a/android/sdremote/src/org/libreoffice/impressremote/communication/CommunicationService.java b/android/sdremote/src/org/libreoffice/impressremote/communication/CommunicationService.java index 677028c5cdff..b25fcc04b49b 100644 --- a/android/sdremote/src/org/libreoffice/impressremote/communication/CommunicationService.java +++ b/android/sdremote/src/org/libreoffice/impressremote/communication/CommunicationService.java @@ -8,6 +8,8 @@ */ package org.libreoffice.impressremote.communication; +import java.util.ArrayList; + import android.app.Service; import android.content.Intent; import android.os.Binder; @@ -87,14 +89,17 @@ public class CommunicationService extends Service implements Runnable { if (mState == State.CONNECTING || mState == State.CONNECTED) { disconnect(); } - mFinder.startFinding(); + mNetworkFinder.startFinding(); + mBluetoothFinder.startFinding(); mState = State.SEARCHING; } + new BluetoothFinder(this); } public void stopSearching() { synchronized (mConnectionVariableMutex) { - mFinder.stopFinding(); + mNetworkFinder.stopFinding(); + mBluetoothFinder.stopFinding(); mState = State.DISCONNECTED; } } @@ -102,7 +107,8 @@ public class CommunicationService extends Service implements Runnable { public void connectTo(Server aServer) { synchronized (mConnectionVariableMutex) { if (mState == State.SEARCHING) { - mFinder.stopFinding(); + mNetworkFinder.stopFinding(); + mBluetoothFinder.stopFinding(); mState = State.DISCONNECTED; } mServerDesired = aServer; @@ -150,7 +156,8 @@ public class CommunicationService extends Service implements Runnable { private Receiver mReceiver = new Receiver(this); - private ServerFinder mFinder = new ServerFinder(this); + private ServerFinder mNetworkFinder = new ServerFinder(this); + private BluetoothFinder mBluetoothFinder = new BluetoothFinder(this); @Override public IBinder onBind(Intent intent) { @@ -179,15 +186,10 @@ public class CommunicationService extends Service implements Runnable { } public Server[] getServers() { - return mFinder.getServerList(); - } - - public void startFindingServers() { - mFinder.startFinding(); - } - - public void stopFindingServers() { - mFinder.stopFinding(); + ArrayList<Server> aServers = new ArrayList<Server>(); + aServers.addAll(mNetworkFinder.getServerList()); + aServers.addAll(mBluetoothFinder.getServerList()); + return aServers.toArray(new Server[aServers.size()]); } public SlideShow getSlideShow() { diff --git a/android/sdremote/src/org/libreoffice/impressremote/communication/ServerFinder.java b/android/sdremote/src/org/libreoffice/impressremote/communication/ServerFinder.java index 7405a25ae5f3..67a886223f3d 100644 --- a/android/sdremote/src/org/libreoffice/impressremote/communication/ServerFinder.java +++ b/android/sdremote/src/org/libreoffice/impressremote/communication/ServerFinder.java @@ -6,11 +6,11 @@ import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; +import java.util.Collection; import java.util.HashMap; import android.content.Context; import android.content.Intent; -import android.support.v4.content.LocalBroadcastManager; public class ServerFinder { @@ -42,9 +42,7 @@ public class ServerFinder { try { String aCommand = null; String aName = null; - System.out.println("SF:Reading"); mSocket.receive(aPacket); - System.out.println("SF:Received"); int i; for (i = 0; i < aBuffer.length; i++) { if (aPacket.getData()[i] == '\n') { @@ -69,10 +67,6 @@ public class ServerFinder { System.currentTimeMillis()); mServerList.put(aServer.getAddress(), aServer); - //System.out.println("SF FOUND: IP=" - //+ aPacket.getAddress().toString() + " HOSTNAME=" - //+ aName); - Intent aIntent = new Intent( CommunicationService.MSG_SERVERLIST_CHANGED); mContext.sendBroadcast(aIntent); @@ -92,9 +86,6 @@ public class ServerFinder { mFinishRequested = false; - Intent aIntent = new Intent(CommunicationService.MSG_SERVERLIST_CHANGED); - LocalBroadcastManager.getInstance(mContext).sendBroadcast(aIntent); - if (mListenerThread == null) { mListenerThread = new Thread() { @Override @@ -104,9 +95,7 @@ public class ServerFinder { mSocket = new DatagramSocket(); mSocket.setSoTimeout(1000 * 10); while (!mFinishRequested) { - System.out.println("SF:Looping"); if (System.currentTimeMillis() - aTime > SEARCH_INTERVAL) { - System.out.println("SF:Sending"); String aString = "LOREMOTE_SEARCH\n"; DatagramPacket aPacket = new DatagramPacket( aString.getBytes(CHARSET), @@ -121,9 +110,7 @@ public class ServerFinder { mServerList.remove(aServer.getAddress()); Intent aIntent = new Intent( CommunicationService.MSG_SERVERLIST_CHANGED); - LocalBroadcastManager.getInstance( - mContext) - .sendBroadcast(aIntent); + mContext.sendBroadcast(aIntent); } } @@ -156,7 +143,7 @@ public class ServerFinder { } } - public Server[] getServerList() { - return mServerList.values().toArray(new Server[mServerList.size()]); + public Collection<Server> getServerList() { + return mServerList.values(); } } diff --git a/sd/CppunitTest_sd_uimpress.mk b/sd/CppunitTest_sd_uimpress.mk index ee9046f03dc7..751918675394 100644 --- a/sd/CppunitTest_sd_uimpress.mk +++ b/sd/CppunitTest_sd_uimpress.mk @@ -80,6 +80,10 @@ $(eval $(call gb_CppunitTest_use_libraries,sd_uimpress,\ )) endif +$(eval $(call gb_CppunitTest_use_externals,sd_uimpress,\ + gtk \ +)) + $(eval $(call gb_CppunitTest_add_exception_objects,sd_uimpress,\ sd/qa/unit/uimpress \ )) diff --git a/sd/Library_sd.mk b/sd/Library_sd.mk index 283971ca7656..3b82a0f8cac9 100644 --- a/sd/Library_sd.mk +++ b/sd/Library_sd.mk @@ -60,10 +60,6 @@ $(eval $(call gb_Library_set_include,sd,\ -I$(WORKDIR)/SdiTarget/sd/sdi \ )) -$(eval $(call gb_Library_use_externals,sd,\ - libxml2 \ -)) - $(eval $(call gb_Library_add_defs,sd,\ -DSD_DLLIMPLEMENTATION \ )) @@ -109,6 +105,11 @@ $(eval $(call gb_Library_use_libraries,sd,\ $(gb_STDLIBS) \ )) +$(eval $(call gb_Library_use_externals,sd,\ + gtk \ + libxml2 \ +)) + ifeq ($(OS),WNT) $(eval $(call gb_Library_use_libraries,sd,\ ws2_32 \ @@ -327,6 +328,7 @@ $(eval $(call gb_Library_add_exception_objects,sd,\ sd/source/ui/presenter/PresenterPreviewCache \ sd/source/ui/presenter/PresenterTextView \ sd/source/ui/presenter/SlideRenderer \ + sd/source/ui/remotecontrol/BluetoothServer \ sd/source/ui/remotecontrol/BufferedStreamSocket \ sd/source/ui/remotecontrol/Communicator \ sd/source/ui/remotecontrol/DiscoveryService \ diff --git a/sd/source/ui/remotecontrol/BluetoothServer.cxx b/sd/source/ui/remotecontrol/BluetoothServer.cxx new file mode 100644 index 000000000000..3cd8cbcf2e35 --- /dev/null +++ b/sd/source/ui/remotecontrol/BluetoothServer.cxx @@ -0,0 +1,175 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +#include "BluetoothServer.hxx" +#include <stdio.h> + +#include <gio/gio.h> +#include <stdint.h> +#include <sys/unistd.h> +#include <sys/socket.h> +#include <tools/debug.hxx> +#include <tools/stream.hxx> + +#ifdef LINUX +#include "bluetooth/bluetooth.h" +#include "bluetooth/rfcomm.h" +#endif + +using namespace sd; + +BluetoothServer::BluetoothServer(): + Thread( "BluetoothServer" ) +{ + +} + +BluetoothServer::~BluetoothServer() +{ +} + +void BluetoothServer::execute() +{ +#ifdef LINUX +// g_type_init(); +// GError* aError = NULL; +// GDBusConnection* aConnection = g_bus_get_sync( G_BUS_TYPE_SYSTEM, NULL, &aError ); +// if ( aError ) +// { +// fprintf( stderr, aError->message ); +// g_error_free( aError ); +// } +// GDBusObjectManager* aManager = g_dbus_object_manager_client_new_sync( aConnection, +// G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE, "org.bluez.Manager", "/org/bluez", +// NULL, NULL, NULL, NULL, &aError ); +// if ( aError ) +// { +// fprintf( stderr, aError->message ); +// g_error_free( aError ); +// } +// +// GVariant *aRet = g_dbus_connection_call_sync( aConnection, +// "org.bluez", "/", "org.bluez.Database", +// "AddServiceRecordFromXml", +// g_variant_new ("s", +// ""),, +// G_VARIANT_TYPE_UINT32, +// G_DBUS_CALL_FLAGS_NONE, -1, NULL, &aError); +// g_variant_unref( aRet ); +// fprintf( stderr, "Manager gotten\n" ); +// +// // Name for default adapter +// GVariant *aAdapter = g_dbus_connection_call_sync( aConnection, +// "org.bluez", "/", "org.bluez.Manager", +// "DefaultAdapter", NULL, +// G_VARIANT_TYPE_TUPLE, +// G_DBUS_CALL_FLAGS_NONE, -1, NULL, &aError); +// GVariant *aAdapterName = g_variant_get_child_value( aAdapter, 0 ); +// if ( aError ) +// { +// fprintf( stderr, aError->message ); +// g_error_free( aError ); +// } +// fprintf( stderr, (const char*) g_variant_get_string( aAdapterName, NULL ) ); + + + + +// g_type_init(); +// GError* aError = NULL; +// GDBusConnection* aConnection = g_bus_get_sync( G_BUS_TYPE_SYSTEM, NULL, &aError ); +// fprintf( stderr, "Connection gotten\n" ); +// if ( aError ) +// { +// fprintf( stderr, aError->message ); +// g_error_free( aError ); +// } +// // GDBusObjectManager* aManager = g_dbus_object_manager_client_new_sync( aConnection, +// // G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE, "org.bluez.Manager", "/org/bluez", +// // NULL, NULL, NULL, NULL, &aError ); +// // if ( aError ) +// // { +// // fprintf( stderr, aError->message ); +// // g_error_free( aError ); +// // } +// fprintf( stderr, "Manager gotten\n" ); +// +// // Name for default adapter +// GVariant *aAdapter = g_dbus_connection_call_sync( aConnection, +// "org.bluez", "/", "org.bluez.Manager", +// "DefaultAdapter", NULL, +// G_VARIANT_TYPE_TUPLE, +// G_DBUS_CALL_FLAGS_NONE, -1, NULL, &aError); +// GVariant *aAdapterName = g_variant_get_child_value( aAdapter, 0 ); +// if ( aError ) +// { +// fprintf( stderr, aError->message ); +// g_error_free( aError ); +// } +// fprintf( stderr, (const char*) g_variant_get_string( aAdapterName, NULL ) ); + + + // ---------------- DEVICE ADDRESS + int aSocket; + if ( (aSocket = socket( AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM )) < 0 ) + { + // Error + return; + } + + sockaddr_rc aAddr; + aAddr.rc_family = AF_BLUETOOTH; +// aAddr.rc_bdaddr = *BDADDR_ANY; + aAddr.rc_channel = 1; + + if ( bind( aSocket, (sockaddr*) &aAddr, sizeof(aAddr)) < 0 ) { + close( aSocket ); + return; + } + + if ( listen( aSocket, 1 ) < 0 ) + { + close( aSocket ); + return; + } + + sockaddr_rc aRemoteAddr; + socklen_t aRemoteAddrLen = sizeof(aRemoteAddr); + if ( accept(aSocket, (sockaddr*) &aRemoteAddr, &aRemoteAddrLen) < 0 ) + { + close( aSocket ); + return; + } else { + fprintf( stderr, "Accepted Bluetooth\n" ); + } + +#endif + +#ifdef WIN32 + +#endif + +#ifdef MACOSX + +#endif +} + + +BluetoothServer *sd::BluetoothServer::spServer = NULL; + +void BluetoothServer::setup() +{ + if (spServer) + return; + + spServer = new BluetoothServer(); + spServer->launch(); +} + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
\ No newline at end of file diff --git a/sd/source/ui/remotecontrol/BluetoothServer.hxx b/sd/source/ui/remotecontrol/BluetoothServer.hxx new file mode 100644 index 000000000000..b95d86202e9a --- /dev/null +++ b/sd/source/ui/remotecontrol/BluetoothServer.hxx @@ -0,0 +1,34 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +#ifndef _SD_IMPRESSREMOTE_BLUETOOTHSERVER_HXX +#define _SD_IMPRESSREMOTE_BLUETOOTHSERVER_HXX + +#include <salhelper/thread.hxx> + +namespace sd +{ + class BluetoothServer: + public salhelper::Thread + { + public: + static void setup(); + private: + BluetoothServer(); + ~BluetoothServer(); + static BluetoothServer *spServer; + + + public: + private: + void execute(); + }; +} + +#endif // _SD_IMPRESSREMOTE_BLUETOOTHSERVER_HXX +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
\ No newline at end of file diff --git a/sd/source/ui/remotecontrol/Server.cxx b/sd/source/ui/remotecontrol/Server.cxx index e7a361e59e51..d353a1b6b1ed 100644 --- a/sd/source/ui/remotecontrol/Server.cxx +++ b/sd/source/ui/remotecontrol/Server.cxx @@ -20,6 +20,7 @@ #include "Listener.hxx" #include "Receiver.hxx" #include "RemoteServer.hxx" +#include "BluetoothServer.hxx" using namespace std; using namespace sd; @@ -210,6 +211,7 @@ void SdDLL::RegisterRemotes() sd::RemoteServer::setup(); sd::DiscoveryService::setup(); + sd::BluetoothServer::setup(); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sd/source/ui/remotecontrol/bluetooth/bluetooth.h b/sd/source/ui/remotecontrol/bluetooth/bluetooth.h new file mode 100644 index 000000000000..db6cf30122d5 --- /dev/null +++ b/sd/source/ui/remotecontrol/bluetooth/bluetooth.h @@ -0,0 +1,68 @@ +/**************************************************************************** + **************************************************************************** + *** + *** This header was automatically generated from a Bluez header + *** of the same name, to make information necessary for userspace to + *** call into the kernel available to Android. It contains only constants, + *** structures, and macros generated from the original header, and thus, + *** contains no copyrightable information. + *** + **************************************************************************** + ****************************************************************************/ +#ifndef __BLUETOOTH_H +#define __BLUETOOTH_H + +#ifdef __cplusplus +#endif +#include <stdio.h> +#include <stdint.h> +#include <string.h> +#include <endian.h> +#include <byteswap.h> +#ifndef AF_BLUETOOTH +#define AF_BLUETOOTH 31 +#define PF_BLUETOOTH AF_BLUETOOTH +#endif +#ifndef SOL_BLUETOOTH +#define SOL_BLUETOOTH 274 +#endif +#define BTPROTO_L2CAP 0 +#define BTPROTO_HCI 1 +#define BTPROTO_SCO 2 +#define BTPROTO_RFCOMM 3 +#define BTPROTO_BNEP 4 +#define BTPROTO_CMTP 5 +#define BTPROTO_HIDP 6 +#define BTPROTO_AVDTP 7 +#define SOL_HCI 0 +#define SOL_L2CAP 6 +#define SOL_SCO 17 +#define SOL_RFCOMM 18 +#if __BYTE_ORDER == __LITTLE_ENDIAN +#define htobs(d) (d) +#define htobl(d) (d) +#define btohs(d) (d) +#define btohl(d) (d) +#elif __BYTE_ORDER == __BIG_ENDIAN +#define htobs(d) bswap_16(d) +#define htobl(d) bswap_32(d) +#define btohs(d) bswap_16(d) +#define btohl(d) bswap_32(d) +#else +#error "Unknown byte order" +#endif +#define bt_get_unaligned(ptr) ({ struct __attribute__((packed)) { typeof(*(ptr)) __v; } *__p = (void *) (ptr); __p->__v; }) +#define bt_put_unaligned(val, ptr) do { struct __attribute__((packed)) { typeof(*(ptr)) __v; } *__p = (void *) (ptr); __p->__v = (val); } while(0) +#define BDADDR_ANY (&(bdaddr_t) {{0, 0, 0, 0, 0, 0}}) +#define BDADDR_ALL (&(bdaddr_t) {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}}) +#define BDADDR_LOCAL (&(bdaddr_t) {{0, 0, 0, 0xff, 0xff, 0xff}}) +#ifdef __cplusplus +#endif +typedef struct { + uint8_t b[6]; +} __attribute__((packed)) bdaddr_t; +static inline void bacpy(bdaddr_t *dst, const bdaddr_t *src) +{ + memcpy(dst, src, sizeof(bdaddr_t)); +} +#endif diff --git a/sd/source/ui/remotecontrol/bluetooth/rfcomm.h b/sd/source/ui/remotecontrol/bluetooth/rfcomm.h new file mode 100644 index 000000000000..bfa304f4579e --- /dev/null +++ b/sd/source/ui/remotecontrol/bluetooth/rfcomm.h @@ -0,0 +1,46 @@ +/**************************************************************************** + **************************************************************************** + *** + *** This header was automatically generated from a Bluez header + *** of the same name, to make information necessary for userspace to + *** call into the kernel available to Android. It contains only constants, + *** structures, and macros generated from the original header, and thus, + *** contains no copyrightable information. + *** + **************************************************************************** + ****************************************************************************/ +#ifndef __RFCOMM_H +#define __RFCOMM_H + +#ifdef __cplusplus +#endif +#include <sys/socket.h> +#define RFCOMM_DEFAULT_MTU 127 +#define RFCOMM_PSM 3 +#define RFCOMM_CONN_TIMEOUT (HZ * 30) +#define RFCOMM_DISC_TIMEOUT (HZ * 20) +#define RFCOMM_CONNINFO 0x02 +#define RFCOMM_LM 0x03 +#define RFCOMM_LM_MASTER 0x0001 +#define RFCOMM_LM_AUTH 0x0002 +#define RFCOMM_LM_ENCRYPT 0x0004 +#define RFCOMM_LM_TRUSTED 0x0008 +#define RFCOMM_LM_RELIABLE 0x0010 +#define RFCOMM_LM_SECURE 0x0020 +#define RFCOMM_MAX_DEV 256 +#define RFCOMMCREATEDEV _IOW('R', 200, int) +#define RFCOMMRELEASEDEV _IOW('R', 201, int) +#define RFCOMMGETDEVLIST _IOR('R', 210, int) +#define RFCOMMGETDEVINFO _IOR('R', 211, int) +#define RFCOMM_REUSE_DLC 0 +#define RFCOMM_RELEASE_ONHUP 1 +#define RFCOMM_HANGUP_NOW 2 +#define RFCOMM_TTY_ATTACHED 3 +#ifdef __cplusplus +#endif +struct sockaddr_rc { + sa_family_t rc_family; + bdaddr_t rc_bdaddr; + uint8_t rc_channel; +}; +#endif |