mirror of
https://github.com/moonlight-stream/moonlight-ios.git
synced 2025-07-02 15:56:21 +00:00
Implement controller LED support
This commit is contained in:
parent
7249854641
commit
9d0dc49fd2
@ -43,6 +43,7 @@
|
|||||||
-(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) 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) setMotionEventState:(uint16_t)controllerNumber motionType:(uint8_t)motionType reportRateHz:(uint16_t)reportRateHz;
|
||||||
|
-(void) setControllerLed:(uint16_t)controllerNumber r:(uint8_t)r g:(uint8_t)g b:(uint8_t)b;
|
||||||
|
|
||||||
+(int) getConnectedGamepadMask:(StreamConfiguration*)streamConfig;
|
+(int) getConnectedGamepadMask:(StreamConfiguration*)streamConfig;
|
||||||
|
|
||||||
|
@ -175,6 +175,23 @@ static const double MOUSE_SPEED_DIVISOR = 1.25;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-(void) setControllerLed:(uint16_t)controllerNumber r:(uint8_t)r g:(uint8_t)g b:(uint8_t)b {
|
||||||
|
if (@available(iOS 14.0, tvOS 14.0, *)) {
|
||||||
|
Controller* controller = [_controllers objectForKey:[NSNumber numberWithInteger:controllerNumber]];
|
||||||
|
if (controller == nil) {
|
||||||
|
// No connected controller for this player
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (controller.gamepad.light == nil) {
|
||||||
|
// No LED control supported for this controller
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
controller.gamepad.light.color = [[GCColor alloc] initWithRed:(r / 255.0f) green:(g / 255.0f) blue:(b / 255.0f)];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
-(void) updateLeftStick:(Controller*)controller x:(short)x y:(short)y
|
-(void) updateLeftStick:(Controller*)controller x:(short)x y:(short)y
|
||||||
{
|
{
|
||||||
@synchronized(controller) {
|
@synchronized(controller) {
|
||||||
@ -514,6 +531,11 @@ static const double MOUSE_SPEED_DIVISOR = 1.25;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Detect RGB LED support
|
||||||
|
if (controller.light) {
|
||||||
|
capabilities |= LI_CCAP_RGB_LED;
|
||||||
|
}
|
||||||
|
|
||||||
LiSendControllerArrivalEvent(controller.playerIndex, [self getActiveGamepadMask], type, supportedButtonFlags, capabilities);
|
LiSendControllerArrivalEvent(controller.playerIndex, [self getActiveGamepadMask], type, supportedButtonFlags, capabilities);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -345,6 +345,11 @@ void ClSetMotionEventState(uint16_t controllerNumber, uint8_t motionType, uint16
|
|||||||
[_callbacks setMotionEventState:controllerNumber motionType:motionType reportRateHz:reportRateHz];
|
[_callbacks setMotionEventState:controllerNumber motionType:motionType reportRateHz:reportRateHz];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ClSetControllerLED(uint16_t controllerNumber, uint8_t r, uint8_t g, uint8_t b)
|
||||||
|
{
|
||||||
|
[_callbacks setControllerLed:controllerNumber r:r g:g b:b];
|
||||||
|
}
|
||||||
|
|
||||||
-(void) terminate
|
-(void) terminate
|
||||||
{
|
{
|
||||||
// Interrupt any action blocking LiStartConnection(). This is
|
// Interrupt any action blocking LiStartConnection(). This is
|
||||||
@ -467,6 +472,7 @@ void ClSetMotionEventState(uint16_t controllerNumber, uint8_t motionType, uint16
|
|||||||
_clCallbacks.setHdrMode = ClSetHdrMode;
|
_clCallbacks.setHdrMode = ClSetHdrMode;
|
||||||
_clCallbacks.rumbleTriggers = ClRumbleTriggers;
|
_clCallbacks.rumbleTriggers = ClRumbleTriggers;
|
||||||
_clCallbacks.setMotionEventState = ClSetMotionEventState;
|
_clCallbacks.setMotionEventState = ClSetMotionEventState;
|
||||||
|
_clCallbacks.setControllerLED = ClSetControllerLED;
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
- (void) setHdrMode:(bool)enabled;
|
- (void) setHdrMode:(bool)enabled;
|
||||||
- (void) rumbleTriggers:(uint16_t)controllerNumber leftTrigger:(uint16_t)leftTrigger rightTrigger:(uint16_t)rightTrigger;
|
- (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) setMotionEventState:(uint16_t)controllerNumber motionType:(uint8_t)motionType reportRateHz:(uint16_t)reportRateHz;
|
||||||
|
- (void) setControllerLed:(uint16_t)controllerNumber r:(uint8_t)r g:(uint8_t)g b:(uint8_t)b;
|
||||||
- (void) videoContentShown;
|
- (void) videoContentShown;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -538,6 +538,12 @@
|
|||||||
[_controllerSupport setMotionEventState:controllerNumber motionType:motionType reportRateHz:reportRateHz];
|
[_controllerSupport setMotionEventState:controllerNumber motionType:motionType reportRateHz:reportRateHz];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void) setControllerLed:(uint16_t)controllerNumber r:(uint8_t)r g:(uint8_t)g b:(uint8_t)b {
|
||||||
|
Log(LOG_I, @"Set controller LED on gamepad %d: l%02x%02x%02x", controllerNumber, r, g, b);
|
||||||
|
|
||||||
|
[_controllerSupport setControllerLed:controllerNumber r:r g:g b:b];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)connectionStatusUpdate:(int)status {
|
- (void)connectionStatusUpdate:(int)status {
|
||||||
Log(LOG_W, @"Connection status update: %d", status);
|
Log(LOG_W, @"Connection status update: %d", status);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user