Merge branch 'next' into ins
Conflicts: flight/INS/Makefile flight/INS/pios_board.c flight/Modules/Altitude/altitude.c flight/PiOS/Boards/STM3210E_INS.h flight/PiOS/STM32F10x/link_STM3210E_INS_BL_sections.ld flight/PiOS/STM32F10x/link_STM3210E_INS_HD_BL.ld flight/PiOS/STM32F10x/link_STM3210E_INS_HD_NB.ld flight/PiOS/STM32F10x/link_STM3210E_INS_memory.ld flight/PiOS/STM32F10x/link_STM3210E_INS_sections.ld flight/Project/OpenPilotOSX/OpenPilotOSX.xcodeproj/project.pbxproj
59
CREDITS.txt
@ -1,13 +1,13 @@
|
||||
This is a credits file of people that are or have been key contributors to the OpenPilot project.
|
||||
Without the work of the people in this file OpenPilot would not be what it is today.
|
||||
This is a credits file of people that are or have been key contributors to the OpenPilot project.
|
||||
Without the work of the people in this file OpenPilot would not be what it is today.
|
||||
|
||||
It is sorted alphabetically by name and formatted so that it allows for easy grepping and beautification by scripts.
|
||||
It is sorted alphabetically by name and formatted so that it allows for easy grepping and beautification by scripts.
|
||||
|
||||
The fields are:
|
||||
The fields are:
|
||||
|
||||
Name (N)
|
||||
Email (E),
|
||||
Description of work (D)
|
||||
Description of work (D)
|
||||
Current maintainer function (M)
|
||||
|
||||
----------
|
||||
@ -19,29 +19,33 @@ M: SITL Win32
|
||||
|
||||
N: David Ankers
|
||||
E: david (at) openpilot (dot) org
|
||||
D: Co-founder, Project Coordination
|
||||
D: Minor GCS infrastructure, updating the credit file
|
||||
D: Co-founder, Project Coordination
|
||||
D: Minor GCS infrastructure, updating the credit file
|
||||
M: Admin
|
||||
|
||||
N: Pedro Assuncao
|
||||
E: pedro (dot) agda (plus) openpilot (at) gmail (dot) com
|
||||
D: Initial GCS Settings Gadget work
|
||||
|
||||
N: Werner Backes
|
||||
E: werner (at) bit-1 (dot) de
|
||||
D: Port of CopterControl to PS3 Move Controller (MoveCopter)
|
||||
|
||||
N: Jose Barros
|
||||
E: josembarros (at) hotmail (dot) com
|
||||
D: Next-Gen OP Map Lib, Y-Modem Library, Uploader Plugin
|
||||
D: OP Bootloader, AHRS Bootloader, OPUploadTool
|
||||
M: Bootloader, OP MAP Lib
|
||||
|
||||
N: David "Buzz" Carlson
|
||||
M: Bootloader, OP MAP Lib
|
||||
|
||||
N: David "Buzz" Carlson
|
||||
E: chebuzz (plus) openpilot (at) gmail (dot) com
|
||||
D: 3D ModelView GCS Plugin, sponsor of HITL merge work and XPlane addition
|
||||
M: 3D Modelview
|
||||
|
||||
N: James Cotton
|
||||
E: peabody124 (plus) openpilot (at) gmail (dot) com
|
||||
D: Multiplatform HID implementation (firmware & GCS), GCS Joystick control
|
||||
D: Posix OpenPilot work and Mac implementation
|
||||
D: Multiplatform HID implementation (firmware & GCS), GCS Joystick control
|
||||
D: Posix OpenPilot work and Mac implementation
|
||||
D: Firmware implementation of Professor Schinstock's INS/GPS
|
||||
M: Architecture co-lead
|
||||
|
||||
@ -52,7 +56,7 @@ D: Floss-JTAG Rev A, 4-layer initial design
|
||||
N: Frederic Goddeeris
|
||||
E: fredericgoddeeris (at) hotmail (dot) com
|
||||
D: I2C work and FreeRTOS work, MK integration
|
||||
D: EagleTree OSD implementation
|
||||
D: EagleTree OSD implementation
|
||||
M: OSD Module
|
||||
|
||||
N: Daniel Godin
|
||||
@ -83,21 +87,21 @@ M: Hardware Architecture Team
|
||||
|
||||
N: Mark James
|
||||
E: mjames (plus) openpilot (at) gmail (dot) com
|
||||
D: Some of Silk Icon set used in GCS - http://www.famfamfam.com/lab/icons/silk
|
||||
D: Some of Silk Icon set used in GCS - http://www.famfamfam.com/lab/icons/silk
|
||||
|
||||
N: Sami Korhonen
|
||||
E: samik (dot) korhonen (plus) openpilot (at) gmail (dot) com
|
||||
D: GPS Module, Spektrum RC Module, OSD work
|
||||
D: GPS Module, Spektrum RC Module, OSD work
|
||||
|
||||
N: Thorsten Klose
|
||||
E: thorsten (dot) klose (at) dmx (dot) de
|
||||
D: Embedded STM32 infrastructure
|
||||
D: Embedded STM32 infrastructure
|
||||
|
||||
N: Hallvard Kristiansen
|
||||
E: hal (at) fleshmx (dot) com
|
||||
D: GCS Artwork, Quad layout diagrams
|
||||
|
||||
N: Edouard Lafargue
|
||||
N: Edouard Lafargue
|
||||
E: edouard (at) lafargue (dot) name
|
||||
D: GCS Dial Plugins, GCS PFD Plugin, GCS GPS plugin, GCS Config plugin
|
||||
D: Artwork including standard display dials
|
||||
@ -105,7 +109,7 @@ M: GCS Core
|
||||
|
||||
N: Matt Lipski
|
||||
E: mattlipski (plus) openpilot (at) gmail (dot) com
|
||||
D: Deluxe Dials Set artwork, (Artificial Horizon, Compass, Turn Indicator)
|
||||
D: Deluxe Dials Set artwork, (Artificial Horizon, Compass, Turn Indicator)
|
||||
|
||||
N: Les Newell
|
||||
E: les (dot) newell (at) fastmail (dot) co (dot) uk
|
||||
@ -113,9 +117,9 @@ D: Advanced mixer matrix, SPI protocol based on UAVObjects
|
||||
|
||||
N: Ken Northup
|
||||
E: helos360 (at) bellsouth (dot) net
|
||||
D: 3D Modelling, Easystar adaption from FMS
|
||||
D: 3D Modelling, Easystar adaption from FMS
|
||||
|
||||
N: Guy McCaldin
|
||||
N: Guy McCaldin
|
||||
E: guymcc (at) gmail (dot) com
|
||||
D: Artwork and design including work on the Deluxe Dial Set
|
||||
|
||||
@ -123,11 +127,11 @@ N: Cathy Moss
|
||||
E: cmoss296 (at) blueyonder (dot) co (dot) uk
|
||||
D: Hardware design Lead: Gen 2 Mainboard, PipXtreme, Current Sensor
|
||||
D: Lead dev PipXtreme, creator OP Map Plugin
|
||||
M: Hardware Architecture Team / PipX Modem
|
||||
M: Hardware Architecture Team / PipX Modem
|
||||
|
||||
N: Angus Peart
|
||||
E: gussy (at) openpilot (dot) org
|
||||
D: Co-founder, Principal hardware architect.
|
||||
D: Co-founder, Principal hardware architect.
|
||||
D: Hardware design of OpenPilot, AHRS, GPS and other hardware
|
||||
D: Core developer embedded code
|
||||
|
||||
@ -152,7 +156,7 @@ D: GCS Framework and Plugins for the GCS
|
||||
|
||||
N: Zik Saleeba
|
||||
E: zik (at) zikzak (dot) net
|
||||
D: Initial schematic based on Zik's Flying Fox schematic
|
||||
D: Initial schematic based on Zik's Flying Fox schematic
|
||||
|
||||
N: Professor Dale Schinstock
|
||||
E: dales (at) ksu (dot) edu
|
||||
@ -162,16 +166,18 @@ D: Creator of the OpenPilot INS / EKF
|
||||
N: Oleg Semyonov
|
||||
E: os-openpilot-org (at) os-propo (dot) info
|
||||
D: Core tester & Project organisation
|
||||
M: Common part of multi-platform packaging system
|
||||
M: Windows NSIS Installer
|
||||
M: Russian Documentation Lead
|
||||
|
||||
N: Stacey Sheldon
|
||||
E: stac (at) solidgoldbomb (dot) org
|
||||
D: Core Embedded Developer
|
||||
D: SPI protocol for AHRS, I2C rewrite and much core work
|
||||
D: SPI protocol for AHRS, I2C rewrite and much core work
|
||||
|
||||
N: Troy Schultz
|
||||
E: troy (dot) schultz (at) rogers (dot) com
|
||||
D: INS design review and optimisation
|
||||
D: INS design review and optimisation
|
||||
M: Hardware Architecture Team
|
||||
|
||||
N: Dr. Erhard Siegl
|
||||
@ -194,11 +200,10 @@ D: Helicopter support code and mixing for CCPM
|
||||
|
||||
N: Vassilis Varveropoulos
|
||||
E: vassilis (at) openpilot (dot) org
|
||||
D: Co-founder, Principal embedded software architect.
|
||||
D: Co-founder, Principal embedded software architect.
|
||||
D: Module architecture and UAVTalk/UAVObjects implementation.
|
||||
M: Architecture co-lead
|
||||
|
||||
N: Alex Vrubel
|
||||
E: alex (dot) vrubel (plus) openpilot (at) gmail (dot) com
|
||||
D: Russian translation of the GCS
|
||||
|
||||
|
26
HISTORY.txt
Normal file
@ -0,0 +1,26 @@
|
||||
Short summary of changes. For a complete list see the git log.
|
||||
|
||||
2011-07-29
|
||||
Added support for PPM receivers from James W. Now all 4 interfaces (R/C
|
||||
standard PWM, combined PPM (MK), Spektrum satellite, Futaba S.Bus) are
|
||||
supported and configurable through the GCS hardware configuration tab.
|
||||
|
||||
2011-07-17
|
||||
Updated module initialization from Mathieu which separates the initialization
|
||||
from the task startup. Also implements a method to reclaim unused ram from
|
||||
initialization and end of memory for the FreeRTOS heap.
|
||||
|
||||
2011-07-12
|
||||
Improvements to the stabilization code. Included a LPF on the gyros to smooth
|
||||
out noise in high vibration environments. Also two new modes: axis-lock and
|
||||
weak leveling. Axis-lock will try and hold an axis at a fixed position and
|
||||
reject any disturbances. This is like heading-hold on a heli for the tail but
|
||||
can be useful for other axes. Weak leveling is rate mode with a weak
|
||||
correction to self level the craft - good for easier rate mode flying.
|
||||
|
||||
2011-07-07
|
||||
Dynamic hardware configuration from Stac. The input type is now
|
||||
selected from ManualControlSettings.InputMode and the aircraft must be rebooted
|
||||
after changing this. Also for CopterControl the HwSettings object must
|
||||
indicate which modules are connected to which ports. PPM currently not
|
||||
working.
|
@ -1,12 +1,12 @@
|
||||
This is the Milestones file of the OpenPilot project, its intent is to record the major accomplishments achieved by people using the OpenPilot platform and who gets the karma for performing them.
|
||||
This is the Milestones file of the OpenPilot project, its intent is to record the major accomplishments achieved by people using the OpenPilot platform and who gets the karma for performing them.
|
||||
|
||||
|
||||
The CREDITS.txt in SVN records the developers and the achievements made by each individual; this file is different as it is aimed at recording and giving credit to the people who achieve milestones in the use of OpenPilot.
|
||||
The CREDITS.txt in SVN records the developers and the achievements made by each individual; this file is different as it is aimed at recording and giving credit to the people who achieve milestones in the use of OpenPilot.
|
||||
|
||||
|
||||
The fields are:
|
||||
The fields are:
|
||||
|
||||
Milestone description (M)
|
||||
Milestone description (M)
|
||||
Credited to (C)
|
||||
Date (D)
|
||||
Video (V) - Optional link to video showing milestone
|
||||
@ -22,7 +22,7 @@ C: James Cotton
|
||||
D: September 2010
|
||||
|
||||
M: First stabilised fixed wing flight
|
||||
C: Edouard Lafargue
|
||||
C: Edouard Lafargue
|
||||
D: September 2010
|
||||
|
||||
M: First stabilised Quad flight
|
||||
@ -38,7 +38,7 @@ C: Cathy Moss
|
||||
D: October 2010
|
||||
|
||||
M: First OpenPilot night flight
|
||||
C: Dale Schintock
|
||||
C: Dale Schinstock
|
||||
D: October 2010
|
||||
V: http://www.youtube.com/watch?v=yk8ckeRMV8U
|
||||
|
||||
@ -53,7 +53,7 @@ D: November 2010
|
||||
V: http://vimeo.com/17488702
|
||||
|
||||
M: First solid OpenPilot Position Hold
|
||||
C: Dale Schintock
|
||||
C: Dale Schinstock
|
||||
D: December 2010
|
||||
V: http://www.youtube.com/watch?v=BBCGVP0Vpgw
|
||||
|
||||
@ -93,12 +93,9 @@ D: March 2011
|
||||
V: http://vimeo.com/22221798
|
||||
|
||||
M: First CopterControl flight on a Hexa
|
||||
C: Edouard Lafargue
|
||||
|
||||
D: March 2011
|
||||
|
||||
V: http://vimeo.com/21476466
|
||||
|
||||
C: Edouard Lafargue
|
||||
D: March 2011
|
||||
V: http://vimeo.com/21476466
|
||||
|
||||
M: First CopterControl flight on a Tri
|
||||
C: Gary Mortimer and the Scorpion
|
||||
@ -111,26 +108,64 @@ D: May 2011
|
||||
V: http://www.vimeo.com/23637586
|
||||
|
||||
M: First CopterControl flight on a Flybarless Heli
|
||||
C: Oleg Semyonov (Osnwt)
|
||||
C: Oleg Semyonov (osnwt)
|
||||
D: May 2011
|
||||
V: http://www.youtube.com/watch?v=-J8cxqzxxWw
|
||||
|
||||
M: First V8 Octo OpenPilot flight
|
||||
C: Sami Korhonen (Sambas)
|
||||
D: May 2011
|
||||
V: http://vimeo.com/24258192
|
||||
|
||||
M: First Y6 CopterControl flight
|
||||
C: ?
|
||||
D: ?
|
||||
C: Michel Pet
|
||||
D: June 2011
|
||||
V: http://www.youtube.com/watch?v=QsE2MQELPZY
|
||||
|
||||
M: First MoveCopter flight
|
||||
C: Werner Backes
|
||||
D: July 2011
|
||||
V: http://vimeo.com/25983655
|
||||
|
||||
M: First Y4 CopterControl flight
|
||||
C: Mat Wellington
|
||||
D: July 2011
|
||||
V: http://www.youtube.com/watch?v=TxZ4MDGIj1o
|
||||
|
||||
M: First V-Tail4 CopterControl flight
|
||||
C: Mat Wellington
|
||||
D: July 2011
|
||||
V: http://www.youtube.com/watch?v=YE4Fd9vdg1I
|
||||
|
||||
M: First Altitude Hold using Sonar
|
||||
C:
|
||||
D:
|
||||
V:
|
||||
|
||||
M: First CopterControl Navigation on RC Ground Vechicle
|
||||
C:
|
||||
D:
|
||||
V:
|
||||
|
||||
M: First CopterControl Navigation on RC Water Vechicle
|
||||
C:
|
||||
D:
|
||||
V:
|
||||
|
||||
M: First CopterControl flip on a Flybarless Heli
|
||||
C:
|
||||
D:
|
||||
V:
|
||||
|
||||
|
||||
An incomplete list of some future Milestones is below:
|
||||
|
||||
* First Helicopter flight with OpenPilot
|
||||
* First Octo flight with OpenPilot
|
||||
* First Y6 CopterControl flight
|
||||
* First Helicopter flight with OpenPilot
|
||||
* First successful flight using the GCS only and no RC TX
|
||||
* First use of Magic Waypoint
|
||||
* First Flybarless Helicopter flight with OpenPilot
|
||||
* First flight with CopterControl
|
||||
* First fixed wing navigation flight
|
||||
* First fixed wing navigation flight
|
||||
* First Multirotor navigation flight
|
||||
* First Helicopter navigation flight
|
||||
* First over 1km navigation flight
|
||||
|
424
Makefile
@ -71,36 +71,46 @@ help:
|
||||
@echo " qt_sdk_install - Install the QT v4.6.2 tools"
|
||||
@echo " arm_sdk_install - Install the Code Sourcery ARM gcc toolchain"
|
||||
@echo " openocd_install - Install the OpenOCD JTAG daemon"
|
||||
@echo " stm32flash_install - Install the stm32flash tool for unbricking boards"
|
||||
@echo
|
||||
@echo " [Big Hammer]"
|
||||
@echo " all - Generate UAVObjects, build openpilot firmware and gcs"
|
||||
@echo " all_flight - Build all firmware, bootloaders and bootloader updaters"
|
||||
@echo " all_fw - Build only firmware for all boards"
|
||||
@echo " all_bl - Build only bootloaders for all boards"
|
||||
@echo " all_blupd - Build only bootloader updaters for all boards"
|
||||
@echo " all_bu - Build only bootloader updaters for all boards"
|
||||
@echo
|
||||
@echo " all_clean - Remove your build directory ($(BUILD_DIR))"
|
||||
@echo " all_flight_clean - Remove all firmware, bootloaders and bootloader updaters"
|
||||
@echo " all_fw_clean - Remove firmware for all boards"
|
||||
@echo " all_bl_clean - Remove bootlaoders for all boards"
|
||||
@echo " all_blupd_clean - Remove bootloader updaters for all boards"
|
||||
@echo " all_bu_clean - Remove bootloader updaters for all boards"
|
||||
@echo
|
||||
@echo " all_<board> - Build all available images for <board>"
|
||||
@echo " all_<board>_clean - Remove all available images for <board>"
|
||||
@echo
|
||||
@echo " [Firmware]"
|
||||
@echo " <board> - Build firmware for <board>"
|
||||
@echo " supported boards are ($(FW_TARGETS))"
|
||||
@echo " <board>_clean - Remove firmware for <board>"
|
||||
@echo " <board>_program - Use OpenOCD + JTAG to write firmware to <board>"
|
||||
@echo " supported boards are ($(ALL_BOARDS))"
|
||||
@echo " fw_<board> - Build firmware for <board>"
|
||||
@echo " supported boards are ($(FW_BOARDS))"
|
||||
@echo " fw_<board>_clean - Remove firmware for <board>"
|
||||
@echo " fw_<board>_program - Use OpenOCD + JTAG to write firmware to <board>"
|
||||
@echo
|
||||
@echo " [Bootloader]"
|
||||
@echo " bl_<board> - Build bootloader for <board>"
|
||||
@echo " supported boards are ($(BL_TARGETS))"
|
||||
@echo " supported boards are ($(BL_BOARDS))"
|
||||
@echo " bl_<board>_clean - Remove bootloader for <board>"
|
||||
@echo " bl_<board>_program - Use OpenOCD + JTAG to write bootloader to <board>"
|
||||
@echo
|
||||
@echo " [Bootloader Updater]"
|
||||
@echo " blupd_<board> - Build bootloader updater for <board>"
|
||||
@echo " supported boards are ($(BLUPD_TARGETS))"
|
||||
@echo " blupd_<board>_clean - Remove bootloader updater for <board>"
|
||||
@echo " bu_<board> - Build bootloader updater for <board>"
|
||||
@echo " supported boards are ($(BU_BOARDS))"
|
||||
@echo " bu_<board>_clean - Remove bootloader updater for <board>"
|
||||
@echo
|
||||
@echo " [Unbrick a board]"
|
||||
@echo " unbrick_<board> - Use the STM32's built in boot ROM to write a bootloader to <board>"
|
||||
@echo " supported boards are ($(BL_BOARDS))"
|
||||
@echo
|
||||
@echo " [Simulation]"
|
||||
@echo " sim_posix - Build OpenPilot simulation firmware for"
|
||||
@ -170,10 +180,10 @@ qt_sdk_clean:
|
||||
$(V1) [ ! -d "$(QT_SDK_DIR)" ] || $(RM) -rf $(QT_SDK_DIR)
|
||||
|
||||
# Set up ARM (STM32) SDK
|
||||
ARM_SDK_DIR := $(TOOLS_DIR)/arm-2009q3
|
||||
ARM_SDK_DIR := $(TOOLS_DIR)/arm-2011.03
|
||||
|
||||
.PHONY: arm_sdk_install
|
||||
arm_sdk_install: ARM_SDK_URL := http://www.codesourcery.com/sgpp/lite/arm/portal/package5353/public/arm-none-eabi/arm-2009q3-68-arm-none-eabi-i686-pc-linux-gnu.tar.bz2
|
||||
arm_sdk_install: ARM_SDK_URL := http://www.codesourcery.com/sgpp/lite/arm/portal/package8734/public/arm-none-eabi/arm-2011.03-42-arm-none-eabi-i686-pc-linux-gnu.tar.bz2
|
||||
arm_sdk_install: ARM_SDK_FILE := $(notdir $(ARM_SDK_URL))
|
||||
# order-only prereq on directory existance:
|
||||
arm_sdk_install: | $(DL_DIR) $(TOOLS_DIR)
|
||||
@ -221,6 +231,25 @@ openocd_install: openocd_clean
|
||||
openocd_clean:
|
||||
$(V1) [ ! -d "$(OPENOCD_DIR)" ] || $(RM) -r "$(OPENOCD_DIR)"
|
||||
|
||||
STM32FLASH_DIR := $(TOOLS_DIR)/stm32flash
|
||||
|
||||
.PHONY: stm32flash_install
|
||||
stm32flash_install: STM32FLASH_URL := http://stm32flash.googlecode.com/svn/trunk
|
||||
stm32flash_install: STM32FLASH_REV := 52
|
||||
stm32flash_install: stm32flash_clean
|
||||
# download the source
|
||||
$(V0) @echo " DOWNLOAD $(STM32FLASH_URL) @ r$(STM32FLASH_REV)"
|
||||
$(V1) svn export -q -r "$(STM32FLASH_REV)" "$(STM32FLASH_URL)" "$(STM32FLASH_DIR)"
|
||||
|
||||
# build
|
||||
$(V0) @echo " BUILD $(STM32FLASH_DIR)"
|
||||
$(V1) $(MAKE) --silent -C $(STM32FLASH_DIR) all
|
||||
|
||||
.PHONY: stm32flash_clean
|
||||
stm32flash_clean:
|
||||
$(V0) @echo " CLEAN $(STM32FLASH_DIR)"
|
||||
$(V1) [ ! -d "$(STM32FLASH_DIR)" ] || $(RM) -r "$(STM32FLASH_DIR)"
|
||||
|
||||
##############################
|
||||
#
|
||||
# Set up paths to tools
|
||||
@ -272,7 +301,7 @@ openpilotgcs: uavobjects_gcs
|
||||
|
||||
.PHONY: openpilotgcs_clean
|
||||
openpilotgcs_clean:
|
||||
$(V0) @echo " CLEAN $@"
|
||||
$(V0) @echo " CLEAN $@"
|
||||
$(V1) [ ! -d "$(BUILD_DIR)/ground/openpilotgcs" ] || $(RM) -r "$(BUILD_DIR)/ground/openpilotgcs"
|
||||
|
||||
.PHONY: uavobjgenerator
|
||||
@ -302,7 +331,7 @@ uavobjects_test: $(UAVOBJ_OUT_DIR) uavobjgenerator
|
||||
$(V1) $(UAVOBJGENERATOR) -v -none $(UAVOBJ_XML_DIR) $(ROOT_DIR)
|
||||
|
||||
uavobjects_clean:
|
||||
$(V0) @echo " CLEAN $@"
|
||||
$(V0) @echo " CLEAN $@"
|
||||
$(V1) [ ! -d "$(UAVOBJ_OUT_DIR)" ] || $(RM) -r "$(UAVOBJ_OUT_DIR)"
|
||||
|
||||
##############################
|
||||
@ -311,254 +340,149 @@ uavobjects_clean:
|
||||
#
|
||||
##############################
|
||||
|
||||
FW_TARGETS := openpilot ahrs coptercontrol pipxtreme ins
|
||||
BL_TARGETS := $(addprefix bl_, $(FW_TARGETS))
|
||||
BLUPD_TARGETS := $(addprefix blupd_, $(FW_TARGETS))
|
||||
# $(1) = Canonical board name all in lower case (e.g. coptercontrol)
|
||||
# $(2) = Name of board used in source tree (e.g. CopterControl)
|
||||
define FW_TEMPLATE
|
||||
.PHONY: $(1) fw_$(1)
|
||||
$(1): fw_$(1)_opfw
|
||||
fw_$(1): fw_$(1)_opfw
|
||||
|
||||
fw_$(1)_%: uavobjects_flight
|
||||
$(V1) mkdir -p $(BUILD_DIR)/fw_$(1)/dep
|
||||
$(V1) cd $(ROOT_DIR)/flight/$(2) && \
|
||||
$$(MAKE) -r --no-print-directory \
|
||||
BOARD_NAME=$(1) \
|
||||
TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \
|
||||
REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" \
|
||||
$$*
|
||||
|
||||
.PHONY: $(1)_clean
|
||||
$(1)_clean: fw_$(1)_clean
|
||||
fw_$(1)_clean:
|
||||
$(V0) @echo " CLEAN $$@"
|
||||
$(V1) $(RM) -fr $(BUILD_DIR)/fw_$(1)
|
||||
endef
|
||||
|
||||
# $(1) = Canonical board name all in lower case (e.g. coptercontrol)
|
||||
# $(2) = Name of board used in source tree (e.g. CopterControl)
|
||||
define BL_TEMPLATE
|
||||
.PHONY: bl_$(1)
|
||||
bl_$(1): bl_$(1)_bin
|
||||
bl_$(1)_bino: bl_$(1)_bin
|
||||
|
||||
bl_$(1)_%:
|
||||
$(V1) mkdir -p $(BUILD_DIR)/bl_$(1)/dep
|
||||
$(V1) cd $(ROOT_DIR)/flight/Bootloaders/$(2) && \
|
||||
$$(MAKE) -r --no-print-directory \
|
||||
BOARD_NAME=$(1) \
|
||||
TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \
|
||||
REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" \
|
||||
$$*
|
||||
|
||||
.PHONY: unbrick_$(1)
|
||||
unbrick_$(1): bl_$(1)_hex
|
||||
$(if $(filter-out undefined,$(origin UNBRICK_TTY)),
|
||||
$(V0) @echo " UNBRICK $(1) via $$(UNBRICK_TTY)"
|
||||
$(V1) $(STM32FLASH_DIR)/stm32flash \
|
||||
-w $(BUILD_DIR)/bl_$(1)/bl_$(1).hex \
|
||||
-g 0x0 \
|
||||
$$(UNBRICK_TTY)
|
||||
,
|
||||
$(V0) @echo
|
||||
$(V0) @echo "ERROR: You must specify UNBRICK_TTY=<serial-device> to use for unbricking."
|
||||
$(V0) @echo " eg. $$(MAKE) $$@ UNBRICK_TTY=/dev/ttyUSB0"
|
||||
)
|
||||
|
||||
.PHONY: bl_$(1)_clean
|
||||
bl_$(1)_clean:
|
||||
$(V0) @echo " CLEAN $$@"
|
||||
$(V1) $(RM) -fr $(BUILD_DIR)/bl_$(1)
|
||||
endef
|
||||
|
||||
# $(1) = Canonical board name all in lower case (e.g. coptercontrol)
|
||||
define BU_TEMPLATE
|
||||
.PHONY: bu_$(1)
|
||||
bu_$(1): bu_$(1)_opfw
|
||||
|
||||
bu_$(1)_%: bl_$(1)_bino
|
||||
$(V1) mkdir -p $(BUILD_DIR)/bu_$(1)/dep
|
||||
$(V1) cd $(ROOT_DIR)/flight/Bootloaders/BootloaderUpdater && \
|
||||
$$(MAKE) -r --no-print-directory \
|
||||
BOARD_NAME=$(1) \
|
||||
TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \
|
||||
REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" \
|
||||
$$*
|
||||
|
||||
.PHONY: bu_$(1)_clean
|
||||
bu_$(1)_clean:
|
||||
$(V0) @echo " CLEAN $$@"
|
||||
$(V1) $(RM) -fr $(BUILD_DIR)/bu_$(1)
|
||||
endef
|
||||
|
||||
# $(1) = Canonical board name all in lower case (e.g. coptercontrol)
|
||||
define BOARD_PHONY_TEMPLATE
|
||||
.PHONY: all_$(1)
|
||||
all_$(1): $$(filter fw_$(1), $$(FW_TARGETS))
|
||||
all_$(1): $$(filter bl_$(1), $$(BL_TARGETS))
|
||||
all_$(1): $$(filter bu_$(1), $$(BU_TARGETS))
|
||||
|
||||
.PHONY: all_$(1)_clean
|
||||
all_$(1)_clean: $$(addsuffix _clean, $$(filter fw_$(1), $$(FW_TARGETS)))
|
||||
all_$(1)_clean: $$(addsuffix _clean, $$(filter bl_$(1), $$(BL_TARGETS)))
|
||||
all_$(1)_clean: $$(addsuffix _clean, $$(filter bu_$(1), $$(BU_TARGETS)))
|
||||
endef
|
||||
|
||||
ALL_BOARDS := openpilot ahrs coptercontrol pipxtreme ins
|
||||
|
||||
# Friendly names of each board (used to find source tree)
|
||||
openpilot_friendly := OpenPilot
|
||||
coptercontrol_friendly := CopterControl
|
||||
pipxtreme_friendly := PipXtreme
|
||||
ins_friendly := INS
|
||||
ahrs_friendly := AHRS
|
||||
|
||||
# Start out assuming that we'll build fw, bl and bu for all boards
|
||||
FW_BOARDS := $(ALL_BOARDS)
|
||||
BL_BOARDS := $(ALL_BOARDS)
|
||||
BU_BOARDS := $(ALL_BOARDS)
|
||||
|
||||
# FIXME: The INS build doesn't have a bootloader or bootloader
|
||||
# updater yet so we need to filter them out to prevent errors.
|
||||
BL_TARGETS := $(filter-out bl_ins, $(BL_TARGETS))
|
||||
BLUPD_TARGETS := $(filter-out blupd_ins, $(BLUPD_TARGETS))
|
||||
BL_BOARDS := $(filter-out ins, $(ALL_BOARDS))
|
||||
BU_BOARDS := $(filter-out ins, $(ALL_BOARDS))
|
||||
|
||||
# Generate the targets for whatever boards are left in each list
|
||||
FW_TARGETS := $(addprefix fw_, $(FW_BOARDS))
|
||||
BL_TARGETS := $(addprefix bl_, $(BL_BOARDS))
|
||||
BU_TARGETS := $(addprefix bu_, $(BU_BOARDS))
|
||||
|
||||
.PHONY: all_fw all_fw_clean
|
||||
all_fw: $(addsuffix _bin, $(FW_TARGETS))
|
||||
all_fw_clean: $(addsuffix _clean, $(FW_TARGETS))
|
||||
all_fw: $(addsuffix _opfw, $(FW_TARGETS))
|
||||
all_fw_clean: $(addsuffix _clean, $(FW_TARGETS))
|
||||
|
||||
.PHONY: all_bl all_bl_clean
|
||||
all_bl: $(addsuffix _bin, $(BL_TARGETS))
|
||||
all_bl_clean: $(addsuffix _clean, $(BL_TARGETS))
|
||||
all_bl: $(addsuffix _bin, $(BL_TARGETS))
|
||||
all_bl_clean: $(addsuffix _clean, $(BL_TARGETS))
|
||||
|
||||
.PHONY: all_blupd all_blupd_clean
|
||||
all_blupd: $(addsuffix _bin, $(BLUPD_TARGETS))
|
||||
all_blupd_clean: $(addsuffix _clean, $(BLUPD_TARGETS))
|
||||
.PHONY: all_bu all_bu_clean
|
||||
all_bu: $(addsuffix _opfw, $(BU_TARGETS))
|
||||
all_bu_clean: $(addsuffix _clean, $(BU_TARGETS))
|
||||
|
||||
.PHONY: all_flight all_flight_clean
|
||||
all_flight: all_fw all_bl all_blupd
|
||||
all_flight_clean: all_fw_clean all_bl_clean all_blupd_clean
|
||||
all_flight: all_fw all_bl all_bu
|
||||
all_flight_clean: all_fw_clean all_bl_clean all_bu_clean
|
||||
|
||||
.PHONY: openpilot
|
||||
openpilot: openpilot_bin
|
||||
# Expand the groups of targets for each board
|
||||
$(foreach board, $(ALL_BOARDS), $(eval $(call BOARD_PHONY_TEMPLATE,$(board))))
|
||||
|
||||
openpilot_%: uavobjects_flight
|
||||
$(V1) mkdir -p $(BUILD_DIR)/openpilot/dep
|
||||
$(V1) cd $(ROOT_DIR)/flight/OpenPilot && \
|
||||
$(MAKE) -r --no-print-directory \
|
||||
OUTDIR="$(BUILD_DIR)/openpilot" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \
|
||||
REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" $*
|
||||
# Expand the bootloader updater rules
|
||||
$(foreach board, $(ALL_BOARDS), $(eval $(call BU_TEMPLATE,$(board),$($(board)_friendly))))
|
||||
|
||||
.PHONY: openpilot_clean
|
||||
openpilot_clean:
|
||||
$(V0) @echo " CLEAN $@"
|
||||
$(V1) $(RM) -fr $(BUILD_DIR)/openpilot
|
||||
|
||||
.PHONY: bl_openpilot
|
||||
bl_openpilot: bl_openpilot_bin
|
||||
bl_openpilot_bino: bl_openpilot_bin
|
||||
|
||||
bl_openpilot_%:
|
||||
$(V1) mkdir -p $(BUILD_DIR)/bl_openpilot/dep
|
||||
$(V1) cd $(ROOT_DIR)/flight/Bootloaders/OpenPilot && \
|
||||
$(MAKE) -r --no-print-directory \
|
||||
OUTDIR="$(BUILD_DIR)/bl_openpilot" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \
|
||||
REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" $*
|
||||
|
||||
.PHONY: bl_openpilot_clean
|
||||
bl_openpilot_clean:
|
||||
$(V0) @echo " CLEAN $@"
|
||||
$(V1) $(RM) -fr $(BUILD_DIR)/bl_openpilot
|
||||
|
||||
.PHONY: blupd_openpilot
|
||||
blupd_openpilot: blupd_openpilot_bin
|
||||
|
||||
blupd_openpilot_%: bl_openpilot_bino
|
||||
$(V1) mkdir -p $(BUILD_DIR)/blupd_openpilot/dep
|
||||
$(V1) cd $(ROOT_DIR)/flight/Bootloaders/BootloaderUpdater && \
|
||||
$(MAKE) -r --no-print-directory \
|
||||
OUTDIR="$(BUILD_DIR)/blupd_openpilot" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \
|
||||
REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" \
|
||||
BOARD=STM3210E_OP MODEL=HD MODEL_SUFFIX=_OP \
|
||||
BLOBJ=$(BUILD_DIR)/bl_openpilot/OpenPilot_BL.bin.o $*
|
||||
|
||||
.PHONY: blupd_openpilot_clean
|
||||
blupd_openpilot_clean:
|
||||
$(V0) @echo " CLEAN $@"
|
||||
$(V1) $(RM) -fr $(BUILD_DIR)/blupd_openpilot
|
||||
|
||||
.PHONY: ahrs
|
||||
ahrs: ahrs_bin
|
||||
|
||||
ahrs_%: uavobjects_flight
|
||||
$(V1) mkdir -p $(BUILD_DIR)/ahrs/dep
|
||||
$(V1) cd $(ROOT_DIR)/flight/AHRS && \
|
||||
$(MAKE) -r --no-print-directory \
|
||||
OUTDIR="$(BUILD_DIR)/ahrs" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \
|
||||
REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" $*
|
||||
|
||||
.PHONY: ahrs_clean
|
||||
ahrs_clean:
|
||||
$(V0) @echo " CLEAN $@"
|
||||
$(V1) $(RM) -fr $(BUILD_DIR)/ahrs
|
||||
|
||||
.PHONY: bl_ahrs
|
||||
bl_ahrs: bl_ahrs_bin
|
||||
bl_ahrs_bino: bl_ahrs_bin
|
||||
|
||||
bl_ahrs_%:
|
||||
$(V1) mkdir -p $(BUILD_DIR)/bl_ahrs/dep
|
||||
$(V1) cd $(ROOT_DIR)/flight/Bootloaders/AHRS && \
|
||||
$(MAKE) -r --no-print-directory \
|
||||
OUTDIR="$(BUILD_DIR)/bl_ahrs" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \
|
||||
REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" $*
|
||||
|
||||
.PHONY: bl_ahrs_clean
|
||||
bl_ahrs_clean:
|
||||
$(V0) @echo " CLEAN $@"
|
||||
$(V1) $(RM) -fr $(BUILD_DIR)/bl_ahrs
|
||||
|
||||
.PHONY: blupd_ahrs
|
||||
blupd_ahrs: blupd_ahrs_bin
|
||||
|
||||
blupd_ahrs_%: bl_ahrs_bino bl_ahrs
|
||||
$(V1) mkdir -p $(BUILD_DIR)/blupd_ahrs/dep
|
||||
$(V1) cd $(ROOT_DIR)/flight/Bootloaders/BootloaderUpdater && \
|
||||
$(MAKE) -r --no-print-directory \
|
||||
OUTDIR="$(BUILD_DIR)/blupd_ahrs" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \
|
||||
REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" \
|
||||
BOARD=STM32103CB_AHRS MODEL=MD \
|
||||
BLOBJ=$(BUILD_DIR)/bl_ahrs/AHRS_BL.bin.o $*
|
||||
|
||||
.PHONY: blupd_ahrs_clean
|
||||
blupd_ahrs_clean:
|
||||
$(V0) @echo " CLEAN $@"
|
||||
$(V1) $(RM) -fr $(BUILD_DIR)/blupd_ahrs
|
||||
|
||||
.PHONY: coptercontrol
|
||||
coptercontrol: coptercontrol_bin
|
||||
|
||||
coptercontrol_%: uavobjects_flight
|
||||
$(V1) mkdir -p $(BUILD_DIR)/coptercontrol/dep
|
||||
$(V1) cd $(ROOT_DIR)/flight/CopterControl && \
|
||||
$(MAKE) -r --no-print-directory \
|
||||
OUTDIR="$(BUILD_DIR)/coptercontrol" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \
|
||||
REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" $*
|
||||
|
||||
.PHONY: coptercontrol_clean
|
||||
coptercontrol_clean:
|
||||
$(V0) @echo " CLEAN $@"
|
||||
$(V1) $(RM) -fr $(BUILD_DIR)/coptercontrol
|
||||
|
||||
.PHONY: bl_coptercontrol
|
||||
bl_coptercontrol: bl_coptercontrol_bin
|
||||
bl_coptercontrol_bino: bl_coptercontrol_bin
|
||||
|
||||
bl_coptercontrol_%:
|
||||
$(V1) mkdir -p $(BUILD_DIR)/bl_coptercontrol/dep
|
||||
$(V1) cd $(ROOT_DIR)/flight/Bootloaders/CopterControl && \
|
||||
$(MAKE) -r --no-print-directory \
|
||||
OUTDIR="$(BUILD_DIR)/bl_coptercontrol" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \
|
||||
REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" $*
|
||||
|
||||
.PHONY: bl_coptercontrol_clean
|
||||
bl_coptercontrol_clean:
|
||||
$(V0) @echo " CLEAN $@"
|
||||
$(V1) $(RM) -fr $(BUILD_DIR)/bl_coptercontrol
|
||||
|
||||
.PHONY: blupd_coptercontrol
|
||||
blupd_coptercontrol: blupd_coptercontrol_bin
|
||||
|
||||
blupd_coptercontrol_%: bl_coptercontrol_bino
|
||||
$(V1) mkdir -p $(BUILD_DIR)/blupd_coptercontrol/dep
|
||||
$(V1) cd $(ROOT_DIR)/flight/Bootloaders/BootloaderUpdater && \
|
||||
$(MAKE) -r --no-print-directory \
|
||||
OUTDIR="$(BUILD_DIR)/blupd_coptercontrol" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \
|
||||
REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" \
|
||||
BOARD=STM32103CB_CC_Rev1 MODEL=MD MODEL_SUFFIX=_CC \
|
||||
BLOBJ=$(BUILD_DIR)/bl_coptercontrol/CopterControl_BL.bin.o $*
|
||||
|
||||
.PHONY: blupd_coptercontrol_clean
|
||||
blupd_coptercontrol_clean:
|
||||
$(V0) @echo " CLEAN $@"
|
||||
$(V1) $(RM) -fr $(BUILD_DIR)/blupd_coptercontrol
|
||||
|
||||
.PHONY: pipxtreme
|
||||
pipxtreme: pipxtreme_bin
|
||||
|
||||
pipxtreme_%: uavobjects_flight
|
||||
$(V1) mkdir -p $(BUILD_DIR)/pipxtreme/dep
|
||||
$(V1) cd $(ROOT_DIR)/flight/PipXtreme && \
|
||||
$(MAKE) -r --no-print-directory \
|
||||
OUTDIR="$(BUILD_DIR)/pipxtreme" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \
|
||||
REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" $*
|
||||
|
||||
.PHONY: pipxtreme_clean
|
||||
pipxtreme_clean:
|
||||
$(V0) @echo " CLEAN $@"
|
||||
$(V1) $(RM) -fr $(BUILD_DIR)/pipxtreme
|
||||
|
||||
.PHONY: bl_pipxtreme
|
||||
bl_pipxtreme: bl_pipxtreme_bin
|
||||
bl_pipxtreme_bino: bl_pipxtreme_bin
|
||||
|
||||
bl_pipxtreme_%:
|
||||
$(V1) mkdir -p $(BUILD_DIR)/bl_pipxtreme/dep
|
||||
$(V1) cd $(ROOT_DIR)/flight/Bootloaders/PipXtreme && \
|
||||
$(MAKE) -r --no-print-directory \
|
||||
OUTDIR="$(BUILD_DIR)/bl_pipxtreme" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \
|
||||
REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" $*
|
||||
|
||||
.PHONY: bl_pipxtreme_clean
|
||||
bl_pipxtreme_clean:
|
||||
$(V0) @echo " CLEAN $@"
|
||||
$(V1) $(RM) -fr $(BUILD_DIR)/bl_pipxtreme
|
||||
|
||||
.PHONY: blupd_pipxtreme
|
||||
blupd_pipxtreme: blupd_pipxtreme_bin
|
||||
|
||||
blupd_pipxtreme_%: bl_pipxtreme_bino
|
||||
$(V1) mkdir -p $(BUILD_DIR)/blupd_pipxtreme/dep
|
||||
$(V1) cd $(ROOT_DIR)/flight/Bootloaders/BootloaderUpdater && \
|
||||
$(MAKE) -r --no-print-directory \
|
||||
OUTDIR="$(BUILD_DIR)/blupd_pipxtreme" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \
|
||||
REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" \
|
||||
BOARD=STM32103CB_PIPXTREME MODEL=MD MODEL_SUFFIX=_CC \
|
||||
BLOBJ=$(BUILD_DIR)/bl_pipxtreme/PipXtreme_BL.bin.o $*
|
||||
|
||||
.PHONY: blupd_pipxtreme_clean
|
||||
blupd_pipxtreme_clean:
|
||||
$(V0) @echo " CLEAN $@"
|
||||
$(V1) $(RM) -fr $(BUILD_DIR)/blupd_pipxtreme
|
||||
|
||||
|
||||
.PHONY: ins
|
||||
ins: ins_bin
|
||||
|
||||
ins_%: uavobjects_flight
|
||||
$(V1) mkdir -p $(BUILD_DIR)/ins/dep
|
||||
$(V1) cd $(ROOT_DIR)/flight/INS && \
|
||||
$(MAKE) -r --no-print-directory \
|
||||
OUTDIR="$(BUILD_DIR)/ins" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \
|
||||
REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" $*
|
||||
|
||||
.PHONY: ins_clean
|
||||
ins_clean:
|
||||
$(V0) @echo " CLEAN $@"
|
||||
$(V1) $(RM) -fr $(BUILD_DIR)/ins
|
||||
|
||||
.PHONY: bl_ins
|
||||
bl_ins: bl_ins_elf
|
||||
|
||||
bl_ins_%:
|
||||
$(V1) mkdir -p $(BUILD_DIR)/bl_ins/dep
|
||||
$(V1) cd $(ROOT_DIR)/flight/Bootloaders/INS && \
|
||||
$(MAKE) -r --no-print-directory \
|
||||
OUTDIR="$(BUILD_DIR)/bl_ins" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" \
|
||||
REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" $*
|
||||
|
||||
.PHONY: bl_ins_clean
|
||||
bl_ins_clean:
|
||||
$(V0) @echo " CLEAN $@"
|
||||
$(V1) $(RM) -fr $(BUILD_DIR)/bl_ins
|
||||
# Expand the firmware rules
|
||||
$(foreach board, $(ALL_BOARDS), $(eval $(call FW_TEMPLATE,$(board),$($(board)_friendly))))
|
||||
|
||||
# Expand the bootloader rules
|
||||
$(foreach board, $(ALL_BOARDS), $(eval $(call BL_TEMPLATE,$(board),$($(board)_friendly))))
|
||||
|
||||
.PHONY: sim_posix
|
||||
sim_posix: sim_posix_elf
|
||||
@ -578,9 +502,9 @@ sim_win32_%: uavobjects_flight
|
||||
|
||||
##############################
|
||||
#
|
||||
# Release packaging components
|
||||
# Packaging components
|
||||
#
|
||||
##############################
|
||||
.PHONY: release
|
||||
release:
|
||||
.PHONY: package
|
||||
package:
|
||||
$(V1) cd $@ && $(MAKE) --no-print-directory $@
|
||||
|
BIN
artwork/3D Model/boards/CopterControl/CopterControl.3ds
Normal file
BIN
artwork/3D Model/boards/CopterControl/TEXTURE.PNG
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
artwork/3D Model/multi/joes_cnc/CC.PNG
Normal file
After Width: | Height: | Size: 96 KiB |
BIN
artwork/3D Model/multi/joes_cnc/J14-QT_+.3DS
Normal file
BIN
artwork/3D Model/multi/joes_cnc/J14-QT_+.jpg
Normal file
After Width: | Height: | Size: 125 KiB |
BIN
artwork/3D Model/multi/joes_cnc/J14-QT_X.3DS
Normal file
BIN
artwork/3D Model/multi/joes_cnc/J14-QT_X.jpg
Normal file
After Width: | Height: | Size: 132 KiB |
BIN
artwork/3D Model/multi/joes_cnc/J14-Q_+.3DS
Normal file
BIN
artwork/3D Model/multi/joes_cnc/J14-Q_+.jpg
Normal file
After Width: | Height: | Size: 84 KiB |
BIN
artwork/3D Model/multi/joes_cnc/J14-Q_X.3DS
Normal file
BIN
artwork/3D Model/multi/joes_cnc/J14-Q_X.jpg
Normal file
After Width: | Height: | Size: 84 KiB |
BIN
artwork/3D Model/multi/joes_cnc/TEXTURE.PNG
Normal file
After Width: | Height: | Size: 1.1 KiB |
@ -14,7 +14,7 @@
|
||||
height="80.827866"
|
||||
id="svg10068"
|
||||
version="1.1"
|
||||
inkscape:version="0.47 r22583"
|
||||
inkscape:version="0.48.1 r9760"
|
||||
sodipodi:docname="flightmode-status.svg"
|
||||
inkscape:export-filename="H:\Documents\Hobbies\W433\My Gauges\vbat-001.png"
|
||||
inkscape:export-xdpi="103.61"
|
||||
@ -949,6 +949,94 @@
|
||||
fx="29.77438"
|
||||
fy="7.0922189"
|
||||
r="25.380436" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5224-4"
|
||||
id="radialGradient3197"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.29375,0,18.848047)"
|
||||
cx="14.5"
|
||||
cy="26.6875"
|
||||
fx="14.5"
|
||||
fy="26.6875"
|
||||
r="10" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5224-4"
|
||||
id="radialGradient3199"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.29375,0,18.848047)"
|
||||
cx="14.5"
|
||||
cy="26.6875"
|
||||
fx="14.5"
|
||||
fy="26.6875"
|
||||
r="10" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5237-2"
|
||||
id="radialGradient3201"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.5354369,0,0,1.5485894,-15.737913,-10.36738)"
|
||||
cx="29.392656"
|
||||
cy="18.898249"
|
||||
fx="29.392656"
|
||||
fy="18.898249"
|
||||
r="29.699959" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5300-7"
|
||||
id="radialGradient3203"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.2469896,0,0,2.2469896,-37.128341,-8.8439229)"
|
||||
cx="29.77438"
|
||||
cy="7.0922189"
|
||||
fx="29.77438"
|
||||
fy="7.0922189"
|
||||
r="25.380436" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5224-4"
|
||||
id="radialGradient3231"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.29375,0,18.848047)"
|
||||
cx="14.5"
|
||||
cy="26.6875"
|
||||
fx="14.5"
|
||||
fy="26.6875"
|
||||
r="10" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5224-4"
|
||||
id="radialGradient3233"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.29375,0,18.848047)"
|
||||
cx="14.5"
|
||||
cy="26.6875"
|
||||
fx="14.5"
|
||||
fy="26.6875"
|
||||
r="10" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5237-2"
|
||||
id="radialGradient3235"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.5354369,0,0,1.5485894,-15.737913,-10.36738)"
|
||||
cx="29.392656"
|
||||
cy="18.898249"
|
||||
fx="29.392656"
|
||||
fy="18.898249"
|
||||
r="29.699959" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5300-7"
|
||||
id="radialGradient3237"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.2469896,0,0,2.2469896,-37.128341,-8.8439229)"
|
||||
cx="29.77438"
|
||||
cy="7.0922189"
|
||||
fx="29.77438"
|
||||
fy="7.0922189"
|
||||
r="25.380436" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
@ -958,13 +1046,13 @@
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.979899"
|
||||
inkscape:cx="56.191298"
|
||||
inkscape:cx="-7.1957738"
|
||||
inkscape:cy="90.710362"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:window-height="725"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="691"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
@ -1090,13 +1178,13 @@
|
||||
style="opacity:0.98000004;fill:#ffffff;fill-opacity:1;stroke:#e31717;stroke-width:3.18836617;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
id="value"
|
||||
width="132.66878"
|
||||
height="20.899738"
|
||||
height="13.323594"
|
||||
x="15.425945"
|
||||
y="29.964067"
|
||||
ry="5.4077783"
|
||||
y="33.75214"
|
||||
ry="3.4474616"
|
||||
inkscape:label="#rect2989" />
|
||||
<g
|
||||
id="symbol-Stabilized"
|
||||
id="symbol-Stabilized1"
|
||||
inkscape:label="#g3832"
|
||||
transform="matrix(1.2181818,0,0,1.2181818,-416.7342,39.213763)">
|
||||
<g
|
||||
@ -1297,7 +1385,7 @@
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="symbol-Auto"
|
||||
id="symbol-VelocityControl"
|
||||
inkscape:label="#g4229"
|
||||
transform="matrix(1.2181818,0,0,1.2181818,-132.92733,94.550987)">
|
||||
<g
|
||||
@ -1354,5 +1442,245 @@
|
||||
inkscape:export-xdpi="103.61"
|
||||
inkscape:export-ydpi="103.61" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(1.2181818,0,0,1.2181818,-488.7342,39.213763)"
|
||||
inkscape:label="#g3832"
|
||||
id="symbol-Stabilized2">
|
||||
<g
|
||||
style="display:inline"
|
||||
id="g3173"
|
||||
inkscape:label="#g4504"
|
||||
transform="matrix(1.6946172,0,0,1.6946172,90.69312,69.91641)">
|
||||
<path
|
||||
d="m 24.5,26.6875 c 0,1.622336 -4.477153,2.9375 -10,2.9375 -5.5228475,0 -10,-1.315164 -10,-2.9375 0,-1.622336 4.4771525,-2.9375 10,-2.9375 5.522847,0 10,1.315164 10,2.9375 z"
|
||||
id="path3175"
|
||||
sodipodi:cx="14.5"
|
||||
sodipodi:cy="26.6875"
|
||||
sodipodi:rx="10"
|
||||
sodipodi:ry="2.9375"
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.53012049;color:#000000;fill:url(#radialGradient3197);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter5296-2);enable-background:accumulate"
|
||||
transform="matrix(1.3565115,0,0,1.3564842,148.6163,-105.84566)" />
|
||||
<path
|
||||
d="m 24.5,26.6875 c 0,1.622336 -4.477153,2.9375 -10,2.9375 -5.5228475,0 -10,-1.315164 -10,-2.9375 0,-1.622336 4.4771525,-2.9375 10,-2.9375 5.522847,0 10,1.315164 10,2.9375 z"
|
||||
id="path3177"
|
||||
sodipodi:cx="14.5"
|
||||
sodipodi:cy="26.6875"
|
||||
sodipodi:rx="10"
|
||||
sodipodi:ry="2.9375"
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.80120479;color:#000000;fill:url(#radialGradient3199);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter5296-2);enable-background:accumulate"
|
||||
transform="matrix(0.8476709,0,0,0.8476539,155.99448,-91.479567)" />
|
||||
<path
|
||||
d="m 58.403591,29.207693 c 0,16.022297 -12.988638,29.010935 -29.010935,29.010935 -16.022297,0 -29.0109345,-12.988638 -29.0109345,-29.010935 0,-16.022297 12.9886375,-29.01093473 29.0109345,-29.01093473 16.022297,0 29.010935,12.98863773 29.010935,29.01093473 z"
|
||||
id="path3179"
|
||||
sodipodi:cx="29.392656"
|
||||
sodipodi:cy="29.207693"
|
||||
sodipodi:rx="29.010935"
|
||||
sodipodi:ry="29.010935"
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#radialGradient3201);fill-opacity:1;fill-rule:evenodd;stroke:#d4d0d0;stroke-width:2.19046068;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
transform="matrix(0.4552142,0,0,0.4578395,154.92379,-94.080092)" />
|
||||
<path
|
||||
d="m 53.950159,30.352861 c 0,13.351915 -10.823865,24.17578 -24.175779,24.17578 -13.351915,0 -24.1757796,-10.823865 -24.1757796,-24.17578 0,-13.351914 10.8238646,-24.1757789 24.1757796,-24.1757789 13.351914,0 24.175779,10.8238649 24.175779,24.1757789 z"
|
||||
id="path3181"
|
||||
sodipodi:cx="29.77438"
|
||||
sodipodi:cy="30.352861"
|
||||
sodipodi:rx="24.175779"
|
||||
sodipodi:ry="24.175779"
|
||||
sodipodi:type="arc"
|
||||
style="fill:none;stroke:url(#radialGradient3203);stroke-width:1.98282218;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
transform="matrix(0.5041973,0,0,0.5044661,153.2742,-96.019639)" />
|
||||
</g>
|
||||
<g
|
||||
style="stroke-width:5.32037735;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
id="g3183"
|
||||
transform="matrix(0.33832187,0,0,0.33832187,410.06766,-39.187259)">
|
||||
<path
|
||||
sodipodi:open="true"
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.98000004;fill:none;stroke:#ff4e34;stroke-width:5.56557703;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
|
||||
id="path3185"
|
||||
sodipodi:cx="-102.85714"
|
||||
sodipodi:cy="-85.6007"
|
||||
sodipodi:rx="21.428572"
|
||||
sodipodi:ry="5.7142859"
|
||||
d="m -124.28571,-85.600701 c 0,-3.155913 9.5939,-5.714285 21.42857,-5.714285 11.834674,0 21.428572,2.558373 21.428572,5.714286"
|
||||
transform="matrix(0.9559435,0,0,0.9559435,-2.74581,-3.77127)"
|
||||
sodipodi:start="3.1415927"
|
||||
sodipodi:end="6.2831853" />
|
||||
<path
|
||||
transform="translate(0,-0.35714)"
|
||||
d="m -51.42857,-85.243561 c 0,6.50907 -22.225864,11.785714 -49.64286,11.785714 -27.41699,0 -49.64285,-5.276644 -49.64285,-11.785714 0,-6.50907 22.22586,-11.785714 49.64285,-11.785714 27.416996,0 49.64286,5.276644 49.64286,11.785714 z"
|
||||
sodipodi:ry="11.785714"
|
||||
sodipodi:rx="49.642857"
|
||||
sodipodi:cy="-85.243561"
|
||||
sodipodi:cx="-101.07143"
|
||||
id="path3187"
|
||||
style="opacity:0.98000004;fill:none;stroke:#ff4e34;stroke-width:5.32037735;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
id="path3189"
|
||||
d="m -101.07143,-37.895278 0,-96.382562"
|
||||
style="fill:none;stroke:#ff4e34;stroke-width:5.32037735;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
sodipodi:open="true"
|
||||
transform="matrix(0.9559435,0,0,0.9559435,-2.7458124,-3.7712673)"
|
||||
d="m -81.428568,-85.6007 c 0,3.155913 -9.593898,5.714285 -21.428572,5.714285 -11.83467,0 -21.42857,-2.558372 -21.42857,-5.714285 0,0 0,-10e-7 0,-10e-7"
|
||||
sodipodi:ry="5.7142859"
|
||||
sodipodi:rx="21.428572"
|
||||
sodipodi:cy="-85.6007"
|
||||
sodipodi:cx="-102.85714"
|
||||
id="path3191"
|
||||
style="opacity:0.98000004;fill:none;stroke:#ff4e34;stroke-width:5.56557703;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
sodipodi:type="arc"
|
||||
sodipodi:start="0"
|
||||
sodipodi:end="3.1415927" />
|
||||
<path
|
||||
transform="matrix(1.0062564,0,0,1,1.3510971,0)"
|
||||
d="m -81.42857,-85.6007 c 0,21.6969 -9.114203,39.285713 -20.35714,39.285713 -11.24294,0 -20.35715,-17.588813 -20.35715,-39.285713 0,-21.6969 9.11421,-39.28571 20.35715,-39.28571 11.242937,0 20.35714,17.58881 20.35714,39.28571 z"
|
||||
sodipodi:ry="39.285713"
|
||||
sodipodi:rx="20.357143"
|
||||
sodipodi:cy="-85.6007"
|
||||
sodipodi:cx="-101.78571"
|
||||
id="path3193"
|
||||
style="opacity:0.98000004;fill:none;stroke:#ff4e34;stroke-width:5.30381203;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
sodipodi:open="true"
|
||||
sodipodi:end="3.1415927"
|
||||
sodipodi:start="0"
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.98000004;fill:none;stroke:#ff4e34;stroke-width:5.32037735;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
id="path3195"
|
||||
sodipodi:cx="-101.07143"
|
||||
sodipodi:cy="-85.243561"
|
||||
sodipodi:rx="49.642857"
|
||||
sodipodi:ry="11.785714"
|
||||
d="m -51.42857,-85.243561 c 0,6.50907 -22.225864,11.785714 -49.64286,11.785714 -27.41699,0 -49.64285,-5.276644 -49.64285,-11.785714 0,0 0,0 0,0"
|
||||
transform="translate(0,-0.35713959)" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="symbol-Stabilized3"
|
||||
inkscape:label="#g3832"
|
||||
transform="matrix(1.2181818,0,0,1.2181818,-488.7342,-34.786237)">
|
||||
<g
|
||||
transform="matrix(1.6946172,0,0,1.6946172,90.69312,69.91641)"
|
||||
inkscape:label="#g4504"
|
||||
id="g3207"
|
||||
style="display:inline">
|
||||
<path
|
||||
transform="matrix(1.3565115,0,0,1.3564842,148.6163,-105.84566)"
|
||||
style="opacity:0.53012049;color:#000000;fill:url(#radialGradient3231);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter5296-2);enable-background:accumulate"
|
||||
sodipodi:type="arc"
|
||||
sodipodi:ry="2.9375"
|
||||
sodipodi:rx="10"
|
||||
sodipodi:cy="26.6875"
|
||||
sodipodi:cx="14.5"
|
||||
id="path3209"
|
||||
d="m 24.5,26.6875 c 0,1.622336 -4.477153,2.9375 -10,2.9375 -5.5228475,0 -10,-1.315164 -10,-2.9375 0,-1.622336 4.4771525,-2.9375 10,-2.9375 5.522847,0 10,1.315164 10,2.9375 z" />
|
||||
<path
|
||||
transform="matrix(0.8476709,0,0,0.8476539,155.99448,-91.479567)"
|
||||
style="opacity:0.80120479;color:#000000;fill:url(#radialGradient3233);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter5296-2);enable-background:accumulate"
|
||||
sodipodi:type="arc"
|
||||
sodipodi:ry="2.9375"
|
||||
sodipodi:rx="10"
|
||||
sodipodi:cy="26.6875"
|
||||
sodipodi:cx="14.5"
|
||||
id="path3211"
|
||||
d="m 24.5,26.6875 c 0,1.622336 -4.477153,2.9375 -10,2.9375 -5.5228475,0 -10,-1.315164 -10,-2.9375 0,-1.622336 4.4771525,-2.9375 10,-2.9375 5.522847,0 10,1.315164 10,2.9375 z" />
|
||||
<path
|
||||
transform="matrix(0.4552142,0,0,0.4578395,154.92379,-94.080092)"
|
||||
style="fill:url(#radialGradient3235);fill-opacity:1;fill-rule:evenodd;stroke:#d4d0d0;stroke-width:2.19046068;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
sodipodi:type="arc"
|
||||
sodipodi:ry="29.010935"
|
||||
sodipodi:rx="29.010935"
|
||||
sodipodi:cy="29.207693"
|
||||
sodipodi:cx="29.392656"
|
||||
id="path3213"
|
||||
d="m 58.403591,29.207693 c 0,16.022297 -12.988638,29.010935 -29.010935,29.010935 -16.022297,0 -29.0109345,-12.988638 -29.0109345,-29.010935 0,-16.022297 12.9886375,-29.01093473 29.0109345,-29.01093473 16.022297,0 29.010935,12.98863773 29.010935,29.01093473 z" />
|
||||
<path
|
||||
transform="matrix(0.5041973,0,0,0.5044661,153.2742,-96.019639)"
|
||||
style="fill:none;stroke:url(#radialGradient3237);stroke-width:1.98282218;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
sodipodi:type="arc"
|
||||
sodipodi:ry="24.175779"
|
||||
sodipodi:rx="24.175779"
|
||||
sodipodi:cy="30.352861"
|
||||
sodipodi:cx="29.77438"
|
||||
id="path3215"
|
||||
d="m 53.950159,30.352861 c 0,13.351915 -10.823865,24.17578 -24.175779,24.17578 -13.351915,0 -24.1757796,-10.823865 -24.1757796,-24.17578 0,-13.351914 10.8238646,-24.1757789 24.1757796,-24.1757789 13.351914,0 24.175779,10.8238649 24.175779,24.1757789 z" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.33832187,0,0,0.33832187,410.06766,-39.187259)"
|
||||
id="g3217"
|
||||
style="stroke-width:5.32037735;stroke-miterlimit:4;stroke-dasharray:none">
|
||||
<path
|
||||
sodipodi:end="6.2831853"
|
||||
sodipodi:start="3.1415927"
|
||||
transform="matrix(0.9559435,0,0,0.9559435,-2.74581,-3.77127)"
|
||||
d="m -124.28571,-85.600701 c 0,-3.155913 9.5939,-5.714285 21.42857,-5.714285 11.834674,0 21.428572,2.558373 21.428572,5.714286"
|
||||
sodipodi:ry="5.7142859"
|
||||
sodipodi:rx="21.428572"
|
||||
sodipodi:cy="-85.6007"
|
||||
sodipodi:cx="-102.85714"
|
||||
id="path3219"
|
||||
style="opacity:0.98000004;fill:none;stroke:#ff4e34;stroke-width:5.56557703;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
|
||||
sodipodi:type="arc"
|
||||
sodipodi:open="true" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.98000004;fill:none;stroke:#ff4e34;stroke-width:5.32037735;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
|
||||
id="path3221"
|
||||
sodipodi:cx="-101.07143"
|
||||
sodipodi:cy="-85.243561"
|
||||
sodipodi:rx="49.642857"
|
||||
sodipodi:ry="11.785714"
|
||||
d="m -51.42857,-85.243561 c 0,6.50907 -22.225864,11.785714 -49.64286,11.785714 -27.41699,0 -49.64285,-5.276644 -49.64285,-11.785714 0,-6.50907 22.22586,-11.785714 49.64285,-11.785714 27.416996,0 49.64286,5.276644 49.64286,11.785714 z"
|
||||
transform="translate(0,-0.35714)" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:none;stroke:#ff4e34;stroke-width:5.32037735;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -101.07143,-37.895278 0,-96.382562"
|
||||
id="path3223" />
|
||||
<path
|
||||
sodipodi:end="3.1415927"
|
||||
sodipodi:start="0"
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.98000004;fill:none;stroke:#ff4e34;stroke-width:5.56557703;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
id="path3225"
|
||||
sodipodi:cx="-102.85714"
|
||||
sodipodi:cy="-85.6007"
|
||||
sodipodi:rx="21.428572"
|
||||
sodipodi:ry="5.7142859"
|
||||
d="m -81.428568,-85.6007 c 0,3.155913 -9.593898,5.714285 -21.428572,5.714285 -11.83467,0 -21.42857,-2.558372 -21.42857,-5.714285 0,0 0,-10e-7 0,-10e-7"
|
||||
transform="matrix(0.9559435,0,0,0.9559435,-2.7458124,-3.7712673)"
|
||||
sodipodi:open="true" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.98000004;fill:none;stroke:#ff4e34;stroke-width:5.30381203;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
id="path3227"
|
||||
sodipodi:cx="-101.78571"
|
||||
sodipodi:cy="-85.6007"
|
||||
sodipodi:rx="20.357143"
|
||||
sodipodi:ry="39.285713"
|
||||
d="m -81.42857,-85.6007 c 0,21.6969 -9.114203,39.285713 -20.35714,39.285713 -11.24294,0 -20.35715,-17.588813 -20.35715,-39.285713 0,-21.6969 9.11421,-39.28571 20.35715,-39.28571 11.242937,0 20.35714,17.58881 20.35714,39.28571 z"
|
||||
transform="matrix(1.0062564,0,0,1,1.3510971,0)" />
|
||||
<path
|
||||
transform="translate(0,-0.35713959)"
|
||||
d="m -51.42857,-85.243561 c 0,6.50907 -22.225864,11.785714 -49.64286,11.785714 -27.41699,0 -49.64285,-5.276644 -49.64285,-11.785714 0,0 0,0 0,0"
|
||||
sodipodi:ry="11.785714"
|
||||
sodipodi:rx="49.642857"
|
||||
sodipodi:cy="-85.243561"
|
||||
sodipodi:cx="-101.07143"
|
||||
id="path3229"
|
||||
style="opacity:0.98000004;fill:none;stroke:#ff4e34;stroke-width:5.32037735;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
sodipodi:type="arc"
|
||||
sodipodi:start="0"
|
||||
sodipodi:end="3.1415927"
|
||||
sodipodi:open="true" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 69 KiB |
1329
artwork/Dials/deluxe/lineardial-horizontal.svg
Normal file
@ -0,0 +1,1329 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="280.76797"
|
||||
height="70.597504"
|
||||
id="svg10068"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.1 "
|
||||
sodipodi:docname="lineardial-horizontal.svg"
|
||||
inkscape:export-filename="H:\Documents\Hobbies\W433\My Gauges\vbat-001.png"
|
||||
inkscape:export-xdpi="103.61"
|
||||
inkscape:export-ydpi="103.61"
|
||||
style="display:inline">
|
||||
<defs
|
||||
id="defs10070">
|
||||
<linearGradient
|
||||
id="linearGradient4439">
|
||||
<stop
|
||||
style="stop-color:#1a1a1a;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4441" />
|
||||
<stop
|
||||
id="stop4443"
|
||||
offset="0.19742694"
|
||||
style="stop-color:#808080;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4445" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4413">
|
||||
<stop
|
||||
id="stop4415"
|
||||
offset="0"
|
||||
style="stop-color:#1a1a1a;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1"
|
||||
offset="0.19742694"
|
||||
id="stop4417" />
|
||||
<stop
|
||||
id="stop4419"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4387">
|
||||
<stop
|
||||
id="stop4389"
|
||||
offset="0"
|
||||
style="stop-color:#4d4d4d;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="0.60976541"
|
||||
id="stop4391" />
|
||||
<stop
|
||||
id="stop4393"
|
||||
offset="1"
|
||||
style="stop-color:#4d4d4d;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4361">
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4363" />
|
||||
<stop
|
||||
id="stop4365"
|
||||
offset="0.60976541"
|
||||
style="stop-color:#000000;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4367" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4317">
|
||||
<stop
|
||||
id="stop4319"
|
||||
offset="0"
|
||||
style="stop-color:#4d4d4d;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="0.60976541"
|
||||
id="stop4321" />
|
||||
<stop
|
||||
id="stop4323"
|
||||
offset="1"
|
||||
style="stop-color:#b3b3b3;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4265">
|
||||
<stop
|
||||
style="stop-color:#333333;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4267" />
|
||||
<stop
|
||||
id="stop4269"
|
||||
offset="0.60976541"
|
||||
style="stop-color:#000000;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#333333;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4271" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4239">
|
||||
<stop
|
||||
id="stop4241"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#808080;stop-opacity:1"
|
||||
offset="0.60976541"
|
||||
id="stop4243" />
|
||||
<stop
|
||||
id="stop4245"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4215">
|
||||
<stop
|
||||
style="stop-color:#1a1a1a;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4217" />
|
||||
<stop
|
||||
id="stop4219"
|
||||
offset="0.3051295"
|
||||
style="stop-color:#808080;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4221" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4193">
|
||||
<stop
|
||||
id="stop4195"
|
||||
offset="0"
|
||||
style="stop-color:#1a1a1a;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#999999;stop-opacity:1"
|
||||
offset="0.3051295"
|
||||
id="stop4197" />
|
||||
<stop
|
||||
id="stop4199"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4171">
|
||||
<stop
|
||||
style="stop-color:#1a1a1a;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4173" />
|
||||
<stop
|
||||
id="stop4175"
|
||||
offset="0.3051295"
|
||||
style="stop-color:#666666;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#1a1a1a;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4177" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4121">
|
||||
<stop
|
||||
id="stop4123"
|
||||
offset="0"
|
||||
style="stop-color:#1a1a1a;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#666666;stop-opacity:1"
|
||||
offset="0.2984421"
|
||||
id="stop4125" />
|
||||
<stop
|
||||
id="stop4127"
|
||||
offset="1"
|
||||
style="stop-color:#1a1a1a;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4085">
|
||||
<stop
|
||||
style="stop-color:#1a1a1a;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4087" />
|
||||
<stop
|
||||
id="stop4089"
|
||||
offset="0.2984421"
|
||||
style="stop-color:#999999;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#1a1a1a;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4091" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4063">
|
||||
<stop
|
||||
id="stop4065"
|
||||
offset="0"
|
||||
style="stop-color:#1a1a1a;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#b3b3b3;stop-opacity:1"
|
||||
offset="0.39999998"
|
||||
id="stop4067" />
|
||||
<stop
|
||||
id="stop4069"
|
||||
offset="1"
|
||||
style="stop-color:#1a1a1a;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4027">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4029" />
|
||||
<stop
|
||||
id="stop4031"
|
||||
offset="0.31880337"
|
||||
style="stop-color:#b3b3b3;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4033" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3903">
|
||||
<stop
|
||||
id="stop3905"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="0.3220683"
|
||||
id="stop3907" />
|
||||
<stop
|
||||
id="stop3909"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5375">
|
||||
<stop
|
||||
style="stop-color:#00000c;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5377" />
|
||||
<stop
|
||||
id="stop5383"
|
||||
offset="0.34210527"
|
||||
style="stop-color:#0044d8;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#00000c;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5379" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5367">
|
||||
<stop
|
||||
style="stop-color:#000020;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5369" />
|
||||
<stop
|
||||
id="stop5371"
|
||||
offset="1"
|
||||
style="stop-color:#000018;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5359">
|
||||
<stop
|
||||
style="stop-color:#00002c;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5361" />
|
||||
<stop
|
||||
id="stop5363"
|
||||
offset="0.32456139"
|
||||
style="stop-color:#00ffff;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#00c8fc;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5365" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5346">
|
||||
<stop
|
||||
id="stop5348"
|
||||
offset="0"
|
||||
style="stop-color:#1a1a1a;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#666666;stop-opacity:1"
|
||||
offset="0.37595931"
|
||||
id="stop5350" />
|
||||
<stop
|
||||
id="stop5352"
|
||||
offset="1"
|
||||
style="stop-color:#1a1a1a;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5326">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5328" />
|
||||
<stop
|
||||
id="stop5330"
|
||||
offset="0.35277387"
|
||||
style="stop-color:#4d4d4d;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5332" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5306">
|
||||
<stop
|
||||
id="stop5308"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#808080;stop-opacity:1"
|
||||
offset="0.35277387"
|
||||
id="stop5310" />
|
||||
<stop
|
||||
id="stop5312"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5271">
|
||||
<stop
|
||||
id="stop5273"
|
||||
offset="0"
|
||||
style="stop-color:#000080;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#00ffff;stop-opacity:1"
|
||||
offset="0.32456139"
|
||||
id="stop5275" />
|
||||
<stop
|
||||
id="stop5277"
|
||||
offset="1"
|
||||
style="stop-color:#000080;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5248">
|
||||
<stop
|
||||
style="stop-color:#000080;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5250" />
|
||||
<stop
|
||||
id="stop5256"
|
||||
offset="0.32456139"
|
||||
style="stop-color:#00ffff;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#000080;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5252" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5236">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5238" />
|
||||
<stop
|
||||
id="stop5244"
|
||||
offset="0.5"
|
||||
style="stop-color:#000000;stop-opacity:0.49803922;" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5240" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5219">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5221" />
|
||||
<stop
|
||||
id="stop5223"
|
||||
offset="0.35277387"
|
||||
style="stop-color:#b3b3b3;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#1a1a1a;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5225" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5151">
|
||||
<stop
|
||||
id="stop5153"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#b3b3b3;stop-opacity:1"
|
||||
offset="0.38512576"
|
||||
id="stop5155" />
|
||||
<stop
|
||||
id="stop5157"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5129">
|
||||
<stop
|
||||
style="stop-color:#1a1a1a;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5131" />
|
||||
<stop
|
||||
id="stop5137"
|
||||
offset="0.38512576"
|
||||
style="stop-color:#cccccc;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5133" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5116">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5118" />
|
||||
<stop
|
||||
id="stop5124"
|
||||
offset="0.35911319"
|
||||
style="stop-color:#dcaf28;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5120" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5106">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5108" />
|
||||
<stop
|
||||
id="stop5114"
|
||||
offset="0.36023793"
|
||||
style="stop-color:#00a000;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5110" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5096">
|
||||
<stop
|
||||
style="stop-color:#100000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5098" />
|
||||
<stop
|
||||
id="stop5104"
|
||||
offset="0.36453304"
|
||||
style="stop-color:#aa0000;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#0c0000;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5100" />
|
||||
</linearGradient>
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Sstart"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Sstart"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path4640"
|
||||
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="matrix(0.3,0,0,0.3,-0.69,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 526.18109 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
||||
id="perspective10076" />
|
||||
<inkscape:perspective
|
||||
id="perspective9987"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective10250"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective10279"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective10517"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective11202"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3720"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3735"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3757"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3828"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3889"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3925"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3968"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3982"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective4682"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3347"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective5659"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective5719"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective5810"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3546"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective4328"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient8928"
|
||||
id="linearGradient5318"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.2532936,0,0,2.206809,446.89077,-285.33499)"
|
||||
x1="-29.837337"
|
||||
y1="285.0596"
|
||||
x2="-29.837337"
|
||||
y2="342.60553" />
|
||||
<linearGradient
|
||||
id="linearGradient8928">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0.89156628;"
|
||||
offset="0"
|
||||
id="stop8930" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop8932" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
id="perspective4367"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective4402"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective2940"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective2864"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5096"
|
||||
id="linearGradient5102"
|
||||
x1="117.41457"
|
||||
y1="168.83261"
|
||||
x2="87.074203"
|
||||
y2="168.83261"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0,0.99999995,-0.99999975,0,-11.23354,-270.8763)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5106"
|
||||
id="linearGradient5112"
|
||||
x1="117.57944"
|
||||
y1="173.46591"
|
||||
x2="86.644958"
|
||||
y2="173.46591"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0,0.99999997,-1,0,-11.23354,-270.8763)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5116"
|
||||
id="linearGradient5122"
|
||||
x1="117.77806"
|
||||
y1="168.82289"
|
||||
x2="86.547356"
|
||||
y2="168.82289"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0,1,-1,0,-11.23354,-270.8763)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5129"
|
||||
id="linearGradient5135"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-246.82069"
|
||||
y2="408.26157"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5129"
|
||||
id="linearGradient5144"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-246.82069"
|
||||
y2="408.26157" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5151"
|
||||
id="linearGradient5149"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-246.82069"
|
||||
y2="408.26157" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5151"
|
||||
id="linearGradient5164"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-246.82069"
|
||||
y2="408.26157" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5151"
|
||||
id="linearGradient5169"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-246.82069"
|
||||
y2="408.26157" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5151"
|
||||
id="linearGradient5176"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-246.82069"
|
||||
y2="408.26157" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5151"
|
||||
id="linearGradient5181"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-246.82069"
|
||||
y2="408.26157" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5151"
|
||||
id="linearGradient5188"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-246.82069"
|
||||
y2="408.26157" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5151"
|
||||
id="linearGradient5193"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-246.82069"
|
||||
y2="408.26157" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5151"
|
||||
id="linearGradient5200"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-246.82069"
|
||||
y2="408.26157" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5151"
|
||||
id="linearGradient5205"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-246.82069"
|
||||
y2="408.26157" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5151"
|
||||
id="linearGradient5212"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-246.82069"
|
||||
y2="408.26157" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5219"
|
||||
id="linearGradient5217"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-247.44464"
|
||||
y2="412.00528" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5236"
|
||||
id="linearGradient5242"
|
||||
x1="3.7395172"
|
||||
y1="59.899364"
|
||||
x2="42.432911"
|
||||
y2="59.899364"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(129.62194,-129.52019)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5248"
|
||||
id="linearGradient5254"
|
||||
x1="-172.83463"
|
||||
y1="74.562233"
|
||||
x2="-137.26938"
|
||||
y2="74.562233"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5271"
|
||||
id="linearGradient5285"
|
||||
x1="-172.83463"
|
||||
y1="74.562233"
|
||||
x2="-137.26938"
|
||||
y2="74.562233"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.58333333,-2.7039997e-8,32.705471)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5219"
|
||||
id="linearGradient5287"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-247.44464"
|
||||
y2="412.00528" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5219"
|
||||
id="linearGradient5292"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-247.44464"
|
||||
y2="412.00528" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5219"
|
||||
id="linearGradient5299"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-247.44464"
|
||||
y2="412.00528" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5306"
|
||||
id="linearGradient5304"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-247.44464"
|
||||
y2="412.00528" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5306"
|
||||
id="linearGradient5319"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-247.44464"
|
||||
y2="412.00528" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5326"
|
||||
id="linearGradient5324"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-247.44464"
|
||||
y2="412.00528" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5326"
|
||||
id="linearGradient5339"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-247.44464"
|
||||
y2="412.00528" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5375"
|
||||
id="linearGradient5381"
|
||||
x1="-172.83463"
|
||||
y1="74.562233"
|
||||
x2="-137.26938"
|
||||
y2="74.562233"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(128.37404,-129.52019)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3903"
|
||||
id="linearGradient3899"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0,-0.99999988,1.7142859,0,35.373449,-317.43383)"
|
||||
x1="-150.75359"
|
||||
y1="68.860146"
|
||||
x2="-150.75359"
|
||||
y2="87.776077" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4317"
|
||||
id="linearGradient4337"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-384.0242"
|
||||
y1="-558.1579"
|
||||
x2="-384.0242"
|
||||
y2="-510.8558" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4215"
|
||||
id="linearGradient4340"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0,0.99999998,-0.99999991,0,-11.233538,-270.87634)"
|
||||
x1="-235.30438"
|
||||
y1="369.2117"
|
||||
x2="-299.45587"
|
||||
y2="369.2117" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4215"
|
||||
id="linearGradient4349"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0,0.99999998,-0.99999991,0,-11.233538,-270.87634)"
|
||||
x1="-235.30438"
|
||||
y1="369.2117"
|
||||
x2="-299.45587"
|
||||
y2="369.2117" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4317"
|
||||
id="linearGradient4351"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-384.0242"
|
||||
y1="-558.1579"
|
||||
x2="-384.0242"
|
||||
y2="-510.8558" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4361"
|
||||
id="linearGradient4355"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-384.0242"
|
||||
y1="-558.1579"
|
||||
x2="-383.71014"
|
||||
y2="-510.8558" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4215"
|
||||
id="linearGradient4358"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0,0.99999998,-0.99999991,0,-11.233538,-270.87634)"
|
||||
x1="-235.30438"
|
||||
y1="369.2117"
|
||||
x2="-299.45587"
|
||||
y2="369.2117" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4215"
|
||||
id="linearGradient4375"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0,0.99999998,-0.99999991,0,-11.233538,-270.87634)"
|
||||
x1="-235.30438"
|
||||
y1="369.2117"
|
||||
x2="-299.45587"
|
||||
y2="369.2117" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4361"
|
||||
id="linearGradient4377"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-384.0242"
|
||||
y1="-558.1579"
|
||||
x2="-383.71014"
|
||||
y2="-510.8558" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4387"
|
||||
id="linearGradient4381"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-383.39609"
|
||||
y1="-561.92657"
|
||||
x2="-383.71014"
|
||||
y2="-510.8558" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4215"
|
||||
id="linearGradient4384"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0,0.99999998,-0.99999991,0,-11.233538,-270.87634)"
|
||||
x1="-235.30438"
|
||||
y1="369.2117"
|
||||
x2="-299.45587"
|
||||
y2="369.2117" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4215"
|
||||
id="linearGradient4401"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0,0.99999998,-0.99999991,0,-11.233536,-270.87635)"
|
||||
x1="-235.30438"
|
||||
y1="369.2117"
|
||||
x2="-299.45587"
|
||||
y2="369.2117" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4387"
|
||||
id="linearGradient4403"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-383.39609"
|
||||
y1="-561.92657"
|
||||
x2="-383.71014"
|
||||
y2="-510.8558"
|
||||
gradientTransform="translate(2.3925782e-6,-1.3232422e-5)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4387"
|
||||
id="linearGradient4407"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(2.3925782e-6,-1.3232422e-5)"
|
||||
x1="-383.39609"
|
||||
y1="-561.92657"
|
||||
x2="-383.71014"
|
||||
y2="-510.8558" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4413"
|
||||
id="linearGradient4410"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0,0.99999998,-0.99999991,0,-11.233536,-270.87635)"
|
||||
x1="-235.30438"
|
||||
y1="369.2117"
|
||||
x2="-299.45587"
|
||||
y2="369.2117" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4413"
|
||||
id="linearGradient4427"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0,0.99999998,-0.99999991,0,-11.233536,-270.87635)"
|
||||
x1="-235.30438"
|
||||
y1="369.2117"
|
||||
x2="-299.45587"
|
||||
y2="369.2117" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4387"
|
||||
id="linearGradient4429"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(2.3925782e-6,-1.3232422e-5)"
|
||||
x1="-383.39609"
|
||||
y1="-561.92657"
|
||||
x2="-383.71014"
|
||||
y2="-510.8558" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4387"
|
||||
id="linearGradient4433"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(2.3925782e-6,-1.3232422e-5)"
|
||||
x1="-383.39609"
|
||||
y1="-561.92657"
|
||||
x2="-383.71014"
|
||||
y2="-510.8558" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4439"
|
||||
id="linearGradient4436"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0,0.99999998,-0.99999991,0,-11.233536,-270.87635)"
|
||||
x1="-235.30438"
|
||||
y1="369.2117"
|
||||
x2="-299.45587"
|
||||
y2="369.2117" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="3.1841238"
|
||||
inkscape:cx="140.38399"
|
||||
inkscape:cy="35.455778"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer5"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="706"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:object-paths="true"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:snap-to-guides="false"
|
||||
inkscape:snap-grids="false"
|
||||
inkscape:snap-global="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<metadata
|
||||
id="metadata10073">
|
||||
<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>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Edouard Lafargue</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
style="display:inline"
|
||||
inkscape:label="Dark background"
|
||||
id="g2932"
|
||||
inkscape:groupmode="layer"
|
||||
transform="translate(-368.2988,-507.08981)"
|
||||
sodipodi:insensitive="true">
|
||||
<g
|
||||
id="background"
|
||||
inkscape:label="#g4447">
|
||||
<rect
|
||||
inkscape:export-ydpi="88.809998"
|
||||
inkscape:export-xdpi="88.809998"
|
||||
inkscape:export-filename="H:\Documents\Hobbies\W433\g9905.png"
|
||||
ry="4.5346842"
|
||||
y="-577.68732"
|
||||
x="-616.67365"
|
||||
height="61.448738"
|
||||
width="226.5451"
|
||||
id="rect3145"
|
||||
style="fill:none;stroke:none"
|
||||
transform="scale(-1,-1)" />
|
||||
<rect
|
||||
transform="scale(-1,-1)"
|
||||
style="fill:url(#linearGradient4436);fill-opacity:1;stroke:none"
|
||||
id="rect2936"
|
||||
width="280.76797"
|
||||
height="53.465179"
|
||||
x="-649.06677"
|
||||
y="-560.55499"
|
||||
ry="3.9455285"
|
||||
inkscape:export-filename="H:\Documents\Hobbies\W433\g9905.png"
|
||||
inkscape:export-xdpi="88.809998"
|
||||
inkscape:export-ydpi="88.809998" />
|
||||
<rect
|
||||
transform="scale(-1,-1)"
|
||||
inkscape:label="#rect4388"
|
||||
inkscape:export-ydpi="88.809998"
|
||||
inkscape:export-xdpi="88.809998"
|
||||
inkscape:export-filename="H:\Documents\Hobbies\W433\g9905.png"
|
||||
ry="2.9134333"
|
||||
y="-554.10626"
|
||||
x="-642.96082"
|
||||
height="39.479435"
|
||||
width="267.02957"
|
||||
id="bargraph-outer"
|
||||
style="fill:url(#linearGradient4433);fill-opacity:1;stroke:none" />
|
||||
<rect
|
||||
transform="scale(-1,-1)"
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="bargraph"
|
||||
width="262.18338"
|
||||
height="32.956219"
|
||||
x="-640.57104"
|
||||
y="-550.64001"
|
||||
ry="2.432044"
|
||||
inkscape:export-filename="H:\Documents\Hobbies\W433\g9905.png"
|
||||
inkscape:export-xdpi="88.809998"
|
||||
inkscape:export-ydpi="88.809998"
|
||||
inkscape:label="#rect4388" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer5"
|
||||
inkscape:label="Green Zone"
|
||||
style="display:inline"
|
||||
transform="translate(-140.85549,-141.35611)"
|
||||
sodipodi:insensitive="true">
|
||||
<rect
|
||||
inkscape:label="#rect5741"
|
||||
style="fill:url(#linearGradient5112);fill-opacity:1;stroke:none;display:inline"
|
||||
id="green"
|
||||
width="260.53882"
|
||||
height="32.20755"
|
||||
x="-411.77084"
|
||||
y="-184.00433"
|
||||
ry="2.3767958"
|
||||
inkscape:export-filename="H:\Documents\Hobbies\W433\g9905.png"
|
||||
inkscape:export-xdpi="88.809998"
|
||||
inkscape:export-ydpi="88.809998"
|
||||
transform="scale(-1,-1)" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer4"
|
||||
inkscape:label="Yellow Zone"
|
||||
style="display:none"
|
||||
transform="translate(-140.85549,-141.35611)"
|
||||
sodipodi:insensitive="true">
|
||||
<rect
|
||||
inkscape:export-ydpi="88.809998"
|
||||
inkscape:export-xdpi="88.809998"
|
||||
inkscape:export-filename="H:\Documents\Hobbies\W433\g9905.png"
|
||||
ry="2.4231479"
|
||||
y="-184.63248"
|
||||
x="-411.45679"
|
||||
height="32.835663"
|
||||
width="260.53882"
|
||||
id="yellow"
|
||||
style="fill:url(#linearGradient5122);fill-opacity:1;stroke:none;display:inline"
|
||||
inkscape:label="#rect5741"
|
||||
transform="scale(-1,-1)" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer3"
|
||||
inkscape:label="Red zone"
|
||||
style="display:none"
|
||||
transform="translate(-140.85549,-141.35611)"
|
||||
sodipodi:insensitive="true">
|
||||
<rect
|
||||
inkscape:label="#rect5741"
|
||||
style="fill:url(#linearGradient5102);fill-opacity:1;stroke:none;display:inline"
|
||||
id="red"
|
||||
width="260.23901"
|
||||
height="32.519711"
|
||||
x="-411.38739"
|
||||
y="-184.35484"
|
||||
ry="2.399832"
|
||||
inkscape:export-filename="H:\Documents\Hobbies\W433\g9905.png"
|
||||
inkscape:export-xdpi="88.809998"
|
||||
inkscape:export-ydpi="88.809998"
|
||||
transform="scale(-1,-1)" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer6"
|
||||
inkscape:label="Indicator"
|
||||
style="display:inline"
|
||||
transform="translate(-140.85549,-141.35611)"
|
||||
sodipodi:insensitive="true">
|
||||
<rect
|
||||
style="fill:url(#linearGradient3899);fill-opacity:1;stroke:#000000;stroke-width:0.2964696;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
id="needle"
|
||||
width="32.035065"
|
||||
height="6.0045304"
|
||||
x="152.63882"
|
||||
y="-157.12926"
|
||||
inkscape:label="#rect5246"
|
||||
transform="matrix(0,1,-1,0,0,0)" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:label="Text"
|
||||
style="display:inline"
|
||||
transform="translate(-140.85549,-141.35611)"
|
||||
sodipodi:insensitive="true">
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none"
|
||||
id="field"
|
||||
width="50.321022"
|
||||
height="13.236827"
|
||||
x="-201.80493"
|
||||
y="-209.93616"
|
||||
inkscape:label="#rect2878"
|
||||
transform="scale(-1,-1)" />
|
||||
<rect
|
||||
inkscape:label="#rect2878"
|
||||
y="-209.5061"
|
||||
x="-405.05276"
|
||||
height="13.236827"
|
||||
width="51.71294"
|
||||
id="value"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none"
|
||||
transform="scale(-1,-1)" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 39 KiB |
929
artwork/Dials/deluxe/lineardial-vertical.svg
Normal file
@ -0,0 +1,929 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="47.012333"
|
||||
height="322.58304"
|
||||
id="svg10068"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.1 "
|
||||
sodipodi:docname="lineardial-vertical.svg"
|
||||
inkscape:export-filename="H:\Documents\Hobbies\W433\My Gauges\vbat-001.png"
|
||||
inkscape:export-xdpi="103.61"
|
||||
inkscape:export-ydpi="103.61"
|
||||
style="display:inline">
|
||||
<defs
|
||||
id="defs10070">
|
||||
<linearGradient
|
||||
id="linearGradient3903">
|
||||
<stop
|
||||
id="stop3905"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="0.39386007"
|
||||
id="stop3907" />
|
||||
<stop
|
||||
id="stop3909"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5375">
|
||||
<stop
|
||||
style="stop-color:#00000c;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5377" />
|
||||
<stop
|
||||
id="stop5383"
|
||||
offset="0.34210527"
|
||||
style="stop-color:#0044d8;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#00000c;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5379" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5367">
|
||||
<stop
|
||||
style="stop-color:#000020;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5369" />
|
||||
<stop
|
||||
id="stop5371"
|
||||
offset="1"
|
||||
style="stop-color:#000018;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5359">
|
||||
<stop
|
||||
style="stop-color:#00002c;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5361" />
|
||||
<stop
|
||||
id="stop5363"
|
||||
offset="0.32456139"
|
||||
style="stop-color:#00ffff;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#00c8fc;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5365" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5346">
|
||||
<stop
|
||||
id="stop5348"
|
||||
offset="0"
|
||||
style="stop-color:#1a1a1a;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#666666;stop-opacity:1"
|
||||
offset="0.35277387"
|
||||
id="stop5350" />
|
||||
<stop
|
||||
id="stop5352"
|
||||
offset="1"
|
||||
style="stop-color:#1a1a1a;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5326">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5328" />
|
||||
<stop
|
||||
id="stop5330"
|
||||
offset="0.35277387"
|
||||
style="stop-color:#4d4d4d;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5332" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5306">
|
||||
<stop
|
||||
id="stop5308"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#808080;stop-opacity:1"
|
||||
offset="0.35277387"
|
||||
id="stop5310" />
|
||||
<stop
|
||||
id="stop5312"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5271">
|
||||
<stop
|
||||
id="stop5273"
|
||||
offset="0"
|
||||
style="stop-color:#000080;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#00ffff;stop-opacity:1"
|
||||
offset="0.32456139"
|
||||
id="stop5275" />
|
||||
<stop
|
||||
id="stop5277"
|
||||
offset="1"
|
||||
style="stop-color:#000080;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5248">
|
||||
<stop
|
||||
style="stop-color:#000080;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5250" />
|
||||
<stop
|
||||
id="stop5256"
|
||||
offset="0.32456139"
|
||||
style="stop-color:#00ffff;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#000080;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5252" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5236">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5238" />
|
||||
<stop
|
||||
id="stop5244"
|
||||
offset="0.5"
|
||||
style="stop-color:#000000;stop-opacity:0.49803922;" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5240" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5219">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5221" />
|
||||
<stop
|
||||
id="stop5223"
|
||||
offset="0.35277387"
|
||||
style="stop-color:#b3b3b3;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#1a1a1a;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5225" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5151">
|
||||
<stop
|
||||
id="stop5153"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#b3b3b3;stop-opacity:1"
|
||||
offset="0.38512576"
|
||||
id="stop5155" />
|
||||
<stop
|
||||
id="stop5157"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5129">
|
||||
<stop
|
||||
style="stop-color:#1a1a1a;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5131" />
|
||||
<stop
|
||||
id="stop5137"
|
||||
offset="0.38512576"
|
||||
style="stop-color:#cccccc;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5133" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5116">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5118" />
|
||||
<stop
|
||||
id="stop5124"
|
||||
offset="0.37640449"
|
||||
style="stop-color:#dcaf28;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5120" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5106">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5108" />
|
||||
<stop
|
||||
id="stop5114"
|
||||
offset="0.38184431"
|
||||
style="stop-color:#00a000;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5110" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5096">
|
||||
<stop
|
||||
style="stop-color:#100000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5098" />
|
||||
<stop
|
||||
id="stop5104"
|
||||
offset="0.39717463"
|
||||
style="stop-color:#aa0000;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#0c0000;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5100" />
|
||||
</linearGradient>
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Sstart"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Sstart"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path4640"
|
||||
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="matrix(0.3,0,0,0.3,-0.69,0)" />
|
||||
</marker>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 526.18109 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
||||
id="perspective10076" />
|
||||
<inkscape:perspective
|
||||
id="perspective9987"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective10250"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective10279"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective10517"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective11202"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3720"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3735"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3757"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3828"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3889"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3925"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3968"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3982"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective4682"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3347"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective5659"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective5719"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective5810"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3546"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective4328"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient8928"
|
||||
id="linearGradient5318"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.2532936,0,0,2.206809,446.89077,-285.33499)"
|
||||
x1="-29.837337"
|
||||
y1="285.0596"
|
||||
x2="-29.837337"
|
||||
y2="342.60553" />
|
||||
<linearGradient
|
||||
id="linearGradient8928">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0.89156628;"
|
||||
offset="0"
|
||||
id="stop8930" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop8932" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
id="perspective4367"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective4402"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective2940"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective2864"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5096"
|
||||
id="linearGradient5102"
|
||||
x1="-58.661255"
|
||||
y1="132.84332"
|
||||
x2="-58.661255"
|
||||
y2="169.46072"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5106"
|
||||
id="linearGradient5112"
|
||||
x1="-38.946774"
|
||||
y1="133.15433"
|
||||
x2="-38.946774"
|
||||
y2="168.58655"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5116"
|
||||
id="linearGradient5122"
|
||||
x1="-17.108463"
|
||||
y1="133.16322"
|
||||
x2="-17.108463"
|
||||
y2="168.82289"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5129"
|
||||
id="linearGradient5135"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-246.82069"
|
||||
y2="408.26157"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5129"
|
||||
id="linearGradient5144"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-246.82069"
|
||||
y2="408.26157" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5151"
|
||||
id="linearGradient5149"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-246.82069"
|
||||
y2="408.26157" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5151"
|
||||
id="linearGradient5164"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-246.82069"
|
||||
y2="408.26157" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5151"
|
||||
id="linearGradient5169"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-246.82069"
|
||||
y2="408.26157" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5151"
|
||||
id="linearGradient5176"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-246.82069"
|
||||
y2="408.26157" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5151"
|
||||
id="linearGradient5181"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-246.82069"
|
||||
y2="408.26157" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5151"
|
||||
id="linearGradient5188"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-246.82069"
|
||||
y2="408.26157" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5151"
|
||||
id="linearGradient5193"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-246.82069"
|
||||
y2="408.26157" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5151"
|
||||
id="linearGradient5200"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-246.82069"
|
||||
y2="408.26157" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5151"
|
||||
id="linearGradient5205"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-246.82069"
|
||||
y2="408.26157" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5151"
|
||||
id="linearGradient5212"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-246.82069"
|
||||
y2="408.26157" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5219"
|
||||
id="linearGradient5217"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-247.44464"
|
||||
y2="412.00528" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5236"
|
||||
id="linearGradient5242"
|
||||
x1="3.7395172"
|
||||
y1="59.899365"
|
||||
x2="42.43291"
|
||||
y2="59.899365"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(129.62194,-129.52019)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5248"
|
||||
id="linearGradient5254"
|
||||
x1="-172.83463"
|
||||
y1="74.562234"
|
||||
x2="-137.26938"
|
||||
y2="74.562234"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5271"
|
||||
id="linearGradient5285"
|
||||
x1="-172.83463"
|
||||
y1="74.562233"
|
||||
x2="-137.26938"
|
||||
y2="74.562233"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.58333333,-2.7039997e-8,32.705471)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5219"
|
||||
id="linearGradient5287"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-247.44464"
|
||||
y2="412.00528" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5219"
|
||||
id="linearGradient5292"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-247.44464"
|
||||
y2="412.00528" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5219"
|
||||
id="linearGradient5299"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-247.44464"
|
||||
y2="412.00528" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5306"
|
||||
id="linearGradient5304"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-247.44464"
|
||||
y2="412.00528" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5306"
|
||||
id="linearGradient5319"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-247.44464"
|
||||
y2="412.00528" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5326"
|
||||
id="linearGradient5324"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-247.44464"
|
||||
y2="412.00528" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5326"
|
||||
id="linearGradient5339"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-247.44464"
|
||||
y2="412.00528" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5346"
|
||||
id="linearGradient5344"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-246.82069"
|
||||
y1="353.9455"
|
||||
x2="-247.44464"
|
||||
y2="412.00528" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5375"
|
||||
id="linearGradient5381"
|
||||
x1="-172.83463"
|
||||
y1="74.562234"
|
||||
x2="-137.26938"
|
||||
y2="74.562234"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(128.37404,-129.52019)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3903"
|
||||
id="linearGradient3899"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.99999998,0,0,1.7142857,306.20028,-235.50286)"
|
||||
x1="-172.33069"
|
||||
y1="74.562233"
|
||||
x2="-135.50557"
|
||||
y2="74.562233" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.9843492"
|
||||
inkscape:cx="13.888309"
|
||||
inkscape:cy="302.67927"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer6"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="706"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:object-paths="true"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:snap-to-guides="false"
|
||||
inkscape:snap-grids="false"
|
||||
inkscape:snap-global="false" />
|
||||
<metadata
|
||||
id="metadata10073">
|
||||
<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:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Edouard Lafargue</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
style="display:inline"
|
||||
inkscape:label="Dark background"
|
||||
id="g2932"
|
||||
inkscape:groupmode="layer"
|
||||
transform="translate(-357.06525,-236.21351)"
|
||||
sodipodi:insensitive="true">
|
||||
<g
|
||||
id="background"
|
||||
inkscape:label="#g5354">
|
||||
<rect
|
||||
transform="matrix(0,-1,1,0,0,0)"
|
||||
style="fill:url(#linearGradient5344);fill-opacity:1;stroke:none"
|
||||
id="rect2936"
|
||||
width="318.58304"
|
||||
height="46.756046"
|
||||
x="-556.79657"
|
||||
y="358.44128"
|
||||
ry="3.4504199"
|
||||
inkscape:export-filename="H:\Documents\Hobbies\W433\g9905.png"
|
||||
inkscape:export-xdpi="88.809998"
|
||||
inkscape:export-ydpi="88.809998" />
|
||||
<rect
|
||||
transform="matrix(0,-1,1,0,0,0)"
|
||||
style="fill:#332d2d;fill-opacity:1;stroke:none"
|
||||
id="bargraph"
|
||||
width="260.53882"
|
||||
height="34.835861"
|
||||
x="-519.56018"
|
||||
y="362.7359"
|
||||
ry="2.5707548"
|
||||
inkscape:export-filename="H:\Documents\Hobbies\W433\g9905.png"
|
||||
inkscape:export-xdpi="88.809998"
|
||||
inkscape:export-ydpi="88.809998"
|
||||
inkscape:label="#rect4388" />
|
||||
<rect
|
||||
transform="matrix(0,-1,1,0,0,0)"
|
||||
inkscape:label="#rect4388"
|
||||
inkscape:export-ydpi="88.809998"
|
||||
inkscape:export-xdpi="88.809998"
|
||||
inkscape:export-filename="H:\Documents\Hobbies\W433\g9905.png"
|
||||
ry="2.2944832"
|
||||
y="365.23175"
|
||||
x="-519.56018"
|
||||
height="31.09215"
|
||||
width="260.53882"
|
||||
id="bargraph-outer"
|
||||
style="fill:#332d2d;fill-opacity:1;stroke:none" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer5"
|
||||
inkscape:label="Green Zone"
|
||||
style="display:inline"
|
||||
transform="translate(-129.62194,129.52019)"
|
||||
sodipodi:insensitive="true">
|
||||
<rect
|
||||
inkscape:label="#rect5741"
|
||||
style="fill:url(#linearGradient5112);fill-opacity:1;stroke:none;display:inline"
|
||||
id="green"
|
||||
width="260.53882"
|
||||
height="34.0919"
|
||||
x="-153.97397"
|
||||
y="134.02345"
|
||||
ry="2.5158536"
|
||||
inkscape:export-filename="H:\Documents\Hobbies\W433\g9905.png"
|
||||
inkscape:export-xdpi="88.809998"
|
||||
inkscape:export-ydpi="88.809998"
|
||||
transform="matrix(0,-1,1,0,0,0)" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer4"
|
||||
inkscape:label="Yellow Zone"
|
||||
style="display:none"
|
||||
transform="translate(-129.62194,129.52019)"
|
||||
sodipodi:insensitive="true">
|
||||
<rect
|
||||
inkscape:export-ydpi="88.809998"
|
||||
inkscape:export-xdpi="88.809998"
|
||||
inkscape:export-filename="H:\Documents\Hobbies\W433\g9905.png"
|
||||
ry="2.5158532"
|
||||
y="134.02345"
|
||||
x="-153.97397"
|
||||
height="34.091896"
|
||||
width="260.53882"
|
||||
id="yellow"
|
||||
style="fill:url(#linearGradient5122);fill-opacity:1;stroke:none;display:inline"
|
||||
inkscape:label="#rect5741"
|
||||
transform="matrix(0,-1,1,0,0,0)" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer3"
|
||||
inkscape:label="Red zone"
|
||||
style="display:none"
|
||||
transform="translate(-129.62194,129.52019)"
|
||||
sodipodi:insensitive="true">
|
||||
<rect
|
||||
inkscape:label="#rect5741"
|
||||
style="fill:url(#linearGradient5102);fill-opacity:1;stroke:none;display:inline"
|
||||
id="red"
|
||||
width="260.53882"
|
||||
height="34.589863"
|
||||
x="-154.0755"
|
||||
y="134.00487"
|
||||
ry="2.5526016"
|
||||
inkscape:export-filename="H:\Documents\Hobbies\W433\g9905.png"
|
||||
inkscape:export-xdpi="88.809998"
|
||||
inkscape:export-ydpi="88.809998"
|
||||
transform="matrix(0,-1,1,0,0,0)" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer6"
|
||||
inkscape:label="Indicator"
|
||||
style="display:inline"
|
||||
transform="translate(-129.62194,129.52019)">
|
||||
<rect
|
||||
style="fill:url(#linearGradient3899);fill-opacity:1;stroke:#000000;stroke-width:0.30000000999999998;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
id="needle"
|
||||
width="33.162418"
|
||||
height="5.9393759"
|
||||
x="135.64999"
|
||||
y="-107.91632"
|
||||
inkscape:label="#rect5246" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:label="Text"
|
||||
style="display:inline"
|
||||
transform="translate(-129.62194,129.52019)"
|
||||
sodipodi:insensitive="true">
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none"
|
||||
id="field"
|
||||
width="33.853165"
|
||||
height="12.626906"
|
||||
x="128.30692"
|
||||
y="157.31393"
|
||||
inkscape:label="#rect2878" />
|
||||
<rect
|
||||
inkscape:label="#rect2878"
|
||||
y="170.91206"
|
||||
x="128.88902"
|
||||
height="12.626906"
|
||||
width="32.851257"
|
||||
id="value"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 28 KiB |
@ -16,5 +16,7 @@ Symbols:
|
||||
|
||||
Capital A = OpenPilot Logo
|
||||
Capital B = CC-BY-SA
|
||||
Capital B = CC-BY-NC-SA
|
||||
Capital D = RoHS
|
||||
|
||||
|
35
artwork/GCS Icons/dialog-warning.svg
Normal file
@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg id="svg3247" xmlns="http://www.w3.org/2000/svg" height="48" width="48" version="1.0" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs id="defs3249">
|
||||
<linearGradient id="linearGradient2411" y2="5.4676" gradientUnits="userSpaceOnUse" x2="63.397" gradientTransform="matrix(2.1154 0 0 2.1153 -107.58 32.427)" y1="-12.489" x1="63.397">
|
||||
<stop id="stop4875" style="stop-color:#fff" offset="0"/>
|
||||
<stop id="stop4877" style="stop-color:#fff;stop-opacity:0" offset="1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linearGradient2416" y2="3.0816" gradientUnits="userSpaceOnUse" x2="18.379" gradientTransform="matrix(.95844 0 0 .95844 .99752 1.9975)" y1="44.98" x1="18.379">
|
||||
<stop id="stop2492" style="stop-color:#791235" offset="0"/>
|
||||
<stop id="stop2494" style="stop-color:#dd3b27" offset="1"/>
|
||||
</linearGradient>
|
||||
<radialGradient id="radialGradient2414" gradientUnits="userSpaceOnUse" cy="3.99" cx="23.896" gradientTransform="matrix(0 2.2875 -3.0194 0 36.047 -50.63)" r="20.397">
|
||||
<stop id="stop3244" style="stop-color:#f8b17e" offset="0"/>
|
||||
<stop id="stop3246" style="stop-color:#e35d4f" offset=".26238"/>
|
||||
<stop id="stop3248" style="stop-color:#c6262e" offset=".66094"/>
|
||||
<stop id="stop3250" style="stop-color:#690b54" offset="1"/>
|
||||
</radialGradient>
|
||||
<radialGradient id="radialGradient2419" gradientUnits="userSpaceOnUse" cy="4.625" cx="62.625" gradientTransform="matrix(2.1647 0 0 .75294 -111.56 36.518)" r="10.625">
|
||||
<stop id="stop8840" offset="0"/>
|
||||
<stop id="stop8842" style="stop-opacity:0" offset="1"/>
|
||||
</radialGradient>
|
||||
</defs>
|
||||
<g id="layer1">
|
||||
<g id="g3275">
|
||||
<path id="path8836" style="opacity:.3;fill-rule:evenodd;fill:url(#radialGradient2419)" d="m47 40c0 4.418-10.297 8-23 8s-23-3.582-23-8 10.297-8 23-8 23 3.582 23 8z"/>
|
||||
<path id="path2555" style="stroke-linejoin:round;stroke:url(#linearGradient2416);stroke-linecap:round;stroke-width:1.0037;fill:url(#radialGradient2414)" d="m24 5.5018c-10.758 0-19.498 8.7402-19.498 19.498-0.0002 10.758 8.74 19.498 19.498 19.498s19.498-8.74 19.498-19.498-8.74-19.498-19.498-19.498z"/>
|
||||
<path id="path8655" style="opacity:.4;stroke:url(#linearGradient2411);fill:none" d="m42.5 24.999c0 10.218-8.283 18.501-18.5 18.501s-18.5-8.283-18.5-18.501c0-10.217 8.283-18.499 18.5-18.499s18.5 8.282 18.5 18.499z"/>
|
||||
</g>
|
||||
<g id="g3243" transform="translate(51.075 .56862)">
|
||||
<path id="path3295" style="opacity:.2" d="m-29.451 12.554c0.563 5.5 1.208 10.961 1.687 16.482h1.53c0.397-5.302 1.038-10.571 1.501-15.867 0.236-1.254-0.408-2.742-1.732-3.047-1.308-0.3824-2.77 0.565-2.944 1.918-0.029 0.17-0.042 0.342-0.042 0.514zm-0.167 22.359c-0.059 1.637 1.742 2.92 3.28 2.401 1.489-0.38 2.274-2.252 1.51-3.583-0.683-1.375-2.687-1.829-3.84-0.776-0.582 0.479-0.968 1.194-0.95 1.958z"/>
|
||||
<path id="text2315" style="fill:#fff" d="m-29.451 13.555c0.563 5.499 1.208 10.96 1.687 16.481h1.53c0.397-5.301 1.038-10.571 1.501-15.866 0.236-1.254-0.408-2.743-1.732-3.048-1.308-0.382-2.77 0.565-2.944 1.918-0.029 0.17-0.042 0.342-0.042 0.515zm-0.167 22.358c-0.059 1.637 1.742 2.921 3.28 2.402 1.489-0.381 2.274-2.253 1.51-3.584-0.683-1.375-2.687-1.828-3.84-0.776-0.582 0.479-0.968 1.194-0.95 1.958z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.2 KiB |
34
artwork/GCS Icons/edit-delete.svg
Normal file
@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg id="svg2757" xmlns="http://www.w3.org/2000/svg" height="48" width="48" version="1.0" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs id="defs2759">
|
||||
<radialGradient id="radialGradient2436" gradientUnits="userSpaceOnUse" cy="4.625" cx="62.625" gradientTransform="matrix(2.1647 0 0 .75294 -111.56 36.518)" r="10.625">
|
||||
<stop id="stop8840" offset="0"/>
|
||||
<stop id="stop8842" style="stop-opacity:0" offset="1"/>
|
||||
</radialGradient>
|
||||
<linearGradient id="linearGradient2750" y2="3.0816" gradientUnits="userSpaceOnUse" x2="18.379" gradientTransform="matrix(.95844 0 0 .95844 .99752 1.9975)" y1="44.98" x1="18.379">
|
||||
<stop id="stop2492" style="stop-color:#791235" offset="0"/>
|
||||
<stop id="stop2494" style="stop-color:#dd3b27" offset="1"/>
|
||||
</linearGradient>
|
||||
<radialGradient id="radialGradient2748" gradientUnits="userSpaceOnUse" cy="3.99" cx="23.896" gradientTransform="matrix(0 2.2875 -3.0194 0 36.047 -50.63)" r="20.397">
|
||||
<stop id="stop3244" style="stop-color:#f8b17e" offset="0"/>
|
||||
<stop id="stop3246" style="stop-color:#e35d4f" offset=".26238"/>
|
||||
<stop id="stop3248" style="stop-color:#c6262e" offset=".66094"/>
|
||||
<stop id="stop3250" style="stop-color:#690b54" offset="1"/>
|
||||
</radialGradient>
|
||||
<linearGradient id="linearGradient2745" y2="5.4676" gradientUnits="userSpaceOnUse" x2="63.397" gradientTransform="matrix(2.1154 0 0 2.1153 -107.58 32.427)" y1="-12.489" x1="63.397">
|
||||
<stop id="stop4875" style="stop-color:#fff" offset="0"/>
|
||||
<stop id="stop4877" style="stop-color:#fff;stop-opacity:0" offset="1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linearGradient2742" y2="45.074" gradientUnits="userSpaceOnUse" x2="24.481" y1="5.0809" x1="24.481">
|
||||
<stop id="stop3783" style="stop-color:#fff" offset="0"/>
|
||||
<stop id="stop3785" style="stop-color:#fff;stop-opacity:0" offset="1"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g id="layer1">
|
||||
<path id="path8836" style="opacity:.3;fill-rule:evenodd;fill:url(#radialGradient2436)" d="m47 40c0 4.418-10.297 8-23 8s-23-3.582-23-8 10.297-8 23-8 23 3.582 23 8z"/>
|
||||
<path id="path2555" style="stroke-linejoin:round;stroke:url(#linearGradient2750);stroke-linecap:round;stroke-width:1.0037;fill:url(#radialGradient2748)" d="m24 5.5018c-10.758 0-19.498 8.7402-19.498 19.498-0.0002 10.758 8.74 19.498 19.498 19.498s19.498-8.74 19.498-19.498-8.74-19.498-19.498-19.498zm0 6.2602c7.314 0 13.238 5.924 13.238 13.238 0 3.07-1.063 5.872-2.815 8.117l-16.773-19.738c1.885-1.031 4.049-1.617 6.35-1.617zm-10.603 5.331l16.713 19.648c-1.828 0.952-3.905 1.497-6.11 1.497-7.314 0-13.238-5.924-13.238-13.238 0-2.971 0.984-5.699 2.635-7.907z"/>
|
||||
<path id="path8655" style="opacity:.4;stroke:url(#linearGradient2745);fill:none" d="m42.5 24.999c0 10.218-8.283 18.501-18.5 18.501s-18.5-8.283-18.5-18.501c0-10.217 8.283-18.499 18.5-18.499s18.5 8.282 18.5 18.499z"/>
|
||||
<path id="path3270" style="opacity:.4;stroke:url(#linearGradient2742);stroke-linecap:round;stroke-width:1px;fill:none" d="m17.05 14.239l16.702 19.687"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.0 KiB |
37
artwork/GCS Icons/help-contents.svg
Normal file
@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg id="svg3675" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="48" width="48" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<metadata id="metadata29">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs id="defs3677">
|
||||
<linearGradient id="linearGradient2407" y2="5.4676" gradientUnits="userSpaceOnUse" x2="63.397" gradientTransform="matrix(2.1154 0 0 2.1153 -107.58 32.427)" y1="-12.489" x1="63.397">
|
||||
<stop id="stop4875" style="stop-color:#fff" offset="0"/>
|
||||
<stop id="stop4877" style="stop-color:#fff;stop-opacity:0" offset="1"/>
|
||||
</linearGradient>
|
||||
<radialGradient id="radialGradient2410" gradientUnits="userSpaceOnUse" cy="3.99" cx="23.896" gradientTransform="matrix(0 2.2875 -3.0194 0 36.047 -50.63)" r="20.397">
|
||||
<stop id="stop2778" style="stop-color:#8badea" offset="0"/>
|
||||
<stop id="stop2780" style="stop-color:#6396cd" offset=".26238"/>
|
||||
<stop id="stop2782" style="stop-color:#3b7caf" offset=".66094"/>
|
||||
<stop id="stop2784" style="stop-color:#194c70" offset="1"/>
|
||||
</radialGradient>
|
||||
<linearGradient id="linearGradient2412" y2="3.0816" gradientUnits="userSpaceOnUse" x2="18.379" gradientTransform="matrix(.95844 0 0 .95844 .99752 1.9975)" y1="44.98" x1="18.379">
|
||||
<stop id="stop2788" style="stop-color:#1f4b6a" offset="0"/>
|
||||
<stop id="stop2790" style="stop-color:#4083c2" offset="1"/>
|
||||
</linearGradient>
|
||||
<radialGradient id="radialGradient2415" gradientUnits="userSpaceOnUse" cy="4.625" cx="62.625" gradientTransform="matrix(2.1647 0 0 .75294 -111.56 36.518)" r="10.625">
|
||||
<stop id="stop8840" offset="0"/>
|
||||
<stop id="stop8842" style="stop-opacity:0" offset="1"/>
|
||||
</radialGradient>
|
||||
</defs>
|
||||
<path id="path8836" style="opacity:.3;fill-rule:evenodd;fill:url(#radialGradient2415)" d="m47 40c0 4.418-10.297 8-23 8s-23-3.582-23-8 10.297-8 23-8 23 3.582 23 8z"/>
|
||||
<path id="path2555" style="stroke-linejoin:round;stroke:url(#linearGradient2412);stroke-linecap:round;stroke-width:1.0037;fill:url(#radialGradient2410)" d="m24 5.5018c-10.758 0-19.498 8.7402-19.498 19.498-0.0002 10.758 8.74 19.498 19.498 19.498s19.498-8.74 19.498-19.498-8.74-19.498-19.498-19.498z"/>
|
||||
<path id="path8655" style="opacity:.4;stroke:url(#linearGradient2407);fill:none" d="m42.5 24.999c0 10.218-8.283 18.501-18.5 18.501s-18.5-8.283-18.5-18.501c0-10.217 8.283-18.499 18.5-18.499s18.5 8.282 18.5 18.499z"/>
|
||||
<path id="path9053" style="opacity:.2" d="m24.91 30.164c-0.066-2.359 0.463-4.649 2.691-6.271 2.354-1.834 4.621-4.129 4.382-6.835-0.053-2.609-3.093-4.653-6.368-4.947-3.684-0.511-8.142 0.751-9.377 3.629-0.626 1.399-0.045 3.91 2.056 3.91 1.229 0 1.794-0.794 1.887-1.521 0.07-0.549-0.156-1.04-0.289-1.494-0.152-0.517 0.496-1.519 1.202-1.928 0.59-0.341 1.207-0.455 1.298-0.477 2.118-0.509 4.229 0.615 5.11 1.984 0.881 1.368-0.088 3.444-1.482 5.463-1.395 2.018-2.891 4.311-2.885 6.746 0 0.928-0.082 1.243-0.024 1.618 0.047 0.299 1.039 0.263 1.799 0.123zm-0.966 3.174c-2.025-0.11-3.427 2.186-2.211 3.649 1.087 1.615 4.133 1.217 4.656-0.612 0.542-1.423-0.764-3.06-2.445-3.037z"/>
|
||||
<path id="path3298" style="fill:#fff" d="m24.91 31.164c-0.066-2.359 0.463-4.649 2.691-6.271 2.354-1.834 4.621-4.129 4.382-6.835-0.053-2.609-3.093-4.653-6.368-4.947-3.684-0.511-8.142 0.751-9.377 3.629-0.626 1.399-0.045 3.91 2.056 3.91 1.229 0 1.794-0.794 1.887-1.521 0.07-0.549-0.156-1.04-0.289-1.494-0.152-0.517 0.496-1.519 1.202-1.928 0.59-0.341 1.207-0.455 1.298-0.477 2.118-0.509 4.229 0.615 5.11 1.984 0.881 1.368-0.088 3.444-1.482 5.463-1.395 2.018-2.891 4.311-2.885 6.746 0 0.928-0.082 1.243-0.024 1.618 0.047 0.299 1.039 0.263 1.799 0.123zm-0.966 3.174c-2.025-0.11-3.427 2.186-2.211 3.649 1.087 1.615 4.133 1.217 4.656-0.612 0.542-1.423-0.764-3.06-2.445-3.037z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 4.0 KiB |
33
artwork/GCS Icons/help-hint.svg
Normal file
@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg id="svg2515" xmlns="http://www.w3.org/2000/svg" height="48" width="48" version="1.0" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs id="defs2517">
|
||||
<radialGradient id="radialGradient2415" gradientUnits="userSpaceOnUse" cy="4.625" cx="62.625" gradientTransform="matrix(2.1647 0 0 .75294 -111.56 36.518)" r="10.625">
|
||||
<stop id="stop8840" offset="0"/>
|
||||
<stop id="stop8842" style="stop-opacity:0" offset="1"/>
|
||||
</radialGradient>
|
||||
<linearGradient id="linearGradient2412" y2="3.0816" gradientUnits="userSpaceOnUse" x2="18.379" gradientTransform="matrix(.95844 0 0 .95844 .99752 1.9975)" y1="44.98" x1="18.379">
|
||||
<stop id="stop2788" style="stop-color:#1f4b6a" offset="0"/>
|
||||
<stop id="stop2790" style="stop-color:#4083c2" offset="1"/>
|
||||
</linearGradient>
|
||||
<radialGradient id="radialGradient2410" gradientUnits="userSpaceOnUse" cy="3.99" cx="23.896" gradientTransform="matrix(0 2.2875 -3.0194 0 36.047 -50.63)" r="20.397">
|
||||
<stop id="stop2778" style="stop-color:#8badea" offset="0"/>
|
||||
<stop id="stop2780" style="stop-color:#6396cd" offset=".26238"/>
|
||||
<stop id="stop2782" style="stop-color:#3b7caf" offset=".66094"/>
|
||||
<stop id="stop2784" style="stop-color:#194c70" offset="1"/>
|
||||
</radialGradient>
|
||||
<linearGradient id="linearGradient2407" y2="5.4676" gradientUnits="userSpaceOnUse" x2="63.397" gradientTransform="matrix(2.1154 0 0 2.1153 -107.58 32.427)" y1="-12.489" x1="63.397">
|
||||
<stop id="stop4875" style="stop-color:#fff" offset="0"/>
|
||||
<stop id="stop4877" style="stop-color:#fff;stop-opacity:0" offset="1"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g id="layer1">
|
||||
<path id="path8836" style="opacity:.3;fill-rule:evenodd;fill:url(#radialGradient2415)" d="m47 40c0 4.418-10.297 8-23 8s-23-3.582-23-8 10.297-8 23-8 23 3.582 23 8z"/>
|
||||
<path id="path2555" style="stroke-linejoin:round;stroke:url(#linearGradient2412);stroke-linecap:round;stroke-width:1.0037;fill:url(#radialGradient2410)" d="m24 5.5018c-10.758 0-19.498 8.7402-19.498 19.498-0.0002 10.758 8.74 19.498 19.498 19.498s19.498-8.74 19.498-19.498-8.74-19.498-19.498-19.498z"/>
|
||||
<path id="path8655" style="opacity:.4;stroke:url(#linearGradient2407);fill:none" d="m42.5 24.999c0 10.218-8.283 18.501-18.5 18.501s-18.5-8.283-18.5-18.501c0-10.217 8.283-18.499 18.5-18.499s18.5 8.282 18.5 18.499z"/>
|
||||
<g id="g3243" transform="translate(51.075 .56862)">
|
||||
<path id="path3295" style="opacity:.2" d="m-29.451 12.554c0.563 5.5 1.208 10.961 1.687 16.482h1.53c0.397-5.302 1.038-10.571 1.501-15.867 0.236-1.254-0.408-2.742-1.732-3.047-1.308-0.3824-2.77 0.565-2.944 1.918-0.029 0.17-0.042 0.342-0.042 0.514zm-0.167 22.359c-0.059 1.637 1.742 2.92 3.28 2.401 1.489-0.38 2.274-2.252 1.51-3.583-0.683-1.375-2.687-1.829-3.84-0.776-0.582 0.479-0.968 1.194-0.95 1.958z"/>
|
||||
<path id="text2315" style="fill:#fff" d="m-29.451 13.555c0.563 5.499 1.208 10.96 1.687 16.481h1.53c0.397-5.301 1.038-10.571 1.501-15.866 0.236-1.254-0.408-2.743-1.732-3.048-1.308-0.382-2.77 0.565-2.944 1.918-0.029 0.17-0.042 0.342-0.042 0.515zm-0.167 22.358c-0.059 1.637 1.742 2.921 3.28 2.402 1.489-0.381 2.274-2.253 1.51-3.584-0.683-1.375-2.687-1.828-3.84-0.776-0.582 0.479-0.968 1.194-0.95 1.958z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.2 KiB |
23
artwork/GCS Icons/window-close.svg
Normal file
@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg id="svg2405" xmlns="http://www.w3.org/2000/svg" height="48" width="48" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs id="defs2407">
|
||||
<radialGradient id="radialGradient2177" gradientUnits="userSpaceOnUse" cy="35.127" cx="23.071" gradientTransform="matrix(.91481 .012650 -.0082150 .21356 2.2539 27.189)" r="10.319">
|
||||
<stop id="stop2093" offset="0"/>
|
||||
<stop id="stop2095" style="stop-opacity:0" offset="1"/>
|
||||
</radialGradient>
|
||||
<linearGradient id="linearGradient2181" y2="32.85" gradientUnits="userSpaceOnUse" x2="16.145" gradientTransform="matrix(1.0318 -1.0287 1.0318 1.0287 -26.553 23.964)" y1="17.13" x1="31.865">
|
||||
<stop id="stop7918" style="stop-color:#fff" offset="0"/>
|
||||
<stop id="stop7920" style="stop-color:#fff;stop-opacity:.34021" offset="1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linearGradient2179" y2="46.421" gradientUnits="userSpaceOnUse" x2="34.163" gradientTransform="matrix(1.0318 -1.0287 1.0318 1.0287 -59.146 28.538)" y1="30.701" x1="49.882">
|
||||
<stop id="stop1324" style="stop-color:#b4b4b4" offset="0"/>
|
||||
<stop id="stop1326" style="stop-color:#505050" offset="1"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g id="layer1">
|
||||
<path id="path1361" style="opacity:.25571;fill:url(#radialGradient2177)" d="m33.278 34.941a10.319 2.3202 0 1 1 -20.639 0 10.319 2.3202 0 1 1 20.639 0z" transform="matrix(2.3012 0 0 1.919 -28.833 -24.805)"/>
|
||||
<path id="text1314" style="stroke-linejoin:round;stroke:#4d4d4d;stroke-width:.98170;fill:#555753" d="m41.892 35.011-10.392-10.017 10-10.494-7.209-6.5-10.291 10-10.5-10-7.5 6.739 10.5 10.212-10.5 10.049 7.5 7 10.488-10.5 10.512 10.5 7.392-6.989z"/>
|
||||
<path id="path7076" style="opacity:.40860;stroke-linejoin:round;stroke:url(#linearGradient2181);stroke-width:.98170;fill:url(#linearGradient2179)" d="m40.5 35-10.5-10 10-10.5-5.708-4.9586-10.292 9.9586-10.5-10-6 5.5 10.5 9.945-10.5 10.055 6 5.5 10.5-10.5 10.5 10.5 6-5.5z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 436 KiB After Width: | Height: | Size: 438 KiB |
2208
artwork/PFD/pfd.svg
@ -14,7 +14,7 @@
|
||||
height="707.56323"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.47 r22583"
|
||||
inkscape:version="0.48.1 "
|
||||
sodipodi:docname="pfd.svg"
|
||||
style="display:inline"
|
||||
inkscape:export-filename="H:\Documents\Hobbies\OpenPilot\SVN\artwork\PFD-2.png"
|
||||
@ -1561,6 +1561,52 @@
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#SVGID_2_-8-6"
|
||||
id="linearGradient9715"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="311.81049"
|
||||
y1="255.11819"
|
||||
x2="311.81049"
|
||||
y2="5.6694002"
|
||||
gradientTransform="matrix(2.3120787,0,0,4.0093283,-610.5687,-120.59521)" />
|
||||
<linearGradient
|
||||
id="SVGID_2_-8-6"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="311.81049"
|
||||
y1="255.11819"
|
||||
x2="311.81049"
|
||||
y2="5.6694002">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#27AAE1"
|
||||
id="stop6282-4-5" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#2B3990"
|
||||
id="stop6284-0-4" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3774"
|
||||
id="linearGradient5597"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,2.0069652,1.0784651e-5,-517.448)"
|
||||
x1="380.38251"
|
||||
y1="512.13574"
|
||||
x2="380.38251"
|
||||
y2="775.37415" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3758"
|
||||
id="linearGradient5599"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,1.6738023,1.0784651e-5,-514.72728)"
|
||||
x1="376.34192"
|
||||
y1="484.50259"
|
||||
x2="376.34192"
|
||||
y2="745.59497" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
@ -1569,16 +1615,16 @@
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.4"
|
||||
inkscape:cx="542.75891"
|
||||
inkscape:cy="127.43692"
|
||||
inkscape:zoom="0.73067675"
|
||||
inkscape:cx="305.98471"
|
||||
inkscape:cy="372.16908"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer6"
|
||||
inkscape:current-layer="layer3"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:window-height="725"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="706"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
@ -1651,7 +1697,7 @@
|
||||
inkscape:groupmode="layer"
|
||||
id="layer7"
|
||||
inkscape:label="Background"
|
||||
style="display:inline"
|
||||
style="display:none"
|
||||
transform="translate(230.4171,-2.5493479)"
|
||||
sodipodi:insensitive="true">
|
||||
<rect
|
||||
@ -1672,185 +1718,286 @@
|
||||
style="display:inline"
|
||||
sodipodi:insensitive="true">
|
||||
<g
|
||||
transform="matrix(2.013443,0,0,1.5267412,-477.87461,-169.05952)"
|
||||
style="display:inline"
|
||||
id="world"
|
||||
inkscape:label="#g3042">
|
||||
<g
|
||||
id="g2887"
|
||||
transform="matrix(2.3026321,0,0,1,-495.46969,-2.6199594)">
|
||||
<g
|
||||
id="g4280"
|
||||
transform="translate(0,2.6199594)">
|
||||
<rect
|
||||
style="fill:url(#linearGradient4284);fill-opacity:1;stroke:none"
|
||||
id="rect3724"
|
||||
width="305.71429"
|
||||
height="654.98987"
|
||||
x="227.8495"
|
||||
y="509.42014"
|
||||
ry="0" />
|
||||
<rect
|
||||
rx="2.7755576e-17"
|
||||
ry="0"
|
||||
y="-145.56979"
|
||||
x="227.8495"
|
||||
height="654.98987"
|
||||
width="305.71429"
|
||||
id="rect2942"
|
||||
style="fill:url(#linearGradient4286);fill-opacity:1;stroke:none" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:0.75173599;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 227.84948,512.09626 305,0"
|
||||
id="path3808" />
|
||||
</g>
|
||||
<g
|
||||
id="g3456"
|
||||
transform="translate(0,-2.5232082)">
|
||||
<path
|
||||
style="fill:none;stroke:#fff5f5;stroke-width:1.2823472;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
|
||||
d="m 369.18848,488.05969 21.97363,0"
|
||||
id="path2897" />
|
||||
<path
|
||||
id="path2899"
|
||||
d="m 369.51556,584.99713 21.31947,0"
|
||||
style="fill:none;stroke:#fff5f5;stroke-width:1.2823472;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
|
||||
<path
|
||||
id="path5881"
|
||||
d="m 369.18848,439.59096 21.97363,0"
|
||||
style="fill:none;stroke:#fff5f5;stroke-width:1.2823472;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
|
||||
<path
|
||||
style="fill:none;stroke:#fff5f5;stroke-width:1.2823472;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
|
||||
d="m 369.51556,536.52842 21.31947,0"
|
||||
id="path5883" />
|
||||
<g
|
||||
id="g3426">
|
||||
<path
|
||||
id="path3867"
|
||||
d="m 344.26359,415.3566 72.25318,0"
|
||||
style="fill:none;stroke:#fff5f5;stroke-width:2.5646944;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
|
||||
<text
|
||||
transform="scale(0.87078919,1.1483836)"
|
||||
id="text5911"
|
||||
y="364.95422"
|
||||
x="482.14175"
|
||||
style="font-size:22.81432533px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:9.12572956px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
y="364.95422"
|
||||
x="482.14175"
|
||||
id="tspan5913"
|
||||
sodipodi:role="line">20</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:22.81432533px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
|
||||
x="379.47711"
|
||||
y="364.95422"
|
||||
id="text5915"
|
||||
transform="scale(0.87078919,1.1483836)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5917"
|
||||
x="379.47711"
|
||||
y="364.95422"
|
||||
style="font-size:9.12572956px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black">20</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(0,-6.5505232)"
|
||||
id="g3433">
|
||||
<path
|
||||
style="fill:none;stroke:#fff5f5;stroke-width:2.5646944;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
|
||||
d="m 366.12884,470.37584 27.96785,0"
|
||||
id="path3777" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:22.81432533px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
|
||||
x="461.60883"
|
||||
y="412.86438"
|
||||
id="text5907"
|
||||
transform="scale(0.87078921,1.1483836)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5909"
|
||||
x="461.60883"
|
||||
y="412.86438"
|
||||
style="font-size:9.12572956px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black">10</tspan></text>
|
||||
<text
|
||||
transform="scale(0.87078921,1.1483836)"
|
||||
id="text5919"
|
||||
y="412.86438"
|
||||
x="398.86932"
|
||||
style="font-size:22.81432533px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:9.12572956px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
y="412.86438"
|
||||
x="398.86932"
|
||||
id="tspan5921"
|
||||
sodipodi:role="line">10</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(0,7.8592037)"
|
||||
id="g3440">
|
||||
<path
|
||||
id="path3869"
|
||||
d="m 366.12883,553.51 27.96786,0"
|
||||
style="fill:none;stroke:#fff5f5;stroke-width:2.5646944;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:22.81432533px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
|
||||
x="398.86932"
|
||||
y="484.72864"
|
||||
id="text5923"
|
||||
transform="scale(0.87078921,1.1483836)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5925"
|
||||
x="398.86932"
|
||||
y="484.72864"
|
||||
style="font-size:9.12572956px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black">10</tspan></text>
|
||||
<text
|
||||
transform="scale(0.87078921,1.1483836)"
|
||||
id="text5927"
|
||||
y="484.72864"
|
||||
x="461.60883"
|
||||
style="font-size:22.81432533px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:9.12572956px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
y="484.72864"
|
||||
x="461.60883"
|
||||
id="tspan5929"
|
||||
sodipodi:role="line">10</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
id="g3447">
|
||||
<path
|
||||
style="fill:none;stroke:#fff5f5;stroke-width:2.5646944;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
|
||||
d="m 344.26361,609.2315 72.25318,0"
|
||||
id="path5895" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:22.81432533px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
|
||||
x="482.14175"
|
||||
y="533.77838"
|
||||
id="text5931"
|
||||
transform="scale(0.87078921,1.1483836)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5933"
|
||||
x="482.14175"
|
||||
y="533.77838"
|
||||
style="font-size:9.12572956px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black">20</tspan></text>
|
||||
<text
|
||||
transform="scale(0.87078921,1.1483836)"
|
||||
id="text5935"
|
||||
y="533.77838"
|
||||
x="379.47711"
|
||||
style="font-size:22.81432533px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:9.12572956px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
y="533.77838"
|
||||
x="379.47711"
|
||||
id="tspan5937"
|
||||
sodipodi:role="line">20</tspan></text>
|
||||
</g>
|
||||
transform="matrix(4.6362185,0,0,1.5267412,-1475.4746,-169.05952)"
|
||||
id="g4280">
|
||||
<rect
|
||||
ry="0"
|
||||
y="509.42014"
|
||||
x="227.8495"
|
||||
height="654.98987"
|
||||
width="305.71429"
|
||||
id="rect3724"
|
||||
style="fill:url(#linearGradient5597);fill-opacity:1;stroke:none" />
|
||||
<rect
|
||||
style="fill:url(#linearGradient5599);fill-opacity:1;stroke:none"
|
||||
id="rect2942"
|
||||
width="305.71429"
|
||||
height="654.98987"
|
||||
x="227.8495"
|
||||
y="-145.56979"
|
||||
ry="0"
|
||||
rx="2.7755576e-017" />
|
||||
</g>
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3808"
|
||||
d="m -419.11463,608.77894 1414.04665,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<text
|
||||
y="537.23804"
|
||||
x="201.93459"
|
||||
style="font-size:13.30799103px;fill:#ffffff;font-family:CenturyGothic"
|
||||
transform="scale(0.97685665,1.0236917)"
|
||||
font-size="13"
|
||||
id="text6388">10</text>
|
||||
<text
|
||||
y="537.23804"
|
||||
x="376.04211"
|
||||
style="font-size:13.30799103px;fill:#ffffff;font-family:CenturyGothic"
|
||||
transform="scale(0.97685665,1.0236917)"
|
||||
font-size="13"
|
||||
id="text6390">10</text>
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.04738331"
|
||||
x1="258.02176"
|
||||
y1="538.08423"
|
||||
x2="221.47374"
|
||||
y2="538.08423"
|
||||
id="line6404" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.04738331"
|
||||
x1="357.53674"
|
||||
y1="538.08423"
|
||||
x2="323.52075"
|
||||
y2="538.08423"
|
||||
id="line6406" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.04738331"
|
||||
x1="221.47374"
|
||||
y1="538.08423"
|
||||
x2="221.47374"
|
||||
y2="549.96582"
|
||||
id="line6408" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.04738331"
|
||||
x1="357.53674"
|
||||
y1="538.08319"
|
||||
x2="357.53674"
|
||||
y2="549.96582"
|
||||
id="line6410" />
|
||||
<text
|
||||
y="461.79126"
|
||||
x="201.93459"
|
||||
style="font-size:13.30799103px;fill:#ffffff;font-family:CenturyGothic"
|
||||
transform="scale(0.97685665,1.0236917)"
|
||||
font-size="13"
|
||||
id="text6412">20</text>
|
||||
<text
|
||||
y="461.79126"
|
||||
x="376.04211"
|
||||
style="font-size:13.30799103px;fill:#ffffff;font-family:CenturyGothic"
|
||||
transform="scale(0.97685665,1.0236917)"
|
||||
font-size="13"
|
||||
id="text6414">20</text>
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.04738331"
|
||||
x1="258.02176"
|
||||
y1="460.84964"
|
||||
x2="221.47374"
|
||||
y2="460.84964"
|
||||
id="line6416" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.04738331"
|
||||
x1="357.53674"
|
||||
y1="460.84964"
|
||||
x2="323.52075"
|
||||
y2="460.84964"
|
||||
id="line6418" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.04738331"
|
||||
x1="221.47374"
|
||||
y1="460.84964"
|
||||
x2="221.47374"
|
||||
y2="472.7323"
|
||||
id="line6420" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.04738331"
|
||||
x1="357.53674"
|
||||
y1="460.84964"
|
||||
x2="357.53674"
|
||||
y2="472.7323"
|
||||
id="line6422" />
|
||||
<text
|
||||
y="664.91711"
|
||||
x="199.72525"
|
||||
style="font-size:13.30799103px;fill:#ffffff;font-family:CenturyGothic"
|
||||
transform="scale(0.97685665,1.0236917)"
|
||||
font-size="13"
|
||||
id="text6424">-10</text>
|
||||
<text
|
||||
y="664.91711"
|
||||
x="373.83279"
|
||||
style="font-size:13.30799103px;fill:#ffffff;font-family:CenturyGothic"
|
||||
transform="scale(0.97685665,1.0236917)"
|
||||
font-size="13"
|
||||
id="text6426">-10</text>
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.04738331"
|
||||
x1="227.14275"
|
||||
y1="680.66962"
|
||||
x2="221.47374"
|
||||
y2="680.66962"
|
||||
id="line6428" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.04738331"
|
||||
x1="238.48073"
|
||||
y1="680.66962"
|
||||
x2="232.81174"
|
||||
y2="680.66962"
|
||||
id="line6430" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.04738331"
|
||||
x1="249.81975"
|
||||
y1="680.66962"
|
||||
x2="244.15074"
|
||||
y2="680.66962"
|
||||
id="line6432" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.04738331"
|
||||
x1="261.15875"
|
||||
y1="680.66962"
|
||||
x2="255.48973"
|
||||
y2="680.66962"
|
||||
id="line6434" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.04738331"
|
||||
x1="323.52075"
|
||||
y1="680.66962"
|
||||
x2="317.85077"
|
||||
y2="680.66962"
|
||||
id="line6436" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.04738331"
|
||||
x1="334.85876"
|
||||
y1="680.66962"
|
||||
x2="329.18976"
|
||||
y2="680.66962"
|
||||
id="line6438" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.04738331"
|
||||
x1="346.19775"
|
||||
y1="680.66962"
|
||||
x2="340.52875"
|
||||
y2="680.66962"
|
||||
id="line6440" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.04738331"
|
||||
x1="357.53674"
|
||||
y1="680.66962"
|
||||
x2="351.86777"
|
||||
y2="680.66962"
|
||||
id="line6442" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.04738331"
|
||||
x1="323.52075"
|
||||
y1="757.90527"
|
||||
x2="317.85077"
|
||||
y2="757.90527"
|
||||
id="line6444" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.04738331"
|
||||
x1="334.85876"
|
||||
y1="757.90527"
|
||||
x2="329.18976"
|
||||
y2="757.90527"
|
||||
id="line6446" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.04738331"
|
||||
x1="346.19775"
|
||||
y1="757.90527"
|
||||
x2="340.52875"
|
||||
y2="757.90527"
|
||||
id="line6448" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.04738331"
|
||||
x1="357.53674"
|
||||
y1="757.90527"
|
||||
x2="351.86777"
|
||||
y2="757.90527"
|
||||
id="line6450" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.04738331"
|
||||
x1="227.14275"
|
||||
y1="757.90527"
|
||||
x2="221.47275"
|
||||
y2="757.90527"
|
||||
id="line6452" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.04738331"
|
||||
x1="238.48073"
|
||||
y1="757.90527"
|
||||
x2="232.81174"
|
||||
y2="757.90527"
|
||||
id="line6454" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.04738331"
|
||||
x1="249.81975"
|
||||
y1="757.90527"
|
||||
x2="244.15074"
|
||||
y2="757.90527"
|
||||
id="line6456" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.04738331"
|
||||
x1="261.15875"
|
||||
y1="757.90527"
|
||||
x2="255.48973"
|
||||
y2="757.90527"
|
||||
id="line6458" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.04738331"
|
||||
x1="221.47374"
|
||||
y1="680.66962"
|
||||
x2="221.47374"
|
||||
y2="668.78809"
|
||||
id="line6460" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.04738331"
|
||||
x1="357.53674"
|
||||
y1="680.67072"
|
||||
x2="357.53674"
|
||||
y2="668.78809"
|
||||
id="line6462" />
|
||||
<text
|
||||
y="740.36438"
|
||||
x="199.72525"
|
||||
style="font-size:13.30799103px;fill:#ffffff;font-family:CenturyGothic"
|
||||
transform="scale(0.97685665,1.0236917)"
|
||||
font-size="13"
|
||||
id="text6464">-20</text>
|
||||
<text
|
||||
y="740.36438"
|
||||
x="373.83279"
|
||||
style="font-size:13.30799103px;fill:#ffffff;font-family:CenturyGothic"
|
||||
transform="scale(0.97685665,1.0236917)"
|
||||
font-size="13"
|
||||
id="text6466">-20</text>
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.04738331"
|
||||
x1="221.47374"
|
||||
y1="757.90424"
|
||||
x2="221.47374"
|
||||
y2="746.02264"
|
||||
id="line6468" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.04738331"
|
||||
x1="357.53674"
|
||||
y1="757.90527"
|
||||
x2="357.53674"
|
||||
y2="746.02264"
|
||||
id="line6470" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -1859,172 +2006,6 @@
|
||||
inkscape:label="Foreground"
|
||||
style="display:inline"
|
||||
transform="translate(230.4171,-2.5493479)">
|
||||
<g
|
||||
id="foreground"
|
||||
inkscape:label="#g3392">
|
||||
<g
|
||||
transform="translate(4.1134971,-1.5931792)"
|
||||
id="g6859"
|
||||
style="display:inline">
|
||||
<path
|
||||
id="path6311"
|
||||
style="fill:#f17f07;fill-opacity:1;stroke:#f17f07;stroke-width:5.35583735;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 385.70404,414.78075 -32.91384,0 -68.78149,-55.27579 101.69533,55.27579 z m -201.57618,0 32.91384,0 68.78149,-55.27579 -101.69533,55.27579 z" />
|
||||
<path
|
||||
id="path6846"
|
||||
style="fill:#f17f07;fill-opacity:1;stroke:#f17f07;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 3.3266852,357.04811 0,6.42857 58.7499998,0 6.428574,-6.42857 m -65.1785738,0.42857 0,-6.42857 58.7499998,0 6.428574,6.42857" />
|
||||
<path
|
||||
d="m 566.50525,357.04811 0,6.42857 -58.75,0 -6.42858,-6.42857 m 65.17857,0.42857 0,-6.42857 -58.74999,0 -6.42858,6.42857"
|
||||
style="fill:#f17f07;fill-opacity:1;stroke:#f17f07;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="path6853" />
|
||||
</g>
|
||||
<rect
|
||||
style="fill:none;stroke:#ffffff;stroke-width:5.05291367;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
|
||||
id="rect6866"
|
||||
width="1033.8402"
|
||||
height="702.51031"
|
||||
x="-227.89064"
|
||||
y="5.0758047"
|
||||
inkscape:label="#rect6231" />
|
||||
<path
|
||||
style="fill:#ff251b;fill-opacity:1;stroke:#ff251b;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
|
||||
d="m 279.13165,125.4054 20.29336,-0.0329 -10.36931,-19.46879 -9.92405,19.50168 z"
|
||||
id="path3779" />
|
||||
<g
|
||||
transform="translate(16.458613,-9.5367432e-7)"
|
||||
style="display:inline"
|
||||
id="speed-bg"
|
||||
inkscape:label="#g3820">
|
||||
<rect
|
||||
y="131.33096"
|
||||
x="-163.69627"
|
||||
height="450"
|
||||
width="110.05586"
|
||||
id="rect6300"
|
||||
style="fill:#ffffff;fill-opacity:0.14285715;stroke:#ffffff;stroke-opacity:1;display:inline" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
id="speed-window"
|
||||
d="m -162.85715,337.78541 78.912165,0 0,9.3094 10.606602,9.3094 -10.606602,9.3094 0.08512,9.3094 -78.997285,0 0,-37.2376 z"
|
||||
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
|
||||
inkscape:label="#rect6927" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:label="#g3820"
|
||||
id="altitude-bg"
|
||||
style="display:inline"
|
||||
transform="matrix(-1,0,0,1,562.96105,-9.5367432e-7)">
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:0.14117647;stroke:#ffffff;stroke-opacity:1;display:inline"
|
||||
id="rect5640"
|
||||
width="110.05586"
|
||||
height="450"
|
||||
x="-163.69627"
|
||||
y="131.33096" />
|
||||
</g>
|
||||
<rect
|
||||
style="opacity:0.5;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:2.42740273;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
|
||||
id="vario-bg"
|
||||
width="41.465546"
|
||||
height="339.4606"
|
||||
x="727.99298"
|
||||
y="186.60066"
|
||||
inkscape:label="#rect5038" />
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:0.49350652;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
|
||||
d="m -15.423661,592.19188 0,96.40626 88.90625,0 0.50508,0.007 430.628851,0 0.17857,0 88.6875,0 0,-96.41369 -65.125,0 -23.78125,23.78125 0.23331,-0.70982 -432.045811,0 0,0 -23.0625,-23.071 -65.125,0 z"
|
||||
id="path6922"
|
||||
sodipodi:nodetypes="ccccccccccccccc" />
|
||||
<g
|
||||
style="display:inline"
|
||||
id="g2928"
|
||||
transform="matrix(0.53532208,0,0,0.53532208,250.40617,503.97463)">
|
||||
<path
|
||||
transform="translate(0.08444214,0)"
|
||||
d="m 589.99999,195.93361 c 0,11.44018 -9.2741,20.71428 -20.71428,20.71428 -11.44019,0 -20.71429,-9.2741 -20.71429,-20.71428 0,-11.44018 9.2741,-20.71429 20.71429,-20.71429 11.44018,0 20.71428,9.27411 20.71428,20.71429 z"
|
||||
sodipodi:ry="20.714285"
|
||||
sodipodi:rx="20.714285"
|
||||
sodipodi:cy="195.93361"
|
||||
sodipodi:cx="569.28571"
|
||||
id="path2930"
|
||||
style="fill:#f1b907;fill-opacity:1;stroke:#6f5404;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
sodipodi:type="arc" />
|
||||
<rect
|
||||
ry="2.2728431"
|
||||
y="173.52946"
|
||||
x="590.45447"
|
||||
height="45.456863"
|
||||
width="4.5456862"
|
||||
id="rect2932"
|
||||
style="fill:#f1b907;fill-opacity:1;stroke:#6f5404;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
||||
<rect
|
||||
style="fill:#f1b907;fill-opacity:1;stroke:#6f5404;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
id="rect2934"
|
||||
width="4.5456862"
|
||||
height="45.456863"
|
||||
x="543.74017"
|
||||
y="173.52946"
|
||||
ry="2.2728431" />
|
||||
</g>
|
||||
<path
|
||||
inkscape:export-ydpi="103.61"
|
||||
inkscape:export-xdpi="103.61"
|
||||
inkscape:export-filename="H:\Documents\Hobbies\W433\g9905.png"
|
||||
sodipodi:nodetypes="cccccccccccccccccccc"
|
||||
d="m 223.25403,625.21586 c 2.8525,4.69928 3.65097,9.98089 3.78605,15.72533 l 17.43165,16.61392 0.51269,6.31009 -18.25985,-9.82008 -0.63103,15.7358 6.90167,6.70448 -0.11829,5.36359 -7.72987,-4.41707 -1.73701,2.29337 -0.32549,3.2e-4 -1.73529,-2.2874 -7.72987,4.41706 -0.11829,-5.36359 6.90167,-6.70447 -0.63102,-15.73581 -18.25985,9.82009 0.51269,-6.3101 17.43165,-16.61392 c 0.13507,-5.74443 0.93354,-11.02605 3.78604,-15.72532"
|
||||
style="fill:none;stroke:#f1b907;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
|
||||
id="path34138-1-7" />
|
||||
<g
|
||||
id="g12081"
|
||||
transform="matrix(-0.37832244,0,0,0.37832244,560.4425,481.00671)">
|
||||
<path
|
||||
sodipodi:nodetypes="ccc"
|
||||
id="path10497"
|
||||
d="m 503.05597,382.63105 79.22184,137.21626 C 508.75434,514.35363 449.16817,496.95519 503.05597,382.63105 z"
|
||||
style="fill:none;stroke:#f1b907;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path11011"
|
||||
d="m 488.92858,483.79075 -48.57143,48.57143 76.42857,0 -27.48454,-47.60462"
|
||||
style="fill:none;stroke:#f1b907;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccc"
|
||||
id="path11013"
|
||||
d="m 502.8774,380.31224 81.19998,46.06174 0.35972,94.77314"
|
||||
style="fill:none;stroke:#f1b907;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
id="path11015"
|
||||
d="M 584.05445,426.5424 542.4818,450.47261"
|
||||
style="fill:none;stroke:#f1b907;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
transform="translate(-2.6785714,0.71428572)"
|
||||
d="m 591.60716,426.20148 c 0,3.20522 -2.59835,5.80357 -5.80357,5.80357 -3.20523,0 -5.80357,-2.59835 -5.80357,-5.80357 0,-3.20523 2.59834,-5.80357 5.80357,-5.80357 3.20522,0 5.80357,2.59834 5.80357,5.80357 z"
|
||||
sodipodi:ry="5.8035712"
|
||||
sodipodi:rx="5.8035712"
|
||||
sodipodi:cy="426.20148"
|
||||
sodipodi:cx="585.80359"
|
||||
id="path12062"
|
||||
style="fill:#f1b907;fill-opacity:1;stroke:#f1b907;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
sodipodi:type="arc" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;stroke:#f1b907;stroke-width:2.79651642;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 0.92772957,600.0101 0,6.18925 -2.88853597,0 0,0.72973 0,5.43249 0,0.75676 2.88853597,0 0,6.16222 40.53369843,0 0,-6.91898 0,-5.43249 0,-6.91898 -40.53369843,0 z"
|
||||
id="path12125" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccccc"
|
||||
id="path5384"
|
||||
d="m 304.06475,677.71861 0,2.67964 -9.06747,0 0,1.41651 0,0.0271 0,1.41651 9.06747,0 0,2.67964 4.11419,-4.11419 -4.11419,-4.10518 z"
|
||||
style="fill:#525652;fill-opacity:1;stroke:#262020;stroke-width:0.28871548px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
|
||||
inkscape:label="#path7548" />
|
||||
<path
|
||||
inkscape:label="#path7548"
|
||||
style="fill:#525652;fill-opacity:1;stroke:#262020;stroke-width:0.28871548px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
|
||||
d="m 272.8475,677.71861 0,2.67964 9.06747,0 0,1.41651 0,0.0271 0,1.41651 -9.06747,0 0,2.67964 -4.11419,-4.11419 4.11419,-4.10518 z"
|
||||
id="path5386"
|
||||
sodipodi:nodetypes="cccccccccc" />
|
||||
</g>
|
||||
<g
|
||||
id="g4306"
|
||||
transform="translate(101.68019,0)">
|
||||
@ -2094,141 +2075,585 @@
|
||||
id="tspan4328"
|
||||
sodipodi:role="line">GPS</tspan></text>
|
||||
</g>
|
||||
<path
|
||||
inkscape:label="#rect6927"
|
||||
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
|
||||
d="m 725.81867,337.78498 -78.91217,0 0,9.3094 -10.6066,9.3094 10.6066,9.3094 -0.0851,9.3094 78.99729,0 0,-37.2376 z"
|
||||
id="altitude-window"
|
||||
sodipodi:nodetypes="cccccccc" />
|
||||
<g
|
||||
id="foreground"
|
||||
inkscape:label="#g4670">
|
||||
<rect
|
||||
style="fill:none;stroke:#4c4141;stroke-width:5.05291367;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
|
||||
id="rect6866"
|
||||
width="1033.8402"
|
||||
height="702.51031"
|
||||
x="-227.89064"
|
||||
y="5.0758047"
|
||||
inkscape:label="#rect6231" />
|
||||
<path
|
||||
style="fill:#00ff00;fill-opacity:1;stroke:#00ff00;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
|
||||
d="m 279.13165,125.4054 20.29336,-0.0329 -10.36931,-19.46879 -9.92405,19.50168 z"
|
||||
id="path3779"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
inkscape:label="#rect6300"
|
||||
style="fill:#000000;fill-opacity:0.15686275;stroke:#ffffff;stroke-opacity:1;display:inline"
|
||||
id="speed-bg"
|
||||
width="110.05586"
|
||||
height="450"
|
||||
x="-147.23766"
|
||||
y="131.33096" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:label="#rect6927"
|
||||
style="fill:#000000;fill-opacity:0.78431373;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
|
||||
d="m -146.39854,337.78541 78.912168,0 0,9.3094 10.606602,9.3094 -10.606602,9.3094 0.08512,9.3094 -78.997288,0 0,-37.2376 z"
|
||||
id="speed-window"
|
||||
sodipodi:nodetypes="cccccccc" />
|
||||
<g
|
||||
inkscape:label="#g3820"
|
||||
id="altitude-bg"
|
||||
style="fill:#000000;fill-opacity:0.15686275;stroke:#ffffff;stroke-opacity:1;display:inline"
|
||||
transform="matrix(-1,0,0,1,562.96105,-9.5367432e-7)">
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:0.15686275;stroke:#ffffff;stroke-opacity:1;display:inline"
|
||||
id="rect5640"
|
||||
width="110.05586"
|
||||
height="450"
|
||||
x="-163.69627"
|
||||
y="131.33096" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:0.15686275;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
|
||||
d="m -15.423661,592.19188 0,96.40626 88.90625,0 0.50508,0.007 430.628851,0 0.17857,0 88.6875,0 0,-96.41369 -65.125,0 -23.78125,23.78125 0.23331,-0.70982 -432.045811,0 0,0 -23.0625,-23.071 -65.125,0 z"
|
||||
id="path6922"
|
||||
sodipodi:nodetypes="ccccccccccccccc"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="display:inline"
|
||||
id="g2928"
|
||||
transform="matrix(0.53532208,0,0,0.53532208,250.40617,503.97463)">
|
||||
<path
|
||||
transform="translate(0.08444214,0)"
|
||||
d="m 589.99999,195.93361 c 0,11.44018 -9.2741,20.71428 -20.71428,20.71428 -11.44019,0 -20.71429,-9.2741 -20.71429,-20.71428 0,-11.44018 9.2741,-20.71429 20.71429,-20.71429 11.44018,0 20.71428,9.27411 20.71428,20.71429 z"
|
||||
sodipodi:ry="20.714285"
|
||||
sodipodi:rx="20.714285"
|
||||
sodipodi:cy="195.93361"
|
||||
sodipodi:cx="569.28571"
|
||||
id="path2930"
|
||||
style="fill:#f1b907;fill-opacity:1;stroke:#6f5404;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
sodipodi:type="arc" />
|
||||
<rect
|
||||
ry="2.2728431"
|
||||
y="173.52946"
|
||||
x="590.45447"
|
||||
height="45.456863"
|
||||
width="4.5456862"
|
||||
id="rect2932"
|
||||
style="fill:#f1b907;fill-opacity:1;stroke:#6f5404;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
||||
<rect
|
||||
style="fill:#f1b907;fill-opacity:1;stroke:#6f5404;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
id="rect2934"
|
||||
width="4.5456862"
|
||||
height="45.456863"
|
||||
x="543.74017"
|
||||
y="173.52946"
|
||||
ry="2.2728431" />
|
||||
</g>
|
||||
<path
|
||||
inkscape:export-ydpi="103.61"
|
||||
inkscape:export-xdpi="103.61"
|
||||
inkscape:export-filename="H:\Documents\Hobbies\W433\g9905.png"
|
||||
sodipodi:nodetypes="cccccccccccccccccccc"
|
||||
d="m 223.25403,625.21586 c 2.8525,4.69928 3.65097,9.98089 3.78605,15.72533 l 17.43165,16.61392 0.51269,6.31009 -18.25985,-9.82008 -0.63103,15.7358 6.90167,6.70448 -0.11829,5.36359 -7.72987,-4.41707 -1.73701,2.29337 -0.32549,3.2e-4 -1.73529,-2.2874 -7.72987,4.41706 -0.11829,-5.36359 6.90167,-6.70447 -0.63102,-15.73581 -18.25985,9.82009 0.51269,-6.3101 17.43165,-16.61392 c 0.13507,-5.74443 0.93354,-11.02605 3.78604,-15.72532"
|
||||
style="fill:none;stroke:#f1b907;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
|
||||
id="path34138-1-7"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
id="g12081"
|
||||
transform="matrix(-0.37832244,0,0,0.37832244,560.4425,481.00671)">
|
||||
<path
|
||||
sodipodi:nodetypes="ccc"
|
||||
id="path10497"
|
||||
d="m 503.05597,382.63105 79.22184,137.21626 C 508.75434,514.35363 449.16817,496.95519 503.05597,382.63105 z"
|
||||
style="fill:none;stroke:#f1b907;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path11011"
|
||||
d="m 488.92858,483.79075 -48.57143,48.57143 76.42857,0 -27.48454,-47.60462"
|
||||
style="fill:none;stroke:#f1b907;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccc"
|
||||
id="path11013"
|
||||
d="m 502.8774,380.31224 81.19998,46.06174 0.35972,94.77314"
|
||||
style="fill:none;stroke:#f1b907;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
id="path11015"
|
||||
d="M 584.05445,426.5424 542.4818,450.47261"
|
||||
style="fill:none;stroke:#f1b907;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
transform="translate(-2.6785714,0.71428572)"
|
||||
d="m 591.60716,426.20148 c 0,3.20522 -2.59835,5.80357 -5.80357,5.80357 -3.20523,0 -5.80357,-2.59835 -5.80357,-5.80357 0,-3.20523 2.59834,-5.80357 5.80357,-5.80357 3.20522,0 5.80357,2.59834 5.80357,5.80357 z"
|
||||
sodipodi:ry="5.8035712"
|
||||
sodipodi:rx="5.8035712"
|
||||
sodipodi:cy="426.20148"
|
||||
sodipodi:cx="585.80359"
|
||||
id="path12062"
|
||||
style="fill:#f1b907;fill-opacity:1;stroke:#f1b907;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
sodipodi:type="arc" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;stroke:#f1b907;stroke-width:2.79651642;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 0.92772957,600.0101 0,6.18925 -2.88853597,0 0,0.72973 0,5.43249 0,0.75676 2.88853597,0 0,6.16222 40.53369843,0 0,-6.91898 0,-5.43249 0,-6.91898 -40.53369843,0 z"
|
||||
id="path12125"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccccc"
|
||||
id="path5384"
|
||||
d="m 304.06475,677.71861 0,2.67964 -9.06747,0 0,1.41651 0,0.0271 0,1.41651 9.06747,0 0,2.67964 4.11419,-4.11419 -4.11419,-4.10518 z"
|
||||
style="fill:#525652;fill-opacity:1;stroke:#262020;stroke-width:0.28871548px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
|
||||
inkscape:label="#path7548"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:label="#path7548"
|
||||
style="fill:#525652;fill-opacity:1;stroke:#262020;stroke-width:0.28871548px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
|
||||
d="m 272.8475,677.71861 0,2.67964 9.06747,0 0,1.41651 0,0.0271 0,1.41651 -9.06747,0 0,2.67964 -4.11419,-4.11419 4.11419,-4.10518 z"
|
||||
id="path5386"
|
||||
sodipodi:nodetypes="cccccccccc"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
id="altitude-window"
|
||||
d="m 725.81867,337.78498 -78.91217,0 0,9.3094 -10.6066,9.3094 10.6066,9.3094 -0.0851,9.3094 78.99729,0 0,-37.2376 z"
|
||||
style="fill:#000000;fill-opacity:0.78431373;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
|
||||
inkscape:label="#rect6927" />
|
||||
<g
|
||||
id="g5266">
|
||||
<circle
|
||||
id="circle6392"
|
||||
r="5.6680002"
|
||||
cy="255.12"
|
||||
cx="311.81"
|
||||
d="m 317.478,255.12 c 0,3.13035 -2.53765,5.668 -5.668,5.668 -3.13035,0 -5.668,-2.53765 -5.668,-5.668 0,-3.13035 2.53765,-5.66801 5.668,-5.66801 3.13035,0 5.668,2.53766 5.668,5.66801 z"
|
||||
sodipodi:cx="311.81"
|
||||
sodipodi:cy="255.12"
|
||||
sodipodi:rx="5.6680002"
|
||||
sodipodi:ry="5.6680002"
|
||||
style="fill:#39b54a;stroke:#ffffff;stroke-width:2;display:inline"
|
||||
transform="matrix(1.2807481,0,0,1.3392766,-110.2996,14.543853)" />
|
||||
<line
|
||||
id="line6394"
|
||||
y2="356.21884"
|
||||
x2="310.83472"
|
||||
y1="356.21884"
|
||||
x1="296.31235"
|
||||
style="fill:#39b54a;stroke:#ffffff;stroke-width:2.61937094;display:inline" />
|
||||
<line
|
||||
id="line6396"
|
||||
y2="356.21884"
|
||||
x2="267.27008"
|
||||
y1="356.21884"
|
||||
x1="281.79123"
|
||||
style="fill:#39b54a;stroke:#ffffff;stroke-width:2.61937094;display:inline" />
|
||||
<line
|
||||
id="line6398"
|
||||
y2="333.44037"
|
||||
x2="289.05307"
|
||||
y1="348.6265"
|
||||
x1="289.05307"
|
||||
style="fill:#39b54a;stroke:#ffffff;stroke-width:2.61937094;display:inline" />
|
||||
<line
|
||||
id="line6400"
|
||||
y2="356.21884"
|
||||
x2="118.25632"
|
||||
y1="356.21884"
|
||||
x1="248.72997"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.61937094;display:inline" />
|
||||
<line
|
||||
id="line6402"
|
||||
y2="356.21884"
|
||||
x2="330.2829"
|
||||
y1="356.21884"
|
||||
x1="460.75775"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.61937094;display:inline" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer4"
|
||||
inkscape:label="red needle"
|
||||
style="display:inline"
|
||||
style="display:none"
|
||||
transform="translate(230.4171,-2.5493479)"
|
||||
sodipodi:insensitive="true">
|
||||
<rect
|
||||
inkscape:label="#rect6231"
|
||||
y="5.0807486"
|
||||
x="-227.85889"
|
||||
height="702.50043"
|
||||
width="1033.8469"
|
||||
id="rect6290"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:5.05289459;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0;display:inline" />
|
||||
<g
|
||||
transform="matrix(1.0078864,0,0,1,-0.06058227,-278.08002)"
|
||||
style="display:inline"
|
||||
id="angle"
|
||||
inkscape:label="#g6257" />
|
||||
<rect
|
||||
style="fill:none;stroke:none"
|
||||
id="rect8572"
|
||||
width="1044.2374"
|
||||
height="708.93182"
|
||||
x="-232.47"
|
||||
y="18.972483" />
|
||||
<g
|
||||
id="rollscale"
|
||||
inkscape:label="#g4355"
|
||||
transform="matrix(0.99612266,0,0,1,1.1557355,2.0091557e-7)">
|
||||
<rect
|
||||
style="fill:none;stroke:#ffffff;stroke-width:5.06271887;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
|
||||
id="rect6290"
|
||||
width="1037.8711"
|
||||
height="702.50043"
|
||||
x="-229.90605"
|
||||
y="5.0807486"
|
||||
inkscape:label="#rect6231" />
|
||||
inkscape:label="#g5089">
|
||||
<g
|
||||
transform="matrix(1.0800826,0,0,1.0794632,-23.934953,-31.741915)"
|
||||
inkscape:label="#g6257"
|
||||
id="angle"
|
||||
style="display:inline"
|
||||
transform="matrix(1.0118095,0,0,1,-1.2210522,-278.08002)">
|
||||
id="angle-3">
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.50891328"
|
||||
id="line6291"
|
||||
y2="190.85513"
|
||||
x2="120.73093"
|
||||
y1="170.57494"
|
||||
x1="100.77813" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.50891328"
|
||||
id="line6293"
|
||||
y2="152.11588"
|
||||
x2="170.40582"
|
||||
y1="127.27781"
|
||||
x1="156.29759" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.50891328"
|
||||
id="line6295"
|
||||
y2="127.76344"
|
||||
x2="228.25465"
|
||||
y1="100.05842"
|
||||
x1="220.95166" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.50891328"
|
||||
id="line6297"
|
||||
y2="119.45585"
|
||||
x2="290.33307"
|
||||
y1="90.775726"
|
||||
x1="290.33307" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.50891328"
|
||||
id="line6299"
|
||||
y2="127.76344"
|
||||
x2="352.41013"
|
||||
y1="100.05842"
|
||||
x1="359.71555" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.50891328"
|
||||
id="line6301"
|
||||
y2="152.11588"
|
||||
x2="410.25769"
|
||||
y1="127.27781"
|
||||
x1="424.36963" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.50891328"
|
||||
id="line6303"
|
||||
y2="190.85513"
|
||||
x2="459.93256"
|
||||
y1="170.5762"
|
||||
x1="479.8891" />
|
||||
<line
|
||||
style="opacity:0.2;fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6305"
|
||||
y2="226.55669"
|
||||
x2="83.257965"
|
||||
y1="218.74611"
|
||||
x1="71.425682" />
|
||||
<line
|
||||
style="opacity:0.4;fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6307"
|
||||
y2="215.72861"
|
||||
x2="90.579643"
|
||||
y1="207.29958"
|
||||
x1="79.164169" />
|
||||
<line
|
||||
style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6309"
|
||||
y2="205.30521"
|
||||
x2="98.447525"
|
||||
y1="196.28056"
|
||||
x1="87.482475" />
|
||||
<line
|
||||
style="opacity:0.8;fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6311"
|
||||
y2="195.31563"
|
||||
x2="106.84303"
|
||||
y1="185.71931"
|
||||
x1="96.357063" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6313"
|
||||
y2="185.78508"
|
||||
x2="115.73994"
|
||||
y1="175.64375"
|
||||
x1="105.76289" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6315"
|
||||
y2="176.74019"
|
||||
x2="125.11599"
|
||||
y1="166.08287"
|
||||
x1="115.67522" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6317"
|
||||
y2="168.2075"
|
||||
x2="134.94495"
|
||||
y1="157.06325"
|
||||
x1="126.06542" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6319"
|
||||
y2="160.20975"
|
||||
x2="145.19942"
|
||||
y1="148.60768"
|
||||
x1="136.9072" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6321"
|
||||
y2="152.76717"
|
||||
x2="155.85214"
|
||||
y1="140.7402"
|
||||
x1="148.16843" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6323"
|
||||
y2="145.90256"
|
||||
x2="166.87439"
|
||||
y1="133.48355"
|
||||
x1="159.81906" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6325"
|
||||
y2="139.63362"
|
||||
x2="178.2339"
|
||||
y1="126.85543"
|
||||
x1="171.82808" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6327"
|
||||
y2="133.97801"
|
||||
x2="189.90071"
|
||||
y1="120.87482"
|
||||
x1="184.16185" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6329"
|
||||
y2="128.94846"
|
||||
x2="201.84259"
|
||||
y1="115.55942"
|
||||
x1="196.7868" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6331"
|
||||
y2="124.56133"
|
||||
x2="214.02826"
|
||||
y1="110.92317"
|
||||
x1="209.66689" />
|
||||
<line
|
||||
style="fill:none;stroke:none"
|
||||
id="line6333"
|
||||
y2="120.82927"
|
||||
x2="226.42181"
|
||||
y1="106.97737"
|
||||
x1="222.7697" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6335"
|
||||
y2="117.7612"
|
||||
x2="238.992"
|
||||
y1="103.73477"
|
||||
x1="236.05664" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6337"
|
||||
y2="115.36717"
|
||||
x2="251.70279"
|
||||
y1="101.20294"
|
||||
x1="249.49286" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6339"
|
||||
y2="113.65104"
|
||||
x2="264.51694"
|
||||
y1="99.389381"
|
||||
x1="263.04242" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6341"
|
||||
y2="112.62032"
|
||||
x2="277.40442"
|
||||
y1="98.299232"
|
||||
x1="276.66403" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6343"
|
||||
y2="112.27632"
|
||||
x2="290.32684"
|
||||
y1="97.93502"
|
||||
x1="290.32553" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6345"
|
||||
y2="112.61906"
|
||||
x2="303.24908"
|
||||
y1="98.297997"
|
||||
x1="303.98581" />
|
||||
<g
|
||||
style="display:inline"
|
||||
id="slider1"
|
||||
transform="translate(-10.552094,234.36218)"
|
||||
inkscape:label="#g6169">
|
||||
<path
|
||||
sodipodi:open="true"
|
||||
sodipodi:end="5.8049311"
|
||||
sodipodi:start="3.6237905"
|
||||
transform="matrix(1.04245,0,0,1.04245,-39.343346,-14.403881)"
|
||||
d="m 116.63233,278.11506 c 59.81989,-114.28932 200.9633,-158.44551 315.25261,-98.62561 42.43119,22.2088 77.00986,56.9241 99.05115,99.44254"
|
||||
sodipodi:ry="233.57143"
|
||||
sodipodi:rx="233.57143"
|
||||
sodipodi:cy="386.42856"
|
||||
sodipodi:cx="323.57144"
|
||||
id="path5939"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.87783599;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
inkscape:transform-center-x="1.9963604"
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:transform-center-y="-264.10817"
|
||||
id="path6139"
|
||||
d="m 298.57144,144.4675 0,-20.65945"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:4.49700022;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:transform-center-x="69.19694"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:4.49700022;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="M 172.25161,179.81073 161.17392,160.6236"
|
||||
id="path6141"
|
||||
inkscape:transform-center-y="-119.85262" />
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:transform-center-y="-69.19694"
|
||||
id="path6143"
|
||||
d="M 83.717038,274.55684 60.591955,261.20557"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:4.49700022;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:transform-center-x="119.85262" />
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:transform-center-x="-69.19694"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:4.49700022;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 424.28893,180.854 11.68003,-20.2304"
|
||||
id="path6145"
|
||||
inkscape:transform-center-y="-119.85262" />
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:transform-center-y="-69.19694"
|
||||
id="path6147"
|
||||
d="m 512.54237,275.06692 24.00856,-13.86135"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:4.49700022;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:transform-center-x="-119.85262" />
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:transform-center-x="-24.031845"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 342.82539,147.62649 2.73081,-11.19792"
|
||||
id="path6149"
|
||||
inkscape:transform-center-y="-136.29137" />
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:transform-center-y="-130.04771"
|
||||
id="path6151"
|
||||
d="m 384.74896,161.83228 5.26158,-14.68942"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:transform-center-x="-47.333495" />
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:transform-center-x="24.031845"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 254.46088,148.43969 -2.3856,-12.01112"
|
||||
id="path6157"
|
||||
inkscape:transform-center-y="-136.29137" />
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:transform-center-y="-130.04771"
|
||||
id="path6159"
|
||||
d="m 211.939,160.5824 -5.80849,-13.43954"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:transform-center-x="47.333495" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="M 120.46531,220.96674 105.09926,205.60069"
|
||||
id="path6165"
|
||||
inkscape:transform-center-y="-185.34103"
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:transform-center-x="188.16432" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 475.74748,220.24299 14.96558,-14.96558"
|
||||
id="path6167"
|
||||
inkscape:transform-center-y="-188.16431"
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:transform-center-x="-185.34104" />
|
||||
id="g7953">
|
||||
<line
|
||||
x1="317.60739"
|
||||
y1="99.385597"
|
||||
x2="316.13669"
|
||||
y2="113.64977"
|
||||
id="line6347"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664" />
|
||||
</g>
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6349"
|
||||
y2="115.36339"
|
||||
x2="328.95325"
|
||||
y1="101.19788"
|
||||
x1="331.15695" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6351"
|
||||
y2="117.75741"
|
||||
x2="341.66284"
|
||||
y1="103.72845"
|
||||
x1="344.59451" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6353"
|
||||
y2="120.82294"
|
||||
x2="354.23303"
|
||||
y1="106.96854"
|
||||
x1="357.88144" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6355"
|
||||
y2="124.55501"
|
||||
x2="366.62778"
|
||||
y1="110.91179"
|
||||
x1="370.98422" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6357"
|
||||
y2="128.93834"
|
||||
x2="378.81357"
|
||||
y1="115.54676"
|
||||
x1="383.86551" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6359"
|
||||
y2="133.96536"
|
||||
x2="390.75656"
|
||||
y1="120.86217"
|
||||
x1="396.4917" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6361"
|
||||
y2="139.62096"
|
||||
x2="402.42346"
|
||||
y1="126.84023"
|
||||
x1="408.82547" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6363"
|
||||
y2="145.88991"
|
||||
x2="413.78287"
|
||||
y1="133.46582"
|
||||
x1="420.83447" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6365"
|
||||
y2="152.75328"
|
||||
x2="424.80521"
|
||||
y1="140.7225"
|
||||
x1="432.48764" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6367"
|
||||
y2="160.19456"
|
||||
x2="435.45786"
|
||||
y1="148.58746"
|
||||
x1="443.74878" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6369"
|
||||
y2="168.19107"
|
||||
x2="445.71484"
|
||||
y1="157.04175"
|
||||
x1="454.59061" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6371"
|
||||
y2="176.72374"
|
||||
x2="455.54376"
|
||||
y1="166.06134"
|
||||
x1="464.98325" />
|
||||
<line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6373"
|
||||
y2="185.76614"
|
||||
x2="464.91986"
|
||||
y1="175.61971"
|
||||
x1="474.89688" />
|
||||
<line
|
||||
style="opacity:0.8;fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6375"
|
||||
y2="195.29539"
|
||||
x2="473.81931"
|
||||
y1="185.69405"
|
||||
x1="484.30408" />
|
||||
<line
|
||||
style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6377"
|
||||
y2="205.28499"
|
||||
x2="482.21475"
|
||||
y1="196.25528"
|
||||
x1="493.17978" />
|
||||
<line
|
||||
style="opacity:0.4;fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6379"
|
||||
y2="215.70833"
|
||||
x2="490.08386"
|
||||
y1="207.27303"
|
||||
x1="501.49942" />
|
||||
<line
|
||||
style="opacity:0.2;fill:none;stroke:#ffffff;stroke-width:1.25445664"
|
||||
id="line6381"
|
||||
y2="226.53519"
|
||||
x2="497.40677"
|
||||
y1="218.71956"
|
||||
x1="509.24033" />
|
||||
</g>
|
||||
<rect
|
||||
y="3.9179461"
|
||||
x="-229.04851"
|
||||
height="703.45746"
|
||||
width="1034.6571"
|
||||
id="rect4313"
|
||||
style="fill:none;stroke:none" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer8"
|
||||
inkscape:label="Heading"
|
||||
style="display:inline"
|
||||
style="display:none"
|
||||
transform="translate(230.4171,-2.5493479)"
|
||||
sodipodi:insensitive="true">
|
||||
<text
|
||||
@ -2245,31 +2670,30 @@
|
||||
style="fill:#1c870b;fill-opacity:1;stroke:#1c870b;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
|
||||
d="m 182.79245,22.132226 20.29336,0.0329 -10.36931,19.468794 -9.92405,-19.501684 z"
|
||||
id="homewaypoint-bearing"
|
||||
inkscape:label="#path3779-1" />
|
||||
inkscape:label="#path3779-1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#ff251b;fill-opacity:1;stroke:#ff251b;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
|
||||
d="m 347.56915,22.472311 20.29336,0.0329 -10.36931,19.46879 -9.92405,-19.50168 z"
|
||||
id="nextwaypoint-bearing"
|
||||
inkscape:label="#path3779-7" />
|
||||
inkscape:label="#path3779-7"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
id="compass"
|
||||
inkscape:label="#g6260"
|
||||
transform="translate(2.6512146,0)">
|
||||
<g
|
||||
id="g6264">
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:0.49411765;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
|
||||
id="rect6951"
|
||||
width="431.33514"
|
||||
height="38.57143"
|
||||
x="70.710678"
|
||||
y="20.906822"
|
||||
inkscape:label="#rect6951" />
|
||||
<path
|
||||
style="fill:none;stroke:#ff251b;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 286.37825,57.692538 0,-34.999999"
|
||||
id="path4216" />
|
||||
</g>
|
||||
inkscape:label="#g4577">
|
||||
<rect
|
||||
inkscape:label="#rect6951"
|
||||
y="20.906822"
|
||||
x="73.361893"
|
||||
height="38.57143"
|
||||
width="431.33514"
|
||||
id="rect6951"
|
||||
style="fill:#000000;fill-opacity:0.19607843;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4216"
|
||||
d="m 289.02946,57.692538 0,-34.999999"
|
||||
style="fill:#000000;fill-opacity:0.2745098;stroke:#e60000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
</g>
|
||||
<rect
|
||||
y="-77.806404"
|
||||
@ -2286,7 +2710,8 @@
|
||||
inkscape:label="#path6953"
|
||||
id="compass-scale"
|
||||
d="m -456.82877,-24.24489 1493.98137,0"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:3.06858087;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:3.06858087;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
transform="translate(0.0719,-83.494924)"
|
||||
id="g4993"
|
||||
@ -2298,12 +2723,14 @@
|
||||
<path
|
||||
id="path3636"
|
||||
style="font-size:28px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
d="m 280.28409,30.123177 5.7832,0 7.54688,11.08789 0,-11.08789 5.83789,0 0,20.042968 -5.83789,0 -7.50586,-11.005859 0,11.005859 -5.82422,0 z" />
|
||||
d="m 280.28409,30.123177 5.7832,0 7.54688,11.08789 0,-11.08789 5.83789,0 0,20.042968 -5.83789,0 -7.50586,-11.005859 0,11.005859 -5.82422,0 z"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 289.86807,59.285714 0,-8.571429"
|
||||
id="path6986" />
|
||||
id="path6986"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(0.11242867,-84)"
|
||||
@ -2316,13 +2743,15 @@
|
||||
<path
|
||||
id="path3642"
|
||||
style="font-size:28px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
d="m -217.0715,43.535286 5.89258,-0.369141 c 0.12759,0.957038 0.38736,1.686204 0.77929,2.1875 0.63801,0.811202 1.54947,1.216801 2.73438,1.216797 0.8841,4e-6 1.56542,-0.207353 2.04394,-0.62207 0.47851,-0.414709 0.71776,-0.895503 0.71778,-1.442383 -2e-5,-0.519525 -0.22788,-0.984368 -0.6836,-1.394531 -0.45574,-0.410149 -1.51303,-0.797518 -3.17187,-1.16211 -2.71616,-0.610668 -4.653,-1.421865 -5.81055,-2.433593 -1.16667,-1.011707 -1.75,-2.30142 -1.75,-3.869141 0,-1.029932 0.2985,-2.002913 0.89551,-2.918945 0.597,-0.915998 1.49479,-1.636049 2.69336,-2.160156 1.19856,-0.524069 2.84146,-0.786113 4.92871,-0.786133 2.56118,2e-5 4.51398,0.476257 5.8584,1.428711 1.34438,0.952492 2.14418,2.46779 2.39941,4.545898 l -5.83789,0.341797 c -0.15496,-0.902329 -0.48081,-1.558578 -0.97754,-1.96875 -0.49675,-0.41014 -1.18263,-0.615218 -2.05762,-0.615234 -0.72006,1.6e-5 -1.26237,0.152685 -1.62695,0.458007 -0.36459,0.305355 -0.54688,0.676774 -0.54687,1.114258 -1e-5,0.319025 0.15038,0.606134 0.45117,0.861328 0.29166,0.264337 0.98436,0.510431 2.07812,0.738282 2.70702,0.583346 4.64615,1.173514 5.81739,1.770507 1.1712,0.597017 2.02342,1.337576 2.55664,2.22168 0.53318,0.884123 0.79978,1.873055 0.7998,2.966797 -2e-5,1.285161 -0.35549,2.470056 -1.06641,3.554687 -0.71095,1.084638 -1.70444,1.907228 -2.98046,2.467774 -1.27606,0.560547 -2.88478,0.84082 -4.82618,0.84082 -3.40886,0 -5.76953,-0.656249 -7.08203,-1.96875 -1.3125,-1.312497 -2.05534,-2.980464 -2.22851,-5.003906 z" />
|
||||
d="m -217.0715,43.535286 5.89258,-0.369141 c 0.12759,0.957038 0.38736,1.686204 0.77929,2.1875 0.63801,0.811202 1.54947,1.216801 2.73438,1.216797 0.8841,4e-6 1.56542,-0.207353 2.04394,-0.62207 0.47851,-0.414709 0.71776,-0.895503 0.71778,-1.442383 -2e-5,-0.519525 -0.22788,-0.984368 -0.6836,-1.394531 -0.45574,-0.410149 -1.51303,-0.797518 -3.17187,-1.16211 -2.71616,-0.610668 -4.653,-1.421865 -5.81055,-2.433593 -1.16667,-1.011707 -1.75,-2.30142 -1.75,-3.869141 0,-1.029932 0.2985,-2.002913 0.89551,-2.918945 0.597,-0.915998 1.49479,-1.636049 2.69336,-2.160156 1.19856,-0.524069 2.84146,-0.786113 4.92871,-0.786133 2.56118,2e-5 4.51398,0.476257 5.8584,1.428711 1.34438,0.952492 2.14418,2.46779 2.39941,4.545898 l -5.83789,0.341797 c -0.15496,-0.902329 -0.48081,-1.558578 -0.97754,-1.96875 -0.49675,-0.41014 -1.18263,-0.615218 -2.05762,-0.615234 -0.72006,1.6e-5 -1.26237,0.152685 -1.62695,0.458007 -0.36459,0.305355 -0.54688,0.676774 -0.54687,1.114258 -1e-5,0.319025 0.15038,0.606134 0.45117,0.861328 0.29166,0.264337 0.98436,0.510431 2.07812,0.738282 2.70702,0.583346 4.64615,1.173514 5.81739,1.770507 1.1712,0.597017 2.02342,1.337576 2.55664,2.22168 0.53318,0.884123 0.79978,1.873055 0.7998,2.966797 -2e-5,1.285161 -0.35549,2.470056 -1.06641,3.554687 -0.71095,1.084638 -1.70444,1.907228 -2.98046,2.467774 -1.27606,0.560547 -2.88478,0.84082 -4.82618,0.84082 -3.40886,0 -5.76953,-0.656249 -7.08203,-1.96875 -1.3125,-1.312497 -2.05534,-2.980464 -2.22851,-5.003906 z"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<path
|
||||
id="path6988"
|
||||
d="m -207.97971,59.79079 0,-9.076505"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
sodipodi:nodetypes="cc" />
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(0.05301285,-83.494924)"
|
||||
@ -2335,12 +2764,14 @@
|
||||
<path
|
||||
id="path3639"
|
||||
style="font-size:28px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
d="m 778.62402,43.535286 5.89258,-0.369141 c 0.1276,0.957038 0.38736,1.686204 0.7793,2.1875 0.63801,0.811202 1.54947,1.216801 2.73437,1.216797 0.88411,4e-6 1.56542,-0.207353 2.04395,-0.62207 0.4785,-0.414709 0.71776,-0.895503 0.71777,-1.442383 -1e-5,-0.519525 -0.22788,-0.984368 -0.68359,-1.394531 -0.45574,-0.410149 -1.51303,-0.797518 -3.17188,-1.16211 -2.71615,-0.610668 -4.653,-1.421865 -5.81054,-2.433593 -1.16667,-1.011707 -1.75001,-2.30142 -1.75,-3.869141 -10e-6,-1.029932 0.2985,-2.002913 0.8955,-2.918945 0.59701,-0.915998 1.49479,-1.636049 2.69336,-2.160156 1.19856,-0.524069 2.84147,-0.786113 4.92871,-0.786133 2.56119,2e-5 4.51399,0.476257 5.8584,1.428711 1.34439,0.952492 2.14419,2.46779 2.39942,4.545898 l -5.83789,0.341797 c -0.15496,-0.902329 -0.48081,-1.558578 -0.97754,-1.96875 -0.49676,-0.41014 -1.18263,-0.615218 -2.05762,-0.615234 -0.72006,1.6e-5 -1.26238,0.152685 -1.62695,0.458007 -0.36459,0.305355 -0.54689,0.676774 -0.54688,1.114258 -1e-5,0.319025 0.15039,0.606134 0.45117,0.861328 0.29166,0.264337 0.98437,0.510431 2.07813,0.738282 2.70702,0.583346 4.64614,1.173514 5.81738,1.770507 1.17121,0.597017 2.02342,1.337576 2.55664,2.22168 0.53319,0.884123 0.79979,1.873055 0.79981,2.966797 -2e-5,1.285161 -0.35549,2.470056 -1.06641,3.554687 -0.71095,1.084638 -1.70444,1.907228 -2.98047,2.467774 -1.27605,0.560547 -2.88478,0.84082 -4.82617,0.84082 -3.40886,0 -5.76954,-0.656249 -7.08203,-1.96875 -1.3125,-1.312497 -2.05534,-2.980464 -2.22852,-5.003906 z" />
|
||||
d="m 778.62402,43.535286 5.89258,-0.369141 c 0.1276,0.957038 0.38736,1.686204 0.7793,2.1875 0.63801,0.811202 1.54947,1.216801 2.73437,1.216797 0.88411,4e-6 1.56542,-0.207353 2.04395,-0.62207 0.4785,-0.414709 0.71776,-0.895503 0.71777,-1.442383 -1e-5,-0.519525 -0.22788,-0.984368 -0.68359,-1.394531 -0.45574,-0.410149 -1.51303,-0.797518 -3.17188,-1.16211 -2.71615,-0.610668 -4.653,-1.421865 -5.81054,-2.433593 -1.16667,-1.011707 -1.75001,-2.30142 -1.75,-3.869141 -10e-6,-1.029932 0.2985,-2.002913 0.8955,-2.918945 0.59701,-0.915998 1.49479,-1.636049 2.69336,-2.160156 1.19856,-0.524069 2.84147,-0.786113 4.92871,-0.786133 2.56119,2e-5 4.51399,0.476257 5.8584,1.428711 1.34439,0.952492 2.14419,2.46779 2.39942,4.545898 l -5.83789,0.341797 c -0.15496,-0.902329 -0.48081,-1.558578 -0.97754,-1.96875 -0.49676,-0.41014 -1.18263,-0.615218 -2.05762,-0.615234 -0.72006,1.6e-5 -1.26238,0.152685 -1.62695,0.458007 -0.36459,0.305355 -0.54689,0.676774 -0.54688,1.114258 -1e-5,0.319025 0.15039,0.606134 0.45117,0.861328 0.29166,0.264337 0.98437,0.510431 2.07813,0.738282 2.70702,0.583346 4.64614,1.173514 5.81738,1.770507 1.17121,0.597017 2.02342,1.337576 2.55664,2.22168 0.53319,0.884123 0.79979,1.873055 0.79981,2.966797 -2e-5,1.285161 -0.35549,2.470056 -1.06641,3.554687 -0.71095,1.084638 -1.70444,1.907228 -2.98047,2.467774 -1.27605,0.560547 -2.88478,0.84082 -4.82617,0.84082 -3.40886,0 -5.76954,-0.656249 -7.08203,-1.96875 -1.3125,-1.312497 -2.05534,-2.980464 -2.22852,-5.003906 z"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<path
|
||||
id="path6990"
|
||||
d="m 787.71582,59.285714 0,-8.571429"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(0.09755707,-83.494924)"
|
||||
@ -2353,12 +2784,14 @@
|
||||
<path
|
||||
id="path3645"
|
||||
style="font-size:28px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
d="m 26.930511,30.123177 5.878907,0 2.11914,11.197265 3.089844,-11.197265 5.865234,0 3.103516,11.197265 2.119141,-11.197265 5.851562,0 -4.416015,20.042968 -6.070313,0 -3.513672,-12.61914 -3.5,12.61914 -6.070312,0 z" />
|
||||
d="m 26.930511,30.123177 5.878907,0 2.11914,11.197265 3.089844,-11.197265 5.865234,0 3.103516,11.197265 2.119141,-11.197265 5.851562,0 -4.416015,20.042968 -6.070313,0 -3.513672,-12.61914 -3.5,12.61914 -6.070312,0 z"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<path
|
||||
id="path6992"
|
||||
d="m 40.944183,59.285714 0,-8.571429"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(0.06781006,-83.494924)"
|
||||
@ -2371,12 +2804,14 @@
|
||||
<path
|
||||
id="path3648"
|
||||
style="font-size:28px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
d="m 530.34277,30.123177 16.59766,0 0,4.279296 -10.39063,0 0,3.185547 9.63868,0 0,4.087891 -9.63868,0 0,3.951172 10.69141,0 0,4.539062 -16.89844,0 z" />
|
||||
d="m 530.34277,30.123177 16.59766,0 0,4.279296 -10.39063,0 0,3.185547 9.63868,0 0,4.087891 -9.63868,0 0,3.951172 10.69141,0 0,4.539062 -16.89844,0 z"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<path
|
||||
id="path6994"
|
||||
d="m 538.79199,59.285714 0,-8.571429"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(-0.76619339,-83.494924)"
|
||||
@ -2385,18 +2820,21 @@
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 346.03012,59.285714 0,-8.571429"
|
||||
id="path3048" />
|
||||
id="path3048"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text3062">
|
||||
<path
|
||||
d="m 345.65903,49.571434 -5.9668,0 c 0.0684,-0.589192 0.27588,-1.143391 0.62256,-1.662598 0.34668,-0.519203 0.9969,-1.131996 1.95068,-1.838379 0.58268,-0.432938 0.9554,-0.761714 1.11817,-0.986328 0.16275,-0.224604 0.24413,-0.43782 0.24414,-0.639648 -10e-6,-0.218094 -0.0806,-0.404454 -0.2417,-0.559082 -0.16114,-0.154617 -0.36378,-0.231928 -0.60791,-0.231934 -0.25391,6e-6 -0.46143,0.07976 -0.62256,0.239258 -0.16114,0.159511 -0.26937,0.441086 -0.32471,0.844727 l -1.99219,-0.161133 c 0.0781,-0.55989 0.22136,-0.996902 0.42969,-1.311035 0.20833,-0.314121 0.50212,-0.555006 0.88135,-0.722657 0.37923,-0.167636 0.90413,-0.251457 1.57471,-0.251464 0.69986,7e-6 1.2443,0.07976 1.6333,0.239257 0.38899,0.159512 0.69498,0.404467 0.91797,0.734864 0.22297,0.330409 0.33446,0.700689 0.33447,1.11084 -1e-5,0.436202 -0.12777,0.852868 -0.3833,1.25 -0.25554,0.397138 -0.72022,0.833336 -1.39404,1.308593 -0.4004,0.276695 -0.66814,0.47038 -0.80323,0.581055 -0.13509,0.110679 -0.29378,0.255536 -0.47607,0.43457 l 3.10547,0 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3651" />
|
||||
id="path3651"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 346.5184,45.963036 c 0,-1.360673 0.24496,-2.31282 0.73487,-2.856446 0.4899,-0.543613 1.23616,-0.815422 2.23876,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56152,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.271,0.734864 0.13345,0.533859 0.20019,1.090499 0.20019,1.669922 0,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60221,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.37109,-0.192057 -0.67545,-0.473632 -0.91308,-0.844726 -0.17253,-0.263671 -0.30681,-0.624185 -0.40283,-1.081543 -0.096,-0.457354 -0.14405,-0.962725 -0.14405,-1.516113 z m 1.97266,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70068,0.500488 0.20182,2e-6 0.37679,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16113,-0.327142 -0.40283,-0.490716 -0.72509,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.7129,0.500488 -0.14648,0.333664 -0.21972,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3653" />
|
||||
id="path3653"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -2406,18 +2844,21 @@
|
||||
<path
|
||||
id="path3046"
|
||||
d="m 316.306,59.285714 0,-8.571429"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text3860">
|
||||
<path
|
||||
d="m 314.34555,42.291161 0,7.280273 -2.01172,0 0,-4.770508 c -0.32552,0.247401 -0.64046,0.447596 -0.94482,0.600586 -0.30437,0.152999 -0.68604,0.299483 -1.14502,0.439453 l 0,-1.630859 c 0.67708,-0.218093 1.2028,-0.480137 1.57715,-0.786133 0.37434,-0.305983 0.66731,-0.683587 0.8789,-1.132812 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3656" />
|
||||
id="path3656"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 316.5184,45.963036 c 0,-1.360673 0.24496,-2.31282 0.73487,-2.856446 0.4899,-0.543613 1.23616,-0.815422 2.23876,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56152,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.271,0.734864 0.13345,0.533859 0.20019,1.090499 0.20019,1.669922 0,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60221,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.37109,-0.192057 -0.67545,-0.473632 -0.91308,-0.844726 -0.17253,-0.263671 -0.30681,-0.624185 -0.40283,-1.081543 -0.096,-0.457354 -0.14405,-0.962725 -0.14405,-1.516113 z m 1.97266,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70068,0.500488 0.20182,2e-6 0.37679,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16113,-0.327142 -0.40283,-0.490716 -0.72509,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.7129,0.500488 -0.14648,0.333664 -0.21972,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3658" />
|
||||
id="path3658"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -2427,18 +2868,21 @@
|
||||
<path
|
||||
id="path3050"
|
||||
d="m 372.07407,59.285714 0,-8.571429"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text3864">
|
||||
<path
|
||||
d="m 367.76743,44.483543 -1.87989,-0.336914 c 0.15625,-0.598952 0.45654,-1.057936 0.90088,-1.376953 0.44434,-0.319003 1.0734,-0.478508 1.88721,-0.478515 0.93424,7e-6 1.60969,0.17416 2.02637,0.522461 0.41666,0.348313 0.62499,0.786138 0.625,1.313476 -10e-6,0.30925 -0.0847,0.589198 -0.25391,0.839844 -0.16928,0.250655 -0.42481,0.470382 -0.7666,0.65918 0.27669,0.06836 0.48827,0.148115 0.63476,0.239257 0.23763,0.146488 0.42236,0.339359 0.5542,0.578614 0.13183,0.23926 0.19775,0.524905 0.19776,0.856933 -1e-5,0.416669 -0.10906,0.816245 -0.32715,1.198731 -0.21811,0.382487 -0.53223,0.677083 -0.94238,0.883789 -0.41017,0.206705 -0.9489,0.310058 -1.61622,0.310058 -0.65104,0 -1.16455,-0.0765 -1.54052,-0.229492 -0.37598,-0.152994 -0.68523,-0.37679 -0.92774,-0.671387 -0.24251,-0.294595 -0.42887,-0.664874 -0.55908,-1.110839 l 1.98731,-0.263672 c 0.0781,0.400392 0.19937,0.677898 0.36377,0.832519 0.16438,0.154624 0.37353,0.231935 0.62744,0.231934 0.26692,10e-7 0.48909,-0.09766 0.6665,-0.292969 0.17741,-0.195311 0.26611,-0.455727 0.26611,-0.78125 0,-0.332029 -0.0855,-0.58919 -0.25634,-0.771484 -0.17091,-0.182289 -0.40284,-0.273435 -0.6958,-0.273438 -0.15626,3e-6 -0.3711,0.03907 -0.64454,0.117188 l 0.10254,-1.420899 c 0.11068,0.01628 0.19694,0.02442 0.25879,0.02441 0.26042,5e-6 0.4777,-0.083 0.65186,-0.249023 0.17415,-0.166011 0.26122,-0.362951 0.26123,-0.59082 -10e-6,-0.218094 -0.0651,-0.392247 -0.19531,-0.522461 -0.13022,-0.130203 -0.30925,-0.195307 -0.53711,-0.195313 -0.23438,6e-6 -0.42481,0.07081 -0.57129,0.212402 -0.14649,0.141608 -0.24577,0.389817 -0.29785,0.744629 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3661" />
|
||||
id="path3661"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 372.5184,45.963036 c 0,-1.360673 0.24496,-2.31282 0.73487,-2.856446 0.4899,-0.543613 1.23616,-0.815422 2.23876,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56152,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.271,0.734864 0.13345,0.533859 0.20019,1.090499 0.20019,1.669922 0,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60221,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.37109,-0.192057 -0.67545,-0.473632 -0.91308,-0.844726 -0.17253,-0.263671 -0.30681,-0.624185 -0.40283,-1.081543 -0.096,-0.457354 -0.14405,-0.962725 -0.14405,-1.516113 z m 1.97266,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70068,0.500488 0.20182,2e-6 0.37679,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16113,-0.327142 -0.40283,-0.490716 -0.72509,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.7129,0.500488 -0.14648,0.333664 -0.21972,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3663" />
|
||||
id="path3663"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -2448,18 +2892,21 @@
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 454.10825,59.285714 0,-8.571429"
|
||||
id="path3056" />
|
||||
id="path3056"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text3872">
|
||||
<path
|
||||
d="m 453.59555,44.024559 -1.97754,0.244141 c -0.0521,-0.276687 -0.13916,-0.472 -0.26123,-0.585938 -0.12207,-0.113926 -0.27263,-0.170892 -0.45166,-0.170898 -0.32227,6e-6 -0.57292,0.162766 -0.75195,0.488281 -0.13021,0.23438 -0.22624,0.735682 -0.28809,1.503906 0.23763,-0.240881 0.48177,-0.419103 0.73242,-0.534668 0.25065,-0.115555 0.54036,-0.173335 0.86914,-0.17334 0.63802,5e-6 1.17757,0.22787 1.61866,0.683594 0.44107,0.455733 0.66161,1.033532 0.66162,1.733399 -10e-6,0.472007 -0.1115,0.903321 -0.33447,1.293945 -0.22299,0.390626 -0.53224,0.686035 -0.92774,0.88623 -0.39551,0.200196 -0.89112,0.300293 -1.48682,0.300293 -0.71614,0 -1.29069,-0.12207 -1.72363,-0.366211 -0.43294,-0.24414 -0.77881,-0.633951 -1.0376,-1.169433 -0.25879,-0.53548 -0.38818,-1.244301 -0.38818,-2.126465 0,-1.292313 0.27181,-2.238764 0.81543,-2.839356 0.54362,-0.600578 1.2972,-0.900871 2.26074,-0.900878 0.56966,7e-6 1.01969,0.06593 1.3501,0.197753 0.3304,0.131843 0.60465,0.324714 0.82275,0.578614 0.2181,0.253912 0.38411,0.572922 0.49805,0.957031 z m -3.66211,3.188477 c 0,0.387371 0.0976,0.690919 0.29297,0.910644 0.19531,0.219728 0.43457,0.329591 0.71777,0.32959 0.26042,10e-7 0.47851,-0.09928 0.6543,-0.297852 0.17578,-0.198566 0.26367,-0.494789 0.26367,-0.888671 0,-0.403644 -0.0911,-0.71126 -0.27344,-0.922852 -0.18229,-0.211585 -0.40853,-0.317379 -0.67871,-0.317383 -0.27669,4e-6 -0.50863,0.102543 -0.6958,0.307617 -0.18717,0.205081 -0.28076,0.49805 -0.28076,0.878907 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3666" />
|
||||
id="path3666"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 454.5184,45.963036 c 0,-1.360673 0.24496,-2.31282 0.73487,-2.856446 0.4899,-0.543613 1.23616,-0.815422 2.23876,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56152,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.271,0.734864 0.13345,0.533859 0.20019,1.090499 0.20019,1.669922 0,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60221,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.37109,-0.192057 -0.67545,-0.473632 -0.91308,-0.844726 -0.17253,-0.263671 -0.30681,-0.624185 -0.40283,-1.081543 -0.096,-0.457354 -0.14405,-0.962725 -0.14405,-1.516113 z m 1.97266,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70068,0.500488 0.20182,2e-6 0.37679,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16113,-0.327142 -0.40283,-0.490716 -0.72509,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.7129,0.500488 -0.14648,0.333664 -0.21972,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3668" />
|
||||
id="path3668"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -2469,18 +2916,21 @@
|
||||
<path
|
||||
id="path3058"
|
||||
d="m 484.12045,59.285714 0,-8.571429"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text3876">
|
||||
<path
|
||||
d="m 477.87289,42.413231 5.80567,0 0,1.342773 c -0.50456,0.455735 -0.92611,0.948898 -1.26465,1.479493 -0.41016,0.644534 -0.73405,1.362307 -0.97168,2.15332 -0.18881,0.615236 -0.31576,1.342774 -0.38086,2.182617 l -1.98242,0 c 0.15625,-1.168619 0.40202,-2.148435 0.7373,-2.939453 0.33529,-0.791012 0.86589,-1.637365 1.5918,-2.539063 l -3.53516,0 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3671" />
|
||||
id="path3671"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 484.5184,45.963036 c 0,-1.360673 0.24496,-2.31282 0.73487,-2.856446 0.4899,-0.543613 1.23616,-0.815422 2.23876,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56152,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.271,0.734864 0.13345,0.533859 0.20019,1.090499 0.20019,1.669922 0,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60221,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.37109,-0.192057 -0.67545,-0.473632 -0.91308,-0.844726 -0.17253,-0.263671 -0.30681,-0.624185 -0.40283,-1.081543 -0.096,-0.457354 -0.14405,-0.962725 -0.14405,-1.516113 z m 1.97266,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70068,0.500488 0.20182,2e-6 0.37679,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16113,-0.327142 -0.40283,-0.490716 -0.72509,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.7129,0.500488 -0.14648,0.333664 -0.21972,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3673" />
|
||||
id="path3673"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -2490,18 +2940,21 @@
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 512.10336,59.285714 0,-8.571429"
|
||||
id="path3060" />
|
||||
id="path3060"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text3880">
|
||||
<path
|
||||
d="m 507.035,45.723778 c -0.3125,-0.166012 -0.54036,-0.351559 -0.68359,-0.556641 -0.19531,-0.279943 -0.29297,-0.602208 -0.29297,-0.966797 0,-0.598952 0.28158,-1.08886 0.84473,-1.469726 0.43945,-0.292962 1.0205,-0.439446 1.74316,-0.439453 0.95703,7e-6 1.66422,0.182298 2.12158,0.546875 0.45735,0.364589 0.68603,0.823573 0.68604,1.376953 -1e-5,0.32227 -0.0912,0.623377 -0.27344,0.90332 -0.13672,0.208338 -0.35157,0.41016 -0.64453,0.605469 0.38736,0.18555 0.67626,0.431318 0.8667,0.737304 0.19042,0.305993 0.28564,0.644534 0.28564,1.015625 0,0.358075 -0.0822,0.692547 -0.24658,1.003418 -0.16439,0.310874 -0.36621,0.550945 -0.60547,0.720215 -0.23926,0.169271 -0.53711,0.293783 -0.89355,0.373535 -0.35645,0.07975 -0.7365,0.119629 -1.14014,0.119629 -0.75846,0 -1.33789,-0.08952 -1.73828,-0.268554 -0.40039,-0.179036 -0.70475,-0.442708 -0.91309,-0.791016 -0.20833,-0.348306 -0.3125,-0.737303 -0.3125,-1.166992 0,-0.41992 0.0977,-0.775551 0.29297,-1.066895 0.19531,-0.291337 0.49642,-0.51676 0.90332,-0.676269 z m 0.89356,-1.40625 c 0,0.247401 0.0773,0.446782 0.23193,0.598144 0.15462,0.151372 0.36051,0.227056 0.61768,0.227051 0.22786,5e-6 0.41503,-0.07486 0.56152,-0.224609 0.14648,-0.149735 0.21972,-0.34342 0.21973,-0.581055 -10e-6,-0.24739 -0.0765,-0.448399 -0.22949,-0.603027 -0.153,-0.154617 -0.34832,-0.231928 -0.58594,-0.231934 -0.24089,6e-6 -0.43702,0.07569 -0.58838,0.227051 -0.15137,0.151373 -0.22705,0.347499 -0.22705,0.588379 z m -0.10742,3.081054 c -1e-5,0.315758 0.096,0.573733 0.28808,0.773926 0.19206,0.200197 0.41178,0.300294 0.65918,0.300293 0.23763,1e-6 0.45084,-0.101724 0.63965,-0.305176 0.1888,-0.203448 0.2832,-0.461423 0.2832,-0.773925 0,-0.315753 -0.0952,-0.574542 -0.28564,-0.776368 -0.19043,-0.201819 -0.41097,-0.302731 -0.66162,-0.302734 -0.2474,3e-6 -0.46306,0.09766 -0.64697,0.292969 -0.18393,0.195315 -0.27589,0.458987 -0.27588,0.791015 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3676" />
|
||||
id="path3676"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 512.5184,45.963036 c 0,-1.360673 0.24496,-2.31282 0.73487,-2.856446 0.4899,-0.543613 1.23616,-0.815422 2.23876,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56152,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.271,0.734864 0.13345,0.533859 0.20019,1.090499 0.20019,1.669922 0,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60221,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.37109,-0.192057 -0.67545,-0.473632 -0.91308,-0.844726 -0.17253,-0.263671 -0.30681,-0.624185 -0.40283,-1.081543 -0.096,-0.457354 -0.14405,-0.962725 -0.14405,-1.516113 z m 1.97266,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70068,0.500488 0.20182,2e-6 0.37679,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16113,-0.327142 -0.40283,-0.490716 -0.72509,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.7129,0.500488 -0.14648,0.333664 -0.21972,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3678" />
|
||||
id="path3678"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -2511,22 +2964,26 @@
|
||||
<path
|
||||
id="path3916"
|
||||
d="m 568.45258,59.285714 0,-8.571429"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text3918">
|
||||
<path
|
||||
d="m 563.15228,42.291161 0,7.280273 -2.01172,0 0,-4.770508 c -0.32552,0.247401 -0.64046,0.447596 -0.94482,0.600586 -0.30436,0.152999 -0.68604,0.299483 -1.14502,0.439453 l 0,-1.630859 c 0.67708,-0.218093 1.2028,-0.480137 1.57715,-0.786133 0.37434,-0.305983 0.66731,-0.683587 0.8789,-1.132812 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3681" />
|
||||
id="path3681"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 565.32513,45.963036 c 0,-1.360673 0.24496,-2.31282 0.73487,-2.856446 0.4899,-0.543613 1.23616,-0.815422 2.23877,-0.815429 0.48176,7e-6 0.87727,0.05941 1.18652,0.178222 0.30924,0.118822 0.56152,0.273445 0.75684,0.463867 0.1953,0.190437 0.34911,0.390632 0.46142,0.600586 0.1123,0.209967 0.20263,0.454921 0.271,0.734864 0.13346,0.533859 0.20019,1.090499 0.20019,1.669922 0,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43945,0.602214 -1.19629,0.90332 -2.2705,0.90332 -0.60222,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.3711,-0.192057 -0.67546,-0.473632 -0.91309,-0.844726 -0.17253,-0.263671 -0.3068,-0.624185 -0.40283,-1.081543 -0.096,-0.457354 -0.14405,-0.962725 -0.14405,-1.516113 z m 1.97266,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70068,0.500488 0.20182,2e-6 0.37679,-0.0708 0.52491,-0.212402 0.1481,-0.1416 0.25715,-0.365395 0.32714,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.24169,-1.916504 -0.16114,-0.327142 -0.40284,-0.490716 -0.7251,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.71289,0.500488 -0.14649,0.333664 -0.21973,0.951339 -0.21973,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3683" />
|
||||
id="path3683"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 572.00482,45.963036 c 0,-1.360673 0.24496,-2.31282 0.73487,-2.856446 0.4899,-0.543613 1.23616,-0.815422 2.23876,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56152,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.271,0.734864 0.13345,0.533859 0.20018,1.090499 0.20019,1.669922 -10e-6,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60221,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.37109,-0.192057 -0.67545,-0.473632 -0.91308,-0.844726 -0.17253,-0.263671 -0.30681,-0.624185 -0.40284,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97266,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70068,0.500488 0.20182,2e-6 0.37679,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16113,-0.327142 -0.40283,-0.490716 -0.72509,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.7129,0.500488 -0.14648,0.333664 -0.21972,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3685" />
|
||||
id="path3685"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -2536,22 +2993,26 @@
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 600.45258,59.285714 0,-8.571429"
|
||||
id="path3924" />
|
||||
id="path3924"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text3926">
|
||||
<path
|
||||
d="m 595.15228,42.291161 0,7.280273 -2.01172,0 0,-4.770508 c -0.32552,0.247401 -0.64046,0.447596 -0.94482,0.600586 -0.30436,0.152999 -0.68604,0.299483 -1.14502,0.439453 l 0,-1.630859 c 0.67708,-0.218093 1.2028,-0.480137 1.57715,-0.786133 0.37434,-0.305983 0.66731,-0.683587 0.8789,-1.132812 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3688" />
|
||||
id="path3688"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 601.83197,42.291161 0,7.280273 -2.01172,0 0,-4.770508 c -0.32552,0.247401 -0.64046,0.447596 -0.94482,0.600586 -0.30437,0.152999 -0.68604,0.299483 -1.14502,0.439453 l 0,-1.630859 c 0.67708,-0.218093 1.2028,-0.480137 1.57715,-0.786133 0.37434,-0.305983 0.66731,-0.683587 0.8789,-1.132812 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3690" />
|
||||
id="path3690"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 604.00482,45.963036 c 0,-1.360673 0.24496,-2.31282 0.73487,-2.856446 0.4899,-0.543613 1.23616,-0.815422 2.23876,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56152,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.271,0.734864 0.13345,0.533859 0.20018,1.090499 0.20019,1.669922 -10e-6,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60221,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.37109,-0.192057 -0.67545,-0.473632 -0.91308,-0.844726 -0.17253,-0.263671 -0.30681,-0.624185 -0.40284,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97266,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70068,0.500488 0.20182,2e-6 0.37679,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16113,-0.327142 -0.40283,-0.490716 -0.72509,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.7129,0.500488 -0.14648,0.333664 -0.21972,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3692" />
|
||||
id="path3692"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -2561,22 +3022,26 @@
|
||||
<path
|
||||
id="path3932"
|
||||
d="m 632.45258,59.285714 0,-8.571429"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text3934">
|
||||
<path
|
||||
d="m 627.15228,42.291161 0,7.280273 -2.01172,0 0,-4.770508 c -0.32552,0.247401 -0.64046,0.447596 -0.94482,0.600586 -0.30436,0.152999 -0.68604,0.299483 -1.14502,0.439453 l 0,-1.630859 c 0.67708,-0.218093 1.2028,-0.480137 1.57715,-0.786133 0.37434,-0.305983 0.66731,-0.683587 0.8789,-1.132812 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3695" />
|
||||
id="path3695"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 635.14545,49.571434 -5.9668,0 c 0.0684,-0.589192 0.27588,-1.143391 0.62256,-1.662598 0.34668,-0.519203 0.9969,-1.131996 1.95068,-1.838379 0.58268,-0.432938 0.9554,-0.761714 1.11817,-0.986328 0.16275,-0.224604 0.24413,-0.43782 0.24414,-0.639648 -10e-6,-0.218094 -0.0806,-0.404454 -0.2417,-0.559082 -0.16114,-0.154617 -0.36378,-0.231928 -0.60791,-0.231934 -0.25391,6e-6 -0.46143,0.07976 -0.62256,0.239258 -0.16114,0.159511 -0.26937,0.441086 -0.32471,0.844727 l -1.99219,-0.161133 c 0.0781,-0.55989 0.22136,-0.996902 0.42969,-1.311035 0.20833,-0.314121 0.50212,-0.555006 0.88135,-0.722657 0.37923,-0.167636 0.90413,-0.251457 1.57471,-0.251464 0.69986,7e-6 1.2443,0.07976 1.6333,0.239257 0.38899,0.159512 0.69498,0.404467 0.91797,0.734864 0.22297,0.330409 0.33446,0.700689 0.33447,1.11084 -10e-6,0.436202 -0.12777,0.852868 -0.3833,1.25 -0.25554,0.397138 -0.72022,0.833336 -1.39405,1.308593 -0.40039,0.276695 -0.66813,0.47038 -0.80322,0.581055 -0.13509,0.110679 -0.29378,0.255536 -0.47607,0.43457 l 3.10547,0 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3697" />
|
||||
id="path3697"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 636.00482,45.963036 c 0,-1.360673 0.24496,-2.31282 0.73487,-2.856446 0.4899,-0.543613 1.23616,-0.815422 2.23876,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56152,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.271,0.734864 0.13345,0.533859 0.20018,1.090499 0.20019,1.669922 -10e-6,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60221,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.37109,-0.192057 -0.67545,-0.473632 -0.91308,-0.844726 -0.17253,-0.263671 -0.30681,-0.624185 -0.40284,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97266,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70068,0.500488 0.20182,2e-6 0.37679,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16113,-0.327142 -0.40283,-0.490716 -0.72509,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.7129,0.500488 -0.14648,0.333664 -0.21972,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3699" />
|
||||
id="path3699"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -2586,22 +3051,26 @@
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 664.45258,59.285714 0,-8.571429"
|
||||
id="path3940" />
|
||||
id="path3940"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text3942">
|
||||
<path
|
||||
d="m 659.15228,42.291161 0,7.280273 -2.01172,0 0,-4.770508 c -0.32552,0.247401 -0.64046,0.447596 -0.94482,0.600586 -0.30436,0.152999 -0.68604,0.299483 -1.14502,0.439453 l 0,-1.630859 c 0.67708,-0.218093 1.2028,-0.480137 1.57715,-0.786133 0.37434,-0.305983 0.66731,-0.683587 0.8789,-1.132812 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3702" />
|
||||
id="path3702"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 663.25385,44.483543 -1.87989,-0.336914 c 0.15625,-0.598952 0.45654,-1.057936 0.90088,-1.376953 0.44434,-0.319003 1.0734,-0.478508 1.88721,-0.478515 0.93424,7e-6 1.60969,0.17416 2.02637,0.522461 0.41666,0.348313 0.62499,0.786138 0.625,1.313476 -10e-6,0.30925 -0.0846,0.589198 -0.25391,0.839844 -0.16928,0.250655 -0.42481,0.470382 -0.7666,0.65918 0.27669,0.06836 0.48827,0.148115 0.63476,0.239257 0.23763,0.146488 0.42236,0.339359 0.5542,0.578614 0.13183,0.23926 0.19775,0.524905 0.19776,0.856933 -10e-6,0.416669 -0.10906,0.816245 -0.32715,1.198731 -0.21811,0.382487 -0.53223,0.677083 -0.94238,0.883789 -0.41017,0.206705 -0.9489,0.310058 -1.61622,0.310058 -0.65104,0 -1.16455,-0.0765 -1.54052,-0.229492 -0.37598,-0.152994 -0.68523,-0.37679 -0.92774,-0.671387 -0.24251,-0.294595 -0.42887,-0.664874 -0.55908,-1.110839 l 1.98731,-0.263672 c 0.0781,0.400392 0.19937,0.677898 0.36376,0.832519 0.16439,0.154624 0.37354,0.231935 0.62745,0.231934 0.26692,10e-7 0.48909,-0.09766 0.6665,-0.292969 0.1774,-0.195311 0.26611,-0.455727 0.26611,-0.78125 0,-0.332029 -0.0855,-0.58919 -0.25634,-0.771484 -0.17091,-0.182289 -0.40284,-0.273435 -0.69581,-0.273438 -0.15625,3e-6 -0.37109,0.03907 -0.64453,0.117188 l 0.10254,-1.420899 c 0.11068,0.01628 0.19694,0.02442 0.25879,0.02441 0.26042,5e-6 0.4777,-0.083 0.65186,-0.249023 0.17415,-0.166011 0.26122,-0.362951 0.26123,-0.59082 -10e-6,-0.218094 -0.0651,-0.392247 -0.19531,-0.522461 -0.13022,-0.130203 -0.30925,-0.195307 -0.53711,-0.195313 -0.23438,6e-6 -0.42481,0.07081 -0.57129,0.212402 -0.14649,0.141608 -0.24577,0.389817 -0.29785,0.744629 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3704" />
|
||||
id="path3704"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 668.00482,45.963036 c 0,-1.360673 0.24496,-2.31282 0.73487,-2.856446 0.4899,-0.543613 1.23616,-0.815422 2.23876,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56152,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.271,0.734864 0.13345,0.533859 0.20018,1.090499 0.20019,1.669922 -10e-6,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60221,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.37109,-0.192057 -0.67545,-0.473632 -0.91308,-0.844726 -0.17253,-0.263671 -0.30681,-0.624185 -0.40284,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97266,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70068,0.500488 0.20182,2e-6 0.37679,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16113,-0.327142 -0.40283,-0.490716 -0.72509,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.7129,0.500488 -0.14648,0.333664 -0.21972,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3706" />
|
||||
id="path3706"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -2611,22 +3080,26 @@
|
||||
<path
|
||||
id="path3948"
|
||||
d="m 696.45258,59.285714 0,-8.571429"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text3950">
|
||||
<path
|
||||
d="m 691.15228,42.291161 0,7.280273 -2.01172,0 0,-4.770508 c -0.32552,0.247401 -0.64046,0.447596 -0.94482,0.600586 -0.30436,0.152999 -0.68604,0.299483 -1.14502,0.439453 l 0,-1.630859 c 0.67708,-0.218093 1.2028,-0.480137 1.57715,-0.786133 0.37434,-0.305983 0.66731,-0.683587 0.8789,-1.132812 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3709" />
|
||||
id="path3709"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 696.7431,48.233543 -3.62304,0 0,-1.635742 3.62304,-4.30664 1.7334,0 0,4.399414 0.89844,0 0,1.542968 -0.89844,0 0,1.337891 -1.7334,0 z m 0,-1.542968 0,-2.250977 -1.91406,2.250977 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3711" />
|
||||
id="path3711"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 700.00482,45.963036 c 0,-1.360673 0.24496,-2.31282 0.73487,-2.856446 0.4899,-0.543613 1.23616,-0.815422 2.23876,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56152,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.271,0.734864 0.13345,0.533859 0.20018,1.090499 0.20019,1.669922 -10e-6,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60221,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.37109,-0.192057 -0.67545,-0.473632 -0.91308,-0.844726 -0.17253,-0.263671 -0.30681,-0.624185 -0.40284,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97266,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70068,0.500488 0.20182,2e-6 0.37679,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16113,-0.327142 -0.40283,-0.490716 -0.72509,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.7129,0.500488 -0.14648,0.333664 -0.21972,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3713" />
|
||||
id="path3713"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -2636,22 +3109,26 @@
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 722.45258,59.285714 0,-8.571429"
|
||||
id="path3956" />
|
||||
id="path3956"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text3958">
|
||||
<path
|
||||
d="m 717.15228,42.291161 0,7.280273 -2.01172,0 0,-4.770508 c -0.32552,0.247401 -0.64046,0.447596 -0.94482,0.600586 -0.30436,0.152999 -0.68604,0.299483 -1.14502,0.439453 l 0,-1.630859 c 0.67708,-0.218093 1.2028,-0.480137 1.57715,-0.786133 0.37434,-0.305983 0.66731,-0.683587 0.8789,-1.132812 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3716" />
|
||||
id="path3716"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 720.1308,42.413231 4.72168,0 0,1.586914 -3.19824,0 -0.1709,1.074219 c 0.22135,-0.104162 0.44026,-0.182287 0.65674,-0.234375 0.21646,-0.05208 0.43049,-0.07812 0.64209,-0.07813 0.71614,5e-6 1.29719,0.216476 1.74316,0.649414 0.44596,0.432946 0.66894,0.978193 0.66894,1.635742 0,0.462242 -0.11475,0.906577 -0.34423,1.333008 -0.2295,0.426433 -0.55502,0.751953 -0.97657,0.976562 -0.42155,0.22461 -0.9611,0.336914 -1.61865,0.336914 -0.47201,0 -0.87647,-0.04476 -1.21338,-0.134277 -0.33691,-0.08952 -0.62337,-0.222982 -0.85937,-0.400391 -0.23601,-0.177408 -0.42725,-0.378417 -0.57373,-0.603027 -0.14649,-0.224608 -0.26856,-0.504556 -0.36621,-0.839844 l 2.01172,-0.219726 c 0.0488,0.322267 0.16275,0.567221 0.34179,0.734863 0.17904,0.167644 0.39225,0.251466 0.63965,0.251465 0.27669,10e-7 0.50537,-0.104979 0.68604,-0.314942 0.18066,-0.209959 0.27099,-0.523272 0.27099,-0.939941 0,-0.42643 -0.0911,-0.738929 -0.27344,-0.9375 -0.18229,-0.198564 -0.4248,-0.297848 -0.72753,-0.297852 -0.19207,4e-6 -0.37761,0.04721 -0.55665,0.141602 -0.13346,0.06836 -0.27995,0.192061 -0.43945,0.371094 l -1.69433,-0.244141 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3718" />
|
||||
id="path3718"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 726.00482,45.963036 c 0,-1.360673 0.24496,-2.31282 0.73487,-2.856446 0.4899,-0.543613 1.23616,-0.815422 2.23876,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56152,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.271,0.734864 0.13345,0.533859 0.20018,1.090499 0.20019,1.669922 -10e-6,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60221,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.37109,-0.192057 -0.67545,-0.473632 -0.91308,-0.844726 -0.17253,-0.263671 -0.30681,-0.624185 -0.40284,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97266,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70068,0.500488 0.20182,2e-6 0.37679,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16113,-0.327142 -0.40283,-0.490716 -0.72509,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.7129,0.500488 -0.14648,0.333664 -0.21972,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3720" />
|
||||
id="path3720"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -2661,22 +3138,26 @@
|
||||
<path
|
||||
id="path3964"
|
||||
d="m 750.45258,59.285714 0,-8.571429"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text3966">
|
||||
<path
|
||||
d="m 745.15228,42.291161 0,7.280273 -2.01172,0 0,-4.770508 c -0.32552,0.247401 -0.64046,0.447596 -0.94482,0.600586 -0.30436,0.152999 -0.68604,0.299483 -1.14502,0.439453 l 0,-1.630859 c 0.67708,-0.218093 1.2028,-0.480137 1.57715,-0.786133 0.37434,-0.305983 0.66731,-0.683587 0.8789,-1.132812 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3723" />
|
||||
id="path3723"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 753.08197,44.024559 -1.97754,0.244141 c -0.0521,-0.276687 -0.13916,-0.472 -0.26123,-0.585938 -0.12207,-0.113926 -0.27263,-0.170892 -0.45166,-0.170898 -0.32227,6e-6 -0.57292,0.162766 -0.75195,0.488281 -0.13021,0.23438 -0.22624,0.735682 -0.28809,1.503906 0.23763,-0.240881 0.48177,-0.419103 0.73242,-0.534668 0.25065,-0.115555 0.54036,-0.173335 0.86914,-0.17334 0.63802,5e-6 1.17757,0.22787 1.61866,0.683594 0.44107,0.455733 0.66161,1.033532 0.66162,1.733399 -10e-6,0.472007 -0.1115,0.903321 -0.33448,1.293945 -0.22298,0.390626 -0.53223,0.686035 -0.92773,0.88623 -0.39551,0.200196 -0.89112,0.300293 -1.48682,0.300293 -0.71614,0 -1.29069,-0.12207 -1.72363,-0.366211 -0.43294,-0.24414 -0.77881,-0.633951 -1.0376,-1.169433 -0.25879,-0.53548 -0.38818,-1.244301 -0.38818,-2.126465 0,-1.292313 0.27181,-2.238764 0.81543,-2.839356 0.54362,-0.600578 1.2972,-0.900871 2.26074,-0.900878 0.56966,7e-6 1.01969,0.06593 1.3501,0.197753 0.3304,0.131843 0.60465,0.324714 0.82275,0.578614 0.2181,0.253912 0.38411,0.572922 0.49805,0.957031 z m -3.66211,3.188477 c 0,0.387371 0.0977,0.690919 0.29297,0.910644 0.19531,0.219728 0.43457,0.329591 0.71777,0.32959 0.26042,10e-7 0.47851,-0.09928 0.6543,-0.297852 0.17578,-0.198566 0.26367,-0.494789 0.26367,-0.888671 0,-0.403644 -0.0911,-0.71126 -0.27344,-0.922852 -0.18229,-0.211585 -0.40853,-0.317379 -0.67871,-0.317383 -0.27669,4e-6 -0.50863,0.102543 -0.6958,0.307617 -0.18717,0.205081 -0.28076,0.49805 -0.28076,0.878907 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3725" />
|
||||
id="path3725"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 754.00482,45.963036 c 0,-1.360673 0.24496,-2.31282 0.73487,-2.856446 0.4899,-0.543613 1.23616,-0.815422 2.23876,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56152,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.271,0.734864 0.13345,0.533859 0.20018,1.090499 0.20019,1.669922 -10e-6,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60221,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.37109,-0.192057 -0.67545,-0.473632 -0.91308,-0.844726 -0.17253,-0.263671 -0.30681,-0.624185 -0.40284,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97266,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70068,0.500488 0.20182,2e-6 0.37679,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16113,-0.327142 -0.40283,-0.490716 -0.72509,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.7129,0.500488 -0.14648,0.333664 -0.21972,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3727" />
|
||||
id="path3727"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -2686,22 +3167,26 @@
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 774.45258,59.285714 0,-8.571429"
|
||||
id="path3972" />
|
||||
id="path3972"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text3974">
|
||||
<path
|
||||
d="m 769.15228,42.291161 0,7.280273 -2.01172,0 0,-4.770508 c -0.32552,0.247401 -0.64046,0.447596 -0.94482,0.600586 -0.30436,0.152999 -0.68604,0.299483 -1.14502,0.439453 l 0,-1.630859 c 0.67708,-0.218093 1.2028,-0.480137 1.57715,-0.786133 0.37434,-0.305983 0.66731,-0.683587 0.8789,-1.132812 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3730" />
|
||||
id="path3730"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 771.35931,42.413231 5.80567,0 0,1.342773 c -0.50457,0.455735 -0.92611,0.948898 -1.26465,1.479493 -0.41016,0.644534 -0.73405,1.362307 -0.97168,2.15332 -0.18881,0.615236 -0.31576,1.342774 -0.38086,2.182617 l -1.98242,0 c 0.15625,-1.168619 0.40201,-2.148435 0.7373,-2.939453 0.33529,-0.791012 0.86589,-1.637365 1.5918,-2.539063 l -3.53516,0 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3732" />
|
||||
id="path3732"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 778.00482,45.963036 c 0,-1.360673 0.24496,-2.31282 0.73487,-2.856446 0.4899,-0.543613 1.23616,-0.815422 2.23876,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56152,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.271,0.734864 0.13345,0.533859 0.20018,1.090499 0.20019,1.669922 -10e-6,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60221,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.37109,-0.192057 -0.67545,-0.473632 -0.91308,-0.844726 -0.17253,-0.263671 -0.30681,-0.624185 -0.40284,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97266,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70068,0.500488 0.20182,2e-6 0.37679,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16113,-0.327142 -0.40283,-0.490716 -0.72509,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.7129,0.500488 -0.14648,0.333664 -0.21972,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3734" />
|
||||
id="path3734"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -2711,22 +3196,26 @@
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 72.562294,59.285714 0,-8.571429"
|
||||
id="path4052" />
|
||||
id="path4052"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text4054">
|
||||
<path
|
||||
d="m 68.851357,49.571434 -5.966797,0 c 0.06836,-0.589192 0.275878,-1.143391 0.622558,-1.662598 0.346679,-0.519203 0.996906,-1.131996 1.950684,-1.838379 0.582679,-0.432938 0.9554,-0.761714 1.118164,-0.986328 0.162756,-0.224604 0.244136,-0.43782 0.244141,-0.639648 -5e-6,-0.218094 -0.08057,-0.404454 -0.2417,-0.559082 -0.161136,-0.154617 -0.363773,-0.231928 -0.60791,-0.231934 -0.253909,6e-6 -0.461429,0.07976 -0.622558,0.239258 -0.161136,0.159511 -0.269371,0.441086 -0.324707,0.844727 l -1.992188,-0.161133 c 0.07813,-0.55989 0.221354,-0.996902 0.429688,-1.311035 0.208332,-0.314121 0.502114,-0.555006 0.881347,-0.722657 0.37923,-0.167636 0.904132,-0.251457 1.574707,-0.251464 0.699866,7e-6 1.244299,0.07976 1.633301,0.239257 0.388992,0.159512 0.694981,0.404467 0.917969,0.734864 0.222975,0.330409 0.334466,0.700689 0.334472,1.11084 -6e-6,0.436202 -0.127773,0.852868 -0.3833,1.25 -0.25554,0.397138 -0.72022,0.833336 -1.394043,1.308593 -0.400395,0.276695 -0.668136,0.47038 -0.803223,0.581055 -0.135095,0.110679 -0.293786,0.255536 -0.476074,0.43457 l 3.105469,0 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3737" />
|
||||
id="path3737"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 70.907021,45.723778 c -0.312502,-0.166012 -0.540366,-0.351559 -0.683594,-0.556641 -0.195313,-0.279943 -0.29297,-0.602208 -0.292969,-0.966797 -10e-7,-0.598952 0.281575,-1.08886 0.844727,-1.469726 0.439451,-0.292962 1.020505,-0.439446 1.743164,-0.439453 0.957027,7e-6 1.66422,0.182298 2.121582,0.546875 0.457351,0.364589 0.686029,0.823573 0.686035,1.376953 -6e-6,0.32227 -0.09115,0.623377 -0.273438,0.90332 -0.136724,0.208338 -0.351568,0.41016 -0.644531,0.605469 0.387364,0.18555 0.676264,0.431318 0.866699,0.737304 0.190424,0.305993 0.285639,0.644534 0.285645,1.015625 -6e-6,0.358075 -0.0822,0.692547 -0.246582,1.003418 -0.164394,0.310874 -0.366217,0.550945 -0.605469,0.720215 -0.239263,0.169271 -0.537114,0.293783 -0.893555,0.373535 -0.356449,0.07975 -0.736494,0.119629 -1.140136,0.119629 -0.758466,0 -1.337893,-0.08952 -1.738282,-0.268554 -0.400391,-0.179036 -0.704753,-0.442708 -0.913085,-0.791016 -0.208334,-0.348306 -0.312501,-0.737303 -0.3125,-1.166992 -10e-7,-0.41992 0.09766,-0.775551 0.292968,-1.066895 0.195312,-0.291337 0.496418,-0.51676 0.903321,-0.676269 z m 0.893554,-1.40625 c -2e-6,0.247401 0.07731,0.446782 0.231934,0.598144 0.154619,0.151372 0.360511,0.227056 0.617676,0.227051 0.227861,5e-6 0.415035,-0.07486 0.561523,-0.224609 0.14648,-0.149735 0.219723,-0.34342 0.219727,-0.581055 -4e-6,-0.24739 -0.0765,-0.448399 -0.229493,-0.603027 -0.152998,-0.154617 -0.34831,-0.231928 -0.585937,-0.231934 -0.240889,6e-6 -0.437015,0.07569 -0.588379,0.227051 -0.15137,0.151373 -0.227053,0.347499 -0.227051,0.588379 z m -0.107422,3.081054 c -2e-6,0.315758 0.09603,0.573733 0.288086,0.773926 0.192055,0.200197 0.411781,0.300294 0.65918,0.300293 0.237627,1e-6 0.450843,-0.101724 0.639648,-0.305176 0.188798,-0.203448 0.283199,-0.461423 0.283204,-0.773925 -5e-6,-0.315753 -0.09522,-0.574542 -0.285645,-0.776368 -0.190433,-0.201819 -0.410974,-0.302731 -0.661621,-0.302734 -0.247399,3e-6 -0.463056,0.09766 -0.646973,0.292969 -0.183921,0.195315 -0.275881,0.458987 -0.275879,0.791015 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3739" />
|
||||
id="path3739"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 76.390419,45.963036 c 0,-1.360673 0.244954,-2.31282 0.734863,-2.856446 0.489908,-0.543613 1.236163,-0.815422 2.23877,-0.815429 0.481767,7e-6 0.877274,0.05941 1.186523,0.178222 0.30924,0.118822 0.561519,0.273445 0.756836,0.463867 0.195307,0.190437 0.349116,0.390632 0.461426,0.600586 0.112299,0.209967 0.202631,0.454921 0.270996,0.734864 0.133457,0.533859 0.200189,1.090499 0.200195,1.669922 -6e-6,1.29883 -0.219732,2.24935 -0.659179,2.851562 -0.439459,0.602214 -1.196294,0.90332 -2.270508,0.90332 -0.602216,0 -1.08887,-0.09603 -1.459961,-0.288086 -0.371095,-0.192057 -0.675457,-0.473632 -0.913086,-0.844726 -0.172527,-0.263671 -0.306804,-0.624185 -0.402832,-1.081543 -0.09603,-0.457354 -0.144043,-0.962725 -0.144043,-1.516113 z m 1.972656,0.0049 c -2e-6,0.911461 0.08056,1.534019 0.241699,1.867676 0.161131,0.33366 0.394691,0.50049 0.700684,0.500488 0.201819,2e-6 0.376787,-0.0708 0.524902,-0.212402 0.148108,-0.1416 0.257158,-0.365395 0.327149,-0.671387 0.06998,-0.305987 0.104976,-0.782874 0.10498,-1.430664 -4e-6,-0.950516 -0.08057,-1.58935 -0.241699,-1.916504 -0.161137,-0.327142 -0.402836,-0.490716 -0.725098,-0.490722 -0.328779,6e-6 -0.566409,0.166835 -0.71289,0.500488 -0.146487,0.333664 -0.219729,0.951339 -0.219727,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3741" />
|
||||
id="path3741"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -2736,22 +3225,26 @@
|
||||
<path
|
||||
id="path4060"
|
||||
d="m 96.562294,59.285714 0,-8.571429"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text4062">
|
||||
<path
|
||||
d="m 92.851357,49.571434 -5.966797,0 c 0.06836,-0.589192 0.275878,-1.143391 0.622558,-1.662598 0.346679,-0.519203 0.996906,-1.131996 1.950684,-1.838379 0.582679,-0.432938 0.9554,-0.761714 1.118164,-0.986328 0.162756,-0.224604 0.244136,-0.43782 0.244141,-0.639648 -5e-6,-0.218094 -0.08057,-0.404454 -0.2417,-0.559082 -0.161136,-0.154617 -0.363773,-0.231928 -0.60791,-0.231934 -0.253909,6e-6 -0.461429,0.07976 -0.622558,0.239258 -0.161136,0.159511 -0.269371,0.441086 -0.324707,0.844727 l -1.992188,-0.161133 c 0.07813,-0.55989 0.221354,-0.996902 0.429688,-1.311035 0.208332,-0.314121 0.502114,-0.555006 0.881347,-0.722657 0.37923,-0.167636 0.904132,-0.251457 1.574707,-0.251464 0.699866,7e-6 1.244299,0.07976 1.633301,0.239257 0.388992,0.159512 0.694981,0.404467 0.917969,0.734864 0.222975,0.330409 0.334466,0.700689 0.334472,1.11084 -6e-6,0.436202 -0.127773,0.852868 -0.3833,1.25 -0.25554,0.397138 -0.72022,0.833336 -1.394043,1.308593 -0.400395,0.276695 -0.668136,0.47038 -0.803223,0.581055 -0.135095,0.110679 -0.293786,0.255536 -0.476074,0.43457 l 3.105469,0 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3744" />
|
||||
id="path3744"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 93.798622,47.964989 1.977539,-0.249024 c 0.05208,0.276695 0.139972,0.472007 0.263672,0.585938 0.123695,0.113933 0.275062,0.170899 0.454102,0.170898 0.319007,1e-6 0.56803,-0.161131 0.74707,-0.483398 0.130204,-0.237629 0.22786,-0.740558 0.292969,-1.508789 -0.237635,0.244143 -0.481775,0.423179 -0.732422,0.537109 -0.250654,0.113935 -0.540368,0.170901 -0.869141,0.170899 -0.641278,2e-6 -1.182456,-0.227862 -1.623535,-0.683594 -0.441081,-0.455726 -0.661621,-1.031897 -0.661621,-1.728516 0,-0.475255 0.112304,-0.908197 0.336914,-1.298828 0.224608,-0.390618 0.533853,-0.686028 0.927734,-0.88623 0.393879,-0.200189 0.88867,-0.300286 1.484375,-0.300293 0.716142,7e-6 1.290686,0.122891 1.723633,0.368652 0.432938,0.245775 0.778803,0.636399 1.037598,1.171875 0.258783,0.535487 0.388177,1.24268 0.388183,2.121582 -6e-6,1.29232 -0.271815,2.238771 -0.815429,2.839355 -0.543625,0.600587 -1.297205,0.900879 -2.260742,0.900879 -0.569664,0 -1.018883,-0.06592 -1.347657,-0.197754 -0.328777,-0.131835 -0.602214,-0.324706 -0.820312,-0.578613 -0.2181,-0.253905 -0.385743,-0.571288 -0.50293,-0.952148 z m 3.66211,-3.19336 c -5e-6,-0.387364 -0.09766,-0.690912 -0.292969,-0.910644 -0.195316,-0.219721 -0.432946,-0.329584 -0.712891,-0.32959 -0.263675,6e-6 -0.482587,0.09929 -0.656738,0.297852 -0.174156,0.198573 -0.261233,0.496424 -0.261231,0.893554 -2e-6,0.400395 0.09033,0.706385 0.270996,0.917969 0.180662,0.211592 0.406085,0.317386 0.67627,0.317383 0.279944,3e-6 0.512692,-0.102536 0.698242,-0.307617 0.185543,-0.205074 0.278316,-0.498043 0.278321,-0.878907 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3746" />
|
||||
id="path3746"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 100.39042,45.963036 c 0,-1.360673 0.24495,-2.31282 0.73486,-2.856446 0.48991,-0.543613 1.23617,-0.815422 2.23877,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56151,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.27099,0.734864 0.13346,0.533859 0.20019,1.090499 0.2002,1.669922 -1e-5,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60222,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.3711,-0.192057 -0.67546,-0.473632 -0.91309,-0.844726 -0.17252,-0.263671 -0.3068,-0.624185 -0.40283,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97266,0.0049 c -1e-5,0.911461 0.0806,1.534019 0.24169,1.867676 0.16113,0.33366 0.3947,0.50049 0.70069,0.500488 0.20182,2e-6 0.37678,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16114,-0.327142 -0.40284,-0.490716 -0.7251,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.71289,0.500488 -0.14649,0.333664 -0.21973,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3748" />
|
||||
id="path3748"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -2761,22 +3254,26 @@
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 122.60624,59.285714 0,-8.571429"
|
||||
id="path4068" />
|
||||
id="path4068"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text4070">
|
||||
<path
|
||||
d="m 114.95975,44.483543 -1.87988,-0.336914 c 0.15625,-0.598952 0.45654,-1.057936 0.90088,-1.376953 0.44434,-0.319003 1.0734,-0.478508 1.88721,-0.478515 0.93424,7e-6 1.60969,0.17416 2.02637,0.522461 0.41666,0.348313 0.62499,0.786138 0.625,1.313476 -1e-5,0.30925 -0.0846,0.589198 -0.25391,0.839844 -0.16928,0.250655 -0.42481,0.470382 -0.7666,0.65918 0.27668,0.06836 0.48827,0.148115 0.63476,0.239257 0.23763,0.146488 0.42236,0.339359 0.5542,0.578614 0.13183,0.23926 0.19775,0.524905 0.19776,0.856933 -1e-5,0.416669 -0.10906,0.816245 -0.32715,1.198731 -0.21811,0.382487 -0.53223,0.677083 -0.94239,0.883789 -0.41016,0.206705 -0.94889,0.310058 -1.61621,0.310058 -0.65104,0 -1.16455,-0.0765 -1.54052,-0.229492 -0.37598,-0.152994 -0.68523,-0.37679 -0.92774,-0.671387 -0.24251,-0.294595 -0.42887,-0.664874 -0.55908,-1.110839 l 1.9873,-0.263672 c 0.0781,0.400392 0.19938,0.677898 0.36377,0.832519 0.16439,0.154624 0.37354,0.231935 0.62745,0.231934 0.26692,10e-7 0.48909,-0.09766 0.6665,-0.292969 0.1774,-0.195311 0.26611,-0.455727 0.26611,-0.78125 0,-0.332029 -0.0854,-0.58919 -0.25634,-0.771484 -0.17091,-0.182289 -0.40284,-0.273435 -0.69581,-0.273438 -0.15625,3e-6 -0.37109,0.03907 -0.64453,0.117188 l 0.10254,-1.420899 c 0.11068,0.01628 0.19694,0.02442 0.25879,0.02441 0.26041,5e-6 0.4777,-0.083 0.65186,-0.249023 0.17415,-0.166011 0.26122,-0.362951 0.26123,-0.59082 -10e-6,-0.218094 -0.0651,-0.392247 -0.19532,-0.522461 -0.13021,-0.130203 -0.30924,-0.195307 -0.5371,-0.195313 -0.23438,6e-6 -0.42481,0.07081 -0.57129,0.212402 -0.14649,0.141608 -0.24577,0.389817 -0.29786,0.744629 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3751" />
|
||||
id="path3751"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 119.71073,45.963036 c 0,-1.360673 0.24496,-2.31282 0.73486,-2.856446 0.48991,-0.543613 1.23617,-0.815422 2.23877,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56152,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.271,0.734864 0.13345,0.533859 0.20018,1.090499 0.20019,1.669922 -1e-5,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60221,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.37109,-0.192057 -0.67545,-0.473632 -0.91308,-0.844726 -0.17253,-0.263671 -0.30681,-0.624185 -0.40284,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97266,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70068,0.500488 0.20182,2e-6 0.37679,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16113,-0.327142 -0.40283,-0.490716 -0.7251,-0.490722 -0.32877,6e-6 -0.5664,0.166835 -0.71289,0.500488 -0.14648,0.333664 -0.21972,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3753" />
|
||||
id="path3753"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 126.39042,45.963036 c 0,-1.360673 0.24495,-2.31282 0.73486,-2.856446 0.48991,-0.543613 1.23617,-0.815422 2.23877,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56151,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.27099,0.734864 0.13346,0.533859 0.20019,1.090499 0.2002,1.669922 -1e-5,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60222,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.3711,-0.192057 -0.67546,-0.473632 -0.91309,-0.844726 -0.17252,-0.263671 -0.3068,-0.624185 -0.40283,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97266,0.0049 c -1e-5,0.911461 0.0806,1.534019 0.24169,1.867676 0.16113,0.33366 0.3947,0.50049 0.70069,0.500488 0.20182,2e-6 0.37678,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16114,-0.327142 -0.40284,-0.490716 -0.7251,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.71289,0.500488 -0.14649,0.333664 -0.21973,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3755" />
|
||||
id="path3755"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -2786,22 +3283,26 @@
|
||||
<path
|
||||
id="path4076"
|
||||
d="m 146.60625,59.285714 0,-8.571429"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text4078">
|
||||
<path
|
||||
d="m 138.95976,44.483543 -1.87988,-0.336914 c 0.15625,-0.598952 0.45654,-1.057936 0.90088,-1.376953 0.44433,-0.319003 1.0734,-0.478508 1.88721,-0.478515 0.93424,7e-6 1.60969,0.17416 2.02636,0.522461 0.41666,0.348313 0.625,0.786138 0.625,1.313476 0,0.30925 -0.0846,0.589198 -0.2539,0.839844 -0.16928,0.250655 -0.42481,0.470382 -0.7666,0.65918 0.27668,0.06836 0.48827,0.148115 0.63476,0.239257 0.23763,0.146488 0.42236,0.339359 0.5542,0.578614 0.13183,0.23926 0.19775,0.524905 0.19775,0.856933 0,0.416669 -0.10905,0.816245 -0.32714,1.198731 -0.21811,0.382487 -0.53224,0.677083 -0.94239,0.883789 -0.41016,0.206705 -0.94889,0.310058 -1.61621,0.310058 -0.65104,0 -1.16455,-0.0765 -1.54053,-0.229492 -0.37597,-0.152994 -0.68522,-0.37679 -0.92773,-0.671387 -0.24251,-0.294595 -0.42887,-0.664874 -0.55908,-1.110839 l 1.9873,-0.263672 c 0.0781,0.400392 0.19938,0.677898 0.36377,0.832519 0.16439,0.154624 0.37353,0.231935 0.62744,0.231934 0.26693,10e-7 0.48909,-0.09766 0.66651,-0.292969 0.1774,-0.195311 0.26611,-0.455727 0.26611,-0.78125 0,-0.332029 -0.0855,-0.58919 -0.25635,-0.771484 -0.1709,-0.182289 -0.40283,-0.273435 -0.6958,-0.273438 -0.15625,3e-6 -0.37109,0.03907 -0.64453,0.117188 l 0.10254,-1.420899 c 0.11067,0.01628 0.19694,0.02442 0.25879,0.02441 0.26041,5e-6 0.4777,-0.083 0.65185,-0.249023 0.17415,-0.166011 0.26123,-0.362951 0.26124,-0.59082 -1e-5,-0.218094 -0.0651,-0.392247 -0.19532,-0.522461 -0.13021,-0.130203 -0.30925,-0.195307 -0.53711,-0.195313 -0.23437,6e-6 -0.4248,0.07081 -0.57129,0.212402 -0.14648,0.141608 -0.24577,0.389817 -0.29785,0.744629 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3758" />
|
||||
id="path3758"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 148.21758,42.291161 0,7.280273 -2.01172,0 0,-4.770508 c -0.32553,0.247401 -0.64047,0.447596 -0.94483,0.600586 -0.30436,0.152999 -0.68603,0.299483 -1.14502,0.439453 l 0,-1.630859 c 0.67708,-0.218093 1.2028,-0.480137 1.57715,-0.786133 0.37435,-0.305983 0.66732,-0.683587 0.87891,-1.132812 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3760" />
|
||||
id="path3760"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 150.39043,45.963036 c 0,-1.360673 0.24495,-2.31282 0.73486,-2.856446 0.48991,-0.543613 1.23616,-0.815422 2.23877,-0.815429 0.48177,7e-6 0.87727,0.05941 1.18652,0.178222 0.30924,0.118822 0.56152,0.273445 0.75684,0.463867 0.19531,0.190437 0.34911,0.390632 0.46142,0.600586 0.1123,0.209967 0.20264,0.454921 0.271,0.734864 0.13346,0.533859 0.20019,1.090499 0.2002,1.669922 -1e-5,1.29883 -0.21974,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.1963,0.90332 -2.27051,0.90332 -0.60222,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.3711,-0.192057 -0.67546,-0.473632 -0.91309,-0.844726 -0.17253,-0.263671 -0.3068,-0.624185 -0.40283,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97265,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70069,0.500488 0.20182,2e-6 0.37678,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10497,-0.782874 0.10498,-1.430664 -10e-6,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16114,-0.327142 -0.40284,-0.490716 -0.7251,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.71289,0.500488 -0.14649,0.333664 -0.21973,0.951339 -0.21973,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3762" />
|
||||
id="path3762"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -2811,22 +3312,26 @@
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 174.60625,59.285714 0,-8.571429"
|
||||
id="path4084" />
|
||||
id="path4084"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text4086">
|
||||
<path
|
||||
d="m 166.95976,44.483543 -1.87988,-0.336914 c 0.15625,-0.598952 0.45654,-1.057936 0.90088,-1.376953 0.44433,-0.319003 1.0734,-0.478508 1.88721,-0.478515 0.93424,7e-6 1.60969,0.17416 2.02636,0.522461 0.41666,0.348313 0.625,0.786138 0.625,1.313476 0,0.30925 -0.0846,0.589198 -0.2539,0.839844 -0.16928,0.250655 -0.42481,0.470382 -0.7666,0.65918 0.27668,0.06836 0.48827,0.148115 0.63476,0.239257 0.23763,0.146488 0.42236,0.339359 0.5542,0.578614 0.13183,0.23926 0.19775,0.524905 0.19775,0.856933 0,0.416669 -0.10905,0.816245 -0.32714,1.198731 -0.21811,0.382487 -0.53224,0.677083 -0.94239,0.883789 -0.41016,0.206705 -0.94889,0.310058 -1.61621,0.310058 -0.65104,0 -1.16455,-0.0765 -1.54053,-0.229492 -0.37597,-0.152994 -0.68522,-0.37679 -0.92773,-0.671387 -0.24251,-0.294595 -0.42887,-0.664874 -0.55908,-1.110839 l 1.9873,-0.263672 c 0.0781,0.400392 0.19938,0.677898 0.36377,0.832519 0.16439,0.154624 0.37353,0.231935 0.62744,0.231934 0.26693,10e-7 0.48909,-0.09766 0.66651,-0.292969 0.1774,-0.195311 0.26611,-0.455727 0.26611,-0.78125 0,-0.332029 -0.0855,-0.58919 -0.25635,-0.771484 -0.1709,-0.182289 -0.40283,-0.273435 -0.6958,-0.273438 -0.15625,3e-6 -0.37109,0.03907 -0.64453,0.117188 l 0.10254,-1.420899 c 0.11067,0.01628 0.19694,0.02442 0.25879,0.02441 0.26041,5e-6 0.4777,-0.083 0.65185,-0.249023 0.17415,-0.166011 0.26123,-0.362951 0.26124,-0.59082 -1e-5,-0.218094 -0.0651,-0.392247 -0.19532,-0.522461 -0.13021,-0.130203 -0.30925,-0.195307 -0.53711,-0.195313 -0.23437,6e-6 -0.4248,0.07081 -0.57129,0.212402 -0.14648,0.141608 -0.24577,0.389817 -0.29785,0.744629 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3765" />
|
||||
id="path3765"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 177.53105,49.571434 -5.9668,0 c 0.0684,-0.589192 0.27588,-1.143391 0.62256,-1.662598 0.34668,-0.519203 0.99691,-1.131996 1.95069,-1.838379 0.58268,-0.432938 0.9554,-0.761714 1.11816,-0.986328 0.16276,-0.224604 0.24414,-0.43782 0.24414,-0.639648 0,-0.218094 -0.0806,-0.404454 -0.2417,-0.559082 -0.16113,-0.154617 -0.36377,-0.231928 -0.60791,-0.231934 -0.25391,6e-6 -0.46143,0.07976 -0.62256,0.239258 -0.16113,0.159511 -0.26937,0.441086 -0.3247,0.844727 l -1.99219,-0.161133 c 0.0781,-0.55989 0.22135,-0.996902 0.42969,-1.311035 0.20833,-0.314121 0.50211,-0.555006 0.88134,-0.722657 0.37923,-0.167636 0.90414,-0.251457 1.57471,-0.251464 0.69987,7e-6 1.2443,0.07976 1.6333,0.239257 0.38899,0.159512 0.69498,0.404467 0.91797,0.734864 0.22298,0.330409 0.33447,0.700689 0.33447,1.11084 0,0.436202 -0.12777,0.852868 -0.3833,1.25 -0.25554,0.397138 -0.72022,0.833336 -1.39404,1.308593 -0.40039,0.276695 -0.66814,0.47038 -0.80322,0.581055 -0.1351,0.110679 -0.29379,0.255536 -0.47608,0.43457 l 3.10547,0 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3767" />
|
||||
id="path3767"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 178.39043,45.963036 c 0,-1.360673 0.24495,-2.31282 0.73486,-2.856446 0.48991,-0.543613 1.23616,-0.815422 2.23877,-0.815429 0.48177,7e-6 0.87727,0.05941 1.18652,0.178222 0.30924,0.118822 0.56152,0.273445 0.75684,0.463867 0.19531,0.190437 0.34911,0.390632 0.46142,0.600586 0.1123,0.209967 0.20264,0.454921 0.271,0.734864 0.13346,0.533859 0.20019,1.090499 0.2002,1.669922 -1e-5,1.29883 -0.21974,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.1963,0.90332 -2.27051,0.90332 -0.60222,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.3711,-0.192057 -0.67546,-0.473632 -0.91309,-0.844726 -0.17253,-0.263671 -0.3068,-0.624185 -0.40283,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97265,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70069,0.500488 0.20182,2e-6 0.37678,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10497,-0.782874 0.10498,-1.430664 -10e-6,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16114,-0.327142 -0.40284,-0.490716 -0.7251,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.71289,0.500488 -0.14649,0.333664 -0.21973,0.951339 -0.21973,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3769" />
|
||||
id="path3769"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -2836,22 +3341,26 @@
|
||||
<path
|
||||
id="path4092"
|
||||
d="m 200.60625,59.285714 0,-8.571429"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text4094">
|
||||
<path
|
||||
d="m 192.95976,44.483543 -1.87988,-0.336914 c 0.15625,-0.598952 0.45654,-1.057936 0.90088,-1.376953 0.44433,-0.319003 1.0734,-0.478508 1.88721,-0.478515 0.93424,7e-6 1.60969,0.17416 2.02636,0.522461 0.41666,0.348313 0.625,0.786138 0.625,1.313476 0,0.30925 -0.0846,0.589198 -0.2539,0.839844 -0.16928,0.250655 -0.42481,0.470382 -0.7666,0.65918 0.27668,0.06836 0.48827,0.148115 0.63476,0.239257 0.23763,0.146488 0.42236,0.339359 0.5542,0.578614 0.13183,0.23926 0.19775,0.524905 0.19775,0.856933 0,0.416669 -0.10905,0.816245 -0.32714,1.198731 -0.21811,0.382487 -0.53224,0.677083 -0.94239,0.883789 -0.41016,0.206705 -0.94889,0.310058 -1.61621,0.310058 -0.65104,0 -1.16455,-0.0765 -1.54053,-0.229492 -0.37597,-0.152994 -0.68522,-0.37679 -0.92773,-0.671387 -0.24251,-0.294595 -0.42887,-0.664874 -0.55908,-1.110839 l 1.9873,-0.263672 c 0.0781,0.400392 0.19938,0.677898 0.36377,0.832519 0.16439,0.154624 0.37353,0.231935 0.62744,0.231934 0.26693,10e-7 0.48909,-0.09766 0.66651,-0.292969 0.1774,-0.195311 0.26611,-0.455727 0.26611,-0.78125 0,-0.332029 -0.0855,-0.58919 -0.25635,-0.771484 -0.1709,-0.182289 -0.40283,-0.273435 -0.6958,-0.273438 -0.15625,3e-6 -0.37109,0.03907 -0.64453,0.117188 l 0.10254,-1.420899 c 0.11067,0.01628 0.19694,0.02442 0.25879,0.02441 0.26041,5e-6 0.4777,-0.083 0.65185,-0.249023 0.17415,-0.166011 0.26123,-0.362951 0.26124,-0.59082 -1e-5,-0.218094 -0.0651,-0.392247 -0.19532,-0.522461 -0.13021,-0.130203 -0.30925,-0.195307 -0.53711,-0.195313 -0.23437,6e-6 -0.4248,0.07081 -0.57129,0.212402 -0.14648,0.141608 -0.24577,0.389817 -0.29785,0.744629 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3772" />
|
||||
id="path3772"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 199.63945,44.483543 -1.87988,-0.336914 c 0.15625,-0.598952 0.45654,-1.057936 0.90088,-1.376953 0.44433,-0.319003 1.0734,-0.478508 1.8872,-0.478515 0.93424,7e-6 1.6097,0.17416 2.02637,0.522461 0.41666,0.348313 0.62499,0.786138 0.625,1.313476 -1e-5,0.30925 -0.0846,0.589198 -0.25391,0.839844 -0.16927,0.250655 -0.42481,0.470382 -0.7666,0.65918 0.27669,0.06836 0.48828,0.148115 0.63477,0.239257 0.23762,0.146488 0.42236,0.339359 0.5542,0.578614 0.13183,0.23926 0.19775,0.524905 0.19775,0.856933 0,0.416669 -0.10905,0.816245 -0.32715,1.198731 -0.2181,0.382487 -0.53223,0.677083 -0.94238,0.883789 -0.41016,0.206705 -0.9489,0.310058 -1.61621,0.310058 -0.65105,0 -1.16455,-0.0765 -1.54053,-0.229492 -0.37598,-0.152994 -0.68522,-0.37679 -0.92773,-0.671387 -0.24252,-0.294595 -0.42888,-0.664874 -0.55908,-1.110839 l 1.9873,-0.263672 c 0.0781,0.400392 0.19938,0.677898 0.36377,0.832519 0.16438,0.154624 0.37353,0.231935 0.62744,0.231934 0.26692,10e-7 0.48909,-0.09766 0.6665,-0.292969 0.17741,-0.195311 0.26611,-0.455727 0.26612,-0.78125 -1e-5,-0.332029 -0.0855,-0.58919 -0.25635,-0.771484 -0.1709,-0.182289 -0.40284,-0.273435 -0.6958,-0.273438 -0.15625,3e-6 -0.3711,0.03907 -0.64453,0.117188 l 0.10254,-1.420899 c 0.11067,0.01628 0.19693,0.02442 0.25879,0.02441 0.26041,5e-6 0.47769,-0.083 0.65185,-0.249023 0.17415,-0.166011 0.26123,-0.362951 0.26123,-0.59082 0,-0.218094 -0.0651,-0.392247 -0.19531,-0.522461 -0.13021,-0.130203 -0.30925,-0.195307 -0.53711,-0.195313 -0.23438,6e-6 -0.42481,0.07081 -0.57129,0.212402 -0.14649,0.141608 -0.24577,0.389817 -0.29785,0.744629 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3774" />
|
||||
id="path3774"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 204.39043,45.963036 c 0,-1.360673 0.24495,-2.31282 0.73486,-2.856446 0.48991,-0.543613 1.23616,-0.815422 2.23877,-0.815429 0.48177,7e-6 0.87727,0.05941 1.18652,0.178222 0.30924,0.118822 0.56152,0.273445 0.75684,0.463867 0.19531,0.190437 0.34911,0.390632 0.46142,0.600586 0.1123,0.209967 0.20264,0.454921 0.271,0.734864 0.13346,0.533859 0.20019,1.090499 0.2002,1.669922 -1e-5,1.29883 -0.21974,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.1963,0.90332 -2.27051,0.90332 -0.60222,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.3711,-0.192057 -0.67546,-0.473632 -0.91309,-0.844726 -0.17253,-0.263671 -0.3068,-0.624185 -0.40283,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97265,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70069,0.500488 0.20182,2e-6 0.37678,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10497,-0.782874 0.10498,-1.430664 -10e-6,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16114,-0.327142 -0.40284,-0.490716 -0.7251,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.71289,0.500488 -0.14649,0.333664 -0.21973,0.951339 -0.21973,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3776" />
|
||||
id="path3776"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -2861,22 +3370,26 @@
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 226.60625,59.285714 0,-8.571429"
|
||||
id="path4100" />
|
||||
id="path4100"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text4102">
|
||||
<path
|
||||
d="m 218.95976,44.483543 -1.87988,-0.336914 c 0.15625,-0.598952 0.45654,-1.057936 0.90088,-1.376953 0.44433,-0.319003 1.0734,-0.478508 1.88721,-0.478515 0.93424,7e-6 1.60969,0.17416 2.02636,0.522461 0.41666,0.348313 0.625,0.786138 0.625,1.313476 0,0.30925 -0.0846,0.589198 -0.2539,0.839844 -0.16928,0.250655 -0.42481,0.470382 -0.7666,0.65918 0.27668,0.06836 0.48827,0.148115 0.63476,0.239257 0.23763,0.146488 0.42236,0.339359 0.5542,0.578614 0.13183,0.23926 0.19775,0.524905 0.19775,0.856933 0,0.416669 -0.10905,0.816245 -0.32714,1.198731 -0.21811,0.382487 -0.53224,0.677083 -0.94239,0.883789 -0.41016,0.206705 -0.94889,0.310058 -1.61621,0.310058 -0.65104,0 -1.16455,-0.0765 -1.54053,-0.229492 -0.37597,-0.152994 -0.68522,-0.37679 -0.92773,-0.671387 -0.24251,-0.294595 -0.42887,-0.664874 -0.55908,-1.110839 l 1.9873,-0.263672 c 0.0781,0.400392 0.19938,0.677898 0.36377,0.832519 0.16439,0.154624 0.37353,0.231935 0.62744,0.231934 0.26693,10e-7 0.48909,-0.09766 0.66651,-0.292969 0.1774,-0.195311 0.26611,-0.455727 0.26611,-0.78125 0,-0.332029 -0.0855,-0.58919 -0.25635,-0.771484 -0.1709,-0.182289 -0.40283,-0.273435 -0.6958,-0.273438 -0.15625,3e-6 -0.37109,0.03907 -0.64453,0.117188 l 0.10254,-1.420899 c 0.11067,0.01628 0.19694,0.02442 0.25879,0.02441 0.26041,5e-6 0.4777,-0.083 0.65185,-0.249023 0.17415,-0.166011 0.26123,-0.362951 0.26124,-0.59082 -1e-5,-0.218094 -0.0651,-0.392247 -0.19532,-0.522461 -0.13021,-0.130203 -0.30925,-0.195307 -0.53711,-0.195313 -0.23437,6e-6 -0.4248,0.07081 -0.57129,0.212402 -0.14648,0.141608 -0.24577,0.389817 -0.29785,0.744629 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3780" />
|
||||
id="path3780"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 227.12871,48.233543 -3.62305,0 0,-1.635742 3.62305,-4.30664 1.7334,0 0,4.399414 0.89843,0 0,1.542968 -0.89843,0 0,1.337891 -1.7334,0 z m 0,-1.542968 0,-2.250977 -1.91406,2.250977 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3782" />
|
||||
id="path3782"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 230.39043,45.963036 c 0,-1.360673 0.24495,-2.31282 0.73486,-2.856446 0.48991,-0.543613 1.23616,-0.815422 2.23877,-0.815429 0.48177,7e-6 0.87727,0.05941 1.18652,0.178222 0.30924,0.118822 0.56152,0.273445 0.75684,0.463867 0.19531,0.190437 0.34911,0.390632 0.46142,0.600586 0.1123,0.209967 0.20264,0.454921 0.271,0.734864 0.13346,0.533859 0.20019,1.090499 0.2002,1.669922 -1e-5,1.29883 -0.21974,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.1963,0.90332 -2.27051,0.90332 -0.60222,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.3711,-0.192057 -0.67546,-0.473632 -0.91309,-0.844726 -0.17253,-0.263671 -0.3068,-0.624185 -0.40283,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97265,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70069,0.500488 0.20182,2e-6 0.37678,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10497,-0.782874 0.10498,-1.430664 -10e-6,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16114,-0.327142 -0.40284,-0.490716 -0.7251,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.71289,0.500488 -0.14649,0.333664 -0.21973,0.951339 -0.21973,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3784" />
|
||||
id="path3784"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -2886,22 +3399,26 @@
|
||||
<path
|
||||
id="path4108"
|
||||
d="m 250.60625,59.285714 0,-8.571429"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text4110">
|
||||
<path
|
||||
d="m 242.95976,44.483543 -1.87988,-0.336914 c 0.15625,-0.598952 0.45654,-1.057936 0.90088,-1.376953 0.44433,-0.319003 1.0734,-0.478508 1.88721,-0.478515 0.93424,7e-6 1.60969,0.17416 2.02636,0.522461 0.41666,0.348313 0.625,0.786138 0.625,1.313476 0,0.30925 -0.0846,0.589198 -0.2539,0.839844 -0.16928,0.250655 -0.42481,0.470382 -0.7666,0.65918 0.27668,0.06836 0.48827,0.148115 0.63476,0.239257 0.23763,0.146488 0.42236,0.339359 0.5542,0.578614 0.13183,0.23926 0.19775,0.524905 0.19775,0.856933 0,0.416669 -0.10905,0.816245 -0.32714,1.198731 -0.21811,0.382487 -0.53224,0.677083 -0.94239,0.883789 -0.41016,0.206705 -0.94889,0.310058 -1.61621,0.310058 -0.65104,0 -1.16455,-0.0765 -1.54053,-0.229492 -0.37597,-0.152994 -0.68522,-0.37679 -0.92773,-0.671387 -0.24251,-0.294595 -0.42887,-0.664874 -0.55908,-1.110839 l 1.9873,-0.263672 c 0.0781,0.400392 0.19938,0.677898 0.36377,0.832519 0.16439,0.154624 0.37353,0.231935 0.62744,0.231934 0.26693,10e-7 0.48909,-0.09766 0.66651,-0.292969 0.1774,-0.195311 0.26611,-0.455727 0.26611,-0.78125 0,-0.332029 -0.0855,-0.58919 -0.25635,-0.771484 -0.1709,-0.182289 -0.40283,-0.273435 -0.6958,-0.273438 -0.15625,3e-6 -0.37109,0.03907 -0.64453,0.117188 l 0.10254,-1.420899 c 0.11067,0.01628 0.19694,0.02442 0.25879,0.02441 0.26041,5e-6 0.4777,-0.083 0.65185,-0.249023 0.17415,-0.166011 0.26123,-0.362951 0.26124,-0.59082 -1e-5,-0.218094 -0.0651,-0.392247 -0.19532,-0.522461 -0.13021,-0.130203 -0.30925,-0.195307 -0.53711,-0.195313 -0.23437,6e-6 -0.4248,0.07081 -0.57129,0.212402 -0.14648,0.141608 -0.24577,0.389817 -0.29785,0.744629 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3787" />
|
||||
id="path3787"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 248.5164,42.413231 4.72168,0 0,1.586914 -3.19824,0 -0.1709,1.074219 c 0.22135,-0.104162 0.44027,-0.182287 0.65674,-0.234375 0.21647,-0.05208 0.4305,-0.07812 0.64209,-0.07813 0.71614,5e-6 1.2972,0.216476 1.74316,0.649414 0.44596,0.432946 0.66894,0.978193 0.66895,1.635742 -1e-5,0.462242 -0.11475,0.906577 -0.34424,1.333008 -0.2295,0.426433 -0.55502,0.751953 -0.97656,0.976562 -0.42156,0.22461 -0.96111,0.336914 -1.61865,0.336914 -0.47201,0 -0.87647,-0.04476 -1.21338,-0.134277 -0.33692,-0.08952 -0.62338,-0.222982 -0.85938,-0.400391 -0.236,-0.177408 -0.42724,-0.378417 -0.57373,-0.603027 -0.14648,-0.224608 -0.26855,-0.504556 -0.36621,-0.839844 l 2.01172,-0.219726 c 0.0488,0.322267 0.16276,0.567221 0.3418,0.734863 0.17903,0.167644 0.39225,0.251466 0.63965,0.251465 0.27668,10e-7 0.50536,-0.104979 0.68603,-0.314942 0.18066,-0.209959 0.27099,-0.523272 0.271,-0.939941 -1e-5,-0.42643 -0.0911,-0.738929 -0.27344,-0.9375 -0.1823,-0.198564 -0.42481,-0.297848 -0.72754,-0.297852 -0.19206,4e-6 -0.37761,0.04721 -0.55664,0.141602 -0.13347,0.06836 -0.27995,0.192061 -0.43945,0.371094 l -1.69434,-0.244141 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3789" />
|
||||
id="path3789"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 254.39043,45.963036 c 0,-1.360673 0.24495,-2.31282 0.73486,-2.856446 0.48991,-0.543613 1.23616,-0.815422 2.23877,-0.815429 0.48177,7e-6 0.87727,0.05941 1.18652,0.178222 0.30924,0.118822 0.56152,0.273445 0.75684,0.463867 0.19531,0.190437 0.34911,0.390632 0.46142,0.600586 0.1123,0.209967 0.20264,0.454921 0.271,0.734864 0.13346,0.533859 0.20019,1.090499 0.2002,1.669922 -1e-5,1.29883 -0.21974,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.1963,0.90332 -2.27051,0.90332 -0.60222,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.3711,-0.192057 -0.67546,-0.473632 -0.91309,-0.844726 -0.17253,-0.263671 -0.3068,-0.624185 -0.40283,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97265,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70069,0.500488 0.20182,2e-6 0.37678,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10497,-0.782874 0.10498,-1.430664 -10e-6,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16114,-0.327142 -0.40284,-0.490716 -0.7251,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.71289,0.500488 -0.14649,0.333664 -0.21973,0.951339 -0.21973,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3791" />
|
||||
id="path3791"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -2911,22 +3428,26 @@
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 6.5622945,59.285714 0,-8.571429"
|
||||
id="path4116" />
|
||||
id="path4116"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text4118">
|
||||
<path
|
||||
d="m 2.851357,49.571434 -5.9667969,0 c 0.068359,-0.589192 0.2758784,-1.143391 0.6225586,-1.662598 0.3466785,-0.519203 0.9969057,-1.131996 1.9506836,-1.838379 0.58267887,-0.432938 0.95539985,-0.761714 1.11816406,-0.986328 0.1627563,-0.224604 0.24413642,-0.43782 0.24414062,-0.639648 -4.2e-6,-0.218094 -0.0805705,-0.404454 -0.24169922,-0.559082 -0.1611366,-0.154617 -0.36377312,-0.231928 -0.60791015,-0.231934 -0.25390935,6e-6 -0.46142867,0.07976 -0.6225586,0.239258 -0.16113537,0.159511 -0.26937094,0.441086 -0.32470703,0.844727 L -2.9689555,44.576317 c 0.078124,-0.55989 0.2213535,-0.996902 0.4296875,-1.311035 0.2083323,-0.314121 0.5021145,-0.555006 0.8813476,-0.722657 0.3792297,-0.167636 0.90413153,-0.251457 1.57470707,-0.251464 0.6998658,7e-6 1.24429883,0.07976 1.63330083,0.239257 0.388992,0.159512 0.6949813,0.404467 0.9179687,0.734864 0.2229757,0.330409 0.3344665,0.700689 0.3344727,1.11084 -6.2e-6,0.436202 -0.127773,0.852868 -0.3833008,1.25 -0.2555394,0.397138 -0.7202199,0.833336 -1.394043,1.308593 -0.40039462,0.276695 -0.66813524,0.47038 -0.80322265,0.581055 -0.13509461,0.110679 -0.29378586,0.255536 -0.47607422,0.43457 l 3.10546877,0 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3794" />
|
||||
id="path3794"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="M 9.4675679,44.024559 7.4900289,44.2687 C 7.4379414,43.992013 7.3508647,43.7967 7.2287984,43.682762 7.1067243,43.568836 6.956171,43.51187 6.7771382,43.511864 c -0.3222687,6e-6 -0.5729195,0.162766 -0.7519531,0.488281 -0.1302109,0.23438 -0.2262395,0.735682 -0.2880859,1.503906 0.2376275,-0.240881 0.4817679,-0.419103 0.7324218,-0.534668 0.2506477,-0.115555 0.5403609,-0.173335 0.8691407,-0.17334 0.6380161,5e-6 1.1775664,0.22787 1.6186523,0.683594 0.4410746,0.455733 0.6616148,1.033532 0.6616211,1.733399 -6.3e-6,0.472007 -0.1114971,0.903321 -0.3344726,1.293945 -0.2229876,0.390626 -0.5322321,0.686035 -0.9277344,0.88623 -0.3955125,0.200196 -0.8911175,0.300293 -1.4868164,0.300293 -0.7161487,0 -1.2906924,-0.12207 -1.7236328,-0.366211 C 4.7133347,49.083153 4.3674692,48.693342 4.1086812,48.15786 3.8498916,47.62238 3.7204972,46.913559 3.7204976,46.031395 c -4e-7,-1.292313 0.2718092,-2.238764 0.8154297,-2.839356 0.543618,-0.600578 1.297198,-0.900871 2.2607422,-0.900878 0.5696574,7e-6 1.0196895,0.06593 1.3500976,0.197753 0.3303985,0.131843 0.6046495,0.324714 0.8227539,0.578614 0.2180931,0.253912 0.3841086,0.572922 0.4980469,0.957031 z m -3.6621094,3.188477 c -2.5e-6,0.387371 0.097654,0.690919 0.2929688,0.910644 0.1953095,0.219728 0.4345671,0.329591 0.7177734,0.32959 0.2604129,10e-7 0.4785117,-0.09928 0.6542969,-0.297852 0.1757769,-0.198566 0.2636674,-0.494789 0.2636719,-0.888671 -4.5e-6,-0.403644 -0.09115,-0.71126 -0.2734375,-0.922852 -0.1822957,-0.211585 -0.4085324,-0.317379 -0.678711,-0.317383 -0.2766959,4e-6 -0.5086292,0.102543 -0.6958007,0.307617 -0.1871771,0.205081 -0.2807643,0.49805 -0.2807618,0.878907 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3796" />
|
||||
id="path3796"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 10.390419,45.963036 c 0,-1.360673 0.244954,-2.31282 0.734864,-2.856446 0.489907,-0.543613 1.236163,-0.815422 2.238769,-0.815429 0.481767,7e-6 0.877275,0.05941 1.186524,0.178222 0.30924,0.118822 0.561518,0.273445 0.756836,0.463867 0.195307,0.190437 0.349115,0.390632 0.461425,0.600586 0.112299,0.209967 0.202631,0.454921 0.270997,0.734864 0.133457,0.533859 0.200189,1.090499 0.200195,1.669922 -6e-6,1.29883 -0.219733,2.24935 -0.65918,2.851562 -0.439458,0.602214 -1.196293,0.90332 -2.270508,0.90332 -0.602216,0 -1.088869,-0.09603 -1.459961,-0.288086 -0.371095,-0.192057 -0.675457,-0.473632 -0.913086,-0.844726 -0.172526,-0.263671 -0.306804,-0.624185 -0.402832,-1.081543 -0.09603,-0.457354 -0.144043,-0.962725 -0.144043,-1.516113 z m 1.972657,0.0049 c -3e-6,0.911461 0.08056,1.534019 0.241699,1.867676 0.16113,0.33366 0.394691,0.50049 0.700684,0.500488 0.201819,2e-6 0.376786,-0.0708 0.524902,-0.212402 0.148108,-0.1416 0.257157,-0.365395 0.327148,-0.671387 0.06998,-0.305987 0.104977,-0.782874 0.104981,-1.430664 -4e-6,-0.950516 -0.08057,-1.58935 -0.241699,-1.916504 -0.161137,-0.327142 -0.402836,-0.490716 -0.725098,-0.490722 -0.328779,6e-6 -0.566409,0.166835 -0.712891,0.500488 -0.146487,0.333664 -0.219729,0.951339 -0.219726,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3798" />
|
||||
id="path3798"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -2936,22 +3457,26 @@
|
||||
<path
|
||||
id="path4220"
|
||||
d="m -27.437706,59.285714 0,-8.571429"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text4222">
|
||||
<path
|
||||
d="m -31.148643,49.571434 -5.966797,0 c 0.06836,-0.589192 0.275878,-1.143391 0.622558,-1.662598 0.346679,-0.519203 0.996906,-1.131996 1.950684,-1.838379 0.582679,-0.432938 0.9554,-0.761714 1.118164,-0.986328 0.162756,-0.224604 0.244136,-0.43782 0.244141,-0.639648 -5e-6,-0.218094 -0.08057,-0.404454 -0.2417,-0.559082 -0.161136,-0.154617 -0.363773,-0.231928 -0.60791,-0.231934 -0.253909,6e-6 -0.461429,0.07976 -0.622558,0.239258 -0.161136,0.159511 -0.269371,0.441086 -0.324707,0.844727 l -1.992188,-0.161133 c 0.07813,-0.55989 0.221354,-0.996902 0.429688,-1.311035 0.208332,-0.314121 0.502114,-0.555006 0.881347,-0.722657 0.37923,-0.167636 0.904132,-0.251457 1.574707,-0.251464 0.699866,7e-6 1.244299,0.07976 1.633301,0.239257 0.388992,0.159512 0.694981,0.404467 0.917969,0.734864 0.222975,0.330409 0.334466,0.700689 0.334472,1.11084 -6e-6,0.436202 -0.127773,0.852868 -0.3833,1.25 -0.25554,0.397138 -0.72022,0.833336 -1.394043,1.308593 -0.400395,0.276695 -0.668136,0.47038 -0.803223,0.581055 -0.135095,0.110679 -0.293786,0.255536 -0.476074,0.43457 l 3.105469,0 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3801" />
|
||||
id="path3801"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -29.483604,42.413231 4.721679,0 0,1.586914 -3.198242,0 -0.170898,1.074219 c 0.221351,-0.104162 0.440264,-0.182287 0.656738,-0.234375 0.216468,-0.05208 0.430498,-0.07812 0.64209,-0.07813 0.716141,5e-6 1.297195,0.216476 1.743164,0.649414 0.445957,0.432946 0.668939,0.978193 0.668945,1.635742 -6e-6,0.462242 -0.114752,0.906577 -0.344238,1.333008 -0.229498,0.426433 -0.555019,0.751953 -0.976563,0.976562 -0.421554,0.22461 -0.961104,0.336914 -1.618652,0.336914 -0.472008,0 -0.876467,-0.04476 -1.213379,-0.134277 -0.336916,-0.08952 -0.623374,-0.222982 -0.859375,-0.400391 -0.236004,-0.177408 -0.427247,-0.378417 -0.57373,-0.603027 -0.146485,-0.224608 -0.268555,-0.504556 -0.366211,-0.839844 l 2.011718,-0.219726 c 0.04883,0.322267 0.162758,0.567221 0.341797,0.734863 0.179034,0.167644 0.39225,0.251466 0.639649,0.251465 0.276689,10e-7 0.505367,-0.104979 0.686035,-0.314942 0.18066,-0.209959 0.270992,-0.523272 0.270996,-0.939941 -4e-6,-0.42643 -0.09115,-0.738929 -0.273437,-0.9375 -0.182296,-0.198564 -0.424809,-0.297848 -0.72754,-0.297852 -0.19206,4e-6 -0.377607,0.04721 -0.55664,0.141602 -0.133466,0.06836 -0.279951,0.192061 -0.439453,0.371094 l -1.694336,-0.244141 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3803" />
|
||||
id="path3803"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -23.609581,45.963036 c 0,-1.360673 0.244954,-2.31282 0.734863,-2.856446 0.489908,-0.543613 1.236163,-0.815422 2.23877,-0.815429 0.481767,7e-6 0.877274,0.05941 1.186523,0.178222 0.30924,0.118822 0.561519,0.273445 0.756836,0.463867 0.195307,0.190437 0.349116,0.390632 0.461426,0.600586 0.112299,0.209967 0.202631,0.454921 0.270996,0.734864 0.133457,0.533859 0.200189,1.090499 0.200195,1.669922 -6e-6,1.29883 -0.219732,2.24935 -0.659179,2.851562 -0.439459,0.602214 -1.196294,0.90332 -2.270508,0.90332 -0.602216,0 -1.08887,-0.09603 -1.459961,-0.288086 -0.371095,-0.192057 -0.675457,-0.473632 -0.913086,-0.844726 -0.172527,-0.263671 -0.306804,-0.624185 -0.402832,-1.081543 -0.09603,-0.457354 -0.144043,-0.962725 -0.144043,-1.516113 z m 1.972656,0.0049 c -2e-6,0.911461 0.08056,1.534019 0.241699,1.867676 0.161131,0.33366 0.394691,0.50049 0.700684,0.500488 0.201819,2e-6 0.376787,-0.0708 0.524902,-0.212402 0.148108,-0.1416 0.257158,-0.365395 0.327149,-0.671387 0.06998,-0.305987 0.104976,-0.782874 0.10498,-1.430664 -4e-6,-0.950516 -0.08057,-1.58935 -0.241699,-1.916504 -0.161137,-0.327142 -0.402836,-0.490716 -0.725098,-0.490722 -0.328779,6e-6 -0.566409,0.166835 -0.71289,0.500488 -0.146487,0.333664 -0.219729,0.951339 -0.219727,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3805" />
|
||||
id="path3805"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -2961,22 +3486,26 @@
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -61.437706,59.285714 0,-8.571429"
|
||||
id="path4228" />
|
||||
id="path4228"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text4230">
|
||||
<path
|
||||
d="m -65.148643,49.571434 -5.966797,0 c 0.06836,-0.589192 0.275878,-1.143391 0.622558,-1.662598 0.346679,-0.519203 0.996906,-1.131996 1.950684,-1.838379 0.582679,-0.432938 0.9554,-0.761714 1.118164,-0.986328 0.162756,-0.224604 0.244136,-0.43782 0.244141,-0.639648 -5e-6,-0.218094 -0.08057,-0.404454 -0.2417,-0.559082 -0.161136,-0.154617 -0.363773,-0.231928 -0.60791,-0.231934 -0.253909,6e-6 -0.461429,0.07976 -0.622558,0.239258 -0.161136,0.159511 -0.269371,0.441086 -0.324707,0.844727 l -1.992188,-0.161133 c 0.07813,-0.55989 0.221354,-0.996902 0.429688,-1.311035 0.208332,-0.314121 0.502114,-0.555006 0.881347,-0.722657 0.37923,-0.167636 0.904132,-0.251457 1.574707,-0.251464 0.699866,7e-6 1.244299,0.07976 1.633301,0.239257 0.388992,0.159512 0.694981,0.404467 0.917969,0.734864 0.222975,0.330409 0.334466,0.700689 0.334472,1.11084 -6e-6,0.436202 -0.127773,0.852868 -0.3833,1.25 -0.25554,0.397138 -0.72022,0.833336 -1.394043,1.308593 -0.400395,0.276695 -0.668136,0.47038 -0.803223,0.581055 -0.135095,0.110679 -0.293786,0.255536 -0.476074,0.43457 l 3.105469,0 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3809" />
|
||||
id="path3809"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -60.8713,48.233543 -3.623047,0 0,-1.635742 3.623047,-4.30664 1.733399,0 0,4.399414 0.898437,0 0,1.542968 -0.898437,0 0,1.337891 -1.733399,0 z m 0,-1.542968 0,-2.250977 -1.914062,2.250977 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3811" />
|
||||
id="path3811"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -57.609581,45.963036 c 0,-1.360673 0.244954,-2.31282 0.734863,-2.856446 0.489908,-0.543613 1.236163,-0.815422 2.23877,-0.815429 0.481767,7e-6 0.877274,0.05941 1.186523,0.178222 0.30924,0.118822 0.561519,0.273445 0.756836,0.463867 0.195307,0.190437 0.349116,0.390632 0.461426,0.600586 0.112299,0.209967 0.202631,0.454921 0.270996,0.734864 0.133457,0.533859 0.200189,1.090499 0.200195,1.669922 -6e-6,1.29883 -0.219732,2.24935 -0.659179,2.851562 -0.439459,0.602214 -1.196294,0.90332 -2.270508,0.90332 -0.602216,0 -1.08887,-0.09603 -1.459961,-0.288086 -0.371095,-0.192057 -0.675457,-0.473632 -0.913086,-0.844726 -0.172527,-0.263671 -0.306804,-0.624185 -0.402832,-1.081543 -0.09603,-0.457354 -0.144043,-0.962725 -0.144043,-1.516113 z m 1.972656,0.0049 c -2e-6,0.911461 0.08056,1.534019 0.241699,1.867676 0.161131,0.33366 0.394691,0.50049 0.700684,0.500488 0.201819,2e-6 0.376787,-0.0708 0.524902,-0.212402 0.148108,-0.1416 0.257158,-0.365395 0.327149,-0.671387 0.06998,-0.305987 0.104976,-0.782874 0.10498,-1.430664 -4e-6,-0.950516 -0.08057,-1.58935 -0.241699,-1.916504 -0.161137,-0.327142 -0.402836,-0.490716 -0.725098,-0.490722 -0.328779,6e-6 -0.566409,0.166835 -0.71289,0.500488 -0.146487,0.333664 -0.219729,0.951339 -0.219727,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3813" />
|
||||
id="path3813"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -2986,22 +3515,26 @@
|
||||
<path
|
||||
id="path4236"
|
||||
d="m -85.437706,59.285714 0,-8.571429"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text4238">
|
||||
<path
|
||||
d="m -89.148643,49.571434 -5.966797,0 c 0.06836,-0.589192 0.275878,-1.143391 0.622558,-1.662598 0.346679,-0.519203 0.996906,-1.131996 1.950684,-1.838379 0.582679,-0.432938 0.9554,-0.761714 1.118164,-0.986328 0.162756,-0.224604 0.244136,-0.43782 0.244141,-0.639648 -5e-6,-0.218094 -0.08057,-0.404454 -0.2417,-0.559082 -0.161136,-0.154617 -0.363773,-0.231928 -0.60791,-0.231934 -0.253909,6e-6 -0.461429,0.07976 -0.622558,0.239258 -0.161136,0.159511 -0.269371,0.441086 -0.324707,0.844727 l -1.992188,-0.161133 c 0.07813,-0.55989 0.221354,-0.996902 0.429688,-1.311035 0.208332,-0.314121 0.502114,-0.555006 0.881347,-0.722657 0.37923,-0.167636 0.904132,-0.251457 1.574707,-0.251464 0.699866,7e-6 1.244299,0.07976 1.633301,0.239257 0.388992,0.159512 0.694981,0.404467 0.917969,0.734864 0.222975,0.330409 0.334466,0.700689 0.334472,1.11084 -6e-6,0.436202 -0.127773,0.852868 -0.3833,1.25 -0.25554,0.397138 -0.72022,0.833336 -1.394043,1.308593 -0.400395,0.276695 -0.668136,0.47038 -0.803223,0.581055 -0.135095,0.110679 -0.293786,0.255536 -0.476074,0.43457 l 3.105469,0 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3816" />
|
||||
id="path3816"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -86.360558,44.483543 -1.879882,-0.336914 c 0.156249,-0.598952 0.456542,-1.057936 0.900879,-1.376953 0.444334,-0.319003 1.073402,-0.478508 1.887207,-0.478515 0.93424,7e-6 1.609695,0.17416 2.026367,0.522461 0.416661,0.348313 0.624994,0.786138 0.625,1.313476 -6e-6,0.30925 -0.08464,0.589198 -0.253906,0.839844 -0.169277,0.250655 -0.42481,0.470382 -0.766602,0.65918 0.276687,0.06836 0.488276,0.148115 0.634766,0.239257 0.237624,0.146488 0.422357,0.339359 0.554199,0.578614 0.13183,0.23926 0.197747,0.524905 0.197754,0.856933 -7e-6,0.416669 -0.109056,0.816245 -0.327149,1.198731 -0.218104,0.382487 -0.532232,0.677083 -0.942383,0.883789 -0.41016,0.206705 -0.948897,0.310058 -1.61621,0.310058 -0.651045,0 -1.164553,-0.0765 -1.540528,-0.229492 -0.375978,-0.152994 -0.685222,-0.37679 -0.927734,-0.671387 -0.242514,-0.294595 -0.428874,-0.664874 -0.559082,-1.110839 l 1.987304,-0.263672 c 0.07812,0.400392 0.199379,0.677898 0.36377,0.832519 0.164385,0.154624 0.373532,0.231935 0.627441,0.231934 0.266924,10e-7 0.489092,-0.09766 0.666504,-0.292969 0.177405,-0.195311 0.266109,-0.455727 0.266114,-0.78125 -5e-6,-0.332029 -0.08545,-0.58919 -0.256348,-0.771484 -0.170902,-0.182289 -0.402836,-0.273435 -0.695801,-0.273438 -0.156253,3e-6 -0.371097,0.03907 -0.644531,0.117188 l 0.102539,-1.420899 c 0.110674,0.01628 0.196937,0.02442 0.258789,0.02441 0.260413,5e-6 0.477698,-0.083 0.651855,-0.249023 0.17415,-0.166011 0.261227,-0.362951 0.261231,-0.59082 -4e-6,-0.218094 -0.06511,-0.392247 -0.195313,-0.522461 -0.130212,-0.130203 -0.309248,-0.195307 -0.537109,-0.195313 -0.234378,6e-6 -0.424807,0.07081 -0.571289,0.212402 -0.146487,0.141608 -0.245771,0.389817 -0.297852,0.744629 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3818" />
|
||||
id="path3818"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -81.609581,45.963036 c 0,-1.360673 0.244954,-2.31282 0.734863,-2.856446 0.489908,-0.543613 1.236163,-0.815422 2.23877,-0.815429 0.481767,7e-6 0.877274,0.05941 1.186523,0.178222 0.30924,0.118822 0.561519,0.273445 0.756836,0.463867 0.195307,0.190437 0.349116,0.390632 0.461426,0.600586 0.112299,0.209967 0.202631,0.454921 0.270996,0.734864 0.133457,0.533859 0.200189,1.090499 0.200195,1.669922 -6e-6,1.29883 -0.219732,2.24935 -0.659179,2.851562 -0.439459,0.602214 -1.196294,0.90332 -2.270508,0.90332 -0.602216,0 -1.08887,-0.09603 -1.459961,-0.288086 -0.371095,-0.192057 -0.675457,-0.473632 -0.913086,-0.844726 -0.172527,-0.263671 -0.306804,-0.624185 -0.402832,-1.081543 -0.09603,-0.457354 -0.144043,-0.962725 -0.144043,-1.516113 z m 1.972656,0.0049 c -2e-6,0.911461 0.08056,1.534019 0.241699,1.867676 0.161131,0.33366 0.394691,0.50049 0.700684,0.500488 0.201819,2e-6 0.376787,-0.0708 0.524902,-0.212402 0.148108,-0.1416 0.257158,-0.365395 0.327149,-0.671387 0.06998,-0.305987 0.104976,-0.782874 0.10498,-1.430664 -4e-6,-0.950516 -0.08057,-1.58935 -0.241699,-1.916504 -0.161137,-0.327142 -0.402836,-0.490716 -0.725098,-0.490722 -0.328779,6e-6 -0.566409,0.166835 -0.71289,0.500488 -0.146487,0.333664 -0.219729,0.951339 -0.219727,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3820" />
|
||||
id="path3820"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -3011,22 +3544,26 @@
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -111.43771,59.285714 0,-8.571429"
|
||||
id="path4244" />
|
||||
id="path4244"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text4246">
|
||||
<path
|
||||
d="m -115.14864,49.571434 -5.9668,0 c 0.0684,-0.589192 0.27588,-1.143391 0.62256,-1.662598 0.34668,-0.519203 0.9969,-1.131996 1.95068,-1.838379 0.58268,-0.432938 0.9554,-0.761714 1.11817,-0.986328 0.16275,-0.224604 0.24413,-0.43782 0.24414,-0.639648 -1e-5,-0.218094 -0.0806,-0.404454 -0.2417,-0.559082 -0.16114,-0.154617 -0.36378,-0.231928 -0.60791,-0.231934 -0.25391,6e-6 -0.46143,0.07976 -0.62256,0.239258 -0.16114,0.159511 -0.26937,0.441086 -0.32471,0.844727 l -1.99219,-0.161133 c 0.0781,-0.55989 0.22136,-0.996902 0.42969,-1.311035 0.20833,-0.314121 0.50212,-0.555006 0.88135,-0.722657 0.37923,-0.167636 0.90413,-0.251457 1.57471,-0.251464 0.69986,7e-6 1.2443,0.07976 1.6333,0.239257 0.38899,0.159512 0.69498,0.404467 0.91797,0.734864 0.22297,0.330409 0.33446,0.700689 0.33447,1.11084 -1e-5,0.436202 -0.12777,0.852868 -0.3833,1.25 -0.25554,0.397138 -0.72022,0.833336 -1.39405,1.308593 -0.40039,0.276695 -0.66813,0.47038 -0.80322,0.581055 -0.13509,0.110679 -0.29378,0.255536 -0.47607,0.43457 l 3.10547,0 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3823" />
|
||||
id="path3823"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -108.46896,49.571434 -5.96679,0 c 0.0684,-0.589192 0.27588,-1.143391 0.62256,-1.662598 0.34667,-0.519203 0.9969,-1.131996 1.95068,-1.838379 0.58268,-0.432938 0.9554,-0.761714 1.11816,-0.986328 0.16276,-0.224604 0.24414,-0.43782 0.24414,-0.639648 0,-0.218094 -0.0806,-0.404454 -0.2417,-0.559082 -0.16113,-0.154617 -0.36377,-0.231928 -0.60791,-0.231934 -0.2539,6e-6 -0.46142,0.07976 -0.62255,0.239258 -0.16114,0.159511 -0.26937,0.441086 -0.32471,0.844727 l -1.99219,-0.161133 c 0.0781,-0.55989 0.22136,-0.996902 0.42969,-1.311035 0.20833,-0.314121 0.50211,-0.555006 0.88135,-0.722657 0.37923,-0.167636 0.90413,-0.251457 1.5747,-0.251464 0.69987,7e-6 1.2443,0.07976 1.6333,0.239257 0.389,0.159512 0.69499,0.404467 0.91797,0.734864 0.22298,0.330409 0.33447,0.700689 0.33448,1.11084 -1e-5,0.436202 -0.12778,0.852868 -0.3833,1.25 -0.25554,0.397138 -0.72022,0.833336 -1.39405,1.308593 -0.40039,0.276695 -0.66813,0.47038 -0.80322,0.581055 -0.1351,0.110679 -0.29379,0.255536 -0.47607,0.43457 l 3.10546,0 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3825" />
|
||||
id="path3825"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -107.60958,45.963036 c 0,-1.360673 0.24495,-2.31282 0.73486,-2.856446 0.48991,-0.543613 1.23617,-0.815422 2.23877,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56151,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.27099,0.734864 0.13346,0.533859 0.20019,1.090499 0.2002,1.669922 -1e-5,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60222,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.3711,-0.192057 -0.67546,-0.473632 -0.91309,-0.844726 -0.17252,-0.263671 -0.3068,-0.624185 -0.40283,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97266,0.0049 c -1e-5,0.911461 0.0806,1.534019 0.24169,1.867676 0.16113,0.33366 0.3947,0.50049 0.70069,0.500488 0.20182,2e-6 0.37678,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16114,-0.327142 -0.40284,-0.490716 -0.7251,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.71289,0.500488 -0.14649,0.333664 -0.21973,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3827" />
|
||||
id="path3827"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -3036,22 +3573,26 @@
|
||||
<path
|
||||
id="path4252"
|
||||
d="m -135.4377,59.285714 0,-8.571429"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text4254">
|
||||
<path
|
||||
d="m -139.14864,49.571434 -5.96679,0 c 0.0684,-0.589192 0.27588,-1.143391 0.62256,-1.662598 0.34667,-0.519203 0.9969,-1.131996 1.95068,-1.838379 0.58268,-0.432938 0.9554,-0.761714 1.11816,-0.986328 0.16276,-0.224604 0.24414,-0.43782 0.24414,-0.639648 0,-0.218094 -0.0806,-0.404454 -0.2417,-0.559082 -0.16113,-0.154617 -0.36377,-0.231928 -0.60791,-0.231934 -0.2539,6e-6 -0.46142,0.07976 -0.62255,0.239258 -0.16114,0.159511 -0.26937,0.441086 -0.32471,0.844727 l -1.99219,-0.161133 c 0.0781,-0.55989 0.22136,-0.996902 0.42969,-1.311035 0.20833,-0.314121 0.50211,-0.555006 0.88135,-0.722657 0.37923,-0.167636 0.90413,-0.251457 1.5747,-0.251464 0.69987,7e-6 1.2443,0.07976 1.6333,0.239257 0.389,0.159512 0.69499,0.404467 0.91797,0.734864 0.22298,0.330409 0.33447,0.700689 0.33448,1.11084 -1e-5,0.436202 -0.12778,0.852868 -0.3833,1.25 -0.25554,0.397138 -0.72022,0.833336 -1.39405,1.308593 -0.40039,0.276695 -0.66813,0.47038 -0.80322,0.581055 -0.1351,0.110679 -0.29379,0.255536 -0.47607,0.43457 l 3.10546,0 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3830" />
|
||||
id="path3830"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -133.78242,42.291161 0,7.280273 -2.01172,0 0,-4.770508 c -0.32553,0.247401 -0.64047,0.447596 -0.94483,0.600586 -0.30436,0.152999 -0.68603,0.299483 -1.14502,0.439453 l 0,-1.630859 c 0.67708,-0.218093 1.2028,-0.480137 1.57715,-0.786133 0.37435,-0.305983 0.66732,-0.683587 0.87891,-1.132812 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3832" />
|
||||
id="path3832"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -131.60957,45.963036 c 0,-1.360673 0.24495,-2.31282 0.73486,-2.856446 0.48991,-0.543613 1.23616,-0.815422 2.23877,-0.815429 0.48177,7e-6 0.87727,0.05941 1.18652,0.178222 0.30924,0.118822 0.56152,0.273445 0.75684,0.463867 0.19531,0.190437 0.34911,0.390632 0.46142,0.600586 0.1123,0.209967 0.20264,0.454921 0.271,0.734864 0.13346,0.533859 0.20019,1.090499 0.2002,1.669922 -10e-6,1.29883 -0.21974,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.1963,0.90332 -2.27051,0.90332 -0.60222,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.3711,-0.192057 -0.67546,-0.473632 -0.91309,-0.844726 -0.17253,-0.263671 -0.3068,-0.624185 -0.40283,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97265,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70069,0.500488 0.20182,2e-6 0.37678,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10497,-0.782874 0.10498,-1.430664 -1e-5,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16114,-0.327142 -0.40284,-0.490716 -0.7251,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.71289,0.500488 -0.14649,0.333664 -0.21973,0.951339 -0.21973,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3834" />
|
||||
id="path3834"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -3061,22 +3602,26 @@
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -159.4377,59.285714 0,-8.571429"
|
||||
id="path4260" />
|
||||
id="path4260"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text4262">
|
||||
<path
|
||||
d="m -163.14864,49.571434 -5.96679,0 c 0.0684,-0.589192 0.27588,-1.143391 0.62256,-1.662598 0.34667,-0.519203 0.9969,-1.131996 1.95068,-1.838379 0.58268,-0.432938 0.9554,-0.761714 1.11816,-0.986328 0.16276,-0.224604 0.24414,-0.43782 0.24414,-0.639648 0,-0.218094 -0.0806,-0.404454 -0.2417,-0.559082 -0.16113,-0.154617 -0.36377,-0.231928 -0.60791,-0.231934 -0.2539,6e-6 -0.46142,0.07976 -0.62255,0.239258 -0.16114,0.159511 -0.26937,0.441086 -0.32471,0.844727 l -1.99219,-0.161133 c 0.0781,-0.55989 0.22136,-0.996902 0.42969,-1.311035 0.20833,-0.314121 0.50211,-0.555006 0.88135,-0.722657 0.37923,-0.167636 0.90413,-0.251457 1.5747,-0.251464 0.69987,7e-6 1.2443,0.07976 1.6333,0.239257 0.389,0.159512 0.69499,0.404467 0.91797,0.734864 0.22298,0.330409 0.33447,0.700689 0.33448,1.11084 -1e-5,0.436202 -0.12778,0.852868 -0.3833,1.25 -0.25554,0.397138 -0.72022,0.833336 -1.39405,1.308593 -0.40039,0.276695 -0.66813,0.47038 -0.80322,0.581055 -0.1351,0.110679 -0.29379,0.255536 -0.47607,0.43457 l 3.10546,0 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3837" />
|
||||
id="path3837"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -162.28926,45.963036 c 0,-1.360673 0.24495,-2.31282 0.73486,-2.856446 0.48991,-0.543613 1.23617,-0.815422 2.23877,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56151,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.27099,0.734864 0.13346,0.533859 0.20019,1.090499 0.2002,1.669922 -1e-5,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60222,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.3711,-0.192057 -0.67546,-0.473632 -0.91309,-0.844726 -0.17252,-0.263671 -0.3068,-0.624185 -0.40283,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97266,0.0049 c -1e-5,0.911461 0.0806,1.534019 0.24169,1.867676 0.16113,0.33366 0.3947,0.50049 0.70069,0.500488 0.20182,2e-6 0.37678,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16114,-0.327142 -0.40284,-0.490716 -0.7251,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.71289,0.500488 -0.14648,0.333664 -0.21973,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3839" />
|
||||
id="path3839"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -155.60957,45.963036 c 0,-1.360673 0.24495,-2.31282 0.73486,-2.856446 0.48991,-0.543613 1.23616,-0.815422 2.23877,-0.815429 0.48177,7e-6 0.87727,0.05941 1.18652,0.178222 0.30924,0.118822 0.56152,0.273445 0.75684,0.463867 0.19531,0.190437 0.34911,0.390632 0.46142,0.600586 0.1123,0.209967 0.20264,0.454921 0.271,0.734864 0.13346,0.533859 0.20019,1.090499 0.2002,1.669922 -1e-5,1.29883 -0.21974,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.1963,0.90332 -2.27051,0.90332 -0.60222,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.3711,-0.192057 -0.67546,-0.473632 -0.91309,-0.844726 -0.17253,-0.263671 -0.3068,-0.624185 -0.40283,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97265,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70069,0.500488 0.20182,2e-6 0.37678,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10497,-0.782874 0.10498,-1.430664 -10e-6,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16114,-0.327142 -0.40284,-0.490716 -0.7251,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.71289,0.500488 -0.14649,0.333664 -0.21973,0.951339 -0.21973,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3841" />
|
||||
id="path3841"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -3086,22 +3631,26 @@
|
||||
<path
|
||||
id="path4268"
|
||||
d="m -181.16182,59.285714 0,-8.571429"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text4270">
|
||||
<path
|
||||
d="m -186.46211,42.291161 0,7.280273 -2.01172,0 0,-4.770508 c -0.32552,0.247401 -0.64047,0.447596 -0.94483,0.600586 -0.30436,0.152999 -0.68603,0.299483 -1.14501,0.439453 l 0,-1.630859 c 0.67708,-0.218093 1.20279,-0.480137 1.57714,-0.786133 0.37435,-0.305983 0.66732,-0.683587 0.87891,-1.132812 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3844" />
|
||||
id="path3844"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -184.20137,47.964989 1.97754,-0.249024 c 0.0521,0.276695 0.13997,0.472007 0.26367,0.585938 0.1237,0.113933 0.27506,0.170899 0.4541,0.170898 0.31901,1e-6 0.56803,-0.161131 0.74707,-0.483398 0.13021,-0.237629 0.22786,-0.740558 0.29297,-1.508789 -0.23763,0.244143 -0.48177,0.423179 -0.73242,0.537109 -0.25065,0.113935 -0.54037,0.170901 -0.86914,0.170899 -0.64128,2e-6 -1.18246,-0.227862 -1.62354,-0.683594 -0.44108,-0.455726 -0.66162,-1.031897 -0.66162,-1.728516 0,-0.475255 0.11231,-0.908197 0.33692,-1.298828 0.22461,-0.390618 0.53385,-0.686028 0.92773,-0.88623 0.39388,-0.200189 0.88867,-0.300286 1.48438,-0.300293 0.71614,7e-6 1.29068,0.122891 1.72363,0.368652 0.43294,0.245775 0.7788,0.636399 1.0376,1.171875 0.25878,0.535487 0.38817,1.24268 0.38818,2.121582 -1e-5,1.29232 -0.27182,2.238771 -0.81543,2.839355 -0.54362,0.600587 -1.2972,0.900879 -2.26074,0.900879 -0.56967,0 -1.01888,-0.06592 -1.34766,-0.197754 -0.32878,-0.131835 -0.60221,-0.324706 -0.82031,-0.578613 -0.2181,-0.253905 -0.38574,-0.571288 -0.50293,-0.952148 z m 3.66211,-3.19336 c -10e-6,-0.387364 -0.0977,-0.690912 -0.29297,-0.910644 -0.19532,-0.219721 -0.43295,-0.329584 -0.71289,-0.32959 -0.26368,6e-6 -0.48259,0.09929 -0.65674,0.297852 -0.17415,0.198573 -0.26123,0.496424 -0.26123,0.893554 0,0.400395 0.0903,0.706385 0.271,0.917969 0.18066,0.211592 0.40608,0.317386 0.67627,0.317383 0.27994,3e-6 0.51269,-0.102536 0.69824,-0.307617 0.18554,-0.205074 0.27831,-0.498043 0.27832,-0.878907 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3846" />
|
||||
id="path3846"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -177.60957,45.963036 c 0,-1.360673 0.24495,-2.31282 0.73486,-2.856446 0.48991,-0.543613 1.23616,-0.815422 2.23877,-0.815429 0.48177,7e-6 0.87727,0.05941 1.18652,0.178222 0.30924,0.118822 0.56152,0.273445 0.75684,0.463867 0.19531,0.190437 0.34911,0.390632 0.46142,0.600586 0.1123,0.209967 0.20264,0.454921 0.271,0.734864 0.13346,0.533859 0.20019,1.090499 0.2002,1.669922 -1e-5,1.29883 -0.21974,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.1963,0.90332 -2.27051,0.90332 -0.60222,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.3711,-0.192057 -0.67546,-0.473632 -0.91309,-0.844726 -0.17253,-0.263671 -0.3068,-0.624185 -0.40283,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97265,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70069,0.500488 0.20182,2e-6 0.37678,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10497,-0.782874 0.10498,-1.430664 -10e-6,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16114,-0.327142 -0.40284,-0.490716 -0.7251,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.71289,0.500488 -0.14649,0.333664 -0.21973,0.951339 -0.21973,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3848" />
|
||||
id="path3848"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -3111,18 +3660,21 @@
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 372.07407,59.285714 0,-8.571429"
|
||||
id="path3306" />
|
||||
id="path3306"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text3308">
|
||||
<path
|
||||
d="m 369.25668,48.233543 -3.62304,0 0,-1.635742 3.62304,-4.30664 1.7334,0 0,4.399414 0.89844,0 0,1.542968 -0.89844,0 0,1.337891 -1.7334,0 z m 0,-1.542968 0,-2.250977 -1.91406,2.250977 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3851" />
|
||||
id="path3851"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 372.5184,45.963036 c 0,-1.360673 0.24496,-2.31282 0.73487,-2.856446 0.4899,-0.543613 1.23616,-0.815422 2.23876,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56152,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.271,0.734864 0.13345,0.533859 0.20019,1.090499 0.20019,1.669922 0,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60221,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.37109,-0.192057 -0.67545,-0.473632 -0.91308,-0.844726 -0.17253,-0.263671 -0.30681,-0.624185 -0.40283,-1.081543 -0.096,-0.457354 -0.14405,-0.962725 -0.14405,-1.516113 z m 1.97266,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70068,0.500488 0.20182,2e-6 0.37679,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16113,-0.327142 -0.40283,-0.490716 -0.72509,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.7129,0.500488 -0.14648,0.333664 -0.21972,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3853" />
|
||||
id="path3853"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -3132,18 +3684,21 @@
|
||||
<path
|
||||
id="path3314"
|
||||
d="m 372.07407,59.285714 0,-8.571429"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text3316">
|
||||
<path
|
||||
d="m 366.64438,42.413231 4.72168,0 0,1.586914 -3.19824,0 -0.1709,1.074219 c 0.22135,-0.104162 0.44026,-0.182287 0.65674,-0.234375 0.21646,-0.05208 0.43049,-0.07812 0.64209,-0.07813 0.71614,5e-6 1.29719,0.216476 1.74316,0.649414 0.44596,0.432946 0.66894,0.978193 0.66895,1.635742 -10e-6,0.462242 -0.11476,0.906577 -0.34424,1.333008 -0.2295,0.426433 -0.55502,0.751953 -0.97657,0.976562 -0.42155,0.22461 -0.9611,0.336914 -1.61865,0.336914 -0.47201,0 -0.87647,-0.04476 -1.21338,-0.134277 -0.33691,-0.08952 -0.62337,-0.222982 -0.85937,-0.400391 -0.23601,-0.177408 -0.42725,-0.378417 -0.57373,-0.603027 -0.14649,-0.224608 -0.26856,-0.504556 -0.36621,-0.839844 l 2.01172,-0.219726 c 0.0488,0.322267 0.16275,0.567221 0.34179,0.734863 0.17904,0.167644 0.39225,0.251466 0.63965,0.251465 0.27669,10e-7 0.50537,-0.104979 0.68604,-0.314942 0.18066,-0.209959 0.27099,-0.523272 0.27099,-0.939941 0,-0.42643 -0.0911,-0.738929 -0.27344,-0.9375 -0.18229,-0.198564 -0.4248,-0.297848 -0.72753,-0.297852 -0.19206,4e-6 -0.37761,0.04721 -0.55665,0.141602 -0.13346,0.06836 -0.27995,0.192061 -0.43945,0.371094 l -1.69433,-0.244141 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3856" />
|
||||
id="path3856"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 372.5184,45.963036 c 0,-1.360673 0.24496,-2.31282 0.73487,-2.856446 0.4899,-0.543613 1.23616,-0.815422 2.23876,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56152,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.271,0.734864 0.13345,0.533859 0.20019,1.090499 0.20019,1.669922 0,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60221,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.37109,-0.192057 -0.67545,-0.473632 -0.91308,-0.844726 -0.17253,-0.263671 -0.30681,-0.624185 -0.40283,-1.081543 -0.096,-0.457354 -0.14405,-0.962725 -0.14405,-1.516113 z m 1.97266,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70068,0.500488 0.20182,2e-6 0.37679,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16113,-0.327142 -0.40283,-0.490716 -0.72509,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.7129,0.500488 -0.14648,0.333664 -0.21972,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3858" />
|
||||
id="path3858"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -3153,7 +3708,8 @@
|
||||
<path
|
||||
id="path6992-4"
|
||||
d="m 1036.6779,58.30913 0,-8.57142"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(1002.459,-83.494924)"
|
||||
@ -3162,22 +3718,26 @@
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 6.5622945,59.285714 0,-8.571429"
|
||||
id="path4116-9" />
|
||||
id="path4116-9"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text4118-4">
|
||||
<path
|
||||
d="m 2.851357,49.571434 -5.9667969,0 c 0.068359,-0.589192 0.2758784,-1.143391 0.6225586,-1.662598 0.3466785,-0.519203 0.9969057,-1.131996 1.9506836,-1.838379 0.58267887,-0.432938 0.95539985,-0.761714 1.11816406,-0.986328 0.1627563,-0.224604 0.24413642,-0.43782 0.24414062,-0.639648 -4.2e-6,-0.218094 -0.0805705,-0.404454 -0.24169922,-0.559082 -0.1611366,-0.154617 -0.36377312,-0.231928 -0.60791015,-0.231934 -0.25390935,6e-6 -0.46142867,0.07976 -0.6225586,0.239258 -0.16113537,0.159511 -0.26937094,0.441086 -0.32470703,0.844727 L -2.9689555,44.576317 c 0.078124,-0.55989 0.2213535,-0.996902 0.4296875,-1.311035 0.2083323,-0.314121 0.5021145,-0.555006 0.8813476,-0.722657 0.3792297,-0.167636 0.90413153,-0.251457 1.57470707,-0.251464 0.6998658,7e-6 1.24429883,0.07976 1.63330083,0.239257 0.388992,0.159512 0.6949813,0.404467 0.9179687,0.734864 0.2229757,0.330409 0.3344665,0.700689 0.3344727,1.11084 -6.2e-6,0.436202 -0.127773,0.852868 -0.3833008,1.25 -0.2555394,0.397138 -0.7202199,0.833336 -1.394043,1.308593 -0.40039462,0.276695 -0.66813524,0.47038 -0.80322265,0.581055 -0.13509461,0.110679 -0.29378586,0.255536 -0.47607422,0.43457 l 3.10546877,0 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3794-8" />
|
||||
id="path3794-8"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="M 9.4675679,44.024559 7.4900289,44.2687 C 7.4379414,43.992013 7.3508647,43.7967 7.2287984,43.682762 7.1067243,43.568836 6.956171,43.51187 6.7771382,43.511864 c -0.3222687,6e-6 -0.5729195,0.162766 -0.7519531,0.488281 -0.1302109,0.23438 -0.2262395,0.735682 -0.2880859,1.503906 0.2376275,-0.240881 0.4817679,-0.419103 0.7324218,-0.534668 0.2506477,-0.115555 0.5403609,-0.173335 0.8691407,-0.17334 0.6380161,5e-6 1.1775664,0.22787 1.6186523,0.683594 0.4410746,0.455733 0.6616148,1.033532 0.6616211,1.733399 -6.3e-6,0.472007 -0.1114971,0.903321 -0.3344726,1.293945 -0.2229876,0.390626 -0.5322321,0.686035 -0.9277344,0.88623 -0.3955125,0.200196 -0.8911175,0.300293 -1.4868164,0.300293 -0.7161487,0 -1.2906924,-0.12207 -1.7236328,-0.366211 C 4.7133347,49.083153 4.3674692,48.693342 4.1086812,48.15786 3.8498916,47.62238 3.7204972,46.913559 3.7204976,46.031395 c -4e-7,-1.292313 0.2718092,-2.238764 0.8154297,-2.839356 0.543618,-0.600578 1.297198,-0.900871 2.2607422,-0.900878 0.5696574,7e-6 1.0196895,0.06593 1.3500976,0.197753 0.3303985,0.131843 0.6046495,0.324714 0.8227539,0.578614 0.2180931,0.253912 0.3841086,0.572922 0.4980469,0.957031 z m -3.6621094,3.188477 c -2.5e-6,0.387371 0.097654,0.690919 0.2929688,0.910644 0.1953095,0.219728 0.4345671,0.329591 0.7177734,0.32959 0.2604129,10e-7 0.4785117,-0.09928 0.6542969,-0.297852 0.1757769,-0.198566 0.2636674,-0.494789 0.2636719,-0.888671 -4.5e-6,-0.403644 -0.09115,-0.71126 -0.2734375,-0.922852 -0.1822957,-0.211585 -0.4085324,-0.317379 -0.678711,-0.317383 -0.2766959,4e-6 -0.5086292,0.102543 -0.6958007,0.307617 -0.1871771,0.205081 -0.2807643,0.49805 -0.2807618,0.878907 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3796-8" />
|
||||
id="path3796-8"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 10.390419,45.963036 c 0,-1.360673 0.244954,-2.31282 0.734864,-2.856446 0.489907,-0.543613 1.236163,-0.815422 2.238769,-0.815429 0.481767,7e-6 0.877275,0.05941 1.186524,0.178222 0.30924,0.118822 0.561518,0.273445 0.756836,0.463867 0.195307,0.190437 0.349115,0.390632 0.461425,0.600586 0.112299,0.209967 0.202631,0.454921 0.270997,0.734864 0.133457,0.533859 0.200189,1.090499 0.200195,1.669922 -6e-6,1.29883 -0.219733,2.24935 -0.65918,2.851562 -0.439458,0.602214 -1.196293,0.90332 -2.270508,0.90332 -0.602216,0 -1.088869,-0.09603 -1.459961,-0.288086 -0.371095,-0.192057 -0.675457,-0.473632 -0.913086,-0.844726 -0.172526,-0.263671 -0.306804,-0.624185 -0.402832,-1.081543 -0.09603,-0.457354 -0.144043,-0.962725 -0.144043,-1.516113 z m 1.972657,0.0049 c -3e-6,0.911461 0.08056,1.534019 0.241699,1.867676 0.16113,0.33366 0.394691,0.50049 0.700684,0.500488 0.201819,2e-6 0.376786,-0.0708 0.524902,-0.212402 0.148108,-0.1416 0.257157,-0.365395 0.327148,-0.671387 0.06998,-0.305987 0.104977,-0.782874 0.104981,-1.430664 -4e-6,-0.950516 -0.08057,-1.58935 -0.241699,-1.916504 -0.161137,-0.327142 -0.402836,-0.490716 -0.725098,-0.490722 -0.328779,6e-6 -0.566409,0.166835 -0.712891,0.500488 -0.146487,0.333664 -0.219729,0.951339 -0.219726,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3798-2" />
|
||||
id="path3798-2"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -3187,22 +3747,26 @@
|
||||
<path
|
||||
id="path4220-5"
|
||||
d="m -27.437706,59.285714 0,-8.571429"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text4222-5">
|
||||
<path
|
||||
d="m -31.148643,49.571434 -5.966797,0 c 0.06836,-0.589192 0.275878,-1.143391 0.622558,-1.662598 0.346679,-0.519203 0.996906,-1.131996 1.950684,-1.838379 0.582679,-0.432938 0.9554,-0.761714 1.118164,-0.986328 0.162756,-0.224604 0.244136,-0.43782 0.244141,-0.639648 -5e-6,-0.218094 -0.08057,-0.404454 -0.2417,-0.559082 -0.161136,-0.154617 -0.363773,-0.231928 -0.60791,-0.231934 -0.253909,6e-6 -0.461429,0.07976 -0.622558,0.239258 -0.161136,0.159511 -0.269371,0.441086 -0.324707,0.844727 l -1.992188,-0.161133 c 0.07813,-0.55989 0.221354,-0.996902 0.429688,-1.311035 0.208332,-0.314121 0.502114,-0.555006 0.881347,-0.722657 0.37923,-0.167636 0.904132,-0.251457 1.574707,-0.251464 0.699866,7e-6 1.244299,0.07976 1.633301,0.239257 0.388992,0.159512 0.694981,0.404467 0.917969,0.734864 0.222975,0.330409 0.334466,0.700689 0.334472,1.11084 -6e-6,0.436202 -0.127773,0.852868 -0.3833,1.25 -0.25554,0.397138 -0.72022,0.833336 -1.394043,1.308593 -0.400395,0.276695 -0.668136,0.47038 -0.803223,0.581055 -0.135095,0.110679 -0.293786,0.255536 -0.476074,0.43457 l 3.105469,0 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3801-1" />
|
||||
id="path3801-1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -29.483604,42.413231 4.721679,0 0,1.586914 -3.198242,0 -0.170898,1.074219 c 0.221351,-0.104162 0.440264,-0.182287 0.656738,-0.234375 0.216468,-0.05208 0.430498,-0.07812 0.64209,-0.07813 0.716141,5e-6 1.297195,0.216476 1.743164,0.649414 0.445957,0.432946 0.668939,0.978193 0.668945,1.635742 -6e-6,0.462242 -0.114752,0.906577 -0.344238,1.333008 -0.229498,0.426433 -0.555019,0.751953 -0.976563,0.976562 -0.421554,0.22461 -0.961104,0.336914 -1.618652,0.336914 -0.472008,0 -0.876467,-0.04476 -1.213379,-0.134277 -0.336916,-0.08952 -0.623374,-0.222982 -0.859375,-0.400391 -0.236004,-0.177408 -0.427247,-0.378417 -0.57373,-0.603027 -0.146485,-0.224608 -0.268555,-0.504556 -0.366211,-0.839844 l 2.011718,-0.219726 c 0.04883,0.322267 0.162758,0.567221 0.341797,0.734863 0.179034,0.167644 0.39225,0.251466 0.639649,0.251465 0.276689,10e-7 0.505367,-0.104979 0.686035,-0.314942 0.18066,-0.209959 0.270992,-0.523272 0.270996,-0.939941 -4e-6,-0.42643 -0.09115,-0.738929 -0.273437,-0.9375 -0.182296,-0.198564 -0.424809,-0.297848 -0.72754,-0.297852 -0.19206,4e-6 -0.377607,0.04721 -0.55664,0.141602 -0.133466,0.06836 -0.279951,0.192061 -0.439453,0.371094 l -1.694336,-0.244141 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3803-7" />
|
||||
id="path3803-7"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -23.609581,45.963036 c 0,-1.360673 0.244954,-2.31282 0.734863,-2.856446 0.489908,-0.543613 1.236163,-0.815422 2.23877,-0.815429 0.481767,7e-6 0.877274,0.05941 1.186523,0.178222 0.30924,0.118822 0.561519,0.273445 0.756836,0.463867 0.195307,0.190437 0.349116,0.390632 0.461426,0.600586 0.112299,0.209967 0.202631,0.454921 0.270996,0.734864 0.133457,0.533859 0.200189,1.090499 0.200195,1.669922 -6e-6,1.29883 -0.219732,2.24935 -0.659179,2.851562 -0.439459,0.602214 -1.196294,0.90332 -2.270508,0.90332 -0.602216,0 -1.08887,-0.09603 -1.459961,-0.288086 -0.371095,-0.192057 -0.675457,-0.473632 -0.913086,-0.844726 -0.172527,-0.263671 -0.306804,-0.624185 -0.402832,-1.081543 -0.09603,-0.457354 -0.144043,-0.962725 -0.144043,-1.516113 z m 1.972656,0.0049 c -2e-6,0.911461 0.08056,1.534019 0.241699,1.867676 0.161131,0.33366 0.394691,0.50049 0.700684,0.500488 0.201819,2e-6 0.376787,-0.0708 0.524902,-0.212402 0.148108,-0.1416 0.257158,-0.365395 0.327149,-0.671387 0.06998,-0.305987 0.104976,-0.782874 0.10498,-1.430664 -4e-6,-0.950516 -0.08057,-1.58935 -0.241699,-1.916504 -0.161137,-0.327142 -0.402836,-0.490716 -0.725098,-0.490722 -0.328779,6e-6 -0.566409,0.166835 -0.71289,0.500488 -0.146487,0.333664 -0.219729,0.951339 -0.219727,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3805-1" />
|
||||
id="path3805-1"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -3212,22 +3776,26 @@
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -61.437706,59.285714 0,-8.571429"
|
||||
id="path4228-5" />
|
||||
id="path4228-5"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text4230-2">
|
||||
<path
|
||||
d="m -65.148643,49.571434 -5.966797,0 c 0.06836,-0.589192 0.275878,-1.143391 0.622558,-1.662598 0.346679,-0.519203 0.996906,-1.131996 1.950684,-1.838379 0.582679,-0.432938 0.9554,-0.761714 1.118164,-0.986328 0.162756,-0.224604 0.244136,-0.43782 0.244141,-0.639648 -5e-6,-0.218094 -0.08057,-0.404454 -0.2417,-0.559082 -0.161136,-0.154617 -0.363773,-0.231928 -0.60791,-0.231934 -0.253909,6e-6 -0.461429,0.07976 -0.622558,0.239258 -0.161136,0.159511 -0.269371,0.441086 -0.324707,0.844727 l -1.992188,-0.161133 c 0.07813,-0.55989 0.221354,-0.996902 0.429688,-1.311035 0.208332,-0.314121 0.502114,-0.555006 0.881347,-0.722657 0.37923,-0.167636 0.904132,-0.251457 1.574707,-0.251464 0.699866,7e-6 1.244299,0.07976 1.633301,0.239257 0.388992,0.159512 0.694981,0.404467 0.917969,0.734864 0.222975,0.330409 0.334466,0.700689 0.334472,1.11084 -6e-6,0.436202 -0.127773,0.852868 -0.3833,1.25 -0.25554,0.397138 -0.72022,0.833336 -1.394043,1.308593 -0.400395,0.276695 -0.668136,0.47038 -0.803223,0.581055 -0.135095,0.110679 -0.293786,0.255536 -0.476074,0.43457 l 3.105469,0 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3809-7" />
|
||||
id="path3809-7"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -60.8713,48.233543 -3.623047,0 0,-1.635742 3.623047,-4.30664 1.733399,0 0,4.399414 0.898437,0 0,1.542968 -0.898437,0 0,1.337891 -1.733399,0 z m 0,-1.542968 0,-2.250977 -1.914062,2.250977 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3811-6" />
|
||||
id="path3811-6"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -57.609581,45.963036 c 0,-1.360673 0.244954,-2.31282 0.734863,-2.856446 0.489908,-0.543613 1.236163,-0.815422 2.23877,-0.815429 0.481767,7e-6 0.877274,0.05941 1.186523,0.178222 0.30924,0.118822 0.561519,0.273445 0.756836,0.463867 0.195307,0.190437 0.349116,0.390632 0.461426,0.600586 0.112299,0.209967 0.202631,0.454921 0.270996,0.734864 0.133457,0.533859 0.200189,1.090499 0.200195,1.669922 -6e-6,1.29883 -0.219732,2.24935 -0.659179,2.851562 -0.439459,0.602214 -1.196294,0.90332 -2.270508,0.90332 -0.602216,0 -1.08887,-0.09603 -1.459961,-0.288086 -0.371095,-0.192057 -0.675457,-0.473632 -0.913086,-0.844726 -0.172527,-0.263671 -0.306804,-0.624185 -0.402832,-1.081543 -0.09603,-0.457354 -0.144043,-0.962725 -0.144043,-1.516113 z m 1.972656,0.0049 c -2e-6,0.911461 0.08056,1.534019 0.241699,1.867676 0.161131,0.33366 0.394691,0.50049 0.700684,0.500488 0.201819,2e-6 0.376787,-0.0708 0.524902,-0.212402 0.148108,-0.1416 0.257158,-0.365395 0.327149,-0.671387 0.06998,-0.305987 0.104976,-0.782874 0.10498,-1.430664 -4e-6,-0.950516 -0.08057,-1.58935 -0.241699,-1.916504 -0.161137,-0.327142 -0.402836,-0.490716 -0.725098,-0.490722 -0.328779,6e-6 -0.566409,0.166835 -0.71289,0.500488 -0.146487,0.333664 -0.219729,0.951339 -0.219727,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3813-1" />
|
||||
id="path3813-1"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -3237,22 +3805,26 @@
|
||||
<path
|
||||
id="path4236-2"
|
||||
d="m -85.437706,59.285714 0,-8.571429"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text4238-3">
|
||||
<path
|
||||
d="m -89.148643,49.571434 -5.966797,0 c 0.06836,-0.589192 0.275878,-1.143391 0.622558,-1.662598 0.346679,-0.519203 0.996906,-1.131996 1.950684,-1.838379 0.582679,-0.432938 0.9554,-0.761714 1.118164,-0.986328 0.162756,-0.224604 0.244136,-0.43782 0.244141,-0.639648 -5e-6,-0.218094 -0.08057,-0.404454 -0.2417,-0.559082 -0.161136,-0.154617 -0.363773,-0.231928 -0.60791,-0.231934 -0.253909,6e-6 -0.461429,0.07976 -0.622558,0.239258 -0.161136,0.159511 -0.269371,0.441086 -0.324707,0.844727 l -1.992188,-0.161133 c 0.07813,-0.55989 0.221354,-0.996902 0.429688,-1.311035 0.208332,-0.314121 0.502114,-0.555006 0.881347,-0.722657 0.37923,-0.167636 0.904132,-0.251457 1.574707,-0.251464 0.699866,7e-6 1.244299,0.07976 1.633301,0.239257 0.388992,0.159512 0.694981,0.404467 0.917969,0.734864 0.222975,0.330409 0.334466,0.700689 0.334472,1.11084 -6e-6,0.436202 -0.127773,0.852868 -0.3833,1.25 -0.25554,0.397138 -0.72022,0.833336 -1.394043,1.308593 -0.400395,0.276695 -0.668136,0.47038 -0.803223,0.581055 -0.135095,0.110679 -0.293786,0.255536 -0.476074,0.43457 l 3.105469,0 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3816-2" />
|
||||
id="path3816-2"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -86.360558,44.483543 -1.879882,-0.336914 c 0.156249,-0.598952 0.456542,-1.057936 0.900879,-1.376953 0.444334,-0.319003 1.073402,-0.478508 1.887207,-0.478515 0.93424,7e-6 1.609695,0.17416 2.026367,0.522461 0.416661,0.348313 0.624994,0.786138 0.625,1.313476 -6e-6,0.30925 -0.08464,0.589198 -0.253906,0.839844 -0.169277,0.250655 -0.42481,0.470382 -0.766602,0.65918 0.276687,0.06836 0.488276,0.148115 0.634766,0.239257 0.237624,0.146488 0.422357,0.339359 0.554199,0.578614 0.13183,0.23926 0.197747,0.524905 0.197754,0.856933 -7e-6,0.416669 -0.109056,0.816245 -0.327149,1.198731 -0.218104,0.382487 -0.532232,0.677083 -0.942383,0.883789 -0.41016,0.206705 -0.948897,0.310058 -1.61621,0.310058 -0.651045,0 -1.164553,-0.0765 -1.540528,-0.229492 -0.375978,-0.152994 -0.685222,-0.37679 -0.927734,-0.671387 -0.242514,-0.294595 -0.428874,-0.664874 -0.559082,-1.110839 l 1.987304,-0.263672 c 0.07812,0.400392 0.199379,0.677898 0.36377,0.832519 0.164385,0.154624 0.373532,0.231935 0.627441,0.231934 0.266924,10e-7 0.489092,-0.09766 0.666504,-0.292969 0.177405,-0.195311 0.266109,-0.455727 0.266114,-0.78125 -5e-6,-0.332029 -0.08545,-0.58919 -0.256348,-0.771484 -0.170902,-0.182289 -0.402836,-0.273435 -0.695801,-0.273438 -0.156253,3e-6 -0.371097,0.03907 -0.644531,0.117188 l 0.102539,-1.420899 c 0.110674,0.01628 0.196937,0.02442 0.258789,0.02441 0.260413,5e-6 0.477698,-0.083 0.651855,-0.249023 0.17415,-0.166011 0.261227,-0.362951 0.261231,-0.59082 -4e-6,-0.218094 -0.06511,-0.392247 -0.195313,-0.522461 -0.130212,-0.130203 -0.309248,-0.195307 -0.537109,-0.195313 -0.234378,6e-6 -0.424807,0.07081 -0.571289,0.212402 -0.146487,0.141608 -0.245771,0.389817 -0.297852,0.744629 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3818-2" />
|
||||
id="path3818-2"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -81.609581,45.963036 c 0,-1.360673 0.244954,-2.31282 0.734863,-2.856446 0.489908,-0.543613 1.236163,-0.815422 2.23877,-0.815429 0.481767,7e-6 0.877274,0.05941 1.186523,0.178222 0.30924,0.118822 0.561519,0.273445 0.756836,0.463867 0.195307,0.190437 0.349116,0.390632 0.461426,0.600586 0.112299,0.209967 0.202631,0.454921 0.270996,0.734864 0.133457,0.533859 0.200189,1.090499 0.200195,1.669922 -6e-6,1.29883 -0.219732,2.24935 -0.659179,2.851562 -0.439459,0.602214 -1.196294,0.90332 -2.270508,0.90332 -0.602216,0 -1.08887,-0.09603 -1.459961,-0.288086 -0.371095,-0.192057 -0.675457,-0.473632 -0.913086,-0.844726 -0.172527,-0.263671 -0.306804,-0.624185 -0.402832,-1.081543 -0.09603,-0.457354 -0.144043,-0.962725 -0.144043,-1.516113 z m 1.972656,0.0049 c -2e-6,0.911461 0.08056,1.534019 0.241699,1.867676 0.161131,0.33366 0.394691,0.50049 0.700684,0.500488 0.201819,2e-6 0.376787,-0.0708 0.524902,-0.212402 0.148108,-0.1416 0.257158,-0.365395 0.327149,-0.671387 0.06998,-0.305987 0.104976,-0.782874 0.10498,-1.430664 -4e-6,-0.950516 -0.08057,-1.58935 -0.241699,-1.916504 -0.161137,-0.327142 -0.402836,-0.490716 -0.725098,-0.490722 -0.328779,6e-6 -0.566409,0.166835 -0.71289,0.500488 -0.146487,0.333664 -0.219729,0.951339 -0.219727,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3820-1" />
|
||||
id="path3820-1"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -3262,22 +3834,26 @@
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -111.43771,59.285714 0,-8.571429"
|
||||
id="path4244-8" />
|
||||
id="path4244-8"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text4246-5">
|
||||
<path
|
||||
d="m -115.14864,49.571434 -5.9668,0 c 0.0684,-0.589192 0.27588,-1.143391 0.62256,-1.662598 0.34668,-0.519203 0.9969,-1.131996 1.95068,-1.838379 0.58268,-0.432938 0.9554,-0.761714 1.11817,-0.986328 0.16275,-0.224604 0.24413,-0.43782 0.24414,-0.639648 -1e-5,-0.218094 -0.0806,-0.404454 -0.2417,-0.559082 -0.16114,-0.154617 -0.36378,-0.231928 -0.60791,-0.231934 -0.25391,6e-6 -0.46143,0.07976 -0.62256,0.239258 -0.16114,0.159511 -0.26937,0.441086 -0.32471,0.844727 l -1.99219,-0.161133 c 0.0781,-0.55989 0.22136,-0.996902 0.42969,-1.311035 0.20833,-0.314121 0.50212,-0.555006 0.88135,-0.722657 0.37923,-0.167636 0.90413,-0.251457 1.57471,-0.251464 0.69986,7e-6 1.2443,0.07976 1.6333,0.239257 0.38899,0.159512 0.69498,0.404467 0.91797,0.734864 0.22297,0.330409 0.33446,0.700689 0.33447,1.11084 -1e-5,0.436202 -0.12777,0.852868 -0.3833,1.25 -0.25554,0.397138 -0.72022,0.833336 -1.39405,1.308593 -0.40039,0.276695 -0.66813,0.47038 -0.80322,0.581055 -0.13509,0.110679 -0.29378,0.255536 -0.47607,0.43457 l 3.10547,0 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3823-7" />
|
||||
id="path3823-7"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -108.46896,49.571434 -5.96679,0 c 0.0684,-0.589192 0.27588,-1.143391 0.62256,-1.662598 0.34667,-0.519203 0.9969,-1.131996 1.95068,-1.838379 0.58268,-0.432938 0.9554,-0.761714 1.11816,-0.986328 0.16276,-0.224604 0.24414,-0.43782 0.24414,-0.639648 0,-0.218094 -0.0806,-0.404454 -0.2417,-0.559082 -0.16113,-0.154617 -0.36377,-0.231928 -0.60791,-0.231934 -0.2539,6e-6 -0.46142,0.07976 -0.62255,0.239258 -0.16114,0.159511 -0.26937,0.441086 -0.32471,0.844727 l -1.99219,-0.161133 c 0.0781,-0.55989 0.22136,-0.996902 0.42969,-1.311035 0.20833,-0.314121 0.50211,-0.555006 0.88135,-0.722657 0.37923,-0.167636 0.90413,-0.251457 1.5747,-0.251464 0.69987,7e-6 1.2443,0.07976 1.6333,0.239257 0.389,0.159512 0.69499,0.404467 0.91797,0.734864 0.22298,0.330409 0.33447,0.700689 0.33448,1.11084 -1e-5,0.436202 -0.12778,0.852868 -0.3833,1.25 -0.25554,0.397138 -0.72022,0.833336 -1.39405,1.308593 -0.40039,0.276695 -0.66813,0.47038 -0.80322,0.581055 -0.1351,0.110679 -0.29379,0.255536 -0.47607,0.43457 l 3.10546,0 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3825-6" />
|
||||
id="path3825-6"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -107.60958,45.963036 c 0,-1.360673 0.24495,-2.31282 0.73486,-2.856446 0.48991,-0.543613 1.23617,-0.815422 2.23877,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56151,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.27099,0.734864 0.13346,0.533859 0.20019,1.090499 0.2002,1.669922 -1e-5,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60222,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.3711,-0.192057 -0.67546,-0.473632 -0.91309,-0.844726 -0.17252,-0.263671 -0.3068,-0.624185 -0.40283,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97266,0.0049 c -1e-5,0.911461 0.0806,1.534019 0.24169,1.867676 0.16113,0.33366 0.3947,0.50049 0.70069,0.500488 0.20182,2e-6 0.37678,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16114,-0.327142 -0.40284,-0.490716 -0.7251,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.71289,0.500488 -0.14649,0.333664 -0.21973,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3827-1" />
|
||||
id="path3827-1"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -3287,22 +3863,26 @@
|
||||
<path
|
||||
id="path4252-9"
|
||||
d="m -135.4377,59.285714 0,-8.571429"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text4254-2">
|
||||
<path
|
||||
d="m -139.14864,49.571434 -5.96679,0 c 0.0684,-0.589192 0.27588,-1.143391 0.62256,-1.662598 0.34667,-0.519203 0.9969,-1.131996 1.95068,-1.838379 0.58268,-0.432938 0.9554,-0.761714 1.11816,-0.986328 0.16276,-0.224604 0.24414,-0.43782 0.24414,-0.639648 0,-0.218094 -0.0806,-0.404454 -0.2417,-0.559082 -0.16113,-0.154617 -0.36377,-0.231928 -0.60791,-0.231934 -0.2539,6e-6 -0.46142,0.07976 -0.62255,0.239258 -0.16114,0.159511 -0.26937,0.441086 -0.32471,0.844727 l -1.99219,-0.161133 c 0.0781,-0.55989 0.22136,-0.996902 0.42969,-1.311035 0.20833,-0.314121 0.50211,-0.555006 0.88135,-0.722657 0.37923,-0.167636 0.90413,-0.251457 1.5747,-0.251464 0.69987,7e-6 1.2443,0.07976 1.6333,0.239257 0.389,0.159512 0.69499,0.404467 0.91797,0.734864 0.22298,0.330409 0.33447,0.700689 0.33448,1.11084 -1e-5,0.436202 -0.12778,0.852868 -0.3833,1.25 -0.25554,0.397138 -0.72022,0.833336 -1.39405,1.308593 -0.40039,0.276695 -0.66813,0.47038 -0.80322,0.581055 -0.1351,0.110679 -0.29379,0.255536 -0.47607,0.43457 l 3.10546,0 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3830-7" />
|
||||
id="path3830-7"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -133.78242,42.291161 0,7.280273 -2.01172,0 0,-4.770508 c -0.32553,0.247401 -0.64047,0.447596 -0.94483,0.600586 -0.30436,0.152999 -0.68603,0.299483 -1.14502,0.439453 l 0,-1.630859 c 0.67708,-0.218093 1.2028,-0.480137 1.57715,-0.786133 0.37435,-0.305983 0.66732,-0.683587 0.87891,-1.132812 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3832-9" />
|
||||
id="path3832-9"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -131.60957,45.963036 c 0,-1.360673 0.24495,-2.31282 0.73486,-2.856446 0.48991,-0.543613 1.23616,-0.815422 2.23877,-0.815429 0.48177,7e-6 0.87727,0.05941 1.18652,0.178222 0.30924,0.118822 0.56152,0.273445 0.75684,0.463867 0.19531,0.190437 0.34911,0.390632 0.46142,0.600586 0.1123,0.209967 0.20264,0.454921 0.271,0.734864 0.13346,0.533859 0.20019,1.090499 0.2002,1.669922 -10e-6,1.29883 -0.21974,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.1963,0.90332 -2.27051,0.90332 -0.60222,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.3711,-0.192057 -0.67546,-0.473632 -0.91309,-0.844726 -0.17253,-0.263671 -0.3068,-0.624185 -0.40283,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97265,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70069,0.500488 0.20182,2e-6 0.37678,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10497,-0.782874 0.10498,-1.430664 -1e-5,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16114,-0.327142 -0.40284,-0.490716 -0.7251,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.71289,0.500488 -0.14649,0.333664 -0.21973,0.951339 -0.21973,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3834-5" />
|
||||
id="path3834-5"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -3312,22 +3892,26 @@
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -159.4377,59.285714 0,-8.571429"
|
||||
id="path4260-3" />
|
||||
id="path4260-3"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text4262-1">
|
||||
<path
|
||||
d="m -163.14864,49.571434 -5.96679,0 c 0.0684,-0.589192 0.27588,-1.143391 0.62256,-1.662598 0.34667,-0.519203 0.9969,-1.131996 1.95068,-1.838379 0.58268,-0.432938 0.9554,-0.761714 1.11816,-0.986328 0.16276,-0.224604 0.24414,-0.43782 0.24414,-0.639648 0,-0.218094 -0.0806,-0.404454 -0.2417,-0.559082 -0.16113,-0.154617 -0.36377,-0.231928 -0.60791,-0.231934 -0.2539,6e-6 -0.46142,0.07976 -0.62255,0.239258 -0.16114,0.159511 -0.26937,0.441086 -0.32471,0.844727 l -1.99219,-0.161133 c 0.0781,-0.55989 0.22136,-0.996902 0.42969,-1.311035 0.20833,-0.314121 0.50211,-0.555006 0.88135,-0.722657 0.37923,-0.167636 0.90413,-0.251457 1.5747,-0.251464 0.69987,7e-6 1.2443,0.07976 1.6333,0.239257 0.389,0.159512 0.69499,0.404467 0.91797,0.734864 0.22298,0.330409 0.33447,0.700689 0.33448,1.11084 -1e-5,0.436202 -0.12778,0.852868 -0.3833,1.25 -0.25554,0.397138 -0.72022,0.833336 -1.39405,1.308593 -0.40039,0.276695 -0.66813,0.47038 -0.80322,0.581055 -0.1351,0.110679 -0.29379,0.255536 -0.47607,0.43457 l 3.10546,0 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3837-2" />
|
||||
id="path3837-2"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -162.28926,45.963036 c 0,-1.360673 0.24495,-2.31282 0.73486,-2.856446 0.48991,-0.543613 1.23617,-0.815422 2.23877,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56151,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.27099,0.734864 0.13346,0.533859 0.20019,1.090499 0.2002,1.669922 -1e-5,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60222,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.3711,-0.192057 -0.67546,-0.473632 -0.91309,-0.844726 -0.17252,-0.263671 -0.3068,-0.624185 -0.40283,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97266,0.0049 c -1e-5,0.911461 0.0806,1.534019 0.24169,1.867676 0.16113,0.33366 0.3947,0.50049 0.70069,0.500488 0.20182,2e-6 0.37678,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16114,-0.327142 -0.40284,-0.490716 -0.7251,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.71289,0.500488 -0.14648,0.333664 -0.21973,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3839-3" />
|
||||
id="path3839-3"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -155.60957,45.963036 c 0,-1.360673 0.24495,-2.31282 0.73486,-2.856446 0.48991,-0.543613 1.23616,-0.815422 2.23877,-0.815429 0.48177,7e-6 0.87727,0.05941 1.18652,0.178222 0.30924,0.118822 0.56152,0.273445 0.75684,0.463867 0.19531,0.190437 0.34911,0.390632 0.46142,0.600586 0.1123,0.209967 0.20264,0.454921 0.271,0.734864 0.13346,0.533859 0.20019,1.090499 0.2002,1.669922 -1e-5,1.29883 -0.21974,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.1963,0.90332 -2.27051,0.90332 -0.60222,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.3711,-0.192057 -0.67546,-0.473632 -0.91309,-0.844726 -0.17253,-0.263671 -0.3068,-0.624185 -0.40283,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97265,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70069,0.500488 0.20182,2e-6 0.37678,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10497,-0.782874 0.10498,-1.430664 -10e-6,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16114,-0.327142 -0.40284,-0.490716 -0.7251,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.71289,0.500488 -0.14649,0.333664 -0.21973,0.951339 -0.21973,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3841-3" />
|
||||
id="path3841-3"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -3337,22 +3921,26 @@
|
||||
<path
|
||||
id="path4268-1"
|
||||
d="m -181.16182,59.285714 0,-8.571429"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text4270-1">
|
||||
<path
|
||||
d="m -186.46211,42.291161 0,7.280273 -2.01172,0 0,-4.770508 c -0.32552,0.247401 -0.64047,0.447596 -0.94483,0.600586 -0.30436,0.152999 -0.68603,0.299483 -1.14501,0.439453 l 0,-1.630859 c 0.67708,-0.218093 1.20279,-0.480137 1.57714,-0.786133 0.37435,-0.305983 0.66732,-0.683587 0.87891,-1.132812 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3844-3" />
|
||||
id="path3844-3"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -184.20137,47.964989 1.97754,-0.249024 c 0.0521,0.276695 0.13997,0.472007 0.26367,0.585938 0.1237,0.113933 0.27506,0.170899 0.4541,0.170898 0.31901,1e-6 0.56803,-0.161131 0.74707,-0.483398 0.13021,-0.237629 0.22786,-0.740558 0.29297,-1.508789 -0.23763,0.244143 -0.48177,0.423179 -0.73242,0.537109 -0.25065,0.113935 -0.54037,0.170901 -0.86914,0.170899 -0.64128,2e-6 -1.18246,-0.227862 -1.62354,-0.683594 -0.44108,-0.455726 -0.66162,-1.031897 -0.66162,-1.728516 0,-0.475255 0.11231,-0.908197 0.33692,-1.298828 0.22461,-0.390618 0.53385,-0.686028 0.92773,-0.88623 0.39388,-0.200189 0.88867,-0.300286 1.48438,-0.300293 0.71614,7e-6 1.29068,0.122891 1.72363,0.368652 0.43294,0.245775 0.7788,0.636399 1.0376,1.171875 0.25878,0.535487 0.38817,1.24268 0.38818,2.121582 -1e-5,1.29232 -0.27182,2.238771 -0.81543,2.839355 -0.54362,0.600587 -1.2972,0.900879 -2.26074,0.900879 -0.56967,0 -1.01888,-0.06592 -1.34766,-0.197754 -0.32878,-0.131835 -0.60221,-0.324706 -0.82031,-0.578613 -0.2181,-0.253905 -0.38574,-0.571288 -0.50293,-0.952148 z m 3.66211,-3.19336 c -10e-6,-0.387364 -0.0977,-0.690912 -0.29297,-0.910644 -0.19532,-0.219721 -0.43295,-0.329584 -0.71289,-0.32959 -0.26368,6e-6 -0.48259,0.09929 -0.65674,0.297852 -0.17415,0.198573 -0.26123,0.496424 -0.26123,0.893554 0,0.400395 0.0903,0.706385 0.271,0.917969 0.18066,0.211592 0.40608,0.317386 0.67627,0.317383 0.27994,3e-6 0.51269,-0.102536 0.69824,-0.307617 0.18554,-0.205074 0.27831,-0.498043 0.27832,-0.878907 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3846-8" />
|
||||
id="path3846-8"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -177.60957,45.963036 c 0,-1.360673 0.24495,-2.31282 0.73486,-2.856446 0.48991,-0.543613 1.23616,-0.815422 2.23877,-0.815429 0.48177,7e-6 0.87727,0.05941 1.18652,0.178222 0.30924,0.118822 0.56152,0.273445 0.75684,0.463867 0.19531,0.190437 0.34911,0.390632 0.46142,0.600586 0.1123,0.209967 0.20264,0.454921 0.271,0.734864 0.13346,0.533859 0.20019,1.090499 0.2002,1.669922 -1e-5,1.29883 -0.21974,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.1963,0.90332 -2.27051,0.90332 -0.60222,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.3711,-0.192057 -0.67546,-0.473632 -0.91309,-0.844726 -0.17253,-0.263671 -0.3068,-0.624185 -0.40283,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97265,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70069,0.500488 0.20182,2e-6 0.37678,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10497,-0.782874 0.10498,-1.430664 -10e-6,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16114,-0.327142 -0.40284,-0.490716 -0.7251,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.71289,0.500488 -0.14649,0.333664 -0.21973,0.951339 -0.21973,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3848-7" />
|
||||
id="path3848-7"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -3362,7 +3950,8 @@
|
||||
<path
|
||||
id="path6994-7"
|
||||
d="m -456.77631,58.288825 0,-8.57142"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(-997.57233,-83.494924)"
|
||||
@ -3371,22 +3960,26 @@
|
||||
<path
|
||||
id="path3916-9"
|
||||
d="m 568.45258,59.285714 0,-8.571429"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text3918-3">
|
||||
<path
|
||||
d="m 563.15228,42.291161 0,7.280273 -2.01172,0 0,-4.770508 c -0.32552,0.247401 -0.64046,0.447596 -0.94482,0.600586 -0.30436,0.152999 -0.68604,0.299483 -1.14502,0.439453 l 0,-1.630859 c 0.67708,-0.218093 1.2028,-0.480137 1.57715,-0.786133 0.37434,-0.305983 0.66731,-0.683587 0.8789,-1.132812 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3681-1" />
|
||||
id="path3681-1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 565.32513,45.963036 c 0,-1.360673 0.24496,-2.31282 0.73487,-2.856446 0.4899,-0.543613 1.23616,-0.815422 2.23877,-0.815429 0.48176,7e-6 0.87727,0.05941 1.18652,0.178222 0.30924,0.118822 0.56152,0.273445 0.75684,0.463867 0.1953,0.190437 0.34911,0.390632 0.46142,0.600586 0.1123,0.209967 0.20263,0.454921 0.271,0.734864 0.13346,0.533859 0.20019,1.090499 0.20019,1.669922 0,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43945,0.602214 -1.19629,0.90332 -2.2705,0.90332 -0.60222,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.3711,-0.192057 -0.67546,-0.473632 -0.91309,-0.844726 -0.17253,-0.263671 -0.3068,-0.624185 -0.40283,-1.081543 -0.096,-0.457354 -0.14405,-0.962725 -0.14405,-1.516113 z m 1.97266,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70068,0.500488 0.20182,2e-6 0.37679,-0.0708 0.52491,-0.212402 0.1481,-0.1416 0.25715,-0.365395 0.32714,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.24169,-1.916504 -0.16114,-0.327142 -0.40284,-0.490716 -0.7251,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.71289,0.500488 -0.14649,0.333664 -0.21973,0.951339 -0.21973,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3683-9" />
|
||||
id="path3683-9"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 572.00482,45.963036 c 0,-1.360673 0.24496,-2.31282 0.73487,-2.856446 0.4899,-0.543613 1.23616,-0.815422 2.23876,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56152,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.271,0.734864 0.13345,0.533859 0.20018,1.090499 0.20019,1.669922 -10e-6,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60221,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.37109,-0.192057 -0.67545,-0.473632 -0.91308,-0.844726 -0.17253,-0.263671 -0.30681,-0.624185 -0.40284,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97266,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70068,0.500488 0.20182,2e-6 0.37679,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16113,-0.327142 -0.40283,-0.490716 -0.72509,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.7129,0.500488 -0.14648,0.333664 -0.21972,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3685-8" />
|
||||
id="path3685-8"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -3396,22 +3989,26 @@
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 600.45258,59.285714 0,-8.571429"
|
||||
id="path3924-5" />
|
||||
id="path3924-5"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text3926-0">
|
||||
<path
|
||||
d="m 595.15228,42.291161 0,7.280273 -2.01172,0 0,-4.770508 c -0.32552,0.247401 -0.64046,0.447596 -0.94482,0.600586 -0.30436,0.152999 -0.68604,0.299483 -1.14502,0.439453 l 0,-1.630859 c 0.67708,-0.218093 1.2028,-0.480137 1.57715,-0.786133 0.37434,-0.305983 0.66731,-0.683587 0.8789,-1.132812 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3688-2" />
|
||||
id="path3688-2"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 601.83197,42.291161 0,7.280273 -2.01172,0 0,-4.770508 c -0.32552,0.247401 -0.64046,0.447596 -0.94482,0.600586 -0.30437,0.152999 -0.68604,0.299483 -1.14502,0.439453 l 0,-1.630859 c 0.67708,-0.218093 1.2028,-0.480137 1.57715,-0.786133 0.37434,-0.305983 0.66731,-0.683587 0.8789,-1.132812 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3690-8" />
|
||||
id="path3690-8"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 604.00482,45.963036 c 0,-1.360673 0.24496,-2.31282 0.73487,-2.856446 0.4899,-0.543613 1.23616,-0.815422 2.23876,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56152,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.271,0.734864 0.13345,0.533859 0.20018,1.090499 0.20019,1.669922 -10e-6,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60221,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.37109,-0.192057 -0.67545,-0.473632 -0.91308,-0.844726 -0.17253,-0.263671 -0.30681,-0.624185 -0.40284,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97266,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70068,0.500488 0.20182,2e-6 0.37679,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16113,-0.327142 -0.40283,-0.490716 -0.72509,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.7129,0.500488 -0.14648,0.333664 -0.21972,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3692-6" />
|
||||
id="path3692-6"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -3421,22 +4018,26 @@
|
||||
<path
|
||||
id="path3932-2"
|
||||
d="m 632.45258,59.285714 0,-8.571429"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text3934-4">
|
||||
<path
|
||||
d="m 627.15228,42.291161 0,7.280273 -2.01172,0 0,-4.770508 c -0.32552,0.247401 -0.64046,0.447596 -0.94482,0.600586 -0.30436,0.152999 -0.68604,0.299483 -1.14502,0.439453 l 0,-1.630859 c 0.67708,-0.218093 1.2028,-0.480137 1.57715,-0.786133 0.37434,-0.305983 0.66731,-0.683587 0.8789,-1.132812 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3695-8" />
|
||||
id="path3695-8"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 635.14545,49.571434 -5.9668,0 c 0.0684,-0.589192 0.27588,-1.143391 0.62256,-1.662598 0.34668,-0.519203 0.9969,-1.131996 1.95068,-1.838379 0.58268,-0.432938 0.9554,-0.761714 1.11817,-0.986328 0.16275,-0.224604 0.24413,-0.43782 0.24414,-0.639648 -10e-6,-0.218094 -0.0806,-0.404454 -0.2417,-0.559082 -0.16114,-0.154617 -0.36378,-0.231928 -0.60791,-0.231934 -0.25391,6e-6 -0.46143,0.07976 -0.62256,0.239258 -0.16114,0.159511 -0.26937,0.441086 -0.32471,0.844727 l -1.99219,-0.161133 c 0.0781,-0.55989 0.22136,-0.996902 0.42969,-1.311035 0.20833,-0.314121 0.50212,-0.555006 0.88135,-0.722657 0.37923,-0.167636 0.90413,-0.251457 1.57471,-0.251464 0.69986,7e-6 1.2443,0.07976 1.6333,0.239257 0.38899,0.159512 0.69498,0.404467 0.91797,0.734864 0.22297,0.330409 0.33446,0.700689 0.33447,1.11084 -10e-6,0.436202 -0.12777,0.852868 -0.3833,1.25 -0.25554,0.397138 -0.72022,0.833336 -1.39405,1.308593 -0.40039,0.276695 -0.66813,0.47038 -0.80322,0.581055 -0.13509,0.110679 -0.29378,0.255536 -0.47607,0.43457 l 3.10547,0 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3697-6" />
|
||||
id="path3697-6"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 636.00482,45.963036 c 0,-1.360673 0.24496,-2.31282 0.73487,-2.856446 0.4899,-0.543613 1.23616,-0.815422 2.23876,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56152,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.271,0.734864 0.13345,0.533859 0.20018,1.090499 0.20019,1.669922 -10e-6,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60221,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.37109,-0.192057 -0.67545,-0.473632 -0.91308,-0.844726 -0.17253,-0.263671 -0.30681,-0.624185 -0.40284,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97266,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70068,0.500488 0.20182,2e-6 0.37679,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16113,-0.327142 -0.40283,-0.490716 -0.72509,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.7129,0.500488 -0.14648,0.333664 -0.21972,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3699-5" />
|
||||
id="path3699-5"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -3446,22 +4047,26 @@
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 664.45258,59.285714 0,-8.571429"
|
||||
id="path3940-9" />
|
||||
id="path3940-9"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text3942-0">
|
||||
<path
|
||||
d="m 659.15228,42.291161 0,7.280273 -2.01172,0 0,-4.770508 c -0.32552,0.247401 -0.64046,0.447596 -0.94482,0.600586 -0.30436,0.152999 -0.68604,0.299483 -1.14502,0.439453 l 0,-1.630859 c 0.67708,-0.218093 1.2028,-0.480137 1.57715,-0.786133 0.37434,-0.305983 0.66731,-0.683587 0.8789,-1.132812 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3702-0" />
|
||||
id="path3702-0"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 663.25385,44.483543 -1.87989,-0.336914 c 0.15625,-0.598952 0.45654,-1.057936 0.90088,-1.376953 0.44434,-0.319003 1.0734,-0.478508 1.88721,-0.478515 0.93424,7e-6 1.60969,0.17416 2.02637,0.522461 0.41666,0.348313 0.62499,0.786138 0.625,1.313476 -10e-6,0.30925 -0.0846,0.589198 -0.25391,0.839844 -0.16928,0.250655 -0.42481,0.470382 -0.7666,0.65918 0.27669,0.06836 0.48827,0.148115 0.63476,0.239257 0.23763,0.146488 0.42236,0.339359 0.5542,0.578614 0.13183,0.23926 0.19775,0.524905 0.19776,0.856933 -10e-6,0.416669 -0.10906,0.816245 -0.32715,1.198731 -0.21811,0.382487 -0.53223,0.677083 -0.94238,0.883789 -0.41017,0.206705 -0.9489,0.310058 -1.61622,0.310058 -0.65104,0 -1.16455,-0.0765 -1.54052,-0.229492 -0.37598,-0.152994 -0.68523,-0.37679 -0.92774,-0.671387 -0.24251,-0.294595 -0.42887,-0.664874 -0.55908,-1.110839 l 1.98731,-0.263672 c 0.0781,0.400392 0.19937,0.677898 0.36376,0.832519 0.16439,0.154624 0.37354,0.231935 0.62745,0.231934 0.26692,10e-7 0.48909,-0.09766 0.6665,-0.292969 0.1774,-0.195311 0.26611,-0.455727 0.26611,-0.78125 0,-0.332029 -0.0855,-0.58919 -0.25634,-0.771484 -0.17091,-0.182289 -0.40284,-0.273435 -0.69581,-0.273438 -0.15625,3e-6 -0.37109,0.03907 -0.64453,0.117188 l 0.10254,-1.420899 c 0.11068,0.01628 0.19694,0.02442 0.25879,0.02441 0.26042,5e-6 0.4777,-0.083 0.65186,-0.249023 0.17415,-0.166011 0.26122,-0.362951 0.26123,-0.59082 -10e-6,-0.218094 -0.0651,-0.392247 -0.19531,-0.522461 -0.13022,-0.130203 -0.30925,-0.195307 -0.53711,-0.195313 -0.23438,6e-6 -0.42481,0.07081 -0.57129,0.212402 -0.14649,0.141608 -0.24577,0.389817 -0.29785,0.744629 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3704-6" />
|
||||
id="path3704-6"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 668.00482,45.963036 c 0,-1.360673 0.24496,-2.31282 0.73487,-2.856446 0.4899,-0.543613 1.23616,-0.815422 2.23876,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56152,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.271,0.734864 0.13345,0.533859 0.20018,1.090499 0.20019,1.669922 -10e-6,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60221,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.37109,-0.192057 -0.67545,-0.473632 -0.91308,-0.844726 -0.17253,-0.263671 -0.30681,-0.624185 -0.40284,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97266,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70068,0.500488 0.20182,2e-6 0.37679,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16113,-0.327142 -0.40283,-0.490716 -0.72509,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.7129,0.500488 -0.14648,0.333664 -0.21972,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3706-1" />
|
||||
id="path3706-1"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -3471,22 +4076,26 @@
|
||||
<path
|
||||
id="path3948-8"
|
||||
d="m 696.45258,59.285714 0,-8.571429"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text3950-9">
|
||||
<path
|
||||
d="m 691.15228,42.291161 0,7.280273 -2.01172,0 0,-4.770508 c -0.32552,0.247401 -0.64046,0.447596 -0.94482,0.600586 -0.30436,0.152999 -0.68604,0.299483 -1.14502,0.439453 l 0,-1.630859 c 0.67708,-0.218093 1.2028,-0.480137 1.57715,-0.786133 0.37434,-0.305983 0.66731,-0.683587 0.8789,-1.132812 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3709-3" />
|
||||
id="path3709-3"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 696.7431,48.233543 -3.62304,0 0,-1.635742 3.62304,-4.30664 1.7334,0 0,4.399414 0.89844,0 0,1.542968 -0.89844,0 0,1.337891 -1.7334,0 z m 0,-1.542968 0,-2.250977 -1.91406,2.250977 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3711-4" />
|
||||
id="path3711-4"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 700.00482,45.963036 c 0,-1.360673 0.24496,-2.31282 0.73487,-2.856446 0.4899,-0.543613 1.23616,-0.815422 2.23876,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56152,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.271,0.734864 0.13345,0.533859 0.20018,1.090499 0.20019,1.669922 -10e-6,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60221,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.37109,-0.192057 -0.67545,-0.473632 -0.91308,-0.844726 -0.17253,-0.263671 -0.30681,-0.624185 -0.40284,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97266,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70068,0.500488 0.20182,2e-6 0.37679,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16113,-0.327142 -0.40283,-0.490716 -0.72509,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.7129,0.500488 -0.14648,0.333664 -0.21972,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3713-4" />
|
||||
id="path3713-4"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -3496,22 +4105,26 @@
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 722.45258,59.285714 0,-8.571429"
|
||||
id="path3956-0" />
|
||||
id="path3956-0"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text3958-6">
|
||||
<path
|
||||
d="m 717.15228,42.291161 0,7.280273 -2.01172,0 0,-4.770508 c -0.32552,0.247401 -0.64046,0.447596 -0.94482,0.600586 -0.30436,0.152999 -0.68604,0.299483 -1.14502,0.439453 l 0,-1.630859 c 0.67708,-0.218093 1.2028,-0.480137 1.57715,-0.786133 0.37434,-0.305983 0.66731,-0.683587 0.8789,-1.132812 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3716-6" />
|
||||
id="path3716-6"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 720.1308,42.413231 4.72168,0 0,1.586914 -3.19824,0 -0.1709,1.074219 c 0.22135,-0.104162 0.44026,-0.182287 0.65674,-0.234375 0.21646,-0.05208 0.43049,-0.07812 0.64209,-0.07813 0.71614,5e-6 1.29719,0.216476 1.74316,0.649414 0.44596,0.432946 0.66894,0.978193 0.66894,1.635742 0,0.462242 -0.11475,0.906577 -0.34423,1.333008 -0.2295,0.426433 -0.55502,0.751953 -0.97657,0.976562 -0.42155,0.22461 -0.9611,0.336914 -1.61865,0.336914 -0.47201,0 -0.87647,-0.04476 -1.21338,-0.134277 -0.33691,-0.08952 -0.62337,-0.222982 -0.85937,-0.400391 -0.23601,-0.177408 -0.42725,-0.378417 -0.57373,-0.603027 -0.14649,-0.224608 -0.26856,-0.504556 -0.36621,-0.839844 l 2.01172,-0.219726 c 0.0488,0.322267 0.16275,0.567221 0.34179,0.734863 0.17904,0.167644 0.39225,0.251466 0.63965,0.251465 0.27669,10e-7 0.50537,-0.104979 0.68604,-0.314942 0.18066,-0.209959 0.27099,-0.523272 0.27099,-0.939941 0,-0.42643 -0.0911,-0.738929 -0.27344,-0.9375 -0.18229,-0.198564 -0.4248,-0.297848 -0.72753,-0.297852 -0.19207,4e-6 -0.37761,0.04721 -0.55665,0.141602 -0.13346,0.06836 -0.27995,0.192061 -0.43945,0.371094 l -1.69433,-0.244141 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3718-1" />
|
||||
id="path3718-1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 726.00482,45.963036 c 0,-1.360673 0.24496,-2.31282 0.73487,-2.856446 0.4899,-0.543613 1.23616,-0.815422 2.23876,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56152,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.271,0.734864 0.13345,0.533859 0.20018,1.090499 0.20019,1.669922 -10e-6,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60221,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.37109,-0.192057 -0.67545,-0.473632 -0.91308,-0.844726 -0.17253,-0.263671 -0.30681,-0.624185 -0.40284,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97266,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70068,0.500488 0.20182,2e-6 0.37679,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16113,-0.327142 -0.40283,-0.490716 -0.72509,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.7129,0.500488 -0.14648,0.333664 -0.21972,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3720-8" />
|
||||
id="path3720-8"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -3521,22 +4134,26 @@
|
||||
<path
|
||||
id="path3964-9"
|
||||
d="m 750.45258,59.285714 0,-8.571429"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text3966-6">
|
||||
<path
|
||||
d="m 745.15228,42.291161 0,7.280273 -2.01172,0 0,-4.770508 c -0.32552,0.247401 -0.64046,0.447596 -0.94482,0.600586 -0.30436,0.152999 -0.68604,0.299483 -1.14502,0.439453 l 0,-1.630859 c 0.67708,-0.218093 1.2028,-0.480137 1.57715,-0.786133 0.37434,-0.305983 0.66731,-0.683587 0.8789,-1.132812 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3723-3" />
|
||||
id="path3723-3"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 753.08197,44.024559 -1.97754,0.244141 c -0.0521,-0.276687 -0.13916,-0.472 -0.26123,-0.585938 -0.12207,-0.113926 -0.27263,-0.170892 -0.45166,-0.170898 -0.32227,6e-6 -0.57292,0.162766 -0.75195,0.488281 -0.13021,0.23438 -0.22624,0.735682 -0.28809,1.503906 0.23763,-0.240881 0.48177,-0.419103 0.73242,-0.534668 0.25065,-0.115555 0.54036,-0.173335 0.86914,-0.17334 0.63802,5e-6 1.17757,0.22787 1.61866,0.683594 0.44107,0.455733 0.66161,1.033532 0.66162,1.733399 -10e-6,0.472007 -0.1115,0.903321 -0.33448,1.293945 -0.22298,0.390626 -0.53223,0.686035 -0.92773,0.88623 -0.39551,0.200196 -0.89112,0.300293 -1.48682,0.300293 -0.71614,0 -1.29069,-0.12207 -1.72363,-0.366211 -0.43294,-0.24414 -0.77881,-0.633951 -1.0376,-1.169433 -0.25879,-0.53548 -0.38818,-1.244301 -0.38818,-2.126465 0,-1.292313 0.27181,-2.238764 0.81543,-2.839356 0.54362,-0.600578 1.2972,-0.900871 2.26074,-0.900878 0.56966,7e-6 1.01969,0.06593 1.3501,0.197753 0.3304,0.131843 0.60465,0.324714 0.82275,0.578614 0.2181,0.253912 0.38411,0.572922 0.49805,0.957031 z m -3.66211,3.188477 c 0,0.387371 0.0977,0.690919 0.29297,0.910644 0.19531,0.219728 0.43457,0.329591 0.71777,0.32959 0.26042,10e-7 0.47851,-0.09928 0.6543,-0.297852 0.17578,-0.198566 0.26367,-0.494789 0.26367,-0.888671 0,-0.403644 -0.0911,-0.71126 -0.27344,-0.922852 -0.18229,-0.211585 -0.40853,-0.317379 -0.67871,-0.317383 -0.27669,4e-6 -0.50863,0.102543 -0.6958,0.307617 -0.18717,0.205081 -0.28076,0.49805 -0.28076,0.878907 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3725-7" />
|
||||
id="path3725-7"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 754.00482,45.963036 c 0,-1.360673 0.24496,-2.31282 0.73487,-2.856446 0.4899,-0.543613 1.23616,-0.815422 2.23876,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56152,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.271,0.734864 0.13345,0.533859 0.20018,1.090499 0.20019,1.669922 -10e-6,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60221,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.37109,-0.192057 -0.67545,-0.473632 -0.91308,-0.844726 -0.17253,-0.263671 -0.30681,-0.624185 -0.40284,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97266,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70068,0.500488 0.20182,2e-6 0.37679,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16113,-0.327142 -0.40283,-0.490716 -0.72509,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.7129,0.500488 -0.14648,0.333664 -0.21972,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3727-8" />
|
||||
id="path3727-8"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -3546,22 +4163,26 @@
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#fff8f8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 774.45258,59.285714 0,-8.571429"
|
||||
id="path3972-2" />
|
||||
id="path3972-2"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||
id="text3974-9">
|
||||
<path
|
||||
d="m 769.15228,42.291161 0,7.280273 -2.01172,0 0,-4.770508 c -0.32552,0.247401 -0.64046,0.447596 -0.94482,0.600586 -0.30436,0.152999 -0.68604,0.299483 -1.14502,0.439453 l 0,-1.630859 c 0.67708,-0.218093 1.2028,-0.480137 1.57715,-0.786133 0.37434,-0.305983 0.66731,-0.683587 0.8789,-1.132812 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3730-1" />
|
||||
id="path3730-1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 771.35931,42.413231 5.80567,0 0,1.342773 c -0.50457,0.455735 -0.92611,0.948898 -1.26465,1.479493 -0.41016,0.644534 -0.73405,1.362307 -0.97168,2.15332 -0.18881,0.615236 -0.31576,1.342774 -0.38086,2.182617 l -1.98242,0 c 0.15625,-1.168619 0.40201,-2.148435 0.7373,-2.939453 0.33529,-0.791012 0.86589,-1.637365 1.5918,-2.539063 l -3.53516,0 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3732-3" />
|
||||
id="path3732-3"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 778.00482,45.963036 c 0,-1.360673 0.24496,-2.31282 0.73487,-2.856446 0.4899,-0.543613 1.23616,-0.815422 2.23876,-0.815429 0.48177,7e-6 0.87728,0.05941 1.18653,0.178222 0.30924,0.118822 0.56152,0.273445 0.75683,0.463867 0.19531,0.190437 0.34912,0.390632 0.46143,0.600586 0.1123,0.209967 0.20263,0.454921 0.271,0.734864 0.13345,0.533859 0.20018,1.090499 0.20019,1.669922 -10e-6,1.29883 -0.21973,2.24935 -0.65918,2.851562 -0.43946,0.602214 -1.19629,0.90332 -2.27051,0.90332 -0.60221,0 -1.08887,-0.09603 -1.45996,-0.288086 -0.37109,-0.192057 -0.67545,-0.473632 -0.91308,-0.844726 -0.17253,-0.263671 -0.30681,-0.624185 -0.40284,-1.081543 -0.096,-0.457354 -0.14404,-0.962725 -0.14404,-1.516113 z m 1.97266,0.0049 c 0,0.911461 0.0806,1.534019 0.2417,1.867676 0.16113,0.33366 0.39469,0.50049 0.70068,0.500488 0.20182,2e-6 0.37679,-0.0708 0.5249,-0.212402 0.14811,-0.1416 0.25716,-0.365395 0.32715,-0.671387 0.07,-0.305987 0.10498,-0.782874 0.10498,-1.430664 0,-0.950516 -0.0806,-1.58935 -0.2417,-1.916504 -0.16113,-0.327142 -0.40283,-0.490716 -0.72509,-0.490722 -0.32878,6e-6 -0.56641,0.166835 -0.7129,0.500488 -0.14648,0.333664 -0.21972,0.951339 -0.21972,1.853027 z"
|
||||
style="font-size:10px;fill:#ffffff;fill-opacity:1;font-family:Arial Black;-inkscape-font-specification:Arial Black"
|
||||
id="path3734-5" />
|
||||
id="path3734-5"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
@ -3570,7 +4191,8 @@
|
||||
inkscape:groupmode="layer"
|
||||
id="layer6"
|
||||
inkscape:label="Bottom area"
|
||||
style="display:inline">
|
||||
style="display:none"
|
||||
sodipodi:insensitive="true">
|
||||
<g
|
||||
style="display:inline"
|
||||
transform="translate(395.4171,-213.55826)"
|
||||
@ -3589,11 +4211,13 @@
|
||||
<path
|
||||
style="fill:none;stroke:#1c5313;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 408.10162,299.09061 0,13.8896"
|
||||
id="path10183" />
|
||||
id="path10183"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#1c5313;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 401.40937,306.03541 13.51079,0"
|
||||
id="path10185" />
|
||||
id="path10185"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<g
|
||||
id="g10197">
|
||||
@ -3630,19 +4254,22 @@
|
||||
id="gcstelemetry-Connected"
|
||||
d="m -109.55949,412.40842 0,9.28125 -31.40625,0 0,4.90625 0,0.0937 0,4.90625 31.40625,0 0,9.28125 14.250003,-14.25 -14.250003,-14.21875 z"
|
||||
style="fill:#1c870b;fill-opacity:1;stroke:#113b05;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
inkscape:label="#path7548" />
|
||||
inkscape:label="#path7548"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:label="#path7548"
|
||||
style="fill:#ff251b;fill-opacity:1;stroke:#6f100c;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m -109.81202,372.75993 0,9.28125 -10.62948,0 6.29058,7.3236 -15.93279,-7.3236 -11.13456,0 0,4.90625 0,0.0937 0,4.90625 10.88202,0 -4.27027,-6.81853 13.4074,6.81853 11.3871,0 0,9.28125 14.249996,-14.25 -14.249996,-14.21875 0,5e-5 z"
|
||||
id="gcstelemetry-HandshakeReq"
|
||||
sodipodi:nodetypes="ccccccccccccccccc" />
|
||||
sodipodi:nodetypes="ccccccccccccccccc"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:label="#path7548"
|
||||
style="fill:#525652;fill-opacity:1;stroke:#262020;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 530.35185,620.93513 0,9.28125 -31.40625,0 0,4.90625 0,0.0937 0,4.90625 31.40625,0 0,9.28125 14.25,-14.25 -14.25,-14.21875 z"
|
||||
id="gcstelemetry-Disconnected"
|
||||
sodipodi:nodetypes="cccccccccc" />
|
||||
sodipodi:nodetypes="cccccccccc"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:2.6691606;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
id="linkrate"
|
||||
@ -3675,7 +4302,7 @@
|
||||
inkscape:groupmode="layer"
|
||||
id="layer9"
|
||||
inkscape:label="Radar"
|
||||
style="display:inline"
|
||||
style="display:none"
|
||||
transform="translate(230.4171,-2.5493479)"
|
||||
sodipodi:insensitive="true">
|
||||
<g
|
||||
@ -3695,11 +4322,13 @@
|
||||
<path
|
||||
id="path5029"
|
||||
d="m 408.10162,299.09061 0,13.8896"
|
||||
style="fill:none;stroke:#1c5313;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
style="fill:none;stroke:#1c5313;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path5031"
|
||||
d="m 401.40937,306.03541 13.51079,0"
|
||||
style="fill:none;stroke:#1c5313;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
style="fill:none;stroke:#1c5313;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<g
|
||||
id="nextwaypoint"
|
||||
@ -3718,18 +4347,20 @@
|
||||
<path
|
||||
style="fill:none;stroke:#ff251b;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 408.10162,299.09061 0,13.8896"
|
||||
id="path5044" />
|
||||
id="path5044"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ff251b;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 401.40937,306.03541 13.51079,0"
|
||||
id="path5046" />
|
||||
id="path5046"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer5"
|
||||
inkscape:label="Speed"
|
||||
style="display:inline"
|
||||
style="display:none"
|
||||
transform="translate(230.4171,-2.5493479)"
|
||||
sodipodi:insensitive="true">
|
||||
<text
|
||||
@ -3752,127 +4383,158 @@
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.926844,77.693138 -17.403477,0"
|
||||
id="path4035" />
|
||||
id="path4035"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path4037"
|
||||
d="m -54.476965,95.92649 -8.529662,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.476965,114.15979 -8.529662,0"
|
||||
id="path4039" />
|
||||
id="path4039"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path4041"
|
||||
d="m -54.476965,132.39316 -8.529662,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.476965,150.62647 -8.529662,0"
|
||||
id="path4043" />
|
||||
id="path4043"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path4058"
|
||||
d="m -54.926844,168.8598 -17.403477,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.476965,187.09311 -8.529662,0"
|
||||
id="path4061" />
|
||||
id="path4061"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path4063"
|
||||
d="m -54.476965,205.32648 -8.529662,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.476965,223.55979 -8.529662,0"
|
||||
id="path4065" />
|
||||
id="path4065"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path4067"
|
||||
d="m -54.476965,241.79313 -8.529662,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.926844,260.02648 -17.403477,0"
|
||||
id="path4071" />
|
||||
id="path4071"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path4073"
|
||||
d="m -54.476965,278.25979 -8.529662,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.476965,296.49313 -8.529662,0"
|
||||
id="path4075" />
|
||||
id="path4075"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path4077"
|
||||
d="m -54.476965,314.72647 -8.529662,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.476965,332.95981 -8.529662,0"
|
||||
id="path4079" />
|
||||
id="path4079"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path4083"
|
||||
d="m -54.926844,351.19313 -17.403477,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.476965,369.42647 -8.529662,0"
|
||||
id="path4085" />
|
||||
id="path4085"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path4087"
|
||||
d="m -54.476965,387.65981 -8.529662,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.476965,405.89316 -8.529662,0"
|
||||
id="path4089" />
|
||||
id="path4089"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path4091"
|
||||
d="m -54.476965,424.12646 -8.529662,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.926844,442.35983 -17.403477,0"
|
||||
id="path4095" />
|
||||
id="path4095"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path4097"
|
||||
d="m -54.476965,460.59313 -8.529662,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.476965,478.82647 -8.529662,0"
|
||||
id="path4099" />
|
||||
id="path4099"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path4101"
|
||||
d="m -54.476965,497.05982 -8.529662,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.476965,515.29316 -8.529662,0"
|
||||
id="path4103" />
|
||||
id="path4103"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path4107"
|
||||
d="m -54.926844,533.52649 -17.403477,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.476965,551.75981 -8.529662,0"
|
||||
id="path4109" />
|
||||
id="path4109"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path4111"
|
||||
d="m -54.476965,569.99314 -8.529662,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.476965,588.22648 -8.529662,0"
|
||||
id="path4113" />
|
||||
id="path4113"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path4115"
|
||||
d="m -54.476965,606.45981 -8.529662,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.926844,624.69315 -17.403477,0"
|
||||
id="path4119" />
|
||||
id="path4119"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@ -3885,127 +4547,158 @@
|
||||
<path
|
||||
id="path5648"
|
||||
d="m -54.926844,77.693138 -17.403477,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.476965,95.92649 -8.529662,0"
|
||||
id="path5650" />
|
||||
id="path5650"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path5652"
|
||||
d="m -54.476965,114.15979 -8.529662,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.476965,132.39316 -8.529662,0"
|
||||
id="path5654" />
|
||||
id="path5654"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path5656"
|
||||
d="m -54.476965,150.62647 -8.529662,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.926844,168.8598 -17.403477,0"
|
||||
id="path5658" />
|
||||
id="path5658"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path5660"
|
||||
d="m -54.476965,187.09311 -8.529662,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.476965,205.32648 -8.529662,0"
|
||||
id="path5662" />
|
||||
id="path5662"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path5664"
|
||||
d="m -54.476965,223.55979 -8.529662,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.476965,241.79313 -8.529662,0"
|
||||
id="path5666" />
|
||||
id="path5666"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path5668"
|
||||
d="m -54.926844,260.02648 -17.403477,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.476965,278.25979 -8.529662,0"
|
||||
id="path5670" />
|
||||
id="path5670"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path5672"
|
||||
d="m -54.476965,296.49313 -8.529662,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.476965,314.72647 -8.529662,0"
|
||||
id="path5674" />
|
||||
id="path5674"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path5676"
|
||||
d="m -54.476965,332.95981 -8.529662,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.926844,351.19313 -17.403477,0"
|
||||
id="path5678" />
|
||||
id="path5678"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path5680"
|
||||
d="m -54.476965,369.42647 -8.529662,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.476965,387.65981 -8.529662,0"
|
||||
id="path5682" />
|
||||
id="path5682"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path5684"
|
||||
d="m -54.476965,405.89316 -8.529662,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.476965,424.12646 -8.529662,0"
|
||||
id="path5686" />
|
||||
id="path5686"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path5688"
|
||||
d="m -54.926844,442.35983 -17.403477,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.476965,460.59313 -8.529662,0"
|
||||
id="path5690" />
|
||||
id="path5690"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path5692"
|
||||
d="m -54.476965,478.82647 -8.529662,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.476965,497.05982 -8.529662,0"
|
||||
id="path5694" />
|
||||
id="path5694"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path5696"
|
||||
d="m -54.476965,515.29316 -8.529662,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.926844,533.52649 -17.403477,0"
|
||||
id="path5698" />
|
||||
id="path5698"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path5700"
|
||||
d="m -54.476965,551.75981 -8.529662,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.476965,569.99314 -8.529662,0"
|
||||
id="path5702" />
|
||||
id="path5702"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path5704"
|
||||
d="m -54.476965,588.22648 -8.529662,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.10024118;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -54.476965,606.45981 -8.529662,0"
|
||||
id="path5706" />
|
||||
id="path5706"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path5708"
|
||||
d="m -54.926844,624.69315 -17.403477,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
style="fill:none;stroke:#ffffff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
@ -4020,6 +4713,7 @@
|
||||
style="fill:#453e3e;fill-opacity:1;stroke:#000000;stroke-width:4.08031273;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m -115.54603,-47.690059 c -2.50791,0 -4.54785,1.99743 -4.54785,4.50534 l 0,807.009359 c 0,2.5079 2.03994,4.54785 4.54785,4.54785 l 807.00936,0 c 2.5079,0 4.50534,-2.03995 4.50534,-4.54785 l 0,-807.009359 c 0,-2.50791 -1.99744,-4.50534 -4.50534,-4.50534 l -807.00936,0 z M 289.34,11.395534 c 150.15374,0 271.88009,59.618647 272.02085,133.162706 l 0.21252,48.57516 -0.38253,374.99409 C 556.30557,639.62843 436.47945,673.69951 289.34,673.69951 c -147.13944,0 -266.965544,-34.07108 -271.850832,-105.57202 l -0.212516,0 0,-374.99409 0.0425,-48.58122 C 17.459912,71.008115 139.18627,11.395534 289.34,11.395534 z"
|
||||
id="rect2816"
|
||||
sodipodi:nodetypes="cccccccccccccsccccc" />
|
||||
sodipodi:nodetypes="cccccccccccccsccccc"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 301 KiB After Width: | Height: | Size: 320 KiB |
@ -25,6 +25,13 @@
|
||||
WHEREAMI := $(dir $(lastword $(MAKEFILE_LIST)))
|
||||
TOP := $(realpath $(WHEREAMI)/../../)
|
||||
include $(TOP)/make/firmware-defs.mk
|
||||
include $(TOP)/make/boards/$(BOARD_NAME)/board-info.mk
|
||||
|
||||
# Target file name (without extension).
|
||||
TARGET := fw_$(BOARD_NAME)
|
||||
|
||||
# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.)
|
||||
OUTDIR := $(TOP)/build/$(TARGET)
|
||||
|
||||
# Set developer code and compile options
|
||||
# Set to YES for debugging
|
||||
@ -41,21 +48,6 @@ endif
|
||||
|
||||
FLASH_TOOL = OPENOCD
|
||||
|
||||
# MCU name, submodel and board
|
||||
# - MCU used for compiler-option (-mcpu)
|
||||
# - MODEL used for linker-script name (-T) and passed as define
|
||||
# - BOARD just passed as define (optional)
|
||||
MCU = cortex-m3
|
||||
CHIP = STM32F103CBT
|
||||
BOARD = STM32103CB_AHRS
|
||||
MODEL = MD
|
||||
|
||||
# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.)
|
||||
OUTDIR = $(TOP)/build/ahrs
|
||||
|
||||
# Target file name (without extension).
|
||||
TARGET = AHRS
|
||||
|
||||
# Paths
|
||||
AHRS = ./
|
||||
AHRSINC = $(AHRS)/inc
|
||||
@ -160,7 +152,7 @@ CPPSRCARM =
|
||||
# Even though the DOS/Win* filesystem matches both .s and .S the same,
|
||||
# it will preserve the spelling of the filenames, and gcc itself does
|
||||
# care about how the name is spelled on its command-line.
|
||||
ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL).S
|
||||
ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL)$(MODEL_SUFFIX).S
|
||||
|
||||
# List Assembler source files here which must be assembled in ARM-Mode..
|
||||
ASRCARM =
|
||||
@ -223,7 +215,6 @@ CDEFS = -DSTM32F10X_$(MODEL)
|
||||
CDEFS += -DUSE_STDPERIPH_DRIVER
|
||||
CDEFS += -DUSE_$(BOARD)
|
||||
CDEFS += -DIN_AHRS
|
||||
CDEFS += -DUSE_BOOTLOADER
|
||||
|
||||
# Place project-specific -D and/or -U options for
|
||||
# Assembler with preprocessor here.
|
||||
@ -299,21 +290,8 @@ LDFLAGS += -lc -lgcc
|
||||
LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_memory.ld
|
||||
LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_sections.ld
|
||||
|
||||
OOCD_LOADFILE+=$(OUTDIR)/$(TARGET).bin
|
||||
# Program
|
||||
OOCD_CL+=-c "flash write_image erase $(OOCD_LOADFILE) 0x08002000 bin"
|
||||
# Verify
|
||||
OOCD_CL+=-c "verify_image $(OOCD_LOADFILE) 0x08002000 bin"
|
||||
# reset target
|
||||
OOCD_CL+=-c "reset run"
|
||||
# terminate OOCD after programming
|
||||
OOCD_CL+=-c shutdown
|
||||
|
||||
|
||||
# Define programs and commands.
|
||||
REMOVE = $(REMOVE_CMD) -f
|
||||
###SHELL = sh
|
||||
###COPY = cp
|
||||
|
||||
# List of all source files.
|
||||
ALLSRC = $(ASRCARM) $(ASRC) $(SRCARM) $(SRC) $(CPPSRCARM) $(CPPSRC)
|
||||
@ -345,14 +323,6 @@ endif
|
||||
endif
|
||||
endif
|
||||
|
||||
# Program the device.
|
||||
ifeq ($(FLASH_TOOL),OPENOCD)
|
||||
# Program the device with Dominic Rath's OPENOCD in "batch-mode", needs cfg and "reset-script".
|
||||
program: $(OUTDIR)/$(TARGET).bin
|
||||
@echo ${quote}Programming with OPENOCD${quote}
|
||||
$(OOCD_EXE) $(OOCD_CL)
|
||||
endif
|
||||
|
||||
# Link: create ELF output file from object files.
|
||||
$(eval $(call LINK_TEMPLATE, $(OUTDIR)/$(TARGET).elf, $(ALLOBJ)))
|
||||
|
||||
@ -382,29 +352,33 @@ $(eval $(call PARTIAL_COMPILE_ARM_TEMPLATE, SRCARM))
|
||||
|
||||
$(OUTDIR)/$(TARGET).bin.o: $(OUTDIR)/$(TARGET).bin
|
||||
|
||||
.PHONY: elf lss sym hex bin bino
|
||||
$(eval $(call OPFW_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(BOARD_TYPE),$(BOARD_REVISION)))
|
||||
|
||||
# Add jtag targets (program and wipe)
|
||||
$(eval $(call JTAG_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(FW_BANK_BASE),$(FW_BANK_SIZE)))
|
||||
|
||||
.PHONY: elf lss sym hex bin bino opfw
|
||||
elf: $(OUTDIR)/$(TARGET).elf
|
||||
lss: $(OUTDIR)/$(TARGET).lss
|
||||
sym: $(OUTDIR)/$(TARGET).sym
|
||||
hex: $(OUTDIR)/$(TARGET).hex
|
||||
bin: $(OUTDIR)/$(TARGET).bin
|
||||
bino: $(OUTDIR)/$(TARGET).bin.o
|
||||
opfw: $(OUTDIR)/$(TARGET).opfw
|
||||
|
||||
# Display sizes of sections.
|
||||
$(eval $(call SIZE_TEMPLATE, $(OUTDIR)/$(TARGET).elf))
|
||||
.PHONY: 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
|
||||
install: $(OUTDIR)/$(TARGET).opfw
|
||||
ifneq ($(INSTALL_DIR),)
|
||||
@echo $(MSG_INSTALLING) $(call toprel, $<)
|
||||
$(V1) mkdir -p $(INSTALL_DIR)
|
||||
$(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).bin
|
||||
$(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).opfw
|
||||
else
|
||||
$(error INSTALL_DIR must be specified for $@)
|
||||
endif
|
||||
@ -445,4 +419,4 @@ else
|
||||
endif
|
||||
|
||||
# Listing of phony targets.
|
||||
.PHONY : all build clean clean_list program install
|
||||
.PHONY : all build clean clean_list install
|
||||
|
@ -33,6 +33,7 @@
|
||||
|
||||
/* OpenPilot Includes */
|
||||
#include "ahrs.h"
|
||||
#include <pios_board_info.h>
|
||||
#include "pios.h"
|
||||
#include "ahrs_timer.h"
|
||||
#include "ahrs_spi_comm.h"
|
||||
@ -1228,6 +1229,8 @@ void homelocation_callback(AhrsObjHandle obj)
|
||||
|
||||
void firmwareiapobj_callback(AhrsObjHandle obj)
|
||||
{
|
||||
const struct pios_board_info * bdinfo = &pios_board_info_blob;
|
||||
|
||||
FirmwareIAPObjData firmwareIAPObj;
|
||||
FirmwareIAPObjGet(&firmwareIAPObj);
|
||||
if(firmwareIAPObj.ArmReset==0)
|
||||
@ -1235,7 +1238,7 @@ void firmwareiapobj_callback(AhrsObjHandle obj)
|
||||
if(firmwareIAPObj.ArmReset==1)
|
||||
{
|
||||
|
||||
if((firmwareIAPObj.BoardType==BOARD_TYPE) || (firmwareIAPObj.BoardType==0xFF))
|
||||
if((firmwareIAPObj.BoardType==bdinfo->board_type) || (firmwareIAPObj.BoardType==0xFF))
|
||||
{
|
||||
|
||||
++reset_count;
|
||||
@ -1247,11 +1250,11 @@ void firmwareiapobj_callback(AhrsObjHandle obj)
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(firmwareIAPObj.BoardType==BOARD_TYPE && firmwareIAPObj.crc!=PIOS_BL_HELPER_CRC_Memory_Calc())
|
||||
else if(firmwareIAPObj.BoardType==bdinfo->board_type && firmwareIAPObj.crc!=PIOS_BL_HELPER_CRC_Memory_Calc())
|
||||
{
|
||||
PIOS_BL_HELPER_FLASH_Read_Description(firmwareIAPObj.Description,SIZE_OF_DESCRIPTION);
|
||||
PIOS_BL_HELPER_FLASH_Read_Description(firmwareIAPObj.Description,bdinfo->desc_size);
|
||||
firmwareIAPObj.crc=PIOS_BL_HELPER_CRC_Memory_Calc();
|
||||
firmwareIAPObj.BoardRevision=BOARD_REVISION;
|
||||
firmwareIAPObj.BoardRevision=bdinfo->board_rev;
|
||||
FirmwareIAPObjSet(&firmwareIAPObj);
|
||||
}
|
||||
}
|
||||
|
@ -54,7 +54,6 @@ static const struct pios_spi_cfg pios_spi_op_cfg = {
|
||||
.ahb_clk = RCC_AHBPeriph_DMA1,
|
||||
|
||||
.irq = {
|
||||
.handler = PIOS_SPI_op_irq_handler,
|
||||
.flags =
|
||||
(DMA1_FLAG_TC4 | DMA1_FLAG_TE4 | DMA1_FLAG_HT4 |
|
||||
DMA1_FLAG_GL4),
|
||||
@ -153,11 +152,10 @@ void PIOS_SPI_op_irq_handler(void)
|
||||
extern void PIOS_ADC_handler(void);
|
||||
void DMA1_Channel1_IRQHandler() __attribute__ ((alias("PIOS_ADC_handler")));
|
||||
// Remap the ADC DMA handler to this one
|
||||
const struct pios_adc_cfg pios_adc_cfg = {
|
||||
static const struct pios_adc_cfg pios_adc_cfg = {
|
||||
.dma = {
|
||||
.ahb_clk = RCC_AHBPeriph_DMA1,
|
||||
.irq = {
|
||||
.handler = PIOS_ADC_DMA_Handler,
|
||||
.flags = (DMA1_FLAG_TC1 | DMA1_FLAG_TE1 | DMA1_FLAG_HT1 | DMA1_FLAG_GL1),
|
||||
.init = {
|
||||
.NVIC_IRQChannel = DMA1_Channel1_IRQn,
|
||||
@ -205,17 +203,10 @@ void PIOS_ADC_handler() {
|
||||
/*
|
||||
* AUX USART
|
||||
*/
|
||||
void PIOS_USART_aux_irq_handler(void);
|
||||
void USART3_IRQHandler()
|
||||
__attribute__ ((alias("PIOS_USART_aux_irq_handler")));
|
||||
const struct pios_usart_cfg pios_usart_aux_cfg = {
|
||||
static const struct pios_usart_cfg pios_usart_aux_cfg = {
|
||||
.regs = USART3,
|
||||
.init = {
|
||||
#if defined (PIOS_USART_BAUDRATE)
|
||||
.USART_BaudRate = PIOS_USART_BAUDRATE,
|
||||
#else
|
||||
.USART_BaudRate = 57600,
|
||||
#endif
|
||||
.USART_BaudRate = 230400,
|
||||
.USART_WordLength = USART_WordLength_8b,
|
||||
.USART_Parity = USART_Parity_No,
|
||||
.USART_StopBits = USART_StopBits_1,
|
||||
@ -224,7 +215,6 @@ const struct pios_usart_cfg pios_usart_aux_cfg = {
|
||||
.USART_Mode = USART_Mode_Rx | USART_Mode_Tx,
|
||||
},
|
||||
.irq = {
|
||||
.handler = PIOS_USART_aux_irq_handler,
|
||||
.init = {
|
||||
.NVIC_IRQChannel = USART3_IRQn,
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_HIGH,
|
||||
@ -250,18 +240,15 @@ const struct pios_usart_cfg pios_usart_aux_cfg = {
|
||||
},
|
||||
};
|
||||
|
||||
static uint32_t pios_usart_aux_id;
|
||||
void PIOS_USART_aux_irq_handler(void)
|
||||
{
|
||||
PIOS_USART_IRQ_Handler(pios_usart_aux_id);
|
||||
}
|
||||
|
||||
#endif /* PIOS_INCLUDE_USART */
|
||||
|
||||
#if defined(PIOS_INCLUDE_COM)
|
||||
|
||||
#include <pios_com_priv.h>
|
||||
|
||||
#define PIOS_COM_AUX_TX_BUF_LEN 192
|
||||
static uint8_t pios_com_aux_tx_buffer[PIOS_COM_AUX_TX_BUF_LEN];
|
||||
|
||||
#endif /* PIOS_INCLUDE_COM */
|
||||
|
||||
#if defined(PIOS_INCLUDE_I2C)
|
||||
@ -279,7 +266,7 @@ void I2C1_EV_IRQHandler()
|
||||
void I2C1_ER_IRQHandler()
|
||||
__attribute__ ((alias("PIOS_I2C_main_adapter_er_irq_handler")));
|
||||
|
||||
const struct pios_i2c_adapter_cfg pios_i2c_main_adapter_cfg = {
|
||||
static const struct pios_i2c_adapter_cfg pios_i2c_main_adapter_cfg = {
|
||||
.regs = I2C1,
|
||||
.init = {
|
||||
.I2C_Mode = I2C_Mode_I2C,
|
||||
@ -307,7 +294,6 @@ const struct pios_i2c_adapter_cfg pios_i2c_main_adapter_cfg = {
|
||||
},
|
||||
},
|
||||
.event = {
|
||||
.handler = PIOS_I2C_main_adapter_ev_irq_handler,
|
||||
.flags = 0, /* FIXME: check this */
|
||||
.init = {
|
||||
.NVIC_IRQChannel = I2C1_EV_IRQn,
|
||||
@ -317,7 +303,6 @@ const struct pios_i2c_adapter_cfg pios_i2c_main_adapter_cfg = {
|
||||
},
|
||||
},
|
||||
.error = {
|
||||
.handler = PIOS_I2C_main_adapter_er_irq_handler,
|
||||
.flags = 0, /* FIXME: check this */
|
||||
.init = {
|
||||
.NVIC_IRQChannel = I2C1_ER_IRQn,
|
||||
@ -388,11 +373,16 @@ void PIOS_Board_Init(void) {
|
||||
/* Communication system */
|
||||
#if !defined(PIOS_ENABLE_DEBUG_PINS)
|
||||
#if defined(PIOS_INCLUDE_COM)
|
||||
if (PIOS_USART_Init(&pios_usart_aux_id, &pios_usart_aux_cfg)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
}
|
||||
if (PIOS_COM_Init(&pios_com_aux_id, &pios_usart_com_driver, pios_usart_aux_id)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
{
|
||||
uint32_t pios_usart_aux_id;
|
||||
if (PIOS_USART_Init(&pios_usart_aux_id, &pios_usart_aux_cfg)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
}
|
||||
if (PIOS_COM_Init(&pios_com_aux_id, &pios_usart_com_driver, pios_usart_aux_id,
|
||||
NULL, 0,
|
||||
pios_com_aux_tx_buffer, sizeof(pios_com_aux_tx_buffer))) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
}
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_COM */
|
||||
#endif
|
||||
|
@ -25,6 +25,13 @@
|
||||
WHEREAMI := $(dir $(lastword $(MAKEFILE_LIST)))
|
||||
TOP := $(realpath $(WHEREAMI)/../../../)
|
||||
include $(TOP)/make/firmware-defs.mk
|
||||
include $(TOP)/make/boards/$(BOARD_NAME)/board-info.mk
|
||||
|
||||
# Target file name (without extension).
|
||||
TARGET := bl_$(BOARD_NAME)
|
||||
|
||||
# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.)
|
||||
OUTDIR := $(TOP)/build/$(TARGET)
|
||||
|
||||
# Set developer code and compile options
|
||||
# Set to YES for debugging
|
||||
@ -41,23 +48,6 @@ endif
|
||||
|
||||
FLASH_TOOL = OPENOCD
|
||||
|
||||
# MCU name, submodel and board
|
||||
# - MCU used for compiler-option (-mcpu)
|
||||
# - MODEL used for linker-script name (-T) and passed as define
|
||||
# - BOARD just passed as define (optional)
|
||||
MCU = cortex-m3
|
||||
CHIP = STM32F103CBT
|
||||
BOARD = STM32103CB_AHRS
|
||||
MODEL = MD
|
||||
|
||||
|
||||
|
||||
# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.)
|
||||
OUTDIR = $(TOP)/build/bl_ahrs
|
||||
|
||||
# Target file name (without extension).
|
||||
TARGET = AHRS_BL
|
||||
|
||||
# Paths
|
||||
AHRS_BL = ./
|
||||
AHRS_BLINC = $(AHRS_BL)/inc
|
||||
@ -149,7 +139,7 @@ CPPSRCARM =
|
||||
# Even though the DOS/Win* filesystem matches both .s and .S the same,
|
||||
# it will preserve the spelling of the filenames, and gcc itself does
|
||||
# care about how the name is spelled on its command-line.
|
||||
ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL).S
|
||||
ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL)$(MODEL_SUFFIX).S
|
||||
|
||||
# List Assembler source files here which must be assembled in ARM-Mode..
|
||||
ASRCARM =
|
||||
@ -209,6 +199,15 @@ CDEFS = -DSTM32F10X_$(MODEL)
|
||||
CDEFS += -DUSE_STDPERIPH_DRIVER
|
||||
CDEFS += -DUSE_$(BOARD)
|
||||
|
||||
# Provide (only) the bootloader with board-specific defines
|
||||
BLONLY_CDEFS += -DBOARD_TYPE=$(BOARD_TYPE)
|
||||
BLONLY_CDEFS += -DBOARD_REVISION=$(BOARD_REVISION)
|
||||
BLONLY_CDEFS += -DHW_TYPE=$(HW_TYPE)
|
||||
BLONLY_CDEFS += -DBOOTLOADER_VERSION=$(BOOTLOADER_VERSION)
|
||||
BLONLY_CDEFS += -DFW_BANK_BASE=$(FW_BANK_BASE)
|
||||
BLONLY_CDEFS += -DFW_BANK_SIZE=$(FW_BANK_SIZE)
|
||||
BLONLY_CDEFS += -DFW_DESC_SIZE=$(FW_DESC_SIZE)
|
||||
|
||||
# Place project-specific -D and/or -U options for
|
||||
# Assembler with preprocessor here.
|
||||
#ADEFS = -DUSE_IRQ_ASM_WRAPPER
|
||||
@ -243,8 +242,9 @@ CFLAGS += -O$(OPT)
|
||||
ifeq ($(DEBUG),NO)
|
||||
CFLAGS += -fdata-sections -ffunction-sections
|
||||
endif
|
||||
CFLAGS += -mcpu=$(MCU) -mthumb
|
||||
CFLAGS += -mcpu=$(MCU)
|
||||
CFLAGS += $(CDEFS)
|
||||
CFLAGS += $(BLONLY_CDEFS)
|
||||
CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) -I.
|
||||
|
||||
CFLAGS += -mapcs-frame
|
||||
@ -266,7 +266,7 @@ CONLYFLAGS += $(CSTANDARD)
|
||||
# Assembler flags.
|
||||
# -Wa,...: tell GCC to pass this to the assembler.
|
||||
# -ahlns: create listing
|
||||
ASFLAGS = -mcpu=$(MCU) -mthumb -I. -x assembler-with-cpp
|
||||
ASFLAGS = -mcpu=$(MCU) -I. -x assembler-with-cpp
|
||||
ASFLAGS += $(ADEFS)
|
||||
ASFLAGS += -Wa,-adhlns=$(addprefix $(OUTDIR)/, $(notdir $(addsuffix .lst, $(basename $<))))
|
||||
ASFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
|
||||
@ -291,20 +291,8 @@ LDFLAGS += -lc -lgcc
|
||||
LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_memory.ld
|
||||
LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_BL_sections.ld
|
||||
|
||||
OOCD_LOADFILE+=$(OUTDIR)/$(TARGET).bin
|
||||
# Program
|
||||
OOCD_CL+=-c "flash write_image erase $(OOCD_LOADFILE) 0x08000000 bin"
|
||||
# Verify
|
||||
OOCD_CL+=-c "verify_image $(OOCD_LOADFILE) 0x08000000 bin"
|
||||
# reset target
|
||||
OOCD_CL+=-c "reset run"
|
||||
# terminate OOCD after programming
|
||||
OOCD_CL+=-c shutdown
|
||||
|
||||
# Define programs and commands.
|
||||
REMOVE = $(REMOVE_CMD) -f
|
||||
###SHELL = sh
|
||||
###COPY = cp
|
||||
|
||||
# List of all source files.
|
||||
ALLSRC = $(ASRCARM) $(ASRC) $(SRCARM) $(SRC) $(CPPSRCARM) $(CPPSRC)
|
||||
@ -336,14 +324,6 @@ endif
|
||||
endif
|
||||
endif
|
||||
|
||||
# Program the device.
|
||||
ifeq ($(FLASH_TOOL),OPENOCD)
|
||||
# Program the device with Dominic Rath's OPENOCD in "batch-mode", needs cfg and "reset-script".
|
||||
program: $(OUTDIR)/$(TARGET).bin
|
||||
@echo "Programming with OPENOCD"
|
||||
$(OOCD_EXE) $(OOCD_CL)
|
||||
endif
|
||||
|
||||
# Link: create ELF output file from object files.
|
||||
$(eval $(call LINK_TEMPLATE, $(OUTDIR)/$(TARGET).elf, $(ALLOBJ)))
|
||||
|
||||
@ -373,6 +353,9 @@ $(eval $(call PARTIAL_COMPILE_ARM_TEMPLATE, SRCARM))
|
||||
|
||||
$(OUTDIR)/$(TARGET).bin.o: $(OUTDIR)/$(TARGET).bin
|
||||
|
||||
# Add jtag targets (program and wipe)
|
||||
$(eval $(call JTAG_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(BL_BANK_BASE),$(BL_BANK_SIZE)))
|
||||
|
||||
.PHONY: elf lss sym hex bin bino
|
||||
elf: $(OUTDIR)/$(TARGET).elf
|
||||
lss: $(OUTDIR)/$(TARGET).lss
|
||||
@ -383,8 +366,6 @@ bino: $(OUTDIR)/$(TARGET).bin.o
|
||||
|
||||
# Display sizes of sections.
|
||||
$(eval $(call SIZE_TEMPLATE, $(OUTDIR)/$(TARGET).elf))
|
||||
.PHONY: size
|
||||
size: $(OUTDIR)/$(TARGET).elf_size
|
||||
|
||||
# Generate Doxygen documents
|
||||
docs:
|
||||
@ -437,4 +418,4 @@ else
|
||||
endif
|
||||
|
||||
# Listing of phony targets.
|
||||
.PHONY : all build clean clean_list program install
|
||||
.PHONY : all build clean clean_list install
|
||||
|
@ -33,6 +33,7 @@
|
||||
|
||||
/* OpenPilot Includes */
|
||||
#include "ahrs_bl.h"
|
||||
#include <pios_board_info.h>
|
||||
#include "pios_opahrs_proto.h"
|
||||
#include "bl_fsm.h" /* lfsm_state */
|
||||
#include "stm32f10x_flash.h"
|
||||
@ -108,6 +109,7 @@ static struct opahrs_msg_v0 link_rx_v0;
|
||||
static struct opahrs_msg_v0 user_tx_v0;
|
||||
static struct opahrs_msg_v0 user_rx_v0;
|
||||
void process_spi_request(void) {
|
||||
const struct pios_board_info * bdinfo = &pios_board_info_blob;
|
||||
bool msg_to_process = FALSE;
|
||||
|
||||
PIOS_IRQ_Disable();
|
||||
@ -166,15 +168,15 @@ void process_spi_request(void) {
|
||||
break;
|
||||
case OPAHRS_MSG_V0_REQ_MEM_MAP:
|
||||
opahrs_msg_v0_init_user_tx(&user_tx_v0, OPAHRS_MSG_V0_RSP_MEM_MAP);
|
||||
user_tx_v0.payload.user.v.rsp.mem_map.density = HW_TYPE;
|
||||
user_tx_v0.payload.user.v.rsp.mem_map.density = bdinfo->hw_type;
|
||||
user_tx_v0.payload.user.v.rsp.mem_map.rw_flags = (BOARD_READABLE
|
||||
| (BOARD_WRITABLA << 1));
|
||||
| (BOARD_WRITABLE << 1));
|
||||
user_tx_v0.payload.user.v.rsp.mem_map.size_of_code_memory
|
||||
= SIZE_OF_CODE;
|
||||
= bdinfo->fw_size;
|
||||
user_tx_v0.payload.user.v.rsp.mem_map.size_of_description
|
||||
= SIZE_OF_DESCRIPTION;
|
||||
= bdinfo->desc_size;
|
||||
user_tx_v0.payload.user.v.rsp.mem_map.start_of_user_code
|
||||
= START_OF_USER_CODE;
|
||||
= bdinfo->fw_base;
|
||||
lfsm_user_set_tx_v0(&user_tx_v0);
|
||||
break;
|
||||
case OPAHRS_MSG_V0_REQ_SERIAL:
|
||||
@ -192,7 +194,7 @@ void process_spi_request(void) {
|
||||
PIOS_LED_On(LED1);
|
||||
opahrs_msg_v0_init_user_tx(&user_tx_v0, OPAHRS_MSG_V0_RSP_FWUP_STATUS);
|
||||
if (!(user_rx_v0.payload.user.v.req.fwup_data.adress
|
||||
< START_OF_USER_CODE)) {
|
||||
< bdinfo->fw_base)) {
|
||||
for (uint8_t x = 0; x
|
||||
< user_rx_v0.payload.user.v.req.fwup_data.size; ++x) {
|
||||
if (FLASH_ProgramWord(
|
||||
@ -250,13 +252,10 @@ void process_spi_request(void) {
|
||||
return;
|
||||
}
|
||||
void jump_to_app() {
|
||||
//while(TRUE)
|
||||
//{
|
||||
// PIOS_LED_Toggle(LED1);
|
||||
// PIOS_DELAY_WaitmS(1000);
|
||||
//}
|
||||
const struct pios_board_info * bdinfo = &pios_board_info_blob;
|
||||
|
||||
PIOS_LED_On(LED1);
|
||||
if (((*(__IO uint32_t*) START_OF_USER_CODE) & 0x2FFE0000) == 0x20000000) { /* Jump to user application */
|
||||
if (((*(__IO uint32_t*) bdinfo->fw_base) & 0x2FFE0000) == 0x20000000) { /* Jump to user application */
|
||||
FLASH_Lock();
|
||||
RCC_APB2PeriphResetCmd(0xffffffff, ENABLE);
|
||||
RCC_APB1PeriphResetCmd(0xffffffff, ENABLE);
|
||||
@ -265,10 +264,10 @@ void jump_to_app() {
|
||||
//_SetCNTR(0); // clear interrupt mask
|
||||
//_SetISTR(0); // clear all requests
|
||||
|
||||
JumpAddress = *(__IO uint32_t*) (START_OF_USER_CODE + 4);
|
||||
JumpAddress = *(__IO uint32_t*) (bdinfo->fw_base + 4);
|
||||
Jump_To_Application = (pFunction) JumpAddress;
|
||||
/* Initialize user application's Stack Pointer */
|
||||
__set_MSP(*(__IO uint32_t*) START_OF_USER_CODE);
|
||||
__set_MSP(*(__IO uint32_t*) bdinfo->fw_base);
|
||||
Jump_To_Application();
|
||||
} else {
|
||||
boot_status = jump_failed;
|
||||
|
@ -55,7 +55,6 @@ static const struct pios_spi_cfg
|
||||
.ahb_clk = RCC_AHBPeriph_DMA1,
|
||||
|
||||
.irq = {
|
||||
.handler = PIOS_SPI_op_irq_handler,
|
||||
.flags = (DMA1_FLAG_TC4 | DMA1_FLAG_TE4 | DMA1_FLAG_HT4 | DMA1_FLAG_GL4),
|
||||
.init = {
|
||||
.NVIC_IRQChannel = DMA1_Channel4_IRQn,
|
||||
@ -133,11 +132,18 @@ void PIOS_SPI_op_irq_handler(void) {
|
||||
|
||||
#include "bl_fsm.h" /* lfsm_* */
|
||||
|
||||
static bool board_init_complete = false;
|
||||
void PIOS_Board_Init() {
|
||||
if (board_init_complete) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* Set up the SPI interface to the OP board */
|
||||
if (PIOS_SPI_Init(&pios_spi_op_id, &pios_spi_op_cfg)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
}
|
||||
lfsm_attach(pios_spi_op_id);
|
||||
lfsm_init();
|
||||
|
||||
board_init_complete = true;
|
||||
}
|
||||
|
@ -25,6 +25,13 @@
|
||||
WHEREAMI := $(dir $(lastword $(MAKEFILE_LIST)))
|
||||
TOP := $(realpath $(WHEREAMI)/../../../)
|
||||
include $(TOP)/make/firmware-defs.mk
|
||||
include $(TOP)/make/boards/$(BOARD_NAME)/board-info.mk
|
||||
|
||||
# Target file name (without extension).
|
||||
TARGET = bu_$(BOARD_NAME)
|
||||
|
||||
# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.)
|
||||
OUTDIR := $(TOP)/build/$(TARGET)
|
||||
|
||||
# Set developer code and compile options
|
||||
# Set to YES to compile for debugging
|
||||
@ -51,21 +58,6 @@ endif
|
||||
|
||||
FLASH_TOOL = OPENOCD
|
||||
|
||||
# MCU name, submodel and board
|
||||
# - MCU used for compiler-option (-mcpu)
|
||||
# - MODEL used for linker-script name (-T) and passed as define
|
||||
# - BOARD just passed as define (optional)
|
||||
MCU = cortex-m3
|
||||
CHIP = STM32F103CBT
|
||||
BOARD ?= NULL
|
||||
MODEL ?= NULL
|
||||
|
||||
# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.)
|
||||
OUTDIR = ../../../build/bootloaders/BootloaderUpdater
|
||||
|
||||
# Target file name (without extension).
|
||||
TARGET = BL_Updater
|
||||
|
||||
# Paths
|
||||
OPSYSTEM = .
|
||||
OPSYSTEMINC = $(OPSYSTEM)/inc
|
||||
@ -224,7 +216,6 @@ endif
|
||||
ifeq ($(ENABLE_AUX_UART), YES)
|
||||
CDEFS += -DPIOS_ENABLE_AUX_UART
|
||||
endif
|
||||
CDEFS += -DUSE_BOOTLOADER
|
||||
|
||||
# Place project-specific -D and/or -U options for
|
||||
# Assembler with preprocessor here.
|
||||
@ -309,9 +300,9 @@ LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_sections.ld
|
||||
|
||||
OOCD_LOADFILE+=$(OUTDIR)/$(TARGET).bin
|
||||
# Program
|
||||
OOCD_CL+=-c "flash write_image erase $(OOCD_LOADFILE) 0x08003000 bin"
|
||||
OOCD_CL+=-c "flash write_image erase $(OOCD_LOADFILE) $(START_OF_FW_CODE) bin"
|
||||
# Verify
|
||||
OOCD_CL+=-c "verify_image $(OOCD_LOADFILE) 0x08003000 bin"
|
||||
OOCD_CL+=-c "verify_image $(OOCD_LOADFILE) $(START_OF_FW_CODE) bin"
|
||||
# reset target
|
||||
OOCD_CL+=-c "reset run"
|
||||
# terminate OOCD after programming
|
||||
@ -364,6 +355,7 @@ program: $(OUTDIR)/$(TARGET).bin
|
||||
endif
|
||||
|
||||
# Link: create ELF output file from object files.
|
||||
BLOBJ := $(TOP)/build/bl_$(BOARD_NAME)/bl_$(BOARD_NAME).bin.o
|
||||
$(eval $(call LINK_TEMPLATE, $(OUTDIR)/$(TARGET).elf, $(ALLOBJ) $(BLOBJ)))
|
||||
|
||||
# Assemble: create object files from assembler source files.
|
||||
@ -392,14 +384,16 @@ $(eval $(call PARTIAL_COMPILE_ARM_TEMPLATE, SRCARM))
|
||||
|
||||
$(OUTDIR)/$(TARGET).bin.o: $(OUTDIR)/$(TARGET).bin
|
||||
|
||||
.PHONY: elf lss sym hex bin bino
|
||||
$(eval $(call OPFW_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(BOARD_TYPE),$(BOARD_REVISION)))
|
||||
|
||||
.PHONY: elf lss sym hex bin bino opfw
|
||||
elf: $(OUTDIR)/$(TARGET).elf
|
||||
elf.stripped: $(OUTDIR)/$(TARGET).elf.stripped
|
||||
lss: $(OUTDIR)/$(TARGET).lss
|
||||
sym: $(OUTDIR)/$(TARGET).sym
|
||||
hex: $(OUTDIR)/$(TARGET).hex
|
||||
bin: $(OUTDIR)/$(TARGET).bin
|
||||
bino: $(OUTDIR)/$(TARGET).bin.o
|
||||
opfw: $(OUTDIR)/$(TARGET).opfw
|
||||
|
||||
# Display sizes of sections.
|
||||
$(eval $(call SIZE_TEMPLATE, $(OUTDIR)/$(TARGET).elf))
|
||||
@ -411,11 +405,11 @@ docs:
|
||||
doxygen $(DOXYGENDIR)/doxygen.cfg
|
||||
|
||||
# Install: install binary file with prefix/suffix into install directory
|
||||
install: $(OUTDIR)/$(TARGET).bin
|
||||
install: $(OUTDIR)/$(TARGET).opfw
|
||||
ifneq ($(INSTALL_DIR),)
|
||||
@echo $(MSG_INSTALLING) $(call toprel, $<)
|
||||
$(V1) mkdir -p $(INSTALL_DIR)
|
||||
$(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).bin
|
||||
$(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).opfw
|
||||
else
|
||||
$(error INSTALL_DIR must be specified for $@)
|
||||
endif
|
||||
|
@ -25,6 +25,13 @@
|
||||
WHEREAMI := $(dir $(lastword $(MAKEFILE_LIST)))
|
||||
TOP := $(realpath $(WHEREAMI)/../../../)
|
||||
include $(TOP)/make/firmware-defs.mk
|
||||
include $(TOP)/make/boards/$(BOARD_NAME)/board-info.mk
|
||||
|
||||
# Target file name (without extension).
|
||||
TARGET := bl_$(BOARD_NAME)
|
||||
|
||||
# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.)
|
||||
OUTDIR := $(TOP)/build/$(TARGET)
|
||||
|
||||
# Set developer code and compile options
|
||||
# Set to YES to compile for debugging
|
||||
@ -48,21 +55,6 @@ endif
|
||||
|
||||
FLASH_TOOL = OPENOCD
|
||||
|
||||
# MCU name, submodel and board
|
||||
# - MCU used for compiler-option (-mcpu)
|
||||
# - MODEL used for linker-script name (-T) and passed as define
|
||||
# - BOARD just passed as define (optional)
|
||||
MCU = cortex-m3
|
||||
CHIP = STM32F103CBT
|
||||
BOARD = STM32103CB_CC_Rev1
|
||||
MODEL = MD
|
||||
|
||||
# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.)
|
||||
OUTDIR = $(TOP)/build/bl_coptercontrol
|
||||
|
||||
# Target file name (without extension).
|
||||
TARGET = CopterControl_BL
|
||||
|
||||
# Paths
|
||||
OPSYSTEM = .
|
||||
OPSYSTEMINC = $(OPSYSTEM)/inc
|
||||
@ -102,8 +94,6 @@ DOXYGENDIR = ../Doc/Doxygen
|
||||
SRC += $(OPSYSTEM)/main.c
|
||||
SRC += $(OPSYSTEM)/pios_board.c
|
||||
SRC += $(OPSYSTEM)/op_dfu.c
|
||||
SRC += $(FLIGHTLIB)/stopwatch.c
|
||||
|
||||
|
||||
## PIOS Hardware (STM32F10x)
|
||||
SRC += $(PIOSSTM32F10X)/pios_sys.c
|
||||
@ -147,7 +137,6 @@ SRC += $(STMSPDSRCDIR)/stm32f10x_pwr.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_rcc.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_rtc.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_spi.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_tim.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_usart.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_dbgmcu.c
|
||||
SRC += $(STMSPDSRCDIR)/misc.c
|
||||
@ -181,7 +170,7 @@ CPPSRCARM =
|
||||
# Even though the DOS/Win* filesystem matches both .s and .S the same,
|
||||
# it will preserve the spelling of the filenames, and gcc itself does
|
||||
# care about how the name is spelled on its command-line.
|
||||
ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL).S
|
||||
ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL)$(MODEL_SUFFIX).S
|
||||
|
||||
# List Assembler source files here which must be assembled in ARM-Mode..
|
||||
ASRCARM =
|
||||
@ -260,6 +249,15 @@ ifeq ($(ENABLE_AUX_UART), YES)
|
||||
CDEFS += -DPIOS_ENABLE_AUX_UART
|
||||
endif
|
||||
|
||||
# Provide (only) the bootloader with board-specific defines
|
||||
BLONLY_CDEFS += -DBOARD_TYPE=$(BOARD_TYPE)
|
||||
BLONLY_CDEFS += -DBOARD_REVISION=$(BOARD_REVISION)
|
||||
BLONLY_CDEFS += -DHW_TYPE=$(HW_TYPE)
|
||||
BLONLY_CDEFS += -DBOOTLOADER_VERSION=$(BOOTLOADER_VERSION)
|
||||
BLONLY_CDEFS += -DFW_BANK_BASE=$(FW_BANK_BASE)
|
||||
BLONLY_CDEFS += -DFW_BANK_SIZE=$(FW_BANK_SIZE)
|
||||
BLONLY_CDEFS += -DFW_DESC_SIZE=$(FW_DESC_SIZE)
|
||||
|
||||
# Place project-specific -D and/or -U options for
|
||||
# Assembler with preprocessor here.
|
||||
#ADEFS = -DUSE_IRQ_ASM_WRAPPER
|
||||
@ -295,8 +293,9 @@ ifeq ($(DEBUG),NO)
|
||||
CFLAGS += -ffunction-sections
|
||||
endif
|
||||
|
||||
CFLAGS += -mcpu=$(MCU) -mthumb
|
||||
CFLAGS += -mcpu=$(MCU)
|
||||
CFLAGS += $(CDEFS)
|
||||
CFLAGS += $(BLONLY_CDEFS)
|
||||
CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) -I.
|
||||
|
||||
CFLAGS += -mapcs-frame
|
||||
@ -316,7 +315,7 @@ CONLYFLAGS += $(CSTANDARD)
|
||||
# Assembler flags.
|
||||
# -Wa,...: tell GCC to pass this to the assembler.
|
||||
# -ahlns: create listing
|
||||
ASFLAGS = -mcpu=$(MCU) -mthumb -I. -x assembler-with-cpp
|
||||
ASFLAGS = -mcpu=$(MCU) -I. -x assembler-with-cpp
|
||||
ASFLAGS += $(ADEFS)
|
||||
ASFLAGS += -Wa,-adhlns=$(addprefix $(OUTDIR)/, $(notdir $(addsuffix .lst, $(basename $<))))
|
||||
ASFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
|
||||
@ -341,20 +340,8 @@ LDFLAGS += -lc -lgcc
|
||||
LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_memory.ld
|
||||
LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_BL_sections.ld
|
||||
|
||||
OOCD_LOADFILE+=$(OUTDIR)/$(TARGET).bin
|
||||
# Program
|
||||
OOCD_CL+=-c "flash write_image erase $(OOCD_LOADFILE) 0x08000000 bin"
|
||||
# Verify
|
||||
OOCD_CL+=-c "verify_image $(OOCD_LOADFILE) 0x08000000 bin"
|
||||
# reset target
|
||||
OOCD_CL+=-c "reset run"
|
||||
# terminate OOCD after programming
|
||||
OOCD_CL+=-c shutdown
|
||||
|
||||
# Define programs and commands.
|
||||
REMOVE = $(REMOVE_CMD) -f
|
||||
###SHELL = sh
|
||||
###COPY = cp
|
||||
|
||||
# List of all source files.
|
||||
ALLSRC = $(ASRCARM) $(ASRC) $(SRCARM) $(SRC) $(CPPSRCARM) $(CPPSRC)
|
||||
@ -394,14 +381,6 @@ ${OUTDIR}/InitMods.c: Makefile
|
||||
@echo ${quote}${foreach MOD, ${MODNAMES}, ${MOD}Initialize();}${quote} >> ${OUTDIR}/InitMods.c
|
||||
@echo ${quote}}${quote} >> ${OUTDIR}/InitMods.c
|
||||
|
||||
# Program the device.
|
||||
ifeq ($(FLASH_TOOL),OPENOCD)
|
||||
# Program the device with Dominic Rath's OPENOCD in "batch-mode", needs cfg and "reset-script".
|
||||
program: $(OUTDIR)/$(TARGET).bin
|
||||
@echo ${quote}Programming with OPENOCD${quote}
|
||||
$(OOCD_EXE) $(OOCD_CL)
|
||||
endif
|
||||
|
||||
# Link: create ELF output file from object files.
|
||||
$(eval $(call LINK_TEMPLATE, $(OUTDIR)/$(TARGET).elf, $(ALLOBJ)))
|
||||
|
||||
@ -431,6 +410,9 @@ $(eval $(call PARTIAL_COMPILE_ARM_TEMPLATE, SRCARM))
|
||||
|
||||
$(OUTDIR)/$(TARGET).bin.o: $(OUTDIR)/$(TARGET).bin
|
||||
|
||||
# Add jtag targets (program and wipe)
|
||||
$(eval $(call JTAG_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(BL_BANK_BASE),$(BL_BANK_SIZE)))
|
||||
|
||||
.PHONY: elf lss sym hex bin bino
|
||||
elf: $(OUTDIR)/$(TARGET).elf
|
||||
lss: $(OUTDIR)/$(TARGET).lss
|
||||
@ -441,8 +423,6 @@ bino: $(OUTDIR)/$(TARGET).bin.o
|
||||
|
||||
# Display sizes of sections.
|
||||
$(eval $(call SIZE_TEMPLATE, $(OUTDIR)/$(TARGET).elf))
|
||||
.PHONY: size
|
||||
size: $(OUTDIR)/$(TARGET).elf_size
|
||||
|
||||
# Generate Doxygen documents
|
||||
docs:
|
||||
@ -495,4 +475,4 @@ else
|
||||
endif
|
||||
|
||||
# Listing of phony targets.
|
||||
.PHONY : all build clean clean_list program install
|
||||
.PHONY : all build clean clean_list install
|
||||
|
@ -27,7 +27,7 @@
|
||||
*/
|
||||
/* Bootloader Includes */
|
||||
#include <pios.h>
|
||||
#include "stopwatch.h"
|
||||
#include <pios_board_info.h>
|
||||
#include "op_dfu.h"
|
||||
#include "usb_lib.h"
|
||||
#include "pios_iap.h"
|
||||
@ -46,9 +46,9 @@ pFunction Jump_To_Application;
|
||||
uint32_t JumpAddress;
|
||||
|
||||
/// LEDs PWM
|
||||
uint32_t period1 = 50; // *100 uS -> 5 mS
|
||||
uint32_t period1 = 5000; // 5 mS
|
||||
uint32_t sweep_steps1 = 100; // * 5 mS -> 500 mS
|
||||
uint32_t period2 = 50; // *100 uS -> 5 mS
|
||||
uint32_t period2 = 5000; // 5 mS
|
||||
uint32_t sweep_steps2 = 100; // * 5 mS -> 500 mS
|
||||
|
||||
|
||||
@ -69,7 +69,6 @@ uint8_t processRX();
|
||||
void jump_to_app();
|
||||
|
||||
#define BLUE LED1
|
||||
#define LED_PWM_TIMER TIM1
|
||||
int main() {
|
||||
PIOS_SYS_Init();
|
||||
if (BSL_HOLD_STATE == 0)
|
||||
@ -92,13 +91,17 @@ int main() {
|
||||
DeviceState = DFUidle;
|
||||
else
|
||||
DeviceState = BLidle;
|
||||
STOPWATCH_Init(100, LED_PWM_TIMER);
|
||||
} else
|
||||
JumpToApp = TRUE;
|
||||
|
||||
STOPWATCH_Reset(LED_PWM_TIMER);
|
||||
|
||||
uint32_t stopwatch = 0;
|
||||
uint32_t prev_ticks = PIOS_DELAY_GetuS();
|
||||
while (TRUE) {
|
||||
/* Update the stopwatch */
|
||||
uint32_t elapsed_ticks = PIOS_DELAY_GetuSSince(prev_ticks);
|
||||
prev_ticks += elapsed_ticks;
|
||||
stopwatch += elapsed_ticks;
|
||||
|
||||
if (JumpToApp == TRUE)
|
||||
jump_to_app();
|
||||
|
||||
@ -106,19 +109,19 @@ int main() {
|
||||
case Last_operation_Success:
|
||||
case uploadingStarting:
|
||||
case DFUidle:
|
||||
period1 = 50;
|
||||
period1 = 5000;
|
||||
sweep_steps1 = 100;
|
||||
PIOS_LED_Off(BLUE);
|
||||
period2 = 0;
|
||||
break;
|
||||
case uploading:
|
||||
period1 = 50;
|
||||
period1 = 5000;
|
||||
sweep_steps1 = 100;
|
||||
period2 = 25;
|
||||
period2 = 2500;
|
||||
sweep_steps2 = 50;
|
||||
break;
|
||||
case downloading:
|
||||
period1 = 25;
|
||||
period1 = 2500;
|
||||
sweep_steps1 = 50;
|
||||
PIOS_LED_Off(BLUE);
|
||||
period2 = 0;
|
||||
@ -129,14 +132,14 @@ int main() {
|
||||
period2 = 0;
|
||||
break;
|
||||
default://error
|
||||
period1 = 50;
|
||||
period1 = 5000;
|
||||
sweep_steps1 = 100;
|
||||
period2 = 50;
|
||||
period2 = 5000;
|
||||
sweep_steps2 = 100;
|
||||
}
|
||||
|
||||
if (period1 != 0) {
|
||||
if (LedPWM(period1, sweep_steps1, STOPWATCH_ValueGet(LED_PWM_TIMER)))
|
||||
if (LedPWM(period1, sweep_steps1, stopwatch))
|
||||
PIOS_LED_On(BLUE);
|
||||
else
|
||||
PIOS_LED_Off(BLUE);
|
||||
@ -144,16 +147,16 @@ int main() {
|
||||
PIOS_LED_On(BLUE);
|
||||
|
||||
if (period2 != 0) {
|
||||
if (LedPWM(period2, sweep_steps2, STOPWATCH_ValueGet(LED_PWM_TIMER)))
|
||||
if (LedPWM(period2, sweep_steps2, stopwatch))
|
||||
PIOS_LED_On(BLUE);
|
||||
else
|
||||
PIOS_LED_Off(BLUE);
|
||||
} else
|
||||
PIOS_LED_Off(BLUE);
|
||||
|
||||
if (STOPWATCH_ValueGet(LED_PWM_TIMER) > 100 * 50 * 100)
|
||||
STOPWATCH_Reset(LED_PWM_TIMER);
|
||||
if ((STOPWATCH_ValueGet(LED_PWM_TIMER) > 60000) && (DeviceState
|
||||
if (stopwatch > 50 * 1000 * 1000)
|
||||
stopwatch = 0;
|
||||
if ((stopwatch > 6 * 1000 * 1000) && (DeviceState
|
||||
== BLidle))
|
||||
JumpToApp = TRUE;
|
||||
|
||||
@ -163,7 +166,9 @@ int main() {
|
||||
}
|
||||
|
||||
void jump_to_app() {
|
||||
if (((*(__IO uint32_t*) START_OF_USER_CODE) & 0x2FFE0000) == 0x20000000) { /* Jump to user application */
|
||||
const struct pios_board_info * bdinfo = &pios_board_info_blob;
|
||||
|
||||
if (((*(__IO uint32_t*) bdinfo->fw_base) & 0x2FFE0000) == 0x20000000) { /* Jump to user application */
|
||||
FLASH_Lock();
|
||||
RCC_APB2PeriphResetCmd(0xffffffff, ENABLE);
|
||||
RCC_APB1PeriphResetCmd(0xffffffff, ENABLE);
|
||||
@ -171,10 +176,10 @@ void jump_to_app() {
|
||||
RCC_APB1PeriphResetCmd(0xffffffff, DISABLE);
|
||||
_SetCNTR(0); // clear interrupt mask
|
||||
_SetISTR(0); // clear all requests
|
||||
JumpAddress = *(__IO uint32_t*) (START_OF_USER_CODE + 4);
|
||||
JumpAddress = *(__IO uint32_t*) (bdinfo->fw_base + 4);
|
||||
Jump_To_Application = (pFunction) JumpAddress;
|
||||
/* Initialize user application's Stack Pointer */
|
||||
__set_MSP(*(__IO uint32_t*) START_OF_USER_CODE);
|
||||
__set_MSP(*(__IO uint32_t*) bdinfo->fw_base);
|
||||
Jump_To_Application();
|
||||
} else {
|
||||
DeviceState = failed_jump;
|
||||
@ -182,20 +187,21 @@ void jump_to_app() {
|
||||
}
|
||||
}
|
||||
uint32_t LedPWM(uint32_t pwm_period, uint32_t pwm_sweep_steps, uint32_t count) {
|
||||
uint32_t pwm_duty = ((count / pwm_period) % pwm_sweep_steps)
|
||||
/ (pwm_sweep_steps / pwm_period);
|
||||
if ((count % (2 * pwm_period * pwm_sweep_steps)) > pwm_period
|
||||
* pwm_sweep_steps)
|
||||
pwm_duty = pwm_period - pwm_duty; // negative direction each 50*100 ticks
|
||||
uint32_t curr_step = (count / pwm_period) % pwm_sweep_steps; /* 0 - pwm_sweep_steps */
|
||||
uint32_t pwm_duty = pwm_period * curr_step / pwm_sweep_steps; /* fraction of pwm_period */
|
||||
|
||||
uint32_t curr_sweep = (count / (pwm_period * pwm_sweep_steps)); /* ticks once per full sweep */
|
||||
if (curr_sweep & 1) {
|
||||
pwm_duty = pwm_period - pwm_duty; /* reverse direction in odd sweeps */
|
||||
}
|
||||
return ((count % pwm_period) > pwm_duty) ? 1 : 0;
|
||||
}
|
||||
|
||||
uint8_t processRX() {
|
||||
while (PIOS_COM_ReceiveBufferUsed(PIOS_COM_TELEM_USB) >= 63) {
|
||||
for (int32_t x = 0; x < 63; ++x) {
|
||||
mReceive_Buffer[x] = PIOS_COM_ReceiveBuffer(PIOS_COM_TELEM_USB);
|
||||
if (PIOS_COM_ReceiveBuffer(PIOS_COM_TELEM_USB, mReceive_Buffer, 63, 0) == 63) {
|
||||
processComand(mReceive_Buffer);
|
||||
}
|
||||
processComand(mReceive_Buffer);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include "pios.h"
|
||||
#include "op_dfu.h"
|
||||
#include "pios_bl_helper.h"
|
||||
#include <pios_board_info.h>
|
||||
//programmable devices
|
||||
Device devicesTable[10];
|
||||
uint8_t numberOfDevices = 0;
|
||||
@ -382,16 +383,18 @@ void processComand(uint8_t *xReceive_Buffer) {
|
||||
return;
|
||||
}
|
||||
void OPDfuIni(uint8_t discover) {
|
||||
const struct pios_board_info * bdinfo = &pios_board_info_blob;
|
||||
Device dev;
|
||||
|
||||
dev.programmingType = Self_flash;
|
||||
dev.readWriteFlags = (BOARD_READABLE | (BOARD_WRITABLA << 1));
|
||||
dev.startOfUserCode = START_OF_USER_CODE;
|
||||
dev.sizeOfCode = SIZE_OF_CODE;
|
||||
dev.sizeOfDescription = SIZE_OF_DESCRIPTION;
|
||||
dev.BL_Version = BOOTLOADER_VERSION;
|
||||
dev.readWriteFlags = (BOARD_READABLE | (BOARD_WRITABLE << 1));
|
||||
dev.startOfUserCode = bdinfo->fw_base;
|
||||
dev.sizeOfCode = bdinfo->fw_size;
|
||||
dev.sizeOfDescription = bdinfo->desc_size;
|
||||
dev.BL_Version = bdinfo->bl_rev;
|
||||
dev.FW_Crc = CalcFirmCRC();
|
||||
dev.devID = (BOARD_TYPE << 8) | BOARD_REVISION;
|
||||
dev.devType = HW_TYPE;
|
||||
dev.devID = (bdinfo->board_type << 8) | (bdinfo->board_rev);
|
||||
dev.devType = bdinfo->hw_type;
|
||||
numberOfDevices = 1;
|
||||
devicesTable[0] = dev;
|
||||
if (discover) {
|
||||
|
@ -31,10 +31,31 @@
|
||||
|
||||
#include <pios_com_priv.h>
|
||||
|
||||
#define PIOS_COM_TELEM_USB_RX_BUF_LEN 192
|
||||
#define PIOS_COM_TELEM_USB_TX_BUF_LEN 192
|
||||
|
||||
static uint8_t pios_com_telem_usb_rx_buffer[PIOS_COM_TELEM_USB_RX_BUF_LEN];
|
||||
static uint8_t pios_com_telem_usb_tx_buffer[PIOS_COM_TELEM_USB_TX_BUF_LEN];
|
||||
|
||||
#endif /* PIOS_INCLUDE_COM */
|
||||
|
||||
// ***********************************************************************************
|
||||
|
||||
#if defined(PIOS_INCLUDE_USB_HID)
|
||||
#include "pios_usb_hid_priv.h"
|
||||
|
||||
static const struct pios_usb_hid_cfg pios_usb_hid_main_cfg = {
|
||||
.irq = {
|
||||
.init = {
|
||||
.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn,
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_LOW,
|
||||
.NVIC_IRQChannelSubPriority = 0,
|
||||
.NVIC_IRQChannelCmd = ENABLE,
|
||||
},
|
||||
},
|
||||
};
|
||||
#endif /* PIOS_INCLUDE_USB_HID */
|
||||
|
||||
extern const struct pios_com_driver pios_usb_com_driver;
|
||||
|
||||
uint32_t pios_com_telem_usb_id;
|
||||
@ -44,7 +65,12 @@ uint32_t pios_com_telem_usb_id;
|
||||
* initializes all the core subsystems on this specific hardware
|
||||
* called from System/openpilot.c
|
||||
*/
|
||||
static bool board_init_complete = false;
|
||||
void PIOS_Board_Init(void) {
|
||||
if (board_init_complete) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* Enable Prefetch Buffer */
|
||||
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
|
||||
|
||||
@ -58,13 +84,20 @@ void PIOS_Board_Init(void) {
|
||||
PIOS_GPIO_Init();
|
||||
|
||||
#if defined(PIOS_INCLUDE_USB_HID)
|
||||
PIOS_USB_HID_Init(0);
|
||||
uint32_t pios_usb_hid_id;
|
||||
if (PIOS_USB_HID_Init(&pios_usb_hid_id, &pios_usb_hid_main_cfg)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
#if defined(PIOS_INCLUDE_COM)
|
||||
if (PIOS_COM_Init(&pios_com_telem_usb_id, &pios_usb_com_driver, 0)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
if (PIOS_COM_Init(&pios_com_telem_usb_id, &pios_usb_com_driver, pios_usb_hid_id,
|
||||
pios_com_telem_usb_rx_buffer, sizeof(pios_com_telem_usb_rx_buffer),
|
||||
pios_com_telem_usb_tx_buffer, sizeof(pios_com_telem_usb_tx_buffer))) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_COM */
|
||||
#endif /* PIOS_INCLUDE_USB_HID */
|
||||
#endif /* PIOS_INCLUDE_USB_HID */
|
||||
|
||||
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);//TODO Tirar
|
||||
|
||||
board_init_complete = true;
|
||||
}
|
||||
|
@ -25,6 +25,13 @@
|
||||
WHEREAMI := $(dir $(lastword $(MAKEFILE_LIST)))
|
||||
TOP := $(realpath $(WHEREAMI)/../../../)
|
||||
include $(TOP)/make/firmware-defs.mk
|
||||
include $(TOP)/make/boards/$(BOARD_NAME)/board-info.mk
|
||||
|
||||
# Target file name (without extension).
|
||||
TARGET := bl_$(BOARD_NAME)
|
||||
|
||||
# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.)
|
||||
OUTDIR := $(TOP)/build/$(TARGET)
|
||||
|
||||
# Set developer code and compile options
|
||||
# Set to YES to compile for debugging
|
||||
@ -48,21 +55,6 @@ endif
|
||||
|
||||
FLASH_TOOL = OPENOCD
|
||||
|
||||
# MCU name, submodel and board
|
||||
# - MCU used for compiler-option (-mcpu)
|
||||
# - MODEL used for linker-script name (-T) and passed as define
|
||||
# - BOARD just passed as define (optional)
|
||||
MCU = cortex-m3
|
||||
CHIP = STM32F103RET
|
||||
BOARD = STM3210E_OP
|
||||
MODEL = HD
|
||||
|
||||
# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.)
|
||||
OUTDIR = $(TOP)/build/bl_openpilot
|
||||
|
||||
# Target file name (without extension).
|
||||
TARGET = OpenPilot_BL
|
||||
|
||||
# Paths
|
||||
OPSYSTEM = .
|
||||
OPSYSTEMINC = $(OPSYSTEM)/inc
|
||||
@ -184,7 +176,7 @@ CPPSRCARM =
|
||||
# Even though the DOS/Win* filesystem matches both .s and .S the same,
|
||||
# it will preserve the spelling of the filenames, and gcc itself does
|
||||
# care about how the name is spelled on its command-line.
|
||||
ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL)_OP.S
|
||||
ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL)$(MODEL_SUFFIX).S
|
||||
|
||||
# List Assembler source files here which must be assembled in ARM-Mode..
|
||||
ASRCARM =
|
||||
@ -263,6 +255,15 @@ ifeq ($(ENABLE_AUX_UART), YES)
|
||||
CDEFS += -DPIOS_ENABLE_AUX_UART
|
||||
endif
|
||||
|
||||
# Provide (only) the bootloader with board-specific defines
|
||||
BLONLY_CDEFS += -DBOARD_TYPE=$(BOARD_TYPE)
|
||||
BLONLY_CDEFS += -DBOARD_REVISION=$(BOARD_REVISION)
|
||||
BLONLY_CDEFS += -DHW_TYPE=$(HW_TYPE)
|
||||
BLONLY_CDEFS += -DBOOTLOADER_VERSION=$(BOOTLOADER_VERSION)
|
||||
BLONLY_CDEFS += -DFW_BANK_BASE=$(FW_BANK_BASE)
|
||||
BLONLY_CDEFS += -DFW_BANK_SIZE=$(FW_BANK_SIZE)
|
||||
BLONLY_CDEFS += -DFW_DESC_SIZE=$(FW_DESC_SIZE)
|
||||
|
||||
# Place project-specific -D and/or -U options for
|
||||
# Assembler with preprocessor here.
|
||||
#ADEFS = -DUSE_IRQ_ASM_WRAPPER
|
||||
@ -300,6 +301,7 @@ endif
|
||||
|
||||
CFLAGS += -mcpu=$(MCU)
|
||||
CFLAGS += $(CDEFS)
|
||||
CFLAGS += $(BLONLY_CDEFS)
|
||||
CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) -I.
|
||||
|
||||
CFLAGS += -mapcs-frame
|
||||
@ -344,20 +346,8 @@ LDFLAGS += -lc -lgcc
|
||||
LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_memory.ld
|
||||
LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_BL_sections.ld
|
||||
|
||||
OOCD_LOADFILE+=$(OUTDIR)/$(TARGET).bin
|
||||
# Program
|
||||
OOCD_CL+=-c "flash write_image erase $(OOCD_LOADFILE) 0x08000000 bin"
|
||||
# Verify
|
||||
OOCD_CL+=-c "verify_image $(OOCD_LOADFILE) 0x08000000 bin"
|
||||
# reset target
|
||||
OOCD_CL+=-c "reset run"
|
||||
# terminate OOCD after programming
|
||||
OOCD_CL+=-c shutdown
|
||||
|
||||
# Define programs and commands.
|
||||
REMOVE = $(REMOVE_CMD) -f
|
||||
###SHELL = sh
|
||||
###COPY = cp
|
||||
|
||||
# List of all source files.
|
||||
ALLSRC = $(ASRCARM) $(ASRC) $(SRCARM) $(SRC) $(CPPSRCARM) $(CPPSRC)
|
||||
@ -397,14 +387,6 @@ ${OUTDIR}/InitMods.c: Makefile
|
||||
@echo ${quote}${foreach MOD, ${MODNAMES}, ${MOD}Initialize();}${quote} >> ${OUTDIR}/InitMods.c
|
||||
@echo ${quote}}${quote} >> ${OUTDIR}/InitMods.c
|
||||
|
||||
# Program the device.
|
||||
ifeq ($(FLASH_TOOL),OPENOCD)
|
||||
# Program the device with Dominic Rath's OPENOCD in "batch-mode", needs cfg and "reset-script".
|
||||
program: $(OUTDIR)/$(TARGET).bin
|
||||
@echo ${quote}Programming with OPENOCD${quote}
|
||||
$(OOCD_EXE) $(OOCD_CL)
|
||||
endif
|
||||
|
||||
# Link: create ELF output file from object files.
|
||||
$(eval $(call LINK_TEMPLATE, $(OUTDIR)/$(TARGET).elf, $(ALLOBJ)))
|
||||
|
||||
@ -434,6 +416,9 @@ $(eval $(call PARTIAL_COMPILE_ARM_TEMPLATE, SRCARM))
|
||||
|
||||
$(OUTDIR)/$(TARGET).bin.o: $(OUTDIR)/$(TARGET).bin
|
||||
|
||||
# Add jtag targets (program and wipe)
|
||||
$(eval $(call JTAG_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(BL_BANK_BASE),$(BL_BANK_SIZE)))
|
||||
|
||||
.PHONY: elf lss sym hex bin bino
|
||||
elf: $(OUTDIR)/$(TARGET).elf
|
||||
lss: $(OUTDIR)/$(TARGET).lss
|
||||
@ -444,8 +429,6 @@ bino: $(OUTDIR)/$(TARGET).bin.o
|
||||
|
||||
# Display sizes of sections.
|
||||
$(eval $(call SIZE_TEMPLATE, $(OUTDIR)/$(TARGET).elf))
|
||||
.PHONY: size
|
||||
size: $(OUTDIR)/$(TARGET).elf_size
|
||||
|
||||
# Generate Doxygen documents
|
||||
docs:
|
||||
@ -498,4 +481,4 @@ else
|
||||
endif
|
||||
|
||||
# Listing of phony targets.
|
||||
.PHONY : all build clean clean_list program install
|
||||
.PHONY : all build clean clean_list install
|
||||
|
@ -27,6 +27,7 @@
|
||||
*/
|
||||
/* Bootloader Includes */
|
||||
#include <pios.h>
|
||||
#include <pios_board_info.h>
|
||||
#include "pios_opahrs.h"
|
||||
#include "stopwatch.h"
|
||||
#include "op_dfu.h"
|
||||
@ -216,7 +217,9 @@ int main() {
|
||||
}
|
||||
|
||||
void jump_to_app() {
|
||||
if (((*(__IO uint32_t*) START_OF_USER_CODE) & 0x2FFE0000) == 0x20000000) { /* Jump to user application */
|
||||
const struct pios_board_info * bdinfo = &pios_board_info_blob;
|
||||
|
||||
if (((*(__IO uint32_t*) bdinfo->fw_base) & 0x2FFE0000) == 0x20000000) { /* Jump to user application */
|
||||
FLASH_Lock();
|
||||
RCC_APB2PeriphResetCmd(0xffffffff, ENABLE);
|
||||
RCC_APB1PeriphResetCmd(0xffffffff, ENABLE);
|
||||
@ -225,10 +228,10 @@ void jump_to_app() {
|
||||
_SetCNTR(0); // clear interrupt mask
|
||||
_SetISTR(0); // clear all requests
|
||||
|
||||
JumpAddress = *(__IO uint32_t*) (START_OF_USER_CODE + 4);
|
||||
JumpAddress = *(__IO uint32_t*) (bdinfo->fw_base + 4);
|
||||
Jump_To_Application = (pFunction) JumpAddress;
|
||||
/* Initialize user application's Stack Pointer */
|
||||
__set_MSP(*(__IO uint32_t*) START_OF_USER_CODE);
|
||||
__set_MSP(*(__IO uint32_t*) bdinfo->fw_base);
|
||||
Jump_To_Application();
|
||||
} else {
|
||||
DeviceState = failed_jump;
|
||||
@ -247,10 +250,9 @@ uint32_t LedPWM(uint32_t pwm_period, uint32_t pwm_sweep_steps, uint32_t count) {
|
||||
uint8_t processRX() {
|
||||
if (ProgPort == Usb) {
|
||||
while (PIOS_COM_ReceiveBufferUsed(PIOS_COM_TELEM_USB) >= 63) {
|
||||
for (int32_t x = 0; x < 63; ++x) {
|
||||
mReceive_Buffer[x] = PIOS_COM_ReceiveBuffer(PIOS_COM_TELEM_USB);
|
||||
if (PIOS_COM_ReceiveBuffer(PIOS_COM_TELEM_USB, mReceive_Buffer, 63, 0) == 63) {
|
||||
processComand(mReceive_Buffer);
|
||||
}
|
||||
processComand(mReceive_Buffer);
|
||||
}
|
||||
} else if (ProgPort == Serial) {
|
||||
|
||||
@ -276,7 +278,12 @@ void SSP_CallBack(uint8_t *buf, uint16_t len) {
|
||||
}
|
||||
int16_t SSP_SerialRead(void) {
|
||||
if (PIOS_COM_ReceiveBufferUsed(PIOS_COM_TELEM_RF) > 0) {
|
||||
return PIOS_COM_ReceiveBuffer(PIOS_COM_TELEM_RF);
|
||||
uint8_t byte;
|
||||
if (PIOS_COM_ReceiveBuffer(PIOS_COM_TELEM_RF, &byte, 1, 0) == 1) {
|
||||
return byte;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
} else
|
||||
return -1;
|
||||
}
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include "pios.h"
|
||||
#include "op_dfu.h"
|
||||
#include "pios_bl_helper.h"
|
||||
#include <pios_board_info.h>
|
||||
#include "pios_opahrs.h"
|
||||
#include "ssp.h"
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
@ -447,16 +448,18 @@ void processComand(uint8_t *xReceive_Buffer) {
|
||||
return;
|
||||
}
|
||||
void OPDfuIni(uint8_t discover) {
|
||||
const struct pios_board_info * bdinfo = &pios_board_info_blob;
|
||||
Device dev;
|
||||
|
||||
dev.programmingType = Self_flash;
|
||||
dev.readWriteFlags = (BOARD_READABLE | (BOARD_WRITABLA << 1));
|
||||
dev.startOfUserCode = START_OF_USER_CODE;
|
||||
dev.sizeOfCode = SIZE_OF_CODE;
|
||||
dev.sizeOfDescription = SIZE_OF_DESCRIPTION;
|
||||
dev.BL_Version = BOOTLOADER_VERSION;
|
||||
dev.readWriteFlags = (BOARD_READABLE | (BOARD_WRITABLE << 1));
|
||||
dev.startOfUserCode = bdinfo->fw_base;
|
||||
dev.sizeOfCode = bdinfo->fw_size;
|
||||
dev.sizeOfDescription = bdinfo->desc_size;
|
||||
dev.BL_Version = bdinfo->bl_rev;
|
||||
dev.FW_Crc = CalcFirmCRC();
|
||||
dev.devID = (BOARD_TYPE << 8) | BOARD_REVISION;
|
||||
dev.devType = HW_TYPE;
|
||||
dev.devID = (bdinfo->board_type << 8) | (bdinfo->board_rev);
|
||||
dev.devType = bdinfo->hw_type;
|
||||
numberOfDevices = 1;
|
||||
devicesTable[0] = dev;
|
||||
if (discover) {
|
||||
|
@ -60,7 +60,6 @@ const struct pios_spi_cfg
|
||||
.ahb_clk = RCC_AHBPeriph_DMA1,
|
||||
|
||||
.irq = {
|
||||
.handler = PIOS_SPI_ahrs_irq_handler,
|
||||
.flags = (DMA1_FLAG_TC4 | DMA1_FLAG_TE4 | DMA1_FLAG_HT4 | DMA1_FLAG_GL4),
|
||||
.init = {
|
||||
.NVIC_IRQChannel = DMA1_Channel4_IRQn,
|
||||
@ -143,9 +142,9 @@ void PIOS_SPI_ahrs_irq_handler(void) {
|
||||
/*
|
||||
* Telemetry USART
|
||||
*/
|
||||
void PIOS_USART_telem_irq_handler(void);
|
||||
void USART2_IRQHandler() __attribute__ ((alias ("PIOS_USART_telem_irq_handler")));
|
||||
const struct pios_usart_cfg pios_usart_telem_cfg = { .regs = USART2, .init = {
|
||||
const struct pios_usart_cfg pios_usart_telem_cfg = {
|
||||
.regs = USART2,
|
||||
.init = {
|
||||
#if defined (PIOS_COM_TELEM_BAUDRATE)
|
||||
.USART_BaudRate = PIOS_COM_TELEM_BAUDRATE,
|
||||
#else
|
||||
@ -157,7 +156,6 @@ const struct pios_usart_cfg pios_usart_telem_cfg = { .regs = USART2, .init = {
|
||||
.USART_HardwareFlowControl = USART_HardwareFlowControl_None,
|
||||
.USART_Mode = USART_Mode_Rx | USART_Mode_Tx,
|
||||
}, .irq = {
|
||||
.handler = PIOS_USART_telem_irq_handler,
|
||||
.init = {
|
||||
.NVIC_IRQChannel = USART2_IRQn,
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_HIGH,
|
||||
@ -180,19 +178,41 @@ const struct pios_usart_cfg pios_usart_telem_cfg = { .regs = USART2, .init = {
|
||||
},
|
||||
}, };
|
||||
|
||||
static uint32_t pios_usart_telem_rf_id;
|
||||
void PIOS_USART_telem_irq_handler(void) {
|
||||
PIOS_USART_IRQ_Handler(pios_usart_telem_rf_id);
|
||||
}
|
||||
|
||||
#endif /* PIOS_INCLUDE_USART */
|
||||
|
||||
#if defined(PIOS_INCLUDE_COM)
|
||||
|
||||
#include "pios_com_priv.h"
|
||||
|
||||
#define PIOS_COM_TELEM_USB_RX_BUF_LEN 192
|
||||
#define PIOS_COM_TELEM_USB_TX_BUF_LEN 192
|
||||
|
||||
static uint8_t pios_com_telem_usb_rx_buffer[PIOS_COM_TELEM_USB_RX_BUF_LEN];
|
||||
static uint8_t pios_com_telem_usb_tx_buffer[PIOS_COM_TELEM_USB_TX_BUF_LEN];
|
||||
|
||||
#define PIOS_COM_TELEM_RF_RX_BUF_LEN 192
|
||||
#define PIOS_COM_TELEM_RF_TX_BUF_LEN 192
|
||||
|
||||
static uint8_t pios_com_telem_rf_rx_buffer[PIOS_COM_TELEM_RF_RX_BUF_LEN];
|
||||
static uint8_t pios_com_telem_rf_tx_buffer[PIOS_COM_TELEM_RF_TX_BUF_LEN];
|
||||
|
||||
#endif /* PIOS_INCLUDE_COM */
|
||||
|
||||
#if defined(PIOS_INCLUDE_USB_HID)
|
||||
#include "pios_usb_hid_priv.h"
|
||||
|
||||
static const struct pios_usb_hid_cfg pios_usb_hid_main_cfg = {
|
||||
.irq = {
|
||||
.init = {
|
||||
.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn,
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_LOW,
|
||||
.NVIC_IRQChannelSubPriority = 0,
|
||||
.NVIC_IRQChannelCmd = ENABLE,
|
||||
},
|
||||
},
|
||||
};
|
||||
#endif /* PIOS_INCLUDE_USB_HID */
|
||||
|
||||
extern const struct pios_com_driver pios_usb_com_driver;
|
||||
|
||||
uint32_t pios_com_telem_rf_id;
|
||||
@ -205,7 +225,11 @@ uint32_t pios_com_telem_usb_id;
|
||||
* initializes all the core subsystems on this specific hardware
|
||||
* called from System/openpilot.c
|
||||
*/
|
||||
static bool board_init_complete = false;
|
||||
void PIOS_Board_Init(void) {
|
||||
if (board_init_complete) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* Enable Prefetch Buffer */
|
||||
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
|
||||
@ -218,11 +242,14 @@ void PIOS_Board_Init(void) {
|
||||
|
||||
/* Initialize the PiOS library */
|
||||
#if defined(PIOS_INCLUDE_COM)
|
||||
uint32_t pios_usart_telem_rf_id;
|
||||
if (PIOS_USART_Init(&pios_usart_telem_rf_id, &pios_usart_telem_cfg)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
}
|
||||
if (PIOS_COM_Init(&pios_com_telem_rf_id, &pios_usart_com_driver,
|
||||
pios_usart_telem_rf_id)) {
|
||||
pios_usart_telem_rf_id,
|
||||
pios_com_telem_rf_rx_buffer, sizeof(pios_com_telem_rf_rx_buffer),
|
||||
pios_com_telem_rf_tx_buffer, sizeof(pios_com_telem_rf_tx_buffer))) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_COM */
|
||||
@ -230,13 +257,16 @@ void PIOS_Board_Init(void) {
|
||||
PIOS_GPIO_Init();
|
||||
|
||||
#if defined(PIOS_INCLUDE_USB_HID)
|
||||
PIOS_USB_HID_Init(0);
|
||||
uint32_t pios_usb_hid_id;
|
||||
PIOS_USB_HID_Init(&pios_usb_hid_id, &pios_usb_hid_main_cfg);
|
||||
#if defined(PIOS_INCLUDE_COM)
|
||||
if (PIOS_COM_Init(&pios_com_telem_usb_id, &pios_usb_com_driver, 0)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
if (PIOS_COM_Init(&pios_com_telem_usb_id, &pios_usb_com_driver, pios_usb_hid_id,
|
||||
pios_com_telem_usb_rx_buffer, sizeof(pios_com_telem_usb_rx_buffer),
|
||||
pios_com_telem_usb_tx_buffer, sizeof(pios_com_telem_usb_tx_buffer))) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_COM */
|
||||
#endif /* PIOS_INCLUDE_USB_HID */
|
||||
#endif /* PIOS_INCLUDE_USB_HID */
|
||||
|
||||
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);//TODO Tirar
|
||||
|
||||
@ -247,6 +277,8 @@ void PIOS_Board_Init(void) {
|
||||
|
||||
/* Bind the AHRS comms layer to the AHRS SPI link */
|
||||
PIOS_OPAHRS_Attach(pios_spi_ahrs_id);
|
||||
|
||||
board_init_complete = true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -25,6 +25,13 @@
|
||||
WHEREAMI := $(dir $(lastword $(MAKEFILE_LIST)))
|
||||
TOP := $(realpath $(WHEREAMI)/../../../)
|
||||
include $(TOP)/make/firmware-defs.mk
|
||||
include $(TOP)/make/boards/$(BOARD_NAME)/board-info.mk
|
||||
|
||||
# Target file name (without extension).
|
||||
TARGET := bl_$(BOARD_NAME)
|
||||
|
||||
# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.)
|
||||
OUTDIR := $(TOP)/build/$(TARGET)
|
||||
|
||||
# Set developer code and compile options
|
||||
# Set to YES to compile for debugging
|
||||
@ -48,21 +55,6 @@ endif
|
||||
|
||||
FLASH_TOOL = OPENOCD
|
||||
|
||||
# MCU name, submodel and board
|
||||
# - MCU used for compiler-option (-mcpu)
|
||||
# - MODEL used for linker-script name (-T) and passed as define
|
||||
# - BOARD just passed as define (optional)
|
||||
MCU = cortex-m3
|
||||
CHIP = STM32F103CBT
|
||||
BOARD = STM32103CB_PIPXTREME
|
||||
MODEL = MD
|
||||
|
||||
# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.)
|
||||
OUTDIR = $(TOP)/build/bl_pipxtreme
|
||||
|
||||
# Target file name (without extension).
|
||||
TARGET = PipXtreme_BL
|
||||
|
||||
# Paths
|
||||
OPSYSTEM = .
|
||||
OPSYSTEMINC = $(OPSYSTEM)/inc
|
||||
@ -102,8 +94,6 @@ DOXYGENDIR = ../Doc/Doxygen
|
||||
SRC += $(OPSYSTEM)/main.c
|
||||
SRC += $(OPSYSTEM)/pios_board.c
|
||||
SRC += $(OPSYSTEM)/op_dfu.c
|
||||
SRC += $(FLIGHTLIB)/stopwatch.c
|
||||
|
||||
|
||||
## PIOS Hardware (STM32F10x)
|
||||
SRC += $(PIOSSTM32F10X)/pios_sys.c
|
||||
@ -146,7 +136,6 @@ SRC += $(STMSPDSRCDIR)/stm32f10x_pwr.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_rcc.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_rtc.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_spi.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_tim.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_usart.c
|
||||
SRC += $(STMSPDSRCDIR)/stm32f10x_dbgmcu.c
|
||||
SRC += $(STMSPDSRCDIR)/misc.c
|
||||
@ -180,7 +169,7 @@ CPPSRCARM =
|
||||
# Even though the DOS/Win* filesystem matches both .s and .S the same,
|
||||
# it will preserve the spelling of the filenames, and gcc itself does
|
||||
# care about how the name is spelled on its command-line.
|
||||
ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL).S
|
||||
ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL)$(MODEL_SUFFIX).S
|
||||
|
||||
# List Assembler source files here which must be assembled in ARM-Mode..
|
||||
ASRCARM =
|
||||
@ -259,6 +248,17 @@ ifeq ($(ENABLE_AUX_UART), YES)
|
||||
CDEFS += -DPIOS_ENABLE_AUX_UART
|
||||
endif
|
||||
|
||||
# Provide (only) the bootloader with board-specific defines
|
||||
BLONLY_CDEFS += -DBOARD_TYPE=$(BOARD_TYPE)
|
||||
BLONLY_CDEFS += -DBOARD_REVISION=$(BOARD_REVISION)
|
||||
BLONLY_CDEFS += -DHW_TYPE=$(HW_TYPE)
|
||||
BLONLY_CDEFS += -DBOOTLOADER_VERSION=$(BOOTLOADER_VERSION)
|
||||
BLONLY_CDEFS += -DFW_BANK_BASE=$(FW_BANK_BASE)
|
||||
BLONLY_CDEFS += -DFW_BANK_SIZE=$(FW_BANK_SIZE)
|
||||
BLONLY_CDEFS += -DFW_DESC_SIZE=$(FW_DESC_SIZE)
|
||||
BLONLY_CDEFS += -DEE_BANK_BASE=$(EE_BANK_BASE)
|
||||
BLONLY_CDEFS += -DEE_BANK_SIZE=$(EE_BANK_SIZE)
|
||||
|
||||
# Place project-specific -D and/or -U options for
|
||||
# Assembler with preprocessor here.
|
||||
#ADEFS = -DUSE_IRQ_ASM_WRAPPER
|
||||
@ -294,8 +294,9 @@ ifeq ($(DEBUG),NO)
|
||||
CFLAGS += -ffunction-sections
|
||||
endif
|
||||
|
||||
CFLAGS += -mcpu=$(MCU) -mthumb
|
||||
CFLAGS += -mcpu=$(MCU)
|
||||
CFLAGS += $(CDEFS)
|
||||
CFLAGS += $(BLONLY_CDEFS)
|
||||
CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) -I.
|
||||
|
||||
CFLAGS += -mapcs-frame
|
||||
@ -315,7 +316,7 @@ CONLYFLAGS += $(CSTANDARD)
|
||||
# Assembler flags.
|
||||
# -Wa,...: tell GCC to pass this to the assembler.
|
||||
# -ahlns: create listing
|
||||
ASFLAGS = -mcpu=$(MCU) -mthumb -I. -x assembler-with-cpp
|
||||
ASFLAGS = -mcpu=$(MCU) -I. -x assembler-with-cpp
|
||||
ASFLAGS += $(ADEFS)
|
||||
ASFLAGS += -Wa,-adhlns=$(addprefix $(OUTDIR)/, $(notdir $(addsuffix .lst, $(basename $<))))
|
||||
ASFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
|
||||
@ -340,20 +341,8 @@ LDFLAGS += -lc -lgcc
|
||||
LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_memory.ld
|
||||
LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_BL_sections.ld
|
||||
|
||||
OOCD_LOADFILE+=$(OUTDIR)/$(TARGET).bin
|
||||
# Program
|
||||
OOCD_CL+=-c "flash write_image erase $(OOCD_LOADFILE) 0x08000000 bin"
|
||||
# Verify
|
||||
OOCD_CL+=-c "verify_image $(OOCD_LOADFILE) 0x08000000 bin"
|
||||
# reset target
|
||||
OOCD_CL+=-c "reset run"
|
||||
# terminate OOCD after programming
|
||||
OOCD_CL+=-c shutdown
|
||||
|
||||
# Define programs and commands.
|
||||
REMOVE = $(REMOVE_CMD) -f
|
||||
###SHELL = sh
|
||||
###COPY = cp
|
||||
|
||||
# List of all source files.
|
||||
ALLSRC = $(ASRCARM) $(ASRC) $(SRCARM) $(SRC) $(CPPSRCARM) $(CPPSRC)
|
||||
@ -393,14 +382,6 @@ ${OUTDIR}/InitMods.c: Makefile
|
||||
@echo ${quote}${foreach MOD, ${MODNAMES}, ${MOD}Initialize();}${quote} >> ${OUTDIR}/InitMods.c
|
||||
@echo ${quote}}${quote} >> ${OUTDIR}/InitMods.c
|
||||
|
||||
# Program the device.
|
||||
ifeq ($(FLASH_TOOL),OPENOCD)
|
||||
# Program the device with Dominic Rath's OPENOCD in "batch-mode", needs cfg and "reset-script".
|
||||
program: $(OUTDIR)/$(TARGET).bin
|
||||
@echo ${quote}Programming with OPENOCD${quote}
|
||||
$(OOCD_EXE) $(OOCD_CL)
|
||||
endif
|
||||
|
||||
# Link: create ELF output file from object files.
|
||||
$(eval $(call LINK_TEMPLATE, $(OUTDIR)/$(TARGET).elf, $(ALLOBJ)))
|
||||
|
||||
@ -430,6 +411,9 @@ $(eval $(call PARTIAL_COMPILE_ARM_TEMPLATE, SRCARM))
|
||||
|
||||
$(OUTDIR)/$(TARGET).bin.o: $(OUTDIR)/$(TARGET).bin
|
||||
|
||||
# Add jtag targets (program and wipe)
|
||||
$(eval $(call JTAG_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(BL_BANK_BASE),$(BL_BANK_SIZE)))
|
||||
|
||||
.PHONY: elf lss sym hex bin bino
|
||||
elf: $(OUTDIR)/$(TARGET).elf
|
||||
lss: $(OUTDIR)/$(TARGET).lss
|
||||
@ -440,8 +424,6 @@ bino: $(OUTDIR)/$(TARGET).bin.o
|
||||
|
||||
# Display sizes of sections.
|
||||
$(eval $(call SIZE_TEMPLATE, $(OUTDIR)/$(TARGET).elf))
|
||||
.PHONY: size
|
||||
size: $(OUTDIR)/$(TARGET).elf_size
|
||||
|
||||
# Generate Doxygen documents
|
||||
docs:
|
||||
@ -494,4 +476,4 @@ else
|
||||
endif
|
||||
|
||||
# Listing of phony targets.
|
||||
.PHONY : all build clean clean_list program install
|
||||
.PHONY : all build clean clean_list install
|
||||
|
@ -27,7 +27,7 @@
|
||||
*/
|
||||
/* Bootloader Includes */
|
||||
#include <pios.h>
|
||||
#include "stopwatch.h"
|
||||
#include <pios_board_info.h>
|
||||
#include "op_dfu.h"
|
||||
#include "usb_lib.h"
|
||||
#include "pios_iap.h"
|
||||
@ -46,9 +46,9 @@ pFunction Jump_To_Application;
|
||||
uint32_t JumpAddress;
|
||||
|
||||
/// LEDs PWM
|
||||
uint32_t period1 = 50; // *100 uS -> 5 mS
|
||||
uint32_t period1 = 5000; // 5 mS
|
||||
uint32_t sweep_steps1 = 100; // * 5 mS -> 500 mS
|
||||
uint32_t period2 = 50; // *100 uS -> 5 mS
|
||||
uint32_t period2 = 5000; // 5 mS
|
||||
uint32_t sweep_steps2 = 100; // * 5 mS -> 500 mS
|
||||
|
||||
|
||||
@ -70,7 +70,6 @@ void jump_to_app();
|
||||
|
||||
#define BLUE LED1
|
||||
#define RED LED4
|
||||
#define LED_PWM_TIMER TIM3
|
||||
int main() {
|
||||
/* NOTE: Do NOT modify the following start-up sequence */
|
||||
/* Any new initialization functions should be added in OpenPilotInit() */
|
||||
@ -97,35 +96,37 @@ int main() {
|
||||
DeviceState = DFUidle;
|
||||
else
|
||||
DeviceState = BLidle;
|
||||
STOPWATCH_Init(100, LED_PWM_TIMER);
|
||||
} else
|
||||
JumpToApp = TRUE;
|
||||
|
||||
STOPWATCH_Reset(LED_PWM_TIMER);
|
||||
|
||||
uint32_t stopwatch = 0;
|
||||
uint32_t prev_ticks = PIOS_DELAY_GetuS();
|
||||
while (TRUE) {
|
||||
/* Update the stopwatch */
|
||||
uint32_t elapsed_ticks = PIOS_DELAY_GetuSSince(prev_ticks);
|
||||
prev_ticks += elapsed_ticks;
|
||||
stopwatch += elapsed_ticks;
|
||||
|
||||
if (JumpToApp == TRUE)
|
||||
jump_to_app();
|
||||
//pwm_period = 50; // *100 uS -> 5 mS
|
||||
//pwm_sweep_steps =100; // * 5 mS -> 500 mS
|
||||
|
||||
switch (DeviceState) {
|
||||
case Last_operation_Success:
|
||||
case uploadingStarting:
|
||||
case DFUidle:
|
||||
period1 = 50;
|
||||
period1 = 5000;
|
||||
sweep_steps1 = 100;
|
||||
PIOS_LED_Off(RED);
|
||||
period2 = 0;
|
||||
break;
|
||||
case uploading:
|
||||
period1 = 50;
|
||||
period1 = 5000;
|
||||
sweep_steps1 = 100;
|
||||
period2 = 25;
|
||||
period2 = 2500;
|
||||
sweep_steps2 = 50;
|
||||
break;
|
||||
case downloading:
|
||||
period1 = 25;
|
||||
period1 = 2500;
|
||||
sweep_steps1 = 50;
|
||||
PIOS_LED_Off(RED);
|
||||
period2 = 0;
|
||||
@ -136,14 +137,14 @@ int main() {
|
||||
period2 = 0;
|
||||
break;
|
||||
default://error
|
||||
period1 = 50;
|
||||
period1 = 5000;
|
||||
sweep_steps1 = 100;
|
||||
period2 = 50;
|
||||
period2 = 5000;
|
||||
sweep_steps2 = 100;
|
||||
}
|
||||
|
||||
if (period1 != 0) {
|
||||
if (LedPWM(period1, sweep_steps1, STOPWATCH_ValueGet(LED_PWM_TIMER)))
|
||||
if (LedPWM(period1, sweep_steps1, stopwatch))
|
||||
PIOS_LED_On(BLUE);
|
||||
else
|
||||
PIOS_LED_Off(BLUE);
|
||||
@ -151,16 +152,16 @@ int main() {
|
||||
PIOS_LED_On(BLUE);
|
||||
|
||||
if (period2 != 0) {
|
||||
if (LedPWM(period2, sweep_steps2, STOPWATCH_ValueGet(LED_PWM_TIMER)))
|
||||
if (LedPWM(period2, sweep_steps2, stopwatch))
|
||||
PIOS_LED_On(RED);
|
||||
else
|
||||
PIOS_LED_Off(RED);
|
||||
} else
|
||||
PIOS_LED_Off(RED);
|
||||
|
||||
if (STOPWATCH_ValueGet(LED_PWM_TIMER) > 100 * 50 * 100)
|
||||
STOPWATCH_Reset(LED_PWM_TIMER);
|
||||
if ((STOPWATCH_ValueGet(LED_PWM_TIMER) > 60000) && (DeviceState
|
||||
if (stopwatch > 50 * 1000 * 1000)
|
||||
stopwatch = 0;
|
||||
if ((stopwatch > 6 * 1000 * 1000) && (DeviceState
|
||||
== BLidle))
|
||||
JumpToApp = TRUE;
|
||||
|
||||
@ -170,7 +171,9 @@ int main() {
|
||||
}
|
||||
|
||||
void jump_to_app() {
|
||||
if (((*(__IO uint32_t*) START_OF_USER_CODE) & 0x2FFE0000) == 0x20000000) { /* Jump to user application */
|
||||
const struct pios_board_info * bdinfo = &pios_board_info_blob;
|
||||
|
||||
if (((*(__IO uint32_t*) bdinfo->fw_base) & 0x2FFE0000) == 0x20000000) { /* Jump to user application */
|
||||
FLASH_Lock();
|
||||
RCC_APB2PeriphResetCmd(0xffffffff, ENABLE);
|
||||
RCC_APB1PeriphResetCmd(0xffffffff, ENABLE);
|
||||
@ -179,10 +182,10 @@ void jump_to_app() {
|
||||
_SetCNTR(0); // clear interrupt mask
|
||||
_SetISTR(0); // clear all requests
|
||||
|
||||
JumpAddress = *(__IO uint32_t*) (START_OF_USER_CODE + 4);
|
||||
JumpAddress = *(__IO uint32_t*) (bdinfo->fw_base + 4);
|
||||
Jump_To_Application = (pFunction) JumpAddress;
|
||||
/* Initialize user application's Stack Pointer */
|
||||
__set_MSP(*(__IO uint32_t*) START_OF_USER_CODE);
|
||||
__set_MSP(*(__IO uint32_t*) bdinfo->fw_base);
|
||||
Jump_To_Application();
|
||||
} else {
|
||||
DeviceState = failed_jump;
|
||||
@ -190,20 +193,21 @@ void jump_to_app() {
|
||||
}
|
||||
}
|
||||
uint32_t LedPWM(uint32_t pwm_period, uint32_t pwm_sweep_steps, uint32_t count) {
|
||||
uint32_t pwm_duty = ((count / pwm_period) % pwm_sweep_steps)
|
||||
/ (pwm_sweep_steps / pwm_period);
|
||||
if ((count % (2 * pwm_period * pwm_sweep_steps)) > pwm_period
|
||||
* pwm_sweep_steps)
|
||||
pwm_duty = pwm_period - pwm_duty; // negative direction each 50*100 ticks
|
||||
uint32_t curr_step = (count / pwm_period) % pwm_sweep_steps; /* 0 - pwm_sweep_steps */
|
||||
uint32_t pwm_duty = pwm_period * curr_step / pwm_sweep_steps; /* fraction of pwm_period */
|
||||
|
||||
uint32_t curr_sweep = (count / (pwm_period * pwm_sweep_steps)); /* ticks once per full sweep */
|
||||
if (curr_sweep & 1) {
|
||||
pwm_duty = pwm_period - pwm_duty; /* reverse direction in odd sweeps */
|
||||
}
|
||||
return ((count % pwm_period) > pwm_duty) ? 1 : 0;
|
||||
}
|
||||
|
||||
uint8_t processRX() {
|
||||
while (PIOS_COM_ReceiveBufferUsed(PIOS_COM_TELEM_USB) >= 63) {
|
||||
for (int32_t x = 0; x < 63; ++x) {
|
||||
mReceive_Buffer[x] = PIOS_COM_ReceiveBuffer(PIOS_COM_TELEM_USB);
|
||||
if (PIOS_COM_ReceiveBuffer(PIOS_COM_TELEM_USB, mReceive_Buffer, 63, 0) == 63) {
|
||||
processComand(mReceive_Buffer);
|
||||
}
|
||||
processComand(mReceive_Buffer);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include "pios.h"
|
||||
#include "op_dfu.h"
|
||||
#include "pios_bl_helper.h"
|
||||
#include <pios_board_info.h>
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
@ -414,16 +415,18 @@ void processComand(uint8_t *xReceive_Buffer) {
|
||||
return;
|
||||
}
|
||||
void OPDfuIni(uint8_t discover) {
|
||||
const struct pios_board_info * bdinfo = &pios_board_info_blob;
|
||||
Device dev;
|
||||
|
||||
dev.programmingType = Self_flash;
|
||||
dev.readWriteFlags = (BOARD_READABLE | (BOARD_WRITABLA << 1));
|
||||
dev.startOfUserCode = START_OF_USER_CODE;
|
||||
dev.sizeOfCode = SIZE_OF_CODE;
|
||||
dev.sizeOfDescription = SIZE_OF_DESCRIPTION;
|
||||
dev.BL_Version = BOOTLOADER_VERSION;
|
||||
dev.readWriteFlags = (BOARD_READABLE | (BOARD_WRITABLE << 1));
|
||||
dev.startOfUserCode = bdinfo->fw_base;
|
||||
dev.sizeOfCode = bdinfo->fw_size;
|
||||
dev.sizeOfDescription = bdinfo->desc_size;
|
||||
dev.BL_Version = bdinfo->bl_rev;
|
||||
dev.FW_Crc = CalcFirmCRC();
|
||||
dev.devID = (BOARD_TYPE << 8) | BOARD_REVISION;
|
||||
dev.devType = HW_TYPE;
|
||||
dev.devID = (bdinfo->board_type << 8) | (bdinfo->board_rev);
|
||||
dev.devType = bdinfo->hw_type;
|
||||
numberOfDevices = 1;
|
||||
devicesTable[0] = dev;
|
||||
if (discover) {
|
||||
|
@ -31,10 +31,31 @@
|
||||
|
||||
#include <pios_com_priv.h>
|
||||
|
||||
#define PIOS_COM_TELEM_USB_RX_BUF_LEN 192
|
||||
#define PIOS_COM_TELEM_USB_TX_BUF_LEN 192
|
||||
|
||||
static uint8_t pios_com_telem_usb_rx_buffer[PIOS_COM_TELEM_USB_RX_BUF_LEN];
|
||||
static uint8_t pios_com_telem_usb_tx_buffer[PIOS_COM_TELEM_USB_TX_BUF_LEN];
|
||||
|
||||
#endif /* PIOS_INCLUDE_COM */
|
||||
|
||||
// ***********************************************************************************
|
||||
|
||||
#if defined(PIOS_INCLUDE_USB_HID)
|
||||
#include "pios_usb_hid_priv.h"
|
||||
|
||||
static const struct pios_usb_hid_cfg pios_usb_hid_main_cfg = {
|
||||
.irq = {
|
||||
.init = {
|
||||
.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn,
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_LOW,
|
||||
.NVIC_IRQChannelSubPriority = 0,
|
||||
.NVIC_IRQChannelCmd = ENABLE,
|
||||
},
|
||||
},
|
||||
};
|
||||
#endif /* PIOS_INCLUDE_USB_HID */
|
||||
|
||||
extern const struct pios_com_driver pios_usb_com_driver;
|
||||
|
||||
uint32_t pios_com_telem_usb_id;
|
||||
@ -44,7 +65,12 @@ uint32_t pios_com_telem_usb_id;
|
||||
* initializes all the core subsystems on this specific hardware
|
||||
* called from System/openpilot.c
|
||||
*/
|
||||
static bool board_init_complete = false;
|
||||
void PIOS_Board_Init(void) {
|
||||
if (board_init_complete) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* Enable Prefetch Buffer */
|
||||
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
|
||||
|
||||
@ -58,13 +84,18 @@ void PIOS_Board_Init(void) {
|
||||
PIOS_GPIO_Init();
|
||||
|
||||
#if defined(PIOS_INCLUDE_USB_HID)
|
||||
PIOS_USB_HID_Init(0);
|
||||
uint32_t pios_usb_hid_id;
|
||||
PIOS_USB_HID_Init(&pios_usb_hid_id, &pios_usb_hid_main_cfg);
|
||||
#if defined(PIOS_INCLUDE_COM)
|
||||
if (PIOS_COM_Init(&pios_com_telem_usb_id, &pios_usb_com_driver, 0)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
if (PIOS_COM_Init(&pios_com_telem_usb_id, &pios_usb_com_driver, pios_usb_hid_id,
|
||||
pios_com_telem_usb_rx_buffer, sizeof(pios_com_telem_usb_rx_buffer),
|
||||
pios_com_telem_usb_tx_buffer, sizeof(pios_com_telem_usb_tx_buffer))) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_COM */
|
||||
#endif /* PIOS_INCLUDE_USB_HID */
|
||||
#endif /* PIOS_INCLUDE_USB_HID */
|
||||
|
||||
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);//TODO Tirar
|
||||
|
||||
board_init_complete = true;
|
||||
}
|
||||
|
@ -25,6 +25,13 @@
|
||||
WHEREAMI := $(dir $(lastword $(MAKEFILE_LIST)))
|
||||
TOP := $(realpath $(WHEREAMI)/../../)
|
||||
include $(TOP)/make/firmware-defs.mk
|
||||
include $(TOP)/make/boards/$(BOARD_NAME)/board-info.mk
|
||||
|
||||
# Target file name (without extension).
|
||||
TARGET := fw_$(BOARD_NAME)
|
||||
|
||||
# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.)
|
||||
OUTDIR := $(TOP)/build/$(TARGET)
|
||||
|
||||
# Set developer code and compile options
|
||||
# Set to YES to compile for debugging
|
||||
@ -38,7 +45,7 @@ ENABLE_DEBUG_PINS ?= NO
|
||||
# Set to Yes to enable the AUX UART which is mapped on the S1 (Tx) and S2 (Rx) servo outputs
|
||||
ENABLE_AUX_UART ?= NO
|
||||
|
||||
USE_SPEKTRUM ?= NO
|
||||
USE_GPS ?= NO
|
||||
|
||||
USE_I2C ?= NO
|
||||
|
||||
@ -57,21 +64,6 @@ FLASH_TOOL = OPENOCD
|
||||
# List of modules to include
|
||||
MODULES = Telemetry Attitude Stabilization Actuator ManualControl FirmwareIAP
|
||||
|
||||
# MCU name, submodel and board
|
||||
# - MCU used for compiler-option (-mcpu)
|
||||
# - MODEL used for linker-script name (-T) and passed as define
|
||||
# - BOARD just passed as define (optional)
|
||||
MCU = cortex-m3
|
||||
CHIP = STM32F103CBT
|
||||
BOARD = STM32103CB_CC_Rev1
|
||||
MODEL = MD
|
||||
|
||||
# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.)
|
||||
OUTDIR = $(TOP)/build/coptercontrol
|
||||
|
||||
# Target file name (without extension).
|
||||
TARGET = CopterControl
|
||||
|
||||
# Paths
|
||||
OPSYSTEM = ./System
|
||||
OPSYSTEMINC = $(OPSYSTEM)/inc
|
||||
@ -121,12 +113,9 @@ OPUAVSYNTHDIR = $(OUTDIR)/../uavobject-synthetics/flight
|
||||
# List C source files here. (C dependencies are automatically generated.)
|
||||
# use file-extension c for "c-only"-files
|
||||
|
||||
MODNAMES = $(notdir ${MODULES})
|
||||
|
||||
ifndef TESTAPP
|
||||
## MODULES
|
||||
SRC += ${foreach MOD, ${MODULES}, ${wildcard ${OPMODULEDIR}/${MOD}/*.c}}
|
||||
SRC += ${OUTDIR}/InitMods.c
|
||||
## OPENPILOT CORE:
|
||||
SRC += ${OPMODULEDIR}/System/systemmod.c
|
||||
SRC += $(OPSYSTEM)/coptercontrol.c
|
||||
@ -148,6 +137,7 @@ endif
|
||||
|
||||
## UAVOBJECTS
|
||||
ifndef TESTAPP
|
||||
SRC += $(OPUAVSYNTHDIR)/accessorydesired.c
|
||||
SRC += $(OPUAVSYNTHDIR)/objectpersistence.c
|
||||
SRC += $(OPUAVSYNTHDIR)/gcstelemetrystats.c
|
||||
SRC += $(OPUAVSYNTHDIR)/flighttelemetrystats.c
|
||||
@ -173,6 +163,7 @@ SRC += $(OPUAVSYNTHDIR)/mixersettings.c
|
||||
SRC += $(OPUAVSYNTHDIR)/mixerstatus.c
|
||||
SRC += $(OPUAVSYNTHDIR)/firmwareiapobj.c
|
||||
SRC += $(OPUAVSYNTHDIR)/attitudesettings.c
|
||||
SRC += $(OPUAVSYNTHDIR)/hwsettings.c
|
||||
#${wildcard ${OBJ}/$(shell echo $(VAR) | tr A-Z a-z)/*.c}
|
||||
#SRC += ${foreach OBJ, ${UAVOBJECTS}, $(UAVOBJECTS)/$(OBJ).c}
|
||||
# Cant use until i can automatically generate list of UAVObjects
|
||||
@ -192,9 +183,11 @@ SRC += $(PIOSSTM32F10X)/pios_spi.c
|
||||
SRC += $(PIOSSTM32F10X)/pios_ppm.c
|
||||
SRC += $(PIOSSTM32F10X)/pios_pwm.c
|
||||
SRC += $(PIOSSTM32F10X)/pios_spektrum.c
|
||||
SRC += $(PIOSSTM32F10X)/pios_sbus.c
|
||||
SRC += $(PIOSSTM32F10X)/pios_debug.c
|
||||
SRC += $(PIOSSTM32F10X)/pios_gpio.c
|
||||
SRC += $(PIOSSTM32F10X)/pios_exti.c
|
||||
SRC += $(PIOSSTM32F10X)/pios_rtc.c
|
||||
SRC += $(PIOSSTM32F10X)/pios_wdg.c
|
||||
|
||||
|
||||
@ -205,6 +198,7 @@ SRC += $(PIOSSTM32F10X)/pios_usb_hid_prop.c
|
||||
SRC += $(PIOSSTM32F10X)/pios_usb_hid_pwr.c
|
||||
|
||||
## PIOS Hardware (Common)
|
||||
SRC += $(PIOSCOMMON)/pios_crc.c
|
||||
SRC += $(PIOSCOMMON)/pios_flashfs_objlist.c
|
||||
SRC += $(PIOSCOMMON)/pios_flash_w25x.c
|
||||
SRC += $(PIOSCOMMON)/pios_adxl345.c
|
||||
@ -212,6 +206,7 @@ SRC += $(PIOSCOMMON)/pios_com.c
|
||||
SRC += $(PIOSCOMMON)/pios_i2c_esc.c
|
||||
SRC += $(PIOSCOMMON)/pios_iap.c
|
||||
SRC += $(PIOSCOMMON)/pios_bl_helper.c
|
||||
SRC += $(PIOSCOMMON)/pios_rcvr.c
|
||||
SRC += $(PIOSCOMMON)/printf-stdarg.c
|
||||
## Libraries for flight calculations
|
||||
SRC += $(FLIGHTLIB)/fifo_buffer.c
|
||||
@ -299,7 +294,7 @@ CPPSRCARM =
|
||||
# Even though the DOS/Win* filesystem matches both .s and .S the same,
|
||||
# it will preserve the spelling of the filenames, and gcc itself does
|
||||
# care about how the name is spelled on its command-line.
|
||||
ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL)_CC.S
|
||||
ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL)$(MODEL_SUFFIX).S
|
||||
|
||||
# List Assembler source files here which must be assembled in ARM-Mode..
|
||||
ASRCARM =
|
||||
@ -381,19 +376,18 @@ endif
|
||||
ifeq ($(ENABLE_AUX_UART), YES)
|
||||
CDEFS += -DPIOS_ENABLE_AUX_UART
|
||||
endif
|
||||
CDEFS += -DUSE_BOOTLOADER
|
||||
ifeq ($(ERASE_FLASH), YES)
|
||||
CDEFS += -DERASE_FLASH
|
||||
endif
|
||||
ifeq ($(USE_SPEKTRUM), YES)
|
||||
CDEFS += -DUSE_SPEKTRUM
|
||||
|
||||
ifneq ($(USE_GPS), NO)
|
||||
CDEFS += -DUSE_GPS
|
||||
endif
|
||||
|
||||
ifeq ($(USE_I2C), YES)
|
||||
CDEFS += -DUSE_I2C
|
||||
endif
|
||||
|
||||
|
||||
# Place project-specific -D and/or -U options for
|
||||
# Assembler with preprocessor here.
|
||||
#ADEFS = -DUSE_IRQ_ASM_WRAPPER
|
||||
@ -475,21 +469,9 @@ LDFLAGS += -lc -lgcc
|
||||
LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_memory.ld
|
||||
LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_sections.ld
|
||||
|
||||
OOCD_LOADFILE+=$(OUTDIR)/$(TARGET).bin
|
||||
# Program
|
||||
OOCD_CL+=-c "flash write_image erase $(OOCD_LOADFILE) 0x08003000 bin"
|
||||
# Verify
|
||||
OOCD_CL+=-c "verify_image $(OOCD_LOADFILE) 0x08003000 bin"
|
||||
# reset target
|
||||
OOCD_CL+=-c "reset run"
|
||||
# terminate OOCD after programming
|
||||
OOCD_CL+=-c shutdown
|
||||
|
||||
# Define programs and commands.
|
||||
REMOVE = $(REMOVE_CMD) -f
|
||||
PYTHON = python
|
||||
###SHELL = sh
|
||||
###COPY = cp
|
||||
|
||||
# List of all source files.
|
||||
ALLSRC = $(ASRCARM) $(ASRC) $(SRCARM) $(SRC) $(CPPSRCARM) $(CPPSRC)
|
||||
@ -505,7 +487,7 @@ LSTFILES = $(addprefix $(OUTDIR)/, $(addsuffix .lst, $(ALLSRCBASE)))
|
||||
DEPFILES = $(addprefix $(OUTDIR)/dep/, $(addsuffix .o.d, $(ALLSRCBASE)))
|
||||
|
||||
# Default target.
|
||||
all: gencode build
|
||||
all: build
|
||||
|
||||
ifeq ($(LOADFORMAT),ihex)
|
||||
build: elf hex lss sym
|
||||
@ -521,18 +503,6 @@ endif
|
||||
endif
|
||||
endif
|
||||
|
||||
# Generate intermediate code for objects
|
||||
gencode: ${OUTDIR}/InitMods.c
|
||||
|
||||
# Generate code for module initialization
|
||||
${OUTDIR}/InitMods.c: Makefile
|
||||
@echo $(MSG_MODINIT) $(call toprel, $@)
|
||||
@echo ${quote}// Autogenerated file${quote} > ${OUTDIR}/InitMods.c
|
||||
@echo ${quote}${foreach MOD, ${MODNAMES}, extern unsigned int ${MOD}Initialize(void);}${quote} >> ${OUTDIR}/InitMods.c
|
||||
@echo ${quote}void InitModules() {${quote} >> ${OUTDIR}/InitMods.c
|
||||
@echo ${quote}${foreach MOD, ${MODNAMES}, ${MOD}Initialize();}${quote} >> ${OUTDIR}/InitMods.c
|
||||
@echo ${quote}}${quote} >> ${OUTDIR}/InitMods.c
|
||||
|
||||
# Generate code for PyMite
|
||||
#$(OUTDIR)/pmlib_img.c $(OUTDIR)/pmlib_nat.c $(OUTDIR)/pmlibusr_img.c $(OUTDIR)/pmlibusr_nat.c $(OUTDIR)/pmfeatures.h: $(wildcard $(PYMITELIB)/*.py) $(wildcard $(PYMITEPLAT)/*.py) $(wildcard $(FLIGHTPLANLIB)/*.py) $(wildcard $(FLIGHTPLANS)/*.py)
|
||||
# @echo $(MSG_PYMITEINIT) $(call toprel, $@)
|
||||
@ -540,13 +510,6 @@ ${OUTDIR}/InitMods.c: Makefile
|
||||
# @$(PYTHON) $(PYMITETOOLS)/pmGenPmFeatures.py $(PYMITEPLAT)/pmfeatures.py > $(OUTDIR)/pmfeatures.h
|
||||
# @$(PYTHON) $(PYMITETOOLS)/pmImgCreator.py -f $(PYMITEPLAT)/pmfeatures.py -c -u -o $(OUTDIR)/pmlibusr_img.c --native-file=$(OUTDIR)/pmlibusr_nat.c $(FLIGHTPLANS)/test.py
|
||||
|
||||
ifeq ($(FLASH_TOOL),OPENOCD)
|
||||
# Program the device with Dominic Rath's OPENOCD in "batch-mode", needs cfg and "reset-script".
|
||||
program: $(OUTDIR)/$(TARGET).bin
|
||||
@echo ${quote}Programming with OPENOCD${quote}
|
||||
$(OOCD_EXE) $(OOCD_CL)
|
||||
endif
|
||||
|
||||
# Link: create ELF output file from object files.
|
||||
$(eval $(call LINK_TEMPLATE, $(OUTDIR)/$(TARGET).elf, $(ALLOBJ)))
|
||||
|
||||
@ -576,29 +539,33 @@ $(eval $(call PARTIAL_COMPILE_ARM_TEMPLATE, SRCARM))
|
||||
|
||||
$(OUTDIR)/$(TARGET).bin.o: $(OUTDIR)/$(TARGET).bin
|
||||
|
||||
.PHONY: elf lss sym hex bin bino
|
||||
$(eval $(call OPFW_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(BOARD_TYPE),$(BOARD_REVISION)))
|
||||
|
||||
# Add jtag targets (program and wipe)
|
||||
$(eval $(call JTAG_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(FW_BANK_BASE),$(FW_BANK_SIZE)))
|
||||
|
||||
.PHONY: elf lss sym hex bin bino opfw
|
||||
elf: $(OUTDIR)/$(TARGET).elf
|
||||
lss: $(OUTDIR)/$(TARGET).lss
|
||||
sym: $(OUTDIR)/$(TARGET).sym
|
||||
hex: $(OUTDIR)/$(TARGET).hex
|
||||
bin: $(OUTDIR)/$(TARGET).bin
|
||||
bino: $(OUTDIR)/$(TARGET).bin.o
|
||||
opfw: $(OUTDIR)/$(TARGET).opfw
|
||||
|
||||
# Display sizes of sections.
|
||||
$(eval $(call SIZE_TEMPLATE, $(OUTDIR)/$(TARGET).elf))
|
||||
.PHONY: 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
|
||||
install: $(OUTDIR)/$(TARGET).opfw
|
||||
ifneq ($(INSTALL_DIR),)
|
||||
@echo $(MSG_INSTALLING) $(call toprel, $<)
|
||||
$(V1) mkdir -p $(INSTALL_DIR)
|
||||
$(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).bin
|
||||
$(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).opfw
|
||||
else
|
||||
$(error INSTALL_DIR must be specified for $@)
|
||||
endif
|
||||
@ -642,4 +609,4 @@ else
|
||||
endif
|
||||
|
||||
# Listing of phony targets.
|
||||
.PHONY : all build clean clean_list program gencode install
|
||||
.PHONY : all build clean clean_list install
|
||||
|
@ -42,18 +42,16 @@
|
||||
|
||||
/* Global Variables */
|
||||
|
||||
/* Prototype of generated InitModules() function */
|
||||
extern void InitModules(void);
|
||||
|
||||
/* Prototype of PIOS_Board_Init() function */
|
||||
extern void PIOS_Board_Init(void);
|
||||
extern void Stack_Change(void);
|
||||
|
||||
/**
|
||||
* OpenPilot Main function:
|
||||
*
|
||||
* Initialize PiOS<BR>
|
||||
* Create the "System" task (SystemModInitializein Modules/System/systemmod.c) <BR>
|
||||
* Start FreeRTOS Scheduler (vTaskStartScheduler)<BR>
|
||||
* Start FreeRTOS Scheduler (vTaskStartScheduler) (Now handled by caller)
|
||||
* If something goes wrong, blink LED1 and LED2 every 100ms
|
||||
*
|
||||
*/
|
||||
@ -65,40 +63,32 @@ int main()
|
||||
/* Brings up System using CMSIS functions, enables the LEDs. */
|
||||
PIOS_SYS_Init();
|
||||
|
||||
/* Initialize the system thread */
|
||||
SystemModInitialize();
|
||||
|
||||
/* Start the FreeRTOS scheduler */
|
||||
vTaskStartScheduler();
|
||||
|
||||
/* If all is well we will never reach here as the scheduler will now be running. */
|
||||
/* If we do get here, it will most likely be because we ran out of heap space. */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the hardware, libraries and modules (called by the System thread in systemmod.c)
|
||||
*/
|
||||
void OpenPilotInit()
|
||||
{
|
||||
|
||||
/* Architecture dependant Hardware and
|
||||
* core subsystem initialisation
|
||||
* (see pios_board.c for your arch)
|
||||
* */
|
||||
|
||||
PIOS_Board_Init();
|
||||
|
||||
#ifdef ERASE_FLASH
|
||||
PIOS_Flash_W25X_EraseChip();
|
||||
while(TRUE){};
|
||||
#endif
|
||||
|
||||
/* Initialize modules */
|
||||
InitModules();
|
||||
}
|
||||
MODULE_INITIALISE_ALL
|
||||
|
||||
/* swap the stack to use the IRQ stack */
|
||||
Stack_Change();
|
||||
|
||||
/* Start the FreeRTOS scheduler which should never returns.*/
|
||||
vTaskStartScheduler();
|
||||
|
||||
/* If all is well we will never reach here as the scheduler will now be running. */
|
||||
|
||||
/* Do some indication to user that something bad just happened */
|
||||
PIOS_LED_Off(LED1); \
|
||||
for(;;) { \
|
||||
PIOS_LED_Toggle(LED1); \
|
||||
PIOS_DELAY_WaitmS(100); \
|
||||
};
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
|
@ -9,7 +9,7 @@
|
||||
* application requirements.
|
||||
*
|
||||
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
|
||||
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
|
||||
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
|
||||
*
|
||||
* See http://www.freertos.org/a00110.html.
|
||||
*----------------------------------------------------------*/
|
||||
@ -29,8 +29,8 @@
|
||||
#define configCPU_CLOCK_HZ ( ( unsigned long ) 72000000 )
|
||||
#define configTICK_RATE_HZ ( ( portTickType ) 1000 )
|
||||
#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 5 )
|
||||
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 128 )
|
||||
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 14 * 1024 ) )
|
||||
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 48 )
|
||||
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 54 * 256) )
|
||||
#define configMAX_TASK_NAME_LEN ( 16 )
|
||||
#define configUSE_TRACE_FACILITY 0
|
||||
#define configUSE_16_BIT_TICKS 0
|
||||
@ -71,6 +71,23 @@ configKERNEL_INTERRUPT_PRIORITY setting. Here 15 corresponds to the lowest
|
||||
NVIC value of 255. */
|
||||
#define configLIBRARY_KERNEL_INTERRUPT_PRIORITY 15
|
||||
|
||||
#if !defined(ARCH_POSIX) && !defined(ARCH_WIN32)
|
||||
#define CHECK_IRQ_STACK
|
||||
#endif
|
||||
|
||||
/* Enable run time stats collection */
|
||||
//#if defined(DEBUG)
|
||||
#define configGENERATE_RUN_TIME_STATS 1
|
||||
#define INCLUDE_uxTaskGetRunTime 1
|
||||
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()\
|
||||
do {\
|
||||
(*(unsigned long *)0xe000edfc) |= (1<<24);/* DEMCR |= DEMCR_TRCENA */\
|
||||
(*(unsigned long *)0xe0001000) |= 1; /* DWT_CTRL |= DWT_CYCCNT_ENA */\
|
||||
} while(0)
|
||||
#define portGET_RUN_TIME_COUNTER_VALUE() (*(unsigned long *)0xe0001004)/* DWT_CYCCNT */
|
||||
//#endif
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
@ -1,106 +1,110 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @addtogroup OpenPilotSystem OpenPilot System
|
||||
* @{
|
||||
* @addtogroup OpenPilotCore OpenPilot Core
|
||||
* @{
|
||||
*
|
||||
* @file pios_config.h
|
||||
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
|
||||
* @brief PiOS configuration header.
|
||||
* Central compile time config for the project.
|
||||
* In particular, pios_config.h is where you define which PiOS libraries
|
||||
* and features are included in the firmware.
|
||||
* @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
|
||||
*/
|
||||
|
||||
|
||||
#ifndef PIOS_CONFIG_H
|
||||
#define PIOS_CONFIG_H
|
||||
|
||||
|
||||
/* Enable/Disable PiOS Modules */
|
||||
#define PIOS_INCLUDE_ADC
|
||||
#define PIOS_INCLUDE_DELAY
|
||||
#if defined(USE_I2C)
|
||||
#define PIOS_INCLUDE_I2C
|
||||
#define PIOS_INCLUDE_I2C_ESC
|
||||
#endif
|
||||
#define PIOS_INCLUDE_IRQ
|
||||
#define PIOS_INCLUDE_LED
|
||||
|
||||
#if defined(USE_SPEKTRUM)
|
||||
#define PIOS_INCLUDE_SPEKTRUM
|
||||
#else
|
||||
#define PIOS_INCLUDE_GPS
|
||||
//#define PIOS_INCLUDE_PPM
|
||||
#define PIOS_INCLUDE_PWM
|
||||
#endif
|
||||
|
||||
|
||||
#define PIOS_INCLUDE_SERVO
|
||||
#define PIOS_INCLUDE_SPI
|
||||
#define PIOS_INCLUDE_SYS
|
||||
#define PIOS_INCLUDE_USART
|
||||
#define PIOS_INCLUDE_USB_HID
|
||||
#define PIOS_INCLUDE_COM
|
||||
#define PIOS_INCLUDE_SETTINGS
|
||||
#define PIOS_INCLUDE_FREERTOS
|
||||
#define PIOS_INCLUDE_GPIO
|
||||
#define PIOS_INCLUDE_EXTI
|
||||
#define PIOS_INCLUDE_WDG
|
||||
#define PIOS_INCLUDE_BL_HELPER
|
||||
|
||||
#define PIOS_INCLUDE_ADXL345
|
||||
#define PIOS_INCLUDE_FLASH
|
||||
|
||||
/* A really shitty setting saving implementation */
|
||||
#define PIOS_INCLUDE_FLASH_SECTOR_SETTINGS
|
||||
|
||||
/* Defaults for Logging */
|
||||
#define LOG_FILENAME "PIOS.LOG"
|
||||
#define STARTUP_LOG_ENABLED 1
|
||||
|
||||
/* COM Module */
|
||||
#define GPS_BAUDRATE 19200
|
||||
#define TELEM_BAUDRATE 19200
|
||||
#define AUXUART_ENABLED 0
|
||||
#define AUXUART_BAUDRATE 19200
|
||||
|
||||
/* Alarm Thresholds */
|
||||
#define HEAP_LIMIT_WARNING 350
|
||||
#define HEAP_LIMIT_CRITICAL 250
|
||||
#define CPULOAD_LIMIT_WARNING 80
|
||||
#define CPULOAD_LIMIT_CRITICAL 95
|
||||
|
||||
/* Task stack sizes */
|
||||
#define PIOS_ACTUATOR_STACK_SIZE 1020
|
||||
#define PIOS_MANUAL_STACK_SIZE 724
|
||||
#define PIOS_SYSTEM_STACK_SIZE 504
|
||||
#define PIOS_STABILIZATION_STACK_SIZE 524
|
||||
#define PIOS_TELEM_STACK_SIZE 500
|
||||
|
||||
#define IDLE_COUNTS_PER_SEC_AT_NO_LOAD 1995998
|
||||
//#define PIOS_QUATERNION_STABILIZATION
|
||||
|
||||
#endif /* PIOS_CONFIG_H */
|
||||
/**
|
||||
* @}
|
||||
* @}
|
||||
*/
|
||||
/**
|
||||
******************************************************************************
|
||||
* @addtogroup OpenPilotSystem OpenPilot System
|
||||
* @{
|
||||
* @addtogroup OpenPilotCore OpenPilot Core
|
||||
* @{
|
||||
*
|
||||
* @file pios_config.h
|
||||
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
|
||||
* @brief PiOS configuration header.
|
||||
* Central compile time config for the project.
|
||||
* In particular, pios_config.h is where you define which PiOS libraries
|
||||
* and features are included in the firmware.
|
||||
* @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
|
||||
*/
|
||||
|
||||
#ifndef PIOS_CONFIG_H
|
||||
#define PIOS_CONFIG_H
|
||||
|
||||
/* Enable/Disable PiOS Modules */
|
||||
#define PIOS_INCLUDE_ADC
|
||||
#define PIOS_INCLUDE_DELAY
|
||||
#if defined(USE_I2C)
|
||||
#define PIOS_INCLUDE_I2C
|
||||
#define PIOS_INCLUDE_I2C_ESC
|
||||
#endif
|
||||
#define PIOS_INCLUDE_IRQ
|
||||
#define PIOS_INCLUDE_LED
|
||||
|
||||
#define PIOS_INCLUDE_RCVR
|
||||
|
||||
/* Supported receiver interfaces */
|
||||
#define PIOS_INCLUDE_SPEKTRUM
|
||||
#define PIOS_INCLUDE_SBUS
|
||||
//#define PIOS_INCLUDE_PPM
|
||||
#define PIOS_INCLUDE_PWM
|
||||
|
||||
/* Supported USART-based PIOS modules */
|
||||
#define PIOS_INCLUDE_TELEMETRY_RF
|
||||
//#define PIOS_INCLUDE_GPS
|
||||
|
||||
#define PIOS_INCLUDE_SERVO
|
||||
#define PIOS_INCLUDE_SPI
|
||||
#define PIOS_INCLUDE_SYS
|
||||
#define PIOS_INCLUDE_USART
|
||||
#define PIOS_INCLUDE_USB_HID
|
||||
#define PIOS_INCLUDE_COM
|
||||
#define PIOS_INCLUDE_SETTINGS
|
||||
#define PIOS_INCLUDE_FREERTOS
|
||||
#define PIOS_INCLUDE_GPIO
|
||||
#define PIOS_INCLUDE_EXTI
|
||||
#define PIOS_INCLUDE_RTC
|
||||
#define PIOS_INCLUDE_WDG
|
||||
#define PIOS_INCLUDE_BL_HELPER
|
||||
|
||||
#define PIOS_INCLUDE_ADXL345
|
||||
#define PIOS_INCLUDE_FLASH
|
||||
|
||||
/* A really shitty setting saving implementation */
|
||||
#define PIOS_INCLUDE_FLASH_SECTOR_SETTINGS
|
||||
|
||||
/* Defaults for Logging */
|
||||
#define LOG_FILENAME "PIOS.LOG"
|
||||
#define STARTUP_LOG_ENABLED 1
|
||||
|
||||
/* COM Module */
|
||||
#define GPS_BAUDRATE 19200
|
||||
#define TELEM_BAUDRATE 19200
|
||||
#define AUXUART_ENABLED 0
|
||||
#define AUXUART_BAUDRATE 19200
|
||||
|
||||
/* Alarm Thresholds */
|
||||
#define HEAP_LIMIT_WARNING 220
|
||||
#define HEAP_LIMIT_CRITICAL 40
|
||||
#define IRQSTACK_LIMIT_WARNING 100
|
||||
#define IRQSTACK_LIMIT_CRITICAL 60
|
||||
#define CPULOAD_LIMIT_WARNING 85
|
||||
#define CPULOAD_LIMIT_CRITICAL 95
|
||||
|
||||
/* Task stack sizes */
|
||||
#define PIOS_ACTUATOR_STACK_SIZE 1020
|
||||
#define PIOS_MANUAL_STACK_SIZE 724
|
||||
#define PIOS_SYSTEM_STACK_SIZE 460
|
||||
#define PIOS_STABILIZATION_STACK_SIZE 524
|
||||
#define PIOS_TELEM_STACK_SIZE 500
|
||||
#define PIOS_EVENTDISPATCHER_STACK_SIZE 96
|
||||
#define IDLE_COUNTS_PER_SEC_AT_NO_LOAD 1995998
|
||||
//#define PIOS_QUATERNION_STABILIZATION
|
||||
|
||||
#endif /* PIOS_CONFIG_H */
|
||||
/**
|
||||
* @}
|
||||
* @}
|
||||
*/
|
||||
|
@ -30,10 +30,11 @@
|
||||
#include <pios.h>
|
||||
#include <openpilot.h>
|
||||
#include <uavobjectsinit.h>
|
||||
#include <hwsettings.h>
|
||||
#include <manualcontrolsettings.h>
|
||||
|
||||
#if defined(PIOS_INCLUDE_SPI)
|
||||
|
||||
|
||||
#include <pios_spi_priv.h>
|
||||
|
||||
/* Flash/Accel Interface
|
||||
@ -44,7 +45,7 @@
|
||||
void PIOS_SPI_flash_accel_irq_handler(void);
|
||||
void DMA1_Channel4_IRQHandler() __attribute__ ((alias ("PIOS_SPI_flash_accel_irq_handler")));
|
||||
void DMA1_Channel5_IRQHandler() __attribute__ ((alias ("PIOS_SPI_flash_accel_irq_handler")));
|
||||
const struct pios_spi_cfg pios_spi_flash_accel_cfg = {
|
||||
static const struct pios_spi_cfg pios_spi_flash_accel_cfg = {
|
||||
.regs = SPI2,
|
||||
.init = {
|
||||
.SPI_Mode = SPI_Mode_Master,
|
||||
@ -62,7 +63,6 @@ const struct pios_spi_cfg pios_spi_flash_accel_cfg = {
|
||||
.ahb_clk = RCC_AHBPeriph_DMA1,
|
||||
|
||||
.irq = {
|
||||
.handler = PIOS_SPI_flash_accel_irq_handler,
|
||||
.flags = (DMA1_FLAG_TC4 | DMA1_FLAG_TE4 | DMA1_FLAG_HT4 | DMA1_FLAG_GL4),
|
||||
.init = {
|
||||
.NVIC_IRQChannel = DMA1_Channel4_IRQn,
|
||||
@ -151,11 +151,10 @@ void PIOS_SPI_flash_accel_irq_handler(void)
|
||||
extern void PIOS_ADC_handler(void);
|
||||
void DMA1_Channel1_IRQHandler() __attribute__ ((alias("PIOS_ADC_handler")));
|
||||
// Remap the ADC DMA handler to this one
|
||||
const struct pios_adc_cfg pios_adc_cfg = {
|
||||
static const struct pios_adc_cfg pios_adc_cfg = {
|
||||
.dma = {
|
||||
.ahb_clk = RCC_AHBPeriph_DMA1,
|
||||
.irq = {
|
||||
.handler = PIOS_ADC_DMA_Handler,
|
||||
.flags = (DMA1_FLAG_TC1 | DMA1_FLAG_TE1 | DMA1_FLAG_HT1 | DMA1_FLAG_GL1),
|
||||
.init = {
|
||||
.NVIC_IRQChannel = DMA1_Channel1_IRQn,
|
||||
@ -200,19 +199,14 @@ void PIOS_ADC_handler() {
|
||||
|
||||
#include "pios_usart_priv.h"
|
||||
|
||||
#if defined(PIOS_INCLUDE_TELEMETRY_RF)
|
||||
/*
|
||||
* Telemetry USART
|
||||
*/
|
||||
void PIOS_USART_telem_irq_handler(void);
|
||||
void USART1_IRQHandler() __attribute__ ((alias ("PIOS_USART_telem_irq_handler")));
|
||||
const struct pios_usart_cfg pios_usart_telem_cfg = {
|
||||
static const struct pios_usart_cfg pios_usart_telem_main_cfg = {
|
||||
.regs = USART1,
|
||||
.init = {
|
||||
#if defined (PIOS_COM_TELEM_BAUDRATE)
|
||||
.USART_BaudRate = PIOS_COM_TELEM_BAUDRATE,
|
||||
#else
|
||||
.USART_BaudRate = 57600,
|
||||
#endif
|
||||
.USART_BaudRate = 57600,
|
||||
.USART_WordLength = USART_WordLength_8b,
|
||||
.USART_Parity = USART_Parity_No,
|
||||
.USART_StopBits = USART_StopBits_1,
|
||||
@ -220,7 +214,6 @@ const struct pios_usart_cfg pios_usart_telem_cfg = {
|
||||
.USART_Mode = USART_Mode_Rx | USART_Mode_Tx,
|
||||
},
|
||||
.irq = {
|
||||
.handler = PIOS_USART_telem_irq_handler,
|
||||
.init = {
|
||||
.NVIC_IRQChannel = USART1_IRQn,
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_MID,
|
||||
@ -246,20 +239,10 @@ const struct pios_usart_cfg pios_usart_telem_cfg = {
|
||||
},
|
||||
};
|
||||
|
||||
#if defined(PIOS_INCLUDE_GPS)
|
||||
/*
|
||||
* GPS USART
|
||||
*/
|
||||
void PIOS_USART_gps_irq_handler(void);
|
||||
void USART3_IRQHandler() __attribute__ ((alias ("PIOS_USART_gps_irq_handler")));
|
||||
const struct pios_usart_cfg pios_usart_gps_cfg = {
|
||||
.regs = USART3,
|
||||
static const struct pios_usart_cfg pios_usart_telem_flexi_cfg = {
|
||||
.regs = USART3,
|
||||
.init = {
|
||||
#if defined (PIOS_COM_GPS_BAUDRATE)
|
||||
.USART_BaudRate = PIOS_COM_GPS_BAUDRATE,
|
||||
#else
|
||||
.USART_BaudRate = 57600,
|
||||
#endif
|
||||
.USART_BaudRate = 57600,
|
||||
.USART_WordLength = USART_WordLength_8b,
|
||||
.USART_Parity = USART_Parity_No,
|
||||
.USART_StopBits = USART_StopBits_1,
|
||||
@ -267,7 +250,6 @@ const struct pios_usart_cfg pios_usart_gps_cfg = {
|
||||
.USART_Mode = USART_Mode_Rx | USART_Mode_Tx,
|
||||
},
|
||||
.irq = {
|
||||
.handler = PIOS_USART_gps_irq_handler,
|
||||
.init = {
|
||||
.NVIC_IRQChannel = USART3_IRQn,
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_MID,
|
||||
@ -292,22 +274,143 @@ const struct pios_usart_cfg pios_usart_gps_cfg = {
|
||||
},
|
||||
},
|
||||
};
|
||||
#endif
|
||||
#endif /* PIOS_INCLUDE_TELEMETRY_RF */
|
||||
|
||||
#if defined(PIOS_INCLUDE_GPS)
|
||||
/*
|
||||
* GPS USART
|
||||
*/
|
||||
static const struct pios_usart_cfg pios_usart_gps_main_cfg = {
|
||||
.regs = USART1,
|
||||
.init = {
|
||||
.USART_BaudRate = 57600,
|
||||
.USART_WordLength = USART_WordLength_8b,
|
||||
.USART_Parity = USART_Parity_No,
|
||||
.USART_StopBits = USART_StopBits_1,
|
||||
.USART_HardwareFlowControl = USART_HardwareFlowControl_None,
|
||||
.USART_Mode = USART_Mode_Rx | USART_Mode_Tx,
|
||||
},
|
||||
.irq = {
|
||||
.init = {
|
||||
.NVIC_IRQChannel = USART1_IRQn,
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_MID,
|
||||
.NVIC_IRQChannelSubPriority = 0,
|
||||
.NVIC_IRQChannelCmd = ENABLE,
|
||||
},
|
||||
},
|
||||
.rx = {
|
||||
.gpio = GPIOA,
|
||||
.init = {
|
||||
.GPIO_Pin = GPIO_Pin_10,
|
||||
.GPIO_Speed = GPIO_Speed_2MHz,
|
||||
.GPIO_Mode = GPIO_Mode_IPU,
|
||||
},
|
||||
},
|
||||
.tx = {
|
||||
.gpio = GPIOA,
|
||||
.init = {
|
||||
.GPIO_Pin = GPIO_Pin_9,
|
||||
.GPIO_Speed = GPIO_Speed_2MHz,
|
||||
.GPIO_Mode = GPIO_Mode_AF_PP,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
static const struct pios_usart_cfg pios_usart_gps_flexi_cfg = {
|
||||
.regs = USART3,
|
||||
.init = {
|
||||
.USART_BaudRate = 57600,
|
||||
.USART_WordLength = USART_WordLength_8b,
|
||||
.USART_Parity = USART_Parity_No,
|
||||
.USART_StopBits = USART_StopBits_1,
|
||||
.USART_HardwareFlowControl = USART_HardwareFlowControl_None,
|
||||
.USART_Mode = USART_Mode_Rx | USART_Mode_Tx,
|
||||
},
|
||||
.irq = {
|
||||
.init = {
|
||||
.NVIC_IRQChannel = USART3_IRQn,
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_MID,
|
||||
.NVIC_IRQChannelSubPriority = 0,
|
||||
.NVIC_IRQChannelCmd = ENABLE,
|
||||
},
|
||||
},
|
||||
.rx = {
|
||||
.gpio = GPIOB,
|
||||
.init = {
|
||||
.GPIO_Pin = GPIO_Pin_11,
|
||||
.GPIO_Speed = GPIO_Speed_2MHz,
|
||||
.GPIO_Mode = GPIO_Mode_IPU,
|
||||
},
|
||||
},
|
||||
.tx = {
|
||||
.gpio = GPIOB,
|
||||
.init = {
|
||||
.GPIO_Pin = GPIO_Pin_10,
|
||||
.GPIO_Speed = GPIO_Speed_2MHz,
|
||||
.GPIO_Mode = GPIO_Mode_AF_PP,
|
||||
},
|
||||
},
|
||||
};
|
||||
#endif /* PIOS_INCLUDE_GPS */
|
||||
|
||||
#if defined(PIOS_INCLUDE_SPEKTRUM)
|
||||
/*
|
||||
* SPEKTRUM USART
|
||||
*/
|
||||
void PIOS_USART_spektrum_irq_handler(void);
|
||||
void USART3_IRQHandler() __attribute__ ((alias ("PIOS_USART_spektrum_irq_handler")));
|
||||
const struct pios_usart_cfg pios_usart_spektrum_cfg = {
|
||||
.regs = USART3,
|
||||
#include <pios_spektrum_priv.h>
|
||||
|
||||
static const struct pios_usart_cfg pios_usart_spektrum_main_cfg = {
|
||||
.regs = USART1,
|
||||
.init = {
|
||||
#if defined (PIOS_COM_SPEKTRUM_BAUDRATE)
|
||||
.USART_BaudRate = PIOS_COM_SPEKTRUM_BAUDRATE,
|
||||
#else
|
||||
.USART_BaudRate = 115200,
|
||||
#endif
|
||||
.USART_BaudRate = 115200,
|
||||
.USART_WordLength = USART_WordLength_8b,
|
||||
.USART_Parity = USART_Parity_No,
|
||||
.USART_StopBits = USART_StopBits_1,
|
||||
.USART_HardwareFlowControl = USART_HardwareFlowControl_None,
|
||||
.USART_Mode = USART_Mode_Rx,
|
||||
},
|
||||
.irq = {
|
||||
.init = {
|
||||
.NVIC_IRQChannel = USART1_IRQn,
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_HIGH,
|
||||
.NVIC_IRQChannelSubPriority = 0,
|
||||
.NVIC_IRQChannelCmd = ENABLE,
|
||||
},
|
||||
},
|
||||
.rx = {
|
||||
.gpio = GPIOA,
|
||||
.init = {
|
||||
.GPIO_Pin = GPIO_Pin_10,
|
||||
.GPIO_Speed = GPIO_Speed_2MHz,
|
||||
.GPIO_Mode = GPIO_Mode_IPU,
|
||||
},
|
||||
},
|
||||
.tx = {
|
||||
.gpio = GPIOA,
|
||||
.init = {
|
||||
.GPIO_Pin = GPIO_Pin_9,
|
||||
.GPIO_Speed = GPIO_Speed_2MHz,
|
||||
.GPIO_Mode = GPIO_Mode_IN_FLOATING,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
static const struct pios_spektrum_cfg pios_spektrum_main_cfg = {
|
||||
.bind = {
|
||||
.gpio = GPIOA,
|
||||
.init = {
|
||||
.GPIO_Pin = GPIO_Pin_10,
|
||||
.GPIO_Speed = GPIO_Speed_2MHz,
|
||||
.GPIO_Mode = GPIO_Mode_Out_PP,
|
||||
},
|
||||
},
|
||||
.remap = 0,
|
||||
};
|
||||
|
||||
static const struct pios_usart_cfg pios_usart_spektrum_flexi_cfg = {
|
||||
.regs = USART3,
|
||||
.init = {
|
||||
.USART_BaudRate = 115200,
|
||||
.USART_WordLength = USART_WordLength_8b,
|
||||
.USART_Parity = USART_Parity_No,
|
||||
.USART_StopBits = USART_StopBits_1,
|
||||
@ -315,7 +418,6 @@ const struct pios_usart_cfg pios_usart_spektrum_cfg = {
|
||||
.USART_Mode = USART_Mode_Rx,
|
||||
},
|
||||
.irq = {
|
||||
.handler = PIOS_USART_spektrum_irq_handler,
|
||||
.init = {
|
||||
.NVIC_IRQChannel = USART3_IRQn,
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_HIGH,
|
||||
@ -341,76 +443,128 @@ const struct pios_usart_cfg pios_usart_spektrum_cfg = {
|
||||
},
|
||||
};
|
||||
|
||||
static uint32_t pios_usart_spektrum_id;
|
||||
void PIOS_USART_spektrum_irq_handler(void)
|
||||
{
|
||||
SPEKTRUM_IRQHandler(pios_usart_spektrum_id);
|
||||
}
|
||||
|
||||
#include <pios_spektrum_priv.h>
|
||||
void TIM2_IRQHandler();
|
||||
void TIM2_IRQHandler() __attribute__ ((alias ("PIOS_TIM2_irq_handler")));
|
||||
const struct pios_spektrum_cfg pios_spektrum_cfg = {
|
||||
.pios_usart_spektrum_cfg = &pios_usart_spektrum_cfg,
|
||||
.tim_base_init = {
|
||||
.TIM_Prescaler = (PIOS_MASTER_CLOCK / 1000000) - 1, /* For 1 uS accuracy */
|
||||
.TIM_ClockDivision = TIM_CKD_DIV1,
|
||||
.TIM_CounterMode = TIM_CounterMode_Up,
|
||||
.TIM_Period = ((1000000 / 120) - 1), //11ms-10*16b/115200bps atleast one interrupt between frames
|
||||
.TIM_RepetitionCounter = 0x0000,
|
||||
},
|
||||
.gpio_init = { //used for bind feature
|
||||
.GPIO_Mode = GPIO_Mode_Out_PP,
|
||||
.GPIO_Speed = GPIO_Speed_2MHz,
|
||||
},
|
||||
.remap = 0,
|
||||
.irq = {
|
||||
.handler = TIM2_IRQHandler,
|
||||
.init = {
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_MID,
|
||||
.NVIC_IRQChannelSubPriority = 0,
|
||||
.NVIC_IRQChannelCmd = ENABLE,
|
||||
static const struct pios_spektrum_cfg pios_spektrum_flexi_cfg = {
|
||||
.bind = {
|
||||
.gpio = GPIOB,
|
||||
.init = {
|
||||
.GPIO_Pin = GPIO_Pin_11,
|
||||
.GPIO_Speed = GPIO_Speed_2MHz,
|
||||
.GPIO_Mode = GPIO_Mode_Out_PP,
|
||||
},
|
||||
},
|
||||
.timer = TIM2,
|
||||
.port = GPIOB,
|
||||
.ccr = TIM_IT_Update,
|
||||
.pin = GPIO_Pin_11,
|
||||
.remap = 0,
|
||||
};
|
||||
|
||||
void PIOS_TIM2_irq_handler()
|
||||
{
|
||||
PIOS_SPEKTRUM_irq_handler(pios_usart_spektrum_id);
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_SPEKTRUM */
|
||||
|
||||
static uint32_t pios_usart_telem_rf_id;
|
||||
void PIOS_USART_telem_irq_handler(void)
|
||||
{
|
||||
PIOS_USART_IRQ_Handler(pios_usart_telem_rf_id);
|
||||
}
|
||||
#if defined(PIOS_INCLUDE_SBUS)
|
||||
/*
|
||||
* SBUS USART
|
||||
*/
|
||||
#include <pios_sbus_priv.h>
|
||||
|
||||
#if defined(PIOS_INCLUDE_GPS)
|
||||
static uint32_t pios_usart_gps_id;
|
||||
void PIOS_USART_gps_irq_handler(void)
|
||||
{
|
||||
PIOS_USART_IRQ_Handler(pios_usart_gps_id);
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_GPS */
|
||||
static const struct pios_usart_cfg pios_usart_sbus_main_cfg = {
|
||||
.regs = USART1,
|
||||
.init = {
|
||||
.USART_BaudRate = 100000,
|
||||
.USART_WordLength = USART_WordLength_8b,
|
||||
.USART_Parity = USART_Parity_Even,
|
||||
.USART_StopBits = USART_StopBits_2,
|
||||
.USART_HardwareFlowControl = USART_HardwareFlowControl_None,
|
||||
.USART_Mode = USART_Mode_Rx,
|
||||
},
|
||||
.irq = {
|
||||
.init = {
|
||||
.NVIC_IRQChannel = USART1_IRQn,
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_HIGH,
|
||||
.NVIC_IRQChannelSubPriority = 0,
|
||||
.NVIC_IRQChannelCmd = ENABLE,
|
||||
},
|
||||
},
|
||||
.rx = {
|
||||
.gpio = GPIOA,
|
||||
.init = {
|
||||
.GPIO_Pin = GPIO_Pin_10,
|
||||
.GPIO_Speed = GPIO_Speed_2MHz,
|
||||
.GPIO_Mode = GPIO_Mode_IPU,
|
||||
},
|
||||
},
|
||||
.tx = {
|
||||
.gpio = GPIOA,
|
||||
.init = {
|
||||
.GPIO_Pin = GPIO_Pin_9,
|
||||
.GPIO_Speed = GPIO_Speed_2MHz,
|
||||
.GPIO_Mode = GPIO_Mode_IN_FLOATING,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
#endif /* PIOS_INCLUDE_USART */
|
||||
static const struct pios_sbus_cfg pios_sbus_cfg = {
|
||||
/* Inverter configuration */
|
||||
.inv = {
|
||||
.gpio = GPIOB,
|
||||
.init = {
|
||||
.GPIO_Pin = GPIO_Pin_2,
|
||||
.GPIO_Mode = GPIO_Mode_Out_PP,
|
||||
.GPIO_Speed = GPIO_Speed_2MHz,
|
||||
},
|
||||
},
|
||||
.gpio_clk_func = RCC_APB2PeriphClockCmd,
|
||||
.gpio_clk_periph = RCC_APB2Periph_GPIOB,
|
||||
.gpio_inv_enable = Bit_SET,
|
||||
};
|
||||
|
||||
#endif /* PIOS_INCLUDE_SBUS */
|
||||
|
||||
#endif /* PIOS_INCLUDE_USART */
|
||||
|
||||
#if defined(PIOS_INCLUDE_COM)
|
||||
|
||||
#include "pios_com_priv.h"
|
||||
|
||||
#define PIOS_COM_TELEM_RF_RX_BUF_LEN 192
|
||||
#define PIOS_COM_TELEM_RF_TX_BUF_LEN 192
|
||||
|
||||
#define PIOS_COM_GPS_RX_BUF_LEN 96
|
||||
|
||||
#define PIOS_COM_TELEM_USB_RX_BUF_LEN 192
|
||||
#define PIOS_COM_TELEM_USB_TX_BUF_LEN 192
|
||||
|
||||
#endif /* PIOS_INCLUDE_COM */
|
||||
|
||||
#if defined(PIOS_INCLUDE_RTC)
|
||||
/*
|
||||
* Realtime Clock (RTC)
|
||||
*/
|
||||
#include <pios_rtc_priv.h>
|
||||
|
||||
void PIOS_RTC_IRQ_Handler (void);
|
||||
void RTC_IRQHandler() __attribute__ ((alias ("PIOS_RTC_IRQ_Handler")));
|
||||
static const struct pios_rtc_cfg pios_rtc_main_cfg = {
|
||||
.clksrc = RCC_RTCCLKSource_HSE_Div128,
|
||||
.prescaler = 100,
|
||||
.irq = {
|
||||
.init = {
|
||||
.NVIC_IRQChannel = RTC_IRQn,
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_MID,
|
||||
.NVIC_IRQChannelSubPriority = 0,
|
||||
.NVIC_IRQChannelCmd = ENABLE,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
void PIOS_RTC_IRQ_Handler (void)
|
||||
{
|
||||
PIOS_RTC_irq_handler ();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Servo outputs
|
||||
*/
|
||||
#include <pios_servo_priv.h>
|
||||
const struct pios_servo_channel pios_servo_channels[] = {
|
||||
static const struct pios_servo_channel pios_servo_channels[] = {
|
||||
{
|
||||
.timer = TIM4,
|
||||
.port = GPIOB,
|
||||
@ -441,14 +595,12 @@ const struct pios_servo_channel pios_servo_channels[] = {
|
||||
.channel = TIM_Channel_1,
|
||||
.pin = GPIO_Pin_4,
|
||||
},
|
||||
#ifndef PIOS_INCLUDE_SPEKTRUM
|
||||
{
|
||||
.timer = TIM2,
|
||||
.port = GPIOA,
|
||||
.channel = TIM_Channel_3,
|
||||
.pin = GPIO_Pin_2,
|
||||
},
|
||||
#endif
|
||||
};
|
||||
|
||||
const struct pios_servo_cfg pios_servo_cfg = {
|
||||
@ -478,13 +630,64 @@ const struct pios_servo_cfg pios_servo_cfg = {
|
||||
.num_channels = NELEMENTS(pios_servo_channels),
|
||||
};
|
||||
|
||||
#if defined(PIOS_INCLUDE_PWM) && defined(PIOS_INCLUDE_PPM)
|
||||
#error Cannot define both PIOS_INCLUDE_PWM and PIOS_INCLUDE_PPM at the same time (yet)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* PPM Inputs
|
||||
*/
|
||||
#if defined(PIOS_INCLUDE_PPM)
|
||||
#include <pios_ppm_priv.h>
|
||||
|
||||
void TIM4_IRQHandler();
|
||||
void TIM4_IRQHandler() __attribute__ ((alias ("PIOS_TIM4_irq_handler")));
|
||||
const struct pios_ppm_cfg pios_ppm_cfg = {
|
||||
.tim_base_init = {
|
||||
.TIM_Prescaler = (PIOS_MASTER_CLOCK / 1000000) - 1, /* For 1 uS accuracy */
|
||||
.TIM_ClockDivision = TIM_CKD_DIV1,
|
||||
.TIM_CounterMode = TIM_CounterMode_Up,
|
||||
.TIM_Period = 0xFFFF, /* shared timer, make sure init correctly in outputs */
|
||||
.TIM_RepetitionCounter = 0x0000,
|
||||
},
|
||||
.tim_ic_init = {
|
||||
.TIM_Channel = TIM_Channel_1,
|
||||
.TIM_ICPolarity = TIM_ICPolarity_Rising,
|
||||
.TIM_ICSelection = TIM_ICSelection_DirectTI,
|
||||
.TIM_ICPrescaler = TIM_ICPSC_DIV1,
|
||||
.TIM_ICFilter = 0x0,
|
||||
},
|
||||
.gpio_init = {
|
||||
.GPIO_Pin = GPIO_Pin_6,
|
||||
.GPIO_Mode = GPIO_Mode_IPD,
|
||||
.GPIO_Speed = GPIO_Speed_2MHz,
|
||||
},
|
||||
.remap = 0,
|
||||
.irq = {
|
||||
.init = {
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_MID,
|
||||
.NVIC_IRQChannelSubPriority = 0,
|
||||
.NVIC_IRQChannelCmd = ENABLE,
|
||||
},
|
||||
},
|
||||
.timer = TIM4,
|
||||
.port = GPIOB,
|
||||
.ccr = TIM_IT_CC1,
|
||||
};
|
||||
|
||||
void PIOS_TIM4_irq_handler()
|
||||
{
|
||||
PIOS_PPM_irq_handler();
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_PPM */
|
||||
|
||||
/*
|
||||
* PWM Inputs
|
||||
*/
|
||||
#if defined(PIOS_INCLUDE_PWM)
|
||||
#include <pios_pwm_priv.h>
|
||||
const struct pios_pwm_channel pios_pwm_channels[] = {
|
||||
|
||||
static const struct pios_pwm_channel pios_pwm_channels[] = {
|
||||
{
|
||||
.timer = TIM4,
|
||||
.port = GPIOB,
|
||||
@ -555,7 +758,6 @@ const struct pios_pwm_cfg pios_pwm_cfg = {
|
||||
},
|
||||
.remap = 0,
|
||||
.irq = {
|
||||
.handler = TIM2_IRQHandler,
|
||||
.init = {
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_MID,
|
||||
.NVIC_IRQChannelSubPriority = 0,
|
||||
@ -592,7 +794,7 @@ void PIOS_I2C_main_adapter_er_irq_handler(void);
|
||||
void I2C2_EV_IRQHandler() __attribute__ ((alias ("PIOS_I2C_main_adapter_ev_irq_handler")));
|
||||
void I2C2_ER_IRQHandler() __attribute__ ((alias ("PIOS_I2C_main_adapter_er_irq_handler")));
|
||||
|
||||
const struct pios_i2c_adapter_cfg pios_i2c_main_adapter_cfg = {
|
||||
static const struct pios_i2c_adapter_cfg pios_i2c_main_adapter_cfg = {
|
||||
.regs = I2C2,
|
||||
.init = {
|
||||
.I2C_Mode = I2C_Mode_I2C,
|
||||
@ -620,7 +822,6 @@ const struct pios_i2c_adapter_cfg pios_i2c_main_adapter_cfg = {
|
||||
},
|
||||
},
|
||||
.event = {
|
||||
.handler = PIOS_I2C_main_adapter_ev_irq_handler,
|
||||
.flags = 0, /* FIXME: check this */
|
||||
.init = {
|
||||
.NVIC_IRQChannel = I2C2_EV_IRQn,
|
||||
@ -630,7 +831,6 @@ const struct pios_i2c_adapter_cfg pios_i2c_main_adapter_cfg = {
|
||||
},
|
||||
},
|
||||
.error = {
|
||||
.handler = PIOS_I2C_main_adapter_er_irq_handler,
|
||||
.flags = 0, /* FIXME: check this */
|
||||
.init = {
|
||||
.NVIC_IRQChannel = I2C2_ER_IRQn,
|
||||
@ -656,12 +856,33 @@ void PIOS_I2C_main_adapter_er_irq_handler(void)
|
||||
|
||||
#endif /* PIOS_INCLUDE_I2C */
|
||||
|
||||
#if defined(PIOS_INCLUDE_RCVR)
|
||||
#include "pios_rcvr_priv.h"
|
||||
|
||||
struct pios_rcvr_channel_map pios_rcvr_channel_to_id_map[PIOS_RCVR_MAX_CHANNELS];
|
||||
uint32_t pios_rcvr_max_channel;
|
||||
#endif /* PIOS_INCLUDE_RCVR */
|
||||
|
||||
#if defined(PIOS_INCLUDE_USB_HID)
|
||||
#include "pios_usb_hid_priv.h"
|
||||
|
||||
static const struct pios_usb_hid_cfg pios_usb_hid_main_cfg = {
|
||||
.irq = {
|
||||
.init = {
|
||||
.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn,
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_LOW,
|
||||
.NVIC_IRQChannelSubPriority = 0,
|
||||
.NVIC_IRQChannelCmd = ENABLE,
|
||||
},
|
||||
},
|
||||
};
|
||||
#endif /* PIOS_INCLUDE_USB_HID */
|
||||
|
||||
extern const struct pios_com_driver pios_usb_com_driver;
|
||||
|
||||
uint32_t pios_com_telem_rf_id;
|
||||
uint32_t pios_com_telem_usb_id;
|
||||
uint32_t pios_com_gps_id;
|
||||
uint32_t pios_com_spektrum_id;
|
||||
|
||||
/**
|
||||
* PIOS_Board_Init()
|
||||
@ -671,57 +892,257 @@ uint32_t pios_com_spektrum_id;
|
||||
void PIOS_Board_Init(void) {
|
||||
|
||||
/* Delay system */
|
||||
PIOS_DELAY_Init();
|
||||
|
||||
PIOS_DELAY_Init();
|
||||
|
||||
/* Set up the SPI interface to the serial flash */
|
||||
if (PIOS_SPI_Init(&pios_spi_flash_accel_id, &pios_spi_flash_accel_cfg)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
|
||||
PIOS_Flash_W25X_Init(pios_spi_flash_accel_id);
|
||||
PIOS_ADXL345_Attach(pios_spi_flash_accel_id);
|
||||
|
||||
|
||||
PIOS_FLASHFS_Init();
|
||||
|
||||
#if defined(PIOS_INCLUDE_SPEKTRUM)
|
||||
/* SPEKTRUM init must come before comms */
|
||||
PIOS_SPEKTRUM_Init();
|
||||
|
||||
if (PIOS_USART_Init(&pios_usart_spektrum_id, &pios_usart_spektrum_cfg)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
}
|
||||
if (PIOS_COM_Init(&pios_com_spektrum_id, &pios_usart_com_driver, pios_usart_spektrum_id)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
}
|
||||
#endif
|
||||
/* Initialize UAVObject libraries */
|
||||
EventDispatcherInitialize();
|
||||
UAVObjInitialize();
|
||||
UAVObjectsInitializeAll();
|
||||
|
||||
#if defined(PIOS_INCLUDE_RTC)
|
||||
/* Initialize the real-time clock and its associated tick */
|
||||
PIOS_RTC_Init(&pios_rtc_main_cfg);
|
||||
#endif
|
||||
|
||||
/* Initialize the alarms library */
|
||||
AlarmsInitialize();
|
||||
|
||||
/* Initialize the task monitor library */
|
||||
TaskMonitorInitialize();
|
||||
|
||||
/* Initialize the PiOS library */
|
||||
#if defined(PIOS_INCLUDE_COM)
|
||||
if (PIOS_USART_Init(&pios_usart_telem_rf_id, &pios_usart_telem_cfg)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
}
|
||||
if (PIOS_COM_Init(&pios_com_telem_rf_id, &pios_usart_com_driver, pios_usart_telem_rf_id)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
}
|
||||
/* Configure the main IO port */
|
||||
uint8_t hwsettings_cc_mainport;
|
||||
HwSettingsCC_MainPortGet(&hwsettings_cc_mainport);
|
||||
|
||||
switch (hwsettings_cc_mainport) {
|
||||
case HWSETTINGS_CC_MAINPORT_DISABLED:
|
||||
break;
|
||||
case HWSETTINGS_CC_MAINPORT_TELEMETRY:
|
||||
#if defined(PIOS_INCLUDE_TELEMETRY_RF)
|
||||
{
|
||||
uint32_t pios_usart_telem_rf_id;
|
||||
if (PIOS_USART_Init(&pios_usart_telem_rf_id, &pios_usart_telem_main_cfg)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
|
||||
uint8_t * rx_buffer = (uint8_t *) pvPortMalloc(PIOS_COM_TELEM_RF_RX_BUF_LEN);
|
||||
uint8_t * tx_buffer = (uint8_t *) pvPortMalloc(PIOS_COM_TELEM_RF_TX_BUF_LEN);
|
||||
PIOS_Assert(rx_buffer);
|
||||
PIOS_Assert(tx_buffer);
|
||||
if (PIOS_COM_Init(&pios_com_telem_rf_id, &pios_usart_com_driver, pios_usart_telem_rf_id,
|
||||
rx_buffer, PIOS_COM_TELEM_RF_RX_BUF_LEN,
|
||||
tx_buffer, PIOS_COM_TELEM_RF_TX_BUF_LEN)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_TELEMETRY_RF */
|
||||
break;
|
||||
case HWSETTINGS_CC_MAINPORT_SBUS:
|
||||
#if defined(PIOS_INCLUDE_SBUS)
|
||||
{
|
||||
uint32_t pios_usart_sbus_id;
|
||||
if (PIOS_USART_Init(&pios_usart_sbus_id, &pios_usart_sbus_main_cfg)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
|
||||
uint32_t pios_sbus_id;
|
||||
if (PIOS_SBUS_Init(&pios_sbus_id, &pios_sbus_cfg, &pios_usart_com_driver, pios_usart_sbus_id)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_SBUS */
|
||||
break;
|
||||
case HWSETTINGS_CC_MAINPORT_GPS:
|
||||
#if defined(PIOS_INCLUDE_GPS)
|
||||
if (PIOS_USART_Init(&pios_usart_gps_id, &pios_usart_gps_cfg)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
}
|
||||
if (PIOS_COM_Init(&pios_com_gps_id, &pios_usart_com_driver, pios_usart_gps_id)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
}
|
||||
{
|
||||
uint32_t pios_usart_gps_id;
|
||||
if (PIOS_USART_Init(&pios_usart_gps_id, &pios_usart_gps_main_cfg)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
|
||||
uint8_t * rx_buffer = (uint8_t *) pvPortMalloc(PIOS_COM_GPS_RX_BUF_LEN);
|
||||
PIOS_Assert(rx_buffer);
|
||||
if (PIOS_COM_Init(&pios_com_gps_id, &pios_usart_com_driver, pios_usart_gps_id,
|
||||
rx_buffer, PIOS_COM_GPS_RX_BUF_LEN,
|
||||
NULL, 0)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_GPS */
|
||||
#endif /* PIOS_INCLUDE_COM */
|
||||
break;
|
||||
case HWSETTINGS_CC_MAINPORT_SPEKTRUM:
|
||||
#if defined(PIOS_INCLUDE_SPEKTRUM)
|
||||
{
|
||||
uint32_t pios_usart_spektrum_id;
|
||||
if (PIOS_USART_Init(&pios_usart_spektrum_id, &pios_usart_spektrum_main_cfg)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
|
||||
uint32_t pios_spektrum_id;
|
||||
if (PIOS_SPEKTRUM_Init(&pios_spektrum_id, &pios_spektrum_main_cfg, &pios_usart_com_driver, pios_usart_spektrum_id, false)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_SPEKTRUM */
|
||||
break;
|
||||
case HWSETTINGS_CC_MAINPORT_COMAUX:
|
||||
break;
|
||||
}
|
||||
|
||||
/* Configure the flexi port */
|
||||
uint8_t hwsettings_cc_flexiport;
|
||||
HwSettingsCC_FlexiPortGet(&hwsettings_cc_flexiport);
|
||||
|
||||
switch (hwsettings_cc_flexiport) {
|
||||
case HWSETTINGS_CC_FLEXIPORT_DISABLED:
|
||||
break;
|
||||
case HWSETTINGS_CC_FLEXIPORT_TELEMETRY:
|
||||
#if defined(PIOS_INCLUDE_TELEMETRY_RF)
|
||||
{
|
||||
uint32_t pios_usart_telem_rf_id;
|
||||
if (PIOS_USART_Init(&pios_usart_telem_rf_id, &pios_usart_telem_flexi_cfg)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
uint8_t * rx_buffer = (uint8_t *) pvPortMalloc(PIOS_COM_TELEM_RF_RX_BUF_LEN);
|
||||
uint8_t * tx_buffer = (uint8_t *) pvPortMalloc(PIOS_COM_TELEM_RF_TX_BUF_LEN);
|
||||
PIOS_Assert(rx_buffer);
|
||||
PIOS_Assert(tx_buffer);
|
||||
if (PIOS_COM_Init(&pios_com_telem_rf_id, &pios_usart_com_driver, pios_usart_telem_rf_id,
|
||||
rx_buffer, PIOS_COM_TELEM_RF_RX_BUF_LEN,
|
||||
tx_buffer, PIOS_COM_TELEM_RF_TX_BUF_LEN)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_TELEMETRY_RF */
|
||||
break;
|
||||
case HWSETTINGS_CC_FLEXIPORT_GPS:
|
||||
#if defined(PIOS_INCLUDE_GPS)
|
||||
{
|
||||
uint32_t pios_usart_gps_id;
|
||||
if (PIOS_USART_Init(&pios_usart_gps_id, &pios_usart_gps_flexi_cfg)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
uint8_t * rx_buffer = (uint8_t *) pvPortMalloc(PIOS_COM_GPS_RX_BUF_LEN);
|
||||
PIOS_Assert(rx_buffer);
|
||||
if (PIOS_COM_Init(&pios_com_gps_id, &pios_usart_com_driver, pios_usart_gps_id,
|
||||
rx_buffer, PIOS_COM_GPS_RX_BUF_LEN,
|
||||
NULL, 0)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_GPS */
|
||||
break;
|
||||
case HWSETTINGS_CC_FLEXIPORT_SPEKTRUM:
|
||||
#if defined(PIOS_INCLUDE_SPEKTRUM)
|
||||
{
|
||||
uint32_t pios_usart_spektrum_id;
|
||||
if (PIOS_USART_Init(&pios_usart_spektrum_id, &pios_usart_spektrum_flexi_cfg)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
|
||||
uint32_t pios_spektrum_id;
|
||||
if (PIOS_SPEKTRUM_Init(&pios_spektrum_id, &pios_spektrum_flexi_cfg, &pios_usart_com_driver, pios_usart_spektrum_id, false)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_SPEKTRUM */
|
||||
break;
|
||||
case HWSETTINGS_CC_FLEXIPORT_COMAUX:
|
||||
break;
|
||||
case HWSETTINGS_CC_FLEXIPORT_I2C:
|
||||
#if defined(PIOS_INCLUDE_I2C)
|
||||
{
|
||||
if (PIOS_I2C_Init(&pios_i2c_main_adapter_id, &pios_i2c_main_adapter_cfg)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_I2C */
|
||||
break;
|
||||
}
|
||||
|
||||
/* Configure the selected receiver */
|
||||
uint8_t manualcontrolsettings_inputmode;
|
||||
ManualControlSettingsInputModeGet(&manualcontrolsettings_inputmode);
|
||||
|
||||
switch (manualcontrolsettings_inputmode) {
|
||||
case MANUALCONTROLSETTINGS_INPUTMODE_PWM:
|
||||
#if defined(PIOS_INCLUDE_PWM)
|
||||
PIOS_PWM_Init();
|
||||
uint32_t pios_pwm_rcvr_id;
|
||||
if (PIOS_RCVR_Init(&pios_pwm_rcvr_id, &pios_pwm_rcvr_driver, 0)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
for (uint8_t i = 0;
|
||||
i < PIOS_PWM_NUM_INPUTS && pios_rcvr_max_channel < NELEMENTS(pios_rcvr_channel_to_id_map);
|
||||
i++) {
|
||||
pios_rcvr_channel_to_id_map[pios_rcvr_max_channel].id = pios_pwm_rcvr_id;
|
||||
pios_rcvr_channel_to_id_map[pios_rcvr_max_channel].channel = i;
|
||||
pios_rcvr_max_channel++;
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_PWM */
|
||||
break;
|
||||
case MANUALCONTROLSETTINGS_INPUTMODE_PPM:
|
||||
#if defined(PIOS_INCLUDE_PPM)
|
||||
PIOS_PPM_Init();
|
||||
uint32_t pios_ppm_rcvr_id;
|
||||
if (PIOS_RCVR_Init(&pios_ppm_rcvr_id, &pios_ppm_rcvr_driver, 0)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
for (uint8_t i = 0;
|
||||
i < PIOS_PPM_NUM_INPUTS && pios_rcvr_max_channel < NELEMENTS(pios_rcvr_channel_to_id_map);
|
||||
i++) {
|
||||
pios_rcvr_channel_to_id_map[pios_rcvr_max_channel].id = pios_ppm_rcvr_id;
|
||||
pios_rcvr_channel_to_id_map[pios_rcvr_max_channel].channel = i;
|
||||
pios_rcvr_max_channel++;
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_PPM */
|
||||
break;
|
||||
case MANUALCONTROLSETTINGS_INPUTMODE_SPEKTRUM:
|
||||
#if defined(PIOS_INCLUDE_SPEKTRUM)
|
||||
if (hwsettings_cc_mainport == HWSETTINGS_CC_MAINPORT_SPEKTRUM ||
|
||||
hwsettings_cc_flexiport == HWSETTINGS_CC_FLEXIPORT_SPEKTRUM) {
|
||||
uint32_t pios_spektrum_rcvr_id;
|
||||
if (PIOS_RCVR_Init(&pios_spektrum_rcvr_id, &pios_spektrum_rcvr_driver, 0)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
for (uint8_t i = 0;
|
||||
i < PIOS_SPEKTRUM_NUM_INPUTS && pios_rcvr_max_channel < NELEMENTS(pios_rcvr_channel_to_id_map);
|
||||
i++) {
|
||||
pios_rcvr_channel_to_id_map[pios_rcvr_max_channel].id = pios_spektrum_rcvr_id;
|
||||
pios_rcvr_channel_to_id_map[pios_rcvr_max_channel].channel = i;
|
||||
pios_rcvr_max_channel++;
|
||||
}
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_SPEKTRUM */
|
||||
break;
|
||||
case MANUALCONTROLSETTINGS_INPUTMODE_SBUS:
|
||||
#if defined(PIOS_INCLUDE_SBUS)
|
||||
if (hwsettings_cc_mainport == HWSETTINGS_CC_MAINPORT_SBUS) {
|
||||
uint32_t pios_sbus_rcvr_id;
|
||||
if (PIOS_RCVR_Init(&pios_sbus_rcvr_id, &pios_sbus_rcvr_driver, 0)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
for (uint8_t i = 0;
|
||||
i < SBUS_NUMBER_OF_CHANNELS && pios_rcvr_max_channel < NELEMENTS(pios_rcvr_channel_to_id_map);
|
||||
i++) {
|
||||
pios_rcvr_channel_to_id_map[pios_rcvr_max_channel].id = pios_sbus_rcvr_id;
|
||||
pios_rcvr_channel_to_id_map[pios_rcvr_max_channel].channel = i;
|
||||
pios_rcvr_max_channel++;
|
||||
}
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_SBUS */
|
||||
break;
|
||||
}
|
||||
|
||||
/* Remap AFIO pin */
|
||||
GPIO_PinRemapConfig( GPIO_Remap_SWJ_NoJTRST, ENABLE);
|
||||
@ -730,26 +1151,22 @@ void PIOS_Board_Init(void) {
|
||||
PIOS_ADC_Init();
|
||||
PIOS_GPIO_Init();
|
||||
|
||||
#if defined(PIOS_INCLUDE_PWM)
|
||||
PIOS_PWM_Init();
|
||||
#endif
|
||||
#if defined(PIOS_INCLUDE_PPM)
|
||||
PIOS_PPM_Init();
|
||||
#endif
|
||||
#if defined(PIOS_INCLUDE_USB_HID)
|
||||
PIOS_USB_HID_Init(0);
|
||||
uint32_t pios_usb_hid_id;
|
||||
PIOS_USB_HID_Init(&pios_usb_hid_id, &pios_usb_hid_main_cfg);
|
||||
#if defined(PIOS_INCLUDE_COM)
|
||||
if (PIOS_COM_Init(&pios_com_telem_usb_id, &pios_usb_com_driver, 0)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
uint8_t * rx_buffer = (uint8_t *) pvPortMalloc(PIOS_COM_TELEM_USB_RX_BUF_LEN);
|
||||
uint8_t * tx_buffer = (uint8_t *) pvPortMalloc(PIOS_COM_TELEM_USB_TX_BUF_LEN);
|
||||
PIOS_Assert(rx_buffer);
|
||||
PIOS_Assert(tx_buffer);
|
||||
if (PIOS_COM_Init(&pios_com_telem_usb_id, &pios_usb_com_driver, pios_usb_hid_id,
|
||||
rx_buffer, PIOS_COM_TELEM_USB_RX_BUF_LEN,
|
||||
tx_buffer, PIOS_COM_TELEM_USB_TX_BUF_LEN)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_COM */
|
||||
#endif
|
||||
#endif /* PIOS_INCLUDE_USB_HID */
|
||||
|
||||
#if defined(PIOS_INCLUDE_I2C)
|
||||
if (PIOS_I2C_Init(&pios_i2c_main_adapter_id, &pios_i2c_main_adapter_cfg)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_I2C */
|
||||
PIOS_IAP_Init();
|
||||
PIOS_WDG_Init();
|
||||
}
|
||||
|
@ -35,21 +35,23 @@
|
||||
// Private variables
|
||||
static xSemaphoreHandle lock;
|
||||
static xTaskHandle handles[TASKINFO_RUNNING_NUMELEM];
|
||||
static uint32_t lastMonitorTime;
|
||||
|
||||
// Private functions
|
||||
|
||||
/**
|
||||
* Initialize library
|
||||
* Initialize library
|
||||
*/
|
||||
int32_t TaskMonitorInitialize(void)
|
||||
{
|
||||
lock = xSemaphoreCreateRecursiveMutex();
|
||||
memset(handles, 0, sizeof(xTaskHandle)*TASKINFO_RUNNING_NUMELEM);
|
||||
lastMonitorTime = portGET_RUN_TIME_COUNTER_VALUE();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a task handle with the library
|
||||
* Register a task handle with the library
|
||||
*/
|
||||
int32_t TaskMonitorAdd(TaskInfoRunningElem task, xTaskHandle handle)
|
||||
{
|
||||
@ -67,16 +69,30 @@ int32_t TaskMonitorAdd(TaskInfoRunningElem task, xTaskHandle handle)
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the status of all tasks
|
||||
* Update the status of all tasks
|
||||
*/
|
||||
void TaskMonitorUpdateAll(void)
|
||||
{
|
||||
TaskInfoData data;
|
||||
int n;
|
||||
|
||||
|
||||
// Lock
|
||||
xSemaphoreTakeRecursive(lock, portMAX_DELAY);
|
||||
|
||||
|
||||
#if ( configGENERATE_RUN_TIME_STATS == 1 )
|
||||
uint32_t currentTime;
|
||||
uint32_t deltaTime;
|
||||
|
||||
/*
|
||||
* Calculate the amount of elapsed run time between the last time we
|
||||
* measured and now. Scale so that we can convert task run times
|
||||
* directly to percentages.
|
||||
*/
|
||||
currentTime = portGET_RUN_TIME_COUNTER_VALUE();
|
||||
deltaTime = ((currentTime - lastMonitorTime) / 100) ? : 1; /* avoid divide-by-zero if the interval is too small */
|
||||
lastMonitorTime = currentTime;
|
||||
#endif
|
||||
|
||||
// Update all task information
|
||||
for (n = 0; n < TASKINFO_RUNNING_NUMELEM; ++n)
|
||||
{
|
||||
@ -87,18 +103,24 @@ void TaskMonitorUpdateAll(void)
|
||||
data.StackRemaining[n] = 10000;
|
||||
#else
|
||||
data.StackRemaining[n] = uxTaskGetStackHighWaterMark(handles[n]) * 4;
|
||||
#if ( configGENERATE_RUN_TIME_STATS == 1 )
|
||||
/* Generate run time stats */
|
||||
data.RunningTime[n] = uxTaskGetRunTime(handles[n]) / deltaTime;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
data.Running[n] = TASKINFO_RUNNING_FALSE;
|
||||
data.StackRemaining[n] = 0;
|
||||
data.RunningTime[n] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Update object
|
||||
TaskInfoSet(&data);
|
||||
|
||||
|
||||
// Done
|
||||
xSemaphoreGiveRecursive(lock);
|
||||
}
|
||||
|
@ -25,6 +25,13 @@
|
||||
WHEREAMI := $(dir $(lastword $(MAKEFILE_LIST)))
|
||||
TOP := $(realpath $(WHEREAMI)/../../)
|
||||
include $(TOP)/make/firmware-defs.mk
|
||||
include $(TOP)/make/boards/$(BOARD_NAME)/board-info.mk
|
||||
|
||||
# Target file name (without extension).
|
||||
TARGET := fw_$(BOARD_NAME)
|
||||
|
||||
# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.)
|
||||
OUTDIR := $(TOP)/build/$(TARGET)
|
||||
|
||||
# Set developer code and compile options
|
||||
# Set to YES for debugging
|
||||
@ -41,21 +48,6 @@ endif
|
||||
|
||||
FLASH_TOOL = OPENOCD
|
||||
|
||||
# MCU name, submodel and board
|
||||
# - MCU used for compiler-option (-mcpu)
|
||||
# - MODEL used for linker-script name (-T) and passed as define
|
||||
# - BOARD just passed as define (optional)
|
||||
MCU = cortex-m3
|
||||
CHIP = STM32F103RET
|
||||
BOARD = STM3210E_INS
|
||||
MODEL = HD
|
||||
|
||||
# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.)
|
||||
OUTDIR = $(TOP)/build/ins
|
||||
|
||||
# Target file name (without extension).
|
||||
TARGET = INS
|
||||
|
||||
# Paths
|
||||
INS = ./
|
||||
INSINC = $(INS)/inc
|
||||
@ -163,7 +155,7 @@ CPPSRCARM =
|
||||
# Even though the DOS/Win* filesystem matches both .s and .S the same,
|
||||
# it will preserve the spelling of the filenames, and gcc itself does
|
||||
# care about how the name is spelled on its command-line.
|
||||
ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL).S
|
||||
ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL)$(MODEL_SUFFIX).S
|
||||
|
||||
# List Assembler source files here which must be assembled in ARM-Mode..
|
||||
ASRCARM =
|
||||
@ -226,7 +218,6 @@ CDEFS = -DSTM32F10X_$(MODEL)
|
||||
CDEFS += -DUSE_STDPERIPH_DRIVER
|
||||
CDEFS += -DUSE_$(BOARD)
|
||||
CDEFS += -DIN_AHRS
|
||||
CDEFS += -DUSE_BOOTLOADER
|
||||
|
||||
# Place project-specific -D and/or -U options for
|
||||
# Assembler with preprocessor here.
|
||||
@ -303,20 +294,8 @@ LDFLAGS += -lc -lgcc
|
||||
LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_memory.ld
|
||||
LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_sections.ld
|
||||
|
||||
OOCD_LOADFILE+=$(OUTDIR)/$(TARGET).bin
|
||||
# Program
|
||||
OOCD_CL+=-c "flash write_image erase $(OOCD_LOADFILE) 0x08002000 bin"
|
||||
# Verify
|
||||
OOCD_CL+=-c "verify_image $(OOCD_LOADFILE) 0x08002000 bin"
|
||||
# reset target
|
||||
OOCD_CL+=-c "reset run"
|
||||
# # terminate OOCD after programming
|
||||
OOCD_CL+=-c shutdown
|
||||
|
||||
# Define programs and commands.
|
||||
REMOVE = $(REMOVE_CMD) -f
|
||||
###SHELL = sh
|
||||
###COPY = cp
|
||||
|
||||
# List of all source files.
|
||||
ALLSRC = $(ASRCARM) $(ASRC) $(SRCARM) $(SRC) $(CPPSRCARM) $(CPPSRC)
|
||||
@ -348,14 +327,6 @@ endif
|
||||
endif
|
||||
endif
|
||||
|
||||
# Program the device.
|
||||
ifeq ($(FLASH_TOOL),OPENOCD)
|
||||
# Program the device with Dominic Rath's OPENOCD in "batch-mode", needs cfg and "reset-script".
|
||||
program: $(OUTDIR)/$(TARGET).bin
|
||||
@echo ${quote}Programming with OPENOCD${quote}
|
||||
$(OOCD_EXE) $(OOCD_CL)
|
||||
endif
|
||||
|
||||
# Link: create ELF output file from object files.
|
||||
$(eval $(call LINK_TEMPLATE, $(OUTDIR)/$(TARGET).elf, $(ALLOBJ)))
|
||||
|
||||
@ -385,28 +356,33 @@ $(eval $(call PARTIAL_COMPILE_ARM_TEMPLATE, SRCARM))
|
||||
|
||||
$(OUTDIR)/$(TARGET).bin.o: $(OUTDIR)/$(TARGET).bin
|
||||
|
||||
.PHONY: elf lss sym hex bin bino
|
||||
$(eval $(call OPFW_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(BOARD_TYPE),$(BOARD_REVISION)))
|
||||
|
||||
# Add jtag targets (program and wipe)
|
||||
$(eval $(call JTAG_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(FW_BANK_BASE),$(FW_BANK_SIZE)))
|
||||
|
||||
.PHONY: elf lss sym hex bin bino opfw
|
||||
elf: $(OUTDIR)/$(TARGET).elf
|
||||
lss: $(OUTDIR)/$(TARGET).lss
|
||||
sym: $(OUTDIR)/$(TARGET).sym
|
||||
hex: $(OUTDIR)/$(TARGET).hex
|
||||
bin: $(OUTDIR)/$(TARGET).bin
|
||||
bino: $(OUTDIR)/$(TARGET).bin.o
|
||||
opfw: $(OUTDIR)/$(TARGET).opfw
|
||||
|
||||
# Display sizes of sections.
|
||||
$(eval $(call SIZE_TEMPLATE, $(OUTDIR)/$(TARGET).elf))
|
||||
.PHONY: 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
|
||||
install: $(OUTDIR)/$(TARGET).opfw
|
||||
ifneq ($(INSTALL_DIR),)
|
||||
@echo $(MSG_INSTALLING) $(call toprel, $<)
|
||||
$(V1) mkdir -p $(INSTALL_DIR)
|
||||
$(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).bin
|
||||
$(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).opfw
|
||||
else
|
||||
$(error INSTALL_DIR must be specified for $@)
|
||||
endif
|
||||
@ -447,4 +423,4 @@ else
|
||||
endif
|
||||
|
||||
# Listing of phony targets.
|
||||
.PHONY : all build clean clean_list program install
|
||||
.PHONY : all build clean clean_list install
|
||||
|
@ -61,7 +61,6 @@ static const struct pios_spi_cfg pios_spi_op_cfg = {
|
||||
.ahb_clk = RCC_AHBPeriph_DMA1,
|
||||
|
||||
.irq = {
|
||||
.handler = PIOS_SPI_op_irq_handler,
|
||||
.flags =
|
||||
(DMA1_FLAG_TC4 | DMA1_FLAG_TE4 | DMA1_FLAG_HT4 |
|
||||
DMA1_FLAG_GL4),
|
||||
@ -175,7 +174,6 @@ static const struct pios_spi_cfg pios_spi_accel_cfg = {
|
||||
.ahb_clk = RCC_AHBPeriph_DMA1,
|
||||
|
||||
.irq = {
|
||||
.handler = PIOS_SPI_accel_irq_handler,
|
||||
.flags = (DMA1_FLAG_TC2 | DMA1_FLAG_TE2 | DMA1_FLAG_HT2 | DMA1_FLAG_GL2),
|
||||
.init = {
|
||||
.NVIC_IRQChannel = DMA1_Channel2_IRQn,
|
||||
@ -265,17 +263,10 @@ void PIOS_SPI_accel_irq_handler(void)
|
||||
/*
|
||||
* GPS USART
|
||||
*/
|
||||
void PIOS_USART_gps_irq_handler(void);
|
||||
void USART1_IRQHandler()
|
||||
__attribute__ ((alias("PIOS_USART_gps_irq_handler")));
|
||||
const struct pios_usart_cfg pios_usart_gps_cfg = {
|
||||
static const struct pios_usart_cfg pios_usart_gps_cfg = {
|
||||
.regs = USART1,
|
||||
.init = {
|
||||
#if defined (PIOS_USART_BAUDRATE)
|
||||
.USART_BaudRate = PIOS_USART_BAUDRATE,
|
||||
#else
|
||||
.USART_BaudRate = 57600,
|
||||
#endif
|
||||
.USART_WordLength = USART_WordLength_8b,
|
||||
.USART_Parity = USART_Parity_No,
|
||||
.USART_StopBits = USART_StopBits_1,
|
||||
@ -284,7 +275,6 @@ const struct pios_usart_cfg pios_usart_gps_cfg = {
|
||||
.USART_Mode = USART_Mode_Rx | USART_Mode_Tx,
|
||||
},
|
||||
.irq = {
|
||||
.handler = PIOS_USART_gps_irq_handler,
|
||||
.init = {
|
||||
.NVIC_IRQChannel = USART1_IRQn,
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_MID,
|
||||
@ -310,70 +300,66 @@ const struct pios_usart_cfg pios_usart_gps_cfg = {
|
||||
},
|
||||
};
|
||||
|
||||
static uint32_t pios_usart_gps_id;
|
||||
void PIOS_USART_gps_irq_handler(void)
|
||||
{
|
||||
PIOS_USART_IRQ_Handler(pios_usart_gps_id);
|
||||
}
|
||||
|
||||
#endif /* PIOS_INCLUDE_GPS */
|
||||
|
||||
#ifdef PIOS_INCLUDE_COM_AUX
|
||||
/*
|
||||
* AUX USART
|
||||
*/
|
||||
void PIOS_USART_aux_irq_handler(void);
|
||||
void USART3_IRQHandler() __attribute__ ((alias ("PIOS_USART_aux_irq_handler")));
|
||||
const struct pios_usart_cfg pios_usart_aux_cfg = {
|
||||
.regs = USART3,
|
||||
.remap = GPIO_PartialRemap_USART3,
|
||||
.init = {
|
||||
#if defined (PIOS_COM_AUX_BAUDRATE)
|
||||
.USART_BaudRate = PIOS_COM_AUX_BAUDRATE,
|
||||
#else
|
||||
.USART_BaudRate = 57600,
|
||||
#endif
|
||||
.USART_WordLength = USART_WordLength_8b,
|
||||
.USART_Parity = USART_Parity_No,
|
||||
.USART_StopBits = USART_StopBits_1,
|
||||
.USART_HardwareFlowControl = USART_HardwareFlowControl_None,
|
||||
.USART_Mode = USART_Mode_Rx | USART_Mode_Tx,
|
||||
},
|
||||
.irq = {
|
||||
.handler = PIOS_USART_aux_irq_handler,
|
||||
.init = {
|
||||
.NVIC_IRQChannel = USART3_IRQn,
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_MID,
|
||||
.NVIC_IRQChannelSubPriority = 0,
|
||||
.NVIC_IRQChannelCmd = ENABLE,
|
||||
},
|
||||
},
|
||||
.rx = {
|
||||
.gpio = GPIOC,
|
||||
.init = {
|
||||
.GPIO_Pin = GPIO_Pin_11,
|
||||
.GPIO_Speed = GPIO_Speed_2MHz,
|
||||
.GPIO_Mode = GPIO_Mode_IPU,
|
||||
},
|
||||
},
|
||||
.tx = {
|
||||
.gpio = GPIOC,
|
||||
.init = {
|
||||
.GPIO_Pin = GPIO_Pin_10,
|
||||
.GPIO_Speed = GPIO_Speed_2MHz,
|
||||
.GPIO_Mode = GPIO_Mode_AF_PP,
|
||||
},
|
||||
},
|
||||
static const struct pios_usart_cfg pios_usart_aux_cfg = {
|
||||
.regs = USART4,
|
||||
.init = {
|
||||
.USART_BaudRate = 57600,
|
||||
.USART_WordLength = USART_WordLength_8b,
|
||||
.USART_Parity = USART_Parity_No,
|
||||
.USART_StopBits = USART_StopBits_1,
|
||||
.USART_HardwareFlowControl =
|
||||
USART_HardwareFlowControl_None,
|
||||
.USART_Mode = USART_Mode_Rx | USART_Mode_Tx,
|
||||
},
|
||||
.irq = {
|
||||
.init = {
|
||||
.NVIC_IRQChannel = USART4_IRQn,
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_HIGH,
|
||||
.NVIC_IRQChannelSubPriority = 0,
|
||||
.NVIC_IRQChannelCmd = ENABLE,
|
||||
},
|
||||
},
|
||||
.rx = {
|
||||
.gpio = GPIOB,
|
||||
.init = {
|
||||
.GPIO_Pin = GPIO_Pin_11,
|
||||
.GPIO_Speed = GPIO_Speed_2MHz,
|
||||
.GPIO_Mode = GPIO_Mode_IPU,
|
||||
},
|
||||
},
|
||||
.tx = {
|
||||
.gpio = GPIOB,
|
||||
.init = {
|
||||
.GPIO_Pin = GPIO_Pin_10,
|
||||
.GPIO_Speed = GPIO_Speed_2MHz,
|
||||
.GPIO_Mode = GPIO_Mode_AF_PP,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
static uint32_t pios_usart_aux_id;
|
||||
void PIOS_USART_aux_irq_handler(void)
|
||||
{
|
||||
PIOS_USART_IRQ_Handler(pios_usart_aux_id);
|
||||
}
|
||||
#endif /* PIOS_COM_AUX */
|
||||
|
||||
#endif /* PIOS_INCLUDE_COM_AUX */
|
||||
|
||||
#if defined(PIOS_INCLUDE_COM)
|
||||
|
||||
#include <pios_com_priv.h>
|
||||
|
||||
#if 0
|
||||
#define PIOS_COM_AUX_TX_BUF_LEN 192
|
||||
static uint8_t pios_com_aux_tx_buffer[PIOS_COM_AUX_TX_BUF_LEN];
|
||||
#endif
|
||||
|
||||
#define PIOS_COM_GPS_RX_BUF_LEN 96
|
||||
static uint8_t pios_com_gps_rx_buffer[PIOS_COM_GPS_RX_BUF_LEN];
|
||||
|
||||
|
||||
#endif /* PIOS_INCLUDE_COM */
|
||||
|
||||
#if defined(PIOS_INCLUDE_I2C)
|
||||
|
||||
@ -390,7 +376,7 @@ void I2C1_EV_IRQHandler()
|
||||
void I2C1_ER_IRQHandler()
|
||||
__attribute__ ((alias("PIOS_I2C_pres_mag_adapter_er_irq_handler")));
|
||||
|
||||
const struct pios_i2c_adapter_cfg pios_i2c_pres_mag_adapter_cfg = {
|
||||
static const struct pios_i2c_adapter_cfg pios_i2c_pres_mag_adapter_cfg = {
|
||||
.regs = I2C1,
|
||||
.init = {
|
||||
.I2C_Mode = I2C_Mode_I2C,
|
||||
@ -418,7 +404,6 @@ const struct pios_i2c_adapter_cfg pios_i2c_pres_mag_adapter_cfg = {
|
||||
},
|
||||
},
|
||||
.event = {
|
||||
.handler = PIOS_I2C_pres_mag_adapter_ev_irq_handler,
|
||||
.flags = 0, /* FIXME: check this */
|
||||
.init = {
|
||||
.NVIC_IRQChannel = I2C1_EV_IRQn,
|
||||
@ -428,7 +413,6 @@ const struct pios_i2c_adapter_cfg pios_i2c_pres_mag_adapter_cfg = {
|
||||
},
|
||||
},
|
||||
.error = {
|
||||
.handler = PIOS_I2C_pres_mag_adapter_er_irq_handler,
|
||||
.flags = 0, /* FIXME: check this */
|
||||
.init = {
|
||||
.NVIC_IRQChannel = I2C1_ER_IRQn,
|
||||
@ -458,7 +442,7 @@ void PIOS_I2C_gyro_adapter_er_irq_handler(void);
|
||||
void I2C2_EV_IRQHandler() __attribute__ ((alias ("PIOS_I2C_gyro_adapter_ev_irq_handler")));
|
||||
void I2C2_ER_IRQHandler() __attribute__ ((alias ("PIOS_I2C_gyro_adapter_er_irq_handler")));
|
||||
|
||||
const struct pios_i2c_adapter_cfg pios_i2c_gyro_adapter_cfg = {
|
||||
static const struct pios_i2c_adapter_cfg pios_i2c_gyro_adapter_cfg = {
|
||||
.regs = I2C2,
|
||||
.init = {
|
||||
.I2C_Mode = I2C_Mode_I2C,
|
||||
@ -486,7 +470,6 @@ const struct pios_i2c_adapter_cfg pios_i2c_gyro_adapter_cfg = {
|
||||
},
|
||||
},
|
||||
.event = {
|
||||
.handler = PIOS_I2C_gyro_adapter_ev_irq_handler,
|
||||
.flags = 0, /* FIXME: check this */
|
||||
.init = {
|
||||
.NVIC_IRQChannel = I2C2_EV_IRQn,
|
||||
@ -496,7 +479,6 @@ const struct pios_i2c_adapter_cfg pios_i2c_gyro_adapter_cfg = {
|
||||
},
|
||||
},
|
||||
.error = {
|
||||
.handler = PIOS_I2C_gyro_adapter_er_irq_handler,
|
||||
.flags = 0, /* FIXME: check this */
|
||||
.init = {
|
||||
.NVIC_IRQChannel = I2C2_ER_IRQn,
|
||||
@ -546,10 +528,13 @@ void PIOS_Board_Init(void) {
|
||||
|
||||
#if defined(PIOS_INCLUDE_COM)
|
||||
#if defined(PIOS_INCLUDE_GPS)
|
||||
uint32_t pios_usart_gps_id;
|
||||
if (PIOS_USART_Init(&pios_usart_gps_id, &pios_usart_gps_cfg)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
}
|
||||
if (PIOS_COM_Init(&pios_com_gps_id, &pios_usart_com_driver, pios_usart_gps_id)) {
|
||||
if (PIOS_COM_Init(&pios_com_gps_id, &pios_usart_com_driver, pios_usart_gps_id,
|
||||
pios_com_gps_rx_buffer, sizeof(pios_com_gps_rx_buffer),
|
||||
NULL, 0)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_GPS */
|
||||
|
@ -69,7 +69,7 @@ static void ahrscommsTask(void *parameters);
|
||||
* Initialise the module, called on startup
|
||||
* \returns 0 on success or -1 if initialisation failed
|
||||
*/
|
||||
int32_t AHRSCommsInitialize(void)
|
||||
int32_t AHRSCommsStart(void)
|
||||
{
|
||||
// Start main task
|
||||
xTaskCreate(ahrscommsTask, (signed char *)"AHRSComms", STACK_SIZE, NULL, TASK_PRIORITY, &taskHandle);
|
||||
@ -79,6 +79,17 @@ int32_t AHRSCommsInitialize(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialise the module, called on startup
|
||||
* \returns 0 on success or -1 if initialisation failed
|
||||
*/
|
||||
int32_t AHRSCommsInitialize(void)
|
||||
{
|
||||
|
||||
return 0;
|
||||
}
|
||||
MODULE_INITCALL(AHRSCommsInitialize, AHRSCommsStart)
|
||||
|
||||
/**
|
||||
* Module thread, should not return.
|
||||
*/
|
||||
|
@ -32,6 +32,7 @@
|
||||
|
||||
|
||||
#include "openpilot.h"
|
||||
#include "accessorydesired.h"
|
||||
#include "actuator.h"
|
||||
#include "actuatorsettings.h"
|
||||
#include "systemsettings.h"
|
||||
@ -74,7 +75,6 @@ static int16_t scaleChannel(float value, int16_t max, int16_t min, int16_t neutr
|
||||
static void setFailsafe();
|
||||
static float MixerCurve(const float throttle, const float* curve);
|
||||
static bool set_channel(uint8_t mixer_channel, uint16_t value);
|
||||
|
||||
float ProcessMixer(const int index, const float curve1, const float curve2,
|
||||
MixerSettingsData* mixerSettings, ActuatorDesiredData* desired,
|
||||
const float period);
|
||||
@ -85,6 +85,19 @@ typedef struct {
|
||||
int8_t matrix[5];
|
||||
} __attribute__((packed)) Mixer_t;
|
||||
|
||||
/**
|
||||
* @brief Module initialization
|
||||
* @return 0
|
||||
*/
|
||||
int32_t ActuatorStart()
|
||||
{
|
||||
// Start main task
|
||||
xTaskCreate(actuatorTask, (signed char*)"Actuator", STACK_SIZE_BYTES/4, NULL, TASK_PRIORITY, &taskHandle);
|
||||
TaskMonitorAdd(TASKINFO_RUNNING_ACTUATOR, taskHandle);
|
||||
PIOS_WDG_RegisterFlag(PIOS_WDG_ACTUATOR);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Module initialization
|
||||
@ -100,14 +113,10 @@ int32_t ActuatorInitialize()
|
||||
|
||||
// If settings change, update the output rate
|
||||
ActuatorSettingsConnectCallback(actuator_update_rate);
|
||||
|
||||
// Start main task
|
||||
xTaskCreate(actuatorTask, (signed char*)"Actuator", STACK_SIZE_BYTES/4, NULL, TASK_PRIORITY, &taskHandle);
|
||||
TaskMonitorAdd(TASKINFO_RUNNING_ACTUATOR, taskHandle);
|
||||
PIOS_WDG_RegisterFlag(PIOS_WDG_ACTUATOR);
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
MODULE_INITCALL(ActuatorInitialize, ActuatorStart)
|
||||
|
||||
/**
|
||||
* @brief Main Actuator module task
|
||||
@ -128,17 +137,20 @@ static void actuatorTask(void* parameters)
|
||||
portTickType lastSysTime;
|
||||
portTickType thisSysTime;
|
||||
float dT = 0.0f;
|
||||
ActuatorCommandData command;
|
||||
ActuatorSettingsData settings;
|
||||
|
||||
SystemSettingsData sysSettings;
|
||||
ActuatorCommandData command;
|
||||
MixerSettingsData mixerSettings;
|
||||
ActuatorDesiredData desired;
|
||||
MixerStatusData mixerStatus;
|
||||
FlightStatusData flightStatus;
|
||||
|
||||
ActuatorSettingsGet(&settings);
|
||||
PIOS_Servo_SetHz(&settings.ChannelUpdateFreq[0], ACTUATORSETTINGS_CHANNELUPDATEFREQ_NUMELEM);
|
||||
|
||||
uint8_t MotorsSpinWhileArmed;
|
||||
int16_t ChannelMax[ACTUATORCOMMAND_CHANNEL_NUMELEM];
|
||||
int16_t ChannelMin[ACTUATORCOMMAND_CHANNEL_NUMELEM];
|
||||
int16_t ChannelNeutral[ACTUATORCOMMAND_CHANNEL_NUMELEM];
|
||||
uint16_t ChannelUpdateFreq[ACTUATORSETTINGS_CHANNELUPDATEFREQ_NUMELEM];
|
||||
ActuatorSettingsChannelUpdateFreqGet(ChannelUpdateFreq);
|
||||
PIOS_Servo_SetHz(&ChannelUpdateFreq[0], ACTUATORSETTINGS_CHANNELUPDATEFREQ_NUMELEM);
|
||||
|
||||
float * status = (float *)&mixerStatus; //access status objects as an array of floats
|
||||
|
||||
@ -164,14 +176,16 @@ static void actuatorTask(void* parameters)
|
||||
dT = (thisSysTime - lastSysTime) / portTICK_RATE_MS / 1000.0f;
|
||||
lastSysTime = thisSysTime;
|
||||
|
||||
|
||||
FlightStatusGet(&flightStatus);
|
||||
SystemSettingsGet(&sysSettings);
|
||||
MixerStatusGet(&mixerStatus);
|
||||
MixerSettingsGet (&mixerSettings);
|
||||
ActuatorDesiredGet(&desired);
|
||||
ActuatorCommandGet(&command);
|
||||
ActuatorSettingsGet(&settings);
|
||||
|
||||
ActuatorSettingsMotorsSpinWhileArmedGet(&MotorsSpinWhileArmed);
|
||||
ActuatorSettingsChannelMaxGet(ChannelMax);
|
||||
ActuatorSettingsChannelMinGet(ChannelMin);
|
||||
ActuatorSettingsChannelNeutralGet(ChannelNeutral);
|
||||
|
||||
int nMixers = 0;
|
||||
Mixer_t * mixers = (Mixer_t *)&mixerSettings.Mixer1Type;
|
||||
@ -192,10 +206,38 @@ static void actuatorTask(void* parameters)
|
||||
|
||||
bool armed = flightStatus.Armed == FLIGHTSTATUS_ARMED_ARMED;
|
||||
bool positiveThrottle = desired.Throttle >= 0.00;
|
||||
bool spinWhileArmed = settings.MotorsSpinWhileArmed == ACTUATORSETTINGS_MOTORSSPINWHILEARMED_TRUE;
|
||||
bool spinWhileArmed = MotorsSpinWhileArmed == ACTUATORSETTINGS_MOTORSSPINWHILEARMED_TRUE;
|
||||
|
||||
float curve1 = MixerCurve(desired.Throttle,mixerSettings.ThrottleCurve1);
|
||||
float curve2 = MixerCurve(desired.Throttle,mixerSettings.ThrottleCurve2);
|
||||
//The source for the secondary curve is selectable
|
||||
float curve2 = 0;
|
||||
AccessoryDesiredData accessory;
|
||||
switch(mixerSettings.Curve2Source) {
|
||||
case MIXERSETTINGS_CURVE2SOURCE_THROTTLE:
|
||||
curve2 = MixerCurve(desired.Throttle,mixerSettings.ThrottleCurve2);
|
||||
break;
|
||||
case MIXERSETTINGS_CURVE2SOURCE_ROLL:
|
||||
curve2 = MixerCurve(desired.Roll,mixerSettings.ThrottleCurve2);
|
||||
break;
|
||||
case MIXERSETTINGS_CURVE2SOURCE_PITCH:
|
||||
curve2 = MixerCurve(desired.Pitch,mixerSettings.ThrottleCurve2);
|
||||
break;
|
||||
case MIXERSETTINGS_CURVE2SOURCE_YAW:
|
||||
curve2 = MixerCurve(desired.Yaw,mixerSettings.ThrottleCurve2);
|
||||
break;
|
||||
case MIXERSETTINGS_CURVE2SOURCE_ACCESSORY0:
|
||||
case MIXERSETTINGS_CURVE2SOURCE_ACCESSORY1:
|
||||
case MIXERSETTINGS_CURVE2SOURCE_ACCESSORY2:
|
||||
case MIXERSETTINGS_CURVE2SOURCE_ACCESSORY3:
|
||||
case MIXERSETTINGS_CURVE2SOURCE_ACCESSORY4:
|
||||
case MIXERSETTINGS_CURVE2SOURCE_ACCESSORY5:
|
||||
if(AccessoryDesiredInstGet(mixerSettings.Curve2Source - MIXERSETTINGS_CURVE2SOURCE_ACCESSORY0,&accessory) == 0)
|
||||
curve2 = MixerCurve(accessory.AccessoryVal,mixerSettings.ThrottleCurve2);
|
||||
else
|
||||
curve2 = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
for(int ct=0; ct < MAX_MIX_ACTUATORS; ct++)
|
||||
{
|
||||
if(mixers[ct].type == MIXERSETTINGS_MIXER1TYPE_DISABLED) {
|
||||
@ -224,10 +266,25 @@ static void actuatorTask(void* parameters)
|
||||
status[ct] = 0;
|
||||
}
|
||||
|
||||
// If an accessory channel is selected for direct bypass mode
|
||||
// In this configuration the accessory channel is scaled and mapped
|
||||
// directly to output. Note: THERE IS NO SAFETY CHECK HERE FOR ARMING
|
||||
// these also will not be updated in failsafe mode. I'm not sure what
|
||||
// the correct behavior is since it seems domain specific. I don't love
|
||||
// this code
|
||||
if( (mixers[ct].type >= MIXERSETTINGS_MIXER1TYPE_ACCESSORY0) &&
|
||||
(mixers[ct].type <= MIXERSETTINGS_MIXER1TYPE_ACCESSORY2))
|
||||
{
|
||||
if(AccessoryDesiredInstGet(mixers[ct].type - MIXERSETTINGS_MIXER1TYPE_ACCESSORY0,&accessory) == 0)
|
||||
status[ct] = accessory.AccessoryVal;
|
||||
else
|
||||
status[ct] = -1;
|
||||
}
|
||||
|
||||
command.Channel[ct] = scaleChannel(status[ct],
|
||||
settings.ChannelMax[ct],
|
||||
settings.ChannelMin[ct],
|
||||
settings.ChannelNeutral[ct]);
|
||||
ChannelMax[ct],
|
||||
ChannelMin[ct],
|
||||
ChannelNeutral[ct]);
|
||||
}
|
||||
MixerStatusSet(&mixerStatus);
|
||||
|
||||
@ -391,11 +448,13 @@ static int16_t scaleChannel(float value, int16_t max, int16_t min, int16_t neutr
|
||||
*/
|
||||
static void setFailsafe()
|
||||
{
|
||||
ActuatorCommandData command;
|
||||
ActuatorSettingsData settings;
|
||||
|
||||
ActuatorCommandGet(&command);
|
||||
ActuatorSettingsGet(&settings);
|
||||
/* grab only the modules parts that we are going to use */
|
||||
int16_t ChannelMin[ACTUATORCOMMAND_CHANNEL_NUMELEM];
|
||||
ActuatorSettingsChannelMinGet(ChannelMin);
|
||||
int16_t ChannelNeutral[ACTUATORCOMMAND_CHANNEL_NUMELEM];
|
||||
ActuatorSettingsChannelNeutralGet(ChannelNeutral);
|
||||
int16_t Channel[ACTUATORCOMMAND_CHANNEL_NUMELEM];
|
||||
ActuatorCommandChannelGet(Channel);
|
||||
|
||||
MixerSettingsData mixerSettings;
|
||||
MixerSettingsGet (&mixerSettings);
|
||||
@ -407,15 +466,15 @@ static void setFailsafe()
|
||||
|
||||
if(mixers[n].type == MIXERSETTINGS_MIXER1TYPE_MOTOR)
|
||||
{
|
||||
command.Channel[n] = settings.ChannelMin[n];
|
||||
Channel[n] = ChannelMin[n];
|
||||
}
|
||||
else if(mixers[n].type == MIXERSETTINGS_MIXER1TYPE_SERVO)
|
||||
{
|
||||
command.Channel[n] = settings.ChannelNeutral[n];
|
||||
Channel[n] = ChannelNeutral[n];
|
||||
}
|
||||
else
|
||||
{
|
||||
command.Channel[n] = 0;
|
||||
Channel[n] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -425,11 +484,11 @@ static void setFailsafe()
|
||||
// Update servo outputs
|
||||
for (int n = 0; n < ACTUATORCOMMAND_CHANNEL_NUMELEM; ++n)
|
||||
{
|
||||
set_channel(n, command.Channel[n]);
|
||||
set_channel(n, Channel[n]);
|
||||
}
|
||||
|
||||
// Update output object
|
||||
ActuatorCommandSet(&command);
|
||||
// Update output object's parts that we changed
|
||||
ActuatorCommandChannelGet(Channel);
|
||||
}
|
||||
|
||||
|
||||
@ -438,15 +497,13 @@ static void setFailsafe()
|
||||
*/
|
||||
static void actuator_update_rate(UAVObjEvent * ev)
|
||||
{
|
||||
ActuatorSettingsData settings;
|
||||
uint16_t ChannelUpdateFreq[ACTUATORSETTINGS_CHANNELUPDATEFREQ_NUMELEM];
|
||||
if ( ev->obj == ActuatorSettingsHandle() ) {
|
||||
ActuatorSettingsGet(&settings);
|
||||
PIOS_Servo_SetHz(&settings.ChannelUpdateFreq[0], ACTUATORSETTINGS_CHANNELUPDATEFREQ_NUMELEM);
|
||||
ActuatorSettingsChannelUpdateFreqGet(ChannelUpdateFreq);
|
||||
PIOS_Servo_SetHz(&ChannelUpdateFreq[0], ACTUATORSETTINGS_CHANNELUPDATEFREQ_NUMELEM);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#if defined(ARCH_POSIX) || defined(ARCH_WIN32)
|
||||
static bool set_channel(uint8_t mixer_channel, uint16_t value) {
|
||||
return true;
|
||||
|
@ -37,6 +37,7 @@
|
||||
*/
|
||||
|
||||
#include "openpilot.h"
|
||||
#include "altitude.h"
|
||||
#include "baroaltitude.h" // object that will be updated by the module
|
||||
#if defined(PIOS_INCLUDE_HCSR04)
|
||||
#include "sonaraltitude.h" // object that will be updated by the module
|
||||
@ -66,12 +67,22 @@ static void altitudeTask(void *parameters);
|
||||
* Initialise the module, called on startup
|
||||
* \returns 0 on success or -1 if initialisation failed
|
||||
*/
|
||||
int32_t AltitudeInitialize()
|
||||
int32_t AltitudeStart()
|
||||
{
|
||||
// Start main task
|
||||
xTaskCreate(altitudeTask, (signed char *)"Altitude", STACK_SIZE_BYTES/4, NULL, TASK_PRIORITY, &taskHandle);
|
||||
TaskMonitorAdd(TASKINFO_RUNNING_ALTITUDE, taskHandle);
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialise the module, called on startup
|
||||
* \returns 0 on success or -1 if initialisation failed
|
||||
*/
|
||||
int32_t AltitudeInitialize()
|
||||
{
|
||||
|
||||
// init down-sampling data
|
||||
alt_ds_temp = 0;
|
||||
alt_ds_pres = 0;
|
||||
@ -79,7 +90,7 @@ int32_t AltitudeInitialize()
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
MODULE_INITCALL(AltitudeInitialize, AltitudeStart)
|
||||
/**
|
||||
* Module thread, should not return.
|
||||
*/
|
||||
|
@ -3,7 +3,7 @@
|
||||
* @addtogroup OpenPilotModules OpenPilot Modules
|
||||
* @{
|
||||
* @addtogroup Attitude Copter Control Attitude Estimation
|
||||
* @brief Acquires sensor data and computes attitude estimate
|
||||
* @brief Acquires sensor data and computes attitude estimate
|
||||
* Specifically updates the the @ref AttitudeActual "AttitudeActual" and @ref AttitudeRaw "AttitudeRaw" settings objects
|
||||
* @{
|
||||
*
|
||||
@ -89,6 +89,22 @@ static float q[4] = {1,0,0,0};
|
||||
static float R[3][3];
|
||||
static int8_t rotate = 0;
|
||||
static bool zero_during_arming = false;
|
||||
static bool bias_correct_gyro = true;
|
||||
|
||||
/**
|
||||
* Initialise the module, called on startup
|
||||
* \returns 0 on success or -1 if initialisation failed
|
||||
*/
|
||||
int32_t AttitudeStart(void)
|
||||
{
|
||||
|
||||
// Start main task
|
||||
xTaskCreate(AttitudeTask, (signed char *)"Attitude", STACK_SIZE_BYTES/4, NULL, TASK_PRIORITY, &taskHandle);
|
||||
TaskMonitorAdd(TASKINFO_RUNNING_ATTITUDE, taskHandle);
|
||||
PIOS_WDG_RegisterFlag(PIOS_WDG_ATTITUDE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialise the module, called on startup
|
||||
@ -104,91 +120,107 @@ int32_t AttitudeInitialize(void)
|
||||
attitude.q3 = 0;
|
||||
attitude.q4 = 0;
|
||||
AttitudeActualSet(&attitude);
|
||||
|
||||
|
||||
// Cannot trust the values to init right above if BL runs
|
||||
gyro_correct_int[0] = 0;
|
||||
gyro_correct_int[1] = 0;
|
||||
gyro_correct_int[2] = 0;
|
||||
|
||||
q[0] = 1;
|
||||
q[1] = 0;
|
||||
q[2] = 0;
|
||||
q[3] = 0;
|
||||
for(uint8_t i = 0; i < 3; i++)
|
||||
for(uint8_t j = 0; j < 3; j++)
|
||||
R[i][j] = 0;
|
||||
|
||||
// Create queue for passing gyro data, allow 2 back samples in case
|
||||
gyro_queue = xQueueCreate(1, sizeof(float) * 4);
|
||||
if(gyro_queue == NULL)
|
||||
if(gyro_queue == NULL)
|
||||
return -1;
|
||||
|
||||
|
||||
PIOS_ADC_SetQueue(gyro_queue);
|
||||
|
||||
|
||||
AttitudeSettingsConnectCallback(&settingsUpdatedCb);
|
||||
|
||||
// Start main task
|
||||
xTaskCreate(AttitudeTask, (signed char *)"Attitude", STACK_SIZE_BYTES/4, NULL, TASK_PRIORITY, &taskHandle);
|
||||
TaskMonitorAdd(TASKINFO_RUNNING_ATTITUDE, taskHandle);
|
||||
PIOS_WDG_RegisterFlag(PIOS_WDG_ATTITUDE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
MODULE_INITCALL(AttitudeInitialize, AttitudeStart)
|
||||
|
||||
/**
|
||||
* Module thread, should not return.
|
||||
*/
|
||||
static void AttitudeTask(void *parameters)
|
||||
{
|
||||
|
||||
uint8_t init = 0;
|
||||
AlarmsClear(SYSTEMALARMS_ALARM_ATTITUDE);
|
||||
|
||||
PIOS_ADC_Config((PIOS_ADC_RATE / 1000.0f) * UPDATE_RATE);
|
||||
|
||||
// Keep flash CS pin high while talking accel
|
||||
PIOS_FLASH_DISABLE;
|
||||
PIOS_FLASH_DISABLE;
|
||||
PIOS_ADXL345_Init();
|
||||
|
||||
zero_during_arming = false;
|
||||
|
||||
|
||||
// Force settings update to make sure rotation loaded
|
||||
settingsUpdatedCb(AttitudeSettingsHandle());
|
||||
|
||||
// Main task loop
|
||||
while (1) {
|
||||
|
||||
|
||||
FlightStatusData flightStatus;
|
||||
FlightStatusGet(&flightStatus);
|
||||
|
||||
if(xTaskGetTickCount() < 7000) {
|
||||
// Force settings update to make sure rotation loaded
|
||||
settingsUpdatedCb(AttitudeSettingsHandle());
|
||||
if((xTaskGetTickCount() < 7000) && (xTaskGetTickCount() > 1000)) {
|
||||
// For first 7 seconds use accels to get gyro bias
|
||||
accelKp = 1;
|
||||
accelKi = 0.9;
|
||||
yawBiasRate = 0.23;
|
||||
init = 0;
|
||||
}
|
||||
}
|
||||
else if (zero_during_arming && (flightStatus.Armed == FLIGHTSTATUS_ARMED_ARMING)) {
|
||||
accelKp = 1;
|
||||
accelKi = 0.9;
|
||||
yawBiasRate = 0.23;
|
||||
init = 0;
|
||||
init = 0;
|
||||
} else if (init == 0) {
|
||||
settingsUpdatedCb(AttitudeSettingsHandle());
|
||||
// Reload settings (all the rates)
|
||||
AttitudeSettingsAccelKiGet(&accelKi);
|
||||
AttitudeSettingsAccelKpGet(&accelKp);
|
||||
AttitudeSettingsYawBiasRateGet(&yawBiasRate);
|
||||
init = 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
PIOS_WDG_UpdateFlag(PIOS_WDG_ATTITUDE);
|
||||
|
||||
|
||||
AttitudeRawData attitudeRaw;
|
||||
AttitudeRawGet(&attitudeRaw);
|
||||
updateSensors(&attitudeRaw);
|
||||
AttitudeRawGet(&attitudeRaw);
|
||||
updateSensors(&attitudeRaw);
|
||||
updateAttitude(&attitudeRaw);
|
||||
AttitudeRawSet(&attitudeRaw);
|
||||
AttitudeRawSet(&attitudeRaw);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
static void updateSensors(AttitudeRawData * attitudeRaw)
|
||||
{
|
||||
static void updateSensors(AttitudeRawData * attitudeRaw)
|
||||
{
|
||||
struct pios_adxl345_data accel_data;
|
||||
float gyro[4];
|
||||
|
||||
|
||||
// Only wait the time for two nominal updates before setting an alarm
|
||||
if(xQueueReceive(gyro_queue, (void * const) gyro, UPDATE_RATE * 2) == errQUEUE_EMPTY) {
|
||||
AlarmsSet(SYSTEMALARMS_ALARM_ATTITUDE, SYSTEMALARMS_ALARM_ERROR);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// First sample is temperature
|
||||
attitudeRaw->gyros[ATTITUDERAW_GYROS_X] = -(gyro[1] - GYRO_NEUTRAL) * gyroGain;
|
||||
attitudeRaw->gyros[ATTITUDERAW_GYROS_Y] = (gyro[2] - GYRO_NEUTRAL) * gyroGain;
|
||||
attitudeRaw->gyros[ATTITUDERAW_GYROS_Z] = -(gyro[3] - GYRO_NEUTRAL) * gyroGain;
|
||||
|
||||
|
||||
int32_t x = 0;
|
||||
int32_t y = 0;
|
||||
int32_t z = 0;
|
||||
@ -203,9 +235,9 @@ static void updateSensors(AttitudeRawData * attitudeRaw)
|
||||
} while ( (i < 32) && (samples_remaining > 0) );
|
||||
attitudeRaw->gyrotemp[0] = samples_remaining;
|
||||
attitudeRaw->gyrotemp[1] = i;
|
||||
|
||||
|
||||
float accel[3] = {(float) x / i, (float) y / i, (float) z / i};
|
||||
|
||||
|
||||
if(rotate) {
|
||||
// TODO: rotate sensors too so stabilization is well behaved
|
||||
float vec_out[3];
|
||||
@ -221,68 +253,68 @@ static void updateSensors(AttitudeRawData * attitudeRaw)
|
||||
attitudeRaw->accels[0] = accel[0];
|
||||
attitudeRaw->accels[1] = accel[1];
|
||||
attitudeRaw->accels[2] = accel[2];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Scale accels and correct bias
|
||||
attitudeRaw->accels[ATTITUDERAW_ACCELS_X] = (attitudeRaw->accels[ATTITUDERAW_ACCELS_X] - accelbias[0]) * 0.004f * 9.81f;
|
||||
attitudeRaw->accels[ATTITUDERAW_ACCELS_Y] = (attitudeRaw->accels[ATTITUDERAW_ACCELS_Y] - accelbias[1]) * 0.004f * 9.81f;
|
||||
attitudeRaw->accels[ATTITUDERAW_ACCELS_Z] = (attitudeRaw->accels[ATTITUDERAW_ACCELS_Z] - accelbias[2]) * 0.004f * 9.81f;
|
||||
|
||||
// Applying integral component here so it can be seen on the gyros and correct bias
|
||||
attitudeRaw->gyros[ATTITUDERAW_GYROS_X] += gyro_correct_int[0];
|
||||
attitudeRaw->gyros[ATTITUDERAW_GYROS_Y] += gyro_correct_int[1];
|
||||
|
||||
// Because most crafts wont get enough information from gravity to zero yaw gyro
|
||||
attitudeRaw->gyros[ATTITUDERAW_GYROS_Z] += gyro_correct_int[2];
|
||||
gyro_correct_int[2] += - attitudeRaw->gyros[ATTITUDERAW_GYROS_Z] * yawBiasRate;
|
||||
|
||||
if(bias_correct_gyro) {
|
||||
// Applying integral component here so it can be seen on the gyros and correct bias
|
||||
attitudeRaw->gyros[ATTITUDERAW_GYROS_X] += gyro_correct_int[0];
|
||||
attitudeRaw->gyros[ATTITUDERAW_GYROS_Y] += gyro_correct_int[1];
|
||||
attitudeRaw->gyros[ATTITUDERAW_GYROS_Z] += gyro_correct_int[2];
|
||||
}
|
||||
|
||||
// Because most crafts wont get enough information from gravity to zero yaw gyro, we try
|
||||
// and make it average zero (weakly)
|
||||
gyro_correct_int[2] += - attitudeRaw->gyros[ATTITUDERAW_GYROS_Z] * yawBiasRate;
|
||||
}
|
||||
|
||||
static void updateAttitude(AttitudeRawData * attitudeRaw)
|
||||
{
|
||||
float dT;
|
||||
portTickType thisSysTime = xTaskGetTickCount();
|
||||
static portTickType lastSysTime = 0;
|
||||
static portTickType thisSysTime;
|
||||
|
||||
static float dT = 0;
|
||||
|
||||
thisSysTime = xTaskGetTickCount();
|
||||
if(thisSysTime > lastSysTime) // reuse dt in case of wraparound
|
||||
dT = (thisSysTime - lastSysTime) / portTICK_RATE_MS / 1000.0f;
|
||||
|
||||
dT = (thisSysTime == lastSysTime) ? 0.001 : (portMAX_DELAY & (thisSysTime - lastSysTime)) / portTICK_RATE_MS / 1000.0f;
|
||||
lastSysTime = thisSysTime;
|
||||
|
||||
|
||||
// Bad practice to assume structure order, but saves memory
|
||||
float gyro[3];
|
||||
gyro[0] = attitudeRaw->gyros[0];
|
||||
gyro[1] = attitudeRaw->gyros[1];
|
||||
gyro[2] = attitudeRaw->gyros[2];
|
||||
|
||||
|
||||
{
|
||||
float * accels = attitudeRaw->accels;
|
||||
float grot[3];
|
||||
float accel_err[3];
|
||||
|
||||
|
||||
// Rotate gravity to body frame and cross with accels
|
||||
grot[0] = -(2 * (q[1] * q[3] - q[0] * q[2]));
|
||||
grot[1] = -(2 * (q[2] * q[3] + q[0] * q[1]));
|
||||
grot[2] = -(q[0] * q[0] - q[1]*q[1] - q[2]*q[2] + q[3]*q[3]);
|
||||
CrossProduct((const float *) accels, (const float *) grot, accel_err);
|
||||
|
||||
// Account for accel magnitude
|
||||
|
||||
// Account for accel magnitude
|
||||
float accel_mag = sqrt(accels[0]*accels[0] + accels[1]*accels[1] + accels[2]*accels[2]);
|
||||
accel_err[0] /= accel_mag;
|
||||
accel_err[1] /= accel_mag;
|
||||
accel_err[2] /= accel_mag;
|
||||
|
||||
// Accumulate integral of error. Scale here so that units are (rad/s) but Ki has units of s
|
||||
|
||||
// Accumulate integral of error. Scale here so that units are (deg/s) but Ki has units of s
|
||||
gyro_correct_int[0] += accel_err[0] * accelKi;
|
||||
gyro_correct_int[1] += accel_err[1] * accelKi;
|
||||
//gyro_correct_int[2] += accel_err[2] * settings.AccelKI * dT;
|
||||
|
||||
|
||||
// Correct rates based on error, integral component dealt with in updateSensors
|
||||
gyro[0] += accel_err[0] * accelKp / dT;
|
||||
gyro[1] += accel_err[1] * accelKp / dT;
|
||||
gyro[2] += accel_err[2] * accelKp / dT;
|
||||
}
|
||||
|
||||
|
||||
{ // scoping variables to save memory
|
||||
// Work out time derivative from INSAlgo writeup
|
||||
// Also accounts for the fact that gyros are in deg/s
|
||||
@ -291,28 +323,37 @@ static void updateAttitude(AttitudeRawData * attitudeRaw)
|
||||
qdot[1] = (q[0] * gyro[0] - q[3] * gyro[1] + q[2] * gyro[2]) * dT * M_PI / 180 / 2;
|
||||
qdot[2] = (q[3] * gyro[0] + q[0] * gyro[1] - q[1] * gyro[2]) * dT * M_PI / 180 / 2;
|
||||
qdot[3] = (-q[2] * gyro[0] + q[1] * gyro[1] + q[0] * gyro[2]) * dT * M_PI / 180 / 2;
|
||||
|
||||
|
||||
// Take a time step
|
||||
q[0] = q[0] + qdot[0];
|
||||
q[1] = q[1] + qdot[1];
|
||||
q[2] = q[2] + qdot[2];
|
||||
q[3] = q[3] + qdot[3];
|
||||
}
|
||||
|
||||
|
||||
// Renomalize
|
||||
float qmag = sqrt(q[0]*q[0] + q[1]*q[1] + q[2]*q[2] + q[3]*q[3]);
|
||||
q[0] = q[0] / qmag;
|
||||
q[1] = q[1] / qmag;
|
||||
q[2] = q[2] / qmag;
|
||||
q[3] = q[3] / qmag;
|
||||
|
||||
|
||||
// If quaternion has become inappropriately short or is nan reinit.
|
||||
// THIS SHOULD NEVER ACTUALLY HAPPEN
|
||||
if((fabs(qmag) < 1e-3) || (qmag != qmag)) {
|
||||
q[0] = 1;
|
||||
q[1] = 0;
|
||||
q[2] = 0;
|
||||
q[3] = 0;
|
||||
}
|
||||
|
||||
AttitudeActualData attitudeActual;
|
||||
AttitudeActualGet(&attitudeActual);
|
||||
|
||||
|
||||
quat_copy(q, &attitudeActual.q1);
|
||||
|
||||
|
||||
// Convert into eueler degrees (makes assumptions about RPY order)
|
||||
Quaternion2RPY(&attitudeActual.q1,&attitudeActual.Roll);
|
||||
Quaternion2RPY(&attitudeActual.q1,&attitudeActual.Roll);
|
||||
|
||||
AttitudeActualSet(&attitudeActual);
|
||||
}
|
||||
@ -320,36 +361,41 @@ static void updateAttitude(AttitudeRawData * attitudeRaw)
|
||||
static void settingsUpdatedCb(UAVObjEvent * objEv) {
|
||||
AttitudeSettingsData attitudeSettings;
|
||||
AttitudeSettingsGet(&attitudeSettings);
|
||||
|
||||
|
||||
|
||||
|
||||
accelKp = attitudeSettings.AccelKp;
|
||||
accelKi = attitudeSettings.AccelKi;
|
||||
accelKi = attitudeSettings.AccelKi;
|
||||
yawBiasRate = attitudeSettings.YawBiasRate;
|
||||
gyroGain = attitudeSettings.GyroGain;
|
||||
|
||||
|
||||
zero_during_arming = attitudeSettings.ZeroDuringArming == ATTITUDESETTINGS_ZERODURINGARMING_TRUE;
|
||||
|
||||
bias_correct_gyro = attitudeSettings.BiasCorrectGyro == ATTITUDESETTINGS_BIASCORRECTGYRO_TRUE;
|
||||
|
||||
accelbias[0] = attitudeSettings.AccelBias[ATTITUDESETTINGS_ACCELBIAS_X];
|
||||
accelbias[1] = attitudeSettings.AccelBias[ATTITUDESETTINGS_ACCELBIAS_Y];
|
||||
accelbias[2] = attitudeSettings.AccelBias[ATTITUDESETTINGS_ACCELBIAS_Z];
|
||||
|
||||
|
||||
gyro_correct_int[0] = attitudeSettings.GyroBias[ATTITUDESETTINGS_GYROBIAS_X] / 100.0f;
|
||||
gyro_correct_int[1] = attitudeSettings.GyroBias[ATTITUDESETTINGS_GYROBIAS_Y] / 100.0f;
|
||||
gyro_correct_int[2] = attitudeSettings.GyroBias[ATTITUDESETTINGS_GYROBIAS_Z] / 100.0f;
|
||||
|
||||
// Indicates not to expend cycles on rotation
|
||||
if(attitudeSettings.BoardRotation[0] == 0 && attitudeSettings.BoardRotation[1] == 0 &&
|
||||
attitudeSettings.BoardRotation[2] == 0) {
|
||||
rotate = 0;
|
||||
|
||||
|
||||
// Shouldn't be used but to be safe
|
||||
float rotationQuat[4] = {1,0,0,0};
|
||||
Quaternion2R(rotationQuat, R);
|
||||
} else {
|
||||
float rotationQuat[4];
|
||||
const float rpy[3] = {attitudeSettings.BoardRotation[ATTITUDESETTINGS_BOARDROTATION_ROLL],
|
||||
attitudeSettings.BoardRotation[ATTITUDESETTINGS_BOARDROTATION_PITCH],
|
||||
const float rpy[3] = {attitudeSettings.BoardRotation[ATTITUDESETTINGS_BOARDROTATION_ROLL],
|
||||
attitudeSettings.BoardRotation[ATTITUDESETTINGS_BOARDROTATION_PITCH],
|
||||
attitudeSettings.BoardRotation[ATTITUDESETTINGS_BOARDROTATION_YAW]};
|
||||
RPY2Quaternion(rpy, rotationQuat);
|
||||
Quaternion2R(rotationQuat, R);
|
||||
rotate = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @}
|
||||
|
@ -75,6 +75,8 @@ static void onTimer(UAVObjEvent* ev);
|
||||
* Initialise the module, called on startup
|
||||
* \returns 0 on success or -1 if initialisation failed
|
||||
*/
|
||||
MODULE_INITCALL(BatteryInitialize, 0)
|
||||
|
||||
int32_t BatteryInitialize(void)
|
||||
{
|
||||
static UAVObjEvent ev;
|
||||
|
@ -49,9 +49,14 @@
|
||||
#include "examplemodperiodic.h"
|
||||
#include "examplemodthread.h"
|
||||
|
||||
void ExampleInitialize(void)
|
||||
void ExampleStart(void)
|
||||
{
|
||||
ExampleModEventInitialize();
|
||||
ExampleModPeriodicInitialize();
|
||||
ExampleModThreadInitialize();
|
||||
}
|
||||
|
||||
void ExampleInitialize(void)
|
||||
{
|
||||
ExampleModEventInitialize();
|
||||
}
|
||||
MODULE_INITCALL(ExampleInitialize, ExampleStart)
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include <stdint.h>
|
||||
|
||||
#include "pios.h"
|
||||
#include <pios_board_info.h>
|
||||
#include "openpilot.h"
|
||||
#include "firmwareiap.h"
|
||||
#include "firmwareiapobj.h"
|
||||
@ -87,17 +88,19 @@ static void resetTask(UAVObjEvent *);
|
||||
* \note
|
||||
*
|
||||
*/
|
||||
|
||||
MODULE_INITCALL(FirmwareIAPInitialize, 0)
|
||||
int32_t FirmwareIAPInitialize()
|
||||
{
|
||||
data.BoardType= BOARD_TYPE;
|
||||
const struct pios_board_info * bdinfo = &pios_board_info_blob;
|
||||
|
||||
data.BoardType= bdinfo->board_type;
|
||||
PIOS_BL_HELPER_FLASH_Read_Description(data.Description,FIRMWAREIAPOBJ_DESCRIPTION_NUMELEM);
|
||||
PIOS_SYS_SerialNumberGetBinary(data.CPUSerial);
|
||||
data.BoardRevision= BOARD_REVISION;
|
||||
data.BoardRevision= bdinfo->board_rev;
|
||||
data.ArmReset=0;
|
||||
data.crc = 0;
|
||||
FirmwareIAPObjSet( &data );
|
||||
FirmwareIAPObjConnectCallback( &FirmwareIAPCallback );
|
||||
if(bdinfo->magic==PIOS_BOARD_INFO_BLOB_MAGIC) FirmwareIAPObjConnectCallback( &FirmwareIAPCallback );
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -112,6 +115,7 @@ int32_t FirmwareIAPInitialize()
|
||||
static uint8_t iap_state = IAP_STATE_READY;
|
||||
static void FirmwareIAPCallback(UAVObjEvent* ev)
|
||||
{
|
||||
const struct pios_board_info * bdinfo = &pios_board_info_blob;
|
||||
static uint32_t last_time = 0;
|
||||
uint32_t this_time;
|
||||
uint32_t delta;
|
||||
@ -125,11 +129,11 @@ static void FirmwareIAPCallback(UAVObjEvent* ev)
|
||||
this_time = get_time();
|
||||
delta = this_time - last_time;
|
||||
last_time = this_time;
|
||||
if((data.BoardType==BOARD_TYPE)&&(data.crc != PIOS_BL_HELPER_CRC_Memory_Calc()))
|
||||
if((data.BoardType==bdinfo->board_type)&&(data.crc != PIOS_BL_HELPER_CRC_Memory_Calc()))
|
||||
{
|
||||
PIOS_BL_HELPER_FLASH_Read_Description(data.Description,FIRMWAREIAPOBJ_DESCRIPTION_NUMELEM);
|
||||
PIOS_SYS_SerialNumberGetBinary(data.CPUSerial);
|
||||
data.BoardRevision=BOARD_REVISION;
|
||||
data.BoardRevision=bdinfo->board_rev;
|
||||
data.crc = PIOS_BL_HELPER_CRC_Memory_Calc();
|
||||
FirmwareIAPObjSet( &data );
|
||||
}
|
||||
|
@ -31,6 +31,7 @@
|
||||
|
||||
#include "openpilot.h"
|
||||
#include "pm.h"
|
||||
#include "flightplan.h"
|
||||
#include "flightplanstatus.h"
|
||||
#include "flightplancontrol.h"
|
||||
#include "flightplansettings.h"
|
||||
@ -53,6 +54,20 @@ static void objectUpdatedCb(UAVObjEvent * ev);
|
||||
// External variables (temporary, TODO: this will be loaded from the SD card)
|
||||
extern unsigned char usrlib_img[];
|
||||
|
||||
/**
|
||||
* Module initialization
|
||||
*/
|
||||
int32_t FlightPlanStart()
|
||||
{
|
||||
taskHandle = NULL;
|
||||
|
||||
// Start VM thread
|
||||
xTaskCreate(flightPlanTask, (signed char *)"FlightPlan", STACK_SIZE_BYTES/4, NULL, TASK_PRIORITY, &taskHandle);
|
||||
TaskMonitorAdd(TASKINFO_RUNNING_FLIGHTPLAN, taskHandle);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Module initialization
|
||||
*/
|
||||
@ -69,13 +84,9 @@ int32_t FlightPlanInitialize()
|
||||
// Listen for FlightPlanControl updates
|
||||
FlightPlanControlConnectQueue(queue);
|
||||
|
||||
// Start VM thread
|
||||
xTaskCreate(flightPlanTask, (signed char *)"FlightPlan", STACK_SIZE_BYTES/4, NULL, TASK_PRIORITY, &taskHandle);
|
||||
TaskMonitorAdd(TASKINFO_RUNNING_FLIGHTPLAN, taskHandle);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
MODULE_INITCALL(FlightPlanInitialize, FlightPlanStart)
|
||||
/**
|
||||
* Module task
|
||||
*/
|
||||
|
@ -288,7 +288,7 @@ class UAVObject:
|
||||
uint32_t type;
|
||||
uint32_t numElements;
|
||||
uint8_t const *tmpStr;
|
||||
int8_t tmpInt8;
|
||||
int8_t tmpInt8 = 0;
|
||||
int16_t tmpInt16;
|
||||
int32_t tmpInt32;
|
||||
float tmpFloat;
|
||||
|
@ -109,19 +109,27 @@ static uint32_t numParsingErrors;
|
||||
* \return 0 on success
|
||||
*/
|
||||
|
||||
int32_t GPSInitialize(void)
|
||||
int32_t GPSStart(void)
|
||||
{
|
||||
signed portBASE_TYPE xReturn;
|
||||
|
||||
// TODO: Get gps settings object
|
||||
gpsPort = PIOS_COM_GPS;
|
||||
|
||||
// Start gps task
|
||||
xReturn = xTaskCreate(gpsTask, (signed char *)"GPS", STACK_SIZE_BYTES/4, NULL, TASK_PRIORITY, &gpsTaskHandle);
|
||||
xTaskCreate(gpsTask, (signed char *)"GPS", STACK_SIZE_BYTES/4, NULL, TASK_PRIORITY, &gpsTaskHandle);
|
||||
TaskMonitorAdd(TASKINFO_RUNNING_GPS, gpsTaskHandle);
|
||||
|
||||
return 0;
|
||||
}
|
||||
/**
|
||||
* Initialise the gps module
|
||||
* \return -1 if initialisation failed
|
||||
* \return 0 on success
|
||||
*/
|
||||
int32_t GPSInitialize(void)
|
||||
{
|
||||
// TODO: Get gps settings object
|
||||
gpsPort = PIOS_COM_GPS;
|
||||
|
||||
return 0;
|
||||
}
|
||||
MODULE_INITCALL(GPSInitialize, GPSStart)
|
||||
|
||||
// ****************
|
||||
/**
|
||||
@ -188,8 +196,10 @@ static void gpsTask(void *parameters)
|
||||
|
||||
while (PIOS_COM_ReceiveBufferUsed(gpsPort) > 0)
|
||||
{
|
||||
int res = GTOP_BIN_update_position(PIOS_COM_ReceiveBuffer(gpsPort), &numChecksumErrors, &numParsingErrors);
|
||||
if (res >= 0)
|
||||
uint8_t c;
|
||||
PIOS_COM_ReceiveBuffer(gpsPort, &c, 1, 0);
|
||||
|
||||
if (GTOP_BIN_update_position(c, &numChecksumErrors, &numParsingErrors) >= 0)
|
||||
{
|
||||
numUpdates++;
|
||||
|
||||
@ -205,7 +215,8 @@ static void gpsTask(void *parameters)
|
||||
// This blocks the task until there is something on the buffer
|
||||
while (PIOS_COM_ReceiveBufferUsed(gpsPort) > 0)
|
||||
{
|
||||
char c = PIOS_COM_ReceiveBuffer(gpsPort);
|
||||
uint8_t c;
|
||||
PIOS_COM_ReceiveBuffer(gpsPort, &c, 1, 0);
|
||||
|
||||
// detect start while acquiring stream
|
||||
if (!start_flag && (c == '$'))
|
||||
|
@ -78,6 +78,19 @@ static void updateVtolDesiredVelocity();
|
||||
static void manualSetDesiredVelocity();
|
||||
static void updateVtolDesiredAttitude();
|
||||
|
||||
/**
|
||||
* Initialise the module, called on startup
|
||||
* \returns 0 on success or -1 if initialisation failed
|
||||
*/
|
||||
int32_t GuidanceStart()
|
||||
{
|
||||
// Start main task
|
||||
xTaskCreate(guidanceTask, (signed char *)"Guidance", STACK_SIZE_BYTES/4, NULL, TASK_PRIORITY, &guidanceTaskHandle);
|
||||
TaskMonitorAdd(TASKINFO_RUNNING_GUIDANCE, guidanceTaskHandle);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialise the module, called on startup
|
||||
* \returns 0 on success or -1 if initialisation failed
|
||||
@ -90,12 +103,9 @@ int32_t GuidanceInitialize()
|
||||
// Listen for updates.
|
||||
AttitudeRawConnectQueue(queue);
|
||||
|
||||
// Start main task
|
||||
xTaskCreate(guidanceTask, (signed char *)"Guidance", STACK_SIZE_BYTES/4, NULL, TASK_PRIORITY, &guidanceTaskHandle);
|
||||
TaskMonitorAdd(TASKINFO_RUNNING_GUIDANCE, guidanceTaskHandle);
|
||||
|
||||
return 0;
|
||||
}
|
||||
MODULE_INITCALL(GuidanceInitialize, GuidanceStart)
|
||||
|
||||
static float northVelIntegral = 0;
|
||||
static float eastVelIntegral = 0;
|
||||
@ -236,7 +246,7 @@ void updateVtolDesiredVelocity()
|
||||
{
|
||||
static portTickType lastSysTime;
|
||||
portTickType thisSysTime = xTaskGetTickCount();;
|
||||
float dT;
|
||||
float dT = 0;
|
||||
|
||||
GuidanceSettingsData guidanceSettings;
|
||||
PositionActualData positionActual;
|
||||
@ -304,7 +314,7 @@ static void updateVtolDesiredAttitude()
|
||||
{
|
||||
static portTickType lastSysTime;
|
||||
portTickType thisSysTime = xTaskGetTickCount();;
|
||||
float dT;
|
||||
float dT = 0;
|
||||
|
||||
VelocityDesiredData velocityDesired;
|
||||
VelocityActualData velocityActual;
|
||||
|
@ -27,5 +27,5 @@
|
||||
#define EXAMPLEMODPERIODIC_H
|
||||
|
||||
int32_t ExampleModPeriodicInitialize();
|
||||
|
||||
int32_t GuidanceInitialize(void);
|
||||
#endif // EXAMPLEMODPERIODIC_H
|
||||
|
@ -1,7 +1,7 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @addtogroup OpenPilotModules OpenPilot Modules
|
||||
* @{
|
||||
* @{
|
||||
* @addtogroup ManualControlModule Manual Control Module
|
||||
* @{
|
||||
*
|
||||
@ -45,4 +45,64 @@ typedef enum {FLIGHTMODE_UNDEFINED = 0, FLIGHTMODE_MANUAL = 1, FLIGHTMODE_STABIL
|
||||
|
||||
int32_t ManualControlInitialize();
|
||||
|
||||
|
||||
/*
|
||||
* These are assumptions we make in the flight code about the order of settings and their consistency between
|
||||
* objects. Please keep this synchronized to the UAVObjects
|
||||
*/
|
||||
#define assumptions1 ( \
|
||||
((int)MANUALCONTROLSETTINGS_STABILIZATION1SETTINGS_NONE == (int)STABILIZATIONDESIRED_STABILIZATIONMODE_NONE) && \
|
||||
((int)MANUALCONTROLSETTINGS_STABILIZATION1SETTINGS_RATE == (int)STABILIZATIONDESIRED_STABILIZATIONMODE_RATE) && \
|
||||
((int)MANUALCONTROLSETTINGS_STABILIZATION1SETTINGS_AXISLOCK == (int)STABILIZATIONDESIRED_STABILIZATIONMODE_AXISLOCK) && \
|
||||
((int)MANUALCONTROLSETTINGS_STABILIZATION1SETTINGS_WEAKLEVELING == (int)STABILIZATIONDESIRED_STABILIZATIONMODE_WEAKLEVELING) && \
|
||||
((int)MANUALCONTROLSETTINGS_STABILIZATION1SETTINGS_ATTITUDE == (int)STABILIZATIONDESIRED_STABILIZATIONMODE_ATTITUDE) \
|
||||
)
|
||||
|
||||
#define assumptions3 ( \
|
||||
((int)MANUALCONTROLSETTINGS_STABILIZATION2SETTINGS_NONE == (int)STABILIZATIONDESIRED_STABILIZATIONMODE_NONE) && \
|
||||
((int)MANUALCONTROLSETTINGS_STABILIZATION2SETTINGS_RATE == (int)STABILIZATIONDESIRED_STABILIZATIONMODE_RATE) && \
|
||||
((int)MANUALCONTROLSETTINGS_STABILIZATION2SETTINGS_AXISLOCK == (int)STABILIZATIONDESIRED_STABILIZATIONMODE_AXISLOCK) && \
|
||||
((int)MANUALCONTROLSETTINGS_STABILIZATION2SETTINGS_WEAKLEVELING == (int)STABILIZATIONDESIRED_STABILIZATIONMODE_WEAKLEVELING) && \
|
||||
((int)MANUALCONTROLSETTINGS_STABILIZATION2SETTINGS_ATTITUDE == (int)STABILIZATIONDESIRED_STABILIZATIONMODE_ATTITUDE) \
|
||||
)
|
||||
|
||||
#define assumptions5 ( \
|
||||
((int)MANUALCONTROLSETTINGS_STABILIZATION3SETTINGS_NONE == (int)STABILIZATIONDESIRED_STABILIZATIONMODE_NONE) && \
|
||||
((int)MANUALCONTROLSETTINGS_STABILIZATION3SETTINGS_RATE == (int)STABILIZATIONDESIRED_STABILIZATIONMODE_RATE) && \
|
||||
((int)MANUALCONTROLSETTINGS_STABILIZATION3SETTINGS_AXISLOCK == (int)STABILIZATIONDESIRED_STABILIZATIONMODE_AXISLOCK) && \
|
||||
((int)MANUALCONTROLSETTINGS_STABILIZATION3SETTINGS_WEAKLEVELING == (int)STABILIZATIONDESIRED_STABILIZATIONMODE_WEAKLEVELING) && \
|
||||
((int)MANUALCONTROLSETTINGS_STABILIZATION3SETTINGS_ATTITUDE == (int)STABILIZATIONDESIRED_STABILIZATIONMODE_ATTITUDE) \
|
||||
)
|
||||
|
||||
#define ARMING_CHANNEL_ROLL 0
|
||||
#define ARMING_CHANNEL_PITCH 1
|
||||
#define ARMING_CHANNEL_YAW 2
|
||||
|
||||
#define assumptions7 ( \
|
||||
( ((int)MANUALCONTROLSETTINGS_ARMING_ROLLLEFT -(int)MANUALCONTROLSETTINGS_ARMING_ROLLLEFT)/2 == ARMING_CHANNEL_ROLL) && \
|
||||
( ((int)MANUALCONTROLSETTINGS_ARMING_ROLLRIGHT -(int)MANUALCONTROLSETTINGS_ARMING_ROLLLEFT)/2 == ARMING_CHANNEL_ROLL) && \
|
||||
( ((int)MANUALCONTROLSETTINGS_ARMING_PITCHFORWARD -(int)MANUALCONTROLSETTINGS_ARMING_ROLLLEFT)/2 == ARMING_CHANNEL_PITCH) && \
|
||||
( ((int)MANUALCONTROLSETTINGS_ARMING_PITCHAFT -(int)MANUALCONTROLSETTINGS_ARMING_ROLLLEFT)/2 == ARMING_CHANNEL_PITCH) && \
|
||||
( ((int)MANUALCONTROLSETTINGS_ARMING_YAWLEFT -(int)MANUALCONTROLSETTINGS_ARMING_ROLLLEFT)/2 == ARMING_CHANNEL_YAW) && \
|
||||
( ((int)MANUALCONTROLSETTINGS_ARMING_YAWRIGHT -(int)MANUALCONTROLSETTINGS_ARMING_ROLLLEFT)/2 == ARMING_CHANNEL_YAW) \
|
||||
)
|
||||
|
||||
#define assumptions8 ( \
|
||||
( ((int)MANUALCONTROLSETTINGS_ARMING_ROLLLEFT -(int)MANUALCONTROLSETTINGS_ARMING_ROLLLEFT)%2 == 0) && \
|
||||
( ((int)MANUALCONTROLSETTINGS_ARMING_ROLLRIGHT -(int)MANUALCONTROLSETTINGS_ARMING_ROLLLEFT)%2 != 0) && \
|
||||
( ((int)MANUALCONTROLSETTINGS_ARMING_PITCHFORWARD -(int)MANUALCONTROLSETTINGS_ARMING_ROLLLEFT)%2 == 0) && \
|
||||
( ((int)MANUALCONTROLSETTINGS_ARMING_PITCHAFT -(int)MANUALCONTROLSETTINGS_ARMING_ROLLLEFT)%2 != 0) && \
|
||||
( ((int)MANUALCONTROLSETTINGS_ARMING_YAWLEFT -(int)MANUALCONTROLSETTINGS_ARMING_ROLLLEFT)%2 == 0) && \
|
||||
( ((int)MANUALCONTROLSETTINGS_ARMING_YAWRIGHT -(int)MANUALCONTROLSETTINGS_ARMING_ROLLLEFT)%2 != 0) \
|
||||
)
|
||||
|
||||
#define assumptions_flightmode ( \
|
||||
( (int)MANUALCONTROLSETTINGS_FLIGHTMODEPOSITION_MANUAL == (int) FLIGHTSTATUS_FLIGHTMODE_MANUAL) && \
|
||||
( (int)MANUALCONTROLSETTINGS_FLIGHTMODEPOSITION_STABILIZED1 == (int) FLIGHTSTATUS_FLIGHTMODE_STABILIZED1) && \
|
||||
( (int)MANUALCONTROLSETTINGS_FLIGHTMODEPOSITION_STABILIZED2 == (int) FLIGHTSTATUS_FLIGHTMODE_STABILIZED2) && \
|
||||
( (int)MANUALCONTROLSETTINGS_FLIGHTMODEPOSITION_STABILIZED3 == (int) FLIGHTSTATUS_FLIGHTMODE_STABILIZED3) && \
|
||||
( (int)MANUALCONTROLSETTINGS_FLIGHTMODEPOSITION_VELOCITYCONTROL == (int) FLIGHTSTATUS_FLIGHTMODE_VELOCITYCONTROL) && \
|
||||
( (int)MANUALCONTROLSETTINGS_FLIGHTMODEPOSITION_POSITIONHOLD == (int) FLIGHTSTATUS_FLIGHTMODE_POSITIONHOLD) \
|
||||
)
|
||||
|
||||
#endif // MANUALCONTROL_H
|
||||
|
@ -1,606 +1,587 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @addtogroup OpenPilotModules OpenPilot Modules
|
||||
* @{
|
||||
* @addtogroup ManualControlModule Manual Control Module
|
||||
* @brief Provide manual control or allow it alter flight mode.
|
||||
* @{
|
||||
*
|
||||
* Reads in the ManualControlCommand FlightMode setting from receiver then either
|
||||
* pass the settings straght to ActuatorDesired object (manual mode) or to
|
||||
* AttitudeDesired object (stabilized mode)
|
||||
*
|
||||
* @file manualcontrol.c
|
||||
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
|
||||
* @brief ManualControl module. Handles safety R/C link and flight mode.
|
||||
*
|
||||
* @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 "manualcontrol.h"
|
||||
#include "manualcontrolsettings.h"
|
||||
#include "stabilizationsettings.h"
|
||||
#include "manualcontrolcommand.h"
|
||||
#include "actuatordesired.h"
|
||||
#include "stabilizationdesired.h"
|
||||
#include "flighttelemetrystats.h"
|
||||
#include "flightstatus.h"
|
||||
|
||||
// Private constants
|
||||
#if defined(PIOS_MANUAL_STACK_SIZE)
|
||||
#define STACK_SIZE_BYTES PIOS_MANUAL_STACK_SIZE
|
||||
#else
|
||||
#define STACK_SIZE_BYTES 824
|
||||
#endif
|
||||
|
||||
#define TASK_PRIORITY (tskIDLE_PRIORITY+4)
|
||||
#define UPDATE_PERIOD_MS 20
|
||||
#define THROTTLE_FAILSAFE -0.1
|
||||
#define FLIGHT_MODE_LIMIT 1.0/3.0
|
||||
#define ARMED_TIME_MS 1000
|
||||
#define ARMED_THRESHOLD 0.50
|
||||
//safe band to allow a bit of calibration error or trim offset (in microseconds)
|
||||
#define CONNECTION_OFFSET 150
|
||||
|
||||
// Private types
|
||||
typedef enum
|
||||
{
|
||||
ARM_STATE_DISARMED,
|
||||
ARM_STATE_ARMING_MANUAL,
|
||||
ARM_STATE_ARMED,
|
||||
ARM_STATE_DISARMING_MANUAL,
|
||||
ARM_STATE_DISARMING_TIMEOUT
|
||||
} ArmState_t;
|
||||
|
||||
// Private variables
|
||||
static xTaskHandle taskHandle;
|
||||
static ArmState_t armState;
|
||||
static portTickType lastSysTime;
|
||||
|
||||
// Private functions
|
||||
static void updateActuatorDesired(ManualControlCommandData * cmd);
|
||||
static void updateStabilizationDesired(ManualControlCommandData * cmd, ManualControlSettingsData * settings);
|
||||
static void processFlightMode(ManualControlSettingsData * settings, float flightMode);
|
||||
static void processArm(ManualControlCommandData * cmd, ManualControlSettingsData * settings);
|
||||
|
||||
static void manualControlTask(void *parameters);
|
||||
static float scaleChannel(int16_t value, int16_t max, int16_t min, int16_t neutral);
|
||||
static uint32_t timeDifferenceMs(portTickType start_time, portTickType end_time);
|
||||
static bool okToArm(void);
|
||||
static bool validInputRange(int16_t min, int16_t max, uint16_t value);
|
||||
|
||||
#define assumptions1 ( \
|
||||
((int)MANUALCONTROLSETTINGS_STABILIZATION1SETTINGS_NONE == (int)STABILIZATIONDESIRED_STABILIZATIONMODE_NONE) && \
|
||||
((int)MANUALCONTROLSETTINGS_STABILIZATION1SETTINGS_RATE == (int)STABILIZATIONDESIRED_STABILIZATIONMODE_RATE) && \
|
||||
((int)MANUALCONTROLSETTINGS_STABILIZATION1SETTINGS_ATTITUDE == (int)STABILIZATIONDESIRED_STABILIZATIONMODE_ATTITUDE) \
|
||||
)
|
||||
|
||||
#define assumptions3 ( \
|
||||
((int)MANUALCONTROLSETTINGS_STABILIZATION2SETTINGS_NONE == (int)STABILIZATIONDESIRED_STABILIZATIONMODE_NONE) && \
|
||||
((int)MANUALCONTROLSETTINGS_STABILIZATION2SETTINGS_RATE == (int)STABILIZATIONDESIRED_STABILIZATIONMODE_RATE) && \
|
||||
((int)MANUALCONTROLSETTINGS_STABILIZATION2SETTINGS_ATTITUDE == (int)STABILIZATIONDESIRED_STABILIZATIONMODE_ATTITUDE) \
|
||||
)
|
||||
|
||||
#define assumptions5 ( \
|
||||
((int)MANUALCONTROLSETTINGS_STABILIZATION3SETTINGS_NONE == (int)STABILIZATIONDESIRED_STABILIZATIONMODE_NONE) && \
|
||||
((int)MANUALCONTROLSETTINGS_STABILIZATION3SETTINGS_RATE == (int)STABILIZATIONDESIRED_STABILIZATIONMODE_RATE) && \
|
||||
((int)MANUALCONTROLSETTINGS_STABILIZATION3SETTINGS_ATTITUDE == (int)STABILIZATIONDESIRED_STABILIZATIONMODE_ATTITUDE) \
|
||||
)
|
||||
|
||||
|
||||
|
||||
#define ARMING_CHANNEL_ROLL 0
|
||||
#define ARMING_CHANNEL_PITCH 1
|
||||
#define ARMING_CHANNEL_YAW 2
|
||||
|
||||
#define assumptions7 ( \
|
||||
( ((int)MANUALCONTROLSETTINGS_ARMING_ROLLLEFT -(int)MANUALCONTROLSETTINGS_ARMING_ROLLLEFT)/2 == ARMING_CHANNEL_ROLL) && \
|
||||
( ((int)MANUALCONTROLSETTINGS_ARMING_ROLLRIGHT -(int)MANUALCONTROLSETTINGS_ARMING_ROLLLEFT)/2 == ARMING_CHANNEL_ROLL) && \
|
||||
( ((int)MANUALCONTROLSETTINGS_ARMING_PITCHFORWARD -(int)MANUALCONTROLSETTINGS_ARMING_ROLLLEFT)/2 == ARMING_CHANNEL_PITCH) && \
|
||||
( ((int)MANUALCONTROLSETTINGS_ARMING_PITCHAFT -(int)MANUALCONTROLSETTINGS_ARMING_ROLLLEFT)/2 == ARMING_CHANNEL_PITCH) && \
|
||||
( ((int)MANUALCONTROLSETTINGS_ARMING_YAWLEFT -(int)MANUALCONTROLSETTINGS_ARMING_ROLLLEFT)/2 == ARMING_CHANNEL_YAW) && \
|
||||
( ((int)MANUALCONTROLSETTINGS_ARMING_YAWRIGHT -(int)MANUALCONTROLSETTINGS_ARMING_ROLLLEFT)/2 == ARMING_CHANNEL_YAW) \
|
||||
)
|
||||
|
||||
#define assumptions8 ( \
|
||||
( ((int)MANUALCONTROLSETTINGS_ARMING_ROLLLEFT -(int)MANUALCONTROLSETTINGS_ARMING_ROLLLEFT)%2 == 0) && \
|
||||
( ((int)MANUALCONTROLSETTINGS_ARMING_ROLLRIGHT -(int)MANUALCONTROLSETTINGS_ARMING_ROLLLEFT)%2 != 0) && \
|
||||
( ((int)MANUALCONTROLSETTINGS_ARMING_PITCHFORWARD -(int)MANUALCONTROLSETTINGS_ARMING_ROLLLEFT)%2 == 0) && \
|
||||
( ((int)MANUALCONTROLSETTINGS_ARMING_PITCHAFT -(int)MANUALCONTROLSETTINGS_ARMING_ROLLLEFT)%2 != 0) && \
|
||||
( ((int)MANUALCONTROLSETTINGS_ARMING_YAWLEFT -(int)MANUALCONTROLSETTINGS_ARMING_ROLLLEFT)%2 == 0) && \
|
||||
( ((int)MANUALCONTROLSETTINGS_ARMING_YAWRIGHT -(int)MANUALCONTROLSETTINGS_ARMING_ROLLLEFT)%2 != 0) \
|
||||
)
|
||||
|
||||
|
||||
#define assumptions_flightmode ( \
|
||||
( (int)MANUALCONTROLSETTINGS_FLIGHTMODEPOSITION_MANUAL == (int) FLIGHTSTATUS_FLIGHTMODE_MANUAL) && \
|
||||
( (int)MANUALCONTROLSETTINGS_FLIGHTMODEPOSITION_STABILIZED1 == (int) FLIGHTSTATUS_FLIGHTMODE_STABILIZED1) && \
|
||||
( (int)MANUALCONTROLSETTINGS_FLIGHTMODEPOSITION_STABILIZED2 == (int) FLIGHTSTATUS_FLIGHTMODE_STABILIZED2) && \
|
||||
( (int)MANUALCONTROLSETTINGS_FLIGHTMODEPOSITION_STABILIZED3 == (int) FLIGHTSTATUS_FLIGHTMODE_STABILIZED3) && \
|
||||
( (int)MANUALCONTROLSETTINGS_FLIGHTMODEPOSITION_VELOCITYCONTROL == (int) FLIGHTSTATUS_FLIGHTMODE_VELOCITYCONTROL) && \
|
||||
( (int)MANUALCONTROLSETTINGS_FLIGHTMODEPOSITION_POSITIONHOLD == (int) FLIGHTSTATUS_FLIGHTMODE_POSITIONHOLD) \
|
||||
)
|
||||
|
||||
#define assumptions (assumptions1 && assumptions3 && assumptions5 && assumptions7 && assumptions8 && assumptions_flightmode)
|
||||
|
||||
/**
|
||||
* Module initialization
|
||||
*/
|
||||
int32_t ManualControlInitialize()
|
||||
{
|
||||
/* Check the assumptions about uavobject enum's are correct */
|
||||
if(!assumptions)
|
||||
return -1;
|
||||
// Start main task
|
||||
xTaskCreate(manualControlTask, (signed char *)"ManualControl", STACK_SIZE_BYTES/4, NULL, TASK_PRIORITY, &taskHandle);
|
||||
TaskMonitorAdd(TASKINFO_RUNNING_MANUALCONTROL, taskHandle);
|
||||
PIOS_WDG_RegisterFlag(PIOS_WDG_MANUAL);
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Module task
|
||||
*/
|
||||
static void manualControlTask(void *parameters)
|
||||
{
|
||||
ManualControlSettingsData settings;
|
||||
ManualControlCommandData cmd;
|
||||
FlightStatusData flightStatus;
|
||||
float flightMode = 0;
|
||||
|
||||
uint8_t disconnected_count = 0;
|
||||
uint8_t connected_count = 0;
|
||||
|
||||
// Make sure unarmed on power up
|
||||
ManualControlCommandGet(&cmd);
|
||||
FlightStatusGet(&flightStatus);
|
||||
flightStatus.Armed = FLIGHTSTATUS_ARMED_DISARMED;
|
||||
armState = ARM_STATE_DISARMED;
|
||||
|
||||
// Main task loop
|
||||
lastSysTime = xTaskGetTickCount();
|
||||
while (1) {
|
||||
float scaledChannel[MANUALCONTROLCOMMAND_CHANNEL_NUMELEM];
|
||||
|
||||
// Wait until next update
|
||||
vTaskDelayUntil(&lastSysTime, UPDATE_PERIOD_MS / portTICK_RATE_MS);
|
||||
PIOS_WDG_UpdateFlag(PIOS_WDG_MANUAL);
|
||||
|
||||
// Read settings
|
||||
ManualControlSettingsGet(&settings);
|
||||
|
||||
if (ManualControlCommandReadOnly(&cmd)) {
|
||||
FlightTelemetryStatsData flightTelemStats;
|
||||
FlightTelemetryStatsGet(&flightTelemStats);
|
||||
if(flightTelemStats.Status != FLIGHTTELEMETRYSTATS_STATUS_CONNECTED) {
|
||||
/* trying to fly via GCS and lost connection. fall back to transmitter */
|
||||
UAVObjMetadata metadata;
|
||||
UAVObjGetMetadata(&cmd, &metadata);
|
||||
metadata.access = ACCESS_READWRITE;
|
||||
UAVObjSetMetadata(&cmd, &metadata);
|
||||
}
|
||||
}
|
||||
|
||||
if (!ManualControlCommandReadOnly(&cmd)) {
|
||||
|
||||
// Read channel values in us
|
||||
// TODO: settings.InputMode is currently ignored because PIOS will not allow runtime
|
||||
// selection of PWM and PPM. The configuration is currently done at compile time in
|
||||
// the pios_config.h file.
|
||||
for (int n = 0; n < MANUALCONTROLCOMMAND_CHANNEL_NUMELEM; ++n) {
|
||||
#if defined(PIOS_INCLUDE_PWM)
|
||||
cmd.Channel[n] = PIOS_PWM_Get(n);
|
||||
#elif defined(PIOS_INCLUDE_PPM)
|
||||
cmd.Channel[n] = PIOS_PPM_Get(n);
|
||||
#elif defined(PIOS_INCLUDE_SPEKTRUM)
|
||||
cmd.Channel[n] = PIOS_SPEKTRUM_Get(n);
|
||||
#endif
|
||||
scaledChannel[n] = scaleChannel(cmd.Channel[n], settings.ChannelMax[n], settings.ChannelMin[n], settings.ChannelNeutral[n]);
|
||||
}
|
||||
|
||||
// Check settings, if error raise alarm
|
||||
if (settings.Roll >= MANUALCONTROLSETTINGS_ROLL_NONE ||
|
||||
settings.Pitch >= MANUALCONTROLSETTINGS_PITCH_NONE ||
|
||||
settings.Yaw >= MANUALCONTROLSETTINGS_YAW_NONE ||
|
||||
settings.Throttle >= MANUALCONTROLSETTINGS_THROTTLE_NONE ||
|
||||
settings.FlightMode >= MANUALCONTROLSETTINGS_FLIGHTMODE_NONE) {
|
||||
AlarmsSet(SYSTEMALARMS_ALARM_MANUALCONTROL, SYSTEMALARMS_ALARM_CRITICAL);
|
||||
cmd.Connected = MANUALCONTROLCOMMAND_CONNECTED_FALSE;
|
||||
ManualControlCommandSet(&cmd);
|
||||
continue;
|
||||
}
|
||||
|
||||
// decide if we have valid manual input or not
|
||||
bool valid_input_detected = validInputRange(settings.ChannelMin[settings.Throttle], settings.ChannelMax[settings.Throttle], cmd.Channel[settings.Throttle]) &&
|
||||
validInputRange(settings.ChannelMin[settings.Roll], settings.ChannelMax[settings.Roll], cmd.Channel[settings.Roll]) &&
|
||||
validInputRange(settings.ChannelMin[settings.Yaw], settings.ChannelMax[settings.Yaw], cmd.Channel[settings.Yaw]) &&
|
||||
validInputRange(settings.ChannelMin[settings.Pitch], settings.ChannelMax[settings.Pitch], cmd.Channel[settings.Pitch]);
|
||||
|
||||
// Implement hysteresis loop on connection status
|
||||
if (valid_input_detected && (++connected_count > 10)) {
|
||||
cmd.Connected = MANUALCONTROLCOMMAND_CONNECTED_TRUE;
|
||||
connected_count = 0;
|
||||
disconnected_count = 0;
|
||||
} else if (!valid_input_detected && (++disconnected_count > 10)) {
|
||||
cmd.Connected = MANUALCONTROLCOMMAND_CONNECTED_FALSE;
|
||||
connected_count = 0;
|
||||
disconnected_count = 0;
|
||||
}
|
||||
|
||||
if (cmd.Connected == MANUALCONTROLCOMMAND_CONNECTED_FALSE) {
|
||||
cmd.Throttle = -1; // Shut down engine with no control
|
||||
cmd.Roll = 0;
|
||||
cmd.Yaw = 0;
|
||||
cmd.Pitch = 0;
|
||||
//cmd.FlightMode = MANUALCONTROLCOMMAND_FLIGHTMODE_AUTO; // don't do until AUTO implemented and functioning
|
||||
// Important: Throttle < 0 will reset Stabilization coefficients among other things. Either change this,
|
||||
// or leave throttle at IDLE speed or above when going into AUTO-failsafe.
|
||||
AlarmsSet(SYSTEMALARMS_ALARM_MANUALCONTROL, SYSTEMALARMS_ALARM_WARNING);
|
||||
ManualControlCommandSet(&cmd);
|
||||
} else {
|
||||
AlarmsClear(SYSTEMALARMS_ALARM_MANUALCONTROL);
|
||||
|
||||
// Scale channels to -1 -> +1 range
|
||||
cmd.Roll = scaledChannel[settings.Roll];
|
||||
cmd.Pitch = scaledChannel[settings.Pitch];
|
||||
cmd.Yaw = scaledChannel[settings.Yaw];
|
||||
cmd.Throttle = scaledChannel[settings.Throttle];
|
||||
flightMode = scaledChannel[settings.FlightMode];
|
||||
|
||||
// Set accessory channels
|
||||
cmd.Accessory1 = (settings.Accessory1 != MANUALCONTROLSETTINGS_ACCESSORY1_NONE) ? scaledChannel[settings.Accessory1] : 0;
|
||||
cmd.Accessory2 = (settings.Accessory2 != MANUALCONTROLSETTINGS_ACCESSORY2_NONE) ? scaledChannel[settings.Accessory2] : 0;
|
||||
cmd.Accessory3 = (settings.Accessory3 != MANUALCONTROLSETTINGS_ACCESSORY3_NONE) ? scaledChannel[settings.Accessory3] : 0;
|
||||
|
||||
processFlightMode(&settings, flightMode);
|
||||
processArm(&cmd, &settings);
|
||||
|
||||
// Update cmd object
|
||||
ManualControlCommandSet(&cmd);
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
ManualControlCommandGet(&cmd); /* Under GCS control */
|
||||
}
|
||||
|
||||
|
||||
FlightStatusGet(&flightStatus);
|
||||
|
||||
// Depending on the mode update the Stabilization or Actuator objects
|
||||
switch(PARSE_FLIGHT_MODE(flightStatus.FlightMode)) {
|
||||
case FLIGHTMODE_UNDEFINED:
|
||||
// This reflects a bug in the code architecture!
|
||||
AlarmsSet(SYSTEMALARMS_ALARM_MANUALCONTROL, SYSTEMALARMS_ALARM_CRITICAL);
|
||||
break;
|
||||
case FLIGHTMODE_MANUAL:
|
||||
updateActuatorDesired(&cmd);
|
||||
break;
|
||||
case FLIGHTMODE_STABILIZED:
|
||||
updateStabilizationDesired(&cmd, &settings);
|
||||
break;
|
||||
case FLIGHTMODE_GUIDANCE:
|
||||
// TODO: Implement
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void updateActuatorDesired(ManualControlCommandData * cmd)
|
||||
{
|
||||
ActuatorDesiredData actuator;
|
||||
ActuatorDesiredGet(&actuator);
|
||||
actuator.Roll = cmd->Roll;
|
||||
actuator.Pitch = cmd->Pitch;
|
||||
actuator.Yaw = cmd->Yaw;
|
||||
actuator.Throttle = (cmd->Throttle < 0) ? -1 : cmd->Throttle;
|
||||
ActuatorDesiredSet(&actuator);
|
||||
}
|
||||
|
||||
static void updateStabilizationDesired(ManualControlCommandData * cmd, ManualControlSettingsData * settings)
|
||||
{
|
||||
StabilizationDesiredData stabilization;
|
||||
StabilizationDesiredGet(&stabilization);
|
||||
|
||||
StabilizationSettingsData stabSettings;
|
||||
StabilizationSettingsGet(&stabSettings);
|
||||
|
||||
uint8_t * stab_settings;
|
||||
FlightStatusData flightStatus;
|
||||
FlightStatusGet(&flightStatus);
|
||||
switch(flightStatus.FlightMode) {
|
||||
case FLIGHTSTATUS_FLIGHTMODE_STABILIZED1:
|
||||
stab_settings = settings->Stabilization1Settings;
|
||||
break;
|
||||
case FLIGHTSTATUS_FLIGHTMODE_STABILIZED2:
|
||||
stab_settings = settings->Stabilization2Settings;
|
||||
break;
|
||||
case FLIGHTSTATUS_FLIGHTMODE_STABILIZED3:
|
||||
stab_settings = settings->Stabilization3Settings;
|
||||
break;
|
||||
default:
|
||||
// Major error, this should not occur because only enter this block when one of these is true
|
||||
AlarmsSet(SYSTEMALARMS_ALARM_MANUALCONTROL, SYSTEMALARMS_ALARM_CRITICAL);
|
||||
return;
|
||||
}
|
||||
|
||||
// TOOD: Add assumption about order of stabilization desired and manual control stabilization mode fields having same order
|
||||
stabilization.StabilizationMode[STABILIZATIONDESIRED_STABILIZATIONMODE_ROLL] = stab_settings[0];
|
||||
stabilization.StabilizationMode[STABILIZATIONDESIRED_STABILIZATIONMODE_PITCH] = stab_settings[1];
|
||||
stabilization.StabilizationMode[STABILIZATIONDESIRED_STABILIZATIONMODE_YAW] = stab_settings[2];
|
||||
|
||||
stabilization.Roll = (stab_settings[0] == STABILIZATIONDESIRED_STABILIZATIONMODE_NONE) ? cmd->Roll :
|
||||
(stab_settings[0] == STABILIZATIONDESIRED_STABILIZATIONMODE_RATE) ? cmd->Roll * stabSettings.ManualRate[STABILIZATIONSETTINGS_MANUALRATE_ROLL] :
|
||||
(stab_settings[0] == STABILIZATIONDESIRED_STABILIZATIONMODE_ATTITUDE) ? cmd->Roll * stabSettings.RollMax :
|
||||
0; // this is an invalid mode
|
||||
;
|
||||
stabilization.Pitch = (stab_settings[1] == STABILIZATIONDESIRED_STABILIZATIONMODE_NONE) ? cmd->Pitch :
|
||||
(stab_settings[1] == STABILIZATIONDESIRED_STABILIZATIONMODE_RATE) ? cmd->Pitch * stabSettings.ManualRate[STABILIZATIONSETTINGS_MANUALRATE_PITCH] :
|
||||
(stab_settings[1] == STABILIZATIONDESIRED_STABILIZATIONMODE_ATTITUDE) ? cmd->Pitch * stabSettings.PitchMax :
|
||||
0; // this is an invalid mode
|
||||
|
||||
stabilization.Yaw = (stab_settings[2] == STABILIZATIONDESIRED_STABILIZATIONMODE_NONE) ? cmd->Yaw :
|
||||
(stab_settings[2] == STABILIZATIONDESIRED_STABILIZATIONMODE_RATE) ? cmd->Yaw * stabSettings.ManualRate[STABILIZATIONSETTINGS_MANUALRATE_YAW] :
|
||||
(stab_settings[2] == STABILIZATIONDESIRED_STABILIZATIONMODE_ATTITUDE) ? fmod(cmd->Yaw * 180.0, 360) :
|
||||
0; // this is an invalid mode
|
||||
|
||||
stabilization.Throttle = (cmd->Throttle < 0) ? -1 : cmd->Throttle;
|
||||
StabilizationDesiredSet(&stabilization);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert channel from servo pulse duration (microseconds) to scaled -1/+1 range.
|
||||
*/
|
||||
static float scaleChannel(int16_t value, int16_t max, int16_t min, int16_t neutral)
|
||||
{
|
||||
float valueScaled;
|
||||
|
||||
// Scale
|
||||
if ((max > min && value >= neutral) || (min > max && value <= neutral))
|
||||
{
|
||||
if (max != neutral)
|
||||
valueScaled = (float)(value - neutral) / (float)(max - neutral);
|
||||
else
|
||||
valueScaled = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (min != neutral)
|
||||
valueScaled = (float)(value - neutral) / (float)(neutral - min);
|
||||
else
|
||||
valueScaled = 0;
|
||||
}
|
||||
|
||||
// Bound
|
||||
if (valueScaled > 1.0) valueScaled = 1.0;
|
||||
else
|
||||
if (valueScaled < -1.0) valueScaled = -1.0;
|
||||
|
||||
return valueScaled;
|
||||
}
|
||||
|
||||
static uint32_t timeDifferenceMs(portTickType start_time, portTickType end_time) {
|
||||
if(end_time > start_time)
|
||||
return (end_time - start_time) * portTICK_RATE_MS;
|
||||
return ((((portTICK_RATE_MS) -1) - start_time) + end_time) * portTICK_RATE_MS;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Determine if the aircraft is safe to arm
|
||||
* @returns True if safe to arm, false otherwise
|
||||
*/
|
||||
static bool okToArm(void)
|
||||
{
|
||||
// read alarms
|
||||
SystemAlarmsData alarms;
|
||||
SystemAlarmsGet(&alarms);
|
||||
|
||||
|
||||
// Check each alarm
|
||||
for (int i = 0; i < SYSTEMALARMS_ALARM_NUMELEM; i++)
|
||||
{
|
||||
if (alarms.Alarm[i] >= SYSTEMALARMS_ALARM_ERROR)
|
||||
{ // found an alarm thats set
|
||||
if (i == SYSTEMALARMS_ALARM_GPS || i == SYSTEMALARMS_ALARM_TELEMETRY)
|
||||
continue;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Update the flightStatus object only if value changed. Reduces callbacks
|
||||
* @param[in] val The new value
|
||||
*/
|
||||
static void setArmedIfChanged(uint8_t val) {
|
||||
FlightStatusData flightStatus;
|
||||
FlightStatusGet(&flightStatus);
|
||||
|
||||
if(flightStatus.Armed != val) {
|
||||
flightStatus.Armed = val;
|
||||
FlightStatusSet(&flightStatus);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Process the inputs and determine whether to arm or not
|
||||
* @param[out] cmd The structure to set the armed in
|
||||
* @param[in] settings Settings indicating the necessary position
|
||||
*/
|
||||
static void processArm(ManualControlCommandData * cmd, ManualControlSettingsData * settings)
|
||||
{
|
||||
|
||||
bool lowThrottle = cmd->Throttle <= 0;
|
||||
|
||||
if (settings->Arming == MANUALCONTROLSETTINGS_ARMING_ALWAYSDISARMED) {
|
||||
// In this configuration we always disarm
|
||||
setArmedIfChanged(FLIGHTSTATUS_ARMED_DISARMED);
|
||||
} else {
|
||||
// Not really needed since this function not called when disconnected
|
||||
if (cmd->Connected == MANUALCONTROLCOMMAND_CONNECTED_FALSE)
|
||||
return;
|
||||
|
||||
// The throttle is not low, in case we where arming or disarming, abort
|
||||
if (!lowThrottle) {
|
||||
switch(armState) {
|
||||
case ARM_STATE_DISARMING_MANUAL:
|
||||
case ARM_STATE_DISARMING_TIMEOUT:
|
||||
armState = ARM_STATE_ARMED;
|
||||
break;
|
||||
case ARM_STATE_ARMING_MANUAL:
|
||||
armState = ARM_STATE_DISARMED;
|
||||
break;
|
||||
default:
|
||||
// Nothing needs to be done in the other states
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// The rest of these cases throttle is low
|
||||
if (settings->Arming == MANUALCONTROLSETTINGS_ARMING_ALWAYSARMED) {
|
||||
// In this configuration, we go into armed state as soon as the throttle is low, never disarm
|
||||
setArmedIfChanged(FLIGHTSTATUS_ARMED_ARMED);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// When the configuration is not "Always armed" and no "Always disarmed",
|
||||
// the state will not be changed when the throttle is not low
|
||||
static portTickType armedDisarmStart;
|
||||
float armingInputLevel = 0;
|
||||
|
||||
// Calc channel see assumptions7
|
||||
int8_t sign = ((settings->Arming-MANUALCONTROLSETTINGS_ARMING_ROLLLEFT)%2) ? -1 : 1;
|
||||
switch ( (settings->Arming-MANUALCONTROLSETTINGS_ARMING_ROLLLEFT)/2 ) {
|
||||
case ARMING_CHANNEL_ROLL: armingInputLevel = sign * cmd->Roll; break;
|
||||
case ARMING_CHANNEL_PITCH: armingInputLevel = sign * cmd->Pitch; break;
|
||||
case ARMING_CHANNEL_YAW: armingInputLevel = sign * cmd->Yaw; break;
|
||||
}
|
||||
|
||||
bool manualArm = false;
|
||||
bool manualDisarm = false;
|
||||
|
||||
if (armingInputLevel <= -ARMED_THRESHOLD)
|
||||
manualArm = true;
|
||||
else if (armingInputLevel >= +ARMED_THRESHOLD)
|
||||
manualDisarm = true;
|
||||
|
||||
switch(armState) {
|
||||
case ARM_STATE_DISARMED:
|
||||
setArmedIfChanged(FLIGHTSTATUS_ARMED_DISARMED);
|
||||
|
||||
// only allow arming if it's OK too
|
||||
if (manualArm && okToArm()) {
|
||||
armedDisarmStart = lastSysTime;
|
||||
armState = ARM_STATE_ARMING_MANUAL;
|
||||
}
|
||||
break;
|
||||
|
||||
case ARM_STATE_ARMING_MANUAL:
|
||||
setArmedIfChanged(FLIGHTSTATUS_ARMED_ARMING);
|
||||
|
||||
if (manualArm && (timeDifferenceMs(armedDisarmStart, lastSysTime) > ARMED_TIME_MS))
|
||||
armState = ARM_STATE_ARMED;
|
||||
else if (!manualArm)
|
||||
armState = ARM_STATE_DISARMED;
|
||||
break;
|
||||
|
||||
case ARM_STATE_ARMED:
|
||||
// When we get here, the throttle is low,
|
||||
// we go immediately to disarming due to timeout, also when the disarming mechanism is not enabled
|
||||
armedDisarmStart = lastSysTime;
|
||||
armState = ARM_STATE_DISARMING_TIMEOUT;
|
||||
setArmedIfChanged(FLIGHTSTATUS_ARMED_ARMED);
|
||||
break;
|
||||
|
||||
case ARM_STATE_DISARMING_TIMEOUT:
|
||||
// We get here when armed while throttle low, even when the arming timeout is not enabled
|
||||
if ((settings->ArmedTimeout != 0) && (timeDifferenceMs(armedDisarmStart, lastSysTime) > settings->ArmedTimeout))
|
||||
armState = ARM_STATE_DISARMED;
|
||||
|
||||
// Switch to disarming due to manual control when needed
|
||||
if (manualDisarm) {
|
||||
armedDisarmStart = lastSysTime;
|
||||
armState = ARM_STATE_DISARMING_MANUAL;
|
||||
}
|
||||
break;
|
||||
|
||||
case ARM_STATE_DISARMING_MANUAL:
|
||||
if (manualDisarm &&(timeDifferenceMs(armedDisarmStart, lastSysTime) > ARMED_TIME_MS))
|
||||
armState = ARM_STATE_DISARMED;
|
||||
else if (!manualDisarm)
|
||||
armState = ARM_STATE_ARMED;
|
||||
break;
|
||||
} // End Switch
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Determine which of three positions the flight mode switch is in and set flight mode accordingly
|
||||
* @param[out] cmd Pointer to the command structure to set the flight mode in
|
||||
* @param[in] settings The settings which indicate which position is which mode
|
||||
* @param[in] flightMode the value of the switch position
|
||||
*/
|
||||
static void processFlightMode(ManualControlSettingsData * settings, float flightMode)
|
||||
{
|
||||
FlightStatusData flightStatus;
|
||||
FlightStatusGet(&flightStatus);
|
||||
|
||||
uint8_t newMode;
|
||||
// Note here the code is ass
|
||||
if (flightMode < -FLIGHT_MODE_LIMIT)
|
||||
newMode = settings->FlightModePosition[0];
|
||||
else if (flightMode > FLIGHT_MODE_LIMIT)
|
||||
newMode = settings->FlightModePosition[2];
|
||||
else
|
||||
newMode = settings->FlightModePosition[1];
|
||||
|
||||
if(flightStatus.FlightMode != newMode) {
|
||||
flightStatus.FlightMode = newMode;
|
||||
FlightStatusSet(&flightStatus);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Determine if the manual input value is within acceptable limits
|
||||
* @returns return TRUE if so, otherwise return FALSE
|
||||
*/
|
||||
bool validInputRange(int16_t min, int16_t max, uint16_t value)
|
||||
{
|
||||
if (min > max)
|
||||
{
|
||||
int16_t tmp = min;
|
||||
min = max;
|
||||
max = tmp;
|
||||
}
|
||||
return (value >= min - CONNECTION_OFFSET && value <= max + CONNECTION_OFFSET);
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
* @}
|
||||
*/
|
||||
/**
|
||||
******************************************************************************
|
||||
* @addtogroup OpenPilotModules OpenPilot Modules
|
||||
* @{
|
||||
* @addtogroup ManualControlModule Manual Control Module
|
||||
* @brief Provide manual control or allow it alter flight mode.
|
||||
* @{
|
||||
*
|
||||
* Reads in the ManualControlCommand FlightMode setting from receiver then either
|
||||
* pass the settings straght to ActuatorDesired object (manual mode) or to
|
||||
* AttitudeDesired object (stabilized mode)
|
||||
*
|
||||
* @file manualcontrol.c
|
||||
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
|
||||
* @brief ManualControl module. Handles safety R/C link and flight mode.
|
||||
*
|
||||
* @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 "manualcontrol.h"
|
||||
#include "manualcontrolsettings.h"
|
||||
#include "stabilizationsettings.h"
|
||||
#include "manualcontrolcommand.h"
|
||||
#include "actuatordesired.h"
|
||||
#include "stabilizationdesired.h"
|
||||
#include "flighttelemetrystats.h"
|
||||
#include "flightstatus.h"
|
||||
#include "accessorydesired.h"
|
||||
|
||||
// Private constants
|
||||
#if defined(PIOS_MANUAL_STACK_SIZE)
|
||||
#define STACK_SIZE_BYTES PIOS_MANUAL_STACK_SIZE
|
||||
#else
|
||||
#define STACK_SIZE_BYTES 824
|
||||
#endif
|
||||
|
||||
#define TASK_PRIORITY (tskIDLE_PRIORITY+4)
|
||||
#define UPDATE_PERIOD_MS 20
|
||||
#define THROTTLE_FAILSAFE -0.1
|
||||
#define FLIGHT_MODE_LIMIT 1.0/3.0
|
||||
#define ARMED_TIME_MS 1000
|
||||
#define ARMED_THRESHOLD 0.50
|
||||
//safe band to allow a bit of calibration error or trim offset (in microseconds)
|
||||
#define CONNECTION_OFFSET 150
|
||||
|
||||
// Private types
|
||||
typedef enum
|
||||
{
|
||||
ARM_STATE_DISARMED,
|
||||
ARM_STATE_ARMING_MANUAL,
|
||||
ARM_STATE_ARMED,
|
||||
ARM_STATE_DISARMING_MANUAL,
|
||||
ARM_STATE_DISARMING_TIMEOUT
|
||||
} ArmState_t;
|
||||
|
||||
// Private variables
|
||||
static xTaskHandle taskHandle;
|
||||
static ArmState_t armState;
|
||||
static portTickType lastSysTime;
|
||||
|
||||
// Private functions
|
||||
static void updateActuatorDesired(ManualControlCommandData * cmd);
|
||||
static void updateStabilizationDesired(ManualControlCommandData * cmd, ManualControlSettingsData * settings);
|
||||
static void processFlightMode(ManualControlSettingsData * settings, float flightMode);
|
||||
static void processArm(ManualControlCommandData * cmd, ManualControlSettingsData * settings);
|
||||
|
||||
static void manualControlTask(void *parameters);
|
||||
static float scaleChannel(int16_t value, int16_t max, int16_t min, int16_t neutral);
|
||||
static uint32_t timeDifferenceMs(portTickType start_time, portTickType end_time);
|
||||
static bool okToArm(void);
|
||||
static bool validInputRange(int16_t min, int16_t max, uint16_t value);
|
||||
|
||||
#define assumptions (assumptions1 && assumptions3 && assumptions5 && assumptions7 && assumptions8 && assumptions_flightmode)
|
||||
|
||||
/**
|
||||
* Module initialization
|
||||
*/
|
||||
int32_t ManualControlStart()
|
||||
{
|
||||
/* Check the assumptions about uavobject enum's are correct */
|
||||
if(!assumptions)
|
||||
return -1;
|
||||
// Start main task
|
||||
xTaskCreate(manualControlTask, (signed char *)"ManualControl", STACK_SIZE_BYTES/4, NULL, TASK_PRIORITY, &taskHandle);
|
||||
TaskMonitorAdd(TASKINFO_RUNNING_MANUALCONTROL, taskHandle);
|
||||
PIOS_WDG_RegisterFlag(PIOS_WDG_MANUAL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Module initialization
|
||||
*/
|
||||
int32_t ManualControlInitialize()
|
||||
{
|
||||
|
||||
return 0;
|
||||
}
|
||||
MODULE_INITCALL(ManualControlInitialize, ManualControlStart)
|
||||
|
||||
/**
|
||||
* Module task
|
||||
*/
|
||||
static void manualControlTask(void *parameters)
|
||||
{
|
||||
ManualControlSettingsData settings;
|
||||
ManualControlCommandData cmd;
|
||||
FlightStatusData flightStatus;
|
||||
float flightMode = 0;
|
||||
|
||||
uint8_t disconnected_count = 0;
|
||||
uint8_t connected_count = 0;
|
||||
|
||||
// For now manual instantiate extra instances of Accessory Desired. In future should be done dynamically
|
||||
// this includes not even registering it if not used
|
||||
AccessoryDesiredCreateInstance();
|
||||
AccessoryDesiredCreateInstance();
|
||||
|
||||
// Make sure unarmed on power up
|
||||
ManualControlCommandGet(&cmd);
|
||||
FlightStatusGet(&flightStatus);
|
||||
flightStatus.Armed = FLIGHTSTATUS_ARMED_DISARMED;
|
||||
armState = ARM_STATE_DISARMED;
|
||||
|
||||
// Main task loop
|
||||
lastSysTime = xTaskGetTickCount();
|
||||
while (1) {
|
||||
float scaledChannel[MANUALCONTROLCOMMAND_CHANNEL_NUMELEM];
|
||||
|
||||
// Wait until next update
|
||||
vTaskDelayUntil(&lastSysTime, UPDATE_PERIOD_MS / portTICK_RATE_MS);
|
||||
PIOS_WDG_UpdateFlag(PIOS_WDG_MANUAL);
|
||||
|
||||
// Read settings
|
||||
ManualControlSettingsGet(&settings);
|
||||
|
||||
if (ManualControlCommandReadOnly(&cmd)) {
|
||||
FlightTelemetryStatsData flightTelemStats;
|
||||
FlightTelemetryStatsGet(&flightTelemStats);
|
||||
if(flightTelemStats.Status != FLIGHTTELEMETRYSTATS_STATUS_CONNECTED) {
|
||||
/* trying to fly via GCS and lost connection. fall back to transmitter */
|
||||
UAVObjMetadata metadata;
|
||||
UAVObjGetMetadata(&cmd, &metadata);
|
||||
metadata.access = ACCESS_READWRITE;
|
||||
UAVObjSetMetadata(&cmd, &metadata);
|
||||
}
|
||||
}
|
||||
|
||||
if (!ManualControlCommandReadOnly(&cmd)) {
|
||||
|
||||
// Read channel values in us
|
||||
for (int n = 0; n < MANUALCONTROLCOMMAND_CHANNEL_NUMELEM; ++n) {
|
||||
if (pios_rcvr_channel_to_id_map[n].id) {
|
||||
cmd.Channel[n] = PIOS_RCVR_Read(pios_rcvr_channel_to_id_map[n].id,
|
||||
pios_rcvr_channel_to_id_map[n].channel);
|
||||
} else {
|
||||
cmd.Channel[n] = -1;
|
||||
}
|
||||
scaledChannel[n] = scaleChannel(cmd.Channel[n], settings.ChannelMax[n], settings.ChannelMin[n], settings.ChannelNeutral[n]);
|
||||
}
|
||||
|
||||
// Check settings, if error raise alarm
|
||||
if (settings.Roll >= MANUALCONTROLSETTINGS_ROLL_NONE ||
|
||||
settings.Pitch >= MANUALCONTROLSETTINGS_PITCH_NONE ||
|
||||
settings.Yaw >= MANUALCONTROLSETTINGS_YAW_NONE ||
|
||||
settings.Throttle >= MANUALCONTROLSETTINGS_THROTTLE_NONE ||
|
||||
settings.FlightMode >= MANUALCONTROLSETTINGS_FLIGHTMODE_NONE) {
|
||||
AlarmsSet(SYSTEMALARMS_ALARM_MANUALCONTROL, SYSTEMALARMS_ALARM_CRITICAL);
|
||||
cmd.Connected = MANUALCONTROLCOMMAND_CONNECTED_FALSE;
|
||||
ManualControlCommandSet(&cmd);
|
||||
continue;
|
||||
}
|
||||
|
||||
// decide if we have valid manual input or not
|
||||
bool valid_input_detected = validInputRange(settings.ChannelMin[settings.Throttle], settings.ChannelMax[settings.Throttle], cmd.Channel[settings.Throttle]) &&
|
||||
validInputRange(settings.ChannelMin[settings.Roll], settings.ChannelMax[settings.Roll], cmd.Channel[settings.Roll]) &&
|
||||
validInputRange(settings.ChannelMin[settings.Yaw], settings.ChannelMax[settings.Yaw], cmd.Channel[settings.Yaw]) &&
|
||||
validInputRange(settings.ChannelMin[settings.Pitch], settings.ChannelMax[settings.Pitch], cmd.Channel[settings.Pitch]);
|
||||
|
||||
// Implement hysteresis loop on connection status
|
||||
if (valid_input_detected && (++connected_count > 10)) {
|
||||
cmd.Connected = MANUALCONTROLCOMMAND_CONNECTED_TRUE;
|
||||
connected_count = 0;
|
||||
disconnected_count = 0;
|
||||
} else if (!valid_input_detected && (++disconnected_count > 10)) {
|
||||
cmd.Connected = MANUALCONTROLCOMMAND_CONNECTED_FALSE;
|
||||
connected_count = 0;
|
||||
disconnected_count = 0;
|
||||
}
|
||||
|
||||
if (cmd.Connected == MANUALCONTROLCOMMAND_CONNECTED_FALSE) {
|
||||
cmd.Throttle = -1; // Shut down engine with no control
|
||||
cmd.Roll = 0;
|
||||
cmd.Yaw = 0;
|
||||
cmd.Pitch = 0;
|
||||
//cmd.FlightMode = MANUALCONTROLCOMMAND_FLIGHTMODE_AUTO; // don't do until AUTO implemented and functioning
|
||||
// Important: Throttle < 0 will reset Stabilization coefficients among other things. Either change this,
|
||||
// or leave throttle at IDLE speed or above when going into AUTO-failsafe.
|
||||
AlarmsSet(SYSTEMALARMS_ALARM_MANUALCONTROL, SYSTEMALARMS_ALARM_WARNING);
|
||||
ManualControlCommandSet(&cmd);
|
||||
} else {
|
||||
AlarmsClear(SYSTEMALARMS_ALARM_MANUALCONTROL);
|
||||
|
||||
// Scale channels to -1 -> +1 range
|
||||
cmd.Roll = scaledChannel[settings.Roll];
|
||||
cmd.Pitch = scaledChannel[settings.Pitch];
|
||||
cmd.Yaw = scaledChannel[settings.Yaw];
|
||||
cmd.Throttle = scaledChannel[settings.Throttle];
|
||||
flightMode = scaledChannel[settings.FlightMode];
|
||||
|
||||
AccessoryDesiredData accessory;
|
||||
// Set Accessory 0
|
||||
if(settings.Accessory0 != MANUALCONTROLSETTINGS_ACCESSORY0_NONE) {
|
||||
accessory.AccessoryVal = scaledChannel[settings.Accessory0];
|
||||
if(AccessoryDesiredInstSet(0, &accessory) != 0)
|
||||
AlarmsSet(SYSTEMALARMS_ALARM_MANUALCONTROL, SYSTEMALARMS_ALARM_WARNING);
|
||||
}
|
||||
// Set Accessory 1
|
||||
if(settings.Accessory1 != MANUALCONTROLSETTINGS_ACCESSORY1_NONE) {
|
||||
accessory.AccessoryVal = scaledChannel[settings.Accessory1];
|
||||
if(AccessoryDesiredInstSet(1, &accessory) != 0)
|
||||
AlarmsSet(SYSTEMALARMS_ALARM_MANUALCONTROL, SYSTEMALARMS_ALARM_WARNING);
|
||||
}
|
||||
// Set Accsesory 2
|
||||
if(settings.Accessory2 != MANUALCONTROLSETTINGS_ACCESSORY2_NONE) {
|
||||
accessory.AccessoryVal = scaledChannel[settings.Accessory2];
|
||||
if(AccessoryDesiredInstSet(2, &accessory) != 0)
|
||||
AlarmsSet(SYSTEMALARMS_ALARM_MANUALCONTROL, SYSTEMALARMS_ALARM_WARNING);
|
||||
}
|
||||
|
||||
|
||||
processFlightMode(&settings, flightMode);
|
||||
processArm(&cmd, &settings);
|
||||
|
||||
// Update cmd object
|
||||
ManualControlCommandSet(&cmd);
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
ManualControlCommandGet(&cmd); /* Under GCS control */
|
||||
}
|
||||
|
||||
|
||||
FlightStatusGet(&flightStatus);
|
||||
|
||||
// Depending on the mode update the Stabilization or Actuator objects
|
||||
switch(PARSE_FLIGHT_MODE(flightStatus.FlightMode)) {
|
||||
case FLIGHTMODE_UNDEFINED:
|
||||
// This reflects a bug in the code architecture!
|
||||
AlarmsSet(SYSTEMALARMS_ALARM_MANUALCONTROL, SYSTEMALARMS_ALARM_CRITICAL);
|
||||
break;
|
||||
case FLIGHTMODE_MANUAL:
|
||||
updateActuatorDesired(&cmd);
|
||||
break;
|
||||
case FLIGHTMODE_STABILIZED:
|
||||
updateStabilizationDesired(&cmd, &settings);
|
||||
break;
|
||||
case FLIGHTMODE_GUIDANCE:
|
||||
// TODO: Implement
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void updateActuatorDesired(ManualControlCommandData * cmd)
|
||||
{
|
||||
ActuatorDesiredData actuator;
|
||||
ActuatorDesiredGet(&actuator);
|
||||
actuator.Roll = cmd->Roll;
|
||||
actuator.Pitch = cmd->Pitch;
|
||||
actuator.Yaw = cmd->Yaw;
|
||||
actuator.Throttle = (cmd->Throttle < 0) ? -1 : cmd->Throttle;
|
||||
ActuatorDesiredSet(&actuator);
|
||||
}
|
||||
|
||||
static void updateStabilizationDesired(ManualControlCommandData * cmd, ManualControlSettingsData * settings)
|
||||
{
|
||||
StabilizationDesiredData stabilization;
|
||||
StabilizationDesiredGet(&stabilization);
|
||||
|
||||
StabilizationSettingsData stabSettings;
|
||||
StabilizationSettingsGet(&stabSettings);
|
||||
|
||||
uint8_t * stab_settings;
|
||||
FlightStatusData flightStatus;
|
||||
FlightStatusGet(&flightStatus);
|
||||
switch(flightStatus.FlightMode) {
|
||||
case FLIGHTSTATUS_FLIGHTMODE_STABILIZED1:
|
||||
stab_settings = settings->Stabilization1Settings;
|
||||
break;
|
||||
case FLIGHTSTATUS_FLIGHTMODE_STABILIZED2:
|
||||
stab_settings = settings->Stabilization2Settings;
|
||||
break;
|
||||
case FLIGHTSTATUS_FLIGHTMODE_STABILIZED3:
|
||||
stab_settings = settings->Stabilization3Settings;
|
||||
break;
|
||||
default:
|
||||
// Major error, this should not occur because only enter this block when one of these is true
|
||||
AlarmsSet(SYSTEMALARMS_ALARM_MANUALCONTROL, SYSTEMALARMS_ALARM_CRITICAL);
|
||||
return;
|
||||
}
|
||||
|
||||
// TOOD: Add assumption about order of stabilization desired and manual control stabilization mode fields having same order
|
||||
stabilization.StabilizationMode[STABILIZATIONDESIRED_STABILIZATIONMODE_ROLL] = stab_settings[0];
|
||||
stabilization.StabilizationMode[STABILIZATIONDESIRED_STABILIZATIONMODE_PITCH] = stab_settings[1];
|
||||
stabilization.StabilizationMode[STABILIZATIONDESIRED_STABILIZATIONMODE_YAW] = stab_settings[2];
|
||||
|
||||
stabilization.Roll = (stab_settings[0] == STABILIZATIONDESIRED_STABILIZATIONMODE_NONE) ? cmd->Roll :
|
||||
(stab_settings[0] == STABILIZATIONDESIRED_STABILIZATIONMODE_RATE) ? cmd->Roll * stabSettings.ManualRate[STABILIZATIONSETTINGS_MANUALRATE_ROLL] :
|
||||
(stab_settings[0] == STABILIZATIONDESIRED_STABILIZATIONMODE_WEAKLEVELING) ? cmd->Roll * stabSettings.ManualRate[STABILIZATIONSETTINGS_MANUALRATE_ROLL] :
|
||||
(stab_settings[0] == STABILIZATIONDESIRED_STABILIZATIONMODE_ATTITUDE) ? cmd->Roll * stabSettings.RollMax :
|
||||
(stab_settings[0] == STABILIZATIONDESIRED_STABILIZATIONMODE_AXISLOCK) ? cmd->Roll * stabSettings.ManualRate[STABILIZATIONSETTINGS_MANUALRATE_ROLL] :
|
||||
0; // this is an invalid mode
|
||||
;
|
||||
stabilization.Pitch = (stab_settings[1] == STABILIZATIONDESIRED_STABILIZATIONMODE_NONE) ? cmd->Pitch :
|
||||
(stab_settings[1] == STABILIZATIONDESIRED_STABILIZATIONMODE_RATE) ? cmd->Pitch * stabSettings.ManualRate[STABILIZATIONSETTINGS_MANUALRATE_PITCH] :
|
||||
(stab_settings[1] == STABILIZATIONDESIRED_STABILIZATIONMODE_WEAKLEVELING) ? cmd->Pitch * stabSettings.ManualRate[STABILIZATIONSETTINGS_MANUALRATE_PITCH] :
|
||||
(stab_settings[1] == STABILIZATIONDESIRED_STABILIZATIONMODE_ATTITUDE) ? cmd->Pitch * stabSettings.PitchMax :
|
||||
(stab_settings[1] == STABILIZATIONDESIRED_STABILIZATIONMODE_AXISLOCK) ? cmd->Pitch * stabSettings.ManualRate[STABILIZATIONSETTINGS_MANUALRATE_PITCH] :
|
||||
0; // this is an invalid mode
|
||||
|
||||
stabilization.Yaw = (stab_settings[2] == STABILIZATIONDESIRED_STABILIZATIONMODE_NONE) ? cmd->Yaw :
|
||||
(stab_settings[2] == STABILIZATIONDESIRED_STABILIZATIONMODE_RATE) ? cmd->Yaw * stabSettings.ManualRate[STABILIZATIONSETTINGS_MANUALRATE_YAW] :
|
||||
(stab_settings[2] == STABILIZATIONDESIRED_STABILIZATIONMODE_WEAKLEVELING) ? cmd->Yaw * stabSettings.ManualRate[STABILIZATIONSETTINGS_MANUALRATE_YAW] :
|
||||
(stab_settings[2] == STABILIZATIONDESIRED_STABILIZATIONMODE_ATTITUDE) ? cmd->Yaw * stabSettings.YawMax :
|
||||
(stab_settings[2] == STABILIZATIONDESIRED_STABILIZATIONMODE_AXISLOCK) ? cmd->Yaw * stabSettings.ManualRate[STABILIZATIONSETTINGS_MANUALRATE_YAW] :
|
||||
0; // this is an invalid mode
|
||||
|
||||
stabilization.Throttle = (cmd->Throttle < 0) ? -1 : cmd->Throttle;
|
||||
StabilizationDesiredSet(&stabilization);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert channel from servo pulse duration (microseconds) to scaled -1/+1 range.
|
||||
*/
|
||||
static float scaleChannel(int16_t value, int16_t max, int16_t min, int16_t neutral)
|
||||
{
|
||||
float valueScaled;
|
||||
|
||||
// Scale
|
||||
if ((max > min && value >= neutral) || (min > max && value <= neutral))
|
||||
{
|
||||
if (max != neutral)
|
||||
valueScaled = (float)(value - neutral) / (float)(max - neutral);
|
||||
else
|
||||
valueScaled = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (min != neutral)
|
||||
valueScaled = (float)(value - neutral) / (float)(neutral - min);
|
||||
else
|
||||
valueScaled = 0;
|
||||
}
|
||||
|
||||
// Bound
|
||||
if (valueScaled > 1.0) valueScaled = 1.0;
|
||||
else
|
||||
if (valueScaled < -1.0) valueScaled = -1.0;
|
||||
|
||||
return valueScaled;
|
||||
}
|
||||
|
||||
static uint32_t timeDifferenceMs(portTickType start_time, portTickType end_time) {
|
||||
if(end_time > start_time)
|
||||
return (end_time - start_time) * portTICK_RATE_MS;
|
||||
return ((((portTICK_RATE_MS) -1) - start_time) + end_time) * portTICK_RATE_MS;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Determine if the aircraft is safe to arm
|
||||
* @returns True if safe to arm, false otherwise
|
||||
*/
|
||||
static bool okToArm(void)
|
||||
{
|
||||
// read alarms
|
||||
SystemAlarmsData alarms;
|
||||
SystemAlarmsGet(&alarms);
|
||||
|
||||
|
||||
// Check each alarm
|
||||
for (int i = 0; i < SYSTEMALARMS_ALARM_NUMELEM; i++)
|
||||
{
|
||||
if (alarms.Alarm[i] >= SYSTEMALARMS_ALARM_ERROR)
|
||||
{ // found an alarm thats set
|
||||
if (i == SYSTEMALARMS_ALARM_GPS || i == SYSTEMALARMS_ALARM_TELEMETRY)
|
||||
continue;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Update the flightStatus object only if value changed. Reduces callbacks
|
||||
* @param[in] val The new value
|
||||
*/
|
||||
static void setArmedIfChanged(uint8_t val) {
|
||||
FlightStatusData flightStatus;
|
||||
FlightStatusGet(&flightStatus);
|
||||
|
||||
if(flightStatus.Armed != val) {
|
||||
flightStatus.Armed = val;
|
||||
FlightStatusSet(&flightStatus);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Process the inputs and determine whether to arm or not
|
||||
* @param[out] cmd The structure to set the armed in
|
||||
* @param[in] settings Settings indicating the necessary position
|
||||
*/
|
||||
static void processArm(ManualControlCommandData * cmd, ManualControlSettingsData * settings)
|
||||
{
|
||||
|
||||
bool lowThrottle = cmd->Throttle <= 0;
|
||||
|
||||
if (settings->Arming == MANUALCONTROLSETTINGS_ARMING_ALWAYSDISARMED) {
|
||||
// In this configuration we always disarm
|
||||
setArmedIfChanged(FLIGHTSTATUS_ARMED_DISARMED);
|
||||
} else {
|
||||
// Not really needed since this function not called when disconnected
|
||||
if (cmd->Connected == MANUALCONTROLCOMMAND_CONNECTED_FALSE)
|
||||
return;
|
||||
|
||||
// The throttle is not low, in case we where arming or disarming, abort
|
||||
if (!lowThrottle) {
|
||||
switch(armState) {
|
||||
case ARM_STATE_DISARMING_MANUAL:
|
||||
case ARM_STATE_DISARMING_TIMEOUT:
|
||||
armState = ARM_STATE_ARMED;
|
||||
break;
|
||||
case ARM_STATE_ARMING_MANUAL:
|
||||
armState = ARM_STATE_DISARMED;
|
||||
break;
|
||||
default:
|
||||
// Nothing needs to be done in the other states
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// The rest of these cases throttle is low
|
||||
if (settings->Arming == MANUALCONTROLSETTINGS_ARMING_ALWAYSARMED) {
|
||||
// In this configuration, we go into armed state as soon as the throttle is low, never disarm
|
||||
setArmedIfChanged(FLIGHTSTATUS_ARMED_ARMED);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// When the configuration is not "Always armed" and no "Always disarmed",
|
||||
// the state will not be changed when the throttle is not low
|
||||
static portTickType armedDisarmStart;
|
||||
float armingInputLevel = 0;
|
||||
|
||||
// Calc channel see assumptions7
|
||||
int8_t sign = ((settings->Arming-MANUALCONTROLSETTINGS_ARMING_ROLLLEFT)%2) ? -1 : 1;
|
||||
switch ( (settings->Arming-MANUALCONTROLSETTINGS_ARMING_ROLLLEFT)/2 ) {
|
||||
case ARMING_CHANNEL_ROLL: armingInputLevel = sign * cmd->Roll; break;
|
||||
case ARMING_CHANNEL_PITCH: armingInputLevel = sign * cmd->Pitch; break;
|
||||
case ARMING_CHANNEL_YAW: armingInputLevel = sign * cmd->Yaw; break;
|
||||
}
|
||||
|
||||
bool manualArm = false;
|
||||
bool manualDisarm = false;
|
||||
|
||||
if (armingInputLevel <= -ARMED_THRESHOLD)
|
||||
manualArm = true;
|
||||
else if (armingInputLevel >= +ARMED_THRESHOLD)
|
||||
manualDisarm = true;
|
||||
|
||||
switch(armState) {
|
||||
case ARM_STATE_DISARMED:
|
||||
setArmedIfChanged(FLIGHTSTATUS_ARMED_DISARMED);
|
||||
|
||||
// only allow arming if it's OK too
|
||||
if (manualArm && okToArm()) {
|
||||
armedDisarmStart = lastSysTime;
|
||||
armState = ARM_STATE_ARMING_MANUAL;
|
||||
}
|
||||
break;
|
||||
|
||||
case ARM_STATE_ARMING_MANUAL:
|
||||
setArmedIfChanged(FLIGHTSTATUS_ARMED_ARMING);
|
||||
|
||||
if (manualArm && (timeDifferenceMs(armedDisarmStart, lastSysTime) > ARMED_TIME_MS))
|
||||
armState = ARM_STATE_ARMED;
|
||||
else if (!manualArm)
|
||||
armState = ARM_STATE_DISARMED;
|
||||
break;
|
||||
|
||||
case ARM_STATE_ARMED:
|
||||
// When we get here, the throttle is low,
|
||||
// we go immediately to disarming due to timeout, also when the disarming mechanism is not enabled
|
||||
armedDisarmStart = lastSysTime;
|
||||
armState = ARM_STATE_DISARMING_TIMEOUT;
|
||||
setArmedIfChanged(FLIGHTSTATUS_ARMED_ARMED);
|
||||
break;
|
||||
|
||||
case ARM_STATE_DISARMING_TIMEOUT:
|
||||
// We get here when armed while throttle low, even when the arming timeout is not enabled
|
||||
if ((settings->ArmedTimeout != 0) && (timeDifferenceMs(armedDisarmStart, lastSysTime) > settings->ArmedTimeout))
|
||||
armState = ARM_STATE_DISARMED;
|
||||
|
||||
// Switch to disarming due to manual control when needed
|
||||
if (manualDisarm) {
|
||||
armedDisarmStart = lastSysTime;
|
||||
armState = ARM_STATE_DISARMING_MANUAL;
|
||||
}
|
||||
break;
|
||||
|
||||
case ARM_STATE_DISARMING_MANUAL:
|
||||
if (manualDisarm &&(timeDifferenceMs(armedDisarmStart, lastSysTime) > ARMED_TIME_MS))
|
||||
armState = ARM_STATE_DISARMED;
|
||||
else if (!manualDisarm)
|
||||
armState = ARM_STATE_ARMED;
|
||||
break;
|
||||
} // End Switch
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Determine which of three positions the flight mode switch is in and set flight mode accordingly
|
||||
* @param[out] cmd Pointer to the command structure to set the flight mode in
|
||||
* @param[in] settings The settings which indicate which position is which mode
|
||||
* @param[in] flightMode the value of the switch position
|
||||
*/
|
||||
static void processFlightMode(ManualControlSettingsData * settings, float flightMode)
|
||||
{
|
||||
FlightStatusData flightStatus;
|
||||
FlightStatusGet(&flightStatus);
|
||||
|
||||
uint8_t newMode;
|
||||
// Note here the code is ass
|
||||
if (flightMode < -FLIGHT_MODE_LIMIT)
|
||||
newMode = settings->FlightModePosition[0];
|
||||
else if (flightMode > FLIGHT_MODE_LIMIT)
|
||||
newMode = settings->FlightModePosition[2];
|
||||
else
|
||||
newMode = settings->FlightModePosition[1];
|
||||
|
||||
if(flightStatus.FlightMode != newMode) {
|
||||
flightStatus.FlightMode = newMode;
|
||||
FlightStatusSet(&flightStatus);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Determine if the manual input value is within acceptable limits
|
||||
* @returns return TRUE if so, otherwise return FALSE
|
||||
*/
|
||||
bool validInputRange(int16_t min, int16_t max, uint16_t value)
|
||||
{
|
||||
if (min > max)
|
||||
{
|
||||
int16_t tmp = min;
|
||||
min = max;
|
||||
max = tmp;
|
||||
}
|
||||
return (value >= min - CONNECTION_OFFSET && value <= max + CONNECTION_OFFSET);
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
@ -77,6 +77,14 @@ static xTaskHandle taskHandle;
|
||||
static StabilizationSettingsData settings;
|
||||
static xQueueHandle queue;
|
||||
float dT = 1;
|
||||
float gyro_alpha = 0;
|
||||
float gyro_filtered[3] = {0,0,0};
|
||||
float axis_lock_accum[3] = {0,0,0};
|
||||
uint8_t max_axis_lock = 0;
|
||||
uint8_t max_axislock_rate = 0;
|
||||
float weak_leveling_kp = 0;
|
||||
uint8_t weak_leveling_max = 0;
|
||||
|
||||
pid_type pids[PID_MAX];
|
||||
|
||||
// Private functions
|
||||
@ -89,27 +97,40 @@ static void SettingsUpdatedCb(UAVObjEvent * ev);
|
||||
/**
|
||||
* Module initialization
|
||||
*/
|
||||
int32_t StabilizationInitialize()
|
||||
int32_t StabilizationStart()
|
||||
{
|
||||
// Initialize variables
|
||||
|
||||
// Create object queue
|
||||
queue = xQueueCreate(MAX_QUEUE_SIZE, sizeof(UAVObjEvent));
|
||||
|
||||
// Listen for updates.
|
||||
// AttitudeActualConnectQueue(queue);
|
||||
AttitudeRawConnectQueue(queue);
|
||||
|
||||
StabilizationSettingsConnectCallback(SettingsUpdatedCb);
|
||||
SettingsUpdatedCb(StabilizationSettingsHandle());
|
||||
|
||||
// Start main task
|
||||
xTaskCreate(stabilizationTask, (signed char*)"Stabilization", STACK_SIZE_BYTES/4, NULL, TASK_PRIORITY, &taskHandle);
|
||||
TaskMonitorAdd(TASKINFO_RUNNING_STABILIZATION, taskHandle);
|
||||
PIOS_WDG_RegisterFlag(PIOS_WDG_STABILIZATION);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Module initialization
|
||||
*/
|
||||
int32_t StabilizationInitialize()
|
||||
{
|
||||
// Initialize variables
|
||||
|
||||
// Create object queue
|
||||
queue = xQueueCreate(MAX_QUEUE_SIZE, sizeof(UAVObjEvent));
|
||||
|
||||
// Listen for updates.
|
||||
// AttitudeActualConnectQueue(queue);
|
||||
AttitudeRawConnectQueue(queue);
|
||||
|
||||
StabilizationSettingsConnectCallback(SettingsUpdatedCb);
|
||||
SettingsUpdatedCb(StabilizationSettingsHandle());
|
||||
// Start main task
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
MODULE_INITCALL(StabilizationInitialize, StabilizationStart)
|
||||
|
||||
/**
|
||||
* Module task
|
||||
*/
|
||||
@ -118,8 +139,8 @@ static void stabilizationTask(void* parameters)
|
||||
portTickType lastSysTime;
|
||||
portTickType thisSysTime;
|
||||
UAVObjEvent ev;
|
||||
|
||||
|
||||
|
||||
|
||||
ActuatorDesiredData actuatorDesired;
|
||||
StabilizationDesiredData stabDesired;
|
||||
RateDesiredData rateDesired;
|
||||
@ -127,28 +148,28 @@ static void stabilizationTask(void* parameters)
|
||||
AttitudeRawData attitudeRaw;
|
||||
SystemSettingsData systemSettings;
|
||||
FlightStatusData flightStatus;
|
||||
|
||||
|
||||
SettingsUpdatedCb((UAVObjEvent *) NULL);
|
||||
|
||||
|
||||
// Main task loop
|
||||
lastSysTime = xTaskGetTickCount();
|
||||
ZeroPids();
|
||||
while(1) {
|
||||
PIOS_WDG_UpdateFlag(PIOS_WDG_STABILIZATION);
|
||||
|
||||
|
||||
// Wait until the AttitudeRaw object is updated, if a timeout then go to failsafe
|
||||
if ( xQueueReceive(queue, &ev, FAILSAFE_TIMEOUT_MS / portTICK_RATE_MS) != pdTRUE )
|
||||
{
|
||||
AlarmsSet(SYSTEMALARMS_ALARM_STABILIZATION,SYSTEMALARMS_ALARM_WARNING);
|
||||
continue;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Check how long since last update
|
||||
thisSysTime = xTaskGetTickCount();
|
||||
if(thisSysTime > lastSysTime) // reuse dt in case of wraparound
|
||||
dT = (thisSysTime - lastSysTime) / portTICK_RATE_MS / 1000.0f;
|
||||
lastSysTime = thisSysTime;
|
||||
|
||||
|
||||
FlightStatusGet(&flightStatus);
|
||||
StabilizationDesiredGet(&stabDesired);
|
||||
AttitudeActualGet(&attitudeActual);
|
||||
@ -162,11 +183,11 @@ static void stabilizationTask(void* parameters)
|
||||
float q_desired[4];
|
||||
float q_error[4];
|
||||
float local_error[3];
|
||||
|
||||
|
||||
// Essentially zero errors for anything in rate or none
|
||||
if(stabDesired.StabilizationMode[STABILIZATIONDESIRED_STABILIZATIONMODE_ROLL] == STABILIZATIONDESIRED_STABILIZATIONMODE_ATTITUDE)
|
||||
rpy_desired[0] = stabDesired.Roll;
|
||||
else
|
||||
rpy_desired[0] = stabDesired.Roll;
|
||||
else
|
||||
rpy_desired[0] = attitudeActual.Roll;
|
||||
|
||||
if(stabDesired.StabilizationMode[STABILIZATIONDESIRED_STABILIZATIONMODE_PITCH] == STABILIZATIONDESIRED_STABILIZATIONMODE_ATTITUDE)
|
||||
@ -178,13 +199,13 @@ static void stabilizationTask(void* parameters)
|
||||
rpy_desired[2] = stabDesired.Yaw;
|
||||
else
|
||||
rpy_desired[2] = attitudeActual.Yaw;
|
||||
|
||||
|
||||
RPY2Quaternion(rpy_desired, q_desired);
|
||||
quat_inverse(q_desired);
|
||||
quat_mult(q_desired, &attitudeActual.q1, q_error);
|
||||
quat_inverse(q_error);
|
||||
Quaternion2RPY(q_error, local_error);
|
||||
|
||||
|
||||
#else
|
||||
// Simpler algorithm for CC, less memory
|
||||
float local_error[3] = {stabDesired.Roll - attitudeActual.Roll,
|
||||
@ -192,49 +213,83 @@ static void stabilizationTask(void* parameters)
|
||||
stabDesired.Yaw - attitudeActual.Yaw};
|
||||
local_error[2] = fmod(local_error[2] + 180, 360) - 180;
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
for(uint8_t i = 0; i < MAX_AXES; i++) {
|
||||
gyro_filtered[i] = gyro_filtered[i] * gyro_alpha + attitudeRaw.gyros[i] * (1 - gyro_alpha);
|
||||
}
|
||||
|
||||
float *attitudeDesiredAxis = &stabDesired.Roll;
|
||||
float *actuatorDesiredAxis = &actuatorDesired.Roll;
|
||||
float *rateDesiredAxis = &rateDesired.Roll;
|
||||
|
||||
|
||||
//Calculate desired rate
|
||||
for(int8_t ct=0; ct< MAX_AXES; ct++)
|
||||
for(uint8_t i=0; i< MAX_AXES; i++)
|
||||
{
|
||||
switch(stabDesired.StabilizationMode[ct])
|
||||
switch(stabDesired.StabilizationMode[i])
|
||||
{
|
||||
case STABILIZATIONDESIRED_STABILIZATIONMODE_RATE:
|
||||
rateDesiredAxis[ct] = attitudeDesiredAxis[ct];
|
||||
rateDesiredAxis[i] = attitudeDesiredAxis[i];
|
||||
axis_lock_accum[i] = 0;
|
||||
break;
|
||||
|
||||
|
||||
case STABILIZATIONDESIRED_STABILIZATIONMODE_WEAKLEVELING:
|
||||
{
|
||||
float weak_leveling = local_error[i] * weak_leveling_kp;
|
||||
|
||||
if(weak_leveling > weak_leveling_max)
|
||||
weak_leveling = weak_leveling_max;
|
||||
if(weak_leveling < -weak_leveling_max)
|
||||
weak_leveling = -weak_leveling_max;
|
||||
|
||||
rateDesiredAxis[i] = attitudeDesiredAxis[i] + weak_leveling;
|
||||
|
||||
axis_lock_accum[i] = 0;
|
||||
break;
|
||||
}
|
||||
case STABILIZATIONDESIRED_STABILIZATIONMODE_ATTITUDE:
|
||||
rateDesiredAxis[ct] = ApplyPid(&pids[PID_ROLL + ct], local_error[ct]);
|
||||
rateDesiredAxis[i] = ApplyPid(&pids[PID_ROLL + i], local_error[i]);
|
||||
axis_lock_accum[i] = 0;
|
||||
break;
|
||||
|
||||
case STABILIZATIONDESIRED_STABILIZATIONMODE_AXISLOCK:
|
||||
if(fabs(attitudeDesiredAxis[i]) > max_axislock_rate) {
|
||||
// While getting strong commands act like rate mode
|
||||
rateDesiredAxis[i] = attitudeDesiredAxis[i];
|
||||
axis_lock_accum[i] = 0;
|
||||
} else {
|
||||
// For weaker commands or no command simply attitude lock (almost) on no gyro change
|
||||
axis_lock_accum[i] += (attitudeDesiredAxis[i] - gyro_filtered[i]) * dT;
|
||||
if(axis_lock_accum[i] > max_axis_lock)
|
||||
axis_lock_accum[i] = max_axis_lock;
|
||||
else if(axis_lock_accum[i] < -max_axis_lock)
|
||||
axis_lock_accum[i] = -max_axis_lock;
|
||||
|
||||
rateDesiredAxis[i] = ApplyPid(&pids[PID_ROLL + i], axis_lock_accum[i]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
uint8_t shouldUpdate = 1;
|
||||
RateDesiredSet(&rateDesired);
|
||||
ActuatorDesiredGet(&actuatorDesired);
|
||||
//Calculate desired command
|
||||
for(int8_t ct=0; ct< MAX_AXES; ct++)
|
||||
{
|
||||
if(fabs(rateDesiredAxis[ct]) > settings.MaximumRate[ct])
|
||||
{
|
||||
if(rateDesiredAxis[ct] > 0)
|
||||
{
|
||||
rateDesiredAxis[ct] = settings.MaximumRate[ct];
|
||||
}else
|
||||
{
|
||||
rateDesiredAxis[ct] = -settings.MaximumRate[ct];
|
||||
}
|
||||
|
||||
}
|
||||
if(rateDesiredAxis[ct] > settings.MaximumRate[ct])
|
||||
rateDesiredAxis[ct] = settings.MaximumRate[ct];
|
||||
else if(rateDesiredAxis[ct] < -settings.MaximumRate[ct])
|
||||
rateDesiredAxis[ct] = -settings.MaximumRate[ct];
|
||||
|
||||
switch(stabDesired.StabilizationMode[ct])
|
||||
{
|
||||
case STABILIZATIONDESIRED_STABILIZATIONMODE_RATE:
|
||||
case STABILIZATIONDESIRED_STABILIZATIONMODE_ATTITUDE:
|
||||
case STABILIZATIONDESIRED_STABILIZATIONMODE_AXISLOCK:
|
||||
case STABILIZATIONDESIRED_STABILIZATIONMODE_WEAKLEVELING:
|
||||
{
|
||||
float command = ApplyPid(&pids[PID_RATE_ROLL + ct], rateDesiredAxis[ct]-attitudeRaw.gyros[ct]);
|
||||
float command = ApplyPid(&pids[PID_RATE_ROLL + ct], rateDesiredAxis[ct] - gyro_filtered[ct]);
|
||||
actuatorDesiredAxis[ct] = bound(command);
|
||||
break;
|
||||
}
|
||||
@ -255,16 +310,16 @@ static void stabilizationTask(void* parameters)
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Save dT
|
||||
actuatorDesired.UpdateTime = dT * 1000;
|
||||
|
||||
|
||||
if(PARSE_FLIGHT_MODE(flightStatus.FlightMode) == FLIGHTMODE_MANUAL)
|
||||
shouldUpdate = 0;
|
||||
|
||||
|
||||
if(shouldUpdate)
|
||||
{
|
||||
actuatorDesired.Throttle = stabDesired.Throttle;
|
||||
@ -272,16 +327,16 @@ static void stabilizationTask(void* parameters)
|
||||
actuatorDesired.NumLongUpdates++;
|
||||
ActuatorDesiredSet(&actuatorDesired);
|
||||
}
|
||||
|
||||
|
||||
if(flightStatus.Armed != FLIGHTSTATUS_ARMED_ARMED ||
|
||||
!shouldUpdate || (stabDesired.Throttle < 0))
|
||||
!shouldUpdate)
|
||||
{
|
||||
ZeroPids();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// Clear alarms
|
||||
AlarmsClear(SYSTEMALARMS_ALARM_STABILIZATION);
|
||||
AlarmsClear(SYSTEMALARMS_ALARM_STABILIZATION);
|
||||
}
|
||||
}
|
||||
|
||||
@ -289,15 +344,15 @@ float ApplyPid(pid_type * pid, const float err)
|
||||
{
|
||||
float diff = (err - pid->lastErr);
|
||||
pid->lastErr = err;
|
||||
pid->iAccumulator += err * pid->i * dT;
|
||||
if(fabs(pid->iAccumulator) > pid->iLim) {
|
||||
if(pid->iAccumulator >0) {
|
||||
pid->iAccumulator = pid->iLim;
|
||||
} else {
|
||||
pid->iAccumulator = -pid->iLim;
|
||||
}
|
||||
|
||||
// Scale up accumulator by 1000 while computing to avoid losing precision
|
||||
pid->iAccumulator += err * (pid->i * dT * 1000);
|
||||
if(pid->iAccumulator > (pid->iLim * 1000)) {
|
||||
pid->iAccumulator = pid->iLim * 1000;
|
||||
} else if (pid->iAccumulator < -(pid->iLim * 1000)) {
|
||||
pid->iAccumulator = -pid->iLim * 1000;
|
||||
}
|
||||
return ((err * pid->p) + pid->iAccumulator + (diff * pid->d / dT));
|
||||
return ((err * pid->p) + pid->iAccumulator / 1000 + (diff * pid->d / dT));
|
||||
}
|
||||
|
||||
|
||||
@ -307,6 +362,8 @@ static void ZeroPids(void)
|
||||
pids[ct].iAccumulator = 0;
|
||||
pids[ct].lastErr = 0;
|
||||
}
|
||||
for(uint8_t i = 0; i < 3; i++)
|
||||
axis_lock_accum[i] = 0;
|
||||
}
|
||||
|
||||
|
||||
@ -328,14 +385,58 @@ static void SettingsUpdatedCb(UAVObjEvent * ev)
|
||||
{
|
||||
memset(pids,0,sizeof (pid_type) * PID_MAX);
|
||||
StabilizationSettingsGet(&settings);
|
||||
|
||||
float * data = settings.RollRatePI;
|
||||
for(int8_t pid=0; pid < PID_MAX; pid++)
|
||||
{
|
||||
pids[pid].p = *data++;
|
||||
pids[pid].i = *data++;
|
||||
pids[pid].iLim = *data++;
|
||||
}
|
||||
|
||||
// Set the roll rate PID constants
|
||||
pids[0].p = settings.RollRatePID[STABILIZATIONSETTINGS_ROLLRATEPID_KP];
|
||||
pids[0].i = settings.RollRatePID[STABILIZATIONSETTINGS_ROLLRATEPID_KI];
|
||||
pids[0].d = settings.RollRatePID[STABILIZATIONSETTINGS_ROLLRATEPID_KD];
|
||||
pids[0].iLim = settings.RollRatePID[STABILIZATIONSETTINGS_ROLLRATEPID_ILIMIT];
|
||||
|
||||
// Set the pitch rate PID constants
|
||||
pids[1].p = settings.PitchRatePID[STABILIZATIONSETTINGS_PITCHRATEPID_KP];
|
||||
pids[1].i = settings.PitchRatePID[STABILIZATIONSETTINGS_PITCHRATEPID_KI];
|
||||
pids[1].d = settings.PitchRatePID[STABILIZATIONSETTINGS_PITCHRATEPID_KD];
|
||||
pids[1].iLim = settings.PitchRatePID[STABILIZATIONSETTINGS_PITCHRATEPID_ILIMIT];
|
||||
|
||||
// Set the yaw rate PID constants
|
||||
pids[2].p = settings.YawRatePID[STABILIZATIONSETTINGS_YAWRATEPID_KP];
|
||||
pids[2].i = settings.YawRatePID[STABILIZATIONSETTINGS_YAWRATEPID_KI];
|
||||
pids[2].d = settings.YawRatePID[STABILIZATIONSETTINGS_YAWRATEPID_KD];
|
||||
pids[2].iLim = settings.YawRatePID[STABILIZATIONSETTINGS_YAWRATEPID_ILIMIT];
|
||||
|
||||
// Set the roll attitude PI constants
|
||||
pids[3].p = settings.RollPI[STABILIZATIONSETTINGS_ROLLPI_KP];
|
||||
pids[3].i = settings.RollPI[STABILIZATIONSETTINGS_ROLLPI_KI];
|
||||
pids[3].iLim = settings.RollPI[STABILIZATIONSETTINGS_ROLLPI_ILIMIT];
|
||||
|
||||
// Set the pitch attitude PI constants
|
||||
pids[4].p = settings.PitchPI[STABILIZATIONSETTINGS_PITCHPI_KP];
|
||||
pids[4].i = settings.PitchPI[STABILIZATIONSETTINGS_PITCHPI_KI];
|
||||
pids[4].iLim = settings.PitchPI[STABILIZATIONSETTINGS_PITCHPI_ILIMIT];
|
||||
|
||||
// Set the yaw attitude PI constants
|
||||
pids[5].p = settings.YawPI[STABILIZATIONSETTINGS_YAWPI_KP];
|
||||
pids[5].i = settings.YawPI[STABILIZATIONSETTINGS_YAWPI_KI];
|
||||
pids[5].iLim = settings.YawPI[STABILIZATIONSETTINGS_YAWPI_ILIMIT];
|
||||
|
||||
// Maximum deviation to accumulate for axis lock
|
||||
max_axis_lock = settings.MaxAxisLock;
|
||||
max_axislock_rate = settings.MaxAxisLockRate;
|
||||
|
||||
// Settings for weak leveling
|
||||
weak_leveling_kp = settings.WeakLevelingKp;
|
||||
weak_leveling_max = settings.MaxWeakLevelingRate;
|
||||
|
||||
// The dT has some jitter iteration to iteration that we don't want to
|
||||
// make thie result unpredictable. Still, it's nicer to specify the constant
|
||||
// based on a time (in ms) rather than a fixed multiplier. The error between
|
||||
// update rates on OP (~300 Hz) and CC (~475 Hz) is negligible for this
|
||||
// calculation
|
||||
const float fakeDt = 0.0025;
|
||||
if(settings.GyroTau < 0.0001)
|
||||
gyro_alpha = 0; // not trusting this to resolve to 0
|
||||
else
|
||||
gyro_alpha = exp(-fakeDt / settings.GyroTau);
|
||||
}
|
||||
|
||||
|
||||
|
@ -84,18 +84,34 @@ static void updateSystemAlarms();
|
||||
static void systemTask(void *parameters);
|
||||
|
||||
/**
|
||||
* Initialise the module, called on startup.
|
||||
* \returns 0 on success or -1 if initialisation failed
|
||||
* Create the module task.
|
||||
* \returns 0 on success or -1 if initialization failed
|
||||
*/
|
||||
int32_t SystemModInitialize(void)
|
||||
int32_t SystemModStart(void)
|
||||
{
|
||||
// Initialize vars
|
||||
stackOverflow = 0;
|
||||
// Create system task
|
||||
xTaskCreate(systemTask, (signed char *)"System", STACK_SIZE_BYTES/4, NULL, TASK_PRIORITY, &systemTaskHandle);
|
||||
// Register task
|
||||
TaskMonitorAdd(TASKINFO_RUNNING_SYSTEM, systemTaskHandle);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the module, called on startup.
|
||||
* \returns 0 on success or -1 if initialization failed
|
||||
*/
|
||||
int32_t SystemModInitialize(void)
|
||||
{
|
||||
|
||||
SystemModStart();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
MODULE_INITCALL(SystemModInitialize, 0)
|
||||
/**
|
||||
* System task, periodically executes every SYSTEM_UPDATE_PERIOD_MS
|
||||
*/
|
||||
@ -103,11 +119,8 @@ static void systemTask(void *parameters)
|
||||
{
|
||||
portTickType lastSysTime;
|
||||
|
||||
// System initialization
|
||||
OpenPilotInit();
|
||||
|
||||
// Register task
|
||||
TaskMonitorAdd(TASKINFO_RUNNING_SYSTEM, systemTaskHandle);
|
||||
/* create all modules thread */
|
||||
MODULE_TASKCREATE_ALL
|
||||
|
||||
// Initialize vars
|
||||
idleCounter = 0;
|
||||
@ -118,7 +131,7 @@ static void systemTask(void *parameters)
|
||||
ObjectPersistenceConnectCallback(&objectUpdatedCb);
|
||||
|
||||
// Main system loop
|
||||
while (1) {
|
||||
while (1) {
|
||||
// Update the system statistics
|
||||
updateStats();
|
||||
|
||||
@ -260,6 +273,48 @@ static void updateWDGstats()
|
||||
WatchdogStatusSet(&watchdogStatus);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called periodically to update the system stats
|
||||
*/
|
||||
static uint16_t GetFreeIrqStackSize(void)
|
||||
{
|
||||
uint32_t i = 0x200;
|
||||
|
||||
#if !defined(ARCH_POSIX) && !defined(ARCH_WIN32) && defined(CHECK_IRQ_STACK)
|
||||
extern uint32_t _irq_stack_top;
|
||||
extern uint32_t _irq_stack_end;
|
||||
uint32_t pattern = 0x0000A5A5;
|
||||
uint32_t *ptr = &_irq_stack_end;
|
||||
|
||||
#if 1 /* the ugly way accurate but takes more time, useful for debugging */
|
||||
uint32_t stack_size = (((uint32_t)&_irq_stack_top - (uint32_t)&_irq_stack_end) & ~3 ) / 4;
|
||||
|
||||
for (i=0; i< stack_size; i++)
|
||||
{
|
||||
if (ptr[i] != pattern)
|
||||
{
|
||||
i=i*4;
|
||||
break;
|
||||
}
|
||||
}
|
||||
#else /* faster way but not accurate */
|
||||
if (*(volatile uint32_t *)((uint32_t)ptr + IRQSTACK_LIMIT_CRITICAL) != pattern)
|
||||
{
|
||||
i = IRQSTACK_LIMIT_CRITICAL - 1;
|
||||
}
|
||||
else if (*(volatile uint32_t *)((uint32_t)ptr + IRQSTACK_LIMIT_WARNING) != pattern)
|
||||
{
|
||||
i = IRQSTACK_LIMIT_WARNING - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
i = IRQSTACK_LIMIT_WARNING;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
return i;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called periodically to update the system stats
|
||||
*/
|
||||
@ -278,6 +333,9 @@ static void updateStats()
|
||||
stats.HeapRemaining = xPortGetFreeHeapSize();
|
||||
#endif
|
||||
|
||||
// Get Irq stack status
|
||||
stats.IRQStackRemaining = GetFreeIrqStackSize();
|
||||
|
||||
// When idleCounterClear was not reset by the idle-task, it means the idle-task did not run
|
||||
if (idleCounterClear) {
|
||||
idleCounter = 0;
|
||||
@ -320,6 +378,17 @@ static void updateSystemAlarms()
|
||||
AlarmsClear(SYSTEMALARMS_ALARM_OUTOFMEMORY);
|
||||
}
|
||||
|
||||
#if !defined(ARCH_POSIX) && !defined(ARCH_WIN32) && defined(CHECK_IRQ_STACK)
|
||||
// Check IRQ stack
|
||||
if (stats.IRQStackRemaining < IRQSTACK_LIMIT_CRITICAL) {
|
||||
AlarmsSet(SYSTEMALARMS_ALARM_OUTOFMEMORY, SYSTEMALARMS_ALARM_CRITICAL);
|
||||
} else if (stats.IRQStackRemaining < IRQSTACK_LIMIT_WARNING) {
|
||||
AlarmsSet(SYSTEMALARMS_ALARM_OUTOFMEMORY, SYSTEMALARMS_ALARM_WARNING);
|
||||
} else {
|
||||
AlarmsClear(SYSTEMALARMS_ALARM_OUTOFMEMORY);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Check CPU load
|
||||
if (stats.CPULoad > CPULOAD_LIMIT_CRITICAL) {
|
||||
AlarmsSet(SYSTEMALARMS_ALARM_CPUOVERLOAD, SYSTEMALARMS_ALARM_CRITICAL);
|
||||
|
@ -31,6 +31,7 @@
|
||||
*/
|
||||
|
||||
#include "openpilot.h"
|
||||
#include "telemetry.h"
|
||||
#include "flighttelemetrystats.h"
|
||||
#include "gcstelemetrystats.h"
|
||||
#include "telemetrysettings.h"
|
||||
@ -80,6 +81,28 @@ static void updateTelemetryStats();
|
||||
static void gcsTelemetryStatsUpdated();
|
||||
static void updateSettings();
|
||||
|
||||
/**
|
||||
* Initialise the telemetry module
|
||||
* \return -1 if initialisation failed
|
||||
* \return 0 on success
|
||||
*/
|
||||
int32_t TelemetryStart(void)
|
||||
{
|
||||
|
||||
// Start telemetry tasks
|
||||
xTaskCreate(telemetryTxTask, (signed char *)"TelTx", STACK_SIZE_BYTES/4, NULL, TASK_PRIORITY_TX, &telemetryTxTaskHandle);
|
||||
xTaskCreate(telemetryRxTask, (signed char *)"TelRx", STACK_SIZE_BYTES/4, NULL, TASK_PRIORITY_RX, &telemetryRxTaskHandle);
|
||||
TaskMonitorAdd(TASKINFO_RUNNING_TELEMETRYTX, telemetryTxTaskHandle);
|
||||
TaskMonitorAdd(TASKINFO_RUNNING_TELEMETRYRX, telemetryRxTaskHandle);
|
||||
|
||||
#if defined(PIOS_TELEM_PRIORITY_QUEUE)
|
||||
xTaskCreate(telemetryTxPriTask, (signed char *)"TelPriTx", STACK_SIZE_BYTES/4, NULL, TASK_PRIORITY_TXPRI, &telemetryTxPriTaskHandle);
|
||||
TaskMonitorAdd(TASKINFO_RUNNING_TELEMETRYTXPRI, telemetryTxPriTaskHandle);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialise the telemetry module
|
||||
* \return -1 if initialisation failed
|
||||
@ -117,20 +140,11 @@ int32_t TelemetryInitialize(void)
|
||||
GCSTelemetryStatsConnectQueue(priorityQueue);
|
||||
TelemetrySettingsConnectQueue(priorityQueue);
|
||||
|
||||
// Start telemetry tasks
|
||||
xTaskCreate(telemetryTxTask, (signed char *)"TelTx", STACK_SIZE_BYTES/4, NULL, TASK_PRIORITY_TX, &telemetryTxTaskHandle);
|
||||
xTaskCreate(telemetryRxTask, (signed char *)"TelRx", STACK_SIZE_BYTES/4, NULL, TASK_PRIORITY_RX, &telemetryRxTaskHandle);
|
||||
TaskMonitorAdd(TASKINFO_RUNNING_TELEMETRYTX, telemetryTxTaskHandle);
|
||||
TaskMonitorAdd(TASKINFO_RUNNING_TELEMETRYRX, telemetryRxTaskHandle);
|
||||
|
||||
#if defined(PIOS_TELEM_PRIORITY_QUEUE)
|
||||
xTaskCreate(telemetryTxPriTask, (signed char *)"TelPriTx", STACK_SIZE_BYTES/4, NULL, TASK_PRIORITY_TXPRI, &telemetryTxPriTaskHandle);
|
||||
TaskMonitorAdd(TASKINFO_RUNNING_TELEMETRYTXPRI, telemetryTxPriTaskHandle);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
MODULE_INITCALL(TelemetryInitialize, TelemetryStart)
|
||||
|
||||
/**
|
||||
* Register a new object, adds object to local list and connects the queue depending on the object's
|
||||
* telemetry settings.
|
||||
@ -291,7 +305,6 @@ static void telemetryTxPriTask(void *parameters)
|
||||
static void telemetryRxTask(void *parameters)
|
||||
{
|
||||
uint32_t inputPort;
|
||||
int32_t len;
|
||||
|
||||
// Task loop
|
||||
while (1) {
|
||||
@ -305,14 +318,20 @@ static void telemetryRxTask(void *parameters)
|
||||
inputPort = telemetryPort;
|
||||
}
|
||||
|
||||
// Block until data are available
|
||||
// TODO: Currently we periodically check the buffer for data, update once the PIOS_COM is made blocking
|
||||
len = PIOS_COM_ReceiveBufferUsed(inputPort);
|
||||
for (int32_t n = 0; n < len; ++n) {
|
||||
UAVTalkProcessInputStream(PIOS_COM_ReceiveBuffer(inputPort));
|
||||
}
|
||||
vTaskDelay(5); // <- remove when blocking calls are implemented
|
||||
if (inputPort) {
|
||||
// Block until data are available
|
||||
uint8_t serial_data[1];
|
||||
uint16_t bytes_to_process;
|
||||
|
||||
bytes_to_process = PIOS_COM_ReceiveBuffer(inputPort, serial_data, sizeof(serial_data), 500);
|
||||
if (bytes_to_process > 0) {
|
||||
for (uint8_t i = 0; i < bytes_to_process; i++) {
|
||||
UAVTalkProcessInputStream(serial_data[i]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
vTaskDelay(5);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -336,7 +355,11 @@ static int32_t transmitData(uint8_t * data, int32_t length)
|
||||
outputPort = telemetryPort;
|
||||
}
|
||||
|
||||
return PIOS_COM_SendBufferNonBlocking(outputPort, data, length);
|
||||
if (outputPort) {
|
||||
return PIOS_COM_SendBufferNonBlocking(outputPort, data, length);
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -492,20 +515,16 @@ static void updateSettings()
|
||||
// Retrieve settings
|
||||
TelemetrySettingsGet(&settings);
|
||||
|
||||
// Set port speed
|
||||
if (settings.Speed == TELEMETRYSETTINGS_SPEED_2400) PIOS_COM_ChangeBaud(telemetryPort, 2400);
|
||||
else
|
||||
if (settings.Speed == TELEMETRYSETTINGS_SPEED_4800) PIOS_COM_ChangeBaud(telemetryPort, 4800);
|
||||
else
|
||||
if (settings.Speed == TELEMETRYSETTINGS_SPEED_9600) PIOS_COM_ChangeBaud(telemetryPort, 9600);
|
||||
else
|
||||
if (settings.Speed == TELEMETRYSETTINGS_SPEED_19200) PIOS_COM_ChangeBaud(telemetryPort, 19200);
|
||||
else
|
||||
if (settings.Speed == TELEMETRYSETTINGS_SPEED_38400) PIOS_COM_ChangeBaud(telemetryPort, 38400);
|
||||
else
|
||||
if (settings.Speed == TELEMETRYSETTINGS_SPEED_57600) PIOS_COM_ChangeBaud(telemetryPort, 57600);
|
||||
else
|
||||
if (settings.Speed == TELEMETRYSETTINGS_SPEED_115200) PIOS_COM_ChangeBaud(telemetryPort, 115200);
|
||||
if (telemetryPort) {
|
||||
// Set port speed
|
||||
if (settings.Speed == TELEMETRYSETTINGS_SPEED_2400) PIOS_COM_ChangeBaud(telemetryPort, 2400);
|
||||
else if (settings.Speed == TELEMETRYSETTINGS_SPEED_4800) PIOS_COM_ChangeBaud(telemetryPort, 4800);
|
||||
else if (settings.Speed == TELEMETRYSETTINGS_SPEED_9600) PIOS_COM_ChangeBaud(telemetryPort, 9600);
|
||||
else if (settings.Speed == TELEMETRYSETTINGS_SPEED_19200) PIOS_COM_ChangeBaud(telemetryPort, 19200);
|
||||
else if (settings.Speed == TELEMETRYSETTINGS_SPEED_38400) PIOS_COM_ChangeBaud(telemetryPort, 38400);
|
||||
else if (settings.Speed == TELEMETRYSETTINGS_SPEED_57600) PIOS_COM_ChangeBaud(telemetryPort, 57600);
|
||||
else if (settings.Speed == TELEMETRYSETTINGS_SPEED_115200) PIOS_COM_ChangeBaud(telemetryPort, 115200);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -25,6 +25,13 @@
|
||||
WHEREAMI := $(dir $(lastword $(MAKEFILE_LIST)))
|
||||
TOP := $(realpath $(WHEREAMI)/../../)
|
||||
include $(TOP)/make/firmware-defs.mk
|
||||
include $(TOP)/make/boards/$(BOARD_NAME)/board-info.mk
|
||||
|
||||
# Target file name (without extension).
|
||||
TARGET := fw_$(BOARD_NAME)
|
||||
|
||||
# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.)
|
||||
OUTDIR := $(TOP)/build/$(TARGET)
|
||||
|
||||
# Set developer code and compile options
|
||||
# Set to YES to compile for debugging
|
||||
@ -36,9 +43,6 @@ ENABLE_DEBUG_PINS ?= NO
|
||||
# Set to Yes to enable the AUX UART which is mapped on the S1 (Tx) and S2 (Rx) servo outputs
|
||||
ENABLE_AUX_UART ?= NO
|
||||
|
||||
USE_SPEKTRUM ?= NO
|
||||
|
||||
|
||||
# Set to YES when using Code Sourcery toolchain
|
||||
CODE_SOURCERY ?= YES
|
||||
|
||||
@ -59,21 +63,6 @@ PYMODULES = FlightPlan
|
||||
#MODULES = Telemetry
|
||||
#MODULES += Osd/OsdEtStd
|
||||
|
||||
# MCU name, submodel and board
|
||||
# - MCU used for compiler-option (-mcpu)
|
||||
# - MODEL used for linker-script name (-T) and passed as define
|
||||
# - BOARD just passed as define (optional)
|
||||
MCU = cortex-m3
|
||||
CHIP = STM32F103RET
|
||||
BOARD = STM3210E_OP
|
||||
MODEL = HD
|
||||
|
||||
# Directory for output files (lst, obj, dep, elf, sym, map, hex, bin etc.)
|
||||
OUTDIR = $(TOP)/build/openpilot
|
||||
|
||||
# Target file name (without extension).
|
||||
TARGET = OpenPilot
|
||||
|
||||
# Paths
|
||||
OPSYSTEM = ./System
|
||||
OPSYSTEMINC = $(OPSYSTEM)/inc
|
||||
@ -123,8 +112,6 @@ UAVOBJSYNTHDIR = $(OUTDIR)/../uavobject-synthetics/flight
|
||||
# List C source files here. (C dependencies are automatically generated.)
|
||||
# use file-extension c for "c-only"-files
|
||||
|
||||
MODNAMES = $(notdir ${MODULES} ${PYMODULES})
|
||||
|
||||
ifndef TESTAPP
|
||||
|
||||
## PyMite files and modules
|
||||
@ -139,7 +126,6 @@ SRC += $(PYSRC)
|
||||
|
||||
## MODULES
|
||||
SRC += ${foreach MOD, ${MODULES}, ${wildcard ${OPMODULEDIR}/${MOD}/*.c}}
|
||||
SRC += ${OUTDIR}/InitMods.c
|
||||
## OPENPILOT CORE:
|
||||
SRC += ${OPMODULEDIR}/System/systemmod.c
|
||||
SRC += $(OPSYSTEM)/openpilot.c
|
||||
@ -178,6 +164,7 @@ SRC += $(PIOSSTM32F10X)/pios_spi.c
|
||||
SRC += $(PIOSSTM32F10X)/pios_ppm.c
|
||||
SRC += $(PIOSSTM32F10X)/pios_pwm.c
|
||||
SRC += $(PIOSSTM32F10X)/pios_spektrum.c
|
||||
SRC += $(PIOSSTM32F10X)/pios_sbus.c
|
||||
SRC += $(PIOSSTM32F10X)/pios_debug.c
|
||||
SRC += $(PIOSSTM32F10X)/pios_gpio.c
|
||||
SRC += $(PIOSSTM32F10X)/pios_exti.c
|
||||
@ -194,6 +181,7 @@ SRC += $(PIOSSTM32F10X)/pios_usb_hid_prop.c
|
||||
SRC += $(PIOSSTM32F10X)/pios_usb_hid_pwr.c
|
||||
|
||||
## PIOS Hardware (Common)
|
||||
SRC += $(PIOSCOMMON)/pios_crc.c
|
||||
SRC += $(PIOSCOMMON)/pios_sdcard.c
|
||||
SRC += $(PIOSCOMMON)/pios_com.c
|
||||
SRC += $(PIOSCOMMON)/pios_bmp085.c
|
||||
@ -201,6 +189,7 @@ SRC += $(PIOSCOMMON)/pios_hcsr04.c
|
||||
SRC += $(PIOSCOMMON)/pios_i2c_esc.c
|
||||
SRC += $(PIOSCOMMON)/pios_iap.c
|
||||
SRC += $(PIOSCOMMON)/pios_bl_helper.c
|
||||
SRC += $(PIOSCOMMON)/pios_rcvr.c
|
||||
SRC += $(PIOSCOMMON)/printf-stdarg.c
|
||||
SRC += $(FLIGHTLIB)/ahrs_spi_comm.c
|
||||
SRC += $(FLIGHTLIB)/ahrs_comm_objects.c
|
||||
@ -287,7 +276,7 @@ CPPSRCARM =
|
||||
# Even though the DOS/Win* filesystem matches both .s and .S the same,
|
||||
# it will preserve the spelling of the filenames, and gcc itself does
|
||||
# care about how the name is spelled on its command-line.
|
||||
ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL)_OP.S
|
||||
ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL)$(MODEL_SUFFIX).S
|
||||
|
||||
# List Assembler source files here which must be assembled in ARM-Mode..
|
||||
ASRCARM =
|
||||
@ -369,12 +358,6 @@ endif
|
||||
ifeq ($(ENABLE_AUX_UART), YES)
|
||||
CDEFS += -DPIOS_ENABLE_AUX_UART
|
||||
endif
|
||||
CDEFS += -DUSE_BOOTLOADER
|
||||
|
||||
ifeq ($(USE_SPEKTRUM), YES)
|
||||
CDEFS += -DUSE_SPEKTRUM
|
||||
endif
|
||||
|
||||
|
||||
# Place project-specific -D and/or -U options for
|
||||
# Assembler with preprocessor here.
|
||||
@ -451,22 +434,9 @@ LDFLAGS += -lc -lgcc
|
||||
LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_memory.ld
|
||||
LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_sections.ld
|
||||
|
||||
OOCD_LOADFILE+=$(OUTDIR)/$(TARGET).bin
|
||||
# Program
|
||||
OOCD_CL+=-c "flash write_image erase $(OOCD_LOADFILE) 0x08005000 bin"
|
||||
# Verify
|
||||
OOCD_CL+=-c "verify_image $(OOCD_LOADFILE) 0x08005000 bin"
|
||||
# reset target
|
||||
OOCD_CL+=-c "reset run"
|
||||
# terminate OOCD after programming
|
||||
OOCD_CL+=-c shutdown
|
||||
|
||||
|
||||
# Define programs and commands.
|
||||
REMOVE = $(REMOVE_CMD) -f
|
||||
PYTHON = python
|
||||
###SHELL = sh
|
||||
###COPY = cp
|
||||
|
||||
# List of all source files.
|
||||
ALLSRC = $(ASRCARM) $(ASRC) $(SRCARM) $(SRC) $(CPPSRCARM) $(CPPSRC)
|
||||
@ -499,19 +469,10 @@ endif
|
||||
endif
|
||||
|
||||
# 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}/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
|
||||
${OUTDIR}/InitMods.c: Makefile
|
||||
@echo $(MSG_MODINIT) $(call toprel, $@)
|
||||
@echo ${quote}// Autogenerated file${quote} > ${OUTDIR}/InitMods.c
|
||||
@echo ${quote}${foreach MOD, ${MODNAMES}, extern unsigned int ${MOD}Initialize(void);}${quote} >> ${OUTDIR}/InitMods.c
|
||||
@echo ${quote}void InitModules() {${quote} >> ${OUTDIR}/InitMods.c
|
||||
@echo ${quote}${foreach MOD, ${MODNAMES}, ${MOD}Initialize();}${quote} >> ${OUTDIR}/InitMods.c
|
||||
@echo ${quote}}${quote} >> ${OUTDIR}/InitMods.c
|
||||
|
||||
# Generate code for PyMite
|
||||
${OUTDIR}/pmlib_img.c ${OUTDIR}/pmlib_nat.c ${OUTDIR}/pmlibusr_img.c ${OUTDIR}/pmlibusr_nat.c ${OUTDIR}/pmfeatures.h: $(wildcard ${PYMITELIB}/*.py) $(wildcard ${PYMITEPLAT}/*.py) $(wildcard ${FLIGHTPLANLIB}/*.py) $(wildcard ${FLIGHTPLANS}/*.py)
|
||||
@echo $(MSG_PYMITEINIT) $(call toprel, $@)
|
||||
@ -519,14 +480,6 @@ ${OUTDIR}/pmlib_img.c ${OUTDIR}/pmlib_nat.c ${OUTDIR}/pmlibusr_img.c ${OUTDIR}/p
|
||||
@$(PYTHON) $(PYMITETOOLS)/pmGenPmFeatures.py $(PYMITEPLAT)/pmfeatures.py > $(OUTDIR)/pmfeatures.h
|
||||
@$(PYTHON) $(PYMITETOOLS)/pmImgCreator.py -f $(PYMITEPLAT)/pmfeatures.py -c -u -o $(OUTDIR)/pmlibusr_img.c --native-file=$(OUTDIR)/pmlibusr_nat.c $(FLIGHTPLANS)/test.py
|
||||
|
||||
# Program the device.
|
||||
ifeq ($(FLASH_TOOL),OPENOCD)
|
||||
# Program the device with Dominic Rath's OPENOCD in "batch-mode", needs cfg and "reset-script".
|
||||
program: $(OUTDIR)/$(TARGET).bin
|
||||
@echo ${quote}Programming with OPENOCD${quote}
|
||||
$(OOCD_EXE) $(OOCD_CL)
|
||||
endif
|
||||
|
||||
# Link: create ELF output file from object files.
|
||||
$(eval $(call LINK_TEMPLATE, $(OUTDIR)/$(TARGET).elf, $(ALLOBJ)))
|
||||
|
||||
@ -556,29 +509,33 @@ $(eval $(call PARTIAL_COMPILE_ARM_TEMPLATE, SRCARM))
|
||||
|
||||
$(OUTDIR)/$(TARGET).bin.o: $(OUTDIR)/$(TARGET).bin
|
||||
|
||||
.PHONY: elf lss sym hex bin bino
|
||||
$(eval $(call OPFW_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(BOARD_TYPE),$(BOARD_REVISION)))
|
||||
|
||||
# Add jtag targets (program and wipe)
|
||||
$(eval $(call JTAG_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(FW_BANK_BASE),$(FW_BANK_SIZE)))
|
||||
|
||||
.PHONY: elf lss sym hex bin bino opfw
|
||||
elf: $(OUTDIR)/$(TARGET).elf
|
||||
lss: $(OUTDIR)/$(TARGET).lss
|
||||
sym: $(OUTDIR)/$(TARGET).sym
|
||||
hex: $(OUTDIR)/$(TARGET).hex
|
||||
bin: $(OUTDIR)/$(TARGET).bin
|
||||
bino: $(OUTDIR)/$(TARGET).bin.o
|
||||
opfw: $(OUTDIR)/$(TARGET).opfw
|
||||
|
||||
# Display sizes of sections.
|
||||
$(eval $(call SIZE_TEMPLATE, $(OUTDIR)/$(TARGET).elf))
|
||||
.PHONY: 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
|
||||
install: $(OUTDIR)/$(TARGET).opfw
|
||||
ifneq ($(INSTALL_DIR),)
|
||||
@echo $(MSG_INSTALLING) $(call toprel, $<)
|
||||
$(V1) mkdir -p $(INSTALL_DIR)
|
||||
$(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).bin
|
||||
$(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).opfw
|
||||
else
|
||||
$(error INSTALL_DIR must be specified for $@)
|
||||
endif
|
||||
@ -622,4 +579,4 @@ else
|
||||
endif
|
||||
|
||||
# Listing of phony targets.
|
||||
.PHONY : all build clean clean_list program gencode install
|
||||
.PHONY : all build clean clean_list gencode install
|
||||
|
@ -162,6 +162,7 @@ CFLAGS_UAVOBJECTS = $(UAVOBJDEFINE)
|
||||
endif
|
||||
|
||||
## PIOS Hardware (posix)
|
||||
SRC += $(PIOSPOSIX)/pios_crc.c
|
||||
SRC += $(PIOSPOSIX)/pios_sys.c
|
||||
SRC += $(PIOSPOSIX)/pios_led.c
|
||||
SRC += $(PIOSPOSIX)/pios_delay.c
|
||||
@ -172,6 +173,8 @@ SRC += $(PIOSPOSIX)/pios_servo.c
|
||||
SRC += $(PIOSPOSIX)/pios_wdg.c
|
||||
SRC += $(PIOSPOSIX)/pios_debug.c
|
||||
|
||||
SRC += $(PIOSPOSIX)/pios_rcvr.c
|
||||
|
||||
## Libraries for flight calculations
|
||||
#SRC += $(FLIGHTLIB)/fifo_buffer.c
|
||||
SRC += $(FLIGHTLIB)/WorldMagModel.c
|
||||
@ -440,9 +443,13 @@ ${OUTDIR}/InitMods.c: Makefile.posix
|
||||
@echo ${MSG_MODINIT}
|
||||
@echo ${quote}// Autogenerated file${quote} > ${OUTDIR}/InitMods.c
|
||||
@echo ${quote}${foreach MOD, ${MODNAMES}, extern unsigned int ${MOD}Initialize(void);}${quote} >> ${OUTDIR}/InitMods.c
|
||||
@echo ${quote}${foreach MOD, ${MODNAMES}, extern unsigned int ${MOD}Start(void);}${quote} >> ${OUTDIR}/InitMods.c
|
||||
@echo ${quote}void InitModules() {${quote} >> ${OUTDIR}/InitMods.c
|
||||
@echo ${quote}${foreach MOD, ${MODNAMES}, ${MOD}Initialize();}${quote} >> ${OUTDIR}/InitMods.c
|
||||
@echo ${quote}}${quote} >> ${OUTDIR}/InitMods.c
|
||||
@echo ${quote}void StartModules() {${quote} >> ${OUTDIR}/InitMods.c
|
||||
@echo ${quote}${foreach MOD, ${MODNAMES}, ${MOD}Start();}${quote} >> ${OUTDIR}/InitMods.c
|
||||
@echo ${quote}}${quote} >> ${OUTDIR}/InitMods.c
|
||||
|
||||
# Generate code for PyMite
|
||||
${OUTDIR}/pmlib_img.c ${OUTDIR}/pmlib_nat.c ${OUTDIR}/pmlibusr_img.c ${OUTDIR}/pmlibusr_nat.c ${OUTDIR}/pmfeatures.h: $(wildcard ${PYMITELIB}/*.py) $(wildcard ${PYMITEPLAT}/*.py) $(wildcard ${FLIGHTPLANLIB}/*.py) $(wildcard ${FLIGHTPLANS}/*.py) $(wildcard $(UAVOBJPYTHONSYNTHDIR)/*.py)
|
||||
|
@ -166,6 +166,7 @@ SRC += $(PIOSWIN32)/pios_udp.c
|
||||
SRC += $(PIOSWIN32)/pios_com.c
|
||||
SRC += $(PIOSWIN32)/pios_servo.c
|
||||
SRC += $(PIOSWIN32)/pios_wdg.c
|
||||
SRC += $(PIOSWIN32)/pios_crc.c
|
||||
#
|
||||
## RTOS
|
||||
SRC += $(RTOSSRCDIR)/list.c
|
||||
|
@ -75,11 +75,17 @@ NVIC value of 255. */
|
||||
#if defined(DEBUG)
|
||||
#define configGENERATE_RUN_TIME_STATS 1
|
||||
#define INCLUDE_uxTaskGetRunTime 1
|
||||
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() PIOS_RTC_Start()
|
||||
// Note: Using the tick count defeats the purpose here, need some timer on the scale of 10khz
|
||||
#define portGET_RUN_TIME_COUNTER_VALUE() PIOS_RTC_Counter()
|
||||
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()\
|
||||
do {\
|
||||
(*(unsigned long *)0xe000edfc) |= (1<<24);/* DEMCR |= DEMCR_TRCENA */\
|
||||
(*(unsigned long *)0xe0001000) |= 1; /* DWT_CTRL |= DWT_CYCCNT_ENA */\
|
||||
} while(0)
|
||||
#define portGET_RUN_TIME_COUNTER_VALUE() (*(unsigned long *)0xe0001004)/* DWT_CYCCNT */
|
||||
#endif
|
||||
|
||||
#if !defined(ARCH_POSIX) && !defined(ARCH_WIN32)
|
||||
#define CHECK_IRQ_STACK
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @}
|
||||
|
@ -42,12 +42,14 @@
|
||||
#define PIOS_INCLUDE_IRQ
|
||||
#define PIOS_INCLUDE_LED
|
||||
|
||||
#if defined(USE_SPEKTRUM)
|
||||
#define PIOS_INCLUDE_RCVR
|
||||
|
||||
#define PIOS_INCLUDE_SPEKTRUM
|
||||
#else
|
||||
//#define PIOS_INCLUDE_PPM
|
||||
//#define PIOS_INCLUDE_SBUS
|
||||
#define PIOS_INCLUDE_PWM
|
||||
#endif
|
||||
//#define PIOS_INCLUDE_PPM
|
||||
|
||||
#define PIOS_INCLUDE_TELEMETRY_RF
|
||||
|
||||
#define PIOS_INCLUDE_SERVO
|
||||
#define PIOS_INCLUDE_SPI
|
||||
@ -84,6 +86,8 @@
|
||||
/* Alarm Thresholds */
|
||||
#define HEAP_LIMIT_WARNING 4000
|
||||
#define HEAP_LIMIT_CRITICAL 1000
|
||||
#define IRQSTACK_LIMIT_WARNING 150
|
||||
#define IRQSTACK_LIMIT_CRITICAL 80
|
||||
#define CPULOAD_LIMIT_WARNING 80
|
||||
#define CPULOAD_LIMIT_CRITICAL 95
|
||||
|
||||
|
@ -38,7 +38,10 @@
|
||||
#define PIOS_INCLUDE_COM
|
||||
#define PIOS_INCLUDE_UDP
|
||||
#define PIOS_INCLUDE_SERVO
|
||||
#define PIOS_INCLUDE_RCVR
|
||||
|
||||
#define PIOS_RCVR_MAX_CHANNELS 12
|
||||
#define PIOS_RCVR_MAX_DEVS 3
|
||||
|
||||
/* Defaults for Logging */
|
||||
#define LOG_FILENAME "PIOS.LOG"
|
||||
|
@ -62,11 +62,10 @@ static void TaskSDCard(void *pvParameters);
|
||||
int32_t CONSOLE_Parse(uint8_t port, char c);
|
||||
void OP_ADC_NotifyChange(uint32_t pin, uint32_t pin_value);
|
||||
|
||||
/* Prototype of generated InitModules() function */
|
||||
extern void InitModules(void);
|
||||
|
||||
/* Prototype of PIOS_Board_Init() function */
|
||||
extern void PIOS_Board_Init(void);
|
||||
extern void Stack_Change(void);
|
||||
static void Stack_Change_Weak () __attribute__ ((weakref ("Stack_Change")));
|
||||
|
||||
/**
|
||||
* OpenPilot Main function:
|
||||
@ -85,48 +84,42 @@ int main()
|
||||
/* Brings up System using CMSIS functions, enables the LEDs. */
|
||||
PIOS_SYS_Init();
|
||||
|
||||
/* Initialize the system thread */
|
||||
SystemModInitialize();
|
||||
|
||||
/* Start the FreeRTOS scheduler */
|
||||
vTaskStartScheduler();
|
||||
|
||||
/* If all is well we will never reach here as the scheduler will now be running. */
|
||||
/* If we do get here, it will most likely be because we ran out of heap space. */
|
||||
PIOS_LED_Off(LED1);
|
||||
PIOS_LED_Off(LED2);
|
||||
for(;;) {
|
||||
PIOS_LED_Toggle(LED1);
|
||||
PIOS_LED_Toggle(LED2);
|
||||
PIOS_DELAY_WaitmS(100);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the hardware, libraries and modules (called by the System thread in systemmod.c)
|
||||
*/
|
||||
void OpenPilotInit()
|
||||
{
|
||||
|
||||
/* Architecture dependant Hardware and
|
||||
* core subsystem initialisation
|
||||
* (see pios_board.c for your arch)
|
||||
* */
|
||||
|
||||
PIOS_Board_Init();
|
||||
|
||||
/* Initialize modules */
|
||||
InitModules();
|
||||
MODULE_INITIALISE_ALL
|
||||
|
||||
#if INCLUDE_TEST_TASKS
|
||||
/* Create test tasks */
|
||||
//xTaskCreate(TaskTesting, (signed portCHAR *)"Testing", configMINIMAL_STACK_SIZE , NULL, 4, NULL);
|
||||
//xTaskCreate(TaskHIDTest, (signed portCHAR *)"HIDTest", configMINIMAL_STACK_SIZE , NULL, 3, NULL);
|
||||
//xTaskCreate(TaskServos, (signed portCHAR *)"Servos", configMINIMAL_STACK_SIZE , NULL, 3, NULL);
|
||||
//xTaskCreate(TaskSDCard, (signed portCHAR *)"SDCard", configMINIMAL_STACK_SIZE, NULL, (tskIDLE_PRIORITY + 2), NULL);
|
||||
xTaskCreate(TaskTesting, (signed portCHAR *)"Testing", configMINIMAL_STACK_SIZE , NULL, 4, NULL);
|
||||
xTaskCreate(TaskHIDTest, (signed portCHAR *)"HIDTest", configMINIMAL_STACK_SIZE , NULL, 3, NULL);
|
||||
xTaskCreate(TaskServos, (signed portCHAR *)"Servos", configMINIMAL_STACK_SIZE , NULL, 3, NULL);
|
||||
xTaskCreate(TaskSDCard, (signed portCHAR *)"SDCard", configMINIMAL_STACK_SIZE, NULL, (tskIDLE_PRIORITY + 2), NULL);
|
||||
#endif
|
||||
|
||||
/* swap the stack to use the IRQ stack (does nothing in sim mode) */
|
||||
Stack_Change_Weak();
|
||||
|
||||
/* Start the FreeRTOS scheduler which should never returns.*/
|
||||
vTaskStartScheduler();
|
||||
|
||||
/* If all is well we will never reach here as the scheduler will now be running. */
|
||||
|
||||
/* Do some indication to user that something bad just happened */
|
||||
PIOS_LED_Off(LED1); \
|
||||
for(;;) { \
|
||||
PIOS_LED_Toggle(LED1); \
|
||||
PIOS_DELAY_WaitmS(100); \
|
||||
};
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#if INCLUDE_TEST_TASKS
|
||||
static void TaskTesting(void *pvParameters)
|
||||
{
|
||||
@ -153,6 +146,9 @@ static void TaskTesting(void *pvParameters)
|
||||
#if defined(PIOS_INCLUDE_SPEKTRUM)
|
||||
PIOS_COM_SendFormattedStringNonBlocking(COM_DEBUG_USART, "%u,%u,%u,%u,%u,%u,%u,%u\r", PIOS_SPEKTRUM_Get(0), PIOS_SPEKTRUM_Get(1), PIOS_SPEKTRUM_Get(2), PIOS_SPEKTRUM_Get(3), PIOS_SPEKTRUM_Get(4), PIOS_SPEKTRUM_Get(5), PIOS_SPEKTRUM_Get(6), PIOS_SPEKTRUM_Get(7));
|
||||
#endif
|
||||
#if defined(PIOS_INCLUDE_SBUS)
|
||||
PIOS_COM_SendFormattedStringNonBlocking(COM_DEBUG_USART, "%u,%u,%u,%u,%u,%u,%u,%u\r", PIOS_SBUS_Get(0), PIOS_SBUS_Get(1), PIOS_SBUS_Get(2), PIOS_SBUS_Get(3), PIOS_SBUS_Get(4), PIOS_SBUS_Get(5), PIOS_SBUS_Get(6), PIOS_SBUS_Get(7));
|
||||
#endif
|
||||
#if defined(PIOS_INCLUDE_PWM)
|
||||
PIOS_COM_SendFormattedStringNonBlocking(COM_DEBUG_USART, "%u,%u,%u,%u,%u,%u,%u,%u uS\r", PIOS_PWM_Get(0), PIOS_PWM_Get(1), PIOS_PWM_Get(2), PIOS_PWM_Get(3), PIOS_PWM_Get(4), PIOS_PWM_Get(5), PIOS_PWM_Get(6), PIOS_PWM_Get(7));
|
||||
#endif
|
||||
@ -339,5 +335,5 @@ static void TaskSDCard(void *pvParameters)
|
||||
/**
|
||||
* @}
|
||||
* @}
|
||||
*/
|
||||
*/
|
||||
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include <pios.h>
|
||||
#include <openpilot.h>
|
||||
#include <uavobjectsinit.h>
|
||||
#include "manualcontrolsettings.h"
|
||||
|
||||
//#define I2C_DEBUG_PIN 0
|
||||
//#define USART_GPS_DEBUG_PIN 1
|
||||
@ -46,7 +47,7 @@
|
||||
void PIOS_SPI_sdcard_irq_handler(void);
|
||||
void DMA1_Channel2_IRQHandler() __attribute__ ((alias ("PIOS_SPI_sdcard_irq_handler")));
|
||||
void DMA1_Channel3_IRQHandler() __attribute__ ((alias ("PIOS_SPI_sdcard_irq_handler")));
|
||||
const struct pios_spi_cfg pios_spi_sdcard_cfg = {
|
||||
static const struct pios_spi_cfg pios_spi_sdcard_cfg = {
|
||||
.regs = SPI1,
|
||||
.init = {
|
||||
.SPI_Mode = SPI_Mode_Master,
|
||||
@ -63,7 +64,6 @@ const struct pios_spi_cfg pios_spi_sdcard_cfg = {
|
||||
.ahb_clk = RCC_AHBPeriph_DMA1,
|
||||
|
||||
.irq = {
|
||||
.handler = PIOS_SPI_sdcard_irq_handler,
|
||||
.flags = (DMA1_FLAG_TC2 | DMA1_FLAG_TE2 | DMA1_FLAG_HT2 | DMA1_FLAG_GL2),
|
||||
.init = {
|
||||
.NVIC_IRQChannel = DMA1_Channel2_IRQn,
|
||||
@ -144,7 +144,7 @@ const struct pios_spi_cfg pios_spi_sdcard_cfg = {
|
||||
void PIOS_SPI_ahrs_irq_handler(void);
|
||||
void DMA1_Channel4_IRQHandler() __attribute__ ((alias ("PIOS_SPI_ahrs_irq_handler")));
|
||||
void DMA1_Channel5_IRQHandler() __attribute__ ((alias ("PIOS_SPI_ahrs_irq_handler")));
|
||||
const struct pios_spi_cfg pios_spi_ahrs_cfg = {
|
||||
static const struct pios_spi_cfg pios_spi_ahrs_cfg = {
|
||||
.regs = SPI2,
|
||||
.init = {
|
||||
.SPI_Mode = SPI_Mode_Master,
|
||||
@ -162,7 +162,6 @@ const struct pios_spi_cfg pios_spi_ahrs_cfg = {
|
||||
.ahb_clk = RCC_AHBPeriph_DMA1,
|
||||
|
||||
.irq = {
|
||||
.handler = PIOS_SPI_ahrs_irq_handler,
|
||||
.flags = (DMA1_FLAG_TC4 | DMA1_FLAG_TE4 | DMA1_FLAG_HT4 | DMA1_FLAG_GL4),
|
||||
.init = {
|
||||
.NVIC_IRQChannel = DMA1_Channel4_IRQn,
|
||||
@ -258,11 +257,10 @@ void PIOS_SPI_ahrs_irq_handler(void)
|
||||
extern void PIOS_ADC_handler(void);
|
||||
void DMA1_Channel1_IRQHandler() __attribute__ ((alias("PIOS_ADC_handler")));
|
||||
// Remap the ADC DMA handler to this one
|
||||
const struct pios_adc_cfg pios_adc_cfg = {
|
||||
static const struct pios_adc_cfg pios_adc_cfg = {
|
||||
.dma = {
|
||||
.ahb_clk = RCC_AHBPeriph_DMA1,
|
||||
.irq = {
|
||||
.handler = PIOS_ADC_DMA_Handler,
|
||||
.flags = (DMA1_FLAG_TC1 | DMA1_FLAG_TE1 | DMA1_FLAG_HT1 | DMA1_FLAG_GL1),
|
||||
.init = {
|
||||
.NVIC_IRQChannel = DMA1_Channel1_IRQn,
|
||||
@ -310,16 +308,10 @@ void PIOS_ADC_handler() {
|
||||
/*
|
||||
* Telemetry USART
|
||||
*/
|
||||
void PIOS_USART_telem_irq_handler(void);
|
||||
void USART2_IRQHandler() __attribute__ ((alias ("PIOS_USART_telem_irq_handler")));
|
||||
const struct pios_usart_cfg pios_usart_telem_cfg = {
|
||||
static const struct pios_usart_cfg pios_usart_telem_cfg = {
|
||||
.regs = USART2,
|
||||
.init = {
|
||||
#if defined (PIOS_COM_TELEM_BAUDRATE)
|
||||
.USART_BaudRate = PIOS_COM_TELEM_BAUDRATE,
|
||||
#else
|
||||
.USART_BaudRate = 57600,
|
||||
#endif
|
||||
.USART_BaudRate = 57600,
|
||||
.USART_WordLength = USART_WordLength_8b,
|
||||
.USART_Parity = USART_Parity_No,
|
||||
.USART_StopBits = USART_StopBits_1,
|
||||
@ -327,7 +319,6 @@ const struct pios_usart_cfg pios_usart_telem_cfg = {
|
||||
.USART_Mode = USART_Mode_Rx | USART_Mode_Tx,
|
||||
},
|
||||
.irq = {
|
||||
.handler = PIOS_USART_telem_irq_handler,
|
||||
.init = {
|
||||
.NVIC_IRQChannel = USART2_IRQn,
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_MID,
|
||||
@ -356,17 +347,11 @@ const struct pios_usart_cfg pios_usart_telem_cfg = {
|
||||
/*
|
||||
* GPS USART
|
||||
*/
|
||||
void PIOS_USART_gps_irq_handler(void);
|
||||
void USART3_IRQHandler() __attribute__ ((alias ("PIOS_USART_gps_irq_handler")));
|
||||
const struct pios_usart_cfg pios_usart_gps_cfg = {
|
||||
static const struct pios_usart_cfg pios_usart_gps_cfg = {
|
||||
.regs = USART3,
|
||||
.remap = GPIO_PartialRemap_USART3,
|
||||
.init = {
|
||||
#if defined (PIOS_COM_GPS_BAUDRATE)
|
||||
.USART_BaudRate = PIOS_COM_GPS_BAUDRATE,
|
||||
#else
|
||||
.USART_BaudRate = 57600,
|
||||
#endif
|
||||
.USART_BaudRate = 57600,
|
||||
.USART_WordLength = USART_WordLength_8b,
|
||||
.USART_Parity = USART_Parity_No,
|
||||
.USART_StopBits = USART_StopBits_1,
|
||||
@ -374,7 +359,6 @@ const struct pios_usart_cfg pios_usart_gps_cfg = {
|
||||
.USART_Mode = USART_Mode_Rx | USART_Mode_Tx,
|
||||
},
|
||||
.irq = {
|
||||
.handler = PIOS_USART_gps_irq_handler,
|
||||
.init = {
|
||||
.NVIC_IRQChannel = USART3_IRQn,
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_MID,
|
||||
@ -404,16 +388,9 @@ const struct pios_usart_cfg pios_usart_gps_cfg = {
|
||||
/*
|
||||
* AUX USART
|
||||
*/
|
||||
void PIOS_USART_aux_irq_handler(void);
|
||||
void USART1_IRQHandler() __attribute__ ((alias ("PIOS_USART_aux_irq_handler")));
|
||||
const struct pios_usart_cfg pios_usart_aux_cfg = {
|
||||
static const struct pios_usart_cfg pios_usart_aux_cfg = {
|
||||
.regs = USART1,
|
||||
.init = {
|
||||
#if defined (PIOS_COM_AUX_BAUDRATE)
|
||||
.USART_BaudRate = PIOS_COM_AUX_BAUDRATE,
|
||||
#else
|
||||
.USART_BaudRate = 57600,
|
||||
#endif
|
||||
.USART_BaudRate = 57600,
|
||||
.USART_WordLength = USART_WordLength_8b,
|
||||
.USART_Parity = USART_Parity_No,
|
||||
@ -422,7 +399,6 @@ const struct pios_usart_cfg pios_usart_aux_cfg = {
|
||||
.USART_Mode = USART_Mode_Rx | USART_Mode_Tx,
|
||||
},
|
||||
.irq = {
|
||||
.handler = PIOS_USART_aux_irq_handler,
|
||||
.init = {
|
||||
.NVIC_IRQChannel = USART1_IRQn,
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_MID,
|
||||
@ -450,20 +426,44 @@ const struct pios_usart_cfg pios_usart_aux_cfg = {
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef PIOS_COM_SPEKTRUM
|
||||
#if defined(PIOS_INCLUDE_RTC)
|
||||
/*
|
||||
* Realtime Clock (RTC)
|
||||
*/
|
||||
#include <pios_rtc_priv.h>
|
||||
|
||||
void PIOS_RTC_IRQ_Handler (void);
|
||||
void RTC_IRQHandler() __attribute__ ((alias ("PIOS_RTC_IRQ_Handler")));
|
||||
static const struct pios_rtc_cfg pios_rtc_main_cfg = {
|
||||
.clksrc = RCC_RTCCLKSource_HSE_Div128,
|
||||
.prescaler = 100,
|
||||
.irq = {
|
||||
.init = {
|
||||
.NVIC_IRQChannel = RTC_IRQn,
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_MID,
|
||||
.NVIC_IRQChannelSubPriority = 0,
|
||||
.NVIC_IRQChannelCmd = ENABLE,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
void PIOS_RTC_IRQ_Handler (void)
|
||||
{
|
||||
PIOS_RTC_irq_handler ();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(PIOS_INCLUDE_SPEKTRUM)
|
||||
/*
|
||||
* SPEKTRUM USART
|
||||
*/
|
||||
void PIOS_USART_spektrum_irq_handler(void);
|
||||
void USART1_IRQHandler() __attribute__ ((alias ("PIOS_USART_spektrum_irq_handler")));
|
||||
const struct pios_usart_cfg pios_usart_spektrum_cfg = {
|
||||
#include <pios_spektrum_priv.h>
|
||||
|
||||
static const struct pios_usart_cfg pios_usart_spektrum_cfg = {
|
||||
.regs = USART1,
|
||||
.init = {
|
||||
#if defined (PIOS_COM_SPEKTRUM_BAUDRATE)
|
||||
.USART_BaudRate = PIOS_COM_SPEKTRUM_BAUDRATE,
|
||||
#else
|
||||
.USART_BaudRate = 115200,
|
||||
#endif
|
||||
.USART_BaudRate = 115200,
|
||||
.USART_WordLength = USART_WordLength_8b,
|
||||
.USART_Parity = USART_Parity_No,
|
||||
.USART_StopBits = USART_StopBits_1,
|
||||
@ -471,7 +471,6 @@ const struct pios_usart_cfg pios_usart_spektrum_cfg = {
|
||||
.USART_Mode = USART_Mode_Rx,
|
||||
},
|
||||
.irq = {
|
||||
.handler = PIOS_USART_spektrum_irq_handler,
|
||||
.init = {
|
||||
.NVIC_IRQChannel = USART1_IRQn,
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_HIGH,
|
||||
@ -497,75 +496,24 @@ const struct pios_usart_cfg pios_usart_spektrum_cfg = {
|
||||
},
|
||||
};
|
||||
|
||||
static uint32_t pios_usart_spektrum_id;
|
||||
void PIOS_USART_spektrum_irq_handler(void)
|
||||
{
|
||||
SPEKTRUM_IRQHandler(pios_usart_spektrum_id);
|
||||
}
|
||||
|
||||
#include <pios_spektrum_priv.h>
|
||||
void TIM6_IRQHandler();
|
||||
void TIM6_IRQHandler() __attribute__ ((alias ("PIOS_TIM6_irq_handler")));
|
||||
const struct pios_spektrum_cfg pios_spektrum_cfg = {
|
||||
.pios_usart_spektrum_cfg = &pios_usart_spektrum_cfg,
|
||||
.tim_base_init = {
|
||||
.TIM_Prescaler = (PIOS_MASTER_CLOCK / 1000000) - 1, /* For 1 uS accuracy */
|
||||
.TIM_ClockDivision = TIM_CKD_DIV1,
|
||||
.TIM_CounterMode = TIM_CounterMode_Up,
|
||||
.TIM_Period = ((1000000 / 120) - 1), //11ms-10*16b/115200bps, atleast one interrupt between frames
|
||||
.TIM_RepetitionCounter = 0x0000,
|
||||
},
|
||||
.gpio_init = { //used for bind feature
|
||||
.GPIO_Mode = GPIO_Mode_Out_PP,
|
||||
.GPIO_Speed = GPIO_Speed_2MHz,
|
||||
},
|
||||
.remap = 0,
|
||||
.irq = {
|
||||
.handler = TIM6_IRQHandler,
|
||||
.init = {
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_MID,
|
||||
.NVIC_IRQChannelSubPriority = 0,
|
||||
.NVIC_IRQChannelCmd = ENABLE,
|
||||
static const struct pios_spektrum_cfg pios_spektrum_cfg = {
|
||||
.bind = {
|
||||
.gpio = GPIOA,
|
||||
.init = {
|
||||
.GPIO_Pin = GPIO_Pin_10,
|
||||
.GPIO_Speed = GPIO_Speed_2MHz,
|
||||
.GPIO_Mode = GPIO_Mode_Out_PP,
|
||||
},
|
||||
},
|
||||
.timer = TIM6,
|
||||
.port = GPIOA,
|
||||
.ccr = TIM_IT_Update,
|
||||
.pin = GPIO_Pin_10,
|
||||
.remap = 0,
|
||||
};
|
||||
|
||||
void PIOS_TIM6_irq_handler()
|
||||
{
|
||||
PIOS_SPEKTRUM_irq_handler();
|
||||
}
|
||||
#endif /* PIOS_COM_SPEKTRUM */
|
||||
|
||||
static uint32_t pios_usart_telem_rf_id;
|
||||
void PIOS_USART_telem_irq_handler(void)
|
||||
{
|
||||
PIOS_USART_IRQ_Handler(pios_usart_telem_rf_id);
|
||||
}
|
||||
|
||||
static uint32_t pios_usart_gps_id;
|
||||
void PIOS_USART_gps_irq_handler(void)
|
||||
{
|
||||
#ifdef USART_GPS_DEBUG_PIN
|
||||
PIOS_DEBUG_PinHigh(USART_GPS_DEBUG_PIN);
|
||||
#endif
|
||||
PIOS_USART_IRQ_Handler(pios_usart_gps_id);
|
||||
#ifdef USART_GPS_DEBUG_PIN
|
||||
PIOS_DEBUG_PinLow(USART_GPS_DEBUG_PIN);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
#ifdef PIOS_COM_AUX
|
||||
static uint32_t pios_usart_aux_id;
|
||||
void PIOS_USART_aux_irq_handler(void)
|
||||
{
|
||||
PIOS_USART_IRQ_Handler(pios_usart_aux_id);
|
||||
}
|
||||
#endif
|
||||
#if defined(PIOS_INCLUDE_SBUS)
|
||||
#error PIOS_INCLUDE_SBUS not implemented
|
||||
#endif /* PIOS_INCLUDE_SBUS */
|
||||
|
||||
#endif /* PIOS_INCLUDE_USART */
|
||||
|
||||
@ -573,13 +521,21 @@ void PIOS_USART_aux_irq_handler(void)
|
||||
|
||||
#include "pios_com_priv.h"
|
||||
|
||||
#define PIOS_COM_TELEM_RF_RX_BUF_LEN 192
|
||||
#define PIOS_COM_TELEM_RF_TX_BUF_LEN 192
|
||||
|
||||
#define PIOS_COM_GPS_RX_BUF_LEN 96
|
||||
|
||||
#define PIOS_COM_TELEM_USB_RX_BUF_LEN 192
|
||||
#define PIOS_COM_TELEM_USB_TX_BUF_LEN 192
|
||||
|
||||
#endif /* PIOS_INCLUDE_COM */
|
||||
|
||||
/**
|
||||
* Pios servo configuration structures
|
||||
*/
|
||||
#include <pios_servo_priv.h>
|
||||
const struct pios_servo_channel pios_servo_channels[] = {
|
||||
static const struct pios_servo_channel pios_servo_channels[] = {
|
||||
{
|
||||
.timer = TIM4,
|
||||
.port = GPIOB,
|
||||
@ -663,7 +619,7 @@ const struct pios_servo_cfg pios_servo_cfg = {
|
||||
*/
|
||||
#if defined(PIOS_INCLUDE_PWM)
|
||||
#include <pios_pwm_priv.h>
|
||||
const struct pios_pwm_channel pios_pwm_channels[] = {
|
||||
static const struct pios_pwm_channel pios_pwm_channels[] = {
|
||||
{
|
||||
.timer = TIM1,
|
||||
.port = GPIOA,
|
||||
@ -748,7 +704,6 @@ const struct pios_pwm_cfg pios_pwm_cfg = {
|
||||
},
|
||||
.remap = GPIO_PartialRemap_TIM3,
|
||||
.irq = {
|
||||
.handler = TIM1_CC_IRQHandler,
|
||||
.init = {
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_MID,
|
||||
.NVIC_IRQChannelSubPriority = 0,
|
||||
@ -779,7 +734,7 @@ void PIOS_TIM5_irq_handler()
|
||||
#include <pios_ppm_priv.h>
|
||||
void TIM6_IRQHandler();
|
||||
void TIM6_IRQHandler() __attribute__ ((alias ("PIOS_TIM6_irq_handler")));
|
||||
const struct pios_ppmsv_cfg pios_ppmsv_cfg = {
|
||||
static const struct pios_ppmsv_cfg pios_ppmsv_cfg = {
|
||||
.tim_base_init = {
|
||||
.TIM_Prescaler = (PIOS_MASTER_CLOCK / 1000000) - 1, /* For 1 uS accuracy */
|
||||
.TIM_ClockDivision = TIM_CKD_DIV1,
|
||||
@ -788,7 +743,6 @@ const struct pios_ppmsv_cfg pios_ppmsv_cfg = {
|
||||
.TIM_RepetitionCounter = 0x0000,
|
||||
},
|
||||
.irq = {
|
||||
.handler = TIM6_IRQHandler,
|
||||
.init = {
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_MID,
|
||||
.NVIC_IRQChannelSubPriority = 0,
|
||||
@ -799,14 +753,14 @@ const struct pios_ppmsv_cfg pios_ppmsv_cfg = {
|
||||
.ccr = TIM_IT_Update,
|
||||
};
|
||||
|
||||
void PIOS_TIM6_irq_handler()
|
||||
void PIOS_TIM6_irq_handler(void)
|
||||
{
|
||||
PIOS_PPMSV_irq_handler();
|
||||
}
|
||||
|
||||
void TIM1_CC_IRQHandler();
|
||||
void TIM1_CC_IRQHandler() __attribute__ ((alias ("PIOS_TIM1_CC_irq_handler")));
|
||||
const struct pios_ppm_cfg pios_ppm_cfg = {
|
||||
static const struct pios_ppm_cfg pios_ppm_cfg = {
|
||||
.tim_base_init = {
|
||||
.TIM_Prescaler = (PIOS_MASTER_CLOCK / 1000000) - 1, /* For 1 uS accuracy */
|
||||
.TIM_ClockDivision = TIM_CKD_DIV1,
|
||||
@ -828,7 +782,6 @@ const struct pios_ppm_cfg pios_ppm_cfg = {
|
||||
},
|
||||
.remap = 0,
|
||||
.irq = {
|
||||
.handler = TIM1_CC_IRQHandler,
|
||||
.init = {
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_MID,
|
||||
.NVIC_IRQChannelSubPriority = 0,
|
||||
@ -841,7 +794,7 @@ const struct pios_ppm_cfg pios_ppm_cfg = {
|
||||
.ccr = TIM_IT_CC2,
|
||||
};
|
||||
|
||||
void PIOS_TIM1_CC_irq_handler()
|
||||
void PIOS_TIM1_CC_irq_handler(void)
|
||||
{
|
||||
PIOS_PPM_irq_handler();
|
||||
}
|
||||
@ -861,7 +814,7 @@ void PIOS_I2C_main_adapter_er_irq_handler(void);
|
||||
void I2C2_EV_IRQHandler() __attribute__ ((alias ("PIOS_I2C_main_adapter_ev_irq_handler")));
|
||||
void I2C2_ER_IRQHandler() __attribute__ ((alias ("PIOS_I2C_main_adapter_er_irq_handler")));
|
||||
|
||||
const struct pios_i2c_adapter_cfg pios_i2c_main_adapter_cfg = {
|
||||
static const struct pios_i2c_adapter_cfg pios_i2c_main_adapter_cfg = {
|
||||
.regs = I2C2,
|
||||
.init = {
|
||||
.I2C_Mode = I2C_Mode_I2C,
|
||||
@ -889,7 +842,6 @@ const struct pios_i2c_adapter_cfg pios_i2c_main_adapter_cfg = {
|
||||
},
|
||||
},
|
||||
.event = {
|
||||
.handler = PIOS_I2C_main_adapter_ev_irq_handler,
|
||||
.flags = 0, /* FIXME: check this */
|
||||
.init = {
|
||||
.NVIC_IRQChannel = I2C2_EV_IRQn,
|
||||
@ -899,7 +851,6 @@ const struct pios_i2c_adapter_cfg pios_i2c_main_adapter_cfg = {
|
||||
},
|
||||
},
|
||||
.error = {
|
||||
.handler = PIOS_I2C_main_adapter_er_irq_handler,
|
||||
.flags = 0, /* FIXME: check this */
|
||||
.init = {
|
||||
.NVIC_IRQChannel = I2C2_ER_IRQn,
|
||||
@ -1010,6 +961,28 @@ static const struct stm32_gpio pios_debug_pins[] = {
|
||||
|
||||
#endif /* PIOS_ENABLE_DEBUG_PINS */
|
||||
|
||||
#if defined(PIOS_INCLUDE_RCVR)
|
||||
#include "pios_rcvr_priv.h"
|
||||
|
||||
struct pios_rcvr_channel_map pios_rcvr_channel_to_id_map[PIOS_RCVR_MAX_CHANNELS];
|
||||
uint32_t pios_rcvr_max_channel;
|
||||
#endif /* PIOS_INCLUDE_RCVR */
|
||||
|
||||
#if defined(PIOS_INCLUDE_USB_HID)
|
||||
#include "pios_usb_hid_priv.h"
|
||||
|
||||
static const struct pios_usb_hid_cfg pios_usb_hid_main_cfg = {
|
||||
.irq = {
|
||||
.init = {
|
||||
.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn,
|
||||
.NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_LOW,
|
||||
.NVIC_IRQChannelSubPriority = 0,
|
||||
.NVIC_IRQChannelCmd = ENABLE,
|
||||
},
|
||||
},
|
||||
};
|
||||
#endif /* PIOS_INCLUDE_USB_HID */
|
||||
|
||||
extern const struct pios_com_driver pios_usb_com_driver;
|
||||
|
||||
uint32_t pios_com_telem_rf_id;
|
||||
@ -1039,7 +1012,7 @@ void PIOS_Board_Init(void) {
|
||||
#if defined(PIOS_INCLUDE_SPI)
|
||||
/* Set up the SPI interface to the SD card */
|
||||
if (PIOS_SPI_Init(&pios_spi_sdcard_id, &pios_spi_sdcard_cfg)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
|
||||
/* Enable and mount the SDCard */
|
||||
@ -1047,22 +1020,16 @@ void PIOS_Board_Init(void) {
|
||||
PIOS_SDCARD_MountFS(0);
|
||||
#endif /* PIOS_INCLUDE_SPI */
|
||||
|
||||
#if defined(PIOS_INCLUDE_SPEKTRUM)
|
||||
/* SPEKTRUM init must come before comms */
|
||||
PIOS_SPEKTRUM_Init();
|
||||
|
||||
if (PIOS_USART_Init(&pios_usart_spektrum_id, &pios_usart_spektrum_cfg)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
}
|
||||
if (PIOS_COM_Init(&pios_com_spektrum_id, &pios_usart_com_driver, pios_usart_spektrum_id)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
}
|
||||
#endif
|
||||
/* Initialize UAVObject libraries */
|
||||
EventDispatcherInitialize();
|
||||
UAVObjInitialize();
|
||||
UAVObjectsInitializeAll();
|
||||
|
||||
#if defined(PIOS_INCLUDE_RTC)
|
||||
/* Initialize the real-time clock and its associated tick */
|
||||
PIOS_RTC_Init(&pios_rtc_main_cfg);
|
||||
#endif
|
||||
|
||||
/* Initialize the alarms library */
|
||||
AlarmsInitialize();
|
||||
|
||||
@ -1074,7 +1041,7 @@ void PIOS_Board_Init(void) {
|
||||
|
||||
/* Set up the SPI interface to the AHRS */
|
||||
if (PIOS_SPI_Init(&pios_spi_ahrs_id, &pios_spi_ahrs_cfg)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
|
||||
/* Bind the AHRS comms layer to the AHRS SPI link */
|
||||
@ -1082,43 +1049,145 @@ void PIOS_Board_Init(void) {
|
||||
|
||||
/* Initialize the PiOS library */
|
||||
#if defined(PIOS_INCLUDE_COM)
|
||||
if (PIOS_USART_Init(&pios_usart_telem_rf_id, &pios_usart_telem_cfg)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
}
|
||||
if (PIOS_COM_Init(&pios_com_telem_rf_id, &pios_usart_com_driver, pios_usart_telem_rf_id)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
}
|
||||
#if defined(PIOS_INCLUDE_TELEMETRY_RF)
|
||||
{
|
||||
uint32_t pios_usart_telem_rf_id;
|
||||
if (PIOS_USART_Init(&pios_usart_telem_rf_id, &pios_usart_telem_cfg)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
|
||||
if (PIOS_USART_Init(&pios_usart_gps_id, &pios_usart_gps_cfg)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
uint8_t * rx_buffer = (uint8_t *) pvPortMalloc(PIOS_COM_TELEM_RF_RX_BUF_LEN);
|
||||
uint8_t * tx_buffer = (uint8_t *) pvPortMalloc(PIOS_COM_TELEM_RF_TX_BUF_LEN);
|
||||
PIOS_Assert(rx_buffer);
|
||||
PIOS_Assert(tx_buffer);
|
||||
if (PIOS_COM_Init(&pios_com_telem_rf_id, &pios_usart_com_driver, pios_usart_telem_rf_id,
|
||||
rx_buffer, PIOS_COM_TELEM_RF_RX_BUF_LEN,
|
||||
tx_buffer, PIOS_COM_TELEM_RF_TX_BUF_LEN)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
}
|
||||
if (PIOS_COM_Init(&pios_com_gps_id, &pios_usart_com_driver, pios_usart_gps_id)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
#endif /* PIOS_INCLUDE_TELEMETRY_RF */
|
||||
|
||||
#if defined(PIOS_INCLUDE_GPS)
|
||||
{
|
||||
uint32_t pios_usart_gps_id;
|
||||
if (PIOS_USART_Init(&pios_usart_gps_id, &pios_usart_gps_cfg)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
uint8_t * rx_buffer = (uint8_t *) pvPortMalloc(PIOS_COM_GPS_RX_BUF_LEN);
|
||||
PIOS_Assert(rx_buffer);
|
||||
if (PIOS_COM_Init(&pios_com_gps_id, &pios_usart_com_driver, pios_usart_gps_id,
|
||||
rx_buffer, PIOS_COM_GPS_RX_BUF_LEN,
|
||||
NULL, 0)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_GPS */
|
||||
#endif
|
||||
|
||||
PIOS_Servo_Init();
|
||||
PIOS_ADC_Init();
|
||||
PIOS_GPIO_Init();
|
||||
|
||||
/* Configure the selected receiver */
|
||||
uint8_t manualcontrolsettings_inputmode;
|
||||
ManualControlSettingsInputModeGet(&manualcontrolsettings_inputmode);
|
||||
|
||||
switch (manualcontrolsettings_inputmode) {
|
||||
case MANUALCONTROLSETTINGS_INPUTMODE_PWM:
|
||||
#if defined(PIOS_INCLUDE_PWM)
|
||||
PIOS_PWM_Init();
|
||||
#if (PIOS_PWM_NUM_INPUTS > PIOS_RCVR_MAX_CHANNELS)
|
||||
#error More receiver inputs than available devices
|
||||
#endif
|
||||
PIOS_PWM_Init();
|
||||
uint32_t pios_pwm_rcvr_id;
|
||||
if (PIOS_RCVR_Init(&pios_pwm_rcvr_id, &pios_pwm_rcvr_driver, 0)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
for (uint8_t i = 0;
|
||||
i < PIOS_PWM_NUM_INPUTS && pios_rcvr_max_channel < NELEMENTS(pios_rcvr_channel_to_id_map);
|
||||
i++) {
|
||||
pios_rcvr_channel_to_id_map[pios_rcvr_max_channel].id = pios_pwm_rcvr_id;
|
||||
pios_rcvr_channel_to_id_map[pios_rcvr_max_channel].channel = i;
|
||||
pios_rcvr_max_channel++;
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_PWM */
|
||||
break;
|
||||
case MANUALCONTROLSETTINGS_INPUTMODE_PPM:
|
||||
#if defined(PIOS_INCLUDE_PPM)
|
||||
PIOS_PPM_Init();
|
||||
#if (PIOS_PPM_NUM_INPUTS > PIOS_RCVR_MAX_CHANNELS)
|
||||
#error More receiver inputs than available devices
|
||||
#endif
|
||||
PIOS_PPM_Init();
|
||||
uint32_t pios_ppm_rcvr_id;
|
||||
if (PIOS_RCVR_Init(&pios_ppm_rcvr_id, &pios_ppm_rcvr_driver, 0)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
for (uint8_t i = 0;
|
||||
i < PIOS_PPM_NUM_INPUTS && pios_rcvr_max_channel < NELEMENTS(pios_rcvr_channel_to_id_map);
|
||||
i++) {
|
||||
pios_rcvr_channel_to_id_map[pios_rcvr_max_channel].id = pios_ppm_rcvr_id;
|
||||
pios_rcvr_channel_to_id_map[pios_rcvr_max_channel].channel = i;
|
||||
pios_rcvr_max_channel++;
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_PPM */
|
||||
break;
|
||||
case MANUALCONTROLSETTINGS_INPUTMODE_SPEKTRUM:
|
||||
#if defined(PIOS_INCLUDE_SPEKTRUM)
|
||||
#if (PIOS_SPEKTRUM_NUM_INPUTS > PIOS_RCVR_MAX_CHANNELS)
|
||||
#error More receiver inputs than available devices
|
||||
#endif
|
||||
{
|
||||
uint32_t pios_usart_spektrum_id;
|
||||
if (PIOS_USART_Init(&pios_usart_spektrum_id, &pios_usart_spektrum_cfg)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
|
||||
uint32_t pios_spektrum_id;
|
||||
if (PIOS_SPEKTRUM_Init(&pios_spektrum_id, &pios_spektrum_cfg, &pios_usart_com_driver, pios_usart_spektrum_id, false)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
|
||||
uint32_t pios_spektrum_rcvr_id;
|
||||
if (PIOS_RCVR_Init(&pios_spektrum_rcvr_id, &pios_spektrum_rcvr_driver, 0)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
for (uint8_t i = 0;
|
||||
i < PIOS_SPEKTRUM_NUM_INPUTS && pios_rcvr_max_channel < NELEMENTS(pios_rcvr_channel_to_id_map);
|
||||
i++) {
|
||||
pios_rcvr_channel_to_id_map[pios_rcvr_max_channel].id = pios_spektrum_rcvr_id;
|
||||
pios_rcvr_channel_to_id_map[pios_rcvr_max_channel].channel = i;
|
||||
pios_rcvr_max_channel++;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
case MANUALCONTROLSETTINGS_INPUTMODE_SBUS:
|
||||
#if defined(PIOS_INCLUDE_SBUS)
|
||||
#error SBUS NOT ON OP YET
|
||||
#endif /* PIOS_INCLUDE_SBUS */
|
||||
break;
|
||||
}
|
||||
|
||||
#if defined(PIOS_INCLUDE_USB_HID)
|
||||
PIOS_USB_HID_Init(0);
|
||||
uint32_t pios_usb_hid_id;
|
||||
PIOS_USB_HID_Init(&pios_usb_hid_id, &pios_usb_hid_main_cfg);
|
||||
#if defined(PIOS_INCLUDE_COM)
|
||||
if (PIOS_COM_Init(&pios_com_telem_usb_id, &pios_usb_com_driver, 0)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
uint8_t * rx_buffer = (uint8_t *) pvPortMalloc(PIOS_COM_TELEM_USB_RX_BUF_LEN);
|
||||
uint8_t * tx_buffer = (uint8_t *) pvPortMalloc(PIOS_COM_TELEM_USB_TX_BUF_LEN);
|
||||
PIOS_Assert(rx_buffer);
|
||||
PIOS_Assert(tx_buffer);
|
||||
if (PIOS_COM_Init(&pios_com_telem_usb_id, &pios_usb_com_driver, pios_usb_hid_id,
|
||||
rx_buffer, PIOS_COM_TELEM_USB_RX_BUF_LEN,
|
||||
tx_buffer, PIOS_COM_TELEM_USB_TX_BUF_LEN)) {
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_COM */
|
||||
#endif /* PIOS_INCLUDE_USB_HID */
|
||||
#endif /* PIOS_INCLUDE_USB_HID */
|
||||
|
||||
#if defined(PIOS_INCLUDE_I2C)
|
||||
if (PIOS_I2C_Init(&pios_i2c_main_adapter_id, &pios_i2c_main_adapter_cfg)) {
|
||||
PIOS_DEBUG_Assert(0);
|
||||
PIOS_Assert(0);
|
||||
}
|
||||
#endif /* PIOS_INCLUDE_I2C */
|
||||
PIOS_IAP_Init();
|
||||
|
@ -29,6 +29,17 @@
|
||||
#include <openpilot.h>
|
||||
#include <uavobjectsinit.h>
|
||||
|
||||
#include "pios_rcvr_priv.h"
|
||||
|
||||
struct pios_rcvr_channel_map pios_rcvr_channel_to_id_map[PIOS_RCVR_MAX_CHANNELS];
|
||||
uint32_t pios_rcvr_max_channel;
|
||||
|
||||
void Stack_Change() {
|
||||
}
|
||||
|
||||
void Stack_Change_Weak() {
|
||||
}
|
||||
|
||||
/**
|
||||
* PIOS_Board_Init()
|
||||
* initializes all the core systems on this specific hardware
|
||||
|
@ -35,6 +35,7 @@
|
||||
// Private variables
|
||||
static xSemaphoreHandle lock;
|
||||
static xTaskHandle handles[TASKINFO_RUNNING_NUMELEM];
|
||||
static uint32_t lastMonitorTime;
|
||||
|
||||
// Private functions
|
||||
|
||||
@ -45,6 +46,7 @@ int32_t TaskMonitorInitialize(void)
|
||||
{
|
||||
lock = xSemaphoreCreateRecursiveMutex();
|
||||
memset(handles, 0, sizeof(xTaskHandle)*TASKINFO_RUNNING_NUMELEM);
|
||||
lastMonitorTime = portGET_RUN_TIME_COUNTER_VALUE();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -95,6 +97,20 @@ void TaskMonitorUpdateAll(void)
|
||||
// Lock
|
||||
xSemaphoreTakeRecursive(lock, portMAX_DELAY);
|
||||
|
||||
#if ( configGENERATE_RUN_TIME_STATS == 1 )
|
||||
uint32_t currentTime;
|
||||
uint32_t deltaTime;
|
||||
|
||||
/*
|
||||
* Calculate the amount of elapsed run time between the last time we
|
||||
* measured and now. Scale so that we can convert task run times
|
||||
* directly to percentages.
|
||||
*/
|
||||
currentTime = portGET_RUN_TIME_COUNTER_VALUE();
|
||||
deltaTime = ((currentTime - lastMonitorTime) / 100) ? : 1; /* avoid divide-by-zero if the interval is too small */
|
||||
lastMonitorTime = currentTime;
|
||||
#endif
|
||||
|
||||
// Update all task information
|
||||
for (n = 0; n < TASKINFO_RUNNING_NUMELEM; ++n)
|
||||
{
|
||||
@ -107,7 +123,8 @@ void TaskMonitorUpdateAll(void)
|
||||
data.StackRemaining[n] = uxTaskGetStackHighWaterMark(handles[n]) * 4;
|
||||
#if ( configGENERATE_RUN_TIME_STATS == 1 )
|
||||
/* Generate run time stats */
|
||||
data.RunningTime[n] = 100 * (float) uxTaskGetRunTime(handles[n]) / portGET_RUN_TIME_COUNTER_VALUE();
|
||||
data.RunningTime[n] = uxTaskGetRunTime(handles[n]) / deltaTime;
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
@ -24,6 +24,7 @@
|
||||
# (all architectures)
|
||||
|
||||
UAVOBJSRCFILENAMES =
|
||||
UAVOBJSRCFILENAMES += accessorydesired
|
||||
UAVOBJSRCFILENAMES += actuatorcommand
|
||||
UAVOBJSRCFILENAMES += actuatordesired
|
||||
UAVOBJSRCFILENAMES += actuatorsettings
|
||||
|
31
flight/PiOS.posix/inc/pios_crc.h
Normal file
@ -0,0 +1,31 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @addtogroup PIOS PIOS Core hardware abstraction layer
|
||||
* @{
|
||||
* @addtogroup PIOS_CRC CRC Functions
|
||||
* @{
|
||||
*
|
||||
* @file pios_crc.h
|
||||
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
|
||||
* @brief CRC functions header.
|
||||
* @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
|
||||
*/
|
||||
|
||||
uint8_t PIOS_CRC_updateByte(uint8_t crc, const uint8_t data);
|
||||
uint8_t PIOS_CRC_updateCRC(uint8_t crc, const uint8_t* data, int32_t length);
|
@ -38,7 +38,32 @@
|
||||
* and we cannot define a linker script for each of them atm
|
||||
*/
|
||||
|
||||
#define uavobj_initcall(fn)
|
||||
|
||||
typedef int32_t (*initcall_t)(void);
|
||||
typedef struct {
|
||||
initcall_t fn_minit;
|
||||
initcall_t fn_tinit;
|
||||
} initmodule_t;
|
||||
|
||||
/* Init module section */
|
||||
extern initmodule_t __module_initcall_start[], __module_initcall_end[];
|
||||
|
||||
extern void InitModules();
|
||||
extern void StartModules();
|
||||
|
||||
#define UAVOBJ_INITCALL(fn)
|
||||
#define MODULE_INITCALL(ifn, sfn)
|
||||
|
||||
#define MODULE_TASKCREATE_ALL { \
|
||||
/* Start all module threads */ \
|
||||
StartModules(); \
|
||||
}
|
||||
|
||||
#define MODULE_INITIALISE_ALL { \
|
||||
/* Initialize modules */ \
|
||||
InitModules(); \
|
||||
/* Initialize the system thread */ \
|
||||
SystemModInitialize();}
|
||||
|
||||
#endif /* PIOS_INITCALL_H */
|
||||
|
||||
|
54
flight/PiOS.posix/inc/pios_rcvr.h
Normal file
@ -0,0 +1,54 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @addtogroup PIOS PIOS Core hardware abstraction layer
|
||||
* @{
|
||||
* @addtogroup PIOS_RCVR RCVR layer functions
|
||||
* @brief Hardware communication layer
|
||||
* @{
|
||||
*
|
||||
* @file pios_rcvr.h
|
||||
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
|
||||
* @brief RCVR layer functions header
|
||||
* @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
|
||||
*/
|
||||
|
||||
#ifndef PIOS_RCVR_H
|
||||
#define PIOS_RCVR_H
|
||||
|
||||
struct pios_rcvr_channel_map {
|
||||
uint32_t id;
|
||||
uint8_t channel;
|
||||
};
|
||||
|
||||
extern struct pios_rcvr_channel_map pios_rcvr_channel_to_id_map[];
|
||||
|
||||
struct pios_rcvr_driver {
|
||||
void (*init)(uint32_t id);
|
||||
int32_t (*read)(uint32_t id, uint8_t channel);
|
||||
};
|
||||
|
||||
/* Public Functions */
|
||||
extern int32_t PIOS_RCVR_Read(uint32_t rcvr_id, uint8_t channel);
|
||||
|
||||
#endif /* PIOS_RCVR_H */
|
||||
|
||||
/**
|
||||
* @}
|
||||
* @}
|
||||
*/
|
48
flight/PiOS.posix/inc/pios_rcvr_priv.h
Normal file
@ -0,0 +1,48 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @addtogroup PIOS PIOS Core hardware abstraction layer
|
||||
* @{
|
||||
* @addtogroup PIOS_RCVR RCVR Functions
|
||||
* @brief PIOS interface for RCVR drivers
|
||||
* @{
|
||||
*
|
||||
* @file pios_rcvr_priv.h
|
||||
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
|
||||
* Parts by Thorsten Klose (tk@midibox.org)
|
||||
* @brief USART private definitions.
|
||||
* @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
|
||||
*/
|
||||
|
||||
#ifndef PIOS_RCVR_PRIV_H
|
||||
#define PIOS_RCVR_PRIV_H
|
||||
|
||||
#include <pios.h>
|
||||
|
||||
extern uint32_t pios_rcvr_max_channel;
|
||||
|
||||
extern int32_t PIOS_RCVR_Init(uint32_t * rcvr_id, const struct pios_rcvr_driver * driver, const uint32_t lower_id);
|
||||
|
||||
extern void PIOS_RCVR_IRQ_Handler(uint32_t rcvr_id);
|
||||
|
||||
#endif /* PIOS_RCVR_PRIV_H */
|
||||
|
||||
/**
|
||||
* @}
|
||||
* @}
|
||||
*/
|
@ -64,6 +64,8 @@
|
||||
#include <pios_servo.h>
|
||||
#include <pios_wdg.h>
|
||||
#include <pios_debug.h>
|
||||
#include <pios_crc.h>
|
||||
#include <pios_rcvr.h>
|
||||
|
||||
#define NELEMENTS(x) (sizeof(x) / sizeof(*(x)))
|
||||
|
||||
|
74
flight/PiOS.posix/posix/pios_crc.c
Normal file
@ -0,0 +1,74 @@
|
||||
/*
|
||||
* pios_crc.c
|
||||
* OpenPilotOSX
|
||||
*
|
||||
* Created by James Cotton on 6/4/11.
|
||||
* Copyright 2011 OpenPilot. All rights reserved.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "pios.h"
|
||||
|
||||
// CRC lookup table
|
||||
static const uint8_t crc_table[256] = {
|
||||
0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b, 0x12, 0x15, 0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a, 0x2d,
|
||||
0x70, 0x77, 0x7e, 0x79, 0x6c, 0x6b, 0x62, 0x65, 0x48, 0x4f, 0x46, 0x41, 0x54, 0x53, 0x5a, 0x5d,
|
||||
0xe0, 0xe7, 0xee, 0xe9, 0xfc, 0xfb, 0xf2, 0xf5, 0xd8, 0xdf, 0xd6, 0xd1, 0xc4, 0xc3, 0xca, 0xcd,
|
||||
0x90, 0x97, 0x9e, 0x99, 0x8c, 0x8b, 0x82, 0x85, 0xa8, 0xaf, 0xa6, 0xa1, 0xb4, 0xb3, 0xba, 0xbd,
|
||||
0xc7, 0xc0, 0xc9, 0xce, 0xdb, 0xdc, 0xd5, 0xd2, 0xff, 0xf8, 0xf1, 0xf6, 0xe3, 0xe4, 0xed, 0xea,
|
||||
0xb7, 0xb0, 0xb9, 0xbe, 0xab, 0xac, 0xa5, 0xa2, 0x8f, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9d, 0x9a,
|
||||
0x27, 0x20, 0x29, 0x2e, 0x3b, 0x3c, 0x35, 0x32, 0x1f, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0d, 0x0a,
|
||||
0x57, 0x50, 0x59, 0x5e, 0x4b, 0x4c, 0x45, 0x42, 0x6f, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7d, 0x7a,
|
||||
0x89, 0x8e, 0x87, 0x80, 0x95, 0x92, 0x9b, 0x9c, 0xb1, 0xb6, 0xbf, 0xb8, 0xad, 0xaa, 0xa3, 0xa4,
|
||||
0xf9, 0xfe, 0xf7, 0xf0, 0xe5, 0xe2, 0xeb, 0xec, 0xc1, 0xc6, 0xcf, 0xc8, 0xdd, 0xda, 0xd3, 0xd4,
|
||||
0x69, 0x6e, 0x67, 0x60, 0x75, 0x72, 0x7b, 0x7c, 0x51, 0x56, 0x5f, 0x58, 0x4d, 0x4a, 0x43, 0x44,
|
||||
0x19, 0x1e, 0x17, 0x10, 0x05, 0x02, 0x0b, 0x0c, 0x21, 0x26, 0x2f, 0x28, 0x3d, 0x3a, 0x33, 0x34,
|
||||
0x4e, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5c, 0x5b, 0x76, 0x71, 0x78, 0x7f, 0x6a, 0x6d, 0x64, 0x63,
|
||||
0x3e, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2c, 0x2b, 0x06, 0x01, 0x08, 0x0f, 0x1a, 0x1d, 0x14, 0x13,
|
||||
0xae, 0xa9, 0xa0, 0xa7, 0xb2, 0xb5, 0xbc, 0xbb, 0x96, 0x91, 0x98, 0x9f, 0x8a, 0x8d, 0x84, 0x83,
|
||||
0xde, 0xd9, 0xd0, 0xd7, 0xc2, 0xc5, 0xcc, 0xcb, 0xe6, 0xe1, 0xe8, 0xef, 0xfa, 0xfd, 0xf4, 0xf3
|
||||
};
|
||||
|
||||
/**
|
||||
* Update the crc value with new data.
|
||||
*
|
||||
* Generated by pycrc v0.7.5, http://www.tty1.net/pycrc/
|
||||
* using the configuration:
|
||||
* Width = 8
|
||||
* Poly = 0x07
|
||||
* XorIn = 0x00
|
||||
* ReflectIn = False
|
||||
* XorOut = 0x00
|
||||
* ReflectOut = False
|
||||
* Algorithm = table-driven
|
||||
*
|
||||
* \param crc The current crc value.
|
||||
* \param data Pointer to a buffer of \a data_len bytes.
|
||||
* \param length Number of bytes in the \a data buffer.
|
||||
* \return The updated crc value.
|
||||
*/
|
||||
uint8_t PIOS_CRC_updateByte(uint8_t crc, const uint8_t data)
|
||||
{
|
||||
return crc_table[crc ^ data];
|
||||
}
|
||||
|
||||
/*
|
||||
* @brief Update a CRC with a data buffer
|
||||
* @param[in] crc Starting CRC value
|
||||
* @param[in] data Data buffer
|
||||
* @param[in] length Number of bytes to process
|
||||
* @returns Updated CRC
|
||||
*/
|
||||
uint8_t PIOS_CRC_updateCRC(uint8_t crc, const uint8_t* data, int32_t length)
|
||||
{
|
||||
// use registers for speed
|
||||
register int32_t len = length;
|
||||
register uint8_t crc8 = crc;
|
||||
register const uint8_t *p = data;
|
||||
|
||||
while (len--)
|
||||
crc8 = crc_table[crc8 ^ *p++];
|
||||
|
||||
return crc8;
|
||||
}
|
||||
|
@ -67,10 +67,6 @@ int32_t PIOS_DELAY_WaituS(uint16_t uS)
|
||||
while (!nanosleep(&wait,&rest)) {
|
||||
wait=rest;
|
||||
}
|
||||
//uint16_t start = PIOS_DELAY_TIMER->CNT;
|
||||
|
||||
/* Note that this event works on 16bit counter wrap-arounds */
|
||||
//while((uint16_t)(PIOS_DELAY_TIMER->CNT - start) <= uS);
|
||||
|
||||
/* No error */
|
||||
return 0;
|
||||
|
100
flight/PiOS.posix/posix/pios_rcvr.c
Normal file
@ -0,0 +1,100 @@
|
||||
/* Project Includes */
|
||||
#include "pios.h"
|
||||
|
||||
#if defined(PIOS_INCLUDE_RCVR)
|
||||
|
||||
#include <pios_rcvr_priv.h>
|
||||
|
||||
enum pios_rcvr_dev_magic {
|
||||
PIOS_RCVR_DEV_MAGIC = 0x99aabbcc,
|
||||
};
|
||||
|
||||
struct pios_rcvr_dev {
|
||||
enum pios_rcvr_dev_magic magic;
|
||||
uint32_t lower_id;
|
||||
const struct pios_rcvr_driver * driver;
|
||||
};
|
||||
|
||||
static bool PIOS_RCVR_validate(struct pios_rcvr_dev * rcvr_dev)
|
||||
{
|
||||
return (rcvr_dev->magic == PIOS_RCVR_DEV_MAGIC);
|
||||
}
|
||||
|
||||
#if defined(PIOS_INCLUDE_FREERTOS) && 0
|
||||
static struct pios_rcvr_dev * PIOS_RCVR_alloc(void)
|
||||
{
|
||||
struct pios_rcvr_dev * rcvr_dev;
|
||||
|
||||
rcvr_dev = (struct pios_rcvr_dev *)malloc(sizeof(*rcvr_dev));
|
||||
if (!rcvr_dev) return (NULL);
|
||||
|
||||
rcvr_dev->magic = PIOS_RCVR_DEV_MAGIC;
|
||||
return(rcvr_dev);
|
||||
}
|
||||
#else
|
||||
static struct pios_rcvr_dev pios_rcvr_devs[PIOS_RCVR_MAX_DEVS];
|
||||
static uint8_t pios_rcvr_num_devs;
|
||||
static struct pios_rcvr_dev * PIOS_RCVR_alloc(void)
|
||||
{
|
||||
struct pios_rcvr_dev * rcvr_dev;
|
||||
|
||||
if (pios_rcvr_num_devs >= PIOS_RCVR_MAX_DEVS) {
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
rcvr_dev = &pios_rcvr_devs[pios_rcvr_num_devs++];
|
||||
rcvr_dev->magic = PIOS_RCVR_DEV_MAGIC;
|
||||
|
||||
return (rcvr_dev);
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Initialises RCVR layer
|
||||
* \param[out] handle
|
||||
* \param[in] driver
|
||||
* \param[in] id
|
||||
* \return < 0 if initialisation failed
|
||||
*/
|
||||
int32_t PIOS_RCVR_Init(uint32_t * rcvr_id, const struct pios_rcvr_driver * driver, const uint32_t lower_id)
|
||||
{
|
||||
PIOS_DEBUG_Assert(rcvr_id);
|
||||
PIOS_DEBUG_Assert(driver);
|
||||
|
||||
struct pios_rcvr_dev * rcvr_dev;
|
||||
|
||||
rcvr_dev = (struct pios_rcvr_dev *) PIOS_RCVR_alloc();
|
||||
if (!rcvr_dev) goto out_fail;
|
||||
|
||||
rcvr_dev->driver = driver;
|
||||
rcvr_dev->lower_id = lower_id;
|
||||
|
||||
|
||||
*rcvr_id = pios_rcvr_num_devs - 1;
|
||||
|
||||
return(0);
|
||||
|
||||
out_fail:
|
||||
return(-1);
|
||||
}
|
||||
|
||||
int32_t PIOS_RCVR_Read(uint32_t rcvr_id, uint8_t channel)
|
||||
{
|
||||
struct pios_rcvr_dev * rcvr_dev = &pios_rcvr_devs[rcvr_id];
|
||||
|
||||
if (!PIOS_RCVR_validate(rcvr_dev)) {
|
||||
/* Undefined RCVR port for this board (see pios_board.c) */
|
||||
PIOS_DEBUG_Assert(0);
|
||||
}
|
||||
|
||||
PIOS_DEBUG_Assert(rcvr_dev->driver->read);
|
||||
|
||||
return rcvr_dev->driver->read(rcvr_dev->lower_id, channel);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @}
|
||||
* @}
|
||||
*/
|
31
flight/PiOS.win32/inc/pios_crc.h
Normal file
@ -0,0 +1,31 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @addtogroup PIOS PIOS Core hardware abstraction layer
|
||||
* @{
|
||||
* @addtogroup PIOS_CRC CRC Functions
|
||||
* @{
|
||||
*
|
||||
* @file pios_crc.h
|
||||
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
|
||||
* @brief CRC functions header.
|
||||
* @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
|
||||
*/
|
||||
|
||||
uint8_t PIOS_CRC_updateByte(uint8_t crc, const uint8_t data);
|
||||
uint8_t PIOS_CRC_updateCRC(uint8_t crc, const uint8_t* data, int32_t length);
|
@ -38,7 +38,18 @@
|
||||
* and we cannot define a linker script for each of them atm
|
||||
*/
|
||||
|
||||
#define uavobj_initcall(fn)
|
||||
#define UAVOBJ_INITCALL(fn)
|
||||
#define MODULE_INITCALL(ifn, iparam, sfn, sparam, flags)
|
||||
|
||||
#define MODULE_TASKCREATE_ALL
|
||||
|
||||
#define MODULE_INITIALISE_ALL { \
|
||||
/* Initialize modules */ \
|
||||
InitModules(); \
|
||||
/* Start the FreeRTOS scheduler which never returns.*/ \
|
||||
/* Initialize the system thread */ \
|
||||
SystemModInitialize();}
|
||||
|
||||
|
||||
#endif /* PIOS_INITCALL_H */
|
||||
|
||||
|
@ -63,6 +63,7 @@
|
||||
#include <pios_com.h>
|
||||
#include <pios_servo.h>
|
||||
#include <pios_wdg.h>
|
||||
#include <pios_crc.h>
|
||||
|
||||
#define NELEMENTS(x) (sizeof(x) / sizeof(*(x)))
|
||||
|
||||
|
@ -941,3 +941,8 @@ void vPortExitCritical( void )
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unsigned long ulPortGetTimerValue( void )
|
||||
{
|
||||
return (unsigned long) clock();
|
||||
}
|
74
flight/PiOS.win32/win32/pios_crc.c
Normal file
@ -0,0 +1,74 @@
|
||||
/*
|
||||
* pios_crc.c
|
||||
* OpenPilotOSX
|
||||
*
|
||||
* Created by James Cotton on 6/4/11.
|
||||
* Copyright 2011 OpenPilot. All rights reserved.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "pios.h"
|
||||
|
||||
// CRC lookup table
|
||||
static const uint8_t crc_table[256] = {
|
||||
0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b, 0x12, 0x15, 0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a, 0x2d,
|
||||
0x70, 0x77, 0x7e, 0x79, 0x6c, 0x6b, 0x62, 0x65, 0x48, 0x4f, 0x46, 0x41, 0x54, 0x53, 0x5a, 0x5d,
|
||||
0xe0, 0xe7, 0xee, 0xe9, 0xfc, 0xfb, 0xf2, 0xf5, 0xd8, 0xdf, 0xd6, 0xd1, 0xc4, 0xc3, 0xca, 0xcd,
|
||||
0x90, 0x97, 0x9e, 0x99, 0x8c, 0x8b, 0x82, 0x85, 0xa8, 0xaf, 0xa6, 0xa1, 0xb4, 0xb3, 0xba, 0xbd,
|
||||
0xc7, 0xc0, 0xc9, 0xce, 0xdb, 0xdc, 0xd5, 0xd2, 0xff, 0xf8, 0xf1, 0xf6, 0xe3, 0xe4, 0xed, 0xea,
|
||||
0xb7, 0xb0, 0xb9, 0xbe, 0xab, 0xac, 0xa5, 0xa2, 0x8f, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9d, 0x9a,
|
||||
0x27, 0x20, 0x29, 0x2e, 0x3b, 0x3c, 0x35, 0x32, 0x1f, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0d, 0x0a,
|
||||
0x57, 0x50, 0x59, 0x5e, 0x4b, 0x4c, 0x45, 0x42, 0x6f, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7d, 0x7a,
|
||||
0x89, 0x8e, 0x87, 0x80, 0x95, 0x92, 0x9b, 0x9c, 0xb1, 0xb6, 0xbf, 0xb8, 0xad, 0xaa, 0xa3, 0xa4,
|
||||
0xf9, 0xfe, 0xf7, 0xf0, 0xe5, 0xe2, 0xeb, 0xec, 0xc1, 0xc6, 0xcf, 0xc8, 0xdd, 0xda, 0xd3, 0xd4,
|
||||
0x69, 0x6e, 0x67, 0x60, 0x75, 0x72, 0x7b, 0x7c, 0x51, 0x56, 0x5f, 0x58, 0x4d, 0x4a, 0x43, 0x44,
|
||||
0x19, 0x1e, 0x17, 0x10, 0x05, 0x02, 0x0b, 0x0c, 0x21, 0x26, 0x2f, 0x28, 0x3d, 0x3a, 0x33, 0x34,
|
||||
0x4e, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5c, 0x5b, 0x76, 0x71, 0x78, 0x7f, 0x6a, 0x6d, 0x64, 0x63,
|
||||
0x3e, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2c, 0x2b, 0x06, 0x01, 0x08, 0x0f, 0x1a, 0x1d, 0x14, 0x13,
|
||||
0xae, 0xa9, 0xa0, 0xa7, 0xb2, 0xb5, 0xbc, 0xbb, 0x96, 0x91, 0x98, 0x9f, 0x8a, 0x8d, 0x84, 0x83,
|
||||
0xde, 0xd9, 0xd0, 0xd7, 0xc2, 0xc5, 0xcc, 0xcb, 0xe6, 0xe1, 0xe8, 0xef, 0xfa, 0xfd, 0xf4, 0xf3
|
||||
};
|
||||
|
||||
/**
|
||||
* Update the crc value with new data.
|
||||
*
|
||||
* Generated by pycrc v0.7.5, http://www.tty1.net/pycrc/
|
||||
* using the configuration:
|
||||
* Width = 8
|
||||
* Poly = 0x07
|
||||
* XorIn = 0x00
|
||||
* ReflectIn = False
|
||||
* XorOut = 0x00
|
||||
* ReflectOut = False
|
||||
* Algorithm = table-driven
|
||||
*
|
||||
* \param crc The current crc value.
|
||||
* \param data Pointer to a buffer of \a data_len bytes.
|
||||
* \param length Number of bytes in the \a data buffer.
|
||||
* \return The updated crc value.
|
||||
*/
|
||||
uint8_t PIOS_CRC_updateByte(uint8_t crc, const uint8_t data)
|
||||
{
|
||||
return crc_table[crc ^ data];
|
||||
}
|
||||
|
||||
/*
|
||||
* @brief Update a CRC with a data buffer
|
||||
* @param[in] crc Starting CRC value
|
||||
* @param[in] data Data buffer
|
||||
* @param[in] length Number of bytes to process
|
||||
* @returns Updated CRC
|
||||
*/
|
||||
uint8_t PIOS_CRC_updateCRC(uint8_t crc, const uint8_t* data, int32_t length)
|
||||
{
|
||||
// use registers for speed
|
||||
register int32_t len = length;
|
||||
register uint8_t crc8 = crc;
|
||||
register const uint8_t *p = data;
|
||||
|
||||
while (len--)
|
||||
crc8 = crc_table[crc8 ^ *p++];
|
||||
|
||||
return crc8;
|
||||
}
|
||||
|
@ -62,11 +62,7 @@ int32_t PIOS_DELAY_Init(void)
|
||||
int32_t PIOS_DELAY_WaituS(uint16_t uS)
|
||||
{
|
||||
Sleep(uS/1000);
|
||||
//uint16_t start = PIOS_DELAY_TIMER->CNT;
|
||||
/* Note that this event works on 16bit counter wrap-arounds */
|
||||
//while((uint16_t)(PIOS_DELAY_TIMER->CNT - start) <= uS);
|
||||
|
||||
/* No error */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -64,25 +64,8 @@ TIM8 | | | |
|
||||
//------------------------
|
||||
// BOOTLOADER_SETTINGS
|
||||
//------------------------
|
||||
//#define FUNC_ID 2
|
||||
//#define HW_VERSION 69
|
||||
|
||||
#define BOOTLOADER_VERSION 0
|
||||
#define BOARD_TYPE 0x02
|
||||
#define BOARD_REVISION 0x01
|
||||
//#define HW_VERSION (BOARD_TYPE << 8) | BOARD_REVISION
|
||||
|
||||
#define MEM_SIZE 0x20000 //128K
|
||||
#define SIZE_OF_DESCRIPTION 100
|
||||
#define START_OF_USER_CODE (uint32_t)0x08002000
|
||||
#define SIZE_OF_CODE (uint32_t)(MEM_SIZE-(START_OF_USER_CODE-0x08000000)-SIZE_OF_DESCRIPTION)
|
||||
#ifdef STM32F10X_HD
|
||||
#define HW_TYPE 0 //0=high_density 1=medium_density;
|
||||
#elif STM32F10X_MD
|
||||
#define HW_TYPE 1 //0=high_density 1=medium_density;
|
||||
#endif
|
||||
#define BOARD_READABLE TRUE
|
||||
#define BOARD_WRITABLA TRUE
|
||||
#define BOARD_WRITABLE TRUE
|
||||
#define MAX_DEL_RETRYS 3
|
||||
|
||||
//------------------------
|
||||
@ -96,22 +79,11 @@ TIM8 | | | |
|
||||
#define PIOS_LED_PINS { PIOS_LED_LED1_GPIO_PIN }
|
||||
#define PIOS_LED_CLKS { PIOS_LED_LED1_GPIO_CLK }
|
||||
|
||||
//-------------------------
|
||||
// Delay Timer
|
||||
//-------------------------
|
||||
#define PIOS_DELAY_TIMER TIM2
|
||||
#define PIOS_DELAY_TIMER_RCC_FUNC RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE)
|
||||
|
||||
//-------------------------
|
||||
// System Settings
|
||||
//-------------------------
|
||||
#define PIOS_MASTER_CLOCK 72000000
|
||||
#define PIOS_PERIPHERAL_CLOCK (PIOS_MASTER_CLOCK / 2)
|
||||
#if defined(USE_BOOTLOADER)
|
||||
#define PIOS_NVIC_VECTTAB_FLASH (START_OF_USER_CODE)
|
||||
#else
|
||||
#define PIOS_NVIC_VECTTAB_FLASH ((uint32_t)0x08000000)
|
||||
#endif
|
||||
|
||||
//-------------------------
|
||||
// Interrupt Priorities
|
||||
@ -140,9 +112,6 @@ extern uint32_t pios_i2c_main_adapter_id;
|
||||
// PIOS_USART
|
||||
//-------------------------
|
||||
#define PIOS_USART_MAX_DEVS 2
|
||||
#define PIOS_USART_RX_BUFFER_SIZE 256
|
||||
#define PIOS_USART_TX_BUFFER_SIZE 256
|
||||
#define PIOS_USART_BAUDRATE 230400
|
||||
|
||||
//-------------------------
|
||||
// PIOS_COM
|
||||
@ -150,6 +119,7 @@ extern uint32_t pios_i2c_main_adapter_id;
|
||||
// See also pios_board.c
|
||||
//-------------------------
|
||||
#define PIOS_COM_MAX_DEVS 2
|
||||
|
||||
extern uint32_t pios_com_aux_id;
|
||||
#define PIOS_COM_AUX (pios_com_aux_id)
|
||||
#define PIOS_COM_DEBUG PIOS_COM_AUX
|
||||
|
@ -34,7 +34,7 @@
|
||||
Timer | Channel 1 | Channel 2 | Channel 3 | Channel 4
|
||||
------+-----------+-----------+-----------+----------
|
||||
TIM1 | Servo 4 | | |
|
||||
TIM2 | RC In 5 | RC In 6 | Servo 6 |
|
||||
TIM2 | RC In 5 | RC In 6 | Servo 6 |
|
||||
TIM3 | Servo 5 | RC In 2 | RC In 3 | RC In 4
|
||||
TIM4 | RC In 1 | Servo 3 | Servo 2 | Servo 1
|
||||
------+-----------+-----------+-----------+----------
|
||||
@ -60,23 +60,8 @@ TIM4 | RC In 1 | Servo 3 | Servo 2 | Servo 1
|
||||
//------------------------
|
||||
// BOOTLOADER_SETTINGS
|
||||
//------------------------
|
||||
//#define FUNC_ID 2
|
||||
//#define HW_VERSION 69
|
||||
|
||||
#define BOOTLOADER_VERSION 0
|
||||
#define BOARD_TYPE 0x04
|
||||
#define BOARD_REVISION 0x01
|
||||
#define MEM_SIZE 0x20000 //128K
|
||||
#define SIZE_OF_DESCRIPTION 100
|
||||
#define START_OF_USER_CODE (uint32_t)0x08003000
|
||||
#define SIZE_OF_CODE (uint32_t)(MEM_SIZE-(START_OF_USER_CODE-0x08000000)-SIZE_OF_DESCRIPTION)
|
||||
#ifdef STM32F10X_HD
|
||||
#define HW_TYPE 0 //0=high_density 1=medium_density;
|
||||
#elif STM32F10X_MD
|
||||
#define HW_TYPE 1 //0=high_density 1=medium_density;
|
||||
#endif
|
||||
#define BOARD_READABLE TRUE
|
||||
#define BOARD_WRITABLA TRUE
|
||||
#define BOARD_WRITABLE TRUE
|
||||
#define MAX_DEL_RETRYS 3
|
||||
|
||||
|
||||
@ -91,7 +76,7 @@ TIM4 | RC In 1 | Servo 3 | Servo 2 | Servo 1
|
||||
#define PIOS_WDG_MANUAL 0x0008
|
||||
|
||||
//------------------------
|
||||
// TELEMETRY
|
||||
// TELEMETRY
|
||||
//------------------------
|
||||
#define TELEM_QUEUE_SIZE 20
|
||||
|
||||
@ -106,22 +91,11 @@ TIM4 | RC In 1 | Servo 3 | Servo 2 | Servo 1
|
||||
#define PIOS_LED_PINS { PIOS_LED_LED1_GPIO_PIN }
|
||||
#define PIOS_LED_CLKS { PIOS_LED_LED1_GPIO_CLK }
|
||||
|
||||
//-------------------------
|
||||
// Delay Timer
|
||||
//-------------------------
|
||||
#define PIOS_DELAY_TIMER TIM3
|
||||
#define PIOS_DELAY_TIMER_RCC_FUNC RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE)
|
||||
|
||||
//-------------------------
|
||||
// System Settings
|
||||
//-------------------------
|
||||
#define PIOS_MASTER_CLOCK 72000000
|
||||
#define PIOS_PERIPHERAL_CLOCK (PIOS_MASTER_CLOCK / 2)
|
||||
#if defined(USE_BOOTLOADER)
|
||||
#define PIOS_NVIC_VECTTAB_FLASH (START_OF_USER_CODE)
|
||||
#else
|
||||
#define PIOS_NVIC_VECTTAB_FLASH ((uint32_t)0x08000000)
|
||||
#endif
|
||||
|
||||
//-------------------------
|
||||
// Interrupt Priorities
|
||||
@ -151,23 +125,18 @@ extern uint32_t pios_i2c_main_adapter_id;
|
||||
//-------------------------
|
||||
#define PIOS_USART_MAX_DEVS 2
|
||||
|
||||
#define PIOS_USART_RX_BUFFER_SIZE 256
|
||||
#define PIOS_USART_TX_BUFFER_SIZE 256
|
||||
|
||||
//-------------------------
|
||||
// PIOS_COM
|
||||
//
|
||||
// See also pios_board.c
|
||||
//-------------------------
|
||||
#define PIOS_COM_MAX_DEVS 4
|
||||
#define PIOS_COM_MAX_DEVS 3
|
||||
|
||||
#define PIOS_COM_TELEM_BAUDRATE 57600
|
||||
extern uint32_t pios_com_telem_rf_id;
|
||||
#define PIOS_COM_TELEM_RF (pios_com_telem_rf_id)
|
||||
#define PIOS_COM_DEBUG PIOS_COM_TELEM_RF
|
||||
|
||||
#if defined(PIOS_INCLUDE_GPS)
|
||||
#define PIOS_COM_GPS_BAUDRATE 57600
|
||||
extern uint32_t pios_com_gps_id;
|
||||
#define PIOS_COM_GPS (pios_com_gps_id)
|
||||
#endif /* PIOS_INCLUDE_GPS */
|
||||
@ -175,12 +144,6 @@ extern uint32_t pios_com_gps_id;
|
||||
extern uint32_t pios_com_telem_usb_id;
|
||||
#define PIOS_COM_TELEM_USB (pios_com_telem_usb_id)
|
||||
|
||||
#ifdef PIOS_INCLUDE_SPEKTRUM
|
||||
#define PIOS_COM_SPEKTRUM_BAUDRATE 115200
|
||||
extern uint32_t pios_com_spektrum_id;
|
||||
#define PIOS_COM_SPEKTRUM (pios_com_spektrum_id)
|
||||
#endif
|
||||
|
||||
//-------------------------
|
||||
// ADC
|
||||
// PIOS_ADC_PinGet(0) = Gyro Z
|
||||
@ -217,7 +180,7 @@ extern uint32_t pios_com_spektrum_id;
|
||||
#define PIOS_ADC_CHANNELS { PIOS_ADC_PIN1_GPIO_CHANNEL, PIOS_ADC_PIN2_GPIO_CHANNEL, PIOS_ADC_PIN3_GPIO_CHANNEL }
|
||||
#define PIOS_ADC_MAPPING { PIOS_ADC_PIN1_ADC, PIOS_ADC_PIN2_ADC, PIOS_ADC_PIN3_ADC }
|
||||
#define PIOS_ADC_CHANNEL_MAPPING { PIOS_ADC_PIN1_ADC_NUMBER, PIOS_ADC_PIN2_ADC_NUMBER, PIOS_ADC_PIN3_ADC_NUMBER }
|
||||
#define PIOS_ADC_NUM_CHANNELS (PIOS_ADC_NUM_PINS + PIOS_ADC_USE_TEMP_SENSOR)
|
||||
#define PIOS_ADC_NUM_CHANNELS (PIOS_ADC_NUM_PINS + PIOS_ADC_USE_TEMP_SENSOR)
|
||||
#define PIOS_ADC_NUM_ADC_CHANNELS 2
|
||||
#define PIOS_ADC_USE_ADC2 1
|
||||
#define PIOS_ADC_CLOCK_FUNCTION RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_ADC2, ENABLE)
|
||||
@ -239,10 +202,27 @@ extern uint32_t pios_com_spektrum_id;
|
||||
#define PIOS_ADC_RATE (72.0e6 / 1.0 / 8.0 / 252.0 / (PIOS_ADC_NUM_CHANNELS >> PIOS_ADC_USE_ADC2))
|
||||
#define PIOS_ADC_MAX_OVERSAMPLING 36
|
||||
|
||||
//------------------------
|
||||
// PIOS_RCVR
|
||||
// See also pios_board.c
|
||||
//------------------------
|
||||
#define PIOS_RCVR_MAX_DEVS 1
|
||||
#define PIOS_RCVR_MAX_CHANNELS 12
|
||||
|
||||
//-------------------------
|
||||
// Receiver PWM inputs
|
||||
// Receiver PPM input
|
||||
//-------------------------
|
||||
#define PIOS_PWM_MAX_INPUTS 6
|
||||
#define PIOS_PPM_NUM_INPUTS 12
|
||||
|
||||
//-------------------------
|
||||
// Receiver PWM input
|
||||
//-------------------------
|
||||
#define PIOS_PWM_NUM_INPUTS 6
|
||||
|
||||
//-------------------------
|
||||
// Receiver SPEKTRUM input
|
||||
//-------------------------
|
||||
#define PIOS_SPEKTRUM_NUM_INPUTS 12
|
||||
|
||||
//-------------------------
|
||||
// Servo outputs
|
||||
@ -272,10 +252,9 @@ extern uint32_t pios_com_spektrum_id;
|
||||
// USB
|
||||
//-------------------------
|
||||
#define PIOS_USB_ENABLED 1
|
||||
#define PIOS_USB_HID_MAX_DEVS 1
|
||||
#define PIOS_USB_DETECT_GPIO_PORT GPIOC
|
||||
#define PIOS_USB_DETECT_GPIO_PIN GPIO_Pin_15
|
||||
#define PIOS_USB_DETECT_EXTI_LINE EXTI_Line15
|
||||
#define PIOS_IRQ_USB_PRIORITY PIOS_IRQ_PRIO_MID
|
||||
#define PIOS_USB_RX_BUFFER_SIZE 128
|
||||
#define PIOS_USB_TX_BUFFER_SIZE 128
|
||||
#endif /* STM32103CB_AHRS_H_ */
|
||||
|
@ -58,20 +58,8 @@ TIM4 | STOPWATCH |
|
||||
//------------------------
|
||||
// BOOTLOADER_SETTINGS
|
||||
//------------------------
|
||||
#define BOOTLOADER_VERSION 0
|
||||
#define BOARD_TYPE 0x03
|
||||
#define BOARD_REVISION 0x01
|
||||
#define MEM_SIZE (0x20000 - 0x00400) // 128K - 1K (reserved for config data)
|
||||
#define SIZE_OF_DESCRIPTION 100
|
||||
#define START_OF_USER_CODE (uint32_t)0x08003000
|
||||
#define SIZE_OF_CODE (uint32_t)(MEM_SIZE-(START_OF_USER_CODE-0x08000000)-SIZE_OF_DESCRIPTION)
|
||||
#ifdef STM32F10X_HD
|
||||
#define HW_TYPE 0 //0=high_density 1=medium_density;
|
||||
#elif STM32F10X_MD
|
||||
#define HW_TYPE 1 //0=high_density 1=medium_density;
|
||||
#endif
|
||||
#define BOARD_READABLE TRUE
|
||||
#define BOARD_WRITABLA TRUE
|
||||
#define BOARD_WRITABLE TRUE
|
||||
#define MAX_DEL_RETRYS 3
|
||||
|
||||
|
||||
@ -81,12 +69,6 @@ TIM4 | STOPWATCH |
|
||||
#define PIOS_MASTER_CLOCK 72000000ul
|
||||
#define PIOS_PERIPHERAL_CLOCK (PIOS_MASTER_CLOCK / 2)
|
||||
|
||||
#if defined(USE_BOOTLOADER)
|
||||
#define PIOS_NVIC_VECTTAB_FLASH (START_OF_USER_CODE)
|
||||
#else
|
||||
#define PIOS_NVIC_VECTTAB_FLASH ((uint32_t)0x08000000)
|
||||
#endif
|
||||
|
||||
// *****************************************************************
|
||||
// Interrupt Priorities
|
||||
|
||||
@ -135,14 +117,6 @@ TIM4 | STOPWATCH |
|
||||
#define TX_LED_OFF PIOS_LED_Off(LED4)
|
||||
#define TX_LED_TOGGLE PIOS_LED_Toggle(LED4)
|
||||
|
||||
// *****************************************************************
|
||||
// Delay Timer
|
||||
|
||||
//#define PIOS_DELAY_TIMER TIM2
|
||||
//#define PIOS_DELAY_TIMER_RCC_FUNC RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE)
|
||||
#define PIOS_DELAY_TIMER TIM1
|
||||
#define PIOS_DELAY_TIMER_RCC_FUNC RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE)
|
||||
|
||||
// *****************************************************************
|
||||
// Timer interrupt
|
||||
|
||||
@ -170,9 +144,6 @@ extern uint32_t pios_spi_port_id;
|
||||
//-------------------------
|
||||
#define PIOS_USART_MAX_DEVS 1
|
||||
|
||||
#define PIOS_USART_RX_BUFFER_SIZE 512
|
||||
#define PIOS_USART_TX_BUFFER_SIZE 512
|
||||
|
||||
//-------------------------
|
||||
// PIOS_COM
|
||||
//
|
||||
@ -422,12 +393,11 @@ extern uint32_t pios_com_telem_usb_id;
|
||||
|
||||
#if defined(PIOS_INCLUDE_USB_HID)
|
||||
#define PIOS_USB_ENABLED 1
|
||||
#define PIOS_USB_HID_MAX_DEVS 1
|
||||
#define PIOS_USB_DETECT_GPIO_PORT GPIO_IN_2_PORT
|
||||
#define PIOS_USB_DETECT_GPIO_PIN GPIO_IN_2_PIN
|
||||
#define PIOS_USB_DETECT_EXTI_LINE EXTI_Line4
|
||||
#define PIOS_IRQ_USB_PRIORITY 8
|
||||
#define PIOS_USB_RX_BUFFER_SIZE 512
|
||||
#define PIOS_USB_TX_BUFFER_SIZE 512
|
||||
#endif
|
||||
|
||||
// *****************************************************************
|
||||
|