Commit d32223ec authored by Lorenz Meier's avatar Lorenz Meier
Browse files

Merge branch 'master' of github.com:mavlink/qgroundcontrol

parents 3396c88f 43bd7b72
From where is the 3D mouse used?
Comm folder:
============
LinkInterface is a QThread. Appears to describe an interface on the host system (TCP port, serial port, ....).
Does it suppport multiple connections?
SerialLinkInterface: Extension of above
SerialLink: Implementation
XBeeLinkInterface: Extension of LinkInterface (but without other serial stuff than baudrate, is the rest assumed?)
XBeeLink: Implementation (with address resetting probably it's Series 1)
UDPLink: UDP implementation. Port is defaulted.
MAVLinkSimulationLink: Simulation/dummy implementation of LinkInterface. Does some file IO.
MAVLinkSimulationUAV: Simulation/dummy basic (remote) UAV state (minus mission state) for MAVLinkSimulationLink.
MAVLinkSimulationWaypointPlanner: imulation/dummy basic (remote) UAV mission state for MAVLinkSimulationLink.
ProtocolInterface describes a protocol. Major method:
virtual void receiveBytes(LinkInterface *link, QByteArray b) = 0;
MavlinkProtocol: MAVLink implementation of ProtocolInterface
Parameter: Identity of a parameter (the value types are not handled here. Oddly there is no type metainfo either)
ParameterList: Is pretty much what the name impiles.
QGCParamID: Wrapper if parameter text IDs, conversion to byte* and back
QGCHilLink: Link to a HIL external system
QCGFlightGearLink, QGCJSBSimLink, QGCXPlaneLink : Implementations of QGCHilLink
QGCMAVLink: Nothing more than in include to raw mavlink.h
input folder:
=============
Some exotic input devices
uas folder:
===========
UAS.h: Local UAV model. Claims to support some sort of RPC. Uses some properties with notifications. Assumes MAVLink.
Some methods:
int getUASID() const; // the systemId
QList<LinkInterface*>* getLinks(); // it knows its links
virtual void receiveMessage(LinkInterface* link, mavlink_message_t message);
float receiveDropRate; ///< Percentage of packets that were dropped on the MAV's receiving link (from GCS and other MAVs)
float sendDropRate; ///< Percentage of packets that were not received from the MAV by the GCS
Some fields:
bool positionLock; ///< Status if position information is available or not
double localX; // (what is this?)
double localY;
double localZ;
double latitude; ///< Global latitude as estimated by position estimator
double longitude; ///< Global longitude as estimated by position estimator
double altitude; ///< Global altitude as estimated by position estimator
double satelliteCount; ///< Number of satellites visible to raw GPS
bool globalEstimatorActive; ///< Global position estimator present, do not fall back to GPS raw for position
double latitude_gps; ///< Global latitude as estimated by raw GPS
double longitude_gps; ///< Global longitude as estimated by raw GPS
double altitude_gps; ///< Global altitude as estimated by raw GPS
and lots ans lots more...
*MAV.h: Implementations of UAS
QGCUASParamManager.h: A mixture of a widget and a parameter up/download state machine. Has a reference to its associated UAV.
UASWaypointManager: API to waypoint / mission control. Not a widget. Has a reference to its associated UAV.
UASManager.h: Singleton interface to all UASs on all interfaces. Maintains a single selected/active UAS.
Ideas to do
TCPLink
XBee Series2 implementation
Less stress on uplink
Get rid of hardcoded SystemId of 255
Quick View should print all altitudes (GPS, mix, ground and/or home), letting user see errors.
Console debugging is hopefully removed?
Major
1) Absolute altitude should absolutely work. Also in face of bad GPS init.
How does the mission planning part work with that, how is alt. stored in waypoints?
When is home altitude stored in the UAV?
2) Some people have worse datalinks than average - eg. slow or noisy telemetry. GPRS data also easily gets
flooded. All data rates should be configurable and uplinks eased off a little.
3) Some streams should be sent always even if not in use. For example using RC override and then stopping
using it: If the UAV does not received the final RC override message with zero values for all channels,
it will not get out of RC override. A solution is to make the message non final, repeating it every
now and then.
Minor
1) I would like to see initial dummy values for eg. battery voltage go away and be replaced by "unknown".
Dummy values confuse, you won't know if your sensors and link are working or not.
2) Suggestion if the DO_JUMP behavior of APM today (where DO_JUMP requires a waypoint command after it):
Modify APM code so DO_JUMP is regarded a navigation command. Make non navigation commands appear in
planning as sub commands of navigation commands (indent them). Easier to understand.
3) Old style audio with signals/bells/beeps / Morse may be prefered by some. Maybe add slots'n'signals for
all audio and different implementation types (speech, beep, ...). Or a generic operator messaging thing.
This diff is collapsed.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="204.65625"
height="203.875"
id="svg2"
version="1.1"
inkscape:version="0.48.2 r9819"
sodipodi:docname="qgroundcontrol-ardrone.svg">
<defs
id="defs4">
<linearGradient
inkscape:collect="always"
id="linearGradient4002">
<stop
style="stop-color:#020202;stop-opacity:1;"
offset="0"
id="stop4004" />
<stop
style="stop-color:#020202;stop-opacity:0;"
offset="1"
id="stop4006" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4002"
id="radialGradient4020"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0868293,0,-36.925542)"
cx="121.8222"
cy="425.26608"
fx="121.8222"
fy="425.26608"
r="26.555349" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4002"
id="radialGradient4028"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0868293,0,-36.925542)"
cx="121.8222"
cy="425.26608"
fx="121.8222"
fy="425.26608"
r="26.555349" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4002"
id="radialGradient4036"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0868293,0,-36.925542)"
cx="121.8222"
cy="425.26608"
fx="121.8222"
fy="425.26608"
r="26.555349" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4002"
id="radialGradient4038"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0868293,0,-36.925542)"
cx="121.8222"
cy="425.26608"
fx="121.8222"
fy="425.26608"
r="26.555349" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.86772068"
inkscape:cx="89.14956"
inkscape:cy="84.037903"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1138"
inkscape:window-height="714"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-69.4375,-373.03125)">
<path
style="fill:#3f3f3f;fill-opacity:0.72347263;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.82315111"
d="m 123.4375,373.53125 c -29.25014,0 -52.9375,22.87542 -52.9375,51.09375 0,7.58451 1.739369,14.77789 4.8125,21.25 l -0.03125,0.0312 2.40625,5.125 2.96875,4.28125 2.6875,4.5625 -1.625,31.46875 0.34375,0.5 c -7.581525,8.93266 -12.125,20.40661 -12.125,32.90625 0,28.51621 23.717689,51.625 52.96875,51.625 7.80208,0 15.20584,-1.67195 21.875,-4.625 l 5.5,-1.90625 9.40625,-3.5 7.78125,-0.53125 3.21875,-0.28125 5.125,0 4.28125,0 5.125,1.34375 7,2.15625 7.5,2.40625 0.59375,0.1875 c 6.57323,3.04879 13.88198,4.78125 21.59375,4.78125 28.54753,0 51.6875,-23.31839 51.6875,-52.0625 0,-8.73443 -2.16142,-16.95923 -5.9375,-24.1875 L 268,499.6875 264.25,493.5 l -1.0625,-1.625 -1.375,-4.5625 -1.59375,-22.0625 1.03125,-5.8125 c 0.77945,-0.93304 1.53641,-1.8878 2.25,-2.875 l 1.8125,-2.3125 2.96875,-5.375 0.71875,-2 c 1.42622,-3.27588 2.55037,-6.72547 3.28125,-10.3125 l 0.3125,-1.125 0.78125,-5.9375 -0.15625,-0.125 c 0.0679,-1.08924 0.0937,-2.17481 0.0937,-3.28125 0,-28.66987 -23.13997,-51.90625 -51.6875,-51.90625 -9.81322,0 -18.96589,2.73092 -26.78125,7.5 l -1.5625,0.78125 -7.25,4.84375 -2.15625,1.34375 -7,10.75 -0.0625,0.84375 c -0.49879,0.87062 -0.98849,1.75477 -1.4375,2.65625 l -0.0937,0 0.53125,-1.625 -1.09375,0 -0.25,-3.75 -4.3125,-0.28125 -0.40625,2.59375 c -1.69175,-2.93298 -3.6707,-5.7082 -5.90625,-8.25 l -0.40625,-0.78125 -3.5,-3.78125 -2.375,-1.4375 c -9.21863,-7.50503 -21.11816,-12.0625 -34.125,-12.0625 z m 0.5,8.125 c 17.16197,0 32.04337,9.42094 39.5,23.25 l -0.25,9.8125 1.59375,2.6875 0.46875,24.0625 c -0.14966,0.35806 -0.30965,0.70928 -0.46875,1.0625 l 0,2.03125 -9.9375,15.875 -5.90625,2.9375 -2.6875,1.34375 -8.34375,2.15625 -0.0937,-0.5 c -4.36872,1.39249 -9.02615,2.15625 -13.875,2.15625 -24.643842,0 -44.625,-19.44816 -44.625,-43.4375 0,-23.98934 19.981158,-43.4375 44.625,-43.4375 z m 97.5625,0.8125 c 24.64383,0 44.625,19.44816 44.625,43.4375 0,23.98934 -19.98117,43.4375 -44.625,43.4375 -5.58587,0 -10.91714,-1.01946 -15.84375,-2.84375 l -4.84375,-0.6875 -9.40625,-4.3125 -4.34375,-8 c -1.9583,-2.31452 -3.68616,-4.82021 -5.125,-7.5 l -0.5,-2.78125 -0.53125,-25.8125 1.625,-2.15625 -0.1875,-10.1875 c 7.5797,-13.46636 22.27016,-22.59375 39.15625,-22.59375 z m -129.03125,84.6875 9.15625,5.09375 1.34375,1.09375 -0.5625,1.875 -12.875,8.0625 -0.5625,-1.09375 3.5,-15.03125 z M 251.625,468.5 l 3.21875,14.5 -12.90625,-7.53125 0,-2.125 9.6875,-4.84375 z m -106.46875,2.15625 2.96875,7.78125 -1.625,1.0625 -2.6875,-1.34375 -21.21875,-2.125 -0.5625,-1.625 23.125,-3.75 z m 54.3125,0.53125 22.5625,4.03125 0,0.8125 -17.46875,2.125 -4.84375,0.8125 -2.125,0.53125 0.25,-2.125 1.625,-6.1875 z m -76.625,9.65625 c 12.95415,0 24.62875,5.3551 32.78125,13.9375 L 165.0625,515 l -2.34375,28.75 c -0.21202,0.41084 -0.43141,0.81548 -0.65625,1.21875 l -2.375,12.78125 -17.75,6.4375 -0.21875,-0.53125 c -5.72964,2.6108 -12.12675,4.0625 -18.875,4.0625 -24.643842,0 -44.625,-19.44816 -44.625,-43.4375 0,-23.98934 19.981158,-43.4375 44.625,-43.4375 z m 97.59375,0 c 24.64383,0 44.625,19.44816 44.625,43.4375 0,23.98934 -19.98117,43.4375 -44.625,43.4375 -7.77961,0 -15.10307,-1.93502 -21.46875,-5.34375 l -1.375,-0.0625 -12.375,-4.03125 -1.875,-9.875 c -0.0723,-0.10514 -0.14735,-0.20672 -0.21875,-0.3125 l -3.03125,-30.40625 10.21875,-24.46875 -0.15625,-0.84375 c 7.95621,-7.15925 18.59298,-11.53125 30.28125,-11.53125 z"
id="path3115"
inkscape:connector-curvature="0" />
<g
id="g4010">
<path
inkscape:connector-curvature="0"
id="path3998"
d="m 155.25605,459.16108 -18.44626,-18.44626 -1.22975,0.46115 -0.92231,0 -9.37685,-6.60991 -1.38347,-2.76694 -3.68926,-0.30744 -2.30578,-1.6909 -1.07603,-2.15207 -0.30744,-3.99669 0.92231,-2.92066 2.92066,-1.99834 2.61322,-0.30744 3.2281,0.7686 1.69091,2.15206 1.38347,1.99835 -0.15372,2.61322 0,0.15371 2.61322,1.69091 2.61322,2.92066 3.99669,7.07107 0,1.99834 17.83139,17.83139 z"
style="fill:#020202;fill-opacity:0.60771706;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path4000"
d="m 97.61148,453.6272 -1.844627,-2.4595 20.905767,-23.36527 8.76197,-9.06941 0.30744,-2.92066 19.98345,-18.90742 2.15207,2.61322 -15.98676,19.06114 -3.2281,3.38182 -7.37851,8.1471 -1.07603,4.76528 z"
style="fill:url(#radialGradient4038);fill-opacity:1;stroke:none" />
</g>
<g
id="g4014"
transform="matrix(-1,0,0,-1,346.04072,951.29831)">
<path
style="fill:#020202;fill-opacity:0.60771706;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 155.25605,459.16108 -18.44626,-18.44626 -1.22975,0.46115 -0.92231,0 -9.37685,-6.60991 -1.38347,-2.76694 -3.68926,-0.30744 -2.30578,-1.6909 -1.07603,-2.15207 -0.30744,-3.99669 0.92231,-2.92066 2.92066,-1.99834 2.61322,-0.30744 3.2281,0.7686 1.69091,2.15206 1.38347,1.99835 -0.15372,2.61322 0,0.15371 2.61322,1.69091 2.61322,2.92066 3.99669,7.07107 0,1.99834 17.83139,17.83139 z"
id="path4016"
inkscape:connector-curvature="0" />
<path
style="fill:url(#radialGradient4020);fill-opacity:1;stroke:none"
d="m 97.61148,453.6272 -1.844627,-2.4595 20.905767,-23.36527 8.76197,-9.06941 0.30744,-2.92066 19.98345,-18.90742 2.15207,2.61322 -15.98676,19.06114 -3.2281,3.38182 -7.37851,8.1471 -1.07603,4.76528 z"
id="path4018"
inkscape:connector-curvature="0" />
</g>
<g
transform="matrix(0,-1,1,0,-305.09183,648.85898)"
id="g4022">
<path
inkscape:connector-curvature="0"
id="path4024"
d="m 155.25605,459.16108 -18.44626,-18.44626 -1.22975,0.46115 -0.92231,0 -9.37685,-6.60991 -1.38347,-2.76694 -3.68926,-0.30744 -2.30578,-1.6909 -1.07603,-2.15207 -0.30744,-3.99669 0.92231,-2.92066 2.92066,-1.99834 2.61322,-0.30744 3.2281,0.7686 1.69091,2.15206 1.38347,1.99835 -0.15372,2.61322 0,0.15371 2.61322,1.69091 2.61322,2.92066 3.99669,7.07107 0,1.99834 17.83139,17.83139 z"
style="fill:#020202;fill-opacity:0.60771706;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path4026"
d="m 97.61148,453.6272 -1.844627,-2.4595 20.905767,-23.36527 8.76197,-9.06941 0.30744,-2.92066 19.98345,-18.90742 2.15207,2.61322 -15.98676,19.06114 -3.2281,3.38182 -7.37851,8.1471 -1.07603,4.76528 z"
style="fill:url(#radialGradient4028);fill-opacity:1;stroke:none" />
</g>
<g
id="g4030"
transform="matrix(0,1,-1,0,648.10112,301.30254)">
<path
style="fill:#020202;fill-opacity:0.60771706;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 155.25605,459.16108 -18.44626,-18.44626 -1.22975,0.46115 -0.92231,0 -9.37685,-6.60991 -1.38347,-2.76694 -3.68926,-0.30744 -2.30578,-1.6909 -1.07603,-2.15207 -0.30744,-3.99669 0.92231,-2.92066 2.92066,-1.99834 2.61322,-0.30744 3.2281,0.7686 1.69091,2.15206 1.38347,1.99835 -0.15372,2.61322 0,0.15371 2.61322,1.69091 2.61322,2.92066 3.99669,7.07107 0,1.99834 17.83139,17.83139 z"
id="path4032"
inkscape:connector-curvature="0" />
<path
style="fill:url(#radialGradient4036);fill-opacity:1;stroke:none"
d="m 97.61148,453.6272 -1.844627,-2.4595 20.905767,-23.36527 8.76197,-9.06941 0.30744,-2.92066 19.98345,-18.90742 2.15207,2.61322 -15.98676,19.06114 -3.2281,3.38182 -7.37851,8.1471 -1.07603,4.76528 z"
id="path4034"
inkscape:connector-curvature="0" />
</g>
</g>
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="94.766922"
height="82.001389"
id="svg2"
version="1.1"
inkscape:version="0.48.2 r9819"
sodipodi:docname="qgroundcontrol-generic.svg"
inkscape:export-filename="/Users/lomeier/Documents/logos/qupgrade_logo.png"
inkscape:export-xdpi="197.41441"
inkscape:export-ydpi="197.41441">
<defs
id="defs4">
<linearGradient
id="linearGradient3886">
<stop
id="stop3888"
offset="0"
style="stop-color:#fd8f00;stop-opacity:1;" />
<stop
id="stop3890"
offset="1"
style="stop-color:#ff590f;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient3870">
<stop
style="stop-color:#101317;stop-opacity:0.67521369;"
offset="0"
id="stop3872" />
<stop
style="stop-color:#000f27;stop-opacity:0;"
offset="1"
id="stop3874" />
</linearGradient>
<linearGradient
id="linearGradient3769">
<stop
style="stop-color:#0b6cff;stop-opacity:1;"
offset="0"
id="stop3771" />
<stop
style="stop-color:#62a1ff;stop-opacity:1;"
offset="1"
id="stop3773" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3769"
id="linearGradient3777"
x1="256.27164"
y1="397.87418"
x2="388.64728"
y2="397.87418"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3769"
id="linearGradient3785"
x1="309.72726"
y1="430.48431"
x2="440.78152"
y2="430.48431"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3769"
id="linearGradient3793"
x1="221.13821"
y1="362.93268"
x2="317.54544"
y2="362.93268"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3769"
id="linearGradient3801"
x1="229.16389"
y1="462.22253"
x2="270.93777"
y2="462.22253"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(1.4347202,1.2912482)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3769"
id="linearGradient3809"
x1="267.68182"
y1="478.02814"
x2="309.43112"
y2="478.02814"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9982874,0.05850016,-0.05850016,0.9982874,26.737243,-13.909849)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3769"
id="linearGradient3853"
x1="221.13821"
y1="398.46805"
x2="440.78152"
y2="398.46805"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3769"
id="linearGradient3855"
gradientUnits="userSpaceOnUse"
x1="221.13821"
y1="398.46805"
x2="440.78152"
y2="398.46805" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3769"
id="linearGradient3857"
gradientUnits="userSpaceOnUse"
x1="221.13821"
y1="398.46805"
x2="440.78152"
y2="398.46805" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3769"
id="linearGradient3859"
gradientUnits="userSpaceOnUse"
x1="221.13821"
y1="398.46805"
x2="440.78152"
y2="398.46805" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3769"
id="linearGradient3861"
gradientUnits="userSpaceOnUse"
x1="221.13821"
y1="398.46805"
x2="440.78152"
y2="398.46805" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3769"
id="linearGradient3863"
gradientUnits="userSpaceOnUse"
x1="221.13821"
y1="398.46805"
x2="440.78152"
y2="398.46805" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3870"
id="radialGradient3876"
cx="314.65048"
cy="521.57562"
fx="314.65048"
fy="521.57562"
r="104.71806"
gradientTransform="matrix(1,0,0,0.20616113,0,414.047)"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3886"
id="radialGradient3898"
cx="270.87222"
cy="392.51038"
fx="270.87222"
fy="392.51038"
r="61.659081"
gradientTransform="matrix(1,0,0,1.8914171,0,-349.89048)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3886"
id="linearGradient3906"
x1="319.07666"
y1="406.0119"
x2="438.94656"
y2="406.0119"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3769"
id="linearGradient3017"
gradientUnits="userSpaceOnUse"
x1="221.13821"
y1="398.46805"
x2="440.78152"
y2="398.46805"
gradientTransform="translate(1.4888824,-1.9851766)" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.6687159"
inkscape:cx="86.896407"
inkscape:cy="-14.201037"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1280"
inkscape:window-height="752"
inkscape:window-x="518"
inkscape:window-y="118"
inkscape:window-maximized="0"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-218.41197,-301.6875)">
<g
id="g3926"
transform="matrix(0.38944465,0,0,0.38944465,131.71185,184.19692)">
<path
id="path2987"
d="m 232.8125,302.1875 -9.6875,21.4375 66.65625,90.96875 c -7.25015,13.5715 -14.3327,27.20023 -19.90625,38.59375 l -27.28125,-12.84375 -8.5,11.875 25.28125,25 c -0.65577,2.1993 -0.79174,3.60942 -0.3125,4 4.92138,4.0109 1.13367,1.46752 7.15625,5.28125 0.62827,0.39784 2.1212,-0.38979 4.28125,-2.03125 l 30.0625,16.125 9.125,-11.40625 -20.5625,-22.625 c 8.76527,-9.25589 19.08205,-20.76266 29.3125,-32.53125 l 103.75,28.59375 19.59375,-17.15625 -91.71875,-49 c 7.97727,-9.82795 14.02942,-17.64629 16.1875,-21.09375 9.60221,-15.33923 33.98072,-62.20143 18.1875,-69.3125 -15.79323,-7.11107 -50.73943,31.06094 -60.21875,46.59375 -1.75706,2.87912 -5.28553,8.99198 -9.8125,17.03125 l -81.59375,-67.5 z"
style="fill:#000000;fill-opacity:0.53376202;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.61093247"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="197.41441"
inkscape:export-xdpi="197.41441"
sodipodi:nodetypes="ccczccc"
inkscape:connector-curvature="0"
id="path3830"
d="m 388.47226,426.94175 c -14.14502,20.08913 -37.17423,14.7309 -37.17423,14.7309 0,0 2.22673,-11.0706 2.30274,-11.14995 0,0 15.50452,4.19264 25.83843,-9.50522 10.33393,-13.69786 0.55137,-32.59232 0.55137,-32.59232 l 10.3275,-3.81066 c 8.45771,20.14931 5.65551,30.55726 -1.84581,42.32725 z"
style="fill:#000000;fill-opacity:0.53376202;stroke:#000000;stroke-width:0.324599px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
style="fill:#000000;fill-opacity:0.53376202;stroke:#000000;stroke-width:0.53760475px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 411.47403,444.9229 c -23.42715,33.27186 -61.5684,24.39749 -61.5684,24.39749 0,0 3.68793,-18.33526 3.81382,-18.46668 0,0 25.67877,6.9439 42.79392,-15.74266 17.11517,-22.68656 0.91318,-53.97979 0.91318,-53.97979 l 17.10453,-6.31125 c 14.00776,33.37152 9.36672,50.60929 -3.05705,70.10289 z"
id="path3835"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccczccc"
inkscape:export-xdpi="197.41441"
inkscape:export-ydpi="197.41441" />
<path
inkscape:export-ydpi="197.41441"
inkscape:export-xdpi="197.41441"
sodipodi:nodetypes="ccczccc"
inkscape:connector-curvature="0"
id="path3837"
d="m 446.80628,470.86241 c -37.66593,53.49416 -98.98904,39.22603 -98.98904,39.22603 0,0 5.92941,-29.47924 6.13182,-29.69053 0,0 41.28606,11.16433 68.80362,-25.31089 27.5176,-36.47522 1.4682,-86.78815 1.4682,-86.78815 l 27.50049,-10.14716 c 22.52153,53.65438 15.05972,81.36909 -4.91509,112.7107 z"
style="fill:#000000;fill-opacity:0.53376202;stroke:#000000;stroke-width:0.86435539px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
</g>
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="123.80738"
height="59.78463"
id="svg2"
version="1.1"
inkscape:version="0.48.2 r9819"
sodipodi:docname="qgroundcontrol-px4.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.62016872"
inkscape:cx="-132.1219"
inkscape:cy="221.56275"
inkscape:document-units="px"
inkscape:current-layer="g4032"
showgrid="false"
inkscape:window-width="1031"
inkscape:window-height="699"
inkscape:window-x="154"
inkscape:window-y="0"
inkscape:window-maximized="0"
showguides="true"
inkscape:guide-bbox="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-78.427289,-453.17262)">
<flowRoot
xml:space="preserve"
id="flowRoot2993"
style="font-size:40px;font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Airbus Special;-inkscape-font-specification:Airbus Special Bold Italic"><flowRegion
id="flowRegion2995"><rect
id="rect2997"
width="456.43564"
height="208.91089"
x="650.49506"
y="332.56021" /></flowRegion><flowPara
id="flowPara2999" /></flowRoot> <text
xml:space="preserve"
style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Helvetica"
x="39.796597"
y="57.447254"
id="text3974"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3976"
x="39.796597"
y="57.447254" /></text>
<g
id="g4032"
inkscape:export-filename="/Users/user/Desktop/px4-board-logo-extra-large.png"
inkscape:export-xdpi="509.58408"
inkscape:export-ydpi="509.58408"
transform="translate(-401.50364,67.723506)">
<path
sodipodi:nodetypes="sssssssss"
inkscape:connector-curvature="0"
id="path4017"
d="m 501.82345,386.34911 c 3.82294,0 92.11887,0 92.11887,0 6.3084,0 10.06031,5.25714 8.5701,11.387 l -9.00015,37.0215 c -1.49021,6.12986 -5.0786,9.57613 -11.387,9.57613 l -92.38814,0 c -6.3084,0 -10.09192,-5.2649 -8.5701,-11.387 l 9.20198,-37.0185 c 1.52182,-6.1221 5.14604,-9.57913 11.45444,-9.57913 z"
style="fill:none;stroke:#000000;stroke-width:3.9;stroke-miterlimit:4;stroke-opacity:0.66559488000000000;stroke-dasharray:none" />
<g
style="font-size:40px;font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:0.69453377;stroke:none;font-family:Airbus Special;-inkscape-font-specification:Airbus Special Bold Italic"
id="text4019">
<path
d="m 520.70435,402.33067 c 0.4533,2e-5 0.7333,0.08 0.84,0.24 0.1333,0.16002 0.1333,0.50669 0,1.04 l -3.16,12.92 c -0.13336,0.53334 -0.29336,0.88001 -0.48,1.04 -0.16003,0.16 -0.48003,0.24 -0.96,0.24 l -10.2,0 c -0.29335,0 -0.56001,0.08 -0.8,0.24 -0.21335,0.16 -0.34668,0.34667 -0.4,0.56 l -0.44,1.84 c -0.0534,0.21334 -0.0134,0.4 0.12,0.56 0.15999,0.16 0.38665,0.24 0.68,0.24 l 10.6,0 c 1.27997,0 2.37331,-0.0933 3.28,-0.28 0.9333,-0.18666 1.71997,-0.49333 2.36,-0.92 0.66664,-0.45333 1.2133,-1.04 1.64,-1.76 0.42663,-0.71999 0.7733,-1.62666 1.04,-2.72 l 2.68,-11 c 0.26663,-1.09331 0.35996,-1.99998 0.28,-2.72 -0.08,-0.71998 -0.3467,-1.29331 -0.8,-1.72 -0.45337,-0.45331 -1.12003,-0.77331 -2,-0.96 -0.88003,-0.18664 -2.00003,-0.27998 -3.36,-0.28 l -19.44,0 c -0.29334,2e-5 -0.56001,0.08 -0.8,0.24 -0.21334,0.16002 -0.34668,0.34669 -0.4,0.56 l -0.44,1.84 c -0.0533,0.21335 -0.0133,0.40002 0.12,0.56 0.15999,0.16002 0.38666,0.24002 0.68,0.24 l 19.36,0 m -15.68,5.56 c 0.0533,-0.21332 -1e-5,-0.41332 -0.16,-0.6 -0.13335,-0.21332 -0.34668,-0.31998 -0.64,-0.32 l -4.12,0 c -0.29334,2e-5 -0.56001,0.10668 -0.8,0.32 -0.21334,0.18668 -0.34667,0.38668 -0.4,0.6 l -5,20.52 c -0.0533,0.21333 -0.0133,0.39999 0.12,0.56 0.16,0.15999 0.38666,0.23999 0.68,0.24 l 4.12,0 c 0.29333,-10e-6 0.54666,-0.08 0.76,-0.24 0.23999,-0.16001 0.38666,-0.34667 0.44,-0.56 l 5,-20.52"
style="fill:#000000;font-family:Republika Exp;-inkscape-font-specification:Republika Exp Bold Italic;fill-opacity:0.69453377"
id="path3039"
inkscape:connector-curvature="0" />
<path
d="m 531.03685,421.25067 c 0.10666,0 0.25333,-0.0267 0.44,-0.08 0.18666,-0.08 0.30666,-0.14667 0.36,-0.2 l 9.68,-7.2 4.6,7.16 c 0.0533,0.08 0.14664,0.16 0.28,0.24 0.15998,0.0533 0.29331,0.08 0.4,0.08 l 5.36,0 c 0.4533,0 0.79997,-0.13333 1.04,-0.4 0.23997,-0.29333 0.2533,-0.58666 0.04,-0.88 l -7.12,-10.2 12.28,-9.52 c 0.3733,-0.29331 0.50663,-0.58664 0.4,-0.88 -0.1067,-0.29331 -0.3867,-0.43998 -0.84,-0.44 l -4.12,0 c -0.1067,2e-5 -0.24003,0.04 -0.4,0.12 -0.16003,0.0534 -0.29336,0.10669 -0.4,0.16 l -9.2,7.24 -4.92,-7.2 c -0.0533,-0.08 -0.17335,-0.14664 -0.36,-0.2 -0.16001,-0.08 -0.29335,-0.11998 -0.4,-0.12 l -5.56,0 c -0.45334,2e-5 -0.80001,0.14669 -1.04,0.44 -0.24001,0.26669 -0.25334,0.54669 -0.04,0.84 l 7.24,10.36 -9.56,7.28 -6.44,0 c -0.29333,0 -0.54666,0.08 -0.76,0.24 -0.24,0.16 -0.38666,0.34667 -0.44,0.56 l -0.44,1.84 c -0.0533,0.21334 0,0.4 0.16,0.56 0.13334,0.16 0.34667,0.24 0.64,0.24 l 9.12,-0.04"
style="fill:#000000;font-family:Republika Exp;-inkscape-font-specification:Republika Exp Bold Italic;fill-opacity:0.69453377"
id="path3041"
inkscape:connector-curvature="0" />
<path
d="m 565.64372,406.45067 1.6,-6.56 c 0.0533,-0.21331 0.0133,-0.42664 -0.12,-0.64 -0.13334,-0.21331 -0.34668,-0.31998 -0.64,-0.32 l -4.24,0 c -0.29334,2e-5 -0.56,0.10669 -0.8,0.32 -0.21334,0.21336 -0.34667,0.42669 -0.4,0.64 l -1.88,7.68 c -0.10667,0.42668 -0.16,0.85335 -0.16,1.28 0.0267,0.42668 0.12,0.81335 0.28,1.16 0.18666,0.34668 0.45333,0.64001 0.8,0.88 0.37333,0.21334 0.86666,0.32001 1.48,0.32 l 11.68,0 -2.24,9.24 c -0.0534,0.21334 -0.0134,0.4 0.12,0.56 0.15999,0.16 0.38665,0.24 0.68,0.24 l 4.24,0 c 0.29331,0 0.54665,-0.08 0.76,-0.24 0.23998,-0.16 0.38665,-0.34666 0.44,-0.56 l 2.24,-9.24 10.08,0 c 0.2133,1e-5 0.4133,-0.0533 0.6,-0.16 0.2133,-0.13332 0.3733,-0.26665 0.48,-0.4 l 0.4,-1.8 c 0.18663,-0.29332 0.19997,-0.53332 0.04,-0.72 -0.13337,-0.21332 -0.37337,-0.31999 -0.72,-0.32 l -10.08,0 1.96,-7.96 c 0.0533,-0.21331 -3e-5,-0.41331 -0.16,-0.6 -0.13336,-0.21331 -0.34669,-0.31998 -0.64,-0.32 l -4.24,0 c -0.29335,2e-5 -0.56002,0.10669 -0.8,0.32 -0.21335,0.18669 -0.34669,0.38669 -0.4,0.6 l -1.96,7.96 -7.6,0 c -0.37334,10e-6 -0.62668,-0.14665 -0.76,-0.44 -0.10668,-0.31998 -0.12001,-0.62665 -0.04,-0.92"
style="fill:#000000;font-family:Republika Exp;-inkscape-font-specification:Republika Exp Bold Italic;fill-opacity:0.69453377"
id="path3043"
inkscape:connector-curvature="0" />
</g>
<g
transform="scale(1.0137001,0.98648506)"
style="font-size:12.16440105000000038px;font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:0.6784566;stroke:none;font-family:Republika Exp;-inkscape-font-specification:Republika Exp Bold Italic"
id="text4023">
<path
d="m 499.03387,433.2183 5.61434,0 -0.80472,3.7429 -5.61434,0 0.80472,-3.7429 m -1.76852,-0.50529 -1.01058,4.75348 c -0.0187,0.0873 -0.0281,0.17467 -0.0281,0.262 0,0.31191 0.10293,0.57391 0.30879,0.78601 0.2121,0.21209 0.47722,0.31814 0.79537,0.31814 l 7.99107,0 1.59073,-7.48578 -7.99108,0 c -0.36181,0 -0.71115,0.13724 -1.04801,0.41171 -0.33062,0.26825 -0.53336,0.5864 -0.60822,0.95444"
style="fill:#000000;font-family:Quarx;-inkscape-font-specification:Quarx Bold Italic;fill-opacity:0.6784566"
id="path3046"
inkscape:connector-curvature="0" />
<path
d="m 518.15048,431.34686 -0.49594,0 c -0.36806,0 -0.72051,0.13724 -1.05736,0.41171 -0.33064,0.26825 -0.53338,0.5864 -0.60822,0.95444 l -0.90766,4.24819 -5.61433,0 0.90765,-4.24819 c 0.0187,-0.0873 0.0281,-0.17466 0.0281,-0.262 0,-0.3119 -0.10605,-0.5739 -0.31815,-0.78601 -0.20586,-0.21209 -0.46786,-0.31814 -0.786,-0.31814 l -0.5053,0 -1.30065,6.11963 c -0.0187,0.0873 -0.0281,0.17467 -0.0281,0.262 0,0.31191 0.10605,0.57391 0.31814,0.78601 0.2121,0.21209 0.47722,0.31814 0.79537,0.31814 l 6.61556,0 c 0.36181,0 0.70802,-0.13724 1.03865,-0.41172 0.33685,-0.27447 0.54271,-0.59262 0.61758,-0.95443 l 1.30066,-6.11963"
style="fill:#000000;font-family:Quarx;-inkscape-font-specification:Quarx Bold Italic;fill-opacity:0.6784566"
id="path3048"
inkscape:connector-curvature="0" />
<path
d="m 524.51317,431.34686 -2.80717,0 0.10293,-0.50529 c 0.0187,-0.0873 0.0281,-0.17466 0.0281,-0.26201 -10e-6,-0.3119 -0.10606,-0.5739 -0.31815,-0.786 -0.20586,-0.21209 -0.46786,-0.31814 -0.78601,-0.31815 l -0.50529,0 -1.69366,7.99108 c -0.0187,0.0873 -0.0281,0.17467 -0.0281,0.262 0,0.31191 0.10293,0.57391 0.30879,0.78601 0.2121,0.21209 0.48034,0.31814 0.80472,0.31814 l 1.93695,0 c 0.36181,0 0.70803,-0.13724 1.03865,-0.41172 0.33062,-0.27447 0.53648,-0.59262 0.61758,-0.95443 l 0.10293,-0.50529 -2.80717,0 0.79536,-3.7429 1.44102,0 c 0.36181,10e-6 0.70802,-0.13723 1.03865,-0.41172 0.33685,-0.27447 0.54271,-0.59261 0.61758,-0.95443 l 0.11228,-0.50529"
style="fill:#000000;font-family:Quarx;-inkscape-font-specification:Quarx Bold Italic;fill-opacity:0.6784566"
id="path3050"
inkscape:connector-curvature="0" />
<path
d="m 533.68121,433.2183 -5.61433,0 -0.80473,3.7429 5.61434,0 0.80472,-3.7429 m 1.97438,-0.50529 -1.01058,4.75348 c -0.0749,0.36181 -0.28073,0.67996 -0.61758,0.95443 -0.33063,0.27448 -0.67685,0.41172 -1.03865,0.41172 l -6.62492,0 c -0.31815,0 -0.58327,-0.10605 -0.79536,-0.31814 -0.20586,-0.2121 -0.30879,-0.4741 -0.30879,-0.78601 0,-0.0873 0.009,-0.17467 0.0281,-0.262 l 1.01058,-4.75348 c 0.0749,-0.36804 0.2776,-0.68619 0.60822,-0.95444 0.33686,-0.27447 0.68619,-0.41171 1.04801,-0.41171 l 6.62492,0 c 0.31814,0 0.58014,0.10605 0.78601,0.31814 0.21208,0.21211 0.31813,0.47411 0.31814,0.78601 -10e-6,0.0873 -0.009,0.17467 -0.0281,0.262"
style="fill:#000000;font-family:Quarx;-inkscape-font-specification:Quarx Bold Italic;fill-opacity:0.6784566"
id="path3052"
inkscape:connector-curvature="0" />
<path
d="m 538.70583,436.9612 0.79536,-3.7429 5.61434,0 -0.79536,3.7429 -5.61434,0 m 7.3735,0.50529 1.01058,-4.75348 c 0.0187,-0.0873 0.0281,-0.17466 0.0281,-0.262 -10e-6,-0.3119 -0.10606,-0.5739 -0.31815,-0.78601 -0.20587,-0.21209 -0.46787,-0.31814 -0.786,-0.31814 l -6.61557,0 c -0.36805,0 -0.71739,0.13724 -1.04801,0.41171 -0.33062,0.26825 -0.53648,0.5864 -0.61757,0.95444 l -1.69366,7.99108 0.50529,0 c 0.36181,0 0.70803,-0.13724 1.03865,-0.41172 0.33062,-0.27448 0.53648,-0.59263 0.61758,-0.95444 l 0.10293,-0.50529 6.11963,0 c 0.36804,0 0.71738,-0.13724 1.04801,-0.41172 0.33061,-0.27447 0.53335,-0.59262 0.60822,-0.95443"
style="fill:#000000;font-family:Quarx;-inkscape-font-specification:Quarx Bold Italic;fill-opacity:0.6784566"
id="path3054"
inkscape:connector-curvature="0" />
<path
d="m 548.67106,433.2183 0.39301,-1.87144 1.87144,0 -0.393,1.87144 -1.87145,0 m 0.67372,5.61434 -0.49593,0 c -0.31815,0 -0.58327,-0.10605 -0.79537,-0.31814 -0.21209,-0.2121 -0.31814,-0.4741 -0.31814,-0.78601 0,-0.0873 0.009,-0.17467 0.0281,-0.262 l 0.70179,-3.31246 0.50529,0 c 0.31815,0 0.58015,0.10605 0.78601,0.31814 0.21209,0.2121 0.31814,0.47411 0.31815,0.78601 -10e-6,0.0873 -0.009,0.17467 -0.0281,0.262 l -0.70179,3.31246"
style="fill:#000000;font-family:Quarx;-inkscape-font-specification:Quarx Bold Italic;fill-opacity:0.6784566"
id="path3056"
inkscape:connector-curvature="0" />
<path
d="m 552.81792,431.34686 -1.30065,6.11963 c -0.0187,0.0873 -0.0281,0.17467 -0.0281,0.262 0,0.31191 0.10293,0.57391 0.30879,0.78601 0.2121,0.21209 0.47722,0.31814 0.79537,0.31814 l 1.93695,0 c 0.36804,0 0.71738,-0.13412 1.04801,-0.40236 0.33061,-0.27448 0.53647,-0.59574 0.61757,-0.96379 l 0.10293,-0.50529 -2.80717,0 0.90765,-4.24819 c 0.0187,-0.0873 0.0281,-0.17466 0.0281,-0.262 -10e-6,-0.3119 -0.10606,-0.5739 -0.31815,-0.78601 -0.2121,-0.21209 -0.47722,-0.31814 -0.79536,-0.31814 l -0.49594,0"
style="fill:#000000;font-family:Quarx;-inkscape-font-specification:Quarx Bold Italic;fill-opacity:0.6784566"
id="path3058"
inkscape:connector-curvature="0" />
<path
d="m 566.46808,433.2183 -5.61434,0 -0.80472,3.7429 5.61433,0 0.80473,-3.7429 m 1.97437,-0.50529 -1.01058,4.75348 c -0.0749,0.36181 -0.28073,0.67996 -0.61758,0.95443 -0.33063,0.27448 -0.67684,0.41172 -1.03865,0.41172 l -6.62492,0 c -0.31815,0 -0.58327,-0.10605 -0.79536,-0.31814 -0.20586,-0.2121 -0.30879,-0.4741 -0.30879,-0.78601 0,-0.0873 0.009,-0.17467 0.0281,-0.262 l 1.01058,-4.75348 c 0.0749,-0.36804 0.2776,-0.68619 0.60822,-0.95444 0.33686,-0.27447 0.68619,-0.41171 1.04801,-0.41171 l 6.62492,0 c 0.31814,0 0.58014,0.10605 0.78601,0.31814 0.21208,0.21211 0.31813,0.47411 0.31814,0.78601 -10e-6,0.0873 -0.009,0.17467 -0.0281,0.262"
style="fill:#000000;font-family:Quarx;-inkscape-font-specification:Quarx Bold Italic;fill-opacity:0.6784566"
id="path3060"
inkscape:connector-curvature="0" />
<path
d="m 575.09523,431.34686 -2.80717,0 0.10293,-0.50529 c 0.0187,-0.0873 0.0281,-0.17466 0.0281,-0.26201 0,-0.3119 -0.10605,-0.5739 -0.31815,-0.786 -0.20586,-0.21209 -0.46786,-0.31814 -0.786,-0.31815 l -0.50529,0 -1.69366,7.99108 c -0.0187,0.0873 -0.0281,0.17467 -0.0281,0.262 0,0.31191 0.10293,0.57391 0.30878,0.78601 0.2121,0.21209 0.48034,0.31814 0.80473,0.31814 l 1.93694,0 c 0.36181,0 0.70803,-0.13724 1.03866,-0.41172 0.33061,-0.27447 0.53647,-0.59262 0.61757,-0.95443 l 0.10293,-0.50529 -2.80717,0 0.79537,-3.7429 1.44101,0 c 0.36181,10e-6 0.70803,-0.13723 1.03865,-0.41172 0.33686,-0.27447 0.54272,-0.59261 0.61758,-0.95443 l 0.11229,-0.50529"
style="fill:#000000;font-family:Quarx;-inkscape-font-specification:Quarx Bold Italic;fill-opacity:0.6784566"
id="path3062"
inkscape:connector-curvature="0" />
</g>
</g>
</g>
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="333.93051"
height="194.91403"
id="svg2"
sodipodi:version="0.32"
inkscape:version="0.48.2 r9819"
version="1.0"
sodipodi:docname="Wi-Fi_Logo.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs4">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="1693.0157 : 423.14553 : 1"
inkscape:vp_y="6.1230318e-14 : 1000 : 0"
inkscape:vp_z="2437.1101 : 423.14553 : 1"
inkscape:persp3d-origin="2065.0629 : 247.75183 : 1"
id="perspective10" />
<inkscape:perspective
id="perspective2447"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 526.18109 : 1"
sodipodi:type="inkscape:persp3d" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
gridtolerance="10000"
guidetolerance="10"
objecttolerance="10"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.9542857"
inkscape:cx="172.92683"
inkscape:cy="89.097065"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1280"
inkscape:window-height="752"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
fit-margin-left="30"
fit-margin-top="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-115.142,-334.90274)">
<path
id="path3281"
style="fill:#000000;fill-opacity:0.67845662;fill-rule:evenodd;stroke:none"
d="m 425.2708,376.22429 0,2.17814 3.72494,0 0,10.25936 2.36754,0 0,-10.22779 3.6618,0 0,-2.24128 -9.75428,0.0316 z m 11.96399,0.0947 0,12.31124 1.89404,0 0,-9.50175 2.95615,8.25614 1.99371,-0.0139 3.06822,-8.11599 0,9.53331 1.92561,0 0,-12.50063 -3.53554,0 -2.49299,8.78645 -2.55777,-8.75489 -3.25143,0 z m -292.09192,73.99368 0,-34.85027 c 0,0 -0.37881,-15.02601 14.64721,-30.05203 15.02602,-15.02602 29.29443,-13.38452 29.29443,-13.38452 l 19.69797,0 c 0,0 24.74874,-37.12311 73.74114,-37.12311 48.99239,0 77.02413,36.61803 77.02413,36.61803 l 22.22335,0 c 0,0 5.61025,-0.25403 12.66151,3.28709 7.12703,3.57918 13.53849,7.70338 20.06663,17.83514 6.54672,10.16061 7.42543,17.48017 7.42543,22.8194 0,0 0,38.13326 0,38.13326 0,7.9502 -0.75762,14.14214 -14.14214,27.52666 -13.38452,13.38452 -30.55711,11.86929 -30.55711,11.86929 l -20.45559,0 c 0,0 -25.54935,36.82516 -73.4886,36.82516 -47.94704,0 -72.47844,-36.57262 -72.47844,-36.57262 l -22.72844,0 c 0,0 -15.02602,0.88388 -29.54696,-13.63706 -14.52094,-14.52094 -13.13198,-29.29442 -13.38452,-29.29442 z m 24.11739,-50.12882 14.14214,60.98796 15.53109,0 6.9448,-35.1028 6.69226,35.1028 15.90991,0 14.14213,-60.60916 -16.92005,0 -4.9245,33.20877 -6.9448,-33.33503 -15.27855,0 -6.9448,33.71384 -5.17704,-33.84011 -17.17259,-0.12627 z m 81.3542,17.06072 0,43.87112 14.92523,0 0,-43.87112 -14.92523,0 z m 17.18663,-12.39246 c 0,4.24419 -4.21453,7.68875 -9.40742,7.68875 -5.19289,0 -9.40741,-3.44456 -9.40741,-7.68875 0,-4.24419 4.21452,-7.68875 9.40741,-7.68875 5.19289,0 9.40742,3.44456 9.40742,7.68875 z m 3.61823,79.51075 c 0,0 18.63392,-14.14069 18.63392,-35.18735 0,0 0,-35.45872 0,-35.45872 0,-5.70122 2.92325,-13.77796 11.66881,-22.52352 8.74556,-8.74556 16.45238,-10.13106 21.79988,-10.13106 0,0 55.53993,0 55.53993,0 9.44034,0.13157 16.77581,4.08862 23.51853,10.40243 6.24776,6.5645 10.31198,14.7908 10.31198,23.7899 l 0,33.92097 c 0,6.67743 -1.79054,16.35395 -10.6738,24.51355 -8.88326,8.1596 -15.72893,10.6738 -22.79489,10.6738 0,0 -108.00436,0 -108.00436,0 z m 102.57695,-67.07307 0,43.87112 14.92523,0 0,-43.87112 -14.92523,0 z m 17.18663,-12.39246 c 0,4.24419 -4.21453,7.68875 -9.40742,7.68875 -5.19289,0 -9.40741,-3.44456 -9.40741,-7.68875 0,-4.24419 4.21452,-7.68875 9.40741,-7.68875 5.19289,0 9.40742,3.44456 9.40742,7.68875 z m -79.96297,55.94699 16.73434,0 0,-18.27209 31.84048,0 0,-13.65885 -31.93094,0 0,-14.29203 36.09191,0 0,-14.20158 -52.82625,0 0.0905,60.42455 z"
sodipodi:nodetypes="cccccccccccccccccccccccccsccsccssccsccsccscccccccccccccccccccccsssccccscccccsccccccccssscccccccccccc"
inkscape:connector-curvature="0" />
<path
style="fill:#ffffff;fill-opacity:1"
d="m 38.354192,125.39247 c -0.447841,-1.33494 -13.57503,-58.49942 -13.57503,-59.114671 0,-0.48498 1.9789,-0.63957 8.187134,-0.63957 4.502924,0 8.186134,0.172698 8.18491,0.383772 -0.0037,0.647807 4.627377,31.001373 4.937987,32.364766 0.270505,1.187355 0.318138,1.205732 0.663146,0.255848 0.204438,-0.562865 1.849042,-8.224778 3.654674,-17.026473 l 3.282968,-16.003081 7.397918,0.140508 7.397918,0.140508 3.351251,16.207259 c 1.843189,8.913993 3.491965,16.347975 3.663951,16.519961 0.410989,0.410989 0.489125,-0.03701 3.052972,-17.504267 l 2.196869,-14.967105 8.08871,0 c 4.448792,0 8.088715,0.146356 8.088715,0.325235 0,0.369669 -13.215396,57.27129 -13.620925,58.64772 -0.235948,0.80083 -1.067679,0.89547 -7.870303,0.89547 -6.80128,0 -7.634776,-0.0948 -7.873834,-0.89547 -0.147049,-0.49251 -1.662973,-8.2484 -3.368722,-17.23531 -1.70575,-8.986918 -3.207377,-16.445862 -3.336949,-16.575435 -0.399998,-0.399997 -0.6438,0.693065 -3.974724,17.820245 l -3.234254,16.63012 -7.537598,0.14166 c -5.760068,0.10826 -7.589287,-0.0124 -7.756784,-0.51169 l 0,0 z"
id="path2814"
transform="translate(145.14287,334.86218)"
inkscape:connector-curvature="0" />
<path
style="fill:#ffffff;fill-opacity:1"
d="m 105.62712,104.27127 0,-21.747076 7.16374,0 7.16374,0 0,21.747076 0,21.74708 -7.16374,0 -7.16374,0 0,-21.74708 z"
id="path2816"
transform="translate(145.14287,334.86218)"
inkscape:connector-curvature="0" />
<path
style="fill:#ffffff;fill-opacity:1"
d="m 109.87745,76.869158 c -0.89879,-0.274794 -2.43346,-1.253464 -3.41039,-2.174822 -3.38782,-3.195125 -2.84853,-7.712365 1.24406,-10.420717 1.77034,-1.171553 2.73293,-1.434018 5.28517,-1.441081 11.80196,-0.03266 12.57809,13.617509 0.81796,14.385811 -1.26645,0.08274 -3.03801,-0.0744 -3.9368,-0.349191 z"
id="path2818"
transform="translate(145.14287,334.86218)"
inkscape:connector-curvature="0" />
<path
style="fill:#ffffff;fill-opacity:1"
d="m 131.32077,145.03949 c 5.99946,-6.27956 9.7733,-12.3945 12.21262,-19.78869 1.14295,-3.46456 1.19165,-4.34438 1.4868,-26.864033 0.32797,-25.023316 0.28749,-24.638195 3.19979,-30.445906 1.70145,-3.393049 5.82578,-8.649151 9.52503,-12.138837 4.09514,-3.863152 8.24462,-6.493302 12.86749,-8.156074 l 3.32602,-1.196317 31.72515,0 c 34.90986,0 34.3956,-0.0405 41.44736,3.264291 8.94786,4.193392 17.21604,14.283171 19.4424,23.725842 1.12494,4.77119 1.11347,44.373344 -0.0141,48.761274 -2.33503,9.08667 -8.82127,17.19952 -18.26049,22.83986 -7.16609,4.28206 -2.63115,4.00376 -65.24325,4.00376 l -55.54131,0 3.82652,-4.00517 z m 112.46424,-40.76822 0,-22.258772 -7.67544,0 -7.67544,0 0,22.258772 0,22.25877 7.67544,0 7.67544,0 0,-22.25877 z m -60.89181,12.7924 0,-8.95468 16.11842,0 16.11842,0 0,-7.16374 0,-7.163746 -16.11842,0 -16.11842,0 0,-6.907895 0,-6.907894 18.1652,0 18.16521,0 0,-7.419591 0,-7.419591 -26.94439,0 -26.9444,0 0.33621,8.524707 c 0.18491,4.688588 0.3362,18.389246 0.3362,30.44591 l 0,21.9212 8.44299,0 8.44298,0 0,-8.95468 z m 57.44753,-39.686008 c 5.50647,-1.529182 7.77524,-8.26653 4.05144,-12.0312 -4.33496,-4.382541 -11.79449,-4.258949 -15.59558,0.258391 -2.58713,3.074625 -2.45591,6.604646 0.34982,9.410366 2.64079,2.640792 6.9314,3.54628 11.19432,2.362443 l 0,0 z"
id="path2820"
transform="translate(145.14287,334.86218)"
inkscape:connector-curvature="0" />
</g>
</svg>
......@@ -5,6 +5,11 @@
font-size: 11px;
}
QWidget#viewModeWidget {
border-radius: 12px;
border: 3px solid #465158;
}
*::disabled {
color: #777;
}
......@@ -340,6 +345,16 @@ QPushButton, QToolButton {
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #777, stop: 1 #333);
}
QPushButton#viewModeGeneric, QPushButton#viewModePX4, QPushButton#viewModeAPM, QPushButton#viewModeAR {
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #73D95D, stop: 1 #18A154);
border-radius: 12px;
min-height: 120px;
max-height: 140px;
min-width: 120px;
max-width: 140px;
border: 3px solid #465158;
}
QPushButton#connectButton, QPushButton#controlButton {
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #73D95D, stop: 1 #18A154);
}
......
......@@ -179,7 +179,8 @@ linux-g++|linux-g++-64{
INCLUDEPATH += /usr/include \
/usr/local/include \
/usr/include/qt4/phonon
/usr/include/qt4/phonon \
/usr/include/phonon
LIBS += \
-L/usr/lib \
......@@ -215,7 +216,8 @@ linux-g++|linux-g++-64{
DEFINES += QGC_OSG_QT_ENABLED
}
exists(/usr/local/include/google/protobuf) {
exists(/usr/local/include/google/protobuf) |
exists(/usr/include/google/protobuf) {
message("Building support for Protocol Buffers")
DEPENDENCIES_PRESENT += protobuf
# Include Protocol Buffers libraries
......@@ -226,7 +228,8 @@ linux-g++|linux-g++-64{
DEFINES += QGC_PROTOBUF_ENABLED
}
exists(/usr/local/include/libfreenect/libfreenect.h) {
exists(/usr/local/include/libfreenect/libfreenect.h) |
exists(/usr/include/libfreenect/libfreenect.h) {
message("Building support for libfreenect")
DEPENDENCIES_PRESENT += libfreenect
INCLUDEPATH += /usr/include/libusb-1.0
......@@ -256,7 +259,7 @@ linux-g++ {
linux-g++-64 {
message("Building for GNU/Linux 64bit/x64 (g++-64)")
exists(/usr/local/lib64) {
LIBS += -L/usr/local/lib64
LIBS += -L/usr/local/lib64 -L/usr/lib64
}
}
......
......@@ -236,7 +236,9 @@ FORMS += src/ui/MainWindow.ui \
src/ui/UASRawStatusView.ui \
src/ui/uas/QGCMessageView.ui \
src/ui/JoystickButton.ui \
src/ui/JoystickAxis.ui
src/ui/JoystickAxis.ui \
src/ui/main/QGCViewModeSelection.ui \
src/ui/main/QGCWelcomeMainWindow.ui
INCLUDEPATH += src \
src/ui \
src/ui/linechart \
......@@ -252,7 +254,8 @@ INCLUDEPATH += src \
src/ui/watchdog \
src/ui/map3D \
src/ui/mission \
src/ui/designer
src/ui/designer \
src/ui/main
HEADERS += src/MG.h \
src/QGCCore.h \
src/uas/UASInterface.h \
......@@ -353,7 +356,6 @@ HEADERS += src/MG.h \
src/ui/QGCMAVLinkInspector.h \
src/ui/MAVLinkDecoder.h \
src/ui/WaypointViewOnlyView.h \
src/ui/WaypointViewOnlyView.h \
src/ui/WaypointEditableView.h \
src/ui/QGCRGBDView.h \
src/ui/mavlink/QGCMAVLinkMessageSender.h \
......@@ -396,7 +398,9 @@ HEADERS += src/MG.h \
src/ui/PrimaryFlightDisplay.h \
src/ui/uas/QGCMessageView.h \
src/ui/JoystickButton.h \
src/ui/JoystickAxis.h
src/ui/JoystickAxis.h \
src/ui/main/QGCViewModeSelection.h \
src/ui/main/QGCWelcomeMainWindow.h
# Google Earth is only supported on Mac OS and Windows with Visual Studio Compiler
macx|macx-g++|macx-g++42|win32-msvc2008|win32-msvc2010|win32-msvc2012::HEADERS += src/ui/map3D/QGCGoogleEarthView.h
......@@ -574,7 +578,9 @@ SOURCES += src/main.cc \
src/ui/PrimaryFlightDisplay.cc \
src/ui/uas/QGCMessageView.cc \
src/ui/JoystickButton.cc \
src/ui/JoystickAxis.cc
src/ui/JoystickAxis.cc \
src/ui/main/QGCViewModeSelection.cc \
src/ui/main/QGCWelcomeMainWindow.cc
# Enable Google Earth only on Mac OS and Windows with Visual Studio compiler
macx|macx-g++|macx-g++42|win32-msvc2008|win32-msvc2010|win32-msvc2012::SOURCES += src/ui/map3D/QGCGoogleEarthView.cc
......
......@@ -102,6 +102,11 @@
<file>files/images/patterns/lenna.jpg</file>
<file>files/images/rc_stick.svg</file>
<file>files/images/actions/qgroundcontrol-connect.svg</file>
<file>files/images/actions/qgroundcontrol-generic.svg</file>
<file>files/images/actions/qgroundcontrol-px4.svg</file>
<file>files/images/actions/qgroundcontrol-apm.svg</file>
<file>files/images/actions/qgroundcontrol-ardrone.svg</file>
<file>files/images/actions/qgroundcontrol-wifi.svg</file>
</qresource>
<qresource prefix="/general">
<file alias="vera.ttf">files/styles/Vera.ttf</file>
......
......@@ -45,6 +45,7 @@ This file is part of the QGROUNDCONTROL project
#include "QGC.h"
#include "QGCCore.h"
#include "MainWindow.h"
#include "QGCWelcomeMainWindow.h"
#include "GAudioOutput.h"
#ifdef OPAL_RT
......@@ -65,8 +66,13 @@ This file is part of the QGROUNDCONTROL project
**/
QGCCore::QGCCore(int &argc, char* argv[]) : QApplication(argc, argv)
QGCCore::QGCCore(bool firstStart, int &argc, char* argv[]) : QApplication(argc, argv),
restartRequested(false),
welcome(NULL)
{
// Exit main application when last window is closed
connect(this, SIGNAL(lastWindowClosed()), this, SLOT(quit()));
// Set application name
this->setApplicationName(QGC_APPLICATION_NAME);
this->setApplicationVersion(QGC_APPLICATION_VERSION);
......@@ -83,6 +89,7 @@ QGCCore::QGCCore(int &argc, char* argv[]) : QApplication(argc, argv)
// Show user an upgrade message if QGC got upgraded (see code below, after splash screen)
bool upgraded = false;
enum MainWindow::CUSTOM_MODE mode = MainWindow::CUSTOM_MODE_NONE;
QString lastApplicationVersion("");
if (settings.contains("QGC_APPLICATION_VERSION"))
{
......@@ -95,6 +102,10 @@ QGCCore::QGCCore(int &argc, char* argv[]) : QApplication(argc, argv)
settings.setValue("QGC_APPLICATION_VERSION", QGC_APPLICATION_VERSION);
upgraded = true;
}
else
{
mode = (enum MainWindow::CUSTOM_MODE) settings.value("QGC_CUSTOM_MODE", (int)MainWindow::CUSTOM_MODE_NONE).toInt();
}
}
else
{
......@@ -106,6 +117,15 @@ QGCCore::QGCCore(int &argc, char* argv[]) : QApplication(argc, argv)
settings.sync();
// "Bootload" the application
if ((!settings.contains("QGC_CUSTOM_MODE_STORED") || settings.value("QGC_CUSTOM_MODE_STORED") == false) && firstStart)
{
welcome = new QGCWelcomeMainWindow();
connect(welcome, SIGNAL(customViewModeSelected(MainWindow::CUSTOM_MODE)), this, SLOT(customViewModeSelected(MainWindow::CUSTOM_MODE)));
restartRequested = true;
return;
}
// Show splash screen
QPixmap splashImage(":/files/images/splash.png");
QSplashScreen* splashScreen = new QSplashScreen(splashImage);
......@@ -115,9 +135,6 @@ QGCCore::QGCCore(int &argc, char* argv[]) : QApplication(argc, argv)
processEvents();
splashScreen->showMessage(tr("Loading application fonts"), Qt::AlignLeft | Qt::AlignBottom, QColor(62, 93, 141));
// Exit main application when last window is closed
connect(this, SIGNAL(lastWindowClosed()), this, SLOT(quit()));
// Load application font
QFontDatabase fontDatabase = QFontDatabase();
const QString fontFileName = ":/general/vera.ttf"; ///< Font file is part of the QRC file and compiled into the app
......@@ -140,13 +157,18 @@ QGCCore::QGCCore(int &argc, char* argv[]) : QApplication(argc, argv)
splashScreen->showMessage(tr("Starting user interface"), Qt::AlignLeft | Qt::AlignBottom, QColor(62, 93, 141));
// The first call to instance() creates the MainWindow, so make sure it's passed the splashScreen.
mainWindow = MainWindow::instance(splashScreen);
mainWindow = MainWindow::instance_mode(splashScreen, mode);
// Connect links
// to make sure that all components are initialized when the
// first messages arrive
UDPLink* udpLink = new UDPLink(QHostAddress::Any, 14550);
MainWindow::instance()->addLink(udpLink);
UDPLink* udpLink = NULL;
if (mainWindow->getCustomMode() == MainWindow::CUSTOM_MODE_WIFI)
{
// Connect links
// to make sure that all components are initialized when the
// first messages arrive
udpLink = new UDPLink(QHostAddress::Any, 14550);
MainWindow::instance()->addLink(udpLink);
}
#ifdef OPAL_RT
// Add OpalRT Link, but do not connect
......@@ -162,12 +184,12 @@ QGCCore::QGCCore(int &argc, char* argv[]) : QApplication(argc, argv)
if (upgraded) mainWindow->showInfoMessage(tr("Default Settings Loaded"), tr("QGroundControl has been upgraded from version %1 to version %2. Some of your user preferences have been reset to defaults for safety reasons. Please adjust them where needed.").arg(lastApplicationVersion).arg(QGC_APPLICATION_VERSION));
// Check if link could be connected
if (!udpLink->connect())
if (udpLink && !udpLink->connect())
{
QMessageBox msgBox;
msgBox.setIcon(QMessageBox::Critical);
msgBox.setText("Could not connect UDP port. Is an instance of " + qAppName() + "already running?");
msgBox.setInformativeText("You will not be able to receive data via UDP. Please check that you're running the right executable and then re-start " + qAppName() + ". Do you want to close the application?");
msgBox.setInformativeText("It is recommended to close the application and stop all instances. Click Yes to close.");
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
msgBox.setDefaultButton(QMessageBox::No);
int ret = msgBox.exec();
......@@ -182,15 +204,6 @@ QGCCore::QGCCore(int &argc, char* argv[]) : QApplication(argc, argv)
QTimer::singleShot(200, mainWindow, SLOT(close()));
}
}
// forever
// {
// QGC::SLEEP::msleep(5000);
// }
// mainWindow->close();
// mainWindow->deleteLater();
// QGC::SLEEP::msleep(200);
}
/**
......@@ -199,17 +212,23 @@ QGCCore::QGCCore(int &argc, char* argv[]) : QApplication(argc, argv)
**/
QGCCore::~QGCCore()
{
//mainWindow->storeSettings();
//mainWindow->close();
//mainWindow->deleteLater();
// Delete singletons
// First systems
delete UASManager::instance();
// then links
delete LinkManager::instance();
// Finally the main window
//delete MainWindow::instance();
//The main window now autodeletes on close.
if (welcome)
{
delete welcome;
} else {
//mainWindow->storeSettings();
//mainWindow->close();
//mainWindow->deleteLater();
// Delete singletons
// First systems
delete UASManager::instance();
// then links
delete LinkManager::instance();
// Finally the main window
//delete MainWindow::instance();
//The main window now autodeletes on close.
}
}
/**
......@@ -264,4 +283,13 @@ void QGCCore::startUASManager()
}
}
void QGCCore::customViewModeSelected(enum MainWindow::CUSTOM_MODE mode)
{
QSettings settings;
settings.setValue("QGC_CUSTOM_MODE", (unsigned int)mode);
// Store settings only if requested by user
settings.setValue("QGC_CUSTOM_MODE_STORED", welcome->getStoreSettings());
settings.sync();
welcome->close();
}
......@@ -36,6 +36,7 @@ This file is part of the PIXHAWK project
#include <QApplication>
#include "MainWindow.h"
#include "QGCWelcomeMainWindow.h"
#include "UASManager.h"
#include "LinkManager.h"
/*#include "ViconTarsusProtocol.h" */
......@@ -56,9 +57,17 @@ class QGCCore : public QApplication
Q_OBJECT
public:
QGCCore(int &argc, char* argv[]);
QGCCore(bool firstStart, int &argc, char* argv[]);
~QGCCore();
bool getRestartRequested()
{
return restartRequested;
}
public slots:
void customViewModeSelected(enum MainWindow::CUSTOM_MODE mode);
protected:
void startLinkManager();
......@@ -71,6 +80,8 @@ protected:
private:
MainWindow* mainWindow;
bool restartRequested;
QGCWelcomeMainWindow* welcome;
};
#endif /* _CORE_H_ */
......@@ -11,14 +11,14 @@
#define WITH_TEXT_TO_SPEECH 1
#define QGC_APPLICATION_NAME "QGroundControl"
#define QGC_APPLICATION_VERSION "v. 1.0.9 (beta RC1)"
#define QGC_APPLICATION_VERSION "v. 1.1.0 (beta)"
namespace QGC
{
const QString APPNAME = "QGROUNDCONTROL";
const QString COMPANYNAME = "QGROUNDCONTROL";
const int APPLICATIONVERSION = 109; // 1.0.9
const int APPLICATIONVERSION = 110; // 1.1.0
}
#endif // QGC_CONFIGURATION_H
......@@ -69,6 +69,18 @@ int main(int argc, char *argv[])
qInstallMsgHandler( msgHandler );
#endif
QGCCore core(argc, argv);
return core.exec();
QGCCore* core = NULL;
int val;
bool firstStart = true;
do {
if (core) {
delete core;
firstStart = false;
}
core = new QGCCore(firstStart, argc, argv);
val = core->exec();
} while (core->getRestartRequested());
return val;
}
......@@ -38,7 +38,10 @@
* as the previous one created unless one calls deleteSettings in the code after
* creating the UAS.
*/
UAS::UAS(MAVLinkProtocol* protocol, int id) : UASInterface(),
lipoFull(4.2f),
lipoEmpty(3.5f),
uasId(id),
links(new QList<LinkInterface*>()),
unknownPackets(),
......@@ -3330,45 +3333,55 @@ QString UAS::getAudioModeTextFor(int id)
return mode;
}
/**
* The mode returned can be auto, stabilized, test, manual, preflight or unknown.
* @return the short text of the mode for the id given.
*/
/**
* The mode returned can be auto, stabilized, test, manual, preflight or unknown.
* @return the short text of the mode for the id given.
*/
QString UAS::getShortModeTextFor(int id)
{
QString mode;
QString mode = "";
uint8_t modeid = id;
qDebug() << "MODE:" << modeid;
// BASE MODE DECODING
if (modeid & (uint8_t)MAV_MODE_FLAG_DECODE_POSITION_AUTO)
{
mode += "|AUTO";
}
else if (modeid & (uint8_t)MAV_MODE_FLAG_DECODE_POSITION_GUIDED)
{
mode += "|VECTOR";
}
if (modeid & (uint8_t)MAV_MODE_FLAG_DECODE_POSITION_STABILIZE)
{
mode += "|STABILIZED";
}
else if (modeid & (uint8_t)MAV_MODE_FLAG_DECODE_POSITION_TEST)
{
mode += "|TEST";
}
else if (modeid & (uint8_t)MAV_MODE_FLAG_DECODE_POSITION_MANUAL)
{
mode += "|MANUAL";
}
else if (modeid == 0)
if (modeid == 0)
{
mode = "|PREFLIGHT";
}
else
else {
if (modeid & (uint8_t)MAV_MODE_FLAG_DECODE_POSITION_AUTO){
mode += "|AUTO";
}
if (modeid & (uint8_t)MAV_MODE_FLAG_DECODE_POSITION_MANUAL){
mode += "|MANUAL";
}
if (modeid & (uint8_t)MAV_MODE_FLAG_DECODE_POSITION_GUIDED){
mode += "|VECTOR";
}
if (modeid & (uint8_t)MAV_MODE_FLAG_DECODE_POSITION_STABILIZE){
mode += "|STABILIZED";
}
if (modeid & (uint8_t)MAV_MODE_FLAG_DECODE_POSITION_TEST){
mode += "|TEST";
}
}
if (mode.length() == 0)
{
mode = "|UNKNOWN";
qDebug() << __FILE__ << __LINE__ << " Unknown modeid: " << modeid;
}
// ARMED STATE DECODING
......@@ -3387,6 +3400,8 @@ QString UAS::getShortModeTextFor(int id)
mode.prepend("HIL:");
}
qDebug() << "MODE: " << modeid << " " << mode;
return mode;
}
......@@ -3450,8 +3465,8 @@ void UAS::setBattery(BatteryType type, int cells)
case LIION:
break;
case LIPOLY:
fullVoltage = this->cells * UAS::lipoFull;
emptyVoltage = this->cells * UAS::lipoEmpty;
fullVoltage = this->cells * lipoFull;
emptyVoltage = this->cells * lipoEmpty;
break;
case LIFE:
break;
......
......@@ -56,8 +56,8 @@ public:
UAS(MAVLinkProtocol* protocol, int id = 0);
~UAS();
static const int lipoFull = 4.2f; ///< 100% charged voltage
static const int lipoEmpty = 3.5f; ///< Discharged voltage
float lipoFull; ///< 100% charged voltage
float lipoEmpty; ///< Discharged voltage
/* MANAGEMENT */
......
......@@ -80,12 +80,13 @@ This file is part of the QGROUNDCONTROL project
const QString MainWindow::defaultDarkStyle = ":files/styles/style-dark.css";
const QString MainWindow::defaultLightStyle = ":files/styles/style-light.css";
MainWindow* MainWindow::instance(QSplashScreen* screen)
MainWindow* MainWindow::instance_mode(QSplashScreen* screen, enum MainWindow::CUSTOM_MODE mode)
{
static MainWindow* _instance = 0;
if (_instance == 0)
{
_instance = new MainWindow();
_instance->setCustomMode(mode);
if (screen)
{
connect(_instance, SIGNAL(initStatusChanged(QString,int,QColor)),
......@@ -96,6 +97,11 @@ MainWindow* MainWindow::instance(QSplashScreen* screen)
return _instance;
}
MainWindow* MainWindow::instance(QSplashScreen* screen)
{
instance_mode(screen, CUSTOM_MODE_NONE);
}
/**
* Create new mainwindow. The constructor instantiates all parts of the user
* interface. It does NOT show the mainwindow. To display it, call the show()
......@@ -115,16 +121,15 @@ MainWindow::MainWindow(QWidget *parent):
autoReconnect(false),
lowPowerMode(false),
isAdvancedMode(false),
dockWidgetTitleBarEnabled(true)
dockWidgetTitleBarEnabled(true),
customMode(CUSTOM_MODE_WIFI)
{
this->setAttribute(Qt::WA_DeleteOnClose);
hide();
loadSettings();
}
void MainWindow::init()
{
emit initStatusChanged(tr("Loading settings"), Qt::AlignLeft | Qt::AlignBottom, QColor(62, 93, 141));
loadSettings();
emit initStatusChanged(tr("Loading style"), Qt::AlignLeft | Qt::AlignBottom, QColor(62, 93, 141));
qApp->setStyle("plastique");
......@@ -1139,6 +1144,9 @@ void MainWindow::loadCustomWidgetsFromDefaults(const QString& systemType, const
void MainWindow::loadSettings()
{
QSettings settings;
settings.sync();
customMode = static_cast<enum MainWindow::CUSTOM_MODE>(settings.value("QGC_CUSTOM_MODE", (unsigned int)MainWindow::CUSTOM_MODE_NONE).toInt());
qDebug() << "MAINWINDOW: CUSTOM MODE:" << customMode;
settings.beginGroup("QGC_MAINWINDOW");
autoReconnect = settings.value("AUTO_RECONNECT", autoReconnect).toBool();
currentStyle = (QGC_MAINWINDOW_STYLE)settings.value("CURRENT_STYLE", currentStyle).toInt();
......@@ -1171,6 +1179,7 @@ void MainWindow::storeSettings()
// Save the current power mode
}
settings.setValue("LOW_POWER_MODE", lowPowerMode);
settings.setValue("QGC_CUSTOM_MODE", (int)customMode);
settings.sync();
}
......
......@@ -97,6 +97,14 @@ class MainWindow : public QMainWindow
Q_OBJECT
public:
enum CUSTOM_MODE {
CUSTOM_MODE_NONE = 0,
CUSTOM_MODE_PX4,
CUSTOM_MODE_APM,
CUSTOM_MODE_WIFI
};
/**
* A static function for obtaining the sole instance of the MainWindow. The screen
* argument is only important on the FIRST call to this function. The provided splash
......@@ -104,6 +112,7 @@ public:
* function cannot be used within the MainWindow constructor!
*/
static MainWindow* instance(QSplashScreen* screen = 0);
static MainWindow* instance_mode(QSplashScreen* screen = 0, enum MainWindow::CUSTOM_MODE mode = MainWindow::CUSTOM_MODE_NONE);
/**
* Initializes the MainWindow. Some variables are initialized and the widget is hidden.
......@@ -167,6 +176,16 @@ public:
return lowPowerMode;
}
void setCustomMode(enum MainWindow::CUSTOM_MODE mode)
{
customMode = mode;
}
enum MainWindow::CUSTOM_MODE getCustomMode()
{
return customMode;
}
QList<QAction*> listLinkMenuActions(void);
public slots:
......@@ -480,6 +499,7 @@ private:
QMap<VIEW_SECTIONS,QMap<QString,QWidget*> > centralWidgetToDockWidgetsMap;
bool isAdvancedMode; ///< If enabled dock widgets can be moved and floated.
bool dockWidgetTitleBarEnabled; ///< If enabled, dock widget titlebars are displayed when NOT in advanced mode.
CUSTOM_MODE customMode;
Ui::MainWindow ui;
/** @brief Set the appropriate titlebar for a given dock widget.
......
......@@ -705,7 +705,7 @@ void QGCParamWidget::parameterItemChanged(QTreeWidgetItem* current, int column)
current->setBackground(1, QBrush(QColor(QGC::colorOrange)));
}
switch (parameters.value(key)->value(str).type())
switch ((int)parameters.value(key)->value(str).type())
{
case QVariant::Int:
{
......@@ -766,7 +766,7 @@ void QGCParamWidget::saveParameters()
{
QString paramValue("%1");
QString paramType("%1");
switch (j.value().type())
switch ((int)j.value().type())
{
case QVariant::Int:
paramValue = paramValue.arg(j.value().toInt());
......@@ -777,7 +777,9 @@ void QGCParamWidget::saveParameters()
paramType = paramType.arg(MAV_PARAM_TYPE_UINT32);
break;
case QMetaType::Float:
paramValue = paramValue.arg(j.value().toDouble(), 25, 'g', 12);
// We store parameters as floats, with only 6 digits of precision guaranteed for decimal string conversion
// (see IEEE 754, 32 bit single-precision)
paramValue = paramValue.arg((double)j.value().toFloat(), 25, 'g', 6);
paramType = paramType.arg(MAV_PARAM_TYPE_REAL32);
break;
default:
......@@ -955,7 +957,7 @@ void QGCParamWidget::retransmissionGuardTick()
if (count < retransmissionBurstRequestSize) {
// Re-request write operation
QVariant value = missingParams->value(key);
switch (parameters.value(component)->value(key).type())
switch ((int)parameters.value(component)->value(key).type())
{
case QVariant::Int:
{
......@@ -1020,7 +1022,7 @@ void QGCParamWidget::setParameter(int component, QString parameterName, QVariant
return;
}
switch (parameters.value(component)->value(parameterName).type())
switch ((int)parameters.value(component)->value(parameterName).type())
{
case QVariant::Char:
{
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment