1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-02-20 10:54:14 +01:00

Merge branch 'pt/CC3D_Release' of ssh://gitolite@git.openpilot.org/OpenPilot.git into CC3D_Release

This commit is contained in:
Mike LaBranche 2012-08-12 08:40:43 -07:00
commit c414f80fd7
41 changed files with 3534 additions and 465 deletions

View File

@ -33,7 +33,6 @@
#define PIOS_INCLUDE_SYS
#define PIOS_INCLUDE_DELAY
#define PIOS_INCLUDE_LED
#define PIOS_INCLUDE_SDCARD
#define PIOS_INCLUDE_FREERTOS
#define PIOS_INCLUDE_COM
#define PIOS_INCLUDE_UDP

View File

@ -463,15 +463,6 @@ static void updateSystemAlarms()
AlarmsClear(SYSTEMALARMS_ALARM_STACKOVERFLOW);
}
#if defined(PIOS_INCLUDE_SDCARD)
// Check for SD card
if (PIOS_SDCARD_IsMounted() == 0) {
AlarmsSet(SYSTEMALARMS_ALARM_SDCARD, SYSTEMALARMS_ALARM_ERROR);
} else {
AlarmsClear(SYSTEMALARMS_ALARM_SDCARD);
}
#endif
// Check for event errors
UAVObjGetStats(&objStats);
EventGetStats(&evStats);

View File

@ -33,7 +33,6 @@
#define PIOS_INCLUDE_SYS
#define PIOS_INCLUDE_DELAY
#define PIOS_INCLUDE_LED
#define PIOS_INCLUDE_SDCARD
#define PIOS_INCLUDE_FREERTOS
#define PIOS_INCLUDE_COM
#define PIOS_INCLUDE_UDP

View File

