summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac2
-rw-r--r--sd/CppunitTest_sd_uimpress.mk11
-rw-r--r--sd/Library_sd.mk20
-rw-r--r--sd/source/ui/remotecontrol/BluetoothServer.cxx116
4 files changed, 143 insertions, 6 deletions
diff --git a/configure.ac b/configure.ac
index 1436110f4900..a23e8d4e43c7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -9654,7 +9654,7 @@ if test -n "$enable_sdremote" -a "$enable_sdremote" != "no"; then
# If not explicitly enabled or disabled, default
if test -z "$enable_sdremote_bluetooth"; then
case "$OS" in
- LINUX|WNT)
+ LINUX|MACOSX|WNT)
# Default to yes for these
enable_sdremote_bluetooth=yes
;;
diff --git a/sd/CppunitTest_sd_uimpress.mk b/sd/CppunitTest_sd_uimpress.mk
index f41a4fb90fe5..64e21ccfdfe9 100644
--- a/sd/CppunitTest_sd_uimpress.mk
+++ b/sd/CppunitTest_sd_uimpress.mk
@@ -81,6 +81,17 @@ $(eval $(call gb_CppunitTest_use_system_win32_libs,sd_uimpress,\
))
endif
+ifeq ($(OS),MACOSX)
+$(eval $(call gb_CppunitTest_add_libs,sd_uimpress,\
+ -lobjc \
+))
+
+$(eval $(call gb_CppunitTest_use_system_darwin_frameworks,sd_uimpress,\
+ Foundation \
+ IOBluetooth \
+))
+endif
+
$(eval $(call gb_CppunitTest_use_externals,sd_uimpress,\
boost_headers \
gtk \
diff --git a/sd/Library_sd.mk b/sd/Library_sd.mk
index e2640dd79804..679c83670fda 100644
--- a/sd/Library_sd.mk
+++ b/sd/Library_sd.mk
@@ -532,10 +532,30 @@ $(eval $(call gb_Library_add_defs,sd,\
))
ifeq ($(ENABLE_SDREMOTE_BLUETOOTH),YES)
+
+ifeq (,$(filter IOS MACOSX,$(OS)))
+
$(eval $(call gb_Library_add_exception_objects,sd,\
sd/source/ui/remotecontrol/BluetoothServer \
))
+else
+
+$(eval $(call gb_Library_add_objcxxobjects,sd,\
+ sd/source/ui/remotecontrol/BluetoothServer \
+))
+
+$(eval $(call gb_Library_add_libs,sd,\
+ -lobjc \
+))
+
+$(eval $(call gb_Library_use_system_darwin_frameworks,sd,\
+ Foundation \
+ IOBluetooth \
+))
+
+endif
+
$(eval $(call gb_Library_add_defs,sd,\
-DENABLE_SDREMOTE_BLUETOOTH \
))
diff --git a/sd/source/ui/remotecontrol/BluetoothServer.cxx b/sd/source/ui/remotecontrol/BluetoothServer.cxx
index 735777ff77b4..7677e64b185a 100644
--- a/sd/source/ui/remotecontrol/BluetoothServer.cxx
+++ b/sd/source/ui/remotecontrol/BluetoothServer.cxx
@@ -8,7 +8,7 @@
*/
#include "BluetoothServer.hxx"
-#include "BluetoothServiceRecord.hxx"
+
#include <stdio.h>
#include <sal/log.hxx>
@@ -28,6 +28,7 @@
#ifndef DBusGObjectPath
#define DBusGObjectPath char // DBusGObjectPath is only present in newer version of dbus-glib
#endif
+ #include "BluetoothServiceRecord.hxx"
#endif
#ifdef WIN32
@@ -38,6 +39,12 @@
#include <ws2bth.h>
#endif
+#ifdef MACOSX
+ #include <premac.h>
+ #include <IOBluetooth/IOBluetooth.h>
+ #include <postmac.h>
+#endif
+
#ifdef __MINGW32__
// Value taken from http://msdn.microsoft.com/en-us/library/windows/desktop/ms738518%28v=vs.85%29.aspx
#define NS_BTH 16
@@ -243,7 +250,6 @@ void BluetoothServer::setDiscoverable( bool aDiscoverable )
dbus_g_connection_unref( aConnection );
#else // defined(LINUX) && defined(ENABLE_DBUS)
(void) aDiscoverable; // avoid warnings
- return;
#endif
}
@@ -337,7 +343,6 @@ void SAL_CALL BluetoothServer::run()
}
}
-// LINUX && ENABLE_DBUS
#elif defined(WIN32)
WORD wVersionRequested;
WSADATA wsaData;
@@ -430,8 +435,109 @@ void SAL_CALL BluetoothServer::run()
}
}
-// WIN32
-#else // !((defined(LINUX) && !defined(__FreeBSD_kernel__)) && defined(ENABLE_DBUS)) && !defined(WIN32)
+#elif defined(MACOSX)
+ // Build up dictionary at run-time instead of bothering with a
+ // .plist file, using the Objective-C API
+
+ // Compare to BluetoothServiceRecord.hxx
+
+ NSDictionary *dict =
+ [NSDictionary dictionaryWithObjectsAndKeys:
+
+ // Service class ID list
+ [NSArray arrayWithObject:
+ [IOBluetoothSDPUUID uuid16: kBluetoothSDPUUID16ServiceClassSerialPort]],
+ @"0001 - ServiceClassIDList",
+
+ // Protocol descriptor list
+ [NSArray arrayWithObjects:
+ [NSArray arrayWithObject: [IOBluetoothSDPUUID uuid16: kBluetoothSDPUUID16L2CAP]],
+ [NSArray arrayWithObjects:
+ [IOBluetoothSDPUUID uuid16: kBluetoothL2CAPPSMRFCOMM],
+ [NSDictionary dictionaryWithObjectsAndKeys:
+ [NSNumber numberWithInt: 1],
+ @"DataElementSize",
+ [NSNumber numberWithInt: 1],
+ @"DataElementType",
+ [NSNumber numberWithInt: 5], // RFCOMM port number, will be replaced if necessary automatically
+ @"DataElementValue",
+ nil],
+ nil],
+ nil],
+ @"0004 - Protocol descriptor list",
+
+ // Browse group list
+ [NSArray arrayWithObject:
+ [IOBluetoothSDPUUID uuid16: kBluetoothSDPUUID16ServiceClassPublicBrowseGroup]],
+ @"0005 - BrowseGroupList",
+
+ // Language base attribute ID list
+ [NSArray arrayWithObjects:
+ [NSData dataWithBytes: "en" length: 2],
+ [NSDictionary dictionaryWithObjectsAndKeys:
+ [NSNumber numberWithInt: 2],
+ @"DataElementSize",
+ [NSNumber numberWithInt: 1],
+ @"DataElementType",
+ [NSNumber numberWithInt: 0x006a], // encoding
+ @"DataElementValue",
+ nil],
+ [NSDictionary dictionaryWithObjectsAndKeys:
+ [NSNumber numberWithInt: 2],
+ @"DataElementSize",
+ [NSNumber numberWithInt: 1],
+ @"DataElementType",
+ [NSNumber numberWithInt: 0x0100], // offset
+ @"DataElementValue",
+ nil],
+ nil],
+ @"0006 - LanguageBaseAttributeIDList",
+
+ // Bluetooth profile descriptor list
+ [NSArray arrayWithObject:
+ [NSArray arrayWithObjects:
+ [IOBluetoothSDPUUID uuid16: kBluetoothSDPUUID16ServiceClassSerialPort],
+ [NSDictionary dictionaryWithObjectsAndKeys:
+ [NSNumber numberWithInt: 2],
+ @"DataElementSize",
+ [NSNumber numberWithInt: 1],
+ @"DataElementType",
+ [NSNumber numberWithInt: 0x0100], // version number ?
+ @"DataElementValue",
+ nil],
+ nil]],
+ @"0009 - BluetoothProfileDescriptorList",
+
+ // Attributes pointed to by the LanguageBaseAttributeIDList
+ @"LibreOffice Impress Remote Control",
+ @"0100 - ServiceName",
+ @"The Document Foundation",
+ @"0102 - ProviderName",
+ nil];
+
+ // Create service
+ IOBluetoothSDPServiceRecordRef serviceRecordRef;
+ IOReturn rc = IOBluetoothAddServiceDict((CFDictionaryRef) dict, &serviceRecordRef);
+
+ SAL_INFO("sd.bluetooth", "IOBluetoothAddServiceDict returned " << rc);
+
+ if (rc == kIOReturnSuccess)
+ {
+ IOBluetoothSDPServiceRecord *serviceRecord =
+ [IOBluetoothSDPServiceRecord withSDPServiceRecordRef: serviceRecordRef];
+
+ BluetoothRFCOMMChannelID channelID;
+ [serviceRecord getRFCOMMChannelID: &channelID];
+
+ BluetoothSDPServiceRecordHandle serviceRecordHandle;
+ [serviceRecord getServiceRecordHandle: &serviceRecordHandle];
+
+ // Do more...
+
+ (void) serviceRecord;
+ }
+ (void) mpCommunicators;
+#else
(void) mpCommunicators; // avoid warnings about unused member
#endif
}