mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-02-20 10:54:14 +01:00
Merge branch 'next' into ins
This commit is contained in:
commit
400ba3bd47
15
HISTORY.txt
15
HISTORY.txt
@ -1,5 +1,20 @@
|
||||
Short summary of changes. For a complete list see the git log.
|
||||
|
||||
2011-09-12
|
||||
Max rate now ONLY applies to attitude and axis lock mode. Manual rate is the
|
||||
only term that limits the rate mode now (and in axis lock when you push stick
|
||||
only manual rate applies). Also integrals are reset when unused.
|
||||
|
||||
2011-09-09
|
||||
Some large updates to the input system. Now multiple receivers can be
|
||||
connected at once. A wizard was added for configuring the input channels. A
|
||||
specific collective pitch channel was added.
|
||||
|
||||
2011-09-04
|
||||
Improvements to the failsafe handling code for inputs. PWM power off is now
|
||||
detected properly. Powering on transmitter for Spektrum Satellite no longer
|
||||
causes a glitch on servos.
|
||||
|
||||
2011-08-10
|
||||
Added Camera Stabilization and a gui to configure this. This is a software
|
||||
selectable module from the GUI. However, a restart is required to make it
|
||||
|
@ -82,7 +82,7 @@ C: Sami Korhonen (Sambas)
|
||||
D: February 2011
|
||||
V: http://vimeo.com/20159015
|
||||
|
||||
M: First Position Hold on a Fixed Wing
|
||||
M: First CopterControl Position Hold on a Fixed Wing
|
||||
C: Eric Price (Corvus Corax)
|
||||
D: March 2011
|
||||
V: http://www.youtube.com/watch?v=QtaefhmGbio
|
||||
@ -146,6 +146,12 @@ M: First CopterControl Flybared Heli funnel (4:18), loop (5:35)
|
||||
C: Sergey Solodennikov (alconaft43)
|
||||
D: August 2011
|
||||
V: http://www.youtube.com/watch?v=8SrfIS7OkB4
|
||||
|
||||
M: First CopterControl Return to Base Fixed Wing
|
||||
C: Eric Price (Corvus Corax)
|
||||
D: AUgust 2011
|
||||
V: http://www.youtube.com/watch?v=CugI0oBSQn8
|
||||
|
||||
|
||||
M: First Altitude Hold using Sonar
|
||||
C:
|
||||
@ -170,11 +176,11 @@ V:
|
||||
|
||||
An incomplete list of some future Milestones is below:
|
||||
|
||||
* First Y6 CopterControl flight
|
||||
* First Helicopter flight with OpenPilot
|
||||
* First Helicopter flight with OpenPilot Pro
|
||||
* First fixed wing navigation flight on CopterControl
|
||||
* First successful flight using the GCS only and no RC TX
|
||||
* First use of Magic Waypoint
|
||||
* First Flybarless Helicopter flight with OpenPilot
|
||||
* First Flybarless Helicopter flight with OpenPilot Pro
|
||||
* First fixed wing navigation flight
|
||||
* First Multirotor navigation flight
|
||||
* First Helicopter navigation flight
|
||||
@ -183,4 +189,3 @@ An incomplete list of some future Milestones is below:
|
||||
* First "Follow Me" navigation flight
|
||||
* First Channel Crossing with OpenPilot
|
||||
|
||||
|
||||
|
4
Makefile
4
Makefile
@ -183,13 +183,13 @@ qt_sdk_clean:
|
||||
ARM_SDK_DIR := $(TOOLS_DIR)/arm-2011.03
|
||||
|
||||
.PHONY: arm_sdk_install
|
||||
arm_sdk_install: ARM_SDK_URL := http://www.codesourcery.com/sgpp/lite/arm/portal/package8734/public/arm-none-eabi/arm-2011.03-42-arm-none-eabi-i686-pc-linux-gnu.tar.bz2
|
||||
arm_sdk_install: ARM_SDK_URL := https://sourcery.mentor.com/sgpp/lite/arm/portal/package8736/public/arm-none-eabi/arm-2011.03-42-arm-none-eabi-i686-pc-linux-gnu.tar.bz2
|
||||
arm_sdk_install: ARM_SDK_FILE := $(notdir $(ARM_SDK_URL))
|
||||
# order-only prereq on directory existance:
|
||||
arm_sdk_install: | $(DL_DIR) $(TOOLS_DIR)
|
||||
arm_sdk_install: arm_sdk_clean
|
||||
# download the source only if it's newer than what we already have
|
||||
$(V1) wget -N -P "$(DL_DIR)" "$(ARM_SDK_URL)"
|
||||
$(V1) wget --no-check-certificate -N -P "$(DL_DIR)" "$(ARM_SDK_URL)"
|
||||
|
||||
# binary only release so just extract it
|
||||
$(V1) tar -C $(TOOLS_DIR) -xjf "$(DL_DIR)/$(ARM_SDK_FILE)"
|
||||
|
Binary file not shown.
@ -1028,6 +1028,13 @@ void PIOS_Board_Init(void) {
|
||||
if (PIOS_SBUS_Init(&pios_sbus_id, &pios_sbus_cfg, &pios_usart_com_driver, pios_usart_sbus_id)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
|
||||
uint32_t pios_sbus_rcvr_id;
|
||||
if (PIOS_RCVR_Init(&pios_sbus_rcvr_id, &pios_sbus_rcvr_driver, pios_sbus_id)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
pios_rcvr_group_map[MANUALCONTROLSETTINGS_CHANNELGROUPS_SBUS] = pios_sbus_rcvr_id;
|
||||
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_SBUS */
|
||||
break;
|
||||
|
@ -42,7 +42,7 @@
|
||||
#include "mixersettings.h"
|
||||
#include "mixerstatus.h"
|
||||
#include "cameradesired.h"
|
||||
|
||||
#include "manualcontrolcommand.h"
|
||||
|
||||
// Private constants
|
||||
#define MAX_QUEUE_SIZE 2
|
||||
@ -238,6 +238,11 @@ static void actuatorTask(void* parameters)
|
||||
case MIXERSETTINGS_CURVE2SOURCE_YAW:
|
||||
curve2 = MixerCurve(desired.Yaw,mixerSettings.ThrottleCurve2,MIXERSETTINGS_THROTTLECURVE2_NUMELEM);
|
||||
break;
|
||||
case MIXERSETTINGS_CURVE2SOURCE_COLLECTIVE:
|
||||
ManualControlCommandCollectiveGet(&curve2);
|
||||
curve2 = MixerCurve(curve2,mixerSettings.ThrottleCurve2,
|
||||
MIXERSETTINGS_THROTTLECURVE2_NUMELEM);
|
||||
break;
|
||||
case MIXERSETTINGS_CURVE2SOURCE_ACCESSORY0:
|
||||
case MIXERSETTINGS_CURVE2SOURCE_ACCESSORY1:
|
||||
case MIXERSETTINGS_CURVE2SOURCE_ACCESSORY2:
|
||||
|
@ -105,4 +105,11 @@ int32_t ManualControlInitialize();
|
||||
( (int)MANUALCONTROLSETTINGS_FLIGHTMODEPOSITION_POSITIONHOLD == (int) FLIGHTSTATUS_FLIGHTMODE_POSITIONHOLD) \
|
||||
)
|
||||
|
||||
#define assumptions_channelcount ( \
|
||||
( (int)MANUALCONTROLCOMMAND_CHANNEL_NUMELEM == (int)MANUALCONTROLSETTINGS_CHANNELGROUPS_NUMELEM ) && \
|
||||
( (int)MANUALCONTROLCOMMAND_CHANNEL_NUMELEM == (int)MANUALCONTROLSETTINGS_CHANNELNUMBER_NUMELEM ) && \
|
||||
( (int)MANUALCONTROLCOMMAND_CHANNEL_NUMELEM == (int)MANUALCONTROLSETTINGS_CHANNELMIN_NUMELEM ) && \
|
||||
( (int)MANUALCONTROLCOMMAND_CHANNEL_NUMELEM == (int)MANUALCONTROLSETTINGS_CHANNELMAX_NUMELEM ) && \
|
||||
( (int)MANUALCONTROLCOMMAND_CHANNEL_NUMELEM == (int)MANUALCONTROLSETTINGS_CHANNELNEUTRAL_NUMELEM ) )
|
||||
|
||||
#endif // MANUALCONTROL_H
|
||||
|
@ -101,7 +101,7 @@ static struct rcvr_activity_fsm activity_fsm;
|
||||
static void resetRcvrActivity(struct rcvr_activity_fsm * fsm);
|
||||
static bool updateRcvrActivity(struct rcvr_activity_fsm * fsm);
|
||||
|
||||
#define assumptions (assumptions1 && assumptions3 && assumptions5 && assumptions7 && assumptions8 && assumptions_flightmode)
|
||||
#define assumptions (assumptions1 && assumptions3 && assumptions5 && assumptions7 && assumptions8 && assumptions_flightmode && assumptions_channelcount)
|
||||
|
||||
/**
|
||||
* Module starting
|
||||
@ -278,6 +278,7 @@ static void manualControlTask(void *parameters)
|
||||
cmd.Roll = 0;
|
||||
cmd.Yaw = 0;
|
||||
cmd.Pitch = 0;
|
||||
cmd.Collective = 0;
|
||||
//cmd.FlightMode = MANUALCONTROLCOMMAND_FLIGHTMODE_AUTO; // don't do until AUTO implemented and functioning
|
||||
// Important: Throttle < 0 will reset Stabilization coefficients among other things. Either change this,
|
||||
// or leave throttle at IDLE speed or above when going into AUTO-failsafe.
|
||||
@ -316,6 +317,11 @@ static void manualControlTask(void *parameters)
|
||||
cmd.Throttle = scaledChannel[MANUALCONTROLSETTINGS_CHANNELGROUPS_THROTTLE];
|
||||
flightMode = scaledChannel[MANUALCONTROLSETTINGS_CHANNELGROUPS_FLIGHTMODE];
|
||||
|
||||
if(cmd.Channel[MANUALCONTROLSETTINGS_CHANNELGROUPS_COLLECTIVE] != PIOS_RCVR_INVALID &&
|
||||
cmd.Channel[MANUALCONTROLSETTINGS_CHANNELGROUPS_COLLECTIVE] != PIOS_RCVR_NODRIVER &&
|
||||
cmd.Channel[MANUALCONTROLSETTINGS_CHANNELGROUPS_COLLECTIVE] != PIOS_RCVR_TIMEOUT)
|
||||
cmd.Collective = scaledChannel[MANUALCONTROLSETTINGS_CHANNELGROUPS_COLLECTIVE];
|
||||
|
||||
AccessoryDesiredData accessory;
|
||||
// Set Accessory 0
|
||||
if (settings.ChannelGroups[MANUALCONTROLSETTINGS_CHANNELGROUPS_ACCESSORY0] !=
|
||||
@ -398,8 +404,9 @@ static void resetRcvrActivity(struct rcvr_activity_fsm * fsm)
|
||||
}
|
||||
|
||||
static void updateRcvrActivitySample(uint32_t rcvr_id, uint16_t samples[], uint8_t max_channels) {
|
||||
for (uint8_t channel = 0; channel < max_channels; channel++) {
|
||||
samples[channel] = PIOS_RCVR_Read(rcvr_id, channel);
|
||||
for (uint8_t channel = 1; channel <= max_channels; channel++) {
|
||||
// Subtract 1 because channels are 1 indexed
|
||||
samples[channel - 1] = PIOS_RCVR_Read(rcvr_id, channel);
|
||||
}
|
||||
}
|
||||
|
||||
@ -408,12 +415,12 @@ static bool updateRcvrActivityCompare(uint32_t rcvr_id, struct rcvr_activity_fsm
|
||||
bool activity_updated = false;
|
||||
|
||||
/* Compare the current value to the previous sampled value */
|
||||
for (uint8_t channel = 0;
|
||||
channel < RCVR_ACTIVITY_MONITOR_CHANNELS_PER_GROUP;
|
||||
for (uint8_t channel = 1;
|
||||
channel <= RCVR_ACTIVITY_MONITOR_CHANNELS_PER_GROUP;
|
||||
channel++) {
|
||||
uint16_t delta;
|
||||
uint16_t prev = fsm->prev[channel];
|
||||
uint16_t curr = PIOS_RCVR_Read(rcvr_id, channel);
|
||||
uint16_t prev = fsm->prev[channel - 1]; // Subtract 1 because channels are 1 indexed
|
||||
uint16_t curr = PIOS_RCVR_Read(rcvr_id, channel);
|
||||
if (curr > prev) {
|
||||
delta = curr - prev;
|
||||
} else {
|
||||
|
@ -235,6 +235,9 @@ static void stabilizationTask(void* parameters)
|
||||
{
|
||||
case STABILIZATIONDESIRED_STABILIZATIONMODE_RATE:
|
||||
rateDesiredAxis[i] = attitudeDesiredAxis[i];
|
||||
|
||||
// Zero attitude and axis lock accumulators
|
||||
pids[PID_ROLL + i].iAccumulator = 0;
|
||||
axis_lock_accum[i] = 0;
|
||||
break;
|
||||
|
||||
@ -249,11 +252,20 @@ static void stabilizationTask(void* parameters)
|
||||
|
||||
rateDesiredAxis[i] = attitudeDesiredAxis[i] + weak_leveling;
|
||||
|
||||
// Zero attitude and axis lock accumulators
|
||||
pids[PID_ROLL + i].iAccumulator = 0;
|
||||
axis_lock_accum[i] = 0;
|
||||
break;
|
||||
}
|
||||
case STABILIZATIONDESIRED_STABILIZATIONMODE_ATTITUDE:
|
||||
rateDesiredAxis[i] = ApplyPid(&pids[PID_ROLL + i], local_error[i]);
|
||||
|
||||
if(rateDesiredAxis[i] > settings.MaximumRate[i])
|
||||
rateDesiredAxis[i] = settings.MaximumRate[i];
|
||||
else if(rateDesiredAxis[i] < -settings.MaximumRate[i])
|
||||
rateDesiredAxis[i] = -settings.MaximumRate[i];
|
||||
|
||||
|
||||
axis_lock_accum[i] = 0;
|
||||
break;
|
||||
|
||||
@ -272,6 +284,12 @@ static void stabilizationTask(void* parameters)
|
||||
|
||||
rateDesiredAxis[i] = ApplyPid(&pids[PID_ROLL + i], axis_lock_accum[i]);
|
||||
}
|
||||
|
||||
if(rateDesiredAxis[i] > settings.MaximumRate[i])
|
||||
rateDesiredAxis[i] = settings.MaximumRate[i];
|
||||
else if(rateDesiredAxis[i] < -settings.MaximumRate[i])
|
||||
rateDesiredAxis[i] = -settings.MaximumRate[i];
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -284,11 +302,6 @@ static void stabilizationTask(void* parameters)
|
||||
//Calculate desired command
|
||||
for(int8_t ct=0; ct< MAX_AXES; ct++)
|
||||
{
|
||||
if(rateDesiredAxis[ct] > settings.MaximumRate[ct])
|
||||
rateDesiredAxis[ct] = settings.MaximumRate[ct];
|
||||
else if(rateDesiredAxis[ct] < -settings.MaximumRate[ct])
|
||||
rateDesiredAxis[ct] = -settings.MaximumRate[ct];
|
||||
|
||||
switch(stabDesired.StabilizationMode[ct])
|
||||
{
|
||||
case STABILIZATIONDESIRED_STABILIZATIONMODE_RATE:
|
||||
@ -306,14 +319,20 @@ static void stabilizationTask(void* parameters)
|
||||
case ROLL:
|
||||
actuatorDesiredAxis[ct] = bound(attitudeDesiredAxis[ct]);
|
||||
shouldUpdate = 1;
|
||||
pids[PID_RATE_ROLL].iAccumulator = 0;
|
||||
pids[PID_ROLL].iAccumulator = 0;
|
||||
break;
|
||||
case PITCH:
|
||||
actuatorDesiredAxis[ct] = bound(attitudeDesiredAxis[ct]);
|
||||
shouldUpdate = 1;
|
||||
pids[PID_RATE_PITCH].iAccumulator = 0;
|
||||
pids[PID_PITCH].iAccumulator = 0;
|
||||
break;
|
||||
case YAW:
|
||||
actuatorDesiredAxis[ct] = bound(attitudeDesiredAxis[ct]);
|
||||
shouldUpdate = 1;
|
||||
pids[PID_RATE_YAW].iAccumulator = 0;
|
||||
pids[PID_YAW].iAccumulator = 0;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
@ -87,6 +87,12 @@ out_fail:
|
||||
*/
|
||||
int32_t PIOS_RCVR_Read(uint32_t rcvr_id, uint8_t channel)
|
||||
{
|
||||
// Publicly facing API uses channel 1 for first channel
|
||||
if(channel == 0)
|
||||
return PIOS_RCVR_INVALID;
|
||||
else
|
||||
channel--;
|
||||
|
||||
if (rcvr_id == 0)
|
||||
return PIOS_RCVR_NODRIVER;
|
||||
|
||||
|
@ -34,8 +34,6 @@
|
||||
|
||||
#if defined(PIOS_INCLUDE_SBUS)
|
||||
|
||||
/* Global Variables */
|
||||
|
||||
/* Provide a RCVR driver */
|
||||
static int32_t PIOS_SBUS_Get(uint32_t rcvr_id, uint8_t channel);
|
||||
|
||||
@ -65,21 +63,17 @@ static void reset_channels(void)
|
||||
|
||||
/**
|
||||
* unroll_channels() function computes channel_data[] from received_data[]
|
||||
* For efficiency it unrolls first 8 channels without loops. If other
|
||||
* 8 channels are needed they can be unrolled using the same code
|
||||
* starting from s[11] instead of s[0]. Two extra digital channels are
|
||||
* accessible using (s[22] & SBUS_FLAG_DGx) logical expressions.
|
||||
* For efficiency it unrolls first 8 channels without loops and does the
|
||||
* same for other 8 channels. Also 2 discrete channels will be set.
|
||||
*/
|
||||
static void unroll_channels(void)
|
||||
{
|
||||
uint8_t *s = received_data;
|
||||
uint16_t *d = channel_data;
|
||||
|
||||
#if (SBUS_NUMBER_OF_CHANNELS != 8)
|
||||
#error Current S.Bus code unrolls only first 8 channels
|
||||
#endif
|
||||
|
||||
#define F(v,s) ((v) >> s) & 0x7ff
|
||||
|
||||
/* unroll channels 1-8 */
|
||||
*d++ = F(s[0] | s[1] << 8, 0);
|
||||
*d++ = F(s[1] | s[2] << 8, 3);
|
||||
*d++ = F(s[2] | s[3] << 8 | s[4] << 16, 6);
|
||||
@ -88,6 +82,20 @@ static void unroll_channels(void)
|
||||
*d++ = F(s[6] | s[7] << 8 | s[8] << 16, 7);
|
||||
*d++ = F(s[8] | s[9] << 8, 2);
|
||||
*d++ = F(s[9] | s[10] << 8, 5);
|
||||
|
||||
/* unroll channels 9-16 */
|
||||
*d++ = F(s[11] | s[12] << 8, 0);
|
||||
*d++ = F(s[12] | s[13] << 8, 3);
|
||||
*d++ = F(s[13] | s[14] << 8 | s[15] << 16, 6);
|
||||
*d++ = F(s[15] | s[16] << 8, 1);
|
||||
*d++ = F(s[16] | s[17] << 8, 4);
|
||||
*d++ = F(s[17] | s[18] << 8 | s[19] << 16, 7);
|
||||
*d++ = F(s[19] | s[20] << 8, 2);
|
||||
*d++ = F(s[20] | s[21] << 8, 5);
|
||||
|
||||
/* unroll discrete channels 17 and 18 */
|
||||
*d++ = (s[22] & SBUS_FLAG_DC1) ? SBUS_VALUE_MAX : SBUS_VALUE_MIN;
|
||||
*d++ = (s[22] & SBUS_FLAG_DC2) ? SBUS_VALUE_MAX : SBUS_VALUE_MIN;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -44,8 +44,8 @@
|
||||
* 1 byte - 0x0f (start of frame byte)
|
||||
* 22 bytes - channel data (11 bit/channel, 16 channels, LSB first)
|
||||
* 1 byte - bit flags:
|
||||
* 0x01 - digital channel 1,
|
||||
* 0x02 - digital channel 2,
|
||||
* 0x01 - discrete channel 1,
|
||||
* 0x02 - discrete channel 2,
|
||||
* 0x04 - lost frame flag,
|
||||
* 0x08 - failsafe flag,
|
||||
* 0xf0 - reserved
|
||||
@ -54,16 +54,20 @@
|
||||
#define SBUS_FRAME_LENGTH (1+22+1+1)
|
||||
#define SBUS_SOF_BYTE 0x0f
|
||||
#define SBUS_EOF_BYTE 0x00
|
||||
#define SBUS_FLAG_DG1 0x01
|
||||
#define SBUS_FLAG_DG2 0x02
|
||||
#define SBUS_FLAG_DC1 0x01
|
||||
#define SBUS_FLAG_DC2 0x02
|
||||
#define SBUS_FLAG_FL 0x04
|
||||
#define SBUS_FLAG_FS 0x08
|
||||
|
||||
/*
|
||||
* S.Bus protocol provides up to 16 analog and 2 digital channels.
|
||||
* Only 8 channels are currently supported by the OpenPilot.
|
||||
* S.Bus protocol provides 16 proportional and 2 discrete channels.
|
||||
* Do not change unless driver code is updated accordingly.
|
||||
*/
|
||||
#define SBUS_NUMBER_OF_CHANNELS 8
|
||||
#define SBUS_NUMBER_OF_CHANNELS (16 + 2)
|
||||
|
||||
/* Discrete channels represented as bits, provide values for them */
|
||||
#define SBUS_VALUE_MIN 352
|
||||
#define SBUS_VALUE_MAX 1696
|
||||
|
||||
/*
|
||||
* S.Bus configuration programmable invertor
|
||||
|
@ -880,7 +880,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<item row="3" column="0">
|
||||
<widget class="QCheckBox" name="ccpmLinkRoll">
|
||||
<property name="text">
|
||||
<string>Link Roll/Pitch</string>
|
||||
@ -890,7 +890,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<item row="2" column="0">
|
||||
<widget class="QCheckBox" name="ccpmLinkCyclic">
|
||||
<property name="text">
|
||||
<string>Link Cyclic/Collective</string>
|
||||
@ -900,80 +900,6 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<layout class="QHBoxLayout" name="ccpmCollectiveChannelBox">
|
||||
<property name="sizeConstraint">
|
||||
<enum>QLayout::SetNoConstraint</enum>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="ccpmCollectiveChLabel">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>11</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="layoutDirection">
|
||||
<enum>Qt::LeftToRight</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Collective Ch</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="ccpmCollectiveChannel">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>90</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -2173,7 +2173,6 @@ void ConfigAirframeWidget::addToDirtyMonitor()
|
||||
addWidget(m_aircraft->widget_3->m_ccpm->ccpmCollectivePassthrough);
|
||||
addWidget(m_aircraft->widget_3->m_ccpm->ccpmLinkRoll);
|
||||
addWidget(m_aircraft->widget_3->m_ccpm->ccpmLinkCyclic);
|
||||
addWidget(m_aircraft->widget_3->m_ccpm->ccpmCollectiveChannel);
|
||||
addWidget(m_aircraft->widget_3->m_ccpm->ccpmRevoSlider);
|
||||
addWidget(m_aircraft->widget_3->m_ccpm->ccpmREVOspinBox);
|
||||
addWidget(m_aircraft->widget_3->m_ccpm->ccpmCollectiveSlider);
|
||||
|
@ -147,9 +147,6 @@ ConfigccpmWidget::ConfigccpmWidget(QWidget *parent) : ConfigTaskWidget(parent)
|
||||
UAVObjectField * curve2source = mixerSettings->getField("Curve2Source");
|
||||
Q_ASSERT(curve2source);
|
||||
|
||||
m_ccpm->ccpmCollectiveChannel->addItems(curve2source->getOptions());
|
||||
m_ccpm->ccpmCollectiveChannel->setCurrentIndex(0);
|
||||
|
||||
QStringList channels;
|
||||
channels << "Channel1" << "Channel2" << "Channel3" << "Channel4" <<
|
||||
"Channel5" << "Channel6" << "Channel7" << "Channel8" << "None";
|
||||
@ -219,7 +216,6 @@ ConfigccpmWidget::ConfigccpmWidget(QWidget *parent) : ConfigTaskWidget(parent)
|
||||
connect(m_ccpm->SwashLvlCancelButton, SIGNAL(clicked()), this, SLOT(SwashLvlCancelButtonPressed()));
|
||||
connect(m_ccpm->SwashLvlFinishButton, SIGNAL(clicked()), this, SLOT(SwashLvlFinishButtonPressed()));
|
||||
|
||||
connect(m_ccpm->ccpmCollectivePassthrough, SIGNAL(clicked()), this, SLOT(SetUIComponentVisibilities()));
|
||||
connect(m_ccpm->ccpmLinkCyclic, SIGNAL(clicked()), this, SLOT(SetUIComponentVisibilities()));
|
||||
connect(m_ccpm->ccpmLinkRoll, SIGNAL(clicked()), this, SLOT(SetUIComponentVisibilities()));
|
||||
|
||||
@ -1016,9 +1012,6 @@ void ConfigccpmWidget::UpdateCCPMOptionsFromUI()
|
||||
//correction angle
|
||||
GUIConfigData.heli.CorrectionAngle = m_ccpm->ccpmCorrectionAngle->value();
|
||||
|
||||
//CollectiveChannel
|
||||
GUIConfigData.heli.CollectiveChannel = m_ccpm->ccpmCollectiveChannel->currentIndex();
|
||||
|
||||
//update sliders
|
||||
if (useCCPM)
|
||||
{
|
||||
@ -1058,10 +1051,7 @@ void ConfigccpmWidget::UpdateCCPMUIFromOptions()
|
||||
|
||||
//correction angle
|
||||
m_ccpm->ccpmCorrectionAngle->setValue(GUIConfigData.heli.CorrectionAngle);
|
||||
|
||||
//CollectiveChannel
|
||||
m_ccpm->ccpmCollectiveChannel->setCurrentIndex(GUIConfigData.heli.CollectiveChannel);
|
||||
|
||||
|
||||
//update sliders
|
||||
m_ccpm->ccpmCollectiveScale->setValue(GUIConfigData.heli.SliderValue0);
|
||||
m_ccpm->ccpmCollectiveScaleBox->setValue(GUIConfigData.heli.SliderValue0);
|
||||
@ -1092,9 +1082,6 @@ void ConfigccpmWidget::SetUIComponentVisibilities()
|
||||
m_ccpm->ccpmPitchMixingBox->setVisible(!GUIConfigData.heli.ccpmCollectivePassthroughState && GUIConfigData.heli.ccpmLinkCyclicState);
|
||||
m_ccpm->ccpmCollectiveScalingBox->setVisible(GUIConfigData.heli.ccpmCollectivePassthroughState || !GUIConfigData.heli.ccpmLinkCyclicState);
|
||||
|
||||
m_ccpm->ccpmCollectiveChLabel->setVisible(GUIConfigData.heli.ccpmCollectivePassthroughState);
|
||||
m_ccpm->ccpmCollectiveChannel->setVisible(GUIConfigData.heli.ccpmCollectivePassthroughState);
|
||||
|
||||
m_ccpm->ccpmLinkCyclic->setVisible(!GUIConfigData.heli.ccpmCollectivePassthroughState);
|
||||
|
||||
m_ccpm->ccpmCyclicScalingBox->setVisible((GUIConfigData.heli.ccpmCollectivePassthroughState || !GUIConfigData.heli.ccpmLinkCyclicState) && GUIConfigData.heli.ccpmLinkRollState);
|
||||
@ -1316,7 +1303,7 @@ void ConfigccpmWidget::sendccpmUpdate()
|
||||
//MixerSettings.Curve2Source = Throttle,Roll,Pitch,Yaw,Accessory0,Accessory1,Accessory2,Accessory3,Accessory4,Accessory5
|
||||
//check if we are using throttle or directly from a channel...
|
||||
if (GUIConfigData.heli.ccpmCollectivePassthroughState)
|
||||
mixerSettingsData.Curve2Source = GUIConfigData.heli.CollectiveChannel;
|
||||
mixerSettingsData.Curve2Source = MixerSettings::CURVE2SOURCE_COLLECTIVE;
|
||||
else
|
||||
mixerSettingsData.Curve2Source = MixerSettings::CURVE2SOURCE_THROTTLE;
|
||||
|
||||
|
@ -57,7 +57,6 @@ typedef struct {
|
||||
uint ccpmCollectivePassthroughState:1;
|
||||
uint ccpmLinkCyclicState:1;
|
||||
uint ccpmLinkRollState:1;
|
||||
uint CollectiveChannel:3;//20bits
|
||||
uint SliderValue0:7;
|
||||
uint SliderValue1:7;
|
||||
uint SliderValue2:7;//41bits
|
||||
|
@ -169,6 +169,7 @@ void ConfigGadgetWidget::onAutopilotConnect() {
|
||||
|
||||
void ConfigGadgetWidget::tabAboutToChange(int i,bool * proceed)
|
||||
{
|
||||
Q_UNUSED(i);
|
||||
*proceed=true;
|
||||
ConfigTaskWidget * wid=qobject_cast<ConfigTaskWidget *>(ftw->currentWidget());
|
||||
if(!wid)
|
||||
|
@ -46,7 +46,7 @@
|
||||
#define STICK_MIN_MOVE -8
|
||||
#define STICK_MAX_MOVE 8
|
||||
|
||||
ConfigInputWidget::ConfigInputWidget(QWidget *parent) : ConfigTaskWidget(parent),wizardStep(wizardWelcome),loop(NULL),skipflag(false),goWizard(NULL)
|
||||
ConfigInputWidget::ConfigInputWidget(QWidget *parent) : ConfigTaskWidget(parent),wizardStep(wizardNone),loop(NULL),skipflag(false),transmitterType(heli)
|
||||
{
|
||||
manualCommandObj = ManualControlCommand::GetInstance(getObjectManager());
|
||||
manualSettingsObj = ManualControlSettings::GetInstance(getObjectManager());
|
||||
@ -56,11 +56,12 @@ ConfigInputWidget::ConfigInputWidget(QWidget *parent) : ConfigTaskWidget(parent)
|
||||
|
||||
setupButtons(m_config->saveRCInputToRAM,m_config->saveRCInputToSD);
|
||||
|
||||
int index=0;
|
||||
unsigned int index=0;
|
||||
foreach(QString name,manualSettingsObj->getFields().at(0)->getElementNames())
|
||||
{
|
||||
Q_ASSERT(index < ManualControlSettings::CHANNELGROUPS_NUMELEM);
|
||||
inputChannelForm * inp=new inputChannelForm(this,index==0);
|
||||
m_config->advancedPage->layout()->addWidget(inp);
|
||||
m_config->channelSettings->layout()->addWidget(inp);
|
||||
inp->ui->channelName->setText(name);
|
||||
addUAVObjectToWidgetRelation("ManualControlSettings","ChannelGroups",inp->ui->channelGroup,index);
|
||||
addUAVObjectToWidgetRelation("ManualControlSettings","ChannelNumber",inp->ui->channelNumber,index);
|
||||
@ -69,12 +70,9 @@ ConfigInputWidget::ConfigInputWidget(QWidget *parent) : ConfigTaskWidget(parent)
|
||||
addUAVObjectToWidgetRelation("ManualControlSettings","ChannelMax",inp->ui->channelMax,index);
|
||||
++index;
|
||||
}
|
||||
goWizard=new QPushButton(tr("Start Wizard"),this);
|
||||
m_config->advancedPage->layout()->addWidget(goWizard);
|
||||
connect(goWizard,SIGNAL(clicked()),this,SLOT(goToNormalWizard()));
|
||||
goSimpleWizard=new QPushButton(tr("Start Simple Wizard"),this);
|
||||
m_config->advancedPage->layout()->addWidget(goSimpleWizard);
|
||||
connect(goSimpleWizard,SIGNAL(clicked()),this,SLOT(goToSimpleWizard()));
|
||||
|
||||
connect(m_config->configurationWizard,SIGNAL(clicked()),this,SLOT(goToWizard()));
|
||||
connect(m_config->runCalibration,SIGNAL(toggled(bool)),this, SLOT(simpleCalibration(bool)));
|
||||
|
||||
connect(m_config->wzNext,SIGNAL(clicked()),this,SLOT(wzNext()));
|
||||
connect(m_config->wzCancel,SIGNAL(clicked()),this,SLOT(wzCancel()));
|
||||
@ -98,8 +96,6 @@ ConfigInputWidget::ConfigInputWidget(QWidget *parent) : ConfigTaskWidget(parent)
|
||||
addUAVObjectToWidgetRelation("ManualControlSettings","Arming",m_config->armControl);
|
||||
addUAVObjectToWidgetRelation("ManualControlSettings","ArmedTimeout",m_config->armTimeout,0,1000);
|
||||
connect( ManualControlCommand::GetInstance(getObjectManager()),SIGNAL(objectUpdated(UAVObject*)),this,SLOT(moveFMSlider()));
|
||||
addWidget(goWizard);
|
||||
addWidget(goSimpleWizard);
|
||||
enableControls(false);
|
||||
|
||||
populateWidgets();
|
||||
@ -227,6 +223,25 @@ ConfigInputWidget::ConfigInputWidget(QWidget *parent) : ConfigTaskWidget(parent)
|
||||
m_config->graphicsView->fitInView(m_txMainBody, Qt::KeepAspectRatio );
|
||||
animate=new QTimer(this);
|
||||
connect(animate,SIGNAL(timeout()),this,SLOT(moveTxControls()));
|
||||
|
||||
heliChannelOrder << ManualControlSettings::CHANNELGROUPS_COLLECTIVE <<
|
||||
ManualControlSettings::CHANNELGROUPS_THROTTLE <<
|
||||
ManualControlSettings::CHANNELGROUPS_ROLL <<
|
||||
ManualControlSettings::CHANNELGROUPS_PITCH <<
|
||||
ManualControlSettings::CHANNELGROUPS_YAW <<
|
||||
ManualControlSettings::CHANNELGROUPS_FLIGHTMODE <<
|
||||
ManualControlSettings::CHANNELGROUPS_ACCESSORY0 <<
|
||||
ManualControlSettings::CHANNELGROUPS_ACCESSORY1 <<
|
||||
ManualControlSettings::CHANNELGROUPS_ACCESSORY2;
|
||||
|
||||
acroChannelOrder << ManualControlSettings::CHANNELGROUPS_THROTTLE <<
|
||||
ManualControlSettings::CHANNELGROUPS_ROLL <<
|
||||
ManualControlSettings::CHANNELGROUPS_PITCH <<
|
||||
ManualControlSettings::CHANNELGROUPS_YAW <<
|
||||
ManualControlSettings::CHANNELGROUPS_FLIGHTMODE <<
|
||||
ManualControlSettings::CHANNELGROUPS_ACCESSORY0 <<
|
||||
ManualControlSettings::CHANNELGROUPS_ACCESSORY1 <<
|
||||
ManualControlSettings::CHANNELGROUPS_ACCESSORY2;
|
||||
}
|
||||
void ConfigInputWidget::resetTxControls()
|
||||
{
|
||||
@ -257,16 +272,6 @@ void ConfigInputWidget::openHelp()
|
||||
|
||||
QDesktopServices::openUrl( QUrl("http://wiki.openpilot.org/display/Doc/Input+Configuration", QUrl::StrictMode) );
|
||||
}
|
||||
void ConfigInputWidget::goToSimpleWizard()
|
||||
{
|
||||
isSimple=true;
|
||||
goToWizard();
|
||||
}
|
||||
void ConfigInputWidget::goToNormalWizard()
|
||||
{
|
||||
isSimple=false;
|
||||
goToWizard();
|
||||
}
|
||||
void ConfigInputWidget::goToWizard()
|
||||
{
|
||||
QMessageBox msgBox;
|
||||
@ -275,7 +280,7 @@ void ConfigInputWidget::goToWizard()
|
||||
msgBox.setStandardButtons(QMessageBox::Ok);
|
||||
msgBox.setDefaultButton(QMessageBox::Ok);
|
||||
msgBox.exec();
|
||||
setupWizardWidget(wizardWelcome);
|
||||
wizardSetUpStep(wizardWelcome);
|
||||
m_config->graphicsView->fitInView(m_txBackground, Qt::KeepAspectRatio );
|
||||
}
|
||||
|
||||
@ -284,228 +289,51 @@ void ConfigInputWidget::wzCancel()
|
||||
dimOtherControls(false);
|
||||
manualCommandObj->setMetadata(manualCommandObj->getDefaultMetadata());
|
||||
m_config->stackedWidget->setCurrentIndex(0);
|
||||
foreach (QWidget * wd, extraWidgets)
|
||||
{
|
||||
if(wd)
|
||||
delete wd;
|
||||
}
|
||||
extraWidgets.clear();
|
||||
switch(wizardStep)
|
||||
{
|
||||
case wizardWelcome:
|
||||
break;
|
||||
case wizardChooseMode:
|
||||
break;
|
||||
case wizardIdentifySticks:
|
||||
disconnect(receiverActivityObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(identifyControls()));
|
||||
break;
|
||||
case wizardIdentifyCenter:
|
||||
break;
|
||||
case wizardIdentifyLimits:
|
||||
disconnect(manualCommandObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(identifyLimits()));
|
||||
manualSettingsObj->setData(manualSettingsData);
|
||||
break;
|
||||
case wizardIdentifyInverted:
|
||||
break;
|
||||
case wizardFinish:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
wizardStep=wizardWelcome;
|
||||
|
||||
if(wizardStep != wizardNone)
|
||||
wizardTearDownStep(wizardStep);
|
||||
wizardStep=wizardNone;
|
||||
|
||||
// Load settings back from beginning of wizard
|
||||
manualSettingsObj->setData(previousManualSettingsData);
|
||||
}
|
||||
|
||||
void ConfigInputWidget::wzNext()
|
||||
{
|
||||
setupWizardWidget(wizardStep+1);
|
||||
}
|
||||
// In identify sticks mode the next button can indicate
|
||||
// channel advance
|
||||
if(wizardStep != wizardNone &&
|
||||
wizardStep != wizardIdentifySticks)
|
||||
wizardTearDownStep(wizardStep);
|
||||
|
||||
void ConfigInputWidget::wzBack()
|
||||
{
|
||||
setupWizardWidget(wizardStep-1);
|
||||
}
|
||||
|
||||
void ConfigInputWidget::setupWizardWidget(int step)
|
||||
{
|
||||
if(step==wizardWelcome)
|
||||
{
|
||||
m_config->graphicsView->setVisible(false);
|
||||
setTxMovement(nothing);
|
||||
if(wizardStep==wizardChooseMode)
|
||||
{
|
||||
delete extraWidgets.at(0);
|
||||
delete extraWidgets.at(1);
|
||||
extraWidgets.clear();
|
||||
// State transitions for next button
|
||||
switch(wizardStep) {
|
||||
case wizardWelcome:
|
||||
wizardSetUpStep(wizardChooseMode);
|
||||
break;
|
||||
case wizardChooseMode:
|
||||
wizardSetUpStep(wizardChooseType);
|
||||
break;
|
||||
case wizardChooseType:
|
||||
wizardSetUpStep(wizardIdentifySticks);
|
||||
break;
|
||||
case wizardIdentifySticks:
|
||||
nextChannel();
|
||||
if(currentChannelNum==-1) { // Gone through all channels
|
||||
wizardTearDownStep(wizardIdentifySticks);
|
||||
wizardSetUpStep(wizardIdentifyCenter);
|
||||
}
|
||||
manualSettingsData=manualSettingsObj->getData();
|
||||
manualSettingsData.Arming=ManualControlSettings::ARMING_ALWAYSDISARMED;
|
||||
manualSettingsObj->setData(manualSettingsData);
|
||||
m_config->wzText->setText(tr("Welcome to the inputs configuration wizard.\n"
|
||||
"Please follow the instructions on the screen and only move your controls when asked to.\n"
|
||||
"Make sure you already configured your hardware settings on the proper tab and restarted your board.\n"
|
||||
"At any time you can press 'back' to return to the previous screeen or 'Cancel' to cancel the wizard.\n"));
|
||||
m_config->stackedWidget->setCurrentIndex(1);
|
||||
m_config->wzBack->setEnabled(false);
|
||||
wizardStep=wizardWelcome;
|
||||
}
|
||||
else if(step==wizardChooseMode)
|
||||
{
|
||||
m_config->graphicsView->setVisible(true);
|
||||
setTxMovement(nothing);
|
||||
if(wizardStep==wizardIdentifySticks)
|
||||
{
|
||||
disconnect(receiverActivityObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(identifyControls()));
|
||||
m_config->wzNext->setEnabled(true);
|
||||
}
|
||||
m_config->wzText->setText(tr("Please choose your transmiter type.\n"
|
||||
"Mode 1 means your throttle stick is on the right\n"
|
||||
"Mode 2 means your throttle stick is on the left\n"));
|
||||
m_config->wzBack->setEnabled(true);
|
||||
QRadioButton * mode1=new QRadioButton(tr("Mode 1"),this);
|
||||
QRadioButton * mode2=new QRadioButton(tr("Mode 2"),this);
|
||||
mode2->setChecked(true);
|
||||
extraWidgets.clear();
|
||||
extraWidgets.append(mode1);
|
||||
extraWidgets.append(mode2);
|
||||
m_config->checkBoxesLayout->layout()->addWidget(mode1);
|
||||
m_config->checkBoxesLayout->layout()->addWidget(mode2);
|
||||
wizardStep=wizardChooseMode;
|
||||
}
|
||||
else if(step==wizardIdentifySticks && !isSimple)
|
||||
{
|
||||
usedChannels.clear();
|
||||
if(wizardStep==wizardChooseMode)
|
||||
{
|
||||
QRadioButton * mode=qobject_cast<QRadioButton *>(extraWidgets.at(0));
|
||||
if(mode->isChecked())
|
||||
transmitterMode=mode1;
|
||||
else
|
||||
transmitterMode=mode2;
|
||||
delete extraWidgets.at(0);
|
||||
delete extraWidgets.at(1);
|
||||
extraWidgets.clear();
|
||||
}
|
||||
wizardStep=wizardIdentifySticks;
|
||||
currentCommand=0;
|
||||
setMoveFromCommand(currentCommand);
|
||||
m_config->wzText->setText(QString(tr("Please move each control once at a time according to the instructions and picture below.\n\n"
|
||||
"Move the %1 stick")).arg(manualSettingsObj->getField("ChannelGroups")->getElementNames().at(currentCommand)));
|
||||
manualSettingsData=manualSettingsObj->getData();
|
||||
connect(receiverActivityObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(identifyControls()));
|
||||
m_config->wzNext->setEnabled(false);
|
||||
}
|
||||
else if(step==wizardIdentifyCenter || (isSimple && step==wizardIdentifySticks))
|
||||
{
|
||||
if(wizardStep==wizardChooseMode)
|
||||
{
|
||||
QRadioButton * mode=qobject_cast<QRadioButton *>(extraWidgets.at(0));
|
||||
if(mode->isChecked())
|
||||
transmitterMode=mode1;
|
||||
else
|
||||
transmitterMode=mode2;
|
||||
delete extraWidgets.at(0);
|
||||
delete extraWidgets.at(1);
|
||||
extraWidgets.clear();
|
||||
}
|
||||
setTxMovement(centerAll);
|
||||
if(wizardStep==wizardIdentifySticks)
|
||||
disconnect(receiverActivityObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(identifyControls()));
|
||||
else
|
||||
{
|
||||
disconnect(manualCommandObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(identifyLimits()));
|
||||
manualSettingsObj->setData(manualSettingsData);
|
||||
manualCommandObj->setMetadata(manualCommandObj->getDefaultMetadata());
|
||||
}
|
||||
wizardStep=wizardIdentifyCenter;
|
||||
m_config->wzText->setText(QString(tr("Please center all control controls and press next when ready (if your FlightMode switch has only two positions, leave it on either position)")));
|
||||
}
|
||||
else if(step==wizardIdentifyLimits)
|
||||
{
|
||||
dimOtherControls(false);
|
||||
setTxMovement(moveAll);
|
||||
if(wizardStep==wizardIdentifyCenter)
|
||||
{
|
||||
wizardStep=wizardIdentifyLimits;
|
||||
manualCommandData=manualCommandObj->getData();
|
||||
manualSettingsData=manualSettingsObj->getData();
|
||||
for(unsigned int i=0;i<ManualControlCommand::CHANNEL_NUMELEM;++i)
|
||||
{
|
||||
manualSettingsData.ChannelNeutral[i]=manualCommandData.Channel[i];
|
||||
}
|
||||
manualSettingsObj->setData(manualSettingsData);
|
||||
}
|
||||
if(wizardStep==wizardIdentifyInverted)
|
||||
{
|
||||
foreach(QWidget * wd,extraWidgets)
|
||||
{
|
||||
QCheckBox * cb=qobject_cast<QCheckBox *>(wd);
|
||||
if(cb)
|
||||
{
|
||||
disconnect(cb,SIGNAL(toggled(bool)),this,SLOT(invertControls()));
|
||||
delete cb;
|
||||
}
|
||||
}
|
||||
}
|
||||
extraWidgets.clear();
|
||||
disconnect(manualCommandObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(moveSticks()));
|
||||
wizardStep=wizardIdentifyLimits;
|
||||
m_config->wzText->setText(QString(tr("Please move all controls to their maximum extents on both directions and press next when ready")));
|
||||
UAVObject::Metadata mdata= manualCommandObj->getMetadata();
|
||||
mdata.flightTelemetryUpdateMode = UAVObject::UPDATEMODE_PERIODIC;
|
||||
mdata.flightTelemetryUpdatePeriod = 150;
|
||||
manualCommandObj->setMetadata(mdata);
|
||||
manualSettingsData=manualSettingsObj->getData();
|
||||
for(uint i=0;i<ManualControlSettings::CHANNELMAX_NUMELEM;++i)
|
||||
{
|
||||
manualSettingsData.ChannelMin[i]=manualSettingsData.ChannelNeutral[i];
|
||||
manualSettingsData.ChannelMax[i]=manualSettingsData.ChannelNeutral[i];
|
||||
}
|
||||
connect(manualCommandObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(identifyLimits()));
|
||||
}
|
||||
else if(step==wizardIdentifyInverted)
|
||||
{
|
||||
dimOtherControls(true);
|
||||
setTxMovement(nothing);
|
||||
if(wizardStep==wizardIdentifyLimits)
|
||||
{
|
||||
disconnect(manualCommandObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(identifyLimits()));
|
||||
manualSettingsObj->setData(manualSettingsData);
|
||||
}
|
||||
extraWidgets.clear();
|
||||
foreach(QString name,manualSettingsObj->getFields().at(0)->getElementNames())
|
||||
{
|
||||
if(!name.contains("Access") && !name.contains("Flight"))
|
||||
{
|
||||
QCheckBox * cb=new QCheckBox(name,this);
|
||||
extraWidgets.append(cb);
|
||||
m_config->checkBoxesLayout->layout()->addWidget(cb);
|
||||
connect(cb,SIGNAL(toggled(bool)),this,SLOT(invertControls()));
|
||||
}
|
||||
}
|
||||
connect(manualCommandObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(moveSticks()));
|
||||
wizardStep=wizardIdentifyInverted;
|
||||
m_config->wzText->setText(QString(tr("Please check the picture below and check all the sticks which show an inverted movement and press next when ready")));
|
||||
}
|
||||
else if(step==wizardFinish)
|
||||
{
|
||||
foreach(QWidget * wd,extraWidgets)
|
||||
{
|
||||
QCheckBox * cb=qobject_cast<QCheckBox *>(wd);
|
||||
if(cb)
|
||||
{
|
||||
disconnect(cb,SIGNAL(toggled(bool)),this,SLOT(invertControls()));
|
||||
delete cb;
|
||||
}
|
||||
}
|
||||
wizardStep=wizardFinish;
|
||||
extraWidgets.clear();
|
||||
m_config->wzText->setText(QString(tr("You have completed this wizard, please check below if the picture below mimics your sticks movement.\n"
|
||||
"This new settings aren't saved to the board yet, after pressing next you will go to the initial screen where you can do that.")));
|
||||
|
||||
}
|
||||
|
||||
else if(step==wizardFinish+1)
|
||||
{
|
||||
break;
|
||||
case wizardIdentifyCenter:
|
||||
wizardSetUpStep(wizardIdentifyLimits);
|
||||
break;
|
||||
case wizardIdentifyLimits:
|
||||
wizardSetUpStep(wizardIdentifyInverted);
|
||||
break;
|
||||
case wizardIdentifyInverted:
|
||||
wizardSetUpStep(wizardFinish);
|
||||
break;
|
||||
case wizardFinish:
|
||||
setTxMovement(nothing);
|
||||
manualCommandObj->setMetadata(manualCommandObj->getDefaultMetadata());
|
||||
disconnect(manualCommandObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(moveSticks()));
|
||||
@ -522,14 +350,560 @@ void ConfigInputWidget::setupWizardWidget(int step)
|
||||
}
|
||||
manualSettingsObj->setData(manualSettingsData);
|
||||
m_config->stackedWidget->setCurrentIndex(0);
|
||||
wizardStep=wizardWelcome;
|
||||
wizardStep=wizardNone;
|
||||
break;
|
||||
default:
|
||||
Q_ASSERT(0);
|
||||
}
|
||||
}
|
||||
|
||||
void ConfigInputWidget::wzBack()
|
||||
{
|
||||
if(wizardStep != wizardNone &&
|
||||
wizardStep != wizardIdentifySticks)
|
||||
wizardTearDownStep(wizardStep);
|
||||
|
||||
// State transitions for next button
|
||||
switch(wizardStep) {
|
||||
case wizardChooseMode:
|
||||
wizardSetUpStep(wizardWelcome);
|
||||
break;
|
||||
case wizardChooseType:
|
||||
wizardSetUpStep(wizardChooseMode);
|
||||
break;
|
||||
case wizardIdentifySticks:
|
||||
prevChannel();
|
||||
if(currentChannelNum == -1) {
|
||||
wizardTearDownStep(wizardIdentifySticks);
|
||||
wizardSetUpStep(wizardChooseType);
|
||||
}
|
||||
break;
|
||||
case wizardIdentifyCenter:
|
||||
wizardSetUpStep(wizardIdentifySticks);
|
||||
break;
|
||||
case wizardIdentifyLimits:
|
||||
wizardSetUpStep(wizardIdentifyCenter);
|
||||
break;
|
||||
case wizardIdentifyInverted:
|
||||
wizardSetUpStep(wizardIdentifyLimits);
|
||||
break;
|
||||
case wizardFinish:
|
||||
wizardSetUpStep(wizardIdentifyInverted);
|
||||
break;
|
||||
default:
|
||||
Q_ASSERT(0);
|
||||
}
|
||||
}
|
||||
|
||||
void ConfigInputWidget::wizardSetUpStep(enum wizardSteps step)
|
||||
{
|
||||
switch(step) {
|
||||
case wizardWelcome:
|
||||
m_config->graphicsView->setVisible(false);
|
||||
setTxMovement(nothing);
|
||||
manualSettingsData=manualSettingsObj->getData();
|
||||
manualSettingsData.Arming=ManualControlSettings::ARMING_ALWAYSDISARMED;
|
||||
previousManualSettingsData = manualSettingsData;
|
||||
manualSettingsObj->setData(manualSettingsData);
|
||||
m_config->wzText->setText(tr("Welcome to the inputs configuration wizard.\n"
|
||||
"Please follow the instructions on the screen and only move your controls when asked to.\n"
|
||||
"Make sure you already configured your hardware settings on the proper tab and restarted your board.\n"
|
||||
"At any time you can press 'back' to return to the previous screeen or 'Cancel' to cancel the wizard.\n"));
|
||||
m_config->stackedWidget->setCurrentIndex(1);
|
||||
m_config->wzBack->setEnabled(false);
|
||||
break;
|
||||
case wizardChooseMode:
|
||||
{
|
||||
m_config->graphicsView->setVisible(true);
|
||||
setTxMovement(nothing);
|
||||
m_config->wzText->setText(tr("Please choose your transmiter type.\n"
|
||||
"Mode 1 means your throttle stick is on the right\n"
|
||||
"Mode 2 means your throttle stick is on the left\n"));
|
||||
m_config->wzBack->setEnabled(true);
|
||||
QRadioButton * mode1=new QRadioButton(tr("Mode 1"),this);
|
||||
QRadioButton * mode2=new QRadioButton(tr("Mode 2"),this);
|
||||
mode2->setChecked(true);
|
||||
extraWidgets.clear();
|
||||
extraWidgets.append(mode1);
|
||||
extraWidgets.append(mode2);
|
||||
m_config->checkBoxesLayout->layout()->addWidget(mode1);
|
||||
m_config->checkBoxesLayout->layout()->addWidget(mode2);
|
||||
}
|
||||
break;
|
||||
case wizardChooseType:
|
||||
{
|
||||
m_config->wzText->setText(tr("Please choose your transmiter mode.\n"
|
||||
"Acro means normal transmitter\n"
|
||||
"Heli means there is a collective pitch and throttle input\n"
|
||||
"If you are using a heli transmitter please engage throttle hold now please.\n"));
|
||||
m_config->wzBack->setEnabled(true);
|
||||
QRadioButton * typeAcro=new QRadioButton(tr("Acro"),this);
|
||||
QRadioButton * typeHeli=new QRadioButton(tr("Heli"),this);
|
||||
typeAcro->setChecked(true);
|
||||
typeHeli->setChecked(false);
|
||||
extraWidgets.clear();
|
||||
extraWidgets.append(typeAcro);
|
||||
extraWidgets.append(typeHeli);
|
||||
m_config->checkBoxesLayout->layout()->addWidget(typeAcro);
|
||||
m_config->checkBoxesLayout->layout()->addWidget(typeHeli);
|
||||
wizardStep=wizardChooseType;
|
||||
}
|
||||
break;
|
||||
case wizardIdentifySticks:
|
||||
usedChannels.clear();
|
||||
currentChannelNum=-1;
|
||||
nextChannel();
|
||||
manualSettingsData=manualSettingsObj->getData();
|
||||
connect(receiverActivityObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(identifyControls()));
|
||||
m_config->wzNext->setEnabled(false);
|
||||
break;
|
||||
case wizardIdentifyCenter:
|
||||
setTxMovement(centerAll);
|
||||
m_config->wzText->setText(QString(tr("Please center all control controls and press next when ready (if your FlightMode switch has only two positions, leave it on either position)")));
|
||||
break;
|
||||
case wizardIdentifyLimits:
|
||||
{
|
||||
dimOtherControls(false);
|
||||
setTxMovement(moveAll);
|
||||
m_config->wzText->setText(QString(tr("Please move all controls to their maximum extents on both directions and press next when ready")));
|
||||
fastMdata();
|
||||
manualSettingsData=manualSettingsObj->getData();
|
||||
for(uint i=0;i<ManualControlSettings::CHANNELMAX_NUMELEM;++i)
|
||||
{
|
||||
manualSettingsData.ChannelMin[i]=manualSettingsData.ChannelNeutral[i];
|
||||
manualSettingsData.ChannelMax[i]=manualSettingsData.ChannelNeutral[i];
|
||||
}
|
||||
connect(manualCommandObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(identifyLimits()));
|
||||
}
|
||||
break;
|
||||
case wizardIdentifyInverted:
|
||||
dimOtherControls(true);
|
||||
setTxMovement(nothing);
|
||||
extraWidgets.clear();
|
||||
foreach(QString name,manualSettingsObj->getFields().at(0)->getElementNames())
|
||||
{
|
||||
if(!name.contains("Access") && !name.contains("Flight"))
|
||||
{
|
||||
QCheckBox * cb=new QCheckBox(name,this);
|
||||
extraWidgets.append(cb);
|
||||
m_config->checkBoxesLayout->layout()->addWidget(cb);
|
||||
connect(cb,SIGNAL(toggled(bool)),this,SLOT(invertControls()));
|
||||
}
|
||||
}
|
||||
connect(manualCommandObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(moveSticks()));
|
||||
m_config->wzText->setText(QString(tr("Please check the picture below and check all the sticks which show an inverted movement and press next when ready")));
|
||||
fastMdata();
|
||||
break;
|
||||
case wizardFinish:
|
||||
foreach(QWidget * wd,extraWidgets)
|
||||
{
|
||||
QCheckBox * cb=qobject_cast<QCheckBox *>(wd);
|
||||
if(cb)
|
||||
{
|
||||
disconnect(cb,SIGNAL(toggled(bool)),this,SLOT(invertControls()));
|
||||
delete cb;
|
||||
}
|
||||
}
|
||||
extraWidgets.clear();
|
||||
connect(manualCommandObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(moveSticks()));
|
||||
m_config->wzText->setText(QString(tr("You have completed this wizard, please check below if the picture below mimics your sticks movement.\n"
|
||||
"This new settings aren't saved to the board yet, after pressing next you will go to the initial screen where you can do that.")));
|
||||
fastMdata();
|
||||
|
||||
manualSettingsData.ChannelNeutral[ManualControlSettings::CHANNELNEUTRAL_THROTTLE]=
|
||||
manualSettingsData.ChannelMin[ManualControlSettings::CHANNELMIN_THROTTLE]+
|
||||
((manualSettingsData.ChannelMax[ManualControlSettings::CHANNELMAX_THROTTLE]-
|
||||
manualSettingsData.ChannelMin[ManualControlSettings::CHANNELMIN_THROTTLE])*0.02);
|
||||
if((abs(manualSettingsData.ChannelMax[ManualControlSettings::CHANNELMAX_FLIGHTMODE]-manualSettingsData.ChannelNeutral[ManualControlSettings::CHANNELNEUTRAL_FLIGHTMODE])<100) ||
|
||||
(abs(manualSettingsData.ChannelMin[ManualControlSettings::CHANNELMIN_FLIGHTMODE]-manualSettingsData.ChannelNeutral[ManualControlSettings::CHANNELNEUTRAL_FLIGHTMODE])<100))
|
||||
{
|
||||
manualSettingsData.ChannelNeutral[ManualControlSettings::CHANNELNEUTRAL_FLIGHTMODE]=manualSettingsData.ChannelMin[ManualControlSettings::CHANNELMIN_FLIGHTMODE]+
|
||||
(manualSettingsData.ChannelMax[ManualControlSettings::CHANNELMAX_FLIGHTMODE]-manualSettingsData.ChannelMin[ManualControlSettings::CHANNELMIN_FLIGHTMODE])/2;
|
||||
}
|
||||
manualSettingsObj->setData(manualSettingsData);
|
||||
break;
|
||||
default:
|
||||
Q_ASSERT(0);
|
||||
}
|
||||
wizardStep = step;
|
||||
}
|
||||
|
||||
void ConfigInputWidget::wizardTearDownStep(enum wizardSteps step)
|
||||
{
|
||||
QRadioButton * mode, * type;
|
||||
Q_ASSERT(step == wizardStep);
|
||||
switch(step) {
|
||||
case wizardWelcome:
|
||||
break;
|
||||
case wizardChooseMode:
|
||||
mode=qobject_cast<QRadioButton *>(extraWidgets.at(0));
|
||||
if(mode->isChecked())
|
||||
transmitterMode=mode1;
|
||||
else
|
||||
transmitterMode=mode2;
|
||||
delete extraWidgets.at(0);
|
||||
delete extraWidgets.at(1);
|
||||
extraWidgets.clear();
|
||||
break;
|
||||
case wizardChooseType:
|
||||
type=qobject_cast<QRadioButton *>(extraWidgets.at(0));
|
||||
if(type->isChecked())
|
||||
transmitterType=acro;
|
||||
else
|
||||
transmitterType=heli;
|
||||
delete extraWidgets.at(0);
|
||||
delete extraWidgets.at(1);
|
||||
extraWidgets.clear();
|
||||
break;
|
||||
case wizardIdentifySticks:
|
||||
disconnect(receiverActivityObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(identifyControls()));
|
||||
m_config->wzNext->setEnabled(true);
|
||||
break;
|
||||
case wizardIdentifyCenter:
|
||||
manualCommandData=manualCommandObj->getData();
|
||||
manualSettingsData=manualSettingsObj->getData();
|
||||
for(unsigned int i=0;i<ManualControlCommand::CHANNEL_NUMELEM;++i)
|
||||
{
|
||||
manualSettingsData.ChannelNeutral[i]=manualCommandData.Channel[i];
|
||||
}
|
||||
manualSettingsObj->setData(manualSettingsData);
|
||||
break;
|
||||
case wizardIdentifyLimits:
|
||||
disconnect(manualCommandObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(identifyLimits()));
|
||||
manualSettingsObj->setData(manualSettingsData);
|
||||
restoreMdata();
|
||||
break;
|
||||
case wizardIdentifyInverted:
|
||||
foreach(QWidget * wd,extraWidgets)
|
||||
{
|
||||
QCheckBox * cb=qobject_cast<QCheckBox *>(wd);
|
||||
if(cb)
|
||||
{
|
||||
disconnect(cb,SIGNAL(toggled(bool)),this,SLOT(invertControls()));
|
||||
delete cb;
|
||||
}
|
||||
}
|
||||
extraWidgets.clear();
|
||||
disconnect(manualCommandObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(moveSticks()));
|
||||
restoreMdata();
|
||||
break;
|
||||
case wizardFinish:
|
||||
setTxMovement(nothing);
|
||||
m_config->stackedWidget->setCurrentIndex(0);
|
||||
disconnect(manualCommandObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(moveSticks()));
|
||||
restoreMdata();
|
||||
break;
|
||||
default:
|
||||
Q_ASSERT(0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set manual control command to fast updates
|
||||
*/
|
||||
void ConfigInputWidget::fastMdata()
|
||||
{
|
||||
manualControlMdata = manualCommandObj->getMetadata();
|
||||
UAVObject::Metadata mdata = manualControlMdata;
|
||||
mdata.flightTelemetryUpdateMode = UAVObject::UPDATEMODE_PERIODIC;
|
||||
mdata.flightTelemetryUpdatePeriod = 150;
|
||||
manualCommandObj->setMetadata(mdata);
|
||||
}
|
||||
|
||||
/**
|
||||
* Restore previous update settings for manual control data
|
||||
*/
|
||||
void ConfigInputWidget::restoreMdata()
|
||||
{
|
||||
manualCommandObj->setMetadata(manualControlMdata);
|
||||
}
|
||||
|
||||
//void ConfigInputWidget::setupWizardWidget(int step)
|
||||
//{
|
||||
// if(step==wizardWelcome)
|
||||
// {
|
||||
// m_config->graphicsView->setVisible(false);
|
||||
// setTxMovement(nothing);
|
||||
// if(wizardStep==wizardChooseMode)
|
||||
// {
|
||||
// delete extraWidgets.at(0);
|
||||
// delete extraWidgets.at(1);
|
||||
// extraWidgets.clear();
|
||||
// }
|
||||
// manualSettingsData=manualSettingsObj->getData();
|
||||
// manualSettingsData.Arming=ManualControlSettings::ARMING_ALWAYSDISARMED;
|
||||
// manualSettingsObj->setData(manualSettingsData);
|
||||
// m_config->wzText->setText(tr("Welcome to the inputs configuration wizard.\n"
|
||||
// "Please follow the instructions on the screen and only move your controls when asked to.\n"
|
||||
// "Make sure you already configured your hardware settings on the proper tab and restarted your board.\n"
|
||||
// "At any time you can press 'back' to return to the previous screeen or 'Cancel' to cancel the wizard.\n"));
|
||||
// m_config->stackedWidget->setCurrentIndex(1);
|
||||
// m_config->wzBack->setEnabled(false);
|
||||
// wizardStep=wizardWelcome;
|
||||
// }
|
||||
// else if(step==wizardChooseMode)
|
||||
// {
|
||||
// m_config->graphicsView->setVisible(true);
|
||||
// setTxMovement(nothing);
|
||||
// if(wizardStep==wizardIdentifySticks)
|
||||
// {
|
||||
// disconnect(receiverActivityObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(identifyControls()));
|
||||
// m_config->wzNext->setEnabled(true);
|
||||
// }
|
||||
// m_config->wzText->setText(tr("Please choose your transmiter type.\n"
|
||||
// "Mode 1 means your throttle stick is on the right\n"
|
||||
// "Mode 2 means your throttle stick is on the left\n"));
|
||||
// m_config->wzBack->setEnabled(true);
|
||||
// QRadioButton * mode1=new QRadioButton(tr("Mode 1"),this);
|
||||
// QRadioButton * mode2=new QRadioButton(tr("Mode 2"),this);
|
||||
// mode2->setChecked(true);
|
||||
// extraWidgets.clear();
|
||||
// extraWidgets.append(mode1);
|
||||
// extraWidgets.append(mode2);
|
||||
// m_config->checkBoxesLayout->layout()->addWidget(mode1);
|
||||
// m_config->checkBoxesLayout->layout()->addWidget(mode2);
|
||||
// wizardStep=wizardChooseMode;
|
||||
// }
|
||||
// else if(step==wizardChooseType)
|
||||
// {
|
||||
// if(wizardStep==wizardChooseMode)
|
||||
// {
|
||||
// QRadioButton * mode=qobject_cast<QRadioButton *>(extraWidgets.at(0));
|
||||
// if(mode->isChecked())
|
||||
// transmitterMode=mode1;
|
||||
// else
|
||||
// transmitterMode=mode2;
|
||||
// delete extraWidgets.at(0);
|
||||
// delete extraWidgets.at(1);
|
||||
// extraWidgets.clear();
|
||||
// }
|
||||
|
||||
// m_config->wzText->setText(tr("Please choose your transmiter mode.\n"
|
||||
// "Acro means normal transmitter\n"
|
||||
// "Heli means there is a collective pitch and throttle input\n"));
|
||||
// m_config->wzBack->setEnabled(true);
|
||||
// QRadioButton * typeAcro=new QRadioButton(tr("Acro"),this);
|
||||
// QRadioButton * typeHeli=new QRadioButton(tr("Heli"),this);
|
||||
// typeAcro->setChecked(true);
|
||||
// typeHeli->setChecked(false);
|
||||
// extraWidgets.clear();
|
||||
// extraWidgets.append(typeAcro);
|
||||
// extraWidgets.append(typeHeli);
|
||||
// m_config->checkBoxesLayout->layout()->addWidget(typeAcro);
|
||||
// m_config->checkBoxesLayout->layout()->addWidget(typeHeli);
|
||||
// wizardStep=wizardChooseType;
|
||||
// } else if(step==wizardIdentifySticks && !isSimple) {
|
||||
// usedChannels.clear();
|
||||
// if(wizardStep==wizardChooseType)
|
||||
// {
|
||||
// qDebug() << "Chosing type";
|
||||
// QRadioButton * type=qobject_cast<QRadioButton *>(extraWidgets.at(0));
|
||||
// if(type->isChecked())
|
||||
// transmitterType=acro;
|
||||
// else
|
||||
// transmitterType=heli;
|
||||
// qDebug() << "Checked: " << type->isChecked() << " " << "type is" << transmitterType;
|
||||
// delete extraWidgets.at(0);
|
||||
// delete extraWidgets.at(1);
|
||||
// extraWidgets.clear();
|
||||
// }
|
||||
// wizardStep=wizardIdentifySticks;
|
||||
// currentCommand=0;
|
||||
// getChannelFromStep(currentCommand);
|
||||
// manualSettingsData=manualSettingsObj->getData();
|
||||
// connect(receiverActivityObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(identifyControls()));
|
||||
// m_config->wzNext->setEnabled(false);
|
||||
// }
|
||||
// else if(step==wizardIdentifyCenter || (isSimple && step==wizardIdentifySticks))
|
||||
// {
|
||||
// setTxMovement(centerAll);
|
||||
// if(wizardStep==wizardIdentifySticks)
|
||||
// disconnect(receiverActivityObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(identifyControls()));
|
||||
// else
|
||||
// {
|
||||
// disconnect(manualCommandObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(identifyLimits()));
|
||||
// manualSettingsObj->setData(manualSettingsData);
|
||||
// manualCommandObj->setMetadata(manualCommandObj->getDefaultMetadata());
|
||||
// }
|
||||
// wizardStep=wizardIdentifyCenter;
|
||||
// m_config->wzText->setText(QString(tr("Please center all control controls and press next when ready (if your FlightMode switch has only two positions, leave it on either position)")));
|
||||
// }
|
||||
// else if(step==wizardIdentifyLimits)
|
||||
// {
|
||||
// dimOtherControls(false);
|
||||
// setTxMovement(moveAll);
|
||||
// if(wizardStep==wizardIdentifyCenter)
|
||||
// {
|
||||
// wizardStep=wizardIdentifyLimits;
|
||||
// manualCommandData=manualCommandObj->getData();
|
||||
// manualSettingsData=manualSettingsObj->getData();
|
||||
// for(unsigned int i=0;i<ManualControlCommand::CHANNEL_NUMELEM;++i)
|
||||
// {
|
||||
// manualSettingsData.ChannelNeutral[i]=manualCommandData.Channel[i];
|
||||
// }
|
||||
// manualSettingsObj->setData(manualSettingsData);
|
||||
// }
|
||||
// if(wizardStep==wizardIdentifyInverted)
|
||||
// {
|
||||
// foreach(QWidget * wd,extraWidgets)
|
||||
// {
|
||||
// QCheckBox * cb=qobject_cast<QCheckBox *>(wd);
|
||||
// if(cb)
|
||||
// {
|
||||
// disconnect(cb,SIGNAL(toggled(bool)),this,SLOT(invertControls()));
|
||||
// delete cb;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// extraWidgets.clear();
|
||||
// disconnect(manualCommandObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(moveSticks()));
|
||||
// wizardStep=wizardIdentifyLimits;
|
||||
// m_config->wzText->setText(QString(tr("Please move all controls to their maximum extents on both directions and press next when ready")));
|
||||
// UAVObject::Metadata mdata= manualCommandObj->getMetadata();
|
||||
// mdata.flightTelemetryUpdateMode = UAVObject::UPDATEMODE_PERIODIC;
|
||||
// mdata.flightTelemetryUpdatePeriod = 150;
|
||||
// manualCommandObj->setMetadata(mdata);
|
||||
// manualSettingsData=manualSettingsObj->getData();
|
||||
// for(uint i=0;i<ManualControlSettings::CHANNELMAX_NUMELEM;++i)
|
||||
// {
|
||||
// manualSettingsData.ChannelMin[i]=manualSettingsData.ChannelNeutral[i];
|
||||
// manualSettingsData.ChannelMax[i]=manualSettingsData.ChannelNeutral[i];
|
||||
// }
|
||||
// connect(manualCommandObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(identifyLimits()));
|
||||
// }
|
||||
// else if(step==wizardIdentifyInverted)
|
||||
// {
|
||||
// dimOtherControls(true);
|
||||
// setTxMovement(nothing);
|
||||
// if(wizardStep==wizardIdentifyLimits)
|
||||
// {
|
||||
// disconnect(manualCommandObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(identifyLimits()));
|
||||
// manualSettingsObj->setData(manualSettingsData);
|
||||
// }
|
||||
// extraWidgets.clear();
|
||||
// foreach(QString name,manualSettingsObj->getFields().at(0)->getElementNames())
|
||||
// {
|
||||
// if(!name.contains("Access") && !name.contains("Flight"))
|
||||
// {
|
||||
// QCheckBox * cb=new QCheckBox(name,this);
|
||||
// extraWidgets.append(cb);
|
||||
// m_config->checkBoxesLayout->layout()->addWidget(cb);
|
||||
// connect(cb,SIGNAL(toggled(bool)),this,SLOT(invertControls()));
|
||||
// }
|
||||
// }
|
||||
// connect(manualCommandObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(moveSticks()));
|
||||
// wizardStep=wizardIdentifyInverted;
|
||||
// m_config->wzText->setText(QString(tr("Please check the picture below and check all the sticks which show an inverted movement and press next when ready")));
|
||||
// }
|
||||
// else if(step==wizardFinish)
|
||||
// {
|
||||
// foreach(QWidget * wd,extraWidgets)
|
||||
// {
|
||||
// QCheckBox * cb=qobject_cast<QCheckBox *>(wd);
|
||||
// if(cb)
|
||||
// {
|
||||
// disconnect(cb,SIGNAL(toggled(bool)),this,SLOT(invertControls()));
|
||||
// delete cb;
|
||||
// }
|
||||
// }
|
||||
// wizardStep=wizardFinish;
|
||||
// extraWidgets.clear();
|
||||
// m_config->wzText->setText(QString(tr("You have completed this wizard, please check below if the picture below mimics your sticks movement.\n"
|
||||
// "This new settings aren't saved to the board yet, after pressing next you will go to the initial screen where you can do that.")));
|
||||
|
||||
// }
|
||||
|
||||
// else if(step==wizardFinish+1)
|
||||
// {
|
||||
// setTxMovement(nothing);
|
||||
// manualCommandObj->setMetadata(manualCommandObj->getDefaultMetadata());
|
||||
// disconnect(manualCommandObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(moveSticks()));
|
||||
// manualSettingsData=manualSettingsObj->getData();
|
||||
// manualSettingsData.ChannelNeutral[ManualControlSettings::CHANNELNEUTRAL_THROTTLE]=
|
||||
// manualSettingsData.ChannelMin[ManualControlSettings::CHANNELMIN_THROTTLE]+
|
||||
// ((manualSettingsData.ChannelMax[ManualControlSettings::CHANNELMAX_THROTTLE]-
|
||||
// manualSettingsData.ChannelMin[ManualControlSettings::CHANNELMIN_THROTTLE])*0.02);
|
||||
// if((abs(manualSettingsData.ChannelMax[ManualControlSettings::CHANNELMAX_FLIGHTMODE]-manualSettingsData.ChannelNeutral[ManualControlSettings::CHANNELNEUTRAL_FLIGHTMODE])<100) ||
|
||||
// (abs(manualSettingsData.ChannelMin[ManualControlSettings::CHANNELMIN_FLIGHTMODE]-manualSettingsData.ChannelNeutral[ManualControlSettings::CHANNELNEUTRAL_FLIGHTMODE])<100))
|
||||
// {
|
||||
// manualSettingsData.ChannelNeutral[ManualControlSettings::CHANNELNEUTRAL_FLIGHTMODE]=manualSettingsData.ChannelMin[ManualControlSettings::CHANNELMIN_FLIGHTMODE]+
|
||||
// (manualSettingsData.ChannelMax[ManualControlSettings::CHANNELMAX_FLIGHTMODE]-manualSettingsData.ChannelMin[ManualControlSettings::CHANNELMIN_FLIGHTMODE])/2;
|
||||
// }
|
||||
// manualSettingsObj->setData(manualSettingsData);
|
||||
// m_config->stackedWidget->setCurrentIndex(0);
|
||||
// wizardStep=wizardWelcome;
|
||||
// }
|
||||
|
||||
//}
|
||||
|
||||
/**
|
||||
* Set the display to indicate which channel the person should move
|
||||
*/
|
||||
void ConfigInputWidget::setChannel(int newChan)
|
||||
{
|
||||
if(newChan == ManualControlSettings::CHANNELGROUPS_COLLECTIVE)
|
||||
m_config->wzText->setText(QString(tr("Please enable throttle hold mode and move the collective pitch stick")));
|
||||
else if (newChan == ManualControlSettings::CHANNELGROUPS_FLIGHTMODE)
|
||||
m_config->wzText->setText(QString(tr("Please flick the flight mode switch. For switches you may have to repeat this rapidly.")));
|
||||
else
|
||||
m_config->wzText->setText(QString(tr("Please move each control once at a time according to the instructions and picture below.\n\n"
|
||||
"Move the %1 stick")).arg(manualSettingsObj->getField("ChannelGroups")->getElementNames().at(newChan)));
|
||||
|
||||
if(manualSettingsObj->getField("ChannelGroups")->getElementNames().at(newChan).contains("Accessory"))
|
||||
m_config->wzNext->setEnabled(true);
|
||||
|
||||
setMoveFromCommand(newChan);
|
||||
|
||||
currentChannelNum = newChan;
|
||||
}
|
||||
|
||||
/**
|
||||
* Unfortunately order of channel should be different in different conditions. Selects
|
||||
* next channel based on heli or acro mode
|
||||
*/
|
||||
void ConfigInputWidget::nextChannel()
|
||||
{
|
||||
QList <int> order = (transmitterType == heli) ? heliChannelOrder : acroChannelOrder;
|
||||
|
||||
if(currentChannelNum == -1) {
|
||||
setChannel(order[0]);
|
||||
return;
|
||||
}
|
||||
for (int i = 0; i < order.length() - 1; i++) {
|
||||
if(order[i] == currentChannelNum) {
|
||||
setChannel(order[i+1]);
|
||||
return;
|
||||
}
|
||||
}
|
||||
currentChannelNum = -1; // hit end of list
|
||||
}
|
||||
|
||||
/**
|
||||
* Unfortunately order of channel should be different in different conditions. Selects
|
||||
* previous channel based on heli or acro mode
|
||||
*/
|
||||
void ConfigInputWidget::prevChannel()
|
||||
{
|
||||
QList <int> order = transmitterType == heli ? heliChannelOrder : acroChannelOrder;
|
||||
|
||||
// No previous from unset channel or next state
|
||||
if(currentChannelNum == -1)
|
||||
return;
|
||||
|
||||
for (int i = 1; i < order.length(); i++) {
|
||||
if(order[i] == currentChannelNum) {
|
||||
setChannel(order[i-1]);
|
||||
usedChannels.removeLast();
|
||||
return;
|
||||
}
|
||||
}
|
||||
currentChannelNum = -1; // hit end of list
|
||||
}
|
||||
|
||||
void ConfigInputWidget::identifyControls()
|
||||
{
|
||||
static int debounce=0;
|
||||
|
||||
receiverActivityData=receiverActivityObj->getData();
|
||||
if(receiverActivityData.ActiveChannel==255)
|
||||
return;
|
||||
@ -547,26 +921,18 @@ void ConfigInputWidget::identifyControls()
|
||||
debounce=0;
|
||||
usedChannels.append(lastChannel);
|
||||
manualSettingsData=manualSettingsObj->getData();
|
||||
manualSettingsData.ChannelGroups[currentCommand]=currentChannel.group;
|
||||
manualSettingsData.ChannelNumber[currentCommand]=currentChannel.number;
|
||||
manualSettingsData.ChannelGroups[currentChannelNum]=currentChannel.group;
|
||||
manualSettingsData.ChannelNumber[currentChannelNum]=currentChannel.number;
|
||||
manualSettingsObj->setData(manualSettingsData);
|
||||
}
|
||||
else
|
||||
return;
|
||||
}
|
||||
++currentCommand;
|
||||
setMoveFromCommand(currentCommand);
|
||||
if(currentCommand>ManualControlSettings::CHANNELGROUPS_NUMELEM-1)
|
||||
{
|
||||
disconnect(receiverActivityObj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(identifyControls()));
|
||||
m_config->wzNext->setEnabled(true);
|
||||
}
|
||||
m_config->wzText->setText(QString(tr("Please move each control once at a time according to the instructions and picture below.\n\n"
|
||||
"Move the %1 stick")).arg(manualSettingsObj->getFields().at(0)->getElementNames().at(currentCommand)));
|
||||
if(manualSettingsObj->getField("ChannelGroups")->getElementNames().at(currentCommand).contains("Accessory"))
|
||||
{
|
||||
m_config->wzNext->setEnabled(true);
|
||||
}
|
||||
|
||||
m_config->wzText->clear();
|
||||
setTxMovement(nothing);
|
||||
|
||||
QTimer::singleShot(300, this, SLOT(wzNext()));
|
||||
}
|
||||
|
||||
void ConfigInputWidget::identifyLimits()
|
||||
@ -605,6 +971,13 @@ void ConfigInputWidget::setMoveFromCommand(int command)
|
||||
else
|
||||
setTxMovement(moveRightVerticalStick);
|
||||
}
|
||||
else if(command==ManualControlSettings::CHANNELNUMBER_COLLECTIVE)
|
||||
{
|
||||
if(transmitterMode==mode2)
|
||||
setTxMovement(moveLeftVerticalStick);
|
||||
else
|
||||
setTxMovement(moveRightVerticalStick);
|
||||
}
|
||||
else if(command==ManualControlSettings::CHANNELNUMBER_FLIGHTMODE)
|
||||
{
|
||||
setTxMovement(moveFlightMode);
|
||||
@ -912,11 +1285,9 @@ void ConfigInputWidget::dimOtherControls(bool value)
|
||||
|
||||
void ConfigInputWidget::enableControls(bool enable)
|
||||
{
|
||||
if(goWizard)
|
||||
{
|
||||
goWizard->setEnabled(enable);
|
||||
goSimpleWizard->setEnabled(enable);
|
||||
}
|
||||
m_config->configurationWizard->setEnabled(enable);
|
||||
m_config->runCalibration->setEnabled(enable);
|
||||
|
||||
ConfigTaskWidget::enableControls(enable);
|
||||
|
||||
}
|
||||
@ -978,3 +1349,73 @@ void ConfigInputWidget::moveFMSlider()
|
||||
m_config->fmsSlider->setValue(0);
|
||||
}
|
||||
}
|
||||
|
||||
void ConfigInputWidget::updateCalibration()
|
||||
{
|
||||
manualCommandData=manualCommandObj->getData();
|
||||
for(uint i=0;i<ManualControlSettings::CHANNELMAX_NUMELEM;++i)
|
||||
{
|
||||
if((!reverse[i] && manualSettingsData.ChannelMin[i]>manualCommandData.Channel[i]) ||
|
||||
(reverse[i] && manualSettingsData.ChannelMin[i]<manualCommandData.Channel[i]))
|
||||
manualSettingsData.ChannelMin[i]=manualCommandData.Channel[i];
|
||||
if((!reverse[i] && manualSettingsData.ChannelMax[i]<manualCommandData.Channel[i]) ||
|
||||
(reverse[i] && manualSettingsData.ChannelMax[i]>manualCommandData.Channel[i]))
|
||||
manualSettingsData.ChannelMax[i]=manualCommandData.Channel[i];
|
||||
manualSettingsData.ChannelNeutral[i] = manualCommandData.Channel[i];
|
||||
}
|
||||
|
||||
manualSettingsObj->setData(manualSettingsData);
|
||||
manualSettingsObj->updated();
|
||||
}
|
||||
|
||||
void ConfigInputWidget::simpleCalibration(bool enable)
|
||||
{
|
||||
if (enable) {
|
||||
QMessageBox msgBox;
|
||||
msgBox.setText(tr("Arming Settings are now set to Always Disarmed for your safety."));
|
||||
msgBox.setDetailedText(tr("You will have to reconfigure arming settings yourself afterwards."));
|
||||
msgBox.setStandardButtons(QMessageBox::Ok);
|
||||
msgBox.setDefaultButton(QMessageBox::Ok);
|
||||
msgBox.exec();
|
||||
|
||||
manualCommandData = manualCommandObj->getData();
|
||||
|
||||
manualSettingsData=manualSettingsObj->getData();
|
||||
manualSettingsData.Arming=ManualControlSettings::ARMING_ALWAYSDISARMED;
|
||||
manualSettingsObj->setData(manualSettingsData);
|
||||
|
||||
for (unsigned int i = 0; i < ManualControlCommand::CHANNEL_NUMELEM; i++) {
|
||||
reverse[i] = manualSettingsData.ChannelMax[i] < manualSettingsData.ChannelMin[i];
|
||||
manualSettingsData.ChannelMin[i] = manualCommandData.Channel[i];
|
||||
manualSettingsData.ChannelNeutral[i] = manualCommandData.Channel[i];
|
||||
manualSettingsData.ChannelMax[i] = manualCommandData.Channel[i];
|
||||
}
|
||||
|
||||
fastMdata();
|
||||
|
||||
connect(manualCommandObj, SIGNAL(objectUnpacked(UAVObject*)), this, SLOT(updateCalibration()));
|
||||
} else {
|
||||
manualCommandData = manualCommandObj->getData();
|
||||
manualSettingsData = manualSettingsObj->getData();
|
||||
|
||||
restoreMdata();
|
||||
|
||||
for (int i = 0; i < ManualControlCommand::CHANNEL_NUMELEM; i++)
|
||||
manualSettingsData.ChannelNeutral[i] = manualCommandData.Channel[i];
|
||||
|
||||
// Force flight mode neutral to middle
|
||||
manualSettingsData.ChannelNeutral[ManualControlSettings::CHANNELNUMBER_FLIGHTMODE] =
|
||||
(manualSettingsData.ChannelMax[ManualControlSettings::CHANNELNUMBER_FLIGHTMODE] +
|
||||
manualSettingsData.ChannelMin[ManualControlSettings::CHANNELNUMBER_FLIGHTMODE]) / 2;
|
||||
|
||||
// Force throttle to be near min
|
||||
manualSettingsData.ChannelNeutral[ManualControlSettings::CHANNELNEUTRAL_THROTTLE]=
|
||||
manualSettingsData.ChannelMin[ManualControlSettings::CHANNELMIN_THROTTLE]+
|
||||
((manualSettingsData.ChannelMax[ManualControlSettings::CHANNELMAX_THROTTLE]-
|
||||
manualSettingsData.ChannelMin[ManualControlSettings::CHANNELMIN_THROTTLE])*0.02);
|
||||
|
||||
manualSettingsObj->setData(manualSettingsData);
|
||||
|
||||
disconnect(manualCommandObj, SIGNAL(objectUnpacked(UAVObject*)), this, SLOT(updateCalibration()));
|
||||
}
|
||||
}
|
||||
|
@ -52,22 +52,24 @@ class ConfigInputWidget: public ConfigTaskWidget
|
||||
public:
|
||||
ConfigInputWidget(QWidget *parent = 0);
|
||||
~ConfigInputWidget();
|
||||
enum wizardSteps{wizardWelcome,wizardChooseMode,wizardIdentifySticks,wizardIdentifyCenter,wizardIdentifyLimits,wizardIdentifyInverted,wizardFinish};
|
||||
enum wizardSteps{wizardWelcome,wizardChooseMode,wizardChooseType,wizardIdentifySticks,wizardIdentifyCenter,wizardIdentifyLimits,wizardIdentifyInverted,wizardFinish,wizardNone};
|
||||
enum txMode{mode1,mode2};
|
||||
enum txMovements{moveLeftVerticalStick,moveRightVerticalStick,moveLeftHorizontalStick,moveRightHorizontalStick,moveAccess0,moveAccess1,moveAccess2,moveFlightMode,centerAll,moveAll,nothing};
|
||||
enum txMovementType{vertical,horizontal,jump,mix};
|
||||
enum txType {acro, heli};
|
||||
public slots:
|
||||
|
||||
private:
|
||||
bool growing;
|
||||
bool reverse[ManualControlSettings::CHANNELNEUTRAL_NUMELEM];
|
||||
txMovements currentMovement;
|
||||
int movePos;
|
||||
void setTxMovement(txMovements movement);
|
||||
Ui_InputWidget *m_config;
|
||||
wizardSteps wizardStep;
|
||||
void setupWizardWidget(int step);
|
||||
QList<QWidget*> extraWidgets;
|
||||
txMode transmitterMode;
|
||||
txType transmitterType;
|
||||
struct channelsStruct
|
||||
{
|
||||
bool operator ==(const channelsStruct& rhs) const
|
||||
@ -82,12 +84,16 @@ private:
|
||||
QEventLoop * loop;
|
||||
bool skipflag;
|
||||
|
||||
uint currentCommand;
|
||||
int currentChannelNum;
|
||||
QList<int> heliChannelOrder;
|
||||
QList<int> acroChannelOrder;
|
||||
|
||||
ManualControlCommand * manualCommandObj;
|
||||
ManualControlCommand::DataFields manualCommandData;
|
||||
UAVObject::Metadata manualControlMdata;
|
||||
ManualControlSettings * manualSettingsObj;
|
||||
ManualControlSettings::DataFields manualSettingsData;
|
||||
ManualControlSettings::DataFields previousManualSettingsData;
|
||||
ReceiverActivity * receiverActivityObj;
|
||||
ReceiverActivity::DataFields receiverActivityData;
|
||||
|
||||
@ -116,16 +122,22 @@ private:
|
||||
QTimer * animate;
|
||||
void resetTxControls();
|
||||
void setMoveFromCommand(int command);
|
||||
QPushButton * goWizard;
|
||||
QPushButton * goSimpleWizard;
|
||||
bool isSimple;
|
||||
void goToWizard();
|
||||
|
||||
void fastMdata();
|
||||
void restoreMdata();
|
||||
|
||||
void setChannel(int);
|
||||
void nextChannel();
|
||||
void prevChannel();
|
||||
|
||||
void wizardSetUpStep(enum wizardSteps);
|
||||
void wizardTearDownStep(enum wizardSteps);
|
||||
private slots:
|
||||
void wzNext();
|
||||
void wzBack();
|
||||
void wzCancel();
|
||||
void goToNormalWizard();
|
||||
void goToSimpleWizard();
|
||||
void goToWizard();
|
||||
|
||||
void openHelp();
|
||||
void identifyControls();
|
||||
void identifyLimits();
|
||||
@ -134,6 +146,8 @@ private slots:
|
||||
void dimOtherControls(bool value);
|
||||
void moveFMSlider();
|
||||
void invertControls();
|
||||
void simpleCalibration(bool state);
|
||||
void updateCalibration();
|
||||
protected:
|
||||
void resizeEvent(QResizeEvent *event);
|
||||
virtual void enableControls(bool enable);
|
||||
|
@ -48,7 +48,9 @@ void ConfigTaskWidget::addUAVObjectToWidgetRelation(QString object, QString fiel
|
||||
UAVObject *obj=NULL;
|
||||
UAVObjectField *_field=NULL;
|
||||
obj = objManager->getObject(QString(object));
|
||||
Q_ASSERT(obj);
|
||||
_field = obj->getField(QString(field));
|
||||
Q_ASSERT(_field);
|
||||
addUAVObjectToWidgetRelation(object,field,widget,_field->getElementNames().indexOf(index));
|
||||
}
|
||||
|
||||
@ -59,6 +61,7 @@ void ConfigTaskWidget::addUAVObjectToWidgetRelation(QString object, QString fiel
|
||||
if(!object.isEmpty())
|
||||
{
|
||||
obj = objManager->getObject(QString(object));
|
||||
Q_ASSERT(obj);
|
||||
connect(obj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(refreshWidgetsValues()));
|
||||
}
|
||||
//smartsave->addObject(obj);
|
||||
@ -182,6 +185,10 @@ void ConfigTaskWidget::populateWidgets()
|
||||
{
|
||||
cb->setValue(ow->field->getValue(ow->index).toInt()/ow->scale);
|
||||
}
|
||||
else if(QSlider * cb=qobject_cast<QSlider *>(ow->widget))
|
||||
{
|
||||
cb->setValue(ow->field->getValue(ow->index).toInt()/ow->scale);
|
||||
}
|
||||
}
|
||||
setDirty(dirtyBack);
|
||||
}
|
||||
@ -207,6 +214,10 @@ void ConfigTaskWidget::refreshWidgetsValues()
|
||||
{
|
||||
cb->setValue(ow->field->getValue(ow->index).toInt()/ow->scale);
|
||||
}
|
||||
else if(QSlider * cb=qobject_cast<QSlider *>(ow->widget))
|
||||
{
|
||||
cb->setValue(ow->field->getValue(ow->index).toInt()/ow->scale);
|
||||
}
|
||||
}
|
||||
setDirty(dirtyBack);
|
||||
}
|
||||
@ -231,6 +242,10 @@ void ConfigTaskWidget::updateObjectsFromWidgets()
|
||||
{
|
||||
ow->field->setValue(cb->value()* ow->scale,ow->index);
|
||||
}
|
||||
else if(QSlider * cb=qobject_cast<QSlider *>(ow->widget))
|
||||
{
|
||||
ow->field->setValue(cb->value()* ow->scale,ow->index);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -30,7 +30,38 @@
|
||||
<number>1</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="advancedPage">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4"/>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="channelSettings"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="configurationWizard">
|
||||
<property name="text">
|
||||
<string>Start Configuration Wizard</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="runCalibration">
|
||||
<property name="text">
|
||||
<string>Run Calibration</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>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="wizard">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||
@ -48,13 +79,6 @@
|
||||
<height>70</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>10</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
|
@ -1,6 +1,8 @@
|
||||
#include "inputchannelform.h"
|
||||
#include "ui_inputchannelform.h"
|
||||
|
||||
#include "manualcontrolsettings.h"
|
||||
|
||||
inputChannelForm::inputChannelForm(QWidget *parent,bool showlegend) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::inputChannelForm)
|
||||
@ -21,9 +23,103 @@ inputChannelForm::inputChannelForm(QWidget *parent,bool showlegend) :
|
||||
delete ui->legend4;
|
||||
delete ui->legend5;
|
||||
}
|
||||
|
||||
connect(ui->channelMin,SIGNAL(valueChanged(int)),this,SLOT(minMaxUpdated()));
|
||||
connect(ui->channelMax,SIGNAL(valueChanged(int)),this,SLOT(minMaxUpdated()));
|
||||
connect(ui->channelGroup,SIGNAL(currentIndexChanged(int)),this,SLOT(groupUpdated()));
|
||||
connect(ui->channelNeutral,SIGNAL(valueChanged(int)), this, SLOT(neutralUpdated(int)));
|
||||
|
||||
// This is awkward but since we want the UI to be a dropdown but the field is not an enum
|
||||
// it breaks the UAUVObject widget relation of the task gadget. Running the data through
|
||||
// a spin box fixes this
|
||||
connect(ui->channelNumberDropdown,SIGNAL(currentIndexChanged(int)),this,SLOT(channelDropdownUpdated(int)));
|
||||
connect(ui->channelNumber,SIGNAL(valueChanged(int)),this,SLOT(channelNumberUpdated(int)));
|
||||
}
|
||||
|
||||
inputChannelForm::~inputChannelForm()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the direction of the slider and boundaries
|
||||
*/
|
||||
void inputChannelForm::minMaxUpdated()
|
||||
{
|
||||
bool reverse = ui->channelMin->value() > ui->channelMax->value();
|
||||
if(reverse) {
|
||||
ui->channelNeutral->setMinimum(ui->channelMax->value());
|
||||
ui->channelNeutral->setMaximum(ui->channelMin->value());
|
||||
} else {
|
||||
ui->channelNeutral->setMinimum(ui->channelMin->value());
|
||||
ui->channelNeutral->setMaximum(ui->channelMax->value());
|
||||
}
|
||||
ui->channelRev->setChecked(reverse);
|
||||
ui->channelNeutral->setInvertedAppearance(reverse);
|
||||
ui->channelNeutral->setInvertedControls(reverse);
|
||||
}
|
||||
|
||||
void inputChannelForm::neutralUpdated(int newval)
|
||||
{
|
||||
ui->neutral->setText(QString::number(newval));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the channel options based on the selected receiver type
|
||||
*
|
||||
* I fully admit this is terrible practice to embed data within UI
|
||||
* like this. Open to suggestions. JC 2011-09-07
|
||||
*/
|
||||
void inputChannelForm::groupUpdated()
|
||||
{
|
||||
ui->channelNumberDropdown->clear();
|
||||
ui->channelNumberDropdown->addItem("Disabled");
|
||||
|
||||
quint8 count = 0;
|
||||
|
||||
switch(ui->channelGroup->currentIndex()) {
|
||||
case -1: // Nothing selected
|
||||
count = 0;
|
||||
break;
|
||||
case ManualControlSettings::CHANNELGROUPS_PWM:
|
||||
count = 8; // Need to make this 6 for CC
|
||||
break;
|
||||
case ManualControlSettings::CHANNELGROUPS_PPM:
|
||||
case ManualControlSettings::CHANNELGROUPS_SPEKTRUM1:
|
||||
case ManualControlSettings::CHANNELGROUPS_SPEKTRUM2:
|
||||
count = 12;
|
||||
break;
|
||||
case ManualControlSettings::CHANNELGROUPS_SBUS:
|
||||
count = 18;
|
||||
break;
|
||||
case ManualControlSettings::CHANNELGROUPS_GCS:
|
||||
count = 5;
|
||||
case ManualControlSettings::CHANNELGROUPS_NONE:
|
||||
count = 0;
|
||||
break;
|
||||
default:
|
||||
Q_ASSERT(0);
|
||||
}
|
||||
|
||||
for (int i = 0; i < count; i++)
|
||||
ui->channelNumberDropdown->addItem(QString(tr("Chan %1").arg(i+1)));
|
||||
|
||||
ui->channelNumber->setMaximum(count);
|
||||
ui->channelNumber->setMinimum(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the dropdown from the hidden control
|
||||
*/
|
||||
void inputChannelForm::channelDropdownUpdated(int newval)
|
||||
{
|
||||
ui->channelNumber->setValue(newval);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the hidden control from the dropdown
|
||||
*/
|
||||
void inputChannelForm::channelNumberUpdated(int newval)
|
||||
{
|
||||
ui->channelNumberDropdown->setCurrentIndex(newval);
|
||||
}
|
||||
|
@ -16,6 +16,13 @@ public:
|
||||
~inputChannelForm();
|
||||
friend class ConfigInputWidget;
|
||||
|
||||
private slots:
|
||||
void minMaxUpdated();
|
||||
void neutralUpdated(int);
|
||||
void groupUpdated();
|
||||
void channelDropdownUpdated(int);
|
||||
void channelNumberUpdated(int);
|
||||
|
||||
private:
|
||||
Ui::inputChannelForm *ui;
|
||||
};
|
||||
|
@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>404</width>
|
||||
<height>43</height>
|
||||
<width>543</width>
|
||||
<height>49</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@ -26,47 +26,7 @@
|
||||
<property name="verticalSpacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="0" column="3">
|
||||
<widget class="QLabel" name="legend2">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Number</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="4">
|
||||
<widget class="QLabel" name="legend3">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Min</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLabel" name="legend0">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Function</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QLabel" name="legend1">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Group</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<item row="2" column="1">
|
||||
<widget class="QLabel" name="channelName">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
||||
@ -85,41 +45,79 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QComboBox" name="channelGroup"/>
|
||||
</item>
|
||||
<item row="1" column="3">
|
||||
<widget class="QSpinBox" name="channelNumber">
|
||||
<property name="maximum">
|
||||
<number>255</number>
|
||||
<item row="2" column="2">
|
||||
<widget class="QComboBox" name="channelGroup">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<horstretch>6</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="5">
|
||||
<widget class="QLabel" name="legend4">
|
||||
<item row="2" column="4">
|
||||
<widget class="QSpinBox" name="channelMin">
|
||||
<property name="buttonSymbols">
|
||||
<enum>QAbstractSpinBox::NoButtons</enum>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>1000</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="8">
|
||||
<widget class="QSpinBox" name="channelMax">
|
||||
<property name="buttonSymbols">
|
||||
<enum>QAbstractSpinBox::NoButtons</enum>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>1000</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLabel" name="legend0">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Neutral</string>
|
||||
<string>Function</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="4">
|
||||
<widget class="QSpinBox" name="channelMin">
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
<item row="0" column="3">
|
||||
<widget class="QLabel" name="legend2">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Number</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="5">
|
||||
<widget class="QSpinBox" name="channelNeutral">
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
<item row="0" column="2">
|
||||
<widget class="QLabel" name="legend1">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Type</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="6">
|
||||
<item row="0" column="8">
|
||||
<widget class="QLabel" name="legend5">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
@ -129,13 +127,132 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="6">
|
||||
<widget class="QSpinBox" name="channelMax">
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
<item row="0" column="4">
|
||||
<widget class="QLabel" name="legend3">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Min</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="6">
|
||||
<widget class="QLabel" name="legend4">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Neutral</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="6">
|
||||
<widget class="QSlider" name="channelNeutral">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="3">
|
||||
<widget class="QComboBox" name="channelNumberDropdown">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<horstretch>4</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maxVisibleItems">
|
||||
<number>7</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="3">
|
||||
<widget class="QSpinBox" name="channelNumber">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="10">
|
||||
<widget class="QCheckBox" name="channelRev">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Rev</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="9">
|
||||
<widget class="QLabel" name="neutral">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>30</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>30</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="5">
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>10</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="2" column="7">
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>10</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,975 @@
|
||||
[Design]
|
||||
Version=1.0
|
||||
HierarchyMode=0
|
||||
ChannelRoomNamingStyle=0
|
||||
OutputPath=Project Outputs for CopterControl Mag & Pressure
|
||||
LogFolderPath=Project Logs for CopterControl Mag & Pressure
|
||||
ChannelDesignatorFormatString=$Component_$RoomName
|
||||
ChannelRoomLevelSeperator=_
|
||||
OpenOutputs=1
|
||||
ArchiveProject=0
|
||||
TimestampOutput=0
|
||||
SeparateFolders=0
|
||||
PinSwapBy_Netlabel=1
|
||||
PinSwapBy_Pin=1
|
||||
AllowPortNetNames=0
|
||||
AllowSheetEntryNetNames=1
|
||||
AppendSheetNumberToLocalNets=0
|
||||
NetlistSinglePinNets=0
|
||||
DefaultConfiguration=
|
||||
UserID=0xFFFFFFFF
|
||||
DefaultPcbProtel=1
|
||||
DefaultPcbPcad=0
|
||||
ReorderDocumentsOnCompile=1
|
||||
NameNetsHierarchically=0
|
||||
PowerPortNamesTakePriority=0
|
||||
PushECOToAnnotationFile=1
|
||||
DItemRevisionGUID=
|
||||
|
||||
[Document1]
|
||||
DocumentPath=CopterControl Mag & Pressure.PcbDoc
|
||||
AnnotationEnabled=1
|
||||
AnnotateStartValue=1
|
||||
AnnotationIndexControlEnabled=0
|
||||
AnnotateSuffix=
|
||||
AnnotateScope=All
|
||||
AnnotateOrder=-1
|
||||
DoLibraryUpdate=1
|
||||
DoDatabaseUpdate=1
|
||||
ClassGenCCAutoEnabled=1
|
||||
ClassGenCCAutoRoomEnabled=1
|
||||
ClassGenNCAutoScope=None
|
||||
DItemRevisionGUID=
|
||||
|
||||
[Document2]
|
||||
DocumentPath=CopterControl Mag & Pressure.SchDoc
|
||||
AnnotationEnabled=1
|
||||
AnnotateStartValue=1
|
||||
AnnotationIndexControlEnabled=0
|
||||
AnnotateSuffix=
|
||||
AnnotateScope=All
|
||||
AnnotateOrder=-1
|
||||
DoLibraryUpdate=1
|
||||
DoDatabaseUpdate=1
|
||||
ClassGenCCAutoEnabled=1
|
||||
ClassGenCCAutoRoomEnabled=0
|
||||
ClassGenNCAutoScope=None
|
||||
DItemRevisionGUID=
|
||||
|
||||
[GeneratedDocument1]
|
||||
DocumentPath=Project Outputs for CopterControl Mag & Pressure\CopterControl Mag & Pressure-Plated.TXT
|
||||
DItemRevisionGUID=
|
||||
|
||||
[GeneratedDocument2]
|
||||
DocumentPath=Project Outputs for CopterControl Mag & Pressure\CopterControl Mag & Pressure.DRL
|
||||
DItemRevisionGUID=
|
||||
|
||||
[GeneratedDocument3]
|
||||
DocumentPath=Project Outputs for CopterControl Mag & Pressure\CopterControl Mag & Pressure.DRR
|
||||
DItemRevisionGUID=
|
||||
|
||||
[GeneratedDocument4]
|
||||
DocumentPath=Project Outputs for CopterControl Mag & Pressure\CopterControl Mag & Pressure.EXTREP
|
||||
DItemRevisionGUID=
|
||||
|
||||
[GeneratedDocument5]
|
||||
DocumentPath=Project Outputs for CopterControl Mag & Pressure\CopterControl Mag & Pressure.GBL
|
||||
DItemRevisionGUID=
|
||||
|
||||
[GeneratedDocument6]
|
||||
DocumentPath=Project Outputs for CopterControl Mag & Pressure\CopterControl Mag & Pressure.GBO
|
||||
DItemRevisionGUID=
|
||||
|
||||
[GeneratedDocument7]
|
||||
DocumentPath=Project Outputs for CopterControl Mag & Pressure\CopterControl Mag & Pressure.GBP
|
||||
DItemRevisionGUID=
|
||||
|
||||
[GeneratedDocument8]
|
||||
DocumentPath=Project Outputs for CopterControl Mag & Pressure\CopterControl Mag & Pressure.GBS
|
||||
DItemRevisionGUID=
|
||||
|
||||
[GeneratedDocument9]
|
||||
DocumentPath=Project Outputs for CopterControl Mag & Pressure\CopterControl Mag & Pressure.GD1
|
||||
DItemRevisionGUID=
|
||||
|
||||
[GeneratedDocument10]
|
||||
DocumentPath=Project Outputs for CopterControl Mag & Pressure\CopterControl Mag & Pressure.GG1
|
||||
DItemRevisionGUID=
|
||||
|
||||
[GeneratedDocument11]
|
||||
DocumentPath=Project Outputs for CopterControl Mag & Pressure\CopterControl Mag & Pressure.GKO
|
||||
DItemRevisionGUID=
|
||||
|
||||
[GeneratedDocument12]
|
||||
DocumentPath=Project Outputs for CopterControl Mag & Pressure\CopterControl Mag & Pressure.GM1
|
||||
DItemRevisionGUID=
|
||||
|
||||
[GeneratedDocument13]
|
||||
DocumentPath=Project Outputs for CopterControl Mag & Pressure\CopterControl Mag & Pressure.GPB
|
||||
DItemRevisionGUID=
|
||||
|
||||
[GeneratedDocument14]
|
||||
DocumentPath=Project Outputs for CopterControl Mag & Pressure\CopterControl Mag & Pressure.GPT
|
||||
DItemRevisionGUID=
|
||||
|
||||
[GeneratedDocument15]
|
||||
DocumentPath=Project Outputs for CopterControl Mag & Pressure\CopterControl Mag & Pressure.GTL
|
||||
DItemRevisionGUID=
|
||||
|
||||
[GeneratedDocument16]
|
||||
DocumentPath=Project Outputs for CopterControl Mag & Pressure\CopterControl Mag & Pressure.GTO
|
||||
DItemRevisionGUID=
|
||||
|
||||
[GeneratedDocument17]
|
||||
DocumentPath=Project Outputs for CopterControl Mag & Pressure\CopterControl Mag & Pressure.GTP
|
||||
DItemRevisionGUID=
|
||||
|
||||
[GeneratedDocument18]
|
||||
DocumentPath=Project Outputs for CopterControl Mag & Pressure\CopterControl Mag & Pressure.GTS
|
||||
DItemRevisionGUID=
|
||||
|
||||
[GeneratedDocument19]
|
||||
DocumentPath=Project Outputs for CopterControl Mag & Pressure\CopterControl Mag & Pressure.LDP
|
||||
DItemRevisionGUID=
|
||||
|
||||
[GeneratedDocument20]
|
||||
DocumentPath=Project Outputs for CopterControl Mag & Pressure\CopterControl Mag & Pressure.REP
|
||||
DItemRevisionGUID=
|
||||
|
||||
[GeneratedDocument21]
|
||||
DocumentPath=Project Outputs for CopterControl Mag & Pressure\CopterControl Mag & Pressure.RUL
|
||||
DItemRevisionGUID=
|
||||
|
||||
[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 Mag & Pressure.SchDoc=C:\Users\David\Documents\SVN\OP-WIP\trunk\hardware\production\CopterControl Mag\CopterControl Mag & Pressure 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
|
||||
|
||||
[OutputGroup1]
|
||||
Name=Netlist Outputs
|
||||
Description=
|
||||
TargetPrinter=Microsoft XPS Document Writer
|
||||
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintWhat=1
|
||||
OutputType1=CadnetixNetlist
|
||||
OutputName1=Cadnetix Netlist
|
||||
OutputDocumentPath1=
|
||||
OutputVariantName1=
|
||||
OutputDefault1=0
|
||||
OutputType2=CalayNetlist
|
||||
OutputName2=Calay Netlist
|
||||
OutputDocumentPath2=
|
||||
OutputVariantName2=
|
||||
OutputDefault2=0
|
||||
OutputType3=EDIF
|
||||
OutputName3=EDIF for PCB
|
||||
OutputDocumentPath3=
|
||||
OutputVariantName3=
|
||||
OutputDefault3=0
|
||||
OutputType4=EESofNetlist
|
||||
OutputName4=EESof Netlist
|
||||
OutputDocumentPath4=
|
||||
OutputVariantName4=
|
||||
OutputDefault4=0
|
||||
OutputType5=IntergraphNetlist
|
||||
OutputName5=Intergraph Netlist
|
||||
OutputDocumentPath5=
|
||||
OutputVariantName5=
|
||||
OutputDefault5=0
|
||||
OutputType6=MentorBoardStationNetlist
|
||||
OutputName6=Mentor BoardStation Netlist
|
||||
OutputDocumentPath6=
|
||||
OutputVariantName6=
|
||||
OutputDefault6=0
|
||||
OutputType7=MultiWire
|
||||
OutputName7=MultiWire
|
||||
OutputDocumentPath7=
|
||||
OutputVariantName7=
|
||||
OutputDefault7=0
|
||||
OutputType8=OrCadPCB2Netlist
|
||||
OutputName8=Orcad/PCB2 Netlist
|
||||
OutputDocumentPath8=
|
||||
OutputVariantName8=
|
||||
OutputDefault8=0
|
||||
OutputType9=PADSNetlist
|
||||
OutputName9=PADS ASCII Netlist
|
||||
OutputDocumentPath9=
|
||||
OutputVariantName9=
|
||||
OutputDefault9=0
|
||||
OutputType10=Pcad
|
||||
OutputName10=Pcad for PCB
|
||||
OutputDocumentPath10=
|
||||
OutputVariantName10=
|
||||
OutputDefault10=0
|
||||
OutputType11=PCADNetlist
|
||||
OutputName11=PCAD Netlist
|
||||
OutputDocumentPath11=
|
||||
OutputVariantName11=
|
||||
OutputDefault11=0
|
||||
OutputType12=PCADnltNetlist
|
||||
OutputName12=PCADnlt Netlist
|
||||
OutputDocumentPath12=
|
||||
OutputVariantName12=
|
||||
OutputDefault12=0
|
||||
OutputType13=Protel2Netlist
|
||||
OutputName13=Protel2 Netlist
|
||||
OutputDocumentPath13=
|
||||
OutputVariantName13=
|
||||
OutputDefault13=0
|
||||
OutputType14=ProtelNetlist
|
||||
OutputName14=Protel
|
||||
OutputDocumentPath14=
|
||||
OutputVariantName14=
|
||||
OutputDefault14=0
|
||||
OutputType15=RacalNetlist
|
||||
OutputName15=Racal Netlist
|
||||
OutputDocumentPath15=
|
||||
OutputVariantName15=
|
||||
OutputDefault15=0
|
||||
OutputType16=RINFNetlist
|
||||
OutputName16=RINF Netlist
|
||||
OutputDocumentPath16=
|
||||
OutputVariantName16=
|
||||
OutputDefault16=0
|
||||
OutputType17=SciCardsNetlist
|
||||
OutputName17=SciCards Netlist
|
||||
OutputDocumentPath17=
|
||||
OutputVariantName17=
|
||||
OutputDefault17=0
|
||||
OutputType18=SIMetrixNetlist
|
||||
OutputName18=SIMetrix
|
||||
OutputDocumentPath18=
|
||||
OutputVariantName18=
|
||||
OutputDefault18=0
|
||||
OutputType19=SIMPLISNetlist
|
||||
OutputName19=SIMPLIS
|
||||
OutputDocumentPath19=
|
||||
OutputVariantName19=
|
||||
OutputDefault19=0
|
||||
OutputType20=TangoNetlist
|
||||
OutputName20=Tango Netlist
|
||||
OutputDocumentPath20=
|
||||
OutputVariantName20=
|
||||
OutputDefault20=0
|
||||
OutputType21=TelesisNetlist
|
||||
OutputName21=Telesis Netlist
|
||||
OutputDocumentPath21=
|
||||
OutputVariantName21=
|
||||
OutputDefault21=0
|
||||
OutputType22=Verilog
|
||||
OutputName22=Verilog File
|
||||
OutputDocumentPath22=
|
||||
OutputVariantName22=
|
||||
OutputDefault22=0
|
||||
OutputType23=VHDL
|
||||
OutputName23=VHDL File
|
||||
OutputDocumentPath23=
|
||||
OutputVariantName23=
|
||||
OutputDefault23=0
|
||||
OutputType24=WireListNetlist
|
||||
OutputName24=WireList Netlist
|
||||
OutputDocumentPath24=
|
||||
OutputVariantName24=
|
||||
OutputDefault24=0
|
||||
OutputType25=XSpiceNetlist
|
||||
OutputName25=XSpice Netlist
|
||||
OutputDocumentPath25=
|
||||
OutputVariantName25=
|
||||
OutputDefault25=0
|
||||
|
||||
[OutputGroup2]
|
||||
Name=Simulator Outputs
|
||||
Description=
|
||||
TargetPrinter=Microsoft XPS Document Writer
|
||||
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintWhat=1
|
||||
OutputType1=AdvSimNetlist
|
||||
OutputName1=Mixed Sim
|
||||
OutputDocumentPath1=
|
||||
OutputVariantName1=
|
||||
OutputDefault1=0
|
||||
OutputType2=SIMetrix_Sim
|
||||
OutputName2=SIMetrix
|
||||
OutputDocumentPath2=
|
||||
OutputVariantName2=
|
||||
OutputDefault2=0
|
||||
OutputType3=SIMPLIS_Sim
|
||||
OutputName3=SIMPLIS
|
||||
OutputDocumentPath3=
|
||||
OutputVariantName3=
|
||||
OutputDefault3=0
|
||||
|
||||
[OutputGroup3]
|
||||
Name=Documentation Outputs
|
||||
Description=
|
||||
TargetPrinter=Microsoft XPS Document Writer
|
||||
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintWhat=1
|
||||
OutputType1=Composite
|
||||
OutputName1=Composite Drawing
|
||||
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|PaperKind=Letter|PrintScaleMode=1
|
||||
OutputType2=Logic Analyser Print
|
||||
OutputName2=Logic Analyser Prints
|
||||
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|PaperKind=Letter|PrintScaleMode=1
|
||||
OutputType3=OpenBus Print
|
||||
OutputName3=OpenBus 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|PaperKind=Letter|PrintScaleMode=1
|
||||
OutputType4=PCB 3D Print
|
||||
OutputName4=PCB 3D 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|PaperKind=Letter|PrintScaleMode=1
|
||||
OutputType5=PCB Print
|
||||
OutputName5=PCB 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|PaperKind=Letter|PrintScaleMode=1
|
||||
OutputType6=Schematic Print
|
||||
OutputName6=Schematic 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|PaperKind=Letter|PrintScaleMode=1
|
||||
OutputType7=SimView Print
|
||||
OutputName7=SimView 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|PaperKind=Letter|PrintScaleMode=1
|
||||
OutputType8=Wave Print
|
||||
OutputName8=Wave Prints
|
||||
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=-4|MediaType=1|DitherType=10|PaperKind=Letter|PrintScaleMode=1
|
||||
OutputType9=WaveSim Print
|
||||
OutputName9=WaveSim 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|PaperKind=Letter|PrintScaleMode=1
|
||||
|
||||
[OutputGroup4]
|
||||
Name=Assembly Outputs
|
||||
Description=
|
||||
TargetPrinter=Microsoft XPS Document Writer
|
||||
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintWhat=1
|
||||
OutputType1=Assembly
|
||||
OutputName1=Assembly Drawings
|
||||
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|PaperKind=Letter|PrintScaleMode=1
|
||||
OutputType2=Pick Place
|
||||
OutputName2=Generates pick and place files
|
||||
OutputDocumentPath2=
|
||||
OutputVariantName2=
|
||||
OutputDefault2=0
|
||||
OutputType3=Test Points For Assembly
|
||||
OutputName3=Test Point Report
|
||||
OutputDocumentPath3=
|
||||
OutputVariantName3=
|
||||
OutputDefault3=0
|
||||
|
||||
[OutputGroup5]
|
||||
Name=Fabrication Outputs
|
||||
Description=
|
||||
TargetPrinter=Microsoft XPS Document Writer
|
||||
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintWhat=1
|
||||
OutputType1=Drill
|
||||
OutputName1=Drill Drawing/Guides
|
||||
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|PaperKind=Letter|PrintScaleMode=1
|
||||
OutputType2=Mask
|
||||
OutputName2=Solder/Paste Mask Prints
|
||||
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|PaperKind=Letter|PrintScaleMode=1
|
||||
OutputType3=Final
|
||||
OutputName3=Final Artwork 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|PaperKind=Letter|PrintScaleMode=1
|
||||
OutputType4=CompositeDrill
|
||||
OutputName4=Composite Drill Drawing
|
||||
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|PaperKind=Letter|PrintScaleMode=1
|
||||
OutputType5=NC Drill
|
||||
OutputName5=NC Drill Files
|
||||
OutputDocumentPath5=
|
||||
OutputVariantName5=
|
||||
OutputDefault5=0
|
||||
Configuration5_Name1=OutputConfigurationParameter1
|
||||
Configuration5_Item1=BoardEdgeRoutToolDia=2000000|GenerateBoardEdgeRout=False|GenerateDrilledSlotsG85=False|GenerateSeparatePlatedNonPlatedFiles=True|NumberOfDecimals=5|NumberOfUnits=2|OptimizeChangeLocationCommands=True|OriginPosition=Relative|Record=DrillView|Units=Imperial|ZeroesMode=SuppressTrailingZeroes
|
||||
OutputType6=ODB
|
||||
OutputName6=ODB++ Files
|
||||
OutputDocumentPath6=
|
||||
OutputVariantName6=
|
||||
OutputDefault6=0
|
||||
OutputType7=Plane
|
||||
OutputName7=Power-Plane 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|PaperKind=Letter|PrintScaleMode=1
|
||||
OutputType8=Test Points
|
||||
OutputName8=Test Point Report
|
||||
OutputDocumentPath8=
|
||||
OutputVariantName8=
|
||||
OutputDefault8=0
|
||||
OutputType9=Gerber
|
||||
OutputName9=Gerber Files
|
||||
OutputDocumentPath9=
|
||||
OutputVariantName9=
|
||||
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,16842751~1,16973835~1,16973833~1,16973831~1,16908289~1,16973837~1,16973848~1,16973849~1|PlotPositivePlaneLayers=False|PlotUsedDrillDrawingLayerPairs=True|PlotUsedDrillGuideLayerPairs=True|PlusApertureTolerance=50|Record=GerberView|SoftwareArcs=False|Sorted=False
|
||||
|
||||
[OutputGroup6]
|
||||
Name=Report Outputs
|
||||
Description=
|
||||
TargetPrinter=Microsoft XPS Document Writer
|
||||
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintWhat=1
|
||||
OutputType1=BOM_PartType
|
||||
OutputName1=Bill of Materials
|
||||
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|PaperKind=Letter|PrintScaleMode=1
|
||||
Configuration1_Name1=Filter
|
||||
Configuration1_Item1=545046300E5446696C74657257726170706572000D46696C7465722E416374697665090F46696C7465722E43726974657269610A04000000000000000000
|
||||
Configuration1_Name2=General
|
||||
Configuration1_Item2=OpenExported=True|AddToProject=False|ForceFit=False|NotFitted=False|Database=False|IncludePCBData=False|ShowExportOptions=True|TemplateFilename=..\Altium\BOM OpenPilot.xlt|BatchMode=5|FormWidth=1456|FormHeight=598|SupplierProdQty=1|SupplierAutoQty=True|SupplierUseCachedPricing=True|SupplierCurrency=<none>
|
||||
Configuration1_Name3=GroupOrder
|
||||
Configuration1_Item3=Supplier Part Number 1=True|Comment=True|Footprint=True
|
||||
Configuration1_Name4=OutputConfigurationParameter1
|
||||
Configuration1_Item4=Record=BOMPrintView|ShowNoERC=True|ShowParamSet=True|ShowProbe=True|ShowBlanket=True|ExpandDesignator=True|ExpandNetLabel=False|ExpandPort=False|ExpandSheetNum=False|ExpandDocNum=False
|
||||
Configuration1_Name5=SortOrder
|
||||
Configuration1_Item5=Designator=Up|Comment=Up|Footprint=Up
|
||||
Configuration1_Name6=VisibleOrder
|
||||
Configuration1_Item6=Comment=100|Description=100|Designator=100|Footprint=100|LibRef=100|Quantity=100|Manufacturer 1=100|Manufacturer Part Number 1=100|Supplier 1=100|Supplier Order Qty 1=100|Supplier Part Number 1=100|Supplier Stock 1=100|Supplier Subtotal 1=100|Supplier Unit Price 1=100|Value=100
|
||||
OutputType2=ComponentCrossReference
|
||||
OutputName2=Component Cross Reference Report
|
||||
OutputDocumentPath2=
|
||||
OutputVariantName2=
|
||||
OutputDefault2=0
|
||||
OutputType3=Design Rules Check
|
||||
OutputName3=Design Rules Check
|
||||
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|PaperKind=Letter|PrintScaleMode=1
|
||||
OutputType4=Electrical Rules Check
|
||||
OutputName4=Electrical Rules Check
|
||||
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|PaperKind=Letter|PrintScaleMode=1
|
||||
OutputType5=ReportHierarchy
|
||||
OutputName5=Report Project Hierarchy
|
||||
OutputDocumentPath5=
|
||||
OutputVariantName5=
|
||||
OutputDefault5=0
|
||||
OutputType6=Script
|
||||
OutputName6=Script Output
|
||||
OutputDocumentPath6=
|
||||
OutputVariantName6=
|
||||
OutputDefault6=0
|
||||
OutputType7=SimpleBOM
|
||||
OutputName7=Simple BOM
|
||||
OutputDocumentPath7=
|
||||
OutputVariantName7=
|
||||
OutputDefault7=0
|
||||
OutputType8=SinglePinNetReporter
|
||||
OutputName8=Report Single Pin Nets
|
||||
OutputDocumentPath8=
|
||||
OutputVariantName8=
|
||||
OutputDefault8=0
|
||||
|
||||
[OutputGroup7]
|
||||
Name=Other Outputs
|
||||
Description=
|
||||
TargetPrinter=Microsoft XPS Document Writer
|
||||
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=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|PaperKind=Letter|PrintScaleMode=1
|
||||
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=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
|
||||
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=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
|
||||
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=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
|
||||
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=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
|
||||
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=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
|
||||
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=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
|
||||
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=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
|
||||
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=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
|
||||
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=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
|
||||
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=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
|
||||
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=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
|
||||
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=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
|
||||
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=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
|
||||
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=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
|
||||
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=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
|
||||
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=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
|
||||
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=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
|
||||
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=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
|
||||
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=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
|
||||
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=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
|
||||
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=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
|
||||
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=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
|
||||
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=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
|
||||
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=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
|
||||
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=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
|
||||
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=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
|
||||
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=-4|MediaType=1|DitherType=10|PaperKind=A4|PrintScaleMode=1
|
||||
|
||||
[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
|
||||
|
||||
[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
|
||||
|
||||
[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
|
||||
|
||||
[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
|
||||
MatchParameter1=Comment
|
||||
MatchStrictly1=1
|
||||
MatchParameter2=Library Reference
|
||||
MatchStrictly2=1
|
||||
PhysicalNamingFormat=$Component_$RoomName
|
||||
GlobalIndexSortOrder=3
|
||||
|
||||
[PrjClassGen]
|
||||
CompClassManualEnabled=0
|
||||
CompClassManualRoomEnabled=0
|
||||
NetClassAutoBusEnabled=1
|
||||
NetClassAutoCompEnabled=0
|
||||
NetClassAutoNamedHarnessEnabled=0
|
||||
NetClassManualEnabled=1
|
||||
|
||||
[LibraryUpdateOptions]
|
||||
SelectedOnly=0
|
||||
PartTypes=0
|
||||
FullReplace=1
|
||||
UpdateDesignatorLock=1
|
||||
UpdatePartIDLock=1
|
||||
DoGraphics=1
|
||||
DoParameters=1
|
||||
DoModels=1
|
||||
AddParameters=0
|
||||
RemoveParameters=0
|
||||
AddModels=1
|
||||
RemoveModels=1
|
||||
UpdateCurrentModels=1
|
||||
|
||||
[DatabaseUpdateOptions]
|
||||
SelectedOnly=0
|
||||
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
|
||||
|
||||
[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|PaperKind=A4|PrintScaleMode=1
|
||||
|
Binary file not shown.
Binary file not shown.
@ -2,11 +2,12 @@
|
||||
<object name="ManualControlCommand" singleinstance="true" settings="false">
|
||||
<description>The output from the @ref ManualControlModule which descodes the receiver inputs. Overriden by GCS for fly-by-wire control.</description>
|
||||
<field name="Connected" units="" type="enum" elements="1" options="False,True"/>
|
||||
<field name="Roll" units="%" type="float" elements="1"/>
|
||||
<field name="Throttle" units="%" type="float" elements="1"/>
|
||||
<field name="Roll" units="%" type="float" elements="1"/>
|
||||
<field name="Pitch" units="%" type="float" elements="1"/>
|
||||
<field name="Yaw" units="%" type="float" elements="1"/>
|
||||
<field name="Throttle" units="%" type="float" elements="1"/>
|
||||
<field name="Channel" units="us" type="uint16" elements="8"/>
|
||||
<field name="Collective" units="%" type="float" elements="1"/>
|
||||
<field name="Channel" units="us" type="uint16" elements="9"/>
|
||||
<access gcs="readwrite" flight="readwrite"/>
|
||||
<telemetrygcs acked="false" updatemode="manual" period="0"/>
|
||||
<telemetryflight acked="false" updatemode="periodic" period="2000"/>
|
||||
|
@ -2,16 +2,16 @@
|
||||
<object name="ManualControlSettings" singleinstance="true" settings="true">
|
||||
<description>Settings to indicate how to decode receiver input by @ref ManualControlModule.</description>
|
||||
<field name="ChannelGroups" units="Channel Group" type="enum"
|
||||
elementnames="Roll,Pitch,Yaw,Throttle,FlightMode,Accessory0,Accessory1,Accessory2"
|
||||
elementnames="Throttle,Roll,Pitch,Yaw,FlightMode,Collective,Accessory0,Accessory1,Accessory2"
|
||||
options="PWM,PPM,Spektrum1,Spektrum2,S.Bus,GCS,None" defaultvalue="None"/>
|
||||
<field name="ChannelNumber" units="channel" type="uint8" defaultvalue="255"
|
||||
elementnames="Roll,Pitch,Yaw,Throttle,FlightMode,Accessory0,Accessory1,Accessory2"/>
|
||||
<field name="ChannelNumber" units="channel" type="uint8" defaultvalue="0"
|
||||
elementnames="Throttle,Roll,Pitch,Yaw,FlightMode,Collective,Accessory0,Accessory1,Accessory2"/>
|
||||
<field name="ChannelMin" units="us" type="int16" defaultvalue="1000"
|
||||
elementnames="Roll,Pitch,Yaw,Throttle,FlightMode,Accessory0,Accessory1,Accessory2"/>
|
||||
elementnames="Throttle,Roll,Pitch,Yaw,FlightMode,Collective,Accessory0,Accessory1,Accessory2"/>
|
||||
<field name="ChannelNeutral" units="us" type="int16" defaultvalue="1500"
|
||||
elementnames="Roll,Pitch,Yaw,Throttle,FlightMode,Accessory0,Accessory1,Accessory2"/>
|
||||
elementnames="Throttle,Roll,Pitch,Yaw,FlightMode,Collective,Accessory0,Accessory1,Accessory2"/>
|
||||
<field name="ChannelMax" units="us" type="int16" defaultvalue="2000"
|
||||
elementnames="Roll,Pitch,Yaw,Throttle,FlightMode,Accessory0,Accessory1,Accessory2"/>
|
||||
elementnames="Throttle,Roll,Pitch,Yaw,FlightMode,Collective,Accessory0,Accessory1,Accessory2"/>
|
||||
|
||||
<field name="Arming" units="" type="enum" elements="1" options="Always Disarmed,Always Armed,Roll Left,Roll Right,Pitch Forward,Pitch Aft,Yaw Left,Yaw Right" defaultvalue="Always Disarmed"/>
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
<field name="AccelTime" units="ms" type="float" elements="1" defaultvalue="0"/>
|
||||
<field name="DecelTime" units="ms" type="float" elements="1" defaultvalue="0"/>
|
||||
<field name="ThrottleCurve1" units="percent" type="float" elements="5" elementnames="0,25,50,75,100" defaultvalue="0,0,0,0,0"/>
|
||||
<field name="Curve2Source" units="" type="enum" elements="1" options="Throttle,Roll,Pitch,Yaw,Accessory0,Accessory1,Accessory2,Accessory3,Accessory4,Accessory5" defaultvalue="Throttle"/>
|
||||
<field name="Curve2Source" units="" type="enum" elements="1" options="Throttle,Roll,Pitch,Yaw,Collective,Accessory0,Accessory1,Accessory2,Accessory3,Accessory4,Accessory5" defaultvalue="Throttle"/>
|
||||
<field name="ThrottleCurve2" units="percent" type="float" elements="5" elementnames="0,25,50,75,100" defaultvalue="0,0.25,0.5,0.75,1"/>
|
||||
<field name="Mixer1Type" units="" type="enum" elements="1" options="Disabled,Motor,Servo,CameraRoll,CameraPitch,CameraYaw,Accessory0,Accessory1,Accessory2,Accessory3,Accessory4,Accessory5" defaultvalue="Disabled"/>
|
||||
<field name="Mixer1Vector" units="" type="int8" elements="5" elementnames="ThrottleCurve1,ThrottleCurve2,Roll,Pitch,Yaw" defaultvalue="0"/>
|
||||
|
Loading…
x
Reference in New Issue
Block a user