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:
commit
5b08f02aae
34
Makefile
34
Makefile
@ -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
|
||||
|
||||
##############################
|
||||
#
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -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 |
@ -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><html><head/><body><p>Setup output mode. Use PWM or PWMSync with Standard ESCs.<br/>Several other ESCs like BLHeli 13+ can use the more advanced OneShot125.<br/>When using OneShot125 all values set in min/max and idle are divided by <br/>eight before being sent to esc (i.e. 1000 = 125, 2000 = 250).</p></body></html></source>
|
||||
<translation type="unfinished"><html><head/><body><p>Configuration du mode de sortie. Utilisez PWM ou PWMSync avec des ESC Standard.<br/>D'autres contrôleurs comme les BLHeli 13+ peuvent utiliser le mode avancé OneShot125.<br/>Lorsque vous utilisez OneShot125 toutes les valeurs min/max et neutre sont divisées par <br/>huit avant d'être envoyées vers le contrôleur (ex. 1000 = 125, 2000 = 250).</p></body></html></translation>
|
||||
<translation><html><head/><body><p>Configuration du mode de sortie. Utilisez PWM ou PWMSync avec des ESC Standard.<br/>D'autres contrôleurs comme les BLHeli 13+ peuvent utiliser le mode avancé OneShot125.<br/>Lorsque vous utilisez OneShot125 toutes les valeurs min/max et neutre sont divisées par <br/>huit avant d'être envoyées vers le contrôleur (ex. 1000 = 125, 2000 = 250).</p></body></html></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -7157,7 +7163,7 @@ p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:10pt; font-weight:400; font-style:normal;">
|
||||
<p style="-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;"><br /></p></body></html></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 : <b>%1</b> µs</source>
|
||||
<translation>Valeur de sortie : <b>%1</b> µs</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-206"/>
|
||||
<location line="-215"/>
|
||||
<source><html><head/><body><p><span style=" font-size:10pt;">To find </span><span style=" font-size:10pt; font-weight:600;">the neutral rate for this reversable motor</span><span style=" font-size:10pt;">, press the Start button below and slide the slider to the right or left until you find the value where the motor doesn't start. <br/><br/>When done press button again to stop.</span></p></body></html></source>
|
||||
<translation><html><head/><body><p><span style=" font-size:10pt;">Pour trouver </span><span style=" font-size:10pt; font-weight:600;">la valeur de neutre de ce moteur inversable</span><span style=" font-size:10pt;">, appuyez sur le bouton Démarrer et bouger le curseur à gauche ou à droite jusqu'à trouver la position centrale où le moteur ne démarre pas. <br/><br/>Lorsque c'est terminé, appuyer à nouveau sur le bouton pour arrêter.</span></p></body></html></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'armement lorsque l'assistant sera terminé. Après la dernière étape de l'assistant, vous serez redirigé vers l'écran des Paramètres d'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><p>Arming Settings are now set to 'Always Disarmed' for your safety.</p><p>Be sure your receiver is powered with an external source and Transmitter is on.</p><p align='center'><b>Stop Manual Calibration</b> when done</p></source>
|
||||
<translation><p>Pour des raisons de sécurité les Paramètres d'Armement ont été modifiés à 'Toujours Désarmé'.</p><p>Veuillez vérifier que votre récepteur est alimenté avec une source externe et que la radio Rx est allumée. <p align='center'><b>Arrêter Calibration Manuelle</b> à la fin</p></translation>
|
||||
</message>
|
||||
@ -10892,10 +10898,20 @@ Bougez le manche %1.</translation>
|
||||
<translation>Vous devrez reconfigurer les paramètres d'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><p>There is something wrong with Throttle range. Please redo calibration and move <b>ALL sticks</b>, Throttle stick included.</p></source>
|
||||
<translation><p>Quelque chose ne va pas avec la plage du manche de Gaz. Veuillez relancer la calibration Tx et bouger <b>TOUS les manches</b>, manche des gaz inclus</p></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'armement manuellement lorsque l'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 '+OneShot'<br>When using Receiver Port setting 'PPM_PIN8+OneShot' <b><font color='%1'>Bank %2</font></b> must be set to PWM</source>
|
||||
<translation>OneShot et PWMSync fonctionnent uniquement avec les ports récepteur marqués avec '+OneShot'<br>Lors de l'utilisation de la configuration 'PPM_PIN8+OneShot' <b><font color='%1'>la Banque %2</font></b> doit être réglée sur PWM</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>OneShot only works with Receiver Port settings marked with '+OneShot'<br>When using Receiver Port setting 'PPM_PIN8+OneShot' <b><font color='%1'>Bank %2</font></b> must be set to PWM</source>
|
||||
<translation>OneShot fonctionne uniquement avec les ports récepteur marqués avec '+OneShot'<br>Lors de l'utilisation de la configuration 'PPM_PIN8+OneShot' <b><font color='%1'>la Banque %2</font></b> doit être réglée sur PWM</translation>
|
||||
<translation type="vanished">OneShot fonctionne uniquement avec les ports récepteur marqués avec '+OneShot'<br>Lors de l'utilisation de la configuration 'PPM_PIN8+OneShot' <b><font color='%1'>la Banque %2</font></b> doit être réglée sur PWM</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>OneShot only works with MainPort settings marked with "+OneShot"
|
||||
@ -14640,7 +14670,7 @@ pas seulement les champs visibles à l'é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'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'êtes pas en mesure d'en choisir un, sélectionnez l'é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'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><h1>Swashplate Leveling Routine</h1></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source><b>You are about to start the Swashplate levelling routine.</b><p>This process will start by downloading the current configuration from the GCS to the OP hardware and will adjust your configuration at various stages.<p>The final state of your system should match the current configuration in the GCS config gadget.</p><p>Please ensure all ccpm settings in the GCS are correct before continuing.</p><p>If this process is interrupted, then the state of your OP board may not match the GCS configuration.</p><p><i>After completing this process, please check all settings before attempting to fly.</i></p><p><font color=red><b>Please disconnect your motor to ensure it will not spin up.</b></font><p><hr><i>Do you wish to proceed?</i></p></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+128"/>
|
||||
<source><h2>Neutral levelling</h2><p>Using adjustment of:<ul><li>Servo horns,</li><li>Link lengths,</li><li>Neutral triming spinboxes to the right</li></ul><br>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><h2>Max levelling</h2><p>Using adjustment of:<ul><li>Max triming spinboxes to the right ONLY</li></ul><br>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><h2>Min levelling</h2><p>Using adjustment of:<ul><li>Min triming spinboxes to the right ONLY</li></ul><br>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><h2>Levelling verification</h2><p>Adjust the slider to the right over it's full range and observe the swashplate motion. It should remain level over the entire range of travel.</p></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source><h2>Levelling complete</h2><p>Press the Finish button to save these settings to the SD card</p><p>Press the cancel button to return to the pre-levelling settings</p></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+68"/>
|
||||
<source><h2>Levelling Cancelled</h2><p>Previous settings have been restored.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+43"/>
|
||||
<source><h2>Levelling Completed</h2><p>New settings have been saved to the SD card</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source><font color=red><h1>Warning!!!</h2></font></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<source><h2>This code has many configurations.</h2><p>Please double check all settings before attempting flight!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+11"/>
|
||||
<source><h2>The CCPM mixer code needs more testing!</h2><p><font color=red>Use it at your own risk!</font><p>Do you wish to continue?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+16"/>
|
||||
<source><h2>The CCPM swashplate levelling code is NOT complete!</h2><p><font color=red>DO NOT use it for flight!</font></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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");
|
||||
|
@ -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");
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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">
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
@ -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 |
@ -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 |
@ -492,6 +492,9 @@ void SetupWizard::customBackClicked()
|
||||
static_cast<OutputCalibrationPage *>(currentPage())->customBackClicked();
|
||||
} else {
|
||||
back();
|
||||
if (currentId() == PAGE_OUTPUT_CALIBRATION) {
|
||||
static_cast<OutputCalibrationPage *>(currentPage())->customBackClicked();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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>
|
@ -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>
|
@ -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>
|
||||
|
||||
|
176
hardware/Production/OpenPilot Atom/Assembly.OutJob
Normal file
176
hardware/Production/OpenPilot Atom/Assembly.OutJob
Normal 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
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
hardware/Production/OpenPilot Atom/BOM/OpenPilot Atom.xls
Normal file
BIN
hardware/Production/OpenPilot Atom/BOM/OpenPilot Atom.xls
Normal file
Binary file not shown.
Binary file not shown.
BIN
hardware/Production/OpenPilot Atom/OpenPilot Atom.PcbDoc
Normal file
BIN
hardware/Production/OpenPilot Atom/OpenPilot Atom.PcbDoc
Normal file
Binary file not shown.
1160
hardware/Production/OpenPilot Atom/OpenPilot Atom.PrjPCB
Normal file
1160
hardware/Production/OpenPilot Atom/OpenPilot Atom.PrjPCB
Normal 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
|
||||
|
BIN
hardware/Production/OpenPilot Atom/OpenPilot Atom.SchDoc
Normal file
BIN
hardware/Production/OpenPilot Atom/OpenPilot Atom.SchDoc
Normal file
Binary file not shown.
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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\"`"
|
||||
|
@ -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
|
||||
|
@ -1,4 +1,4 @@
|
||||
openpilot (<VERSION>) unstable; urgency=low
|
||||
openpilot (<VERSION>) <DIST>; urgency=low
|
||||
|
||||
* Release from upstream Git (testing - unstable)
|
||||
|
||||
|
@ -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
9
package/linux/debian/rules
Normal file → Executable 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
|
||||
|
1
package/linux/debian/source/format
Normal file
1
package/linux/debian/source/format
Normal file
@ -0,0 +1 @@
|
||||
3.0 (quilt)
|
@ -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">
|
||||
|
@ -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"/>
|
||||
|
Loading…
Reference in New Issue
Block a user