@ -46,13 +46,6 @@
#define UAVOBJ_GCS_TELEMETRY_UPDATE_MODE_SHIFT 6
#define UAVOBJ_UPDATE_MODE_MASK 0x3
// FIXME: All this typedef for SDCARD needs to be abstracted away
#if !defined(PIOS_INCLUDE_SDCARD)
typedef struct {} FILEINFO;
#endif
typedef void* UAVObjHandle;
/**
@ -164,8 +157,10 @@ int32_t UAVObjPack(UAVObjHandle obj_handle, uint16_t instId, uint8_t* dataOut);
int32_t UAVObjSave(UAVObjHandle obj_handle, uint16_t instId);
int32_t UAVObjLoad(UAVObjHandle obj_handle, uint16_t instId);
int32_t UAVObjDelete(UAVObjHandle obj_handle, uint16_t instId);
#if defined(PIOS_INCLUDE_SDCARD)
int32_t UAVObjSaveToFile(UAVObjHandle obj_handle, uint16_t instId, FILEINFO* file);
UAVObjHandle UAVObjLoadFromFile(FILEINFO* file);
#endif
int32_t UAVObjSaveSettings();
int32_t UAVObjLoadSettings();
int32_t UAVObjDeleteSettings();

View File

@ -668,6 +668,7 @@ unlock_exit:
return rc;
}
#if defined(PIOS_INCLUDE_SDCARD)
/**
* Save the data of the specified object instance to the file system (SD card).
* The object will be appended and the file will not be closed.
@ -682,7 +683,6 @@ int32_t UAVObjSaveToFile(UAVObjHandle obj_handle, uint16_t instId,
{
PIOS_Assert(obj_handle);
#if defined(PIOS_INCLUDE_SDCARD)
uint32_t bytesWritten;
// Check for file system availability
if (PIOS_SDCARD_IsMounted() == 0) {
@ -741,9 +741,9 @@ int32_t UAVObjSaveToFile(UAVObjHandle obj_handle, uint16_t instId,
}
// Done
xSemaphoreGiveRecursive(mutex);
#endif /* PIOS_INCLUDE_SDCARD */
return 0;
}
#endif /* PIOS_INCLUDE_SDCARD */
/**
* Save the data of the specified object to the file system (SD card).
@ -811,6 +811,7 @@ int32_t UAVObjSave(UAVObjHandle obj_handle, uint16_t instId)
return 0;
}
#if defined(PIOS_INCLUDE_SDCARD)
/**
* Load an object from the file system (SD card).
* @param[in] file File to read from
@ -818,7 +819,6 @@ int32_t UAVObjSave(UAVObjHandle obj_handle, uint16_t instId)
*/
UAVObjHandle UAVObjLoadFromFile(FILEINFO * file)
{
#if defined(PIOS_INCLUDE_SDCARD)
uint32_t bytesRead;
struct UAVOBase *objEntry;
InstanceHandle instEntry;
@ -898,10 +898,8 @@ UAVObjHandle UAVObjLoadFromFile(FILEINFO * file)
// Unlock
xSemaphoreGiveRecursive(mutex);
return obj_handle;
#else /* PIOS_INCLUDE_SDCARD */
return NULL;
#endif
}
#endif /* PIOS_INCLUDE_SDCARD */
/**
* Load an object from the file system (SD card).

View File

@ -6,7 +6,19 @@
<OverrideLanguage>en_AU</OverrideLanguage>
<SaveSettingsOnExit>true</SaveSettingsOnExit>
<UDPMirror>false</UDPMirror>
<Description>Default configuration</Description>
<Details>Default configuration built to work on all screen sizes</Details>
<StyleSheet>default</StyleSheet>
</General>
<IPconnection>
<Current>
<arr_1>
<Port>1</Port>
<UseTCP>0</UseTCP>
</arr_1>
<size>1</size>
</Current>
</IPconnection>
<KeyBindings>
<size>0</size>
</KeyBindings>
@ -24,6 +36,58 @@
<Mode6>86</Mode6>
<Welcome>100</Welcome>
</ModePriorities>
<Plugins>
<SoundNotifyPlugin>
<configInfo>
<locked>false</locked>
<version>1.0.0</version>
</configInfo>
<data>
<Current>
<arr_1>
<CurrentLanguage>default</CurrentLanguage>
<DataObject>FlightStatus</DataObject>
<ExpireTimeout>0</ExpireTimeout>
<Mute>false</Mute>
<ObjectField>Armed</ObjectField>
<RangeLimit>0</RangeLimit>
<Repeat>0</Repeat>
<SayOrder>0</SayOrder>
<Sound1>armed</Sound1>
<Sound2></Sound2>
<Sound3></Sound3>
<SoundCollectionPath>%%DATAPATH%%sounds</SoundCollectionPath>
<Value1>Armed</Value1>
<Value2>0</Value2>
</arr_1>
<size>1</size>
</Current>
<EnableSound>true</EnableSound>
<listNotifies>
<arr_1>
<CurrentLanguage>default</CurrentLanguage>
<DataObject>FlightStatus</DataObject>
<ExpireTimeout>15</ExpireTimeout>
<Mute>false</Mute>
<ObjectField>Armed</ObjectField>
<RangeLimit>0</RangeLimit>
<Repeat>0</Repeat>
<SayOrder>0</SayOrder>
<Sound1>armed</Sound1>
<Sound2></Sound2>
<Sound3></Sound3>
<SoundCollectionPath>%%DATAPATH%%sounds</SoundCollectionPath>
<Value1>Armed</Value1>
<Value2>0</Value2>
</arr_1>
<size>1</size>
</listNotifies>
</data>
</SoundNotifyPlugin>
</Plugins>
<SerialConnection>
<speed>57600</speed>
</SerialConnection>
<UAVGadgetConfigurations>
<ConfigGadget>
<default>
@ -1691,8 +1755,8 @@
<altitude>2000</altitude>
<cacheOnly>false</cacheOnly>
<earthFile>%%DATAPATH%%pfd/default/readymap.earth</earthFile>
<latitude>46.671478</latitude>
<longitude>10.158932</longitude>
<latitude>46.6715</latitude>
<longitude>10.1589</longitude>
<qmlFile>%%DATAPATH%%pfd/default/Pfd.qml</qmlFile>
<terrainEnabled>false</terrainEnabled>
</data>
@ -1707,10 +1771,10 @@
<altitude>2000</altitude>
<cacheOnly>false</cacheOnly>
<earthFile>%%DATAPATH%%pfd/default/readymap.earth</earthFile>
<latitude>46.671478</latitude>
<longitude>10.158932</longitude>
<latitude>46.6715</latitude>
<longitude>10.1589</longitude>
<qmlFile>%%DATAPATH%%pfd/default/Pfd.qml</qmlFile>
<terrainEnabled>true</terrainEnabled>
<terrainEnabled>false</terrainEnabled>
</data>
</Terrain>
</PfdQmlGadget>
@ -1735,7 +1799,6 @@
<data>
<LoggingEnabled>false</LoggingEnabled>
<LoggingNewFileOnConnect>false</LoggingNewFileOnConnect>
<LoggingPath></LoggingPath>
<configurationStreamVersion>1000</configurationStreamVersion>
<dataSize>60</dataSize>
<plotCurve0>
@ -1781,7 +1844,6 @@
<data>
<LoggingEnabled>false</LoggingEnabled>
<LoggingNewFileOnConnect>false</LoggingNewFileOnConnect>
<LoggingPath></LoggingPath>
<configurationStreamVersion>1000</configurationStreamVersion>
<dataSize>20</dataSize>
<plotCurve0>
@ -1837,7 +1899,6 @@
<data>
<LoggingEnabled>false</LoggingEnabled>
<LoggingNewFileOnConnect>false</LoggingNewFileOnConnect>
<LoggingPath></LoggingPath>
<configurationStreamVersion>1000</configurationStreamVersion>
<dataSize>60</dataSize>
<plotCurve0>
@ -1883,7 +1944,6 @@
<data>
<LoggingEnabled>false</LoggingEnabled>
<LoggingNewFileOnConnect>false</LoggingNewFileOnConnect>
<LoggingPath></LoggingPath>
<configurationStreamVersion>1000</configurationStreamVersion>
<dataSize>60</dataSize>
<plotCurve0>
@ -1909,7 +1969,6 @@
<data>
<LoggingEnabled>false</LoggingEnabled>
<LoggingNewFileOnConnect>false</LoggingNewFileOnConnect>
<LoggingPath></LoggingPath>
<configurationStreamVersion>1000</configurationStreamVersion>
<dataSize>40</dataSize>
<plotCurve0>
@ -2005,7 +2064,6 @@
<data>
<LoggingEnabled>false</LoggingEnabled>
<LoggingNewFileOnConnect>false</LoggingNewFileOnConnect>
<LoggingPath></LoggingPath>
<configurationStreamVersion>1000</configurationStreamVersion>
<dataSize>60</dataSize>
<plotCurve0>
@ -2051,7 +2109,6 @@
<data>
<LoggingEnabled>false</LoggingEnabled>
<LoggingNewFileOnConnect>false</LoggingNewFileOnConnect>
<LoggingPath></LoggingPath>
<configurationStreamVersion>1000</configurationStreamVersion>
<dataSize>60</dataSize>
<plotCurve0>
@ -2097,7 +2154,6 @@
<data>
<LoggingEnabled>false</LoggingEnabled>
<LoggingNewFileOnConnect>false</LoggingNewFileOnConnect>
<LoggingPath></LoggingPath>
<configurationStreamVersion>1000</configurationStreamVersion>
<dataSize>60</dataSize>
<plotCurve0>
@ -2143,7 +2199,6 @@
<data>
<LoggingEnabled>false</LoggingEnabled>
<LoggingNewFileOnConnect>false</LoggingNewFileOnConnect>
<LoggingPath></LoggingPath>
<configurationStreamVersion>1000</configurationStreamVersion>
<dataSize>240</dataSize>
<plotCurve0>
@ -2279,7 +2334,6 @@
<data>
<LoggingEnabled>false</LoggingEnabled>
<LoggingNewFileOnConnect>false</LoggingNewFileOnConnect>
<LoggingPath></LoggingPath>
<configurationStreamVersion>1000</configurationStreamVersion>
<dataSize>20</dataSize>
<plotCurve0>
@ -2325,7 +2379,6 @@
<data>
<LoggingEnabled>false</LoggingEnabled>
<LoggingNewFileOnConnect>false</LoggingNewFileOnConnect>
<LoggingPath></LoggingPath>
<configurationStreamVersion>1000</configurationStreamVersion>
<dataSize>240</dataSize>
<plotCurve0>
@ -2340,9 +2393,6 @@
</plotCurve0>
<plotCurve1>
<color>0</color>
<mathFunction></mathFunction>
<uavField></uavField>
<uavObject></uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>

View File

@ -0,0 +1,2765 @@
<gcs>
<General>
<AutoConnect>true</AutoConnect>
<AutoSelect>true</AutoSelect>
<ExpertMode>false</ExpertMode>
<LastPreferenceCategory>Notify Plugin</LastPreferenceCategory>
<LastPreferencePage>settings</LastPreferencePage>
<SaveSettingsOnExit>true</SaveSettingsOnExit>
<SettingsWindowHeight>600</SettingsWindowHeight>
<SettingsWindowWidth>800</SettingsWindowWidth>
<UDPMirror>false</UDPMirror>
<Description>Wide configuration</Description>
<Details>Default configuration built for wide screens (17"up)</Details>
<StyleSheet>wide</StyleSheet>
</General>
<IPconnection>
<Current>
<arr_1>
<Port>1</Port>
<UseTCP>0</UseTCP>
</arr_1>
<size>1</size>
</Current>
</IPconnection>
<KeyBindings>
<size>0</size>
</KeyBindings>
<MainWindow>
<Color>#666666</Color>
<FullScreen>false</FullScreen>
<Maximized>true</Maximized>
</MainWindow>
<ModePriorities>
<Mode1>91</Mode1>
<Mode2>90</Mode2>
<Mode3>89</Mode3>
<Mode4>88</Mode4>
<Mode5>87</Mode5>
<Mode6>86</Mode6>
<Welcome>100</Welcome>
</ModePriorities>
<Plugins>
<SoundNotifyPlugin>
<configInfo>
<locked>false</locked>
<version>1.0.0</version>
</configInfo>
<data>
<Current>
<arr_1>
<CurrentLanguage>default</CurrentLanguage>
<DataObject>FlightStatus</DataObject>
<ExpireTimeout>0</ExpireTimeout>
<Mute>false</Mute>
<ObjectField>Armed</ObjectField>
<RangeLimit>0</RangeLimit>
<Repeat>0</Repeat>
<SayOrder>0</SayOrder>
<Sound1>armed</Sound1>
<Sound2></Sound2>
<Sound3></Sound3>
<SoundCollectionPath>%%DATAPATH%%sounds</SoundCollectionPath>
<Value1>Armed</Value1>
<Value2>0</Value2>
</arr_1>
<size>1</size>
</Current>
<EnableSound>true</EnableSound>
<listNotifies>
<arr_1>
<CurrentLanguage>default</CurrentLanguage>
<DataObject>FlightStatus</DataObject>
<ExpireTimeout>15</ExpireTimeout>
<Mute>false</Mute>
<ObjectField>Armed</ObjectField>
<RangeLimit>0</RangeLimit>
<Repeat>0</Repeat>
<SayOrder>0</SayOrder>
<Sound1>armed</Sound1>
<Sound2></Sound2>
<Sound3></Sound3>
<SoundCollectionPath>%%DATAPATH%%sounds</SoundCollectionPath>
<Value1>Armed</Value1>
<Value2>0</Value2>
</arr_1>
<size>1</size>
</listNotifies>
</data>
</SoundNotifyPlugin>
</Plugins>
<SerialConnection>
<speed>57600</speed>
</SerialConnection>
<UAVGadgetConfigurations>
<ConfigGadget>
<default>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
</default>
</ConfigGadget>
<DialGadget>
<Attitude>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<beSmooth>false</beSmooth>
<dialBackgroundID>background</dialBackgroundID>
<dialFile>%%DATAPATH%%dials/default/attitude.svg</dialFile>
<dialForegroundID>foreground</dialForegroundID>
<dialNeedleID1>needle</dialNeedleID1>
<dialNeedleID2>needle</dialNeedleID2>
<dialNeedleID3>needle3</dialNeedleID3>
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
<needle1DataObject>AttitudeActual</needle1DataObject>
<needle1Factor>-1</needle1Factor>
<needle1MaxValue>360</needle1MaxValue>
<needle1MinValue>0</needle1MinValue>
<needle1Move>Rotate</needle1Move>
<needle1ObjectField>Roll</needle1ObjectField>
<needle2DataObject>AttitudeActual</needle2DataObject>
<needle2Factor>75</needle2Factor>
<needle2MaxValue>20</needle2MaxValue>
<needle2MinValue>0</needle2MinValue>
<needle2Move>Vertical</needle2Move>
<needle2ObjectField>Pitch</needle2ObjectField>
<needle3DataObject>AttitudeActual</needle3DataObject>
<needle3Factor>-1</needle3Factor>
<needle3MaxValue>360</needle3MaxValue>
<needle3MinValue>0</needle3MinValue>
<needle3Move>Rotate</needle3Move>
<needle3ObjectField>Roll</needle3ObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
</data>
</Attitude>
<Baro__PCT__20Altimeter>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<beSmooth>false</beSmooth>
<dialBackgroundID>background</dialBackgroundID>
<dialFile>%%DATAPATH%%dials/default/altimeter.svg</dialFile>
<dialForegroundID>foreground</dialForegroundID>
<dialNeedleID1>needle</dialNeedleID1>
<dialNeedleID2>needle2</dialNeedleID2>
<dialNeedleID3>needle3</dialNeedleID3>
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
<needle1DataObject>BaroAltitude</needle1DataObject>
<needle1Factor>1</needle1Factor>
<needle1MaxValue>10</needle1MaxValue>
<needle1MinValue>0</needle1MinValue>
<needle1Move>Rotate</needle1Move>
<needle1ObjectField>Altitude</needle1ObjectField>
<needle2DataObject>BaroAltitude</needle2DataObject>
<needle2Factor>1</needle2Factor>
<needle2MaxValue>100</needle2MaxValue>
<needle2MinValue>0</needle2MinValue>
<needle2Move>Rotate</needle2Move>
<needle2ObjectField>Altitude</needle2ObjectField>
<needle3DataObject>BaroAltitude</needle3DataObject>
<needle3Factor>1</needle3Factor>
<needle3MaxValue>1000</needle3MaxValue>
<needle3MinValue>0</needle3MinValue>
<needle3Move>Rotate</needle3Move>
<needle3ObjectField>Altitude</needle3ObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
</data>
</Baro__PCT__20Altimeter>
<Barometer>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<beSmooth>false</beSmooth>
<dialBackgroundID>background</dialBackgroundID>
<dialFile>%%DATAPATH%%dials/default/barometer.svg</dialFile>
<dialNeedleID1>needle</dialNeedleID1>
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
<needle1DataObject>BaroAltitude</needle1DataObject>
<needle1Factor>10</needle1Factor>
<needle1MaxValue>1120</needle1MaxValue>
<needle1MinValue>1000</needle1MinValue>
<needle1Move>Rotate</needle1Move>
<needle1ObjectField>Pressure</needle1ObjectField>
<needle2DataObject>BaroAltitude</needle2DataObject>
<needle2Factor>1</needle2Factor>
<needle2MaxValue>100</needle2MaxValue>
<needle2MinValue>0</needle2MinValue>
<needle2Move>Rotate</needle2Move>
<needle2ObjectField>Altitude</needle2ObjectField>
<needle3DataObject>BaroAltitude</needle3DataObject>
<needle3Factor>1</needle3Factor>
<needle3MaxValue>1000</needle3MaxValue>
<needle3MinValue>0</needle3MinValue>
<needle3Move>Rotate</needle3Move>
<needle3ObjectField>Altitude</needle3ObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
</data>
</Barometer>
<Climbrate>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<beSmooth>false</beSmooth>
<dialBackgroundID>background</dialBackgroundID>
<dialFile>%%DATAPATH%%dials/default/vsi.svg</dialFile>
<dialNeedleID1>needle</dialNeedleID1>
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
<needle1DataObject>VelocityActual</needle1DataObject>
<needle1Factor>0.01</needle1Factor>
<needle1MaxValue>12</needle1MaxValue>
<needle1MinValue>-12</needle1MinValue>
<needle1Move>Rotate</needle1Move>
<needle1ObjectField>Down</needle1ObjectField>
<needle2DataObject>BaroAltitude</needle2DataObject>
<needle2Factor>1</needle2Factor>
<needle2MaxValue>100</needle2MaxValue>
<needle2MinValue>0</needle2MinValue>
<needle2Move>Rotate</needle2Move>
<needle2ObjectField>Altitude</needle2ObjectField>
<needle3DataObject>BaroAltitude</needle3DataObject>
<needle3Factor>1</needle3Factor>
<needle3MaxValue>1000</needle3MaxValue>
<needle3MinValue>0</needle3MinValue>
<needle3Move>Rotate</needle3Move>
<needle3ObjectField>Altitude</needle3ObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
</data>
</Climbrate>
<Compass>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<beSmooth>false</beSmooth>
<dialBackgroundID>background</dialBackgroundID>
<dialFile>%%DATAPATH%%dials/default/compass.svg</dialFile>
<dialForegroundID>foreground</dialForegroundID>
<dialNeedleID1>needle</dialNeedleID1>
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
<needle1DataObject>AttitudeActual</needle1DataObject>
<needle1Factor>-1</needle1Factor>
<needle1MaxValue>360</needle1MaxValue>
<needle1MinValue>0</needle1MinValue>
<needle1Move>Rotate</needle1Move>
<needle1ObjectField>Yaw</needle1ObjectField>
<needle2DataObject>BaroAltitude</needle2DataObject>
<needle2Factor>1</needle2Factor>
<needle2MaxValue>100</needle2MaxValue>
<needle2MinValue>0</needle2MinValue>
<needle2Move>Rotate</needle2Move>
<needle2ObjectField>Altitude</needle2ObjectField>
<needle3DataObject>BaroAltitude</needle3DataObject>
<needle3Factor>1</needle3Factor>
<needle3MaxValue>1000</needle3MaxValue>
<needle3MinValue>0</needle3MinValue>
<needle3Move>Rotate</needle3Move>
<needle3ObjectField>Altitude</needle3ObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
</data>
</Compass>
<Deluxe__PCT__20Attitude>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<beSmooth>false</beSmooth>
<dialBackgroundID>background</dialBackgroundID>
<dialFile>%%DATAPATH%%dials/deluxe/attitude.svg</dialFile>
<dialForegroundID>foreground</dialForegroundID>
<dialNeedleID1>needle</dialNeedleID1>
<dialNeedleID2>needle</dialNeedleID2>
<dialNeedleID3>needle3</dialNeedleID3>
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
<needle1DataObject>AttitudeActual</needle1DataObject>
<needle1Factor>-1</needle1Factor>
<needle1MaxValue>360</needle1MaxValue>
<needle1MinValue>0</needle1MinValue>
<needle1Move>Rotate</needle1Move>
<needle1ObjectField>Roll</needle1ObjectField>
<needle2DataObject>AttitudeActual</needle2DataObject>
<needle2Factor>75</needle2Factor>
<needle2MaxValue>20</needle2MaxValue>
<needle2MinValue>0</needle2MinValue>
<needle2Move>Vertical</needle2Move>
<needle2ObjectField>Pitch</needle2ObjectField>
<needle3DataObject>AttitudeActual</needle3DataObject>
<needle3Factor>-1</needle3Factor>
<needle3MaxValue>360</needle3MaxValue>
<needle3MinValue>0</needle3MinValue>
<needle3Move>Rotate</needle3Move>
<needle3ObjectField>Roll</needle3ObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
</data>
</Deluxe__PCT__20Attitude>
<Deluxe__PCT__20Baro__PCT__20Altimeter>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<beSmooth>false</beSmooth>
<dialBackgroundID>background</dialBackgroundID>
<dialFile>%%DATAPATH%%dials/deluxe/altimeter.svg</dialFile>
<dialForegroundID>foreground</dialForegroundID>
<dialNeedleID1>needle</dialNeedleID1>
<dialNeedleID2>needle2</dialNeedleID2>
<dialNeedleID3>needle3</dialNeedleID3>
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
<needle1DataObject>BaroAltitude</needle1DataObject>
<needle1Factor>1</needle1Factor>
<needle1MaxValue>10</needle1MaxValue>
<needle1MinValue>0</needle1MinValue>
<needle1Move>Rotate</needle1Move>
<needle1ObjectField>Altitude</needle1ObjectField>
<needle2DataObject>BaroAltitude</needle2DataObject>
<needle2Factor>1</needle2Factor>
<needle2MaxValue>100</needle2MaxValue>
<needle2MinValue>0</needle2MinValue>
<needle2Move>Rotate</needle2Move>
<needle2ObjectField>Altitude</needle2ObjectField>
<needle3DataObject>BaroAltitude</needle3DataObject>
<needle3Factor>1</needle3Factor>
<needle3MaxValue>1000</needle3MaxValue>
<needle3MinValue>0</needle3MinValue>
<needle3Move>Rotate</needle3Move>
<needle3ObjectField>Altitude</needle3ObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
</data>
</Deluxe__PCT__20Baro__PCT__20Altimeter>
<Deluxe__PCT__20Barometer>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<beSmooth>false</beSmooth>
<dialBackgroundID>background</dialBackgroundID>
<dialFile>%%DATAPATH%%dials/deluxe/barometer.svg</dialFile>
<dialForegroundID>foreground</dialForegroundID>
<dialNeedleID1>needle</dialNeedleID1>
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
<needle1DataObject>BaroAltitude</needle1DataObject>
<needle1Factor>10</needle1Factor>
<needle1MaxValue>1120</needle1MaxValue>
<needle1MinValue>1000</needle1MinValue>
<needle1Move>Rotate</needle1Move>
<needle1ObjectField>Pressure</needle1ObjectField>
<needle2DataObject>BaroAltitude</needle2DataObject>
<needle2Factor>1</needle2Factor>
<needle2MaxValue>100</needle2MaxValue>
<needle2MinValue>0</needle2MinValue>
<needle2Move>Rotate</needle2Move>
<needle2ObjectField>Altitude</needle2ObjectField>
<needle3DataObject>BaroAltitude</needle3DataObject>
<needle3Factor>1</needle3Factor>
<needle3MaxValue>1000</needle3MaxValue>
<needle3MinValue>0</needle3MinValue>
<needle3Move>Rotate</needle3Move>
<needle3ObjectField>Altitude</needle3ObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
</data>
</Deluxe__PCT__20Barometer>
<Deluxe__PCT__20Climbrate>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<beSmooth>false</beSmooth>
<dialBackgroundID>background</dialBackgroundID>
<dialFile>%%DATAPATH%%dials/deluxe/vsi.svg</dialFile>
<dialForegroundID>foreground</dialForegroundID>
<dialNeedleID1>needle</dialNeedleID1>
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
<needle1DataObject>VelocityActual</needle1DataObject>
<needle1Factor>0.01</needle1Factor>
<needle1MaxValue>11.2</needle1MaxValue>
<needle1MinValue>-11.2</needle1MinValue>
<needle1Move>Rotate</needle1Move>
<needle1ObjectField>Down</needle1ObjectField>
<needle2DataObject>BaroAltitude</needle2DataObject>
<needle2Factor>1</needle2Factor>
<needle2MaxValue>100</needle2MaxValue>
<needle2MinValue>0</needle2MinValue>
<needle2Move>Rotate</needle2Move>
<needle2ObjectField>Altitude</needle2ObjectField>
<needle3DataObject>BaroAltitude</needle3DataObject>
<needle3Factor>1</needle3Factor>
<needle3MaxValue>1000</needle3MaxValue>
<needle3MinValue>0</needle3MinValue>
<needle3Move>Rotate</needle3Move>
<needle3ObjectField>Altitude</needle3ObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
</data>
</Deluxe__PCT__20Climbrate>
<Deluxe__PCT__20Compass>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<beSmooth>false</beSmooth>
<dialBackgroundID>background</dialBackgroundID>
<dialFile>%%DATAPATH%%dials/deluxe/compass.svg</dialFile>
<dialForegroundID>foreground</dialForegroundID>
<dialNeedleID1>needle</dialNeedleID1>
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
<needle1DataObject>AttitudeActual</needle1DataObject>
<needle1Factor>-1</needle1Factor>
<needle1MaxValue>360</needle1MaxValue>
<needle1MinValue>0</needle1MinValue>
<needle1Move>Rotate</needle1Move>
<needle1ObjectField>Yaw</needle1ObjectField>
<needle2DataObject>BaroAltitude</needle2DataObject>
<needle2Factor>1</needle2Factor>
<needle2MaxValue>100</needle2MaxValue>
<needle2MinValue>0</needle2MinValue>
<needle2Move>Rotate</needle2Move>
<needle2ObjectField>Altitude</needle2ObjectField>
<needle3DataObject>BaroAltitude</needle3DataObject>
<needle3Factor>1</needle3Factor>
<needle3MaxValue>1000</needle3MaxValue>
<needle3MinValue>0</needle3MinValue>
<needle3Move>Rotate</needle3Move>
<needle3ObjectField>Altitude</needle3ObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
</data>
</Deluxe__PCT__20Compass>
<Deluxe__PCT__20Groundspeed__PCT__20kph>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<beSmooth>false</beSmooth>
<dialBackgroundID>background</dialBackgroundID>
<dialFile>%%DATAPATH%%dials/deluxe/speed.svg</dialFile>
<dialForegroundID>foreground</dialForegroundID>
<dialNeedleID1>needle</dialNeedleID1>
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
<needle1DataObject>GPSPosition</needle1DataObject>
<needle1Factor>3.6</needle1Factor>
<needle1MaxValue>120</needle1MaxValue>
<needle1MinValue>0</needle1MinValue>
<needle1Move>Rotate</needle1Move>
<needle1ObjectField>Groundspeed</needle1ObjectField>
<needle2DataObject>BaroAltitude</needle2DataObject>
<needle2Factor>1</needle2Factor>
<needle2MaxValue>100</needle2MaxValue>
<needle2MinValue>0</needle2MinValue>
<needle2Move>Rotate</needle2Move>
<needle2ObjectField>Altitude</needle2ObjectField>
<needle3DataObject>BaroAltitude</needle3DataObject>
<needle3Factor>1</needle3Factor>
<needle3MaxValue>1000</needle3MaxValue>
<needle3MinValue>0</needle3MinValue>
<needle3Move>Rotate</needle3Move>
<needle3ObjectField>Altitude</needle3ObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
</data>
</Deluxe__PCT__20Groundspeed__PCT__20kph>
<Deluxe__PCT__20Temperature>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<beSmooth>false</beSmooth>
<dialBackgroundID>background</dialBackgroundID>
<dialFile>%%DATAPATH%%dials/deluxe/thermometer.svg</dialFile>
<dialForegroundID>foreground</dialForegroundID>
<dialNeedleID1>needle</dialNeedleID1>
<dialNeedleID2>needle2</dialNeedleID2>
<dialNeedleID3>needle3</dialNeedleID3>
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
<needle1DataObject>BaroAltitude</needle1DataObject>
<needle1Factor>1</needle1Factor>
<needle1MaxValue>120</needle1MaxValue>
<needle1MinValue>0</needle1MinValue>
<needle1Move>Rotate</needle1Move>
<needle1ObjectField>Temperature</needle1ObjectField>
<needle2DataObject>BaroAltitude</needle2DataObject>
<needle2Factor>1</needle2Factor>
<needle2MaxValue>100</needle2MaxValue>
<needle2MinValue>0</needle2MinValue>
<needle2Move>Rotate</needle2Move>
<needle2ObjectField>Altitude</needle2ObjectField>
<needle3DataObject>BaroAltitude</needle3DataObject>
<needle3Factor>1</needle3Factor>
<needle3MaxValue>1000</needle3MaxValue>
<needle3MinValue>0</needle3MinValue>
<needle3Move>Rotate</needle3Move>
<needle3ObjectField>Altitude</needle3ObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
</data>
</Deluxe__PCT__20Temperature>
<Deluxe__PCT__20Turn__PCT__20Coordinator>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<beSmooth>false</beSmooth>
<dialBackgroundID>background</dialBackgroundID>
<dialFile>/home/lafargue/OP/OpenPilot/trunk/artwork/Dials/deluxe/turncoordinator.svg</dialFile>
<dialForegroundID>foreground</dialForegroundID>
<dialNeedleID1>needle</dialNeedleID1>
<dialNeedleID2>needle2</dialNeedleID2>
<dialNeedleID3>needle2</dialNeedleID3>
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
<needle1DataObject>AttitudeActual</needle1DataObject>
<needle1Factor>-1</needle1Factor>
<needle1MaxValue>360</needle1MaxValue>
<needle1MinValue>0</needle1MinValue>
<needle1Move>Rotate</needle1Move>
<needle1ObjectField>Roll</needle1ObjectField>
<needle2DataObject>Accels</needle2DataObject>
<needle2Factor>1</needle2Factor>
<needle2MaxValue>20</needle2MaxValue>
<needle2MinValue>-20</needle2MinValue>
<needle2Move>Horizontal</needle2Move>
<needle2ObjectField>x</needle2ObjectField>
<needle3DataObject>Accels</needle3DataObject>
<needle3Factor>-1</needle3Factor>
<needle3MaxValue>360</needle3MaxValue>
<needle3MinValue>0</needle3MinValue>
<needle3Move>Rotate</needle3Move>
<needle3ObjectField>x</needle3ObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
</data>
</Deluxe__PCT__20Turn__PCT__20Coordinator>
<Groundspeed__PCT__20kph>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<beSmooth>false</beSmooth>
<dialBackgroundID>background</dialBackgroundID>
<dialFile>%%DATAPATH%%dials/default/speed.svg</dialFile>
<dialNeedleID1>needle</dialNeedleID1>
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
<needle1DataObject>GPSPosition</needle1DataObject>
<needle1Factor>3.6</needle1Factor>
<needle1MaxValue>120</needle1MaxValue>
<needle1MinValue>0</needle1MinValue>
<needle1Move>Rotate</needle1Move>
<needle1ObjectField>Groundspeed</needle1ObjectField>
<needle2DataObject>BaroAltitude</needle2DataObject>
<needle2Factor>1</needle2Factor>
<needle2MaxValue>100</needle2MaxValue>
<needle2MinValue>0</needle2MinValue>
<needle2Move>Rotate</needle2Move>
<needle2ObjectField>Altitude</needle2ObjectField>
<needle3DataObject>BaroAltitude</needle3DataObject>
<needle3Factor>1</needle3Factor>
<needle3MaxValue>1000</needle3MaxValue>
<needle3MinValue>0</needle3MinValue>
<needle3Move>Rotate</needle3Move>
<needle3ObjectField>Altitude</needle3ObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
</data>
</Groundspeed__PCT__20kph>
<HiContrast__PCT__20Attitude>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<beSmooth>false</beSmooth>
<dialBackgroundID>background</dialBackgroundID>
<dialFile>%%DATAPATH%%dials/hi-contrast/attitude.svg</dialFile>
<dialForegroundID>foreground</dialForegroundID>
<dialNeedleID1>needle</dialNeedleID1>
<dialNeedleID2>needle</dialNeedleID2>
<dialNeedleID3>needle3</dialNeedleID3>
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
<needle1DataObject>AttitudeActual</needle1DataObject>
<needle1Factor>-1</needle1Factor>
<needle1MaxValue>360</needle1MaxValue>
<needle1MinValue>0</needle1MinValue>
<needle1Move>Rotate</needle1Move>
<needle1ObjectField>Roll</needle1ObjectField>
<needle2DataObject>AttitudeActual</needle2DataObject>
<needle2Factor>75</needle2Factor>
<needle2MaxValue>20</needle2MaxValue>
<needle2MinValue>0</needle2MinValue>
<needle2Move>Vertical</needle2Move>
<needle2ObjectField>Pitch</needle2ObjectField>
<needle3DataObject>AttitudeActual</needle3DataObject>
<needle3Factor>-1</needle3Factor>
<needle3MaxValue>360</needle3MaxValue>
<needle3MinValue>0</needle3MinValue>
<needle3Move>Rotate</needle3Move>
<needle3ObjectField>Roll</needle3ObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
</data>
</HiContrast__PCT__20Attitude>
<HiContrast__PCT__20Baro__PCT__20Altimeter>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<beSmooth>false</beSmooth>
<dialBackgroundID>background</dialBackgroundID>
<dialFile>%%DATAPATH%%dials/hi-contrast/altimeter.svg</dialFile>
<dialForegroundID>foreground</dialForegroundID>
<dialNeedleID1>needle</dialNeedleID1>
<dialNeedleID2>needle2</dialNeedleID2>
<dialNeedleID3>needle3</dialNeedleID3>
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
<needle1DataObject>BaroAltitude</needle1DataObject>
<needle1Factor>1</needle1Factor>
<needle1MaxValue>10</needle1MaxValue>
<needle1MinValue>0</needle1MinValue>
<needle1Move>Rotate</needle1Move>
<needle1ObjectField>Altitude</needle1ObjectField>
<needle2DataObject>BaroAltitude</needle2DataObject>
<needle2Factor>1</needle2Factor>
<needle2MaxValue>100</needle2MaxValue>
<needle2MinValue>0</needle2MinValue>
<needle2Move>Rotate</needle2Move>
<needle2ObjectField>Altitude</needle2ObjectField>
<needle3DataObject>BaroAltitude</needle3DataObject>
<needle3Factor>1</needle3Factor>
<needle3MaxValue>1000</needle3MaxValue>
<needle3MinValue>0</needle3MinValue>
<needle3Move>Rotate</needle3Move>
<needle3ObjectField>Altitude</needle3ObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
</data>
</HiContrast__PCT__20Baro__PCT__20Altimeter>
<HiContrast__PCT__20Barometer>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<beSmooth>false</beSmooth>
<dialBackgroundID>background</dialBackgroundID>
<dialFile>%%DATAPATH%%dials/hi-contrast/barometer.svg</dialFile>
<dialNeedleID1>needle</dialNeedleID1>
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
<needle1DataObject>BaroAltitude</needle1DataObject>
<needle1Factor>10</needle1Factor>
<needle1MaxValue>1120</needle1MaxValue>
<needle1MinValue>1000</needle1MinValue>
<needle1Move>Rotate</needle1Move>
<needle1ObjectField>Pressure</needle1ObjectField>
<needle2DataObject>BaroAltitude</needle2DataObject>
<needle2Factor>1</needle2Factor>
<needle2MaxValue>100</needle2MaxValue>
<needle2MinValue>0</needle2MinValue>
<needle2Move>Rotate</needle2Move>
<needle2ObjectField>Altitude</needle2ObjectField>
<needle3DataObject>BaroAltitude</needle3DataObject>
<needle3Factor>1</needle3Factor>
<needle3MaxValue>1000</needle3MaxValue>
<needle3MinValue>0</needle3MinValue>
<needle3Move>Rotate</needle3Move>
<needle3ObjectField>Altitude</needle3ObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
</data>
</HiContrast__PCT__20Barometer>
<HiContrast__PCT__20Climbrate>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<beSmooth>false</beSmooth>
<dialBackgroundID>background</dialBackgroundID>
<dialFile>%%DATAPATH%%dials/hi-contrast/vsi.svg</dialFile>
<dialNeedleID1>needle</dialNeedleID1>
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
<needle1DataObject>VelocityActual</needle1DataObject>
<needle1Factor>0.01</needle1Factor>
<needle1MaxValue>12</needle1MaxValue>
<needle1MinValue>-12</needle1MinValue>
<needle1Move>Rotate</needle1Move>
<needle1ObjectField>Down</needle1ObjectField>
<needle2DataObject>BaroAltitude</needle2DataObject>
<needle2Factor>1</needle2Factor>
<needle2MaxValue>100</needle2MaxValue>
<needle2MinValue>0</needle2MinValue>
<needle2Move>Rotate</needle2Move>
<needle2ObjectField>Altitude</needle2ObjectField>
<needle3DataObject>BaroAltitude</needle3DataObject>
<needle3Factor>1</needle3Factor>
<needle3MaxValue>1000</needle3MaxValue>
<needle3MinValue>0</needle3MinValue>
<needle3Move>Rotate</needle3Move>
<needle3ObjectField>Altitude</needle3ObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
</data>
</HiContrast__PCT__20Climbrate>
<HiContrast__PCT__20Compass>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<beSmooth>false</beSmooth>
<dialBackgroundID>background</dialBackgroundID>
<dialFile>%%DATAPATH%%dials/hi-contrast/compass.svg</dialFile>
<dialForegroundID>foreground</dialForegroundID>
<dialNeedleID1>needle</dialNeedleID1>
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
<needle1DataObject>AttitudeActual</needle1DataObject>
<needle1Factor>-1</needle1Factor>
<needle1MaxValue>360</needle1MaxValue>
<needle1MinValue>0</needle1MinValue>
<needle1Move>Rotate</needle1Move>
<needle1ObjectField>Yaw</needle1ObjectField>
<needle2DataObject>BaroAltitude</needle2DataObject>
<needle2Factor>1</needle2Factor>
<needle2MaxValue>100</needle2MaxValue>
<needle2MinValue>0</needle2MinValue>
<needle2Move>Rotate</needle2Move>
<needle2ObjectField>Altitude</needle2ObjectField>
<needle3DataObject>BaroAltitude</needle3DataObject>
<needle3Factor>1</needle3Factor>
<needle3MaxValue>1000</needle3MaxValue>
<needle3MinValue>0</needle3MinValue>
<needle3Move>Rotate</needle3Move>
<needle3ObjectField>Altitude</needle3ObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
</data>
</HiContrast__PCT__20Compass>
<HiContrast__PCT__20Groundspeed__PCT__20kph>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<beSmooth>false</beSmooth>
<dialBackgroundID>background</dialBackgroundID>
<dialFile>%%DATAPATH%%dials/hi-contrast/speed.svg</dialFile>
<dialNeedleID1>needle</dialNeedleID1>
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
<needle1DataObject>GPSPosition</needle1DataObject>
<needle1Factor>3.6</needle1Factor>
<needle1MaxValue>120</needle1MaxValue>
<needle1MinValue>0</needle1MinValue>
<needle1Move>Rotate</needle1Move>
<needle1ObjectField>Groundspeed</needle1ObjectField>
<needle2DataObject>BaroAltitude</needle2DataObject>
<needle2Factor>1</needle2Factor>
<needle2MaxValue>100</needle2MaxValue>
<needle2MinValue>0</needle2MinValue>
<needle2Move>Rotate</needle2Move>
<needle2ObjectField>Altitude</needle2ObjectField>
<needle3DataObject>BaroAltitude</needle3DataObject>
<needle3Factor>1</needle3Factor>
<needle3MaxValue>1000</needle3MaxValue>
<needle3MinValue>0</needle3MinValue>
<needle3Move>Rotate</needle3Move>
<needle3ObjectField>Altitude</needle3ObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
</data>
</HiContrast__PCT__20Groundspeed__PCT__20kph>
<HiContrast__PCT__20Temperature>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<beSmooth>false</beSmooth>
<dialBackgroundID>background</dialBackgroundID>
<dialFile>%%DATAPATH%%dials/hi-contrast/thermometer.svg</dialFile>
<dialNeedleID1>needle</dialNeedleID1>
<dialNeedleID2>needle2</dialNeedleID2>
<dialNeedleID3>needle3</dialNeedleID3>
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
<needle1DataObject>BaroAltitude</needle1DataObject>
<needle1Factor>1</needle1Factor>
<needle1MaxValue>120</needle1MaxValue>
<needle1MinValue>0</needle1MinValue>
<needle1Move>Rotate</needle1Move>
<needle1ObjectField>Temperature</needle1ObjectField>
<needle2DataObject>BaroAltitude</needle2DataObject>
<needle2Factor>1</needle2Factor>
<needle2MaxValue>100</needle2MaxValue>
<needle2MinValue>0</needle2MinValue>
<needle2Move>Rotate</needle2Move>
<needle2ObjectField>Altitude</needle2ObjectField>
<needle3DataObject>BaroAltitude</needle3DataObject>
<needle3Factor>1</needle3Factor>
<needle3MaxValue>1000</needle3MaxValue>
<needle3MinValue>0</needle3MinValue>
<needle3Move>Rotate</needle3Move>
<needle3ObjectField>Altitude</needle3ObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
</data>
</HiContrast__PCT__20Temperature>
<Servo__PCT__20Channel__PCT__201>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<beSmooth>false</beSmooth>
<dialBackgroundID>background</dialBackgroundID>
<dialFile>%%DATAPATH%%dials/default/thermometer.svg</dialFile>
<dialNeedleID1>needle</dialNeedleID1>
<dialNeedleID2>needle2</dialNeedleID2>
<dialNeedleID3>needle3</dialNeedleID3>
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
<needle1DataObject>ManualControlCommand</needle1DataObject>
<needle1Factor>1</needle1Factor>
<needle1MaxValue>2000</needle1MaxValue>
<needle1MinValue>1000</needle1MinValue>
<needle1Move>Rotate</needle1Move>
<needle1ObjectField>Channel-3</needle1ObjectField>
<needle2DataObject>BaroAltitude</needle2DataObject>
<needle2Factor>1</needle2Factor>
<needle2MaxValue>100</needle2MaxValue>
<needle2MinValue>0</needle2MinValue>
<needle2Move>Rotate</needle2Move>
<needle2ObjectField>Altitude</needle2ObjectField>
<needle3DataObject>BaroAltitude</needle3DataObject>
<needle3Factor>1</needle3Factor>
<needle3MaxValue>1000</needle3MaxValue>
<needle3MinValue>0</needle3MinValue>
<needle3Move>Rotate</needle3Move>
<needle3ObjectField>Altitude</needle3ObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
</data>
</Servo__PCT__20Channel__PCT__201>
<Temperature>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<beSmooth>false</beSmooth>
<dialBackgroundID>background</dialBackgroundID>
<dialFile>%%DATAPATH%%dials/default/thermometer.svg</dialFile>
<dialNeedleID1>needle</dialNeedleID1>
<dialNeedleID2>needle2</dialNeedleID2>
<dialNeedleID3>needle3</dialNeedleID3>
<font>MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0</font>
<needle1DataObject>BaroAltitude</needle1DataObject>
<needle1Factor>1</needle1Factor>
<needle1MaxValue>120</needle1MaxValue>
<needle1MinValue>0</needle1MinValue>
<needle1Move>Rotate</needle1Move>
<needle1ObjectField>Temperature</needle1ObjectField>
<needle2DataObject>BaroAltitude</needle2DataObject>
<needle2Factor>1</needle2Factor>
<needle2MaxValue>100</needle2MaxValue>
<needle2MinValue>0</needle2MinValue>
<needle2Move>Rotate</needle2Move>
<needle2ObjectField>Altitude</needle2ObjectField>
<needle3DataObject>BaroAltitude</needle3DataObject>
<needle3Factor>1</needle3Factor>
<needle3MaxValue>1000</needle3MaxValue>
<needle3MinValue>0</needle3MinValue>
<needle3Move>Rotate</needle3Move>
<needle3ObjectField>Altitude</needle3ObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
</data>
</Temperature>
</DialGadget>
<GCSControlGadget>
<MS__PCT__20Sidewinder>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<button0Action>0</button0Action>
<button0Amount>0</button0Amount>
<button0Function>0</button0Function>
<button1Action>0</button1Action>
<button1Amount>0</button1Amount>
<button1Function>0</button1Function>
<button2Action>0</button2Action>
<button2Amount>0.1</button2Amount>
<button2Function>3</button2Function>
<button3Action>0</button3Action>
<button3Amount>0.1</button3Amount>
<button3Function>3</button3Function>
<button4Action>0</button4Action>
<button4Amount>0</button4Amount>
<button4Function>0</button4Function>
<button5Action>0</button5Action>
<button5Amount>0</button5Amount>
<button5Function>0</button5Function>
<button6Action>0</button6Action>
<button6Amount>0</button6Amount>
<button6Function>0</button6Function>
<button7Action>0</button7Action>
<button7Amount>0</button7Amount>
<button7Function>0</button7Function>
<channel0Reverse>false</channel0Reverse>
<channel1Reverse>false</channel1Reverse>
<channel2Reverse>true</channel2Reverse>
<channel3Reverse>false</channel3Reverse>
<channel4Reverse>false</channel4Reverse>
<channel5Reverse>false</channel5Reverse>
<channel6Reverse>false</channel6Reverse>
<channel7Reverse>false</channel7Reverse>
<controlPortUDP>0</controlPortUDP>
<controlsMode>2</controlsMode>
<pitchChannel>1</pitchChannel>
<rollChannel>0</rollChannel>
<throttleChannel>2</throttleChannel>
<yawChannel>3</yawChannel>
</data>
</MS__PCT__20Sidewinder>
</GCSControlGadget>
<GpsDisplayGadget>
<Flight__PCT__20GPS>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<connectionMode>Telemetry</connectionMode>
<defaultDataBits>3</defaultDataBits>
<defaultFlow>0</defaultFlow>
<defaultParity>0</defaultParity>
<defaultPort>Communications Port (COM1)</defaultPort>
<defaultSpeed>11</defaultSpeed>
<defaultStopBits>0</defaultStopBits>
</data>
</Flight__PCT__20GPS>
<GPS__PCT__20Mouse>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<connectionMode>Serial</connectionMode>
<defaultDataBits>3</defaultDataBits>
<defaultFlow>0</defaultFlow>
<defaultParity>0</defaultParity>
<defaultPort>Communications Port (COM1)</defaultPort>
<defaultSpeed>17</defaultSpeed>
<defaultStopBits>0</defaultStopBits>
</data>
</GPS__PCT__20Mouse>
</GpsDisplayGadget>
<HITL>
<Flightgear__PCT__20HITL>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<binPath>\usr\games\fgfs</binPath>
<dataPath>\usr\share\games\FlightGear</dataPath>
<hostAddress>127.0.0.1</hostAddress>
<inPort>9009</inPort>
<manual>false</manual>
<outPort>9010</outPort>
<remoteHostAddress>127.0.0.1</remoteHostAddress>
<simulatorId>FG</simulatorId>
<startSim>true</startSim>
</data>
</Flightgear__PCT__20HITL>
<XPlane__PCT__20HITL>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<binPath>\home\lafargue\X-Plane 9\X-Plane-i686</binPath>
<dataPath>\usr\share\games\FlightGear</dataPath>
<hostAddress>127.0.0.3</hostAddress>
<inPort>6756</inPort>
<manual>false</manual>
<outPort>49000</outPort>
<remoteHostAddress>127.0.0.1</remoteHostAddress>
<simulatorId>X-Plane</simulatorId>
<startSim>false</startSim>
</data>
</XPlane__PCT__20HITL>
</HITL>
<HITLv2>
<default>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<attActCalc>false</attActCalc>
<attActHW>false</attActHW>
<attActSim>true</attActSim>
<attActual>true</attActual>
<attRaw>true</attRaw>
<attRawRate>20</attRawRate>
<gcsReciever>true</gcsReciever>
<gpsPosRate>200</gpsPosRate>
<gpsPosition>true</gpsPosition>
<homeLocRate>0</homeLocRate>
<homeLocation>true</homeLocation>
<hostAddress>127.0.0.1</hostAddress>
<inPort>40100</inPort>
<inputCommand>true</inputCommand>
<manualControl>false</manualControl>
<manualOutput>false</manualOutput>
<outPort>40200</outPort>
<outputRate>20</outputRate>
<remoteAddress>127.0.0.1</remoteAddress>
<simulatorId>ASimRC</simulatorId>
<sonarAltRate>50</sonarAltRate>
<sonarAltitude>false</sonarAltitude>
<sonarMaxAlt>@Variant(AAAAh0CgAAA=)</sonarMaxAlt>
</data>
</default>
</HITLv2>
<LineardialGadget>
<Accel__PCT__20Horizontal__PCT__20X>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<dFile>%%DATAPATH%%dials/deluxe/lineardial-horizontal.svg</dFile>
<decimalPlaces>2</decimalPlaces>
<factor>1</factor>
<font>Andale Mono,8,-1,5,50,0,0,0,0,0</font>
<greenMax>-9</greenMax>
<greenMin>-10</greenMin>
<maxValue>11</maxValue>
<minValue>-11</minValue>
<redMax>11</redMax>
<redMin>-11</redMin>
<sourceDataObject>Accels</sourceDataObject>
<sourceObjectField>x</sourceObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
<yellowMax>-5</yellowMax>
<yellowMin>-11</yellowMin>
</data>
</Accel__PCT__20Horizontal__PCT__20X>
<Accel__PCT__20Horizontal__PCT__20Y>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<dFile>%%DATAPATH%%dials/deluxe/lineardial-horizontal.svg</dFile>
<decimalPlaces>2</decimalPlaces>
<factor>1</factor>
<font>Andale Mono,6,-1,5,50,0,0,0,0,0</font>
<greenMax>-9</greenMax>
<greenMin>-10</greenMin>
<maxValue>11</maxValue>
<minValue>-11</minValue>
<redMax>11</redMax>
<redMin>-11</redMin>
<sourceDataObject>Accels</sourceDataObject>
<sourceObjectField>y</sourceObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
<yellowMax>-5</yellowMax>
<yellowMin>-11</yellowMin>
</data>
</Accel__PCT__20Horizontal__PCT__20Y>
<Accel__PCT__20Horizontal__PCT__20Z>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<dFile>%%DATAPATH%%dials/deluxe/lineardial-horizontal.svg</dFile>
<decimalPlaces>2</decimalPlaces>
<factor>1</factor>
<font>Andale Mono,8,-1,5,50,0,0,0,0,0</font>
<greenMax>-9</greenMax>
<greenMin>-10</greenMin>
<maxValue>11</maxValue>
<minValue>-11</minValue>
<redMax>11</redMax>
<redMin>-11</redMin>
<sourceDataObject>Accels</sourceDataObject>
<sourceObjectField>z</sourceObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
<yellowMax>-5</yellowMax>
<yellowMin>-11</yellowMin>
</data>
</Accel__PCT__20Horizontal__PCT__20Z>
<Arm__PCT__20Status>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<dFile>%%DATAPATH%%dials/default/arm-status.svg</dFile>
<decimalPlaces>0</decimalPlaces>
<factor>1</factor>
<font>,12,-1,5,50,0,0,0,0,0</font>
<greenMax>100</greenMax>
<greenMin>66</greenMin>
<maxValue>100</maxValue>
<minValue>0</minValue>
<redMax>33</redMax>
<redMin>0</redMin>
<sourceDataObject>FlightStatus</sourceDataObject>
<sourceObjectField>Armed</sourceObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
<yellowMax>66</yellowMax>
<yellowMin>33</yellowMin>
</data>
</Arm__PCT__20Status>
<Flight__PCT__20Time>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<dFile>%%DATAPATH%%dials/default/textonly.svg</dFile>
<decimalPlaces>0</decimalPlaces>
<factor>0.001</factor>
<font>,12,-1,5,50,0,0,0,0,0</font>
<greenMax>100</greenMax>
<greenMin>66</greenMin>
<maxValue>100</maxValue>
<minValue>0</minValue>
<redMax>33</redMax>
<redMin>0</redMin>
<sourceDataObject>SystemStats</sourceDataObject>
<sourceObjectField>FlightTime</sourceObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
<yellowMax>66</yellowMax>
<yellowMin>33</yellowMin>
</data>
</Flight__PCT__20Time>
<Flight__PCT__20mode>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<dFile>%%DATAPATH%%dials/default/flightmode-status.svg</dFile>
<decimalPlaces>0</decimalPlaces>
<factor>1</factor>
<font>,12,-1,5,50,0,0,0,0,0</font>
<greenMax>100</greenMax>
<greenMin>66</greenMin>
<maxValue>100</maxValue>
<minValue>0</minValue>
<redMax>33</redMax>
<redMin>0</redMin>
<sourceDataObject>FlightStatus</sourceDataObject>
<sourceObjectField>FlightMode</sourceObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
<yellowMax>66</yellowMax>
<yellowMin>33</yellowMin>
</data>
</Flight__PCT__20mode>
<GPS__PCT__20Sats>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<dFile>%%DATAPATH%%dials/default/gps-signal.svg</dFile>
<decimalPlaces>0</decimalPlaces>
<factor>1</factor>
<font>,12,-1,5,50,0,0,0,0,0</font>
<greenMax>0</greenMax>
<greenMin>0</greenMin>
<maxValue>12</maxValue>
<minValue>0</minValue>
<redMax>0</redMax>
<redMin>0</redMin>
<sourceDataObject>GPSPosition</sourceDataObject>
<sourceObjectField>Satellites</sourceObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
<yellowMax>0</yellowMax>
<yellowMin>0</yellowMin>
</data>
</GPS__PCT__20Sats>
<GPS__PCT__20Status>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<dFile>%%DATAPATH%%dials/default/gps-status.svg</dFile>
<decimalPlaces>0</decimalPlaces>
<factor>1</factor>
<font>,12,-1,5,50,0,0,0,0,0</font>
<greenMax>100</greenMax>
<greenMin>66</greenMin>
<maxValue>100</maxValue>
<minValue>0</minValue>
<redMax>33</redMax>
<redMin>0</redMin>
<sourceDataObject>GPSPosition</sourceDataObject>
<sourceObjectField>Status</sourceObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
<yellowMax>66</yellowMax>
<yellowMin>33</yellowMin>
</data>
</GPS__PCT__20Status>
<Mainboard__PCT__20CPU>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<dFile>%%DATAPATH%%dials/deluxe/lineardial-vertical.svg</dFile>
<decimalPlaces>0</decimalPlaces>
<factor>1</factor>
<font>Andale Mono,12,-1,5,75,0,0,0,0,0</font>
<greenMax>90</greenMax>
<greenMin>0</greenMin>
<maxValue>100</maxValue>
<minValue>0</minValue>
<redMax>100</redMax>
<redMin>95</redMin>
<sourceDataObject>SystemStats</sourceDataObject>
<sourceObjectField>CPULoad</sourceObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
<yellowMax>95</yellowMax>
<yellowMin>90</yellowMin>
</data>
</Mainboard__PCT__20CPU>
<Pitch__PCT__20Desired>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<dFile>%%DATAPATH%%dials/deluxe/lineardial-vertical.svg</dFile>
<decimalPlaces>2</decimalPlaces>
<factor>1</factor>
<font>Andale Mono,12,-1,5,75,0,0,0,0,0</font>
<greenMax>0.5</greenMax>
<greenMin>-0.5</greenMin>
<maxValue>1</maxValue>
<minValue>-1</minValue>
<redMax>1</redMax>
<redMin>-1</redMin>
<sourceDataObject>ActuatorDesired</sourceDataObject>
<sourceObjectField>Pitch</sourceObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
<yellowMax>0.8</yellowMax>
<yellowMin>-0.8</yellowMin>
</data>
</Pitch__PCT__20Desired>
<Pitch>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<dFile>%%DATAPATH%%dials/deluxe/lineardial-vertical.svg</dFile>
<decimalPlaces>2</decimalPlaces>
<factor>1</factor>
<font>Andale Mono,12,-1,5,75,0,0,0,0,0</font>
<greenMax>0.5</greenMax>
<greenMin>-0.5</greenMin>
<maxValue>1</maxValue>
<minValue>-1</minValue>
<redMax>1</redMax>
<redMin>-1</redMin>
<sourceDataObject>ManualControlCommand</sourceDataObject>
<sourceObjectField>Pitch</sourceObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
<yellowMax>0.8</yellowMax>
<yellowMin>-0.8</yellowMin>
</data>
</Pitch>
<PitchActual>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<dFile>%%DATAPATH%%dials/deluxe/lineardial-vertical.svg</dFile>
<decimalPlaces>2</decimalPlaces>
<factor>1</factor>
<font>Andale Mono,12,-1,5,75,0,0,0,0,0</font>
<greenMax>0.8</greenMax>
<greenMin>0.3</greenMin>
<maxValue>90</maxValue>
<minValue>-90</minValue>
<redMax>1</redMax>
<redMin>0</redMin>
<sourceDataObject>AttitudeActual</sourceDataObject>
<sourceObjectField>Pitch</sourceObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
<yellowMax>0.9</yellowMax>
<yellowMin>0.1</yellowMin>
</data>
</PitchActual>
<Roll__PCT__20Desired>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<dFile>%%DATAPATH%%dials/deluxe/lineardial-vertical.svg</dFile>
<decimalPlaces>2</decimalPlaces>
<factor>1</factor>
<font>Andale Mono,12,-1,5,75,0,0,0,0,0</font>
<greenMax>0.5</greenMax>
<greenMin>-0.5</greenMin>
<maxValue>1</maxValue>
<minValue>-1</minValue>
<redMax>1</redMax>
<redMin>-1</redMin>
<sourceDataObject>ActuatorDesired</sourceDataObject>
<sourceObjectField>Roll</sourceObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
<yellowMax>0.8</yellowMax>
<yellowMin>-0.8</yellowMin>
</data>
</Roll__PCT__20Desired>
<Roll>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<dFile>%%DATAPATH%%dials/deluxe/lineardial-vertical.svg</dFile>
<decimalPlaces>2</decimalPlaces>
<factor>1</factor>
<font>Andale Mono,12,-1,5,75,0,0,0,0,0</font>
<greenMax>0.5</greenMax>
<greenMin>-0.5</greenMin>
<maxValue>1</maxValue>
<minValue>-1</minValue>
<redMax>1</redMax>
<redMin>-1</redMin>
<sourceDataObject>ManualControlCommand</sourceDataObject>
<sourceObjectField>Roll</sourceObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
<yellowMax>0.8</yellowMax>
<yellowMin>-0.8</yellowMin>
</data>
</Roll>
<Telemetry__PCT__20RX__PCT__20Rate__PCT__20Horizontal>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<dFile>%%DATAPATH%%dials/deluxe/lineardial-horizontal.svg</dFile>
<decimalPlaces>0</decimalPlaces>
<factor>1</factor>
<font>Andale Mono,12,-1,5,75,0,0,0,0,0</font>
<greenMax>650</greenMax>
<greenMin>0</greenMin>
<maxValue>1200</maxValue>
<minValue>0</minValue>
<redMax>1200</redMax>
<redMin>900</redMin>
<sourceDataObject>GCSTelemetryStats</sourceDataObject>
<sourceObjectField>RxDataRate</sourceObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
<yellowMax>900</yellowMax>
<yellowMin>650</yellowMin>
</data>
</Telemetry__PCT__20RX__PCT__20Rate__PCT__20Horizontal>
<Telemetry__PCT__20TX__PCT__20Rate__PCT__20Horizontal>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<dFile>%%DATAPATH%%dials/deluxe/lineardial-horizontal.svg</dFile>
<decimalPlaces>0</decimalPlaces>
<factor>1</factor>
<font>Andale Mono,12,-1,5,75,0,0,0,0,0</font>
<greenMax>650</greenMax>
<greenMin>0</greenMin>
<maxValue>1200</maxValue>
<minValue>0</minValue>
<redMax>1200</redMax>
<redMin>900</redMin>
<sourceDataObject>GCSTelemetryStats</sourceDataObject>
<sourceObjectField>TxDataRate</sourceObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
<yellowMax>900</yellowMax>
<yellowMin>650</yellowMin>
</data>
</Telemetry__PCT__20TX__PCT__20Rate__PCT__20Horizontal>
<Throttle>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<dFile>%%DATAPATH%%dials/deluxe/lineardial-vertical.svg</dFile>
<decimalPlaces>2</decimalPlaces>
<factor>1</factor>
<font>Andale Mono,12,-1,5,75,0,0,0,0,0</font>
<greenMax>0.5</greenMax>
<greenMin>0</greenMin>
<maxValue>1</maxValue>
<minValue>0</minValue>
<redMax>1</redMax>
<redMin>0.75</redMin>
<sourceDataObject>ManualControlCommand</sourceDataObject>
<sourceObjectField>Throttle</sourceObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
<yellowMax>0.75</yellowMax>
<yellowMin>0.5</yellowMin>
</data>
</Throttle>
<Yaw__PCT__20Desired>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<dFile>%%DATAPATH%%dials/deluxe/lineardial-vertical.svg</dFile>
<decimalPlaces>2</decimalPlaces>
<factor>1</factor>
<font>Andale Mono,12,-1,5,75,0,0,0,0,0</font>
<greenMax>0.5</greenMax>
<greenMin>-0.5</greenMin>
<maxValue>1</maxValue>
<minValue>-1</minValue>
<redMax>1</redMax>
<redMin>-1</redMin>
<sourceDataObject>ActuatorDesired</sourceDataObject>
<sourceObjectField>Yaw</sourceObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
<yellowMax>0.8</yellowMax>
<yellowMin>-0.8</yellowMin>
</data>
</Yaw__PCT__20Desired>
<Yaw>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<dFile>%%DATAPATH%%dials/deluxe/lineardial-vertical.svg</dFile>
<decimalPlaces>2</decimalPlaces>
<factor>1</factor>
<font>Andale Mono,12,-1,5,75,0,0,0,0,0</font>
<greenMax>0.5</greenMax>
<greenMin>-0.5</greenMin>
<maxValue>1</maxValue>
<minValue>-1</minValue>
<redMax>1</redMax>
<redMin>-1</redMin>
<sourceDataObject>ManualControlCommand</sourceDataObject>
<sourceObjectField>Yaw</sourceObjectField>
<useOpenGLFlag>false</useOpenGLFlag>
<yellowMax>0.8</yellowMax>
<yellowMin>-0.8</yellowMin>
</data>
</Yaw>
</LineardialGadget>
<ModelViewGadget>
<Aeroquad__PCT__20__PCT__2B>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<acFilename>%%DATAPATH%%models/multi/aeroquad/aeroquad_+.3ds</acFilename>
<bgFilename>%%DATAPATH%%models/backgrounds/default_background.png</bgFilename>
<enableVbo>false</enableVbo>
</data>
</Aeroquad__PCT__20__PCT__2B>
<CopterControl>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<acFilename>%%DATAPATH%%models/boards/CopterControl/CopterControl.3ds</acFilename>
<bgFilename>%%DATAPATH%%models/backgrounds/default_background.png</bgFilename>
<enableVbo>false</enableVbo>
</data>
</CopterControl>
<Easyquad__PCT__20X>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<acFilename>%%DATAPATH%%models/multi/easy_quad/easy_quad_X.3ds</acFilename>
<bgFilename>%%DATAPATH%%models/backgrounds/default_background.png</bgFilename>
<enableVbo>false</enableVbo>
</data>
</Easyquad__PCT__20X>
<Easystar>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<acFilename>%%DATAPATH%%models/planes/Easystar/easystar.3ds</acFilename>
<bgFilename>%%DATAPATH%%models/backgrounds/default_background.png</bgFilename>
<enableVbo>false</enableVbo>
</data>
</Easystar>
<Firecracker>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<acFilename>%%DATAPATH%%models/planes/firecracker/firecracker.3ds</acFilename>
<bgFilename>%%DATAPATH%%models/backgrounds/default_background.png</bgFilename>
<enableVbo>false</enableVbo>
</data>
</Firecracker>
<Funjet>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<acFilename>%%DATAPATH%%models/planes/funjet/funjet.3ds</acFilename>
<bgFilename>%%DATAPATH%%models/backgrounds/default_background.png</bgFilename>
<enableVbo>false</enableVbo>
</data>
</Funjet>
<Gaui__PCT__20330X>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<acFilename>%%DATAPATH%%models/multi/gaui_330x/gaui_330x.3ds</acFilename>
<bgFilename>%%DATAPATH%%models/backgrounds/default_background.png</bgFilename>
<enableVbo>false</enableVbo>
</data>
</Gaui__PCT__20330X>
<Helicopter__PCT__20-__PCT__20TRex__PCT__20450>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<acFilename>%%DATAPATH%%models/helis/t-rex/t-rex_450_xl.3ds</acFilename>
<bgFilename>%%DATAPATH%%models/backgrounds/default_background.png</bgFilename>
<enableVbo>false</enableVbo>
</data>
</Helicopter__PCT__20-__PCT__20TRex__PCT__20450>
<Hexacopter>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<acFilename>%%DATAPATH%%models/multi/mikrokopter/MK_Hexa.3ds</acFilename>
<bgFilename>%%DATAPATH%%models/backgrounds/default_background.png</bgFilename>
<enableVbo>false</enableVbo>
</data>
</Hexacopter>
<Joe__PCT__27s__PCT__2014__PCT__22__PCT__20Quad__PCT__20__PCT__2B>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<acFilename>%%DATAPATH%%models/multi/joes_cnc/J14-Q_+.3DS</acFilename>
<bgFilename>%%DATAPATH%%models/backgrounds/default_background.png</bgFilename>
<enableVbo>false</enableVbo>
</data>
</Joe__PCT__27s__PCT__2014__PCT__22__PCT__20Quad__PCT__20__PCT__2B>
<Joe__PCT__27s__PCT__2014__PCT__22__PCT__20Quad__PCT__20X__PCT__20>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<acFilename>%%DATAPATH%%models/multi/joes_cnc/J14-Q_X.3DS</acFilename>
<bgFilename>%%DATAPATH%%models/backgrounds/default_background.png</bgFilename>
<enableVbo>false</enableVbo>
</data>
</Joe__PCT__27s__PCT__2014__PCT__22__PCT__20Quad__PCT__20X__PCT__20>
<Joe__PCT__27s__PCT__2014__PCT__22__PCT__20T__PCT__20Quad__PCT__20__PCT__2B>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<acFilename>%%DATAPATH%%models/multi/joes_cnc/J14-QT_+.3DS</acFilename>
<bgFilename>%%DATAPATH%%models/backgrounds/default_background.png</bgFilename>
<enableVbo>false</enableVbo>
</data>
</Joe__PCT__27s__PCT__2014__PCT__22__PCT__20T__PCT__20Quad__PCT__20__PCT__2B>
<Joe__PCT__27s__PCT__2014__PCT__22__PCT__20T__PCT__20Quad__PCT__20X>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<acFilename>%%DATAPATH%%models/multi/joes_cnc/J14-QT_X.3DS</acFilename>
<bgFilename>%%DATAPATH%%models/backgrounds/default_background.png</bgFilename>
<enableVbo>false</enableVbo>
</data>
</Joe__PCT__27s__PCT__2014__PCT__22__PCT__20T__PCT__20Quad__PCT__20X>
<Quadcopter>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<acFilename>%%DATAPATH%%models/multi/mikrokopter/MK_L4-ME.3ds</acFilename>
<bgFilename>%%DATAPATH%%models/backgrounds/default_background.png</bgFilename>
<enableVbo>false</enableVbo>
</data>
</Quadcopter>
<Ricoo>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<acFilename>%%DATAPATH%%models/multi/ricoo/ricoo.3DS</acFilename>
<bgFilename>%%DATAPATH%%models/backgrounds/default_background.png</bgFilename>
<enableVbo>false</enableVbo>
</data>
</Ricoo>
<Scorpion__PCT__20Tricopter>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<acFilename>%%DATAPATH%%models/multi/scorpion_tricopter/scorpion_tricopter.3ds</acFilename>
<bgFilename>%%DATAPATH%%models/backgrounds/default_background.png</bgFilename>
<enableVbo>false</enableVbo>
</data>
</Scorpion__PCT__20Tricopter>
<Test__PCT__20Quad__PCT__20__PCT__2B>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<acFilename>%%DATAPATH%%models/multi/test_quad/test_quad_+.3ds</acFilename>
<bgFilename>%%DATAPATH%%models/backgrounds/default_background.png</bgFilename>
<enableVbo>false</enableVbo>
</data>
</Test__PCT__20Quad__PCT__20__PCT__2B>
<Test__PCT__20Quad__PCT__20X>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<acFilename>%%DATAPATH%%models/multi/test_quad/test_quad_X.3ds</acFilename>
<bgFilename>%%DATAPATH%%models/backgrounds/default_background.png</bgFilename>
<enableVbo>false</enableVbo>
</data>
</Test__PCT__20Quad__PCT__20X>
</ModelViewGadget>
<OPMapGadget>
<Google__PCT__20Sat>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<accessMode>ServerAndCache</accessMode>
<cacheLocation>%%STOREPATH%%mapscache/</cacheLocation>
<defaultLatitude>0</defaultLatitude>
<defaultLongitude>0</defaultLongitude>
<defaultZoom>2</defaultZoom>
<mapProvider>GoogleSatellite</mapProvider>
<maxUpdateRate>2000</maxUpdateRate>
<showTileGridLines>false</showTileGridLines>
<uavSymbol>mapquad.png</uavSymbol>
<useMemoryCache>true</useMemoryCache>
<useOpenGL>false</useOpenGL>
</data>
</Google__PCT__20Sat>
<Memory__PCT__20Only>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<accessMode>CacheOnly</accessMode>
<cacheLocation>%%STOREPATH%%mapscache/</cacheLocation>
<defaultLatitude>0</defaultLatitude>
<defaultLongitude>0</defaultLongitude>
<defaultZoom>2</defaultZoom>
<mapProvider>GoogleMap</mapProvider>
<maxUpdateRate>2000</maxUpdateRate>
<showTileGridLines>false</showTileGridLines>
<uavSymbol>airplanepip.png</uavSymbol>
<useMemoryCache>true</useMemoryCache>
<useOpenGL>false</useOpenGL>
</data>
</Memory__PCT__20Only>
<default>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<accessMode>ServerAndCache</accessMode>
<cacheLocation>%%STOREPATH%%mapscache/</cacheLocation>
<defaultLatitude>0</defaultLatitude>
<defaultLongitude>0</defaultLongitude>
<defaultZoom>2</defaultZoom>
<mapProvider>GoogleMap</mapProvider>
<maxUpdateRate>2000</maxUpdateRate>
<showTileGridLines>false</showTileGridLines>
<uavSymbol>mapquad.png</uavSymbol>
<useMemoryCache>true</useMemoryCache>
<useOpenGL>false</useOpenGL>
</data>
</default>
</OPMapGadget>
<PFDGadget>
<raw>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<beSmooth>false</beSmooth>
<dialFile>%%DATAPATH%%pfd/default/pfd.svg</dialFile>
<hqFonts>false</hqFonts>
<useOpenGLFlag>false</useOpenGLFlag>
</data>
</raw>
<smooth>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<beSmooth>true</beSmooth>
<dialFile>%%DATAPATH%%pfd/default/pfd.svg</dialFile>
<hqFonts>false</hqFonts>
<useOpenGLFlag>false</useOpenGLFlag>
</data>
</smooth>
</PFDGadget>
<PfdQmlGadget>
<NoTerrain>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<actualPositionUsed>false</actualPositionUsed>
<altitude>2000</altitude>
<cacheOnly>false</cacheOnly>
<earthFile>%%DATAPATH%%pfd/default/readymap.earth</earthFile>
<latitude>46.6715</latitude>
<longitude>10.1589</longitude>
<qmlFile>%%DATAPATH%%pfd/default/Pfd.qml</qmlFile>
<terrainEnabled>false</terrainEnabled>
</data>
</NoTerrain>
<Terrain>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<actualPositionUsed>false</actualPositionUsed>
<altitude>2000</altitude>
<cacheOnly>false</cacheOnly>
<earthFile>%%DATAPATH%%pfd/default/readymap.earth</earthFile>
<latitude>46.6715</latitude>
<longitude>10.1589</longitude>
<qmlFile>%%DATAPATH%%pfd/default/Pfd.qml</qmlFile>
<terrainEnabled>false</terrainEnabled>
</data>
</Terrain>
</PfdQmlGadget>
<QmlViewGadget>
<default>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<dialFile>Unknown</dialFile>
<useOpenGLFlag>true</useOpenGLFlag>
</data>
</default>
</QmlViewGadget>
<ScopeGadget>
<Accel>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<LoggingEnabled>false</LoggingEnabled>
<LoggingNewFileOnConnect>false</LoggingNewFileOnConnect>
<configurationStreamVersion>1000</configurationStreamVersion>
<dataSize>60</dataSize>
<plotCurve0>
<color>4294901760</color>
<mathFunction>None</mathFunction>
<uavField>x</uavField>
<uavObject>Accels</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve0>
<plotCurve1>
<color>4283782655</color>
<mathFunction>None</mathFunction>
<uavField>y</uavField>
<uavObject>Accels</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve1>
<plotCurve2>
<color>4283804160</color>
<mathFunction>None</mathFunction>
<uavField>z</uavField>
<uavObject>Accels</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve2>
<plotCurveCount>3</plotCurveCount>
<plotType>1</plotType>
<refreshInterval>100</refreshInterval>
</data>
</Accel>
<Actuators>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<LoggingEnabled>false</LoggingEnabled>
<LoggingNewFileOnConnect>false</LoggingNewFileOnConnect>
<configurationStreamVersion>1000</configurationStreamVersion>
<dataSize>20</dataSize>
<plotCurve0>
<color>4294901760</color>
<mathFunction>None</mathFunction>
<uavField>Channel-4</uavField>
<uavObject>ActuatorCommand</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve0>
<plotCurve1>
<color>4294901760</color>
<mathFunction>None</mathFunction>
<uavField>Channel-5</uavField>
<uavObject>ActuatorCommand</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve1>
<plotCurve2>
<color>4289374847</color>
<mathFunction>None</mathFunction>
<uavField>Channel-6</uavField>
<uavObject>ActuatorCommand</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve2>
<plotCurve3>
<color>4289374847</color>
<mathFunction>None</mathFunction>
<uavField>Channel-7</uavField>
<uavObject>ActuatorCommand</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve3>
<plotCurveCount>4</plotCurveCount>
<plotType>1</plotType>
<refreshInterval>100</refreshInterval>
</data>
</Actuators>
<Attitude>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<LoggingEnabled>false</LoggingEnabled>
<LoggingNewFileOnConnect>false</LoggingNewFileOnConnect>
<configurationStreamVersion>1000</configurationStreamVersion>
<dataSize>60</dataSize>
<plotCurve0>
<color>4283760895</color>
<mathFunction>None</mathFunction>
<uavField>Roll</uavField>
<uavObject>AttitudeActual</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve0>
<plotCurve1>
<color>4278233600</color>
<mathFunction>None</mathFunction>
<uavField>Yaw</uavField>
<uavObject>AttitudeActual</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve1>
<plotCurve2>
<color>4294901760</color>
<mathFunction>None</mathFunction>
<uavField>Pitch</uavField>
<uavObject>AttitudeActual</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve2>
<plotCurveCount>3</plotCurveCount>
<plotType>1</plotType>
<refreshInterval>100</refreshInterval>
</data>
</Attitude>
<Barometer>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<LoggingEnabled>false</LoggingEnabled>
<LoggingNewFileOnConnect>false</LoggingNewFileOnConnect>
<configurationStreamVersion>1000</configurationStreamVersion>
<dataSize>60</dataSize>
<plotCurve0>
<color>4278190080</color>
<mathFunction>None</mathFunction>
<uavField>Pressure</uavField>
<uavObject>BaroAltitude</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve0>
<plotCurveCount>1</plotCurveCount>
<plotType>1</plotType>
<refreshInterval>1000</refreshInterval>
</data>
</Barometer>
<Inputs>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<LoggingEnabled>false</LoggingEnabled>
<LoggingNewFileOnConnect>false</LoggingNewFileOnConnect>
<configurationStreamVersion>1000</configurationStreamVersion>
<dataSize>40</dataSize>
<plotCurve0>
<color>4278190207</color>
<mathFunction>None</mathFunction>
<uavField>Channel-1</uavField>
<uavObject>ManualControlCommand</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve0>
<plotCurve1>
<color>4294901760</color>
<mathFunction>None</mathFunction>
<uavField>Channel-4</uavField>
<uavObject>ManualControlCommand</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve1>
<plotCurve2>
<color>4294901760</color>
<mathFunction>None</mathFunction>
<uavField>Channel-5</uavField>
<uavObject>ManualControlCommand</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve2>
<plotCurve3>
<color>4294901760</color>
<mathFunction>None</mathFunction>
<uavField>Channel-6</uavField>
<uavObject>ManualControlCommand</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve3>
<plotCurve4>
<color>4294901760</color>
<mathFunction>None</mathFunction>
<uavField>Channel-7</uavField>
<uavObject>ManualControlCommand</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve4>
<plotCurve5>
<color>4283825920</color>
<mathFunction>None</mathFunction>
<uavField>Channel-2</uavField>
<uavObject>ManualControlCommand</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve5>
<plotCurve6>
<color>4294923520</color>
<mathFunction>None</mathFunction>
<uavField>Channel-3</uavField>
<uavObject>ManualControlCommand</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve6>
<plotCurve7>
<color>4294967040</color>
<mathFunction>None</mathFunction>
<uavField>Channel-0</uavField>
<uavObject>ManualControlCommand</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve7>
<plotCurveCount>8</plotCurveCount>
<plotType>1</plotType>
<refreshInterval>200</refreshInterval>
</data>
</Inputs>
<Raw__PCT__20Accels>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<LoggingEnabled>false</LoggingEnabled>
<LoggingNewFileOnConnect>false</LoggingNewFileOnConnect>
<configurationStreamVersion>1000</configurationStreamVersion>
<dataSize>60</dataSize>
<plotCurve0>
<color>4294901760</color>
<mathFunction>None</mathFunction>
<uavField>x</uavField>
<uavObject>Accels</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve0>
<plotCurve1>
<color>4283782655</color>
<mathFunction>None</mathFunction>
<uavField>y</uavField>
<uavObject>Accels</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve1>
<plotCurve2>
<color>4283804160</color>
<mathFunction>None</mathFunction>
<uavField>z</uavField>
<uavObject>Accels</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve2>
<plotCurveCount>3</plotCurveCount>
<plotType>1</plotType>
<refreshInterval>500</refreshInterval>
</data>
</Raw__PCT__20Accels>
<Raw__PCT__20Gyros>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<LoggingEnabled>false</LoggingEnabled>
<LoggingNewFileOnConnect>false</LoggingNewFileOnConnect>
<configurationStreamVersion>1000</configurationStreamVersion>
<dataSize>60</dataSize>
<plotCurve0>
<color>4283804160</color>
<mathFunction>None</mathFunction>
<uavField>z</uavField>
<uavObject>Gyros</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve0>
<plotCurve1>
<color>4283782655</color>
<mathFunction>None</mathFunction>
<uavField>y</uavField>
<uavObject>Gyros</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve1>
<plotCurve2>
<color>4294901760</color>
<mathFunction>None</mathFunction>
<uavField>x</uavField>
<uavObject>Gyros</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve2>
<plotCurveCount>3</plotCurveCount>
<plotType>1</plotType>
<refreshInterval>500</refreshInterval>
</data>
</Raw__PCT__20Gyros>
<Raw__PCT__20magnetometers>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<LoggingEnabled>false</LoggingEnabled>
<LoggingNewFileOnConnect>false</LoggingNewFileOnConnect>
<configurationStreamVersion>1000</configurationStreamVersion>
<dataSize>60</dataSize>
<plotCurve0>
<color>4294901760</color>
<mathFunction>None</mathFunction>
<uavField>X</uavField>
<uavObject>Magnetometer</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve0>
<plotCurve1>
<color>4283782655</color>
<mathFunction>None</mathFunction>
<uavField>Y</uavField>
<uavObject>Magnetometer</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve1>
<plotCurve2>
<color>4283804160</color>
<mathFunction>None</mathFunction>
<uavField>Z</uavField>
<uavObject>Magnetometer</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve2>
<plotCurveCount>3</plotCurveCount>
<plotType>1</plotType>
<refreshInterval>500</refreshInterval>
</data>
</Raw__PCT__20magnetometers>
<Stacks__PCT__20monitor>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<LoggingEnabled>false</LoggingEnabled>
<LoggingNewFileOnConnect>false</LoggingNewFileOnConnect>
<configurationStreamVersion>1000</configurationStreamVersion>
<dataSize>240</dataSize>
<plotCurve0>
<color>4294945280</color>
<mathFunction>None</mathFunction>
<uavField>StackRemaining-System</uavField>
<uavObject>TaskInfo</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve0>
<plotCurve1>
<color>4294945280</color>
<mathFunction>None</mathFunction>
<uavField>StackRemaining-Actuator</uavField>
<uavObject>TaskInfo</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve1>
<plotCurve10>
<color>4294945280</color>
<mathFunction>None</mathFunction>
<uavField>StackRemaining-Guidance</uavField>
<uavObject>TaskInfo</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve10>
<plotCurve11>
<color>4294945280</color>
<mathFunction>None</mathFunction>
<uavField>StackRemaining-Watchdog</uavField>
<uavObject>TaskInfo</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve11>
<plotCurve2>
<color>4294945280</color>
<mathFunction>None</mathFunction>
<uavField>StackRemaining-TelemetryTx</uavField>
<uavObject>TaskInfo</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve2>
<plotCurve3>
<color>4294945280</color>
<mathFunction>None</mathFunction>
<uavField>StackRemaining-TelemetryTxPri</uavField>
<uavObject>TaskInfo</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve3>
<plotCurve4>
<color>4294945280</color>
<mathFunction>None</mathFunction>
<uavField>StackRemaining-TelemetryRx</uavField>
<uavObject>TaskInfo</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve4>
<plotCurve5>
<color>4294945280</color>
<mathFunction>None</mathFunction>
<uavField>StackRemaining-GPS</uavField>
<uavObject>TaskInfo</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve5>
<plotCurve6>
<color>4294945280</color>
<mathFunction>None</mathFunction>
<uavField>StackRemaining-ManualControl</uavField>
<uavObject>TaskInfo</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve6>
<plotCurve7>
<color>4294945280</color>
<mathFunction>None</mathFunction>
<uavField>StackRemaining-Altitude</uavField>
<uavObject>TaskInfo</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve7>
<plotCurve8>
<color>4294945280</color>
<mathFunction>None</mathFunction>
<uavField>StackRemaining-AHRSComms</uavField>
<uavObject>TaskInfo</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve8>
<plotCurve9>
<color>4294945280</color>
<mathFunction>None</mathFunction>
<uavField>StackRemaining-Stabilization</uavField>
<uavObject>TaskInfo</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve9>
<plotCurveCount>12</plotCurveCount>
<plotType>1</plotType>
<refreshInterval>1000</refreshInterval>
</data>
</Stacks__PCT__20monitor>
<Telemetry__PCT__20quality>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<LoggingEnabled>false</LoggingEnabled>
<LoggingNewFileOnConnect>false</LoggingNewFileOnConnect>
<configurationStreamVersion>1000</configurationStreamVersion>
<dataSize>20</dataSize>
<plotCurve0>
<color>4289374847</color>
<mathFunction>None</mathFunction>
<uavField>TxFailures</uavField>
<uavObject>GCSTelemetryStats</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve0>
<plotCurve1>
<color>4283782655</color>
<mathFunction>None</mathFunction>
<uavField>RxFailures</uavField>
<uavObject>GCSTelemetryStats</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve1>
<plotCurve2>
<color>4294901760</color>
<mathFunction>None</mathFunction>
<uavField>TxRetries</uavField>
<uavObject>GCSTelemetryStats</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve2>
<plotCurveCount>3</plotCurveCount>
<plotType>1</plotType>
<refreshInterval>100</refreshInterval>
</data>
</Telemetry__PCT__20quality>
<Uptimes>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<LoggingEnabled>false</LoggingEnabled>
<LoggingNewFileOnConnect>false</LoggingNewFileOnConnect>
<configurationStreamVersion>1000</configurationStreamVersion>
<dataSize>240</dataSize>
<plotCurve0>
<color>4294945407</color>
<mathFunction>None</mathFunction>
<uavField>FlightTime</uavField>
<uavObject>SystemStats</uavObject>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve0>
<plotCurve1>
<color>0</color>
<yMaximum>0</yMaximum>
<yMeanSamples>1</yMeanSamples>
<yMinimum>0</yMinimum>
<yScalePower>0</yScalePower>
</plotCurve1>
<plotCurveCount>2</plotCurveCount>
<plotType>1</plotType>
<refreshInterval>800</refreshInterval>
</data>
</Uptimes>
</ScopeGadget>
<SystemHealthGadget>
<default>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<diagram>%%DATAPATH%%diagrams/default/system-health.svg</diagram>
</data>
</default>
</SystemHealthGadget>
<UAVObjectBrowser>
<default>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<CategorizedView>false</CategorizedView>
<ScientificView>false</ScientificView>
<manuallyChangedColor>#5baa56</manuallyChangedColor>
<onlyHilightChangedValues>false</onlyHilightChangedValues>
<recentlyUpdatedColor>#ff7957</recentlyUpdatedColor>
<recentlyUpdatedTimeout>500</recentlyUpdatedTimeout>
<showMetaData>false</showMetaData>
</data>
</default>
</UAVObjectBrowser>
<Uploader>
<default>
<configInfo>
<locked>false</locked>
<version>0.0.0</version>
</configInfo>
<data>
<defaultDataBits>3</defaultDataBits>
<defaultFlow>0</defaultFlow>
<defaultParity>0</defaultParity>
<defaultPort>/dev/ttyS0</defaultPort>
<defaultSpeed>14</defaultSpeed>
<defaultStopBits>0</defaultStopBits>
</data>
</default>
</Uploader>
<configInfo>
<locked>false</locked>
<version>1.2.0</version>
</configInfo>
</UAVGadgetConfigurations>
<UAVGadgetManager>
<Mode1>
<showToolbars>false</showToolbars>
<splitter>
<side0>
<side0>
<side0>
<side0>
<classId>LineardialGadget</classId>
<gadget>
<activeConfiguration>Flight Time</activeConfiguration>
</gadget>
<type>uavGadget</type>
</side0>
<side1>
<side0>
<classId>LineardialGadget</classId>
<gadget>
<activeConfiguration>Arm Status</activeConfiguration>
</gadget>
<type>uavGadget</type>
</side0>
<side1>
<classId>LineardialGadget</classId>
<gadget>
<activeConfiguration>Flight mode</activeConfiguration>
</gadget>
<type>uavGadget</type>
</side1>
<splitterOrientation>1</splitterOrientation>
<splitterSizes>@Variant(AAAACQAAAAIAAAACAAAAsQAAAAIAAAEV)</splitterSizes>
<type>splitter</type>
</side1>
<splitterOrientation>1</splitterOrientation>
<splitterSizes>@Variant(AAAACQAAAAIAAAACAAAArgAAAAIAAAHH)</splitterSizes>
<type>splitter</type>
</side0>
<side1>
<classId>PFDGadget</classId>
<gadget>
<activeConfiguration>raw</activeConfiguration>
</gadget>
<type>uavGadget</type>
</side1>
<splitterOrientation>2</splitterOrientation>
<splitterSizes>@Variant(AAAACQAAAAIAAAACAAAAQAAAAAIAAAG4)</splitterSizes>
<type>splitter</type>
</side0>
<side1>
<side0>
<classId>ModelViewGadget</classId>
<gadget>
<activeConfiguration>Test Quad X</activeConfiguration>
</gadget>
<type>uavGadget</type>
</side0>
<side1>
<classId>SystemHealthGadget</classId>
<gadget>
<activeConfiguration>default</activeConfiguration>
</gadget>
<type>uavGadget</type>
</side1>
<splitterOrientation>1</splitterOrientation>
<splitterSizes>@Variant(AAAACQAAAAIAAAACAAABIAAAAAIAAAFV)</splitterSizes>
<type>splitter</type>
</side1>
<splitterOrientation>2</splitterOrientation>
<splitterSizes>@Variant(AAAACQAAAAIAAAACAAAB7wAAAAIAAAEf)</splitterSizes>
<type>splitter</type>
</side0>
<side1>
<classId>OPMapGadget</classId>
<gadget>
<activeConfiguration>Google Sat</activeConfiguration>
</gadget>
<type>uavGadget</type>
</side1>
<splitterOrientation>1</splitterOrientation>
<splitterSizes>@Variant(AAAACQAAAAIAAAACAAACdgAAAAIAAAMp)</splitterSizes>
<type>splitter</type>
</splitter>
<version>UAVGadgetManagerV1</version>
</Mode1>
<Mode2>
<showToolbars>false</showToolbars>
<splitter>
<classId>ConfigGadget</classId>
<gadget>
<activeConfiguration>default</activeConfiguration>
</gadget>
<type>uavGadget</type>
</splitter>
<version>UAVGadgetManagerV1</version>
</Mode2>
<Mode3>
<showToolbars>false</showToolbars>
<splitter>
<side0>
<side0>
<classId>UAVObjectBrowser</classId>
<gadget>
<activeConfiguration>default</activeConfiguration>
</gadget>
<type>uavGadget</type>
</side0>
<side1>
<classId>DebugGadget</classId>
<type>uavGadget</type>
</side1>
<splitterOrientation>1</splitterOrientation>
<splitterSizes>@Variant(AAAACQAAAAA=)</splitterSizes>
<type>splitter</type>
</side0>
<side1>
<side0>
<classId>EmptyGadget</classId>
<type>uavGadget</type>
</side0>
<side1>
<classId>EmptyGadget</classId>
<type>uavGadget</type>
</side1>
<splitterOrientation>1</splitterOrientation>
<splitterSizes>@Variant(AAAACQAAAAA=)</splitterSizes>
<type>splitter</type>
</side1>
<splitterOrientation>2</splitterOrientation>
<splitterSizes>@Variant(AAAACQAAAAIAAAACAAACJgAAAAIAAADo)</splitterSizes>
<type>splitter</type>
</splitter>
<version>UAVGadgetManagerV1</version>
</Mode3>
<Mode4>
<showToolbars>false</showToolbars>
<splitter>
<side0>
<side0>
<classId>ScopeGadget</classId>
<gadget>
<activeConfiguration>Accel</activeConfiguration>
</gadget>
<type>uavGadget</type>
</side0>
<side1>
<classId>ScopeGadget</classId>
<gadget>
<activeConfiguration>Raw Gyros</activeConfiguration>
</gadget>
<type>uavGadget</type>
</side1>
<splitterOrientation>2</splitterOrientation>
<splitterSizes>@Variant(AAAACQAAAAA=)</splitterSizes>
<type>splitter</type>
</side0>
<side1>
<side0>
<side0>
<classId>ScopeGadget</classId>
<gadget>
<activeConfiguration>Attitude</activeConfiguration>
</gadget>
<type>uavGadget</type>
</side0>
<side1>
<classId>ScopeGadget</classId>
<gadget>
<activeConfiguration>Uptimes</activeConfiguration>
</gadget>
<type>uavGadget</type>
</side1>
<splitterOrientation>2</splitterOrientation>
<splitterSizes>@Variant(AAAACQAAAAIAAAACAAABhgAAAAIAAAEO)</splitterSizes>
<type>splitter</type>
</side0>
<side1>
<classId>LoggingGadget</classId>
<type>uavGadget</type>
</side1>
<splitterOrientation>2</splitterOrientation>
<splitterSizes>@Variant(AAAACQAAAAIAAAACAAAClQAAAAIAAAB3)</splitterSizes>
<type>splitter</type>
</side1>
<splitterOrientation>1</splitterOrientation>
<splitterSizes>@Variant(AAAACQAAAAIAAAACAAACjQAAAAIAAAKU)</splitterSizes>
<type>splitter</type>
</splitter>
<version>UAVGadgetManagerV1</version>
</Mode4>
<Mode5>
<showToolbars>false</showToolbars>
<splitter>
<side0>
<side0>
<classId>HITL</classId>
<gadget>
<activeConfiguration>XPlane HITL</activeConfiguration>
</gadget>
<type>uavGadget</type>
</side0>
<side1>
<classId>HITLv2</classId>
<gadget>
<activeConfiguration>default</activeConfiguration>
</gadget>
<type>uavGadget</type>
</side1>
<splitterOrientation>1</splitterOrientation>
<splitterSizes>@Variant(AAAACQAAAAA=)</splitterSizes>
<type>splitter</type>
</side0>
<side1>
<side0>
<classId>EmptyGadget</classId>
<type>uavGadget</type>
</side0>
<side1>
<classId>GCSControlGadget</classId>
<gadget>
<activeConfiguration>MS Sidewinder</activeConfiguration>
</gadget>
<type>uavGadget</type>
</side1>
<splitterOrientation>1</splitterOrientation>
<splitterSizes>@Variant(AAAACQAAAAIAAAACAAAB6AAAAAIAAADC)</splitterSizes>
<type>splitter</type>
</side1>
<splitterOrientation>2</splitterOrientation>
<splitterSizes>@Variant(AAAACQAAAAIAAAACAAADDAAAAAIAAAJJ)</splitterSizes>
<type>splitter</type>
</splitter>
<version>UAVGadgetManagerV1</version>
</Mode5>
<Mode6>
<showToolbars>false</showToolbars>
<splitter>
<side0>
<classId>Uploader</classId>
<gadget>
<activeConfiguration>default</activeConfiguration>
</gadget>
<type>uavGadget</type>
</side0>
<side1>
<side0>
<side0>
<classId>LineardialGadget</classId>
<gadget>
<activeConfiguration>Flight Time</activeConfiguration>
</gadget>
<type>uavGadget</type>
</side0>
<side1>
<classId>SystemHealthGadget</classId>
<gadget>
<activeConfiguration>default</activeConfiguration>
</gadget>
<type>uavGadget</type>
</side1>
<splitterOrientation>1</splitterOrientation>
<splitterSizes>@Variant(AAAACQAAAAIAAAACAAABQgAAAAIAAAGM)</splitterSizes>
<type>splitter</type>
</side0>
<side1>
<classId>PFDGadget</classId>
<gadget>
<activeConfiguration>raw</activeConfiguration>
</gadget>
<type>uavGadget</type>
</side1>
<splitterOrientation>2</splitterOrientation>
<splitterSizes>@Variant(AAAACQAAAAIAAAACAAABLwAAAAIAAAHf)</splitterSizes>
<type>splitter</type>
</side1>
<splitterOrientation>1</splitterOrientation>
<splitterSizes>@Variant(AAAACQAAAAIAAAACAAADVQAAAAIAAAJK)</splitterSizes>
<type>splitter</type>
</splitter>
<version>UAVGadgetManagerV1</version>
</Mode6>
</UAVGadgetManager>
<Workspace>
<AllowTabBarMovement>false</AllowTabBarMovement>
<Icon1>:\core\images\ah.png</Icon1>
<Icon10>:/core/images/openpilot_logo_64.png</Icon10>
<Icon2>:/core/images/config.png</Icon2>
<Icon3>:/core/images/cog.png</Icon3>
<Icon4>:/core/images/scopes.png</Icon4>
<Icon5>:/core/images/joystick.png</Icon5>
<Icon6>:/core/images/cpu.png</Icon6>
<Icon7>:/core/images/openpilot_logo_64.png</Icon7>
<Icon8>:/core/images/openpilot_logo_64.png</Icon8>
<Icon9>:/core/images/openpilot_logo_64.png</Icon9>
<NumberOfWorkspaces>6</NumberOfWorkspaces>
<TabBarPlacementIndex>1</TabBarPlacementIndex>
<Workspace1>Flight data</Workspace1>
<Workspace10>Workspace10</Workspace10>
<Workspace2>Configuration</Workspace2>
<Workspace3>System</Workspace3>
<Workspace4>Scopes</Workspace4>
<Workspace5>HITL</Workspace5>
<Workspace6>Firmware</Workspace6>
<Workspace7>Workspace7</Workspace7>
<Workspace8>Workspace8</Workspace8>
<Workspace9>Workspace9</Workspace9>
</Workspace>
</gcs>

View File

@ -1385,26 +1385,6 @@
id="Telemetry-Critical"
style="fill:#cf0e0e;fill-opacity:1;stroke:#ffffff;stroke-width:0.29055119;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
</g>
<g
style="display:inline"
inkscape:label="SDCard-OK"
id="layer1"
inkscape:groupmode="layer" />
<g
style="display:inline"
inkscape:label="SDCard-Warning"
id="layer6"
inkscape:groupmode="layer" />
<g
style="display:inline"
inkscape:label="SDCard-Error"
id="layer11"
inkscape:groupmode="layer" />
<g
style="display:inline"
inkscape:label="SDCard-Critical"
id="layer20"
inkscape:groupmode="layer" />
<g
style="display:none"
inkscape:label="Memory-OK"

Before

Width:  |  Height:  |  Size: 236 KiB

After

Width:  |  Height:  |  Size: 235 KiB

View File

@ -0,0 +1 @@
MyListWidget {font-size: 11px;}

View File

@ -0,0 +1 @@
MyListWidget {font-size: 11px;}

View File

@ -0,0 +1 @@
MyListWidget {font-size: 11px;}

View File

@ -3,7 +3,7 @@ include(../openpilotgcs.pri)
TEMPLATE = subdirs
SUBDIRS = openpilotgcs/translations
DATACOLLECTIONS = dials models pfd sounds diagrams mapicons
DATACOLLECTIONS = dials models pfd sounds diagrams mapicons stylesheets default_configurations
equals(copydata, 1) {
for(dir, DATACOLLECTIONS) {

View File

@ -28,15 +28,3 @@ win32 {
}
OTHER_FILES += openpilotgcs.rc
STYLESHEETS = windows.qss \
macos.qss \
linux.qss
for(qss, STYLESHEETS) {
style_copy.commands += $(COPY_FILE) $$targetPath(\"$$GCS_SOURCE_TREE/src/app/stylesheets/$$qss\") $$targetPath(\"$$GCS_APP_PATH/$$qss\") $$addNewline()
}
style_copy.target = FORCE
QMAKE_EXTRA_TARGETS += style_copy

View File

@ -229,30 +229,6 @@ static void overrideSettings(QSettings &settings, int argc, char **argv){
settings.sync();
}
static inline void loadStyleSheet() {
/* Let's use QFile and point to a resource... */
#ifdef Q_OS_MAC
QFile data(QCoreApplication::applicationDirPath()+"/macos.qss");
#elif defined(Q_OS_LINUX)
QFile data(QCoreApplication::applicationDirPath()+"/linux.qss");
#else
QFile data(QCoreApplication::applicationDirPath()+"/windows.qss");
#endif
QString style;
/* ...to open the file */
if(data.open(QFile::ReadOnly)) {
/* QTextStream... */
QTextStream styleIn(&data);
/* ...read file to a string. */
style = styleIn.readAll();
data.close();
/* We'll use qApp macro to get the QApplication pointer
* and set the style sheet application wide. */
qApp->setStyleSheet(style);
qDebug()<<"Loaded stylesheet:"<<style;
}
}
int main(int argc, char **argv)
{
#ifdef Q_OS_MAC
@ -367,7 +343,6 @@ int main(int argc, char **argv)
return sendArguments(app, pluginManager.arguments()) ? 0 : -1;
pluginManager.loadPlugins();
loadStyleSheet();
if (coreplugin->hasError()) {
displayError(msgCoreLoadFailure(coreplugin->errorString()));
return 1;

View File

@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>862</width>
<width>867</width>
<height>598</height>
</rect>
</property>
@ -128,7 +128,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>808</width>
<width>813</width>
<height>491</height>
</rect>
</property>
@ -1352,6 +1352,18 @@ margin:1px;</string>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QLabel" name="label_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>16</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
@ -2733,8 +2745,8 @@ margin:1px;</string>
<rect>
<x>0</x>
<y>0</y>
<width>902</width>
<height>595</height>
<width>813</width>
<height>455</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_18">

View File

@ -94,12 +94,12 @@ ConfigInputWidget::ConfigInputWidget(QWidget *parent) : ConfigTaskWidget(parent)
connect(m_config->wzBack,SIGNAL(clicked()),this,SLOT(wzBack()));
m_config->stackedWidget->setCurrentIndex(0);
addUAVObjectToWidgetRelation("ManualControlSettings","FlightModePosition",m_config->fmsModePos1,0);
addUAVObjectToWidgetRelation("ManualControlSettings","FlightModePosition",m_config->fmsModePos2,1);
addUAVObjectToWidgetRelation("ManualControlSettings","FlightModePosition",m_config->fmsModePos3,2);
addUAVObjectToWidgetRelation("ManualControlSettings","FlightModePosition",m_config->fmsModePos4,3);
addUAVObjectToWidgetRelation("ManualControlSettings","FlightModePosition",m_config->fmsModePos5,4);
addUAVObjectToWidgetRelation("ManualControlSettings","FlightModePosition",m_config->fmsModePos6,5);
addUAVObjectToWidgetRelation("ManualControlSettings","FlightModePosition",m_config->fmsModePos1,0,1,true);
addUAVObjectToWidgetRelation("ManualControlSettings","FlightModePosition",m_config->fmsModePos2,1,1,true);
addUAVObjectToWidgetRelation("ManualControlSettings","FlightModePosition",m_config->fmsModePos3,2,1,true);
addUAVObjectToWidgetRelation("ManualControlSettings","FlightModePosition",m_config->fmsModePos4,3,1,true);
addUAVObjectToWidgetRelation("ManualControlSettings","FlightModePosition",m_config->fmsModePos5,4,1,true);
addUAVObjectToWidgetRelation("ManualControlSettings","FlightModePosition",m_config->fmsModePos6,5,1,true);
addUAVObjectToWidgetRelation("ManualControlSettings","FlightModeNumber",m_config->fmsPosNum);
addUAVObjectToWidgetRelation("ManualControlSettings","Stabilization1Settings",m_config->fmsSsPos1Roll,"Roll");

View File

@ -187,6 +187,18 @@ Up to 3 separate PID options (or option pairs) can be selected and updated.</str
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="1">
<widget class="QLabel" name="label_51">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>16</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
@ -204,6 +216,18 @@ margin:1px;</string>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_50">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>16</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
@ -221,6 +245,18 @@ margin:1px;</string>
</item>
<item row="1" column="3">
<widget class="QLabel" name="label_49">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>16</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
@ -238,6 +274,18 @@ margin:1px;</string>
</item>
<item row="1" column="4">
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>16</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
@ -545,6 +593,18 @@ only when system is armed without disabling the module.</string>
</item>
<item row="6" column="1">
<widget class="QLabel" name="label_4">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>16</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
@ -562,6 +622,18 @@ margin:1px;</string>
</item>
<item row="6" column="2">
<widget class="QLabel" name="label_5">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>16</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);

View File

@ -58,10 +58,10 @@ ConnectionManager::ConnectionManager(Internal::MainWindow *mainWindow, QTabWidge
QHBoxLayout *layout = new QHBoxLayout;
layout->setSpacing(5);
layout->setContentsMargins(5,5,5,5);
layout->setContentsMargins(5,2,5,2);
m_monitor = new TelemetryMonitorWidget(this);
layout->addWidget(m_monitor);
layout->addWidget(m_monitor, Qt::AlignHCenter);
layout->addWidget(new QLabel(tr("Connections:")));

View File

@ -59,7 +59,6 @@
<file>images/scopes.png</file>
<file>images/world.png</file>
<file>images/cog.png</file>
<file>OpenPilotGCS.xml</file>
<file>images/helpicon.svg</file>
<file>images/cpu.png</file>
<file>images/tx-rx.svg</file>

View File

@ -63,7 +63,8 @@ SOURCES += mainwindow.cpp \
workspacesettings.cpp \
uavconfiginfo.cpp \
authorsdialog.cpp \
telemetrymonitorwidget.cpp
telemetrymonitorwidget.cpp \
dialogs/importsettings.cpp
HEADERS += mainwindow.h \
tabpositionindicator.h \
fancyactionbar.h \
@ -124,12 +125,14 @@ HEADERS += mainwindow.h \
uavconfiginfo.h \
authorsdialog.h \
iconfigurableplugin.h \
telemetrymonitorwidget.h
telemetrymonitorwidget.h \
dialogs/importsettings.h
FORMS += dialogs/settingsdialog.ui \
dialogs/shortcutsettings.ui \
generalsettings.ui \
uavgadgetoptionspage.ui \
workspacesettings.ui
workspacesettings.ui \
dialogs/importsettings.ui
RESOURCES += core.qrc \
fancyactionbar.qrc
unix:!macx {

View File

@ -0,0 +1,55 @@
#include "importsettings.h"
#include "ui_importsettings.h"
#include <QDir>
#include <QSettings>
#include <utils/xmlconfig.h>
importSettings::importSettings(QWidget *parent) :
QDialog(parent),
ui(new Ui::importSettings)
{
ui->setupUi(this);
connect(ui->cbConfigs,SIGNAL(currentIndexChanged(int)),this,SLOT(updateDetails(int)));
connect(ui->btnLoad,SIGNAL(clicked()),this,SLOT(accept()));
}
void importSettings::loadFiles(QString path)
{
QDir myDir(path);
QStringList filters;
filters << "*.xml";
QStringList list = myDir.entryList(filters,QDir::Files);
int x=0;
foreach(QString fileStr, list)
{
fileInfo * info=new fileInfo;
QSettings settings(path+QDir::separator()+fileStr, XmlConfig::XmlSettingsFormat);
settings.beginGroup("General");
info->description=settings.value("Description","None").toString();
info->details=settings.value("Details","None").toString();
settings.endGroup();
info->file=path+QDir::separator()+fileStr;
configList.insert(x,info);
ui->cbConfigs->addItem(info->description,x);
++x;
}
}
void importSettings::updateDetails(int index)
{
fileInfo * info=configList.value(ui->cbConfigs->itemData(index).toInt());
ui->lblDetails->setText(info->details);
}
QString importSettings::choosenConfig()
{
fileInfo * info=configList.value(ui->cbConfigs->itemData(ui->cbConfigs->currentIndex()).toInt());
return info->file;
}
importSettings::~importSettings()
{
foreach(fileInfo * info,configList.values())
{
delete info;
}
delete ui;
}

View File

@ -0,0 +1,33 @@
#ifndef IMPORTSETTINGS_H
#define IMPORTSETTINGS_H
#include <QDialog>
#include <QMap>
namespace Ui {
class importSettings;
}
class importSettings : public QDialog
{
Q_OBJECT
struct fileInfo
{
QString file;
QString description;
QString details;
};
public:
explicit importSettings(QWidget *parent = 0);
~importSettings();
void loadFiles(QString path);
QString choosenConfig();
private:
Ui::importSettings *ui;
QMap<int,fileInfo*> configList;
private slots:
void updateDetails(int);
};
#endif // IMPORTSETTINGS_H

View File

@ -0,0 +1,82 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>importSettings</class>
<widget class="QDialog" name="importSettings">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>373</width>
<height>167</height>
</rect>
</property>
<property name="windowTitle">
<string>OpenPilotGCS</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>No configuration file could be found.
Please choose from one of the default configurations</string>
</property>
<property name="scaledContents">
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="cbConfigs"/>
</item>
<item>
<widget class="QLabel" name="lblDetails">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="btnLoad">
<property name="text">
<string>Load</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -84,18 +84,8 @@
#include <QtGui/QToolButton>
#include <QtGui/QMessageBox>
#include <QDesktopServices>
/*
#ifdef Q_OS_UNIX
#include <signal.h>
extern "C" void handleSigInt(int sig)
{
Q_UNUSED(sig)
Core::ICore::instance()->exit();
qDebug() << "SIGINT caught. Shutting down.";
}
#endif
*/
#include "dialogs/importsettings.h"
#include <QDir>
using namespace Core;
using namespace Core::Internal;
@ -125,7 +115,6 @@ MainWindow::MainWindow() :
m_modeManager(0),
m_connectionManager(0),
m_mimeDatabase(new MimeDatabase),
// m_rightPaneWidget(0),
m_versionDialog(0),
m_authorsDialog(0),
m_activeContext(0),
@ -197,12 +186,6 @@ MainWindow::MainWindow() :
connect(m_workspaceSettings, SIGNAL(tabBarSettingsApplied(QTabWidget::TabPosition,bool)),
this, SLOT(applyTabBarSettings(QTabWidget::TabPosition,bool)));
connect(m_modeManager, SIGNAL(newModeOrder(QVector<IMode*>)), m_workspaceSettings, SLOT(newModeOrder(QVector<IMode*>)));
// setUnifiedTitleAndToolBarOnMac(true);
#ifdef Q_OS_UNIX
//signal(SIGINT, handleSigInt);
#endif
statusBar()->setProperty("p_styled", true);
setAcceptDrops(true);
foreach (QString engine, qxtLog->allLoggerEngines())
@ -254,9 +237,6 @@ MainWindow::~MainWindow()
delete m_coreImpl;
m_coreImpl = 0;
// delete m_rightPaneWidget;
// m_rightPaneWidget = 0;
delete m_modeManager;
m_modeManager = 0;
delete m_mimeDatabase;
@ -288,19 +268,24 @@ void MainWindow::extensionsInitialized()
{
QSettings* qs = m_settings;
QSettings defaultSettings(":/core/OpenPilotGCS.xml", XmlConfig::XmlSettingsFormat);
// QSettings defaultSettings(":/core/OpenPilotGCS.ini", QSettings::IniFormat);
QSettings * settings;
if ( ! qs->allKeys().count() ){
QMessageBox msgBox;
msgBox.setText(tr("No configuration file could be found."));
msgBox.setInformativeText(tr("The default configuration will be loaded."));
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.exec();
qDebug() << "Load default config from resource /core/OpenPilotGCS.xml";
qs = &defaultSettings;
importSettings * dialog=new importSettings(this);
QDir directory(QCoreApplication::applicationDirPath());
directory.cdUp();
directory.cd("share");
directory.cd("openpilotgcs");
directory.cd("default_configurations");
dialog->loadFiles(directory.absolutePath());
dialog->exec();
settings=new QSettings(dialog->choosenConfig(), XmlConfig::XmlSettingsFormat);
qs=settings;
qDebug() << "Load default config from resource "<<dialog->choosenConfig();
delete dialog;
}
qs->beginGroup("General");
loadStyleSheet(qs->value("StyleSheet","none").toString());
qs->endGroup();
m_uavGadgetInstanceManager = new UAVGadgetInstanceManager(this);
m_uavGadgetInstanceManager->readSettings(qs);
@ -314,6 +299,37 @@ void MainWindow::extensionsInitialized()
emit m_coreImpl->coreOpened();
}
void MainWindow::loadStyleSheet(QString name) {
/* Let's use QFile and point to a resource... */
QDir directory(QCoreApplication::applicationDirPath());
directory.cdUp();
directory.cd("share");
directory.cd("openpilotgcs");
directory.cd("stylesheets");
#ifdef Q_OS_MAC
QFile data(directory.absolutePath()+QDir::separator()+name+"_macos.qss");
#elif defined(Q_OS_LINUX)
QFile data(directory.absolutePath()+QDir::separator()+name+"_linux.qss");
#else
QFile data(directory.absolutePath()+QDir::separator()+name+"_windows.qss");
#endif
QString style;
/* ...to open the file */
if(data.open(QFile::ReadOnly)) {
/* QTextStream... */
QTextStream styleIn(&data);
/* ...read file to a string. */
style = styleIn.readAll();
data.close();
/* We'll use qApp macro to get the QApplication pointer
* and set the style sheet application wide. */
qApp->setStyleSheet(style);
qDebug()<<"Loaded stylesheet:"<<style;
}
else
qDebug()<<"Failed to openstylesheet file"<<directory.absolutePath()<<name;
}
void MainWindow::closeEvent(QCloseEvent *event)
{
if ( !m_generalSettings->saveSettingsOnExit() ){
@ -1220,7 +1236,11 @@ void MainWindow::saveSettings(QSettings* qs)
m_actionManager->saveSettings(qs);
m_generalSettings->saveSettings(qs);
qs->beginGroup("General");
qs->setValue("Description",m_settings->value("Description","None"));
qs->setValue("Details",m_settings->value("Details","None"));
qs->setValue("StyleSheet",m_settings->value("StyleSheet","default"));
qs->endGroup();
}
void MainWindow::readSettings(IConfigurablePlugin* plugin, QSettings* qs)

View File

@ -170,6 +170,7 @@ private:
void registerDefaultContainers();
void registerDefaultActions();
void createWorkspaces(QSettings* qs, bool diffOnly = false);
void loadStyleSheet(QString name);
CoreImpl *m_coreImpl;
UniqueIDManager *m_uniqueIDManager;

View File

@ -40,7 +40,7 @@ DialGadgetWidget::DialGadgetWidget(QWidget *parent) : QGraphicsView(parent)
setMinimumSize(64,64);
setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
setScene(new QGraphicsScene(this));
setRenderHints(QPainter::Antialiasing);
setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
m_renderer = new QSvgRenderer();

View File

@ -40,7 +40,7 @@ JoystickControl::JoystickControl(QWidget *parent) : QGraphicsView(parent)
setMinimumSize(64, 64);
setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
setScene(new QGraphicsScene(this));
setRenderHints(QPainter::Antialiasing);
setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
m_renderer = new QSvgRenderer();
bool test = m_renderer->load(QString(":/gcscontrol/images/joystick.svg"));

View File

@ -36,7 +36,7 @@ LineardialGadgetWidget::LineardialGadgetWidget(QWidget *parent) : QGraphicsView(
setMinimumSize(32,32);
setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
setScene(new QGraphicsScene(this));
setRenderHints(QPainter::Antialiasing);
setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
m_renderer = new QSvgRenderer();
verticalDial = false;

View File

@ -46,7 +46,7 @@ PositionField::PositionField(QWidget *parent) :
setMinimumSize(64,64);
setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
setScene(new QGraphicsScene(this));
setRenderHints(QPainter::Antialiasing);
setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
m_renderer = new QSvgRenderer();
Q_ASSERT( m_renderer->load(QString(":/magicwaypoint/images/positionfield.svg")) != 0 );

View File

@ -206,7 +206,9 @@ void SoundNotifyPlugin::connectNotifications()
if (!lstNotifiedUAVObjects.contains(obj)) {
lstNotifiedUAVObjects.append(obj);
connect(obj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(on_arrived_Notification(UAVObject*)));
connect(obj, SIGNAL(objectUpdated(UAVObject*)),
this, SLOT(on_arrived_Notification(UAVObject*)),
Qt::QueuedConnection);
}
} else {
qNotifyDebug() << "Error: Object is unknown (" << notify->getDataObject() << ").";
@ -297,8 +299,6 @@ void SoundNotifyPlugin::on_expiredTimer_Notification()
return;
notification->stopExpireTimer();
volatile QMutexLocker lock(&_mutex);
if (!_pendingNotifications.isEmpty()) {
qNotifyDebug() << QString("expireTimer: %1% | %2 | %3").arg(notification->getDataObject())
.arg(notification->getObjectField())
@ -327,7 +327,6 @@ void SoundNotifyPlugin::stateChanged(Phonon::State newstate, Phonon::State oldst
{
qNotifyDebug() << "New State: " << QVariant(newstate).toString();
volatile QMutexLocker lock(&_mutex);
// assignment to NULL needed to detect that palying is finished
// it's useful in repeat timer handler, where we can detect
// that notification has not overlap with itself
@ -442,7 +441,6 @@ void SoundNotifyPlugin::checkNotificationRule(NotificationItem* notification, UA
}
if(notification->retryValue() == NotificationItem::repeatOncePerUpdate && notification->getCurrentUpdatePlayed())
return;
volatile QMutexLocker lock(&_mutex);
if (!playNotification(notification)) {
if (!_pendingNotifications.contains(notification)

View File

@ -74,7 +74,6 @@ private:
bool playNotification(NotificationItem* notification);
void checkNotificationRule(NotificationItem* notification, UAVObject* object);
void readConfig_0_0_0();
private slots:
@ -90,10 +89,6 @@ private slots:
private:
bool enableSound;
QList< QList<Phonon::MediaSource>* > lstMediaSource;
QStringList mediaSource;
QMultiMap<QString, PhononObject> mapMediaObjects;
QSettings* settings;
QList<UAVDataObject*> lstNotifiedUAVObjects;
QList<NotificationItem*> _notificationList;
@ -106,7 +101,6 @@ private:
PhononObject phonon;
NotifyPluginOptionsPage* mop;
TelemetryManager* telMngr;
QMutex _mutex;
};
#endif // SOUNDNOTIFYPLUGIN_H

View File

@ -75,7 +75,11 @@ plugin_modelview.depends = plugin_coreplugin
plugin_modelview.depends += plugin_uavobjects
SUBDIRS += plugin_modelview
!contains(QT_VERSION, ^4\\.8\\..*) {
#Qt 4.8.0 / phonon may crash on Mac, fixed in Qt 4.8.1, QTBUG-23128
macx:contains(QT_VERSION, ^4\\.8\\.0): CONFIG += disable_notify_plugin
!disable_notify_plugin {
#Notify gadget
plugin_notify.subdir = notify
plugin_notify.depends = plugin_coreplugin

View File

@ -112,327 +112,370 @@ void UAVObjectField::limitsInitialize(const QString &limits)
QStringList stringPerElement=limits.split(",");
quint32 index=0;
foreach (QString str, stringPerElement) {
QString _str=str.trimmed();
QStringList valuesPerElement=_str.split(":");
LimitStruct lstruc;
bool b1=valuesPerElement.at(0).startsWith("%");
bool b2=(int)(index)<(int)numElements;
if(b1 && b2)
QStringList ruleList=str.split(";");
QList<LimitStruct> limitList;
foreach(QString rule,ruleList)
{
if(valuesPerElement.at(0).right(2)=="EQ")
lstruc.type=EQUAL;
else if(valuesPerElement.at(0).right(2)=="NE")
lstruc.type=NOT_EQUAL;
else if(valuesPerElement.at(0).right(2)=="BE")
lstruc.type=BETWEEN;
else if(valuesPerElement.at(0).right(2)=="BI")
lstruc.type=BIGGER;
else if(valuesPerElement.at(0).right(2)=="SM")
lstruc.type=SMALLER;
else
qDebug()<<"limits parsing failed (invalid property) on UAVObjectField"<<name;
valuesPerElement.removeAt(0);
foreach(QString _value,valuesPerElement)
QString _str=rule.trimmed();
if(_str.isEmpty())
continue;
QStringList valuesPerElement=_str.split(":");
LimitStruct lstruc;
bool b1=valuesPerElement.at(0).startsWith("%");
bool b2=(int)(index)<(int)numElements;
bool b3=valuesPerElement.at(0).size()==3;
bool auxb;
valuesPerElement.at(0).mid(1,4).toInt(&auxb,16);
bool b4=((valuesPerElement.at(0).size())==7 && auxb);
if(b1 && b2 && (b3 || b4))
{
QString value=_value.trimmed();
switch (type)
if(b4)
lstruc.board=valuesPerElement.at(0).mid(1,4).toInt(&auxb,16);
else
lstruc.board=0;
if(valuesPerElement.at(0).right(2)=="EQ")
lstruc.type=EQUAL;
else if(valuesPerElement.at(0).right(2)=="NE")
lstruc.type=NOT_EQUAL;
else if(valuesPerElement.at(0).right(2)=="BE")
lstruc.type=BETWEEN;
else if(valuesPerElement.at(0).right(2)=="BI")
lstruc.type=BIGGER;
else if(valuesPerElement.at(0).right(2)=="SM")
lstruc.type=SMALLER;
else
qDebug()<<"limits parsing failed (invalid property) on UAVObjectField"<<name;
valuesPerElement.removeAt(0);
foreach(QString _value,valuesPerElement)
{
case UINT8:
case UINT16:
case UINT32:
case BITFIELD:
lstruc.values.append((quint32)value.toULong());
break;
case INT8:
case INT16:
case INT32:
lstruc.values.append((qint32)value.toLong());
break;
case FLOAT32:
lstruc.values.append((float)value.toFloat());
break;
case ENUM:
lstruc.values.append((QString)value);
break;
case STRING:
lstruc.values.append((QString)value);
break;
default:
lstruc.values.append(QVariant());
QString value=_value.trimmed();
switch (type)
{
case UINT8:
case UINT16:
case UINT32:
case BITFIELD:
lstruc.values.append((quint32)value.toULong());
break;
case INT8:
case INT16:
case INT32:
lstruc.values.append((qint32)value.toLong());
break;
case FLOAT32:
lstruc.values.append((float)value.toFloat());
break;
case ENUM:
lstruc.values.append((QString)value);
break;
case STRING:
lstruc.values.append((QString)value);
break;
default:
lstruc.values.append(QVariant());
}
}
limitList.append(lstruc);
}
else
{
if(!valuesPerElement.at(0).isEmpty() && !b1)
qDebug()<<"limits parsing failed (property doesn't start with %) on UAVObjectField"<<name;
else if(!b2)
qDebug()<<"limits parsing failed (index>numelements) on UAVObjectField"<<name<<"index"<<index<<"numElements"<<numElements;
else if(!b3 || !b4 )
qDebug()<<"limits parsing failed limit not starting with %XX or %YYYYXX where XX is the limit type and YYYY is the board type on UAVObjectField"<<name;
}
elementLimits.insert(index,lstruc);
++index;
}
else
elementLimits.insert(index,limitList);
++index;
}
foreach(QList<LimitStruct> limitList,elementLimits)
{
foreach(LimitStruct limit,limitList)
{
if(!valuesPerElement.at(0).isEmpty() && !b1)
qDebug()<<"limits parsing failed (property doesn't start with %) on UAVObjectField"<<name;
else if(!b2)
qDebug()<<"limits parsing failed (index>numelements) on UAVObjectField"<<name<<"index"<<index<<"numElements"<<numElements;
qDebug()<<"Limit type"<<limit.type<<"for board"<<limit.board<<"for field"<<getName();
foreach(QVariant var,limit.values)
{
qDebug()<<"value"<<var;
}
}
}
}
bool UAVObjectField::isWithinLimits(QVariant var,quint32 index)
bool UAVObjectField::isWithinLimits(QVariant var,quint32 index, int board)
{
if(!elementLimits.keys().contains(index))
return true;
LimitStruct struc=elementLimits.value(index);
switch(struc.type)
foreach(LimitStruct struc,elementLimits.value(index))
{
case EQUAL:
switch (type)
if((struc.board!=board) && board!=0 && struc.board!=0)
continue;
switch(struc.type)
{
case INT8:
case INT16:
case INT32:
foreach (QVariant vars, struc.values) {
if(var.toInt()==vars.toInt())
return true;
case EQUAL:
switch (type)
{
case INT8:
case INT16:
case INT32:
foreach (QVariant vars, struc.values) {
if(var.toInt()==vars.toInt())
return true;
}
return false;
break;
case UINT8:
case UINT16:
case UINT32:
case BITFIELD:
foreach (QVariant vars, struc.values) {
if(var.toUInt()==vars.toUInt())
return true;
}
return false;
break;
case ENUM:
case STRING:
foreach (QVariant vars, struc.values) {
if(var.toString()==vars.toString())
return true;
}
return false;
break;
case FLOAT32:
foreach (QVariant vars, struc.values) {
if(var.toFloat()==vars.toFloat())
return true;
}
return false;
break;
default:
return true;
}
return false;
break;
case UINT8:
case UINT16:
case UINT32:
case BITFIELD:
foreach (QVariant vars, struc.values) {
if(var.toUInt()==vars.toUInt())
return true;
case NOT_EQUAL:
switch (type)
{
case INT8:
case INT16:
case INT32:
foreach (QVariant vars, struc.values) {
if(var.toInt()==vars.toInt())
return false;
}
return true;
break;
case UINT8:
case UINT16:
case UINT32:
case BITFIELD:
foreach (QVariant vars, struc.values) {
if(var.toUInt()==vars.toUInt())
return false;
}
return true;
break;
case ENUM:
case STRING:
foreach (QVariant vars, struc.values) {
if(var.toString()==vars.toString())
return false;
}
return true;
break;
case FLOAT32:
foreach (QVariant vars, struc.values) {
if(var.toFloat()==vars.toFloat())
return false;
}
return true;
break;
default:
return true;
}
return false;
break;
case ENUM:
case STRING:
foreach (QVariant vars, struc.values) {
if(var.toString()==vars.toString())
return true;
case BETWEEN:
if(struc.values.length()<2)
{
qDebug()<<__FUNCTION__<<"between limit with less than 1 pair, aborting; field:"<<name;
return true;
}
return false;
break;
case FLOAT32:
foreach (QVariant vars, struc.values) {
if(var.toFloat()==vars.toFloat())
return true;
if(struc.values.length()>2)
qDebug()<<__FUNCTION__<<"between limit with more than 1 pair, using first; field"<<name;
switch (type)
{
case INT8:
case INT16:
case INT32:
if(!(var.toInt()>=struc.values.at(0).toInt() && var.toInt()<=struc.values.at(1).toInt()))
return false;
return true;
break;
case UINT8:
case UINT16:
case UINT32:
case BITFIELD:
if(!(var.toUInt()>=struc.values.at(0).toUInt() && var.toUInt()<=struc.values.at(1).toUInt()))
return false;
return true;
break;
case ENUM:
if(!(options.indexOf(var.toString())>=options.indexOf(struc.values.at(0).toString()) && options.indexOf(var.toString())<=options.indexOf(struc.values.at(1).toString())))
return false;
return true;
break;
case STRING:
return true;
break;
case FLOAT32:
if(!(var.toFloat()>=struc.values.at(0).toFloat() && var.toFloat()<=struc.values.at(1).toFloat()))
return false;
return true;
break;
default:
return true;
}
return false;
break;
default:
return true;
}
break;
case NOT_EQUAL:
switch (type)
{
case INT8:
case INT16:
case INT32:
foreach (QVariant vars, struc.values) {
if(var.toInt()==vars.toInt())
return false;
case BIGGER:
if(struc.values.length()<1)
{
qDebug()<<__FUNCTION__<<"BIGGER limit with less than 1 value, aborting; field:"<<name;
return true;
}
return true;
break;
case UINT8:
case UINT16:
case UINT32:
case BITFIELD:
foreach (QVariant vars, struc.values) {
if(var.toUInt()==vars.toUInt())
return false;
if(struc.values.length()>1)
qDebug()<<__FUNCTION__<<"BIGGER limit with more than 1 value, using first; field"<<name;
switch (type)
{
case INT8:
case INT16:
case INT32:
if(!(var.toInt()>=struc.values.at(0).toInt()))
return false;
return true;
break;
case UINT8:
case UINT16:
case UINT32:
case BITFIELD:
if(!(var.toUInt()>=struc.values.at(0).toUInt()))
return false;
return true;
break;
case ENUM:
if(!(options.indexOf(var.toString())>=options.indexOf(struc.values.at(0).toString())))
return false;
return true;
break;
case STRING:
return true;
break;
case FLOAT32:
if(!(var.toFloat()>=struc.values.at(0).toFloat()))
return false;
return true;
break;
default:
return true;
}
return true;
break;
case ENUM:
case STRING:
foreach (QVariant vars, struc.values) {
if(var.toString()==vars.toString())
return false;
case SMALLER:
switch (type)
{
case INT8:
case INT16:
case INT32:
if(!(var.toInt()<=struc.values.at(0).toInt()))
return false;
return true;
break;
case UINT8:
case UINT16:
case UINT32:
case BITFIELD:
if(!(var.toUInt()<=struc.values.at(0).toUInt()))
return false;
return true;
break;
case ENUM:
if(!(options.indexOf(var.toString())<=options.indexOf(struc.values.at(0).toString())))
return false;
return true;
break;
case STRING:
return true;
break;
case FLOAT32:
if(!(var.toFloat()<=struc.values.at(0).toFloat()))
return false;
return true;
break;
default:
return true;
}
return true;
break;
case FLOAT32:
foreach (QVariant vars, struc.values) {
if(var.toFloat()==vars.toFloat())
return false;
}
return true;
break;
default:
return true;
}
break;
case BETWEEN:
if(struc.values.length()<2)
{
qDebug()<<__FUNCTION__<<"between limit with less than 1 pair, aborting; field:"<<name;
return true;
}
if(struc.values.length()>2)
qDebug()<<__FUNCTION__<<"between limit with more than 1 pair, using first; field"<<name;
switch (type)
{
case INT8:
case INT16:
case INT32:
if(!(var.toInt()>=struc.values.at(0).toInt() && var.toInt()<=struc.values.at(1).toInt()))
return false;
return true;
break;
case UINT8:
case UINT16:
case UINT32:
case BITFIELD:
if(!(var.toUInt()>=struc.values.at(0).toUInt() && var.toUInt()<=struc.values.at(1).toUInt()))
return false;
return true;
break;
case ENUM:
if(!(options.indexOf(var.toString())>=options.indexOf(struc.values.at(0).toString()) && options.indexOf(var.toString())<=options.indexOf(struc.values.at(1).toString())))
return false;
return true;
break;
case STRING:
return true;
break;
case FLOAT32:
if(!(var.toFloat()>=struc.values.at(0).toFloat() && var.toFloat()<=struc.values.at(1).toFloat()))
return false;
return true;
break;
default:
return true;
}
break;
case BIGGER:
if(struc.values.length()<1)
{
qDebug()<<__FUNCTION__<<"BIGGER limit with less than 1 value, aborting; field:"<<name;
return true;
}
if(struc.values.length()>1)
qDebug()<<__FUNCTION__<<"BIGGER limit with more than 1 value, using first; field"<<name;
switch (type)
{
case INT8:
case INT16:
case INT32:
if(!(var.toInt()>=struc.values.at(0).toInt()))
return false;
return true;
break;
case UINT8:
case UINT16:
case UINT32:
case BITFIELD:
if(!(var.toUInt()>=struc.values.at(0).toUInt()))
return false;
return true;
break;
case ENUM:
if(!(options.indexOf(var.toString())>=options.indexOf(struc.values.at(0).toString())))
return false;
return true;
break;
case STRING:
return true;
break;
case FLOAT32:
if(!(var.toFloat()>=struc.values.at(0).toFloat()))
return false;
return true;
break;
default:
return true;
}
break;
case SMALLER:
switch (type)
{
case INT8:
case INT16:
case INT32:
if(!(var.toInt()<=struc.values.at(0).toInt()))
return false;
return true;
break;
case UINT8:
case UINT16:
case UINT32:
case BITFIELD:
if(!(var.toUInt()<=struc.values.at(0).toUInt()))
return false;
return true;
break;
case ENUM:
if(!(options.indexOf(var.toString())<=options.indexOf(struc.values.at(0).toString())))
return false;
return true;
break;
case STRING:
return true;
break;
case FLOAT32:
if(!(var.toFloat()<=struc.values.at(0).toFloat()))
return false;
return true;
break;
default:
return true;
}
}
return true;
}
QVariant UAVObjectField::getMaxLimit(quint32 index)
QVariant UAVObjectField::getMaxLimit(quint32 index,int board)
{
if(!elementLimits.keys().contains(index))
return QVariant();
LimitStruct struc=elementLimits.value(index);
switch(struc.type)
foreach(LimitStruct struc,elementLimits.value(index))
{
case EQUAL:
case NOT_EQUAL:
case BIGGER:
return QVariant();
break;
break;
case BETWEEN:
return struc.values.at(1);
break;
case SMALLER:
return struc.values.at(0);
break;
default:
return QVariant();
break;
if((struc.board!=board) && board!=0 && struc.board!=0)
continue;
switch(struc.type)
{
case EQUAL:
case NOT_EQUAL:
case BIGGER:
return QVariant();
break;
break;
case BETWEEN:
return struc.values.at(1);
break;
case SMALLER:
return struc.values.at(0);
break;
default:
return QVariant();
break;
}
}
return QVariant();
return QVariant();
}
QVariant UAVObjectField::getMinLimit(quint32 index)
QVariant UAVObjectField::getMinLimit(quint32 index, int board)
{
if(!elementLimits.keys().contains(index))
return QVariant();
LimitStruct struc=elementLimits.value(index);
switch(struc.type)
foreach(LimitStruct struc,elementLimits.value(index))
{
case EQUAL:
case NOT_EQUAL:
case SMALLER:
return QVariant();
break;
break;
case BETWEEN:
return struc.values.at(0);
break;
case BIGGER:
return struc.values.at(0);
break;
default:
return QVariant();
break;
if((struc.board!=board) && board!=0 && struc.board!=0)
return QVariant();
switch(struc.type)
{
case EQUAL:
case NOT_EQUAL:
case SMALLER:
return QVariant();
break;
break;
case BETWEEN:
return struc.values.at(0);
break;
case BIGGER:
return struc.values.at(0);
break;
default:
return QVariant();
break;
}
}
return QVariant();
return QVariant();
}
void UAVObjectField::initialize(quint8* data, quint32 dataOffset, UAVObject* obj)
{

View File

@ -48,6 +48,7 @@ public:
{
LimitType type;
QList<QVariant> values;
int board;
} LimitStruct;
UAVObjectField(const QString& name, const QString& units, FieldType type, quint32 numElements, const QStringList& options,const QString& limits=QString());
@ -74,9 +75,9 @@ public:
bool isText();
QString toString();
bool isWithinLimits(QVariant var, quint32 index);
QVariant getMaxLimit(quint32 index);
QVariant getMinLimit(quint32 index);
bool isWithinLimits(QVariant var, quint32 index, int board=0);
QVariant getMaxLimit(quint32 index, int board=0);
QVariant getMinLimit(quint32 index, int board=0);
signals:
void fieldUpdated(UAVObjectField* field);
@ -91,7 +92,7 @@ protected:
quint32 offset;
quint8* data;
UAVObject* obj;
QMap<quint32,LimitStruct> elementLimits;
QMap<quint32, QList<LimitStruct> > elementLimits;
void clear();
void constructorInitialize(const QString& name, const QString& units, FieldType type, const QStringList& elementNames, const QStringList& options, const QString &limits);
void limitsInitialize(const QString &limits);

View File

@ -37,6 +37,7 @@ ConfigTaskWidget::ConfigTaskWidget(QWidget *parent) : QWidget(parent),isConnecte
pm = ExtensionSystem::PluginManager::instance();
objManager = pm->getObject<UAVObjectManager>();
TelemetryManager* telMngr = pm->getObject<TelemetryManager>();
utilMngr = pm->getObject<UAVObjectUtilManager>();
connect(telMngr, SIGNAL(connected()), this, SLOT(onAutopilotConnect()));
connect(telMngr, SIGNAL(disconnected()), this, SLOT(onAutopilotDisconnect()));
connect(telMngr, SIGNAL(connected()), this, SIGNAL(autoPilotConnected()));
@ -232,9 +233,15 @@ void ConfigTaskWidget::forceConnectedState()
void ConfigTaskWidget::onAutopilotConnect()
{
if (utilMngr)
currentBoard = utilMngr->getBoardModel();//TODO REMEMBER TO ADD THIS TO FORCE CONNECTED FUNC ON CC3D_RELEASE
invalidateObjects();
dirty=false;
isConnected=true;
foreach(objectToWidget * ow,objOfInterest)
{
loadWidgetLimits(ow->widget,ow->field,ow->index,ow->isLimited,ow->scale);
}
enableControls(true);
refreshWidgetsValues();
}
@ -1077,7 +1084,7 @@ void ConfigTaskWidget::checkWidgetsLimits(QWidget * widget,UAVObjectField * fiel
{
if(!hasLimits)
return;
if(!field->isWithinLimits(value,index))
if(!field->isWithinLimits(value,index,currentBoard))
{
if(!widget->property("styleBackup").isValid())
widget->setProperty("styleBackup",widget->styleSheet());
@ -1151,7 +1158,7 @@ void ConfigTaskWidget::loadWidgetLimits(QWidget * widget,UAVObjectField * field,
{
foreach(QString str,option)
{
if(field->isWithinLimits(str,index))
if(field->isWithinLimits(str,index,currentBoard))
cb->addItem(str);
}
}
@ -1164,33 +1171,33 @@ void ConfigTaskWidget::loadWidgetLimits(QWidget * widget,UAVObjectField * field,
{
if(field->getMaxLimit(index).isValid())
{
cb->setMaximum((double)(field->getMaxLimit(index).toDouble()/scale));
cb->setMaximum((double)(field->getMaxLimit(index,currentBoard).toDouble()/scale));
}
if(field->getMinLimit(index).isValid())
if(field->getMinLimit(index,currentBoard).isValid())
{
cb->setMinimum((double)(field->getMinLimit(index).toDouble()/scale));
cb->setMinimum((double)(field->getMinLimit(index,currentBoard).toDouble()/scale));
}
}
else if(QSpinBox * cb=qobject_cast<QSpinBox *>(widget))
{
if(field->getMaxLimit(index).isValid())
if(field->getMaxLimit(index,currentBoard).isValid())
{
cb->setMaximum((int)qRound(field->getMaxLimit(index).toDouble()/scale));
cb->setMaximum((int)qRound(field->getMaxLimit(index,currentBoard).toDouble()/scale));
}
if(field->getMinLimit(index).isValid())
if(field->getMinLimit(index,currentBoard).isValid())
{
cb->setMinimum((int)qRound(field->getMinLimit(index).toDouble()/scale));
cb->setMinimum((int)qRound(field->getMinLimit(index,currentBoard).toDouble()/scale));
}
}
else if(QSlider * cb=qobject_cast<QSlider *>(widget))
{
if(field->getMaxLimit(index).isValid())
if(field->getMaxLimit(index,currentBoard).isValid())
{
cb->setMaximum((int)qRound(field->getMaxLimit(index).toDouble()/scale));
cb->setMaximum((int)qRound(field->getMaxLimit(index,currentBoard).toDouble()/scale));
}
if(field->getMinLimit(index).isValid())
if(field->getMinLimit(index,currentBoard).isValid())
{
cb->setMinimum((int)(field->getMinLimit(index).toDouble()/scale));
cb->setMinimum((int)(field->getMinLimit(index,currentBoard).toDouble()/scale));
}
}
}

View File

@ -155,12 +155,14 @@ private slots:
void defaultButtonClicked();
void reloadButtonClicked();
private:
int currentBoard;
bool isConnected;
bool allowWidgetUpdates;
QStringList objectsList;
QList <objectToWidget*> objOfInterest;
ExtensionSystem::PluginManager *pm;
UAVObjectManager *objManager;
UAVObjectUtilManager* utilMngr;
smartSaveButton *smartsave;
QMap<UAVObject *,bool> objectUpdates;
QMap<int,QList<objectToWidget*> *> defaultReloadGroups;

View File

@ -24,7 +24,7 @@
<!-- Note these options values should be identical to those defined in FlightMode -->
<field name="FlightModeNumber" units="" type="uint8" elements="1" defaultvalue="3"/>
<field name="FlightModePosition" units="" type="enum" elements="6" options="Manual,Stabilized1,Stabilized2,Stabilized3,AltitudeHold,VelocityControl,PositionHold" defaultvalue="Manual,Stabilized1,Stabilized2,Stabilized3,AltitudeHold,PositionHold"/>
<field name="FlightModePosition" units="" type="enum" elements="6" options="Manual,Stabilized1,Stabilized2,Stabilized3,AltitudeHold,VelocityControl,PositionHold" defaultvalue="Manual,Stabilized1,Stabilized2,Stabilized3,Stabilized1,Stabilized2" limits="%0401NE:AltitudeHold:VelocityControl:PositionHold;%0402NE:AltitudeHold:VelocityControl:PositionHold,%0401NE:AltitudeHold:VelocityControl:PositionHold;%0402NE:AltitudeHold:VelocityControl:PositionHold,%0401NE:AltitudeHold:VelocityControl:PositionHold;%0402NE:AltitudeHold:VelocityControl:PositionHold,%0401NE:AltitudeHold:VelocityControl:PositionHold;%0402NE:AltitudeHold:VelocityControl:PositionHold,%0401NE:AltitudeHold:VelocityControl:PositionHold;%0402NE:AltitudeHold:VelocityControl:PositionHold,%0401NE:AltitudeHold:VelocityControl:PositionHold;%0402NE:AltitudeHold:VelocityControl:PositionHold"/>
<field name="ArmedTimeout" units="ms" type="uint16" elements="1" defaultvalue="30000"/>
<access gcs="readwrite" flight="readwrite"/>

View File

@ -2,7 +2,7 @@
<object name="SystemAlarms" singleinstance="true" settings="false">
<description>Alarms from OpenPilot to indicate failure conditions or warnings. Set by various modules.</description>
<field name="Alarm" units="" type="enum" options="Uninitialised,OK,Warning,Error,Critical"
elementnames="OutOfMemory,StackOverflow,CPUOverload,EventSystem,SDCard,Telemetry,ManualControl,Actuator,Attitude,Sensors,Stabilization,Guidance,AHRSComms,Battery,FlightTime,I2C,GPS,BootFault" defaultvalue="Uninitialised"/>
elementnames="OutOfMemory,StackOverflow,CPUOverload,EventSystem,Telemetry,ManualControl,Actuator,Attitude,Sensors,Stabilization,Guidance,Battery,FlightTime,I2C,GPS,BootFault" defaultvalue="Uninitialised"/>
<access gcs="readwrite" flight="readwrite"/>
<telemetrygcs acked="true" updatemode="onchange" period="0"/>
<telemetryflight acked="true" updatemode="onchange" period="0"/>