diff options
-rw-r--r-- | DOCS/interface-changes.rst | 3 | ||||
-rw-r--r-- | DOCS/man/input.rst | 3 | ||||
-rw-r--r-- | DOCS/man/options.rst | 4 | ||||
-rw-r--r-- | DOCS/mplayer-changes.rst | 3 | ||||
-rwxr-xr-x | ci/build-macos.sh | 2 | ||||
-rw-r--r-- | etc/builtin.conf | 1 | ||||
-rw-r--r-- | etc/input.conf | 16 | ||||
-rw-r--r-- | etc/mplayer-input.conf | 19 | ||||
-rw-r--r-- | input/input.c | 18 | ||||
-rw-r--r-- | input/keycodes.c | 15 | ||||
-rw-r--r-- | input/keycodes.h | 17 | ||||
-rw-r--r-- | osdep/ar/HIDRemote.h | 378 | ||||
-rw-r--r-- | osdep/ar/HIDRemote.m | 2033 | ||||
-rw-r--r-- | osdep/macosx_events.h | 3 | ||||
-rw-r--r-- | osdep/macosx_events.m | 65 | ||||
-rw-r--r-- | osdep/macosx_events_objc.h | 3 | ||||
-rw-r--r-- | wscript | 5 | ||||
-rw-r--r-- | wscript_build.py | 1 |
18 files changed, 9 insertions, 2580 deletions
diff --git a/DOCS/interface-changes.rst b/DOCS/interface-changes.rst index 23e71b3a2d..59e00130c4 100644 --- a/DOCS/interface-changes.rst +++ b/DOCS/interface-changes.rst @@ -59,6 +59,9 @@ Interface changes setting the properties to non-existing tracks may report it as selected track for a small time window, until it's forced back to "no". The exact details how this is handled may change in the future. + - remove old Apple Remote support, including --input-appleremote + - add MediaPlayer support and remove the old Media Key event tap on macOS. + this possibly also re-adds the Apple Remote support --- mpv 0.30.0 --- - add `--d3d11-output-format` to enable explicit selection of a D3D11 swap chain format. diff --git a/DOCS/man/input.rst b/DOCS/man/input.rst index 323a961804..3d9263ee3f 100644 --- a/DOCS/man/input.rst +++ b/DOCS/man/input.rst @@ -145,9 +145,6 @@ Comments on some symbolic names: ``GAMEPAD_*`` Keys emitted by the SDL gamepad backend. -``AR_*`` - Keys emitted by the OSX-only Apple Remote code. - ``UNMAPPED`` Pseudo-key that matches any unmapped key. (You should probably avoid this if possible, because it might change behavior or get removed in the future.) diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst index c2fd9136a3..be9177b09a 100644 --- a/DOCS/man/options.rst +++ b/DOCS/man/options.rst @@ -3484,10 +3484,6 @@ Input See `JSON IPC`_ for details. -``--input-appleremote=<yes|no>`` - (OS X only) - Enable/disable Apple Remote support. Enabled by default (except for libmpv). - ``--input-gamepad=<yes|no>`` Enable/disable SDL2 Gamepad support. Disabled by default. diff --git a/DOCS/mplayer-changes.rst b/DOCS/mplayer-changes.rst index 66cacb3205..d00b520279 100644 --- a/DOCS/mplayer-changes.rst +++ b/DOCS/mplayer-changes.rst @@ -144,7 +144,6 @@ Mac OS X * Native OpenGL backend. * Cocoa event loop is independent from MPlayer's event loop, so user actions like accessing menus and live resizing do not block the playback. -* Apple Remote support. * Media Keys support. * VDA support using libavcodec hwaccel API instead of FFmpeg's decoder with up to 2-2.5x reduction in CPU usage. @@ -248,7 +247,7 @@ Command Line Switches ``-msglevel`` ``--msg-level`` (changed semantics) ``-msgmodule`` ``--msg-module`` ``-name`` ``--x11-name`` - ``-noar`` ``--no-input-appleremote`` + ``-noar`` ``(removed; replaced by MediaPlayer framework)`` ``-noautosub`` ``--no-sub-auto`` ``-noconsolecontrols`` ``--no-input-terminal`` ``-nosound`` ``--no-audio`` diff --git a/ci/build-macos.sh b/ci/build-macos.sh index 4984e3ba81..7b6eda7356 100755 --- a/ci/build-macos.sh +++ b/ci/build-macos.sh @@ -19,7 +19,7 @@ PKG_CONFIG_PATH="${FFMPEG_SYSROOT}/lib/pkgconfig/" CC="${CC}" CXX="${CXX}" pytho --variant="${MPV_VARIANT}" \ --prefix="${MPV_INSTALL_PREFIX}" \ --enable-{gl,iconv,lcms2,libass,libass-osd,libmpv-shared,lua,jpeg,plain-gl,zlib} \ - --enable-{apple-remote,cocoa,coreaudio,gl-cocoa,macos-cocoa-cb,macos-touchbar,videotoolbox-gl} + --enable-{cocoa,coreaudio,gl-cocoa,macos-cocoa-cb,macos-touchbar,videotoolbox-gl} python3 ./waf build --variant="${MPV_VARIANT}" -j4 diff --git a/etc/builtin.conf b/etc/builtin.conf index a5e174e964..6984d57769 100644 --- a/etc/builtin.conf +++ b/etc/builtin.conf @@ -27,7 +27,6 @@ osc=no input-default-bindings=no input-vo-keyboard=no # OSX/Cocoa global input hooks -input-appleremote=no input-media-keys=no [encoding] diff --git a/etc/input.conf b/etc/input.conf index f60ed51bd4..9c870ea42b 100644 --- a/etc/input.conf +++ b/etc/input.conf @@ -168,22 +168,6 @@ #F8 show_text ${playlist} # show playlist #F9 show_text ${track-list} # show list of audio/sub streams -# Apple Remote section -#AR_PLAY cycle pause -#AR_PLAY_HOLD quit -#AR_CENTER cycle pause -#AR_CENTER_HOLD quit -#AR_NEXT seek 10 -#AR_NEXT_HOLD seek 120 -#AR_PREV seek -10 -#AR_PREV_HOLD seek -120 -#AR_MENU show-progress -#AR_MENU_HOLD cycle mute -#AR_VUP add volume 2 -#AR_VUP_HOLD add chapter 1 -#AR_VDOWN add volume -2 -#AR_VDOWN_HOLD add chapter -1 - # # Legacy bindings (may or may not be removed in the future) # diff --git a/etc/mplayer-input.conf b/etc/mplayer-input.conf index 742913c0fe..2d23e47477 100644 --- a/etc/mplayer-input.conf +++ b/etc/mplayer-input.conf @@ -74,25 +74,6 @@ l cycle tv-channel -1 n cycle tv-norm #b tv_step_chanlist -## -## Apple Remote section -## -## To use OSD menu with Apple Remote, set key AR_MENU to any OSD menu command, -## or just comment out the 'AR_MENU osd' line and uncomment the line after it. -## - -AR_PLAY cycle pause -AR_PLAY_HOLD quit -AR_NEXT seek 30 -AR_NEXT_HOLD seek 120 -AR_PREV seek -10 -AR_PREV_HOLD seek -120 -#AR_MENU menu up -#AR_MENU menu cancel -AR_MENU_HOLD cycle mute -AR_VUP add volume 1 -AR_VDOWN add volume -1 - #? add chapter -1 # skip to previous dvd chapter #? add chapter +1 # next diff --git a/input/input.c b/input/input.c index 084a61a2eb..1bc8e303f6 100644 --- a/input/input.c +++ b/input/input.c @@ -196,14 +196,14 @@ const struct m_sub_options input_config = { OPT_FLAG("input-cursor", enable_mouse_movements, 0), OPT_FLAG("input-vo-keyboard", vo_key_input, 0), OPT_FLAG("input-media-keys", use_media_keys, 0), -#if HAVE_COCOA - OPT_FLAG("input-appleremote", use_appleremote, 0), -#endif #if HAVE_SDL2_GAMEPAD OPT_FLAG("input-gamepad", use_gamepad, 0), #endif OPT_FLAG("window-dragging", allow_win_drag, 0), OPT_REPLACED("input-x11-keyboard", "input-vo-keyboard"), +#if HAVE_COCOA + OPT_REMOVED("input-appleremote", "replaced by MediaPlayer support"), +#endif {0} }, .size = sizeof(struct input_opts), @@ -215,9 +215,6 @@ const struct m_sub_options input_config = { .use_alt_gr = 1, .enable_mouse_movements = 1, .use_media_keys = 1, -#if HAVE_COCOA - .use_appleremote = 1, -#endif .default_bindings = 1, .vo_key_input = 1, .allow_win_drag = 1, @@ -1335,15 +1332,6 @@ static void reload_opts(struct input_ctx *ictx, bool shutdown) #if HAVE_COCOA struct input_opts *opts = ictx->opts; - if (ictx->using_ar != (opts->use_appleremote && !shutdown)) { - ictx->using_ar = !ictx->using_ar; - if (ictx->using_ar) { - cocoa_init_apple_remote(); - } else { - cocoa_uninit_apple_remote(); - } - } - if (ictx->using_cocoa_media_keys != (opts->use_media_keys && !shutdown)) { ictx->using_cocoa_media_keys = !ictx->using_cocoa_media_keys; if (ictx->using_cocoa_media_keys) { diff --git a/input/keycodes.c b/input/keycodes.c index 3d7fd09d11..bcf59c74a1 100644 --- a/input/keycodes.c +++ b/input/keycodes.c @@ -102,21 +102,6 @@ static const struct key_name key_names[] = { { MP_MBTN_MID_DBL, "MBTN_MID_DBL" }, { MP_MBTN_RIGHT_DBL, "MBTN_RIGHT_DBL" }, - { MP_AR_PLAY, "AR_PLAY" }, - { MP_AR_PLAY_HOLD, "AR_PLAY_HOLD" }, - { MP_AR_CENTER, "AR_CENTER" }, - { MP_AR_CENTER_HOLD, "AR_CENTER_HOLD" }, - { MP_AR_NEXT, "AR_NEXT" }, - { MP_AR_NEXT_HOLD, "AR_NEXT_HOLD" }, - { MP_AR_PREV, "AR_PREV" }, - { MP_AR_PREV_HOLD, "AR_PREV_HOLD" }, - { MP_AR_MENU, "AR_MENU" }, - { MP_AR_MENU_HOLD, "AR_MENU_HOLD" }, - { MP_AR_VUP, "AR_VUP" }, - { MP_AR_VUP_HOLD, "AR_VUP_HOLD" }, - { MP_AR_VDOWN, "AR_VDOWN" }, - { MP_AR_VDOWN_HOLD, "AR_VDOWN_HOLD" }, - { MP_KEY_GAMEPAD_ACTION_DOWN, "GAMEPAD_ACTION_DOWN" }, { MP_KEY_GAMEPAD_ACTION_RIGHT, "GAMEPAD_ACTION_RIGHT" }, { MP_KEY_GAMEPAD_ACTION_LEFT, "GAMEPAD_ACTION_LEFT" }, diff --git a/input/keycodes.h b/input/keycodes.h index 65c31b4d61..a75099f2f2 100644 --- a/input/keycodes.h +++ b/input/keycodes.h @@ -141,23 +141,6 @@ #define MP_KEY_MOUSE_BTN_COUNT (MP_MBTN_END - MP_MBTN_BASE) -// Apple Remote input module -#define MP_AR_BASE (MP_KEY_BASE+0xE0) -#define MP_AR_PLAY (MP_AR_BASE + 0) -#define MP_AR_PLAY_HOLD (MP_AR_BASE + 1) -#define MP_AR_CENTER (MP_AR_BASE + 2) -#define MP_AR_CENTER_HOLD (MP_AR_BASE + 3) -#define MP_AR_NEXT (MP_AR_BASE + 4) -#define MP_AR_NEXT_HOLD (MP_AR_BASE + 5) -#define MP_AR_PREV (MP_AR_BASE + 6) -#define MP_AR_PREV_HOLD (MP_AR_BASE + 7) -#define MP_AR_MENU (MP_AR_BASE + 8) -#define MP_AR_MENU_HOLD (MP_AR_BASE + 9) -#define MP_AR_VUP (MP_AR_BASE + 10) -#define MP_AR_VUP_HOLD (MP_AR_BASE + 11) -#define MP_AR_VDOWN (MP_AR_BASE + 12) -#define MP_AR_VDOWN_HOLD (MP_AR_BASE + 13) - /* game controller keys */ #define MP_KEY_GAMEPAD (MP_KEY_BASE+0xF0) #define MP_KEY_GAMEPAD_ACTION_DOWN (MP_KEY_GAMEPAD+0) diff --git a/osdep/ar/HIDRemote.h b/osdep/ar/HIDRemote.h deleted file mode 100644 index 35db408b40..0000000000 --- a/osdep/ar/HIDRemote.h +++ /dev/null @@ -1,378 +0,0 @@ -// -// HIDRemote.h -// HIDRemote V1.2 -// -// Created by Felix Schwarz on 06.04.07. -// Copyright 2007-2011 IOSPIRIT GmbH. All rights reserved. -// -// The latest version of this class is available at -// http://www.iospirit.com/developers/hidremote/ -// -// ** LICENSE ************************************************************************* -// -// Copyright (c) 2007-2011 IOSPIRIT GmbH (http://www.iospirit.com/) -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistributions of source code must retain the above copyright notice, this list -// of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright notice, this -// list of conditions and the following disclaimer in the documentation and/or other -// materials provided with the distribution. -// -// * Neither the name of IOSPIRIT GmbH nor the names of its contributors may be used to -// endorse or promote products derived from this software without specific prior -// written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT -// SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -// TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -// DAMAGE. -// -// ************************************************************************************ - - -// ************************************************************************************ -// ********************************** DOCUMENTATION *********************************** -// ************************************************************************************ -// -// - a reference is available at http://www.iospirit.com/developers/hidremote/reference/ -// - for a guide, please see http://www.iospirit.com/developers/hidremote/guide/ -// -// ************************************************************************************ - - -#import <Cocoa/Cocoa.h> - -#include <Carbon/Carbon.h> - -#include <unistd.h> -#include <mach/mach.h> -#include <sys/types.h> - -#include <IOKit/IOKitLib.h> -#include <IOKit/IOCFPlugIn.h> -#include <IOKit/IOMessage.h> -#include <IOKit/hid/IOHIDKeys.h> -#include <IOKit/hid/IOHIDLib.h> -#include <IOKit/hid/IOHIDUsageTables.h> -#include <IOKit/hidsystem/IOHIDLib.h> -#include <IOKit/hidsystem/IOHIDParameter.h> -#include <IOKit/hidsystem/IOHIDShared.h> - -#pragma mark -- Enums / Codes -- - -typedef enum -{ - kHIDRemoteModeNone = 0L, - kHIDRemoteModeShared, // Share the remote with others - let's you listen to the remote control events as long as no one has an exclusive lock on it - // (RECOMMENDED ONLY FOR SPECIAL PURPOSES) - - kHIDRemoteModeExclusive, // Try to acquire an exclusive lock on the remote (NOT RECOMMENDED) - - kHIDRemoteModeExclusiveAuto // Try to acquire an exclusive lock on the remote whenever the application has focus. Temporarily release control over the - // remote when another application has focus (RECOMMENDED) -} HIDRemoteMode; - -typedef enum -{ - /* A code reserved for "no button" (needed for tracking) */ - kHIDRemoteButtonCodeNone = 0L, - - /* Standard codes - available for white plastic and aluminum remote */ - kHIDRemoteButtonCodeUp, - kHIDRemoteButtonCodeDown, - kHIDRemoteButtonCodeLeft, - kHIDRemoteButtonCodeRight, - kHIDRemoteButtonCodeCenter, - kHIDRemoteButtonCodeMenu, - - /* Extra codes - Only available for the new aluminum version of the remote */ - kHIDRemoteButtonCodePlay, - - /* Masks */ - kHIDRemoteButtonCodeCodeMask = 0xFFL, - kHIDRemoteButtonCodeHoldMask = (1L << 16L), - kHIDRemoteButtonCodeSpecialMask = (1L << 17L), - kHIDRemoteButtonCodeAluminumMask = (1L << 21L), // PRIVATE - only used internally - - /* Hold button standard codes - available for white plastic and aluminum remote */ - kHIDRemoteButtonCodeUpHold = (kHIDRemoteButtonCodeHoldMask|kHIDRemoteButtonCodeUp), - kHIDRemoteButtonCodeDownHold = (kHIDRemoteButtonCodeHoldMask|kHIDRemoteButtonCodeDown), - kHIDRemoteButtonCodeLeftHold = (kHIDRemoteButtonCodeHoldMask|kHIDRemoteButtonCodeLeft), - kHIDRemoteButtonCodeRightHold = (kHIDRemoteButtonCodeHoldMask|kHIDRemoteButtonCodeRight), - kHIDRemoteButtonCodeCenterHold = (kHIDRemoteButtonCodeHoldMask|kHIDRemoteButtonCodeCenter), - kHIDRemoteButtonCodeMenuHold = (kHIDRemoteButtonCodeHoldMask|kHIDRemoteButtonCodeMenu), - - /* Hold button extra codes - Only available for aluminum version of the remote */ - kHIDRemoteButtonCodePlayHold = (kHIDRemoteButtonCodeHoldMask|kHIDRemoteButtonCodePlay), - - /* DEPRECATED codes - compatibility with HIDRemote 1.0 */ - kHIDRemoteButtonCodePlus = kHIDRemoteButtonCodeUp, - kHIDRemoteButtonCodePlusHold = kHIDRemoteButtonCodeUpHold, - kHIDRemoteButtonCodeMinus = kHIDRemoteButtonCodeDown, - kHIDRemoteButtonCodeMinusHold = kHIDRemoteButtonCodeDownHold, - kHIDRemoteButtonCodePlayPause = kHIDRemoteButtonCodeCenter, - kHIDRemoteButtonCodePlayPauseHold = kHIDRemoteButtonCodeCenterHold, - - /* Special purpose codes */ - kHIDRemoteButtonCodeIDChanged = (kHIDRemoteButtonCodeSpecialMask|(1L << 18L)), // (the ID of the connected remote has changed, you can safely ignore this) - #ifdef _HIDREMOTE_EXTENSIONS - #define _HIDREMOTE_EXTENSIONS_SECTION 1 - #include "HIDRemoteAdditions.h" - #undef _HIDREMOTE_EXTENSIONS_SECTION - #endif /* _HIDREMOTE_EXTENSIONS */ -} HIDRemoteButtonCode; - -typedef enum -{ - kHIDRemoteModelUndetermined = 0L, // Assume a white plastic remote - kHIDRemoteModelWhitePlastic, // Signal *likely* to be coming from a white plastic remote - kHIDRemoteModelAluminum // Signal *definitely* coming from an aluminum remote -} HIDRemoteModel; - -typedef enum -{ - kHIDRemoteAluminumRemoteSupportLevelNone = 0L, // This system has no support for the Aluminum Remote at all - kHIDRemoteAluminumRemoteSupportLevelEmulation, // This system possibly has support for the Aluminum Remote (via emulation) - kHIDRemoteAluminumRemoteSupportLevelNative // This system has native support for the Aluminum Remote -} HIDRemoteAluminumRemoteSupportLevel; - -@class HIDRemote; - -#pragma mark -- Delegate protocol (mandatory) -- -@protocol HIDRemoteDelegate - -// Notification of button events -- (void)hidRemote:(HIDRemote *)hidRemote // The instance of HIDRemote sending this - eventWithButton:(HIDRemoteButtonCode)buttonCode // Event for the button specified by code - isPressed:(BOOL)isPressed // The button was pressed (YES) / released (NO) - fromHardwareWithAttributes:(NSMutableDictionary *)attributes; // Information on the device this event comes from - -@optional - -// Notification of ID changes -- (void)hidRemote:(HIDRemote *)hidRemote // Invoked when the user switched to a remote control with a different ID - remoteIDChangedOldID:(SInt32)old - newID:(SInt32)newID - forHardwareWithAttributes:(NSMutableDictionary *)attributes; - -// Notification about hardware additions/removals -- (void)hidRemote:(HIDRemote *)hidRemote // Invoked when new hardware was found / added to HIDRemote's pool - foundNewHardwareWithAttributes:(NSMutableDictionary *)attributes; - -- (void)hidRemote:(HIDRemote *)hidRemote // Invoked when initialization of new hardware as requested failed - failedNewHardwareWithError:(NSError *)error; - -- (void)hidRemote:(HIDRemote *)hidRemote // Invoked when hardware was removed from HIDRemote's pool - releasedHardwareWithAttributes:(NSMutableDictionary *)attributes; - -// ### WARNING: Unless you know VERY PRECISELY what you are doing, do not implement any of the delegate methods below. ### - -// Matching of newly found receiver hardware -- (BOOL)hidRemote:(HIDRemote *)hidRemote // Invoked when new hardware is inspected - inspectNewHardwareWithService:(io_service_t)service // - prematchResult:(BOOL)prematchResult; // Return YES if HIDRemote should go on with this hardware and try - // to use it, or NO if it should not be pursued further. - -// Exlusive lock lending -- (BOOL)hidRemote:(HIDRemote *)hidRemote - lendExclusiveLockToApplicationWithInfo:(NSDictionary *)applicationInfo; - -- (void)hidRemote:(HIDRemote *)hidRemote - exclusiveLockReleasedByApplicationWithInfo:(NSDictionary *)applicationInfo; - -- (BOOL)hidRemote:(HIDRemote *)hidRemote - shouldRetryExclusiveLockWithInfo:(NSDictionary *)applicationInfo; - -@end - - -#pragma mark -- Actual header file for class -- - -@interface HIDRemote : NSObject -{ - // IOMasterPort - mach_port_t _masterPort; - - // Notification ports - IONotificationPortRef _notifyPort; - CFRunLoopSourceRef _notifyRLSource; - - // Matching iterator - io_iterator_t _matchingServicesIterator; - - // SecureInput notification - io_object_t _secureInputNotification; - - // Service attributes - NSMutableDictionary *_serviceAttribMap; - - // Mode - HIDRemoteMode _mode; - BOOL _autoRecover; - NSTimer *_autoRecoveryTimer; - - // Delegate - NSObject <HIDRemoteDelegate> *_delegate; - - // Last seen ID and remote model - SInt32 _lastSeenRemoteID; - HIDRemoteModel _lastSeenModel; - SInt32 _lastSeenModelRemoteID; - - // Unused button codes - NSArray *_unusedButtonCodes; - - // Simulate Plus/Minus Hold - BOOL _simulateHoldEvents; - - // SecureEventInput workaround - BOOL _secureEventInputWorkAround; - UInt64 _lastSecureEventInputPIDSum; - uid_t _lastFrontUserSession; - - // Exclusive lock lending - BOOL _exclusiveLockLending; - BOOL _sendExclusiveResourceReuseNotification; - NSNumber *_waitForReturnByPID; - NSNumber *_returnToPID; - BOOL _isRestarting; - - // Status notifications - BOOL _sendStatusNotifications; - NSString *_pidString; - - // Status - BOOL _applicationIsTerminating; - BOOL _isStopping; - - // Thread safety - #ifdef HIDREMOTE_THREADSAFETY_HARDENED_NOTIFICATION_HANDLING /* #define HIDREMOTE_THREADSAFETY_HARDENED_NOTIFICATION_HANDLING if you're running your HIDRemote instance on a background thread (requires OS X 10.5 or later) */ - NSThread *_runOnThread; - #endif -} - -#pragma mark -- PUBLIC: Shared HID Remote -- -+ (HIDRemote *)sharedHIDRemote; - -#pragma mark -- PUBLIC: System Information -- -+ (BOOL)isCandelairInstalled; -+ (BOOL)isCandelairInstallationRequiredForRemoteMode:(HIDRemoteMode)remoteMode; -- (HIDRemoteAluminumRemoteSupportLevel)aluminiumRemoteSystemSupportLevel; - -#pragma mark -- PUBLIC: Interface / API -- -- (BOOL)startRemoteControl:(HIDRemoteMode)hidRemoteMode; -- (void)stopRemoteControl; - -- (BOOL)isStarted; -- (HIDRemoteMode)startedInMode; - -- (unsigned)activeRemoteControlCount; - -- (SInt32)lastSeenRemoteControlID; - -- (void)setLastSeenModel:(HIDRemoteModel)aModel; -- (HIDRemoteModel)lastSeenModel; - -- (void)setDelegate:(NSObject <HIDRemoteDelegate> *)newDelegate; -- (NSObject <HIDRemoteDelegate> *)delegate; - -- (void)setSimulateHoldEvents:(BOOL)newSimulateHoldEvents; -- (BOOL)simulateHoldEvents; - -- (void)setUnusedButtonCodes:(NSArray *)newArrayWithUnusedButtonCodesAsNSNumbers; -- (NSArray *)unusedButtonCodes; - -#pragma mark -- PUBLIC: Expert APIs -- -- (void)setEnableSecureEventInputWorkaround:(BOOL)newEnableSecureEventInputWorkaround; -- (BOOL)enableSecureEventInputWorkaround; - -- (void)setExclusiveLockLendingEnabled:(BOOL)newExclusiveLockLendingEnabled; -- (BOOL)exclusiveLockLendingEnabled; - -- (BOOL)isApplicationTerminating; -- (BOOL)isStopping; - -#pragma mark -- PRIVATE: HID Event handling -- -- (void)_handleButtonCode:(HIDRemoteButtonCode)buttonCode isPressed:(BOOL)isPressed hidAttribsDict:(NSMutableDictionary *)hidAttribsDict; -- (void)_sendButtonCode:(HIDRemoteButtonCode)buttonCode isPressed:(BOOL)isPressed hidAttribsDict:(NSMutableDictionary *)hidAttribsDict; -- (void)_hidEventFor:(io_service_t)hidDevice from:(IOHIDQueueInterface **)interface withResult:(IOReturn)result; - -#pragma mark -- PRIVATE: Service setup and destruction -- -- (BOOL)_prematchService:(io_object_t)service; -- (HIDRemoteButtonCode)buttonCodeForUsage:(unsigned int)usage usagePage:(unsigned int)usagePage; -- (BOOL)_setupService:(io_object_t)service; -- (void)_destructService:(io_object_t)service; - -#pragma mark -- PRIVATE: Distributed notifiations handling -- -- (void)_postStatusWithAction:(NSString *)action; -- (void)_handleNotifications:(NSNotification *)notification; -- (void)_setSendStatusNotifications:(BOOL)doSend; -- (BOOL)_sendStatusNotifications; - -#pragma mark -- PRIVATE: Application becomes active / inactive handling for kHIDRemoteModeExclusiveAuto -- -- (void)_appStatusChanged:(NSNotification *)notification; -- (void)_delayedAutoRecovery:(NSTimer *)aTimer; - -#pragma mark -- PRIVATE: Notification handling -- -- (void)_serviceMatching:(io_iterator_t)iterator; -- (void)_serviceNotificationFor:(io_service_t)service messageType:(natural_t)messageType messageArgument:(void *)messageArgument; -- (void)_updateSessionInformation; -- (void)_secureInputNotificationFor:(io_service_t)service messageType:(natural_t)messageType messageArgument:(void *)messageArgument; - -@end - -#pragma mark -- Information attribute keys -- -extern NSString *kHIDRemoteManufacturer; -extern NSString *kHIDRemoteProduct; -extern NSString *kHIDRemoteTransport; - -#pragma mark -- Internal/Expert attribute keys (AKA: don't touch these unless you really, really, REALLY know what you do) -- -extern NSString *kHIDRemoteCFPluginInterface; -extern NSString *kHIDRemoteHIDDeviceInterface; -extern NSString *kHIDRemoteCookieButtonCodeLUT; -extern NSString *kHIDRemoteHIDQueueInterface; -extern NSString *kHIDRemoteServiceNotification; -extern NSString *kHIDRemoteCFRunLoopSource; -extern NSString *kHIDRemoteLastButtonPressed; -extern NSString *kHIDRemoteService; -extern NSString *kHIDRemoteSimulateHoldEventsTimer; -extern NSString *kHIDRemoteSimulateHoldEventsOriginButtonCode; -extern NSString *kHIDRemoteAluminumRemoteSupportLevel; -extern NSString *kHIDRemoteAluminumRemoteSupportOnDemand; - -#pragma mark -- Distributed notifications -- -extern NSString *kHIDRemoteDNHIDRemotePing; -extern NSString *kHIDRemoteDNHIDRemoteRetry; -extern NSString *kHIDRemoteDNHIDRemoteStatus; - -extern NSString *kHIDRemoteDNHIDRemoteRetryGlobalObject; - -#pragma mark -- Distributed notifications userInfo keys and values -- -extern NSString *kHIDRemoteDNStatusHIDRemoteVersionKey; -extern NSString *kHIDRemoteDNStatusPIDKey; -extern NSString *kHIDRemoteDNStatusModeKey; -extern NSString *kHIDRemoteDNStatusUnusedButtonCodesKey; -extern NSString *kHIDRemoteDNStatusRemoteControlCountKey; -extern NSString *kHIDRemoteDNStatusReturnToPIDKey; -extern NSString *kHIDRemoteDNStatusActionKey; -extern NSString *kHIDRemoteDNStatusActionStart; -extern NSString *kHIDRemoteDNStatusActionStop; -extern NSString *kHIDRemoteDNStatusActionUpdate; -extern NSString *kHIDRemoteDNStatusActionNoNeed; - -#pragma mark -- Driver compatibility flags -- -typedef enum -{ - kHIDRemoteCompatibilityFlagsStandardHIDRemoteDevice = 1L, -} HIDRemoteCompatibilityFlags; diff --git a/osdep/ar/HIDRemote.m b/osdep/ar/HIDRemote.m deleted file mode 100644 index 8e6c913d46..0000000000 --- a/osdep/ar/HIDRemote.m +++ /dev/null @@ -1,2033 +0,0 @@ -// -// HIDRemote.m -// HIDRemote V1.2 (27th May 2011) -// -// Created by Felix Schwarz on 06.04.07. -// Copyright 2007-2011 IOSPIRIT GmbH. All rights reserved. -// -// The latest version of this class is available at -// http://www.iospirit.com/developers/hidremote/ -// -// ** LICENSE ************************************************************************* -// -// Copyright (c) 2007-2011 IOSPIRIT GmbH (http://www.iospirit.com/) -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistributions of source code must retain the above copyright notice, this list -// of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright notice, this -// list of conditions and the following disclaimer in the documentation and/or other -// materials provided with the distribution. -// -// * Neither the name of IOSPIRIT GmbH nor the names of its contributors may be used to -// endorse or promote products derived from this software without specific prior -// written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT -// SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -// TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -// DAMAGE. -// -// ************************************************************************************ - -// ************************************************************************************ -// ********************************** DOCUMENTATION *********************************** -// ************************************************************************************ -// -// - a reference is available at http://www.iospirit.com/developers/hidremote/reference/ -// - for a guide, please see http://www.iospirit.com/developers/hidremote/guide/ -// -// ************************************************************************************ - -#import "HIDRemote.h" - -// Callback Prototypes -static void HIDEventCallback( void * target, - IOReturn result, - void * refcon, - void * sender); - -static void ServiceMatchingCallback( void *refCon, - io_iterator_t iterator); - -static void ServiceNotificationCallback(void * refCon, - io_service_t service, - natural_t messageType, - void * messageArgument); - -static void SecureInputNotificationCallback( void * refCon, - io_service_t service, - natural_t messageType, - void * messageArgument); - -// Shared HIDRemote instance -static HIDRemote *sHIDRemote = nil; - -@implementation HIDRemote - -#pragma mark -- Init, dealloc & shared instance -- - -+ (HIDRemote *)sharedHIDRemote -{ - if (sHIDRemote==nil) - { - sHIDRemote = [[HIDRemote alloc] init]; - } - - return (sHIDRemote); -} - -- (id)init -{ - if ((self = [super init]) != nil) - { - #ifdef HIDREMOTE_THREADSAFETY_HARDENED_NOTIFICATION_HANDLING - _runOnThread = [[NSThread currentThread] retain]; - #endif - - // Detect application becoming active/inactive - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_appStatusChanged:) name:NSApplicationDidBecomeActiveNotification object:NSApp]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_appStatusChanged:) name:NSApplicationWillResignActiveNotification object:NSApp]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_appStatusChanged:) name:NSApplicationWillTerminateNotification object:NSApp]; - - // Handle distributed notifications - _pidString = [[NSString alloc] initWithFormat:@"%d", getpid()]; - - [[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(_handleNotifications:) name:kHIDRemoteDNHIDRemotePing object:nil]; - [[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(_handleNotifications:) name:kHIDRemoteDNHIDRemoteRetry object:kHIDRemoteDNHIDRemoteRetryGlobalO |