1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2024-11-29 07:24:13 +01:00

Merge remote-tracking branch 'origin/next' into thread/OP-1763_CloudConfigs_outside_of_Wizard

This commit is contained in:
m_thread 2015-03-17 22:25:10 +01:00
commit 5b08f02aae
51 changed files with 10195 additions and 3318 deletions

View File

@ -81,8 +81,10 @@ $(foreach var, $(SANITIZE_DEPRECATED_VARS), $(eval $(call SANITIZE_VAR,$(var),de
# Make sure this isn't being run as root unless installing (no whoami on Windows, but that is ok here)
ifeq ($(shell whoami 2>/dev/null),root)
ifeq ($(filter install all_clean,$(MAKECMDGOALS)),)
$(error You should not be running this as root)
ifeq ($(filter install,$(MAKECMDGOALS)),)
ifndef FAKEROOTKEY
$(error You should not be running this as root)
endif
endif
endif
@ -785,15 +787,19 @@ endif
# - calls paltform-specific packaging script
# Define some variables
export PACKAGE_LBL := $(shell $(VERSION_INFO) --format=\$${LABEL})
export PACKAGE_NAME := OpenPilot
export PACKAGE_SEP := -
PACKAGE_LBL := $(shell $(VERSION_INFO) --format=\$${LABEL})
PACKAGE_NAME := OpenPilot
PACKAGE_SEP := -
PACKAGE_FULL_NAME := $(PACKAGE_NAME)$(PACKAGE_SEP)$(PACKAGE_LBL)
# Source distribution is never dirty because it uses git archive
DIST_NAME := $(DIST_DIR)/$(subst dirty-,,$(PACKAGE_FULL_NAME)).tar
.PHONY: package
include $(ROOT_DIR)/package/$(UNAME).mk
package: all_fw all_ground uavobjects_matlab $(PACKAGE_DIR)
package: all_fw all_ground uavobjects_matlab | $(PACKAGE_DIR)
ifneq ($(GCS_BUILD_CONF),release)
# We can only package release builds
$(error Packaging is currently supported for release builds only)
@ -882,20 +888,20 @@ build-info:
DIST_VER_INFO := $(DIST_DIR)/version-info.json
.PHONY: $(DIST_VER_INFO) # Because to many deps to list
$(DIST_VER_INFO): $(DIST_DIR)
$(DIST_VER_INFO): .git/index | $(DIST_DIR)
$(V1) $(VERSION_INFO) --jsonpath="$(DIST_DIR)"
.PHONY: dist
dist: $(DIST_DIR) $(DIST_VER_INFO)
@$(ECHO) " SOURCE FOR DISTRIBUTION $(call toprel, $(DIST_DIR))"
$(eval DIST_NAME := $(call toprel, "$(DIST_DIR)/OpenPilot-$(shell git describe).tar"))
$(V1) git archive --prefix="OpenPilot/" -o "$(DIST_NAME)" HEAD
$(DIST_NAME).gz: $(DIST_VER_INFO) .git/index | $(DIST_DIR)
@$(ECHO) " SOURCE FOR DISTRIBUTION $(call toprel, $(DIST_NAME).gz)"
$(V1) git archive --prefix="$(PACKAGE_NAME)/" -o "$(DIST_NAME)" HEAD
$(V1) tar --append --file="$(DIST_NAME)" \
--transform='s,.*version-info.json,OpenPilot/version-info.json,' \
--transform='s,.*version-info.json,$(PACKAGE_NAME)/version-info.json,' \
$(call toprel, "$(DIST_VER_INFO)")
$(V1) gzip -f "$(DIST_NAME)"
.PHONY: dist
dist: $(DIST_NAME).gz
##############################
#

View File

@ -1,4 +1,4 @@
--- RELEASE-15.02 RC5
--- RELEASE-15.02 --- Ragin' Cajun ---
This release introduces major flight performance improvements, enhancements as well as bug fixes. Many enhancements have been made to reducing dead-time of the communication between the flight controller and ESCs. In our testing, we have found this to be not only the best flight performance so far in the OpenPilot project but the best flight performance of any project we have tested against. This is a recommended upgrade for everyone and the more skilled of a pilot you are, the more you will love this release.
A key improvement that helped achieve this was the addition of the PWMSync code path, this is now enabled by default. Some restrictions applies to CC3D/CC as it needs a compatible input method to enable PWMSync. Compatible input methods are PPM, S.Bus, DSM and OPLink. This release also introduces support for OneShot125 capable ESCs, such as the KISS ESCs and all ESCs supported in BLHeli V13 and above. Note that OneShot125 support has the same restrictions as PWMSync for CC and CC3D.
@ -8,14 +8,15 @@ Note for CC3D/CC: To support PWMSync/OneShot125 PPM input pin has changed from e
Other enhancements include key parts of the GCS translated to Chinese and further OPLink reliability additions allowing us to confidently say it can be used as a primary control link as well as for telemetry.
The full list of features, improvements and bugfixes in this release is accessible here:
https://progress.openpilot.org/issues/?filter=12161
https://progress.openpilot.org/issues/?filter=12161
Release Notes - OpenPilot - Version RELEASE-15.02
** Bug
* [OP-969] - Input Configuration Wizard has scrollbars showing up and next/previous buttons are pushed down out of sight
* [OP-1034] - CCPM Config Widget crashes GCS if required boxes aren't set i.e. Channel set to None
* [OP-1236] - Icons on Welcome tab - moves to the left
* [OP-1466] - Gcs crashes on Helicopter config tab
* [OP-1522] - Improve Robustness of OPLink radio
* [OP-1601] - Still not enough ram on CC for gps to be usable
@ -38,6 +39,8 @@ Release Notes - OpenPilot - Version RELEASE-15.02
* [OP-1755] - Add additional path for cloudconfigs
* [OP-1758] - Upgrade hidapi for all OSs (except windows) to solve mac issue:Fix incorrect device list after device removal
* [OP-1761] - Wizard bad config when PPM in, RapidESC out and hexa frame with CC/CC3D/Atom
* [OP-1764] - System should sanity check RC Input Channel value ranges and raise alarm accordingly
* [OP-1768] - PWM Sync and OneShot125 wizard output level and warning are incorrect
** Improvement
@ -60,13 +63,13 @@ Release Notes - OpenPilot - Version RELEASE-15.02
** Task
* [OP-1721] - C++ enable flight controller and upgrade ARM tools
* [OP-1738] - change default flight modes and thrust settings
* [OP-1747] - 15.02 rc1 motor end points do not reflect oneshot125 / pwmsync
** Sub task
* [OP-1748] - Chinese translation for 15.02
* [OP-1752] - Add Alarm sub status to SystemHealth
--- RELEASE-15.01 --- Look Ma, No hands ---
This release mainly focuses on a new feature, GPSAssist which is a new form of assisted control for multirotors.
Assisted Control provides assistance functions on top of existing flight modes. GPSAssist is the

View File

@ -43,7 +43,8 @@
#include <taskinfo.h>
// a number of useful macros
#define ADDSEVERITY(check) severity = (severity != SYSTEMALARMS_ALARM_OK ? severity : ((check) ? SYSTEMALARMS_ALARM_OK : SYSTEMALARMS_ALARM_CRITICAL))
#define ADDSEVERITY(check) severity = (severity != SYSTEMALARMS_ALARM_OK ? severity : ((check) ? SYSTEMALARMS_ALARM_OK : SYSTEMALARMS_ALARM_CRITICAL))
#define ADDEXTENDEDALARMSTATUS(error_code, error_substatus) if ((severity != SYSTEMALARMS_ALARM_OK) && (alarmstatus == SYSTEMALARMS_EXTENDEDALARMSTATUS_NONE)) { alarmstatus = (error_code); alarmsubstatus = (error_substatus); }
// private types
typedef struct SANITYCHECK_CustomHookInstance {
@ -178,6 +179,27 @@ int32_t configuration_check()
}
}
// Check throttle/collective channel range for valid configuration of input for critical control
SystemSettingsThrustControlOptions thrustType;
SystemSettingsThrustControlGet(&thrustType);
ManualControlSettingsChannelMinData channelMin;
ManualControlSettingsChannelMaxData channelMax;
ManualControlSettingsChannelMinGet(&channelMin);
ManualControlSettingsChannelMaxGet(&channelMax);
switch (thrustType) {
case SYSTEMSETTINGS_THRUSTCONTROL_THROTTLE:
ADDSEVERITY(fabsf(channelMax.Throttle - channelMin.Throttle) > 300.0f);
ADDEXTENDEDALARMSTATUS(SYSTEMALARMS_EXTENDEDALARMSTATUS_BADTHROTTLEORCOLLECTIVEINPUTRANGE, 0);
break;
case SYSTEMSETTINGS_THRUSTCONTROL_COLLECTIVE:
ADDSEVERITY(fabsf(channelMax.Collective - channelMin.Collective) > 300.0f);
ADDEXTENDEDALARMSTATUS(SYSTEMALARMS_EXTENDEDALARMSTATUS_BADTHROTTLEORCOLLECTIVEINPUTRANGE, 0);
break;
default:
break;
}
// query sanity check hooks
if (severity < SYSTEMALARMS_ALARM_CRITICAL) {
SANITYCHECK_CustomHookInstance *instance = NULL;

View File

@ -45,6 +45,11 @@
#include "cameradesired.h"
#include "manualcontrolcommand.h"
#include "taskinfo.h"
#include <systemsettings.h>
#include <sanitycheck.h>
#ifndef PIOS_EXCLUDE_ADVANCED_FEATURES
#include <vtolpathfollowersettings.h>
#endif
#undef PIOS_INCLUDE_INSTRUMENTATION
#ifdef PIOS_INCLUDE_INSTRUMENTATION
#include <pios_instrumentation.h>
@ -76,26 +81,33 @@ static int8_t counter;
// Private variables
static xQueueHandle queue;
static xTaskHandle taskHandle;
static FrameType_t frameType = FRAME_TYPE_MULTIROTOR;
static SystemSettingsThrustControlOptions thrustType = SYSTEMSETTINGS_THRUSTCONTROL_THROTTLE;
static float lastResult[MAX_MIX_ACTUATORS] = { 0 };
static float filterAccumulator[MAX_MIX_ACTUATORS] = { 0 };
static uint8_t pinsMode[MAX_MIX_ACTUATORS];
// used to inform the actuator thread that actuator update rate is changed
static volatile bool actuator_settings_updated;
static ActuatorSettingsData actuatorSettings;
static bool spinWhileArmed;
// used to inform the actuator thread that mixer settings are changed
static volatile bool mixer_settings_updated;
static MixerSettingsData mixerSettings;
static int mixer_settings_count = 2;
// Private functions
static void actuatorTask(void *parameters);
static int16_t scaleChannel(float value, int16_t max, int16_t min, int16_t neutral);
static void setFailsafe(const ActuatorSettingsData *actuatorSettings, const MixerSettingsData *mixerSettings);
static float MixerCurve(const float throttle, const float *curve, uint8_t elements);
static bool set_channel(uint8_t mixer_channel, uint16_t value, const ActuatorSettingsData *actuatorSettings);
static void actuator_update_rate_if_changed(const ActuatorSettingsData *actuatorSettings, bool force_update);
static void setFailsafe();
static float MixerCurveFullRangeProportional(const float input, const float *curve, uint8_t elements);
static float MixerCurveFullRangeAbsolute(const float input, const float *curve, uint8_t elements);
static bool set_channel(uint8_t mixer_channel, uint16_t value);
static void actuator_update_rate_if_changed(bool force_update);
static void MixerSettingsUpdatedCb(UAVObjEvent *ev);
static void ActuatorSettingsUpdatedCb(UAVObjEvent *ev);
static void SettingsUpdatedCb(UAVObjEvent *ev);
float ProcessMixer(const int index, const float curve1, const float curve2,
const MixerSettingsData *mixerSettings, ActuatorDesiredData *desired,
ActuatorDesiredData *desired,
const float period);
// this structure is equivalent to the UAVObjects for one mixer.
@ -116,6 +128,9 @@ int32_t ActuatorStart()
#ifdef PIOS_INCLUDE_WDG
PIOS_WDG_RegisterFlag(PIOS_WDG_ACTUATOR);
#endif
SettingsUpdatedCb(NULL);
MixerSettingsUpdatedCb(NULL);
ActuatorSettingsUpdatedCb(NULL);
return 0;
}
@ -149,6 +164,13 @@ int32_t ActuatorInitialize()
MixerStatusInitialize();
#endif
#ifndef PIOS_EXCLUDE_ADVANCED_FEATURES
VtolPathFollowerSettingsInitialize();
VtolPathFollowerSettingsConnectCallback(&SettingsUpdatedCb);
#endif
SystemSettingsInitialize();
SystemSettingsConnectCallback(&SettingsUpdatedCb);
return 0;
}
MODULE_INITCALL(ActuatorInitialize, ActuatorStart);
@ -178,7 +200,6 @@ static void actuatorTask(__attribute__((unused)) void *parameters)
ActuatorDesiredData desired;
MixerStatusData mixerStatus;
FlightStatusData flightStatus;
SystemSettingsThrustControlOptions thrustType;
float throttleDesired;
float collectiveDesired;
@ -186,21 +207,17 @@ static void actuatorTask(__attribute__((unused)) void *parameters)
counter = PIOS_Instrumentation_CreateCounter(0xAC700001);
#endif
/* Read initial values of ActuatorSettings */
ActuatorSettingsData actuatorSettings;
actuator_settings_updated = false;
ActuatorSettingsGet(&actuatorSettings);
/* Read initial values of MixerSettings */
MixerSettingsData mixerSettings;
mixer_settings_updated = false;
MixerSettingsGet(&mixerSettings);
/* Force an initial configuration of the actuator update rates */
actuator_update_rate_if_changed(&actuatorSettings, true);
actuator_update_rate_if_changed(true);
// Go to the neutral (failsafe) values until an ActuatorDesired update is received
setFailsafe(&actuatorSettings, &mixerSettings);
setFailsafe();
// Main task loop
lastSysTime = xTaskGetTickCount();
@ -214,20 +231,10 @@ static void actuatorTask(__attribute__((unused)) void *parameters)
#ifdef PIOS_INCLUDE_INSTRUMENTATION
PIOS_Instrumentation_TimeStart(counter);
#endif
/* Process settings updated events even in timeout case so we always act on the latest settings */
if (actuator_settings_updated) {
actuator_settings_updated = false;
ActuatorSettingsGet(&actuatorSettings);
actuator_update_rate_if_changed(&actuatorSettings, false);
}
if (mixer_settings_updated) {
mixer_settings_updated = false;
MixerSettingsGet(&mixerSettings);
}
if (rc != pdTRUE) {
/* Update of ActuatorDesired timed out. Go to failsafe */
setFailsafe(&actuatorSettings, &mixerSettings);
setFailsafe();
continue;
}
@ -240,7 +247,6 @@ static void actuatorTask(__attribute__((unused)) void *parameters)
FlightStatusGet(&flightStatus);
ActuatorDesiredGet(&desired);
ActuatorCommandGet(&command);
SystemSettingsThrustControlGet(&thrustType);
// read in throttle and collective -demultiplex thrust
switch (thrustType) {
@ -258,12 +264,15 @@ static void actuatorTask(__attribute__((unused)) void *parameters)
}
bool armed = flightStatus.Armed == FLIGHTSTATUS_ARMED_ARMED;
bool activeThrottle = (throttleDesired < -0.001f || throttleDesired > 0.001f); // for ground and reversible motors
bool positiveThrottle = (throttleDesired > 0.00f);
// safety settings
if (!armed) {
throttleDesired = 0;
}
if (throttleDesired <= 0.00f || !armed) {
if ((frameType == FRAME_TYPE_GROUND && !activeThrottle) || (frameType != FRAME_TYPE_GROUND && throttleDesired <= 0.00f) || !armed) {
// force set all other controls to zero if throttle is cut (previously set in Stabilization)
if (actuatorSettings.LowThrottleZeroAxis.Roll == ACTUATORSETTINGS_LOWTHROTTLEZEROAXIS_TRUE) {
desired.Roll = 0;
@ -279,46 +288,47 @@ static void actuatorTask(__attribute__((unused)) void *parameters)
#ifdef DIAG_MIXERSTATUS
MixerStatusGet(&mixerStatus);
#endif
int nMixers = 0;
Mixer_t *mixers = (Mixer_t *)&mixerSettings.Mixer1Type;
for (int ct = 0; ct < MAX_MIX_ACTUATORS; ct++) {
if (mixers[ct].type != MIXERSETTINGS_MIXER1TYPE_DISABLED) {
nMixers++;
}
}
if ((nMixers < 2) && !ActuatorCommandReadOnly()) { // Nothing can fly with less than two mixers.
setFailsafe(&actuatorSettings, &mixerSettings); // So that channels like PWM buzzer keep working
if ((mixer_settings_count < 2) && !ActuatorCommandReadOnly()) { // Nothing can fly with less than two mixers.
setFailsafe();
continue;
}
AlarmsClear(SYSTEMALARMS_ALARM_ACTUATOR);
bool activeThrottle = (throttleDesired < 0.00f || throttleDesired > 0.00f);
bool positiveThrottle = (throttleDesired > 0.00f);
bool spinWhileArmed = actuatorSettings.MotorsSpinWhileArmed == ACTUATORSETTINGS_MOTORSSPINWHILEARMED_TRUE;
float curve1 = 0.0f;
float curve2 = 0.0f;
float curve1 = MixerCurve(throttleDesired, mixerSettings.ThrottleCurve1, MIXERSETTINGS_THROTTLECURVE1_NUMELEM);
// Interpolate curve 1 from throttleDesired as input.
// assume reversible motor/mixer initially. We can later reverse this. The difference is simply that -ve throttleDesired values
// map differently
curve1 = MixerCurveFullRangeProportional(throttleDesired, mixerSettings.ThrottleCurve1, MIXERSETTINGS_THROTTLECURVE1_NUMELEM);
// The source for the secondary curve is selectable
float curve2 = 0;
AccessoryDesiredData accessory;
switch (mixerSettings.Curve2Source) {
uint8_t curve2Source = mixerSettings.Curve2Source;
switch (curve2Source) {
case MIXERSETTINGS_CURVE2SOURCE_THROTTLE:
curve2 = MixerCurve(throttleDesired, mixerSettings.ThrottleCurve2, MIXERSETTINGS_THROTTLECURVE2_NUMELEM);
// assume reversible motor/mixer initially
curve2 = MixerCurveFullRangeProportional(throttleDesired, mixerSettings.ThrottleCurve2, MIXERSETTINGS_THROTTLECURVE2_NUMELEM);
break;
case MIXERSETTINGS_CURVE2SOURCE_ROLL:
curve2 = MixerCurve(desired.Roll, mixerSettings.ThrottleCurve2, MIXERSETTINGS_THROTTLECURVE2_NUMELEM);
// Throttle curve contribution the same for +ve vs -ve roll
curve2 = MixerCurveFullRangeAbsolute(desired.Roll, mixerSettings.ThrottleCurve2, MIXERSETTINGS_THROTTLECURVE2_NUMELEM);
break;
case MIXERSETTINGS_CURVE2SOURCE_PITCH:
curve2 = MixerCurve(desired.Pitch, mixerSettings.ThrottleCurve2,
MIXERSETTINGS_THROTTLECURVE2_NUMELEM);
// Throttle curve contribution the same for +ve vs -ve pitch
curve2 = MixerCurveFullRangeAbsolute(desired.Pitch, mixerSettings.ThrottleCurve2,
MIXERSETTINGS_THROTTLECURVE2_NUMELEM);
break;
case MIXERSETTINGS_CURVE2SOURCE_YAW:
curve2 = MixerCurve(desired.Yaw, mixerSettings.ThrottleCurve2, MIXERSETTINGS_THROTTLECURVE2_NUMELEM);
// Throttle curve contribution the same for +ve vs -ve yaw
curve2 = MixerCurveFullRangeAbsolute(desired.Yaw, mixerSettings.ThrottleCurve2, MIXERSETTINGS_THROTTLECURVE2_NUMELEM);
break;
case MIXERSETTINGS_CURVE2SOURCE_COLLECTIVE:
curve2 = MixerCurve(collectiveDesired, mixerSettings.ThrottleCurve2,
MIXERSETTINGS_THROTTLECURVE2_NUMELEM);
// assume reversible motor/mixer initially
curve2 = MixerCurveFullRangeProportional(collectiveDesired, mixerSettings.ThrottleCurve2,
MIXERSETTINGS_THROTTLECURVE2_NUMELEM);
break;
case MIXERSETTINGS_CURVE2SOURCE_ACCESSORY0:
case MIXERSETTINGS_CURVE2SOURCE_ACCESSORY1:
@ -327,14 +337,19 @@ static void actuatorTask(__attribute__((unused)) void *parameters)
case MIXERSETTINGS_CURVE2SOURCE_ACCESSORY4:
case MIXERSETTINGS_CURVE2SOURCE_ACCESSORY5:
if (AccessoryDesiredInstGet(mixerSettings.Curve2Source - MIXERSETTINGS_CURVE2SOURCE_ACCESSORY0, &accessory) == 0) {
curve2 = MixerCurve(accessory.AccessoryVal, mixerSettings.ThrottleCurve2, MIXERSETTINGS_THROTTLECURVE2_NUMELEM);
// Throttle curve contribution the same for +ve vs -ve accessory....maybe not want we want.
curve2 = MixerCurveFullRangeAbsolute(accessory.AccessoryVal, mixerSettings.ThrottleCurve2, MIXERSETTINGS_THROTTLECURVE2_NUMELEM);
} else {
curve2 = 0;
curve2 = 0.0f;
}
break;
default:
curve2 = 0.0f;
break;
}
float *status = (float *)&mixerStatus; // access status objects as an array of floats
float *status = (float *)&mixerStatus; // access status objects as an array of floats
Mixer_t *mixers = (Mixer_t *)&mixerSettings.Mixer1Type;
for (int ct = 0; ct < MAX_MIX_ACTUATORS; ct++) {
// During boot all camera actuators should be completely disabled (PWM pulse = 0).
@ -343,20 +358,22 @@ static void actuatorTask(__attribute__((unused)) void *parameters)
// Setting it to 1 by default means "Rescale this channel and enable PWM on its output".
command.Channel[ct] = 1;
if (mixers[ct].type == MIXERSETTINGS_MIXER1TYPE_DISABLED) {
uint8_t mixer_type = mixers[ct].type;
if (mixer_type == MIXERSETTINGS_MIXER1TYPE_DISABLED) {
// Set to minimum if disabled. This is not the same as saying PWM pulse = 0 us
status[ct] = -1;
continue;
}
if ((mixers[ct].type == MIXERSETTINGS_MIXER1TYPE_MOTOR) || (mixers[ct].type == MIXERSETTINGS_MIXER1TYPE_REVERSABLEMOTOR) || (mixers[ct].type == MIXERSETTINGS_MIXER1TYPE_SERVO)) {
status[ct] = ProcessMixer(ct, curve1, curve2, &mixerSettings, &desired, dTSeconds);
} else {
status[ct] = -1;
}
// Motors have additional protection for when to be on
if (mixers[ct].type == MIXERSETTINGS_MIXER1TYPE_MOTOR) {
if ((mixer_type == MIXERSETTINGS_MIXER1TYPE_MOTOR)) {
if (curve1 < 0.0f) {
curve1 = 0.0f;
}
if (curve2 < 0.0f) {
curve2 = 0.0f;
}
status[ct] = ProcessMixer(ct, curve1, curve2, &desired, dTSeconds);
// If not armed or motors aren't meant to spin all the time
if (!armed ||
(!spinWhileArmed && !positiveThrottle)) {
@ -369,57 +386,60 @@ static void actuatorTask(__attribute__((unused)) void *parameters)
(status[ct] < 0)) {
status[ct] = 0;
}
}
// Reversable Motors are like Motors but go to neutral instead of minimum
if (mixers[ct].type == MIXERSETTINGS_MIXER1TYPE_REVERSABLEMOTOR) {
} else if (mixer_type == MIXERSETTINGS_MIXER1TYPE_REVERSABLEMOTOR) {
status[ct] = ProcessMixer(ct, curve1, curve2, &desired, dTSeconds);
// Reversable Motors are like Motors but go to neutral instead of minimum
// If not armed or motor is inactive - no "spinwhilearmed" for this engine type
if (!armed || !activeThrottle) {
filterAccumulator[ct] = 0;
lastResult[ct] = 0;
status[ct] = 0; // force neutral throttle
}
}
} else if (mixer_type == MIXERSETTINGS_MIXER1TYPE_SERVO) {
status[ct] = ProcessMixer(ct, curve1, curve2, &desired, dTSeconds);
} else {
status[ct] = -1;
// If an accessory channel is selected for direct bypass mode
// In this configuration the accessory channel is scaled and mapped
// directly to output. Note: THERE IS NO SAFETY CHECK HERE FOR ARMING
// these also will not be updated in failsafe mode. I'm not sure what
// the correct behavior is since it seems domain specific. I don't love
// this code
if ((mixers[ct].type >= MIXERSETTINGS_MIXER1TYPE_ACCESSORY0) &&
(mixers[ct].type <= MIXERSETTINGS_MIXER1TYPE_ACCESSORY5)) {
if (AccessoryDesiredInstGet(mixers[ct].type - MIXERSETTINGS_MIXER1TYPE_ACCESSORY0, &accessory) == 0) {
status[ct] = accessory.AccessoryVal;
} else {
status[ct] = -1;
}
}
if ((mixers[ct].type >= MIXERSETTINGS_MIXER1TYPE_CAMERAROLLORSERVO1) &&
(mixers[ct].type <= MIXERSETTINGS_MIXER1TYPE_CAMERAYAW)) {
CameraDesiredData cameraDesired;
if (CameraDesiredGet(&cameraDesired) == 0) {
switch (mixers[ct].type) {
case MIXERSETTINGS_MIXER1TYPE_CAMERAROLLORSERVO1:
status[ct] = cameraDesired.RollOrServo1;
break;
case MIXERSETTINGS_MIXER1TYPE_CAMERAPITCHORSERVO2:
status[ct] = cameraDesired.PitchOrServo2;
break;
case MIXERSETTINGS_MIXER1TYPE_CAMERAYAW:
status[ct] = cameraDesired.Yaw;
break;
default:
break;
// If an accessory channel is selected for direct bypass mode
// In this configuration the accessory channel is scaled and mapped
// directly to output. Note: THERE IS NO SAFETY CHECK HERE FOR ARMING
// these also will not be updated in failsafe mode. I'm not sure what
// the correct behavior is since it seems domain specific. I don't love
// this code
if ((mixer_type >= MIXERSETTINGS_MIXER1TYPE_ACCESSORY0) &&
(mixer_type <= MIXERSETTINGS_MIXER1TYPE_ACCESSORY5)) {
if (AccessoryDesiredInstGet(mixer_type - MIXERSETTINGS_MIXER1TYPE_ACCESSORY0, &accessory) == 0) {
status[ct] = accessory.AccessoryVal;
} else {
status[ct] = -1;
}
} else {
status[ct] = -1;
}
// Disable camera actuators for CAMERA_BOOT_DELAY_MS after boot
if (thisSysTime < (CAMERA_BOOT_DELAY_MS / portTICK_RATE_MS)) {
command.Channel[ct] = 0;
if ((mixer_type >= MIXERSETTINGS_MIXER1TYPE_CAMERAROLLORSERVO1) &&
(mixer_type <= MIXERSETTINGS_MIXER1TYPE_CAMERAYAW)) {
CameraDesiredData cameraDesired;
if (CameraDesiredGet(&cameraDesired) == 0) {
switch (mixer_type) {
case MIXERSETTINGS_MIXER1TYPE_CAMERAROLLORSERVO1:
status[ct] = cameraDesired.RollOrServo1;
break;
case MIXERSETTINGS_MIXER1TYPE_CAMERAPITCHORSERVO2:
status[ct] = cameraDesired.PitchOrServo2;
break;
case MIXERSETTINGS_MIXER1TYPE_CAMERAYAW:
status[ct] = cameraDesired.Yaw;
break;
default:
break;
}
} else {
status[ct] = -1;
}
// Disable camera actuators for CAMERA_BOOT_DELAY_MS after boot
if (thisSysTime < (CAMERA_BOOT_DELAY_MS / portTICK_RATE_MS)) {
command.Channel[ct] = 0;
}
}
}
}
@ -454,7 +474,7 @@ static void actuatorTask(__attribute__((unused)) void *parameters)
bool success = true;
for (int n = 0; n < ACTUATORCOMMAND_CHANNEL_NUMELEM; ++n) {
success &= set_channel(n, command.Channel[n], &actuatorSettings);
success &= set_channel(n, command.Channel[n]);
}
PIOS_Servo_Update();
@ -475,10 +495,10 @@ static void actuatorTask(__attribute__((unused)) void *parameters)
* Process mixing for one actuator
*/
float ProcessMixer(const int index, const float curve1, const float curve2,
const MixerSettingsData *mixerSettings, ActuatorDesiredData *desired, const float period)
ActuatorDesiredData *desired, const float period)
{
static float lastFilteredResult[MAX_MIX_ACTUATORS];
const Mixer_t *mixers = (Mixer_t *)&mixerSettings->Mixer1Type; // pointer to array of mixers in UAVObjects
const Mixer_t *mixers = (Mixer_t *)&mixerSettings.Mixer1Type; // pointer to array of mixers in UAVObjects
const Mixer_t *mixer = &mixers[index];
float result = ((((float)mixer->matrix[MIXERSETTINGS_MIXER1VECTOR_THROTTLECURVE1]) * curve1) +
@ -495,18 +515,18 @@ float ProcessMixer(const int index, const float curve1, const float curve2,
// feed forward
float accumulator = filterAccumulator[index];
accumulator += (result - lastResult[index]) * mixerSettings->FeedForward;
accumulator += (result - lastResult[index]) * mixerSettings.FeedForward;
lastResult[index] = result;
result += accumulator;
if (period > 0.0f) {
if (accumulator > 0.0f) {
float invFilter = period / mixerSettings->AccelTime;
float invFilter = period / mixerSettings.AccelTime;
if (invFilter > 1) {
invFilter = 1;
}
accumulator -= accumulator * invFilter;
} else {
float invFilter = period / mixerSettings->DecelTime;
float invFilter = period / mixerSettings.DecelTime;
if (invFilter > 1) {
invFilter = 1;
}
@ -518,7 +538,7 @@ float ProcessMixer(const int index, const float curve1, const float curve2,
// acceleration limit
float dt = result - lastFilteredResult[index];
float maxDt = mixerSettings->MaxAccel * period;
float maxDt = mixerSettings.MaxAccel * period;
if (dt > maxDt) { // we are accelerating too hard
result = lastFilteredResult[index] + maxDt;
}
@ -530,17 +550,43 @@ float ProcessMixer(const int index, const float curve1, const float curve2,
/**
* Interpolate a throttle curve. Throttle input should be in the range 0 to 1.
* Output is in the range 0 to 1.
* Interpolate a throttle curve
* Full range input (-1 to 1) for yaw, roll, pitch
* Output range (-1 to 1) reversible motor/throttle curve
*
* Input of -1 -> -lookup(1)
* Input of 0 -> lookup(0)
* Input of 1 -> lookup(1)
*/
static float MixerCurve(const float throttle, const float *curve, uint8_t elements)
static float MixerCurveFullRangeProportional(const float input, const float *curve, uint8_t elements)
{
float scale = throttle * (float)(elements - 1);
int idx1 = scale;
float unsigned_value = MixerCurveFullRangeAbsolute(input, curve, elements);
if (input < 0.0f) {
return -unsigned_value;
} else {
return unsigned_value;
}
}
/**
* Interpolate a throttle curve
* Full range input (-1 to 1) for yaw, roll, pitch
* Output range (0 to 1) non-reversible motor/throttle curve
*
* Input of -1 -> lookup(1)
* Input of 0 -> lookup(0)
* Input of 1 -> lookup(1)
*/
static float MixerCurveFullRangeAbsolute(const float input, const float *curve, uint8_t elements)
{
float abs_input = fabsf(input);
float scale = abs_input * (float)(elements - 1);
int idx1 = scale;
scale -= (float)idx1; // remainder
if (curve[0] < -1) {
return throttle;
return input;
}
if (idx1 < 0) {
idx1 = 0; // clamp to lowest entry in table
@ -553,7 +599,9 @@ static float MixerCurve(const float throttle, const float *curve, uint8_t elemen
idx1 = elements - 1;
}
}
return curve[idx1] * (1.0f - scale) + curve[idx2] * scale;
float unsigned_value = curve[idx1] * (1.0f - scale) + curve[idx2] * scale;
return unsigned_value;
}
@ -593,21 +641,22 @@ static int16_t scaleChannel(float value, int16_t max, int16_t min, int16_t neutr
/**
* Set actuator output to the neutral values (failsafe)
*/
static void setFailsafe(const ActuatorSettingsData *actuatorSettings, const MixerSettingsData *mixerSettings)
static void setFailsafe()
{
/* grab only the parts that we are going to use */
int16_t Channel[ACTUATORCOMMAND_CHANNEL_NUMELEM];
ActuatorCommandChannelGet(Channel);
const Mixer_t *mixers = (Mixer_t *)&mixerSettings->Mixer1Type; // pointer to array of mixers in UAVObjects
const Mixer_t *mixers = (Mixer_t *)&mixerSettings.Mixer1Type; // pointer to array of mixers in UAVObjects
// Reset ActuatorCommand to safe values
for (int n = 0; n < ACTUATORCOMMAND_CHANNEL_NUMELEM; ++n) {
if (mixers[n].type == MIXERSETTINGS_MIXER1TYPE_MOTOR) {
Channel[n] = actuatorSettings->ChannelMin[n];
Channel[n] = actuatorSettings.ChannelMin[n];
} else if (mixers[n].type == MIXERSETTINGS_MIXER1TYPE_SERVO || mixers[n].type == MIXERSETTINGS_MIXER1TYPE_REVERSABLEMOTOR) {
Channel[n] = actuatorSettings->ChannelNeutral[n];
// reversible motors need calibration wizard that allows channel neutral to be the 0 velocity point
Channel[n] = actuatorSettings.ChannelNeutral[n];
} else {
Channel[n] = 0;
}
@ -618,7 +667,7 @@ static void setFailsafe(const ActuatorSettingsData *actuatorSettings, const Mixe
// Update servo outputs
for (int n = 0; n < ACTUATORCOMMAND_CHANNEL_NUMELEM; ++n) {
set_channel(n, Channel[n], actuatorSettings);
set_channel(n, Channel[n]);
}
// Send the updated command
PIOS_Servo_Update();
@ -713,39 +762,39 @@ static inline bool buzzerState(buzzertype type)
#if defined(ARCH_POSIX) || defined(ARCH_WIN32)
static bool set_channel(uint8_t mixer_channel, uint16_t value, const ActuatorSettingsData *actuatorSettings)
static bool set_channel(uint8_t mixer_channel, uint16_t value)
{
return true;
}
#else
static bool set_channel(uint8_t mixer_channel, uint16_t value, const ActuatorSettingsData *actuatorSettings)
static bool set_channel(uint8_t mixer_channel, uint16_t value)
{
switch (actuatorSettings->ChannelType[mixer_channel]) {
switch (actuatorSettings.ChannelType[mixer_channel]) {
case ACTUATORSETTINGS_CHANNELTYPE_PWMALARMBUZZER:
PIOS_Servo_Set(actuatorSettings->ChannelAddr[mixer_channel],
buzzerState(BUZZ_BUZZER) ? actuatorSettings->ChannelMax[mixer_channel] : actuatorSettings->ChannelMin[mixer_channel]);
PIOS_Servo_Set(actuatorSettings.ChannelAddr[mixer_channel],
buzzerState(BUZZ_BUZZER) ? actuatorSettings.ChannelMax[mixer_channel] : actuatorSettings.ChannelMin[mixer_channel]);
return true;
case ACTUATORSETTINGS_CHANNELTYPE_ARMINGLED:
PIOS_Servo_Set(actuatorSettings->ChannelAddr[mixer_channel],
buzzerState(BUZZ_ARMING) ? actuatorSettings->ChannelMax[mixer_channel] : actuatorSettings->ChannelMin[mixer_channel]);
PIOS_Servo_Set(actuatorSettings.ChannelAddr[mixer_channel],
buzzerState(BUZZ_ARMING) ? actuatorSettings.ChannelMax[mixer_channel] : actuatorSettings.ChannelMin[mixer_channel]);
return true;
case ACTUATORSETTINGS_CHANNELTYPE_INFOLED:
PIOS_Servo_Set(actuatorSettings->ChannelAddr[mixer_channel],
buzzerState(BUZZ_INFO) ? actuatorSettings->ChannelMax[mixer_channel] : actuatorSettings->ChannelMin[mixer_channel]);
PIOS_Servo_Set(actuatorSettings.ChannelAddr[mixer_channel],
buzzerState(BUZZ_INFO) ? actuatorSettings.ChannelMax[mixer_channel] : actuatorSettings.ChannelMin[mixer_channel]);
return true;
case ACTUATORSETTINGS_CHANNELTYPE_PWM:
{
uint8_t mode = pinsMode[actuatorSettings->ChannelAddr[mixer_channel]];
uint8_t mode = pinsMode[actuatorSettings.ChannelAddr[mixer_channel]];
switch (mode) {
case ACTUATORSETTINGS_BANKMODE_ONESHOT125:
// Remap 1000-2000 range to 125-250
PIOS_Servo_Set(actuatorSettings->ChannelAddr[mixer_channel], value / ACTUATOR_ONESHOT125_PULSE_SCALE);
PIOS_Servo_Set(actuatorSettings.ChannelAddr[mixer_channel], value / ACTUATOR_ONESHOT125_PULSE_SCALE);
break;
default:
PIOS_Servo_Set(actuatorSettings->ChannelAddr[mixer_channel], value);
PIOS_Servo_Set(actuatorSettings.ChannelAddr[mixer_channel], value);
break;
}
return true;
@ -770,12 +819,12 @@ static bool set_channel(uint8_t mixer_channel, uint16_t value, const ActuatorSet
/**
* @brief Update the servo update rate
*/
static void actuator_update_rate_if_changed(const ActuatorSettingsData *actuatorSettings, bool force_update)
static void actuator_update_rate_if_changed(bool force_update)
{
static uint16_t prevBankUpdateFreq[ACTUATORSETTINGS_BANKUPDATEFREQ_NUMELEM];
static uint8_t prevBankMode[ACTUATORSETTINGS_BANKMODE_NUMELEM];
bool updateMode = force_update || (memcmp(prevBankMode, actuatorSettings->BankMode, sizeof(prevBankMode)) != 0);
bool updateFreq = force_update || (memcmp(prevBankUpdateFreq, actuatorSettings->BankUpdateFreq, sizeof(prevBankUpdateFreq)) != 0);
bool updateMode = force_update || (memcmp(prevBankMode, actuatorSettings.BankMode, sizeof(prevBankMode)) != 0);
bool updateFreq = force_update || (memcmp(prevBankUpdateFreq, actuatorSettings.BankUpdateFreq, sizeof(prevBankUpdateFreq)) != 0);
// check if any setting is changed
if (updateMode || updateFreq) {
@ -784,15 +833,15 @@ static void actuator_update_rate_if_changed(const ActuatorSettingsData *actuator
uint16_t freq[ACTUATORSETTINGS_BANKUPDATEFREQ_NUMELEM];
uint32_t clock[ACTUATORSETTINGS_BANKUPDATEFREQ_NUMELEM] = { 0 };
for (uint8_t i = 0; i < ACTUATORSETTINGS_BANKMODE_NUMELEM; i++) {
if (force_update || (actuatorSettings->BankMode[i] != prevBankMode[i])) {
if (force_update || (actuatorSettings.BankMode[i] != prevBankMode[i])) {
PIOS_Servo_SetBankMode(i,
actuatorSettings->BankMode[i] ==
actuatorSettings.BankMode[i] ==
ACTUATORSETTINGS_BANKMODE_PWM ?
PIOS_SERVO_BANK_MODE_PWM :
PIOS_SERVO_BANK_MODE_SINGLE_PULSE
);
}
switch (actuatorSettings->BankMode[i]) {
switch (actuatorSettings.BankMode[i]) {
case ACTUATORSETTINGS_BANKMODE_ONESHOT125:
freq[i] = 100; // Value must be small enough so CCr isn't update until the PIOS_Servo_Update is triggered
clock[i] = ACTUATOR_ONESHOT125_CLOCK; // Setup an 2MHz timer clock
@ -802,37 +851,73 @@ static void actuator_update_rate_if_changed(const ActuatorSettingsData *actuator
clock[i] = ACTUATOR_PWM_CLOCK;
break;
default: // PWM
freq[i] = actuatorSettings->BankUpdateFreq[i];
freq[i] = actuatorSettings.BankUpdateFreq[i];
clock[i] = ACTUATOR_PWM_CLOCK;
break;
}
}
memcpy(prevBankMode,
actuatorSettings->BankMode,
actuatorSettings.BankMode,
sizeof(prevBankMode));
PIOS_Servo_SetHz(freq, clock, ACTUATORSETTINGS_BANKUPDATEFREQ_NUMELEM);
memcpy(prevBankUpdateFreq,
actuatorSettings->BankUpdateFreq,
actuatorSettings.BankUpdateFreq,
sizeof(prevBankUpdateFreq));
// retrieve mode from related bank
for (uint8_t i = 0; i < MAX_MIX_ACTUATORS; i++) {
uint8_t bank = PIOS_Servo_GetPinBank(i);
pinsMode[i] = actuatorSettings->BankMode[bank];
pinsMode[i] = actuatorSettings.BankMode[bank];
}
}
}
static void ActuatorSettingsUpdatedCb(__attribute__((unused)) UAVObjEvent *ev)
{
actuator_settings_updated = true;
ActuatorSettingsGet(&actuatorSettings);
spinWhileArmed = actuatorSettings.MotorsSpinWhileArmed == ACTUATORSETTINGS_MOTORSSPINWHILEARMED_TRUE;
if (frameType == FRAME_TYPE_GROUND) {
spinWhileArmed = false;
}
actuator_update_rate_if_changed(false);
}
static void MixerSettingsUpdatedCb(__attribute__((unused)) UAVObjEvent *ev)
{
mixer_settings_updated = true;
MixerSettingsGet(&mixerSettings);
mixer_settings_count = 0;
Mixer_t *mixers = (Mixer_t *)&mixerSettings.Mixer1Type;
for (int ct = 0; ct < MAX_MIX_ACTUATORS; ct++) {
if (mixers[ct].type != MIXERSETTINGS_MIXER1TYPE_DISABLED) {
mixer_settings_count++;
}
}
}
static void SettingsUpdatedCb(__attribute__((unused)) UAVObjEvent *ev)
{
frameType = GetCurrentFrameType();
#ifndef PIOS_EXCLUDE_ADVANCED_FEATURES
uint8_t TreatCustomCraftAs;
VtolPathFollowerSettingsTreatCustomCraftAsGet(&TreatCustomCraftAs);
if (frameType == FRAME_TYPE_CUSTOM) {
switch (TreatCustomCraftAs) {
case VTOLPATHFOLLOWERSETTINGS_TREATCUSTOMCRAFTAS_FIXEDWING:
frameType = FRAME_TYPE_FIXED_WING;
break;
case VTOLPATHFOLLOWERSETTINGS_TREATCUSTOMCRAFTAS_VTOL:
frameType = FRAME_TYPE_MULTIROTOR;
break;
case VTOLPATHFOLLOWERSETTINGS_TREATCUSTOMCRAFTAS_GROUND:
frameType = FRAME_TYPE_GROUND;
break;
}
}
#endif
SystemSettingsThrustControlGet(&thrustType);
}
/**

View File

@ -37,7 +37,8 @@
#include <stabilizationdesired.h>
// Private constants
#define ARMED_THRESHOLD 0.50f
#define ARMED_THRESHOLD 0.50f
#define GROUND_LOW_THROTTLE 0.01f
// Private types
typedef enum {
@ -62,7 +63,7 @@ static bool forcedDisArm(void);
* @input: ManualControlCommand, AccessoryDesired
* @output: FlightStatus.Arming
*/
void armHandler(bool newinit)
void armHandler(bool newinit, FrameType_t frameType)
{
static ArmState_t armState;
@ -82,7 +83,12 @@ void armHandler(bool newinit)
bool lowThrottle = cmd.Throttle < 0;
bool armSwitch = false;
if (frameType == FRAME_TYPE_GROUND) {
// Deadbanding applied in receiver.c typically at 2% but we don't assume its enabled.
lowThrottle = fabsf(cmd.Throttle) < GROUND_LOW_THROTTLE;
}
bool armSwitch = false;
switch (settings.Arming) {
case FLIGHTMODESETTINGS_ARMING_ACCESSORY0:

View File

@ -32,6 +32,7 @@
#include <openpilot.h>
#include <flightstatus.h>
#include <sanitycheck.h>
typedef void (*handlerFunc)(bool newinit);
@ -45,7 +46,7 @@ typedef struct controlHandlerStruct {
* @input: ManualControlCommand, AccessoryDesired
* @output: FlightStatus.Arming
*/
void armHandler(bool newinit);
void armHandler(bool newinit, FrameType_t frameType);
/**
* @brief Handler to control Manual flightmode - input directly steers actuators

View File

@ -108,6 +108,7 @@ static float thrustHi = 0.0f;
#endif /* ifndef PIOS_EXCLUDE_ADVANCED_FEATURES */
// Private variables
static DelayedCallbackInfo *callbackHandle;
static FrameType_t frameType = FRAME_TYPE_MULTIROTOR;
// Private functions
static void configurationUpdatedCb(UAVObjEvent *ev);
@ -116,6 +117,7 @@ static void manualControlTask(void);
#ifndef PIOS_EXCLUDE_ADVANCED_FEATURES
static uint8_t isAssistedFlightMode(uint8_t position, uint8_t flightMode, FlightModeSettingsData *modeSettings);
#endif
static void SettingsUpdatedCb(UAVObjEvent *ev);
#define assumptions (assumptions1 && assumptions2 && assumptions3 && assumptions4 && assumptions5 && assumptions6 && assumptions7 && assumptions_flightmode)
@ -135,11 +137,14 @@ int32_t ManualControlStart()
// clear alarms
AlarmsClear(SYSTEMALARMS_ALARM_MANUALCONTROL);
SettingsUpdatedCb(NULL);
// Make sure unarmed on power up
armHandler(true);
armHandler(true, frameType);
#ifndef PIOS_EXCLUDE_ADVANCED_FEATURES
takeOffLocationHandlerInit();
#endif
// Start main task
PIOS_CALLBACKSCHEDULER_Dispatch(callbackHandle);
@ -164,6 +169,8 @@ int32_t ManualControlInitialize()
#ifndef PIOS_EXCLUDE_ADVANCED_FEATURES
VtolSelfTuningStatsInitialize();
VtolPathFollowerSettingsInitialize();
VtolPathFollowerSettingsConnectCallback(&SettingsUpdatedCb);
SystemSettingsConnectCallback(&SettingsUpdatedCb);
#endif
callbackHandle = PIOS_CALLBACKSCHEDULER_Create(&manualControlTask, CALLBACK_PRIORITY, CBTASK_PRIORITY, CALLBACKINFO_RUNNING_MANUALCONTROL, STACK_SIZE_BYTES);
@ -171,13 +178,37 @@ int32_t ManualControlInitialize()
}
MODULE_INITCALL(ManualControlInitialize, ManualControlStart);
static void SettingsUpdatedCb(__attribute__((unused)) UAVObjEvent *ev)
{
frameType = GetCurrentFrameType();
#ifndef PIOS_EXCLUDE_ADVANCED_FEATURES
uint8_t TreatCustomCraftAs;
VtolPathFollowerSettingsTreatCustomCraftAsGet(&TreatCustomCraftAs);
if (frameType == FRAME_TYPE_CUSTOM) {
switch (TreatCustomCraftAs) {
case VTOLPATHFOLLOWERSETTINGS_TREATCUSTOMCRAFTAS_FIXEDWING:
frameType = FRAME_TYPE_FIXED_WING;
break;
case VTOLPATHFOLLOWERSETTINGS_TREATCUSTOMCRAFTAS_VTOL:
frameType = FRAME_TYPE_MULTIROTOR;
break;
case VTOLPATHFOLLOWERSETTINGS_TREATCUSTOMCRAFTAS_GROUND:
frameType = FRAME_TYPE_GROUND;
break;
}
}
#endif
}
/**
* Module task
*/
static void manualControlTask(void)
{
// Process Arming
armHandler(false);
armHandler(false, frameType);
#ifndef PIOS_EXCLUDE_ADVANCED_FEATURES
takeOffLocationHandler();
#endif

View File

@ -41,10 +41,12 @@
#include <flighttelemetrystats.h>
#ifndef PIOS_EXCLUDE_ADVANCED_FEATURES
#include <stabilizationsettings.h>
#include <vtolpathfollowersettings.h>
#endif
#include <flightmodesettings.h>
#include <systemsettings.h>
#include <taskinfo.h>
#include <sanitycheck.h>
#if defined(PIOS_INCLUDE_USB_RCTX)
@ -72,6 +74,7 @@
// Private variables
static xTaskHandle taskHandle;
static portTickType lastSysTime;
static FrameType_t frameType = FRAME_TYPE_MULTIROTOR;
#ifdef USE_INPUT_LPF
static portTickType lastSysTimeLPF;
@ -84,6 +87,7 @@ static float scaleChannel(int16_t value, int16_t max, int16_t min, int16_t neutr
static uint32_t timeDifferenceMs(portTickType start_time, portTickType end_time);
static bool validInputRange(int16_t min, int16_t max, uint16_t value);
static void applyDeadband(float *value, float deadband);
static void SettingsUpdatedCb(UAVObjEvent *ev);
#ifndef PIOS_EXCLUDE_ADVANCED_FEATURES
static uint8_t isAssistedFlightMode(uint8_t position);
@ -124,6 +128,7 @@ int32_t ReceiverStart()
#ifdef PIOS_INCLUDE_WDG
PIOS_WDG_RegisterFlag(PIOS_WDG_MANUAL);
#endif
SettingsUpdatedCb(NULL);
return 0;
}
@ -141,13 +146,43 @@ int32_t ReceiverInitialize()
ManualControlSettingsInitialize();
#ifndef PIOS_EXCLUDE_ADVANCED_FEATURES
StabilizationSettingsInitialize();
VtolPathFollowerSettingsInitialize();
VtolPathFollowerSettingsConnectCallback(&SettingsUpdatedCb);
#endif
SystemSettingsInitialize();
SystemSettingsConnectCallback(&SettingsUpdatedCb);
return 0;
}
MODULE_INITCALL(ReceiverInitialize, ReceiverStart);
static void SettingsUpdatedCb(__attribute__((unused)) UAVObjEvent *ev)
{
frameType = GetCurrentFrameType();
#ifndef PIOS_EXCLUDE_ADVANCED_FEATURES
uint8_t TreatCustomCraftAs;
VtolPathFollowerSettingsTreatCustomCraftAsGet(&TreatCustomCraftAs);
if (frameType == FRAME_TYPE_CUSTOM) {
switch (TreatCustomCraftAs) {
case VTOLPATHFOLLOWERSETTINGS_TREATCUSTOMCRAFTAS_FIXEDWING:
frameType = FRAME_TYPE_FIXED_WING;
break;
case VTOLPATHFOLLOWERSETTINGS_TREATCUSTOMCRAFTAS_VTOL:
frameType = FRAME_TYPE_MULTIROTOR;
break;
case VTOLPATHFOLLOWERSETTINGS_TREATCUSTOMCRAFTAS_GROUND:
frameType = FRAME_TYPE_GROUND;
break;
}
}
#endif
}
/**
* Module task
*/
@ -243,22 +278,16 @@ static void receiverTask(__attribute__((unused)) void *parameters)
}
}
// Check settings, if error raise alarm
if (settings.ChannelGroups.Roll >= MANUALCONTROLSETTINGS_CHANNELGROUPS_NONE
|| settings.ChannelGroups.Pitch >= MANUALCONTROLSETTINGS_CHANNELGROUPS_NONE
|| settings.ChannelGroups.Yaw >= MANUALCONTROLSETTINGS_CHANNELGROUPS_NONE
// Sanity Check Throttle and Yaw
if (settings.ChannelGroups.Yaw >= MANUALCONTROLSETTINGS_CHANNELGROUPS_NONE
|| settings.ChannelGroups.Throttle >= MANUALCONTROLSETTINGS_CHANNELGROUPS_NONE
||
// Check all channel mappings are valid
cmd.Channel[MANUALCONTROLSETTINGS_CHANNELGROUPS_ROLL] == (uint16_t)PIOS_RCVR_INVALID
|| cmd.Channel[MANUALCONTROLSETTINGS_CHANNELGROUPS_PITCH] == (uint16_t)PIOS_RCVR_INVALID
|| cmd.Channel[MANUALCONTROLSETTINGS_CHANNELGROUPS_YAW] == (uint16_t)PIOS_RCVR_INVALID
cmd.Channel[MANUALCONTROLSETTINGS_CHANNELGROUPS_YAW] == (uint16_t)PIOS_RCVR_INVALID
|| cmd.Channel[MANUALCONTROLSETTINGS_CHANNELGROUPS_THROTTLE] == (uint16_t)PIOS_RCVR_INVALID
||
// Check the driver exists
cmd.Channel[MANUALCONTROLSETTINGS_CHANNELGROUPS_ROLL] == (uint16_t)PIOS_RCVR_NODRIVER
|| cmd.Channel[MANUALCONTROLSETTINGS_CHANNELGROUPS_PITCH] == (uint16_t)PIOS_RCVR_NODRIVER
|| cmd.Channel[MANUALCONTROLSETTINGS_CHANNELGROUPS_YAW] == (uint16_t)PIOS_RCVR_NODRIVER
cmd.Channel[MANUALCONTROLSETTINGS_CHANNELGROUPS_YAW] == (uint16_t)PIOS_RCVR_NODRIVER
|| cmd.Channel[MANUALCONTROLSETTINGS_CHANNELGROUPS_THROTTLE] == (uint16_t)PIOS_RCVR_NODRIVER
||
// Check collective if required
@ -282,15 +311,39 @@ static void receiverTask(__attribute__((unused)) void *parameters)
continue;
}
if (frameType != FRAME_TYPE_GROUND) {
// Sanity Check Pitch and Roll
if (settings.ChannelGroups.Roll >= MANUALCONTROLSETTINGS_CHANNELGROUPS_NONE
|| settings.ChannelGroups.Pitch >= MANUALCONTROLSETTINGS_CHANNELGROUPS_NONE
||
// Check all channel mappings are valid
cmd.Channel[MANUALCONTROLSETTINGS_CHANNELGROUPS_ROLL] == (uint16_t)PIOS_RCVR_INVALID
|| cmd.Channel[MANUALCONTROLSETTINGS_CHANNELGROUPS_PITCH] == (uint16_t)PIOS_RCVR_INVALID
||
// Check the driver exists
cmd.Channel[MANUALCONTROLSETTINGS_CHANNELGROUPS_ROLL] == (uint16_t)PIOS_RCVR_NODRIVER
|| cmd.Channel[MANUALCONTROLSETTINGS_CHANNELGROUPS_PITCH] == (uint16_t)PIOS_RCVR_NODRIVER) {
AlarmsSet(SYSTEMALARMS_ALARM_RECEIVER, SYSTEMALARMS_ALARM_CRITICAL);
cmd.Connected = MANUALCONTROLCOMMAND_CONNECTED_FALSE;
ManualControlCommandSet(&cmd);
continue;
}
}
// decide if we have valid manual input or not
valid_input_detected &= validInputRange(settings.ChannelMin.Throttle,
settings.ChannelMax.Throttle, cmd.Channel[MANUALCONTROLSETTINGS_CHANNELGROUPS_THROTTLE])
&& validInputRange(settings.ChannelMin.Roll,
settings.ChannelMax.Roll, cmd.Channel[MANUALCONTROLSETTINGS_CHANNELGROUPS_ROLL])
&& validInputRange(settings.ChannelMin.Yaw,
settings.ChannelMax.Yaw, cmd.Channel[MANUALCONTROLSETTINGS_CHANNELGROUPS_YAW])
&& validInputRange(settings.ChannelMin.Pitch,
settings.ChannelMax.Pitch, cmd.Channel[MANUALCONTROLSETTINGS_CHANNELGROUPS_PITCH]);
settings.ChannelMax.Yaw, cmd.Channel[MANUALCONTROLSETTINGS_CHANNELGROUPS_YAW]);
if (frameType != FRAME_TYPE_GROUND) {
valid_input_detected &= validInputRange(settings.ChannelMin.Roll,
settings.ChannelMax.Roll, cmd.Channel[MANUALCONTROLSETTINGS_CHANNELGROUPS_ROLL])
&& validInputRange(settings.ChannelMin.Pitch,
settings.ChannelMax.Pitch, cmd.Channel[MANUALCONTROLSETTINGS_CHANNELGROUPS_PITCH]);
}
if (settings.ChannelGroups.Collective != MANUALCONTROLSETTINGS_CHANNELGROUPS_NONE) {
valid_input_detected &= validInputRange(settings.ChannelMin.Collective,
@ -321,10 +374,14 @@ static void receiverTask(__attribute__((unused)) void *parameters)
}
if (cmd.Connected == MANUALCONTROLCOMMAND_CONNECTED_FALSE) {
cmd.Throttle = settings.FailsafeChannel.Throttle;
cmd.Roll = settings.FailsafeChannel.Roll;
cmd.Pitch = settings.FailsafeChannel.Pitch;
cmd.Yaw = settings.FailsafeChannel.Yaw;
if (frameType != FRAME_TYPE_GROUND) {
cmd.Throttle = settings.FailsafeChannel.Throttle;
} else {
cmd.Throttle = 0.0f;
}
cmd.Roll = settings.FailsafeChannel.Roll;
cmd.Pitch = settings.FailsafeChannel.Pitch;
cmd.Yaw = settings.FailsafeChannel.Yaw;
cmd.Collective = settings.FailsafeChannel.Collective;
switch (thrustType) {
case SYSTEMSETTINGS_THRUSTCONTROL_THROTTLE:
@ -401,6 +458,9 @@ static void receiverTask(__attribute__((unused)) void *parameters)
applyDeadband(&cmd.Roll, deadband_checked);
applyDeadband(&cmd.Pitch, deadband_checked);
applyDeadband(&cmd.Yaw, deadband_checked);
if (frameType == FRAME_TYPE_GROUND) { // assumes reversible motors
applyDeadband(&cmd.Throttle, deadband_checked);
}
}
#ifdef USE_INPUT_LPF
// Apply Low Pass Filter to input channels, time delta between calls in ms

View File

@ -30,7 +30,7 @@
inkscape:zoom="6.5977991"
inkscape:cx="55.083588"
inkscape:cy="24.071773"
inkscape:current-layer="layer45"
inkscape:current-layer="layer46"
id="namedview3608"
showgrid="true"
inkscape:window-width="1280"
@ -1685,6 +1685,20 @@
ry="0.98050147"
inkscape:label="#rect4550-8-1-4-21-1" />
</g>
<g
inkscape:groupmode="layer"
id="layer46"
inkscape:label="SystemConfiguration-BadThrottleOrCollectiveInputRange">
<rect
style="fill:#d40000;fill-opacity:1;stroke:none;display:inline"
id="SystemConfiguration-BadThrottleOrCollectiveInputRange"
width="13.110236"
height="10.107105"
x="80.806435"
y="51.972187"
ry="0.98050147"
inkscape:label="#rect4550-8-1-4-21-1" />
</g>
<g
inkscape:groupmode="layer"
id="layer43"
@ -3024,7 +3038,7 @@
sodipodi:cy="35.07505"
sodipodi:rx="0.5"
sodipodi:ry="0.5"
d="M 14,35.07505 A 0.5,0.5 0 1 1 13.999725,35.058469"
d="M 14,35.07505 C 14,35.351193 13.776142,35.57505 13.5,35.57505 C 13.223858,35.57505 13,35.351193 13,35.07505 C 13,34.798908 13.223858,34.57505 13.5,34.57505 C 13.769688,34.57505 13.990781,34.78893 13.999725,35.058469"
sodipodi:start="0"
sodipodi:end="6.2500167"
sodipodi:open="true"
@ -3057,7 +3071,7 @@
sodipodi:cy="35.07505"
sodipodi:rx="0.5"
sodipodi:ry="0.5"
d="M 14,35.07505 A 0.5,0.5 0 1 1 13.999725,35.058469"
d="M 14,35.07505 C 14,35.351193 13.776142,35.57505 13.5,35.57505 C 13.223858,35.57505 13,35.351193 13,35.07505 C 13,34.798908 13.223858,34.57505 13.5,34.57505 C 13.769688,34.57505 13.990781,34.78893 13.999725,35.058469"
sodipodi:start="0"
sodipodi:end="6.2500167"
sodipodi:open="true"

Before

Width:  |  Height:  |  Size: 109 KiB

After

Width:  |  Height:  |  Size: 109 KiB

View File

@ -6518,6 +6518,12 @@ Applique et Enregistre tous les paramètres sur la SD</translation>
<translatorcomment>Do not translate !</translatorcomment>
<translation></translation>
</message>
<message>
<location/>
<source>haslimits:yes</source>
<translatorcomment>Do not translate !</translatorcomment>
<translation></translation>
</message>
</context>
<context>
<name>MixerCurve</name>
@ -6754,7 +6760,7 @@ Applique et Enregistre tous les paramètres sur la SD</translation>
<message>
<location/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Setup output mode. Use PWM or PWMSync with Standard ESCs.&lt;br/&gt;Several other ESCs like BLHeli 13+ can use the more advanced OneShot125.&lt;br/&gt;When using OneShot125 all values set in min/max and idle are divided by &lt;br/&gt;eight before being sent to esc (i.e. 1000 = 125, 2000 = 250).&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Configuration du mode de sortie. Utilisez PWM ou PWMSync avec des ESC Standard.&lt;br/&gt;D&apos;autres contrôleurs comme les BLHeli 13+ peuvent utiliser le mode avancé OneShot125.&lt;br/&gt;Lorsque vous utilisez OneShot125 toutes les valeurs min/max et neutre sont divisées par &lt;br/&gt;huit avant d&apos;être envoyées vers le contrôleur (ex. 1000 = 125, 2000 = 250).&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Configuration du mode de sortie. Utilisez PWM ou PWMSync avec des ESC Standard.&lt;br/&gt;D&apos;autres contrôleurs comme les BLHeli 13+ peuvent utiliser le mode avancé OneShot125.&lt;br/&gt;Lorsque vous utilisez OneShot125 toutes les valeurs min/max et neutre sont divisées par &lt;br/&gt;huit avant d&apos;être envoyées vers le contrôleur (ex. 1000 = 125, 2000 = 250).&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
</context>
<context>
@ -7157,7 +7163,7 @@ p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translatorcomment>Blank text ?</translatorcomment>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location/>
@ -9123,7 +9129,7 @@ les données en cache</translation>
<translation>Diagramme de Connexion</translation>
</message>
<message>
<location line="+229"/>
<location line="+230"/>
<source>Save File</source>
<translation>Enregistrer Fichier</translation>
</message>
@ -9606,31 +9612,31 @@ Veuillez sélectionner le type de multirotor désiré pour la configuration ci-d
<message>
<location/>
<location filename="../../../src/plugins/setupwizard/pages/outputcalibrationpage.cpp" line="+435"/>
<location line="+104"/>
<location line="+113"/>
<source>Start</source>
<translation>Démarrer</translation>
</message>
<message>
<location filename="../../../src/plugins/setupwizard/pages/outputcalibrationpage.cpp" line="-198"/>
<location filename="../../../src/plugins/setupwizard/pages/outputcalibrationpage.cpp" line="-207"/>
<location line="+8"/>
<location line="+178"/>
<location line="+187"/>
<location line="+25"/>
<source>Output value : &lt;b&gt;%1&lt;/b&gt; µs</source>
<translation>Valeur de sortie : &lt;b&gt;%1&lt;/b&gt; µs</translation>
</message>
<message>
<location line="-206"/>
<location line="-215"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;To find &lt;/span&gt;&lt;span style=&quot; font-size:10pt; font-weight:600;&quot;&gt;the neutral rate for this reversable motor&lt;/span&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;, press the Start button below and slide the slider to the right or left until you find the value where the motor doesn&apos;t start. &lt;br/&gt;&lt;br/&gt;When done press button again to stop.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Pour trouver &lt;/span&gt;&lt;span style=&quot; font-size:10pt; font-weight:600;&quot;&gt;la valeur de neutre de ce moteur inversable&lt;/span&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;, appuyez sur le bouton Démarrer et bouger le curseur à gauche ou à droite jusqu&apos;à trouver la position centrale où le moteur ne démarre pas. &lt;br/&gt;&lt;br/&gt;Lorsque c&apos;est terminé, appuyer à nouveau sur le bouton pour arrêter.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location line="+89"/>
<location line="+104"/>
<location line="+113"/>
<source>Stop</source>
<translation>Arrêter</translation>
</message>
<message>
<location line="-43"/>
<location line="-52"/>
<source>The actuator module is in an error state.
Please make sure the correct firmware version is used then restart the wizard and try again. If the problem persists please consult the openpilot.org support forum.</source>
@ -9911,7 +9917,7 @@ Veuillez sélectionner le type de véhicule terrestre dont vous voulez créer la
<message>
<location line="+1"/>
<source>This setup currently expects a motorcyle setup, using one motor and one servo for steering.</source>
<translation type="unfinished">Cette configuration correspond à une moto utilisant un moteur et un servo pour la direction.</translation>
<translation>Cette configuration correspond à une moto utilisant un moteur et un servo pour la direction.</translation>
</message>
</context>
<context>
@ -10691,7 +10697,7 @@ Voulez-vous toujours continuer ?</translation>
<translation>Vous devrez reconfigurer manuellement les paramètres d&apos;armement lorsque l&apos;assistant sera terminé. Après la dernière étape de l&apos;assistant, vous serez redirigé vers l&apos;écran des Paramètres d&apos;Armement.</translation>
</message>
<message>
<location line="+210"/>
<location line="+212"/>
<source>Next</source>
<translation>Suivant</translation>
</message>
@ -10882,7 +10888,7 @@ Bougez le manche %1.</translation>
<translation>Arrêter Calibration Manuelle</translation>
</message>
<message>
<location line="+3"/>
<location line="+4"/>
<source>&lt;p&gt;Arming Settings are now set to &apos;Always Disarmed&apos; for your safety.&lt;/p&gt;&lt;p&gt;Be sure your receiver is powered with an external source and Transmitter is on.&lt;/p&gt;&lt;p align=&apos;center&apos;&gt;&lt;b&gt;Stop Manual Calibration&lt;/b&gt; when done&lt;/p&gt;</source>
<translation>&lt;p&gt;Pour des raisons de sécurité les Paramètres d&apos;Armement ont é modifiés à &apos;Toujours Désarmé&apos;.&lt;/p&gt;&lt;p&gt;Veuillez vérifier que votre récepteur est alimenté avec une source externe et que la radio Rx est allumée. &lt;p align=&apos;center&apos;&gt;&lt;b&gt;Arrêter Calibration Manuelle&lt;/b&gt; à la fin&lt;/p&gt;</translation>
</message>
@ -10892,10 +10898,20 @@ Bougez le manche %1.</translation>
<translation>Vous devrez reconfigurer les paramètres d&apos;armement manuellement lorsque la calibration manuelle sera terminée.</translation>
</message>
<message>
<location line="+33"/>
<location line="+51"/>
<source>Start Manual Calibration</source>
<translation>Démarrer Calibration Manuelle</translation>
</message>
<message>
<location line="+28"/>
<source>Warning</source>
<translation>Attention</translation>
</message>
<message>
<location line="+0"/>
<source>&lt;p&gt;There is something wrong with Throttle range. Please redo calibration and move &lt;b&gt;ALL sticks&lt;/b&gt;, Throttle stick included.&lt;/p&gt;</source>
<translation>&lt;p&gt;Quelque chose ne va pas avec la plage du manche de Gaz. Veuillez relancer la calibration Tx et bouger &lt;b&gt;TOUS les manches&lt;/b&gt;, manche des gaz inclus&lt;/p&gt;</translation>
</message>
<message>
<source>You will have to reconfigure the arming settings manually when the wizard is finished.</source>
<translation type="vanished">Vous devrez reconfigurer les paramètres d&apos;armement manuellement lorsque l&apos;assistant sera terminé.</translation>
@ -11249,14 +11265,14 @@ Double clic sur la légende ou le tracé pour afficher/cacher la légende.</tran
<location line="+24"/>
<location line="+6"/>
<location line="+19"/>
<location line="+16"/>
<location line="+19"/>
<location line="+16"/>
<location line="+38"/>
<source>Unknown</source>
<translation>Inconnu</translation>
</message>
<message>
<location line="-182"/>
<location line="-185"/>
<source>Vehicle type: </source>
<translation>Type de véhicule : </translation>
</message>
@ -11416,6 +11432,11 @@ Double clic sur la légende ou le tracé pour afficher/cacher la légende.</tran
<source>Rapid ESC (%1 Hz)</source>
<translation>Contrôleur Rapide (%1 Hz)</translation>
</message>
<message>
<location line="+3"/>
<source>Synched ESC</source>
<translation>Contrôleur Synchronisé</translation>
</message>
<message>
<location line="+3"/>
<source>Oneshot ESC</source>
@ -11510,7 +11531,7 @@ Double clic sur la légende ou le tracé pour afficher/cacher la légende.</tran
<translation>Échoué !</translation>
</message>
<message>
<location line="+140"/>
<location line="+141"/>
<source>Writing External Mag sensor settings</source>
<translation>Écriture paramètres Compas Externe</translation>
</message>
@ -11530,7 +11551,7 @@ Double clic sur la légende ou le tracé pour afficher/cacher la légende.</tran
<translation>Écriture paramètres matériels</translation>
</message>
<message>
<location line="+198"/>
<location line="+196"/>
<location line="+32"/>
<location line="+37"/>
<source>Writing actuator settings</source>
@ -12365,6 +12386,11 @@ La carte sera redémarrée et tous les paramètres effacés.</translation>
<source>-</source>
<translation>-</translation>
</message>
<message>
<location/>
<source>Prev</source>
<translation>Précédent</translation>
</message>
</context>
<context>
<name>CustomConfigWidget</name>
@ -13590,8 +13616,12 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location line="+32"/>
<source>OneShot and PWMSync output only works with Receiver Port settings marked with &apos;+OneShot&apos;&lt;br&gt;When using Receiver Port setting &apos;PPM_PIN8+OneShot&apos; &lt;b&gt;&lt;font color=&apos;%1&apos;&gt;Bank %2&lt;/font&gt;&lt;/b&gt; must be set to PWM</source>
<translation>OneShot et PWMSync fonctionnent uniquement avec les ports récepteur marqués avec &apos;+OneShot&apos;&lt;br&gt;Lors de l&apos;utilisation de la configuration &apos;PPM_PIN8+OneShot&apos; &lt;b&gt;&lt;font color=&apos;%1&apos;&gt;la Banque %2&lt;/font&gt;&lt;/b&gt; doit être réglée sur PWM</translation>
</message>
<message>
<source>OneShot only works with Receiver Port settings marked with &apos;+OneShot&apos;&lt;br&gt;When using Receiver Port setting &apos;PPM_PIN8+OneShot&apos; &lt;b&gt;&lt;font color=&apos;%1&apos;&gt;Bank %2&lt;/font&gt;&lt;/b&gt; must be set to PWM</source>
<translation>OneShot fonctionne uniquement avec les ports récepteur marqués avec &apos;+OneShot&apos;&lt;br&gt;Lors de l&apos;utilisation de la configuration &apos;PPM_PIN8+OneShot&apos; &lt;b&gt;&lt;font color=&apos;%1&apos;&gt;la Banque %2&lt;/font&gt;&lt;/b&gt; doit être réglée sur PWM</translation>
<translation type="vanished">OneShot fonctionne uniquement avec les ports récepteur marqués avec &apos;+OneShot&apos;&lt;br&gt;Lors de l&apos;utilisation de la configuration &apos;PPM_PIN8+OneShot&apos; &lt;b&gt;&lt;font color=&apos;%1&apos;&gt;la Banque %2&lt;/font&gt;&lt;/b&gt; doit être réglée sur PWM</translation>
</message>
<message>
<source>OneShot only works with MainPort settings marked with &quot;+OneShot&quot;
@ -14640,7 +14670,7 @@ pas seulement les champs visibles à l&apos;écran.</translation>
<message>
<location/>
<source>RT</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location/>
@ -14729,7 +14759,7 @@ et même conduire au crash. A utiliser avec prudence.</translation>
<message>
<location filename="../../../src/plugins/config/inputchannelform.ui"/>
<source>Text</source>
<translation type="unfinished">Texte</translation>
<translation></translation>
</message>
<message>
<location/>
@ -15141,7 +15171,7 @@ It is suggested that if this is a first time configuration of your controller, r
Il est suggéré que si cela est une première configuration de votre contrôleur, plutôt que d&apos;utiliser cette option, sélectionnez à la place un ensemble de réglages qui correspond le mieux à votre propre appareil dans la liste ci-dessus. Si vous n&apos;êtes pas en mesure d&apos;en choisir un, sélectionnez l&apos;élément générique de la liste.</translation>
</message>
<message>
<location line="+85"/>
<location line="+93"/>
<source>Current Tuning</source>
<translation>Réglages Actuels</translation>
</message>
@ -15546,7 +15576,7 @@ p, li { white-space: pre-wrap; }
<message>
<location line="+0"/>
<source>OPTemplates</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location line="+11"/>
@ -15721,7 +15751,7 @@ A noter : Pour le GPS OpenPilot v8, veuillez choisir l&apos;option GPS U-Blox.</
</message>
<message>
<location filename="../../../src/plugins/setupwizard/pages/esccalibrationpage.cpp" line="+49"/>
<location line="+49"/>
<location line="+58"/>
<location line="+42"/>
<location line="+7"/>
<location line="+9"/>
@ -16070,4 +16100,72 @@ IMPORTANT : Ces nouveaux paramètres ne sont pas encore enregistrés sur la cart
<translation>Annuler</translation>
</message>
</context>
<context>
<name>ConfigCcpmWidget</name>
<message>
<location filename="../../../src/plugins/config/cfg_vehicletypes/configccpmwidget.cpp" line="+1081"/>
<source>&lt;h1&gt;Swashplate Leveling Routine&lt;/h1&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1"/>
<source>&lt;b&gt;You are about to start the Swashplate levelling routine.&lt;/b&gt;&lt;p&gt;This process will start by downloading the current configuration from the GCS to the OP hardware and will adjust your configuration at various stages.&lt;p&gt;The final state of your system should match the current configuration in the GCS config gadget.&lt;/p&gt;&lt;p&gt;Please ensure all ccpm settings in the GCS are correct before continuing.&lt;/p&gt;&lt;p&gt;If this process is interrupted, then the state of your OP board may not match the GCS configuration.&lt;/p&gt;&lt;p&gt;&lt;i&gt;After completing this process, please check all settings before attempting to fly.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=red&gt;&lt;b&gt;Please disconnect your motor to ensure it will not spin up.&lt;/b&gt;&lt;/font&gt;&lt;p&gt;&lt;hr&gt;&lt;i&gt;Do you wish to proceed?&lt;/i&gt;&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+128"/>
<source>&lt;h2&gt;Neutral levelling&lt;/h2&gt;&lt;p&gt;Using adjustment of:&lt;ul&gt;&lt;li&gt;Servo horns,&lt;/li&gt;&lt;li&gt;Link lengths,&lt;/li&gt;&lt;li&gt;Neutral triming spinboxes to the right&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;Ensure that the swashplate is in the center of desired travel range and is level.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+14"/>
<source>&lt;h2&gt;Max levelling&lt;/h2&gt;&lt;p&gt;Using adjustment of:&lt;ul&gt;&lt;li&gt;Max triming spinboxes to the right ONLY&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;Ensure that the swashplate is at the top of desired travel range and is level.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+13"/>
<source>&lt;h2&gt;Min levelling&lt;/h2&gt;&lt;p&gt;Using adjustment of:&lt;ul&gt;&lt;li&gt;Min triming spinboxes to the right ONLY&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;Ensure that the swashplate is at the bottom of desired travel range and is level.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+19"/>
<source>&lt;h2&gt;Levelling verification&lt;/h2&gt;&lt;p&gt;Adjust the slider to the right over it&apos;s full range and observe the swashplate motion. It should remain level over the entire range of travel.&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+7"/>
<source>&lt;h2&gt;Levelling complete&lt;/h2&gt;&lt;p&gt;Press the Finish button to save these settings to the SD card&lt;/p&gt;&lt;p&gt;Press the cancel button to return to the pre-levelling settings&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+68"/>
<source>&lt;h2&gt;Levelling Cancelled&lt;/h2&gt;&lt;p&gt;Previous settings have been restored.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+43"/>
<source>&lt;h2&gt;Levelling Completed&lt;/h2&gt;&lt;p&gt;New settings have been saved to the SD card</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+12"/>
<source>&lt;font color=red&gt;&lt;h1&gt;Warning!!!&lt;/h2&gt;&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+6"/>
<source>&lt;h2&gt;This code has many configurations.&lt;/h2&gt;&lt;p&gt;Please double check all settings before attempting flight!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+11"/>
<source>&lt;h2&gt;The CCPM mixer code needs more testing!&lt;/h2&gt;&lt;p&gt;&lt;font color=red&gt;Use it at your own risk!&lt;/font&gt;&lt;p&gt;Do you wish to continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+16"/>
<source>&lt;h2&gt;The CCPM swashplate levelling code is NOT complete!&lt;/h2&gt;&lt;p&gt;&lt;font color=red&gt;DO NOT use it for flight!&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View File

@ -116,7 +116,7 @@ QGroupBox::title {
<enum>QTabWidget::Rounded</enum>
</property>
<property name="currentIndex">
<number>1</number>
<number>0</number>
</property>
<property name="documentMode">
<bool>false</bool>

View File

@ -57,7 +57,7 @@
<item>
<widget class="QScrollArea" name="scrollArea">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -72,9 +72,9 @@
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>750</width>
<height>729</height>
<y>-103</y>
<width>748</width>
<height>811</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
@ -95,24 +95,6 @@
</property>
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="title">
<string>Module Control</string>
</property>
@ -139,24 +121,6 @@
</item>
<item>
<widget class="QGroupBox" name="groupBox_5">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>110</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="title">
<string>Basic Settings (Stabilization)</string>
</property>
@ -381,24 +345,6 @@ font:bold;</string>
</item>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>187</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="title">
<string>Advanced Settings (Control)</string>
</property>
@ -863,12 +809,6 @@ value.</string>
</item>
<item>
<widget class="QGroupBox" name="groupBox_3">
<property name="minimumSize">
<size>
<width>0</width>
<height>187</height>
</size>
</property>
<property name="title">
<string>Expert Settings (Attitude Filter and Feed Forward)</string>
</property>
@ -1324,18 +1264,6 @@ The same value is used for all axes.</string>
</item>
<item>
<widget class="QGroupBox" name="groupBox_4">
<property name="minimumSize">
<size>
<width>0</width>
<height>50</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="title">
<string>Messages</string>
</property>

View File

@ -358,7 +358,7 @@ bool ConfigFixedWingWidget::setupFrameFixedWing(QString airframeType)
// rudder
channel = m_aircraft->fwRudder1ChannelBox->currentIndex() - 1;
setMixerType(mixer, channel, VehicleConfig::MIXERTYPE_SERVO);
setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_YAW, 127);
setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_YAW, -127);
// ailerons
channel = m_aircraft->fwAileron1ChannelBox->currentIndex() - 1;
@ -542,13 +542,13 @@ bool ConfigFixedWingWidget::setupFrameVtail(QString airframeType)
// First Vtail servo
setMixerType(mixer, channel, VehicleConfig::MIXERTYPE_SERVO);
setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_PITCH, -pitch);
setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_YAW, yaw);
setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_YAW, -yaw);
// Second Vtail servo
channel = m_aircraft->fwElevator2ChannelBox->currentIndex() - 1;
setMixerType(mixer, channel, VehicleConfig::MIXERTYPE_SERVO);
setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_PITCH, pitch);
setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_YAW, yaw);
setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_YAW, -yaw);
}
m_aircraft->fwStatusLabel->setText("Mixer generated");

View File

@ -116,7 +116,6 @@ void ConfigGroundVehicleWidget::setupUI(QString frameType)
m_aircraft->gvThrottleCurve1GroupBox->setEnabled(true);
m_aircraft->gvThrottleCurve2GroupBox->setEnabled(true);
// Default Curve2 range -1 -> +1, allow forward/reverse (Car and Tank)
m_aircraft->groundVehicleThrottle1->setMixerType(MixerCurve::MIXERCURVE_THROTTLE);
m_aircraft->groundVehicleThrottle2->setMixerType(MixerCurve::MIXERCURVE_PITCH);
@ -145,8 +144,8 @@ void ConfigGroundVehicleWidget::setupUI(QString frameType)
m_aircraft->differentialSteeringSlider1->setEnabled(true);
m_aircraft->differentialSteeringSlider2->setEnabled(true);
m_aircraft->gvThrottleCurve1GroupBox->setTitle("");
m_aircraft->gvThrottleCurve2GroupBox->setTitle("Throttle curve");
m_aircraft->gvThrottleCurve1GroupBox->setTitle("Throttle curve1");
m_aircraft->gvThrottleCurve2GroupBox->setTitle("Throttle curve2 ");
m_aircraft->groundVehicleThrottle2->setMixerType(MixerCurve::MIXERCURVE_PITCH);
m_aircraft->groundVehicleThrottle1->setMixerType(MixerCurve::MIXERCURVE_THROTTLE);
@ -154,13 +153,11 @@ void ConfigGroundVehicleWidget::setupUI(QString frameType)
initMixerCurves(frameType);
// If new setup, set sliders to defaults and set curves values
// Allow forward/reverse 0.8 / -0.8 for Throttle, keep some room
// to allow rotate at full throttle and heading stabilization
if (frameTypeSaved->getValue().toString() != "GroundVehicleDifferential") {
m_aircraft->differentialSteeringSlider1->setValue(100);
m_aircraft->differentialSteeringSlider2->setValue(100);
m_aircraft->groundVehicleThrottle1->initLinearCurve(5, 1.0);
m_aircraft->groundVehicleThrottle2->initLinearCurve(5, 0.8, -0.8);
m_aircraft->groundVehicleThrottle1->initLinearCurve(5, 1.0, 0.0);
m_aircraft->groundVehicleThrottle2->initLinearCurve(5, 1.0, 0.0);
}
} else if (frameType == "GroundVehicleMotorcycle" || frameType == "Motorcycle") {
// Motorcycle
@ -179,12 +176,11 @@ void ConfigGroundVehicleWidget::setupUI(QString frameType)
m_aircraft->gvSteering2Label->setText("Balancing");
// Curve1 for Motorcyle
m_aircraft->gvThrottleCurve1GroupBox->setTitle("Rear throttle curve");
m_aircraft->gvThrottleCurve1GroupBox->setTitle("Throttle curve1");
m_aircraft->gvThrottleCurve1GroupBox->setEnabled(true);
m_aircraft->gvThrottleCurve2GroupBox->setTitle("");
m_aircraft->gvThrottleCurve2GroupBox->setEnabled(false);
m_aircraft->gvThrottleCurve2GroupBox->setTitle("Throttle curve2");
m_aircraft->gvThrottleCurve2GroupBox->setEnabled(true);
// Curve range 0 -> +1 (no reverse)
m_aircraft->groundVehicleThrottle2->setMixerType(MixerCurve::MIXERCURVE_THROTTLE);
m_aircraft->groundVehicleThrottle1->setMixerType(MixerCurve::MIXERCURVE_THROTTLE);
@ -192,8 +188,8 @@ void ConfigGroundVehicleWidget::setupUI(QString frameType)
// If new setup, set curves values
if (frameTypeSaved->getValue().toString() != "GroundVehicleMotorCycle") {
m_aircraft->groundVehicleThrottle2->initLinearCurve(5, 1.0);
m_aircraft->groundVehicleThrottle1->initLinearCurve(5, 1.0);
m_aircraft->groundVehicleThrottle2->initLinearCurve(5, 1.0, 0.0);
m_aircraft->groundVehicleThrottle1->initLinearCurve(5, 1.0, 0.0);
}
} else {
// Car
@ -212,11 +208,10 @@ void ConfigGroundVehicleWidget::setupUI(QString frameType)
m_aircraft->gvSteering1Label->setText("Front steering");
m_aircraft->gvSteering2Label->setText("Rear steering");
// Curve2 for Car
m_aircraft->gvThrottleCurve2GroupBox->setTitle("Throttle curve");
m_aircraft->gvThrottleCurve2GroupBox->setTitle("Throttle curve2");
m_aircraft->gvThrottleCurve2GroupBox->setEnabled(true);
m_aircraft->gvThrottleCurve1GroupBox->setTitle("");
m_aircraft->gvThrottleCurve1GroupBox->setEnabled(false);
m_aircraft->gvThrottleCurve1GroupBox->setTitle("Throttle curve1");
m_aircraft->gvThrottleCurve1GroupBox->setEnabled(true);
m_aircraft->groundVehicleThrottle2->setMixerType(MixerCurve::MIXERCURVE_PITCH);
m_aircraft->groundVehicleThrottle1->setMixerType(MixerCurve::MIXERCURVE_THROTTLE);
@ -225,11 +220,8 @@ void ConfigGroundVehicleWidget::setupUI(QString frameType)
// If new setup, set curves values
if (frameTypeSaved->getValue().toString() != "GroundVehicleCar") {
m_aircraft->groundVehicleThrottle1->initLinearCurve(5, 1.0);
// Set curve2 range from -0.926 to 1 (forward / reverse)
// Take in account 4% offset in Throttle input after calibration
// 0.5 / 0.54 = 0.926
m_aircraft->groundVehicleThrottle2->initLinearCurve(5, 1.0, -0.926);
m_aircraft->groundVehicleThrottle1->initLinearCurve(5, 1.0, 0.0);
m_aircraft->groundVehicleThrottle2->initLinearCurve(5, 1.0, 0.0);
}
}
@ -325,7 +317,13 @@ void ConfigGroundVehicleWidget::initMixerCurves(QString frameType)
m_aircraft->groundVehicleThrottle1->initCurve(&curveValues);
} else {
// no, init a straight curve
m_aircraft->groundVehicleThrottle1->initLinearCurve(curveValues.count(), 1.0);
if (frameType == "GroundVehicleDifferential") {
m_aircraft->groundVehicleThrottle1->initLinearCurve(curveValues.count(), 0.8, 0.0);
} else if (frameType == "GroundVehicleCar") {
m_aircraft->groundVehicleThrottle1->initLinearCurve(curveValues.count(), 1.0, 0.0);
} else {
m_aircraft->groundVehicleThrottle1->initLinearCurve(curveValues.count(), 1.0, 0.0);
}
}
// Setup all Throttle2 curves for all types of airframes
@ -336,11 +334,11 @@ void ConfigGroundVehicleWidget::initMixerCurves(QString frameType)
} else {
// no, init a straight curve
if (frameType == "GroundVehicleDifferential") {
m_aircraft->groundVehicleThrottle2->initLinearCurve(curveValues.count(), 0.8, -0.8);
m_aircraft->groundVehicleThrottle2->initLinearCurve(curveValues.count(), 0.8, 0.0);
} else if (frameType == "GroundVehicleCar") {
m_aircraft->groundVehicleThrottle2->initLinearCurve(curveValues.count(), 1.0, -1.0);
m_aircraft->groundVehicleThrottle2->initLinearCurve(curveValues.count(), 1.0, 0.0);
} else {
m_aircraft->groundVehicleThrottle2->initLinearCurve(curveValues.count(), 1.0);
m_aircraft->groundVehicleThrottle2->initLinearCurve(curveValues.count(), 1.0, 0.0);
}
}
}
@ -513,11 +511,11 @@ bool ConfigGroundVehicleWidget::setupGroundVehicleCar(QString airframeType)
channel = m_aircraft->gvMotor1ChannelBox->currentIndex() - 1;
setMixerType(mixer, channel, VehicleConfig::MIXERTYPE_REVERSABLEMOTOR);
setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_THROTTLECURVE2, 127);
setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_THROTTLECURVE1, 127);
channel = m_aircraft->gvMotor2ChannelBox->currentIndex() - 1;
setMixerType(mixer, channel, VehicleConfig::MIXERTYPE_REVERSABLEMOTOR);
setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_THROTTLECURVE2, 127);
setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_THROTTLECURVE1, 127);
// Output success message
m_aircraft->gvStatusLabel->setText("Mixer generated");

View File

@ -549,6 +549,8 @@ void ConfigInputWidget::wzNext()
// Force flight mode neutral to middle and Throttle neutral at 4%
adjustSpecialNeutrals();
throttleError = false;
checkThrottleRange();
manualSettingsObj->setData(manualSettingsData);
// move to Arming Settings tab
@ -1593,6 +1595,7 @@ void ConfigInputWidget::simpleCalibration(bool enable)
ui->saveRCInputToRAM->setEnabled(false);
ui->saveRCInputToSD->setEnabled(false);
ui->runCalibration->setText(tr("Stop Manual Calibration"));
throttleError = false;
QMessageBox msgBox;
msgBox.setText(tr("<p>Arming Settings are now set to 'Always Disarmed' for your safety.</p>"
@ -1628,11 +1631,6 @@ void ConfigInputWidget::simpleCalibration(bool enable)
connect(manualCommandObj, SIGNAL(objectUnpacked(UAVObject *)), this, SLOT(updateCalibration()));
} else {
ui->configurationWizard->setEnabled(true);
ui->saveRCInputToRAM->setEnabled(true);
ui->saveRCInputToSD->setEnabled(true);
ui->runCalibration->setText(tr("Start Manual Calibration"));
manualCommandData = manualCommandObj->getData();
manualSettingsData = manualSettingsObj->getData();
@ -1641,16 +1639,21 @@ void ConfigInputWidget::simpleCalibration(bool enable)
for (unsigned int i = 0; i < ManualControlCommand::CHANNEL_NUMELEM; i++) {
if ((i == ManualControlSettings::CHANNELNUMBER_FLIGHTMODE) || (i == ManualControlSettings::CHANNELNUMBER_THROTTLE)) {
adjustSpecialNeutrals();
checkThrottleRange();
} else {
manualSettingsData.ChannelNeutral[i] = manualCommandData.Channel[i];
}
}
manualSettingsObj->setData(manualSettingsData);
// Load actuator settings back from beginning of manual calibration
actuatorSettingsObj->setData(previousActuatorSettingsData);
ui->configurationWizard->setEnabled(true);
ui->saveRCInputToRAM->setEnabled(true);
ui->saveRCInputToSD->setEnabled(true);
ui->runCalibration->setText(tr("Start Manual Calibration"));
disconnect(manualCommandObj, SIGNAL(objectUnpacked(UAVObject *)), this, SLOT(updateCalibration()));
}
}
@ -1671,6 +1674,21 @@ void ConfigInputWidget::adjustSpecialNeutrals()
manualSettingsData.ChannelMin[ManualControlSettings::CHANNELMIN_THROTTLE]) * 0.04);
}
void ConfigInputWidget::checkThrottleRange()
{
int throttleRange = abs(manualSettingsData.ChannelMax[ManualControlSettings::CHANNELMAX_THROTTLE] -
manualSettingsData.ChannelMin[ManualControlSettings::CHANNELMIN_THROTTLE]);
if (!throttleError && (throttleRange < 300)) {
throttleError = true;
QMessageBox::warning(this, tr("Warning"), tr("<p>There is something wrong with Throttle range. Please redo calibration and move <b>ALL sticks</b>, Throttle stick included.</p>"), QMessageBox::Ok);
// Set Throttle neutral to max value so Throttle can't be positive
manualSettingsData.ChannelNeutral[ManualControlSettings::CHANNELNEUTRAL_THROTTLE] =
manualSettingsData.ChannelMax[ManualControlSettings::CHANNELMAX_THROTTLE];
}
}
bool ConfigInputWidget::shouldObjectBeSaved(UAVObject *object)
{
// ManualControlCommand no need to be saved

View File

@ -71,6 +71,7 @@ public:
bool shouldObjectBeSaved(UAVObject *object);
private:
bool throttleError;
bool growing;
bool reverse[ManualControlSettings::CHANNELNEUTRAL_NUMELEM];
txMovements currentMovement;
@ -199,6 +200,7 @@ private slots:
void invertControls();
void simpleCalibration(bool state);
void adjustSpecialNeutrals();
void checkThrottleRange();
void updateCalibration();
void resetChannelSettings();
void resetActuatorSettings();

View File

@ -117,7 +117,7 @@
<x>0</x>
<y>0</y>
<width>1228</width>
<height>669</height>
<height>661</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout">
@ -722,13 +722,13 @@ font:bold;</string>
<widget class="QFrame" name="frame_3">
<property name="minimumSize">
<size>
<width>106</width>
<width>90</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>105</width>
<width>90</width>
<height>16777215</height>
</size>
</property>
@ -1126,13 +1126,13 @@ font:bold;</string>
<property name="minimumSize">
<size>
<width>0</width>
<height>230</height>
<height>275</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>230</height>
<height>275</height>
</size>
</property>
<property name="title">
@ -1348,7 +1348,7 @@ font:bold;</string>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>150</height>
<height>200</height>
</size>
</property>
<property name="focusPolicy">
@ -1758,6 +1758,12 @@ font:bold;</string>
</item>
<item row="1" column="12">
<widget class="QSpinBox" name="fmsPosNum">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>29</height>
</size>
</property>
<property name="toolTip">
<string>Number of positions your FlightMode switch has.

View File

@ -136,8 +136,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>950</width>
<height>780</height>
<width>939</width>
<height>776</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
@ -2900,7 +2900,7 @@ border-radius: 5;</string>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>160</height>
<height>16777215</height>
</size>
</property>
<property name="title">
@ -5626,7 +5626,7 @@ Then lower the value by 5 or so.</string>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>135</height>
<height>16777215</height>
</size>
</property>
<property name="autoFillBackground">
@ -8244,8 +8244,8 @@ border-radius: 5;</string>
<rect>
<x>0</x>
<y>0</y>
<width>950</width>
<height>780</height>
<width>952</width>
<height>763</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_29">
@ -18236,8 +18236,8 @@ border-radius: 5;</string>
<rect>
<x>0</x>
<y>0</y>
<width>950</width>
<height>780</height>
<width>952</width>
<height>763</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_8" stretch="0,0,0,0,0,0">
@ -24082,8 +24082,8 @@ font:bold;</string>
<rect>
<x>0</x>
<y>0</y>
<width>950</width>
<height>780</height>
<width>952</width>
<height>763</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_18">

View File

@ -100,7 +100,7 @@ void OutputCalibrationUtil::startChannelOutput(quint16 channel, quint16 safeValu
startChannelOutput(channels, safeValue);
}
void OutputCalibrationUtil::startChannelOutput(QList<quint16> channels, quint16 safeValue)
void OutputCalibrationUtil::startChannelOutput(QList<quint16> &channels, quint16 safeValue)
{
if (c_prepared) {
m_outputChannels = channels;

View File

@ -44,7 +44,7 @@ public:
public slots:
void startChannelOutput(quint16 channel, quint16 safeValue);
void startChannelOutput(QList<quint16> channels, quint16 safeValue);
void startChannelOutput(QList<quint16> &channels, quint16 safeValue);
void stopChannelOutput();
void setChannelOutputValue(quint16 value);

View File

@ -112,6 +112,7 @@ void OutputCalibrationPage::setupVehicle()
m_actuatorSettings = getWizard()->getActuatorSettings();
m_wizardIndexes.clear();
m_vehicleElementIds.clear();
m_vehicleElementTypes.clear();
m_vehicleHighlightElementIndexes.clear();
m_channelIndex.clear();
m_currentWizardIndex = 0;
@ -131,6 +132,9 @@ void OutputCalibrationPage::setupVehicle()
// All element ids to load from the svg file and manage.
m_vehicleElementIds << "tri" << "tri-frame" << "tri-m1" << "tri-m2" << "tri-m3" << "tri-s1";
// The type of each element.
m_vehicleElementTypes << FULL << FRAME << MOTOR << MOTOR << MOTOR << SERVO;
// The index of the elementId to highlight ( not dim ) for each step
// this is the index in the m_vehicleElementIds - 1.
m_vehicleHighlightElementIndexes << 0 << 1 << 2 << 3 << 4;
@ -146,6 +150,7 @@ void OutputCalibrationPage::setupVehicle()
loadSVGFile(MULTI_SVG_FILE);
m_wizardIndexes << 0 << 1 << 1 << 1 << 1;
m_vehicleElementIds << "quad-x" << "quad-x-frame" << "quad-x-m1" << "quad-x-m2" << "quad-x-m3" << "quad-x-m4";
m_vehicleElementTypes << FULL << FRAME << MOTOR << MOTOR << MOTOR << MOTOR;
m_vehicleHighlightElementIndexes << 0 << 1 << 2 << 3 << 4;
m_channelIndex << 0 << 0 << 1 << 2 << 3;
setupActuatorMinMaxAndNeutral(0, 3, 4);
@ -154,6 +159,7 @@ void OutputCalibrationPage::setupVehicle()
loadSVGFile(MULTI_SVG_FILE);
m_wizardIndexes << 0 << 1 << 1 << 1 << 1;
m_vehicleElementIds << "quad-p" << "quad-p-frame" << "quad-p-m1" << "quad-p-m2" << "quad-p-m3" << "quad-p-m4";
m_vehicleElementTypes << FULL << FRAME << MOTOR << MOTOR << MOTOR << MOTOR;
m_vehicleHighlightElementIndexes << 0 << 1 << 2 << 3 << 4;
m_channelIndex << 0 << 0 << 1 << 2 << 3;
setupActuatorMinMaxAndNeutral(0, 3, 4);
@ -162,6 +168,7 @@ void OutputCalibrationPage::setupVehicle()
loadSVGFile(MULTI_SVG_FILE);
m_wizardIndexes << 0 << 1 << 1 << 1 << 1 << 1 << 1;
m_vehicleElementIds << "hexa" << "hexa-frame" << "hexa-m1" << "hexa-m2" << "hexa-m3" << "hexa-m4" << "hexa-m5" << "hexa-m6";
m_vehicleElementTypes << FULL << FRAME << MOTOR << MOTOR << MOTOR << MOTOR << MOTOR << MOTOR;
m_vehicleHighlightElementIndexes << 0 << 1 << 2 << 3 << 4 << 5 << 6;
m_channelIndex << 0 << 0 << 1 << 2 << 3 << 4 << 5;
setupActuatorMinMaxAndNeutral(0, 5, 6);
@ -170,6 +177,7 @@ void OutputCalibrationPage::setupVehicle()
loadSVGFile(MULTI_SVG_FILE);
m_wizardIndexes << 0 << 1 << 1 << 1 << 1 << 1 << 1;
m_vehicleElementIds << "hexa-y6" << "hexa-y6-frame" << "hexa-y6-m2" << "hexa-y6-m1" << "hexa-y6-m4" << "hexa-y6-m3" << "hexa-y6-m6" << "hexa-y6-m5";
m_vehicleElementTypes << FULL << FRAME << MOTOR << MOTOR << MOTOR << MOTOR << MOTOR << MOTOR;
m_vehicleHighlightElementIndexes << 0 << 2 << 1 << 4 << 3 << 6 << 5;
m_channelIndex << 0 << 0 << 1 << 2 << 3 << 4 << 5;
setupActuatorMinMaxAndNeutral(0, 5, 6);
@ -178,6 +186,7 @@ void OutputCalibrationPage::setupVehicle()
loadSVGFile(MULTI_SVG_FILE);
m_wizardIndexes << 0 << 1 << 1 << 1 << 1 << 1 << 1;
m_vehicleElementIds << "hexa-h" << "hexa-h-frame" << "hexa-h-m1" << "hexa-h-m2" << "hexa-h-m3" << "hexa-h-m4" << "hexa-h-m5" << "hexa-h-m6";
m_vehicleElementTypes << FULL << FRAME << MOTOR << MOTOR << MOTOR << MOTOR << MOTOR << MOTOR;
m_vehicleHighlightElementIndexes << 0 << 1 << 2 << 3 << 4 << 5 << 6;
m_channelIndex << 0 << 0 << 1 << 2 << 3 << 4 << 5;
setupActuatorMinMaxAndNeutral(0, 5, 6);
@ -186,6 +195,7 @@ void OutputCalibrationPage::setupVehicle()
loadSVGFile(MULTI_SVG_FILE);
m_wizardIndexes << 0 << 1 << 1 << 1 << 1 << 1 << 1;
m_vehicleElementIds << "hexa-x" << "hexa-x-frame" << "hexa-x-m1" << "hexa-x-m2" << "hexa-x-m3" << "hexa-x-m4" << "hexa-x-m5" << "hexa-x-m6";
m_vehicleElementTypes << FULL << FRAME << MOTOR << MOTOR << MOTOR << MOTOR << MOTOR << MOTOR;
m_vehicleHighlightElementIndexes << 0 << 1 << 2 << 3 << 4 << 5 << 6;
m_channelIndex << 0 << 0 << 1 << 2 << 3 << 4 << 5;
setupActuatorMinMaxAndNeutral(0, 5, 6);
@ -195,6 +205,7 @@ void OutputCalibrationPage::setupVehicle()
loadSVGFile(FIXEDWING_SVG_FILE);
m_wizardIndexes << 0 << 1 << 2 << 2 << 2 << 2;
m_vehicleElementIds << "aileron" << "aileron-frame" << "aileron-motor" << "aileron-ail-left" << "aileron-ail-right" << "aileron-elevator" << "aileron-rudder";
m_vehicleElementTypes << FULL << FRAME << MOTOR << SERVO << SERVO << SERVO << SERVO;
m_vehicleHighlightElementIndexes << 0 << 1 << 2 << 3 << 4 << 5;
m_channelIndex << 0 << 2 << 0 << 5 << 1 << 3;
@ -205,7 +216,8 @@ void OutputCalibrationPage::setupVehicle()
case SetupWizard::FIXED_WING_AILERON:
loadSVGFile(FIXEDWING_SVG_FILE);
m_wizardIndexes << 0 << 1 << 2 << 2 << 2;
m_vehicleElementIds << "aileron-single" << "ail2-frame" << "ail2-motor" << "ail2-aileron" << "ail2-elevator" << "ail2-rudder";
m_vehicleElementIds << "singleaileron" << "singleaileron-frame" << "singleaileron-motor" << "singleaileron-aileron" << "singleaileron-elevator" << "singleaileron-rudder";
m_vehicleElementTypes << FULL << FRAME << MOTOR << SERVO << SERVO << SERVO;
m_vehicleHighlightElementIndexes << 0 << 1 << 2 << 3 << 4;
m_channelIndex << 0 << 2 << 0 << 1 << 3;
@ -217,6 +229,7 @@ void OutputCalibrationPage::setupVehicle()
loadSVGFile(FIXEDWING_SVG_FILE);
m_wizardIndexes << 0 << 1 << 2 << 2;
m_vehicleElementIds << "elevon" << "elevon-frame" << "elevon-motor" << "elevon-left" << "elevon-right";
m_vehicleElementTypes << FULL << FRAME << MOTOR << SERVO << SERVO;
m_vehicleHighlightElementIndexes << 0 << 1 << 2 << 3;
m_channelIndex << 0 << 2 << 0 << 1;
@ -228,6 +241,7 @@ void OutputCalibrationPage::setupVehicle()
loadSVGFile(FIXEDWING_SVG_FILE);
m_wizardIndexes << 0 << 1 << 2 << 2 << 2 << 2;
m_vehicleElementIds << "vtail" << "vtail-frame" << "vtail-motor" << "vtail-ail-left" << "vtail-ail-right" << "vtail-rudder-left" << "vtail-rudder-right";
m_vehicleElementTypes << FULL << FRAME << MOTOR << SERVO << SERVO << SERVO << SERVO;
m_vehicleHighlightElementIndexes << 0 << 1 << 2 << 3 << 4 << 5;
m_channelIndex << 0 << 2 << 0 << 5 << 3 << 1;
@ -241,6 +255,7 @@ void OutputCalibrationPage::setupVehicle()
loadSVGFile(GROUND_SVG_FILE);
m_wizardIndexes << 0 << 1 << 2;
m_vehicleElementIds << "car" << "car-frame" << "car-motor" << "car-steering";
m_vehicleElementTypes << FULL << FRAME << MOTOR << SERVO;
m_vehicleHighlightElementIndexes << 0 << 1 << 2;
m_channelIndex << 0 << 1 << 0;
@ -252,6 +267,7 @@ void OutputCalibrationPage::setupVehicle()
loadSVGFile(GROUND_SVG_FILE);
m_wizardIndexes << 0 << 1 << 1;
m_vehicleElementIds << "tank" << "tank-frame" << "tank-left-motor" << "tank-right-motor";
m_vehicleElementTypes << FULL << FRAME << MOTOR << MOTOR;
m_vehicleHighlightElementIndexes << 0 << 1 << 2;
m_channelIndex << 0 << 0 << 1;
@ -263,6 +279,7 @@ void OutputCalibrationPage::setupVehicle()
loadSVGFile(GROUND_SVG_FILE);
m_wizardIndexes << 0 << 1 << 2;
m_vehicleElementIds << "motorbike" << "motorbike-frame" << "motorbike-motor" << "motorbike-steering";
m_vehicleElementTypes << FULL << FRAME << MOTOR << SERVO;
m_vehicleHighlightElementIndexes << 0 << 1 << 2;
m_channelIndex << 0 << 1 << 0;
@ -281,6 +298,7 @@ void OutputCalibrationPage::setupVehicle()
void OutputCalibrationPage::setupVehicleItems()
{
m_vehicleItems.clear();
m_arrowsItems.clear();
m_vehicleBoundsItem = new QGraphicsSvgItem();
m_vehicleBoundsItem->setSharedRenderer(m_vehicleRenderer);
m_vehicleBoundsItem->setElementId(m_vehicleElementIds[0]);
@ -302,12 +320,53 @@ void OutputCalibrationPage::setupVehicleItems()
m_vehicleScene->addItem(item);
m_vehicleItems << item;
bool addArrows = false;
if ((m_vehicleElementIds[i].contains("left")) || (m_vehicleElementIds[i].contains("right"))
|| (m_vehicleElementIds[i].contains("elevator")) || (m_vehicleElementIds[i].contains("rudder"))
|| (m_vehicleElementIds[i].contains("steering")) || (m_vehicleElementIds[i] == "singleaileron-aileron")) {
addArrows = true;
}
if (addArrows) {
QString arrowUp = "-up"; // right if rudder / steering
QString arrowDown = "-down"; // left
QGraphicsSvgItem *itemUp = new QGraphicsSvgItem();
itemUp->setSharedRenderer(m_vehicleRenderer);
QString elementUp = m_vehicleElementIds[i] + arrowUp;
itemUp->setElementId(elementUp);
itemUp->setZValue(i + 10);
itemUp->setOpacity(0);
QRectF itemBounds = m_vehicleRenderer->boundsOnElement(elementUp);
itemUp->setPos(itemBounds.x() - parentBounds.x(), itemBounds.y() - parentBounds.y());
m_vehicleScene->addItem(itemUp);
m_arrowsItems << itemUp;
QGraphicsSvgItem *itemDown = new QGraphicsSvgItem();
itemDown->setSharedRenderer(m_vehicleRenderer);
QString elementDown = m_vehicleElementIds[i] + arrowDown;
itemDown->setElementId(elementDown);
itemDown->setZValue(i + 10);
itemDown->setOpacity(0);
itemBounds = m_vehicleRenderer->boundsOnElement(elementDown);
itemDown->setPos(itemBounds.x() - parentBounds.x(), itemBounds.y() - parentBounds.y());
m_vehicleScene->addItem(itemDown);
m_arrowsItems << itemDown;
}
}
}
void OutputCalibrationPage::startWizard()
{
ui->calibrationStack->setCurrentIndex(m_wizardIndexes[0]);
enableAllMotorsCheckBox(true);
setupVehicleHighlightedPart();
}
@ -319,7 +378,29 @@ void OutputCalibrationPage::setupVehicleHighlightedPart()
for (int i = 0; i < m_vehicleItems.size(); i++) {
QGraphicsSvgItem *item = m_vehicleItems[i];
item->setOpacity((highlightedIndex == i) ? highlightOpaque : dimOpaque);
if (highlightedIndex == i || (ui->calibrateAllMotors->isChecked() && m_vehicleElementTypes[i + 1] == MOTOR)) {
item->setOpacity(highlightOpaque);
} else {
item->setOpacity(dimOpaque);
}
}
}
void OutputCalibrationPage::showElementMovement(bool isUp, qreal value)
{
QString highlightedItemName = m_vehicleItems[m_currentWizardIndex]->elementId();
for (int i = 0; i < m_arrowsItems.size(); i++) {
QString upItemName = highlightedItemName + "-up";
QString downItemName = highlightedItemName + "-down";
if (m_arrowsItems[i]->elementId() == upItemName) {
QGraphicsSvgItem *itemUp = m_arrowsItems[i];
itemUp->setOpacity(isUp ? value : 0);
}
if (m_arrowsItems[i]->elementId() == downItemName) {
QGraphicsSvgItem *itemDown = m_arrowsItems[i];
itemDown->setOpacity(isUp ? 0 : value);
}
}
}
@ -333,7 +414,9 @@ void OutputCalibrationPage::setWizardPage()
qDebug() << "Current page: " << currentPageIndex;
ui->calibrationStack->setCurrentIndex(currentPageIndex);
int currentChannel = getCurrentChannel();
QList<quint16> currentChannels;
getCurrentChannels(currentChannels);
int currentChannel = currentChannels[0];
qDebug() << "Current channel: " << currentChannel + 1;
if (currentChannel >= 0) {
if (currentPageIndex == 1) {
@ -366,6 +449,9 @@ void OutputCalibrationPage::setWizardPage()
}
}
setupVehicleHighlightedPart();
// Hide arrows
showElementMovement(true, 0);
showElementMovement(false, 0);
}
void OutputCalibrationPage::initializePage()
@ -378,11 +464,21 @@ void OutputCalibrationPage::initializePage()
bool OutputCalibrationPage::validatePage()
{
if (!isFinished()) {
m_currentWizardIndex++;
if (ui->calibrateAllMotors->isChecked() &&
m_currentWizardIndex > 0 &&
m_wizardIndexes[m_currentWizardIndex - 1] == 1) {
while (!isFinished() && m_wizardIndexes[m_currentWizardIndex] == 1) {
m_currentWizardIndex++;
}
}
}
if (isFinished()) {
getWizard()->setActuatorSettings(m_actuatorSettings);
return true;
} else {
m_currentWizardIndex++;
setWizardPage();
return false;
}
@ -408,17 +504,46 @@ void OutputCalibrationPage::resizeEvent(QResizeEvent *event)
void OutputCalibrationPage::customBackClicked()
{
if (m_currentWizardIndex > 0) {
if (m_currentWizardIndex >= 0) {
m_currentWizardIndex--;
if (ui->calibrateAllMotors->isChecked()) {
while (m_currentWizardIndex > 0 &&
m_wizardIndexes[m_currentWizardIndex] == 1 &&
m_wizardIndexes[m_currentWizardIndex - 1] == 1) {
m_currentWizardIndex--;
}
}
}
if (m_currentWizardIndex >= 0) {
setWizardPage();
} else {
getWizard()->back();
}
}
quint16 OutputCalibrationPage::getCurrentChannel()
void OutputCalibrationPage::getCurrentChannels(QList<quint16> &channels)
{
return m_channelIndex[m_currentWizardIndex];
if (ui->calibrateAllMotors->isChecked()) {
for (int i = 1; i < m_channelIndex.size(); i++) {
if (m_vehicleElementTypes[i + 1] == MOTOR) {
channels << m_channelIndex[i];
}
}
} else {
channels << m_channelIndex[m_currentWizardIndex];
}
}
void OutputCalibrationPage::enableAllMotorsCheckBox(bool enable)
{
if (getWizard()->getVehicleType() == SetupWizard::VEHICLE_MULTI) {
ui->calibrateAllMotors->setVisible(true);
ui->calibrateAllMotors->setEnabled(enable);
} else {
ui->calibrateAllMotors->setChecked(false);
ui->calibrateAllMotors->setVisible(false);
}
}
void OutputCalibrationPage::enableButtons(bool enable)
@ -427,6 +552,7 @@ void OutputCalibrationPage::enableButtons(bool enable)
getWizard()->button(QWizard::CustomButton1)->setEnabled(enable);
getWizard()->button(QWizard::CancelButton)->setEnabled(enable);
getWizard()->button(QWizard::BackButton)->setEnabled(enable);
enableAllMotorsCheckBox(enable);
QApplication::processEvents();
}
@ -434,35 +560,43 @@ void OutputCalibrationPage::on_motorNeutralButton_toggled(bool checked)
{
ui->motorNeutralButton->setText(checked ? tr("Stop") : tr("Start"));
ui->motorNeutralSlider->setEnabled(checked);
quint16 channel = getCurrentChannel();
quint16 safeValue = m_actuatorSettings[channel].channelMin;
if (m_actuatorSettings[channel].isReversableMotor) {
safeValue = m_actuatorSettings[channel].channelNeutral;
QList<quint16> currentChannels;
getCurrentChannels(currentChannels);
quint16 currentChannel = currentChannels[0];
quint16 safeValue = m_actuatorSettings[currentChannel].channelMin;
if (m_actuatorSettings[currentChannel].isReversableMotor) {
safeValue = m_actuatorSettings[currentChannel].channelNeutral;
}
onStartButtonToggle(ui->motorNeutralButton, channel, m_actuatorSettings[channel].channelNeutral, safeValue, ui->motorNeutralSlider);
onStartButtonToggle(ui->motorNeutralButton, currentChannels, m_actuatorSettings[currentChannel].channelNeutral, safeValue, ui->motorNeutralSlider);
}
void OutputCalibrationPage::onStartButtonToggle(QAbstractButton *button, quint16 channel, quint16 value, quint16 safeValue, QSlider *slider)
void OutputCalibrationPage::onStartButtonToggle(QAbstractButton *button, QList<quint16> &channels,
quint16 value, quint16 safeValue, QSlider *slider)
{
if (button->isChecked()) {
// Start calibration
if (checkAlarms()) {
enableButtons(false);
enableServoSliders(true);
m_calibrationUtil->startChannelOutput(channel, safeValue);
m_calibrationUtil->startChannelOutput(channels, safeValue);
slider->setValue(value);
m_calibrationUtil->setChannelOutputValue(value);
} else {
button->setChecked(false);
}
} else {
// Servos and ReversableMotors
m_calibrationUtil->startChannelOutput(channel, m_actuatorSettings[channel].channelNeutral);
// Normal motor
// Stop calibration
quint16 channel = channels[0];
if ((button == ui->motorNeutralButton) && !m_actuatorSettings[channel].isReversableMotor) {
m_calibrationUtil->startChannelOutput(channel, m_actuatorSettings[channel].channelMin);
// Normal motor
m_calibrationUtil->startChannelOutput(channels, m_actuatorSettings[channel].channelMin);
} else {
// Servos and ReversableMotors
m_calibrationUtil->startChannelOutput(channels, m_actuatorSettings[channel].channelNeutral);
}
m_calibrationUtil->stopChannelOutput();
@ -479,6 +613,9 @@ void OutputCalibrationPage::enableServoSliders(bool enabled)
ui->servoMinAngleSlider->setEnabled(enabled);
ui->servoMaxAngleSlider->setEnabled(enabled);
ui->reverseCheckbox->setEnabled(!enabled);
// Hide arrows
showElementMovement(true, 0);
showElementMovement(false, 0);
}
bool OutputCalibrationPage::checkAlarms()
@ -514,11 +651,13 @@ bool OutputCalibrationPage::checkAlarms()
void OutputCalibrationPage::debugLogChannelValues()
{
quint16 channel = getCurrentChannel();
QList<quint16> currentChannels;
getCurrentChannels(currentChannels);
quint16 currentChannel = currentChannels[0];
qDebug() << "ChannelMin : " << m_actuatorSettings[channel].channelMin;
qDebug() << "ChannelNeutral: " << m_actuatorSettings[channel].channelNeutral;
qDebug() << "ChannelMax : " << m_actuatorSettings[channel].channelMax;
qDebug() << "ChannelMin : " << m_actuatorSettings[currentChannel].channelMin;
qDebug() << "ChannelNeutral: " << m_actuatorSettings[currentChannel].channelNeutral;
qDebug() << "ChannelMax : " << m_actuatorSettings[currentChannel].channelMax;
}
int OutputCalibrationPage::getHighOutputRate()
@ -538,7 +677,12 @@ void OutputCalibrationPage::on_motorNeutralSlider_valueChanged(int value)
if (ui->motorNeutralButton->isChecked()) {
quint16 value = ui->motorNeutralSlider->value();
m_calibrationUtil->setChannelOutputValue(value);
m_actuatorSettings[getCurrentChannel()].channelNeutral = value;
QList<quint16> currentChannels;
getCurrentChannels(currentChannels);
foreach(quint16 channel, currentChannels) {
m_actuatorSettings[channel].channelNeutral = value;
}
debugLogChannelValues();
}
}
@ -546,36 +690,65 @@ void OutputCalibrationPage::on_motorNeutralSlider_valueChanged(int value)
void OutputCalibrationPage::on_servoButton_toggled(bool checked)
{
ui->servoButton->setText(checked ? tr("Stop") : tr("Start"));
quint16 channel = getCurrentChannel();
quint16 safeValue = m_actuatorSettings[channel].channelNeutral;
onStartButtonToggle(ui->servoButton, channel, safeValue, safeValue, ui->servoCenterAngleSlider);
QList<quint16> currentChannels;
getCurrentChannels(currentChannels);
quint16 currentChannel = currentChannels[0];
quint16 safeValue = m_actuatorSettings[currentChannel].channelNeutral;
onStartButtonToggle(ui->servoButton, currentChannels, safeValue, safeValue, ui->servoCenterAngleSlider);
}
void OutputCalibrationPage::on_servoCenterAngleSlider_valueChanged(int position)
{
Q_UNUSED(position);
quint16 value = ui->servoCenterAngleSlider->value();
quint16 value = ui->servoCenterAngleSlider->value();
m_calibrationUtil->setChannelOutputValue(value);
quint16 channel = getCurrentChannel();
m_actuatorSettings[channel].channelNeutral = value;
QList<quint16> currentChannels;
getCurrentChannels(currentChannels);
quint16 currentChannel = currentChannels[0];
m_actuatorSettings[currentChannel].channelNeutral = value;
ui->servoPWMValue->setText(tr("Output value : <b>%1</b> µs").arg(value));
// Adjust min and max
if (ui->reverseCheckbox->isChecked()) {
if (value >= m_actuatorSettings[channel].channelMin) {
if (value >= m_actuatorSettings[currentChannel].channelMin) {
ui->servoMinAngleSlider->setValue(value);
}
if (value <= m_actuatorSettings[channel].channelMax) {
if (value <= m_actuatorSettings[currentChannel].channelMax) {
ui->servoMaxAngleSlider->setValue(value);
}
} else {
if (value <= m_actuatorSettings[channel].channelMin) {
if (value <= m_actuatorSettings[currentChannel].channelMin) {
ui->servoMinAngleSlider->setValue(value);
}
if (value >= m_actuatorSettings[channel].channelMax) {
if (value >= m_actuatorSettings[currentChannel].channelMax) {
ui->servoMaxAngleSlider->setValue(value);
}
}
quint16 minValue = (ui->reverseCheckbox->isChecked()) ? ui->servoMaxAngleSlider->value() : ui->servoMinAngleSlider->value();
quint16 maxValue = (ui->reverseCheckbox->isChecked()) ? ui->servoMinAngleSlider->value() : ui->servoMaxAngleSlider->value();
quint16 range = maxValue - minValue;
// Reset arows
showElementMovement(true, 0);
showElementMovement(false, 0);
// 30% "Dead band" : no arrow display
quint16 limitLow = minValue + (range * 0.35);
quint16 limitHigh = maxValue - (range * 0.35);
quint16 middle = minValue + (range / 2);
qreal arrowOpacity = 0;
if (value < limitLow) {
arrowOpacity = (qreal)(middle - value) / (qreal)(middle - minValue);
showElementMovement(ui->reverseCheckbox->isChecked(), arrowOpacity);
} else if (value > limitHigh) {
arrowOpacity = (qreal)(value - middle) / (qreal)(maxValue - middle);
showElementMovement(!ui->reverseCheckbox->isChecked(), arrowOpacity);
}
debugLogChannelValues();
}
@ -584,21 +757,26 @@ void OutputCalibrationPage::on_servoMinAngleSlider_valueChanged(int position)
Q_UNUSED(position);
quint16 value = ui->servoMinAngleSlider->value();
m_calibrationUtil->setChannelOutputValue(value);
m_actuatorSettings[getCurrentChannel()].channelMin = value;
QList<quint16> currentChannels;
getCurrentChannels(currentChannels);
quint16 currentChannel = currentChannels[0];
m_actuatorSettings[currentChannel].channelMin = value;
ui->servoPWMValue->setText(tr("Output value : <b>%1</b> µs (Min)").arg(value));
// Adjust neutral and max
if (ui->reverseCheckbox->isChecked()) {
if (value <= m_actuatorSettings[getCurrentChannel()].channelNeutral) {
if (value <= m_actuatorSettings[currentChannel].channelNeutral) {
ui->servoCenterAngleSlider->setValue(value);
}
if (value <= m_actuatorSettings[getCurrentChannel()].channelMax) {
if (value <= m_actuatorSettings[currentChannel].channelMax) {
ui->servoMaxAngleSlider->setValue(value);
}
} else {
if (value >= m_actuatorSettings[getCurrentChannel()].channelNeutral) {
if (value >= m_actuatorSettings[currentChannel].channelNeutral) {
ui->servoCenterAngleSlider->setValue(value);
}
if (value >= m_actuatorSettings[getCurrentChannel()].channelMax) {
if (value >= m_actuatorSettings[currentChannel].channelMax) {
ui->servoMaxAngleSlider->setValue(value);
}
}
@ -610,21 +788,26 @@ void OutputCalibrationPage::on_servoMaxAngleSlider_valueChanged(int position)
Q_UNUSED(position);
quint16 value = ui->servoMaxAngleSlider->value();
m_calibrationUtil->setChannelOutputValue(value);
m_actuatorSettings[getCurrentChannel()].channelMax = value;
QList<quint16> currentChannels;
getCurrentChannels(currentChannels);
quint16 currentChannel = currentChannels[0];
m_actuatorSettings[currentChannel].channelMax = value;
ui->servoPWMValue->setText(tr("Output value : <b>%1</b> µs (Max)").arg(value));
// Adjust neutral and min
if (ui->reverseCheckbox->isChecked()) {
if (value >= m_actuatorSettings[getCurrentChannel()].channelNeutral) {
if (value >= m_actuatorSettings[currentChannel].channelNeutral) {
ui->servoCenterAngleSlider->setValue(value);
}
if (value >= m_actuatorSettings[getCurrentChannel()].channelMin) {
if (value >= m_actuatorSettings[currentChannel].channelMin) {
ui->servoMinAngleSlider->setValue(value);
}
} else {
if (value <= m_actuatorSettings[getCurrentChannel()].channelNeutral) {
if (value <= m_actuatorSettings[currentChannel].channelNeutral) {
ui->servoCenterAngleSlider->setValue(value);
}
if (value <= m_actuatorSettings[getCurrentChannel()].channelMin) {
if (value <= m_actuatorSettings[currentChannel].channelMin) {
ui->servoMinAngleSlider->setValue(value);
}
}
@ -633,14 +816,18 @@ void OutputCalibrationPage::on_servoMaxAngleSlider_valueChanged(int position)
void OutputCalibrationPage::on_reverseCheckbox_toggled(bool checked)
{
if (checked && m_actuatorSettings[getCurrentChannel()].channelMax > m_actuatorSettings[getCurrentChannel()].channelMin) {
quint16 oldMax = m_actuatorSettings[getCurrentChannel()].channelMax;
m_actuatorSettings[getCurrentChannel()].channelMax = m_actuatorSettings[getCurrentChannel()].channelMin;
m_actuatorSettings[getCurrentChannel()].channelMin = oldMax;
} else if (!checked && m_actuatorSettings[getCurrentChannel()].channelMax < m_actuatorSettings[getCurrentChannel()].channelMin) {
quint16 oldMax = m_actuatorSettings[getCurrentChannel()].channelMax;
m_actuatorSettings[getCurrentChannel()].channelMax = m_actuatorSettings[getCurrentChannel()].channelMin;
m_actuatorSettings[getCurrentChannel()].channelMin = oldMax;
QList<quint16> currentChannels;
getCurrentChannels(currentChannels);
quint16 currentChannel = currentChannels[0];
if (checked && m_actuatorSettings[currentChannel].channelMax > m_actuatorSettings[currentChannel].channelMin) {
quint16 oldMax = m_actuatorSettings[currentChannel].channelMax;
m_actuatorSettings[currentChannel].channelMax = m_actuatorSettings[currentChannel].channelMin;
m_actuatorSettings[currentChannel].channelMin = oldMax;
} else if (!checked && m_actuatorSettings[currentChannel].channelMax < m_actuatorSettings[currentChannel].channelMin) {
quint16 oldMax = m_actuatorSettings[currentChannel].channelMax;
m_actuatorSettings[currentChannel].channelMax = m_actuatorSettings[currentChannel].channelMin;
m_actuatorSettings[currentChannel].channelMin = oldMax;
}
ui->servoCenterAngleSlider->setInvertedAppearance(checked);
ui->servoCenterAngleSlider->setInvertedControls(checked);
@ -650,16 +837,22 @@ void OutputCalibrationPage::on_reverseCheckbox_toggled(bool checked)
ui->servoMaxAngleSlider->setInvertedControls(checked);
if (ui->reverseCheckbox->isChecked()) {
ui->servoMaxAngleSlider->setValue(m_actuatorSettings[getCurrentChannel()].channelMax);
ui->servoCenterAngleSlider->setValue(m_actuatorSettings[getCurrentChannel()].channelNeutral);
ui->servoMinAngleSlider->setValue(m_actuatorSettings[getCurrentChannel()].channelMin);
ui->servoMaxAngleSlider->setValue(m_actuatorSettings[currentChannel].channelMax);
ui->servoCenterAngleSlider->setValue(m_actuatorSettings[currentChannel].channelNeutral);
ui->servoMinAngleSlider->setValue(m_actuatorSettings[currentChannel].channelMin);
} else {
ui->servoMinAngleSlider->setValue(m_actuatorSettings[getCurrentChannel()].channelMin);
ui->servoCenterAngleSlider->setValue(m_actuatorSettings[getCurrentChannel()].channelNeutral);
ui->servoMaxAngleSlider->setValue(m_actuatorSettings[getCurrentChannel()].channelMax);
ui->servoMinAngleSlider->setValue(m_actuatorSettings[currentChannel].channelMin);
ui->servoCenterAngleSlider->setValue(m_actuatorSettings[currentChannel].channelNeutral);
ui->servoMaxAngleSlider->setValue(m_actuatorSettings[currentChannel].channelMax);
}
}
void OutputCalibrationPage::on_calibrateAllMotors_toggled(bool checked)
{
Q_UNUSED(checked);
setupVehicleHighlightedPart();
}
void OutputCalibrationPage::resetOutputCalibrationUtil()
{
if (m_calibrationUtil) {

View File

@ -49,7 +49,7 @@ public:
bool isFinished()
{
return m_currentWizardIndex >= m_wizardIndexes.size() - 1;
return m_currentWizardIndex >= m_wizardIndexes.size();
}
void loadSVGFile(QString file);
@ -70,22 +70,30 @@ private slots:
void on_servoMinAngleSlider_valueChanged(int position);
void on_servoMaxAngleSlider_valueChanged(int position);
void on_reverseCheckbox_toggled(bool checked);
void on_calibrateAllMotors_toggled(bool checked);
private:
static const int LOW_OUTPUT_RATE_MILLISECONDS = 1000;
static const int NEUTRAL_OUTPUT_RATE_MILLISECONDS = 1500;
enum ElementType { FULL, FRAME, MOTOR, SERVO };
static const int LOW_OUTPUT_RATE_MILLISECONDS = 1000;
static const int NEUTRAL_OUTPUT_RATE_MILLISECONDS = 1500;
static const int HIGH_OUTPUT_RATE_MILLISECONDS_PWM = 1900;
static const int HIGH_OUTPUT_RATE_MILLISECONDS_ONESHOT125 = 2000;
void setupVehicle();
void startWizard();
void setupVehicleItems();
void setupVehicleHighlightedPart();
void showElementMovement(bool isUp, qreal value);
void setWizardPage();
void enableButtons(bool enable);
void enableServoSliders(bool enabled);
void onStartButtonToggle(QAbstractButton *button, quint16 channel, quint16 value, quint16 safeValue, QSlider *slider);
void onStartButtonToggle(QAbstractButton *button, QList<quint16> &channels,
quint16 value, quint16 safeValue, QSlider *slider);
bool checkAlarms();
void debugLogChannelValues();
void getCurrentChannels(QList<quint16> &channels);
void enableAllMotorsCheckBox(bool enable);
int getHighOutputRate();
quint16 getCurrentChannel();
@ -97,7 +105,9 @@ private:
qint16 m_currentWizardIndex;
QList<QString> m_vehicleElementIds;
QList<ElementType> m_vehicleElementTypes;
QList<QGraphicsSvgItem *> m_vehicleItems;
QList<QGraphicsSvgItem *> m_arrowsItems;
QList<quint16> m_vehicleHighlightElementIndexes;
QList<quint16> m_channelIndex;
QList<quint16> m_wizardIndexes;

View File

@ -53,7 +53,7 @@
<item row="1" column="0">
<widget class="QStackedWidget" name="calibrationStack">
<property name="currentIndex">
<number>2</number>
<number>1</number>
</property>
<widget class="QWidget" name="intro">
<layout class="QVBoxLayout" name="verticalLayout_3">
@ -123,6 +123,26 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="calibrateAllMotors">
<property name="text">
<string>Calibrate all motor outputs at the same time</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="motorPWMValue">
<property name="text">

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 422 KiB

After

Width:  |  Height:  |  Size: 526 KiB

View File

@ -26,7 +26,7 @@
inkscape:export-ydpi="70.479134"><metadata
id="metadata4103"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs4101"><radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-98.0973,98.0973,-98.0973,-98.0973,-113082.84,-155604.09)"
@ -7564,7 +7564,19 @@
id="stop5573-2-8-5-9-5-0-9-4" /><stop
style="stop-color:#848081;stop-opacity:1"
offset="1"
id="stop5575-5-7-9-0-2-8-2-3" /></linearGradient></defs><sodipodi:namedview
id="stop5575-5-7-9-0-2-8-2-3" /></linearGradient><filter
color-interpolation-filters="sRGB"
inkscape:collect="always"
id="filter9921-4-2"><feGaussianBlur
inkscape:collect="always"
stdDeviation="0.60884705"
id="feGaussianBlur9923-3-3" /></filter><filter
color-interpolation-filters="sRGB"
inkscape:collect="always"
id="filter9921-4-2-6-0"><feGaussianBlur
inkscape:collect="always"
stdDeviation="0.60884705"
id="feGaussianBlur9923-3-3-3-2" /></filter></defs><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
@ -7577,13 +7589,13 @@
inkscape:window-height="928"
id="namedview4099"
showgrid="false"
inkscape:zoom="0.78435941"
inkscape:cx="421.0109"
inkscape:cy="573.46538"
inkscape:zoom="0.40567848"
inkscape:cx="743.97136"
inkscape:cy="255.67352"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="car-steering"
inkscape:current-layer="motorbike"
showborder="true"
inkscape:showpageshadow="false"
showguides="true"
@ -7600,7 +7612,7 @@
fit-margin-top="50"
fit-margin-bottom="50"
fit-margin-right="50"
inkscape:bbox-nodes="false"
inkscape:bbox-nodes="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-midpoints="true"
inkscape:snap-grids="false"><inkscape:grid
@ -7771,7 +7783,7 @@
style="display:inline"
transform="translate(-1.0465068e-7,-4.4182544e-5)"><path
transform="matrix(-1,0,0,1,681.77091,708.1928)"
d="M 191.31786,1225.9447 A 95.658928,20.138721 0 1 1 0,1225.9447 A 95.658928,20.138721 0 1 1 191.31786,1225.9447 z"
d="M 191.31786,1225.9447 C 191.31786,1237.067 148.48989,1246.0834 95.658928,1246.0834 C 42.827961,1246.0834 0,1237.067 0,1225.9447 C 0,1214.8224 42.827961,1205.806 95.658928,1205.806 C 148.48989,1205.806 191.31786,1214.8224 191.31786,1225.9447 z"
sodipodi:ry="20.138721"
sodipodi:rx="95.658928"
sodipodi:cy="1225.9447"
@ -7836,7 +7848,7 @@
x="300.95084"
y="1906.3666" /><path
transform="translate(-0.00459003,-104.83732)"
d="M 314.66354,2090.5566 A 4.9847689,4.5971303 0 1 1 304.694,2090.5566 A 4.9847689,4.5971303 0 1 1 314.66354,2090.5566 z"
d="M 314.66354,2090.5566 C 314.66354,2093.0956 312.43178,2095.1538 309.67877,2095.1538 C 306.92576,2095.1538 304.694,2093.0956 304.694,2090.5566 C 304.694,2088.0177 306.92576,2085.9595 309.67877,2085.9595 C 312.43178,2085.9595 314.66354,2088.0177 314.66354,2090.5566 z"
sodipodi:ry="4.5971303"
sodipodi:rx="4.9847689"
sodipodi:cy="2090.5566"
@ -7860,7 +7872,7 @@
sodipodi:cy="-54.65202"
sodipodi:rx="7.9385705"
sodipodi:ry="7.9385705"
d="M 154.44129,-54.65202 A 7.9385705,7.9385705 0 1 1 138.56415,-54.65202 A 7.9385705,7.9385705 0 1 1 154.44129,-54.65202 z"
d="M 154.44129,-54.65202 C 154.44129,-50.267668 150.88707,-46.713449 146.50272,-46.713449 C 142.11836,-46.713449 138.56415,-50.267668 138.56415,-54.65202 C 138.56415,-59.036371 142.11836,-62.59059 146.50272,-62.59059 C 150.88707,-62.59059 154.44129,-59.036371 154.44129,-54.65202 z"
transform="matrix(-0.81878721,0,0,0.81878721,565.51334,1690.0415)" /><g
style="display:inline"
transform="matrix(-0.39813496,-0.91732685,-0.91732685,0.39813496,1757.6809,1391.2077)"
@ -7960,7 +7972,7 @@
sodipodi:cy="1225.9447"
sodipodi:rx="95.658928"
sodipodi:ry="20.138721"
d="M 191.31786,1225.9447 A 95.658928,20.138721 0 1 1 0,1225.9447 A 95.658928,20.138721 0 1 1 191.31786,1225.9447 z"
d="M 191.31786,1225.9447 C 191.31786,1237.067 148.48989,1246.0834 95.658928,1246.0834 C 42.827961,1246.0834 0,1237.067 0,1225.9447 C 0,1214.8224 42.827961,1205.806 95.658928,1205.806 C 148.48989,1205.806 191.31786,1214.8224 191.31786,1225.9447 z"
transform="matrix(-1,0,0,1,243.77091,708.1928)" /><g
style="display:inline"
id="g5488"
@ -7975,7 +7987,7 @@
id="path5494"
inkscape:connector-curvature="0" /></g><path
transform="matrix(-2.5815325,0,0,2.5815325,1310.6966,-3004.1641)"
d="M 464.20661,1875.9762 A 12.461923,12.461923 0 1 1 439.28277,1875.9762 A 12.461923,12.461923 0 1 1 464.20661,1875.9762 z"
d="M 464.20661,1875.9762 C 464.20661,1882.8587 458.62722,1888.4381 451.74469,1888.4381 C 444.86216,1888.4381 439.28277,1882.8587 439.28277,1875.9762 C 439.28277,1869.0937 444.86216,1863.5143 451.74469,1863.5143 C 458.62722,1863.5143 464.20661,1869.0937 464.20661,1875.9762 z"
sodipodi:ry="12.461923"
sodipodi:rx="12.461923"
sodipodi:cy="1875.9762"
@ -8021,7 +8033,7 @@
style="display:inline"
id="motorbike-m1"><path
transform="matrix(1.1648161,0,0,1.1648161,-71.612697,-316.94008)"
d="M 428.06704,1876.2877 A 27.727777,27.727777 0 1 1 372.61149,1876.2877 A 27.727777,27.727777 0 1 1 428.06704,1876.2877 z"
d="M 428.06704,1876.2877 C 428.06704,1891.6013 415.65289,1904.0155 400.33926,1904.0155 C 385.02564,1904.0155 372.61149,1891.6013 372.61149,1876.2877 C 372.61149,1860.9741 385.02564,1848.5599 400.33926,1848.5599 C 415.65289,1848.5599 428.06704,1860.9741 428.06704,1876.2877 z"
sodipodi:ry="27.727777"
sodipodi:rx="27.727777"
sodipodi:cy="1876.2877"
@ -8036,7 +8048,7 @@
sodipodi:cy="1876.2877"
sodipodi:rx="27.727777"
sodipodi:ry="27.727777"
d="M 428.06704,1876.2877 A 27.727777,27.727777 0 1 1 372.61149,1876.2877 A 27.727777,27.727777 0 1 1 428.06704,1876.2877 z"
d="M 428.06704,1876.2877 C 428.06704,1891.6013 415.65289,1904.0155 400.33926,1904.0155 C 385.02564,1904.0155 372.61149,1891.6013 372.61149,1876.2877 C 372.61149,1860.9741 385.02564,1848.5599 400.33926,1848.5599 C 415.65289,1848.5599 428.06704,1860.9741 428.06704,1876.2877 z"
transform="matrix(1.1409811,0,0,1.1409811,-62.070587,-272.21865)" /><g
transform="matrix(-1,0,0,1,789.41785,0)"
id="text5535"
@ -8069,7 +8081,31 @@
style="fill:#ffffff"
inkscape:connector-curvature="0"
d="M 403.899,769.674 V 771.895 H 391.461 C 391.443,771.339 391.534,770.804 391.73,770.291 C 392.047,769.444 392.554,768.609 393.251,767.789 C 393.949,766.967 394.956,766.018 396.274,764.939 C 398.319,763.259 399.7,761.931 400.419,760.954 C 401.139,759.975 401.498,759.049 401.498,758.176 C 401.498,757.26 401.17,756.488 400.517,755.862 C 399.863,755.232 399.008,754.918 397.955,754.918 C 396.843,754.918 395.953,755.252 395.285,755.919 C 394.618,756.587 394.28,757.511 394.271,758.691 L 391.896,758.448 C 392.059,756.677 392.67,755.327 393.731,754.398 C 394.792,753.467 396.217,753.003 398.005,753.003 C 399.81,753.003 401.238,753.504 402.291,754.505 C 403.344,755.506 403.869,756.746 403.869,758.227 C 403.869,758.982 403.717,759.719 403.408,760.45 C 403.097,761.177 402.588,761.942 401.873,762.747 C 401.16,763.552 399.974,764.655 398.311,766.059 C 396.924,767.222 396.036,768.011 395.643,768.426 C 395.25,768.841 394.924,769.258 394.667,769.677 L 403.899,769.674 L 403.899,769.674 z"
id="path16338" /></g></g></g></g><g
id="path16338" /></g></g></g><g
transform="matrix(0.93030357,-0.36679049,0.36679049,0.93030357,-370.03515,332.30549)"
id="motorbike-steering-down"><path
style="color:#000000;fill:#1b421b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter9921-4-2-6-0);enable-background:accumulate"
d="M 530.37305,1424.5117 L 518.07691,1425.5117 L 540.78076,1398.5117 L 563.48462,1425.5117 L 551.18848,1424.5117 L 551.18848,1474.8734 L 530.37305,1474.8734 z"
id="path11299-8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc"
transform="matrix(0,1,-1,0,1803.5344,1015.8512)" /><path
style="color:#000000;fill:#1bb81b;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="M 379.03125,1535.9062 L 380.03125,1548.2188 L 329.65625,1548.2188 L 329.65625,1569.0312 L 380.03125,1569.0312 L 379.03125,1581.3438 L 406.03125,1558.625 L 379.03125,1535.9062 z M 354.84375,1551.4062 C 356.21255,1551.4062 357.30371,1551.7372 358.125,1552.4375 C 358.95264,1553.1314 359.48318,1554.1503 359.71875,1555.5 L 357.4375,1556.0312 C 357.26559,1555.3121 356.95838,1554.757 356.5,1554.375 C 356.0416,1553.993 355.4804,1553.8125 354.84375,1553.8125 C 353.85693,1553.8125 353.07994,1554.1985 352.46875,1554.9688 C 351.85756,1555.7325 351.53125,1556.8963 351.53125,1558.4688 C 351.53125,1560.1556 351.86913,1561.4339 352.53125,1562.3125 C 353.09787,1563.0701 353.87603,1563.4687 354.84375,1563.4688 C 355.29577,1563.4688 355.76614,1563.3351 356.25,1563.125 C 356.74022,1562.9086 357.14925,1562.6192 357.53125,1562.25 L 357.53125,1560.5 L 354.875,1560.5 L 354.875,1558.125 L 359.875,1558.125 L 359.875,1563.7188 C 359.37204,1564.3106 358.67314,1564.7922 357.75,1565.2188 C 356.82685,1565.645 355.89826,1565.875 354.96875,1565.875 C 353.8355,1565.875 352.8346,1565.585 351.96875,1565.0312 C 351.1029,1564.4712 350.41557,1563.639 349.90625,1562.5312 C 349.40329,1561.4174 349.15625,1560.1276 349.15625,1558.625 C 349.15625,1557.0844 349.39692,1555.7513 349.90625,1554.6562 C 350.42194,1553.5615 351.09133,1552.7597 351.90625,1552.2188 C 352.72752,1551.6777 353.70414,1551.4062 354.84375,1551.4062 z M 333.5,1551.625 L 338.375,1551.625 C 339.62284,1551.6251 340.5277,1551.7454 341.0625,1552 C 341.59728,1552.2483 342.0312,1552.6886 342.375,1553.3125 C 342.71878,1553.93 342.90624,1554.6966 342.90625,1555.5625 C 342.90624,1556.6575 342.62217,1557.519 342.09375,1558.1875 C 341.57169,1558.8559 340.84271,1559.2969 339.875,1559.4688 C 340.37158,1559.8253 340.76904,1560.1984 341.09375,1560.625 C 341.41843,1561.0451 341.87723,1561.8113 342.4375,1562.9062 L 343.8125,1565.625 L 341.0625,1565.625 L 339.375,1562.5938 C 338.77018,1561.4924 338.37271,1560.805 338.15625,1560.5312 C 337.93978,1560.2512 337.71068,1560.0394 337.46875,1559.9375 C 337.22682,1559.8293 336.84728,1559.7813 336.3125,1559.7812 L 335.8125,1559.7812 L 335.8125,1565.625 L 333.5,1565.625 L 333.5,1551.625 z M 345,1551.625 L 347.3125,1551.625 L 347.3125,1565.625 L 345,1565.625 L 345,1551.625 z M 362.03125,1551.625 L 364.34375,1551.625 L 364.34375,1557.1562 L 368.90625,1557.1562 L 368.90625,1551.625 L 371.21875,1551.625 L 371.21875,1565.625 L 368.90625,1565.625 L 368.90625,1559.5 L 364.34375,1559.5 L 364.34375,1565.625 L 362.03125,1565.625 L 362.03125,1551.625 z M 372.78125,1551.625 L 381.90625,1551.625 L 381.90625,1554 L 378.5,1554 L 378.5,1565.625 L 376.1875,1565.625 L 376.1875,1554 L 372.78125,1554 L 372.78125,1551.625 z M 335.8125,1554 L 335.8125,1557.5625 L 337.53125,1557.5625 C 338.58172,1557.5625 339.24475,1557.4954 339.53125,1557.4062 C 339.81774,1557.3108 340.07173,1557.1238 340.25,1556.8438 C 340.42826,1556.5637 340.49999,1556.2147 340.5,1555.75 C 340.49999,1555.3043 340.42826,1554.9236 340.25,1554.6562 C 340.07173,1554.3825 339.80559,1554.1956 339.5,1554.0938 C 339.28353,1554.0238 338.66274,1554 337.625,1554 L 335.8125,1554 z"
id="path11301-5"
inkscape:connector-curvature="0" /></g><g
transform="matrix(0.93030357,-0.36679049,0.36679049,0.93030357,-364.52913,330.13459)"
id="motorbike-steering-up"><path
transform="matrix(0,1,1,0,-1157.8507,1015.8512)"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0"
id="path11305-8"
d="M 530.37305,1424.5117 L 518.07691,1425.5117 L 540.78076,1398.5117 L 563.48462,1425.5117 L 551.18848,1424.5117 L 551.18848,1474.8734 L 530.37305,1474.8734 z"
style="color:#000000;fill:#1b421b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter9921-4-2-6-0);enable-background:accumulate" /><path
style="color:#000000;fill:#1bb81b;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="M 266.65625,1535.9062 L 239.65625,1558.625 L 266.65625,1581.3438 L 265.65625,1569.0312 L 316.03125,1569.0312 L 316.03125,1548.2188 L 265.65625,1548.2188 L 266.65625,1535.9062 z M 283.3125,1551.625 L 291.84375,1551.625 L 291.84375,1554 L 285.625,1554 L 285.625,1557.0938 L 291.40625,1557.0938 L 291.40625,1559.4688 L 285.625,1559.4688 L 285.625,1563.2812 L 292.03125,1563.2812 L 292.03125,1565.625 L 283.3125,1565.625 L 283.3125,1551.625 z M 294.03125,1551.625 L 301.875,1551.625 L 301.875,1554 L 296.34375,1554 L 296.34375,1557.3125 L 301.125,1557.3125 L 301.125,1559.6875 L 296.34375,1559.6875 L 296.34375,1565.625 L 294.03125,1565.625 L 294.03125,1551.625 z M 303,1551.625 L 312.125,1551.625 L 312.125,1554 L 308.71875,1554 L 308.71875,1565.625 L 306.40625,1565.625 L 306.40625,1554 L 303,1554 L 303,1551.625 z M 273.5625,1551.75 L 275.875,1551.75 L 275.875,1563.2812 L 281.625,1563.2812 L 281.625,1565.625 L 273.5625,1565.625 L 273.5625,1551.75 z"
id="path11307-7"
inkscape:connector-curvature="0" /></g></g><g
id="tank"><g
id="tank-frame"><path
sodipodi:nodetypes="sssssssss"
@ -8104,7 +8140,7 @@
id="g4317-6"
transform="translate(-23.155453,-40.626099)"><path
transform="translate(49.34375,1674.1645)"
d="M 200.62933,-643.0614 A 19.124739,19.124739 0 1 1 162.37985,-643.0614 A 19.124739,19.124739 0 1 1 200.62933,-643.0614 z"
d="M 200.62933,-643.0614 C 200.62933,-632.4991 192.06689,-623.93666 181.50459,-623.93666 C 170.94229,-623.93666 162.37985,-632.4991 162.37985,-643.0614 C 162.37985,-653.6237 170.94229,-662.18614 181.50459,-662.18614 C 192.06689,-662.18614 200.62933,-653.6237 200.62933,-643.0614 z"
sodipodi:ry="19.124739"
sodipodi:rx="19.124739"
sodipodi:cy="-643.0614"
@ -8119,7 +8155,7 @@
sodipodi:cy="-643.0614"
sodipodi:rx="19.124739"
sodipodi:ry="19.124739"
d="M 200.62933,-643.0614 A 19.124739,19.124739 0 1 1 162.37985,-643.0614 A 19.124739,19.124739 0 1 1 200.62933,-643.0614 z"
d="M 200.62933,-643.0614 C 200.62933,-632.4991 192.06689,-623.93666 181.50459,-623.93666 C 170.94229,-623.93666 162.37985,-632.4991 162.37985,-643.0614 C 162.37985,-653.6237 170.94229,-662.18614 181.50459,-662.18614 C 192.06689,-662.18614 200.62933,-653.6237 200.62933,-643.0614 z"
transform="matrix(0.29043923,0,0,0.29043923,178.13229,1217.8734)" /></g><g
transform="translate(58.844547,-40.626099)"
id="g4323-1"><path
@ -8130,10 +8166,10 @@
sodipodi:cy="-643.0614"
sodipodi:rx="19.124739"
sodipodi:ry="19.124739"
d="M 200.62933,-643.0614 A 19.124739,19.124739 0 1 1 162.37985,-643.0614 A 19.124739,19.124739 0 1 1 200.62933,-643.0614 z"
d="M 200.62933,-643.0614 C 200.62933,-632.4991 192.06689,-623.93666 181.50459,-623.93666 C 170.94229,-623.93666 162.37985,-632.4991 162.37985,-643.0614 C 162.37985,-653.6237 170.94229,-662.18614 181.50459,-662.18614 C 192.06689,-662.18614 200.62933,-653.6237 200.62933,-643.0614 z"
transform="translate(49.34375,1674.1645)" /><path
transform="matrix(0.29043923,0,0,0.29043923,178.13229,1217.8734)"
d="M 200.62933,-643.0614 A 19.124739,19.124739 0 1 1 162.37985,-643.0614 A 19.124739,19.124739 0 1 1 200.62933,-643.0614 z"
d="M 200.62933,-643.0614 C 200.62933,-632.4991 192.06689,-623.93666 181.50459,-623.93666 C 170.94229,-623.93666 162.37985,-632.4991 162.37985,-643.0614 C 162.37985,-653.6237 170.94229,-662.18614 181.50459,-662.18614 C 192.06689,-662.18614 200.62933,-653.6237 200.62933,-643.0614 z"
sodipodi:ry="19.124739"
sodipodi:rx="19.124739"
sodipodi:cy="-643.0614"
@ -8144,7 +8180,7 @@
id="g4329-9"
transform="translate(142.84455,-40.626099)"><path
transform="translate(49.34375,1674.1645)"
d="M 200.62933,-643.0614 A 19.124739,19.124739 0 1 1 162.37985,-643.0614 A 19.124739,19.124739 0 1 1 200.62933,-643.0614 z"
d="M 200.62933,-643.0614 C 200.62933,-632.4991 192.06689,-623.93666 181.50459,-623.93666 C 170.94229,-623.93666 162.37985,-632.4991 162.37985,-643.0614 C 162.37985,-653.6237 170.94229,-662.18614 181.50459,-662.18614 C 192.06689,-662.18614 200.62933,-653.6237 200.62933,-643.0614 z"
sodipodi:ry="19.124739"
sodipodi:rx="19.124739"
sodipodi:cy="-643.0614"
@ -8159,7 +8195,7 @@
sodipodi:cy="-643.0614"
sodipodi:rx="19.124739"
sodipodi:ry="19.124739"
d="M 200.62933,-643.0614 A 19.124739,19.124739 0 1 1 162.37985,-643.0614 A 19.124739,19.124739 0 1 1 200.62933,-643.0614 z"
d="M 200.62933,-643.0614 C 200.62933,-632.4991 192.06689,-623.93666 181.50459,-623.93666 C 170.94229,-623.93666 162.37985,-632.4991 162.37985,-643.0614 C 162.37985,-653.6237 170.94229,-662.18614 181.50459,-662.18614 C 192.06689,-662.18614 200.62933,-653.6237 200.62933,-643.0614 z"
transform="matrix(0.29043923,0,0,0.29043923,178.13229,1217.8734)" /></g><g
transform="translate(222.84455,-40.626099)"
id="g4335-3"><path
@ -8170,10 +8206,10 @@
sodipodi:cy="-643.0614"
sodipodi:rx="19.124739"
sodipodi:ry="19.124739"
d="M 200.62933,-643.0614 A 19.124739,19.124739 0 1 1 162.37985,-643.0614 A 19.124739,19.124739 0 1 1 200.62933,-643.0614 z"
d="M 200.62933,-643.0614 C 200.62933,-632.4991 192.06689,-623.93666 181.50459,-623.93666 C 170.94229,-623.93666 162.37985,-632.4991 162.37985,-643.0614 C 162.37985,-653.6237 170.94229,-662.18614 181.50459,-662.18614 C 192.06689,-662.18614 200.62933,-653.6237 200.62933,-643.0614 z"
transform="translate(49.34375,1674.1645)" /><path
transform="matrix(0.29043923,0,0,0.29043923,178.13229,1217.8734)"
d="M 200.62933,-643.0614 A 19.124739,19.124739 0 1 1 162.37985,-643.0614 A 19.124739,19.124739 0 1 1 200.62933,-643.0614 z"
d="M 200.62933,-643.0614 C 200.62933,-632.4991 192.06689,-623.93666 181.50459,-623.93666 C 170.94229,-623.93666 162.37985,-632.4991 162.37985,-643.0614 C 162.37985,-653.6237 170.94229,-662.18614 181.50459,-662.18614 C 192.06689,-662.18614 200.62933,-653.6237 200.62933,-643.0614 z"
sodipodi:ry="19.124739"
sodipodi:rx="19.124739"
sodipodi:cy="-643.0614"
@ -8193,10 +8229,10 @@
sodipodi:cy="-643.0614"
sodipodi:rx="19.124739"
sodipodi:ry="19.124739"
d="M 200.62933,-643.0614 A 19.124739,19.124739 0 1 1 162.37985,-643.0614 A 19.124739,19.124739 0 1 1 200.62933,-643.0614 z"
d="M 200.62933,-643.0614 C 200.62933,-632.4991 192.06689,-623.93666 181.50459,-623.93666 C 170.94229,-623.93666 162.37985,-632.4991 162.37985,-643.0614 C 162.37985,-653.6237 170.94229,-662.18614 181.50459,-662.18614 C 192.06689,-662.18614 200.62933,-653.6237 200.62933,-643.0614 z"
transform="translate(49.34375,1674.1645)" /><path
transform="matrix(0.29043923,0,0,0.29043923,178.13229,1217.8734)"
d="M 200.62933,-643.0614 A 19.124739,19.124739 0 1 1 162.37985,-643.0614 A 19.124739,19.124739 0 1 1 200.62933,-643.0614 z"
d="M 200.62933,-643.0614 C 200.62933,-632.4991 192.06689,-623.93666 181.50459,-623.93666 C 170.94229,-623.93666 162.37985,-632.4991 162.37985,-643.0614 C 162.37985,-653.6237 170.94229,-662.18614 181.50459,-662.18614 C 192.06689,-662.18614 200.62933,-653.6237 200.62933,-643.0614 z"
sodipodi:ry="19.124739"
sodipodi:rx="19.124739"
sodipodi:cy="-643.0614"
@ -8207,7 +8243,7 @@
id="g4349-6"
transform="translate(58.844547,-40.626099)"><path
transform="translate(49.34375,1674.1645)"
d="M 200.62933,-643.0614 A 19.124739,19.124739 0 1 1 162.37985,-643.0614 A 19.124739,19.124739 0 1 1 200.62933,-643.0614 z"
d="M 200.62933,-643.0614 C 200.62933,-632.4991 192.06689,-623.93666 181.50459,-623.93666 C 170.94229,-623.93666 162.37985,-632.4991 162.37985,-643.0614 C 162.37985,-653.6237 170.94229,-662.18614 181.50459,-662.18614 C 192.06689,-662.18614 200.62933,-653.6237 200.62933,-643.0614 z"
sodipodi:ry="19.124739"
sodipodi:rx="19.124739"
sodipodi:cy="-643.0614"
@ -8222,7 +8258,7 @@
sodipodi:cy="-643.0614"
sodipodi:rx="19.124739"
sodipodi:ry="19.124739"
d="M 200.62933,-643.0614 A 19.124739,19.124739 0 1 1 162.37985,-643.0614 A 19.124739,19.124739 0 1 1 200.62933,-643.0614 z"
d="M 200.62933,-643.0614 C 200.62933,-632.4991 192.06689,-623.93666 181.50459,-623.93666 C 170.94229,-623.93666 162.37985,-632.4991 162.37985,-643.0614 C 162.37985,-653.6237 170.94229,-662.18614 181.50459,-662.18614 C 192.06689,-662.18614 200.62933,-653.6237 200.62933,-643.0614 z"
transform="matrix(0.29043923,0,0,0.29043923,178.13229,1217.8734)" /></g><g
transform="translate(142.84455,-40.626099)"
id="g4355-2"><path
@ -8233,10 +8269,10 @@
sodipodi:cy="-643.0614"
sodipodi:rx="19.124739"
sodipodi:ry="19.124739"
d="M 200.62933,-643.0614 A 19.124739,19.124739 0 1 1 162.37985,-643.0614 A 19.124739,19.124739 0 1 1 200.62933,-643.0614 z"
d="M 200.62933,-643.0614 C 200.62933,-632.4991 192.06689,-623.93666 181.50459,-623.93666 C 170.94229,-623.93666 162.37985,-632.4991 162.37985,-643.0614 C 162.37985,-653.6237 170.94229,-662.18614 181.50459,-662.18614 C 192.06689,-662.18614 200.62933,-653.6237 200.62933,-643.0614 z"
transform="translate(49.34375,1674.1645)" /><path
transform="matrix(0.29043923,0,0,0.29043923,178.13229,1217.8734)"
d="M 200.62933,-643.0614 A 19.124739,19.124739 0 1 1 162.37985,-643.0614 A 19.124739,19.124739 0 1 1 200.62933,-643.0614 z"
d="M 200.62933,-643.0614 C 200.62933,-632.4991 192.06689,-623.93666 181.50459,-623.93666 C 170.94229,-623.93666 162.37985,-632.4991 162.37985,-643.0614 C 162.37985,-653.6237 170.94229,-662.18614 181.50459,-662.18614 C 192.06689,-662.18614 200.62933,-653.6237 200.62933,-643.0614 z"
sodipodi:ry="19.124739"
sodipodi:rx="19.124739"
sodipodi:cy="-643.0614"
@ -8247,7 +8283,7 @@
id="g4361-2"
transform="translate(222.84455,-40.626099)"><path
transform="translate(49.34375,1674.1645)"
d="M 200.62933,-643.0614 A 19.124739,19.124739 0 1 1 162.37985,-643.0614 A 19.124739,19.124739 0 1 1 200.62933,-643.0614 z"
d="M 200.62933,-643.0614 C 200.62933,-632.4991 192.06689,-623.93666 181.50459,-623.93666 C 170.94229,-623.93666 162.37985,-632.4991 162.37985,-643.0614 C 162.37985,-653.6237 170.94229,-662.18614 181.50459,-662.18614 C 192.06689,-662.18614 200.62933,-653.6237 200.62933,-643.0614 z"
sodipodi:ry="19.124739"
sodipodi:rx="19.124739"
sodipodi:cy="-643.0614"
@ -8262,7 +8298,7 @@
sodipodi:cy="-643.0614"
sodipodi:rx="19.124739"
sodipodi:ry="19.124739"
d="M 200.62933,-643.0614 A 19.124739,19.124739 0 1 1 162.37985,-643.0614 A 19.124739,19.124739 0 1 1 200.62933,-643.0614 z"
d="M 200.62933,-643.0614 C 200.62933,-632.4991 192.06689,-623.93666 181.50459,-623.93666 C 170.94229,-623.93666 162.37985,-632.4991 162.37985,-643.0614 C 162.37985,-653.6237 170.94229,-662.18614 181.50459,-662.18614 C 192.06689,-662.18614 200.62933,-653.6237 200.62933,-643.0614 z"
transform="matrix(0.29043923,0,0,0.29043923,178.13229,1217.8734)" /></g></g><path
transform="translate(1.5175692e-7,-3.7640998e-6)"
style="color:#000000;fill:url(#linearGradient16164);fill-opacity:1;fill-rule:nonzero;stroke:#131715;stroke-width:0.31890565;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
@ -9044,7 +9080,7 @@
sodipodi:cy="1901.3416"
sodipodi:rx="0.92891532"
sodipodi:ry="0.92891532"
d="M 48.904387,1901.3416 A 0.92891532,0.92891532 0 1 1 47.046556,1901.3416 A 0.92891532,0.92891532 0 1 1 48.904387,1901.3416 z"
d="M 48.904387,1901.3416 C 48.904387,1901.8546 48.488497,1902.2705 47.975471,1902.2705 C 47.462446,1902.2705 47.046556,1901.8546 47.046556,1901.3416 C 47.046556,1900.8285 47.462446,1900.4126 47.975471,1900.4126 C 48.488497,1900.4126 48.904387,1900.8285 48.904387,1901.3416 z"
transform="matrix(-3.6465408,0,0,3.6465408,671.05978,-4564.7251)" /><path
d="M 649.1838,2260.3441 C 660.1028,2271.2721 660.1028,2288.9881 649.1708,2299.9081 C 638.2498,2310.8331 620.5338,2310.8331 609.6078,2299.9081 C 598.6868,2288.9871 598.6868,2271.2751 609.6178,2260.3531 C 620.5388,2249.4271 638.2528,2249.4251 649.1828,2260.3421"
id="path16350"
@ -9056,7 +9092,31 @@
style="fill:#ffffff"
inkscape:connector-curvature="0"
d="M 252.11,629.086 H 249.801 V 614.363 C 249.244,614.892 248.516,615.425 247.612,615.955 C 246.71,616.486 245.899,616.884 245.18,617.148 V 614.916 C 246.471,614.309 247.601,613.572 248.569,612.708 C 249.536,611.844 250.219,611.006 250.622,610.192 H 252.11 V 629.086 z"
id="path16354" /></g></g></g></g><g
id="path16354" /></g></g><g
transform="matrix(0,0.99999999,-0.99999999,0,2291.2542,2043.3476)"
id="car-steering-up"><path
style="color:#000000;fill:#1b421b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter9921-4-2);enable-background:accumulate"
d="M 530.37305,1424.5117 L 518.07691,1425.5117 L 540.78076,1398.5117 L 563.48462,1425.5117 L 551.18848,1424.5117 L 551.18848,1474.8734 L 530.37305,1474.8734 z"
id="path11299"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc"
transform="matrix(0,1,-1,0,1803.5344,1015.8512)" /><path
style="color:#000000;fill:#1bb81b;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="M 379.03125,1535.9062 L 380.03125,1548.2188 L 329.65625,1548.2188 L 329.65625,1569.0312 L 380.03125,1569.0312 L 379.03125,1581.3438 L 406.03125,1558.625 L 379.03125,1535.9062 z M 354.84375,1551.4062 C 356.21255,1551.4062 357.30371,1551.7372 358.125,1552.4375 C 358.95264,1553.1314 359.48318,1554.1503 359.71875,1555.5 L 357.4375,1556.0312 C 357.26559,1555.3121 356.95838,1554.757 356.5,1554.375 C 356.0416,1553.993 355.4804,1553.8125 354.84375,1553.8125 C 353.85693,1553.8125 353.07994,1554.1985 352.46875,1554.9688 C 351.85756,1555.7325 351.53125,1556.8963 351.53125,1558.4688 C 351.53125,1560.1556 351.86913,1561.4339 352.53125,1562.3125 C 353.09787,1563.0701 353.87603,1563.4687 354.84375,1563.4688 C 355.29577,1563.4688 355.76614,1563.3351 356.25,1563.125 C 356.74022,1562.9086 357.14925,1562.6192 357.53125,1562.25 L 357.53125,1560.5 L 354.875,1560.5 L 354.875,1558.125 L 359.875,1558.125 L 359.875,1563.7188 C 359.37204,1564.3106 358.67314,1564.7922 357.75,1565.2188 C 356.82685,1565.645 355.89826,1565.875 354.96875,1565.875 C 353.8355,1565.875 352.8346,1565.585 351.96875,1565.0312 C 351.1029,1564.4712 350.41557,1563.639 349.90625,1562.5312 C 349.40329,1561.4174 349.15625,1560.1276 349.15625,1558.625 C 349.15625,1557.0844 349.39692,1555.7513 349.90625,1554.6562 C 350.42194,1553.5615 351.09133,1552.7597 351.90625,1552.2188 C 352.72752,1551.6777 353.70414,1551.4062 354.84375,1551.4062 z M 333.5,1551.625 L 338.375,1551.625 C 339.62284,1551.6251 340.5277,1551.7454 341.0625,1552 C 341.59728,1552.2483 342.0312,1552.6886 342.375,1553.3125 C 342.71878,1553.93 342.90624,1554.6966 342.90625,1555.5625 C 342.90624,1556.6575 342.62217,1557.519 342.09375,1558.1875 C 341.57169,1558.8559 340.84271,1559.2969 339.875,1559.4688 C 340.37158,1559.8253 340.76904,1560.1984 341.09375,1560.625 C 341.41843,1561.0451 341.87723,1561.8113 342.4375,1562.9062 L 343.8125,1565.625 L 341.0625,1565.625 L 339.375,1562.5938 C 338.77018,1561.4924 338.37271,1560.805 338.15625,1560.5312 C 337.93978,1560.2512 337.71068,1560.0394 337.46875,1559.9375 C 337.22682,1559.8293 336.84728,1559.7813 336.3125,1559.7812 L 335.8125,1559.7812 L 335.8125,1565.625 L 333.5,1565.625 L 333.5,1551.625 z M 345,1551.625 L 347.3125,1551.625 L 347.3125,1565.625 L 345,1565.625 L 345,1551.625 z M 362.03125,1551.625 L 364.34375,1551.625 L 364.34375,1557.1562 L 368.90625,1557.1562 L 368.90625,1551.625 L 371.21875,1551.625 L 371.21875,1565.625 L 368.90625,1565.625 L 368.90625,1559.5 L 364.34375,1559.5 L 364.34375,1565.625 L 362.03125,1565.625 L 362.03125,1551.625 z M 372.78125,1551.625 L 381.90625,1551.625 L 381.90625,1554 L 378.5,1554 L 378.5,1565.625 L 376.1875,1565.625 L 376.1875,1554 L 372.78125,1554 L 372.78125,1551.625 z M 335.8125,1554 L 335.8125,1557.5625 L 337.53125,1557.5625 C 338.58172,1557.5625 339.24475,1557.4954 339.53125,1557.4062 C 339.81774,1557.3108 340.07173,1557.1238 340.25,1556.8438 C 340.42826,1556.5637 340.49999,1556.2147 340.5,1555.75 C 340.49999,1555.3043 340.42826,1554.9236 340.25,1554.6562 C 340.07173,1554.3825 339.80559,1554.1956 339.5,1554.0938 C 339.28353,1554.0238 338.66274,1554 337.625,1554 L 335.8125,1554 z"
id="path11301"
inkscape:connector-curvature="0" /></g><g
transform="matrix(0,0.99999999,-0.99999999,0,2291.2542,2047.0634)"
id="car-steering-down"><path
transform="matrix(0,1,1,0,-1157.8507,1015.8512)"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0"
id="path11305"
d="M 530.37305,1424.5117 L 518.07691,1425.5117 L 540.78076,1398.5117 L 563.48462,1425.5117 L 551.18848,1424.5117 L 551.18848,1474.8734 L 530.37305,1474.8734 z"
style="color:#000000;fill:#1b421b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter9921-4-2);enable-background:accumulate" /><path
style="color:#000000;fill:#1bb81b;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="M 266.65625,1535.9062 L 239.65625,1558.625 L 266.65625,1581.3438 L 265.65625,1569.0312 L 316.03125,1569.0312 L 316.03125,1548.2188 L 265.65625,1548.2188 L 266.65625,1535.9062 z M 283.3125,1551.625 L 291.84375,1551.625 L 291.84375,1554 L 285.625,1554 L 285.625,1557.0938 L 291.40625,1557.0938 L 291.40625,1559.4688 L 285.625,1559.4688 L 285.625,1563.2812 L 292.03125,1563.2812 L 292.03125,1565.625 L 283.3125,1565.625 L 283.3125,1551.625 z M 294.03125,1551.625 L 301.875,1551.625 L 301.875,1554 L 296.34375,1554 L 296.34375,1557.3125 L 301.125,1557.3125 L 301.125,1559.6875 L 296.34375,1559.6875 L 296.34375,1565.625 L 294.03125,1565.625 L 294.03125,1551.625 z M 303,1551.625 L 312.125,1551.625 L 312.125,1554 L 308.71875,1554 L 308.71875,1565.625 L 306.40625,1565.625 L 306.40625,1554 L 303,1554 L 303,1551.625 z M 273.5625,1551.75 L 275.875,1551.75 L 275.875,1563.2812 L 281.625,1563.2812 L 281.625,1565.625 L 273.5625,1565.625 L 273.5625,1551.75 z"
id="path11307"
inkscape:connector-curvature="0" /></g></g></g><g
inkscape:groupmode="layer"
id="layer4"
inkscape:label="tank"

Before

Width:  |  Height:  |  Size: 431 KiB

After

Width:  |  Height:  |  Size: 448 KiB

View File

@ -492,6 +492,9 @@ void SetupWizard::customBackClicked()
static_cast<OutputCalibrationPage *>(currentPage())->customBackClicked();
} else {
back();
if (currentId() == PAGE_OUTPUT_CALIBRATION) {
static_cast<OutputCalibrationPage *>(currentPage())->customBackClicked();
}
}
}

View File

@ -779,17 +779,15 @@ void VehicleConfigurationHelper::applyMixerConfiguration(mixerChannelSettings ch
mSettings->setMixerValueRoll(100);
mSettings->setMixerValuePitch(100);
mSettings->setMixerValueYaw(100);
// Set curve2 range from -0.926 to 1 : take in account 4% offset in Throttle input
// 0.5 / 0.54 = 0.926
maxThrottle = 1;
minThrottle = -0.926;
minThrottle = 0;
break;
case VehicleConfigurationSource::GROUNDVEHICLE_DIFFERENTIAL:
mSettings->setMixerValueRoll(100);
mSettings->setMixerValuePitch(100);
mSettings->setMixerValueYaw(100);
maxThrottle = 0.8;
minThrottle = -0.8;
minThrottle = 0;
break;
default:
break;
@ -1927,7 +1925,7 @@ void VehicleConfigurationHelper::setupDualAileron()
channels[3].throttle2 = 0;
channels[3].roll = 0;
channels[3].pitch = 0;
channels[3].yaw = 100;
channels[3].yaw = -100;
guiSettings.fixedwing.FixedWingThrottle = 3;
guiSettings.fixedwing.FixedWingRoll1 = 1;
@ -1979,7 +1977,7 @@ void VehicleConfigurationHelper::setupAileron()
channels[3].throttle2 = 0;
channels[3].roll = 0;
channels[3].pitch = 0;
channels[3].yaw = 100;
channels[3].yaw = -100;
guiSettings.fixedwing.FixedWingThrottle = 3;
guiSettings.fixedwing.FixedWingRoll1 = 1;
@ -2030,7 +2028,7 @@ void VehicleConfigurationHelper::setupVtail()
channels[1].throttle2 = 0;
channels[1].roll = 0;
channels[1].pitch = 100;
channels[1].yaw = 100;
channels[1].yaw = -100;
// Left Vtail Servo (Chan 4)
channels[3].type = MIXER_TYPE_SERVO;
@ -2038,7 +2036,7 @@ void VehicleConfigurationHelper::setupVtail()
channels[3].throttle2 = 0;
channels[3].roll = 0;
channels[3].pitch = -100;
channels[3].yaw = 100;
channels[3].yaw = -100;
guiSettings.fixedwing.FixedWingThrottle = 3;
guiSettings.fixedwing.FixedWingRoll1 = 1;
@ -2076,8 +2074,8 @@ void VehicleConfigurationHelper::setupCar()
// Motor (Chan 2)
channels[1].type = MIXER_TYPE_REVERSABLEMOTOR;
channels[1].throttle1 = 0;
channels[1].throttle2 = 100;
channels[1].throttle1 = 100;
channels[1].throttle2 = 0;
channels[1].roll = 0;
channels[1].pitch = 0;
channels[1].yaw = 0;
@ -2101,16 +2099,16 @@ void VehicleConfigurationHelper::setupTank()
// Left Motor (Chan 1)
channels[0].type = MIXER_TYPE_REVERSABLEMOTOR;
channels[0].throttle1 = 0;
channels[0].throttle2 = 100;
channels[0].throttle1 = 100;
channels[0].throttle2 = 0;
channels[0].roll = 0;
channels[0].pitch = 0;
channels[0].yaw = 100;
// Right Motor (Chan 2)
channels[1].type = MIXER_TYPE_REVERSABLEMOTOR;
channels[1].throttle1 = 0;
channels[1].throttle2 = 100;
channels[1].throttle1 = 100;
channels[1].throttle2 = 0;
channels[1].roll = 0;
channels[1].pitch = 0;
channels[1].yaw = -100;
@ -2140,7 +2138,7 @@ void VehicleConfigurationHelper::setupMotorcycle()
channels[0].pitch = 0;
channels[0].yaw = 100;
// Motor (Chan 2) : Curve1, no reverse
// Motor (Chan 2)
channels[1].type = MIXER_TYPE_MOTOR;
channels[1].throttle1 = 100;
channels[1].throttle2 = 0;

View File

@ -0,0 +1,17 @@
<html>
<head>
<title></title>
<meta content="">
<style></style>
</head>
<body>
<h1>System Configuration : BadThrottleOrCollectiveInputRange</h1>
<p>
There is a problem with throttle/collective channel configuration :
<ul>
<li>Redo your input calibration.</li>
<li>The range for the channel between min and max must be more than 300µs.</li>
</ul>
</p>
</body>
</html>

View File

@ -0,0 +1,17 @@
<html>
<head>
<title></title>
<meta content="">
<style></style>
</head>
<body>
<h1>Configuration Système : BadThrottleOrCollectiveInputRange</h1>
<p>
Il y a un problème avec la configuration du canal throttle/collective :
<ul>
<li>Relancez la calibration des entrées.</li>
<li>La différence entre la valeur mini et maxi doit faire au moins 300µs.</li>
</ul>
</p>
</body>
</html>

View File

@ -33,6 +33,7 @@
<file>html/Stabilization-Critical.html</file>
<file>html/SystemConfiguration-UnsupportedConfig_OneShot.html</file>
<file>html/SystemConfiguration-FlightMode.html</file>
<file>html/SystemConfiguration-BadThrottleOrCollectiveInputRange.html</file>
<file>html/BootFault-RebootRequired.html</file>
</qresource>
<qresource prefix="/systemhealth" lang="fr">
@ -69,6 +70,7 @@
<file alias="html/Stabilization-Critical.html">html/fr/Stabilization-Critical.html</file>
<file alias="html/SystemConfiguration-UnsupportedConfig_OneShot.html">html/fr/SystemConfiguration-UnsupportedConfig_OneShot.html</file>
<file alias="html/SystemConfiguration-FlightMode.html">html/fr/SystemConfiguration-FlightMode.html</file>
<file alias="html/SystemConfiguration-BadThrottleOrCollectiveInputRange.html">html/fr/SystemConfiguration-BadThrottleOrCollectiveInputRange.html</file>
<file alias="html/BootFault-RebootRequired.html">html/fr/BootFault-RebootRequired.html</file>
</qresource>

View File

@ -0,0 +1,176 @@
[OutputJobFile]
Version=1.0
[OutputGroup1]
Name=Assembly.OutJob
Description=
TargetOutputMedium=PDF
VariantName=[No Variations]
VariantScope=1
CurrentConfigurationName=
TargetPrinter=Brother HL-2170W
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintWhat=1
OutputMedium1=Print Job
OutputMedium1_Type=Printer
OutputMedium1_Printer=
OutputMedium1_PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintWhat=1
OutputMedium2=PDF
OutputMedium2_Type=Publish
OutputMedium3=Folder Structure
OutputMedium3_Type=GeneratedFiles
OutputMedium4=Video
OutputMedium4_Type=Multimedia
OutputType1=Assembly
OutputName1=Assembly Drawings
OutputCategory1=Assembly
OutputDocumentPath1=
OutputVariantName1=
OutputEnabled1=1
OutputEnabled1_OutputMedium1=0
OutputEnabled1_OutputMedium2=1
OutputEnabled1_OutputMedium3=0
OutputEnabled1_OutputMedium4=0
OutputDefault1=0
PageOptions1=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=9.24|XCorrection=1.00|YCorrection=1.00|PrintKind=0|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
Configuration1_Name1=OutputConfigurationParameter1
Configuration1_Item1=DesignatorDisplayMode=Physical|PrintArea=DesignExtent|PrintAreaLowerLeftCornerX=0|PrintAreaLowerLeftCornerY=0|PrintAreaUpperRightCornerX=0|PrintAreaUpperRightCornerY=0|Record=PcbPrintView
Configuration1_Name2=OutputConfigurationParameter2
Configuration1_Item2=IncludeBottomLayerComponents=False|IncludeMultiLayerComponents=True|IncludeTopLayerComponents=True|Index=0|Mirror=False|Name=Top Assembly Drawing|PadNumberFontSize=14|Record=PcbPrintOut|ShowHoles=False|ShowPadNets=False|ShowPadNumbers=False|SubstituteFonts=True
Configuration1_Name3=OutputConfigurationParameter3
Configuration1_Item3=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical6|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration1_Name4=OutputConfigurationParameter4
Configuration1_Item4=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Hidden|FFill=Hidden|FPad=Hidden|FRegion=Hidden|FText=Hidden|FTrack=Hidden|FVia=Hidden|Layer=TopLayer|Polygon=Hidden|PrintOutIndex=0|Record=PcbPrintLayer
Configuration1_Name5=OutputConfigurationParameter5
Configuration1_Item5=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=TopOverlay|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration1_Name6=OutputConfigurationParameter6
Configuration1_Item6=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Hidden|Layer=MultiLayer|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration1_Name7=OutputConfigurationParameter7
Configuration1_Item7=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical1|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration1_Name8=OutputConfigurationParameter8
Configuration1_Item8=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical5|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration1_Name9=OutputConfigurationParameter9
Configuration1_Item9=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical13|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration1_Name10=OutputConfigurationParameter10
Configuration1_Item10=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical14|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration1_Name11=OutputConfigurationParameter11
Configuration1_Item11=IncludeBottomLayerComponents=True|IncludeMultiLayerComponents=True|IncludeTopLayerComponents=False|Index=1|Mirror=True|Name=Bottom Assembly Drawing|PadNumberFontSize=14|Record=PcbPrintOut|ShowHoles=False|ShowPadNets=False|ShowPadNumbers=False|SubstituteFonts=True
Configuration1_Name12=OutputConfigurationParameter12
Configuration1_Item12=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical7|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration1_Name13=OutputConfigurationParameter13
Configuration1_Item13=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Hidden|FFill=Hidden|FPad=Hidden|FRegion=Hidden|FText=Hidden|FTrack=Hidden|FVia=Hidden|Layer=BottomLayer|Polygon=Hidden|PrintOutIndex=1|Record=PcbPrintLayer
Configuration1_Name14=OutputConfigurationParameter14
Configuration1_Item14=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=BottomOverlay|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration1_Name15=OutputConfigurationParameter15
Configuration1_Item15=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Hidden|Layer=MultiLayer|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration1_Name16=OutputConfigurationParameter16
Configuration1_Item16=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical1|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration1_Name17=OutputConfigurationParameter17
Configuration1_Item17=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical5|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration1_Name18=OutputConfigurationParameter18
Configuration1_Item18=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical13|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration1_Name19=OutputConfigurationParameter19
Configuration1_Item19=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical14|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration1_Name20=OutputConfigurationParameter20
Configuration1_Item20=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical16|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
OutputType2=PCB 3D Print
OutputName2=PCB 3D Top
OutputCategory2=Documentation
OutputDocumentPath2=
OutputVariantName2=
OutputEnabled2=1
OutputEnabled2_OutputMedium1=0
OutputEnabled2_OutputMedium2=2
OutputEnabled2_OutputMedium3=0
OutputEnabled2_OutputMedium4=0
OutputDefault2=0
PageOptions2=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=9.57|XCorrection=1.00|YCorrection=1.00|PrintKind=0|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
Configuration2_Name1=OutputConfigurationParameter1
Configuration2_Item1=Record=Pcb3DPrintView|ResX=300|ResY=300|ViewX=14173229|ViewY=14173230|LookAtX=31403926|LookAtY=26533924|LookAtZ=-1000|QuatX=0|QuatY=0|QuatZ=0|QuatW=1|Zoom=4.90361053902321E-5|UnitsPercent=True|UnitsDPI=True|LockResAspect=True|ViewConfigType=.config_3d|CustomCamera=False|ViewFromTop=True|ViewConfig=RECORD\3Board\2CFGALL.CONFIGURATIONKIND\33\2CFGALL.CONFIGURATIONDESC\3Altium%203D%20NB%20Black%20Configuration\2CFG3D.POSITIVETOPSOLDERMASK\3TRUE\2CFG3D.POSITIVEBOTTOMSOLDERMASK\3TRUE\2CFG3D.SHOWCOMPONENTBODIES\3SYSTEM\2CFG3D.SHOWCOMPONENTSTEPMODELS\3SYSTEM\2CFG3D.COMPONENTMODELPREFERENCE\30\2CFG3D.SHOWCOMPONENTSNAPMARKERS\3TRUE\2CFG3D.SHOWCOMPONENTAXES\3TRUE\2CFG3D.SHOWBOARDCORE\3TRUE\2CFG3D.SHOWBOARDPREPREG\3TRUE\2CFG3D.SHOWTOPSILKSCREEN\3TRUE\2CFG3D.SHOWBOTSILKSCREEN\3TRUE\2CFG3D.SHOWORIGINMARKER\3TRUE\2CFG3D.EYEDIST\32000\2CFG3D.SHOWCUTOUTS\3TRUE\2CFG3D.SHOWROUTETOOLPATH\3TRUE\2CFG3D.SHOWROOMS3D\3FALSE\2CFG3D.USESYSCOLORSFOR3D\3FALSE\2CFG3D.WORKSPACECOLOR\311840160\2CFG3D.BOARDCORECOLOR\313491161\2CFG3D.BOARDPREPREGCOLOR\30\2CFG3D.TOPSOLDERMASKCOLOR\30\2CFG3D.BOTSOLDERMASKCOLOR\30\2CFG3D.COPPERCOLOR\33323360\2CFG3D.TOPSILKSCREENCOLOR\315461355\2CFG3D.BOTSILKSCREENCOLOR\315461355\2CFG3D.WORKSPACELUMINANCEVARIATION\330\2CFG3D.WORKSPACECOLOROPACITY\31.000000\2CFG3D.BOARDCORECOLOROPACITY\30.820000\2CFG3D.BOARDPREPREGCOLOROPACITY\30.500000\2CFG3D.TOPSOLDERMASKCOLOROPACITY\30.900000\2CFG3D.BOTSOLDERMASKCOLOROPACITY\30.900000\2CFG3D.COPPERCOLOROPACITY\31.000000\2CFG3D.TOPSILKSCREENCOLOROPACITY\31.000000\2CFG3D.BOTSILKSCREENCOLOROPACITY\31.000000\2CFG3D.BOARDTHICKNESSSCALING\31.000000\2CFG3D.SHOWMECHANICALLAYERS\3FALSE\2CFG3D.MECHANICALLAYERSOPACITY\31.000000
OutputType3=PCB 3D Print
OutputName3=PCB 3D Bottom
OutputCategory3=Documentation
OutputDocumentPath3=
OutputVariantName3=
OutputEnabled3=1
OutputEnabled3_OutputMedium1=0
OutputEnabled3_OutputMedium2=3
OutputEnabled3_OutputMedium3=0
OutputEnabled3_OutputMedium4=0
OutputDefault3=0
PageOptions3=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=9.57|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
Configuration3_Name1=OutputConfigurationParameter1
Configuration3_Item1=Record=Pcb3DPrintView|ResX=300|ResY=300|ViewX=14173229|ViewY=14173230|LookAtX=31403926|LookAtY=26533924|LookAtZ=-1000|QuatX=0|QuatY=0|QuatZ=0|QuatW=1|Zoom=4.90361053902321E-5|UnitsPercent=True|UnitsDPI=True|LockResAspect=True|ViewConfigType=.config_3d|CustomCamera=False|ViewFromTop=False|ViewConfig=RECORD\3Board\2CFGALL.CONFIGURATIONKIND\33\2CFGALL.CONFIGURATIONDESC\3Altium%203D%20NB%20Black%20Configuration\2CFG3D.POSITIVETOPSOLDERMASK\3TRUE\2CFG3D.POSITIVEBOTTOMSOLDERMASK\3TRUE\2CFG3D.SHOWCOMPONENTBODIES\3SYSTEM\2CFG3D.SHOWCOMPONENTSTEPMODELS\3SYSTEM\2CFG3D.COMPONENTMODELPREFERENCE\30\2CFG3D.SHOWCOMPONENTSNAPMARKERS\3TRUE\2CFG3D.SHOWCOMPONENTAXES\3TRUE\2CFG3D.SHOWBOARDCORE\3TRUE\2CFG3D.SHOWBOARDPREPREG\3TRUE\2CFG3D.SHOWTOPSILKSCREEN\3TRUE\2CFG3D.SHOWBOTSILKSCREEN\3TRUE\2CFG3D.SHOWORIGINMARKER\3TRUE\2CFG3D.EYEDIST\32000\2CFG3D.SHOWCUTOUTS\3TRUE\2CFG3D.SHOWROUTETOOLPATH\3TRUE\2CFG3D.SHOWROOMS3D\3FALSE\2CFG3D.USESYSCOLORSFOR3D\3FALSE\2CFG3D.WORKSPACECOLOR\311840160\2CFG3D.BOARDCORECOLOR\313491161\2CFG3D.BOARDPREPREGCOLOR\30\2CFG3D.TOPSOLDERMASKCOLOR\30\2CFG3D.BOTSOLDERMASKCOLOR\30\2CFG3D.COPPERCOLOR\33323360\2CFG3D.TOPSILKSCREENCOLOR\315461355\2CFG3D.BOTSILKSCREENCOLOR\315461355\2CFG3D.WORKSPACELUMINANCEVARIATION\330\2CFG3D.WORKSPACECOLOROPACITY\31.000000\2CFG3D.BOARDCORECOLOROPACITY\30.820000\2CFG3D.BOARDPREPREGCOLOROPACITY\30.500000\2CFG3D.TOPSOLDERMASKCOLOROPACITY\30.900000\2CFG3D.BOTSOLDERMASKCOLOROPACITY\30.900000\2CFG3D.COPPERCOLOROPACITY\31.000000\2CFG3D.TOPSILKSCREENCOLOROPACITY\31.000000\2CFG3D.BOTSILKSCREENCOLOROPACITY\31.000000\2CFG3D.BOARDTHICKNESSSCALING\31.000000\2CFG3D.SHOWMECHANICALLAYERS\3FALSE\2CFG3D.MECHANICALLAYERSOPACITY\31.000000
[PublishSettings]
OutputFilePath2=C:\Users\David\Documents\OP-WIP\trunk\hardware\production\OpenPilot Atom\Project Outputs for OpenPilot Atom\..\Assembly\OpenPilot Atom Assembly.PDF
ReleaseManaged2=1
OutputBasePath2=Project Outputs for OpenPilot Atom
OutputPathMedia2=..\Assembly
OutputPathOutputer2=[Output Type]
OutputFileName2=OpenPilot Atom Assembly.PDF
OpenOutput2=1
PromptOverwrite2=1
PublishMethod2=0
ZoomLevel2=50
FitSCHPrintSizeToDoc2=1
FitPCBPrintSizeToDoc2=1
GenerateNetsInfo2=1
MarkPins2=1
MarkNetLabels2=1
MarkPortsId2=1
GenerateTOC=1
OutputFilePath3=C:\Users\David\Documents\OP-WIP\trunk\hardware\production\OpenPilot Atom\Project Outputs for OpenPilot Atom\
ReleaseManaged3=1
OutputBasePath3=Project Outputs for OpenPilot Atom
OutputPathMedia3=
OutputPathOutputer3=[Output Type]
OutputFileName3=
OpenOutput3=1
OutputFilePath4=C:\Users\David\Documents\OP-WIP\trunk\hardware\production\OpenPilot Atom\Project Outputs for OpenPilot Atom\
ReleaseManaged4=1
OutputBasePath4=Project Outputs for OpenPilot Atom
OutputPathMedia4=
OutputPathOutputer4=[Output Type]
OutputFileName4=
OpenOutput4=1
PromptOverwrite4=1
PublishMethod4=5
ZoomLevel4=50
FitSCHPrintSizeToDoc4=1
FitPCBPrintSizeToDoc4=1
GenerateNetsInfo4=1
MarkPins4=1
MarkNetLabels4=1
MarkPortsId4=1
MediaFormat4=Windows Media file (*.wmv,*.wma,*.asf)
FixedDimensions4=1
Width4=352
Height4=288
MultiFile4=0
FramesPerSecond4=25
FramesPerSecondDenom4=1
AviPixelFormat4=7
AviCompression4=MP42 MS-MPEG4 V2
AviQuality4=100
FFmpegVideoCodecId4=13
FFmpegPixelFormat4=0
FFmpegQuality4=80
WmvVideoCodecName4=Windows Media Video V7
WmvQuality4=80
[GeneratedFilesSettings]
RelativeOutputPath2=C:\Users\David\Documents\OP-WIP\trunk\hardware\production\OpenPilot Atom\Project Outputs for OpenPilot Atom\..\Assembly\OpenPilot Atom Assembly.PDF
OpenOutputs2=1
RelativeOutputPath3=C:\Users\David\Documents\OP-WIP\trunk\hardware\production\OpenPilot Atom\Project Outputs for OpenPilot Atom\
OpenOutputs3=1
AddToProject3=1
TimestampFolder3=0
UseOutputName3=0
OpenODBOutput3=0
OpenGerberOutput3=0
OpenNCDrillOutput3=0
OpenIPCOutput3=0
EnableReload3=0
RelativeOutputPath4=C:\Users\David\Documents\OP-WIP\trunk\hardware\production\OpenPilot Atom\Project Outputs for OpenPilot Atom\
OpenOutputs4=1

View File

@ -0,0 +1,1160 @@
[Design]
Version=1.0
HierarchyMode=0
ChannelRoomNamingStyle=0
ReleasesFolder=
ReleaseVaultGUID=
ReleaseVaultName=
ChannelDesignatorFormatString=$Component_$RoomName
ChannelRoomLevelSeperator=_
OpenOutputs=1
ArchiveProject=0
TimestampOutput=0
SeparateFolders=0
TemplateLocationPath=
PinSwapBy_Netlabel=1
PinSwapBy_Pin=1
AllowPortNetNames=0
AllowSheetEntryNetNames=1
AppendSheetNumberToLocalNets=0
NetlistSinglePinNets=0
DefaultConfiguration=Default Configuration
UserID=0xFFFFFFFF
DefaultPcbProtel=1
DefaultPcbPcad=0
ReorderDocumentsOnCompile=1
NameNetsHierarchically=0
PowerPortNamesTakePriority=0
PushECOToAnnotationFile=1
DItemRevisionGUID=
ReportSuppressedErrorsInMessages=0
OutputPath=
LogFolderPath=
ManagedProjectGUID=
[Preferences]
PrefsVaultGUID=
PrefsRevisionGUID=
[Document1]
DocumentPath=OpenPilot Atom.SchDoc
AnnotationEnabled=1
AnnotateStartValue=1
AnnotationIndexControlEnabled=0
AnnotateSuffix=
AnnotateScope=All
AnnotateOrder=0
DoLibraryUpdate=1
DoDatabaseUpdate=1
ClassGenCCAutoEnabled=1
ClassGenCCAutoRoomEnabled=0
ClassGenNCAutoScope=None
DItemRevisionGUID=
GenerateClassCluster=0
DocumentUniqueId=FWUXSAGW
[Document2]
DocumentPath=OpenPilot Atom.PcbDoc
AnnotationEnabled=1
AnnotateStartValue=1
AnnotationIndexControlEnabled=0
AnnotateSuffix=
AnnotateScope=All
AnnotateOrder=-1
DoLibraryUpdate=1
DoDatabaseUpdate=1
ClassGenCCAutoEnabled=1
ClassGenCCAutoRoomEnabled=1
ClassGenNCAutoScope=None
DItemRevisionGUID=
GenerateClassCluster=0
DocumentUniqueId=CPDAMJJA
[Document3]
DocumentPath=Assembly.OutJob
AnnotationEnabled=1
AnnotateStartValue=1
AnnotationIndexControlEnabled=0
AnnotateSuffix=
AnnotateScope=All
AnnotateOrder=-1
DoLibraryUpdate=1
DoDatabaseUpdate=1
ClassGenCCAutoEnabled=1
ClassGenCCAutoRoomEnabled=1
ClassGenNCAutoScope=None
DItemRevisionGUID=
GenerateClassCluster=0
DocumentUniqueId=
[SearchPath1]
Path=..\..\..\..\Program Files (x86)\Altium Designer Summer 09\Library\*.*
IncludeSubFolders=1
[Configuration1]
Name=Default Configuration
ParameterCount=0
ConstraintFileCount=0
ReleaseItemId=
CurrentRevision=
Variant=[No Variations]
GenerateBOM=0
OutputJobsCount=0
[Generic_SmartPDF]
AutoOpenFile=-1
AutoOpenOutJob=-1
[Generic_SmartPDFSettings]
ProjectMode=0
ZoomPrecision=50
AddNetsInformation=-1
AddNetPins=-1
AddNetNetLabels=-1
AddNetPorts=-1
ExportBOM=0
TemplateFilename=
TemplateStoreRelative=-1
PCB_PrintColor=0
SCH_PrintColor=0
SCH_ShowNoErc=0
SCH_ShowParameter=0
SCH_ShowProbes=0
SCH_ShowBlankets=0
OutputFileName=CopterControl.SchDoc=C:\Users\David\Documents\SVN\WIP\trunk\hardware\production\CopterControl\CopterControl Schematic.pdf
SCH_ExpandLogicalToPhysical=0
SCH_VariantName=[No Variations]
SCH_ExpandComponentDesignators=-1
SCH_ExpandNetlabels=0
SCH_ExpandPorts=0
SCH_ExpandSheetNumber=0
SCH_ExpandDocumentNumber=0
SCH_HasExpandLogicalToPhysicalSheets=-1
SaveSettingsToOutJob=0
SCH_NoERCSymbolsToShow="Thin Cross","Thick Cross","Small Cross",Checkbox,Triangle
SCH_ShowNote=-1
SCH_ShowNoteCollapsed=-1
[Generic_EDE]
OutputDir=
[OutputGroup1]
Name=Netlist Outputs
Description=
TargetPrinter=Microsoft XPS Document Writer
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
OutputType1=SIMetrixNetlist
OutputName1=SIMetrix
OutputDocumentPath1=
OutputVariantName1=
OutputDefault1=0
OutputType2=SIMPLISNetlist
OutputName2=SIMPLIS
OutputDocumentPath2=
OutputVariantName2=
OutputDefault2=0
OutputType3=XSpiceNetlist
OutputName3=XSpice Netlist
OutputDocumentPath3=
OutputVariantName3=
OutputDefault3=0
OutputType4=PCADNetlist
OutputName4=PCAD Netlist
OutputDocumentPath4=
OutputVariantName4=
OutputDefault4=0
OutputType5=Verilog
OutputName5=Verilog File
OutputDocumentPath5=
OutputVariantName5=
OutputDefault5=0
OutputType6=VHDL
OutputName6=VHDL File
OutputDocumentPath6=
OutputVariantName6=
OutputDefault6=0
[OutputGroup2]
Name=Simulator Outputs
Description=
TargetPrinter=Microsoft XPS Document Writer
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
OutputType1=AdvSimNetlist
OutputName1=Mixed Sim
OutputDocumentPath1=
OutputVariantName1=
OutputDefault1=0
OutputType2=SIMetrixSimulation
OutputName2=SIMetrix
OutputDocumentPath2=
OutputVariantName2=
OutputDefault2=0
OutputType3=SIMPLISSimulation
OutputName3=SIMPLIS
OutputDocumentPath3=
OutputVariantName3=
OutputDefault3=0
[OutputGroup3]
Name=Documentation Outputs
Description=
TargetPrinter=Virtual Printer
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
OutputType1=Composite
OutputName1=Composite Drawing
OutputDocumentPath1=C:\Users\David\Documents\SVN\OP-WIP\trunk\hardware\production\CopterControl\CopterControl.PcbDoc
OutputVariantName1=
OutputDefault1=0
PageOptions1=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=0|PaperKind=A4
Configuration1_Name1=OutputConfigurationParameter1
Configuration1_Item1=PrintArea=DesignExtent|PrintAreaLowerLeftCornerX=0|PrintAreaLowerLeftCornerY=0|PrintAreaUpperRightCornerX=0|PrintAreaUpperRightCornerY=0|Record=PcbPrintView
Configuration1_Name2=OutputConfigurationParameter2
Configuration1_Item2=IncludeBottomLayerComponents=True|IncludeMultiLayerComponents=True|IncludeTopLayerComponents=True|Index=0|Mirror=False|Name=Multilayer Composite Print|PadNumberFontSize=14|Record=PcbPrintOut|ShowHoles=False|ShowPadNets=False|ShowPadNumbers=False|SubstituteFonts=False
Configuration1_Name3=OutputConfigurationParameter3
Configuration1_Item3=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=TopOverlay|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration1_Name4=OutputConfigurationParameter4
Configuration1_Item4=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=BottomOverlay|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration1_Name5=OutputConfigurationParameter5
Configuration1_Item5=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=TopLayer|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration1_Name6=OutputConfigurationParameter6
Configuration1_Item6=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=MidLayer1|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration1_Name7=OutputConfigurationParameter7
Configuration1_Item7=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=BottomLayer|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration1_Name8=OutputConfigurationParameter8
Configuration1_Item8=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical1|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration1_Name9=OutputConfigurationParameter9
Configuration1_Item9=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical5|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration1_Name10=OutputConfigurationParameter10
Configuration1_Item10=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical6|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration1_Name11=OutputConfigurationParameter11
Configuration1_Item11=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical7|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration1_Name12=OutputConfigurationParameter12
Configuration1_Item12=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical13|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration1_Name13=OutputConfigurationParameter13
Configuration1_Item13=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical15|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration1_Name14=OutputConfigurationParameter14
Configuration1_Item14=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=MultiLayer|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
OutputType2=PCB 3D Print
OutputName2=PCB 3D Prints
OutputDocumentPath2=
OutputVariantName2=[No Variations]
OutputDefault2=0
PageOptions2=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4
OutputType3=PCB Print
OutputName3=PCB Prints
OutputDocumentPath3=
OutputVariantName3=
OutputDefault3=0
PageOptions3=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4
OutputType4=Schematic Print
OutputName4=Schematic Prints
OutputDocumentPath4=
OutputVariantName4=
OutputDefault4=0
PageOptions4=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4
OutputType5=SimView Print
OutputName5=SimView Prints
OutputDocumentPath5=
OutputVariantName5=
OutputDefault5=0
PageOptions5=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4
OutputType6=Wave Print
OutputName6=Wave Prints
OutputDocumentPath6=
OutputVariantName6=
OutputDefault6=0
PageOptions6=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4
OutputType7=WaveSim Print
OutputName7=WaveSim Prints
OutputDocumentPath7=
OutputVariantName7=
OutputDefault7=0
PageOptions7=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4
OutputType8=PCB 3D Video
OutputName8=PCB 3D Video
OutputDocumentPath8=
OutputVariantName8=[No Variations]
OutputDefault8=0
PageOptions8=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4
OutputType9=Report Print
OutputName9=Report Prints
OutputDocumentPath9=
OutputVariantName9=
OutputDefault9=0
PageOptions9=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4
OutputType10=PCBLIB Print
OutputName10=PCBLIB Prints
OutputDocumentPath10=
OutputVariantName10=
OutputDefault10=0
PageOptions10=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4
OutputType11=Assembler Source Print
OutputName11=Assembler Source Prints
OutputDocumentPath11=
OutputVariantName11=
OutputDefault11=0
PageOptions11=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType12=C Source Print
OutputName12=C Source Prints
OutputDocumentPath12=
OutputVariantName12=
OutputDefault12=0
PageOptions12=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType13=C/C++ Header Print
OutputName13=C/C++ Header Prints
OutputDocumentPath13=
OutputVariantName13=
OutputDefault13=0
PageOptions13=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType14=C++ Source Print
OutputName14=C++ Source Prints
OutputDocumentPath14=
OutputVariantName14=
OutputDefault14=0
PageOptions14=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType15=FSM Print
OutputName15=FSM Prints
OutputDocumentPath15=
OutputVariantName15=
OutputDefault15=0
PageOptions15=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType16=OpenBus Print
OutputName16=OpenBus Prints
OutputDocumentPath16=
OutputVariantName16=
OutputDefault16=0
PageOptions16=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType17=VHDL Print
OutputName17=VHDL Prints
OutputDocumentPath17=
OutputVariantName17=
OutputDefault17=0
PageOptions17=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
[OutputGroup4]
Name=Assembly Outputs
Description=
TargetPrinter=Microsoft XPS Document Writer
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
OutputType1=Test Points For Assembly
OutputName1=Test Point Report
OutputDocumentPath1=
OutputVariantName1=[No Variations]
OutputDefault1=0
OutputType2=Pick Place
OutputName2=Generates pick and place files
OutputDocumentPath2=
OutputVariantName2=[No Variations]
OutputDefault2=0
Configuration2_Name1=OutputConfigurationParameter1
Configuration2_Item1=Record=PickPlaceView|Units=Imperial|GenerateCSVFormat=True|GenerateTextFormat=False
OutputType3=Assembly
OutputName3=Assembly Drawings
OutputDocumentPath3=
OutputVariantName3=[No Variations]
OutputDefault3=0
PageOptions3=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4
[OutputGroup5]
Name=Fabrication Outputs
Description=
TargetPrinter=Microsoft XPS Document Writer
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
OutputType1=ODB
OutputName1=ODB++ Files
OutputDocumentPath1=
OutputVariantName1=[No Variations]
OutputDefault1=0
OutputType2=NC Drill
OutputName2=NC Drill Files
OutputDocumentPath2=
OutputVariantName2=
OutputDefault2=0
Configuration2_Name1=OutputConfigurationParameter1
Configuration2_Item1=BoardEdgeRoutToolDia=2000000|GenerateBoardEdgeRout=False|GenerateDrilledSlotsG85=False|GenerateEIADrillFile=False|GenerateSeparatePlatedNonPlatedFiles=False|NumberOfDecimals=5|NumberOfUnits=2|OptimizeChangeLocationCommands=True|OriginPosition=Relative|Record=DrillView|Units=Imperial|ZeroesMode=SuppressTrailingZeroes
OutputType3=Plane
OutputName3=Power-Plane Prints
OutputDocumentPath3=
OutputVariantName3=
OutputDefault3=0
PageOptions3=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4
OutputType4=Mask
OutputName4=Solder/Paste Mask Prints
OutputDocumentPath4=
OutputVariantName4=
OutputDefault4=0
PageOptions4=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4
OutputType5=Drill
OutputName5=Drill Drawing/Guides
OutputDocumentPath5=
OutputVariantName5=
OutputDefault5=0
PageOptions5=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=9.20|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4
Configuration5_Name1=OutputConfigurationParameter1
Configuration5_Item1=PrintArea=DesignExtent|PrintAreaLowerLeftCornerX=0|PrintAreaLowerLeftCornerY=0|PrintAreaUpperRightCornerX=0|PrintAreaUpperRightCornerY=0|Record=PcbPrintView
Configuration5_Name2=OutputConfigurationParameter2
Configuration5_Item2=IncludeBottomLayerComponents=True|IncludeMultiLayerComponents=True|IncludeTopLayerComponents=True|Index=0|Mirror=False|Name=Drill Drawing For (Bottom Layer,Top Layer)|PadNumberFontSize=14|Record=PcbPrintOut|ShowHoles=False|ShowPadNets=False|ShowPadNumbers=False|SubstituteFonts=False
Configuration5_Name3=OutputConfigurationParameter3
Configuration5_Item3=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=BottomLayer|DLayer2=TopLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=DrillDrawing|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration5_Name4=OutputConfigurationParameter4
Configuration5_Item4=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical1|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration5_Name5=OutputConfigurationParameter5
Configuration5_Item5=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical5|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration5_Name6=OutputConfigurationParameter6
Configuration5_Item6=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical6|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration5_Name7=OutputConfigurationParameter7
Configuration5_Item7=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical7|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration5_Name8=OutputConfigurationParameter8
Configuration5_Item8=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical13|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration5_Name9=OutputConfigurationParameter9
Configuration5_Item9=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical15|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration5_Name10=OutputConfigurationParameter10
Configuration5_Item10=IncludeBottomLayerComponents=True|IncludeMultiLayerComponents=True|IncludeTopLayerComponents=True|Index=1|Mirror=False|Name=Drill Guide For (Bottom Layer,Top Layer)|PadNumberFontSize=14|Record=PcbPrintOut|ShowHoles=False|ShowPadNets=False|ShowPadNumbers=False|SubstituteFonts=False
Configuration5_Name11=OutputConfigurationParameter11
Configuration5_Item11=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=BottomLayer|DLayer2=TopLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=DrillGuide|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration5_Name12=OutputConfigurationParameter12
Configuration5_Item12=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical1|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration5_Name13=OutputConfigurationParameter13
Configuration5_Item13=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical5|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration5_Name14=OutputConfigurationParameter14
Configuration5_Item14=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical6|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration5_Name15=OutputConfigurationParameter15
Configuration5_Item15=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical7|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration5_Name16=OutputConfigurationParameter16
Configuration5_Item16=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical13|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration5_Name17=OutputConfigurationParameter17
Configuration5_Item17=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical15|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
OutputType6=CompositeDrill
OutputName6=Composite Drill Drawing
OutputDocumentPath6=
OutputVariantName6=
OutputDefault6=0
PageOptions6=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4
OutputType7=Final
OutputName7=Final Artwork Prints
OutputDocumentPath7=
OutputVariantName7=[No Variations]
OutputDefault7=0
PageOptions7=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4
OutputType8=Test Points
OutputName8=Test Point Report
OutputDocumentPath8=
OutputVariantName8=
OutputDefault8=0
OutputType9=Gerber
OutputName9=Gerber Files
OutputDocumentPath9=
OutputVariantName9=[No Variations]
OutputDefault9=0
Configuration9_Name1=OutputConfigurationParameter1
Configuration9_Item1=AddToAllPlots.Set=SerializeLayerHash.Version~2,ClassName~TLayerToBoolean|CentrePlots=False|DrillDrawingSymbol=GraphicsSymbol|DrillDrawingSymbolSize=500000|EmbeddedApertures=True|FilmBorderSize=10000000|FilmXSize=200000000|FilmYSize=160000000|FlashAllFills=False|FlashPadShapes=True|G54OnApertureChange=False|GenerateDRCRulesFile=True|GenerateReliefShapes=True|GerberUnit=Imperial|IncludeUnconnectedMidLayerPads=False|LeadingAndTrailingZeroesMode=SuppressLeadingZeroes|MaxApertureSize=2500000|MinusApertureTolerance=50|Mirror.Set=SerializeLayerHash.Version~2,ClassName~TLayerToBoolean|MirrorDrillDrawingPlots=False|MirrorDrillGuidePlots=False|NumberOfDecimals=5|OptimizeChangeLocationCommands=True|OriginPosition=Relative|Panelize=False|Plot.Set=SerializeLayerHash.Version~2,ClassName~TLayerToBoolean,16973830~1,16973832~1,16973834~1,16777217~1,16777218~1,16777219~1,16842751~1,16973835~1,16973833~1,16973831~1,16908294~1,16908295~1,16973837~1,16973848~1,16973849~1|PlotPositivePlaneLayers=False|PlotUsedDrillDrawingLayerPairs=True|PlotUsedDrillGuideLayerPairs=True|PlusApertureTolerance=50|Record=GerberView|SoftwareArcs=False|Sorted=False
OutputType10=Board Stack Report
OutputName10=Report Board Stack
OutputDocumentPath10=
OutputVariantName10=
OutputDefault10=0
PageOptions10=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType11=Gerber X2
OutputName11=Gerber X2 Files
OutputDocumentPath11=
OutputVariantName11=
OutputDefault11=0
OutputType12=IPC2581
OutputName12=IPC-2581 Files
OutputDocumentPath12=
OutputVariantName12=
OutputDefault12=0
[OutputGroup6]
Name=Report Outputs
Description=
TargetPrinter=Microsoft XPS Document Writer
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
OutputType1=ComponentCrossReference
OutputName1=Component Cross Reference Report
OutputDocumentPath1=
OutputVariantName1=[No Variations]
OutputDefault1=0
OutputType2=ReportHierarchy
OutputName2=Report Project Hierarchy
OutputDocumentPath2=
OutputVariantName2=[No Variations]
OutputDefault2=0
OutputType3=SinglePinNetReporter
OutputName3=Report Single Pin Nets
OutputDocumentPath3=
OutputVariantName3=[No Variations]
OutputDefault3=0
OutputType4=SimpleBOM
OutputName4=Simple BOM
OutputDocumentPath4=
OutputVariantName4=[No Variations]
OutputDefault4=0
OutputType5=Script
OutputName5=Script Output
OutputDocumentPath5=
OutputVariantName5=[No Variations]
OutputDefault5=0
OutputType6=BOM_PartType
OutputName6=Bill of Materials
OutputDocumentPath6=
OutputVariantName6=[No Variations]
OutputDefault6=0
PageOptions6=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4
Configuration6_Name1=Filter
Configuration6_Item1=545046300E5446696C74657257726170706572000D46696C7465722E416374697665090F46696C7465722E43726974657269610A04000000000000000000
Configuration6_Name2=General
Configuration6_Item2=OpenExported=True|AddToProject=False|ForceFit=False|NotFitted=False|Database=False|IncludePCBData=False|IncludeVaultData=False|ShowExportOptions=True|TemplateFilename=..\Altium\BOM OpenPilot.xlt|BatchMode=5|FormWidth=1401|FormHeight=754|SupplierProdQty=1|SupplierAutoQty=True|SupplierUseCachedPricing=True|SupplierCurrency=<none>
Configuration6_Name3=GroupOrder
Configuration6_Item3=Supplier Part Number 1=True
Configuration6_Name4=OutputConfigurationParameter1
Configuration6_Item4=Record=BOMPrintView|ShowNoERC=True|ShowParamSet=True|ShowProbe=True|ShowBlanket=True|ExpandDesignator=True|ExpandNetLabel=False|ExpandPort=False|ExpandSheetNum=False|ExpandDocNum=False
Configuration6_Name5=PCBDocument
Configuration6_Item5=
Configuration6_Name6=SortOrder
Configuration6_Item6=Description=Up
Configuration6_Name7=VisibleOrder
Configuration6_Item7=Description=113|Comment=77|Footprint=59|Value=40|Designator=56|Quantity=37|Supplier Part Number 1=174|Supplier Order Qty 1=30|Supplier Stock 1=38|Supplier Unit Price 1=29|Supplier Subtotal 1=30|Supplier 1=23|Manufacturer 1=32|Manufacturer Part Number 1=20
[OutputGroup7]
Name=Other Outputs
Description=
TargetPrinter=Microsoft XPS Document Writer
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
OutputType1=Text Print
OutputName1=Text Print
OutputDocumentPath1=
OutputVariantName1=
OutputDefault1=0
PageOptions1=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4
OutputType2=Text Print
OutputName2=Text Print
OutputDocumentPath2=
OutputVariantName2=
OutputDefault2=0
PageOptions2=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType3=Text Print
OutputName3=Text Print
OutputDocumentPath3=
OutputVariantName3=
OutputDefault3=0
PageOptions3=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType4=Text Print
OutputName4=Text Print
OutputDocumentPath4=
OutputVariantName4=
OutputDefault4=0
PageOptions4=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType5=Text Print
OutputName5=Text Print
OutputDocumentPath5=
OutputVariantName5=
OutputDefault5=0
PageOptions5=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType6=Text Print
OutputName6=Text Print
OutputDocumentPath6=
OutputVariantName6=
OutputDefault6=0
PageOptions6=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType7=Text Print
OutputName7=Text Print
OutputDocumentPath7=
OutputVariantName7=
OutputDefault7=0
PageOptions7=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType8=Text Print
OutputName8=Text Print
OutputDocumentPath8=
OutputVariantName8=
OutputDefault8=0
PageOptions8=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType9=Text Print
OutputName9=Text Print
OutputDocumentPath9=
OutputVariantName9=
OutputDefault9=0
PageOptions9=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType10=Text Print
OutputName10=Text Print
OutputDocumentPath10=
OutputVariantName10=
OutputDefault10=0
PageOptions10=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType11=Text Print
OutputName11=Text Print
OutputDocumentPath11=
OutputVariantName11=
OutputDefault11=0
PageOptions11=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType12=Text Print
OutputName12=Text Print
OutputDocumentPath12=
OutputVariantName12=
OutputDefault12=0
PageOptions12=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType13=Text Print
OutputName13=Text Print
OutputDocumentPath13=
OutputVariantName13=
OutputDefault13=0
PageOptions13=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType14=Text Print
OutputName14=Text Print
OutputDocumentPath14=
OutputVariantName14=
OutputDefault14=0
PageOptions14=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType15=Text Print
OutputName15=Text Print
OutputDocumentPath15=
OutputVariantName15=
OutputDefault15=0
PageOptions15=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType16=Text Print
OutputName16=Text Print
OutputDocumentPath16=
OutputVariantName16=
OutputDefault16=0
PageOptions16=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType17=Text Print
OutputName17=Text Print
OutputDocumentPath17=
OutputVariantName17=
OutputDefault17=0
PageOptions17=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType18=Text Print
OutputName18=Text Print
OutputDocumentPath18=
OutputVariantName18=
OutputDefault18=0
PageOptions18=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType19=Text Print
OutputName19=Text Print
OutputDocumentPath19=
OutputVariantName19=
OutputDefault19=0
PageOptions19=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType20=Text Print
OutputName20=Text Print
OutputDocumentPath20=
OutputVariantName20=
OutputDefault20=0
PageOptions20=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType21=Text Print
OutputName21=Text Print
OutputDocumentPath21=
OutputVariantName21=
OutputDefault21=0
PageOptions21=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType22=Text Print
OutputName22=Text Print
OutputDocumentPath22=
OutputVariantName22=
OutputDefault22=0
PageOptions22=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType23=Text Print
OutputName23=Text Print
OutputDocumentPath23=
OutputVariantName23=
OutputDefault23=0
PageOptions23=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType24=Text Print
OutputName24=Text Print
OutputDocumentPath24=
OutputVariantName24=
OutputDefault24=0
PageOptions24=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType25=Text Print
OutputName25=Text Print
OutputDocumentPath25=
OutputVariantName25=
OutputDefault25=0
PageOptions25=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType26=Text Print
OutputName26=Text Print
OutputDocumentPath26=
OutputVariantName26=
OutputDefault26=0
PageOptions26=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType27=Text Print
OutputName27=Text Print
OutputDocumentPath27=
OutputVariantName27=
OutputDefault27=0
PageOptions27=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType28=Text Print
OutputName28=Text Print
OutputDocumentPath28=
OutputVariantName28=
OutputDefault28=0
PageOptions28=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
OutputType29=Text Print
OutputName29=Text Print
OutputDocumentPath29=
OutputVariantName29=
OutputDefault29=0
PageOptions29=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
[OutputGroup8]
Name=Validation Outputs
Description=
TargetPrinter=Microsoft XPS Document Writer
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
OutputType1=Design Rules Check
OutputName1=Design Rules Check
OutputDocumentPath1=
OutputVariantName1=
OutputDefault1=0
PageOptions1=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4
OutputType2=Electrical Rules Check
OutputName2=Electrical Rules Check
OutputDocumentPath2=
OutputVariantName2=
OutputDefault2=0
PageOptions2=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4
OutputType3=Differences Report
OutputName3=Differences Report
OutputDocumentPath3=
OutputVariantName3=
OutputDefault3=0
PageOptions3=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4
OutputType4=Footprint Comparison Report
OutputName4=Footprint Comparison Report
OutputDocumentPath4=
OutputVariantName4=
OutputDefault4=0
OutputType5=Configuration compliance
OutputName5=Environment configuration compliance check
OutputDocumentPath5=
OutputVariantName5=
OutputDefault5=0
[OutputGroup9]
Name=Export Outputs
Description=
TargetPrinter=Microsoft XPS Document Writer
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
OutputType1=ExportSTEP
OutputName1=Export STEP
OutputDocumentPath1=
OutputVariantName1=[No Variations]
OutputDefault1=0
OutputType2=AutoCAD dwg/dxf PCB
OutputName2=AutoCAD dwg/dxf File PCB
OutputDocumentPath2=
OutputVariantName2=
OutputDefault2=0
OutputType3=ExportIDF
OutputName3=Export IDF
OutputDocumentPath3=
OutputVariantName3=
OutputDefault3=0
OutputType4=AutoCAD dwg/dxf Schematic
OutputName4=AutoCAD dwg/dxf File Schematic
OutputDocumentPath4=
OutputVariantName4=
OutputDefault4=0
[Modification Levels]
Type1=1
Type2=1
Type3=1
Type4=1
Type5=1
Type6=1
Type7=1
Type8=1
Type9=1
Type10=1
Type11=1
Type12=1
Type13=1
Type14=1
Type15=1
Type16=1
Type17=1
Type18=1
Type19=1
Type20=1
Type21=1
Type22=1
Type23=1
Type24=1
Type25=1
Type26=1
Type27=1
Type28=1
Type29=1
Type30=1
Type31=1
Type32=1
Type33=1
Type34=1
Type35=1
Type36=1
Type37=1
Type38=1
Type39=1
Type40=1
Type41=1
Type42=1
Type43=1
Type44=1
Type45=1
Type46=1
Type47=1
Type48=1
Type49=1
Type50=1
Type51=1
Type52=1
Type53=1
Type54=1
Type55=1
Type56=1
Type57=1
Type58=1
Type59=1
Type60=1
Type61=1
Type62=1
Type63=1
Type64=1
Type65=1
Type66=1
Type67=1
Type68=1
Type69=1
Type70=1
Type71=1
Type72=1
Type73=1
Type74=1
Type75=1
Type76=1
Type77=1
Type78=1
[Difference Levels]
Type1=1
Type2=1
Type3=1
Type4=1
Type5=1
Type6=1
Type7=1
Type8=1
Type9=1
Type10=1
Type11=1
Type12=1
Type13=1
Type14=1
Type15=1
Type16=1
Type17=1
Type18=1
Type19=1
Type20=1
Type21=1
Type22=1
Type23=1
Type24=1
Type25=1
Type26=1
Type27=1
Type28=1
Type29=1
Type30=1
Type31=1
Type32=1
Type33=1
Type34=1
Type35=1
Type36=1
Type37=1
Type38=1
Type39=1
Type40=1
Type41=1
Type42=1
Type43=1
[Electrical Rules Check]
Type1=1
Type2=1
Type3=2
Type4=1
Type5=2
Type6=2
Type7=1
Type8=1
Type9=1
Type10=1
Type11=2
Type12=2
Type13=2
Type14=1
Type15=1
Type16=1
Type17=1
Type18=1
Type19=1
Type20=1
Type21=1
Type22=1
Type23=1
Type24=1
Type25=2
Type26=2
Type27=2
Type28=1
Type29=1
Type30=1
Type31=1
Type32=2
Type33=2
Type34=2
Type35=1
Type36=2
Type37=1
Type38=2
Type39=2
Type40=2
Type41=0
Type42=2
Type43=1
Type44=1
Type45=2
Type46=1
Type47=2
Type48=2
Type49=1
Type50=2
Type51=1
Type52=1
Type53=1
Type54=1
Type55=1
Type56=2
Type57=1
Type58=1
Type59=0
Type60=1
Type61=2
Type62=2
Type63=1
Type64=0
Type65=2
Type66=3
Type67=2
Type68=2
Type69=1
Type70=2
Type71=2
Type72=2
Type73=2
Type74=1
Type75=2
Type76=1
Type77=1
Type78=1
Type79=1
Type80=2
Type81=3
Type82=3
Type83=3
Type84=3
Type85=3
Type86=2
Type87=2
Type88=2
Type89=1
Type90=1
Type91=3
Type92=3
Type93=2
Type94=2
Type95=2
Type96=2
Type97=2
Type98=0
Type99=1
Type100=2
Type101=1
Type102=2
Type103=2
Type104=1
Type105=2
Type106=2
Type107=2
Type108=2
Type109=1
Type110=0
[ERC Connection Matrix]
L1=NNNNNNNNNNNWNNNWW
L2=NNWNNNNWWWNWNWNWN
L3=NWEENEEEENEWNEEWN
L4=NNENNNWEENNWNENWN
L5=NNNNNNNNNNNNNNNNN
L6=NNENNNNEENNWNENWN
L7=NNEWNNWEENNWNENWN
L8=NWEENEENEEENNEENN
L9=NWEENEEEENEWNEEWW
L10=NWNNNNNENNEWNNEWN
L11=NNENNNNEEENWNENWN
L12=WWWWNWWNWWWNWWWNN
L13=NNNNNNNNNNNWNNNWW
L14=NWEENEEEENEWNEEWW
L15=NNENNNNEEENWNENWW
L16=WWWWNWWNWWWNWWWNW
L17=WNNNNNNNWNNNWWWWN
[Annotate]
SortOrder=3
SortLocation=0
MatchParameter1=Comment
MatchStrictly1=1
MatchParameter2=Library Reference
MatchStrictly2=1
PhysicalNamingFormat=$Component_$RoomName
GlobalIndexSortOrder=3
GlobalIndexSortLocation=0
[PrjClassGen]
CompClassManualEnabled=0
CompClassManualRoomEnabled=0
NetClassAutoBusEnabled=1
NetClassAutoCompEnabled=0
NetClassAutoNamedHarnessEnabled=0
NetClassManualEnabled=1
[LibraryUpdateOptions]
SelectedOnly=0
UpdateVariants=1
PartTypes=0
ComponentLibIdentifierKind0=Library Name And Type
ComponentLibraryIdentifier0=CopterControl.SchLib
ComponentDesignItemID0=CC-STM32F103CBT6
ComponentSymbolReference0=CC-STM32F103CBT6
ComponentUpdate0=1
ComponentIsDeviceSheet0=0
FullReplace=1
UpdateDesignatorLock=1
UpdatePartIDLock=1
PreserveParameterLocations=1
PreserveParameterVisibility=1
DoGraphics=1
DoParameters=1
DoModels=1
AddParameters=0
RemoveParameters=0
AddModels=1
RemoveModels=1
UpdateCurrentModels=1
ParameterName0=Comment
ParameterUpdate0=1
ParameterName1=Component Kind
ParameterUpdate1=1
ParameterName2=ComponentLink1Description
ParameterUpdate2=1
ParameterName3=ComponentLink1URL
ParameterUpdate3=1
ParameterName4=ComponentLink2Description
ParameterUpdate4=1
ParameterName5=ComponentLink2URL
ParameterUpdate5=1
ParameterName6=DatasheetVersion
ParameterUpdate6=1
ParameterName7=Description
ParameterUpdate7=1
ParameterName8=Library Reference
ParameterUpdate8=1
ParameterName9=PackageDescription
ParameterUpdate9=1
ParameterName10=PackageReference
ParameterUpdate10=1
ParameterName11=PackageVersion
ParameterUpdate11=1
ParameterName12=Published
ParameterUpdate12=1
ParameterName13=Publisher
ParameterUpdate13=1
ParameterName14=Supplier 1
ParameterUpdate14=1
ParameterName15=Supplier Part Number 1
ParameterUpdate15=1
ModelTypeGroup0=PCBLIB
ModelTypeUpdate0=1
ModelType0=PCBLIB
ModelName0=LQFP48_L
ModelUpdate0=1
ModelType1=PCBLIB
ModelName1=LQFP48_M
ModelUpdate1=1
ModelType2=PCBLIB
ModelName2=LQFP48_N
ModelUpdate2=1
[DatabaseUpdateOptions]
SelectedOnly=0
UpdateVariants=1
PartTypes=0
[Comparison Options]
ComparisonOptions0=Kind=Net|MinPercent=75|MinMatch=3|ShowMatch=-1|Confirm=-1|UseName=-1|InclAllRules=0
ComparisonOptions1=Kind=Net Class|MinPercent=75|MinMatch=3|ShowMatch=-1|Confirm=-1|UseName=-1|InclAllRules=0
ComparisonOptions2=Kind=Component Class|MinPercent=75|MinMatch=3|ShowMatch=-1|Confirm=-1|UseName=-1|InclAllRules=0
ComparisonOptions3=Kind=Rule|MinPercent=75|MinMatch=3|ShowMatch=-1|Confirm=-1|UseName=-1|InclAllRules=0
ComparisonOptions4=Kind=Differential Pair|MinPercent=50|MinMatch=1|ShowMatch=0|Confirm=0|UseName=0|InclAllRules=0
ComparisonOptions5=Kind=Code Memory|MinPercent=75|MinMatch=3|ShowMatch=-1|Confirm=-1|UseName=-1|InclAllRules=0
[SmartPDF]
PageOptions=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-4|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4
Configuration_Name1=OutputConfigurationParameter1
Configuration_Item1=PrintArea=DesignExtent|PrintAreaLowerLeftCornerX=0|PrintAreaLowerLeftCornerY=0|PrintAreaUpperRightCornerX=0|PrintAreaUpperRightCornerY=0|Record=PcbPrintView
Configuration_Name2=OutputConfigurationParameter2
Configuration_Item2=IncludeBottomLayerComponents=False|IncludeMultiLayerComponents=False|IncludeTopLayerComponents=False|Index=0|Mirror=False|Name=Panel Details|PadNumberFontSize=14|Record=PcbPrintOut|ShowHoles=False|ShowPadNets=False|ShowPadNumbers=False|SubstituteFonts=False
Configuration_Name3=OutputConfigurationParameter3
Configuration_Item3=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical16|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration_Name4=OutputConfigurationParameter4
Configuration_Item4=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical1|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration_Name5=OutputConfigurationParameter5
Configuration_Item5=IncludeBottomLayerComponents=False|IncludeMultiLayerComponents=False|IncludeTopLayerComponents=False|Index=1|Mirror=False|Name=Top SilkScreen|PadNumberFontSize=14|Record=PcbPrintOut|ShowHoles=False|ShowPadNets=False|ShowPadNumbers=False|SubstituteFonts=False
Configuration_Name6=OutputConfigurationParameter6
Configuration_Item6=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=TopOverlay|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration_Name7=OutputConfigurationParameter7
Configuration_Item7=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical16|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration_Name8=OutputConfigurationParameter8
Configuration_Item8=IncludeBottomLayerComponents=False|IncludeMultiLayerComponents=False|IncludeTopLayerComponents=False|Index=2|Mirror=False|Name=Top Copper|PadNumberFontSize=14|Record=PcbPrintOut|ShowHoles=False|ShowPadNets=False|ShowPadNumbers=False|SubstituteFonts=False
Configuration_Name9=OutputConfigurationParameter9
Configuration_Item9=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=TopLayer|Polygon=Full|PrintOutIndex=2|Record=PcbPrintLayer
Configuration_Name10=OutputConfigurationParameter10
Configuration_Item10=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical16|Polygon=Full|PrintOutIndex=2|Record=PcbPrintLayer
Configuration_Name11=OutputConfigurationParameter11
Configuration_Item11=IncludeBottomLayerComponents=False|IncludeMultiLayerComponents=False|IncludeTopLayerComponents=False|Index=3|Mirror=False|Name=Groud Copper|PadNumberFontSize=14|Record=PcbPrintOut|ShowHoles=False|ShowPadNets=False|ShowPadNumbers=False|SubstituteFonts=False
Configuration_Name12=OutputConfigurationParameter12
Configuration_Item12=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=MidLayer1|Polygon=Full|PrintOutIndex=3|Record=PcbPrintLayer
Configuration_Name13=OutputConfigurationParameter13
Configuration_Item13=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical16|Polygon=Full|PrintOutIndex=3|Record=PcbPrintLayer
Configuration_Name14=OutputConfigurationParameter14
Configuration_Item14=IncludeBottomLayerComponents=False|IncludeMultiLayerComponents=False|IncludeTopLayerComponents=False|Index=4|Mirror=False|Name=Power Layer|PadNumberFontSize=14|Record=PcbPrintOut|ShowHoles=False|ShowPadNets=False|ShowPadNumbers=False|SubstituteFonts=False
Configuration_Name15=OutputConfigurationParameter15
Configuration_Item15=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=MidLayer2|Polygon=Full|PrintOutIndex=4|Record=PcbPrintLayer
Configuration_Name16=OutputConfigurationParameter16
Configuration_Item16=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical16|Polygon=Full|PrintOutIndex=4|Record=PcbPrintLayer
Configuration_Name17=OutputConfigurationParameter17
Configuration_Item17=IncludeBottomLayerComponents=False|IncludeMultiLayerComponents=False|IncludeTopLayerComponents=False|Index=5|Mirror=False|Name=Bottom Copper|PadNumberFontSize=14|Record=PcbPrintOut|ShowHoles=False|ShowPadNets=False|ShowPadNumbers=False|SubstituteFonts=False
Configuration_Name18=OutputConfigurationParameter18
Configuration_Item18=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=BottomLayer|Polygon=Full|PrintOutIndex=5|Record=PcbPrintLayer
Configuration_Name19=OutputConfigurationParameter19
Configuration_Item19=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical16|Polygon=Full|PrintOutIndex=5|Record=PcbPrintLayer
Configuration_Name20=OutputConfigurationParameter20
Configuration_Item20=IncludeBottomLayerComponents=False|IncludeMultiLayerComponents=False|IncludeTopLayerComponents=False|Index=6|Mirror=False|Name=Bottom Silk Screen|PadNumberFontSize=14|Record=PcbPrintOut|ShowHoles=False|ShowPadNets=False|ShowPadNumbers=False|SubstituteFonts=False
Configuration_Name21=OutputConfigurationParameter21
Configuration_Item21=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=BottomOverlay|Polygon=Full|PrintOutIndex=6|Record=PcbPrintLayer
Configuration_Name22=OutputConfigurationParameter22
Configuration_Item22=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|DDSymbolKind=0|DDSymbolSize=500000|DDSymbolSortKind=0|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical16|Polygon=Full|PrintOutIndex=6|Record=PcbPrintLayer

View File

@ -72,7 +72,7 @@ MSG_FLASH_IMG = $(QUOTE) FLASH_IMG $(MSG_EXTRA) $(QUOTE)
toprel = $(subst $(realpath $(ROOT_DIR))/,,$(abspath $(1)))
# Function to replace special characters like is done for the symbols.
replace_special_chars = $(subst ~,_,$(subst @,_,$(subst :,_,$(subst -,_,$(subst .,_,$(subst /,_,$1))))))
replace_special_chars = $(subst +,_,$(subst ~,_,$(subst @,_,$(subst :,_,$(subst -,_,$(subst .,_,$(subst /,_,$1)))))))
# Display compiler version information.
.PHONY: gccversion

View File

@ -68,12 +68,15 @@ class Repo:
if self._rc == 0:
self._time = self._out
def _get_tag(self):
def _get_last_tag(self):
"""Get and store git tag for the HEAD commit"""
self._tag = None
self._exec('describe --tags --exact-match HEAD')
self._last_tag = None
self._num_commits_past_tag = None
self._exec('describe --tags --long')
if self._rc == 0:
self._tag = self._out.strip(' \t\n\r')
descriptions = self._out.rsplit('-', 2)
self._last_tag = descriptions[-3]
self._num_commits_past_tag = descriptions[-2]
def _get_branch(self):
"""Get and store current branch containing the HEAD commit"""
@ -102,7 +105,8 @@ class Repo:
self._hash = json_data['hash']
self._origin = json_data['origin']
self._time = json_data['time']
self._tag = json_data['tag']
self._last_tag = json_data['last_tag']
self._num_commits_past_tag = json_data['num_commits_past_tag']
self._branch = json_data['branch']
self._dirty = json_data['dirty']
@ -119,14 +123,15 @@ class Repo:
self._hash = self._out.strip(' \t\n\r')
self._get_origin()
self._get_time()
self._get_tag()
self._get_last_tag()
self._get_branch()
self._get_dirty()
else:
self._hash = None
self._origin = None
self._time = None
self._tag = None
self._last_tag = None
self._num_commits_past_tag = None
self._branch = None
self._dirty = None
@ -160,10 +165,10 @@ class Repo:
def tag(self, none = None):
"""Return git tag for the HEAD commit or given string if none"""
if self._tag == None:
if self._last_tag == None or self._num_commits_past_tag != 0:
return none
else:
return self._tag
return self._last_tag
def branch(self, none = None):
"""Return git branch containing the HEAD or given string if none"""
@ -180,22 +185,22 @@ class Repo:
return clean
def label(self):
"""Return package label (tag if defined, or date-hash if no tag)"""
"""Return package label (similar to git describe)"""
try:
if self._tag == None:
return ''.join([self.time('%Y%m%d'), "-", self.hash(8, 'untagged'), self.dirty()])
if self._num_commits_past_tag == 0:
return self._last_tag + self.dirty()
else:
return ''.join([self.tag(''), self.dirty()])
return self._last_tag + "+r" + self._num_commits_past_tag + "-g" + self.hash(7, '') + self.dirty()
except:
return None
def revision(self):
"""Return full revison string (tag if defined, or branch:hash date time if no tag)"""
try:
if self._tag == None:
return ''.join([self.branch('no-branch'), ":", self.hash(8, 'no-hash'), self.dirty(), self.time(' %Y%m%d %H:%M')])
if self._num_commits_past_tag == 0:
return self.tag('') + self.dirty()
else:
return ''.join([self.tag(''), self.dirty()])
return self.branch('no-branch') + ":" + self.hash(8, 'no-hash') + self.dirty() + self.time(' %Y%m%d %H:%M')
except:
return None
@ -220,9 +225,11 @@ class Repo:
json_data['hash'] = self._hash
json_data['origin'] = self._origin
json_data['time'] = self._time
json_data['tag'] = self._tag
json_data['last_tag'] = self._last_tag
json_data['num_commits_past_tag'] = self._num_commits_past_tag
json_data['branch'] = self._branch
json_data['dirty'] = self._dirty
# version-info.json is for use with git archive which doesn't take in dirty changes
json_data['dirty'] = False
json_path = os.path.join(path, 'version-info.json')
with open(json_path, 'w') as json_file:

View File

@ -87,7 +87,7 @@ if [ ! -x "$MAKE" ]; then
echo "$SCRIPT_NAME: $MAKE_NAME not found, fetching from $MAKE_URL"
MAKE_DIR="`dirname \"$MAKE\"`"
mkdir -p "$MAKE_DIR"
$WGET -N --content-disposition -P "$MAKE_DIR" "$MAKE_URL"
$WGET --no-check-certificate -N --content-disposition -P "$MAKE_DIR" "$MAKE_URL"
if [ $? -ne 0 ]; then
echo "$SCRIPT_NAME: $MAKE_NAME fetch error, hope it's in the path..."
MAKE_NAME="`basename \"$MAKE\"`"
@ -100,7 +100,7 @@ if [ ! -x "$SEVENZIP" ]; then
echo "$SCRIPT_NAME: $SEVENZIP_NAME not found, fetching from $SEVENZIP_URL"
SEVENZIP_DIR="`dirname \"$SEVENZIP\"`"
mkdir -p "$SEVENZIP_DIR"
$WGET -N --content-disposition -P "$SEVENZIP_DIR" "$SEVENZIP_URL"
$WGET --no-check-certificate -N --content-disposition -P "$SEVENZIP_DIR" "$SEVENZIP_URL"
if [ $? -ne 0 ]; then
echo "$SCRIPT_NAME: $SEVENZIP_NAME fetch error, hope it's in the path..."
SEVENZIP_NAME="`basename \"$SEVENZIP\"`"

View File

@ -6,26 +6,72 @@ ifndef OPENPILOT_IS_COOL
$(error Top level Makefile must be used to build this target)
endif
DEB_VER := $(subst RELEASE-,,$(PACKAGE_LBL))-1
DEB_DIR := $(ROOT_DIR)/package/linux/debian
DEB_BUILD_DIR := $(ROOT_DIR)/debian
# Are we using a debian based distro?
ifneq ($(shell which dpkg 2> /dev/null),)
SED_DATE_STRG = $(shell date -R)
SED_SCRIPT = s/<VERSION>/$(DEB_VER)/;s/<DATE>/$(SED_DATE_STRG)/
DEB_DIST := unstable
# Instead of RELEASE-15.01-RC1 debian wants 15.01~RC1
UPSTREAM_VER := $(subst -,~,$(subst RELEASE-,,$(PACKAGE_LBL)))
DEB_REV := 1
ifeq ($(DEB_DIST), trusty)
DEB_REV := $(DEB_REV)$(DEB_DIST)1
endif
DEB_NAME := openpilot
DEB_ORIG_SRC := $(PACKAGE_DIR)/$(DEB_NAME)_$(UPSTREAM_VER).orig.tar.gz
DEB_PACKAGE_DIR := $(PACKAGE_DIR)/$(DEB_NAME)-$(UPSTREAM_VER)
DEB_ARCH := $(shell dpkg --print-architecture)
DEB_PACKAGE_NAME := $(DEB_NAME)_$(UPSTREAM_VER)-$(DEB_REV)_$(DEB_ARCH)
DEB_DIR := package/linux/debian
DEB_ARCH := $(shell dpkg --print-architecture)
DEB_PACKAGE_NAME := openpilot_$(DEB_VER)_$(DEB_ARCH)
SED_DATE_STRG = $(shell date -R)
SED_SCRIPT = s/<VERSION>/$(UPSTREAM_VER)-$(DEB_REV)/;s/<DATE>/$(SED_DATE_STRG)/;s/<DIST>/$(DEB_DIST)/
# Ubuntu 14.04 (Trusty Tahr) has different names for the qml-modules
TRUSTY_DEPS_SED := s/qml-module-qtquick-controls/qtdeclarative5-controls-plugin/g; \
s/qml-module-qtquick-dialogs/qtdeclarative5-dialogs-plugin/g; \
s/qml-module-qtquick-localstorage/qtdeclarative5-localstorage-plugin/g; \
s/qml-module-qtquick-particles2/qtdeclarative5-particles-plugin/g; \
s/qml-module-qtquick2/qtdeclarative5-qtquick2-plugin/g; \
s/qml-module-qtquick-window2/qtdeclarative5-window-plugin/g; \
s/qml-module-qtquick-xmllistmodel/qtdeclarative5-xmllistmodel-plugin/g;
# Leave off Qt and ARM compiler dependencies if calling package target under the assumption that
# OP is providing them or the user already has them installed because OP is already built.
PACKAGE_DEPS_SED := s/python.*/python/;s/{misc:Depends}.*/{misc:Depends}/;
.PHONY: package
package:
$(V1) echo "Building Linux package, please wait..."
$(V1) cp -rL $(DEB_DIR) $(DEB_BUILD_DIR)
$(V1) sed -i -e "$(SED_SCRIPT)" $(DEB_BUILD_DIR)/changelog
package: debian
@$(ECHO) "Building Linux package, please wait..."
# Override clean and build because OP has already performed them.
$(V1) printf "override_dh_auto_clean:\noverride_dh_auto_build:\n\t#\n" >> debian/rules
$(V1) sed -i -e "$(PACKAGE_DEPS_SED)" debian/control
$(V1) dpkg-buildpackage -b -us -uc
$(V1) mv $(ROOT_DIR)/../$(DEB_PACKAGE_NAME).deb $(BUILD_DIR)/$(DEB_PACKAGE_NAME).deb
$(V1) mv $(ROOT_DIR)/../$(DEB_PACKAGE_NAME).changes $(BUILD_DIR)/$(DEB_PACKAGE_NAME).changes
$(V1) rm -rf $(DEB_BUILD_DIR)
$(V1) mv $(ROOT_DIR)/../$(DEB_PACKAGE_NAME).deb $(PACKAGE_DIR)
$(V1) mv $(ROOT_DIR)/../$(DEB_PACKAGE_NAME).changes $(PACKAGE_DIR)
$(V1) rm -r debian
.PHONY: debian
debian: $(DEB_DIR)
$(V1) rm -rf debian
$(V1) cp -rL $(DEB_DIR) debian
$(V1) sed -i -e "$(SED_SCRIPT)" debian/changelog
ifeq ($(DEB_DIST), trusty)
$(V1) sed -i -e "$(TRUSTY_DEPS_SED)" debian/control
endif
.PHONY: package_src
package_src: $(DEB_ORIG_SRC_NAME) $(DEB_PACKAGE_DIR)
$(V1) cd $(DEB_PACKAGE_DIR) && dpkg-buildpackage -S -us -uc
$(DEB_ORIG_SRC): $(DIST_NAME).gz | $(PACKAGE_DIR)
$(V1) cp $(DIST_NAME).gz $(DEB_ORIG_SRC)
$(DEB_PACKAGE_DIR): $(DEB_ORIG_SRC) debian | $(PACKAGE_DIR)
$(V1) tar -xf $(DEB_ORIG_SRC) -C $(PACKAGE_DIR)
$(V1) mv debian $(PACKAGE_DIR)/$(PACKAGE_NAME)
$(V1) rm -rf $(DEB_PACKAGE_DIR) && mv $(PACKAGE_DIR)/$(PACKAGE_NAME) $(DEB_PACKAGE_DIR)
endif # Debian based distro?
##############################
#
# Install OpenPilot

View File

@ -1,4 +1,4 @@
openpilot (<VERSION>) unstable; urgency=low
openpilot (<VERSION>) <DIST>; urgency=low
* Release from upstream Git (testing - unstable)

View File

@ -1,15 +1,15 @@
Source: openpilot
Section: unknown
Section: electronics
Priority: optional
Maintainer: James Duley <james@openpilot.org>
Build-Depends: debhelper (>= 8.0.0)
Standards-Version: 3.9.4
Build-Depends: debhelper (>= 9), libudev-dev, libusb-1.0-0-dev, libsdl1.2-dev, python, gcc-arm-none-eabi (>=4.9), qt5-default, qttools5-dev-tools, libqt5svg5-dev, qtdeclarative5-dev, qml-module-qtquick-controls, libqt5serialport5-dev, qtmultimedia5-dev, qtscript5-dev, libqt5opengl5-dev
Standards-Version: 3.9.5
Homepage: http://www.openpilot.org
Vcs-Git: git://git.openpilot.org/OpenPilot.git
Vcs-Browser: http://git.openpilot.org/changelog/OpenPilot
Package: openpilot
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Depends: ${shlibs:Depends}, ${misc:Depends}, qml-module-qtquick-controls, qml-module-qtquick-dialogs, qml-module-qtquick-xmllistmodel, qml-module-qtquick-localstorage, qml-module-qtquick-particles2, qml-module-qtquick-window2, qml-module-qtquick2
Description: OpenPilot GCS
OpenPilot Ground Control Station software

9
package/linux/debian/rules Normal file → Executable file
View File

@ -11,15 +11,8 @@ export DH_OPTIONS
%:
dh $@
# Disabled because OpenPilot makefile cleans and builds.
override_dh_auto_clean:
#
override_dh_auto_build:
#dh_auto_build -- all
override_dh_auto_test:
# Fails non-silently because it is run under fakeroot.
dh_auto_build -- all
override_dh_auto_install:
dh_auto_install -- prefix=/usr

View File

@ -0,0 +1 @@
3.0 (quilt)

View File

@ -36,6 +36,7 @@
<option>RebootRequired</option>
<option>FlightMode</option>
<option>UnsupportedConfig_OneShot</option>
<option>BadThrottleOrCollectiveInputRange</option>
</options>
</field>
<field name="ExtendedAlarmSubStatus" units="" type="uint8" defaultvalue="0">

View File

@ -1,7 +1,7 @@
<xml>
<object name="VtolPathFollowerSettings" singleinstance="true" settings="true" category="Control">
<description>Settings for the @ref VtolPathFollowerModule</description>
<field name="TreatCustomCraftAs" units="switch" type="enum" elements="1" options="FixedWing,VTOL" defaultvalue="FixedWing"/>
<field name="TreatCustomCraftAs" units="switch" type="enum" elements="1" options="FixedWing,VTOL,Ground" defaultvalue="FixedWing"/>
<field name="HorizontalVelMax" units="m/s" type="float" elements="1" defaultvalue="10.0" description="maximum allowed horizontal movement velocity"/>
<field name="VerticalVelMax" units="m/s" type="float" elements="1" defaultvalue="4.0" description="maximum allowed climb/dive velocity"/>
<field name="CourseFeedForward" units="s" type="float" elements="1" defaultvalue="1.0"/>