feat: minimum stick offset for gyro -> stick mapping

This commit is contained in:
TrueZhuanjia
2025-10-09 09:58:57 +08:00
parent 16a210efa2
commit eff682bc05
12 changed files with 152 additions and 15 deletions
@@ -362,6 +362,8 @@ BOOL isCustomResolution(int resolutionSelected) {
[self pitchSensitivitySliderMoved:self.pitchSensitivitySlider];
[self.rollSensitivitySlider setValue:[self map_SliderValue_fromVelocFactor:oscProfile.gyroSensitivityRoll]];
[self rollSensitivitySliderMoved:self.rollSensitivitySlider];
[self.gyroToStickMinOffsetSlider setValue:(uint16_t)oscProfile.gyroToStickMinOffset];
[self gyroMinStickOffsetSliderMoved:self.gyroToStickMinOffsetSlider];
}
- (void)saveMotionControlConfigs{
@@ -375,7 +377,9 @@ BOOL isCustomResolution(int resolutionSelected) {
&& oscProfile.rollToLeftStick == self.rollToLeftStickSwitch.isOn
&& (int16_t)(oscProfile.gyroSensitivityYaw*100) == (int16_t)yawSensitivityPercent
&& (int16_t)(oscProfile.gyroSensitivityPitch*100) == (int16_t)pitchSensitivityPercent
&& (int16_t)(oscProfile.gyroSensitivityRoll*100) == (int16_t)rollSensitivityPercent);
&& (int16_t)(oscProfile.gyroSensitivityRoll*100) == (int16_t)rollSensitivityPercent
&& (int16_t)(oscProfile.gyroToStickMinOffset) == (int16_t)self.gyroToStickMinOffsetSlider.value);
if(!configNotChanged){
oscProfile.mapGyroTo = self.mapGyroToSelector.selectedSegmentIndex;
oscProfile.yawPitchToRightStick = self.yawPitchToRightStickSwitch.isOn;
@@ -383,6 +387,7 @@ BOOL isCustomResolution(int resolutionSelected) {
oscProfile.gyroSensitivityYaw = yawSensitivityPercent/100;
oscProfile.gyroSensitivityPitch = pitchSensitivityPercent/100;
oscProfile.gyroSensitivityRoll = rollSensitivityPercent/100;
oscProfile.gyroToStickMinOffset = (int16_t)self.gyroToStickMinOffsetSlider.value;
[oscProfileMan replaceSelectedProfileWith:oscProfile overwriteDefault:YES];
}
}
@@ -714,6 +719,7 @@ BOOL isCustomResolution(int resolutionSelected) {
[self addDynamicLabelForStack:self.yawSensitivityStack];
[self addDynamicLabelForStack:self.pitchSensitivityStack];
[self addSetting:self.rollSensitivityStack ofId:@"rollSensitivityStack" withInfoTag:NO withDynamicLabel:YES to:motionControlSection];
[self addSetting:self.gyroToStickMinOffsetStack ofId:@"gyroToStickMinOffsetStack" withInfoTag:NO withDynamicLabel:YES to:motionControlSection];
[motionControlSection addToParentStack:_parentStack];
MenuSectionView *gesturesSection = [[MenuSectionView alloc] init];
@@ -1816,6 +1822,7 @@ BOOL isCustomResolution(int resolutionSelected) {
self->motionControlSection.expandable = [self isCustomOswEnabled];
[self->motionControlSection setExpanded:[self isCustomOswEnabled]];
__weak typeof(self) weakSelf = self;
self->motionControlSection.lockedSectionHandler = ^{
[CountdownAlertController showAlertIn:weakSelf
@@ -1841,6 +1848,8 @@ BOOL isCustomResolution(int resolutionSelected) {
[self.yawSensitivitySlider addTarget:self action:@selector(yawSensitivitySliderMoved:) forControlEvents:UIControlEventValueChanged];
[self.pitchSensitivitySlider addTarget:self action:@selector(pitchSensitivitySliderMoved:) forControlEvents:UIControlEventValueChanged];
[self.rollSensitivitySlider addTarget:self action:@selector(rollSensitivitySliderMoved:) forControlEvents:UIControlEventValueChanged];
[self.gyroToStickMinOffsetSlider addTarget:self action:@selector(gyroMinStickOffsetSliderMoved:) forControlEvents:UIControlEventValueChanged];
//Motion control settings
@@ -2045,10 +2054,13 @@ BOOL isCustomResolution(int resolutionSelected) {
[self setHidden:false forStack:_yawPitchSensitivityStack];
[self setHidden:true forStack:_rollSensitivityStack];
}
[self setHidden:!mapGyroToControllerStickEnabled forStack:self.gyroToStickMinOffsetStack];
if(mapGyroToControllerStickEnabled){
[self yawPitchToRightStickSwitchFlipped:self.yawPitchToRightStickSwitch];
[self rollToLeftStickSwitchFlipped:self.rollToLeftStickSwitch];
}
if(sender.selectedSegmentIndex == driftCorrection){
[CountdownAlertController showAlertIn:self
@@ -2060,7 +2072,7 @@ BOOL isCustomResolution(int resolutionSelected) {
completion:^{
if(CountdownAlertController.actionCancelled){
[self.mapGyroToSelector setSelectedSegmentIndex:self->oscProfile.mapGyroTo];
NSLog(@"actionCancelled");
[self mapGyroToChanged:self.mapGyroToSelector];
}
else{
MotionHandler* motionHandler = [MotionHandler sharedInstance];
@@ -2079,6 +2091,7 @@ BOOL isCustomResolution(int resolutionSelected) {
countdown:6
completion:^{
[self.mapGyroToSelector setSelectedSegmentIndex:self->oscProfile.mapGyroTo];
[self mapGyroToChanged:self.mapGyroToSelector];
}];
}
}];
@@ -2107,6 +2120,10 @@ BOOL isCustomResolution(int resolutionSelected) {
[self findDynamicLabelFromStack:_rollSensitivityStack].text = [NSString stringWithFormat:@" %d%% ", (int16_t)[self map_velocFactorDisplay_fromSliderValue:sender.value]];
}
- (void)gyroMinStickOffsetSliderMoved:(UISlider* )sender{
[self findDynamicLabelFromStack:_gyroToStickMinOffsetStack].text = [NSString stringWithFormat:@" %d ", (int16_t)sender.value];
}
- (void)invokeOscLayout{
// init CustomOSC stuff
/* sets a reference to the correct 'LayoutOnScreenControlsViewController' depending on whether the user is on an iPhone or iPad */