mirror of
https://github.com/moonlight-stream/moonlight-ios.git
synced 2026-06-17 06:01:13 +00:00
Plumb trigger rumble and motion sensor callbacks
This commit is contained in:
@@ -27,5 +27,7 @@
|
|||||||
|
|
||||||
@property (nonatomic) HapticContext* _Nullable lowFreqMotor;
|
@property (nonatomic) HapticContext* _Nullable lowFreqMotor;
|
||||||
@property (nonatomic) HapticContext* _Nullable highFreqMotor;
|
@property (nonatomic) HapticContext* _Nullable highFreqMotor;
|
||||||
|
@property (nonatomic) HapticContext* _Nullable leftTriggerMotor;
|
||||||
|
@property (nonatomic) HapticContext* _Nullable rightTriggerMotor;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -41,6 +41,8 @@
|
|||||||
-(void) updateFinished:(Controller*)controller;
|
-(void) updateFinished:(Controller*)controller;
|
||||||
|
|
||||||
-(void) rumble:(unsigned short)controllerNumber lowFreqMotor:(unsigned short)lowFreqMotor highFreqMotor:(unsigned short)highFreqMotor;
|
-(void) rumble:(unsigned short)controllerNumber lowFreqMotor:(unsigned short)lowFreqMotor highFreqMotor:(unsigned short)highFreqMotor;
|
||||||
|
-(void) rumbleTriggers:(uint16_t)controllerNumber leftTrigger:(uint16_t)leftTrigger rightTrigger:(uint16_t)rightTrigger;
|
||||||
|
-(void) setMotionEventState:(uint16_t)controllerNumber motionType:(uint8_t)motionType reportRateHz:(uint16_t)reportRateHz;
|
||||||
|
|
||||||
+(int) getConnectedGamepadMask:(StreamConfiguration*)streamConfig;
|
+(int) getConnectedGamepadMask:(StreamConfiguration*)streamConfig;
|
||||||
|
|
||||||
|
|||||||
@@ -71,6 +71,27 @@ static const double MOUSE_SPEED_DIVISOR = 1.25;
|
|||||||
[controller.highFreqMotor setMotorAmplitude:highFreqMotor];
|
[controller.highFreqMotor setMotorAmplitude:highFreqMotor];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-(void) rumbleTriggers:(uint16_t)controllerNumber leftTrigger:(uint16_t)leftTrigger rightTrigger:(uint16_t)rightTrigger
|
||||||
|
{
|
||||||
|
Controller* controller = [_controllers objectForKey:[NSNumber numberWithInteger:controllerNumber]];
|
||||||
|
if (controller == nil && controllerNumber == 0 && _oscEnabled) {
|
||||||
|
// No physical controller, but we have on-screen controls
|
||||||
|
controller = _player0osc;
|
||||||
|
}
|
||||||
|
if (controller == nil) {
|
||||||
|
// No connected controller for this player
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
[controller.leftTriggerMotor setMotorAmplitude:leftTrigger];
|
||||||
|
[controller.rightTriggerMotor setMotorAmplitude:rightTrigger];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) setMotionEventState:(uint16_t)controllerNumber motionType:(uint8_t)motionType reportRateHz:(uint16_t)reportRateHz
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
-(void) updateLeftStick:(Controller*)controller x:(short)x y:(short)y
|
-(void) updateLeftStick:(Controller*)controller x:(short)x y:(short)y
|
||||||
{
|
{
|
||||||
@synchronized(controller) {
|
@synchronized(controller) {
|
||||||
@@ -261,12 +282,17 @@ static const double MOUSE_SPEED_DIVISOR = 1.25;
|
|||||||
{
|
{
|
||||||
controller.lowFreqMotor = [HapticContext createContextForLowFreqMotor:controller.gamepad];
|
controller.lowFreqMotor = [HapticContext createContextForLowFreqMotor:controller.gamepad];
|
||||||
controller.highFreqMotor = [HapticContext createContextForHighFreqMotor:controller.gamepad];
|
controller.highFreqMotor = [HapticContext createContextForHighFreqMotor:controller.gamepad];
|
||||||
|
controller.leftTriggerMotor = [HapticContext createContextForLeftTrigger:controller.gamepad];
|
||||||
|
controller.rightTriggerMotor = [HapticContext createContextForRightTrigger:controller.gamepad];
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void) cleanupControllerHaptics:(Controller*) controller
|
-(void) cleanupControllerHaptics:(Controller*) controller
|
||||||
{
|
{
|
||||||
[controller.lowFreqMotor cleanup];
|
[controller.lowFreqMotor cleanup];
|
||||||
[controller.highFreqMotor cleanup];
|
[controller.highFreqMotor cleanup];
|
||||||
|
[controller.leftTriggerMotor cleanup];
|
||||||
|
[controller.rightTriggerMotor cleanup];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void) registerControllerCallbacks:(GCController*) controller
|
-(void) registerControllerCallbacks:(GCController*) controller
|
||||||
|
|||||||
@@ -16,5 +16,7 @@
|
|||||||
|
|
||||||
+(HapticContext*) createContextForHighFreqMotor:(GCController*)gamepad;
|
+(HapticContext*) createContextForHighFreqMotor:(GCController*)gamepad;
|
||||||
+(HapticContext*) createContextForLowFreqMotor:(GCController*)gamepad;
|
+(HapticContext*) createContextForLowFreqMotor:(GCController*)gamepad;
|
||||||
|
+(HapticContext*) createContextForLeftTrigger:(GCController*)gamepad;
|
||||||
|
+(HapticContext*) createContextForRightTrigger:(GCController*)gamepad;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -89,6 +89,11 @@
|
|||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (![[gamepad.haptics supportedLocalities] containsObject:locality]) {
|
||||||
|
Log(LOG_W, @"Controller %d does not support haptic locality: %@", gamepad.playerIndex, locality);
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
_playerIndex = gamepad.playerIndex;
|
_playerIndex = gamepad.playerIndex;
|
||||||
_hapticEngine = [gamepad.haptics createEngineWithLocality:locality];
|
_hapticEngine = [gamepad.haptics createEngineWithLocality:locality];
|
||||||
|
|
||||||
@@ -144,4 +149,22 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
+(HapticContext*) createContextForLeftTrigger:(GCController*)gamepad {
|
||||||
|
if (@available(iOS 14.0, tvOS 14.0, *)) {
|
||||||
|
return [[HapticContext alloc] initWithGamepad:gamepad locality:GCHapticsLocalityLeftTrigger];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+(HapticContext*) createContextForRightTrigger:(GCController*)gamepad {
|
||||||
|
if (@available(iOS 14.0, tvOS 14.0, *)) {
|
||||||
|
return [[HapticContext alloc] initWithGamepad:gamepad locality:GCHapticsLocalityRightTrigger];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -313,6 +313,16 @@ void ClSetHdrMode(bool enabled)
|
|||||||
[_callbacks setHdrMode:enabled];
|
[_callbacks setHdrMode:enabled];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ClRumbleTriggers(uint16_t controllerNumber, uint16_t leftTriggerMotor, uint16_t rightTriggerMotor)
|
||||||
|
{
|
||||||
|
[_callbacks rumbleTriggers:controllerNumber leftTrigger:leftTriggerMotor rightTrigger:rightTriggerMotor];
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClSetMotionEventState(uint16_t controllerNumber, uint8_t motionType, uint16_t reportRateHz)
|
||||||
|
{
|
||||||
|
[_callbacks setMotionEventState:controllerNumber motionType:motionType reportRateHz:reportRateHz];
|
||||||
|
}
|
||||||
|
|
||||||
-(void) terminate
|
-(void) terminate
|
||||||
{
|
{
|
||||||
// Interrupt any action blocking LiStartConnection(). This is
|
// Interrupt any action blocking LiStartConnection(). This is
|
||||||
@@ -455,6 +465,8 @@ void ClSetHdrMode(bool enabled)
|
|||||||
_clCallbacks.rumble = ClRumble;
|
_clCallbacks.rumble = ClRumble;
|
||||||
_clCallbacks.connectionStatusUpdate = ClConnectionStatusUpdate;
|
_clCallbacks.connectionStatusUpdate = ClConnectionStatusUpdate;
|
||||||
_clCallbacks.setHdrMode = ClSetHdrMode;
|
_clCallbacks.setHdrMode = ClSetHdrMode;
|
||||||
|
_clCallbacks.rumbleTriggers = ClRumbleTriggers;
|
||||||
|
_clCallbacks.setMotionEventState = ClSetMotionEventState;
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
- (void) rumble:(unsigned short)controllerNumber lowFreqMotor:(unsigned short)lowFreqMotor highFreqMotor:(unsigned short)highFreqMotor;
|
- (void) rumble:(unsigned short)controllerNumber lowFreqMotor:(unsigned short)lowFreqMotor highFreqMotor:(unsigned short)highFreqMotor;
|
||||||
- (void) connectionStatusUpdate:(int)status;
|
- (void) connectionStatusUpdate:(int)status;
|
||||||
- (void) setHdrMode:(bool)enabled;
|
- (void) setHdrMode:(bool)enabled;
|
||||||
|
- (void) rumbleTriggers:(uint16_t)controllerNumber leftTrigger:(uint16_t)leftTrigger rightTrigger:(uint16_t)rightTrigger;
|
||||||
|
- (void) setMotionEventState:(uint16_t)controllerNumber motionType:(uint8_t)motionType reportRateHz:(uint16_t)reportRateHz;
|
||||||
- (void) videoContentShown;
|
- (void) videoContentShown;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -526,6 +526,18 @@
|
|||||||
[_controllerSupport rumble:controllerNumber lowFreqMotor:lowFreqMotor highFreqMotor:highFreqMotor];
|
[_controllerSupport rumble:controllerNumber lowFreqMotor:lowFreqMotor highFreqMotor:highFreqMotor];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void) rumbleTriggers:(uint16_t)controllerNumber leftTrigger:(uint16_t)leftTrigger rightTrigger:(uint16_t)rightTrigger {
|
||||||
|
Log(LOG_I, @"Trigger rumble on gamepad %d: %04x %04x", controllerNumber, leftTrigger, rightTrigger);
|
||||||
|
|
||||||
|
[_controllerSupport rumbleTriggers:controllerNumber leftTrigger:leftTrigger rightTrigger:rightTrigger];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) setMotionEventState:(uint16_t)controllerNumber motionType:(uint8_t)motionType reportRateHz:(uint16_t)reportRateHz {
|
||||||
|
Log(LOG_I, @"Set motion state on gamepad %d: %02x %u Hz", controllerNumber, motionType, reportRateHz);
|
||||||
|
|
||||||
|
[_controllerSupport setMotionEventState:controllerNumber motionType:motionType reportRateHz:reportRateHz];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)connectionStatusUpdate:(int)status {
|
- (void)connectionStatusUpdate:(int)status {
|
||||||
Log(LOG_W, @"Connection status update: %d", status);
|
Log(LOG_W, @"Connection status update: %d", status);
|
||||||
|
|
||||||
|
|||||||
Submodule moonlight-common/moonlight-common-c updated: b77072d399...c5dc45e144
Reference in New Issue
Block a user