mirror of
https://github.com/mpv-player/mpv.git
synced 2024-09-19 19:42:24 +02:00
mac: remove Apple Remote support
the Apple Remote has long been deprecated and abandoned by Apple. current macs don't come with support for it anymore. support might be re-added with the next commit.
This commit is contained in:
parent
1eb6cbd093
commit
8a6ee7fe94
@ -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.
|
||||
|
@ -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.)
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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``
|
||||
|
@ -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
|
||||
|
||||
|
@ -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]
|
||||
|
@ -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)
|
||||
#
|
||||
|
@ -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
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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" },
|
||||
|
@ -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)
|
||||
|
@ -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;
|
2033
osdep/ar/HIDRemote.m
2033
osdep/ar/HIDRemote.m
File diff suppressed because it is too large
Load Diff
@ -27,9 +27,6 @@ struct mpv_handle;
|
||||
void cocoa_put_key(int keycode);
|
||||
void cocoa_put_key_with_modifiers(int keycode, int modifiers);
|
||||
|
||||
void cocoa_init_apple_remote(void);
|
||||
void cocoa_uninit_apple_remote(void);
|
||||
|
||||
void cocoa_init_media_keys(void);
|
||||
void cocoa_uninit_media_keys(void);
|
||||
|
||||
|
@ -50,17 +50,12 @@
|
||||
BOOL _is_application;
|
||||
NSCondition *_input_lock;
|
||||
CFMachPortRef _mk_tap_port;
|
||||
#if HAVE_APPLE_REMOTE
|
||||
HIDRemote *_remote;
|
||||
#endif
|
||||
}
|
||||
|
||||
- (BOOL)handleMediaKey:(NSEvent *)event;
|
||||
- (NSEvent *)handleKey:(NSEvent *)event;
|
||||
- (BOOL)setMpvHandle:(struct mpv_handle *)ctx;
|
||||
- (void)readEvents;
|
||||
- (void)startAppleRemote;
|
||||
- (void)stopAppleRemote;
|
||||
- (void)startMediaKeys;
|
||||
- (void)restartMediaKeys;
|
||||
- (void)stopMediaKeys;
|
||||
@ -126,16 +121,6 @@ static int convert_key(unsigned key, unsigned charcode)
|
||||
return charcode;
|
||||
}
|
||||
|
||||
void cocoa_init_apple_remote(void)
|
||||
{
|
||||
[[EventsResponder sharedInstance] startAppleRemote];
|
||||
}
|
||||
|
||||
void cocoa_uninit_apple_remote(void)
|
||||
{
|
||||
[[EventsResponder sharedInstance] stopAppleRemote];
|
||||
}
|
||||
|
||||
static int mk_code(NSEvent *event)
|
||||
{
|
||||
return (([event data1] & 0xFFFF0000) >> 16);
|
||||
@ -352,29 +337,6 @@ void cocoa_set_mpv_handle(struct mpv_handle *ctx)
|
||||
}
|
||||
}
|
||||
|
||||
- (void)startAppleRemote
|
||||
{
|
||||
#if HAVE_APPLE_REMOTE
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
self->_remote = [[HIDRemote alloc] init];
|
||||
if (self->_remote) {
|
||||
[self->_remote setDelegate:self];
|
||||
[self->_remote startRemoteControl:kHIDRemoteModeExclusiveAuto];
|
||||
}
|
||||
});
|
||||
#endif
|
||||
}
|
||||
|
||||
- (void)stopAppleRemote
|
||||
{
|
||||
#if HAVE_APPLE_REMOTE
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[self->_remote stopRemoteControl];
|
||||
[self->_remote release];
|
||||
});
|
||||
#endif
|
||||
}
|
||||
|
||||
- (void)restartMediaKeys
|
||||
{
|
||||
if (self->_mk_tap_port)
|
||||
@ -448,33 +410,6 @@ void cocoa_set_mpv_handle(struct mpv_handle *ctx)
|
||||
andMapping:keymapd];
|
||||
}
|
||||
|
||||
- (void)hidRemote:(HIDRemote *)remote
|
||||
eventWithButton:(HIDRemoteButtonCode)buttonCode
|
||||
isPressed:(BOOL)isPressed
|
||||
fromHardwareWithAttributes:(NSMutableDictionary *)attributes
|
||||
{
|
||||
if (!isPressed) return;
|
||||
|
||||
NSDictionary *keymapd = @{
|
||||
@(kHIDRemoteButtonCodePlay): @(MP_AR_PLAY),
|
||||
@(kHIDRemoteButtonCodePlayHold): @(MP_AR_PLAY_HOLD),
|
||||
@(kHIDRemoteButtonCodeCenter): @(MP_AR_CENTER),
|
||||
@(kHIDRemoteButtonCodeCenterHold): @(MP_AR_CENTER_HOLD),
|
||||
@(kHIDRemoteButtonCodeLeft): @(MP_AR_PREV),
|
||||
@(kHIDRemoteButtonCodeLeftHold): @(MP_AR_PREV_HOLD),
|
||||
@(kHIDRemoteButtonCodeRight): @(MP_AR_NEXT),
|
||||
@(kHIDRemoteButtonCodeRightHold): @(MP_AR_NEXT_HOLD),
|
||||
@(kHIDRemoteButtonCodeMenu): @(MP_AR_MENU),
|
||||
@(kHIDRemoteButtonCodeMenuHold): @(MP_AR_MENU_HOLD),
|
||||
@(kHIDRemoteButtonCodeUp): @(MP_AR_VUP),
|
||||
@(kHIDRemoteButtonCodeUpHold): @(MP_AR_VUP_HOLD),
|
||||
@(kHIDRemoteButtonCodeDown): @(MP_AR_VDOWN),
|
||||
@(kHIDRemoteButtonCodeDownHold): @(MP_AR_VDOWN_HOLD),
|
||||
};
|
||||
|
||||
[self handleKey:buttonCode withMask:0 andMapping:keymapd];
|
||||
}
|
||||
|
||||
- (int)mapKeyModifiers:(int)cocoaModifiers
|
||||
{
|
||||
int mask = 0;
|
||||
|
@ -18,12 +18,11 @@
|
||||
*/
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import "ar/HIDRemote.h"
|
||||
#include "osdep/macosx_events.h"
|
||||
|
||||
struct input_ctx;
|
||||
|
||||
@interface EventsResponder : NSObject <HIDRemoteDelegate>
|
||||
@interface EventsResponder : NSObject
|
||||
|
||||
+ (EventsResponder *)sharedInstance;
|
||||
- (void)setInputContext:(struct input_ctx *)ctx;
|
||||
|
5
wscript
5
wscript
@ -904,11 +904,6 @@ standalone_features = [
|
||||
'desc': 'w32 executable',
|
||||
'deps': 'os-win32 || !(!(os-cygwin))',
|
||||
'func': check_ctx_vars('WINDRES')
|
||||
}, {
|
||||
'name': '--apple-remote',
|
||||
'desc': 'Apple Remote support',
|
||||
'deps': 'cocoa',
|
||||
'func': check_true
|
||||
}, {
|
||||
'name': '--macos-touchbar',
|
||||
'desc': 'macOS Touch Bar support',
|
||||
|
@ -544,7 +544,6 @@ def build(ctx):
|
||||
|
||||
( "osdep/android/posix-spawn.c", "android"),
|
||||
( "osdep/android/strnlen.c", "android"),
|
||||
( "osdep/ar/HIDRemote.m", "apple-remote" ),
|
||||
( "osdep/glob-win.c", "glob-win32" ),
|
||||
( "osdep/macosx_application.m", "cocoa" ),
|
||||
( "osdep/macosx_events.m", "cocoa" ),
|
||||
|
Loading…
Reference in New Issue
Block a user