Merge branch 'master' into OP-495_CheBuzz_HelpButtons
@ -105,6 +105,11 @@ C: Gary Mortimer and the Scorpion
|
|||||||
D: March 2011
|
D: March 2011
|
||||||
V: http://vimeo.com/22104334
|
V: http://vimeo.com/22104334
|
||||||
|
|
||||||
|
M: First Y6 OpenPilot flight
|
||||||
|
C: Sami Korhonen (Sambas)
|
||||||
|
D: May 2011
|
||||||
|
V: http://www.vimeo.com/23637586
|
||||||
|
|
||||||
M: First CopterControl flight on a Flybarless Heli
|
M: First CopterControl flight on a Flybarless Heli
|
||||||
C: ?
|
C: ?
|
||||||
D: ?
|
D: ?
|
||||||
|
10
Makefile
@ -265,8 +265,8 @@ gcs_clean: openpilotgcs_clean
|
|||||||
.PHONY: openpilotgcs
|
.PHONY: openpilotgcs
|
||||||
openpilotgcs: uavobjects_gcs
|
openpilotgcs: uavobjects_gcs
|
||||||
$(V1) mkdir -p $(BUILD_DIR)/ground/$@
|
$(V1) mkdir -p $(BUILD_DIR)/ground/$@
|
||||||
$(V1) ( cd $(BUILD_DIR)/ground/$@ ; \
|
$(V1) ( cd $(BUILD_DIR)/ground/$@ && \
|
||||||
$(QMAKE) $(ROOT_DIR)/ground/openpilotgcs/openpilotgcs.pro -spec $(QT_SPEC) -r CONFIG+=$(GCS_BUILD_CONF) ; \
|
$(QMAKE) $(ROOT_DIR)/ground/openpilotgcs/openpilotgcs.pro -spec $(QT_SPEC) -r CONFIG+=$(GCS_BUILD_CONF) && \
|
||||||
$(MAKE) -w ; \
|
$(MAKE) -w ; \
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -290,8 +290,8 @@ openpilotgcs_clean:
|
|||||||
.PHONY: uavobjgenerator
|
.PHONY: uavobjgenerator
|
||||||
uavobjgenerator:
|
uavobjgenerator:
|
||||||
$(V1) mkdir -p $(BUILD_DIR)/ground/$@
|
$(V1) mkdir -p $(BUILD_DIR)/ground/$@
|
||||||
$(V1) ( cd $(BUILD_DIR)/ground/$@ ; \
|
$(V1) ( cd $(BUILD_DIR)/ground/$@ && \
|
||||||
$(QMAKE) $(ROOT_DIR)/ground/uavobjgenerator/uavobjgenerator.pro -spec $(QT_SPEC) -r CONFIG+=debug ; \
|
$(QMAKE) $(ROOT_DIR)/ground/uavobjgenerator/uavobjgenerator.pro -spec $(QT_SPEC) -r CONFIG+=debug && \
|
||||||
$(MAKE) --no-print-directory -w ; \
|
$(MAKE) --no-print-directory -w ; \
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -306,7 +306,7 @@ $(UAVOBJ_OUT_DIR):
|
|||||||
$(V1) mkdir -p $@
|
$(V1) mkdir -p $@
|
||||||
|
|
||||||
uavobjects_%: $(UAVOBJ_OUT_DIR) uavobjgenerator
|
uavobjects_%: $(UAVOBJ_OUT_DIR) uavobjgenerator
|
||||||
$(V1) ( cd $(UAVOBJ_OUT_DIR) ; \
|
$(V1) ( cd $(UAVOBJ_OUT_DIR) && \
|
||||||
$(UAVOBJGENERATOR) -$* $(UAVOBJ_XML_DIR) $(ROOT_DIR) ; \
|
$(UAVOBJGENERATOR) -$* $(UAVOBJ_XML_DIR) $(ROOT_DIR) ; \
|
||||||
)
|
)
|
||||||
|
|
||||||
|
1
artwork/GCS Icons/README.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
Those icons come from the Tango set and are used in the GCS.
|
443
artwork/GCS Icons/application-certificate.svg
Normal file
@ -0,0 +1,443 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In -->
|
||||||
|
<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"
|
||||||
|
sodipodi:docbase="/home/jimmac/gfx/ximian/tango-icon-theme/scalable/mimetypes"
|
||||||
|
sodipodi:docname="application-certificate.svg"
|
||||||
|
inkscape:version="0.46"
|
||||||
|
sodipodi:version="0.32"
|
||||||
|
id="svg5105"
|
||||||
|
xml:space="preserve"
|
||||||
|
viewBox="0 0 48 48"
|
||||||
|
height="48.000000px"
|
||||||
|
width="48.000000px"
|
||||||
|
inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
|
||||||
|
id="metadata5189">
|
||||||
|
<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>Certificate</dc:title><dc:creator><cc:Agent><dc:title>Jakub Steiner</dc:title></cc:Agent></dc:creator><dc:subject><rdf:Bag><rdf:li>certificate</rdf:li></rdf:Bag></dc:subject><cc:license
|
||||||
|
rdf:resource="http://creativecommons.org/licenses/publicdomain/" /></cc:Work>
|
||||||
|
|
||||||
|
|
||||||
|
<cc:License
|
||||||
|
rdf:about="http://creativecommons.org/licenses/publicdomain/"><cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Reproduction" /><cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Distribution" /><cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /></cc:License></rdf:RDF>
|
||||||
|
|
||||||
|
|
||||||
|
</metadata>
|
||||||
|
|
||||||
|
|
||||||
|
<defs
|
||||||
|
id="defs5187"><inkscape:perspective
|
||||||
|
sodipodi:type="inkscape:persp3d"
|
||||||
|
inkscape:vp_x="0 : 24 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_z="48 : 24 : 1"
|
||||||
|
inkscape:persp3d-origin="24 : 16 : 1"
|
||||||
|
id="perspective54" /><linearGradient
|
||||||
|
id="linearGradient6684">
|
||||||
|
<stop
|
||||||
|
id="stop6686"
|
||||||
|
offset="0.0000000"
|
||||||
|
style="stop-color:#d5dbff;stop-opacity:1.0000000;" />
|
||||||
|
<stop
|
||||||
|
id="stop6688"
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#6579ff;stop-opacity:0;" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient6665">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#000000;stop-opacity:1.0000000;"
|
||||||
|
offset="0.0000000"
|
||||||
|
id="stop6667" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#000000;stop-opacity:0.0000000;"
|
||||||
|
offset="1.0000000"
|
||||||
|
id="stop6669" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient6625">
|
||||||
|
<stop
|
||||||
|
id="stop6627"
|
||||||
|
offset="0.0000000"
|
||||||
|
style="stop-color:#1d2349;stop-opacity:1.0000000;" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#4c5279;stop-opacity:1.0000000;"
|
||||||
|
offset="0.35315102"
|
||||||
|
id="stop6637" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#b3bdff;stop-opacity:1.0000000;"
|
||||||
|
offset="0.46551725"
|
||||||
|
id="stop6633" />
|
||||||
|
<stop
|
||||||
|
id="stop6635"
|
||||||
|
offset="0.64982164"
|
||||||
|
style="stop-color:#727cbe;stop-opacity:1.0000000;" />
|
||||||
|
<stop
|
||||||
|
id="stop6629"
|
||||||
|
offset="1.0000000"
|
||||||
|
style="stop-color:#323c7e;stop-opacity:1.0000000;" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient6617">
|
||||||
|
<stop
|
||||||
|
id="stop6619"
|
||||||
|
offset="0.0000000"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:0.24742268;" />
|
||||||
|
<stop
|
||||||
|
id="stop6621"
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:0;" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient6604">
|
||||||
|
<stop
|
||||||
|
id="stop6606"
|
||||||
|
offset="0.0000000"
|
||||||
|
style="stop-color:#ffa196;stop-opacity:1.0000000;" />
|
||||||
|
<stop
|
||||||
|
id="stop6608"
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#ff1f06;stop-opacity:0;" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
r="13.2807"
|
||||||
|
fy="20.9712"
|
||||||
|
fx="28.7891"
|
||||||
|
cy="20.9712"
|
||||||
|
cx="28.7891"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="radialGradient5199"
|
||||||
|
xlink:href="#aigrd1"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
|
||||||
|
|
||||||
|
<radialGradient
|
||||||
|
r="14.6944"
|
||||||
|
fy="13.5444"
|
||||||
|
fx="19.292"
|
||||||
|
cy="13.5444"
|
||||||
|
cx="19.292"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="radialGradient5201"
|
||||||
|
xlink:href="#aigrd2"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
|
||||||
|
|
||||||
|
<linearGradient
|
||||||
|
y2="16.7231"
|
||||||
|
x2="23.412"
|
||||||
|
y1="11.5991"
|
||||||
|
x1="18.229"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="linearGradient5203"
|
||||||
|
xlink:href="#aigrd3"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<radialGradient
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
fy="20.971201"
|
||||||
|
fx="28.789101"
|
||||||
|
r="13.280700"
|
||||||
|
cy="20.971201"
|
||||||
|
cx="28.789101"
|
||||||
|
id="aigrd1">
|
||||||
|
<stop
|
||||||
|
id="stop5115"
|
||||||
|
style="stop-color:#E41E08"
|
||||||
|
offset="0" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<stop
|
||||||
|
id="stop5117"
|
||||||
|
style="stop-color:#901505"
|
||||||
|
offset="1" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</radialGradient>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<radialGradient
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
fy="13.544400"
|
||||||
|
fx="19.292000"
|
||||||
|
r="14.694400"
|
||||||
|
cy="13.544400"
|
||||||
|
cx="19.292000"
|
||||||
|
id="aigrd2">
|
||||||
|
<stop
|
||||||
|
id="stop5122"
|
||||||
|
style="stop-color:#E41E08"
|
||||||
|
offset="0" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<stop
|
||||||
|
id="stop5124"
|
||||||
|
style="stop-color:#901505"
|
||||||
|
offset="1" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</radialGradient>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<linearGradient
|
||||||
|
y2="16.723101"
|
||||||
|
x2="23.412001"
|
||||||
|
y1="11.599100"
|
||||||
|
x1="18.229000"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="aigrd3">
|
||||||
|
<stop
|
||||||
|
id="stop5137"
|
||||||
|
style="stop-color:#FFFFFF"
|
||||||
|
offset="0" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<stop
|
||||||
|
id="stop5139"
|
||||||
|
style="stop-color:#901505"
|
||||||
|
offset="1" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</linearGradient>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<linearGradient
|
||||||
|
gradientTransform="matrix(1.135551,0.000000,0.000000,1.135551,-3.259995,-3.266773)"
|
||||||
|
y2="16.7231"
|
||||||
|
x2="23.412"
|
||||||
|
y1="11.5991"
|
||||||
|
x1="18.229"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="linearGradient5274"
|
||||||
|
xlink:href="#aigrd3"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
|
||||||
|
|
||||||
|
<radialGradient
|
||||||
|
gradientTransform="matrix(1.135551,0.000000,0.000000,1.135551,-4.540325,-2.077433)"
|
||||||
|
r="14.6944"
|
||||||
|
fy="13.5444"
|
||||||
|
fx="19.292"
|
||||||
|
cy="13.5444"
|
||||||
|
cx="19.292"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="radialGradient5281"
|
||||||
|
xlink:href="#aigrd2"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
|
||||||
|
|
||||||
|
<radialGradient
|
||||||
|
gradientTransform="matrix(1.310386,0.000000,0.000000,1.310386,-8.642682,-4.375977)"
|
||||||
|
r="13.2807"
|
||||||
|
fy="20.9712"
|
||||||
|
fx="28.7891"
|
||||||
|
cy="20.9712"
|
||||||
|
cx="28.7891"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="radialGradient5284"
|
||||||
|
xlink:href="#aigrd1"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<linearGradient
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
y2="49.895073"
|
||||||
|
x2="43.140980"
|
||||||
|
y1="5.9244628"
|
||||||
|
x1="15.338736"
|
||||||
|
gradientTransform="matrix(0.975728,0.000000,0.000000,0.931033,-0.132002,1.978392)"
|
||||||
|
id="linearGradient6610"
|
||||||
|
xlink:href="#linearGradient6604"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
<linearGradient
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
y2="22.783224"
|
||||||
|
x2="29.957399"
|
||||||
|
y1="9.4436626"
|
||||||
|
x1="18.570419"
|
||||||
|
gradientTransform="matrix(1.028670,0.000000,0.000000,0.972129,-1.280330,1.189340)"
|
||||||
|
id="linearGradient6623"
|
||||||
|
xlink:href="#linearGradient6617"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
<linearGradient
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
y2="35.017860"
|
||||||
|
x2="38.250904"
|
||||||
|
y1="22.886259"
|
||||||
|
x1="38.506161"
|
||||||
|
gradientTransform="matrix(0.843938,0.000000,0.000000,1.184922,-1.280330,1.689340)"
|
||||||
|
id="linearGradient6631"
|
||||||
|
xlink:href="#linearGradient6625"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
<radialGradient
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
r="33.156136"
|
||||||
|
fy="19.818913"
|
||||||
|
fx="24.452202"
|
||||||
|
cy="19.818913"
|
||||||
|
cx="24.452202"
|
||||||
|
gradientTransform="matrix(1.024478,0.000000,0.000000,0.976107,0.939339,-0.530329)"
|
||||||
|
id="radialGradient6663"
|
||||||
|
xlink:href="#linearGradient6665"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
<radialGradient
|
||||||
|
r="33.156136"
|
||||||
|
fy="19.818913"
|
||||||
|
fx="24.452202"
|
||||||
|
cy="19.818913"
|
||||||
|
cx="24.452202"
|
||||||
|
gradientTransform="matrix(1.024478,0.000000,0.000000,0.976107,1.646447,-0.353552)"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="radialGradient6675"
|
||||||
|
xlink:href="#linearGradient6665"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
<radialGradient
|
||||||
|
r="14.6944"
|
||||||
|
fy="20.479359"
|
||||||
|
fx="26.887432"
|
||||||
|
cy="20.479359"
|
||||||
|
cx="26.887432"
|
||||||
|
gradientTransform="matrix(1.135551,0.000000,0.000000,1.135551,-4.540325,-2.077433)"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="radialGradient6678"
|
||||||
|
xlink:href="#aigrd2"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
<linearGradient
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
y2="27.403761"
|
||||||
|
x2="36.499001"
|
||||||
|
y1="35.458244"
|
||||||
|
x1="37.502811"
|
||||||
|
gradientTransform="scale(0.843938,1.184922)"
|
||||||
|
id="linearGradient6690"
|
||||||
|
xlink:href="#linearGradient6684"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
</defs>
|
||||||
|
|
||||||
|
|
||||||
|
<sodipodi:namedview
|
||||||
|
inkscape:current-layer="svg5105"
|
||||||
|
inkscape:window-y="30"
|
||||||
|
inkscape:window-x="203"
|
||||||
|
inkscape:cy="20.392013"
|
||||||
|
inkscape:cx="20.303269"
|
||||||
|
inkscape:zoom="5.6568542"
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="0.16470588"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="821"
|
||||||
|
inkscape:window-height="818"
|
||||||
|
inkscape:showpageshadow="false"
|
||||||
|
showgrid="false" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<path
|
||||||
|
style="opacity:0.48044690;color:#000000;fill:url(#radialGradient6675);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
|
||||||
|
d="M 25.389110,19.305038 C 25.389110,19.305038 19.484245,27.481005 19.484245,31.228324 C 19.484245,34.975642 26.297551,32.931650 29.022873,35.656973 C 31.748195,38.382295 22.663787,45.422711 22.663787,45.422711 L 31.748195,42.924499 L 35.381959,46.785372 C 35.381959,42.129613 40.719048,38.382295 37.993726,35.543418 C 35.154848,32.704540 27.092436,33.045205 26.638216,29.297887 C 26.183995,25.550569 25.502665,19.418593 25.502665,19.418593 L 25.389110,19.305038 z "
|
||||||
|
id="path6671" />
|
||||||
|
<path
|
||||||
|
style="opacity:0.48044690;fill:url(#radialGradient6663);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
|
||||||
|
d="M 36.916160,9.3946518 C 38.237688,12.452028 40.559293,12.296470 40.616709,16.377167 C 40.649454,18.652929 42.449165,19.847910 42.449165,22.172684 C 42.449165,24.497457 38.434150,25.646156 37.066636,27.013668 C 35.699121,28.381184 37.174521,31.888095 33.464606,32.918627 C 29.789944,33.939367 27.994548,32.508375 25.669774,32.508375 C 23.344998,32.508375 17.781956,36.991063 15.730683,34.939790 C 13.679411,32.888519 13.635647,28.405831 11.857879,26.628063 C 9.9433579,24.713542 6.9184435,22.038663 6.9184435,18.619877 C 6.9184435,15.201092 8.8926489,13.396291 11.721128,10.217892 C 14.639403,6.9385873 14.729659,2.0128046 18.148445,2.0128046 C 21.567230,2.0128046 22.877627,2.9506145 25.787409,2.8770766 C 30.425746,2.7598534 30.994149,0.55375463 34.405481,2.2835766 C 37.413183,3.8087260 35.881638,7.0012699 36.916160,9.3946518 z "
|
||||||
|
id="path6639"
|
||||||
|
sodipodi:nodetypes="csssssssssssss" />
|
||||||
|
<path
|
||||||
|
id="path5112"
|
||||||
|
d="M 23.621340,18.067599 C 23.621340,18.067599 17.716475,26.243566 17.716475,29.990885 C 17.716475,33.738203 24.529781,31.694211 27.255103,34.419534 C 29.980425,37.144856 20.896017,44.185272 20.896017,44.185272 L 29.980425,41.687060 L 33.614189,45.547933 C 33.614189,40.892174 38.951278,37.144856 36.225956,34.305979 C 33.387078,31.467101 25.324666,31.807766 24.870446,28.060448 C 24.416225,24.313130 23.734895,18.181154 23.734895,18.181154 L 23.621340,18.067599 z "
|
||||||
|
style="stroke-opacity:1.0000000;stroke-miterlimit:6.5999999;stroke-width:1.0000000;stroke:#1f254f;fill-rule:nonzero;fill-opacity:1.0000000;fill:url(#linearGradient6631)" />
|
||||||
|
|
||||||
|
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cscccsss"
|
||||||
|
style="fill:none;fill-opacity:1.0000000;fill-rule:nonzero;stroke:url(#linearGradient6690);stroke-width:0.72112519;stroke-miterlimit:6.5999999;stroke-opacity:1.0000000"
|
||||||
|
d="M 20.803213,31.602421 C 25.355213,32.050805 28.232227,32.837946 28.609835,35.591528 C 28.939949,37.998767 24.377692,42.324487 24.377692,42.324487 L 30.221580,40.699741 L 33.062950,43.660691 C 33.725862,39.949751 37.427758,37.438687 35.741856,35.156087 C 33.627168,32.292939 26.775807,32.912620 26.448257,30.210335 C 26.120707,27.508049 18.114196,31.334950 20.803213,31.602421 z "
|
||||||
|
id="path6680" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="csssssssssssss"
|
||||||
|
id="path5119"
|
||||||
|
d="M 34.935485,9.2468088 C 36.201806,12.176463 38.426426,12.027404 38.481444,15.937630 C 38.512821,18.118322 40.237349,19.263383 40.237349,21.491039 C 40.237349,23.718695 36.390061,24.819407 35.079675,26.129792 C 33.769288,27.440180 35.183053,30.800590 31.628119,31.788071 C 28.106966,32.766170 26.386573,31.394957 24.158916,31.394957 C 21.931258,31.394957 16.600611,35.690381 14.635030,33.724800 C 12.669450,31.759221 12.627514,27.463797 10.924012,25.760295 C 9.0894699,23.925753 6.1909207,21.362617 6.1909207,18.086651 C 6.1909207,14.810685 8.0826538,13.081280 10.792974,10.035658 C 13.589338,6.8933472 13.675824,2.1733389 16.951790,2.1733389 C 20.227756,2.1733389 21.483411,3.0719718 24.271637,3.0015059 C 28.716208,2.8891797 29.260866,0.77524063 32.529689,2.4327994 C 35.411745,3.8942357 33.944180,6.9534113 34.935485,9.2468088 z "
|
||||||
|
style="stroke-opacity:1.0000000;stroke-miterlimit:4.0000000;stroke-linejoin:round;stroke-linecap:round;stroke:#4c0901;fill-rule:nonzero;fill:url(#radialGradient5284)" />
|
||||||
|
|
||||||
|
|
||||||
|
<path
|
||||||
|
id="path5126"
|
||||||
|
d="M 34.976850,17.567599 C 34.976850,23.813130 29.866870,28.923109 23.621340,28.923109 C 17.375809,28.923109 12.265830,23.813130 12.265830,17.567599 C 12.265830,11.322069 17.375809,6.2120891 23.621340,6.2120891 C 29.866870,6.2120891 34.976850,11.322069 34.976850,17.567599 z "
|
||||||
|
style="stroke-miterlimit:4.0000000;stroke:none;fill-rule:nonzero;fill:url(#radialGradient6678)" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:nonzero;stroke:url(#linearGradient6610);stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
|
||||||
|
d="M 33.888971,10.030124 C 35.042232,12.698211 37.068232,12.562460 37.118338,16.123571 C 37.146913,18.109565 38.717470,19.152392 38.717470,21.181157 C 38.717470,23.209922 35.213679,24.212359 34.020288,25.405749 C 32.826895,26.599143 34.114436,29.659526 30.876896,30.558842 C 27.670121,31.449613 26.103329,30.200827 24.074563,30.200827 C 22.045797,30.200827 17.191084,34.112744 15.400995,32.322655 C 13.610908,30.532568 13.572716,26.620651 12.021307,25.069242 C 10.350558,23.398493 7.7107989,21.064201 7.7107989,18.080722 C 7.7107989,15.097243 9.4336334,13.522243 11.901968,10.748543 C 14.448666,7.8867861 14.527430,3.5881928 17.510909,3.5881928 C 20.494388,3.5881928 21.637935,4.4065934 24.177221,4.3424188 C 28.224968,4.2401214 28.720998,2.3149204 31.697971,3.8244879 C 34.322710,5.1554433 32.986173,7.9414875 33.888971,10.030124 z "
|
||||||
|
id="path6600"
|
||||||
|
sodipodi:nodetypes="csssssssssssss" />
|
||||||
|
<path
|
||||||
|
id="path6612"
|
||||||
|
d="M 23.663250,7.0524597 C 17.795434,7.0524597 13.016988,11.794692 13.016988,17.662510 C 13.016988,21.333503 15.000693,24.443138 17.833154,26.353336 C 25.073625,22.456374 23.786958,15.548148 33.440430,13.606789 C 31.841424,9.7576868 28.088842,7.0524597 23.663250,7.0524597 z "
|
||||||
|
style="color:#000000;fill:url(#linearGradient6623);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;opacity:1.0000000" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 15 KiB |
91
artwork/GCS Icons/icon-checkbox.svg
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
version="1.1"
|
||||||
|
width="48"
|
||||||
|
height="48"
|
||||||
|
id="svg2448">
|
||||||
|
<defs
|
||||||
|
id="defs2450">
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient8662">
|
||||||
|
<stop
|
||||||
|
id="stop8664"
|
||||||
|
style="stop-color:black;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop8666"
|
||||||
|
style="stop-color:black;stop-opacity:0"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
cx="24.837126"
|
||||||
|
cy="36.421127"
|
||||||
|
r="15.644737"
|
||||||
|
fx="24.837126"
|
||||||
|
fy="36.421127"
|
||||||
|
id="radialGradient1444"
|
||||||
|
xlink:href="#linearGradient8662"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(1,0,0,0.536723,0,16.87306)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient2264">
|
||||||
|
<stop
|
||||||
|
id="stop2266"
|
||||||
|
style="stop-color:#d7e866;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop2268"
|
||||||
|
style="stop-color:#8cab2a;stop-opacity:1"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="-84.343536"
|
||||||
|
y1="-5.3878593"
|
||||||
|
x2="-91.513138"
|
||||||
|
y2="24.558243"
|
||||||
|
id="linearGradient2628"
|
||||||
|
xlink:href="#linearGradient2264"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(1.017301,-0.243559,0.243559,1.017301,110.52469,-7.9553513)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3400">
|
||||||
|
<stop
|
||||||
|
id="stop3402"
|
||||||
|
style="stop-color:white;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop3404"
|
||||||
|
style="stop-color:white;stop-opacity:0"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="20.494444"
|
||||||
|
y1="6.0097799"
|
||||||
|
x2="20.494444"
|
||||||
|
y2="47.760197"
|
||||||
|
id="linearGradient3406"
|
||||||
|
xlink:href="#linearGradient3400"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
</defs>
|
||||||
|
<g
|
||||||
|
id="layer1">
|
||||||
|
<path
|
||||||
|
d="m 40.481863,36.421127 a 15.644737,8.3968938 0 1 1 -31.2894745,0 15.644737,8.3968938 0 1 1 31.2894745,0 z"
|
||||||
|
transform="matrix(1.214466,0,0,0.595458,-6.163846,20.31274)"
|
||||||
|
id="path8660"
|
||||||
|
style="opacity:0.20454544;color:black;fill:url(#radialGradient1444);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" />
|
||||||
|
<path
|
||||||
|
d="m 33.706448,5.4818293 c -0.559734,-0.056806 -1.116221,0.217337 -1.403811,0.7436469 L 20.049307,28.645074 12.17121,22.380993 c -0.701747,-0.383453 -1.577286,-0.136769 -1.960742,0.564978 l -3.5328714,4.535744 c -0.3834475,0.701741 -0.1254891,1.577017 0.5762529,1.960469 0,0 14.3844195,11.880283 14.4021675,11.889074 0.164469,0.08987 0.336465,0.135093 0.511297,0.157184 0.571121,0.07217 1.155595,-0.196162 1.449176,-0.733433 L 40.141725,10.519399 C 40.525176,9.8176549 40.267222,8.9423801 39.565474,8.558928 L 34.26311,5.6492257 C 34.087671,5.553362 33.893026,5.5007637 33.706448,5.4818293 z"
|
||||||
|
id="path1542"
|
||||||
|
style="fill:url(#linearGradient2628);fill-opacity:1;fill-rule:nonzero;stroke:#42770c;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" />
|
||||||
|
<path
|
||||||
|
d="M 32.938536,7.2012775 26.730268,18.60791 21.197213,28.668822 c -0.178482,0.181096 -0.123845,0.754094 -0.902701,0.952966 -0.538869,0.137595 -0.636352,-0.06289 -1.204172,-0.427914 l -6.950556,-5.492153 c -0.7733,-0.621665 -0.749753,-0.589365 -1.297288,-0.03737 L 8.0515824,27.18582 c -0.7518117,0.804672 -0.6353589,1.290849 0.3017539,1.891047 0,0 13.0781537,10.780055 13.0949407,10.788373 0.155564,0.085 0.0892,0.114145 0.757862,0.57814 0.428927,0.297637 0.807539,-0.647982 1.083435,-1.15286 L 39.190779,10.274963 C 39.55113,9.6155282 39.523767,9.624421 38.860008,9.2617466 L 34.11801,6.7472827 C 33.434075,6.3758505 33.430508,6.3800895 32.938536,7.2012775 z"
|
||||||
|
id="path1544"
|
||||||
|
style="opacity:0.4;fill:none;stroke:url(#linearGradient3406);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.3 KiB |
390
artwork/GCS Icons/icon-gears.svg
Normal file
@ -0,0 +1,390 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
version="1.0"
|
||||||
|
width="48"
|
||||||
|
height="48"
|
||||||
|
id="svg2527">
|
||||||
|
<defs
|
||||||
|
id="defs2529">
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient8838">
|
||||||
|
<stop
|
||||||
|
id="stop8840"
|
||||||
|
style="stop-color:#000000;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop8842"
|
||||||
|
style="stop-color:#000000;stop-opacity:0"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
cx="62.625"
|
||||||
|
cy="4.625"
|
||||||
|
r="10.625"
|
||||||
|
fx="62.625"
|
||||||
|
fy="4.625"
|
||||||
|
id="radialGradient2436"
|
||||||
|
xlink:href="#linearGradient8838"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(2.1647059,0,0,0.7529402,-111.56471,36.517647)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3397">
|
||||||
|
<stop
|
||||||
|
id="stop3399"
|
||||||
|
style="stop-color:#aaaaaa;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop3401"
|
||||||
|
style="stop-color:#8c8c8c;stop-opacity:1"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="37.201294"
|
||||||
|
y1="1"
|
||||||
|
x2="37.201294"
|
||||||
|
y2="45"
|
||||||
|
id="linearGradient2517"
|
||||||
|
xlink:href="#linearGradient3397"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<linearGradient
|
||||||
|
x1="63.9995"
|
||||||
|
y1="3.1001"
|
||||||
|
x2="63.9995"
|
||||||
|
y2="122.8994"
|
||||||
|
id="linearGradient3309"
|
||||||
|
gradientUnits="userSpaceOnUse">
|
||||||
|
<stop
|
||||||
|
id="stop3311"
|
||||||
|
style="stop-color:#f6f6f6;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop3313"
|
||||||
|
style="stop-color:#d2d2d2;stop-opacity:1"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="20.758585"
|
||||||
|
y1="1"
|
||||||
|
x2="20.758585"
|
||||||
|
y2="45.017357"
|
||||||
|
id="linearGradient2515"
|
||||||
|
xlink:href="#linearGradient3309"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient5128">
|
||||||
|
<stop
|
||||||
|
id="stop5130"
|
||||||
|
style="stop-color:#e5e5e5;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop5132"
|
||||||
|
style="stop-color:#ababab;stop-opacity:1"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="86.132919"
|
||||||
|
y1="105.105"
|
||||||
|
x2="84.63858"
|
||||||
|
y2="20.895"
|
||||||
|
id="linearGradient2512"
|
||||||
|
xlink:href="#linearGradient5128"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.3244803,0,0,0.3244803,3.2332655,2.5577454)" />
|
||||||
|
<radialGradient
|
||||||
|
cx="6.702713"
|
||||||
|
cy="73.615715"
|
||||||
|
r="7.228416"
|
||||||
|
fx="6.702713"
|
||||||
|
fy="73.615715"
|
||||||
|
id="radialGradient2538"
|
||||||
|
xlink:href="#linearGradient10691"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(2.2134617,0,0,0.4842001,1.1638028,-7.1447362)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient10691">
|
||||||
|
<stop
|
||||||
|
id="stop10693"
|
||||||
|
style="stop-color:#000000;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop10695"
|
||||||
|
style="stop-color:#000000;stop-opacity:0"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="32.036148"
|
||||||
|
y1="19"
|
||||||
|
x2="32.036148"
|
||||||
|
y2="47.012184"
|
||||||
|
id="linearGradient3326"
|
||||||
|
xlink:href="#linearGradient3309-8"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.93928017,0.34315123,-0.34315123,0.93928017,-1.7936946,-25.633934)" />
|
||||||
|
<linearGradient
|
||||||
|
x1="63.9995"
|
||||||
|
y1="3.1001"
|
||||||
|
x2="63.9995"
|
||||||
|
y2="122.8994"
|
||||||
|
id="linearGradient3309-8"
|
||||||
|
gradientUnits="userSpaceOnUse">
|
||||||
|
<stop
|
||||||
|
id="stop3311-4"
|
||||||
|
style="stop-color:#f6f6f6;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop3313-8"
|
||||||
|
style="stop-color:#d2d2d2;stop-opacity:1"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="25.922546"
|
||||||
|
y1="19"
|
||||||
|
x2="25.922546"
|
||||||
|
y2="47.044857"
|
||||||
|
id="linearGradient3328"
|
||||||
|
xlink:href="#linearGradient3397-1"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.93928017,0.34315123,-0.34315123,0.93928017,-1.7936946,-25.633934)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3397-1">
|
||||||
|
<stop
|
||||||
|
id="stop3399-0"
|
||||||
|
style="stop-color:#aaaaaa;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop3401-3"
|
||||||
|
style="stop-color:#8c8c8c;stop-opacity:1"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient5128-0">
|
||||||
|
<stop
|
||||||
|
id="stop5130-4"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop5132-4"
|
||||||
|
style="stop-color:#959595;stop-opacity:1"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="86.132919"
|
||||||
|
y1="105.105"
|
||||||
|
x2="84.63858"
|
||||||
|
y2="20.895"
|
||||||
|
id="linearGradient2868"
|
||||||
|
xlink:href="#linearGradient5128-0"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.2014014,0,0,0.2014015,3.1103045,3.311705)" />
|
||||||
|
<radialGradient
|
||||||
|
cx="6.702713"
|
||||||
|
cy="73.615715"
|
||||||
|
r="7.228416"
|
||||||
|
fx="6.702713"
|
||||||
|
fy="73.615715"
|
||||||
|
id="radialGradient2411"
|
||||||
|
xlink:href="#linearGradient10691-8"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(1.660115,0,0,0.3458573,0.8727276,-3.9605294)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient10691-8">
|
||||||
|
<stop
|
||||||
|
id="stop10693-6"
|
||||||
|
style="stop-color:#000000;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop10695-0"
|
||||||
|
style="stop-color:#000000;stop-opacity:0"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="34"
|
||||||
|
y1="1"
|
||||||
|
x2="34"
|
||||||
|
y2="23.00024"
|
||||||
|
id="linearGradient3218"
|
||||||
|
xlink:href="#linearGradient3309-4"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="translate(-24.5,0)" />
|
||||||
|
<linearGradient
|
||||||
|
x1="63.9995"
|
||||||
|
y1="3.1001"
|
||||||
|
x2="63.9995"
|
||||||
|
y2="122.8994"
|
||||||
|
id="linearGradient3309-4"
|
||||||
|
gradientUnits="userSpaceOnUse">
|
||||||
|
<stop
|
||||||
|
id="stop3311-8"
|
||||||
|
style="stop-color:#f6f6f6;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop3313-88"
|
||||||
|
style="stop-color:#d2d2d2;stop-opacity:1"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="40"
|
||||||
|
y1="1"
|
||||||
|
x2="40"
|
||||||
|
y2="23.019524"
|
||||||
|
id="linearGradient3228"
|
||||||
|
xlink:href="#linearGradient3397-9"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="translate(-24.5,0)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3397-9">
|
||||||
|
<stop
|
||||||
|
id="stop3399-7"
|
||||||
|
style="stop-color:#aaaaaa;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop3401-7"
|
||||||
|
style="stop-color:#8c8c8c;stop-opacity:1"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="86.132919"
|
||||||
|
y1="105.105"
|
||||||
|
x2="84.63858"
|
||||||
|
y2="20.895"
|
||||||
|
id="linearGradient3241"
|
||||||
|
xlink:href="#linearGradient5128-6"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.1562313,0,0,0.1562313,2.0012016,2.1574324)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient5128-6">
|
||||||
|
<stop
|
||||||
|
id="stop5130-43"
|
||||||
|
style="stop-color:#eeeeee;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop5132-0"
|
||||||
|
style="stop-color:#a2a2a2;stop-opacity:1"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="25"
|
||||||
|
y1="0"
|
||||||
|
x2="25"
|
||||||
|
y2="16.000105"
|
||||||
|
id="linearGradient3262"
|
||||||
|
xlink:href="#linearGradient3309-6"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="translate(-17.058189,0)" />
|
||||||
|
<linearGradient
|
||||||
|
x1="63.9995"
|
||||||
|
y1="3.1001"
|
||||||
|
x2="63.9995"
|
||||||
|
y2="122.8994"
|
||||||
|
id="linearGradient3309-6"
|
||||||
|
gradientUnits="userSpaceOnUse">
|
||||||
|
<stop
|
||||||
|
id="stop3311-2"
|
||||||
|
style="stop-color:#f6f6f6;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop3313-9"
|
||||||
|
style="stop-color:#cccccc;stop-opacity:1"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="21"
|
||||||
|
y1="0"
|
||||||
|
x2="21"
|
||||||
|
y2="16.004715"
|
||||||
|
id="linearGradient3264"
|
||||||
|
xlink:href="#linearGradient3397-90"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="translate(-17.058189,0)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3397-90">
|
||||||
|
<stop
|
||||||
|
id="stop3399-8"
|
||||||
|
style="stop-color:#aaaaaa;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop3401-1"
|
||||||
|
style="stop-color:#8c8c8c;stop-opacity:1"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="86.132919"
|
||||||
|
y1="105.105"
|
||||||
|
x2="84.63858"
|
||||||
|
y2="20.895"
|
||||||
|
id="linearGradient3260"
|
||||||
|
xlink:href="#linearGradient5128-3"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.09614231,0,0,0.09614231,1.8468935,1.9430362)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient5128-3">
|
||||||
|
<stop
|
||||||
|
id="stop5130-1"
|
||||||
|
style="stop-color:#e5e5e5;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop5132-1"
|
||||||
|
style="stop-color:#ababab;stop-opacity:1"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g
|
||||||
|
transform="translate(15.999999,12)"
|
||||||
|
id="layer1">
|
||||||
|
<path
|
||||||
|
d="m 18.636572,2.5905216 c -0.703275,-0.2569307 -1.495689,0.08705 -1.752619,0.7903248 l -0.600515,1.6437399 c -0.499176,-0.013219 -0.993955,0.00248 -1.484533,0.056512 L 14.072373,3.5181351 C 13.756758,2.8391668 12.960838,2.5483897 12.28187,2.864003 L 8.3651471,4.6602954 C 7.6861782,4.9759083 7.3954033,5.7718319 7.7110151,6.4507982 l 0.726532,1.5629636 C 8.0724464,8.359396 7.744193,8.7441155 7.4266456,9.141602 L 5.8122578,8.5518108 C 5.1089821,8.2948801 4.3165666,8.6388602 4.0596381,9.3421356 L 2.5797984,13.392781 c -0.2569313,0.703275 0.1271272,1.477063 0.8304007,1.733991 l 1.6143878,0.589791 c -0.013469,0.508577 -0.010523,1.014295 0.045789,1.513885 l -1.5629633,0.726533 c -0.6789688,0.315613 -0.9697472,1.111534 -0.654132,1.790502 l 1.8363684,3.898094 c 0.3156123,0.678968 1.1115366,0.969744 1.7905029,0.654132 l 1.5629636,-0.726532 c 0.3402133,0.357549 0.7083491,0.688501 1.0984877,1.000178 l -0.6005147,1.64374 c -0.2569313,0.703275 0.1271291,1.477064 0.8304008,1.733991 l 4.0212927,1.469116 c 0.703276,0.256931 1.466338,-0.09777 1.723267,-0.801048 l 0.600515,-1.64374 c 0.508577,0.01347 1.014295,0.01052 1.513885,-0.04579 l 0.726532,1.562963 c 0.315614,0.678968 1.111534,0.969745 1.790502,0.654132 l 3.916723,-1.796292 c 0.678969,-0.315613 0.969742,-1.111538 0.654132,-1.790503 l -0.745161,-1.603039 c 0.357549,-0.340214 0.6885,-0.708349 1.000178,-1.098488 l 1.64374,0.600515 c 0.703276,0.25693 1.466338,-0.09778 1.723267,-0.801049 l 1.47984,-4.050645 c 0.256931,-0.703275 -0.09778,-1.466339 -0.801048,-1.723268 l -1.64374,-0.600514 c 0.01322,-0.499176 -0.0025,-0.993955 -0.05651,-1.484533 l 1.60304,-0.745162 C 29.20091,13.73813 29.491686,12.942208 29.176073,12.26324 L 27.339704,8.365146 C 27.024092,7.6861784 26.228168,7.3954 25.549202,7.711014 L 23.986239,8.4375465 C 23.640605,8.0724458 23.255886,7.7441924 22.858399,7.4266449 L 23.458914,5.782905 C 23.715845,5.0796306 23.361136,4.3165668 22.657865,4.0596378 L 18.636572,2.5905216 z M 17.20103,12.71252 c 1.81469,0.662968 2.74942,2.67382 2.086452,4.48851 -0.662969,1.814689 -2.673821,2.749419 -4.48851,2.086451 -1.814691,-0.662969 -2.74942,-2.673821 -2.086452,-4.48851 0.662968,-1.81469 2.673821,-2.74942 4.48851,-2.086451 z"
|
||||||
|
id="rect2576"
|
||||||
|
style="fill:url(#linearGradient3326);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3328);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible;enable-background:accumulate" />
|
||||||
|
<path
|
||||||
|
d="m 16.000001,7.9999996 c -4.411273,0 -7.9999985,3.5887274 -7.9999985,8.0000004 0,4.411274 3.5887255,8 7.9999985,8 C 20.411274,24 24,20.411274 24,16 24,11.588727 20.411274,7.9999996 16.000001,7.9999996 z m 0,3.6923094 c 2.377844,0 4.307693,1.929846 4.307693,4.307691 0,2.377847 -1.929849,4.307693 -4.307693,4.307693 -2.377846,0 -4.307691,-1.929846 -4.307691,-4.307693 0,-2.377845 1.929845,-4.307691 4.307691,-4.307691 z"
|
||||||
|
id="path3315"
|
||||||
|
style="opacity:0.05;fill:#000000;fill-opacity:1;stroke:none" />
|
||||||
|
<path
|
||||||
|
d="m 16.000001,7.6206906 c -4.620353,0 -8.3793085,3.7589574 -8.3793085,8.3793084 0,4.620352 3.7589555,8.37931 8.3793085,8.37931 4.620353,0 8.379309,-3.758958 8.379309,-8.37931 0,-4.620351 -3.758956,-8.3793084 -8.379309,-8.3793084 z"
|
||||||
|
id="path28"
|
||||||
|
style="fill:none;stroke:url(#linearGradient2868);stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="translate(2,-1)"
|
||||||
|
id="layer1-3">
|
||||||
|
<g
|
||||||
|
id="g2486">
|
||||||
|
<path
|
||||||
|
d="M 10.1875,1.5 C 9.799134,1.5 9.5,1.7991339 9.5,2.1875 l 0,1.6875 C 8.988333,4.0322247 8.496816,4.2537684 8.03125,4.5 L 6.84375,3.3125 c -0.274616,-0.2746162 -0.725384,-0.2746162 -1,0 L 3.3125,5.84375 c -0.274616,0.2746162 -0.274616,0.7253836 0,1 L 4.5,8.03125 C 4.253769,8.4968155 4.032225,8.9883329 3.875,9.5 l -1.6875,0 C 1.799134,9.5 1.5,9.7991344 1.5,10.1875 l 0,3.625 C 1.5,14.200866 1.799134,14.5 2.1875,14.5 l 1.6875,0 c 0.157225,0.511667 0.378769,1.003185 0.625,1.46875 l -1.1875,1.1875 c -0.274616,0.274616 -0.274616,0.725384 0,1 l 2.53125,2.53125 c 0.274616,0.274616 0.725384,0.274616 1,0 L 8.03125,19.5 C 8.496816,19.746232 8.988333,19.967775 9.5,20.125 l 0,1.6875 c 0,0.388366 0.299135,0.6875 0.6875,0.6875 l 3.625,0 c 0.388366,0 0.6875,-0.299134 0.6875,-0.6875 l 0,-1.6875 c 0.511667,-0.157225 1.003185,-0.378768 1.46875,-0.625 l 1.1875,1.1875 c 0.274616,0.274616 0.725384,0.274616 1,0 l 2.53125,-2.53125 c 0.274616,-0.274616 0.274616,-0.725384 0,-1 L 19.5,15.96875 C 19.746232,15.503185 19.967775,15.011667 20.125,14.5 l 1.6875,0 c 0.388366,0 0.6875,-0.299134 0.6875,-0.6875 l 0,-3.625 C 22.5,9.7991341 22.200866,9.5 21.8125,9.5 l -1.6875,0 C 19.967775,8.9883329 19.746232,8.4968155 19.5,8.03125 l 1.1875,-1.1875 c 0.274616,-0.2746162 0.274616,-0.7253837 0,-1 L 18.15625,3.3125 c -0.274616,-0.2746162 -0.725384,-0.2746162 -1,0 L 15.96875,4.5 C 15.503185,4.2537684 15.011667,4.0322247 14.5,3.875 l 0,-1.6875 C 14.5,1.7991341 14.200866,1.5 13.8125,1.5 l -3.625,0 z M 12,9 c 1.656,0 3,1.344 3,3 0,1.656 -1.344,3 -3,3 -1.656,0 -3,-1.344 -3,-3 0,-1.656 1.344,-3 3,-3 z"
|
||||||
|
id="rect2426"
|
||||||
|
style="fill:url(#linearGradient3218);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3228);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible;enable-background:accumulate" />
|
||||||
|
<path
|
||||||
|
d="m 12,6 c -3.3084557,-2e-7 -5.9999999,2.6915446 -5.9999999,6 0,3.308455 2.6915442,6 5.9999999,6 3.308455,-1e-6 6,-2.691545 6,-6 0,-3.3084554 -2.691545,-6 -6,-6 z m 0,2.7692308 c 1.783385,0 3.230769,1.4473842 3.230769,3.2307692 0,1.783385 -1.447384,3.230769 -3.230769,3.230769 -1.783385,0 -3.2307692,-1.447384 -3.2307692,-3.230769 0,-1.783385 1.4473842,-3.2307692 3.2307692,-3.2307692 z"
|
||||||
|
id="path3315-9"
|
||||||
|
style="opacity:0.05;fill:#000000;fill-opacity:1;stroke:none" />
|
||||||
|
<path
|
||||||
|
d="m 11.999999,5.4999995 c -3.5840997,0 -6.4999994,2.9158997 -6.4999994,6.4999995 C 5.4999996,15.5841 8.4158993,18.5 11.999999,18.5 15.584101,18.5 18.5,15.5841 18.5,11.999999 18.5,8.4158992 15.584101,5.4999995 11.999999,5.4999995 z"
|
||||||
|
id="path28-2"
|
||||||
|
style="fill:none;stroke:url(#linearGradient3241);stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="translate(3,29)"
|
||||||
|
id="layer1-0">
|
||||||
|
<g
|
||||||
|
id="g2479">
|
||||||
|
<path
|
||||||
|
d="M 6.9375,0.5 C 6.6890831,0.5 6.5,0.68908218 6.5,0.9375 l 0,1.25 C 5.9460971,2.3297005 5.448836,2.5593783 4.96875,2.84375 L 4.0625,1.9375 c -0.1756569,-0.1756579 -0.449342,-0.1756579 -0.625,0 l -1.5,1.5 c -0.175657,0.1756579 -0.175657,0.4493421 0,0.625 L 2.84375,4.96875 C 2.5593789,5.4488356 2.329701,5.9460968 2.1875,6.5 l -1.25,0 C 0.68908301,6.5 0.5,6.6890821 0.5,6.9375 l 0,2.125 c 1e-8,0.2484178 0.189083,0.4375 0.4375,0.4375 l 1.25,0 c 0.1422009,0.553903 0.371879,1.051164 0.65625,1.53125 L 1.9375,11.9375 c -0.175657,0.175658 -0.175657,0.449342 0,0.625 l 1.5,1.5 c 0.1756579,0.175658 0.449342,0.175658 0.625,0 L 4.96875,13.15625 C 5.4488361,13.440622 5.946097,13.6703 6.5,13.8125 l 0,1.25 c 1e-7,0.248418 0.189083,0.4375 0.4375,0.4375 l 2.125,0 C 9.3109176,15.5 9.5,15.310918 9.5,15.0625 l 0,-1.25 c 0.553903,-0.1422 1.051164,-0.371878 1.53125,-0.65625 l 0.90625,0.90625 c 0.175658,0.175658 0.449342,0.175658 0.625,0 l 1.5,-1.5 c 0.175658,-0.175658 0.175658,-0.449342 0,-0.625 L 13.15625,11.03125 C 13.440622,10.551164 13.6703,10.053903 13.8125,9.5 l 1.25,0 C 15.310918,9.5 15.5,9.3109174 15.5,9.0625 l 0,-2.125 C 15.5,6.6890822 15.310917,6.5 15.0625,6.5 l -1.25,0 C 13.6703,5.9460968 13.440622,5.4488356 13.15625,4.96875 L 14.0625,4.0625 c 0.175658,-0.1756579 0.175658,-0.449342 0,-0.625 l -1.5,-1.5 c -0.175658,-0.1756579 -0.449342,-0.1756579 -0.625,0 L 11.03125,2.84375 C 10.551164,2.5593783 10.053903,2.3297005 9.5,2.1875 l 0,-1.25 C 9.4999996,0.68908218 9.310918,0.5 9.0625,0.5 l -2.125,0 z M 8,6 c 1.104,0 2,0.896 2,2 0,1.104 -0.896,2 -2,2 C 6.896,10 6,9.104 6,8 6,6.896 6.896,6 8,6 z"
|
||||||
|
id="path2426"
|
||||||
|
style="fill:url(#linearGradient3262);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3264);stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible;enable-background:accumulate" />
|
||||||
|
<path
|
||||||
|
d="M 8,3.465116 C 5.4994229,3.465116 3.4651163,5.499423 3.4651163,8 3.4651163,10.500577 5.4994229,12.534884 8,12.534884 10.500576,12.534883 12.534884,10.500577 12.534884,8 12.534884,5.499423 10.500576,3.465116 8,3.465116 z M 8,5.55814 c 1.347907,0 2.44186,1.093953 2.44186,2.44186 0,1.347907 -1.093953,2.44186 -2.44186,2.44186 C 6.652093,10.44186 5.5581395,9.347907 5.5581395,8 5.5581395,6.652093 6.652093,5.55814 8,5.55814 z"
|
||||||
|
id="path3315-3"
|
||||||
|
style="opacity:0.05;fill:#000000;fill-opacity:1;stroke:none" />
|
||||||
|
<path
|
||||||
|
d="M 8.0000001,4 C 5.7943997,4 3.9999999,5.7944001 3.9999999,8.0000008 3.9999999,10.2056 5.7943997,12 8.0000001,12 10.2056,12 12,10.2056 12,8.0000008 12,5.7944001 10.2056,4 8.0000001,4 z"
|
||||||
|
id="path28-4"
|
||||||
|
style="fill:none;stroke:url(#linearGradient3260);stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 18 KiB |
131
artwork/GCS Icons/icon-info.svg
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
<svg
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
version="1.0"
|
||||||
|
width="48"
|
||||||
|
height="48"
|
||||||
|
id="svg3581">
|
||||||
|
<defs
|
||||||
|
id="defs3583">
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient8838">
|
||||||
|
<stop
|
||||||
|
id="stop8840"
|
||||||
|
style="stop-color:#000000;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop8842"
|
||||||
|
style="stop-color:#000000;stop-opacity:0"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
cx="62.625"
|
||||||
|
cy="4.625"
|
||||||
|
r="10.625"
|
||||||
|
fx="62.625"
|
||||||
|
fy="4.625"
|
||||||
|
id="radialGradient3534"
|
||||||
|
xlink:href="#linearGradient8838"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(2.1647059,0,0,0.7529402,-111.56471,36.517647)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient2490-182-124">
|
||||||
|
<stop
|
||||||
|
id="stop2788"
|
||||||
|
style="stop-color:#1f4b6a;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop2790"
|
||||||
|
style="stop-color:#4083c2;stop-opacity:1"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="18.379412"
|
||||||
|
y1="44.980297"
|
||||||
|
x2="18.379412"
|
||||||
|
y2="3.0816143"
|
||||||
|
id="linearGradient3531"
|
||||||
|
xlink:href="#linearGradient2490-182-124"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.9584364,0,0,0.9584366,0.9975246,1.9975253)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3242-187-536">
|
||||||
|
<stop
|
||||||
|
id="stop2778"
|
||||||
|
style="stop-color:#8badea;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop2780"
|
||||||
|
style="stop-color:#6396cd;stop-opacity:1"
|
||||||
|
offset="0.26238" />
|
||||||
|
<stop
|
||||||
|
id="stop2782"
|
||||||
|
style="stop-color:#3b7caf;stop-opacity:1"
|
||||||
|
offset="0.66093999" />
|
||||||
|
<stop
|
||||||
|
id="stop2784"
|
||||||
|
style="stop-color:#194c70;stop-opacity:1"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
cx="23.895569"
|
||||||
|
cy="3.9900031"
|
||||||
|
r="20.397499"
|
||||||
|
fx="23.895569"
|
||||||
|
fy="3.9900031"
|
||||||
|
id="radialGradient3529"
|
||||||
|
xlink:href="#linearGradient3242-187-536"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0,2.2874593,-3.0194057,0,36.047437,-50.630156)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient4873">
|
||||||
|
<stop
|
||||||
|
id="stop4875"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop4877"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:0"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="63.397362"
|
||||||
|
y1="-12.489107"
|
||||||
|
x2="63.397362"
|
||||||
|
y2="5.4675598"
|
||||||
|
id="linearGradient3526"
|
||||||
|
xlink:href="#linearGradient4873"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(2.1153735,0,0,2.1153253,-107.57709,32.426559)" />
|
||||||
|
</defs>
|
||||||
|
<g
|
||||||
|
id="layer1">
|
||||||
|
<path
|
||||||
|
d="M 46.999997,40 C 46.999997,44.418278 36.702545,48 23.999997,48 C 11.297449,48 0.9999968,44.418278 0.9999968,40 C 0.9999968,35.581722 11.297449,32 23.999997,32 C 36.702545,32 46.999997,35.581722 46.999997,40 L 46.999997,40 z"
|
||||||
|
id="path8836"
|
||||||
|
style="opacity:0.3;fill:url(#radialGradient3534);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
|
||||||
|
<path
|
||||||
|
d="M 24.000002,5.5018088 C 13.241573,5.5018088 4.5018088,14.24157 4.5018088,25 C 4.5018088,35.75843 13.241573,44.498195 24.000002,44.498192 C 34.758427,44.498192 43.498201,35.75843 43.498191,25 C 43.498191,14.24157 34.758427,5.5018088 24.000002,5.5018088 z"
|
||||||
|
id="path2555"
|
||||||
|
style="fill:url(#radialGradient3529);fill-opacity:1;stroke:url(#linearGradient3531);stroke-width:1.003654;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
d="M 42.500002,24.999344 C 42.500002,35.216942 34.21666,43.5 24.000235,43.5 C 13.782875,43.5 5.5000003,35.216848 5.5000003,24.999344 C 5.5000003,14.782219 13.782875,6.5000001 24.000235,6.5000001 C 34.21666,6.5000001 42.500002,14.782219 42.500002,24.999344 L 42.500002,24.999344 z"
|
||||||
|
id="path8655"
|
||||||
|
style="opacity:0.4;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3526);stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<g
|
||||||
|
transform="translate(-2.507855,0)"
|
||||||
|
id="g3538">
|
||||||
|
<path
|
||||||
|
d="M 20.507855,24.213243 C 20.766006,24.915016 21.056573,25.483856 21.675512,24.706045 C 22.442859,24.249493 25.013952,22.248288 24.756683,24.208513 C 23.93342,27.835795 22.931327,31.424931 22.165113,35.063385 C 21.363928,37.055603 23.183263,38.857649 25.082782,37.562099 C 27.101847,36.729758 28.839248,35.374018 30.614199,34.130331 C 30.372019,33.536398 30.210602,32.683218 29.541434,33.459946 C 28.662781,33.858755 26.743708,35.738993 26.387179,34.188218 C 27.125239,30.260529 28.492698,26.478234 29.366801,22.58186 C 30.171202,20.790317 28.857456,18.526637 26.890929,20.008625 C 24.534979,21.034718 22.564787,22.710882 20.507855,24.213243 z M 29.251545,11.003077 C 26.847779,10.875511 25.591007,14.750449 27.87529,15.810806 C 29.728512,16.57083 31.746339,14.670114 31.293604,12.770861 C 31.153105,11.781904 30.26521,10.96981 29.251546,11.003077 L 29.251545,11.003077 z"
|
||||||
|
id="text3482"
|
||||||
|
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;opacity:0.2;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:URW Palladio L;-inkscape-font-specification:URW Palladio L Bold" />
|
||||||
|
<path
|
||||||
|
d="M 20.507855,25.213243 C 20.766006,25.915016 21.056573,26.483856 21.675512,25.706045 C 22.442859,25.249493 25.013952,23.248288 24.756683,25.208513 C 23.93342,28.835795 22.931327,32.424931 22.165113,36.063385 C 21.363928,38.055603 23.183263,39.857649 25.082782,38.562099 C 27.101847,37.729758 28.839248,36.374018 30.614199,35.130331 C 30.372019,34.536398 30.210602,33.683218 29.541434,34.459946 C 28.662781,34.858755 26.743708,36.738993 26.387179,35.188218 C 27.125239,31.260529 28.492698,27.478234 29.366801,23.58186 C 30.171202,21.790317 28.857456,19.526637 26.890929,21.008625 C 24.534979,22.034718 22.564787,23.710882 20.507855,25.213243 z M 29.251545,12.003077 C 26.847779,11.875511 25.591007,15.750449 27.87529,16.810806 C 29.728512,17.57083 31.746339,15.670114 31.293604,13.770861 C 31.153105,12.781904 30.26521,11.96981 29.251546,12.003077 L 29.251545,12.003077 z"
|
||||||
|
id="path3536"
|
||||||
|
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:URW Palladio L;-inkscape-font-specification:URW Palladio L Bold" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 7.2 KiB |
230
artwork/GCS Icons/icon-refresh.svg
Normal file
@ -0,0 +1,230 @@
|
|||||||
|
<?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"
|
||||||
|
version="1.1"
|
||||||
|
width="48"
|
||||||
|
height="48"
|
||||||
|
id="svg2474">
|
||||||
|
<metadata
|
||||||
|
id="metadata33">
|
||||||
|
<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>
|
||||||
|
<defs
|
||||||
|
id="defs2476">
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3533">
|
||||||
|
<stop
|
||||||
|
id="stop3535"
|
||||||
|
style="stop-color:#93b9dd;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop3545"
|
||||||
|
style="stop-color:#6396cd;stop-opacity:1"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3266">
|
||||||
|
<stop
|
||||||
|
id="stop3268"
|
||||||
|
style="stop-color:#387ab8;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop3270"
|
||||||
|
style="stop-color:#387ab8;stop-opacity:0"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3276">
|
||||||
|
<stop
|
||||||
|
id="stop3278"
|
||||||
|
style="stop-color:#6396cd;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop3280"
|
||||||
|
style="stop-color:#83acd5;stop-opacity:0"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="108.5625"
|
||||||
|
y1="102.78125"
|
||||||
|
x2="108.5625"
|
||||||
|
y2="71.78125"
|
||||||
|
id="linearGradient5497"
|
||||||
|
xlink:href="#linearGradient5491"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="translate(-95.99949,-49.00038)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient5491">
|
||||||
|
<stop
|
||||||
|
id="stop5493"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop5495"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:0"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="102.5625"
|
||||||
|
y1="49.78125"
|
||||||
|
x2="103.5625"
|
||||||
|
y2="72.78125"
|
||||||
|
id="linearGradient5480"
|
||||||
|
xlink:href="#linearGradient5474"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="translate(-95.99949,-49.00038)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient5474">
|
||||||
|
<stop
|
||||||
|
id="stop5476"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop5478"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:0"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="118.47968"
|
||||||
|
y1="55.060318"
|
||||||
|
x2="118.47968"
|
||||||
|
y2="91.941895"
|
||||||
|
id="linearGradient4593-5-8-1-5-2"
|
||||||
|
xlink:href="#linearGradient3533"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="translate(-100.99949,-49.00038)" />
|
||||||
|
<linearGradient
|
||||||
|
x1="34.980953"
|
||||||
|
y1="53.837799"
|
||||||
|
x2="35.996098"
|
||||||
|
y2="83.57618"
|
||||||
|
id="linearGradient4593-5-8-1-5-2-3"
|
||||||
|
xlink:href="#linearGradient3533"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="translate(-5,0)" />
|
||||||
|
<radialGradient
|
||||||
|
cx="33.875"
|
||||||
|
cy="197.29688"
|
||||||
|
r="4.84375"
|
||||||
|
fx="33.875"
|
||||||
|
fy="197.29688"
|
||||||
|
id="radialGradient5147-5"
|
||||||
|
xlink:href="#linearGradient6462-6-8-548-9-2-7"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(1,0,0,0.33870968,0,130.47051)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient6462-6-8-548-9-2-7">
|
||||||
|
<stop
|
||||||
|
id="stop6464-5-9-94-5-4-4"
|
||||||
|
style="stop-color:#000000;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop6466-3-6-1-7-2-8"
|
||||||
|
style="stop-color:#000000;stop-opacity:0"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient6462-6-8-548-9-5">
|
||||||
|
<stop
|
||||||
|
id="stop6464-5-9-94-5-8"
|
||||||
|
style="stop-color:#000000;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop6466-3-6-1-7-5"
|
||||||
|
style="stop-color:#000000;stop-opacity:0"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
cx="33.875"
|
||||||
|
cy="197.29688"
|
||||||
|
r="4.84375"
|
||||||
|
fx="33.875"
|
||||||
|
fy="197.29688"
|
||||||
|
id="radialGradient6081"
|
||||||
|
xlink:href="#linearGradient6462-6-8-548-9-5"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(1,0,0,0.33870968,0,130.47051)" />
|
||||||
|
<linearGradient
|
||||||
|
x1="42.030777"
|
||||||
|
y1="84.719109"
|
||||||
|
x2="53.808601"
|
||||||
|
y2="73.263672"
|
||||||
|
id="linearGradient4008"
|
||||||
|
xlink:href="#linearGradient3276"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="translate(-5,0)" />
|
||||||
|
<linearGradient
|
||||||
|
x1="39.843277"
|
||||||
|
y1="83.781609"
|
||||||
|
x2="50.683601"
|
||||||
|
y2="75.138672"
|
||||||
|
id="linearGradient4018"
|
||||||
|
xlink:href="#linearGradient3266"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
</defs>
|
||||||
|
<path
|
||||||
|
d="m 38.71875,197.29687 a 4.84375,1.640625 0 1 1 -9.6875,0 4.84375,1.640625 0 1 1 9.6875,0 z"
|
||||||
|
transform="matrix(3.3032251,0,0,1.6761866,-89.458749,-288.73764)"
|
||||||
|
id="path6460-6-4-4-3-3"
|
||||||
|
style="opacity:0.2;color:#000000;fill:url(#radialGradient5147-5);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
|
||||||
|
<path
|
||||||
|
d="M 46.405989,78.610714 A 13.125,13.125 0 0 1 33.62701,84.097034"
|
||||||
|
transform="matrix(1.0666665,0,0,1.0666665,-14.49949,-51.367037)"
|
||||||
|
id="path4010"
|
||||||
|
style="color:#000000;fill:none;stroke:url(#linearGradient4018);stroke-width:8.43750095;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
|
||||||
|
<path
|
||||||
|
d="m 38.71875,197.29687 a 4.84375,1.640625 0 1 1 -9.6875,0 4.84375,1.640625 0 1 1 9.6875,0 z"
|
||||||
|
transform="matrix(4.541935,0,0,1.9809503,-131.42005,-348.86656)"
|
||||||
|
id="path6460-6-4-4-4"
|
||||||
|
style="opacity:0.1;color:#000000;fill:url(#radialGradient6081);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
|
||||||
|
<path
|
||||||
|
d="M 35.542313,84.24974 A 13.125,13.125 0 1 1 47.171703,64.884866"
|
||||||
|
transform="matrix(1.0666665,0,0,1.0666665,-14.49949,-51.367037)"
|
||||||
|
id="path4788-6"
|
||||||
|
style="color:#000000;fill:none;stroke:#387ab8;stroke-width:8.43750095;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
|
||||||
|
<path
|
||||||
|
d="m 38.50051,9.4996196 0,11.0000004 -11,0"
|
||||||
|
id="path4847"
|
||||||
|
style="color:#000000;fill:none;stroke:#387ab8;stroke-width:7;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
|
||||||
|
<path
|
||||||
|
d="m 46.386659,78.638476 a 13.125,13.125 0 0 1 -13.412517,5.34104"
|
||||||
|
transform="matrix(1.0666665,0,0,1.0666665,-14.49949,-51.367037)"
|
||||||
|
id="path4006"
|
||||||
|
style="color:#000000;fill:none;stroke:url(#linearGradient4008);stroke-width:6.56250095;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
|
||||||
|
<path
|
||||||
|
d="m 37.320778,84.13999 a 13.125,13.125 0 1 1 9.33779,-20.123155"
|
||||||
|
transform="matrix(1.0666665,0,0,1.0666665,-14.49949,-51.367037)"
|
||||||
|
id="path4788"
|
||||||
|
style="color:#000000;fill:none;stroke:url(#linearGradient4593-5-8-1-5-2-3);stroke-width:6.56250095;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
|
||||||
|
<path
|
||||||
|
d="m 38.50051,9.4996196 0,11.0000004 -11,0"
|
||||||
|
id="path4847-1"
|
||||||
|
style="color:#000000;fill:none;stroke:url(#linearGradient4593-5-8-1-5-2);stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
|
||||||
|
<path
|
||||||
|
d="m 29.740794,33.593555 c -3.674085,2.533277 -8.663315,2.652831 -12.552784,-0.06269 -5.010358,-3.498088 -6.216831,-10.333397 -2.718751,-15.34375 3.498091,-5.010353 10.3334,-6.216833 15.343751,-2.71875 1.16116,0.810688 2.10377,1.843969 2.875,3.03125 l -5.1875,0 c -1.056625,-0.01494 -2.028484,0.943269 -2.028484,2 0,1.056731 0.971859,2.014943 2.028484,2 l 11,0 c 1.062499,0.28125 2.062499,-0.71875 2,-2 l 0,-11.0000004 c 0.01671,-1.0680358 -0.963214,-2.0479629 -2.03125,-2.0312505 -0.06245,-0.00293 -0.125046,-0.00293 -0.1875,0 -0.982752,0.107995 -1.802514,1.0428108 -1.78125,2.0312505 l 0,4.0625004 c -0.9534,-1.127853 -2.06667,-2.152011 -3.28125,-3 l -0.09375,-0.0625 c -2.85203,-1.9610889 -6.0733,-2.9220479 -9.312501,-2.9687509 -5.46224,-0.07875 -10.90353,2.4568065 -14.2500005,7.2500009 -5.354351,7.669111 -3.450361,18.3019 4.2187505,23.65625 6.255407,4.367344 14.482569,3.905673 20.208772,-0.574695"
|
||||||
|
id="path4788-2"
|
||||||
|
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.23999999;color:#000000;fill:none;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" />
|
||||||
|
<path
|
||||||
|
d="m 36.50052,13.562118 c -0.9534,-1.127853 -2.06667,-2.152011 -3.28125,-3 l -0.0937,-0.0625 c -2.85203,-1.9610889 -6.0733,-2.9220479 -9.312501,-2.9687509 -5.46224,-0.07875 -10.90354,2.4568065 -14.2500105,7.2500009 -5.354351,7.669111 -3.450361,18.3019 4.2187505,23.65625"
|
||||||
|
id="path4788-2-3"
|
||||||
|
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.3;color:#000000;fill:none;stroke:url(#linearGradient5480);stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" />
|
||||||
|
<path
|
||||||
|
d="M 32.53183,30.81212 C 29.03374,35.822473 22.198429,37.028952 17.18808,33.53087 12.177699,30.032787 10.971229,23.197473 14.469309,18.18712 17.96742,13.176767 24.802729,11.970287 29.81308,15.46837"
|
||||||
|
id="path4788-2-3-4"
|
||||||
|
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.3;color:#000000;fill:none;stroke:url(#linearGradient5497);stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 12 KiB |
130
artwork/GCS Icons/icon-stop.svg
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
version="1.0"
|
||||||
|
width="48"
|
||||||
|
height="48"
|
||||||
|
id="svg3258">
|
||||||
|
<defs
|
||||||
|
id="defs3260">
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient8838">
|
||||||
|
<stop
|
||||||
|
id="stop8840"
|
||||||
|
style="stop-color:black;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop8842"
|
||||||
|
style="stop-color:black;stop-opacity:0"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
cx="62.625"
|
||||||
|
cy="4.625"
|
||||||
|
r="10.625"
|
||||||
|
fx="62.625"
|
||||||
|
fy="4.625"
|
||||||
|
id="radialGradient3254"
|
||||||
|
xlink:href="#linearGradient8838"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(2.1647059,0,0,0.7529402,-111.56471,36.517647)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient2490">
|
||||||
|
<stop
|
||||||
|
id="stop2492"
|
||||||
|
style="stop-color:#791235;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop2494"
|
||||||
|
style="stop-color:#dd3b27;stop-opacity:1"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="18.379412"
|
||||||
|
y1="44.980297"
|
||||||
|
x2="18.379412"
|
||||||
|
y2="3.0816143"
|
||||||
|
id="linearGradient3251"
|
||||||
|
xlink:href="#linearGradient2490"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.9584364,0,0,0.9584366,0.9975246,1.9975253)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3242">
|
||||||
|
<stop
|
||||||
|
id="stop3244"
|
||||||
|
style="stop-color:#f8b17e;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop3246"
|
||||||
|
style="stop-color:#e35d4f;stop-opacity:1"
|
||||||
|
offset="0.26238" />
|
||||||
|
<stop
|
||||||
|
id="stop3248"
|
||||||
|
style="stop-color:#c6262e;stop-opacity:1"
|
||||||
|
offset="0.66093999" />
|
||||||
|
<stop
|
||||||
|
id="stop3250"
|
||||||
|
style="stop-color:#690b54;stop-opacity:1"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
cx="23.895569"
|
||||||
|
cy="3.9900031"
|
||||||
|
r="20.397499"
|
||||||
|
fx="23.895569"
|
||||||
|
fy="3.9900031"
|
||||||
|
id="radialGradient3249"
|
||||||
|
xlink:href="#linearGradient3242"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0,2.2874593,-3.0194057,0,36.047437,-50.630156)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient4873">
|
||||||
|
<stop
|
||||||
|
id="stop4875"
|
||||||
|
style="stop-color:white;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop4877"
|
||||||
|
style="stop-color:white;stop-opacity:0"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="63.397362"
|
||||||
|
y1="-12.489107"
|
||||||
|
x2="63.397362"
|
||||||
|
y2="5.4675598"
|
||||||
|
id="linearGradient3246"
|
||||||
|
xlink:href="#linearGradient4873"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(2.1153735,0,0,2.1153253,-107.57709,32.426559)" />
|
||||||
|
</defs>
|
||||||
|
<g
|
||||||
|
id="layer1">
|
||||||
|
<path
|
||||||
|
d="m 46.999997,40 c 0,4.418278 -10.297452,8 -23,8 -12.702548,0 -23.0000002,-3.581722 -23.0000002,-8 0,-4.418278 10.2974522,-8 23.0000002,-8 12.702548,0 23,3.581722 23,8 l 0,0 z"
|
||||||
|
id="path8836"
|
||||||
|
style="opacity:0.3;fill:url(#radialGradient3254);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible" />
|
||||||
|
<path
|
||||||
|
d="M 24.000002,5.5018088 C 13.241573,5.5018088 4.5018088,14.24157 4.5018088,25 c 0,10.75843 8.7397642,19.498195 19.4981932,19.498192 10.758425,0 19.498199,-8.739762 19.498189,-19.498192 0,-10.75843 -8.739764,-19.4981912 -19.498189,-19.4981912 z"
|
||||||
|
id="path2555"
|
||||||
|
style="fill:url(#radialGradient3249);fill-opacity:1;stroke:url(#linearGradient3251);stroke-width:1.003654;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
||||||
|
<path
|
||||||
|
d="M 42.500002,24.999344 C 42.500002,35.216942 34.21666,43.5 24.000235,43.5 13.782875,43.5 5.5000003,35.216848 5.5000003,24.999344 c 0,-10.217125 8.2828747,-18.4993439 18.5002347,-18.4993439 10.216425,0 18.499767,8.2822189 18.499767,18.4993439 l 0,0 z"
|
||||||
|
id="path8655"
|
||||||
|
style="opacity:0.4;fill:none;stroke:url(#linearGradient3246);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
<path
|
||||||
|
d="m -33.28125,16.3125 -2.96875,2.96875 6.125,6.09375 c 0.188168,0.19054 0.188168,0.49696 0,0.6875 l -6.125,6.09375 2.96875,2.96875 6.09375,-6.09375 c 0.19054,-0.188168 0.49696,-0.188168 0.6875,0 l 6.09375,6.09375 2.96875,-2.96875 -6.09375,-6.09375 c -0.188168,-0.19054 -0.188168,-0.49696 0,-0.6875 L -17.4375,19.28125 -20.40625,16.3125 -26.5,22.40625 c -0.19054,0.188168 -0.49696,0.188168 -0.6875,0 l -6.09375,-6.09375 z"
|
||||||
|
transform="translate(50.84375,-2.1249996)"
|
||||||
|
id="path3243"
|
||||||
|
style="opacity:0.2;fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none" />
|
||||||
|
<path
|
||||||
|
d="m -33.28125,16.3125 -2.96875,2.96875 6.125,6.09375 c 0.188168,0.19054 0.188168,0.49696 0,0.6875 l -6.125,6.09375 2.96875,2.96875 6.09375,-6.09375 c 0.19054,-0.188168 0.49696,-0.188168 0.6875,0 l 6.09375,6.09375 2.96875,-2.96875 -6.09375,-6.09375 c -0.188168,-0.19054 -0.188168,-0.49696 0,-0.6875 L -17.4375,19.28125 -20.40625,16.3125 -26.5,22.40625 c -0.19054,0.188168 -0.49696,0.188168 -0.6875,0 l -6.09375,-6.09375 z"
|
||||||
|
transform="translate(50.84375,-1.1249996)"
|
||||||
|
id="path3256"
|
||||||
|
style="fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.4 KiB |
@ -399,6 +399,16 @@ size: $(OUTDIR)/$(TARGET).elf_size
|
|||||||
docs:
|
docs:
|
||||||
doxygen $(DOXYGENDIR)/doxygen.cfg
|
doxygen $(DOXYGENDIR)/doxygen.cfg
|
||||||
|
|
||||||
|
# Install: install binary file with prefix/suffix into install directory
|
||||||
|
install: $(OUTDIR)/$(TARGET).bin
|
||||||
|
ifneq ($(INSTALL_DIR),)
|
||||||
|
@echo $(MSG_INSTALLING) $(call toprel, $<)
|
||||||
|
$(V1) mkdir -p $(INSTALL_DIR)
|
||||||
|
$(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).bin
|
||||||
|
else
|
||||||
|
$(error INSTALL_DIR must be specified for $@)
|
||||||
|
endif
|
||||||
|
|
||||||
# Target: clean project.
|
# Target: clean project.
|
||||||
clean: clean_list
|
clean: clean_list
|
||||||
|
|
||||||
@ -434,6 +444,5 @@ else
|
|||||||
-include $(shell mkdir $(OUTDIR) 2>/dev/null) $(shell mkdir $(OUTDIR)/dep 2>/dev/null) $(wildcard $(OUTDIR)/dep/*)
|
-include $(shell mkdir $(OUTDIR) 2>/dev/null) $(shell mkdir $(OUTDIR)/dep 2>/dev/null) $(wildcard $(OUTDIR)/dep/*)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
# Listing of phony targets.
|
# Listing of phony targets.
|
||||||
.PHONY : all build clean clean_list program
|
.PHONY : all build clean clean_list program install
|
||||||
|
@ -389,6 +389,16 @@ size: $(OUTDIR)/$(TARGET).elf_size
|
|||||||
docs:
|
docs:
|
||||||
doxygen $(DOXYGENDIR)/doxygen.cfg
|
doxygen $(DOXYGENDIR)/doxygen.cfg
|
||||||
|
|
||||||
|
# Install: install binary file with prefix/suffix into install directory
|
||||||
|
install: $(OUTDIR)/$(TARGET).bin
|
||||||
|
ifneq ($(INSTALL_DIR),)
|
||||||
|
@echo $(MSG_INSTALLING) $(call toprel, $<)
|
||||||
|
$(V1) mkdir -p $(INSTALL_DIR)
|
||||||
|
$(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).bin
|
||||||
|
else
|
||||||
|
$(error INSTALL_DIR must be specified for $@)
|
||||||
|
endif
|
||||||
|
|
||||||
# Target: clean project.
|
# Target: clean project.
|
||||||
clean: clean_list
|
clean: clean_list
|
||||||
|
|
||||||
@ -426,4 +436,4 @@ else
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
# Listing of phony targets.
|
# Listing of phony targets.
|
||||||
.PHONY : all build clean clean_list program
|
.PHONY : all build clean clean_list program install
|
||||||
|
@ -410,6 +410,16 @@ size: $(OUTDIR)/$(TARGET).elf_size
|
|||||||
docs:
|
docs:
|
||||||
doxygen $(DOXYGENDIR)/doxygen.cfg
|
doxygen $(DOXYGENDIR)/doxygen.cfg
|
||||||
|
|
||||||
|
# Install: install binary file with prefix/suffix into install directory
|
||||||
|
install: $(OUTDIR)/$(TARGET).bin
|
||||||
|
ifneq ($(INSTALL_DIR),)
|
||||||
|
@echo $(MSG_INSTALLING) $(call toprel, $<)
|
||||||
|
$(V1) mkdir -p $(INSTALL_DIR)
|
||||||
|
$(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).bin
|
||||||
|
else
|
||||||
|
$(error INSTALL_DIR must be specified for $@)
|
||||||
|
endif
|
||||||
|
|
||||||
# Target: clean project.
|
# Target: clean project.
|
||||||
clean: begin clean_list finished end
|
clean: begin clean_list finished end
|
||||||
|
|
||||||
@ -430,7 +440,6 @@ clean_list :
|
|||||||
$(V1) $(REMOVE) $(CPPSRC:.cpp=.s)
|
$(V1) $(REMOVE) $(CPPSRC:.cpp=.s)
|
||||||
$(V1) $(REMOVE) $(CPPSRCARM:.cpp=.s)
|
$(V1) $(REMOVE) $(CPPSRCARM:.cpp=.s)
|
||||||
|
|
||||||
|
|
||||||
# Create output files directory
|
# Create output files directory
|
||||||
# all known MS Windows OS define the ComSpec environment variable
|
# all known MS Windows OS define the ComSpec environment variable
|
||||||
ifdef ComSpec
|
ifdef ComSpec
|
||||||
@ -447,4 +456,4 @@ else
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
# Listing of phony targets.
|
# Listing of phony targets.
|
||||||
.PHONY : all build clean clean_list program
|
.PHONY : all build clean clean_list program install
|
||||||
|
@ -39,9 +39,9 @@ void error(int);
|
|||||||
* data. This is non-intuitive for _binary_size where you
|
* data. This is non-intuitive for _binary_size where you
|
||||||
* might expect its value to hold the size but you'd be wrong.
|
* might expect its value to hold the size but you'd be wrong.
|
||||||
*/
|
*/
|
||||||
extern void _binary_start;
|
extern uint32_t _binary_start;
|
||||||
extern void _binary_end;
|
extern uint32_t _binary_end;
|
||||||
extern void _binary_size;
|
extern uint32_t _binary_size;
|
||||||
const uint32_t * embedded_image_start = (uint32_t *) &(_binary_start);
|
const uint32_t * embedded_image_start = (uint32_t *) &(_binary_start);
|
||||||
const uint32_t * embedded_image_end = (uint32_t *) &(_binary_end);
|
const uint32_t * embedded_image_end = (uint32_t *) &(_binary_end);
|
||||||
const uint32_t embedded_image_size = (uint32_t) &(_binary_size);
|
const uint32_t embedded_image_size = (uint32_t) &(_binary_size);
|
||||||
|
@ -428,10 +428,6 @@ $(eval $(call PARTIAL_COMPILE_TEMPLATE, SRC))
|
|||||||
# Compile: create assembler files from C source files. ARM only
|
# Compile: create assembler files from C source files. ARM only
|
||||||
$(eval $(call PARTIAL_COMPILE_ARM_TEMPLATE, SRCARM))
|
$(eval $(call PARTIAL_COMPILE_ARM_TEMPLATE, SRCARM))
|
||||||
|
|
||||||
# Generate Doxygen documents
|
|
||||||
docs:
|
|
||||||
doxygen $(DOXYGENDIR)/doxygen.cfg
|
|
||||||
|
|
||||||
$(OUTDIR)/$(TARGET).bin.o: $(OUTDIR)/$(TARGET).bin
|
$(OUTDIR)/$(TARGET).bin.o: $(OUTDIR)/$(TARGET).bin
|
||||||
|
|
||||||
.PHONY: elf lss sym hex bin bino
|
.PHONY: elf lss sym hex bin bino
|
||||||
@ -447,6 +443,20 @@ $(eval $(call SIZE_TEMPLATE, $(OUTDIR)/$(TARGET).elf))
|
|||||||
.PHONY: size
|
.PHONY: size
|
||||||
size: $(OUTDIR)/$(TARGET).elf_size
|
size: $(OUTDIR)/$(TARGET).elf_size
|
||||||
|
|
||||||
|
# Generate Doxygen documents
|
||||||
|
docs:
|
||||||
|
doxygen $(DOXYGENDIR)/doxygen.cfg
|
||||||
|
|
||||||
|
# Install: install binary file with prefix/suffix into install directory
|
||||||
|
install: $(OUTDIR)/$(TARGET).bin
|
||||||
|
ifneq ($(INSTALL_DIR),)
|
||||||
|
@echo $(MSG_INSTALLING) $(call toprel, $<)
|
||||||
|
$(V1) mkdir -p $(INSTALL_DIR)
|
||||||
|
$(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).bin
|
||||||
|
else
|
||||||
|
$(error INSTALL_DIR must be specified for $@)
|
||||||
|
endif
|
||||||
|
|
||||||
# Target: clean project.
|
# Target: clean project.
|
||||||
clean: clean_list
|
clean: clean_list
|
||||||
|
|
||||||
@ -484,4 +494,4 @@ else
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
# Listing of phony targets.
|
# Listing of phony targets.
|
||||||
.PHONY : all build clean clean_list program
|
.PHONY : all build clean clean_list program install
|
||||||
|
@ -450,6 +450,16 @@ size: $(OUTDIR)/$(TARGET).elf_size
|
|||||||
docs:
|
docs:
|
||||||
doxygen $(DOXYGENDIR)/doxygen.cfg
|
doxygen $(DOXYGENDIR)/doxygen.cfg
|
||||||
|
|
||||||
|
# Install: install binary file with prefix/suffix into install directory
|
||||||
|
install: $(OUTDIR)/$(TARGET).bin
|
||||||
|
ifneq ($(INSTALL_DIR),)
|
||||||
|
@echo $(MSG_INSTALLING) $(call toprel, $<)
|
||||||
|
$(V1) mkdir -p $(INSTALL_DIR)
|
||||||
|
$(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).bin
|
||||||
|
else
|
||||||
|
$(error INSTALL_DIR must be specified for $@)
|
||||||
|
endif
|
||||||
|
|
||||||
# Target: clean project.
|
# Target: clean project.
|
||||||
clean: clean_list
|
clean: clean_list
|
||||||
|
|
||||||
@ -487,4 +497,4 @@ else
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
# Listing of phony targets.
|
# Listing of phony targets.
|
||||||
.PHONY : all build clean clean_list program
|
.PHONY : all build clean clean_list program install
|
||||||
|
@ -446,6 +446,16 @@ size: $(OUTDIR)/$(TARGET).elf_size
|
|||||||
docs:
|
docs:
|
||||||
doxygen $(DOXYGENDIR)/doxygen.cfg
|
doxygen $(DOXYGENDIR)/doxygen.cfg
|
||||||
|
|
||||||
|
# Install: install binary file with prefix/suffix into install directory
|
||||||
|
install: $(OUTDIR)/$(TARGET).bin
|
||||||
|
ifneq ($(INSTALL_DIR),)
|
||||||
|
@echo $(MSG_INSTALLING) $(call toprel, $<)
|
||||||
|
$(V1) mkdir -p $(INSTALL_DIR)
|
||||||
|
$(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).bin
|
||||||
|
else
|
||||||
|
$(error INSTALL_DIR must be specified for $@)
|
||||||
|
endif
|
||||||
|
|
||||||
# Target: clean project.
|
# Target: clean project.
|
||||||
clean: clean_list
|
clean: clean_list
|
||||||
|
|
||||||
@ -483,5 +493,4 @@ else
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
# Listing of phony targets.
|
# Listing of phony targets.
|
||||||
.PHONY : all build clean clean_list program
|
.PHONY : all build clean clean_list program install
|
||||||
|
|
||||||
|
@ -205,6 +205,7 @@ SRC += $(PIOSSTM32F10X)/pios_usb_hid_prop.c
|
|||||||
SRC += $(PIOSSTM32F10X)/pios_usb_hid_pwr.c
|
SRC += $(PIOSSTM32F10X)/pios_usb_hid_pwr.c
|
||||||
|
|
||||||
## PIOS Hardware (Common)
|
## PIOS Hardware (Common)
|
||||||
|
SRC += $(PIOSCOMMON)/pios_flashfs_objlist.c
|
||||||
SRC += $(PIOSCOMMON)/pios_flash_w25x.c
|
SRC += $(PIOSCOMMON)/pios_flash_w25x.c
|
||||||
SRC += $(PIOSCOMMON)/pios_adxl345.c
|
SRC += $(PIOSCOMMON)/pios_adxl345.c
|
||||||
SRC += $(PIOSCOMMON)/pios_com.c
|
SRC += $(PIOSCOMMON)/pios_com.c
|
||||||
@ -591,6 +592,16 @@ size: $(OUTDIR)/$(TARGET).elf_size
|
|||||||
docs:
|
docs:
|
||||||
doxygen $(DOXYGENDIR)/doxygen.cfg
|
doxygen $(DOXYGENDIR)/doxygen.cfg
|
||||||
|
|
||||||
|
# Install: install binary file with prefix/suffix into install directory
|
||||||
|
install: $(OUTDIR)/$(TARGET).bin
|
||||||
|
ifneq ($(INSTALL_DIR),)
|
||||||
|
@echo $(MSG_INSTALLING) $(call toprel, $<)
|
||||||
|
$(V1) mkdir -p $(INSTALL_DIR)
|
||||||
|
$(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).bin
|
||||||
|
else
|
||||||
|
$(error INSTALL_DIR must be specified for $@)
|
||||||
|
endif
|
||||||
|
|
||||||
# Target: clean project.
|
# Target: clean project.
|
||||||
clean: clean_list
|
clean: clean_list
|
||||||
|
|
||||||
@ -630,5 +641,4 @@ else
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
# Listing of phony targets.
|
# Listing of phony targets.
|
||||||
.PHONY : all build clean clean_list program gencode
|
.PHONY : all build clean clean_list program gencode install
|
||||||
|
|
||||||
|
@ -92,6 +92,7 @@ void OpenPilotInit()
|
|||||||
|
|
||||||
#ifdef ERASE_FLASH
|
#ifdef ERASE_FLASH
|
||||||
PIOS_Flash_W25X_EraseChip();
|
PIOS_Flash_W25X_EraseChip();
|
||||||
|
while(TRUE){};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Initialize modules */
|
/* Initialize modules */
|
||||||
|
@ -84,16 +84,16 @@
|
|||||||
#define AUXUART_BAUDRATE 19200
|
#define AUXUART_BAUDRATE 19200
|
||||||
|
|
||||||
/* Alarm Thresholds */
|
/* Alarm Thresholds */
|
||||||
#define HEAP_LIMIT_WARNING 450
|
#define HEAP_LIMIT_WARNING 350
|
||||||
#define HEAP_LIMIT_CRITICAL 350
|
#define HEAP_LIMIT_CRITICAL 250
|
||||||
#define CPULOAD_LIMIT_WARNING 80
|
#define CPULOAD_LIMIT_WARNING 80
|
||||||
#define CPULOAD_LIMIT_CRITICAL 95
|
#define CPULOAD_LIMIT_CRITICAL 95
|
||||||
|
|
||||||
/* Task stack sizes */
|
/* Task stack sizes */
|
||||||
#define PIOS_ACTUATOR_STACK_SIZE 1020
|
#define PIOS_ACTUATOR_STACK_SIZE 1020
|
||||||
#define PIOS_MANUAL_STACK_SIZE 644
|
#define PIOS_MANUAL_STACK_SIZE 724
|
||||||
#define PIOS_SYSTEM_STACK_SIZE 644
|
#define PIOS_SYSTEM_STACK_SIZE 504
|
||||||
#define PIOS_STABILIZATION_STACK_SIZE 624
|
#define PIOS_STABILIZATION_STACK_SIZE 524
|
||||||
#define PIOS_TELEM_STACK_SIZE 500
|
#define PIOS_TELEM_STACK_SIZE 500
|
||||||
|
|
||||||
#define IDLE_COUNTS_PER_SEC_AT_NO_LOAD 1995998
|
#define IDLE_COUNTS_PER_SEC_AT_NO_LOAD 1995998
|
||||||
|
@ -681,6 +681,8 @@ void PIOS_Board_Init(void) {
|
|||||||
PIOS_Flash_W25X_Init(pios_spi_flash_accel_id);
|
PIOS_Flash_W25X_Init(pios_spi_flash_accel_id);
|
||||||
PIOS_ADXL345_Attach(pios_spi_flash_accel_id);
|
PIOS_ADXL345_Attach(pios_spi_flash_accel_id);
|
||||||
|
|
||||||
|
PIOS_FLASHFS_Init();
|
||||||
|
|
||||||
#if defined(PIOS_INCLUDE_SPEKTRUM)
|
#if defined(PIOS_INCLUDE_SPEKTRUM)
|
||||||
/* SPEKTRUM init must come before comms */
|
/* SPEKTRUM init must come before comms */
|
||||||
PIOS_SPEKTRUM_Init();
|
PIOS_SPEKTRUM_Init();
|
||||||
|
@ -416,6 +416,16 @@ size: $(OUTDIR)/$(TARGET).elf_size
|
|||||||
docs:
|
docs:
|
||||||
doxygen $(DOXYGENDIR)/doxygen.cfg
|
doxygen $(DOXYGENDIR)/doxygen.cfg
|
||||||
|
|
||||||
|
# Install: install binary file with prefix/suffix into install directory
|
||||||
|
install: $(OUTDIR)/$(TARGET).bin
|
||||||
|
ifneq ($(INSTALL_DIR),)
|
||||||
|
@echo $(MSG_INSTALLING) $(call toprel, $<)
|
||||||
|
$(V1) mkdir -p $(INSTALL_DIR)
|
||||||
|
$(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).bin
|
||||||
|
else
|
||||||
|
$(error INSTALL_DIR must be specified for $@)
|
||||||
|
endif
|
||||||
|
|
||||||
# Target: clean project.
|
# Target: clean project.
|
||||||
clean: clean_list
|
clean: clean_list
|
||||||
|
|
||||||
@ -450,6 +460,5 @@ else
|
|||||||
-include $(shell mkdir $(OUTDIR) 2>/dev/null) $(shell mkdir $(OUTDIR)/dep 2>/dev/null) $(wildcard $(OUTDIR)/dep/*)
|
-include $(shell mkdir $(OUTDIR) 2>/dev/null) $(shell mkdir $(OUTDIR)/dep 2>/dev/null) $(wildcard $(OUTDIR)/dep/*)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
# Listing of phony targets.
|
# Listing of phony targets.
|
||||||
.PHONY : all build clean clean_list program
|
.PHONY : all build clean clean_list program install
|
||||||
|
@ -182,7 +182,7 @@ static void actuatorTask(void* parameters)
|
|||||||
nMixers ++;
|
nMixers ++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(nMixers < 2) //Nothing can fly with less than two mixers.
|
if((nMixers < 2) && !ActuatorCommandReadOnly(dummy)) //Nothing can fly with less than two mixers.
|
||||||
{
|
{
|
||||||
setFailsafe(); // So that channels like PWM buzzer keep working
|
setFailsafe(); // So that channels like PWM buzzer keep working
|
||||||
continue;
|
continue;
|
||||||
@ -198,8 +198,12 @@ static void actuatorTask(void* parameters)
|
|||||||
float curve2 = MixerCurve(desired.Throttle,mixerSettings.ThrottleCurve2);
|
float curve2 = MixerCurve(desired.Throttle,mixerSettings.ThrottleCurve2);
|
||||||
for(int ct=0; ct < MAX_MIX_ACTUATORS; ct++)
|
for(int ct=0; ct < MAX_MIX_ACTUATORS; ct++)
|
||||||
{
|
{
|
||||||
if(mixers[ct].type == MIXERSETTINGS_MIXER1TYPE_DISABLED)
|
if(mixers[ct].type == MIXERSETTINGS_MIXER1TYPE_DISABLED) {
|
||||||
|
// Set to minimum if disabled. This is not the same as saying PWM pulse = 0 us
|
||||||
|
status[ct] = -1;
|
||||||
|
command.Channel[ct] = 0;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
status[ct] = ProcessMixer(ct, curve1, curve2, &mixerSettings, &desired, dT);
|
status[ct] = ProcessMixer(ct, curve1, curve2, &mixerSettings, &desired, dT);
|
||||||
|
|
||||||
@ -400,14 +404,19 @@ static void setFailsafe()
|
|||||||
// Reset ActuatorCommand to safe values
|
// Reset ActuatorCommand to safe values
|
||||||
for (int n = 0; n < ACTUATORCOMMAND_CHANNEL_NUMELEM; ++n)
|
for (int n = 0; n < ACTUATORCOMMAND_CHANNEL_NUMELEM; ++n)
|
||||||
{
|
{
|
||||||
|
|
||||||
if(mixers[n].type == MIXERSETTINGS_MIXER1TYPE_MOTOR)
|
if(mixers[n].type == MIXERSETTINGS_MIXER1TYPE_MOTOR)
|
||||||
{
|
{
|
||||||
command.Channel[n] = settings.ChannelMin[n];
|
command.Channel[n] = settings.ChannelMin[n];
|
||||||
}
|
}
|
||||||
else
|
else if(mixers[n].type == MIXERSETTINGS_MIXER1TYPE_SERVO)
|
||||||
{
|
{
|
||||||
command.Channel[n] = settings.ChannelNeutral[n];
|
command.Channel[n] = settings.ChannelNeutral[n];
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
command.Channel[n] = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set alarm
|
// Set alarm
|
||||||
|
@ -142,17 +142,18 @@ static void AttitudeTask(void *parameters)
|
|||||||
FlightStatusData flightStatus;
|
FlightStatusData flightStatus;
|
||||||
FlightStatusGet(&flightStatus);
|
FlightStatusGet(&flightStatus);
|
||||||
|
|
||||||
if(xTaskGetTickCount() < 10000) {
|
if(xTaskGetTickCount() < 7000) {
|
||||||
// For first 5 seconds use accels to get gyro bias
|
// Force settings update to make sure rotation loaded
|
||||||
|
settingsUpdatedCb(AttitudeSettingsHandle());
|
||||||
|
// For first 7 seconds use accels to get gyro bias
|
||||||
accelKp = 1;
|
accelKp = 1;
|
||||||
// Decrease the rate of gyro learning during init
|
accelKi = 0.9;
|
||||||
accelKi = .5 / (1 + xTaskGetTickCount() / 5000);
|
yawBiasRate = 0.23;
|
||||||
yawBiasRate = 0.01 / (1 + xTaskGetTickCount() / 5000);
|
|
||||||
init = 0;
|
init = 0;
|
||||||
}
|
}
|
||||||
else if (zero_during_arming && (flightStatus.Armed == FLIGHTSTATUS_ARMED_ARMING)) {
|
else if (zero_during_arming && (flightStatus.Armed == FLIGHTSTATUS_ARMED_ARMING)) {
|
||||||
accelKi = .01;
|
accelKi = 0.9;
|
||||||
yawBiasRate = 0.1;
|
yawBiasRate = 0.23;
|
||||||
init = 0;
|
init = 0;
|
||||||
} else if (init == 0) {
|
} else if (init == 0) {
|
||||||
settingsUpdatedCb(AttitudeSettingsHandle());
|
settingsUpdatedCb(AttitudeSettingsHandle());
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
#include "openpilot.h"
|
#include "openpilot.h"
|
||||||
#include "firmwareiap.h"
|
#include "firmwareiap.h"
|
||||||
#include "firmwareiapobj.h"
|
#include "firmwareiapobj.h"
|
||||||
|
#include "flightstatus.h"
|
||||||
|
|
||||||
// Private constants
|
// Private constants
|
||||||
#define IAP_CMD_STEP_1 1122
|
#define IAP_CMD_STEP_1 1122
|
||||||
@ -156,6 +157,16 @@ static void FirmwareIAPCallback(UAVObjEvent* ev)
|
|||||||
case IAP_STATE_STEP_2:
|
case IAP_STATE_STEP_2:
|
||||||
if( data.Command == IAP_CMD_STEP_3 ) {
|
if( data.Command == IAP_CMD_STEP_3 ) {
|
||||||
if( delta > iap_time_3_low_end && delta < iap_time_3_high_end ) {
|
if( delta > iap_time_3_low_end && delta < iap_time_3_high_end ) {
|
||||||
|
|
||||||
|
FlightStatusData flightStatus;
|
||||||
|
FlightStatusGet(&flightStatus);
|
||||||
|
|
||||||
|
if(flightStatus.Armed != FLIGHTSTATUS_ARMED_DISARMED) {
|
||||||
|
// Abort any attempts if not disarmed
|
||||||
|
iap_state = IAP_STATE_READY;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
// we've met the three sequence of command numbers
|
// we've met the three sequence of command numbers
|
||||||
// we've met the time requirements.
|
// we've met the time requirements.
|
||||||
PIOS_IAP_SetRequest1();
|
PIOS_IAP_SetRequest1();
|
||||||
|
@ -63,7 +63,7 @@ static float GravityAccel(float latitude, float longitude, float altitude);
|
|||||||
// Private constants
|
// Private constants
|
||||||
|
|
||||||
//#define FULL_COLD_RESTART // uncomment this to tell the GPS to do a FULL COLD restart
|
//#define FULL_COLD_RESTART // uncomment this to tell the GPS to do a FULL COLD restart
|
||||||
//#define DISABLE_GPS_TRESHOLD //
|
//#define DISABLE_GPS_THRESHOLD //
|
||||||
|
|
||||||
#define GPS_TIMEOUT_MS 500
|
#define GPS_TIMEOUT_MS 500
|
||||||
#define GPS_COMMAND_RESEND_TIMEOUT_MS 2000
|
#define GPS_COMMAND_RESEND_TIMEOUT_MS 2000
|
||||||
@ -154,7 +154,7 @@ static void gpsTask(void *parameters)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DISABLE_GPS_TRESHOLD
|
#ifdef DISABLE_GPS_THRESHOLD
|
||||||
PIOS_COM_SendStringNonBlocking(gpsPort, "$PMTK397,0*23\r\n");
|
PIOS_COM_SendStringNonBlocking(gpsPort, "$PMTK397,0*23\r\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -59,8 +59,8 @@
|
|||||||
// optimisation options are changed.
|
// optimisation options are changed.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PIOS_MANUAL_STACK_SIZE)
|
#if defined(PIOS_SYSTEM_STACK_SIZE)
|
||||||
#define STACK_SIZE_BYTES PIOS_MANUAL_STACK_SIZE
|
#define STACK_SIZE_BYTES PIOS_SYSTEM_STACK_SIZE
|
||||||
#else
|
#else
|
||||||
#define STACK_SIZE_BYTES 924
|
#define STACK_SIZE_BYTES 924
|
||||||
#endif
|
#endif
|
||||||
|
@ -52,14 +52,13 @@ endif
|
|||||||
FLASH_TOOL = OPENOCD
|
FLASH_TOOL = OPENOCD
|
||||||
|
|
||||||
# List of modules to include
|
# List of modules to include
|
||||||
MODULES = Actuator Telemetry GPS ManualControl Altitude AHRSComms Stabilization Guidance FirmwareIAP FlightPlan
|
MODULES = Actuator Telemetry GPS ManualControl Altitude AHRSComms Stabilization Guidance FirmwareIAP
|
||||||
|
PYMODULES = FlightPlan
|
||||||
#MODULES = Telemetry Example
|
#MODULES = Telemetry Example
|
||||||
#MODULES = Telemetry MK/MKSerial
|
#MODULES = Telemetry MK/MKSerial
|
||||||
#MODULES = Telemetry
|
#MODULES = Telemetry
|
||||||
#MODULES += Osd/OsdEtStd
|
#MODULES += Osd/OsdEtStd
|
||||||
|
|
||||||
|
|
||||||
# MCU name, submodel and board
|
# MCU name, submodel and board
|
||||||
# - MCU used for compiler-option (-mcpu)
|
# - MCU used for compiler-option (-mcpu)
|
||||||
# - MODEL used for linker-script name (-T) and passed as define
|
# - MODEL used for linker-script name (-T) and passed as define
|
||||||
@ -124,17 +123,19 @@ UAVOBJSYNTHDIR = $(OUTDIR)/../uavobject-synthetics/flight
|
|||||||
# List C source files here. (C dependencies are automatically generated.)
|
# List C source files here. (C dependencies are automatically generated.)
|
||||||
# use file-extension c for "c-only"-files
|
# use file-extension c for "c-only"-files
|
||||||
|
|
||||||
MODNAMES = $(notdir ${MODULES})
|
MODNAMES = $(notdir ${MODULES} ${PYMODULES})
|
||||||
|
|
||||||
ifndef TESTAPP
|
ifndef TESTAPP
|
||||||
|
|
||||||
## PyMite files
|
## PyMite files and modules
|
||||||
SRC += $(OUTDIR)/pmlib_img.c
|
SRC += $(OUTDIR)/pmlib_img.c
|
||||||
SRC += $(OUTDIR)/pmlib_nat.c
|
SRC += $(OUTDIR)/pmlib_nat.c
|
||||||
SRC += $(OUTDIR)/pmlibusr_img.c
|
SRC += $(OUTDIR)/pmlibusr_img.c
|
||||||
SRC += $(OUTDIR)/pmlibusr_nat.c
|
SRC += $(OUTDIR)/pmlibusr_nat.c
|
||||||
SRC += $(wildcard ${PYMITEVM}/*.c)
|
PYSRC += $(wildcard ${PYMITEVM}/*.c)
|
||||||
SRC += $(wildcard ${PYMITEPLAT}/*.c)
|
PYSRC += $(wildcard ${PYMITEPLAT}/*.c)
|
||||||
|
PYSRC += ${foreach MOD, ${PYMODULES}, ${wildcard ${OPMODULEDIR}/${MOD}/*.c}}
|
||||||
|
SRC += $(PYSRC)
|
||||||
|
|
||||||
## MODULES
|
## MODULES
|
||||||
SRC += ${foreach MOD, ${MODULES}, ${wildcard ${OPMODULEDIR}/${MOD}/*.c}}
|
SRC += ${foreach MOD, ${MODULES}, ${wildcard ${OPMODULEDIR}/${MOD}/*.c}}
|
||||||
@ -317,7 +318,7 @@ EXTRAINCDIRS += $(RTOSSRCDIR)/portable/GCC/ARM_CM3
|
|||||||
EXTRAINCDIRS += $(AHRSBOOTLOADERINC)
|
EXTRAINCDIRS += $(AHRSBOOTLOADERINC)
|
||||||
EXTRAINCDIRS += $(PYMITEINC)
|
EXTRAINCDIRS += $(PYMITEINC)
|
||||||
|
|
||||||
EXTRAINCDIRS += ${foreach MOD, ${MODULES}, $(OPMODULEDIR)/${MOD}/inc} ${OPMODULEDIR}/System/inc
|
EXTRAINCDIRS += ${foreach MOD, ${MODULES} ${PYMODULES}, $(OPMODULEDIR)/${MOD}/inc} ${OPMODULEDIR}/System/inc
|
||||||
|
|
||||||
|
|
||||||
# List any extra directories to look for library files here.
|
# List any extra directories to look for library files here.
|
||||||
@ -481,7 +482,7 @@ LSTFILES = $(addprefix $(OUTDIR)/, $(addsuffix .lst, $(ALLSRCBASE)))
|
|||||||
DEPFILES = $(addprefix $(OUTDIR)/dep/, $(addsuffix .o.d, $(ALLSRCBASE)))
|
DEPFILES = $(addprefix $(OUTDIR)/dep/, $(addsuffix .o.d, $(ALLSRCBASE)))
|
||||||
|
|
||||||
# Default target.
|
# Default target.
|
||||||
all: gencode gccversion build
|
all: gccversion build
|
||||||
|
|
||||||
ifeq ($(LOADFORMAT),ihex)
|
ifeq ($(LOADFORMAT),ihex)
|
||||||
build: elf hex lss sym
|
build: elf hex lss sym
|
||||||
@ -500,6 +501,8 @@ endif
|
|||||||
# Generate intermediate code
|
# Generate intermediate code
|
||||||
gencode: ${OUTDIR}/InitMods.c ${OUTDIR}/pmlib_img.c ${OUTDIR}/pmlib_nat.c ${OUTDIR}/pmlibusr_img.c ${OUTDIR}/pmlibusr_nat.c ${OUTDIR}/pmfeatures.h
|
gencode: ${OUTDIR}/InitMods.c ${OUTDIR}/pmlib_img.c ${OUTDIR}/pmlib_nat.c ${OUTDIR}/pmlibusr_img.c ${OUTDIR}/pmlibusr_nat.c ${OUTDIR}/pmfeatures.h
|
||||||
|
|
||||||
|
$(PYSRC): gencode
|
||||||
|
|
||||||
# Generate code for module initialization
|
# Generate code for module initialization
|
||||||
${OUTDIR}/InitMods.c: Makefile
|
${OUTDIR}/InitMods.c: Makefile
|
||||||
@echo $(MSG_MODINIT) $(call toprel, $@)
|
@echo $(MSG_MODINIT) $(call toprel, $@)
|
||||||
@ -570,6 +573,16 @@ size: $(OUTDIR)/$(TARGET).elf_size
|
|||||||
docs:
|
docs:
|
||||||
doxygen $(DOXYGENDIR)/doxygen.cfg
|
doxygen $(DOXYGENDIR)/doxygen.cfg
|
||||||
|
|
||||||
|
# Install: install binary file with prefix/suffix into install directory
|
||||||
|
install: $(OUTDIR)/$(TARGET).bin
|
||||||
|
ifneq ($(INSTALL_DIR),)
|
||||||
|
@echo $(MSG_INSTALLING) $(call toprel, $<)
|
||||||
|
$(V1) mkdir -p $(INSTALL_DIR)
|
||||||
|
$(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).bin
|
||||||
|
else
|
||||||
|
$(error INSTALL_DIR must be specified for $@)
|
||||||
|
endif
|
||||||
|
|
||||||
# Target: clean project.
|
# Target: clean project.
|
||||||
clean: clean_list
|
clean: clean_list
|
||||||
|
|
||||||
@ -609,5 +622,4 @@ else
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
# Listing of phony targets.
|
# Listing of phony targets.
|
||||||
.PHONY : all build clean clean_list program gencode
|
.PHONY : all build clean clean_list program gencode install
|
||||||
|
|
||||||
|
@ -222,6 +222,14 @@ int8_t PIOS_Flash_W25X_WriteData(uint32_t addr, uint8_t * data, uint16_t len)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Read data from a location in flash memory
|
||||||
|
* @param[in] addr Address in flash to write to
|
||||||
|
* @param[in] data Pointer to data to write from flash
|
||||||
|
* @param[in] len Length of data to write (max 256 bytes)
|
||||||
|
* @return Zero if success or error code
|
||||||
|
* @retval -1 Unable to claim SPI bus
|
||||||
|
*/
|
||||||
int8_t PIOS_Flash_W25X_ReadData(uint32_t addr, uint8_t * data, uint16_t len)
|
int8_t PIOS_Flash_W25X_ReadData(uint32_t addr, uint8_t * data, uint16_t len)
|
||||||
{
|
{
|
||||||
if(PIOS_Flash_W25X_ClaimBus() == -1)
|
if(PIOS_Flash_W25X_ClaimBus() == -1)
|
||||||
|
294
flight/PiOS/Common/pios_flashfs_objlist.c
Normal file
@ -0,0 +1,294 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
*
|
||||||
|
* @addtogroup PIOS PIOS Core hardware abstraction layer
|
||||||
|
* @{
|
||||||
|
* @addtogroup PIOS_FLASHFS_OBJLIST Object list based flash filesystem (low ram)
|
||||||
|
* @{
|
||||||
|
*
|
||||||
|
* @file pios_flashfs_objlist.c
|
||||||
|
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
|
||||||
|
* @brief A file system for storing UAVObject in flash chip
|
||||||
|
* @see The GNU Public License (GPL) Version 3
|
||||||
|
*
|
||||||
|
*****************************************************************************/
|
||||||
|
/*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "openpilot.h"
|
||||||
|
#include "uavobjectmanager.h"
|
||||||
|
|
||||||
|
// Private functions
|
||||||
|
static int32_t PIOS_FLASHFS_CleabObjectTableHeader();
|
||||||
|
static int32_t PIOS_FLASHFS_GetObjAddress(uint32_t objId, uint16_t instId);
|
||||||
|
static int32_t PIOS_FLASHFS_GetNewAddress(uint32_t objId, uint16_t instId);
|
||||||
|
|
||||||
|
// Private variables
|
||||||
|
static int32_t numObjects = -1;
|
||||||
|
|
||||||
|
// Private structures
|
||||||
|
// Header for objects in the file system table
|
||||||
|
struct objectHeader {
|
||||||
|
uint32_t objMagic;
|
||||||
|
uint32_t objId;
|
||||||
|
uint32_t instId;
|
||||||
|
uint32_t address;
|
||||||
|
} __attribute__((packed));;
|
||||||
|
|
||||||
|
struct fileHeader {
|
||||||
|
uint32_t id;
|
||||||
|
uint16_t instId;
|
||||||
|
uint16_t size;
|
||||||
|
} __attribute__((packed));
|
||||||
|
|
||||||
|
|
||||||
|
#define OBJECT_TABLE_MAGIC 0x85FB3C33
|
||||||
|
#define OBJ_MAGIC 0x3015AE71
|
||||||
|
#define OBJECT_TABLE_START 0x00000010
|
||||||
|
#define OBJECT_TABLE_END 0x00001000
|
||||||
|
#define SECTOR_SIZE 0x00001000
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initialize the flash object setting FS
|
||||||
|
* @return 0 if success, -1 if failure
|
||||||
|
*/
|
||||||
|
int32_t PIOS_FLASHFS_Init()
|
||||||
|
{
|
||||||
|
|
||||||
|
// Check for valid object table or create one
|
||||||
|
uint32_t object_table_magic;
|
||||||
|
if (PIOS_Flash_W25X_ReadData(0, (uint8_t *)&object_table_magic, sizeof(object_table_magic)) != 0)
|
||||||
|
return -1;
|
||||||
|
if(object_table_magic != OBJECT_TABLE_MAGIC) {
|
||||||
|
if(PIOS_FLASHFS_CleabObjectTableHeader() < 0)
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t addr = OBJECT_TABLE_START;
|
||||||
|
struct objectHeader header;
|
||||||
|
numObjects = 0;
|
||||||
|
|
||||||
|
// Loop through header area while objects detect to count how many saved
|
||||||
|
while(addr < OBJECT_TABLE_END) {
|
||||||
|
// Read the instance data
|
||||||
|
if (PIOS_Flash_W25X_ReadData(addr, (uint8_t *)&header, sizeof(header)) != 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
// Counting number of valid headers
|
||||||
|
if(header.objMagic != OBJ_MAGIC)
|
||||||
|
break;
|
||||||
|
|
||||||
|
numObjects++;
|
||||||
|
addr += sizeof(header);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Erase the headers for all objects in the flash chip
|
||||||
|
* @return 0 if successful, -1 if not
|
||||||
|
*/
|
||||||
|
static int32_t PIOS_FLASHFS_CleabObjectTableHeader()
|
||||||
|
{
|
||||||
|
if(PIOS_Flash_W25X_EraseSector(OBJECT_TABLE_START) != 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
uint32_t object_table_magic = OBJECT_TABLE_MAGIC;
|
||||||
|
if (PIOS_Flash_W25X_WriteData(0, (uint8_t *)&object_table_magic, sizeof(object_table_magic)) != 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the address of an object
|
||||||
|
* @param obj UAVObjHandle for that object
|
||||||
|
* @parma instId Instance id for that object
|
||||||
|
* @return address if successful, -1 if not found
|
||||||
|
*/
|
||||||
|
static int32_t PIOS_FLASHFS_GetObjAddress(uint32_t objId, uint16_t instId)
|
||||||
|
{
|
||||||
|
int32_t addr = OBJECT_TABLE_START;
|
||||||
|
struct objectHeader header;
|
||||||
|
|
||||||
|
// Loop through header area while objects detect to count how many saved
|
||||||
|
while(addr < OBJECT_TABLE_END) {
|
||||||
|
// Read the instance data
|
||||||
|
if (PIOS_Flash_W25X_ReadData(addr, (uint8_t *) &header, sizeof(header)) != 0)
|
||||||
|
return -1;
|
||||||
|
if(header.objMagic != OBJ_MAGIC)
|
||||||
|
break; // stop searching once hit first non-object header
|
||||||
|
else if (header.objId == objId && header.instId == instId)
|
||||||
|
break;
|
||||||
|
addr += sizeof(header);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (header.objId == objId && header.instId == instId)
|
||||||
|
return header.address;
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Returns an address for a new object and creates entry into object table
|
||||||
|
* @param[in] obj Object handle for object to be saved
|
||||||
|
* @param[in] instId The instance id of object to be saved
|
||||||
|
* @return 0 if success or error code
|
||||||
|
* @retval -1 Object not found
|
||||||
|
* @retval -2 No room in object table
|
||||||
|
* @retval -3 Unable to write entry into object table
|
||||||
|
* @retval -4 FS not initialized
|
||||||
|
*/
|
||||||
|
int32_t PIOS_FLASHFS_GetNewAddress(uint32_t objId, uint16_t instId)
|
||||||
|
{
|
||||||
|
struct objectHeader header;
|
||||||
|
|
||||||
|
if(numObjects < 0)
|
||||||
|
return -4;
|
||||||
|
|
||||||
|
// Don't worry about max size of flash chip here, other code will catch that
|
||||||
|
header.objMagic = OBJ_MAGIC;
|
||||||
|
header.objId = objId;
|
||||||
|
header.instId = instId;
|
||||||
|
header.address = OBJECT_TABLE_END + SECTOR_SIZE * numObjects;
|
||||||
|
|
||||||
|
int32_t addr = OBJECT_TABLE_START + sizeof(header) * numObjects;
|
||||||
|
|
||||||
|
// No room for this header in object table
|
||||||
|
if((addr + sizeof(header)) > OBJECT_TABLE_END)
|
||||||
|
return -2;
|
||||||
|
|
||||||
|
if(PIOS_Flash_W25X_WriteData(addr, (uint8_t *) &header, sizeof(header)) != 0)
|
||||||
|
return -3;
|
||||||
|
|
||||||
|
// This numObejcts value must stay consistent or there will be a break in the table
|
||||||
|
// and later the table will have bad values in it
|
||||||
|
numObjects++;
|
||||||
|
return header.address;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Saves one object instance per sector
|
||||||
|
* @param[in] obj UAVObjHandle the object to save
|
||||||
|
* @param[in] instId The instance of the object to save
|
||||||
|
* @return 0 if success or -1 if failure
|
||||||
|
* @note This uses one sector on the flash chip per object so that no buffering in ram
|
||||||
|
* must be done when erasing the sector before a save
|
||||||
|
*/
|
||||||
|
int32_t PIOS_FLASHFS_ObjSave(UAVObjHandle obj, uint16_t instId, uint8_t * data)
|
||||||
|
{
|
||||||
|
uint32_t objId = UAVObjGetID(obj);
|
||||||
|
|
||||||
|
int32_t addr = PIOS_FLASHFS_GetObjAddress(objId, instId);
|
||||||
|
|
||||||
|
// Object currently not saved
|
||||||
|
if(addr < 0)
|
||||||
|
addr = PIOS_FLASHFS_GetNewAddress(objId, instId);
|
||||||
|
|
||||||
|
// Could not allocate a sector
|
||||||
|
if(addr < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
struct fileHeader header = {
|
||||||
|
.id = objId,
|
||||||
|
.instId = instId,
|
||||||
|
.size = UAVObjGetNumBytes(obj)
|
||||||
|
};
|
||||||
|
|
||||||
|
if(PIOS_Flash_W25X_EraseSector(addr) != 0)
|
||||||
|
return -2;
|
||||||
|
|
||||||
|
// Save header
|
||||||
|
// This information IS redundant with the object table id. Oh well. Better safe than sorry.
|
||||||
|
|
||||||
|
if(PIOS_Flash_W25X_WriteData(addr, (uint8_t *) &header, sizeof(header)) != 0)
|
||||||
|
return -3;
|
||||||
|
|
||||||
|
// Save data
|
||||||
|
if(PIOS_Flash_W25X_WriteData(addr + sizeof(header), data, UAVObjGetNumBytes(obj)) != 0)
|
||||||
|
return -4;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Load one object instance per sector
|
||||||
|
* @param[in] obj UAVObjHandle the object to save
|
||||||
|
* @param[in] instId The instance of the object to save
|
||||||
|
* @return 0 if success or error code
|
||||||
|
* @retval -1 if object not in file table
|
||||||
|
* @retval -2 if unable to retrieve object header
|
||||||
|
* @retval -3 if loaded data instId or objId don't match
|
||||||
|
* @retval -4 if unable to retrieve instance data
|
||||||
|
* @note This uses one sector on the flash chip per object so that no buffering in ram
|
||||||
|
* must be done when erasing the sector before a save
|
||||||
|
*/
|
||||||
|
int32_t PIOS_FLASHFS_ObjLoad(UAVObjHandle obj, uint16_t instId, uint8_t * data)
|
||||||
|
{
|
||||||
|
uint32_t objId = UAVObjGetID(obj);
|
||||||
|
|
||||||
|
int32_t addr = PIOS_FLASHFS_GetObjAddress(objId, instId);
|
||||||
|
|
||||||
|
// Object currently not saved
|
||||||
|
if(addr < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
struct fileHeader header;
|
||||||
|
|
||||||
|
// Load header
|
||||||
|
// This information IS redundant with the object table id. Oh well. Better safe than sorry.
|
||||||
|
if(PIOS_Flash_W25X_ReadData(addr, (uint8_t *) &header, sizeof(header)) != 0)
|
||||||
|
return -2;
|
||||||
|
|
||||||
|
if((header.id != objId) || (header.instId != instId))
|
||||||
|
return -3;
|
||||||
|
|
||||||
|
// Read the instance data
|
||||||
|
if (PIOS_Flash_W25X_ReadData(addr + sizeof(header), data, UAVObjGetNumBytes(obj)) != 0)
|
||||||
|
return -4;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Delete object from flash
|
||||||
|
* @param[in] obj UAVObjHandle the object to save
|
||||||
|
* @param[in] instId The instance of the object to save
|
||||||
|
* @return 0 if success or error code
|
||||||
|
* @retval -1 if object not in file table
|
||||||
|
* @retval -2 Erase failed
|
||||||
|
* @note To avoid buffering the file table (1k ram!) the entry in the file table
|
||||||
|
* remains but destination sector is erased. This will make the load fail as the
|
||||||
|
* file header won't match the object. At next save it goes back there.
|
||||||
|
*/
|
||||||
|
int32_t PIOS_FLASHFS_ObjDelete(UAVObjHandle obj, uint16_t instId)
|
||||||
|
{
|
||||||
|
uint32_t objId = UAVObjGetID(obj);
|
||||||
|
|
||||||
|
int32_t addr = PIOS_FLASHFS_GetObjAddress(objId, instId);
|
||||||
|
|
||||||
|
// Object currently not saved
|
||||||
|
if(addr < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if(PIOS_Flash_W25X_EraseSector(addr) != 0)
|
||||||
|
return -2;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
37
flight/PiOS/inc/pios_flashfs_objlist.h
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
*
|
||||||
|
* @addtogroup PIOS PIOS Core hardware abstraction layer
|
||||||
|
* @{
|
||||||
|
* @addtogroup PIOS_FLASHFS_OBJLIST Object list based flash filesystem (low ram)
|
||||||
|
* @{
|
||||||
|
*
|
||||||
|
* @file pios_flashfs_objlist.h
|
||||||
|
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
|
||||||
|
* @brief A file system for storing UAVObject in flash chip
|
||||||
|
* @see The GNU Public License (GPL) Version 3
|
||||||
|
*
|
||||||
|
*****************************************************************************/
|
||||||
|
/*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "openpilot.h"
|
||||||
|
#include "uavobjectmanager.h"
|
||||||
|
|
||||||
|
int32_t PIOS_FLASHFS_Init();
|
||||||
|
int32_t PIOS_FLASHFS_ObjSave(UAVObjHandle obj, uint16_t instId, uint8_t * data);
|
||||||
|
int32_t PIOS_FLASHFS_ObjLoad(UAVObjHandle obj, uint16_t instId, uint8_t * data);
|
||||||
|
int32_t PIOS_FLASHFS_ObjDelete(UAVObjHandle obj, uint16_t instId);
|
@ -119,6 +119,7 @@
|
|||||||
|
|
||||||
#if defined(PIOS_INCLUDE_FLASH)
|
#if defined(PIOS_INCLUDE_FLASH)
|
||||||
#include <pios_flash_w25x.h>
|
#include <pios_flash_w25x.h>
|
||||||
|
#include <pios_flashfs_objlist.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PIOS_INCLUDE_BL_HELPER)
|
#if defined(PIOS_INCLUDE_BL_HELPER)
|
||||||
|
@ -439,6 +439,16 @@ size: $(OUTDIR)/$(TARGET).elf_size
|
|||||||
docs:
|
docs:
|
||||||
doxygen $(DOXYGENDIR)/doxygen.cfg
|
doxygen $(DOXYGENDIR)/doxygen.cfg
|
||||||
|
|
||||||
|
# Install: install binary file with prefix/suffix into install directory
|
||||||
|
install: $(OUTDIR)/$(TARGET).bin
|
||||||
|
ifneq ($(INSTALL_DIR),)
|
||||||
|
@echo $(MSG_INSTALLING) $(call toprel, $<)
|
||||||
|
$(V1) mkdir -p $(INSTALL_DIR)
|
||||||
|
$(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).bin
|
||||||
|
else
|
||||||
|
$(error INSTALL_DIR must be specified for $@)
|
||||||
|
endif
|
||||||
|
|
||||||
# Target: clean project.
|
# Target: clean project.
|
||||||
clean: clean_list
|
clean: clean_list
|
||||||
|
|
||||||
@ -476,4 +486,4 @@ else
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
# Listing of phony targets.
|
# Listing of phony targets.
|
||||||
.PHONY : all build clean clean_list program
|
.PHONY : all build clean clean_list program install
|
||||||
|
@ -3125,6 +3125,54 @@
|
|||||||
65FBE14412E7C98100176B5A /* pios_servo_priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pios_servo_priv.h; sourceTree = "<group>"; };
|
65FBE14412E7C98100176B5A /* pios_servo_priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pios_servo_priv.h; sourceTree = "<group>"; };
|
||||||
65FC66AA123F30F100B04F74 /* ahrs_timer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ahrs_timer.c; path = ../../AHRS/ahrs_timer.c; sourceTree = SOURCE_ROOT; };
|
65FC66AA123F30F100B04F74 /* ahrs_timer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ahrs_timer.c; path = ../../AHRS/ahrs_timer.c; sourceTree = SOURCE_ROOT; };
|
||||||
65FC66AB123F312A00B04F74 /* ahrs_timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ahrs_timer.h; sourceTree = "<group>"; };
|
65FC66AB123F312A00B04F74 /* ahrs_timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ahrs_timer.h; sourceTree = "<group>"; };
|
||||||
|
65FF4BB513791C3300146BE4 /* ahrs_slave_test.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ahrs_slave_test.c; sourceTree = "<group>"; };
|
||||||
|
65FF4BB613791C3300146BE4 /* ahrs_spi_program.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ahrs_spi_program.c; sourceTree = "<group>"; };
|
||||||
|
65FF4BB713791C3300146BE4 /* ahrs_spi_program_master.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ahrs_spi_program_master.c; sourceTree = "<group>"; };
|
||||||
|
65FF4BB813791C3300146BE4 /* ahrs_spi_program_slave.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ahrs_spi_program_slave.c; sourceTree = "<group>"; };
|
||||||
|
65FF4BB913791C3300146BE4 /* bl_fsm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bl_fsm.c; sourceTree = "<group>"; };
|
||||||
|
65FF4BBB13791C3300146BE4 /* ahrs_bl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ahrs_bl.h; sourceTree = "<group>"; };
|
||||||
|
65FF4BBC13791C3300146BE4 /* ahrs_spi_program.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ahrs_spi_program.h; sourceTree = "<group>"; };
|
||||||
|
65FF4BBD13791C3300146BE4 /* ahrs_spi_program_master.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ahrs_spi_program_master.h; sourceTree = "<group>"; };
|
||||||
|
65FF4BBE13791C3300146BE4 /* ahrs_spi_program_slave.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ahrs_spi_program_slave.h; sourceTree = "<group>"; };
|
||||||
|
65FF4BBF13791C3300146BE4 /* bl_fsm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bl_fsm.h; sourceTree = "<group>"; };
|
||||||
|
65FF4BC013791C3300146BE4 /* pios_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pios_config.h; sourceTree = "<group>"; };
|
||||||
|
65FF4BC113791C3300146BE4 /* main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = "<group>"; };
|
||||||
|
65FF4BC213791C3300146BE4 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = "<group>"; };
|
||||||
|
65FF4BC313791C3300146BE4 /* pios_board.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pios_board.c; sourceTree = "<group>"; };
|
||||||
|
65FF4BC613791C3300146BE4 /* pios_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pios_config.h; sourceTree = "<group>"; };
|
||||||
|
65FF4BC713791C3300146BE4 /* main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = "<group>"; };
|
||||||
|
65FF4BC813791C3300146BE4 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = "<group>"; };
|
||||||
|
65FF4BC913791C3300146BE4 /* pios_board.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pios_board.c; sourceTree = "<group>"; };
|
||||||
|
65FF4BCA13791C3300146BE4 /* test.bin */ = {isa = PBXFileReference; lastKnownFileType = archive.macbinary; path = test.bin; sourceTree = "<group>"; };
|
||||||
|
65FF4BCD13791C3300146BE4 /* common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = common.h; sourceTree = "<group>"; };
|
||||||
|
65FF4BCE13791C3300146BE4 /* op_dfu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = op_dfu.h; sourceTree = "<group>"; };
|
||||||
|
65FF4BCF13791C3300146BE4 /* pios_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pios_config.h; sourceTree = "<group>"; };
|
||||||
|
65FF4BD013791C3300146BE4 /* pios_usb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pios_usb.h; sourceTree = "<group>"; };
|
||||||
|
65FF4BD113791C3300146BE4 /* main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = "<group>"; };
|
||||||
|
65FF4BD213791C3300146BE4 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = "<group>"; };
|
||||||
|
65FF4BD313791C3300146BE4 /* op_dfu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = op_dfu.c; sourceTree = "<group>"; };
|
||||||
|
65FF4BD413791C3300146BE4 /* pios_board.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pios_board.c; sourceTree = "<group>"; };
|
||||||
|
65FF4BD713791C3300146BE4 /* common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = common.h; sourceTree = "<group>"; };
|
||||||
|
65FF4BD813791C3300146BE4 /* op_dfu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = op_dfu.h; sourceTree = "<group>"; };
|
||||||
|
65FF4BD913791C3300146BE4 /* pios_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pios_config.h; sourceTree = "<group>"; };
|
||||||
|
65FF4BDA13791C3300146BE4 /* pios_usb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pios_usb.h; sourceTree = "<group>"; };
|
||||||
|
65FF4BDB13791C3300146BE4 /* ssp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssp.h; sourceTree = "<group>"; };
|
||||||
|
65FF4BDC13791C3300146BE4 /* main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = "<group>"; };
|
||||||
|
65FF4BDD13791C3300146BE4 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = "<group>"; };
|
||||||
|
65FF4BDE13791C3300146BE4 /* op_dfu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = op_dfu.c; sourceTree = "<group>"; };
|
||||||
|
65FF4BDF13791C3300146BE4 /* pios_board.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pios_board.c; sourceTree = "<group>"; };
|
||||||
|
65FF4BE013791C3300146BE4 /* ssp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ssp.c; sourceTree = "<group>"; };
|
||||||
|
65FF4BE113791C3300146BE4 /* ssp_timer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ssp_timer.c; sourceTree = "<group>"; };
|
||||||
|
65FF4BE413791C3300146BE4 /* common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = common.h; sourceTree = "<group>"; };
|
||||||
|
65FF4BE513791C3300146BE4 /* op_dfu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = op_dfu.h; sourceTree = "<group>"; };
|
||||||
|
65FF4BE613791C3300146BE4 /* pios_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pios_config.h; sourceTree = "<group>"; };
|
||||||
|
65FF4BE713791C3300146BE4 /* pios_usb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pios_usb.h; sourceTree = "<group>"; };
|
||||||
|
65FF4BE813791C3300146BE4 /* main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = "<group>"; };
|
||||||
|
65FF4BE913791C3300146BE4 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = "<group>"; };
|
||||||
|
65FF4BEA13791C3300146BE4 /* op_dfu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = op_dfu.c; sourceTree = "<group>"; };
|
||||||
|
65FF4BEB13791C3300146BE4 /* pios_board.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pios_board.c; sourceTree = "<group>"; };
|
||||||
|
65FF4D5E137EDEC100146BE4 /* pios_flashfs_objlist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pios_flashfs_objlist.c; sourceTree = "<group>"; };
|
||||||
|
65FF4D61137EFA4F00146BE4 /* pios_flashfs_objlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pios_flashfs_objlist.h; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXGroup section */
|
/* Begin PBXGroup section */
|
||||||
@ -3505,6 +3553,7 @@
|
|||||||
657CEEB5121DBC49007A1FBE /* flight */ = {
|
657CEEB5121DBC49007A1FBE /* flight */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
65FF4BB313791C3300146BE4 /* Bootloaders */,
|
||||||
65F93B9012EE09280047DB36 /* PipXtreme */,
|
65F93B9012EE09280047DB36 /* PipXtreme */,
|
||||||
65B7E6AC120DF1CD000C1123 /* AHRS */,
|
65B7E6AC120DF1CD000C1123 /* AHRS */,
|
||||||
65E6DF7012E02E8E00058553 /* CopterControl */,
|
65E6DF7012E02E8E00058553 /* CopterControl */,
|
||||||
@ -7610,6 +7659,7 @@
|
|||||||
65E8F03711EFF25C00BBF654 /* printf-stdarg.c */,
|
65E8F03711EFF25C00BBF654 /* printf-stdarg.c */,
|
||||||
6528CCB412E406B800CF5144 /* pios_adxl345.c */,
|
6528CCB412E406B800CF5144 /* pios_adxl345.c */,
|
||||||
6512D60712ED4CB8008175E5 /* pios_flash_w25x.c */,
|
6512D60712ED4CB8008175E5 /* pios_flash_w25x.c */,
|
||||||
|
65FF4D5E137EDEC100146BE4 /* pios_flashfs_objlist.c */,
|
||||||
);
|
);
|
||||||
name = Common;
|
name = Common;
|
||||||
path = ../../PiOS/Common;
|
path = ../../PiOS/Common;
|
||||||
@ -7634,6 +7684,7 @@
|
|||||||
65E8F03E11EFF25C00BBF654 /* pios_debug.h */,
|
65E8F03E11EFF25C00BBF654 /* pios_debug.h */,
|
||||||
65E8F03F11EFF25C00BBF654 /* pios_delay.h */,
|
65E8F03F11EFF25C00BBF654 /* pios_delay.h */,
|
||||||
65E8F04011EFF25C00BBF654 /* pios_exti.h */,
|
65E8F04011EFF25C00BBF654 /* pios_exti.h */,
|
||||||
|
65FF4D61137EFA4F00146BE4 /* pios_flashfs_objlist.h */,
|
||||||
65E8F04111EFF25C00BBF654 /* pios_gpio.h */,
|
65E8F04111EFF25C00BBF654 /* pios_gpio.h */,
|
||||||
65E8F04211EFF25C00BBF654 /* pios_hmc5843.h */,
|
65E8F04211EFF25C00BBF654 /* pios_hmc5843.h */,
|
||||||
65E8F04311EFF25C00BBF654 /* pios_i2c.h */,
|
65E8F04311EFF25C00BBF654 /* pios_i2c.h */,
|
||||||
@ -8238,6 +8289,140 @@
|
|||||||
path = inc;
|
path = inc;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
65FF4BB313791C3300146BE4 /* Bootloaders */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
65FF4BB413791C3300146BE4 /* AHRS */,
|
||||||
|
65FF4BC413791C3300146BE4 /* BootloaderUpdater */,
|
||||||
|
65FF4BCB13791C3300146BE4 /* CopterControl */,
|
||||||
|
65FF4BD513791C3300146BE4 /* OpenPilot */,
|
||||||
|
65FF4BE213791C3300146BE4 /* PipXtreme */,
|
||||||
|
);
|
||||||
|
name = Bootloaders;
|
||||||
|
path = ../../Bootloaders;
|
||||||
|
sourceTree = SOURCE_ROOT;
|
||||||
|
};
|
||||||
|
65FF4BB413791C3300146BE4 /* AHRS */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
65FF4BB513791C3300146BE4 /* ahrs_slave_test.c */,
|
||||||
|
65FF4BB613791C3300146BE4 /* ahrs_spi_program.c */,
|
||||||
|
65FF4BB713791C3300146BE4 /* ahrs_spi_program_master.c */,
|
||||||
|
65FF4BB813791C3300146BE4 /* ahrs_spi_program_slave.c */,
|
||||||
|
65FF4BB913791C3300146BE4 /* bl_fsm.c */,
|
||||||
|
65FF4BBA13791C3300146BE4 /* inc */,
|
||||||
|
65FF4BC113791C3300146BE4 /* main.c */,
|
||||||
|
65FF4BC213791C3300146BE4 /* Makefile */,
|
||||||
|
65FF4BC313791C3300146BE4 /* pios_board.c */,
|
||||||
|
);
|
||||||
|
path = AHRS;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
65FF4BBA13791C3300146BE4 /* inc */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
65FF4BBB13791C3300146BE4 /* ahrs_bl.h */,
|
||||||
|
65FF4BBC13791C3300146BE4 /* ahrs_spi_program.h */,
|
||||||
|
65FF4BBD13791C3300146BE4 /* ahrs_spi_program_master.h */,
|
||||||
|
65FF4BBE13791C3300146BE4 /* ahrs_spi_program_slave.h */,
|
||||||
|
65FF4BBF13791C3300146BE4 /* bl_fsm.h */,
|
||||||
|
65FF4BC013791C3300146BE4 /* pios_config.h */,
|
||||||
|
);
|
||||||
|
path = inc;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
65FF4BC413791C3300146BE4 /* BootloaderUpdater */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
65FF4BC513791C3300146BE4 /* inc */,
|
||||||
|
65FF4BC713791C3300146BE4 /* main.c */,
|
||||||
|
65FF4BC813791C3300146BE4 /* Makefile */,
|
||||||
|
65FF4BC913791C3300146BE4 /* pios_board.c */,
|
||||||
|
65FF4BCA13791C3300146BE4 /* test.bin */,
|
||||||
|
);
|
||||||
|
path = BootloaderUpdater;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
65FF4BC513791C3300146BE4 /* inc */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
65FF4BC613791C3300146BE4 /* pios_config.h */,
|
||||||
|
);
|
||||||
|
path = inc;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
65FF4BCB13791C3300146BE4 /* CopterControl */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
65FF4BCC13791C3300146BE4 /* inc */,
|
||||||
|
65FF4BD113791C3300146BE4 /* main.c */,
|
||||||
|
65FF4BD213791C3300146BE4 /* Makefile */,
|
||||||
|
65FF4BD313791C3300146BE4 /* op_dfu.c */,
|
||||||
|
65FF4BD413791C3300146BE4 /* pios_board.c */,
|
||||||
|
);
|
||||||
|
path = CopterControl;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
65FF4BCC13791C3300146BE4 /* inc */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
65FF4BCD13791C3300146BE4 /* common.h */,
|
||||||
|
65FF4BCE13791C3300146BE4 /* op_dfu.h */,
|
||||||
|
65FF4BCF13791C3300146BE4 /* pios_config.h */,
|
||||||
|
65FF4BD013791C3300146BE4 /* pios_usb.h */,
|
||||||
|
);
|
||||||
|
path = inc;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
65FF4BD513791C3300146BE4 /* OpenPilot */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
65FF4BD613791C3300146BE4 /* inc */,
|
||||||
|
65FF4BDC13791C3300146BE4 /* main.c */,
|
||||||
|
65FF4BDD13791C3300146BE4 /* Makefile */,
|
||||||
|
65FF4BDE13791C3300146BE4 /* op_dfu.c */,
|
||||||
|
65FF4BDF13791C3300146BE4 /* pios_board.c */,
|
||||||
|
65FF4BE013791C3300146BE4 /* ssp.c */,
|
||||||
|
65FF4BE113791C3300146BE4 /* ssp_timer.c */,
|
||||||
|
);
|
||||||
|
path = OpenPilot;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
65FF4BD613791C3300146BE4 /* inc */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
65FF4BD713791C3300146BE4 /* common.h */,
|
||||||
|
65FF4BD813791C3300146BE4 /* op_dfu.h */,
|
||||||
|
65FF4BD913791C3300146BE4 /* pios_config.h */,
|
||||||
|
65FF4BDA13791C3300146BE4 /* pios_usb.h */,
|
||||||
|
65FF4BDB13791C3300146BE4 /* ssp.h */,
|
||||||
|
);
|
||||||
|
path = inc;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
65FF4BE213791C3300146BE4 /* PipXtreme */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
65FF4BE313791C3300146BE4 /* inc */,
|
||||||
|
65FF4BE813791C3300146BE4 /* main.c */,
|
||||||
|
65FF4BE913791C3300146BE4 /* Makefile */,
|
||||||
|
65FF4BEA13791C3300146BE4 /* op_dfu.c */,
|
||||||
|
65FF4BEB13791C3300146BE4 /* pios_board.c */,
|
||||||
|
);
|
||||||
|
path = PipXtreme;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
65FF4BE313791C3300146BE4 /* inc */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
65FF4BE413791C3300146BE4 /* common.h */,
|
||||||
|
65FF4BE513791C3300146BE4 /* op_dfu.h */,
|
||||||
|
65FF4BE613791C3300146BE4 /* pios_config.h */,
|
||||||
|
65FF4BE713791C3300146BE4 /* pios_usb.h */,
|
||||||
|
);
|
||||||
|
path = inc;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
C6A0FF2B0290797F04C91782 /* Documentation */ = {
|
C6A0FF2B0290797F04C91782 /* Documentation */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
@ -41,10 +41,10 @@
|
|||||||
* List of event queues and the eventmask associated with the queue.
|
* List of event queues and the eventmask associated with the queue.
|
||||||
*/
|
*/
|
||||||
struct ObjectEventListStruct {
|
struct ObjectEventListStruct {
|
||||||
xQueueHandle queue;
|
xQueueHandle queue;
|
||||||
UAVObjEventCallback cb;
|
UAVObjEventCallback cb;
|
||||||
int32_t eventMask;
|
int32_t eventMask;
|
||||||
struct ObjectEventListStruct* next;
|
struct ObjectEventListStruct *next;
|
||||||
};
|
};
|
||||||
typedef struct ObjectEventListStruct ObjectEventList;
|
typedef struct ObjectEventListStruct ObjectEventList;
|
||||||
|
|
||||||
@ -52,9 +52,9 @@ typedef struct ObjectEventListStruct ObjectEventList;
|
|||||||
* List of object instances, holds the actual data structure and instance ID
|
* List of object instances, holds the actual data structure and instance ID
|
||||||
*/
|
*/
|
||||||
struct ObjectInstListStruct {
|
struct ObjectInstListStruct {
|
||||||
void* data;
|
void *data;
|
||||||
uint16_t instId;
|
uint16_t instId;
|
||||||
struct ObjectInstListStruct* next;
|
struct ObjectInstListStruct *next;
|
||||||
};
|
};
|
||||||
typedef struct ObjectInstListStruct ObjectInstList;
|
typedef struct ObjectInstListStruct ObjectInstList;
|
||||||
|
|
||||||
@ -62,34 +62,48 @@ typedef struct ObjectInstListStruct ObjectInstList;
|
|||||||
* List of objects registered in the object manager
|
* List of objects registered in the object manager
|
||||||
*/
|
*/
|
||||||
struct ObjectListStruct {
|
struct ObjectListStruct {
|
||||||
uint32_t id; /** The object ID */
|
uint32_t id;
|
||||||
const char* name; /** The object name */
|
/** The object ID */
|
||||||
int8_t isMetaobject; /** Set to 1 if this is a metaobject */
|
const char *name;
|
||||||
int8_t isSingleInstance; /** Set to 1 if this object has a single instance */
|
/** The object name */
|
||||||
int8_t isSettings; /** Set to 1 if this object is a settings object */
|
int8_t isMetaobject;
|
||||||
uint16_t numBytes; /** Number of data bytes contained in the object (for a single instance) */
|
/** Set to 1 if this is a metaobject */
|
||||||
uint16_t numInstances; /** Number of instances */
|
int8_t isSingleInstance;
|
||||||
struct ObjectListStruct* linkedObj; /** Linked object, for regular objects this is the metaobject and for metaobjects it is the parent object */
|
/** Set to 1 if this object has a single instance */
|
||||||
ObjectInstList instances; /** List of object instances, instance 0 always exists */
|
int8_t isSettings;
|
||||||
ObjectEventList* events; /** Event queues registered on the object */
|
/** Set to 1 if this object is a settings object */
|
||||||
struct ObjectListStruct* next; /** Needed by linked list library (utlist.h) */
|
uint16_t numBytes;
|
||||||
|
/** Number of data bytes contained in the object (for a single instance) */
|
||||||
|
uint16_t numInstances;
|
||||||
|
/** Number of instances */
|
||||||
|
struct ObjectListStruct *linkedObj;
|
||||||
|
/** Linked object, for regular objects this is the metaobject and for metaobjects it is the parent object */
|
||||||
|
ObjectInstList instances;
|
||||||
|
/** List of object instances, instance 0 always exists */
|
||||||
|
ObjectEventList *events;
|
||||||
|
/** Event queues registered on the object */
|
||||||
|
struct ObjectListStruct *next;
|
||||||
|
/** Needed by linked list library (utlist.h) */
|
||||||
};
|
};
|
||||||
typedef struct ObjectListStruct ObjectList;
|
typedef struct ObjectListStruct ObjectList;
|
||||||
|
|
||||||
// Private functions
|
// Private functions
|
||||||
static int32_t sendEvent(ObjectList* obj, uint16_t instId, UAVObjEventType event);
|
static int32_t sendEvent(ObjectList * obj, uint16_t instId,
|
||||||
static ObjectInstList* createInstance(ObjectList* obj, uint16_t instId);
|
UAVObjEventType event);
|
||||||
static ObjectInstList* getInstance(ObjectList* obj, uint16_t instId);
|
static ObjectInstList *createInstance(ObjectList * obj, uint16_t instId);
|
||||||
static int32_t connectObj(UAVObjHandle obj, xQueueHandle queue, UAVObjEventCallback cb, int32_t eventMask);
|
static ObjectInstList *getInstance(ObjectList * obj, uint16_t instId);
|
||||||
static int32_t disconnectObj(UAVObjHandle obj, xQueueHandle queue, UAVObjEventCallback cb);
|
static int32_t connectObj(UAVObjHandle obj, xQueueHandle queue,
|
||||||
|
UAVObjEventCallback cb, int32_t eventMask);
|
||||||
|
static int32_t disconnectObj(UAVObjHandle obj, xQueueHandle queue,
|
||||||
|
UAVObjEventCallback cb);
|
||||||
|
|
||||||
#if defined(PIOS_INCLUDE_SDCARD)
|
#if defined(PIOS_INCLUDE_SDCARD)
|
||||||
static void objectFilename(ObjectList* obj, uint8_t* filename);
|
static void objectFilename(ObjectList * obj, uint8_t * filename);
|
||||||
static void customSPrintf(uint8_t* buffer, uint8_t* format, ...);
|
static void customSPrintf(uint8_t * buffer, uint8_t * format, ...);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Private variables
|
// Private variables
|
||||||
static ObjectList* objList;
|
static ObjectList *objList;
|
||||||
static xSemaphoreHandle mutex;
|
static xSemaphoreHandle mutex;
|
||||||
static UAVObjMetadata defMetadata;
|
static UAVObjMetadata defMetadata;
|
||||||
static UAVObjStats stats;
|
static UAVObjStats stats;
|
||||||
@ -101,40 +115,40 @@ static UAVObjStats stats;
|
|||||||
*/
|
*/
|
||||||
int32_t UAVObjInitialize()
|
int32_t UAVObjInitialize()
|
||||||
{
|
{
|
||||||
// Initialize variables
|
// Initialize variables
|
||||||
objList = NULL;
|
objList = NULL;
|
||||||
memset(&stats, 0, sizeof(UAVObjStats));
|
memset(&stats, 0, sizeof(UAVObjStats));
|
||||||
|
|
||||||
// Create mutex
|
// Create mutex
|
||||||
mutex = xSemaphoreCreateRecursiveMutex();
|
mutex = xSemaphoreCreateRecursiveMutex();
|
||||||
if (mutex == NULL)
|
if (mutex == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
// Initialize default metadata structure (metadata of metaobjects)
|
// Initialize default metadata structure (metadata of metaobjects)
|
||||||
defMetadata.access = ACCESS_READWRITE;
|
defMetadata.access = ACCESS_READWRITE;
|
||||||
defMetadata.gcsAccess = ACCESS_READWRITE;
|
defMetadata.gcsAccess = ACCESS_READWRITE;
|
||||||
defMetadata.telemetryAcked = 1;
|
defMetadata.telemetryAcked = 1;
|
||||||
defMetadata.telemetryUpdateMode = UPDATEMODE_ONCHANGE;
|
defMetadata.telemetryUpdateMode = UPDATEMODE_ONCHANGE;
|
||||||
defMetadata.telemetryUpdatePeriod = 0;
|
defMetadata.telemetryUpdatePeriod = 0;
|
||||||
defMetadata.gcsTelemetryAcked = 1;
|
defMetadata.gcsTelemetryAcked = 1;
|
||||||
defMetadata.gcsTelemetryUpdateMode = UPDATEMODE_ONCHANGE;
|
defMetadata.gcsTelemetryUpdateMode = UPDATEMODE_ONCHANGE;
|
||||||
defMetadata.gcsTelemetryUpdatePeriod = 0;
|
defMetadata.gcsTelemetryUpdatePeriod = 0;
|
||||||
defMetadata.loggingUpdateMode = UPDATEMODE_ONCHANGE;
|
defMetadata.loggingUpdateMode = UPDATEMODE_ONCHANGE;
|
||||||
defMetadata.loggingUpdatePeriod = 0;
|
defMetadata.loggingUpdatePeriod = 0;
|
||||||
|
|
||||||
// Done
|
// Done
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the statistics counters
|
* Get the statistics counters
|
||||||
* @param[out] statsOut The statistics counters will be copied there
|
* @param[out] statsOut The statistics counters will be copied there
|
||||||
*/
|
*/
|
||||||
void UAVObjGetStats(UAVObjStats* statsOut)
|
void UAVObjGetStats(UAVObjStats * statsOut)
|
||||||
{
|
{
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
memcpy(statsOut, &stats, sizeof(UAVObjStats));
|
memcpy(statsOut, &stats, sizeof(UAVObjStats));
|
||||||
xSemaphoreGiveRecursive(mutex);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -142,9 +156,9 @@ void UAVObjGetStats(UAVObjStats* statsOut)
|
|||||||
*/
|
*/
|
||||||
void UAVObjClearStats()
|
void UAVObjClearStats()
|
||||||
{
|
{
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
memset(&stats, 0, sizeof(UAVObjStats));
|
memset(&stats, 0, sizeof(UAVObjStats));
|
||||||
xSemaphoreGiveRecursive(mutex);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -160,91 +174,85 @@ void UAVObjClearStats()
|
|||||||
* \return Object handle, or NULL if failure.
|
* \return Object handle, or NULL if failure.
|
||||||
* \return
|
* \return
|
||||||
*/
|
*/
|
||||||
UAVObjHandle UAVObjRegister(uint32_t id, const char* name, const char* metaName, int32_t isMetaobject,
|
UAVObjHandle UAVObjRegister(uint32_t id, const char *name,
|
||||||
int32_t isSingleInstance, int32_t isSettings, uint32_t numBytes, UAVObjInitializeCallback initCb)
|
const char *metaName, int32_t isMetaobject,
|
||||||
|
int32_t isSingleInstance, int32_t isSettings,
|
||||||
|
uint32_t numBytes,
|
||||||
|
UAVObjInitializeCallback initCb)
|
||||||
{
|
{
|
||||||
ObjectList* objEntry;
|
ObjectList *objEntry;
|
||||||
ObjectInstList* instEntry;
|
ObjectInstList *instEntry;
|
||||||
ObjectList* metaObj;
|
ObjectList *metaObj;
|
||||||
|
|
||||||
// Get lock
|
// Get lock
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
|
|
||||||
// Check that the object is not already registered
|
// Check that the object is not already registered
|
||||||
LL_FOREACH(objList, objEntry)
|
LL_FOREACH(objList, objEntry) {
|
||||||
{
|
if (objEntry->id == id) {
|
||||||
if (objEntry->id == id)
|
// Already registered, ignore
|
||||||
{
|
xSemaphoreGiveRecursive(mutex);
|
||||||
// Already registered, ignore
|
return NULL;
|
||||||
xSemaphoreGiveRecursive(mutex);
|
}
|
||||||
return NULL;
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create and append entry
|
// Create and append entry
|
||||||
objEntry = (ObjectList*)pvPortMalloc(sizeof(ObjectList));
|
objEntry = (ObjectList *) pvPortMalloc(sizeof(ObjectList));
|
||||||
if (objEntry == NULL)
|
if (objEntry == NULL) {
|
||||||
{
|
xSemaphoreGiveRecursive(mutex);
|
||||||
xSemaphoreGiveRecursive(mutex);
|
return NULL;
|
||||||
return NULL;
|
}
|
||||||
}
|
objEntry->id = id;
|
||||||
objEntry->id = id;
|
objEntry->name = name;
|
||||||
objEntry->name = name;
|
objEntry->isMetaobject = (int8_t) isMetaobject;
|
||||||
objEntry->isMetaobject = (int8_t)isMetaobject;
|
objEntry->isSingleInstance = (int8_t) isSingleInstance;
|
||||||
objEntry->isSingleInstance = (int8_t)isSingleInstance;
|
objEntry->isSettings = (int8_t) isSettings;
|
||||||
objEntry->isSettings = (int8_t)isSettings;
|
objEntry->numBytes = numBytes;
|
||||||
objEntry->numBytes = numBytes;
|
objEntry->events = NULL;
|
||||||
objEntry->events = NULL;
|
objEntry->numInstances = 0;
|
||||||
objEntry->numInstances = 0;
|
objEntry->instances.data = NULL;
|
||||||
objEntry->instances.data = NULL;
|
objEntry->instances.instId = 0xFFFF;
|
||||||
objEntry->instances.instId = 0xFFFF;
|
objEntry->instances.next = NULL;
|
||||||
objEntry->instances.next = NULL;
|
objEntry->linkedObj = NULL; // will be set later
|
||||||
objEntry->linkedObj = NULL; // will be set later
|
LL_APPEND(objList, objEntry);
|
||||||
LL_APPEND(objList, objEntry);
|
|
||||||
|
|
||||||
// Create instance zero
|
// Create instance zero
|
||||||
instEntry = createInstance(objEntry, 0);
|
instEntry = createInstance(objEntry, 0);
|
||||||
if ( instEntry == NULL )
|
if (instEntry == NULL) {
|
||||||
{
|
xSemaphoreGiveRecursive(mutex);
|
||||||
xSemaphoreGiveRecursive(mutex);
|
return NULL;
|
||||||
return NULL;
|
}
|
||||||
}
|
// Create metaobject and update linkedObj
|
||||||
|
if (isMetaobject) {
|
||||||
|
objEntry->linkedObj = NULL; // will be set later
|
||||||
|
} else {
|
||||||
|
// Create metaobject
|
||||||
|
metaObj =
|
||||||
|
(ObjectList *) UAVObjRegister(id + 1, metaName,
|
||||||
|
NULL, 1, 1, 0,
|
||||||
|
sizeof
|
||||||
|
(UAVObjMetadata),
|
||||||
|
NULL);
|
||||||
|
// Link two objects
|
||||||
|
objEntry->linkedObj = metaObj;
|
||||||
|
metaObj->linkedObj = objEntry;
|
||||||
|
}
|
||||||
|
|
||||||
// Create metaobject and update linkedObj
|
// Initialize object fields and metadata to default values
|
||||||
if (isMetaobject)
|
if (initCb != NULL) {
|
||||||
{
|
initCb((UAVObjHandle) objEntry, 0);
|
||||||
objEntry->linkedObj = NULL; // will be set later
|
}
|
||||||
}
|
// Attempt to load object's metadata from the SD card (not done directly on the metaobject, but through the object)
|
||||||
else
|
if (!objEntry->isMetaobject) {
|
||||||
{
|
UAVObjLoad((UAVObjHandle) objEntry->linkedObj, 0);
|
||||||
// Create metaobject
|
}
|
||||||
metaObj = (ObjectList*)UAVObjRegister(id+1, metaName, NULL, 1, 1, 0, sizeof(UAVObjMetadata), NULL);
|
// If this is a settings object, attempt to load from SD card
|
||||||
// Link two objects
|
if (objEntry->isSettings) {
|
||||||
objEntry->linkedObj = metaObj;
|
UAVObjLoad((UAVObjHandle) objEntry, 0);
|
||||||
metaObj->linkedObj = objEntry;
|
}
|
||||||
}
|
// Release lock
|
||||||
|
xSemaphoreGiveRecursive(mutex);
|
||||||
// Initialize object fields and metadata to default values
|
return (UAVObjHandle) objEntry;
|
||||||
if ( initCb != NULL )
|
|
||||||
{
|
|
||||||
initCb((UAVObjHandle)objEntry, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Attempt to load object's metadata from the SD card (not done directly on the metaobject, but through the object)
|
|
||||||
if ( !objEntry->isMetaobject )
|
|
||||||
{
|
|
||||||
UAVObjLoad( (UAVObjHandle)objEntry->linkedObj, 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
// If this is a settings object, attempt to load from SD card
|
|
||||||
if ( objEntry->isSettings )
|
|
||||||
{
|
|
||||||
UAVObjLoad( (UAVObjHandle)objEntry, 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
// Release lock
|
|
||||||
xSemaphoreGiveRecursive(mutex);
|
|
||||||
return (UAVObjHandle)objEntry;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -254,26 +262,24 @@ UAVObjHandle UAVObjRegister(uint32_t id, const char* name, const char* metaName,
|
|||||||
*/
|
*/
|
||||||
UAVObjHandle UAVObjGetByID(uint32_t id)
|
UAVObjHandle UAVObjGetByID(uint32_t id)
|
||||||
{
|
{
|
||||||
ObjectList* objEntry;
|
ObjectList *objEntry;
|
||||||
|
|
||||||
// Get lock
|
// Get lock
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
|
|
||||||
// Look for object
|
// Look for object
|
||||||
LL_FOREACH(objList, objEntry)
|
LL_FOREACH(objList, objEntry) {
|
||||||
{
|
if (objEntry->id == id) {
|
||||||
if (objEntry->id == id)
|
// Release lock
|
||||||
{
|
xSemaphoreGiveRecursive(mutex);
|
||||||
// Release lock
|
// Done, object found
|
||||||
xSemaphoreGiveRecursive(mutex);
|
return (UAVObjHandle) objEntry;
|
||||||
// Done, object found
|
}
|
||||||
return (UAVObjHandle)objEntry;
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Object not found, release lock and return error
|
// Object not found, release lock and return error
|
||||||
xSemaphoreGiveRecursive(mutex);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -281,28 +287,27 @@ UAVObjHandle UAVObjGetByID(uint32_t id)
|
|||||||
* \param[in] name The name of the object
|
* \param[in] name The name of the object
|
||||||
* \return The object or NULL if not found.
|
* \return The object or NULL if not found.
|
||||||
*/
|
*/
|
||||||
UAVObjHandle UAVObjGetByName(char* name)
|
UAVObjHandle UAVObjGetByName(char *name)
|
||||||
{
|
{
|
||||||
ObjectList* objEntry;
|
ObjectList *objEntry;
|
||||||
|
|
||||||
// Get lock
|
// Get lock
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
|
|
||||||
// Look for object
|
// Look for object
|
||||||
LL_FOREACH(objList, objEntry)
|
LL_FOREACH(objList, objEntry) {
|
||||||
{
|
if (objEntry->name != NULL
|
||||||
if (objEntry->name != NULL && strcmp(objEntry->name, name) == 0)
|
&& strcmp(objEntry->name, name) == 0) {
|
||||||
{
|
// Release lock
|
||||||
// Release lock
|
xSemaphoreGiveRecursive(mutex);
|
||||||
xSemaphoreGiveRecursive(mutex);
|
// Done, object found
|
||||||
// Done, object found
|
return (UAVObjHandle) objEntry;
|
||||||
return (UAVObjHandle)objEntry;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Object not found, release lock and return error
|
// Object not found, release lock and return error
|
||||||
xSemaphoreGiveRecursive(mutex);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -312,7 +317,7 @@ UAVObjHandle UAVObjGetByName(char* name)
|
|||||||
*/
|
*/
|
||||||
uint32_t UAVObjGetID(UAVObjHandle obj)
|
uint32_t UAVObjGetID(UAVObjHandle obj)
|
||||||
{
|
{
|
||||||
return ((ObjectList*)obj)->id;
|
return ((ObjectList *) obj)->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -320,9 +325,9 @@ uint32_t UAVObjGetID(UAVObjHandle obj)
|
|||||||
* \param[in] obj The object handle
|
* \param[in] obj The object handle
|
||||||
* \return The object's name
|
* \return The object's name
|
||||||
*/
|
*/
|
||||||
const char* UAVObjGetName(UAVObjHandle obj)
|
const char *UAVObjGetName(UAVObjHandle obj)
|
||||||
{
|
{
|
||||||
return ((ObjectList*)obj)->name;
|
return ((ObjectList *) obj)->name;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -332,7 +337,7 @@ const char* UAVObjGetName(UAVObjHandle obj)
|
|||||||
*/
|
*/
|
||||||
uint32_t UAVObjGetNumBytes(UAVObjHandle obj)
|
uint32_t UAVObjGetNumBytes(UAVObjHandle obj)
|
||||||
{
|
{
|
||||||
return ((ObjectList*)obj)->numBytes;
|
return ((ObjectList *) obj)->numBytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -344,7 +349,7 @@ uint32_t UAVObjGetNumBytes(UAVObjHandle obj)
|
|||||||
*/
|
*/
|
||||||
UAVObjHandle UAVObjGetLinkedObj(UAVObjHandle obj)
|
UAVObjHandle UAVObjGetLinkedObj(UAVObjHandle obj)
|
||||||
{
|
{
|
||||||
return (UAVObjHandle)(((ObjectList*)obj)->linkedObj);
|
return (UAVObjHandle) (((ObjectList *) obj)->linkedObj);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -354,11 +359,11 @@ UAVObjHandle UAVObjGetLinkedObj(UAVObjHandle obj)
|
|||||||
*/
|
*/
|
||||||
uint16_t UAVObjGetNumInstances(UAVObjHandle obj)
|
uint16_t UAVObjGetNumInstances(UAVObjHandle obj)
|
||||||
{
|
{
|
||||||
uint32_t numInstances;
|
uint32_t numInstances;
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
numInstances = ((ObjectList*)obj)->numInstances;
|
numInstances = ((ObjectList *) obj)->numInstances;
|
||||||
xSemaphoreGiveRecursive(mutex);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
return numInstances;
|
return numInstances;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -366,32 +371,29 @@ uint16_t UAVObjGetNumInstances(UAVObjHandle obj)
|
|||||||
* \param[in] obj The object handle
|
* \param[in] obj The object handle
|
||||||
* \return The instance ID or 0 if an error
|
* \return The instance ID or 0 if an error
|
||||||
*/
|
*/
|
||||||
uint16_t UAVObjCreateInstance(UAVObjHandle obj, UAVObjInitializeCallback initCb)
|
uint16_t UAVObjCreateInstance(UAVObjHandle obj,
|
||||||
|
UAVObjInitializeCallback initCb)
|
||||||
{
|
{
|
||||||
ObjectList* objEntry;
|
ObjectList *objEntry;
|
||||||
ObjectInstList* instEntry;
|
ObjectInstList *instEntry;
|
||||||
|
|
||||||
// Lock
|
// Lock
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
|
|
||||||
// Create new instance
|
// Create new instance
|
||||||
objEntry = (ObjectList*)obj;
|
objEntry = (ObjectList *) obj;
|
||||||
instEntry = createInstance(objEntry, objEntry->numInstances);
|
instEntry = createInstance(objEntry, objEntry->numInstances);
|
||||||
if ( instEntry == NULL )
|
if (instEntry == NULL) {
|
||||||
{
|
xSemaphoreGiveRecursive(mutex);
|
||||||
xSemaphoreGiveRecursive(mutex);
|
return -1;
|
||||||
return -1;
|
}
|
||||||
}
|
// Initialize instance data
|
||||||
|
if (initCb != NULL) {
|
||||||
// Initialize instance data
|
initCb(obj, instEntry->instId);
|
||||||
if ( initCb != NULL )
|
}
|
||||||
{
|
// Unlock
|
||||||
initCb(obj, instEntry->instId);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
}
|
return instEntry->instId;
|
||||||
|
|
||||||
// Unlock
|
|
||||||
xSemaphoreGiveRecursive(mutex);
|
|
||||||
return instEntry->instId;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -401,7 +403,7 @@ uint16_t UAVObjCreateInstance(UAVObjHandle obj, UAVObjInitializeCallback initCb)
|
|||||||
*/
|
*/
|
||||||
int32_t UAVObjIsSingleInstance(UAVObjHandle obj)
|
int32_t UAVObjIsSingleInstance(UAVObjHandle obj)
|
||||||
{
|
{
|
||||||
return ((ObjectList*)obj)->isSingleInstance;
|
return ((ObjectList *) obj)->isSingleInstance;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -411,7 +413,7 @@ int32_t UAVObjIsSingleInstance(UAVObjHandle obj)
|
|||||||
*/
|
*/
|
||||||
int32_t UAVObjIsMetaobject(UAVObjHandle obj)
|
int32_t UAVObjIsMetaobject(UAVObjHandle obj)
|
||||||
{
|
{
|
||||||
return ((ObjectList*)obj)->isMetaobject;
|
return ((ObjectList *) obj)->isMetaobject;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -421,7 +423,7 @@ int32_t UAVObjIsMetaobject(UAVObjHandle obj)
|
|||||||
*/
|
*/
|
||||||
int32_t UAVObjIsSettings(UAVObjHandle obj)
|
int32_t UAVObjIsSettings(UAVObjHandle obj)
|
||||||
{
|
{
|
||||||
return ((ObjectList*)obj)->isSettings;
|
return ((ObjectList *) obj)->isSettings;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -431,41 +433,39 @@ int32_t UAVObjIsSettings(UAVObjHandle obj)
|
|||||||
* \param[in] dataIn The byte array
|
* \param[in] dataIn The byte array
|
||||||
* \return 0 if success or -1 if failure
|
* \return 0 if success or -1 if failure
|
||||||
*/
|
*/
|
||||||
int32_t UAVObjUnpack(UAVObjHandle obj, uint16_t instId, const uint8_t* dataIn)
|
int32_t UAVObjUnpack(UAVObjHandle obj, uint16_t instId,
|
||||||
|
const uint8_t * dataIn)
|
||||||
{
|
{
|
||||||
ObjectList* objEntry;
|
ObjectList *objEntry;
|
||||||
ObjectInstList* instEntry;
|
ObjectInstList *instEntry;
|
||||||
|
|
||||||
// Lock
|
// Lock
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
|
|
||||||
// Cast handle to object
|
// Cast handle to object
|
||||||
objEntry = (ObjectList*)obj;
|
objEntry = (ObjectList *) obj;
|
||||||
|
|
||||||
// Get the instance
|
// Get the instance
|
||||||
instEntry = getInstance(objEntry, instId);
|
instEntry = getInstance(objEntry, instId);
|
||||||
|
|
||||||
// If the instance does not exist create it and any other instances before it
|
// If the instance does not exist create it and any other instances before it
|
||||||
if ( instEntry == NULL )
|
if (instEntry == NULL) {
|
||||||
{
|
instEntry = createInstance(objEntry, instId);
|
||||||
instEntry = createInstance(objEntry, instId);
|
if (instEntry == NULL) {
|
||||||
if ( instEntry == NULL )
|
// Error, unlock and return
|
||||||
{
|
xSemaphoreGiveRecursive(mutex);
|
||||||
// Error, unlock and return
|
return -1;
|
||||||
xSemaphoreGiveRecursive(mutex);
|
}
|
||||||
return -1;
|
}
|
||||||
}
|
// Set the data
|
||||||
}
|
memcpy(instEntry->data, dataIn, objEntry->numBytes);
|
||||||
|
|
||||||
// Set the data
|
// Fire event
|
||||||
memcpy(instEntry->data, dataIn, objEntry->numBytes);
|
sendEvent(objEntry, instId, EV_UNPACKED);
|
||||||
|
|
||||||
// Fire event
|
// Unlock
|
||||||
sendEvent(objEntry, instId, EV_UNPACKED);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
|
return 0;
|
||||||
// Unlock
|
|
||||||
xSemaphoreGiveRecursive(mutex);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -475,32 +475,30 @@ int32_t UAVObjUnpack(UAVObjHandle obj, uint16_t instId, const uint8_t* dataIn)
|
|||||||
* \param[out] dataOut The byte array
|
* \param[out] dataOut The byte array
|
||||||
* \return 0 if success or -1 if failure
|
* \return 0 if success or -1 if failure
|
||||||
*/
|
*/
|
||||||
int32_t UAVObjPack(UAVObjHandle obj, uint16_t instId, uint8_t* dataOut)
|
int32_t UAVObjPack(UAVObjHandle obj, uint16_t instId, uint8_t * dataOut)
|
||||||
{
|
{
|
||||||
ObjectList* objEntry;
|
ObjectList *objEntry;
|
||||||
ObjectInstList* instEntry;
|
ObjectInstList *instEntry;
|
||||||
|
|
||||||
// Lock
|
// Lock
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
|
|
||||||
// Cast handle to object
|
// Cast handle to object
|
||||||
objEntry = (ObjectList*)obj;
|
objEntry = (ObjectList *) obj;
|
||||||
|
|
||||||
// Get the instance
|
// Get the instance
|
||||||
instEntry = getInstance(objEntry, instId);
|
instEntry = getInstance(objEntry, instId);
|
||||||
if ( instEntry == NULL )
|
if (instEntry == NULL) {
|
||||||
{
|
// Error, unlock and return
|
||||||
// Error, unlock and return
|
xSemaphoreGiveRecursive(mutex);
|
||||||
xSemaphoreGiveRecursive(mutex);
|
return -1;
|
||||||
return -1;
|
}
|
||||||
}
|
// Pack data
|
||||||
|
memcpy(dataOut, instEntry->data, objEntry->numBytes);
|
||||||
|
|
||||||
// Pack data
|
// Unlock
|
||||||
memcpy(dataOut, instEntry->data, objEntry->numBytes);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
|
return 0;
|
||||||
// Unlock
|
|
||||||
xSemaphoreGiveRecursive(mutex);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -512,64 +510,52 @@ int32_t UAVObjPack(UAVObjHandle obj, uint16_t instId, uint8_t* dataOut)
|
|||||||
* @param[in] file File to append to
|
* @param[in] file File to append to
|
||||||
* @return 0 if success or -1 if failure
|
* @return 0 if success or -1 if failure
|
||||||
*/
|
*/
|
||||||
int32_t UAVObjSaveToFile(UAVObjHandle obj, uint16_t instId, FILEINFO* file)
|
int32_t UAVObjSaveToFile(UAVObjHandle obj, uint16_t instId,
|
||||||
|
FILEINFO * file)
|
||||||
{
|
{
|
||||||
#if defined(PIOS_INCLUDE_SDCARD)
|
#if defined(PIOS_INCLUDE_SDCARD)
|
||||||
uint32_t bytesWritten;
|
uint32_t bytesWritten;
|
||||||
ObjectList* objEntry;
|
ObjectList *objEntry;
|
||||||
ObjectInstList* instEntry;
|
ObjectInstList *instEntry;
|
||||||
|
|
||||||
// Check for file system availability
|
// Check for file system availability
|
||||||
if ( PIOS_SDCARD_IsMounted() == 0 )
|
if (PIOS_SDCARD_IsMounted() == 0) {
|
||||||
{
|
return -1;
|
||||||
return -1;
|
}
|
||||||
}
|
// Lock
|
||||||
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
|
|
||||||
// Lock
|
// Cast to object
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
objEntry = (ObjectList *) obj;
|
||||||
|
|
||||||
// Cast to object
|
// Get the instance information
|
||||||
objEntry = (ObjectList*)obj;
|
instEntry = getInstance(objEntry, instId);
|
||||||
|
if (instEntry == NULL) {
|
||||||
|
xSemaphoreGiveRecursive(mutex);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
// Write the object ID
|
||||||
|
PIOS_FWRITE(file, &objEntry->id, sizeof(objEntry->id),
|
||||||
|
&bytesWritten);
|
||||||
|
|
||||||
// Get the instance information
|
// Write the instance ID
|
||||||
instEntry = getInstance(objEntry, instId);
|
if (!objEntry->isSingleInstance) {
|
||||||
if ( instEntry == NULL )
|
PIOS_FWRITE(file, &instEntry->instId,
|
||||||
{
|
sizeof(instEntry->instId), &bytesWritten);
|
||||||
xSemaphoreGiveRecursive(mutex);
|
}
|
||||||
return -1;
|
// Write the data and check that the write was successful
|
||||||
}
|
PIOS_FWRITE(file, instEntry->data, objEntry->numBytes,
|
||||||
|
&bytesWritten);
|
||||||
// Write the object ID
|
if (bytesWritten != objEntry->numBytes) {
|
||||||
PIOS_FWRITE(file,&objEntry->id,sizeof(objEntry->id),&bytesWritten);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
|
return -1;
|
||||||
// Write the instance ID
|
}
|
||||||
if (!objEntry->isSingleInstance)
|
// Done
|
||||||
{
|
xSemaphoreGiveRecursive(mutex);
|
||||||
PIOS_FWRITE(file,&instEntry->instId,sizeof(instEntry->instId),&bytesWritten);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write the data and check that the write was successful
|
|
||||||
PIOS_FWRITE(file,instEntry->data,objEntry->numBytes,&bytesWritten);
|
|
||||||
if ( bytesWritten != objEntry->numBytes )
|
|
||||||
{
|
|
||||||
xSemaphoreGiveRecursive(mutex);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Done
|
|
||||||
xSemaphoreGiveRecursive(mutex);
|
|
||||||
#endif /* PIOS_INCLUDE_SDCARD */
|
#endif /* PIOS_INCLUDE_SDCARD */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct fileHeader {
|
|
||||||
uint32_t id;
|
|
||||||
uint16_t instId;
|
|
||||||
uint16_t size;
|
|
||||||
} __attribute__((packed));
|
|
||||||
|
|
||||||
#define FLASH_MASK 0x001ff000 /* Select a sector */
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save the data of the specified object to the file system (SD card).
|
* Save the data of the specified object to the file system (SD card).
|
||||||
* If the object contains multiple instances, all of them will be saved.
|
* If the object contains multiple instances, all of them will be saved.
|
||||||
@ -583,71 +569,56 @@ struct fileHeader {
|
|||||||
int32_t UAVObjSave(UAVObjHandle obj, uint16_t instId)
|
int32_t UAVObjSave(UAVObjHandle obj, uint16_t instId)
|
||||||
{
|
{
|
||||||
#if defined(PIOS_INCLUDE_FLASH_SECTOR_SETTINGS)
|
#if defined(PIOS_INCLUDE_FLASH_SECTOR_SETTINGS)
|
||||||
ObjectList* objEntry = (ObjectList*)obj;
|
ObjectList *objEntry = (ObjectList *) obj;
|
||||||
|
|
||||||
if(objEntry == NULL)
|
if (objEntry == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
ObjectInstList* instEntry = getInstance(objEntry, instId);
|
ObjectInstList *instEntry = getInstance(objEntry, instId);
|
||||||
|
|
||||||
if(instEntry == NULL)
|
if (instEntry == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if(instEntry->data == NULL)
|
if (instEntry->data == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
if (PIOS_FLASHFS_ObjSave(obj, instId, instEntry->data) != 0)
|
||||||
struct fileHeader header = {
|
return -1;
|
||||||
.id = objEntry->id,
|
|
||||||
.instId = instId,
|
|
||||||
.size = objEntry->numBytes
|
|
||||||
};
|
|
||||||
|
|
||||||
uint32_t addr = (objEntry->id & FLASH_MASK);
|
|
||||||
PIOS_Flash_W25X_EraseSector(addr);
|
|
||||||
PIOS_Flash_W25X_WriteData(addr, (uint8_t *) &header, sizeof(header));
|
|
||||||
PIOS_Flash_W25X_WriteData(addr + sizeof(header), instEntry->data,objEntry->numBytes);
|
|
||||||
#endif
|
#endif
|
||||||
#if defined(PIOS_INCLUDE_SDCARD)
|
#if defined(PIOS_INCLUDE_SDCARD)
|
||||||
FILEINFO file;
|
FILEINFO file;
|
||||||
ObjectList* objEntry;
|
ObjectList *objEntry;
|
||||||
uint8_t filename[14];
|
uint8_t filename[14];
|
||||||
|
|
||||||
// Check for file system availability
|
// Check for file system availability
|
||||||
if ( PIOS_SDCARD_IsMounted() == 0 )
|
if (PIOS_SDCARD_IsMounted() == 0) {
|
||||||
{
|
return -1;
|
||||||
return -1;
|
}
|
||||||
}
|
// Lock
|
||||||
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
|
|
||||||
// Lock
|
// Cast to object
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
objEntry = (ObjectList *) obj;
|
||||||
|
|
||||||
// Cast to object
|
// Get filename
|
||||||
objEntry = (ObjectList*)obj;
|
objectFilename(objEntry, filename);
|
||||||
|
|
||||||
// Get filename
|
// Open file
|
||||||
objectFilename(objEntry, filename);
|
if (PIOS_FOPEN_WRITE(filename, file)) {
|
||||||
|
xSemaphoreGiveRecursive(mutex);
|
||||||
// Open file
|
return -1;
|
||||||
if ( PIOS_FOPEN_WRITE(filename,file) )
|
}
|
||||||
{
|
// Append object
|
||||||
xSemaphoreGiveRecursive(mutex);
|
if (UAVObjSaveToFile(obj, instId, &file) == -1) {
|
||||||
return -1;
|
PIOS_FCLOSE(file);
|
||||||
}
|
xSemaphoreGiveRecursive(mutex);
|
||||||
|
return -1;
|
||||||
// Append object
|
}
|
||||||
if ( UAVObjSaveToFile(obj, instId, &file) == -1 )
|
// Done, close file and unlock
|
||||||
{
|
PIOS_FCLOSE(file);
|
||||||
PIOS_FCLOSE(file);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
xSemaphoreGiveRecursive(mutex);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Done, close file and unlock
|
|
||||||
PIOS_FCLOSE(file);
|
|
||||||
xSemaphoreGiveRecursive(mutex);
|
|
||||||
#endif /* PIOS_INCLUDE_SDCARD */
|
#endif /* PIOS_INCLUDE_SDCARD */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -655,82 +626,71 @@ int32_t UAVObjSave(UAVObjHandle obj, uint16_t instId)
|
|||||||
* @param[in] file File to read from
|
* @param[in] file File to read from
|
||||||
* @return The handle of the object loaded or NULL if a failure
|
* @return The handle of the object loaded or NULL if a failure
|
||||||
*/
|
*/
|
||||||
UAVObjHandle UAVObjLoadFromFile(FILEINFO* file)
|
UAVObjHandle UAVObjLoadFromFile(FILEINFO * file)
|
||||||
{
|
{
|
||||||
#if defined(PIOS_INCLUDE_SDCARD)
|
#if defined(PIOS_INCLUDE_SDCARD)
|
||||||
uint32_t bytesRead;
|
uint32_t bytesRead;
|
||||||
ObjectList* objEntry;
|
ObjectList *objEntry;
|
||||||
ObjectInstList* instEntry;
|
ObjectInstList *instEntry;
|
||||||
uint32_t objId;
|
uint32_t objId;
|
||||||
uint16_t instId;
|
uint16_t instId;
|
||||||
UAVObjHandle obj;
|
UAVObjHandle obj;
|
||||||
|
|
||||||
// Check for file system availability
|
// Check for file system availability
|
||||||
if ( PIOS_SDCARD_IsMounted() == 0 )
|
if (PIOS_SDCARD_IsMounted() == 0) {
|
||||||
{
|
return NULL;
|
||||||
return NULL;
|
}
|
||||||
}
|
// Lock
|
||||||
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
|
|
||||||
// Lock
|
// Read the object ID
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
if (PIOS_FREAD(file, &objId, sizeof(objId), &bytesRead)) {
|
||||||
|
xSemaphoreGiveRecursive(mutex);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
// Get the object
|
||||||
|
obj = UAVObjGetByID(objId);
|
||||||
|
if (obj == 0) {
|
||||||
|
xSemaphoreGiveRecursive(mutex);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
objEntry = (ObjectList *) obj;
|
||||||
|
|
||||||
// Read the object ID
|
// Get the instance ID
|
||||||
if ( PIOS_FREAD(file,&objId,sizeof(objId),&bytesRead) )
|
instId = 0;
|
||||||
{
|
if (!objEntry->isSingleInstance) {
|
||||||
xSemaphoreGiveRecursive(mutex);
|
if (PIOS_FREAD
|
||||||
return NULL;
|
(file, &instId, sizeof(instId), &bytesRead)) {
|
||||||
}
|
xSemaphoreGiveRecursive(mutex);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Get the instance information
|
||||||
|
instEntry = getInstance(objEntry, instId);
|
||||||
|
|
||||||
// Get the object
|
// If the instance does not exist create it and any other instances before it
|
||||||
obj = UAVObjGetByID(objId);
|
if (instEntry == NULL) {
|
||||||
if ( obj == 0 )
|
instEntry = createInstance(objEntry, instId);
|
||||||
{
|
if (instEntry == NULL) {
|
||||||
xSemaphoreGiveRecursive(mutex);
|
// Error, unlock and return
|
||||||
return NULL;
|
xSemaphoreGiveRecursive(mutex);
|
||||||
}
|
return NULL;
|
||||||
objEntry = (ObjectList*)obj;
|
}
|
||||||
|
}
|
||||||
|
// Read the instance data
|
||||||
|
if (PIOS_FREAD
|
||||||
|
(file, instEntry->data, objEntry->numBytes, &bytesRead)) {
|
||||||
|
xSemaphoreGiveRecursive(mutex);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
// Fire event
|
||||||
|
sendEvent(objEntry, instId, EV_UNPACKED);
|
||||||
|
|
||||||
// Get the instance ID
|
// Unlock
|
||||||
instId = 0;
|
xSemaphoreGiveRecursive(mutex);
|
||||||
if ( !objEntry->isSingleInstance )
|
return obj;
|
||||||
{
|
|
||||||
if ( PIOS_FREAD(file,&instId,sizeof(instId),&bytesRead) )
|
|
||||||
{
|
|
||||||
xSemaphoreGiveRecursive(mutex);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the instance information
|
|
||||||
instEntry = getInstance(objEntry, instId);
|
|
||||||
|
|
||||||
// If the instance does not exist create it and any other instances before it
|
|
||||||
if ( instEntry == NULL )
|
|
||||||
{
|
|
||||||
instEntry = createInstance(objEntry, instId);
|
|
||||||
if ( instEntry == NULL )
|
|
||||||
{
|
|
||||||
// Error, unlock and return
|
|
||||||
xSemaphoreGiveRecursive(mutex);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Read the instance data
|
|
||||||
if ( PIOS_FREAD(file,instEntry->data,objEntry->numBytes,&bytesRead) )
|
|
||||||
{
|
|
||||||
xSemaphoreGiveRecursive(mutex);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fire event
|
|
||||||
sendEvent(objEntry, instId, EV_UNPACKED);
|
|
||||||
|
|
||||||
// Unlock
|
|
||||||
xSemaphoreGiveRecursive(mutex);
|
|
||||||
return obj;
|
|
||||||
#else /* PIOS_INCLUDE_SDCARD */
|
#else /* PIOS_INCLUDE_SDCARD */
|
||||||
return NULL;
|
return NULL;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -745,87 +705,70 @@ UAVObjHandle UAVObjLoadFromFile(FILEINFO* file)
|
|||||||
int32_t UAVObjLoad(UAVObjHandle obj, uint16_t instId)
|
int32_t UAVObjLoad(UAVObjHandle obj, uint16_t instId)
|
||||||
{
|
{
|
||||||
#if defined(PIOS_INCLUDE_FLASH_SECTOR_SETTINGS)
|
#if defined(PIOS_INCLUDE_FLASH_SECTOR_SETTINGS)
|
||||||
ObjectList* objEntry = (ObjectList*)obj;
|
ObjectList *objEntry = (ObjectList *) obj;
|
||||||
|
|
||||||
if(objEntry == NULL)
|
if (objEntry == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
ObjectInstList* instEntry = getInstance(objEntry, instId);
|
ObjectInstList *instEntry = getInstance(objEntry, instId);
|
||||||
|
|
||||||
if(instEntry == NULL)
|
if (instEntry == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if(instEntry->data == NULL)
|
if (instEntry->data == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
struct fileHeader header;
|
// Fire event on success
|
||||||
uint32_t addr = (objEntry->id & FLASH_MASK);
|
if (PIOS_FLASHFS_ObjLoad(obj, instId, instEntry->data) == 0)
|
||||||
|
sendEvent(objEntry, instId, EV_UNPACKED);
|
||||||
PIOS_Flash_W25X_ReadData(addr, (uint8_t *) &header, sizeof(header));
|
else
|
||||||
|
return -1;
|
||||||
if(header.id != objEntry->id)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
// Read the instance data
|
|
||||||
if (PIOS_Flash_W25X_ReadData(addr + sizeof(header) ,instEntry->data, objEntry->numBytes) != 0)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
// Fire event
|
|
||||||
sendEvent(objEntry, instId, EV_UNPACKED);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PIOS_INCLUDE_SDCARD)
|
#if defined(PIOS_INCLUDE_SDCARD)
|
||||||
FILEINFO file;
|
FILEINFO file;
|
||||||
ObjectList* objEntry;
|
ObjectList *objEntry;
|
||||||
UAVObjHandle loadedObj;
|
UAVObjHandle loadedObj;
|
||||||
ObjectList* loadedObjEntry;
|
ObjectList *loadedObjEntry;
|
||||||
uint8_t filename[14];
|
uint8_t filename[14];
|
||||||
|
|
||||||
// Check for file system availability
|
// Check for file system availability
|
||||||
if ( PIOS_SDCARD_IsMounted() == 0 )
|
if (PIOS_SDCARD_IsMounted() == 0) {
|
||||||
{
|
return -1;
|
||||||
return -1;
|
}
|
||||||
}
|
// Lock
|
||||||
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
|
|
||||||
// Lock
|
// Cast to object
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
objEntry = (ObjectList *) obj;
|
||||||
|
|
||||||
// Cast to object
|
// Get filename
|
||||||
objEntry = (ObjectList*)obj;
|
objectFilename(objEntry, filename);
|
||||||
|
|
||||||
// Get filename
|
// Open file
|
||||||
objectFilename(objEntry, filename);
|
if (PIOS_FOPEN_READ(filename, file)) {
|
||||||
|
xSemaphoreGiveRecursive(mutex);
|
||||||
// Open file
|
return -1;
|
||||||
if ( PIOS_FOPEN_READ(filename,file) )
|
}
|
||||||
{
|
// Load object
|
||||||
xSemaphoreGiveRecursive(mutex);
|
loadedObj = UAVObjLoadFromFile(&file);
|
||||||
return -1;
|
if (loadedObj == 0) {
|
||||||
}
|
PIOS_FCLOSE(file);
|
||||||
|
xSemaphoreGiveRecursive(mutex);
|
||||||
// Load object
|
return -1;
|
||||||
loadedObj = UAVObjLoadFromFile(&file);
|
}
|
||||||
if (loadedObj == 0)
|
// Check that the IDs match
|
||||||
{
|
loadedObjEntry = (ObjectList *) loadedObj;
|
||||||
PIOS_FCLOSE(file);
|
if (loadedObjEntry->id != objEntry->id) {
|
||||||
xSemaphoreGiveRecursive(mutex);
|
PIOS_FCLOSE(file);
|
||||||
return -1;
|
xSemaphoreGiveRecursive(mutex);
|
||||||
}
|
return -1;
|
||||||
|
}
|
||||||
// Check that the IDs match
|
// Done, close file and unlock
|
||||||
loadedObjEntry = (ObjectList*)loadedObj;
|
PIOS_FCLOSE(file);
|
||||||
if ( loadedObjEntry->id != objEntry->id )
|
xSemaphoreGiveRecursive(mutex);
|
||||||
{
|
|
||||||
PIOS_FCLOSE(file);
|
|
||||||
xSemaphoreGiveRecursive(mutex);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Done, close file and unlock
|
|
||||||
PIOS_FCLOSE(file);
|
|
||||||
xSemaphoreGiveRecursive(mutex);
|
|
||||||
#endif /* PIOS_INCLUDE_SDCARD */
|
#endif /* PIOS_INCLUDE_SDCARD */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -837,40 +780,32 @@ int32_t UAVObjLoad(UAVObjHandle obj, uint16_t instId)
|
|||||||
int32_t UAVObjDelete(UAVObjHandle obj, uint16_t instId)
|
int32_t UAVObjDelete(UAVObjHandle obj, uint16_t instId)
|
||||||
{
|
{
|
||||||
#if defined(PIOS_INCLUDE_FLASH_SECTOR_SETTINGS)
|
#if defined(PIOS_INCLUDE_FLASH_SECTOR_SETTINGS)
|
||||||
ObjectList* objEntry = (ObjectList*)obj;
|
PIOS_FLASHFS_ObjDelete(obj, instId);
|
||||||
|
|
||||||
if(objEntry == NULL)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
uint32_t addr = (objEntry->id & FLASH_MASK);
|
|
||||||
PIOS_Flash_W25X_EraseSector(addr);
|
|
||||||
#endif
|
#endif
|
||||||
#if defined(PIOS_INCLUDE_SDCARD)
|
#if defined(PIOS_INCLUDE_SDCARD)
|
||||||
ObjectList* objEntry;
|
ObjectList *objEntry;
|
||||||
uint8_t filename[14];
|
uint8_t filename[14];
|
||||||
|
|
||||||
// Check for file system availability
|
// Check for file system availability
|
||||||
if ( PIOS_SDCARD_IsMounted() == 0 )
|
if (PIOS_SDCARD_IsMounted() == 0) {
|
||||||
{
|
return -1;
|
||||||
return -1;
|
}
|
||||||
}
|
// Lock
|
||||||
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
|
|
||||||
// Lock
|
// Cast to object
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
objEntry = (ObjectList *) obj;
|
||||||
|
|
||||||
// Cast to object
|
// Get filename
|
||||||
objEntry = (ObjectList*)obj;
|
objectFilename(objEntry, filename);
|
||||||
|
|
||||||
// Get filename
|
// Delete file
|
||||||
objectFilename(objEntry, filename);
|
PIOS_FUNLINK(filename);
|
||||||
|
|
||||||
// Delete file
|
// Done
|
||||||
PIOS_FUNLINK(filename);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
|
|
||||||
// Done
|
|
||||||
xSemaphoreGiveRecursive(mutex);
|
|
||||||
#endif /* PIOS_INCLUDE_SDCARD */
|
#endif /* PIOS_INCLUDE_SDCARD */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -879,29 +814,27 @@ int32_t UAVObjDelete(UAVObjHandle obj, uint16_t instId)
|
|||||||
*/
|
*/
|
||||||
int32_t UAVObjSaveSettings()
|
int32_t UAVObjSaveSettings()
|
||||||
{
|
{
|
||||||
ObjectList* objEntry;
|
ObjectList *objEntry;
|
||||||
|
|
||||||
// Get lock
|
// Get lock
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
|
|
||||||
// Save all settings objects
|
// Save all settings objects
|
||||||
LL_FOREACH(objList, objEntry)
|
LL_FOREACH(objList, objEntry) {
|
||||||
{
|
// Check if this is a settings object
|
||||||
// Check if this is a settings object
|
if (objEntry->isSettings) {
|
||||||
if ( objEntry->isSettings )
|
// Save object
|
||||||
{
|
if (UAVObjSave((UAVObjHandle) objEntry, 0) ==
|
||||||
// Save object
|
-1) {
|
||||||
if ( UAVObjSave( (UAVObjHandle)objEntry, 0 ) == -1 )
|
xSemaphoreGiveRecursive(mutex);
|
||||||
{
|
return -1;
|
||||||
xSemaphoreGiveRecursive(mutex);
|
}
|
||||||
return -1;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Done
|
// Done
|
||||||
xSemaphoreGiveRecursive(mutex);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -910,29 +843,27 @@ int32_t UAVObjSaveSettings()
|
|||||||
*/
|
*/
|
||||||
int32_t UAVObjLoadSettings()
|
int32_t UAVObjLoadSettings()
|
||||||
{
|
{
|
||||||
ObjectList* objEntry;
|
ObjectList *objEntry;
|
||||||
|
|
||||||
// Get lock
|
// Get lock
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
|
|
||||||
// Load all settings objects
|
// Load all settings objects
|
||||||
LL_FOREACH(objList, objEntry)
|
LL_FOREACH(objList, objEntry) {
|
||||||
{
|
// Check if this is a settings object
|
||||||
// Check if this is a settings object
|
if (objEntry->isSettings) {
|
||||||
if ( objEntry->isSettings )
|
// Load object
|
||||||
{
|
if (UAVObjLoad((UAVObjHandle) objEntry, 0) ==
|
||||||
// Load object
|
-1) {
|
||||||
if ( UAVObjLoad( (UAVObjHandle)objEntry, 0 ) == -1 )
|
xSemaphoreGiveRecursive(mutex);
|
||||||
{
|
return -1;
|
||||||
xSemaphoreGiveRecursive(mutex);
|
}
|
||||||
return -1;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Done
|
// Done
|
||||||
xSemaphoreGiveRecursive(mutex);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -941,29 +872,27 @@ int32_t UAVObjLoadSettings()
|
|||||||
*/
|
*/
|
||||||
int32_t UAVObjDeleteSettings()
|
int32_t UAVObjDeleteSettings()
|
||||||
{
|
{
|
||||||
ObjectList* objEntry;
|
ObjectList *objEntry;
|
||||||
|
|
||||||
// Get lock
|
// Get lock
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
|
|
||||||
// Save all settings objects
|
// Save all settings objects
|
||||||
LL_FOREACH(objList, objEntry)
|
LL_FOREACH(objList, objEntry) {
|
||||||
{
|
// Check if this is a settings object
|
||||||
// Check if this is a settings object
|
if (objEntry->isSettings) {
|
||||||
if ( objEntry->isSettings )
|
// Save object
|
||||||
{
|
if (UAVObjDelete((UAVObjHandle) objEntry, 0)
|
||||||
// Save object
|
== -1) {
|
||||||
if ( UAVObjDelete( (UAVObjHandle)objEntry, 0 ) == -1 )
|
xSemaphoreGiveRecursive(mutex);
|
||||||
{
|
return -1;
|
||||||
xSemaphoreGiveRecursive(mutex);
|
}
|
||||||
return -1;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Done
|
// Done
|
||||||
xSemaphoreGiveRecursive(mutex);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -972,29 +901,27 @@ int32_t UAVObjDeleteSettings()
|
|||||||
*/
|
*/
|
||||||
int32_t UAVObjSaveMetaobjects()
|
int32_t UAVObjSaveMetaobjects()
|
||||||
{
|
{
|
||||||
ObjectList* objEntry;
|
ObjectList *objEntry;
|
||||||
|
|
||||||
// Get lock
|
// Get lock
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
|
|
||||||
// Save all settings objects
|
// Save all settings objects
|
||||||
LL_FOREACH(objList, objEntry)
|
LL_FOREACH(objList, objEntry) {
|
||||||
{
|
// Check if this is a settings object
|
||||||
// Check if this is a settings object
|
if (objEntry->isMetaobject) {
|
||||||
if ( objEntry->isMetaobject )
|
// Save object
|
||||||
{
|
if (UAVObjSave((UAVObjHandle) objEntry, 0) ==
|
||||||
// Save object
|
-1) {
|
||||||
if ( UAVObjSave( (UAVObjHandle)objEntry, 0 ) == -1 )
|
xSemaphoreGiveRecursive(mutex);
|
||||||
{
|
return -1;
|
||||||
xSemaphoreGiveRecursive(mutex);
|
}
|
||||||
return -1;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Done
|
// Done
|
||||||
xSemaphoreGiveRecursive(mutex);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1003,29 +930,27 @@ int32_t UAVObjSaveMetaobjects()
|
|||||||
*/
|
*/
|
||||||
int32_t UAVObjLoadMetaobjects()
|
int32_t UAVObjLoadMetaobjects()
|
||||||
{
|
{
|
||||||
ObjectList* objEntry;
|
ObjectList *objEntry;
|
||||||
|
|
||||||
// Get lock
|
// Get lock
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
|
|
||||||
// Load all settings objects
|
// Load all settings objects
|
||||||
LL_FOREACH(objList, objEntry)
|
LL_FOREACH(objList, objEntry) {
|
||||||
{
|
// Check if this is a settings object
|
||||||
// Check if this is a settings object
|
if (objEntry->isMetaobject) {
|
||||||
if ( objEntry->isMetaobject )
|
// Load object
|
||||||
{
|
if (UAVObjLoad((UAVObjHandle) objEntry, 0) ==
|
||||||
// Load object
|
-1) {
|
||||||
if ( UAVObjLoad( (UAVObjHandle)objEntry, 0 ) == -1 )
|
xSemaphoreGiveRecursive(mutex);
|
||||||
{
|
return -1;
|
||||||
xSemaphoreGiveRecursive(mutex);
|
}
|
||||||
return -1;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Done
|
// Done
|
||||||
xSemaphoreGiveRecursive(mutex);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1034,29 +959,27 @@ int32_t UAVObjLoadMetaobjects()
|
|||||||
*/
|
*/
|
||||||
int32_t UAVObjDeleteMetaobjects()
|
int32_t UAVObjDeleteMetaobjects()
|
||||||
{
|
{
|
||||||
ObjectList* objEntry;
|
ObjectList *objEntry;
|
||||||
|
|
||||||
// Get lock
|
// Get lock
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
|
|
||||||
// Load all settings objects
|
// Load all settings objects
|
||||||
LL_FOREACH(objList, objEntry)
|
LL_FOREACH(objList, objEntry) {
|
||||||
{
|
// Check if this is a settings object
|
||||||
// Check if this is a settings object
|
if (objEntry->isMetaobject) {
|
||||||
if ( objEntry->isMetaobject )
|
// Load object
|
||||||
{
|
if (UAVObjDelete((UAVObjHandle) objEntry, 0)
|
||||||
// Load object
|
== -1) {
|
||||||
if ( UAVObjDelete( (UAVObjHandle)objEntry, 0 ) == -1 )
|
xSemaphoreGiveRecursive(mutex);
|
||||||
{
|
return -1;
|
||||||
xSemaphoreGiveRecursive(mutex);
|
}
|
||||||
return -1;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Done
|
// Done
|
||||||
xSemaphoreGiveRecursive(mutex);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1065,9 +988,9 @@ int32_t UAVObjDeleteMetaobjects()
|
|||||||
* \param[in] dataIn The object's data structure
|
* \param[in] dataIn The object's data structure
|
||||||
* \return 0 if success or -1 if failure
|
* \return 0 if success or -1 if failure
|
||||||
*/
|
*/
|
||||||
int32_t UAVObjSetData(UAVObjHandle obj, const void* dataIn)
|
int32_t UAVObjSetData(UAVObjHandle obj, const void *dataIn)
|
||||||
{
|
{
|
||||||
return UAVObjSetInstanceData(obj, 0, dataIn);
|
return UAVObjSetInstanceData(obj, 0, dataIn);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1076,9 +999,9 @@ int32_t UAVObjSetData(UAVObjHandle obj, const void* dataIn)
|
|||||||
* \param[out] dataOut The object's data structure
|
* \param[out] dataOut The object's data structure
|
||||||
* \return 0 if success or -1 if failure
|
* \return 0 if success or -1 if failure
|
||||||
*/
|
*/
|
||||||
int32_t UAVObjGetData(UAVObjHandle obj, void* dataOut)
|
int32_t UAVObjGetData(UAVObjHandle obj, void *dataOut)
|
||||||
{
|
{
|
||||||
return UAVObjGetInstanceData(obj, 0, dataOut);
|
return UAVObjGetInstanceData(obj, 0, dataOut);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1088,47 +1011,45 @@ int32_t UAVObjGetData(UAVObjHandle obj, void* dataOut)
|
|||||||
* \param[in] dataIn The object's data structure
|
* \param[in] dataIn The object's data structure
|
||||||
* \return 0 if success or -1 if failure
|
* \return 0 if success or -1 if failure
|
||||||
*/
|
*/
|
||||||
int32_t UAVObjSetInstanceData(UAVObjHandle obj, uint16_t instId, const void* dataIn)
|
int32_t UAVObjSetInstanceData(UAVObjHandle obj, uint16_t instId,
|
||||||
|
const void *dataIn)
|
||||||
{
|
{
|
||||||
ObjectList* objEntry;
|
ObjectList *objEntry;
|
||||||
ObjectInstList* instEntry;
|
ObjectInstList *instEntry;
|
||||||
UAVObjMetadata* mdata;
|
UAVObjMetadata *mdata;
|
||||||
|
|
||||||
// Lock
|
// Lock
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
|
|
||||||
// Cast to object info
|
// Cast to object info
|
||||||
objEntry = (ObjectList*)obj;
|
objEntry = (ObjectList *) obj;
|
||||||
|
|
||||||
// Check access level
|
// Check access level
|
||||||
if ( !objEntry->isMetaobject )
|
if (!objEntry->isMetaobject) {
|
||||||
{
|
mdata =
|
||||||
mdata = (UAVObjMetadata*)(objEntry->linkedObj->instances.data);
|
(UAVObjMetadata *) (objEntry->linkedObj->instances.
|
||||||
if ( mdata->access == ACCESS_READONLY )
|
data);
|
||||||
{
|
if (mdata->access == ACCESS_READONLY) {
|
||||||
xSemaphoreGiveRecursive(mutex);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Get instance information
|
||||||
|
instEntry = getInstance(objEntry, instId);
|
||||||
|
if (instEntry == NULL) {
|
||||||
|
// Error, unlock and return
|
||||||
|
xSemaphoreGiveRecursive(mutex);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
// Set data
|
||||||
|
memcpy(instEntry->data, dataIn, objEntry->numBytes);
|
||||||
|
|
||||||
// Get instance information
|
// Fire event
|
||||||
instEntry = getInstance(objEntry, instId);
|
sendEvent(objEntry, instId, EV_UPDATED);
|
||||||
if ( instEntry == NULL )
|
|
||||||
{
|
|
||||||
// Error, unlock and return
|
|
||||||
xSemaphoreGiveRecursive(mutex);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set data
|
// Unlock
|
||||||
memcpy(instEntry->data, dataIn, objEntry->numBytes);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
|
return 0;
|
||||||
// Fire event
|
|
||||||
sendEvent(objEntry, instId, EV_UPDATED);
|
|
||||||
|
|
||||||
// Unlock
|
|
||||||
xSemaphoreGiveRecursive(mutex);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1138,32 +1059,31 @@ int32_t UAVObjSetInstanceData(UAVObjHandle obj, uint16_t instId, const void* dat
|
|||||||
* \param[out] dataOut The object's data structure
|
* \param[out] dataOut The object's data structure
|
||||||
* \return 0 if success or -1 if failure
|
* \return 0 if success or -1 if failure
|
||||||
*/
|
*/
|
||||||
int32_t UAVObjGetInstanceData(UAVObjHandle obj, uint16_t instId, void* dataOut)
|
int32_t UAVObjGetInstanceData(UAVObjHandle obj, uint16_t instId,
|
||||||
|
void *dataOut)
|
||||||
{
|
{
|
||||||
ObjectList* objEntry;
|
ObjectList *objEntry;
|
||||||
ObjectInstList* instEntry;
|
ObjectInstList *instEntry;
|
||||||
|
|
||||||
// Lock
|
// Lock
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
|
|
||||||
// Cast to object info
|
// Cast to object info
|
||||||
objEntry = (ObjectList*)obj;
|
objEntry = (ObjectList *) obj;
|
||||||
|
|
||||||
// Get instance information
|
// Get instance information
|
||||||
instEntry = getInstance(objEntry, instId);
|
instEntry = getInstance(objEntry, instId);
|
||||||
if ( instEntry == NULL )
|
if (instEntry == NULL) {
|
||||||
{
|
// Error, unlock and return
|
||||||
// Error, unlock and return
|
xSemaphoreGiveRecursive(mutex);
|
||||||
xSemaphoreGiveRecursive(mutex);
|
return -1;
|
||||||
return -1;
|
}
|
||||||
}
|
// Set data
|
||||||
|
memcpy(dataOut, instEntry->data, objEntry->numBytes);
|
||||||
|
|
||||||
// Set data
|
// Unlock
|
||||||
memcpy(dataOut, instEntry->data, objEntry->numBytes);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
|
return 0;
|
||||||
// Unlock
|
|
||||||
xSemaphoreGiveRecursive(mutex);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1172,27 +1092,25 @@ int32_t UAVObjGetInstanceData(UAVObjHandle obj, uint16_t instId, void* dataOut)
|
|||||||
* \param[in] dataIn The object's metadata structure
|
* \param[in] dataIn The object's metadata structure
|
||||||
* \return 0 if success or -1 if failure
|
* \return 0 if success or -1 if failure
|
||||||
*/
|
*/
|
||||||
int32_t UAVObjSetMetadata(UAVObjHandle obj, const UAVObjMetadata* dataIn)
|
int32_t UAVObjSetMetadata(UAVObjHandle obj, const UAVObjMetadata * dataIn)
|
||||||
{
|
{
|
||||||
ObjectList* objEntry;
|
ObjectList *objEntry;
|
||||||
|
|
||||||
// Lock
|
// Lock
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
|
|
||||||
// Set metadata (metadata of metaobjects can not be modified)
|
// Set metadata (metadata of metaobjects can not be modified)
|
||||||
objEntry = (ObjectList*)obj;
|
objEntry = (ObjectList *) obj;
|
||||||
if (!objEntry->isMetaobject)
|
if (!objEntry->isMetaobject) {
|
||||||
{
|
UAVObjSetData((UAVObjHandle) objEntry->linkedObj,
|
||||||
UAVObjSetData((UAVObjHandle)objEntry->linkedObj, dataIn);
|
dataIn);
|
||||||
}
|
} else {
|
||||||
else
|
return -1;
|
||||||
{
|
}
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Unlock
|
// Unlock
|
||||||
xSemaphoreGiveRecursive(mutex);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1201,27 +1119,25 @@ int32_t UAVObjSetMetadata(UAVObjHandle obj, const UAVObjMetadata* dataIn)
|
|||||||
* \param[out] dataOut The object's metadata structure
|
* \param[out] dataOut The object's metadata structure
|
||||||
* \return 0 if success or -1 if failure
|
* \return 0 if success or -1 if failure
|
||||||
*/
|
*/
|
||||||
int32_t UAVObjGetMetadata(UAVObjHandle obj, UAVObjMetadata* dataOut)
|
int32_t UAVObjGetMetadata(UAVObjHandle obj, UAVObjMetadata * dataOut)
|
||||||
{
|
{
|
||||||
ObjectList* objEntry;
|
ObjectList *objEntry;
|
||||||
|
|
||||||
// Lock
|
// Lock
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
|
|
||||||
// Get metadata
|
// Get metadata
|
||||||
objEntry = (ObjectList*)obj;
|
objEntry = (ObjectList *) obj;
|
||||||
if (objEntry->isMetaobject)
|
if (objEntry->isMetaobject) {
|
||||||
{
|
memcpy(dataOut, &defMetadata, sizeof(UAVObjMetadata));
|
||||||
memcpy(dataOut, &defMetadata, sizeof(UAVObjMetadata));
|
} else {
|
||||||
}
|
UAVObjGetData((UAVObjHandle) objEntry->linkedObj,
|
||||||
else
|
dataOut);
|
||||||
{
|
}
|
||||||
UAVObjGetData((UAVObjHandle)objEntry->linkedObj, dataOut);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Unlock
|
// Unlock
|
||||||
xSemaphoreGiveRecursive(mutex);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1234,19 +1150,20 @@ int32_t UAVObjGetMetadata(UAVObjHandle obj, UAVObjMetadata* dataOut)
|
|||||||
*/
|
*/
|
||||||
int8_t UAVObjReadOnly(UAVObjHandle obj)
|
int8_t UAVObjReadOnly(UAVObjHandle obj)
|
||||||
{
|
{
|
||||||
ObjectList* objEntry;
|
ObjectList *objEntry;
|
||||||
UAVObjMetadata* mdata;
|
UAVObjMetadata *mdata;
|
||||||
|
|
||||||
// Cast to object info
|
// Cast to object info
|
||||||
objEntry = (ObjectList*)obj;
|
objEntry = (ObjectList *) obj;
|
||||||
|
|
||||||
// Check access level
|
// Check access level
|
||||||
if ( !objEntry->isMetaobject )
|
if (!objEntry->isMetaobject) {
|
||||||
{
|
mdata =
|
||||||
mdata = (UAVObjMetadata*)(objEntry->linkedObj->instances.data);
|
(UAVObjMetadata *) (objEntry->linkedObj->instances.
|
||||||
return mdata->access == ACCESS_READONLY;
|
data);
|
||||||
}
|
return mdata->access == ACCESS_READONLY;
|
||||||
return -1;
|
}
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1257,13 +1174,14 @@ int8_t UAVObjReadOnly(UAVObjHandle obj)
|
|||||||
* \param[in] eventMask The event mask, if EV_MASK_ALL then all events are enabled (e.g. EV_UPDATED | EV_UPDATED_MANUAL)
|
* \param[in] eventMask The event mask, if EV_MASK_ALL then all events are enabled (e.g. EV_UPDATED | EV_UPDATED_MANUAL)
|
||||||
* \return 0 if success or -1 if failure
|
* \return 0 if success or -1 if failure
|
||||||
*/
|
*/
|
||||||
int32_t UAVObjConnectQueue(UAVObjHandle obj, xQueueHandle queue, int32_t eventMask)
|
int32_t UAVObjConnectQueue(UAVObjHandle obj, xQueueHandle queue,
|
||||||
|
int32_t eventMask)
|
||||||
{
|
{
|
||||||
int32_t res;
|
int32_t res;
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
res = connectObj(obj, queue, 0, eventMask);
|
res = connectObj(obj, queue, 0, eventMask);
|
||||||
xSemaphoreGiveRecursive(mutex);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1274,11 +1192,11 @@ int32_t UAVObjConnectQueue(UAVObjHandle obj, xQueueHandle queue, int32_t eventMa
|
|||||||
*/
|
*/
|
||||||
int32_t UAVObjDisconnectQueue(UAVObjHandle obj, xQueueHandle queue)
|
int32_t UAVObjDisconnectQueue(UAVObjHandle obj, xQueueHandle queue)
|
||||||
{
|
{
|
||||||
int32_t res;
|
int32_t res;
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
res = disconnectObj(obj, queue, 0);
|
res = disconnectObj(obj, queue, 0);
|
||||||
xSemaphoreGiveRecursive(mutex);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1289,13 +1207,14 @@ int32_t UAVObjDisconnectQueue(UAVObjHandle obj, xQueueHandle queue)
|
|||||||
* \param[in] eventMask The event mask, if EV_MASK_ALL then all events are enabled (e.g. EV_UPDATED | EV_UPDATED_MANUAL)
|
* \param[in] eventMask The event mask, if EV_MASK_ALL then all events are enabled (e.g. EV_UPDATED | EV_UPDATED_MANUAL)
|
||||||
* \return 0 if success or -1 if failure
|
* \return 0 if success or -1 if failure
|
||||||
*/
|
*/
|
||||||
int32_t UAVObjConnectCallback(UAVObjHandle obj, UAVObjEventCallback cb, int32_t eventMask)
|
int32_t UAVObjConnectCallback(UAVObjHandle obj, UAVObjEventCallback cb,
|
||||||
|
int32_t eventMask)
|
||||||
{
|
{
|
||||||
int32_t res;
|
int32_t res;
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
res = connectObj(obj, 0, cb, eventMask);
|
res = connectObj(obj, 0, cb, eventMask);
|
||||||
xSemaphoreGiveRecursive(mutex);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1306,14 +1225,13 @@ int32_t UAVObjConnectCallback(UAVObjHandle obj, UAVObjEventCallback cb, int32_t
|
|||||||
*/
|
*/
|
||||||
int32_t UAVObjDisconnectCallback(UAVObjHandle obj, UAVObjEventCallback cb)
|
int32_t UAVObjDisconnectCallback(UAVObjHandle obj, UAVObjEventCallback cb)
|
||||||
{
|
{
|
||||||
int32_t res;
|
int32_t res;
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
res = disconnectObj(obj, 0, cb);
|
res = disconnectObj(obj, 0, cb);
|
||||||
xSemaphoreGiveRecursive(mutex);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Request an update of the object's data from the GCS. The call will not wait for the response, a EV_UPDATED event
|
* Request an update of the object's data from the GCS. The call will not wait for the response, a EV_UPDATED event
|
||||||
* will be generated as soon as the object is updated.
|
* will be generated as soon as the object is updated.
|
||||||
@ -1321,7 +1239,7 @@ int32_t UAVObjDisconnectCallback(UAVObjHandle obj, UAVObjEventCallback cb)
|
|||||||
*/
|
*/
|
||||||
void UAVObjRequestUpdate(UAVObjHandle obj)
|
void UAVObjRequestUpdate(UAVObjHandle obj)
|
||||||
{
|
{
|
||||||
UAVObjRequestInstanceUpdate(obj, UAVOBJ_ALL_INSTANCES);
|
UAVObjRequestInstanceUpdate(obj, UAVOBJ_ALL_INSTANCES);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1332,9 +1250,9 @@ void UAVObjRequestUpdate(UAVObjHandle obj)
|
|||||||
*/
|
*/
|
||||||
void UAVObjRequestInstanceUpdate(UAVObjHandle obj, uint16_t instId)
|
void UAVObjRequestInstanceUpdate(UAVObjHandle obj, uint16_t instId)
|
||||||
{
|
{
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
sendEvent((ObjectList*)obj, instId, EV_UPDATE_REQ);
|
sendEvent((ObjectList *) obj, instId, EV_UPDATE_REQ);
|
||||||
xSemaphoreGiveRecursive(mutex);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1343,7 +1261,7 @@ void UAVObjRequestInstanceUpdate(UAVObjHandle obj, uint16_t instId)
|
|||||||
*/
|
*/
|
||||||
void UAVObjUpdated(UAVObjHandle obj)
|
void UAVObjUpdated(UAVObjHandle obj)
|
||||||
{
|
{
|
||||||
UAVObjInstanceUpdated(obj, UAVOBJ_ALL_INSTANCES);
|
UAVObjInstanceUpdated(obj, UAVOBJ_ALL_INSTANCES);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1353,9 +1271,9 @@ void UAVObjUpdated(UAVObjHandle obj)
|
|||||||
*/
|
*/
|
||||||
void UAVObjInstanceUpdated(UAVObjHandle obj, uint16_t instId)
|
void UAVObjInstanceUpdated(UAVObjHandle obj, uint16_t instId)
|
||||||
{
|
{
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
sendEvent((ObjectList*)obj, instId, EV_UPDATED_MANUAL);
|
sendEvent((ObjectList *) obj, instId, EV_UPDATED_MANUAL);
|
||||||
xSemaphoreGiveRecursive(mutex);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1363,143 +1281,133 @@ void UAVObjInstanceUpdated(UAVObjHandle obj, uint16_t instId)
|
|||||||
* \param iterator This function will be called once for each object,
|
* \param iterator This function will be called once for each object,
|
||||||
* the object will be passed as a parameter
|
* the object will be passed as a parameter
|
||||||
*/
|
*/
|
||||||
void UAVObjIterate(void (*iterator)(UAVObjHandle obj))
|
void UAVObjIterate(void (*iterator) (UAVObjHandle obj))
|
||||||
{
|
{
|
||||||
ObjectList* objEntry;
|
ObjectList *objEntry;
|
||||||
|
|
||||||
// Get lock
|
// Get lock
|
||||||
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
xSemaphoreTakeRecursive(mutex, portMAX_DELAY);
|
||||||
|
|
||||||
// Iterate through the list and invoke iterator for each object
|
// Iterate through the list and invoke iterator for each object
|
||||||
LL_FOREACH(objList, objEntry)
|
LL_FOREACH(objList, objEntry) {
|
||||||
{
|
(*iterator) ((UAVObjHandle) objEntry);
|
||||||
(*iterator)((UAVObjHandle)objEntry);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Release lock
|
// Release lock
|
||||||
xSemaphoreGiveRecursive(mutex);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send an event to all event queues registered on the object.
|
* Send an event to all event queues registered on the object.
|
||||||
*/
|
*/
|
||||||
static int32_t sendEvent(ObjectList* obj, uint16_t instId, UAVObjEventType event)
|
static int32_t sendEvent(ObjectList * obj, uint16_t instId,
|
||||||
|
UAVObjEventType event)
|
||||||
{
|
{
|
||||||
ObjectEventList* eventEntry;
|
ObjectEventList *eventEntry;
|
||||||
UAVObjEvent msg;
|
UAVObjEvent msg;
|
||||||
|
|
||||||
// Setup event
|
// Setup event
|
||||||
msg.obj = (UAVObjHandle)obj;
|
msg.obj = (UAVObjHandle) obj;
|
||||||
msg.event = event;
|
msg.event = event;
|
||||||
msg.instId = instId;
|
msg.instId = instId;
|
||||||
|
|
||||||
// Go through each object and push the event message in the queue (if event is activated for the queue)
|
// Go through each object and push the event message in the queue (if event is activated for the queue)
|
||||||
LL_FOREACH(obj->events, eventEntry)
|
LL_FOREACH(obj->events, eventEntry) {
|
||||||
{
|
if (eventEntry->eventMask == 0
|
||||||
if ( eventEntry->eventMask == 0 || (eventEntry->eventMask & event) != 0 )
|
|| (eventEntry->eventMask & event) != 0) {
|
||||||
{
|
// Send to queue if a valid queue is registered
|
||||||
// Send to queue if a valid queue is registered
|
if (eventEntry->queue != 0) {
|
||||||
if (eventEntry->queue != 0)
|
if (xQueueSend(eventEntry->queue, &msg, 0) != pdTRUE) // will not block
|
||||||
{
|
{
|
||||||
if ( xQueueSend(eventEntry->queue, &msg, 0) != pdTRUE ) // will not block
|
++stats.eventErrors;
|
||||||
{
|
}
|
||||||
++stats.eventErrors;
|
}
|
||||||
}
|
// Invoke callback (from event task) if a valid one is registered
|
||||||
}
|
if (eventEntry->cb != 0) {
|
||||||
// Invoke callback (from event task) if a valid one is registered
|
if (EventCallbackDispatch(&msg, eventEntry->cb) != pdTRUE) // invoke callback from the event task, will not block
|
||||||
if (eventEntry->cb != 0)
|
{
|
||||||
{
|
++stats.eventErrors;
|
||||||
if ( EventCallbackDispatch(&msg, eventEntry->cb) != pdTRUE ) // invoke callback from the event task, will not block
|
}
|
||||||
{
|
}
|
||||||
++stats.eventErrors;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Done
|
// Done
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new object instance, return the instance info or NULL if failure.
|
* Create a new object instance, return the instance info or NULL if failure.
|
||||||
*/
|
*/
|
||||||
static ObjectInstList* createInstance(ObjectList* obj, uint16_t instId)
|
static ObjectInstList *createInstance(ObjectList * obj, uint16_t instId)
|
||||||
{
|
{
|
||||||
ObjectInstList* instEntry;
|
ObjectInstList *instEntry;
|
||||||
int32_t n;
|
int32_t n;
|
||||||
|
|
||||||
// For single instance objects, only instance zero is allowed
|
// For single instance objects, only instance zero is allowed
|
||||||
if (obj->isSingleInstance && instId != 0)
|
if (obj->isSingleInstance && instId != 0) {
|
||||||
{
|
return NULL;
|
||||||
return NULL;
|
}
|
||||||
}
|
// Make sure that the instance ID is within limits
|
||||||
|
if (instId >= UAVOBJ_MAX_INSTANCES) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
// Check if the instance already exists
|
||||||
|
if (getInstance(obj, instId) != NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
// Create any missing instances (all instance IDs must be sequential)
|
||||||
|
for (n = obj->numInstances; n < instId; ++n) {
|
||||||
|
if (createInstance(obj, n) == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Make sure that the instance ID is within limits
|
if (instId == 0) { /* Instance 0 ObjectInstList allocated with ObjectList element */
|
||||||
if (instId >= UAVOBJ_MAX_INSTANCES)
|
instEntry = &obj->instances;
|
||||||
{
|
instEntry->data = pvPortMalloc(obj->numBytes);
|
||||||
return NULL;
|
if (instEntry->data == NULL)
|
||||||
}
|
return NULL;
|
||||||
|
memset(instEntry->data, 0, obj->numBytes);
|
||||||
|
instEntry->instId = instId;
|
||||||
|
} else {
|
||||||
|
// Create the actual instance
|
||||||
|
instEntry =
|
||||||
|
(ObjectInstList *)
|
||||||
|
pvPortMalloc(sizeof(ObjectInstList));
|
||||||
|
if (instEntry == NULL)
|
||||||
|
return NULL;
|
||||||
|
instEntry->data = pvPortMalloc(obj->numBytes);
|
||||||
|
if (instEntry->data == NULL)
|
||||||
|
return NULL;
|
||||||
|
memset(instEntry->data, 0, obj->numBytes);
|
||||||
|
instEntry->instId = instId;
|
||||||
|
LL_APPEND(obj->instances.next, instEntry);
|
||||||
|
}
|
||||||
|
++obj->numInstances;
|
||||||
|
|
||||||
// Check if the instance already exists
|
// Fire event
|
||||||
if ( getInstance(obj, instId) != NULL )
|
UAVObjInstanceUpdated((UAVObjHandle) obj, instId);
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create any missing instances (all instance IDs must be sequential)
|
// Done
|
||||||
for (n = obj->numInstances; n < instId; ++n)
|
return instEntry;
|
||||||
{
|
|
||||||
if ( createInstance(obj, n) == NULL )
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(instId == 0) /* Instance 0 ObjectInstList allocated with ObjectList element */
|
|
||||||
{
|
|
||||||
instEntry = &obj->instances;
|
|
||||||
instEntry->data = pvPortMalloc(obj->numBytes);
|
|
||||||
if (instEntry->data == NULL) return NULL;
|
|
||||||
memset(instEntry->data, 0, obj->numBytes);
|
|
||||||
instEntry->instId = instId;
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
// Create the actual instance
|
|
||||||
instEntry = (ObjectInstList*)pvPortMalloc(sizeof(ObjectInstList));
|
|
||||||
if (instEntry == NULL) return NULL;
|
|
||||||
instEntry->data = pvPortMalloc(obj->numBytes);
|
|
||||||
if (instEntry->data == NULL) return NULL;
|
|
||||||
memset(instEntry->data, 0, obj->numBytes);
|
|
||||||
instEntry->instId = instId;
|
|
||||||
LL_APPEND(obj->instances.next, instEntry);
|
|
||||||
}
|
|
||||||
++obj->numInstances;
|
|
||||||
|
|
||||||
// Fire event
|
|
||||||
UAVObjInstanceUpdated((UAVObjHandle)obj, instId);
|
|
||||||
|
|
||||||
// Done
|
|
||||||
return instEntry;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the instance information or NULL if the instance does not exist
|
* Get the instance information or NULL if the instance does not exist
|
||||||
*/
|
*/
|
||||||
static ObjectInstList* getInstance(ObjectList* obj, uint16_t instId)
|
static ObjectInstList *getInstance(ObjectList * obj, uint16_t instId)
|
||||||
{
|
{
|
||||||
ObjectInstList* instEntry;
|
ObjectInstList *instEntry;
|
||||||
|
|
||||||
// Look for specified instance ID
|
// Look for specified instance ID
|
||||||
LL_FOREACH(&(obj->instances), instEntry)
|
LL_FOREACH(&(obj->instances), instEntry) {
|
||||||
{
|
if (instEntry->instId == instId) {
|
||||||
if (instEntry->instId == instId)
|
return instEntry;
|
||||||
{
|
}
|
||||||
return instEntry;
|
}
|
||||||
}
|
// If this point is reached then instance id was not found
|
||||||
}
|
return NULL;
|
||||||
// If this point is reached then instance id was not found
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1510,36 +1418,35 @@ static ObjectInstList* getInstance(ObjectList* obj, uint16_t instId)
|
|||||||
* \param[in] eventMask The event mask, if EV_MASK_ALL then all events are enabled (e.g. EV_UPDATED | EV_UPDATED_MANUAL)
|
* \param[in] eventMask The event mask, if EV_MASK_ALL then all events are enabled (e.g. EV_UPDATED | EV_UPDATED_MANUAL)
|
||||||
* \return 0 if success or -1 if failure
|
* \return 0 if success or -1 if failure
|
||||||
*/
|
*/
|
||||||
static int32_t connectObj(UAVObjHandle obj, xQueueHandle queue, UAVObjEventCallback cb, int32_t eventMask)
|
static int32_t connectObj(UAVObjHandle obj, xQueueHandle queue,
|
||||||
|
UAVObjEventCallback cb, int32_t eventMask)
|
||||||
{
|
{
|
||||||
ObjectEventList* eventEntry;
|
ObjectEventList *eventEntry;
|
||||||
ObjectList* objEntry;
|
ObjectList *objEntry;
|
||||||
|
|
||||||
// Check that the queue is not already connected, if it is simply update event mask
|
// Check that the queue is not already connected, if it is simply update event mask
|
||||||
objEntry = (ObjectList*)obj;
|
objEntry = (ObjectList *) obj;
|
||||||
LL_FOREACH(objEntry->events, eventEntry)
|
LL_FOREACH(objEntry->events, eventEntry) {
|
||||||
{
|
if (eventEntry->queue == queue && eventEntry->cb == cb) {
|
||||||
if ( eventEntry->queue == queue && eventEntry->cb == cb )
|
// Already connected, update event mask and return
|
||||||
{
|
eventEntry->eventMask = eventMask;
|
||||||
// Already connected, update event mask and return
|
return 0;
|
||||||
eventEntry->eventMask = eventMask;
|
}
|
||||||
return 0;
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add queue to list
|
// Add queue to list
|
||||||
eventEntry = (ObjectEventList*)pvPortMalloc(sizeof(ObjectEventList));
|
eventEntry =
|
||||||
if (eventEntry == NULL)
|
(ObjectEventList *) pvPortMalloc(sizeof(ObjectEventList));
|
||||||
{
|
if (eventEntry == NULL) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
eventEntry->queue = queue;
|
eventEntry->queue = queue;
|
||||||
eventEntry->cb = cb;
|
eventEntry->cb = cb;
|
||||||
eventEntry->eventMask = eventMask;
|
eventEntry->eventMask = eventMask;
|
||||||
LL_APPEND(objEntry->events, eventEntry);
|
LL_APPEND(objEntry->events, eventEntry);
|
||||||
|
|
||||||
// Done
|
// Done
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1549,59 +1456,43 @@ static int32_t connectObj(UAVObjHandle obj, xQueueHandle queue, UAVObjEventCallb
|
|||||||
* \param[in] cb The event callback
|
* \param[in] cb The event callback
|
||||||
* \return 0 if success or -1 if failure
|
* \return 0 if success or -1 if failure
|
||||||
*/
|
*/
|
||||||
static int32_t disconnectObj(UAVObjHandle obj, xQueueHandle queue, UAVObjEventCallback cb)
|
static int32_t disconnectObj(UAVObjHandle obj, xQueueHandle queue,
|
||||||
|
UAVObjEventCallback cb)
|
||||||
{
|
{
|
||||||
ObjectEventList* eventEntry;
|
ObjectEventList *eventEntry;
|
||||||
ObjectList* objEntry;
|
ObjectList *objEntry;
|
||||||
|
|
||||||
// Find queue and remove it
|
// Find queue and remove it
|
||||||
objEntry = (ObjectList*)obj;
|
objEntry = (ObjectList *) obj;
|
||||||
LL_FOREACH(objEntry->events, eventEntry)
|
LL_FOREACH(objEntry->events, eventEntry) {
|
||||||
{
|
if ((eventEntry->queue == queue
|
||||||
if ( ( eventEntry->queue == queue && eventEntry->cb == cb ) )
|
&& eventEntry->cb == cb)) {
|
||||||
{
|
LL_DELETE(objEntry->events, eventEntry);
|
||||||
LL_DELETE(objEntry->events, eventEntry);
|
vPortFree(eventEntry);
|
||||||
vPortFree(eventEntry);
|
return 0;
|
||||||
return 0;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// If this point is reached the queue was not found
|
// If this point is reached the queue was not found
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(PIOS_INCLUDE_SDCARD)
|
#if defined(PIOS_INCLUDE_SDCARD)
|
||||||
/**
|
/**
|
||||||
* Wrapper for the sprintf function
|
* Wrapper for the sprintf function
|
||||||
*/
|
*/
|
||||||
static void customSPrintf(uint8_t* buffer, uint8_t* format, ...)
|
static void customSPrintf(uint8_t * buffer, uint8_t * format, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, format);
|
va_start(args, format);
|
||||||
vsprintf((char *)buffer, (char *)format, args);
|
vsprintf((char *)buffer, (char *)format, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get an 8 character (plus extension) filename for the object.
|
* Get an 8 character (plus extension) filename for the object.
|
||||||
*/
|
*/
|
||||||
static void objectFilename(ObjectList* obj, uint8_t* filename)
|
static void objectFilename(ObjectList * obj, uint8_t * filename)
|
||||||
{
|
{
|
||||||
customSPrintf(filename, (uint8_t*)"%X.obj", obj->id);
|
customSPrintf(filename, (uint8_t *) "%X.obj", obj->id);
|
||||||
}
|
}
|
||||||
#endif /* PIOS_INCLUDE_SDCARD */
|
#endif /* PIOS_INCLUDE_SDCARD */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@ alert
|
|||||||
altitude
|
altitude
|
||||||
amps
|
amps
|
||||||
aquired
|
aquired
|
||||||
|
armed
|
||||||
autonomous flight
|
autonomous flight
|
||||||
battery
|
battery
|
||||||
camera
|
camera
|
||||||
@ -32,8 +33,10 @@ complete
|
|||||||
connected
|
connected
|
||||||
connection
|
connection
|
||||||
control
|
control
|
||||||
|
coptercontrol
|
||||||
critical
|
critical
|
||||||
disabled
|
disabled
|
||||||
|
disarmed
|
||||||
disconnected
|
disconnected
|
||||||
feet
|
feet
|
||||||
figure eight
|
figure eight
|
||||||
@ -58,11 +61,13 @@ lost
|
|||||||
low altitude
|
low altitude
|
||||||
low battery
|
low battery
|
||||||
low gps quality
|
low gps quality
|
||||||
|
magic
|
||||||
manual flight
|
manual flight
|
||||||
maxium
|
maxium
|
||||||
meters
|
meters
|
||||||
minimum
|
minimum
|
||||||
mode
|
mode
|
||||||
|
moved
|
||||||
MPH
|
MPH
|
||||||
navigation
|
navigation
|
||||||
OpenPilot
|
OpenPilot
|
||||||
@ -122,8 +127,4 @@ hundread
|
|||||||
thousand
|
thousand
|
||||||
|
|
||||||
|
|
||||||
Upto: OpenPilot
|
|
||||||
critical
|
|
||||||
battery
|
|
||||||
point
|
|
||||||
|
|
||||||
|
BIN
ground/openpilotgcs/share/openpilotgcs/sounds/default/armed.wav
Normal file
BIN
ground/openpilotgcs/share/openpilotgcs/sounds/default/magic.wav
Normal file
BIN
ground/openpilotgcs/share/openpilotgcs/sounds/default/moved.wav
Normal file
@ -6,8 +6,8 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>400</width>
|
<width>415</width>
|
||||||
<height>343</height>
|
<height>349</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
@ -142,18 +142,6 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
|
||||||
<widget class="QCheckBox" name="zeroGyroBiasOnArming">
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>If enabled, a fast recalibration of gyro zero point will be done
|
|
||||||
whenever the frame is armed. Do not move the airframe while
|
|
||||||
arming it in that case!</string>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Zero gyro bias upon airframe arming</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="groupBox">
|
<widget class="QGroupBox" name="groupBox">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
@ -171,86 +159,98 @@ arming it in that case!</string>
|
|||||||
<property name="title">
|
<property name="title">
|
||||||
<string>Attitude Calibration</string>
|
<string>Attitude Calibration</string>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="verticalLayoutWidget">
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
<property name="geometry">
|
<item>
|
||||||
<rect>
|
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||||
<x>0</x>
|
<property name="margin">
|
||||||
<y>20</y>
|
<number>3</number>
|
||||||
<width>371</width>
|
</property>
|
||||||
<height>111</height>
|
<item>
|
||||||
</rect>
|
<widget class="QLabel" name="label">
|
||||||
</property>
|
<property name="text">
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
<string>Place aircraft flat before computing</string>
|
||||||
<property name="margin">
|
</property>
|
||||||
<number>3</number>
|
</widget>
|
||||||
</property>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label">
|
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||||
<property name="text">
|
<item>
|
||||||
<string>Place aircraft flat before computing</string>
|
<spacer name="horizontalSpacer_3">
|
||||||
</property>
|
<property name="orientation">
|
||||||
</widget>
|
<enum>Qt::Horizontal</enum>
|
||||||
</item>
|
</property>
|
||||||
<item>
|
<property name="sizeHint" stdset="0">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
<size>
|
||||||
<item>
|
<width>40</width>
|
||||||
<spacer name="horizontalSpacer_3">
|
<height>20</height>
|
||||||
<property name="orientation">
|
</size>
|
||||||
<enum>Qt::Horizontal</enum>
|
</property>
|
||||||
</property>
|
</spacer>
|
||||||
<property name="sizeHint" stdset="0">
|
</item>
|
||||||
<size>
|
<item>
|
||||||
<width>40</width>
|
<widget class="QLabel" name="status">
|
||||||
<height>20</height>
|
<property name="text">
|
||||||
</size>
|
<string>Click "Zero Accel Bias" to start</string>
|
||||||
</property>
|
</property>
|
||||||
</spacer>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="status">
|
<spacer name="horizontalSpacer_2">
|
||||||
<property name="text">
|
<property name="orientation">
|
||||||
<string>Click "Zero Accel Bias" to start</string>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
<property name="sizeHint" stdset="0">
|
||||||
</item>
|
<size>
|
||||||
<item>
|
<width>40</width>
|
||||||
<spacer name="horizontalSpacer_2">
|
<height>20</height>
|
||||||
<property name="orientation">
|
</size>
|
||||||
<enum>Qt::Horizontal</enum>
|
</property>
|
||||||
</property>
|
</spacer>
|
||||||
<property name="sizeHint" stdset="0">
|
</item>
|
||||||
<size>
|
</layout>
|
||||||
<width>40</width>
|
</item>
|
||||||
<height>20</height>
|
<item>
|
||||||
</size>
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
</property>
|
<property name="spacing">
|
||||||
</spacer>
|
<number>6</number>
|
||||||
</item>
|
</property>
|
||||||
</layout>
|
<property name="margin">
|
||||||
</item>
|
<number>4</number>
|
||||||
<item>
|
</property>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
<item>
|
||||||
<item>
|
<widget class="QPushButton" name="zeroBias">
|
||||||
<widget class="QPushButton" name="zeroBias">
|
<property name="toolTip">
|
||||||
<property name="toolTip">
|
<string>Launch horizontal calibration.</string>
|
||||||
<string>Launch horizontal calibration.</string>
|
</property>
|
||||||
</property>
|
<property name="text">
|
||||||
<property name="text">
|
<string>Zero Accel Bias</string>
|
||||||
<string>Zero Accel Bias</string>
|
</property>
|
||||||
</property>
|
</widget>
|
||||||
</widget>
|
</item>
|
||||||
</item>
|
<item>
|
||||||
<item>
|
<widget class="QProgressBar" name="zeroBiasProgress">
|
||||||
<widget class="QProgressBar" name="zeroBiasProgress">
|
<property name="value">
|
||||||
<property name="value">
|
<number>0</number>
|
||||||
<number>0</number>
|
</property>
|
||||||
</property>
|
</widget>
|
||||||
</widget>
|
</item>
|
||||||
</item>
|
</layout>
|
||||||
</layout>
|
</item>
|
||||||
</item>
|
</layout>
|
||||||
</layout>
|
</item>
|
||||||
</widget>
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="zeroGyroBiasOnArming">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>If enabled, a fast recalibration of gyro zero point will be done
|
||||||
|
whenever the frame is armed. Do not move the airframe while
|
||||||
|
arming it in that case!</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Zero gyro bias upon airframe arming</string>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
|
@ -265,10 +265,27 @@ void ConfigOutputWidget::runChannelTests(bool state)
|
|||||||
mdata.gcsTelemetryAcked = false;
|
mdata.gcsTelemetryAcked = false;
|
||||||
mdata.gcsTelemetryUpdateMode = UAVObject::UPDATEMODE_ONCHANGE;
|
mdata.gcsTelemetryUpdateMode = UAVObject::UPDATEMODE_ONCHANGE;
|
||||||
mdata.gcsTelemetryUpdatePeriod = 100;
|
mdata.gcsTelemetryUpdatePeriod = 100;
|
||||||
|
|
||||||
|
// Prevent stupid users from touching the minimum & maximum ranges while
|
||||||
|
// moving the sliders. Thanks Ivan for the tip :)
|
||||||
|
foreach (QSpinBox* box, outMin) {
|
||||||
|
box->setEnabled(false);
|
||||||
|
}
|
||||||
|
foreach (QSpinBox* box, outMax) {
|
||||||
|
box->setEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mdata = accInitialData; // Restore metadata
|
mdata = accInitialData; // Restore metadata
|
||||||
|
foreach (QSpinBox* box, outMin) {
|
||||||
|
box->setEnabled(true);
|
||||||
|
}
|
||||||
|
foreach (QSpinBox* box, outMax) {
|
||||||
|
box->setEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
obj->setMetadata(mdata);
|
obj->setMetadata(mdata);
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ Workspace1=Flight data
|
|||||||
Icon1=:/core/images/ah.png
|
Icon1=:/core/images/ah.png
|
||||||
Workspace2=Configuration
|
Workspace2=Configuration
|
||||||
Icon2=:/core/images/config.png
|
Icon2=:/core/images/config.png
|
||||||
Workspace3=Large Map
|
Workspace3=Flight Planner
|
||||||
Icon3=:/core/images/world.png
|
Icon3=:/core/images/world.png
|
||||||
Workspace4=Scopes
|
Workspace4=Scopes
|
||||||
Icon4=:/core/images/scopes.png
|
Icon4=:/core/images/scopes.png
|
||||||
@ -42,17 +42,125 @@ Mode1\splitter\side0\side0\type=splitter
|
|||||||
Mode1\splitter\side0\side0\splitterOrientation=1
|
Mode1\splitter\side0\side0\splitterOrientation=1
|
||||||
Mode1\splitter\side0\side0\splitterSizes=144, 608
|
Mode1\splitter\side0\side0\splitterSizes=144, 608
|
||||||
Mode1\splitter\side0\side0\side0\type=splitter
|
Mode1\splitter\side0\side0\side0\type=splitter
|
||||||
|
Mode1\splitter\side0\side0\side0\splitterOrientation=2
|
||||||
|
Mode1\splitter\side0\side0\side0\splitterSizes=215, 237
|
||||||
|
Mode1\splitter\side0\side0\side0\side0\type=splitter
|
||||||
|
Mode1\splitter\side0\side0\side0\side0\splitterOrientation=2
|
||||||
|
Mode1\splitter\side0\side0\side0\side0\splitterSizes=@Invalid()
|
||||||
|
Mode1\splitter\side0\side0\side0\side0\side0\type=uavGadget
|
||||||
|
Mode1\splitter\side0\side0\side0\side0\side0\classId=LineardialGadget
|
||||||
|
Mode1\splitter\side0\side0\side0\side0\side0\gadget\activeConfiguration=Flight Time
|
||||||
|
Mode1\splitter\side0\side0\side0\side0\side1\type=uavGadget
|
||||||
|
Mode1\splitter\side0\side0\side0\side0\side1\classId=LineardialGadget
|
||||||
|
Mode1\splitter\side0\side0\side0\side0\side1\gadget\activeConfiguration=GPS Sats
|
||||||
|
Mode1\splitter\side0\side0\side0\side1\type=splitter
|
||||||
|
Mode1\splitter\side0\side0\side0\side1\splitterOrientation=2
|
||||||
|
Mode1\splitter\side0\side0\side0\side1\splitterSizes=@Invalid()
|
||||||
|
Mode1\splitter\side0\side0\side0\side1\side0\type=uavGadget
|
||||||
|
Mode1\splitter\side0\side0\side0\side1\side0\classId=LineardialGadget
|
||||||
|
Mode1\splitter\side0\side0\side0\side1\side0\gadget\activeConfiguration=Flight mode
|
||||||
|
Mode1\splitter\side0\side0\side0\side1\side1\type=uavGadget
|
||||||
|
Mode1\splitter\side0\side0\side0\side1\side1\classId=LineardialGadget
|
||||||
|
Mode1\splitter\side0\side0\side0\side1\side1\gadget\activeConfiguration=Arm Status
|
||||||
Mode1\splitter\side0\side0\side1\type=uavGadget
|
Mode1\splitter\side0\side0\side1\type=uavGadget
|
||||||
|
Mode1\splitter\side0\side0\side1\classId=PFDGadget
|
||||||
|
Mode1\splitter\side0\side0\side1\gadget\activeConfiguration=raw
|
||||||
Mode1\splitter\side0\side1\type=splitter
|
Mode1\splitter\side0\side1\type=splitter
|
||||||
|
Mode1\splitter\side0\side1\splitterOrientation=1
|
||||||
|
Mode1\splitter\side0\side1\splitterSizes=304, 433
|
||||||
|
Mode1\splitter\side0\side1\side0\type=uavGadget
|
||||||
|
Mode1\splitter\side0\side1\side0\classId=ModelViewGadget
|
||||||
|
Mode1\splitter\side0\side1\side0\gadget\activeConfiguration=Test Quad X
|
||||||
|
Mode1\splitter\side0\side1\side1\type=splitter
|
||||||
|
Mode1\splitter\side0\side1\side1\splitterOrientation=2
|
||||||
|
Mode1\splitter\side0\side1\side1\splitterSizes=293, 64
|
||||||
|
Mode1\splitter\side0\side1\side1\side0\type=splitter
|
||||||
|
Mode1\splitter\side0\side1\side1\side0\splitterOrientation=1
|
||||||
|
Mode1\splitter\side0\side1\side1\side0\splitterSizes=291, 141
|
||||||
|
Mode1\splitter\side0\side1\side1\side0\side0\type=uavGadget
|
||||||
|
Mode1\splitter\side0\side1\side1\side0\side0\classId=SystemHealthGadget
|
||||||
|
Mode1\splitter\side0\side1\side1\side0\side0\gadget\activeConfiguration=default
|
||||||
|
Mode1\splitter\side0\side1\side1\side0\side1\type=splitter
|
||||||
|
Mode1\splitter\side0\side1\side1\side0\side1\splitterOrientation=1
|
||||||
|
Mode1\splitter\side0\side1\side1\side0\side1\splitterSizes=64, 64
|
||||||
|
Mode1\splitter\side0\side1\side1\side0\side1\side0\type=uavGadget
|
||||||
|
Mode1\splitter\side0\side1\side1\side0\side1\side0\classId=LineardialGadget
|
||||||
|
Mode1\splitter\side0\side1\side1\side0\side1\side0\gadget\activeConfiguration=Mainboard CPU
|
||||||
|
Mode1\splitter\side0\side1\side1\side0\side1\side1\type=uavGadget
|
||||||
|
Mode1\splitter\side0\side1\side1\side0\side1\side1\classId=LineardialGadget
|
||||||
|
Mode1\splitter\side0\side1\side1\side0\side1\side1\gadget\activeConfiguration=AHRS CPU
|
||||||
|
Mode1\splitter\side0\side1\side1\side1\type=splitter
|
||||||
|
Mode1\splitter\side0\side1\side1\side1\splitterOrientation=1
|
||||||
|
Mode1\splitter\side0\side1\side1\side1\splitterSizes=@Invalid()
|
||||||
|
Mode1\splitter\side0\side1\side1\side1\side0\type=uavGadget
|
||||||
|
Mode1\splitter\side0\side1\side1\side1\side0\classId=LineardialGadget
|
||||||
|
Mode1\splitter\side0\side1\side1\side1\side0\gadget\activeConfiguration=Telemetry RX Rate Horizontal
|
||||||
|
Mode1\splitter\side0\side1\side1\side1\side1\type=uavGadget
|
||||||
|
Mode1\splitter\side0\side1\side1\side1\side1\classId=LineardialGadget
|
||||||
|
Mode1\splitter\side0\side1\side1\side1\side1\gadget\activeConfiguration=Telemetry TX Rate Horizontal
|
||||||
Mode1\splitter\side1\type=splitter
|
Mode1\splitter\side1\type=splitter
|
||||||
Mode1\splitter\side1\splitterOrientation=2
|
Mode1\splitter\side1\splitterOrientation=2
|
||||||
Mode1\splitter\side1\splitterSizes=492, 288
|
Mode1\splitter\side1\splitterSizes=492, 288
|
||||||
Mode1\splitter\side1\side0\type=uavGadget
|
Mode1\splitter\side1\side0\type=uavGadget
|
||||||
|
Mode1\splitter\side1\side0\classId=OPMapGadget
|
||||||
|
Mode1\splitter\side1\side0\gadget\activeConfiguration=Google Sat
|
||||||
Mode1\splitter\side1\side1\type=splitter
|
Mode1\splitter\side1\side1\type=splitter
|
||||||
Mode1\splitter\side1\side1\splitterOrientation=1
|
Mode1\splitter\side1\side1\splitterOrientation=1
|
||||||
Mode1\splitter\side1\side1\splitterSizes=441, 259
|
Mode1\splitter\side1\side1\splitterSizes=441, 259
|
||||||
Mode1\splitter\side1\side1\side0\type=splitter
|
Mode1\splitter\side1\side1\side0\type=splitter
|
||||||
|
Mode1\splitter\side1\side1\side0\splitterOrientation=1
|
||||||
|
Mode1\splitter\side1\side1\side0\splitterSizes=277, 135
|
||||||
|
Mode1\splitter\side1\side1\side0\side0\type=splitter
|
||||||
|
Mode1\splitter\side1\side1\side0\side0\splitterOrientation=1
|
||||||
|
Mode1\splitter\side1\side1\side0\side0\splitterSizes=131, 138
|
||||||
|
Mode1\splitter\side1\side1\side0\side0\side0\type=splitter
|
||||||
|
Mode1\splitter\side1\side1\side0\side0\side0\splitterOrientation=2
|
||||||
|
Mode1\splitter\side1\side1\side0\side0\side0\splitterSizes=@Invalid()
|
||||||
|
Mode1\splitter\side1\side1\side0\side0\side0\side0\type=uavGadget
|
||||||
|
Mode1\splitter\side1\side1\side0\side0\side0\side0\classId=DialGadget
|
||||||
|
Mode1\splitter\side1\side1\side0\side0\side0\side0\gadget\activeConfiguration=Deluxe Groundspeed kph
|
||||||
|
Mode1\splitter\side1\side1\side0\side0\side0\side1\type=uavGadget
|
||||||
|
Mode1\splitter\side1\side1\side0\side0\side0\side1\classId=DialGadget
|
||||||
|
Mode1\splitter\side1\side1\side0\side0\side0\side1\gadget\activeConfiguration=Deluxe Barometer
|
||||||
|
Mode1\splitter\side1\side1\side0\side0\side1\type=splitter
|
||||||
|
Mode1\splitter\side1\side1\side0\side0\side1\splitterOrientation=2
|
||||||
|
Mode1\splitter\side1\side1\side0\side0\side1\splitterSizes=@Invalid()
|
||||||
|
Mode1\splitter\side1\side1\side0\side0\side1\side0\type=uavGadget
|
||||||
|
Mode1\splitter\side1\side1\side0\side0\side1\side0\classId=DialGadget
|
||||||
|
Mode1\splitter\side1\side1\side0\side0\side1\side0\gadget\activeConfiguration=Deluxe Attitude
|
||||||
|
Mode1\splitter\side1\side1\side0\side0\side1\side1\type=uavGadget
|
||||||
|
Mode1\splitter\side1\side1\side0\side0\side1\side1\classId=DialGadget
|
||||||
|
Mode1\splitter\side1\side1\side0\side0\side1\side1\gadget\activeConfiguration=Deluxe Compass
|
||||||
|
Mode1\splitter\side1\side1\side0\side1\type=splitter
|
||||||
|
Mode1\splitter\side1\side1\side0\side1\splitterOrientation=2
|
||||||
|
Mode1\splitter\side1\side1\side0\side1\splitterSizes=@Invalid()
|
||||||
|
Mode1\splitter\side1\side1\side0\side1\side0\type=uavGadget
|
||||||
|
Mode1\splitter\side1\side1\side0\side1\side0\classId=DialGadget
|
||||||
|
Mode1\splitter\side1\side1\side0\side1\side0\gadget\activeConfiguration=Deluxe Baro Altimeter
|
||||||
|
Mode1\splitter\side1\side1\side0\side1\side1\type=uavGadget
|
||||||
|
Mode1\splitter\side1\side1\side0\side1\side1\classId=DialGadget
|
||||||
|
Mode1\splitter\side1\side1\side0\side1\side1\gadget\activeConfiguration=Deluxe Climbrate
|
||||||
Mode1\splitter\side1\side1\side1\type=splitter
|
Mode1\splitter\side1\side1\side1\type=splitter
|
||||||
|
Mode1\splitter\side1\side1\side1\splitterOrientation=1
|
||||||
|
Mode1\splitter\side1\side1\side1\splitterSizes=64, 441
|
||||||
|
Mode1\splitter\side1\side1\side1\side0\type=uavGadget
|
||||||
|
Mode1\splitter\side1\side1\side1\side0\classId=LineardialGadget
|
||||||
|
Mode1\splitter\side1\side1\side1\side0\gadget\activeConfiguration=Throttle
|
||||||
|
Mode1\splitter\side1\side1\side1\side1\type=splitter
|
||||||
|
Mode1\splitter\side1\side1\side1\side1\splitterOrientation=1
|
||||||
|
Mode1\splitter\side1\side1\side1\side1\splitterSizes=64, 376
|
||||||
|
Mode1\splitter\side1\side1\side1\side1\side0\type=uavGadget
|
||||||
|
Mode1\splitter\side1\side1\side1\side1\side0\classId=LineardialGadget
|
||||||
|
Mode1\splitter\side1\side1\side1\side1\side0\gadget\activeConfiguration=Roll Desired
|
||||||
|
Mode1\splitter\side1\side1\side1\side1\side1\type=splitter
|
||||||
|
Mode1\splitter\side1\side1\side1\side1\side1\splitterOrientation=1
|
||||||
|
Mode1\splitter\side1\side1\side1\side1\side1\splitterSizes=64, 311
|
||||||
|
Mode1\splitter\side1\side1\side1\side1\side1\side0\type=uavGadget
|
||||||
|
Mode1\splitter\side1\side1\side1\side1\side1\side0\classId=LineardialGadget
|
||||||
|
Mode1\splitter\side1\side1\side1\side1\side1\side0\gadget\activeConfiguration=Pitch Desired
|
||||||
|
Mode1\splitter\side1\side1\side1\side1\side1\side1\type=uavGadget
|
||||||
|
Mode1\splitter\side1\side1\side1\side1\side1\side1\classId=LineardialGadget
|
||||||
|
Mode1\splitter\side1\side1\side1\side1\side1\side1\gadget\activeConfiguration=Yaw Desired
|
||||||
Mode2\version=UAVGadgetManagerV1
|
Mode2\version=UAVGadgetManagerV1
|
||||||
Mode2\showToolbars=false
|
Mode2\showToolbars=false
|
||||||
Mode2\splitter\type=splitter
|
Mode2\splitter\type=splitter
|
||||||
@ -75,7 +183,7 @@ Mode2\splitter\side0\side1\side1\classId=LineardialGadget
|
|||||||
Mode2\splitter\side0\side1\side1\gadget\activeConfiguration=Telemetry TX Rate Horizontal
|
Mode2\splitter\side0\side1\side1\gadget\activeConfiguration=Telemetry TX Rate Horizontal
|
||||||
Mode2\splitter\side1\type=splitter
|
Mode2\splitter\side1\type=splitter
|
||||||
Mode2\splitter\side1\splitterOrientation=2
|
Mode2\splitter\side1\splitterOrientation=2
|
||||||
Mode2\splitter\side1\splitterSizes=433, 347
|
Mode2\splitter\side1\splitterSizes=426, 354
|
||||||
Mode2\splitter\side1\side0\type=uavGadget
|
Mode2\splitter\side1\side0\type=uavGadget
|
||||||
Mode2\splitter\side1\side0\classId=UAVObjectBrowser
|
Mode2\splitter\side1\side0\classId=UAVObjectBrowser
|
||||||
Mode2\splitter\side1\side0\gadget\activeConfiguration=default
|
Mode2\splitter\side1\side0\gadget\activeConfiguration=default
|
||||||
@ -111,11 +219,28 @@ Mode4\splitter\type=splitter
|
|||||||
Mode4\splitter\splitterOrientation=1
|
Mode4\splitter\splitterOrientation=1
|
||||||
Mode4\splitter\splitterSizes=653, 660
|
Mode4\splitter\splitterSizes=653, 660
|
||||||
Mode4\splitter\side0\type=splitter
|
Mode4\splitter\side0\type=splitter
|
||||||
|
Mode4\splitter\side0\splitterOrientation=2
|
||||||
|
Mode4\splitter\side0\splitterSizes=@Invalid()
|
||||||
|
Mode4\splitter\side0\side0\type=uavGadget
|
||||||
|
Mode4\splitter\side0\side0\classId=ScopeGadget
|
||||||
|
Mode4\splitter\side0\side0\gadget\activeConfiguration=Accel
|
||||||
|
Mode4\splitter\side0\side1\type=uavGadget
|
||||||
|
Mode4\splitter\side0\side1\classId=ScopeGadget
|
||||||
|
Mode4\splitter\side0\side1\gadget\activeConfiguration=Raw Gyros
|
||||||
Mode4\splitter\side1\type=splitter
|
Mode4\splitter\side1\type=splitter
|
||||||
Mode4\splitter\side1\splitterOrientation=2
|
Mode4\splitter\side1\splitterOrientation=2
|
||||||
Mode4\splitter\side1\splitterSizes=661, 119
|
Mode4\splitter\side1\splitterSizes=661, 119
|
||||||
Mode4\splitter\side1\side0\type=splitter
|
Mode4\splitter\side1\side0\type=splitter
|
||||||
|
Mode4\splitter\side1\side0\splitterOrientation=2
|
||||||
|
Mode4\splitter\side1\side0\splitterSizes=390, 270
|
||||||
|
Mode4\splitter\side1\side0\side0\type=uavGadget
|
||||||
|
Mode4\splitter\side1\side0\side0\classId=ScopeGadget
|
||||||
|
Mode4\splitter\side1\side0\side0\gadget\activeConfiguration=Attitude
|
||||||
|
Mode4\splitter\side1\side0\side1\type=uavGadget
|
||||||
|
Mode4\splitter\side1\side0\side1\classId=ScopeGadget
|
||||||
|
Mode4\splitter\side1\side0\side1\gadget\activeConfiguration=Uptimes
|
||||||
Mode4\splitter\side1\side1\type=uavGadget
|
Mode4\splitter\side1\side1\type=uavGadget
|
||||||
|
Mode4\splitter\side1\side1\classId=LoggingGadget
|
||||||
Mode5\version=UAVGadgetManagerV1
|
Mode5\version=UAVGadgetManagerV1
|
||||||
Mode5\showToolbars=false
|
Mode5\showToolbars=false
|
||||||
Mode5\splitter\type=splitter
|
Mode5\splitter\type=splitter
|
||||||
@ -141,144 +266,19 @@ Mode5\splitter\side0\side1\side1\side0\splitterOrientation=1
|
|||||||
Mode5\splitter\side0\side1\side1\side0\splitterSizes=@Invalid()
|
Mode5\splitter\side0\side1\side1\side0\splitterSizes=@Invalid()
|
||||||
Mode5\splitter\side0\side1\side1\side0\side0\type=uavGadget
|
Mode5\splitter\side0\side1\side1\side0\side0\type=uavGadget
|
||||||
Mode5\splitter\side0\side1\side1\side0\side0\classId=LineardialGadget
|
Mode5\splitter\side0\side1\side1\side0\side0\classId=LineardialGadget
|
||||||
Mode5\splitter\side0\side1\side1\side0\side0\gadget\activeConfiguration=PitchDesired
|
Mode5\splitter\side0\side1\side1\side0\side0\gadget\activeConfiguration=Pitch Desired
|
||||||
Mode5\splitter\side0\side1\side1\side0\side1\type=uavGadget
|
Mode5\splitter\side0\side1\side1\side0\side1\type=uavGadget
|
||||||
Mode5\splitter\side0\side1\side1\side0\side1\classId=LineardialGadget
|
Mode5\splitter\side0\side1\side1\side0\side1\classId=LineardialGadget
|
||||||
Mode5\splitter\side0\side1\side1\side0\side1\gadget\activeConfiguration=PitchActual
|
Mode5\splitter\side0\side1\side1\side0\side1\gadget\activeConfiguration=PitchActual
|
||||||
Mode5\splitter\side0\side1\side1\side1\type=uavGadget
|
Mode5\splitter\side0\side1\side1\side1\type=uavGadget
|
||||||
Mode5\splitter\side0\side1\side1\side1\classId=LineardialGadget
|
Mode5\splitter\side0\side1\side1\side1\classId=LineardialGadget
|
||||||
Mode5\splitter\side0\side1\side1\side1\gadget\activeConfiguration=PitchCommand
|
Mode5\splitter\side0\side1\side1\side1\gadget\activeConfiguration=Pitch
|
||||||
Mode5\splitter\side1\type=uavGadget
|
Mode5\splitter\side1\type=uavGadget
|
||||||
Mode5\splitter\side1\classId=UAVObjectBrowser
|
Mode5\splitter\side1\classId=UAVObjectBrowser
|
||||||
Mode5\splitter\side1\gadget\activeConfiguration=default
|
Mode5\splitter\side1\gadget\activeConfiguration=default
|
||||||
Mode1\splitter\side0\side0\side0\splitterOrientation=2
|
|
||||||
Mode1\splitter\side0\side0\side0\splitterSizes=215, 237
|
|
||||||
Mode1\splitter\side0\side0\side0\side0\type=splitter
|
|
||||||
Mode1\splitter\side0\side0\side0\side1\type=splitter
|
|
||||||
Mode1\splitter\side0\side0\side0\side1\splitterOrientation=2
|
|
||||||
Mode1\splitter\side0\side0\side0\side1\splitterSizes=@Invalid()
|
|
||||||
Mode1\splitter\side0\side0\side0\side1\side0\type=uavGadget
|
|
||||||
Mode1\splitter\side0\side0\side0\side1\side0\classId=LineardialGadget
|
|
||||||
Mode1\splitter\side0\side0\side0\side1\side0\gadget\activeConfiguration=Flight mode
|
|
||||||
Mode1\splitter\side0\side0\side0\side1\side1\type=uavGadget
|
|
||||||
Mode1\splitter\side0\side0\side0\side1\side1\classId=LineardialGadget
|
|
||||||
Mode1\splitter\side0\side0\side0\side1\side1\gadget\activeConfiguration=Arm Status
|
|
||||||
Mode1\splitter\side1\side0\classId=OPMapGadget
|
|
||||||
Mode1\splitter\side1\side0\gadget\activeConfiguration=Google Sat
|
|
||||||
Mode1\splitter\side1\side1\side0\splitterOrientation=1
|
|
||||||
Mode1\splitter\side1\side1\side0\splitterSizes=277, 135
|
|
||||||
Mode1\splitter\side1\side1\side0\side0\type=splitter
|
|
||||||
Mode1\splitter\side1\side1\side0\side1\type=splitter
|
|
||||||
Mode1\splitter\side0\side1\splitterOrientation=1
|
|
||||||
Mode1\splitter\side0\side1\splitterSizes=304, 433
|
|
||||||
Mode1\splitter\side0\side1\side0\type=uavGadget
|
|
||||||
Mode1\splitter\side0\side1\side1\type=splitter
|
|
||||||
Mode1\splitter\side0\side1\side1\splitterOrientation=2
|
|
||||||
Mode1\splitter\side0\side1\side1\splitterSizes=293, 64
|
|
||||||
Mode1\splitter\side0\side1\side1\side0\type=splitter
|
|
||||||
Mode1\splitter\side0\side1\side1\side1\type=splitter
|
|
||||||
Mode1\splitter\side1\side1\side0\side0\splitterOrientation=1
|
|
||||||
Mode1\splitter\side1\side1\side0\side0\splitterSizes=131, 138
|
|
||||||
Mode1\splitter\side1\side1\side0\side0\side0\type=splitter
|
|
||||||
Mode1\splitter\side1\side1\side0\side0\side1\type=splitter
|
|
||||||
Mode1\splitter\side0\side1\side0\classId=ModelViewGadget
|
|
||||||
Mode1\splitter\side0\side1\side0\gadget\activeConfiguration=Test Quad X
|
|
||||||
Mode1\splitter\side0\side1\side1\side0\splitterOrientation=1
|
|
||||||
Mode1\splitter\side0\side1\side1\side0\splitterSizes=291, 141
|
|
||||||
Mode1\splitter\side0\side1\side1\side0\side0\type=uavGadget
|
|
||||||
Mode1\splitter\side0\side1\side1\side0\side0\classId=SystemHealthGadget
|
|
||||||
Mode1\splitter\side0\side1\side1\side0\side0\gadget\activeConfiguration=default
|
|
||||||
Mode1\splitter\side0\side1\side1\side0\side1\type=splitter
|
|
||||||
Mode1\splitter\side0\side1\side1\side1\splitterOrientation=1
|
|
||||||
Mode1\splitter\side0\side1\side1\side1\splitterSizes=@Invalid()
|
|
||||||
Mode1\splitter\side0\side1\side1\side1\side0\type=uavGadget
|
|
||||||
Mode1\splitter\side0\side1\side1\side1\side0\classId=LineardialGadget
|
|
||||||
Mode1\splitter\side0\side1\side1\side1\side0\gadget\activeConfiguration=Telemetry RX Rate Horizontal
|
|
||||||
Mode1\splitter\side0\side1\side1\side1\side1\type=uavGadget
|
|
||||||
Mode1\splitter\side0\side1\side1\side1\side1\classId=LineardialGadget
|
|
||||||
Mode1\splitter\side0\side1\side1\side1\side1\gadget\activeConfiguration=Telemetry TX Rate Horizontal
|
|
||||||
Mode1\splitter\side0\side1\side1\side0\side1\splitterOrientation=1
|
|
||||||
Mode1\splitter\side0\side1\side1\side0\side1\splitterSizes=64, 64
|
|
||||||
Mode1\splitter\side0\side1\side1\side0\side1\side0\type=uavGadget
|
|
||||||
Mode1\splitter\side0\side1\side1\side0\side1\side0\classId=LineardialGadget
|
|
||||||
Mode1\splitter\side0\side1\side1\side0\side1\side0\gadget\activeConfiguration=Mainboard CPU
|
|
||||||
Mode1\splitter\side0\side1\side1\side0\side1\side1\type=uavGadget
|
|
||||||
Mode1\splitter\side0\side1\side1\side0\side1\side1\classId=LineardialGadget
|
|
||||||
Mode1\splitter\side0\side1\side1\side0\side1\side1\gadget\activeConfiguration=AHRS CPU
|
|
||||||
Mode1\splitter\side1\side1\side0\side0\side0\splitterOrientation=2
|
|
||||||
Mode1\splitter\side1\side1\side0\side0\side0\splitterSizes=@Invalid()
|
|
||||||
Mode1\splitter\side1\side1\side0\side0\side0\side0\type=uavGadget
|
|
||||||
Mode1\splitter\side1\side1\side0\side0\side0\side0\classId=DialGadget
|
|
||||||
Mode1\splitter\side1\side1\side0\side0\side0\side0\gadget\activeConfiguration=Deluxe Groundspeed kph
|
|
||||||
Mode1\splitter\side1\side1\side0\side0\side0\side1\type=uavGadget
|
|
||||||
Mode1\splitter\side1\side1\side0\side0\side0\side1\classId=DialGadget
|
|
||||||
Mode1\splitter\side1\side1\side0\side0\side0\side1\gadget\activeConfiguration=Deluxe Barometer
|
|
||||||
Mode1\splitter\side1\side1\side0\side0\side1\splitterOrientation=2
|
|
||||||
Mode1\splitter\side1\side1\side0\side0\side1\splitterSizes=@Invalid()
|
|
||||||
Mode1\splitter\side1\side1\side0\side0\side1\side0\type=uavGadget
|
|
||||||
Mode1\splitter\side1\side1\side0\side0\side1\side0\classId=DialGadget
|
|
||||||
Mode1\splitter\side1\side1\side0\side0\side1\side0\gadget\activeConfiguration=Deluxe Attitude
|
|
||||||
Mode1\splitter\side1\side1\side0\side0\side1\side1\type=uavGadget
|
|
||||||
Mode1\splitter\side1\side1\side0\side0\side1\side1\classId=DialGadget
|
|
||||||
Mode1\splitter\side1\side1\side0\side0\side1\side1\gadget\activeConfiguration=Deluxe Compass
|
|
||||||
Mode1\splitter\side1\side1\side0\side1\splitterOrientation=2
|
|
||||||
Mode1\splitter\side1\side1\side0\side1\splitterSizes=@Invalid()
|
|
||||||
Mode1\splitter\side1\side1\side0\side1\side0\type=uavGadget
|
|
||||||
Mode1\splitter\side1\side1\side0\side1\side0\classId=DialGadget
|
|
||||||
Mode1\splitter\side1\side1\side0\side1\side0\gadget\activeConfiguration=Deluxe Baro Altimeter
|
|
||||||
Mode1\splitter\side1\side1\side0\side1\side1\type=uavGadget
|
|
||||||
Mode1\splitter\side1\side1\side0\side1\side1\classId=DialGadget
|
|
||||||
Mode1\splitter\side1\side1\side0\side1\side1\gadget\activeConfiguration=Deluxe Climbrate
|
|
||||||
Mode1\splitter\side0\side0\side0\side0\splitterOrientation=2
|
|
||||||
Mode1\splitter\side0\side0\side0\side0\splitterSizes=@Invalid()
|
|
||||||
Mode1\splitter\side0\side0\side0\side0\side0\type=uavGadget
|
|
||||||
Mode1\splitter\side0\side0\side0\side0\side0\classId=LineardialGadget
|
|
||||||
Mode1\splitter\side0\side0\side0\side0\side0\gadget\activeConfiguration=Flight Time
|
|
||||||
Mode1\splitter\side0\side0\side0\side0\side1\type=uavGadget
|
|
||||||
Mode1\splitter\side0\side0\side0\side0\side1\classId=LineardialGadget
|
|
||||||
Mode1\splitter\side0\side0\side0\side0\side1\gadget\activeConfiguration=GPS Sats
|
|
||||||
Mode1\splitter\side0\side0\side1\classId=PFDGadget
|
|
||||||
Mode1\splitter\side0\side0\side1\gadget\activeConfiguration=raw
|
|
||||||
Mode1\splitter\side1\side1\side1\splitterOrientation=1
|
|
||||||
Mode1\splitter\side1\side1\side1\splitterSizes=64, 441
|
|
||||||
Mode1\splitter\side1\side1\side1\side0\type=uavGadget
|
|
||||||
Mode1\splitter\side1\side1\side1\side0\classId=LineardialGadget
|
|
||||||
Mode1\splitter\side1\side1\side1\side0\gadget\activeConfiguration=Throttle
|
|
||||||
Mode1\splitter\side1\side1\side1\side1\type=splitter
|
|
||||||
Mode1\splitter\side1\side1\side1\side1\splitterOrientation=1
|
|
||||||
Mode1\splitter\side1\side1\side1\side1\splitterSizes=64, 376
|
|
||||||
Mode1\splitter\side1\side1\side1\side1\side0\type=uavGadget
|
|
||||||
Mode1\splitter\side1\side1\side1\side1\side0\classId=LineardialGadget
|
|
||||||
Mode1\splitter\side1\side1\side1\side1\side0\gadget\activeConfiguration=Roll
|
|
||||||
Mode1\splitter\side1\side1\side1\side1\side1\type=splitter
|
|
||||||
Mode1\splitter\side1\side1\side1\side1\side1\splitterOrientation=1
|
|
||||||
Mode1\splitter\side1\side1\side1\side1\side1\splitterSizes=64, 311
|
|
||||||
Mode1\splitter\side1\side1\side1\side1\side1\side0\type=uavGadget
|
|
||||||
Mode1\splitter\side1\side1\side1\side1\side1\side0\classId=LineardialGadget
|
|
||||||
Mode1\splitter\side1\side1\side1\side1\side1\side0\gadget\activeConfiguration=PitchActual
|
|
||||||
Mode1\splitter\side1\side1\side1\side1\side1\side1\type=uavGadget
|
|
||||||
Mode1\splitter\side1\side1\side1\side1\side1\side1\classId=LineardialGadget
|
|
||||||
Mode1\splitter\side1\side1\side1\side1\side1\side1\gadget\activeConfiguration=Yaw
|
|
||||||
Mode6\version=UAVGadgetManagerV1
|
Mode6\version=UAVGadgetManagerV1
|
||||||
Mode6\showToolbars=false
|
Mode6\showToolbars=false
|
||||||
Mode6\splitter\type=splitter
|
Mode6\splitter\type=splitter
|
||||||
Mode4\splitter\side0\splitterOrientation=2
|
|
||||||
Mode4\splitter\side0\splitterSizes=@Invalid()
|
|
||||||
Mode4\splitter\side0\side0\type=uavGadget
|
|
||||||
Mode4\splitter\side0\side0\classId=ScopeGadget
|
|
||||||
Mode4\splitter\side0\side0\gadget\activeConfiguration=Accel
|
|
||||||
Mode4\splitter\side0\side1\type=uavGadget
|
|
||||||
Mode4\splitter\side0\side1\classId=ScopeGadget
|
|
||||||
Mode4\splitter\side0\side1\gadget\activeConfiguration=Raw Gyros
|
|
||||||
Mode4\splitter\side1\side0\splitterOrientation=2
|
|
||||||
Mode4\splitter\side1\side0\splitterSizes=390, 270
|
|
||||||
Mode4\splitter\side1\side0\side0\type=uavGadget
|
|
||||||
Mode4\splitter\side1\side0\side0\classId=ScopeGadget
|
|
||||||
Mode4\splitter\side1\side0\side0\gadget\activeConfiguration=Attitude
|
|
||||||
Mode4\splitter\side1\side0\side1\type=uavGadget
|
|
||||||
Mode4\splitter\side1\side0\side1\classId=ScopeGadget
|
|
||||||
Mode4\splitter\side1\side0\side1\gadget\activeConfiguration=Uptimes
|
|
||||||
Mode4\splitter\side1\side1\classId=LoggingGadget
|
|
||||||
Mode6\splitter\splitterOrientation=1
|
Mode6\splitter\splitterOrientation=1
|
||||||
Mode6\splitter\splitterSizes=@Invalid()
|
Mode6\splitter\splitterSizes=@Invalid()
|
||||||
Mode6\splitter\side0\type=uavGadget
|
Mode6\splitter\side0\type=uavGadget
|
||||||
@ -288,9 +288,6 @@ Mode6\splitter\side1\type=splitter
|
|||||||
Mode6\splitter\side1\splitterOrientation=2
|
Mode6\splitter\side1\splitterOrientation=2
|
||||||
Mode6\splitter\side1\splitterSizes=274, 506
|
Mode6\splitter\side1\splitterSizes=274, 506
|
||||||
Mode6\splitter\side1\side0\type=splitter
|
Mode6\splitter\side1\side0\type=splitter
|
||||||
Mode6\splitter\side1\side1\type=uavGadget
|
|
||||||
Mode6\splitter\side1\side1\classId=ScopeGadget
|
|
||||||
Mode6\splitter\side1\side1\gadget\activeConfiguration=Uptimes
|
|
||||||
Mode6\splitter\side1\side0\splitterOrientation=1
|
Mode6\splitter\side1\side0\splitterOrientation=1
|
||||||
Mode6\splitter\side1\side0\splitterSizes=322, 396
|
Mode6\splitter\side1\side0\splitterSizes=322, 396
|
||||||
Mode6\splitter\side1\side0\side0\type=uavGadget
|
Mode6\splitter\side1\side0\side0\type=uavGadget
|
||||||
@ -299,17 +296,16 @@ Mode6\splitter\side1\side0\side0\gadget\activeConfiguration=default
|
|||||||
Mode6\splitter\side1\side0\side1\type=uavGadget
|
Mode6\splitter\side1\side0\side1\type=uavGadget
|
||||||
Mode6\splitter\side1\side0\side1\classId=PFDGadget
|
Mode6\splitter\side1\side0\side1\classId=PFDGadget
|
||||||
Mode6\splitter\side1\side0\side1\gadget\activeConfiguration=raw
|
Mode6\splitter\side1\side0\side1\gadget\activeConfiguration=raw
|
||||||
|
Mode6\splitter\side1\side1\type=uavGadget
|
||||||
|
Mode6\splitter\side1\side1\classId=ScopeGadget
|
||||||
|
Mode6\splitter\side1\side1\gadget\activeConfiguration=Uptimes
|
||||||
|
|
||||||
[KeyBindings]
|
[KeyBindings]
|
||||||
size=0
|
size=0
|
||||||
|
|
||||||
[%General]
|
[%General]
|
||||||
SaveSettingsOnExit=true
|
|
||||||
LastPreferenceCategory=OPMapGadget
|
|
||||||
LastPreferencePage=default
|
|
||||||
SettingsWindowWidth=697
|
|
||||||
SettingsWindowHeight=476
|
|
||||||
OverrideLanguage=en_AU
|
OverrideLanguage=en_AU
|
||||||
|
SaveSettingsOnExit=true
|
||||||
|
|
||||||
[UAVGadgetConfigurations]
|
[UAVGadgetConfigurations]
|
||||||
configInfo\version=1.2.0
|
configInfo\version=1.2.0
|
||||||
@ -340,7 +336,7 @@ DialGadget\Attitude\data\needle3Factor=-1
|
|||||||
DialGadget\Attitude\data\needle1Move=Rotate
|
DialGadget\Attitude\data\needle1Move=Rotate
|
||||||
DialGadget\Attitude\data\needle2Move=Vertical
|
DialGadget\Attitude\data\needle2Move=Vertical
|
||||||
DialGadget\Attitude\data\needle3Move=Rotate
|
DialGadget\Attitude\data\needle3Move=Rotate
|
||||||
DialGadget\Attitude\data\font="MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0"
|
DialGadget\Attitude\data\font="Ubuntu,11,-1,5,50,0,0,0,0,0"
|
||||||
DialGadget\Attitude\data\useOpenGLFlag=false
|
DialGadget\Attitude\data\useOpenGLFlag=false
|
||||||
DialGadget\Attitude\data\beSmooth=false
|
DialGadget\Attitude\data\beSmooth=false
|
||||||
DialGadget\Attitude\configInfo\version=0.0.0
|
DialGadget\Attitude\configInfo\version=0.0.0
|
||||||
@ -369,7 +365,7 @@ DialGadget\Baro%20Altimeter\data\needle3Factor=1
|
|||||||
DialGadget\Baro%20Altimeter\data\needle1Move=Rotate
|
DialGadget\Baro%20Altimeter\data\needle1Move=Rotate
|
||||||
DialGadget\Baro%20Altimeter\data\needle2Move=Rotate
|
DialGadget\Baro%20Altimeter\data\needle2Move=Rotate
|
||||||
DialGadget\Baro%20Altimeter\data\needle3Move=Rotate
|
DialGadget\Baro%20Altimeter\data\needle3Move=Rotate
|
||||||
DialGadget\Baro%20Altimeter\data\font="MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0"
|
DialGadget\Baro%20Altimeter\data\font="Ubuntu,11,-1,5,50,0,0,0,0,0"
|
||||||
DialGadget\Baro%20Altimeter\data\useOpenGLFlag=false
|
DialGadget\Baro%20Altimeter\data\useOpenGLFlag=false
|
||||||
DialGadget\Baro%20Altimeter\data\beSmooth=false
|
DialGadget\Baro%20Altimeter\data\beSmooth=false
|
||||||
DialGadget\Baro%20Altimeter\configInfo\version=0.0.0
|
DialGadget\Baro%20Altimeter\configInfo\version=0.0.0
|
||||||
@ -398,7 +394,7 @@ DialGadget\Barometer\data\needle3Factor=1
|
|||||||
DialGadget\Barometer\data\needle1Move=Rotate
|
DialGadget\Barometer\data\needle1Move=Rotate
|
||||||
DialGadget\Barometer\data\needle2Move=Rotate
|
DialGadget\Barometer\data\needle2Move=Rotate
|
||||||
DialGadget\Barometer\data\needle3Move=Rotate
|
DialGadget\Barometer\data\needle3Move=Rotate
|
||||||
DialGadget\Barometer\data\font="MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0"
|
DialGadget\Barometer\data\font="Ubuntu,11,-1,5,50,0,0,0,0,0"
|
||||||
DialGadget\Barometer\data\useOpenGLFlag=false
|
DialGadget\Barometer\data\useOpenGLFlag=false
|
||||||
DialGadget\Barometer\data\beSmooth=false
|
DialGadget\Barometer\data\beSmooth=false
|
||||||
DialGadget\Barometer\configInfo\version=0.0.0
|
DialGadget\Barometer\configInfo\version=0.0.0
|
||||||
@ -427,7 +423,7 @@ DialGadget\Climbrate\data\needle3Factor=1
|
|||||||
DialGadget\Climbrate\data\needle1Move=Rotate
|
DialGadget\Climbrate\data\needle1Move=Rotate
|
||||||
DialGadget\Climbrate\data\needle2Move=Rotate
|
DialGadget\Climbrate\data\needle2Move=Rotate
|
||||||
DialGadget\Climbrate\data\needle3Move=Rotate
|
DialGadget\Climbrate\data\needle3Move=Rotate
|
||||||
DialGadget\Climbrate\data\font="MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0"
|
DialGadget\Climbrate\data\font="Ubuntu,11,-1,5,50,0,0,0,0,0"
|
||||||
DialGadget\Climbrate\data\useOpenGLFlag=false
|
DialGadget\Climbrate\data\useOpenGLFlag=false
|
||||||
DialGadget\Climbrate\data\beSmooth=false
|
DialGadget\Climbrate\data\beSmooth=false
|
||||||
DialGadget\Climbrate\configInfo\version=0.0.0
|
DialGadget\Climbrate\configInfo\version=0.0.0
|
||||||
@ -456,7 +452,7 @@ DialGadget\Compass\data\needle3Factor=1
|
|||||||
DialGadget\Compass\data\needle1Move=Rotate
|
DialGadget\Compass\data\needle1Move=Rotate
|
||||||
DialGadget\Compass\data\needle2Move=Rotate
|
DialGadget\Compass\data\needle2Move=Rotate
|
||||||
DialGadget\Compass\data\needle3Move=Rotate
|
DialGadget\Compass\data\needle3Move=Rotate
|
||||||
DialGadget\Compass\data\font="MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0"
|
DialGadget\Compass\data\font="Ubuntu,11,-1,5,50,0,0,0,0,0"
|
||||||
DialGadget\Compass\data\useOpenGLFlag=false
|
DialGadget\Compass\data\useOpenGLFlag=false
|
||||||
DialGadget\Compass\data\beSmooth=false
|
DialGadget\Compass\data\beSmooth=false
|
||||||
DialGadget\Compass\configInfo\version=0.0.0
|
DialGadget\Compass\configInfo\version=0.0.0
|
||||||
@ -485,7 +481,7 @@ DialGadget\Deluxe%20Attitude\data\needle3Factor=-1
|
|||||||
DialGadget\Deluxe%20Attitude\data\needle1Move=Rotate
|
DialGadget\Deluxe%20Attitude\data\needle1Move=Rotate
|
||||||
DialGadget\Deluxe%20Attitude\data\needle2Move=Vertical
|
DialGadget\Deluxe%20Attitude\data\needle2Move=Vertical
|
||||||
DialGadget\Deluxe%20Attitude\data\needle3Move=Rotate
|
DialGadget\Deluxe%20Attitude\data\needle3Move=Rotate
|
||||||
DialGadget\Deluxe%20Attitude\data\font="MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0"
|
DialGadget\Deluxe%20Attitude\data\font="Ubuntu,11,-1,5,50,0,0,0,0,0"
|
||||||
DialGadget\Deluxe%20Attitude\data\useOpenGLFlag=false
|
DialGadget\Deluxe%20Attitude\data\useOpenGLFlag=false
|
||||||
DialGadget\Deluxe%20Attitude\data\beSmooth=false
|
DialGadget\Deluxe%20Attitude\data\beSmooth=false
|
||||||
DialGadget\Deluxe%20Attitude\configInfo\version=0.0.0
|
DialGadget\Deluxe%20Attitude\configInfo\version=0.0.0
|
||||||
@ -514,7 +510,7 @@ DialGadget\Deluxe%20Baro%20Altimeter\data\needle3Factor=1
|
|||||||
DialGadget\Deluxe%20Baro%20Altimeter\data\needle1Move=Rotate
|
DialGadget\Deluxe%20Baro%20Altimeter\data\needle1Move=Rotate
|
||||||
DialGadget\Deluxe%20Baro%20Altimeter\data\needle2Move=Rotate
|
DialGadget\Deluxe%20Baro%20Altimeter\data\needle2Move=Rotate
|
||||||
DialGadget\Deluxe%20Baro%20Altimeter\data\needle3Move=Rotate
|
DialGadget\Deluxe%20Baro%20Altimeter\data\needle3Move=Rotate
|
||||||
DialGadget\Deluxe%20Baro%20Altimeter\data\font="MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0"
|
DialGadget\Deluxe%20Baro%20Altimeter\data\font="Ubuntu,11,-1,5,50,0,0,0,0,0"
|
||||||
DialGadget\Deluxe%20Baro%20Altimeter\data\useOpenGLFlag=false
|
DialGadget\Deluxe%20Baro%20Altimeter\data\useOpenGLFlag=false
|
||||||
DialGadget\Deluxe%20Baro%20Altimeter\data\beSmooth=false
|
DialGadget\Deluxe%20Baro%20Altimeter\data\beSmooth=false
|
||||||
DialGadget\Deluxe%20Baro%20Altimeter\configInfo\version=0.0.0
|
DialGadget\Deluxe%20Baro%20Altimeter\configInfo\version=0.0.0
|
||||||
@ -543,7 +539,7 @@ DialGadget\Deluxe%20Barometer\data\needle3Factor=1
|
|||||||
DialGadget\Deluxe%20Barometer\data\needle1Move=Rotate
|
DialGadget\Deluxe%20Barometer\data\needle1Move=Rotate
|
||||||
DialGadget\Deluxe%20Barometer\data\needle2Move=Rotate
|
DialGadget\Deluxe%20Barometer\data\needle2Move=Rotate
|
||||||
DialGadget\Deluxe%20Barometer\data\needle3Move=Rotate
|
DialGadget\Deluxe%20Barometer\data\needle3Move=Rotate
|
||||||
DialGadget\Deluxe%20Barometer\data\font="MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0"
|
DialGadget\Deluxe%20Barometer\data\font="Ubuntu,11,-1,5,50,0,0,0,0,0"
|
||||||
DialGadget\Deluxe%20Barometer\data\useOpenGLFlag=false
|
DialGadget\Deluxe%20Barometer\data\useOpenGLFlag=false
|
||||||
DialGadget\Deluxe%20Barometer\data\beSmooth=false
|
DialGadget\Deluxe%20Barometer\data\beSmooth=false
|
||||||
DialGadget\Deluxe%20Barometer\configInfo\version=0.0.0
|
DialGadget\Deluxe%20Barometer\configInfo\version=0.0.0
|
||||||
@ -572,7 +568,7 @@ DialGadget\Deluxe%20Climbrate\data\needle3Factor=1
|
|||||||
DialGadget\Deluxe%20Climbrate\data\needle1Move=Rotate
|
DialGadget\Deluxe%20Climbrate\data\needle1Move=Rotate
|
||||||
DialGadget\Deluxe%20Climbrate\data\needle2Move=Rotate
|
DialGadget\Deluxe%20Climbrate\data\needle2Move=Rotate
|
||||||
DialGadget\Deluxe%20Climbrate\data\needle3Move=Rotate
|
DialGadget\Deluxe%20Climbrate\data\needle3Move=Rotate
|
||||||
DialGadget\Deluxe%20Climbrate\data\font="MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0"
|
DialGadget\Deluxe%20Climbrate\data\font="Ubuntu,11,-1,5,50,0,0,0,0,0"
|
||||||
DialGadget\Deluxe%20Climbrate\data\useOpenGLFlag=false
|
DialGadget\Deluxe%20Climbrate\data\useOpenGLFlag=false
|
||||||
DialGadget\Deluxe%20Climbrate\data\beSmooth=false
|
DialGadget\Deluxe%20Climbrate\data\beSmooth=false
|
||||||
DialGadget\Deluxe%20Climbrate\configInfo\version=0.0.0
|
DialGadget\Deluxe%20Climbrate\configInfo\version=0.0.0
|
||||||
@ -601,7 +597,7 @@ DialGadget\Deluxe%20Compass\data\needle3Factor=1
|
|||||||
DialGadget\Deluxe%20Compass\data\needle1Move=Rotate
|
DialGadget\Deluxe%20Compass\data\needle1Move=Rotate
|
||||||
DialGadget\Deluxe%20Compass\data\needle2Move=Rotate
|
DialGadget\Deluxe%20Compass\data\needle2Move=Rotate
|
||||||
DialGadget\Deluxe%20Compass\data\needle3Move=Rotate
|
DialGadget\Deluxe%20Compass\data\needle3Move=Rotate
|
||||||
DialGadget\Deluxe%20Compass\data\font="MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0"
|
DialGadget\Deluxe%20Compass\data\font="Ubuntu,11,-1,5,50,0,0,0,0,0"
|
||||||
DialGadget\Deluxe%20Compass\data\useOpenGLFlag=false
|
DialGadget\Deluxe%20Compass\data\useOpenGLFlag=false
|
||||||
DialGadget\Deluxe%20Compass\data\beSmooth=false
|
DialGadget\Deluxe%20Compass\data\beSmooth=false
|
||||||
DialGadget\Deluxe%20Compass\configInfo\version=0.0.0
|
DialGadget\Deluxe%20Compass\configInfo\version=0.0.0
|
||||||
@ -630,7 +626,7 @@ DialGadget\Deluxe%20Groundspeed%20kph\data\needle3Factor=1
|
|||||||
DialGadget\Deluxe%20Groundspeed%20kph\data\needle1Move=Rotate
|
DialGadget\Deluxe%20Groundspeed%20kph\data\needle1Move=Rotate
|
||||||
DialGadget\Deluxe%20Groundspeed%20kph\data\needle2Move=Rotate
|
DialGadget\Deluxe%20Groundspeed%20kph\data\needle2Move=Rotate
|
||||||
DialGadget\Deluxe%20Groundspeed%20kph\data\needle3Move=Rotate
|
DialGadget\Deluxe%20Groundspeed%20kph\data\needle3Move=Rotate
|
||||||
DialGadget\Deluxe%20Groundspeed%20kph\data\font="MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0"
|
DialGadget\Deluxe%20Groundspeed%20kph\data\font="Ubuntu,11,-1,5,50,0,0,0,0,0"
|
||||||
DialGadget\Deluxe%20Groundspeed%20kph\data\useOpenGLFlag=false
|
DialGadget\Deluxe%20Groundspeed%20kph\data\useOpenGLFlag=false
|
||||||
DialGadget\Deluxe%20Groundspeed%20kph\data\beSmooth=false
|
DialGadget\Deluxe%20Groundspeed%20kph\data\beSmooth=false
|
||||||
DialGadget\Deluxe%20Groundspeed%20kph\configInfo\version=0.0.0
|
DialGadget\Deluxe%20Groundspeed%20kph\configInfo\version=0.0.0
|
||||||
@ -659,7 +655,7 @@ DialGadget\Deluxe%20Temperature\data\needle3Factor=1
|
|||||||
DialGadget\Deluxe%20Temperature\data\needle1Move=Rotate
|
DialGadget\Deluxe%20Temperature\data\needle1Move=Rotate
|
||||||
DialGadget\Deluxe%20Temperature\data\needle2Move=Rotate
|
DialGadget\Deluxe%20Temperature\data\needle2Move=Rotate
|
||||||
DialGadget\Deluxe%20Temperature\data\needle3Move=Rotate
|
DialGadget\Deluxe%20Temperature\data\needle3Move=Rotate
|
||||||
DialGadget\Deluxe%20Temperature\data\font="MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0"
|
DialGadget\Deluxe%20Temperature\data\font="Ubuntu,11,-1,5,50,0,0,0,0,0"
|
||||||
DialGadget\Deluxe%20Temperature\data\useOpenGLFlag=false
|
DialGadget\Deluxe%20Temperature\data\useOpenGLFlag=false
|
||||||
DialGadget\Deluxe%20Temperature\data\beSmooth=false
|
DialGadget\Deluxe%20Temperature\data\beSmooth=false
|
||||||
DialGadget\Deluxe%20Temperature\configInfo\version=0.0.0
|
DialGadget\Deluxe%20Temperature\configInfo\version=0.0.0
|
||||||
@ -688,7 +684,7 @@ DialGadget\Deluxe%20Turn%20Coordinator\data\needle3Factor=-1
|
|||||||
DialGadget\Deluxe%20Turn%20Coordinator\data\needle1Move=Rotate
|
DialGadget\Deluxe%20Turn%20Coordinator\data\needle1Move=Rotate
|
||||||
DialGadget\Deluxe%20Turn%20Coordinator\data\needle2Move=Horizontal
|
DialGadget\Deluxe%20Turn%20Coordinator\data\needle2Move=Horizontal
|
||||||
DialGadget\Deluxe%20Turn%20Coordinator\data\needle3Move=Rotate
|
DialGadget\Deluxe%20Turn%20Coordinator\data\needle3Move=Rotate
|
||||||
DialGadget\Deluxe%20Turn%20Coordinator\data\font="MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0"
|
DialGadget\Deluxe%20Turn%20Coordinator\data\font="Ubuntu,11,-1,5,50,0,0,0,0,0"
|
||||||
DialGadget\Deluxe%20Turn%20Coordinator\data\useOpenGLFlag=false
|
DialGadget\Deluxe%20Turn%20Coordinator\data\useOpenGLFlag=false
|
||||||
DialGadget\Deluxe%20Turn%20Coordinator\data\beSmooth=false
|
DialGadget\Deluxe%20Turn%20Coordinator\data\beSmooth=false
|
||||||
DialGadget\Deluxe%20Turn%20Coordinator\configInfo\version=0.0.0
|
DialGadget\Deluxe%20Turn%20Coordinator\configInfo\version=0.0.0
|
||||||
@ -717,7 +713,7 @@ DialGadget\Groundspeed%20kph\data\needle3Factor=1
|
|||||||
DialGadget\Groundspeed%20kph\data\needle1Move=Rotate
|
DialGadget\Groundspeed%20kph\data\needle1Move=Rotate
|
||||||
DialGadget\Groundspeed%20kph\data\needle2Move=Rotate
|
DialGadget\Groundspeed%20kph\data\needle2Move=Rotate
|
||||||
DialGadget\Groundspeed%20kph\data\needle3Move=Rotate
|
DialGadget\Groundspeed%20kph\data\needle3Move=Rotate
|
||||||
DialGadget\Groundspeed%20kph\data\font="MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0"
|
DialGadget\Groundspeed%20kph\data\font="Ubuntu,11,-1,5,50,0,0,0,0,0"
|
||||||
DialGadget\Groundspeed%20kph\data\useOpenGLFlag=false
|
DialGadget\Groundspeed%20kph\data\useOpenGLFlag=false
|
||||||
DialGadget\Groundspeed%20kph\data\beSmooth=false
|
DialGadget\Groundspeed%20kph\data\beSmooth=false
|
||||||
DialGadget\Groundspeed%20kph\configInfo\version=0.0.0
|
DialGadget\Groundspeed%20kph\configInfo\version=0.0.0
|
||||||
@ -746,7 +742,7 @@ DialGadget\HiContrast%20Attitude\data\needle3Factor=-1
|
|||||||
DialGadget\HiContrast%20Attitude\data\needle1Move=Rotate
|
DialGadget\HiContrast%20Attitude\data\needle1Move=Rotate
|
||||||
DialGadget\HiContrast%20Attitude\data\needle2Move=Vertical
|
DialGadget\HiContrast%20Attitude\data\needle2Move=Vertical
|
||||||
DialGadget\HiContrast%20Attitude\data\needle3Move=Rotate
|
DialGadget\HiContrast%20Attitude\data\needle3Move=Rotate
|
||||||
DialGadget\HiContrast%20Attitude\data\font="MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0"
|
DialGadget\HiContrast%20Attitude\data\font="Ubuntu,11,-1,5,50,0,0,0,0,0"
|
||||||
DialGadget\HiContrast%20Attitude\data\useOpenGLFlag=false
|
DialGadget\HiContrast%20Attitude\data\useOpenGLFlag=false
|
||||||
DialGadget\HiContrast%20Attitude\data\beSmooth=false
|
DialGadget\HiContrast%20Attitude\data\beSmooth=false
|
||||||
DialGadget\HiContrast%20Attitude\configInfo\version=0.0.0
|
DialGadget\HiContrast%20Attitude\configInfo\version=0.0.0
|
||||||
@ -775,7 +771,7 @@ DialGadget\HiContrast%20Baro%20Altimeter\data\needle3Factor=1
|
|||||||
DialGadget\HiContrast%20Baro%20Altimeter\data\needle1Move=Rotate
|
DialGadget\HiContrast%20Baro%20Altimeter\data\needle1Move=Rotate
|
||||||
DialGadget\HiContrast%20Baro%20Altimeter\data\needle2Move=Rotate
|
DialGadget\HiContrast%20Baro%20Altimeter\data\needle2Move=Rotate
|
||||||
DialGadget\HiContrast%20Baro%20Altimeter\data\needle3Move=Rotate
|
DialGadget\HiContrast%20Baro%20Altimeter\data\needle3Move=Rotate
|
||||||
DialGadget\HiContrast%20Baro%20Altimeter\data\font="MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0"
|
DialGadget\HiContrast%20Baro%20Altimeter\data\font="Ubuntu,11,-1,5,50,0,0,0,0,0"
|
||||||
DialGadget\HiContrast%20Baro%20Altimeter\data\useOpenGLFlag=false
|
DialGadget\HiContrast%20Baro%20Altimeter\data\useOpenGLFlag=false
|
||||||
DialGadget\HiContrast%20Baro%20Altimeter\data\beSmooth=false
|
DialGadget\HiContrast%20Baro%20Altimeter\data\beSmooth=false
|
||||||
DialGadget\HiContrast%20Baro%20Altimeter\configInfo\version=0.0.0
|
DialGadget\HiContrast%20Baro%20Altimeter\configInfo\version=0.0.0
|
||||||
@ -804,7 +800,7 @@ DialGadget\HiContrast%20Barometer\data\needle3Factor=1
|
|||||||
DialGadget\HiContrast%20Barometer\data\needle1Move=Rotate
|
DialGadget\HiContrast%20Barometer\data\needle1Move=Rotate
|
||||||
DialGadget\HiContrast%20Barometer\data\needle2Move=Rotate
|
DialGadget\HiContrast%20Barometer\data\needle2Move=Rotate
|
||||||
DialGadget\HiContrast%20Barometer\data\needle3Move=Rotate
|
DialGadget\HiContrast%20Barometer\data\needle3Move=Rotate
|
||||||
DialGadget\HiContrast%20Barometer\data\font="MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0"
|
DialGadget\HiContrast%20Barometer\data\font="Ubuntu,11,-1,5,50,0,0,0,0,0"
|
||||||
DialGadget\HiContrast%20Barometer\data\useOpenGLFlag=false
|
DialGadget\HiContrast%20Barometer\data\useOpenGLFlag=false
|
||||||
DialGadget\HiContrast%20Barometer\data\beSmooth=false
|
DialGadget\HiContrast%20Barometer\data\beSmooth=false
|
||||||
DialGadget\HiContrast%20Barometer\configInfo\version=0.0.0
|
DialGadget\HiContrast%20Barometer\configInfo\version=0.0.0
|
||||||
@ -833,7 +829,7 @@ DialGadget\HiContrast%20Climbrate\data\needle3Factor=1
|
|||||||
DialGadget\HiContrast%20Climbrate\data\needle1Move=Rotate
|
DialGadget\HiContrast%20Climbrate\data\needle1Move=Rotate
|
||||||
DialGadget\HiContrast%20Climbrate\data\needle2Move=Rotate
|
DialGadget\HiContrast%20Climbrate\data\needle2Move=Rotate
|
||||||
DialGadget\HiContrast%20Climbrate\data\needle3Move=Rotate
|
DialGadget\HiContrast%20Climbrate\data\needle3Move=Rotate
|
||||||
DialGadget\HiContrast%20Climbrate\data\font="MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0"
|
DialGadget\HiContrast%20Climbrate\data\font="Ubuntu,11,-1,5,50,0,0,0,0,0"
|
||||||
DialGadget\HiContrast%20Climbrate\data\useOpenGLFlag=false
|
DialGadget\HiContrast%20Climbrate\data\useOpenGLFlag=false
|
||||||
DialGadget\HiContrast%20Climbrate\data\beSmooth=false
|
DialGadget\HiContrast%20Climbrate\data\beSmooth=false
|
||||||
DialGadget\HiContrast%20Climbrate\configInfo\version=0.0.0
|
DialGadget\HiContrast%20Climbrate\configInfo\version=0.0.0
|
||||||
@ -862,7 +858,7 @@ DialGadget\HiContrast%20Compass\data\needle3Factor=1
|
|||||||
DialGadget\HiContrast%20Compass\data\needle1Move=Rotate
|
DialGadget\HiContrast%20Compass\data\needle1Move=Rotate
|
||||||
DialGadget\HiContrast%20Compass\data\needle2Move=Rotate
|
DialGadget\HiContrast%20Compass\data\needle2Move=Rotate
|
||||||
DialGadget\HiContrast%20Compass\data\needle3Move=Rotate
|
DialGadget\HiContrast%20Compass\data\needle3Move=Rotate
|
||||||
DialGadget\HiContrast%20Compass\data\font="MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0"
|
DialGadget\HiContrast%20Compass\data\font="Ubuntu,11,-1,5,50,0,0,0,0,0"
|
||||||
DialGadget\HiContrast%20Compass\data\useOpenGLFlag=false
|
DialGadget\HiContrast%20Compass\data\useOpenGLFlag=false
|
||||||
DialGadget\HiContrast%20Compass\data\beSmooth=false
|
DialGadget\HiContrast%20Compass\data\beSmooth=false
|
||||||
DialGadget\HiContrast%20Compass\configInfo\version=0.0.0
|
DialGadget\HiContrast%20Compass\configInfo\version=0.0.0
|
||||||
@ -891,7 +887,7 @@ DialGadget\HiContrast%20Groundspeed%20kph\data\needle3Factor=1
|
|||||||
DialGadget\HiContrast%20Groundspeed%20kph\data\needle1Move=Rotate
|
DialGadget\HiContrast%20Groundspeed%20kph\data\needle1Move=Rotate
|
||||||
DialGadget\HiContrast%20Groundspeed%20kph\data\needle2Move=Rotate
|
DialGadget\HiContrast%20Groundspeed%20kph\data\needle2Move=Rotate
|
||||||
DialGadget\HiContrast%20Groundspeed%20kph\data\needle3Move=Rotate
|
DialGadget\HiContrast%20Groundspeed%20kph\data\needle3Move=Rotate
|
||||||
DialGadget\HiContrast%20Groundspeed%20kph\data\font="MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0"
|
DialGadget\HiContrast%20Groundspeed%20kph\data\font="Ubuntu,11,-1,5,50,0,0,0,0,0"
|
||||||
DialGadget\HiContrast%20Groundspeed%20kph\data\useOpenGLFlag=false
|
DialGadget\HiContrast%20Groundspeed%20kph\data\useOpenGLFlag=false
|
||||||
DialGadget\HiContrast%20Groundspeed%20kph\data\beSmooth=false
|
DialGadget\HiContrast%20Groundspeed%20kph\data\beSmooth=false
|
||||||
DialGadget\HiContrast%20Groundspeed%20kph\configInfo\version=0.0.0
|
DialGadget\HiContrast%20Groundspeed%20kph\configInfo\version=0.0.0
|
||||||
@ -920,7 +916,7 @@ DialGadget\HiContrast%20Temperature\data\needle3Factor=1
|
|||||||
DialGadget\HiContrast%20Temperature\data\needle1Move=Rotate
|
DialGadget\HiContrast%20Temperature\data\needle1Move=Rotate
|
||||||
DialGadget\HiContrast%20Temperature\data\needle2Move=Rotate
|
DialGadget\HiContrast%20Temperature\data\needle2Move=Rotate
|
||||||
DialGadget\HiContrast%20Temperature\data\needle3Move=Rotate
|
DialGadget\HiContrast%20Temperature\data\needle3Move=Rotate
|
||||||
DialGadget\HiContrast%20Temperature\data\font="MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0"
|
DialGadget\HiContrast%20Temperature\data\font="Ubuntu,11,-1,5,50,0,0,0,0,0"
|
||||||
DialGadget\HiContrast%20Temperature\data\useOpenGLFlag=false
|
DialGadget\HiContrast%20Temperature\data\useOpenGLFlag=false
|
||||||
DialGadget\HiContrast%20Temperature\data\beSmooth=false
|
DialGadget\HiContrast%20Temperature\data\beSmooth=false
|
||||||
DialGadget\HiContrast%20Temperature\configInfo\version=0.0.0
|
DialGadget\HiContrast%20Temperature\configInfo\version=0.0.0
|
||||||
@ -949,7 +945,7 @@ DialGadget\Servo%20Channel%201\data\needle3Factor=1
|
|||||||
DialGadget\Servo%20Channel%201\data\needle1Move=Rotate
|
DialGadget\Servo%20Channel%201\data\needle1Move=Rotate
|
||||||
DialGadget\Servo%20Channel%201\data\needle2Move=Rotate
|
DialGadget\Servo%20Channel%201\data\needle2Move=Rotate
|
||||||
DialGadget\Servo%20Channel%201\data\needle3Move=Rotate
|
DialGadget\Servo%20Channel%201\data\needle3Move=Rotate
|
||||||
DialGadget\Servo%20Channel%201\data\font="MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0"
|
DialGadget\Servo%20Channel%201\data\font="Ubuntu,11,-1,5,50,0,0,0,0,0"
|
||||||
DialGadget\Servo%20Channel%201\data\useOpenGLFlag=false
|
DialGadget\Servo%20Channel%201\data\useOpenGLFlag=false
|
||||||
DialGadget\Servo%20Channel%201\data\beSmooth=false
|
DialGadget\Servo%20Channel%201\data\beSmooth=false
|
||||||
DialGadget\Servo%20Channel%201\configInfo\version=0.0.0
|
DialGadget\Servo%20Channel%201\configInfo\version=0.0.0
|
||||||
@ -978,7 +974,7 @@ DialGadget\Temperature\data\needle3Factor=1
|
|||||||
DialGadget\Temperature\data\needle1Move=Rotate
|
DialGadget\Temperature\data\needle1Move=Rotate
|
||||||
DialGadget\Temperature\data\needle2Move=Rotate
|
DialGadget\Temperature\data\needle2Move=Rotate
|
||||||
DialGadget\Temperature\data\needle3Move=Rotate
|
DialGadget\Temperature\data\needle3Move=Rotate
|
||||||
DialGadget\Temperature\data\font="MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0"
|
DialGadget\Temperature\data\font="Ubuntu,11,-1,5,50,0,0,0,0,0"
|
||||||
DialGadget\Temperature\data\useOpenGLFlag=false
|
DialGadget\Temperature\data\useOpenGLFlag=false
|
||||||
DialGadget\Temperature\data\beSmooth=false
|
DialGadget\Temperature\data\beSmooth=false
|
||||||
DialGadget\Temperature\configInfo\version=0.0.0
|
DialGadget\Temperature\configInfo\version=0.0.0
|
||||||
@ -1027,7 +1023,7 @@ GpsDisplayGadget\Flight%20GPS\data\defaultDataBits=3
|
|||||||
GpsDisplayGadget\Flight%20GPS\data\defaultFlow=0
|
GpsDisplayGadget\Flight%20GPS\data\defaultFlow=0
|
||||||
GpsDisplayGadget\Flight%20GPS\data\defaultParity=0
|
GpsDisplayGadget\Flight%20GPS\data\defaultParity=0
|
||||||
GpsDisplayGadget\Flight%20GPS\data\defaultStopBits=0
|
GpsDisplayGadget\Flight%20GPS\data\defaultStopBits=0
|
||||||
GpsDisplayGadget\Flight%20GPS\data\defaultPort=Communications Port (COM1)
|
GpsDisplayGadget\Flight%20GPS\data\defaultPort=Serial port 0
|
||||||
GpsDisplayGadget\Flight%20GPS\data\connectionMode=Telemetry
|
GpsDisplayGadget\Flight%20GPS\data\connectionMode=Telemetry
|
||||||
GpsDisplayGadget\Flight%20GPS\configInfo\version=0.0.0
|
GpsDisplayGadget\Flight%20GPS\configInfo\version=0.0.0
|
||||||
GpsDisplayGadget\Flight%20GPS\configInfo\locked=false
|
GpsDisplayGadget\Flight%20GPS\configInfo\locked=false
|
||||||
@ -1036,7 +1032,7 @@ GpsDisplayGadget\GPS%20Mouse\data\defaultDataBits=3
|
|||||||
GpsDisplayGadget\GPS%20Mouse\data\defaultFlow=0
|
GpsDisplayGadget\GPS%20Mouse\data\defaultFlow=0
|
||||||
GpsDisplayGadget\GPS%20Mouse\data\defaultParity=0
|
GpsDisplayGadget\GPS%20Mouse\data\defaultParity=0
|
||||||
GpsDisplayGadget\GPS%20Mouse\data\defaultStopBits=0
|
GpsDisplayGadget\GPS%20Mouse\data\defaultStopBits=0
|
||||||
GpsDisplayGadget\GPS%20Mouse\data\defaultPort=Communications Port (COM1)
|
GpsDisplayGadget\GPS%20Mouse\data\defaultPort=Serial port 0
|
||||||
GpsDisplayGadget\GPS%20Mouse\data\connectionMode=Serial
|
GpsDisplayGadget\GPS%20Mouse\data\connectionMode=Serial
|
||||||
GpsDisplayGadget\GPS%20Mouse\configInfo\version=0.0.0
|
GpsDisplayGadget\GPS%20Mouse\configInfo\version=0.0.0
|
||||||
GpsDisplayGadget\GPS%20Mouse\configInfo\locked=false
|
GpsDisplayGadget\GPS%20Mouse\configInfo\locked=false
|
||||||
@ -1239,6 +1235,40 @@ LineardialGadget\Mainboard%20CPU\data\factor=1
|
|||||||
LineardialGadget\Mainboard%20CPU\data\useOpenGLFlag=false
|
LineardialGadget\Mainboard%20CPU\data\useOpenGLFlag=false
|
||||||
LineardialGadget\Mainboard%20CPU\configInfo\version=0.0.0
|
LineardialGadget\Mainboard%20CPU\configInfo\version=0.0.0
|
||||||
LineardialGadget\Mainboard%20CPU\configInfo\locked=false
|
LineardialGadget\Mainboard%20CPU\configInfo\locked=false
|
||||||
|
LineardialGadget\Pitch\data\dFile=%%DATAPATH%%dials/default/lineardial-vertical.svg
|
||||||
|
LineardialGadget\Pitch\data\sourceDataObject=ManualControlCommand
|
||||||
|
LineardialGadget\Pitch\data\sourceObjectField=Pitch
|
||||||
|
LineardialGadget\Pitch\data\minValue=-1
|
||||||
|
LineardialGadget\Pitch\data\maxValue=1
|
||||||
|
LineardialGadget\Pitch\data\redMin=-1
|
||||||
|
LineardialGadget\Pitch\data\redMax=1
|
||||||
|
LineardialGadget\Pitch\data\yellowMin=-0.8
|
||||||
|
LineardialGadget\Pitch\data\yellowMax=0.8
|
||||||
|
LineardialGadget\Pitch\data\greenMin=-0.5
|
||||||
|
LineardialGadget\Pitch\data\greenMax=0.5
|
||||||
|
LineardialGadget\Pitch\data\font="Andale Mono,12,-1,5,75,0,0,0,0,0"
|
||||||
|
LineardialGadget\Pitch\data\decimalPlaces=2
|
||||||
|
LineardialGadget\Pitch\data\factor=1
|
||||||
|
LineardialGadget\Pitch\data\useOpenGLFlag=false
|
||||||
|
LineardialGadget\Pitch\configInfo\version=0.0.0
|
||||||
|
LineardialGadget\Pitch\configInfo\locked=false
|
||||||
|
LineardialGadget\Pitch%20Desired\data\dFile=%%DATAPATH%%dials/default/lineardial-vertical.svg
|
||||||
|
LineardialGadget\Pitch%20Desired\data\sourceDataObject=ActuatorDesired
|
||||||
|
LineardialGadget\Pitch%20Desired\data\sourceObjectField=Pitch
|
||||||
|
LineardialGadget\Pitch%20Desired\data\minValue=-1
|
||||||
|
LineardialGadget\Pitch%20Desired\data\maxValue=1
|
||||||
|
LineardialGadget\Pitch%20Desired\data\redMin=-1
|
||||||
|
LineardialGadget\Pitch%20Desired\data\redMax=1
|
||||||
|
LineardialGadget\Pitch%20Desired\data\yellowMin=-0.8
|
||||||
|
LineardialGadget\Pitch%20Desired\data\yellowMax=0.8
|
||||||
|
LineardialGadget\Pitch%20Desired\data\greenMin=-0.5
|
||||||
|
LineardialGadget\Pitch%20Desired\data\greenMax=0.5
|
||||||
|
LineardialGadget\Pitch%20Desired\data\font="Andale Mono,12,-1,5,75,0,0,0,0,0"
|
||||||
|
LineardialGadget\Pitch%20Desired\data\decimalPlaces=2
|
||||||
|
LineardialGadget\Pitch%20Desired\data\factor=1
|
||||||
|
LineardialGadget\Pitch%20Desired\data\useOpenGLFlag=false
|
||||||
|
LineardialGadget\Pitch%20Desired\configInfo\version=0.0.0
|
||||||
|
LineardialGadget\Pitch%20Desired\configInfo\locked=false
|
||||||
LineardialGadget\PitchActual\data\dFile=%%DATAPATH%%dials/default/lineardial-vertical.svg
|
LineardialGadget\PitchActual\data\dFile=%%DATAPATH%%dials/default/lineardial-vertical.svg
|
||||||
LineardialGadget\PitchActual\data\sourceDataObject=AttitudeActual
|
LineardialGadget\PitchActual\data\sourceDataObject=AttitudeActual
|
||||||
LineardialGadget\PitchActual\data\sourceObjectField=Pitch
|
LineardialGadget\PitchActual\data\sourceObjectField=Pitch
|
||||||
@ -1256,57 +1286,40 @@ LineardialGadget\PitchActual\data\factor=1
|
|||||||
LineardialGadget\PitchActual\data\useOpenGLFlag=false
|
LineardialGadget\PitchActual\data\useOpenGLFlag=false
|
||||||
LineardialGadget\PitchActual\configInfo\version=0.0.0
|
LineardialGadget\PitchActual\configInfo\version=0.0.0
|
||||||
LineardialGadget\PitchActual\configInfo\locked=false
|
LineardialGadget\PitchActual\configInfo\locked=false
|
||||||
LineardialGadget\PitchCommand\data\dFile=%%DATAPATH%%dials/default/lineardial-vertical.svg
|
|
||||||
LineardialGadget\PitchCommand\data\sourceDataObject=ManualControlCommand
|
|
||||||
LineardialGadget\PitchCommand\data\sourceObjectField=Pitch
|
|
||||||
LineardialGadget\PitchCommand\data\minValue=-1
|
|
||||||
LineardialGadget\PitchCommand\data\maxValue=1
|
|
||||||
LineardialGadget\PitchCommand\data\redMin=0
|
|
||||||
LineardialGadget\PitchCommand\data\redMax=1
|
|
||||||
LineardialGadget\PitchCommand\data\yellowMin=0.1
|
|
||||||
LineardialGadget\PitchCommand\data\yellowMax=0.9
|
|
||||||
LineardialGadget\PitchCommand\data\greenMin=0.3
|
|
||||||
LineardialGadget\PitchCommand\data\greenMax=0.8
|
|
||||||
LineardialGadget\PitchCommand\data\font="Andale Mono,12,-1,5,75,0,0,0,0,0"
|
|
||||||
LineardialGadget\PitchCommand\data\decimalPlaces=2
|
|
||||||
LineardialGadget\PitchCommand\data\factor=1
|
|
||||||
LineardialGadget\PitchCommand\data\useOpenGLFlag=false
|
|
||||||
LineardialGadget\PitchCommand\configInfo\version=0.0.0
|
|
||||||
LineardialGadget\PitchCommand\configInfo\locked=false
|
|
||||||
LineardialGadget\PitchDesired\data\dFile=%%DATAPATH%%dials/default/lineardial-vertical.svg
|
|
||||||
LineardialGadget\PitchDesired\data\sourceDataObject=ActuatorDesired
|
|
||||||
LineardialGadget\PitchDesired\data\sourceObjectField=Pitch
|
|
||||||
LineardialGadget\PitchDesired\data\minValue=-1
|
|
||||||
LineardialGadget\PitchDesired\data\maxValue=1
|
|
||||||
LineardialGadget\PitchDesired\data\redMin=0
|
|
||||||
LineardialGadget\PitchDesired\data\redMax=1
|
|
||||||
LineardialGadget\PitchDesired\data\yellowMin=0.1
|
|
||||||
LineardialGadget\PitchDesired\data\yellowMax=0.9
|
|
||||||
LineardialGadget\PitchDesired\data\greenMin=0.3
|
|
||||||
LineardialGadget\PitchDesired\data\greenMax=0.8
|
|
||||||
LineardialGadget\PitchDesired\data\font="Andale Mono,12,-1,5,75,0,0,0,0,0"
|
|
||||||
LineardialGadget\PitchDesired\data\decimalPlaces=2
|
|
||||||
LineardialGadget\PitchDesired\data\factor=1
|
|
||||||
LineardialGadget\PitchDesired\data\useOpenGLFlag=false
|
|
||||||
LineardialGadget\PitchDesired\configInfo\version=0.0.0
|
|
||||||
LineardialGadget\PitchDesired\configInfo\locked=false
|
|
||||||
LineardialGadget\Roll\data\dFile=%%DATAPATH%%dials/default/lineardial-vertical.svg
|
LineardialGadget\Roll\data\dFile=%%DATAPATH%%dials/default/lineardial-vertical.svg
|
||||||
LineardialGadget\Roll\data\sourceDataObject=ManualControlCommand
|
LineardialGadget\Roll\data\sourceDataObject=ManualControlCommand
|
||||||
LineardialGadget\Roll\data\sourceObjectField=Roll
|
LineardialGadget\Roll\data\sourceObjectField=Roll
|
||||||
LineardialGadget\Roll\data\minValue=0
|
LineardialGadget\Roll\data\minValue=-1
|
||||||
LineardialGadget\Roll\data\maxValue=1
|
LineardialGadget\Roll\data\maxValue=1
|
||||||
LineardialGadget\Roll\data\redMin=0
|
LineardialGadget\Roll\data\redMin=-1
|
||||||
LineardialGadget\Roll\data\redMax=1
|
LineardialGadget\Roll\data\redMax=1
|
||||||
LineardialGadget\Roll\data\yellowMin=0.1
|
LineardialGadget\Roll\data\yellowMin=-0.8
|
||||||
LineardialGadget\Roll\data\yellowMax=0.9
|
LineardialGadget\Roll\data\yellowMax=0.8
|
||||||
LineardialGadget\Roll\data\greenMin=0.3
|
LineardialGadget\Roll\data\greenMin=-0.5
|
||||||
LineardialGadget\Roll\data\greenMax=0.8
|
LineardialGadget\Roll\data\greenMax=0.5
|
||||||
LineardialGadget\Roll\data\font="Andale Mono,12,-1,5,75,0,0,0,0,0"
|
LineardialGadget\Roll\data\font="Andale Mono,12,-1,5,75,0,0,0,0,0"
|
||||||
LineardialGadget\Roll\data\decimalPlaces=2
|
LineardialGadget\Roll\data\decimalPlaces=2
|
||||||
LineardialGadget\Roll\data\factor=1
|
LineardialGadget\Roll\data\factor=1
|
||||||
LineardialGadget\Roll\data\useOpenGLFlag=false
|
LineardialGadget\Roll\data\useOpenGLFlag=false
|
||||||
LineardialGadget\Roll\configInfo\version=0.0.0
|
LineardialGadget\Roll\configInfo\version=0.0.0
|
||||||
LineardialGadget\Roll\configInfo\locked=false
|
LineardialGadget\Roll\configInfo\locked=false
|
||||||
|
LineardialGadget\Roll%20Desired\data\dFile=%%DATAPATH%%dials/default/lineardial-vertical.svg
|
||||||
|
LineardialGadget\Roll%20Desired\data\sourceDataObject=ActuatorDesired
|
||||||
|
LineardialGadget\Roll%20Desired\data\sourceObjectField=Roll
|
||||||
|
LineardialGadget\Roll%20Desired\data\minValue=-1
|
||||||
|
LineardialGadget\Roll%20Desired\data\maxValue=1
|
||||||
|
LineardialGadget\Roll%20Desired\data\redMin=-1
|
||||||
|
LineardialGadget\Roll%20Desired\data\redMax=1
|
||||||
|
LineardialGadget\Roll%20Desired\data\yellowMin=-0.8
|
||||||
|
LineardialGadget\Roll%20Desired\data\yellowMax=0.8
|
||||||
|
LineardialGadget\Roll%20Desired\data\greenMin=-0.5
|
||||||
|
LineardialGadget\Roll%20Desired\data\greenMax=0.5
|
||||||
|
LineardialGadget\Roll%20Desired\data\font="Andale Mono,12,-1,5,75,0,0,0,0,0"
|
||||||
|
LineardialGadget\Roll%20Desired\data\decimalPlaces=2
|
||||||
|
LineardialGadget\Roll%20Desired\data\factor=1
|
||||||
|
LineardialGadget\Roll%20Desired\data\useOpenGLFlag=false
|
||||||
|
LineardialGadget\Roll%20Desired\configInfo\version=0.0.0
|
||||||
|
LineardialGadget\Roll%20Desired\configInfo\locked=false
|
||||||
LineardialGadget\Telemetry%20RX%20Rate%20Horizontal\data\dFile=%%DATAPATH%%dials/default/lineardial-horizontal.svg
|
LineardialGadget\Telemetry%20RX%20Rate%20Horizontal\data\dFile=%%DATAPATH%%dials/default/lineardial-horizontal.svg
|
||||||
LineardialGadget\Telemetry%20RX%20Rate%20Horizontal\data\sourceDataObject=GCSTelemetryStats
|
LineardialGadget\Telemetry%20RX%20Rate%20Horizontal\data\sourceDataObject=GCSTelemetryStats
|
||||||
LineardialGadget\Telemetry%20RX%20Rate%20Horizontal\data\sourceObjectField=RxDataRate
|
LineardialGadget\Telemetry%20RX%20Rate%20Horizontal\data\sourceObjectField=RxDataRate
|
||||||
@ -1346,12 +1359,12 @@ LineardialGadget\Throttle\data\sourceDataObject=ManualControlCommand
|
|||||||
LineardialGadget\Throttle\data\sourceObjectField=Throttle
|
LineardialGadget\Throttle\data\sourceObjectField=Throttle
|
||||||
LineardialGadget\Throttle\data\minValue=0
|
LineardialGadget\Throttle\data\minValue=0
|
||||||
LineardialGadget\Throttle\data\maxValue=1
|
LineardialGadget\Throttle\data\maxValue=1
|
||||||
LineardialGadget\Throttle\data\redMin=0
|
LineardialGadget\Throttle\data\redMin=0.75
|
||||||
LineardialGadget\Throttle\data\redMax=1
|
LineardialGadget\Throttle\data\redMax=1
|
||||||
LineardialGadget\Throttle\data\yellowMin=0.1
|
LineardialGadget\Throttle\data\yellowMin=0.5
|
||||||
LineardialGadget\Throttle\data\yellowMax=0.9
|
LineardialGadget\Throttle\data\yellowMax=0.75
|
||||||
LineardialGadget\Throttle\data\greenMin=0.3
|
LineardialGadget\Throttle\data\greenMin=0
|
||||||
LineardialGadget\Throttle\data\greenMax=0.8
|
LineardialGadget\Throttle\data\greenMax=0.5
|
||||||
LineardialGadget\Throttle\data\font="Andale Mono,12,-1,5,75,0,0,0,0,0"
|
LineardialGadget\Throttle\data\font="Andale Mono,12,-1,5,75,0,0,0,0,0"
|
||||||
LineardialGadget\Throttle\data\decimalPlaces=2
|
LineardialGadget\Throttle\data\decimalPlaces=2
|
||||||
LineardialGadget\Throttle\data\factor=1
|
LineardialGadget\Throttle\data\factor=1
|
||||||
@ -1361,20 +1374,37 @@ LineardialGadget\Throttle\configInfo\locked=false
|
|||||||
LineardialGadget\Yaw\data\dFile=%%DATAPATH%%dials/default/lineardial-vertical.svg
|
LineardialGadget\Yaw\data\dFile=%%DATAPATH%%dials/default/lineardial-vertical.svg
|
||||||
LineardialGadget\Yaw\data\sourceDataObject=ManualControlCommand
|
LineardialGadget\Yaw\data\sourceDataObject=ManualControlCommand
|
||||||
LineardialGadget\Yaw\data\sourceObjectField=Yaw
|
LineardialGadget\Yaw\data\sourceObjectField=Yaw
|
||||||
LineardialGadget\Yaw\data\minValue=0
|
LineardialGadget\Yaw\data\minValue=-1
|
||||||
LineardialGadget\Yaw\data\maxValue=1
|
LineardialGadget\Yaw\data\maxValue=1
|
||||||
LineardialGadget\Yaw\data\redMin=0
|
LineardialGadget\Yaw\data\redMin=-1
|
||||||
LineardialGadget\Yaw\data\redMax=1
|
LineardialGadget\Yaw\data\redMax=1
|
||||||
LineardialGadget\Yaw\data\yellowMin=0.1
|
LineardialGadget\Yaw\data\yellowMin=-0.8
|
||||||
LineardialGadget\Yaw\data\yellowMax=0.9
|
LineardialGadget\Yaw\data\yellowMax=0.8
|
||||||
LineardialGadget\Yaw\data\greenMin=0.3
|
LineardialGadget\Yaw\data\greenMin=-0.5
|
||||||
LineardialGadget\Yaw\data\greenMax=0.8
|
LineardialGadget\Yaw\data\greenMax=0.5
|
||||||
LineardialGadget\Yaw\data\font="Andale Mono,12,-1,5,75,0,0,0,0,0"
|
LineardialGadget\Yaw\data\font="Andale Mono,12,-1,5,75,0,0,0,0,0"
|
||||||
LineardialGadget\Yaw\data\decimalPlaces=2
|
LineardialGadget\Yaw\data\decimalPlaces=2
|
||||||
LineardialGadget\Yaw\data\factor=1
|
LineardialGadget\Yaw\data\factor=1
|
||||||
LineardialGadget\Yaw\data\useOpenGLFlag=false
|
LineardialGadget\Yaw\data\useOpenGLFlag=false
|
||||||
LineardialGadget\Yaw\configInfo\version=0.0.0
|
LineardialGadget\Yaw\configInfo\version=0.0.0
|
||||||
LineardialGadget\Yaw\configInfo\locked=false
|
LineardialGadget\Yaw\configInfo\locked=false
|
||||||
|
LineardialGadget\Yaw%20Desired\data\dFile=%%DATAPATH%%dials/default/lineardial-vertical.svg
|
||||||
|
LineardialGadget\Yaw%20Desired\data\sourceDataObject=ActuatorDesired
|
||||||
|
LineardialGadget\Yaw%20Desired\data\sourceObjectField=Yaw
|
||||||
|
LineardialGadget\Yaw%20Desired\data\minValue=-1
|
||||||
|
LineardialGadget\Yaw%20Desired\data\maxValue=1
|
||||||
|
LineardialGadget\Yaw%20Desired\data\redMin=-1
|
||||||
|
LineardialGadget\Yaw%20Desired\data\redMax=1
|
||||||
|
LineardialGadget\Yaw%20Desired\data\yellowMin=-0.8
|
||||||
|
LineardialGadget\Yaw%20Desired\data\yellowMax=0.8
|
||||||
|
LineardialGadget\Yaw%20Desired\data\greenMin=-0.5
|
||||||
|
LineardialGadget\Yaw%20Desired\data\greenMax=0.5
|
||||||
|
LineardialGadget\Yaw%20Desired\data\font="Andale Mono,12,-1,5,75,0,0,0,0,0"
|
||||||
|
LineardialGadget\Yaw%20Desired\data\decimalPlaces=2
|
||||||
|
LineardialGadget\Yaw%20Desired\data\factor=1
|
||||||
|
LineardialGadget\Yaw%20Desired\data\useOpenGLFlag=false
|
||||||
|
LineardialGadget\Yaw%20Desired\configInfo\version=0.0.0
|
||||||
|
LineardialGadget\Yaw%20Desired\configInfo\locked=false
|
||||||
ModelViewGadget\Aeroquad%20%2B\data\acFilename=%%DATAPATH%%models/multi/aeroquad/aeroquad_+.3ds
|
ModelViewGadget\Aeroquad%20%2B\data\acFilename=%%DATAPATH%%models/multi/aeroquad/aeroquad_+.3ds
|
||||||
ModelViewGadget\Aeroquad%20%2B\data\bgFilename=%%DATAPATH%%models/backgrounds/default_background.png
|
ModelViewGadget\Aeroquad%20%2B\data\bgFilename=%%DATAPATH%%models/backgrounds/default_background.png
|
||||||
ModelViewGadget\Aeroquad%20%2B\data\enableVbo=false
|
ModelViewGadget\Aeroquad%20%2B\data\enableVbo=false
|
||||||
@ -1439,24 +1469,24 @@ OPMapGadget\Google%20Sat\data\mapProvider=GoogleSatellite
|
|||||||
OPMapGadget\Google%20Sat\data\defaultZoom=2
|
OPMapGadget\Google%20Sat\data\defaultZoom=2
|
||||||
OPMapGadget\Google%20Sat\data\defaultLatitude=0
|
OPMapGadget\Google%20Sat\data\defaultLatitude=0
|
||||||
OPMapGadget\Google%20Sat\data\defaultLongitude=0
|
OPMapGadget\Google%20Sat\data\defaultLongitude=0
|
||||||
OPMapGadget\Google%20Sat\data\useOpenGL=true
|
OPMapGadget\Google%20Sat\data\useOpenGL=false
|
||||||
OPMapGadget\Google%20Sat\data\showTileGridLines=false
|
OPMapGadget\Google%20Sat\data\showTileGridLines=false
|
||||||
OPMapGadget\Google%20Sat\data\accessMode=ServerAndCache
|
OPMapGadget\Google%20Sat\data\accessMode=ServerAndCache
|
||||||
OPMapGadget\Google%20Sat\data\useMemoryCache=true
|
OPMapGadget\Google%20Sat\data\useMemoryCache=true
|
||||||
OPMapGadget\Google%20Sat\data\uavSymbol=mapquad.png
|
OPMapGadget\Google%20Sat\data\uavSymbol=mapquad.png
|
||||||
OPMapGadget\Google%20Sat\data\cacheLocation=
|
OPMapGadget\Google%20Sat\data\cacheLocation=%%STOREPATH%%mapscache/
|
||||||
OPMapGadget\Google%20Sat\configInfo\version=0.0.0
|
OPMapGadget\Google%20Sat\configInfo\version=0.0.0
|
||||||
OPMapGadget\Google%20Sat\configInfo\locked=false
|
OPMapGadget\Google%20Sat\configInfo\locked=false
|
||||||
OPMapGadget\Memory%20Only\data\mapProvider=GoogleMap
|
OPMapGadget\Memory%20Only\data\mapProvider=GoogleMap
|
||||||
OPMapGadget\Memory%20Only\data\defaultZoom=2
|
OPMapGadget\Memory%20Only\data\defaultZoom=2
|
||||||
OPMapGadget\Memory%20Only\data\defaultLatitude=0
|
OPMapGadget\Memory%20Only\data\defaultLatitude=0
|
||||||
OPMapGadget\Memory%20Only\data\defaultLongitude=0
|
OPMapGadget\Memory%20Only\data\defaultLongitude=0
|
||||||
OPMapGadget\Memory%20Only\data\useOpenGL=true
|
OPMapGadget\Memory%20Only\data\useOpenGL=false
|
||||||
OPMapGadget\Memory%20Only\data\showTileGridLines=false
|
OPMapGadget\Memory%20Only\data\showTileGridLines=false
|
||||||
OPMapGadget\Memory%20Only\data\accessMode=CacheOnly
|
OPMapGadget\Memory%20Only\data\accessMode=CacheOnly
|
||||||
OPMapGadget\Memory%20Only\data\useMemoryCache=true
|
OPMapGadget\Memory%20Only\data\useMemoryCache=true
|
||||||
OPMapGadget\Memory%20Only\data\uavSymbol=airplanepip.png
|
OPMapGadget\Memory%20Only\data\uavSymbol=airplanepip.png
|
||||||
OPMapGadget\Memory%20Only\data\cacheLocation=
|
OPMapGadget\Memory%20Only\data\cacheLocation=%%STOREPATH%%mapscache/
|
||||||
OPMapGadget\Memory%20Only\configInfo\version=0.0.0
|
OPMapGadget\Memory%20Only\configInfo\version=0.0.0
|
||||||
OPMapGadget\Memory%20Only\configInfo\locked=false
|
OPMapGadget\Memory%20Only\configInfo\locked=false
|
||||||
OPMapGadget\default\data\mapProvider=GoogleMap
|
OPMapGadget\default\data\mapProvider=GoogleMap
|
||||||
@ -1468,7 +1498,7 @@ OPMapGadget\default\data\showTileGridLines=false
|
|||||||
OPMapGadget\default\data\accessMode=ServerAndCache
|
OPMapGadget\default\data\accessMode=ServerAndCache
|
||||||
OPMapGadget\default\data\useMemoryCache=true
|
OPMapGadget\default\data\useMemoryCache=true
|
||||||
OPMapGadget\default\data\uavSymbol=mapquad.png
|
OPMapGadget\default\data\uavSymbol=mapquad.png
|
||||||
OPMapGadget\default\data\cacheLocation=
|
OPMapGadget\default\data\cacheLocation=%%STOREPATH%%mapscache/
|
||||||
OPMapGadget\default\configInfo\version=0.0.0
|
OPMapGadget\default\configInfo\version=0.0.0
|
||||||
OPMapGadget\default\configInfo\locked=false
|
OPMapGadget\default\configInfo\locked=false
|
||||||
PFDGadget\raw\data\dialFile=%%DATAPATH%%pfd/default/pfd.svg
|
PFDGadget\raw\data\dialFile=%%DATAPATH%%pfd/default/pfd.svg
|
||||||
@ -1883,16 +1913,16 @@ Uploader\default\configInfo\version=0.0.0
|
|||||||
Uploader\default\configInfo\locked=false
|
Uploader\default\configInfo\locked=false
|
||||||
|
|
||||||
[Plugins]
|
[Plugins]
|
||||||
SoundNotifyPlugin\data\Current\1\SoundCollectionPath=%%DATAPATH%%sounds
|
SoundNotifyPlugin\data\Current\1\SoundCollectionPath=
|
||||||
SoundNotifyPlugin\data\Current\1\CurrentLanguage=default
|
SoundNotifyPlugin\data\Current\1\CurrentLanguage=
|
||||||
SoundNotifyPlugin\data\Current\1\ObjectField=Channel
|
SoundNotifyPlugin\data\Current\1\ObjectField=
|
||||||
SoundNotifyPlugin\data\Current\1\DataObject=ActuatorCommand
|
SoundNotifyPlugin\data\Current\1\DataObject=
|
||||||
SoundNotifyPlugin\data\Current\1\Value=Equal to
|
SoundNotifyPlugin\data\Current\1\Value=
|
||||||
SoundNotifyPlugin\data\Current\1\ValueSpinBox=0
|
SoundNotifyPlugin\data\Current\1\ValueSpinBox=0
|
||||||
SoundNotifyPlugin\data\Current\1\Sound1=
|
SoundNotifyPlugin\data\Current\1\Sound1=
|
||||||
SoundNotifyPlugin\data\Current\1\Sound2=
|
SoundNotifyPlugin\data\Current\1\Sound2=
|
||||||
SoundNotifyPlugin\data\Current\1\Sound3=
|
SoundNotifyPlugin\data\Current\1\Sound3=
|
||||||
SoundNotifyPlugin\data\Current\1\SayOrder=Never
|
SoundNotifyPlugin\data\Current\1\SayOrder=
|
||||||
SoundNotifyPlugin\data\Current\1\Repeat=
|
SoundNotifyPlugin\data\Current\1\Repeat=
|
||||||
SoundNotifyPlugin\data\Current\1\ExpireTimeout=0
|
SoundNotifyPlugin\data\Current\1\ExpireTimeout=0
|
||||||
SoundNotifyPlugin\data\Current\size=1
|
SoundNotifyPlugin\data\Current\size=1
|
||||||
@ -1900,9 +1930,3 @@ SoundNotifyPlugin\data\listNotifies\size=0
|
|||||||
SoundNotifyPlugin\data\EnableSound=false
|
SoundNotifyPlugin\data\EnableSound=false
|
||||||
SoundNotifyPlugin\configInfo\version=1.0.0
|
SoundNotifyPlugin\configInfo\version=1.0.0
|
||||||
SoundNotifyPlugin\configInfo\locked=false
|
SoundNotifyPlugin\configInfo\locked=false
|
||||||
|
|
||||||
[IPconnection]
|
|
||||||
Current\1\HostName=
|
|
||||||
Current\1\Port=1
|
|
||||||
Current\1\UseTCP=0
|
|
||||||
Current\size=1
|
|
||||||
|
@ -73,8 +73,10 @@ GCSControlGadgetWidget::GCSControlGadgetWidget(QWidget *parent) : QLabel(parent)
|
|||||||
rightX = 0;
|
rightX = 0;
|
||||||
rightY = 0;
|
rightY = 0;
|
||||||
|
|
||||||
m_gcscontrol->widgetLeftStick->enableOpenGL(true);
|
// No point enabling OpenGL for the joysticks, and causes
|
||||||
m_gcscontrol->widgetRightStick->enableOpenGL(true);
|
// issues on some computers:
|
||||||
|
// m_gcscontrol->widgetLeftStick->enableOpenGL(true);
|
||||||
|
// m_gcscontrol->widgetRightStick->enableOpenGL(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
GCSControlGadgetWidget::~GCSControlGadgetWidget()
|
GCSControlGadgetWidget::~GCSControlGadgetWidget()
|
||||||
|
@ -40,11 +40,13 @@ OPMapGadgetConfiguration::OPMapGadgetConfiguration(QString classId, QSettings*
|
|||||||
m_accessMode("ServerAndCache"),
|
m_accessMode("ServerAndCache"),
|
||||||
m_useMemoryCache(true),
|
m_useMemoryCache(true),
|
||||||
m_cacheLocation(Utils::PathUtils().GetStoragePath() + "mapscache" + QDir::separator()),
|
m_cacheLocation(Utils::PathUtils().GetStoragePath() + "mapscache" + QDir::separator()),
|
||||||
m_uavSymbol(QString::fromUtf8(":/uavs/images/mapquad.png"))
|
m_uavSymbol(QString::fromUtf8(":/uavs/images/mapquad.png")),
|
||||||
|
m_maxUpdateRate(2000) // ms
|
||||||
{
|
{
|
||||||
|
|
||||||
//if a saved configuration exists load it
|
//if a saved configuration exists load it
|
||||||
if(qSettings != 0) {
|
if (qSettings != 0) {
|
||||||
|
|
||||||
QString mapProvider = qSettings->value("mapProvider").toString();
|
QString mapProvider = qSettings->value("mapProvider").toString();
|
||||||
int zoom = qSettings->value("defaultZoom").toInt();
|
int zoom = qSettings->value("defaultZoom").toInt();
|
||||||
double latitude= qSettings->value("defaultLatitude").toDouble();
|
double latitude= qSettings->value("defaultLatitude").toDouble();
|
||||||
@ -55,16 +57,25 @@ OPMapGadgetConfiguration::OPMapGadgetConfiguration(QString classId, QSettings*
|
|||||||
bool useMemoryCache= qSettings->value("useMemoryCache").toBool();
|
bool useMemoryCache= qSettings->value("useMemoryCache").toBool();
|
||||||
QString cacheLocation= qSettings->value("cacheLocation").toString();
|
QString cacheLocation= qSettings->value("cacheLocation").toString();
|
||||||
QString uavSymbol=qSettings->value("uavSymbol").toString();
|
QString uavSymbol=qSettings->value("uavSymbol").toString();
|
||||||
|
int max_update_rate = qSettings->value("maxUpdateRate").toInt();
|
||||||
|
|
||||||
if (!mapProvider.isEmpty()) m_mapProvider = mapProvider;
|
if (!mapProvider.isEmpty()) m_mapProvider = mapProvider;
|
||||||
m_defaultZoom = zoom;
|
m_defaultZoom = zoom;
|
||||||
m_defaultLatitude = latitude;
|
m_defaultLatitude = latitude;
|
||||||
m_defaultLongitude = longitude;
|
m_defaultLongitude = longitude;
|
||||||
m_useOpenGL = useOpenGL;
|
m_useOpenGL = useOpenGL;
|
||||||
m_showTileGridLines = showTileGridLines;
|
m_showTileGridLines = showTileGridLines;
|
||||||
m_uavSymbol=uavSymbol;
|
m_uavSymbol = uavSymbol;
|
||||||
if (!accessMode.isEmpty()) m_accessMode = accessMode;
|
|
||||||
|
m_maxUpdateRate = max_update_rate;
|
||||||
|
if (m_maxUpdateRate < 100 || m_maxUpdateRate > 5000)
|
||||||
|
m_maxUpdateRate = 2000;
|
||||||
|
|
||||||
|
if (!accessMode.isEmpty())
|
||||||
|
m_accessMode = accessMode;
|
||||||
m_useMemoryCache = useMemoryCache;
|
m_useMemoryCache = useMemoryCache;
|
||||||
if (!cacheLocation.isEmpty()) m_cacheLocation = Utils::PathUtils().InsertStoragePath(cacheLocation);
|
if (!cacheLocation.isEmpty())
|
||||||
|
m_cacheLocation = Utils::PathUtils().InsertStoragePath(cacheLocation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,7 +92,9 @@ IUAVGadgetConfiguration * OPMapGadgetConfiguration::clone()
|
|||||||
m->m_accessMode = m_accessMode;
|
m->m_accessMode = m_accessMode;
|
||||||
m->m_useMemoryCache = m_useMemoryCache;
|
m->m_useMemoryCache = m_useMemoryCache;
|
||||||
m->m_cacheLocation = m_cacheLocation;
|
m->m_cacheLocation = m_cacheLocation;
|
||||||
m->m_uavSymbol=m_uavSymbol;
|
m->m_uavSymbol = m_uavSymbol;
|
||||||
|
m->m_maxUpdateRate = m_maxUpdateRate;
|
||||||
|
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,6 +109,7 @@ void OPMapGadgetConfiguration::saveConfig(QSettings* qSettings) const {
|
|||||||
qSettings->setValue("useMemoryCache", m_useMemoryCache);
|
qSettings->setValue("useMemoryCache", m_useMemoryCache);
|
||||||
qSettings->setValue("uavSymbol", m_uavSymbol);
|
qSettings->setValue("uavSymbol", m_uavSymbol);
|
||||||
qSettings->setValue("cacheLocation", Utils::PathUtils().RemoveStoragePath(m_cacheLocation));
|
qSettings->setValue("cacheLocation", Utils::PathUtils().RemoveStoragePath(m_cacheLocation));
|
||||||
|
qSettings->setValue("maxUpdateRate", m_maxUpdateRate);
|
||||||
}
|
}
|
||||||
void OPMapGadgetConfiguration::setCacheLocation(QString cacheLocation){
|
void OPMapGadgetConfiguration::setCacheLocation(QString cacheLocation){
|
||||||
m_cacheLocation = cacheLocation;
|
m_cacheLocation = cacheLocation;
|
||||||
|
@ -47,6 +47,7 @@ Q_PROPERTY(QString accessMode READ accessMode WRITE setAccessMode)
|
|||||||
Q_PROPERTY(bool useMemoryCache READ useMemoryCache WRITE setUseMemoryCache)
|
Q_PROPERTY(bool useMemoryCache READ useMemoryCache WRITE setUseMemoryCache)
|
||||||
Q_PROPERTY(QString cacheLocation READ cacheLocation WRITE setCacheLocation)
|
Q_PROPERTY(QString cacheLocation READ cacheLocation WRITE setCacheLocation)
|
||||||
Q_PROPERTY(QString uavSymbol READ uavSymbol WRITE setUavSymbol)
|
Q_PROPERTY(QString uavSymbol READ uavSymbol WRITE setUavSymbol)
|
||||||
|
Q_PROPERTY(int maxUpdateRate READ maxUpdateRate WRITE setMaxUpdateRate)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit OPMapGadgetConfiguration(QString classId, QSettings* qSettings = 0, QObject *parent = 0);
|
explicit OPMapGadgetConfiguration(QString classId, QSettings* qSettings = 0, QObject *parent = 0);
|
||||||
@ -64,6 +65,7 @@ public:
|
|||||||
bool useMemoryCache() const { return m_useMemoryCache; }
|
bool useMemoryCache() const { return m_useMemoryCache; }
|
||||||
QString cacheLocation() const { return m_cacheLocation; }
|
QString cacheLocation() const { return m_cacheLocation; }
|
||||||
QString uavSymbol() const { return m_uavSymbol; }
|
QString uavSymbol() const { return m_uavSymbol; }
|
||||||
|
int maxUpdateRate() const { return m_maxUpdateRate; }
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void setMapProvider(QString provider) { m_mapProvider = provider; }
|
void setMapProvider(QString provider) { m_mapProvider = provider; }
|
||||||
@ -76,6 +78,8 @@ public slots:
|
|||||||
void setUseMemoryCache(bool useMemoryCache) { m_useMemoryCache = useMemoryCache; }
|
void setUseMemoryCache(bool useMemoryCache) { m_useMemoryCache = useMemoryCache; }
|
||||||
void setCacheLocation(QString cacheLocation);
|
void setCacheLocation(QString cacheLocation);
|
||||||
void setUavSymbol(QString symbol){m_uavSymbol=symbol;}
|
void setUavSymbol(QString symbol){m_uavSymbol=symbol;}
|
||||||
|
void setMaxUpdateRate(int update_rate){m_maxUpdateRate = update_rate;}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString m_mapProvider;
|
QString m_mapProvider;
|
||||||
int m_defaultZoom;
|
int m_defaultZoom;
|
||||||
@ -87,7 +91,7 @@ private:
|
|||||||
bool m_useMemoryCache;
|
bool m_useMemoryCache;
|
||||||
QString m_cacheLocation;
|
QString m_cacheLocation;
|
||||||
QString m_uavSymbol;
|
QString m_uavSymbol;
|
||||||
|
int m_maxUpdateRate;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // OPMAP_GADGETCONFIGURATION_H
|
#endif // OPMAP_GADGETCONFIGURATION_H
|
||||||
|
@ -49,7 +49,9 @@ OPMapGadgetOptionsPage::OPMapGadgetOptionsPage(OPMapGadgetConfiguration *config,
|
|||||||
|
|
||||||
QWidget *OPMapGadgetOptionsPage::createPage(QWidget *parent)
|
QWidget *OPMapGadgetOptionsPage::createPage(QWidget *parent)
|
||||||
{
|
{
|
||||||
m_page = new Ui::OPMapGadgetOptionsPage();
|
int index;
|
||||||
|
|
||||||
|
m_page = new Ui::OPMapGadgetOptionsPage();
|
||||||
QWidget *w = new QWidget(parent);
|
QWidget *w = new QWidget(parent);
|
||||||
m_page->setupUi(w);
|
m_page->setupUi(w);
|
||||||
|
|
||||||
@ -61,9 +63,22 @@ QWidget *OPMapGadgetOptionsPage::createPage(QWidget *parent)
|
|||||||
m_page->accessModeComboBox->clear();
|
m_page->accessModeComboBox->clear();
|
||||||
m_page->accessModeComboBox->addItems(mapcontrol::Helper::AccessModeTypes());
|
m_page->accessModeComboBox->addItems(mapcontrol::Helper::AccessModeTypes());
|
||||||
|
|
||||||
int index = m_page->providerComboBox->findText(m_config->mapProvider());
|
index = m_page->providerComboBox->findText(m_config->mapProvider());
|
||||||
index = (index >= 0) ? index : 0;
|
index = (index >= 0) ? index : 0;
|
||||||
m_page->providerComboBox->setCurrentIndex(index);
|
m_page->providerComboBox->setCurrentIndex(index);
|
||||||
|
|
||||||
|
// populate the map max update rate combobox
|
||||||
|
m_page->maxUpdateRateComboBox->clear();
|
||||||
|
m_page->maxUpdateRateComboBox->addItem("100ms", 100);
|
||||||
|
m_page->maxUpdateRateComboBox->addItem("200ms", 200);
|
||||||
|
m_page->maxUpdateRateComboBox->addItem("500ms", 500);
|
||||||
|
m_page->maxUpdateRateComboBox->addItem("1 sec", 1000);
|
||||||
|
m_page->maxUpdateRateComboBox->addItem("2 sec", 2000);
|
||||||
|
m_page->maxUpdateRateComboBox->addItem("5 sec", 5000);
|
||||||
|
|
||||||
|
index = m_page->maxUpdateRateComboBox->findData(m_config->maxUpdateRate());
|
||||||
|
index = (index >= 0) ? index : 4;
|
||||||
|
m_page->maxUpdateRateComboBox->setCurrentIndex(index);
|
||||||
|
|
||||||
m_page->zoomSpinBox->setValue(m_config->zoom());
|
m_page->zoomSpinBox->setValue(m_config->zoom());
|
||||||
m_page->latitudeSpinBox->setValue(m_config->latitude());
|
m_page->latitudeSpinBox->setValue(m_config->latitude());
|
||||||
@ -125,6 +140,7 @@ void OPMapGadgetOptionsPage::apply()
|
|||||||
m_config->setUseMemoryCache(m_page->checkBoxUseMemoryCache->isChecked());
|
m_config->setUseMemoryCache(m_page->checkBoxUseMemoryCache->isChecked());
|
||||||
m_config->setCacheLocation(m_page->lineEditCacheLocation->path());
|
m_config->setCacheLocation(m_page->lineEditCacheLocation->path());
|
||||||
m_config->setUavSymbol(m_page->uavSymbolComboBox->itemData(m_page->uavSymbolComboBox->currentIndex()).toString());
|
m_config->setUavSymbol(m_page->uavSymbolComboBox->itemData(m_page->uavSymbolComboBox->currentIndex()).toString());
|
||||||
|
m_config->setMaxUpdateRate(m_page->maxUpdateRateComboBox->itemData(m_page->maxUpdateRateComboBox->currentIndex()).toInt());
|
||||||
}
|
}
|
||||||
|
|
||||||
void OPMapGadgetOptionsPage::finish()
|
void OPMapGadgetOptionsPage::finish()
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
<number>5</number>
|
<number>5</number>
|
||||||
</property>
|
</property>
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<layout class="QGridLayout" name="gridLayout_3" rowstretch="0,0,0,0,0" rowminimumheight="22,22,22,0,22">
|
<layout class="QGridLayout" name="gridLayout_3" rowstretch="0,0,0,0,0,0" rowminimumheight="22,22,22,0,22,0">
|
||||||
<item row="2" column="0">
|
<item row="2" column="0">
|
||||||
<spacer name="horizontalSpacer_4">
|
<spacer name="horizontalSpacer_4">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
@ -249,6 +249,19 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="5" column="3">
|
||||||
|
<widget class="QComboBox" name="maxUpdateRateComboBox"/>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="2">
|
||||||
|
<widget class="QLabel" name="label_9">
|
||||||
|
<property name="text">
|
||||||
|
<string>Default Max Update Rate </string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item row="8" column="0">
|
<item row="8" column="0">
|
||||||
|
@ -66,6 +66,8 @@ const int uav_trail_time_list[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
|
|||||||
|
|
||||||
const int uav_trail_distance_list[] = {1, 2, 5, 10, 20, 50, 100, 200, 500}; // meters
|
const int uav_trail_distance_list[] = {1, 2, 5, 10, 20, 50, 100, 200, 500}; // meters
|
||||||
|
|
||||||
|
const int max_update_rate_list[] = {100, 200, 500, 1000, 2000, 5000}; // milliseconds
|
||||||
|
|
||||||
// *************************************************************************************
|
// *************************************************************************************
|
||||||
|
|
||||||
|
|
||||||
@ -89,15 +91,17 @@ OPMapGadgetWidget::OPMapGadgetWidget(QWidget *parent) : QWidget(parent)
|
|||||||
obm = NULL;
|
obm = NULL;
|
||||||
obum = NULL;
|
obum = NULL;
|
||||||
|
|
||||||
prev_tile_number = 0;
|
m_prev_tile_number = 0;
|
||||||
|
|
||||||
min_zoom = max_zoom = 0;
|
m_min_zoom = m_max_zoom = 0;
|
||||||
|
|
||||||
m_map_mode = Normal_MapMode;
|
m_map_mode = Normal_MapMode;
|
||||||
|
|
||||||
telemetry_connected = false;
|
m_maxUpdateRate = max_update_rate_list[4]; // 2 seconds
|
||||||
|
|
||||||
context_menu_lat_lon = mouse_lat_lon = internals::PointLatLng(0, 0);
|
m_telemetry_connected = false;
|
||||||
|
|
||||||
|
m_context_menu_lat_lon = m_mouse_lat_lon = internals::PointLatLng(0, 0);
|
||||||
|
|
||||||
setMouseTracking(true);
|
setMouseTracking(true);
|
||||||
|
|
||||||
@ -123,20 +127,20 @@ OPMapGadgetWidget::OPMapGadgetWidget(QWidget *parent) : QWidget(parent)
|
|||||||
// **************
|
// **************
|
||||||
// default home position
|
// default home position
|
||||||
|
|
||||||
home_position.coord = pos_lat_lon;
|
m_home_position.coord = pos_lat_lon;
|
||||||
home_position.altitude = altitude;
|
m_home_position.altitude = altitude;
|
||||||
home_position.locked = false;
|
m_home_position.locked = false;
|
||||||
|
|
||||||
// **************
|
// **************
|
||||||
// default magic waypoint params
|
// default magic waypoint params
|
||||||
|
|
||||||
magic_waypoint.map_wp_item = NULL;
|
m_magic_waypoint.map_wp_item = NULL;
|
||||||
magic_waypoint.coord = home_position.coord;
|
m_magic_waypoint.coord = m_home_position.coord;
|
||||||
magic_waypoint.altitude = altitude;
|
m_magic_waypoint.altitude = altitude;
|
||||||
magic_waypoint.description = "Magic waypoint";
|
m_magic_waypoint.description = "Magic waypoint";
|
||||||
magic_waypoint.locked = false;
|
m_magic_waypoint.locked = false;
|
||||||
magic_waypoint.time_seconds = 0;
|
m_magic_waypoint.time_seconds = 0;
|
||||||
magic_waypoint.hold_time_seconds = 0;
|
m_magic_waypoint.hold_time_seconds = 0;
|
||||||
|
|
||||||
// **************
|
// **************
|
||||||
// create the widget that holds the user controls and the map
|
// create the widget that holds the user controls and the map
|
||||||
@ -157,8 +161,8 @@ OPMapGadgetWidget::OPMapGadgetWidget(QWidget *parent) : QWidget(parent)
|
|||||||
m_widget->horizontalSliderZoom->setMinimum(m_map->MinZoom()); //
|
m_widget->horizontalSliderZoom->setMinimum(m_map->MinZoom()); //
|
||||||
m_widget->horizontalSliderZoom->setMaximum(m_map->MaxZoom() + max_digital_zoom); //
|
m_widget->horizontalSliderZoom->setMaximum(m_map->MaxZoom() + max_digital_zoom); //
|
||||||
|
|
||||||
min_zoom = m_widget->horizontalSliderZoom->minimum(); // minimum zoom we can accept
|
m_min_zoom = m_widget->horizontalSliderZoom->minimum(); // minimum zoom we can accept
|
||||||
max_zoom = m_widget->horizontalSliderZoom->maximum(); // maximum zoom we can accept
|
m_max_zoom = m_widget->horizontalSliderZoom->maximum(); // maximum zoom we can accept
|
||||||
|
|
||||||
m_map->SetMouseWheelZoomType(internals::MouseWheelZoomType::MousePositionWithoutCenter); // set how the mouse wheel zoom functions
|
m_map->SetMouseWheelZoomType(internals::MouseWheelZoomType::MousePositionWithoutCenter); // set how the mouse wheel zoom functions
|
||||||
m_map->SetFollowMouse(true); // we want a contiuous mouse position reading
|
m_map->SetFollowMouse(true); // we want a contiuous mouse position reading
|
||||||
@ -262,10 +266,10 @@ OPMapGadgetWidget::OPMapGadgetWidget(QWidget *parent) : QWidget(parent)
|
|||||||
connect(m_map, SIGNAL(WPInserted(int const&, WayPointItem*)), this, SLOT(WPInserted(int const&, WayPointItem*)));
|
connect(m_map, SIGNAL(WPInserted(int const&, WayPointItem*)), this, SLOT(WPInserted(int const&, WayPointItem*)));
|
||||||
connect(m_map, SIGNAL(WPDeleted(int const&)), this, SLOT(WPDeleted(int const&)));
|
connect(m_map, SIGNAL(WPDeleted(int const&)), this, SLOT(WPDeleted(int const&)));
|
||||||
|
|
||||||
m_map->SetCurrentPosition(home_position.coord); // set the map position
|
m_map->SetCurrentPosition(m_home_position.coord); // set the map position
|
||||||
m_map->Home->SetCoord(home_position.coord); // set the HOME position
|
m_map->Home->SetCoord(m_home_position.coord); // set the HOME position
|
||||||
m_map->UAV->SetUAVPos(home_position.coord, 0.0); // set the UAV position
|
m_map->UAV->SetUAVPos(m_home_position.coord, 0.0); // set the UAV position
|
||||||
m_map->GPS->SetUAVPos(home_position.coord, 0.0); // set the UAV position
|
m_map->GPS->SetUAVPos(m_home_position.coord, 0.0); // set the UAV position
|
||||||
|
|
||||||
// **************
|
// **************
|
||||||
// create various context menu (mouse right click menu) actions
|
// create various context menu (mouse right click menu) actions
|
||||||
@ -300,13 +304,14 @@ OPMapGadgetWidget::OPMapGadgetWidget(QWidget *parent) : QWidget(parent)
|
|||||||
// create the desired timers
|
// create the desired timers
|
||||||
|
|
||||||
m_updateTimer = new QTimer();
|
m_updateTimer = new QTimer();
|
||||||
m_updateTimer->setInterval(200);
|
m_updateTimer->setInterval(m_maxUpdateRate);
|
||||||
connect(m_updateTimer, SIGNAL(timeout()), this, SLOT(updatePosition()));
|
connect(m_updateTimer, SIGNAL(timeout()), this, SLOT(updatePosition()));
|
||||||
m_updateTimer->start();
|
m_updateTimer->start();
|
||||||
|
|
||||||
m_statusUpdateTimer = new QTimer();
|
m_statusUpdateTimer = new QTimer();
|
||||||
m_statusUpdateTimer->setInterval(100);
|
m_statusUpdateTimer->setInterval(200);
|
||||||
connect(m_statusUpdateTimer, SIGNAL(timeout()), this, SLOT(updateMousePos()));
|
// m_statusUpdateTimer->setInterval(m_maxUpdateRate);
|
||||||
|
connect(m_statusUpdateTimer, SIGNAL(timeout()), this, SLOT(updateMousePos()));
|
||||||
m_statusUpdateTimer->start();
|
m_statusUpdateTimer->start();
|
||||||
|
|
||||||
// **************
|
// **************
|
||||||
@ -385,22 +390,22 @@ void OPMapGadgetWidget::contextMenuEvent(QContextMenuEvent *event)
|
|||||||
|
|
||||||
QString s;
|
QString s;
|
||||||
|
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (event->reason() != QContextMenuEvent::Mouse)
|
if (event->reason() != QContextMenuEvent::Mouse)
|
||||||
return; // not a mouse click event
|
return; // not a mouse click event
|
||||||
|
|
||||||
// current mouse position
|
// current mouse position
|
||||||
QPoint p = m_map->mapFromGlobal(event->globalPos());
|
QPoint p = m_map->mapFromGlobal(event->globalPos());
|
||||||
context_menu_lat_lon = m_map->GetFromLocalToLatLng(p);
|
m_context_menu_lat_lon = m_map->GetFromLocalToLatLng(p);
|
||||||
// context_menu_lat_lon = m_map->currentMousePosition();
|
// m_context_menu_lat_lon = m_map->currentMousePosition();
|
||||||
|
|
||||||
if (!m_map->contentsRect().contains(p))
|
if (!m_map->contentsRect().contains(p))
|
||||||
return; // the mouse click was not on the map
|
return; // the mouse click was not on the map
|
||||||
|
|
||||||
// show the mouse position
|
// show the mouse position
|
||||||
s = QString::number(context_menu_lat_lon.Lat(), 'f', 7) + " " + QString::number(context_menu_lat_lon.Lng(), 'f', 7);
|
s = QString::number(m_context_menu_lat_lon.Lat(), 'f', 7) + " " + QString::number(m_context_menu_lat_lon.Lng(), 'f', 7);
|
||||||
m_widget->labelMousePos->setText(s);
|
m_widget->labelMousePos->setText(s);
|
||||||
|
|
||||||
// find out if we have a waypoint under the mouse cursor
|
// find out if we have a waypoint under the mouse cursor
|
||||||
@ -425,6 +430,13 @@ void OPMapGadgetWidget::contextMenuEvent(QContextMenuEvent *event)
|
|||||||
|
|
||||||
menu.addSeparator();
|
menu.addSeparator();
|
||||||
|
|
||||||
|
QMenu maxUpdateRateSubMenu(tr("&Max Update Rate ") + "(" + QString::number(m_maxUpdateRate) + " ms)", this);
|
||||||
|
for (int i = 0; i < maxUpdateRateAct.count(); i++)
|
||||||
|
maxUpdateRateSubMenu.addAction(maxUpdateRateAct.at(i));
|
||||||
|
menu.addMenu(&maxUpdateRateSubMenu);
|
||||||
|
|
||||||
|
menu.addSeparator();
|
||||||
|
|
||||||
switch (m_map_mode)
|
switch (m_map_mode)
|
||||||
{
|
{
|
||||||
case Normal_MapMode: s = tr(" (Normal)"); break;
|
case Normal_MapMode: s = tr(" (Normal)"); break;
|
||||||
@ -612,58 +624,81 @@ void OPMapGadgetWidget::keyPressEvent(QKeyEvent* event)
|
|||||||
// *************************************************************************************
|
// *************************************************************************************
|
||||||
// timer signals
|
// timer signals
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Updates the UAV position on the map. It is called every 200ms
|
Updates the UAV position on the map. It is called every 200ms
|
||||||
by a timer.
|
by a timer.
|
||||||
|
|
||||||
TODO: consider updating upon object update, not timer.
|
TODO: consider updating upon object update, not timer.
|
||||||
|
|
||||||
|
from Pip: No don't update on object update - had reports that peoples PC's can't cope with high update rates - have had to allow user to set map update from 100ms to 5 seconds (depending on their PC's graphics processing ability), so this needs to be kept on a timer.
|
||||||
*/
|
*/
|
||||||
void OPMapGadgetWidget::updatePosition()
|
void OPMapGadgetWidget::updatePosition()
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
double uav_latitude, uav_longitude, uav_altitude, uav_yaw;
|
||||||
return;
|
double gps_latitude, gps_longitude, gps_altitude, gps_heading;
|
||||||
|
|
||||||
|
internals::PointLatLng uav_pos;
|
||||||
|
internals::PointLatLng gps_pos;
|
||||||
|
|
||||||
|
if (!m_widget || !m_map)
|
||||||
|
return;
|
||||||
|
|
||||||
QMutexLocker locker(&m_map_mutex);
|
QMutexLocker locker(&m_map_mutex);
|
||||||
//Pip I'm sorry, I know this was here with a purpose vvv
|
// Pip I'm sorry, I know this was here with a purpose vvv
|
||||||
//if (!telemetry_connected)
|
// from Pip: let you off :)
|
||||||
// return;
|
//if (!telemetry_connected)
|
||||||
|
// return;
|
||||||
|
|
||||||
double latitude;
|
// *************
|
||||||
double longitude;
|
// get the current UAV details
|
||||||
double altitude;
|
|
||||||
|
|
||||||
// get current UAV position
|
// get current UAV position
|
||||||
if (!getUAVPosition(latitude, longitude, altitude))
|
if (!getUAVPosition(uav_latitude, uav_longitude, uav_altitude))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// get current UAV heading
|
// get current UAV heading
|
||||||
float yaw = getUAV_Yaw();
|
uav_yaw = getUAV_Yaw();
|
||||||
|
|
||||||
internals::PointLatLng uav_pos = internals::PointLatLng(latitude, longitude); // current UAV position
|
uav_pos = internals::PointLatLng(uav_latitude, uav_longitude);
|
||||||
float uav_heading_degrees = yaw; // current UAV heading
|
|
||||||
float uav_altitude_meters = altitude; // current UAV height
|
// *************
|
||||||
float uav_ground_speed_meters_per_second = 0; //data.Groundspeed; // current UAV ground speed
|
// get the current GPS details
|
||||||
|
|
||||||
|
// get current GPS position
|
||||||
|
if (!getGPSPosition(gps_latitude, gps_longitude, gps_altitude))
|
||||||
|
return;
|
||||||
|
|
||||||
|
// get current GPS heading
|
||||||
|
// gps_heading = getGPS_Heading();
|
||||||
|
gps_heading = 0;
|
||||||
|
|
||||||
|
gps_pos = internals::PointLatLng(gps_latitude, gps_longitude);
|
||||||
|
|
||||||
|
// *************
|
||||||
|
// display the UAV position
|
||||||
|
|
||||||
// display the UAV lat/lon position
|
|
||||||
QString str =
|
QString str =
|
||||||
"lat: " + QString::number(uav_pos.Lat(), 'f', 7) +
|
"lat: " + QString::number(uav_pos.Lat(), 'f', 7) +
|
||||||
" lon: " + QString::number(uav_pos.Lng(), 'f', 7) +
|
" lon: " + QString::number(uav_pos.Lng(), 'f', 7) +
|
||||||
" " + QString::number(uav_heading_degrees, 'f', 1) + "deg" +
|
" " + QString::number(uav_yaw, 'f', 1) + "deg" +
|
||||||
" " + QString::number(uav_altitude_meters, 'f', 1) + "m" +
|
" " + QString::number(uav_altitude, 'f', 1) + "m";
|
||||||
" " + QString::number(uav_ground_speed_meters_per_second, 'f', 1) + "m/s";
|
// " " + QString::number(uav_ground_speed_meters_per_second, 'f', 1) + "m/s";
|
||||||
m_widget->labelUAVPos->setText(str);
|
m_widget->labelUAVPos->setText(str);
|
||||||
|
|
||||||
m_map->UAV->SetUAVPos(uav_pos, uav_altitude_meters); // set the maps UAV position
|
// *************
|
||||||
// qDebug()<<"UAVPOSITION"<<uav_pos.ToString();
|
// set the UAV icon position on the map
|
||||||
m_map->UAV->SetUAVHeading(uav_heading_degrees); // set the maps UAV heading
|
|
||||||
|
|
||||||
if (!getGPSPosition(latitude, longitude, altitude))
|
m_map->UAV->SetUAVPos(uav_pos, uav_altitude); // set the maps UAV position
|
||||||
return;
|
// qDebug()<<"UAVPOSITION"<<uav_pos.ToString();
|
||||||
|
m_map->UAV->SetUAVHeading(uav_yaw); // set the maps UAV heading
|
||||||
|
|
||||||
uav_pos = internals::PointLatLng(latitude, longitude); // current UAV position
|
// *************
|
||||||
m_map->GPS->SetUAVPos(uav_pos, uav_altitude_meters); // set the maps UAV position
|
// set the GPS icon position on the map
|
||||||
m_map->GPS->SetUAVHeading(uav_heading_degrees); // set the maps UAV heading
|
|
||||||
|
m_map->GPS->SetUAVPos(gps_pos, gps_altitude); // set the maps GPS position
|
||||||
|
m_map->GPS->SetUAVHeading(gps_heading); // set the maps GPS heading
|
||||||
|
|
||||||
|
// *************
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -672,8 +707,8 @@ void OPMapGadgetWidget::updatePosition()
|
|||||||
*/
|
*/
|
||||||
void OPMapGadgetWidget::updateMousePos()
|
void OPMapGadgetWidget::updateMousePos()
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
QMutexLocker locker(&m_map_mutex);
|
QMutexLocker locker(&m_map_mutex);
|
||||||
|
|
||||||
@ -696,14 +731,14 @@ void OPMapGadgetWidget::updateMousePos()
|
|||||||
// find out if we have a waypoint under the mouse cursor
|
// find out if we have a waypoint under the mouse cursor
|
||||||
mapcontrol::WayPointItem *wp = qgraphicsitem_cast<mapcontrol::WayPointItem *>(item);
|
mapcontrol::WayPointItem *wp = qgraphicsitem_cast<mapcontrol::WayPointItem *>(item);
|
||||||
|
|
||||||
if (mouse_lat_lon == lat_lon)
|
if (m_mouse_lat_lon == lat_lon)
|
||||||
return; // the mouse has not moved
|
return; // the mouse has not moved
|
||||||
|
|
||||||
mouse_lat_lon = lat_lon; // yes it has!
|
m_mouse_lat_lon = lat_lon; // yes it has!
|
||||||
|
|
||||||
internals::PointLatLng home_lat_lon = m_map->Home->Coord();
|
internals::PointLatLng home_lat_lon = m_map->Home->Coord();
|
||||||
|
|
||||||
QString s = QString::number(mouse_lat_lon.Lat(), 'f', 7) + " " + QString::number(mouse_lat_lon.Lng(), 'f', 7);
|
QString s = QString::number(m_mouse_lat_lon.Lat(), 'f', 7) + " " + QString::number(m_mouse_lat_lon.Lng(), 'f', 7);
|
||||||
if (wp)
|
if (wp)
|
||||||
{
|
{
|
||||||
s += " wp[" + QString::number(wp->Number()) + "]";
|
s += " wp[" + QString::number(wp->Number()) + "]";
|
||||||
@ -718,8 +753,8 @@ void OPMapGadgetWidget::updateMousePos()
|
|||||||
{
|
{
|
||||||
s += " home";
|
s += " home";
|
||||||
|
|
||||||
double dist = distance(home_lat_lon, mouse_lat_lon);
|
double dist = distance(home_lat_lon, m_mouse_lat_lon);
|
||||||
double bear = bearing(home_lat_lon, mouse_lat_lon);
|
double bear = bearing(home_lat_lon, m_mouse_lat_lon);
|
||||||
s += " " + QString::number(dist * 1000, 'f', 1) + "m";
|
s += " " + QString::number(dist * 1000, 'f', 1) + "m";
|
||||||
s += " " + QString::number(bear, 'f', 1) + "deg";
|
s += " " + QString::number(bear, 'f', 1) + "deg";
|
||||||
}
|
}
|
||||||
@ -753,22 +788,22 @@ void OPMapGadgetWidget::updateMousePos()
|
|||||||
*/
|
*/
|
||||||
void OPMapGadgetWidget::zoomChanged(double zoomt, double zoom, double zoomd)
|
void OPMapGadgetWidget::zoomChanged(double zoomt, double zoom, double zoomd)
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
QString s = "tot:" + QString::number(zoomt, 'f', 1) + " rea:" + QString::number(zoom, 'f', 1) + " dig:" + QString::number(zoomd, 'f', 1);
|
QString s = "tot:" + QString::number(zoomt, 'f', 1) + " rea:" + QString::number(zoom, 'f', 1) + " dig:" + QString::number(zoomd, 'f', 1);
|
||||||
m_widget->labelMapZoom->setText(s);
|
m_widget->labelMapZoom->setText(s);
|
||||||
|
|
||||||
int i_zoom = (int)(zoomt + 0.5);
|
int i_zoom = (int)(zoomt + 0.5);
|
||||||
|
|
||||||
if (i_zoom < min_zoom) i_zoom = min_zoom;
|
if (i_zoom < m_min_zoom) i_zoom = m_min_zoom;
|
||||||
else
|
else
|
||||||
if (i_zoom > max_zoom) i_zoom = max_zoom;
|
if (i_zoom > m_max_zoom) i_zoom = m_max_zoom;
|
||||||
|
|
||||||
if (m_widget->horizontalSliderZoom->value() != i_zoom)
|
if (m_widget->horizontalSliderZoom->value() != i_zoom)
|
||||||
m_widget->horizontalSliderZoom->setValue(i_zoom); // set the GUI zoom slider position
|
m_widget->horizontalSliderZoom->setValue(i_zoom); // set the GUI zoom slider position
|
||||||
|
|
||||||
int index0_zoom = i_zoom - min_zoom; // zoom level starting at index level '0'
|
int index0_zoom = i_zoom - m_min_zoom; // zoom level starting at index level '0'
|
||||||
if (index0_zoom < zoomAct.count())
|
if (index0_zoom < zoomAct.count())
|
||||||
zoomAct.at(index0_zoom)->setChecked(true); // set the right-click context menu zoom level
|
zoomAct.at(index0_zoom)->setChecked(true); // set the right-click context menu zoom level
|
||||||
}
|
}
|
||||||
@ -779,8 +814,8 @@ void OPMapGadgetWidget::OnMapDrag()
|
|||||||
|
|
||||||
void OPMapGadgetWidget::OnCurrentPositionChanged(internals::PointLatLng point)
|
void OPMapGadgetWidget::OnCurrentPositionChanged(internals::PointLatLng point)
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
QString coord_str = QString::number(point.Lat(), 'f', 7) + " " + QString::number(point.Lng(), 'f', 7) + " ";
|
QString coord_str = QString::number(point.Lat(), 'f', 7) + " " + QString::number(point.Lng(), 'f', 7) + " ";
|
||||||
m_widget->labelMapPos->setText(coord_str);
|
m_widget->labelMapPos->setText(coord_str);
|
||||||
@ -791,8 +826,8 @@ void OPMapGadgetWidget::OnCurrentPositionChanged(internals::PointLatLng point)
|
|||||||
*/
|
*/
|
||||||
void OPMapGadgetWidget::OnTilesStillToLoad(int number)
|
void OPMapGadgetWidget::OnTilesStillToLoad(int number)
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// if (prev_tile_number < number || m_widget->progressBarMap->maximum() < number)
|
// if (prev_tile_number < number || m_widget->progressBarMap->maximum() < number)
|
||||||
// m_widget->progressBarMap->setMaximum(number);
|
// m_widget->progressBarMap->setMaximum(number);
|
||||||
@ -804,7 +839,7 @@ void OPMapGadgetWidget::OnTilesStillToLoad(int number)
|
|||||||
|
|
||||||
// m_widget->labelNumTilesToLoad->setText(QString::number(number));
|
// m_widget->labelNumTilesToLoad->setText(QString::number(number));
|
||||||
|
|
||||||
prev_tile_number = number;
|
m_prev_tile_number = number;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -812,8 +847,8 @@ void OPMapGadgetWidget::OnTilesStillToLoad(int number)
|
|||||||
*/
|
*/
|
||||||
void OPMapGadgetWidget::OnTileLoadStart()
|
void OPMapGadgetWidget::OnTileLoadStart()
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_widget->progressBarMap->setVisible(true);
|
m_widget->progressBarMap->setVisible(true);
|
||||||
}
|
}
|
||||||
@ -826,8 +861,8 @@ void OPMapGadgetWidget::OnTileLoadStart()
|
|||||||
|
|
||||||
void OPMapGadgetWidget::OnTileLoadComplete()
|
void OPMapGadgetWidget::OnTileLoadComplete()
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_widget->progressBarMap->setVisible(false);
|
m_widget->progressBarMap->setVisible(false);
|
||||||
}
|
}
|
||||||
@ -878,11 +913,11 @@ void OPMapGadgetWidget::WPValuesChanged(WayPointItem *waypoint)
|
|||||||
|
|
||||||
case MagicWaypoint_MapMode:
|
case MagicWaypoint_MapMode:
|
||||||
// update our copy of the magic waypoint
|
// update our copy of the magic waypoint
|
||||||
if (magic_waypoint.map_wp_item && magic_waypoint.map_wp_item == waypoint)
|
if (m_magic_waypoint.map_wp_item && m_magic_waypoint.map_wp_item == waypoint)
|
||||||
{
|
{
|
||||||
magic_waypoint.coord = waypoint->Coord();
|
m_magic_waypoint.coord = waypoint->Coord();
|
||||||
magic_waypoint.altitude = waypoint->Altitude();
|
m_magic_waypoint.altitude = waypoint->Altitude();
|
||||||
magic_waypoint.description = waypoint->Description();
|
m_magic_waypoint.description = waypoint->Description();
|
||||||
|
|
||||||
// move the UAV to the magic waypoint position
|
// move the UAV to the magic waypoint position
|
||||||
// moveToMagicWaypointPosition();
|
// moveToMagicWaypointPosition();
|
||||||
@ -930,8 +965,8 @@ void OPMapGadgetWidget::on_toolButtonMapHome_clicked()
|
|||||||
|
|
||||||
void OPMapGadgetWidget::on_toolButtonMapUAV_clicked()
|
void OPMapGadgetWidget::on_toolButtonMapUAV_clicked()
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
QMutexLocker locker(&m_map_mutex);
|
QMutexLocker locker(&m_map_mutex);
|
||||||
|
|
||||||
@ -940,16 +975,16 @@ void OPMapGadgetWidget::on_toolButtonMapUAV_clicked()
|
|||||||
|
|
||||||
void OPMapGadgetWidget::on_toolButtonMapUAVheading_clicked()
|
void OPMapGadgetWidget::on_toolButtonMapUAVheading_clicked()
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
followUAVheadingAct->toggle();
|
followUAVheadingAct->toggle();
|
||||||
}
|
}
|
||||||
|
|
||||||
void OPMapGadgetWidget::on_horizontalSliderZoom_sliderMoved(int position)
|
void OPMapGadgetWidget::on_horizontalSliderZoom_sliderMoved(int position)
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
QMutexLocker locker(&m_map_mutex);
|
QMutexLocker locker(&m_map_mutex);
|
||||||
|
|
||||||
@ -982,7 +1017,7 @@ void OPMapGadgetWidget::on_toolButtonMoveToWP_clicked()
|
|||||||
|
|
||||||
void OPMapGadgetWidget::onTelemetryConnect()
|
void OPMapGadgetWidget::onTelemetryConnect()
|
||||||
{
|
{
|
||||||
telemetry_connected = true;
|
m_telemetry_connected = true;
|
||||||
|
|
||||||
if (!obum) return;
|
if (!obum) return;
|
||||||
|
|
||||||
@ -998,14 +1033,14 @@ void OPMapGadgetWidget::onTelemetryConnect()
|
|||||||
setHome(internals::PointLatLng(LLA[0], LLA[1]));
|
setHome(internals::PointLatLng(LLA[0], LLA[1]));
|
||||||
|
|
||||||
if (m_map)
|
if (m_map)
|
||||||
m_map->SetCurrentPosition(home_position.coord); // set the map position
|
m_map->SetCurrentPosition(m_home_position.coord); // set the map position
|
||||||
|
|
||||||
// ***********************
|
// ***********************
|
||||||
}
|
}
|
||||||
|
|
||||||
void OPMapGadgetWidget::onTelemetryDisconnect()
|
void OPMapGadgetWidget::onTelemetryDisconnect()
|
||||||
{
|
{
|
||||||
telemetry_connected = false;
|
m_telemetry_connected = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Updates the Home position icon whenever the HomePosition object is updated
|
// Updates the Home position icon whenever the HomePosition object is updated
|
||||||
@ -1027,8 +1062,8 @@ void OPMapGadgetWidget::homePositionUpdated(UAVObject *hp)
|
|||||||
*/
|
*/
|
||||||
void OPMapGadgetWidget::setHome(QPointF pos)
|
void OPMapGadgetWidget::setHome(QPointF pos)
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
double latitude = pos.x();
|
double latitude = pos.x();
|
||||||
double longitude = pos.y();
|
double longitude = pos.y();
|
||||||
@ -1051,8 +1086,8 @@ void OPMapGadgetWidget::setHome(QPointF pos)
|
|||||||
*/
|
*/
|
||||||
void OPMapGadgetWidget::setHome(internals::PointLatLng pos_lat_lon)
|
void OPMapGadgetWidget::setHome(internals::PointLatLng pos_lat_lon)
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (pos_lat_lon.Lat() != pos_lat_lon.Lat() || pos_lat_lon.Lng() != pos_lat_lon.Lng())
|
if (pos_lat_lon.Lat() != pos_lat_lon.Lat() || pos_lat_lon.Lng() != pos_lat_lon.Lng())
|
||||||
return;; // nan prevention
|
return;; // nan prevention
|
||||||
@ -1074,9 +1109,9 @@ void OPMapGadgetWidget::setHome(internals::PointLatLng pos_lat_lon)
|
|||||||
|
|
||||||
// *********
|
// *********
|
||||||
|
|
||||||
home_position.coord = internals::PointLatLng(latitude, longitude);
|
m_home_position.coord = internals::PointLatLng(latitude, longitude);
|
||||||
|
|
||||||
m_map->Home->SetCoord(home_position.coord);
|
m_map->Home->SetCoord(m_home_position.coord);
|
||||||
m_map->Home->RefreshPos();
|
m_map->Home->RefreshPos();
|
||||||
|
|
||||||
// move the magic waypoint to keep it within the safe area boundry
|
// move the magic waypoint to keep it within the safe area boundry
|
||||||
@ -1089,52 +1124,74 @@ void OPMapGadgetWidget::setHome(internals::PointLatLng pos_lat_lon)
|
|||||||
*/
|
*/
|
||||||
void OPMapGadgetWidget::goHome()
|
void OPMapGadgetWidget::goHome()
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
followUAVpositionAct->setChecked(false);
|
followUAVpositionAct->setChecked(false);
|
||||||
|
|
||||||
internals::PointLatLng home_pos = home_position.coord; // get the home location
|
internals::PointLatLng home_pos = m_home_position.coord; // get the home location
|
||||||
m_map->SetCurrentPosition(home_pos); // center the map onto the home location
|
m_map->SetCurrentPosition(home_pos); // center the map onto the home location
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void OPMapGadgetWidget::zoomIn()
|
void OPMapGadgetWidget::zoomIn()
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int zoom = m_map->ZoomTotal() + 1;
|
int zoom = m_map->ZoomTotal() + 1;
|
||||||
|
|
||||||
if (zoom < min_zoom) zoom = min_zoom;
|
if (zoom < m_min_zoom) zoom = m_min_zoom;
|
||||||
else
|
else
|
||||||
if (zoom > max_zoom) zoom = max_zoom;
|
if (zoom > m_max_zoom) zoom = m_max_zoom;
|
||||||
|
|
||||||
m_map->SetZoom(zoom);
|
m_map->SetZoom(zoom);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OPMapGadgetWidget::zoomOut()
|
void OPMapGadgetWidget::zoomOut()
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int zoom = m_map->ZoomTotal() - 1;
|
int zoom = m_map->ZoomTotal() - 1;
|
||||||
|
|
||||||
if (zoom < min_zoom) zoom = min_zoom;
|
if (zoom < m_min_zoom) zoom = m_min_zoom;
|
||||||
else
|
else
|
||||||
if (zoom > max_zoom) zoom = max_zoom;
|
if (zoom > m_max_zoom) zoom = m_max_zoom;
|
||||||
|
|
||||||
m_map->SetZoom(zoom);
|
m_map->SetZoom(zoom);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OPMapGadgetWidget::setMaxUpdateRate(int update_rate)
|
||||||
|
{
|
||||||
|
if (!m_widget || !m_map)
|
||||||
|
return;
|
||||||
|
|
||||||
|
int list_size = sizeof(max_update_rate_list) / sizeof(max_update_rate_list[0]);
|
||||||
|
int min_rate = max_update_rate_list[0];
|
||||||
|
int max_rate = max_update_rate_list[list_size - 1];
|
||||||
|
|
||||||
|
if (update_rate < min_rate) update_rate = min_rate;
|
||||||
|
else
|
||||||
|
if (update_rate > max_rate) update_rate = max_rate;
|
||||||
|
|
||||||
|
m_maxUpdateRate = update_rate;
|
||||||
|
|
||||||
|
if (m_updateTimer)
|
||||||
|
m_updateTimer->setInterval(m_maxUpdateRate);
|
||||||
|
|
||||||
|
// if (m_statusUpdateTimer)
|
||||||
|
// m_statusUpdateTimer->setInterval(m_maxUpdateRate);
|
||||||
|
}
|
||||||
|
|
||||||
void OPMapGadgetWidget::setZoom(int zoom)
|
void OPMapGadgetWidget::setZoom(int zoom)
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (zoom < min_zoom) zoom = min_zoom;
|
if (zoom < m_min_zoom) zoom = m_min_zoom;
|
||||||
else
|
else
|
||||||
if (zoom > max_zoom) zoom = max_zoom;
|
if (zoom > m_max_zoom) zoom = m_max_zoom;
|
||||||
|
|
||||||
internals::MouseWheelZoomType::Types zoom_type = m_map->GetMouseWheelZoomType();
|
internals::MouseWheelZoomType::Types zoom_type = m_map->GetMouseWheelZoomType();
|
||||||
m_map->SetMouseWheelZoomType(internals::MouseWheelZoomType::ViewCenter);
|
m_map->SetMouseWheelZoomType(internals::MouseWheelZoomType::ViewCenter);
|
||||||
@ -1146,8 +1203,8 @@ void OPMapGadgetWidget::setZoom(int zoom)
|
|||||||
|
|
||||||
void OPMapGadgetWidget::setPosition(QPointF pos)
|
void OPMapGadgetWidget::setPosition(QPointF pos)
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
double latitude = pos.y();
|
double latitude = pos.y();
|
||||||
double longitude = pos.x();
|
double longitude = pos.x();
|
||||||
@ -1168,48 +1225,48 @@ void OPMapGadgetWidget::setPosition(QPointF pos)
|
|||||||
|
|
||||||
void OPMapGadgetWidget::setMapProvider(QString provider)
|
void OPMapGadgetWidget::setMapProvider(QString provider)
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_map->SetMapType(mapcontrol::Helper::MapTypeFromString(provider));
|
m_map->SetMapType(mapcontrol::Helper::MapTypeFromString(provider));
|
||||||
}
|
}
|
||||||
|
|
||||||
void OPMapGadgetWidget::setAccessMode(QString accessMode)
|
void OPMapGadgetWidget::setAccessMode(QString accessMode)
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_map->configuration->SetAccessMode(mapcontrol::Helper::AccessModeFromString(accessMode));
|
m_map->configuration->SetAccessMode(mapcontrol::Helper::AccessModeFromString(accessMode));
|
||||||
}
|
}
|
||||||
|
|
||||||
void OPMapGadgetWidget::setUseOpenGL(bool useOpenGL)
|
void OPMapGadgetWidget::setUseOpenGL(bool useOpenGL)
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_map->SetUseOpenGL(useOpenGL);
|
m_map->SetUseOpenGL(useOpenGL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OPMapGadgetWidget::setShowTileGridLines(bool showTileGridLines)
|
void OPMapGadgetWidget::setShowTileGridLines(bool showTileGridLines)
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_map->SetShowTileGridLines(showTileGridLines);
|
m_map->SetShowTileGridLines(showTileGridLines);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OPMapGadgetWidget::setUseMemoryCache(bool useMemoryCache)
|
void OPMapGadgetWidget::setUseMemoryCache(bool useMemoryCache)
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_map->configuration->SetUseMemoryCache(useMemoryCache);
|
m_map->configuration->SetUseMemoryCache(useMemoryCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OPMapGadgetWidget::setCacheLocation(QString cacheLocation)
|
void OPMapGadgetWidget::setCacheLocation(QString cacheLocation)
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
cacheLocation = cacheLocation.simplified(); // remove any surrounding spaces
|
cacheLocation = cacheLocation.simplified(); // remove any surrounding spaces
|
||||||
|
|
||||||
@ -1235,8 +1292,8 @@ void OPMapGadgetWidget::setCacheLocation(QString cacheLocation)
|
|||||||
|
|
||||||
void OPMapGadgetWidget::setMapMode(opMapModeType mode)
|
void OPMapGadgetWidget::setMapMode(opMapModeType mode)
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (mode != Normal_MapMode && mode != MagicWaypoint_MapMode)
|
if (mode != Normal_MapMode && mode != MagicWaypoint_MapMode)
|
||||||
mode = Normal_MapMode; // fix error
|
mode = Normal_MapMode; // fix error
|
||||||
@ -1268,12 +1325,12 @@ void OPMapGadgetWidget::setMapMode(opMapModeType mode)
|
|||||||
hideMagicWaypointControls();
|
hideMagicWaypointControls();
|
||||||
|
|
||||||
// delete the magic waypoint from the map
|
// delete the magic waypoint from the map
|
||||||
if (magic_waypoint.map_wp_item)
|
if (m_magic_waypoint.map_wp_item)
|
||||||
{
|
{
|
||||||
magic_waypoint.coord = magic_waypoint.map_wp_item->Coord();
|
m_magic_waypoint.coord = m_magic_waypoint.map_wp_item->Coord();
|
||||||
magic_waypoint.altitude = magic_waypoint.map_wp_item->Altitude();
|
m_magic_waypoint.altitude = m_magic_waypoint.map_wp_item->Altitude();
|
||||||
magic_waypoint.description = magic_waypoint.map_wp_item->Description();
|
m_magic_waypoint.description = m_magic_waypoint.map_wp_item->Description();
|
||||||
magic_waypoint.map_wp_item = NULL;
|
m_magic_waypoint.map_wp_item = NULL;
|
||||||
}
|
}
|
||||||
m_map->WPDeleteAll();
|
m_map->WPDeleteAll();
|
||||||
|
|
||||||
@ -1320,10 +1377,10 @@ void OPMapGadgetWidget::setMapMode(opMapModeType mode)
|
|||||||
m_waypoint_list_mutex.unlock();
|
m_waypoint_list_mutex.unlock();
|
||||||
|
|
||||||
// restore the magic waypoint on the map
|
// restore the magic waypoint on the map
|
||||||
magic_waypoint.map_wp_item = m_map->WPCreate(magic_waypoint.coord, magic_waypoint.altitude, magic_waypoint.description);
|
m_magic_waypoint.map_wp_item = m_map->WPCreate(m_magic_waypoint.coord, m_magic_waypoint.altitude, m_magic_waypoint.description);
|
||||||
magic_waypoint.map_wp_item->setZValue(10 + magic_waypoint.map_wp_item->Number());
|
m_magic_waypoint.map_wp_item->setZValue(10 + m_magic_waypoint.map_wp_item->Number());
|
||||||
magic_waypoint.map_wp_item->SetShowNumber(false);
|
m_magic_waypoint.map_wp_item->SetShowNumber(false);
|
||||||
magic_waypoint.map_wp_item->picture.load(QString::fromUtf8(":/opmap/images/waypoint_marker3.png"));
|
m_magic_waypoint.map_wp_item->picture.load(QString::fromUtf8(":/opmap/images/waypoint_marker3.png"));
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1334,8 +1391,10 @@ void OPMapGadgetWidget::setMapMode(opMapModeType mode)
|
|||||||
|
|
||||||
void OPMapGadgetWidget::createActions()
|
void OPMapGadgetWidget::createActions()
|
||||||
{
|
{
|
||||||
if (!m_widget)
|
int list_size;
|
||||||
return;
|
|
||||||
|
if (!m_widget || !m_map)
|
||||||
|
return;
|
||||||
|
|
||||||
// ***********************
|
// ***********************
|
||||||
// create menu actions
|
// create menu actions
|
||||||
@ -1503,7 +1562,7 @@ void OPMapGadgetWidget::createActions()
|
|||||||
zoomActGroup = new QActionGroup(this);
|
zoomActGroup = new QActionGroup(this);
|
||||||
connect(zoomActGroup, SIGNAL(triggered(QAction *)), this, SLOT(onZoomActGroup_triggered(QAction *)));
|
connect(zoomActGroup, SIGNAL(triggered(QAction *)), this, SLOT(onZoomActGroup_triggered(QAction *)));
|
||||||
zoomAct.clear();
|
zoomAct.clear();
|
||||||
for (int i = min_zoom; i <= max_zoom; i++)
|
for (int i = m_min_zoom; i <= m_max_zoom; i++)
|
||||||
{
|
{
|
||||||
QAction *zoom_act = new QAction(QString::number(i), zoomActGroup);
|
QAction *zoom_act = new QAction(QString::number(i), zoomActGroup);
|
||||||
zoom_act->setCheckable(true);
|
zoom_act->setCheckable(true);
|
||||||
@ -1511,7 +1570,22 @@ void OPMapGadgetWidget::createActions()
|
|||||||
zoomAct.append(zoom_act);
|
zoomAct.append(zoom_act);
|
||||||
}
|
}
|
||||||
|
|
||||||
// *****
|
maxUpdateRateActGroup = new QActionGroup(this);
|
||||||
|
connect(maxUpdateRateActGroup, SIGNAL(triggered(QAction *)), this, SLOT(onMaxUpdateRateActGroup_triggered(QAction *)));
|
||||||
|
maxUpdateRateAct.clear();
|
||||||
|
list_size = sizeof(max_update_rate_list) / sizeof(max_update_rate_list[0]);
|
||||||
|
for (int i = 0; i < list_size; i++)
|
||||||
|
{
|
||||||
|
QAction *maxUpdateRate_act;
|
||||||
|
int j = max_update_rate_list[i];
|
||||||
|
maxUpdateRate_act = new QAction(QString::number(j), maxUpdateRateActGroup);
|
||||||
|
maxUpdateRate_act->setCheckable(true);
|
||||||
|
maxUpdateRate_act->setData(j);
|
||||||
|
maxUpdateRate_act->setChecked(j == m_maxUpdateRate);
|
||||||
|
maxUpdateRateAct.append(maxUpdateRate_act);
|
||||||
|
}
|
||||||
|
|
||||||
|
// *****
|
||||||
// safe area
|
// safe area
|
||||||
|
|
||||||
showSafeAreaAct = new QAction(tr("Show Safe Area"), this);
|
showSafeAreaAct = new QAction(tr("Show Safe Area"), this);
|
||||||
@ -1523,7 +1597,8 @@ void OPMapGadgetWidget::createActions()
|
|||||||
safeAreaActGroup = new QActionGroup(this);
|
safeAreaActGroup = new QActionGroup(this);
|
||||||
connect(safeAreaActGroup, SIGNAL(triggered(QAction *)), this, SLOT(onSafeAreaActGroup_triggered(QAction *)));
|
connect(safeAreaActGroup, SIGNAL(triggered(QAction *)), this, SLOT(onSafeAreaActGroup_triggered(QAction *)));
|
||||||
safeAreaAct.clear();
|
safeAreaAct.clear();
|
||||||
for (int i = 0; i < (int)(sizeof(safe_area_radius_list) / sizeof(safe_area_radius_list[0])); i++)
|
list_size = sizeof(safe_area_radius_list) / sizeof(safe_area_radius_list[0]);
|
||||||
|
for (int i = 0; i < list_size; i++)
|
||||||
{
|
{
|
||||||
int safeArea = safe_area_radius_list[i];
|
int safeArea = safe_area_radius_list[i];
|
||||||
QAction *safeArea_act = new QAction(QString::number(safeArea) + "m", safeAreaActGroup);
|
QAction *safeArea_act = new QAction(QString::number(safeArea) + "m", safeAreaActGroup);
|
||||||
@ -1569,7 +1644,8 @@ void OPMapGadgetWidget::createActions()
|
|||||||
uavTrailTimeActGroup = new QActionGroup(this);
|
uavTrailTimeActGroup = new QActionGroup(this);
|
||||||
connect(uavTrailTimeActGroup, SIGNAL(triggered(QAction *)), this, SLOT(onUAVTrailTimeActGroup_triggered(QAction *)));
|
connect(uavTrailTimeActGroup, SIGNAL(triggered(QAction *)), this, SLOT(onUAVTrailTimeActGroup_triggered(QAction *)));
|
||||||
uavTrailTimeAct.clear();
|
uavTrailTimeAct.clear();
|
||||||
for (int i = 0; i < (int)(sizeof(uav_trail_time_list) / sizeof(uav_trail_time_list[0])); i++)
|
list_size = sizeof(uav_trail_time_list) / sizeof(uav_trail_time_list[0]);
|
||||||
|
for (int i = 0; i < list_size; i++)
|
||||||
{
|
{
|
||||||
int uav_trail_time = uav_trail_time_list[i];
|
int uav_trail_time = uav_trail_time_list[i];
|
||||||
QAction *uavTrailTime_act = new QAction(QString::number(uav_trail_time) + " sec", uavTrailTimeActGroup);
|
QAction *uavTrailTime_act = new QAction(QString::number(uav_trail_time) + " sec", uavTrailTimeActGroup);
|
||||||
@ -1582,7 +1658,8 @@ void OPMapGadgetWidget::createActions()
|
|||||||
uavTrailDistanceActGroup = new QActionGroup(this);
|
uavTrailDistanceActGroup = new QActionGroup(this);
|
||||||
connect(uavTrailDistanceActGroup, SIGNAL(triggered(QAction *)), this, SLOT(onUAVTrailDistanceActGroup_triggered(QAction *)));
|
connect(uavTrailDistanceActGroup, SIGNAL(triggered(QAction *)), this, SLOT(onUAVTrailDistanceActGroup_triggered(QAction *)));
|
||||||
uavTrailDistanceAct.clear();
|
uavTrailDistanceAct.clear();
|
||||||
for (int i = 0; i < (int)(sizeof(uav_trail_distance_list) / sizeof(uav_trail_distance_list[0])); i++)
|
list_size = sizeof(uav_trail_distance_list) / sizeof(uav_trail_distance_list[0]);
|
||||||
|
for (int i = 0; i < list_size; i++)
|
||||||
{
|
{
|
||||||
int uav_trail_distance = uav_trail_distance_list[i];
|
int uav_trail_distance = uav_trail_distance_list[i];
|
||||||
QAction *uavTrailDistance_act = new QAction(QString::number(uav_trail_distance) + " meters", uavTrailDistanceActGroup);
|
QAction *uavTrailDistance_act = new QAction(QString::number(uav_trail_distance) + " meters", uavTrailDistanceActGroup);
|
||||||
@ -1599,62 +1676,59 @@ void OPMapGadgetWidget::createActions()
|
|||||||
|
|
||||||
void OPMapGadgetWidget::onReloadAct_triggered()
|
void OPMapGadgetWidget::onReloadAct_triggered()
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_map->ReloadMap();
|
m_map->ReloadMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
void OPMapGadgetWidget::onCopyMouseLatLonToClipAct_triggered()
|
void OPMapGadgetWidget::onCopyMouseLatLonToClipAct_triggered()
|
||||||
{
|
{
|
||||||
// QClipboard *clipboard = qApp->clipboard();
|
|
||||||
QClipboard *clipboard = QApplication::clipboard();
|
QClipboard *clipboard = QApplication::clipboard();
|
||||||
clipboard->setText(QString::number(context_menu_lat_lon.Lat(), 'f', 7) + ", " + QString::number(context_menu_lat_lon.Lng(), 'f', 7), QClipboard::Clipboard);
|
clipboard->setText(QString::number(m_context_menu_lat_lon.Lat(), 'f', 7) + ", " + QString::number(m_context_menu_lat_lon.Lng(), 'f', 7), QClipboard::Clipboard);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OPMapGadgetWidget::onCopyMouseLatToClipAct_triggered()
|
void OPMapGadgetWidget::onCopyMouseLatToClipAct_triggered()
|
||||||
{
|
{
|
||||||
// QClipboard *clipboard = qApp->clipboard();
|
|
||||||
QClipboard *clipboard = QApplication::clipboard();
|
QClipboard *clipboard = QApplication::clipboard();
|
||||||
clipboard->setText(QString::number(context_menu_lat_lon.Lat(), 'f', 7), QClipboard::Clipboard);
|
clipboard->setText(QString::number(m_context_menu_lat_lon.Lat(), 'f', 7), QClipboard::Clipboard);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OPMapGadgetWidget::onCopyMouseLonToClipAct_triggered()
|
void OPMapGadgetWidget::onCopyMouseLonToClipAct_triggered()
|
||||||
{
|
{
|
||||||
// QClipboard *clipboard = qApp->clipboard();
|
|
||||||
QClipboard *clipboard = QApplication::clipboard();
|
QClipboard *clipboard = QApplication::clipboard();
|
||||||
clipboard->setText(QString::number(context_menu_lat_lon.Lng(), 'f', 7), QClipboard::Clipboard);
|
clipboard->setText(QString::number(m_context_menu_lat_lon.Lng(), 'f', 7), QClipboard::Clipboard);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void OPMapGadgetWidget::onShowCompassAct_toggled(bool show)
|
void OPMapGadgetWidget::onShowCompassAct_toggled(bool show)
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_map->SetShowCompass(show);
|
m_map->SetShowCompass(show);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OPMapGadgetWidget::onShowDiagnostics_toggled(bool show)
|
void OPMapGadgetWidget::onShowDiagnostics_toggled(bool show)
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_map->SetShowDiagnostics(show);
|
m_map->SetShowDiagnostics(show);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OPMapGadgetWidget::onShowHomeAct_toggled(bool show)
|
void OPMapGadgetWidget::onShowHomeAct_toggled(bool show)
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_map->Home->setVisible(show);
|
m_map->Home->setVisible(show);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OPMapGadgetWidget::onShowUAVAct_toggled(bool show)
|
void OPMapGadgetWidget::onShowUAVAct_toggled(bool show)
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_map->UAV->setVisible(show);
|
m_map->UAV->setVisible(show);
|
||||||
m_map->GPS->setVisible(show);
|
m_map->GPS->setVisible(show);
|
||||||
@ -1662,8 +1736,8 @@ void OPMapGadgetWidget::onShowUAVAct_toggled(bool show)
|
|||||||
|
|
||||||
void OPMapGadgetWidget::onShowTrailAct_toggled(bool show)
|
void OPMapGadgetWidget::onShowTrailAct_toggled(bool show)
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_map->UAV->SetShowTrail(show);
|
m_map->UAV->SetShowTrail(show);
|
||||||
m_map->GPS->SetShowTrail(show);
|
m_map->GPS->SetShowTrail(show);
|
||||||
@ -1671,8 +1745,8 @@ void OPMapGadgetWidget::onShowTrailAct_toggled(bool show)
|
|||||||
|
|
||||||
void OPMapGadgetWidget::onShowTrailLineAct_toggled(bool show)
|
void OPMapGadgetWidget::onShowTrailLineAct_toggled(bool show)
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_map->UAV->SetShowTrailLine(show);
|
m_map->UAV->SetShowTrailLine(show);
|
||||||
m_map->GPS->SetShowTrailLine(show);
|
m_map->GPS->SetShowTrailLine(show);
|
||||||
@ -1700,42 +1774,50 @@ void OPMapGadgetWidget::onGoZoomOutAct_triggered()
|
|||||||
|
|
||||||
void OPMapGadgetWidget::onZoomActGroup_triggered(QAction *action)
|
void OPMapGadgetWidget::onZoomActGroup_triggered(QAction *action)
|
||||||
{
|
{
|
||||||
if (!m_widget || !action)
|
if (!m_widget || !m_map || !action)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
setZoom(action->data().toInt());
|
setZoom(action->data().toInt());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OPMapGadgetWidget::onMaxUpdateRateActGroup_triggered(QAction *action)
|
||||||
|
{
|
||||||
|
if (!m_widget || !m_map || !action)
|
||||||
|
return;
|
||||||
|
|
||||||
|
setMaxUpdateRate(action->data().toInt());
|
||||||
|
}
|
||||||
|
|
||||||
void OPMapGadgetWidget::onGoMouseClickAct_triggered()
|
void OPMapGadgetWidget::onGoMouseClickAct_triggered()
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_map->SetCurrentPosition(m_map->currentMousePosition()); // center the map onto the mouse position
|
m_map->SetCurrentPosition(m_map->currentMousePosition()); // center the map onto the mouse position
|
||||||
}
|
}
|
||||||
|
|
||||||
void OPMapGadgetWidget::onSetHomeAct_triggered()
|
void OPMapGadgetWidget::onSetHomeAct_triggered()
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
setHome(context_menu_lat_lon);
|
setHome(m_context_menu_lat_lon);
|
||||||
|
|
||||||
setHomeLocationObject(); // update the HomeLocation UAVObject
|
setHomeLocationObject(); // update the HomeLocation UAVObject
|
||||||
}
|
}
|
||||||
|
|
||||||
void OPMapGadgetWidget::onGoHomeAct_triggered()
|
void OPMapGadgetWidget::onGoHomeAct_triggered()
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
goHome();
|
goHome();
|
||||||
}
|
}
|
||||||
|
|
||||||
void OPMapGadgetWidget::onGoUAVAct_triggered()
|
void OPMapGadgetWidget::onGoUAVAct_triggered()
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
double latitude;
|
double latitude;
|
||||||
double longitude;
|
double longitude;
|
||||||
@ -1750,8 +1832,8 @@ void OPMapGadgetWidget::onGoUAVAct_triggered()
|
|||||||
|
|
||||||
void OPMapGadgetWidget::onFollowUAVpositionAct_toggled(bool checked)
|
void OPMapGadgetWidget::onFollowUAVpositionAct_toggled(bool checked)
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (m_widget->toolButtonMapUAV->isChecked() != checked)
|
if (m_widget->toolButtonMapUAV->isChecked() != checked)
|
||||||
m_widget->toolButtonMapUAV->setChecked(checked);
|
m_widget->toolButtonMapUAV->setChecked(checked);
|
||||||
@ -1761,8 +1843,8 @@ void OPMapGadgetWidget::onFollowUAVpositionAct_toggled(bool checked)
|
|||||||
|
|
||||||
void OPMapGadgetWidget::onFollowUAVheadingAct_toggled(bool checked)
|
void OPMapGadgetWidget::onFollowUAVheadingAct_toggled(bool checked)
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (m_widget->toolButtonMapUAVheading->isChecked() != checked)
|
if (m_widget->toolButtonMapUAVheading->isChecked() != checked)
|
||||||
m_widget->toolButtonMapUAVheading->setChecked(checked);
|
m_widget->toolButtonMapUAVheading->setChecked(checked);
|
||||||
@ -1772,8 +1854,8 @@ void OPMapGadgetWidget::onFollowUAVheadingAct_toggled(bool checked)
|
|||||||
|
|
||||||
void OPMapGadgetWidget::onUAVTrailTypeActGroup_triggered(QAction *action)
|
void OPMapGadgetWidget::onUAVTrailTypeActGroup_triggered(QAction *action)
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map || !action)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int trail_type_idx = action->data().toInt();
|
int trail_type_idx = action->data().toInt();
|
||||||
|
|
||||||
@ -1785,8 +1867,8 @@ void OPMapGadgetWidget::onUAVTrailTypeActGroup_triggered(QAction *action)
|
|||||||
|
|
||||||
void OPMapGadgetWidget::onClearUAVtrailAct_triggered()
|
void OPMapGadgetWidget::onClearUAVtrailAct_triggered()
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_map->UAV->DeleteTrail();
|
m_map->UAV->DeleteTrail();
|
||||||
m_map->GPS->DeleteTrail();
|
m_map->GPS->DeleteTrail();
|
||||||
@ -1794,8 +1876,8 @@ void OPMapGadgetWidget::onClearUAVtrailAct_triggered()
|
|||||||
|
|
||||||
void OPMapGadgetWidget::onUAVTrailTimeActGroup_triggered(QAction *action)
|
void OPMapGadgetWidget::onUAVTrailTimeActGroup_triggered(QAction *action)
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map || !action)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int trail_time = (double)action->data().toInt();
|
int trail_time = (double)action->data().toInt();
|
||||||
|
|
||||||
@ -1804,8 +1886,8 @@ void OPMapGadgetWidget::onUAVTrailTimeActGroup_triggered(QAction *action)
|
|||||||
|
|
||||||
void OPMapGadgetWidget::onUAVTrailDistanceActGroup_triggered(QAction *action)
|
void OPMapGadgetWidget::onUAVTrailDistanceActGroup_triggered(QAction *action)
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map || !action)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int trail_distance = action->data().toInt();
|
int trail_distance = action->data().toInt();
|
||||||
|
|
||||||
@ -1818,8 +1900,8 @@ void OPMapGadgetWidget::onUAVTrailDistanceActGroup_triggered(QAction *action)
|
|||||||
/*
|
/*
|
||||||
void OPMapGadgetWidget::onAddWayPointAct_triggered()
|
void OPMapGadgetWidget::onAddWayPointAct_triggered()
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (m_map_mode != Normal_MapMode)
|
if (m_map_mode != Normal_MapMode)
|
||||||
return;
|
return;
|
||||||
@ -1866,8 +1948,8 @@ void OPMapGadgetWidget::onAddWayPointAct_triggered()
|
|||||||
/*
|
/*
|
||||||
void OPMapGadgetWidget::onEditWayPointAct_triggered()
|
void OPMapGadgetWidget::onEditWayPointAct_triggered()
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (m_map_mode != Normal_MapMode)
|
if (m_map_mode != Normal_MapMode)
|
||||||
return;
|
return;
|
||||||
@ -2010,7 +2092,7 @@ void OPMapGadgetWidget::onShowSafeAreaAct_toggled(bool show)
|
|||||||
|
|
||||||
void OPMapGadgetWidget::onSafeAreaActGroup_triggered(QAction *action)
|
void OPMapGadgetWidget::onSafeAreaActGroup_triggered(QAction *action)
|
||||||
{
|
{
|
||||||
if (!m_widget || !m_map)
|
if (!m_widget || !m_map || !action)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int radius = action->data().toInt();
|
int radius = action->data().toInt();
|
||||||
@ -2033,10 +2115,10 @@ void OPMapGadgetWidget::homeMagicWaypoint()
|
|||||||
if (m_map_mode != MagicWaypoint_MapMode)
|
if (m_map_mode != MagicWaypoint_MapMode)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
magic_waypoint.coord = home_position.coord;
|
m_magic_waypoint.coord = m_home_position.coord;
|
||||||
|
|
||||||
if (magic_waypoint.map_wp_item)
|
if (m_magic_waypoint.map_wp_item)
|
||||||
magic_waypoint.map_wp_item->SetCoord(magic_waypoint.coord);
|
m_magic_waypoint.map_wp_item->SetCoord(m_magic_waypoint.coord);
|
||||||
}
|
}
|
||||||
|
|
||||||
// *************************************************************************************
|
// *************************************************************************************
|
||||||
@ -2134,8 +2216,8 @@ void OPMapGadgetWidget::keepMagicWaypointWithInSafeArea()
|
|||||||
{
|
{
|
||||||
|
|
||||||
// calcute the bearing and distance from the home position to the magic waypoint
|
// calcute the bearing and distance from the home position to the magic waypoint
|
||||||
double dist = distance(home_position.coord, magic_waypoint.coord);
|
double dist = distance(m_home_position.coord, m_magic_waypoint.coord);
|
||||||
double bear = bearing(home_position.coord, magic_waypoint.coord);
|
double bear = bearing(m_home_position.coord, m_magic_waypoint.coord);
|
||||||
|
|
||||||
// get the maximum safe distance - in kilometers
|
// get the maximum safe distance - in kilometers
|
||||||
double boundry_dist = (double)m_map->Home->SafeArea() / 1000;
|
double boundry_dist = (double)m_map->Home->SafeArea() / 1000;
|
||||||
@ -2147,12 +2229,12 @@ void OPMapGadgetWidget::keepMagicWaypointWithInSafeArea()
|
|||||||
|
|
||||||
// move the magic waypoint
|
// move the magic waypoint
|
||||||
|
|
||||||
magic_waypoint.coord = destPoint(home_position.coord, bear, dist);
|
m_magic_waypoint.coord = destPoint(m_home_position.coord, bear, dist);
|
||||||
|
|
||||||
if (m_map_mode == MagicWaypoint_MapMode)
|
if (m_map_mode == MagicWaypoint_MapMode)
|
||||||
{ // move the on-screen waypoint
|
{ // move the on-screen waypoint
|
||||||
if (magic_waypoint.map_wp_item)
|
if (m_magic_waypoint.map_wp_item)
|
||||||
magic_waypoint.map_wp_item->SetCoord(magic_waypoint.coord);
|
m_magic_waypoint.map_wp_item->SetCoord(m_magic_waypoint.coord);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2289,7 +2371,21 @@ bool OPMapGadgetWidget::getUAVPosition(double &latitude, double &longitude, doub
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// *************************************************************************************
|
double OPMapGadgetWidget::getUAV_Yaw()
|
||||||
|
{
|
||||||
|
if (!obm)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
UAVObject *obj = dynamic_cast<UAVDataObject*>(obm->getObject(QString("AttitudeActual")));
|
||||||
|
double yaw = obj->getField(QString("Yaw"))->getDouble();
|
||||||
|
|
||||||
|
if (yaw != yaw) yaw = 0; // nan detection
|
||||||
|
|
||||||
|
while (yaw < 0) yaw += 360;
|
||||||
|
while (yaw >= 360) yaw -= 360;
|
||||||
|
|
||||||
|
return yaw;
|
||||||
|
}
|
||||||
|
|
||||||
bool OPMapGadgetWidget::getGPSPosition(double &latitude, double &longitude, double &altitude)
|
bool OPMapGadgetWidget::getGPSPosition(double &latitude, double &longitude, double &altitude)
|
||||||
{
|
{
|
||||||
@ -2308,22 +2404,6 @@ bool OPMapGadgetWidget::getGPSPosition(double &latitude, double &longitude, doub
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
double OPMapGadgetWidget::getUAV_Yaw()
|
|
||||||
{
|
|
||||||
if (!obm)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
UAVObject *obj = dynamic_cast<UAVDataObject*>(obm->getObject(QString("AttitudeActual")));
|
|
||||||
double yaw = obj->getField(QString("Yaw"))->getDouble();
|
|
||||||
|
|
||||||
if (yaw != yaw) yaw = 0; // nan detection
|
|
||||||
|
|
||||||
while (yaw < 0) yaw += 360;
|
|
||||||
while (yaw >= 360) yaw -= 360;
|
|
||||||
|
|
||||||
return yaw;
|
|
||||||
}
|
|
||||||
|
|
||||||
// *************************************************************************************
|
// *************************************************************************************
|
||||||
|
|
||||||
void OPMapGadgetWidget::setMapFollowingMode()
|
void OPMapGadgetWidget::setMapFollowingMode()
|
||||||
@ -2359,7 +2439,7 @@ bool OPMapGadgetWidget::setHomeLocationObject()
|
|||||||
if (!obum)
|
if (!obum)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
double LLA[3] = {home_position.coord.Lat(), home_position.coord.Lng(), home_position.altitude};
|
double LLA[3] = {m_home_position.coord.Lat(), m_home_position.coord.Lng(), m_home_position.altitude};
|
||||||
return (obum->setHomeLocation(LLA, true) >= 0);
|
return (obum->setHomeLocation(LLA, true) >= 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,7 +115,8 @@ public:
|
|||||||
void setUseMemoryCache(bool useMemoryCache);
|
void setUseMemoryCache(bool useMemoryCache);
|
||||||
void setCacheLocation(QString cacheLocation);
|
void setCacheLocation(QString cacheLocation);
|
||||||
void setMapMode(opMapModeType mode);
|
void setMapMode(opMapModeType mode);
|
||||||
void SetUavPic(QString UAVPic);
|
void SetUavPic(QString UAVPic);
|
||||||
|
void setMaxUpdateRate(int update_rate);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void homePositionUpdated(UAVObject *);
|
void homePositionUpdated(UAVObject *);
|
||||||
@ -221,25 +222,31 @@ private slots:
|
|||||||
void onClearUAVtrailAct_triggered();
|
void onClearUAVtrailAct_triggered();
|
||||||
void onUAVTrailTimeActGroup_triggered(QAction *action);
|
void onUAVTrailTimeActGroup_triggered(QAction *action);
|
||||||
void onUAVTrailDistanceActGroup_triggered(QAction *action);
|
void onUAVTrailDistanceActGroup_triggered(QAction *action);
|
||||||
|
void onMaxUpdateRateActGroup_triggered(QAction *action);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int min_zoom;
|
|
||||||
int max_zoom;
|
// *****
|
||||||
|
|
||||||
|
int m_min_zoom;
|
||||||
|
int m_max_zoom;
|
||||||
|
|
||||||
double m_heading; // uav heading
|
double m_heading; // uav heading
|
||||||
|
|
||||||
internals::PointLatLng mouse_lat_lon;
|
internals::PointLatLng m_mouse_lat_lon;
|
||||||
internals::PointLatLng context_menu_lat_lon;
|
internals::PointLatLng m_context_menu_lat_lon;
|
||||||
|
|
||||||
int prev_tile_number;
|
int m_prev_tile_number;
|
||||||
|
|
||||||
opMapModeType m_map_mode;
|
opMapModeType m_map_mode;
|
||||||
|
|
||||||
t_home home_position;
|
int m_maxUpdateRate;
|
||||||
|
|
||||||
t_waypoint magic_waypoint;
|
t_home m_home_position;
|
||||||
|
|
||||||
QStringList findPlaceWordList;
|
t_waypoint m_magic_waypoint;
|
||||||
|
|
||||||
|
QStringList findPlaceWordList;
|
||||||
QCompleter *findPlaceCompleter;
|
QCompleter *findPlaceCompleter;
|
||||||
|
|
||||||
QTimer *m_updateTimer;
|
QTimer *m_updateTimer;
|
||||||
@ -266,14 +273,16 @@ private:
|
|||||||
|
|
||||||
QMutex m_map_mutex;
|
QMutex m_map_mutex;
|
||||||
|
|
||||||
bool telemetry_connected;
|
bool m_telemetry_connected;
|
||||||
|
|
||||||
|
// *****
|
||||||
|
|
||||||
void createActions();
|
void createActions();
|
||||||
|
|
||||||
QAction *closeAct1;
|
QAction *closeAct1;
|
||||||
QAction *closeAct2;
|
QAction *closeAct2;
|
||||||
QAction *reloadAct;
|
QAction *reloadAct;
|
||||||
QAction *copyMouseLatLonToClipAct;
|
QAction *copyMouseLatLonToClipAct;
|
||||||
QAction *copyMouseLatToClipAct;
|
QAction *copyMouseLatToClipAct;
|
||||||
QAction *copyMouseLonToClipAct;
|
QAction *copyMouseLonToClipAct;
|
||||||
QAction *findPlaceAct;
|
QAction *findPlaceAct;
|
||||||
@ -319,7 +328,12 @@ private:
|
|||||||
QActionGroup *zoomActGroup;
|
QActionGroup *zoomActGroup;
|
||||||
QList<QAction *> zoomAct;
|
QList<QAction *> zoomAct;
|
||||||
|
|
||||||
void homeMagicWaypoint();
|
QActionGroup *maxUpdateRateActGroup;
|
||||||
|
QList<QAction *> maxUpdateRateAct;
|
||||||
|
|
||||||
|
// *****
|
||||||
|
|
||||||
|
void homeMagicWaypoint();
|
||||||
|
|
||||||
void moveToMagicWaypointPosition();
|
void moveToMagicWaypointPosition();
|
||||||
|
|
||||||
|
@ -151,6 +151,16 @@ void SystemHealthGadgetWidget::setSystemFile(QString dfn)
|
|||||||
QGraphicsScene *l_scene = scene();
|
QGraphicsScene *l_scene = scene();
|
||||||
l_scene->setSceneRect(background->boundingRect());
|
l_scene->setSceneRect(background->boundingRect());
|
||||||
fitInView(background, Qt::KeepAspectRatio );
|
fitInView(background, Qt::KeepAspectRatio );
|
||||||
|
|
||||||
|
// Check whether the autopilot is connected already, by the way:
|
||||||
|
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
||||||
|
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
|
||||||
|
TelemetryManager* telMngr = pm->getObject<TelemetryManager>();
|
||||||
|
if (telMngr->isConnected()) {
|
||||||
|
onAutopilotConnect();
|
||||||
|
SystemAlarms* obj = dynamic_cast<SystemAlarms*>(objManager->getObject(QString("SystemAlarms")));
|
||||||
|
updateAlarms(obj);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -143,6 +143,36 @@ int UAVObjectUtilManager::getBoardModel()
|
|||||||
return boardType;
|
return boardType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the UAV Board CPU Serial Number, for anyone interested. Return format is a byte array
|
||||||
|
*/
|
||||||
|
QByteArray UAVObjectUtilManager::getBoardCPUSerial()
|
||||||
|
{
|
||||||
|
QByteArray cpuSerial;
|
||||||
|
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
||||||
|
if (!pm)
|
||||||
|
return 0;
|
||||||
|
UAVObjectManager *om = pm->getObject<UAVObjectManager>();
|
||||||
|
if (!om)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
UAVDataObject *obj = dynamic_cast<UAVDataObject *>(om->getObject(QString("FirmwareIAPObj")));
|
||||||
|
// The code below will ask for the object update and wait for the updated to be received,
|
||||||
|
// or the timeout of the timer, set to 1 second.
|
||||||
|
QEventLoop loop;
|
||||||
|
connect(obj, SIGNAL(objectUpdated(UAVObject*)), &loop, SLOT(quit()));
|
||||||
|
QTimer::singleShot(1000, &loop, SLOT(quit())); // Create a timeout
|
||||||
|
obj->requestUpdate();
|
||||||
|
loop.exec();
|
||||||
|
|
||||||
|
UAVObjectField* cpuField = obj->getField("CPUSerial");
|
||||||
|
for (int i = 0; i < cpuField->getNumElements(); ++i) {
|
||||||
|
cpuSerial.append(cpuField->getValue(i).toUInt());
|
||||||
|
}
|
||||||
|
return cpuSerial;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ******************************
|
// ******************************
|
||||||
// HomeLocation
|
// HomeLocation
|
||||||
|
@ -61,6 +61,7 @@ public:
|
|||||||
int getTelemetrySerialPortSpeeds(QComboBox *comboBox);
|
int getTelemetrySerialPortSpeeds(QComboBox *comboBox);
|
||||||
|
|
||||||
int getBoardModel();
|
int getBoardModel();
|
||||||
|
QByteArray getBoardCPUSerial();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QMutex *mutex;
|
QMutex *mutex;
|
||||||
|
@ -9,5 +9,6 @@
|
|||||||
<dependency name="UAVObjects" version="1.0.0"/>
|
<dependency name="UAVObjects" version="1.0.0"/>
|
||||||
<dependency name="UAVTalk" version="1.0.0"/>
|
<dependency name="UAVTalk" version="1.0.0"/>
|
||||||
<dependency name="RAWHid" version="1.0.0"/>
|
<dependency name="RAWHid" version="1.0.0"/>
|
||||||
|
<dependency name="UAVObjectUtil" version="1.0.0"/>
|
||||||
</dependencyList>
|
</dependencyList>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
@ -0,0 +1,443 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In -->
|
||||||
|
<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"
|
||||||
|
sodipodi:docbase="/home/jimmac/gfx/ximian/tango-icon-theme/scalable/mimetypes"
|
||||||
|
sodipodi:docname="application-certificate.svg"
|
||||||
|
inkscape:version="0.46"
|
||||||
|
sodipodi:version="0.32"
|
||||||
|
id="svg5105"
|
||||||
|
xml:space="preserve"
|
||||||
|
viewBox="0 0 48 48"
|
||||||
|
height="48.000000px"
|
||||||
|
width="48.000000px"
|
||||||
|
inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
|
||||||
|
id="metadata5189">
|
||||||
|
<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>Certificate</dc:title><dc:creator><cc:Agent><dc:title>Jakub Steiner</dc:title></cc:Agent></dc:creator><dc:subject><rdf:Bag><rdf:li>certificate</rdf:li></rdf:Bag></dc:subject><cc:license
|
||||||
|
rdf:resource="http://creativecommons.org/licenses/publicdomain/" /></cc:Work>
|
||||||
|
|
||||||
|
|
||||||
|
<cc:License
|
||||||
|
rdf:about="http://creativecommons.org/licenses/publicdomain/"><cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Reproduction" /><cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Distribution" /><cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /></cc:License></rdf:RDF>
|
||||||
|
|
||||||
|
|
||||||
|
</metadata>
|
||||||
|
|
||||||
|
|
||||||
|
<defs
|
||||||
|
id="defs5187"><inkscape:perspective
|
||||||
|
sodipodi:type="inkscape:persp3d"
|
||||||
|
inkscape:vp_x="0 : 24 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_z="48 : 24 : 1"
|
||||||
|
inkscape:persp3d-origin="24 : 16 : 1"
|
||||||
|
id="perspective54" /><linearGradient
|
||||||
|
id="linearGradient6684">
|
||||||
|
<stop
|
||||||
|
id="stop6686"
|
||||||
|
offset="0.0000000"
|
||||||
|
style="stop-color:#d5dbff;stop-opacity:1.0000000;" />
|
||||||
|
<stop
|
||||||
|
id="stop6688"
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#6579ff;stop-opacity:0;" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient6665">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#000000;stop-opacity:1.0000000;"
|
||||||
|
offset="0.0000000"
|
||||||
|
id="stop6667" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#000000;stop-opacity:0.0000000;"
|
||||||
|
offset="1.0000000"
|
||||||
|
id="stop6669" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient6625">
|
||||||
|
<stop
|
||||||
|
id="stop6627"
|
||||||
|
offset="0.0000000"
|
||||||
|
style="stop-color:#1d2349;stop-opacity:1.0000000;" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#4c5279;stop-opacity:1.0000000;"
|
||||||
|
offset="0.35315102"
|
||||||
|
id="stop6637" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#b3bdff;stop-opacity:1.0000000;"
|
||||||
|
offset="0.46551725"
|
||||||
|
id="stop6633" />
|
||||||
|
<stop
|
||||||
|
id="stop6635"
|
||||||
|
offset="0.64982164"
|
||||||
|
style="stop-color:#727cbe;stop-opacity:1.0000000;" />
|
||||||
|
<stop
|
||||||
|
id="stop6629"
|
||||||
|
offset="1.0000000"
|
||||||
|
style="stop-color:#323c7e;stop-opacity:1.0000000;" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient6617">
|
||||||
|
<stop
|
||||||
|
id="stop6619"
|
||||||
|
offset="0.0000000"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:0.24742268;" />
|
||||||
|
<stop
|
||||||
|
id="stop6621"
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:0;" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient6604">
|
||||||
|
<stop
|
||||||
|
id="stop6606"
|
||||||
|
offset="0.0000000"
|
||||||
|
style="stop-color:#ffa196;stop-opacity:1.0000000;" />
|
||||||
|
<stop
|
||||||
|
id="stop6608"
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#ff1f06;stop-opacity:0;" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
r="13.2807"
|
||||||
|
fy="20.9712"
|
||||||
|
fx="28.7891"
|
||||||
|
cy="20.9712"
|
||||||
|
cx="28.7891"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="radialGradient5199"
|
||||||
|
xlink:href="#aigrd1"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
|
||||||
|
|
||||||
|
<radialGradient
|
||||||
|
r="14.6944"
|
||||||
|
fy="13.5444"
|
||||||
|
fx="19.292"
|
||||||
|
cy="13.5444"
|
||||||
|
cx="19.292"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="radialGradient5201"
|
||||||
|
xlink:href="#aigrd2"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
|
||||||
|
|
||||||
|
<linearGradient
|
||||||
|
y2="16.7231"
|
||||||
|
x2="23.412"
|
||||||
|
y1="11.5991"
|
||||||
|
x1="18.229"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="linearGradient5203"
|
||||||
|
xlink:href="#aigrd3"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<radialGradient
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
fy="20.971201"
|
||||||
|
fx="28.789101"
|
||||||
|
r="13.280700"
|
||||||
|
cy="20.971201"
|
||||||
|
cx="28.789101"
|
||||||
|
id="aigrd1">
|
||||||
|
<stop
|
||||||
|
id="stop5115"
|
||||||
|
style="stop-color:#E41E08"
|
||||||
|
offset="0" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<stop
|
||||||
|
id="stop5117"
|
||||||
|
style="stop-color:#901505"
|
||||||
|
offset="1" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</radialGradient>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<radialGradient
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
fy="13.544400"
|
||||||
|
fx="19.292000"
|
||||||
|
r="14.694400"
|
||||||
|
cy="13.544400"
|
||||||
|
cx="19.292000"
|
||||||
|
id="aigrd2">
|
||||||
|
<stop
|
||||||
|
id="stop5122"
|
||||||
|
style="stop-color:#E41E08"
|
||||||
|
offset="0" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<stop
|
||||||
|
id="stop5124"
|
||||||
|
style="stop-color:#901505"
|
||||||
|
offset="1" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</radialGradient>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<linearGradient
|
||||||
|
y2="16.723101"
|
||||||
|
x2="23.412001"
|
||||||
|
y1="11.599100"
|
||||||
|
x1="18.229000"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="aigrd3">
|
||||||
|
<stop
|
||||||
|
id="stop5137"
|
||||||
|
style="stop-color:#FFFFFF"
|
||||||
|
offset="0" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<stop
|
||||||
|
id="stop5139"
|
||||||
|
style="stop-color:#901505"
|
||||||
|
offset="1" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</linearGradient>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<linearGradient
|
||||||
|
gradientTransform="matrix(1.135551,0.000000,0.000000,1.135551,-3.259995,-3.266773)"
|
||||||
|
y2="16.7231"
|
||||||
|
x2="23.412"
|
||||||
|
y1="11.5991"
|
||||||
|
x1="18.229"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="linearGradient5274"
|
||||||
|
xlink:href="#aigrd3"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
|
||||||
|
|
||||||
|
<radialGradient
|
||||||
|
gradientTransform="matrix(1.135551,0.000000,0.000000,1.135551,-4.540325,-2.077433)"
|
||||||
|
r="14.6944"
|
||||||
|
fy="13.5444"
|
||||||
|
fx="19.292"
|
||||||
|
cy="13.5444"
|
||||||
|
cx="19.292"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="radialGradient5281"
|
||||||
|
xlink:href="#aigrd2"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
|
||||||
|
|
||||||
|
<radialGradient
|
||||||
|
gradientTransform="matrix(1.310386,0.000000,0.000000,1.310386,-8.642682,-4.375977)"
|
||||||
|
r="13.2807"
|
||||||
|
fy="20.9712"
|
||||||
|
fx="28.7891"
|
||||||
|
cy="20.9712"
|
||||||
|
cx="28.7891"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="radialGradient5284"
|
||||||
|
xlink:href="#aigrd1"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<linearGradient
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
y2="49.895073"
|
||||||
|
x2="43.140980"
|
||||||
|
y1="5.9244628"
|
||||||
|
x1="15.338736"
|
||||||
|
gradientTransform="matrix(0.975728,0.000000,0.000000,0.931033,-0.132002,1.978392)"
|
||||||
|
id="linearGradient6610"
|
||||||
|
xlink:href="#linearGradient6604"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
<linearGradient
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
y2="22.783224"
|
||||||
|
x2="29.957399"
|
||||||
|
y1="9.4436626"
|
||||||
|
x1="18.570419"
|
||||||
|
gradientTransform="matrix(1.028670,0.000000,0.000000,0.972129,-1.280330,1.189340)"
|
||||||
|
id="linearGradient6623"
|
||||||
|
xlink:href="#linearGradient6617"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
<linearGradient
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
y2="35.017860"
|
||||||
|
x2="38.250904"
|
||||||
|
y1="22.886259"
|
||||||
|
x1="38.506161"
|
||||||
|
gradientTransform="matrix(0.843938,0.000000,0.000000,1.184922,-1.280330,1.689340)"
|
||||||
|
id="linearGradient6631"
|
||||||
|
xlink:href="#linearGradient6625"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
<radialGradient
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
r="33.156136"
|
||||||
|
fy="19.818913"
|
||||||
|
fx="24.452202"
|
||||||
|
cy="19.818913"
|
||||||
|
cx="24.452202"
|
||||||
|
gradientTransform="matrix(1.024478,0.000000,0.000000,0.976107,0.939339,-0.530329)"
|
||||||
|
id="radialGradient6663"
|
||||||
|
xlink:href="#linearGradient6665"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
<radialGradient
|
||||||
|
r="33.156136"
|
||||||
|
fy="19.818913"
|
||||||
|
fx="24.452202"
|
||||||
|
cy="19.818913"
|
||||||
|
cx="24.452202"
|
||||||
|
gradientTransform="matrix(1.024478,0.000000,0.000000,0.976107,1.646447,-0.353552)"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="radialGradient6675"
|
||||||
|
xlink:href="#linearGradient6665"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
<radialGradient
|
||||||
|
r="14.6944"
|
||||||
|
fy="20.479359"
|
||||||
|
fx="26.887432"
|
||||||
|
cy="20.479359"
|
||||||
|
cx="26.887432"
|
||||||
|
gradientTransform="matrix(1.135551,0.000000,0.000000,1.135551,-4.540325,-2.077433)"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="radialGradient6678"
|
||||||
|
xlink:href="#aigrd2"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
<linearGradient
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
y2="27.403761"
|
||||||
|
x2="36.499001"
|
||||||
|
y1="35.458244"
|
||||||
|
x1="37.502811"
|
||||||
|
gradientTransform="scale(0.843938,1.184922)"
|
||||||
|
id="linearGradient6690"
|
||||||
|
xlink:href="#linearGradient6684"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
</defs>
|
||||||
|
|
||||||
|
|
||||||
|
<sodipodi:namedview
|
||||||
|
inkscape:current-layer="svg5105"
|
||||||
|
inkscape:window-y="30"
|
||||||
|
inkscape:window-x="203"
|
||||||
|
inkscape:cy="20.392013"
|
||||||
|
inkscape:cx="20.303269"
|
||||||
|
inkscape:zoom="5.6568542"
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="0.16470588"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="821"
|
||||||
|
inkscape:window-height="818"
|
||||||
|
inkscape:showpageshadow="false"
|
||||||
|
showgrid="false" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<path
|
||||||
|
style="opacity:0.48044690;color:#000000;fill:url(#radialGradient6675);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
|
||||||
|
d="M 25.389110,19.305038 C 25.389110,19.305038 19.484245,27.481005 19.484245,31.228324 C 19.484245,34.975642 26.297551,32.931650 29.022873,35.656973 C 31.748195,38.382295 22.663787,45.422711 22.663787,45.422711 L 31.748195,42.924499 L 35.381959,46.785372 C 35.381959,42.129613 40.719048,38.382295 37.993726,35.543418 C 35.154848,32.704540 27.092436,33.045205 26.638216,29.297887 C 26.183995,25.550569 25.502665,19.418593 25.502665,19.418593 L 25.389110,19.305038 z "
|
||||||
|
id="path6671" />
|
||||||
|
<path
|
||||||
|
style="opacity:0.48044690;fill:url(#radialGradient6663);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
|
||||||
|
d="M 36.916160,9.3946518 C 38.237688,12.452028 40.559293,12.296470 40.616709,16.377167 C 40.649454,18.652929 42.449165,19.847910 42.449165,22.172684 C 42.449165,24.497457 38.434150,25.646156 37.066636,27.013668 C 35.699121,28.381184 37.174521,31.888095 33.464606,32.918627 C 29.789944,33.939367 27.994548,32.508375 25.669774,32.508375 C 23.344998,32.508375 17.781956,36.991063 15.730683,34.939790 C 13.679411,32.888519 13.635647,28.405831 11.857879,26.628063 C 9.9433579,24.713542 6.9184435,22.038663 6.9184435,18.619877 C 6.9184435,15.201092 8.8926489,13.396291 11.721128,10.217892 C 14.639403,6.9385873 14.729659,2.0128046 18.148445,2.0128046 C 21.567230,2.0128046 22.877627,2.9506145 25.787409,2.8770766 C 30.425746,2.7598534 30.994149,0.55375463 34.405481,2.2835766 C 37.413183,3.8087260 35.881638,7.0012699 36.916160,9.3946518 z "
|
||||||
|
id="path6639"
|
||||||
|
sodipodi:nodetypes="csssssssssssss" />
|
||||||
|
<path
|
||||||
|
id="path5112"
|
||||||
|
d="M 23.621340,18.067599 C 23.621340,18.067599 17.716475,26.243566 17.716475,29.990885 C 17.716475,33.738203 24.529781,31.694211 27.255103,34.419534 C 29.980425,37.144856 20.896017,44.185272 20.896017,44.185272 L 29.980425,41.687060 L 33.614189,45.547933 C 33.614189,40.892174 38.951278,37.144856 36.225956,34.305979 C 33.387078,31.467101 25.324666,31.807766 24.870446,28.060448 C 24.416225,24.313130 23.734895,18.181154 23.734895,18.181154 L 23.621340,18.067599 z "
|
||||||
|
style="stroke-opacity:1.0000000;stroke-miterlimit:6.5999999;stroke-width:1.0000000;stroke:#1f254f;fill-rule:nonzero;fill-opacity:1.0000000;fill:url(#linearGradient6631)" />
|
||||||
|
|
||||||
|
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cscccsss"
|
||||||
|
style="fill:none;fill-opacity:1.0000000;fill-rule:nonzero;stroke:url(#linearGradient6690);stroke-width:0.72112519;stroke-miterlimit:6.5999999;stroke-opacity:1.0000000"
|
||||||
|
d="M 20.803213,31.602421 C 25.355213,32.050805 28.232227,32.837946 28.609835,35.591528 C 28.939949,37.998767 24.377692,42.324487 24.377692,42.324487 L 30.221580,40.699741 L 33.062950,43.660691 C 33.725862,39.949751 37.427758,37.438687 35.741856,35.156087 C 33.627168,32.292939 26.775807,32.912620 26.448257,30.210335 C 26.120707,27.508049 18.114196,31.334950 20.803213,31.602421 z "
|
||||||
|
id="path6680" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="csssssssssssss"
|
||||||
|
id="path5119"
|
||||||
|
d="M 34.935485,9.2468088 C 36.201806,12.176463 38.426426,12.027404 38.481444,15.937630 C 38.512821,18.118322 40.237349,19.263383 40.237349,21.491039 C 40.237349,23.718695 36.390061,24.819407 35.079675,26.129792 C 33.769288,27.440180 35.183053,30.800590 31.628119,31.788071 C 28.106966,32.766170 26.386573,31.394957 24.158916,31.394957 C 21.931258,31.394957 16.600611,35.690381 14.635030,33.724800 C 12.669450,31.759221 12.627514,27.463797 10.924012,25.760295 C 9.0894699,23.925753 6.1909207,21.362617 6.1909207,18.086651 C 6.1909207,14.810685 8.0826538,13.081280 10.792974,10.035658 C 13.589338,6.8933472 13.675824,2.1733389 16.951790,2.1733389 C 20.227756,2.1733389 21.483411,3.0719718 24.271637,3.0015059 C 28.716208,2.8891797 29.260866,0.77524063 32.529689,2.4327994 C 35.411745,3.8942357 33.944180,6.9534113 34.935485,9.2468088 z "
|
||||||
|
style="stroke-opacity:1.0000000;stroke-miterlimit:4.0000000;stroke-linejoin:round;stroke-linecap:round;stroke:#4c0901;fill-rule:nonzero;fill:url(#radialGradient5284)" />
|
||||||
|
|
||||||
|
|
||||||
|
<path
|
||||||
|
id="path5126"
|
||||||
|
d="M 34.976850,17.567599 C 34.976850,23.813130 29.866870,28.923109 23.621340,28.923109 C 17.375809,28.923109 12.265830,23.813130 12.265830,17.567599 C 12.265830,11.322069 17.375809,6.2120891 23.621340,6.2120891 C 29.866870,6.2120891 34.976850,11.322069 34.976850,17.567599 z "
|
||||||
|
style="stroke-miterlimit:4.0000000;stroke:none;fill-rule:nonzero;fill:url(#radialGradient6678)" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:nonzero;stroke:url(#linearGradient6610);stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
|
||||||
|
d="M 33.888971,10.030124 C 35.042232,12.698211 37.068232,12.562460 37.118338,16.123571 C 37.146913,18.109565 38.717470,19.152392 38.717470,21.181157 C 38.717470,23.209922 35.213679,24.212359 34.020288,25.405749 C 32.826895,26.599143 34.114436,29.659526 30.876896,30.558842 C 27.670121,31.449613 26.103329,30.200827 24.074563,30.200827 C 22.045797,30.200827 17.191084,34.112744 15.400995,32.322655 C 13.610908,30.532568 13.572716,26.620651 12.021307,25.069242 C 10.350558,23.398493 7.7107989,21.064201 7.7107989,18.080722 C 7.7107989,15.097243 9.4336334,13.522243 11.901968,10.748543 C 14.448666,7.8867861 14.527430,3.5881928 17.510909,3.5881928 C 20.494388,3.5881928 21.637935,4.4065934 24.177221,4.3424188 C 28.224968,4.2401214 28.720998,2.3149204 31.697971,3.8244879 C 34.322710,5.1554433 32.986173,7.9414875 33.888971,10.030124 z "
|
||||||
|
id="path6600"
|
||||||
|
sodipodi:nodetypes="csssssssssssss" />
|
||||||
|
<path
|
||||||
|
id="path6612"
|
||||||
|
d="M 23.663250,7.0524597 C 17.795434,7.0524597 13.016988,11.794692 13.016988,17.662510 C 13.016988,21.333503 15.000693,24.443138 17.833154,26.353336 C 25.073625,22.456374 23.786958,15.548148 33.440430,13.606789 C 31.841424,9.7576868 28.088842,7.0524597 23.663250,7.0524597 z "
|
||||||
|
style="color:#000000;fill:url(#linearGradient6623);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;opacity:1.0000000" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 15 KiB |
131
ground/openpilotgcs/src/plugins/uploader/runningdevicewidget.cpp
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
*
|
||||||
|
* @file runningdevicewidget.cpp
|
||||||
|
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
|
||||||
|
* @addtogroup GCSPlugins GCS Plugins
|
||||||
|
* @{
|
||||||
|
* @addtogroup Uploader Serial and USB Uploader Plugin
|
||||||
|
* @{
|
||||||
|
* @brief The USB and Serial protocol uploader plugin
|
||||||
|
*****************************************************************************/
|
||||||
|
/*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
#include "runningdevicewidget.h"
|
||||||
|
|
||||||
|
runningDeviceWidget::runningDeviceWidget(QWidget *parent) :
|
||||||
|
QWidget(parent)
|
||||||
|
{
|
||||||
|
myDevice = new Ui_runningDeviceWidget();
|
||||||
|
myDevice->setupUi(this);
|
||||||
|
devicePic = NULL; // Initialize pointer to null
|
||||||
|
|
||||||
|
// Initialization of the Device icon display
|
||||||
|
myDevice->devicePicture->setScene(new QGraphicsScene(this));
|
||||||
|
|
||||||
|
QPixmap pix = QPixmap(QString(":uploader/images/view-refresh.svg"));
|
||||||
|
myDevice->statusIcon->setPixmap(pix);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void runningDeviceWidget::showEvent(QShowEvent *event)
|
||||||
|
{
|
||||||
|
Q_UNUSED(event)
|
||||||
|
// Thit fitInView method should only be called now, once the
|
||||||
|
// widget is shown, otherwise it cannot compute its values and
|
||||||
|
// the result is usually a ahrsbargraph that is way too small.
|
||||||
|
if (devicePic)
|
||||||
|
myDevice->devicePicture->fitInView(devicePic,Qt::KeepAspectRatio);
|
||||||
|
}
|
||||||
|
|
||||||
|
void runningDeviceWidget::resizeEvent(QResizeEvent* event)
|
||||||
|
{
|
||||||
|
Q_UNUSED(event);
|
||||||
|
if (devicePic)
|
||||||
|
myDevice->devicePicture->fitInView(devicePic, Qt::KeepAspectRatio);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fills the various fields for the device
|
||||||
|
*/
|
||||||
|
void runningDeviceWidget::populate()
|
||||||
|
{
|
||||||
|
|
||||||
|
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
||||||
|
UAVObjectUtilManager* utilMngr = pm->getObject<UAVObjectUtilManager>();
|
||||||
|
int id = utilMngr->getBoardModel();
|
||||||
|
|
||||||
|
myDevice->deviceID->setText(QString("Device ID: ") + QString::number(id, 16));
|
||||||
|
|
||||||
|
// DeviceID tells us what sort of HW we have detected:
|
||||||
|
// display a nice icon:
|
||||||
|
myDevice->devicePicture->scene()->clear();
|
||||||
|
if (devicePic)
|
||||||
|
delete devicePic;
|
||||||
|
devicePic = new QGraphicsSvgItem();
|
||||||
|
devicePic->setSharedRenderer(new QSvgRenderer());
|
||||||
|
|
||||||
|
switch (id) {
|
||||||
|
case 0x0101:
|
||||||
|
devicePic->renderer()->load(QString(":/uploader/images/deviceID-0101.svg"));
|
||||||
|
break;
|
||||||
|
case 0x0301:
|
||||||
|
devicePic->renderer()->load(QString(":/uploader/images/deviceID-0301.svg"));
|
||||||
|
break;
|
||||||
|
case 0x0401:
|
||||||
|
devicePic->renderer()->load(QString(":/uploader/images/deviceID-0401.svg"));
|
||||||
|
break;
|
||||||
|
case 0x0201:
|
||||||
|
devicePic->renderer()->load(QString(":/uploader/images/deviceID-0201.svg"));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
devicePic->setElementId("device");
|
||||||
|
myDevice->devicePicture->scene()->addItem(devicePic);
|
||||||
|
myDevice->devicePicture->setSceneRect(devicePic->boundingRect());
|
||||||
|
myDevice->devicePicture->fitInView(devicePic,Qt::KeepAspectRatio);
|
||||||
|
|
||||||
|
QString serial = utilMngr->getBoardCPUSerial().toHex();
|
||||||
|
myDevice->cpuSerial->setText(serial);
|
||||||
|
|
||||||
|
status("Ready...", STATUSICON_INFO);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Updates status message
|
||||||
|
*/
|
||||||
|
void runningDeviceWidget::status(QString str, StatusIcon ic)
|
||||||
|
{
|
||||||
|
QPixmap px;
|
||||||
|
myDevice->statusLabel->setText(str);
|
||||||
|
switch (ic) {
|
||||||
|
case STATUSICON_RUNNING:
|
||||||
|
px.load(QString(":/uploader/images/system-run.svg"));
|
||||||
|
break;
|
||||||
|
case STATUSICON_OK:
|
||||||
|
px.load(QString(":/uploader/images/dialog-apply.svg"));
|
||||||
|
break;
|
||||||
|
case STATUSICON_FAIL:
|
||||||
|
px.load(QString(":/uploader/images/process-stop.svg"));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
px.load(QString(":/uploader/images/gtk-info.svg"));
|
||||||
|
}
|
||||||
|
myDevice->statusIcon->setPixmap(px);
|
||||||
|
}
|
@ -0,0 +1,69 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
*
|
||||||
|
* @file devicewidget.h
|
||||||
|
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
|
||||||
|
* @addtogroup GCSPlugins GCS Plugins
|
||||||
|
* @{
|
||||||
|
* @addtogroup YModemUploader YModem Serial Uploader Plugin
|
||||||
|
* @{
|
||||||
|
* @brief The YModem protocol serial uploader plugin
|
||||||
|
*****************************************************************************/
|
||||||
|
/*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef RUNNINGDEVICEWIDGET_H
|
||||||
|
#define RUNNINGDEVICEWIDGET_H
|
||||||
|
|
||||||
|
#include "ui_runningdevicewidget.h"
|
||||||
|
#include "uploadergadgetwidget.h"
|
||||||
|
#include <QWidget>
|
||||||
|
#include <QErrorMessage>
|
||||||
|
#include <QtSvg/QGraphicsSvgItem>
|
||||||
|
#include <QtSvg/QSvgRenderer>
|
||||||
|
#include "uavtalk/telemetrymanager.h"
|
||||||
|
#include "extensionsystem/pluginmanager.h"
|
||||||
|
#include "uavobjectmanager.h"
|
||||||
|
#include "uavobject.h"
|
||||||
|
#include "uavobjectutilmanager.h"
|
||||||
|
|
||||||
|
class runningDeviceWidget : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
runningDeviceWidget( QWidget *parent = 0);
|
||||||
|
void populate();
|
||||||
|
void freeze();
|
||||||
|
QString setOpenFileName();
|
||||||
|
QString setSaveFileName();
|
||||||
|
typedef enum { STATUSICON_OK, STATUSICON_RUNNING, STATUSICON_FAIL, STATUSICON_INFO} StatusIcon;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui_runningDeviceWidget *myDevice;
|
||||||
|
int deviceID;
|
||||||
|
QGraphicsSvgItem *devicePic;
|
||||||
|
void status(QString str, StatusIcon ic);
|
||||||
|
|
||||||
|
|
||||||
|
signals:
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void showEvent(QShowEvent *event);
|
||||||
|
void resizeEvent(QResizeEvent *event);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // RUNNINGDEVICEWIDGET_H
|
@ -0,0 +1,91 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>runningDeviceWidget</class>
|
||||||
|
<widget class="QWidget" name="runningDeviceWidget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>516</width>
|
||||||
|
<height>253</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Form</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="6" column="0" colspan="2">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="statusIcon">
|
||||||
|
<property name="text">
|
||||||
|
<string>ic</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="statusLabel">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Status</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="0">
|
||||||
|
<widget class="QLabel" name="deviceID">
|
||||||
|
<property name="text">
|
||||||
|
<string>DeviceID</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
|
<widget class="QLabel" name="cpuSerialLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>CPU Serial:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="2" rowspan="2">
|
||||||
|
<widget class="QGraphicsView" name="devicePicture">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>160</width>
|
||||||
|
<height>160</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">background: transparent</string>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::NoFrame</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0" colspan="3">
|
||||||
|
<widget class="QLineEdit" name="description"/>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QLineEdit" name="cpuSerial"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
@ -6,6 +6,7 @@ include(../../plugins/coreplugin/coreplugin.pri)
|
|||||||
include(../../plugins/uavobjects/uavobjects.pri)
|
include(../../plugins/uavobjects/uavobjects.pri)
|
||||||
include(../../plugins/uavtalk/uavtalk.pri)
|
include(../../plugins/uavtalk/uavtalk.pri)
|
||||||
include(../../plugins/rawhid/rawhid.pri)
|
include(../../plugins/rawhid/rawhid.pri)
|
||||||
|
include(../../plugins/uavobjectutil/uavobjectutil.pri)
|
||||||
INCLUDEPATH += ../../libs/qextserialport/src
|
INCLUDEPATH += ../../libs/qextserialport/src
|
||||||
|
|
||||||
HEADERS += uploadergadget.h \
|
HEADERS += uploadergadget.h \
|
||||||
@ -20,7 +21,8 @@ HEADERS += uploadergadget.h \
|
|||||||
SSP/port.h \
|
SSP/port.h \
|
||||||
SSP/qssp.h \
|
SSP/qssp.h \
|
||||||
SSP/qsspt.h \
|
SSP/qsspt.h \
|
||||||
SSP/common.h
|
SSP/common.h \
|
||||||
|
runningdevicewidget.h
|
||||||
SOURCES += uploadergadget.cpp \
|
SOURCES += uploadergadget.cpp \
|
||||||
uploadergadgetconfiguration.cpp \
|
uploadergadgetconfiguration.cpp \
|
||||||
uploadergadgetfactory.cpp \
|
uploadergadgetfactory.cpp \
|
||||||
@ -32,12 +34,14 @@ SOURCES += uploadergadget.cpp \
|
|||||||
devicewidget.cpp \
|
devicewidget.cpp \
|
||||||
SSP/port.cpp \
|
SSP/port.cpp \
|
||||||
SSP/qssp.cpp \
|
SSP/qssp.cpp \
|
||||||
SSP/qsspt.cpp
|
SSP/qsspt.cpp \
|
||||||
|
runningdevicewidget.cpp
|
||||||
OTHER_FILES += Uploader.pluginspec
|
OTHER_FILES += Uploader.pluginspec
|
||||||
|
|
||||||
FORMS += \
|
FORMS += \
|
||||||
uploader.ui \
|
uploader.ui \
|
||||||
devicewidget.ui
|
devicewidget.ui \
|
||||||
|
runningdevicewidget.ui
|
||||||
|
|
||||||
RESOURCES += \
|
RESOURCES += \
|
||||||
uploader.qrc
|
uploader.qrc
|
||||||
|
@ -9,5 +9,6 @@
|
|||||||
<file>images/deviceID-0301.svg</file>
|
<file>images/deviceID-0301.svg</file>
|
||||||
<file>images/deviceID-0201.svg</file>
|
<file>images/deviceID-0201.svg</file>
|
||||||
<file>images/deviceID-0101.svg</file>
|
<file>images/deviceID-0101.svg</file>
|
||||||
|
<file>images/application-certificate.svg</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
@ -115,6 +115,18 @@ void UploaderGadgetWidget::onAutopilotConnect(){
|
|||||||
m_config->bootButton->setEnabled(false);
|
m_config->bootButton->setEnabled(false);
|
||||||
m_config->rescueButton->setEnabled(false);
|
m_config->rescueButton->setEnabled(false);
|
||||||
m_config->telemetryLink->setEnabled(false);
|
m_config->telemetryLink->setEnabled(false);
|
||||||
|
|
||||||
|
// Add a very simple widget with Board model & serial number
|
||||||
|
// Delete all previous tabs:
|
||||||
|
while (m_config->systemElements->count()) {
|
||||||
|
QWidget *qw = m_config->systemElements->widget(0);
|
||||||
|
m_config->systemElements->removeTab(0);
|
||||||
|
delete qw;
|
||||||
|
}
|
||||||
|
runningDeviceWidget* dw = new runningDeviceWidget(this);
|
||||||
|
dw->populate();
|
||||||
|
m_config->systemElements->addTab(dw, QString("Connected Device"));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
#include "ui_uploader.h"
|
#include "ui_uploader.h"
|
||||||
#include "delay.h"
|
#include "delay.h"
|
||||||
#include "devicewidget.h"
|
#include "devicewidget.h"
|
||||||
|
#include "runningdevicewidget.h"
|
||||||
#include "op_dfu.h"
|
#include "op_dfu.h"
|
||||||
#include <qextserialport.h>
|
#include <qextserialport.h>
|
||||||
#include <qextserialenumerator.h>
|
#include <qextserialenumerator.h>
|
||||||
|
@ -10,6 +10,7 @@ OBJDUMP = $(TCHAIN_PREFIX)objdump
|
|||||||
SIZE = $(TCHAIN_PREFIX)size
|
SIZE = $(TCHAIN_PREFIX)size
|
||||||
NM = $(TCHAIN_PREFIX)nm
|
NM = $(TCHAIN_PREFIX)nm
|
||||||
STRIP = $(TCHAIN_PREFIX)strip
|
STRIP = $(TCHAIN_PREFIX)strip
|
||||||
|
INSTALL = install
|
||||||
|
|
||||||
THUMB = -mthumb
|
THUMB = -mthumb
|
||||||
|
|
||||||
@ -43,6 +44,7 @@ MSG_CLEANING := ${quote} CLEAN ${quote}
|
|||||||
MSG_ASMFROMC := ${quote} AS(C) ${quote}
|
MSG_ASMFROMC := ${quote} AS(C) ${quote}
|
||||||
MSG_ASMFROMC_ARM := ${quote} AS(C)-ARM ${quote}
|
MSG_ASMFROMC_ARM := ${quote} AS(C)-ARM ${quote}
|
||||||
MSG_PYMITEINIT := ${quote} PY ${quote}
|
MSG_PYMITEINIT := ${quote} PY ${quote}
|
||||||
|
MSG_INSTALLING := ${quote} INSTALL ${quote}
|
||||||
|
|
||||||
toprel = $(subst $(realpath $(TOP))/,,$(abspath $(1)))
|
toprel = $(subst $(realpath $(TOP))/,,$(abspath $(1)))
|
||||||
|
|
||||||
|
@ -37,17 +37,18 @@ locations (but any other locations are fine as well):
|
|||||||
- QtSDK in C:\Qt\2010.05
|
- QtSDK in C:\Qt\2010.05
|
||||||
- msysGit in %ProgramFiles%\Git
|
- msysGit in %ProgramFiles%\Git
|
||||||
- Unicode NSIS in %ProgramFiles%\NSIS\Unicode
|
- Unicode NSIS in %ProgramFiles%\NSIS\Unicode
|
||||||
|
- OpenOCD in C:\OpenOCD\0.4.0\bin
|
||||||
|
|
||||||
Also it is assumed that you have the C:\Program Files\Git\cmd\ directory in
|
Also it is assumed that you have the C:\Program Files\Git\cmd\ directory in
|
||||||
the PATH. Usually this is the case for msysGit installation if you have chosen
|
the PATH. Usually this is the case for msysGit installation if you have chosen
|
||||||
the 2nd option: put only git and gitk in the PATH (it is recommended option).
|
the 2nd option: put only git and gitk in the PATH (it is recommended option).
|
||||||
|
|
||||||
Now you need to copy two files to your msysGit installation folders.
|
Now you need to copy few files to your msysGit installation folders.
|
||||||
Assuming that you installed the msysGit into C:\Program Files\Git\,
|
Assuming that you installed the msysGit into C:\Program Files\Git\,
|
||||||
you have to copy:
|
you have to copy:
|
||||||
|
|
||||||
make\winx86\make -> C:\Program Files\Git\bin\
|
make\winx86\bin\* -> C:\Program Files\Git\bin\
|
||||||
make\winx86\sh.cmd -> C:\Program Files\Git\cmd\
|
make\winx86\cmd\* -> C:\Program Files\Git\cmd\
|
||||||
|
|
||||||
If you have msysGit installed into another directory, you need to update paths
|
If you have msysGit installed into another directory, you need to update paths
|
||||||
accordingly. Also if you have tools installed into different directories and
|
accordingly. Also if you have tools installed into different directories and
|
||||||
@ -93,7 +94,7 @@ software and flight firmware built in the end.
|
|||||||
4) To build parts of the system you can use, for example, such commands:
|
4) To build parts of the system you can use, for example, such commands:
|
||||||
|
|
||||||
user@pc /d/Work/OpenPilot/git (master)
|
user@pc /d/Work/OpenPilot/git (master)
|
||||||
$ make -j2 USE_BOOTLOADER=YES GCS_BUIL_CONF=release gcs coptercontrol bl_coptercontrol
|
$ make -j2 GCS_BUILD_CONF=release gcs coptercontrol
|
||||||
|
|
||||||
or to completely remove the build directory:
|
or to completely remove the build directory:
|
||||||
|
|
||||||
@ -109,7 +110,7 @@ or to completely remove the build directory:
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# This is the cc_make_release.sh file used to build CC release software
|
# This is the cc_make_release.sh file used to build CC release software
|
||||||
cd D:/Work/OpenPilot/git
|
cd D:/Work/OpenPilot/git
|
||||||
make -j2 USE_BOOTLOADER=YES GCS_BUIL_CONF=release gcs coptercontrol bl_coptercontrol
|
make -j2 GCS_BUILD_CONF=release gcs coptercontrol
|
||||||
echo RC=$?
|
echo RC=$?
|
||||||
|
|
||||||
2) Run it typing:
|
2) Run it typing:
|
||||||
@ -170,7 +171,7 @@ to get rid of git bash welcome message on every script invocation.
|
|||||||
|
|
||||||
Currently there may be some problems running scripts which contain spaces in
|
Currently there may be some problems running scripts which contain spaces in
|
||||||
file names or located in directories which contain spaces in full paths.
|
file names or located in directories which contain spaces in full paths.
|
||||||
It results in in strange "file not found" or other errors.
|
It results in strange "file not found" or other errors.
|
||||||
|
|
||||||
It is recommended to avoid using such names with spaces.
|
It is recommended to avoid using such names with spaces.
|
||||||
|
|
||||||
|
15
make/winx86/bin/install
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# simple install command replacement for Windows
|
||||||
|
#
|
||||||
|
# This file should be put into C:\Program Files\Git\bin\ subdirectory
|
||||||
|
# (or similar, depeding on where the msysGit package was installed)
|
||||||
|
# to provide a make command to unix-like build environment on Windows.
|
||||||
|
#
|
||||||
|
# See also:
|
||||||
|
# README.txt
|
||||||
|
# http://wiki.openpilot.org/display/Doc/GCS+Development+on+Windows
|
||||||
|
# http://wiki.openpilot.org/display/Doc/Firmware+Development+on+Windows
|
||||||
|
#
|
||||||
|
|
||||||
|
cp -f $*
|
@ -1,6 +1,8 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
#
|
#
|
||||||
# This file is to be put into C:\Program Files\Git\bin\ subdirectory
|
# make command replacement for Windows
|
||||||
|
#
|
||||||
|
# This file should be put into C:\Program Files\Git\bin\ subdirectory
|
||||||
# (or similar, depeding on where the msysGit package was installed)
|
# (or similar, depeding on where the msysGit package was installed)
|
||||||
# to provide a make command to unix-like build environment on Windows.
|
# to provide a make command to unix-like build environment on Windows.
|
||||||
#
|
#
|
9
make/winx86/cmd/make.sh
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#
|
||||||
|
# make command replacement to run from command prompt under bash
|
||||||
|
#
|
||||||
|
# This file should be put into C:\Program Files\Git\cmd\ subdirectory
|
||||||
|
# (or similar, depeding on where the msysGit package was installed)
|
||||||
|
# to provide a shell prompt in the unix-like build environment on Windows.
|
||||||
|
#
|
||||||
|
|
||||||
|
exec /bin/make $*
|
@ -1,6 +1,6 @@
|
|||||||
@echo off
|
@echo off
|
||||||
rem
|
rem
|
||||||
rem This file is to be put into C:\Program Files\Git\cmd\ subdirectory
|
rem This file should be put into C:\Program Files\Git\cmd\ subdirectory
|
||||||
rem (or similar, depeding on where the msysGit package was installed)
|
rem (or similar, depeding on where the msysGit package was installed)
|
||||||
rem to provide a shell prompt in the unix-like build environment on Windows.
|
rem to provide a shell prompt in the unix-like build environment on Windows.
|
||||||
rem
|
rem
|
||||||
@ -56,6 +56,7 @@ call :which QTSDK "C:\Qt\2010.05\qt\bin" qmake.exe
|
|||||||
call :which CODESOURCERY "C:\CodeSourcery\bin" cs-make.exe
|
call :which CODESOURCERY "C:\CodeSourcery\bin" cs-make.exe
|
||||||
call :which PYTHON "C:\Python27" python.exe
|
call :which PYTHON "C:\Python27" python.exe
|
||||||
call :which UNSIS "%ProgramFiles%\NSIS\Unicode" makensis.exe
|
call :which UNSIS "%ProgramFiles%\NSIS\Unicode" makensis.exe
|
||||||
|
call :which OPENOCDBIN "C:\OpenOCD\0.4.0\bin" openocd.exe
|
||||||
|
|
||||||
if "%NOT_FOUND%" == "" goto set_path
|
if "%NOT_FOUND%" == "" goto set_path
|
||||||
|
|
145
release/Makefile
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
# Set up a default goal
|
||||||
|
.DEFAULT_GOAL := help
|
||||||
|
|
||||||
|
# Tried the best to support parallel (-j) builds. But since this Makefile
|
||||||
|
# uses other Makefiles to build few targets which in turn have similar
|
||||||
|
# dependencies on uavobjects and other generated files, it is difficult
|
||||||
|
# to support parallel builds perfectly. But at least it was tested with
|
||||||
|
# -j (unlimited job number) on Windows and Linux.
|
||||||
|
|
||||||
|
# Locate the root of the tree
|
||||||
|
WHEREAMI := $(dir $(lastword $(MAKEFILE_LIST)))
|
||||||
|
ROOT_DIR := $(realpath $(WHEREAMI)/../)
|
||||||
|
|
||||||
|
# Set up some macros
|
||||||
|
BUILD_DIR := $(ROOT_DIR)/build
|
||||||
|
RELEASE_DATE := $(shell date +%Y%m%d)
|
||||||
|
RELEASE_TAG := unreleased
|
||||||
|
RELEASE_LBL := $(RELEASE_DATE)-$(RELEASE_TAG)
|
||||||
|
RELEASE_DIR := $(BUILD_DIR)/release-$(RELEASE_LBL)
|
||||||
|
FW_DIR := $(RELEASE_DIR)/firmware-$(RELEASE_LBL)
|
||||||
|
BL_DIR := $(FW_DIR)/bootloaders
|
||||||
|
BLUPD_DIR := $(FW_DIR)/bootloader_updaters
|
||||||
|
|
||||||
|
# Setup targets
|
||||||
|
FW_TARGETS_COMMON := ahrs pipxtreme
|
||||||
|
FW_TARGETS_INPUT := coptercontrol openpilot
|
||||||
|
FW_TARGETS_TOOLS := coptercontrol
|
||||||
|
FW_TARGETS := $(FW_TARGETS_COMMON) $(FW_TARGETS_INPUT)
|
||||||
|
BL_TARGETS := $(addprefix bl_, $(FW_TARGETS))
|
||||||
|
BLUPD_TARGETS := $(addprefix blupd_, $(FW_TARGETS))
|
||||||
|
|
||||||
|
help:
|
||||||
|
@echo
|
||||||
|
@echo " This Makefile is known to work on Linux and Mac in a standard shell environment."
|
||||||
|
@echo " It also works on Windows by following the instructions in ../make/winx86/README.txt."
|
||||||
|
@echo
|
||||||
|
@echo " Here is a summary of the available targets:"
|
||||||
|
@echo
|
||||||
|
@echo " [Release build and packaging]"
|
||||||
|
@echo " release - Build and package the OpenPilot release"
|
||||||
|
@echo " release_flight - Build and package the OpenPilot flight firmware"
|
||||||
|
@echo
|
||||||
|
@echo " Notes:"
|
||||||
|
@echo " - the build directory will be removed first on every run"
|
||||||
|
@echo " unless CLEAN_BUILD=NO is defined (recommended for testing only)"
|
||||||
|
@echo " - release packages will be placed in $(RELEASE_DIR)"
|
||||||
|
@echo
|
||||||
|
|
||||||
|
# Clean and build uavobjects since all parts depend on them
|
||||||
|
uavobjects: all_clean
|
||||||
|
$(V1) $(MAKE) -C $(ROOT_DIR) $@
|
||||||
|
|
||||||
|
all_clean:
|
||||||
|
ifneq ($(CLEAN_BUILD), NO)
|
||||||
|
$(V1) $(MAKE) -C $(ROOT_DIR) $@
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Install template:
|
||||||
|
# $1 = target
|
||||||
|
# $2 = dependencies
|
||||||
|
# $3 = install directory (must be defined)
|
||||||
|
# $4 = installed file name prefix (optional)
|
||||||
|
# $5 = installed file name suffix (optional)
|
||||||
|
# $6 = extra make options (for instance, USE_SPEKTRUM=YES)
|
||||||
|
# $7 = optional target suffix (for instance, clean, if target must be cleaned first)
|
||||||
|
# $8 = list of targets to install (without _install suffix)
|
||||||
|
# $9 = inner make target (usually install, but can be other to just build)
|
||||||
|
define INSTALL_TEMPLATE
|
||||||
|
$(1): $(2)
|
||||||
|
ifneq ($(7),)
|
||||||
|
$$(V1) +$(MAKE) -C $(ROOT_DIR) $(6) $(addsuffix _$(7), $(8))
|
||||||
|
endif
|
||||||
|
$$(V1) +$(MAKE) -C $(ROOT_DIR) INSTALL_DIR=$(3) INSTALL_PFX=$(4) INSTALL_SFX=$(5) $(6) $(addsuffix _$(9), $(8))
|
||||||
|
.PHONY: $(1)
|
||||||
|
endef
|
||||||
|
|
||||||
|
# Firmware for different input drivers
|
||||||
|
$(eval $(call INSTALL_TEMPLATE,fw_common,uavobjects,$(FW_DIR),,-$(RELEASE_LBL),,,$(FW_TARGETS_COMMON),install))
|
||||||
|
$(eval $(call INSTALL_TEMPLATE,fw_pwm,uavobjects,$(FW_DIR),,-pwm-$(RELEASE_LBL),,clean,$(FW_TARGETS_INPUT),install))
|
||||||
|
$(eval $(call INSTALL_TEMPLATE,fw_spektrum,uavobjects,$(FW_DIR),,-spektrum-$(RELEASE_LBL),USE_SPEKTRUM=YES,clean,$(FW_TARGETS_INPUT),install))
|
||||||
|
$(eval $(call INSTALL_TEMPLATE,fw_ppm,uavobjects,$(FW_DIR),,-ppm-$(RELEASE_LBL),USE_PPM=YES,clean,$(FW_TARGETS_INPUT),install))
|
||||||
|
|
||||||
|
# Bootloaders (change 'bin' to 'install' to install bootloaders too)
|
||||||
|
$(eval $(call INSTALL_TEMPLATE,all_bl,uavobjects,$(BL_DIR),,-$(RELEASE_LBL),,,$(BL_TARGETS),bin))
|
||||||
|
|
||||||
|
# Bootloader Updaters
|
||||||
|
$(eval $(call INSTALL_TEMPLATE,blupd_coptercontrol,all_bl,$(BLUPD_DIR),CopterControl_,-$(RELEASE_LBL),,,blupd_coptercontrol,install))
|
||||||
|
$(eval $(call INSTALL_TEMPLATE,blupd_ahrs,all_bl,$(BLUPD_DIR),AHRS_,-$(RELEASE_LBL),,,blupd_ahrs,install))
|
||||||
|
$(eval $(call INSTALL_TEMPLATE,blupd_openpilot,all_bl,$(BLUPD_DIR),OpenPilot_,-$(RELEASE_LBL),,,blupd_openpilot,install))
|
||||||
|
$(eval $(call INSTALL_TEMPLATE,blupd_pipxtreme,all_bl,$(BLUPD_DIR),PipXtreme_,-$(RELEASE_LBL),,,blupd_pipxtreme,install))
|
||||||
|
|
||||||
|
# CopterControl flash eraser tool (change fw_spektrum to fw_ppm if fw_ppm is enabled in release_fw target below)
|
||||||
|
$(eval $(call INSTALL_TEMPLATE,fw_tools,uavobjects,$(BLUPD_DIR),,-FlashEraser-$(RELEASE_LBL),ERASE_FLASH=YES,clean,$(FW_TARGETS_TOOLS),install))
|
||||||
|
|
||||||
|
# Order-only dependencies
|
||||||
|
# They are bit complicated to support parallel (-j) builds and to
|
||||||
|
# create the pwm/ppm/spektrum and CC flash eraser targets in a sequence of build steps
|
||||||
|
|
||||||
|
fw_pwm: | # default dependencies
|
||||||
|
|
||||||
|
fw_spektrum: | fw_pwm # sequential build
|
||||||
|
|
||||||
|
fw_ppm: | fw_spektrum # sequential build
|
||||||
|
|
||||||
|
fw_tools: | fw_spektrum # sequential build, replace fw_spektrum by fw_ppm if uncommented below
|
||||||
|
|
||||||
|
release_fw: | fw_common fw_pwm fw_spektrum # fw_ppm
|
||||||
|
|
||||||
|
release_blupd: | $(BLUPD_TARGETS)
|
||||||
|
|
||||||
|
release_flight: | release_fw release_blupd fw_tools
|
||||||
|
|
||||||
|
release_ground: | ground_package
|
||||||
|
|
||||||
|
release: | release_flight release_ground
|
||||||
|
|
||||||
|
.PHONY: help uavobjects all_clean release release_flight release_fw release_blupd release_ground
|
||||||
|
|
||||||
|
# Decide on a verbosity level based on the V= parameter
|
||||||
|
export AT := @
|
||||||
|
|
||||||
|
ifndef V
|
||||||
|
export V0 :=
|
||||||
|
export V1 := $(AT)
|
||||||
|
else ifeq ($(V), 0)
|
||||||
|
export V0 := $(AT)
|
||||||
|
export V1 := $(AT)
|
||||||
|
else ifeq ($(V), 1)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifneq ($(V),1)
|
||||||
|
MAKEFLAGS += --no-print-directory
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Platform-dependent stuff
|
||||||
|
PLATFORM := win32
|
||||||
|
UNAME := $(shell uname)
|
||||||
|
ifeq ($(UNAME), Linux)
|
||||||
|
PLATFORM := linux
|
||||||
|
endif
|
||||||
|
ifeq ($(UNAME), Darwin)
|
||||||
|
PLATFORM := osx
|
||||||
|
endif
|
||||||
|
|
||||||
|
include $(WHEREAMI)/Makefile.$(PLATFORM)
|
10
release/Makefile.linux
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#
|
||||||
|
# Linux-specific packaging
|
||||||
|
#
|
||||||
|
|
||||||
|
gcs: uavobjects
|
||||||
|
$(V1) $(MAKE) -C $(ROOT_DIR) GCS_BUILD_CONF=release $@
|
||||||
|
|
||||||
|
ground_package: | gcs
|
||||||
|
|
||||||
|
.PHONY: gcs ground_package
|
10
release/Makefile.osx
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#
|
||||||
|
# MacOSX-specific packaging
|
||||||
|
#
|
||||||
|
|
||||||
|
gcs: uavobjects
|
||||||
|
$(V1) $(MAKE) -C $(ROOT_DIR) GCS_BUILD_CONF=release $@
|
||||||
|
|
||||||
|
ground_package: | gcs
|
||||||
|
|
||||||
|
.PHONY: gcs ground_package
|
11
release/Makefile.win32
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#
|
||||||
|
# Windows-specific packaging
|
||||||
|
#
|
||||||
|
|
||||||
|
# Generate GCS installer
|
||||||
|
gcs_installer: uavobjects
|
||||||
|
$(V1) $(MAKE) -C $(ROOT_DIR) GCS_BUILD_CONF=release $@
|
||||||
|
|
||||||
|
ground_package: | gcs_installer
|
||||||
|
|
||||||
|
.PHONY: gcs_installer ground_package
|
@ -4,7 +4,7 @@
|
|||||||
<field name="AccelBias" units="lsb" type="int16" elementnames="X,Y,Z" defaultvalue="0"/>
|
<field name="AccelBias" units="lsb" type="int16" elementnames="X,Y,Z" defaultvalue="0"/>
|
||||||
<field name="BoardRotation" units="deg" type="int8" elementnames="Roll,Pitch,Yaw" defaultvalue="0,0,0"/>
|
<field name="BoardRotation" units="deg" type="int8" elementnames="Roll,Pitch,Yaw" defaultvalue="0,0,0"/>
|
||||||
<field name="GyroGain" units="(rad/s)/lsb" type="float" elements="1" defaultvalue="0.42"/>
|
<field name="GyroGain" units="(rad/s)/lsb" type="float" elements="1" defaultvalue="0.42"/>
|
||||||
<field name="AccelKp" units="channel" type="float" elements="1" defaultvalue="0.01"/>
|
<field name="AccelKp" units="channel" type="float" elements="1" defaultvalue="0.05"/>
|
||||||
<field name="AccelKi" units="channel" type="float" elements="1" defaultvalue="0.0001"/>
|
<field name="AccelKi" units="channel" type="float" elements="1" defaultvalue="0.0001"/>
|
||||||
<field name="YawBiasRate" units="channel" type="float" elements="1" defaultvalue="0.000001"/>
|
<field name="YawBiasRate" units="channel" type="float" elements="1" defaultvalue="0.000001"/>
|
||||||
<field name="ZeroDuringArming" units="channel" type="enum" elements="1" options="FALSE,TRUE" defaultvalue="FALSE"/>
|
<field name="ZeroDuringArming" units="channel" type="enum" elements="1" options="FALSE,TRUE" defaultvalue="FALSE"/>
|
||||||
|
@ -7,9 +7,9 @@
|
|||||||
<field name="ManualRate" units="degrees/sec" type="float" elementnames="Roll,Pitch,Yaw" defaultvalue="150,150,150"/>
|
<field name="ManualRate" units="degrees/sec" type="float" elementnames="Roll,Pitch,Yaw" defaultvalue="150,150,150"/>
|
||||||
<field name="MaximumRate" units="degrees/sec" type="float" elementnames="Roll,Pitch,Yaw" defaultvalue="300,300,300"/>
|
<field name="MaximumRate" units="degrees/sec" type="float" elementnames="Roll,Pitch,Yaw" defaultvalue="300,300,300"/>
|
||||||
|
|
||||||
<field name="RollRatePI" units="" type="float" elementnames="Kp,Ki,ILimit" defaultvalue="0.0015,0,0.3"/>
|
<field name="RollRatePI" units="" type="float" elementnames="Kp,Ki,ILimit" defaultvalue="0.002,0,0.3"/>
|
||||||
<field name="PitchRatePI" units="" type="float" elementnames="Kp,Ki,ILimit" defaultvalue="0.0015,0,0.3"/>
|
<field name="PitchRatePI" units="" type="float" elementnames="Kp,Ki,ILimit" defaultvalue="0.002,0,0.3"/>
|
||||||
<field name="YawRatePI" units="" type="float" elementnames="Kp,Ki,ILimit" defaultvalue="0.003,0,0.3"/>
|
<field name="YawRatePI" units="" type="float" elementnames="Kp,Ki,ILimit" defaultvalue="0.003,0.003,0.3"/>
|
||||||
<field name="RollPI" units="" type="float" elementnames="Kp,Ki,ILimit" defaultvalue="2,0,50"/>
|
<field name="RollPI" units="" type="float" elementnames="Kp,Ki,ILimit" defaultvalue="2,0,50"/>
|
||||||
<field name="PitchPI" units="" type="float" elementnames="Kp,Ki,ILimit" defaultvalue="2,0,50"/>
|
<field name="PitchPI" units="" type="float" elementnames="Kp,Ki,ILimit" defaultvalue="2,0,50"/>
|
||||||
<field name="YawPI" units="" type="float" elementnames="Kp,Ki,ILimit" defaultvalue="2,0,50"/>
|
<field name="YawPI" units="" type="float" elementnames="Kp,Ki,ILimit" defaultvalue="2,0,50"/>
|
||||||
|