/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/CHANGE.LOG |
---|
0,0 → 1,136 |
/**************************************************************************** |
* Copyright (C) 2011 by Christian "cebra" Brandtner * |
* brandtner@brandtner.net * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
****************************************************************************/ |
!!Vor dem Kompilieren in der main.h die Hardwareversion einstellen!! |
05.08.2012 V3.6.3.i Cebra |
Neue OSD Variante 3 |
Alarme werden priorisiert, MK Lowbat hat höchste Prio und wird nicht von anderen Meldungen überschrieben |
27.7.2012 V3.6.2h Cebra |
PKT-Tools wurde bei nur FC Betrieb nicht angezeigt |
17.6.2012 V3.6.2g Cebra |
OSD Screen, Spannungsanzeige kann auf Balkenanzeige gesetzt werden, Balkenanzeige ist nur aktiv wenn die LOW-Batt Spannung < 5V ist, |
damit wird die Zellenerkennung eingeschaltet. die Einstellung ist funktionsgleich wie beim MK, <5V Zellenerkennung > 5V absolute Spannung wird verwendet |
Erweiterung im OSD1 Screen um Waypointanzeige |
Textfehler beim MK-Settings aktivieren behoben. |
OSD Screen, Beep bei Erreichen eines Waypoints |
Fehler im BT-Setup bei Pin und Namenseingabe beseitigt. |
29.5.2012 V3.6.2f Cebra |
OSD Screen umschaltbar zwischen zwei Varianten |
28.5.2012 V3.6.2d Cebra |
Variobeep it jetzt abhängig von Motoren laufen und Höhenschalter aktiv |
Variobeep für Sinken schneller |
26.5.2012 V3.6.2c Cebra |
Variopiepser im OSD-Screen, langes Piepen = steigen, kurzes Piepen = fallen. |
Homesicht im OSD, Richtung im Kreis umkehrbar |
24.5.2012 V3.6.2.b2 Cebra |
bei Unterspannung wird neben dem Piepsen der Spannungswert invertiert angezeigt. |
Wenn der MK kein GPS OK sendet ist die Sat-Anzeige invertiert. |
23.5.2012 V3.6.2 Cebra |
maximale Sinkrate einstellbar im OSD Setup |
Anpassungen im OSD-Screen |
18.5.2012 V3.6.1b Cebra |
Falsche Beschriftung im Wi232 Kanal Setup |
16.5.2012 V3.6.1 Cebra |
Anpassung an FC Version 0.88M. |
Out1/Out2 Anzeige kann im Setup negiert werden. |
Navidatenausgabe an SV2 vorbereitet |
15.3.2012 V3.6.0.c Cebra |
Anpassung für unterschiedlieche BTM-222 Module, Devicename und MAC-Adresse werden jetzt unabhängig von der BTM-222 Software sauber getrennt |
GPS Anzeige der Daten um Uhrzeit erweitert, wenn Uhrzeit dargestellt wird dann ist Verbindung zur GPS-Maus vorhanden |
Fehlerbeseitigung bei Showversion und Startanzeige |
13.3.2012 V3.6.0.b Cebra |
Statistik im OSD Screen, max. Entfernung jetzt 4 stellig |
11.3.2012 V3.6.0 Cebra |
Neue Version für FC 0.88 |
Erweiterungen im Setup als Vorbereitung für Antennentracking |
Bluetooth GPS-Maus Konfiguration, hat jetzt noch keine Funktion , nur zum Testen |
24.1.2012 V3.5.8d Cebra |
Fehlerpiepen beim Empfangsausfall im OSD Screen ist im Setup schaltbar |
23.2.2012 V3.5.8c Cebra |
Sprachunterstützung verbessert |
Letzte Postion in OSD verbessert, bei Datenverlust automatisches Reconnect |
Akkuanzeige im MK-USB Betrieb. |
7.1.2012 V3.5.8 Cebra |
Languagesupport für die Menüs eingebaut, 4 Sprachen sind möglich, z.Z. Deutsch und Englisch in den Menüs und zusätzlich Französisch im Parametermenü. |
Ein paar Änderungen im Bereich Setup Wi232 und BTM222 |
30.12.2011 V3.5.7a Cebra |
Moduleinit wurde nicht immer gespeichert, dadurch Init der Module beim Start obwohl nicht notwendig. |
Bluetooth wird beim ersten Betätigen der Einschalttaste aktiviert um USB auszuschalten, damit der angeschlossene PC erstmal ruhig bleibt. |
30.12.2011 V3.5.7 Cebra |
PKT Setup für Akkutyp und Spannungsmessung |
28.12.2011 V3.5.6a Cebra |
Lipo Spannungsmessung eingebaut |
26.10.2011 V3.5.3 Cebra |
Fehler bei der Bluetoothinitialisierung beseitigt |
25.8.2011 V3.4.4Cebra |
Initsequenzen für Wi232 und BT erfolgen nur wenn sich was ändert oder sie neu sind. |
Lipowarnung verbessert |
Lastposition in OSD wird gespeichern wenn Verbindung zum MK verlorengegenagen ist |
Beim Start von PKT wird sie angezeigt. |
14.08.2011 V3.4.3 Cebra |
Anpassungen an neue Hardware, Bluetooth, Wi232, interne seriell Switche, PKT Lipowarnung |
30.7.2011 V3.4.1 Cebra |
Abschalten des PKT über Menütaste |
29.7.2011 V3.4.0 Cebra |
Summeranschaltung für HW1.2 angepasst, ist jetzt Summer an GND und Pin 25 |
Vorbereitungen für neue Hardware 3.9 |
25.7.2011 V3.3.4 |
BL-Controller(0-12) Test with CSV-Output over USB (HW1.2 Uart0, HW>1.2 Uart1=USB) |
Setupmenu Wi232 Parameter Uart Timeout, Uart MTU |
15.7.2011 V3.2.3 |
HW1.3 |
Beim Rücksprung aus der Wi Konfig fällt die rechte Led der Beleuchtung aus. |
(PGM des Wi allerdings noch nicht angeschlossen!) |
nur durch Hardwareänderung lösbar PD6 Pin für Wi232 |
Die Pfeile am Display im Setup PMK Menue sind noch <- -> statt oben und unten. |
1.7.2011 cebra |
Bugfixes: Summer(PC7) bei Unterspannung, Setup Wi232, Kosmetik |
27.6.2011 cebra |
PKT Setup überarbeitet, Setupmenü ist jetzt erweiterbar, Quick and Dirty war nix ;-) |
26.6.2011 cebra |
Das EEprom des PKT wird beim Starten geprüft ob es schon initialisiert ist. |
Falls nicht werden Defaultwerte gesetzt. |
Displayausrichtung kann im Setupmenü geändert werden |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/Font8x8.c |
---|
0,0 → 1,273 |
/* |
* font8x8.c |
* LCD-OSD |
* |
* Created by Peter Mack on 26.12.09. |
* Copyright 2009 SCS GmbH & Co. KG. All rights reserved. |
* |
*/ |
#include <avr/pgmspace.h> |
const uint8_t Font8x8[256][8]PROGMEM= |
{ |
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 0x00 |
{0x7E,0x81,0x95,0xB1,0xB1,0x95,0x81,0x7E}, // 0x01 |
{0x7E,0xFF,0xEB,0xCF,0xCF,0xEB,0xFF,0x7E}, // 0x02 |
{0x0E,0x1F,0x3F,0x7E,0x3F,0x1F,0x0E,0x00}, // 0x03 |
{0x08,0x1C,0x3E,0x7F,0x3E,0x1C,0x08,0x00}, // 0x04 |
{0x38,0x3A,0x9F,0xFF,0x9F,0x3A,0x38,0x00}, // 0x05 |
{0x10,0x38,0xBC,0xFF,0xBC,0x38,0x10,0x00}, // 0x06 |
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 0x07 |
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 0x08 |
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 0x09 |
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 0x0A |
{0x70,0xF8,0x88,0x88,0xFD,0x7F,0x07,0x0F}, // 0x0B |
{0x00,0x4E,0x5F,0xF1,0xF1,0x5F,0x4E,0x00}, // 0x0C |
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 0x0D |
{0xC0,0xFF,0x7F,0x05,0x05,0x65,0x7F,0x3F}, // 0x0E |
{0x99,0x5A,0x3C,0xE7,0xE7,0x3C,0x5A,0x99}, // 0x0F |
{0x7F,0x3E,0x3E,0x1C,0x1C,0x08,0x08,0x00}, // 0x10 |
{0x08,0x08,0x1C,0x1C,0x3E,0x3E,0x7F,0x00}, // 0x11 |
{0x00,0x24,0x66,0xFF,0xFF,0x66,0x24,0x00}, // 0x12 |
{0x00,0x5F,0x5F,0x00,0x00,0x5F,0x5F,0x00}, // 0x13 |
{0x06,0x0F,0x09,0x7F,0x7F,0x01,0x7F,0x7F}, // 0x14 |
{0xDA,0xBF,0xA5,0xA5,0xFD,0x59,0x03,0x02}, // 0x15 |
{0x00,0x70,0x70,0x70,0x70,0x70,0x70,0x00}, // 0x16 |
{0x80,0x94,0xB6,0xFF,0xFF,0xB6,0x94,0x80}, // 0x17 |
{0x00,0x04,0x06,0x7F,0x7F,0x06,0x04,0x00}, // 0x18 |
{0x00,0x10,0x30,0x7F,0x7F,0x30,0x10,0x00}, // 0x19 |
{0x08,0x08,0x08,0x2A,0x3E,0x1C,0x08,0x00}, // 0x1A |
{0x08,0x1C,0x3E,0x2A,0x08,0x08,0x08,0x00}, // 0x1B |
{0x3C,0x3C,0x20,0x20,0x20,0x20,0x20,0x00}, // 0x1C |
{0x08,0x1C,0x3E,0x08,0x08,0x3E,0x1C,0x08}, // 0x1D |
{0x30,0x38,0x3C,0x3E,0x3E,0x3C,0x38,0x30}, // 0x1E |
{0x06,0x0E,0x1E,0x3E,0x3E,0x1E,0x0E,0x06}, // 0x1F |
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 0x20 |
{0x00,0x06,0x5F,0x5F,0x06,0x00,0x00,0x00}, // 0x21 |
{0x00,0x07,0x07,0x00,0x07,0x07,0x00,0x00}, // 0x22 |
{0x14,0x7F,0x7F,0x14,0x7F,0x7F,0x14,0x00}, // 0x23 |
{0x24,0x2E,0x6B,0x6B,0x3A,0x12,0x00,0x00}, // 0x24 |
{0x46,0x66,0x30,0x18,0x0C,0x66,0x62,0x00}, // 0x25 |
{0x30,0x7A,0x4F,0x5D,0x37,0x7A,0x48,0x00}, // 0x26 |
{0x04,0x07,0x03,0x00,0x00,0x00,0x00,0x00}, // 0x27 |
{0x00,0x1C,0x3E,0x63,0x41,0x00,0x00,0x00}, // 0x28 |
{0x00,0x41,0x63,0x3E,0x1C,0x00,0x00,0x00}, // 0x29 |
{0x08,0x2A,0x3E,0x1C,0x1C,0x3E,0x2A,0x08}, // 0x2A |
{0x08,0x08,0x3E,0x3E,0x08,0x08,0x00,0x00}, // 0x2B |
{0x00,0xA0,0xE0,0x60,0x00,0x00,0x00,0x00}, // 0x2C |
{0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00}, // 0x2D |
{0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00}, // 0x2E |
{0x60,0x30,0x18,0x0C,0x06,0x03,0x01,0x00}, // 0x2F |
{0x3E,0x7F,0x59,0x4D,0x7F,0x3E,0x00,0x00}, // 0x30 |
{0x42,0x42,0x7F,0x7F,0x40,0x40,0x00,0x00}, // 0x31 |
{0x62,0x73,0x59,0x49,0x6F,0x66,0x00,0x00}, // 0x32 |
{0x22,0x63,0x49,0x49,0x7F,0x36,0x00,0x00}, // 0x33 |
{0x18,0x1C,0x16,0x13,0x7F,0x7F,0x10,0x00}, // 0x34 |
{0x27,0x67,0x45,0x45,0x7D,0x39,0x00,0x00}, // 0x35 |
{0x3C,0x7E,0x4B,0x49,0x79,0x30,0x00,0x00}, // 0x36 |
{0x03,0x63,0x71,0x19,0x0F,0x07,0x00,0x00}, // 0x37 |
{0x36,0x7F,0x49,0x49,0x7F,0x36,0x00,0x00}, // 0x38 |
{0x06,0x4F,0x49,0x69,0x3F,0x1E,0x00,0x00}, // 0x39 |
{0x00,0x00,0x6C,0x6C,0x00,0x00,0x00,0x00}, // 0x3A |
{0x00,0xA0,0xEC,0x6C,0x00,0x00,0x00,0x00}, // 0x3B |
{0x08,0x1C,0x36,0x63,0x41,0x00,0x00,0x00}, // 0x3C |
{0x14,0x14,0x14,0x14,0x14,0x14,0x00,0x00}, // 0x3D |
{0x00,0x41,0x63,0x36,0x1C,0x08,0x00,0x00}, // 0x3E |
{0x02,0x03,0x51,0x59,0x0F,0x06,0x00,0x00}, // 0x3F |
{0x3E,0x7F,0x41,0x5D,0x5D,0x1F,0x1E,0x00}, // 0x40 |
{0x7C,0x7E,0x13,0x13,0x7E,0x7C,0x00,0x00}, // 0x41 |
{0x41,0x7F,0x7F,0x49,0x49,0x7F,0x36,0x00}, // 0x42 |
{0x1C,0x3E,0x63,0x41,0x41,0x63,0x22,0x00}, // 0x43 |
{0x41,0x7F,0x7F,0x41,0x63,0x7F,0x1C,0x00}, // 0x44 |
{0x41,0x7F,0x7F,0x49,0x5D,0x41,0x63,0x00}, // 0x45 |
{0x41,0x7F,0x7F,0x49,0x1D,0x01,0x03,0x00}, // 0x46 |
{0x1C,0x3E,0x63,0x41,0x51,0x73,0x72,0x00}, // 0x47 |
{0x7F,0x7F,0x08,0x08,0x7F,0x7F,0x00,0x00}, // 0x48 |
{0x00,0x41,0x7F,0x7F,0x41,0x00,0x00,0x00}, // 0x49 |
{0x30,0x70,0x40,0x41,0x7F,0x3F,0x01,0x00}, // 0x4A |
{0x41,0x7F,0x7F,0x08,0x1C,0x77,0x63,0x00}, // 0x4B |
{0x41,0x7F,0x7F,0x41,0x40,0x60,0x70,0x00}, // 0x4C |
{0x7F,0x7F,0x06,0x0C,0x06,0x7F,0x7F,0x00}, // 0x4D |
{0x7F,0x7F,0x06,0x0C,0x18,0x7F,0x7F,0x00}, // 0x4E |
{0x1C,0x3E,0x63,0x41,0x63,0x3E,0x1C,0x00}, // 0x4F |
{0x41,0x7F,0x7F,0x49,0x09,0x0F,0x06,0x00}, // 0x50 |
{0x1E,0x3F,0x21,0x71,0x7F,0x5E,0x00,0x00}, // 0x51 |
{0x41,0x7F,0x7F,0x19,0x39,0x6F,0x46,0x00}, // 0x52 |
{0x26,0x67,0x4D,0x59,0x7B,0x32,0x00,0x00}, // 0x53 |
{0x03,0x41,0x7F,0x7F,0x41,0x03,0x00,0x00}, // 0x54 |
{0x7F,0x7F,0x40,0x40,0x7F,0x7F,0x00,0x00}, // 0x55 |
{0x1F,0x3F,0x60,0x60,0x3F,0x1F,0x00,0x00}, // 0x56 |
{0x7F,0x7F,0x30,0x18,0x30,0x7F,0x7F,0x00}, // 0x57 |
{0x63,0x77,0x1C,0x08,0x1C,0x77,0x63,0x00}, // 0x58 |
{0x07,0x4F,0x78,0x78,0x4F,0x07,0x00,0x00}, // 0x59 |
{0x67,0x73,0x59,0x4D,0x47,0x63,0x71,0x00}, // 0x5A |
{0x00,0x7F,0x7F,0x41,0x41,0x00,0x00,0x00}, // 0x5B |
{0x01,0x03,0x06,0x0C,0x18,0x30,0x60,0x00}, // 0x5C |
{0x00,0x41,0x41,0x7F,0x7F,0x00,0x00,0x00}, // 0x5D |
{0x08,0x0C,0x06,0x03,0x06,0x0C,0x08,0x00}, // 0x5E |
{0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, // 0x5F |
{0x00,0x00,0x03,0x07,0x04,0x00,0x00,0x00}, // 0x60 |
{0x20,0x74,0x54,0x54,0x3C,0x78,0x40,0x00}, // 0x61 |
{0x41,0x3F,0x7F,0x44,0x44,0x7C,0x38,0x00}, // 0x62 |
{0x38,0x7C,0x44,0x44,0x6C,0x28,0x00,0x00}, // 0x63 |
{0x30,0x78,0x48,0x49,0x3F,0x7F,0x40,0x00}, // 0x64 |
{0x38,0x7C,0x54,0x54,0x5C,0x18,0x00,0x00}, // 0x65 |
{0x48,0x7E,0x7F,0x49,0x03,0x02,0x00,0x00}, // 0x66 |
{0x98,0xBC,0xA4,0xA4,0xF8,0x7C,0x04,0x00}, // 0x67 |
{0x41,0x7F,0x7F,0x08,0x04,0x7C,0x78,0x00}, // 0x68 |
{0x00,0x44,0x7D,0x7D,0x40,0x00,0x00,0x00}, // 0x69 |
{0x40,0xC4,0x84,0xFD,0x7D,0x00,0x00,0x00}, // 0x6A |
{0x41,0x7F,0x7F,0x10,0x38,0x6C,0x44,0x00}, // 0x6B |
{0x00,0x41,0x7F,0x7F,0x40,0x00,0x00,0x00}, // 0x6C |
{0x7C,0x7C,0x0C,0x18,0x0C,0x7C,0x78,0x00}, // 0x6D |
{0x7C,0x7C,0x04,0x04,0x7C,0x78,0x00,0x00}, // 0x6E |
{0x38,0x7C,0x44,0x44,0x7C,0x38,0x00,0x00}, // 0x6F |
{0x84,0xFC,0xF8,0xA4,0x24,0x3C,0x18,0x00}, // 0x70 |
{0x18,0x3C,0x24,0xA4,0xF8,0xFC,0x84,0x00}, // 0x71 |
{0x44,0x7C,0x78,0x44,0x1C,0x18,0x00,0x00}, // 0x72 |
{0x48,0x5C,0x54,0x54,0x74,0x24,0x00,0x00}, // 0x73 |
{0x00,0x04,0x3E,0x7F,0x44,0x24,0x00,0x00}, // 0x74 |
{0x3C,0x7C,0x40,0x40,0x3C,0x7C,0x40,0x00}, // 0x75 |
{0x1C,0x3C,0x60,0x60,0x3C,0x1C,0x00,0x00}, // 0x76 |
{0x3C,0x7C,0x60,0x30,0x60,0x7C,0x3C,0x00}, // 0x77 |
{0x44,0x6C,0x38,0x10,0x38,0x6C,0x44,0x00}, // 0x78 |
{0x9C,0xBC,0xA0,0xA0,0xFC,0x7C,0x00,0x00}, // 0x79 |
{0x4C,0x64,0x74,0x5C,0x4C,0x64,0x00,0x00}, // 0x7A |
{0x08,0x08,0x3E,0x77,0x41,0x41,0x00,0x00}, // 0x7B |
{0x00,0x00,0x00,0x77,0x77,0x00,0x00,0x00}, // 0x7C |
{0x41,0x41,0x77,0x3E,0x08,0x08,0x00,0x00}, // 0x7D |
{0x02,0x03,0x01,0x03,0x02,0x03,0x01,0x00}, // 0x7E |
{0x78,0x7C,0x46,0x43,0x46,0x7C,0x78,0x00}, // 0x7F |
{0x1E,0xBF,0xE1,0x61,0x33,0x12,0x00,0x00}, // 0x80 |
{0x3A,0x7A,0x40,0x40,0x7A,0x7A,0x40,0x00}, // 0x81 |
{0x38,0x7C,0x56,0x57,0x5D,0x18,0x00,0x00}, // 0x82 |
{0x02,0x23,0x75,0x55,0x55,0x7D,0x7B,0x42}, // 0x83 |
{0x21,0x75,0x54,0x54,0x7D,0x79,0x40,0x00}, // 0x84 |
{0x20,0x75,0x57,0x56,0x7C,0x78,0x40,0x00}, // 0x85 |
{0x00,0x22,0x77,0x55,0x55,0x7F,0x7A,0x40}, // 0x86 |
{0x1C,0xBE,0xE2,0x62,0x36,0x14,0x00,0x00}, // 0x87 |
{0x02,0x3B,0x7D,0x55,0x55,0x5D,0x1B,0x02}, // 0x88 |
{0x39,0x7D,0x54,0x54,0x5D,0x19,0x00,0x00}, // 0x89 |
{0x38,0x7D,0x57,0x56,0x5C,0x18,0x00,0x00}, // 0x8A |
{0x01,0x45,0x7C,0x7C,0x41,0x01,0x00,0x00}, // 0x8B |
{0x02,0x03,0x45,0x7D,0x7D,0x43,0x02,0x00}, // 0x8C |
{0x00,0x45,0x7F,0x7E,0x40,0x00,0x00,0x00}, // 0x8D |
{0x79,0x7D,0x26,0x26,0x7D,0x79,0x00,0x00}, // 0x8E |
{0x70,0x7A,0x2D,0x2D,0x7A,0x70,0x00,0x00}, // 0x8F |
{0x44,0x7C,0x7E,0x57,0x55,0x44,0x00,0x00}, // 0x90 |
{0x20,0x74,0x54,0x54,0x7C,0x7C,0x54,0x54}, // 0x91 |
{0x7C,0x7E,0x0B,0x09,0x7F,0x7F,0x49,0x00}, // 0x92 |
{0x32,0x7B,0x49,0x49,0x7B,0x32,0x00,0x00}, // 0x93 |
{0x32,0x7A,0x48,0x48,0x7A,0x32,0x00,0x00}, // 0x94 |
{0x30,0x79,0x4B,0x4A,0x78,0x30,0x00,0x00}, // 0x95 |
{0x3A,0x7B,0x41,0x41,0x7B,0x7A,0x40,0x00}, // 0x96 |
{0x38,0x79,0x43,0x42,0x78,0x78,0x40,0x00}, // 0x97 |
{0xBA,0xBA,0xA0,0xA0,0xFA,0x7A,0x00,0x00}, // 0x98 |
{0x39,0x7D,0x44,0x44,0x44,0x7D,0x39,0x00}, // 0x99 |
{0x3D,0x7D,0x40,0x40,0x7D,0x3D,0x00,0x00}, // 0x9A |
{0x38,0x7C,0x64,0x54,0x4C,0x7C,0x38,0x00}, // 0x9B |
{0x68,0x7E,0x7F,0x49,0x43,0x66,0x20,0x00}, // 0x9C |
{0x5C,0x3E,0x73,0x49,0x67,0x3E,0x1D,0x00}, // 0x9D |
{0x44,0x6C,0x38,0x38,0x6C,0x44,0x00,0x00}, // 0x9E |
{0x40,0xC8,0x88,0xFE,0x7F,0x09,0x0B,0x02}, // 0x9F |
{0x20,0x74,0x56,0x57,0x7D,0x78,0x40,0x00}, // 0xA0 |
{0x00,0x44,0x7E,0x7F,0x41,0x00,0x00,0x00}, // 0xA1 |
{0x30,0x78,0x48,0x4A,0x7B,0x31,0x00,0x00}, // 0xA2 |
{0x38,0x78,0x40,0x42,0x7B,0x79,0x40,0x00}, // 0xA3 |
{0x7A,0x7B,0x09,0x0B,0x7A,0x73,0x01,0x00}, // 0xA4 |
{0x7A,0x7B,0x19,0x33,0x7A,0x7B,0x01,0x00}, // 0xA5 |
{0x00,0x26,0x2F,0x29,0x2F,0x2F,0x28,0x00}, // 0xA6 |
{0x00,0x26,0x2F,0x29,0x29,0x2F,0x26,0x00}, // 0xA7 |
{0x30,0x78,0x4D,0x45,0x60,0x20,0x00,0x00}, // 0xA8 |
{0x1C,0x22,0x7D,0x4B,0x5B,0x65,0x22,0x1C}, // 0xA9 |
{0x08,0x08,0x08,0x08,0x38,0x38,0x00,0x00}, // 0xAA |
{0x61,0x3F,0x1F,0xCC,0xEE,0xAB,0xB9,0x90}, // 0xAB |
{0x61,0x3F,0x1F,0x4C,0x66,0x73,0xD9,0xF8}, // 0xAC |
{0x00,0x00,0x60,0xFA,0xFA,0x60,0x00,0x00}, // 0xAD |
{0x08,0x1C,0x36,0x22,0x08,0x1C,0x36,0x22}, // 0xAE |
{0x22,0x36,0x1C,0x08,0x22,0x36,0x1C,0x08}, // 0xAF |
{0xAA,0x00,0x55,0x00,0xAA,0x00,0x55,0x00}, // 0xB0 |
{0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55}, // 0xB1 |
{0x55,0xFF,0xAA,0xFF,0x55,0xFF,0xAA,0xFF}, // 0xB2 |
{0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00}, // 0xB3 |
{0x10,0x10,0x10,0xFF,0xFF,0x00,0x00,0x00}, // 0xB4 |
{0x70,0x78,0x2C,0x2E,0x7B,0x71,0x00,0x00}, // 0xB5 |
{0x72,0x79,0x2D,0x2D,0x79,0x72,0x00,0x00}, // 0xB6 |
{0x71,0x7B,0x2E,0x2C,0x78,0x70,0x00,0x00}, // 0xB7 |
{0x1C,0x22,0x5D,0x55,0x55,0x41,0x22,0x1C}, // 0xB8 |
{0x14,0x14,0xF7,0xF7,0x00,0xFF,0xFF,0x00}, // 0xB9 |
{0x00,0x00,0xFF,0xFF,0x00,0xFF,0xFF,0x00}, // 0xBA |
{0x14,0x14,0xF4,0xF4,0x04,0xFC,0xFC,0x00}, // 0xBB |
{0x14,0x14,0x17,0x17,0x10,0x1F,0x1F,0x00}, // 0xBC |
{0x18,0x3C,0x24,0xE7,0xE7,0x24,0x24,0x00}, // 0xBD |
{0x2B,0x2F,0xFC,0xFC,0x2F,0x2B,0x00,0x00}, // 0xBE |
{0x10,0x10,0x10,0xF0,0xF0,0x00,0x00,0x00}, // 0xBF |
{0x00,0x00,0x00,0x1F,0x1F,0x10,0x10,0x10}, // 0xC0 |
{0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10}, // 0xC1 |
{0x10,0x10,0x10,0xF0,0xF0,0x10,0x10,0x10}, // 0xC2 |
{0x00,0x00,0x00,0xFF,0xFF,0x10,0x10,0x10}, // 0xC3 |
{0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10}, // 0xC4 |
{0x10,0x10,0x10,0xFF,0xFF,0x10,0x10,0x10}, // 0xC5 |
{0x22,0x77,0x55,0x57,0x7E,0x7B,0x41,0x00}, // 0xC6 |
{0x72,0x7B,0x2D,0x2F,0x7A,0x73,0x01,0x00}, // 0xC7 |
{0x00,0x00,0x1F,0x1F,0x10,0x17,0x17,0x14}, // 0xC8 |
{0x00,0x00,0xFC,0xFC,0x04,0xF4,0xF4,0x14}, // 0xC9 |
{0x14,0x14,0x17,0x17,0x10,0x17,0x17,0x14}, // 0xCA |
{0x14,0x14,0xF4,0xF4,0x04,0xF4,0xF4,0x14}, // 0xCB |
{0x00,0x00,0xFF,0xFF,0x00,0xF7,0xF7,0x14}, // 0xCC |
{0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14}, // 0xCD |
{0x14,0x14,0xF7,0xF7,0x00,0xF7,0xF7,0x14}, // 0xCE |
{0x66,0x3C,0x3C,0x24,0x3C,0x3C,0x66,0x00}, // 0xCF |
{0x05,0x27,0x72,0x57,0x7D,0x38,0x00,0x00}, // 0xD0 |
{0x49,0x7F,0x7F,0x49,0x63,0x7F,0x1C,0x00}, // 0xD1 |
{0x46,0x7D,0x7D,0x55,0x55,0x46,0x00,0x00}, // 0xD2 |
{0x45,0x7D,0x7C,0x54,0x55,0x45,0x00,0x00}, // 0xD3 |
{0x44,0x7D,0x7F,0x56,0x54,0x44,0x00,0x00}, // 0xD4 |
{0x0A,0x0E,0x08,0x00,0x00,0x00,0x00,0x00}, // 0xD5 |
{0x00,0x44,0x7E,0x7F,0x45,0x00,0x00,0x00}, // 0xD6 |
{0x02,0x45,0x7D,0x7D,0x45,0x02,0x00,0x00}, // 0xD7 |
{0x01,0x45,0x7C,0x7C,0x45,0x01,0x00,0x00}, // 0xD8 |
{0x10,0x10,0x10,0x1F,0x1F,0x00,0x00,0x00}, // 0xD9 |
{0x00,0x00,0x00,0xF0,0xF0,0x10,0x10,0x10}, // 0xDA |
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}, // 0xDB |
{0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0}, // 0xDC |
{0x00,0x00,0x00,0x77,0x77,0x00,0x00,0x00}, // 0xDD |
{0x00,0x45,0x7F,0x7E,0x44,0x00,0x00,0x00}, // 0xDE |
{0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F}, // 0xDF |
{0x38,0x7C,0x46,0x47,0x45,0x7C,0x38,0x00}, // 0xE0 |
{0xFC,0xFE,0x2A,0x2A,0x3E,0x14,0x00,0x00}, // 0xE1 |
{0x3A,0x7D,0x45,0x45,0x45,0x7D,0x3A,0x00}, // 0xE2 |
{0x38,0x7C,0x45,0x47,0x46,0x7C,0x38,0x00}, // 0xE3 |
{0x32,0x7B,0x49,0x4B,0x7A,0x33,0x01,0x00}, // 0xE4 |
{0x3A,0x7F,0x45,0x47,0x46,0x7F,0x39,0x00}, // 0xE5 |
{0x80,0xFE,0x7E,0x20,0x20,0x3E,0x1E,0x00}, // 0xE6 |
{0x42,0x7E,0x7E,0x54,0x1C,0x08,0x00,0x00}, // 0xE7 |
{0x41,0x7F,0x7F,0x55,0x14,0x1C,0x08,0x00}, // 0xE8 |
{0x3C,0x7C,0x42,0x43,0x7D,0x3C,0x00,0x00}, // 0xE9 |
{0x3A,0x79,0x41,0x41,0x79,0x3A,0x00,0x00}, // 0xEA |
{0x3C,0x7D,0x43,0x42,0x7C,0x3C,0x00,0x00}, // 0xEB |
{0xB8,0xB8,0xA2,0xA3,0xF9,0x78,0x00,0x00}, // 0xEC |
{0x0C,0x5C,0x72,0x73,0x5D,0x0C,0x00,0x00}, // 0xED |
{0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00}, // 0xEE |
{0x00,0x00,0x02,0x03,0x01,0x00,0x00,0x00}, // 0xEF |
{0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00}, // 0xF0 |
{0x44,0x44,0x5F,0x5F,0x44,0x44,0x00,0x00}, // 0xF1 |
{0x28,0x28,0x28,0x28,0x28,0x28,0x00,0x00}, // 0xF2 |
{0x71,0x35,0x1F,0x4C,0x66,0x73,0xD9,0xF8}, // 0xF3 |
{0x06,0x0F,0x09,0x7F,0x7F,0x01,0x7F,0x7F}, // 0xF4 |
{0xDA,0xBF,0xA5,0xA5,0xFD,0x59,0x03,0x02}, // 0xF5 |
{0x08,0x08,0x6B,0x6B,0x08,0x08,0x00,0x00}, // 0xF6 |
{0x00,0x80,0xC0,0x40,0x00,0x00,0x00,0x00}, // 0xF7 |
{0x00,0x06,0x0F,0x09,0x0F,0x06,0x00,0x00}, // 0xF8 |
{0x02,0x02,0x00,0x00,0x02,0x02,0x00,0x00}, // 0xF9 |
{0x00,0x00,0x00,0x10,0x10,0x00,0x00,0x00}, // 0xFA |
{0x00,0x12,0x13,0x1F,0x1F,0x10,0x10,0x00}, // 0xFB |
{0x00,0x11,0x15,0x15,0x1F,0x1F,0x0A,0x00}, // 0xFC |
{0x00,0x19,0x1D,0x15,0x17,0x12,0x00,0x00}, // 0xFD |
{0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,0x00}, // 0xFE |
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00} // 0xFF |
}; |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/Font8x8.h |
---|
0,0 → 1,31 |
/***************************************************************************** |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* - font provided by Claas Anders "CaScAdE" Rathje * |
* - umlauts and special characters by Peter "woggle" Mack * |
* * |
* 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 2 of the License. * |
* * |
* 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 _FONT8X8_H |
#define _FONT8X8_H |
#include <avr/pgmspace.h> |
extern const uint8_t Font8x8[256][8]; |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/HAL_HW1_2.c |
---|
0,0 → 1,132 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
// *Hardwareabhängige Definitionen und Prozeduren |
// * Hardware Leiterplatte V1.2 sebseb7 |
#ifndef HAL_HW1_2_C_ |
#define HAL_HW1_2_C_ |
#include "cpu.h" |
#include <inttypes.h> |
#include <avr/io.h> |
#include <avr/interrupt.h> |
#include <avr/pgmspace.h> |
#include <avr/eeprom.h> |
#include <util/delay.h> |
#include "main.h" |
#if defined HWVERSION1_2W || defined HWVERSION1_2 |
#include "usart.h" |
#include "uart1.h" |
#include "lcd.h" |
#include "display.h" |
#include "timer.h" |
#include "eeprom.h" |
#include "Wi232.h" |
#include "twimaster.h" |
void InitHWPorts(void) /* Initialisierung der Hardware für die jeweilige Leiterplattenversion */ |
{ |
// enable pull ups for the 4 keys |
PORTA |= (1<<PORTA4)|(1<<PORTA5)|(1<<PORTA6)|(1<<PORTA7); |
DDRC |= (1<<DDC0)|(1<<DDC1)|(1<<DDC6)|(1<<DDC5)|(1<<DDC7); |
DDRD |= (1<<DDD7); |
DDRB = 0xFF; |
set_LED1(); |
set_D_LIGHT(); |
Timer0_Init (); |
Timer1_Init (); // pwm |
Timer2_Init (); // Displaybeleuchtung |
LCD_Init (0); |
BeepTime = 500; |
BeepMuster = 0x0080; |
// _delay_ms(250); |
clr_LED1(); |
Display_on = 1; |
USART_Init (UART_BAUD_SELECT(USART_BAUD,F_CPU)); |
// I2C_Init(1); |
sei (); |
ReadParameter (); |
LCD_Init (1); |
OCR2A =LCD_Helligkeit*2.55; |
#ifdef HWVERSION1_2W |
if (WiIsSet==false) |
InitWi232(); /* wenn Wi232 nicht initialisiert ist, dann jetzt tun*/ |
else |
{ |
discoverWi232(); /* Wi232 suchen*/ |
_delay_ms(1000); |
} |
#endif |
} |
void set_D_LIGHT(void) /* Displaybeleuchtung ein*/ |
{ |
PORTC &= ~(1<<PORTC0); |
PORTC &= ~(1<<PORTC1); |
PORTD &= ~(1<<PORTD7); |
} |
void clr_D_LIGHT(void) /* Displaybeleuchtung aus*/ |
{ |
PORTC |= (1<<PORTC0); |
PORTC |= (1<<PORTC1); |
PORTD |= (1<<PORTD7); |
} |
#endif |
#endif /* HAL_HW3_2_C_ */ |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/HAL_HW1_2.h |
---|
0,0 → 1,99 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
// * Hardwareabhängige Definitionen und Prozeduren |
// * Hardware Leiterplatte V1.2 sebseb7 |
/* Belegung der Ports*/ |
/*Hardware 1.2 sebseb7 Portbelegung |
Servo PD4 Pin 13 |
Servo PD5 Pin 14 |
Displaybeleuchtung PD7 Pin 16 LED an + |
Displaybeleuchtung PC0 Pin 10 LED an + |
Displaybeleuchtung PC1 Pin 20 LED an + |
Summer PC6 Pin 25 Summer an GND |
Wi232 PC7 Pin 26 Wi232 CMD Pin |
*/ |
#ifndef HAL_HW1_2_H_ |
#define HAL_HW1_2_H_ |
#define set_cs() (PORTB |= (1 << PB4)) // Display |
#define clr_cs() (PORTB &= ~(1 << PB4)) |
#define set_reset() (PORTB |= (1 << PB2)) |
#define clr_reset() (PORTB &= ~(1 << PB2)) |
#define set_A0() (PORTB |= (1 << PB3)) // Data |
#define clr_A0() (PORTB &= ~(1 << PB3)) // Command |
#define set_scl() (PORTB |= (1 << PB7)) |
#define clr_scl() (PORTB &= ~(1 << PB7)) |
#define set_si() (PORTB |= (1 << PB5)) |
#define clr_si() (PORTB &= ~(1 << PB5)) |
#define set_LED1() (PORTC &= ~(1 << PC3)) // Leds |
#define clr_LED1() (PORTC |= (1 << PC3)) |
#define set_LED2() (PORTC &= ~(1 << PC2)) |
#define clr_LED2() (PORTC |= (1 << PC2)) |
#define set_LED3() (PORTB &= ~(1 << PB1)) |
#define clr_LED3() (PORTB |= (1 << PB1)) |
#define set_LED4() (PORTB &= ~(1 << PB0)) |
#define clr_LED4() (PORTB |= (1 << PB0)) |
#define clr_BEEP() (PORTC &= ~(1 << PC6)) //Summer |
#define set_BEEP() (PORTC |= (1 << PC6)) |
#define set_WI232CMD() (PORTC &= ~(1 << PC7)) |
#define clr_WI232CMD() (PORTC |= (1 << PC7)) |
#define KEY_PIN PINA |
#define KEY_ENTER PA7 |
#define KEY_ESC PA6 |
#define KEY_PLUS PA5 |
#define KEY_MINUS PA4 |
void set_D_LIGHT(void); /* Displaybeleuchtung ein*/ |
void clr_D_LIGHT(void); /* Displaybeleuchtung aus*/ |
void InitHWPorts(void); |
#endif /* HAL_HW1_2_H_ */ |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/HAL_HW1_3.c |
---|
0,0 → 1,137 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
// *Hardwareabhängige Definitionen und Prozeduren |
// * Hardware Leiterplatte V1.3 sebseb7 |
// * USB,LED |
#ifndef HAL_HW1_3_C_ |
#define HAL_HW1_3_C_ |
#include "cpu.h" |
#include <inttypes.h> |
#include <avr/io.h> |
#include <avr/interrupt.h> |
#include <avr/pgmspace.h> |
#include <avr/eeprom.h> |
#include <util/delay.h> |
#include "main.h" |
#if defined HWVERSION1_3W || defined HWVERSION1_3 |
#include "lcd.h" |
#include "usart.h" |
#include "uart1.h" |
#include "display.h" |
#include "timer.h" |
#include "eeprom.h" |
#include "Wi232.h" |
#include "twimaster.h" |
void InitHWPorts(void) /* Initialisierung der Hardware für die jeweilige Leiterplattenversion */ |
{ |
// enable pull ups for the 4 keys |
PORTA |= (1<<PORTA4)|(1<<PORTA5)|(1<<PORTA6)|(1<<PORTA7); |
DDRD |= (1<<DDD7)|(1<<DDD6); |
DDRC |= (1<<DDC2)|(1<<DDC3)|(1<<DDC6)|(1<<DDC5)|(1<<DDC7); /* Leds,Summer*/ |
DDRB = 0xFF; |
set_LED1(); |
BeepTime = 500; |
BeepMuster = 0x0080; |
set_D_LIGHT(); |
clr_WI232CMD(); |
_delay_ms(250); |
clr_LED1(); |
Display_on = 1; |
LCD_Init (0); |
USART_Init (UART_BAUD_SELECT(USART_BAUD,F_CPU)); |
uart1_init (UART_BAUD_SELECT(USART_BAUD,F_CPU)); /* USB*/ |
uart1_putc('R'); |
// I2C_Init(1); |
Timer0_Init (); |
Timer1_Init (); // pwm |
Timer2_Init (); // Displaybeleuchtung |
sei (); |
ReadParameter (); |
LCD_Init (1); |
OCR2A =LCD_Helligkeit*2.55; |
// InitWi232(); |
#ifdef HWVERSION1_3W |
if (WiIsSet==false) |
InitWi232(); /* wenn Wi232 nicht initialisiert ist, dann jetzt tun*/ |
else |
{ |
discoverWi232(); /* Wi232 suchen*/ |
_delay_ms(1000); |
} |
#endif |
} |
void set_D_LIGHT(void) /* Displaybeleuchtung ein*/ |
{ |
PORTD &= ~(1<<PORTD6); |
PORTC &= ~(1<<PORTC2); |
PORTD &= ~(1<<PORTD7); |
} |
void clr_D_LIGHT(void) /* Displaybeleuchtung aus*/ |
{ |
PORTD |= (1<<PORTD6); |
PORTD |= (1<<PORTD7); |
PORTC |= (1<<PORTC2); |
} |
#endif |
#endif /* HAL_HW1_3_C_ */ |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/HAL_HW1_3.h |
---|
0,0 → 1,108 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
// * Hardwareabhängige Definitionen und Prozeduren |
// * Hardware Leiterplatte V1.3 sebseb7 |
// * USB,LED |
/*Hardware 1.3.1 Portbelegung |
Servo PD4 Pin 13 |
Servo PD5 Pin 14 |
Bootlader LED PC3 Pin 22 LED an GND |
Summer PC6 Pin 25 Summer an GND |
Displaybeleuchtung PD6 Pin 15 LED an + |
Displaybeleuchtung PD7 Pin 16 LED an + |
Displaybeleuchtung PC2 Pin 21 LED an + |
Wi232 PC7 Pin 26 Wi232 CMD Pin |
*/ |
#ifndef HAL_HW1_3_H_ |
#define HAL_HW1_3_H_ |
#define set_cs() (PORTB |= (1 << PB4)) // Display |
#define clr_cs() (PORTB &= ~(1 << PB4)) |
#define set_reset() (PORTB |= (1 << PB2)) |
#define clr_reset() (PORTB &= ~(1 << PB2)) |
#define set_A0() (PORTB |= (1 << PB3)) // Data |
#define clr_A0() (PORTB &= ~(1 << PB3)) // Command |
#define set_scl() (PORTB |= (1 << PB7)) |
#define clr_scl() (PORTB &= ~(1 << PB7)) |
#define set_si() (PORTB |= (1 << PB5)) |
#define clr_si() (PORTB &= ~(1 << PB5)) |
#define clr_LED1() (PORTC &= ~(1 << PC3)) // Leds |
#define set_LED1() (PORTC |= (1 << PC3)) |
#define set_LED2() (PORTC &= ~(1 << PC2)) |
#define clr_LED2() (PORTC |= (1 << PC2)) |
#define set_LED3() (PORTB &= ~(1 << PB1)) |
#define clr_LED3() (PORTB |= (1 << PB1)) |
#define set_LED4() (PORTB &= ~(1 << PB0)) |
#define clr_LED4() (PORTB |= (1 << PB0)) |
#define clr_BEEP() (PORTC &= ~(1 << PC6)) //Summer |
#define set_BEEP() (PORTC |= (1 << PC6)) |
#define set_WI232CMD() (PORTC &= ~(1 << PC7)) |
#define clr_WI232CMD() (PORTC |= (1 << PC7)) |
#define KEY_PIN PINA |
#define KEY_ENTER PA7 |
#define KEY_ESC PA6 |
#define KEY_PLUS PA5 |
#define KEY_MINUS PA4 |
void set_D_LIGHT(void); /* Displaybeleuchtung ein*/ |
void clr_D_LIGHT(void); /* Displaybeleuchtung aus*/ |
void InitHWPorts(void); |
void Port_USB2FC(void); |
#endif /* HAL_HW1_3_H_ */ |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/HAL_HW3_9.c |
---|
0,0 → 1,221 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#ifndef HAL_HW3_9_C_ |
#define HAL_HW3_9_C_ |
#include "cpu.h" |
#include <inttypes.h> |
#include <avr/io.h> |
#include <avr/interrupt.h> |
#include <avr/pgmspace.h> |
#include <avr/eeprom.h> |
#include <util/delay.h> |
#include <stdbool.h> |
#include <stdlib.h> |
#include "main.h" |
#if defined HWVERSION3_9 |
#include "messages.h" |
#include "lcd.h" |
#include "usart.h" |
#include "uart1.h" |
#include "display.h" |
#include "timer.h" |
#include "eeprom.h" |
#include "Wi232.h" |
#include "twimaster.h" |
#include "uart1.h" |
#include "bluetooth.h" |
#include "error.h" |
#include "connect.h" |
#include "lipo.h" |
#include "setup.h" |
#include "osd.h" |
volatile uint8_t USBBT; |
volatile uint8_t U02SV2; |
//-------------------------------------------------------------- |
void InitHWPorts(void) // Initialisierung der Hardware für die jeweilige Leiterplattenversion |
{ |
//PORTA |= (1<<PORTA4)|(1<<PORTA5)|(1<<PORTA6)|(1<<PORTA7); // Enable Pull Up for the 4 keys // MartinR: so war es |
PORTA |= (1<<PORTA3)|(1<<PORTA4)|(1<<PORTA5)|(1<<PORTA6)|(1<<PORTA7); // Enable Pull Up for the 4 keys // MartinR: Port3: Taster von Joystick |
DDRA &= ~(1<<DDA4); // Eingang: A4 auf Low setzen (Power On) |
DDRB = 0xFF; // Alles Ausgänge |
PORTC |= (1<<PORTC4)|(1<<PORTC7); // Enable Pull Up for LBO + Summer |
DDRC |= (1<<DDC2)|(1<<DDC3)|(1<<DDC5)|(1<<DDC6)|(1<<DDC7); // Ausgang: Led2,Rs232Switch,Summer |
DDRC &= ~(1<<DDC4); // Eingang: LowBat LTC1308 |
_BTOn(); // Erstmal USB dektivieren, damit beim versehentlichen Einschalten USB im PC ruhig bleibt |
PORTD |= (1<<PORTD6); // Wi232-CMD auf High schalten |
DDRD |= (1<<DDD4)|(1<<DDD5)|(1<<DDD6)|(1<<DDD7); // Ausgang: PiepserTest, Servo, Wi232-CMD und Beleuchtung |
set_V_On(); // Spannung mit T3 halten |
Timer0_Init (); // system |
Timer1_Init (); // pwm |
Timer2_Init (); // display |
Display_on = 1; |
USART_Init (UART_BAUD_SELECT(USART_BAUD,F_CPU)); |
uart1_init (UART_BAUD_SELECT(USART_BAUD,F_CPU)); // USB |
I2C_Init(1); |
sei (); |
LCD_Init (0); // muss vor "ReadParameter" stehen |
ReadParameter (); // Aktuelle Werte aus EEProm auslesen |
if (DisplayLanguage > NUM_LANG) // Beim ersten Start Sprache abfragen |
{ DisplayLanguage = 1; |
DisplayLanguage = Edit_Language(DisplayLanguage,0,3,DISPLAY3); |
WriteParameter(); |
} |
OCR2A = LCD_Helligkeit * 2.55; |
LCD_Init (1); |
set_beep ( 200, 0x0080, BeepNormal); |
OSD_active = false; //keine OSD Ausgabe |
// MartinR: zu menue.c hin verschoben |
// ADC_Init(); // ADC für Lipomessung |
// Power On Delay |
// lcd_printp_at (2,2,PSTR("Taste 1 Sekunde"), 0); |
// lcd_printp_at (2,3,PSTR("lang festhalten."), 0); |
lcd_printpj_at (4, 1, PSTR("PKT 3.9"),0); |
lcd_printpj_at (4, 2, PSTR(PKTSWVersion),0); |
lcd_puts_at(0, 4, strGet(BOOT1), 0); |
lcd_puts_at(0, 5, strGet(BOOT2), 0); |
_delay_ms(800); |
if (PINA & (1<<PINA7)) // Spannung eingeschaltet lassen |
clr_V_On(); |
_delay_ms(100); |
set_beep ( 500, 0x0080, BeepNormal); |
get_key_press(KEY_ALL); |
lcd_cls(); |
if ((UseWi == true) && (WiIsSet == false)) |
{ |
InitWi232(PKT_Baudrate); // wenn Wi232 nicht initialisiert ist, dann jetzt tun |
} |
lcd_cls(); |
set_BTOff(); // BT ausschalten |
if ((UseBT == true) && (BTIsSet == false)) |
{ |
bt_init(); |
// set_USBOn(); |
} |
lcd_cls(); |
if ((UseWi == true) && (U02SV2 == 0)) |
{ |
Change_Output(Uart02Wi); // Verbindung zu Wi232 herstellen |
if (PKT_StartInfo == true) |
{ |
// lcd_printp_at (0, 0, PSTR("Verbindung zum MK ist"), 0); |
// lcd_printp_at (0, 1, PSTR("auf Wi232 eingestellt"), 0); |
lcd_puts_at(0, 0, strGet(BOOT_WI1), 0); |
lcd_puts_at(0, 1, strGet(BOOT_WI2), 0); |
_delay_ms(2000); |
} |
} |
else |
{ |
Change_Output(Uart02FC); // Verbindung zu SV" (Kabel) herstellen |
if (PKT_StartInfo == true) |
{ |
// lcd_printp_at (0, 0, PSTR("Verbindung zum MK ist"), 0); |
// lcd_printp_at (0, 1, PSTR("auf Kabel eingestellt"), 0); |
lcd_puts_at(0, 0, strGet(BOOT_WI1), 0); |
lcd_puts_at(0, 1, strGet(BOOT_SV), 0); |
_delay_ms(2000); |
} |
} |
lcd_cls(); |
} |
void set_D_LIGHT(void) /* Displaybeleuchtung ein*/ |
{ |
// PWM einschalten |
TCCR2A |= (1 << WGM21) | (1 << WGM20) | (1 << COM2A1); |
TCCR2B |= (1 << CS20); |
} |
void clr_D_LIGHT(void) /* Displaybeleuchtung aus*/ |
{ |
// PWM ausschalten |
TCCR2A = 0; |
TCCR2B = 0; |
} |
uint8_t BTIsOn=0; |
void set_BTOn(void) |
{ |
if (BTIsOn == 0) |
{ |
_BTOn(); |
BTIsOn = 1; |
_delay_ms(2000); |
} |
} |
void set_BTOff(void) |
{ |
set_USBOn(); |
BTIsOn = 0; |
} |
#endif |
#endif // HAL_HW3_9_C_ |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/HAL_HW3_9.h |
---|
0,0 → 1,142 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#ifndef HAL_HW3_9_H_ |
#define HAL_HW3_9_H_ |
//#define PIEPSER_NERVT // Summer zu Testzwecken ganz Ausschalten |
// Hardware 3.9 Portbelegung |
#define KEY_PIN PINA // Port A als Input |
// MartinR: von PA.. auf PINA.. geändert... |
#define Touch0 PINA0 // Pin 37 |
#define Touch1 PINA1 // Pin 36 |
#define Touch2 PINA2 // Pin 35 |
#define Touch3 PINA3 // Pin 34 |
#define Key1 PINA4 // Pin 33 // MartinR: von PA.. auf PINA.. geändert |
#define Key2 PINA5 // Pin 32 // MartinR: von PA.. auf PINA.. geändert |
#define Key3 PINA6 // Pin 31 // MartinR: von PA.. auf PINA.. geändert |
#define Key4 PINA7 // Pin 30 // MartinR: von PA.. auf PINA.. geändert |
#define USB2Wi PINB0 // Pin 40 aktiv low > IC5 |
#define VoltageHold PINB1 // Pin 41 High = Spannung T3 halten |
#define Display_Reset PINB2 // Pin 42 |
#define Display_A0 PINB3 // Pin 43 |
#define Display_CS PINB4 // Pin 44 |
#define Display_SI PINB5 // Pin 1 |
#define LED1 PINB6 // Pin 2 Low = LED1 (nicht benutzbar wegen SCL |
#define Display_SCL PINB7 // Pin 3 |
#define I2C_SCL PINC0 // Pin 19 SCL |
#define I2C_CDA PINC1 // Pin 20 SDA |
#define USB2FC PINC2 // Pin 21 aktiv low > IC5 |
#define USB_BT PINC3 // Pin 22 high = USB, Low = Bluetooth, LED2 |
#define LowBat PINC4 // Pin 23 Low Bat Warning Lipo PKT,Input |
#define Uart02Wi PINC5 // Pin 24 aktiv Low > IC4 |
#define Uart02FC PINC6 // Pin 25 aktiv Low > IC4 |
#define Summer PINC7 // Pin 26 Low = Summer |
#define Uart0RxD PIND0 // Pin 9 über IC4 =Wi | SV2 |
#define Uart0TxD PIND1 // Pin 10 über IC4 =Wi | SV2 |
#define Uart1RxD PIND2 // Pin 11 direkt = USB, BTM, über IC5 = Wi | SV2 |
#define Uart1TxD PIND3 // Pin 12 direkt = USB, BTM, über IC5 = Wi | SV2 |
#define PiepserTest PIND4 // Pin 13 CTC für Piepser |
#define Servo PIND5 // Pin 14 PWM für Servo |
#define Wi232_CMD PIND6 // Pin 15 aktiv Low = Wi232 CMD |
#define Displaybeleuchtung PIND7 // Pin 16 High = Display-LED |
#define KEY_ENTER Key1 |
#define KEY_ESC Key2 |
#define KEY_PLUS Key3 |
#define KEY_MINUS Key4 |
#define KEY_EXT PINA3 // MartinR |
// |= schaltet Ausgang auf HIGH |
// &= ~ schaltet Ausgang auf LOW |
#define set_reset() (PORTB |= (1 << Display_Reset)) |
#define clr_reset() (PORTB &= ~(1 << Display_Reset)) |
#define set_A0() (PORTB |= (1 << Display_A0)) |
#define clr_A0() (PORTB &= ~(1 << Display_A0)) |
#define set_cs() (PORTB |= (1 << Display_CS)) |
#define clr_cs() (PORTB &= ~(1 << Display_CS)) |
#define set_si() (PORTB |= (1 << Display_SI)) |
#define clr_si() (PORTB &= ~(1 << Display_SI)) |
#define set_scl() (PORTB |= (1 << Display_SCL)) |
#define clr_scl() (PORTB &= ~(1 << Display_SCL)) |
#define _BTOn() (PORTC &= ~(1 << USB_BT)) // Bluetooth ein |
#define set_USBOn() (PORTC |= (1 << USB_BT)) // USB ein |
#define clr_V_On() (PORTB &= ~(1 << VoltageHold)) // Spannung mit T3 halten |
#define set_V_On() (PORTB |= (1 << VoltageHold)) |
#define set_USB2FC() (PORTC &= ~(1 << USB2FC)) // USB mit FC-Kabel verbinden |
#define clr_USB2FC() (PORTC |= (1 << USB2FC)) |
#define set_USB2Wi() (PORTB &= ~(1 << USB2Wi)) // USB mit Wi232 verbinden |
#define clr_USB2Wi() (PORTB |= (1 << USB2Wi)) |
#define set_Uart02FC() (PORTC &= ~(1 << Uart02FC)) // Uart0 mit FC-Kabel verbinden |
#define clr_Uart02FC() (PORTC |= (1 << Uart02FC)) |
#define set_Uart02Wi() (PORTC &= ~(1 << Uart02Wi)) // Uart0 mit Wi232 verbinden |
#define clr_Uart02Wi() (PORTC |= (1 << Uart02Wi)) |
#define set_BEEP() (PORTC &= ~(1 << Summer)) // Summer |
#define clr_BEEP() (PORTC |= (1 << Summer)) |
#define set_WI232CMD() (PORTD &= ~(1 << Wi232_CMD)) // Wi232 Programmierpin |
#define clr_WI232CMD() (PORTD |= (1 << Wi232_CMD)) |
void set_D_LIGHT(void); /* Displaybeleuchtung ein*/ |
void clr_D_LIGHT(void); /* Displaybeleuchtung aus */ |
void InitHWPorts(void); |
void set_BTOn(void); /* Bluetooth einschalten*/ |
void set_BTOff(void); /* Bluetooth einschalten*/ |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/Hex/PKT_3.6.3a_MartinR_HW_3_9_de_25092012.hex |
---|
0,0 → 1,7051 |
:100000000C94442E0C946C2E0C946C2E0C946C2E30 |
:100010000C946C2E0C946C2E0C946C2E0C946C2EF8 |
:100020000C946C2E0C9404360C940F360C946C2E9D |
:100030000C946C2E0C946C2E0C946C2E0C946C2ED8 |
:100040000C94C6360C946C2E0C946C2E0C946C2E66 |
:100050000C944C3F0C946C2E0C946C2E0C946C2EC7 |
:100060000C94337B0C946C2E0C94C63A0C946C2E2E |
:100070000C94553E0C94983E0C946C2E0C946C2E63 |
:100080000C946C2E0C946C2E0C946C2E78507B502F |
:100090007E508150845098509B50A450A7503F50A0 |
:1000A0005A505D5060506350665069506C506F50AC |
:1000B000725075505150B050C9509783B583188411 |
:1000C0006A859485A385CB85DE85E885FE850E86C9 |
:1000D0003E86CC86F786C787DF873E884F8866884E |
:1000E0009288F48825893E8731898887DE8605A82D |
:1000F0004CCDB2D44EB93836A9020C50B99186888D |
:10010000083CA6AAAA2ABE000000803F2E002E00AE |
:100110003F002E00454550726F6D526576200045B8 |
:100120004550726F6D5265762000302E38386D0064 |
:1001300020202020202020202020202020202020BF |
:1001400020202020200028432920474E55204750BA |
:100150004C204C6963656E736520200020202020B0 |
:100160004E4F2057415252414E54592020202020BA |
:10017000200020202020202020202020202020209F |
:100180002020202020202000323030382054686F7A |
:100190006D6173204B6169736572202020003230DD |
:1001A00030392D32303130205065746572204D6108 |
:1001B000636B2000323031302053656261737469A3 |
:1001C000616E20426F65686D20003230313220430D |
:1001D00068722E204272616E64746E657220260011 |
:1001E0002020202020486172616C6420426F6E677D |
:1001F0006172747A20004A6F79737469636B20208E |
:1002000020202020202020004A6F79737469636BBE |
:10021000202020202020202020004A6F797374693C |
:10022000636B202020202020202020004A6F79733B |
:100230007469636B20202020202020202000504B58 |
:100240005420546F6F6C73202020202020201D002C |
:10025000504B5420546F6F6C73202020202020209E |
:100260001D00504B5420546F6F6C732020202020B1 |
:1002700020201D00504B5420546F6F6C73202020A1 |
:10028000202020201D004A6F79737469636B202041 |
:1002900020202020202020004A6F79737469636B2E |
:1002A000202020202020202020004A6F79737469AC |
:1002B000636B202020202020202020004A6F7973AB |
:1002C0007469636B202020202020202020004D4BCB |
:1002D00020446973706C6179202020202020200048 |
:1002E0004D4B20446973706C6179202020202020C0 |
:1002F00020004D4B20446973706C617920202020D0 |
:10030000202020004D4B20446973706C61792020BF |
:10031000202020202000506172616D65746572207C |
:100320002020202020201D00506172616D657465C1 |
:1003300072202020202020201D00506172616D65F8 |
:10034000746572202020202020201D0050617261E1 |
:100350006D65746572202020202020201D004465DA |
:1003600062756720446174612020202020202000D5 |
:10037000446562756720446174612020202020203C |
:10038000200044656275672044617461202020204C |
:10039000202020004465627567204461746120203C |
:1003A000202020202000504B5420546F6F6C73206D |
:1003B0002020202020201D00504B5420546F6F6CB3 |
:1003C00073202020202020201D00504B5420546FEB |
:1003D0006F6C73202020202020201D00504B5420C3 |
:1003E000546F6F6C73202020202020201D004A6F46 |
:1003F00079737469636B2020202020202020200046 |
:100400004A6F79737469636B20202020202020209C |
:1004100020004A6F79737469636B202020202020AC |
:10042000202020004A6F79737469636B202020209C |
:100430002020202020004F53442020202020202056 |
:1004400020202020202020004F5344202020202046 |
:10045000202020202020202020004F534420202036 |
:100460002020202020202020202020004F53442026 |
:100470002020202020202020202020202000334465 |
:10048000204C616765202020202020202020200093 |
:10049000334420616E67656C657320202020202026 |
:1004A00020003344206C6F636174696F6E202020DC |
:1004B000202020003344206C6F6361746965202024 |
:1004C00020202020200047505320496E666F2020B6 |
:1004D000202020202020200047505320496E666FA6 |
:1004E0002020202020202020200047505320496E2B |
:1004F000666F2020202020202020200047505320FD |
:10050000496E666F20202020202020202000466F8A |
:100510006C6C6F77204D652020202020202020004B |
:10052000466F6C6C6F77204D6520202020202020A6 |
:100530002000466F6C6C6F77204D652020202020B6 |
:1005400020202000466F6C6C6F77204D65202020A6 |
:100550002020202020004D4B20446973706C61796D |
:1005600020202020202020004D4B20446973706CF7 |
:10057000617920202020202020004D4B20446973E9 |
:10058000706C617920202020202020004D4B2044D9 |
:100590006973706C61792020202020202000506138 |
:1005A00072616D65746572202020202020201D005E |
:1005B000506172616D6574657220202020202020BA |
:1005C0001D00506172616D657465722020202020CD |
:1005D00020201D00506172616D65746572202020BD |
:1005E000202020201D0044656275672044617461ED |
:1005F000202020202020200044656275672044616F |
:10060000746120202020202020004465627567202E |
:100610004461746120202020202020004465627500 |
:100620006720446174612020202020202000504B4E |
:100630005420546F6F6C73202020202020201D0038 |
:10064000504B5420546F6F6C7320202020202020AA |
:100650001D00504B5420546F6F6C732020202020BD |
:1006600020201D00504B5420546F6F6C73202020AD |
:10067000202020201D0020001D00504B542D546FC1 |
:100680006F6C2046432000302E38386D0012001366 |
:1006900000504B542D546F6F6C2046432000302E79 |
:1006A00038386D0020504B542055706461746520BB |
:1006B00020202020202020202000537461727420EC |
:1006C000617672647564652E65786520202020004F |
:1006D0002D706D3132383470202D63617672313077 |
:1006E0003920202020002D50636F6D3F202D623176 |
:1006F0003135323030202020202020002D55666CEE |
:100700006173683A773A46494C452E6865783A6194 |
:100710002000204D6974206469657365722048610A |
:1007200072647761726500206E69636874206DF68B |
:10073000676C6963682100456E646500504B542006 |
:10074000546F6F6C2020562E202020202020202047 |
:100750002000332E362E3361002020202020202040 |
:1007600020202020202020202020202020200020A9 |
:10077000001300120013001200200020204C4950EA |
:100780004F202021215761726E756E672121202034 |
:10079000004D6F746F722054657374657220202051 |
:1007A0002020004D6F746F72205465737465722041 |
:1007B00020202020004D6F746F7220546573746583 |
:1007C000722020202020004D6F746F7220546573BA |
:1007D000746572202020202000536572766F2054AB |
:1007E0006573746572202020202000536572766F37 |
:1007F0002054657374657220202020200053657298 |
:10080000766F205465737465722020202020005379 |
:100810006572766F205465737465722020202020E5 |
:1008200000504320425420203E204B6F707465726C |
:10083000202000504320425420203E204B6F7074F3 |
:100840006572202000504320425420203E204B6FF0 |
:1008500070746572202000504320425420203E20B6 |
:100860004B6F707465722020005043205553422016 |
:100870003E204B6F7074657220200050432055530A |
:1008800042203E204B6F7074657220200050432040 |
:10089000555342203E204B6F7074657220200050EB |
:1008A0004320555342203E204B6F707465722020C8 |
:1008B00000504B5420536574757020202020202058 |
:1008C000201D00504B54205365747570202020204B |
:1008D0002020201D00504B5420536574757020203B |
:1008E00020202020201D00504B542053657475702B |
:1008F000202020202020201D00504B5420566572BF |
:1009000073696F6E20202020202000504B54205609 |
:10091000657273696F6E20202020202000504B5498 |
:100920002056657273696F6E2020202020200050B1 |
:100930004B542056657273696F6E20202020202052 |
:100940000020504B542D546F6F6C732020202020BA |
:100950002020202020200012001300504320425469 |
:1009600020203E204B6F7074657200504320555319 |
:1009700042203E204B6F70746572001D00200020E5 |
:10098000001D00456E646500566F6C7400537563FE |
:10099000686520424C2D4374726C00466F756E641E |
:1009A00020424C2D4374726C3A0056657273696F25 |
:1009B0006E3A00536574506F693A00536574506F16 |
:1009C000694C3A005374617465203A005265616461 |
:1009D0004D6F643A00437572726E743A004D6178DF |
:1009E00050574D203A0054656D7020203A00456EF6 |
:1009F000646520436865636B0020424C2D4374722C |
:100A00006C20546573742020202020202020004D6D |
:100A10006F746F723A202020310056616C75653A10 |
:100A200020202030001A201B001D00416C6C00416A |
:100A30006C6C001D00200020001D00536574506F79 |
:100A4000696E742020203A0043757272656E7420BE |
:100A50002020203A0054656D70657261747572656E |
:100A60003A0056657273696F6E3A0053746174652B |
:100A7000203A00504B5420332E3900332E362E337B |
:100A80006100576932333220496E69744572726F62 |
:100A90007220200057692E323332204E414B0073B2 |
:100AA00065617263682057692E323332204D6F645E |
:100AB000756C0020776974682032343030204261D0 |
:100AC0007564200020776974682039363030204200 |
:100AD00061756420002077697468203139323030C4 |
:100AE00020426175642000207769746820333834AF |
:100AF0003030204261756400207769746820353792 |
:100B00003630302042617564002077697468203186 |
:100B100031353230302042617564006E6F20576984 |
:100B20002E32333220666F756E640057692E323371 |
:100B3000322053797461786572726F7220202000C0 |
:100B400057692E32333220666F756E642000576904 |
:100B50002E3233322077726F6E6720426175647275 |
:100B6000617465004572726F7220736574204E5611 |
:100B70002D52414D004E562D52414D206973207328 |
:100B8000657420746F2000676976656E2042617518 |
:100B90006472617465004572726F722073657420AF |
:100BA00052414D20202020200052414D20697320C9 |
:100BB00073657420746F2000676976656E204261EA |
:100BC0007564726174650056657273696F6E3A0080 |
:100BD000496E697420576932333220776169742E07 |
:100BE0002E2E2E002E002E002E002E002E002E0067 |
:100BF0002E002E002E002E002E002E002E002E0085 |
:100C00002E002E002E002E002E0057693233322087 |
:100C1000496E69744572726F7220200057693233D1 |
:100C20003220496E6974206F6B2E2E2E2E0057696C |
:100C30002E323332204B6F6E66696775726174694C |
:100C40006F6E20005043206D69742055534220760A |
:100C5000657262696E64656E0057692E32333200C8 |
:100C600050726F6772616D6D207374617274656E1E |
:100C700000457869740057692E32333220746F2032 |
:100C8000464320005043206D69742055534220761E |
:100C9000657262696E64656E00756E64204D696B85 |
:100CA000726F6B6F70746572746F6F6C00737461C8 |
:100CB0007274656E0045786974002E004154503D91 |
:100CC0000041545A300041544C2A0041544C3100E8 |
:100CD00041544C320041544C330041544C34004197 |
:100CE000544C350041545131004154453000415479 |
:100CF00051300041544531004154004154410041BC |
:100D000054480041544430004154443D004154464D |
:100D10003F0041544F310041545230004154523150 |
:100D20000041544E3D0041545331000D004F4B0DD6 |
:100D30000A004552524F520D0A000D0A0044495311 |
:100D4000434F4E4E45435400434F4E4E454354008F |
:100D500054696D65206F75742C4661696C20746FE1 |
:100D600020636F6E6E6563742100425420696E6962 |
:100D70007469616C6973696572656E2E2E002E0050 |
:100D8000496E717569727920526573756C74733A26 |
:100D90000D0A000D0A00496E717569727920456E61 |
:100DA000640042544D2D323232204B6F6E666967BB |
:100DB0007572696572656E004643203E204D4B2D6D |
:100DC000555342203E2042544D2D323232004D4B7D |
:100DD0002D55534220616E20504320616E7363682D |
:100DE0006C2E20005A7769736368656E204D4B2D19 |
:100DF00055534220756E64202000504B5420656985 |
:100E00006E2067656B7265757A74657320202000AB |
:100E10004B6162656C20616E7363686C69657373A6 |
:100E2000656E2E202000526164696F74726F6E6966 |
:100E3000782057692E323332445453004576616C22 |
:100E4000756174696F6E20283836384D487A2920CC |
:100E5000200052656164696E6700416E616C6F6766 |
:100E6000204E616D65733A20004552524F523A2030 |
:100E70006E6F2064617461004643004E43004E4330 |
:100E8000004643003F004552524F523A206E6F20B9 |
:100E90006461746100204E6176692D4374726C2028 |
:100EA000446973706C61792020200046430020441F |
:100EB0006973706C61792020202020202020202060 |
:100EC0002020200020200020466C696768742D4394 |
:100ED00074726C20446973706C617920004E430019 |
:100EE000204E6176692D4374726C20446973706C76 |
:100EF00061792020200046430020446973706C61B2 |
:100F000079202020202020202020202020200020A8 |
:100F1000200020466C696768742D4374726C20440D |
:100F20006973706C617920004E4300204E617669D0 |
:100F30002D4374726C20446973706C617920202099 |
:100F4000004643004665686C65723A204B65696EE1 |
:100F50006520446174656E0020454550524F4D2018 |
:100F6000506172616D657465722020202000776584 |
:100F70007264656E20617566005374616E6461729F |
:100F80006477657274652067657365747A74003080 |
:100F900030303000504B5420436562726120002194 |
:100FA00021436865636B20506172616D6574657281 |
:100FB000212120004F4B002E002E000D0A000000C2 |
:100FC000000000007815141578002055545578005D |
:100FD0003845444538003049484930003C4140419B |
:100FE0003C003841402178007E1515150A00221773 |
:100FF0000F172200008482FF82840000000000009E |
:1010000000000000000010385410101E0000000006 |
:1010100000001010101010101010107C10100000A4 |
:101020000000000008140000140810080404081050 |
:10103000081020201008000814224100004122144A |
:10104000080004027F02040010207F2010001038E6 |
:101050005410101010101054381010181C1C1810B8 |
:1010600008183838180800081C3E7F00007F3E1C16 |
:10107000080006090909060006497D490600000026 |
:101080000000000000002F00000000070007000023 |
:10109000147F147F1400242A6B2A1200231308647F |
:1010A0006200364955225000000503000000001C74 |
:1010B000224100000041221C000014083E081400D8 |
:1010C00008083E0808000050300000000808080822 |
:1010D00008000060600000002010080402003E517B |
:1010E00049453E0000427F400000426151494600B0 |
:1010F0002141454B31001814127F1000274545450A |
:1011000039003C4A4949300003017109070036495A |
:1011100049493600064949291E00003636000000BC |
:101120000056360000000814224100001414141464 |
:10113000140000412214080002015109060032493E |
:1011400079413E007E1111117E007F4949493600E8 |
:101150003E41414122007F4141221C007F494949D3 |
:1011600041007F09090901003E4149497A007F0891 |
:1011700008087F0000417F4100002040413F0100FE |
:101180007F08142241007F40404040007F020C0253 |
:101190007F007F0408107F003E4141413E007F09EF |
:1011A000090906003E4151215E007F0919294600C8 |
:1011B00046494949310001017F0101003F4040405B |
:1011C0003F001F2040201F003F4038403F00631475 |
:1011D000081463000708700807006151494543007F |
:1011E0007F41410000000204081020000041417FBF |
:1011F00000000402010204004040404040000001A1 |
:10120000020400002054545478007F4844443800BD |
:10121000384444442000384444487F0038545454EF |
:101220001800087E090102000C5252523E007F084D |
:101230000404780000447D4000002040443D00004C |
:101240007F102844000000417F4000007C04180407 |
:1012500078007C08040478003844444438007C1446 |
:1012600014140800081414187C007C0804040800F6 |
:10127000485454542000043F444020003C40402047 |
:101280007C001C2040201C003C4038403C0044288E |
:10129000102844000C5050503C004464544C44000E |
:1012A00000083641000000007F00000000413608C1 |
:1012B000000008082A1C0800081C2A0808004669C3 |
:1012C000782054797065203A2000536174202020E2 |
:1012D0002020203A20004163637572616379203ACF |
:1012E000200050444F5020202020203A20005370EE |
:1012F000656564202020203A20004C6F6E67202016 |
:101300002020203A20004C61742020202020203A08 |
:101310002000416C742020202020203A20004F0023 |
:10132000580078002D0020003344003244006E6FD6 |
:1013300000440020006F6B00202000636D002E0031 |
:101340006B6D2F68002E002E006D004E7572206DA3 |
:101350006974204E4320210020203031323334354F |
:10136000363738394142434445460D0A00201A2099 |
:101370002020201B20202020204578697400A31302 |
:10138000A0139D139A139713941391138E134E2049 |
:10139000004E57005720005357005320005345007C |
:1013A0004520004E45000E0F0E4E0E0F0E4F0E0F35 |
:1013B0000E530E0F0E570E0F0E4E0E0F0E4F0E0F3A |
:1013C0000E530E0F0E570E0F0E4E0E0F0E4F0E0F2A |
:1013D0000E530E0F0E576B6D68006D4168002E00A6 |
:1013E0002E002E002E002E002E006D005300530004 |
:1013F000560056006D4168006D41680041006D0067 |
:101400004B6D6800486F6D65006D202D005A696551 |
:101410006C006D202D005750001F0020200050430D |
:1014200000205361740020536174006D2F73006DB0 |
:101430002F73006D2F730050504D2020202020204E |
:1014400020202020202020005370656B7472756D61 |
:101450002020202020202020005370656B7472759E |
:101460006D2048695265732020005370656B74725B |
:10147000756D204C6F5265732020004A6574692099 |
:101480002020202020202020202020004143542004 |
:1014900044534C20202020202020202000484F545E |
:1014A00054202020202020202020202020004675AD |
:1014B000747562612053425553202020202000552E |
:1014C0007365722020202020202020202020200052 |
:1014D0000000010C030101010000010C04040404DC |
:1014E0000000010C010303030000010C02020202D0 |
:1014F0000003011905050505000301190606060686 |
:101500000003011907070707000301190808080865 |
:101510000003011909090909000301190A0A0A0A45 |
:10152000000301190B0B0B0B000301190C0C0C0C25 |
:101530000000000C63000000000200086E000000C4 |
:10154000000200046D0000000006000627010101F2 |
:10155000010200010D000000010200200D01010147 |
:10156000010200080D010101010200100D00000040 |
:10157000010200046D000000010200400D010101A4 |
:10158000010200800D000000010200040D000000B7 |
:1015900002000014170A0806020000141810100AAE |
:1015A000020100FF19060604020100FF60000000AE |
:1015B000030200016B000000030200026B00000048 |
:1015C000030200046B000000030200086B0000002F |
:1015D000030100FF3B323232030000F73C5A5A5AF3 |
:1015E000030000F73D323232030000F7414E4E4E09 |
:1015F000030000F7424E4E4E040200010D000000B1 |
:10160000040200016D000000040200020D0101014E |
:10161000040200026D010101040100FF10FFFFFF41 |
:10162000040000F70E1E1E1E040100FF110F0F0F15 |
:10163000040100FF0F1E1E1E040100FF1300000026 |
:10164000040100FF67969696040000F7120F0F0F33 |
:10165000040000F714080808040100FF154040408A |
:10166000040000A016000000050100FF2D8080800E |
:10167000050000F72E323232050200016C00000036 |
:10168000050000F72F0F0F0F050000F730E6E6E624 |
:101690000500001969000000050100FF318080800D |
:1016A000050000F732555555050200026C00000098 |
:1016B000050000F733464646050000F734DCDCDC65 |
:1016C000050000196A000000050002083504040442 |
:1016D000050000F7363C3C3C050500F737000000EC |
:1016E000050100FF387D7D7D050100FF397D7D7D91 |
:1016F000050100FF3A7D7D7D060200200D010101FC |
:10170000060100FF50FEFEFE060100FF5164646406 |
:10171000060000F75A080808060000F759060606F2 |
:10172000060100FF525A5A5A060100FF535A5A5AEC |
:10173000060100FF545A5A5A060100FF554B4B4B05 |
:10174000060100FF56555555060100FF574B4B4B00 |
:10175000060100FF58000000060100FF5B5A5A5ABC |
:10176000060100FF5C2A2A2A060100FF5DF5F5F557 |
:10177000060100FF5E8C8C8C060000F75F050505F6 |
:10178000060200206D000000060200026E0000004C |
:10179000060000F765000000070400FF4A5F5F5F76 |
:1017A000070100FF4B141414070200206B00000017 |
:1017B000070200106B010101070400FF4CF3F3F373 |
:1017C000070100FF4D141414070200406B000000D5 |
:1017D000070200806B010101070400FF4EAAAAAABC |
:1017E000070400FF4FAAAAAA080000F71A08080871 |
:1017F000080000F71BE6E6E6080100FF1D40404038 |
:10180000080100FF62000000080200406D000000B7 |
:10181000080000F724212121080200086D000000C3 |
:10182000080000F7265A5A5A080000F7252D2D2DDA |
:10183000080000F7660000000800000C68000000C7 |
:10184000080200106D000000080200046E00000095 |
:10185000080200806D000000080200016E00000018 |
:10186000080200106E000000090100FF1E5A6464A7 |
:10187000090100FF1F787878090100FF200A0A0A91 |
:10188000090100FF215A6464090100FF2278787879 |
:10189000090100FF45464646090200800D00000090 |
:1018A000090000F71C1B1B1B090000F74320202028 |
:1018B000090100FF28101010090000F74400000083 |
:1018C0000900001023060606090000F76400000066 |
:1018D0000A0100FF290000000A0100FF2A000000A1 |
:1018E0000A0100FF2B0000000A0100FF2C0000008D |
:1018F0000A0100FF460000000A0100FF4700000047 |
:101900000A0100FF480000000A0100FF4900000032 |
:101910000B0200400D0000000B0100FF3E5A5A5A16 |
:101920000B0100FF3F3737370B0100FF40464646AB |
:101930000C050017610000000D0200010D00000001 |
:101940000D0100FF10FFFFFF0D0000A016000000BA |
:101950000D0200200D0101010D0100FF50FEFEFEF1 |
:101960000D0200206D0000000D0000F76500000072 |
:101970000D0100FF620000000D0200406D0000003C |
:101980000D00000C630000000D0500176100000051 |
:101990004761732020202020202020202020005478 |
:1019A00068726F74746C65202020202020004761CD |
:1019B0007A20202020202020202020200047617332 |
:1019C0002020202020202020202020004769657230 |
:1019D0002020202020202020202000476965722020 |
:1019E000202020202020202020004C6163657420CE |
:1019F0002020202020202020004769657220202000 |
:101A000020202020202020004E69636B20202020F1 |
:101A1000202020202020004E69636B2020202020E1 |
:101A200020202020200054616E67616765202020FF |
:101A300020202020004E69636B20202020202020C1 |
:101A400020202000526F6C6C20202020202020209D |
:101A5000202000526F6C6C2020202020202020208D |
:101A60002000526F756C69732020202020202020D8 |
:101A700000526F6C6C20202020202020202020008D |
:101A8000506F746920312020202020202020005019 |
:101A90006F74692031202020202020202000506FEA |
:101AA00074692031202020202020202000506F74D5 |
:101AB000692031202020202020202000506F7469D0 |
:101AC0002032202020202020202000506F74692008 |
:101AD00032202020202020202000506F74692032E6 |
:101AE000202020202020202000506F7469203220E8 |
:101AF0002020202020202000506F746920332020D7 |
:101B000020202020202000506F74692033202020C6 |
:101B1000202020202000506F7469203320202020B6 |
:101B20002020202000506F746920332020202020A6 |
:101B300020202000506F7469203420202020202095 |
:101B4000202000506F746920342020202020202085 |
:101B50002000506F74692034202020202020202075 |
:101B600000506F7469203420202020202020200085 |
:101B7000506F746920352020202020202020005024 |
:101B80006F74692035202020202020202000506FF5 |
:101B900074692035202020202020202000506F74E0 |
:101BA000692035202020202020202000506F7469DB |
:101BB0002036202020202020202000506F74692013 |
:101BC00036202020202020202000506F74692036ED |
:101BD000202020202020202000506F7469203620F3 |
:101BE0002020202020202000506F746920372020E2 |
:101BF00020202020202000506F74692037202020D2 |
:101C0000202020202000506F7469203720202020C1 |
:101C10002020202000506F746920372020202020B1 |
:101C200020202000506F74692038202020202020A0 |
:101C3000202000506F746920382020202020202090 |
:101C40002000506F74692038202020202020202080 |
:101C500000506F7469203820202020202020200090 |
:101C60004D6F746F7220536963682E536368004D23 |
:101C70006F742E5361666574792053772E004D6F13 |
:101C8000742E5361666574792053772E004D6F74FE |
:101C90002E7361662E736368616B2E004D6F746FD7 |
:101CA00072205377692E4D6F6465004D6F746F72AB |
:101CB000205377692E4D6F6465004D6F746F7220ED |
:101CC0005377692E4D6F6465004D6F746F722053AA |
:101CD00077692E4D6F6465004572772E20536967D2 |
:101CE0002E2050722E2000456E682E205369672EDC |
:101CF000436865636B0052656365702052656E666C |
:101D00006F72636500556974672E5369672E436867 |
:101D100065636B00456D7066E46E6765722054798B |
:101D2000702000526563656976657220547970652C |
:101D30002000547970652052656365707465757212 |
:101D4000004F6E7476616E672E20547970652000A6 |
:101D500048F668656E726567656C657220200043A1 |
:101D600074726C20416C74697475646520004374EE |
:101D7000726C20416C7469747564652000437472E0 |
:101D80006C20486F6F6774652020200047505320F7 |
:101D900020202020202020202020004750532020D9 |
:101DA00020202020202020202000475053202020C9 |
:101DB00020202020202020200047505320202020B9 |
:101DC00020202020202020004B6F6D706173732035 |
:101DD00020202020202000436F6D7061737320202D |
:101DE000202020202000436F6D7061732020202070 |
:101DF00020202020004B6F6D706173202020202058 |
:101E0000202020004B6F6D70466573742041757300 |
:101E1000722E00436F6D704F7269656E742E466945 |
:101E200078004D61696E7469656E20436170202091 |
:101E3000004B6F6D706173207661737420202000F9 |
:101E40004572772E205369672E2050722E20005342 |
:101E5000656E732E52637653696756616C004374E6 |
:101E6000726C2052656E205265636570004578740F |
:101E7000526563205369676E61616C0041636873EA |
:101E800028652E296B6F70706C2E00417869732065 |
:101E9000436F7570696E672020004465636F7570CD |
:101EA0006C61676520417865004173206B6F7070CD |
:101EB000656C696E672020004472656872617465A4 |
:101EC0006E626567722E00526F7452617465206C89 |
:101ED000696D69742E004C696D6974205669742EA1 |
:101EE00020526F7400526F7452617465206C696D7A |
:101EF00069742E0048656164696E6720486F6C6480 |
:101F00002020004E69636B2F526F6C6C20202020C4 |
:101F100020004F7269656E742E2046697865202016 |
:101F2000004B6F657273207661737420202020004F |
:101F30004E69636B2F526F6C6C2050202020004E36 |
:101F400069636B2F526F6C6C205020202000526F01 |
:101F5000756C2F54616E672050202020004E6963FD |
:101F60006B2F526F6C6C2050202020004E69636BE9 |
:101F70002F526F6C6C2044202020004E69636B2F21 |
:101F8000526F6C6C204420202000526F756C2F54CF |
:101F9000616E672044202020004E69636B2F526FD2 |
:101FA0006C6C20442020200047696572205020205E |
:101FB000202020202020004769657220502020200A |
:101FC0002020202020004C616365742050202020B8 |
:101FD00020202020004769657220502020202020EA |
:101FE0002020200045787465726E65204B6F6E74FA |
:101FF000722E0045787465726E204374726C2020D6 |
:1020000020004374726C2045787465726E652020E0 |
:102010000045787465726E20436F6E74726F6C0049 |
:102020004C6F6F70696E67206F62656E2020004C88 |
:102030006F6F70696E6720757020202020004C6FD4 |
:102040006F70696E67204176616E7420004C6F6F0F |
:1020500070696E67206F6D686F6F67004C6F6F708F |
:10206000696E6720756E74656E20004C6F6F7069C5 |
:102070006E6720646F776E2020004C6F6F70696E02 |
:102080006720417272696572004C6F6F70696E678C |
:102090002062656E65642E004C6F6F70696E6720FC |
:1020A0006C696E6B7320004C6F6F70696E67206C8B |
:1020B0006566742020004C6F6F70696E6720476101 |
:1020C00075636865004C6F6F70696E67206C696E30 |
:1020D0006B7320004C6F6F70696E67207265636868 |
:1020E0007473004C6F6F70696E67207269676874F3 |
:1020F00020004C6F6F70696E672044726F69746561 |
:10210000004C6F6F70696E6720726563687473004E |
:10211000476173204C696D69742020202020005491 |
:1021200068726F74746C65204C696D6974004C69D9 |
:102130006D6974652047617A202020200047617313 |
:10214000204C696D6965742020202000416E7370F9 |
:1021500072656368736368772E2000526573702E12 |
:10216000205468726573682E2000536575696C2071 |
:102170005265706F6E736520004472656D70656C9A |
:102180007761617264652000487973746572657364 |
:10219000652020202020004879737465726573697A |
:1021A0007320202020004879737465726573697309 |
:1021B00020202020004879737465726573652020A3 |
:1021C00020202000556D6B656872702E204E69636B |
:1021D0006B20005475726E6F766572204E69636B6A |
:1021E0002000496E7665727320526F756C6973209A |
:1021F000004E69636B206765696E766572742E00A8 |
:10220000556D6B656872702E20526F6C6C20005497 |
:1022100075726E6F76657220526F6C6C2000496E1D |
:10222000766572732054616E6761676500526F6CEA |
:102230006C206765696E766572742E0048F6686575 |
:102240006E726567656C756E672000416C746974A9 |
:10225000756465204374726C20004374726C204175 |
:102260006C7469747564652000486F6F67746520CD |
:10227000436F6E74726F6C004A3A484265672C4E29 |
:102280003A566172696F00593A4C696D482C4E3A62 |
:10229000566172696F00593A4C696D482C4E3A5636 |
:1022A0006172696F00593A4C696D482C4E3A56611B |
:1022B00072696F00536368616C74657220662E20CA |
:1022C000482E007573652053772E20662E53657453 |
:1022D0007000537769746820486175746575722061 |
:1022E00000536368616B2E20486F6F677465200030 |
:1022F000616B7573742E20566172696F20200061C6 |
:10230000636F757374696320566172696F005661FB |
:1023100072696F2041636F757374696300416B6FFD |
:102320006573742E20566172696F2000536F6C6C58 |
:1023300068F6686520202020202000536574706FA7 |
:10234000696E742020202020200048617574657516 |
:1023500072204D617820202000476577656E737488 |
:102360006520686F6F6774004D696E2E204761733A |
:10237000202020202020006D696E2E207468726F4E |
:1023800074746C65200047617A204D696E202020AE |
:1023900020202020004D696E696D61616C206761AD |
:1023A0007320200048F6686520502020202020203F |
:1023B000202000416C7469747564652050202020D1 |
:1023C0002000416C746974756465205020202020C1 |
:1023D00000486F6F67746520502020202020200067 |
:1023E0004C756674647275636B2044202020004233 |
:1023F00061726F6D657472696320442020005072B1 |
:10240000657373696F6E2044202020200042617242 |
:102410006F6D6574722E2044202020005A2D414398 |
:102420004320202020202020202000414343205A08 |
:1024300020202020202020202000414343205A201B |
:10244000202020202020202000414343205A20200B |
:1024500020202020202020004D61782E2048F66882 |
:10246000652020202020004D61782E20416C746969 |
:102470007475646520004D61782E20486967682076 |
:1024800020202020004D61782E20686F6F677465D2 |
:10249000202020005665727374E4726B756E672F8E |
:1024A0005220006761696E2F7261746520202020C0 |
:1024B00020004761696E2F4672657175656E6365B0 |
:1024C0000056657273742E2F72617465202020008F |
:1024D00053636877656265676173202B2F2D0068F1 |
:1024E0006F6F7665722076617269612E2000566189 |
:1024F0007220566F6C2053746174202000686F6FD7 |
:102500007665722076617269612E200047505320F3 |
:102510005A20202020202020202000475053205ADD |
:1025200020202020202020202000475053205A2007 |
:10253000202020202020202000475053205A2020F7 |
:102540002020202020202000537469636B204E65DA |
:102550007574722E205000737469636B206E6575FC |
:1025600074722E205000506F73204E657574726522 |
:10257000204D616E00737469636B206E65757472B3 |
:102580002E2050004E69636B20532E20416E7374D1 |
:102590002E20006E69636B207365727620637472FF |
:1025A0006C004173736572762054616E6761676574 |
:1025B000006E69636B2073657276206374726C00C1 |
:1025C0004E69636B204B6F6D70656E732E20006ECD |
:1025D00069636B20636F6D70656E732E2000436FAF |
:1025E0006D702054616E676167652020006E6963BD |
:1025F0006B20636F6D70656E732E20004E69636B88 |
:1026000020556D6B656872656E20006E69636B2086 |
:10261000696E762E206469722E00496E766572733B |
:10262000657220526F756C20006E69636B20696E55 |
:10263000762E726963682E004E69636B2053657253 |
:10264000766F206D696E006E69636B2073657276BC |
:102650006F206D696E00536572766F204D696E2034 |
:1026600020202020006E69636B20736572766F20D6 |
:102670006D696E004E69636B20536572766F206DD5 |
:102680006178006E69636B20736572766F206D618F |
:102690007800536572766F204D61782020202020CD |
:1026A000006E69636B20736572766F206D617800D0 |
:1026B0004E69636B20536572762046696C74004ED8 |
:1026C00069636B20536572762046696C74004E69AD |
:1026D000636B20536572762046696C74004E6963A3 |
:1026E0006B20536572762046696C7400526F6C6C77 |
:1026F00020532E20416E73742E2000726F6C6C205C |
:1027000073657276206374726C00417373657276C0 |
:1027100020526F756C69732000726F6C6C2073654A |
:102720007276206374726C00526F6C6C204B6F6D0C |
:1027300070656E732E2000726F6C6C20636F6D700D |
:10274000656E732E2000436F6D702054616E67615B |
:102750006765202000726F6C6C20636F6D70656E12 |
:10276000732E2000526F6C6C20556D6B656872651E |
:102770006E2000726F6C6C20696E762E2064697218 |
:102780002E00496E7665727365722054616E672003 |
:1027900000726F6C6C206F6D6B6572656E2020002F |
:1027A000526F6C6C20536572766F206D696E00728B |
:1027B0006F6C6C20736572766F206D696E00536567 |
:1027C00072766F204D696E202020202000726F6C81 |
:1027D0006C20736572766F206D696E00526F6C6C41 |
:1027E00020536572766F206D617800726F6C6C207B |
:1027F000736572766F206D617800536572766F2015 |
:102800004D6178202020202000726F6C6C20736551 |
:1028100072766F206D617800526F6C6C2053657218 |
:10282000762046696C7400526F6C6C20536572762A |
:102830002046696C7400526F6C6C20536572762070 |
:1028400046696C7400526F6C6C205365727620463A |
:10285000696C7400416E73742E20476573636877EA |
:102860002E2000736572766F2072656672657368DC |
:102870002000546175782052656672657368202067 |
:1028800000536572766F207265667265736820000A |
:102890004D616E75656C6C65204765736368006D8E |
:1028A000616E75656C6C20537065656420005669B7 |
:1028B0007465737365204D616E2E202000536E6524 |
:1028C0006C682E68616E646265642E0043616D20E1 |
:1028D0005269636874756E6720200043616D204FF4 |
:1028E0007269656E74202020200043616D204F7254 |
:1028F00069656E74202020200043616D657261203F |
:1029000072696368742E2000536572766F203320DD |
:1029100020202020202000536572766F2033202055 |
:10292000202020202000536572766F203320202045 |
:102930002020202000536572766F20332020202035 |
:1029400020202000536572766F2034202020202024 |
:10295000202000536572766F203420202020202014 |
:102960002000536572766F20342020202020202004 |
:1029700000536572766F2034202020202020200014 |
:10298000536572766F2035202020202020200053B0 |
:102990006572766F2035202020202020200053658E |
:1029A00072766F2035202020202020200053657271 |
:1029B000766F2035202020202020200047505320F3 |
:1029C0002020202020202020202000656E61626CC5 |
:1029D00065204750532020202000416374697665AC |
:1029E000722047505320202000656E61626C652084 |
:1029F0004750532020202000475053204D6F6475CE |
:102A0000732053742E2000475053206D6F6465204F |
:102A1000636F6E747200446566204D6F6465204775 |
:102A20005053202000475053206D6F646520636F22 |
:102A30006E747200475053205665727374E4726B63 |
:102A40002E2000475053204761696E20202020200F |
:102A500020004761696E204750532020202020200D |
:102A60000047505320766572737465726B2E200098 |
:102A70004750532053742E20536368772E2000470D |
:102A8000505320737469636B2074687265005365DA |
:102A900075696C204D616E63686520200047505356 |
:102AA0002073742E206472656D702E004D696E2E39 |
:102AB000205361742E2020202020004D696E2E208E |
:102AC0005361742E2020202020004E627265204D1C |
:102AD000696E2E205361742E004D696E2E20536155 |
:102AE000742E2020202020004750532D50202020DD |
:102AF000202020202020004750532D50202020202F |
:102B00002020202020004750532D5020202020201E |
:102B100020202020004750532D502020202020200E |
:102B2000202020004750532D492020202020202005 |
:102B30002020004750532D492020202020202020F5 |
:102B400020004750532D49202020202020202020E5 |
:102B5000004750532D4920202020202020202000F5 |
:102B60004750532D442020202020202020200047A3 |
:102B700050532D442020202020202020200047508A |
:102B8000532D442020202020202020200047505377 |
:102B90002D442020202020202020200050204C697F |
:102BA0006D697420202020202020004C696D6974FC |
:102BB000202050202020202020004C696D69746561 |
:102BC0002050202020202020004C696D6965742051 |
:102BD000205020202020200049204C696D6974205D |
:102BE000202020202020004C696D6974202049207D |
:102BF0002020202020004C696D6974652049202028 |
:102C000020202020004C696D696574202049202017 |
:102C10002020200044204C696D6974202020202051 |
:102C20002020004C696D6974202044202020202041 |
:102C300020004C696D6974652044202020202020EC |
:102C4000004C696D696574202044202020202000FC |
:102C5000475053204163632020202020202000473C |
:102C60005053204163632020202020202000416316 |
:102C700063656C204750532020202020004750538C |
:102C80002041636320202020202020004750532033 |
:102C900057696E646B6F72722E2000475053205735 |
:102CA000696E6420436F72722E00436F72726563A7 |
:102CB000742056656E742020004750532057696E6B |
:102CC0006420436F72722E004272656D7377697271 |
:102CD0006B756E67202000537065656420636F6DAF |
:102CE00070656E732E00436F6D70656E732056694C |
:102CF000742020200052656D7765726B696E6720C5 |
:102D000020202000475053206D61782E20526164AE |
:102D10002E2000475053206D61782E7261646975D2 |
:102D200073005261796F6E20475053204D617820B7 |
:102D300000475053206D61782E726164697573008D |
:102D40004750532057696E6B656C204C692E0047C5 |
:102D5000505320616E676C2E6C696D6974004C690C |
:102D60006D697420416E676C204750530047505383 |
:102D700020686F656B206C696D2E20005048204CD8 |
:102D80006F67696E2074696D6520005048206C6F14 |
:102D900067696E2074696D652000547073204D65FD |
:102DA0006D6F726973202020005048206C6F676936 |
:102DB0006E2074696A64200044796E616D696320D5 |
:102DC0005048202020200044796E616D69632050B6 |
:102DD00048202020200044796E616D6963205048AE |
:102DE000202020200044796E616D6973636865203E |
:102DF00050482000475053206D2E205261642064BB |
:102E0000504800475053206D2E205261642064507A |
:102E10004800475053206D2E205261642064504872 |
:102E200000475053206D2E205261642064504800AA |
:102E300043482048F66865202020202020200043B9 |
:102E40004820416C746974756465202020004348F3 |
:102E500020416C746974756465202020004348200B |
:102E6000486F6F6774652020202020004C45443156 |
:102E7000204269746D61736B6520004F7574312059 |
:102E80004269746D61736B2020004269746D6173D7 |
:102E90006B20533120202020005569746731204277 |
:102EA0006974706174722E00202020202054696D96 |
:102EB000696E67202020004F7574312054696D6958 |
:102EC0006E6720202000486F726C6F676520533159 |
:102ED000202020200055697467312054696D696E87 |
:102EE000672020002020202020736F666F727420DE |
:102EF000616E00416374697620202020202020200C |
:102F0000200041637469662020202020202020209A |
:102F1000004469726563742061616E202020200086 |
:102F200020202020206E2E6D2E4D6F746F72004178 |
:102F300063742E2077692E204D6F746F7200416389 |
:102F4000746966204175205265706F7300416B741F |
:102F50002E206D6F746F7220756974004C45443279 |
:102F6000204269746D61736B6520004F7574322067 |
:102F70004269746D61736B2020004269746D6173E6 |
:102F80006B20533220202020005569746732204284 |
:102F90006974706174722E00202020202054696DA5 |
:102FA000696E67202020004F7574322054696D6966 |
:102FB0006E6720202000486F726C6F676520533267 |
:102FC000202020200055697467322054696D696E95 |
:102FD000672020002020202020736F666F727420ED |
:102FE000616E00416374697620202020202020201B |
:102FF00020004163746966202020202020202020AA |
:10300000004469726563742061616E202020200095 |
:1030100020202020206E2E6D2E4D6F746F72004187 |
:1030200063742E2077692E204D6F746F7200416398 |
:10303000746966204175205265706F7300416B742E |
:103040002E206D6F746F7220756974004F75743126 |
:1030500020566D696E2E5761726E004F7574312067 |
:10306000756E646572766F6C7400416C20556E6489 |
:103070006572766F6C746167005569746731206F93 |
:103080006E64657273702E004F75743220566D69D0 |
:103090006E2E5761726E004F75743220756E6465C6 |
:1030A00072766F6C7400416C20556E646572766F39 |
:1030B0006C746167005569746732206F6E64657265 |
:1030C00073702E004D696E2E2047617320202020E2 |
:1030D0002020006D696E2E207468726F74746C65A8 |
:1030E000200047617A204D696E2E2020202020206C |
:1030F000006D696E696D61616C20676173202000ED |
:103100004D61782E20476173202020202020006D03 |
:1031100061782E207468726F74746C65200047614A |
:103120007A204D61782E202020202020006D6178AB |
:10313000696D61616C206761732020004B6F6D7059 |
:103140006173737769726B756E6700636F6D706121 |
:1031500073732065666665637400456666657420F2 |
:10316000636F6D7061732020004B6F6D7061732011 |
:1031700065666665637420004361726566726565A5 |
:103180002053742E202000436172656672656520AD |
:103190004374726C200043617265667265652043FA |
:1031A00074726C20004361726566726565204374B9 |
:1031B000726C2000546561636861626C65204361D4 |
:1031C000726500546561636861626C652043617279 |
:1031D0006500546561636861626C65204361726576 |
:1031E00000546561636861626C65204361726500CB |
:1031F000556E7465727370616E6E756E67200075C2 |
:103200006E646572766F6C74616765202000536F21 |
:1032100075732054656E73696F6E2020004F6E6465 |
:1032200065727370616E6E696E672000566F6C74A4 |
:10323000205265666572656E7A2000566F6C742048 |
:103240005265666572656E7A200054656E73696FAB |
:103250006E20526566202020005265662E20737015 |
:10326000616E6E696E6720004E6F74204761732037 |
:103270005A656974202000456D6572672E54687226 |
:103280002E54696D65004475726565207365636FC2 |
:1032900075727320004E6F6F6420676173207469CC |
:1032A0006A6420004E6F7420476173202020202024 |
:1032B000202000456D6572672E5468726F74746CBF |
:1032C000650047617A206465207365636F7572736A |
:1032D000004E6F6F64206761732020202020200043 |
:1032E0004661696C732E2043482054696D65004621 |
:1032F00061696C732E2043482054696D65004661F6 |
:10330000696C732E2043482054696D6500466169DD |
:103310006C732E2043482054696A64004661696CCE |
:10332000732E204368616E6E656C004661696C7334 |
:103330002E204368616E6E656C004661696C732E69 |
:10334000204368616E6E656C004661696C732E2067 |
:103350004368616E6E656C006B2E53756D6D6572A2 |
:10336000206F2053656E006E20626565702061637A |
:103370007420545820006E2062656570206163746B |
:1033800020545820006E20626565702061637420AF |
:1033900054582000566172696F206661696C204143 |
:1033A0006C7400566172696F206661696C20416CB3 |
:1033B0007400566172696F206661696C20416C749B |
:1033C00000566172696F206661696C20416C7400FF |
:1033D000436F6D70617373204572726F722000438A |
:1033E0006F6D70617373204572726F722000436F4E |
:1033F0006D70617373204572726F7220004B6F6D38 |
:10340000706173204572726F722020006B2E5374AE |
:10341000617274206F2E53442D4B006E2073742EF6 |
:10342000207774686F20534420006E2073742E2020 |
:103430007774686F20534420006E2073742E2077B9 |
:1034400074686F20534420006B2E53746172742093 |
:103450006F2E47505320006E2073742E20777468AF |
:103460006F20475053006E2073742E207774686F5E |
:1034700020475044006E2073742E207774686F20AC |
:10348000475053004779726F205020202020202081 |
:103490002020004779726F205020202020202020FB |
:1034A00020004779726F20502020202020202020EB |
:1034B000004779726F2050202020202020202000FB |
:1034C0004779726F204920202020202020200047AB |
:1034D00079726F2049202020202020202000477969 |
:1034E000726F204920202020202020200047797260 |
:1034F0006F20492020202020202020004779726F53 |
:1035000020442020202020202020004779726F2096 |
:10351000442020202020202020004779726F204462 |
:103520002020202020202020004779726F20442076 |
:103530002020202020202000476965722050202074 |
:10354000202020202020004C616365742050202022 |
:103550002020202020004C61636574205020202012 |
:103560002020202000476965722050202020202044 |
:10357000202020004769657220492020202020203B |
:103580002020004C616365742049202020202020E9 |
:1035900020004C61636574204920202020202020D9 |
:1035A000004769657220492020202020202020002B |
:1035B00044796E616D69736368652053742E00648D |
:1035C000796E616D69632073746162692E00537452 |
:1035D00061622044796E616D697175650044796E30 |
:1035E000616D69732E20737461622E004472656888 |
:1035F000726174656E6265672E2000526F7452614D |
:103600007465206C696D69742E004C696D69742055 |
:1036100044697420526F746100546F6572656E74F2 |
:10362000616C206C696D2E004143432F4779726FA6 |
:103630002046616B2E20004143432F4779726F2053 |
:103640004661637420004143432F4779726F2046DF |
:1036500061637420004143432F4779726F204661B4 |
:10366000637420004143432F4779726F204B6F6D85 |
:10367000702E00436F6D70204143432F4779726F66 |
:103680002000436F6D70204143432F4779726F20B4 |
:1036900000436F6D70204143432F4779726F2000C4 |
:1036A00048617570747265676C6572204920004DC1 |
:1036B00061696E20492020202020202020005265B2 |
:1036C00067756C205072696E6320492000486F6FE7 |
:1036D0006664726567656C2E2049200044726966D5 |
:1036E0006B6F6D70656E7361742E006472696674C1 |
:1036F00020436F6D70656E732E00436F6D70656E45 |
:103700007320446572697620004472696674206390 |
:103710006F6D70656E732E004779726F20737461E0 |
:10372000622E20202020004779726F20737461621E |
:10373000696C697479004779726F205374616269AA |
:103740006C697479004779726F2073746162696C77 |
:1037500069742E004D6F746F7220736D6F6F746893 |
:103760002020004D6F746F7220736D6F6F7468202E |
:1037700020004D6F746F7220536D6F6F746820203E |
:10378000004D6F746F7220736D6F6F74682020002E |
:10379000506172616D657465722031202020005087 |
:1037A0006172616D65746572203120202000506166 |
:1037B00072616D6574657220312020200050617245 |
:1037C000616D657465722031202020005061726146 |
:1037D0006D65746572203220202000506172616D29 |
:1037E00065746572203220202000506172616D6521 |
:1037F000746572203220202000506172616D657402 |
:103800006572203220202000506172616D65746500 |
:1038100072203320202000506172616D65746572E2 |
:10382000203320202000506172616D657465722024 |
:103830003320202000506172616D65746572203301 |
:1038400020202000506172616D6574657220342003 |
:10385000202000506172616D6574657220342020F3 |
:103860002000506172616D657465722034202020E3 |
:1038700000506172616D65746572203420202000F3 |
:10388000506172616D657465722035202020005092 |
:103890006172616D65746572203520202000506171 |
:1038A00072616D6574657220352020200050617250 |
:1038B000616D657465722035202020005061726151 |
:1038C0006D65746572203620202000506172616D34 |
:1038D00065746572203620202000506172616D652C |
:1038E000746572203620202000506172616D65740D |
:1038F0006572203620202000506172616D6574650C |
:1039000072203720202000506172616D65746572ED |
:10391000203720202000506172616D65746572202F |
:103920003720202000506172616D65746572203708 |
:1039300020202000506172616D657465722038200E |
:10394000202000506172616D6574657220382020FE |
:103950002000506172616D657465722038202020EE |
:1039600000506172616D65746572203820202000FE |
:103970004163687328652E296B6F70706C2E002868 |
:10398000446529436F75706C204178657300284445 |
:103990006529436F75706C20417865730041732011 |
:1039A0006B6F7070656C696E672020004769657287 |
:1039B00020706F732E204B6F707000526574726FA1 |
:1039C0006163206C616365742000526574726F617D |
:1039D00063204C6163657420004769657220706FD5 |
:1039E000732E206B6F702E004E69636B2F526F6CBD |
:1039F0006C204B6F707000526574726F20726F751F |
:103A00006C2F74616E00526574726F20526F756C0A |
:103A10002F54616E004E69636B2F526F6C6C206B7C |
:103A20006F702E0047696572204B6F7272656B7400 |
:103A3000757200436F7272656374206C61636574A4 |
:103A40002000436F7272656374204C61636574205B |
:103A5000004769657220636F7272656374696500FF |
:103A60004F7269656E74696572756E672020004FCC |
:103A70007269656E74696572756E672020004F7299 |
:103A800069656E746174696F6E202020000000000B |
:103A900000000000000000000000000048F668651B |
:103AA0006E726567656C756E672000416C74697431 |
:103AB000756465204374726C20004374726C2041FD |
:103AC0006C7469747564652000486F6F6774652055 |
:103AD000436F6E74722E2000536F6C6C68F66865CD |
:103AE00020202020202000536574706F696E7420A0 |
:103AF00020202020200048617574657572204D617A |
:103B00007820202000476577656E73742E686F6F8C |
:103B100067746500537469636B204E657574722E0B |
:103B2000205000737469636B206E657574722E206B |
:103B30005000506F73204E6575747265204D616E34 |
:103B400000537469636B206E657574722E2050008B |
:103B500047505320202020202020202020200065B6 |
:103B60006E61626C65204750532020202000416325 |
:103B700074697665722047505320202000456E619D |
:103B8000626C65204750532020202000475053206E |
:103B90004D6F6475732053742E2000475053206D71 |
:103BA0006F646520636F6E747200446566206D6F8C |
:103BB000646520475053202000475053206D6F64A8 |
:103BC0006520636F6E74720044796E616D69632065 |
:103BD0005048202020200044796E616D6963205098 |
:103BE00048202020200044796E616D696320504890 |
:103BF000202020200044796E616D696320504820A8 |
:103C00002020200043482048F668652020202020FE |
:103C10002020004348204869676820202020202079 |
:103C20002000434820486967682020202020202069 |
:103C300000434820686F6F677465202020202000B3 |
:103C400043617265667265652053742E20200043BF |
:103C500061726566726565204374726C2000436111 |
:103C6000726566726565204374726C2000436172F0 |
:103C70006566726565204374726C200054656163EB |
:103C80006861626C652043617265005465616368B8 |
:103C900061626C65204361726500546561636861AF |
:103CA000626C65204361726500546561636861629E |
:103CB0006C652043617265004D6F746F72205369AB |
:103CC00063682E536368004D6F742E53616665748C |
:103CD000792053772E004D6F742E53616665747989 |
:103CE0002053772E004D6F742E7361662E736368B8 |
:103CF000616B2E004F7269656E74696572756E67CF |
:103D00002020004F7269656E746174696F6E2020A7 |
:103D100020004F7269656E74696572756E67202048 |
:103D2000004F7269656E74617469652020202000FF |
:103D30004B616EE46C652020202020202020004371 |
:103D400068616E6E656C2020202020202000436179 |
:103D50006E6175782020202020202020004B616E8D |
:103D600061616C2020202020202020004B6F6E6697 |
:103D7000696775726174696F6E20006D61696E208C |
:103D800020202020202020202000436F6E666967BD |
:103D9000202020202020202000436F6E6669677558 |
:103DA0007261746965202000537469636B20202060 |
:103DB00020202020202000737469636B20202020A5 |
:103DC0002020202020004D616E6368652020202087 |
:103DD0002020202000537469636B202020202020A5 |
:103DE000202020004C6F6F70696E672020202020FB |
:103DF0002020004C6F6F70696E67202020202020EB |
:103E000020004C6F6F70696E6720202020202020DA |
:103E1000004C6F6F70696E672020202020202000EA |
:103E200048F6686520202020202020202020004106 |
:103E30006C74697475646520202020202000416C1A |
:103E400074697475646520202020202000486F6FFD |
:103E50006774652020202020202020004B616D65A4 |
:103E6000726120202020202020200043616D657297 |
:103E70006120202020202020200043616D65726198 |
:103E800020202020202020200043616D65726120C9 |
:103E900020202020202020004E6176694374726C1F |
:103EA000202020202020004E6176694374726C200F |
:103EB0002020202020004E6176694374726C2020FF |
:103EC00020202020004E6176694374726C202020EF |
:103ED0002020200041757367E46E67652020202054 |
:103EE0002020004F757470757473202020202020CE |
:103EF0002000536F727469657320202020202020D9 |
:103F00000055697467616E67656E2020202020006F |
:103F1000566572736368696564656E6573200044F5 |
:103F200069766572732020202020202020004469BB |
:103F3000766572732020202020202020004469769E |
:103F4000657273656E202020202020004779726FF3 |
:103F500020202020202020202020004779726F2060 |
:103F6000202020202020202020004779726F202050 |
:103F70002020202020202020004779726F20202040 |
:103F8000202020202020200042656E75747A657202 |
:103F90002020202020200055736572202020202022 |
:103FA000202020202000506172616D65747265735D |
:103FB00020202020004765627275696B65722020A1 |
:103FC00020202000416368736B6F70706C756E67A2 |
:103FD000202000436F75706C20417865732020208D |
:103FE0002000436F75706C2041786573202020207D |
:103FF000004B6F7070656C696E67204173732000B1 |
:104000004D697865722D53657475702020200043CA |
:104010006F6E666967204D69782020202000436F0D |
:104020006E666967204D69782020202000436F6EFE |
:104030006669672E204D6978657220004561737945 |
:104040002053657475702020202000436F6E6669D0 |
:1040500067204561737920202000436F6E66696791 |
:10406000204561737920202000436F6E6669672EBA |
:1040700020656173792020001200130012002500D2 |
:10408000200020500020204A0020204E00530057DE |
:1040900050450050504D0053706500537048005318 |
:1040A000704C004A65740041435400486F540053FB |
:1040B000425500555352001300282020202D202067 |
:1040C00020292028643A20202029005374642E00DF |
:1040D00028302D3234372D50382928643A506F203B |
:1040E00029005374642E00506F202900506F002A5D |
:1040F000002A001D00200020001D0028312D533112 |
:10410000322F57292028643A202020290053746434 |
:104110002E00530057504500201920202020301138 |
:1041200049202020456E64652020204F4B0031003F |
:10413000300012002000120013005769726B6C6986 |
:104140006368204B6F70696572656E3F004B6F70DE |
:104150006965727420756E6420416B746976696557 |
:1041600072740020536572766F20546573746572A3 |
:1041700020202020202020200025006D5300194FF2 |
:1041800018004F534420416E7A6569676520566177 |
:10419000722E20004F53442073637265656E6D6FFD |
:1041A0006465202020004F53442073637265656E60 |
:1041B0006D6F6465202020004F5344207363726547 |
:1041C000656E6D6F6465202020004F5554312F328D |
:1041D00020466F726D617420202020004F555431AD |
:1041E0002F3220666F726D617420202020004F55A1 |
:1041F00054312F3220666F726D61742020202000B0 |
:104200004F5554312F3220666F726D61742020201B |
:1042100020004F5554312F3220506F6C61726974F9 |
:10422000E47420004F5554312F3220706F6C61724E |
:104230006974792020004F5554312F3220706F6CF3 |
:1042400061726974792020004F5554312F322070EB |
:104250006F6C61726974792020004E617669204428 |
:104260006174656E20616E20535632004E6176692E |
:10427000206461746120746F2053563220004E61B7 |
:104280007669206461746120746F20535632200077 |
:104290004E617669206461746120746F20535632D8 |
:1042A00020004D61782E2053696E6B726174652019 |
:1042B0006D2F73006D61782066616C6C737065653D |
:1042C00064206D2F73006D61782066616C6C737073 |
:1042D000656564206D2F73006D61782066616C6C7C |
:1042E0007370656564206D2F7300566172696F6D20 |
:1042F00065746572204265657020200056617269A0 |
:104300006F6D65746572206265657020200056616E |
:1043100072696F6D6574657220626565702020003A |
:10432000566172696F6D6574657220626565702093 |
:104330002000486F6D6520617573204D4B205369D7 |
:1043400063687400686F6D652066726F6D204D4BF9 |
:10435000207669657700686F6D652066726F6D20E5 |
:104360004D4B207669657700686F6D652066726FCA |
:104370006D204D4B2076696577004D4B204C6F7753 |
:10438000426174205761726E756E67004D4B204C10 |
:104390006F77426174207761726E696E67004D4B72 |
:1043A000204C6F7742617420417474656E742000F4 |
:1043B0004D4B204C6F42617420616C61726D202006 |
:1043C00020004D4B206D4168202020205761726EE7 |
:1043D000756E67004D4B206D4168207761726E6984 |
:1043E0006E67202020004D4B206D41682041747481 |
:1043F000656E7420202020004D4B206D41682061A7 |
:104400006C61726D2020202020004D4B20566F6C77 |
:10441000742020202042616C6B656E004D4B20762D |
:104420006F6C7420626172677261706820004D4B1E |
:1044300020766F6C74206261726772617068200010 |
:104440004D4B20766F6C7420626172677261706888 |
:104450002000466F6C6C6F774D6520526566726503 |
:1044600073680000466F6C6C6F774D65205265660F |
:10447000726573680000466F6C6C6F774D652052F3 |
:104480006566726573680000466F6C6C6F774D658A |
:1044900020526566726573680000466F6C6C6F77BA |
:1044A0004D6520537065656420200000466F6C6C7C |
:1044B0006F774D6520537065656420200000466F5E |
:1044C0006C6C6F774D65205370656564202000002B |
:1044D000466F6C6C6F774D65205370656564202066 |
:1044E0000000546F6C6572616E7A20526164697568 |
:1044F00073200000546F6C6572616E6365205261B9 |
:10450000646975730000546F6C6572616E63652039 |
:104510005261646975730000546F6C6572616E63FB |
:10452000652052616469757300000000000000009E |
:10453000000000000000000000000000000000007B |
:10454000000000000000000000000000000000006B |
:10455000000000000000000000000000000000005B |
:10456000000000000000000000000000000000004B |
:10457000000000000000000000000000000000003B |
:10458000000000000000000000000000000000002B |
:10459000000000000000000000000000000000001B |
:1045A000000000000000000000000000000000000B |
:1045B00000000000000000000000000000000000FB |
:1045C00000000000000000000000000000000000EB |
:1045D00000000000000000000000000000000000DB |
:1045E00000000000000000000000000000000000CB |
:1045F00000000000000000000000000000000000BB |
:10460000000077E4686C6520475053204D61757356 |
:104610002020200073656C65637420475053206D23 |
:104620006F757365200073656C6563742047505324 |
:10463000206D6F757365200073656C65637420472A |
:104640005053206D6F757365200053756368652046 |
:10465000475053204D6175732020200073656172AF |
:10466000636820475053206D6F7573652000736534 |
:104670006172636820475053206D6F757365200029 |
:1046800073656172636820475053206D6F75736561 |
:104690002000475053204D617573205479702020BD |
:1046A00020202000475053206D6F7573652074796A |
:1046B000702020202000475053206D6F75736520B7 |
:1046C0007479702020202000475053206D6F75733F |
:1046D00065207479702020202000475053204D61C0 |
:1046E000757320616B7469763F202000475053201A |
:1046F0006D6F7573652061637469763F2000475064 |
:1047000053206D6F7573652061637469763F200077 |
:10471000475053206D6F7573652061637469763FF0 |
:1047200020005A65696765204750532044657669C3 |
:104730006365200073686F77204750532064657667 |
:1047400069636520200073686F77204750532064A9 |
:10475000657669636520200073686F772047505342 |
:1047600020646576696365202000475053204461CA |
:1047700074656E20202020202020200047505320E8 |
:1047800064617461202020202020202020004750D8 |
:1047900053206461746120202020202020202000EC |
:1047A0004750532064617461202020202020202065 |
:1047B0002000504B542D416B6B7574797020202074 |
:1047C00020202000504B542D416363757479702074 |
:1047D000202020202000504B542D547970652064F7 |
:1047E0006520626174742E00504B542D62617474A4 |
:1047F0006572696A207479706500504B5420416B72 |
:104800006B75204D657373756E672000504B542097 |
:10481000416363754D656173757265202000626147 |
:1048200074742E206465206D657375726520200098 |
:10483000504B5420626174742E206D6574696E67EC |
:1048400020004D6F64756C2065696E6765626175E7 |
:10485000743F20006D6F64756C65206275696C74BF |
:1048600020696E3F20004D6F64756C6520696E7322 |
:1048700074616C6C652020006D6F64756C652067D9 |
:1048800065696E7374616C6C3F004E616D652020CC |
:104890002020202020202020202020006E616D6517 |
:1048A00020202020202020202020202020004E6FAB |
:1048B0006D202020202020202020202020202000CB |
:1048C0004E61616D202020202020202020202020EB |
:1048D000200050696E202020202020202020202031 |
:1048E0002020200070696E20202020202020202001 |
:1048F00020202020200050696E2020202020202011 |
:10490000202020202020200050696E202020202000 |
:1049100020202020202020202000496E6974696119 |
:104920006C6973696572656E20202000696E697418 |
:1049300069616C697A652020202020202000696E42 |
:10494000697469616C6973657220202020202000E1 |
:10495000496E697469616C697A6520202020202085 |
:1049600020004B6F6E6669672E206D69742050437E |
:1049700020202000636F6E6669672E207769746857 |
:10498000202050432000436F6E6669672E206176B9 |
:104990006563205043202000436F6E6669672E20B8 |
:1049A0006D6574205043202020004D6F64756C208D |
:1049B00065696E6765626175743F20006D6F64752F |
:1049C0006C65206275696C7420696E3F20004D6FC4 |
:1049D00064756C6520696E7374616C6C6520200071 |
:1049E0004D6F64756C65206765696E7374616C2EBC |
:1049F0003F0054582F5258204B616E616C2020208C |
:104A00002020200054582F5258204368616E6E6554 |
:104A10006C202020200054582F5258204368616E8B |
:104A20006E656C202020200054582F525820436877 |
:104A3000616E6E656C20202020004E6574572E201C |
:104A40004772757070652020202020004E657457D5 |
:104A50002E2047726F7570202020202020004E6588 |
:104A600074572E2047726F75702020202020200060 |
:104A70004E6574572E2047726F75702020202020BD |
:104A800020004E6574572E204D6F64652020202035 |
:104A9000202020004E6574572E204D6F6465202025 |
:104AA0002020202020004E6574572E204D6F646515 |
:104AB00020202020202020004E6574572E204D6F8E |
:104AC0006465202020202020200054582054696D47 |
:104AD000656F757420202020202020005458205419 |
:104AE000696D656F757420202020202020005458A7 |
:104AF0002054696D656F75742020202020202000CF |
:104B000054582054696D656F757420202020202032 |
:104B100020005458204D54552020202020202020B3 |
:104B2000202020005458204D5455202020202020A3 |
:104B30002020202020005458204D54552020202093 |
:104B400020202020202020005458204D5455202083 |
:104B500020202020202020202000426175647261E6 |
:104B600074652057693233322F42540042617564B4 |
:104B7000726174652057693233322F4254004261AA |
:104B80007564726174652057693233322F42540064 |
:104B900042617564726174652057693233322F4205 |
:104BA0005400496E697469616C6973696572656EF8 |
:104BB00020202000696E697469616C697A65202023 |
:104BC000202020202000696E697469616C6973651A |
:104BD0007220202020202000496E697469616C6970 |
:104BE0007A6520202020202020004B6F6E666967A8 |
:104BF0002E206D697420504320202000636F6E6664 |
:104C000069672E2077697468202050432000436F25 |
:104C10006E6669672E206176656320504320200010 |
:104C2000436F6E6669672E206D65742050432020A7 |
:104C30002000496E666F73206265696D2053746150 |
:104C400072742000696E666F2061742073746172E3 |
:104C5000747570202000496E666F722E2073757215 |
:104C6000206C616E63657200696E666F2062696AAE |
:104C7000206F70737461727420004F534420456D2F |
:104C80007066616E6773617573662E004F534420C2 |
:104C900072656365697665204572726F72004F5365 |
:104CA000442072656365697665204572726F720093 |
:104CB0004F53442072656365697665204572726F53 |
:104CC00072005370726163686520202020202020CC |
:104CD000202020006C616E677561676520202020B0 |
:104CE0002020202020004C616E6775652020202048 |
:104CF00020202020202020007461616C20202020B2 |
:104D0000202020202020202020004C69636874206F |
:104D1000617573206E6163682E2E2E006C69676862 |
:104D200074206F66662061667465722020004C7581 |
:104D30006D6965726520617520626F757420200051 |
:104D40006C6963687420756974206E61202020206E |
:104D5000200048656C6C69676B65697420202020B1 |
:104D6000202020006272696768746E65737320206A |
:104D70002020202020006C756D696E6F736974654A |
:104D8000202020202020200068656C646572686502 |
:104D9000696420202020202020004B6F6E747261F7 |
:104DA000737420202020202020202000636F6E7448 |
:104DB0007261737420202020202020202000636F47 |
:104DC0006E747261737465202020202020202000E2 |
:104DD000636F6E7472617374202020202020202065 |
:104DE00020004E6F726D616C2F496E766572732074 |
:104DF000202020006E6F726D616C2F696E76657277 |
:104E00007465642020004E6F726D616C202F2069E4 |
:104E10006E766572736520004E6F726D616C2F69DE |
:104E20006E7665727465642020004F7269656E74D9 |
:104E3000696572756E672020202020006F72696599 |
:104E40006E746174696F6E202020202020006F72C4 |
:104E500069656E746174696F6E20202020202000C7 |
:104E60006F7269656E74617469652020202020204E |
:104E7000200056657262696E64756E67207A756D82 |
:104E8000204D4B00636F6E6E656374696F6E2074A6 |
:104E90006F204D4B200020636F6E6E6578696F6EDA |
:104EA0002061204D4B20000041616E736C75697468 |
:104EB000696E67206F70204D4B00416E7A6569679F |
:104EC000652020202020202020201D0044697370B0 |
:104ED0006C61792020202020202020201D006427C4 |
:104EE00061666669636861676520202020201D0077 |
:104EF000446973706C6179202020202020202020BC |
:104F00001D0057692E3233322020202020202020FF |
:104F100020201D0057692E323332202020202020EF |
:104F2000202020201D0057692E32333220202020DF |
:104F30002020202020201D0057692E3233322020CF |
:104F400020202020202020201D0042544D2D3232D0 |
:104F5000322020202020202020201D0042544D2DD2 |
:104F60003232322020202020202020201D004254D8 |
:104F70004D2D3232322020202020202020201D00E4 |
:104F800042544D2D3232322020202020202020205B |
:104F90001D00416E74656E6E656E20547261636BA8 |
:104FA0002E201D00616E74656E6E612074726163E7 |
:104FB0006B696E671D00616E74656E6E6120747240 |
:104FC00061636B696E671D00616E74656E6E612052 |
:104FD000747261636B696E671D004F534420416EAC |
:104FE0007A6569676520202020201D004F534420EA |
:104FF00073637265656E2020202020201D004F53B2 |
:10500000442073637265656E2020202020201D00DF |
:105010004F53442073637265656E2020202020204A |
:105020001D00475053202020202020202020202019 |
:1050300020201D0047505320202020202020202009 |
:10504000202020201D0047505320202020202020F9 |
:105050002020202020201D004750532020202020E9 |
:1050600020202020202020201D00466F6C6C6F77B0 |
:10507000204D65202020202020201D00466F6C6CD4 |
:105080006F77204D65202020202020201D00466FB6 |
:105090006C6C6F77204D65202020202020201D0083 |
:1050A000466F6C6C6F77204D6520202020202020DB |
:1050B0001D00504B542D416B6B752020202020206B |
:1050C00020201D00504B542D41636375202020206B |
:1050D000202020201D00504B542D4163637520205B |
:1050E0002020202020201D00504B542D416363754B |
:1050F00020202020202020201D00504B54205570BF |
:10510000646174652020202020202000504B542012 |
:105110005570646174652020202020202000504BB1 |
:1051200054204D6973652061206A6F7572202000DC |
:10513000504B54205570646174652020202020203D |
:105140002000446562756720504B542020202020A9 |
:1051500020202000446562756720504B5420202099 |
:10516000202020202000446562756720504B542089 |
:105170002020202020202000446562756720504BAD |
:1051800054202020202020202000454550726F6DA3 |
:105190002052657365742020202020004545507200 |
:1051A0006F6D2052657365742020202020004545D6 |
:1051B00050726F6D205265696E697469616C690027 |
:1051C000454550726F6D2052657365742020202014 |
:1051D000200020204D6974204861726477617265F7 |
:1051E00020312E78202020002020206E69636874F2 |
:1051F000206DF6676C6963682020202000576932B3 |
:1052000033320057693233320032343030202000DC |
:1052100039363030202000313932303020003338F8 |
:1052200034303020200035373630302000313135F1 |
:1052300032303000323430302020003936303020E7 |
:1052400020003139323030200033383430302020E3 |
:1052500000353736303020003131353230300032D1 |
:1052600034303020200039363030202000313932BF |
:10527000303020003338343030202000353736309D |
:10528000302000313135323030002500120013005B |
:10529000120013002057692E323332205365747583 |
:1052A0007020202020202020200012001300200049 |
:1052B00020202020202020202020202020430020EB |
:1052C00017202020202016202020202019202020F8 |
:1052D000204F4B002042542073656C65637420445A |
:1052E00065766963652020202000120013001200FB |
:1052F000130020426C7565746F6F7468204E616D89 |
:10530000652020202020200020426C7565746F6F7E |
:1053100074682050696E20202020202020004254F4 |
:1053200020496E6974206F6B00425420496E697485 |
:10533000204572726F72001200130077E4686C658A |
:10534000204254204465766963650073756368651F |
:10535000204254204465766963650044657669633C |
:10536000653A004D41433A00636F6E6E6563746544 |
:105370006400204C6174697475646520204C6F6E04 |
:10538000676974756465002E002E004750532054E1 |
:10539000696D653A200020536174656C6C697465B1 |
:1053A0003A2000475053207472656E6E656E00455A |
:1053B00072726F7220617420636F6E6E65637469C0 |
:1053C0006E67004665686C6572206265696D205481 |
:1053D00072656E6E656E004C69496F004C69506F66 |
:1053E000004C69506F004C69496F00566F6C740037 |
:1053F000120013001200130020504B542D536574FB |
:105400007570202020202020202020202000120045 |
:105410001300466C7974696D653A00537065656474 |
:105420003A00446973743A004D4B3A002E002E0046 |
:105430002121216E6F7420696D706C656D656E74CD |
:10544000656421212100010000000A0000006400C1 |
:105450000000E803000010270000A0860100404281 |
:105460000F008096980000E1F50500CA9A3B000005 |
:105470000000000000007E8195B1B195817E7EFF25 |
:10548000EBCFCFEBFF7E0E1F3F7E3F1F0E00081CB1 |
:105490003E7F3E1C0800383A9FFF9F3A3800103884 |
:1054A000BCFFBC381000000000000000000000003D |
:1054B00000000000000000000000000000000000EC |
:1054C00000000000000070F88888FD7F070F004E84 |
:1054D0005FF1F15F4E000000000000000000C0FF1F |
:1054E0007F0505657F3F995A3CE7E73C5A997F3E27 |
:1054F0003E1C1C08080008081C1C3E3E7F000024BF |
:1055000066FFFF662400005F5F00005F5F00060F1C |
:10551000097F7F017F7FDABFA5A5FD5903020070D7 |
:105520007070707070008094B6FFFFB694800004B5 |
:10553000067F7F0604000010307F7F3010000808CF |
:10554000082A3E1C0800081C3E2A080808003C3CAB |
:10555000202020202000081C3E08083E1C0830386F |
:105560003C3E3E3C3830060E1E3E3E1E0E060000FF |
:1055700000000000000000065F5F0600000000075A |
:10558000070007070000147F7F147F7F1400242E7C |
:105590006B6B3A120000466630180C666200307A77 |
:1055A0004F5D377A48000407030000000000001C2C |
:1055B0003E63410000000041633E1C000000082AD9 |
:1055C0003E1C1C3E2A0808083E3E0808000000A0B9 |
:1055D000E06000000000080808080808000000005B |
:1055E0006060000000006030180C060301003E7F80 |
:1055F000594D7F3E000042427F7F40400000627371 |
:1056000059496F660000226349497F360000181C23 |
:1056100016137F7F1000276745457D3900003C7ECB |
:105620004B4979300000036371190F070000367F82 |
:1056300049497F360000064F49693F1E00000000BF |
:105640006C6C0000000000A0EC6C00000000081C66 |
:1056500036634100000014141414141400000041B7 |
:1056600063361C080000020351590F0600003E7FFC |
:10567000415D5D1F1E007C7E13137E7C0000417F18 |
:105680007F49497F36001C3E634141632200417FD0 |
:105690007F41637F1C00417F7F495D416300417F03 |
:1056A0007F491D0103001C3E6341517372007F7FDF |
:1056B00008087F7F000000417F7F410000003070BC |
:1056C00040417F3F0100417F7F081C776300417F9D |
:1056D0007F41406070007F7F060C067F7F007F7FE8 |
:1056E000060C187F7F001C3E6341633E1C00417F17 |
:1056F0007F49090F06001E3F21717F5E0000417F38 |
:105700007F19396F460026674D597B3200000341EF |
:105710007F7F410300007F7F40407F7F00001F3F6D |
:1057200060603F1F00007F7F3018307F7F0063770D |
:105730001C081C776300074F78784F0700006773D9 |
:10574000594D47637100007F7F4141000000010314 |
:10575000060C183060000041417F7F000000080CFB |
:105760000603060C08008080808080808080000016 |
:10577000030704000000207454543C784000413F6B |
:105780007F44447C3800387C44446C2800003078E6 |
:1057900048493F7F4000387C54545C180000487EE4 |
:1057A0007F490302000098BCA4A4F87C0400417F58 |
:1057B0007F08047C780000447D7D4000000040C4E8 |
:1057C00084FD7D000000417F7F10386C4400004163 |
:1057D0007F7F400000007C7C0C180C7C78007C7C77 |
:1057E00004047C780000387C44447C38000084FC4D |
:1057F000F8A4243C1800183C24A4F8FC8400447C41 |
:1058000078441C180000485C5454742400000004C0 |
:105810003E7F442400003C7C40403C7C40001C3CDB |
:1058200060603C1C00003C7C6030607C3C00446C50 |
:105830003810386C44009CBCA0A0FC7C00004C6478 |
:10584000745C4C64000008083E7741410000000091 |
:105850000077770000004141773E0808000002030E |
:10586000010302030100787C4643467C78001EBF9A |
:10587000E161331200003A7A40407A7A4000387C85 |
:1058800056575D18000002237555557D7B422175E2 |
:1058900054547D794000207557567C784000002292 |
:1058A0007755557F7A401CBEE26236140000023BF9 |
:1058B0007D55555D1B02397D54545D190000387DBE |
:1058C00057565C18000001457C7C41010000020332 |
:1058D000457D7D43020000457F7E40000000797DCC |
:1058E00026267D790000707A2D2D7A700000447C88 |
:1058F0007E5755440000207454547C7C54547C7E64 |
:105900000B097F7F4900327B49497B320000327AA4 |
:1059100048487A32000030794B4A783000003A7BB0 |
:1059200041417B7A40003879434278784000BABAE6 |
:10593000A0A0FA7A0000397D4444447D39003D7DC1 |
:1059400040407D3D0000387C64544C7C3800687ECB |
:105950007F49436620005C3E7349673E1D00446CEE |
:1059600038386C44000040C888FE7F090B02207460 |
:1059700056577D78400000447E7F4100000030781B |
:10598000484A7B310000387840427B7940007A7B7E |
:10599000090B7A7301007A7B19337A7B01000026A8 |
:1059A0002F292F2F280000262F29292F2600307875 |
:1059B0004D45602000001C227D4B5B65221C0808C1 |
:1059C000080838380000613F1FCCEEABB990613F4A |
:1059D0001F4C6673D9F8000060FAFA600000081CDA |
:1059E0003622081C362222361C0822361C08AA0041 |
:1059F0005500AA005500AA55AA55AA55AA5555FF03 |
:105A0000AAFF55FFAAFF000000FFFF0000001010D2 |
:105A100010FFFF00000070782C2E7B71000072795F |
:105A20002D2D79720000717B2E2C787000001C22C5 |
:105A30005D555541221C1414F7F700FFFF000000CC |
:105A4000FFFF00FFFF001414F4F404FCFC00141426 |
:105A50001717101F1F00183C24E7E72424002B2FE2 |
:105A6000FCFC2F2B0000101010F0F00000000000D4 |
:105A7000001F1F1010101010101F1F1010101010FA |
:105A800010F0F0101010000000FFFF1010101010A8 |
:105A9000101010101010101010FFFF1010102277AF |
:105AA00055577E7B4100727B2D2F7A7301000000D9 |
:105AB0001F1F101717140000FCFC04F4F414141436 |
:105AC0001717101717141414F4F404F4F414000046 |
:105AD000FFFF00F7F71414141414141414141414FE |
:105AE000F7F700F7F714663C3C243C3C66000527BA |
:105AF00072577D380000497F7F49637F1C00467DD7 |
:105B00007D5555460000457D7C5455450000447D3B |
:105B10007F56544400000A0E0800000000000044B4 |
:105B20007E7F4500000002457D7D45020000014565 |
:105B30007C7C450100001010101F1F0000000000B9 |
:105B400000F0F0101010FFFFFFFFFFFFFFFFF0F06D |
:105B5000F0F0F0F0F0F00000007777000000004572 |
:105B60007F7E440000000F0F0F0F0F0F0F0F387CC8 |
:105B70004647457C3800FCFE2A2A3E1400003A7D48 |
:105B80004545457D3A00387C4547467C3800327BA8 |
:105B9000494B7A3301003A7F4547467F390080FE02 |
:105BA0007E20203E1E00427E7E541C080000417F65 |
:105BB0007F55141C08003C7C42437D3C00003A7930 |
:105BC0004141793A00003C7D43427C3C0000B8B83A |
:105BD000A2A3F97800000C5C72735D0C0000020255 |
:105BE0000202020200000000020301000000101087 |
:105BF00010101010000044445F5F44440000282847 |
:105C000028282828000071351F4C6673D9F8060F24 |
:105C1000097F7F017F7FDABFA5A5FD590302080830 |
:105C20006B6B080800000080C04000000000000608 |
:105C30000F090F060000020200000202000000002F |
:105C40000010100000000012131F1F1010000011A0 |
:105C500015151F1F0A0000191D151712000000005E |
:105C60003C3C3C3C000000000000000000002073B1 |
:105C7000657269656C6C6520506F74697320312D95 |
:105C8000352000194F18000014BE88E10FB6F894B3 |
:105C900080936000109260000FBE11241FBECFEFF2 |
:105CA000D0E4DEBFCDBF1AE2A0E0B1E0EAEEFEE84C |
:105CB00001E00BBF02C007900D92AE39B107D9F7D2 |
:105CC0001EE3AEE9BAE201C01D92A935B107E1F7C2 |
:105CD0000E946E2E0C9474C70C940000CFEFD0E499 |
:105CE000DEBFCDBFC0E00E94C048C0939F2AC093D2 |
:105CF0009E2A00918137013009F03DC00E94AA6BB5 |
:105D00008BE090E00E9438BC2C2FAC016C2F8C2FC4 |
:105D10000E942F718CE090E00E9438BC2C2FAC01C7 |
:105D2000602F8C2F0E942F718DE090E00E9438BC74 |
:105D30002C2FAC0163E08C2F0E942F7185E190E045 |
:105D40000E9438BC2C2FAC0164E08C2F0E942F7174 |
:105D500080E190E00E9438BC2C2FAC0165E08C2FD4 |
:105D60000E942F7128E93AE384EF91E00197F1F75F |
:105D700021503040C9F70E94975F80916937909118 |
:105D80006A37A0916B37B0916C370097A105B105C8 |
:105D900009F453C18091CD379091CE37A091CF3780 |
:105DA000B091D0370097A105B10509F446C10E9412 |
:105DB000AA6B86E190E00E9438BC22E0AC0160E072 |
:105DC000862F0E942F7189E190E00E9438BC22E06A |
:105DD000AC0161E080E00E942F7187E190E00E94B9 |
:105DE00038BC22E0AC01622F80E00E942F7188E174 |
:105DF00090E00E9438BC20E0AC0167E0822F0E9456 |
:105E00002F718091CD379091CE37A091CF37B0913F |
:105E1000D037BC01CD0120E836E948E950E00E94C6 |
:105E2000F5C6DA01C901EE240E2D22E030E0AC0106 |
:105E300064E081E00E9434772E2D4CE051E064E074 |
:105E400083E00E94EE708091CD379091CE37A09183 |
:105E5000CF37B091D037BC01CD0128EE33E040E020 |
:105E600050E00E94F5C6CA01B90120E137E240E0E6 |
:105E700050E00E94F5C6DC01CB0101E024E030E0F7 |
:105E8000AC0164E0862F0E9434778091CD379091E9 |
:105E9000CE37A091CF37B091D037BC01CD012AE0E9 |
:105EA00030E040E050E00E94F5C6CA01B90124E6A6 |
:105EB00030E040E050E00E94F5C6DC01CB0122E07A |
:105EC00030E0AC0164E088E00E943477809169376B |
:105ED00090916A37A0916B37B0916C37BC01CD01BE |
:105EE00020E836E948E950E00E94F5C6DA01C90128 |
:105EF0000E2D22E030E0AC0164E08CE00E943477AB |
:105F00002E2D4EE051E064E08EE00E94EE70809114 |
:105F1000693790916A37A0916B37B0916C37BC01AB |
:105F2000CD0128EE33E040E050E00E94F5C6CA0102 |
:105F3000B90120E137E240E050E00E94F5C6DC0103 |
:105F4000CB0101E024E030E0AC0164E08FE00E948E |
:105F500034778091693790916A37A0916B37B0910F |
:105F60006C37BC01CD012AE030E040E050E00E94F7 |
:105F7000F5C6CA01B90124E630E040E050E00E94D5 |
:105F8000F5C6DC01CB0122E030E0AC0164E083E146 |
:105F90000E94347780E80E944238082F882399F1C4 |
:105FA00020E030E040E050E0CA01B9010E94B85F53 |
:105FB00000E028E040E860E2802F0E945F6E28E069 |
:105FC00040E868E2802F0E945F6E8AE190E00E94C4 |
:105FD00038BC202FAC0165E0802F0E942F7145E175 |
:105FE00066E0802F0E944C7145E167E0802F0E949F |
:105FF0004C7120E137E284EF91E00197F1F72150F5 |
:106000003040C9F71AC080E10E944238882309F461 |
:10601000C1CF45E164E0802F0E944C7145E165E00D |
:10602000802F0E944C7145E166E0802F0E944C71E8 |
:1060300045E167E0802F0E944C718BE10E94164180 |
:106040008BE10E94164185E50E9416418AEA0E9472 |
:10605000164180E00E94164186E58093A02A02E363 |
:106060000E94AA6B8BE190E00E9438BC20E0AC015A |
:1060700064E0822F0E942F718CE190E00E9438BC76 |
:1060800020E0AC0167E08CE00E942F7180919F2B93 |
:10609000882309F058C01F921F9286E78F930E94B1 |
:1060A000404184E190E09093512E8093502E0F90C8 |
:1060B0000F900F908091502E9091512E892BD1F7F7 |
:1060C0000150C53148F420E040E151E066E08C2FFA |
:1060D0000E94EE70CF5F06C045E166E080E00E945E |
:1060E0004C71C0E080E20E944238882351F080EF7A |
:1060F0000E9442381092D33710929F2A0E94D832C1 |
:10610000F9CF80919F2B882311F4002321F60023DF |
:10611000B9F480E290E00E9438BC202FAC0165E029 |
:10612000802F0E942F718AE590E09093512E8093EA |
:10613000502E8091502E9091512E892BD1F78FCFD8 |
:10614000002309F48CCF0E94924280919C2B909165 |
:106150009D2B90933B2E80933A2E009181370130F6 |
:10616000B1F40E94AA6B81E290E00E9438BC20E06A |
:10617000AC01622F822F0E942F7182E290E00E9478 |
:1061800038BC20E0AC01602F822F0E942F718091DB |
:10619000C22E823681F480918137813051F483E2BE |
:1061A00090E00E9438BC20E0AC0162E0822F0E94A7 |
:1061B0002F7182E013C08091C22E833699F48091B2 |
:1061C0008137813051F484E290E00E9438BC20E0B5 |
:1061D000AC0162E0822F0E942F7181E080939F2AA0 |
:1061E00080939E2A809181378130B9F585E290E0D5 |
:1061F0000E9438BC20E0AC0163E0822F0E942F7126 |
:10620000E0913A2EF0913B2E408163E089E00E94BC |
:106210002C7720E042E151E063E08AE00E94EE70DA |
:10622000E0913A2EF0913B2E418163E08BE00E9499 |
:106230002C77E0913A2EF0913B2E84818F59482F94 |
:1062400063E08EE00E942C7728EA31E684EF91E04B |
:106250000197F1F721503040C9F70E942A438FEF90 |
:106260000E94AE99E0913C2EF0913D2E80818B35BD |
:1062700009F465C00E94AA6B20E044E151E0622F5E |
:10628000822F0E94EE708BE50E94FC7686E290E001 |
:106290000E9438BC20E0AC01622F8DE00E942F717B |
:1062A00020E04FE151E062E0822F0E94EE70E09129 |
:1062B0003C2EF0913D2E80810E94FC7687E290E09A |
:1062C0000E9438BC20E0AC0162E08DE00E942F719A |
:1062D00088E290E00E9438BC20E0AC0164E0822FAC |
:1062E0000E942F7189E290E00E9438BC20E0AC014E |
:1062F00065E0822F0E942F7120E04AE251E065E0C4 |
:106300008CE00E94EE708AE290E00E9438BC20E0AF |
:10631000AC0166E0822F0E942F7110929F2A40E00C |
:1063200060E470E08CED95E00E942A3620E43CE9C0 |
:1063300084EF91E00197F1F721503040C9F71092B6 |
:10634000A02A10929F2B82E390E09093512E80938D |
:10635000502E8091502E9091512E892BD1F70E9472 |
:10636000D832FDCF0F931F93062F142F20E046E75E |
:1063700056E0682F812F0E94EE7020E048E756E03B |
:10638000602F812F0E94EE701F910F910895DF9270 |
:10639000EF92FF920F931F93CF93D82EE62EF42EF9 |
:1063A000C22F022F622F822F0E94B23180E40E94FE |
:1063B0004238182F61E080E40E948638182B29F0BB |
:1063C000CE1510F4CF5F01C0CE2D80E80E94423878 |
:1063D000182F61E080E80E948638182B29F0DC161F |
:1063E00010F4C15001C0CD2DC01731F04F2D6C2FCE |
:1063F000802F0E94B2310C2F80E30E944238882304 |
:10640000A9F285FDCFEF8C2F9927CF911F910F9186 |
:10641000FF90EF90DF900895CF92DF92EF92FF927E |
:106420000F931F93CF93E82EF62E842FC22ED02EDB |
:10643000C42F042F41E0682F0E94B23180E40E94F3 |
:106440004238182F61E080E40E948638182B59F0FA |
:10645000CF1510F4CF5F07C081E0D81619F48EEF86 |
:1064600090E027C0CF2D80E80E944238182F61E0CD |
:1064700080E80E948638182B59F0EC1610F4C150B1 |
:1064800007C081E0C81619F48DEF90E012C0CE2D40 |
:10649000C01731F041E06C2F802F0E94B2310C2FD9 |
:1064A00080E30E944238882349F285FDCFEF8C2F8C |
:1064B0009927CF911F910F91FF90EF90DF90CF9090 |
:1064C0000895CF92DF92EF92FF920F931F93CF9395 |
:1064D000E82EF62E842FC22ED02EC42F042F41E09A |
:1064E000682F0E94B23180E40E944238182F61E088 |
:1064F00080E40E948638182B59F0CF1510F4CF5F36 |
:1065000007C081E0D81619F48EEF90E049C0CF2D76 |
:1065100080E80E944238182F61E080E80E948638A7 |
:10652000182B59F0EC1610F4C15007C081E0C816C2 |
:1065300019F48DEF90E034C0CE2D80E20E946538D2 |
:10654000882331F080EF0E9442388AEF90E028C023 |
:1065500080E10E946538882331F080EF0E94423844 |
:106560008BEF90E01DC080E20E944D38882331F00F |
:1065700080EF0E9442388CEF90E012C0C01731F0DB |
:1065800041E06C2F802F0E94B2310C2F0E94A97B1A |
:1065900080E10E944D38882309F4A5CF8C2F9927DC |
:1065A000CF911F910F91FF90EF90DF90CF900895C2 |
:1065B0006F927F928F929F92AF92BF92CF92DF9213 |
:1065C000EF92FF920F931F93CF93DF93DD247D2CE7 |
:1065D0008D2C71E0972EBD2C60909F2A0E949C7B91 |
:1065E00080EF0E9442388091D337813011F480933C |
:1065F0009F2A8091D337882311F460929F2A80913B |
:106600009F2A882319F462E0762E09C0813019F49C |
:1066100059E0752E04C0823011F445E0742E0E94BA |
:10662000AA6B22E04AE756E060E0862F0E94EE70F7 |
:1066300022E047E856E060E08CE00E94EE7081E0E6 |
:1066400090E00E9438BC20E0AC0167E0822F0E94FD |
:106650002F718CE290E00E9438BC20E0AC0167E032 |
:106660008CE00E942F71AA24DD2039F02A2D4DE8FC |
:1066700056E061E0862F0E94EE7031E0C32EEE24DA |
:10668000FF240D2D1127A701400F511FC72DDD2716 |
:106690004C175D070CF049C080919F2A8130A9F406 |
:1066A00088E490E0489F9001499F300D589F300D3D |
:1066B0001124A9019091CA3782E1989FC001112449 |
:1066C000480F591F42515C4F2BC08230A9F488E417 |
:1066D00090E0489F9001499F300D589F300D112444 |
:1066E000A9019091CA3782E1989FC0011124480FF7 |
:1066F000591F4A575D4F14C088E490E0489F9001AD |
:10670000499F300D589F300D1124A9019091CA372F |
:1067100082E1989FC0011124480F591F4A505E4FD3 |
:1067200020E06C2D83E00E94EE7035E0A31669F442 |
:106730000B5F1F4F21970C171D073CF420E04FE81B |
:1067400056E066E081E00E94EE700E94A97BA3946F |
:106750000894E11CF11CC39485E08A1508F091CFE0 |
:106760008820A1F4DD2079F496E0971530F401E05B |
:106770002D2D492D682F802F1EC00D2D2D2D492D1B |
:10678000672D81E018C001E0202F12C021E08216A1 |
:10679000A9F48D2D99270796272D33272817390718 |
:1067A0002CF400E0282D492D66E004C0082D282D8A |
:1067B000492D65E082E00E946132B82E3EEFB316AB |
:1067C00031F4D39421E0822E95E0992E4CCF8DEFB9 |
:1067D000B81629F4DA94882482E0982E44CF9CEFEE |
:1067E000B91681F50E94AA6B8EE290E00E9438BC37 |
:1067F00020E0AC0162E0822F0E942F718FE290E0D6 |
:106800000E9438BC20E0AC0167E08CE00E942F7150 |
:1068100080E10E9442388111299880E20E944D381F |
:106820008823B1F380EF0E9442380E94AA6B22E0D5 |
:1068300041E956E060E0862F0E94EE7022E04EE9CA |
:1068400056E0F9CE2BEFB21619F40E94783972C0D7 |
:106850003AEFB31619F40E944ABC6CC09B2C1091FD |
:106860009F2A113091F58B2D8D0D912D911DEC01ED |
:10687000019711F40E9433BEC230D10519F4812F63 |
:106880000E94F489C330D10519F483E00E94F48991 |
:10689000C430D10511F40E94B56AC530D10511F498 |
:1068A0000E94D3B7C630D10511F40E94FC5DC730F9 |
:1068B000D10511F40E94539BC830D10511F40E94F8 |
:1068C0003C5B299711F40E94953880919F2A823071 |
:1068D000E9F42B2D2D0D312D311DE901213031052C |
:1068E00011F40E9433BEC230D10511F40E94FC5D48 |
:1068F000C330D10511F40E94539BC430D10511F46B |
:106900000E943C5B259711F40E94953880919F2A44 |
:10691000882309F068CE8B2D8D0D912D911DEC01F2 |
:10692000019711F40E9433BE229709F05CCE0E94B9 |
:10693000953859CEDF91CF911F910F91FF90EF9035 |
:10694000DF90CF90BF90AF909F908F907F906F908F |
:1069500008950E94AA6B22E044EA56E060E0862F88 |
:106960000E94EE7080E390E00E9438BC20E0AC0111 |
:1069700061E0822F0E942F7181E390E00E9438BC79 |
:1069800020E0AC0162E0822F0E942F7120E04AEBF0 |
:1069900056E063E0822F0E94EE7020E040ED56E06A |
:1069A00064E0822F0E94EE7020E046EE56E065E043 |
:1069B000822F0E94EE7020E04CEF56E066E0822FBE |
:1069C0000E94EE7082E390E00E9438BC20E0AC01AF |
:1069D00067E0822F0E942F7180E20E944238882354 |
:1069E00021F080EF0E944238089580E10E944238F1 |
:1069F000882391F388E190E02CE00FB6F894A895F5 |
:106A0000809360000FBE20936000FFCF0E94AA6BAE |
:106A100020E042E157E062E0822F0E94EE7020E029 |
:106A200047E257E063E0822F0E94EE7020E047E3E8 |
:106A300057E067E08CE00E94EE7080E20E944238EE |
:106A40008823D9F380EF0E9442380895EF92FF9295 |
:106A50000F931F93CF93DF9310E00E94AA6B22E065 |
:106A60004CE357E0612F812F0E94EE7022E042E557 |
:106A700057E0612F8DE00E94EE7022E049E557E07B |
:106A800061E0812F0E94EE708CE090E00E9438BCA3 |
:106A900022E0AC0161E0812F0E942F7181E090E043 |
:106AA0000E9438BC212FAC0167E0812F0E942F711A |
:106AB00000E0C0E0D0E0E12EFF249E012E0D3F1D3E |
:106AC00029303105A4F486E190E0289FA001299F98 |
:106AD000500D389F500D1124CA01805D9E4F302FFC |
:106AE0003D5F20E0AC01632F822F0E94EE700F5FAC |
:106AF0002196033000F3112369F4212F4FE657E06C |
:106B000062E0812F0E94EE70212F41E757E066E09E |
:106B1000812F10C056E0E516F10474F420E043E73D |
:106B200057E062E0822F0E94EE7020E045E757E0D8 |
:106B300066E0822F0E94EE70C12FDD27C630D1059E |
:106B400074F020E047E757E062E0822F0E94EE7089 |
:106B500020E049E757E066E0822F0E94EE7080E473 |
:106B60000E944238882319F026970CF41F5F80E8B2 |
:106B70000E944238882311F01111115080E20E94C6 |
:106B80004238882331F480E10E944238882309F496 |
:106B90008FCF80EF0E944238DF91CF911F910F91EC |
:106BA000FF90EF9008951092800010928100109253 |
:106BB0006F008091800082688093800080918100C6 |
:106BC0008B61809381008AE698E19093870080939F |
:106BD000860086ED91E09093890080938800089567 |
:106BE000579A8091B00083688093B0008091B10083 |
:106BF00081608093B1008091700086608093700006 |
:106C00008FEF8093B30008951F920F920FB60F92EB |
:106C100011245F9A0F900FBE0F901F9018951F922E |
:106C20000F920FB60F9211245F980F900FBE0F9026 |
:106C30001F9018951092512E1092502E82E084BD14 |
:106C400085E085BD83EC87BD80916E008260809376 |
:106C50006E0008959C01442339F48091A32A9091F9 |
:106C6000A42A892B31F50EC04130A9F48091A32AC2 |
:106C70009091A42A892BE9F481E090E09093A42AD2 |
:106C80008093A32A3093A62A2093A52A709301010A |
:106C9000609300010895423061F41092A42A10928A |
:106CA000A32A1092A62A1092A52A109201011092EE |
:106CB000000108958091A72A9091A82A019771F464 |
:106CC00040E060E270E088EE93E00E942A3622E025 |
:106CD0004BE757E060E0862F0E94EE7020910401A0 |
:106CE0003091050184E690E0289FA001299F500D76 |
:106CF000389F500D11248091A72A9091A82A8417BB |
:106D0000950721F41092A82A1092A72A8091A72A09 |
:106D10009091A82A009729F001969093A82A809331 |
:106D2000A72A349B04C01092AA2A1092A92A349947 |
:106D300017C08091A92A9091AA2A01969093AA2A15 |
:106D40008093A92A0A9761F48091A72A9091A82A92 |
:106D5000892B31F481E090E09093A82A8093A72AB0 |
:106D6000209102013091030184E690E0289FA00168 |
:106D7000299F500D389F500D11248091A92A909180 |
:106D8000AA2A8417950709F4299808951F920F924B |
:106D90000FB60F9211242F933F934F935F936F93EE |
:106DA0007F938F939F93AF93BF93CF93EF93FF9373 |
:106DB000C0B1C0952091B52AC2279091B62A9C23D4 |
:106DC00090959093B62A8091B72A8C238927809337 |
:106DD000B72A9823C923922F9C279093B52A9C23E6 |
:106DE0008091B42A892B8093B42A8091C73781304F |
:106DF000D9F48091AB2A9091AC2A01969093AC2A59 |
:106E00008093AB2A8091AB2A9091AC2A805E9E42FF |
:106E100059F440E060E870E088EC90E00E942A3687 |
:106E20001092AC2A1092AB2A8091BC2A8150809398 |
:106E3000BC2A8F3F89F489E08093BC2A8091A12AE3 |
:106E40009091A22A01969093A22A8093A12A8091E0 |
:106E500006018F5F80930601CC2389F080914F2E2D |
:106E6000882311F40E94E14981E080934F2E109213 |
:106E7000AE2A1092AD2A1092AC2A1092AB2A8091C1 |
:106E800009388823D9F080914F2E8130B9F4809150 |
:106E9000AD2A9091AE2A01969093AE2A8093AD2AA6 |
:106EA00064E670E00E94CEC6809109389927681781 |
:106EB000790721F40E94EC4910924F2E80917A00BC |
:106EC000992783709070892B11F00E945A36209177 |
:106ED000A52A3091A62A21153105E1F02B30310584 |
:106EE00038F02A5030403093A62A2093A52A04C0B7 |
:106EF0001092A62A1092A52A8091A52A9091A62ADE |
:106F0000209100013091010182239323892B61F0AC |
:106F100047980BC08FEF9FEF909301018093000182 |
:106F20003093A42A2093A32A479A9091B52A907F60 |
:106F300019F486E48093B82A8091B82A815080930E |
:106F4000B82A882329F48091B32A892B8093B32A05 |
:106F5000992319F481E08093B92A8091B92A81504C |
:106F60008093B92A882341F48FE08093B92A8091D5 |
:106F7000B22A892B8093B22A992319F486E480934C |
:106F8000BA2A8091BA2A81508093BA2A882341F480 |
:106F90008FE08093BA2A8091B12A892B8093B12AFD |
:106FA000992319F486E48093BB2A8091BB2A8150EF |
:106FB0008093BB2A8823A1F48091AF2A813011F4F9 |
:106FC00084E107C0823011F488E003C0833041F4CB |
:106FD00081E08093BB2A8091B02A892B8093B02ACC |
:106FE0008091502E9091512E892B49F08091502EF6 |
:106FF0009091512E01979093512E8093502E809115 |
:10700000522E9091532E892B49F08091522E9091BF |
:10701000532E01979093532E8093522EFF91EF9110 |
:10702000CF91BF91AF919F918F917F916F915F9120 |
:107030004F913F912F910F900FBE0F901F90189579 |
:107040002091A12A3091A22A280F391FC901019647 |
:1070500008952091A12A3091A22A821B930B892F97 |
:1070600099278695807490700895CF93DF930E943E |
:107070002038EC01CE010E9429388823D9F3DF9112 |
:10708000CF9108952FB7F8949091B42A8923982727 |
:107090009093B42A2FBF992708951F931FB7F89490 |
:1070A0009091B52A909589230E9442381FBF992755 |
:1070B0001F9108952FB7F8949091B22A89239827A9 |
:1070C0009093B22A2FBF992708952FB7F8949091E3 |
:1070D000B32A892398279093B32A2FBF0E945A3846 |
:1070E0000E94423899270895982F2FB7F8948091DD |
:1070F000B12A982389278093B12A2FBF8091B42A7F |
:10710000809589270E945A3899270895982F3FB76C |
:10711000F8948091B02A982389278093B02A6093AD |
:10712000AF2A3FBF892F992708959F92AF92BF92B0 |
:10713000CF92DF92EF92FF920F931F93CF93DF9343 |
:10714000CC249C2C31E0A32EBC2C0E94AA6B22E004 |
:1071500041E459E060E0862F0E94EE7081E090E00B |
:107160000E9438BC20E0AC0167E0822F0E942F71A2 |
:10717000DD24CC2039F02D2D47E559E061E0862F44 |
:107180000E94EE70EE24FF240C2D1127E701C00FA2 |
:10719000D11FC630D105D4F488E490E0C89FA00187 |
:1071A000C99F500DD89F500D11249091CA3782E18C |
:1071B000989FC0011124480F591F4F56584F8D2DCD |
:1071C0008F5F20E0682F83E00E94EE7085E0D81684 |
:1071D00049F425973CF420E049E559E066E081E078 |
:1071E0000E94EE70D3940894E11CF11C85E08D158B |
:1071F00058F6992059F4CC2031F40C2D2C2D4A2D21 |
:1072000066E081E015C001E0202F0FC081E09816F4 |
:1072100091F4095F1F4F073011052CF000E0292D74 |
:107220004A2D66E004C0092D292D4A2D65E082E033 |
:107230000E940C32B82E8EEFB81631F4C39421E0C0 |
:10724000922E95E0A92E94CF8DEFB81629F4CA940A |
:10725000992482E0A82E8CCF8FEFB81609F43CC099 |
:10726000AB2CEB2CFF240C2D1127E701C00FD11FF5 |
:10727000C130D10519F482E00E940645C230D10523 |
:1072800011F40E94949C8091D42F882351F4C33030 |
:10729000D10511F40E949958249781F40E949659BF |
:1072A0000DC08091D42F813049F4C330D10511F441 |
:1072B0000E94F457249711F40E944159E701C00F2E |
:1072C000D11FC530D10511F40E948CB6269709F064 |
:1072D0003CCF0E94263539CFDF91CF911F910F917E |
:1072E000FF90EF90DF90CF90BF90AF909F90089568 |
:1072F000CF93C1E00E94AA6B83E390E00E9438BC68 |
:1073000022E0AC0168E080E00E942F7120E04BE5B4 |
:1073100059E063E0862F0E94EE7020E04BE659E0D2 |
:1073200064E083E00E94EE7081E090E00E9438BC4F |
:1073300020E0AC0167E0822F0E942F71C13069F418 |
:1073400020E04BE759E063E08C2F0E94EE7020E0D4 |
:107350004DE759E064E08C2F0CC020E04FE759E086 |
:1073600063E081E00E94EE7020E041E859E064E0D3 |
:1073700081E00E94EE7080E80E9442388111C1E0F5 |
:1073800080E40E9442388111C2E080E10E944D38C1 |
:107390008823F9F08091D42F882359F4C13019F44F |
:1073A0000E949958A7CFC23009F0A4CF0E949659E5 |
:1073B000A1CF8091D42F813009F09CCFC13019F436 |
:1073C0000E94F45797CFC23009F094CF0E944159E0 |
:1073D00091CF80E20E944238882309F4AFCF80EF3A |
:1073E0000E944238CF910895EF920F931F930E940D |
:1073F000AA6B20E043E859E067E08CE00E94EE7061 |
:107400008091062E9091072E80509041A4F00E940A |
:107410007C7A80910A2E90910B2EA0910C2EB09127 |
:107420000D2EBC01CD010E94A0C4DC01CB019093C4 |
:10743000052E8093042E0E94A97B00E020E030E01E |
:107440004091042E5091052E65E0862F0E94D3783E |
:10745000202F48E859E065E08AE00E94EE70E02EB7 |
:1074600025E030E040916F375091703766E0802F13 |
:107470000E94347780E40E944238182F63E080E451 |
:107480000E948638182B49F080916F3790917037A1 |
:107490000A969093703780936F3780E80E94423845 |
:1074A000182F63E080E80E948638182B49F08091FD |
:1074B0006F37909170370A979093703780936F373A |
:1074C00080E20E944238882309F49ACF80EF0E941C |
:1074D00042381F910F91EF9008954AEA20E030E082 |
:1074E0002617370740F4FC018191480F2F5F3F4F6B |
:1074F00026173707C8F3842F992708952FB7F894D4 |
:107500003998389A9091B9009C7F9093B9009AE28B |
:107510009093B8001092CA2A1092C82A1092C72AD3 |
:10752000882379F0E1E6FEE28BE01082118212827C |
:10753000138214821582168217828150389687FF33 |
:10754000F4CF78942FBF08951092CA2A84E98093CB |
:10755000BC0080E88093BC001092BD001092BA007D |
:107560001092BB001092B9001092B8001092C62A77 |
:1075700080E00E947E3A1092BB0085E88093BC00B8 |
:107580008091C32A82608093C32A08951F920F922C |
:107590000FB60F9211242F933F938F939F93EF93E6 |
:1075A000FF938091CA2A282F33278F5F8093CA2A9E |
:1075B0002430310509F411C1253031059CF4213006 |
:1075C0003105F1F12230310524F421153105D9F0CE |
:1075D000A2C22230310509F476C02330310509F406 |
:1075E000E4C099C22630310509F4F1C126303105D5 |
:1075F0000CF434C12531310509F461C2263131055D |
:1076000009F45FC288C281E08093C62A8091C82AAB |
:107610008C3070F03093C22A2093C12A1092C82A6D |
:1076200085E08093CA2A8091C72A880F8D5A04C0AA |
:107630008091C82A880F8E5A8093BB0085E860C26B |
:107640008091C82AE82FFF2783E0EE0FFF1F8A955D |
:10765000E1F7EF59F14D81818093BB0085E880937C |
:10766000BC008091C82AE82FFF27EE0FFF1FEE0F06 |
:10767000FF1FEE0FFF1FEF59F14D808180FF93C078 |
:107680008091C82AE82FFF27EE0FFF1FEE0FFF1F84 |
:10769000EE0FFF1FEF59F14D8281882329F0809171 |
:1076A0000701873008F44DC28091C12A9091C22A07 |
:1076B000892B09F046C28091BF2A9091C02A892B5C |
:1076C00009F03FC270C08091C82A21E030E002C0BA |
:1076D000220F331F8A95E2F78091BF2A9091C02A2A |
:1076E00028233923232B79F08091C82AE82FFF27FC |
:1076F000EE0FFF1FEE0FFF1FEE0FFF1FEF59F14DB3 |
:1077000080E184830DC08091C82AE82FFF27EE0F07 |
:10771000FF1FEE0FFF1FEE0FFF1FEF59F14D1482F9 |
:107720008091C82AE82FFF27EE0FFF1FEE0FFF1FE3 |
:10773000EE0FFF1FEF59F14D8481282F3327220FC1 |
:10774000331F220F331F220F331F8091C82AE82FC7 |
:10775000FF2793E0EE0FFF1F9A95E1F7EF59F14DE8 |
:1077600082818770822B8093BB0085E88093BC0068 |
:107770002091C82A81E090E002C0880F991F2A95C5 |
:10778000E2F72091C12A3091C22A82239323892BC8 |
:1077900051F089E59EE29093CE2A8093CD2A88E02D |
:1077A0008093CF2ACEC184E087C1E091CD2AF091A9 |
:1077B000CE2A81918093BB0085E88093BC00F09332 |
:1077C000CE2AE093CD2A8091CF2A81508093CF2A70 |
:1077D000882309F4B6C183E06FC18091B90080337A |
:1077E00051F58091CB2A882329F48091C82A8F5F94 |
:1077F0008093CB2A8091C82AE82FFF2783E0EE0FE1 |
:10780000FF1F8A95E1F7EF59F14D838199278F7713 |
:1078100090708F3791057CF48091C82AE82FFF275C |
:10782000EE0FFF1FEE0FFF1FEE0FFF1FEF59F14D81 |
:1078300083818F5F83831092CA2A84E98093BC007E |
:107840008AE090E090930901809308018091C82A12 |
:107850008F5F8093C82A1092CA2A4CC18091B900C8 |
:107860008034C9F18091C72AE82FFF27EE0FFF1F50 |
:10787000EE0FFF1FEE0FFF1FEF59F14D83818F7742 |
:1078800083838091C72A8F5F8093C72A8091C72AFC |
:107890008C30A0F01092C72A1092C02A1092BF2AF2 |
:1078A0008091CC2A8F5F8093CC2A8C3038F0109254 |
:1078B000CC2A8091C32A8D7F8093C32A8091C32ACA |
:1078C00081608093C32A1092CA2A84E98093BC0005 |
:1078D0001092C62A75C08091C72AE82FFF27EE0FA5 |
:1078E000FF1FEE0FFF1FEE0FFF1FEF59F14D8381BA |
:1078F000806883838091C72AE82FFF27EE0FFF1F40 |
:10790000EE0FFF1FEE0FFF1FEF59F14D808180FF3B |
:1079100031C08091C72AE82FFF27EE0FFF1FEE0F1F |
:10792000FF1FEE0FFF1FEF59F14D8481992700973C |
:1079300051F04097E1F589E59EE29093CE2A80933D |
:10794000CD2A88E032C08091C72A9927880F991FD5 |
:10795000880F991F880F991F8A59914D9093CE2AAD |
:107960008093CD2A9091C72A8091CC2A9817E1F470 |
:1079700083E01BC08091C72A992733E0880F991FA5 |
:107980003A95E1F78A59914D9093CE2A8093CD2A6A |
:107990008091C32A81FD06C09091C72A8091CC2A8C |
:1079A000981711F482E001C081E08093CF2A809182 |
:1079B000CF2A813011F485E801C085EC8093BC00AA |
:1079C0008091CB2A8093C52A1092CB2ABAC0E0912D |
:1079D000CD2AF091CE2A8091BB0080838091CD2A60 |
:1079E0009091CE2A01969093CE2A8093CD2A8091B1 |
:1079F000CF2A81508093CF2A823010F085EC59C075 |
:107A0000813011F485E855C08091C32A81FF29C0D7 |
:107A10008091C72AE82FFF2723E0EE0FFF1F2A954A |
:107A2000E1F7EF59F14D86818A3F79F48091C72AB9 |
:107A3000E82FFF2793E0EE0FFF1F9A95E1F7EF592C |
:107A4000F14D8081816080830CC08091C72AE82F2E |
:107A5000FF2783E0EE0FFF1F8A95E1F7EF59F14D05 |
:107A600010828091C72A8F5F8093C72A8091C72A8E |
:107A70008C30A0F01092C72A1092C02A1092BF2A10 |
:107A80008091CC2A8F5F8093CC2A8C3038F0109272 |
:107A9000CC2A8091C32A8D7F8093C32A1092CA2A50 |
:107AA00084E98093BC008091C32A81608093C32ABB |
:107AB00046C08093BC0086E08093CA2A42C080E81A |
:107AC000BBCD1092CA2A84E98093BC001092C62ACA |
:107AD0008AE090E090930901809308018091C92A7F |
:107AE000823088F48091C92A8F5F8093C92A82E10D |
:107AF0008093CA2A8091C32A8E7F8093C32A85EA05 |
:107B00008093BC001EC01092C92A8091C32A816054 |
:107B10008093C32A16C01092CA2A84E98093BC00BD |
:107B20008091C32A81608093C32A8AE090E0909379 |
:107B30000901809308011092C82A1092C72A109256 |
:107B4000C62AFF91EF919F918F913F912F910F90B6 |
:107B50000FBE0F901F9018951F93CF93DF93182F90 |
:107B60008091C42A882319F081E090E097C01D30ED |
:107B700008F092C01123B1F0E12FFF2793E0EE0F40 |
:107B8000FF1F9A95E1F7EF59F14D359780813596B2 |
:107B900088230CF081C03897808180FD03C083E08A |
:107BA00090E07CC08091592E823019F084E090E002 |
:107BB00075C067E070E089E59EE20E946D3A9091A1 |
:107BC000602E891719F085E090E068C080ED97E09D |
:107BD0000E942038EC018091C32A80FD05C0CE01AF |
:107BE0000E9429388823B9F3112319F48FEF90E00C |
:107BF0000BC0212F33272150304081E090E002C09C |
:107C0000880F991F2A95E2F79093C22A8093C12A80 |
:107C1000A1E0B0E0E1E6FEE240E050E06BE0CD0143 |
:107C2000042E02C0880F991F0A94E2F72091C12AFE |
:107C30003091C22A82239323892B11F01182128260 |
:107C400061504F5F5F4F389667FFE9CF1092C82AA7 |
:107C50001092CA2A8091C32A8E7F8093C32A85EA14 |
:107C60008093BC008091C32A80FD05C0CE010E9494 |
:107C700029388823B9F38091C12A9091C22A892B8F |
:107C800029F0CE010E942938882311F38091C12A5E |
:107C90009091C22A009711F082E090E0DF91CF919D |
:107CA0001F91089581E090E008951F920F920FB602 |
:107CB0000F9211242F933F934F935F936F937F9372 |
:107CC0008F939F93AF93BF93EF93FF939091C800CF |
:107CD0002091CE009871E091932BEF5FEF77809128 |
:107CE000942BE81711F492E006C0E093932BFF2742 |
:107CF000EF5EF44D20839093952B8091D02A8130B4 |
:107D000031F40E943E57892B11F00E94CFBBFF91A6 |
:107D1000EF91BF91AF919F918F917F916F915F9103 |
:107D20004F913F912F910F900FBE0F901F9018957C |
:107D30001F920F920FB60F9211248F939F93EF9380 |
:107D4000FF939091912B8091922B981771F08091D5 |
:107D5000922B8F5F8F738093922BE82FFF27EF5228 |
:107D6000F54D80818093CE0005C08091C9008F7D44 |
:107D70008093C900FF91EF919F918F910F900FBE5B |
:107D80000F901F9018959C011092912B1092922B9E |
:107D90001092932B1092942B97FF04C082E0809353 |
:107DA000C8003F77832F99278093CD002093CC0084 |
:107DB00088E98093C90086E08093CA000895909175 |
:107DC000932B8091942B981719F480E091E00895FB |
:107DD0008091942B8F5F8F778093942BE82FFF27D0 |
:107DE000EF5EF44D20818091952B9927982F88275D |
:107DF000820F911D0895282F9091912B9F5F9F7363 |
:107E00008091922B9817E1F3E92FFF27EF52F54D60 |
:107E100020839093912B8091C90080628093C90048 |
:107E20008091952B9927982F8827820F911D08956F |
:107E3000CF93DF93EC018881882331F089910E94F0 |
:107E4000FB3E88818823D1F7DF91CF910895CF93AE |
:107E5000DF93EC01FC0121968491882339F00E9484 |
:107E6000FB3EFE01219684918823C9F7DF91CF91D3 |
:107E700008958091932B99272091942B821B91092F |
:107E800081589F4F6FE770E00E94E2C6089580918D |
:107E9000942B8093932B08951F920F920FB60F92FD |
:107EA00011240F931F932F933F934F935F936F93DF |
:107EB0007F938F939F93AF93BF93CF93EF93FF9352 |
:107EC00080919E2A853061F54091C6002091E32B78 |
:107ED0003091E42B8091E52B9091E62B281B390BF8 |
:107EE00037FF02C0205C3F4F2F3331050CF0EAC052 |
:107EF000E091E32BF091E42B40838091E32B909170 |
:107F0000E42B01969093E42B8093E32B8091E32B59 |
:107F10009091E42B2BE2833E920709F0D3C02DC051 |
:107F2000843091F54091C6002091E32B3091E42BF1 |
:107F30008091E52B9091E62B281B390B37FF02C06F |
:107F4000205C3F4F2F3331050CF0BCC0E091E32B98 |
:107F5000F091E42B40838091E32B9091E42B0196E8 |
:107F60009093E42B8093E32B8091E32B9091E42B6F |
:107F7000EBE2833E9E0709F0A5C0805490409093A9 |
:107F8000E42B8093E32B9EC0C091C6008091EF3D0F |
:107F9000882339F080910838882319F08C2F0E94AB |
:107FA000FB3E20919F2B222309F08CC04091A22BF5 |
:107FB000442371F4C33279F4C093C12E81E08093DD |
:107FC000A22B83E290E09093A12B8093A02B7AC008 |
:107FD000443B08F06AC02091A02B3091A12BE42FE4 |
:107FE000FF27CD3069F0EF53F14DC0834F5F4093D1 |
:107FF000A22B2C0F311D3093A12B2093A02B62C0FC |
:10800000DF01AF53B14D8D0102501040F801808166 |
:10801000281B3109BD0161507040FB018081281B84 |
:108020003109C9019F709093A12B8093A02B689474 |
:1080300015F8969587951694E1F7982F935C2F7312 |
:108040003070235CF8018081981709F5FB0180816D |
:108050002817E9F4CC934F5F40939E2B9091A02A70 |
:108060008091C32E9817F1F481E080939F2B80912B |
:10807000C32E8235B9F488E190E02CE00FB6F89475 |
:10808000A895809360000FBE209360000BC0809184 |
:10809000992B90919A2B019690939A2B8093992BE0 |
:1080A00010929F2B1092A22B0DC08091972B909134 |
:1080B000982B01969093982B8093972B2093A22B2B |
:1080C00020939F2BFF91EF91CF91BF91AF919F9103 |
:1080D0008F917F916F915F914F913F912F911F9160 |
:1080E0000F910F900FBE0F901F9018952091E32BCA |
:1080F0003091E42B8091E52B9091E62B28173907DE |
:1081000019F480E090E00895E091E52BF091E62BE2 |
:10811000E0818091E52B9091E62B01969093E62BE0 |
:108120008093E52B8091E52B9091E62B2BE2833E0B |
:10813000920731F4805490409093E62B8093E52B86 |
:108140008E2F99270895DC012091E32B3091E42BA9 |
:108150008091E52B9091E62B2817390719F480E0E0 |
:1081600090E00895E091E52BF091E62B80818C93CF |
:108170008091E52B9091E62B01969093E62B8093CE |
:10818000E52B8091E52B9091E62B2BE2833E920725 |
:1081900031F4805490409093E62B8093E52B81E05E |
:1081A00090E008959C01892F99278093C500209322 |
:1081B000C4008091C0008D7F8093C00086E08093D2 |
:1081C000C2008091C1008B7F8093C1008091C0006C |
:1081D00087FF03C08091C600F9CF8091C1008861FC |
:1081E0008093C1008091C10080688093C10083EAC0 |
:1081F0009BE29093E62B8093E52B8091E52B909169 |
:10820000E62B9093E42B8093E32B08958091C1009B |
:10821000877F8093C10023982B980895239A2B98E9 |
:108220008091C10088608093C1000895982F80914B |
:10823000C00085FFFCCF9093C6000895CF93DF93D5 |
:10824000EC018881882331F089910E941641888150 |
:108250008823D1F7DF91CF910895CF93DF93EC017D |
:10826000FC018491882349F0FE0184910E9416410B |
:108270002196FE0184918823B9F7DF91CF9108956B |
:108280008F929F92BF92CF92DF92EF92FF920F93C5 |
:108290001F93CF93DF93CDB7DEB72E859F85E888F8 |
:1082A000BB248824992483E28093942F9F59909330 |
:1082B000952F2093962F63E070E0EE2009F49CC088 |
:1082C000C988DA888E010B5E1F4FAB89BC89EA949E |
:1082D000109709F491C01097B9F0F601EB0DF11D5C |
:1082E000B3942081119791F4EE2049F1F8010E5FCB |
:1082F0001F4FD801C080D1800E5F1F4F0D90BC91E1 |
:10830000A02DBB24EA9402C020E019C01097B9F058 |
:10831000F601EB0DF11DB3944081119791F4EE201D |
:1083200041F1F8010E5F1F4FD801C080D1800E5F70 |
:108330001F4F0D90BC91A02DBB24EA9402C040E0D9 |
:1083400018C01097B1F0F601EB0DF11DB394F08059 |
:10835000119781F4EE2071F0F8013296D801CD909A |
:10836000DC908F010E5F1F4FA081B181BB24EA9486 |
:1083700001C0FF24FB01EC56F04D822F86958695B7 |
:10838000835C80836F5F7F4FFB01EC56F04D822F43 |
:1083900099278370907024E0880F991F2A95E1F740 |
:1083A00055279A0194E0369527959A95E1F7822B07 |
:1083B000835C80836F5F7F4FFB01EC56F04D4F7005 |
:1083C0005070440F551F440F551F8F2D992726E0DD |
:1083D000969587952A95E1F7842B835C80836F5F60 |
:1083E0007F4FFB01EC56F04D8FE3F8228DE3F80E42 |
:1083F000F0826F5F7F4F6CCF20E06115710569F0EF |
:10840000E22FFF27EC56F04D8081880E911C2F5FE4 |
:10841000822F99278617970798F394013F70FB01E5 |
:10842000EC56F04DC901A6E096958795AA95E1F71F |
:10843000835C80836F5F7F4FFB01EC56F04D2F73A1 |
:108440003070822F835C80836F5F7F4FFB01EC561F |
:10845000F04D8DE080836F5F7F4F10920A0120E026 |
:108460006115710589F08091C00085FFFCCFE22F76 |
:10847000FF27EC56F04D80818093C6002F5F822F3E |
:1084800099278617970778F381E080930A01DF9197 |
:10849000CF911F910F91FF90EF90DF90CF90BF9001 |
:1084A0009F908F900895FF920F931F93CF93DF9328 |
:1084B000CDB7DEB721970FB6F894DEBF0FBECDBFA4 |
:1084C000F82E062F142F0E940E41812F6AE00E9481 |
:1084D000C2C6898381E090E09F938F93CE0101967D |
:1084E0009F938F9381E08F930F93FF920E9440415F |
:1084F0008DB79EB707960FB6F8949EBF0FBE8DBF7F |
:1085000080910A018823E1F30E94064121960FB66B |
:10851000F894DEBF0FBECDBFDF91CF911F910F91B9 |
:10852000FF90089573E0672F30919E2B36503323D0 |
:1085300009F458C0E62FFF27EF53F14D80818D538A |
:108540006F5FE62FFF27EF53F14D40814D536F5F73 |
:10855000E62FFF27EF53F14DA081AD536F5FE62F5C |
:10856000FF27EF53F14D50815D536F5F31503F3F17 |
:10857000C9F1E72FFF27EF53F14D9927880F991F76 |
:10858000880F991F242F22952F70282B20837F5F1F |
:1085900031503F3F39F1E72FFF27EF53F14D842F43 |
:1085A00099278F709070B4E0880F991FBA95E1F702 |
:1085B0002A2F26952695282B20837F5F31503F3F19 |
:1085C00089F0E72FFF27EF53F14D8A2F992783700A |
:1085D000907046E0880F991F4A95E1F7582B508319 |
:1085E0007F5FA5CF84EC9EE290939D2B80939C2B84 |
:1085F000735070939B2B0895CF93C0919F2AC130E5 |
:10860000D1F48BE10E9416418BE10E94164185E571 |
:108610000E9416418AEA0E94164180E00E9416419B |
:10862000C0939E2A24EF31E084EF91E00197F1F7A7 |
:1086300021503040C9F7CF91089585E080939E2A5C |
:1086400024EF31E084EF91E00197F1F721503040C1 |
:10865000C9F708951F93CF93DF93CDB7DEB7219766 |
:108660000FB6F894DEBF0FBECDBF20919E2A2130F9 |
:1086700019F5198281E090E09F938F93CE010196C6 |
:108680009F938F932F9312E01F9385E78F930E9400 |
:10869000404110939E2A8DB79EB707960FB6F89467 |
:1086A0009EBF0FBE8DBF24EF31E084EF91E00197B4 |
:1086B000F1F721503040C9F721960FB6F894DEBF8C |
:1086C0000FBECDBFDF91CF911F910895CF93DF9360 |
:1086D000CDB7DEB721970FB6F894DEBF0FBECDBF82 |
:1086E00020919E2A213021F5298381E090E09F93FB |
:1086F0008F93CE0101969F938F932F9382E08F9358 |
:1087000085E78F930E94404183E080939E2A8DB736 |
:108710009EB707960FB6F8949EBF0FBE8DBF24EF8D |
:1087200031E084EF91E00197F1F721503040C9F733 |
:1087300021960FB6F894DEBF0FBECDBFDF91CF916B |
:108740000895CF93DF93CDB7DEB721970FB6F89496 |
:10875000DEBF0FBECDBF30919E2A313021F522E021 |
:10876000298381E090E09F938F93CE0101969F93A0 |
:108770008F933F932F9385E78F930E94404184E02E |
:1087800080939E2A8DB79EB707960FB6F8949EBF2A |
:108790000FBE8DBF24EF31E084EF91E00197F1F738 |
:1087A00021503040C9F721960FB6F894DEBF0FBEB6 |
:1087B000CDBFDF91CF910895882351F4A1E6BEE2A9 |
:1087C000FD01618312828F5F18968C30C8F30CC054 |
:1087D000E82FFF2783E0EE0FFF1F8A95E1F7EF599F |
:1087E000F14D3797619310828091C62A882319F042 |
:1087F0001092C62A08958093C82A8093CA2A80912D |
:10880000C32A8E7F8093C32A85EA8093BC00089593 |
:10881000CF92DF92EF920F931F93CF93DF9310E0ED |
:108820000E94AA6B1093C42A10933E2E612F8DE8EC |
:1088300099E00E94BE708091C32A82608093C32A0F |
:108840001093C72A612F812F0E94DC4381E090E0C2 |
:108850000E9420386C018091C32A80FD05C0C601AA |
:108860000E9429388823B9F381E090E00E942038E3 |
:108870006C0110E0C1E6DEE260E0812F0E94DC4383 |
:108880008091C32A80FD05C0C6010E942938882333 |
:10889000B9F38B8187FF7CC020E04BE959E061E0B0 |
:1088A000822F0E94EE7020E0412F61E082E10E9461 |
:1088B0009A7620E04AEA59E062E0822F0E94EE7048 |
:1088C00020E0488162E088E00E949A7620E043EB55 |
:1088D00059E062E08BE00E94EE7020E0498162E0A6 |
:1088E00082E10E949A7620E04BEB59E063E0822F10 |
:1088F0000E94EE7020E04A8163E088E00E949A7650 |
:1089000020E044EC59E063E08BE00E94EE7020E050 |
:108910004B8163E082E10E949A7620E04CEC59E0C2 |
:1089200064E0822F0E94EE7020E04C8164E088E0D9 |
:108930000E949A7620E045ED59E064E08BE00E94C9 |
:10894000EE7020E04D8164E082E10E949A7620E0A2 |
:108950004DED59E065E0822F0E94EE7020E04E81DF |
:1089600065E088E00E949A7620E046EE59E065E0F6 |
:108970008BE00E94EE708F81992787FD9095EE2401 |
:1089800001E023E030E0AC0165E082E10E94347751 |
:108990001F5F28961C3008F46FCFDF91CF911F9195 |
:1089A0000F91EF90DF90CF900895CF93DF93E82F52 |
:1089B000C5E7DFE280E1DE011D928A95E9F7EE234B |
:1089C00049F4862F992740E150E0BC01CE010E9476 |
:1089D0005BC204C0FF27EC58F04D608380E190E05B |
:1089E0009F938F93DF93CF9381E08F938F9384E74F |
:1089F0008F930E9440418DB79EB707960FB6F894AB |
:108A00009EBF0FBE8DBFDF91CF910895CF92DF92B1 |
:108A1000EF92FF920F931F93CF93DF93CDB7DEB703 |
:108A200027970FB6F894DEBF0FBECDBFF82E0E9479 |
:108A3000AA6B81E08093D12F8093D32F1092D22FF5 |
:108A40006AE0C62ED12CF816B9F40E94084420E042 |
:108A50004EEE59E067E08BE00E94EE7080E20E94EB |
:108A60004238882321F080EF0E94423876C380E1AB |
:108A70000E944238882359F30E94AA6B62E089EF72 |
:108A800099E00E94BE7020E04FE05AE062E0862F3D |
:108A90000E94EE7020E04AE15AE063E082E00E942A |
:108AA000EE7001E026E040E068E288E00E945F6E40 |
:108AB00083E090E00E9438BC20E0AC0167E0822FA8 |
:108AC0000E942F7120E045E25AE067E082E10E94B7 |
:108AD000EE7020E049E25AE062E0822F0E94EE70E0 |
:108AE000F01629F48BE091E00E94183F0DC082E05F |
:108AF000F81651F480919F2A813031F480919E2A9A |
:108B0000813011F40E942A430091D12F002379F57E |
:108B100080E40E944238882331F463E080E40E94BC |
:108B20008638882321F18091D22F8E3F00F58F5F08 |
:108B30008093D22F9927E02E23E030E0AC0163E050 |
:108B400089E00E94347782E0F81689F48091D22F70 |
:108B500090E7899FC00111246FEF70E00E94E2C688 |
:108B600001E026E0462F68E288E00E945F6E1091E7 |
:108B7000D12F112309F045C080E80E944238882394 |
:108B800031F463E080E80E9486388823D1F1909127 |
:108B9000D22F9923B1F182E0F81681F480E7989FF3 |
:108BA000C00111246FEF70E00E94E2C6CB01012FDB |
:108BB00026E0412F68E2885F0E945F6E8091D22F8D |
:108BC00081508093D22F9927E12E012F23E030E0AE |
:108BD000AC0163E089E00E94347782E0F81689F402 |
:108BE0008091D22F90E7899FC00111246FEF70E030 |
:108BF0000E94E2C601E026E0462F68E288E00E947B |
:108C00005F6E0091D12F0130E1F480E40E94423880 |
:108C1000882331F4602F80E40E948638882389F00D |
:108C20008091D32F803168F48F5F8093D32F992761 |
:108C3000EE240E2D23E030E0AC0162E089E00E94DA |
:108C400034770091D12F013041F580E80E944238FD |
:108C5000882331F4602F80E80E9486388823E9F069 |
:108C60008091D32F8823C9F081508093D32F8823FC |
:108C700051F09927EE240E2D23E030E0AC0162E0A4 |
:108C800089E00E9434772091D32F222331F44BE2E4 |
:108C90005AE062E089E00E94EE7080E10E94423872 |
:108CA000882309F47DC081E0F81609F053C0809153 |
:108CB000D22F882309F44EC01092D32F1092D22FB6 |
:108CC0000F2D26E040E068E288E00E945F6E45E1FB |
:108CD00065E080E00E944C718091D32F882351F091 |
:108CE0009927EE240E2D23E030E0AC0162E089E00C |
:108CF0000E9434772091D32F222331F44FE25AE09F |
:108D000062E089E00E94EE708091D22F9927EE24D4 |
:108D10000E2D23E030E0AC0163E089E00E9434775F |
:108D20006091D22F8091D32F0E94DC4381E090E0AC |
:108D30000E9420389093512E8093502E8091C32A08 |
:108D400080FD08C08091502E9091512E0E942938AC |
:108D50008823A1F30091D12F002391F4202F43E326 |
:108D60005AE062E0802F0E94EE70202F45E35AE027 |
:108D700063E0802F0E94EE7081E08093D12F10C0BD |
:108D800020E047E35AE062E0822F0E94EE7020E08C |
:108D900049E35AE063E0822F0E94EE701092D12FD7 |
:108DA00081E0F81609F0C3C16091D22F8091D32FD2 |
:108DB0000E94DC4381E090E00E9420389093512E85 |
:108DC0008093502E20E04BE35AE063E0822F0E9414 |
:108DD000EE708091D32FE82FFF2753E0EE0FFF1F97 |
:108DE0005A95E1F7E65AF14D80819927EE240E2D30 |
:108DF00023E030E0AC0163E08DE00E9434772E2D5B |
:108E000048E45AE064E08E2D0E94EE708091D32FEA |
:108E1000E82FFF2743E0EE0FFF1F4A95E1F7E25AE4 |
:108E2000F14D2E2D408164E08DE00E949A76809174 |
:108E3000D32FE82FFF2733E0EE0FFF1F3A95E1F71E |
:108E4000E25AF14D8081992723E030E0AC0164E0E3 |
:108E50008DE00E9434772E2D45E55AE065E08E2D99 |
:108E60000E94EE708091D32FE82FFF2723E0EE0FB2 |
:108E7000FF1F2A95E1F7E05AF14D8081992787FD80 |
:108E8000909523E030E0AC0165E08DE00E943477FE |
:108E90002E2D42E65AE066E08E2D0E94EE70809103 |
:108EA000D32FE82FFF2793E0EE0FFF1F9A95E1F7EE |
:108EB000E75AF14D2E2D408166E088E00E949A76B7 |
:108EC0002E2D4BE65AE066E08BE00E94EE7080911A |
:108ED000D32FE82FFF2783E0EE0FFF1F8A95E1F7DE |
:108EE000E45AF14D2E2D408166E082E10E949A768F |
:108EF0008091D32F282F3327F90113E0EE0FFF1FA6 |
:108F00001A95E1F7E65AF14D8081882309F402C1F0 |
:108F1000C114D10409F0FBC04AE050E0BE016F5F0C |
:108F20007F4FC90101970E9478C3CE0101960E942C |
:108F3000183F8FE591E00E94183F8091D32FE82FD2 |
:108F4000FF27B3E0EE0FFF1FBA95E1F7E75AF14DA7 |
:108F500080814AE050E0BE016F5F7F4F99270E94F9 |
:108F600078C3CE0101960E94183F8FE591E00E94E0 |
:108F7000183F8091D32FE82FFF27A3E0EE0FFF1FAC |
:108F8000AA95E1F7E65AF14D80814AE050E0BE0132 |
:108F90006F5F7F4F99270E9478C3CE0101960E9490 |
:108FA000183F8FE591E00E94183F8091D32FE82F62 |
:108FB000FF2773E0EE0FFF1F7A95E1F7E55AF14DB9 |
:108FC00080814AE050E0BE016F5F7F4F99270E9489 |
:108FD00078C3CE0101960E94183F8FE591E00E9470 |
:108FE000183F8091D32FE82FFF2763E0EE0FFF1F7C |
:108FF0006A95E1F7E45AF14D80814AE050E0BE0104 |
:109000006F5F7F4F99270E9478C3CE0101960E941F |
:10901000183F8FE591E00E94183F8091D32FE82FF1 |
:10902000FF2753E0EE0FFF1F5A95E1F7E35AF14D8A |
:1090300080814AE050E0BE016F5F7F4F99270E9418 |
:1090400078C3CE0101960E94183F8FE591E00E94FF |
:10905000183F8091D32FE82FFF2743E0EE0FFF1F2B |
:109060004A95E1F7E25AF14D80814AE050E0BE01B5 |
:109070006F5F7F4F99270E9478C3CE0101960E94AF |
:10908000183F8FE591E00E94183F8091D32FE82F81 |
:10909000FF2733E0EE0FFF1F3A95E1F7E15AF14D5C |
:1090A00080814AE050E0BE016F5F7F4F99270E94A8 |
:1090B00078C3CE0101960E94183F8FE591E00E948F |
:1090C000183F8091D32FE82FFF2723E0EE0FFF1FDB |
:1090D0002A95E1F7E05AF14D80814AE050E0BE0167 |
:1090E0006F5F7F4F992787FD90950E9478C3CE01CF |
:1090F00001960E94183F81E691E00E94183F83E6A6 |
:1091000091E00E94183F98ECC92ED12C03C008941E |
:10911000C108D1088091C32A80FD0FC08091502ED4 |
:109120009091512E0E9429388823A1F306C06091A6 |
:10913000D22F8091D32F0E94D54480E20E944238E2 |
:10914000882309F4E1CC80EF0E94423882E0F816CF |
:1091500021F460E0862F0E94D54427960FB6F8943C |
:10916000DEBF0FBECDBFDF91CF911F910F91FF905A |
:10917000EF90DF90CF900895439A1092E82B0895D6 |
:109180001F93CF9382B1886F82B90C988FEF84B907 |
:1091900088B1806988B987B18C6E87B93C9843984B |
:1091A0005E9A8AB1806F8AB9299A0E941A360E9403 |
:1091B000D3350E94F03511E010934F2E84E190E0FA |
:1091C0000E94D24084E190E00E94C33E812F0E9421 |
:1091D0007E3A789480E00E94F76B0E9476638091DB |
:1091E000CA37853070F081E08093CA372FE543E0BD |
:1091F00060E08091CA370E94EEA38093CA370E9434 |
:10920000D55F809180379927AA2797FDA095BA2F1F |
:10921000BC01CD010E94CEC4DC01CB0123E333E3CA |
:1092200043E250E4BC01CD010E94BBC5DC01CB018F |
:10923000BC01CD010E94A0C4DC01CB018093B3002E |
:1092400081E00E94F76B40E060E870E088EC90E01D |
:109250000E942A361092EF3D20E043E75AE061E099 |
:1092600084E00E947D6F20E04BE75AE062E084E0FA |
:109270000E947D6F86E090E00E9438BC20E0AC0147 |
:1092800064E0822F0E942F7187E090E00E9438BC3A |
:1092900020E0AC0165E0822F0E942F7120E43FE1C5 |
:1092A00084EF91E00197F1F721503040C9F7079919 |
:1092B000299828EE33E084EF91E00197F1F72150EF |
:1092C0003040C9F740E060E870E084EF91E00E9430 |
:1092D0002A3680EF0E9442380E94AA6B8091AD37F7 |
:1092E000813041F48091C937882321F48091D237AD |
:1092F0000E94FF4C0E94AA6B0E94BC488091A93733 |
:10930000813031F48091C837882311F40E94FF52D4 |
:109310000E94AA6B8091AD37813051F51091D42F06 |
:10932000112331F585E00E94B257C0918137C130D9 |
:1093300009F042C088E090E00E9438BC212FAC01C7 |
:10934000612F812F0E942F7189E090E00E9438BC2C |
:10935000212FAC016C2F812F0E942F7120E23EE45F |
:1093600084EF91E00197F1F721503040C9F724C014 |
:1093700086E00E94B257C0918137C130E9F488E09D |
:1093800090E00E9438BC20E0AC01622F822F0E9446 |
:109390002F718AE090E00E9438BC20E0AC016C2F75 |
:1093A000822F0E942F7120E23EE484EF91E001972A |
:1093B000F1F721503040C9F70E94AA6BCF911F915D |
:1093C00008958091B00083688093B0008091B100CF |
:1093D00081608093B10008951092B0001092B100A6 |
:1093E00008958091E82B882369F4439881E0809365 |
:1093F000E82B20E23EE484EF91E00197F1F7215061 |
:109400003040C9F70895992782309105C9F083301B |
:1094100091052CF4009761F0019769F0089584306C |
:109420009105A1F08430910574F0059791F00895AD |
:1094300087E092E002C081E890E00E94D240089567 |
:1094400080E490E0FACF8FE190E0F7CF84E190E004 |
:10945000F4CF8AE090E0F1CF992782309105C9F0EE |
:10946000833091052CF4009761F0019769F008951D |
:1094700084309105A1F08430910574F0059791F046 |
:10948000089587E092E002C081E890E00E94C33E28 |
:10949000089580E490E0FACF8FE190E0F7CF84E187 |
:1094A00090E0F4CF8AE090E0F1CF1F93182F20E0F6 |
:1094B00042E85AE063E0822F0E94267160E0812F2B |
:1094C0000E94C4761093EC2B40E060E470E084EFDF |
:1094D00091E00E942A3628E833E184EF91E0019779 |
:1094E000F1F721503040C9F71F9108950F931F9352 |
:1094F000CF938C01C0E00E9476408FEF0E9416410E |
:1095000082E00E9416418EEF0E941641802F0E9439 |
:10951000164124EF31E084EF91E00197F1F72150FB |
:109520003040C9F70E947640282F332748EE53E099 |
:1095300084EF91E00197F1F741505040C9F7CF5FB8 |
:109540002115310511F4CA3069F7CA3011F4CA0186 |
:109550000FC02630310519F08FEF90E009C060E0B0 |
:10956000822F0E94C4760E9476400E9476409927FE |
:10957000CF911F910F9108950F931F93CF93182FA1 |
:10958000062FC0E08FEF0E94164182E00E94164134 |
:10959000812F0E941641802F0E9416410E94764022 |
:1095A000482F552728EE33E084EF91E00197F1F73B |
:1095B00021503040C9F7CF5F4115510511F4CA3031 |
:1095C00069F746305105D1F020E044E95AE062E005 |
:1095D000822F0E94267140E060E470E088EE93E004 |
:1095E0000E942A3620E23EE484EF91E00197F1F7F1 |
:1095F00021503040C9F78FEF90E001C0C901CF91F1 |
:109600001F910F910895CF93DF93C82F0E941D43A0 |
:109610005E9820ED37E084EF91E00197F1F721505B |
:109620003040C9F70E94AA6B8C2F0E94034A20E0A9 |
:109630004FE95AE0622F822F0E94267188E790E05E |
:109640000E94764AEC0120E0482F622F82E10E94BE |
:109650009A76CE0101978E3F910538F481E0809390 |
:10966000ED2B8091D2378093EB2B209709F0D7C058 |
:1096700087E092E00E94D24020E043EB5AE061E0B4 |
:10968000822F0E94267188E790E00E94764AEC01C2 |
:1096900020E0482F61E082E10E949A76CE01019796 |
:1096A0008E3F910528F482E08093ED2B1092EB2BF6 |
:1096B000209709F581E890E00E94D24020E044EC38 |
:1096C0005AE062E0822F0E94267188E790E00E94B3 |
:1096D000764AEC0120E0482F62E082E10E949A760F |
:1096E000CE0101978E3F910530F482E08093ED2BFF |
:1096F00081E08093EB2B209701F580E490E00E94BD |
:10970000D24020E045ED5AE063E0822F0E942671AE |
:1097100088E790E00E94764AEC0120E0482F63E061 |
:1097200082E10E949A76CE0101978E3F910528F43E |
:1097300082E08093ED2B8093EB2B209709F58FE14E |
:1097400090E00E94D24020E047EE5AE064E0822F91 |
:109750000E94267188E790E00E94764AEC0120E0A2 |
:10976000482F64E082E10E949A76CE0101978E3FF5 |
:10977000910530F482E08093ED2B83E08093EB2B16 |
:10978000209709F584E190E00E94D24020E048EF64 |
:109790005AE065E0822F0E94267188E790E00E94DF |
:1097A000764AEC0120E0482F65E082E10E949A763B |
:1097B000CE0101978E3F910530F482E08093ED2B2E |
:1097C00084E08093EB2B209709F589E090E00E94DC |
:1097D000D24020E049E05BE066E0822F0E942671E3 |
:1097E00088E790E00E94764AEC0120E0482F66E08E |
:1097F00082E10E949A76CE0101978E3F910530F466 |
:1098000082E08093ED2B85E08093EB2B20E23EE419 |
:1098100084EF91E00197F1F721503040C9F720978C |
:10982000A1F40E94AA6B20E04BE15BE0622F822F43 |
:109830000E9426711092ED2B20E23EE484EF91E02D |
:109840000197F1F721503040C9F7CF3FD105D1F44E |
:109850000E94AA6B20E04BE25BE0622F822F0E9405 |
:10986000267140E060E470E088EE93E00E942A36C2 |
:1098700040E25EE484EF91E00197F1F741505040FF |
:10988000C9F7EA01CE0101978E3F910508F0B3C0F8 |
:109890000E94AA6B8091ED2B813039F420E040E4E6 |
:1098A0005BE0622F822F0E9426718091ED2B823027 |
:1098B00009F08FC01092C93720E04EE45BE0622FC0 |
:1098C000822F0E9426716091D23783E00E94BC4AA9 |
:1098D000892BC1F020E044E65BE061E0822F0E942A |
:1098E000267140E060E470E088EE93E00E942A3642 |
:1098F00020E23EE484EF91E00197F1F721503040FF |
:10990000C9F720C020E137E284EF91E00197F1F739 |
:1099100021503040C9F720E045E75BE061E0822F4D |
:109920000E94267120E047E85BE062E0822F0E94FF |
:10993000267120E23EE484EF91E00197F1F7215097 |
:109940003040C9F76091D2378EE40E94BC4A892B1F |
:10995000C1F020E046E95BE063E0822F0E942671BF |
:1099600040E060E470E088EE93E00E942A3620E256 |
:109970003EE484EF91E00197F1F721503040C9F7C0 |
:1099800020C020E137E284EF91E00197F1F7215008 |
:109990003040C9F720E049EA5BE061E0822F0E9495 |
:1099A000267120E048EB5BE062E0822F0E94267186 |
:1099B00020E23EE484EF91E00197F1F7215030403E |
:1099C000C9F78091D2370E94034A8091D2378093A1 |
:1099D000E92B45E161E080E00E944C7120E047EC1A |
:1099E0005BE061E0822F0E94267120E04C2F61E055 |
:1099F00089E00E949A765E9ADF91CF910895CF9385 |
:109A0000C0E085E00E94B2578091E92B0E94034B91 |
:109A10008091ED2B882309F49BC12C2F40ED5BE056 |
:109A200062E08C2F0E9426715E9820ED37E084EF73 |
:109A300091E00197F1F721503040C9F70E941D4392 |
:109A40006EE781E50E94BC4A892B41F0C1E020E02D |
:109A500044EE5BE064E0822F0E9426716091D9376A |
:109A600080E00E94BC4A892B19F081E00E94554A8F |
:109A70008C2FCF5F20E046EE5BE064E00E94267111 |
:109A80006091D9378BE40E94BC4A892B19F082E09F |
:109A90000E94554A8C2FCF5F20E048EE5BE064E0E7 |
:109AA0000E9426716091D93781E00E94BC4A892BBF |
:109AB00019F083E00E94554A8C2FCF5F20E04AEED8 |
:109AC0005BE064E00E9426716091D9378CE40E94CB |
:109AD000BC4A892B19F084E00E94554A8C2FCF5F35 |
:109AE00020E04CEE5BE064E00E94267160E08DE0D7 |
:109AF0000E94BC4A892B19F085E00E94554A8C2FA0 |
:109B0000CF5F20E04EEE5BE064E00E94267163E0F0 |
:109B100082E00E94BC4A892B19F086E00E94554AD7 |
:109B20008C2FCF5F20E040EF5BE064E00E94267165 |
:109B30006091A53785E00E94BC4A892B19F087E027 |
:109B40000E94554A8C2FCF5F20E042EF5BE064E03B |
:109B50000E9426716091A53780E50E94BC4A892B3E |
:109B600019F088E00E94554A8C2FCF5F20E044EF27 |
:109B70005BE064E00E9426716091AB3789E00E944F |
:109B8000BC4A892B19F089E00E94554A8C2FCF5F7F |
:109B900020E046EF5BE064E00E9426716091AB3705 |
:109BA00084E50E94BC4A892B19F08AE00E94554A3C |
:109BB0008C2FCF5F20E048EF5BE064E00E942671CD |
:109BC0006091D13784E00E94BC4A892B19F08BE068 |
:109BD0000E94554A8C2FCF5F20E04AEF5BE064E0A3 |
:109BE0000E9426716091D1378FE40E94BC4A892B74 |
:109BF00019F08CE00E94554A8C2FCF5F20E04CEF8B |
:109C00005BE064E00E94267161E088E00E94BC4A4B |
:109C1000892B19F08DE00E94554A8C2FCF5F20E0F0 |
:109C20004EEF5BE064E00E94267161E08BE00E94F1 |
:109C3000BC4A892B19F08EE00E94554A8C2FCF5FC9 |
:109C400020E040E05CE064E00E9426716091AA3769 |
:109C500086E00E94BC4A892B19F08FE00E94554A89 |
:109C60008C2FCF5F20E042E05CE064E00E94267130 |
:109C70006091AA3781E50E94BC4A892B19F08FE0D8 |
:109C80000E94554A8C2FCF5F20E044E05CE064E006 |
:109C90000E9426716091EA2B83E00E94BC4A892BC6 |
:109CA00019F080E10E94554A8C2FCF5F20E046E0FA |
:109CB0005CE064E00E9426716091EA2B8EE40E94D1 |
:109CC000BC4A892B19F081E10E94554A20E048E006 |
:109CD0005CE064E08C2F0E9426715E9A8091EC2BF0 |
:109CE0008823E9F020E04AE05CE062E0822F0E94F5 |
:109CF000267160E08091EC2B0E94C47640E060E425 |
:109D000070E088EE93E00E942A3620E23EE484EF81 |
:109D100091E00197F1F721503040C9F708C0282F92 |
:109D20004CE15CE062E00E9426710E944C5F8091F1 |
:109D3000D2370E94034A8091D2378093E92B20E2E8 |
:109D40003EE484EF91E00197F1F721503040C9F7EC |
:109D5000CF910895CF93DF93EA0132E020E02617F8 |
:109D6000A0F44EEFDC018C9187FF05C0FE01E30FEC |
:109D7000F11D40833F5FFE01E30FF11D8D918F7751 |
:109D800080833F5F2F5F261770F3832F9927FC0195 |
:109D9000EC0FFD1F10822FEF288332503983DF91A3 |
:109DA000CF9108958091ED2B823041F487E092E0CD |
:109DB0000E94D24087E092E00E94C33E0E94AA6BBC |
:109DC0005E9820E04EE25CE0622F822F0E942671B6 |
:109DD00020E044E45CE061E0822F0E94267120E0F4 |
:109DE00049E55CE062E0822F0E94267120E040E6B7 |
:109DF0005CE063E0822F0E94267120E041E75CE096 |
:109E000067E081E10E9426710E94DF3E90FF08C05A |
:109E10000E9476409927009729F00E94FB3E02C0DD |
:109E20000E94164180E10E944238882369F35E9ABD |
:109E300008950E94AA6B20E046E75CE0622F822F23 |
:109E40000E94267120E044E85CE061E0822F0E94DD |
:109E5000267120E049E95CE062E0822F0E942671D1 |
:109E600020E04DEA5CE063E0822F0E94267120E052 |
:109E700045EB5CE067E081E10E9426710E94DF3ED5 |
:109E800090FF08C00E9476409927009729F00E9411 |
:109E9000FB3E02C00E94164180E10E9442388823A6 |
:109EA00069F30895CF93DF93AC0120E030E02817E9 |
:109EB000390764F4A8E8B3E1C0E0D0E0CD01019730 |
:109EC000F1F72F5F3F4F24173507C4F3DF91CF9190 |
:109ED000089522C00E94DF3E9C01207042E02030A5 |
:109EE000340779F042E02130340720F4205031402B |
:109EF000C9F00DC044E02030340719F0205038403C |
:109F000031F48091EE2B8F5F8093EE2B0895682FB4 |
:109F100084EF9DE20E94306784EF9DE20E94F66626 |
:109F20008823C1F20895BF92CF92DF92EF92FF9201 |
:109F30000F931F93CF93DF93CDB7DEB721970FB663 |
:109F4000F894DEBF0FBECDBF8C01B62E8091F22BF0 |
:109F5000982F8F5F8093F22B20E04AEB5CE061E06A |
:109F6000892F0E94EE70CC24CB1408F053C07801E6 |
:109F7000F70180810E94FB3E892B09F44BC0409180 |
:109F80006701442351F424EF31E084EF91E001971D |
:109F9000F1F721503040C9F702C0413011F0433091 |
:109FA00029F488E893E10197F1F72DC0423059F583 |
:109FB000DD2400E010E006C00E94694F88E893E1CC |
:109FC0000197F1F7C8010F5F1F4F893C910530F4ED |
:109FD00084EF9DE20E94EB66882371F7BE016F5FFC |
:109FE0007F4F84EF9DE20E9404678981F701908191 |
:109FF000891749F0892F0E94FB3E892B59F0D39491 |
:10A00000F2E0FD15B0F6C3940894E11CF11CCB14EA |
:10A0100008F4AECF21960FB6F894DEBF0FBECDBFC9 |
:10A02000DF91CF911F910F91FF90EF90DF90CF9034 |
:10A03000BF900895AF92BF92CF92DF92EF92FF92BE |
:10A040000F931F93CF93DF93CDB7DEB764970FB60F |
:10A05000F894DEBF0FBECDBFD82E7B0100E010E02C |
:10A060009927AA27BB27FC01479708F09BC0EA5B0A |
:10A07000FF4FEE0FFF1F0590F491E02D09946CEB5C |
:10A080007CE0CE0101960E9435C2DE011596E4ED1A |
:10A09000F7E393E081918D93915097FFFBCF198661 |
:10A0A0007EC061EC7CE0CE0101960E9435C208EED4 |
:10A0B00013E07AC066EC7CE06EC06BEC7CE06BC0B9 |
:10A0C00060ED7CE068C065ED7CE065C06AED7CE039 |
:10A0D00062C06FED7CE05FC064EE7CE05CC069EE66 |
:10A0E0007CE059C06EEE7CE056C063EF7CE053C06C |
:10A0F00068EF7CE050C06BEF7CE04DC06FEF7CE020 |
:10A100004AC063E07DE047C068E07DE0CE01019693 |
:10A110000E9435C2FE01319601900020E9F7319787 |
:10A120008CE0D7010D9001928A95E1F7198A37C02A |
:10A130006DE07DE030C062E17DE0CE0101960E94DD |
:10A1400035C20CEA1DE030C067E17DE002C06CE181 |
:10A150007DE0CE0101960E9435C208EB1BE024C0D1 |
:10A1600061E27DE0CE0101960E9435C220E090912F |
:10A17000113E291748F4DE011596E5E7F7E38191D2 |
:10A180008D932F5F2917D8F3FE01E90FF11D15827A |
:10A1900006C066E27DE0CE0101960E9435C204E66B |
:10A1A00010E002C0C8019FC16BE27DE0CE010196C4 |
:10A1B0000E942AC20E94694F84EF9DE20E94576765 |
:10A1C000DE011196FD0101900020E9F73197EA1BAD |
:10A1D000FB0B6E2FCD010E94934FB1E1DB1609F00E |
:10A1E00041C0C801AA2797FDA095BA2FBC01CD0197 |
:10A1F0000E94CEC45B016C0120E030E44CE955E4E0 |
:10A200000E94BBC57B018C0120E030E040E85FE3A9 |
:10A210000E942CC487FD1EC120E03FEF4FE757E4AA |
:10A22000C801B7010E94B7C518160CF03AC120E06A |
:10A2300030E040E251E4C601B5010E94BBC5DC013B |
:10A24000CB01BC01CD010E94A0C4DC01CB01FC010B |
:10A25000892B09F42FC184EF91E00197F1F7319731 |
:10A26000D1F728C120E1D21609F041C0C801AA27C0 |
:10A2700097FDA095BA2FBC01CD010E94CEC45B0111 |
:10A280006C0120E030E44CE955E40E94BBC57B0141 |
:10A290008C0120E030E040E85FE30E942CC487FDA1 |
:10A2A000D9C020E03FEF4FE757E4C801B7010E9453 |
:10A2B000B7C518160CF0F5C020E030E040E251E4DC |
:10A2C000C601B5010E94BBC5DC01CB01BC01CD01BB |
:10A2D0000E94A0C4DC01CB01FC01892B09F4EAC077 |
:10A2E00084EF91E00197F1F73197D1F7E3C083E173 |
:10A2F000D81609F041C0C801AA2797FDA095BA2F2A |
:10A30000BC01CD010E94CEC45B016C0120E030E4B1 |
:10A310004CE955E40E94BBC57B018C0120E030E094 |
:10A3200040E85FE30E942CC487FD94C020E03FEF2B |
:10A330004FE757E4C801B7010E94B7C518160CF0E3 |
:10A34000B0C020E030E040E251E4C601B5010E9417 |
:10A35000BBC5DC01CB01BC01CD010E94A0C4DC0166 |
:10A36000CB01FC01892B09F4A5C084EF91E0019792 |
:10A37000F1F73197D1F79EC0A2E1DA1609F041C09A |
:10A38000C801AA2797FDA095BA2FBC01CD010E9454 |
:10A39000CEC45B016C0120E030E44CE955E40E943E |
:10A3A000BBC57B018C0120E030E040E85FE30E9408 |
:10A3B0002CC487FD4FC020E03FEF4FE757E4C801B2 |
:10A3C000B7010E94B7C518160CF06BC020E030E052 |
:10A3D00040E251E4C601B5010E94BBC5DC01CB01DE |
:10A3E000BC01CD010E94A0C4DC01CB01FC01892B82 |
:10A3F00009F460C084EF91E00197F1F73197D1F74C |
:10A4000059C081E0E82EF12C0E94694F6DE27DE099 |
:10A4100084EF9DE20E941568882309F44EC0C801AC |
:10A42000AA2797FDA095BA2FBC01CD010E94CEC4EA |
:10A430005B016C0120E030E44CE955E40E94BBC5AF |
:10A440007B018C0120E030E040E85FE30E942CC4F7 |
:10A4500088231CF4E1E0F0E02BC020E03FEF4FE761 |
:10A4600057E4C801B7010E94B7C51816D4F420E01C |
:10A4700030E040E251E4C601B5010E94BBC5DC01F9 |
:10A48000CB01BC01CD010E94A0C4DC01CB01FC01C9 |
:10A49000892B81F084EF91E00197F1F73197D1F7A3 |
:10A4A00009C0C801B7010E94A0C4DC01CB01FC01B6 |
:10A4B0003197F1F781E090E016C062E37DE084EF30 |
:10A4C0009DE20E941568882361F481E090E00E947B |
:10A4D000524FC7010894E11CF11C815D974008F4BC |
:10A4E00093CF80E090E064960FB6F894DEBF0FBE85 |
:10A4F000CDBFDF91CF911F910F91FF90EF90DF9033 |
:10A50000CF90BF90AF900895CF9310926701C0E0B5 |
:10A5100060E070E080E00E941A50892B19F4CF5F50 |
:10A52000C230B0F382E080936701CF910895CF935A |
:10A53000DF93C1E0D0E00E94694F81E090E00E948B |
:10A54000524FCE012196C397B0F36AE37DE084EFCA |
:10A550009DE20E941568DF91CF9108950F931F939C |
:10A56000CF93DF938C01C1E0D0E00E94694F6DE38F |
:10A570007DE084EF9DE20E9415688823F9F468E489 |
:10A580007DE084EF9DE20E941568882379F028EE33 |
:10A5900033E084EF91E00197F1F721503040C9F7A3 |
:10A5A00081E08093670181E090E024C060E57DE078 |
:10A5B00084EF9DE20E941568882351F00E94975213 |
:10A5C0000E94845282E08093670182E090E012C092 |
:10A5D00080E090E00115110511F081E090E00E940B |
:10A5E000524FCE0121960817190708F0BECF80916F |
:10A5F00067019927DF91CF911F910F9108951F93C4 |
:10A60000CF93DF9310E01093F22B0E94F1490E9448 |
:10A61000AA6B212F4AE65DE0612F812F0E94EE7028 |
:10A620009AE0EEE7F7E380813197803209F0F6C0D7 |
:10A630009150C9F784E190E00E94C33E40E052E0AF |
:10A6400064EF7BE284EF9DE20E94DD66C8EED3E01A |
:10A6500084EF91E00197F1F72197D1F784EF9DE224 |
:10A660000E945767BE0180E00E941A5083E08093E9 |
:10A670006701BE0183E10E941A50BE0182E10E947F |
:10A680001A50BE0180E00E941A50892B09F06BC05D |
:10A6900080E490E00E94C33EC8EED3E084EF91E0F6 |
:10A6A0000197F1F72197D1F7BE0180E00E941A507F |
:10A6B000BE0182E10E941A50BE0183E10E941A503D |
:10A6C000BE0180E00E941A50892B39F0BE0180E063 |
:10A6D0000E941A50892B09F046C081E890E00E9440 |
:10A6E000C33EC8EED3E084EF91E00197F1F72197E4 |
:10A6F000D1F7BE0180E00E941A50BE0182E10E94A3 |
:10A700001A50BE0183E10E941A50BE0180E00E94EF |
:10A710001A50BE0180E00E941A50892B21F583E077 |
:10A7200091E00E94C33EC8EED3E084EF91E0019730 |
:10A73000F1F72197D1F7BE0180E00E941A50BE01C7 |
:10A7400082E10E941A50BE0183E10E941A50BE01AC |
:10A7500080E00E941A50BE0180E00E941A50EC0175 |
:10A76000892B09F45EC082E08093670160E070E0AD |
:10A770008EE00E941A50892B09F411E084E190E0E8 |
:10A780000E94C33EC8EED3E084EF91E00197F1F759 |
:10A790002197D1F7BE0183E00E941A50892B09F45A |
:10A7A00011E0BE0188E00E941A50892B09F411E0E3 |
:10A7B000BE0189E00E941A50892B09F411E0BE0104 |
:10A7C00085E10E941A50892B09F411E0C8EBDBE007 |
:10A7D00084EF91E00197F1F72197D1F7BE0186E16F |
:10A7E0000E941A50892B09F411E0BE0181E10E94F8 |
:10A7F0001A5083E080936701BE0180E10E941A50E5 |
:10A8000081E0809368010E94BC48112361F40E949A |
:10A810005F5F0E94725F61E070E006C09093113E3E |
:10A8200009CF0E94BC48BE01CB01DF91CF911F919F |
:10A830000895CF93C82F80916801C81719F481E05B |
:10A8400090E038C0CC2389F460E070E087E00E949B |
:10A850001A50892B31F1C093680160E070E086E006 |
:10A860000E941A500E94855F1CC0C130D1F460E084 |
:10A8700070E088E00E941A50892B11F0C0936801A3 |
:10A8800060E070E081E10E941A5083E080936701EC |
:10A8900060E070E080E10E941A50C09368010E945D |
:10A8A000725F20E030E080916801C81711F421E068 |
:10A8B00030E0C901CF9108959F92AF92BF92CF929D |
:10A8C000DF92EF92FF920F931F93CF93DF93CDB759 |
:10A8D000DEB721970FB6F894DEBF0FBECDBF5C0187 |
:10A8E000962E8A011982E98091E0C92ED12C01159A |
:10A8F000110509F444C0E91419F481E090E041C065 |
:10A900000E94694F84EF9DE20E94EB66882361F507 |
:10A9100080E090E00E94AE52813089F5011511056A |
:10A9200011F400ED17E084EF9DE20E94EB668823AE |
:10A93000D9F4F980FF2079F4BE016F5F7F4F84EF77 |
:10A940009DE20E9404678981891511F0F9820CC08B |
:10A950000053184F09C0C5018E0D911DBC0184EF35 |
:10A960009DE20E940467E39488E893E10197F1F780 |
:10A97000C6010894C11CD11C029708F4B8CF80E02E |
:10A9800090E021960FB6F894DEBF0FBECDBFDF91E9 |
:10A99000CF911F910F91FF90EF90DF90CF90BF90DC |
:10A9A000AF909F9008950F931F93CF93DF93CDB7F0 |
:10A9B000DEB721970FB6F894DEBF0FBECDBF8C0176 |
:10A9C000698380E090E00E94AE52823019F480E00A |
:10A9D00090E013C061E0CE0101960E94934F69811F |
:10A9E000C8010E94934F00E010E0C8010E94AE52DF |
:10A9F000813011F401E010E0C80121960FB6F894FF |
:10AA0000DEBF0FBECDBFDF91CF911F910F91089593 |
:10AA1000CF93DF93EC0140E052E064EF7BE284EF00 |
:10AA20009DE20E94DD660E94694F84EF9DE20E94D4 |
:10AA3000576780E090E00E94AE52813019F480E0C8 |
:10AA400090E01EC00E9484520E948452BE0184E0A5 |
:10AA50000E941A500097A1F00E94845260E070E0BA |
:10AA600081E00E941A50009759F0C0E0D0E080E6E3 |
:10AA70009AEE0E94AE52813011F4C1E0D0E0CE01D6 |
:10AA8000DF91CF910895FF920F931F93CF93DF93A0 |
:10AA9000CDB7DEB721970FB6F894DEBF0FBECDBF9E |
:10AAA00080E090E00E94AE52823059F1FF248BE2A8 |
:10AAB000898361E0CE0101960E94934F00E117E285 |
:10AAC00084EF91E00197F1F701501040C9F7F3943A |
:10AAD00083E08F1560F782E080936701B8010E94E0 |
:10AAE0001A50009731F0B80183E00E941A50009785 |
:10AAF00011F4BC010EC080E197E20E94AE52823098 |
:10AB000039F484EF9DE20E94576761E070E001C074 |
:10AB1000B801CB0121960FB6F894DEBF0FBECDBFB2 |
:10AB2000DF91CF911F910F91FF900895CF93AC01CA |
:10AB3000C0E02C2FFC0180818D3231F483818D3275 |
:10AB400019F4C22FC45004C02F5F3196283298F3F5 |
:10AB5000DB019A019DE0F901EC0FF11D80818D323E |
:10AB600009F4CF5FF901EC0FF11D80818D939150B5 |
:10AB70002F5F3F4F97FFEFCFCF91089540E0DB016C |
:10AB8000FC019081903219F48181803229F09D93EB |
:10AB90004F5F31964E30A8F308954F925F926F92B7 |
:10ABA0007F928F929F92AF92BF92CF92DF92EF925D |
:10ABB000FF920F931F93CF93DF93CDB7DEB7CF5F95 |
:10ABC000D0400FB6F894DEBF0FBECDBF60E070E09E |
:10ABD00085E00E941A50009741F49CC084EF9DE2EA |
:10ABE0000E94576781E090E095C02E010894411CB7 |
:10ABF000511C42016624772440E6A42E4DE6B42E73 |
:10AC000063010E94694F0894A108B1080894C11C0F |
:10AC1000D11C88E893E10197F1F784EF9DE20E944F |
:10AC2000E766EE240E2D25E030E0AC0165E08E2DC8 |
:10AC30000E94347788EEC81683E0D80679F48091B4 |
:10AC4000F22B982F8F5F8093F22B2E2D4EE75DE035 |
:10AC500061E0892F0E94EE70CC24DD2484EF9DE218 |
:10AC60000E94F666882361F4A114B10451F660E8ED |
:10AC70007DE084EF9DE20E941568882309F4C1CF2E |
:10AC8000AA24BB243FC0B40184EF9DE20E94046764 |
:10AC90000894811C911C63E97DE084EF9DE20E9491 |
:10ACA0000F68882381F3F40110824201898188238F |
:10ACB00049F166E97DE0C2010E943CC2892B09F09E |
:10ACC0008DCF8501060D171D36E0E32E31E3F32EFF |
:10ACD000E00EF11E24E0C22ED12CCC0EDD1EB701F9 |
:10ACE000C6010E94BE55F7011686065E1E4CB801CD |
:10ACF000C6010E9496550894611C711C81E290E087 |
:10AD0000A80EB91E84EF9DE20E94EB66882319F21B |
:10AD100080E090E0C150DF4F0FB6F894DEBF0FBE69 |
:10AD2000CDBFDF91CF911F910F91FF90EF90DF90FA |
:10AD3000CF90BF90AF909F908F907F906F905F90DB |
:10AD40004F900895CF93DF9340E052E064EF7BE2B1 |
:10AD500084EF9DE20E94DD66C8EED3E084EF91E0CF |
:10AD60000197F1F72197D1F70E94694F84EF9DE297 |
:10AD70000E94576783E080936701BE0183E10E94D0 |
:10AD80001A5082E080936701BE0182E10E941A504E |
:10AD900080E00E9419540E94855FDF91CF91089551 |
:10ADA000CF93DF93CDB7DEB7C056D0400FB6F8943F |
:10ADB000DEBF0FBECDBF20E04CE050E0822F9927D0 |
:10ADC000849FF001859FF00D949FF00D1124EC0FEE |
:10ADD000FD1F31968BE01192815087FFFCCF2F5FD2 |
:10ADE000283060F3CE0101960E94CD55892BE1F108 |
:10ADF0001092EF2B60E0962F20E030E0A901903117 |
:10AE000088F5F901E40FF51FEA5FFE4C8489882379 |
:10AE100009F585898823F1F486898823D9F48789FF |
:10AE20008823C1F4808D8823A9F4818D882391F42F |
:10AE3000828D882379F4838D882361F4848D88231F |
:10AE400049F4858D882331F4868D882319F4878D04 |
:10AE5000882341F06F5F9F5F4F5F5F4F2F5D3F4FD4 |
:10AE6000983068F26093EF2BC05ADF4F0FB6F8941A |
:10AE7000DEBF0FBECDBFDF91CF910895CF93DF939B |
:10AE8000CDB7DEB721970FB6F894DEBF0FBECDBFAA |
:10AE90000E94694F84EF9DE20E94EB66882309F0CF |
:10AEA00056C080E090E00E94AE52813019F080E000 |
:10AEB00090E04FC084EF9DE20E94EB66882309F08A |
:10AEC00046C0BE016F5F7F4F84EF9DE20E94046722 |
:10AED0002091F32B2223D9F539818091660138170F |
:10AEE00071F480916901882351F02093690186ED06 |
:10AEF0009FE290936B0180936A01209305318091CA |
:10AF000069018823A1F4E0916A01F0916B0130831B |
:10AF1000809105318F5F8093053199818091650122 |
:10AF2000981729F481E0809369018093F32B809135 |
:10AF30006A0190916B01019690936B0180936A0175 |
:10AF400080910531863919F481E08093690181E0AF |
:10AF500090E021960FB6F894DEBF0FBECDBFDF9113 |
:10AF6000CF910895429A289A469A459A9927823015 |
:10AF7000910561F0833091051CF4892B01F108954E |
:10AF800085309105C1F00697C1F008958091C90000 |
:10AF90008F7E8093C9008091C900877F8093C9000C |
:10AFA0008091C9008F778093C900529853985A981E |
:10AFB0005B98429808954598089546980895809121 |
:10AFC000C9008F7E8093C9008091C900877F8093DC |
:10AFD000C9008091C9008F778093C9005298539817 |
:10AFE0005A985B9828980895CF930E94AA6BC091B5 |
:10AFF000A937C13009F057C080E490E00E9438BC06 |
:10B0000022E0AC0160E0862F0E942F7181E490E085 |
:10B010000E9438BC20E0AC016C2F822F0E942F715F |
:10B0200082E490E00E9438BC20E0AC0163E0822F13 |
:10B030000E942F7183E490E00E9438BC20E0AC01B4 |
:10B0400064E0822F0E942F7189E490E00E9438BC56 |
:10B0500020E0AC0165E0822F0E942F718DE290E02C |
:10B060000E9438BC20E0AC0167E08CE00E942F71A8 |
:10B070000E94F14982E00E94B2570E94A97B80E2BF |
:10B080000E9442388823C9F380EF0E9442388091A1 |
:10B09000D42F813011F486E001C085E00E94B257C0 |
:10B0A0000E94BC4844C08EE390E00E9438BC20E07F |
:10B0B000AC0161E0822F0E942F718FE390E00E942B |
:10B0C00038BC20E0AC0161E0822F0E942F7189E33F |
:10B0D00090E00E9438BC20E0AC0162E0822F0E9428 |
:10B0E0002F718AE390E00E9438BC20E0AC0163E05D |
:10B0F000822F0E942F718BE390E00E9438BC20E0E9 |
:10B10000AC0164E0822F0E942F718CE190E00E94DC |
:10B1100038BC20E0AC0167E08CE00E942F7180E237 |
:10B120000E9442388823D9F380EF0E944238CF91A1 |
:10B1300008950E94AA6B80E490E00E9438BC22E04F |
:10B14000AC0160E0862F0E942F7184E490E00E94A1 |
:10B1500038BC22E0AC0161E080E00E942F7182E403 |
:10B1600090E00E9438BC20E0AC0163E0822F0E9496 |
:10B170002F7185E490E00E9438BC20E0AC0164E0CF |
:10B18000822F0E942F7189E490E00E9438BC20E059 |
:10B19000AC0165E0822F0E942F718DE290E00E9449 |
:10B1A00038BC20E0AC0167E08CE00E942F710E9467 |
:10B1B000F14980E00E94B2570E94A97B80E20E9480 |
:10B1C00042388823C9F380EF0E9442388091D42FFF |
:10B1D000813011F486E001C085E00E94B2570E94E0 |
:10B1E000BC4808950E94AA6B22E042EA5DE060E05C |
:10B1F000862F0E94EE7022E048EB5DE061E080E087 |
:10B200000E94EE7020E04EEC5DE063E0822F0E9431 |
:10B21000EE7020E044EE5DE064E0822F0E94EE706C |
:10B2200020E04AEF5DE065E0822F0E94EE7020E0B2 |
:10B2300040E15EE066E0822F0E94EE708DE290E0D9 |
:10B240000E9438BC20E0AC0167E08CE00E942F71C6 |
:10B250000E94F14982E00E94B25780E20E94423887 |
:10B260008823D9F380EF0E9442388091D42F813017 |
:10B2700011F486E001C085E00E94B2570E94BC48EC |
:10B2800008950E94AA6B80E490E00E9438BC22E0FE |
:10B29000AC0160E0862F0E942F7186E490E00E944E |
:10B2A00038BC20E0AC0161E0822F0E942F7187E45E |
:10B2B00090E00E9438BC20E0AC0163E0822F0E9445 |
:10B2C0002F7183E490E00E9438BC20E0AC0164E080 |
:10B2D000822F0E942F7189E490E00E9438BC20E008 |
:10B2E000AC0165E0822F0E942F718DE290E00E94F8 |
:10B2F00038BC20E0AC0167E08CE00E942F7182E056 |
:10B300000E94B2570E94A97B80E20E9442388823A3 |
:10B31000C9F380EF0E9442388091D42F813011F41C |
:10B3200086E001C085E00E94B25708950E94AA6B92 |
:10B3300080E490E00E9438BC22E0AC0160E0862FFF |
:10B340000E942F7188E490E00E9438BC22E0AC019A |
:10B3500061E080E00E942F7187E490E00E9438BC99 |
:10B3600020E0AC0163E0822F0E942F7185E490E021 |
:10B370000E9438BC20E0AC0164E0822F0E942F7153 |
:10B3800089E490E00E9438BC20E0AC0165E0822FA7 |
:10B390000E942F718DE290E00E9438BC20E0AC0149 |
:10B3A00067E08CE00E942F7180E00E94B2570E94FB |
:10B3B000A97B80E20E9442388823C9F380EF0E9473 |
:10B3C00042388091D42F813011F486E001C085E0AD |
:10B3D0000E94B25708950E94AA6B8AE490E00E94EE |
:10B3E00038BC22E0AC0160E0862F0E942F7188E417 |
:10B3F00090E00E9438BC22E0AC0161E080E00E9455 |
:10B400002F7187E490E00E9438BC20E0AC0163E03B |
:10B41000822F0E942F7120E046E25EE064E0822FDE |
:10B420000E94EE7020E04CE35EE065E0822F0E9417 |
:10B43000EE708BE490E00E9438BC20E0AC0166E046 |
:10B44000822F0E942F718DE290E00E9438BC20E094 |
:10B45000AC0167E08CE00E942F7180E00E94B2573F |
:10B460005E9880E20E9442388823D9F380EF0E94E0 |
:10B4700042385E9A8091D42F813011F486E001C069 |
:10B4800085E00E94B2570895EF920F93CF93DF9318 |
:10B49000CDB7DEB721970FB6F894DEBF0FBECDBF94 |
:10B4A00080919E2AE82FFF27E550F24D8081898305 |
:10B4B00000E00E94AA6B202F42E55EE063E0802F4F |
:10B4C0000E94EE70202F4AE55EE064E0802F0E942B |
:10B4D000EE7081E48093A02A20ED37E084EF91E0C4 |
:10B4E0000197F1F721503040C9F710929F2B84E16A |
:10B4F00090E09093512E8093502E8981803208F0F5 |
:10B50000A8C081E090E09F938F93CE0101969F9316 |
:10B510008F9381E08F931F9281E68F930E94404129 |
:10B520008DB79EB707960FB6F8949EBF0FBE8DBF1E |
:10B5300080919F2B882331F48091502E9091512E31 |
:10B54000892BB1F78091502E9091512E892B09F4BF |
:10B5500063C00E949242E0919C2BF0919D2B9981B7 |
:10B560008081981709F046C0892F9927EE240E2D67 |
:10B5700022E030E0AC0164E08EE00E9434778091FC |
:10B580009E2A482F552760919C2B70919D2BDB01A3 |
:10B590008D91282F332780E292E0489FF001499F48 |
:10B5A000F00D589FF00D1124AF01F90184E0EE0F6A |
:10B5B000FF1F8A95E1F7E20FF31FE40FF51FEA5F23 |
:10B5C000FE4C80E10D9001928A95E1F7FB018081AC |
:10B5D0009927FC0124E0EE0FFF1F2A95E1F7E80F01 |
:10B5E000F91FE40FF51FEA5EFE4CE08289818F5F50 |
:10B5F000898309C028EE33E084EF91E00197F1F7E9 |
:10B6000021503040C9F784E190E09093512E80930F |
:10B61000502E10929F2B71CF0F5F84E190E090939A |
:10B62000512E8093502E023308F467CF20E049E674 |
:10B630005EE062E0822F0E94EE7084E690E09093DC |
:10B64000512E8093502E8091502E9091512E892B07 |
:10B65000D1F780919E2AE82FFF27E550F24D89818E |
:10B66000808321960FB6F894DEBF0FBECDBFDF9169 |
:10B67000CF910F91EF900895AF92BF92CF92DF924A |
:10B68000EF92FF920F931F93CF93DF93CDB7DEB767 |
:10B6900021970FB6F894DEBF0FBECDBF10E0D12EBC |
:10B6A0000E94AA6B08ECE02EF12CF092512EE09251 |
:10B6B000502E80919E2AE82FFF27E550F24D808181 |
:10B6C000803210F40E94445A8091502E9091512E55 |
:10B6D000892B09F480C284E48093A02A10939F2BC5 |
:10B6E000F092512EE092502E8AE0898381E090E022 |
:10B6F0009F938F93CE0101969F938F9381E08F93B9 |
:10B700001F9384E68F930E9440418CE291E09093D6 |
:10B71000532E8093522E4DB75EB7495F5F4F0FB6E1 |
:10B72000F8945EBF0FBE4DBFEE24FF2480919E2A89 |
:10B73000282F332780E292E0289FA001299F500DF7 |
:10B74000389F500D1124CA018E0D9F1D8A5F9E4C9B |
:10B7500020E0AC01612F822F0E94B5701F5F81E154 |
:10B7600090E0E80EF91E173008F380919F2B882394 |
:10B7700009F4A0C00E949242A0909C2BB0909D2BF7 |
:10B7800083E090E00E9438BC20E0AC0167E0822FAB |
:10B790000E942F718D2D8F5F482F67E085E00E94FA |
:10B7A0002C7780919E2A99278130910569F0029724 |
:10B7B000B1F420E048E75EE067E083E00E94EE70CD |
:10B7C00020E04BE75EE00EC020E04EE75EE067E081 |
:10B7D00083E00E94EE7020E041E85EE003C020E0DC |
:10B7E00044E85EE067E083E10E94EE7010E0412FE4 |
:10B7F00055272D2D3327F901B3E0EE0FFF1FBA9522 |
:10B80000E1F7E21BF30BE40FF51FEE0FFF1FEA0D4C |
:10B81000FB1D8281938168ED813F960714F476E0E9 |
:10B8200014C06CEF893196077CF06FEF8D39960765 |
:10B830004CF063E0873E960714F473E006C08F5027 |
:10B84000974214F474E001C075E0872F9927F9013D |
:10B85000A3E0EE0FFF1FAA95E1F7E21BF30BE40F45 |
:10B86000F51FEE0FFF1FEA0DFB1DEE240E2D9C01B0 |
:10B8700042815381612F85E1871B0E94AE7784E06E |
:10B88000D81661F4143050F01D2D45E1612F80E091 |
:10B890000E944C711F5F1730C0F317E01F5F173015 |
:10B8A00008F4A5CF88EC90E09093512E8093502E11 |
:10B8B00010929F2B8091522E9091532E892B01F53F |
:10B8C0008AE0898381E090E09F938F93CE01019677 |
:10B8D0009F938F9381E08F931F9284E68F930E94B2 |
:10B8E00040418CE291E09093532E8093522E4DB7BD |
:10B8F0005EB7495F5F4F0FB6F8945EBF0FBE4DBF96 |
:10B9000080E80E944238182F882309F43FC0DA9457 |
:10B9100054E05D1508F4D52E0E94AA6B10E08091CA |
:10B920009E2A282F332780E292E0289FA001299F9A |
:10B93000500D389F500D112487E0D89E900111249E |
:10B94000210F311DC90174E0880F991F7A95E1F725 |
:10B95000820F931F480F591F4A5F5E4C20E0612FF2 |
:10B96000822F0E94B57064E0D61661F4143050F056 |
:10B970001D2D45E1612F80E00E944C711F5F173043 |
:10B98000C0F317E01F5F173050F242C080E40E94FE |
:10B9900042388823E9F1D39484E08D1508F4D12E40 |
:10B9A0000E94AA6B80919E2A282F332780E292E082 |
:10B9B000289FA001299F500D389F500D112487E02A |
:10B9C000D89E90011124210F311DC90164E0880F18 |
:10B9D000991F6A95E1F7820F931F480F591F4A5F1D |
:10B9E0005E4C20E0612F822F0E94B57094E0D91642 |
:10B9F00061F4143050F01D2D45E1612F80E00E946C |
:10BA00004C711F5F1730C0F317E01F5F173050F203 |
:10BA100010919F2A113009F095C080E10E944238B0 |
:10BA2000882309F48FC0198281E090E09F938F935F |
:10BA30006E01C80ED91EDF92CF921F931F9284E62B |
:10BA40008F930E9440414DB75EB7495F5F4F0FB67D |
:10BA5000F8945EBF0FBE4DBF20ED37E084EF91E05C |
:10BA60000197F1F721503040C9F780919E2A81302B |
:10BA700019F40E942A4302C00E94FC4288EC90E024 |
:10BA80009093512E8093502E90EDE92E97E0F92E51 |
:10BA900084EF91E00197F1F70894E108F108E114CF |
:10BAA000F104B1F780919E2AE82FFF27E550F24D6F |
:10BAB0008081803210F40E94445A84E48093A02A4A |
:10BAC00010929F2B88EC90E09093512E8093502EF3 |
:10BAD0008AE0898381E090E09F938F93DF92CF92F9 |
:10BAE00081E08F931F9284E68F930E9440410E94D1 |
:10BAF000AA6B10E0D12E8DB79EB707960FB6F894BB |
:10BB00009EBF0FBE8DBF80919E2A282F332780E2D3 |
:10BB100092E0289FA001299F500D389F500D1124BD |
:10BB2000CA018E0D9F1D8A5F9E4C20E0AC01612FE3 |
:10BB3000822F0E94B5701F5F81E190E0E80EF91E30 |
:10BB4000173008F380E20E944238882339F480914C |
:10BB5000502E9091512E892B09F007CE80EF0E9434 |
:10BB60004238198281E090E09F938F93CE01019635 |
:10BB70009F938F9381E08F931F9284E68F930E940F |
:10BB800040411092A02A10929F2B4DB75EB7495F9B |
:10BB90005F4F0FB6F8945EBF0FBE4DBF8091502E21 |
:10BBA0009091512E892BA9F40E94AA6B20E046E8BF |
:10BBB0005EE062E0822F0E94EE7084E690E0909357 |
:10BBC000512E8093502E8091502E9091512E892B82 |
:10BBD000D1F70E94FC4221960FB6F894DEBF0FBE4B |
:10BBE000CDBFDF91CF911F910F91FF90EF90DF902C |
:10BBF000CF90BF90AF9008950F931F93CF93DF9393 |
:10BC0000CDB7DEB721970FB6F894DEBF0FBECDBF1C |
:10BC100000E088E48093A02A0E94AA6B83E090E071 |
:10BC20000E9438BC202FAC0167E0802F0E942F714A |
:10BC300080919E2A813059F422E045E95EE0602F30 |
:10BC4000802F0E94EE70202F4BEA5EE018C02091FA |
:10BC50009F2A223051F44EEA5EE0602F802F0E942E |
:10BC6000EE70202F44EC5EE00AC022E047EC5EE07C |
:10BC7000602F802F0E94EE70202F4DED5EE067E078 |
:10BC800083E10E94EE7010929F2B84EF91E09093DD |
:10BC9000512E8093502E8CEF898381E090E09F930A |
:10BCA0008F93CE0101969F938F9381E08F931F9284 |
:10BCB00088E68F930E9440418FEF89838DB79EB7AE |
:10BCC00007960FB6F8949EBF0FBE8DBF24EC39E0E7 |
:10BCD00084EF91E00197F1F721503040C9F780914E |
:10BCE0009F2B882309F440C00E94924201E01091EA |
:10BCF0009F2A112349F58091C22E815680939F2A55 |
:10BD0000801789F422E040EE5EE0612F812F0E94CF |
:10BD1000EE70212F46EF5EE067E083E10E94EE7057 |
:10BD200000939E2A11C022E049EF5EE0612F812F2F |
:10BD30000E94EE70212F4FE05FE067E083E10E94F8 |
:10BD4000EE7082E080939E2A1092142F44EC5EE203 |
:10BD500062E080E00E94807010929F2B84EF91E05F |
:10BD60009093512E8093502E80E80E944238882371 |
:10BD700031F462E080E80E948638882311F08EEF6B |
:10BD800039C080E40E944238882339F462E080E4BC |
:10BD90000E948638182F882311F08DEF2BC08091D8 |
:10BDA0009F2A813041F580E10E944238882319F1B1 |
:10BDB00080919E2A813069F40E942A4322E042E168 |
:10BDC0005FE0612F812F0E94EE70212F48E25FE03B |
:10BDD0000CC00E94FC4222E04BE25FE0612F812F09 |
:10BDE0000E94EE70212F41E45FE067E083E10E9452 |
:10BDF000EE708CEF898380E20E944238882339F408 |
:10BE00008091502E9091512E892B09F046CF80EFD2 |
:10BE10000E9442381092A02A10929F2B8091502E9F |
:10BE20009091512E892BB9F4002311F00E94AA6B36 |
:10BE300020E044E45FE062E0822F0E94EE7084E63E |
:10BE400090E09093512E8093502E8091502E90919F |
:10BE5000512E892BD1F70E94FC4221960FB6F894FF |
:10BE6000DEBF0FBECDBFDF91CF911F910F9108951F |
:10BE7000F999FECF92BD81BDF89A80B599270895B2 |
:10BE8000F999FECF1FBA92BD81BD60BD0FB6F8947F |
:10BE9000FA9AF99A0FBE089581E08093C9372091EC |
:10BEA000C937F999FECF1FBA81E290E092BD81BDFA |
:10BEB00020BD0FB6F894FA9AF99A0FBE089581E062 |
:10BEC0008093C8372091C837F999FECF1FBA80E216 |
:10BED00090E092BD81BD20BD0FB6F894FA9AF99A10 |
:10BEE0000FBE089581E08093AC372091AC37F9996B |
:10BEF000FECF1FBA82E290E092BD81BD20BD0FB699 |
:10BF0000F894FA9AF99A0FBE08951092AC372091DE |
:10BF1000AC37F999FECF1FBA82E290E092BD81BDA5 |
:10BF200020BD0FB6F894FA9AF99A0FBE089568E307 |
:10BF30007FE585E090E00E94D7C2DC01CB018093D1 |
:10BF4000693790936A37A0936B37B0936C3768E387 |
:10BF50007FE581E090E00E94D7C2DC01CB018093B5 |
:10BF6000CD379093CE37A093CF37B093D037089585 |
:10BF7000EF92FF920F931F93DC01CB0179018A01AD |
:10BF800020E43FE5AC01BD0185E090E00E9438C3AC |
:10BF900020E43FE5B801A70181E090E00E9438C3AA |
:10BFA0001F910F91FF90EF90089520914E2EF999D7 |
:10BFB000FECF1FBA83E390E092BD81BD20BD0FB6D6 |
:10BFC000F894FA9AF99A0FBE20910938F999FECFA0 |
:10BFD0001FBA82E390E092BD81BD20BD0FB6F894F8 |
:10BFE000FA9AF99A0FBE2091CA37F999FECF1FBA73 |
:10BFF00081E390E092BD81BD20BD0FB6F894FA9A1E |
:10C00000F99A0FBE2091D937F999FECF1FBA80E374 |
:10C0100090E092BD81BD20BD0FB6F894FA9AF99ACE |
:10C020000FBE2091AA37F999FECF1FBA8FE290E098 |
:10C0300092BD81BD20BD0FB6F894FA9AF99A0FBE51 |
:10C040002091D137F999FECF1FBA8EE290E092BDD0 |
:10C0500081BD20BD0FB6F894FA9AF99A0FBE2091CF |
:10C06000A537F999FECF1FBA8DE290E092BD81BD50 |
:10C0700020BD0FB6F894FA9AF99A0FBE2091AB370B |
:10C08000F999FECF1FBA8CE290E092BD81BD20BD30 |
:10C090000FB6F894FA9AF99A0FBE20916D37F99974 |
:10C0A000FECF1FBA8BE290E092BD81BD20BD0FB6DE |
:10C0B000F894FA9AF99A0FBE20917337F999FECF46 |
:10C0C0001FBA8AE290E092BD81BD20BD0FB6F89400 |
:10C0D000FA9AF99A0FBE20910738F999FECF1FBA44 |
:10C0E00089E290E092BD81BD20BD0FB6F894FA9A26 |
:10C0F000F99A0FBE20918037F999FECF1FBA88E2D6 |
:10C1000090E092BD81BD20BD0FB6F894FA9AF99ADD |
:10C110000FBE2091D52FF999FECF1FBA87E290E08C |
:10C1200092BD81BD20BD0FB6F894FA9AF99A0FBE60 |
:10C130002091D42FF999FECF1FBA86E290E092BDEC |
:10C1400081BD20BD0FB6F894FA9AF99A0FBE2091DE |
:10C15000D337F999FECF1FBA85E290E092BD81BD39 |
:10C1600020BD0FB6F894FA9AF99A0FBE2091AD3718 |
:10C17000F999FECF1FBA84E290E092BD81BD20BD47 |
:10C180000FB6F894FA9AF99A0FBE2091A937F99947 |
:10C19000FECF1FBA83E290E092BD81BD20BD0FB6F5 |
:10C1A000F894FA9AF99A0FBE2091C937F999FECFFF |
:10C1B0001FBA81E290E092BD81BD20BD0FB6F89418 |
:10C1C000FA9AF99A0FBE2091C837F999FECF1FBA93 |
:10C1D00080E290E092BD81BD20BD0FB6F894FA9A3E |
:10C1E000F99A0FBE2091AC37F999FECF1FBA82E2BF |
:10C1F00090E092BD81BD20BD0FB6F894FA9AF99AED |
:10C200000FBE2091C737F999FECF1FBA8FE190E09A |
:10C2100092BD81BD20BD0FB6F894FA9AF99A0FBE6F |
:10C2200020918137F999FECF1FBA8EE190E092BD3F |
:10C2300081BD20BD0FB6F894FA9AF99A0FBE80918D |
:10C240006F379091703740E45FE5BC018CE190E07E |
:10C250000E945FC320916E37F999FECF1FBA8BE120 |
:10C2600090E092BD81BD20BD0FB6F894FA9AF99A7C |
:10C270000FBE2091A837F999FECF1FBA8AE190E04E |
:10C2800092BD81BD20BD0FB6F894FA9AF99A0FBEFF |
:10C290002091A637F999FECF1FBA89E190E092BDAF |
:10C2A00081BD20BD0FB6F894FA9AF99A0FBE20917D |
:10C2B000A737F999FECF1FBA88E190E092BD81BD02 |
:10C2C00020BD0FB6F894FA9AF99A0FBE209108385B |
:10C2D000F999FECF1FBA87E190E092BD81BD20BDE4 |
:10C2E0000FB6F894FA9AF99A0FBE2091CC37F999C3 |
:10C2F000FECF1FBA86E190E092BD81BD20BD0FB692 |
:10C30000F894FA9AF99A0FBE20917437F999FECFF2 |
:10C310001FBA85E190E092BD81BD20BD0FB6F894B3 |
:10C32000FA9AF99A0FBE2091C337F999FECF1FBA36 |
:10C3300084E190E092BD81BD20BD0FB6F894FA9AD9 |
:10C34000F99A0FBE809167379091683740E45FE5B6 |
:10C35000BC0182E190E00E945FC320916637F999A9 |
:10C36000FECF1FBA81E190E092BD81BD20BD0FB626 |
:10C37000F894FA9AF99A0FBE2091C437F999FECF32 |
:10C380001FBA80E190E092BD81BD20BD0FB6F89448 |
:10C39000FA9AF99A0FBE2091D237F999FECF1FBAB7 |
:10C3A0008FE090E092BD81BD20BD0FB6F894FA9A5F |
:10C3B000F99A0FBE80910A3890910B3840E45FE5FE |
:10C3C000BC018DE090E00E945FC380917137909135 |
:10C3D000723740E45FE5BC018BE090E00E945FC3F0 |
:10C3E0008091C5379091C63740E45FE5BC0189E094 |
:10C3F00090E00E945FC320E43FE544E050E064ED3C |
:10C4000077E384E390E00E9416C320E43FE54AE02E |
:10C4100050E065E777E389E390E00E9416C320E4EB |
:10C420003FE544E150E06EEA77E384E490E00E9467 |
:10C4300016C320E43FE54EE050E06AED77E388E57F |
:10C4400090E00E9416C32091CB37F999FECF1FBA16 |
:10C4500086E690E092BD81BD20BD0FB6F894FA9AB1 |
:10C46000F99A0FBE2091C237F999FECF1FBA87E61D |
:10C4700090E092BD81BD20BD0FB6F894FA9AF99A6A |
:10C480000FBE08950E94AA6B22E048E55FE060E0DD |
:10C49000862F0E94EE7020E04EE65FE061E0822F82 |
:10C4A0000E94EE7020E049E75FE062E0822F0E9488 |
:10C4B000EE7089E880934E2E1092093891E09093A7 |
:10C4C000CA379093D93782E48093AA379093D137B3 |
:10C4D00080E18093A53780E48093AB3710926D376D |
:10C4E0001092733784E18093073884E68093803715 |
:10C4F0001092D52F1092D42F1092D3379093AD373E |
:10C500009093A9371092C9371092C8379093AC37DF |
:10C510001092C7379093813790936E379093A837D6 |
:10C520001092A6379093A7371092083888E280932C |
:10C53000CC37909374379093C33780E197E2909310 |
:10C54000683780936737109266371092C43784E05B |
:10C550008093D23780E797E19093703780936F375D |
:10C5600084EF91E090930B3880930A388EE190E04D |
:10C57000909372378093713785E090E09093C6373F |
:10C580008093C53788E292EDA1E4B5E080936937E6 |
:10C5900090936A37A0936B37B0936C378EE491EB2E |
:10C5A000ADE1BFE18093CD379093CE37A093CF37E5 |
:10C5B000B093D0378091693790916A37A0916B37EB |
:10C5C000B0916C3720E43FE5AC01BD0185E090E01F |
:10C5D0000E9438C38091CD379091CE37A091CF374C |
:10C5E000B091D03720E43FE5AC01BD0181E090E09F |
:10C5F0000E9438C36FE87FE084ED97E30E9435C264 |
:10C6000020E43FE544E050E064ED77E384E390E02C |
:10C610000E9416C364E97FE085E797E30E9435C274 |
:10C6200020E43FE54AE050E065E777E389E390E006 |
:10C630000E9416C3EEEAF7E383E11192815087FF6F |
:10C64000FCCF90E3EAEDF7E38DE09193815087FF13 |
:10C65000FCCF1092CB371092C2372091C937F9998D |
:10C66000FECF1FBA81E290E092BD81BD20BD0FB622 |
:10C67000F894FA9AF99A0FBE2091C837F999FECF2B |
:10C680001FBA80E290E092BD81BD20BD0FB6F89444 |
:10C69000FA9AF99A0FBEF999FECF1FBA80E090E09E |
:10C6A00092BD81BD80E780BD0FB6F894FA9AF99AE1 |
:10C6B0000FBE0E94D55F20E04FE95FE066E0822F69 |
:10C6C0000E94EE7020E044EB5FE067E082E10E94B0 |
:10C6D000EE7040E060E870E088EC90E00E942A365E |
:10C6E00080E10E944D388823D9F30895F999FECF4F |
:10C6F00080E090E092BD81BDF89A80B5803709F066 |
:10C7000003C2F999FECF83E390E092BD81BDF89A10 |
:10C7100080B580934E2EF999FECF82E390E092BDD2 |
:10C7200081BDF89A80B5992780930938F999FECF91 |
:10C7300081E390E092BD81BDF89A80B599278093FE |
:10C74000CA37F999FECF80E390E092BD81BDF89A97 |
:10C7500080B599278093D937F999FECF8FE290E081 |
:10C7600092BD81BDF89A80B599278093AA37F9992F |
:10C77000FECF8EE290E092BD81BDF89A80B59927F8 |
:10C780008093D137F999FECF8DE290E092BD81BDC3 |
:10C79000F89A80B599278093A537F999FECF8CE256 |
:10C7A00090E092BD81BDF89A80B599278093AB3710 |
:10C7B000F999FECF8BE290E092BD81BDF89A80B5E9 |
:10C7C000992780936D37F999FECF8AE290E092BD68 |
:10C7D00081BDF89A80B5992780937337F999FECF78 |
:10C7E00089E290E092BD81BDF89A80B59927809347 |
:10C7F0000738F999FECF88E290E092BD81BDF89AA2 |
:10C8000080B5992780938037F999FECF87E290E031 |
:10C8100092BD81BDF89A80B599278093D52FF9995B |
:10C82000FECF86E290E092BD81BDF89A80B599274F |
:10C830008093D42FF999FECF85E290E092BD81BD1F |
:10C84000F89A80B599278093D337F999FECF84E27F |
:10C8500090E092BD81BDF89A80B599278093AD375D |
:10C86000F999FECF83E290E092BD81BDF89A80B540 |
:10C8700099278093A937F999FECF81E290E092BD84 |
:10C8800081BDF89A80B599278093C937F999FECF71 |
:10C8900080E290E092BD81BDF89A80B5992780939F |
:10C8A000C837F999FECF82E290E092BD81BDF89A37 |
:10C8B00080B599278093AC37F999FECF8FE190E04E |
:10C8C00092BD81BDF89A80B599278093C737F999B1 |
:10C8D000FECF8EE190E092BD81BDF89A80B5992798 |
:10C8E0008093813768E37FE58CE190E00E94FEC28F |
:10C8F0009093703780936F37F999FECF8BE190E07A |
:10C9000092BD81BDF89A80B5992780936E37F999C9 |
:10C91000FECF8AE190E092BD81BDF89A80B599275B |
:10C920008093A837F999FECF89E190E092BD81BD4F |
:10C93000F89A80B599278093A637F999FECF88E1B8 |
:10C9400090E092BD81BDF89A80B599278093A73772 |
:10C95000F999FECF87E190E092BD81BDF89A80B54C |
:10C96000992780930838F999FECF86E190E092BD2F |
:10C9700081BDF89A80B599278093CC37F999FECF7D |
:10C9800085E190E092BD81BDF89A80B599278093AA |
:10C990007437F999FECF84E190E092BD81BDF89A99 |
:10C9A00080B599278093C33768E37FE582E190E003 |
:10C9B0000E94FEC29093683780936737F999FECF43 |
:10C9C00081E190E092BD81BDF89A80B5992780936E |
:10C9D0006637F999FECF80E190E092BD81BDF89A6B |
:10C9E00080B599278093C437F999FECF8FE090E006 |
:10C9F00092BD81BDF89A80B599278093D23768E3BC |
:10CA00007FE58DE090E00E94FEC290930B3880930A |
:10CA10000A3868E37FE58BE090E00E94FEC29093C5 |
:10CA200072378093713768E37FE589E090E00E9478 |
:10CA3000FEC29093C6378093C5378091D2378093DA |
:10CA4000EA2B8091D2378093E92B28E33FE544E03D |
:10CA500050E064E370E084ED97E30E94B2C228E303 |
:10CA60003FE54AE050E069E370E085E797E30E9424 |
:10CA7000B2C228E33FE544E150E064E470E08EEAAE |
:10CA800097E30E94B2C228E33FE54EE050E068E53C |
:10CA900070E08AED97E30E94B2C2F999FECF86E674 |
:10CAA00090E092BD81BDF89A80B599278093CB37ED |
:10CAB000F999FECF87E690E092BD81BDF89A80B5E6 |
:10CAC00099278093C23768E37FE585E090E00E9474 |
:10CAD000D7C2DC01CB018093693790936A37A0936A |
:10CAE0006B37B0936C3768E37FE581E090E00E949C |
:10CAF000D7C2DC01CB018093CD379093CE37A09382 |
:10CB0000CF37B093D03708950E94426208950F93B3 |
:10CB10001F93CF931092ED371092EE371092EF37AC |
:10CB20001092F0371092E9371092EA371092EB37F3 |
:10CB30001092EC371092F1371092F2371092F337CF |
:10CB40001092F43789E691E09093F7378093F637A7 |
:10CB5000E2E8F7E3CEE11282C1503196C7FFFBCF86 |
:10CB6000C0E060E087EB9FE00E94BE708FE1C89F4D |
:10CB7000C0011124895E9E4FF999FECF1FBA92BD64 |
:10CB800081BDC0BD0FB6F894FA9AF99A0FBE8FE135 |
:10CB9000C89FC00111248C5D9E4FF999FECF1FBA2A |
:10CBA00092BD81BD10BC0FB6F894FA9AF99A0FBEE7 |
:10CBB0008FE1C89F8001112420E43FE544E050E06C |
:10CBC0006DEE77E3C801845E9E4F0E9416C320E499 |
:10CBD0003FE544E050E069EE77E3C801885E9E4F90 |
:10CBE0000E9416C320E43FE544E050E061EF77E3A4 |
:10CBF000C801805E9E4F0E9416C320E43FE542E0DC |
:10CC000050E066EF77E3C8018B5D9E4F0E9416C32C |
:10CC1000C801895D9E4FF999FECF1FBA92BD81BDB3 |
:10CC200010BC0FB6F894FA9AF99A0FBE8FE1C89F1C |
:10CC3000C0011124885D9E4FF999FECF1FBA92BDA5 |
:10CC400081BD10BC0FB6F894FA9AF99A0FBE8FE125 |
:10CC5000C89FC0011124855D9E4FF999FECF1FBA70 |
:10CC600092BD81BD8FEF80BD0FB6F894FA9AF99A04 |
:10CC70000FBE8FE1C89FC0011124875D9E4FF999B7 |
:10CC8000FECF1FBA92BD81BD10BC0FB6F894FA9AC0 |
:10CC9000F99A0FBE8FE1C89FC0011124835D9E4F9A |
:10CCA000F999FECF1FBA92BD81BD10BC0FB6F894A2 |
:10CCB000FA9AF99A0FBECF5FC73308F452CFC0E09B |
:10CCC00060E089EB9FE00E94BE7083E2C89FC001D4 |
:10CCD000112488599F4FF999FECF1FBA92BD81BD8B |
:10CCE000C0BD0FB6F894FA9AF99A0FBE83E2C89FB6 |
:10CCF000C001112487599F4FF999FECF1FBA92BDE9 |
:10CD000081BD10BC0FB6F894FA9AF99A0FBE83E26F |
:10CD1000C89FC001112486579F4FF999FECF1FBAB3 |
:10CD200092BD81BD10BC0FB6F894FA9AF99A0FBE65 |
:10CD300083E2C89FC001112487579F4FF999FECF06 |
:10CD40001FBA92BD81BD10BC0FB6F894FA9AF99A39 |
:10CD50000FBE83E2C89FC001112420E43FE54FE1EC |
:10CD600050E064E877E386599F4F0E9416C3CF5F77 |
:10CD7000C53008F4A5CFC0E06C2F8BEB9FE00E947C |
:10CD8000BE70CF911F910F910895DC0190E08C91BE |
:10CD9000882341F09F5F9F3F29F0FD01E90FF11DBE |
:10CDA0008081F6CF0895FC018491882329F0319683 |
:10CDB000849131968823E1F70895FC0155834483DB |
:10CDC0007783668313821282118210820895FC0198 |
:10CDD000808191810895FC0120E030E08081918183 |
:10CDE000892B11F421E030E0C9010895FC0140E0F5 |
:10CDF00050E024813581808191812817390711F411 |
:10CE000041E050E0CA0108950F931F93CF93DF9341 |
:10CE1000EC018B010E94EB66882319F080E090E022 |
:10CE20001AC0EE81FF818A819B81E80FF91F808102 |
:10CE3000F80180838A819B812C813D810196B90113 |
:10CE40000E94CEC69B838A838881998101979983AA |
:10CE5000888381E090E0DF91CF911F910F91089539 |
:10CE60001F93CF93DF93EC01162F0E94F666882361 |
:10CE700019F080E090E017C04A815B818881998138 |
:10CE80002C813D81840F951FB9010E94CEC6EE8191 |
:10CE9000FF81E80FF91F108388819981019699839A |
:10CEA000888381E090E0DF91CF911F910895FC018C |
:10CEB000118210821382128281E090E008956F92B5 |
:10CEC0007F928F929F92AF92BF92CF92DF92EF921A |
:10CED000FF920F931F93CF93DF93EC01FB014A0165 |
:10CEE000AA24BB248491882371F1688079808B0106 |
:10CEF0007B016A01C614D704A0F4F70144918A812A |
:10CF00009B818A0D9B1D2C813D81880D991DB90146 |
:10CF10000E94CEC6EE81FF81E80FF91F8081841741 |
:10CF200019F080E090E026C00894A11CB11C089480 |
:10CF3000C11CD11C0894E11CF11C0F5F1F4FF801AC |
:10CF400084918823B9F68A819B818A0D9B1D2C814F |
:10CF50003D81880D991DB9010E94CEC69B838A83AD |
:10CF6000A80CB91C888199818A199B0999838883A7 |
:10CF700081E090E0DF91CF911F910F91FF90EF90B2 |
:10CF8000DF90CF90BF90AF909F908F907F906F90E9 |
:10CF90000895AF92BF92CF92DF92EF92FF920F93DC |
:10CFA0001F93CF93DF937C01FB01CC24DD2484917C |
:10CFB000882341F1D701AD90BC90EB018B01CA14DD |
:10CFC000DB0498F4F8014491F70182819381248174 |
:10CFD00035818C0D9D1DB9010E94CEC6A681B781F9 |
:10CFE000A80FB91F8C91841719F080E090E00CC055 |
:10CFF0000894C11CD11C0F5F1F4F2196FE01849124 |
:10D000008823E9F681E090E0DF91CF911F910F91A5 |
:10D01000FF90EF90DF90CF90BF90AF90089540E0E9 |
:10D0200050E00E945F6799270895EF92FF920F9357 |
:10D030001F93CF93DF93EC017B0100E010E0888128 |
:10D0400099810817190768F4A801B701CE010E9459 |
:10D050005F67882319F081E090E005C00F5F1F4FE4 |
:10D06000EECF80E090E0DF91CF911F910F91FF9084 |
:10D07000EF9008959091032E980F9093032E809136 |
:10D08000022E890F8093022E0895FC0180818093E7 |
:10D090000839818180930939828180930A3983819B |
:10D0A00080930B398091083990910939A0910A3900 |
:10D0B000B0910B39BC01CD010895AF92BF92CF92D0 |
:10D0C000DF92EF920F931F93CF9380E80E94423834 |
:10D0D000882329F48091FE2D823009F041C080918F |
:10D0E000FE2D8130D1F10E94AA6B20E04EEB52E17F |
:10D0F000622F822F0E94EE7020E04AEC52E161E044 |
:10D10000822F0E94EE7020E046ED52E162E0822F15 |
:10D110000E94EE7020E042EE52E163E0822F0E9416 |
:10D12000EE7020E04EEE52E164E0822F0E94EE703D |
:10D1300020E04AEF52E165E0822F0E94EE7020E08D |
:10D1400046E053E166E0822F0E94EE7020E042E16B |
:10D1500053E167E0822F0E94EE7081E08093FE2D04 |
:10D160008091012E813009F067C08091002E8033BC |
:10D1700009F062C06091FE2D662309F05DC0A090A9 |
:10D180001038C62F6A1508F057C08CE0C82E88E307 |
:10D19000D82EC03108F050C0C83010F01BE001C0DC |
:10D1A00010E0F60181859927EE240E2D23E030E072 |
:10D1B000AC016C2F812F0E943477F601848599276A |
:10D1C00022E030E0AC016C2F812F8C5F0E9434771D |
:10D1D000F6018285282F3327C90183709070039749 |
:10D1E00021F42E2D4EE153E105C020FF07C020E0C1 |
:10D1F00040E253E16C2F812F895F14C0F6019385C3 |
:10D20000953020F020E042E253E1F4CF812F895F96 |
:10D21000923020F020E044E253E103C020E046E2F7 |
:10D2200053E16C2F0E94EE70CF5F8CE090E0C80E4F |
:10D23000D91ECA1508F4ADCF8091FE2D813009F0BA |
:10D240008BC18091012E813009F08AC08091002E1F |
:10D25000863009F085C08091163899278230910573 |
:10D2600049F08230910554F0059744F420E048E2FB |
:10D2700053E107C020E04BE253E103C020E04EE25F |
:10D2800053E1622F8BE00E94EE708091173899274E |
:10D2900083709070039721F420E041E353E103C0D1 |
:10D2A00020E043E353E1622F81E10E94EE70809120 |
:10D2B000173880FF04C020E045E353E103C020E0BD |
:10D2C00048E353E1622F8EE00E94EE7080913B387C |
:10D2D0009927EE240E2D22E030E0AC0161E08BE0D6 |
:10D2E0000E94347784E298E30E944568DC01CB0118 |
:10D2F00025E030E0AC0162E08BE00E9434772E2D17 |
:10D300004BE353E162E081E10E94EE7020913838F6 |
:10D31000909139388FEF989F60011124C20ED11C73 |
:10D32000C60164E670E00E94CEC622E030E0AB01A8 |
:10D3300063E08BE00E9434772E2D4EE353E163E0EF |
:10D340008DE00E94EE70C60164E670E00E94CEC6D9 |
:10D3500001E022E030E0AC0163E08EE00E9434772F |
:10D360008091012E813071F58091002E823151F52E |
:10D3700080E298E30E944568DC01CB01BC01CD014D |
:10D3800020E13EE040E050E00E94A3C6DC01CB017A |
:10D39000BC01CD0120EA36E841E050E00E94F5C62C |
:10D3A000DA01C901EE240E2D23E030E0AC0164E087 |
:10D3B0008BE00E9434772E2D40E453E164E08FE04F |
:10D3C0000E94EE70C091012EC13009F0C5C080915D |
:10D3D000002E823009F0C0C080E198E30E944568C9 |
:10D3E0005B016C0120E836E948E950E00E94F5C68F |
:10D3F000DA01C901EE240E2D22E030E0AC0165E037 |
:10D400008AE00E9434772E2D45E453E165E08CE0FC |
:10D410000E94EE70C601B50128EE33E040E050E016 |
:10D420000E94F5C6CA01B90120E137E240E050E0B0 |
:10D430000E94F5C6DC01CB010C2F24E030E0AC01EA |
:10D4400065E08DE00E943477C601B5012AE030E046 |
:10D4500040E050E00E94F5C6CA01B90124E630E080 |
:10D4600040E050E00E94F5C6DC01CB0122E030E054 |
:10D47000AC0165E081E10E94347784E198E30E9489 |
:10D4800045685B016C0120E836E948E950E00E94FC |
:10D49000F5C6DA01C9010E2D22E030E0AC0166E0EC |
:10D4A0008AE00E9434772E2D47E453E166E08CE059 |
:10D4B0000E94EE70C601B50128EE33E040E050E076 |
:10D4C0000E94F5C6CA01B90120E137E240E050E010 |
:10D4D0000E94F5C6DC01CB010C2F24E030E0AC014A |
:10D4E00066E08DE00E943477C601B5012AE030E0A5 |
:10D4F00040E050E00E94F5C6CA01B90124E630E0E0 |
:10D5000040E050E00E94F5C6DC01CB0122E030E0B3 |
:10D51000AC0166E081E10E9434778CE198E30E94DF |
:10D520004568DC01CB01BC01CD0128EE33E040E0D1 |
:10D5300050E00E94F5C6DA01C9010E2D24E030E06A |
:10D54000AC0167E08BE00E9434772E2D49E453E173 |
:10D5500067E080E10E94EE70CF911F910F91EF90F4 |
:10D56000DF90CF90BF90AF900895FF920F931F93DD |
:10D57000CF93DF93CDB7DEB721970FB6F894DEBF18 |
:10D580000FBECDBF0E94AA6B82E08093FE2D8091DA |
:10D590009F2A8230A1F420E04BE453E163E0822F24 |
:10D5A0000E94EE7084E690E09093512E8093502E6E |
:10D5B0008091502E9091512E892BD1F7B1C080913E |
:10D5C0009E2A813011F00E94FC420E94A14310E08B |
:10D5D00088EC90E09093512E8093502E1983012F68 |
:10D5E000F12ECE0101960E94A340882309F487C042 |
:10D5F00088EC90E09093512E8093502E812F9927A4 |
:10D600008430910509F449C0853091057CF481305E |
:10D61000910551F1823091051CF4892BB1F06FC056 |
:10D620008230910529F1039761F169C08630910537 |
:10D6300009F442C086309105BCF18730910509F4A8 |
:10D640004FC0089709F44FC05AC08981853B09F043 |
:10D6500056C01092FF2D1092002E1092012E1092A3 |
:10D66000032E1092022E3AC089818236B9F11FC072 |
:10D6700089818130E1F40E943A6889818093012E8A |
:10D680002DC08981803331F0863021F0823111F054 |
:10D69000823069F48093002E0CC089818B3F38F46E |
:10D6A0000E943A6809811AC08981882311F010E02C |
:10D6B00026C00E943A6812C001508091FF2DE82FC9 |
:10D6C000FF27E45FF74C898180830E943A6880914C |
:10D6D000FF2D8F5F8093FF2D002389F41F5F0FC004 |
:10D6E0001F5FF9800CC010E08091032EF81639F40A |
:10D6F00099818091022E981711F40E945D6880E252 |
:10D700000E944238882339F48091502E9091512EF6 |
:10D71000892B09F066CF80EF0E9442380E94FC42BC |
:10D7200021960FB6F894DEBF0FBECDBFDF91CF912B |
:10D730001F910F91FF9008952C988EBD0DB407FE98 |
:10D74000FDCF2C9A08952C988EBD0DB407FEFDCF09 |
:10D750002C9A08950F931F93CF93DF938DE099E355 |
:10D76000FC01119201962DE38C309207D1F3C8F39E |
:10D7700000E010E02B98802F80550E949C6B80E188 |
:10D780000E949C6B80916D370E949C6B2B9ACFE717 |
:10D79000D0E080E00E949C6B2197D7FFFACF0F5F0B |
:10D7A0001F4F0830110530F31092903D1092913DBB |
:10D7B000DF91CF911F910F91089588E893E1019730 |
:10D7C000F1F708950F931F93CF93DF938C01C0E07F |
:10D7D000D0E0C817D90730F40E94DD6B2196C0173E |
:10D7E000D107D0F3DF91CF911F910F910895CF937F |
:10D7F000C82F1092903D1092913D8CE58CBD81E038 |
:10D800008DBD2C9A2A988AE090E00E94E26B2A9AB9 |
:10D810002C982B9880E40E949C6BC130A9F48091D5 |
:10D820006D37882329F481EA0E949C6B80EC04C048 |
:10D8300080EA0E949C6B88EC0E949C6B80917337FD |
:10D84000882341F087EA07C081EA0E949C6B80EC44 |
:10D850000E949C6B86EA0E949C6B82EA0E949C6BF1 |
:10D860008FE20E949C6B88EF0E949C6B80E00E947C |
:10D870009C6B87E20E949C6BC13031F481E80E946E |
:10D880009C6B8091073804C081E80E949C6B86E104 |
:10D890000E949C6B8CEA0E949C6B80E00E949C6BB7 |
:10D8A0008FEA0E949C6BC130F1F4809180379927F8 |
:10D8B000AA2797FDA095BA2FBC01CD010E94CEC426 |
:10D8C000DC01CB0123E333E343E250E4BC01CD01AF |
:10D8D0000E94BBC5DC01CB01BC01CD010E94A0C4EC |
:10D8E000DC01CB0101C08FEF8093B3000E94AA6BD3 |
:10D8F000CF910895FF920F931F938C01F62E880FFE |
:10D90000892F881F990B91952B9880550E949C6BAD |
:10D91000102F1F7780916D37180F812F82958F7090 |
:10D92000805F0E949C6B812F8F700E949C6B2B9A52 |
:10D930008F2D0E949C6B1F910F91FF900895EF9285 |
:10D94000FF920F931F93CF93DF93C0E0D0E03DE8A9 |
:10D95000E32E39E3F32E870100581040F70181913F |
:10D960007F01F801808361918F01CE010E947A6C62 |
:10D970002196F3E0C038DF0788F3C0E8D3E00DE874 |
:10D980001CE3F80111928F0160E0CE010E947A6CD5 |
:10D990002196F4E0C030DF07A0F3DF91CF911F9113 |
:10D9A0000F91FF90EF900895AF92BF92DF92EF92A8 |
:10D9B000FF920F931F93CF93DF93C82FDD27D69548 |
:10D9C000DC2FCC27D795C795D3708E015EE0A52EAE |
:10D9D0005DE3B52EEE24FF244DE7D42EFE01E35F78 |
:10D9E000F64CEE0DFF1D8081D5018D935D016081A8 |
:10D9F000C8010E947A6CDA940894E11CF11C0F5F54 |
:10DA00001F4FD7FEEBCFDF91CF911F910F91FF906A |
:10DA1000EF90DF90BF90AF900895AF92BF92DF92EA |
:10DA2000EF92FF920F931F93CF93DF93C82FDD27C1 |
:10DA3000D695DC2FCC27D795C795D3708E01EEE015 |
:10DA4000AE2EEDE3BE2EEE24FF247DE7D72EFE01A1 |
:10DA5000E35FF64CEE0DFF1DD5018D915D018083D6 |
:10DA60006081C8010E947A6CDA940894E11CF11C70 |
:10DA70000F5F1F4FD7FEEBCFDF91CF911F910F911B |
:10DA8000FF90EF90DF90BF90AF9008958091913D0F |
:10DA90008F5F8093913D883028F00E949F6C87E0D3 |
:10DAA0008093913D0895982F87FD45C0603408F01C |
:10DAB00042C0862F869586958695A82FBB27B6955A |
:10DAC000BA2FAA27B795A795A90FB11D262F3327DF |
:10DAD0002770307081E090E002C0880F991F2A956E |
:10DAE000E2F7982FB37055274130510589F0423045 |
:10DAF00051051CF4452B29F017C04230510571F037 |
:10DB000013C0FD01E35FF64C9095808189230BC023 |
:10DB1000FD01E35FF64C8081892B05C0FD01E35FC9 |
:10DB2000F64C808189278083FD01E35FF64C60819C |
:10DB3000CD010E947A6C08952F923F924F925F928E |
:10DB40006F927F928F929F92AF92BF92CF92DF920D |
:10DB5000EF92FF920F931F93CF93DF93CDB7DEB772 |
:10DB600023970FB6F894DEBF0FBECDBF0983A82E52 |
:10DB7000BB24C62EDD24642E77247301EA18FB082B |
:10DB8000822E992484010C191D09F7FE04C07FEF31 |
:10DB9000272E372E09C01E141F0424F461E0262E00 |
:10DBA000312C02C02224332417FF04C05FEF452E1E |
:10DBB000552E09C01016110624F441E0442E512CB4 |
:10DBC00002C044245524F7FE04C0F094E194F10807 |
:10DBD000F39417FF03C0109501951F4F49816C2DD9 |
:10DBE0008A2D0E94536D0E151F054CF5C701F7FCD9 |
:10DBF00001969595879522273327281B390B3B8360 |
:10DC00002A83A614B70409F441C08A819B81800F3E |
:10DC1000911F9B838A83A20CB31C1816190634F437 |
:10DC2000C40CD51C8E199F099B838A8349816C2D56 |
:10DC30008A2D0E94536DA614B70439F727C0C80176 |
:10DC400017FD019695958795EE27FF27E81BF90BA1 |
:10DC5000FB83EA83C814D904C9F02A813B812E0DC5 |
:10DC60003F1D3B832A83C40CD51C1216130634F4C3 |
:10DC7000A20CB31C201B310B3B832A8349816C2DE2 |
:10DC80008A2D0E94536DC814D90439F723960FB614 |
:10DC9000F894DEBF0FBECDBFDF91CF911F910F91E2 |
:10DCA000FF90EF90DF90CF90BF90AF909F908F90BC |
:10DCB0007F906F905F904F903F902F900895BF920C |
:10DCC000CF92DF92EF92FF920F931F93CF93DF9348 |
:10DCD000182F822FB02E17FD1FE7603408F06FE376 |
:10DCE000212F240F312D311D6901262F3327790172 |
:10DCF000E80EF11C81E8C816D10418F0F0E8CF2E28 |
:10DD0000D12C81E4E816F10418F0E0E4EE2EF12CB9 |
:10DD1000E901E216F30658F00B2D2C2F4C2D6C2F39 |
:10DD2000812F0E949C6D2196EC16FD06A8F7DF91CD |
:10DD3000CF911F910F91FF90EF90DF90CF90BF9008 |
:10DD40000895BF92CF92DF92EF92FF920F931F93AD |
:10DD5000CF93DF93182FC62FD42EB22E82E0281730 |
:10DD600089F4862F992733E0880F991F3A95E1F7B8 |
:10DD700001E028E0422F682F812F880F880F880F3D |
:10DD80000E945F6E8D2D99278F37910571F0803835 |
:10DD9000910524F48E37910529F00CC08F3D910533 |
:10DDA00039F008C02AE1D22E05C09BE1D92E02C06D |
:10DDB00088EFD82EDD2704E0CC0FDD1F0A95E1F7B0 |
:10DDC000C10FD11D13E0CC0FDD1F1A95E1F7D37001 |
:10DDD0007E0100E010E0B7E0CB2EED2DFF27A3E0A1 |
:10DDE000EE0FFF1FAA95E1F7E00FF11FE259FB4A82 |
:10DDF00024918B2D992782309105E9F0833091058C |
:10DE00002CF4009749F0019771F02CC083309105F4 |
:10DE1000D1F00497F1F026C0FE01E35FF64CE00F6D |
:10DE2000F11F20831FC0FE01E35FF64CE00FF11FDE |
:10DE30008081822B16C0FE01E35FF64CE00FF11FDC |
:10DE4000808182270EC0FE01E35FF64CE00FF11FD8 |
:10DE500006C0FE01E35FF64CE00FF11F20958081C4 |
:10DE600082238083FE01E35FF64CE00FF11F6081A7 |
:10DE7000C7010E947A6CCA940F5F1F4F0894E11C7F |
:10DE8000F11CC7FEAACFDF91CF911F910F91FF9098 |
:10DE9000EF90DF90CF90BF9008951F93CF93DF93C3 |
:10DEA000EC01162FFC018491882319F1FE014491A5 |
:10DEB000842F99278A309105A9F00D9719F41092B3 |
:10DEC000903D12C0212F6091913D8091903D0E9424 |
:10DED000A16E8091903D8F5F8093903D853120F0C1 |
:10DEE0001092903D0E94466D2196FE0184918823F8 |
:10DEF000E9F6DF91CF911F9108958093903D609353 |
:10DF0000913D622FCA010E944D6F0895BF92CF923A |
:10DF1000DF92EF92FF920F931F93CF93DF93182F0F |
:10DF2000C62FF42EE22E82E0281791F4862F99272F |
:10DF300023E0880F991F2A95E1F701E027E045E0EB |
:10DF4000682F86E0189F802D11240E945F6E0FC0FD |
:10DF500083E0281711F420E004C084E0281739F486 |
:10DF600022E04F2D6C2F812F0E94A16E9FC08F2D1C |
:10DF700099278F3D910589F1803E910574F4863D86 |
:10DF80009105F9F0873D910524F4843C910599F0C1 |
:10DF900026C08C3D9105D9F022C0863F9105A1F0A5 |
:10DFA000873F910524F4843E910541F018C08C3FD1 |
:10DFB000910581F014C001E0F02E11C0B2E0FB2EFB |
:10DFC0000EC0A3E0FA2E0BC0F4E0FF2E08C0E5E07F |
:10DFD000FE2E05C076E0F72E02C06EE1F62E8FE72A |
:10DFE000F822DD27D695DC2FCC27D795C79586E07C |
:10DFF000189FC0011124C80FD91FD3706E0100E013 |
:10E0000010E045E0B42E86E0F89EF0011124E00F08 |
:10E01000F11FE254F04F24918E2D99278230910503 |
:10E02000E9F0833091052CF4009749F0019771F0E5 |
:10E030002CC083309105D1F00497F1F026C0FE0189 |
:10E04000E35FF64CE00FF11F20831FC0FE01E35F8A |
:10E05000F64CE00FF11F8081822B16C0FE01E35FBA |
:10E06000F64CE00FF11F808182270EC0FE01E35FB6 |
:10E07000F64CE00FF11F06C0FE01E35FF64CE00F27 |
:10E08000F11F2095808182238083FE01E35FF64C9F |
:10E09000E00FF11F6081C6010E947A6CBA940F5F95 |
:10E0A0001F4F0894C11CD11CB7FEADCFDF91CF919B |
:10E0B0001F910F91FF90EF90DF90CF90BF90089548 |
:10E0C000CF93DF93EC0188818823B9F020E0488169 |
:10E0D0006091913D8091903D0E94866F8091903D2E |
:10E0E0008F5F8093903D843120F01092903D0E948C |
:10E0F000466D21968881882349F7DF91CF91089555 |
:10E100008093903D6093913DCA010E946070089594 |
:10E110001F93CF93DF93EC01162F8881882309F199 |
:10E120004881842F99278A309105A9F00D9719F419 |
:10E130001092903D12C0212F6091913D8091903DB1 |
:10E140000E94866F8091903D8F5F8093903D8631D5 |
:10E1500020F01092903D0E94466D21968881882380 |
:10E16000F9F6DF91CF911F9108958093903D6093D0 |
:10E17000913D622FCA010E94887008951F93CF932A |
:10E18000DF93EC01162FFC018491882319F1FE0125 |
:10E190004491842F99278A309105A9F00D9719F49D |
:10E1A0001092903D12C0212F6091913D8091903D41 |
:10E1B0000E94866F8091903D8F5F8093903D863165 |
:10E1C00020F01092903D0E94466D2196FE018491B0 |
:10E1D0008823E9F6DF91CF911F9108958093903DB8 |
:10E1E0006093913D622FCA010E94BE7008951F93F3 |
:10E1F000CF93DF93EC01162FFC018491882311F15A |
:10E20000FE014491842F99278A30910519F00D97CA |
:10E2100021F411C00E94466D10C0212F6091913DE4 |
:10E220008091903D0E94866F8091903D8F5F80939A |
:10E23000903D863110F01092903D2196FE01849120 |
:10E240008823F1F6DF91CF911F9108958093903D3F |
:10E250006093913D622FCA010E94F7700895FF926A |
:10E260000F931F93CF93DF93182FF62EEA01022FFF |
:10E270008881882359F08991202F482F6F2D812F75 |
:10E280000E94866F1F5F88818823A9F7DF91CF9155 |
:10E290001F910F91FF9008951F93CF93382F842FD4 |
:10E2A000242F3093903D6093913D432F480F512D83 |
:10E2B000511D463151051CF085E1282F231B132FDA |
:10E2C000120FC32F311750F420E040E26091913DCE |
:10E2D0008C2F0E94866FCF5FC117B0F3CF911F9133 |
:10E2E0000895CF92DF92EF92FF920F931F93CF93F7 |
:10E2F000DF93D82E162FC02E87FF02C05FE7D52EE2 |
:10E30000103408F01FE38D2D840F912D911DEC0129 |
:10E31000812F820F912D911D7C01C138D10510F004 |
:10E32000C0E8D0E091E4E916F10418F030E4E32EFF |
:10E33000F12C0C2D212F4C2F612F8D2D0E949C6DC7 |
:10E340002E2D4C2F612F8C2F0E949C6D2E2D4D2D2C |
:10E350006E2D8C2F0E949C6D212F4D2D6E2D8D2D9D |
:10E360000E949C6DDF91CF911F910F91FF90EF90D4 |
:10E37000DF90CF9008952F923F924F925F926F92CD |
:10E380007F928F929F92AF92BF92CF92DF92EF9245 |
:10E39000FF920F931F93CF93DF935C016B01E22EEB |
:10E3A00061E0862E912C841A950A222433248EEF64 |
:10E3B0009FEF489F2001499F500C589F500C1124FB |
:10E3C0003101EA018C2D840F422F682F8A2D0E9483 |
:10E3D000536D8C2D8C1B4E2D682F8A2D0E94536DF2 |
:10E3E0004E2D6C2D8A2D8C0F0E94536D4E2D6C2D51 |
:10E3F0008A2D8C1B0E94536D2C163D060CF051C0CB |
:10E4000097FC07C0219782E090E0480E591E840CCB |
:10E41000951C0894611C711C82E090E0280E391E46 |
:10E42000820C931C0894811C911C1C2D1C0FFA2C2F |
:10E43000F60C4E2D612F8F2D0E94536D0A2D06195B |
:10E440004E2D612F802F0E94536D1C2D1C1B4E2DB5 |
:10E45000612F8F2D0E94536D4E2D612F802F0E94B2 |
:10E46000536D1C2D160DFA2CFC0E4E2D612F8F2D89 |
:10E470000E94536D0A2D0C1B4E2D612F802F0E9480 |
:10E48000536D1C2D16194E2D612F8F2D0E94536D2B |
:10E490004E2D612F802F0E94536D6C167D060CF45B |
:10E4A000AFCFDF91CF911F910F91FF90EF90DF9051 |
:10E4B000CF90BF90AF909F908F907F906F905F9024 |
:10E4C0004F903F902F9008952F923F924F925F92DE |
:10E4D0006F927F928F929F92AF92BF92CF92DF9274 |
:10E4E000EF92FF920F931F93CF93DF935C016B0129 |
:10E4F000E22E71E0672E712C641A750A22243324EF |
:10E500008EEF9FEF489F2001499F500C589F500C61 |
:10E5100011244101EA018C2D841B9C2D940F022FA4 |
:10E52000282F4A2D692F8A2D0E949C6D8A2D8C1BC5 |
:10E530002C2D482F6C2D8A2D8C0F0E949C6D2C1633 |
:10E540003D060CF042C077FC07C0219782E090E0C6 |
:10E55000480E591E640C751C0894811C911C82E0A5 |
:10E5600090E0280E391E620C731C0894611C711C0B |
:10E570008C2D8C0F1A2D1819FA2CF80C0E2D282F13 |
:10E58000412F682F8F2D0E949C6D8C2D8C1B282F66 |
:10E59000412F682F8F2D0E949C6D8C2D880D1A2D78 |
:10E5A0001C1BFA2CFC0E282F412F682F8F2D0E9448 |
:10E5B0009C6D8C2D8819282F412F682F8F2D0E943C |
:10E5C0009C6D8C169D060CF4BECFDF91CF911F91F0 |
:10E5D0000F91FF90EF90DF90CF90BF90AF909F9002 |
:10E5E0008F907F906F905F904F903F902F90089505 |
:10E5F0002F923F924F925F926F927F928F929F9253 |
:10E60000AF92BF92CF92DF92EF92FF920F931F9340 |
:10E61000CF93382E462EC42F7901202EC901AA2768 |
:10E6200097FDA095BA2FBC01CD010E94CEC4F7FE84 |
:10E6300006C020E030E040E857E40E94C8C32BED5C |
:10E640003FE049E450E40E94BBC5DC01CB0120E07F |
:10E6500030E044E353E4BC01CD010E9433C43B01EC |
:10E660004C010E9430C47B018C01AC2EBB24A7FC62 |
:10E67000B094CB2CDB2CC601B5010E94CEC4C7FFE1 |
:10E6800006C020E030E040E853E40E94C8C39B018C |
:10E69000AC01C801B7010E94BBC5DC01CB01BC01C4 |
:10E6A000CD010E941EC6DC01CB01BC01CD010E9440 |
:10E6B000A0C4DC01CB01542C581AC401B3010E9440 |
:10E6C0003EC67B018C01C601B5010E94CEC4C7FFC6 |
:10E6D00006C020E030E040E853E40E94C8C39B013C |
:10E6E000AC01C801B7010E94BBC5DC01CB01BC0174 |
:10E6F000CD010E941EC6DC01CB01BC01CD010E94F0 |
:10E70000A0C4DC01CB01830D022D252D482F642DE3 |
:10E71000832D0E949C6DCF911F910F91FF90EF90E0 |
:10E72000DF90CF90BF90AF909F908F907F906F9031 |
:10E730005F904F903F902F9008956F927F928F92AD |
:10E740009F92AF92BF92CF92DF92EF92FF920F9380 |
:10E750001F93CF93782E862E942EC22F6E2CC80135 |
:10E76000AA2797FDA095BA2FBC01CD010E94CEC467 |
:10E7700017FF06C020E030E040E857E40E94C8C31D |
:10E780002BED3FE049E450E40E94BBC5DC01CB0126 |
:10E7900020E030E044E353E4BC01CD010E9433C4E7 |
:10E7A0005B016C010E9430C47B018C018C2F992786 |
:10E7B00087FD9095A92FB92FBC01CD010E94CEC431 |
:10E7C000C7FF06C020E030E040E853E40E94C8C321 |
:10E7D0009B01AC01C801B7010E94BBC5DC01CB01A4 |
:10E7E000BC01CD010E941EC6DC01CB01BC01CD01E4 |
:10E7F0000E94A0C4DC01CB01C82DC81BC601B50115 |
:10E800000E943EC67B018C01892D992787FD90953A |
:10E81000A92FB92FBC01CD010E94CEC497FE06C01E |
:10E8200020E030E040E853E40E94C8C39B01AC0103 |
:10E83000C801B7010E94BBC5DC01CB01BC01CD0101 |
:10E840000E941EC6DC01CB01BC01CD010E94A0C408 |
:10E85000DC01CB01870D062D2C2F482F682D872D2D |
:10E860000E949C6DCF911F910F91FF90EF90DF90D0 |
:10E87000CF90BF90AF909F908F907F906F900895B2 |
:10E880002F923F924F925F926F927F928F929F92C0 |
:10E89000AF92BF92CF92DF92EF92FF920F931F93AE |
:10E8A000CF93DF93CDB7DEB72D970FB6F894DEBFC9 |
:10E8B0000FBECDBF9A8389837C836B834A01690134 |
:10E8C0000D83449F1001459F300C549F300C112440 |
:10E8D000CC9C9001CD9C300DDC9C300D11243F83ED |
:10E8E0002E832C9C50012D9CB00C3C9CB00C112410 |
:10E8F000C9018A199B09AA2797FDA095BA2FBC01C7 |
:10E90000CD010E94CEC47B018C01C101AA2797FDD5 |
:10E91000A095BA2FBC01CD010E94CEC4DC01CB0171 |
:10E9200020E030E040E85EE3BC01CD010E94BBC5C1 |
:10E93000DC01CB019C01AD01C801B7010E94C8C335 |
:10E94000DC01CB01BC01CD010E941EC6DC01CB0164 |
:10E95000BC01CD010E949BC4DC01CB019D878C874B |
:10E960001986188625014A0C5B1C40E050E05B8745 |
:10E970004A8736018B818C0D4D81682F89810E94D9 |
:10E98000536D8B818C194D81682F89810E94536D45 |
:10E990004D816B818981880D0E94536D4D816B8102 |
:10E9A000898188190E94536D8A859B8584159505F8 |
:10E9B0000CF04CC0EC85FD85F7FD0CC00894610897 |
:10E9C0007108C101820D931D481A590AE419F5090D |
:10E9D000FD87EC872A853B852F5F3F4F3B872A8742 |
:10E9E0008E819F81880F991F48855985480F591F2F |
:10E9F00059874887CA01EE81FF818E0F9F1F2C85A2 |
:10EA00003D85280F391F3D872C87FB80F60C198127 |
:10EA10003A85130F4D816F2D812F0E94536D0B810D |
:10EA200006194D81602F812F0E94536D19814A85EF |
:10EA3000141B4D816F2D812F0E94536D4D81602FCE |
:10EA4000812F0E94536D88859985B0CFEE81FF811B |
:10EA5000CF01AA2797FDA095BA2FBC01CD010E9436 |
:10EA6000CEC45B016C012A853B85C901AA2797FDAD |
:10EA7000A095BA2FBC01CD010E94CEC4DC01CB0110 |
:10EA800020E030E040E05FE3BC01CD010E94C8C35C |
:10EA90007B018C019B01AC01C601B5010E94BBC585 |
:10EAA000DC01CB01A8019701BC01CD010E94BBC5CF |
:10EAB0007B018C01930121503040229EC001239E96 |
:10EAC000900D329E900D1124829FA001839F500DC6 |
:10EAD000929F500D1124CA01AA2797FDA095BA2F25 |
:10EAE000BC01CD010E94CEC4DC01CB019C01AD0173 |
:10EAF000C801B7010E94C8C37B018C01EE81FF8170 |
:10EB00002E9EC0012F9E900D3E9E900D1124AA278F |
:10EB100097FDA095BA2FBC01CD010E94CEC4DC01A7 |
:10EB2000CB019C01AD01C801B7010E94C7C3DC0144 |
:10EB3000CB01BC01CD010E941EC6DC01CB01BC0192 |
:10EB4000CD010E949BC4DC01CB019D878C871614EC |
:10EB500017040CF04CC02C853D8512161306A4F04A |
:10EB60004A855B854F5F5F4F5B874A878E819F81B8 |
:10EB7000880F991FE885F985E80FF91FF987E8875D |
:10EB80002E0F3F1F3D872C87089461087108C10133 |
:10EB9000820D931D481A590AC101841995092C85C3 |
:10EBA0003D85280F391F3D872C87FB80F60C198186 |
:10EBB0003A85130F4D816F2D812F0E94536D0B816C |
:10EBC00006194D81602F812F0E94536D19814A854E |
:10EBD000141B4D816F2D812F0E94536D4D81602F2D |
:10EBE000812F0E94536D161417040CF4B4CF2D9688 |
:10EBF0000FB6F894DEBF0FBECDBFDF91CF911F914E |
:10EC00000F91FF90EF90DF90CF90BF90AF909F90CB |
:10EC10008F907F906F905F904F903F902F900895CE |
:10EC20000F93022F9A014D5F5F4F0E9440740F9126 |
:10EC30000895EF920F931F93E02E8901242F4D5FCB |
:10EC40000E949D731F910F91EF900895CF92DF92D4 |
:10EC5000EF92FF920F931F93CF93DF93182F0E9491 |
:10EC6000AA6B60E088E593E10E94BE7020E04DE66B |
:10EC700053E167E0822F0E94267182E08093913DEC |
:10EC8000C12EDD24860102C0000F111F8A95E2F714 |
:10EC90007601F6E0EE0CFF1CFA95E1F70A3011055B |
:10ECA0001CF4802F805D02C0802F895C20E0482FFB |
:10ECB0006091913D822F0E94866F82E08093903D0B |
:10ECC000C0E0D0E08E2D8C0F20E0482F6091913D68 |
:10ECD0008091903D0E94866F8091903D8F5F8093E0 |
:10ECE000903D2196C031D1056CF38091913D8F5FAD |
:10ECF0008093913D0F5F1F4F80E190E0E80EF91E79 |
:10ED0000C601880F991F880F991F049608171907C5 |
:10ED10002CF2DF91CF911F910F91FF90EF90DF9038 |
:10ED2000CF9008958A3018F4805D99270895895C02 |
:10ED300099270895EF92FF920F931F93182F062F94 |
:10ED4000F42EE22E6093913D842F82958F700E9465 |
:10ED500092761F5F1093903D11502E2D482F602FFB |
:10ED6000812F0E94866F8F2D8F700E9492762E2D9C |
:10ED7000482F6091913D8091903D0E94866F1F9138 |
:10ED80000F91FF90EF9008950F931F93082F162F68 |
:10ED900082958F700E949276982F8091903D382FA7 |
:10EDA0008F5F8093903D212F492F6091913D832F5C |
:10EDB0000E94866F802F8F700E949276982F80918C |
:10EDC000903D382F8F5F8093903D212F492F609188 |
:10EDD000913D832F0E94866F8091903D982F8F5F89 |
:10EDE0008093903D212F40E26091913D892F0E94B8 |
:10EDF000866F1F910F9108950F931F93CF93182F34 |
:10EE000004E620E0812F602F0E94C2C6C82F88230D |
:10EE100021F4222311F4013081F48C2F805D909134 |
:10EE2000903D392F9F5F9093903D20E0482F609157 |
:10EE3000913D832F0E94866F21E0C09F802D112479 |
:10EE4000181B802F6AE00E94C2C6082F8823D1F6C3 |
:10EE5000CF911F910F9108958093903D6093913DC4 |
:10EE6000842F0E94FC7608959F92AF92BF92CF921A |
:10EE7000DF92EF92FF920F931F93CF93DF93CDB763 |
:10EE8000DEB727970FB6F894DEBF0FBECDBFF82EC2 |
:10EE9000B62ECA016901902E4AE050E0BE016F5FB4 |
:10EEA0007F4F0E94A1C3DE011196FD010190002059 |
:10EEB000E9F731978E2F8A1B082F1127C016D1062C |
:10EEC00094F410E01C141D04BCF58F2DF3942E2D2A |
:10EED0004AE26B2D0E94866F1F5F812F99278C1548 |
:10EEE0009D059CF329C0AA24C601801B910B18160E |
:10EEF0001906D4F49F2D9F5F81E0981629F48F2D79 |
:10EF0000F92E2E2D40E304C08F2DF92E2E2D40E238 |
:10EF10006B2D0E94866FA3942A2D3327C601801B78 |
:10EF2000910B2817390734F32E2DAE014F5F5F4F39 |
:10EF30006B2D8F2D0E94B57027960FB6F894DEBF0B |
:10EF40000FBECDBFDF91CF911F910F91FF90EF903A |
:10EF5000DF90CF90BF90AF909F9008959F92AF9217 |
:10EF6000BF92CF92DF92EF92FF920F931F93CF93B6 |
:10EF7000DF93CDB7DEB727970FB6F894DEBF0FBE8D |
:10EF8000CDBFF82EB62ECA016901902E4AE050E09E |
:10EF9000BE016F5F7F4F0E9478C3DE011196FD01B5 |
:10EFA00001900020E9F731978E2F8A1B082F112737 |
:10EFB000C016D10694F410E01C141D04B4F58F2D76 |
:10EFC000F3942E2D4AE26B2D0E94866F1F5F812FD6 |
:10EFD00099278C159D059CF328C0AA24C601801B87 |
:10EFE000910B18161906CCF49F2D9F5F992029F0DC |
:10EFF0008F2DF92E2E2D40E304C08F2DF92E2E2DAE |
:10F0000040E26B2D0E94866FA3942A2D3327C60100 |
:10F01000801B910B281739073CF32E2DAE014F5F53 |
:10F020005F4F6B2D8F2D0E94B57027960FB6F89409 |
:10F03000DEBF0FBECDBFDF91CF911F910F91FF902B |
:10F04000EF90DF90CF90BF90AF909F9008958F92F8 |
:10F050009F92AF92BF92CF92DF92EF92FF920F9367 |
:10F060001F93CF93DF93CDB7DEB727970FB6F894F2 |
:10F07000DEBF0FBECDBFF82EB62ECA016901802EAD |
:10F080004AE050E0BE016F5F7F4F0E9478C3DE010F |
:10F090001196FD0101900020E9F73197AE2EAA1AD2 |
:10F0A0000A2D1127C016D1069CF410E01C141D0473 |
:10F0B0000CF066C08F2DF3942E2D4AE26B2D0E942A |
:10F0C000866F1F5F812F99278C159D059CF358C073 |
:10F0D0009924C601801B910B18161906CCF49F2D9C |
:10F0E0009F5F882029F08F2DF92E2E2D40E304C03C |
:10F0F0008F2DF92E2E2D40E26B2D0E94866F93945A |
:10F10000292D3327C601801B910B281739073CF3A3 |
:10F11000FE01EA0DF11D0081108281E0A81631F494 |
:10F120002E2D40E36B2D8F2D815010C082E0A8164C |
:10F1300081F449814D3269F42E2D6B2D8F2D815034 |
:10F140000E94866F2E2D40E36B2D8F2D0E94866FBF |
:10F1500008C02E2DAE014F5F5F4F6B2D8F2D0E948B |
:10F16000B5701F2D1A0D2E2D4EE26B2D812F815063 |
:10F170000E94866F2E2D402F6B2D812F0E94866F4F |
:10F1800027960FB6F894DEBF0FBECDBFDF91CF91AB |
:10F190001F910F91FF90EF90DF90CF90BF90AF90B5 |
:10F1A0009F908F900895EF92FF920F931F93CF93AC |
:10F1B000DF93182FE62EEA0104E6202F3327CE0135 |
:10F1C000B9010E94CEC6F62E802F6AE00E94C2C608 |
:10F1D000813039F4812F1F5F20E04EE26E2D0E94B6 |
:10F1E000866F8F2D805D912F1F5F20E0482F6E2D41 |
:10F1F000892F0E94866FF09EC0011124C81BD90B75 |
:10F20000802F6AE00E94C2C6082F8823B1F6DF91E2 |
:10F21000CF911F910F91FF90EF9008958F929F9241 |
:10F22000AF92BF92CF92DF92EF92FF920F931F9314 |
:10F23000CF93DF93CDB7DEB727970FB6F894DEBF35 |
:10F240000FBECDBFF82EB62ECA016901802E4AE04E |
:10F2500050E0BE016F5F7F4F0E9478C3DE011196C0 |
:10F26000FD0101900020E9F73197AE2EAA1A0A2D70 |
:10F270001127C016D1069CF410E01C141D040CF0DC |
:10F2800066C08F2DF3942E2D4AE26B2D0E94866F5F |
:10F290001F5F812F99278C159D059CF358C09924D9 |
:10F2A000C601801B910B18161906CCF49F2D9F5F89 |
:10F2B000882029F08F2DF92E2E2D40E304C08F2DAC |
:10F2C000F92E2E2D40E26B2D0E94866F9394292DEE |
:10F2D0003327C601801B910B281739073CF3FE0129 |
:10F2E000EA0DF11D0081108281E0A81631F42E2D67 |
:10F2F00040E36B2D8F2D815010C082E0A81681F461 |
:10F3000049814D3269F42E2D6B2D8F2D81500E9435 |
:10F31000866F2E2D40E36B2D8F2D0E94866F08C0C7 |
:10F320002E2DAE014F5F5F4F6B2D8F2D0E94B5705C |
:10F330001F2D1A0D2E2D4EE26B2D812F81500E9414 |
:10F34000866F2E2D402F6B2D812F0E94866F279662 |
:10F350000FB6F894DEBF0FBECDBFDF91CF911F91E6 |
:10F360000F91FF90EF90DF90CF90BF90AF909F9064 |
:10F370008F900895CF92DF92EF92FF920F931F9399 |
:10F38000F82E162F6A012CE330E0CA01B9010E9461 |
:10F39000CEC6AB01629FC001639F900D729F900D1E |
:10F3A0001124C81AD90AEE240E2D22E030E0612F74 |
:10F3B0008F2D0E9434772E2D4AE3612F8F2D8E5F83 |
:10F3C0000E94866F01E022E030E0A601612F8F2DC0 |
:10F3D0008D5F0E9434771F910F91FF90EF90DF9027 |
:10F3E000CF9008956F927F928F929F92AF92BF922B |
:10F3F000CF92DF92EF920F931F93CF93C62F3901D5 |
:10F400004A01182F1F5F57FF0BC09094809470948F |
:10F410006094611C711C811C911C20E04DE202C0B3 |
:10F4200020E040E26C2F0E94866FC401B30120E807 |
:10F4300036E948E950E00E9417C759016A01EE24F5 |
:10F4400001E023E030E0A5016C2F812F0E9434778A |
:10F450002E2D4EE26C2F812F8D5F0E94866FC6018C |
:10F46000B50120E836E948E950E00E94A3C6DC0176 |
:10F47000CB01681A790A8A0A9B0AC401B30128EEF3 |
:10F4800033E040E050E00E9417C759016A0124E0D0 |
:10F4900030E0A5016C2F812F8C5F0E943477C5016D |
:10F4A000AA27BB27BC01CD0128EE33E040E050E0A5 |
:10F4B0000E94A3C6DC01CB01681A790A8A0A9B0A5A |
:10F4C00023E030E0A3016C2F812F885F0E94347706 |
:10F4D0002E2D4EE16C2F812F855F0E94866FCF917C |
:10F4E0001F910F91EF90DF90CF90BF90AF909F90C2 |
:10F4F0008F907F906F900895CF92DF92EF92FF925E |
:10F500000F931F93CF93DF93F89400916F3710916F |
:10F510007037C801AA2797FDA095BA2FBC01CD016D |
:10F520000E94CEC4FC01EB0117FF08C020E030E0D0 |
:10F5300040E857E40E94C8C3FC01EB0180910E2E05 |
:10F5400090910F2EA091102EB091112E9E01AF011F |
:10F55000BC01CD010E94C8C3DC01CB012FE832EC15 |
:10F5600045E75FE3BC01CD010E94BBC56B017C0197 |
:10F5700060930E2E70930F2E8093102E9093112E69 |
:10F580000E949BC4DC01CB01AC019C0197FF02C02F |
:10F59000215C3F4F207C8A01021B130B1093092E24 |
:10F5A0000093082E20E030E040E85CE3C701B6019C |
:10F5B0000E94BBC560930E2E70930F2E8093102E69 |
:10F5C0009093112E0032110584F020E030E040E8E5 |
:10F5D0005FE30E94C8C3DC01CB0180930E2E9093A1 |
:10F5E0000F2EA093102EB093112E80910E2E90917D |
:10F5F0000F2EA091102EB091112E20E030E040EFA0 |
:10F6000050E4BC01CD010E9433C4DC01CB018093E6 |
:10F610000A2E90930B2EA0930C2EB0930D2EBC01AE |
:10F62000CD010E94A0C4DC01CB019093052E8093F4 |
:10F63000042E1092072E1092062E80E090E0A0E09B |
:10F64000B0E080930E2E90930F2EA093102EB093C7 |
:10F65000112E7894DF91CF911F910F91FF90EF9031 |
:10F66000DF90CF9008951F920F920FB60F92112442 |
:10F670000F931F932F933F934F935F936F937F93BA |
:10F680008F939F93AF93BF93CF93DF93EF93FF93AA |
:10F690000091780010917900C801AA2797FDA095E4 |
:10F6A000BA2FBC01CD010E94CEC4FC01EB0117FFB3 |
:10F6B00008C020E030E040E857E40E94C8C3FC01E5 |
:10F6C000EB0180910E2E90910F2EA091102EB091F3 |
:10F6D000112E9E01AF01BC01CD010E94C8C3DC0107 |
:10F6E000CB0180930E2E90930F2EA093102EB093EB |
:10F6F000112E8091062E9091072E01969093072E41 |
:10F700008093062E8050904114F00E947C7AFF91E5 |
:10F71000EF91DF91CF91BF91AF919F918F917F91A9 |
:10F720006F915F914F913F912F911F910F910F908A |
:10F730000FBE0F901F90189580E480937C008091FD |
:10F740007C00807E816080937C008FEE80937A00C5 |
:10F7500008950F931F93CF93DF93C0E0D0E001E0B3 |
:10F7600023E0402F62E087E60E9471718091042EB1 |
:10F770009091052E8054914038F400E023E043E15D |
:10F7800062E089E60E945F6E00916E37013041F5BC |
:10F7900027E047E160E088E60E9471712091042E25 |
:10F7A0003091052E81E0243A380710F0C3E1D0E013 |
:10F7B000C901815491408336910540F4C9018054B8 |
:10F7C000914065E070E00E94CEC6EB0183E18C1BA6 |
:10F7D00000E023E0482F62E08C2F85590E945F6E85 |
:10F7E00010916E37112349F501E027E046E1612FC2 |
:10F7F00088E60E9471712091042E3091052E81E0DF |
:10F800002A39380710F0C2E1D0E0C9018154914093 |
:10F810008935910540F4C9018054914065E070E05C |
:10F820000E94CEC6EB0182E18C1B012F23E0482F02 |
:10F8300062E08C2F85590E945F6E209739F001E0BD |
:10F8400023E04C2F62E08AE60E945F6EDF91CF9149 |
:10F850001F910F91089560914E2E623340F55091A3 |
:10F86000132E533030F582E08093F53DE091F33D67 |
:10F87000F091F43D7BE281AD282F33274091F53D97 |
:10F88000479FC00111242817390734F0842F8F5F58 |
:10F890008093F53D873078F38091F53D869F802DEC |
:10F8A00011248093933D5F5F5093132E02C06093A9 |
:10F8B000933DE091F33DF091F43D91AD8091933D06 |
:10F8C000981778F48091122E853020F48F5F809302 |
:10F8D000122E089541E060E270E088EE93E00E940D |
:10F8E0002A3608959C0148978C9718F480E090E0A0 |
:10F8F0000895C901845490408D9718F481E090E0F8 |
:10F900000895C901815790408D9718F482E090E0E6 |
:10F910000895C9018E5990408D9718F483E090E0C6 |
:10F920000895C9018B5C90408D9718F484E090E0B5 |
:10F930000895C901885F90408D9718F485E090E0A4 |
:10F940000895255231402D32310518F486E090E0BB |
:10F95000089587E090E00895FF920F931F93CF934F |
:10F96000DF93182FF62ECA0166E170E00E94CEC622 |
:10F97000CB018D5EC82FDD27CE55DC4E08E0FE01A1 |
:10F980008491912F1F5F20E0482F6F2D892F0E94B7 |
:10F99000866F0150219607FFF2CFDF91CF911F9123 |
:10F9A0000F91FF9008957F928F929F92AF92BF9296 |
:10F9B000CF92DF92EF92FF920F931F93CF93DF933B |
:10F9C000CDB7DEB721970FB6F894DEBF0FBECDBF1F |
:10F9D000762ED42E922F580126E0822E889D70011B |
:10F9E0001124CE2C770C770C770C87E0780E892FBA |
:10F9F0008695172D181B01E0292F612F8E2D9983D5 |
:10FA00000E947171998192508D2D8250100F9E2C01 |
:10FA1000900E00E0292F482F612F892D0E945F6EE4 |
:10FA2000DE0C01E0272D4D2D672D8E2D0E949C6D43 |
:10FA30001A141B040CF060C0C50165E070E00E9460 |
:10FA4000E2C66130710579F0623071051CF4672BF4 |
:10FA500029F033C062307105A1F02FC0872D81508D |
:10FA600096E0C90E61C0972D91508E2D8A5F01E0FE |
:10FA7000292F482F692F82500E949C6DEDEF7E0E3A |
:10FA800069C0972D91508E2D8A5F01E0292F482F54 |
:10FA9000692F82500E949C6DFDEF7F0E202F44E065 |
:10FAA000672D8E2D8D5F0E945F6E8EEF780E202F5A |
:10FAB000482D672D8E2D8E5F91C0972D91508C2DE6 |
:10FAC0008A5F01E0292F482F692F82500E949C6D88 |
:10FAD0009DEF790E202F44E0672D8C2D8D5F0E94C5 |
:10FAE0005F6EEEEF7E0E202F46E0672D8C2D8E5F31 |
:10FAF0000E945F6E7A946EC0B7FE72C0C5016BEF54 |
:10FB00007FEF0E94E2C661307105B9F06230710585 |
:10FB10001CF4672B29F040C06230710509F13CC02C |
:10FB2000872D8F5FF6E0CF0E01E0282F4C2D682F38 |
:10FB30008C2D82500E949C6D53C0972D9F5F8E2DFF |
:10FB40008A5F01E0292F482F692F82500E949C6D07 |
:10FB500082E0780E202F44E0672D8C2D8D5F3EC013 |
:10FB6000972D9F5F8E2D8A5F01E0292F482F692FE7 |
:10FB700082500E949C6D92E0790E202F44E0672D08 |
:10FB80008E2D8D5F0E945F6EE2E07E0E202F482D4D |
:10FB9000672D8E2D8E0F22C0972D9F5F8C2D8A5F33 |
:10FBA00001E0292F482F692F82500E949C6DF2E0BE |
:10FBB0007F0E202F44E0672D8C2D8D5F0E945F6E9D |
:10FBC00082E0780E202F46E0672D8C2D8E5F0E94FC |
:10FBD0005F6E700E202F48E0672D892D0E945F6EAA |
:10FBE00021960FB6F894DEBF0FBECDBFDF91CF9147 |
:10FBF0001F910F91FF90EF90DF90CF90BF90AF904B |
:10FC00009F908F907F9008959F92AF92BF92CF92D6 |
:10FC1000DF92EF92FF920F931F93162F96E0899F2A |
:10FC2000C0011124E82E110F110F110F195F6CEF95 |
:10FC3000962E910E41E0692D0E94536D5BEFA52E2B |
:10FC4000A10EBE2CB394C12ECA9401E02A2D4B2DD7 |
:10FC50006C2D8B2D0E949C6D012F065041E0602F72 |
:10FC60008E2D8E5F0E94536D812F875043E0D42EDE |
:10FC7000DE0C41E0682F8D2D0E94536D41E0602F16 |
:10FC80008E2D8C5F0E94536D35E0F32EFE0C01E04B |
:10FC90002A2D4F2D6C2D8F2D0E949C6D402F692D8C |
:10FCA0008E2D8A5F0E94536D402F6C2D8D2D0E94EA |
:10FCB000536D812F8250402F682F8D2D0E94536DE0 |
:10FCC000212F4F2D612F8B2D0E949C6D1F910F9125 |
:10FCD000FF90EF90DF90CF90BF90AF909F900895EE |
:10FCE0008F929F92BF92CF92DF92EF92FF920F93EB |
:10FCF0001F93162F96E0899F40011124B82C110FF5 |
:10FD0000110F110F195FC12EDD248DEF9FEFC80E6B |
:10FD1000D91EE82CFF2483E090E0E80EF91E21E0D4 |
:10FD200044E050E0B601C7010E94BB71812F8350AF |
:10FD300096E0B90E01E0282F4B2D682F882D0E94E8 |
:10FD40009C6D812F86509B2D9350282F492F612F1A |
:10FD5000892F0E949C6D202F42E050E0B601C70120 |
:10FD60000E94BB711F910F91FF90EF90DF90CF9099 |
:10FD7000BF909F908F900895EF920F930E94AA6B6F |
:10FD80008CE190E00E9438BC20E0AC0167E08CE0A0 |
:10FD90000E942F7188E990E00E9438BC20E0AC01FD |
:10FDA000622F822F0E942F718091272E9091282EF2 |
:10FDB000AA2797FDA095BA2FBC01CD010E94CEC401 |
:10FDC000DC01CB0120E030E040EA51E4BC01CD0190 |
:10FDD0000E9433C4DC01CB01BC01CD010E949BC455 |
:10FDE000DC01CB01EE240E2D24E030E0AC016E2DC1 |
:10FDF0008EE00E94AE772E2D4DE66E2D82E10E94A0 |
:10FE0000866F89E990E00E9438BC2E2DAC0161E03C |
:10FE10008E2D0E942F718091252E9091262E9C016F |
:10FE200044275527DA01C90173E0880F991FAA1FDB |
:10FE3000BB1F7A95D1F7820F931FA41FB51FBC017A |
:10FE4000CD012AEF30E040E050E00E94F5C6DA0133 |
:10FE5000C90123E030E0AC0161E08FE00E9434771B |
:10FE60002E2D46ED53E161E082E10E94EE708AE9B9 |
:10FE700090E00E9438BC2E2DAC0162E08E2D0E94D5 |
:10FE80002F718091232E9091242E6AE070E00E94C1 |
:10FE9000E2C624E030E0AB0162E08FE00E943477FC |
:10FEA0002E2D4DE662E083E10E94866F8CE990E0A2 |
:10FEB0000E9438BC2E2DAC0163E08E2D0E942F7164 |
:10FEC0004091212E5091222E63E08EE00E94BA795B |
:10FED0002E2D4DE663E083E10E94866F8BE990E072 |
:10FEE0000E9438BC2E2DAC0164E08E2D0E942F7133 |
:10FEF00080917101992723E030E0AC0164E08EE04D |
:10FF00000E9427782E2D46E564E082E10E94866FEC |
:10FF10008DE990E00E9438BC2E2DAC0165E08E2D5D |
:10FF20000E942F7124E030E040911F2E5091202E2E |
:10FF300065E08EE00E9427782E2D41E465E083E1A4 |
:10FF40000E94866F8EE990E00E9438BC2E2DAC0195 |
:10FF500066E08E2D0E942F7124E030E040911D2E2E |
:10FF600050911E2E66E08EE00E9434772E2D4AEDD1 |
:10FF700053E166E082E10E94EE7006C088EC90E0FA |
:10FF80009093512E8093502E80E20E944238882315 |
:10FF9000A9F38091152E8B7F8093152E80EF0E9400 |
:10FFA00042380E94AA6B0F91EF9008958F929F9212 |
:10FFB000AF92BF92CF92DF92EF920F931F930E9466 |
:10FFC000AA6B87E190E00E9438BC22E0AC0160E0BF |
:10FFD000862F0E942F718CE190E00E9438BC20E0B7 |
:10FFE000AC0167E08CE00E942F7110E0212F3327D5 |
:10FFF0008DE090E0289F4001299F900C389F900C45 |
:020000021000EC |
:10000000112484E99DE3880E991EF401A480B58033 |
:10001000C680D780C601B50120E836E948E950E03E |
:100020000E94F5C6DA01C9011F5FEE240E2D22E001 |
:1000300030E0AC01612F81E00E9434772E2D4EED2F |
:1000400053E1612F83E00E94EE70C601B50128EEF6 |
:1000500033E040E050E00E94F5C6CA01B90120E15A |
:1000600037E240E050E00E94F5C6DC01CB0101E040 |
:1000700024E030E0AC01612F84E00E943477C601B7 |
:10008000B5012AE030E040E050E00E94F5C6CA0128 |
:10009000B90124E630E040E050E00E94F5C6DC0102 |
:1000A000CB0122E030E0AC01612F88E00E94347780 |
:1000B000F401A080B180C280D380C601B50120E8E0 |
:1000C00036E948E950E00E94F5C6DA01C9010E2D73 |
:1000D00022E030E0AC01612F8CE00E9434772E2DBD |
:1000E00040EE53E1612F8EE00E94EE70C601B50133 |
:1000F00028EE33E040E050E00E94F5C6CA01B901A5 |
:1001000020E137E240E050E00E94F5C6DC01CB017F |
:1001100001E024E030E0AC01612F8FE00E943477F1 |
:10012000C601B5012AE030E040E050E00E94F5C68B |
:10013000CA01B90124E630E040E050E00E94F5C673 |
:10014000DC01CB0122E030E0AC01612F83E10E94B1 |
:100150003477163008F44ACF06C088EC90E09093CC |
:10016000512E8093502E80E20E9442388823A9F3BA |
:1001700080EF0E9442380E94AA6B1F910F91EF906E |
:10018000DF90CF90BF90AF909F908F9008952F9267 |
:100190003F924F925F926F927F928F929F92AF9217 |
:1001A000BF92CF92DF92EF920F9384E890E00E948B |
:1001B00038BC20E0AC0162E0822F0E942F7185E8FC |
:1001C00090E00E9438BC20E0AC0163E0822F0E94E6 |
:1001D0002F7187E190E00E9438BC20E0AC0165E01F |
:1001E000822F0E942F71A090983DB090993DC090B1 |
:1001F0009A3DD0909B3DC601B50120E836E948E91B |
:1002000050E00E94F5C6DA01C901EE240E2D22E06D |
:1002100030E0AC0166E081E00E9434772E2D42EEA2 |
:1002200053E166E083E00E94EE70C601B50128EE5E |
:1002300033E040E050E00E94F5C6CA01B90120E178 |
:1002400037E240E050E00E94F5C6DC01CB0101E05E |
:1002500024E030E0AC0166E084E00E943477FAE00C |
:100260002F2E312C412C512CC601B501A201910138 |
:100270000E94F5C6E4E66E2E712C812C912CCA01E9 |
:10028000B901A40193010E94F5C6DC01CB0122E073 |
:1002900030E0AC0166E088E00E943477A090943DA5 |
:1002A000B090953DC090963DD090973DC601B50168 |
:1002B00020E836E948E950E00E94F5C6DA01C901B4 |
:1002C0000E2D22E030E0AC0166E08CE00E94347735 |
:1002D0002E2D44EE53E166E08EE00E94EE70C601E2 |
:1002E000B50128EE33E040E050E00E94F5C6CA01B7 |
:1002F000B90120E137E240E050E00E94F5C6DC01A0 |
:10030000CB0101E024E030E0AC0166E08FE00E9428 |
:100310003477C601B501A20191010E94F5C6CA0158 |
:10032000B901A40193010E94F5C6DC01CB0122E0D2 |
:1003300030E0AC0166E083E10E9434770F91EF90EA |
:10034000DF90CF90BF90AF909F908F907F906F90F5 |
:100350005F904F903F902F9008958F929F92AF9211 |
:10036000BF92CF92DF92EF92FF920F931F93CF93A2 |
:10037000DF93CDB7DEB721970FB6F894DEBF0FBE7F |
:10038000CDBF182F08EC802E912C9092512E809288 |
:10039000502E1092A02A10929F2B882309F4FAC0A5 |
:1003A00042E060E070E0CB010E942A360E94AA6B16 |
:1003B0002091983D3091993D40919A3D50919B3DBF |
:1003C0006091943D7091953D8091963D9091973DBF |
:1003D0000E94B85F83E890E00E9438BC22E0AC0144 |
:1003E00060E0862F0E942F7184E890E00E9438BC64 |
:1003F00020E0AC0162E0822F0E942F7185E890E03E |
:100400000E9438BC20E0AC0163E0822F0E942F7173 |
:1004100087E190E00E9438BC20E0AC0165E0822FCB |
:100420000E942F7140E060E470E08AEF90E00E944B |
:100430002A3611E01093142EA090983DB090993D6B |
:10044000C0909A3DD0909B3DC601B50120E836E9A9 |
:1004500048E950E00E94F5C6DA01C901EE240E2DEC |
:1004600022E030E0AC0166E0812F0E9434772E2D2F |
:1004700046EE53E166E083E00E94EE70C601B501EE |
:1004800028EE33E040E050E00E94F5C6CA01B90111 |
:1004900020E137E240E050E00E94F5C6DC01CB01EC |
:1004A000012F24E030E0AC0166E084E00E94347764 |
:1004B000C601B5012AE030E040E050E00E94F5C6F8 |
:1004C000CA01B90124E630E040E050E00E94F5C6E0 |
:1004D000DC01CB0122E030E0AC0166E088E00E9464 |
:1004E0003477A090943DB090953DC090963DD090CB |
:1004F000973DC601B50120E836E948E950E00E9481 |
:10050000F5C6DA01C9010E2D22E030E0AC0166E04B |
:100510008CE00E9434772E2D48EE53E166E08EE0A9 |
:100520000E94EE70C601B50128EE33E040E050E0D5 |
:100530000E94F5C6CA01B90120E137E240E050E06F |
:100540000E94F5C6DC01CB01012F24E030E0AC01B4 |
:1005500066E08FE00E943477C601B5012AE030E002 |
:1005600040E050E00E94F5C6CA01B90124E630E03F |
:1005700040E050E00E94F5C6DC01CB0122E030E013 |
:10058000AC0166E083E10E9434779092512E809214 |
:10059000502E16C083E890E00E9438BC22E0AC01E7 |
:1005A000612F812F0E942F710E94C7808091A837F0 |
:1005B000813031F4412F60E870E0C4010E942A3696 |
:1005C0000E94FC428FE48093A02A1982B1E0EB2EB6 |
:1005D000F12CFF92EF928E010E0D1F1D1F930F93B2 |
:1005E000A1E0DA2EDF921F9284E68F930E944041B1 |
:1005F0008AE08983FF92EF921F930F93DF9282E04C |
:100600008F938FE68F930E9440418DB79EB70E96D1 |
:100610000FB6F8949EBF0FBE8DBF21960FB6F8940B |
:10062000DEBF0FBECDBFDF91CF911F910F91FF9025 |
:10063000EF90DF90CF90BF90AF909F908F900895F4 |
:100640000F93DC01CA01022F440F551F440F551FA1 |
:10065000480F591F480F591F57FF02C04F5F5F4F88 |
:10066000CA01959587951296FD01EE0FFF1FEE0FBB |
:10067000FF1FEA0FFB1FEA0FFB1F6F5F7F4F23E097 |
:10068000660F771F2A95E1F76D5F7F4FAC014350EE |
:10069000504005979C01CF0102960E9440740F9133 |
:1006A0000895EF920F931F93E82F562FD90126E05C |
:1006B000429F802D112463E00E94C2C69927EE5FFD |
:1006C000E29FE02D11245F5F062E01C0550F0A94B2 |
:1006D000EAF7560FE02E8D01282F482F652F8E2F19 |
:1006E0008E5F0E949D731F910F91EF900895AF92BE |
:1006F000BF92CF92DF92EF92FF920F931F93CF930F |
:10070000DF93C82ED62E842FAA24BB249927AA278C |
:10071000BB27FC013197EA31F10508F05AC6E35ACC |
:10072000FF4FEE0FFF1F0590F491E02D099480918B |
:10073000F23DE091F33DF091F43D80FF0BC0E65BAC |
:10074000FF4F808181FF03C084EA90E075C583EA92 |
:1007500090E072C5E65BFF4F808181FF03C086EAAF |
:1007600090E06AC585EA90E067C5E091F33DF091BD |
:10077000F43D83A994A9AA2797FDA095BA2FBC019F |
:10078000CD010E94CEC47B018C0120E030E048E422 |
:1007900053E40E94B7C5181654F020E030E048E456 |
:1007A00053ECC801B7010E942CC48823D4F420E084 |
:1007B00030E040EA51E4C801B7010E9433C4DC01D3 |
:1007C000CB01BC01CD010E949BC4DC01CB01EE2416 |
:1007D0000E2D24E030E0AC016D2D8C2D0E94AE7703 |
:1007E00019C020E030E040E05FE3C801B7010E949B |
:1007F000BBC5DC01CB01BC01CD010E949BC4DC0167 |
:10080000CB01EE240E2D23E030E0AC016D2D8C2DBC |
:100810000E940E7920E04AEE53E16D2D8C2D8C5F05 |
:100820000E94EE7020E049E06D2D8C2D8B5FAEC4F0 |
:100830008091C437813009F0EFC04091F53D4423E9 |
:1008400009F4EAC0E091F33DF091F43D91AD80915F |
:10085000933D55277C2D7A5FCC2DC95F981760F4A6 |
:10086000E2E0EE2E00E021E030E0872F0E943477B6 |
:100870002E2D4CEE53E10AC0EE240E2D21E030E087 |
:10088000872F0E9434772E2D4EEE53E16D2D8C2F45 |
:100890000E94EE708091F53D833009F051C0CD2D5E |
:1008A000DD2763E0CC0FDD1F6A95E1F786E0C89E87 |
:1008B0007001112401E027E04CE16C2F8E2D0E9485 |
:1008C0007171E091F33DF091F43D81AD282F332714 |
:1008D0008091F53D992755E0880F991F5A95E1F7CA |
:1008E000281B390BC90143E0880F991F4A95E1F78E |
:1008F000820F931F820F931F6CE070E00E94E2C68C |
:100900005B01CB0101974B9748F48C2F800F25E0BA |
:10091000462F682F8E2D800F0E945F6E8BE1A816E8 |
:10092000B10470F48AE18A199C2F9F5F3A2D3E0D25 |
:1009300000E025E0482F692F832F8F5F0E945F6EB4 |
:100940008091F53D8450823008F066C0CD2DDD27C2 |
:1009500083E0CC0FDD1F8A95E1F786E0C89E700129 |
:10096000112401E027E04EE16C2F8E2D0E94717161 |
:100970008091F53D8430B1F4E091F33DF091F43D88 |
:1009800081AD282F332720583040C90103E0880F5C |
:10099000991F0A95E1F7820F931F820F931F6FE053 |
:1009A00070E017C08530C1F4E091F33DF091F43D63 |
:1009B00081AD282F3327205A3040C90113E0880F1A |
:1009C000991F1A95E1F7820F931F820F931F63E11E |
:1009D00070E00E94E2C65B01C50101974D9750F49B |
:1009E0008C2F8F5F01E025E04A2D682F8E2D800F20 |
:1009F0000E945F6E9CE1A916B10470F48CE18A1923 |
:100A00009C2F9F5F3A2D3E0D00E025E0482F692F77 |
:100A1000832F8F5F0E945F6EC091C437CC2309F093 |
:100A2000D8C4809166379927823091051CF00297CF |
:100A300039F1CFC4E091F33DF091F43D81AD909157 |
:100A4000933D1C2D1C5F482F5527891768F4B2E091 |
:100A5000EB2E0C2F23E030E06D2D8C2D0E9427789B |
:100A60002E2D40EF53E1BBC3EC2E0C2F23E030E0E2 |
:100A70006D2D8C2D0E9427782C2F42EF53E1AFC3B0 |
:100A8000E091F33DF091F43D81AD9091933D482F7D |
:100A900055277C2D72501C2D1E5F891758F4A4E039 |
:100AA000EA2E0C2F23E030E06D2D872F0E9427784F |
:100AB00022E00AC0F3E0EF2E0C2F23E030E06D2D92 |
:100AC000872F0E9427782C2F46E56D2D812F0E94BD |
:100AD000A16E7FC4E091F33DF091F43DE05BFF4FE8 |
:100AE000408151818091673790916837CC2DCB5FE1 |
:100AF0008417950760F4E2E0EE2E00E025E030E098 |
:100B00008C2D0E9434772E2D44EF53E10AC0EE2441 |
:100B10000E2D25E030E08C2D0E9434772E2D48EFED |
:100B200053E16D2D8C2F5DC3E091F33DF091F43DC9 |
:100B3000E65BFF4F808180FF03C088EA90E07CC3C2 |
:100B400087EA90E079C380916637992782309105D2 |
:100B50001CF0029761F03DC4E091F33DF091F43D4B |
:100B6000EE240E2D23E030E046AD57AD1DC1E091DF |
:100B7000F33DF091F43D73E0E72E00E023E030E038 |
:100B800046AD57AD8C2D0E943477202F4EE16D2D50 |
:100B90008C2D885FFBC2E091F33DF091F43D86AD72 |
:100BA00097AD0E94727CE82FFF27EE0FFF1FE258DF |
:100BB000FC4E8591949120E0AC01E6C1E091F33DBB |
:100BC000F091F43D46AD57AD8C2D0E94AC7C01C434 |
:100BD000E091F33DF091F43DE25BFF4FEE240E2DEA |
:100BE00023E030E0408151818C2D0E9427782E2D0A |
:100BF0004CEF53E16D2D8C2D8C5FF3C2E091F33DF2 |
:100C0000F091F43D47A950AD8C2D0E94BA7920E0B7 |
:100C10004EEF53E16D2D8C2D8B5FE3C2E091F33DE0 |
:100C2000F091F43D82AD93AD9C0144275527DA0144 |
:100C3000C90163E0880F991FAA1FBB1F6A95D1F7EE |
:100C4000820F931FA41FB51FBC01CD012AEF30E016 |
:100C500040E050E00E94F5C6DA01C901EE240E2DF5 |
:100C600023E030E0AC016D2D8C2D0E9434772E2DC9 |
:100C700040E054E16D2D8C2D8D5FB3C280916637BD |
:100C800099278130910551F08230910524F4892B08 |
:100C900009F441C09EC30297F1F19BC3862F9927A7 |
:100CA00021E047E050E0BC018C2D99270E94208371 |
:100CB0008091C337E091F33DF091F43D882329F012 |
:100CC00086A597A526AD37AD04C086AD97AD26A500 |
:100CD00037A5821B930B88599E4F68E671E00E94EE |
:100CE000E2C69093F73D8093F63D00E02091292ED7 |
:100CF00030912A2E47E06D2D8C2D0E9451838091DA |
:100D0000F63D9091F73D90932A2E8093292E01E095 |
:100D10009C0147E03CC08D2D992721E045E050E043 |
:100D2000BC018C2D99270E9420838091C337E091CC |
:100D3000F33DF091F43D882329F086A597A526ADD3 |
:100D400037AD04C086AD97AD26A537A5821B930BA2 |
:100D500088599E4F68E671E00E94E2C69093F73D85 |
:100D60008093F63D00E02091292E30912A2E45E017 |
:100D70006D2D8C2D0E9451838091F63D9091F73D11 |
:100D800090932A2E8093292E01E09C0145E06D2D41 |
:100D90008C2D0E9451831DC3EE240E2D23E030E0E4 |
:100DA0004091F63D5091F73D6D2D8C2D0E9434778A |
:100DB000202F4EE16D2D8C2D8D5FE8C1809166371F |
:100DC0009927823091051CF0029709F002C3E09147 |
:100DD000F33DF091F43D858D968D6AE070E00E94C0 |
:100DE000E2C6EE240E2D23E030E0AB01DDCF809192 |
:100DF00066379927823091051CF0029709F1E9C204 |
:100E0000E091F33DF091F43D84A595A56AE070E092 |
:100E10000E94CEC6EE240E2D23E030E0AB016D2DF6 |
:100E20008C2D0E9434772E2D4DE66D2D8C2D8D5FEF |
:100E30000E94866F6D2D8C2D8C5F0E94047EC9C22E |
:100E400020E044E054E18C2D0E94EE70E091F33DEF |
:100E5000F091F43D84A595A56AE070E00E94CEC6AD |
:100E6000EE240E2D23E030E0AB016D2D8C2D8B5F39 |
:100E70000E9434772E2D49E054E146C080916637B8 |
:100E80009927823091051CF0029709F1A2C2E091E6 |
:100E9000F33DF091F43D838D948D6AE070E00E9403 |
:100EA000CEC6EE240E2D23E030E0AB016D2D8C2D4F |
:100EB0000E9434772E2D4DE66D2D8C2D8D5F0E9476 |
:100EC000866F6D2D8C2D8C5F0E94707E82C220E01B |
:100ED0004DE054E18C2D0E94EE70E091F33DF091D5 |
:100EE000F43D838D948D6AE070E00E94CEC6EE24BE |
:100EF0000E2D23E030E0AB016D2D8C2D8B5F0E9419 |
:100F000034772E2D42E154E16D2D8C2D885F69C11F |
:100F100040E050E08091172E882311F441E050E02A |
:100F2000E091F33DF091F43D20A9822F99274817D5 |
:100F3000590729F42093172E81E08093162E809173 |
:100F4000162E813071F4EC5BFF4F808185FF09C064 |
:100F500040E060E870E084EF91E00E942A36109251 |
:100F6000162EE091F33DF091F43D80A99927EE24EF |
:100F70000E2D22E030E0AC016D2D8C2D8E5F0E9495 |
:100F800034772E2D46E154E16D2D8C2D2AC1209110 |
:100F9000A637E091F33DF091F43D222341F4E65B66 |
:100FA000FF4F8081E62EFF2483FD18C032C0E65B30 |
:100FB000FF4F8081E62EFF2483FD2BC03FC0209190 |
:100FC000A637E091F33DF091F43D2223D9F4E65B9E |
:100FD000FF4F8081E62EFF2484FF1BC08091A7373E |
:100FE000482F552703E0EE0CFF1C0A95E1F783E03C |
:100FF00090E0E80EF91E86E0C89E800111240B5F88 |
:101000001F4F30C0E65BFF4F8081E62EFF2484FF38 |
:1010100015C08091A737482F552713E0EE0CFF1C11 |
:101020001A95E1F783E090E0E80EF91E86E0C89E8D |
:10103000800111240B5F1F4F21E014C08091A7375E |
:10104000482F5527C3E0EE0CFF1CCA95E1F783E05B |
:1010500090E0E80EF91E86E0C89E800111240B5F27 |
:101060001F4F20E0B701C8010E94647221E043E0F5 |
:1010700050E0B701C8010E94BB71ABC1E091F33DE4 |
:10108000F091F43DEC5BFF4F808186FF03C020E0D0 |
:101090004DE402C020E048E56D2D8C2D77C0E09135 |
:1010A000F33DF091F43DEC5BFF4F8081992780FF89 |
:1010B00003C08CEA90E0C0C081FF03C08DEA90E0DD |
:1010C000BBC082FF86C18EEA90E0B6C0E091F33DDE |
:1010D000F091F43DEE5BFF4F80819927EE240E2DB9 |
:1010E00023E030E0AC018C2D0E943477CC2DCD5F15 |
:1010F0002E2D49E154E16D2D8C2F0E94EE70E09170 |
:10110000F33DF091F43DEC5BFF4F808184FF04C020 |
:101110002E2D4BE154E103C020E04EE154E16D2D52 |
:101120008C2F55C180916637282F33272230310507 |
:1011300024F02230310569F14CC1E091F33DF0918A |
:10114000F43DEC5BFF4F8081E454F0401C2D1E5FAA |
:1011500092A987FF0CC0892F9927EE240E2D22E03B |
:1011600030E0AC018C2D0E9434772E2D0CC0892FDD |
:101170009927B2E0EB2E00E022E030E0AC018C2DAC |
:101180000E9434772E2D48E06D2D812F0E94866FAE |
:1011900020C1E091F33DF091F43DEC5BFF4F808185 |
:1011A000E454F0401C2D1E5F92A987FF0CC0892FCC |
:1011B0009927EE240E2DAC018C2D0E9434772E2D14 |
:1011C00041E254E10CC0892F9927A2E0EA2E00E009 |
:1011D000AC018C2D0E9434772E2D46E254E16D2D0A |
:1011E000812F0E94EE70F5C0E091F33DF091F43D47 |
:1011F000ED5BFF4F8081992782FF03C080EB90E079 |
:101200001BC083FF03C081EB90E016C080FF03C0CA |
:1012100082EB90E011C081FF03C083EB90E00CC033 |
:1012200084FF03C084EB90E007C085FF03C085EB1B |
:1012300090E002C08FEA90E00E9438BC20E0AC0150 |
:101240006D2D8C2D0E942F71C4C0E091F33DF09163 |
:10125000F43D05A916A92EE04AE08C2D0E94D37C0E |
:10126000B8C0E091F33DF091F43DC5A9C0958091DF |
:101270007437882309F469C0ED5BFF4F8081E35424 |
:10128000F04080FF62C0E65BFF4F8081EA54F0408F |
:1012900081FF5BC085A996A997FF24C010921A2EE2 |
:1012A0009091182E9F5F9093182E4091192E4423F1 |
:1012B00071F480916C01981750F06FEF7FEF8CE222 |
:1012C00091E00E942A3680916C018093182E8091C3 |
:1012D000192E8F5F8093192E90916D01891711F44B |
:1012E0001092192EE091F33DF091F43D85A996A955 |
:1012F000892B11F41092182E85A996A91816190693 |
:1013000024F51092192E9091182E9F5F9093182E0D |
:1013100040911A2E442371F480916C01981750F07B |
:101320006FEF7FEF84E690E00E942A3680916C0197 |
:101330008093182E80911A2E8F5F80931A2E909191 |
:101340006E01891711F410921A2EE091F33DF0917D |
:10135000F43D45A956A957FF2CC08091CC371C2DD0 |
:101360001C5F8C17C0F4F2E0EF2E00E023E030E0C9 |
:101370006D2D8C2D0E940E792E2D4BE254E16D2D9A |
:10138000812F0E942671402F60E670E088EE93E086 |
:101390000E942A361EC0EE240E2D23E030E06D2D73 |
:1013A0008C2D0E940E792E2D4FE254E16D2D812F50 |
:1013B0000EC0EE240E2D23E030E06D2D8C2D0E940A |
:1013C0000E792E2D43E354E16D2D8C2D8C5F0E9400 |
:1013D0002671DF91CF911F910F91FF90EF90DF90D9 |
:1013E000CF90BF90AF9008954F925F926F927F928F |
:1013F0008F929F92AF92BF92CF92DF92EF92FF9225 |
:101400000F931F93CF93DF93CDB7DEB72E970FB611 |
:10141000F894DEBF0FBECDBF782ECC241092282EBC |
:101420001092272E1092262E1092252E1092242EE6 |
:101430001092232E1FEF109371011092222E109202 |
:10144000212EC092132EC092F53DC092122EC09252 |
:10145000172EC092162E8C2C6C2C0E94AA6B809199 |
:101460009F2A8230B9F481EA90E00E9438BC2C2D8A |
:10147000AC0163E08C2D0E942F7184E690E0909384 |
:10148000512E8093502E8091502E9091512E892B69 |
:10149000D1F70AC50E942A43812F0E94AE998F3F3F |
:1014A00099F482EA90E00E9438BC2C2DAC016C2D9E |
:1014B0008C2D0E942F7120E23EE484EF91E0019791 |
:1014C000F1F721503040C9F7E0913C2EF0913D2ECC |
:1014D000E359FF4F8081ED56F0408093F23D8585C2 |
:1014E0008093F03DE259FF4F80818093F13D0E944F |
:1014F000FC428FE48093A02A1E8631E0E32EF12C7B |
:10150000FF92EF922EE0422E512C4C0E5D1E5F9208 |
:101510004F9211E01F931F9284E68F930E944041E7 |
:101520008AE08E871093EF3DFF92EF925F924F9289 |
:101530001F9382E08F938FE68F930E9440419924FE |
:1015400088EC90E09093512E8093502E8CE291E0A5 |
:101550009093532E8093522E8DB79EB70E960FB652 |
:10156000F8949EBF0FBE8DBF80919F2B882309F4F6 |
:1015700086C488EC90E09093512E8093502E0E9468 |
:10158000924280919C2B90919D2B9093F43D80935F |
:10159000F33D8091142E813011F40E94AA6B1092B9 |
:1015A000142E6091F33D7091F43DFB01258136814D |
:1015B000478150852D833E834F835887E180F28099 |
:1015C00003811481E982FA820B831C838091983D08 |
:1015D0009091993DA0919A3DB0919B3D2817390774 |
:1015E0004A075B0709F455C044E95DE38091943DE7 |
:1015F0009091953DA091963DB091973DE816F906E2 |
:101600000A071B0709F445C0FA01E25BFF4F9A0184 |
:101610002F5B3F4F8DE0D901982F0D9001929A9545 |
:10162000E1F78A010C5C1F4FD901F801982F019056 |
:101630000D929A95E1F797E2E92EF12CE40EF51E52 |
:10164000D801F701982F01900D929A95E1F79A0130 |
:10165000265E3F4FD701F901982F01900D929A9580 |
:10166000E1F78A01035F1F4FD901F801982F01901C |
:101670000D929A95E1F7D801FA01982F01900D92F9 |
:101680009A95E1F7FE013196DA0101900D928A9563 |
:10169000E1F701E0902E791409F074C26D5B7F4F81 |
:1016A000FB0180810091152E80FF04C0046000932F |
:1016B000152E14C011270470107080E10E9442386A |
:1016C0009927082B192B012B11F00E94BC7E80E476 |
:1016D0000E944238882311F00E94D67F809166379D |
:1016E0009927009719F0029721F008C041E063E0C4 |
:1016F00002C041E0642F80E00E94778380916637CA |
:1017000099278130910569F0823091051CF4892B6D |
:1017100021F010C0029749F00DC042E063E08BE079 |
:1017200007C042E061E0862F03C042E064E081E050 |
:101730000E9477838091663799278130910549F01F |
:10174000823091051CF4892B21F00CC0029729F0FE |
:1017500009C043E067E080E003C043E067E08DE05C |
:101760000E9477838091663799278130910549F0EF |
:10177000823091051CF4892B21F00CC0029729F0CE |
:1017800009C044E067E08DE003C044E067E080E02A |
:101790000E9477838091663799278130910541F0C7 |
:1017A000823091051CF4892B19F007C0029729F4A7 |
:1017B00049E067E088E00E94778380916637992747 |
:1017C000009719F0029721F008C045E0642F02C08D |
:1017D00045E063E080E00E94778380916637992737 |
:1017E0008130910549F0823091051CF4892B21F05C |
:1017F0000CC0029729F009C046E060E08DE003C00C |
:1018000046E063E08CE00E947783809166379927F9 |
:10181000009711F0019729F447E060E082E10E940F |
:101820007783809166379927009711F0019729F403 |
:1018300048E061E08CE00E947783809166379927C9 |
:101840008130910569F0823091051CF4892B21F0DB |
:1018500010C0029749F00DC04AE061E080E007C087 |
:101860004AE066E087E003C04AE065E08FE00E945E |
:101870007783809166379927009711F0019729F4B3 |
:101880004BE060E0862F0E9477838091663799272E |
:101890008130910561F0823091051CF4892B21F093 |
:1018A0000FC0029741F00CC04CE064E006C04CE071 |
:1018B00063E081E003C04CE060E080E10E94778358 |
:1018C0008091663799278130910569F082309105C2 |
:1018D0001CF4892B21F010C0029749F00DC04DE097 |
:1018E00064E08CE007C04DE063E088E003C04DE0B9 |
:1018F00065E08BE00E94778380916637992781307D |
:10190000910569F0823091051CF4892B21F010C0FB |
:10191000029749F00DC04EE065E08AE007C04EE056 |
:1019200062E087E003C04EE065E080E00E947783DC |
:10193000809166379927009719F0029729F009C01E |
:1019400047E166E08AE003C047E166E080E00E948C |
:10195000778380916637823029F44AE166E08BE034 |
:101960000E94778380916637882329F449E166E0F5 |
:1019700085E00E947783809166379927009719F058 |
:10198000029729F009C04FE066E080E003C04FE015 |
:1019900062E08CE00E9477838091663799270097F8 |
:1019A00019F0029729F009C040E166E083E003C026 |
:1019B00040E162E08EE00E9477838091663799274C |
:1019C0008130910561F0823091051CF4892B21F062 |
:1019D0000FC0029741F00CC042E164E006C042E152 |
:1019E00065E088E003C042E162E080E00E94778326 |
:1019F00080916637813029F443E166E08FE00E94F0 |
:101A000077838091663799278130910569F082301C |
:101A100091051CF4892B21F010C0029749F00DC0EC |
:101A200048E162E08BE007C048E162E08EE003C07D |
:101A300048E164E088E00E947783809166379927C7 |
:101A40008130910569F0823091051CF4892B21F0D9 |
:101A500010C0029749F00DC044E162E082E107C086 |
:101A600044E164E088E003C044E160E08AE00E9471 |
:101A70007783809166379927009719F0029729F0AC |
:101A800009C045E162E080E003C045E160E0862FE7 |
:101A90000E947783809166379927009711F001970C |
:101AA00029F446E160E089E00E9477830E942B7C64 |
:101AB000E091F33DF091F43DED5BFF4F8081E35405 |
:101AC000F04080FFACC123A934A98091272E9091CA |
:101AD000282E8217930724F43093282E2093272E44 |
:101AE00022AD33AD8091252E9091262E821793073B |
:101AF00020F43093262E2093252E24A535A5809101 |
:101B0000232E9091242E8217930720F43093242EB5 |
:101B10002093232E91AD80917101981710F490932A |
:101B2000710127A930AD8091212E9091222E82172C |
:101B3000930720F43093222E2093212EE25BFF4F57 |
:101B400020813181EE54F04080911F2E9091202E03 |
:101B50008217930720F43093202E20931F2EE05BF2 |
:101B6000FF4F20813181E055F04080911D2E9091F2 |
:101B70001E2E8217930708F052C130931E2E209319 |
:101B80001D2E4DC1F3E07F1609F055C1FB0186A55E |
:101B900097A526AD37AD821B930B88599E4F68E6FB |
:101BA00071E00E94E2C65C010E94AA6B092D20E24E |
:101BB00044E6622F8AE10E949C6D2FE3422F60E091 |
:101BC000822F0E949C6D85E090E00E9438BC20E04E |
:101BD000AC0167E08CE00E942F712BE041E4622FA2 |
:101BE0008DE30E949C6D22E248E26EE1842F0E9408 |
:101BF0009C6D22E246E56EE1842F0E949C6D25E3F8 |
:101C000041E4622F8DE30E949C6DF1E0CF1609F054 |
:101C10009EC08CE790E00E9438BC20E0AC01622FAF |
:101C200089E00E942F718EE790E00E9438BC20E08E |
:101C3000AC01672D872D0E942F718FE790E00E94E5 |
:101C400038BC20E0AC01672D81E10E942F718DE747 |
:101C500090E00E9438BC20E0AC0167E089E00E947F |
:101C60002F7180E890E00E9438BC20E0AC01622F28 |
:101C7000822F0E942F71E091F33DF091F43DE05CE2 |
:101C8000FF4F8081992787FD9095EE240E2D23E04C |
:101C900030E0AC016E2D82E00E94AE772E2D4EE139 |
:101CA0006E2D85E00E94866F81E890E00E9438BC2E |
:101CB0002E2DAC0167E08E2D0E942F71E091F33D37 |
:101CC000F091F43DEF5BFF4F8081992787FD909560 |
:101CD00023E030E0AC0167E082E00E94AE772E2D79 |
:101CE0004EE167E085E00E94866F82E890E00E9406 |
:101CF00038BC2E2DAC016E2D8DE00E942F71E0912D |
:101D0000F33DF091F43D23E030E046AD57AD6E2D4C |
:101D10008FE00E9434772E2D4EE16E2D82E10E94DD |
:101D2000866FE091F33DF091F43D86AD97AD0E9452 |
:101D3000727CE82FFF27EE0FFF1FE258FC4E8591C3 |
:101D400094912E2DAC016E2D83E10E94EE7080E106 |
:101D50000E944238882329F0C39481E08C1508F44E |
:101D6000CC24E091F33DF091F43DE05CFF4F8081A5 |
:101D7000E054F040992787FD909566277727681BE8 |
:101D8000790B77FF02C06F5F7F4F75956795B0E263 |
:101D9000DB2ED60EEF5BFF4F8081992787FD909554 |
:101DA000909581959F4F97FD019695958795FFE3B7 |
:101DB000FF2EF80E862D992700E028E030E049E05C |
:101DC00050E0BC01882D99270E944074E02E0091BC |
:101DD000292E10912A2E27E048E0662D882D0E949A |
:101DE0009D738D2D992701E028E030E049E050E017 |
:101DF000BC018F2D99270E944074E02E850127E0B9 |
:101E000048E06D2D8F2D0E949D73B0922A2EA092D6 |
:101E1000292E6D2C8F2CE091F33DF091F43DEE5B7B |
:101E2000FF4F8081E254F04080936F0181AD809339 |
:101E3000700110929F2B8091522E9091532E892BDE |
:101E4000F1F48AE08E8781E090E09F938F935F9218 |
:101E50004F9281E08F9382E08F938FE68F930E9461 |
:101E600040418CE291E09093532E8093522EADB777 |
:101E7000BEB717960FB6F894BEBF0FBEADBF809128 |
:101E8000502E9091512E892B39F4892D0E94AD81CD |
:101E9000992481E08093142E80E20E9442388823A6 |
:101EA00009F462CB1092EF3D2E960FB6F894DEBF88 |
:101EB0000FBECDBFDF91CF911F910F91FF90EF909B |
:101EC000DF90CF90BF90AF909F908F907F906F905A |
:101ED0005F904F9008950F9300E00E94AA6B83E9F2 |
:101EE00090E00E9438BC22E0AC0160E0862F0E94A6 |
:101EF0002F7181E090E00E9438BC20E0AC0167E0E7 |
:101F0000822F0E942F711092F83D8091302E8823ED |
:101F100039F020E048E750E461E0862F0E94EE703F |
:101F20001092F83D6091F83D462F55278091302E54 |
:101F30009A01280F311D2E303105ECF48091302E9E |
:101F4000480F511D8CE390E0489F9001499F300D50 |
:101F5000589F300D1124A9019091CA378FE0989FA6 |
:101F6000C0011124480F591F405D524C6F5F20E0A3 |
:101F700083E00E94EE708091F83D853069F4809195 |
:101F8000302E992705960D973CF420E04AE750E45F |
:101F900066E081E00E94EE708091F83D8F5F809353 |
:101FA000F83D863008F4BECF80912F2E882399F417 |
:101FB0002091302E222331F401E04091730165E03D |
:101FC000802F06C001E0202F4091730165E082E080 |
:101FD0000E940C32082F20912F2E213099F48091ED |
:101FE000302E992707960F972CF000E0409173014F |
:101FF00066E004C0022F4091730165E082E00E9418 |
:102000000C32082F0E3F51F48091302E8F5F809359 |
:10201000302E81E080932F2E85E00AC00D3F59F4C9 |
:102020008091302E81508093302E10922F2E82E09E |
:102030008093730152CF0F3F39F000937301809169 |
:10204000302E800F992702C08FEF90E00F910895F6 |
:102050008F929F92AF92BF92CF92DF92EF92FF92B8 |
:102060000F931F93CF93DF93CDB7DEB764970FB66F |
:10207000F894DEBF0FBECDBF882E99249092F83D14 |
:10208000282F332721503040BE016F5F7F4F492DED |
:10209000E42FFF2753E0EE0FFF1F5A95E1F7E053BF |
:1020A000FB4E849199278217930729F4FB01E90DD0 |
:1020B000F11D40839394842F8F5F482F883940F31C |
:1020C0008093F83DFF240E94AA6B82E990E00E9471 |
:1020D00038BC22E0AC0160E0862F0E942F7181E0C5 |
:1020E00090E00E9438BC20E0AC0167E0822F0E94A3 |
:1020F0002F711092F83D80912E2E882339F020E028 |
:102100004CE750E461E0862F0E94EE701092F83D9B |
:102110006091F83DE62FFF2780912E2E9F01280F1A |
:10212000311DA92CBB242A153B050CF016C2809149 |
:102130002E2E6E010894C11CD11CEC0DFD1DE80F64 |
:10214000F11D90818CE3989FA00111248091CA37E2 |
:102150000FE0809FC0011124480F591F4057564E71 |
:102160006F5F20E083E00E94EE707091F83D8091F7 |
:102170002E2ED601A70FB11DFD01E80FF11D8081A4 |
:10218000E82FFF2793E0EE0FFF1F9A95E1F7EF523C |
:10219000FB4E1491112309F06AC080912E2EA80FD6 |
:1021A000B11D8C91E82FFF2783E0EE0FFF1F8A956A |
:1021B000E1F7EC52FB4E8491E0913C2EF0913D2EE4 |
:1021C000E80FF11D808199277F5FE12E012F23E029 |
:1021D00030E0AC01672F82E10E94347739E083164A |
:1021E00009F0BBC16091F83D262F332780912E2E38 |
:1021F000A901480F511D4830510509F0AEC1809129 |
:102200002E2EF601E80FF11DE20FF31F8481E82F57 |
:10221000FF2703E0EE0FFF1F0A95E1F7EC52FB4E9C |
:102220008491E0913C2EF0913D2EE80FF11D9081BC |
:1022300080912E2EC80ED11CC20ED31EF6018481B1 |
:10224000E82FFF27B3E0EE0FFF1FBA95E1F7ED523D |
:10225000FB4E849198236F5F992321F0212F4EE745 |
:1022600050E403C0212F40E850E481E176C01130F2 |
:1022700009F03FC080912E2EA80FB11D8C91E82F40 |
:10228000FF27A3E0EE0FFF1FAA95E1F7EC52FB4EEC |
:102290008491E0913C2EF0913D2EE80FF11D1081CC |
:1022A000183F60F4812F99277F5FEE240E2D23E0E5 |
:1022B00030E0AC01672F82E10E943477183F08F4C8 |
:1022C0004CC18091F83D8F5F20E042E850E4682FD8 |
:1022D00082E10E94EE7080E091E0811B91096091A3 |
:1022E000F83D6F5FEE240E2D21E030E0AC0184E17B |
:1022F00032C11230A9F580912E2EFD01E80FF11D9B |
:102300008081E82FFF2763E0EE0FFF1F6A95E1F75A |
:10231000EC52FB4E8491E0913C2EF0913D2EE80F63 |
:10232000F11D208180912E2EA80FB11D8C91E82FD8 |
:10233000FF2753E0EE0FFF1F5A95E1F7ED52FB4EDA |
:1023400084912823672F6F5F222321F020E045E846 |
:1023500050E402C049E850E482E10E94EE70FDC002 |
:10236000133009F046C0672F80912E2EA80FB11DA3 |
:102370008C91E82FFF2743E0EE0FFF1F4A95E1F70E |
:10238000EC52FB4E8491E0913C2EF0913D2EE80FF3 |
:10239000F11D10811D3050F4812F99276F5FEE24BD |
:1023A0000E2D23E030E0AC0182E116C01931B0F40B |
:1023B0007F5F20E04DE850E4672F82E10E94EE70DD |
:1023C000812F99270C976091F83D6F5FEE240E2DB9 |
:1023D00022E030E0AC0183E10E943477193109F04A |
:1023E000BCC08091F83D8F5F20E04FE850E4682F3B |
:1023F000B3CF1430C1F480912E2EA80FB11D8C9153 |
:10240000E82FFF2733E0EE0FFF1F3A95E1F7EC527C |
:10241000FB4E8491E0913C2EF0913D2EE80FF11D92 |
:10242000808199271BC0153009F580912E2EA80FA9 |
:10243000B11D8C91E82FFF2723E0EE0FFF1F2A9597 |
:10244000E1F7EC52FB4E8491E0913C2EF0913D2E51 |
:10245000E80FF11D8081809FC00111247F5FEE2471 |
:102460000E2D23E030E0AC01672F74C0163009F068 |
:1024700074C0672F80912E2EFD01E80FF11D808121 |
:10248000E82FFF2793E0EE0FFF1F9A95E1F7EC523C |
:10249000FB4E849140913C2E50913D2EFA01E80F65 |
:1024A000F11D2081222321F46F5F43E950E454CFD2 |
:1024B000213029F46F5F20E047E950E44DCF22300E |
:1024C00029F46F5F20E04BE950E446CF233029F434 |
:1024D0006F5F20E04FE950E43FCF243029F46F5F75 |
:1024E00020E043EA50E438CF253029F46F5F20E044 |
:1024F00047EA50E431CF263029F46F5F20E04BEA01 |
:1025000050E42ACF273029F46F5F20E04FEA50E4EF |
:1025100023CF672F6F5F283021F420E043EB50E496 |
:102520001BCF80912E2EA80FB11D8C91E82FFF2775 |
:1025300083E0EE0FFF1F8A95E1F7EC52FB4E84918A |
:10254000480F511DFA0180819927EE240E2D23E0BA |
:1025500030E0AC0182E10E9434778091F83D853013 |
:1025600089F480912E2E992705960894A108B10828 |
:102570008A159B053CF420E047EB50E466E081E0DF |
:102580000E94EE708091F83D8F5F8093F83D863019 |
:1025900008F4BECD80912D2E8823E1F420912E2EBB |
:1025A000222379F4F6E0F91530F401E0409172014C |
:1025B00065E0802F0CC0022F40917201692D81E0EF |
:1025C00006C001E0202F4091720165E082E00E9488 |
:1025D0000C32F82E40912D2E4130C1F480912E2ED8 |
:1025E00099270796292D33272817390734F400E057 |
:1025F000242F4091720166E005C0042F242F4091E2 |
:10260000720165E082E00E940C32F82E2EEFF21685 |
:1026100051F480912E2E8F5F80932E2E81E0809337 |
:102620002D2E85E00BC03DEFF31659F480912E2E30 |
:10263000815080932E2E10922D2E82E08093720175 |
:1026400042CD4FEFF41671F0F092720180912E2E70 |
:10265000FE013196E80FF11DEF0DF11D31978081DC |
:10266000992702C08FEF90E064960FB6F894DEBF12 |
:102670000FBECDBFDF91CF911F910F91FF90EF90D3 |
:10268000DF90CF90BF90AF909F908F9008952F9242 |
:102690003F924F925F926F927F928F929F92AF92F2 |
:1026A000BF92CF92DF92EF92FF920F931F93CF933F |
:1026B000DF93CDB7DEB721970FB6F894DEBF0FBE1C |
:1026C000CDBFF82E0E94AA6BAF2CBB24850133E04E |
:1026D000000F111F3A95E1F7F801EF52FB4E64909D |
:1026E00081E990E00E9438BC22E0AC0160E0862FD6 |
:1026F0000E942F7181E090E00E9438BC20E0AC0184 |
:1027000067E0822F0E942F7186E0681699F08CE3B3 |
:10271000F89EA00111249091CA378FE0989FC001C4 |
:102720001124480F591F4057564E20E062E0822F77 |
:102730000E94EE70662009F0EFC0262D49EB50E4B0 |
:1027400064E0862F0E94EE70262D4BEC50E466E08C |
:102750008CE00E94EE7082E090E00E9438BC262D52 |
:10276000AC0167E0862D0E942F71F801EE52FB4EFE |
:102770009490F801ED52FB4ED490F801EC52FB4ED0 |
:102780008491E0913C2EF0913D2EE80FF11D708078 |
:1027900080912C2EF801E80FF11DEC52FB4E849035 |
:1027A000C72C892D9927E62C062D23E030E0AC01BB |
:1027B00064E085E00E9434778D2D992723E030E096 |
:1027C000AC0164E089E00E943477882D992723E0EA |
:1027D00030E0AC0164E081E10E9434774C2C552458 |
:1027E000EE240E2D23E030E0A20164E08E2D0E9445 |
:1027F0003477ED2CFF24C2019695982F8827979562 |
:102800008795B7010E94E2C601E026E0462F68E204 |
:1028100080E00E945F6E91E39D15B8F480E40E9411 |
:102820004238182F63E080E40E948638182B39F074 |
:102830000894411C511CE414F5040CF0C00E80E80F |
:102840000E944238182F63E016C080E40E9442388C |
:10285000182F62E080E40E948638182B39F0089423 |
:10286000411C511CE414F5040CF0C39480E80E9450 |
:102870004238182F62E080E80E948638182BE9F071 |
:102880004C2D55279A0121503040892D9927281722 |
:1028900039079CF05695542F442757954795CA0100 |
:1028A00080589040B7010E94E2C6CB0100E026E0CC |
:1028B00040E868E20E945F6ECA9480E20E94653838 |
:1028C000882341F000E026E040E868E2802F0E9483 |
:1028D0005F6EC82C80E10E944D388823B1F0C71488 |
:1028E00009F404C403E0AA0CBB1C0A95E1F7E4ED6B |
:1028F000F4E1AE0EBF1EF5018491E0913C2EF09103 |
:102900003D2EE80FF11DC082E7C380E20E944D38E2 |
:10291000882309F463CFEAC3F1E06F1609F042C1DE |
:1029200020E040ED50E464E0862F0E94EE7020E04D |
:1029300042EE50E466E08CE00E94EE7082E090E0AF |
:102940000E9438BC20E0AC0167E0822F0E942F710A |
:102950004501F801EE52FB4E4490F801ED52FB4E5A |
:102960005490F801EC52FB4E8491E0913C2EF09192 |
:102970003D2EE80FF11D608080912C2EF801E80FAC |
:10298000F11DEC52FB4E7490F62CCC24A72CBB24EA |
:1029900087EF871598F42C2D47EE50E464E081E131 |
:1029A0000E94EE7080E091E08A199B09EC2C0C2DBE |
:1029B00021E030E0AC0164E083E107C0EC2C0C2D99 |
:1029C00023E030E0A50164E081E10E94347797EFD5 |
:1029D0009F1518F411E0C12E01C0CC242F2C3324F4 |
:1029E000CC2009F062C0EC2C0C2D23E030E0A101DA |
:1029F00064E08C2D0E943477A52CBB24C1019695F0 |
:102A0000982F882797958795B5010E94E2C601E027 |
:102A100026E0462F68E28C2D0E945F6E80E40E94C3 |
:102A20004238182F63E080E40E948638182B99F012 |
:102A30000894211C311CA214B3040CF0F00EE7EF33 |
:102A4000EF1548F40C2D26E040E868E28C2D0E943A |
:102A50005F6EAFEFFA2E80E80E944238182F63E0D5 |
:102A600080E80E948638182B09F474C04F2D552732 |
:102A70009A0121503040842D9927281739070CF4EA |
:102A800069C05695542F442757954795CA018058D9 |
:102A90009040B5010E94E2C6CB0100E026E040E88C |
:102AA00068E20E945F6EFA9455C020E04CEE50E45C |
:102AB00064E0822F0E94EE70C12CE1E0DE2EC2188D |
:102AC000D308EE240E2D21E030E0A60164E082E080 |
:102AD0000E943477C60174E0880F991F7A95E1F758 |
:102AE00001E026E0482F68E28E2D0E945F6E80E4B0 |
:102AF0000E944238182F602F80E40E948638182BDD |
:102B000041F0089421083108F8EF2F1631040CF039 |
:102B1000FA9480E80E944238182F61E080E80E9411 |
:102B20008638182BB9F08FEF90E08F19910900E0EB |
:102B300026E040E868E28295807F0E945F6EF39411 |
:102B400049F40F2D26E040E868E28F2D0E945F6E69 |
:102B500067EFF62E80E20E946538882341F000E09E |
:102B600026E040E868E2802F0E945F6EF72C80E14B |
:102B70000E944D38882379F0F61409F4B7C253E067 |
:102B8000880C991C5A95E1F784ED94E1880E991E02 |
:102B9000F40184917DC180E20E944D38882309F4BC |
:102BA00016CFA4C2F2E06F1609F095C08FE690E050 |
:102BB0000E9438BC20E0AC0164E083E00E942F71E9 |
:102BC00080E790E00E9438BC20E0AC0165E083E043 |
:102BD0000E942F7181E090E00E9438BC20E0AC019F |
:102BE00067E0822F0E942F717501F801ED52FB4EB4 |
:102BF000D490F801EC52FB4E8491E0913C2EF09180 |
:102C00003D2EE80FF11DC08080912C2EF801E80FB9 |
:102C1000F11DEC52FB4E24910C2D213029F420E0C3 |
:102C20004FEE50E464E005C0222331F441EF50E45C |
:102C300065E088E00E94EE70102F1D2159F020E021 |
:102C400043EF50E464E081E00E94EE7020E045EF45 |
:102C500050E40AC0212F47EF50E464E081E00E9475 |
:102C6000EE70212F49EF50E465E081E00E94EE70A4 |
:102C700080E80E944238882319F0112309F40D25B9 |
:102C800080E40E944238882321F0802F8D2109F0B2 |
:102C90000D2580E10E9442388823B1F00C1509F41B |
:102CA00025C243E0EE0CFF1C4A95E1F784ED94E168 |
:102CB000E80EF91EF7018491E0913C2EF0913D2E33 |
:102CC000E80FF11D008308C280E20E944D3888237E |
:102CD00009F4B2CF0BC2F3E06F1609F0E8C020E0B0 |
:102CE0004BEF50E464E0862F0E94EE7020E04DE050 |
:102CF00051E466E08CE00E94EE7082E090E00E9479 |
:102D000038BC20E0AC0167E0822F0E942F71650182 |
:102D1000F801EE52FB4E6490F801ED52FB4E7490B8 |
:102D2000F801EC52FB4E8491E0913C2EF0913D2E47 |
:102D3000E80FF11D808080912C2EF801E80FF11D25 |
:102D4000EC52FB4E9490F82C892D9927EE240E2DF1 |
:102D500023E030E0AC0164E081E10E9434774F2C45 |
:102D60005524A72CBB24C5010D978415950544F067 |
:102D7000EE240E2D23E030E0A20164E08E2D15C07C |
:102D8000C50101978415950594F020E042E151E4D6 |
:102D900064E0822F0E94EE70C2010C97EE240E2D8B |
:102DA00022E030E0AC0164E081E00E943477F71467 |
:102DB00039F420E044E151E464E0822F0E94EE7097 |
:102DC000C2019695982F882797958795B5010E94FF |
:102DD000E2C601E026E0462F68E280E00E945F6ED6 |
:102DE00080E40E944238182F62E080E40E94863816 |
:102DF000182B39F00894411C511CA414B5040CF094 |
:102E0000F00E80E80E944238182F62E080E80E94AD |
:102E10008638182BE9F04F2D55279A012150304064 |
:102E2000862D9927281739079CF05695542F44274B |
:102E300057954795CA0180589040B5010E94E2C657 |
:102E4000CB0100E026E040E868E20E945F6EFA9461 |
:102E500080E20E946538882341F000E026E040E8E7 |
:102E600068E2802F0E945F6EF92C80E10E944D384D |
:102E70008823B1F0F81409F439C193E0CC0CDD1CBF |
:102E80009A95E1F784ED94E1C80ED91EF60184917C |
:102E9000E0913C2EF0913D2EE80FF11DF0821CC117 |
:102EA00080E20E944D38882309F459CF1FC1F4E015 |
:102EB0006F1609F09EC020E048E151E467E0822FE0 |
:102EC0000E94EE708F2D8D558983823050F48FE1F2 |
:102ED00090E00E9438BC20E0AC0166E085E00E94F2 |
:102EE0002F717501F801EC52FB4E8491E0913C2E5C |
:102EF000F0913D2EE80FF11D1081D12E00E01092CF |
:102F0000F83D812F99273091F83D032E02C0959509 |
:102F100087950A94E2F780FF04C020E04EE251E476 |
:102F200003C020E040E351E464E088E0831B0E949A |
:102F3000EE708091F83D8F5F8093F83D883008F304 |
:102F4000C02EC39420E042E351E465E08C2D0E9442 |
:102F5000EE7080E80E944238882359F020E044E374 |
:102F600051E465E08C2D0E94EE700C2D083009F4C0 |
:102F700000E09981923050F480E40E946538882303 |
:102F800029F0112311F010E001C01AEA80E40E9438 |
:102F90004D38882361F027E030E0201B310981E0C3 |
:102FA00090E002C0880F991F2A95E2F7182780E168 |
:102FB0000E944D388823B1F01D1509F497C083E0B5 |
:102FC000EE0CFF1C8A95E1F7E4EDF4E1EE0EFF1E36 |
:102FD000F7018491E0913C2EF0913D2EE80FF11D18 |
:102FE00010837AC080E20E944D38882309F487CF8D |
:102FF0007DC0F5E06F1609F07DC082E090E00E9490 |
:1030000038BC20E0AC0167E0822F0E942F7175016F |
:10301000F801EC52FB4E8491E0913C2EF0913D2E54 |
:10302000E80FF11DC08021E040E150E063E270E074 |
:1030300086E690E00E941076BC2CDC2CDB1451F06C |
:103040004FE0D49EC001112400E09C0163E286E6BB |
:103050000E941976DB2C8FE0B89E9001112401E0CC |
:10306000482F63E286E60E94197680E40E94423887 |
:10307000182F602F80E40E948638182B29F0B00E9C |
:1030800088E1B81609F4BB2480E80E944238182F62 |
:1030900061E080E80E948638182B29F0BB2011F4EB |
:1030A00008E1B02EBA9480E10E944D388823C1F027 |
:1030B000BC14E1F013E0EE0CFF1C1A95E1F7E4ED0F |
:1030C000F4E1EE0EFF1EF7018491E0913C2EF091A9 |
:1030D0003D2EE80FF11DB08281E080932B2E06C0BB |
:1030E00080E20E944D38882309F4A8CF80EF0E9427 |
:1030F0004238A2C0F6E06F1609F09EC06501FF24B9 |
:103100009F2C8F2CB1E07B2E81E090E00E9438BC98 |
:103110002F2DAC0167E08F2D0E942F71EE24992096 |
:1031200039F02E2D46E351E461E0862F0E94EE70C7 |
:10313000AA24BB24492C55248501040D151D0930F2 |
:10314000110594F4C801A4E0880F991FAA95E1F72E |
:10315000800F911F895C9B4E3E2D3F5F20E0AC01AC |
:10316000632F83E00E94EE7085E0E81651F408308A |
:1031700011053CF420E048E351E466E081E00E9460 |
:10318000EE70E3940894A11CB11C95E09E1590F696 |
:10319000882059F4992031F401E0292D472D692F19 |
:1031A000802F18C001E0202F12C0E1E08E16A9F494 |
:1031B00087E090E0480E591E9AE0491651042CF021 |
:1031C00000E0282D472D66E004C0082D282D472D4E |
:1031D00065E082E00E946132F82EEEEFFE1631F4D7 |
:1031E0009394F1E08F2EE5E07E2E98CFFDEFFF1651 |
:1031F00029F49A94882472E0772E90CF8CEFF816F9 |
:10320000D9F099E09F1508F489CFF90CFA9463E09E |
:10321000CC0CDD1C6A95E1F7E4EDF4E1CE0EDF1E87 |
:10322000F6018491E0913C2EF0913D2EE80FF11DC6 |
:10323000F08281E080932B2E21960FB6F894DEBFAA |
:103240000FBECDBFDF91CF911F910F91FF90EF90F7 |
:10325000DF90CF90BF90AF909F908F907F906F90B6 |
:103260005F904F903F902F9008951F93CF93DF93DF |
:10327000CDB7DEB721970FB6F894DEBF0FBECDBF36 |
:10328000898383E58093A02A12E310929F2B80917B |
:103290009F2B8823B9F58CE790E09F938F938091C3 |
:1032A0003C2E90913D2E9F938F9381E090E09F93D1 |
:1032B0008F93CE0101969F938F9382E08F9381E04D |
:1032C0008F9383E78F930E94404184E190E0909335 |
:1032D000512E8093502E8DB79EB70B960FB6F89453 |
:1032E0009EBF0FBE8DBF8091502E9091512E892B85 |
:1032F000D1F7115080919F2B882311F4112359F697 |
:10330000112341F00E949242E0919C2BF0919D2B61 |
:10331000808117C083E890E00E9438BC212FAC0167 |
:1033200062E0812F0E942F7184E690E09093512EED |
:103330008093502E8091502E9091512E892BD1F751 |
:103340008FEF89838981992721960FB6F894DEBF84 |
:103350000FBECDBFDF91CF911F9108951F93CF93E3 |
:10336000DF93CDB7DEB721970FB6F894DEBF0FBE5F |
:10337000CDBF898381E58093A02A12E310929F2B11 |
:1033800080919F2B882361F581E090E09F938F933C |
:10339000CE0101969F938F9381E08F938F9381E766 |
:1033A0008F930E94404184E190E09093512E80934E |
:1033B000502E8DB79EB707960FB6F8949EBF0FBEDE |
:1033C0008DBF8091502E9091512E892BD1F71150A5 |
:1033D00080919F2B882311F41123B1F6112369F0FA |
:1033E0000E949242E0919C2BF0919D2B81918983C8 |
:1033F000F0933D2EE0933C2E18C083E890E00E94AD |
:1034000038BC212FAC0162E0812F0E942F7184E62D |
:1034100090E09093512E8093502E8091502E909159 |
:10342000512E892BD1F78FEF898389819927219696 |
:103430000FB6F894DEBF0FBECDBFDF91CF911F91C5 |
:103440000895EF920F930E94AA6B84E990E00E9486 |
:1034500038BC22E0AC0160E0862F0E942F7181E031 |
:1034600090E00E9438BC20E0AC0167E0822F0E940F |
:103470002F7181E080932C2E80912C2E863010F5B8 |
:1034800080912C2E0E94AE998F3F61F19927EE24F6 |
:103490000E2D21E030E0AC0160912C2E83E00E94E3 |
:1034A000347780913C2E90913D2E81599F4F2E2D47 |
:1034B000AC0160912C2E85E00E94B57080912C2E7D |
:1034C0008F5FD8CF8CE890E00E9438BC20E0AC0140 |
:1034D00066E083E00E942F718FEF0E94AE99282F43 |
:1034E0008F3F19F48FEF90E00AC041E066E0842F2F |
:1034F0000E94C73180932C2E80912C2E99270F91FA |
:10350000EF900895EF920F931F93CF93C3E015E0D0 |
:103510000E94AA6B8CE890E00E9438BC20E0AC01CD |
:1035200061E0822F0E942F718DE890E00E9438BCEC |
:1035300020E0AC016C2F822F0E942F718EE890E06A |
:103540000E9438BC20E0AC0167E0822F0E942F71FE |
:103550008C2F9927EE240E2D21E030E0AC0163E0A2 |
:1035600085E00E943477812F992721E030E0AC017B |
:1035700063E08EE00E94347780E80E94423888231E |
:1035800021F0CF5FC63009F4C1E080E40E944238E8 |
:10359000882321F01F5F163009F411E080E10E94BA |
:1035A0004238882309F471C020E04AE351E465E021 |
:1035B000822F0E94EE708FE890E00E9438BC20E0DD |
:1035C000AC0165E0822F0E942F7184E090E00E94A0 |
:1035D00038BC20E0AC0167E08CE00E942F7180E1F4 |
:1035E0000E944238082F8823C1F18C2F0E94AE9987 |
:1035F0008C17B9F4812F0E943599811791F420E03E |
:103600004DE451E465E0822F0E94EE7080E990E085 |
:103610000E9438BC20E0AC0165E0822F0E942F712F |
:103620000FC08EE190E00E9438BC20E0AC0165E064 |
:10363000822F0E942F714EE065E086E00E944C715F |
:1036400084E690E09093512E8093502E8091502EDE |
:103650009091512E892BD1F721C080E20E944238EF |
:10366000882309F4BCCF80EF0E94423845E165E031 |
:10367000802F0E944C718EE890E00E9438BC202F71 |
:10368000AC0167E0802F0E942F7180E20E944238D7 |
:10369000882309F45DCF80EF0E944238CF911F91BB |
:1036A0000F91EF900895EF920F93CF930E942A43CA |
:1036B0000E94219A80932C2E80912C2E8F3F09F40A |
:1036C0002FC180912C2E863019F40E94829A28C135 |
:1036D0000E94AA6B86E890E00E9438BC22E0AC0110 |
:1036E00060E0862F0E942F7180912C2E805D22E059 |
:1036F000482F60E08FE00E94866F87E890E00E948C |
:1037000038BC20E0AC0162E083E00E942F7188E8C1 |
:1037100090E00E9438BC20E0AC0163E0862F0E945C |
:103720002F7181E090E00E9438BC20E0AC0167E09E |
:10373000822F0E942F7100E0202F42E063E0842F4F |
:103740000E940C32C82F8F3F09F4EAC0833009F081 |
:103750003DC080912C2E0E94AE9980912C2E0E940B |
:10376000359990912C2E891799F445E162E0802FCC |
:103770000E944C7145E16C2F802F0E944C7189E8AA |
:1037800090E00E9438BC202FAC0162E085E012C0BE |
:1037900045E162E080E00E944C7145E16C2F80E0E1 |
:1037A0000E944C718EE190E00E9438BC20E0AC0198 |
:1037B00064E0822F0E942F7120E23EE484EF91E0CA |
:1037C0000197F1F721503040C9F7AAC080912C2E03 |
:1037D0008F3F09F4A5C080912C2E0E94AE998F3F97 |
:1037E00009F49EC01092302E10922F2E81E080930B |
:1037F000730110922B2E0E946B8FC82F8F3F89F080 |
:1038000010922E2E10922D2E81E0809372018C2F1B |
:103810000E942890082F8F3F11F00E9447930F3F7E |
:10382000B1F7CF3F41F780912B2E813009F078C05E |
:103830000E94AA6B8AE890E00E9438BC22E0AC01AA |
:1038400060E0862F0E942F7180912C2E805D22E0F7 |
:10385000482F60E089E00E94866F80912C2E992786 |
:10386000EE240E2D21E030E0AC016E2D89E00E94A7 |
:1038700034778FE690E00E9438BC2E2DAC0162E0D8 |
:1038800083E00E942F7180E790E00E9438BC2E2DCB |
:10389000AC0163E0862F0E942F7181E090E00E94CE |
:1038A00038BC2E2DAC0167E08E2D0E942F712E2D7D |
:1038B00042E063E0842F0E940C32823089F58091CF |
:1038C0002C2E0E94359990912C2E891799F48BE813 |
:1038D00090E00E9438BC2E2DAC0164E083E00E9491 |
:1038E0002F7189E890E00E9438BC2E2DAC0165E074 |
:1038F00083E008C08EE190E00E9438BC20E0AC017B |
:1039000064E0822F0E942F7184E690E09093512E04 |
:103910008093502E8091502E9091512E892BD1F76B |
:10392000CF910F91EF9008956F927F928F929F9217 |
:10393000AF92BF92CF92DF92EF92FF920F931F93BD |
:10394000CF93DF93662436E9732E84ED91E0909354 |
:103950008900809388000E94AA6B62E083E691E46C |
:103960000E94BE70262D49E751E465E087E00E9481 |
:10397000EE70262D4BE751E465E080E10E94EE7089 |
:1039800083E090E00E9438BC262DAC0167E0862DD4 |
:103990000E942F71262D4EE751E467E082E10E94DC |
:1039A000EE7001E028E048E767E183E00E94717172 |
:1039B0002FE147E1642F842F0E949C6D2FE14BE2A1 |
:1039C00067E1842F0E949C6D28E043E067E18DE36E |
:1039D0000E945F6E2FE143E567E1842F0E949C6D9A |
:1039E0002FE147E667E1842F0E949C6DE62C062DAF |
:1039F00023E030E040E050E065E084E00E9434776E |
:103A000023E030E046E950E065E08CE00E94D378A6 |
:103A100080E40E944238882339F463E080E40E9405 |
:103A20008638882309F459C080EE871508F455C0FC |
:103A300085E9871570F186E990E087199109AA2731 |
:103A400097FDA095BA2FBC01CD010E94CEC4DC0128 |
:103A5000CB012DEC3CEC4CE45FE3BC01CD010E94BA |
:103A6000BBC5DC01CB019C01AD0160E070E08CE7DF |
:103A700092E40E94C7C3DC01CB01BC01CD010E94CE |
:103A8000A0C4DC01CB0100E026E041E068E10E9437 |
:103A90005F6E73948BE4781691F084E6781679F073 |
:103AA0008DE7781661F086E9781649F08FEA781686 |
:103AB00031F088EC781619F081EE781639F440E090 |
:103AC00060E870E088EC90E00E942A3680EE87156E |
:103AD00008F069C021EE722E66C080E80E9442386C |
:103AE000882339F463E080E80E948638882309F44B |
:103AF0005CC08BE4871508F058C086E9871590F5FF |
:103B0000872D992786599040AA2797FDA095BA2F0F |
:103B1000BC01CD010E94CEC4DC01CB012DEC3CECFC |
:103B20004CE45FE3BC01CD010E94BBC57B018C016D |
:103B30000E94A0C45B016C0120E030E04CE752E43D |
:103B4000C801B7010E94C8C3DC01CB01BC01CD0193 |
:103B50000E94A0C4DC01CB0100E026E04A2D68E110 |
:103B60000E945F6E7A948BE4781691F084E6781662 |
:103B700079F08DE7781661F086E9781649F08FEADA |
:103B8000781631F088EC781619F081EE781639F451 |
:103B900040E060E870E088EC90E00E942A368BE418 |
:103BA000871508F0782E63941DC080E10E9442388A |
:103BB0008823C1F000E026E046E768E184E00E9447 |
:103BC0005F6E01E028E043E067E18DE30E945F6EF5 |
:103BD00096E9792E40E060E870E088EC90E00E9481 |
:103BE0002A36600E662009F4D4C06624C72DDD276E |
:103BF00085E98715C8F5C659D040CE01AA2797FD9B |
:103C0000A095BA2FCA56DF4FBC01CD010E94CEC489 |
:103C1000DC01CB012DEC3CEC4CE45FE3BC01CD01BD |
:103C20000E94BBC5DC01CB01BC01CD010E94A0C438 |
:103C3000DC01CB0101E026E0482F68E18FE30E9420 |
:103C40005F6ECC0FDD1FCC52D140E62C062D23E059 |
:103C500030E0AE0165E084E00E94347701E028E0C6 |
:103C600042E067E18EE345C086E9882E912C8C1AEC |
:103C70009D0AC401AA2797FDA095BA2FBC01CD01CA |
:103C80000E94CEC4DC01CB012DEC3CEC4CE45FE3A4 |
:103C9000BC01CD010E94BBC57B018C010E94A0C468 |
:103CA0005B016C01A801970160E070E08CE792E491 |
:103CB0000E94C7C3DC01CB01BC01CD010E94A0C49E |
:103CC000DC01CB0101E026E04A2D68E10E945F6E35 |
:103CD000C401880D991DE62C062D23E030E0AC01CF |
:103CE00065E084E00E94347701E028E042E067E18B |
:103CF0008DE30E945F6EE72CFF2400E023E030E0BC |
:103D0000A70165E08CE00E94D37801E02FE143E059 |
:103D100067E1842F0E949C6D2FE147E1642F842F7F |
:103D20000E949C6D2FE14BE267E1842F0E949C6D05 |
:103D30002FE143E567E1842F0E949C6D2FE147E668 |
:103D400067E1842F0E949C6D2FE14BE767E1842F90 |
:103D50000E949C6DC701AA2797FDA095BA2FBC01B0 |
:103D6000CD010E94CEC4DC01CB0120E030E048E46C |
:103D700050E4BC01CD010E94BBC5DC01CB01BC01FC |
:103D8000CD010E94A0C4DC01CB01909389008093F7 |
:103D9000880080E20E944238882309F439CE80EFFF |
:103DA0000E944238DF91CF911F910F91FF90EF90C9 |
:103DB000DF90CF90BF90AF909F908F907F906F904B |
:103DC00008950E94AA6B22E042ED51E563E080E095 |
:103DD0000E94EE7022E048EE51E564E080E00E942F |
:103DE000EE7020E137E284EF91E00197F1F7215086 |
:103DF0003040C9F70895BF92CF92DF92EF92FF92C1 |
:103E00000F931F93CF93C82FB62EF42E122FC82EC8 |
:103E1000DD24D092133EC092123E0E94AA6B812FE5 |
:103E200099270E9438BC20E0AC0162E0822F0E94FA |
:103E30002F71EE240E2D23E030E0A60162E080E138 |
:103E40000E94277882E090E00E9438BC2E2DAC01C1 |
:103E500067E08E2D0E942F7180E40E9442388823F3 |
:103E600031F463E080E40E948638882389F0CF151E |
:103E700078F481E08093332EC80F8C2F9927EE249D |
:103E80000E2D23E030E0AC0162E080E10E94277853 |
:103E900080E80E944238882331F463E080E80E9481 |
:103EA0008638882389F0BC1678F481E08093332E1D |
:103EB000C1508C2F9927EE240E2D23E030E0AC0169 |
:103EC00062E080E10E94277880E10E944238182F4A |
:103ED000882319F08C2F99270EC080E20E94423867 |
:103EE000882309F4B9CF80EF0E9442381093332E13 |
:103EF0008091123E9927CF911F910F91FF90EF90E3 |
:103F0000DF90CF90BF900895DF92EF92FF920F93D2 |
:103F10001F93CF93C82FD62EF42E122F0E94AA6B78 |
:103F2000812F99270E9438BC20E0AC0162E0822FEB |
:103F30000E942F718C2F99279093133E8093123EED |
:103F4000EE240E2D23E030E0AC0162E080E10E941F |
:103F5000347782E090E00E9438BC2E2DAC0167E0FF |
:103F60008E2D0E942F7180E40E944238882331F404 |
:103F700062E080E40E948638882389F0CF1578F4C7 |
:103F800081E08093332EC80F8C2F9927EE240E2DBD |
:103F900023E030E0AC0162E080E10E94347780E809 |
:103FA0000E944238882331F462E080E80E9486381B |
:103FB000882389F0DC1678F481E08093332EC15099 |
:103FC0008C2F9927EE240E2D23E030E0AC0162E027 |
:103FD00080E10E94347780E10E944238182F8823C4 |
:103FE00019F08C2F99270EC080E20E944238882356 |
:103FF00009F4B9CF80EF0E9442381093332E80919C |
:10400000123E9927CF911F910F91FF90EF90DF9073 |
:104010000895AF92BF92CF92DF92EF920F931F93CA |
:10402000CF93DF93EC015B016A01122F0E94AA6B10 |
:10403000812F99270E9438BC20E0AC0162E0822FDA |
:104040000E942F71D093133EC093123EEE240E2D8A |
:1040500025E030E0AE0162E080E10E94347782E04A |
:1040600090E00E9438BC2E2DAC0167E08E2D0E949E |
:104070002F7180E40E944238882331F463E080E4A9 |
:104080000E948638882381F0CC15DD0568F481E034 |
:104090008093332E2196EE240E2D25E030E0AE01E4 |
:1040A00062E080E10E94347780E80E9442388823F1 |
:1040B00031F463E080E80E948638882381F0AC16F2 |
:1040C000BD0668F481E08093332E2197EE240E2DF7 |
:1040D00025E030E0AE0162E080E10E94347780E1CB |
:1040E0000E944238182F882311F0AE010FC080E2E1 |
:1040F0000E944238882309F4BCCF80EF0E944238E6 |
:104100001093332E4091123E5091133ECA01DF911D |
:10411000CF911F910F91EF90DF90CF90BF90AF9014 |
:104120000895FF920F931F93CF93F82E082F112716 |
:104130001093133E0093123E0E94AA6B84E390E01A |
:104140000E9438BC20E0AC0161E0822F0E942F71F8 |
:1041500085E390E00E9438BC20E0AC0162E0822F51 |
:104160000E942F71C091AD37CC2309F056C084E373 |
:1041700090E00E9438BC2C2FAC0161E08C2F0E9493 |
:104180002F7186E390E00E9438BC2C2FAC0162E0D6 |
:104190008C2F0E942F7187E390E00E9438BC2C2F57 |
:1041A000AC0161E08C2F0E942F7188E390E00E94A7 |
:1041B00038BC2C2FAC0162E08C2F0E942F7189E358 |
:1041C00090E00E9438BC2C2FAC0161E08C2F0E9443 |
:1041D0002F718AE390E00E9438BC2C2FAC0162E082 |
:1041E0008C2F0E942F718BE390E00E9438BC2C2F03 |
:1041F000AC0161E08C2F0E942F718CE190E00E9455 |
:1042000038BC2C2FAC0167E08CE00E942F7180E25B |
:104210000E9442388823D9F380C00115110521F08E |
:104220000130110549F012C020E04DEF51E562E088 |
:104230008EE00E94EE700AC082E590E00E9438BCD9 |
:1042400020E0AC0162E08EE00E942F7182E090E0FD |
:104250000E9438BC20E0AC0167E0822F0E942F71E1 |
:10426000C091AD37C13009F052C080E40E9442389D |
:10427000882391F0FF2081F4C093332EFC2E82E539 |
:1042800090E00E9438BC20E0AC0162E08EE00E9429 |
:104290002F7186E00E94B25780E80E94423888233E |
:1042A00081F081E0F81669F4F092332EFF242F2D6F |
:1042B00043E052E562E08EE00E94EE7085E00E94ED |
:1042C000B25780E10E944238882309F18CE390E0E4 |
:1042D0000E9438BC20E0AC0164E0822F0E942F7164 |
:1042E0008DE390E00E9438BC20E0AC0165E0822FB5 |
:1042F0000E942F7142E167E080E00E944C7180E1F2 |
:104300000E9442388823D9F38F2D99270EC080E26E |
:104310000E944238882309F4A3CF80EF0E944238DC |
:104320001092332E8091123E9927CF911F910F91B9 |
:10433000FF9008951F93CF93DF93182FC82FDD2789 |
:10434000D093133EC093123E0E94AA6B89E690E080 |
:104350000E9438BC20E0AC0162E0822F0E942F71E5 |
:10436000209719F0219739F010C083E590E005C03F |
:10437000812F992751C084E590E00E9438BC20E04D |
:10438000AC0162E08FE00E942F7182E090E00E9419 |
:1043900038BC20E0AC0167E0822F0E942F7180E4DE |
:1043A0000E944238882381F0112371F481E08093C8 |
:1043B000332E182F84E590E00E9438BC20E0AC0139 |
:1043C00062E08FE00E942F7180E80E9442388823CB |
:1043D00079F0113069F41093332E10E083E590E00A |
:1043E0000E9438BC212FAC0162E08FE00E942F7147 |
:1043F00080E10E944238C82F882309F0B9CF80E2BB |
:104400000E944238882359F280EF0E944238C093BC |
:10441000332E8091123E9927DF91CF911F910895FD |
:104420000F931F93CF93DF93082F122FC82FDD27F1 |
:10443000D093133EC093123E0E94AA6B812F9927FE |
:104440000E9438BC20E0AC0162E0822F0E942F71F4 |
:10445000209719F0219739F010C08CE290E005C048 |
:10446000802F992751C08BE290E00E9438BC20E059 |
:10447000AC0162E081E10E942F7182E090E00E9435 |
:1044800038BC20E0AC0167E0822F0E942F7180E4ED |
:104490000E944238882379F0002369F401E00093F8 |
:1044A000332E8BE290E00E9438BC20E0AC0162E049 |
:1044B00081E10E942F7180E80E944238882381F0B8 |
:1044C000013071F400E081E08093332E8CE290E0C3 |
:1044D0000E9438BC202FAC0162E081E10E942F7164 |
:1044E00080E10E944238C82F882309F0B9CF80E2CA |
:1044F0000E944238882359F280EF0E944238C093CC |
:10450000332E8091123E9927DF91CF911F910F9109 |
:1045100008950F931F93CF93DF93082F122FC82F67 |
:10452000DD27D093133EC093123E0E94AA6B812FC9 |
:1045300099270E9438BC20E0AC0162E0822F0E94E3 |
:104540002F71209719F0219739F010C080E790E083 |
:1045500005C0802F992751C08FE690E00E9438BC9B |
:1045600020E0AC0162E081E10E942F7182E090E0E6 |
:104570000E9438BC20E0AC0167E0822F0E942F71BE |
:1045800080E40E944238882379F0002369F401E036 |
:104590000093332E8FE690E00E9438BC20E0AC01FF |
:1045A00062E081E10E942F7180E80E9442388823F6 |
:1045B00081F0013071F400E081E08093332E80E7D8 |
:1045C00090E00E9438BC202FAC0162E081E10E94A3 |
:1045D0002F7180E10E944238C82F882309F0B9CF9B |
:1045E00080E20E944238882359F280EF0E944238CC |
:1045F000C093332E8091123E9927DF91CF911F9166 |
:104600000F910895EF92FF920F931F93CF93DF9333 |
:10461000082FF62EE42E122FC82FDD27D093133E3D |
:10462000C093123E0E94AA6B812F99270E9438BC2A |
:1046300020E0AC0162E0822F0E942F71C230D105D0 |
:10464000C9F0C330D1052CF4209761F0219771F0A7 |
:1046500027C0C430D105B1F0C430D1057CF0259716 |
:10466000C1F01EC020E049E052E516C020E040E164 |
:1046700052E512C020E047E152E50EC020E04EE1D5 |
:1046800052E50AC020E046E252E506C0802F992795 |
:104690009EC020E04DE252E562E08FE00E94EE70A5 |
:1046A00082E090E00E9438BC20E0AC0167E0822FFD |
:1046B0000E942F7180E40E9442388823B9F10E15C0 |
:1046C000A8F581E08093332E080F802F9927823040 |
:1046D0009105C9F0833091052CF4009761F00197A2 |
:1046E00071F024C084309105B1F0843091057CF0E4 |
:1046F0000597A9F01BC020E044E352E513C020E079 |
:104700004BE352E50FC020E042E452E50BC020E04D |
:1047100049E452E507C020E041E552E503C020E04E |
:1047200048E552E562E08FE00E94EE7080E80E946A |
:1047300042388823B9F1F016A8F581E08093332E32 |
:104740000150802F992782309105C9F0833091055F |
:104750002CF4009761F0019771F024C0843091052A |
:10476000B1F0843091057CF00597A9F01BC020E0E2 |
:104770004FE552E513C020E046E652E50FC020E0C9 |
:104780004DE652E50BC020E044E752E507C020E0CB |
:104790004CE752E503C020E043E852E562E08FE0D9 |
:1047A0000E94EE7080E10E944238C82F882309F0F1 |
:1047B0006DCF80E20E944238882309F47BCF80EFDE |
:1047C0000E944238C093332E8091123E9927DF9188 |
:1047D000CF911F910F91FF90EF900895EF92FF926C |
:1047E0000F931F93CF93DF93082FF62EE42E122FF3 |
:1047F000C82FDD27D093133EC093123E0E94AA6BB0 |
:10480000812F99270E9438BC20E0AC0162E0822F02 |
:104810000E942F71C130D10579F0C230D1051CF44E |
:10482000CD2B39F01CC0C230D10549F0239769F077 |
:1048300016C089E590E00BC08AE590E008C08BE5E2 |
:1048400090E005C0802F992787C08CE590E00E94FA |
:1048500038BC20E0AC0162E08AE00E942F7182E067 |
:1048600090E00E9438BC20E0AC0167E0822F0E94FB |
:104870002F7180E40E944238882351F10E1540F5D3 |
:1048800081E08093332E080F802F99278130910586 |
:1048900079F0823091051CF4892B39F019C08230EF |
:1048A000910549F0039751F013C089E590E008C0E5 |
:1048B0008AE590E005C08BE590E002C08CE590E0D1 |
:1048C0000E9438BC20E0AC0162E08AE00E942F71B7 |
:1048D00080E80E944238882351F1F01640F581E0CB |
:1048E0008093332E0150802F99278130910579F0E4 |
:1048F000823091051CF4892B39F019C08230910562 |
:1049000049F0039751F013C089E590E008C08AE5AB |
:1049100090E005C08BE590E002C08CE590E00E943D |
:1049200038BC20E0AC0162E08AE00E942F7180E197 |
:104930000E944238C82F882309F084CF80E20E9469 |
:104940004238882309F495CF80EF0E944238C09303 |
:10495000332E8091123E9927DF91CF911F910F91B5 |
:10496000FF90EF9008950F931F93CF93DF93082F3D |
:10497000122FC82FDD27D093133EC093123E0E9402 |
:10498000AA6B812F99270E9438BC20E0AC0162E01D |
:10499000822F0E942F71209719F0249721F00DC0CB |
:1049A00084E590E002C085E590E00E9438BC20E0FC |
:1049B000AC0162E08EE00E942F7182E090E00E94E4 |
:1049C00038BC20E0AC0167E0822F0E942F7180E4A8 |
:1049D0000E944238882369F0002359F404E085E5F9 |
:1049E00090E00E9438BC20E0AC0162E08EE00E94C2 |
:1049F0002F7180E80E944238882369F0043059F40E |
:104A000000E084E590E00E9438BC202FAC0162E019 |
:104A10008EE00E942F7180E10E944238C82F8823C7 |
:104A2000D9F081E08093332EF8942B98002329F459 |
:104A300081EA0E949C6B80EC04C080EA0E949C6B1F |
:104A400088EC0E949C6B2B9A78940093103E0E94F5 |
:104A5000D55F802F99270EC080E20E9442388823BC |
:104A600009F4B5CF80EF0E944238C093332E809175 |
:104A7000123E9927DF91CF911F910F9108950F93C7 |
:104A80001F93CF93DF93082F122FC82FDD27D093CA |
:104A9000133EC093123E0E94AA6B812F99270E9459 |
:104AA00038BC20E0AC0162E0822F0E942F71209779 |
:104AB00019F0249721F00DC084E590E002C085E54F |
:104AC00090E00E9438BC20E0AC0162E08EE00E94E1 |
:104AD0002F7182E090E00E9438BC20E0AC0167E0DA |
:104AE000822F0E942F7180E40E944238882369F04F |
:104AF000002359F404E085E590E00E9438BC20E0F2 |
:104B0000AC0162E08EE00E942F7180E80E94423882 |
:104B1000882369F0043059F400E084E590E00E94B5 |
:104B200038BC202FAC0162E08EE00E942F7180E142 |
:104B30000E944238C82F8823A9F081E08093332E49 |
:104B4000F8942B98002311F486EA01C087EA0E94AA |
:104B50009C6B2B9A7894009373370E94D55F802FBB |
:104B6000992710C080E20E944238882309F4BBCF05 |
:104B700080EF0E944238C093332E8091123E809382 |
:104B800073379927DF91CF911F910F910895BF92AD |
:104B9000CF92DF92EF92FF920F931F93CF93C82F84 |
:104BA000B62EF42E122FC82EDD24D092133EC092C2 |
:104BB000123E0E94AA6B812F99270E9438BC20E0E8 |
:104BC000AC0162E0822F0E942F71EE240E2D23E0B3 |
:104BD00030E0A60162E080E10E94347782E090E05C |
:104BE0000E9438BC2E2DAC0167E08E2D0E942F71E3 |
:104BF000CC2EDD24EE240E2D23E030E0A60162E071 |
:104C000080E10E943477CC0CDD1C01E026E04C2DC5 |
:104C100060E28E2D0E945F6E80E40E9442388823FD |
:104C200031F462E080E40E9486388823C1F0CF1519 |
:104C3000B0F4CF5FCF1548F0CF2D40E060E870E0D2 |
:104C400088EC90E00E942A360AC0F8942B9881E8FC |
:104C50000E949C6B8C2F0E949C6B2B9A789480E80E |
:104C60000E944238882331F462E080E80E9486384E |
:104C7000882301F1BC16F0F48C2F880F00E026E0A9 |
:104C800040E860E282500E945F6EC150CB1541F453 |
:104C9000402F60E870E088EC90E00E942A360AC05D |
:104CA000F8942B9881E80E949C6B8C2F0E949C6B3F |
:104CB0002B9A7894CC2EDD24EE240E2D23E030E0C8 |
:104CC000A60162E080E10E94347780E10E944238D0 |
:104CD000882349F081E08093332EC09307380E94E7 |
:104CE000D55FA60120C080E20E944238882309F4E3 |
:104CF0007FCF80EF0E944238F8942B9881E80E9481 |
:104D00009C6B8091123E0E949C6B2B9A789410921F |
:104D1000332E8091123E809307380E94D55F809198 |
:104D2000123E482F5527CA01CF911F910F91FF9036 |
:104D3000EF90DF90CF90BF900895BF92CF92DF9217 |
:104D4000EF92FF920F931F93CF93C82FB62EF42E9E |
:104D5000122FC82EDD24D092133EC092123EC601FF |
:104D6000AA2797FDA095BA2FBC01CD010E94CEC401 |
:104D7000DC01CB0123E333E343E250E4BC01CD018A |
:104D80000E94BBC5DC01CB01BC01CD010E94A0C4C7 |
:104D9000DC01CB018093B3000E94AA6B812F99277D |
:104DA0000E9438BC20E0AC0162E0822F0E942F718B |
:104DB000EE240E2D23E030E0A60162E080E10E94A7 |
:104DC00034772E2D4AE852E562E081E10E94EE70D0 |
:104DD00082E090E00E9438BC2E2DAC0167E08E2D61 |
:104DE0000E942F71CC2EDD24EE240E2D23E030E026 |
:104DF000A60162E080E10E943477C6019695982F63 |
:104E000088279795879564E670E00E94E2C601E0E6 |
:104E100026E0462F60E28E2D0E945F6E80E40E94A5 |
:104E20004238882331F463E080E40E948638882386 |
:104E300061F1CF1550F5CF5FCF1548F0CF2D40E091 |
:104E400060E870E088EC90E00E942A361EC08C2F4B |
:104E50009927AA2797FDA095BA2FBC01CD010E94E2 |
:104E6000CEC4DC01CB0123E333E343E250E4BC01D5 |
:104E7000CD010E94BBC5DC01CB01BC01CD010E946C |
:104E8000A0C4DC01CB018093B30080E80E944238CB |
:104E9000882339F463E080E80E948638882309F487 |
:104EA0003FC0BC16E8F58C2F99279695982F882738 |
:104EB000979587958058904064E670E00E94E2C61E |
:104EC000CB0100E026E040E860E20E945F6EC15046 |
:104ED000CB1541F4402F60E870E088EC90E00E9430 |
:104EE0002A361EC08C2F9927AA2797FDA095BA2F86 |
:104EF000BC01CD010E94CEC4DC01CB0123E333E32E |
:104F000043E250E4BC01CD010E94BBC5DC01CB01F2 |
:104F1000BC01CD010E94A0C4DC01CB018093B30091 |
:104F200080E10E944238182F882339F181E0809374 |
:104F3000332E0C2F1127C801AA2797FDA095BA2F51 |
:104F4000BC01CD010E94CEC4DC01CB0123E333E3DD |
:104F500043E250E4BC01CD010E94BBC5DC01CB01A2 |
:104F6000BC01CD010E94A0C4DC01CB018093B30041 |
:104F7000C09380370E94D55F3AC080E20E944238D9 |
:104F8000882309F42FCF80EF0E9442381093332EEC |
:104F90000091123E1091133EC801AA2797FDA095DB |
:104FA000BA2FBC01CD010E94CEC417FF06C020E07D |
:104FB00030E040E857E40E94C8C323E333E343E210 |
:104FC00050E40E94BBC5DC01CB01BC01CD010E94B5 |
:104FD000A0C4DC01CB018093B3008091123E80938A |
:104FE00080370E94D55F8091123E082F1127C8019B |
:104FF000CF911F910F91FF90EF90DF90CF90BF90D6 |
:1050000008950E94AA6B80EF0E94423887E590E0E5 |
:105010000E9438BC20E0AC0162E0822F0E942F7118 |
:1050200088E590E00E9438BC20E0AC0163E0822F6C |
:105030000E942F7186E590E00E9438BC20E0AC0110 |
:1050400067E08CE00E942F7180E10E944238882343 |
:1050500019F00E944262089580E20E94423888233B |
:1050600099F380EF0E94423808959F92AF92BF92C9 |
:10507000CF92DF92EF92FF920F931F93CF93DF9324 |
:10508000CC249C2C71E0A72E0E94AA6BC092D12F39 |
:10509000C092332EC092322EBC2C0E94AA6B8DE59A |
:1050A00090E00E9438BC22E0AC0160E0862F0E94B4 |
:1050B0002F7181E090E00E9438BC20E0AC0167E0F5 |
:1050C000822F0E942F71DD24CC2039F02D2D4CE849 |
:1050D00052E561E0862F0E94EE70EE24FF240C2D35 |
:1050E0001127E701C00FD11FC830D105D4F488E4DF |
:1050F00090E0C89FA001C99F500DD89F500D11246A |
:105100009091CA3782E1989FC0011124480F591F1E |
:105110004E5C534B8D2D8F5F20E0682F83E00E9403 |
:10512000EE7085E0D81649F427973CF420E04EE86D |
:1051300052E566E081E00E94EE70D3940894E11C91 |
:10514000F11C85E08D1558F6992059F4CC2031F4E6 |
:1051500001E02C2D4A2D682F802F15C001E0202F53 |
:105160000FC081E0981691F4095F1F4F09301105B7 |
:105170002CF000E0292D4A2D66E004C0092D292DD0 |
:105180004A2D65E082E00E940C32B82E8EEFB816F0 |
:1051900031F4C39461E0962E55E0A52E94CF8DEFA7 |
:1051A000B81629F4CA94992442E0A42E8CCF8FEF2C |
:1051B000B81641F48091332E813009F09CC00E94D2 |
:1051C000D55F99C0AB2C0B2D1127EC2CFF24E801E7 |
:1051D000CE0DDF1DC130D10549F42EE542E060E07F |
:1051E000809181370E9410A280938137C230D1050F |
:1051F00049F425E642E060E08091A8370E9410A2C1 |
:105200008093A837C330D10549F42FE543E060E02F |
:105210008091CA370E94EEA38093CA37C430D1056B |
:1052200049F420E64EEF60E0809109380E94849FA7 |
:1052300080930938259749F421E644E660E080919F |
:1052400080370E949DA6809380379091332E9130B5 |
:1052500031F48091322E882311F49093322EC801BC |
:105260008E0D9F1D069749F422E64FE360E0809182 |
:1052700007380E94C7A5809307389091332E91304C |
:1052800031F48091322E882311F49093322EC8018C |
:105290008E0D9F1D079799F423E644E060E080910E |
:1052A00073370E943FA5809373379091332E9130CE |
:1052B00031F48091322E882311F49093322E0E0D0A |
:1052C0001F1D0830110509F0E8CE24E644E060E037 |
:1052D0008091103E0E94B3A48093103E9091332E93 |
:1052E000913009F0DACE8091322E882309F0D5CEA4 |
:1052F0009093322ED2CEDF91CF911F910F91FF90DC |
:10530000EF90DF90CF90BF90AF909F9008959F92C5 |
:10531000AF92BF92CF92DF92EF92FF920F931F93C3 |
:10532000CF93DF93CC249C2CB1E0AB2EC092D12F35 |
:10533000C092332EBC2C0E94AA6B0E94AA6B81ECF7 |
:1053400090E00E9438BC22E0AC0160E0862F0E9411 |
:105350002F7181E090E00E9438BC20E0AC0167E052 |
:10536000822F0E942F71DD24CC2039F02D2D40E9B1 |
:1053700052E561E0862F0E94EE70EE24FF240C2D92 |
:105380001127E701C00FD11FC330D105D4F488E441 |
:1053900090E0C89FA001C99F500DD89F500D1124C7 |
:1053A0009091CA3782E1989FC0011124480F591F7C |
:1053B0004E5A5B4B8D2D8F5F20E0682F83E00E945B |
:1053C000EE7085E0D81649F422973CF420E042E9DB |
:1053D00052E566E081E00E94EE70D3940894E11CEF |
:1053E000F11C95E09D1558F6992059F4CC2031F424 |
:1053F0000C2D2C2D4A2D63E081E015C001E0202FFB |
:105400000FC081E0981691F4095F1F4F0430110519 |
:105410002CF000E0292D4A2D66E004C0092D292D2D |
:105420004A2D65E082E00E940C32B82E9EEFB9163C |
:1054300031F4C394A1E09A2EF5E0AF2E94CF8DEF16 |
:10544000B81629F4CA949924E2E0AE2E8CCF9FEFCF |
:10545000B91641F48091332E813009F03FC00E948B |
:10546000D55F3CC0AB2C8B2D8C0D912D911DEC018B |
:10547000019779F422EC40E65AEE6AEF70E08091F1 |
:105480000A3890910B380E9409A090930B388093B2 |
:105490000A38C230D10579F423EC44E650E060E0EC |
:1054A00070E080917137909172370E9409A09093BB |
:1054B000723780937137239709F03FCF24EC44E192 |
:1054C00050E061E070E08091C5379091C6370E944E |
:1054D00009A09093C6378093C5372FCFDF91CF9126 |
:1054E0001F910F91FF90EF90DF90CF90BF90AF9002 |
:1054F0009F9008959F92AF92BF92CF92DF92EF92CA |
:10550000FF920F931F93CF93DF93CC249C2C81E0C9 |
:10551000A82EBC2CC092D12FC092332E0E94AA6B11 |
:105520000E94AA6B22E044E952E560E0862F0E94C7 |
:10553000EE7081E090E00E9438BC20E0AC0167E0B2 |
:10554000822F0E942F71DD24CC2039F02D2D4AEAC4 |
:1055500052E561E0862F0E94EE70EE24FF240C2DB0 |
:105560001127E701C00FD11FC930D105D4F488E459 |
:1055700090E0C89FA001C99F500DD89F500D1124E5 |
:105580009091CA3782E1989FC0011124480F591F9A |
:105590004655564B8D2D8F5F20E0682F83E00E948B |
:1055A000EE7085E0D81649F428973CF420E04CEAE8 |
:1055B00052E566E081E00E94EE70D3940894E11C0D |
:1055C000F11C95E09D1558F6992059F4CC2031F442 |
:1055D00001E02C2D4A2D692F802F15C001E0202FCE |
:1055E0000FC081E0981691F4095F1F4F0A30110532 |
:1055F0002CF000E0292D4A2D66E004C0092D292D4C |
:105600004A2D65E082E00E940C32B82E9EEFB9165A |
:1056100031F4C39401E0902E15E0A12E94CF8DEFCC |
:10562000B81629F4CA949924C2E0AC2E8CCF9FEF0F |
:10563000B91681F48091332E813009F072C08091C7 |
:10564000AD37813021F48091D2370E94FF4C0E9407 |
:10565000D55F67C0AB2C8B2D8C0D912D911DEC016E |
:10566000019749F42CE641E060E08091AD370E945B |
:1056700089A28093AD37C230D10549F427E645E0D1 |
:1056800060E08091D9370E94849F8093D937C330DE |
:10569000D10549F428E64FE760E08091AA370E94DF |
:1056A000849F8093AA37C430D10531F48091D137DB |
:1056B0000E949AA18093D137C530D10549F42AE6DA |
:1056C0004FE760E08091A5370E94849F8093A537C3 |
:1056D000C630D10549F42BE64FE760E08091AB3747 |
:1056E0000E94849F8093AB37C730D10569F420ECCA |
:1056F00045E060E08091D2370E9402A38093D237C8 |
:105700008091D2378093EA2BC830D10521F4809163 |
:10571000D2370E94FF4C299709F002CF0E94EB5923 |
:10572000FFCEDF91CF911F910F91FF90EF90DF900F |
:10573000CF90BF90AF909F9008959F92AF92BF92ED |
:10574000CF92DF92EF92FF920F931F93CF93DF934D |
:10575000EC01E62EB42E890131E0932EF92CAA2417 |
:105760000E94AA6B22E0A8016A2D8A2D0E94EE7089 |
:105770001A2DAE14D0F42BEFC22E2DE3D22E8F2D86 |
:10578000F39420E0488163E00E94866F8F2DF394AC |
:1057900020E04EEA52E563E00E94EE708991F60146 |
:1057A00081936F011F5F1E1550F301E02AE0422F25 |
:1057B00066E183E00E94717120E040EB52E566E013 |
:1057C000822F0E94EE7020E04FEB52E567E0822FBF |
:1057D0000E94EE70F1E0BF1609F068C09AE0E4E0C4 |
:1057E000FEE380813197803209F05DC09150C9F7A6 |
:1057F00080E40E944238882331F462E080E40E9411 |
:105800008638882341F1EA2DFF27E550F24C80814C |
:105810008A3708F58F5F8083803210F480E28083BE |
:10582000808181528F3010F480E3808380818A539D |
:10583000873010F481E4808380818B55863010F4AA |
:1058400081E6808320E0408163E0892D0E94866F9D |
:1058500081E08093332E80E80E944238882339F417 |
:1058600062E080E80E948638882309F46CC0EA2D43 |
:10587000FF27E550F24C8081813208F464C08150EA |
:1058800080838B55863010F48AE5808380818A532B |
:10589000873010F489E38083808181528F3008F053 |
:1058A00049C080E246C09093113EA2CF82E0B81674 |
:1058B00009F049C080E40E944238882331F461E055 |
:1058C00080E40E9486388823E1F0EA2DFF27E55026 |
:1058D000F24C80818933A8F48F5F8083803210F48A |
:1058E00080E28083808181528F3010F480E3808356 |
:1058F00020E0408163E0892D0E94866F81E08093E3 |
:10590000332E80E80E944238882331F461E080E839 |
:105910000E9486388823B9F0EA2DFF27E550F24C23 |
:105920008081813380F0815080838A53873010F4E6 |
:1059300089E3808320E0408163E0892D0E94866FA7 |
:1059400081E08093332E80E20E9465388823F9F04D |
:10595000E1E0BE1631F4EA2DFF27E550F24C80E27B |
:1059600008C0F2E0BF1631F4EA2DFF27E550F24CF3 |
:1059700080E38083EA2DFF27E550F24C20E0408150 |
:1059800063E0892D0E94866F81E08093332E80E250 |
:105990000E944D38882309F443C081E0B81611F401 |
:1059A0008AE004C0E2E0BE1619F484E08093143E5D |
:1059B000892D8695992702962091143E3327281722 |
:1059C0003907B4F486E0989EC001112400E02AE073 |
:1059D000422F66E183500E94717191E0992E092D4A |
:1059E0002AE0422F66E183E00E947171AA2418C068 |
:1059F00016E0919EC001112400E02AE0422F66E1EA |
:105A000083500E947171F2E09F0E919EC00111249B |
:105A100001E02AE0422F66E183500E947171A00EDE |
:105A200080E10E944238882309F4D4CE81E090E0DE |
:105A3000DF91CF911F910F91FF90EF90DF90CF906A |
:105A4000BF90AF909F9008956F927F928F929F9298 |
:105A5000AF92BF92CF92DF92EF92FF920F931F937C |
:105A6000CF93DF9377246090EF2B972CA1E08A2EC1 |
:105A7000B72C7092D12F7092332E0E94AA6B0E9485 |
:105A8000AA6B22E044ED52E560E0862F0E94EE70A2 |
:105A900081E090E00E9438BC20E0AC0167E0822FFA |
:105AA0000E942F71AA24772039F02A2D4AEE52E560 |
:105AB00061E0862F0E94EE70CC24DD24E72CFF24C9 |
:105AC000C6018E0D9F1DC62DDD278C179D0704F581 |
:105AD0008C01F5E0000F111FFA95E1F7080F191F6F |
:105AE000080F191F4EE050E06AED77E3C801865EAB |
:105AF0009E4C0E9472C2A8014A5F5E4C6A2D6F5F85 |
:105B0000892B11F422E001C020E083E00E942F7174 |
:105B100085E0A81679F485E090E0E80EF91E21975B |
:105B2000EC16FD063CF420E04CEE52E566E081E028 |
:105B30000E94EE70A3940894C11CD11C95E09A15A4 |
:105B400008F0BCCF9920A1F4772079F486E086157F |
:105B500030F401E0292D482D692F802F1EC0092D1A |
:105B6000292D482D662D81E018C001E0202F12C09C |
:105B700091E09916A9F4872D99270796262D3327AA |
:105B8000281739072CF400E0292D482D66E004C0C1 |
:105B9000092D292D482D65E082E00E940C32B82E97 |
:105BA0008EEFB81631F47394E1E09E2E75E0872EE7 |
:105BB00079CF9DEFB91629F47A94992462E0862E64 |
:105BC00071CF8FEFB81639F48091332E8130A9F55B |
:105BD0000E94D55F32C08B2CBB2009F450CF2B2DF7 |
:105BE0003327AAEDB7E3F90155E0EE0FFF1F5A95F1 |
:105BF000E1F7E20FF31FE20FF31FE850FF4C9DE0C7 |
:105C000081918D93915097FFFBCFAEEAB7E3F901F5 |
:105C100045E0EE0FFF1F4A95E1F7E20FF31FE20F99 |
:105C2000F31FEC51FF4C93E181918D93915097FFBD |
:105C3000FBCF81E08093332E22CFDF91CF911F9154 |
:105C40000F91FF90EF90DF90CF90BF90AF909F901B |
:105C50008F907F906F9008954F925F926F927F9296 |
:105C60008F929F92AF92BF92CF92DF92EF92FF926C |
:105C70000F931F93CF93DF93CDB7DEB765970FB622 |
:105C8000F894DEBF0FBECDBF6624562C81E0482EAF |
:105C90006092D12F6092332E762C0E94AA6B0E94C4 |
:105CA000AA6B81E790E00E9438BC22E0AC0160E082 |
:105CB000862F0E942F7181E090E00E9438BC20E086 |
:105CC000AC0167E0822F0E942F71BB24662039F05F |
:105CD0002B2D4EEE52E561E0862F0E94EE70CC2413 |
:105CE000DD24E62CFF2486010E0D1F1D0530110555 |
:105CF000D4F488E490E0089FA001099F500D189FFC |
:105D0000500D11249091CA3782E1989FC00111244F |
:105D1000480F591F4E5B574B8B2D8F5F20E0682F2C |
:105D200083E00E94EE7085E0B81651F4043011054E |
:105D30003CF420E040EF52E566E081E00E94EE7026 |
:105D4000B3940894C11CD11C95E09B1550F65520C6 |
:105D500059F4662031F4052D252D442D692F81E05D |
:105D600018C001E0202F12C0E1E05E16A9F487E020 |
:105D700090E0E80EF91E96E0E916F1042CF000E040 |
:105D8000252D442D66E004C0052D252D442D65E00C |
:105D900082E00E940C32782EEEEF7E1609F4B4C039 |
:105DA000FDEF7F1609F4ADC08FEF781609F4CAC075 |
:105DB0001091332E113071F48091A9370E94FF5257 |
:105DC000892B19F01093C83702C01092C8370E946F |
:105DD000D55FB8C0472CA72CBB24862C99248501FD |
:105DE000080D191D0130110549F424E741E060E078 |
:105DF0008091A9370E9489A28093A93702301105AA |
:105E0000E9F5DE011196E5E7F7E369E081918D930D |
:105E1000615067FFFBCF6AE01B8622EF32E541E06D |
:105E2000CE0101960E949DAB8091332E813031F5D9 |
:105E300010E08091113E181768F4E12FFF27DF0171 |
:105E4000A550B24C8C91EB58F84C80830E94D55FE2 |
:105E50001F5FEFCF8091113E8A3080F4982F082F7A |
:105E600011270B58184C80E2F80181938F019D8B0C |
:105E70000E94D55F9D899F5F9A30A8F3C501880D68 |
:105E8000991D039759F5DE011196E4EDF7E363E000 |
:105E900081918D93615067FFFBCF64E01D8228E004 |
:105EA00033E542E0CE0101960E949DAB8091332EF6 |
:105EB0008130A1F404EDC02E07E3D02E1BEFE12EBC |
:105EC0001DE3F12E13E0F70181917F01F60181932B |
:105ED0006F010E94D55F115017FFF5CFC501880DE6 |
:105EE000991D049729F50E94FF52019789F420E03B |
:105EF0004EE153E563E0822F0E94EE700E945F5FE7 |
:105F000017C06A94552466CF6394B1E05B2E62CFCC |
:105F100020E049E253E563E0822F0E94EE70109288 |
:105F2000C83740E060E470E088EE93E00E942A36D3 |
:105F3000A80CB91CF5E0AF16B10409F0B0CE0E9470 |
:105F4000F258ADCE65960FB6F894DEBF0FBECDBF4A |
:105F5000DF91CF911F910F91FF90EF90DF90CF9045 |
:105F6000BF90AF909F908F907F906F905F904F9079 |
:105F700008957F928F929F92AF92BF92CF92DF92BD |
:105F8000EF92FF920F931F93CF93DF93BB247B2C51 |
:105F900071E0872EAB2CB092D12FB092332E9B2C78 |
:105FA0000E94AA6B0E94AA6B85E990E00E9438BC0F |
:105FB00022E0AC0160E0862F0E942F7181E090E02A |
:105FC0000E9438BC20E0AC0167E0822F0E942F7154 |
:105FD000DD24BB2039F02D2D47E353E561E0862F0A |
:105FE0000E94EE70EE24FF240B2D1127E701C00F55 |
:105FF000D11FC630D105D4F488E490E0C89FA00139 |
:10600000C99F500DD89F500D11249091CA3782E13D |
:10601000989FC0011124480F591F4E5F594B8D2D79 |
:106020008F5F20E0682F83E00E94EE7085E0D81635 |
:1060300049F425973CF420E049E353E566E081E02C |
:106040000E94EE70D3940894E11CF11CE5E0ED157C |
:1060500058F6772059F4BB2031F40B2D2B2D482D09 |
:1060600066E081E015C001E0202F0FC0F1E07F164F |
:1060700091F4095F1F4F073011052CF000E0272D28 |
:10608000482D66E004C0072D272D482D65E082E0ED |
:106090000E940C32982E8EEF981631F4B39461E082 |
:1060A000762E55E0852E94CFEDEF9E1629F4BA9406 |
:1060B000772442E0842E8CCFFFEF9F1679F48091F5 |
:1060C000332E813009F00CC2AA2009F409C20E94C3 |
:1060D000F1490E94FF520E94BC4802C2892CE92C5F |
:1060E000FF24CB2CDD24C7018C0D9D1D0197C9F425 |
:1060F0000091EF2B002399F40E94AA6B202F4BE311 |
:1061000053E5602F802F0E94EE700E94F14931E02C |
:10611000A32E0E94A2560E94D0560E94BC480E9404 |
:1061200024ADE701CC0DDD1DC230D105A9F40E94DC |
:10613000AA6B20E04BE453E5622F822F0E94EE70A1 |
:106140000E94F14921E0A22E0E94A2560E94D05640 |
:106150000E94BC480E9424AD249779F427E941E0CD |
:1061600060E08091CB370E9489A28093CB378091E9 |
:10617000332E813011F40E94D55FC7018C0D9D1D17 |
:106180000597F1F50E94AA6B86E990E00E9438BC61 |
:1061900022E0AC0160E0862F0E942F718DE190E03B |
:1061A0000E9438BC20E0AC0167E082E10E942F71C0 |
:1061B00020E04BE553E561E0822F0E94EE7020E085 |
:1061C00043E653E564E0822F0E94EE7020E04EEA41 |
:1061D00057E362E0822F0E942F71C0E00AED17E3BF |
:1061E00020E0F80141918F0165E08C2F0E94866FBD |
:1061F000CF5FCC30A8F380E10E9442388823D9F3E6 |
:10620000EC0CFD1CF6E0EF16F10409F0CBCE0E9479 |
:10621000AA6B8DE190E00E9438BC20E0AC0167E001 |
:1062200082E10E942F7122E04EEA57E360E0862F60 |
:106230000E942F710E94F14991E0A92E8091AC3704 |
:106240008A1511F40E94A2568AED97E30E94085520 |
:10625000892B49F020E048E653E56A2D822F0E9401 |
:10626000EE70A092D02A8091D02A882309F41DC113 |
:1062700022E042E753E563E080E00E94EE70809107 |
:10628000163E9091173EA091183EB091193EBC0168 |
:10629000CD0120E836E948E950E00E9417C7DA014D |
:1062A000C901EE240E2D22E030E0AC0164E081E073 |
:1062B0000E9434772E2D47E853E564E083E00E9486 |
:1062C000EE708091163E9091173EA091183EB091CD |
:1062D000193EBC01CD0128EE33E040E050E00E94C1 |
:1062E00017C7CA01B90120E137E240E050E00E943F |
:1062F00017C7DC01CB0101E024E030E0AC0164E031 |
:10630000862F0E9434778091163E9091173EA0917F |
:10631000183EB091193EBC01CD012AE030E040E0CA |
:1063200050E00E9417C7CA01B90124E630E040E0FE |
:1063300050E00E9417C7DC01CB0122E030E0AC0145 |
:1063400064E088E00E9434778091313E9091323E43 |
:10635000A091333EB091343EBC01CD0120E836E936 |
:1063600048E950E00E9417C7DA01C9010E2D22E06A |
:1063700030E0AC0164E08CE00E9434772E2D49E8D7 |
:1063800053E564E08EE00E94EE708091313E909182 |
:10639000323EA091333EB091343EBC01CD0128EE97 |
:1063A00033E040E050E00E9417C7CA01B90120E184 |
:1063B00037E240E050E00E9417C7DC01CB0101E06A |
:1063C00024E030E0AC0164E08FE00E9434778091FB |
:1063D000313E9091323EA091333EB091343EBC01AB |
:1063E000CD012AE030E040E050E00E9417C7CA012A |
:1063F000B90124E630E040E050E00E9417C7DC011C |
:10640000CB0122E030E0AC0164E083E10E9434770C |
:106410002E2D4BE853E562E08E2D0E94EE702E2D5E |
:1064200044E751E062E08AE00E942F712E2D46E998 |
:1064300053E566E08E2D0E94EE7080911A3E9927FA |
:1064400087FD909522E030E0AC0166E08DE00E948F |
:10645000347780E10E944238882309F410CF45E167 |
:10646000602F8E2D0E944C7145E162E08E2D0E94BE |
:106470004C7145E163E08E2D0E944C7145E164E072 |
:106480008E2D0E944C7145E165E08E2D0E944C716D |
:1064900045E166E08E2D0E944C712E2D43EA53E5B6 |
:1064A00063E08E2D0E94EE700BC0282F4FEA53E55B |
:1064B0006A2D0E94EE7080E10E9442388823D9F351 |
:1064C0001092D02A0E944355892B39F420E043ECE6 |
:1064D00053E563E0822F0E94EE700E94BC4862CDBB |
:1064E000DF91CF911F910F91FF90EF90DF90CF90B0 |
:1064F000BF90AF909F908F907F9008951F93CF9300 |
:10650000DF93182FC82FDD27D093133EC093123E80 |
:106510000E94AA6B86E790E00E9438BC20E0AC01A4 |
:1065200062E0822F0E942F71209719F0219769F065 |
:1065300013C020E047ED53E50BC081E08093332E7C |
:1065400010936E37812F992744C020E04CED53E51E |
:1065500062E08FE00E94EE7082E090E00E9438BC22 |
:1065600020E0AC0167E0822F0E942F7180E40E943E |
:106570004238882351F0112341F411E020E041EE2C |
:1065800053E562E08FE00E94EE7080E80E9442389E |
:10659000882351F0113041F410E0212F46EE53E5ED |
:1065A00062E08FE00E94EE7080E10E944238C82FC6 |
:1065B000882319F680E20E9442388823B9F280EFDE |
:1065C0000E944238C093332E8091123E80936E37E2 |
:1065D0009927DF91CF911F910895AF92BF92CF92EB |
:1065E000DF92EF920F93CF93DF93EC015B016A018F |
:1065F0000E94AA6B87E790E00E9438BC20E0AC01C3 |
:1066000062E0822F0E942F7189E790E00E9438BCDF |
:1066100020E0AC0165E0822F0E942F718AE790E0B4 |
:106620000E9438BC20E0AC0166E0822F0E942F71EE |
:10663000D093FA3DC093F93DEE240E2D24E030E0D6 |
:10664000AE0162E080E10E94347782E090E00E9437 |
:1066500038BC2E2DAC0167E08E2D0E942F7180E496 |
:106660000E944238882331F462E080E40E94863838 |
:106670008823B1F0C6010A97C817D90788F481E0CA |
:106680008093332E2A96D0937037C0936F37EE24C1 |
:106690000E2D24E030E0AE0162E080E10E9434770C |
:1066A00080E80E944238882331F462E080E80E944A |
:1066B00086388823A1F0AC16BD0688F481E080936B |
:1066C000332E2A97D0937037C0936F37EE240E2D58 |
:1066D00024E030E0AE0162E080E10E94347780E1A6 |
:1066E0000E944238E82E882311F0AE0128C00E9493 |
:1066F000A97B0E2D20E030E04091042E5091052E14 |
:1067000063E088E00E94D3782E2D4BEE53E563E0E2 |
:10671000862F0E94EE7080E20E944238882309F49E |
:106720009ECF80EF0E944238E092332E8091F93D57 |
:106730009091FA3D9093703780936F37AC01CA0106 |
:10674000DF91CF910F91EF90DF90CF90BF90AF90FE |
:1067500008959F92AF92BF92CF92DF92EF92FF92F5 |
:106760000F931F93CF93DF93CC249C2CB1E0AB2EDF |
:10677000C092D12FC092332EBC2C0E94AA6B0E94D3 |
:10678000AA6B85E790E00E9438BC22E0AC0160E093 |
:10679000862F0E942F7181E090E00E9438BC20E09B |
:1067A000AC0167E0822F0E942F71DD24CC2039F0EC |
:1067B0002D2D40EF53E561E0862F0E94EE70EE2410 |
:1067C000FF240C2D1127E701C00FD11FC230D105C6 |
:1067D000D4F488E490E0C89FA001C99F500DD89FD1 |
:1067E000500D11249091CA3782E1989FC001112465 |
:1067F000480F591F4E54584B8D2D8F5F20E0682F46 |
:1068000083E00E94EE7085E0D81649F421973CF4AD |
:1068100020E042EF53E566E081E00E94EE70D39401 |
:106820000894E11CF11C85E08D1558F6992059F467 |
:10683000CC2031F40C2D2C2D4A2D62E081E015C0C6 |
:1068400001E0202F0FC081E0981691F4095F1F4FDF |
:10685000033011052CF000E0292D4A2D66E004C01C |
:10686000092D292D4A2D65E082E00E940C32B82EB8 |
:106870008EEFB81631F4C394A1E09A2EF5E0AF2E56 |
:1068800094CF8DEFB81629F4CA949924E2E0AE2E85 |
:106890008CCF8FEFB81639F48091332E8130B1F55B |
:1068A0000E94D55F33C0AB2CCB2DDD270C2D1127DB |
:1068B000CE01800F911F019771F441E060E080915B |
:1068C0006E370E947EB280936E378091332E813076 |
:1068D00011F40E94D55FC00FD11F229709F04FCF4E |
:1068E0004FE057E260E070E080916F379091703731 |
:1068F0000E94EDB29093703780936F378091332E62 |
:10690000813009F03CCF0E94D55F39CFDF91CF9124 |
:106910001F910F91FF90EF90DF90CF90BF90AF90BD |
:106920009F9008950F931F93CF93DF93082F122FFB |
:10693000C82FDD27D093133EC093123E0E94AA6B4E |
:10694000812F99270E9438BC20E0AC0162E0822FA1 |
:106950000E942F71C130D10521F0C330D10529F13A |
:1069600034C021E043E050E063E170E089E590E06D |
:106970000E94BB7120E043E050E063E170E085E6F7 |
:1069800090E00E94647221E043E050E063E170E037 |
:1069900085E690E010C081E08093332E0093A73706 |
:1069A0000E94D55F802F992777C021E0AE0163E177 |
:1069B00070E089E590E00E94BB7121E0AE0163E1E7 |
:1069C00070E085E690E00E94647282E090E00E94B0 |
:1069D00038BC20E0AC0167E0822F0E942F7180E478 |
:1069E0000E9442388823A9F0013099F403E021E0A5 |
:1069F00043E050E063E170E089E590E00E94BB7104 |
:106A000021E043E050E063E170E085E690E00E9421 |
:106A1000647280E80E944238882339F1033029F5F6 |
:106A200001E0202F43E050E063E170E089E590E071 |
:106A30000E94BB7120E043E050E063E170E085E636 |
:106A400090E00E946472202F43E050E063E170E028 |
:106A500085E690E00E94BB71202F41E050E063E1A9 |
:106A600070E085E690E00E94647280E10E94423806 |
:106A7000C82F882309F08FCF80E20E9442388823F4 |
:106A800009F4ADCF80EF0E944238C093332E80913D |
:106A9000123E8093A7379927DF91CF911F910F91D5 |
:106AA00008959F92AF92BF92CF92DF92EF92FF92A2 |
:106AB0000F931F93CF93DF93CC249C2C81E0A82EBF |
:106AC000C092D12FC092332EBC2C0E94AA6B0E9480 |
:106AD000AA6B86EB90E00E9438BC22E0AC0160E03B |
:106AE000862F0E942F7181E090E00E9438BC20E048 |
:106AF000AC0167E0822F0E942F71DD24CC2039F099 |
:106B00002D2D44EF53E561E0862F0E94EE70EE24B8 |
:106B1000FF240C2D1127E701C00FD11FCA30D1056A |
:106B2000D4F488E490E0C89FA001C99F500DD89F7D |
:106B3000500D11249091CA3782E1989FC001112411 |
:106B4000480F591F4E575E4B8D2D8F5F20E0682FE9 |
:106B500083E00E94EE7085E0D81649F429973CF452 |
:106B600020E046EF53E566E081E00E94EE70D394AA |
:106B70000894E11CF11C95E09D1558F6992059F4F4 |
:106B8000CC2031F401E02C2D4A2D692F802F15C027 |
:106B900001E0202F0FC081E0981691F4095F1F4F8C |
:106BA0000B3011052CF000E0292D4A2D66E004C0C1 |
:106BB000092D292D4A2D65E082E00E940C32B82E65 |
:106BC0009EEFB91631F4C39401E0902E15E0A12E8A |
:106BD00094CF8DEFB81629F4CA949924C2E0AC2E54 |
:106BE0008CCF9FEFB91641F48091332E813009F09C |
:106BF00087C00E94D55F84C0AB2C8B2D8C0D912D4E |
:106C0000911DEC01019749F42EEB42E060E0809188 |
:106C100066370E94849F80936637C230D10549F45D |
:106C200028EB43E061E08091A7370E9492B4809303 |
:106C3000A737C330D10549F427EB41E060E08091EC |
:106C4000A6370E9489A28093A637C430D10549F4A3 |
:106C500029EB41E060E0809108380E9489A280938E |
:106C60000838C530D10549F42AEB47EF60E0809140 |
:106C7000CC370E94FB9E8093CC37C630D10549F4B7 |
:106C80002BEB41E060E0809174370E9489A28093F1 |
:106C90007437C730D10549F42CEB41E060E08091B6 |
:106CA000C3370E9489A28093C337C830D10549F405 |
:106CB0002BE747EF60E280914E2E0E94FB9E80936F |
:106CC0004E2EC930D10579F42DEB40E355E760E055 |
:106CD00070E080916737909168370E9409A0909387 |
:106CE0006837809367372A9709F0F1CE2FEB41E0A0 |
:106CF00060E08091C4370E9489A28093C437E7CEB8 |
:106D0000DF91CF911F910F91FF90EF90DF90CF9087 |
:106D1000BF90AF909F9008958F929F92AF92BF9235 |
:106D2000CF92DF92EF92FF920F931F93CF93DF9357 |
:106D3000BB248B2C41E0942E0E94AA6BB092D12FE1 |
:106D4000B092332EAB2C0E94AA6B22E048EF53E5A1 |
:106D500060E0862F0E94EE7081E090E00E9438BCD7 |
:106D600020E0AC0167E0822F0E942F71DD24BB2060 |
:106D700039F02D2D4EE054E561E0862F0E94EE7033 |
:106D8000EE24FF240B2D1127E701C00FD11FCC30BB |
:106D9000D105D4F488E490E0C89FA001C99F500DAC |
:106DA000D89F500D11249091CA3782E1989FC0015D |
:106DB0001124480F591F4E58514B8D2D8F5F20E0E5 |
:106DC000682F83E00E94EE7085E0D81649F42B9777 |
:106DD0003CF420E040E154E566E081E00E94EE7082 |
:106DE000D3940894E11CF11C85E08D1558F6882099 |
:106DF00059F4BB2031F401E02B2D492D682F802F51 |
:106E000015C001E0202F0FC081E0881691F4095FC2 |
:106E10001F4F0D3011052CF000E0282D492D66E0A4 |
:106E200004C0082D282D492D65E082E00E940C3217 |
:106E3000A82E8EEFA81631F4B39431E0832E25E00E |
:106E4000922E94CF8DEFA81629F4BA94882492E05C |
:106E5000992E8CCF8FEFA81641F48091332E81307C |
:106E600009F094C00E94D55F91C09A2CCA2CDD24F1 |
:106E7000EB2CFF24C6018E0D9F1D019761F48091BC |
:106E8000D42F0E9491A08093D42F8091332E8130F3 |
:106E900011F48093312EE601CE0DDF1DC230D105F5 |
:106EA00011F40E9435A82397D9F46091AD37662379 |
:106EB000A9F42CE641E08091AD370E9489A280932D |
:106EC000AD378091332E813059F48091AD378130C8 |
:106ED00039F48091D2370E94FF4C02C00E947AAAF6 |
:106EE000C6018E0D9F1D049719F51091A937112326 |
:106EF000E9F421E741E0612F8091A9370E9489A23E |
:106F00008093A9378091332E813091F4C091A937B5 |
:106F1000C13071F40E94FF52892B19F0C093C83719 |
:106F200002C01093C8370E94D55F02C00E942CAEE9 |
:106F3000E601CE0DDF1DC630D10511F40E9451B51A |
:106F4000C730D10511F40E94B9AFC830D10511F492 |
:106F50000E9487A9C930D10511F40E94A9B3CA3093 |
:106F6000D10511F40E94A934CB30D10549F426E6AD |
:106F700041E060E08091D3370E94849F8093D337B3 |
:106F80002C9709F0E0CE0E9401A8DDCEDF91CF91D1 |
:106F90001F910F91FF90EF90DF90CF90BF90AF9037 |
:106FA0009F908F900895CF92DF92EF92FF920F9370 |
:106FB0001F93CF93DF93CDB7DEB72E970FB6F8941C |
:106FC000DEBF0FBECDBF0E94AA6B80919F2A823088 |
:106FD000B9F481EA90E00E9438BC20E0AC0163E0A3 |
:106FE000822F0E942F7184E690E09093512E80931F |
:106FF000502E8091502E9091512E892BD1F7F9C1AE |
:107000000E942A438FEF0E94AE998F3F99F482EA43 |
:1070100090E00E9438BC20E0AC01622F822F0E94D9 |
:107020002F7120E23EE484EF91E00197F1F72150C7 |
:107030003040C9F7E0913C2EF0913D2EE359FF4FCF |
:107040008081ED56F0408093F23D85858093F03D40 |
:10705000E259FF4F80818093F13D0E94FC428FE412 |
:107060008093A02A1E8601E010E01F930F939EE0FC |
:10707000C92ED12CCC0EDD1EDF92CF9281E0F82EEE |
:10708000FF921F9284E68F930E9440418AE08E8790 |
:107090001F930F93DF92CF92FF9282E08F938FE640 |
:1070A0008F930E94404110E088EC90E09093512E25 |
:1070B0008093502E8CE291E09093532E8093522E29 |
:1070C0008DB79EB70E960FB6F8949EBF0FBE8DBFBC |
:1070D00080919F2B882309F477C188EC90E09093EE |
:1070E000512E8093502E0E94924280919C2B909121 |
:1070F0009D2B9093F43D8093F33D8091342E81300D |
:1071000011F40E94AA6B1092342EE091F33DF0919D |
:10711000F43D85819681A781B0858D839E83AF8361 |
:10712000B88781819281A381B48189839A83AB835B |
:10713000BC8311E0412F63E080E00E94778343E04D |
:1071400067E080E00E94778344E067E08DE00E9482 |
:10715000778345E062E08CE00E94778349E067E056 |
:10716000862F0E94778320E042E154E5612F822F31 |
:107170000E94EE704AE0612F88E00E94778320E051 |
:107180004BE154E5622F822F0E94EE704BE060E0ED |
:1071900086E00E94778344E160E080E10E9477838B |
:1071A00020E042E254E563E08BE00E94EE704EE0A6 |
:1071B00063E081E10E94778342E162E080E00E9427 |
:1071C000778320E048E254E564E0822F0E94EE706D |
:1071D0008D819E81AF81B885BC01CD0120E836E963 |
:1071E00048E950E00E9417C7DA01C901EE240E2DCC |
:1071F00022E030E0AC0164E083E00E9434772E2D81 |
:107200004CE254E564E085E00E94EE708D819E8141 |
:10721000AF81B885BC01CD0128EE33E040E050E0FD |
:107220000E9417C7CA01B90120E137E240E050E0EF |
:107230000E9417C7DC01CB01012F24E030E0AC0134 |
:1072400064E086E00E9434778D819E81AF81B885AD |
:10725000BC01CD012AE030E040E050E00E9417C7B9 |
:10726000CA01B90124E630E040E050E00E9417C7AF |
:10727000DC01CB0122E030E0AC0164E08AE00E9456 |
:10728000347789819A81AB81BC81BC01CD0120E832 |
:1072900036E948E950E00E9417C7DA01C9010E2D0E |
:1072A00022E030E0AC0164E08CE00E9434772E2DC7 |
:1072B0004EE254E564E08EE00E94EE7089819A818E |
:1072C000AB81BC81BC01CD0128EE33E040E050E051 |
:1072D0000E9417C7CA01B90120E137E240E050E03F |
:1072E0000E9417C7DC01CB01012F24E030E0AC0184 |
:1072F00064E08FE00E94347789819A81AB81BC8100 |
:10730000BC01CD012AE030E040E050E00E9417C708 |
:10731000CA01B90124E630E040E050E00E9417C7FE |
:10732000DC01CB0122E030E0AC0164E083E10E94AB |
:10733000347722E040E354E565E08E2D0E94EE7044 |
:10734000E091F33DF091F43D91AD80914E2E981770 |
:1073500038F44E2D60E270E088EB9BE00E942A3604 |
:10736000E091F33DF091F43D91AD80914E2E89175F |
:1073700030F442E060E070E0CB010E942A361092C7 |
:107380009F2B8091522E9091532E892BE9F48AE005 |
:107390008E8781E090E09F938F93DF92CF921F932F |
:1073A00082E08F938FE68F930E9440418CE291E0C0 |
:1073B0009093532E8093522E8DB79EB707960FB69B |
:1073C000F8949EBF0FBE8DBF8091502E9091512E8C |
:1073D000892B39F4812F0E94AD8110E081E08093E8 |
:1073E000342E80E20E944238882309F471CE109234 |
:1073F000EF3D2E960FB6F894DEBF0FBECDBFDF91E6 |
:10740000CF911F910F91FF90EF90DF90CF90089553 |
:10741000AF92BF92CF92DF92EF92FF920F931F93A2 |
:10742000CF93DF93CDB7DEB722970FB6F894DEBFC8 |
:107430000FBECDBF5A016B014AE050E0BE016F5F45 |
:107440007F4F0E9407C17B018C01E981FA81808115 |
:107450008E3281F59F012F5F3F4F818129C0A1149A |
:10746000B104C104D10431F1D801C70143E0880F50 |
:10747000991FAA1FBB1F4A95D1F78E0D9F1DA01FF4 |
:10748000B11FE80EF91E0A1F1B1FF90181919F0110 |
:107490009927C097AA2797FDA095BA2FE80EF91E45 |
:1074A0000A1F1B1F0894A108B108C108D1088081D8 |
:1074B0008823A9F6A114B104C104D10489F0F5010F |
:1074C000EE0FFF1FEE0FFF1FEA5BFB4A2591359180 |
:1074D00045915491C801B7010E94A3C67B018C015C |
:1074E000C801B70122960FB6F894DEBF0FBECDBF1C |
:1074F000DF91CF911F910F91FF90EF90DF90CF9090 |
:10750000BF90AF9008958F929F92AF92BF92CF920B |
:10751000DF92EF92FF920F931F93FC016B0190811A |
:107520008AE0989FC00111242181820F911D805112 |
:1075300092404C01AA2497FCA094BA2C46E050E05B |
:1075400060E070E0CF0102960E9408BADC01CB0136 |
:10755000BC01CD0126E030E040E050E00E9417C7BA |
:1075600079018A01C501B40120E836E948E950E013 |
:107570000E94A3C64B015C018E0C9F1CA01EB11E75 |
:10758000F6018081833541F4B094A0949094809466 |
:10759000811C911CA11CB11CC501B4011F910F914C |
:1075A000FF90EF90DF90CF90BF90AF909F908F9023 |
:1075B00008958F929F92AF92BF92CF92DF92EF92F7 |
:1075C000FF920F931F93FC016B0190818AE0989FBB |
:1075D000900111248181280F311DC90153E0880FCA |
:1075E000991F5A95E1F7820F931F820F931F2281F3 |
:1075F000820F911D805D94414C01AA2497FCA094B8 |
:10760000BA2C46E050E060E070E0CF0103960E94A3 |
:1076100008BADC01CB01BC01CD0126E030E040E03E |
:1076200050E00E9417C779018A01C501B40120E822 |
:1076300036E948E950E00E94A3C64B015C018E0C7C |
:107640009F1CA01EB11EF6018081873541F4B094C5 |
:10765000A09490948094811C911CA11CB11CC50124 |
:10766000B4011F910F91FF90EF90DF90CF90BF90EA |
:10767000AF909F908F90089520E0322F4AE3DC0175 |
:10768000E22FFF27EC58FE4F8D9180832F5F313022 |
:1076900011F0333031F4E22FFF27EC58FE4F4083D6 |
:1076A0002F5F3F5F363060F3E22FFF27EC58FE4F2D |
:1076B00010820895982F80538A3010F499270895E6 |
:1076C000892F8156863010F4975505C0892F815433 |
:1076D000863020F49753892F9927089580E090E011 |
:1076E0000895EF92FF920F931F93CF93DF93EE24B1 |
:1076F000FE2CE091F32BE13009F046C0809105317A |
:10770000882309F441C09E2F80910531E817A8F421 |
:107710008091D72F8A3289F0E92FFF27EA52F04D66 |
:107720008081F8269F5F80910531981730F4E92F0A |
:10773000FF27EA52F04D8081EDCF80910531282F4F |
:107740003327E92FFF27CF01039628173907E4F0E5 |
:10775000EF01CA52D04D89810E945ABB082F1127D0 |
:1077600074E0000F111F7A95E1F78A810E945ABBDD |
:10777000802B8F1549F4188267ED7FE28DE690E348 |
:107780000E946BC261E0E62E1092F32B8E2D99279A |
:10779000DF91CF911F910F91FF90EF9008950F937C |
:1077A0001F93CF93DF930E9471BB882309F45BC0C2 |
:1077B0006DE771E08DE690E30E9456C26FE771E0DD |
:1077C0000E9462C2EC01009709F04DC065E871E0CB |
:1077D0000E9456C20E943CBB6DE771E0CE010E9440 |
:1077E00056C26DE771E0CE010E9456C28C016DE772 |
:1077F00071E0CE010E9456C2B8010E9483BADC013A |
:10780000CB018093163E9093173EA093183EB09301 |
:10781000193E6DE771E0CE010E9456C28C016DE702 |
:1078200071E0CE010E9456C2B8010E94D9BADC01B3 |
:10783000CB018093313E9093323EA093333EB09380 |
:10784000343E6DE771E0CE010E9456C2FC0180819A |
:10785000803349F06DE771E0CE010E9456C20E946C |
:107860000CC280931A3EDF91CF911F910F91089522 |
:107870002091CA37FC01EE0FFF1FEE0FFF1FE80F2C |
:10788000F91FE20FF11DEE0FFF1FE651FD4D828142 |
:10789000938108950E94AA6B8FE290E00E9438BC09 |
:1078A00020E0AC0167E08CE00E942F7180E090E066 |
:1078B0000E9438BC20E0AC0162E0822F0E942F7150 |
:1078C00080E20E944238882389F380EF0E94423888 |
:1078D0000895AF92BF92CF92DF92EF92FF920F93F3 |
:1078E0001F93CF93DF938091362EE82FFF27EE0F63 |
:1078F000FF1FDF01A35BB14CEB5CF14C0190F08109 |
:10790000E02DCD91DC91CE17DF070CF05DC0C639BC |
:10791000D1050CF059C006E910E0C8018E1B9F0B81 |
:10792000AA2797FDA095BA2FBC01CD010E94CEC415 |
:10793000DC01CB0120E030E040E05FE3BC01CD01A1 |
:107940000E94BBC5DC01CB019C01AD0160E070E091 |
:107950008CE792E40E94C7C3DC01CB01BC01CD01DE |
:107960000E94A0C46B017C01B090372EB3940C1B15 |
:107970001D0BC801AA2797FDA095BA2FBC01CD0108 |
:107980000E94CEC4DC01CB0120E030E040E05FE3A8 |
:10799000BC01CD010E94BBC5DC01CB019C01AD0146 |
:1079A00060E070E08CE792E40E94C7C3DC01CB0189 |
:1079B000BC01CD010E94A0C4DC01CB0100E024E0A9 |
:1079C0004C2D6B2D0E945F6E8091362EE82FFF2785 |
:1079D000EE0FFF1FDF01A35BB14CEB5CF14CC081EC |
:1079E000D1818D919C91C817D9070CF05AC0873965 |
:1079F00091050CF456C086599040AA2797FDA09592 |
:107A0000BA2FBC01CD010E94CEC4DC01CB0120E025 |
:107A100030E040E05FE3BC01CD010E94BBC5DC016A |
:107A2000CB0120E030E04CE752E4BC01CD010E94E4 |
:107A3000C8C3DC01CB01BC01CD010E94A0C46B0115 |
:107A40007C011091372E1F5FC659D040CE01AA2766 |
:107A500097FDA095BA2FBC01CD010E94CEC4DC01D8 |
:107A6000CB0120E030E040E05FE3BC01CD010E94AB |
:107A7000BBC5DC01CB0120E030E04CE752E4BC01A7 |
:107A8000CD010E94C8C3DC01CB01BC01CD010E9425 |
:107A9000A0C4DC01CB0100E024E04C2D612F0E944A |
:107AA0005F6E8091362EE82FFF27EE0FFF1FEB5CF5 |
:107AB000F14C0190F081E02DC091372EE639F105AF |
:107AC00024F1E659F040CF01AA2797FDA095BA2FDF |
:107AD000BC01CD010E94CEC4DC01CB0120E030E02E |
:107AE00040E05FE3BC01CD010E94BBC5DC01CB01DE |
:107AF000BC01CD010E94A0C4DC01CB01CF5F01E03D |
:107B000024E0482F6C2F8FE331C086E990E08E1B74 |
:107B10009F0BAA2797FDA095BA2FBC01CD010E940B |
:107B2000CEC4DC01CB0120E030E040E05FE3BC01EB |
:107B3000CD010E94BBC57B018C010E94A0C45B01EA |
:107B40006C01CF5FA801970160E070E08CE792E4E0 |
:107B50000E94C7C3DC01CB01BC01CD010E94A0C4BF |
:107B6000DC01CB0101E024E04A2D6C2F0E945F6E06 |
:107B700026E042E06091372E8EE30E945F6E909186 |
:107B8000372E892F8A5F01E0282F43E0692F842F49 |
:107B90000E949C6D9091372E892F8A5F282F47E194 |
:107BA000692F842F0E949C6D9091372E892F8A5FB8 |
:107BB000282F4BE2692F842F0E949C6D9091372EC5 |
:107BC000892F8A5F282F43E5692F842F0E949C6D9F |
:107BD0009091372E892F8A5F282F47E6692F842FAF |
:107BE0000E949C6D9091372E892F8A5F282F4BE73A |
:107BF000692F842F0E949C6DDF91CF911F910F916F |
:107C0000FF90EF90DF90CF90BF90AF900895CF930B |
:107C1000DF93A5E7BFE28CE0FD0111928A95E9F7B9 |
:107C2000ED0194E0E5E3FEE3808132968659899385 |
:107C3000915097FFF9CF8CE090E09F938F93BF9383 |
:107C4000AF9381E08F938F9389E78F930E94404198 |
:107C50008DB79EB707960FB6F8949EBF0FBE8DBF27 |
:107C6000DF91CF910895DF92EF92FF920F931F93D0 |
:107C7000CF93DF93CDB7DEB764970FB6F894DEBF2E |
:107C80000FBECDBF43E050E066E970E085E39EE3C0 |
:107C90000E945BC2FE01319685E0DF011D928A954C |
:107CA000E9F780E480937C0080917C00807E809363 |
:107CB0007C0082E390E09093512E8093502E80912F |
:107CC000502E9091512E892BD1F787EC80937A001A |
:107CD00080917A0086FDFCCF8091780090917900A8 |
:107CE00096958795969587959070938782878D3620 |
:107CF00091051CF48CE690E005C08439910524F0D0 |
:107D000084E990E09387828780917C00807E826006 |
:107D100080937C0080917A00806480937A008091C7 |
:107D20007A0086FDFCCF349680917800909179009E |
:107D300096958795969587959070938782878D36CF |
:107D400091051CF48CE690E005C08439910524F07F |
:107D500084E990E093878287DD2480917C00807E97 |
:107D600080937C0080917A00806480937A000E94E6 |
:107D7000AA6B62E08EE69CE50E94BE7083E090E014 |
:107D80000E9438BC2D2DAC0167E08D2D0E942F7113 |
:107D90002D2D43E85CE567E082E10E94EE70EE2461 |
:107DA000FF2414E08E2D845F8093372E01E026E0BF |
:107DB00048E7682F83E00E9471719091372E892FD8 |
:107DC0008A5F282F47E1692F842F0E949C6D909134 |
:107DD000372E892F8A5F282F4BE2692F842F0E942C |
:107DE0009C6D26E042E06091372E8EE30E945F6E2C |
:107DF0009091372E892F8A5F282F43E5692F842F92 |
:107E00000E949C6D9091372E892F8A5F282F47E61C |
:107E1000692F842F0E949C6D1150E8E0F0E0EE0E77 |
:107E2000FF1E17FFBFCF86E990E09093363E809308 |
:107E3000353E1A82198290933A3E8093393E1E82D3 |
:107E40001D8290933E3E80933D3E1A8619860FEF29 |
:107E500080917A0086FD05C11091352E812F9927DA |
:107E60004D2D5527042E02C0959587950A94E2F76B |
:107E7000DE011196BA01640F751F80FF15C0A60FB1 |
:107E8000B71F809178009091790096958795969587 |
:107E90008795FD0122853385281B31096B5C714C68 |
:107EA000DB012D933C9315C080917800909179006F |
:107EB00096958795969587959070A60FB71FFD01AB |
:107EC00022853385821B930B6B5C714CDB018D9398 |
:107ED0009C93FA01E40FF51FEB5CF14C80819181DA |
:107EE000BFEF89389B071CF488E89FEF05C08837EF |
:107EF000910524F088E790E091838083DD2021F0D4 |
:107F0000E2E0DE1609F04EC0FA01E40FF51FBE01F3 |
:107F10006F5F7F4FDF01A60FB71FEB5CF14C8081D5 |
:107F2000918197FD079623E0959587952A95E1F72E |
:107F3000FC0197FF04C0EE27FF27E81BF90B8E9F7B |
:107F400090018F9F300D9E9F300D1124C9012D91FE |
:107F50003C911197280F391F11963C932E9384EC76 |
:107F6000213038071CF480E094EC05C020503C43DD |
:107F700024F080E09CE38D939C93FA01E40FF51FBD |
:107F8000DF01AB5CB14CE60FF71F0190F081E02DF3 |
:107F9000F7FF02C0E158FF4FEE0FEF2FEE1FFF0B70 |
:107FA000ED93FC934D2D5527FA01E40FF51FEB5C83 |
:107FB000F14C808191818A569F4F918380838F31CC |
:107FC00091051CF48EE190E005C08E50914024F0A4 |
:107FD0008EE091E091838083FA01E40FF51FDF01C9 |
:107FE000A35BB14CEB5CF14C208131818D919C9174 |
:107FF0002817390741F081E090E002C0880F991FEF |
:108000004A95E2F7082BD394B3E0DB16E9F413FFAB |
:1080100003C0039906C002C0039B03C08EE091E039 |
:1080200002C08EE190E090933C3E80933B3E2091D5 |
:108030003B3E30913C3E8091533E9091543E2817F8 |
:10804000390709F00860DD2480917C00807E9D2D39 |
:108050009F71892B80937C0080917A00806480934B |
:108060007A0080E40E944238882331F463E080E49F |
:108070000E948638882351F080913D3E90913E3E8B |
:10808000E1E08F309E0714F4019613C080E80E944F |
:108090004238882331F463E080E80E9486388823E0 |
:1080A00071F080913D3E90913E3E8E3191053CF0C5 |
:1080B000019790933E3E80933D3E006126C080E153 |
:1080C0000E944238882309F186E990E09093363E79 |
:1080D0008093353E1A82198290933A3E8093393EBE |
:1080E0001E821D8290933E3E80933D3E1A861986E5 |
:1080F00088EC90E09093A62A8093A52A80E890E0EF |
:10810000909301018093000103C0002309F466C02D |
:108110008CE08093372E1092362E0E9469BC80919D |
:10812000362EE82FFF27EE0FFF1FDF01AB5CB14CAF |
:108130008D919C91E35BF14C918380838091373EDC |
:108140009091383E9093503E80934F3E8CE18093C7 |
:10815000372E82E08093362E0E9469BC8091362EA5 |
:10816000E82FFF27EE0FFF1FDF01AB5CB14C8D91B5 |
:108170009C91E35BF14C9183808384E28093372E62 |
:1081800083E08093362E0E9469BC8091362EE82FC2 |
:10819000FF27EE0FFF1FDF01AB5CB14C8D919C916F |
:1081A000E35BF14C918380838CE28093372E84E0F3 |
:1081B0008093362E0E9469BC8091362EE82FFF27CF |
:1081C000EE0FFF1FDF01AB5CB14C8D919C91E35B27 |
:1081D000F14C9183808300E00E9407BE80E20E9400 |
:1081E0004238882309F434CE80EF0E9442380E943E |
:1081F0009C7B64960FB6F894DEBF0FBECDBFDF91B7 |
:10820000CF911F910F91FF90EF90DF900895A0E024 |
:10821000B0E0EDE0F1EC0C943FC78C012B01EA01DA |
:10822000EE246115710519F0FB019183808320977D |
:1082300049F0CE010297839728F060E070E080E07B |
:1082400090E0E5C0F801F1908F018F2D99270E94F1 |
:1082500032C7892BB9F7FDE2FF1619F441E0E42E8D |
:1082600003C0FBE2FF1619F4F801F1908F0120978B |
:1082700019F0C031D10591F4F0E3FF1679F4F8015B |
:108280008081883711F0883549F4F801F1800E5F5C |
:108290001F4FC0E1D0E0F2E0EF2A0AC0209741F47E |
:1082A00080E3F81619F4C8E0D0E002C0CAE0D0E0DC |
:1082B000C830D105E9F0C930D10524F4C230D10568 |
:1082C000E9F022C0CA30D10521F0C031D10551F00A |
:1082D0001BC03CECA32E3CECB32E3CECC32E3CE08C |
:1082E000D32E1FC0A12CB12CC12C28E0D22E19C036 |
:1082F000A12CB12CC12C90E1D92E13C0A12CB12CF2 |
:10830000C12C80E4D82E0DC09E01442737FD409536 |
:10831000542F60E070E080E090E80E94F5C65901BB |
:108320006A0120E030E040E050E060E03E01882457 |
:1083300077FC8094982C8F2D80538A3010F4F82E7F |
:108340000DC08F2D81548A3118F4E9ECFE0E06C061 |
:108350008F2D81568A3148F5F9EAFF0E8F2D992726 |
:108360008C179D0714F567FD1CC0A216B306C40642 |
:10837000D506A0F0CA01B901A40193010E94A3C6C9 |
:108380009B01AC012F0D311D411D511D213080E09D |
:10839000380780E0480780E8580710F06FEF01C009 |
:1083A00061E0F801F1908F01C6CF4114510461F0F2 |
:1083B000662319F00150104004C0E1FE05C00250D0 |
:1083C0001040F201118300838E2D992767FF07C0AB |
:1083D00080FF11C020E030E040E050E810C080FF96 |
:1083E00008C050954095309521953F4F4F4F5F4FB6 |
:1083F0000CC057FF0AC02FEF3FEF4FEF5FE782E25D |
:1084000090E09093583E8093573ECA01B901E0E155 |
:10841000CDB7DEB70C945BC7FC0188279927E89499 |
:1084200021912032E9F3293010F02E30C8F32B329D |
:1084300041F02D3239F4689404C00E9499C3820F30 |
:10844000911D219120532A30C0F31EF490958195FF |
:108450009F4F0895FB01DC010D900020E9F7119773 |
:1084600005900D920020E1F70895FB01DC010590D5 |
:108470000D920020E1F70895FB0155915523A9F0D5 |
:10848000BF01DC014D9145174111E1F759F4CD01D0 |
:108490000590002049F04D9140154111C9F3FB01B1 |
:1084A0004111EFCF81E090E00197089548E35EE24B |
:1084B0000E9480C20895DC0101C06D93415050407C |
:1084C000E0F70895FB01DC018D9101908019011006 |
:1084D000D9F3990B0895FB01DC0101900D92002066 |
:1084E000E1F70895FB01DC014150504030F08D91DF |
:1084F0000190801919F40020B9F7881B990B089591 |
:10850000009731F4DA018D919C91009709F40EC027 |
:10851000DC01FB013D912191222319F03217C9F3AF |
:10852000FACF332331F4DA011D921C928827992760 |
:1085300008951197AF93BF93FB013D91219132179D |
:1085400071F4332321F488279927119702C01E92D2 |
:108550001196FA01A193B0839F918F9108952223E0 |
:1085600069F7EACFA0E0B0E0E8EBF2EC0C9445C785 |
:108570006C017B01EA01590121978FEFCF3FD807AA |
:1085800089F086010894C11CD11CC7010894E11C24 |
:10859000F11CF5010995F80180832197FFEFCF3F8A |
:1085A000DF0779F7EAE0CDB7DEB70C9461C7AF9289 |
:1085B000BF92CF92DF92EF92FF920F931F936C01C5 |
:1085C0005B01FB010995E82EC6010196F5010995AD |
:1085D000F82EC6010296F5010995082FC6010396EB |
:1085E000F5010995182FC801B7011F910F91FF9050 |
:1085F000EF90DF90CF90BF90AF900895CF92DF9231 |
:10860000EF92FF920F931F937C016B01FB01099581 |
:10861000082FC7010196F6010995182FC8011F916F |
:108620000F91FF90EF90DF90CF900895A0E0B0E021 |
:10863000ECE1F3EC0C9447C78C017B01EA01690182 |
:1086400021978FEFCF3FD80771F0F70121917F017C |
:10865000C8010F5F1F4F622FF60109952197FFEFA9 |
:10866000CF3FDF0791F7E8E0CDB7DEB70C9463C7E3 |
:10867000AF92BF92CF92DF92EF92FF920F931F9330 |
:108680008C016A017B015901642FF90109956D2D57 |
:10869000C8010196F50109956E2DC8010296F501F4 |
:1086A00009956F2DC8010396F50109951F910F914A |
:1086B000FF90EF90DF90CF90BF90AF900895CF9252 |
:1086C000DF92EF92FF920F931F936C018B017A015F |
:1086D000FA010995812F9927682FC6010196F701A4 |
:1086E00009951F910F91FF90EF90DF90CF90089523 |
:1086F000FB019F01E8944230C4F04532B4F44A30A3 |
:1087000029F497FB1EF4909581959F4F642F77274E |
:108710000E94CEC6805D8A330CF0895D8193CB01C7 |
:108720000097A1F716F45DE251931082C9010C94F1 |
:10873000B7C37AE0979F902D879F802D910D1124CC |
:108740000895FB019F01423074F0453264F4642FB8 |
:1087500077270E94CEC6805D8A330CF0895D8193B5 |
:10876000CB010097A1F71082C9010C94B7C3DC01BB |
:10877000FC01672F71917723E1F7329704C07C9158 |
:108780006D9370836291AE17BF07C8F30895505878 |
:10879000BB27AA270ED0A0C169D130F06ED120F03E |
:1087A00031F49F3F11F41EF45EC10EF4E095E7FB37 |
:1087B00054C1E92FB3D180F3BA1762077307840756 |
:1087C000950718F071F49EF5CBC10EF4E0950B2ED1 |
:1087D000BA2FA02D0B01B90190010C01CA01A00113 |
:1087E0001124FF27591B99F0593F50F4503E68F16E |
:1087F0001A16F040A22F232F342F4427585FF3CFAF |
:10880000469537952795A795F0405395C9F77EF47F |
:108810001F16BA0B620B730B840BBAF09150A1F0C8 |
:10882000FF0FBB1F661F771F881FC2F70EC0BA0F4E |
:10883000621F731F841F48F4879577956795B795D6 |
:10884000F7959E3F08F0B3CF9395880F08F09927CE |
:10885000EE0F979587950895DCD008F481E0089590 |
:1088600014D1E3954AC10CD037C107D140F0FED0F6 |
:1088700030F021F45F3F19F0F0C0511172C1F3C024 |
:108880004DD198F39923C9F35523B1F3951B550B9B |
:10889000BB27AA2762177307840738F09F5F5F4FD3 |
:1088A000220F331F441FAA1FA9F333D00E2E3AF014 |
:1088B000E0E830D091505040E695001CCAF729D02E |
:1088C000FE2F27D0660F771F881FBB1F261737077D |
:1088D0004807AB07B0E809F0BB0B802DBF01FF27AD |
:1088E00093585F4F2AF09E3F510568F0B6C039C1DA |
:1088F0005F3FECF3983EDCF3869577956795B795E7 |
:10890000F7959F5FC9F7880F911D9695879597F901 |
:108910000895E1E0660F771F881FBB1F621773077A |
:108920008407BA0720F0621B730B840BBA0BEE1F8F |
:1089300088F7E095089504D06894B11112C10895A4 |
:10894000F5D088F09F5790F0B92F9927B751A0F034 |
:10895000D1F0660F771F881F991F1AF0BA95C9F7D3 |
:1089600012C0B13081F0FCD0B1E00895F9C0672F9A |
:10897000782F8827B85F39F0B93FCCF38695779583 |
:108980006795B395D9F73EF490958095709561956C |
:108990007F4F8F4F9F4F0895E89409C097FB3EF497 |
:1089A00090958095709561957F4F8F4F9F4F99233C |
:1089B000A9F0F92F96E9BB279395F69587957795BA |
:1089C0006795B795F111F8CFFAF4BB0F11F460FF7A |
:1089D0001BC06F5F7F4F8F4F9F4F16C0882311F0D2 |
:1089E00096E911C0772321F09EE8872F762F05C0E6 |
:1089F000662371F096E8862F70E060E02AF09A9581 |
:108A0000660F771F881FDAF7880F9695879597F975 |
:108A10000895990F0008550FAA0BE0E8FEEF16160F |
:108A20001706E807F907C0F012161306E407F50762 |
:108A300098F0621B730B840B950B39F40A2661F0D6 |
:108A4000232B242B252B21F408950A2609F4A14079 |
:108A5000A6958FEF811D811D089597F99F6780E886 |
:108A600070E060E008959FEF80EC089500240A9480 |
:108A70001616170618060906089500240A941216F9 |
:108A80001306140605060895EECF50D0E8F3E894D7 |
:108A9000E0E0BB279F57F0F02AED3FE049EC06C02D |
:108AA000EE0FBB0F661F771F881F28F0B23A6207D0 |
:108AB0007307840728F0B25A620B730B840BE3959B |
:108AC0009A9572F7803830F49A95BB0F661F771F1E |
:108AD000881FD2F79048F5C0092E0394000C11F4BA |
:108AE000882352F0BB0F40F4BF2B11F460FF04C089 |
:108AF0006F5F7F4F8F4F9F4F0895EF93E0FF06C04A |
:108B0000A2EA2AED3FE049EC5FEB53DEE5DF0F9090 |
:108B1000039401FC9058EEEEF0E0DFC057FD905852 |
:108B2000440F551F59F05F3F71F04795880F97FB31 |
:108B3000991F61F09F3F79F08795089512161306EB |
:108B40001406551FF2CF4695F1DF08C0161617061A |
:108B50001806991FF1CF869571056105089408954F |
:108B6000E894BB2766277727CB0197F9089551DF53 |
:108B700008F48FEF08950BD0AFCF78DF28F07DDFBA |
:108B800018F0952309F069CF6ECF1124EACFC6DF24 |
:108B9000A0F3959FD1F3950F50E0551F629FF00110 |
:108BA000729FBB27F00DB11D639FAA27F00DB11D69 |
:108BB000AA1F649F6627B00DA11D661F829F2227F2 |
:108BC000B00DA11D621F739FB00DA11D621F839F79 |
:108BD000A00D611D221F749F3327A00D611D231F4F |
:108BE000849F600D211D822F762F6A2F11249F579D |
:108BF00050408AF0E1F088234AF0EE0FFF1FBB1FC0 |
:108C0000661F771F881F91505040A9F79E3F51055E |
:108C100070F023CFA6CF5F3FECF3983EDCF3869550 |
:108C200077956795B795F795E7959F5FC1F7FE2B09 |
:108C3000880F911D9695879597F9089577DFE0F055 |
:108C40009E37D8F09639B8F49E3848F4672F782FBD |
:108C50008827985FF9CF869577956795939595398D |
:108C6000D0F3B62FB1706B0F711D811D20F4879565 |
:108C700077956795939508C022C073CF9F9305DFC2 |
:108C80000F9007FCEE5F39CF882371F4772321F032 |
:108C90009850872B762F07C0662311F499270DC0B3 |
:108CA0009051862B70E060E02AF09A95660F771F4E |
:108CB000881FDAF7880F9695879597F908959F3F53 |
:108CC00031F0915020F4879577956795B795880F87 |
:108CD000911D9695879597F908959F938F937F930C |
:108CE0006F93FF93EF939B01AC0145DFEF91FF91F1 |
:108CF00005D02F913F914F915F913DCFDF93CF935F |
:108D00001F930F93FF92EF92DF927B018C01689487 |
:108D100005C0DA2EEF013BDFFE01E894A591259115 |
:108D2000359145915591AEF3EF0143DDFE01970179 |
:108D3000A801DA9479F7DF90EF90FF900F911F91DF |
:108D4000CF91DF910895629FD001739FF001829FC0 |
:108D5000E00DF11D649FE00DF11D929FF00D839FCA |
:108D6000F00D749FF00D659FF00D9927729FB00D67 |
:108D7000E11DF91F639FB00DE11DF91FBD01CF017A |
:108D800011240895991B79E004C0991F961708F0E3 |
:108D9000961B881F7A95C9F780950895AA1BBB1B5F |
:108DA00051E107C0AA1FBB1FA617B70710F0A61BEB |
:108DB000B70B881F991F5A95A9F780959095BC010C |
:108DC000CD01089597FB092E07260AD077FD04D020 |
:108DD000E5DF06D000201AF4709561957F4F089565 |
:108DE000F6F7909581959F4F0895A1E21A2EAA1B40 |
:108DF000BB1BFD010DC0AA1FBB1FEE1FFF1FA2174B |
:108E0000B307E407F50720F0A21BB30BE40BF50B47 |
:108E1000661F771F881F991F1A9469F760957095D0 |
:108E2000809590959B01AC01BD01CF01089597FB02 |
:108E3000092E05260ED057FD04D0D7DF0AD0001C1E |
:108E400038F450954095309521953F4F4F4F5F4FE7 |
:108E50000895F6F790958095709561957F4F8F4FA7 |
:108E60009F4F0895911106C0803219F089508550A6 |
:108E7000D0F708959927882708952F923F924F920F |
:108E80005F926F927F928F929F92AF92BF92CF929A |
:108E9000DF92EF92FF920F931F93CF93DF93CDB7A3 |
:108EA000DEB7CA1BDB0B0FB6F894DEBF0FBECDBF1B |
:108EB00009942A88398848885F846E847D848C84EC |
:108EC0009B84AA84B984C884DF80EE80FD800C81F5 |
:108ED0001B81AA81B981CE0FD11D0FB6F894DEBFD8 |
:0A8EE0000FBECDBFED010895FFCFD6 |
:108EEA00FFFF1E000A0001016400014D6F746F72DA |
:108EFA003B56657273696F6E3B536574706F696E2A |
:108F0A007420686967683B536574706F696E742072 |
:108F1A006C6F773B53746174653B526561644D6F46 |
:108F2A0064653B43757272656E743B4D6178505748 |
:108F3A004D3B54656D70657261747572650D003BC9 |
:108F4A00000D000A000A24020101D62F070609FFB4 |
:108F5A00FFFF010147503A54693A6D65002C0047FA |
:108F6A0050474741002E004E6F7420666F726D6144 |
:108F7A0074206861726469736B20433F00201A2071 |
:108F8A00202020201B20202020456E6465202020E0 |
:108F9A004F4B00201A20202020201B202020206553 |
:108FAA006E64202020204F4B00201A2020202020F1 |
:108FBA001B2020202066696E202020204F4B002095 |
:108FCA001A20202020201B2020202045696E64655D |
:108FDA0020204F4B0020182020202020192020205C |
:108FEA0020456E64652020204F4B00201820202049 |
:108FFA0020201920202020656E64202020204F4B3D |
:10900A000020182020202020192020202066696EA8 |
:10901A00202020204F4B002018202020202019201B |
:10902A0020202045696E646520204F4B00201820BF |
:10903A00202020201920202020456E646520002051 |
:10904A001820202020201920202020656E6420204E |
:10905A000020182020202020192020202066696E58 |
:10906A002020002018202020202019202020204500 |
:10907A00696E646500456E64652020204F4B00656B |
:10908A006E64202020204F4B0066696E202020202D |
:10909A004F4B0045696E646520204F4B00456E6456 |
:1090AA006520496E666F00656E642020696E666F82 |
:1090BA000066696E2020696E666F0045696E6420DD |
:1090CA00496E666F00546173746520312053656B75 |
:1090DA00756E6465004B65657020746865206275FD |
:1090EA0074746F6E004D61696E74656E657A206C7A |
:1090FA006520626F75746F6E00486F7564206465D1 |
:10910A00206B6E6F70202020006C616E6720666590 |
:10911A00737468616C74656E2E0070726573736522 |
:10912A006420666F722031207365636F6E64006518 |
:10913A006E666F6E6365652070656E642E203120E1 |
:10914A007365630031207365636F6E646520696EB1 |
:10915A0067656472756B742E0056657262696E6417 |
:10916A00756E67207A756D204D4B206973740043C4 |
:10917A006F6E6E656374696F6E20746F204D4B203D |
:10918A00697300436F6E6E6578696F6E20E0204DDB |
:10919A004B206573740056657262696E64696E6706 |
:1091AA00206D6574204D4B206973006175662057E8 |
:1091BA00693233322065696E67657374656C6C74E5 |
:1091CA000073657420746F205769323332006D69F9 |
:1091DA0073206120576932333200696E6765737490 |
:1091EA00656C64206F70205769323332006175668E |
:1091FA00204B6162656C2065696E67657374656C86 |
:10920A006C740073657420746F206B6162656C20E6 |
:10921A006F6E20535632006D69732061206B616254 |
:10922A00656C207375722053563200766961206B23 |
:10923A006162656C76657262696E64696E67005018 |
:10924A006F727461626C6573204B6F707465722003 |
:10925A00546F6F6C00506F727461626C65204B6F53 |
:10926A007074657220546F6F6C200066FC72204621 |
:10927A00432056657220302E38386D00666F722092 |
:10928A0046432056657220302E38386D00706F754F |
:10929A00722046432056657220302E38386D0056AB |
:1092AA006F6F722046432056657220302E38386D13 |
:1092BA0000474E552047504C204C6963656E7365D4 |
:1092CA000041546D656761203634340041546D6540 |
:1092DA00676120363434500041546D65676120312E |
:1092EA003238345000486172647761726520312ED9 |
:1092FA003200486172647761726520312E325700FC |
:10930A00486172647761726520312E330048617258 |
:10931A00647761726520312E335700486172647731 |
:10932A0061726520332E39002020204C65747A74CE |
:10933A006520506F736974696F6E202020002020A9 |
:10934A00206C617374202020706F736974696F6E6A |
:10935A00202020002020206465726E6965726520D5 |
:10936A00706F736974696F6E20002020204C6161F0 |
:10937A007473746520706F736974696520202000A6 |
:10938A00204272656974656E677220204CE46E67CC |
:10939A00656E67722000206C61746974756465205B |
:1093AA00206C6F6E6769747564652000627265650A |
:1093BA0064746567722E206C656E67746567722EB9 |
:1093CA0020006CF6736368656E2020202020202020 |
:1093DA00207765697465720064656C657465202020 |
:1093EA0020202020202020206578697420007375B1 |
:1093FA00707072696D657220202020202020706CA8 |
:10940A007573200077697373656E202020202020F1 |
:10941A002020207665726465720020202020476F24 |
:10942A006F676C652045696E676162652020200060 |
:10943A0020202020476F6F676C6520496E70757415 |
:10944A0020202020200020202020202067656CF684 |
:10945A0073636874202020202020200020202020F0 |
:10946A00202064656C6574656420202020202020FB |
:10947A0020002020202020207375707072696D658D |
:10948A002020202020202000202020202020676566 |
:10949A007769737420202020202020202000537513 |
:1094AA006368652046432E2E2E20202020007365F7 |
:1094BA0061726368696E672046432E2E2E006368C8 |
:1094CA0065726368616E742046432E2E2E007A6F91 |
:1094DA00656B2046432E2E2E202020202000456E2C |
:1094EA0064652000656E6420200066696E20200095 |
:1094FA0045696E6465004F6B2020006F6B20200069 |
:10950A0067756564004665686C657220200065723F |
:10951A00726F72202020006427657272657572006E |
:10952A00666F75742020202000616B7469762000B4 |
:10953A0061637469762000616374696673006163AC |
:10954A0074696566004643206E69636874206765BE |
:10955A0066756E64656E21004643206E6F742066E0 |
:10956A006F756E6421004643207061732074726FB8 |
:10957A0075766521004643206E69657420676576B5 |
:10958A006F6E64656E2100504B542D546F6F6C20C2 |
:10959A00474E552047504C00676566756E64656E88 |
:1095AA003A2000666F756E643A200074726F7576A1 |
:1095BA00E9733A20006765766F6E64656E3A20003B |
:1095CA00466C696768742D4374726C004E617669E3 |
:1095DA002D4374726C0056657273696F6E3A20007F |
:1095EA005665727369653A202000657277617274F4 |
:1095FA006574006578706563746564006174746588 |
:10960A006E64757300766572776163687400676566 |
:10961A0066756E64656E00666F756E642020200044 |
:10962A0074726F7576657320006765766F6E646510 |
:10963A006E00504B542D546F6F6C206E7572206DF6 |
:10964A00697400504B542D546F6F6C206F6E6C7997 |
:10965A00207769746800504B5420756E697175657E |
:10966A006D656E74206176656300504B542D546F9E |
:10967A006F6C20616C6C65656E206D657400464385 |
:10968A0020536F66747761726520006B6F6D70612D |
:10969A00746962656C00636F6D70617469626C6590 |
:1096AA0000636F6D70617469626C657300636F6DDE |
:1096BA007061746962656C0045696E2020004F6EA6 |
:1096CA0020202000556E2020200041616E202000BD |
:1096DA004175732020004F666620200044752020C3 |
:1096EA002000556974202000455343002020504B28 |
:1096FA005420617573736368616C74656E3F0020F2 |
:10970A002073687574646F776E20504B54203F0045 |
:10971A0020206465736163746976657220504B54C6 |
:10972A00203F002020504B54207569747363686190 |
:10973A006B656C656E203F004E65696E2020204A7D |
:10974A0061006E6F20202020796573006E6F6E2095 |
:10975A0020206F7569004E6565202020204A61002F |
:10976A0056657262696E6465205043206D69742083 |
:10977A00504B54202000436F6E6E65637420504333 |
:10978A0020746F20504B542D555342006173736FF0 |
:10979A0063696572205043206120504B542D555304 |
:1097AA00420056657262696E64205043206D65748A |
:1097BA0020504B54202020004472FC636B65202704 |
:1097CA0053746172742720616D20504B540050729B |
:1097DA006573732027537461727427206F6E20504B |
:1097EA004B54200070726573736520276C616E6339 |
:1097FA00657227206120504B54004472756B2027F4 |
:10980A00537461727427206F7020504B54202000CB |
:10981A002020202020202020202020456E64652042 |
:10982A0053746172740020202020202020202020E0 |
:10983A0020456E6420205374617274002020202019 |
:10984A0020202020202066696E20206C616E6365CE |
:10985A0072002020202020202020202045696E64CC |
:10986A0065205374617274002050432D51756963E9 |
:10987A006B2D56657262696E64756E6720002050A2 |
:10988A00432D517569636B2D436F6E6E6563746901 |
:10989A006F6E20002050432D636F6E6E6578696F7E |
:1098AA006E20726170696465200020536E656C6C6D |
:1098BA00652050432D76657262696E64696E670031 |
:1098CA0056657262696E64652064617320504B54F8 |
:1098DA00206D697400436F6E6E65637420504B543B |
:1098EA002077697468204D4B00636F6E6E656374F0 |
:1098FA00657A20504B54206120204D4B00566572EA |
:10990A0062696E6420504B5420200064656D204DBE |
:10991A004B20FC6265723A002020206F7665722027 |
:10992A002020203A002020612070726F706F73200F |
:10993A003A002020206D657420202020203A0064FF |
:10994A00656D204D4B20FC6265723A20204B6162A6 |
:10995A00656C2C20006F7665723A204B6162656CEB |
:10996A0000612070726F706F733A204361626C6598 |
:10997A00004D4B207669613A206B6162656C20204C |
:10998A0020202020202000657320697374206B65D5 |
:10999A00696E2057692E3233320074686572652009 |
:1099AA006973206E6F2057692E323332006C206E35 |
:1099BA0027796120706173206465200065722069CF |
:1099CA0073206765656E2077692E32333220004D29 |
:1099DA006F64756C2065696E6765626175742E00C7 |
:1099EA006275696C7420696E2E006D6F64756C65A2 |
:1099FA0020696E7465677265205769323332006D6B |
:109A0A006F64756C6520696E6765626F7577642E21 |
:109A1A000057656E6E20646F63682C2064616E6EF9 |
:109A2A00206269747465006966207965732C2074F4 |
:109A3A0068656E20666972737400536920766F7563 |
:109A4A0073206C6520666169746573007A6F206A99 |
:109A5A00612C2064616E2061756220656572737481 |
:109A6A0000646173204D6F64756C207A756572733A |
:109A7A007420696D202000616374697661746520C1 |
:109A8A006D6F64756C20696E0061637469766572C6 |
:109A9A00206C65206D6F64756C65006465206D6F60 |
:109AAA0064756C6520616B7469766572656E0053C6 |
:109ABA00657475706D656EFC20616B746976696595 |
:109ACA0072656E2E0053657475706D656E750064EF |
:109ADA00616E73206D656E7520646520636F6E66B6 |
:109AEA0069672E00696E2068657420536574757005 |
:109AFA006D656E752E00536965206DFC7373656E16 |
:109B0A002064617320504B5400596F752068617648 |
:109B1A006520746F00566F757320646576657A00E8 |
:109B2A0055206D6F657420646520504B54006A653A |
:109B3A00747A74206E6575207374617274656E210F |
:109B4A00007265737461727420504B5400726564BC |
:109B5A00656D617272657220504B54006E75206F8C |
:109B6A00706E69657577207374617274656E210011 |
:109B7A00457320697374206B65696E2042544D2DBC |
:109B8A00323232005468657265206973206E6F2024 |
:109B9A0042544D2D32323200457220697320676576 |
:109BAA00656E2042544D2D323232004D6F64756C11 |
:109BBA002065696E676562617574004D6F64756CC6 |
:109BCA00206275696C7420696E006D6F64756C65CE |
:109BDA0020696E74656772652042544D32323200D4 |
:109BEA00204D4B2D5553422046756E6B74696F6E2E |
:109BFA002000204D4B2D5553422046756E637469E3 |
:109C0A006F6E2000204D4B2D55534220666F6E63B8 |
:109C1A0074696F6E2000204D4B2D555342204675B6 |
:109C2A006E63746965202000204254202D2D3E2049 |
:109C3A004B6162656C20616E204643202000204201 |
:109C4A0054202D2D3E204B6162656C20746F204696 |
:109C5A0043202000204254202D2D3E204361626C77 |
:109C6A0065206120204643202000204254202D2DCB |
:109C7A003E206B6162656C206E6161722046430012 |
:109C8A005043206D697420425420766572622E001A |
:109C9A00636F6E6E65637420504320776974682021 |
:109CAA004254006173736F63696572205043206187 |
:109CBA002042540050432076696120425420766540 |
:109CCA0072626F6E64656E2E00504B542D4B61624A |
:109CDA00656C20616E20464300504B542D4B6162E7 |
:109CEA00656C20746F20464300504B542D436162CB |
:109CFA006C65206120464300504B542D6B616265B0 |
:109D0A006C206E61617220464300204254202D2D42 |
:109D1A003E2057692E323332202020202020200076 |
:109D2A0057692E32333220616E204643202020208C |
:109D3A0020202020200057692E32333220746F20D1 |
:109D4A0046432020202020202020200057692E3240 |
:109D5A00333220612046432020202020202020204A |
:109D6A00200057692E323332206E616172204643D9 |
:109D7A00202020202020200020555342202D2D3E37 |
:109D8A00204B6162656C20616E204643200020559D |
:109D9A005342202D2D3E206361626C6520746F2032 |
:109DAA004643200020555342202D2D3E20636162F8 |
:109DBA006C652061204643202000555342202D2DFA |
:109DCA003E206B6162656C206E61617220464300C1 |
:109DDA005043206D6974205553422076657262693A |
:109DEA006E64656E2000636F6E6E65637420504307 |
:109DFA002077697468205553422020006173736F7D |
:109E0A006369657220504320612055534220202007 |
:109E1A00200056657262696E64205043206D657435 |
:109E2A00205553422020200020555342202D2D3EFC |
:109E3A002057692E323332202020202020004D4B1B |
:109E4A002D546F6F6C207374617274656E00737435 |
:109E5A00617274204D4B2D546F6F6C0064656D6197 |
:109E6A007272616765204D4B2D546F6F6C002057DD |
:109E7A00692E323332204B6F6E6669677572696577 |
:109E8A0072656E002057692E32333220436F6E6638 |
:109E9A00696775726174696F6E002057692E323373 |
:109EAA003220636F6E6669677572657220202000C2 |
:109EBA002057692E32333220436F6E666967757296 |
:109ECA0061746965200050726F6772616D6D2073ED |
:109EDA0074617274656E2E20202020007374617282 |
:109EEA00742070726F6772616D200044E96D61724F |
:109EFA00726572206C652070726F6772616D6D6534 |
:109F0A000073746172742070726F6772616D6D6133 |
:109F1A002E0042544D2D323232204B6F6E666967E5 |
:109F2A007572696572656E0042544D2D3232322067 |
:109F3A00636F6E66696775726174696F6E00425409 |
:109F4A004D2D32323220646520636F6E6669677503 |
:109F5A0072612E0042544D2D32323220636F6E668A |
:109F6A006967757261746965004643203E204D4BEE |
:109F7A002D555342203E2042544D2D323232004D4F |
:109F8A004B2D55534220616E20504320616E7363FE |
:109F9A00686C2E2000636F6E6E65637420504320D8 |
:109FAA00746F204D4B2D55534220006173736F63BC |
:109FBA006965722050432061204D4B2D5553422034 |
:109FCA000056657262696E64205043206D65742084 |
:109FDA004D4B2D555342005A7769736368656E205D |
:109FEA004D4B2D55534220756E64202000636F6ED1 |
:109FFA006E6563742063726F737365642063616254 |
:10A00A006C65006C6120636F6E6E6578696F6E2097 |
:10A01A00656E7472652050430054757373656E20C3 |
:10A02A004D4B2D55534220656E20504B5420005005 |
:10A03A004B542065696E2067656B7265757A746525 |
:10A04A0073202020006265747765656E204D4B2D64 |
:10A05A0055534220616E64202020006574204643D7 |
:10A06A0020756E206361626C652063726F69736527 |
:10A07A000065656E2067656B727569737465206B20 |
:10A08A006162656C2020004B6162656C20616E73B1 |
:10A09A0063686C69657373656E2E202000504B549B |
:10A0AA002053563200200061616E736C75697465C5 |
:10A0BA006E2E004B6162656C006361626C650053D1 |
:10A0CA006C617665202020006573636C6176657328 |
:10A0DA00004E6F726D616C20006E6F726D616C2044 |
:10A0EA00004E6F726D2E2020005265766572736580 |
:10A0FA0000696E7665727365006765696E7665726A |
:10A10A0000456E64202020204F4B0046696E2020B7 |
:10A11A0020204F4B0045696E642020204F4B0020C1 |
:10A12A00454550726F6D207769726B6C6963680080 |
:10A13A00205265616C792064656C657465002065E0 |
:10A14A006570726F6D207375707072696D65723F9C |
:10A15A000020456570726F6D207765726B656C695A |
:10A16A006A6B00206CF6736368656E3F0020454594 |
:10A17A0070726F6D3F002020202000207769737372 |
:10A18A00656E3F0064657574736368202020200043 |
:10A19A006765726D616E202020202000616C6C65FD |
:10A1AA006D616E64652020006475697473202020D7 |
:10A1BA0020202000656E676C697363682020200088 |
:10A1CA00656E676C6973682020202000616E676C79 |
:10A1DA006169736520202000656E67656C732020B5 |
:10A1EA00202020006672616E7AF6736973636800D4 |
:10A1FA006672656E63682020202020006672616E98 |
:10A20A00E7616973652020006672616E7320202001 |
:10A21A0020202000686F6C6CE46E646973636800C8 |
:10A22A00647574636820202020202000686F6C6C9D |
:10A23A00616E6461697365006E656465726C616EF6 |
:10A24A0064732000416E7A656967652045696E739B |
:10A25A0074656C6C756E67656E0020446973706C0A |
:10A26A0061792053657475702020202020202000F9 |
:10A27A0020642761666669636861676520636F6E3B |
:10A28A006669672E2000446973706C617920696E73 |
:10A29A007374656C6C696E67656E2000496E666FD3 |
:10A2AA0073206265692053746172743A00496E665C |
:10A2BA006F20617420737461727475702000496E26 |
:10A2CA00662E61752064656D617272616765004909 |
:10A2DA006E666F2062696A206F70737461727400AF |
:10A2EA0053707261636865203A20004C616E67752D |
:10A2FA006167653A20006C61206C616E6775653A2A |
:10A30A0020005461616C3A20004C696368742061D2 |
:10A31A007573206E6163683A004C69676874206FD0 |
:10A32A0066662061667465723A00457874692E66BD |
:10A33A0065757820702E6C65733A004C6963687491 |
:10A34A0020756974206E613A2020004C43442048ED |
:10A35A00656C6C69676B2E3A002042726967687493 |
:10A36A006E657373203A00206C756D696E6F736940 |
:10A37A007465203A0020696E74656E736974656944 |
:10A38A00743A004C4344204B6F6E74726173743A92 |
:10A39A00004C434420636F6E74726173743A004CCC |
:10A3AA004344204E6F726D2F496E763A20004C431B |
:10A3BA0044204F7269656E742E3A2000524320463B |
:10A3CA0065686C657270696570203A005243204571 |
:10A3DA0072726F726265657020203A004465627518 |
:10A3EA006720504B540057692054582F5258204325 |
:10A3FA0068616E3A005769204E6574572E2047727D |
:10A40A00702E3A005769204E6574572E204D6F649E |
:10A41A00653A0057692054582054696D656F757400 |
:10A42A003A0057692055415254204D545520202056 |
:10A43A003A0057692E3233322065696E6765626168 |
:10A44A0075743A0057692E323332206275696C741A |
:10A45A0020696E203A0057692E32333220696E74B1 |
:10A46A006567726520203A0057692E3233322069B7 |
:10A47A006E6765626F7577643A004973742065691F |
:10A48A006E2057692E3233322D4D6F64756C200061 |
:10A49A004973205769323332206D6F64756C0065D9 |
:10A4AA00737420756E206D6F64756C652000497336 |
:10A4BA002065722065656E2057692E323332006539 |
:10A4CA00696E6765626175743F006275696C7420B4 |
:10A4DA00696E3F00696E7465677265205769323329 |
:10A4EA00323F006D6F64756C6520696E6765626FD7 |
:10A4FA007577643F004A6120200079657320006FF8 |
:10A50A00756920004E65696E006E6F2020006E6FBF |
:10A51A006E20004E656520002042544D32323220B2 |
:10A52A0045696E7374656C6C756E67656E00202084 |
:10A53A0042544D2D3232322073657474696E6773DA |
:10A54A00202020004973742065696E2042544D2DE5 |
:10A55A003232322D4D6F64756C0049732042544D6E |
:10A56A002D323232204D6F64756C0049732065724A |
:10A57A002065656E2042544D2D32323200696E7468 |
:10A58A00656772652042544D3232323F0042544D63 |
:10A59A003232322065696E6765626175743A0042CB |
:10A5AA00544D323232206275696C7420696E203AD9 |
:10A5BA000042544D32323220696E746567726520EA |
:10A5CA00203A0042544D32323220696E6765626F1A |
:10A5DA007577643A0020504B5420416B6B752045C7 |
:10A5EA00696E7374656C6C756E670020504B5420ED |
:10A5FA0041636375205365747570202020202020E4 |
:10A60A0000504B5420416B6B757479703A2000509E |
:10A61A004B5420416363757479703A2000504B544F |
:10A62A002041636375747970653A2000416B6B75DC |
:10A63A002055204F66667365743A2000416363753E |
:10A64A002055204F66667365743A20004F6666731C |
:10A65A006574207665727374656C6C656E206269C8 |
:10A66A00730061646A757374206F6666736574201B |
:10A67A00756E74696C00446563616C616765206C12 |
:10A68A0027616A757374657220004F666673657414 |
:10A69A00206166726567656C656E20746F7400640C |
:10A6AA006965205370616E6E756E67207061737391 |
:10A6BA007400766F6C7461676520666974730061F3 |
:10A6CA00206C612074656E73696F6E006465207317 |
:10A6DA0070616E6E696E67206A756973742069733A |
:10A6EA002E004C6F77426174205761726E20563A81 |
:10A6FA00004C6F7742617420616C61726D203A0080 |
:10A70A00560046004C004800420044004100470001 |
:10A71A0052004E6900546100526F004B6F00436F44 |
:10A72A00004645484C45523A20446174656E766548 |
:10A73A00726C75737420004552524F523A2044612C |
:10A74A007461206C6F73740070657274652064653F |
:10A75A0020646F6E6E6565730076657262696E64F9 |
:10A76A00696E672076657262726F6B656E20004C47 |
:10A77A0065747A74652062656B616E6E7465004CEF |
:10A78A00617374206B6E6F776E20004465726E6918 |
:10A79A0065726520706F736974696F6E004C6161D0 |
:10A7AA007473742062656B656E646500506F7369BB |
:10A7BA0074696F6E2000706F736974696F6E200020 |
:10A7CA00706F736974696520002045696E737465DA |
:10A7DA006C6C756E67656E2020202020202000207A |
:10A7EA0053657474696E6720202020202020202061 |
:10A7FA00202020200020506172616D65747265739B |
:10A80A00202020202020202020200020496E737440 |
:10A81A00656C6C696E67656E2020202020202020E0 |
:10A82A0000E46E6465726E006368616E6765006C51 |
:10A83A0065206368616E67656D656E740076657222 |
:10A84A00616E646572696E6700616B7469766965C9 |
:10A85A0072656E0061637469766174650061637420 |
:10A86A00697665720061637469766572656E006106 |
:10A87A006B74697669657274006163746976617470 |
:10A88A006564006163746976656500676561637410 |
:10A89A00697665657264002053657474696E672011 |
:10A8AA00782073706569636865726E3F00207374FF |
:10A8BA006F72652073657474696E673F0020526514 |
:10A8CA00676C616765206D61676173696E3F00201F |
:10A8DA00696E7374656C6C2E6F7020746520736C6E |
:10A8EA0061616E3F0047657370656963686572747C |
:10A8FA0020756E640073746F72656420616E640003 |
:10A90A0073746F636B6573206574006F706765732A |
:10A91A006C6167656E20656E004B6F706965726564 |
:10A92A002053657474696E6700636F70792073656C |
:10A93A007474696E677300706172616D65747265B3 |
:10A94A007320646520636F706965006B6F70696559 |
:10A95A00657220696E7374656C2E0020766F6E20A6 |
:10A96A00207820206E616368202079002066726F4B |
:10A97A006D207820746F2079002064657320782018 |
:10A98A0061707265732079002076616E2078206E7E |
:10A99A0061207900766F6E2020206E616368202026 |
:10A9AA00456E64652020204F4B0066726F6D202033 |
:10A9BA00746F20202020656E64202020204F4B00D9 |
:10A9CA0064657320202061707265732066696E2049 |
:10A9DA002020204F4B0076616E2020206E612020BF |
:10A9EA00202065696E646520204F4B005769726BA1 |
:10A9FA006C696368206B6F70696572656E3F00727F |
:10AA0A0065616C6C7920636F70793F007672616959 |
:10AA1A006D656E7420636F7069653F006563687465 |
:10AA2A00206B6F7069653F004B6F706965727420A7 |
:10AA3A00756E6420616B7469766965727400636F00 |
:10AA4A007069656420616E642061637469766174FB |
:10AA5A0065642000636F70696573206574206163A3 |
:10AA6A0074696673004B6F706965EB6E20656E20C2 |
:10AA7A0061637469656600C46E64657265204569C0 |
:10AA8A006E7374656C6C756E67656E20002020208D |
:10AA9A006368616E67652073657474696E67732095 |
:10AAAA002020006D6F646966696572206C65732089 |
:10AABA007265676C6167657300696E7374656C6C47 |
:10AACA00696E67656E2077696A7A6967656E0020C4 |
:10AADA0057E4686C6520506172616D657465722017 |
:10AAEA0020202020002073656C65637420706172D9 |
:10AAFA00616D65746572732020200073656C6563EF |
:10AB0A0074696F6E6E657A20506172616D65742E1C |
:10AB1A000053656C65637465657220506172616D7E |
:10AB2A00657465727320002057E4686C652053656C |
:10AB3A006974652020202020202020200020202049 |
:10AB4A00202073656C65637420706167652020201E |
:10AB5A0020200053656C656374696F6E6E657A2098 |
:10AB6A006C6120706167652000202053656C656305 |
:10AB7A007465657220706167696E6120202000200B |
:10AB8A0057E4686C652053657474696E673A2020CF |
:10AB9A002020202000202073656C65637420736573 |
:10ABAA007474696E6720202020200053656C6563E9 |
:10ABBA0074696F6E6E657A2073657474696E672046 |
:10ABCA0000202053656C6563746565722073657433 |
:10ABDA0074696E6720200020204750532045696E13 |
:10ABEA007374656C6C756E67656E2020002020207A |
:10ABFA00204750532073657474696E677320202050 |
:10AC0A00202000676577E4686C74657320475053A9 |
:10AC1A0020476572E47420200073656C656374656F |
:10AC2A006420475053206465766963652020004795 |
:10AC3A00505320456D70662E65696E736368616C4A |
:10AC4A0074656E3F00726563656976652047505387 |
:10AC5A00206F6E3F202020202020006D6178204840 |
:10AC6A00F6686520202020203A006D617820416C2A |
:10AC7A00746974756465203A006D6178204765735C |
:10AC8A006368772E20203A006D61782053706565DD |
:10AC9A0064202020203A006D617820456E74666534 |
:10ACAA00726E2E203A006D61782044697374616E69 |
:10ACBA006365203A006D696E205370616E6E756E21 |
:10ACCA0067203A006D696E20566F6C746167652063 |
:10ACDA00203A006D6178205A65697420202020206E |
:10ACEA003A006D61782054696D6520202020203A51 |
:10ACFA00006D6178205374726F6D202020203A0015 |
:10AD0A006D61782043757272656E7420203A004531 |
:10AD1A006E742E4B6170617A6974E4743A005573EB |
:10AD2A0065644361706163697479203A004C6F6E9F |
:10AD3A00672E203A004C61742E20203A004E75721C |
:10AD4A00206D6974204E4320212020004F6E6C79BB |
:10AD5A002077697468204E432021004B65696E652F |
:10AD6A0020536574696E67732021212020004E6F7D |
:10AD7A002073657474696E6773207265616421213A |
:10AD8A00004E6F6E20506172616D657472E87321B6 |
:10AD9A002120200048F66865202061757320004153 |
:10ADAA006C74692E206F66662000416C74692E6689 |
:10ADBA00696E69720048F6686520626567722E00DE |
:10ADCA00416C74692E4C696D697400566172696FC1 |
:10ADDA00206175732000566172696F206F66662064 |
:10ADEA0000566172696F2066696E69005661726900 |
:10ADFA006F2048F6686500566172696F20416C746D |
:10AE0A002E0020202020202020202000436172656F |
:10AE1A002046726565004C454431004C4544320079 |
:10AE2A004E61766920206175732020004E61766933 |
:10AE3A0020206F6666202000506F732E2068616C98 |
:10AE4A0074656E00506F732E20486F6C642020006A |
:10AE5A00506F732E2064757265722000436F6D699E |
:10AE6A006E6720486F6D65005265746F7572652054 |
:10AE7A00202020004A757374696572656E0043610B |
:10AE8A006C6962726174650043616C6962726167C0 |
:10AE9A00650053746172742020202000446570613B |
:10AEAA007274202020004265747269656220200055 |
:10AEBA0052756E202020202020004D617263686543 |
:10AECA0072202000466C696567656E202000466C1A |
:10AEDA007920202020202000466F6C6572202020D7 |
:10AEEA0020004C616E64756E672020004C616E64B0 |
:10AEFA00696E672020004170706F6E746572200061 |
:10AF0A00416B6B75206C656572004C6F77204261EE |
:10AF1A00742E20004C6F772042617420200020207C |
:10AF2A004F534420416E7A6569676520536574758D |
:10AF3A007020200020204F53442073637265656E91 |
:10AF4A00207365747570202020004F7574312F327C |
:10AF5A00206E656769657274203A004F7574312FE7 |
:10AF6A003220696E7665727465643A004F75743181 |
:10AF7A002F3220466F726D61743A004F7574312F0B |
:10AF8A003220666F726D61743A006E6F7420696D5B |
:10AF9A00706C656D656E7465643A006D2E20536938 |
:10AFAA006E6B72617465206D2F733A006D2E666147 |
:10AFBA006C6C7370656564206D2F733A005661720C |
:10AFCA00696F6D6574657220426565703A007661D5 |
:10AFDA0072696F6D6574657220626565703A0048C2 |
:10AFEA006F6D65736963687420766F6E204D4B3A96 |
:10AFFA0000686F6D65766965772066726F6D204DA2 |
:10B00A004B3A006D4168205761726E756E67203E3B |
:10B01A00203A006D4168207761726E696E67203E42 |
:10B02A00203A004F534420416E7A6569676576611C |
:10B03A00723A004F53442073637265656E6D6F6494 |
:10B04A00653A004D4B20566F6C742042616C6B65FB |
:10B05A006E3A004D4B20766F6C7420626172677293 |
:10B06A006170683A00426175642057693233322F41 |
:10B07A0042543A0020466F6C6C6F77204D6520531E |
:10B08A006574757020200020202020205265667289 |
:10B09A0065736820203A00476573636877696E6450 |
:10B0AA0069676B6569743A002020202053706565D2 |
:10B0BA00642020202020203A00546F6C6572616E53 |
:10B0CA007A205261646975733A0015008701870115 |
:10B0DA008701870115009D01B301C901DF01150030 |
:10B0EA00F5010B022102370215004D025F027102BF |
:10B0FA008302150095029F02A902B3021500BD0240 |
:10B10A00C702D102DB021500E502F50205031903A5 |
:10B11A00150029033A034F036403150079038F03CB |
:10B12A00A303B6031500CB03E103EE03FA031500EC |
:10B13A000D04230437044B0415005F0475047504D9 |
:10B14A00750415008B049C04AD04BF041500D104DA |
:10B15A00D104D104D1041500E104E104E104E104BD |
:10B16A001500EC04EC04EC04EC041500F804F804F3 |
:10B17A00F804F8041500050505050505050515007B |
:10B18A0012051205120512051500200520052005D5 |
:10B19A00200515002D052D052D052D0515003B054E |
:10B1AA003B053B053B05150048055E0574058A0508 |
:10B1BA001500A005B605B605CC051500E205F8058B |
:10B1CA000E06240615003A065006500650061500CB |
:10B1DA0066067C069206A8061500BE06CE06DE06A0 |
:10B1EA00EE061500FE0604070A07100715001607E3 |
:10B1FA001B071B072007150025072E0737074007DF |
:10B20A0015004907500757075E07150065077807B5 |
:10B21A00860795071500A707A707A707A707150019 |
:10B22A00B807C307CB07D5071500E007E007E00713 |
:10B23A00E0071500EC07EC07EC07EC071500F6072A |
:10B24A00F607F607000815000A0813081C0825085F |
:10B25A0015002E08370840084908150052086308E7 |
:10B26A0076088A0815009E089E089E089E08150002 |
:10B27A00AB08B608C108CD081500D808DE08E408EE |
:10B28A00EA081500F008F608FC0802091500080982 |
:10B29A0008090809080915000C091F09300943099A |
:10B2AA001500580962096C09760915008009960982 |
:10B2BA00AC09C2091500D809EE09040A1A0A1500D0 |
:10B2CA00300A460A5C0A720A1500880A9E0AB40AFB |
:10B2DA00CA0A1500E00AF50A090B1D0B15002B0B0B |
:10B2EA00380B450B520B15005F0B750B810B910B3D |
:10B2FA001500A70BBA0BCD0BDC0B1500EF0B000CDE |
:10B30A000A0C1F0C1500310C470C5A0C6C0C15005A |
:10B31A00810C970CA90CBB0C1500CF0CE50CEF0C9B |
:10B32A00040D1500160D290D350D400D15004E0D95 |
:10B33A00610D6D0D7C0D1500900DA40DCD0BB80D92 |
:10B34A001500CB0DDB0DEA0D1F0C1500000E120EB9 |
:10B35A00240E360E1500480E5E0E740E8A0E150067 |
:10B36A00A00EB00EC30ED40E1500E90EF90E090F89 |
:10B37A00180F15002A0F2A0F2A0F2A0F1500400F3F |
:10B38A00560F6C0F820F1500980FAE0FC40FDA0F0D |
:10B39A001500F00F06101C10321015004810481046 |
:10B3AA004810481015005E106E107C106E101500C3 |
:10B3BA008E10A410BA10D0101500E610FC100B1154 |
:10B3CA0021111500321148115E11741115008911ED |
:10B3DA0089118911891115009F11B511CB11E1113C |
:10B3EA001500F7110D122312391215004F126512AA |
:10B3FA007B1291121500A712BD12C512C7121500B1 |
:10B40A00D312D912D912D3121500DF12DF12E812A1 |
:10B41A00DF121500F112F112F912011315000913C6 |
:10B42A001113111319131500950221132B13351338 |
:10B43A0015003F1350135E137113150083138D13F8 |
:10B44A0096139B131500A413B013BC13C81315004D |
:10B45A00D413E013EC13F8131500041410141C147D |
:10B46A0028141500341440144C145814150064148C |
:10B47A007A149014A6141500BC14CD14DE14EF141B |
:10B48A00150000150B151615221515002915391565 |
:10B49A004A155B1515006B15791587159515150055 |
:10B4AA00A315B115B115B1151500BF15BF15BF15F7 |
:10B4BA00BF151500CE15CE15CE15CE151500DC1507 |
:10B4CA00EC15EC15EC151500FC15FC15FC15FC1516 |
:10B4DA001500061606160616061615001516151672 |
:10B4EA0015161516150024162416241624161500EA |
:10B4FA003316331633163316150042164216421601 |
:10B50A0042161500521664167616881615009A16F3 |
:10B51A00B016BF16CE161500DF16EA16F416031774 |
:10B52A00150015171A171F171517150024172917AD |
:10B53A002E173317150038174E174E174E171500CA |
:10B54A0064177A17BF168B171500DF16EA169D17B0 |
:10B55A0003171500AD17BF17D117E3171500F51715 |
:10B56A000B180B180B18150021182F182F183D1837 |
:10B57A0015004C185C185C185C18150021182F1857 |
:10B58A002F183D1815006C1882189618AA1815005D |
:10B59A00BF18D218DF18EC1815000219021902197F |
:10B5AA001119150020192219241922191500261912 |
:10B5BA0028192A192C191500241924192E192419A5 |
:10B5CA001500301930192A19301915003219321993 |
:10B5DA00351932191500381938193819381915005A |
:10B5EA003B193E193E193E19150041195719681998 |
:10B5FA00791915008F199F19AB19BD191500CC19A6 |
:10B60A00D619D619E0191500E919FF19151A2B1AB6 |
:10B61A001500411A481A4F1A5D1A1500691A741A48 |
:10B62A007D1A851A15008F1A991AA31AAB1A1500D2 |
:10B63A00B71ACD1ADD1AEF1A1500051B151B201BA8 |
:10B64A002B1B1500391B491B571B6B1B15007B1B3A |
:10B65A008C1B991BA81B1500B41BCA1BE01BF61BED |
:10B66A0015000C1C1F1C2C1C3C1C1500481C5E1CC5 |
:10B67A00741C851C1500971CAD1CC31CD91C150015 |
:10B68A00EF1C051D1B1D311D1500471D5D1D731D7A |
:10B69A00891D15009F1DB51DCB1DE11D1500F71D48 |
:10B6AA000D1E0D1E0D1E1500231E391E391E391EB4 |
:10B6BA0015004F1E651E651E651E15007B1E8A1E1F |
:10B6CA008A1E8A1E1500991EA81EA81EA81E1500ED |
:10B6DA00B71EC61EC61EC61E1500D51EE41EE41ED3 |
:10B6EA00E41E1500F31E021F021F021F1500111F80 |
:10B6FA00201F201F201F15002F1F3E1F3E1F3E1F09 |
:10B70A0015004D1F4D1F4D1F4D1F1500551F551F6D |
:10B71A00551F551F15005D1F6C1F6C1F6C1F1500F0 |
:10B72A007B1F8E1FA11F8E1F1500B41FBF1FCA1FAC |
:10B73A00BF1F1500D51FE01FE01FE01F1500EB1FFC |
:10B74A00F61F0120F61F15000C20172017201720BE |
:10B75A001500222022202220222015002C202C2015 |
:10B76A002C202C2015009613961396139613150069 |
:10B77A00362036203620362015003B203B203B2041 |
:10B78A003B20150040204C204C204C20150058200E |
:10B79A0064207020642015007C207C2088207C2076 |
:10B7AA0015002220222022202220150094209E20EB |
:10B7BA00A8209E201500B220B220BC20B22015007D |
:10B7CA00C620D020DA20D0201500E420EE20F82070 |
:10B7DA00EE20150002210C2116210C211500202132 |
:10B7EA002A212A21342115003E2154215421542191 |
:10B7FA0015006A217B217B217B2115008C219B214D |
:10B80A009B219B211500AA21AA21AA21AA21150060 |
:10B81A00BB21CC21CC21CC211500DD21EE21EE214A |
:10B82A00EE211500FF2111221122112215002322D7 |
:10B83A003322332233221500432253225322532226 |
:10B84A001500632273227322732215008522852232 |
:10B85A00852285221500942294229422942215008E |
:10B86A00A722A722A722A7221500B722C822C822E8 |
:0EB87A00C8221500D922D922D922D9220200D3 |
:00000001FF |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/LICENSE.TXT |
---|
0,0 → 1,340 |
GNU GENERAL PUBLIC LICENSE |
Version 2, June 1991 |
Copyright (C) 1989, 1991 Free Software Foundation, Inc. |
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
Everyone is permitted to copy and distribute verbatim copies |
of this license document, but changing it is not allowed. |
Preamble |
The licenses for most software are designed to take away your |
freedom to share and change it. By contrast, the GNU General Public |
License is intended to guarantee your freedom to share and change free |
software--to make sure the software is free for all its users. This |
General Public License applies to most of the Free Software |
Foundation's software and to any other program whose authors commit to |
using it. (Some other Free Software Foundation software is covered by |
the GNU Library General Public License instead.) You can apply it to |
your programs, too. |
When we speak of free software, we are referring to freedom, not |
price. Our General Public Licenses are designed to make sure that you |
have the freedom to distribute copies of free software (and charge for |
this service if you wish), that you receive source code or can get it |
if you want it, that you can change the software or use pieces of it |
in new free programs; and that you know you can do these things. |
To protect your rights, we need to make restrictions that forbid |
anyone to deny you these rights or to ask you to surrender the rights. |
These restrictions translate to certain responsibilities for you if you |
distribute copies of the software, or if you modify it. |
For example, if you distribute copies of such a program, whether |
gratis or for a fee, you must give the recipients all the rights that |
you have. You must make sure that they, too, receive or can get the |
source code. And you must show them these terms so they know their |
rights. |
We protect your rights with two steps: (1) copyright the software, and |
(2) offer you this license which gives you legal permission to copy, |
distribute and/or modify the software. |
Also, for each author's protection and ours, we want to make certain |
that everyone understands that there is no warranty for this free |
software. If the software is modified by someone else and passed on, we |
want its recipients to know that what they have is not the original, so |
that any problems introduced by others will not reflect on the original |
authors' reputations. |
Finally, any free program is threatened constantly by software |
patents. We wish to avoid the danger that redistributors of a free |
program will individually obtain patent licenses, in effect making the |
program proprietary. To prevent this, we have made it clear that any |
patent must be licensed for everyone's free use or not licensed at all. |
The precise terms and conditions for copying, distribution and |
modification follow. |
GNU GENERAL PUBLIC LICENSE |
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION |
0. This License applies to any program or other work which contains |
a notice placed by the copyright holder saying it may be distributed |
under the terms of this General Public License. The "Program", below, |
refers to any such program or work, and a "work based on the Program" |
means either the Program or any derivative work under copyright law: |
that is to say, a work containing the Program or a portion of it, |
either verbatim or with modifications and/or translated into another |
language. (Hereinafter, translation is included without limitation in |
the term "modification".) Each licensee is addressed as "you". |
Activities other than copying, distribution and modification are not |
covered by this License; they are outside its scope. The act of |
running the Program is not restricted, and the output from the Program |
is covered only if its contents constitute a work based on the |
Program (independent of having been made by running the Program). |
Whether that is true depends on what the Program does. |
1. You may copy and distribute verbatim copies of the Program's |
source code as you receive it, in any medium, provided that you |
conspicuously and appropriately publish on each copy an appropriate |
copyright notice and disclaimer of warranty; keep intact all the |
notices that refer to this License and to the absence of any warranty; |
and give any other recipients of the Program a copy of this License |
along with the Program. |
You may charge a fee for the physical act of transferring a copy, and |
you may at your option offer warranty protection in exchange for a fee. |
2. You may modify your copy or copies of the Program or any portion |
of it, thus forming a work based on the Program, and copy and |
distribute such modifications or work under the terms of Section 1 |
above, provided that you also meet all of these conditions: |
a) You must cause the modified files to carry prominent notices |
stating that you changed the files and the date of any change. |
b) You must cause any work that you distribute or publish, that in |
whole or in part contains or is derived from the Program or any |
part thereof, to be licensed as a whole at no charge to all third |
parties under the terms of this License. |
c) If the modified program normally reads commands interactively |
when run, you must cause it, when started running for such |
interactive use in the most ordinary way, to print or display an |
announcement including an appropriate copyright notice and a |
notice that there is no warranty (or else, saying that you provide |
a warranty) and that users may redistribute the program under |
these conditions, and telling the user how to view a copy of this |
License. (Exception: if the Program itself is interactive but |
does not normally print such an announcement, your work based on |
the Program is not required to print an announcement.) |
These requirements apply to the modified work as a whole. If |
identifiable sections of that work are not derived from the Program, |
and can be reasonably considered independent and separate works in |
themselves, then this License, and its terms, do not apply to those |
sections when you distribute them as separate works. But when you |
distribute the same sections as part of a whole which is a work based |
on the Program, the distribution of the whole must be on the terms of |
this License, whose permissions for other licensees extend to the |
entire whole, and thus to each and every part regardless of who wrote it. |
Thus, it is not the intent of this section to claim rights or contest |
your rights to work written entirely by you; rather, the intent is to |
exercise the right to control the distribution of derivative or |
collective works based on the Program. |
In addition, mere aggregation of another work not based on the Program |
with the Program (or with a work based on the Program) on a volume of |
a storage or distribution medium does not bring the other work under |
the scope of this License. |
3. You may copy and distribute the Program (or a work based on it, |
under Section 2) in object code or executable form under the terms of |
Sections 1 and 2 above provided that you also do one of the following: |
a) Accompany it with the complete corresponding machine-readable |
source code, which must be distributed under the terms of Sections |
1 and 2 above on a medium customarily used for software interchange; or, |
b) Accompany it with a written offer, valid for at least three |
years, to give any third party, for a charge no more than your |
cost of physically performing source distribution, a complete |
machine-readable copy of the corresponding source code, to be |
distributed under the terms of Sections 1 and 2 above on a medium |
customarily used for software interchange; or, |
c) Accompany it with the information you received as to the offer |
to distribute corresponding source code. (This alternative is |
allowed only for noncommercial distribution and only if you |
received the program in object code or executable form with such |
an offer, in accord with Subsection b above.) |
The source code for a work means the preferred form of the work for |
making modifications to it. For an executable work, complete source |
code means all the source code for all modules it contains, plus any |
associated interface definition files, plus the scripts used to |
control compilation and installation of the executable. However, as a |
special exception, the source code distributed need not include |
anything that is normally distributed (in either source or binary |
form) with the major components (compiler, kernel, and so on) of the |
operating system on which the executable runs, unless that component |
itself accompanies the executable. |
If distribution of executable or object code is made by offering |
access to copy from a designated place, then offering equivalent |
access to copy the source code from the same place counts as |
distribution of the source code, even though third parties are not |
compelled to copy the source along with the object code. |
4. You may not copy, modify, sublicense, or distribute the Program |
except as expressly provided under this License. Any attempt |
otherwise to copy, modify, sublicense or distribute the Program is |
void, and will automatically terminate your rights under this License. |
However, parties who have received copies, or rights, from you under |
this License will not have their licenses terminated so long as such |
parties remain in full compliance. |
5. You are not required to accept this License, since you have not |
signed it. However, nothing else grants you permission to modify or |
distribute the Program or its derivative works. These actions are |
prohibited by law if you do not accept this License. Therefore, by |
modifying or distributing the Program (or any work based on the |
Program), you indicate your acceptance of this License to do so, and |
all its terms and conditions for copying, distributing or modifying |
the Program or works based on it. |
6. Each time you redistribute the Program (or any work based on the |
Program), the recipient automatically receives a license from the |
original licensor to copy, distribute or modify the Program subject to |
these terms and conditions. You may not impose any further |
restrictions on the recipients' exercise of the rights granted herein. |
You are not responsible for enforcing compliance by third parties to |
this License. |
7. If, as a consequence of a court judgment or allegation of patent |
infringement or for any other reason (not limited to patent issues), |
conditions are imposed on you (whether by court order, agreement or |
otherwise) that contradict the conditions of this License, they do not |
excuse you from the conditions of this License. If you cannot |
distribute so as to satisfy simultaneously your obligations under this |
License and any other pertinent obligations, then as a consequence you |
may not distribute the Program at all. For example, if a patent |
license would not permit royalty-free redistribution of the Program by |
all those who receive copies directly or indirectly through you, then |
the only way you could satisfy both it and this License would be to |
refrain entirely from distribution of the Program. |
If any portion of this section is held invalid or unenforceable under |
any particular circumstance, the balance of the section is intended to |
apply and the section as a whole is intended to apply in other |
circumstances. |
It is not the purpose of this section to induce you to infringe any |
patents or other property right claims or to contest validity of any |
such claims; this section has the sole purpose of protecting the |
integrity of the free software distribution system, which is |
implemented by public license practices. Many people have made |
generous contributions to the wide range of software distributed |
through that system in reliance on consistent application of that |
system; it is up to the author/donor to decide if he or she is willing |
to distribute software through any other system and a licensee cannot |
impose that choice. |
This section is intended to make thoroughly clear what is believed to |
be a consequence of the rest of this License. |
8. If the distribution and/or use of the Program is restricted in |
certain countries either by patents or by copyrighted interfaces, the |
original copyright holder who places the Program under this License |
may add an explicit geographical distribution limitation excluding |
those countries, so that distribution is permitted only in or among |
countries not thus excluded. In such case, this License incorporates |
the limitation as if written in the body of this License. |
9. The Free Software Foundation may publish revised and/or new versions |
of the General Public License from time to time. Such new versions will |
be similar in spirit to the present version, but may differ in detail to |
address new problems or concerns. |
Each version is given a distinguishing version number. If the Program |
specifies a version number of this License which applies to it and "any |
later version", you have the option of following the terms and conditions |
either of that version or of any later version published by the Free |
Software Foundation. If the Program does not specify a version number of |
this License, you may choose any version ever published by the Free Software |
Foundation. |
10. If you wish to incorporate parts of the Program into other free |
programs whose distribution conditions are different, write to the author |
to ask for permission. For software which is copyrighted by the Free |
Software Foundation, write to the Free Software Foundation; we sometimes |
make exceptions for this. Our decision will be guided by the two goals |
of preserving the free status of all derivatives of our free software and |
of promoting the sharing and reuse of software generally. |
NO WARRANTY |
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY |
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN |
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES |
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED |
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS |
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE |
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, |
REPAIR OR CORRECTION. |
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING |
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR |
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, |
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING |
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED |
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY |
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER |
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE |
POSSIBILITY OF SUCH DAMAGES. |
END OF TERMS AND CONDITIONS |
How to Apply These Terms to Your New Programs |
If you develop a new program, and you want it to be of the greatest |
possible use to the public, the best way to achieve this is to make it |
free software which everyone can redistribute and change under these terms. |
To do so, attach the following notices to the program. It is safest |
to attach them to the start of each source file to most effectively |
convey the exclusion of warranty; and each file should have at least |
the "copyright" line and a pointer to where the full notice is found. |
<one line to give the program's name and a brief idea of what it does.> |
Copyright (C) <year> <name of author> |
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 2 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 |
Also add information on how to contact you by electronic and paper mail. |
If the program is interactive, make it output a short notice like this |
when it starts in an interactive mode: |
Gnomovision version 69, Copyright (C) year name of author |
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. |
This is free software, and you are welcome to redistribute it |
under certain conditions; type `show c' for details. |
The hypothetical commands `show w' and `show c' should show the appropriate |
parts of the General Public License. Of course, the commands you use may |
be called something other than `show w' and `show c'; they could even be |
mouse-clicks or menu items--whatever suits your program. |
You should also get your employer (if you work as a programmer) or your |
school, if any, to sign a "copyright disclaimer" for the program, if |
necessary. Here is a sample; alter the names: |
Yoyodyne, Inc., hereby disclaims all copyright interest in the program |
`Gnomovision' (which makes passes at compilers) written by James Hacker. |
<signature of Ty Coon>, 1 April 1989 |
Ty Coon, President of Vice |
This General Public License does not permit incorporating your program into |
proprietary programs. If your program is a subroutine library, you may |
consider it more useful to permit linking proprietary applications with the |
library. If this is what you want to do, use the GNU Library General |
Public License instead of this License. |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/Makefile |
---|
0,0 → 1,418 |
# |
# v1_2 = all versions below 1.3 |
# v1_3 = differend LED Pins, 2nd Uart |
# |
# Version der Software |
Version = 3.6.3a_MartinR |
#// martinR: verschoben |
LANGUAGE = de |
#HWVERSION = v1_2 |
#HWVERSION = v1_3 |
HWVERSION = v3_9 |
ifeq ($(HWVERSION), v1_2) |
MCU = atmega644 |
TARGET = PKT_$(Version)_HW_1_2_$(LANGUAGE) |
endif |
ifeq ($(HWVERSION), v1_3) |
MCU = atmega644p |
TARGET = PKT_$(Version)_HW_1_3_$(LANGUAGE) |
endif |
ifeq ($(HWVERSION), v3_9) |
MCU = atmega1284p |
#MCU = atmega644p |
TARGET = PKT_$(Version)_HW_3_9_$(LANGUAGE) |
endif |
F_CPU = 20000000 |
# FUSE_SETTINGS = -U lfuse:w:0xe6:m -U hfuse:w:0xd9:m -U efuse:w:0xff:m |
# Output format. (can be srec, ihex, binary) |
FORMAT = ihex |
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization. |
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) |
OPT = s |
########################################################################################################## |
# List C source files here. (C dependencies are automatically generated.) |
SRC = main.c menu.c timer.c tools.c twimaster.c uart1.c usart.c motortest.c |
SRC += HAL_HW1_2.c HAL_HW1_3.c HAL_HW3_9.c Wi232.c bluetooth.c connect.c debug.c display.c |
SRC += eeprom.c error.c error_driver.c fifo.c font8x6.c gps.c lcd.c lipo.c osd.c parameter.c servo.c setup.c |
SRC += followme.c tracking.c Font8x8.c messages.c |
SRC += stick.c |
########################################################################################################## |
# List Assembler source files here. |
# Make them always end in a capital .S. Files ending in a lowercase .s |
# will not be considered source files but generated files (assembler |
# output from the compiler), and will be deleted upon "make clean"! |
# 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 = |
# List any extra directories to look for include files here. |
# Each directory must be seperated by a space. |
EXTRAINCDIRS = |
# Optional compiler flags. |
# -g: generate debugging information (for GDB, or for COFF conversion) |
# -O*: optimization level |
# -f...: tuning, see gcc manual and avr-libc documentation |
# -Wall...: warning level |
# -Wa,...: tell GCC to pass this to the assembler. |
# -ahlms: create assembler listing |
CFLAGS = -O$(OPT) |
CFLAGS += -funsigned-char |
CFLAGS += -funsigned-bitfields |
CFLAGS += -fpack-struct |
CFLAGS += -fshort-enums |
CFLAGS += -Wall |
CFLAGS += -Wstrict-prototypes |
CFLAGS += -Wa,-adhlns=$(<:.c=.lst) |
CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) |
# Compiler flag to set the C Standard level. |
# Unremark just one line below to set the language standard to use. |
# c89 = "ANSI" C |
# gnu89 = c89 plus GCC extensions |
# c99 = ISO C99 standard (not yet fully implemented) |
# gnu99 = c99 plus GCC extensions |
#CFLAGS += -std=c89 |
#CFLAGS += -std=gnu89 |
#CFLAGS += -std=c99 |
CFLAGS += -std=gnu99 |
CFLAGS += -DF_CPU=$(F_CPU) |
ifeq ($(HWVERSION), v1_2) |
CFLAGS += -DHWVERSION1_2 |
endif |
ifeq ($(HWVERSION), v1_3) |
CFLAGS += -DHWVERSION1_3 |
endif |
ifeq ($(HWVERSION), v3_9) |
CFLAGS += -DHWVERSION3_9 |
endif |
ifeq ($(LANGUAGE), de) |
CFLAGS += -DLANGUAGE_DE |
endif |
ifeq ($(LANGUAGE), en) |
CFLAGS += -DLANGUAGE_EN |
endif |
ifeq ($(LANGUAGE), fr) |
CFLAGS += -DLANGUAGE_FR |
endif |
# Optional assembler flags. |
# -Wa,...: tell GCC to pass this to the assembler. |
# -ahlms: create listing |
# -gstabs: have the assembler create line number information; note that |
# for use in COFF files, additional information about filenames |
# and function names needs to be present in the assembler source |
# files -- see avr-libc docs [FIXME: not yet described there] |
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs |
# Optional linker flags. |
# -Wl,...: tell GCC to pass this to linker. |
# -Map: create map file |
# --cref: add cross reference to map file |
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref |
# Additional libraries |
# Minimalistic printf version |
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min |
# Floating point printf version (requires -lm below) |
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt |
# -lm = math library |
LDFLAGS += -lm |
##LDFLAGS += -T./linkerfile/avr5.x |
# Programming support using avrdude. Settings and variables. |
# Programming hardware: |
# |
# Type: avrdude -c ? |
# to get a full listing. |
# |
AVRDUDE_PROGRAMMER = STK500v2 |
#falls Ponyser ausgewählt wird, muss sich unsere avrdude-Configdatei im Bin-Verzeichnis des Compilers befinden |
AVRDUDE_PORT = /dev/cu.SLAB_USBtoUART # programmer connected to serial device |
#AVRDUDE_PORT = lpt1 # programmer connected to parallel port |
#AVRDUDE_PORT = usb # programmer connected to USB |
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex |
AVRDUDE_WRITE_FUSE = $(FUSE_SETTINGS) |
AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep |
#avrdude -c avrispv2 -P usb -p m32 -U flash:w:blink.hex |
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) |
#AVRDUDE_FLAGS = -p $(MCU) -c $(AVRDUDE_PROGRAMMER) |
# Uncomment the following if you want avrdude's erase cycle counter. |
# Note that this counter needs to be initialized first using -Yn, |
# see avrdude manual. |
#AVRDUDE_ERASE += -y |
# Uncomment the following if you do /not/ wish a verification to be |
# performed after programming the device. |
AVRDUDE_FLAGS += -V |
# Increase verbosity level. Please use this when submitting bug |
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> |
# to submit bug reports. |
#AVRDUDE_FLAGS += -v -v |
# --------------------------------------------------------------------------- |
# Define directories, if needed. |
#DIRAVR = c:/winavr |
#DIRAVRBIN = $(DIRAVR)/bin |
#DIRAVRUTILS = $(DIRAVR)/utils/bin |
#DIRINC = . |
#DIRLIB = $(DIRAVR)/avr/lib |
# Define programs and commands. |
SHELL = sh |
CC = avr-gcc |
OBJCOPY = avr-objcopy |
OBJDUMP = avr-objdump |
SIZE = avr-size |
# Programming support using avrdude. |
AVRDUDE = avrdude |
REMOVE = rm -f |
COPY = cp |
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex |
##ELFSIZE = $(SIZE) -A $(TARGET).elf |
ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf |
# Define Messages |
# English |
MSG_ERRORS_NONE = Errors: none |
MSG_BEGIN = -------- begin -------- |
MSG_END = -------- end -------- |
MSG_SIZE_BEFORE = Size before: |
MSG_SIZE_AFTER = Size after: |
MSG_COFF = Converting to AVR COFF: |
MSG_EXTENDED_COFF = Converting to AVR Extended COFF: |
MSG_FLASH = Creating load file for Flash: |
MSG_EEPROM = Creating load file for EEPROM: |
MSG_EXTENDED_LISTING = Creating Extended Listing: |
MSG_SYMBOL_TABLE = Creating Symbol Table: |
MSG_LINKING = Linking: |
MSG_COMPILING = Compiling: |
MSG_ASSEMBLING = Assembling: |
MSG_CLEANING = Cleaning project: |
# Define all object files. |
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) |
# Define all listing files. |
LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) |
# Combine all necessary flags and optional flags. |
# Add target processor to flags. |
#ALL_CFLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -I. $(CFLAGS) |
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) |
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) |
# Default target. |
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \ |
$(TARGET).lss $(TARGET).sym sizeafter finished end |
# Eye candy. |
# AVR Studio 3.x does not check make's exit code but relies on |
# the following magic strings to be generated by the compile job. |
begin: |
@echo |
@echo $(MSG_BEGIN) |
finished: |
@echo $(MSG_ERRORS_NONE) |
end: |
@echo $(MSG_END) |
@echo |
# Display size of file. |
sizebefore: |
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi |
sizeafter: |
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi |
# Display compiler version information. |
gccversion : |
@$(CC) --version |
# Convert ELF to COFF for use in debugging / simulating in |
# AVR Studio or VMLAB. |
COFFCONVERT=$(OBJCOPY) --debugging \ |
--change-section-address .data-0x800000 \ |
--change-section-address .bss-0x800000 \ |
--change-section-address .noinit-0x800000 \ |
--change-section-address .eeprom-0x810000 |
coff: $(TARGET).elf |
@echo |
@echo $(MSG_COFF) $(TARGET).cof |
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof |
extcoff: $(TARGET).elf |
@echo |
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof |
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof |
# Program the device. |
flash: $(TARGET).hex |
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) |
eeprom: $(TARGET).eep |
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_EEPROM) |
fuse: |
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FUSE) |
reset: |
$(AVRDUDE) $(AVRDUDE_FLAGS) |
# Create final output files (.hex, .eep) from ELF output file. |
%.hex: %.elf |
@echo |
@echo $(MSG_FLASH) $@ |
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ |
%.eep: %.elf |
@echo |
@echo $(MSG_EEPROM) $@ |
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ |
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@ |
# Create extended listing file from ELF output file. |
%.lss: %.elf |
@echo |
@echo $(MSG_EXTENDED_LISTING) $@ |
$(OBJDUMP) -h -S $< > $@ |
# Create a symbol table from ELF output file. |
%.sym: %.elf |
@echo |
@echo $(MSG_SYMBOL_TABLE) $@ |
avr-nm -n $< > $@ |
# Link: create ELF output file from object files. |
.SECONDARY : $(TARGET).elf |
.PRECIOUS : $(OBJ) |
%.elf: $(OBJ) |
@echo |
@echo $(MSG_LINKING) $@ |
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS) |
# Compile: create object files from C source files. |
%.o : %.c |
@echo |
@echo $(MSG_COMPILING) $< |
$(CC) -c $(ALL_CFLAGS) $< -o $@ |
# Compile: create assembler files from C source files. |
%.s : %.c |
$(CC) -S $(ALL_CFLAGS) $< -o $@ |
# Assemble: create object files from assembler source files. |
%.o : %.S |
@echo |
@echo $(MSG_ASSEMBLING) $< |
$(CC) -c $(ALL_ASFLAGS) $< -o $@ |
# Target: clean project. |
clean: begin clean_list finished end |
clean_list : |
@echo |
@echo $(MSG_CLEANING) |
$(REMOVE) $(TARGET).hex |
$(REMOVE) $(TARGET).eep |
$(REMOVE) $(TARGET).obj |
$(REMOVE) $(TARGET).cof |
$(REMOVE) $(TARGET).elf |
$(REMOVE) $(TARGET).map |
$(REMOVE) $(TARGET).obj |
$(REMOVE) $(TARGET).a90 |
$(REMOVE) $(TARGET).sym |
$(REMOVE) $(TARGET).lnk |
$(REMOVE) $(TARGET).lss |
$(REMOVE) $(OBJ) |
$(REMOVE) $(LST) |
$(REMOVE) $(SRC:.c=.s) |
$(REMOVE) $(SRC:.c=.d) |
@echo |
# Automatically generate C source code dependencies. |
# (Code originally taken from the GNU make user manual and modified |
# (See README.txt Credits).) |
# |
# Note that this will work with sh (bash) and sed that is shipped with WinAVR |
# (see the SHELL variable defined above). |
# This may not work with other shells or other seds. |
# |
%.d: %.c |
@set -e; $(CC) -MM $(ALL_CFLAGS) $< \ |
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \ |
[ -s $@ ] || rm -f $@ |
# Remove the '-' if you want to see the dependency files generated. |
-include $(SRC:.c=.d) |
# Listing of phony targets. |
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff clean clean_list flash eeprom fuse reset |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/PKT_363a_MartinR.pnproj |
---|
0,0 → 1,0 |
<Project name="PKT_363a_MartinR"><File path="bluetooth.c"></File><File path="bluetooth.h"></File><File path="connect.c"></File><File path="connect.h"></File><File path="cpu.h"></File><File path="debug.c"></File><File path="debug.h"></File><File path="display.c"></File><File path="display.h"></File><File path="eeprom.c"></File><File path="eeprom.h"></File><File path="error.c"></File><File path="error.h"></File><File path="error_driver.c"></File><File path="error_driver.h"></File><File path="fifo.c"></File><File path="fifo.h"></File><File path="followme.c"></File><File path="followme.h"></File><File path="font8x6.c"></File><File path="font8x6.h"></File><File path="Font8x8.c"></File><File path="Font8x8.h"></File><File path="gps.c"></File><File path="gps.h"></File><File path="HAL_HW1_2.c"></File><File path="HAL_HW1_2.h"></File><File path="HAL_HW1_3.c"></File><File path="HAL_HW1_3.h"></File><File path="HAL_HW3_9.c"></File><File path="HAL_HW3_9.h"></File><File path="lcd.c"></File><File path="lcd.h"></File><File path="LICENSE.TXT"></File><File path="lipo.c"></File><File path="lipo.h"></File><File path="main.c"></File><File path="main.h"></File><File path="Makefile"></File><File path="menu.c"></File><File path="menu.h"></File><File path="messages.c"></File><File path="messages.h"></File><File path="mk-data-structs.h"></File><File path="motortest.c"></File><File path="motortest.h"></File><File path="osd.c"></File><File path="osd.h"></File><File path="parameter.c"></File><File path="parameter.h"></File><File path="parameter_names.h"></File><File path="servo.c"></File><File path="servo.h"></File><File path="setup.c"></File><File path="setup.h"></File><File path="stick.c"></File><File path="stick.h"></File><File path="timer.c"></File><File path="timer.h"></File><File path="TODO.txt"></File><File path="tools.c"></File><File path="tools.h"></File><File path="tracking.c"></File><File path="tracking.h"></File><File path="twimaster.c"></File><File path="twimaster.h"></File><File path="types.h"></File><File path="uart1.c"></File><File path="uart1.h"></File><File path="usart.c"></File><File path="usart.h"></File><File path="waypoints.c"></File><File path="waypoints.h"></File><File path="Wi232.c"></File><File path="Wi232.h"></File></Project> |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/PKT_363a_MartinR.pnps |
---|
0,0 → 1,0 |
<pd><ViewState><e p="PKT_363a_MartinR" x="true"></e></ViewState></pd> |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/PKT_3_63a_MartinR_HW_1_2_de.map |
---|
0,0 → 1,2505 |
Archive member included because of file (symbol) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3.o) |
lcd.o (__subsf3) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3.o) (__addsf3x) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cmpsf2.o) |
osd.o (__ltsf2) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cos.o) |
lcd.o (cos) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3.o) |
lcd.o (__divsf3) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3.o) (__divsf3x) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixsfsi.o) |
lcd.o (__fixsfsi) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixunssfsi.o) |
HAL_HW1_2.o (__fixunssfsi) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(floatsisf.o) |
HAL_HW1_2.o (__floatsisf) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_cmp.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cmpsf2.o) (__fp_cmp) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_inf.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_inf) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_nan.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_nan) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_pscA.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_pscA) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_pscB.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_pscB) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_rempio2.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cos.o) (__fp_rempio2) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_round.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3.o) (__fp_round) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_sinus.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cos.o) (__fp_sinus) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_split3.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_split3) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_zero.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_zero) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(gesf2.o) |
osd.o (__gtsf2) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3.o) |
HAL_HW1_2.o (__mulsf3) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3.o) (__mulsf3x) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(round.o) |
lcd.o (round) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(sin.o) |
lcd.o (sin) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mintl.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(round.o) (__fp_mintl) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mpack.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(round.o) (__fp_mpack) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powsodd.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_sinus.o) (__fp_powsodd) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powser.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powsodd.o) (__fp_powser) |
C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_mulsi3.o) |
lcd.o (__mulsi3) |
C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodqi4.o) |
usart.o (__udivmodqi4) |
C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodhi4.o) |
timer.o (__udivmodhi4) |
C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodhi4.o) |
motortest.o (__divmodhi4) |
C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodsi4.o) |
main.o (__udivmodsi4) |
C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodsi4.o) |
lcd.o (__divmodsi4) |
C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_exit.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o (exit) |
C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_copy_data.o) |
main.o (__do_copy_data) |
C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_clear_bss.o) |
main.o (__do_clear_bss) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(strcpy_P.o) |
eeprom.o (strcpy_P) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(memset.o) |
motortest.o (memset) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
eeprom.o (__eerd_block) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_dword.o) |
eeprom.o (__eerd_dword) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_word.o) |
eeprom.o (__eerd_word) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
eeprom.o (__eewr_block) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_dword.o) |
eeprom.o (__eewr_dword) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_word.o) |
eeprom.o (__eewr_word) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(itoa.o) |
motortest.o (itoa) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(utoa.o) |
lcd.o (utoa) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(strrev.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(itoa.o) (strrev) |
C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_prologue.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) (__prologue_saves__) |
C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_epilogue.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) (__epilogue_restores__) |
Allocating common symbols |
Common symbol size file |
OSD_ScreenMode 0x1 eeprom.o |
Display_on 0x1 timer.o |
OSD_mAh_Warning 0x2 eeprom.o |
display_page_counter |
0x1 lcd.o |
LastLongitude 0x4 eeprom.o |
rxd_buffer 0xb4 usart.o |
LCD_ORIENTATION 0x1 eeprom.o |
Element 0x1 osd.o |
PKT_Accutyp 0x1 eeprom.o |
U02SV2 0x1 eeprom.o |
timer 0x2 timer.o |
abo_timer 0x2 timer.o |
Lipo_UOffset 0x2 eeprom.o |
BattLowVoltageWarning |
0x1 osd.o |
version 0x2 main.o |
FM_Speed 0x2 eeprom.o |
display_buffer 0x400 lcd.o |
display_buffer_counter |
0x1 lcd.o |
LCD_DisplayMode 0x1 eeprom.o |
OSD_VarioBeep 0x1 eeprom.o |
i2c_state 0x1 motortest.o |
mmode 0x1 motortest.o |
Pre16 0x2 setup.o |
accumulator 0x4 main.o |
mk_param_struct 0x2 main.o |
bt_name 0xb eeprom.o |
LCD_Helligkeit 0x1 eeprom.o |
PKT_StartInfo 0x1 eeprom.o |
PKTWayPointDirectory |
0x23 eeprom.o |
last5pos 0x5b osd.o |
WiTXTO 0x1 eeprom.o |
OSD_active 0x1 osd.o |
EditString 0x15 setup.o |
OSD_InvertOut 0x1 eeprom.o |
MotorTest 0x10 main.o |
OSD_LEDform 0x1 eeprom.o |
OSD_RCErrorbeep 0x1 eeprom.o |
UseBT 0x1 eeprom.o |
WiNetworkGroup 0x1 eeprom.o |
display_mode 0x1 lcd.o |
USBBT 0x1 eeprom.o |
WiUartMTU 0x1 eeprom.o |
BTIsSlave 0x1 eeprom.o |
UseWi 0x1 eeprom.o |
LCD_Orientation 0x1 setup.o |
gps_UsedDevName 0x14 eeprom.o |
buffer 0x1e usart.o |
gps_UsedGPSMouse 0x1 eeprom.o |
v 0x1 motortest.o |
OSD_HomeMKView 0x1 eeprom.o |
rx_byte 0x1 usart.o |
OSD_LipoBar 0x1 eeprom.o |
FM_Radius 0x2 eeprom.o |
PKT_IdleBeep 0x1 eeprom.o |
Flags_GlobalConfig 0x1 osd.o |
ii 0x1 parameter.o |
BTIsSet 0x1 eeprom.o |
line_buffer 0x80 lcd.o |
WiIsSet 0x1 eeprom.o |
Flags_GlobalConfig3 |
0x1 osd.o |
DisplayLanguage 0x1 eeprom.o |
gps_UseGPS 0x1 eeprom.o |
display_buffer_pointer |
0x2 lcd.o |
OSD_Fallspeed 0x1 eeprom.o |
String_Buffer 0x5 timer.o |
Flags_ExtraConfig 0x1 osd.o |
bt_name_len 0x1 setup.o |
lcd_xpos 0x1 lcd.o |
samples 0x2 main.o |
MK_LowBat 0x1 main.o |
LastLatitude 0x4 eeprom.o |
txd_buffer 0x3c usart.o |
WiNetworkMode 0x1 eeprom.o |
BLConfig 0x8 twimaster.o |
Motor 0x60 twimaster.o |
PKT_Baudrate 0x1 eeprom.o |
Debug 0x1 eeprom.o |
bt_pin 0x5 eeprom.o |
WiTXRXChannel 0x1 eeprom.o |
gps_UsedMac 0xe eeprom.o |
Vin 0x4 main.o |
m 0x1 motortest.o |
lcd_ypos 0x1 lcd.o |
naviData 0x2 osd.o |
Pre 0x2 setup.o |
cells 0x1 osd.o |
length_tmp 0x1 setup.o |
PKTWayPoint 0x1f eeprom.o |
LCD_Kontrast 0x1 eeprom.o |
OSD_SendOSD 0x1 eeprom.o |
DisplayTimeout 0x1 eeprom.o |
heading_home 0x2 osd.o |
volt_avg 0x2 main.o |
FM_Refresh 0x2 eeprom.o |
spalte 0x1 setup.o |
Memory Configuration |
Name Origin Length Attributes |
text 0x00000000 0x00020000 xr |
data 0x00800060 0x0000ffa0 rw !x |
eeprom 0x00810000 0x00010000 rw !x |
fuse 0x00820000 0x00000400 rw !x |
lock 0x00830000 0x00000400 rw !x |
signature 0x00840000 0x00000400 rw !x |
*default* 0x00000000 0xffffffff |
Linker script and memory map |
Address of section .data set to 0x800100 |
LOAD C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
LOAD main.o |
LOAD menu.o |
LOAD timer.o |
LOAD tools.o |
LOAD twimaster.o |
LOAD uart1.o |
LOAD usart.o |
LOAD motortest.o |
LOAD HAL_HW1_2.o |
LOAD HAL_HW1_3.o |
LOAD HAL_HW3_9.o |
LOAD Wi232.o |
LOAD bluetooth.o |
LOAD connect.o |
LOAD debug.o |
LOAD display.o |
LOAD eeprom.o |
LOAD error.o |
LOAD error_driver.o |
LOAD fifo.o |
LOAD font8x6.o |
LOAD gps.o |
LOAD lcd.o |
LOAD lipo.o |
LOAD osd.o |
LOAD parameter.o |
LOAD servo.o |
LOAD setup.o |
LOAD followme.o |
LOAD tracking.o |
LOAD Font8x8.o |
LOAD messages.o |
LOAD C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a |
LOAD C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a |
LOAD C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a |
LOAD C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a |
.hash |
*(.hash) |
.dynsym |
*(.dynsym) |
.dynstr |
*(.dynstr) |
.gnu.version |
*(.gnu.version) |
.gnu.version_d |
*(.gnu.version_d) |
.gnu.version_r |
*(.gnu.version_r) |
.rel.init |
*(.rel.init) |
.rela.init |
*(.rela.init) |
.rel.text |
*(.rel.text) |
*(.rel.text.*) |
*(.rel.gnu.linkonce.t*) |
.rela.text |
*(.rela.text) |
*(.rela.text.*) |
*(.rela.gnu.linkonce.t*) |
.rel.fini |
*(.rel.fini) |
.rela.fini |
*(.rela.fini) |
.rel.rodata |
*(.rel.rodata) |
*(.rel.rodata.*) |
*(.rel.gnu.linkonce.r*) |
.rela.rodata |
*(.rela.rodata) |
*(.rela.rodata.*) |
*(.rela.gnu.linkonce.r*) |
.rel.data |
*(.rel.data) |
*(.rel.data.*) |
*(.rel.gnu.linkonce.d*) |
.rela.data |
*(.rela.data) |
*(.rela.data.*) |
*(.rela.gnu.linkonce.d*) |
.rel.ctors |
*(.rel.ctors) |
.rela.ctors |
*(.rela.ctors) |
.rel.dtors |
*(.rel.dtors) |
.rela.dtors |
*(.rela.dtors) |
.rel.got |
*(.rel.got) |
.rela.got |
*(.rela.got) |
.rel.bss |
*(.rel.bss) |
.rela.bss |
*(.rela.bss) |
.rel.plt |
*(.rel.plt) |
.rela.plt |
*(.rela.plt) |
.text 0x00000000 0x11c82 |
*(.vectors) |
.vectors 0x00000000 0x70 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
0x00000000 __vectors |
0x00000000 __vector_default |
*(.vectors) |
*(.progmem.gcc*) |
.progmem.gcc_sw_table |
0x00000070 0x34 osd.o |
.progmem.gcc_fplib |
0x000000a4 0x1e C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_sinus.o) |
*(.progmem*) |
.progmem.data 0x000000c2 0x24 main.o |
.progmem.data 0x000000e6 0x6c8 menu.o |
0x0000047c param_menuitems_nc |
0x0000035c param_menuitems_fc |
0x000001ac param_menuitems_no |
0x000000e6 param_copyright |
.progmem.data 0x000007ae 0x1f2 tools.o |
0x000007ae tools_menuitems_pkt |
.progmem.data 0x000009a0 0xe6 motortest.o |
.progmem.data 0x00000a86 0xc3 display.o |
.progmem.data 0x00000b49 0x66 eeprom.o |
.progmem.data 0x00000baf 0x300 font8x6.o |
0x00000baf font8x6 |
.progmem.data 0x00000eaf 0x26 lcd.o |
.progmem.data 0x00000ed5 0xb9 osd.o |
0x00000ed5 directions_p |
0x00000eee str_SW |
0x00000efd rose |
0x00000ef1 str_S |
0x00000ee8 str_NW |
0x00000efa str_NE |
0x00000ef4 str_SE |
0x00000ee5 str_N |
0x00000eeb str_W |
0x00000ef7 str_E |
.progmem.data 0x00000f8e 0x2d2c parameter.o |
0x00003887 param_pages |
0x00000f8e param_items_rx |
0x00001027 param_config |
0x000014e7 param_names |
.progmem.data 0x00003cba 0x111c setup.o |
0x00003f8a param_menuitems_FOLLOWME |
0x000044e2 param_menuitems_wi |
0x0000413a param_menuitems_GPS |
0x0000476a param_menuitems_lcd |
0x0000437a param_menuitems_bt |
0x00003cba param_menuitems_OSD |
0x000049aa param_menuitems_pkt |
0x000042ea param_menuitems_Accu |
.progmem.data 0x00004dd6 0x34 followme.o |
.progmem.data 0x00004e0a 0x800 Font8x8.o |
0x00004e0a Font8x8 |
0x0000560a . = ALIGN (0x2) |
0x0000560a __trampolines_start = . |
*(.trampolines) |
.trampolines 0x0000560a 0x0 linker stubs |
*(.trampolines*) |
0x0000560a __trampolines_end = . |
*(.jumptables) |
*(.jumptables*) |
*(.lowtext) |
*(.lowtext*) |
0x0000560a __ctors_start = . |
*(.ctors) |
0x0000560a __ctors_end = . |
0x0000560a __dtors_start = . |
*(.dtors) |
0x0000560a __dtors_end = . |
SORT(*)(.ctors) |
SORT(*)(.dtors) |
*(.init0) |
.init0 0x0000560a 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
0x0000560a __init |
*(.init0) |
*(.init1) |
.init1 0x0000560a 0x12 main.o |
0x0000560a wdt_init |
*(.init1) |
*(.init2) |
.init2 0x0000561c 0xc C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
*(.init2) |
*(.init3) |
*(.init3) |
*(.init4) |
.init4 0x00005628 0x16 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_copy_data.o) |
0x00005628 __do_copy_data |
.init4 0x0000563e 0x10 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_clear_bss.o) |
0x0000563e __do_clear_bss |
*(.init4) |
*(.init5) |
*(.init5) |
*(.init6) |
*(.init6) |
*(.init7) |
*(.init7) |
*(.init8) |
*(.init8) |
*(.init9) |
.init9 0x0000564e 0x8 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
*(.init9) |
*(.text) |
.text 0x00005656 0x4 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
0x00005656 __vector_22 |
0x00005656 __vector_1 |
0x00005656 __vector_24 |
0x00005656 __vector_12 |
0x00005656 __bad_interrupt |
0x00005656 __vector_6 |
0x00005656 __vector_3 |
0x00005656 __vector_23 |
0x00005656 __vector_25 |
0x00005656 __vector_11 |
0x00005656 __vector_13 |
0x00005656 __vector_17 |
0x00005656 __vector_19 |
0x00005656 __vector_7 |
0x00005656 __vector_27 |
0x00005656 __vector_5 |
0x00005656 __vector_4 |
0x00005656 __vector_2 |
0x00005656 __vector_21 |
0x00005656 __vector_15 |
0x00005656 __vector_8 |
0x00005656 __vector_14 |
0x00005656 __vector_18 |
.text 0x0000565a 0x688 main.o |
0x0000565a main |
.text 0x00005ce2 0x7c6 menu.o |
0x00005ce2 menu_set_cursor |
0x00005e40 menu_choose3 |
0x00005d96 menu_choose2 |
0x00005f2a Show_Error_HW |
0x00005d0c menu_choose |
0x000060c4 main_menu |
0x000063ee Update_PKT |
0x00005f6a Show_Version |
.text 0x000064a8 0x4a2 timer.o |
0x000068ea get_key_long |
0x000064e2 Timer2_Init |
0x00006860 SetDelay |
0x0000692c get_key_long_rpt_sp |
0x000068d4 get_key_rpt |
0x00006872 CheckDelay |
0x0000688a Delay_ms |
0x00006908 get_key_long_rpt |
0x0000650a __vector_9 |
0x000068ba get_key_short |
0x0000655e set_beep |
0x000068a4 get_key_press |
0x000064a8 Timer1_Init |
0x00006524 __vector_10 |
0x000065be __vector_16 |
0x0000653e Timer0_Init |
.text 0x0000694a 0x260 tools.o |
0x0000694a PKT_Tools |
0x00006ae0 PC_Fast_Connect |
0x00006ba8 Test_HB |
.text 0x00006baa 0x7d0 twimaster.o |
0x00006c18 I2C_Reset |
0x00006bcc I2C_Init |
0x00006baa RAM_Checksum |
0x00007228 I2C_WriteBLConfig |
0x00007374 I2C_ReadBLConfig |
0x00006c5c __vector_26 |
.text 0x0000737a 0x0 uart1.o |
.text 0x0000737a 0x920 usart.o |
0x0000770e USART_putc |
0x000076ee USART_DisableTXD |
0x00007b36 SwitchToFC |
0x0000771e USART_puts |
0x00007686 USART_Init |
0x00007b1c SwitchToWi232 |
0x00007c24 SwitchToGPS |
0x00007bae SwitchToMAG |
0x00007988 USART_request_mk_data |
0x00007a06 Decode64 |
0x000075ce USART_getc |
0x00007628 uart_getc_nb |
0x0000773c USART_puts_p |
0x000076fe USART_EnableTXD |
0x00007762 SendOutData |
0x0000737a __vector_20 |
0x00007ada SwitchToNC |
.text 0x00007c9a 0x9c0 motortest.o |
0x00007eee motor_test |
0x00007c9a SendMotorData |
0x00007cf2 Search_BL |
0x00007e8c motor |
.text 0x0000865a 0xae HAL_HW1_2.o |
0x0000865a set_D_LIGHT |
0x00008662 InitHWPorts |
0x00008700 clr_D_LIGHT |
.text 0x00008708 0x0 HAL_HW1_3.o |
.text 0x00008708 0x0 HAL_HW3_9.o |
.text 0x00008708 0x0 Wi232.o |
.text 0x00008708 0x0 bluetooth.o |
.text 0x00008708 0x0 connect.o |
.text 0x00008708 0x0 debug.o |
.text 0x00008708 0x278 display.o |
0x00008708 display_data |
.text 0x00008980 0xf1a eeprom.o |
0x00008a3e ReadLastPosition |
0x00008aba WriteParameter |
0x000089f4 WriteBTSlaveFlag |
0x00008f94 Delete_EEPROM |
0x00008a1a WriteBTMasterFlag |
0x000089a8 WriteWiInitFlag |
0x0000961e EEWayPointList_Clear |
0x000089ce WriteBTInitFlag |
0x000091fc ReadParameter |
0x00008a80 WriteLastPosition |
.text 0x0000989a 0x30 error.o |
0x000098b6 send_pgm |
0x0000989a _send_msg |
.text 0x000098ca 0x0 error_driver.o |
.text 0x000098ca 0x2ba fifo.o |
0x000098de fifo_getcount |
0x00009aa2 fifo_search |
0x00009b3a fifo_strstr_pgm |
0x00009918 fifo_read |
0x000098ca fifo_init |
0x00009b2e fifo_cmp_pgm |
0x000098e6 fifo_is_empty |
0x00009970 fifo_write |
0x000098fc fifo_is_full |
0x000099be fifo_clear |
.text 0x00009b84 0x0 font8x6.o |
.text 0x00009b84 0x0 gps.o |
.text 0x00009b84 0x1dc0 lcd.o |
0x00009ba0 lcd_cls |
0x0000a6aa lcd_puts_at |
0x0000a5b6 lcd_print_at |
0x00009c06 wait_1ms |
0x00009ef2 lcd_plot |
0x00009b84 send_byte |
0x0000b180 lcd_print_hex_at |
0x0000b668 write_ndigit_number_s_10th |
0x0000a698 lcd_printpns_at |
0x0000a54c print_display_at |
0x0000a7c2 lcd_circle |
0x00009f84 lcd_line |
0x0000a358 lcd_putc |
0x00009ed8 new_line |
0x0000a2e6 lcd_printpj |
0x00009e66 paste_line |
0x0000a18e lcd_putc_jeti |
0x0000b49a write_ndigit_number_u_10th |
0x0000a346 lcd_printpj_at |
0x0000a628 lcd_printp_at |
0x00009df4 copy_line |
0x0000aa3c lcd_circ_line |
0x0000b7c0 write_time |
0x0000b170 hdigit |
0x0000b244 lcd_write_number_u |
0x0000a6e4 lcd_cls_line |
0x0000a55c lcd_print |
0x0000b2a4 lcd_write_number_u_at |
0x0000b1d4 lcd_print_hex |
0x00009d8a scroll |
0x0000a914 lcd_fcircle |
0x0000a50c print_display |
0x0000a63a lcd_printpns |
0x00009d40 set_adress |
0x00009c3a LCD_Init |
0x0000b830 write_gps_pos |
0x0000a10a lcd_frect |
0x00009c10 wait_ms |
0x0000b07e lcd_ecirc_line |
0x0000accc lcd_ellipse |
0x0000b098 lcd_view_font |
0x0000b3a8 write_ndigit_number_s |
0x0000b06c lcd_ecircle |
0x0000b5f2 write_ndigit_number_u_100th |
0x0000a72e lcd_rect |
0x0000b2b4 write_ndigit_number_u |
0x00009b92 lcd_command |
0x0000ab86 lcd_ellipse_line |
0x0000a5c8 lcd_printp |
.text 0x0000b944 0x0 lipo.o |
.text 0x0000b944 0x2680 osd.o |
0x0000c72e lcd_o_circle |
0x0000b9d2 heading_conv |
0x0000bcf6 draw_homesymbol |
0x0000b944 CheckMKLipo |
0x0000bdce draw_targetsymbol |
0x0000d4d6 osd |
0x0000c09a print_position |
0x0000ba46 draw_compass |
0x0000c790 lcd_o_circ_line |
0x0000c7dc OSD_Screen_Element |
0x0000c448 OSD_Timeout |
0x0000be66 print_statistics |
0x0000ba94 draw_variometer |
0x0000c27c Show_LastPosition |
.text 0x0000dfc4 0x1a52 parameter.o |
0x0000f44a load_setting |
0x0000f530 display_settings_menu |
0x0000f794 edit_parameter |
0x0000f5f2 copy_setting |
0x0000dfc4 display_section_menu |
0x0000e13e display_param_menu |
0x0000f358 write_setting |
0x0000e77c edit_param |
.text 0x0000fa16 0x2 servo.o |
0x0000fa16 servo_test |
.text 0x0000fa18 0x1422 setup.o |
0x0000fa18 Show_Error_HW12 |
0x0000fb5e Edit_Int_Value |
0x0000ff5c Edit_Baudrate |
0x000109c2 Display_Setup |
0x0000fe6a Edit_YesNo |
0x0001095a Reset_EEprom |
0x000103d6 Edit_DisplayMode |
0x00010692 Edit_DisplayHelligkeit |
0x0000fd78 Edit_OnOff |
0x0000fa4c Edit_Int10th_Value |
0x00010134 Edit_Language |
0x0000fc68 Edit_Int16_Value |
0x00010c66 PKT_Setup |
0x000104e6 Edit_DisplayKontrast |
0x000102be Edit_Orientation |
.text 0x00010e3a 0x46a followme.o |
0x00010e3a FollowMe |
.text 0x000112a4 0x0 tracking.o |
.text 0x000112a4 0x0 Font8x8.o |
.text 0x000112a4 0x62 messages.o |
0x000112a4 strGet |
0x000112c8 Test_Language |
.text 0x00011306 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cmpsf2.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cos.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3x.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixsfsi.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixunssfsi.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(floatsisf.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_cmp.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_inf.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_nan.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_pscA.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_pscB.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_rempio2.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_round.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_sinus.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_split3.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_zero.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(gesf2.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3x.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(round.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(sin.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mintl.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mpack.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powsodd.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powser.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_mulsi3.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodqi4.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodhi4.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodhi4.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodsi4.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodsi4.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_exit.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_copy_data.o) |
.text 0x00011306 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_clear_bss.o) |
.text 0x00011306 0xe C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(strcpy_P.o) |
0x00011306 strcpy_P |
.text 0x00011314 0xe C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(memset.o) |
0x00011314 memset |
.text 0x00011322 0x4a C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
0x00011322 __eerd_block |
.text 0x0001136c 0x4e C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_dword.o) |
0x0001136c __eerd_dword |
.text 0x000113ba 0x30 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_word.o) |
0x000113ba __eerd_word |
.text 0x000113ea 0x44 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
0x000113ea __eewr_block |
.text 0x0001142e 0x4e C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_dword.o) |
0x0001142e __eewr_dword |
.text 0x0001147c 0x32 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_word.o) |
0x0001147c __eewr_word |
.text 0x000114ae 0x42 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(itoa.o) |
0x000114ae itoa |
.text 0x000114f0 0x2c C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(utoa.o) |
0x000114f0 utoa |
.text 0x0001151c 0x20 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(strrev.o) |
0x0001151c strrev |
.text 0x0001153c 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_prologue.o) |
.text 0x0001153c 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_epilogue.o) |
0x0001153c . = ALIGN (0x2) |
*(.text.*) |
.text.fplib 0x0001153c 0xa C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3.o) |
0x0001153c __subsf3 |
0x0001153e __addsf3 |
.text.fplib 0x00011546 0xc0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) |
0x00011560 __addsf3x |
.text.fplib 0x00011606 0x8 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cmpsf2.o) |
0x00011606 __lesf2 |
0x00011606 __nesf2 |
0x00011606 __eqsf2 |
0x00011606 __cmpsf2 |
0x00011606 __ltsf2 |
.text.fplib 0x0001160e 0x6 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cos.o) |
0x0001160e cos |
.text.fplib 0x00011614 0x4 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3.o) |
0x00011614 __divsf3 |
.text.fplib 0x00011618 0xcc C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3x.o) |
0x0001162e __divsf3x |
0x00011632 __divsf3_pse |
.text.fplib 0x000116e4 0xa C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixsfsi.o) |
0x000116e4 __fixsfsi |
.text.fplib 0x000116ee 0x58 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixunssfsi.o) |
0x000116ee __fixunssfsi |
.text.fplib 0x00011746 0x7a C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(floatsisf.o) |
0x0001174a __floatsisf |
0x00011746 __floatunsisf |
.text.fplib 0x000117c0 0x48 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_cmp.o) |
0x000117c0 __fp_cmp |
.text.fplib 0x00011808 0xc C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_inf.o) |
0x00011808 __fp_inf |
.text.fplib 0x00011814 0x6 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_nan.o) |
0x00011814 __fp_nan |
.text.fplib 0x0001181a 0xe C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_pscA.o) |
0x0001181a __fp_pscA |
.text.fplib 0x00011828 0xe C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_pscB.o) |
0x00011828 __fp_pscB |
.text.fplib 0x00011836 0x50 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_rempio2.o) |
0x00011838 __fp_rempio2 |
.text.fplib 0x00011886 0x22 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_round.o) |
0x00011886 __fp_round |
.text.fplib 0x000118a8 0x22 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_sinus.o) |
0x000118a8 __fp_sinus |
.text.fplib 0x000118ca 0x44 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_split3.o) |
0x000118ca __fp_split3 |
0x000118da __fp_splitA |
.text.fplib 0x0001190e 0xe C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_zero.o) |
0x0001190e __fp_zero |
0x00011910 __fp_szero |
.text.fplib 0x0001191c 0x8 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(gesf2.o) |
0x0001191c __gtsf2 |
0x0001191c __gesf2 |
.text.fplib 0x00011924 0x4 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3.o) |
0x00011924 __mulsf3 |
.text.fplib 0x00011928 0xc2 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3x.o) |
0x00011940 __mulsf3_pse |
0x0001193c __mulsf3x |
.text.fplib 0x000119ea 0x40 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(round.o) |
0x000119ea round |
.text.fplib 0x00011a2a 0xc C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(sin.o) |
0x00011a2a sin |
.text.fplib 0x00011a36 0x36 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mintl.o) |
0x00011a36 __fp_mintl |
.text.fplib 0x00011a6c 0x1c C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mpack.o) |
0x00011a70 __fp_mpack_finite |
0x00011a6c __fp_mpack |
.text.fplib 0x00011a88 0x22 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powsodd.o) |
0x00011a88 __fp_powsodd |
.text.fplib 0x00011aaa 0x4a C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powser.o) |
0x00011aaa __fp_powser |
.text.libgcc 0x00011af4 0x3e C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_mulsi3.o) |
0x00011af4 __mulsi3 |
.text.libgcc 0x00011b32 0x18 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodqi4.o) |
0x00011b32 __udivmodqi4 |
.text.libgcc 0x00011b4a 0x28 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodhi4.o) |
0x00011b4a __udivmodhi4 |
.text.libgcc 0x00011b72 0x26 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodhi4.o) |
0x00011b72 __divmodhi4 |
0x00011b72 _div |
.text.libgcc 0x00011b98 0x44 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodsi4.o) |
0x00011b98 __udivmodsi4 |
.text.libgcc 0x00011bdc 0x36 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodsi4.o) |
0x00011bdc __divmodsi4 |
.text.libgcc 0x00011c12 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_exit.o) |
.text.libgcc 0x00011c12 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_copy_data.o) |
.text.libgcc 0x00011c12 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_clear_bss.o) |
.text.libgcc 0x00011c12 0x38 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_prologue.o) |
0x00011c12 __prologue_saves__ |
.text.libgcc 0x00011c4a 0x36 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_epilogue.o) |
0x00011c4a __epilogue_restores__ |
0x00011c80 . = ALIGN (0x2) |
*(.fini9) |
.fini9 0x00011c80 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_exit.o) |
0x00011c80 exit |
0x00011c80 _exit |
*(.fini9) |
*(.fini8) |
*(.fini8) |
*(.fini7) |
*(.fini7) |
*(.fini6) |
*(.fini6) |
*(.fini5) |
*(.fini5) |
*(.fini4) |
*(.fini4) |
*(.fini3) |
*(.fini3) |
*(.fini2) |
*(.fini2) |
*(.fini1) |
*(.fini1) |
*(.fini0) |
.fini0 0x00011c80 0x2 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_exit.o) |
*(.fini0) |
0x00011c82 _etext = . |
.data 0x00800100 0x2982 load address 0x00011c82 |
0x00800100 PROVIDE (__data_start, .) |
*(.data) |
.data 0x00800100 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
.data 0x00800100 0x0 main.o |
.data 0x00800100 0x0 menu.o |
.data 0x00800100 0x7 timer.o |
0x00800104 WarnTime |
0x00800100 BeepMuster |
0x00800102 PoffTime |
.data 0x00800107 0x0 tools.o |
.data 0x00800107 0x3 twimaster.o |
0x00800107 RequiredMotors |
0x00800108 I2CTimeout |
.data 0x0080010a 0x0 uart1.o |
.data 0x0080010a 0x1 usart.o |
0x0080010a txd_complete |
.data 0x0080010b 0x5a motortest.o |
.data 0x00800165 0x0 HAL_HW1_2.o |
.data 0x00800165 0x0 HAL_HW1_3.o |
.data 0x00800165 0x0 HAL_HW3_9.o |
.data 0x00800165 0x0 Wi232.o |
.data 0x00800165 0x0 bluetooth.o |
.data 0x00800165 0x0 connect.o |
.data 0x00800165 0x0 debug.o |
.data 0x00800165 0x0 display.o |
.data 0x00800165 0x0 eeprom.o |
.data 0x00800165 0x0 error.o |
.data 0x00800165 0x0 error_driver.o |
.data 0x00800165 0x0 fifo.o |
.data 0x00800165 0x0 font8x6.o |
.data 0x00800165 0x0 gps.o |
.data 0x00800165 0x0 lcd.o |
.data 0x00800165 0x0 lipo.o |
.data 0x00800165 0x6 osd.o |
0x0080016a min_UBat |
0x00800165 Vario_Threshold_Value |
0x00800169 last_UBat |
0x00800167 Vario_Beep_Up_Interval |
0x00800168 last_RC_Quality |
0x00800166 Vario_Beep_Down_Interval |
.data 0x0080016b 0x2 parameter.o |
0x0080016c target_pos |
0x0080016b target_pos2 |
.data 0x0080016d 0x0 servo.o |
.data 0x0080016d 0x0 setup.o |
.data 0x0080016d 0x0 followme.o |
.data 0x0080016d 0x0 tracking.o |
.data 0x0080016d 0x0 Font8x8.o |
.data 0x0080016d 0x2915 messages.o |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cmpsf2.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cos.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3x.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixsfsi.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixunssfsi.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(floatsisf.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_cmp.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_inf.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_nan.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_pscA.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_pscB.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_rempio2.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_round.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_sinus.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_split3.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_zero.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(gesf2.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3x.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(round.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(sin.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mintl.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mpack.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powsodd.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powser.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_mulsi3.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodqi4.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodhi4.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodhi4.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodsi4.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodsi4.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_exit.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_copy_data.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_clear_bss.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(strcpy_P.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(memset.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_dword.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_word.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_dword.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_word.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(itoa.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(utoa.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(strrev.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_prologue.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_epilogue.o) |
*(.data*) |
*(.rodata) |
*(.rodata*) |
*(.gnu.linkonce.d*) |
0x00802a82 . = ALIGN (0x2) |
0x00802a82 _edata = . |
0x00802a82 PROVIDE (__data_end, .) |
.bss 0x00802a82 0x800 |
0x00802a82 PROVIDE (__bss_start, .) |
*(.bss) |
.bss 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
.bss 0x00802a82 0x3 main.o |
0x00802a84 mode |
0x00802a82 current_hardware |
0x00802a83 hardware |
.bss 0x00802a85 0x0 menu.o |
.bss 0x00802a85 0x1e timer.o |
0x00802a8d WarnCount |
0x00802a8f IdleTimer |
0x00802a93 repeat_speed |
0x00802a89 BeepTime |
0x00802a96 key_rpt |
0x00802a85 CountMilliseconds |
0x00802a94 key_rpts |
0x00802a95 key_lrpt |
0x00802a87 BeepPrio |
0x00802a98 key_press |
0x00802a8b WarnToggle |
0x00802a97 key_long |
0x00802a91 DisplayTime |
0x00802a99 key_state |
.bss 0x00802aa3 0x0 tools.o |
.bss 0x00802aa3 0x11 twimaster.o |
0x00802aac motor_write |
0x00802aa7 BLFlags |
0x00802aae twi_state |
0x00802aa9 MissingMotor |
0x00802aa8 MotorenEin |
0x00802aab motor_read |
0x00802aad dac_channel |
0x00802aaa I2C_TransferActive |
0x00802aa5 BLConfig_WriteMask |
0x00802aa3 BLConfig_ReadMask |
.bss 0x00802ab4 0x0 uart1.o |
.bss 0x00802ab4 0x51 usart.o |
0x00802abc ReceivedBytes |
0x00802abd rxd_buffer_locked |
0x00802ab7 stat_crc_error |
0x00802aba pRxData |
0x00802ab9 RxDataLen |
0x00802ab5 stat_overflow_error |
0x00802ab4 rxFlag |
.bss 0x00802b05 0x1 motortest.o |
0x00802b05 motor_addr |
.bss 0x00802b06 0x0 HAL_HW1_2.o |
.bss 0x00802b06 0x0 HAL_HW1_3.o |
.bss 0x00802b06 0x0 HAL_HW3_9.o |
.bss 0x00802b06 0x0 Wi232.o |
.bss 0x00802b06 0x0 bluetooth.o |
.bss 0x00802b06 0x0 connect.o |
.bss 0x00802b06 0x0 debug.o |
.bss 0x00802b06 0x0 display.o |
.bss 0x00802b06 0x0 eeprom.o |
.bss 0x00802b06 0x0 error.o |
.bss 0x00802b06 0x0 error_driver.o |
.bss 0x00802b06 0x0 fifo.o |
.bss 0x00802b06 0x0 font8x6.o |
.bss 0x00802b06 0x0 gps.o |
.bss 0x00802b06 0x0 lcd.o |
.bss 0x00802b06 0x0 lipo.o |
.bss 0x00802b06 0x19 osd.o |
0x00802b09 COSD_FLAGS2 |
0x00802b07 CellIsChecked |
0x00802b0a NextWP |
0x00802b0b OldWP |
0x00802b13 max_Current |
0x00802b1d old_hh |
0x00802b0e Vario_Beep_Up |
0x00802b11 max_Capacity |
0x00802b0f ftimer |
0x00802b19 max_GroundSpeed |
0x00802b06 AkkuWarnThreshold |
0x00802b0d Vario_Beep_Down |
0x00802b1b max_Altimeter |
0x00802b08 error |
0x00802b17 max_Distance |
0x00802b0c Vario_Threshold |
0x00802b15 max_FlyingTime |
.bss 0x00802b1f 0x6 parameter.o |
0x00802b21 pmode |
0x00802b22 offset2 |
0x00802b1f changes |
0x00802b20 setting |
0x00802b24 offset |
0x00802b23 dmode |
.bss 0x00802b25 0x0 servo.o |
.bss 0x00802b25 0x3 setup.o |
0x00802b25 PKT_Change |
0x00802b26 LCD_Change |
0x00802b27 edit |
.bss 0x00802b28 0x1 followme.o |
0x00802b28 FM_error |
.bss 0x00802b29 0x0 tracking.o |
.bss 0x00802b29 0x0 Font8x8.o |
.bss 0x00802b29 0x0 messages.o |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cmpsf2.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cos.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3x.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixsfsi.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixunssfsi.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(floatsisf.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_cmp.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_inf.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_nan.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_pscA.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_pscB.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_rempio2.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_round.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_sinus.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_split3.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_zero.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(gesf2.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3x.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(round.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(sin.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mintl.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mpack.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powsodd.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powser.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_mulsi3.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodqi4.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodhi4.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodhi4.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodsi4.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodsi4.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_exit.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_copy_data.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_clear_bss.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(strcpy_P.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(memset.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_dword.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_word.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_dword.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_word.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(itoa.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(utoa.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(strrev.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_prologue.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_epilogue.o) |
*(.bss*) |
*(COMMON) |
COMMON 0x00802b29 0x21 main.o |
0x00802b29 version |
0x00802b2b accumulator |
0x00802b2f mk_param_struct |
0x00802b31 MotorTest |
0x00802b41 samples |
0x00802b43 MK_LowBat |
0x00802b44 Vin |
0x00802b48 volt_avg |
COMMON 0x00802b4a 0xa timer.o |
0x00802b4a Display_on |
0x00802b4b timer |
0x00802b4d abo_timer |
0x00802b4f String_Buffer |
COMMON 0x00802b54 0x68 twimaster.o |
0x00802b54 BLConfig |
0x00802b5c Motor |
COMMON 0x00802bbc 0x10f usart.o |
0x00802bbc rxd_buffer |
0x00802c70 buffer |
0x00802c8e rx_byte |
0x00802c8f txd_buffer |
COMMON 0x00802ccb 0x4 motortest.o |
0x00802ccb i2c_state |
0x00802ccc mmode |
0x00802ccd v |
0x00802cce m |
COMMON 0x00802ccf 0xa8 eeprom.o |
0x00802ccf OSD_ScreenMode |
0x00802cd0 OSD_mAh_Warning |
0x00802cd2 LastLongitude |
0x00802cd6 LCD_ORIENTATION |
0x00802cd7 PKT_Accutyp |
0x00802cd8 U02SV2 |
0x00802cd9 Lipo_UOffset |
0x00802cdb FM_Speed |
0x00802cdd LCD_DisplayMode |
0x00802cde OSD_VarioBeep |
0x00802cdf bt_name |
0x00802cea LCD_Helligkeit |
0x00802ceb PKT_StartInfo |
0x00802cec PKTWayPointDirectory |
0x00802d0f WiTXTO |
0x00802d10 OSD_InvertOut |
0x00802d11 OSD_LEDform |
0x00802d12 OSD_RCErrorbeep |
0x00802d13 UseBT |
0x00802d14 WiNetworkGroup |
0x00802d15 USBBT |
0x00802d16 WiUartMTU |
0x00802d17 BTIsSlave |
0x00802d18 UseWi |
0x00802d19 gps_UsedDevName |
0x00802d2d gps_UsedGPSMouse |
0x00802d2e OSD_HomeMKView |
0x00802d2f OSD_LipoBar |
0x00802d30 FM_Radius |
0x00802d32 PKT_IdleBeep |
0x00802d33 BTIsSet |
0x00802d34 WiIsSet |
0x00802d35 DisplayLanguage |
0x00802d36 gps_UseGPS |
0x00802d37 OSD_Fallspeed |
0x00802d38 LastLatitude |
0x00802d3c WiNetworkMode |
0x00802d3d PKT_Baudrate |
0x00802d3e Debug |
0x00802d3f bt_pin |
0x00802d44 WiTXRXChannel |
0x00802d45 gps_UsedMac |
0x00802d53 PKTWayPoint |
0x00802d72 LCD_Kontrast |
0x00802d73 OSD_SendOSD |
0x00802d74 DisplayTimeout |
0x00802d75 FM_Refresh |
COMMON 0x00802d77 0x487 lcd.o |
0x00802d77 display_page_counter |
0x00802d78 display_buffer |
0x00803178 display_buffer_counter |
0x00803179 display_mode |
0x0080317a line_buffer |
0x008031fa display_buffer_pointer |
0x008031fc lcd_xpos |
0x008031fd lcd_ypos |
COMMON 0x008031fe 0x66 osd.o |
0x008031fe Element |
0x008031ff BattLowVoltageWarning |
0x00803200 last5pos |
0x0080325b OSD_active |
0x0080325c Flags_GlobalConfig |
0x0080325d Flags_GlobalConfig3 |
0x0080325e Flags_ExtraConfig |
0x0080325f naviData |
0x00803261 cells |
0x00803262 heading_home |
COMMON 0x00803264 0x1 parameter.o |
0x00803264 ii |
COMMON 0x00803265 0x1d setup.o |
0x00803265 Pre16 |
0x00803267 EditString |
0x0080327c LCD_Orientation |
0x0080327d bt_name_len |
0x0080327e Pre |
0x00803280 length_tmp |
0x00803281 spalte |
0x00803282 PROVIDE (__bss_end, .) |
0x00011c82 __data_load_start = LOADADDR (.data) |
0x00014604 __data_load_end = (__data_load_start + SIZEOF (.data)) |
.noinit 0x00803282 0x0 |
0x00803282 PROVIDE (__noinit_start, .) |
*(.noinit*) |
0x00803282 PROVIDE (__noinit_end, .) |
0x00803282 _end = . |
0x00803282 PROVIDE (__heap_start, .) |
.eeprom 0x00810000 0x7c0 |
*(.eeprom*) |
.eeprom 0x00810000 0x7c0 eeprom.o |
0x00810028 EE_LCD_Helligkeit |
0x00810015 EE_OSD_VarioBeep |
0x00810005 EE_LastLongitude |
0x00810021 EE_WiIsSet |
0x00810034 EE_BTPin |
0x00810022 EE_BTIsSlave |
0x00810014 EE_OSD_HomeMKView |
0x00810025 EE_Debug |
0x00810044 EE_gps_UsedDevName |
0x00810011 EE_OSD_ScreenMode |
0x00810023 EE_UseBT |
0x00810024 EE_UseWi |
0x00810031 EE_DisplayLanguage |
0x0081000f EE_PKT_Baudrate |
0x00810030 EE_WiTXRXChannel |
0x00810017 EE_OSD_SendOSD |
0x0081001e EE_PKT_StartInfo |
0x0081002e EE_WiNetworkMode |
0x00810067 EE_gps_UsedGPSMouse |
0x00810066 EE_gps_UseGPS |
0x0081000d EE_FM_Refresh |
0x00810032 EE_DisplayTimeout |
0x0081001c EE_Lipo_UOffset |
0x00810019 EE_OSD_InvertOut |
0x00810058 EE_gps_UsedMac |
0x00810020 EE_BTIsSet |
0x0081002b EE_LCD_Orientation |
0x00810018 EE_OSD_LEDform |
0x00810009 EE_FM_Radius |
0x00810117 EEWayPointList |
0x0081002f EE_WiNetworkGroup |
0x0081002d EE_WiTXTO |
0x00810001 EE_LastLatitude |
0x00810039 EE_BTName |
0x0081001b EE_PKT_Accutyp |
0x00810027 EE_USBBT |
0x0081002c EE_WiUartMTU |
0x00810016 EE_OSD_Fallspeed |
0x00810033 EE_LowBat |
0x0081001a EE_OSD_RCErrorbeep |
0x00810026 EE_U02SV2 |
0x0081001f EE_PKT_IdleBeep |
0x00810012 EE_OSD_mAh_Warning |
0x00810000 EE_PKTVersion |
0x00810068 EEWPDirectory |
0x00810010 EE_OSD_LipoBar |
0x0081000b EE_FM_Speed |
0x0081002a EE_LCD_DisplayMode |
0x00810029 EE_LCD_Kontrast |
0x008107c0 __eeprom_end = . |
.fuse |
*(.fuse) |
*(.lfuse) |
*(.hfuse) |
*(.efuse) |
.lock |
*(.lock*) |
.signature |
*(.signature*) |
.stab 0x00000000 0x3390 |
*(.stab) |
.stab 0x00000000 0x6b4 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
.stab 0x000006b4 0x78 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3.o) |
0x84 (size before relaxing) |
.stab 0x0000072c 0x4bc C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) |
0x4c8 (size before relaxing) |
.stab 0x00000be8 0x90 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cmpsf2.o) |
0x9c (size before relaxing) |
.stab 0x00000c78 0x54 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cos.o) |
0x60 (size before relaxing) |
.stab 0x00000ccc 0x48 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3.o) |
0x54 (size before relaxing) |
.stab 0x00000d14 0x510 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3x.o) |
0x51c (size before relaxing) |
.stab 0x00001224 0x6c C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixsfsi.o) |
0x78 (size before relaxing) |
.stab 0x00001290 0x240 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixunssfsi.o) |
0x24c (size before relaxing) |
.stab 0x000014d0 0x318 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(floatsisf.o) |
0x324 (size before relaxing) |
.stab 0x000017e8 0x1e0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_cmp.o) |
0x1ec (size before relaxing) |
.stab 0x000019c8 0x78 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_inf.o) |
0x84 (size before relaxing) |
.stab 0x00001a40 0x54 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_nan.o) |
0x60 (size before relaxing) |
.stab 0x00001a94 0x84 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_pscA.o) |
0x90 (size before relaxing) |
.stab 0x00001b18 0x84 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_pscB.o) |
0x90 (size before relaxing) |
.stab 0x00001b9c 0x21c C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_rempio2.o) |
0x228 (size before relaxing) |
.stab 0x00001db8 0xfc C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_round.o) |
0x108 (size before relaxing) |
.stab 0x00001eb4 0xfc C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_sinus.o) |
0x108 (size before relaxing) |
.stab 0x00001fb0 0x1d4 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_split3.o) |
0x1e0 (size before relaxing) |
.stab 0x00002184 0x90 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_zero.o) |
0x9c (size before relaxing) |
.stab 0x00002214 0x6c C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(gesf2.o) |
0x78 (size before relaxing) |
.stab 0x00002280 0x48 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3.o) |
0x54 (size before relaxing) |
.stab 0x000022c8 0x4d4 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3x.o) |
0x4e0 (size before relaxing) |
.stab 0x0000279c 0x1b0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(round.o) |
0x1bc (size before relaxing) |
.stab 0x0000294c 0x78 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(sin.o) |
0x84 (size before relaxing) |
.stab 0x000029c4 0x174 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mintl.o) |
0x180 (size before relaxing) |
.stab 0x00002b38 0xe4 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mpack.o) |
0xf0 (size before relaxing) |
.stab 0x00002c1c 0xfc C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powsodd.o) |
0x108 (size before relaxing) |
.stab 0x00002d18 0x1ec C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powser.o) |
0x1f8 (size before relaxing) |
.stab 0x00002f04 0x6c C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(strcpy_P.o) |
0x78 (size before relaxing) |
.stab 0x00002f70 0x6c C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(memset.o) |
0x78 (size before relaxing) |
.stab 0x00002fdc 0x1b0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(itoa.o) |
0x1bc (size before relaxing) |
.stab 0x0000318c 0x12c C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(utoa.o) |
0x138 (size before relaxing) |
.stab 0x000032b8 0xd8 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(strrev.o) |
0xe4 (size before relaxing) |
.stabstr 0x00000000 0xa06 |
*(.stabstr) |
.stabstr 0x00000000 0xa06 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
.stab.excl |
*(.stab.excl) |
.stab.exclstr |
*(.stab.exclstr) |
.stab.index |
*(.stab.index) |
.stab.indexstr |
*(.stab.indexstr) |
.comment |
*(.comment) |
.debug |
*(.debug) |
.line |
*(.line) |
.debug_srcinfo |
*(.debug_srcinfo) |
.debug_sfnames |
*(.debug_sfnames) |
.debug_aranges 0x00000000 0x78 |
*(.debug_aranges) |
.debug_aranges |
0x00000000 0x14 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
.debug_aranges |
0x00000014 0x14 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_dword.o) |
.debug_aranges |
0x00000028 0x14 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_word.o) |
.debug_aranges |
0x0000003c 0x14 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
.debug_aranges |
0x00000050 0x14 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_dword.o) |
.debug_aranges |
0x00000064 0x14 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_word.o) |
.debug_pubnames |
0x00000000 0xd0 |
*(.debug_pubnames) |
.debug_pubnames |
0x00000000 0x23 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
.debug_pubnames |
0x00000023 0x23 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_dword.o) |
.debug_pubnames |
0x00000046 0x22 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_word.o) |
.debug_pubnames |
0x00000068 0x23 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
.debug_pubnames |
0x0000008b 0x23 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_dword.o) |
.debug_pubnames |
0x000000ae 0x22 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_word.o) |
.debug_info 0x00000000 0x6af |
*(.debug_info) |
.debug_info 0x00000000 0xfd C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
.debug_info 0x000000fd 0x153 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_dword.o) |
.debug_info 0x00000250 0x131 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_word.o) |
.debug_info 0x00000381 0xf9 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
.debug_info 0x0000047a 0x151 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_dword.o) |
.debug_info 0x000005cb 0xe4 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_word.o) |
*(.gnu.linkonce.wi.*) |
.debug_abbrev 0x00000000 0x404 |
*(.debug_abbrev) |
.debug_abbrev 0x00000000 0x9a C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
.debug_abbrev 0x0000009a 0xc6 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_dword.o) |
.debug_abbrev 0x00000160 0xc6 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_word.o) |
.debug_abbrev 0x00000226 0x91 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
.debug_abbrev 0x000002b7 0xc8 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_dword.o) |
.debug_abbrev 0x0000037f 0x85 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_word.o) |
.debug_line 0x00000000 0x520 |
*(.debug_line) |
.debug_line 0x00000000 0xd5 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
.debug_line 0x000000d5 0xe7 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_dword.o) |
.debug_line 0x000001bc 0xda C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_word.o) |
.debug_line 0x00000296 0xd5 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
.debug_line 0x0000036b 0xe1 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_dword.o) |
.debug_line 0x0000044c 0xd4 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_word.o) |
.debug_frame |
*(.debug_frame) |
.debug_str 0x00000000 0x1b9 |
*(.debug_str) |
.debug_str 0x00000000 0xb5 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
0xe9 (size before relaxing) |
.debug_str 0x000000b5 0x40 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_dword.o) |
0xf6 (size before relaxing) |
.debug_str 0x000000f5 0x34 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_word.o) |
0xf3 (size before relaxing) |
.debug_str 0x00000129 0x32 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
0xe9 (size before relaxing) |
.debug_str 0x0000015b 0x33 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_dword.o) |
0xf7 (size before relaxing) |
.debug_str 0x0000018e 0x2b C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_word.o) |
0xea (size before relaxing) |
.debug_loc |
*(.debug_loc) |
.debug_macinfo |
*(.debug_macinfo) |
OUTPUT(PKT_3_63a_MartinR_HW_1_2_de.elf elf32-avr) |
LOAD linker stubs |
Cross Reference Table |
Symbol File |
AkkuWarnThreshold osd.o |
BLConfig twimaster.o |
BLConfig_ReadMask twimaster.o |
BLConfig_WriteMask twimaster.o |
BLFlags twimaster.o |
motortest.o |
BTIsSet eeprom.o |
BTIsSlave eeprom.o |
BattLowVoltageWarning osd.o |
BeepMuster timer.o |
HAL_HW1_2.o |
BeepPrio timer.o |
BeepTime timer.o |
HAL_HW1_2.o |
COSD_FLAGS2 osd.o |
CellIsChecked osd.o |
CheckDelay timer.o |
motortest.o |
twimaster.o |
CheckMKLipo osd.o |
CountMilliseconds timer.o |
Debug setup.o |
eeprom.o |
menu.o |
main.o |
Decode64 usart.o |
followme.o |
parameter.o |
osd.o |
display.o |
main.o |
Delay_ms timer.o |
Delete_EEPROM eeprom.o |
setup.o |
DisplayLanguage messages.o |
setup.o |
parameter.o |
eeprom.o |
tools.o |
menu.o |
DisplayTime timer.o |
DisplayTimeout setup.o |
eeprom.o |
timer.o |
Display_Setup setup.o |
Display_on HAL_HW1_2.o |
timer.o |
EEWPDirectory eeprom.o |
EEWayPointList eeprom.o |
EEWayPointList_Clear eeprom.o |
EE_BTIsSet eeprom.o |
EE_BTIsSlave eeprom.o |
EE_BTName eeprom.o |
EE_BTPin eeprom.o |
EE_Debug eeprom.o |
EE_DisplayLanguage eeprom.o |
EE_DisplayTimeout eeprom.o |
EE_FM_Radius eeprom.o |
EE_FM_Refresh eeprom.o |
EE_FM_Speed eeprom.o |
EE_LCD_DisplayMode eeprom.o |
EE_LCD_Helligkeit eeprom.o |
EE_LCD_Kontrast eeprom.o |
EE_LCD_Orientation eeprom.o |
EE_LastLatitude eeprom.o |
EE_LastLongitude eeprom.o |
EE_Lipo_UOffset eeprom.o |
EE_LowBat eeprom.o |
EE_OSD_Fallspeed eeprom.o |
EE_OSD_HomeMKView eeprom.o |
EE_OSD_InvertOut eeprom.o |
EE_OSD_LEDform eeprom.o |
EE_OSD_LipoBar eeprom.o |
EE_OSD_RCErrorbeep eeprom.o |
EE_OSD_ScreenMode eeprom.o |
EE_OSD_SendOSD eeprom.o |
EE_OSD_VarioBeep eeprom.o |
EE_OSD_mAh_Warning eeprom.o |
EE_PKTVersion eeprom.o |
EE_PKT_Accutyp eeprom.o |
EE_PKT_Baudrate eeprom.o |
EE_PKT_IdleBeep eeprom.o |
EE_PKT_StartInfo eeprom.o |
EE_U02SV2 eeprom.o |
EE_USBBT eeprom.o |
EE_UseBT eeprom.o |
EE_UseWi eeprom.o |
EE_WiIsSet eeprom.o |
EE_WiNetworkGroup eeprom.o |
EE_WiNetworkMode eeprom.o |
EE_WiTXRXChannel eeprom.o |
EE_WiTXTO eeprom.o |
EE_WiUartMTU eeprom.o |
EE_gps_UseGPS eeprom.o |
EE_gps_UsedDevName eeprom.o |
EE_gps_UsedGPSMouse eeprom.o |
EE_gps_UsedMac eeprom.o |
EditString setup.o |
Edit_Baudrate setup.o |
Edit_DisplayHelligkeit setup.o |
Edit_DisplayKontrast setup.o |
Edit_DisplayMode setup.o |
Edit_Int10th_Value setup.o |
Edit_Int16_Value setup.o |
Edit_Int_Value setup.o |
Edit_Language setup.o |
Edit_OnOff setup.o |
Edit_Orientation setup.o |
Edit_YesNo setup.o |
Element followme.o |
osd.o |
FM_Radius eeprom.o |
FM_Refresh eeprom.o |
FM_Speed eeprom.o |
FM_error followme.o |
Flags_ExtraConfig followme.o |
osd.o |
Flags_GlobalConfig followme.o |
osd.o |
Flags_GlobalConfig3 followme.o |
osd.o |
FollowMe followme.o |
menu.o |
Font8x8 Font8x8.o |
lcd.o |
I2CTimeout twimaster.o |
I2C_Init twimaster.o |
I2C_ReadBLConfig twimaster.o |
I2C_Reset twimaster.o |
I2C_TransferActive twimaster.o |
motortest.o |
I2C_WriteBLConfig twimaster.o |
IdleTimer timer.o |
InitHWPorts HAL_HW1_2.o |
main.o |
LCD_Change setup.o |
LCD_DisplayMode setup.o |
lcd.o |
eeprom.o |
LCD_Helligkeit setup.o |
lcd.o |
eeprom.o |
HAL_HW1_2.o |
LCD_Init lcd.o |
HAL_HW1_2.o |
LCD_Kontrast setup.o |
lcd.o |
eeprom.o |
LCD_ORIENTATION lcd.o |
eeprom.o |
LCD_Orientation setup.o |
LastLatitude eeprom.o |
main.o |
LastLongitude eeprom.o |
main.o |
Lipo_UOffset eeprom.o |
MK_LowBat messages.o |
followme.o |
setup.o |
parameter.o |
osd.o |
lipo.o |
lcd.o |
eeprom.o |
connect.o |
Wi232.o |
HAL_HW1_2.o |
usart.o |
twimaster.o |
tools.o |
timer.o |
menu.o |
main.o |
MissingMotor twimaster.o |
Motor motortest.o |
twimaster.o |
MotorTest HAL_HW1_2.o |
motortest.o |
twimaster.o |
main.o |
MotorenEin twimaster.o |
motortest.o |
New_Baudrate eeprom.o |
NextWP osd.o |
OSD_Fallspeed osd.o |
eeprom.o |
OSD_HomeMKView osd.o |
eeprom.o |
OSD_InvertOut osd.o |
eeprom.o |
OSD_LEDform osd.o |
eeprom.o |
OSD_LipoBar osd.o |
eeprom.o |
OSD_RCErrorbeep setup.o |
osd.o |
eeprom.o |
OSD_ScreenMode osd.o |
eeprom.o |
OSD_Screen_Element osd.o |
followme.o |
OSD_SendOSD eeprom.o |
usart.o |
OSD_Setup setup.o |
OSD_Timeout osd.o |
followme.o |
OSD_VarioBeep osd.o |
eeprom.o |
OSD_active followme.o |
osd.o |
usart.o |
OSD_mAh_Warning osd.o |
eeprom.o |
OldWP osd.o |
Old_Baudrate eeprom.o |
PC_Fast_Connect tools.o |
PKTWayPoint eeprom.o |
PKTWayPointDirectory eeprom.o |
PKT_Accutyp eeprom.o |
PKT_Baudrate eeprom.o |
PKT_Change setup.o |
PKT_IdleBeep eeprom.o |
timer.o |
PKT_Setup setup.o |
tools.o |
menu.o |
PKT_StartInfo setup.o |
eeprom.o |
main.o |
PKT_Tools tools.o |
menu.o |
PoffTime timer.o |
Pre setup.o |
Pre16 setup.o |
RAM_Checksum twimaster.o |
ReadLastPosition eeprom.o |
main.o |
ReadParameter eeprom.o |
HAL_HW1_2.o |
ReceivedBytes usart.o |
RequiredMotors twimaster.o |
Reset_EEprom setup.o |
RxDataLen usart.o |
Search_BL motortest.o |
SendMotorData motortest.o |
SendOutData usart.o |
followme.o |
parameter.o |
osd.o |
display.o |
motortest.o |
main.o |
SetDelay timer.o |
motortest.o |
twimaster.o |
Show_Error_HW menu.o |
tools.o |
Show_Error_HW12 setup.o |
Show_LastPosition osd.o |
Show_Version menu.o |
tools.o |
String_Buffer timer.o |
SwitchToFC usart.o |
followme.o |
parameter.o |
osd.o |
display.o |
motortest.o |
main.o |
SwitchToGPS usart.o |
SwitchToMAG usart.o |
SwitchToNC usart.o |
followme.o |
osd.o |
display.o |
SwitchToWi232 usart.o |
Test_HB tools.o |
Test_Language messages.o |
menu.o |
Timer0_Init timer.o |
HAL_HW1_2.o |
Timer1_Init timer.o |
HAL_HW1_2.o |
Timer2_Init timer.o |
HAL_HW1_2.o |
U02SV2 eeprom.o |
USART_DisableTXD usart.o |
USART_EnableTXD usart.o |
USART_Init usart.o |
HAL_HW1_2.o |
USART_getc usart.o |
USART_putc usart.o |
main.o |
USART_puts usart.o |
motortest.o |
USART_puts_p usart.o |
USART_request_mk_data usart.o |
USBBT eeprom.o |
Update_PKT menu.o |
setup.o |
UseBT eeprom.o |
UseWi eeprom.o |
Vario_Beep_Down osd.o |
Vario_Beep_Down_Interval osd.o |
Vario_Beep_Up osd.o |
Vario_Beep_Up_Interval osd.o |
Vario_Threshold osd.o |
Vario_Threshold_Value osd.o |
Vin setup.o |
lipo.o |
connect.o |
tools.o |
menu.o |
main.o |
WarnCount timer.o |
WarnTime timer.o |
WarnToggle timer.o |
WiIsSet eeprom.o |
WiNetworkGroup eeprom.o |
WiNetworkMode eeprom.o |
WiTXRXChannel eeprom.o |
WiTXTO eeprom.o |
WiUartMTU eeprom.o |
WriteBTInitFlag eeprom.o |
WriteBTMasterFlag eeprom.o |
WriteBTSlaveFlag eeprom.o |
WriteLastPosition eeprom.o |
osd.o |
main.o |
WriteParameter eeprom.o |
setup.o |
WriteWiInitFlag eeprom.o |
__addsf3 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3.o) |
setup.o |
lcd.o |
__addsf3x C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powser.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_sinus.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3.o) |
__bad_interrupt C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__bss_end C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_clear_bss.o) |
__bss_start C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_clear_bss.o) |
__cmpsf2 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cmpsf2.o) |
__data_end C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_copy_data.o) |
__data_load_start C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_copy_data.o) |
__data_start C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_copy_data.o) |
__divmodhi4 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodhi4.o) |
setup.o |
parameter.o |
osd.o |
motortest.o |
__divmodsi4 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodsi4.o) |
followme.o |
lcd.o |
__divsf3 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3.o) |
osd.o |
lcd.o |
__divsf3_pse C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3x.o) |
__divsf3x C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3.o) |
__do_clear_bss C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_clear_bss.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_word.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_dword.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_word.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_dword.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
messages.o |
Font8x8.o |
tracking.o |
followme.o |
setup.o |
servo.o |
parameter.o |
osd.o |
lipo.o |
lcd.o |
gps.o |
font8x6.o |
fifo.o |
error_driver.o |
error.o |
eeprom.o |
display.o |
debug.o |
connect.o |
bluetooth.o |
Wi232.o |
HAL_HW3_9.o |
HAL_HW1_3.o |
HAL_HW1_2.o |
motortest.o |
usart.o |
uart1.o |
twimaster.o |
tools.o |
timer.o |
menu.o |
main.o |
__do_copy_data C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_copy_data.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_word.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_dword.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_word.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_dword.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
messages.o |
Font8x8.o |
tracking.o |
followme.o |
setup.o |
servo.o |
parameter.o |
osd.o |
lipo.o |
lcd.o |
gps.o |
font8x6.o |
fifo.o |
error_driver.o |
error.o |
eeprom.o |
display.o |
debug.o |
connect.o |
bluetooth.o |
Wi232.o |
HAL_HW3_9.o |
HAL_HW1_3.o |
HAL_HW1_2.o |
motortest.o |
usart.o |
uart1.o |
twimaster.o |
tools.o |
timer.o |
menu.o |
main.o |
__eerd_block C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
eeprom.o |
__eerd_dword C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_dword.o) |
eeprom.o |
__eerd_word C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_word.o) |
eeprom.o |
__eewr_block C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
eeprom.o |
__eewr_dword C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_dword.o) |
eeprom.o |
__eewr_word C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_word.o) |
eeprom.o |
__epilogue_restores__ C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_epilogue.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
__eqsf2 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cmpsf2.o) |
__fixsfsi C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixsfsi.o) |
osd.o |
lcd.o |
__fixunssfsi C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixunssfsi.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixsfsi.o) |
setup.o |
lcd.o |
HAL_HW1_2.o |
__floatsisf C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(floatsisf.o) |
setup.o |
osd.o |
lcd.o |
HAL_HW1_2.o |
__floatunsisf C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(floatsisf.o) |
__fp_cmp C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_cmp.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(gesf2.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cmpsf2.o) |
__fp_inf C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_inf.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) |
__fp_mintl C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mintl.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(round.o) |
__fp_mpack C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mpack.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(round.o) |
__fp_mpack_finite C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mpack.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_rempio2.o) |
__fp_nan C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_nan.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_rempio2.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) |
__fp_powser C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powser.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powsodd.o) |
__fp_powsodd C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powsodd.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_sinus.o) |
__fp_pscA C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_pscA.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) |
__fp_pscB C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_pscB.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) |
__fp_rempio2 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_rempio2.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(sin.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cos.o) |
__fp_round C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_round.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_sinus.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3.o) |
__fp_sinus C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_sinus.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(sin.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cos.o) |
__fp_split3 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_split3.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) |
__fp_splitA C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_split3.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(round.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_rempio2.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixunssfsi.o) |
__fp_szero C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_zero.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(round.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixsfsi.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3x.o) |
__fp_zero C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_zero.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixunssfsi.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) |
__gesf2 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(gesf2.o) |
__gtsf2 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(gesf2.o) |
osd.o |
__heap_end C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__init C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__lesf2 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cmpsf2.o) |
__ltsf2 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cmpsf2.o) |
osd.o |
__mulsf3 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powsodd.o) |
setup.o |
osd.o |
lcd.o |
HAL_HW1_2.o |
__mulsf3_pse C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3x.o) |
__mulsf3x C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powser.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3.o) |
__mulsi3 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_mulsi3.o) |
lcd.o |
__nesf2 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cmpsf2.o) |
__prologue_saves__ C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_prologue.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
__stack C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
main.o |
__subsf3 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3.o) |
lcd.o |
__udivmodhi4 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodhi4.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(utoa.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(itoa.o) |
C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodhi4.o) |
osd.o |
lcd.o |
fifo.o |
timer.o |
__udivmodqi4 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodqi4.o) |
osd.o |
lcd.o |
usart.o |
__udivmodsi4 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodsi4.o) |
C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodsi4.o) |
osd.o |
main.o |
__vector_1 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__vector_10 timer.o |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__vector_11 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__vector_12 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__vector_13 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__vector_14 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__vector_15 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__vector_16 timer.o |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__vector_17 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__vector_18 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__vector_19 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__vector_2 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__vector_20 usart.o |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__vector_21 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__vector_22 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__vector_23 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__vector_24 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__vector_25 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__vector_26 twimaster.o |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__vector_27 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__vector_3 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__vector_4 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__vector_5 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__vector_6 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__vector_7 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__vector_8 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__vector_9 timer.o |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__vector_default C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
__vectors C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
_div C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodhi4.o) |
_exit C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_exit.o) |
_send_msg error.o |
abo_timer followme.o |
osd.o |
timer.o |
accumulator setup.o |
lipo.o |
connect.o |
tools.o |
menu.o |
main.o |
bt_name eeprom.o |
bt_name_len setup.o |
bt_pin eeprom.o |
buffer motortest.o |
usart.o |
cells osd.o |
changes parameter.o |
clr_D_LIGHT HAL_HW1_2.o |
timer.o |
copy_line lcd.o |
copy_setting parameter.o |
cos C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cos.o) |
lcd.o |
current_hardware main.o |
display.o |
motortest.o |
usart.o |
dac_channel twimaster.o |
directions_p osd.o |
display_buffer lcd.o |
display_buffer_counter lcd.o |
display_buffer_pointer lcd.o |
display_data display.o |
menu.o |
display_debug menu.o |
display_mode lcd.o |
display_page_counter lcd.o |
display_param_menu parameter.o |
display_section_menu parameter.o |
display_settings_menu parameter.o |
dmode parameter.o |
draw_compass osd.o |
draw_homesymbol osd.o |
draw_targetsymbol osd.o |
draw_variometer osd.o |
edit setup.o |
edit_param parameter.o |
edit_parameter parameter.o |
menu.o |
error osd.o |
exit C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_exit.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
fifo_clear fifo.o |
fifo_cmp_pgm fifo.o |
fifo_getcount fifo.o |
fifo_init fifo.o |
fifo_is_empty fifo.o |
fifo_is_full fifo.o |
fifo_read fifo.o |
fifo_search fifo.o |
fifo_strstr_pgm fifo.o |
fifo_write fifo.o |
font8x6 font8x6.o |
lcd.o |
ftimer osd.o |
get_key_long timer.o |
parameter.o |
menu.o |
get_key_long_rpt timer.o |
get_key_long_rpt_sp timer.o |
setup.o |
parameter.o |
display.o |
motortest.o |
menu.o |
get_key_press timer.o |
messages.o |
followme.o |
setup.o |
parameter.o |
osd.o |
display.o |
motortest.o |
tools.o |
menu.o |
main.o |
get_key_rpt timer.o |
get_key_short timer.o |
parameter.o |
eeprom.o |
tools.o |
menu.o |
gps_UseGPS eeprom.o |
gps_UsedDevName eeprom.o |
gps_UsedGPSMouse eeprom.o |
gps_UsedMac eeprom.o |
hardware main.o |
followme.o |
osd.o |
display.o |
motortest.o |
usart.o |
menu.o |
hdigit lcd.o |
heading_conv osd.o |
heading_home followme.o |
osd.o |
i2c_state motortest.o |
ii parameter.o |
itoa C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(itoa.o) |
lcd.o |
motortest.o |
key_long timer.o |
key_lrpt timer.o |
key_press timer.o |
key_rpt timer.o |
key_rpts timer.o |
key_state timer.o |
last5pos osd.o |
last_RC_Quality osd.o |
last_UBat osd.o |
lcd_circ_line lcd.o |
lcd_circle lcd.o |
osd.o |
lcd_cls lcd.o |
messages.o |
followme.o |
setup.o |
parameter.o |
osd.o |
eeprom.o |
display.o |
motortest.o |
tools.o |
menu.o |
main.o |
lcd_cls_line lcd.o |
parameter.o |
motortest.o |
main.o |
lcd_command lcd.o |
lcd_ecirc_line lcd.o |
parameter.o |
lcd_ecircle lcd.o |
parameter.o |
lcd_ellipse lcd.o |
osd.o |
lcd_ellipse_line lcd.o |
osd.o |
lcd_fcircle lcd.o |
osd.o |
lcd_frect lcd.o |
setup.o |
parameter.o |
osd.o |
motortest.o |
main.o |
lcd_line lcd.o |
osd.o |
lcd_o_circ_line osd.o |
lcd_o_circle osd.o |
lcd_plot lcd.o |
osd.o |
lcd_print lcd.o |
lcd_print_at lcd.o |
parameter.o |
lcd_print_hex lcd.o |
lcd_print_hex_at lcd.o |
motortest.o |
lcd_printp lcd.o |
eeprom.o |
motortest.o |
lcd_printp_at lcd.o |
followme.o |
setup.o |
parameter.o |
osd.o |
eeprom.o |
display.o |
motortest.o |
tools.o |
menu.o |
main.o |
lcd_printpj lcd.o |
lcd_printpj_at lcd.o |
lcd_printpns lcd.o |
lcd_printpns_at lcd.o |
osd.o |
lcd_putc lcd.o |
parameter.o |
osd.o |
lcd_putc_jeti lcd.o |
osd.o |
lcd_puts_at lcd.o |
messages.o |
followme.o |
setup.o |
parameter.o |
osd.o |
display.o |
motortest.o |
tools.o |
menu.o |
main.o |
lcd_rect lcd.o |
osd.o |
lcd_view_font lcd.o |
lcd_write_number_u lcd.o |
main.o |
lcd_write_number_u_at lcd.o |
main.o |
lcd_xpos lcd.o |
lcd_ypos lcd.o |
length_tmp setup.o |
line_buffer lcd.o |
load_setting parameter.o |
followme.o |
osd.o |
main.o |
m motortest.o |
main main.o |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644.o |
main_menu menu.o |
main.o |
max_Altimeter osd.o |
max_Capacity osd.o |
max_Current osd.o |
max_Distance osd.o |
max_FlyingTime osd.o |
max_GroundSpeed osd.o |
memset C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(memset.o) |
motortest.o |
menu_choose menu.o |
parameter.o |
menu_choose2 menu.o |
setup.o |
parameter.o |
tools.o |
menu_choose3 menu.o |
parameter.o |
menu_set_cursor menu.o |
min_UBat osd.o |
mk_param_struct followme.o |
parameter.o |
osd.o |
main.o |
mmode setup.o |
motortest.o |
mode main.o |
followme.o |
parameter.o |
osd.o |
display.o |
usart.o |
motor motortest.o |
motor_addr motortest.o |
motor_read twimaster.o |
motortest.o |
motor_test motortest.o |
tools.o |
menu.o |
motor_write twimaster.o |
motortest.o |
naviData followme.o |
osd.o |
new_line lcd.o |
offset parameter.o |
offset2 parameter.o |
old_hh osd.o |
osd osd.o |
menu.o |
pRxData usart.o |
followme.o |
parameter.o |
osd.o |
main.o |
param_config parameter.o |
param_copyright menu.o |
param_items_rx parameter.o |
param_menuitems_Accu setup.o |
param_menuitems_FOLLOWME setup.o |
param_menuitems_GPS setup.o |
param_menuitems_OSD setup.o |
param_menuitems_bt setup.o |
param_menuitems_fc menu.o |
param_menuitems_lcd setup.o |
param_menuitems_nc menu.o |
param_menuitems_no menu.o |
param_menuitems_pkt setup.o |
param_menuitems_wi setup.o |
param_names parameter.o |
param_pages parameter.o |
paste_line lcd.o |
pmode parameter.o |
print_display lcd.o |
print_display_at lcd.o |
display.o |
print_position osd.o |
print_statistics osd.o |
repeat_speed timer.o |
rose osd.o |
round C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(round.o) |
lcd.o |
rxFlag usart.o |
rx_byte usart.o |
rxd_buffer display.o |
usart.o |
main.o |
rxd_buffer_locked usart.o |
followme.o |
parameter.o |
osd.o |
display.o |
main.o |
samples setup.o |
lipo.o |
connect.o |
tools.o |
menu.o |
main.o |
scroll lcd.o |
send_byte lcd.o |
setup.o |
send_pgm error.o |
servo_test servo.o |
tools.o |
menu.o |
set_D_LIGHT HAL_HW1_2.o |
timer.o |
set_adress lcd.o |
set_beep timer.o |
followme.o |
setup.o |
osd.o |
eeprom.o |
main.o |
setting parameter.o |
sin C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(sin.o) |
lcd.o |
spalte setup.o |
stat_crc_error usart.o |
stat_overflow_error usart.o |
strGet messages.o |
followme.o |
setup.o |
parameter.o |
osd.o |
display.o |
motortest.o |
tools.o |
menu.o |
main.o |
str_E osd.o |
str_N osd.o |
str_NE osd.o |
str_NW osd.o |
str_S osd.o |
str_SE osd.o |
str_SW osd.o |
str_W osd.o |
strcpy_P C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(strcpy_P.o) |
eeprom.o |
strrev C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(strrev.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(utoa.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(itoa.o) |
target_pos parameter.o |
target_pos2 parameter.o |
timer followme.o |
parameter.o |
osd.o |
display.o |
motortest.o |
timer.o |
main.o |
tools_menuitems_pkt tools.o |
twi_state twimaster.o |
motortest.o |
txd_buffer usart.o |
txd_complete usart.o |
uart1_putc usart.o |
uart_getc_nb usart.o |
utoa C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(utoa.o) |
lcd.o |
v motortest.o |
version main.o |
volt_avg setup.o |
lipo.o |
connect.o |
tools.o |
menu.o |
main.o |
wait_1ms lcd.o |
wait_ms lcd.o |
wdt_init main.o |
write_gps_pos lcd.o |
write_ndigit_number_s lcd.o |
osd.o |
write_ndigit_number_s_10th lcd.o |
osd.o |
write_ndigit_number_u lcd.o |
followme.o |
setup.o |
parameter.o |
osd.o |
motortest.o |
main.o |
write_ndigit_number_u_100th lcd.o |
write_ndigit_number_u_10th lcd.o |
setup.o |
osd.o |
write_setting parameter.o |
write_time lcd.o |
osd.o |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/PKT_3_63a_MartinR_HW_1_3_de.map |
---|
0,0 → 1,2513 |
Archive member included because of file (symbol) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3.o) |
lcd.o (__subsf3) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3.o) (__addsf3x) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cmpsf2.o) |
osd.o (__ltsf2) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cos.o) |
lcd.o (cos) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3.o) |
lcd.o (__divsf3) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3.o) (__divsf3x) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixsfsi.o) |
lcd.o (__fixsfsi) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixunssfsi.o) |
HAL_HW1_3.o (__fixunssfsi) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(floatsisf.o) |
HAL_HW1_3.o (__floatsisf) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_cmp.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cmpsf2.o) (__fp_cmp) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_inf.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_inf) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_nan.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_nan) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_pscA.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_pscA) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_pscB.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_pscB) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_rempio2.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cos.o) (__fp_rempio2) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_round.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3.o) (__fp_round) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_sinus.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cos.o) (__fp_sinus) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_split3.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_split3) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_zero.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_zero) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(gesf2.o) |
osd.o (__gtsf2) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3.o) |
HAL_HW1_3.o (__mulsf3) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3.o) (__mulsf3x) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(round.o) |
lcd.o (round) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(sin.o) |
lcd.o (sin) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mintl.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(round.o) (__fp_mintl) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mpack.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(round.o) (__fp_mpack) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powsodd.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_sinus.o) (__fp_powsodd) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powser.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powsodd.o) (__fp_powser) |
C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_mulsi3.o) |
lcd.o (__mulsi3) |
C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodqi4.o) |
usart.o (__udivmodqi4) |
C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodhi4.o) |
timer.o (__udivmodhi4) |
C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodhi4.o) |
motortest.o (__divmodhi4) |
C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodsi4.o) |
main.o (__udivmodsi4) |
C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodsi4.o) |
lcd.o (__divmodsi4) |
C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_exit.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o (exit) |
C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_copy_data.o) |
main.o (__do_copy_data) |
C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_clear_bss.o) |
main.o (__do_clear_bss) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(strcpy_P.o) |
eeprom.o (strcpy_P) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(memset.o) |
motortest.o (memset) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
eeprom.o (__eerd_block) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_dword.o) |
eeprom.o (__eerd_dword) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_word.o) |
eeprom.o (__eerd_word) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
eeprom.o (__eewr_block) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_dword.o) |
eeprom.o (__eewr_dword) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_word.o) |
eeprom.o (__eewr_word) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(itoa.o) |
motortest.o (itoa) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(utoa.o) |
lcd.o (utoa) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(strrev.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(itoa.o) (strrev) |
C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_prologue.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) (__prologue_saves__) |
C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_epilogue.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) (__epilogue_restores__) |
Allocating common symbols |
Common symbol size file |
OSD_ScreenMode 0x1 eeprom.o |
Display_on 0x1 timer.o |
OSD_mAh_Warning 0x2 eeprom.o |
display_page_counter |
0x1 lcd.o |
LastLongitude 0x4 eeprom.o |
rxd_buffer 0xb4 usart.o |
LCD_ORIENTATION 0x1 eeprom.o |
Element 0x1 osd.o |
PKT_Accutyp 0x1 eeprom.o |
U02SV2 0x1 eeprom.o |
timer 0x2 timer.o |
abo_timer 0x2 timer.o |
Lipo_UOffset 0x2 eeprom.o |
BattLowVoltageWarning |
0x1 osd.o |
version 0x2 main.o |
FM_Speed 0x2 eeprom.o |
display_buffer 0x400 lcd.o |
display_buffer_counter |
0x1 lcd.o |
LCD_DisplayMode 0x1 eeprom.o |
OSD_VarioBeep 0x1 eeprom.o |
i2c_state 0x1 motortest.o |
mmode 0x1 motortest.o |
Pre16 0x2 setup.o |
accumulator 0x4 main.o |
mk_param_struct 0x2 main.o |
bt_name 0xb eeprom.o |
LCD_Helligkeit 0x1 eeprom.o |
PKT_StartInfo 0x1 eeprom.o |
PKTWayPointDirectory |
0x23 eeprom.o |
last5pos 0x5b osd.o |
WiTXTO 0x1 eeprom.o |
OSD_active 0x1 osd.o |
EditString 0x15 setup.o |
OSD_InvertOut 0x1 eeprom.o |
MotorTest 0x10 main.o |
OSD_LEDform 0x1 eeprom.o |
OSD_RCErrorbeep 0x1 eeprom.o |
UseBT 0x1 eeprom.o |
WiNetworkGroup 0x1 eeprom.o |
display_mode 0x1 lcd.o |
USBBT 0x1 eeprom.o |
WiUartMTU 0x1 eeprom.o |
BTIsSlave 0x1 eeprom.o |
UseWi 0x1 eeprom.o |
LCD_Orientation 0x1 setup.o |
gps_UsedDevName 0x14 eeprom.o |
buffer 0x1e usart.o |
gps_UsedGPSMouse 0x1 eeprom.o |
v 0x1 motortest.o |
OSD_HomeMKView 0x1 eeprom.o |
rx_byte 0x1 usart.o |
OSD_LipoBar 0x1 eeprom.o |
FM_Radius 0x2 eeprom.o |
PKT_IdleBeep 0x1 eeprom.o |
Flags_GlobalConfig 0x1 osd.o |
ii 0x1 parameter.o |
BTIsSet 0x1 eeprom.o |
line_buffer 0x80 lcd.o |
WiIsSet 0x1 eeprom.o |
Flags_GlobalConfig3 |
0x1 osd.o |
DisplayLanguage 0x1 eeprom.o |
gps_UseGPS 0x1 eeprom.o |
display_buffer_pointer |
0x2 lcd.o |
OSD_Fallspeed 0x1 eeprom.o |
String_Buffer 0x5 timer.o |
Flags_ExtraConfig 0x1 osd.o |
bt_name_len 0x1 setup.o |
lcd_xpos 0x1 lcd.o |
samples 0x2 main.o |
MK_LowBat 0x1 main.o |
LastLatitude 0x4 eeprom.o |
txd_buffer 0x3c usart.o |
WiNetworkMode 0x1 eeprom.o |
BLConfig 0x8 twimaster.o |
Motor 0x60 twimaster.o |
PKT_Baudrate 0x1 eeprom.o |
Debug 0x1 eeprom.o |
bt_pin 0x5 eeprom.o |
WiTXRXChannel 0x1 eeprom.o |
gps_UsedMac 0xe eeprom.o |
Vin 0x4 main.o |
m 0x1 motortest.o |
lcd_ypos 0x1 lcd.o |
naviData 0x2 osd.o |
Pre 0x2 setup.o |
cells 0x1 osd.o |
length_tmp 0x1 setup.o |
PKTWayPoint 0x1f eeprom.o |
LCD_Kontrast 0x1 eeprom.o |
OSD_SendOSD 0x1 eeprom.o |
DisplayTimeout 0x1 eeprom.o |
heading_home 0x2 osd.o |
volt_avg 0x2 main.o |
FM_Refresh 0x2 eeprom.o |
spalte 0x1 setup.o |
Memory Configuration |
Name Origin Length Attributes |
text 0x00000000 0x00020000 xr |
data 0x00800060 0x0000ffa0 rw !x |
eeprom 0x00810000 0x00010000 rw !x |
fuse 0x00820000 0x00000400 rw !x |
lock 0x00830000 0x00000400 rw !x |
signature 0x00840000 0x00000400 rw !x |
*default* 0x00000000 0xffffffff |
Linker script and memory map |
Address of section .data set to 0x800100 |
LOAD C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
LOAD main.o |
LOAD menu.o |
LOAD timer.o |
LOAD tools.o |
LOAD twimaster.o |
LOAD uart1.o |
LOAD usart.o |
LOAD motortest.o |
LOAD HAL_HW1_2.o |
LOAD HAL_HW1_3.o |
LOAD HAL_HW3_9.o |
LOAD Wi232.o |
LOAD bluetooth.o |
LOAD connect.o |
LOAD debug.o |
LOAD display.o |
LOAD eeprom.o |
LOAD error.o |
LOAD error_driver.o |
LOAD fifo.o |
LOAD font8x6.o |
LOAD gps.o |
LOAD lcd.o |
LOAD lipo.o |
LOAD osd.o |
LOAD parameter.o |
LOAD servo.o |
LOAD setup.o |
LOAD followme.o |
LOAD tracking.o |
LOAD Font8x8.o |
LOAD messages.o |
LOAD C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a |
LOAD C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a |
LOAD C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a |
LOAD C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a |
.hash |
*(.hash) |
.dynsym |
*(.dynsym) |
.dynstr |
*(.dynstr) |
.gnu.version |
*(.gnu.version) |
.gnu.version_d |
*(.gnu.version_d) |
.gnu.version_r |
*(.gnu.version_r) |
.rel.init |
*(.rel.init) |
.rela.init |
*(.rela.init) |
.rel.text |
*(.rel.text) |
*(.rel.text.*) |
*(.rel.gnu.linkonce.t*) |
.rela.text |
*(.rela.text) |
*(.rela.text.*) |
*(.rela.gnu.linkonce.t*) |
.rel.fini |
*(.rel.fini) |
.rela.fini |
*(.rela.fini) |
.rel.rodata |
*(.rel.rodata) |
*(.rel.rodata.*) |
*(.rel.gnu.linkonce.r*) |
.rela.rodata |
*(.rela.rodata) |
*(.rela.rodata.*) |
*(.rela.gnu.linkonce.r*) |
.rel.data |
*(.rel.data) |
*(.rel.data.*) |
*(.rel.gnu.linkonce.d*) |
.rela.data |
*(.rela.data) |
*(.rela.data.*) |
*(.rela.gnu.linkonce.d*) |
.rel.ctors |
*(.rel.ctors) |
.rela.ctors |
*(.rela.ctors) |
.rel.dtors |
*(.rel.dtors) |
.rela.dtors |
*(.rela.dtors) |
.rel.got |
*(.rel.got) |
.rela.got |
*(.rela.got) |
.rel.bss |
*(.rel.bss) |
.rela.bss |
*(.rela.bss) |
.rel.plt |
*(.rel.plt) |
.rela.plt |
*(.rela.plt) |
.text 0x00000000 0x11cb4 |
*(.vectors) |
.vectors 0x00000000 0x7c C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
0x00000000 __vectors |
0x00000000 __vector_default |
*(.vectors) |
*(.progmem.gcc*) |
.progmem.gcc_sw_table |
0x0000007c 0x34 osd.o |
.progmem.gcc_fplib |
0x000000b0 0x1e C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_sinus.o) |
*(.progmem*) |
.progmem.data 0x000000ce 0x24 main.o |
.progmem.data 0x000000f2 0x6c8 menu.o |
0x00000488 param_menuitems_nc |
0x00000368 param_menuitems_fc |
0x000001b8 param_menuitems_no |
0x000000f2 param_copyright |
.progmem.data 0x000007ba 0x1f2 tools.o |
0x000007ba tools_menuitems_pkt |
.progmem.data 0x000009ac 0xe6 motortest.o |
.progmem.data 0x00000a92 0xc3 display.o |
.progmem.data 0x00000b55 0x66 eeprom.o |
.progmem.data 0x00000bbb 0x300 font8x6.o |
0x00000bbb font8x6 |
.progmem.data 0x00000ebb 0x26 lcd.o |
.progmem.data 0x00000ee1 0xb9 osd.o |
0x00000ee1 directions_p |
0x00000efa str_SW |
0x00000f09 rose |
0x00000efd str_S |
0x00000ef4 str_NW |
0x00000f06 str_NE |
0x00000f00 str_SE |
0x00000ef1 str_N |
0x00000ef7 str_W |
0x00000f03 str_E |
.progmem.data 0x00000f9a 0x2d2c parameter.o |
0x00003893 param_pages |
0x00000f9a param_items_rx |
0x00001033 param_config |
0x000014f3 param_names |
.progmem.data 0x00003cc6 0x111c setup.o |
0x00003f96 param_menuitems_FOLLOWME |
0x000044ee param_menuitems_wi |
0x00004146 param_menuitems_GPS |
0x00004776 param_menuitems_lcd |
0x00004386 param_menuitems_bt |
0x00003cc6 param_menuitems_OSD |
0x000049b6 param_menuitems_pkt |
0x000042f6 param_menuitems_Accu |
.progmem.data 0x00004de2 0x34 followme.o |
.progmem.data 0x00004e16 0x800 Font8x8.o |
0x00004e16 Font8x8 |
0x00005616 . = ALIGN (0x2) |
0x00005616 __trampolines_start = . |
*(.trampolines) |
.trampolines 0x00005616 0x0 linker stubs |
*(.trampolines*) |
0x00005616 __trampolines_end = . |
*(.jumptables) |
*(.jumptables*) |
*(.lowtext) |
*(.lowtext*) |
0x00005616 __ctors_start = . |
*(.ctors) |
0x00005616 __ctors_end = . |
0x00005616 __dtors_start = . |
*(.dtors) |
0x00005616 __dtors_end = . |
SORT(*)(.ctors) |
SORT(*)(.dtors) |
*(.init0) |
.init0 0x00005616 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
0x00005616 __init |
*(.init0) |
*(.init1) |
.init1 0x00005616 0x12 main.o |
0x00005616 wdt_init |
*(.init1) |
*(.init2) |
.init2 0x00005628 0xc C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
*(.init2) |
*(.init3) |
*(.init3) |
*(.init4) |
.init4 0x00005634 0x16 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_copy_data.o) |
0x00005634 __do_copy_data |
.init4 0x0000564a 0x10 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_clear_bss.o) |
0x0000564a __do_clear_bss |
*(.init4) |
*(.init5) |
*(.init5) |
*(.init6) |
*(.init6) |
*(.init7) |
*(.init7) |
*(.init8) |
*(.init8) |
*(.init9) |
.init9 0x0000565a 0x8 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
*(.init9) |
*(.text) |
.text 0x00005662 0x4 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
0x00005662 __vector_22 |
0x00005662 __vector_28 |
0x00005662 __vector_1 |
0x00005662 __vector_24 |
0x00005662 __vector_12 |
0x00005662 __bad_interrupt |
0x00005662 __vector_6 |
0x00005662 __vector_3 |
0x00005662 __vector_23 |
0x00005662 __vector_30 |
0x00005662 __vector_25 |
0x00005662 __vector_11 |
0x00005662 __vector_13 |
0x00005662 __vector_17 |
0x00005662 __vector_19 |
0x00005662 __vector_7 |
0x00005662 __vector_27 |
0x00005662 __vector_5 |
0x00005662 __vector_4 |
0x00005662 __vector_2 |
0x00005662 __vector_21 |
0x00005662 __vector_15 |
0x00005662 __vector_29 |
0x00005662 __vector_8 |
0x00005662 __vector_14 |
0x00005662 __vector_18 |
.text 0x00005666 0x688 main.o |
0x00005666 main |
.text 0x00005cee 0x7c6 menu.o |
0x00005cee menu_set_cursor |
0x00005e4c menu_choose3 |
0x00005da2 menu_choose2 |
0x00005f36 Show_Error_HW |
0x00005d18 menu_choose |
0x000060d0 main_menu |
0x000063fa Update_PKT |
0x00005f76 Show_Version |
.text 0x000064b4 0x4a2 timer.o |
0x000068f6 get_key_long |
0x000064ee Timer2_Init |
0x0000686c SetDelay |
0x00006938 get_key_long_rpt_sp |
0x000068e0 get_key_rpt |
0x0000687e CheckDelay |
0x00006896 Delay_ms |
0x00006914 get_key_long_rpt |
0x00006516 __vector_9 |
0x000068c6 get_key_short |
0x0000656a set_beep |
0x000068b0 get_key_press |
0x000064b4 Timer1_Init |
0x00006530 __vector_10 |
0x000065ca __vector_16 |
0x0000654a Timer0_Init |
.text 0x00006956 0x260 tools.o |
0x00006956 PKT_Tools |
0x00006aec PC_Fast_Connect |
0x00006bb4 Test_HB |
.text 0x00006bb6 0x7d0 twimaster.o |
0x00006c24 I2C_Reset |
0x00006bd8 I2C_Init |
0x00006bb6 RAM_Checksum |
0x00007234 I2C_WriteBLConfig |
0x00007380 I2C_ReadBLConfig |
0x00006c68 __vector_26 |
.text 0x00007386 0x0 uart1.o |
.text 0x00007386 0x920 usart.o |
0x0000771a USART_putc |
0x000076fa USART_DisableTXD |
0x00007b42 SwitchToFC |
0x0000772a USART_puts |
0x00007692 USART_Init |
0x00007b28 SwitchToWi232 |
0x00007c30 SwitchToGPS |
0x00007bba SwitchToMAG |
0x00007994 USART_request_mk_data |
0x00007a12 Decode64 |
0x000075da USART_getc |
0x00007634 uart_getc_nb |
0x00007748 USART_puts_p |
0x0000770a USART_EnableTXD |
0x0000776e SendOutData |
0x00007386 __vector_20 |
0x00007ae6 SwitchToNC |
.text 0x00007ca6 0x9c0 motortest.o |
0x00007efa motor_test |
0x00007ca6 SendMotorData |
0x00007cfe Search_BL |
0x00007e98 motor |
.text 0x00008666 0x0 HAL_HW1_2.o |
.text 0x00008666 0xd4 HAL_HW1_3.o |
0x00008666 set_D_LIGHT |
0x0000866e InitHWPorts |
0x00008732 clr_D_LIGHT |
.text 0x0000873a 0x0 HAL_HW3_9.o |
.text 0x0000873a 0x0 Wi232.o |
.text 0x0000873a 0x0 bluetooth.o |
.text 0x0000873a 0x0 connect.o |
.text 0x0000873a 0x0 debug.o |
.text 0x0000873a 0x278 display.o |
0x0000873a display_data |
.text 0x000089b2 0xf1a eeprom.o |
0x00008a70 ReadLastPosition |
0x00008aec WriteParameter |
0x00008a26 WriteBTSlaveFlag |
0x00008fc6 Delete_EEPROM |
0x00008a4c WriteBTMasterFlag |
0x000089da WriteWiInitFlag |
0x00009650 EEWayPointList_Clear |
0x00008a00 WriteBTInitFlag |
0x0000922e ReadParameter |
0x00008ab2 WriteLastPosition |
.text 0x000098cc 0x30 error.o |
0x000098e8 send_pgm |
0x000098cc _send_msg |
.text 0x000098fc 0x0 error_driver.o |
.text 0x000098fc 0x2ba fifo.o |
0x00009910 fifo_getcount |
0x00009ad4 fifo_search |
0x00009b6c fifo_strstr_pgm |
0x0000994a fifo_read |
0x000098fc fifo_init |
0x00009b60 fifo_cmp_pgm |
0x00009918 fifo_is_empty |
0x000099a2 fifo_write |
0x0000992e fifo_is_full |
0x000099f0 fifo_clear |
.text 0x00009bb6 0x0 font8x6.o |
.text 0x00009bb6 0x0 gps.o |
.text 0x00009bb6 0x1dc0 lcd.o |
0x00009bd2 lcd_cls |
0x0000a6dc lcd_puts_at |
0x0000a5e8 lcd_print_at |
0x00009c38 wait_1ms |
0x00009f24 lcd_plot |
0x00009bb6 send_byte |
0x0000b1b2 lcd_print_hex_at |
0x0000b69a write_ndigit_number_s_10th |
0x0000a6ca lcd_printpns_at |
0x0000a57e print_display_at |
0x0000a7f4 lcd_circle |
0x00009fb6 lcd_line |
0x0000a38a lcd_putc |
0x00009f0a new_line |
0x0000a318 lcd_printpj |
0x00009e98 paste_line |
0x0000a1c0 lcd_putc_jeti |
0x0000b4cc write_ndigit_number_u_10th |
0x0000a378 lcd_printpj_at |
0x0000a65a lcd_printp_at |
0x00009e26 copy_line |
0x0000aa6e lcd_circ_line |
0x0000b7f2 write_time |
0x0000b1a2 hdigit |
0x0000b276 lcd_write_number_u |
0x0000a716 lcd_cls_line |
0x0000a58e lcd_print |
0x0000b2d6 lcd_write_number_u_at |
0x0000b206 lcd_print_hex |
0x00009dbc scroll |
0x0000a946 lcd_fcircle |
0x0000a53e print_display |
0x0000a66c lcd_printpns |
0x00009d72 set_adress |
0x00009c6c LCD_Init |
0x0000b862 write_gps_pos |
0x0000a13c lcd_frect |
0x00009c42 wait_ms |
0x0000b0b0 lcd_ecirc_line |
0x0000acfe lcd_ellipse |
0x0000b0ca lcd_view_font |
0x0000b3da write_ndigit_number_s |
0x0000b09e lcd_ecircle |
0x0000b624 write_ndigit_number_u_100th |
0x0000a760 lcd_rect |
0x0000b2e6 write_ndigit_number_u |
0x00009bc4 lcd_command |
0x0000abb8 lcd_ellipse_line |
0x0000a5fa lcd_printp |
.text 0x0000b976 0x0 lipo.o |
.text 0x0000b976 0x2680 osd.o |
0x0000c760 lcd_o_circle |
0x0000ba04 heading_conv |
0x0000bd28 draw_homesymbol |
0x0000b976 CheckMKLipo |
0x0000be00 draw_targetsymbol |
0x0000d508 osd |
0x0000c0cc print_position |
0x0000ba78 draw_compass |
0x0000c7c2 lcd_o_circ_line |
0x0000c80e OSD_Screen_Element |
0x0000c47a OSD_Timeout |
0x0000be98 print_statistics |
0x0000bac6 draw_variometer |
0x0000c2ae Show_LastPosition |
.text 0x0000dff6 0x1a52 parameter.o |
0x0000f47c load_setting |
0x0000f562 display_settings_menu |
0x0000f7c6 edit_parameter |
0x0000f624 copy_setting |
0x0000dff6 display_section_menu |
0x0000e170 display_param_menu |
0x0000f38a write_setting |
0x0000e7ae edit_param |
.text 0x0000fa48 0x2 servo.o |
0x0000fa48 servo_test |
.text 0x0000fa4a 0x1422 setup.o |
0x0000fa4a Show_Error_HW12 |
0x0000fb90 Edit_Int_Value |
0x0000ff8e Edit_Baudrate |
0x000109f4 Display_Setup |
0x0000fe9c Edit_YesNo |
0x0001098c Reset_EEprom |
0x00010408 Edit_DisplayMode |
0x000106c4 Edit_DisplayHelligkeit |
0x0000fdaa Edit_OnOff |
0x0000fa7e Edit_Int10th_Value |
0x00010166 Edit_Language |
0x0000fc9a Edit_Int16_Value |
0x00010c98 PKT_Setup |
0x00010518 Edit_DisplayKontrast |
0x000102f0 Edit_Orientation |
.text 0x00010e6c 0x46a followme.o |
0x00010e6c FollowMe |
.text 0x000112d6 0x0 tracking.o |
.text 0x000112d6 0x0 Font8x8.o |
.text 0x000112d6 0x62 messages.o |
0x000112d6 strGet |
0x000112fa Test_Language |
.text 0x00011338 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cmpsf2.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cos.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3x.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixsfsi.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixunssfsi.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(floatsisf.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_cmp.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_inf.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_nan.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_pscA.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_pscB.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_rempio2.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_round.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_sinus.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_split3.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_zero.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(gesf2.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3x.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(round.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(sin.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mintl.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mpack.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powsodd.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powser.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_mulsi3.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodqi4.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodhi4.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodhi4.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodsi4.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodsi4.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_exit.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_copy_data.o) |
.text 0x00011338 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_clear_bss.o) |
.text 0x00011338 0xe C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(strcpy_P.o) |
0x00011338 strcpy_P |
.text 0x00011346 0xe C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(memset.o) |
0x00011346 memset |
.text 0x00011354 0x4a C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
0x00011354 __eerd_block |
.text 0x0001139e 0x4e C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_dword.o) |
0x0001139e __eerd_dword |
.text 0x000113ec 0x30 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_word.o) |
0x000113ec __eerd_word |
.text 0x0001141c 0x44 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
0x0001141c __eewr_block |
.text 0x00011460 0x4e C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_dword.o) |
0x00011460 __eewr_dword |
.text 0x000114ae 0x32 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_word.o) |
0x000114ae __eewr_word |
.text 0x000114e0 0x42 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(itoa.o) |
0x000114e0 itoa |
.text 0x00011522 0x2c C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(utoa.o) |
0x00011522 utoa |
.text 0x0001154e 0x20 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(strrev.o) |
0x0001154e strrev |
.text 0x0001156e 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_prologue.o) |
.text 0x0001156e 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_epilogue.o) |
0x0001156e . = ALIGN (0x2) |
*(.text.*) |
.text.fplib 0x0001156e 0xa C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3.o) |
0x0001156e __subsf3 |
0x00011570 __addsf3 |
.text.fplib 0x00011578 0xc0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) |
0x00011592 __addsf3x |
.text.fplib 0x00011638 0x8 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cmpsf2.o) |
0x00011638 __lesf2 |
0x00011638 __nesf2 |
0x00011638 __eqsf2 |
0x00011638 __cmpsf2 |
0x00011638 __ltsf2 |
.text.fplib 0x00011640 0x6 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cos.o) |
0x00011640 cos |
.text.fplib 0x00011646 0x4 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3.o) |
0x00011646 __divsf3 |
.text.fplib 0x0001164a 0xcc C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3x.o) |
0x00011660 __divsf3x |
0x00011664 __divsf3_pse |
.text.fplib 0x00011716 0xa C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixsfsi.o) |
0x00011716 __fixsfsi |
.text.fplib 0x00011720 0x58 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixunssfsi.o) |
0x00011720 __fixunssfsi |
.text.fplib 0x00011778 0x7a C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(floatsisf.o) |
0x0001177c __floatsisf |
0x00011778 __floatunsisf |
.text.fplib 0x000117f2 0x48 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_cmp.o) |
0x000117f2 __fp_cmp |
.text.fplib 0x0001183a 0xc C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_inf.o) |
0x0001183a __fp_inf |
.text.fplib 0x00011846 0x6 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_nan.o) |
0x00011846 __fp_nan |
.text.fplib 0x0001184c 0xe C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_pscA.o) |
0x0001184c __fp_pscA |
.text.fplib 0x0001185a 0xe C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_pscB.o) |
0x0001185a __fp_pscB |
.text.fplib 0x00011868 0x50 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_rempio2.o) |
0x0001186a __fp_rempio2 |
.text.fplib 0x000118b8 0x22 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_round.o) |
0x000118b8 __fp_round |
.text.fplib 0x000118da 0x22 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_sinus.o) |
0x000118da __fp_sinus |
.text.fplib 0x000118fc 0x44 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_split3.o) |
0x000118fc __fp_split3 |
0x0001190c __fp_splitA |
.text.fplib 0x00011940 0xe C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_zero.o) |
0x00011940 __fp_zero |
0x00011942 __fp_szero |
.text.fplib 0x0001194e 0x8 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(gesf2.o) |
0x0001194e __gtsf2 |
0x0001194e __gesf2 |
.text.fplib 0x00011956 0x4 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3.o) |
0x00011956 __mulsf3 |
.text.fplib 0x0001195a 0xc2 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3x.o) |
0x00011972 __mulsf3_pse |
0x0001196e __mulsf3x |
.text.fplib 0x00011a1c 0x40 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(round.o) |
0x00011a1c round |
.text.fplib 0x00011a5c 0xc C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(sin.o) |
0x00011a5c sin |
.text.fplib 0x00011a68 0x36 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mintl.o) |
0x00011a68 __fp_mintl |
.text.fplib 0x00011a9e 0x1c C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mpack.o) |
0x00011aa2 __fp_mpack_finite |
0x00011a9e __fp_mpack |
.text.fplib 0x00011aba 0x22 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powsodd.o) |
0x00011aba __fp_powsodd |
.text.fplib 0x00011adc 0x4a C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powser.o) |
0x00011adc __fp_powser |
.text.libgcc 0x00011b26 0x3e C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_mulsi3.o) |
0x00011b26 __mulsi3 |
.text.libgcc 0x00011b64 0x18 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodqi4.o) |
0x00011b64 __udivmodqi4 |
.text.libgcc 0x00011b7c 0x28 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodhi4.o) |
0x00011b7c __udivmodhi4 |
.text.libgcc 0x00011ba4 0x26 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodhi4.o) |
0x00011ba4 __divmodhi4 |
0x00011ba4 _div |
.text.libgcc 0x00011bca 0x44 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodsi4.o) |
0x00011bca __udivmodsi4 |
.text.libgcc 0x00011c0e 0x36 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodsi4.o) |
0x00011c0e __divmodsi4 |
.text.libgcc 0x00011c44 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_exit.o) |
.text.libgcc 0x00011c44 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_copy_data.o) |
.text.libgcc 0x00011c44 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_clear_bss.o) |
.text.libgcc 0x00011c44 0x38 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_prologue.o) |
0x00011c44 __prologue_saves__ |
.text.libgcc 0x00011c7c 0x36 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_epilogue.o) |
0x00011c7c __epilogue_restores__ |
0x00011cb2 . = ALIGN (0x2) |
*(.fini9) |
.fini9 0x00011cb2 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_exit.o) |
0x00011cb2 exit |
0x00011cb2 _exit |
*(.fini9) |
*(.fini8) |
*(.fini8) |
*(.fini7) |
*(.fini7) |
*(.fini6) |
*(.fini6) |
*(.fini5) |
*(.fini5) |
*(.fini4) |
*(.fini4) |
*(.fini3) |
*(.fini3) |
*(.fini2) |
*(.fini2) |
*(.fini1) |
*(.fini1) |
*(.fini0) |
.fini0 0x00011cb2 0x2 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_exit.o) |
*(.fini0) |
0x00011cb4 _etext = . |
.data 0x00800100 0x2982 load address 0x00011cb4 |
0x00800100 PROVIDE (__data_start, .) |
*(.data) |
.data 0x00800100 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
.data 0x00800100 0x0 main.o |
.data 0x00800100 0x0 menu.o |
.data 0x00800100 0x7 timer.o |
0x00800104 WarnTime |
0x00800100 BeepMuster |
0x00800102 PoffTime |
.data 0x00800107 0x0 tools.o |
.data 0x00800107 0x3 twimaster.o |
0x00800107 RequiredMotors |
0x00800108 I2CTimeout |
.data 0x0080010a 0x0 uart1.o |
.data 0x0080010a 0x1 usart.o |
0x0080010a txd_complete |
.data 0x0080010b 0x5a motortest.o |
.data 0x00800165 0x0 HAL_HW1_2.o |
.data 0x00800165 0x0 HAL_HW1_3.o |
.data 0x00800165 0x0 HAL_HW3_9.o |
.data 0x00800165 0x0 Wi232.o |
.data 0x00800165 0x0 bluetooth.o |
.data 0x00800165 0x0 connect.o |
.data 0x00800165 0x0 debug.o |
.data 0x00800165 0x0 display.o |
.data 0x00800165 0x0 eeprom.o |
.data 0x00800165 0x0 error.o |
.data 0x00800165 0x0 error_driver.o |
.data 0x00800165 0x0 fifo.o |
.data 0x00800165 0x0 font8x6.o |
.data 0x00800165 0x0 gps.o |
.data 0x00800165 0x0 lcd.o |
.data 0x00800165 0x0 lipo.o |
.data 0x00800165 0x6 osd.o |
0x0080016a min_UBat |
0x00800165 Vario_Threshold_Value |
0x00800169 last_UBat |
0x00800167 Vario_Beep_Up_Interval |
0x00800168 last_RC_Quality |
0x00800166 Vario_Beep_Down_Interval |
.data 0x0080016b 0x2 parameter.o |
0x0080016c target_pos |
0x0080016b target_pos2 |
.data 0x0080016d 0x0 servo.o |
.data 0x0080016d 0x0 setup.o |
.data 0x0080016d 0x0 followme.o |
.data 0x0080016d 0x0 tracking.o |
.data 0x0080016d 0x0 Font8x8.o |
.data 0x0080016d 0x2915 messages.o |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cmpsf2.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cos.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3x.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixsfsi.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixunssfsi.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(floatsisf.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_cmp.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_inf.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_nan.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_pscA.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_pscB.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_rempio2.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_round.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_sinus.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_split3.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_zero.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(gesf2.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3x.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(round.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(sin.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mintl.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mpack.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powsodd.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powser.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_mulsi3.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodqi4.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodhi4.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodhi4.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodsi4.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodsi4.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_exit.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_copy_data.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_clear_bss.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(strcpy_P.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(memset.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_dword.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_word.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_dword.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_word.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(itoa.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(utoa.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(strrev.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_prologue.o) |
.data 0x00802a82 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_epilogue.o) |
*(.data*) |
*(.rodata) |
*(.rodata*) |
*(.gnu.linkonce.d*) |
0x00802a82 . = ALIGN (0x2) |
0x00802a82 _edata = . |
0x00802a82 PROVIDE (__data_end, .) |
.bss 0x00802a82 0x800 |
0x00802a82 PROVIDE (__bss_start, .) |
*(.bss) |
.bss 0x00802a82 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
.bss 0x00802a82 0x3 main.o |
0x00802a84 mode |
0x00802a82 current_hardware |
0x00802a83 hardware |
.bss 0x00802a85 0x0 menu.o |
.bss 0x00802a85 0x1e timer.o |
0x00802a8d WarnCount |
0x00802a8f IdleTimer |
0x00802a93 repeat_speed |
0x00802a89 BeepTime |
0x00802a96 key_rpt |
0x00802a85 CountMilliseconds |
0x00802a94 key_rpts |
0x00802a95 key_lrpt |
0x00802a87 BeepPrio |
0x00802a98 key_press |
0x00802a8b WarnToggle |
0x00802a97 key_long |
0x00802a91 DisplayTime |
0x00802a99 key_state |
.bss 0x00802aa3 0x0 tools.o |
.bss 0x00802aa3 0x11 twimaster.o |
0x00802aac motor_write |
0x00802aa7 BLFlags |
0x00802aae twi_state |
0x00802aa9 MissingMotor |
0x00802aa8 MotorenEin |
0x00802aab motor_read |
0x00802aad dac_channel |
0x00802aaa I2C_TransferActive |
0x00802aa5 BLConfig_WriteMask |
0x00802aa3 BLConfig_ReadMask |
.bss 0x00802ab4 0x0 uart1.o |
.bss 0x00802ab4 0x51 usart.o |
0x00802abc ReceivedBytes |
0x00802abd rxd_buffer_locked |
0x00802ab7 stat_crc_error |
0x00802aba pRxData |
0x00802ab9 RxDataLen |
0x00802ab5 stat_overflow_error |
0x00802ab4 rxFlag |
.bss 0x00802b05 0x1 motortest.o |
0x00802b05 motor_addr |
.bss 0x00802b06 0x0 HAL_HW1_2.o |
.bss 0x00802b06 0x0 HAL_HW1_3.o |
.bss 0x00802b06 0x0 HAL_HW3_9.o |
.bss 0x00802b06 0x0 Wi232.o |
.bss 0x00802b06 0x0 bluetooth.o |
.bss 0x00802b06 0x0 connect.o |
.bss 0x00802b06 0x0 debug.o |
.bss 0x00802b06 0x0 display.o |
.bss 0x00802b06 0x0 eeprom.o |
.bss 0x00802b06 0x0 error.o |
.bss 0x00802b06 0x0 error_driver.o |
.bss 0x00802b06 0x0 fifo.o |
.bss 0x00802b06 0x0 font8x6.o |
.bss 0x00802b06 0x0 gps.o |
.bss 0x00802b06 0x0 lcd.o |
.bss 0x00802b06 0x0 lipo.o |
.bss 0x00802b06 0x19 osd.o |
0x00802b09 COSD_FLAGS2 |
0x00802b07 CellIsChecked |
0x00802b0a NextWP |
0x00802b0b OldWP |
0x00802b13 max_Current |
0x00802b1d old_hh |
0x00802b0e Vario_Beep_Up |
0x00802b11 max_Capacity |
0x00802b0f ftimer |
0x00802b19 max_GroundSpeed |
0x00802b06 AkkuWarnThreshold |
0x00802b0d Vario_Beep_Down |
0x00802b1b max_Altimeter |
0x00802b08 error |
0x00802b17 max_Distance |
0x00802b0c Vario_Threshold |
0x00802b15 max_FlyingTime |
.bss 0x00802b1f 0x6 parameter.o |
0x00802b21 pmode |
0x00802b22 offset2 |
0x00802b1f changes |
0x00802b20 setting |
0x00802b24 offset |
0x00802b23 dmode |
.bss 0x00802b25 0x0 servo.o |
.bss 0x00802b25 0x3 setup.o |
0x00802b25 PKT_Change |
0x00802b26 LCD_Change |
0x00802b27 edit |
.bss 0x00802b28 0x1 followme.o |
0x00802b28 FM_error |
.bss 0x00802b29 0x0 tracking.o |
.bss 0x00802b29 0x0 Font8x8.o |
.bss 0x00802b29 0x0 messages.o |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cmpsf2.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cos.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3x.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixsfsi.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixunssfsi.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(floatsisf.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_cmp.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_inf.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_nan.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_pscA.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_pscB.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_rempio2.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_round.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_sinus.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_split3.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_zero.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(gesf2.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3x.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(round.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(sin.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mintl.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mpack.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powsodd.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powser.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_mulsi3.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodqi4.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodhi4.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodhi4.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodsi4.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodsi4.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_exit.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_copy_data.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_clear_bss.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(strcpy_P.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(memset.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_dword.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_word.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_dword.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_word.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(itoa.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(utoa.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(strrev.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_prologue.o) |
.bss 0x00802b29 0x0 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_epilogue.o) |
*(.bss*) |
*(COMMON) |
COMMON 0x00802b29 0x21 main.o |
0x00802b29 version |
0x00802b2b accumulator |
0x00802b2f mk_param_struct |
0x00802b31 MotorTest |
0x00802b41 samples |
0x00802b43 MK_LowBat |
0x00802b44 Vin |
0x00802b48 volt_avg |
COMMON 0x00802b4a 0xa timer.o |
0x00802b4a Display_on |
0x00802b4b timer |
0x00802b4d abo_timer |
0x00802b4f String_Buffer |
COMMON 0x00802b54 0x68 twimaster.o |
0x00802b54 BLConfig |
0x00802b5c Motor |
COMMON 0x00802bbc 0x10f usart.o |
0x00802bbc rxd_buffer |
0x00802c70 buffer |
0x00802c8e rx_byte |
0x00802c8f txd_buffer |
COMMON 0x00802ccb 0x4 motortest.o |
0x00802ccb i2c_state |
0x00802ccc mmode |
0x00802ccd v |
0x00802cce m |
COMMON 0x00802ccf 0xa8 eeprom.o |
0x00802ccf OSD_ScreenMode |
0x00802cd0 OSD_mAh_Warning |
0x00802cd2 LastLongitude |
0x00802cd6 LCD_ORIENTATION |
0x00802cd7 PKT_Accutyp |
0x00802cd8 U02SV2 |
0x00802cd9 Lipo_UOffset |
0x00802cdb FM_Speed |
0x00802cdd LCD_DisplayMode |
0x00802cde OSD_VarioBeep |
0x00802cdf bt_name |
0x00802cea LCD_Helligkeit |
0x00802ceb PKT_StartInfo |
0x00802cec PKTWayPointDirectory |
0x00802d0f WiTXTO |
0x00802d10 OSD_InvertOut |
0x00802d11 OSD_LEDform |
0x00802d12 OSD_RCErrorbeep |
0x00802d13 UseBT |
0x00802d14 WiNetworkGroup |
0x00802d15 USBBT |
0x00802d16 WiUartMTU |
0x00802d17 BTIsSlave |
0x00802d18 UseWi |
0x00802d19 gps_UsedDevName |
0x00802d2d gps_UsedGPSMouse |
0x00802d2e OSD_HomeMKView |
0x00802d2f OSD_LipoBar |
0x00802d30 FM_Radius |
0x00802d32 PKT_IdleBeep |
0x00802d33 BTIsSet |
0x00802d34 WiIsSet |
0x00802d35 DisplayLanguage |
0x00802d36 gps_UseGPS |
0x00802d37 OSD_Fallspeed |
0x00802d38 LastLatitude |
0x00802d3c WiNetworkMode |
0x00802d3d PKT_Baudrate |
0x00802d3e Debug |
0x00802d3f bt_pin |
0x00802d44 WiTXRXChannel |
0x00802d45 gps_UsedMac |
0x00802d53 PKTWayPoint |
0x00802d72 LCD_Kontrast |
0x00802d73 OSD_SendOSD |
0x00802d74 DisplayTimeout |
0x00802d75 FM_Refresh |
COMMON 0x00802d77 0x487 lcd.o |
0x00802d77 display_page_counter |
0x00802d78 display_buffer |
0x00803178 display_buffer_counter |
0x00803179 display_mode |
0x0080317a line_buffer |
0x008031fa display_buffer_pointer |
0x008031fc lcd_xpos |
0x008031fd lcd_ypos |
COMMON 0x008031fe 0x66 osd.o |
0x008031fe Element |
0x008031ff BattLowVoltageWarning |
0x00803200 last5pos |
0x0080325b OSD_active |
0x0080325c Flags_GlobalConfig |
0x0080325d Flags_GlobalConfig3 |
0x0080325e Flags_ExtraConfig |
0x0080325f naviData |
0x00803261 cells |
0x00803262 heading_home |
COMMON 0x00803264 0x1 parameter.o |
0x00803264 ii |
COMMON 0x00803265 0x1d setup.o |
0x00803265 Pre16 |
0x00803267 EditString |
0x0080327c LCD_Orientation |
0x0080327d bt_name_len |
0x0080327e Pre |
0x00803280 length_tmp |
0x00803281 spalte |
0x00803282 PROVIDE (__bss_end, .) |
0x00011cb4 __data_load_start = LOADADDR (.data) |
0x00014636 __data_load_end = (__data_load_start + SIZEOF (.data)) |
.noinit 0x00803282 0x0 |
0x00803282 PROVIDE (__noinit_start, .) |
*(.noinit*) |
0x00803282 PROVIDE (__noinit_end, .) |
0x00803282 _end = . |
0x00803282 PROVIDE (__heap_start, .) |
.eeprom 0x00810000 0x7c0 |
*(.eeprom*) |
.eeprom 0x00810000 0x7c0 eeprom.o |
0x00810028 EE_LCD_Helligkeit |
0x00810015 EE_OSD_VarioBeep |
0x00810005 EE_LastLongitude |
0x00810021 EE_WiIsSet |
0x00810034 EE_BTPin |
0x00810022 EE_BTIsSlave |
0x00810014 EE_OSD_HomeMKView |
0x00810025 EE_Debug |
0x00810044 EE_gps_UsedDevName |
0x00810011 EE_OSD_ScreenMode |
0x00810023 EE_UseBT |
0x00810024 EE_UseWi |
0x00810031 EE_DisplayLanguage |
0x0081000f EE_PKT_Baudrate |
0x00810030 EE_WiTXRXChannel |
0x00810017 EE_OSD_SendOSD |
0x0081001e EE_PKT_StartInfo |
0x0081002e EE_WiNetworkMode |
0x00810067 EE_gps_UsedGPSMouse |
0x00810066 EE_gps_UseGPS |
0x0081000d EE_FM_Refresh |
0x00810032 EE_DisplayTimeout |
0x0081001c EE_Lipo_UOffset |
0x00810019 EE_OSD_InvertOut |
0x00810058 EE_gps_UsedMac |
0x00810020 EE_BTIsSet |
0x0081002b EE_LCD_Orientation |
0x00810018 EE_OSD_LEDform |
0x00810009 EE_FM_Radius |
0x00810117 EEWayPointList |
0x0081002f EE_WiNetworkGroup |
0x0081002d EE_WiTXTO |
0x00810001 EE_LastLatitude |
0x00810039 EE_BTName |
0x0081001b EE_PKT_Accutyp |
0x00810027 EE_USBBT |
0x0081002c EE_WiUartMTU |
0x00810016 EE_OSD_Fallspeed |
0x00810033 EE_LowBat |
0x0081001a EE_OSD_RCErrorbeep |
0x00810026 EE_U02SV2 |
0x0081001f EE_PKT_IdleBeep |
0x00810012 EE_OSD_mAh_Warning |
0x00810000 EE_PKTVersion |
0x00810068 EEWPDirectory |
0x00810010 EE_OSD_LipoBar |
0x0081000b EE_FM_Speed |
0x0081002a EE_LCD_DisplayMode |
0x00810029 EE_LCD_Kontrast |
0x008107c0 __eeprom_end = . |
.fuse |
*(.fuse) |
*(.lfuse) |
*(.hfuse) |
*(.efuse) |
.lock |
*(.lock*) |
.signature |
*(.signature*) |
.stab 0x00000000 0x3390 |
*(.stab) |
.stab 0x00000000 0x6b4 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
.stab 0x000006b4 0x78 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3.o) |
0x84 (size before relaxing) |
.stab 0x0000072c 0x4bc C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) |
0x4c8 (size before relaxing) |
.stab 0x00000be8 0x90 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cmpsf2.o) |
0x9c (size before relaxing) |
.stab 0x00000c78 0x54 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cos.o) |
0x60 (size before relaxing) |
.stab 0x00000ccc 0x48 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3.o) |
0x54 (size before relaxing) |
.stab 0x00000d14 0x510 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3x.o) |
0x51c (size before relaxing) |
.stab 0x00001224 0x6c C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixsfsi.o) |
0x78 (size before relaxing) |
.stab 0x00001290 0x240 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixunssfsi.o) |
0x24c (size before relaxing) |
.stab 0x000014d0 0x318 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(floatsisf.o) |
0x324 (size before relaxing) |
.stab 0x000017e8 0x1e0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_cmp.o) |
0x1ec (size before relaxing) |
.stab 0x000019c8 0x78 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_inf.o) |
0x84 (size before relaxing) |
.stab 0x00001a40 0x54 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_nan.o) |
0x60 (size before relaxing) |
.stab 0x00001a94 0x84 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_pscA.o) |
0x90 (size before relaxing) |
.stab 0x00001b18 0x84 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_pscB.o) |
0x90 (size before relaxing) |
.stab 0x00001b9c 0x21c C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_rempio2.o) |
0x228 (size before relaxing) |
.stab 0x00001db8 0xfc C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_round.o) |
0x108 (size before relaxing) |
.stab 0x00001eb4 0xfc C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_sinus.o) |
0x108 (size before relaxing) |
.stab 0x00001fb0 0x1d4 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_split3.o) |
0x1e0 (size before relaxing) |
.stab 0x00002184 0x90 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_zero.o) |
0x9c (size before relaxing) |
.stab 0x00002214 0x6c C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(gesf2.o) |
0x78 (size before relaxing) |
.stab 0x00002280 0x48 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3.o) |
0x54 (size before relaxing) |
.stab 0x000022c8 0x4d4 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3x.o) |
0x4e0 (size before relaxing) |
.stab 0x0000279c 0x1b0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(round.o) |
0x1bc (size before relaxing) |
.stab 0x0000294c 0x78 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(sin.o) |
0x84 (size before relaxing) |
.stab 0x000029c4 0x174 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mintl.o) |
0x180 (size before relaxing) |
.stab 0x00002b38 0xe4 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mpack.o) |
0xf0 (size before relaxing) |
.stab 0x00002c1c 0xfc C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powsodd.o) |
0x108 (size before relaxing) |
.stab 0x00002d18 0x1ec C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powser.o) |
0x1f8 (size before relaxing) |
.stab 0x00002f04 0x6c C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(strcpy_P.o) |
0x78 (size before relaxing) |
.stab 0x00002f70 0x6c C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(memset.o) |
0x78 (size before relaxing) |
.stab 0x00002fdc 0x1b0 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(itoa.o) |
0x1bc (size before relaxing) |
.stab 0x0000318c 0x12c C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(utoa.o) |
0x138 (size before relaxing) |
.stab 0x000032b8 0xd8 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(strrev.o) |
0xe4 (size before relaxing) |
.stabstr 0x00000000 0xa06 |
*(.stabstr) |
.stabstr 0x00000000 0xa06 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
.stab.excl |
*(.stab.excl) |
.stab.exclstr |
*(.stab.exclstr) |
.stab.index |
*(.stab.index) |
.stab.indexstr |
*(.stab.indexstr) |
.comment |
*(.comment) |
.debug |
*(.debug) |
.line |
*(.line) |
.debug_srcinfo |
*(.debug_srcinfo) |
.debug_sfnames |
*(.debug_sfnames) |
.debug_aranges 0x00000000 0x78 |
*(.debug_aranges) |
.debug_aranges |
0x00000000 0x14 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
.debug_aranges |
0x00000014 0x14 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_dword.o) |
.debug_aranges |
0x00000028 0x14 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_word.o) |
.debug_aranges |
0x0000003c 0x14 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
.debug_aranges |
0x00000050 0x14 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_dword.o) |
.debug_aranges |
0x00000064 0x14 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_word.o) |
.debug_pubnames |
0x00000000 0xd0 |
*(.debug_pubnames) |
.debug_pubnames |
0x00000000 0x23 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
.debug_pubnames |
0x00000023 0x23 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_dword.o) |
.debug_pubnames |
0x00000046 0x22 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_word.o) |
.debug_pubnames |
0x00000068 0x23 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
.debug_pubnames |
0x0000008b 0x23 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_dword.o) |
.debug_pubnames |
0x000000ae 0x22 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_word.o) |
.debug_info 0x00000000 0x6af |
*(.debug_info) |
.debug_info 0x00000000 0xfd C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
.debug_info 0x000000fd 0x153 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_dword.o) |
.debug_info 0x00000250 0x131 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_word.o) |
.debug_info 0x00000381 0xf9 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
.debug_info 0x0000047a 0x151 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_dword.o) |
.debug_info 0x000005cb 0xe4 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_word.o) |
*(.gnu.linkonce.wi.*) |
.debug_abbrev 0x00000000 0x404 |
*(.debug_abbrev) |
.debug_abbrev 0x00000000 0x9a C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
.debug_abbrev 0x0000009a 0xc6 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_dword.o) |
.debug_abbrev 0x00000160 0xc6 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_word.o) |
.debug_abbrev 0x00000226 0x91 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
.debug_abbrev 0x000002b7 0xc8 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_dword.o) |
.debug_abbrev 0x0000037f 0x85 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_word.o) |
.debug_line 0x00000000 0x520 |
*(.debug_line) |
.debug_line 0x00000000 0xd5 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
.debug_line 0x000000d5 0xe7 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_dword.o) |
.debug_line 0x000001bc 0xda C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_word.o) |
.debug_line 0x00000296 0xd5 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
.debug_line 0x0000036b 0xe1 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_dword.o) |
.debug_line 0x0000044c 0xd4 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_word.o) |
.debug_frame |
*(.debug_frame) |
.debug_str 0x00000000 0x1b9 |
*(.debug_str) |
.debug_str 0x00000000 0xb5 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
0xe9 (size before relaxing) |
.debug_str 0x000000b5 0x40 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_dword.o) |
0xf6 (size before relaxing) |
.debug_str 0x000000f5 0x34 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_word.o) |
0xf3 (size before relaxing) |
.debug_str 0x00000129 0x32 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
0xe9 (size before relaxing) |
.debug_str 0x0000015b 0x33 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_dword.o) |
0xf7 (size before relaxing) |
.debug_str 0x0000018e 0x2b C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_word.o) |
0xea (size before relaxing) |
.debug_loc |
*(.debug_loc) |
.debug_macinfo |
*(.debug_macinfo) |
OUTPUT(PKT_3_63a_MartinR_HW_1_3_de.elf elf32-avr) |
LOAD linker stubs |
Cross Reference Table |
Symbol File |
AkkuWarnThreshold osd.o |
BLConfig twimaster.o |
BLConfig_ReadMask twimaster.o |
BLConfig_WriteMask twimaster.o |
BLFlags twimaster.o |
motortest.o |
BTIsSet eeprom.o |
BTIsSlave eeprom.o |
BattLowVoltageWarning osd.o |
BeepMuster timer.o |
HAL_HW1_3.o |
BeepPrio timer.o |
BeepTime timer.o |
HAL_HW1_3.o |
COSD_FLAGS2 osd.o |
CellIsChecked osd.o |
CheckDelay timer.o |
motortest.o |
twimaster.o |
CheckMKLipo osd.o |
CountMilliseconds timer.o |
Debug setup.o |
eeprom.o |
menu.o |
main.o |
Decode64 usart.o |
followme.o |
parameter.o |
osd.o |
display.o |
main.o |
Delay_ms timer.o |
Delete_EEPROM eeprom.o |
setup.o |
DisplayLanguage messages.o |
setup.o |
parameter.o |
eeprom.o |
tools.o |
menu.o |
DisplayTime timer.o |
DisplayTimeout setup.o |
eeprom.o |
timer.o |
Display_Setup setup.o |
Display_on HAL_HW1_3.o |
timer.o |
EEWPDirectory eeprom.o |
EEWayPointList eeprom.o |
EEWayPointList_Clear eeprom.o |
EE_BTIsSet eeprom.o |
EE_BTIsSlave eeprom.o |
EE_BTName eeprom.o |
EE_BTPin eeprom.o |
EE_Debug eeprom.o |
EE_DisplayLanguage eeprom.o |
EE_DisplayTimeout eeprom.o |
EE_FM_Radius eeprom.o |
EE_FM_Refresh eeprom.o |
EE_FM_Speed eeprom.o |
EE_LCD_DisplayMode eeprom.o |
EE_LCD_Helligkeit eeprom.o |
EE_LCD_Kontrast eeprom.o |
EE_LCD_Orientation eeprom.o |
EE_LastLatitude eeprom.o |
EE_LastLongitude eeprom.o |
EE_Lipo_UOffset eeprom.o |
EE_LowBat eeprom.o |
EE_OSD_Fallspeed eeprom.o |
EE_OSD_HomeMKView eeprom.o |
EE_OSD_InvertOut eeprom.o |
EE_OSD_LEDform eeprom.o |
EE_OSD_LipoBar eeprom.o |
EE_OSD_RCErrorbeep eeprom.o |
EE_OSD_ScreenMode eeprom.o |
EE_OSD_SendOSD eeprom.o |
EE_OSD_VarioBeep eeprom.o |
EE_OSD_mAh_Warning eeprom.o |
EE_PKTVersion eeprom.o |
EE_PKT_Accutyp eeprom.o |
EE_PKT_Baudrate eeprom.o |
EE_PKT_IdleBeep eeprom.o |
EE_PKT_StartInfo eeprom.o |
EE_U02SV2 eeprom.o |
EE_USBBT eeprom.o |
EE_UseBT eeprom.o |
EE_UseWi eeprom.o |
EE_WiIsSet eeprom.o |
EE_WiNetworkGroup eeprom.o |
EE_WiNetworkMode eeprom.o |
EE_WiTXRXChannel eeprom.o |
EE_WiTXTO eeprom.o |
EE_WiUartMTU eeprom.o |
EE_gps_UseGPS eeprom.o |
EE_gps_UsedDevName eeprom.o |
EE_gps_UsedGPSMouse eeprom.o |
EE_gps_UsedMac eeprom.o |
EditString setup.o |
Edit_Baudrate setup.o |
Edit_DisplayHelligkeit setup.o |
Edit_DisplayKontrast setup.o |
Edit_DisplayMode setup.o |
Edit_Int10th_Value setup.o |
Edit_Int16_Value setup.o |
Edit_Int_Value setup.o |
Edit_Language setup.o |
Edit_OnOff setup.o |
Edit_Orientation setup.o |
Edit_YesNo setup.o |
Element followme.o |
osd.o |
FM_Radius eeprom.o |
FM_Refresh eeprom.o |
FM_Speed eeprom.o |
FM_error followme.o |
Flags_ExtraConfig followme.o |
osd.o |
Flags_GlobalConfig followme.o |
osd.o |
Flags_GlobalConfig3 followme.o |
osd.o |
FollowMe followme.o |
menu.o |
Font8x8 Font8x8.o |
lcd.o |
I2CTimeout twimaster.o |
I2C_Init twimaster.o |
I2C_ReadBLConfig twimaster.o |
I2C_Reset twimaster.o |
I2C_TransferActive twimaster.o |
motortest.o |
I2C_WriteBLConfig twimaster.o |
IdleTimer timer.o |
InitHWPorts HAL_HW1_3.o |
main.o |
LCD_Change setup.o |
LCD_DisplayMode setup.o |
lcd.o |
eeprom.o |
LCD_Helligkeit setup.o |
lcd.o |
eeprom.o |
HAL_HW1_3.o |
LCD_Init lcd.o |
HAL_HW1_3.o |
LCD_Kontrast setup.o |
lcd.o |
eeprom.o |
LCD_ORIENTATION lcd.o |
eeprom.o |
LCD_Orientation setup.o |
LastLatitude eeprom.o |
main.o |
LastLongitude eeprom.o |
main.o |
Lipo_UOffset eeprom.o |
MK_LowBat messages.o |
followme.o |
setup.o |
parameter.o |
osd.o |
lipo.o |
lcd.o |
eeprom.o |
connect.o |
Wi232.o |
HAL_HW1_3.o |
usart.o |
twimaster.o |
tools.o |
timer.o |
menu.o |
main.o |
MissingMotor twimaster.o |
Motor motortest.o |
twimaster.o |
MotorTest HAL_HW1_3.o |
motortest.o |
twimaster.o |
main.o |
MotorenEin twimaster.o |
motortest.o |
New_Baudrate eeprom.o |
NextWP osd.o |
OSD_Fallspeed osd.o |
eeprom.o |
OSD_HomeMKView osd.o |
eeprom.o |
OSD_InvertOut osd.o |
eeprom.o |
OSD_LEDform osd.o |
eeprom.o |
OSD_LipoBar osd.o |
eeprom.o |
OSD_RCErrorbeep setup.o |
osd.o |
eeprom.o |
OSD_ScreenMode osd.o |
eeprom.o |
OSD_Screen_Element osd.o |
followme.o |
OSD_SendOSD eeprom.o |
usart.o |
OSD_Setup setup.o |
OSD_Timeout osd.o |
followme.o |
OSD_VarioBeep osd.o |
eeprom.o |
OSD_active followme.o |
osd.o |
usart.o |
OSD_mAh_Warning osd.o |
eeprom.o |
OldWP osd.o |
Old_Baudrate eeprom.o |
PC_Fast_Connect tools.o |
PKTWayPoint eeprom.o |
PKTWayPointDirectory eeprom.o |
PKT_Accutyp eeprom.o |
PKT_Baudrate eeprom.o |
PKT_Change setup.o |
PKT_IdleBeep eeprom.o |
timer.o |
PKT_Setup setup.o |
tools.o |
menu.o |
PKT_StartInfo setup.o |
eeprom.o |
main.o |
PKT_Tools tools.o |
menu.o |
PoffTime timer.o |
Pre setup.o |
Pre16 setup.o |
RAM_Checksum twimaster.o |
ReadLastPosition eeprom.o |
main.o |
ReadParameter eeprom.o |
HAL_HW1_3.o |
ReceivedBytes usart.o |
RequiredMotors twimaster.o |
Reset_EEprom setup.o |
RxDataLen usart.o |
Search_BL motortest.o |
SendMotorData motortest.o |
SendOutData usart.o |
followme.o |
parameter.o |
osd.o |
display.o |
motortest.o |
main.o |
SetDelay timer.o |
motortest.o |
twimaster.o |
Show_Error_HW menu.o |
tools.o |
Show_Error_HW12 setup.o |
Show_LastPosition osd.o |
Show_Version menu.o |
tools.o |
String_Buffer timer.o |
SwitchToFC usart.o |
followme.o |
parameter.o |
osd.o |
display.o |
motortest.o |
main.o |
SwitchToGPS usart.o |
SwitchToMAG usart.o |
SwitchToNC usart.o |
followme.o |
osd.o |
display.o |
SwitchToWi232 usart.o |
Test_HB tools.o |
Test_Language messages.o |
menu.o |
Timer0_Init timer.o |
HAL_HW1_3.o |
Timer1_Init timer.o |
HAL_HW1_3.o |
Timer2_Init timer.o |
HAL_HW1_3.o |
U02SV2 eeprom.o |
USART_DisableTXD usart.o |
USART_EnableTXD usart.o |
USART_Init usart.o |
HAL_HW1_3.o |
USART_getc usart.o |
USART_putc usart.o |
main.o |
USART_puts usart.o |
USART_puts_p usart.o |
USART_request_mk_data usart.o |
USBBT eeprom.o |
Update_PKT menu.o |
setup.o |
UseBT eeprom.o |
UseWi eeprom.o |
Vario_Beep_Down osd.o |
Vario_Beep_Down_Interval osd.o |
Vario_Beep_Up osd.o |
Vario_Beep_Up_Interval osd.o |
Vario_Threshold osd.o |
Vario_Threshold_Value osd.o |
Vin setup.o |
lipo.o |
connect.o |
tools.o |
menu.o |
main.o |
WarnCount timer.o |
WarnTime timer.o |
WarnToggle timer.o |
WiIsSet eeprom.o |
WiNetworkGroup eeprom.o |
WiNetworkMode eeprom.o |
WiTXRXChannel eeprom.o |
WiTXTO eeprom.o |
WiUartMTU eeprom.o |
WriteBTInitFlag eeprom.o |
WriteBTMasterFlag eeprom.o |
WriteBTSlaveFlag eeprom.o |
WriteLastPosition eeprom.o |
osd.o |
main.o |
WriteParameter eeprom.o |
setup.o |
WriteWiInitFlag eeprom.o |
__addsf3 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3.o) |
setup.o |
lcd.o |
__addsf3x C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powser.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_sinus.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3.o) |
__bad_interrupt C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__bss_end C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_clear_bss.o) |
__bss_start C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_clear_bss.o) |
__cmpsf2 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cmpsf2.o) |
__data_end C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_copy_data.o) |
__data_load_start C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_copy_data.o) |
__data_start C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_copy_data.o) |
__divmodhi4 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodhi4.o) |
setup.o |
parameter.o |
osd.o |
motortest.o |
__divmodsi4 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodsi4.o) |
followme.o |
lcd.o |
__divsf3 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3.o) |
osd.o |
lcd.o |
__divsf3_pse C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3x.o) |
__divsf3x C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3.o) |
__do_clear_bss C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_clear_bss.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_word.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_dword.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_word.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_dword.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
messages.o |
Font8x8.o |
tracking.o |
followme.o |
setup.o |
servo.o |
parameter.o |
osd.o |
lipo.o |
lcd.o |
gps.o |
font8x6.o |
fifo.o |
error_driver.o |
error.o |
eeprom.o |
display.o |
debug.o |
connect.o |
bluetooth.o |
Wi232.o |
HAL_HW3_9.o |
HAL_HW1_3.o |
HAL_HW1_2.o |
motortest.o |
usart.o |
uart1.o |
twimaster.o |
tools.o |
timer.o |
menu.o |
main.o |
__do_copy_data C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_copy_data.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_word.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_dword.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_word.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_dword.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
messages.o |
Font8x8.o |
tracking.o |
followme.o |
setup.o |
servo.o |
parameter.o |
osd.o |
lipo.o |
lcd.o |
gps.o |
font8x6.o |
fifo.o |
error_driver.o |
error.o |
eeprom.o |
display.o |
debug.o |
connect.o |
bluetooth.o |
Wi232.o |
HAL_HW3_9.o |
HAL_HW1_3.o |
HAL_HW1_2.o |
motortest.o |
usart.o |
uart1.o |
twimaster.o |
tools.o |
timer.o |
menu.o |
main.o |
__eerd_block C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
eeprom.o |
__eerd_dword C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_dword.o) |
eeprom.o |
__eerd_word C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_word.o) |
eeprom.o |
__eewr_block C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
eeprom.o |
__eewr_dword C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_dword.o) |
eeprom.o |
__eewr_word C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_word.o) |
eeprom.o |
__epilogue_restores__ C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_epilogue.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
__eqsf2 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cmpsf2.o) |
__fixsfsi C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixsfsi.o) |
osd.o |
lcd.o |
__fixunssfsi C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixunssfsi.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixsfsi.o) |
setup.o |
lcd.o |
HAL_HW1_3.o |
__floatsisf C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(floatsisf.o) |
setup.o |
osd.o |
lcd.o |
HAL_HW1_3.o |
__floatunsisf C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(floatsisf.o) |
__fp_cmp C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_cmp.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(gesf2.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cmpsf2.o) |
__fp_inf C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_inf.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) |
__fp_mintl C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mintl.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(round.o) |
__fp_mpack C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mpack.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(round.o) |
__fp_mpack_finite C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_mpack.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_rempio2.o) |
__fp_nan C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_nan.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_rempio2.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) |
__fp_powser C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powser.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powsodd.o) |
__fp_powsodd C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powsodd.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_sinus.o) |
__fp_pscA C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_pscA.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) |
__fp_pscB C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_pscB.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) |
__fp_rempio2 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_rempio2.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(sin.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cos.o) |
__fp_round C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_round.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_sinus.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3.o) |
__fp_sinus C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_sinus.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(sin.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cos.o) |
__fp_split3 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_split3.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) |
__fp_splitA C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_split3.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(round.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_rempio2.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixunssfsi.o) |
__fp_szero C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_zero.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(round.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixsfsi.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(divsf3x.o) |
__fp_zero C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_zero.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fixunssfsi.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3x.o) |
__gesf2 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(gesf2.o) |
__gtsf2 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(gesf2.o) |
osd.o |
__heap_end C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__init C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__lesf2 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cmpsf2.o) |
__ltsf2 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cmpsf2.o) |
osd.o |
__mulsf3 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powsodd.o) |
setup.o |
osd.o |
lcd.o |
HAL_HW1_3.o |
__mulsf3_pse C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3x.o) |
__mulsf3x C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3x.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(fp_powser.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(mulsf3.o) |
__mulsi3 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_mulsi3.o) |
lcd.o |
__nesf2 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cmpsf2.o) |
__prologue_saves__ C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_prologue.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eewr_block.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(eerd_block.o) |
__stack C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
main.o |
__subsf3 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(addsf3.o) |
lcd.o |
__udivmodhi4 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodhi4.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(utoa.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(itoa.o) |
C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodhi4.o) |
osd.o |
lcd.o |
fifo.o |
timer.o |
__udivmodqi4 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodqi4.o) |
osd.o |
lcd.o |
usart.o |
__udivmodsi4 C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_udivmodsi4.o) |
C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodsi4.o) |
osd.o |
main.o |
__vector_1 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_10 timer.o |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_11 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_12 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_13 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_14 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_15 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_16 timer.o |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_17 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_18 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_19 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_2 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_20 usart.o |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_21 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_22 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_23 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_24 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_25 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_26 twimaster.o |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_27 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_28 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_29 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_3 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_30 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_4 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_5 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_6 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_7 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_8 C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_9 timer.o |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vector_default C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
__vectors C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
_div C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_divmodhi4.o) |
_exit C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_exit.o) |
_send_msg error.o |
abo_timer followme.o |
osd.o |
timer.o |
accumulator setup.o |
lipo.o |
connect.o |
tools.o |
menu.o |
main.o |
bt_name eeprom.o |
bt_name_len setup.o |
bt_pin eeprom.o |
buffer motortest.o |
usart.o |
cells osd.o |
changes parameter.o |
clr_D_LIGHT HAL_HW1_3.o |
timer.o |
copy_line lcd.o |
copy_setting parameter.o |
cos C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(cos.o) |
lcd.o |
current_hardware main.o |
display.o |
motortest.o |
usart.o |
dac_channel twimaster.o |
directions_p osd.o |
display_buffer lcd.o |
display_buffer_counter lcd.o |
display_buffer_pointer lcd.o |
display_data display.o |
menu.o |
display_debug menu.o |
display_mode lcd.o |
display_page_counter lcd.o |
display_param_menu parameter.o |
display_section_menu parameter.o |
display_settings_menu parameter.o |
dmode parameter.o |
draw_compass osd.o |
draw_homesymbol osd.o |
draw_targetsymbol osd.o |
draw_variometer osd.o |
edit setup.o |
edit_param parameter.o |
edit_parameter parameter.o |
menu.o |
error osd.o |
exit C:/WinAVR_20060421/lib/gcc/avr/3.4.6/avr5\libgcc.a(_exit.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
fifo_clear fifo.o |
fifo_cmp_pgm fifo.o |
fifo_getcount fifo.o |
fifo_init fifo.o |
fifo_is_empty fifo.o |
fifo_is_full fifo.o |
fifo_read fifo.o |
fifo_search fifo.o |
fifo_strstr_pgm fifo.o |
fifo_write fifo.o |
font8x6 font8x6.o |
lcd.o |
ftimer osd.o |
get_key_long timer.o |
parameter.o |
menu.o |
get_key_long_rpt timer.o |
get_key_long_rpt_sp timer.o |
setup.o |
parameter.o |
display.o |
motortest.o |
menu.o |
get_key_press timer.o |
messages.o |
followme.o |
setup.o |
parameter.o |
osd.o |
display.o |
motortest.o |
tools.o |
menu.o |
main.o |
get_key_rpt timer.o |
get_key_short timer.o |
parameter.o |
eeprom.o |
tools.o |
menu.o |
gps_UseGPS eeprom.o |
gps_UsedDevName eeprom.o |
gps_UsedGPSMouse eeprom.o |
gps_UsedMac eeprom.o |
hardware main.o |
followme.o |
osd.o |
display.o |
motortest.o |
usart.o |
menu.o |
hdigit lcd.o |
heading_conv osd.o |
heading_home followme.o |
osd.o |
i2c_state motortest.o |
ii parameter.o |
itoa C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(itoa.o) |
lcd.o |
motortest.o |
key_long timer.o |
key_lrpt timer.o |
key_press timer.o |
key_rpt timer.o |
key_rpts timer.o |
key_state timer.o |
last5pos osd.o |
last_RC_Quality osd.o |
last_UBat osd.o |
lcd_circ_line lcd.o |
lcd_circle lcd.o |
osd.o |
lcd_cls lcd.o |
messages.o |
followme.o |
setup.o |
parameter.o |
osd.o |
eeprom.o |
display.o |
motortest.o |
tools.o |
menu.o |
main.o |
lcd_cls_line lcd.o |
parameter.o |
motortest.o |
main.o |
lcd_command lcd.o |
lcd_ecirc_line lcd.o |
parameter.o |
lcd_ecircle lcd.o |
parameter.o |
lcd_ellipse lcd.o |
osd.o |
lcd_ellipse_line lcd.o |
osd.o |
lcd_fcircle lcd.o |
osd.o |
lcd_frect lcd.o |
setup.o |
parameter.o |
osd.o |
motortest.o |
main.o |
lcd_line lcd.o |
osd.o |
lcd_o_circ_line osd.o |
lcd_o_circle osd.o |
lcd_plot lcd.o |
osd.o |
lcd_print lcd.o |
lcd_print_at lcd.o |
parameter.o |
lcd_print_hex lcd.o |
lcd_print_hex_at lcd.o |
motortest.o |
lcd_printp lcd.o |
eeprom.o |
motortest.o |
lcd_printp_at lcd.o |
followme.o |
setup.o |
parameter.o |
osd.o |
eeprom.o |
display.o |
motortest.o |
tools.o |
menu.o |
main.o |
lcd_printpj lcd.o |
lcd_printpj_at lcd.o |
lcd_printpns lcd.o |
lcd_printpns_at lcd.o |
osd.o |
lcd_putc lcd.o |
parameter.o |
osd.o |
lcd_putc_jeti lcd.o |
osd.o |
lcd_puts_at lcd.o |
messages.o |
followme.o |
setup.o |
parameter.o |
osd.o |
display.o |
motortest.o |
tools.o |
menu.o |
main.o |
lcd_rect lcd.o |
osd.o |
lcd_view_font lcd.o |
lcd_write_number_u lcd.o |
main.o |
lcd_write_number_u_at lcd.o |
main.o |
lcd_xpos lcd.o |
lcd_ypos lcd.o |
length_tmp setup.o |
line_buffer lcd.o |
load_setting parameter.o |
followme.o |
osd.o |
main.o |
m motortest.o |
main main.o |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm644p.o |
main_menu menu.o |
main.o |
max_Altimeter osd.o |
max_Capacity osd.o |
max_Current osd.o |
max_Distance osd.o |
max_FlyingTime osd.o |
max_GroundSpeed osd.o |
memset C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(memset.o) |
motortest.o |
menu_choose menu.o |
parameter.o |
menu_choose2 menu.o |
setup.o |
parameter.o |
tools.o |
menu_choose3 menu.o |
parameter.o |
menu_set_cursor menu.o |
min_UBat osd.o |
mk_param_struct followme.o |
parameter.o |
osd.o |
main.o |
mmode setup.o |
motortest.o |
mode main.o |
followme.o |
parameter.o |
osd.o |
display.o |
usart.o |
motor motortest.o |
motor_addr motortest.o |
motor_read twimaster.o |
motortest.o |
motor_test motortest.o |
tools.o |
menu.o |
motor_write twimaster.o |
motortest.o |
naviData followme.o |
osd.o |
new_line lcd.o |
offset parameter.o |
offset2 parameter.o |
old_hh osd.o |
osd osd.o |
menu.o |
pRxData usart.o |
followme.o |
parameter.o |
osd.o |
main.o |
param_config parameter.o |
param_copyright menu.o |
param_items_rx parameter.o |
param_menuitems_Accu setup.o |
param_menuitems_FOLLOWME setup.o |
param_menuitems_GPS setup.o |
param_menuitems_OSD setup.o |
param_menuitems_bt setup.o |
param_menuitems_fc menu.o |
param_menuitems_lcd setup.o |
param_menuitems_nc menu.o |
param_menuitems_no menu.o |
param_menuitems_pkt setup.o |
param_menuitems_wi setup.o |
param_names parameter.o |
param_pages parameter.o |
paste_line lcd.o |
pmode parameter.o |
print_display lcd.o |
print_display_at lcd.o |
display.o |
print_position osd.o |
print_statistics osd.o |
repeat_speed timer.o |
rose osd.o |
round C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(round.o) |
lcd.o |
rxFlag usart.o |
rx_byte usart.o |
rxd_buffer display.o |
usart.o |
main.o |
rxd_buffer_locked usart.o |
followme.o |
parameter.o |
osd.o |
display.o |
main.o |
samples setup.o |
lipo.o |
connect.o |
tools.o |
menu.o |
main.o |
scroll lcd.o |
send_byte lcd.o |
setup.o |
send_pgm error.o |
servo_test servo.o |
tools.o |
menu.o |
set_D_LIGHT HAL_HW1_3.o |
timer.o |
set_adress lcd.o |
set_beep timer.o |
followme.o |
setup.o |
osd.o |
eeprom.o |
main.o |
setting parameter.o |
sin C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libm.a(sin.o) |
lcd.o |
spalte setup.o |
stat_crc_error usart.o |
stat_overflow_error usart.o |
strGet messages.o |
followme.o |
setup.o |
parameter.o |
osd.o |
display.o |
motortest.o |
tools.o |
menu.o |
main.o |
str_E osd.o |
str_N osd.o |
str_NE osd.o |
str_NW osd.o |
str_S osd.o |
str_SE osd.o |
str_SW osd.o |
str_W osd.o |
strcpy_P C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(strcpy_P.o) |
eeprom.o |
strrev C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(strrev.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(utoa.o) |
C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(itoa.o) |
target_pos parameter.o |
target_pos2 parameter.o |
timer followme.o |
parameter.o |
osd.o |
display.o |
motortest.o |
timer.o |
main.o |
tools_menuitems_pkt tools.o |
twi_state twimaster.o |
motortest.o |
txd_buffer usart.o |
txd_complete usart.o |
uart1_init HAL_HW1_3.o |
uart1_putc HAL_HW1_3.o |
usart.o |
uart1_puts motortest.o |
uart_getc_nb usart.o |
utoa C:/WinAVR_20060421/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5\libc.a(utoa.o) |
lcd.o |
v motortest.o |
version main.o |
volt_avg setup.o |
lipo.o |
connect.o |
tools.o |
menu.o |
main.o |
wait_1ms lcd.o |
wait_ms lcd.o |
wdt_init main.o |
write_gps_pos lcd.o |
write_ndigit_number_s lcd.o |
osd.o |
write_ndigit_number_s_10th lcd.o |
osd.o |
write_ndigit_number_u lcd.o |
followme.o |
setup.o |
parameter.o |
osd.o |
motortest.o |
main.o |
write_ndigit_number_u_100th lcd.o |
write_ndigit_number_u_10th lcd.o |
setup.o |
osd.o |
write_setting parameter.o |
write_time lcd.o |
osd.o |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/TODO.txt |
---|
0,0 → 1,12 |
24.8.2011 Cebra |
Waypointlisten speichern und zum MK übertragen |
Menüs überarbeiten um die Varianten der Schnittstellen einfacher handhaben zu können |
Touchsreen entfällt, bring keine wirklichen Vorteile, kostet nur viel Speicher |
22.7.2011 Cebra |
HArdwareplatine mit Stick und Schalter zum Steuern der seriellen Kanäle. |
22.6.2011 Cebra |
- erl. I2C Motortest für BL-Controller |
- erl. zur Zeit sind durch einen Layoutfehler noch die Tasten vertauscht, in timer.h zu ändern |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/Wi232.c |
---|
0,0 → 1,679 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#include "cpu.h" |
#include <avr/io.h> |
#include <avr/pgmspace.h> |
#include <util/delay.h> |
#include <stdlib.h> |
#include <string.h> |
#include "lcd.h" |
#include "usart.h" |
#include "uart1.h" |
#include "main.h" |
#include "Wi232.h" |
#include "timer.h" |
#include "eeprom.h" |
#if defined HWVERSION1_3W || defined HWVERSION3_9 || defined HWVERSION1_2W |
uint8_t Wi232_hardware = 0; |
uint8_t InitErr=0; |
uint8_t Wi232_Baudrate = 0; //Merkzelle für aktuelle Baudrate |
uint8_t New_Baudrate = 0; //Merkzelle für zu setzende Baudrate |
uint8_t Old_Baudrate = 0; //Merkzelle für alte Baudrate |
void SetUart0_Wi232(uint8_t Baudrate) |
{ |
switch (Baudrate) |
{ |
case Wi232_2400: USART_Init( UART_BAUD_SELECT(2400,F_CPU) ); break; /* erstmal mit 2400 versuchen*/ |
case Wi232_9600: USART_Init( UART_BAUD_SELECT(9600,F_CPU) ); break; /* erstmal mit 9600 versuchen*/ |
case Wi232_19200: USART_Init( UART_BAUD_SELECT(19200,F_CPU) ); break; /* erstmal mit 19200 versuchen*/ |
case Wi232_38400: USART_Init( UART_BAUD_SELECT(38400,F_CPU) ); break; /* erstmal mit 38400 versuchen*/ |
case Wi232_57600: USART_Init( UART_BAUD_SELECT(57600,F_CPU) ); break; /* erstmal mit 57600 versuchen*/ |
// case Wi232_115200: USART_Init( UART_BAUD_SELECT(115200,F_CPU) ); break; /* erstmal mit 115200 versuchen*/ |
// Macro erechnet falschen Wert (9,85 = 9) für 115200 Baud mit 20Mhz Quarz, zu grosse Abweichung |
#warning "Baurate prüfen wenn kein 20 Mhz Quarz verwendet wird" |
case Wi232_115200: USART_Init( 10 ); break; /* erstmal mit 115200 versuchen*/ |
} |
} |
void SetUart1_Wi232(uint8_t Baudrate) |
{ |
switch (Baudrate) |
{ |
case Wi232_2400: uart1_init( UART_BAUD_SELECT(2400,F_CPU) ); break; /* erstmal mit 2400 versuchen*/ |
case Wi232_9600: uart1_init( UART_BAUD_SELECT(9600,F_CPU) ); break; /* erstmal mit 9600 versuchen*/ |
case Wi232_19200: uart1_init( UART_BAUD_SELECT(19200,F_CPU) ); break; /* erstmal mit 19200 versuchen*/ |
case Wi232_38400: uart1_init( UART_BAUD_SELECT(38400,F_CPU) ); break; /* erstmal mit 38400 versuchen*/ |
case Wi232_57600: uart1_init( UART_BAUD_SELECT(57600,F_CPU) ); break; /* erstmal mit 57600 versuchen*/ |
// case Wi232_115200: uart1_init( UART_BAUD_SELECT(115200,F_CPU) ); break; /* erstmal mit 115200 versuchen*/ |
case Wi232_115200: uart1_init( 10 ); break; /* erstmal mit 115200 versuchen*/ |
} |
} |
/************************************************************************* |
Function: discoverWI232() |
Purpose: check if Wi232 available |
Returns: Version or 0 = timeout |
**************************************************************************/ |
void discoverWi232(uint8_t Baudrate) |
{ |
int16_t RegisterWi232; |
SwitchToWi232(); /* Serielle Kanäle Wi232 mit USB verbinden*/ |
set_WI232CMD(); |
_delay_ms(200); |
lcd_cls(); |
SetUart0_Wi232( Baudrate); |
// switch (PKT_Baudrate) |
// { |
// case Wi232_2400: USART_Init( UART_BAUD_SELECT(2400,F_CPU) ); break; /* erstmal mit 2400 versuchen*/ |
// case Wi232_9600: USART_Init( UART_BAUD_SELECT(9600,F_CPU) ); break; /* erstmal mit 9600 versuchen*/ |
// case Wi232_19200: USART_Init( UART_BAUD_SELECT(19200,F_CPU) ); break; /* erstmal mit 19200 versuchen*/ |
// case Wi232_38400: USART_Init( UART_BAUD_SELECT(38400,F_CPU) ); break; /* erstmal mit 38400 versuchen*/ |
// case Wi232_57600: USART_Init( UART_BAUD_SELECT(57600,F_CPU) ); break; /* erstmal mit 57600 versuchen*/ |
// case Wi232_115200: USART_Init( UART_BAUD_SELECT(115200,F_CPU) ); break; /* erstmal mit 115200 versuchen*/ |
// } |
lcd_printpns_at (0, 0, PSTR("search Wi.232 Modul"),0); |
RegisterWi232 = ReadWi232(regDiscover); |
lcd_print_hex_at(18,0,RegisterWi232,0); |
if (RegisterWi232 > 0 && RegisterWi232 < 0xFF) |
{ Wi232_hardware = 1; // Wi232 mit aktueller Baudrate gefunden |
Wi232_Baudrate = PKT_Baudrate;} |
if (RegisterWi232 == 0) // nicht gefunden, dann alle Baudraten durchsuchen |
{ |
USART_Init( UART_BAUD_SELECT(2400,F_CPU) ); /* neues Modul mit 2400 suchen*/ |
lcd_printpns_at (0, 1, PSTR(" with 2400 Baud "),0); |
RegisterWi232 = ReadWi232(regDiscover); |
lcd_print_hex_at(18,1,RegisterWi232,0); |
if (RegisterWi232 > 0 && RegisterWi232 < 0xFF) |
{ Wi232_hardware = 2; |
Wi232_Baudrate = Wi232_2400; } |
if (RegisterWi232 == 0) |
{ |
USART_Init( UART_BAUD_SELECT(9600,F_CPU) ); /* 9600 suchen*/ |
lcd_printpns_at (0, 2, PSTR(" with 9600 Baud "),0); |
RegisterWi232 = ReadWi232(regDiscover); |
lcd_print_hex_at(18,2,RegisterWi232,0); |
if (RegisterWi232 > 0 && RegisterWi232 < 0xFF) |
{ Wi232_hardware = 2; |
Wi232_Baudrate = Wi232_9600; } |
} |
if (RegisterWi232 == 0) |
{ |
USART_Init( UART_BAUD_SELECT(19200,F_CPU) ); /* 19200 suchen*/ |
lcd_printpns_at (0, 3, PSTR(" with 19200 Baud "),0); |
RegisterWi232 = ReadWi232(regDiscover); |
lcd_print_hex_at(18,3,RegisterWi232,0); |
if (RegisterWi232 > 0 && RegisterWi232 < 0xFF) |
{ Wi232_hardware = 2; |
Wi232_Baudrate = Wi232_19200; } |
} |
if (RegisterWi232 == 0) |
{ |
USART_Init( UART_BAUD_SELECT(38400,F_CPU) ); /* 38400 suchen*/ |
lcd_printpns_at (0, 4, PSTR(" with 38400 Baud"),0); |
RegisterWi232 = ReadWi232(regDiscover); |
lcd_print_hex_at(18,4,RegisterWi232,0); |
if (RegisterWi232 > 0 && RegisterWi232 < 0xFF) |
{ Wi232_hardware = 2; |
Wi232_Baudrate = Wi232_38400; } |
} |
if (RegisterWi232 == 0 ) |
{ |
USART_Init( UART_BAUD_SELECT(57600,F_CPU) ); /* mit 57600 suchen*/ |
lcd_printpns_at (0, 5, PSTR(" with 57600 Baud"),0); |
RegisterWi232 = ReadWi232(regDiscover); |
lcd_print_hex_at(18,5,RegisterWi232,0); |
if (RegisterWi232 > 0 && RegisterWi232 < 0xFF) |
{ Wi232_hardware = 2; |
Wi232_Baudrate = Wi232_57600; } |
} |
if (RegisterWi232 == 0) |
{ |
USART_Init( UART_BAUD_SELECT(115200,F_CPU) ); /* 115200 suchen*/ |
lcd_printpns_at (0, 6, PSTR(" with 115200 Baud"),0); |
RegisterWi232 = ReadWi232(regDiscover); |
lcd_print_hex_at(18,6,RegisterWi232,0); |
if (RegisterWi232 > 0 && RegisterWi232 < 0xFF) |
{ Wi232_hardware = 2; |
Wi232_Baudrate = Wi232_115200; } |
} |
_delay_ms(2000); |
} |
if (RegisterWi232 == 0) |
{ |
lcd_cls(); |
lcd_printpns_at (0, 0, PSTR("no Wi.232 found"),0); |
Wi232_hardware = 0; |
_delay_ms(2000); |
} |
if (RegisterWi232 == 0xFF) |
{ |
lcd_cls(); |
lcd_printpns_at (0, 0, PSTR("Wi.232 Sytaxerror "),0); |
set_beep ( 1000, 0x0040, BeepNormal); |
_delay_ms(2000); |
RegisterWi232 = 0; |
} |
if (RegisterWi232 > 0 && RegisterWi232 < 0xFF) |
{ |
lcd_cls(); |
if (Wi232_hardware ==1) // alles ok , Baudrate Wi232 passt |
lcd_printpns_at (0, 0, PSTR("Wi.232 found "),0); |
if (Wi232_hardware ==2) // Wi232 gefunden, aber falsche Baudrate |
{ |
WiIsSet= false; //wenn hier 2400 gefunden wurde, ist Wi232 nicht initialisiert |
lcd_printpns_at (0, 0, PSTR("Wi.232 wrong Baudrate"),0); |
if (WriteWi232(regNVDATARATE,PKT_Baudrate)!=0) /* NV-Ram auf PKT-Baudrate setzen*/ |
{ |
lcd_printpns_at (0, 1, PSTR("Error set NV-RAM"),0); |
set_beep ( 1000, 0x0040, BeepNormal); |
_delay_ms(2000); |
} |
else |
{ |
_delay_ms(1000); |
lcd_printpns_at (0, 1, PSTR("NV-RAM is set to "),0); |
lcd_printpns_at (0, 2, PSTR("given Baudrate"),0); |
_delay_ms(2000); |
} |
if (WriteWi232(regDATARATE,PKT_Baudrate)!=0) /* Ram auf PKT_Baudrate setzen*/ |
{ |
lcd_printpns_at (0, 3, PSTR("Error set RAM "),0); |
set_beep ( 1000, 0x0040, BeepNormal); |
_delay_ms(2000); |
} |
else |
{ |
_delay_ms(1000); |
lcd_printpns_at (0, 1, PSTR("RAM is set to "),0); |
lcd_printpns_at (0, 2, PSTR("given Baudrate"),0); |
_delay_ms(2000); |
} |
SetUart0_Wi232(PKT_Baudrate); |
Old_Baudrate = PKT_Baudrate; |
} |
lcd_cls_line (0,1,21); |
lcd_printpns_at (0, 1, PSTR("Version:"),0); |
lcd_print_hex_at(9,1,RegisterWi232,0); |
} |
clr_WI232CMD(); |
} |
/************************************************************************* |
Function: InitWI232() |
Purpose: set Wi232Register for Mikrokopter |
Returns: 0 = ACK, FF = NAK |
**************************************************************************/ |
void InitWi232(uint8_t Baudrate) |
{ |
uint8_t i = 0; |
#ifdef HWVERSION3_9 |
Change_Output(Uart02Wi); // Verbindung zu Wi232 herstellen |
#endif |
discoverWi232(Old_Baudrate); // Check if Wi232 available |
if (Wi232_hardware != 0) |
{ |
lcd_printpns_at (0, 2, PSTR("Init Wi232 wait...."),0); |
set_WI232CMD(); |
_delay_ms(200); |
SwitchToWi232(); /* Serielle Kanäle Wi232 mit USB verbinden*/ |
// USART_Init( UART_BAUD_SELECT(57600,F_CPU) ); /* erstmal mit 57600 versuchen*/ |
if (WriteWi232(regNETGRP,126)!=0) /*damit Wi232 nix mehr vom Kopter schickt erstmal Networkgroup ins Nirwana setzen */ |
lcd_printpns_at (i++,4,PSTR("."),0); |
// InitErr =12; |
// Grund: |
//If RF packets are received while the CMD line is active, |
//they are still processed and presented to the module’s UART for transmission. |
// wenn sich ein EEPROM-Wert ändert wird auch das Ram beschrieben damit die Änderung sofort wirksam wird |
if (WriteWi232(regNVTXCHANNEL,WiTXRXChannel)!=0) |
InitErrorWi232(1); /*TX Channel*/ |
lcd_printpns_at (i++,4,PSTR("."),0); |
if (WriteWi232(regTXCHANNEL,WiTXRXChannel)!=0) |
InitErrorWi232(2);/*TX Channel*/ |
lcd_printpns_at (i++,4,PSTR("."),0); |
if (WriteWi232(regNVRXCHANNEL,WiTXRXChannel)!=0) |
InitErrorWi232(3);/* RX Channel*/ |
lcd_printpns_at (i++,4,PSTR("."),0); |
if (WriteWi232(regRXCHANNEL,WiTXRXChannel)!=0) |
InitErrorWi232(4);/* RX Channel*/ |
lcd_printpns_at (i++,4,PSTR("."),0); |
if (WriteWi232(regNVSLPMODE ,Sleep_Awake)!=0) |
InitErrorWi232(5);/* Sleepmode*/ |
lcd_printpns_at (i++,4,PSTR("."),0); |
if (WriteWi232(regNVPWRMODE,WbModeP15)!=0) |
InitErrorWi232(6);/* Transceiver Mode/Powermode */ |
lcd_printpns_at (i++,4,PSTR("."),0); |
if (WriteWi232(regNVTXTO,WiTXTO)!=0) |
InitErrorWi232(7);/* UART Timeout */ |
lcd_printpns_at (i++,4,PSTR("."),0); |
if (WriteWi232(regTXTO,WiTXTO)!=0) |
InitErrorWi232(8);/* UART Timeout */ |
lcd_printpns_at (i++,4,PSTR("."),0); |
if (WriteWi232(regNVUARTMTU,WiUartMTU)!=0) |
InitErrorWi232(9);/* UART Buffer*/ |
lcd_printpns_at (i++,4,PSTR("."),0); |
if (WriteWi232(regUARTMTU,WiUartMTU)!=0) |
InitErrorWi232(10);/* UART Buffer*/ |
lcd_printpns_at (i++,4,PSTR("."),0); |
if (WriteWi232(regNVNETMODE,WiNetworkMode)!=0) |
InitErrorWi232(11);/* Networkmode*/ |
lcd_printpns_at (i++,4,PSTR("."),0); |
if (WriteWi232(regNETMODE,WiNetworkMode)!=0) |
InitErrorWi232(12);/* Networkmode*/ |
lcd_printpns_at (i++,4,PSTR("."),0); |
if (WriteWi232(regNVUSECRC ,CRC_Enable)!=0) |
InitErrorWi232(13);/* CRC*/ |
lcd_printpns_at (i++,4,PSTR("."),0); |
if (WriteWi232(regNVCSMAMODE,CSMA_En)!=0) |
InitErrorWi232(14);/* CSMA*/ |
lcd_printpns_at (i++,4,PSTR("."),0); |
if (WriteWi232(regNVNETGRP,WiNetworkGroup)!=0) |
InitErrorWi232(15);/* Networkgroup */ |
lcd_printpns_at (i++,4,PSTR("."),0); |
if (WriteWi232(regNETGRP,WiNetworkGroup)!=0) |
InitErrorWi232(15);/* Networkgroup */ |
lcd_printpns_at (i++,4,PSTR("."),0); |
if (WriteWi232(regNVDATARATE,New_Baudrate)!=0) |
InitErrorWi232(16);/* Baudrate*/ |
lcd_printpns_at (i++,4,PSTR("."),0); |
if (WriteWi232(regDATARATE,New_Baudrate)!=0) |
InitErrorWi232(17);/* Baudrate*/ |
lcd_printpns_at (i++,4,PSTR("."),0); |
clr_WI232CMD(); |
if (InitErr !=0) |
{ |
lcd_printpns_at (0, 2, PSTR("Wi232 InitError "),0); |
lcd_print_hex(InitErr,0); |
set_beep ( 1000, 0x0040, BeepNormal); |
_delay_ms(2000); |
} |
else |
{ |
lcd_printpns_at (0, 2, PSTR("Wi232 Init ok...."),0); |
WriteWiInitFlag(); // Init merken |
} |
// USART_Init (UART_BAUD_SELECT(PKT_Baudrate,F_CPU)); |
SetUart0_Wi232(PKT_Baudrate); |
Old_Baudrate = PKT_Baudrate; |
_delay_ms(2000); |
} |
} |
/************************************************************************* |
Function: InitErrorWI232() |
Purpose: Show Wi232 Error, Value |
Returns: |
**************************************************************************/ |
void InitErrorWi232(uint8_t Error) |
{ |
lcd_printpns_at (0, 3, PSTR("Wi232 InitError "),0); |
lcd_print_hex(Error,0); |
InitErr=Error; |
set_beep ( 500, 0x0040, BeepNormal); |
_delay_ms(500); |
} |
/************************************************************************* |
Function: WriteWI232() |
Purpose: set Register to Wi232, Register, Value |
Returns: 0 = ACK, FF = NAK |
ACHTUNG nur für Value <0x80 |
**************************************************************************/ |
int16_t WriteWi232(uint8_t Wi232Register, uint8_t RegisterValue) |
{ |
uint8_t timeout=10; |
uint8_t tc=0; |
unsigned int v; |
USART_putc(0xff); |
USART_putc(0x02); |
USART_putc(Wi232Register); |
USART_putc(RegisterValue); |
// lcd_print_hex(Wi232Register,0); |
// lcd_print_hex(RegisterValue,0); |
do |
{ |
v = USART_getc(); /*ACK erwartet*/ |
_delay_ms(100); |
tc ++; |
} |
while (v==0 && tc!=timeout); |
// lcd_print_hex(v,0); |
if (v != 0x06) |
{ |
lcd_printpns_at (0, 2, PSTR("Wi.232 NAK"),0); |
set_beep ( 1000, 0x0040, BeepNormal); |
_delay_ms(2000); |
return 0xFF; |
} |
if (v==0x06) |
return 0; |
return 0xFF; |
} |
/************************************************************************* |
Function: ReadWI232() |
Purpose: send Readcommand to Wi232, |
Returns: Registervalue, 0 = timeout 0xFF = Syntaxerror |
**************************************************************************/ |
int16_t ReadWi232(uint16_t Wi232Register) |
{ |
uint8_t timeout=10; |
uint8_t tc=0; |
unsigned int v; |
v = USART_getc(); /*Zeichen löschen*/ |
USART_putc(0xff); |
USART_putc(0x02); |
USART_putc(0xfe); |
USART_putc(Wi232Register); |
_delay_ms(50); |
// lcd_printpns_at (0, 2, PSTR("read Wi232"),0); |
do |
{ |
v = USART_getc(); /*ACK erwartet*/ |
_delay_ms(100); |
tc ++; |
} |
while (v==0 && tc!=timeout); |
if (tc == timeout) |
return 0; /* Timeout*/ |
if (v != 0x06) |
return 0xFF; /* Syntaxerror*/ |
lcd_print_hex(v,0); |
v = USART_getc(); /*Register*/ |
// lcd_print_hex(v,0); |
v = USART_getc(); /*Value*/ |
// lcd_print_hex(v,0); |
return v; |
} |
/************************************************************************* |
Function: EscapeString() |
Purpose: |
Returns: |
Quelle: Radiotronix Wi.232 Manual |
**************************************************************************/ |
int EscapeString(char *src, char src_len, char *dest) |
{ |
// The following function copies and encodes the first |
// src_len characters from *src into *dest. This |
// encoding is necessary for Wi.232 command formats. |
// The resulting string is null terminated. The size |
// of this string is the function return value. |
// --------------------------------------------------- |
uint8_t src_idx, dest_idx; |
// Save space for the command header and size bytes |
// ------------------------------------------------ |
dest_idx = 2; |
// Loop through source string and copy/encode |
// ------------------------------------------ |
for (src_idx = 0; src_idx < src_len; src_idx++) |
{ |
if (src[src_idx] > 127) |
{ |
dest[dest_idx++] = 0xFE; |
} |
dest[dest_idx++] = (src[src_idx] & 0x7F); |
} |
// Add null terminator |
// ------------------- |
dest[dest_idx] = 0; |
// Add command header |
// ------------------ |
dest[0] = 0xFF; |
dest[1] = dest_idx-2; |
// Return escape string size |
// ------------------------- |
return dest_idx; |
} |
//#if defined HWVERSION1_3W || defined HWVERSION3_9 |
/************************************************************************* |
Function: Wi232USB() |
Purpose: Connect Wi232 Programmmode to PKT USB, |
Returns: |
**************************************************************************/ |
void Wi232_USB(void) |
{ |
unsigned int c0,c1; |
if (Wi232_hardware==1) |
{ |
// USART_Init (UART_BAUD_SELECT(57600,F_CPU)); |
// uart1_init( UART_BAUD_SELECT(57600,F_CPU) ); |
// USART_Init (UART_BAUD_SELECT(2400,F_CPU)); |
// uart1_init( UART_BAUD_SELECT(2400,F_CPU) ); |
} |
if (Wi232_hardware==2) |
{ |
USART_Init (UART_BAUD_SELECT(2400,F_CPU)); |
uart1_init( UART_BAUD_SELECT(2400,F_CPU) ); |
} |
lcd_cls (); |
// SwitchToWi232(); /* Serielle Kanäle Wi232 mit USB verbinden*/ |
set_WI232CMD(); |
lcd_printpns_at (0, 0, PSTR("Wi.232 Konfiguration "),0); |
lcd_printpns_at (0, 1, PSTR("PC mit USB verbinden"),0); |
lcd_printpns_at (0, 2, PSTR("Wi.232"),0); |
lcd_printpns_at (0, 3, PSTR("Programm starten"),0); |
lcd_printpns_at (17, 7, PSTR("Exit"),0); |
c1 = 0; |
for(;;) |
{ |
c0 = uart1_getc(); /* from USB*/ |
if ( c0 & UART_NO_DATA ) |
{ |
c1 = USART_getc(); |
if (c1 == 0) |
{} |
else |
{ |
// lcd_print_hex(c1,0); |
uart1_putc (c1); /*to USB*/; |
} |
} |
else |
{ |
USART_putc(c0 ); /* to Wi232*/ |
// lcd_print_hex(c0,0); |
// _delay_ms(1); |
} |
if ((get_key_press (1 << KEY_ENTER))) |
{ |
clr_WI232CMD(); |
// uart1_init( UART_BAUD_SELECT(57600,F_CPU) ); |
// USART_Init( UART_BAUD_SELECT(57600,F_CPU) ); |
// SwitchToFC(); |
return; |
} |
} |
} |
/************************************************************************* |
Function: Wi232_FC() |
Purpose: Connect Wi232 to PKT USB, Transparent |
Returns: |
**************************************************************************/ |
void Wi232_FC(void) |
{ |
unsigned int c0,c1; |
// USART_Init (UART_BAUD_SELECT(PKT_Baudrate,F_CPU)); |
// uart1_init( UART_BAUD_SELECT(PKT_Baudrate,F_CPU) ); |
//TODO: SetUart0_Wi232(PKT_Baudrate); |
// SetUart1_Wi232(PKT_Baudrate); |
lcd_cls (); |
// SwitchToWi232(); /* Serielle Kanäle Wi232 mit USB verbinden*/ |
lcd_printpns_at (0, 0, PSTR("Wi.232 to FC "),0); |
lcd_printpns_at (0, 1, PSTR("PC mit USB verbinden"),0); |
lcd_printpns_at (0, 2, PSTR("und Mikrokoptertool"),0); |
lcd_printpns_at (0, 3, PSTR("starten"),0); |
lcd_printpns_at (17, 7, PSTR("Exit"),0); |
c1 = 0; |
for(;;) |
{ |
c0 = uart1_getc(); /* from USB*/ |
if ( c0 & UART_NO_DATA ) |
{ |
c1 = USART_getc(); |
if (c1 == 0) |
{} |
else |
{ |
// lcd_print_hex(c1,0); |
uart1_putc (c1); /*to USB*/; |
} |
} |
else |
{ |
USART_putc(c0 ); /* to Wi232*/ |
// lcd_print_hex(c0,0); |
// _delay_ms(1); |
} |
if ((get_key_press (1 << KEY_ENTER))) |
{ |
return; |
} |
} |
} |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/Wi232.h |
---|
0,0 → 1,178 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#ifndef WI232_H_ |
#define WI232_H_ |
void discoverWi232(uint8_t Baudrate); |
void InitWi232(uint8_t Baudrate); |
int16_t WriteWi232(uint8_t Wi232Register, uint8_t RegisterValue); |
int16_t ReadWi232(uint16_t Wi232Register); |
void InitErrorWi232(uint8_t Error); |
extern uint8_t Wi232_hardware; |
extern uint8_t New_Baudrate; //Merkzelle für zu setzende Baudrate |
extern uint8_t Old_Baudrate; //Merkzelle für alte Baudrate |
// Non-volatile Registers |
// Name Address Description Default |
#define regNVTXCHANNEL 0x00 // Transmit channel setting ## 0 ## |
#define regNVRXCHANNEL 0x01 // Receive channel setting ## 0 ## |
#define regNVPWRMODE 0x02 // Operating mode settings ## +13 dBm widebandmode ## |
#define regNVDATARATE 0x03 // UART data rate ## 2400bps ## |
#define regNVNETMODE 0x04 // Network mode (Normal/Slave) ## Normal ## |
#define regNVTXTO 0x05 // Transmit wait timeout ## ~16ms ## |
#define regNVNETGRP 0x06 // Network group ID ## 0x00 ## |
#define regNVUSECRC 0x08 // Enable/Disable CRC ## Enabled ## |
#define regNVUARTMTU 0x09 // Minimum transmission unit. ## 64 bytes ## |
#define regNVSHOWVER 0x0A // Enable/Disable start-up message ## Enabled ## |
#define regNVCSMAMODE 0x0B // Enable/Disable CSMA ## Enabled ## |
#define regNVSLPMODE 0x0D // Power state of module ## Awake ## |
#define regNVACKONWAKE 0x0E // Send ACK character to host on wake |
// Non-volatile Read Only Registers |
// Name Address Description |
#define regMAC0 0x22 // These registers form the unique 48-bit MAC address. |
#define regMAC1 0x23 // MAC |
#define regMAC2 0x24 // MAC |
#define regOUI0 0x25 // MAC |
#define regOUI1 0x26 // MAC |
#define regOUI2 0x27 // MAC |
#define regDiscover 0x78 // Versionsregister |
// Volatile Read/Write Registers |
// Name Address Description |
#define regTXCHANNEL 0x4B // Transmit channel setting |
#define regRXCHANNEL 0x4C // Receive channel setting |
#define regPWRMODE 0x4D // Operating mode settings |
#define regDATARATE 0x4E // UART data rate |
#define regNETMODE 0x4F // Network mode (Normal or Slave) |
#define regTXTO 0x50 // Transmit wait timeout |
#define regNETGRP 0x51 // Network group ID |
#define regUSECRC 0x53 // Enable/Disable CRC |
#define regUARTMTU 0x54 // Minimum transmission unit. |
#define regSHOWVER 0x55 // Enable/Disable start-up message |
#define regCSMAMODE 0x56 // Enable/disable CSMA |
#define regSLPMODE 0x58 // Power state of module |
#define regACKONWAKE 0x59 // Send ACK character to host on wake |
// Wideband Channels |
// regNVTXCHAN (0x00) regTXCHAN (0x4B) |
// Channel Number Frequency |
#define wChan0 0x00 // 868.300 MHz |
#define wChan1 0x01 // 868.95 MHz ## MK ## |
// Narrowband Channels |
// regNVRXCHAN (0x01) regRXCHAN (0x4C) |
// Channel Number Frequency |
#define nChan0 0x00 // 868.225 MHz |
#define nChan1 0x01 // 868.375 MHz ## MK ## |
#define nChan2 0x02 // 868.850 MHz |
#define nChan3 0x03 // 869.050 MHz |
#define nChan4 0x04 // 869.525 MHz |
#define nChan5 0x05 // 869.850 MHz |
// Power Mode |
// regNVPWRMODE (0x02) regPWRMODE (0x4D) |
// PM1 PM1 PM0 Mode |
#define NbModeN0 0x00 // 0 0 0 Narrowband Mode 0dBm power setting (typical) |
#define WbModeP5 0x01 // 0 0 1 Wideband Mode +5dBm power setting (typical) |
#define WbModeP10 0x02 // 0 1 0 Wideband Mode +10dBm power setting (typical) |
#define WbModeP15 0x03 // 0 1 1 Wideband Mode +15dBm power setting (typical) ## MK ## |
#define WbModeN0 0x04 // 1 0 0 Wideband Mode 0dBm power setting (typical) |
#define NbModeP5 0x05 // 1 0 1 Narrowband Mode +5dBm power setting (typical) |
#define NbModeP10 0x06 // 1 1 0 Narrowband Mode +10dBm power setting (typical) |
#define NbModeP15 0x07 // 1 1 1 Narrowband Mode +15dBm power setting (typical) |
// Wi232 UART Baudrate |
// regNVDATARATE (0x03) regDATARATE (0x4E) |
// Baud Rate BR2 BR1 BR0 |
#define Wi232_2400 0x00 // 0 0 0* (default 2400) |
#define Wi232_9600 0x01 // 0 0 1 |
#define Wi232_19200 0x02 // 0 1 0 |
#define Wi232_38400 0x03 // 0 1 1 |
#define Wi232_57600 0x04 // 1 0 0 ## MK ## |
#define Wi232_115200 0x05 // 1 0 1 |
#define Wi232_10400 0x06 // 1 1 0 |
#define Wi232_31250 0x07 // 1 1 1 |
// NetworkMode |
// regNVNETMODE (0x04) regNETMODE (0x4F) |
#define NetMode_Slave 0x00 // Slavemode |
#define NetMode_Normal 0x01 // Normalmode (default) |
// Transmit Wait Timeout |
// regNVTXTO (0x05) regTXTO (0x50) |
#define TWaitTimeFull 0x00 // full Buffer required |
#define TWaitTime16 0x10 // 16 ms Delay (default) |
// Network Group |
// regNVNETGRP (0x06) regNETGRP (0x51) |
#define NetWorkGroup 66 // default = 0, valid 0-127 ## MK = 66 ## |
// CRC Control |
// regNVUSECRC (0x08) regUSECRC (0x53) |
#define CRC_Disable 0x00 // no CRC check |
#define CRC_Enable 0x01 // CRC check (default) |
// UART minimum transmission unit |
// regNVUARTMTU (0x09) regUARTMTU (0x54) |
#define UartMTU64 64 // default=64, valid 1-144 |
// Verbose mode |
// regNVSHOWVER (0x0A) |
#define ShowVers_Dis 0x00 // do not show Startupmessage ## MK = 66 ## |
#define ShowVers_En 0x01 // show Startupmessage (default) |
// CSMA enable |
// regNVCSMAMODE (0x0B) regCSMAMODE (0x56) |
#define CSMA_Dis 0x00 // disable CSMA Carrier-sense multiple access |
#define CSMA_En 0x01 // enable CSMA (default) |
// Sleep control |
// regNVSLPMODE (0x0D) regSLPMODE (0x58) |
#define Sleep_Awake 0x00 // Sleepmode = Awake (default) |
#define Sleep 0x01 // Sleepmode = Sleep |
#define Sleep_Stby 0x02 // Sleepmode = Standby |
// ACK on Wake |
// regNVACKONWAKE (0x0D) regACKONWAKE (0x59) |
#define ACKwake_Dis 0x00 // disable ACK on Wake |
#define ACKwake_En 0x01 // enable ACK on Wake (default) |
#endif // WI232_H_ |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/bluetooth.c |
---|
0,0 → 1,1228 |
/** |
* source for the Bluetooth driver |
* @file bluetooth.c |
* @author Linus Lotz<lotz@in.tum.de> |
* @author Salomon Sickert |
*/ |
#include "cpu.h" |
#include <string.h> |
#include <util/delay.h> |
#include <avr/interrupt.h> |
#include "bluetooth.h" |
#include "main.h" |
#ifdef HWVERSION3_9 |
#include "uart1.h" |
#include "usart.h" |
#include "timer.h" |
#include "fifo.h" |
#include "error.h" |
#include "lcd.h" |
#include "eeprom.h" |
#include "error.h" |
#include "setup.h" |
#include "bluetooth.h" |
#include "tracking.h" |
//#define SaveMem |
// |
// Baudrate for the UART-connection to the BTM-222 on SQUIRREL |
// |
#define SQUIRREL |
#ifdef SQUIRREL |
#define UART_BAUD_RATE 19200 |
#endif |
#ifdef NUT |
#define UART_BAUD_RATE 19200 |
#endif |
typedef enum { |
BT_RAW, |
BT_DATA, |
BT_CMD, |
BT_NOECHO, |
BT_NOANSWER |
} communication_mode_t; |
#define BT_CMD_TIMEOUT_MS 2000 |
typedef enum { |
BT_TEST, // AT |
BT_CONNECT, // ATA |
BT_DISCONNECT, // ATH |
BT_CLEAR_ADDRESS, // ATD0 |
BT_SET_ADDRESS, // ATD=_____ |
BT_FIND_DEVICES, // ATF? |
BT_DISABLE_AUTOCONNECT, // ATO1 |
BT_SET_MASTER, // ATR0 |
BT_SET_SLAVE, // ATR1 |
BT_SET_PIN, // ATP=1234 |
BT_SET_2400, // ATL* Baudrate 2400 |
BT_SET_9600, // ATL1 Baudrate 9600 |
BT_SET_19200, // ATL2 Baudrate 19200 |
BT_SET_38400, // ATL3 Baudrate 38400 |
BT_SET_57600, // ATL4 Baudrate 57600 |
BT_SET_115200, // ATL5 Baudrate 115200 |
BT_SET_NOANSWER, // ATQ1 Rückmeldungen aus |
BT_SET_NOECHO, // ATE0 ECHO deaktivieren |
BT_SET_ANSWER, // ATQ0 Rückmeldungen |
BT_SET_ECHO, // ATE1 ECHO aktivieren |
BT_SET_DEFAULT, // Defaultwerte setzen |
BT_SET_NAME, // Devicename |
BT_SET_DISPWRDOWN // disable auto Powerdown |
} bt_cmd_t; |
#define IN_FIFO_SIZE 512 |
static uint8_t bt_buffer[IN_FIFO_SIZE]; |
static fifo_t in_fifo; |
char rx_buffer[RXD_BUFFER_SIZE]; |
volatile uint8_t rx_len; |
volatile uint8_t rx_ready = 0; |
uint8_t rx_GPS; |
static char start = '$'; |
static char end = '\n'; |
char data_decode[RXD_BUFFER_SIZE]; |
volatile uint16_t rx_timeout; |
static bt_mode_t bt_mode = BLUETOOTH_SLAVE; |
static communication_mode_t comm_mode = BT_CMD; |
uint8_t i = 0; |
uint8_t NoEcho = 0; |
uint8_t NoAnswer = 0; |
uint8_t bt_devicecount = 0; |
uint8_t bt_rxerror = 0; |
device_info device_list[NUTS_LIST]; |
// Set a timeout of Y ms and a Conditon X, which have to be true while timeout |
#define while_timeout(X, Y) for(uint16_t __timeout = 0; __timeout++ <= Y && (X); Delay_MS(Y ? 1 : 0)) |
//-------------------------------------------------------------- |
void Delay_MS(int count) |
{ |
for (int i = 0; i < count; i++) |
_delay_ms(1); |
} |
//-------------------------------------------------------------- |
void uart_receive(void) |
{ |
unsigned int uart_data; |
while (!fifo_is_full(&in_fifo)) |
{ |
uart_data = uart1_getc(); |
// USART_puts("."); |
switch (uart_data & 0xFF00) { |
// Framing Error detected, i.e no stop bit detected |
case UART_FRAME_ERROR: |
#ifdef DEBUG |
warn_pgm(PSTR("FRM ERR")); |
#endif |
bt_rxerror++; |
return; |
// Overrun, a character already presend in the UART UDR register was |
// not read by the interrupt handler before the next character arrived, |
// one or more received characters have been dropped |
// |
case UART_OVERRUN_ERROR: |
#ifdef DEBUG |
warn_pgm(PSTR("OVR ERR")); |
#endif |
bt_rxerror++; |
return; |
// We are not reading the receive buffer fast enough, |
// one or more received character have been dropped |
// |
case UART_BUFFER_OVERFLOW: |
#ifdef DEBUG |
warn_pgm(PSTR("BUF ERR")); |
#endif |
bt_rxerror++; |
return; |
// UART Inputbuffer empty, nothing to do |
case UART_NO_DATA: |
return; |
default: |
{ |
fifo_write(&in_fifo, uart_data); |
#ifdef DEBUG |
USART_putc(uart_data); |
#endif |
} |
} |
} |
#ifdef DEBUG |
warn_pgm(PSTR("FIFO OVR ERR")); |
#endif |
} |
//-------------------------------------------------------------- |
static void uart_send(const char *data, const uint8_t length) |
{ |
#ifdef DEBUG |
debug_pgm(PSTR("bt_uart_send")); |
#endif |
char echo; |
lcd_printp_at (i++, 1, PSTR("."), 0); |
for (uint8_t i = 0; i < length; i++) |
{ |
#ifdef DEBUG |
USART_putc((data[i])); //test |
#endif |
// debug_pgm(PSTR("bt_init_S")); |
if (uart1_putc(data[i]) == 0) |
{ |
#ifdef DEBUG |
warn_pgm(PSTR("UART: Remote not ready")); |
#endif |
return; |
} |
if (comm_mode == BT_RAW) |
_delay_ms(50); |
if (comm_mode == BT_DATA) |
_delay_ms(1); |
if (comm_mode == BT_NOECHO) |
_delay_ms(1); |
if (comm_mode == BT_CMD) |
{ |
uint8_t x = 0; |
for (; x < 3; x++) |
{ |
// // while_timeout(X, Y) for(uint16_t __timeout = 0; __timeout++ <= Y && (X); _delay_ms(Y ? 1 : 0)) |
// while_timeout(fifo_is_empty(&in_fifo), 200) |
for(uint16_t __timeout = 0; __timeout++ <= 200 && (fifo_is_empty(&in_fifo)); _delay_ms(200 ? 1 : 0)) |
{ |
uart_receive(); |
} |
fifo_read(&in_fifo, &echo); |
if (echo != data[i]) { |
if (uart1_putc(data[i]) == 0) |
{ |
warn_pgm(PSTR ("UART: Remote not ready")); |
return; |
} |
} |
else |
break; |
} |
if (x == 3) |
{ |
error_putc(data[i]); |
error_pgm(PSTR("BT: WRONG ECHO")); |
} |
} |
} |
} |
//-------------------------------------------------------------- |
static uint16_t send_cmd(const bt_cmd_t command, const char *data) |
{ |
uint16_t CommandDelay=0; // nach BTM222 Kommandos verschiedene Verzögerungszeiten bevor es weitergehen kann |
// _delay_ms(500); // org 500 300 zu wenig |
char full_command[20]; // Maximum command size |
switch (command) |
{ |
case BT_SET_PIN: |
strcpy_P(full_command, PSTR("ATP=")); |
for (uint8_t i = 0; i < bt_pin_length; i++) |
{ |
full_command[i+4] = bt_pin[i]; |
} |
full_command[(bt_pin_length+4)] =0; |
CommandDelay = 100; //100ms |
break; |
case BT_SET_DEFAULT: |
strcpy_P(full_command, PSTR("ATZ0")); |
CommandDelay = 1000; |
break; |
case BT_SET_2400: |
strcpy_P(full_command, PSTR("ATL*")); |
CommandDelay = 100; |
break; |
case BT_SET_9600: |
strcpy_P(full_command, PSTR("ATL1")); |
CommandDelay = 100; |
break; |
case BT_SET_19200: |
strcpy_P(full_command, PSTR("ATL2")); |
CommandDelay = 100; |
break; |
case BT_SET_38400: |
strcpy_P(full_command, PSTR("ATL3")); |
CommandDelay = 100; |
break; |
case BT_SET_57600: |
strcpy_P(full_command, PSTR("ATL4")); |
CommandDelay = 100; |
break; |
case BT_SET_115200: |
strcpy_P(full_command, PSTR("ATL5")); |
CommandDelay = 100; |
break; |
case BT_SET_NOANSWER: |
strcpy_P(full_command, PSTR("ATQ1")); |
CommandDelay = 100; |
break; |
case BT_SET_NOECHO: |
strcpy_P(full_command, PSTR("ATE0")); |
CommandDelay = 100; |
break; |
case BT_SET_ANSWER: |
strcpy_P(full_command, PSTR("ATQ0")); |
CommandDelay = 100; |
break; |
case BT_SET_ECHO: |
strcpy_P(full_command, PSTR("ATE1")); |
CommandDelay = 100; |
break; |
case BT_TEST: |
strcpy_P(full_command, PSTR("AT")); |
CommandDelay = 100; |
break; |
case BT_CONNECT: |
strcpy_P(full_command, PSTR("ATA")); |
CommandDelay = 100; |
break; |
case BT_DISCONNECT: |
strcpy_P(full_command, PSTR("ATH")); |
CommandDelay = 100; |
break; |
case BT_CLEAR_ADDRESS: |
strcpy_P(full_command, PSTR("ATD0")); |
CommandDelay = 100; |
break; |
case BT_SET_ADDRESS: |
strcpy_P(full_command, PSTR("ATD=")); |
memcpy((full_command + strlen(full_command)), data, 12); |
full_command[16] = 0; |
CommandDelay = 100; |
break; |
case BT_FIND_DEVICES: |
strcpy_P(full_command, PSTR("ATF?")); |
CommandDelay = 100; |
break; |
case BT_DISABLE_AUTOCONNECT: |
strcpy_P(full_command, PSTR("ATO1")); |
CommandDelay = 3500; |
break; |
case BT_SET_MASTER: |
strcpy_P(full_command, PSTR("ATR0")); |
CommandDelay = 3000; |
break; |
case BT_SET_SLAVE: |
strcpy_P(full_command, PSTR("ATR1")); |
CommandDelay = 3000; |
break; |
case BT_SET_NAME: |
strcpy_P(full_command, PSTR("ATN=")); |
for (uint8_t i = 0; i < bt_name_len; i++) |
{ |
full_command[i + 4] = bt_name[i]; |
} |
full_command[(bt_name_len + 4)] = 0; |
CommandDelay = 100; |
break; |
case BT_SET_DISPWRDOWN: |
strcpy_P(full_command, PSTR("ATS1")); |
CommandDelay = 100; |
break; |
default: |
warn_pgm(PSTR("CMD UNK")); |
return false; |
} |
strcat_P(full_command, PSTR("\r")); |
// throw away your television |
uart_receive(); |
fifo_clear(&in_fifo); |
// debug_pgm(PSTR("bt_init3")); |
// send command |
uart_send(full_command, strlen(full_command)); |
if (command== BT_SET_NOECHO) |
{ |
_delay_ms(CommandDelay); |
return true; |
} |
if (command== BT_SET_NOANSWER) |
{ |
_delay_ms(CommandDelay); |
return true; |
} |
if (command== BT_SET_ECHO) |
{ |
_delay_ms(CommandDelay); |
return true; |
} |
if (command== BT_SET_ANSWER) |
{ |
_delay_ms(CommandDelay); |
return true; |
} |
// get response |
while_timeout(true, BT_CMD_TIMEOUT_MS) |
{ |
uart_receive(); |
if (fifo_strstr_pgm(&in_fifo, PSTR("OK\r\n"))) |
{ |
info_pgm(PSTR("CMD SEND: OK")); |
_delay_ms(CommandDelay); |
return true; |
} |
if (fifo_strstr_pgm(&in_fifo, PSTR("ERROR\r\n"))) |
{ |
#ifdef DEBUG |
info_pgm(PSTR("CMD SEND: Error")); |
#endif |
return false; |
} |
} |
#ifdef DEBUG |
if (command != BT_TEST) |
warn_pgm(PSTR("CMD SEND: TIMEOUT")); |
#endif |
return false; |
} |
//-------------------------------------------------------------- |
void test(void) |
{ |
comm_mode = BT_RAW; |
for (uint8_t i = 0; i < 2; i++) |
if (send_cmd(BT_TEST, NULL)) |
break; |
comm_mode = BT_CMD; |
} |
#ifndef SaveMem |
//-------------------------------------------------------------- |
static void clean_line(void) |
{ |
while_timeout(true, 50) |
uart_receive(); |
fifo_strstr_pgm(&in_fifo, PSTR("\r\n")); |
} |
static communication_mode_t update_comm_mode(uint16_t timeout_ms) |
{ |
while_timeout(true, timeout_ms) |
{ |
uart_receive(); |
if (fifo_strstr_pgm(&in_fifo, PSTR("DISCONNECT"))) |
{ |
clean_line(); |
test(); |
comm_mode = BT_CMD; |
return comm_mode; |
} |
if (fifo_strstr_pgm(&in_fifo, PSTR("CONNECT"))) |
{ |
_delay_ms(100); //don't delete this, else there will be no success!!!!!!!!! |
comm_mode = BT_DATA; |
return comm_mode; |
} |
if (fifo_strstr_pgm (&in_fifo, PSTR("Time out,Fail to connect!"))) |
{ |
clean_line(); |
#ifdef DEBUG |
debug_pgm(PSTR("CONNECT FAILED")); |
#endif |
test(); |
comm_mode = BT_CMD; |
return comm_mode; |
} |
} |
return comm_mode; |
} |
#endif |
//-------------------------------------------------------------- |
uint16_t bt_init(void) |
{ |
uint8_t init_error = false; |
uint8_t BT_found = 0; |
i = 0; |
set_BTOn(); |
lcd_cls(); |
lcd_printp_at (0, 0, PSTR("BT initialisieren.."), 0); |
// _delay_ms(200); |
for (uint8_t z = (bt_name_length); z > 0; z--) |
{ |
if (bt_name[z - 1] != ' ') |
{ |
bt_name_len = z; |
break; |
} |
} |
uart1_init(UART_BAUD_SELECT(57600, F_CPU)); |
fifo_init(&in_fifo, bt_buffer, IN_FIFO_SIZE); |
_delay_ms(100); |
// debug_pgm(PSTR("bt_init")); |
// uart_receive(); |
// debug_pgm(PSTR("bt_init1")); |
fifo_clear(&in_fifo); |
send_cmd(BT_TEST, NULL); |
comm_mode = BT_NOECHO; |
send_cmd(BT_SET_ECHO, NULL); |
send_cmd(BT_SET_ANSWER, NULL); |
// debug_pgm(PSTR("bt_init2")); |
#ifdef DEBUG |
debug_pgm(PSTR("Check with 57600")); |
#endif |
// send_cmd(BT_TEST, NULL); // Schrott löschen |
if (send_cmd(BT_TEST, NULL)) // Test mit 57600 |
{ |
#ifdef DEBUG |
debug_pgm(PSTR("BT found 57600 Baud")); |
#endif |
BT_found = 1; |
} |
if (BT_found == 0) |
{ |
#ifdef DEBUG |
debug_pgm(PSTR("Check with 19200")); |
#endif |
uart1_init(UART_BAUD_SELECT(19200, F_CPU));// Test mit 19200 |
_delay_ms(100); |
send_cmd(BT_TEST, NULL); // Schrott löschen |
send_cmd(BT_SET_ANSWER, NULL); |
send_cmd(BT_SET_ECHO, NULL); |
if (send_cmd(BT_TEST, NULL)) |
{ |
debug_pgm(PSTR("19200 OK")); |
if (send_cmd(BT_TEST, NULL)) |
{ |
#ifdef DEBUG |
debug_pgm(PSTR("BT found 19200 Baud")); |
#endif |
BT_found = 2; |
} |
} |
} |
if (BT_found == 0) |
{ |
#ifdef DEBUG |
debug_pgm(PSTR("Check with 9600")); |
#endif |
uart1_init(UART_BAUD_SELECT(9600, F_CPU));//test mit 9600 |
_delay_ms(100); |
send_cmd(BT_TEST, NULL); |
send_cmd(BT_SET_ANSWER, NULL); |
send_cmd(BT_SET_ECHO, NULL); |
if (send_cmd(BT_TEST, NULL)); |
{ |
#ifdef DEBUG |
debug_pgm(PSTR("9600 OK")); |
#endif |
if (send_cmd(BT_TEST, NULL)) |
{ |
#ifdef DEBUG |
debug_pgm(PSTR("BT found 9600 Baud")); |
#endif |
BT_found = 3; |
} |
} |
} |
if (BT_found == 0) |
{ |
#ifdef DEBUG |
debug_pgm(PSTR("Check with 4800")); |
#endif |
uart1_init(UART_BAUD_SELECT(4800, F_CPU));//test mit 4800 |
_delay_ms(100); |
send_cmd(BT_TEST, NULL); |
send_cmd(BT_SET_ANSWER, NULL); |
send_cmd(BT_SET_ECHO, NULL); |
if (send_cmd(BT_TEST, NULL)); |
{ |
#ifdef DEBUG |
debug_pgm(PSTR("4800 OK")); |
#endif |
if (send_cmd(BT_TEST, NULL)) |
{ |
#ifdef DEBUG |
debug_pgm(PSTR("BT found 4800 Baud")); |
#endif |
BT_found = 4; |
} |
} |
} |
if (BT_found > 0) |
{ |
/* Set comm_mode to CMD */ |
comm_mode = BT_CMD; |
// test(); |
// if (BTIsSlave==false) |
// { |
/* Set BTM Baudrate */ |
if (!(send_cmd(BT_SET_57600, NULL))) |
init_error = true; |
uart1_init(UART_BAUD_SELECT(57600, F_CPU)); |
_delay_ms(100); |
// test(); |
/* Clear remote address */ |
if(!(send_cmd(BT_CLEAR_ADDRESS, NULL))) |
init_error = true; |
// test(); |
/* Set BTM to SLAVE */ |
if (!(send_cmd(BT_SET_SLAVE, NULL))) |
init_error = true; |
// test(); |
/* Set BTM PIN */ |
if(!(send_cmd(BT_SET_PIN, NULL))) |
init_error = true; |
// test(); |
/* Set BTM Name */ |
if(!(send_cmd(BT_SET_NAME, NULL))) |
init_error = true; |
_delay_ms(300); |
// test(); |
if(!(send_cmd(BT_SET_DISPWRDOWN, NULL))) |
init_error = true; |
// } |
// test(); |
/* Set BTM Echo aus */ |
send_cmd(BT_SET_NOECHO, NULL); |
// test(); |
comm_mode = BT_NOECHO; |
/* Set BTM Answer aus */ |
send_cmd(BT_SET_NOANSWER, NULL); |
// test(); |
bt_mode = BLUETOOTH_SLAVE; |
set_BTOff(); |
if (!init_error) |
{ |
WriteBTInitFlag(); // Init merken |
WriteBTSlaveFlag(); |
return true; |
} |
else |
return false; |
} |
else |
{ |
set_BTOff(); |
return false; |
} |
} |
#ifndef SaveMem |
//-------------------------------------------------------------- |
uint16_t bt_set_mode(const bt_mode_t mode) |
{ |
// if (update_comm_mode(0) == BT_DATA) // 30.1.2012 CB |
// return false; |
if (mode == bt_mode) |
return true; |
if (mode == BLUETOOTH_MASTER) |
if (send_cmd(BT_SET_MASTER, NULL)) |
{ |
bt_mode = BLUETOOTH_MASTER; |
// test(); |
send_cmd(BT_DISABLE_AUTOCONNECT, NULL); |
debug_pgm(PSTR("bt_setmode: Master is set")); |
WriteBTMasterFlag(); |
} |
if (mode == BLUETOOTH_SLAVE) |
{ |
if (send_cmd(BT_SET_SLAVE, NULL)) |
{ |
bt_mode = BLUETOOTH_SLAVE; |
debug_pgm(PSTR("bt_setmode: Slave is set")); |
} |
send_cmd(BT_SET_NOECHO, NULL); |
comm_mode = BT_NOECHO; |
/* Set BTM Answer aus */ |
send_cmd(BT_SET_NOANSWER, NULL); |
bt_mode = BLUETOOTH_SLAVE; |
WriteBTSlaveFlag(); |
} |
// test(); |
return mode == bt_mode; |
} |
//-------------------------------------------------------------- |
uint16_t bt_receive(void *data, uint8_t length, uint16_t timeout_ms) |
{ |
uint8_t rec_length = 0; |
uint8_t i = 0; |
// while_timeout(true, timeout_ms); |
for(uint16_t __timeout = 0; __timeout++ <= true && (timeout_ms); _delay_ms(true ? 1 : 0)) |
{ |
if (i == length) |
return true; |
uart_receive(); |
if (fifo_is_empty(&in_fifo)) |
continue; |
if (update_comm_mode(0) != BT_DATA) |
{ |
#ifdef DEBUG |
debug_pgm(PSTR("not connected")); |
#endif |
return false; |
} |
// We have a connection |
if (timeout_ms == 0) |
timeout_ms += 2000; |
if (fifo_is_empty(&in_fifo)) |
continue; |
// Find starting point of packet |
if (!rec_length) |
{ |
fifo_read(&in_fifo, (char *)&rec_length); |
if (rec_length != length) |
{ |
rec_length = 0; |
} |
else |
{ |
// You've got mail! |
timeout_ms += 2000; |
} |
} |
else |
{ |
fifo_read(&in_fifo, (char *)data + i); |
i++; |
} |
} |
return false; |
} |
#endif |
#ifndef SaveMem |
//-------------------------------------------------------------- |
uint16_t bt_send(void *data, const uint8_t length) |
{ |
if (update_comm_mode(0) == BT_CMD) |
return false; |
uart_send((const char *)&length, 1); |
uart_send((char *)data, length); |
return (update_comm_mode(0) == BT_DATA); |
} |
#ifdef SQUIRREL |
//-------------------------------------------------------------- |
uint16_t bt_connect(const char *address) |
{ |
fifo_init(&in_fifo, bt_buffer, IN_FIFO_SIZE); |
uart_receive(); |
fifo_clear(&in_fifo); |
// Maybe we already disconnected??? |
if (BT_DATA == update_comm_mode(0)) |
{ |
#ifdef DEBUG |
debug_pgm(PSTR("We are still connected...")); |
#endif |
return false; |
} |
test(); |
/* |
if (!send_cmd(BT_DISABLE_AUTOCONNECT, address)) |
return false; |
*/ |
test(); |
#ifdef DEBUG |
debug_pgm (PSTR ("SET_ADD")); |
#endif |
if (!send_cmd(BT_SET_ADDRESS, address)) |
return false; |
test(); |
#ifdef DEBUG |
debug_pgm (PSTR ("CONNECT")); |
#endif |
if (!send_cmd(BT_CONNECT, NULL)) |
return false; |
#ifdef DEBUG |
debug_pgm (PSTR ("WAIT FOR COMM")); |
#endif |
return (BT_DATA == update_comm_mode(60000)); |
} |
//-------------------------------------------------------------- |
uint16_t bt_disconnect(void) |
{ |
if (BT_CMD == update_comm_mode(0)) |
{ |
fifo_clear(&in_fifo); |
return true; |
} |
// Switch to online cmd mode |
for (uint8_t i = 0; i < 4; i++) |
{ |
const char plus = '+'; |
uart_send(&plus, 1); |
_delay_ms(1000); |
} |
comm_mode = BT_CMD; |
if (!send_cmd(BT_DISCONNECT, NULL)) |
return false; |
// test(); |
if (!send_cmd(BT_CLEAR_ADDRESS, NULL)) |
return false; |
// test(); |
if (BT_CMD == update_comm_mode(10000)) |
{ |
fifo_clear(&in_fifo); |
return true; |
} |
#ifdef DEBUG |
debug_pgm(PSTR("Still in DATA??")); |
#endif |
return false; |
} |
/* |
BTM-222 Softwareversion 4.35 |
Inquiry Results: |
111111111222222222233333333334 |
01234567890123456789012345678901234567890 |
1 LE091452 0024-2C-BEB0CA |
2 E71 c 0024-7C-3EC9B9 |
BTM-222 Softwareversion 6.26 |
Inquiry Results: |
1 E71 c 0024-7C-3EC9B9 N.A. |
2 LE091452 0024-2C-BEB0CA N.A. |
*/ |
//-------------------------------------------------------------- |
void copy_mac(const char *src, char *dst) |
{ |
uint8_t off = 0; |
for (uint8_t i = 0; i < 40; i++) |
{ |
if (src[i] == '-') if (src[i+3] == '-')// MAC Adresse suchen |
{ |
off = i-4; |
break; |
} |
} |
for (uint8_t i = 0; i < 14; i++) |
{ |
if (src[i + off] == '-') |
off++; |
dst[i] = src[i + off]; |
} |
} |
//-------------------------------------------------------------- |
void copy_DevName(const char *src, char *dst) |
{ |
uint8_t off = 0; |
for (uint8_t i = 0; i < 14; i++) |
{ |
if (src[i] == ' ') if (src[i+1] == ' ') break; // nach zwei Leerzeichen ist der Name zuende |
dst[i] = src[i + off]; |
} |
} |
//-------------------------------------------------------------- |
uint16_t bt_discover(char result[8][12]) |
{ |
// if (!bt_set_mode(BLUETOOTH_MASTER)) |
// return false; |
if (!send_cmd(BT_FIND_DEVICES, NULL)) |
return false; |
char buffer[255]; //oversized, but who cares? |
char *bufferhead = buffer; |
uint16_t pos = 0; |
uint16_t Timeout = 28000; |
uint16_t pos1 = 0; |
uint16_t posC = 0; |
#ifdef DEBUG |
debug_pgm(PSTR("discover2")); |
#endif |
do |
{ |
uart_receive(); |
Timeout--; |
pos1++; |
posC++; |
_delay_ms(1); |
write_ndigit_number_u(0,5,fifo_getcount(&in_fifo),5,0,0); |
if (posC ==1000) |
{ |
lcd_printp_at (i++, 1, PSTR("."), 0); |
posC = 0; |
} |
if (fifo_is_full(&in_fifo)) break; |
#ifdef DEBUG |
if (fifo_search(&in_fifo, PSTR("Found."))) debug_pgm(PSTR("Suchen ende1")); |
#endif |
} |
// while (((Timeout > 0) ||(!fifo_strstr_pgm(&in_fifo, PSTR("Inquiry Results:\r\n")))) && (!fifo_strstr_pgm(&in_fifo, PSTR("Found")))); |
while ((Timeout > 0)||(!fifo_strstr_pgm(&in_fifo, PSTR("Inquiry Results:\r\n")))); |
#ifdef DEBUG |
debug_pgm(PSTR("Suchen ende2")); |
if (Timeout == 0) debug_pgm(PSTR("Timeout")); |
if (fifo_is_full(&in_fifo)) debug_pgm(PSTR("Fifo Overrun, zuviele BT Devices")); |
#endif |
while (!fifo_is_empty(&in_fifo)) |
{ |
// Get next line |
while (!fifo_cmp_pgm(&in_fifo, PSTR("\r\n"))) |
{ |
fifo_read(&in_fifo, bufferhead); |
bufferhead++; |
} |
// terminate string |
*bufferhead = 0; |
//reset bufferhead |
bufferhead = buffer; |
if (strlen(buffer) == 0) |
continue; //the empty line before end of inquiry |
if (strstr_P(buffer, PSTR("Inquiry End"))) |
// if (searchend) |
{ |
fifo_clear(&in_fifo); |
// test(); |
return true; |
} |
copy_DevName(&buffer[3],device_list[pos].DevName); |
device_list[pos].DevName[14] = 0; // Stringende |
copy_mac(&buffer[3], device_list[pos].mac); |
// for (uint16_t i = 0; i < 15; i++) |
// { |
// |
//// USART_putc((device_list[pos].DevName[i])); |
// lcd_print_hex((device_list[pos].DevName[i]),0); |
// } |
// USART_putc('\n'); |
// |
// |
// for (uint16_t i = 0; i < 12; i++) |
// { |
// |
// USART_putc((device_list[pos].mac[i])); |
// |
// } |
// |
// USART_putc('\n'); |
// USART_putc('\r'); |
pos++; |
} |
return false; |
} |
device_info device_list[NUTS_LIST]; |
void bt_downlink_init(void) |
{ |
fifo_init(&in_fifo, bt_buffer, IN_FIFO_SIZE); |
_delay_ms(100); |
// debug_pgm(PSTR("bt_init")); |
uart_receive(); |
fifo_clear(&in_fifo); |
// send_cmd(BT_TEST, NULL); |
debug_pgm(PSTR("Downlink_init Start")); |
// if (BTIsSlave == true) // nur Init wenn BT ist Slave |
// { |
comm_mode = BT_NOECHO; |
if (!send_cmd (BT_SET_ECHO,NULL)) { |
debug_pgm(PSTR("Downlink_init:Couldn't set Echo!")); |
} |
comm_mode = BT_CMD; |
if (!send_cmd(BT_SET_ANSWER,NULL)) { |
debug_pgm(PSTR("Downlink_init:Couldn't set Answer!")); |
} |
// send_cmd(BT_TEST, NULL); |
if (!bt_set_mode(BLUETOOTH_MASTER)==BLUETOOTH_MASTER) |
{ |
// debug_pgm(PSTR("Downlink_init:Couldn't set master!")); |
// return; |
} |
#ifdef DEBUG |
debug_pgm(PSTR("Downlink_init:master set is ")); |
#endif |
WriteBTMasterFlag(); // Master merken |
} |
void bt_searchDevice(void) //Bluetoothgeräte suchen |
{ |
char result[8][12]; |
for (uint8_t i = 0; i < 8; i++) // alte Liste löschen |
for (uint8_t j = 0; j < 12; j++) |
result[i][j] = 0; |
#ifdef DEBUG |
debug_pgm(PSTR("Search Device:BT_discover")); |
#endif |
if (bt_discover(result)) |
{ |
bt_devicecount = 0; |
#ifdef DEBUG |
debug_pgm(PSTR("Search Device:Search ok")); |
#endif |
for (uint8_t i = 0; i < 8; i++) |
{ |
if (valid(i)) |
bt_devicecount++; |
else break; |
} |
} |
#ifdef DEBUG |
else |
debug_pgm(PSTR("Search Device:Search failed")); |
#endif |
// } |
} |
//-------------------------------------------------------------- |
uint16_t bt_receiveNMEA(void) |
{ |
char received; |
static uint8_t line_flag = 1; |
static char* ptr_write = rx_buffer; |
uart_receive(); |
if (fifo_is_empty(&in_fifo)) |
// continue; |
// break; |
return true; |
if (update_comm_mode(0) != BT_DATA) |
{ |
#ifdef DEBUG |
debug_pgm(PSTR("not connected")); |
#endif |
return false; |
} |
// We have a connection |
// if (timeout_ms == 0) |
// timeout_ms += 2000; |
if (fifo_is_empty(&in_fifo)) |
// continue; |
// break; |
return true; |
fifo_read(&in_fifo, &received); |
// Find starting point of packet |
if (rx_ready == 0) |
{ |
if ((received == start) && line_flag) |
{ // start '$' |
line_flag = 0; // New line has begun |
ptr_write = rx_buffer; // Begin at start of buffer |
rx_len = 0; |
} |
if (line_flag == 0) |
{ // Are we receiving a line? |
*ptr_write = received; // Add current byte |
rx_len++; |
// GPS Datensatzende |
if (received == end) |
{ // End of MK-GPS or NMEA-line? |
line_flag = 1; // Yes, start new line |
rx_ready = 1; // Lock buffer until line has been processed |
} |
} |
ptr_write++; |
if(rx_len == RXD_BUFFER_SIZE) line_flag = 1; // Line too long? Try again |
}//if (rx_ready == 0) |
return true; |
} |
// |
// return false; |
//} |
//#endif |
#endif |
#endif |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/bluetooth.h |
---|
0,0 → 1,144 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#ifndef _BLUETOOTH_H_ |
#define _BLUETOOTH_H_ |
#include <avr/io.h> |
//#include <common.h> |
#define SQUIRREL |
#define NUTS_LIST 16 |
#define EXTENSIONS_LIST 16 |
#define RXD_BUFFER_SIZE 150 |
//void InitBT(void); |
extern char rx_buffer[RXD_BUFFER_SIZE]; |
extern volatile uint8_t rx_len; |
extern volatile uint8_t rx_ready; |
extern uint8_t rx_GPS; |
//extern static char start = '$'; |
//extern static char end = '\n'; |
extern char data_decode[RXD_BUFFER_SIZE]; |
extern volatile uint16_t rx_timeout; |
extern uint8_t bt_rxerror; |
typedef struct _device_info device_info; |
// device info struct, holds mac , class and extensions + values of a device |
struct _device_info |
{ |
char DevName[20]; |
char mac[14]; |
// uint8_t class; |
// uint8_t extension_types[EXTENSIONS_LIST]; |
// uint16_t values_cache[EXTENSIONS_LIST]; |
}; |
extern uint8_t bt_devicecount; |
extern device_info device_list[NUTS_LIST]; |
#define valid(num) (num < NUTS_LIST && (device_list[num].mac[0] != 0 || device_list[num].mac[1] != 0 || device_list[num].mac[2] != 0 || device_list[num].mac[3] != 0 || device_list[num].mac[4] != 0 || device_list[num].mac[5] != 0 || device_list[num].mac[6] != 0 || device_list[num].mac[7] != 0 || device_list[num].mac[8] != 0 || device_list[num].mac[9] != 0 || device_list[num].mac[10] != 0 || device_list[num].mac[11] != 0)) |
extern uint16_t bt_receiveNMEA(void); |
//extern static communication_mode_t update_comm_mode(uint16_t timeout_ms); |
// Bluetooth mode ENUM |
typedef enum |
{ |
BLUETOOTH_MASTER, // < Master Mode (to create outgoinng connections). |
BLUETOOTH_SLAVE // < Slave Mode (to wait for incoming connections). |
} bt_mode_t; |
// init bluetooth driver |
// @return always true |
// |
//extern uint16_t bt_init (void (*upate_percentage) (uint16_t)); |
extern uint16_t bt_init (void); |
// Set the Bluetooth mode |
// @param mode bt_mode_t Bluetooth Mode ENUM (BLUETOOTH_MASTER or BLUETOOTH_SLAVE) |
// @return true if mode change was succesful, false if not |
// |
extern uint16_t bt_set_mode (const bt_mode_t mode); |
// recieve data over bluetooth |
// @param data pointer to memory for data storage |
// @param length value of length after call holds the actual recived data length |
// @param timeout_ms timeout in ms after the recive function aborts and returns with false |
// @return false if recived length > length parameter or it timeouted, true otherwise |
// |
extern uint16_t bt_receive (void * data, uint8_t length, uint16_t timeout_ms); |
// send data over bluetooth |
// @param data pointer to the data to send |
// @param length length of the data to be send |
// @return true if sendingn was successful, false otherwise |
// |
extern uint16_t bt_send (void * data, const uint8_t length); |
// squirrelt only functions |
#ifdef SQUIRREL |
// open bluetoot connection (only one at a time possible) |
// @param address connection is opened to this device mac address |
// @return true if connection was established, false otherwise |
// |
extern uint16_t bt_connect (const char *address); |
// closes bluetooth connection |
// @return false if failed, true otherwise |
// |
extern uint16_t bt_disconnect (void); |
// discover bluetooth devices |
// @param result in a 2 dimensional array first index are devicecs (max 8) second is mac address string |
// @param update_callback to inform of progress (in % from 0 to 100) |
// @return true if successful, false if error occured |
// |
extern uint16_t bt_discover (char result[8][12]); |
//extern uint16_t bt_discover (char result[8][12], void (*update_callback)(const uint16_t progress)); |
extern void bt_downlink_init(void); // Auf Master stellen für Devicesuche und GPS Empfang |
extern void bt_searchDevice(void); //Bluetoothgeräte suchen |
#endif // SQUIRREL |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/connect.c |
---|
0,0 → 1,403 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#include "cpu.h" |
#include <avr/pgmspace.h> |
#include "lcd.h" |
#include "timer.h" |
#include "eeprom.h" |
#include "messages.h" |
#include "lipo.h" |
#include "main.h" |
#if defined HWVERSION3_9 |
//-------------------------------------------------------------- |
void Change_Output(uint8_t UartMode) // Schaltet die Rx/Tx Richtungen |
{ |
// hiermit werden die 74HTC125 (IC5) Gatter geschaltet |
clr_USB2FC(); // PC2 aus |
clr_USB2Wi(); // PB0 aus |
clr_Uart02FC(); // PC6 aus |
clr_Uart02Wi(); // PC5 aus |
switch (UartMode) |
{ |
case USB2FC: |
UCSR1B &= ~(1<<RXEN1); |
UCSR1B &= ~(1<<TXEN1); |
UCSR1B &= ~(1<<RXCIE1); |
DDRD &= ~(1<<DDD2); // Pins auf Eingang setzen |
DDRD &= ~(1<<DDD3); |
PORTD &= ~(1<<PIND2); // Pullup aus // MartinR: von PD auf PIND geändert |
PORTD &= ~(1<<PIND3); // MartinR: von PD auf PIND geändert |
set_USB2FC(); |
break; |
case Uart02Wi: |
set_Uart02Wi(); |
break; |
case Uart02FC: |
set_Uart02FC(); |
break; |
case USB2Wi: |
UCSR1B &= ~(1<<RXEN1); |
UCSR1B &= ~(1<<TXEN1); |
UCSR1B &= ~(1<<RXCIE1); |
DDRD &= ~(1<<DDD2); // Pins auf Eingang setzen |
DDRD &= ~(1<<DDD3); |
PORTD &= ~(1<<PIND2); // Pullup aus // MartinR: von PD auf PIND geändert |
PORTD &= ~(1<<PIND3); // MartinR: von PD auf PIND geändert |
set_USB2Wi(); |
break; |
} |
} |
//-------------------------------------------------------------- |
// Function: BT2FC() |
// Purpose: Connect BT direct to FC-Kabel (SV2 as MKUSB) |
// Returns: |
//-------------------------------------------------------------- |
void Port_BT2FC(void) |
{ |
lcd_cls (); |
if(UseBT == true) |
{ |
// lcd_printp_at (0, 0, PSTR(" MK-USB Funktion "), 2); |
lcd_puts_at(0, 0, strGet(CONNECT14), 2); |
// lcd_printp_at (0, 1, PSTR(" BT --> Kabel an FC "), 2); |
lcd_puts_at(0, 1, strGet(CONNECT15), 0); |
// lcd_printp_at (0, 3, PSTR("PC mit BT verb."), 0); |
lcd_puts_at(0, 3, strGet(CONNECT16), 0); |
// lcd_printp_at (0, 4, PSTR("PKT-Kabel an FC"), 0); |
lcd_puts_at(0, 4, strGet(CONNECT17), 0); |
// lcd_printp_at (0, 5, PSTR("MK-Tool starten"), 0); |
// lcd_printp_at (12, 7, PSTR("Esc"), 0); |
lcd_puts_at(0, 5, strGet(CONNECT23), 0); |
lcd_puts_at(12, 7, strGet(ESC), 0); |
set_BTOn(); |
Change_Output(USB2FC); |
do |
{ |
#ifndef ohne_Lipo // MartinR |
show_Lipo(); |
#endif |
} |
while(!get_key_press (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
if (U02SV2 == 1) |
Change_Output(Uart02FC); |
else |
Change_Output(Uart02Wi); |
set_BTOff(); |
return; |
} |
else |
{ |
// lcd_printp_at (0, 0, PSTR("Es ist kein BTM-222 "), 0); |
// lcd_printp_at (0, 1, PSTR("Modul eingebaut! "), 0); |
// lcd_printp_at (0, 3, PSTR("Wenn doch, dann bitte"), 0); |
// lcd_printp_at (0, 4, PSTR("das Modul zuerst im "), 0); |
// lcd_printp_at (0, 5, PSTR("Setupmenü aktivieren."), 0); |
lcd_puts_at(0, 1, strGet(CONNECT12), 0); |
lcd_puts_at(0, 1, strGet(CONNECT13), 0); |
lcd_puts_at(0, 2, strGet(CONNECT7), 0); |
lcd_puts_at(0, 3, strGet(CONNECT8), 0); |
lcd_puts_at(0, 4, strGet(CONNECT9), 0); |
lcd_puts_at(12, 7, strGet(ENDE), 0); |
// lcd_printp_at (12, 7, PSTR("Ende"), 0); |
while(!get_key_press (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
return; |
} |
} |
//-------------------------------------------------------------- |
// Function: BT2Wi() |
// Purpose: Connect BT direct to Wi.232 |
// Returns: |
//-------------------------------------------------------------- |
void Port_BT2Wi(void) |
{ |
lcd_cls (); |
// if((UseBT == true) && (UseWi == true))6.1.2012 CB Abfrage entfernt, damit die Funktion auch ohne Module geht |
{ |
// lcd_printp_at (0, 0, PSTR(" MK-USB Funktion "), 2); |
lcd_puts_at(0, 0, strGet(CONNECT14), 2); |
// lcd_printp_at (0, 1, PSTR(" BT --> Wi.232 "), 2); |
lcd_puts_at(0, 1, strGet(CONNECT18), 2); |
// lcd_printp_at (0, 3, PSTR("PC mit BT verbinden "), 0); |
lcd_puts_at(0, 3, strGet(CONNECT16), 0); |
// lcd_printp_at (0, 4, PSTR("Wi.232 an FC "), 0); |
lcd_puts_at(0, 4, strGet(CONNECT19), 0); |
// lcd_printp_at (0, 5, PSTR("MK-Tool starten "), 0); |
lcd_puts_at(0, 5, strGet(CONNECT23), 0); |
// lcd_printp_at (12, 7, PSTR("Esc"), 0); |
lcd_puts_at(12, 7, strGet(ESC), 0); |
set_BTOn(); |
Change_Output(USB2Wi); |
do |
{ |
#ifndef ohne_Lipo // MartinR |
show_Lipo(); |
#endif |
} |
while(!get_key_press (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
if (U02SV2 == 1) |
Change_Output(Uart02FC); |
else |
Change_Output(Uart02Wi); |
set_BTOff(); |
return; |
} |
// else |
// { |
//// lcd_printp_at (0, 0, PSTR("Es ist kein BTM-222 "), 0); |
//// lcd_printp_at (0, 1, PSTR("Modul eingebaut! "), 0); |
//// lcd_printp_at (0, 3, PSTR("Wenn doch, dann bitte"), 0); |
//// lcd_printp_at (0, 4, PSTR("das Modul zuerst im "), 0); |
//// lcd_printp_at (0, 5, PSTR("Setupmenü aktivieren."), 0); |
// |
// lcd_puts_at(0, 0, strGet(CONNECT12), 0); |
// lcd_puts_at(0, 1, strGet(CONNECT13), 0); |
// lcd_puts_at(0, 2, strGet(CONNECT7), 0); |
// lcd_puts_at(0, 3, strGet(CONNECT8), 0); |
// lcd_puts_at(0, 4, strGet(CONNECT9), 0); |
// lcd_puts_at(12, 7, strGet(ENDE), 0); |
//// lcd_printp_at (12, 7, PSTR("Ende"), 0); |
// |
// while(!get_key_press (1 << KEY_ESC)); |
// get_key_press(KEY_ALL); |
// |
// return; |
// } |
} |
//-------------------------------------------------------------- |
// Function: FC2CFG_BT() |
// Purpose: Connect FC (Tx1 Pin3, Rx1 Pin4) direct to BT |
// Returns: |
//-------------------------------------------------------------- |
void Port_FC2CFG_BT(void) |
{ |
lcd_cls (); |
lcd_printp_at (0, 0, PSTR("BTM-222 Konfigurieren"), 2); |
lcd_printp_at (0, 1, PSTR("FC > MK-USB > BTM-222"), 2); |
lcd_printp_at (0, 3, PSTR("MK-USB an PC anschl. "), 0); |
lcd_printp_at (0, 4, PSTR("Zwischen MK-USB und "), 0); |
lcd_printp_at (0, 5, PSTR("PKT ein gekreuztes "), 0); |
lcd_printp_at (0, 6, PSTR("Kabel anschliessen. "), 0); |
lcd_puts_at(12, 7, strGet(ESC), 0); |
// lcd_printp_at (12, 7, PSTR("Esc"), 0); |
set_BTOn(); |
Change_Output(USB2FC); |
while(!get_key_press (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
if (U02SV2 == 1) |
Change_Output(Uart02FC); |
else |
Change_Output(Uart02Wi); |
set_BTOff(); |
return; |
} |
//-------------------------------------------------------------- |
// Function: USB2FC() |
// Purpose: Connect USB direct to FC-Kabel (SV2 as MKUSB) |
// Returns: |
//-------------------------------------------------------------- |
void Port_USB2FC(void) |
{ |
lcd_cls (); |
// lcd_printp_at (0, 0, PSTR(" MK-USB Funktion "), 2); |
lcd_puts_at(0, 0, strGet(CONNECT14), 2); |
// lcd_printp_at (0, 1, PSTR(" USB --> Kabel an FC "), 2); |
lcd_puts_at(0, 1, strGet(CONNECT20), 0); |
// lcd_printp_at (0, 3, PSTR("PC mit USB verbinden "), 0); |
lcd_puts_at(0, 3, strGet(CONNECT21), 0); |
// lcd_printp_at (0, 4, PSTR("PKT-Kabel an FC "), 0); |
lcd_puts_at(0, 4, strGet(CONNECT17), 0); |
// lcd_printp_at (0, 5, PSTR("MK-Tool starten "), 0); |
// lcd_printp_at (12, 7, PSTR("Esc"), 0); |
lcd_puts_at(0, 5, strGet(CONNECT23), 0); |
lcd_puts_at(12, 7, strGet(ESC), 0); |
Change_Output(USB2FC); |
do |
{ |
#ifndef ohne_Lipo // MartinR |
show_Lipo(); |
#endif |
} |
while(!get_key_press (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
if (U02SV2 == 1) |
Change_Output(Uart02FC); |
else |
Change_Output(Uart02Wi); |
return; |
} |
//-------------------------------------------------------------- |
// Function: USB2Wi() |
// Purpose: Connect USB direct to Wi.232 |
// Returns: |
//-------------------------------------------------------------- |
void Port_USB2Wi(void) |
{ |
lcd_cls (); |
// if(UseWi == true) // 6.1.2012 CB Abfrage entfernt, damit die Funktion auch ohne Module geht |
{ |
// lcd_printp_at (0, 0, PSTR(" MK-USB Funktion "), 2); |
lcd_puts_at(0, 0, strGet(CONNECT14), 2); |
// lcd_printp_at (0, 1, PSTR(" USB --> Wi.232 "), 2); |
lcd_puts_at(0, 1, strGet(CONNECT22), 2); |
// lcd_printp_at (0, 3, PSTR("PC mit USB verbinden "), 0); |
lcd_puts_at(0, 3, strGet(CONNECT21), 0); |
// lcd_printp_at (0, 4, PSTR("Wi.232 an FC "), 0); |
lcd_puts_at(0, 4, strGet(CONNECT19), 0); |
// lcd_printp_at (0, 5, PSTR("MK-Tool starten "), 0); |
lcd_puts_at(0, 5, strGet(CONNECT23), 0); |
lcd_puts_at(12, 7, strGet(ESC), 0); |
// lcd_printp_at (12, 7, PSTR("Esc"), 0); |
Change_Output(USB2Wi); |
do |
{ |
#ifndef ohne_Lipo // MartinR |
show_Lipo(); |
#endif |
} |
while(!get_key_press (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
if (U02SV2 == 1) |
Change_Output(Uart02FC); |
else |
Change_Output(Uart02Wi); |
return; |
} |
// else |
// { |
//// lcd_printp_at (0, 0, PSTR("Es ist kein Wi.232 "), 0); |
//// lcd_printp_at (0, 1, PSTR("Modul eingebaut! "), 0); |
//// lcd_printp_at (0, 3, PSTR("Wenn doch, dann bitte"), 0); |
//// lcd_printp_at (0, 4, PSTR("das Modul zuerst im "), 0); |
//// lcd_printp_at (0, 5, PSTR("Setupmenü aktivieren."), 0); |
//// lcd_printp_at (12, 7, PSTR("Ende"), 0); |
// lcd_puts_at(0, 0, strGet(CONNECT5), 0); |
// lcd_puts_at(0, 1, strGet(CONNECT6), 0); |
// lcd_puts_at(0, 2, strGet(CONNECT7), 0); |
// lcd_puts_at(0, 3, strGet(CONNECT8), 0); |
// lcd_puts_at(0, 4, strGet(CONNECT9), 0); |
// lcd_puts_at(12, 7, strGet(ENDE), 0); |
// while(!get_key_press (1 << KEY_ESC)); |
// get_key_press(KEY_ALL); |
// |
// return; |
// } |
} |
//-------------------------------------------------------------- |
// Function: USB2CFG_Wi() |
// Purpose: Connect USB direct to Wi.232 in Progmode |
// Returns: |
//-------------------------------------------------------------- |
void Port_USB2CFG_Wi(void) |
{ |
lcd_cls (); |
// lcd_printp_at (0, 0, PSTR(" Wi.232 Konfigurieren"), 2); |
lcd_puts_at(0, 0, strGet(CONNECT24), 2); |
// lcd_printp_at (0, 1, PSTR(" USB --> Wi.232 "), 2); |
lcd_puts_at(0, 1, strGet(CONNECT22), 2); |
// lcd_printp_at (0, 3, PSTR("PC mit USB verbinden."), 0); |
lcd_puts_at(0, 3, strGet(CONNECT21), 0); |
lcd_printp_at (0, 4, PSTR("Radiotronix Wi.232DTS"), 0); |
lcd_printp_at (0, 5, PSTR("Evaluation (868MHz) "), 0); |
// lcd_printp_at (0, 6, PSTR("Programm starten. "), 0); |
lcd_puts_at(0, 6, strGet(CONNECT25), 0); |
lcd_puts_at(12, 7, strGet(ESC), 0); |
// lcd_printp_at (12, 7, PSTR("Esc"), 0); |
Change_Output(USB2Wi); |
set_WI232CMD(); // Port D6 = CMD |
while(!get_key_press (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
clr_WI232CMD(); // Port D6 = CMD |
if (U02SV2 == 1) |
Change_Output(Uart02FC); |
else |
Change_Output(Uart02Wi); |
return; |
} |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/connect.h |
---|
0,0 → 1,48 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#ifndef _CONNECT_H |
#define _CONNECT_H |
void Change_Output(uint8_t UartMode); |
void Port_BT2Wi(void); |
void Port_BT2FC(void); |
void Port_FC2CFG_BT(void); |
void Port_USB2FC(void); |
void Port_USB2Wi(void); |
void Port_USB2CFG_Wi(void); |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/cpu.h |
---|
0,0 → 1,41 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#ifndef _CPU_H |
#define _CPU_H |
// Quarz Frequenz in Hz |
//#define F_CPU 20000000UL // MartinR: in Makefile |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/debug.c |
---|
0,0 → 1,375 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#include "cpu.h" |
#include <avr/io.h> |
#include <avr/pgmspace.h> |
#include <util/delay.h> |
#include <string.h> |
#include "main.h" |
//#include "menu.h" |
#include "lcd.h" |
#include "usart.h" |
#include "debug.h" |
#include "timer.h" |
#include "messages.h" |
#include "mk-data-structs.h" |
#ifdef HWVERSION3_9 |
#define TIMEOUT 200 // 2 sec |
#define ANALOGTIME 20 // 200 ms |
// WARNING: this work for NC & FC only |
// if current_hardware == MK3MAG or MKGPS the access is outside of the array... |
uint8_t AnalogNames[2][32][16 + 1]; // 32 names, 16 characters + 1 0x00 |
uint8_t AnalogNamesRead[2] = {0,0}; |
//-------------------------------------------------------------- |
// |
void GetAnalogNames (void) |
{ |
uint8_t i = AnalogNamesRead[current_hardware - 1]; |
uint8_t t = 0; |
lcd_cls (); |
lcd_printp_at (0, 3, PSTR("Reading"), 0); |
lcd_printp_at (0, 4, PSTR("Analog Names: "), 0); |
mode = 'A'; // read Names |
_delay_ms(200); |
rxd_buffer_locked = FALSE; |
timer = ANALOGTIME; |
while (i < 32) |
{ |
SendOutData ('a', ADDRESS_ANY, 1, &i, 1); |
while (!rxd_buffer_locked && timer); |
if (timer) |
{ |
Decode64 (); |
if (i == *pRxData) |
{ |
write_ndigit_number_u(14, 4, i, 2, 0,0); |
memcpy (AnalogNames[current_hardware - 1][*pRxData], (uint8_t *) pRxData + 1, 16); |
AnalogNames[current_hardware - 1][*pRxData][16] = 0; |
i++; |
t = 0; |
} |
else |
{ |
_delay_ms (100); |
} |
timer = ANALOGTIME; |
rxd_buffer_locked = FALSE; |
} |
else |
{ // timeout occured |
t++; |
timer = ANALOGTIME; |
if (t >= 50) |
{ |
lcd_printp_at (0, 2, PSTR("ERROR: no data"), 0); |
timer = 100; |
while (timer > 0); |
break; |
} |
} |
} |
AnalogNamesRead[current_hardware - 1] = i; |
#if 0 |
if (timer) |
{ |
for (page = 0; page < 5; page++) |
{ |
for (i = 0; i < 7; i++) |
{ |
lcd_print_at (0, i, AnalogNames[current_hardware - 1][i + page * 7], 0); |
} |
while (!get_key_press (1 << KEY_ESC)); // ESC |
get_key_press(KEY_ALL); |
} |
} |
//return; |
#endif |
} |
//-------------------------------------------------------------- |
// |
void display_debug (void) |
{ |
uint8_t i = 0; |
uint8_t tmp_dat; |
uint8_t page = 0; |
DebugData_t *DebugData; |
lcd_cls (); |
timer = TIMEOUT; |
if (AnalogNamesRead[current_hardware - 1] < 32) |
{ |
GetAnalogNames (); |
} |
if (!timer) |
{ |
return; |
} |
mode = 'D'; // Debug Data |
rxd_buffer_locked = FALSE; |
timer = TIMEOUT; |
tmp_dat = 10; |
SendOutData ('d', ADDRESS_ANY, 1, &tmp_dat, 1); |
abo_timer = ABO_TIMEOUT; |
for (i = 0; i < 7; i++) |
{ |
lcd_print_at (0, i, AnalogNames[current_hardware - 1][i + page * 7], 0); |
if (page == 4 && i > 3) |
{ |
for (i = 4; i < 7; i++) // Linie 4, 5, 6 loeschen |
{ |
lcd_cls_line (0, i, 21); |
} |
i = 7; |
} |
} |
do |
{ |
if (rxd_buffer_locked) |
{ |
Decode64 (); |
DebugData = (DebugData_t *) pRxData; |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_3), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE3), 0); |
lcd_write_number_u_at (5, 7, page + 1); |
switch (current_hardware) |
{ |
case FC: |
lcd_printp_at (3, 7, PSTR("FC"), 0); |
lcd_printp_at (19, 7, PSTR("NC"), 0); |
break; |
case NC: |
lcd_printp_at (3, 7, PSTR("NC"), 0); |
lcd_printp_at (19, 7, PSTR("FC"), 0); |
break; |
default: |
lcd_printp_at (19, 7, PSTR("?"), 0); |
break; |
} |
for (i = 0; i < 7; i++) |
{ |
//lcd_print_at (0, i, AnalogNames[i + page * 7], 0); |
uint8_t size =0; |
if( DebugData->Analog[i + page * 7] < -9999) |
{ |
size = 6; |
} |
else if ( DebugData->Analog[i + page * 7] < -999) |
{ |
size = 5; |
} |
else if ( DebugData->Analog[i + page * 7] < -99) |
{ |
size = 4; |
} |
else if ( DebugData->Analog[i + page * 7] < 999) |
{ |
size = 3; |
} |
else if ( DebugData->Analog[i + page * 7] < 9999) |
{ |
size = 4; |
} |
else |
{ |
size = 5; |
} |
write_ndigit_number_s (21-size, i, DebugData->Analog[i + page * 7], size, 0,0); |
if (page == 4 && i > 3) |
{ |
for (i = 4; i < 7; i++) // Linie 4, 5, 6 loeschen |
{ |
lcd_cls_line (0, i, 21); |
} |
i = 7; |
} |
} |
timer = TIMEOUT; |
rxd_buffer_locked = FALSE; |
} |
if (!abo_timer) |
{ // renew abo every 3 sec |
// request OSD Data from NC every 100ms |
// RS232_request_mk_data (1, 'o', 100); |
tmp_dat = 10; |
SendOutData ('d', ADDRESS_ANY, 1, &tmp_dat, 1); |
abo_timer = ABO_TIMEOUT; |
} |
if (get_key_press (1 << KEY_MINUS)) |
{ |
page--; |
if (page > 4) |
{ |
page = 4; |
} |
lcd_cls (); |
for (i = 0; i < 7; i++) |
{ |
lcd_print_at (0, i, AnalogNames[current_hardware - 1][i + page * 7], 0); |
if (page == 4 && i > 3) |
{ |
for (i = 4; i < 7; i++) // Linie 4, 5, 6 loeschen |
{ |
lcd_cls_line (0, i, 21); |
} |
i = 7; |
} |
} |
} |
else if (get_key_press (1 << KEY_PLUS)) |
{ |
page++; |
if (page > 4) |
{ |
page = 0; |
} |
lcd_cls (); |
for (i = 0; i < 7; i++) |
{ |
lcd_print_at (0, i, AnalogNames[current_hardware - 1][i + page * 7], 0); |
if (page == 4 && i > 3) |
{ |
for (i = 4; i < 7; i++) // Linie 4, 5, 6 loeschen |
{ |
lcd_cls_line (0, i, 21); |
} |
i = 7; |
} |
} |
} |
if ((hardware == NC) && get_key_press (1 << KEY_ENTER)) |
{ |
tmp_dat = 0; |
SendOutData ('d', ADDRESS_ANY, 1, &tmp_dat, 1); |
_delay_ms (200); |
if (current_hardware == NC) |
{ |
SwitchToFC(); |
timer = TIMEOUT; |
} |
else |
{ |
SwitchToNC(); |
timer = TIMEOUT; |
} |
_delay_ms (200); |
if (AnalogNamesRead[current_hardware - 1] < 32) |
{ |
GetAnalogNames (); |
} |
mode = 'D'; // Debug Data |
rxd_buffer_locked = FALSE; |
timer = TIMEOUT; |
tmp_dat = 10; |
SendOutData ('d', ADDRESS_ANY, 1, &tmp_dat, 1); |
lcd_cls (); |
page = 0; |
for (i = 0; i < 7; i++) |
{ |
lcd_print_at (0, i, AnalogNames[current_hardware - 1][i + page * 7], 0); |
if (page == 4 && i > 3) |
{ |
for (i = 4; i < 7; i++) // Linie 4, 5, 6 loeschen |
{ |
lcd_cls_line (0, i, 21); |
} |
i = 7; |
} |
} |
} |
} |
while (!get_key_press (1 << KEY_ESC) && timer); // ESC |
get_key_press(KEY_ALL); |
tmp_dat = 0; |
SendOutData ('d', ADDRESS_ANY, 1, &tmp_dat, 1); |
mode = 0; |
rxd_buffer_locked = FALSE; |
if (!timer) |
{ // timeout occured |
lcd_cls (); |
lcd_printp_at (0, 2, PSTR("ERROR: no data"), 0); |
timer = 100; |
while (timer > 0); |
} |
SwitchToNC(); |
} |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/debug.h |
---|
0,0 → 1,42 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#ifndef _DEBUG_H |
#define _DEBUG_H |
extern uint8_t AnalogNamesRead[2]; |
void display_debug(void); |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/display.c |
---|
0,0 → 1,180 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#include "cpu.h" |
#include <avr/io.h> |
#include <avr/pgmspace.h> |
#include <util/delay.h> |
#include "main.h" |
#include "lcd.h" |
#include "usart.h" |
#include "timer.h" |
#include "messages.h" |
#include "mk-data-structs.h" |
#define TIMEOUT 500 // 5 sec |
void display_data (void) |
{ |
uint8_t cmd; |
uint8_t flag = 0;; |
mode = 'H'; |
lcd_cls (); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_3), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE3), 0); |
if (current_hardware == NC) |
{ |
lcd_printp_at (0, 0, PSTR(" Navi-Ctrl Display "), 2); |
lcd_printp_at (19, 7, PSTR("FC"), 0); |
} |
else |
{ |
if (hardware == FC) |
{ |
lcd_printp_at (0, 0, PSTR(" Display "), 2); |
lcd_printp_at (19, 7, PSTR(" "), 0); |
} |
else |
{ |
lcd_printp_at (0, 0, PSTR(" Flight-Ctrl Display "), 2); |
lcd_printp_at (19, 7, PSTR("NC"), 0); |
} |
} |
rxd_buffer_locked = FALSE; |
timer = TIMEOUT; |
cmd = 0xfc; // Home = first page |
do |
{ |
SendOutData('h', ADDRESS_ANY, 1, &cmd, 1); |
cmd = 0xff; |
//LED6_TOGGLE; |
_delay_ms (250); |
if (rxd_buffer_locked) |
{ |
Decode64 (); |
flag = 1; |
if (!hardware) |
{ // hardware was not detected at startup |
hardware = rxd_buffer[1] - 'a'; |
if (hardware == NC) |
{ |
lcd_printp_at (0, 0, PSTR(" Navi-Ctrl Display "), 2); |
lcd_printp_at (19, 7, PSTR("FC"), 0); |
current_hardware = NC; |
} |
else |
{ |
lcd_printp_at (0, 0, PSTR(" Display "), 2); |
lcd_printp_at (19, 7, PSTR(" "), 0); |
current_hardware = FC; |
} |
} |
#if 0 |
rxd_buffer[24] = 0; |
lcd_print_at (0, rxd_buffer[3] + 1, (uint8_t *) &rxd_buffer[4], 0); |
#else |
rxd_buffer[83] = 0; |
print_display_at (0, 2, (uint8_t *) &rxd_buffer[3]); |
#endif |
rxd_buffer_locked = FALSE; |
timer = TIMEOUT; |
} |
if (get_key_press (1 << KEY_MINUS) || get_key_long_rpt_sp ((1 << KEY_MINUS), 2)) |
{ |
cmd = 0xfe; // next page |
//SendOutData('h', ADDRESS_ANY, 1, &cmd, 1); |
//cmd = 0; |
} |
else if (get_key_press (1 << KEY_PLUS) || get_key_long_rpt_sp ((1 << KEY_PLUS), 2)) |
{ |
cmd = 0xfd; // previous page |
//SendOutData('h', ADDRESS_ANY, 1, &cmd, 1); |
//cmd = 0; |
} |
else if ((hardware == NC) && get_key_press (1 << KEY_ENTER)) |
{ |
if (current_hardware == NC) |
{ |
SwitchToFC(); |
//timer = TIMEOUT; |
lcd_printp_at (0, 0, PSTR(" Flight-Ctrl Display "), 2); |
lcd_printp_at (19, 7, PSTR("NC"), 0); |
} |
else |
{ |
SwitchToNC(); |
//timer = TIMEOUT; |
lcd_printp_at (0, 0, PSTR(" Navi-Ctrl Display "), 2); |
lcd_printp_at (19, 7, PSTR("FC"), 0); |
} |
cmd = 0xfc; // Home = first page |
//SendOutData('h', ADDRESS_ANY, 1, &cmd, 1); |
//cmd = 0; |
} |
} |
while (!get_key_press (1 << KEY_ESC) && timer); |
get_key_press(KEY_ALL); |
mode = 0; |
rxd_buffer_locked = FALSE; |
if (!timer) |
{ // timeout occured |
if (flag) |
{ |
lcd_cls (); |
} |
lcd_printp_at (0, 2, PSTR("Fehler: Keine Daten"), 0); |
timer = 100; |
while (timer > 0); |
} |
SwitchToNC(); |
} |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/display.h |
---|
0,0 → 1,42 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#ifndef _DISPLAY_H |
#define _DISPLAY_H |
void display_data (void); |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/eeprom.c |
---|
0,0 → 1,482 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#include "cpu.h" |
#include <avr/io.h> |
#include <avr/pgmspace.h> |
#include <util/delay.h> |
#include <stdlib.h> |
#include <string.h> |
#include <avr/eeprom.h> |
#include <stdbool.h> |
#include <avr/wdt.h> |
#include "lcd.h" |
#include "main.h" |
#include "timer.h" |
#include "eeprom.h" |
#include "Wi232.h" |
#include "mk-data-structs.h" |
#include "connect.h" |
//-------------------------------------------------------------- |
// |
uint8_t EE_LowBat EEMEM = 137; // 13,7V |
uint8_t EE_DisplayTimeout EEMEM = 0; // Display immer an |
uint8_t EE_DisplayLanguage EEMEM = 254; // Default ungesetzt |
uint8_t EE_WiTXRXChannel EEMEM = 1; // Kanal 1 MK Standard |
uint8_t EE_WiNetworkGroup EEMEM = 66; // Gruppe 66 MK Standard |
uint8_t EE_WiNetworkMode EEMEM = NetMode_Normal; // MK Standard; |
uint8_t EE_WiTXTO EEMEM = TWaitTime16; // MK Standard |
uint8_t EE_WiUartMTU EEMEM = UartMTU64; // MK Standard |
uint8_t EE_LCD_Orientation EEMEM = 0; // normale Ansicht |
uint8_t EE_LCD_DisplayMode EEMEM = 0; // Normal |
uint8_t EE_LCD_Kontrast EEMEM = 27; // Kontrast normal |
uint8_t EE_LCD_Helligkeit EEMEM = 100; // Helligkeit in %gkeit in % |
uint8_t EE_USBBT EEMEM = 0; // USB Betrieb |
uint8_t EE_U02SV2 EEMEM = 1; // SV2 (Kabel) Standard |
uint8_t EE_Debug EEMEM = 0; // kein Debug |
uint8_t EE_UseWi EEMEM = true; // Wi.232 eingebaut? |
uint8_t EE_UseBT EEMEM = true; // BT-222 eingebaut? |
uint8_t EE_BTIsSlave EEMEM = true; // BT-222 Slave gesetzt? |
uint8_t EE_WiIsSet EEMEM = false; // Flag für die Initialisierung Wi232 |
uint8_t EE_BTIsSet EEMEM = false; // Flag für die Initialisierung Bluetooth |
uint8_t EE_PKT_IdleBeep EEMEM = 0; // kein Piepsen bei Inaktivität |
uint8_t EE_PKT_StartInfo EEMEM = true; // Startinformationen anzeigen |
uint16_t EE_Lipo_UOffset EEMEM = 0; // Offset für die Lipospannugsmessung |
uint8_t EE_PKT_Accutyp EEMEM = true; // True = Lipo, False = LiON |
uint8_t EE_OSD_RCErrorbeep EEMEM = true; //Empfangsausffallwarnung im OSD Screen |
uint8_t EE_OSD_InvertOut EEMEM = false; // Invertierte Anzeige Out1 und Out2 |
uint8_t EE_OSD_LEDform EEMEM = 1; // Form der Anzeige ( + oder schwarz) |
uint8_t EE_OSD_SendOSD EEMEM = false; // Sende OSD-Daten an SV2 |
uint8_t EE_OSD_Fallspeed EEMEM = 0; // Maximal Sinkrate, für Warnmeldung |
uint8_t EE_OSD_VarioBeep EEMEM = 1; // Vario Beep im OSD Screen |
uint8_t EE_OSD_HomeMKView EEMEM = true; // Home Circle from MK-View |
uint16_t EE_OSD_mAh_Warning EEMEM = 10000; //Warnschwelle für mAh |
uint8_t EE_OSD_ScreenMode EEMEM = 0; //Variante des OSD-Screen |
uint8_t EE_OSD_LipoBar EEMEM = 0; //Bargraphanzeige für MK Lipo |
uint8_t EE_PKT_Baudrate EEMEM = Wi232_57600; // Baudrate für BT und Wi232, siehe Wi223.h |
uint16_t EE_FM_Refresh EEMEM = 500; // FollowMe interval |
uint16_t EE_FM_Speed EEMEM = 30; // FollowMe Speed in m/s *0.1 |
uint16_t EE_FM_Radius EEMEM = 5; // Waypoint Tolerance Radius in meter |
uint8_t EEMEM EE_BTPin[bt_pin_length + 1]; |
uint8_t EEMEM EE_BTName[bt_name_length + 1]; |
uint8_t EEMEM EE_gps_UsedDevName[20]; // benutztes GPS Device Name |
uint8_t EEMEM EE_gps_UsedMac[14]; // benutztes GPS Device Mac Adresse |
uint8_t EEMEM EE_gps_UseGPS; // ist GPS aktiv? |
uint8_t EEMEM EE_gps_UsedGPSMouse; // GPS Maustyp |
uint32_t EE_LastLongitude EEMEM = 0; |
uint32_t EE_LastLatitude EEMEM = 0; |
WPListDirectory EEWPDirectory[NumberOfWPLists] EEMEM; |
WayPoints EEWayPointList[NumberOfWaypoints] EEMEM; |
uint8_t EE_PKTVersion EEMEM = EEpromVersion; |
volatile uint8_t DisplayTimeout; |
volatile uint8_t DisplayLanguage; |
volatile uint8_t WiTXRXChannel; |
volatile uint8_t WiNetworkGroup; |
volatile uint8_t WiNetworkMode; |
volatile uint8_t WiTXTO; |
volatile uint8_t WiUartMTU; |
volatile uint8_t LCD_ORIENTATION; |
volatile uint8_t LCD_DisplayMode; |
volatile uint8_t LCD_Kontrast; |
volatile uint8_t LCD_Helligkeit; |
volatile uint8_t USBBT; |
volatile uint8_t U02SV2; |
volatile uint8_t Debug; |
volatile uint8_t UseWi; // Wi232 wird genutzt |
volatile uint8_t UseBT; // BT wird genutzt |
volatile uint8_t WiIsSet; // Wi232 ist initialisiert |
volatile uint8_t BTIsSet; // BT ist initialisiert |
volatile uint8_t BTIsSlave; // Slave Flag |
char bt_pin[bt_pin_length + 1]; // BT Pinnummer |
char bt_name[bt_name_length + 1]; // BT Name |
char gps_UsedDevName[20]; // benutztes GPS Device Name |
char gps_UsedMac[14]; // benutztes GPS Device Mac Adresse |
volatile uint8_t gps_UseGPS; // ist GPS aktiv? |
volatile uint8_t gps_UsedGPSMouse; // GPS Maustyp |
volatile uint32_t LastLongitude; // Letzte Position |
volatile uint32_t LastLatitude; |
volatile uint8_t PKT_IdleBeep; |
volatile uint8_t PKT_StartInfo; |
volatile uint16_t Lipo_UOffset; // Offset für die Lipospannugsmessung |
volatile uint8_t PKT_Accutyp; // verwendeter Akkutyp |
volatile uint8_t OSD_RCErrorbeep; //Empfangsausffallwarnung im OSD Screen |
volatile uint8_t OSD_InvertOut; // Out1/2 invertiert anzeigen |
volatile uint8_t OSD_LEDform; // Form der Anzeige ( + oder schwarz) |
volatile uint8_t OSD_SendOSD; // OSD Daten an SV2 senden |
volatile uint8_t OSD_Fallspeed; // maximale Sinkrate |
volatile uint8_t OSD_VarioBeep; // Vario Beep im OSD Screen |
volatile uint8_t OSD_HomeMKView; // Home Circle from MK-View |
volatile uint16_t OSD_mAh_Warning; // mAh Warnschwelle |
volatile uint8_t OSD_ScreenMode; //Variante des OSD-Screen |
volatile uint8_t OSD_LipoBar; //Bargraphanzeige für MK Lipo |
volatile uint8_t PKT_Baudrate; // Baudrate für BT und Wi232 |
volatile uint16_t FM_Refresh; // FollowMe interval |
volatile uint16_t FM_Speed; // FollowMe Speed in m/s *0.1 |
volatile uint16_t FM_Radius; // Waypoint Tolerance Radius in meter |
volatile WayPoints PKTWayPoint; // Waypointdaten für einen Waypoint |
volatile WPListDirectory PKTWayPointDirectory; // Inhaltsverzeichnis der Listen |
//-------------------------------------------------------------- |
// |
void WriteWiInitFlag(void) |
{ |
WiIsSet = true; |
eeprom_write_byte(&EE_WiIsSet, WiIsSet); |
} |
//-------------------------------------------------------------- |
// |
void WriteBTInitFlag(void) |
{ |
BTIsSet = true; |
eeprom_write_byte(&EE_BTIsSet, BTIsSet); |
} |
//-------------------------------------------------------------- |
// |
void WriteBTSlaveFlag(void) |
{ |
BTIsSlave = true; |
eeprom_write_byte(&EE_BTIsSlave, BTIsSlave); |
} |
//-------------------------------------------------------------- |
// |
void WriteBTMasterFlag(void) |
{ |
BTIsSlave = false; |
eeprom_write_byte(&EE_BTIsSlave, BTIsSlave); |
} |
//-------------------------------------------------------------- |
// |
void ReadLastPosition(void) |
{ |
LastLongitude = eeprom_read_dword(&EE_LastLongitude); |
LastLatitude = eeprom_read_dword(&EE_LastLatitude); |
} |
//-------------------------------------------------------------- |
// |
void WriteLastPosition(uint32_t ELongitude,uint32_t ELatitude) |
{ |
eeprom_write_dword(&EE_LastLongitude,ELongitude); |
eeprom_write_dword(&EE_LastLatitude,ELatitude); |
} |
//-------------------------------------------------------------- |
// |
void ReadParameter (void) |
{ |
if (eeprom_read_byte(&EE_PKTVersion) == EEpromVersion) |
{ |
MK_LowBat = eeprom_read_byte (&EE_LowBat); |
DisplayTimeout = eeprom_read_byte (&EE_DisplayTimeout); |
DisplayLanguage = eeprom_read_byte (&EE_DisplayLanguage); |
WiTXRXChannel = eeprom_read_byte (&EE_WiTXRXChannel); |
WiNetworkGroup = eeprom_read_byte (&EE_WiNetworkGroup); |
WiNetworkMode = eeprom_read_byte (&EE_WiNetworkMode); |
WiTXTO = eeprom_read_byte (&EE_WiTXTO); |
WiUartMTU = eeprom_read_byte (&EE_WiUartMTU); |
LCD_ORIENTATION = eeprom_read_byte (&EE_LCD_Orientation); |
LCD_DisplayMode = eeprom_read_byte (&EE_LCD_DisplayMode); |
LCD_Kontrast = eeprom_read_byte (&EE_LCD_Kontrast); |
LCD_Helligkeit = eeprom_read_byte (&EE_LCD_Helligkeit); |
USBBT = eeprom_read_byte (&EE_USBBT); |
U02SV2 = eeprom_read_byte (&EE_U02SV2); |
Debug = eeprom_read_byte (&EE_Debug); |
UseWi = eeprom_read_byte (&EE_UseWi); |
UseBT = eeprom_read_byte (&EE_UseBT); |
WiIsSet = eeprom_read_byte (&EE_WiIsSet); |
BTIsSet = eeprom_read_byte (&EE_BTIsSet); |
BTIsSlave = eeprom_read_byte (&EE_BTIsSlave); |
PKT_IdleBeep = eeprom_read_byte (&EE_PKT_IdleBeep); |
PKT_StartInfo = eeprom_read_byte (&EE_PKT_StartInfo); |
Lipo_UOffset = eeprom_read_word (&EE_Lipo_UOffset); |
PKT_Accutyp = eeprom_read_byte (&EE_PKT_Accutyp); |
OSD_RCErrorbeep = eeprom_read_byte (&EE_OSD_RCErrorbeep); |
OSD_InvertOut = eeprom_read_byte (&EE_OSD_InvertOut); |
OSD_LEDform = eeprom_read_byte (&EE_OSD_LEDform); |
OSD_SendOSD = eeprom_read_byte (&EE_OSD_SendOSD); |
OSD_Fallspeed = eeprom_read_byte (&EE_OSD_Fallspeed); |
OSD_VarioBeep = eeprom_read_byte (&EE_OSD_VarioBeep); |
OSD_HomeMKView = eeprom_read_byte (&EE_OSD_HomeMKView); |
OSD_mAh_Warning = eeprom_read_word (&EE_OSD_mAh_Warning); |
OSD_ScreenMode = eeprom_read_byte (&EE_OSD_ScreenMode); |
OSD_LipoBar = eeprom_read_byte (&EE_OSD_LipoBar); |
PKT_Baudrate = eeprom_read_byte (&EE_PKT_Baudrate); |
FM_Refresh = eeprom_read_word (&EE_FM_Refresh); |
FM_Speed = eeprom_read_word (&EE_FM_Speed); |
FM_Radius = eeprom_read_word (&EE_FM_Radius); |
New_Baudrate = PKT_Baudrate; // Merkzellen setzen |
Old_Baudrate = PKT_Baudrate; |
eeprom_read_block ((void*)&bt_pin, (const void*)&EE_BTPin, bt_pin_length); |
eeprom_read_block ((void*)&bt_name, (const void*)&EE_BTName, bt_name_length); |
eeprom_read_block ((void*)&gps_UsedDevName, (const void*)&EE_gps_UsedDevName, 20); |
eeprom_read_block ((void*)&gps_UsedMac, (const void*)&EE_gps_UsedMac, 14); |
gps_UseGPS = eeprom_read_byte (&EE_gps_UseGPS); |
gps_UsedGPSMouse = eeprom_read_byte (&EE_gps_UsedGPSMouse); |
LastLongitude = eeprom_read_dword (&EE_LastLongitude); |
LastLatitude = eeprom_read_dword (&EE_LastLatitude); |
} |
else |
Delete_EEPROM(); |
} |
//-------------------------------------------------------------- |
void Delete_EEPROM(void) |
{ |
// EEPROM auf Default setzen |
lcd_cls(); |
lcd_printp_at (0, 0, PSTR(" EEPROM Parameter "), 2); |
lcd_printp_at (0, 1, PSTR("werden auf"), 0); |
lcd_printp_at (0, 2, PSTR("Standardwerte gesetzt"), 0); |
MK_LowBat = 137; // 13,7V |
DisplayTimeout = 0; // Display immer an |
DisplayLanguage = 1; // default englisch |
WiTXRXChannel = 1; // Kanal 1 MK Standard |
WiNetworkGroup = 66; // Gruppe 66 MK Standard |
WiNetworkMode = NetMode_Normal; // MK Standard |
WiTXTO = TWaitTime16; // MK Standard |
WiUartMTU = UartMTU64; // MK Standard |
LCD_ORIENTATION = 0; // normale Ansicht |
LCD_DisplayMode = 0; // Normal |
LCD_Kontrast = 20; // Kontrast normal |
LCD_Helligkeit = 100; // Helligkeit in % |
USBBT = 0; // USB Betrieb |
U02SV2 = 0; // SV2 (Kabel) Standard |
Debug = 0; // kein Debug |
UseWi = true; // Wi.232 eingebaut? |
UseBT = true; // BT-222 eingebaut? |
WiIsSet = false; // Flag für die Initialisierung Wi232 |
BTIsSet = false; // Flag für die Initialisierung Bluetooth |
BTIsSlave = true; // Slave Flag setzen |
PKT_IdleBeep = 0; // kein Piepsen bei Inaktivität |
PKT_StartInfo = true; // Startnformationen anzeigen |
PKT_Accutyp = true; // True = Lipo, False= LiON |
OSD_RCErrorbeep = true; // OSD Receiveerrorbeep |
OSD_InvertOut = false; // LED Anzeige invertiren |
OSD_LEDform = 1; // Form der Anzeige ( + oder schwarz) |
OSD_SendOSD = false; // OSD Daten an SV2 |
OSD_Fallspeed = 40; // maximale Sinkrate |
OSD_VarioBeep = 1; // Vario Beep ein |
OSD_HomeMKView = true; // Home Circle from MK View |
OSD_mAh_Warning = 10000; //mAh Warnschwelle |
OSD_ScreenMode = 0; // Variante des OSD Screen |
OSD_LipoBar = 0; //Bargraphanzeige für MK Lipo |
PKT_Baudrate = Wi232_57600; //Baudrate für BT und Wi232 |
Lipo_UOffset = 6000; // Offset für PKT-Lipomessung |
FM_Refresh = 500; // FollowMe interval |
FM_Speed = 30; // FollowMe Speed in m/s *0.1 |
FM_Radius = 5; // Waypoint Tolerance Radius in meter |
LastLongitude = 88199720; |
LastLatitude = 522039630; |
eeprom_write_dword(&EE_LastLongitude,LastLongitude); |
eeprom_write_dword(&EE_LastLatitude,LastLatitude); |
strcpy_P(bt_pin, PSTR("0000")); |
eeprom_write_block ((const void*)&bt_pin, (void*)&EE_BTPin, bt_pin_length); |
strcpy_P(bt_name, PSTR("PKT Cebra ")); // Wenn Name kürzer als "bt_name_length" mit Leerzeichen auffüllen |
eeprom_write_block ((const void*)&bt_name, (void*)&EE_BTName, bt_name_length); |
for(uint8_t i = 0; i < 20; i++) |
{ |
gps_UsedDevName[i] = 0; // benutztes GPS Device Name |
} |
for(uint8_t i = 0; i < 14; i++) |
{ |
gps_UsedMac[i] = '0'; // benutztes GPS Device Mac Adresse |
} |
gps_UseGPS = false; // ist GPS aktiv? |
gps_UsedGPSMouse = 0; |
eeprom_write_byte(&EE_WiIsSet,WiIsSet); |
eeprom_write_byte(&EE_BTIsSet,BTIsSet); |
eeprom_write_byte(&EE_PKTVersion,EEpromVersion); |
WriteParameter(); |
// lcd_printp_at (0, 4, PSTR("Waypoints loeschen"), 0); |
// EEWayPointList_Clear(); |
lcd_printp_at (0, 6, PSTR("!!Check Parameter!! "), 0); |
lcd_printp_at (18, 7, PSTR("OK"), 0); |
set_beep ( 200, 0x0080, BeepNormal); |
do{} |
while (!(get_key_short (1 << KEY_ENTER))); |
// _delay_ms(500); |
//#if defined HWVERSION3_9 |
// clr_V_On(); |
//#else |
// |
// wdt_enable( WDTO_250MS ); |
// while (1) |
// {;} |
//#endif |
} |
//-------------------------------------------------------------- |
// |
void WriteParameter (void) |
{ |
eeprom_write_byte (&EE_LowBat, MK_LowBat); |
eeprom_write_byte (&EE_DisplayTimeout, DisplayTimeout); |
eeprom_write_byte (&EE_DisplayLanguage, DisplayLanguage); |
eeprom_write_byte (&EE_WiTXRXChannel, WiTXRXChannel); |
eeprom_write_byte (&EE_WiNetworkGroup, WiNetworkGroup); |
eeprom_write_byte (&EE_WiNetworkMode, WiNetworkMode); |
eeprom_write_byte (&EE_WiTXTO, WiTXTO); |
eeprom_write_byte (&EE_WiUartMTU, WiUartMTU); |
eeprom_write_byte (&EE_LCD_Orientation, LCD_ORIENTATION); |
eeprom_write_byte (&EE_LCD_DisplayMode, LCD_DisplayMode); |
eeprom_write_byte (&EE_LCD_Kontrast, LCD_Kontrast); |
eeprom_write_byte (&EE_LCD_Helligkeit, LCD_Helligkeit); |
eeprom_write_byte (&EE_USBBT, USBBT); |
eeprom_write_byte (&EE_U02SV2, U02SV2); |
eeprom_write_byte (&EE_Debug, Debug); |
eeprom_write_byte (&EE_UseWi, UseWi); |
eeprom_write_byte (&EE_UseBT, UseBT); |
eeprom_write_byte (&EE_WiIsSet, WiIsSet); |
eeprom_write_byte (&EE_BTIsSet, BTIsSet); |
eeprom_write_byte (&EE_BTIsSlave, BTIsSlave); |
eeprom_write_byte (&EE_PKT_IdleBeep, PKT_IdleBeep); |
eeprom_write_byte (&EE_PKT_StartInfo, PKT_StartInfo); |
eeprom_write_word (&EE_Lipo_UOffset,Lipo_UOffset); |
eeprom_write_byte (&EE_PKT_Accutyp, PKT_Accutyp); |
eeprom_write_byte (&EE_OSD_RCErrorbeep, OSD_RCErrorbeep); |
eeprom_write_byte (&EE_OSD_InvertOut, OSD_InvertOut); |
eeprom_write_byte (&EE_OSD_LEDform, OSD_LEDform); |
eeprom_write_byte (&EE_OSD_SendOSD, OSD_SendOSD); |
eeprom_write_byte (&EE_OSD_Fallspeed, OSD_Fallspeed); |
eeprom_write_byte (&EE_OSD_VarioBeep, OSD_VarioBeep); |
eeprom_write_byte (&EE_OSD_HomeMKView, OSD_HomeMKView); |
eeprom_write_word (&EE_OSD_mAh_Warning, OSD_mAh_Warning); |
eeprom_write_byte (&EE_OSD_ScreenMode, OSD_ScreenMode); |
eeprom_write_byte (&EE_OSD_LipoBar, OSD_LipoBar); |
eeprom_write_byte (&EE_PKT_Baudrate, PKT_Baudrate); |
eeprom_write_word (&EE_FM_Refresh,FM_Refresh); |
eeprom_write_word (&EE_FM_Speed,FM_Speed); |
eeprom_write_word (&EE_FM_Radius,FM_Radius); |
eeprom_write_block ((const void*)&bt_pin, (void*)&EE_BTPin, bt_pin_length); |
eeprom_write_block ((const void*)&bt_name, (void*)&EE_BTName, bt_name_length); |
eeprom_write_block ((const void*)&gps_UsedDevName, (void*)&EE_gps_UsedDevName, 20); |
eeprom_write_block ((const void*)&gps_UsedMac, (void*)&EE_gps_UsedMac, 14); |
eeprom_write_byte (&EE_gps_UseGPS,gps_UseGPS); |
eeprom_write_byte (&EE_gps_UsedGPSMouse,gps_UsedGPSMouse); |
} |
//-------------------------------------------------------------- |
// |
void EEWayPointList_Clear(void) // löschen der Waypointliste im EEProm |
{ |
uint8_t i; |
PKTWayPoint.Waypoint.Position.Latitude = 0; |
PKTWayPoint.Waypoint.Position.Longitude = 0; |
PKTWayPoint.Waypoint.Position.Altitude = 0; |
PKTWayPoint.Waypoint.Heading = 361; |
for(i = 0; i < MAX_WPLIST_LEN; i++) |
{ |
PKTWayPointDirectory.WPList.WPDirectory[i] = 0; |
} |
for(i = 0; i < NumberOfWaypoints; i++) |
{ |
lcd_printp (PSTR("."), 0); |
eeprom_write_byte (&EEWayPointList[i].WPIndex, i); |
eeprom_write_byte (&EEWayPointList[i].Waypoint.Position.Status, INVALID); |
eeprom_write_block ((const void*)&PKTWayPoint.Waypoint.Position.Latitude, (void*)&EEWayPointList[i].Waypoint.Position.Latitude, sizeof(EEWayPointList[i].Waypoint.Position.Latitude)); |
eeprom_write_block ((const void*)&PKTWayPoint.Waypoint.Position.Longitude, (void*)&EEWayPointList[i].Waypoint.Position.Longitude, sizeof(EEWayPointList[i].Waypoint.Position.Longitude)); |
eeprom_write_block ((const void*)&PKTWayPoint.Waypoint.Position.Altitude, (void*)&EEWayPointList[i].Waypoint.Position.Altitude, sizeof(EEWayPointList[i].Waypoint.Position.Altitude)); |
eeprom_write_block ((const void*)&PKTWayPoint.Waypoint.Heading, (void*)&EEWayPointList[i].Waypoint.Heading, sizeof(EEWayPointList[i].Waypoint.Heading)); |
eeprom_write_byte (&EEWayPointList[i].Waypoint.ToleranceRadius, 0); // in meters, if the MK is within that range around the target, then the next target is triggered |
eeprom_write_byte (&EEWayPointList[i].Waypoint.HoldTime, 0); // in seconds, if the was once in the tolerance area around a WP, this time defines the delay before the next WP is triggered |
eeprom_write_byte (&EEWayPointList[i].Waypoint.Type, POINT_TYPE_INVALID); |
eeprom_write_byte (&EEWayPointList[i].Waypoint.Event_Flag, 0); // future implementation |
eeprom_write_byte (&EEWayPointList[i].Waypoint.AltitudeRate, 0); // no change of setpoint |
} |
for(i = 0; i < NumberOfWPLists; i++) |
{ |
lcd_printp (PSTR("."), 0); |
eeprom_write_byte (&EEWPDirectory[i].WPList.WPListnumber, i); |
eeprom_write_byte (&EEWPDirectory[i].WPList.WPListAktiv, false); |
eeprom_write_byte (&EEWPDirectory[i].WPList.POI_CAM_NICK_CTR, 0); |
eeprom_write_byte (&EEWPDirectory[i].WPList.UsePOI, 0); |
eeprom_write_block ((const void*)&PKTWayPointDirectory.WPList.WPDirectory, (void*)&EEWPDirectory[i].WPList.WPDirectory, sizeof(EEWPDirectory[i].WPList.WPDirectory)); |
} |
lcd_printp (PSTR("\r\n"), 0); |
} |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/eeprom.h |
---|
0,0 → 1,172 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#ifndef _EEPROM_H |
#define _EEPROM_H |
#include <stdbool.h> |
#include "mk-data-structs.h" |
#include "connect.h" |
//[General] |
//FileVersion = 2 |
//NumberOfWaypoints = 15 |
//UsePOI = 0 |
//POI_CAM_NICK_CTRL = 0 |
//[POI] |
//Altitude = 1 |
//Latitude = 46.7140763 |
//Longitude = 19.2507334 |
//[Waypoint1] |
//Latitude = 46.7145686 |
//Longitude = 19.2515702 |
//Radius = 10 |
//Altitude = 15 |
//ClimbRate = 0 |
//DelayTime = 4 |
//WP_Event_Channel_Value = 96 |
//Heading = 180 |
#define EEpromVersion 0x70 //wird nach jeder Parametererweiterung hochgezählt |
#define NumberOfWaypoints 55 //Anzahl der Waypoints in der EEPromliste |
#define NumberOfWPLists 5 //Anzahl WP Listen im PKT |
#define bt_pin_length 4 |
#define bt_name_length 10 |
#define POINT_TYPE_INVALID 255 |
#define POINT_TYPE_WP 0 |
#define POINT_TYPE_POI 1 |
#define INVALID 0x00 |
#define MAX_WPLIST_LEN 31 |
typedef struct |
{ |
uint8_t WPIndex; // Index in der EEpromliste |
Point_t Waypoint; // Waypoint |
} WayPoints; |
typedef struct |
{ |
uint8_t WPListnumber; // Nummer der WP Liste im PKT |
uint8_t WPListAktiv; // Liste aktiv |
uint8_t WPDirectory[31]; // Enthält die Indexe der Waypoints im EEPROM |
uint8_t UsePOI; |
uint8_t POI_CAM_NICK_CTR; |
} WPListHeader; |
typedef struct |
{ |
WPListHeader WPList; // Waypointliste im PKT |
} WPListDirectory; |
void ReadParameter (void); |
void WriteParameter (void); |
void ReadLastPosition(void); |
void WriteLastPosition(uint32_t ELongitude,uint32_t ELatitude); |
void WriteWiInitFlag(void); |
void WriteBTInitFlag(void); |
void WriteBTSlaveFlag(void); |
void WriteBTMasterFlag(void); |
void Delete_EEPROM(void); |
void EEWayPointList_Clear(void); // l�schen der Waypointliste im EEProm |
uint8_t MK_LowBat; |
extern volatile uint8_t LCD_ORIENTATION; |
extern volatile uint8_t LCD_DisplayMode; |
extern volatile uint8_t LCD_Kontrast; |
extern volatile uint8_t LCD_Helligkeit; |
extern volatile uint8_t DisplayTimeout; |
extern volatile uint8_t DisplayLanguage; |
extern volatile uint8_t WiTXRXChannel; |
extern volatile uint8_t WiNetworkGroup; |
extern volatile uint8_t WiNetworkMode; |
extern volatile uint8_t WiTXTO; |
extern volatile uint8_t WiUartMTU; |
extern volatile uint8_t USBBT; |
extern volatile uint8_t U02SV2; |
extern volatile uint8_t Debug; |
extern volatile uint8_t UseWi; // Wi232 wird genutzt |
extern volatile uint8_t UseBT; // BT wird genutzt |
extern volatile uint8_t WiIsSet; // Wi232 ist initialisiert |
extern volatile uint8_t BTIsSet; // BT ist initialisiert |
extern volatile uint8_t BTIsSlave; // BT ist Slave |
extern char bt_pin[bt_pin_length + 1]; // BT Pinnummer |
extern char bt_name[bt_name_length + 1]; // BT Name |
extern char gps_UsedDevName[20]; // benutztes GPS Device Name |
extern char gps_UsedMac[14]; // benutztes GPS Device Mac Adresse |
extern volatile uint8_t gps_UseGPS; // ist GPS aktiv? |
extern volatile uint8_t gps_UsedGPSMouse; |
extern volatile uint32_t LastLongitude; |
extern volatile uint32_t LastLatitude; |
extern volatile uint8_t PKT_IdleBeep; |
extern volatile uint8_t PKT_StartInfo; |
extern volatile uint16_t Lipo_UOffset; // Offset für die Lipospannugsmessung |
extern volatile uint8_t PKT_Accutyp; |
extern volatile uint8_t OSD_RCErrorbeep; |
extern volatile uint8_t OSD_InvertOut; // Out1/2 invertiert anzeigen |
extern volatile uint8_t OSD_LEDform; // Form der Anzeige ( + oder schwarz) |
extern volatile uint8_t OSD_SendOSD; // OSD Daten an SV2 senden |
extern volatile uint8_t OSD_Fallspeed; // maximale Sinkrate |
extern volatile uint8_t OSD_VarioBeep; // Vario Beep im OSD Screen |
extern volatile uint8_t OSD_HomeMKView; // Home Circle from MK-View |
extern volatile uint16_t OSD_mAh_Warning; // mAh Warnschwelle |
extern volatile uint8_t OSD_ScreenMode; //Variante des OSD-Screen |
extern volatile uint8_t OSD_LipoBar; //Bargraphanzeige für MK Lipo |
extern volatile uint8_t PKT_Baudrate; // Baudrate für BT und Wi232 |
extern volatile uint16_t FM_Refresh; // FollowMe interval |
extern volatile uint16_t FM_Speed; // FollowMe Speed in m/s *0.1 |
extern volatile uint16_t FM_Radius; // Waypoint Tolerance Radius in meter |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/error.c |
---|
0,0 → 1,207 |
/* |
___ ___ ___ ___ _____ |
/ /\ /__/\ / /\ /__/\ / /::\ |
/ /::\ | |::\ / /::\ \ \:\ / /:/\:\ |
/ /:/\:\ ___ ___ | |:|:\ / /:/\:\ \ \:\ / /:/ \:\ |
/ /:/~/::\ /__/\ / /\ __|__|:|\:\ / /:/ \:\ _____\__\:\ /__/:/ \__\:| |
/__/:/ /:/\:\ \ \:\ / /:/ /__/::::| \:\ /__/:/ \__\:\ /__/::::::::\ \ \:\ / /:/ |
\ \:\/:/__\/ \ \:\ /:/ \ \:\~~\__\/ \ \:\ / /:/ \ \:\~~\~~\/ \ \:\ /:/ |
\ \::/ \ \:\/:/ \ \:\ \ \:\ /:/ \ \:\ ~~~ \ \:\/:/ |
\ \:\ \ \::/ \ \:\ \ \:\/:/ \ \:\ \ \::/ |
\ \:\ \__\/ \ \:\ \ \::/ \ \:\ \__\/ |
\__\/ \__\/ \__\/ \__\/ |
___ ___ ___ ___ ___ ___ |
/ /\ / /\ /__/\ /__/\ / /\ /__/\ |
/ /:/ / /::\ | |::\ | |::\ / /::\ \ \:\ |
/ /:/ / /:/\:\ | |:|:\ | |:|:\ / /:/\:\ \ \:\ |
/ /:/ ___ / /:/ \:\ __|__|:|\:\ __|__|:|\:\ / /:/ \:\ _____\__\:\ |
/__/:/ / /\ /__/:/ \__\:\ /__/::::| \:\ /__/::::| \:\ /__/:/ \__\:\ /__/::::::::\ |
\ \:\ / /:/ \ \:\ / /:/ \ \:\~~\__\/ \ \:\~~\__\/ \ \:\ / /:/ \ \:\~~\~~\/ |
\ \:\ /:/ \ \:\ /:/ \ \:\ \ \:\ \ \:\ /:/ \ \:\ ~~~ |
\ \:\/:/ \ \:\/:/ \ \:\ \ \:\ \ \:\/:/ \ \:\ |
\ \::/ \ \::/ \ \:\ \ \:\ \ \::/ \ \:\ |
\__\/ \__\/ \__\/ \__\/ \__\/ \__\/ |
** |
* Error handling functions |
*/ |
#include <stdbool.h> |
//#include "ftdi.h" |
#include <avr/pgmspace.h> |
#include "error_driver.h" |
#include "main.h" |
//-------------------------------------------------------------- |
inline void _send_msg(const char *msg) |
{ |
for (uint8_t i=0; i<255 && msg[i]!='\0'; i++) |
{ |
errordriver_write_c(msg[i]); |
} |
errordriver_write_c('\n'); |
} |
//-------------------------------------------------------------- |
void send_pgm(const prog_char *msg) |
{ |
uint8_t myByte; |
myByte = pgm_read_byte(msg); |
for(int i = 1; myByte != '\0'; i++) |
{ |
errordriver_write_c(myByte); |
myByte = pgm_read_byte(msg+i); |
} |
} |
#ifdef DEBUG |
//-------------------------------------------------------------- |
void error_init(void) |
{ |
error_driver_Init(); |
} |
//-------------------------------------------------------------- |
void error_putc(const char c) |
{ |
errordriver_write_c(c); |
} |
//-------------------------------------------------------------- |
void assert (bool condition, const char *msg) |
{ |
if (!condition) |
{ |
send_pgm(PSTR("ASS:")); |
_send_msg(msg); |
} |
} |
//-------------------------------------------------------------- |
void info (const char *msg) |
{ |
send_pgm(PSTR("INF:")); |
_send_msg(msg); |
} |
//-------------------------------------------------------------- |
void warn (const char *msg) |
{ |
send_pgm(PSTR("WARN:")); |
_send_msg(msg); |
} |
//-------------------------------------------------------------- |
void debug (const char *msg) |
{ |
send_pgm(PSTR("DBG:")); |
_send_msg(msg); |
} |
//-------------------------------------------------------------- |
void Error (const char *msg) |
{ |
send_pgm(PSTR("ERR:")); |
_send_msg(msg); |
} |
#endif |
#ifdef DEBUG |
//-------------------------------------------------------------- |
void assert_pgm(bool condition, const prog_char *msg) |
{ |
if (condition) { |
send_pgm(PSTR("ASS:")); |
send_pgm(msg); |
errordriver_write_c('\n'); |
} |
} |
//-------------------------------------------------------------- |
void info_pgm(const prog_char *msg) |
{ |
send_pgm(PSTR("INF:")); |
send_pgm(msg); |
errordriver_write_c('\n'); |
} |
//-------------------------------------------------------------- |
void warn_pgm(const prog_char *msg) |
{ |
send_pgm(PSTR("WARN:")); |
send_pgm(msg); |
errordriver_write_c('\n'); |
} |
//-------------------------------------------------------------- |
void error_pgm(const prog_char *msg) |
{ |
send_pgm(PSTR("ERR:")); |
send_pgm(msg); |
errordriver_write_c('\n'); |
} |
//-------------------------------------------------------------- |
void debug_pgm(const prog_char *msg) |
{ |
send_pgm(PSTR("DBG:")); |
send_pgm(msg); |
errordriver_write_c('\n'); |
} |
//-------------------------------------------------------------- |
void print_hex(uint8_t num) |
{ |
if (num<10) |
error_putc(num+48); |
else |
{ |
switch (num) |
{ |
case 10: |
error_putc('A'); break; |
case 11: |
error_putc('B'); break; |
case 12: |
error_putc('C'); break; |
case 13: |
error_putc('D'); break; |
case 14: |
error_putc('E'); break; |
case 15: |
error_putc('F'); break; |
default: |
error_putc('#'); break; |
} |
} |
} |
//-------------------------------------------------------------- |
void byte_to_hex(uint8_t byte) |
{ |
uint8_t b2 = (byte & 0x0F); |
uint8_t b1 = ((byte & 0xF0)>>4); |
print_hex(b1); |
print_hex(b2); |
} |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/error.h |
---|
0,0 → 1,79 |
/* |
___ ___ ___ ___ _____ |
/ /\ /__/\ / /\ /__/\ / /::\ |
/ /::\ | |::\ / /::\ \ \:\ / /:/\:\ |
/ /:/\:\ ___ ___ | |:|:\ / /:/\:\ \ \:\ / /:/ \:\ |
/ /:/~/::\ /__/\ / /\ __|__|:|\:\ / /:/ \:\ _____\__\:\ /__/:/ \__\:| |
/__/:/ /:/\:\ \ \:\ / /:/ /__/::::| \:\ /__/:/ \__\:\ /__/::::::::\ \ \:\ / /:/ |
\ \:\/:/__\/ \ \:\ /:/ \ \:\~~\__\/ \ \:\ / /:/ \ \:\~~\~~\/ \ \:\ /:/ |
\ \::/ \ \:\/:/ \ \:\ \ \:\ /:/ \ \:\ ~~~ \ \:\/:/ |
\ \:\ \ \::/ \ \:\ \ \:\/:/ \ \:\ \ \::/ |
\ \:\ \__\/ \ \:\ \ \::/ \ \:\ \__\/ |
\__\/ \__\/ \__\/ \__\/ |
___ ___ ___ ___ ___ ___ |
/ /\ / /\ /__/\ /__/\ / /\ /__/\ |
/ /:/ / /::\ | |::\ | |::\ / /::\ \ \:\ |
/ /:/ / /:/\:\ | |:|:\ | |:|:\ / /:/\:\ \ \:\ |
/ /:/ ___ / /:/ \:\ __|__|:|\:\ __|__|:|\:\ / /:/ \:\ _____\__\:\ |
/__/:/ / /\ /__/:/ \__\:\ /__/::::| \:\ /__/::::| \:\ /__/:/ \__\:\ /__/::::::::\ |
\ \:\ / /:/ \ \:\ / /:/ \ \:\~~\__\/ \ \:\~~\__\/ \ \:\ / /:/ \ \:\~~\~~\/ |
\ \:\ /:/ \ \:\ /:/ \ \:\ \ \:\ \ \:\ /:/ \ \:\ ~~~ |
\ \:\/:/ \ \:\/:/ \ \:\ \ \:\ \ \:\/:/ \ \:\ |
\ \::/ \ \::/ \ \:\ \ \:\ \ \::/ \ \:\ |
\__\/ \__\/ \__\/ \__\/ \__\/ \__\/ |
* |
* Error handling functions. |
*/ |
#ifndef __ERROR__ |
#define __ERROR__ |
#include <avr/pgmspace.h> |
#include <stdbool.h> |
#include "main.h" |
#ifdef DEBUG |
void error_init(void); |
void error_putc(const char c); |
void assert (bool condition, const char *msg); |
void info (const char *msg); |
void warn(const char *msg); |
void debug(const char *msg); |
void Error(const char *msg); |
void assert_pgm(bool condition, const prog_char *msg); |
void info_pgm (const prog_char *msg); |
void warn_pgm(const prog_char *msg); |
void debug_pgm(const prog_char *msg); |
void error_pgm(const prog_char *msg); |
void byte_to_hex(uint8_t byte); |
#else |
#define error_init() {} |
#define error_putc(c) {} |
#define assert(cond, msg) {} |
#define info(msg) {} |
#define warn(msg) {} |
#define debug(msg) {} |
#define error(msg) {} |
#define assert_pgm(cond, msg) {} |
#define info_pgm(msg) {} |
#define warn_pgm(msg) {} |
#define debug_pgm(msg) {} |
#define error_pgm(msg) {} |
#define byte_to_hex(byte) {} |
#endif |
#endif //__ERROR__ |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/error_driver.c |
---|
0,0 → 1,27 |
#include <avr/pgmspace.h> |
#include <stdbool.h> |
//#include "cpu.h" |
#include "error_driver.h" |
#include "main.h" |
#ifdef DEBUG |
#include "usart.h" |
#include "uart1.h" |
void errordriver_write_c(uint8_t c) |
{ |
USART_putc(c); |
} |
void error_driver_Init(void) |
{ |
// USART_Init(UART_BAUD_SELECT(USART_BAUD,F_CPU)); |
} |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/error_driver.h |
---|
0,0 → 1,22 |
/* |
* Functions to write error message to FTDI or USART |
*/ |
#ifndef __ERROR_DRIVER__ |
#define __ERROR_DRIVER__ |
#include <avr/io.h> |
#include "main.h" |
#ifdef DEBUG |
extern void errordriver_write_c(uint8_t c); |
extern void error_driver_Init(void); |
#else |
#define errordriver_write_c(c) {} |
#define error_driver_init() {} |
#endif |
#endif //__ERROR_DRIVER__ |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/fifo.c |
---|
0,0 → 1,148 |
/** |
* a simple Fifo |
* @file fifo.c |
* @author Pascal Schnurr |
*/ |
#include "fifo.h" |
//#if defined HWVERSION1_3W || defined HWVERSION3_9 || defined HWVERSION1_2W |
//-------------------------------------------------------------- |
void fifo_init (fifo_t * fifo, uint8_t * buffer, uint16_t size) |
{ |
fifo->size = size; |
fifo->buffer = buffer; |
fifo->head = 0; |
fifo->count = 0; |
} |
//-------------------------------------------------------------- |
uint16_t fifo_getcount (const fifo_t * fifo) |
{ |
return fifo->count; |
} |
//-------------------------------------------------------------- |
bool fifo_is_empty (const fifo_t * fifo) |
{ |
return (fifo->count == 0); |
} |
//-------------------------------------------------------------- |
bool fifo_is_full (const fifo_t * fifo) |
{ |
return (fifo->size - fifo->count == 0); |
} |
//-------------------------------------------------------------- |
bool fifo_read (fifo_t * fifo, char *data) |
{ |
if (fifo_is_empty (fifo)) |
return false; |
uint8_t *head = fifo->buffer + fifo->head; |
*data = (char) * head; |
fifo->head = ( (fifo->head + 1) % fifo->size); |
fifo->count--; |
return true; |
} |
//-------------------------------------------------------------- |
bool fifo_write (fifo_t * fifo, const char data) |
{ |
if (fifo_is_full (fifo)) |
return false; |
uint8_t *end = fifo->buffer + ( (fifo->head + fifo->count) % fifo->size); |
*end = (uint8_t) data; |
fifo->count++; |
return true; |
} |
//-------------------------------------------------------------- |
bool fifo_clear (fifo_t * fifo) |
{ |
fifo->count = 0; |
fifo->head = 0; |
return true; |
} |
//-------------------------------------------------------------- |
static bool fifo_cmp_pgm_at (fifo_t * fifo, const prog_char * pgm, const uint16_t index) |
{ |
uint16_t i; |
uint8_t fifo_byte; |
uint8_t pgm_byte; |
for (i = 0; pgm_read_byte (pgm + i) != 0; i++) |
{ |
if (fifo->count <= (i + index)) |
return false; |
pgm_byte = pgm_read_byte (pgm + i); |
fifo_byte = * (fifo->buffer + ( (fifo->head + i + index) % fifo->size)); |
if (fifo_byte != pgm_byte) |
return false; |
} |
// We found the string, lets move the pointer |
fifo->head = ( (fifo->head + i + index) % fifo->size); |
fifo->count -= (i + index); |
return true; |
} |
//-------------------------------------------------------------- |
bool fifo_search (fifo_t * fifo, const prog_char * pgm) |
{ |
uint16_t i; |
uint8_t fifo_byte; |
uint8_t pgm_byte; |
for (i = 0; pgm_read_byte (pgm + i) != 0; i++) |
{ |
if (fifo->count <= i) |
return false; |
pgm_byte = pgm_read_byte (pgm + i); |
fifo_byte = * (fifo->buffer + ( (fifo->head + i) % fifo->size)); |
if (fifo_byte != pgm_byte) |
return false; |
} |
// // We found the string, lets move the pointer |
// fifo->head = ( (fifo->head + i + index) % fifo->size); |
// |
// fifo->count -= (i + index); |
return true; |
} |
//-------------------------------------------------------------- |
bool fifo_cmp_pgm (fifo_t * fifo, const prog_char * pgm) |
{ |
return fifo_cmp_pgm_at (fifo, pgm, 0); |
} |
//-------------------------------------------------------------- |
bool fifo_strstr_pgm (fifo_t * fifo, const prog_char * pgm) |
{ |
for (uint16_t i = 0; i < fifo->count; i++) |
{ |
if (fifo_cmp_pgm_at (fifo, pgm, i)) |
return true; |
} |
return false; |
} |
//#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/fifo.h |
---|
0,0 → 1,93 |
/** |
* a simple Fifo |
* @file fifo.h |
* @author Pascal Schnurr |
*/ |
#include <avr/pgmspace.h> |
#include <stdbool.h> |
#ifndef _FIFO_H_ |
#define _FIFO_H_ |
/** |
*fifo data structure all vital fifo information |
*/ |
typedef struct |
{ |
uint16_t count; /**< current number of elements */ |
uint16_t head; /**< position of the head element */ |
uint16_t size; /**< size equals max number of entrys*/ |
uint8_t* buffer; /**< pointer to memory area where the fifo is to be saved */ |
} fifo_t; |
uint16_t fifo_getcount (const fifo_t * fifo); |
/** \brief initialize of a fifo |
* sets all the information in your given fifo structure |
* @param fifo pointer to an allocated fifo_t structure |
* @param buffer pointer to an a allocated memory space for the fifo of size = sizeof(uint8_t) * size |
* @param size max number of entrys the fifo will hold |
*/ |
void fifo_init (fifo_t *fifo, uint8_t *buffer, uint16_t size); |
/** \brief checks if fifo is empty |
* @param fifo pointer to your initialized fifo_t structure |
* @return true if empty otherwise false |
*/ |
bool fifo_is_empty (const fifo_t *fifo); |
/** \brief checks if fifo is full |
* @param fifo pointer to your initialized fifo_t structure |
* @return true if full otherwise false |
*/ |
bool fifo_is_full (const fifo_t *fifo); |
/** \brief clears the fifo |
* resets your fifo structure to 0 elements |
* @param fifo pointer to your initialized fifo_t structure |
* @return always true (never fails) |
*/ |
bool fifo_clear (fifo_t *fifo); |
/** \brief reads head of fifo |
* reads the first element and removes it |
* @param fifo pointer to your initialized fifo_t structure |
* @return false if fifo is empty false otherwise |
*/ |
bool fifo_read (fifo_t *fifo, char *data); |
/** \brief inserts a char into the fifo |
* adds a char to the end of the fifo |
* @param fifo pointer to your initialized fifo_t structure |
* @param data the char data to be inserted |
* @return false if fifo is full true otherwise |
*/ |
bool fifo_write (fifo_t *fifo, const char data); |
/** \brief compares first elements with prog_char string |
* if pgm equals the first elements of the fifo these elements are removed |
* @param fifo pointer to your initialized fifo_t structure |
* @param pgm a prog_char string for comparison |
* @return true if pgm is equal to the first entrys in the fifo, false otherwise |
*/ |
bool fifo_cmp_pgm (fifo_t* fifo, const prog_char* pgm); |
/** \brief searches a string in the whole fifo |
* starts at the beginning and searches for the pgm string in the fifo, |
* |
* @param fifo pointer to your initialized fifo_t structure |
* @param pgm a prog_char with the search string |
* @return true if found, false otherwise |
*/ |
bool fifo_search (fifo_t * fifo, const prog_char * pgm); |
/** \brief searches a string in the whole fifo |
* starts at the beginning and searches for the pgm string in the fifo, |
* if they are found previous entrys and the string are removed from the fifo |
* @param fifo pointer to your initialized fifo_t structure |
* @param pgm a prog_char with the search string |
* @return true if found, false otherwise |
*/ |
bool fifo_strstr_pgm (fifo_t *fifo, const prog_char *pgm); |
#endif /* _FIFO_H_ */ |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/followme.c |
---|
0,0 → 1,318 |
/* |
* FollowMe.c |
* |
* Created on: 18.05.2012 |
* Author: cebra |
*/ |
/***************************************************************************** |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#include "cpu.h" |
#include <avr/io.h> |
#include <inttypes.h> |
#include <stdlib.h> |
#include <avr/pgmspace.h> |
#include <util/delay.h> |
#include "main.h" |
#include "followme.h" |
#include "osd.h" |
#include "lcd.h" |
#include "timer.h" |
#include "usart.h" |
#include "eeprom.h" |
#include "messages.h" |
#include "parameter.h" |
#include "mk-data-structs.h" |
#define COSD_WASFLYING 4 |
#define TIMEOUT 200 // 2 sec |
// global definitions and global vars |
NaviData_t *naviData; |
mk_param_struct_t *mk_param_struct; |
//uint16_t old_hh = 0; |
uint8_t Flags_ExtraConfig; |
uint8_t Flags_GlobalConfig; |
uint8_t Flags_GlobalConfig3; |
unsigned char Element; |
uint16_t heading_home; |
// Hier Höhenanzeigefehler Korrigieren |
#define AltimeterAdjust 1.5 |
// Positionen der Anzeigeelemente im Bildschirm |
#define OSD_ALTITUDE_CONTROL 1 |
#define OSD_ALTITUDE 2 |
#define OSD_BATTERY_LEVEL 3 |
#define OSD_CAPACITY 4 |
#define OSD_CARE_FREE 5 |
#define OSD_COMPASS_DEGREE 6 |
#define OSD_COMPASS_DIRECTION 7 |
#define OSD_COMPASS_ROSE 8 |
#define OSD_CURRENT 9 |
#define OSD_FLYING_TIME 10 |
#define OSD_GROUND_SPEED 11 |
#define OSD_HOME_CIRCLE 12 |
#define OSD_HOME_DEGREE 13 |
#define OSD_HOME_DISTANCE 14 |
#define OSD_LED1_OUTPUT 15 |
#define OSD_LED2_OUTPUT 16 |
#define OSD_MANUELL 17 |
#define OSD_NAVI_MODE 18 |
#define OSD_RC_INTENSITY 19 |
#define OSD_SATS_IN_USE 20 |
#define OSD_STATUS_FLAGS 21 |
#define OSD_VARIOMETER 22 |
// Flags |
//uint8_t COSD_FLAGS2 = 0; |
// |
//GPS_Pos_t last5pos[7]; |
uint8_t FM_error = 0; |
//-------------------------------------------------------------- |
void FollowMe (void) |
{ |
uint8_t flag; |
uint8_t tmp_dat; |
// uint8_t OSD_Mode; |
// uint8_t info_3D = 0; |
uint8_t status; |
// Clear statistics |
// max_Altimeter = 0; |
// max_GroundSpeed = 0; |
// max_Distance = 0; |
// min_UBat = 255; |
// max_FlyingTime = 0; |
// flags from last round to check for changes |
uint8_t old_FCFlags = 0; |
// uint8_t old_AngleNick = 0; |
// uint8_t old_AngleRoll = 0; |
lcd_cls(); |
if (hardware == FC) |
{ |
lcd_puts_at(0, 3, strGet(ONLY_NC), 0); // Nur mit NC |
timer = 100; |
while (timer > 0); |
return; |
} |
SwitchToFC(); |
status = load_setting(0xff); |
if(status == 255) |
{ |
lcd_puts_at(0, 0, strGet(NO_SETTINGS), 0); // Keine Setings |
_delay_ms(2000); |
} |
Flags_ExtraConfig = mk_param_struct->ExtraConfig; |
Flags_GlobalConfig = mk_param_struct->GlobalConfig; |
Flags_GlobalConfig3 = mk_param_struct->GlobalConfig3; |
SwitchToNC(); |
mode = 'O'; |
// disable debug... |
// RS232_request_mk_data (0, 'd', 0); |
tmp_dat = 0; |
SendOutData ('d', ADDRESS_ANY, 1, &tmp_dat, 1); |
// request OSD Data from NC every 100ms |
// RS232_request_mk_data (1, 'o', 100); |
tmp_dat = 10; |
// OSD_active = true; // benötigt für Navidata Ausgabe an SV2 |
SendOutData ('o', ADDRESS_NC, 1, &tmp_dat, 1); |
flag = 0; |
timer = TIMEOUT; |
abo_timer = ABO_TIMEOUT; |
do |
{ |
if (rxd_buffer_locked) |
{ |
timer = TIMEOUT; |
Decode64 (); |
naviData = (NaviData_t *) pRxData; |
if(FM_error == 1) |
lcd_cls(); |
FM_error = 0; |
GPS_Pos_t currpos; |
currpos.Latitude = naviData->CurrentPosition.Latitude; |
currpos.Longitude = naviData->CurrentPosition.Longitude; |
flag = 1; |
{ |
// Altitude Control |
OSD_Screen_Element (0, 3, OSD_ALTITUDE_CONTROL); |
// |
// // Altitude |
// OSD_Screen_Element (11, 3, OSD_ALTITUDE); |
// Battery level |
OSD_Screen_Element (0, 7, OSD_BATTERY_LEVEL); |
// Capacity |
OSD_Screen_Element (13, 7, OSD_CAPACITY); |
// Care Free |
OSD_Screen_Element (12, 2, OSD_CARE_FREE); |
// // Compass Degree |
// OSD_Screen_Element (13, 0, OSD_COMPASS_DEGREE); |
// |
// // Compass Direction |
// OSD_Screen_Element (18, 0, OSD_COMPASS_DIRECTION); |
// |
// // Compass Rose |
// OSD_Screen_Element (12, 1, OSD_COMPASS_ROSE); |
// Current |
OSD_Screen_Element (7, 7, OSD_CURRENT); |
// Flying time |
lcd_printp_at (0, 1, PSTR("Flytime:"), 0); |
OSD_Screen_Element (8, 1, OSD_FLYING_TIME); |
// Ground Speed |
lcd_printp_at (0, 0, PSTR("Speed:"), 0); |
OSD_Screen_Element (6, 0, OSD_GROUND_SPEED); |
// Sats in use |
OSD_Screen_Element (16, 0, OSD_SATS_IN_USE); |
// // Home Circle |
// OSD_Screen_Element (16, 4, OSD_HOME_CIRCLE); |
// |
// // Home Degree |
// OSD_Screen_Element (12, 4, OSD_HOME_DEGREE); |
// Home Distance |
lcd_printp_at (11, 3, PSTR("Dist:"), 0); |
OSD_Screen_Element (17, 3, OSD_HOME_DISTANCE); |
// |
// // LED1 Output |
// OSD_Screen_Element (0, 6, OSD_LED1_OUTPUT); |
// |
// // LED2 Output |
// OSD_Screen_Element (5, 6, OSD_LED2_OUTPUT); |
// Manuell |
// OSD_Screen_Element (7, 0, OSD_MANUELL); |
// Navi Mode |
OSD_Screen_Element (0, 2, OSD_NAVI_MODE); |
// RC Intensity |
// OSD_Screen_Element (11, 6, OSD_RC_INTENSITY); |
// Status Flags |
// OSD_Screen_Element (0, 2, OSD_STATUS_FLAGS); |
// // Variometer |
// OSD_Screen_Element (9, 0, OSD_VARIOMETER); |
lcd_printp_at (0, 4, PSTR("MK:"), 0); |
write_ndigit_number_u (3, 4, (uint16_t)(currpos.Latitude/10000000), 2, 0,0); |
lcd_printp_at (5, 4, PSTR("."), 0); |
write_ndigit_number_u (6, 4, (uint16_t)((currpos.Latitude/1000) % 10000), 4, 1,0); |
write_ndigit_number_u (10, 4, (uint16_t)((currpos.Latitude/10) % 100), 2, 1,0); |
write_ndigit_number_u (12, 4, (uint16_t)(currpos.Longitude/10000000), 2, 0,0); |
lcd_printp_at (14, 4, PSTR("."), 0); |
write_ndigit_number_u (15, 4, (uint16_t)((currpos.Longitude/1000) % 10000), 4, 1,0); |
write_ndigit_number_u (19, 4, (uint16_t)((currpos.Longitude/10) % 100), 2, 1,0); |
lcd_printp_at (0, 5, PSTR("!!!not implemented!!!"), 2); |
// Akku Warnung |
if (naviData->UBat < MK_LowBat) |
{ //Beeper ein |
set_beep ( 3000, 0x0020, BeepNormal); |
} |
if (naviData->UBat > MK_LowBat) //bei kurzzeitigen Schwankungen Beeper erst wieder aus wenn UBat 0,2 V höher als Warnschwelle |
{ //Beeper aus |
set_beep ( 0, 0, BeepOff); |
} |
// Akku Warnung Ende |
old_FCFlags = naviData->FCStatusFlags; |
rxd_buffer_locked = FALSE; |
} |
if (!abo_timer) |
{ // renew abo every 3 sec |
// request OSD Data from NC every 100ms |
// RS232_request_mk_data (1, 'o', 100); |
tmp_dat = 10; |
SendOutData ('o', ADDRESS_NC, 1, &tmp_dat, 1); |
abo_timer = ABO_TIMEOUT; |
} |
} |
if (!timer) |
{ |
OSD_Timeout(flag); |
flag = 0; |
FM_error = 1; |
} |
} |
while (!get_key_press (1 << KEY_ESC)); |
OSD_active = false; |
} |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/followme.h |
---|
0,0 → 1,13 |
/* |
* FollowMe.h |
* |
* Created on: 18.05.2012 |
* Author: cebra |
*/ |
#ifndef FOLLOWME_H_ |
#define FOLLOWME_H_ |
void FollowMe (void); |
#endif /* FOLLOWME_H_ */ |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/font8x6.c |
---|
0,0 → 1,172 |
/***************************************************************************** |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* - font provided by Claas Anders "CaScAdE" Rathje * |
* - umlauts and special characters by Peter "woggle" Mack * |
* * |
* 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 2 of the License. * |
* * |
* 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 <avr/pgmspace.h> |
// one byte is a column |
// bit 7 is the bottom |
// |
// 123456 |
// L 1 | XXX | |
// O 2 |X X | |
// W 4 |X X | |
// 8 | XXX | |
// H 1 |X X | |
// I 2 |X X | |
// G 4 | XXX | |
// H 8 | | |
// |
// 0x36,0x49,0x49,0x49,0x36,0x00 |
// |
//prog_uint8_t font8x6[128][6] = // führt zu Fehler mit AVR-GCC 4.5.1 21.2.2012 Cebra |
const uint8_t font8x6[128][6] PROGMEM = |
{ |
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 0 00 (not useable) |
{ 0x78,0x15,0x14,0x15,0x78,0x00 }, // ASCII - 1 01 'Ä' |
{ 0x20,0x55,0x54,0x55,0x78,0x00 }, // ASCII - 2 02 'ä' |
{ 0x38,0x45,0x44,0x45,0x38,0x00 }, // ASCII - 3 03 'Ö' |
{ 0x30,0x49,0x48,0x49,0x30,0x00 }, // ASCII - 4 04 'ö' |
{ 0x3c,0x41,0x40,0x41,0x3c,0x00 }, // ASCII - 5 05 'Ü' |
{ 0x38,0x41,0x40,0x21,0x78,0x00 }, // ASCII - 6 06 'ü' |
{ 0x7e,0x15,0x15,0x15,0x0a,0x00 }, // ASCII - 7 07 'ß' |
{ 0x22,0x17,0x0F,0x17,0x22,0x00 }, // ASCII - 8 08 SAT Symbol |
{ 0x00,0x84,0x82,0xFF,0x82,0x84 }, // ASCII - 9 09 Altitude Symbol |
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 10 0A (not useable) |
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 11 0B |
{ 0x10,0x38,0x54,0x10,0x10,0x1e }, // ASCII - 12 0C Enter Symbol |
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 13 0D (not useable) |
{ 0x10,0x10,0x10,0x10,0x10,0x10 }, // ASCII - 14 0E hor. line |
{ 0x10,0x10,0x10,0x7c,0x10,0x10 }, // ASCII - 15 0F hor. line with tick mark |
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 16 10 |
{ 0x08,0x14,0x00,0x00,0x14,0x08 }, // ASCII - 17 11 <> Change |
{ 0x10,0x08,0x04,0x04,0x08,0x10 }, // ASCII - 18 12 /\ Up |
{ 0x08,0x10,0x20,0x20,0x10,0x08 }, // ASCII - 19 13 \/ Down |
{ 0x00,0x08,0x14,0x22,0x41,0x00 }, // ASCII - 20 14 < Left |
{ 0x00,0x41,0x22,0x14,0x08,0x00 }, // ASCII - 21 15 > Right |
{ 0x04,0x02,0x7f,0x02,0x04,0x00 }, // ASCII - 22 16 /|\ Arrow up |
{ 0x10,0x20,0x7f,0x20,0x10,0x00 }, // ASCII - 23 17 \|/ Arrow down |
{ 0x10,0x38,0x54,0x10,0x10,0x10 }, // ASCII - 24 18 <- Arrow left |
{ 0x10,0x10,0x10,0x54,0x38,0x10 }, // ASCII - 25 19 -> Arrow right |
{ 0x10,0x18,0x1c,0x1c,0x18,0x10 }, // ASCII - 26 1A ^ Triangle up |
{ 0x08,0x18,0x38,0x38,0x18,0x08 }, // ASCII - 27 1B v Triangle down |
{ 0x00,0x08,0x1c,0x3e,0x7f,0x00 }, // ASCII - 28 1C < Triangle left |
{ 0x00,0x7f,0x3e,0x1c,0x08,0x00 }, // ASCII - 29 1D > Triangle right |
{ 0x06,0x09,0x09,0x09,0x06,0x00 }, // ASCII - 30 1E '°' |
{ 0x06,0x49,0x7d,0x49,0x06,0x00 }, // ASCII - 31 1F Antenne |
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 32 20 ' ' |
{ 0x00,0x00,0x2f,0x00,0x00,0x00 }, // ASCII - 33 21 '!' |
{ 0x00,0x07,0x00,0x07,0x00,0x00 }, // ASCII - 34 22 '"' |
{ 0x14,0x7f,0x14,0x7f,0x14,0x00 }, // ASCII - 35 23 '#' |
{ 0x24,0x2a,0x6b,0x2a,0x12,0x00 }, // ASCII - 36 24 '$' |
{ 0x23,0x13,0x08,0x64,0x62,0x00 }, // ASCII - 37 25 '%' |
{ 0x36,0x49,0x55,0x22,0x50,0x00 }, // ASCII - 38 26 '&' |
{ 0x00,0x05,0x03,0x00,0x00,0x00 }, // ASCII - 39 27 ''' |
{ 0x00,0x1c,0x22,0x41,0x00,0x00 }, // ASCII - 40 28 '(' |
{ 0x00,0x41,0x22,0x1c,0x00,0x00 }, // ASCII - 41 29 ')' |
{ 0x14,0x08,0x3e,0x08,0x14,0x00 }, // ASCII - 42 2a '*' |
{ 0x08,0x08,0x3e,0x08,0x08,0x00 }, // ASCII - 43 2b '+' |
{ 0x00,0x50,0x30,0x00,0x00,0x00 }, // ASCII - 44 2c ',' |
{ 0x08,0x08,0x08,0x08,0x08,0x00 }, // ASCII - 45 2d '-' |
{ 0x00,0x60,0x60,0x00,0x00,0x00 }, // ASCII - 46 2e '.' |
{ 0x20,0x10,0x08,0x04,0x02,0x00 }, // ASCII - 47 2f '/' |
{ 0x3e,0x51,0x49,0x45,0x3e,0x00 }, // ASCII - 48 30 '0' |
{ 0x00,0x42,0x7f,0x40,0x00,0x00 }, // ASCII - 49 31 '1' |
{ 0x42,0x61,0x51,0x49,0x46,0x00 }, // ASCII - 50 32 '2' |
{ 0x21,0x41,0x45,0x4b,0x31,0x00 }, // ASCII - 51 33 '3' |
{ 0x18,0x14,0x12,0x7f,0x10,0x00 }, // ASCII - 52 34 '4' |
{ 0x27,0x45,0x45,0x45,0x39,0x00 }, // ASCII - 53 35 '5' |
{ 0x3c,0x4a,0x49,0x49,0x30,0x00 }, // ASCII - 54 36 '6' |
{ 0x03,0x01,0x71,0x09,0x07,0x00 }, // ASCII - 55 37 '7' |
{ 0x36,0x49,0x49,0x49,0x36,0x00 }, // ASCII - 56 38 '8' |
{ 0x06,0x49,0x49,0x29,0x1e,0x00 }, // ASCII - 57 39 '9' |
{ 0x00,0x36,0x36,0x00,0x00,0x00 }, // ASCII - 58 3a ':' |
{ 0x00,0x56,0x36,0x00,0x00,0x00 }, // ASCII - 59 3b ';' |
{ 0x08,0x14,0x22,0x41,0x00,0x00 }, // ASCII - 60 3c '<' |
{ 0x14,0x14,0x14,0x14,0x14,0x00 }, // ASCII - 61 3d '=' |
{ 0x00,0x41,0x22,0x14,0x08,0x00 }, // ASCII - 62 3e '>' |
{ 0x02,0x01,0x51,0x09,0x06,0x00 }, // ASCII - 63 3f '?' |
{ 0x32,0x49,0x79,0x41,0x3e,0x00 }, // ASCII - 64 40 '@' |
{ 0x7e,0x11,0x11,0x11,0x7e,0x00 }, // ASCII - 65 41 'A' |
{ 0x7f,0x49,0x49,0x49,0x36,0x00 }, // ASCII - 66 42 'B' |
{ 0x3e,0x41,0x41,0x41,0x22,0x00 }, // ASCII - 67 43 'C' |
{ 0x7f,0x41,0x41,0x22,0x1c,0x00 }, // ASCII - 68 44 'D' |
{ 0x7f,0x49,0x49,0x49,0x41,0x00 }, // ASCII - 69 45 'E' |
{ 0x7f,0x09,0x09,0x09,0x01,0x00 }, // ASCII - 70 46 'F' |
{ 0x3e,0x41,0x49,0x49,0x7a,0x00 }, // ASCII - 71 47 'G' |
{ 0x7f,0x08,0x08,0x08,0x7f,0x00 }, // ASCII - 72 48 'H' |
{ 0x00,0x41,0x7f,0x41,0x00,0x00 }, // ASCII - 73 49 'I' |
{ 0x20,0x40,0x41,0x3f,0x01,0x00 }, // ASCII - 74 4a 'J' |
{ 0x7f,0x08,0x14,0x22,0x41,0x00 }, // ASCII - 75 4b 'K' |
{ 0x7f,0x40,0x40,0x40,0x40,0x00 }, // ASCII - 76 4c 'L' |
{ 0x7f,0x02,0x0c,0x02,0x7f,0x00 }, // ASCII - 77 4d 'M' |
{ 0x7f,0x04,0x08,0x10,0x7f,0x00 }, // ASCII - 78 4e 'N' |
{ 0x3e,0x41,0x41,0x41,0x3e,0x00 }, // ASCII - 79 4f 'O' |
{ 0x7f,0x09,0x09,0x09,0x06,0x00 }, // ASCII - 80 50 'P' |
{ 0x3e,0x41,0x51,0x21,0x5e,0x00 }, // ASCII - 81 51 'Q' |
{ 0x7f,0x09,0x19,0x29,0x46,0x00 }, // ASCII - 82 52 'R' |
{ 0x46,0x49,0x49,0x49,0x31,0x00 }, // ASCII - 83 53 'S' |
{ 0x01,0x01,0x7f,0x01,0x01,0x00 }, // ASCII - 84 54 'T' |
{ 0x3f,0x40,0x40,0x40,0x3f,0x00 }, // ASCII - 85 55 'U' |
{ 0x1f,0x20,0x40,0x20,0x1f,0x00 }, // ASCII - 86 56 'V' |
{ 0x3f,0x40,0x38,0x40,0x3f,0x00 }, // ASCII - 87 57 'W' |
{ 0x63,0x14,0x08,0x14,0x63,0x00 }, // ASCII - 88 58 'X' |
{ 0x07,0x08,0x70,0x08,0x07,0x00 }, // ASCII - 89 59 'Y' |
{ 0x61,0x51,0x49,0x45,0x43,0x00 }, // ASCII - 90 5a 'Z' |
{ 0x7f,0x41,0x41,0x00,0x00,0x00 }, // ASCII - 91 5b '[' |
{ 0x02,0x04,0x08,0x10,0x20,0x00 }, // ASCII - 92 5c '\' |
{ 0x00,0x41,0x41,0x7f,0x00,0x00 }, // ASCII - 93 5d ']' |
{ 0x04,0x02,0x01,0x02,0x04,0x00 }, // ASCII - 94 5e '^' |
{ 0x40,0x40,0x40,0x40,0x40,0x00 }, // ASCII - 95 5f '_' |
{ 0x00,0x01,0x02,0x04,0x00,0x00 }, // ASCII - 96 60 '`' |
{ 0x20,0x54,0x54,0x54,0x78,0x00 }, // ASCII - 97 61 'a' |
{ 0x7f,0x48,0x44,0x44,0x38,0x00 }, // ASCII - 98 62 'b' |
{ 0x38,0x44,0x44,0x44,0x20,0x00 }, // ASCII - 99 63 'c' |
{ 0x38,0x44,0x44,0x48,0x7f,0x00 }, // ASCII - 100 64 'd' |
{ 0x38,0x54,0x54,0x54,0x18,0x00 }, // ASCII - 101 65 'e' |
{ 0x08,0x7e,0x09,0x01,0x02,0x00 }, // ASCII - 102 66 'f' |
{ 0x0c,0x52,0x52,0x52,0x3e,0x00 }, // ASCII - 103 67 'g' |
{ 0x7f,0x08,0x04,0x04,0x78,0x00 }, // ASCII - 104 68 'h' |
{ 0x00,0x44,0x7d,0x40,0x00,0x00 }, // ASCII - 105 69 'i' |
{ 0x20,0x40,0x44,0x3d,0x00,0x00 }, // ASCII - 106 6a 'j' |
{ 0x7f,0x10,0x28,0x44,0x00,0x00 }, // ASCII - 107 6b 'k' |
{ 0x00,0x41,0x7f,0x40,0x00,0x00 }, // ASCII - 108 6c 'l' |
{ 0x7c,0x04,0x18,0x04,0x78,0x00 }, // ASCII - 109 6d 'm' |
{ 0x7c,0x08,0x04,0x04,0x78,0x00 }, // ASCII - 110 6e 'n' |
{ 0x38,0x44,0x44,0x44,0x38,0x00 }, // ASCII - 111 6f 'o' |
{ 0x7c,0x14,0x14,0x14,0x08,0x00 }, // ASCII - 112 70 'p' |
{ 0x08,0x14,0x14,0x18,0x7c,0x00 }, // ASCII - 113 71 'q' |
{ 0x7c,0x08,0x04,0x04,0x08,0x00 }, // ASCII - 114 72 'r' |
{ 0x48,0x54,0x54,0x54,0x20,0x00 }, // ASCII - 115 73 's' |
{ 0x04,0x3f,0x44,0x40,0x20,0x00 }, // ASCII - 116 74 't' |
{ 0x3c,0x40,0x40,0x20,0x7c,0x00 }, // ASCII - 117 75 'u' |
{ 0x1c,0x20,0x40,0x20,0x1c,0x00 }, // ASCII - 118 76 'v' |
{ 0x3c,0x40,0x38,0x40,0x3c,0x00 }, // ASCII - 119 77 'w' |
{ 0x44,0x28,0x10,0x28,0x44,0x00 }, // ASCII - 120 78 'x' |
{ 0x0c,0x50,0x50,0x50,0x3c,0x00 }, // ASCII - 121 79 'y' |
{ 0x44,0x64,0x54,0x4c,0x44,0x00 }, // ASCII - 122 7a 'z' |
{ 0x00,0x08,0x36,0x41,0x00,0x00 }, // ASCII - 123 7b '{' |
{ 0x00,0x00,0x7f,0x00,0x00,0x00 }, // ASCII - 124 7c '|' |
{ 0x00,0x41,0x36,0x08,0x00,0x00 }, // ASCII - 125 7d '}' |
{ 0x08,0x08,0x2a,0x1c,0x08,0x00 }, // ASCII - 126 7e -> |
{ 0x08,0x1c,0x2a,0x08,0x08,0x00 }, // ASCII - 127 7f <- |
}; |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/font8x6.h |
---|
0,0 → 1,30 |
/***************************************************************************** |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* - font provided by Claas Anders "CaScAdE" Rathje * |
* - umlauts and special characters by Peter "woggle" Mack * |
* * |
* 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 2 of the License. * |
* * |
* 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 _FONT8X6_H |
#define _FONT8X6_H |
#include <avr/pgmspace.h> |
//extern prog_uint8_t font8x6[128][6]; |
extern const uint8_t font8x6[128][6]; |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/gps.c |
---|
0,0 → 1,366 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#include <avr/io.h> |
#include <inttypes.h> |
#include <stdlib.h> |
#include <avr/pgmspace.h> |
#include "main.h" |
#include "lcd.h" |
#include "timer.h" |
#include "usart.h" |
#if defined HWVERSION1_3W || defined HWVERSION3_9 || defined HWVERSION1_2W |
#define TIMEOUT 200 // 2 sec |
uint8_t ck_a = 0; |
uint8_t ck_b = 0; |
uint8_t UBX_class = 0; |
uint8_t UBX_id = 0; |
uint8_t UBX_buffer[250]; |
uint8_t UBX_payload_counter = 0; |
void checksum(uint8_t); |
void UBX_process(void); |
uint32_t join_4_bytes(uint8_t*); |
uint8_t display_mode = 0; |
//-------------------------------------------------------------- |
void gps(void) |
{ |
lcd_cls(); |
display_mode = 2; |
if (hardware == FC) |
{ |
lcd_printp_at(0, 3, PSTR("Nur mit NC !"), 0); |
timer = 100; |
while (timer > 0); |
return; |
} |
if(current_hardware != NC) |
SwitchToNC(); |
SwitchToGPS(); |
uint8_t mode = 0; |
// SendOutData ('d', ADDRESS_ANY, 1, &tmp_dat, 1); |
timer = TIMEOUT; |
uint8_t data = 0; |
uint8_t length = 0; |
uint8_t UBX_ck_a = 0; |
do |
{ |
// if (rxFlag == 1) |
if (uart_getc_nb(&data)) |
{ |
//rxFlag = 0; |
//data = rx_byte; |
timer = TIMEOUT; |
switch(mode) |
{ |
case 0: // init 1 |
if(data == 0xB5) |
{ |
UBX_payload_counter = 0; |
UBX_id = 0; |
UBX_class = 0; |
ck_a = 0; |
ck_b = 0; |
mode++; |
} |
break; |
case 1: // init 2 |
if(data == 0x62) |
mode++; |
else |
mode = 0; |
break; |
case 2: //class |
if(data != 1) |
mode = 0; |
else |
{ |
checksum(data); |
UBX_class = data; |
mode++; |
} |
break; |
case 3: // id |
if((data != 48)&&(data != 6)&&(data != 18)&&(data != 2)) |
mode = 0; |
else |
{ |
UBX_id = data; |
checksum(data); |
mode++; |
} |
break; |
case 4: // length lo |
if(data > 250) |
mode = 0; |
else |
{ |
checksum(data); |
length = data; |
mode++; |
} |
break; |
case 5: // length hi |
if(data != 0) |
mode = 0; |
else |
{ |
checksum(data); |
mode++; |
} |
break; |
case 6: // length hi |
length--; |
UBX_buffer[UBX_payload_counter] = data; |
checksum(data); |
UBX_payload_counter++; |
if(length==0) |
{ |
mode++; |
}; |
break; |
case 7: // check lo |
mode++; |
UBX_ck_a = data; |
break; |
case 8: // check hi |
mode=0; |
if((UBX_ck_a == ck_a) && (data == ck_b)) |
UBX_process(); |
} |
// write_ndigit_number_u (14, 0, data, 3, 0); |
} |
} |
while (!get_key_press (1 << KEY_ESC) && timer); |
get_key_press(KEY_ALL); |
SwitchToNC(); |
} |
//-------------------------------------------------------------- |
void UBX_process() |
{ |
if ((get_key_press (1 << KEY_MINUS))||(display_mode == 2)) |
{ |
if (display_mode != 1) |
{ |
lcd_cls(); |
lcd_printp_at (0,0, PSTR("Fix Type : "), 0); |
lcd_printp_at (0,1, PSTR("Sat : "), 0); |
lcd_printp_at (0,2, PSTR("Accuracy : "), 0); |
lcd_printp_at (0,3, PSTR("PDOP : "), 0); |
lcd_printp_at (0,4, PSTR("Speed : "), 0); |
lcd_printp_at (0,5, PSTR("Long : "), 0); |
lcd_printp_at (0,6, PSTR("Lat : "), 0); |
lcd_printp_at (0,7, PSTR("Alt : "), 0); |
} |
display_mode = 1; |
} |
if((UBX_class == 1) && (UBX_id == 48)&&(display_mode == 0)) |
{ |
uint8_t channels = UBX_buffer[4]; |
uint8_t i = 0; |
for(i = 0; i < channels; i++) |
{ |
if (i > 15) |
break; |
uint8_t line; |
uint8_t col; |
if (i > 7) |
{ |
line = i-7; |
col = 11; |
} |
else |
col = 0; line = i; |
write_ndigit_number_u (col, line, UBX_buffer[9 + 12*i], 3, 0,0); |
write_ndigit_number_u (col+4, line, UBX_buffer[12 + 12*i], 2, 0,0); |
if((UBX_buffer[10 + 12*i] & 3) == 3) |
lcd_printp_at (col+7,line, PSTR("O"), 0); |
else if((UBX_buffer[10 + 12*i] & 1) == 1) |
lcd_printp_at (col+7,line, PSTR("X"), 0); |
else if(UBX_buffer[11 + 12*i] > 4) |
lcd_printp_at (col+7,line, PSTR("x"), 0); |
else if(UBX_buffer[11 + 12*i] > 1) |
lcd_printp_at (col+7,line, PSTR("-"), 0); |
else |
lcd_printp_at (col+7,line, PSTR(" "), 0); |
} |
} |
if(display_mode == 1) |
{ |
if((UBX_class == 1) && (UBX_id == 6)) //SVINFO |
{ |
switch (UBX_buffer[10]) |
{ |
case 4: |
case 3: |
lcd_printp_at (11,0, PSTR("3D"), 0); |
break; |
case 2: |
lcd_printp_at (11,0, PSTR("2D"), 0); |
break; |
default: |
lcd_printp_at (11,0, PSTR("no"), 0); |
} |
if((UBX_buffer[11] & 3) == 3) |
lcd_printp_at (17,0, PSTR("D"), 0); |
else |
lcd_printp_at (17,0, PSTR(" "), 0); |
if((UBX_buffer[11] & 1) == 1) |
lcd_printp_at (14,0, PSTR("ok"), 0); |
else |
lcd_printp_at (14,0, PSTR(" "), 0); |
// lcd_write_number_u_at (11, 1, UBX_buffer[47]); |
write_ndigit_number_u (11, 1, UBX_buffer[47], 2,0,0); |
uint16_t acc = (uint16_t)join_4_bytes(&UBX_buffer[24]); |
write_ndigit_number_u (11, 2, acc, 5, 0,0); |
lcd_printp_at (17,2, PSTR("cm"), 0); |
uint16_t pdop = UBX_buffer[44]+UBX_buffer[45]*255; |
write_ndigit_number_u (11, 3, pdop/100, 2, 0,0); |
lcd_printp_at (13,3, PSTR("."), 0); |
write_ndigit_number_u (14, 3, (pdop % 100),2, 1,0); |
} |
if((UBX_class == 1) && (UBX_id == 18)) //VELNED |
{ |
uint16_t speed = (uint16_t)((join_4_bytes(&UBX_buffer[20])*60*60)/100000); |
write_ndigit_number_u (11, 4, speed, 3, 0,0); |
lcd_printp_at (15,4, PSTR("km/h"), 0); |
} |
if((UBX_class == 1) && (UBX_id == 2)) //POSLLH |
{ |
uint32_t lon = join_4_bytes(&UBX_buffer[4]); |
write_ndigit_number_u (10, 5, (uint16_t)(lon/10000000), 2, 0,0); |
lcd_printp_at (12,5, PSTR("."), 0); |
write_ndigit_number_u (13, 5, (uint16_t)((lon/1000) % 10000), 4, 1,0); |
write_ndigit_number_u (17, 5, (uint16_t)((lon/10) % 100), 2, 1,0); |
uint32_t lat = join_4_bytes(&UBX_buffer[8]); |
write_ndigit_number_u (10, 6, (uint16_t)(lat/10000000), 2, 0,0); |
lcd_printp_at (12,6, PSTR("."), 0); |
write_ndigit_number_u (13, 6, (uint16_t)((lat/1000) % 10000), 4, 1,0); |
write_ndigit_number_u (17, 6, (uint16_t)((lat/10) % 100), 2, 1,0); |
uint16_t height = (uint16_t)(join_4_bytes(&UBX_buffer[16])/1000); |
write_ndigit_number_u (11, 7, height, 4, 0,0); |
lcd_printp_at (16,7, PSTR("m"), 0); |
} |
} |
} |
//-------------------------------------------------------------- |
union long_union |
{ |
uint32_t dword; |
uint8_t byte[4]; |
} longUnion; |
//-------------------------------------------------------------- |
union int_union |
{ |
uint16_t dword; |
uint8_t byte[2]; |
} intUnion; |
//-------------------------------------------------------------- |
uint32_t join_4_bytes(uint8_t Buffer[]) |
{ |
longUnion.byte[0] = *Buffer; |
longUnion.byte[1] = *(Buffer+1); |
longUnion.byte[2] = *(Buffer+2); |
longUnion.byte[3] = *(Buffer+3); |
return (longUnion.dword); |
} |
//-------------------------------------------------------------- |
void checksum(uint8_t data) |
{ |
ck_a += data; |
ck_b += ck_a; |
} |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/gps.h |
---|
0,0 → 1,40 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#ifndef _GPS_H |
#define _GPS_H |
void gps (void); |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/lcd.c |
---|
0,0 → 1,1378 |
/***************************************************************************** |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* - original LCD control by Thomas "thkais" Kaiser * |
* - special number formating routines taken from C-OSD * |
* from Claas Anders "CaScAdE" Rathje * |
* - some extension, ellipse and circ_line by Peter "woggle" Mack * |
* * |
* 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 2 of the License. * |
* * |
* 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 "cpu.h" |
#include <avr/io.h> |
#include <avr/pgmspace.h> |
#include <util/delay.h> |
#include <stdlib.h> |
#include <string.h> |
#include <math.h> |
#include "font8x6.h" |
#include "Font8x8.h" |
#include "eeprom.h" |
#include "lcd.h" |
#include "HAL_HW3_9.h" |
#define DISP_W 128 |
#define DISP_H 64 |
#define DISP_BUFFER ((DISP_H * DISP_W) / 8) |
#define LINE_BUFFER (((DISP_H/8) * DISP_W) / 8) |
#define Jeti 1 // Jeti Routinen |
volatile uint8_t display_buffer[DISP_BUFFER]; // Display-Puffer, weil nicht zurückgelesen werden kann |
volatile uint8_t line_buffer[LINE_BUFFER]; // Zeilen-Puffer, weil nicht zurückgelesen werden kann |
volatile uint16_t display_buffer_pointer; // Pointer auf das aktuell übertragene Byte |
volatile uint8_t display_buffer_counter; // Hilfszähler zur Selektierung der Page |
volatile uint8_t display_page_counter; // aktuelle Page-Nummer |
volatile uint8_t display_mode; // Modus für State-Machine |
volatile uint8_t LCD_ORIENTATION; |
// DOG: 128 x 64 with 6x8 Font => 21 x 8 |
// MAX7456: 30 x 16 |
uint8_t lcd_xpos; |
uint8_t lcd_ypos; |
//----------------------------------------------------------- |
void send_byte (uint8_t data) |
{ |
clr_cs (); |
SPDR = data; |
while (!(SPSR & (1<<SPIF))); |
//SPSR = SPSR; |
set_cs (); |
} |
//----------------------------------------------------------- |
// * Writes one command byte |
// * cmd - the command byte |
// |
void lcd_command(uint8_t cmd) |
{ |
// LCD_SELECT(); |
// LCD_CMD(); |
// spi_write(cmd); |
// LCD_UNSELECT(); |
clr_cs (); |
SPDR = cmd; |
while (!(SPSR & (1<<SPIF))); |
//SPSR = SPSR; |
set_cs (); |
} |
//----------------------------------------------------------- |
void lcd_cls (void) |
{ |
uint16_t i, j; |
// memset (display_buffer, 0, 1024); |
for (i = 0; i < DISP_BUFFER; i++) |
display_buffer[i] = 0x00; |
for (i = 0; i < 8; i++) |
{ |
clr_A0 (); |
send_byte (0xB0 + i); //1011xxxx |
send_byte (0x10); //00010000 |
// send_byte(0x04); //00000100 gedreht plus 4 Byte |
// send_byte(0x00); //00000000 |
send_byte (LCD_ORIENTATION); //00000000 |
set_A0 (); |
for (j = 0; j < 128; j++) |
send_byte (0x00); |
} |
lcd_xpos = 0; |
lcd_ypos = 0; |
} |
//----------------------------------------------------------- |
void lcd_cls_line (uint8_t x, uint8_t y, uint8_t w) |
{ |
uint8_t lcd_width; |
uint8_t lcd_zpos; |
uint8_t i; |
uint8_t max = 21; |
lcd_width = w; |
lcd_xpos = x; |
lcd_ypos = y; |
if ((lcd_xpos + lcd_width) > max) |
lcd_width = max - lcd_xpos; |
lcd_zpos = lcd_xpos + lcd_width; |
for (i = lcd_xpos; i < lcd_zpos; i++) |
lcd_putc (i, lcd_ypos, 0x20, 0); |
} |
//----------------------------------------------------------- |
void wait_1ms (void) |
{ |
_delay_ms (1); |
} |
//----------------------------------------------------------- |
void wait_ms (uint16_t time) |
{ |
uint16_t i; |
for (i = 0; i < time; i++) |
wait_1ms (); |
} |
//----------------------------------------------------------- |
void LCD_Init (uint8_t LCD_Mode) // LCD_Mode 0= Default Mode 1= EEPROM-Parameter) |
{ |
lcd_xpos = 0; |
lcd_ypos = 0; |
// DDRB = 0xFF; |
// SPI max. speed |
// the DOGM128 lcd controller can work at 20 MHz |
SPCR = (1 << SPE) | (1 << MSTR) | (1 << CPHA) | (1 << CPOL); |
SPSR = (1 << SPI2X); |
set_cs (); |
clr_reset (); |
wait_ms (10); |
set_reset (); |
clr_cs (); |
clr_A0 (); |
send_byte (0x40); //Display start line = 0 |
if (LCD_Mode == 1) |
{ |
if (LCD_ORIENTATION == 0) |
{ |
send_byte (0xA1); // A1 normal A0 reverse(original) |
send_byte (0xC0); // C0 normal C8 reverse(original) |
} |
else |
{ |
send_byte (0xA0); // A1 normal A0 reverse(original) |
send_byte (0xC8); // C0 normal C8 reverse(original) |
} |
} |
else |
{ |
send_byte (0xA1); // A1 normal A0 reverse(original) |
send_byte (0xC0); // C0 normal C8 reverse(original) |
} |
if (LCD_Mode == 1) |
{ |
if (LCD_DisplayMode == 0) |
send_byte (0xA6); //Display normal, not mirrored |
else |
send_byte (0xA7); //Display reverse, not mirrored |
} |
else |
send_byte (0xA6); |
send_byte (0xA2); //Set bias 1/9 (Duty 1/65) |
send_byte (0x2F); //Booster, regulator and follower on |
send_byte (0xF8); //Set internal booster to 4x |
send_byte (0x00); //Set internal booster to 4x |
send_byte (0x27); //resistor ratio set |
if (LCD_Mode == 1) |
{ |
send_byte (0x81); //Electronic volume register set |
send_byte (LCD_Kontrast); //Electronic volume register set |
} |
else |
{ |
send_byte (0x81); |
send_byte (0x16); |
} |
send_byte (0xAC); //Cursor |
send_byte (0x00); //No Cursor |
send_byte (0xAF); //No indicator |
if (LCD_Mode == 1) |
{ |
// Helligkeit setzen |
OCR2A = LCD_Helligkeit * 2.55; |
} |
else |
{ |
OCR2A = 255; |
} |
lcd_cls (); |
} |
//----------------------------------------------------------- |
void set_adress (uint16_t adress, uint8_t data) |
{ |
uint8_t page; |
uint8_t column; |
page = adress >> 7; |
clr_A0 (); |
send_byte (0xB0 + page); |
column = (adress & 0x7F) + LCD_ORIENTATION; |
send_byte (0x10 + (column >> 4)); |
send_byte (column & 0x0F); |
set_A0 (); |
send_byte (data); |
} |
//----------------------------------------------------------- |
void scroll (void) |
{ |
uint16_t adress; |
for (adress = 0; adress < 896; adress++) |
{ |
display_buffer[adress] = display_buffer[adress + 128]; |
set_adress (adress, display_buffer[adress]); |
} |
for (adress = 896; adress < 1024; adress++) |
{ |
display_buffer[adress] = 0; |
set_adress (adress, 0); |
} |
} |
//----------------------------------------------------------- |
// sicher eine Zeile für die Statusanzeige |
void copy_line (uint8_t y) |
{ |
uint8_t i; |
uint16_t adress; |
adress = y * 128 + 0 * 6; |
adress &= 0x3FF; |
for (i = 0; i < 6*21; i++) |
{ |
line_buffer[i] = display_buffer[adress+i]; |
set_adress (adress + i, display_buffer[adress + i]); |
} |
} |
//----------------------------------------------------------- |
// holt gesicherte Zeile wieder zurück |
void paste_line (uint8_t y) |
{ |
uint8_t i; |
uint16_t adress; |
adress = y * 128 + 0 * 6; |
adress &= 0x3FF; |
for (i = 0; i < 6*21; i++) |
{ |
display_buffer[adress+i] =line_buffer[i]; |
set_adress (adress + i, display_buffer[adress + i]); |
} |
} |
//----------------------------------------------------------- |
void lcd_puts_at(uint8_t x, uint8_t y,const char *s, uint8_t mode ) |
{ |
while (*s) |
{ |
lcd_putc(x, y, *s++, mode); |
x++; |
} |
}/* lcd_puts */ |
//----------------------------------------------------------- |
void lcd_putc (uint8_t x, uint8_t y, uint8_t c, uint8_t mode) |
{ |
uint8_t ch; |
uint8_t i; |
uint16_t adress; |
if (mode == 2) |
lcd_frect ((x*6),(y*8),5,7,1); // invertierte Darstellung |
if (mode == 3) lcd_putc_jeti (x, y, c,0); |
else |
if (mode == 4) lcd_putc_jeti (x, y, c,2); |
else |
{ |
switch (c) |
{ // ISO 8859-1 |
case 0xc4: // Ä |
c = 0x01; |
break; |
case 0xe4: // ä |
c = 0x02; |
break; |
case 0xd6: // Ö |
c = 0x03; |
break; |
case 0xf6: // ö |
c = 0x04; |
break; |
case 0xdc: // Ü |
c = 0x05; |
break; |
case 0xfc: // ü |
c = 0x06; |
break; |
case 0xdf: // ß |
//c = 0x07; |
c = 0x1e; // ° (used by Jeti) |
break; |
} |
c &= 0x7f; |
adress = y * 128 + x * 6; |
adress &= 0x3FF; |
for (i = 0; i < 6; i++) |
{ |
ch = pgm_read_byte (&font8x6[0][0] + i + c * 6); |
switch (mode) |
{ |
case 0: |
display_buffer[adress+i] = ch; |
break; |
case 1: |
display_buffer[adress+i] |= ch; |
break; |
case 2: |
display_buffer[adress+i] ^= ch; |
break; |
case 3: |
display_buffer[adress+i] &= ch; |
break; |
case 4: |
display_buffer[adress+i] &= ~ch; |
break; |
} |
set_adress (adress + i, display_buffer[adress + i]); |
} |
} |
} |
#if Jeti |
//----------------------------------------------------------- |
void lcd_putc_jeti (uint8_t x, uint8_t y, uint8_t c, uint8_t mode) |
{ |
uint8_t ch; |
uint8_t i; |
uint16_t adress; |
if (mode == 2) |
lcd_frect ((x*8),(y*8),8,8,1); // invertierte Darstellung |
switch (c) |
{ |
case 0x7e: |
c = 0x1a; // -> |
break; |
case 0x7f: |
c = 0x1b; // <- |
break; |
case 0xdf: |
c = 0xf8; // ° |
break; |
} |
adress = y * 128 + x * 8; |
adress &= 0x3FF; |
for (i = 0; i < 8; i++) |
{ |
ch = pgm_read_byte (&Font8x8[0][0] + i + c * 8); |
switch (mode) |
{ |
case 0: |
display_buffer[adress+i] = ch; |
break; |
case 1: |
display_buffer[adress+i] |= ch; |
break; |
case 2: |
display_buffer[adress+i] ^= ch; |
break; |
case 3: |
display_buffer[adress+i] &= ch; |
break; |
case 4: |
display_buffer[adress+i] &= ~ch; |
break; |
} |
set_adress (adress + i, display_buffer[adress + i]); |
} |
} |
//----------------------------------------------------------- |
void lcd_printpj (const char *text, uint8_t mode) |
{ |
while (pgm_read_byte(text)) |
{ |
switch (pgm_read_byte(text)) |
{ |
case 0x0D: |
lcd_xpos = 0; |
break; |
case 0x0A: |
new_line(); |
break; |
default: |
lcd_putc_jeti (lcd_xpos, lcd_ypos, pgm_read_byte(text), mode); |
lcd_xpos++; |
if (lcd_xpos > 20) |
{ |
lcd_xpos = 0; |
new_line (); |
} |
break; |
} |
text++; |
} |
} |
//----------------------------------------------------------- |
void lcd_printpj_at (uint8_t x, uint8_t y, const char *text, uint8_t mode) |
{ |
lcd_xpos = x; |
lcd_ypos = y; |
lcd_printpj (text, mode); |
} |
#endif |
//----------------------------------------------------------- |
void new_line (void) |
{ |
lcd_ypos++; |
if (lcd_ypos > 7) |
{ |
scroll (); |
lcd_ypos = 7; |
} |
} |
//----------------------------------------------------------- |
void lcd_printpns (const char *text, uint8_t mode) |
{ |
while (pgm_read_byte(text)) |
{ |
switch (pgm_read_byte(text)) |
{ |
case 0x0D: |
lcd_xpos = 0; |
break; |
case 0x0A: |
new_line(); |
break; |
default: |
lcd_putc (lcd_xpos, lcd_ypos, pgm_read_byte(text), mode); |
lcd_xpos++; |
if (lcd_xpos > 21) |
{ |
lcd_xpos = 0; |
// new_line (); |
} |
break; |
} |
text++; |
} |
} |
//----------------------------------------------------------- |
void lcd_printpns_at (uint8_t x, uint8_t y, const char *text, uint8_t mode) |
{ |
lcd_xpos = x; |
lcd_ypos = y; |
lcd_printpns (text, mode); |
} |
//----------------------------------------------------------- |
void lcd_printp (const char *text, uint8_t mode) |
{ |
while (pgm_read_byte(text)) |
{ |
switch (pgm_read_byte(text)) |
{ |
case 0x0D: |
lcd_xpos = 0; |
break; |
case 0x0A: |
new_line(); |
break; |
default: |
lcd_putc (lcd_xpos, lcd_ypos, pgm_read_byte(text), mode); |
lcd_xpos++; |
if (lcd_xpos > 21) |
{ |
lcd_xpos = 0; |
new_line (); |
} |
break; |
} |
text++; |
} |
} |
//----------------------------------------------------------- |
void lcd_printp_at (uint8_t x, uint8_t y, const char *text, uint8_t mode) |
{ |
lcd_xpos = x; |
lcd_ypos = y; |
lcd_printp (text, mode); |
} |
//----------------------------------------------------------- |
void lcd_print (uint8_t *text, uint8_t mode) |
{ |
while (*text) |
{ |
switch (*text) |
{ |
case 0x0D: |
lcd_xpos = 0; |
break; |
case 0x0A: |
new_line(); |
break; |
default: |
lcd_putc (lcd_xpos, lcd_ypos, *text, mode); |
lcd_xpos++; |
if (lcd_xpos > 21) |
{ |
lcd_xpos = 0; |
new_line (); |
} |
break; |
} |
text++; |
} |
} |
//----------------------------------------------------------- |
void lcd_print_at (uint8_t x, uint8_t y, uint8_t *text, uint8_t mode) |
{ |
lcd_xpos = x; |
lcd_ypos = y; |
lcd_print (text, mode); |
} |
//----------------------------------------------------------- |
void print_display (uint8_t *text) |
{ |
while (*text) |
{ |
lcd_putc (lcd_xpos, lcd_ypos, *text, 0); |
lcd_xpos++; |
if (lcd_xpos >= 20) |
{ |
lcd_xpos = 0; |
new_line (); |
} |
text++; |
} |
} |
//----------------------------------------------------------- |
void print_display_at (uint8_t x, uint8_t y, uint8_t *text) |
{ |
lcd_xpos = x; |
lcd_ypos = y; |
print_display (text); |
} |
//----------------------------------------------------------- |
// + Plot (set one Pixel) |
//----------------------------------------------------------- |
// mode: |
// 0=Clear, 1=Set, 2=XOR |
void lcd_plot (uint8_t xpos, uint8_t ypos, uint8_t mode) |
{ |
uint16_t adress; |
uint8_t mask; |
if ((xpos < DISP_W) && (ypos < DISP_H)) |
{ |
adress = (ypos / 8) * DISP_W + xpos; // adress = 0/8 * 128 + 0 = 0 |
mask = 1 << (ypos & 0x07); // mask = 1<<0 = 1 |
adress &= DISP_BUFFER - 1; |
switch (mode) |
{ |
case 0: |
display_buffer[adress] &= ~mask; |
break; |
case 1: |
display_buffer[adress] |= mask; |
break; |
case 2: |
display_buffer[adress] ^= mask; |
break; |
} |
set_adress (adress, display_buffer[adress]); |
} |
} |
//----------------------------------------------------------- |
// + Line (draws a line from x1,y1 to x2,y2 |
// + Based on Bresenham line-Algorithm |
// + found in the internet, modified by thkais 2007 |
//----------------------------------------------------------- |
void lcd_line (unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, uint8_t mode) |
{ |
int x, y, count, xs, ys, xm, ym; |
x = (int) x1; |
y = (int) y1; |
xs = (int) x2 - (int) x1; |
ys = (int) y2 - (int) y1; |
if (xs < 0) |
xm = -1; |
else |
if (xs > 0) |
xm = 1; |
else |
xm = 0; |
if (ys < 0) |
ym = -1; |
else |
if (ys > 0) |
ym = 1; |
else |
ym = 0; |
if (xs < 0) |
xs = -xs; |
if (ys < 0) |
ys = -ys; |
lcd_plot ((unsigned char) x, (unsigned char) y, mode); |
if (xs > ys) // Flat Line <45 degrees |
{ |
count = -(xs / 2); |
while (x != x2) |
{ |
count = count + ys; |
x = x + xm; |
if (count > 0) |
{ |
y = y + ym; |
count = count - xs; |
} |
lcd_plot ((unsigned char) x, (unsigned char) y, mode); |
} |
} |
else // Line >=45 degrees |
{ |
count =- (ys / 2); |
while (y != y2) |
{ |
count = count + xs; |
y = y + ym; |
if (count > 0) |
{ |
x = x + xm; |
count = count - ys; |
} |
lcd_plot ((unsigned char) x, (unsigned char) y, mode); |
} |
} |
} |
//----------------------------------------------------------- |
// + Filled rectangle |
// + x1, y1 = upper left corner |
//----------------------------------------------------------- |
void lcd_frect (uint8_t x1, uint8_t y1, uint8_t widthx, uint8_t widthy, uint8_t mode) |
{ |
uint16_t x2, y2; |
uint16_t i; |
if (x1 >= DISP_W) |
x1 = DISP_W - 1; |
if (y1 >= DISP_H) |
y1 = DISP_H - 1; |
x2 = x1 + widthx; |
y2 = y1 + widthy; |
if (x2 > DISP_W) |
x2 = DISP_W; |
if (y2 > DISP_H) |
y2 = DISP_H; |
for (i = y1; i <= y2; i++) |
{ |
lcd_line (x1, i, x2, i, mode); |
} |
} |
//----------------------------------------------------------- |
// + outline of rectangle |
// + x1, y1 = upper left corner |
//----------------------------------------------------------- |
void lcd_rect (uint8_t x1, uint8_t y1, uint8_t widthx, uint8_t widthy, uint8_t mode) |
{ |
uint16_t x2, y2; |
if (x1 >= DISP_W) |
x1 = DISP_W - 1; |
if (y1 >= DISP_H) |
y1 = DISP_H - 1; |
x2 = x1 + widthx; |
y2 = y1 + widthy; |
if (x2 > DISP_W) |
x2 = DISP_W; |
if (y2 > DISP_H) |
y2 = DISP_H; |
lcd_line (x1, y1, x2, y1, mode); |
lcd_line (x2, y1, x2, y2, mode); |
lcd_line (x2, y2, x1, y2, mode); |
lcd_line (x1, y2, x1, y1, mode); |
} |
//----------------------------------------------------------- |
// + outline of a circle |
// + Based on Bresenham-algorithm found in wikipedia |
// + modified by thkais (2007) |
//----------------------------------------------------------- |
void lcd_circle (int16_t x0, int16_t y0, int16_t radius, uint8_t mode) |
{ |
int16_t f = 1 - radius; |
int16_t ddF_x = 0; |
int16_t ddF_y = -2 * radius; |
int16_t x = 0; |
int16_t y = radius; |
lcd_plot (x0, y0 + radius, mode); |
lcd_plot (x0, y0 - radius, mode); |
lcd_plot (x0 + radius, y0, mode); |
lcd_plot (x0 - radius, y0, mode); |
while (x < y) |
{ |
if (f >= 0) |
{ |
y --; |
ddF_y += 2; |
f += ddF_y; |
} |
x ++; |
ddF_x += 2; |
f += ddF_x + 1; |
lcd_plot (x0 + x, y0 + y, mode); |
lcd_plot (x0 - x, y0 + y, mode); |
lcd_plot (x0 + x, y0 - y, mode); |
lcd_plot (x0 - x, y0 - y, mode); |
lcd_plot (x0 + y, y0 + x, mode); |
lcd_plot (x0 - y, y0 + x, mode); |
lcd_plot (x0 + y, y0 - x, mode); |
lcd_plot (x0 - y, y0 - x, mode); |
} |
} |
//----------------------------------------------------------- |
// + filled Circle |
// + modified circle-algorithm thkais (2007) |
//----------------------------------------------------------- |
void lcd_fcircle (int16_t x0, int16_t y0, int16_t radius,uint8_t mode) |
{ |
int16_t f = 1 - radius; |
int16_t ddF_x = 0; |
int16_t ddF_y = -2 * radius; |
int16_t x = 0; |
int16_t y = radius; |
lcd_line (x0, y0 + radius, x0, y0 - radius, mode); |
lcd_line (x0 + radius, y0, x0 - radius, y0, mode); |
while (x < y) |
{ |
if (f >= 0) |
{ |
y--; |
ddF_y += 2; |
f += ddF_y; |
} |
x++; |
ddF_x += 2; |
f += ddF_x + 1; |
lcd_line (x0 + x, y0 + y, x0 - x, y0 + y, mode); |
lcd_line (x0 + x, y0 - y, x0 - x, y0 - y, mode); |
lcd_line (x0 + y, y0 + x, x0 - y, y0 + x, mode); |
lcd_line (x0 + y, y0 - x, x0 - y, y0 - x, mode); |
} |
} |
//----------------------------------------------------------- |
// |
void lcd_circ_line (uint8_t x, uint8_t y, uint8_t r, uint16_t deg, uint8_t mode) |
{ |
uint8_t xc, yc; |
double deg_rad; |
deg_rad = (deg * M_PI) / 180.0; |
yc = y - (uint8_t) round (cos (deg_rad) * (double) r); |
xc = x + (uint8_t) round (sin (deg_rad) * (double) r); |
lcd_line (x, y, xc, yc, mode); |
} |
//----------------------------------------------------------- |
// |
void lcd_ellipse_line (uint8_t x, uint8_t y, uint8_t rx, uint8_t ry, uint16_t deg, uint8_t mode) |
{ |
uint8_t xc, yc; |
double deg_rad; |
deg_rad = (deg * M_PI) / 180.0; |
yc = y - (uint8_t) round (cos (deg_rad) * (double) ry); |
xc = x + (uint8_t) round (sin (deg_rad) * (double) rx); |
lcd_line (x, y, xc, yc, mode); |
} |
//----------------------------------------------------------- |
// |
void lcd_ellipse (int16_t x0, int16_t y0, int16_t rx, int16_t ry, uint8_t mode) |
{ |
const int16_t rx2 = rx * rx; |
const int16_t ry2 = ry * ry; |
int16_t F = round (ry2 - rx2 * ry + 0.25 * rx2); |
int16_t ddF_x = 0; |
int16_t ddF_y = 2 * rx2 * ry; |
int16_t x = 0; |
int16_t y = ry; |
lcd_plot (x0, y0 + ry, mode); |
lcd_plot (x0, y0 - ry, mode); |
lcd_plot (x0 + rx, y0, mode); |
lcd_plot (x0 - rx, y0, mode); |
// while ( 2*ry2*x < 2*rx2*y ) { we can use ddF_x and ddF_y |
while (ddF_x < ddF_y) |
{ |
if(F >= 0) |
{ |
y -= 1; // south |
ddF_y -= 2 * rx2; |
F -= ddF_y; |
} |
x += 1; // east |
ddF_x += 2 * ry2; |
F += ddF_x + ry2; |
lcd_plot (x0 + x, y0 + y, mode); |
lcd_plot (x0 + x, y0 - y, mode); |
lcd_plot (x0 - x, y0 + y, mode); |
lcd_plot (x0 - x, y0 - y, mode); |
} |
F = round (ry2 * (x + 0.5) * (x + 0.5) + rx2 * (y - 1) * (y - 1) - rx2 * ry2); |
while(y > 0) |
{ |
if(F <= 0) |
{ |
x += 1; // east |
ddF_x += 2 * ry2; |
F += ddF_x; |
} |
y -= 1; // south |
ddF_y -= 2 * rx2; |
F += rx2 - ddF_y; |
lcd_plot (x0 + x, y0 + y, mode); |
lcd_plot (x0 + x, y0 - y, mode); |
lcd_plot (x0 - x, y0 + y, mode); |
lcd_plot (x0 - x, y0 - y, mode); |
} |
} |
//----------------------------------------------------------- |
// |
void lcd_ecircle (int16_t x0, int16_t y0, int16_t radius, uint8_t mode) |
{ |
lcd_ellipse (x0, y0, radius + 3, radius, mode); |
} |
//----------------------------------------------------------- |
// |
void lcd_ecirc_line (uint8_t x, uint8_t y, uint8_t r, uint16_t deg, uint8_t mode) |
{ |
lcd_ellipse_line(x, y, r + 3, r, deg, mode); |
} |
//----------------------------------------------------------- |
// |
void lcd_view_font (uint8_t page) |
{ |
int x; |
int y; |
lcd_cls (); |
lcd_printp (PSTR(" 0123456789ABCDEF\r\n"), 0); |
lcd_printpns_at (0, 7, PSTR(" \x1a \x1b Exit"), 0); |
lcd_ypos = 2; |
for (y = page * 4 ; y < (page * 4 + 4); y++) |
{ |
if (y < 10) |
{ |
lcd_putc (0, lcd_ypos, '0' + y, 0); |
} |
else |
{ |
lcd_putc (0, lcd_ypos, 'A' + y - 10, 0); |
} |
lcd_xpos = 2; |
for (x = 0; x < 16; x++) |
{ |
lcd_putc (lcd_xpos, lcd_ypos, y * 16 + x, 0); |
lcd_xpos++; |
} |
lcd_ypos++; |
} |
} |
//----------------------------------------------------------- |
uint8_t hdigit (uint8_t d) |
{ |
if (d < 10) |
{ |
return '0' + d; |
} |
else |
{ |
return 'A' + d - 10; |
} |
} |
//----------------------------------------------------------- |
void lcd_print_hex_at (uint8_t x, uint8_t y, uint8_t h, uint8_t mode) |
{ |
lcd_xpos = x; |
lcd_ypos = y; |
lcd_putc (lcd_xpos++, lcd_ypos, hdigit (h >> 4), mode); |
lcd_putc (lcd_xpos, lcd_ypos, hdigit (h & 0x0f), mode); |
} |
//----------------------------------------------------------- |
void lcd_print_hex (uint8_t h, uint8_t mode) |
{ |
// lcd_xpos = x; |
// lcd_ypos = y; |
lcd_putc (lcd_xpos++, lcd_ypos, hdigit (h >> 4), mode); |
lcd_putc (lcd_xpos++, lcd_ypos, hdigit (h & 0x0f), mode); |
lcd_putc (lcd_xpos++, lcd_ypos, ' ', mode); |
} |
//----------------------------------------------------------- |
void lcd_write_number_u (uint8_t number) |
{ |
uint8_t num = 100; |
uint8_t started = 0; |
while (num > 0) |
{ |
uint8_t b = number / num; |
if (b > 0 || started || num == 1) |
{ |
lcd_putc (lcd_xpos++, lcd_ypos, '0' + b, 0); |
started = 1; |
} |
number -= b * num; |
num /= 10; |
} |
} |
//----------------------------------------------------------- |
void lcd_write_number_u_at (uint8_t x, uint8_t y, uint8_t number) |
{ |
lcd_xpos = x; |
lcd_ypos = y; |
lcd_write_number_u (number); |
} |
//----------------------------------------------------------- |
// Write only some digits of a unsigned <number> at <x>/<y> to MAX7456 display memory |
// <num> represents the largest multiple of 10 that will still be displayable as |
// the first digit, so num = 10 will be 0-99 and so on |
// <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
// |
void write_ndigit_number_u (uint8_t x, uint8_t y, uint16_t number, int16_t length, uint8_t pad, uint8_t mode) |
{ |
char s[7]; |
utoa(number, s, 10 ); |
uint8_t len = strlen(s); |
if (length < len) |
{ |
for (uint8_t i = 0; i < length; i++) |
{ |
lcd_putc (x++, y, '*', mode); |
} |
return; |
} |
for (uint8_t i = 0; i < length - len; i++) |
{ |
if (pad==1) |
{ |
lcd_putc (x++, y, '0', mode); |
} |
else |
{ |
lcd_putc (x++, y, ' ', mode); |
} |
} |
lcd_print_at(x, y, (uint8_t*)s, mode); |
} |
//----------------------------------------------------------- |
// Write only some digits of a signed <number> at <x>/<y> to MAX7456 display memory |
// <num> represents the largest multiple of 10 that will still be displayable as |
// the first digit, so num = 10 will be 0-99 and so on |
// <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
// |
void write_ndigit_number_s (uint8_t x, uint8_t y, int16_t number, int16_t length, uint8_t pad, uint8_t mode) |
{ |
char s[7]; |
itoa(number, s, 10 ); |
uint8_t len = strlen(s); |
if (length < len) |
{ |
for (uint8_t i = 0; i < length; i++) |
{ |
lcd_putc (x++, y, '*', mode); |
} |
return; |
} |
for (uint8_t i = 0; i < length - len; i++) |
{ |
if (pad) |
{ |
lcd_putc (x++, y, '0', mode); |
} |
else |
{ |
lcd_putc (x++, y, ' ', mode); |
} |
} |
lcd_print_at(x, y, (uint8_t*)s, mode); |
} |
//----------------------------------------------------------- |
// Write only some digits of a unsigned <number> at <x>/<y> to MAX7456 display memory |
// as /10th of the value |
// <num> represents the largest multiple of 10 that will still be displayable as |
// the first digit, so num = 10 will be 0-99 and so on |
// <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
// |
void write_ndigit_number_u_10th (uint8_t x, uint8_t y, uint16_t number, int16_t length, uint8_t pad, uint8_t mode) |
{ |
char s[7]; |
itoa(number, s, 10 ); |
uint8_t len = strlen(s); |
if (length < len) |
{ |
for (uint8_t i = 0; i < length; i++) |
{ |
lcd_putc (x++, y, '*', mode); |
} |
return; |
} |
for (uint8_t i = 0; i < length - len; i++) |
{ |
if (pad) |
{ |
lcd_putc (x++, y, '0', mode); |
} |
else |
{ |
lcd_putc (x++, y, ' ', mode); |
} |
} |
char rest = s[len - 1]; |
s[len - 1] = 0; |
if (len == 1) |
{ |
lcd_putc (x-1, y, '0', mode); |
} |
else if (len == 2 && s[0] == '-') |
{ |
lcd_putc (x-1, y, '-', mode); |
lcd_putc (x, y, '0', mode); |
} |
else |
{ |
lcd_print_at(x, y, (uint8_t*)s, mode); |
} |
x += len - 1; |
lcd_putc (x++, y, '.', mode); |
lcd_putc (x++, y, rest, mode); |
} |
//----------------------------------------------------------- |
void write_ndigit_number_u_100th (uint8_t x, uint8_t y, uint16_t number, int16_t length, uint8_t pad) |
{ |
uint8_t num = 100; |
while (num > 0) |
{ |
uint8_t b = number / num; |
if ((num / 10) == 1) |
{ |
lcd_putc (x++, y, '.', 0); |
} |
lcd_putc (x++, y, '0' + b, 0); |
number -= b * num; |
num /= 10; |
} |
} |
//----------------------------------------------------------- |
// Write only some digits of a signed <number> at <x>/<y> to MAX7456 display memory |
// as /10th of the value |
// <num> represents the largest multiple of 10 that will still be displayable as |
// the first digit, so num = 10 will be 0-99 and so on |
// <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
// |
void write_ndigit_number_s_10th (uint8_t x, uint8_t y, int16_t number, int16_t length, uint8_t pad, uint8_t mode) |
{ |
char s[7]; |
itoa (number, s, 10 ); |
uint8_t len = strlen(s); |
if (length < len) |
{ |
for (uint8_t i = 0; i < length; i++) |
{ |
lcd_putc (x++, y, '*', mode); |
} |
return; |
} |
for (uint8_t i = 0; i < length - len; i++) |
{ |
if (pad) |
{ |
lcd_putc (x++, y, '0', mode); |
} |
else |
{ |
lcd_putc (x++, y, ' ', mode); |
} |
} |
char rest = s[len - 1]; |
s[len - 1] = 0; |
if (len == 1) |
{ |
lcd_putc (x-1, y, '0', mode); |
} |
else if (len == 2 && s[0] == '-') |
{ |
lcd_putc (x-1, y, '-', mode); |
lcd_putc (x, y, '0', mode); |
} |
else |
{ |
lcd_print_at(x, y, (uint8_t*)s, mode); |
} |
x += len - 1; |
lcd_putc (x++, y, '.', mode); |
lcd_putc (x++, y, rest, mode); |
} |
//----------------------------------------------------------- |
// write <seconds> as human readable time at <x>/<y> to MAX7456 display mem |
// |
void write_time (uint8_t x, uint8_t y, uint16_t seconds) |
{ |
uint16_t min = seconds / 60; |
seconds -= min * 60; |
write_ndigit_number_u (x, y, min, 2, 0,0); |
lcd_putc (x + 2, y, ':', 0); |
write_ndigit_number_u (x + 3, y, seconds, 2, 1,0); |
} |
//----------------------------------------------------------- |
// wirte a <position> at <x>/<y> assuming it is a gps position for long-/latitude |
// |
void write_gps_pos (uint8_t x, uint8_t y, int32_t position) |
{ |
if (position < 0) |
{ |
position ^= ~0; |
position++; |
lcd_putc (x++, y, '-', 0); |
} |
else |
{ |
lcd_putc (x++, y, ' ', 0); |
} |
write_ndigit_number_u (x, y, (uint16_t) (position / (int32_t) 10000000), 3, 1,0); |
lcd_putc (x + 3, y, '.', 0); |
position = position - ((position / (int32_t) 10000000) * (int32_t) 10000000); |
write_ndigit_number_u (x + 4, y, (uint16_t) (position / (int32_t) 1000), 4, 1,0); |
position = position - ((uint16_t) (position / (int32_t) 1000) * (int32_t) 1000); |
write_ndigit_number_u (x + 8, y, (uint16_t) position, 3, 1,0); |
lcd_putc (x + 11, y, 0x1e, 0); // degree symbol |
} |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/lcd.h |
---|
0,0 → 1,275 |
/***************************************************************************** |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* - original LCD control by Thomas "thkais" Kaiser * |
* - special number formating routines taken from C-OSD * |
* from Claas Anders "CaScAdE" Rathje * |
* - some extension, ellipse and circ_line by Peter "woggle" Mack * |
* Thanks to Oliver Schwaneberg for adding several functions to this library!* |
* * |
* Author: Jan Michel (jan at mueschelsoft dot de) * |
* License: GNU General Public License, version 3 * |
* Version: v0.93 September 2010 * |
* * |
* 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 2 of the License. * |
* * |
* 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 _LCD_H |
#define _LCD_H |
/* |
//----------------------------------------------------------------------------- |
// Command Codes |
//----------------------------------------------------------------------------- |
//1: Display on/off |
#define LCD_DISPLAY_ON 0xAF //switch display on |
#define LCD_DISPLAY_OFF 0xAE //switch display off |
//2: display start line set (lower 6 bits select first line on lcd from 64 lines in memory) |
#define LCD_START_LINE 0x40 |
//3: Page address set (lower 4 bits select one of 8 pages) |
#define LCD_PAGE_ADDRESS 0xB0 |
//4: column address (lower 4 bits are upper / lower nibble of column address) |
#define LCD_COL_ADDRESS_MSB 0x10 |
#define LCD_COL_ADDRESS_LSB 0x00 //second part of column address |
//8: select orientation (black side of the display should be further away from viewer) |
#define LCD_BOTTOMVIEW 0xA1 //6 o'clock view |
#define LCD_TOPVIEW 0xA0 //12 o'clock view |
//9: select normal (white background, black pixels) or reverse (black background, white pixels) mode |
#define LCD_DISPLAY_POSITIVE 0xA6 //not inverted mode |
#define LCD_DISPLAY_INVERTED 0xA7 //inverted display |
//10: show memory content or switch all pixels on |
#define LCD_SHOW_NORMAL 0xA4 //show dram content |
#define LCD_SHOW_ALL_POINTS 0xA5 //show all points |
//11: lcd bias set |
#define LCD_BIAS_1_9 0xA2 |
#define LCD_BIAS_1_7 0xA3 |
//14: Reset Controller |
#define LCD_RESET_CMD 0xE2 |
//15: output mode select (turns display upside-down) |
#define LCD_SCAN_DIR_NORMAL 0xC0 //normal scan direction |
#define LCD_SCAN_DIR_REVERSE 0xC8 //reversed scan direction |
//16: power control set (lower 3 bits select operating mode) |
//Bit 0: Voltage follower on/off - Bit 1: Voltage regulator on/off - Bit 2: Booster circuit on/off |
#define LCD_POWER_CONTROL 0x28 //base command |
#define LCD_POWER_LOW_POWER 0x2F |
#define LCD_POWER_WIDE_RANGE 0x2F |
#define LCD_POWER_LOW_VOLTAGE 0x2B |
//17: voltage regulator resistor ratio set (lower 3 bits select ratio) |
//selects lcd voltage - 000 is low (~ -2V), 111 is high (~ - 10V), also depending on volume mode. Datasheet suggests 011 |
#define LCD_VOLTAGE 0x20 |
//18: Volume mode set (2-byte command, lower 6 bits in second word select value, datasheet suggests 0x1F) |
#define LCD_VOLUME_MODE_1 0x81 |
#define LCD_VOLUME_MODE_2 0x00 |
//#if DISPLAY_TYPE == 128 || DISPLAY_TYPE == 132 |
//19: static indicator (2-byte command), first on/off, then blinking mode |
#define LCD_INDICATOR_ON 0xAD //static indicator on |
#define LCD_INDICATOR_OFF 0xAC //static indicator off |
#define LCD_INDICATOR_MODE_OFF 0x00 |
#define LCD_INDICATOR_MODE_1HZ 0x01 |
#define LCD_INDICATOR_MODE_2HZ 0x10 |
#define LCD_INDICATOR_MODE_ON 0x11 |
//20: booster ratio set (2-byte command) |
#define LCD_BOOSTER_SET 0xF8 //set booster ratio |
#define LCD_BOOSTER_234 0x00 //2x-4x |
#define LCD_BOOSTER_5 0x01 //5x |
#define LCD_BOOSTER_6 0x03 //6x |
//#endif |
//22: NOP command |
#define LCD_NOP 0xE3 |
//#if DISPLAY_TYPE == 102 |
////25: advanced program control |
//#define LCD_ADV_PROG_CTRL 0xFA |
//#define LCD_ADV_PROG_CTRL2 0x10 |
//#endif |
//----------------------------------------------------------------------------- |
// Makros to execute commands |
//----------------------------------------------------------------------------- |
#define LCD_SWITCH_ON() lcd_command(LCD_DISPLAY_ON) |
#define LCD_SWITCH_OFF() lcd_command(LCD_DISPLAY_OFF) |
#define LCD_SET_FIRST_LINE(i) lcd_command(LCD_START_LINE | ((i) & 0x3F)) |
#define LCD_SET_PAGE_ADDR(i) lcd_command(LCD_PAGE_ADDRESS | ((i) & 0x0F)) |
#define LCD_SET_COLUMN_ADDR(i) lcd_command(LCD_COL_ADDRESS_MSB | ((i>>4) & 0x0F)); \ |
lcd_command(LCD_COL_ADDRESS_LSB | ((i) & 0x0F)) |
#define LCD_GOTO_ADDRESS(page,col); lcd_command(LCD_PAGE_ADDRESS | ((page) & 0x0F)); \ |
lcd_command(LCD_COL_ADDRESS_MSB | ((col>>4) & 0x0F)); \ |
lcd_command(LCD_COL_ADDRESS_LSB | ((col) & 0x0F)); |
#define LCD_SET_BOTTOM_VIEW() lcd_command(LCD_BOTTOMVIEW) |
#define LCD_SET_TOP_VIEW() lcd_command(LCD_TOPVIEW) |
#define LCD_SET_MODE_POSITIVE() lcd_command(LCD_DISPLAY_POSITIVE) |
#define LCD_SET_MODE_INVERTED() lcd_command(LCD_DISPLAY_INVERTED) |
#define LCD_SHOW_ALL_PIXELS_ON() lcd_command(LCD_SHOW_ALL_POINTS) |
#define LCD_SHOW_ALL_PIXELS_OFF() lcd_command(LCD_SHOW_NORMAL) |
#define LCD_SET_BIAS_RATIO_1_7() lcd_command(LCD_BIAS_1_7) |
#define LCD_SET_BIAS_RATIO_1_9() lcd_command(LCD_BIAS_1_9) |
#define LCD_SEND_RESET() lcd_command(LCD_RESET_CMD) |
#define LCD_ORIENTATION_NORMAL() lcd_command(LCD_SCAN_DIR_NORMAL) |
#define LCD_ORIENTATION_UPSIDEDOWN() lcd_command(LCD_SCAN_DIR_REVERSE) |
#define LCD_SET_POWER_CONTROL(i) lcd_command(LCD_POWER_CONTROL | ((i) & 0x07)) |
#define LCD_SET_LOW_POWER() lcd_command(LCD_POWER_LOW_POWER) |
#define LCD_SET_WIDE_RANGE() lcd_command(LCD_POWER_WIDE_RANGE) |
#define LCD_SET_LOW_VOLTAGE() lcd_command(LCD_POWER_LOW_VOLTAGE) |
#define LCD_SET_BIAS_VOLTAGE(i) lcd_command(LCD_VOLTAGE | ((i) & 0x07)) |
#define LCD_SET_VOLUME_MODE(i) lcd_command(LCD_VOLUME_MODE_1); \ |
lcd_command(LCD_VOLUME_MODE_2 | ((i) & 0x3F)) |
//#if DISPLAY_TYPE == 128 || DISPLAY_TYPE == 132 |
#define LCD_SET_INDICATOR_OFF() lcd_command(LCD_INDICATOR_OFF); \ |
lcd_command(LCD_INDICATOR_MODE_OFF) |
#define LCD_SET_INDICATOR_STATIC() lcd_command(LCD_INDICATOR_ON); \ |
lcd_command(LCD_INDICATOR_MODE_ON) |
#define LCD_SET_INDICATOR_1HZ() lcd_command(LCD_INDICATOR_ON); \ |
lcd_command(LCD_INDICATOR_MODE_1HZ) |
#define LCD_SET_INDICATOR_2HZ() lcd_command(LCD_INDICATOR_ON); \ |
lcd_command(LCD_INDICATOR_MODE_2HZ) |
#define LCD_SET_INDICATOR(i,j) lcd_command(LCD_INDICATOR_OFF | ((i) & 1)); \ |
lcd_command(((j) & 2)) |
#define LCD_SLEEP_MODE lcd_command(LCD_INDICATOR_OFF); \ |
lcd_command(LCD_DISPLAY_OFF); \ |
lcd_command(LCD_SHOW_ALL_POINTS) |
//#endif |
//#if DISPLAY_TYPE == 102 |
//#define LCD_TEMPCOMP_HIGH 0x80 |
//#define LCD_COLWRAP 0x02 |
//#define LCD_PAGEWRAP 0x01 |
//#define LCD_SET_ADV_PROG_CTRL(i) lcd_command(LCD_ADV_PROG_CTRL); |
// lcd_command(LCD_ADV_PROG_CTRL2 & i) |
//#endif |
*/ |
extern volatile uint8_t LCD_ORIENTATION; |
//#define LCD_LINES 8 |
//#define LCD_COLS 21 |
extern uint8_t lcd_xpos; |
extern uint8_t lcd_ypos; |
void lcd_command(uint8_t cmd); |
void send_byte (uint8_t data); |
void LCD_Init (uint8_t LCD_Mode); |
void new_line (void); |
void lcd_puts_at(uint8_t x, uint8_t y,const char *s, uint8_t mode ); |
void lcd_putc (uint8_t x, uint8_t y, uint8_t c, uint8_t mode); |
void send_byte (uint8_t data); |
void lcd_print (uint8_t *text, uint8_t mode); |
void lcd_print_at (uint8_t x, uint8_t y, uint8_t *text, uint8_t mode); |
void lcd_printp (const char *text, uint8_t mode); |
void lcd_printp_at (uint8_t x, uint8_t y, const char *text, uint8_t mode); |
void lcd_printpns (const char *text, uint8_t mode); |
void lcd_printpns_at (uint8_t x, uint8_t y, const char *text, uint8_t mode); |
void lcd_cls (void); |
void lcd_cls_line (uint8_t x, uint8_t y, uint8_t w); |
void print_display (uint8_t *text); |
void print_display_at (uint8_t x, uint8_t y, uint8_t *text); |
void copy_line (uint8_t y); |
void paste_line (uint8_t y); |
// Jeti |
void lcd_putc_jeti (uint8_t x, uint8_t y, uint8_t c, uint8_t mode); |
void lcd_printpj (const char *text, uint8_t mode); |
void lcd_printpj_at (uint8_t x, uint8_t y, const char *text, uint8_t mode); |
void lcd_plot (uint8_t x, uint8_t y, uint8_t mode); |
void lcd_line (unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, uint8_t mode); |
void lcd_rect (uint8_t x1, uint8_t y1, uint8_t widthx, uint8_t widthy, uint8_t mode); |
void lcd_frect (uint8_t x1, uint8_t y1, uint8_t widthx, uint8_t widthy, uint8_t mode); |
void lcd_circle (int16_t x0, int16_t y0, int16_t radius, uint8_t mode); |
void lcd_fcircle (int16_t x0, int16_t y0, int16_t radius, uint8_t mode); |
void lcd_circ_line (uint8_t x, uint8_t y, uint8_t r, uint16_t deg, uint8_t mode); |
void lcd_ellipse (int16_t x0, int16_t y0, int16_t rx, int16_t ry, uint8_t mode); |
void lcd_ellipse_line (uint8_t x, uint8_t y, uint8_t rx, uint8_t ry, uint16_t deg, uint8_t mode); |
void lcd_ecircle (int16_t x0, int16_t y0, int16_t radius, uint8_t mode); |
void lcd_ecirc_line (uint8_t x, uint8_t y, uint8_t r, uint16_t deg, uint8_t mode); |
void lcd_view_font (uint8_t page); |
void lcd_print_hex_at (uint8_t x, uint8_t y, uint8_t h, uint8_t mode); |
void lcd_write_number_u (uint8_t number); |
void lcd_write_number_u_at (uint8_t x, uint8_t y, uint8_t number); |
void lcd_print_hex (uint8_t h, uint8_t mode); |
/** |
* Write only some digits of a unsigned <number> at <x>/<y> |
* <length> represents the length to rightbound the number |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
*/ |
void write_ndigit_number_u (uint8_t x, uint8_t y, uint16_t number, int16_t length, uint8_t pad,uint8_t mode); |
/** |
* Write only some digits of a signed <number> at <x>/<y> |
* <length> represents the length to rightbound the number |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 007 instead of 7 |
*/ |
void write_ndigit_number_s (uint8_t x, uint8_t y, int16_t number, int16_t length, uint8_t pad, uint8_t mode); |
/** |
* Write only some digits of a unsigned <number> at <x>/<y> as /10th of the value |
* <length> represents the length to rightbound the number |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 00.7 instead of .7 |
*/ |
void write_ndigit_number_u_10th (uint8_t x, uint8_t y, uint16_t number, int16_t length, uint8_t pad, uint8_t mode); |
/** |
* Write only some digits of a unsigned <number> at <x>/<y> as /100th of the value |
* <length> represents the length to rightbound the number |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 00.7 instead of .7 |
*/ |
void write_ndigit_number_u_100th (uint8_t x, uint8_t y, uint16_t number, int16_t length, uint8_t pad); |
/** |
* Write only some digits of a signed <number> at <x>/<y> as /10th of the value |
* <length> represents the length to rightbound the number |
* <pad> = 1 will cause blank spaced to be filled up with zeros e.g. 00.7 instead of .7 |
*/ |
void write_ndigit_number_s_10th (uint8_t x, uint8_t y, int16_t number, int16_t length, uint8_t pad, uint8_t mode); |
/** |
* write <seconds> as human readable time at <x>/<y> |
*/ |
void write_time (uint8_t x, uint8_t y, uint16_t seconds); |
/** |
* wirte a <position> at <x>/<y> assuming it is a gps position for long-/latitude |
*/ |
void write_gps_pos (uint8_t x, uint8_t y, int32_t position); |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/lipo.c |
---|
0,0 → 1,150 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* based on the key handling by Peter Dannegger * |
* see www.mikrocontroller.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#include "cpu.h" |
#include <avr/io.h> |
#include <util/delay.h> |
#include <avr/interrupt.h> |
#include <inttypes.h> |
#include <stdlib.h> |
#include <avr/pgmspace.h> |
#include "main.h" |
#include "lcd.h" |
#include "lipo.h" |
#include "eeprom.h" |
#if defined HWVERSION1_3W || defined HWVERSION3_9 || defined HWVERSION1_2W |
// Global variables |
double accumulator = 0; //!< Accumulated 10-bit samples |
double Vin = 0; //!< 16-bit float number result |
short temp = 0; //!< Temporary variable |
short samples = 0; //!< Number of conversions |
uint16_t volt_avg = 0; |
//! ADC interrupt routine |
ISR (ADC_vect) |
{ |
accumulator += ADCW; |
samples++; |
if(samples>4095) |
{ |
oversampled(); |
} |
} |
//-------------------------------------------------------------- |
// |
void ADC_Init (void) // MartinR: wird in HAL_HW3_9 aufgerufen |
{ |
ADMUX = (0<<REFS1) | (1<<REFS0); // externe 5V Referenzspannung nutzen |
ADMUX = (ADMUX & ~(0x1F)) | (1 & 0x1F); // ADC1 verwenden |
ADCSRA = (1<<ADEN)|(1<<ADIE)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); // ADC Enable, Interrupt Enable, ADC Start, Auto Trigger, Prescaler 128 |
} |
/*! Error compensation, Scaling 16-bit result, Rounding up |
, Calculate 16-bit result, Resets variables |
Quelle AVR121: Enhancing ADC resolution by versampling |
*/ |
void oversampled(void) // MartinR: wird vom Interrupt aufgerufen |
{ |
cli(); |
accumulator += Lipo_UOffset; //5150 Offset error compensation |
// accumulator *= 0.9993; // Gain error compensation |
accumulator *= 0.9600; //0.9800 Gain error compensation |
temp=(int)accumulator%64; |
accumulator/=64; // Scaling the answer |
if(temp>=32) |
{ |
accumulator += 1; // Round up |
} |
// Vin = (accumulator/65536)*4.910; // Calculating 16-bit result |
Vin =accumulator/7.5; |
volt_avg = Vin; |
// write_ndigit_number_u(0, 3, Vin, 5, 0); |
// write_ndigit_number_u(0, 4, volt_avg, 5, 0); |
samples = 0; |
accumulator = 0; |
sei(); |
} |
void show_Lipo(void) // MartinR: wird an verschiedenen Stellen aufgerufen |
{ |
uint16_t Balken = 0; |
lcd_rect(103,2,1,3,1); |
if (volt_avg < 320) |
{ |
Balken = 0; |
lcd_frect(106 + Balken-1, 2, 19-Balken, 3, 0); // löschen |
} |
if (PKT_Accutyp == true) //LiPO Akku |
{ |
lcd_rect(104, 0, 23, 7, 1); // Rahmen |
if (volt_avg >= 420) Balken = 19; |
if ((volt_avg > 320) && (volt_avg < 420)) Balken = (volt_avg-320)/5; |
lcd_frect(106 + Balken+1, 2, 19-Balken, 3, 0); // löschen |
} |
if (PKT_Accutyp == false) // LiON Akku |
{ |
lcd_rect(104, 0, 22, 7, 1); // Rahmen |
if (volt_avg >= 410) Balken = 18; |
if ((volt_avg > 320) && (volt_avg < 410)) Balken = ((volt_avg-320)/5); |
lcd_frect(106 + Balken+1, 2, 18-Balken, 3, 0); // löschen |
} |
if (Balken > 0) lcd_frect(106, 2, Balken, 3, 1); // Füllung |
} |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/lipo.h |
---|
0,0 → 1,50 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* based on the key handling by Peter Dannegger * |
* see www.mikrocontroller.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#ifndef _LIPO_H |
#define _LIPO_H |
short samples; //!< Number of conversions |
double Vin; |
double accumulator; |
uint16_t volt_avg; |
void ADC_Init (void); |
void oversampled(void); |
void show_Lipo(void); |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/main.c |
---|
0,0 → 1,381 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#include "cpu.h" |
#include <avr/io.h> |
#include <inttypes.h> |
#include <stdlib.h> |
#include <avr/pgmspace.h> |
#include <avr/wdt.h> |
#include <util/delay.h> |
#include <avr/eeprom.h> |
//************************************************************************************ |
// Watchdog integrieren und abschalten, wird für Bootloader benötigt |
// !!muss hier stehen bleiben!! |
//-------------------------------------------------------------- |
void wdt_init(void) __attribute__((naked)) __attribute__((section(".init1"))); |
//-------------------------------------------------------------- |
void wdt_init(void) |
{ |
MCUSR = 0; |
wdt_disable(); |
return; |
} |
//************************************************************************************ |
// erst ab hier weitere #includes |
#include "lipo.h" |
#include "main.h" |
#include "lcd.h" |
#include "usart.h" |
#include "uart1.h" |
#include "mk-data-structs.h" |
#include "parameter.h" |
#include "menu.h" |
#include "display.h" |
#include "timer.h" |
#include "eeprom.h" |
#include "Wi232.h" |
#include "twimaster.h" |
#include "messages.h" |
//#define MTEST 0 // Menu Test (skip FC/NC detection) |
Version_t *version; |
volatile uint8_t mode = 0; |
uint8_t hardware = 0; |
uint8_t current_hardware = 0; |
mk_param_struct_t *mk_param_struct; |
//-------------------------------------------------------------- |
int main (void) |
{ |
#ifndef DEBUG |
uint8_t timeout; |
uint8_t val =0; |
uint8_t spalte =0; |
#endif |
InitHWPorts(); // Hardwareanhängige Ports konfigurieren |
// dafür wird je nach Hardware die HAL_HWxxx verwendet |
// Define dazu in der main.h |
hardware = NO; |
current_hardware = 0; |
if (PKT_StartInfo == true) |
{ |
lcd_cls (); |
// lcd_printp_at (0,0,PSTR("Portables Kopter Tool"), 0); |
lcd_puts_at(0, 0, strGet(START_MSG1), 0); |
lcd_puts_at(0, 1, strGet(START_MSG2), 0); |
// lcd_printp_at (0,1,PSTR("für FC Ver "), 0); |
// lcd_printp_at (11,1,PSTR(FC_Version),0); |
// lcd_printp_at (0,3,PSTR("GNU GPL License"), 0); |
lcd_puts_at(0, 3, strGet(GNU_GPL), 0); |
#ifdef HWVERSION1_2 |
// lcd_printp_at (0,4,PSTR("Hardware 1.2"), 0); |
// lcd_printp_at (0,5,PSTR("ATmega 644"), 0); |
lcd_puts_at(0, 4, strGet(HW12), 0); |
lcd_puts_at(0, 5, strGet(ATMEGA644), 0); |
#endif |
#ifdef HWVERSION1_2W |
// lcd_printp_at (0,4,PSTR("Hardware 1.2W"), 0); |
// lcd_printp_at (0,5,PSTR("ATmega 644"), 0); |
lcd_puts_at(0, 4, strGet(HW12W), 0); |
lcd_puts_at(0, 5, strGet(ATMEGA644), 0); |
#endif |
#ifdef HWVERSION1_3 |
// lcd_printp_at (0,4,PSTR("Hardware 1.3"), 0); |
// lcd_printp_at (0,5,PSTR("ATmega 644P"), 0); |
lcd_puts_at(0, 4, strGet(HW13), 0); |
lcd_puts_at(0, 5, strGet(ATMEGA644P), 0); |
#endif |
#ifdef HWVERSION1_3W |
// lcd_printp_at (0,4,PSTR("Hardware 1.3W"), 0); |
// lcd_printp_at (0,5,PSTR("ATmega 644P"), 0); |
lcd_puts_at(0, 4, strGet(HW13W), 0); |
lcd_puts_at(0, 5, strGet(ATMEGA644P), 0); |
#endif |
#ifdef HWVERSION3_9 |
// lcd_printp_at (0,4,PSTR("Hardware 3.9"), 0); |
// lcd_printp_at (0,5,PSTR("ATmega 1284P"), 0); |
lcd_puts_at(0, 4, strGet(HW39), 0); |
lcd_puts_at(0, 5, strGet(ATMEGA1284P), 0); |
#endif |
_delay_ms(1500); |
} |
#ifndef DEBUG |
ReadLastPosition (); |
if (LastLongitude>0x00000000 && LastLatitude>0x00000000) |
{ |
lcd_cls (); |
// lcd_printp_at (0, 4, PSTR(" Letzte Position "), 2); |
// lcd_printp_at (0, 5, PSTR(" Breitengr Längengr "), 2); |
// lcd_printp_at (0, 7, PSTR("löschen weiter"), 0); |
lcd_puts_at(0, 0, strGet(START_LASTPOS), 2); |
lcd_puts_at(0, 1, strGet(START_LASTPOS3), 2); |
lcd_puts_at(0, 2, strGet(START_LASTPOS1), 2); |
lcd_puts_at(0, 7, strGet(START_LASTPOS2), 0); |
write_ndigit_number_u (1, 4, (uint16_t)(LastLatitude/10000000), 2, 0,0); |
lcd_printp_at (3, 4, PSTR("."), 0); |
write_ndigit_number_u (4, 4, (uint16_t)((LastLatitude/1000) % 10000), 4, 1,0); |
write_ndigit_number_u (8, 4, (uint16_t)((LastLatitude/10) % 100), 2, 1,0); |
write_ndigit_number_u (12, 4, (uint16_t)(LastLongitude/10000000), 2, 0,0); |
lcd_printp_at (14, 4, PSTR("."), 0); |
write_ndigit_number_u (15, 4, (uint16_t)((LastLongitude/1000) % 10000), 4, 1,0); |
write_ndigit_number_u (19, 4, (uint16_t)((LastLongitude/10) % 100), 2, 1,0); |
for (;;) |
{ |
if (get_key_press (1 << KEY_MINUS)) |
{ |
WriteLastPosition(0x00000000,0x00000000); // Löschen |
lcd_frect (0, (8*4), 128, 8, 0); // Zeile löschen (x, y, l, h, in Pixel) |
lcd_frect (0, (8*5), 128, 8, 0); |
// lcd_printp_at (0,5,PSTR(" gelöscht "), 0); |
lcd_puts_at(0, 5, strGet(START_LASTPOSDEL), 0); |
lcd_cls_line (0, 6, 21); |
lcd_cls_line (0, 7, 21); |
_delay_ms(1000); |
break; |
} |
if (get_key_press (1 << KEY_ENTER)) |
{ |
lcd_cls_line (0, 4, 21); |
lcd_cls_line (0, 5, 21); |
lcd_cls_line (0, 6, 21); |
lcd_cls_line (0, 7, 21); |
break; |
} |
} |
} |
#endif |
// switch to NC |
USART_putc (0x1b); |
USART_putc (0x1b); |
USART_putc (0x55); |
USART_putc (0xaa); |
USART_putc (0x00); |
mode = 'V'; |
#ifndef DEBUG |
do |
{ |
timeout = 50; |
lcd_cls(); |
// lcd_printp_at (0,4,PSTR("Suche FC..."), 0); |
// lcd_printp_at (12, 7, PSTR("Ende"), 0); |
lcd_puts_at(0, 4, strGet(START_SEARCHFC), 0); |
lcd_puts_at(12, 7, strGet(ENDE), 0); |
while (!rxd_buffer_locked && timeout) |
{ |
SendOutData('v', ADDRESS_ANY, 0); |
timer = 20; |
while (timer > 0); |
timeout--; |
if (spalte <= 20) |
{ |
lcd_printp_at (spalte,6,PSTR("?"),0); |
spalte++; |
} |
else |
{ |
lcd_cls_line (0,6,21); |
spalte=0; |
} |
if (get_key_press (1 << KEY_ESC)) |
{ |
get_key_press(KEY_ALL); |
for (;;) |
{ |
Debug = 0; |
hardware = NO; |
main_menu (); |
} |
} |
} |
if(timeout == 0) |
{ |
// lcd_printp_at (0,5,PSTR("FC nicht gefunden!"), 0); |
lcd_puts_at(0, 5, strGet(START_FCNOTFOUND), 0); |
timer = 90; |
while (timer > 0); |
} |
} |
while(timeout == 0); |
if (timeout != 0) |
Decode64 (); |
version = (Version_t *) pRxData; |
if (PKT_StartInfo == true) |
{ |
lcd_cls (); |
// lcd_printp (PSTR("PKT-Tool GNU GPL\r\n"), 0); |
// lcd_printp (PSTR("gefunden:\r\n\n"), 0); |
lcd_puts_at(0, 0, strGet(START_FCFOUND), 0); |
lcd_puts_at(0, 1, strGet(START_FCFOUND1), 0); |
} |
if ((rxd_buffer[1] - 'a') == ADDRESS_FC) |
{ |
if (PKT_StartInfo == true) |
{ |
// lcd_printp (PSTR("Flight-Ctrl\r\n"), 0); |
lcd_puts_at(0, 2, strGet(START_FCFOUND2), 0); |
} |
hardware = FC; |
current_hardware = hardware; |
} |
else if ((rxd_buffer[1] - 'a') == ADDRESS_NC) |
{ |
if (PKT_StartInfo == true) |
{ |
// lcd_printp (PSTR("Navi-Ctrl\r\n"), 0); |
lcd_puts_at(0, 2, strGet(START_FCFOUND3), 0); |
} |
hardware = NC; |
current_hardware = hardware; |
} |
if (PKT_StartInfo == true) |
{ |
// lcd_printp (PSTR("Version: "), 0); |
lcd_puts_at(0, 3, strGet(START_VERSIONCHECK), 0); |
lcd_write_number_u_at (9, 3, version->SWMajor); |
lcd_printp_at (10,3,PSTR("."), 0); |
lcd_write_number_u_at (11,3,version->SWMinor); |
lcd_write_number_u_at (14,3, version->SWPatch + 'a'); |
_delay_ms(2500); |
} |
SwitchToFC(); |
#else |
if (PKT_StartInfo == true) |
{ |
lcd_cls (); |
lcd_printp (PSTR("PKT-Test DEBUG\r\n"), 0); |
_delay_ms(1500); |
} |
#endif |
#ifndef DEBUG |
// EEprom Version / Struktur prüfen |
// val = load_setting(1); // Parameterset 1 holen |
val = load_setting(0xff); // aktuelles Parameterset holen |
if (mk_param_struct->Revision != EEProm_Version) |
{ |
lcd_cls (); |
lcd_printp_at (0, 0, PSTR("EEPromRev "), 0); |
lcd_write_number_u (EEProm_Version); |
lcd_puts_at(13, 0, strGet(START_VERSIONCHECK1), 0); |
// lcd_printp (PSTR("erwartet\r\n"), 0); |
lcd_printp_at (0, 2, PSTR("EEPromRev "), 0); |
lcd_write_number_u (mk_param_struct->Revision); |
lcd_puts_at(13, 2, strGet(START_VERSIONCHECK2), 0); |
// lcd_printp (PSTR(" gefunden\r\n"), 0); |
// lcd_printp (PSTR("PKT-Tool nur mit\r\n"), 0); |
// lcd_printp (PSTR("FC Software "), 0); |
lcd_puts_at(0, 4, strGet(START_VERSIONCHECK3), 0); |
lcd_puts_at(0, 5, strGet(START_VERSIONCHECK4), 0); |
// lcd_printp (PSTR(FC_Version), 0); |
lcd_printp_at (12, 5, PSTR(FC_Version), 0); |
// lcd_printp (PSTR("\r\nkompatibel"), 0); |
lcd_puts_at(0, 6, strGet(START_VERSIONCHECK5), 0); |
hardware = NO; |
set_beep ( 1500, 0x0040, BeepNormal); |
_delay_ms(4000); |
} |
#endif |
mode = 0; |
rxd_buffer_locked = FALSE; |
timer = 50; |
while (timer > 0); |
for (;;) |
{ |
main_menu (); |
} |
} |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/main.h |
---|
0,0 → 1,127 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2012 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2012 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
/** |
* @Author Cebra |
* |
* ${tags} |
*/ |
//** |
// * |
// * |
// * |
// |
/* |
* File name: $HeadURL: http://mikrokopter.de/mikrosvn/Projects/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/main.h $ |
* Revision: $Revision: 1496 $ |
* Last modified: $Date: 2012-01-15 21:31:25 +0100 (So, 15 Jan 2012) $ |
* Last modified by: $Author: $ |
* $Id: main.h 1496 2012-01-15 20:31:25Z $ |
*/ |
#ifndef _MAIN_H |
#define _MAIN_H |
// Version der Software |
#define PKTSWVersion "3.6.3a" // PKT Version |
//#define DEBUG |
// Fusebits für Hardware 1.2 D7 DC FC |
// Fusebits für Hardware 1.3 |
// Fusebits für Hardware 3.x D7 DC FC |
// avrdude -pm1284p -cavr109 -P/dev/ttyUSB1 -b115200 -V -Uflash:w:Dateiname.hex:a |
// hier die entsprechende Hardwareversion der Leiterplatte einstellen |
// MartinR: Hardwareversion jetzt in der makefile !!!!!!!!!!!!! |
//#define HWVERSION1_2 // Hardware sebseb7 |
//#define HWVERSION1_2W // Hardware sebseb7 mit Wi232 Support |
//#define HWVERSION1_3 // Hardware sebseb7 |
//#define HWVERSION1_3W // Hardware sebseb7 mit Wi232 Support |
//#define HWVERSION3_9 // Hardware Cebra Oktober 2011 ATmega1284P |
//#define ohne_Lipo // MartinR zur Abschaltung der Lipo-Überwachung |
#if defined HWVERSION1_2W || defined HWVERSION1_2 |
#include "HAL_HW1_2.h" |
#endif |
#if defined HWVERSION1_3W || defined HWVERSION1_3 |
#include "HAL_HW1_3.h" |
#endif |
#if defined HWVERSION3_9 |
#include "HAL_HW3_9.h" |
#endif |
#define NO 0 |
#define NC 1 |
#define FC 2 |
#define MK3MAG 3 |
#define MKGPS 4 |
#define Wi232 5 |
#define ENABLE_PWM |
// Menueleiste am unteren Rand definieren |
// |
// 11 <> Change |
// |
// 12 /\ Up 13 \/ Down 14 < Left 15 > Right |
// |
// 16 /|\ Arrow up 17 \|/ Arrow down 18 <- Arrow left 19 -> Arrow right |
// |
// 1A ^ Triangle up 1B v Triangle down 1C < Triangle left 1D > Triangle right |
// |
// "01 234567 8901234567890" |
// "|O |||||O |||||O|||||O|" |
// |
//#define KEY_LINE_1 " \x1a \x1b Ende OK" |
//#define KEY_LINE_2 " \x18 \x19 Ende OK" |
//#define KEY_LINE_3 " \x18 \x19 Ende" |
extern volatile uint8_t mode; |
extern uint8_t hardware; |
extern uint8_t current_hardware; |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/menu.c |
---|
0,0 → 1,726 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#include "cpu.h" |
#include <avr/io.h> |
#include <inttypes.h> |
#include <stdlib.h> |
#include <avr/pgmspace.h> |
#include <avr/wdt.h> |
#include <util/delay.h> |
#include "main.h" |
#include "lcd.h" |
#include "parameter.h" |
#include "menu.h" |
#include "display.h" |
#include "debug.h" |
#include "timer.h" |
#include "osd.h" |
#include "motortest.h" |
#include "gps.h" |
#include "eeprom.h" |
#include "setup.h" |
#include "uart1.h" |
#include "mk-data-structs.h" |
#include "Wi232.h" |
#include "servo.h" |
#include "tools.h" |
#include "connect.h" |
#include "lipo.h" |
#include "messages.h" |
#include "bluetooth.h" |
#include "followme.h" |
#include "stick.h" // MartinR |
// #define ITEMS_NC 8 //MartinR: so war es |
#define ITEMS_NC 9 //MartinR: |
prog_char param_menuitems_nc[ITEMS_NC][NUM_LANG][18]= // zeilen,zeichen+1 |
// German, English, French, Netherlands |
/* // MartinR: so war es |
{ |
{"OSD ","OSD ","OSD ","OSD "}, |
{"3D Lage ","3D angeles ","3D location ","3D locatie "}, |
{"MK Display ","MK Display ","MK Display ","MK Display "}, |
{"Parameter \x1d","Parameter \x1d","Parameter \x1d","Parameters \x1d"}, |
{"Debug Data ","Debug Data ","Debug Data ","Debug Data "}, |
{"GPS Info ","GPS Info ","GPS Info ","GPS Info "}, |
{"Follow Me ","Follow Me ","Follow Me ","Follow Me "}, |
{"PKT Tools \x1d","PKT Tools \x1d","PKT Tools \x1d","PKT Tools \x1d"}, |
}; |
*/ |
// MartinR: geändert |
{ |
{"Joystick ","Joystick ","Joystick ","Joystick "}, |
{"OSD ","OSD ","OSD ","OSD "}, |
{"3D Lage ","3D angeles ","3D location ","3D locatie "}, |
{"GPS Info ","GPS Info ","GPS Info ","GPS Info "}, |
{"Follow Me ","Follow Me ","Follow Me ","Follow Me "}, |
{"MK Display ","MK Display ","MK Display ","MK Display "}, |
{"Parameter \x1d","Parameter \x1d","Parameter \x1d","Parameter \x1d"}, |
{"Debug Data ","Debug Data ","Debug Data ","Debug Data "}, |
{"PKT Tools \x1d","PKT Tools \x1d","PKT Tools \x1d","PKT Tools \x1d"}, |
}; |
#define ITEMS_FC 5 |
prog_char param_menuitems_fc[ITEMS_FC][NUM_LANG][18]= // zeilen,zeichen+1 |
{ |
{"Joystick ","Joystick ","Joystick ","Joystick "}, |
//{"OSD ","OSD ","OSD ","OSD "}, |
//{"3D Lage ","3D angeles ","3D location ","3D locatie "}, |
//{"GPS Info ","GPS Info ","GPS Info ","GPS Info "}, |
//{"Follow Me ","Follow Me ","Follow Me ","Follow Me "}, |
{"MK Display ","MK Display ","MK Display ","MK Display "}, |
{"Parameter \x1d","Parameter \x1d","Parameter \x1d","Parameter \x1d"}, |
{"Debug Data ","Debug Data ","Debug Data ","Debug Data "}, |
{"PKT Tools \x1d","PKT Tools \x1d","PKT Tools \x1d","PKT Tools \x1d"}, |
}; |
//#define ITEMS_NO 6 // MartinR: so war es |
#define ITEMS_NO 2 // MartinR: |
prog_char param_menuitems_no[ITEMS_NO][NUM_LANG][18]= // zeilen,zeichen+1 |
/* // MartinR: so war es |
{ |
{"BL-Ctrl. Tester ","BL-Ctrl. Tester ","BL-Ctrl. Tester ","BL-Ctrl. Tester "}, |
{"Servo Tester ","Servo Tester ","Servo Tester ","Servo Tester "}, |
{"PC BT > Kopter ","PC BT > Kopter ","PC BT > Kopter ","PC BT > Kopter "}, |
{"PC USB > Kopter ","PC USB > Kopter ","PC USB > Kopter ","PC USB > Kopter "}, |
{"PKT Setup \x1d","PKT Setup \x1d","PKT Setup \x1d","PKT Setup \x1d"}, |
{"PKT Version ","PKT Version ","PKT Version ","PKT Versie "}, |
}; |
*/ |
// MartinR: geändert |
{ |
{"Joystick ","Joystick ","Joystick ","Joystick "}, |
//{"OSD ","OSD ","OSD ","OSD "}, |
//{"3D Lage ","3D angeles ","3D location ","3D locatie "}, |
//{"GPS Info ","GPS Info ","GPS Info ","GPS Info "}, |
//{"Follow Me ","Follow Me ","Follow Me ","Follow Me "}, |
//{"MK Display ","MK Display ","MK Display ","MK Display "}, |
//{"Parameter \x1d","Parameter \x1d","Parameter \x1d","Parameter \x1d"}, |
//{"Debug Data ","Debug Data ","Debug Data ","Debug Data "}, |
{"PKT Tools \x1d","PKT Tools \x1d","PKT Tools \x1d","PKT Tools \x1d"}, |
}; |
#define ITEMS_CR 9 |
prog_char param_copyright[ITEMS_CR][22]= // zeilen,zeichen+1 |
{ |
" ", |
"(C) GNU GPL License ", |
" NO WARRANTY ", |
" ", |
"2008 Thomas Kaiser ", |
"2009-2010 Peter Mack ", |
"2010 Sebastian Boehm ", |
"2012 Chr. Brandtner &", |
" Harald Bongartz ", |
}; |
//-------------------------------------------------------------- |
// print cursor |
void menu_set_cursor (uint8_t before, uint8_t line, uint8_t pos) |
{ |
lcd_printp_at (pos, before, PSTR(" "), 0); |
lcd_printp_at (pos, line, PSTR("\x1d"), 0); |
} |
// F�r Seting-Auswahl ------------------------------------------ |
// |
uint8_t menu_choose (uint8_t min, uint8_t max, uint8_t pos, uint8_t start) |
{ |
uint8_t line = start; |
uint8_t before = start; |
uint8_t k; |
menu_set_cursor (line, line, pos); |
do |
{ |
if (get_key_press (1 << KEY_PLUS) | get_key_long_rpt_sp ((1 << KEY_PLUS), 1)) |
{ |
if (line < max) |
line ++; |
else |
line = max; |
// line = min; // Wenn wiederholen soll |
} |
if (get_key_press (1 << KEY_MINUS) | get_key_long_rpt_sp ((1 << KEY_MINUS), 1)) |
{ |
if (line > min) |
line --; |
else |
line = min; |
// line = max; // Wenn wiederholen soll |
} |
if (line != before) |
{ |
menu_set_cursor (before, line, pos); |
before = line; |
} |
} |
while (!(k = get_key_press ((1 << KEY_ENTER) | (1 << KEY_ESC)))); |
if (k & (1 << KEY_ESC)) |
line = 255; |
return line; |
} |
// F�r Setup und Parameter ------------------------------------------ |
// |
uint8_t menu_choose2 (uint8_t min, uint8_t max, uint8_t start, uint8_t return_at_start, uint8_t return_at_end) |
{ |
uint8_t pos = 1; |
uint8_t line = start; |
uint8_t before = start; |
uint8_t k; |
menu_set_cursor (line, line, pos); |
do |
{ |
if (get_key_press (1 << KEY_PLUS) | get_key_long_rpt_sp ((1 << KEY_PLUS), 1)) |
{ |
if (line < max) |
line ++; |
else |
{ |
if(return_at_end == 1) |
return 254; |
else |
line = max; |
// line = min; // Wenn wiederholen soll |
} |
} |
if (get_key_press (1 << KEY_MINUS) | get_key_long_rpt_sp ((1 << KEY_MINUS), 1)) |
{ |
if (line > min) |
line --; |
else |
{ |
if(return_at_start == 1) |
return 253; |
else |
line = min; |
// line = max; // Wenn wiederholen soll |
} |
} |
if (line != before) |
{ |
menu_set_cursor (before, line, pos); |
before = line; |
} |
} |
while (!(k = get_key_press ((1 << KEY_ENTER) | (1 << KEY_ESC)))); |
if (k & (1 << KEY_ESC)) |
line = 255; |
return line; |
} |
// F�r das Hauptmenue ------------------------------------------ |
// |
uint8_t menu_choose3 (uint8_t min, uint8_t max,uint8_t start, uint8_t return_at_start, uint8_t return_at_end) |
{ |
uint8_t pos = 1; |
uint8_t line = start; |
uint8_t before = start; |
menu_set_cursor (line, line, pos); |
do |
{ |
if (get_key_press (1 << KEY_PLUS) | get_key_long_rpt_sp ((1 << KEY_PLUS), 1)) |
{ |
if (line < max) |
line ++; |
else |
{ |
if(return_at_end == 1) |
return 254; |
else |
line = max; |
// line = min; // Wenn wiederholen soll |
} |
} |
if (get_key_press (1 << KEY_MINUS) | get_key_long_rpt_sp ((1 << KEY_MINUS), 1)) |
{ |
if (line > min) |
line --; |
else |
{ |
if(return_at_start == 1) |
return 253; |
else |
line = min; |
// line = max; // Wenn wiederholen soll |
} |
} |
if (get_key_long (1 << KEY_ESC)) |
{ |
get_key_press(KEY_ALL); |
return 250; |
} |
if(get_key_long (1 << KEY_ENTER)) |
{ |
get_key_press(KEY_ALL); |
return 251; |
} |
if (get_key_short (1 << KEY_ESC)) |
{ |
get_key_press(KEY_ALL); |
return 252; |
} |
if (line != before) |
{ |
menu_set_cursor (before, line, pos); |
before = line; |
} |
#ifdef HWVERSION3_9 |
#ifndef ohne_Lipo // MartinR |
show_Lipo(); |
#endif |
#endif |
} |
while (!(get_key_short (1 << KEY_ENTER))); |
return line; |
} |
//-------------------------------------------------------------- |
// |
void main_menu (void) |
{ |
uint8_t ii = 0; |
uint8_t offset = 0; |
uint8_t size = 0; |
uint8_t Save_hardware = 0; |
uint8_t dmode = 0; |
uint8_t target_pos = 1; |
uint8_t val =0; |
Save_hardware = hardware; |
#ifdef HWVERSION3_9 |
#ifndef ohne_Lipo // MartinR |
// MartinR: von HAL_HW3_9.c hierher verschoben |
ADC_Init(); // ADC für Lipomessung |
#endif |
#endif |
get_key_press(KEY_ALL); |
while(1) |
{ |
if (Debug==1) |
hardware = NC; |
if (Debug==0) |
hardware = Save_hardware; |
if(hardware == NO) |
size = ITEMS_NO ; |
if(hardware == NC) |
size = ITEMS_NC ; |
if(hardware == FC) |
size = ITEMS_FC ; |
lcd_cls (); |
lcd_printp_at (0, 0, PSTR("PKT-Tool FC "), 2); |
lcd_printp_at (12, 0, PSTR(FC_Version), 2); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_1), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE1), 0); |
// lcd_printp_at (12, 7, PSTR("Aus "), 0); |
lcd_puts_at(12, 7, strGet(OFF), 0); |
while(2) |
{ |
ii = 0; |
if(offset > 0) |
lcd_printp_at(1,1, PSTR("\x12"), 0); |
for(ii = 0;ii < 6 ; ii++) |
{ |
if((ii+offset) < size) |
{ |
if(hardware == NC) |
lcd_printp_at(3,ii+1,param_menuitems_nc[ii+offset][DisplayLanguage], 0); |
else if(hardware == FC) |
lcd_printp_at(3,ii+1,param_menuitems_fc[ii+offset][DisplayLanguage], 0); |
else |
lcd_printp_at(3,ii+1,param_menuitems_no[ii+offset][DisplayLanguage], 0); |
} |
if((ii == 5)&&(ii+offset < (size-1))) |
lcd_printp_at(1,6, PSTR("\x13"), 0); |
#ifdef HWVERSION3_9 |
#ifndef ohne_Lipo // MartinR |
show_Lipo(); |
#endif |
#endif |
} |
if(dmode == 0) |
{ |
if(offset == 0) |
{ |
if(size > 6) |
val = menu_choose3 (1, 5, target_pos,0,1); //menu_choose3 (min, max, start, return_at_start, return_at_end) |
else |
val = menu_choose3 (1, size, target_pos,0,0); |
} |
else |
val = menu_choose3 (2, 5, target_pos,1,1); |
} |
if(dmode == 1) |
{ |
if(offset+7 > size) |
val = menu_choose3 (2, 6, target_pos,1,0); |
else |
val = menu_choose3 (2, 5, target_pos,1,1); |
} |
if(val == 254) |
{ |
offset++; |
dmode = 1; |
target_pos = 5; |
} |
else if(val == 253) |
{ |
offset--; |
dmode = 0; |
target_pos = 2; |
} |
#if defined HWVERSION3_9 |
else if(val == 252) |
{ |
lcd_cls(); |
// lcd_printp_at (0, 2, PSTR(" PKT ausschalten?"),0); |
lcd_puts_at(0, 2, strGet(SHUTDOWN), 0); |
// lcd_printp_at (12, 7, PSTR("Nein Ja"),0); |
lcd_puts_at(12, 7, strGet(YESNO), 0); |
while(1) |
{ |
if (get_key_press (1 << KEY_ENTER)) |
clr_V_On(); // Spannung abschalten |
if (get_key_short (1 << KEY_ESC)) |
{ |
get_key_press(KEY_ALL); |
lcd_cls(); |
lcd_printp_at (0, 0, PSTR("PKT-Tool FC "), 2); |
lcd_printp_at (12, 0,PSTR(FC_Version), 2); |
// show_Lipo(); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_1), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE1), 0); |
// lcd_printp_at (12, 7, PSTR("Aus "), 0); |
lcd_puts_at(12, 7, strGet(OFF), 0); |
break; |
} |
} |
} |
else if(val == 251) |
{ |
PC_Fast_Connect(); |
return; |
} |
#endif |
else if(val == 250) |
{ |
// Test_HB(); |
Test_Language(); |
return; |
} |
else |
break; |
} |
target_pos = val; |
// MartinR: !!!!!!!!!!!!!!!!!!! |
#ifdef HWVERSION3_9 |
if(hardware == NC) |
{ |
if((val+offset) == 1 ) |
joystick(); |
if((val+offset) == 2 ) |
osd(OSD_Mode); |
if((val+offset) == 3 ) |
osd(THREE_D_Mode); |
if((val+offset) == 4 ) |
gps(); |
if((val+offset) == 5 ) |
FollowMe(); |
if((val+offset) == 6 ) |
display_data(); |
if((val+offset) == 7 ) |
edit_parameter(); |
if((val+offset) == 8 ) |
//TODO: Debug an FC087 anpassen |
display_debug(); |
if((val+offset) == 9 ) |
PKT_Tools(); |
} |
#endif |
if(hardware == FC) |
{ |
if((val+offset) == 1 ) |
joystick(); |
if((val+offset) == 2 ) |
display_data(); |
if((val+offset) == 3 ) |
edit_parameter(); |
if((val+offset) == 4 ) |
//TODO: Debug an FC087 anpassen |
display_debug(); |
if((val+offset) == 5 ) |
PKT_Tools(); |
} |
if(hardware == NO) |
{ |
/* // MartinR: so war es |
if((val+offset) == 1 ) |
motor_test(FC_Mode); |
if((val+offset) == 2 ) |
servo_test(); |
#ifdef HWVERSION3_9 |
if (U02SV2 == 0) |
{ |
if((val+offset) == 3 ) |
{ |
if (BTIsSlave==true) |
{ |
Port_BT2Wi(); |
} |
else |
{ |
bt_set_mode(BLUETOOTH_SLAVE); |
Port_BT2Wi(); |
} |
} |
if((val+offset) == 4 ) |
Port_USB2Wi(); |
} |
else if (U02SV2 == 1) |
{ |
if((val+offset) == 3 ) |
{ |
if (BTIsSlave==true) |
{ |
Port_BT2FC(); |
} |
else |
{ |
bt_set_mode(BLUETOOTH_SLAVE); |
Port_BT2FC(); |
} |
} |
if((val+offset) == 4 ) |
Port_USB2FC(); |
} |
#else |
if((val+offset) == 3 ) |
Show_Error_HW(); |
if((val+offset) == 4 ) |
Show_Error_HW(); |
#endif |
if((val+offset) == 5 ) |
PKT_Setup(); |
if((val+offset) == 6 ) |
Show_Version(); |
*/ |
if((val+offset) == 1 ) |
joystick(); |
if((val+offset) == 2 ) |
PKT_Tools(); |
} |
} |
} |
//-------------------------------------------------------------- |
// |
void Update_PKT (void) |
{ |
lcd_cls(); |
lcd_printp_at (0, 0, PSTR(" PKT Update "),2); |
// lcd_printp_at (0, 1, PSTR("Connect PC to PKT-USB"),0); |
lcd_puts_at(0, 1, strGet(UPDATE1), 0); |
// lcd_printp_at (0, 2, PSTR("Press 'Start' on PKT "),0); |
lcd_puts_at(0, 2, strGet(UPDATE2), 0); |
lcd_printp_at (0, 3, PSTR("Start avrdude.exe "),0); |
lcd_printp_at (0, 4, PSTR("-pm1284p -cavr109 "),0); |
lcd_printp_at (0, 5, PSTR("-Pcom? -b115200 "),0); |
lcd_printp_at (0, 6, PSTR("-Uflash:w:FILE.hex:a "),0); |
// avrdude -pm1284p -cavr109 -P/dev/ttyUSB1 -b115200 -V -Uflash:w:Dateiname.hex:a |
// lcd_printp_at (0, 7, PSTR(" Ende Start"), 0); |
lcd_puts_at(0, 7, strGet(ENDSTART), 0); |
do |
{ |
if (get_key_press (1 << KEY_ESC)) |
{ |
get_key_press(KEY_ALL); |
return; |
} |
} |
while (!(get_key_press (1 << KEY_ENTER))); |
{ |
// start bootloader with Reset, Hold KEY_ENTER*/ |
wdt_enable( WDTO_250MS ); |
while (1) |
{;} |
} |
} |
//-------------------------------------------------------------- |
// |
void Show_Error_HW (void) |
{ |
lcd_cls (); |
lcd_printp_at (0, 2, PSTR(" Mit dieser Hardware"), 0); |
lcd_printp_at (0, 3, PSTR(" nicht möglich!"), 0); |
lcd_printp_at (12, 7, PSTR("Ende"), 0); |
while (!get_key_press (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
return; |
} |
//-------------------------------------------------------------- |
// |
void Show_Version (void) |
{ |
uint8_t ii = 0; |
uint8_t size = ITEMS_CR; |
uint8_t page = 0; |
lcd_cls (); |
lcd_printp_at (0, 0, PSTR("PKT Tool V. "), 2); |
lcd_printp_at (13,0, PSTR(PKTSWVersion),2); |
// lcdPuts(Msg(MSG_VERSION1)); |
// lcd_printp_at (0, 0, Msg(MSG_VERSION1), 2); |
// lcd_printp_at (0, 1, PSTR("für FC ver "), 2); |
// lcd_printp_at (12,1, PSTR(FC_Version),2); |
lcd_printp_at (0, 1, PSTR(" "), 2); //um die ganze Zeile schwarz zu füllen. |
lcd_puts_at(0, 1, strGet(START_MSG2), 2); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_1), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE1), 0); |
while(1) |
{ |
for(ii = 0;ii < 3 ; ii++) |
if((ii + page) < size) |
lcd_printp_at(0,ii + 3,param_copyright[ii + page], 0); |
if (page == 0) |
{ |
lcd_printp_at (0, 2, PSTR(" "), 0); |
lcd_printp_at (0, 6, PSTR("\x13"), 0); |
} |
if (page > 0 && page < (size - 3)) |
{ |
lcd_printp_at (0, 2, PSTR("\x12"), 0); |
lcd_printp_at (0, 6, PSTR("\x13"), 0); |
} |
if (page >= (size - 3)) |
{ |
lcd_printp_at (0, 2, PSTR("\x12"), 0); |
lcd_printp_at (0, 6, PSTR(" "), 0); |
} |
if (get_key_press (1 << KEY_PLUS)) |
if (page < size - 3) |
page++; |
if (get_key_press (1 << KEY_MINUS)) |
if (page > 0) |
page--; |
if (get_key_press (1 << KEY_ESC) || get_key_press (1 << KEY_ENTER)) |
{ |
get_key_press(KEY_ALL); |
return; |
} |
} |
} |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/menu.c.bak |
---|
0,0 → 1,726 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#include "cpu.h" |
#include <avr/io.h> |
#include <inttypes.h> |
#include <stdlib.h> |
#include <avr/pgmspace.h> |
#include <avr/wdt.h> |
#include <util/delay.h> |
#include "main.h" |
#include "lcd.h" |
#include "parameter.h" |
#include "menu.h" |
#include "display.h" |
#include "debug.h" |
#include "timer.h" |
#include "osd.h" |
#include "motortest.h" |
#include "gps.h" |
#include "eeprom.h" |
#include "setup.h" |
#include "uart1.h" |
#include "mk-data-structs.h" |
#include "Wi232.h" |
#include "servo.h" |
#include "tools.h" |
#include "connect.h" |
#include "lipo.h" |
#include "messages.h" |
#include "bluetooth.h" |
#include "followme.h" |
#include "stick.h" // MartinR |
// #define ITEMS_NC 8 //MartinR: so war es |
#define ITEMS_NC 9 //MartinR: |
prog_char param_menuitems_nc[ITEMS_NC][NUM_LANG][18]= // zeilen,zeichen+1 |
// German, English, French, Netherlands |
/* // MartinR: so war es |
{ |
{"OSD ","OSD ","OSD ","OSD "}, |
{"3D Lage ","3D angeles ","3D location ","3D locatie "}, |
{"MK Display ","MK Display ","MK Display ","MK Display "}, |
{"Parameter \x1d","Parameter \x1d","Parameter \x1d","Parameters \x1d"}, |
{"Debug Data ","Debug Data ","Debug Data ","Debug Data "}, |
{"GPS Info ","GPS Info ","GPS Info ","GPS Info "}, |
{"Follow Me ","Follow Me ","Follow Me ","Follow Me "}, |
{"PKT Tools \x1d","PKT Tools \x1d","PKT Tools \x1d","PKT Tools \x1d"}, |
}; |
*/ |
// MartinR: geändert |
{ |
{"Joystick ","Joystick ","Joystick ","Joystick "}, |
{"OSD ","OSD ","OSD ","OSD "}, |
{"3D Lage ","3D angeles ","3D location ","3D locatie "}, |
{"GPS Info ","GPS Info ","GPS Info ","GPS Info "}, |
{"Follow Me ","Follow Me ","Follow Me ","Follow Me "}, |
{"MK Display ","MK Display ","MK Display ","MK Display "}, |
{"Parameter \x1d","Parameter \x1d","Parameter \x1d","Parameter \x1d"}, |
{"Debug Data ","Debug Data ","Debug Data ","Debug Data "}, |
{"PKT Tools \x1d","PKT Tools \x1d","PKT Tools \x1d","PKT Tools \x1d"}, |
}; |
#define ITEMS_FC 5 |
prog_char param_menuitems_fc[ITEMS_FC][NUM_LANG][18]= // zeilen,zeichen+1 |
{ |
{"Joystick ","Joystick ","Joystick ","Joystick "}, |
//{"OSD ","OSD ","OSD ","OSD "}, |
//{"3D Lage ","3D angeles ","3D location ","3D locatie "}, |
//{"GPS Info ","GPS Info ","GPS Info ","GPS Info "}, |
//{"Follow Me ","Follow Me ","Follow Me ","Follow Me "}, |
{"MK Display ","MK Display ","MK Display ","MK Display "}, |
{"Parameter \x1d","Parameter \x1d","Parameter \x1d","Parameter \x1d"}, |
{"Debug Data ","Debug Data ","Debug Data ","Debug Data "}, |
{"PKT Tools \x1d","PKT Tools \x1d","PKT Tools \x1d","PKT Tools \x1d"}, |
}; |
//#define ITEMS_NO 6 // MartinR: so war es |
#define ITEMS_NO 2 // MartinR: |
prog_char param_menuitems_no[ITEMS_NO][NUM_LANG][18]= // zeilen,zeichen+1 |
/* // MartinR: so war es |
{ |
{"BL-Ctrl. Tester ","BL-Ctrl. Tester ","BL-Ctrl. Tester ","BL-Ctrl. Tester "}, |
{"Servo Tester ","Servo Tester ","Servo Tester ","Servo Tester "}, |
{"PC BT > Kopter ","PC BT > Kopter ","PC BT > Kopter ","PC BT > Kopter "}, |
{"PC USB > Kopter ","PC USB > Kopter ","PC USB > Kopter ","PC USB > Kopter "}, |
{"PKT Setup \x1d","PKT Setup \x1d","PKT Setup \x1d","PKT Setup \x1d"}, |
{"PKT Version ","PKT Version ","PKT Version ","PKT Versie "}, |
}; |
*/ |
// MartinR: geändert |
{ |
{"Joystick ","Joystick ","Joystick ","Joystick "}, |
//{"OSD ","OSD ","OSD ","OSD "}, |
//{"3D Lage ","3D angeles ","3D location ","3D locatie "}, |
//{"GPS Info ","GPS Info ","GPS Info ","GPS Info "}, |
//{"Follow Me ","Follow Me ","Follow Me ","Follow Me "}, |
//{"MK Display ","MK Display ","MK Display ","MK Display "}, |
//{"Parameter \x1d","Parameter \x1d","Parameter \x1d","Parameter \x1d"}, |
//{"Debug Data ","Debug Data ","Debug Data ","Debug Data "}, |
{"PKT Tools \x1d","PKT Tools \x1d","PKT Tools \x1d","PKT Tools \x1d"}, |
}; |
#define ITEMS_CR 9 |
prog_char param_copyright[ITEMS_CR][22]= // zeilen,zeichen+1 |
{ |
" ", |
"(C) GNU GPL License ", |
" NO WARRANTY ", |
" ", |
"2008 Thomas Kaiser ", |
"2009-2010 Peter Mack ", |
"2010 Sebastian Boehm ", |
"2012 Chr. Brandtner &", |
" Harald Bongartz ", |
}; |
//-------------------------------------------------------------- |
// print cursor |
void menu_set_cursor (uint8_t before, uint8_t line, uint8_t pos) |
{ |
lcd_printp_at (pos, before, PSTR(" "), 0); |
lcd_printp_at (pos, line, PSTR("\x1d"), 0); |
} |
// F�r Seting-Auswahl ------------------------------------------ |
// |
uint8_t menu_choose (uint8_t min, uint8_t max, uint8_t pos, uint8_t start) |
{ |
uint8_t line = start; |
uint8_t before = start; |
uint8_t k; |
menu_set_cursor (line, line, pos); |
do |
{ |
if (get_key_press (1 << KEY_PLUS) | get_key_long_rpt_sp ((1 << KEY_PLUS), 1)) |
{ |
if (line < max) |
line ++; |
else |
line = max; |
// line = min; // Wenn wiederholen soll |
} |
if (get_key_press (1 << KEY_MINUS) | get_key_long_rpt_sp ((1 << KEY_MINUS), 1)) |
{ |
if (line > min) |
line --; |
else |
line = min; |
// line = max; // Wenn wiederholen soll |
} |
if (line != before) |
{ |
menu_set_cursor (before, line, pos); |
before = line; |
} |
} |
while (!(k = get_key_press ((1 << KEY_ENTER) | (1 << KEY_ESC)))); |
if (k & (1 << KEY_ESC)) |
line = 255; |
return line; |
} |
// F�r Setup und Parameter ------------------------------------------ |
// |
uint8_t menu_choose2 (uint8_t min, uint8_t max, uint8_t start, uint8_t return_at_start, uint8_t return_at_end) |
{ |
uint8_t pos = 1; |
uint8_t line = start; |
uint8_t before = start; |
uint8_t k; |
menu_set_cursor (line, line, pos); |
do |
{ |
if (get_key_press (1 << KEY_PLUS) | get_key_long_rpt_sp ((1 << KEY_PLUS), 1)) |
{ |
if (line < max) |
line ++; |
else |
{ |
if(return_at_end == 1) |
return 254; |
else |
line = max; |
// line = min; // Wenn wiederholen soll |
} |
} |
if (get_key_press (1 << KEY_MINUS) | get_key_long_rpt_sp ((1 << KEY_MINUS), 1)) |
{ |
if (line > min) |
line --; |
else |
{ |
if(return_at_start == 1) |
return 253; |
else |
line = min; |
// line = max; // Wenn wiederholen soll |
} |
} |
if (line != before) |
{ |
menu_set_cursor (before, line, pos); |
before = line; |
} |
} |
while (!(k = get_key_press ((1 << KEY_ENTER) | (1 << KEY_ESC)))); |
if (k & (1 << KEY_ESC)) |
line = 255; |
return line; |
} |
// F�r das Hauptmenue ------------------------------------------ |
// |
uint8_t menu_choose3 (uint8_t min, uint8_t max,uint8_t start, uint8_t return_at_start, uint8_t return_at_end) |
{ |
uint8_t pos = 1; |
uint8_t line = start; |
uint8_t before = start; |
menu_set_cursor (line, line, pos); |
do |
{ |
if (get_key_press (1 << KEY_PLUS) | get_key_long_rpt_sp ((1 << KEY_PLUS), 1)) |
{ |
if (line < max) |
line ++; |
else |
{ |
if(return_at_end == 1) |
return 254; |
else |
line = max; |
// line = min; // Wenn wiederholen soll |
} |
} |
if (get_key_press (1 << KEY_MINUS) | get_key_long_rpt_sp ((1 << KEY_MINUS), 1)) |
{ |
if (line > min) |
line --; |
else |
{ |
if(return_at_start == 1) |
return 253; |
else |
line = min; |
// line = max; // Wenn wiederholen soll |
} |
} |
if (get_key_long (1 << KEY_ESC)) |
{ |
get_key_press(KEY_ALL); |
return 250; |
} |
if(get_key_long (1 << KEY_ENTER)) |
{ |
get_key_press(KEY_ALL); |
return 251; |
} |
if (get_key_short (1 << KEY_ESC)) |
{ |
get_key_press(KEY_ALL); |
return 252; |
} |
if (line != before) |
{ |
menu_set_cursor (before, line, pos); |
before = line; |
} |
#ifdef HWVERSION3_9 |
#ifndef ohne_Lipo // MartinR |
show_Lipo(); |
#endif |
#endif |
} |
while (!(get_key_short (1 << KEY_ENTER))); |
return line; |
} |
//-------------------------------------------------------------- |
// |
void main_menu (void) |
{ |
uint8_t ii = 0; |
uint8_t offset = 0; |
uint8_t size = 0; |
uint8_t Save_hardware = 0; |
uint8_t dmode = 0; |
uint8_t target_pos = 1; |
uint8_t val =0; |
Save_hardware = hardware; |
#ifdef HWVERSION3_9 |
#ifndef ohne_Lipo // MartinR |
// MartinR: von HAL_HW3_9.c hierher verschoben |
ADC_Init(); // ADC für Lipomessung |
#endif |
#endif |
get_key_press(KEY_ALL); |
while(1) |
{ |
if (Debug==1) |
hardware = NC; |
if (Debug==0) |
hardware = Save_hardware; |
if(hardware == NO) |
size = ITEMS_NO ; |
if(hardware == FC) |
size = ITEMS_FC ; |
if(hardware == NC) |
size = ITEMS_FC ; |
lcd_cls (); |
lcd_printp_at (0, 0, PSTR("PKT-Tool FC "), 2); |
lcd_printp_at (12, 0, PSTR(FC_Version), 2); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_1), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE1), 0); |
// lcd_printp_at (12, 7, PSTR("Aus "), 0); |
lcd_puts_at(12, 7, strGet(OFF), 0); |
while(2) |
{ |
ii = 0; |
if(offset > 0) |
lcd_printp_at(1,1, PSTR("\x12"), 0); |
for(ii = 0;ii < 6 ; ii++) |
{ |
if((ii+offset) < size) |
{ |
if(hardware == NC) |
lcd_printp_at(3,ii+1,param_menuitems_nc[ii+offset][DisplayLanguage], 0); |
else if(hardware == FC) |
lcd_printp_at(3,ii+1,param_menuitems_fc[ii+offset][DisplayLanguage], 0); |
else |
lcd_printp_at(3,ii+1,param_menuitems_no[ii+offset][DisplayLanguage], 0); |
} |
if((ii == 5)&&(ii+offset < (size-1))) |
lcd_printp_at(1,6, PSTR("\x13"), 0); |
#ifdef HWVERSION3_9 |
#ifndef ohne_Lipo // MartinR |
show_Lipo(); |
#endif |
#endif |
} |
if(dmode == 0) |
{ |
if(offset == 0) |
{ |
if(size > 6) |
val = menu_choose3 (1, 5, target_pos,0,1); //menu_choose3 (min, max, start, return_at_start, return_at_end) |
else |
val = menu_choose3 (1, size, target_pos,0,0); |
} |
else |
val = menu_choose3 (2, 5, target_pos,1,1); |
} |
if(dmode == 1) |
{ |
if(offset+7 > size) |
val = menu_choose3 (2, 6, target_pos,1,0); |
else |
val = menu_choose3 (2, 5, target_pos,1,1); |
} |
if(val == 254) |
{ |
offset++; |
dmode = 1; |
target_pos = 5; |
} |
else if(val == 253) |
{ |
offset--; |
dmode = 0; |
target_pos = 2; |
} |
#if defined HWVERSION3_9 |
else if(val == 252) |
{ |
lcd_cls(); |
// lcd_printp_at (0, 2, PSTR(" PKT ausschalten?"),0); |
lcd_puts_at(0, 2, strGet(SHUTDOWN), 0); |
// lcd_printp_at (12, 7, PSTR("Nein Ja"),0); |
lcd_puts_at(12, 7, strGet(YESNO), 0); |
while(1) |
{ |
if (get_key_press (1 << KEY_ENTER)) |
clr_V_On(); // Spannung abschalten |
if (get_key_short (1 << KEY_ESC)) |
{ |
get_key_press(KEY_ALL); |
lcd_cls(); |
lcd_printp_at (0, 0, PSTR("PKT-Tool FC "), 2); |
lcd_printp_at (12, 0,PSTR(FC_Version), 2); |
// show_Lipo(); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_1), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE1), 0); |
// lcd_printp_at (12, 7, PSTR("Aus "), 0); |
lcd_puts_at(12, 7, strGet(OFF), 0); |
break; |
} |
} |
} |
else if(val == 251) |
{ |
PC_Fast_Connect(); |
return; |
} |
#endif |
else if(val == 250) |
{ |
// Test_HB(); |
Test_Language(); |
return; |
} |
else |
break; |
} |
target_pos = val; |
// MartinR: !!!!!!!!!!!!!!!!!!! |
#ifdef HWVERSION3_9 |
if(hardware == NC) |
{ |
if((val+offset) == 1 ) |
joystick(); |
if((val+offset) == 2 ) |
osd(OSD_Mode); |
if((val+offset) == 3 ) |
osd(THREE_D_Mode); |
if((val+offset) == 4 ) |
gps(); |
if((val+offset) == 5 ) |
FollowMe(); |
if((val+offset) == 6 ) |
display_data(); |
if((val+offset) == 7 ) |
edit_parameter(); |
if((val+offset) == 8 ) |
//TODO: Debug an FC087 anpassen |
display_debug(); |
if((val+offset) == 9 ) |
PKT_Tools(); |
} |
#endif |
if(hardware == FC) |
{ |
if((val+offset) == 1 ) |
joystick(); |
if((val+offset) == 2 ) |
display_data(); |
if((val+offset) == 3 ) |
edit_parameter(); |
if((val+offset) == 4 ) |
//TODO: Debug an FC087 anpassen |
display_debug(); |
if((val+offset) == 5 ) |
PKT_Tools(); |
} |
if(hardware == NO) |
{ |
/* // MartinR: so war es |
if((val+offset) == 1 ) |
motor_test(FC_Mode); |
if((val+offset) == 2 ) |
servo_test(); |
#ifdef HWVERSION3_9 |
if (U02SV2 == 0) |
{ |
if((val+offset) == 3 ) |
{ |
if (BTIsSlave==true) |
{ |
Port_BT2Wi(); |
} |
else |
{ |
bt_set_mode(BLUETOOTH_SLAVE); |
Port_BT2Wi(); |
} |
} |
if((val+offset) == 4 ) |
Port_USB2Wi(); |
} |
else if (U02SV2 == 1) |
{ |
if((val+offset) == 3 ) |
{ |
if (BTIsSlave==true) |
{ |
Port_BT2FC(); |
} |
else |
{ |
bt_set_mode(BLUETOOTH_SLAVE); |
Port_BT2FC(); |
} |
} |
if((val+offset) == 4 ) |
Port_USB2FC(); |
} |
#else |
if((val+offset) == 3 ) |
Show_Error_HW(); |
if((val+offset) == 4 ) |
Show_Error_HW(); |
#endif |
if((val+offset) == 5 ) |
PKT_Setup(); |
if((val+offset) == 6 ) |
Show_Version(); |
*/ |
if((val+offset) == 1 ) |
joystick(); |
if((val+offset) == 2 ) |
PKT_Tools(); |
} |
} |
} |
//-------------------------------------------------------------- |
// |
void Update_PKT (void) |
{ |
lcd_cls(); |
lcd_printp_at (0, 0, PSTR(" PKT Update "),2); |
// lcd_printp_at (0, 1, PSTR("Connect PC to PKT-USB"),0); |
lcd_puts_at(0, 1, strGet(UPDATE1), 0); |
// lcd_printp_at (0, 2, PSTR("Press 'Start' on PKT "),0); |
lcd_puts_at(0, 2, strGet(UPDATE2), 0); |
lcd_printp_at (0, 3, PSTR("Start avrdude.exe "),0); |
lcd_printp_at (0, 4, PSTR("-pm1284p -cavr109 "),0); |
lcd_printp_at (0, 5, PSTR("-Pcom? -b115200 "),0); |
lcd_printp_at (0, 6, PSTR("-Uflash:w:FILE.hex:a "),0); |
// avrdude -pm1284p -cavr109 -P/dev/ttyUSB1 -b115200 -V -Uflash:w:Dateiname.hex:a |
// lcd_printp_at (0, 7, PSTR(" Ende Start"), 0); |
lcd_puts_at(0, 7, strGet(ENDSTART), 0); |
do |
{ |
if (get_key_press (1 << KEY_ESC)) |
{ |
get_key_press(KEY_ALL); |
return; |
} |
} |
while (!(get_key_press (1 << KEY_ENTER))); |
{ |
// start bootloader with Reset, Hold KEY_ENTER*/ |
wdt_enable( WDTO_250MS ); |
while (1) |
{;} |
} |
} |
//-------------------------------------------------------------- |
// |
void Show_Error_HW (void) |
{ |
lcd_cls (); |
lcd_printp_at (0, 2, PSTR(" Mit dieser Hardware"), 0); |
lcd_printp_at (0, 3, PSTR(" nicht möglich!"), 0); |
lcd_printp_at (12, 7, PSTR("Ende"), 0); |
while (!get_key_press (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
return; |
} |
//-------------------------------------------------------------- |
// |
void Show_Version (void) |
{ |
uint8_t ii = 0; |
uint8_t size = ITEMS_CR; |
uint8_t page = 0; |
lcd_cls (); |
lcd_printp_at (0, 0, PSTR("PKT Tool V. "), 2); |
lcd_printp_at (13,0, PSTR(PKTSWVersion),2); |
// lcdPuts(Msg(MSG_VERSION1)); |
// lcd_printp_at (0, 0, Msg(MSG_VERSION1), 2); |
// lcd_printp_at (0, 1, PSTR("für FC ver "), 2); |
// lcd_printp_at (12,1, PSTR(FC_Version),2); |
lcd_printp_at (0, 1, PSTR(" "), 2); //um die ganze Zeile schwarz zu füllen. |
lcd_puts_at(0, 1, strGet(START_MSG2), 2); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_1), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE1), 0); |
while(1) |
{ |
for(ii = 0;ii < 3 ; ii++) |
if((ii + page) < size) |
lcd_printp_at(0,ii + 3,param_copyright[ii + page], 0); |
if (page == 0) |
{ |
lcd_printp_at (0, 2, PSTR(" "), 0); |
lcd_printp_at (0, 6, PSTR("\x13"), 0); |
} |
if (page > 0 && page < (size - 3)) |
{ |
lcd_printp_at (0, 2, PSTR("\x12"), 0); |
lcd_printp_at (0, 6, PSTR("\x13"), 0); |
} |
if (page >= (size - 3)) |
{ |
lcd_printp_at (0, 2, PSTR("\x12"), 0); |
lcd_printp_at (0, 6, PSTR(" "), 0); |
} |
if (get_key_press (1 << KEY_PLUS)) |
if (page < size - 3) |
page++; |
if (get_key_press (1 << KEY_MINUS)) |
if (page > 0) |
page--; |
if (get_key_press (1 << KEY_ESC) || get_key_press (1 << KEY_ENTER)) |
{ |
get_key_press(KEY_ALL); |
return; |
} |
} |
} |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/menu.h |
---|
0,0 → 1,55 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#ifndef MENU_H |
#define MENU_H |
#define CURSOR_COL 1 // column where the menu cursor is displayed |
#define MENU_LINE 1 // starting line of menu |
#define MENU_COL 3 // column where the menu starts |
#define OSD_Mode 1 // OSD Anzeige als OSD |
#define THREE_D_Mode 3 // OSD Anzeige in 3D Position |
void main_menu (void); |
void Show_Version (void); |
void Show_Error_HW (void); |
void Update_PKT (void); |
void PC_Fast_Connect (void); |
uint8_t menu_choose (uint8_t min, uint8_t max, uint8_t pos, uint8_t start); |
uint8_t menu_choose2 (uint8_t min, uint8_t max, uint8_t start, uint8_t return_at_start, uint8_t return_at_end); |
uint8_t menu_choose3 (uint8_t min, uint8_t max, uint8_t start, uint8_t return_at_start, uint8_t return_at_end); |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/messages.c |
---|
0,0 → 1,2101 |
/**************************************************************************************** |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Languagesupport: * |
* http://www.netrino.com/Embedded-Systems/How-To/Firmware-Internationalization * |
* Nigel Jones * |
****************************************************************************************/ |
#include "cpu.h" |
#include <avr/io.h> |
#include <inttypes.h> |
#include <stdlib.h> |
#include <avr/pgmspace.h> |
#include <avr/wdt.h> |
#include <util/delay.h> |
#include "main.h" |
#include "lcd.h" |
#include "timer.h" |
#include "eeprom.h" |
#include "messages.h" |
typedef enum |
{ |
GERMAN, |
ENGLISH, |
FRENCH, |
NETHERLAND, |
LAST_LANGUAGE, |
} LANGUAGE; |
typedef struct |
{ |
/* |
* Maximum length |
*/ |
int const len; |
/* |
* Array of pointers to language-specific string |
*/ |
char const * const text[LAST_LANGUAGE]; |
} STRING; |
//-------------------------------------------------------------------------------------------------------------------- |
// Typdefinitionen für alle verwendeten Strings, LAST_STR muss am Ende stehen bleiben |
//typedef enum |
//TESTSTRING, KEYLINE1, KEYLINE2, KEYLINE3, KEYLINE4, KEYLINE5, BOOT1, BOOT2, BOOT_WI1, BOOT_WI2, BOOT_SV, START_MSG1, START_MSG2, GNU_GPL, ATMEGA644, |
//ATMEGA644P, ATMEGA1284P, HW12, HW12W, HW13, HW13W, HW39, START_LASTPOS, START_LASTPOS1, START_LASTPOS2, START_LASTPOS3, START_LASTPOSDEL, |
//START_SEARCHFC, ENDE, OK, FEHLER, AKTIV, START_FCNOTFOUND, START_FCFOUND, START_FCFOUND1, START_FCFOUND2, START_FCFOUND3, START_VERSIONCHECK, |
//START_VERSIONCHECK1, START_VERSIONCHECK2, START_VERSIONCHECK3, START_VERSIONCHECK4, START_VERSIONCHECK5, ON, OFF, ESC, SHUTDOWN, YESNO, |
//UPDATE1, UPDATE2, ENDSTART, TOOLS1, CONNECT1, CONNECT2, CONNECT4, CONNECT5, CONNECT6, CONNECT7, CONNECT8, CONNECT9, CONNECT10, CONNECT11, CONNECT12, |
//CONNECT13, CONNECT14, CONNECT15, CONNECT16, CONNECT17, CONNECT18, CONNECT19, CONNECT20, CONNECT21, CONNECT22, CONNECT23, CONNECT24, CONNECT25, |
//CONNECT26, CONNECT27, CONNECT28, CONNECT29, CONNECT30, CONNECT31, KABEL, SLAVE, NORMAL, REVERSE, ENDOK, EEPROM1, EEPROM2, DEUTSCH, ENGLISCH, FRANCE, |
//NETHERL, DISPLAY1, DISPLAY2, DISPLAY3, DISPLAY4, DISPLAY5, DISPLAY6, DISPLAY7, DISPLAY8, DISPLAY9, DEBUGPKT, WITXRX, WINETWG, WINETWM, WITIMEOUT, |
//WIUART, WI2321, WI2322, WI2323, YES, NOO, BT1, BT2, BT3, BT4, LIPO1, LIPO2, LIPO3, LIPO4, LIPO5, LIPO6, LOWBAT, OSD_3D_V, OSD_3D_H, OSD_3D_L, |
//OSD_3D_R, OSD_3D_NICK, OSD_3D_ROLL, OSD_3D_COMPASS, OSD_ERROR, OSD_POS1, OSD_POS2, PARA_SETTINGS, PARA_CHANGE, PARA_AKTIVI, PARA_AKTIV, |
//PARA_SAVESETT, PARA_SETTSAVED, PARA_COPY, PARA_FROMTO, PARA_ENDE, PARA_COPYQ, PARA_COPYACTIV, PARA_CHANGESETT, PARA_SELECT, PARA_SEITE, |
//PARA_SELSETT, GPS1, GPS2, GPS3, STATS_ITEM_0, STATS_ITEM_1, STATS_ITEM_2, STATS_ITEM_3, STATS_ITEM_4, STATS_ITEM_5, STATS_ITEM_6, STATS_ITEM_7, |
//STATS_ITEM_8, ONLY_NC, NO_SETTINGS, OSD_ALTI_0, OSD_ALTI_1, OSD_VARIO_0, OSD_VARIO_1, OSD_CARE_FREE_0, OSD_CARE_FREE_1, OSD_LED0, OSD_LED1, OSD_LED2, |
//OSD_NAVI_MODE_0, OSD_NAVI_MODE_1, OSD_NAVI_MODE_2, OSD_FLAGS_0, OSD_FLAGS_1, OSD_FLAGS_2, OSD_FLAGS_3, OSD_FLAGS_4, OSD_FLAGS_5, OSD_FLAGS_6, |
//OSD_Screen, OSD_Invert_Out, OSD_LED_Form, OSD_Send_OSD, LAST_STR, |
static const STRING strings[LAST_STR] = |
{ |
{ /*TESTSTRING*/ |
21, |
{ |
"Not format hardisk C?", /* German */ |
"Not format hardisk C?", /* English*/ |
"Not format hardisk C?", /* French */ |
"Not format hardisk C?", /* Dutch */ |
} |
}, |
{ /*KEYLINE1*/ |
21, |
{ |
" \x1a \x1b Ende OK", /* German */ |
" \x1a \x1b end OK", /* English*/ |
" \x1a \x1b fin OK", /* French */ |
" \x1a \x1b Einde OK", /* Dutch */ |
} |
}, |
{ /*KEYLINE2*/ |
21, |
{ |
" \x18 \x19 Ende OK", /* German */ |
" \x18 \x19 end OK", /* English*/ |
" \x18 \x19 fin OK", /* French */ |
" \x18 \x19 Einde OK", /* Dutch */ |
} |
}, |
{ /*KEYLINE3*/ |
21, |
{ |
" \x18 \x19 Ende ", /* German */ |
" \x18 \x19 end ", /* English*/ |
" \x18 \x19 fin ", /* French */ |
" \x18 \x19 Einde", /* Dutch */ |
} |
}, |
{ /*KEYLINE4*/ |
21, |
{ |
"Ende OK", /* German */ |
"end OK", /* English*/ |
"fin OK", /* French */ |
"Einde OK", /* Dutch */ |
} |
}, |
{ /*KEYLINE5*/ |
21, |
{ |
"Ende Info", /* German */ |
"end info", /* English*/ |
"fin info", /* French */ |
"Eind Info", /* Dutch */ |
} |
}, |
{ /*BOOT1*/ |
21, |
{ |
"Taste 1 Sekunde", /* German */ |
"Keep the button", /* English*/ |
"Maintenez le bouton", /* French */ |
"Houd de knop ", /* Dutch */ |
} |
}, |
{ /* BOOT2*/ |
21, |
{ |
"lang festhalten.", /* German */ |
"pressed for 1 second", /* English*/ |
"enfoncee pend. 1 sec", /* French */ |
"1 seconde ingedrukt.", /* Dutch */ |
} |
}, |
{ /*BOOT_WI1*/ |
21, |
{ |
"Verbindung zum MK ist", /* German */ |
"Connection to MK is", /* English*/ |
"Connexion à MK est", /* French */ |
"Verbinding met MK is", /* Dutch */ |
} |
}, |
{ /* BOOT_WI2*/ |
21, |
{ |
"auf Wi232 eingestellt", /* German */ |
"set to Wi232", /* English*/ |
"mis a Wi232", /* French */ |
"ingesteld op Wi232", /* Dutch */ |
} |
}, |
{ /*BOOTSV1*/ |
21, |
{ |
"auf Kabel eingestellt", /* German */ |
"set to kabel on SV2", /* English*/ |
"mis a kabel sur SV2", /* French */ |
"via kabelverbinding", /* Dutch */ |
} |
}, |
{ /*START_MSG1 */ |
21, |
{ |
"Portables Kopter Tool", /* German */ |
"Portable Kopter Tool ", /* English*/ |
"Portable Kopter Tool ", /* French */ |
"Portable Kopter Tool ", /* Dutch */ |
} |
}, |
{ /*START_MSG2 */ |
21, |
{ |
"für FC Ver "FC_Version, /* German */ |
"for FC Ver "FC_Version, /* English*/ |
"pour FC Ver "FC_Version, /* French */ |
"Voor FC Ver "FC_Version, /* Dutch */ |
} |
}, |
{ /* GNU/GPL */ |
21, |
{ |
"GNU GPL License", /* German */ |
"GNU GPL License", /* English*/ |
"GNU GPL License", /* French */ |
"GNU GPL License", /* Dutch */ |
} |
}, |
{ /**/ |
21, |
{ |
"ATmega 644", /* German */ |
"ATmega 644", /* English*/ |
"ATmega 644", /* French */ |
"ATmega 644", /* Dutch */ |
} |
}, |
{ /**/ |
21, |
{ |
"ATmega 644P", /* German */ |
"ATmega 644P", /* English*/ |
"ATmega 644P", /* French */ |
"ATmega 644P", /* Dutch */ |
} |
}, |
{ /**/ |
21, |
{ |
"ATmega 1284P", /* German */ |
"ATmega 1284P", /* English*/ |
"ATmega 1284P", /* French */ |
"ATmega 1284P", /* Dutch */ |
} |
}, |
{ /**/ |
21, |
{ |
"Hardware 1.2", /* German */ |
"Hardware 1.2", /* English*/ |
"Hardware 1.2", /* French */ |
"Hardware 1.2", /* Dutch */ |
} |
}, |
{ /**/ |
21, |
{ |
"Hardware 1.2W", /* German */ |
"Hardware 1.2W", /* English*/ |
"Hardware 1.2W", /* French */ |
"Hardware 1.2W", /* Dutch */ |
} |
}, |
{ /**/ |
21, |
{ |
"Hardware 1.3", /* German */ |
"Hardware 1.3", /* English*/ |
"Hardware 1.3", /* French */ |
"Hardware 1.3", /* Dutch */ |
} |
}, |
{ /**/ |
21, |
{ |
"Hardware 1.3W", /* German */ |
"Hardware 1.3W", /* English*/ |
"Hardware 1.3W", /* French */ |
"Hardware 1.3W", /* Dutch */ |
} |
}, |
{ /**/ |
21, |
{ |
"Hardware 3.9", /* German */ |
"Hardware 3.9", /* English*/ |
"Hardware 3.9", /* French */ |
"Hardware 3.9", /* Dutch */ |
} |
}, |
{ /*START_LASTPOS*/ |
21, |
{ |
" Letzte Position ", /* German */ |
" last position ", /* English*/ |
" derniere position ", /* French */ |
" Laatste positie ", /* Dutch */ |
} |
}, |
{ /*START_LASTPOS1*/ |
21, |
{ |
" Breitengr Längengr ", /* German */ |
" latitude longitude ", /* English*/ |
" latitude longitude ", /* French */ |
"breedtegr. lengtegr. ", /* Dutch */ |
} |
}, |
{ /*START_LASTPOS2*/ |
21, |
{ |
"löschen weiter", /* German */ |
"delete exit ", /* English*/ |
"supprimer plus ", /* French */ |
"wissen verder", /* Dutch */ |
} |
}, |
{ /*START_LASTPOS3*/ |
21, |
{ |
" Google Eingabe ", /* German */ |
" Google Input ", /* English*/ |
" Google Input ", /* French */ |
" Google Input ", /* Dutch */ |
} |
}, |
{ /*START_LASTPOSDEL*/ |
21, |
{ |
" gelöscht ", /* German */ |
" deleted ", /* English*/ |
" supprime ", /* French */ |
" gewist ", /* Dutch */ |
} |
}, |
{ /*START_SEARCHFC*/ |
21, |
{ |
"Suche FC... ", /* German */ |
"searching FC...", /* English*/ |
"cherchant FC...", /* French */ |
"zoek FC... ", /* Dutch */ |
} |
}, |
{ /*ENDE*/ |
21, |
{ |
"Ende ", /* German */ |
"end ", /* English*/ |
"fin ", /* French */ |
"Einde", /* Dutch */ |
} |
}, |
{ /*OK*/ |
21, |
{ |
"Ok ", /* German */ |
"ok ", /* English*/ |
"ok ", /* French */ |
"gued", /* Dutch */ |
} |
}, |
{ /*FEHLER*/ |
21, |
{ |
"Fehler ", /* German */ |
"error ", /* English*/ |
"d'erreur", /* French */ |
"fout ", /* Dutch */ |
} |
}, |
{ /*AKTIV*/ |
21, |
{ |
"aktiv ", /* German */ |
"activ ", /* English*/ |
"actifs", /* French */ |
"actief", /* Dutch */ |
} |
}, |
{ /*START_FCNOTFOUND*/ |
21, |
{ |
"FC nicht gefunden!", /* German */ |
"FC not found!", /* English*/ |
"FC pas trouve!", /* French */ |
"FC niet gevonden!", /* Dutch */ |
} |
}, |
{ /*START_FCFOUND*/ |
21, |
{ |
"PKT-Tool GNU GPL", /* German */ |
"PKT-Tool GNU GPL", /* English*/ |
"PKT-Tool GNU GPL", /* French */ |
"PKT-Tool GNU GPL", /* Dutch */ |
} |
}, |
{ /*START_FCFOUND1*/ |
21, |
{ |
"gefunden: ", /* German */ |
"found: ", /* English*/ |
"trouvés: ", /* French */ |
"gevonden: ", /* Dutch */ |
} |
}, |
{ /*START_FCFOUND2*/ |
21, |
{ |
"Flight-Ctrl", /* German */ |
"Flight-Ctrl", /* English*/ |
"Flight-Ctrl", /* French */ |
"Flight-Ctrl", /* Dutch */ |
} |
}, |
{ /*START_FCFOUND3*/ |
21, |
{ |
"Navi-Ctrl", /* German */ |
"Navi-Ctrl", /* English*/ |
"Navi-Ctrl", /* French */ |
"Navi-Ctrl", /* Dutch */ |
} |
}, |
{ /*START_VERSIONCHECK*/ |
21, |
{ |
"Version: ", /* German */ |
"Version: ", /* English*/ |
"Version: ", /* French */ |
"Versie: ", /* Dutch */ |
} |
}, |
{ /*START_VERSIONCHECK1*/ |
21, |
{ |
"erwartet", /* German */ |
"expected", /* English*/ |
"attendus", /* French */ |
"verwacht", /* Dutch */ |
} |
}, |
{ /*START_VERSIONCHECK2*/ |
21, |
{ |
"gefunden", /* German */ |
"found ", /* English*/ |
"trouves ", /* French */ |
"gevonden", /* Dutch */ |
} |
}, |
{ /*START_VERSIONCHECK3*/ |
21, |
{ |
"PKT-Tool nur mit", /* German */ |
"PKT-Tool only with", /* English*/ |
"PKT uniquement avec", /* French */ |
"PKT-Tool alleen met", /* Dutch */ |
} |
}, |
{ /*START_VERSIONCHECK4*/ |
21, |
{ |
"FC Software ", /* German */ |
"FC Software ", /* English*/ |
"FC Software ", /* French */ |
"FC Software ", /* Dutch */ |
} |
}, |
{ /*START_VERSIONCHECK5*/ |
21, |
{ |
"kompatibel", /* German */ |
"compatible", /* English*/ |
"compatibles", /* French */ |
"compatibel", /* Dutch */ |
} |
}, |
{ /*ON*/ |
21, |
{ |
"Ein ", /* German */ |
"On ", /* English*/ |
"Un ", /* French */ |
"Aan ", /* Dutch */ |
} |
}, |
{ /*AUS*/ |
21, |
{ |
"Aus ", /* German */ |
"Off ", /* English*/ |
"Du ", /* French */ |
"Uit ", /* Dutch */ |
} |
}, |
{ /*ESC*/ |
21, |
{ |
"ESC", /* German */ |
"ESC", /* English*/ |
"ESC", /* French */ |
"ESC", /* Dutch */ |
} |
}, |
{ /*SHUTDOWN*/ |
21, |
{ |
" PKT ausschalten?", /* German */ |
" shutdown PKT ?", /* English*/ |
" desactiver PKT ?", /* French */ |
" PKT uitschakelen ?", /* Dutch */ |
} |
}, |
{ /*YES NO*/ |
21, |
{ |
"Nein Ja", /* German */ |
"no yes", /* English*/ |
"non oui", /* French */ |
"Nee Ja", /* Dutch */ |
} |
}, |
{ /*UPDATE1*/ |
21, |
{ |
"Verbinde PC mit PKT ", /* German */ |
"Connect PC to PKT-USB", /* English*/ |
"associer PC a PKT-USB", /* French */ |
"Verbind PC met PKT ", /* Dutch */ |
} |
}, |
{ /*UPDATE2*/ |
21, |
{ |
"Drücke 'Start' am PKT", /* German */ |
"Press 'Start' on PKT ", /* English*/ |
"presse 'lancer' a PKT", /* French */ |
"Druk 'Start' op PKT ", /* Dutch */ |
} |
}, |
{ /*ENDSTART*/ |
21, |
{ |
" Ende Start", /* German */ |
" End Start", /* English*/ |
" fin lancer", /* French */ |
" Einde Start", /* Dutch */ |
} |
}, |
{ /*TOOLS1*/ |
21, |
{ |
" PC-Quick-Verbindung ", /* German */ |
" PC-Quick-Connection ", /* English*/ |
" PC-connexion rapide ", /* French */ |
" Snelle PC-verbinding", /* Dutch */ |
} |
}, |
{ /*CONNECT1,*/ |
21, |
{ |
"Verbinde das PKT mit", /* German */ |
"Connect PKT with MK", /* English*/ |
"connectez PKT a MK", /* French */ |
"Verbind PKT ", /* Dutch */ |
} |
}, |
{ /*CONNECT2*/ |
21, |
{ |
"dem MK über:", /* German */ |
" over :", /* English*/ |
" a propos :", /* French */ |
" met :", /* Dutch */ |
} |
}, |
{ /*CONNECT4,*/ |
21, |
{ |
"dem MK über: Kabel, ", /* German */ |
"over: Kabel", /* English*/ |
"a propos: Cable", /* French */ |
"MK via: kabel ", /* Dutch */ |
} |
}, |
{ /*CONNECT5*/ |
21, |
{ |
"es ist kein Wi.232", /* German */ |
"there is no Wi.232", /* English*/ |
"l n'ya pas de ", /* French */ |
"er is geen wi.232 ", /* Dutch */ |
} |
}, |
{ /*CONNECT6*/ |
21, |
{ |
"Modul eingebaut.", /* German */ |
"built in.", /* English*/ |
"module integre Wi232", /* French */ |
"module ingebouwd.", /* Dutch */ |
} |
}, |
{ /*CONNECT7,*/ |
21, |
{ |
"Wenn doch, dann bitte", /* German */ |
"if yes, then first", /* English*/ |
"Si vous le faites", /* French */ |
"zo ja, dan aub eerst", /* Dutch */ |
} |
}, |
{ /*CONNECT8*/ |
21, |
{ |
"das Modul zuerst im ", /* German */ |
"activate modul in", /* English*/ |
"activer le module", /* French */ |
"de module aktiveren", /* Dutch */ |
} |
}, |
{ /*CONNECT9*/ |
21, |
{ |
"Setupmenü aktivieren.", /* German */ |
"Setupmenu", /* English*/ |
"dans menu de config.", /* French */ |
"in het Setupmenu.", /* Dutch */ |
} |
}, |
{ /*CONNECT10*/ |
21, |
{ |
"Sie müssen das PKT", /* German */ |
"You have to", /* English*/ |
"Vous devez", /* French */ |
"U moet de PKT", /* Dutch */ |
} |
}, |
{ /*CONNECT11*/ |
21, |
{ |
"jetzt neu starten!", /* German */ |
"restart PKT", /* English*/ |
"redemarrer PKT", /* French */ |
"nu opnieuw starten!", /* Dutch */ |
} |
}, |
{ /*CONNECT12*/ |
21, |
{ |
"Es ist kein BTM-222", /* German */ |
"There is no BTM-222", /* English*/ |
"l n'ya pas de ", /* French */ |
"Er is geen BTM-222", /* Dutch */ |
} |
}, |
{ /*CONNECT13*/ |
21, |
{ |
"Modul eingebaut", /* German */ |
"Modul built in", /* English*/ |
"module integre BTM222", /* French */ |
"module ingebouwd.", /* Dutch */ |
} |
}, |
{ /*CONNECT14*/ |
21, |
{ |
" MK-USB Funktion ", /* German */ |
" MK-USB Function ", /* English*/ |
" MK-USB fonction ", /* French */ |
" MK-USB Functie ", /* Dutch */ |
} |
}, |
{ /*CONNECT15*/ |
21, |
{ |
" BT --> Kabel an FC ", /* German */ |
" BT --> Kabel to FC ", /* English*/ |
" BT --> Cable a FC ", /* French */ |
" BT --> kabel naar FC", /* Dutch */ |
} |
}, |
{ /*CONNECT16*/ |
21, |
{ |
"PC mit BT verb.", /* German */ |
"connect PC with BT", /* English*/ |
"associer PC a BT", /* French */ |
"PC via BT verbonden.", /* Dutch */ |
} |
}, |
{ /*CONNECT17*/ |
21, |
{ |
"PKT-Kabel an FC", /* German */ |
"PKT-Kabel to FC", /* English*/ |
"PKT-Cable a FC", /* French */ |
"PKT-kabel naar FC", /* Dutch */ |
} |
}, |
{ /*CONNECT18*/ |
21, |
{ |
" BT --> Wi.232 ", /* German */ |
" BT --> Wi.232 ", /* English*/ |
" BT --> Wi.232 ", /* French */ |
" BT --> Wi.232 ", /* Dutch */ |
} |
}, |
{ /*CONNECT19*/ |
21, |
{ |
"Wi.232 an FC ", /* German */ |
"Wi.232 to FC ", /* English*/ |
"Wi.232 a FC ", /* French */ |
"Wi.232 naar FC ", /* Dutch */ |
} |
}, |
{ /*CONNECT20*/ |
21, |
{ |
" USB --> Kabel an FC ", /* German */ |
" USB --> cable to FC ", /* English*/ |
" USB --> cable a FC ", /* French */ |
"USB --> kabel naar FC", /* Dutch */ |
} |
}, |
{ /*CONNECT21*/ |
21, |
{ |
"PC mit USB verbinden ", /* German */ |
"connect PC with USB ", /* English*/ |
"associer PC a USB ", /* French */ |
"Verbind PC met USB ", /* Dutch */ |
} |
}, |
{ /*CONNECT22*/ |
21, |
{ |
" USB --> Wi.232 ", /* German */ |
" USB --> Wi.232 ", /* English*/ |
" USB --> Wi.232 ", /* French */ |
" USB --> Wi.232 ", /* Dutch */ |
} |
}, |
{ /*CONNECT23*/ |
21, |
{ |
"MK-Tool starten", /* German */ |
"start MK-Tool", /* English*/ |
"demarrage MK-Tool", /* French */ |
"start MK-Tool", /* Dutch */ |
} |
}, |
{ /*CONNECT24*/ |
21, |
{ |
" Wi.232 Konfigurieren", /* German */ |
" Wi.232 Configuration", /* English*/ |
" Wi.232 configurer ", /* French */ |
" Wi.232 Configuratie ", /* Dutch */ |
} |
}, |
{ /*CONNECT25*/ |
21, |
{ |
"Programm starten. ", /* German */ |
"start program ", /* English*/ |
"Démarrer le programme", /* French */ |
"start programma.", /* Dutch */ |
} |
}, |
{ /*CONNECT26*/ |
21, |
{ |
"BTM-222 Konfigurieren", /* German */ |
"BTM-222 configuration", /* English*/ |
"BTM-222 de configura.", /* French */ |
"BTM-222 configuratie", /* Dutch */ |
} |
}, |
{ /*CONNECT27*/ |
21, |
{ |
"FC > MK-USB > BTM-222", /* German */ |
"FC > MK-USB > BTM-222", /* English*/ |
"FC > MK-USB > BTM-222", /* French */ |
"FC > MK-USB > BTM-222", /* Dutch */ |
} |
}, |
{ /*CONNECT28*/ |
21, |
{ |
"MK-USB an PC anschl. ", /* German */ |
"connect PC to MK-USB ", /* English*/ |
"associer PC a MK-USB ", /* French */ |
"Verbind PC met MK-USB", /* Dutch */ |
} |
}, |
{ /*CONNECT29*/ |
21, |
{ |
"Zwischen MK-USB und ", /* German */ |
"connect crossed cable", /* English*/ |
"la connexion entre PC", /* French */ |
"Tussen MK-USB en PKT ", /* Dutch */ |
} |
}, |
{ /*CONNECT30*/ |
21, |
{ |
"PKT ein gekreuztes ", /* German */ |
"between MK-USB and ", /* English*/ |
"et FC un cable croise", /* French */ |
"een gekruiste kabel ", /* Dutch */ |
} |
}, |
{ /*CONNECT31*/ |
21, |
{ |
"Kabel anschliessen. ", /* German */ |
"PKT SV2", /* English*/ |
" ", /* French */ |
"aansluiten.", /* Dutch */ |
} |
}, |
{ /*Kabel*/ |
21, |
{ |
"Kabel", /* German */ |
"cable", /* English*/ |
"cable", /* French */ |
"Kabel", /* Dutch */ |
} |
}, |
{ /*SLAVE*/ |
21, |
{ |
"Slave ", /* German */ |
"Slave ", /* English*/ |
"esclaves", /* French */ |
"Slave ", /* Dutch */ |
} |
}, |
{ /*NORMAL*/ |
21, |
{ |
"Normal ", /* German */ |
"Normal ", /* English*/ |
"normal ", /* French */ |
"Norm. ", /* Dutch */ |
} |
}, |
{ /*Reverse*/ |
21, |
{ |
"Reverse", /* German */ |
"inverse", /* English*/ |
"inverse", /* French */ |
"geinver", /* Dutch */ |
} |
}, |
{ /*ENDOK*/ |
21, |
{ |
"Ende OK", /* German */ |
"End OK", /* English*/ |
"Fin OK", /* French */ |
"Eind OK", /* Dutch */ |
} |
}, |
{ /*EEPROM1*/ |
21, |
{ |
" EEProm wirklich", /* German */ |
" Realy delete", /* English*/ |
" eeprom supprimer?", /* French */ |
" Eeprom werkelijk", /* Dutch */ |
} |
}, |
{ /*EEPROM2*/ |
21, |
{ |
" löschen?", /* German */ |
" EEprom?", /* English*/ |
" ", /* French */ |
" wissen?", /* Dutch */ |
} |
}, |
{ /*DEUTSCH*/ |
21, |
{ |
"deutsch ", /* German */ |
"german ", /* English*/ |
"allemande ", /* French */ |
"duits ", /* Dutch */ |
} |
}, |
{ /*ENGLISCH*/ |
21, |
{ |
"englisch ", /* German */ |
"english ", /* English*/ |
"anglaise ", /* French */ |
"engels ", /* Dutch */ |
} |
}, |
{ /*FRANCE*/ |
21, |
{ |
"französisch", /* German */ |
"french " , /* English*/ |
"française ", /* French */ |
"frans ", /* Dutch */ |
} |
}, |
{ /*NETHERL*/ |
21, |
{ |
"holländisch", /* German */ |
"dutch ", /* English*/ |
"hollandaise", /* French */ |
"nederlands ", /* Dutch */ |
} |
}, |
{ /*DISPLAY1*/ |
21, |
{ |
"Anzeige Einstellungen", /* German */ |
" Display Setup ", /* English*/ |
" d'affichage config. ", /* French */ |
"Display instellingen ", /* Dutch */ |
} |
}, |
{ /*DISPLAY2*/ |
21, |
{ |
"Infos bei Start:", /* German */ |
"Info at startup ", /* English*/ |
"Inf.au demarrage", /* French */ |
"Info bij opstart", /* Dutch */ |
} |
}, |
{ /*DISPLAY3*/ |
21, |
{ |
"Sprache : ", /* German */ |
"Language: ", /* English*/ |
"la langue: ", /* French */ |
"Taal: ", /* Dutch */ |
} |
}, |
{ /*DISPLAY4*/ |
21, |
{ |
"Licht aus nach:", /* German */ |
"Light off after:", /* English*/ |
"Exti.feux p.les:", /* French */ |
"Licht uit na: ", /* Dutch */ |
} |
}, |
{ /*DISPLAY5*/ |
21, |
{ |
"LCD Helligk.:", /* German */ |
" Brightness :", /* English*/ |
" luminosite :", /* French */ |
" intensiteit:", /* Dutch */ |
} |
}, |
{ /*DISPLAY6*/ |
21, |
{ |
"LCD Kontrast:", /* German */ |
"LCD contrast:", /* English*/ |
"LCD contrast:", /* French */ |
"LCD contrast:", /* Dutch */ |
} |
}, |
{ /*DISPLAY7*/ |
21, |
{ |
"LCD Norm/Inv: ", /* German */ |
"LCD Norm/Inv: ", /* English*/ |
"LCD Norm/Inv: ", /* French */ |
"LCD Norm/Inv: ", /* Dutch */ |
} |
}, |
{ /*DISPLAY8*/ |
21, |
{ |
"LCD Orient.: ", /* German */ |
"LCD Orient.: ", /* English*/ |
"LCD Orient.: ", /* French */ |
"LCD Orient.: ", /* Dutch */ |
} |
}, |
{ /*DISPLAY9*/ |
21, |
{ |
"RC Fehlerpiep :", /* German */ |
"RC Errorbeep :", /* English*/ |
"RC Errorbeep :", /* French */ |
"RC Errorbeep :", /* Dutch */ |
} |
}, |
{ /*DEBUGPKT*/ |
21, |
{ |
"Debug PKT", /* German */ |
"Debug PKT", /* English*/ |
"Debug PKT", /* French */ |
"Debug PKT", /* Dutch */ |
} |
}, |
{ /*WITXRX*/ |
21, |
{ |
"Wi TX/RX Chan:", /* German */ |
"Wi TX/RX Chan:", /* English*/ |
"Wi TX/RX Chan:", /* French */ |
"Wi TX/RX Chan:", /* Dutch */ |
} |
}, |
{ /*WINETG*/ |
21, |
{ |
"Wi NetW. Grp.:", /* German */ |
"Wi NetW. Grp.:", /* English*/ |
"Wi NetW. Grp.:", /* French */ |
"Wi NetW. Grp.:", /* Dutch */ |
} |
}, |
{ /*WINETM*/ |
21, |
{ |
"Wi NetW. Mode:", /* German */ |
"Wi NetW. Mode:", /* English*/ |
"Wi NetW. Mode:", /* French */ |
"Wi NetW. Mode:", /* Dutch */ |
} |
}, |
{ /*WITIMEOUT*/ |
21, |
{ |
"Wi TX Timeout:", /* German */ |
"Wi TX Timeout:", /* English*/ |
"Wi TX Timeout:", /* French */ |
"Wi TX Timeout:", /* Dutch */ |
} |
}, |
{ /*WIUART*/ |
21, |
{ |
"Wi UART MTU :", /* German */ |
"Wi UART MTU :", /* English*/ |
"Wi UART MTU :", /* French */ |
"Wi UART MTU :", /* Dutch */ |
} |
}, |
{ /*WI2321*/ |
21, |
{ |
"Wi.232 eingebaut:", /* German */ |
"Wi.232 built in :", /* English*/ |
"Wi.232 integre :", /* French */ |
"Wi.232 ingebouwd:", /* Dutch */ |
} |
}, |
{ /*WI2322*/ |
21, |
{ |
"Ist ein Wi.232-Modul ", /* German */ |
"Is Wi232 modul", /* English*/ |
"est un module ", /* French */ |
"Is er een Wi.232", /* Dutch */ |
} |
}, |
{ /*WI2323*/ |
21, |
{ |
"eingebaut?", /* German */ |
"built in?", /* English*/ |
"integre Wi232?", /* French */ |
"module ingebouwd?", /* Dutch */ |
} |
}, |
{ /*YES*/ |
21, |
{ |
"Ja ", /* German */ |
"yes ", /* English*/ |
"oui ", /* French */ |
"Ja ", /* Dutch */ |
} |
}, |
{ /*NO*/ |
21, |
{ |
"Nein", /* German */ |
"no ", /* English*/ |
"non ", /* French */ |
"Nee ", /* Dutch */ |
} |
}, |
{ /*BT1*/ |
21, |
{ |
" BTM222 Einstellungen", /* German */ |
" BTM-222 settings ", /* English*/ |
" BTM-222 settings ", /* French */ |
" BTM-222 settings ", /* Dutch */ |
} |
}, |
{ /*BT2*/ |
21, |
{ |
"Ist ein BTM-222-Modul", /* German */ |
"Is BTM-222 Modul", /* English*/ |
"est un module ", /* French */ |
"Is er een BTM-222", /* Dutch */ |
} |
}, |
{ /*BT3*/ |
21, |
{ |
"eingebaut?", /* German */ |
"built in?", /* English*/ |
"integre BTM222?", /* French */ |
"module ingebouwd?", /* Dutch */ |
} |
}, |
{ /*BT4*/ |
21, |
{ |
"BTM222 eingebaut:", /* German */ |
"BTM222 built in :", /* English*/ |
"BTM222 integre :", /* French */ |
"BTM222 ingebouwd:", /* Dutch */ |
} |
}, |
{ /*LIPO1*/ |
21, |
{ |
" PKT Akku Einstellung", /* German */ |
" PKT Accu Setup ", /* English*/ |
" PKT Accu Setup ", /* French */ |
" PKT Accu Setup ", /* Dutch */ |
} |
}, |
{ /*LIPO2*/ |
21, |
{ |
"PKT Akkutyp: ", /* German */ |
"PKT Accutyp: ", /* English*/ |
"PKT Accutyp: ", /* French */ |
"PKT Accutype: ", /* Dutch */ |
} |
}, |
{ /*LIPO3*/ |
21, |
{ |
"Akku U Offset: ", /* German */ |
"Accu U Offset: ", /* English*/ |
"Accu U Offset: ", /* French */ |
"Accu U Offset: ", /* Dutch */ |
} |
}, |
{ /*LIPO4*/ |
21, |
{ |
"PKT Akkutyp: ", /* German */ |
"PKT Accutyp: ", /* English*/ |
"PKT Accutyp: ", /* French */ |
"PKT Accutype: ", /* Dutch */ |
} |
}, |
{ /*LIPO5*/ |
21, |
{ |
"Offset verstellen bis", /* German */ |
"adjust offset until", /* English*/ |
"Decalage l'ajuster ", /* French */ |
"Offset afregelen tot", /* Dutch */ |
} |
}, |
{ /*LIPO6*/ |
21, |
{ |
"die Spannung passt", /* German */ |
"voltage fits", /* English*/ |
"a la tension", /* French */ |
"de spanning juist is.", /* Dutch */ |
} |
}, |
{ /*LOWBAT*/ |
21, |
{ |
"LowBat Warn V:", /* German */ |
"LowBat Warn V:", /* English*/ |
"LowBat Warn V:", /* French */ |
"LowBat alarm :", /* Dutch */ |
} |
}, |
{ /*OSD_3D_V, vorne*/ |
21, |
{ |
"V", /* German */ |
"F", /* English*/ |
"L", /* French */ |
"F", /* Dutch */ |
} |
}, |
{ /*OSD_3D_H, hinten*/ |
21, |
{ |
"H", /* German */ |
"B", /* English*/ |
"D", /* French */ |
"A", /* Dutch */ |
} |
}, |
{ /*OSD_3D_L, links*/ |
21, |
{ |
"L", /* German */ |
"L", /* English*/ |
"G", /* French */ |
"L", /* Dutch */ |
} |
}, |
{ /*OSD_3D_R, rechts*/ |
21, |
{ |
"R", /* German */ |
"R", /* English*/ |
"D", /* French */ |
"R", /* Dutch */ |
} |
}, |
{ /*OSD_3D_NICK, Ni*/ |
21, |
{ |
"Ni", /* German */ |
"Ni", /* English*/ |
"Ta", /* French */ |
"Ni", /* Dutch */ |
} |
}, |
{ /*OSD_3D_ROLL, Ro*/ |
21, |
{ |
"Ro", /* German */ |
"Ro", /* English*/ |
"Ro", /* French */ |
"Ro", /* Dutch */ |
} |
}, |
{ /*OSD_3D_COMPASS, Ko*/ |
21, |
{ |
"Ko", /* German */ |
"Co", /* English*/ |
"Co", /* French */ |
"Co", /* Dutch */ |
} |
}, |
{ /*OSD_ERROR*/ |
21, |
{ |
"FEHLER: Datenverlust ", /* German */ |
"ERROR: Data lost", /* English*/ |
"perte de donnees", /* French */ |
"verbinding verbroken ", /* Dutch */ |
} |
}, |
{ /*OSD_POS1*/ |
21, |
{ |
"Letzte bekannte", /* German */ |
"Last known ", /* English*/ |
"Derniere position", /* French */ |
"Laatst bekende", /* Dutch */ |
} |
}, |
{ /*OSD_POS2*/ |
21, |
{ |
"Position ", /* German */ |
"position ", /* English*/ |
"position ", /* French */ |
"positie ", /* Dutch */ |
} |
}, |
{ /*PARA_SETTINGS*/ |
21, |
{ |
" Einstellungen ", /* German */ |
" Setting ", /* English*/ |
" Parametres ", /* French */ |
" Instellingen ", /* Dutch */ |
} |
}, |
{ /*PARA_CHANGE*/ |
21, |
{ |
"ändern", /* German */ |
"change", /* English*/ |
"le changement", /* French */ |
"verandering", /* Dutch */ |
} |
}, |
{ /*PARA_AKTIVI*/ |
21, |
{ |
"aktivieren", /* German */ |
"activate", /* English*/ |
"activer", /* French */ |
"activeren", /* Dutch */ |
} |
}, |
{ /*PARA_AKTIV*/ |
21, |
{ |
"aktiviert", /* German */ |
"activated", /* English*/ |
"activee", /* French */ |
"geactiveerd", /* Dutch */ |
} |
}, |
{ /*PARA_SAVESETT*/ |
21, |
{ |
" Setting x speichern?", /* German */ |
" store setting?", /* English*/ |
" Reglage magasin?", /* French */ |
" instell.op te slaan?", /* Dutch */ |
} |
}, |
{ /*PARA_SETTSAVED*/ |
21, |
{ |
"Gespeichert und", /* German */ |
"stored and", /* English*/ |
"stockes et", /* French */ |
"opgeslagen en", /* Dutch */ |
} |
}, |
{ /*PARA_COPY*/ |
21, |
{ |
"Kopiere Setting", /* German */ |
"copy settings", /* English*/ |
"parametres de copie", /* French */ |
"kopieer instel.", /* Dutch */ |
} |
}, |
{ /*PARA_FROMTO*/ |
21, |
{ |
" von x nach y", /* German */ |
" from x to y", /* English*/ |
" des x apres y", /* French */ |
" van x na y", /* Dutch */ |
} |
}, |
{ /*PARA_ENDE*/ |
21, |
{ |
"von nach Ende OK", /* German */ |
"from to end OK", /* English*/ |
"des apres fin OK", /* French */ |
"van na einde OK", /* Dutch */ |
} |
}, |
{ /*PARA_COPYQ*/ |
21, |
{ |
"Wirklich kopieren?", /* German */ |
"really copy?", /* English*/ |
"vraiment copie?", /* French */ |
"echt kopie?", /* Dutch */ |
} |
}, |
{ /*PARA_COPYACTIV*/ |
21, |
{ |
"Kopiert und aktiviert", /* German */ |
"copied and activated ", /* English*/ |
"copies et actifs", /* French */ |
"Kopieën en actief", /* Dutch */ |
} |
}, |
{ /*PARA_CHANGESETT*/ |
21, |
{ |
"Ändere Einstellungen ", /* German */ |
" change settings ", /* English*/ |
"modifier les reglages", /* French */ |
"instellingen wijzigen", /* Dutch */ |
} |
}, |
{ /*PARA_SELECT*/ |
21, |
{ |
" Wähle Parameter ", /* German */ |
" select parameters ", /* English*/ |
"selectionnez Paramet.", /* French */ |
"Selecteer Parameters ", /* Dutch */ |
} |
}, |
{ /*PARA_SEITE*/ |
21, |
{ |
" Wähle Seite ", /* German */ |
" select page ", /* English*/ |
"Selectionnez la page ", /* French */ |
" Selecteer pagina ", /* Dutch */ |
} |
}, |
{ /*PARA_SELSETT*/ |
21, |
{ |
" Wähle Setting: ", /* German */ |
" select setting ", /* English*/ |
"Selectionnez setting ", /* French */ |
" Selecteer setting ", /* Dutch */ |
} |
}, |
{ /*GPS1*/ |
21, |
{ |
" GPS Einstellungen ", /* German */ |
" GPS settings ", /* English*/ |
" GPS settings ", /* French */ |
" GPS settings ", /* Dutch */ |
} |
}, |
{ /*GPS2*/ |
21, |
{ |
"gewähltes GPS Gerät ", /* German */ |
"selected GPS device ", /* English*/ |
"selected GPS device ", /* French */ |
"selected GPS device ", /* Dutch */ |
} |
}, |
{ /*GPS3*/ |
21, |
{ |
"GPS Empf.einschalten?", /* German */ |
"receive GPS on? ", /* English*/ |
"receive GPS on? ", /* French */ |
"receive GPS on? ", /* Dutch */ |
} |
}, |
{ /*STATS_ITEM_0*/ |
21, |
{ |
"max Höhe :", /* German */ |
"max Altitude :", /* English*/ |
"max Altitude :", /* French */ |
"max Altitude :", /* Dutch */ |
} |
}, |
{ /*STATS_ITEM_1*/ |
21, |
{ |
"max Geschw. :", /* German */ |
"max Speed :", /* English*/ |
"max Speed :", /* French */ |
"max Speed :", /* Dutch */ |
} |
}, |
{ /*STATS_ITEM_2*/ |
21, |
{ |
"max Entfern. :", /* German */ |
"max Distance :", /* English*/ |
"max Distance :", /* French */ |
"max Distance :", /* Dutch */ |
} |
}, |
{ /*STATS_ITEM_3*/ |
21, |
{ |
"min Spannung :", /* German */ |
"min Voltage :", /* English*/ |
"min Voltage :", /* French */ |
"min Voltage :", /* Dutch */ |
} |
}, |
{ /*STATS_ITEM_4*/ |
21, |
{ |
"max Zeit :", /* German */ |
"max Time :", /* English*/ |
"max Time :", /* French */ |
"max Time :", /* Dutch */ |
} |
}, |
{ /*STATS_ITEM_5*/ |
21, |
{ |
"max Strom :", /* German */ |
"max Current :", /* English*/ |
"max Current :", /* French */ |
"max Current :", /* Dutch */ |
} |
}, |
{ /*STATS_ITEM_6*/ |
21, |
{ |
"Ent.Kapazität:", /* German */ |
"UsedCapacity :", /* English*/ |
"UsedCapacity :", /* French */ |
"UsedCapacity :", /* Dutch */ |
} |
}, |
{ /*STATS_ITEM_7*/ |
21, |
{ |
"Long. :", /* German */ |
"Long. :", /* English*/ |
"Long. :", /* French */ |
"Long. :", /* Dutch */ |
} |
}, |
{ /*STATS_ITEM_8*/ |
21, |
{ |
"Lat. :", /* German */ |
"Lat. :", /* English*/ |
"Lat. :", /* French */ |
"Lat. :", /* Dutch */ |
} |
}, |
{ /*ONLY_NC*/ |
21, |
{ |
"Nur mit NC ! ", /* German */ |
"Only with NC !", /* English*/ |
"Only with NC !", /* French */ |
"Only with NC !", /* Dutch */ |
} |
}, |
{ /*NO_SETTINGS*/ |
21, |
{ |
"Keine Setings !! " , /* German */ |
"No settings read!!" , /* English*/ |
"Non Parametrès!! " , /* French */ |
"No settings read!!" , /* Dutch */ |
} |
}, |
{ /*OSD_ALTI_0*/ |
21, |
{ |
"Höhe aus ", /* German */ |
"Alti. off ", /* English*/ |
"Alti.finir", /* French */ |
"Alti. off ", /* Dutch */ |
} |
}, |
{ /*OSD_ALTI_1*/ |
21, |
{ |
"Höhe begr.", /* German */ |
"Alti.Limit", /* English*/ |
"Alti.Limit", /* French */ |
"Alti.Limit", /* Dutch */ |
} |
}, |
{ /*OSD_VARIO_0*/ |
21, |
{ |
"Vario aus ", /* German */ |
"Vario off ", /* English*/ |
"Vario fini", /* French */ |
"Vario off ", /* Dutch */ |
} |
}, |
{ /*OSD_VARIO_1*/ |
21, |
{ |
"Vario Höhe", /* German */ |
"Vario Alt.", /* English*/ |
"Vario Alt.", /* French */ |
"Vario Alt.", /* Dutch */ |
} |
}, |
{ /*OSD_CARE_FREE_0*/ |
21, |
{ |
" ", /* German */ |
" ", /* English*/ |
" ", /* French */ |
" ", /* Dutch */ |
} |
}, |
{ /*OSD_CARE_FREE_1*/ |
21, |
{ |
"Care Free", /* German */ |
"Care Free", /* English*/ |
"Care Free", /* French */ |
"Care Free", /* Dutch */ |
} |
}, |
{ /*OSD_LED0*/ |
21, |
{ |
" ", /* German */ |
" ", /* English*/ |
" ", /* French */ |
" ", /* Dutch */ |
} |
}, |
{ /*OSD_LED1*/ |
21, |
{ |
"LED1", /* German */ |
"LED1", /* English*/ |
"LED1", /* French */ |
"LED1", /* Dutch */ |
} |
}, |
{ /*OSD_LED2*/ |
21, |
{ |
"LED2", /* German */ |
"LED2", /* English*/ |
"LED2", /* French */ |
"LED2", /* Dutch */ |
} |
}, |
{ /*OSD_NAVI_MODE_0*/ |
21, |
{ |
"Navi aus ", /* German */ |
"Navi off ", /* English*/ |
"Navi off ", /* French */ |
"Navi off ", /* Dutch */ |
} |
}, |
{ /*OSD_NAVI_MODE_1*/ |
21, |
{ |
"Pos. halten", /* German */ |
"Pos. Hold ", /* English*/ |
"Pos. durer ", /* French */ |
"Pos. Hold ", /* Dutch */ |
} |
}, |
{ /*OSD_NAVI_MODE_2*/ |
21, |
{ |
"Coming Home", /* German */ |
"Coming Home", /* English*/ |
"Retoure ", /* French */ |
"Coming Home", /* Dutch */ |
} |
}, |
{ /*OSD_FLAGS_0*/ |
21, |
{ |
" ", /* German */ |
" ", /* English*/ |
" ", /* French */ |
" ", /* Dutch */ |
} |
}, |
{ /*OSD_FLAGS_1*/ |
21, |
{ |
"Justieren", /* German */ |
"Calibrate", /* English*/ |
"Calibrage", /* French */ |
"Calibrate", /* Dutch */ |
} |
}, |
{ /*OSD_FLAGS_2*/ |
21, |
{ |
"Start ", /* German */ |
"Start ", /* English*/ |
"Depart ", /* French */ |
"Start ", /* Dutch */ |
} |
}, |
{ /*OSD_FLAGS_3*/ |
21, |
{ |
"Betrieb ", /* German */ |
"Run ", /* English*/ |
"Marcher ", /* French */ |
"Run ", /* Dutch */ |
} |
}, |
{ /*OSD_FLAGS_4*/ |
21, |
{ |
"Fliegen ", /* German */ |
"Fly ", /* English*/ |
"Foler ", /* French */ |
"Fly ", /* Dutch */ |
} |
}, |
{ /*OSD_FLAGS_5*/ |
21, |
{ |
"Landung ", /* German */ |
"Landing ", /* English*/ |
"Apponter ", /* French */ |
"Landing ", /* Dutch */ |
} |
}, |
{ /*OSD_FLAGS_6*/ |
21, |
{ |
"Akku leer", /* German */ |
"Low Bat. ", /* English*/ |
"Low Bat. ", /* French */ |
"Low Bat ", /* Dutch */ |
} |
}, |
{ /*OSD_Screen*/ |
21, |
{ |
" OSD Anzeige Setup ", /* German */ |
" OSD screen setup ", /* English*/ |
" OSD screen setup ", /* French */ |
" OSD screen setup ", /* Dutch */ |
} |
}, |
{ /*OSD_Invert_Out*/ |
21, |
{ |
"Out1/2 negiert :", /* German */ |
"Out1/2 inverted:", /* English*/ |
"Out1/2 inverted:", /* French */ |
"Out1/2 inverted:", /* Dutch */ |
} |
}, |
{ /*OSD_LED_Form*/ |
21, |
{ |
"Out1/2 Format:", /* German */ |
"Out1/2 format:", /* English*/ |
"Out1/2 format:", /* French */ |
"Out1/2 format:", /* Dutch */ |
} |
}, |
{ /*OSD_Send_OSD*/ |
21, |
{ |
// "Navidata an SV2:", /* German */ |
// "Navidata to SV2:", /* English*/ |
// "Navidata to SV2:", /* French */ |
// "Navidata to SV2:", /* Dutch */ |
"not implemented:", /* German */ |
"not implemented:", /* English*/ |
"not implemented:", /* French */ |
"not implemented:", /* Dutch */ |
} |
}, |
{ /*OSD_Fallspeed*/ |
21, |
{ |
"m. Sinkrate m/s:", /* German */ |
"m.fallspeed m/s:", /* English*/ |
"m.fallspeed m/s:", /* French */ |
"m.fallspeed m/s:", /* Dutch */ |
} |
}, |
{ /*OSD_VARIOBEEP*/ |
21, |
{ |
"Variometer Beep:", /* German */ |
"variometer beep:", /* English*/ |
"variometer beep:", /* French */ |
"variometer beep:", /* Dutch */ |
} |
}, |
{ /*OSD_HOMEMKVIEW*/ |
21, |
{ |
"Homesicht von MK:", /* German */ |
"homeview from MK:", /* English*/ |
"homeview from MK:", /* French */ |
"homeview from MK:", /* Dutch */ |
} |
}, |
{ /*OSD_MAHWARNING*/ |
21, |
{ |
"mAh Warnung > :", /* German */ |
"mAh warning > :", /* English*/ |
"mAh warning > :", /* French */ |
"mAh warning > :", /* Dutch */ |
} |
}, |
{ /*OSD_SCREENMODE*/ |
21, |
{ |
"OSD Anzeigevar:", /* German */ |
"OSD screenmode:", /* English*/ |
"OSD screenmode:", /* French */ |
"OSD screenmode:", /* Dutch */ |
} |
}, |
{ /*OSD_LIPOBAR*/ |
21, |
{ |
"MK Volt Balken:", /* German */ |
"MK volt bargraph:", /* English*/ |
"MK volt bargraph:", /* French */ |
"MK volt bargraph:", /* Dutch */ |
} |
}, |
{ /*PKT_BAUDRATE*/ |
21, |
{ |
"Baud Wi232/BT:", /* German */ |
"Baud Wi232/BT:", /* English*/ |
"Baud Wi232/BT:", /* French */ |
"Baud Wi232/BT:", /* Dutch */ |
} |
}, |
{ /*FOLLOWME_0*/ |
21, |
{ |
" Follow Me Setup ", /* German */ |
" Follow Me Setup ", /* English*/ |
" Follow Me Setup ", /* French */ |
" Follow Me Setup ", /* Dutch */ |
} |
}, |
{ /*FOLLOWME_1*/ |
21, |
{ |
" Refresh :", /* German */ |
" Refresh :", /* English*/ |
" Refresh :", /* French */ |
" Refresh :", /* Dutch */ |
} |
}, |
{ /*FOLLOWME_2*/ |
21, |
{ |
"Geschwindigkeit:", /* German */ |
" Speed :", /* English*/ |
" Speed :", /* French */ |
" Speed :", /* Dutch */ |
} |
}, |
{ /*FOLLOWME_3*/ |
21, |
{ |
"Toleranz Radius:", /* German */ |
"Toleranz Radius:", /* English*/ |
"Toleranz Radius:", /* French */ |
"Toleranz Radius:", /* Dutch */ |
} |
} |
}; |
char const * strGet(int str_no) |
{ |
return strings[str_no].text[DisplayLanguage]; |
} |
void Test_Language (void) // bleibt für Tests |
{ |
lcd_cls(); |
lcd_puts_at(12, 7, strGet(YESNO),0); |
do |
{ |
lcd_puts_at(0, 2, strGet(TESTSTRING), 0); |
} |
while(!get_key_press (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
return; |
} |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/messages.h |
---|
0,0 → 1,56 |
/**************************************************************************************** |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Languagesupport: * |
* http://www.netrino.com/Embedded-Systems/How-To/Firmware-Internationalization * |
* Nigel Jones * |
****************************************************************************************/ |
#ifndef MESSAGES_H |
#define MESSAGES_H |
//--------------------------------------------------------------------------------------------------------------------- |
// Typdefinitionen für alle verwendeten Strings, LAST_STR muss am Ende stehen bleiben |
typedef enum |
{ |
TESTSTRING, KEYLINE1, KEYLINE2, KEYLINE3, KEYLINE4, KEYLINE5, BOOT1, BOOT2, BOOT_WI1, BOOT_WI2, BOOT_SV, START_MSG1, START_MSG2, GNU_GPL, ATMEGA644, |
ATMEGA644P, ATMEGA1284P, HW12, HW12W, HW13, HW13W, HW39, START_LASTPOS, START_LASTPOS1, START_LASTPOS2, START_LASTPOS3, START_LASTPOSDEL, |
START_SEARCHFC, ENDE, OK, FEHLER, AKTIV, START_FCNOTFOUND, START_FCFOUND, START_FCFOUND1, START_FCFOUND2, START_FCFOUND3, START_VERSIONCHECK, |
START_VERSIONCHECK1, START_VERSIONCHECK2, START_VERSIONCHECK3, START_VERSIONCHECK4, START_VERSIONCHECK5, ON, OFF, ESC, SHUTDOWN, YESNO, |
UPDATE1, UPDATE2, ENDSTART, TOOLS1, CONNECT1, CONNECT2, CONNECT4, CONNECT5, CONNECT6, CONNECT7, CONNECT8, CONNECT9, CONNECT10, CONNECT11, CONNECT12, |
CONNECT13, CONNECT14, CONNECT15, CONNECT16, CONNECT17, CONNECT18, CONNECT19, CONNECT20, CONNECT21, CONNECT22, CONNECT23, CONNECT24, CONNECT25, |
CONNECT26, CONNECT27, CONNECT28, CONNECT29, CONNECT30, CONNECT31, KABEL, SLAVE, NORMAL, REVERSE, ENDOK, EEPROM1, EEPROM2, DEUTSCH, ENGLISCH, FRANCE, |
NETHERL, DISPLAY1, DISPLAY2, DISPLAY3, DISPLAY4, DISPLAY5, DISPLAY6, DISPLAY7, DISPLAY8, DISPLAY9, DEBUGPKT, WITXRX, WINETWG, WINETWM, WITIMEOUT, |
WIUART, WI2321, WI2322, WI2323, YES, NOO, BT1, BT2, BT3, BT4, LIPO1, LIPO2, LIPO3, LIPO4, LIPO5, LIPO6, LOWBAT, OSD_3D_V, OSD_3D_H, OSD_3D_L, |
OSD_3D_R, OSD_3D_NICK, OSD_3D_ROLL, OSD_3D_COMPASS, OSD_ERROR, OSD_POS1, OSD_POS2, PARA_SETTINGS, PARA_CHANGE, PARA_AKTIVI, PARA_AKTIV, |
PARA_SAVESETT, PARA_SETTSAVED, PARA_COPY, PARA_FROMTO, PARA_ENDE, PARA_COPYQ, PARA_COPYACTIV, PARA_CHANGESETT, PARA_SELECT, PARA_SEITE, |
PARA_SELSETT, GPS1, GPS2, GPS3, STATS_ITEM_0, STATS_ITEM_1, STATS_ITEM_2, STATS_ITEM_3, STATS_ITEM_4, STATS_ITEM_5, STATS_ITEM_6, STATS_ITEM_7, |
STATS_ITEM_8, ONLY_NC, NO_SETTINGS, OSD_ALTI_0, OSD_ALTI_1, OSD_VARIO_0, OSD_VARIO_1, OSD_CARE_FREE_0, OSD_CARE_FREE_1, OSD_LED0, OSD_LED1, OSD_LED2, |
OSD_NAVI_MODE_0, OSD_NAVI_MODE_1, OSD_NAVI_MODE_2, OSD_FLAGS_0, OSD_FLAGS_1, OSD_FLAGS_2, OSD_FLAGS_3, OSD_FLAGS_4, OSD_FLAGS_5, OSD_FLAGS_6, |
OSD_Screen, OSD_Invert_Out, OSD_LED_Form, OSD_Send_OSD,FALLSPEED,OSD_VARIOBEEP,OSD_HOMEMKVIEW,OSD_MAHWARNING,OSD_SCREENMODE,OSD_LIPOBAR,PKT_BAUDRATE, |
FOLLOWME_0, FOLLOWME_1,FOLLOWME_2,FOLLOWME_3, LAST_STR, |
} STR; |
#define NUM_LANG 4 // German, English, French, Netherlands |
char const * strGet(int str_no); |
void Test_Language (void); // bleibt für Tests |
#endif /* _MESSAGES_H_ */ |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/mk-data-structs.h |
---|
0,0 → 1,449 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#ifndef _MK_DATA_STRUCTS_H |
#define _MK_DATA_STRUCTS_H |
// FC Version 0.88M |
#define EEProm_Version 91 // FC EEProm Revision / Struktur FC 0.87 |
#define FC_Version "0.88m" //Softwareversion der FC |
#define u8 uint8_t |
#define s8 int8_t |
#define u16 uint16_t |
#define s16 int16_t |
#define u32 uint32_t |
#define s32 int32_t |
#define NUMBER_OF_DEBUG_DATAS 32 |
#define ANALOG_NAME_LENGTH 16 |
// Version of supported serial protocol |
#define MIN_VERSION 7 |
#define MAX_VERSION 10 |
// Setting index |
#define SETTING_1 1 |
#define SETTING_2 2 |
#define SETTING_3 3 |
#define SETTING_4 4 |
#define SETTING_5 5 |
#define SETTING_CURRENT 0xff |
// MikroKopter defines |
// taken from |
// FC Software eeprom.h |
// |
//GlobalConfig3 aus FC/eeprom.h |
#define CFG3_NO_SDCARD_NO_START 0x01 |
#define CFG3_DPH_MAX_RADIUS 0x02 |
#define CFG3_VARIO_FAILSAFE 0x04 |
#define CFG3_MOTOR_SWITCH_MODE 0x08 //FC0.88L 7.5.12 |
#define CFG3_NO_GPSFIX_NO_START 0x10 //FC0.88L 7.5.12 |
//GlobalConfig |
#define CFG_HOEHENREGELUNG 0x01 |
#define CFG_HOEHEN_SCHALTER 0x02 |
#define CFG_HEADING_HOLD 0x04 |
#define CFG_KOMPASS_AKTIV 0x08 |
#define CFG_KOMPASS_FIX 0x10 |
#define CFG_GPS_AKTIV 0x20 |
#define CFG_ACHSENKOPPLUNG_AKTIV 0x40 |
#define CFG_DREHRATEN_BEGRENZER 0x80 |
//Bitconfig MAsk |
#define CFG_LOOP_OBEN 0x01 |
#define CFG_LOOP_UNTEN 0x02 |
#define CFG_LOOP_LINKS 0x04 |
#define CFG_LOOP_RECHTS 0x08 |
#define CFG_MOTOR_BLINK1 0x10 |
#define CFG_MOTOR_OFF_LED1 0x20 |
#define CFG_MOTOR_OFF_LED2 0x40 |
#define CFG_MOTOR_BLINK2 0x80 |
// ExtraConfig |
#define CFG2_HEIGHT_LIMIT 0x01 |
#define CFG2_VARIO_BEEP 0x02 |
#define CFG_SENSITIVE_RC 0x04 |
#define CFG_3_3V_REFERENCE 0x08 |
#define CFG_NO_RCOFF_BEEPING 0x10 |
#define CFG_GPS_AID 0x20 |
#define CFG_LEARNABLE_CAREFREE 0x40 |
#define CFG_IGNORE_MAG_ERR_AT_STARTUP 0x80 |
// bit mask for ParamSet.Config0 |
#define CFG0_AIRPRESS_SENSOR 0x01 |
#define CFG0_HEIGHT_SWITCH 0x02 |
#define CFG0_HEADING_HOLD 0x04 |
#define CFG0_COMPASS_ACTIVE 0x08 |
#define CFG0_COMPASS_FIX 0x10 |
#define CFG0_GPS_ACTIVE 0x20 |
#define CFG0_AXIS_COUPLING_ACTIVE 0x40 |
#define CFG0_ROTARY_RATE_LIMITER 0x80 |
// defines for the receiver selection |
#define RECEIVER_PPM 0 |
#define RECEIVER_SPEKTRUM 1 |
#define RECEIVER_SPEKTRUM_HI_RES 2 |
#define RECEIVER_SPEKTRUM_LOW_RES 3 |
#define RECEIVER_JETI 4 |
#define RECEIVER_ACT_DSL 5 |
#define RECEIVER_HOTT 6 |
#define RECEIVER_SBUS 7 |
#define RECEIVER_USER 8 |
#define RECEIVER_UNKNOWN 0xFF |
// MikroKopter Flags |
// taken from |
// http://svn.mikrokopter.de/mikrowebsvn/filedetails.php?repname=FlightCtrl&path=%2Ftags%2FV0.73d%2Ffc.h |
//alt 0.86 |
//#define FCFLAG_MOTOR_RUN 0x01 |
//#define FCFLAG_FLY 0x02 |
//#define FCFLAG_CALIBRATE 0x04 |
//#define FCFLAG_START 0x08 |
//#define FCFLAG_NOTLANDUNG 0x10 |
//#define FCFLAG_LOWBAT 0x20 |
//#define FCFLAG_SPI_RX_ERR 0x40 |
//#define FCFLAG_I2CERR 0x80 |
// FC_StatusFlags 0.88 |
#define FC_STATUS_MOTOR_RUN 0x01 |
#define FC_STATUS_FLY 0x02 |
#define FC_STATUS_CALIBRATE 0x04 |
#define FC_STATUS_START 0x08 |
#define FC_STATUS_EMERGENCY_LANDING 0x10 |
#define FC_STATUS_LOWBAT 0x20 |
#define FC_STATUS_VARIO_TRIM_UP 0x40 |
#define FC_STATUS_VARIO_TRIM_DOWN 0x80 |
// FC_StatusFlags2 |
#define FC_STATUS2_CAREFREE 0x01 |
#define FC_STATUS2_ALTITUDE_CONTROL 0x02 |
#define FC_STATUS2_RC_FAILSAVE_ACTIVE 0x04 |
#define FC_STATUS2_OUT1_ACTIVE 0x08 |
#define FC_STATUS2_OUT2_ACTIVE 0x10 |
// NaviCtrl Flags |
// taken from |
// http://mikrocontroller.cco-ev.de/mikrowebsvn/filedetails.php?repname=NaviCtrl&path=%2Ftags%2FV0.15c%2Fuart1.h |
// |
#define NC_FLAG_FREE 0x01 |
#define NC_FLAG_PH 0x02 |
#define NC_FLAG_CH 0x04 |
#define NC_FLAG_RANGE_LIMIT 0x08 |
#define NC_FLAG_NOSERIALLINK 0x10 |
#define NC_FLAG_TARGET_REACHED 0x20 |
#define NC_FLAG_MANUAL_CONTROL 0x40 |
#define NC_FLAG_GPS_OK 0x80 |
typedef struct |
{ |
unsigned char SWMajor; |
unsigned char SWMinor; |
unsigned char ProtoMajor; |
unsigned char ProtoMinor; |
unsigned char SWPatch; |
unsigned char HardwareError[5]; |
} __attribute__((packed)) Version_t; |
// FC Debug Struct |
// portions taken and adapted from |
// http://svn.mikrokopter.de/mikrowebsvn/filedetails.php?repname=FlightCtrl&path=%2Ftags%2FV0.72p%2Fuart.h |
// |
typedef struct // 0.86 |
{ |
uint8_t Digital[2]; |
// NC: unsigned; FC: signed !!!! |
int16_t Analog[32]; // Debugvalues |
} __attribute__((packed)) DebugData_t; |
//****************************************************************** |
// uart1.h NC 0.87, zur Zeit hier nicht verwendet 28.01.2012 CB |
#define AMPEL_FC 0x01 |
#define AMPEL_BL 0x02 |
#define AMPEL_NC 0x04 |
#define AMPEL_COMPASS 0x08 |
typedef struct //0.87 |
{ |
u8 StatusGreen; |
u8 StatusRed; |
u16 Analog[32]; // Debugwerte |
} __attribute__((packed)) DebugOut_t; |
//****************************************************************** |
// NaviCtrl OSD Structs |
// portions taken and adapted from |
// http://svn.mikrokopter.de/mikrowebsvn/filedetails.php?repname=NaviCtrl&path=%2Ftags%2FV0.15c%2Fuart1.h |
// |
typedef struct //NC uart1.h |
{ |
s16 AngleNick; // in 0.1 deg |
s16 AngleRoll; // in 0.1 deg |
s16 Heading; // in 0.1 deg |
u8 StickNick; |
u8 StickRoll; |
u8 StickYaw; |
u8 StickGas; |
u8 reserve[4]; |
} __attribute__((packed)) Data3D_t; |
typedef struct |
{ |
s32 Longitude; // in 1E-7 deg |
s32 Latitude; // in 1E-7 deg |
s32 Altitude; // in mm |
u8 Status; // validity of data |
} __attribute__((packed)) GPS_Pos_t; |
typedef struct |
{ |
u16 Distance; // distance to target in cm |
s16 Bearing; // course to target in deg |
} __attribute__((packed)) GPS_PosDev_t; |
// aus NC waypoint.h |
typedef struct |
{ |
GPS_Pos_t Position; // the gps position of the waypoint, see ubx.h for details |
s16 Heading; // orientation, 0 no action, 1...360 fix heading, neg. = Index to POI in WP List |
u8 ToleranceRadius; // in meters, if the MK is within that range around the target, then the next target is triggered |
u8 HoldTime; // in seconds, if the was once in the tolerance area around a WP, this time defines the delay before the next WP is triggered |
u8 Event_Flag; // future implementation |
u8 Index; // to indentify different waypoints, workaround for bad communications PC <-> NC |
u8 Type; // typeof Waypoint |
u8 WP_EventChannelValue; // |
u8 AltitudeRate; // rate to change the setpoint |
u8 Speed; // rate to change the Position |
u8 CamAngle; // Camera servo angle |
u8 reserve[6]; // reserve |
} __attribute__((packed)) Point_t; |
// NaviCtrl struct |
// taken from |
// http://mikrocontroller.cco-ev.de/mikrowebsvn/filedetails.php?repname=NaviCtrl&path=%2Ftags%2FV0.15c%2Fuart1.h |
// |
#define NAVIDATA_VERSION 5 |
typedef struct |
{ |
u8 Version; // version of the data structure |
GPS_Pos_t CurrentPosition; // see ubx.h for details |
GPS_Pos_t TargetPosition; |
GPS_PosDev_t TargetPositionDeviation; |
GPS_Pos_t HomePosition; |
GPS_PosDev_t HomePositionDeviation; |
u8 WaypointIndex; // index of current waypoints running from 0 to WaypointNumber-1 |
u8 WaypointNumber; // number of stored waypoints |
u8 SatsInUse; // number of satellites used for position solution |
s16 Altimeter; // hight according to air pressure |
s16 Variometer; // climb(+) and sink(-) rate |
u16 FlyingTime; // in seconds |
u8 UBat; // Battery Voltage in 0.1 Volts |
u16 GroundSpeed; // speed over ground in cm/s (2D) |
s16 Heading; // current flight direction in ° as angle to north |
s16 CompassHeading; // current compass value in ° |
s8 AngleNick; // current Nick angle in 1° |
s8 AngleRoll; // current Rick angle in 1° |
u8 RC_Quality; // RC_Quality |
u8 FCStatusFlags; // Flags from FC |
u8 NCFlags; // Flags from NC |
u8 Errorcode; // 0 --> okay |
u8 OperatingRadius; // current operation radius around the Home Position in m |
s16 TopSpeed; // velocity in vertical direction in cm/s |
u8 TargetHoldTime; // time in s to stay at the given target, counts down to 0 if target has been reached |
u8 FCStatusFlags2; // StatusFlags2 (since version 5 added) |
s16 SetpointAltitude; // setpoint for altitude |
u8 Gas; // for future use |
u16 Current; // actual current in 0.1A steps |
u16 UsedCapacity; // used capacity in mAh |
} __attribute__((packed)) NaviData_t; |
typedef struct |
{ |
uint8_t Version; // the version of the BL (0 = old) |
uint8_t SetPoint; // written by attitude controller |
uint8_t SetPointLowerBits; // for higher Resolution of new BLs |
uint8_t State; // 7 bit for I2C error counter, highest bit indicates if motor is present |
uint8_t ReadMode; // select data to read |
// the following bytes must be exactly in that order! |
uint8_t Current; // in 0.1 A steps, read back from BL |
uint8_t MaxPWM; // read back from BL -> is less than 255 if BL is in current limit, not running (250) or starting (40) |
int8_t Temperature; // old BL-Ctrl will return a 255 here, the new version the temp. in �C |
} __attribute__((packed)) MotorData_t; |
typedef struct |
{ |
uint8_t Revision; // must be BL_REVISION |
uint8_t SetMask; // settings mask |
uint8_t PwmScaling; // maximum value of control pwm, acts like a thrust limit |
uint8_t CurrentLimit; // current limit in A |
uint8_t TempLimit; // in �C |
uint8_t CurrentScaling; // scaling factor for current measurement |
uint8_t BitConfig; // see defines above |
uint8_t crc; // checksum |
} __attribute__((packed)) BLConfig_t; |
// Aus FC eeprom.h |
// |
typedef struct |
{ |
unsigned char Revision; |
unsigned char Kanalbelegung[12]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3 |
unsigned char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv |
unsigned char Hoehe_MinGas; // Wert : 0-100 |
unsigned char Luftdruck_D; // Wert : 0-250 |
unsigned char MaxHoehe; // Wert : 0-32 |
unsigned char Hoehe_P; // Wert : 0-32 |
unsigned char Hoehe_Verstaerkung; // Wert : 0-50 |
unsigned char Hoehe_ACC_Wirkung; // Wert : 0-250 |
unsigned char Hoehe_HoverBand; // Wert : 0-250 |
unsigned char Hoehe_GPS_Z; // Wert : 0-250 |
unsigned char Hoehe_StickNeutralPoint;// Wert : 0-250 |
unsigned char Stick_P; // Wert : 1-6 |
unsigned char Stick_D; // Wert : 0-64 |
unsigned char StickGier_P; // Wert : 1-20 |
unsigned char Gas_Min; // Wert : 0-32 |
unsigned char Gas_Max; // Wert : 33-250 |
unsigned char GyroAccFaktor; // Wert : 1-64 |
unsigned char KompassWirkung; // Wert : 0-32 |
unsigned char Gyro_P; // Wert : 10-250 |
unsigned char Gyro_I; // Wert : 0-250 |
unsigned char Gyro_D; // Wert : 0-250 |
unsigned char Gyro_Gier_P; // Wert : 10-250 |
unsigned char Gyro_Gier_I; // Wert : 0-250 |
unsigned char Gyro_Stability; // Wert : 0-16 |
unsigned char UnterspannungsWarnung; // Wert : 0-250 |
unsigned char NotGas; // Wert : 0-250 //Gaswert bei EmpÀngsverlust |
unsigned char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen |
unsigned char Receiver; // 0= Summensignal, 1= Spektrum, 2 =Jeti, 3=ACT DSL, 4=ACT S3D |
unsigned char I_Faktor; // Wert : 0-250 |
unsigned char UserParam1; // Wert : 0-250 |
unsigned char UserParam2; // Wert : 0-250 |
unsigned char UserParam3; // Wert : 0-250 |
unsigned char UserParam4; // Wert : 0-250 |
unsigned char ServoNickControl; // Wert : 0-250 // Stellung des Servos |
unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo |
unsigned char ServoNickMin; // Wert : 0-250 // Anschlag |
unsigned char ServoNickMax; // Wert : 0-250 // Anschlag |
//--- Seit V0.75 |
unsigned char ServoRollControl; // Wert : 0-250 // Stellung des Servos |
unsigned char ServoRollComp; // Wert : 0-250 |
unsigned char ServoRollMin; // Wert : 0-250 |
unsigned char ServoRollMax; // Wert : 0-250 |
//--- |
unsigned char ServoNickRefresh; // Speed of the Servo |
unsigned char ServoManualControlSpeed;// |
unsigned char CamOrientation; // |
unsigned char Servo3; // Value or mapping of the Servo Output |
unsigned char Servo4; // Value or mapping of the Servo Output |
unsigned char Servo5; // Value or mapping of the Servo Output |
unsigned char LoopGasLimit; // Wert: 0-250 max. Gas wÀhrend Looping |
unsigned char LoopThreshold; // Wert: 0-250 Schwelle fÃŒr Stickausschlag |
unsigned char LoopHysterese; // Wert: 0-250 Hysterese fÃŒr Stickausschlag |
unsigned char AchsKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick koppelt (NickRollMitkopplung) |
unsigned char AchsKopplung2; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden |
unsigned char CouplingYawCorrection; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden |
unsigned char WinkelUmschlagNick; // Wert: 0-250 180°-Punkt |
unsigned char WinkelUmschlagRoll; // Wert: 0-250 180°-Punkt |
unsigned char GyroAccAbgleich; // 1/k (Koppel_ACC_Wirkung) |
unsigned char Driftkomp; |
unsigned char DynamicStability; |
unsigned char UserParam5; // Wert : 0-250 |
unsigned char UserParam6; // Wert : 0-250 |
unsigned char UserParam7; // Wert : 0-250 |
unsigned char UserParam8; // Wert : 0-250 |
//---Output --------------------------------------------- |
unsigned char J16Bitmask; // for the J16 Output |
unsigned char J16Timing; // for the J16 Output |
unsigned char J17Bitmask; // for the J17 Output |
unsigned char J17Timing; // for the J17 Output |
// seit version V0.75c |
unsigned char WARN_J16_Bitmask; // for the J16 Output |
unsigned char WARN_J17_Bitmask; // for the J17 Output |
//---NaviCtrl--------------------------------------------- |
unsigned char NaviGpsModeControl; // Parameters for the Naviboard |
unsigned char NaviGpsGain; |
unsigned char NaviGpsP; |
unsigned char NaviGpsI; |
unsigned char NaviGpsD; |
unsigned char NaviGpsPLimit; |
unsigned char NaviGpsILimit; |
unsigned char NaviGpsDLimit; |
unsigned char NaviGpsACC; |
unsigned char NaviGpsMinSat; |
unsigned char NaviStickThreshold; |
unsigned char NaviWindCorrection; |
unsigned char NaviAccCompensation; // New since 0.86 -> was: SpeedCompensation |
unsigned char NaviOperatingRadius; |
unsigned char NaviAngleLimitation; |
unsigned char NaviPH_LoginTime; |
//---Ext.Ctrl--------------------------------------------- |
unsigned char ExternalControl; // for serial Control |
//---CareFree--------------------------------------------- |
unsigned char OrientationAngle; // Where is the front-direction? |
unsigned char CareFreeModeControl; // switch for CareFree |
unsigned char MotorSafetySwitch; |
unsigned char MotorSmooth; |
unsigned char ComingHomeAltitude; |
unsigned char FailSafeTime; |
unsigned char MaxAltitude; |
unsigned char FailsafeChannel; // if the value of this channel is > 100, the MK reports "RC-Lost" |
unsigned char ServoFilterNick; |
unsigned char ServoFilterRoll; |
//------------------------------------------------ |
unsigned char BitConfig; // (war Loop-Cfg) Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt |
unsigned char ServoCompInvert; // // 0x01 = Nick, 0x02 = Roll 0 oder 1 // WICHTIG!!! am Ende lassen |
unsigned char ExtraConfig; // bitcodiert |
unsigned char GlobalConfig3; // bitcodiert |
char Name[12]; |
unsigned char crc; // must be the last byte! // MUST BE THE LAST BYTE! |
} __attribute__((packed)) mk_param_struct_t; |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/motortest.c |
---|
0,0 → 1,419 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#include "cpu.h" |
#include <avr/io.h> |
#include <avr/interrupt.h> |
#include <avr/pgmspace.h> |
#include <string.h> |
#include <stdlib.h> |
#include "main.h" |
#include "motortest.h" |
#include "lcd.h" |
#include "timer.h" |
#include "twimaster.h" |
//#include "menu.h" |
#include "uart1.h" |
#include "usart.h" |
#include "messages.h" |
uint8_t m; |
uint8_t mmode; // 0=Value 1=Motor |
uint8_t v; |
volatile uint8_t i2c_state; |
volatile uint8_t motor_addr = 0; |
//-------------------------------------------------------------- |
// Senden der Motorwerte per I2C-Bus |
// |
void SendMotorData(uint8_t m,uint8_t v) |
{ |
if (m==0) |
for(m=0;m<MAX_MOTORS;m++) // alle Motoren |
{ |
// Motor[m].SetPoint = MotorTest[m]; |
Motor[m].SetPoint = v; |
Motor[m].SetPointLowerBits = 0; |
// Motor[i].SetPoint = MotorTest[i] / 4; // testing the high resolution |
// Motor[i].SetPointLowerBits = MotorTest[i] % 4; |
} |
else |
{ |
Motor[m-1].SetPoint = v; |
Motor[m-1].SetPointLowerBits = 0; |
} |
if(I2C_TransferActive) |
I2C_TransferActive = 0; // enable for the next time |
else |
{ |
motor_write = 0; |
I2C_Start(TWI_STATE_MOTOR_TX); //Start I2C Interrupt Mode |
} |
} |
//-------------------------------------------------------------- |
// |
void Search_BL (void) |
{ |
uint8_t i = 0; |
unsigned int timer; |
lcd_cls (); |
MotorenEin =0; |
MotorTest[i] = 0; |
lcd_printp (PSTR("Suche BL-Ctrl"), 0); |
// Check connected BL-Ctrls |
BLFlags |= BLFLAG_READ_VERSION; |
motor_read = 0; // read the first I2C-Data |
SendMotorData(0,0); |
timer = SetDelay(1); |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
timer = SetDelay(1); |
for(i=0; i < MAX_MOTORS; i++) |
{ |
SendMotorData(i,0); |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
if(Motor[i].State & MOTOR_STATE_PRESENT_MASK) |
{ |
lcd_printp_at (0, 1, PSTR("Found BL-Ctrl:"), 0); |
lcd_print_hex_at (18,1,i,0); |
lcd_printp_at (0, 2, PSTR("Version:"), 0); |
lcd_print_hex_at (8,2,Motor[i].Version,0); |
lcd_printp_at (11, 2, PSTR("SetPoi:"), 0); |
lcd_print_hex_at (18,2,Motor[i].SetPoint,0); |
lcd_printp_at (0, 3, PSTR("SetPoiL:"), 0); |
lcd_print_hex_at (8,3,Motor[i].SetPointLowerBits,0); |
lcd_printp_at (11, 3, PSTR("State :"), 0); |
lcd_print_hex_at (18,3,Motor[i].State,0); |
lcd_printp_at (0, 4, PSTR("ReadMod:"), 0); |
lcd_print_hex_at (8,4,Motor[i].ReadMode,0); |
lcd_printp_at (11, 4, PSTR("Currnt:"), 0); |
lcd_print_hex_at (18,4,Motor[i].Current,0); |
lcd_printp_at (0, 5, PSTR("MaxPWM :"), 0); |
lcd_print_hex_at (8,5,Motor[i].MaxPWM,0); |
lcd_printp_at (11, 5, PSTR("Temp :"), 0); |
write_ndigit_number_u (18,5,Motor[i].Temperature,3,1,0); |
} |
} //End For I |
} |
//-------------------------------------------------------------- |
// |
void motor (uint8_t m,uint8_t v) |
{ |
memset (buffer, 0, 16); |
if(m == 0) |
{ |
memset (buffer, v, 16); |
} |
else |
{ |
buffer[m-1] = v; |
} |
SendOutData('t', ADDRESS_FC, 1, buffer, 16); |
} |
//-------------------------------------------------------------- |
// |
void motor_test (uint8_t MotorMode) |
{ |
lcd_cls (); |
mmode = 1; // 1=Motor |
m = 1; |
v = 0; |
char buffer[7]; |
unsigned int SerLoop; |
SerLoop = 10; |
if (MotorMode == I2C_Mode) |
{ |
Search_BL(); |
do |
{ |
lcd_printp_at (11, 7, PSTR("Ende Check"), 0); |
if (get_key_press (1 << KEY_ESC)) |
{ |
get_key_press(KEY_ALL); |
return; |
} |
} |
while (!get_key_press (1 << KEY_ENTER)); |
} |
lcd_cls(); |
lcd_printp (PSTR(" BL-Ctrl Test "), 2); |
lcd_printp_at (2, 2, PSTR("Motor: 1"), 0); |
lcd_printp_at (2, 3, PSTR("Value: 0"), 0); |
lcd_frect ((8*1), (8*5), (0 * (14*8)) / 255, 6, 1); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_3), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE3), 0); |
lcd_printp_at (18, 7, PSTR("\x1a \x1b"), 0); |
lcd_printp_at (0, 2, PSTR("\x1d"), 0); |
#if defined HWVERSION1_3W || defined HWVERSION1_3 || defined HWVERSION3_9 |
if (MotorMode == I2C_Mode) |
uart1_puts("Motor;Version;Setpoint high;Setpoint low;State;ReadMode;Current;MaxPWM;Temperature\r"); |
#endif |
#if defined HWVERSION1_2W || defined HWVERSION1_2 |
if (MotorMode == I2C_Mode) |
USART_puts("Motor;Version;Setpoint high;Setpoint low;State;ReadMode;Current;MaxPWM;Temperature\r"); |
#endif |
if (MotorMode == FC_Mode) |
{ |
if (hardware == NC && current_hardware == NC) |
{ |
SwitchToFC(); |
} |
} |
do |
{ |
// mmode 0=Value 1=Motor |
if ((mmode == 0) && (get_key_press (1 << KEY_PLUS) || get_key_long_rpt_sp ((1 << KEY_PLUS), 3)) && (v < 254)) |
{ |
v++; |
write_ndigit_number_u (9, 3, v, 3, 0,0); |
if (MotorMode == FC_Mode) |
lcd_frect ((8*1), (8*5), (v * (14*8)) / 255, 6, 1); |
} |
if ((mmode == 0) && (get_key_press (1 << KEY_MINUS) || get_key_long_rpt_sp ((1 << KEY_MINUS), 3)) && (v > 0)) |
{ |
if (MotorMode == FC_Mode) |
lcd_frect (((v * (14*8) / 255) + 8), (8*5), ((14*8) / 255), 6, 0); |
v--; |
write_ndigit_number_u (9, 3, v, 3, 0,0); |
if (MotorMode == FC_Mode) |
lcd_frect ((8*1), (8*5), (v * (14*8)) / 255, 6, 1); |
} |
if ((mmode == 1) && (get_key_press (1 << KEY_PLUS) || get_key_long_rpt_sp ((1 << KEY_PLUS), 1)) && (m < 16)) |
{ |
m++; |
write_ndigit_number_u (9, 2, m, 3, 0,0); |
} |
if ((mmode == 1) && (get_key_press (1 << KEY_MINUS) || get_key_long_rpt_sp ((1 << KEY_MINUS), 1)) && (m > 0)) |
{ |
m--; |
if(m > 0) |
write_ndigit_number_u (9, 2, m, 3, 0,0); |
if(m == 0) |
lcd_printp_at (9, 2, PSTR("All"), 0); |
} |
if (get_key_press (1 << KEY_ENTER)) |
{ |
if (MotorMode == I2C_Mode) |
{ |
if (v > 0) |
{ |
m = 0; |
v=0; |
lcd_frect ((8*1), (8*5), (0 * (14*8)) / 255, 6, 1); |
lcd_cls_line (0, 5, 21); |
if(m > 0) write_ndigit_number_u (9, 2, m, 3, 0,0); |
if(m == 0) lcd_printp_at (9, 2, PSTR("All"), 0); |
write_ndigit_number_u (9, 3, v, 3, 0,0); |
SendMotorData(m,v); |
timer = SetDelay(1); |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
} |
} |
if(mmode == 0) // 0=Value |
{ |
lcd_printp_at (0, 2, PSTR("\x1d"), 0); |
lcd_printp_at (0, 3, PSTR(" "), 0); |
mmode = 1; // 1=Motor |
} |
else |
{ |
lcd_printp_at (0, 2, PSTR(" "), 0); |
lcd_printp_at (0, 3, PSTR("\x1d"), 0); |
mmode = 0; // 0=Value |
} |
} |
//if (get_key_press (1 << KEY_ENTER))// |
if (MotorMode == I2C_Mode) |
{ |
SendMotorData(m,v); |
timer = SetDelay(1); |
lcd_printp_at (0, 3, PSTR("SetPoint :"), 0); |
write_ndigit_number_u (13,3,Motor[m-1].SetPoint,3,0,0); |
lcd_printp_at (0, 4, PSTR("Current :"), 0); |
lcd_print_hex_at (13,4,Motor[m-1].Current,0); |
write_ndigit_number_u (13,4,Motor[m-1].Current,3,0,0); |
lcd_printp_at (0, 5, PSTR("Temperature:"), 0); |
write_ndigit_number_u (13,5,Motor[m-1].Temperature,3,0,0); |
lcd_printp_at (0, 6, PSTR("Version:"), 0); |
lcd_print_hex_at (8,6,Motor[m-1].Version,0); |
lcd_printp_at (11, 6, PSTR("State :"), 0); |
lcd_print_hex_at (18,6,Motor[m-1].State,0); |
#if defined HWVERSION1_3W || defined HWVERSION1_3 || defined HWVERSION3_9 |
if (Motor[m-1].SetPoint > 0) |
{ |
if (SerLoop == 0) |
{ |
itoa( m-1, buffer, 10); // convert interger into string (decimal format) |
uart1_puts(buffer); // and transmit string to UART |
uart1_puts(";"); |
itoa( Motor[m-1].Version, buffer, 10); // |
uart1_puts(buffer); |
uart1_puts(";"); |
itoa( Motor[m-1].SetPoint, buffer, 10); // |
uart1_puts(buffer); |
uart1_puts(";"); |
itoa( Motor[m-1].SetPointLowerBits, buffer, 10); // |
uart1_puts(buffer); |
uart1_puts(";"); |
itoa( Motor[m-1].State, buffer, 10); // |
uart1_puts(buffer); |
uart1_puts(";"); |
itoa( Motor[m-1].ReadMode, buffer, 10); // |
uart1_puts(buffer); |
uart1_puts(";"); |
itoa( Motor[m-1].Current, buffer, 10); // |
uart1_puts(buffer); |
uart1_puts(";"); |
itoa( Motor[m-1].MaxPWM, buffer, 10); // |
uart1_puts(buffer); |
uart1_puts(";"); |
itoa( Motor[m-1].Temperature, buffer, 10); // |
uart1_puts(buffer); |
uart1_puts("\r"); |
uart1_puts("\n"); |
SerLoop =200; |
} |
else |
SerLoop--; |
} |
#endif |
#if defined HWVERSION1_2W || defined HWVERSION1_2 |
if (Motor[m-1].SetPoint > 0) |
{ |
if (SerLoop == 0) |
{ |
itoa( m-1, buffer, 10); // convert interger into string (decimal format) |
USART_puts(buffer); // and transmit string to UART |
USART_puts(";"); |
itoa( Motor[m-1].Version, buffer, 10); // |
USART_puts(buffer); |
USART_puts(";"); |
itoa( Motor[m-1].SetPoint, buffer, 10); // |
USART_puts(buffer); |
USART_puts(";"); |
itoa( Motor[m-1].SetPointLowerBits, buffer, 10); // |
USART_puts(buffer); |
USART_puts(";"); |
itoa( Motor[m-1].State, buffer, 10); // |
USART_puts(buffer); |
USART_puts(";"); |
itoa( Motor[m-1].ReadMode, buffer, 10); // |
USART_puts(buffer); |
USART_puts(";"); |
itoa( Motor[m-1].Current, buffer, 10); // |
USART_puts(buffer); |
USART_puts(";"); |
itoa( Motor[m-1].MaxPWM, buffer, 10); // |
USART_puts(buffer); |
USART_puts(";"); |
itoa( Motor[m-1].Temperature, buffer, 10); // |
USART_puts(buffer); |
USART_puts("\r"); |
USART_puts("\n"); |
SerLoop =200; |
} |
else |
SerLoop--; |
} |
#endif |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
} |
else |
motor (m,v); //if (MotorMode == I2C_Mode)// |
} |
while (!get_key_press (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
if (MotorMode == FC_Mode) |
{ |
motor(0,0); // switch all engines off at exit |
} |
} |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/motortest.h |
---|
0,0 → 1,46 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#ifndef _MOTORTEST_H |
#define _MOTORTEST_H |
#define I2C_Mode 1 // Motortest Lokal |
#define FC_Mode 2 // Motortest ueber FC |
void motor_test (uint8_t MotorMode); |
void SendMotorData(uint8_t m,uint8_t v); |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/osd.c |
---|
0,0 → 1,1627 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#include "cpu.h" |
#include <avr/io.h> |
#include <inttypes.h> |
#include <stdlib.h> |
#include <avr/pgmspace.h> |
#include <util/delay.h> |
#include "main.h" |
#include "osd.h" |
#include "lcd.h" |
#include "timer.h" |
#include "usart.h" |
#include "eeprom.h" |
#include "messages.h" |
#include "parameter.h" |
#include "mk-data-structs.h" |
#define COSD_WASFLYING 4 |
#define TIMEOUT 200 // 2 sec |
// global definitions and global vars |
NaviData_t *naviData; |
mk_param_struct_t *mk_param_struct; |
uint16_t old_hh = 0; |
uint8_t Flags_ExtraConfig; |
uint8_t Flags_GlobalConfig; |
uint8_t Flags_GlobalConfig3; |
unsigned char Element; |
uint16_t heading_home; |
// Hier Höhenanzeigefehler Korrigieren |
#define AltimeterAdjust 1.5 |
// stats for after flight |
int16_t max_Altimeter = 0; |
uint16_t max_GroundSpeed = 0; |
int16_t max_Distance = 0; |
uint8_t min_UBat = 255; |
uint16_t max_FlyingTime = 0; |
uint16_t max_Current = 0; |
uint16_t max_Capacity = 0; |
// cache old vars for blinking attribute, checkup is faster than full |
// attribute write each time |
volatile uint8_t last_UBat = 255; |
volatile uint8_t last_RC_Quality = 255; |
volatile uint16_t ftimer = 0; |
volatile uint8_t OSD_active; |
uint8_t Vario_Beep_Up = 0; |
uint8_t Vario_Beep_Down = 0; |
uint8_t Vario_Beep_Up_Interval = 9; |
uint8_t Vario_Beep_Down_Interval = 6; |
uint8_t Vario_Threshold = 0; |
uint8_t Vario_Threshold_Value = 7; |
uint8_t OldWP=0; |
uint8_t NextWP = 0; |
//char* rose = "-+-N-+-O-+-S-+-W-+-N-+-O-+-S-+-W-+-N-+-O-+-S-+-W"; |
const char rose[48] PROGMEM = { |
0x0e, 0x0f, 0x0e, 'N', 0x0e, 0x0f, 0x0e, 'O', 0x0e, 0x0f, 0x0e, 'S', |
0x0e, 0x0f, 0x0e, 'W', 0x0e, 0x0f, 0x0e, 'N', 0x0e, 0x0f, 0x0e, 'O', |
0x0e, 0x0f, 0x0e, 'S', 0x0e, 0x0f, 0x0e, 'W', 0x0e, 0x0f, 0x0e, 'N', |
0x0e, 0x0f, 0x0e, 'O', 0x0e, 0x0f, 0x0e, 'S', 0x0e, 0x0f, 0x0e, 'W', |
}; |
// the center is char 19 (north), we add the current heading in 8th |
// which would be 22.5 degrees, but float would bloat up the code |
// and *10 / 225 would take ages... so we take the uncorrect way |
const char str_NE[] PROGMEM = "NE"; |
const char str_E[] PROGMEM = "E "; |
const char str_SE[] PROGMEM = "SE"; |
const char str_S[] PROGMEM = "S "; |
const char str_SW[] PROGMEM = "SW"; |
const char str_W[] PROGMEM = "W "; |
const char str_NW[] PROGMEM = "NW"; |
const char str_N[] PROGMEM = "N "; |
const char *directions_p[8] PROGMEM = { |
str_NE, |
str_E, |
str_SE, |
str_S, |
str_SW, |
str_W, |
str_NW, |
str_N |
}; |
// Positionen der Anzeigeelemente im Bildschirm |
#define OSD_ALTITUDE_CONTROL 1 |
#define OSD_ALTITUDE 2 |
#define OSD_BATTERY_LEVEL 3 |
#define OSD_CAPACITY 4 |
#define OSD_CARE_FREE 5 |
#define OSD_COMPASS_DEGREE 6 |
#define OSD_COMPASS_DIRECTION 7 |
#define OSD_COMPASS_ROSE 8 |
#define OSD_CURRENT 9 |
#define OSD_FLYING_TIME 10 |
#define OSD_GROUND_SPEED 11 |
#define OSD_HOME_CIRCLE 12 |
#define OSD_HOME_DEGREE 13 |
#define OSD_HOME_DISTANCE 14 |
#define OSD_LED1_OUTPUT 15 |
#define OSD_LED2_OUTPUT 16 |
#define OSD_MANUELL 17 |
#define OSD_NAVI_MODE 18 |
#define OSD_RC_INTENSITY 19 |
#define OSD_SATS_IN_USE 20 |
#define OSD_STATUS_FLAGS 21 |
#define OSD_VARIOMETER 22 |
#define OSD_TARGET 23 |
#define OSD_VARIOWERT 24 |
#define OSD_WAYPOINT 25 |
#define OSD_TARGET_DEGREE 26 |
#define MAX_CELL_VOLTAGE 43 // max cell volatage for LiPO |
#define MIN_CELL_VOLTAGE 32 // min cell volatage for LiPO |
// Flags |
uint8_t COSD_FLAGS2 = 0; |
GPS_Pos_t last5pos[7]; |
uint8_t error = 0; |
uint8_t cells,BattLowVoltageWarning,CellIsChecked = 0; |
uint8_t AkkuWarnThreshold = 0; |
void CheckMKLipo(void) // Quelle Mikrokopter FC-Software Holger + Ingo |
{ |
if(MK_LowBat < 50) // automatische Zellenerkennung |
{ |
if (CellIsChecked <= 2) //Nur beim Start 1x prüfen |
{ |
// up to 6s LiPo, less than 2s is technical impossible |
for(cells = 2; cells < 7; cells++) |
{ |
if(naviData->UBat < cells * MAX_CELL_VOLTAGE) break; |
} |
BattLowVoltageWarning = cells * MK_LowBat; |
CellIsChecked++; |
} |
} |
else BattLowVoltageWarning = MK_LowBat; |
if (naviData->UBat < BattLowVoltageWarning) |
{ |
if (AkkuWarnThreshold <= 4) AkkuWarnThreshold++; |
else |
{ //Beeper ein |
set_beep ( 1000, 0x0020, BeepSevere); |
// BeepTime = 3000; |
// BeepMuster = 0x0020; |
} |
} |
} |
//-------------------------------------------------------------- |
// convert the <heading> gotton from NC into an index |
uint8_t heading_conv (uint16_t heading) |
{ |
if (heading > 23 && heading < 68) |
return 0; //direction = "NE"; |
else if (heading > 67 && heading < 113) |
return 1; //direction = "E "; |
else if (heading > 112 && heading < 158) |
return 2; //direction = "SE"; |
else if (heading > 157 && heading < 203) |
return 3; //direction = "S "; |
else if (heading > 202 && heading < 248) |
return 4; //direction = "SW"; |
else if (heading > 247 && heading < 293) |
return 5; //direction = "W "; |
else if (heading > 292 && heading < 338) |
return 6; //direction = "NW"; |
return 7; //direction = "N "; |
} |
//-------------------------------------------------------------- |
// draw a compass rose at <x>/<y> for <heading> |
void draw_compass (uint8_t x, uint8_t y, uint16_t heading) |
{ |
uint8_t front = 19 + (heading / 22); |
for (uint8_t i = 0; i < 9; i++) |
lcd_putc (x++, y, pgm_read_byte(&rose[front - 4 + i]), 0); |
} |
//-------------------------------------------------------------- |
// variometer |
// draw variometer arrows at <x>/<y> according to <variometer> |
// |
void draw_variometer (uint8_t x, uint8_t y, uint8_t width, uint8_t hight, int16_t variometer) |
{ |
x *= 6; |
y *= 8; |
y += 7; |
lcd_rect (x, y - ((hight) / 2), width, hight, 1); |
lcd_frect (x + 1, y - ((hight) / 2) + 1, width - 2, hight - 2, 0); |
lcd_line (x, y, x + width, y, 1); |
if (variometer > 0) // steigend |
{ |
switch (variometer / 5) |
{ |
case 0: |
lcd_line (x + 4, y - 1, x + 6, y - 1, 1); // 1 > 4 |
break; |
case 1: |
lcd_line (x + 4, y - 1, x + 6, y - 1, 1); // 1 > 4 |
lcd_frect (x + 3, y - 3, 4, 1, 1); // 5 > 9 |
break; |
case 2: |
lcd_line (x + 4, y - 1, x + 6, y - 1, 1); // 1 > 4 |
lcd_frect (x + 3, y - 3, 4, 1, 1); // 5 > 9 |
lcd_frect (x + 2, y - 5, 6, 1, 1); // 10 > 14 |
break; |
default: |
lcd_line (x + 4, y - 1, x + 6, y - 1, 1); // 1 > 4 |
lcd_frect (x + 3, y - 3, 4, 1, 1); // 5 > 9 |
lcd_frect (x + 2, y - 5, 6, 1, 1); // 10 > 14 |
lcd_frect (x + 1, y - 6, 8, 1, 1); // 15 > |
break; |
} |
} |
else if (variometer < 0) // fallend |
{ |
switch ((variometer) / -5) |
{ |
case 0: |
lcd_line (x + 4, y + 1, x + 6, y + 1, 1); // - 1 > - 4 |
break; |
case 1: |
lcd_line (x + 4, y + 1, x + 6, y + 1, 1); // - 1 > - 4 |
lcd_frect (x + 3, y + 2, 4, 1, 1); // - 5 > - 9 |
break; |
case 2: |
lcd_line (x + 4, y + 1, x + 6, y + 1, 1); // - 1 > - 4 |
lcd_frect (x + 3, y + 2, 4, 1, 1); // - 5 > - 9 |
lcd_frect (x + 2, y + 4, 6, 1, 1); // -10 > -14 |
break; |
default: |
lcd_line (x + 4, y + 1, x + 6, y + 1, 1); // - 1 > - 4 |
lcd_frect (x + 3, y + 2, 4, 1, 1); // - 5 > - 9 |
lcd_frect (x + 2, y + 4, 6, 1, 1); // -10 > -14 |
lcd_frect (x + 1, y + 5, 8, 1, 1); // -15 > |
break; |
} |
} |
} |
//-------------------------------------------------------------- |
// Home symbol |
// draw Homesymbol at <x>/<y> |
// |
void draw_homesymbol (uint8_t x, uint8_t y) |
{ |
x *= 6; |
y *= 8; |
y += 7; |
lcd_plot (x,y-4,1); |
lcd_line (x+1,y-1,x+1,y-5,1); |
lcd_plot (x+2,y-6,1); |
lcd_plot (x+3,y-7,1); |
lcd_plot (x+4,y-6,1); |
lcd_line (x+5,y-1,x+5,y-5,1); |
lcd_plot (x+6,y-4,1); |
lcd_plot (x+3,y-1,1); |
lcd_plot (x+3,y-2,1); |
lcd_line (x+1,y,x+5,y,1); |
} |
//-------------------------------------------------------------- |
// Target symbol |
// draw Targetsymbol at <x>/<y> |
// |
void draw_targetsymbol (uint8_t x, uint8_t y) |
{ |
x *= 6; |
y *= 8; |
y += 7; |
lcd_circle (x+3, y-3, 4, 1); |
lcd_line (x,y-3,x+6,y-3,1); |
lcd_line (x+3,y,x+3,y-6,1); |
lcd_circle (x+3, y-3, 2, 1); |
} |
//-------------------------------------------------------------- |
void print_statistics (void) |
{ |
uint8_t line = 0; |
lcd_cls (); |
lcd_puts_at(12, 7, strGet(ENDE), 0); |
// max Altitude |
lcd_puts_at (0, line, strGet(STATS_ITEM_0), 0); |
write_ndigit_number_s (14, line, max_Altimeter / (30 / AltimeterAdjust), 4, 0,0); |
lcd_putc (18, line, 'm', 0); |
// max_GroundSpeed = 1; |
// max Speed |
lcd_puts_at (0, ++line, strGet(STATS_ITEM_1), 0); |
write_ndigit_number_u (15, line, (uint16_t) (((uint32_t) max_GroundSpeed * (uint32_t) 9) / (uint32_t) 250), 3, 0,0); |
lcd_printp_at(18, line, PSTR("kmh"), 0); |
// max Distance |
// max_Distance = 64512; |
lcd_puts_at (0, ++line, strGet(STATS_ITEM_2), 0); |
write_ndigit_number_u (15, line, max_Distance / 10, 4, 0,0); |
lcd_putc (19, line, 'm', 0); |
// max_FlyingTime = 3600; |
// max time |
lcd_puts_at (0, ++line, strGet(STATS_ITEM_4), 0); |
write_time (14, line, max_FlyingTime); |
lcd_putc (19, line, 'm', 0); |
// min voltage |
lcd_puts_at (0, ++line, strGet(STATS_ITEM_3), 0); |
write_ndigit_number_u_10th (14, line, min_UBat, 3, 0,0); |
lcd_putc (18, line, 'V', 0); |
#if 1 |
// max_Current = 1000; |
// max Current |
lcd_puts_at (0, ++line, strGet(STATS_ITEM_5), 0); |
write_ndigit_number_u_10th (14, line, max_Current, 4, 0,0); |
lcd_putc (19, line, 'A', 0); |
// Used Capacity |
lcd_puts_at (0, ++line, strGet(STATS_ITEM_6), 0); |
write_ndigit_number_u (14, line, max_Capacity, 4, 0,0); |
lcd_printp_at(18, line, PSTR("mAh"), 0); |
#else |
// longitude |
lcd_puts_at (0, ++line, strGet(STATS_ITEM_7), 0); |
write_gps_pos (8, line, naviData->CurrentPosition.Longitude); |
// latitude |
lcd_puts_at (0, ++line, strGet(STATS_ITEM_8), 0); |
write_gps_pos (8, line, naviData->CurrentPosition.Latitude); |
#endif |
while (!get_key_press (1 << KEY_ESC)) |
timer = TIMEOUT; |
COSD_FLAGS2 &= ~COSD_WASFLYING; |
get_key_press(KEY_ALL); |
lcd_cls(); |
} |
//-------------------------------------------------------------- |
void print_position (void) |
{ |
lcd_cls (); |
lcd_puts_at(0, 0, strGet(START_LASTPOS1), 2); // Breitengr Längengr |
lcd_puts_at(12, 7, strGet(ENDE), 0); |
uint8_t ij =0; |
for(ij=0;ij<6;ij++) |
{ |
uint32_t lon = last5pos[ij].Latitude; |
write_ndigit_number_u (1, ij+1, (uint16_t)(lon/10000000), 2, 0,0); |
lcd_printp_at (3, ij+1, PSTR("."), 0); |
write_ndigit_number_u (4, ij+1, (uint16_t)((lon/1000) % 10000), 4, 1,0); |
write_ndigit_number_u (8, ij+1, (uint16_t)((lon/10) % 100), 2, 1,0); |
uint32_t lat = last5pos[ij].Longitude; |
write_ndigit_number_u (12, ij+1, (uint16_t)(lat/10000000), 2, 0,0); |
lcd_printp_at (14, ij+1, PSTR("."), 0); |
write_ndigit_number_u (15, ij+1, (uint16_t)((lat/1000) % 10000), 4, 1,0); |
write_ndigit_number_u (19, ij+1, (uint16_t)((lat/10) % 100), 2, 1,0); |
} |
while (!get_key_press (1 << KEY_ESC)) |
timer = TIMEOUT; |
get_key_press(KEY_ALL); |
lcd_cls(); |
} |
//-------------------------------------------------------------- |
void Show_LastPosition(void) |
{ |
lcd_puts_at(0, 2, strGet(OSD_POS1), 0); |
lcd_puts_at(0, 3, strGet(OSD_POS2), 0); |
lcd_puts_at(0, 5, strGet(START_LASTPOS1), 0); |
uint32_t lon = last5pos[0].Latitude; |
write_ndigit_number_u (1, 6, (uint16_t)(lon/10000000), 2, 0,0); |
lcd_printp_at (3, 6, PSTR("."), 0); |
write_ndigit_number_u (4, 6, (uint16_t)((lon/1000) % 10000), 4, 1,0); |
write_ndigit_number_u (8, 6, (uint16_t)((lon/10) % 100), 2, 1,0); |
uint32_t lat = last5pos[0].Longitude; |
write_ndigit_number_u (12, 6, (uint16_t)(lat/10000000), 2, 0,0); |
lcd_printp_at (14, 6, PSTR("."), 0); |
write_ndigit_number_u (15, 6, (uint16_t)((lat/1000) % 10000), 4, 1,0); |
write_ndigit_number_u (19, 6, (uint16_t)((lat/10) % 100), 2, 1,0); |
} |
//-------------------------------------------------------------- |
void OSD_Timeout(uint8_t flag) |
{ |
// uint8_t flag; |
uint8_t tmp_dat; |
// flag = 0; |
timer = TIMEOUT; |
// disable OSD Data from NC |
// RS232_request_mk_data (1, 'o', 0); |
// tmp_dat = 0; |
// SendOutData ('o', ADDRESS_NC, 1, &tmp_dat, 1); |
mode = 0; |
rxd_buffer_locked = FALSE; |
// Bei Verbindungsverlusst werden hier die letzten bekannten Koordinaten ausgegeben!!! |
if (flag) |
{ |
// Falls Spannungswarnung an war Beeper aus// |
set_beep ( 0, 0, BeepOff); |
lcd_cls (); |
WriteLastPosition(last5pos[0].Longitude,last5pos[0].Latitude); // im EEprom speichern |
lcd_puts_at(0, 0, strGet(OSD_ERROR), 2); // ERROR: Datenverlust |
lcd_puts_at(0, 2, strGet(OSD_POS1), 0); // Letzte bekannte |
lcd_puts_at(0, 3, strGet(OSD_POS2), 0); // Position gespeichert. |
lcd_puts_at(0, 5, strGet(START_LASTPOS1), 0); // Breitengr Längengr |
// lcd_puts_at(12, 7, strGet(ENDE), 0); |
// lcd_puts_at(19, 7, strGet(OK), 0); |
// if (OSD_RCErrorbeep==true) |
// { |
set_beep ( 250, 0x0040, BeepNormal); |
// } |
error = 1; |
uint32_t lon = last5pos[0].Latitude; |
write_ndigit_number_u (1, 6, (uint16_t)(lon/10000000), 2, 0,0); |
lcd_printp_at (3, 6, PSTR("."), 0); |
write_ndigit_number_u (4, 6, (uint16_t)((lon/1000) % 10000), 4, 1,0); |
write_ndigit_number_u (8, 6, (uint16_t)((lon/10) % 100), 2, 1,0); |
uint32_t lat = last5pos[0].Longitude; |
write_ndigit_number_u (12, 6, (uint16_t)(lat/10000000), 2, 0,0); |
lcd_printp_at (14, 6, PSTR("."), 0); |
write_ndigit_number_u (15, 6, (uint16_t)((lat/1000) % 10000), 4, 1,0); |
write_ndigit_number_u (19, 6, (uint16_t)((lat/10) % 100), 2, 1,0); |
// while (!get_key_press (1 << KEY_ENTER)); |
// _delay_ms(1000); |
timer = TIMEOUT; |
// lcd_cls(); |
// return; |
} |
else |
{ |
lcd_puts_at(0, 0, strGet(OSD_ERROR), 2); |
Show_LastPosition(); |
if (OSD_RCErrorbeep==true) set_beep ( 200, 0x0080, BeepNormal); |
// _delay_ms(2000); |
} |
SwitchToNC(); |
mode = 'O'; |
// disable debug... |
// RS232_request_mk_data (0, 'd', 0); |
tmp_dat = 0; |
SendOutData ('d', ADDRESS_ANY, 1, &tmp_dat, 1); |
// request OSD Data from NC every 100ms |
// RS232_request_mk_data (1, 'o', 100); |
tmp_dat = 10; |
SendOutData ('o', ADDRESS_NC, 1, &tmp_dat, 1); |
} |
//----------------------------------------------------------- |
// |
void lcd_o_circle (int16_t x, int16_t y, int16_t breite, uint8_t mode) |
{ |
breite *= 6; |
int16_t radius = breite / 2; |
x += 2; |
x *= 6; |
x += 2; |
y += 1; |
y *= 8; |
y += 3; |
lcd_ellipse (x, y, radius - 3, radius - 5, mode); |
} |
//----------------------------------------------------------- |
// |
void lcd_o_circ_line (uint8_t x, uint8_t y, uint8_t breite, uint16_t deg, uint8_t mode) |
{ |
breite *= 6; |
int16_t radius = breite / 3; |
x += 2; |
x *= 6; |
x += 2; |
y += 1; |
y *= 8; |
y += 3; |
lcd_ellipse_line(x, y, radius, radius, deg, mode); |
} |
//-------------------------------------------------------------- |
void osd (uint8_t ShowMode) |
{ |
uint8_t flag; |
uint8_t tmp_dat; |
uint8_t OSD_Mode; |
uint8_t info_3D = 0; |
uint8_t status; |
// Clear statistics |
max_Altimeter = 0; |
max_GroundSpeed = 0; |
max_Distance = 0; |
min_UBat = 255; |
max_FlyingTime = 0; |
CellIsChecked = 0; |
cells = 0; |
AkkuWarnThreshold=0; |
OldWP=0; |
NextWP = false; |
// flags from last round to check for changes |
uint8_t old_FCFlags = 0; |
uint8_t old_AngleNick = 0; |
uint8_t old_AngleRoll = 0; |
lcd_cls(); |
OSD_Mode = ShowMode; |
if (hardware == FC) |
{ |
lcd_puts_at(0, 3, strGet(ONLY_NC), 0); // Nur mit NC |
timer = 100; |
while (timer > 0); |
return; |
} |
SwitchToFC(); |
status = load_setting(0xff); |
if(status == 255) |
{ |
lcd_puts_at(0, 0, strGet(NO_SETTINGS), 0); // Keine Setings |
_delay_ms(2000); |
} |
Flags_ExtraConfig = mk_param_struct->ExtraConfig; |
Flags_GlobalConfig = mk_param_struct->GlobalConfig; |
Flags_GlobalConfig3 = mk_param_struct->GlobalConfig3; |
SwitchToNC(); |
mode = 'O'; |
// disable debug... |
// RS232_request_mk_data (0, 'd', 0); |
tmp_dat = 0; |
SendOutData ('d', ADDRESS_ANY, 1, &tmp_dat, 1); |
// request OSD Data from NC every 100ms |
// RS232_request_mk_data (1, 'o', 100); |
tmp_dat = 10; |
OSD_active = true; // benötigt für Navidata Ausgabe an SV2 |
SendOutData ('o', ADDRESS_NC, 1, &tmp_dat, 1); |
flag = 0; |
timer = TIMEOUT; |
abo_timer = ABO_TIMEOUT; |
//?? lcd_putc (10,5,0x18,1); |
do |
{ |
if (rxd_buffer_locked) |
{ |
timer = TIMEOUT; |
Decode64 (); |
naviData = (NaviData_t *) pRxData; |
if(error == 1) |
lcd_cls(); |
error = 0; |
GPS_Pos_t currpos; |
currpos.Latitude = naviData->CurrentPosition.Latitude; |
currpos.Longitude = naviData->CurrentPosition.Longitude; |
if((currpos.Latitude != last5pos[0].Latitude)&&(currpos.Longitude != last5pos[0].Longitude)) |
{ |
last5pos[6] = last5pos[5]; |
last5pos[5] = last5pos[4]; |
last5pos[4] = last5pos[3]; |
last5pos[3] = last5pos[2]; |
last5pos[2] = last5pos[1]; |
last5pos[1] = last5pos[0]; |
last5pos[0] = currpos; |
} |
flag = 1; |
if (OSD_Mode == 1) |
{ |
if (naviData->FCStatusFlags & FC_STATUS_MOTOR_RUN) |
{ // should be engines running |
// motors are on, assume we were/are flying |
COSD_FLAGS2 |= COSD_WASFLYING; |
} |
else |
{ // stats |
if ((COSD_FLAGS2 & COSD_WASFLYING) | (get_key_press (1 << KEY_ENTER))) |
{ |
print_statistics (); |
// draw_homesymbol(9,5); |
// draw_targetsymbol(9,6); |
} |
if (get_key_press (1 << KEY_PLUS)) |
{ |
print_position (); |
// draw_homesymbol(9,5); |
// draw_targetsymbol(9,6); |
} |
} |
// Altitude Control |
switch (OSD_ScreenMode) |
{ |
case 0 : OSD_Screen_Element (0, 3, OSD_ALTITUDE_CONTROL); break; |
case 1 : break; |
case 2 : OSD_Screen_Element (0, 1, OSD_ALTITUDE_CONTROL);break; |
break; |
} |
// Altitude |
switch (OSD_ScreenMode) |
{ |
case 0 : OSD_Screen_Element (11, 3, OSD_ALTITUDE); break; |
case 1 : OSD_Screen_Element (1, 1, OSD_ALTITUDE); break; |
case 2 : OSD_Screen_Element (1, 4, OSD_ALTITUDE); break; |
break; |
} |
// Battery level |
switch (OSD_ScreenMode) |
{ |
case 0 : OSD_Screen_Element (0, 7, OSD_BATTERY_LEVEL); break; |
case 1 : OSD_Screen_Element (0, 7, OSD_BATTERY_LEVEL); break; |
case 2 : OSD_Screen_Element (13, 7, OSD_BATTERY_LEVEL); break; |
break; |
} |
// Capacity |
switch (OSD_ScreenMode) |
{ |
case 0 : OSD_Screen_Element (13, 7, OSD_CAPACITY); break; |
case 1 : OSD_Screen_Element (13, 7, OSD_CAPACITY); break; |
case 2 : OSD_Screen_Element (0, 7, OSD_CAPACITY); break; |
break; |
} |
// Current |
switch (OSD_ScreenMode) |
{ |
case 0 : OSD_Screen_Element (8, 7, OSD_CURRENT); break; |
case 1 : OSD_Screen_Element (8, 7, OSD_CURRENT); break; |
case 2 : OSD_Screen_Element (8, 7, OSD_CURRENT); break; |
break; |
} |
// Care Free |
switch (OSD_ScreenMode) |
{ |
case 0 : OSD_Screen_Element (0, 5, OSD_CARE_FREE); break; |
case 1 : break; |
case 2 : OSD_Screen_Element (0, 3, OSD_CARE_FREE); break; |
break; |
} |
// Compass Degree |
switch (OSD_ScreenMode) |
{ |
case 0 : OSD_Screen_Element (13, 0, OSD_COMPASS_DEGREE); break; |
case 1 : OSD_Screen_Element (13, 0, OSD_COMPASS_DEGREE); break; |
case 2 : OSD_Screen_Element (12, 3, OSD_COMPASS_DEGREE);break; |
break; |
} |
// Compass Direction |
switch (OSD_ScreenMode) |
{ |
case 0 : OSD_Screen_Element (18, 0, OSD_COMPASS_DIRECTION); break; |
case 1 : OSD_Screen_Element (18, 0, OSD_COMPASS_DIRECTION); break; |
case 2 : break; |
break; |
} |
// Compass Rose |
switch (OSD_ScreenMode) |
{ |
case 0 : OSD_Screen_Element (12, 1, OSD_COMPASS_ROSE); break; |
case 1 : OSD_Screen_Element (12, 1, OSD_COMPASS_ROSE); break; |
case 2 : break; |
break; |
} |
// Flying time |
switch (OSD_ScreenMode) |
{ |
case 0 : OSD_Screen_Element (0, 1, OSD_FLYING_TIME); break; |
case 1 : OSD_Screen_Element (7, 6, OSD_FLYING_TIME); break; |
case 2 : OSD_Screen_Element (15, 5, OSD_FLYING_TIME); break; |
break; |
} |
// Ground Speed |
switch (OSD_ScreenMode) |
{ |
case 0 : OSD_Screen_Element (0, 0, OSD_GROUND_SPEED); break; |
case 1 : OSD_Screen_Element (0, 0, OSD_GROUND_SPEED); break; |
case 2 : break; |
break; |
} |
// Home Circle |
switch (OSD_ScreenMode) |
{ |
case 0 : OSD_Screen_Element (16, 4, OSD_HOME_CIRCLE); break; |
case 1 : OSD_Screen_Element (1, 3, OSD_HOME_CIRCLE); break; |
case 2 : OSD_Screen_Element (16, 0, OSD_HOME_CIRCLE); break; |
break; |
} |
// Home Degree |
switch (OSD_ScreenMode) |
{ |
case 0 : OSD_Screen_Element (12, 4, OSD_HOME_DEGREE); break; |
case 1 : OSD_Screen_Element (8, 3, OSD_HOME_DEGREE); break; |
case 2 : OSD_Screen_Element (11, 5, OSD_HOME_DEGREE); break; |
break; |
} |
// Home Distance |
switch (OSD_ScreenMode) |
{ |
case 0 : OSD_Screen_Element (10, 5, OSD_HOME_DISTANCE); break; |
case 1 : OSD_Screen_Element (7, 2, OSD_HOME_DISTANCE); break; |
case 2 : OSD_Screen_Element (0, 5, OSD_HOME_DISTANCE); break; |
break; |
} |
// Target Distance |
switch (OSD_ScreenMode) |
{ |
case 0 : OSD_Screen_Element (10, 6, OSD_TARGET); break; |
case 1 : break; |
case 2 : OSD_Screen_Element (0, 6, OSD_TARGET); break; |
break; |
} |
// Target Bearing |
switch (OSD_ScreenMode) |
{ |
case 0 : break; |
case 1 : break; |
case 2 : OSD_Screen_Element (11, 6, OSD_TARGET_DEGREE); break; |
break; |
} |
// Waypointnumber |
switch (OSD_ScreenMode) |
{ |
case 0 : OSD_Screen_Element (5, 6, OSD_WAYPOINT); break; |
case 1 : break; |
case 2 : break; |
break; |
} |
// LED1 Output |
switch (OSD_ScreenMode) |
{ |
case 0 : OSD_Screen_Element (0, 6, OSD_LED1_OUTPUT); break; |
case 1 : break; |
case 2 : OSD_Screen_Element (12, 2, OSD_LED1_OUTPUT); break; |
break; |
} |
// LED2 Output |
switch (OSD_ScreenMode) |
{ |
case 0 : OSD_Screen_Element (3, 6, OSD_LED2_OUTPUT); break; |
case 1 : break; |
case 2 : OSD_Screen_Element (14, 2, OSD_LED2_OUTPUT); break; |
break; |
} |
// Manuell |
// OSD_Screen_Element (7, 0, OSD_MANUELL); |
// Navi Mode |
switch (OSD_ScreenMode) |
{ |
case 0 : OSD_Screen_Element (0, 4, OSD_NAVI_MODE); break; |
case 1 : OSD_Screen_Element (8, 5, OSD_NAVI_MODE); break; |
case 2 : OSD_Screen_Element (0, 2, OSD_NAVI_MODE); break; |
break; |
} |
// RC Intensity |
switch (OSD_ScreenMode) |
{ |
case 0 : break; |
case 1 : OSD_Screen_Element (15, 6, OSD_RC_INTENSITY);break; |
case 2 : break; |
break; |
} |
// Variometer Wert |
switch (OSD_ScreenMode) |
{ |
case 0 : OSD_Screen_Element (11, 2, OSD_VARIOWERT); break; |
case 1 : OSD_Screen_Element (14, 2, OSD_VARIOWERT); break; |
case 2 : OSD_Screen_Element (8, 4, OSD_VARIOWERT); break; |
break; |
} |
// Sats in use |
switch (OSD_ScreenMode) |
{ |
case 0 : OSD_Screen_Element (18, 2, OSD_SATS_IN_USE); break; |
case 1 : OSD_Screen_Element (8, 4, OSD_SATS_IN_USE); break; |
case 2 : OSD_Screen_Element (10, 0, OSD_SATS_IN_USE); break; |
break; |
} |
// Status Flags |
switch (OSD_ScreenMode) |
{ |
case 0 : OSD_Screen_Element (0, 2, OSD_STATUS_FLAGS); break; |
case 1 : break; |
case 2 : OSD_Screen_Element (0, 0, OSD_STATUS_FLAGS); break; |
break; |
} |
// Variometer Grafik |
switch (OSD_ScreenMode) |
{ |
case 0 : OSD_Screen_Element (9, 0, OSD_VARIOMETER); break; |
case 1 : OSD_Screen_Element (9, 0, OSD_VARIOMETER); break; |
case 2 : break; |
break; |
} |
// Akku Warnung |
CheckMKLipo(); |
// if (naviData->UBat > MK_LowBat) //bei kurzzeitigen Schwankungen Beeper erst wieder aus wenn UBat 0,2 V höher als Warnschwelle |
// { //Beeper aus |
// BeepTime = 0; |
// BeepMuster = 0xFFFF; |
// } |
// Akku Warnung Ende |
// remember statistics (only when engines running) |
if (naviData->FCStatusFlags & FC_STATUS_MOTOR_RUN) |
{ |
if (naviData->Altimeter > max_Altimeter) max_Altimeter = naviData->Altimeter; |
if (naviData->GroundSpeed > max_GroundSpeed) max_GroundSpeed = naviData->GroundSpeed; |
if (naviData->HomePositionDeviation.Distance > max_Distance) max_Distance = naviData->HomePositionDeviation.Distance; |
if (naviData->UBat < min_UBat) min_UBat = naviData->UBat; |
if (naviData->FlyingTime > max_FlyingTime) max_FlyingTime = naviData->FlyingTime; |
if (naviData->Current > max_Current) max_Current = naviData->Current; |
if (naviData->UsedCapacity > max_Capacity) max_Capacity = naviData->UsedCapacity; |
} |
// remember last values |
last_RC_Quality = naviData->RC_Quality; |
last_UBat = naviData->UBat; |
old_FCFlags = naviData->FCStatusFlags; |
rxd_buffer_locked = FALSE; |
} |
// 3D Lage anzeige beginnt hier ----------------------------------- |
else if (OSD_Mode == 3) |
{ |
uint16_t head_home = (naviData->HomePositionDeviation.Bearing + 360 - naviData->CompassHeading) % 360; |
lcd_cls (); |
lcd_line(26,32,100,32,1); // horizontal // |
lcd_line(63,0,63,63,1); // vertical // |
lcd_puts_at(12, 7, strGet(KEYLINE5), 0); |
// 45' Angel |
lcd_line(61,11,65,11,1); // -- // |
lcd_line(40,30,40,34,1); // | // |
lcd_line(86,30,86,34,1); // | // |
lcd_line(61,53,65,53,1); // -- // |
if (info_3D == 1) |
{ |
lcd_puts_at(9, 0, strGet(OSD_3D_V), 0); // V |
lcd_puts_at(3, 3, strGet(OSD_3D_L), 0); // L |
lcd_puts_at(17, 3, strGet(OSD_3D_R), 0); // R |
lcd_puts_at(9, 7, strGet(OSD_3D_H), 0); // H |
lcd_puts_at(0, 0, strGet(OSD_3D_NICK), 0); // Ni |
write_ndigit_number_s (2, 0, naviData->AngleNick, 3, 0,0); |
lcd_putc (5, 0, 0x1e, 0); // degree symbol |
lcd_puts_at(0, 7, strGet(OSD_3D_ROLL), 0); // Ro |
write_ndigit_number_s (2, 7, naviData->AngleRoll, 3, 0,0); |
lcd_putc (5, 7, 0x1e, 0); // degree symbol |
lcd_puts_at(13, 0, strGet(OSD_3D_COMPASS), 0); |
// write_ndigit_number_s (15, 0,head_home, 3, 0); |
write_ndigit_number_u (15, 0, naviData->CompassHeading, 3, 0,0); |
lcd_putc (18, 0, 0x1e, 0); // degree symbol |
lcd_printp_at (19, 0, (const char *) (pgm_read_word ( &(directions_p[heading_conv(naviData->CompassHeading)]))), 0); |
} |
if (get_key_press (1 << KEY_ENTER)) |
{ |
info_3D++; |
if (info_3D > 1) |
info_3D = 0; |
} |
uint8_t Nick = ((-naviData->AngleNick/2)+32); |
uint8_t Roll = ((-naviData->AngleRoll/2)+63); |
lcd_ellipse(old_AngleRoll,old_AngleNick, 9, 8, 0); |
lcd_ellipse_line (old_AngleRoll, old_AngleNick, 8, 7, old_hh, 0); |
lcd_ellipse(Roll, Nick, 9, 8, 1); |
lcd_ellipse_line (Roll, Nick, 8, 7, head_home, 1); |
old_hh = head_home; |
old_AngleNick = Nick; |
old_AngleRoll = Roll; |
// remember last values |
last_RC_Quality = naviData->RC_Quality; |
last_UBat = naviData->UBat; |
old_FCFlags = naviData->FCStatusFlags; |
rxd_buffer_locked = FALSE; |
} |
if (!abo_timer) |
{ // renew abo every 3 sec |
// request OSD Data from NC every 100ms |
// RS232_request_mk_data (1, 'o', 100); |
tmp_dat = 10; |
SendOutData ('o', ADDRESS_NC, 1, &tmp_dat, 1); |
abo_timer = ABO_TIMEOUT; |
} |
} |
if (!timer) |
{ |
OSD_Timeout(flag); |
flag = 0; |
error = 1; |
} |
} |
while (!get_key_press (1 << KEY_ESC)); |
OSD_active = false; |
} |
//----------------------------------------------------------- |
// |
void OSD_Screen_Element (uint8_t x, uint8_t y, uint8_t Element) |
{ |
uint8_t FC_Fallspeed; |
uint16_t Balken = 0; |
switch (Element) |
{ |
case OSD_ALTITUDE_CONTROL: |
if (Flags_ExtraConfig & CFG2_HEIGHT_LIMIT) |
{ |
if (naviData->FCStatusFlags2 & FC_STATUS2_ALTITUDE_CONTROL) |
lcd_puts_at (x, y, strGet(OSD_ALTI_1), 0); // Höhe begr. |
else |
lcd_puts_at (x, y, strGet(OSD_ALTI_0), 0); // Höhe aus |
} |
else |
{ |
if (naviData->FCStatusFlags2 & FC_STATUS2_ALTITUDE_CONTROL) |
lcd_puts_at (x, y, strGet(OSD_VARIO_1), 0); // Vario Höhe |
else |
lcd_puts_at (x, y, strGet(OSD_VARIO_0), 0); // Vario aus |
} |
break; |
case OSD_ALTITUDE: |
//note:lephisto:according to several sources it's /30 |
if (naviData->Altimeter > (300 / AltimeterAdjust) || naviData->Altimeter < (-300 / AltimeterAdjust)) // above 10m only write full meters |
write_ndigit_number_s (x, y, naviData->Altimeter / (30 / AltimeterAdjust), 4, 0,0); |
else // up to 10m write meters.dm |
write_ndigit_number_s_10th (x, y, naviData->Altimeter / (3 / AltimeterAdjust), 3, 0,0); |
lcd_printp_at (x+4, y, PSTR("m"), 0); |
lcd_putc (x+5, y, 0x09, 0); |
break; |
case OSD_BATTERY_LEVEL: |
{ |
if ((OSD_LipoBar==1) &&(cells>0)) // LipobargraphAnzeige nur wenn Anzahl der Lipozellen bekannt sind |
{ |
{ |
if (naviData->UBat < BattLowVoltageWarning) |
{ |
write_ndigit_number_u (x+6, y, cells, 1, 0,2); |
lcd_printp_at (x+7, y, PSTR("S"), 2); |
} |
else |
{ |
write_ndigit_number_u (x+6, y, cells, 1, 0,0); |
lcd_printp_at (x+7, y, PSTR("S"), 0); |
} |
} |
if (cells==3) |
{ |
lcd_rect(x*6, y*8, 28, 7, 1); // Rahmen |
Balken = ((naviData->UBat-(cells*MIN_CELL_VOLTAGE))*10)/12; |
if ((Balken > 0) && (Balken <28)) lcd_frect((x*6)+1, (y*8)+1, Balken, 5, 1); // Füllung |
if (Balken <= 26) lcd_frect(Balken+(x*6)+1, (y*8)+1, 26-Balken, 5, 0); // löschen |
} |
if (cells==4 ||cells==5 ) |
{ |
lcd_rect(x*6, y*8, 30, 7, 1); // Rahmen |
if (cells == 4) Balken = ((naviData->UBat-(cells*MIN_CELL_VOLTAGE))*10)/15; |
if (cells == 5) Balken = ((naviData->UBat-(cells*MIN_CELL_VOLTAGE))*10)/19; |
if ((Balken > 0) && (Balken <=29)) lcd_frect((x*6)+1, (y*8)+1, Balken, 5, 1); // Füllung |
if (Balken <= 27) lcd_frect(Balken+(x*6)+1, (y*8)+1, 28-Balken, 5, 0); // löschen |
} |
} |
if (OSD_LipoBar==0 ) |
{ // nur Textanzeige |
switch (OSD_ScreenMode) |
{ |
case 0 : |
case 1 : |
{ |
if (naviData->UBat < BattLowVoltageWarning) |
{ |
write_ndigit_number_u_10th (x, y, naviData->UBat, 3, 0,2); |
lcd_printp_at (x+4, y, PSTR("V"), 2); |
} |
else |
{ |
write_ndigit_number_u_10th (x, y, naviData->UBat , 3, 0,0); |
lcd_printp_at (x+4, y, PSTR("V"), 0); |
} |
break; |
} |
case 2 : |
{ |
if (naviData->UBat < BattLowVoltageWarning) |
{ |
write_ndigit_number_u_10th (x-2, y, naviData->UBat, 3, 0,4); |
lcd_putc_jeti (x+2, y, 'V', 2); |
} |
else |
{ |
write_ndigit_number_u_10th (x-2, y, naviData->UBat , 3, 0,3); |
lcd_putc_jeti (x+2, y, 'V', 0); |
} |
break; |
} |
//break; |
} |
} |
} |
break; |
case OSD_CAPACITY: |
if (naviData->UsedCapacity > OSD_mAh_Warning) |
{ |
write_ndigit_number_u (x, y, naviData->UsedCapacity, 5, 0,2); |
lcd_printp_at (x+5, y, PSTR("mAh"), 2); |
// BeepTime = 3000; |
// BeepMuster = 0x0020; |
} |
else |
{ |
write_ndigit_number_u (x, y, naviData->UsedCapacity, 5, 0,0); |
lcd_printp_at (x+5, y, PSTR("mAh"), 0); |
} |
break; |
case OSD_CARE_FREE: |
if (naviData->FCStatusFlags2 & FC_STATUS2_CAREFREE) |
lcd_puts_at (x, y, strGet(OSD_CARE_FREE_1), 0); |
else |
lcd_puts_at (x, y, strGet(OSD_CARE_FREE_0), 0); // Clear |
break; |
case OSD_COMPASS_DEGREE: |
switch (OSD_ScreenMode) |
{ |
case 0: case 1 : |
{ |
write_ndigit_number_u (x, y, naviData->CompassHeading, 3, 0,0); |
lcd_putc (x+3, y, 0x1E, 0); // degree symbol |
break; |
} |
case 2 : |
{ |
write_ndigit_number_u (x, y, naviData->CompassHeading, 3, 0,3); |
lcd_putc (x+8, y, 0x1E, 0); // degree symbol |
break; |
} |
break; |
} |
break; |
case OSD_COMPASS_DIRECTION: |
lcd_printp_at (x, y, (const char *) (pgm_read_word ( &(directions_p[heading_conv(naviData->CompassHeading)]))), 0); |
break; |
case OSD_COMPASS_ROSE: |
draw_compass (x, y, naviData->CompassHeading); |
break; |
case OSD_CURRENT: |
write_ndigit_number_u_10th (x, y, naviData->Current, 3, 0,0); |
lcd_printp_at (x+4, y, PSTR("A"), 0); |
break; |
case OSD_FLYING_TIME: |
write_time (x, y, naviData->FlyingTime); |
lcd_printp_at (x+5, y, PSTR("m"), 0); |
break; |
case OSD_GROUND_SPEED: |
write_ndigit_number_u (x, y, (uint16_t) (((uint32_t) naviData->GroundSpeed * (uint32_t) 9) / (uint32_t) 250), 3, 0,0); |
lcd_printp_at (x+3, y, PSTR("Kmh"), 0); |
break; |
case OSD_HOME_CIRCLE: |
switch (OSD_ScreenMode) |
{ |
case 0 : |
{ |
lcd_o_circle(x, y, 5, 1); |
if (OSD_HomeMKView) |
heading_home = (naviData->HomePositionDeviation.Bearing + 360 - naviData->CompassHeading) % 360; |
else |
heading_home = (naviData->CompassHeading- naviData->HomePositionDeviation.Bearing + 360 ) % 360; |
lcd_o_circ_line (x, y, 5, old_hh, 0); |
old_hh = heading_home; |
lcd_o_circ_line (x, y, 5, heading_home, 1); |
break; |
} |
case 1 : |
{ |
lcd_o_circle(x, y, 7, 1); |
if (OSD_HomeMKView) |
heading_home = (naviData->HomePositionDeviation.Bearing + 360 - naviData->CompassHeading) % 360; |
else |
heading_home = (naviData->CompassHeading- naviData->HomePositionDeviation.Bearing + 360 ) % 360; |
lcd_o_circ_line (x, y, 7, old_hh, 0); |
old_hh = heading_home; |
lcd_o_circ_line (x, y, 7, heading_home, 1); |
break; |
} |
case 2 : |
{ |
lcd_o_circle(x, y, 5, 1); |
if (OSD_HomeMKView) |
heading_home = (naviData->HomePositionDeviation.Bearing + 360 - naviData->CompassHeading) % 360; |
else |
heading_home = (naviData->CompassHeading- naviData->HomePositionDeviation.Bearing + 360 ) % 360; |
lcd_o_circ_line (x, y, 5, old_hh, 0); |
old_hh = heading_home; |
lcd_o_circ_line (x, y, 5, heading_home, 1); |
break; |
} |
break; |
} |
break; |
case OSD_HOME_DEGREE: |
write_ndigit_number_u (x, y, heading_home, 3, 0,0); |
lcd_putc (x+3, y, 0x1e, 0); // degree symbol |
break; |
case OSD_TARGET_DEGREE: |
switch (OSD_ScreenMode) |
{ |
case 0: case 1 : |
{ |
write_ndigit_number_u (x, y, naviData->TargetPositionDeviation.Bearing/ 10, 3, 0,0); |
lcd_putc (x+3, y, 0x1e, 0); // degree symbol |
break; |
} |
case 2 : |
{ |
write_ndigit_number_u (x, y, naviData->TargetPositionDeviation.Bearing/ 10, 3, 0,0); |
lcd_putc (x+3, y, 0x1e, 0); // degree symbol |
break; |
} |
break; |
} |
break; |
case OSD_HOME_DISTANCE: |
switch (OSD_ScreenMode) |
{ |
case 0: case 1 : |
{ |
write_ndigit_number_u (x, y, naviData->HomePositionDeviation.Distance / 10, 3, 0,0); |
lcd_putc (x+3, y, 'm', 0); |
draw_homesymbol(x+4,y); |
break; |
} |
case 2 : |
{ |
lcd_printp_at (x, y, PSTR("Home"), 0); |
write_ndigit_number_u (x+5, y, naviData->HomePositionDeviation.Distance / 10, 3, 0,0); |
lcd_printp_at (x+8, y, PSTR("m -"), 0); |
break; |
} |
break; |
} |
break; |
case OSD_TARGET: |
switch (OSD_ScreenMode) |
{ |
case 0: case 1 : |
{ |
write_ndigit_number_u (x, y, naviData->TargetPositionDeviation.Distance / 10, 3, 0,0); |
lcd_putc (x+3, y, 'm', 0); |
draw_targetsymbol(x+4,y); |
break; |
} |
case 2 : |
{ |
lcd_printp_at (x, y, PSTR("Ziel"), 0); |
write_ndigit_number_u (x+5, y, naviData->TargetPositionDeviation.Distance / 10, 3, 0,0); |
lcd_printp_at (x+8, y, PSTR("m -"), 0); |
break; |
} |
break; |
} |
break; |
case OSD_WAYPOINT: |
if (!OldWP == naviData->WaypointIndex) |
{ |
// BeepTime = 500; |
// BeepMuster = 0x0080; |
OldWP = naviData->WaypointIndex; |
NextWP = true; |
} |
if ((NextWP==true)&& naviData->NCFlags & NC_FLAG_TARGET_REACHED) |
{ |
set_beep ( 500, 0x0080, BeepNormal); |
NextWP = false; |
} |
write_ndigit_number_u (x+2, y, naviData->WaypointIndex , 2, 0,0); |
lcd_printp_at (x, y, PSTR("WP"), 0); |
break; |
case OSD_LED1_OUTPUT: |
if (!OSD_InvertOut) |
{ |
if (naviData->FCStatusFlags2 & FC_STATUS2_OUT1_ACTIVE) |
{ |
lcd_fcircle (x * 6 + 5, y * 8 + 3, OSD_LEDform, 0); |
lcd_circle (x * 6 + 5, y * 8 + 3, 3, 1); |
} |
else |
{ |
lcd_fcircle (x * 6 + 5, y * 8 + 3, OSD_LEDform, 1); |
lcd_circle (x * 6 + 5, y * 8 + 3, 3, 1); |
} |
} |
else |
{ |
if (naviData->FCStatusFlags2 & FC_STATUS2_OUT1_ACTIVE) |
{ |
lcd_fcircle (x * 6 + 5, y * 8 + 3,OSD_LEDform, 1); |
lcd_circle (x * 6 + 5, y * 8 + 3, 3, 1); |
} |
else |
{ |
lcd_fcircle (x * 6 + 5, y * 8 + 3, OSD_LEDform, 0); |
lcd_circle (x * 6 + 5, y * 8 + 3, 3, 1); |
} |
} |
break; |
case OSD_LED2_OUTPUT: |
if (!OSD_InvertOut) |
{ |
if (naviData->FCStatusFlags2 & FC_STATUS2_OUT2_ACTIVE) |
{ |
lcd_fcircle (x * 6 + 5, y * 8 + 3, OSD_LEDform, 0); |
lcd_circle (x * 6 + 5, y * 8 + 3, 3, 1); |
} |
else |
{ |
lcd_fcircle (x * 6 + 5, y * 8 + 3, OSD_LEDform, 1); |
lcd_circle (x * 6 + 5, y * 8 + 3, 3, 1); |
} |
} |
else |
{ |
if (naviData->FCStatusFlags2 & FC_STATUS2_OUT2_ACTIVE) |
{ |
lcd_fcircle (x * 6 + 5, y * 8 + 3, OSD_LEDform, 1); |
lcd_circle (x * 6 + 5, y * 8 + 3, 3, 1); |
} |
else |
{ |
lcd_fcircle (x * 6 + 5, y * 8 + 3, OSD_LEDform, 0); |
lcd_circle (x * 6 + 5, y * 8 + 3, 3, 1); |
} |
} |
break; |
case OSD_MANUELL: |
if (naviData->NCFlags & NC_FLAG_MANUAL_CONTROL) |
lcd_putc (x, y, 'M', 0); // rc transmitter |
else |
lcd_putc (x, y, 'X', 0); // clear |
break; |
case OSD_NAVI_MODE: |
if (naviData->NCFlags & NC_FLAG_FREE) |
lcd_puts_at (x, y, strGet(OSD_NAVI_MODE_0), 0); // Navi aus |
else if (naviData->NCFlags & NC_FLAG_PH) |
lcd_puts_at (x, y, strGet(OSD_NAVI_MODE_1), 0); // Pos. Hold |
else if (naviData->NCFlags & NC_FLAG_CH) |
lcd_puts_at (x, y, strGet(OSD_NAVI_MODE_2), 0); // Coming Home |
break; |
case OSD_RC_INTENSITY: |
write_ndigit_number_u (x, y, naviData->RC_Quality, 3, 0,0); |
lcd_printp_at (x+3, y, PSTR("\x1F"), 0); // RC-transmitter |
if (naviData->NCFlags & NC_FLAG_NOSERIALLINK) |
{ |
lcd_printpns_at(x+3, y, PSTR(" "), 0); // Clear |
} |
else |
{ |
lcd_printpns_at(x+3, y, PSTR("PC"), 0); |
} |
break; |
case OSD_SATS_IN_USE: |
switch (OSD_ScreenMode) |
{ |
case 0: case 1 : |
{ |
if (naviData->NCFlags & NC_FLAG_GPS_OK) |
{ |
write_ndigit_number_u (x, y, naviData->SatsInUse, 2, 0,0); |
lcd_putc (x+2, y, 0x08, 0); |
} |
else |
{ |
write_ndigit_number_u (x, y, naviData->SatsInUse, 2, 0,2); |
lcd_putc (x+2, y, 0x08, 2); |
} |
break; |
} |
case 2 : |
{ |
if (naviData->NCFlags & NC_FLAG_GPS_OK) |
{ |
write_ndigit_number_u (x, y, naviData->SatsInUse, 2, 0,0); |
lcd_printp_at (x+2, y, PSTR(" Sat"), 0); |
} |
else |
{ |
write_ndigit_number_u (x, y, naviData->SatsInUse, 2, 0,2); |
lcd_printp_at (x+2, y, PSTR(" Sat"),2); |
} |
break; |
} |
break; |
} |
break; |
case OSD_STATUS_FLAGS: |
// FC_StatusFlags 0.88 |
// #define FC_STATUS_MOTOR_RUN 0x01 |
// #define FC_STATUS_FLY 0x02 |
// #define FC_STATUS_CALIBRATE 0x04 |
// #define FC_STATUS_START 0x08 |
// #define FC_STATUS_EMERGENCY_LANDING 0x10 |
// #define FC_STATUS_LOWBAT 0x20 |
// #define FC_STATUS_VARIO_TRIM_UP 0x40 |
// #define FC_STATUS_VARIO_TRIM_DOWN 0x80 |
if (naviData->FCStatusFlags & FC_STATUS_CALIBRATE) |
lcd_puts_at (x, y, strGet(OSD_FLAGS_1), 0); // Calibrate |
else if (naviData->FCStatusFlags & FC_STATUS_START) |
lcd_puts_at (x, y, strGet(OSD_FLAGS_2), 0); // Start |
else if (naviData->FCStatusFlags & FC_STATUS_MOTOR_RUN) |
lcd_puts_at (x, y, strGet(OSD_FLAGS_3), 0); // Run |
else if (naviData->FCStatusFlags & FC_STATUS_FLY) |
lcd_puts_at (x, y, strGet(OSD_FLAGS_4), 0); // Fly |
else if (naviData->FCStatusFlags & FC_STATUS_EMERGENCY_LANDING) |
lcd_puts_at (x, y, strGet(OSD_FLAGS_5), 0); // Landing |
else if (naviData->FCStatusFlags & FC_STATUS_LOWBAT) |
lcd_puts_at (x, y, strGet(OSD_FLAGS_6), 0); // LowBat |
else |
// lcd_printp_at (x, y, PSTR(" "), 0); // Clear |
lcd_puts_at (x, y, strGet(OSD_FLAGS_0), 0); // Clear |
break; |
case OSD_VARIOMETER: |
draw_variometer (x, y, 10, 14, naviData->Variometer); |
break; |
case OSD_VARIOWERT: |
FC_Fallspeed = (unsigned int)naviData->Variometer; |
FC_Fallspeed = 255-FC_Fallspeed; |
if (OSD_VarioBeep && (naviData->FCStatusFlags & FC_STATUS_MOTOR_RUN) && (naviData->FCStatusFlags2 & FC_STATUS2_ALTITUDE_CONTROL)) |
{ //start Beep |
if (naviData->Variometer <0) // MK fällt |
{ |
Vario_Beep_Up = 0; // Up Beep freischalten |
Vario_Threshold++; |
if ((Vario_Beep_Down == 0) && (Vario_Threshold >= Vario_Threshold_Value)) |
{ |
set_beep ( 300, 0xffff, BeepNormal); |
Vario_Threshold = Vario_Threshold_Value; // auf Maximalwert begrenzen |
} |
Vario_Beep_Down++; // Interval hochzählen in dem nicht gepiept wird |
if (Vario_Beep_Down == Vario_Beep_Down_Interval) Vario_Beep_Down = 0; |
} |
if (naviData->Variometer == 0) Vario_Threshold = 0; //Startverzögerung löschen |
if (naviData->Variometer >0 ) // MK steigt |
{ |
Vario_Beep_Down = 0; // Down Beep freischalten |
Vario_Threshold++; |
if ((Vario_Beep_Up == 0) && (Vario_Threshold >= Vario_Threshold_Value)) |
{ |
set_beep ( 100, 0xffff, BeepNormal); |
Vario_Threshold = Vario_Threshold_Value; // auf Maximalwert begrenzen |
} |
Vario_Beep_Up++; // Interval hochzählen in dem nicht gepiept wird |
if (Vario_Beep_Up == Vario_Beep_Up_Interval) Vario_Beep_Up = 0; |
} |
} // end Beep |
if (naviData->Variometer < 0) |
{ |
if (FC_Fallspeed > OSD_Fallspeed) |
{ |
write_ndigit_number_s_10th (x, y, naviData->Variometer, 3,0,2); |
lcd_printpns_at(x+4, y, PSTR("m/s"), 2); |
set_beep ( 1000, 0x0060, BeepNormal); |
} |
else |
{ |
write_ndigit_number_s_10th (x, y, naviData->Variometer, 3,0,0); |
lcd_printpns_at(x+4, y, PSTR("m/s"), 0); |
} |
} |
else |
{ |
write_ndigit_number_s_10th (x, y, naviData->Variometer, 3,0,0); |
lcd_printpns_at(x+4, y, PSTR("m/s"), 0); |
} |
break; |
} |
} |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/osd.h |
---|
0,0 → 1,45 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#ifndef _OSD_H |
#define _OSD_H |
void osd (uint8_t ShowMode); |
void vario_beep_output (void); |
void OSD_Timeout(uint8_t flag); |
void OSD_Screen_Element (uint8_t x, uint8_t y, uint8_t Element); |
void CheckMKLipo(void); |
extern volatile uint8_t OSD_active; |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/parameter.c |
---|
0,0 → 1,1430 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#include "cpu.h" |
#include <avr/io.h> |
#include <avr/pgmspace.h> |
#include <util/delay.h> |
#include <string.h> |
#include <stdlib.h> |
#include "lcd.h" |
#include "timer.h" |
#include "usart.h" |
#include "mk-data-structs.h" |
#include "parameter.h" |
#include "menu.h" |
#include "eeprom.h" |
#include "parameter_names.h" |
#include "messages.h" |
#define TIMEOUT 500 // 5 sec |
uint8_t display_settings_menu (void); |
uint8_t display_param_menu (uint8_t); |
uint8_t load_setting (uint8_t); |
uint8_t write_setting (uint8_t); |
uint8_t display_section_menu(void); |
void edit_param(uint8_t); |
void copy_setting(void); |
mk_param_struct_t *mk_param_struct; |
uint8_t ii; |
volatile uint8_t offset = 0; |
volatile uint8_t dmode = 0; |
volatile uint8_t target_pos = 1; |
volatile uint8_t offset2 = 0; |
volatile uint8_t pmode = 0; |
volatile uint8_t target_pos2 = 1; |
volatile uint8_t setting = 0; |
uint8_t changes = 0; |
#define OFFSETOF(type, field) ((unsigned int) &(((type *) 0)->field)) |
#define MKOSO(field) (uint8_t)OFFSETOF(mk_param_struct_t, field) |
//-------------------------------------------------------------- |
// Typ == (0 ohne Poti, 1 mit Poti, 2 bitfield, 3 serCh, 4 LEDmask, 5 Angle, 6 Empfaenger), |
// ||| |
// Group, Typ, Min, Max, Struct-Name(Value), Default1, Default2, Default3+4+5, |
// 0 1 2 3 4 5 6 7 |
// | | | | | | | | |
// | | | / | | | / |
// | | | / | | | / |
// | | | / | | | / |
// | | / / | | | / |
// | | / / | | | / |
// | / / / | | / / |
// | / / / | | / / |
// | / / / | | / / |
// | / / / | | / / |
// | / / / | | / / |
// | | / / | | / / |
// | | | | | | / / |
// | | | | | | / / |
// | | | | | | | / |
// | | | | | | | / |
// | | | | | | | | |
// | | | | | | | | |
// 0,0,1,12, MKOSO(Kanalbelegung)+2 , 1,1,1, // gas |
prog_uchar param_config[8*PARAM_COUNT]= |
{ |
// group 0 (kanaele) 1-15 |
0,0,1,12, MKOSO(Kanalbelegung)+2 , 1,1,1, // gas |
0,0,1,12, MKOSO(Kanalbelegung)+3 , 4,4,4, // gier |
0,0,1,12, MKOSO(Kanalbelegung)+0 , 3,3,3, // nick |
0,0,1,12, MKOSO(Kanalbelegung)+1 , 2,2,2, // roll |
0,3,1,25, MKOSO(Kanalbelegung)+4 , 5,5,5, // poti1 |
0,3,1,25, MKOSO(Kanalbelegung)+5 , 6,6,6, // poti2 |
0,3,1,25, MKOSO(Kanalbelegung)+6 , 7,7,7, // poti3 |
0,3,1,25, MKOSO(Kanalbelegung)+7 , 8,8,8, // poti4 |
0,3,1,25, MKOSO(Kanalbelegung)+8 , 9,9,9, // poti5 |
0,3,1,25, MKOSO(Kanalbelegung)+9 , 10,10,10, // poti6 |
0,3,1,25, MKOSO(Kanalbelegung)+10, 11,11,11, // poti7 |
0,3,1,25, MKOSO(Kanalbelegung)+11, 12,12,12, // poti8 |
0,0,0,12, MKOSO(MotorSafetySwitch), 0,0,0, // Motor Sicherungsswitch |
0,2,0,CFG3_MOTOR_SWITCH_MODE , MKOSO(GlobalConfig3), 0,0,0, // kein Start ohne GPS Fix |
0,2,0,CFG_SENSITIVE_RC, MKOSO(ExtraConfig), 0,0,0, // erweiterte signal pruefung |
0,6,0,6, MKOSO(Receiver), 1,1,1, |
// group 1 (main) 16-23 |
1,2,0,CFG_HOEHENREGELUNG, MKOSO(GlobalConfig), 0,0,0, // hoehenregler |
1,2,0,CFG_GPS_AKTIV, MKOSO(GlobalConfig), 1,1,1, // gps |
1,2,0,CFG_KOMPASS_AKTIV, MKOSO(GlobalConfig), 1,1,1, // kompass |
1,2,0,CFG_KOMPASS_FIX, MKOSO(GlobalConfig), 0,0,0, // feste ausrichtung |
1,2,0,CFG_SENSITIVE_RC, MKOSO(ExtraConfig), 0,0,0, // erweiterte signal pruefung |
1,2,0,CFG_ACHSENKOPPLUNG_AKTIV, MKOSO(GlobalConfig), 1,1,1, // achsentkopplung |
1,2,0,CFG_DREHRATEN_BEGRENZER, MKOSO(GlobalConfig), 0,0,0, // drehratenbregrenzung |
1,2,0,CFG_HEADING_HOLD, MKOSO(GlobalConfig), 0,0,0, // heading hold |
// group 2 (stick) 24-27 |
2,0,0,20, MKOSO(Stick_P), 10,8,6, |
2,0,0,20, MKOSO(Stick_D), 16,16,10, |
2,1,0,255, MKOSO(StickGier_P), 6,6,4, |
2,1,0,255, MKOSO(ExternalControl), 0,0,0, |
// group3 : looping 28-36 |
3,2,0,CFG_LOOP_OBEN, MKOSO(BitConfig), 0,0,0, // oben |
3,2,0,CFG_LOOP_UNTEN, MKOSO(BitConfig), 0,0,0, // unten |
3,2,0,CFG_LOOP_LINKS, MKOSO(BitConfig), 0,0,0, // links |
3,2,0,CFG_LOOP_RECHTS, MKOSO(BitConfig), 0,0,0, // rechts |
3,1,0,255, MKOSO(LoopGasLimit), 50,50,50, |
3,0,0,247, MKOSO(LoopThreshold), 90,90,90, |
3,0,0,247, MKOSO(LoopHysterese), 50,50,50, |
3,0,0,247, MKOSO(WinkelUmschlagNick), 78,78,78, |
3,0,0,247, MKOSO(WinkelUmschlagRoll), 78,78,78, |
// group 4 (hoehe) 37-50 |
4,2,0,CFG_HOEHENREGELUNG, MKOSO(GlobalConfig), 0,0,0, // hoehenrelger |
4,2,0,CFG2_HEIGHT_LIMIT, MKOSO(ExtraConfig), 0,0,0, // vario oder hoeenbergenzung |
4,2,0,CFG_HOEHEN_SCHALTER, MKOSO(GlobalConfig), 1,1,1, // hoehenschalter |
4,2,0,CFG2_VARIO_BEEP, MKOSO(ExtraConfig), 1,1,1, // variobeep |
4,1,0,255, MKOSO(MaxHoehe), 255,255,255, |
4,0,0,247, MKOSO(Hoehe_MinGas), 30,30,30, |
4,1,0,255, MKOSO(Hoehe_P), 15,15,15, |
4,1,0,255, MKOSO(Luftdruck_D), 30,30,30, |
4,1,0,255, MKOSO(Hoehe_ACC_Wirkung), 0,0,0, |
4,1,0,255, MKOSO(MaxAltitude), 150,150,150, |
4,0,0,247, MKOSO(Hoehe_Verstaerkung), 15,15,15, |
4,0,0,247, MKOSO(Hoehe_HoverBand), 8,8,8, |
4,1,0,255, MKOSO(Hoehe_GPS_Z), 64,64,64, |
4,0,0,160, MKOSO(Hoehe_StickNeutralPoint), 0,0,0, |
// group 5 : kamera 51-68 |
5,1,0,255, MKOSO(ServoNickControl), 128,128,128, |
5,0,0,247, MKOSO(ServoNickComp), 50,50,50, |
5,2,0,0x01, MKOSO(ServoCompInvert), 0,0,0, // nick |
5,0,0,247, MKOSO(ServoNickMin), 15,15,15, |
5,0,0,247, MKOSO(ServoNickMax), 230,230,230, |
5,0,0,25, MKOSO(ServoFilterNick), 0,0,0, //FC0.87 |
5,1,0,255, MKOSO(ServoRollControl), 128,128,128, |
5,0,0,247, MKOSO(ServoRollComp), 85,85,85, |
5,2,0,0x02, MKOSO(ServoCompInvert), 0,0,0, // roll |
5,0,0,247, MKOSO(ServoRollMin), 70,70,70, |
5,0,0,247, MKOSO(ServoRollMax), 220,220,220, |
5,0,0,25, MKOSO(ServoFilterRoll), 0,0,0, //FC0.87 |
5,0,2,8, MKOSO(ServoNickRefresh), 4,4,4, |
5,0,0,247, MKOSO(ServoManualControlSpeed), 60,60,60, |
5,5,0,247, MKOSO(CamOrientation), 0,0,0, |
5,1,0,255, MKOSO(Servo3), 125,125,125, |
5,1,0,255, MKOSO(Servo4), 125,125,125, |
5,1,0,255, MKOSO(Servo5), 125,125,125, |
// group 6 : navictrl 67-85 |
6,2,0,0x20, MKOSO(GlobalConfig), 1,1,1, // gps |
6,1,0,255, MKOSO(NaviGpsModeControl), 254,254,254, |
6,1,0,255, MKOSO(NaviGpsGain), 100,100,100, |
6,0,0,247, MKOSO(NaviStickThreshold), 8,8,8, |
6,0,0,247, MKOSO(NaviGpsMinSat), 6,6,6, |
6,1,0,255, MKOSO(NaviGpsP), 90,90,90, |
6,1,0,255, MKOSO(NaviGpsI), 90,90,90, |
6,1,0,255, MKOSO(NaviGpsD), 90,90,90, |
6,1,0,255, MKOSO(NaviGpsPLimit), 75,75,75, |
6,1,0,255, MKOSO(NaviGpsILimit), 85,85,85, |
6,1,0,255, MKOSO(NaviGpsDLimit), 75,75,75, |
6,1,0,255, MKOSO(NaviGpsACC), 0,0,0, |
6,1,0,255, MKOSO(NaviWindCorrection), 90,90,90, |
6,1,0,255, MKOSO(NaviAccCompensation), 42,42,42, |
6,1,0,255, MKOSO(NaviOperatingRadius), 245,245,245, |
6,1,0,255, MKOSO(NaviAngleLimitation), 140,140,140, |
6,0,0,247, MKOSO(NaviPH_LoginTime), 5,5,5, |
6,2,0,CFG_GPS_AID, MKOSO(ExtraConfig), 0,0,0, // FC0.87dynamic ph |
6,2,0,CFG3_DPH_MAX_RADIUS , MKOSO(GlobalConfig3), 0,0,0, // FC0.87 |
6,0,0,247, MKOSO(ComingHomeAltitude), 0,0,0, |
// group 7 : ausgaenge 86-95 |
7,4,0,255, MKOSO(J16Bitmask), 95,95,95, |
7,1,0,255, MKOSO(J16Timing), 20,20,20, |
7,2,0,CFG_MOTOR_OFF_LED1, MKOSO(BitConfig), 0,0,0, // Motor_Off_Led1 |
7,2,0,CFG_MOTOR_BLINK1, MKOSO(BitConfig), 1,1,1, // Motor_Blink1 |
7,4,0,255, MKOSO(J17Bitmask), 243,243,243, |
7,1,0,255, MKOSO(J17Timing), 20,20,20, |
7,2,0,CFG_MOTOR_OFF_LED2, MKOSO(BitConfig), 0,0,0, // Motor_Off_Led2 |
7,2,0,CFG_MOTOR_BLINK2, MKOSO(BitConfig), 1,1,1, // Motor_Blink2 |
7,4,0,255, MKOSO(WARN_J16_Bitmask), 170,170,170, |
7,4,0,255, MKOSO(WARN_J17_Bitmask), 170,170,170, |
// group 8 : versch. 96-107 |
8,0,0,247, MKOSO(Gas_Min), 8,8,8, |
8,0,0,247, MKOSO(Gas_Max), 230,230,230, |
8,1,0,255, MKOSO(KompassWirkung), 64,64,64, |
8,1,0,255, MKOSO(CareFreeModeControl), 0,0,0, // Carefree |
8,2,0,CFG_LEARNABLE_CAREFREE, MKOSO(ExtraConfig), 0,0,0, // teachable Carefree |
8,0,0,247, MKOSO(UnterspannungsWarnung), 33,33,33, |
8,2,0,CFG_3_3V_REFERENCE, MKOSO(ExtraConfig), 0,0,0, // Voltage referenz |
8,0,0,247, MKOSO(NotGasZeit), 90,90,90, |
8,0,0,247, MKOSO(NotGas), 45,45,45, |
8,0,0,247, MKOSO(FailSafeTime), 0,0,0, // Failsavetime |
8,0,0,12, MKOSO(FailsafeChannel), 0,0,0, // FC0.87 Failsave Channel |
8,2,0,CFG_NO_RCOFF_BEEPING, MKOSO(ExtraConfig), 0,0,0, // Kein Summer ohne Sender beim Start |
8,2,0,CFG3_VARIO_FAILSAFE, MKOSO(GlobalConfig3), 0,0,0, //use vario Control for failsafe altitude |
8,2,0,CFG_IGNORE_MAG_ERR_AT_STARTUP, MKOSO(ExtraConfig), 0,0,0, // Ignore Compass Error |
8,2,0,CFG3_NO_SDCARD_NO_START , MKOSO(GlobalConfig3), 0,0,0, // nicht starten ohne SD Karte |
8,2,0,CFG3_NO_GPSFIX_NO_START , MKOSO(GlobalConfig3), 0,0,0, // kein Start ohne GPS Fix |
// group 9 : gyro 108-120 |
9,1,0,255, MKOSO(Gyro_P), 90,100,100, |
9,1,0,255, MKOSO(Gyro_I), 120,120,120, |
9,1,0,255, MKOSO(Gyro_D), 10,10,10, |
9,1,0,255, MKOSO(Gyro_Gier_P), 90,100,100, |
9,1,0,255, MKOSO(Gyro_Gier_I), 120,120,120, |
9,1,0,255, MKOSO(DynamicStability), 70,70,70, |
9,2,0,CFG_DREHRATEN_BEGRENZER, MKOSO(GlobalConfig), 0,0,0, // drehratenbregrenzung |
9,0,0,247, MKOSO(GyroAccFaktor), 27,27,27, |
9,0,0,247, MKOSO(GyroAccAbgleich), 32,32,32, |
9,1,0,255, MKOSO(I_Faktor), 16,16,16, |
9,0,0,247, MKOSO(Driftkomp), 0,0,0, |
9,0,0,16, MKOSO(Gyro_Stability), 6,6,6, |
9,0,0,247, MKOSO(MotorSmooth), 0,0,0, |
// group 10: benutzer 121-128 |
10,1,0,255, MKOSO(UserParam1), 0,0,0, |
10,1,0,255, MKOSO(UserParam2), 0,0,0, |
10,1,0,255, MKOSO(UserParam3), 0,0,0, |
10,1,0,255, MKOSO(UserParam4), 0,0,0, |
10,1,0,255, MKOSO(UserParam5), 0,0,0, |
10,1,0,255, MKOSO(UserParam6), 0,0,0, |
10,1,0,255, MKOSO(UserParam7), 0,0,0, |
10,1,0,255, MKOSO(UserParam8), 0,0,0, |
// group 11: achskoppl 129-132 |
11,2,0,CFG_ACHSENKOPPLUNG_AKTIV, MKOSO(GlobalConfig), 0,0,0, // achsentkopplung |
11,1,0,255, MKOSO(AchsKopplung1), 90,90,90, |
11,1,0,255, MKOSO(AchsKopplung2), 55,55,55, |
11,1,0,255, MKOSO(CouplingYawCorrection), 70,70,70, |
// group 12: mixer 133 |
12,5,0,23,MKOSO(OrientationAngle), 0,0,0, |
// group 13 (easy-setup) 134-144 |
13,2,0,0x01, MKOSO(GlobalConfig), 0,0,0, // hoehenrelger |
13,1,0,255, MKOSO(MaxHoehe), 255,255,255, |
13,0,0,160, MKOSO(Hoehe_StickNeutralPoint), 0,0,0, |
13,2,0,0x20, MKOSO(GlobalConfig), 1,1,1, // gps |
13,1,0,255, MKOSO(NaviGpsModeControl), 254,254,254, |
13,2,0,0x20, MKOSO(ExtraConfig), 0,0,0, // dynamic ph |
13,0,0,247, MKOSO(ComingHomeAltitude), 0,0,0, |
13,1,0,255, MKOSO(CareFreeModeControl), 0,0,0, // Carefree |
13,2,0,0x40, MKOSO(ExtraConfig), 0,0,0, // teachable Carefree |
13,0,0,12, MKOSO(MotorSafetySwitch), 0,0,0, // Motor Sicherungsswitch |
13,5,0,23, MKOSO(OrientationAngle), 0,0,0, |
}; |
//-------------------------------------------------------------- |
#define ITEMS_RX 9 |
prog_char param_items_rx[ITEMS_RX][17]= // zeilen,zeichen+1 |
{ |
"PPM ", |
"Spektrum ", |
"Spektrum HiRes ", |
"Spektrum LoRes ", |
"Jeti ", |
"ACT DSL ", |
"HOTT ", |
"Futuba SBUS ", |
"User ", |
}; |
//-------------------------------------------------------------- |
void edit_parameter(void) |
{ |
SwitchToFC(); |
// uint8_t setting; |
setting = display_settings_menu(); |
if(setting == 255) |
return; |
if(setting == 6) |
{ |
copy_setting(); |
return; |
} |
lcd_cls(); |
// lcd_printp_at (0, 0, PSTR(" Setting x "), 2); |
lcd_puts_at(0, 0, strGet(PARA_SETTINGS), 2); |
lcd_putc (15, 0, (setting + 48), 2); // ASCII ab 48 (hex 30) beginnt 0 - 9 |
// lcd_printp_at (3, 2, PSTR("ändern"), 0); |
// lcd_printp_at (3, 3, PSTR("aktivieren"), 0); |
lcd_puts_at(3, 2, strGet(PARA_CHANGE), 0); |
lcd_puts_at(3, 3, strGet(PARA_AKTIVI), 0); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_1), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE1), 0); |
uint8_t val = menu_choose2 (2, 3, 2, 0, 0); |
if (val == 255) |
return; |
if(val == 3) |
{ |
load_setting(setting); |
uint8_t setting_written = write_setting(setting); |
if(setting_written == setting) |
{ |
lcd_cls_line (0,2,21); |
lcd_cls_line (0,3,21); |
// lcd_printp_at (11, 0, PSTR("aktiviert"), 0); |
lcd_puts_at(5, 2, strGet(PARA_AKTIV), 0); |
} |
else |
{ |
lcd_cls_line (0,2,21); |
lcd_cls_line (0,3,21); |
// lcd_printp_at (0, 4, PSTR("Error"), 0); |
lcd_puts_at(0, 4, strGet(FEHLER), 0); |
} |
_delay_ms(2000); |
return; |
} |
if(setting == 255) |
return; |
uint8_t setting_loaded = load_setting(setting); |
if(setting_loaded == 255) |
return; |
offset = 0; |
dmode = 0; |
target_pos = 1; |
changes =0; |
uint8_t group =0; |
do |
{ |
group = display_section_menu(); |
if(group != 255) |
{ |
offset2 = 0; |
pmode = 0; |
target_pos2 = 1; |
uint8_t param; |
do |
{ |
param = display_param_menu(group); |
if(param != 255) |
{ |
edit_param(param); |
} |
} |
while(param != 255); |
} |
} |
while(group != 255); |
if(changes == 1) |
{ |
lcd_cls(); |
// lcd_printp_at (0, 0, PSTR(" Setting x speichern?"), 2); |
lcd_puts_at(0, 0, strGet(PARA_SAVESETT), 2); |
lcd_putc (9, 0, (setting + 48), 2); // ASCII ab 48 (hex 30) beginnt 0 - 9 |
write_ndigit_number_u(9, 0, setting, 1, 0,0); |
// lcd_printp_at (3, 2, PSTR("Ja"), 0); |
// lcd_printp_at (3, 3, PSTR("Nein"), 0); |
lcd_puts_at(3, 2, strGet(YES), 0); |
lcd_puts_at(3, 3, strGet(NOO), 0); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_1), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE1), 0); |
uint8_t val = menu_choose2 (2, 3, 2, 0, 0); |
if(val == 2) |
{ |
uint8_t setting_written = write_setting(setting); |
if(setting_written == setting) |
{ |
// lcd_printp_at (3, 4, PSTR("Gespeichert und"), 0); |
lcd_puts_at(3, 4, strGet(PARA_SETTSAVED), 0); |
// lcd_printp_at (3, 5, PSTR("Aktiviert"), 0); |
lcd_puts_at(3, 5, strGet(PARA_AKTIV), 0); |
} |
else |
{ |
// lcd_printp_at (0, 4, PSTR("Error"), 0); |
lcd_puts_at(0, 4, strGet(FEHLER), 0); |
} |
timer = 100; |
while (timer > 0); |
} |
} |
} |
//-------------------------------------------------------------- |
void copy_setting(void) |
{ |
uint8_t fromsetting = 3; |
uint8_t tosetting = 5; |
lcd_cls(); |
// lcd_printp_at (0, 1, PSTR("Kopiere Setting"), 0); |
// lcd_printp_at (0, 3, PSTR("von x nach y"), 0); |
// lcd_printp_at (0, 7, PSTR("von nach Ende OK"), 0); |
lcd_puts_at(0, 1, strGet(PARA_COPY), 0); |
lcd_puts_at(0, 3, strGet(PARA_FROMTO), 0); |
lcd_puts_at(0, 7, strGet(PARA_ENDE), 0); |
do |
{ |
write_ndigit_number_u(5,3,fromsetting, 1,0,0); |
write_ndigit_number_u(14,3,tosetting, 1,0,0); |
if(get_key_press (1 << KEY_MINUS)) |
{ |
fromsetting++; |
if(fromsetting == 6) fromsetting = 1; |
} |
if(get_key_press (1 << KEY_PLUS)) |
{ |
tosetting++; |
if(tosetting == 6) tosetting = 1; |
} |
if(get_key_press (1 << KEY_ENTER)) |
{ |
lcd_printp_at (0, 5, PSTR("Wirklich Kopieren?"), 0); |
lcd_puts_at(0, 5, strGet(PARA_COPYQ), 0); |
// lcd_printp_at (0, 7, PSTR(" Ende OK"), 0); |
lcd_puts_at(12, 7, strGet(KEYLINE4), 0); |
do |
{ |
if(get_key_press (1 << KEY_ENTER)) |
{ |
uint8_t loaded = load_setting(fromsetting); |
if(loaded == fromsetting) |
{ |
uint8_t written = write_setting(tosetting); |
if(written == tosetting) |
{ |
lcd_printp_at (0, 5, PSTR("Kopiert und Aktiviert"), 0); |
lcd_puts_at(0, 5, strGet(PARA_COPYACTIV), 0); |
} |
else |
{ |
// lcd_printp_at (0, 5, PSTR("Fehler"), 0); |
lcd_puts_at(0, 5, strGet(FEHLER), 0); |
lcd_cls_line (6, 5, 14); |
} |
} |
else |
{ |
// lcd_printp_at (0, 5, PSTR("Fehler"), 0); |
lcd_puts_at(0, 5, strGet(FEHLER), 0); |
lcd_cls_line (6, 5, 14); |
} |
timer = 100; |
while (timer > 0); |
return; |
} |
} |
while (!get_key_press (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
lcd_cls_line (0, 5, 21); |
// lcd_printp_at (0, 7, PSTR("von nach Ende OK"), 0); |
lcd_puts_at(0, 7, strGet(PARA_ENDE), 0); |
} |
} |
while (!get_key_press (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
} |
//-------------------------------------------------------------- |
void edit_param(uint8_t param) |
{ |
lcd_cls(); |
uint8_t type = pgm_read_byte(param_config+(8*param)+1); |
// lcd_printp_at (0, 0, PSTR(" Ändere Setting: "), 2); |
lcd_puts_at(0, 0, strGet(PARA_CHANGESETT), 2); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_1), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE1), 0); |
if(type != 6) |
lcd_printp_at(0,2,param_names[param][DisplayLanguage], 0); |
//------------------------------------------------------- |
if(type == 0) // ohne poti |
{ |
lcd_printp_at (4, 4, PSTR("( - ) (d: )"), 0); |
lcd_printp_at (12, 6, PSTR("Std."), 0); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_2), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE2), 0); |
uint8_t min = pgm_read_byte(param_config+(8*param)+2); |
uint8_t max = pgm_read_byte(param_config+(8*param)+3); |
uint8_t value = *(((uint8_t*)mk_param_struct) + pgm_read_byte(param_config+(8*param)+4)); |
uint8_t defaultvalue = pgm_read_byte(param_config+(8*param)+4 + setting ); // 5 - 7 |
uint8_t newvalue = value; |
write_ndigit_number_u (5, 4, min, 3, 0,0); |
write_ndigit_number_u (9, 4, max, 3, 0,0); |
write_ndigit_number_u (17, 4, defaultvalue, 3, 0,0); |
do |
{ |
write_ndigit_number_u (0, 4, newvalue, 3, 0,0); |
lcd_frect ((8*0), (8*5), (newvalue * (16*8) / max), 6, 1); |
if(max >= 50) |
{ |
if(get_key_press (1 << KEY_PLUS) | get_key_long_rpt_sp ((1 << KEY_PLUS), 3)) |
{ |
if((newvalue+1) <= max) |
newvalue++; |
} |
if(get_key_press (1 << KEY_MINUS) | get_key_long_rpt_sp ((1 << KEY_MINUS), 3)) |
{ |
if((newvalue-1) >= min) |
{ |
lcd_frect (((newvalue - 1) * (16*8) / max), (8*5), (16*8), 6, 0); |
// lcd_frect ((newvalue * (16*8) / max), (8*5), ((16*8) / max), 6, 0); |
newvalue--; |
} |
} |
} |
else |
{ |
if(get_key_press (1 << KEY_PLUS) | get_key_long_rpt_sp ((1 << KEY_PLUS), 2)) |
{ |
if((newvalue+1) <= max) |
newvalue++; |
} |
if(get_key_press (1 << KEY_MINUS) | get_key_long_rpt_sp ((1 << KEY_MINUS), 2)) |
{ |
if((newvalue-1) >= min) |
{ |
lcd_frect (((newvalue - 1) * (16*8) / max), (8*5), (16*8), 6, 0); |
// lcd_frect ((newvalue * (16*8) / max), (8*5), ((16*8) / max), 6, 0); |
newvalue--; |
} |
} |
} |
if(get_key_long (1 << KEY_ESC)) |
{ |
lcd_frect ((8*0), (8*5), (16*8), 6, 0); |
newvalue = defaultvalue; |
} |
if(get_key_short (1 << KEY_ENTER)) |
{ |
if(newvalue != value) |
{ |
*(((uint8_t*)mk_param_struct) + pgm_read_byte(param_config+(8*param)+4)) = newvalue; |
changes=1; |
} |
break; |
} |
} |
while (!get_key_short (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
} |
//------------------------------------------------------- |
if(type == 1) // mit poti |
{ |
lcd_printp_at (4, 4, PSTR("(0-247-P8)(d:Po )"), 0); |
lcd_printp_at (12, 6, PSTR("Std."), 0); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_2), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE2), 0); |
uint8_t min = pgm_read_byte(param_config+(8*param)+2); |
uint8_t max = pgm_read_byte(param_config+(8*param)+3); |
uint8_t value = *(((uint8_t*)mk_param_struct) + pgm_read_byte(param_config+(8*param)+4)); |
uint8_t defaultvalue = pgm_read_byte(param_config+(8*param)+4 + setting ); // 5 - 7 |
uint8_t newvalue = value; |
uint8_t mode = 0; |
if(defaultvalue > 247) |
{ |
lcd_printp_at (17, 4, PSTR("Po )"), 0); |
write_ndigit_number_u (19, 4, 256-defaultvalue, 1, 0,0); |
} |
else |
write_ndigit_number_u (17, 4, defaultvalue, 3, 0,0); |
if(value > 247) |
mode = 1; |
do |
{ |
if(newvalue > 247) |
mode = 1; |
else |
mode = 0; |
if(mode == 0) |
{ |
write_ndigit_number_u (0, 4, newvalue, 3, 0,0); |
lcd_frect ((8*0), (8*5), (newvalue * (16*8) / max), 6, 1); |
if(get_key_press (1 << KEY_PLUS) | get_key_long_rpt_sp ((1 << KEY_PLUS), 3)) |
{ |
if((newvalue+1) <= max) |
newvalue++; |
if(newvalue > 247) |
{ |
lcd_frect ((8*0), (8*5), (16*8), 6, 0); |
newvalue = 255; |
} |
} |
if(get_key_press (1 << KEY_MINUS) | get_key_long_rpt_sp ((1 << KEY_MINUS), 3)) |
{ |
if((newvalue-1)>=min) |
{ |
lcd_frect (((newvalue - 1) * (16*8) / max), (8*5), (16*8), 6, 0); |
// lcd_frect ((newvalue * (16*8) / max), (8*5), ((16*8) / max), 6, 0); |
newvalue--; |
} |
} |
} |
else |
{ |
lcd_printp_at (0, 4, PSTR("Po"), 0); |
write_ndigit_number_u (2, 4, 256 - newvalue, 1, 0,0); |
lcd_frect ((8*0), (8*5), ((256 - newvalue) * (16*8) / 8), 6, 1); |
if(get_key_press (1 << KEY_PLUS) | get_key_long_rpt_sp ((1 << KEY_PLUS), 1)) |
{ |
if(newvalue - 1 > 247) |
{ |
newvalue--; |
} |
} |
if(get_key_press (1 << KEY_MINUS) | get_key_long_rpt_sp ((1 << KEY_MINUS), 1)) |
{ |
lcd_frect (((255 - newvalue) * (16*8) / 8), (8*5), (16*8), 6, 0); |
// lcd_frect (((255 - newvalue) * (16*8) / 8), (8*5), ((16*8) / 8), 6, 0); |
newvalue++; |
if(newvalue == 0) |
{ |
lcd_frect ((8*0), (8*5), (16*8), 6, 0); // balken löschen |
newvalue = 247; |
} |
} |
} |
if(get_key_long (1 << KEY_ESC)) |
{ |
lcd_frect ((8*0), (8*5), (16*8), 6, 0); |
newvalue = defaultvalue; |
} |
if(get_key_short (1 << KEY_ENTER)) |
{ |
if(newvalue != value) |
{ |
*(((uint8_t*)mk_param_struct) + pgm_read_byte(param_config+(8*param)+4)) = newvalue; |
changes=1; |
} |
break; |
} |
} |
while (!get_key_short (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
} |
//------------------------------------------------------- |
if(type == 2) // ja/nein |
{ |
// lcd_printp_at (3, 4, PSTR("Ja"), 0); |
// lcd_printp_at (3, 5, PSTR("Nein"), 0); |
lcd_puts_at(3, 4, strGet(YES), 0); |
lcd_puts_at(3, 5, strGet(NOO), 0); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_1), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE1), 0); |
uint8_t bitmap = pgm_read_byte(param_config+(8*param)+3); |
uint8_t value = *(((uint8_t*)mk_param_struct) + pgm_read_byte(param_config+(8*param)+4)); |
uint8_t defaultvalue = pgm_read_byte(param_config+(8*param)+4 + setting ); // 5 - 7 |
uint8_t newvalue = value; |
if(defaultvalue == 1) |
lcd_printp_at (8, 4, PSTR("*"), 0); |
if(defaultvalue == 0) |
lcd_printp_at (8, 5, PSTR("*"), 0); |
do |
{ |
if(newvalue & bitmap) |
{ |
lcd_printp_at (1, 4, PSTR("\x1d"), 0); |
lcd_printp_at (1, 5, PSTR(" "), 0); |
} |
else |
{ |
lcd_printp_at (1, 4, PSTR(" "), 0); |
lcd_printp_at (1, 5, PSTR("\x1d"), 0); |
} |
if((get_key_press (1 << KEY_MINUS)) && (!(newvalue & bitmap))) |
newvalue ^= bitmap; |
if((get_key_press (1 << KEY_PLUS)) && (newvalue & bitmap)) |
newvalue ^= bitmap; |
if(get_key_press (1 << KEY_ENTER)) |
{ |
if(newvalue != value) |
{ |
*(((uint8_t*)mk_param_struct) + pgm_read_byte(param_config+(8*param)+4)) = newvalue; |
changes=1; |
} |
break; |
} |
} |
while (!get_key_short (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
} |
//------------------------------------------------------- |
if(type == 3) // serCH |
{ |
lcd_printp_at (4, 4, PSTR("(1-S12/W) (d: )"), 0); |
lcd_printp_at (12, 6, PSTR("Std."), 0); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_2), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE2), 0); |
uint8_t min = pgm_read_byte(param_config+(8*param)+2); |
uint8_t max = pgm_read_byte(param_config+(8*param)+3); |
uint8_t value = *(((uint8_t*)mk_param_struct) + pgm_read_byte(param_config+(8*param)+4)); |
uint8_t defaultvalue = pgm_read_byte(param_config+(8*param)+4 + setting ); // 5 - 7 |
uint8_t newvalue = value; |
write_ndigit_number_u (17, 4, defaultvalue, 3, 0,0); |
do |
{ |
if (newvalue<=(max-13)) |
write_ndigit_number_u (0, 4, newvalue, 3, 0,0); |
else |
{ |
if (newvalue<=(max-1)) |
{ |
lcd_printp_at (0, 4, PSTR("S"), 0); |
write_ndigit_number_u (1, 4, (newvalue-12), 2, 0,0); |
} |
} |
if (newvalue==max) |
lcd_printp_at (0, 4, PSTR("WPE"), 0); |
lcd_frect ((8*0), (8*5), (newvalue * (16*8)) / max, 6, 1); |
if(get_key_press (1 << KEY_PLUS) | get_key_long_rpt_sp ((1 << KEY_PLUS), 2)) |
{ |
if((newvalue+1) <= max) |
newvalue++; |
} |
if(get_key_press (1 << KEY_MINUS) | get_key_long_rpt_sp ((1 << KEY_MINUS), 2)) |
{ |
if((newvalue-1)>=min) |
{ |
lcd_frect (((newvalue - 1) * (16*8) / max), (8*5), (16*8), 6, 0); |
newvalue--; |
} |
} |
if(get_key_long (1 << KEY_ESC)) |
{ |
lcd_frect ((8*0), (8*5), (16*8), 6, 0); |
newvalue = defaultvalue; |
} |
if(get_key_short (1 << KEY_ENTER)) |
{ |
if(newvalue != value) |
{ |
*(((uint8_t*)mk_param_struct) + pgm_read_byte(param_config+(8*param)+4)) = newvalue; |
changes=1; |
} |
break; |
} |
} |
while (!get_key_short (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
} |
//------------------------------------------------------- |
if(type == 4) // led bitfeld |
{ |
// TODO: Übersetzung |
lcd_printp_at (0, 7, PSTR(" \x19 0\x11I Ende OK"), 0); |
if (param == 93 || param == 94) |
// lcd_printp_at (5, 6, PSTR("aktiv"), 0); |
lcd_puts_at(5, 6, strGet(AKTIV), 0); |
uint8_t value = *(((uint8_t*)mk_param_struct) + pgm_read_byte(param_config+(8*param)+4)); |
uint8_t newvalue = value; |
uint8_t pos = 0; |
do |
{ |
for(ii = 0; ii < 8; ii++) |
{ |
if(newvalue & (1 << ii)) |
lcd_printp_at (8-ii, 4,PSTR("1"),0); |
else |
lcd_printp_at (8-ii, 4,PSTR("0"),0); |
} |
lcd_printp_at (pos+1, 5,PSTR("\x12"),0); |
if(get_key_press (1 << KEY_MINUS)) |
{ |
lcd_printp_at (pos+1, 5,PSTR(" "),0); |
pos++; |
if(pos == 8) |
pos = 0; |
} |
if (param == 93 || param == 94) |
{ |
if(get_key_long (1 << KEY_PLUS)) |
{ |
if (newvalue != 0) |
newvalue = 0; |
else |
newvalue = 170; |
} |
} |
if(get_key_short (1 << KEY_PLUS)) |
newvalue ^= (1<<(7-pos)); |
if(get_key_short (1 << KEY_ENTER)) |
{ |
if(newvalue != value) |
{ |
*(((uint8_t*)mk_param_struct) + pgm_read_byte(param_config+(8*param)+4)) = newvalue; |
changes = 1; |
} |
break; |
} |
} |
while (!get_key_short (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
} |
//------------------------------------------------------- |
if(type == 5) // Angle |
{ |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_2), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE2), 0); |
uint8_t value = *(((uint8_t*)mk_param_struct) + pgm_read_byte(param_config+(8*param)+4)); |
lcd_ecircle(102, 35, 16, 1); |
uint8_t newvalue = value; |
uint8_t oldvalue = newvalue; |
do |
{ |
if(oldvalue != newvalue) lcd_ecirc_line (102, 35, 15, oldvalue*15, 0); |
oldvalue = newvalue; |
lcd_ecirc_line (102, 35, 15, newvalue*15, 1); |
if(get_key_press (1 << KEY_PLUS) | get_key_long_rpt_sp ((1 << KEY_PLUS), 1)) |
{ |
newvalue++; |
if(newvalue == 24) |
newvalue = 0; |
} |
if(get_key_press (1 << KEY_MINUS) | get_key_long_rpt_sp ((1 << KEY_MINUS), 1)) |
{ |
if(newvalue == 0) |
newvalue = 24; |
newvalue--; |
} |
if(get_key_short (1 << KEY_ENTER)) |
{ |
if(newvalue != value) |
{ |
*(((uint8_t*)mk_param_struct) + pgm_read_byte(param_config+(8*param)+4)) = newvalue; |
changes=1; |
} |
break; |
} |
} |
while (!get_key_short (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
} |
//------------------------------------------------------- |
if(type == 6) // receiver |
{ |
uint8_t value = *(((uint8_t*)mk_param_struct) + pgm_read_byte(param_config+(8*param)+4)); |
uint8_t newvalue = value + 1; |
uint8_t val =0; |
uint8_t ii = 0; |
uint8_t offset = 0; |
uint8_t dmode = 0; |
uint8_t target_pos = 1; |
uint8_t size = ITEMS_RX; |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_1), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE1), 0); |
while(1) |
{ |
ii = 0; |
if(offset > 0) |
lcd_printp_at(1,1, PSTR("\x12"), 0); |
for(ii = 0;ii < 6 ; ii++) |
{ |
if((ii+offset) < size) |
lcd_printp_at(3,ii+1,param_items_rx[ii+offset], 0); |
if((ii == 5)&&(ii+offset < (size-1))) |
lcd_printp_at(1,6, PSTR("\x13"), 0); |
} |
if(dmode == 0) |
{ |
if(offset == 0) |
{ |
if(size > 6) |
val = menu_choose3 (1, 5, target_pos,0,1); //menu_choose3 (min, max, start, return_at_start, return_at_end) |
else |
val = menu_choose3 (1, size, target_pos,0,0); |
} |
else |
val = menu_choose3 (2, 5, target_pos,1,1); |
} |
if(dmode == 1) |
{ |
if(offset+7 > size) |
val = menu_choose3 (2, 6, target_pos,1,0); |
else |
val = menu_choose3 (2, 5, target_pos,1,1); |
} |
if(val == 254) // überlauf unten |
{ |
offset++; |
dmode = 1; |
target_pos = 5; |
} |
else if(val == 253) // überlauf oben |
{ |
offset--; |
dmode = 0; |
target_pos = 2; |
} |
else if(val == 252) // ESC |
return; |
else if(val <= size) |
{ |
newvalue = val + offset - 1; |
*(((uint8_t*)mk_param_struct) + pgm_read_byte(param_config+(8*param)+4)) = newvalue; |
changes=1; |
return; |
} |
} |
} |
} |
//-------------------------------------------------------------- |
uint8_t display_param_menu(uint8_t group) |
{ |
uint8_t items[20]; |
uint8_t size=0; |
for(ii = 0;ii < PARAM_COUNT; ii++) |
{ |
if(pgm_read_byte(param_config+(8*ii)) == (group-1)) |
{ |
items[size] = ii; |
size++; |
} |
} |
uint8_t val =0 ; |
while(1) |
{ |
lcd_cls (); |
// lcd_printp_at (0, 0, PSTR(" Wähle Parameter: "), 2); |
lcd_puts_at(0, 0, strGet(PARA_SELECT), 2); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_1), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE1), 0); |
ii = 0; |
if(offset2 > 0) |
lcd_printp_at(1,1, PSTR("\x12"), 0); |
for(ii = 0;ii < 6 ; ii++) |
{ |
if((ii+offset2) < size) |
{ |
lcd_printp_at(3,ii+1,param_names[items[ii+offset2]][DisplayLanguage], 0); |
// this reads the the offset in the struct from the pgm configuration table and then reads the value from the struct |
uint8_t type = pgm_read_byte(param_config+(8*items[ii+offset2])+1); |
if(type == 0) |
{ |
write_ndigit_number_u (18, ii+1, *(((uint8_t*)mk_param_struct) + pgm_read_byte(param_config+(8*items[ii+offset2])+4)), 3, 0,0); |
if (group == 9) // % Anzeige für Notgas wenn Variohöhe für Notgas verwendet wird |
{ |
if (ii+offset2 == 8) |
{ |
uint8_t value = *(((uint8_t*)mk_param_struct) + pgm_read_byte(param_config+(8*items[(ii+offset2)+4])+4)); // Abfrage Variohöhe Notgas |
uint8_t bitmap = pgm_read_byte(param_config+(8*items[(ii+offset2)+4])+3); // Abfrage Variohöhe Notgas |
if(value & bitmap) |
lcd_printp_at(17,ii+1,PSTR("%"), 0); |
else |
lcd_printp_at(17,ii+1,PSTR(" "), 0); |
} |
} |
} |
if(type == 1) |
{ |
uint8_t value = *(((uint8_t*)mk_param_struct) + pgm_read_byte(param_config+(8*items[ii+offset2])+4)); |
if(value < 248) |
write_ndigit_number_u (18, ii+1, value, 3, 0,0); |
if(value >= 248) |
{ |
lcd_printp_at (18, ii+1, PSTR(" P"), 0); |
write_ndigit_number_u (20, ii+1, 256-value, 1, 0,0); |
} |
} |
if(type == 2) |
{ |
uint8_t value = *(((uint8_t*)mk_param_struct) + pgm_read_byte(param_config+(8*items[ii+offset2])+4)); |
uint8_t bitmap = pgm_read_byte(param_config+(8*items[ii+offset2])+3); |
if(value & bitmap) |
lcd_printp_at (18, ii+1, PSTR(" J"), 0); |
else |
lcd_printp_at (18, ii+1, PSTR(" N"), 0); |
} |
if(type == 3) |
{ |
uint8_t value = *(((uint8_t*)mk_param_struct) + pgm_read_byte(param_config+(8*items[ii+offset2])+4)); |
if (value<=12) |
write_ndigit_number_u (18, ii+1, value, 3, 0,0); |
else |
if (value<=(24)) |
{ |
lcd_printp_at (18, ii+1, PSTR("S"), 0); |
write_ndigit_number_u (19, ii+1, (value-12), 2, 0,0); |
} |
if (value==25) |
lcd_printp_at (18, ii+1, PSTR("WPE"), 0); |
} |
if(type == 4) |
write_ndigit_number_u (18, ii+1, *(((uint8_t*)mk_param_struct) + pgm_read_byte(param_config+(8*items[ii+offset2])+4)), 3, 0,0); |
if(type == 5) |
write_ndigit_number_u (18, ii+1, (*(((uint8_t*)mk_param_struct) + pgm_read_byte(param_config+(8*items[ii+offset2])+4)))*15, 3, 0,0); |
if(type == 6) // Empfänger Typ |
{ |
uint8_t value = *(((uint8_t*)mk_param_struct) + pgm_read_byte(param_config+(8*items[ii+offset2])+4)); |
if(value == 0) |
lcd_printp_at (18, ii+1, PSTR("PPM"), 0); |
else if(value == 1) |
lcd_printp_at (18, ii+1, PSTR("Spe"), 0); |
else if(value == 2) |
lcd_printp_at (18, ii+1, PSTR("SpH"), 0); |
else if(value == 3) |
lcd_printp_at (18, ii+1, PSTR("SpL"), 0); |
else if(value == 4) |
lcd_printp_at (18, ii+1, PSTR("Jet"), 0); |
else if(value == 5) |
lcd_printp_at (18, ii+1, PSTR("ACT"), 0); |
else if(value == 6) |
lcd_printp_at (18, ii+1, PSTR("HoT"), 0); |
else if(value == 7) |
lcd_printp_at (18, ii+1, PSTR("SBU"), 0); |
else if(value == 8) |
lcd_printp_at (18, ii+1, PSTR("USR"), 0); |
else |
write_ndigit_number_u (18, ii+1, *(((uint8_t*)mk_param_struct) + pgm_read_byte(param_config+(8*items[ii+offset2])+4)), 3, 0,0); |
} |
} |
if((ii == 5)&&(ii+offset2 < (size-1))) |
lcd_printp_at(1,6, PSTR("\x13"), 0); |
} |
if(pmode == 0) |
{ |
if(offset2 == 0) |
{ |
if(size > 6) |
val = menu_choose2 (1, 5, target_pos2,0,1); |
else |
val = menu_choose2 (1, size, target_pos2,0,0); |
} |
else |
val = menu_choose2 (2, 5, target_pos2,1,1); |
} |
if(pmode == 1) |
{ |
if(offset2+7 > size) |
val = menu_choose2 (2, 6, target_pos2,1,0); |
else |
val = menu_choose2 (2, 5, target_pos2,1,1); |
} |
if(val == 254) |
{ |
offset2++; |
pmode = 1; |
target_pos2 = 5; |
} |
else if(val == 253) |
{ |
offset2--; |
pmode = 0; |
target_pos2 = 2; |
} |
else |
break; |
} |
if(val != 255) |
{ |
target_pos2=val; |
return items[val+offset2-1]; |
} |
else |
return val; |
} |
//-------------------------------------------------------------- |
uint8_t display_section_menu(void) |
{ |
uint8_t size = PAGES; |
uint8_t val =0; |
while(1) |
{ |
lcd_cls (); |
// lcd_printp_at (0, 0, PSTR(" Wähle Seite: "), 2); |
lcd_puts_at(0, 0, strGet(PARA_SEITE),2); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_1), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE1), 0); |
ii = 0; |
if(offset > 0) |
lcd_printp_at(1,1, PSTR("\x12"), 0); |
for(ii = 0;ii < 6 ; ii++) |
{ |
if((ii+offset) < size) |
lcd_printp_at(3,ii+1,param_pages[ii+offset][DisplayLanguage], 0); |
if((ii == 5)&&(ii+offset < (size-1))) |
lcd_printp_at(1,6, PSTR("\x13"), 0); |
} |
if(dmode == 0) |
{ |
if(offset == 0) |
{ |
if(size > 6) |
val = menu_choose2 (1, 5, target_pos,0,1); |
else |
val = menu_choose2 (1, size, target_pos,0,0); |
} |
else |
val = menu_choose2 (2, 5, target_pos,1,1); |
} |
if(dmode == 1) |
{ |
if(offset+7 > size) |
val = menu_choose2 (2, 6, target_pos,1,0); |
else |
val = menu_choose2 (2, 5, target_pos,1,1); |
} |
if(val == 254) |
{ |
offset++; |
dmode = 1; |
target_pos = 5; |
} |
else if(val == 253) |
{ |
offset--; |
dmode = 0; |
target_pos = 2; |
} |
else |
break; |
} |
if(val != 255) |
{ |
target_pos=val; |
return val+offset; |
} |
else |
return val; |
} |
//-------------------------------------------------------------- |
uint8_t display_settings_menu (void) |
{ |
uint8_t status; |
lcd_cls (); |
// lcd_printp_at (0, 0, PSTR(" Wähle Setting: "), 2); |
lcd_puts_at(0, 0, strGet(PARA_SELSETT), 2); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_1), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE1), 0); |
for(setting=1;setting<6;setting++) |
{ |
status = load_setting(setting); |
if(status == 255) |
return 255; |
write_ndigit_number_u (3, setting, status, 1, 0,0); |
lcd_print_at (5,setting,(uint8_t*)mk_param_struct->Name, 0); |
} |
// lcd_printp_at (3, 6, PSTR("Kopiere Setting"), 0); |
lcd_puts_at(3, 6, strGet(PARA_COPY), 0); |
status = load_setting(0xff); |
if(status == 255) |
return 255; |
setting = menu_choose (1, 6, 1,status); |
return setting; |
} |
//-------------------------------------------------------------- |
uint8_t load_setting(uint8_t setting) |
{ |
mode = 'Q'; // Settings |
uint8_t timeout = 50; |
rxd_buffer_locked = FALSE; |
while (!rxd_buffer_locked && timeout) |
{ |
SendOutData ('q', ADDRESS_FC, 1, &setting, 1); |
// _delay_ms(50); |
timer = 20; |
while (timer > 0); |
timeout--; |
} |
if (timeout != 0) |
{ |
Decode64 (); |
setting = *pRxData; |
mk_param_struct = (mk_param_struct_t *) (pRxData + 1) ; |
} |
else |
{ // timeout occured |
// lcd_printp_at (0, 2, PSTR("Fehler: keine Daten"), 0); |
lcd_puts_at(0, 2, strGet(OSD_ERROR), 0); |
timer = 100; |
while (timer > 0); |
setting = 255; |
} |
return setting; |
} |
//-------------------------------------------------------------- |
uint8_t write_setting(uint8_t setting) |
{ |
mode = 'S'; // Settings |
uint8_t timeout = 50; |
rxd_buffer_locked = FALSE; |
while (!rxd_buffer_locked && timeout) |
{ |
SendOutData ('s', ADDRESS_FC, 2, &setting, 1, mk_param_struct, sizeof(mk_param_struct_t)); |
// _delay_ms(50); |
timer = 20; |
while (timer > 0); |
timeout--; |
} |
if (timeout != 0) |
{ |
Decode64 (); |
setting = *pRxData; |
} |
else // timeout occured |
{ |
// lcd_printp_at (0, 2, PSTR("Fehler: keine Daten"), 0); |
lcd_puts_at(0, 2, strGet(OSD_ERROR), 0); |
timer = 100; |
while (timer > 0); |
setting = 255; |
} |
return setting; |
} |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/parameter.h |
---|
0,0 → 1,46 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#ifndef _PARAMETER_H |
#define _PARAMETER_H |
#include "main.h" |
void edit_parameter (void); |
uint8_t load_setting(uint8_t setting); |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/parameter_names.h |
---|
0,0 → 1,277 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#define PAGES 14 |
#define PARAM_COUNT 152 //152 FC088L |
#define PARAM_LENGTH 15 |
#define PARAM_NUM_LANG 4 |
// German Englisch Französisch Holländisch |
prog_char param_pages[PAGES][PARAM_NUM_LANG][PARAM_LENGTH]= // zeilen,zeichen+1 |
{ |
{"Kanäle ","Channel ","Canaux ","Kanaal "}, |
{"Konfiguration ","main ","Config ","Configuratie "}, |
{"Stick ","stick ","Manche ","Stick "}, |
{"Looping ","Looping ","Looping ","Looping "}, |
{"Höhe ","Altitude ","Altitude ","Hoogte "}, |
{"Kamera ","Camera ","Camera ","Camera "}, |
{"NaviCtrl ","NaviCtrl ","NaviCtrl ","NaviCtrl "}, |
{"Ausgänge ","Outputs ","Sorties ","Uitgangen "}, |
{"Verschiedenes ","Divers ","Divers ","Diversen "}, |
{"Gyro ","Gyro ","Gyro ","Gyro "}, |
{"Benutzer ","User ","Parametres ","Gebruiker "}, |
{"Achskopplung ","Coupl Axes ","Coupl Axes ","Koppeling Ass "}, |
{"Mixer-Setup ","Config Mix ","Config Mix ","Config. Mixer "}, |
{"Easy Setup ","Config Easy ","Config Easy ","Config. easy "}, |
}; |
//Namen |
prog_char param_names[PARAM_COUNT][PARAM_NUM_LANG][PARAM_LENGTH]= |
{ |
// group 0 (kanaele) 1-15 |
{"Gas ","Throttle ","Gaz ","Gas "}, |
{"Gier ","Gier ","Lacet ","Gier "}, |
{"Nick ","Nick ","Tangage ","Nick "}, |
{"Roll ","Roll ","Roulis ","Roll "}, |
{"Poti 1 ","Poti 1 ","Poti 1 ","Poti 1 "}, |
{"Poti 2 ","Poti 2 ","Poti 2 ","Poti 2 "}, |
{"Poti 3 ","Poti 3 ","Poti 3 ","Poti 3 "}, |
{"Poti 4 ","Poti 4 ","Poti 4 ","Poti 4 "}, |
{"Poti 5 ","Poti 5 ","Poti 5 ","Poti 5 "}, |
{"Poti 6 ","Poti 6 ","Poti 6 ","Poti 6 "}, |
{"Poti 7 ","Poti 7 ","Poti 7 ","Poti 7 "}, |
{"Poti 8 ","Poti 8 ","Poti 8 ","Poti 8 "}, |
{"Motor Sich.Sch","Mot.Safety Sw.","Mot.Safety Sw.","Mot.saf.schak."}, |
{"Motor Swi.Mode","Motor Swi.Mode","Motor Swi.Mode","Motor Swi.Mode"}, |
{"Erw. Sig. Pr. ","Enh. Sig.Check","Recep Renforce","Uitg.Sig.Check"}, |
{"Empfänger Typ ","Receiver Type ","Type Recepteur","Ontvang. Type "}, |
// group 1 (main) 16-23 |
{"Höhenregeler ","Ctrl Altitude ","Ctrl Altitude ","Ctrl Hoogte "}, |
{"GPS ","GPS ","GPS ","GPS "}, |
{"Kompass ","Compass ","Compas ","Kompas "}, |
{"KompFest Ausr.","CompOrient.Fix","Maintien Cap ","Kompas vast "}, |
{"Erw. Sig. Pr. ","Sens.RcvSigVal","Ctrl Ren Recep","ExtRec Signaal"}, |
{"Achs(e.)koppl.","Axis Couping ","Decouplage Axe","As koppeling "}, |
{"Drehratenbegr.","RotRate limit.","Limit Vit. Rot","RotRate limit."}, |
{"Heading Hold ","Nick/Roll ","Orient. Fixe ","Koers vast "}, |
// group 2 (stick) 24-27 |
{"Nick/Roll P ","Nick/Roll P ","Roul/Tang P ","Nick/Roll P "}, |
{"Nick/Roll D ","Nick/Roll D ","Roul/Tang D ","Nick/Roll D "}, |
{"Gier P ","Gier P ","Lacet P ","Gier P "}, |
{"Externe Kontr.","Extern Ctrl ","Ctrl Externe ","Extern Control"}, |
// group3 : (looping) 28-36 |
{"Looping oben ","Looping up ","Looping Avant ","Looping omhoog"}, |
{"Looping unten ","Looping down ","Looping Arrier","Looping bened."}, |
{"Looping links ","Looping left ","Looping Gauche","Looping links "}, |
{"Looping rechts","Looping right ","Looping Droite","Looping rechts"}, |
{"Gas Limit ","Throttle Limit","Limite Gaz ","Gas Limiet "}, |
{"Ansprechschw. ","Resp. Thresh. ","Seuil Reponse ","Drempelwaarde "}, |
{"Hysterese ","Hysteresis ","Hysteresis ","Hysterese "}, |
{"Umkehrp. Nick ","Turnover Nick ","Invers Roulis ","Nick geinvert."}, |
{"Umkehrp. Roll ","Turnover Roll ","Invers Tangage","Roll geinvert."}, |
// group 4 (hoehe) 37-50 |
{"Höhenregelung ","Altitude Ctrl ","Ctrl Altitude ","Hoogte Control"}, |
{"J:HBeg,N:Vario","Y:LimH,N:Vario","Y:LimH,N:Vario","Y:LimH,N:Vario"}, |
{"Schalter f. H.","use Sw. f.Setp","Swith Hauteur ","Schak. Hoogte "}, |
{"akust. Vario ","acoustic Vario","Vario Acoustic","Akoest. Vario "}, |
{"Sollhöhe ","Setpoint ","Hauteur Max ","Gewenste hoogt"}, |
{"Min. Gas ","min. throttle ","Gaz Min ","Minimaal gas "}, |
{"Höhe P ","Altitude P ","Altitude P ","Hoogte P "}, |
{"Luftdruck D ","Barometric D ","Pression D ","Barometr. D "}, |
{"Z-ACC ","ACC Z ","ACC Z ","ACC Z "}, |
{"Max. Höhe ","Max. Altitude ","Max. High ","Max. hoogte "}, |
{"Verstärkung/R ","gain/rate ","Gain/Frequence","Verst./rate "}, |
{"Schwebegas +/-","hoover varia. ","Var Vol Stat ","hoover varia. "}, |
{"GPS Z ","GPS Z ","GPS Z ","GPS Z "}, |
{"Stick Neutr. P","stick neutr. P","Pos Neutre Man","stick neutr. P"}, |
// group 5 : (kamera) 51-68 |
{"Nick S. Anst. ","nick serv ctrl","Asserv Tangage","nick serv ctrl"}, |
{"Nick Kompens. ","nick compens. ","Comp Tangage ","nick compens. "}, |
{"Nick Umkehren ","nick inv. dir.","Inverser Roul ","nick inv.rich."}, |
{"Nick Servo min","nick servo min","Servo Min ","nick servo min"}, |
{"Nick Servo max","nick servo max","Servo Max ","nick servo max"}, |
{"Nick Serv Filt","Nick Serv Filt","Nick Serv Filt","Nick Serv Filt"}, //FC0.87 |
{"Roll S. Anst. ","roll serv ctrl","Asserv Roulis ","roll serv ctrl"}, |
{"Roll Kompens. ","roll compens. ","Comp Tangage ","roll compens. "}, |
{"Roll Umkehren ","roll inv. dir.","Inverser Tang ","roll omkeren "}, |
{"Roll Servo min","roll servo min","Servo Min ","roll servo min"}, |
{"Roll Servo max","roll servo max","Servo Max ","roll servo max"}, |
{"Roll Serv Filt","Roll Serv Filt","Roll Serv Filt","Roll Serv Filt"}, //FC0.87 |
{"Anst. Geschw. ","servo refresh ","Taux Refresh ","Servo refresh "}, |
{"Manuelle Gesch","manuell Speed ","Vitesse Man. ","Snelh.handbed."}, |
{"Cam Richtung ","Cam Orient ","Cam Orient ","Camera richt. "}, |
{"Servo 3 ","Servo 3 ","Servo 3 ","Servo 3 "}, |
{"Servo 4 ","Servo 4 ","Servo 4 ","Servo 4 "}, |
{"Servo 5 ","Servo 5 ","Servo 5 ","Servo 5 "}, |
// group 6 : (navictrl) 69-88 "CH Hoogte " |
{"GPS ","enable GPS ","Activer GPS ","enable GPS "}, |
{"GPS Modus St. ","GPS mode contr","Def Mode GPS ","GPS mode contr"}, |
{"GPS Verstärk. ","GPS Gain ","Gain GPS ","GPS versterk. "}, |
{"GPS St. Schw. ","GPS stick thre","Seuil Manche ","GPS st. dremp."}, |
{"Min. Sat. ","Min. Sat. ","Nbre Min. Sat.","Min. Sat. "}, |
{"GPS-P ","GPS-P ","GPS-P ","GPS-P "}, |
{"GPS-I ","GPS-I ","GPS-I ","GPS-I "}, |
{"GPS-D ","GPS-D ","GPS-D ","GPS-D "}, |
{"P Limit ","Limit P ","Limite P ","Limiet P "}, |
{"I Limit ","Limit I ","Limite I ","Limiet I "}, |
{"D Limit ","Limit D ","Limite D ","Limiet D "}, |
{"GPS Acc ","GPS Acc ","Accel GPS ","GPS Acc "}, |
{"GPS Windkorr. ","GPS Wind Corr.","Correct Vent ","GPS Wind Corr."}, |
{"Bremswirkung ","Speed compens.","Compens Vit ","Remwerking "}, |
{"GPS max. Rad. ","GPS max.radius","Rayon GPS Max ","GPS max.radius"}, |
{"GPS Winkel Li.","GPS angl.limit","Limit Angl GPS","GPS hoek lim. "}, |
{"PH Login time ","PH login time ","Tps Memoris ","PH login tijd "}, |
{"Dynamic PH ","Dynamic PH ","Dynamic PH ","Dynamische PH "}, |
{"GPS m. Rad dPH","GPS m. Rad dPH","GPS m. Rad dPH","GPS m. Rad dPH"}, //FC0.87 |
{"CH Höhe ","CH Altitude ","CH Altitude ","CH Hoogte "}, |
// group 7 : (ausgaenge) 89-98 |
{"LED1 Bitmaske ","Out1 Bitmask ","Bitmask S1 ","Uitg1 Bitpatr."}, |
{" Timing ","Out1 Timing ","Horloge S1 ","Uitg1 Timing "}, |
{" sofort an","Activ ","Actif ","Direct aan "}, |
{" n.m.Motor","Act. wi. Motor","Actif Au Repos","Akt. motor uit"}, |
{"LED2 Bitmaske ","Out2 Bitmask ","Bitmask S2 ","Uitg2 Bitpatr."}, |
{" Timing ","Out2 Timing ","Horloge S2 ","Uitg2 Timing "}, |
{" sofort an","Activ ","Actif ","Direct aan "}, |
{" n.m.Motor","Act. wi. Motor","Actif Au Repos","Akt. motor uit"}, |
{"Out1 Vmin.Warn","Out1 undervolt","Al Undervoltag","Uitg1 ondersp."}, |
{"Out2 Vmin.Warn","Out2 undervolt","Al Undervoltag","Uitg2 ondersp."}, |
// group 8 : (verschiedenes) 99-113 |
{"Min. Gas ","min. throttle ","Gaz Min. ","minimaal gas "}, |
{"Max. Gas ","max. throttle ","Gaz Max. ","maximaal gas "}, |
{"Kompasswirkung","compass effect","Effet compas ","Kompas effect "}, |
{"Carefree St. ","Carefree Ctrl ","Carefree Ctrl ","Carefree Ctrl "}, |
{"Teachable Care","Teachable Care","Teachable Care","Teachable Care"}, |
{"Unterspannung ","undervoltage ","Sous Tension ","Onderspanning "}, |
{"Volt Referenz ","Volt Referenz ","Tension Ref ","Ref. spanning "}, |
{"Not Gas Zeit ","Emerg.Thr.Time","Duree secours ","Nood gas tijd "}, |
{"Not Gas ","Emerg.Throttle","Gaz de secours","Nood gas "}, |
{"Fails. CH Time","Fails. CH Time","Fails. CH Time","Fails. CH Tijd"}, |
{"Fails. Channel","Fails. Channel","Fails. Channel","Fails. Channel"}, //FC 0.87 |
{"k.Summer o Sen","n beep act TX ","n beep act TX ","n beep act TX "}, // Pos Change FC0.87 |
{"Vario fail Alt","Vario fail Alt","Vario fail Alt","Vario fail Alt"}, //FC 0.87 |
{"Compass Error ","Compass Error ","Compass Error ","Kompas Error "}, |
{"k.Start o.SD-K","n st. wtho SD ","n st. wtho SD ","n st. wtho SD "}, //FC 0.87 |
{"k.Start o.GPS ","n st. wtho GPS","n st. wtho GPD","n st. wtho GPS"}, //FC 0.88L |
// group 9 : (gyro) 114-126 |
{"Gyro P ","Gyro P ","Gyro P ","Gyro P "}, |
{"Gyro I ","Gyro I ","Gyro I ","Gyro I "}, |
{"Gyro D ","Gyro D ","Gyro D ","Gyro D "}, |
{"Gier P ","Lacet P ","Lacet P ","Gier P "}, |
{"Gier I ","Lacet I ","Lacet I ","Gier I "}, |
{"Dynamische St.","dynamic stabi.","Stab Dynamique","Dynamis. stab."}, |
{"Drehratenbeg. ","RotRate limit.","Limit Dit Rota","Toerental lim."}, |
{"ACC/Gyro Fak. ","ACC/Gyro Fact ","ACC/Gyro Fact ","ACC/Gyro Fact "}, |
{"ACC/Gyro Komp.","Comp ACC/Gyro ","Comp ACC/Gyro ","Comp ACC/Gyro "}, |
{"Hauptregler I ","Main I ","Regul Princ I ","Hoofdregel. I "}, |
{"Drifkompensat.","drift Compens.","Compens Deriv ","Drift compens."}, |
{"Gyro stab. ","Gyro stability","Gyro Stability","Gyro stabilit."}, |
{"Motor smooth ","Motor smooth ","Motor Smooth ","Motor smooth "}, |
// group 10: (benutzer) 127-134 |
{"Parameter 1 ","Parameter 1 ","Parameter 1 ","Parameter 1 "}, |
{"Parameter 2 ","Parameter 2 ","Parameter 2 ","Parameter 2 "}, |
{"Parameter 3 ","Parameter 3 ","Parameter 3 ","Parameter 3 "}, |
{"Parameter 4 ","Parameter 4 ","Parameter 4 ","Parameter 4 "}, |
{"Parameter 5 ","Parameter 5 ","Parameter 5 ","Parameter 5 "}, |
{"Parameter 6 ","Parameter 6 ","Parameter 6 ","Parameter 6 "}, |
{"Parameter 7 ","Parameter 7 ","Parameter 7 ","Parameter 7 "}, |
{"Parameter 8 ","Parameter 8 ","Parameter 8 ","Parameter 8 "}, |
// group 11: (achskopplung) 135-138 |
{"Achs(e.)koppl.","(De)Coupl Axes","(De)Coupl Axes","As koppeling "}, |
{"Gier pos. Kopp","Retroac lacet ","Retroac Lacet ","Gier pos. kop."}, |
{"Nick/Roll Kopp","Retro roul/tan","Retro Roul/Tan","Nick/Roll kop."}, |
{"Gier Korrektur","Correct lacet ","Correct Lacet ","Gier correctie"}, |
// group 12: (mixer) 139 |
{"Orientierung ","Orientierung ","Orientation "}, |
// group 13 (easy) 140-150 |
{"Höhenregelung ","Altitude Ctrl ","Ctrl Altitude ","Hoogte Contr. "}, |
{"Sollhöhe ","Setpoint ","Hauteur Max ","Gewenst.hoogte"}, |
{"Stick Neutr. P","stick neutr. P","Pos Neutre Man","Stick neutr. P"}, |
{"GPS ","enable GPS ","Activer GPS ","Enable GPS "}, |
{"GPS Modus St. ","GPS mode contr","Def mode GPS ","GPS mode contr"}, |
{"Dynamic PH ","Dynamic PH ","Dynamic PH ","Dynamic PH "}, |
{"CH Höhe ","CH High ","CH High ","CH hoogte "}, |
{"Carefree St. ","Carefree Ctrl ","Carefree Ctrl ","Carefree Ctrl "}, |
{"Teachable Care","Teachable Care","Teachable Care","Teachable Care"}, |
{"Motor Sich.Sch","Mot.Safety Sw.","Mot.Safety Sw.","Mot.saf.schak."}, |
{"Orientierung ","Orientation ","Orientierung ","Orientatie "}, |
}; |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/servo.c |
---|
0,0 → 1,153 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#include "cpu.h" |
#include <avr/io.h> |
#include <avr/interrupt.h> |
#include <avr/pgmspace.h> |
#include "lcd.h" |
#include "timer.h" |
#include "servo.h" |
#include "messages.h" |
#define SERVO_CORRECT 3.125 |
//-------------------------------------------------------------- |
// |
void servo_test (void) |
{ |
#ifdef HWVERSION3_9 |
uint8_t chg = 0; |
uint8_t Pos = 150; // 1,5mS |
OCR1A = 150 * SERVO_CORRECT; // Servomitte |
lcd_cls (); |
lcd_printp (PSTR(" Servo Tester "), 2); |
lcd_printp_at (7, 5, PSTR("%"), 0); |
lcd_printp_at (16, 5, PSTR("mS"), 0); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_3), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE3), 0); |
lcd_printp_at (18, 7, PSTR("\x19O\x18"), 0); |
lcd_rect(3, 23, 120, 8, 1); // +-150% Rahmen |
lcd_line(23,23,23,31,1); // -100% |
lcd_line(43,23,43,31,1); // -50% |
lcd_frect(61, 23, 3, 8, 1); // 0% |
lcd_line(83,23,83,31,1); // +50% |
lcd_line(103,23,103,31,1); // +100% |
write_ndigit_number_u (4, 5, 0, 3, 0,0); // Pulse width in % |
write_ndigit_number_u_100th(12, 5, 150, 3, 0); // Pulse width in ms |
do |
{ |
if ((get_key_press (1 << KEY_PLUS) || get_key_long_rpt_sp ((1 << KEY_PLUS), 3)) && (Pos < 225)) |
{ |
if (Pos < 150) |
lcd_frect ((63 - ((150 - Pos) * 0.8)), 24, 1, 6, 0); |
Pos++; |
if (Pos == 75 || Pos == 100 || Pos == 125 || Pos == 150 || Pos == 175 || Pos == 200 || Pos == 225) |
{ |
set_beep ( 200, 0x0080, BeepNormal); |
} |
if (Pos >= 225) |
Pos = 225; |
chg++; |
} |
else if ((get_key_press (1 << KEY_MINUS) || get_key_long_rpt_sp ((1 << KEY_MINUS), 3)) && (Pos > 75)) |
{ |
if (Pos > 150) |
lcd_frect ((((Pos - 150) * 0.8) + 63), 24, ((Pos - 150) * 0.8), 6, 0); |
Pos--; |
if (Pos == 75 || Pos == 100 || Pos == 125 || Pos == 150 || Pos == 175 || Pos == 200 || Pos == 225) |
{ |
set_beep ( 200, 0x0080, BeepNormal); |
} |
if (Pos <= 75) |
Pos = 75; |
chg++; |
} |
else if (get_key_press (1 << KEY_ENTER)) |
{ |
lcd_frect (4, 24, 118, 6, 0); // Balken löschen |
lcd_frect(61, 23, 3, 8, 1); // 0% |
Pos = 150; |
set_beep ( 200, 0x0080, BeepNormal); |
chg++; |
} |
if (chg) |
{ |
chg = 0; |
if (Pos >= 150) |
{ |
lcd_frect (63, 24, ((Pos - 150) * 0.8), 6, 1); |
write_ndigit_number_u (4, 5, ((Pos - 150) * 2), 3, 0,0); // Pulse width in % |
lcd_frect(62, 23, 2, 8, 1); // 0% |
} |
else |
{ |
lcd_frect (63 - ((150 - Pos) * 0.8), 24, ((150 - Pos) * 0.8), 6, 1); |
write_ndigit_number_u (4, 5, ((150 - Pos) * 2), 3, 0,0); // Pulse width in % |
lcd_frect(61, 23, 2, 8, 1); // 0% |
} |
write_ndigit_number_u_100th(12, 5, Pos, 3, 0); // Pulse width in ms |
lcd_line(3, 23,3, 31,1); // -150% |
lcd_line(23, 23,23, 31,1); // -100% |
lcd_line(43, 23,43, 31,1); // -50% |
lcd_line(83, 23,83, 31,1); // +50% |
lcd_line(103,23,103,31,1); // +100% |
lcd_line(123,23,123,31,1); // +150% |
OCR1A = Pos * SERVO_CORRECT; // Servostellung |
} |
} |
while (!get_key_press (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
#endif |
} |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/servo.h |
---|
0,0 → 1,40 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#ifndef _SERVO_H |
#define _SERVO_H |
void servo_test (void); |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/setup.c |
---|
0,0 → 1,2939 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#include "cpu.h" |
#include <avr/io.h> |
#include <avr/interrupt.h> |
#include <avr/pgmspace.h> |
#include <string.h> |
#include <util/delay.h> |
#include "main.h" |
#include "setup.h" |
#include "lcd.h" |
#include "eeprom.h" |
#include "timer.h" |
#include "menu.h" |
#include "Wi232.h" |
#include "bluetooth.h" |
#include "connect.h" |
#include "lipo.h" |
#include "messages.h" |
#include "eeprom.h" |
#include "tracking.h" |
#include "bluetooth.h" |
#include "uart1.h" |
uint8_t spalte; |
uint8_t mmode; |
uint8_t edit; |
uint8_t LCD_Orientation; |
uint8_t edit = 0; |
uint8_t LCD_Change = 0; |
uint8_t PKT_Change = 0; |
uint16_t Pre; |
uint16_t Pre16; |
char EditString[21]; |
uint8_t bt_name_len; |
uint8_t length_tmp; |
//-------------------------------------------------------------- |
#define ITEMS_PKT 12 |
prog_char param_menuitems_pkt[ITEMS_PKT][NUM_LANG][18]= // zeilen,zeichen+1 |
// German, English, French, Dutch |
{ |
{"Verbindung zum MK","connection to MK "," connexion a MK " ,"Aansluiting op MK"}, |
{"Anzeige \x1d","Display \x1d","d'affichage \x1d","Display \x1d"}, |
{"Wi.232 \x1d","Wi.232 \x1d","Wi.232 \x1d","Wi.232 \x1d"}, |
{"BTM-222 \x1d","BTM-222 \x1d","BTM-222 \x1d","BTM-222 \x1d"}, |
{"Antennen Track. \x1d","antenna tracking\x1d","antenna tracking\x1d","antenna tracking\x1d"}, |
{"OSD Anzeige \x1d","OSD screen \x1d","OSD screen \x1d","OSD screen \x1d"}, |
{"GPS \x1d","GPS \x1d","GPS \x1d","GPS \x1d"}, |
{"Follow Me \x1d","Follow Me \x1d","Follow Me \x1d","Follow Me \x1d"}, |
{"PKT-Akku \x1d","PKT-Accu \x1d","PKT-Accu \x1d","PKT-Accu \x1d"}, |
{"PKT Update ","PKT Update ","PKT Mise a jour ","PKT Update "}, |
{"Debug PKT ","Debug PKT ","Debug PKT ","Debug PKT "}, |
{"EEProm Reset ","EEProm Reset ","EEProm Reinitiali","EEProm Reset "}, |
}; |
#define ITEMS_LCD 8 |
prog_char param_menuitems_lcd[ITEMS_LCD][NUM_LANG][18]= // zeilen,zeichen+1 |
// German, English, French, Dutch |
{ |
{"Infos beim Start ","info at startup ","Infor. sur lancer","info bij opstart "}, |
{"OSD Empfangsausf.","OSD receive Error","OSD receive Error","OSD receive Error"}, |
{"Sprache ","language ","Langue ","taal "}, |
{"Licht aus nach...","light off after ","Lumiere au bout ","licht uit na "}, |
{"Helligkeit ","brightness ","luminosite ","helderheid "}, |
{"Kontrast ","contrast ","contraste ","contrast "}, |
{"Normal/Invers ","normal/inverted ","Normal / inverse ","Normal/inverted "}, |
{"Orientierung ","orientation ","orientation ","orientatie "}, |
}; |
#define ITEMS_WI 9 |
prog_char param_menuitems_wi[ITEMS_WI][NUM_LANG][18]= // zeilen,zeichen+1 |
// German, English, French, Dutch |
{ |
{"Modul eingebaut? ","module built in? ","Module installe ","Module geinstal.?"}, |
{"TX/RX Kanal ","TX/RX Channel ","TX/RX Channel ","TX/RX Channel "}, |
{"NetW. Gruppe ","NetW. Group ","NetW. Group ","NetW. Group "}, |
{"NetW. Mode ","NetW. Mode ","NetW. Mode ","NetW. Mode "}, |
{"TX Timeout ","TX Timeout ","TX Timeout ","TX Timeout "}, |
{"TX MTU ","TX MTU ","TX MTU ","TX MTU "}, |
{"Baudrate Wi232/BT","Baudrate Wi232/BT","Baudrate Wi232/BT","Baudrate Wi232/BT"}, |
{"Initialisieren ","initialize ","initialiser ","Initialize "}, |
{"Konfig. mit PC ","config. with PC ","Config. avec PC ","Config. met PC "}, |
}; |
#define ITEMS_BT 5 |
prog_char param_menuitems_bt[ITEMS_BT][NUM_LANG][18]= // zeilen,zeichen+1 |
// German, English, French, Dutch |
{ |
{"Modul eingebaut? ","module built in? ","Module installe ","module geinstall?"}, |
{"Name ","name ","Nom ","Naam "}, |
{"Pin ","pin ","Pin ","Pin "}, |
{"Initialisieren ","initialize ","initialiser ","Initialize "}, |
{"Konfig. mit PC ","config. with PC ","Config. avec PC ","Config. met PC "}, |
}; |
#define ITEMS_Accu 2 |
prog_char param_menuitems_Accu[ITEMS_Accu][NUM_LANG][18]= // zeilen,zeichen+1 |
// German, English, French, Dutch |
{ |
{"PKT-Akkutyp ","PKT-Accutyp ","PKT-Type de batt.","PKT-batterij type"}, |
{"PKT Akku Messung ","PKT AccuMeasure ","batt. de mesure ","PKT batt. meting "}, |
}; |
#define ITEMS_GPS 6 |
prog_char param_menuitems_GPS[ITEMS_GPS][NUM_LANG][18]= // zeilen,zeichen+1 |
// German, English, French, Dutch |
{ |
{"wähle GPS Maus ","select GPS mouse ","select GPS mouse ","select GPS mouse "}, |
{"Suche GPS Maus ","search GPS mouse ","search GPS mouse ","search GPS mouse "}, |
{"GPS Maus Typ ","GPS mouse typ ","GPS mouse typ ","GPS mouse typ "}, |
{"GPS Maus aktiv? ","GPS mouse activ? ","GPS mouse activ? ","GPS mouse activ? "}, |
{"Zeige GPS Device ","show GPS device ","show GPS device ","show GPS device "}, |
{"GPS Daten ","GPS data ","GPS data ","GPS data "}, |
}; |
#define ITEMS_FOLLOWME 3 |
prog_char param_menuitems_FOLLOWME[ITEMS_GPS][NUM_LANG][18]= // zeilen,zeichen+1 |
// German, English, French, Dutch |
{ |
{"FollowMe Refresh","FollowMe Refresh","FollowMe Refresh","FollowMe Refresh"}, |
{"FollowMe Speed ","FollowMe Speed ","FollowMe Speed ","FollowMe Speed "}, |
{"Toleranz Radius ","Tolerance Radius","Tolerance Radius","Tolerance Radius"}, |
}; |
#define ITEMS_OSD 10 |
prog_char param_menuitems_OSD[ITEMS_OSD][NUM_LANG][18]= // zeilen,zeichen+1 |
// German, English, French, Dutch |
{ |
{"OSD Anzeige Var. ","OSD screenmode ","OSD screenmode ","OSD screenmode "}, |
{"OUT1/2 Format ","OUT1/2 format ","OUT1/2 format ","OUT1/2 format "}, |
{"OUT1/2 Polarität ","OUT1/2 polarity ","OUT1/2 polarity ","OUT1/2 polarity "}, |
{"Navi Daten an SV2","Navi data to SV2 ","Navi data to SV2 ","Navi data to SV2 "}, |
{"Max. Sinkrate m/s","max fallspeed m/s","max fallspeed m/s","max fallspeed m/s"}, |
{"Variometer Beep ","Variometer beep ","Variometer beep ","Variometer beep "}, |
{"Home aus MK Sicht","home from MK view","home from MK view","home from MK view"}, |
{"MK LowBat Warnung","MK LowBat warning","MK LowBat Attent ","MK LoBat alarm "}, |
{"MK mAh Warnung","MK mAh warning ","MK mAh Attent ","MK mAh alarm "}, |
{"MK Volt Balken","MK volt bargraph ","MK volt bargraph ","MK volt bargraph "}, |
}; |
//-------------------------------------------------------------- |
void Show_Error_HW12(void) |
{ |
lcd_cls(); |
lcd_printp_at (0,3,PSTR(" Mit Hardware 1.x "), 2); |
lcd_printp_at (0,4,PSTR(" nicht möglich "), 2); |
_delay_ms(1000); |
} |
//-------------------------------------------------------------- |
uint8_t Edit_Int10th_Value(uint8_t Value, uint8_t min, uint8_t max,uint8_t Text) |
{ |
Pre = Value; |
lcd_cls(); |
// lcd_printp_at (0, 2, Text, 0); |
lcd_puts_at(0, 2, strGet(Text), 0); |
write_ndigit_number_u_10th (16, 2,Value, 3, 0,0); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_2), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE2), 0); |
do |
{ |
if ((get_key_press (1 << KEY_PLUS) || get_key_long_rpt_sp ((1 << KEY_PLUS), 3)) && (Value < max)) |
{ |
edit = 1; |
Value++; |
write_ndigit_number_u_10th (16, 2,Value, 3, 0,0); |
} |
if ((get_key_press (1 << KEY_MINUS) || get_key_long_rpt_sp ((1 << KEY_MINUS), 3)) && (Value > min)) |
{ |
edit = 1; |
Value--; |
write_ndigit_number_u_10th (16, 2,Value, 3, 0,0); |
} |
if (get_key_press (1 << KEY_ENTER)) |
return Value; |
} |
while (!get_key_press (1 << KEY_ESC)); |
{ |
get_key_press(KEY_ALL); |
edit = 0; |
return Pre; |
} |
} |
//-------------------------------------------------------------- |
uint8_t Edit_Int_Value(uint8_t Value, uint8_t min, uint8_t max,uint8_t Text) |
{ |
lcd_cls(); |
// lcd_printp_at (0, 2, Text, 0); |
lcd_puts_at(0, 2, strGet(Text), 0); |
Pre = Value; |
write_ndigit_number_u (16, 2, Value, 3, 0,0); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_2), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE2), 0); |
do |
{ |
if ((get_key_press (1 << KEY_PLUS) || get_key_long_rpt_sp ((1 << KEY_PLUS), 2)) && (Value < max)) |
{ |
edit = 1; |
Value++; |
write_ndigit_number_u (16, 2,Value, 3, 0,0); |
} |
if ((get_key_press (1 << KEY_MINUS) || get_key_long_rpt_sp ((1 << KEY_MINUS), 2)) && (Value > min)) |
{ |
edit = 1; |
Value--; |
write_ndigit_number_u (16, 2,Value, 3, 0,0); |
} |
if (get_key_press (1 << KEY_ENTER)) |
return Value; |
} |
while (!get_key_press (1 << KEY_ESC)); |
{ |
get_key_press(KEY_ALL); |
edit = 0; |
return Pre; |
} |
} |
//-------------------------------------------------------------- |
uint16_t Edit_Int16_Value(uint16_t Value, uint16_t min, uint16_t max,uint8_t Text) |
{ |
lcd_cls(); |
// lcd_printp_at (0, 2, Text, 0); |
lcd_puts_at(0, 2, strGet(Text), 0); |
Pre = Value; |
write_ndigit_number_u (16, 2, Value, 5, 0,0); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_2), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE2), 0); |
do |
{ |
if ((get_key_press (1 << KEY_PLUS) || get_key_long_rpt_sp ((1 << KEY_PLUS), 3)) && (Value < max)) |
{ |
edit = 1; |
Value++; |
write_ndigit_number_u (16, 2,Value, 5, 0,0); |
} |
if ((get_key_press (1 << KEY_MINUS) || get_key_long_rpt_sp ((1 << KEY_MINUS), 3)) && (Value > min)) |
{ |
edit = 1; |
Value--; |
write_ndigit_number_u (16, 2,Value, 5, 0,0); |
} |
if (get_key_press (1 << KEY_ENTER)) |
return Value; |
} |
while (!get_key_press (1 << KEY_ESC)); |
{ |
get_key_press(KEY_ALL); |
edit = 0; |
return Pre; |
} |
} |
#if defined HWVERSION3_9 |
//-------------------------------------------------------------- |
uint8_t ChangeWi_SV2(uint8_t Value) |
{ |
Pre = Value; |
lcd_cls(); |
// lcd_printp_at (0, 1, PSTR("Verbinde das PKT mit"), 0); |
// lcd_printp_at (0, 2, PSTR("dem MK über:"), 0); |
lcd_puts_at(0, 1, strGet(CONNECT1), 0); |
lcd_puts_at(0, 2, strGet(CONNECT2), 0); |
if(UseWi == false) |
{ |
// lcd_printp_at (0, 0, PSTR("Verbinde das PKT mit "), 0); |
// lcd_printp_at (0, 1, PSTR("dem MK über: Kabel, "), 0); |
// lcd_printp_at (0, 2, PSTR("da kein Wi.232 Modul "), 0); |
// lcd_printp_at (0, 3, PSTR("eingebaut ist. "), 0); |
// lcd_printp_at (0, 4, PSTR("Wenn doch, dann bitte"), 0); |
// lcd_printp_at (0, 5, PSTR("das Modul zuerst im "), 0); |
// lcd_printp_at (0, 6, PSTR("Setupmenü aktivieren."), 0); |
lcd_puts_at(0, 1, strGet(CONNECT1), 0); |
lcd_puts_at(0, 2, strGet(CONNECT4), 0); |
lcd_puts_at(0, 1, strGet(CONNECT5), 0); |
lcd_puts_at(0, 2, strGet(CONNECT6), 0); |
lcd_puts_at(0, 1, strGet(CONNECT7), 0); |
lcd_puts_at(0, 2, strGet(CONNECT8), 0); |
lcd_puts_at(0, 1, strGet(CONNECT9), 0); |
// lcd_printp_at (12, 7, PSTR("Ende"), 0); |
lcd_puts_at(12, 7, strGet(ENDE), 0); |
while (!get_key_press (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
edit = 0; |
return Pre; |
} |
else |
{ |
switch (Value) |
{ |
case 0x0 :lcd_printp_at (14, 2, PSTR("Wi232"), 0); |
break; |
case 0x1 : lcd_puts_at(14, 2, strGet(KABEL), 0); |
//lcd_printp_at (14, 2, PSTR("Kabel"), 0); |
break; |
break; |
} |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_2), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE2), 0); |
do |
{ |
if(UseWi == true) |
{ |
if ((get_key_press (1 << KEY_PLUS)) && (Value == 0)) |
{ |
edit = 1; |
Value = 1; |
// lcd_printp_at (14, 2, PSTR("Kabel"), 0); |
lcd_puts_at(14, 2, strGet(KABEL), 0); |
Change_Output(Uart02FC); |
} |
if ((get_key_press (1 << KEY_MINUS)) && (Value == 1)) |
{ |
edit = 1; |
Value = 0; |
lcd_printp_at (14, 2, PSTR("Wi232"), 0); |
Change_Output(Uart02Wi); |
} |
if (get_key_press (1 << KEY_ENTER)) |
{ |
// lcd_printp_at (0, 4, PSTR("Sie müssen das PKT"), 0); |
// lcd_printp_at (0, 5, PSTR("jetzt neu starten!"), 0); |
lcd_puts_at(0, 4, strGet(CONNECT10), 0); |
lcd_puts_at(0, 5, strGet(CONNECT11), 0); |
lcd_cls_line (0, 7, 18); |
while (!get_key_press (1 << KEY_ENTER)); |
return Value; |
} |
} |
} |
while (!get_key_press (1 << KEY_ESC)); |
} |
get_key_press(KEY_ALL); |
edit = 0; |
return Pre; |
} |
#endif |
#if defined HWVERSION3_9 || defined HWVERSION1_3W |
//-------------------------------------------------------------- |
uint8_t Edit_Wi_NetMode_Value(uint8_t Value) |
{ |
Pre = Value; |
lcd_cls(); |
// lcd_printp_at (0, 2, PSTR("Wi NetW. Mode:"), 0); |
lcd_puts_at(0, 2, strGet(WINETWM), 0); |
switch (Value) |
{ |
case 0x0 :lcd_puts_at(15, 2, strGet(SLAVE), 0);//lcd_printp_at (15, 2, PSTR("Slave "), 0); |
break; |
case 0x1 :lcd_puts_at(15, 2, strGet(NORMAL), 0);//lcd_printp_at (15, 2, PSTR("Normal"), 0); |
break; |
break; |
} |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_2), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE2), 0); |
do |
{ |
if ((get_key_press (1 << KEY_PLUS)) && (Value == 0)) |
{ |
edit = 1; |
Value = NetMode_Normal; |
// lcd_printp_at (15, 2, PSTR("Normal"), 0); |
lcd_puts_at(15, 2, strGet(NORMAL), 0); |
} |
if ((get_key_press (1 << KEY_MINUS)) && (Value == 1)) |
{ |
edit = 1; |
Value = NetMode_Slave; |
// lcd_printp_at (15, 2, PSTR("Slave "), 0); |
lcd_puts_at(15, 2, strGet(SLAVE), 0); |
} |
if (get_key_press (1 << KEY_ENTER)) |
return Value; |
} |
while (!get_key_press (1 << KEY_ESC)); |
{ |
get_key_press(KEY_ALL); |
edit = 0; |
return Pre; |
} |
} |
#endif |
//-------------------------------------------------------------- |
uint8_t Edit_OnOff(uint8_t Value, uint8_t min, uint8_t max,uint8_t Text) |
{ |
Pre = Value; |
lcd_cls(); |
// lcd_printp_at (0, 2,Text, 0); |
lcd_puts_at(0, 2, strGet(Text), 0); |
switch (Value) |
{ |
case false :lcd_puts_at(17, 2, strGet(OFF), 0);//lcd_printp_at (17, 2, PSTR("Aus"), 0); |
break; |
case true :lcd_puts_at(17, 2, strGet(ON), 0);//cd_printp_at (17, 2, PSTR("Ein"), 0); |
break; |
break; |
} |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_2), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE2), 0); |
do |
{ |
if ((get_key_press (1 << KEY_PLUS)) && (Value == 0)) |
{ |
Value = 1; |
edit =1; |
// lcd_printp_at (17, 2, PSTR("Ein"), 0); |
lcd_puts_at(17, 2, strGet(ON), 0); |
} |
if ((get_key_press (1 << KEY_MINUS)) && (Value == 1)) |
{ |
Value = 0; |
edit =1; |
// lcd_printp_at (17, 2, PSTR("Aus"), 0); |
lcd_puts_at(17, 2, strGet(OFF), 0); |
} |
if (get_key_press (1 << KEY_ENTER)) |
{ |
// edit = 1; |
// |
// PKT_StartInfo = Value; |
// WriteParameter(); |
return Value; |
} |
} |
while (!get_key_press (1 << KEY_ESC)); |
{ |
get_key_press(KEY_ALL); |
edit = 0; |
// PKT_StartInfo = Pre; |
return Pre; |
} |
} |
//-------------------------------------------------------------- |
uint8_t Edit_YesNo(uint8_t Value, uint8_t min, uint8_t max,uint8_t Text) |
{ |
Pre = Value; |
lcd_cls(); |
// lcd_printp_at (0, 2,Text, 0); |
lcd_puts_at(0, 2, strGet(Text), 0); |
switch (Value) |
{ |
case false :lcd_puts_at(17, 2, strGet(NOO), 0);//lcd_printp_at (17, 2, PSTR("Aus"), 0); |
break; |
case true :lcd_puts_at(17, 2, strGet(YES), 0);//cd_printp_at (17, 2, PSTR("Ein"), 0); |
break; |
break; |
} |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_2), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE2), 0); |
do |
{ |
if ((get_key_press (1 << KEY_PLUS)) && (Value == 0)) |
{ |
Value = 1; |
edit = 1; |
// lcd_printp_at (17, 2, PSTR("Ein"), 0); |
lcd_puts_at(17, 2, strGet(YES), 0); |
} |
if ((get_key_press (1 << KEY_MINUS)) && (Value == 1)) |
{ |
Value = 0; |
edit = 1; |
// lcd_printp_at (17, 2, PSTR("Aus"), 0); |
lcd_puts_at(17, 2, strGet(NOO), 0); |
} |
if (get_key_press (1 << KEY_ENTER)) |
{ |
// edit = 1; |
// PKT_StartInfo = Value; |
// WriteParameter(); |
return Value; |
} |
} |
while (!get_key_press (1 << KEY_ESC)); |
{ |
get_key_press(KEY_ALL); |
edit = 0; |
// PKT_StartInfo = Pre; |
return Pre; |
} |
} |
//-------------------------------------------------------------- |
//uint8_t Edit_Baudrate(uint8_t Value, uint8_t min, uint8_t max,const char *Text) |
uint8_t Edit_Baudrate(uint8_t Value, uint8_t min, uint8_t max,uint8_t Text) |
{ |
Pre = Value; |
lcd_cls(); |
lcd_puts_at(0, 2,strGet(Text), 0); |
switch (Value) |
{ |
case 0x0 : lcd_printp_at(15, 2, PSTR("2400 "), 0); |
break; |
case 0x1 : lcd_printp_at(15, 2, PSTR("9600 "), 0); |
break; |
case 0x2 : lcd_printp_at(15, 2, PSTR("19200 "), 0); |
break; |
case 0x3 : lcd_printp_at(15, 2, PSTR("38400 "), 0); |
break; |
case 0x4 : lcd_printp_at(15, 2, PSTR("57600 "), 0); |
break; |
case 0x5 : lcd_printp_at(15, 2, PSTR("115200"), 0); |
break; |
break; |
} |
lcd_puts_at(0, 7, strGet(KEYLINE2), 0); |
do |
{ |
if ((get_key_press (1 << KEY_PLUS)) && (Value < max)) |
{ |
edit = 1; |
Value++; |
//baudrate = Value; |
switch (Value) |
{ |
case 0x0 : lcd_printp_at(15, 2, PSTR("2400 "), 0); |
break; |
case 0x1 : lcd_printp_at(15, 2, PSTR("9600 "), 0); |
break; |
case 0x2 : lcd_printp_at(15, 2, PSTR("19200 "), 0); |
break; |
case 0x3 : lcd_printp_at(15, 2, PSTR("38400 "), 0); |
break; |
case 0x4 : lcd_printp_at(15, 2, PSTR("57600 "), 0); |
break; |
case 0x5 : lcd_printp_at(15, 2, PSTR("115200"), 0); |
break; |
break; |
} |
} |
if ((get_key_press (1 << KEY_MINUS)) && (Value > min)) |
{ |
edit = 1; |
Value--; |
//Baudrate = Value; |
switch (Value) |
{ |
case 0x0 : lcd_printp_at(15, 2, PSTR("2400 "), 0); |
break; |
case 0x1 : lcd_printp_at(15, 2, PSTR("9600 "), 0); |
break; |
case 0x2 : lcd_printp_at(15, 2, PSTR("19200 "), 0); |
break; |
case 0x3 : lcd_printp_at(15, 2, PSTR("38400 "), 0); |
break; |
case 0x4 : lcd_printp_at(15, 2, PSTR("57600 "), 0); |
break; |
case 0x5 : lcd_printp_at(15, 2, PSTR("115200"), 0); |
break; |
break; |
} |
} |
if (get_key_press (1 << KEY_ENTER)) |
return Value; |
} |
while (!get_key_press (1 << KEY_ESC)); |
{ |
get_key_press(KEY_ALL); |
edit = 0; |
return Pre; |
} |
} |
//-------------------------------------------------------------- |
//uint8_t Edit_Language(uint8_t Value, uint8_t min, uint8_t max,const char *Text) |
uint8_t Edit_Language(uint8_t Value, uint8_t min, uint8_t max,uint8_t Text) |
{ |
Pre = Value; |
lcd_cls(); |
// lcd_printp_at (0, 2, Text, 0); |
lcd_puts_at(0, 2,strGet(Text), 0); |
switch (Value) |
{ |
case |
0x0 : lcd_puts_at(10, 2, strGet(DEUTSCH), 0);//lcd_printp_at (14, 2, PSTR("Deutsch"), 0); |
break; |
case 0x1 : lcd_puts_at(10, 2, strGet(ENGLISCH), 0);//lcd_printp_at (14, 2, PSTR("English"), 0); |
break; |
case 0x2 : lcd_puts_at(10, 2, strGet(FRANCE), 0);//lcd_printp_at (14, 2, PSTR("France "), 0); |
break; |
case 0x3 : lcd_puts_at(10, 2, strGet(NETHERL), 0);//lcd_printp_at (14, 2, PSTR("Netherl"), 0); |
break; |
break; |
} |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_2), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE2), 0); |
do |
{ |
if ((get_key_press (1 << KEY_PLUS)) && (Value < max)) |
{ |
edit = 1; |
Value++; |
//DisplayLanguage = Value; |
switch (Value) |
{ |
case 0x0 : lcd_puts_at(10, 2, strGet(DEUTSCH), 0);//lcd_printp_at (14, 2, PSTR("Deutsch"), 0); |
break; |
case 0x1 : lcd_puts_at(10, 2, strGet(ENGLISCH), 0);//lcd_printp_at (14, 2, PSTR("English"), 0); |
break; |
case 0x2 : lcd_puts_at(10, 2, strGet(FRANCE), 0);//lcd_printp_at (14, 2, PSTR("France "), 0); |
break; |
case 0x3 : lcd_puts_at(10, 2, strGet(NETHERL), 0);//lcd_printp_at (14, 2, PSTR("Netherl"), 0); |
break; |
break; |
} |
} |
if ((get_key_press (1 << KEY_MINUS)) && (Value > min)) |
{ |
edit = 1; |
Value--; |
//DisplayLanguage = Value; |
switch (Value) |
{ |
case 0x0 : lcd_puts_at(10, 2, strGet(DEUTSCH), 0);//lcd_printp_at (14, 2, PSTR("Deutsch"), 0); |
break; |
case 0x1 : lcd_puts_at(10, 2, strGet(ENGLISCH), 0);//lcd_printp_at (14, 2, PSTR("English"), 0); |
break; |
case 0x2 : lcd_puts_at(10, 2, strGet(FRANCE), 0);//lcd_printp_at (14, 2, PSTR("France "), 0); |
break; |
case 0x3 : lcd_puts_at(10, 2, strGet(NETHERL), 0);//lcd_printp_at (14, 2, PSTR("Netherl"), 0); |
break; |
break; |
} |
} |
if (get_key_press (1 << KEY_ENTER)) |
return Value; |
} |
while (!get_key_press (1 << KEY_ESC)); |
{ |
get_key_press(KEY_ALL); |
edit = 0; |
return Pre; |
} |
} |
//-------------------------------------------------------------- |
uint8_t Edit_Orientation(uint8_t Value, uint8_t min, uint8_t max,uint8_t Text) |
{ |
Pre = Value; |
lcd_cls(); |
// lcd_printp_at (0, 2, Text, 0); |
lcd_puts_at(0, 2, strGet(Text), 0); |
switch (Value) |
{ |
case 0x0 :lcd_puts_at(14, 2, strGet(NORMAL), 0);//lcd_printp_at (14, 2, PSTR("Normal "), 0); |
break; |
case 0x4 :lcd_puts_at(14, 2, strGet(REVERSE), 0);//lcd_printp_at (14, 2, PSTR("Reverse"), 0); |
break; |
break; |
} |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_2), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE2), 0); |
do |
{ |
if ((get_key_press (1 << KEY_PLUS)) && (Value == 0)) |
{ |
Value=4; |
// lcd_printp_at (14, 2, PSTR("Reverse"), 0); |
lcd_puts_at(14, 2, strGet(REVERSE), 0); |
} |
if ((get_key_press (1 << KEY_MINUS)) && (Value == 4)) |
{ |
Value = 0; |
// lcd_printp_at (14, 2, PSTR("Normal "), 0); |
lcd_puts_at(14, 2, strGet(NORMAL), 0); |
} |
if (get_key_press (1 << KEY_ENTER)) |
{ |
edit = 1; |
cli(); |
clr_A0 (); |
if (Value == 0) |
{ |
send_byte (0xA1); // normal |
send_byte (0xC0); // normal |
} |
else |
{ |
send_byte (0xA0); // reverse |
send_byte (0xC8); // reverse |
} |
set_A0 (); |
sei(); |
LCD_Orientation = Value; |
WriteParameter(); |
return Value; |
} |
} |
while (!get_key_press (1 << KEY_ESC)); |
{ |
get_key_press(KEY_ALL); |
edit = 0; |
return Pre; |
} |
} |
//-------------------------------------------------------------- |
uint8_t Edit_DisplayMode(uint8_t Value, uint8_t min, uint8_t max,uint8_t Text) |
{ |
Pre = Value; |
lcd_cls(); |
//lcd_printp_at (0, 2, Text, 0); |
lcd_puts_at(0, 2, strGet(Text), 0); |
switch (Value) |
{ |
case 0x0 :lcd_puts_at(14, 2, strGet(NORMAL), 0);//lcd_printp_at (14, 2, PSTR("Normal "), 0); |
break; |
case 0x4 :lcd_puts_at(14, 2, strGet(REVERSE), 0);//lcd_printp_at (14, 2, PSTR("Reverse"), 0); |
break; |
break; |
} |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_2), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE2), 0); |
do |
{ |
if ((get_key_press (1 << KEY_PLUS)) && (Value == 0)) |
{ |
Value=4; |
// lcd_printp_at (14, 2, PSTR("Inverse"), 0); |
lcd_puts_at(14, 2, strGet(REVERSE), 0); |
} |
if ((get_key_press (1 << KEY_MINUS)) && (Value == 4)) |
{ |
Value=0; |
// lcd_printp_at (14, 2, PSTR("Normal "), 0); |
lcd_puts_at(14, 2, strGet(NORMAL), 0); |
} |
if (get_key_press (1 << KEY_ENTER)) |
{ |
edit = 1; |
cli(); |
clr_A0 (); |
if (Value == 0) |
send_byte (0xA6); // normal |
else |
send_byte (0xA7); // inverse |
set_A0 (); |
sei(); |
LCD_DisplayMode = Value; |
WriteParameter(); |
return Value; |
} |
} |
while (!get_key_press (1 << KEY_ESC)); |
{ |
get_key_press(KEY_ALL); |
edit = 0; |
LCD_DisplayMode = Pre; |
return Pre; |
} |
} |
//-------------------------------------------------------------- |
uint8_t Edit_DisplayKontrast(uint8_t Value, uint8_t min, uint8_t max,uint8_t Text) |
{ |
Pre = Value; |
lcd_cls(); |
// lcd_printp_at (0, 2, Text, 0); |
lcd_puts_at(0, 2, strGet(Text), 0); |
write_ndigit_number_u (16, 2, Value, 3, 0,0); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_2), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE2), 0); |
do |
{ |
write_ndigit_number_u (16, 2,Value, 3, 0,0); |
lcd_frect ((8*0), (8*4), (Value * (16*8) / 64), 6, 1); |
if ((get_key_press (1 << KEY_PLUS) || get_key_long_rpt_sp ((1 << KEY_PLUS), 2)) && (Value < max)) |
{ |
Value++; |
if (Value >= max) |
{ |
Value = max; |
set_beep ( 200, 0x0080, BeepNormal); |
} |
else |
{ |
cli(); |
clr_A0 (); |
send_byte (0x81); |
send_byte (Value); // Daten zum LCD senden |
set_A0 (); |
sei(); |
} |
} |
if ((get_key_press (1 << KEY_MINUS) || get_key_long_rpt_sp ((1 << KEY_MINUS), 2)) && (Value > min)) |
{ |
lcd_frect (((Value - 1) * (16*8) / 64), (8*4), (16*8), 6, 0); |
Value--; |
if (Value == min) |
{ |
Value = min; |
set_beep ( 200, 0x0080, BeepNormal); |
} |
else |
{ |
// edit = 1; |
cli(); |
clr_A0 (); |
send_byte (0x81); |
send_byte (Value); // Daten zum LCD senden |
set_A0 (); |
sei(); |
} |
} |
write_ndigit_number_u (16, 2,Value, 3, 0,0); |
if (get_key_press (1 << KEY_ENTER)) |
{ |
edit = 1; |
LCD_Kontrast = Value; |
WriteParameter(); |
return Value; |
} |
} |
while (!get_key_press (1 << KEY_ESC)); |
{ |
get_key_press(KEY_ALL); |
cli(); |
clr_A0 (); |
send_byte (0x81); |
send_byte (Pre); // Daten zum LCD senden |
set_A0 (); |
sei(); |
edit = 0; |
LCD_Kontrast = Pre; |
WriteParameter(); |
return Pre; |
} |
} |
//-------------------------------------------------------------- |
uint8_t Edit_DisplayHelligkeit(uint8_t Value, uint8_t min, uint8_t max, uint8_t Text) |
{ |
float ValCorr = 2.55; // (Value * ValCorr) maximal 255 |
Pre = Value; |
OCR2A = Value * ValCorr; |
lcd_cls(); |
// lcd_printp_at (0, 2, Text, 0); |
lcd_puts_at(0, 2, strGet(Text), 0); |
write_ndigit_number_u (16, 2, Value, 3, 0,0); |
lcd_printp_at (17, 2, PSTR("%"), 0); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_2), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE2), 0); |
do |
{ |
write_ndigit_number_u (16, 2,Value, 3, 0,0); |
lcd_frect ((8*0), (8*4), (Value * (16*8) / 100), 6, 1); |
if ((get_key_press (1 << KEY_PLUS) || get_key_long_rpt_sp ((1 << KEY_PLUS), 3)) && (Value < max)) |
{ |
Value++; |
if (Value >= max) |
{ |
Value = max; |
set_beep ( 200, 0x0080, BeepNormal); |
} |
else |
OCR2A = Value * ValCorr; |
} |
if ((get_key_press (1 << KEY_MINUS) || get_key_long_rpt_sp ((1 << KEY_MINUS), 3)) && (Value > min)) |
{ |
lcd_frect (((Value - 1) * (16*8) / 100), (8*4), (16*8), 6, 0); |
Value--; |
if (Value == min) |
{ |
Value = min; |
set_beep ( 200, 0x0080, BeepNormal); |
} |
else |
OCR2A = Value * ValCorr; |
} |
if (get_key_press (1 << KEY_ENTER)) |
{ |
edit = 1; |
OCR2A = Value * ValCorr; |
LCD_Helligkeit = Value; |
WriteParameter(); |
return Value; |
} |
} |
while (!get_key_press (1 << KEY_ESC)); |
{ |
get_key_press(KEY_ALL); |
edit = 0; |
OCR2A = Pre * ValCorr; |
LCD_Helligkeit = Pre; |
WriteParameter(); |
return Pre; |
} |
} |
//-------------------------------------------------------------- |
void Reset_EEprom(void) |
{ |
lcd_cls(); |
get_key_press(KEY_ALL); |
// lcd_printp_at (0, 2, PSTR(" EEProm wirklich"), 0); |
// lcd_printp_at (0, 3, PSTR(" löschen?"), 0); |
// lcd_printp_at (12, 7, PSTR("Ende OK"), 0); |
lcd_puts_at(0, 2, strGet(EEPROM1), 0); |
lcd_puts_at(0, 3, strGet(EEPROM2), 0); |
lcd_puts_at(12, 7, strGet(ENDOK), 0); |
do |
{ |
if (get_key_press (1 << KEY_ENTER)) |
{ |
Delete_EEPROM(); |
return; |
} |
} |
while (!get_key_press (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
} |
//-------------------------------------------------------------- |
void PKT_Setup (void) |
{ |
uint8_t ii = 0; |
uint8_t Offset = 0; |
uint8_t size = 0; |
size = ITEMS_PKT; |
uint8_t dmode = 0; |
uint8_t target_pos = 1; |
uint8_t val; |
lcd_cls (); |
mmode = 0; |
edit= 0; |
val = 0; |
while(1) |
{ |
lcd_cls (); |
lcd_printp_at (0, 0, PSTR(" PKT-Setup "), 2); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_1), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE1), 0); |
while(1) |
{ |
ii = 0; |
if(Offset > 0) |
lcd_printp_at(1,1, PSTR("\x12"), 0); |
for(ii = 0;ii < 6 ; ii++) |
{ |
if((ii+Offset) < size) |
lcd_printp_at(3,ii+1,param_menuitems_pkt[ii+Offset][DisplayLanguage], 0); |
if((ii == 5)&&(ii+Offset < (size-1))) |
lcd_printp_at(1,6, PSTR("\x13"), 0); |
} |
if(dmode == 0) |
{ |
if(Offset == 0) |
{ |
if(size > 6) |
val = menu_choose2 (1, 5, target_pos,0,1); |
else |
val = menu_choose2 (1, size, target_pos,0,0); |
} |
else |
val = menu_choose2 (2, 5, target_pos,1,1); |
} |
if(dmode == 1) |
{ |
if(Offset+7 > size) |
val = menu_choose2 (2, 6, target_pos,1,0); |
else |
val = menu_choose2 (2, 5, target_pos,1,1); |
} |
if(val == 254) |
{ |
Offset++; |
dmode = 1; |
target_pos = 5; |
} |
else if(val == 253) |
{ |
Offset--; |
dmode = 0; |
target_pos = 2; |
} |
else if(val == 255) |
{ // Ende mit ESC, speichern |
if (edit == 1) |
{ |
WriteParameter(); |
return; |
} |
return; |
} |
else |
break; |
} |
target_pos = val; |
// |
// {"Verbindung zum MK","connection to MK "," connexion a MK " ,"Aansluiting op MK"}, |
// {"MK LowBat Warnung","MK LowBat warning","MK LowBat Attent", "MK LoBat alarm "}, |
// {"Anzeige \x1d","Display \x1d","d'affichage \x1d","Display \x1d"}, |
// {"Wi.232 \x1d","Wi.232 \x1d","Wi.232 \x1d","Wi.232 \x1d"}, |
// {"BTM-222 \x1d","BTM-222 \x1d","BTM-222 \x1d","BTM-222 \x1d"}, |
// {"Antennen Track. \x1d","antenna tracking\x1d","antenna tracking\x1d","antenna tracking\x1d"}, |
// {"OSD \x1d","OSD \x1d","OSD \x1d","OSD \x1d"}, |
// {"GPS \x1d","GPS \x1d","GPS \x1d","GPS \x1d"}, |
// "Follow Me \x1d" |
// {"PKT-Akku \x1d","PKT-Accu \x1d","PKT-Accu \x1d","PKT-Accu \x1d"}, |
// {"PKT Update ","PKT Update ","PKT Mise a jour ","PKT Update "}, |
// {"Debug PKT ","Debug PKT ","Debug PKT ","Debug PKT "}, |
// {"EEProm Reset ","EEProm Reset ","EEProm Reinitiali","EEProm Reset "}, |
if((val + Offset) == 1) |
{ |
#ifdef HWVERSION3_9 |
U02SV2 = ChangeWi_SV2(U02SV2); |
if (edit == 1) |
PKT_Change = 1; |
#else |
Show_Error_HW12(); |
#endif |
} |
if((val + Offset) == 2) |
Display_Setup(); |
if((val + Offset) == 3) |
{ |
#if defined HWVERSION3_9 || defined HWVERSION1_2W || defined HWVERSION1_3W |
if(UseWi == false) |
// Wi_Use(); |
{ |
UseWi = Edit_YesNo(UseWi,0,1,WI2321); |
if (edit==1) |
if (UseWi== true) InitWi232(PKT_Baudrate); |
} |
else |
Wi_Setup(); |
#else |
Show_Error_HW12(); |
#endif |
} |
if((val + Offset) == 4) |
{ |
#ifdef HWVERSION3_9 |
if(UseBT == 0) |
{ |
UseBT = Edit_YesNo(UseBT,0,1,BT1); |
if (edit==1) |
if (UseBT == 1) |
{ |
if (bt_init()) BTIsSet = true; else BTIsSet = false; |
WriteParameter(); |
} |
} |
else |
BT_Setup(); |
#else |
Show_Error_HW12(); |
#endif |
} |
if((val + Offset) == 5) |
{ |
} |
if((val + Offset) == 6) |
{ |
OSD_Setup(); |
} |
#ifdef HWVERSION3_9 |
if((val + Offset) == 7) |
GPS_Setup(); |
if((val + Offset) == 8) |
FollowMe_Setup(); |
if((val + Offset) == 9) |
Accu_Setup(); |
#else |
Show_Error_HW12(); |
#endif |
if((val + Offset) == 10) |
Update_PKT(); |
if((val + Offset) == 11) |
Debug = Edit_Int_Value(Debug,0,1,DEBUGPKT); |
if((val + Offset) == 12) |
Reset_EEprom(); |
} |
} |
//-------------------------------------------------------------- |
void Display_Setup (void) |
{ |
uint8_t ii = 0; |
uint8_t Offset = 0; |
uint8_t size = 0; |
size = ITEMS_LCD; |
uint8_t dmode = 0; |
uint8_t target_pos = 1; |
uint8_t val; |
lcd_cls (); |
mmode = 0; |
edit= 0; |
LCD_Change = 0; |
val = 0; |
while(1) |
{ |
lcd_cls (); |
// lcd_printp_at (0, 0, PSTR(" Display Setup "), 2); |
lcd_puts_at(0, 0, strGet(DISPLAY1), 2); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_1), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE1), 0); |
while(1) |
{ |
ii = 0; |
if(Offset > 0) |
lcd_printp_at(1, 1, PSTR("\x12"), 0); |
for(ii = 0; ii < 6 ; ii++) |
{ |
if((ii + Offset) < size) |
lcd_printp_at(3, ii + 1, param_menuitems_lcd[ii + Offset][DisplayLanguage], 0); |
if((ii == 5)&&(ii+Offset < (size - 1))) |
lcd_printp_at(1,6, PSTR("\x13"), 0); |
} |
if(dmode == 0) |
{ |
if(Offset == 0) |
{ |
if(size > 6) |
val = menu_choose2 (1, 5, target_pos,0,1); |
else |
val = menu_choose2 (1, size, target_pos,0,0); |
} |
else |
val = menu_choose2 (2, 5, target_pos,1,1); |
} |
if(dmode == 1) |
{ |
if(Offset + 7 > size) |
val = menu_choose2 (2, 6, target_pos,1,0); |
else |
val = menu_choose2 (2, 5, target_pos,1,1); |
} |
if(val == 254) |
{ |
Offset++; |
dmode = 1; |
target_pos = 5; |
} |
else if(val == 253) |
{ |
Offset--; |
dmode = 0; |
target_pos = 2; |
} |
else if(val == 255) |
{ // Ende mit ESC, speichern |
if (edit == 1) |
{ |
WriteParameter(); |
return; |
} |
return; |
} |
else |
break; |
} |
target_pos = val; |
if((val + Offset) == 1) |
PKT_StartInfo = Edit_OnOff(PKT_StartInfo,0,2,DISPLAY2); |
if((val + Offset) == 2) |
OSD_RCErrorbeep = Edit_OnOff(OSD_RCErrorbeep,0,2,DISPLAY9); |
if((val + Offset) == 3) |
DisplayLanguage = Edit_Language(DisplayLanguage,0,3,DISPLAY3); |
// Edit_Language(DisplayLanguage,0,3,DISPLAY3); |
if((val + Offset) == 4) |
DisplayTimeout = Edit_Int_Value(DisplayTimeout,0,254,DISPLAY4); |
if((val + Offset) == 5) |
LCD_Helligkeit = Edit_DisplayHelligkeit(LCD_Helligkeit,0,100,DISPLAY5); |
if (edit == 1) |
if(!LCD_Change) |
LCD_Change =1; |
if((val + Offset) == 6) |
LCD_Kontrast = Edit_DisplayKontrast(LCD_Kontrast,0,63,DISPLAY6); |
if (edit == 1) |
if(!LCD_Change) |
LCD_Change =1; |
if((val + Offset) == 7) |
{ |
LCD_DisplayMode = Edit_DisplayMode(LCD_DisplayMode,0,4,DISPLAY7); |
if (edit == 1) |
if(!LCD_Change) |
LCD_Change =1; |
} |
if((val + Offset) == 8) |
{ |
LCD_Orientation = Edit_Orientation(LCD_Orientation,0,4,DISPLAY8); |
if (edit == 1) |
if(!LCD_Change) |
LCD_Change =1; |
} |
} |
} |
#if defined HWVERSION3_9 || defined HWVERSION1_3W |
////-------------------------------------------------------------- |
//void Wi_Use (void) |
//{ |
// Pre = UseWi; |
// |
// lcd_cls (); |
// |
// lcd_cls (); |
//// lcd_printp_at (0, 0, PSTR(" Wi.232 Setup "), 2); |
//// lcd_printp_at (0, 2, PSTR("Ist ein Wi.232-Modul "), 0); |
//// lcd_printp_at (0, 4, PSTR("eingebaut?"), 0); |
// lcd_puts_at(0, 0, strGet(WI2321), 2); |
// lcd_puts_at(0, 2, strGet(WI2322), 0); |
// lcd_puts_at(0, 4, strGet(WI2323), 0); |
//// lcd_printp_at (0, 7, PSTR(KEY_LINE_2), 0); |
// lcd_puts_at(0, 7, strGet(KEYLINE2), 0); |
// |
// while(1) |
// { |
// if(UseWi == false) |
//// lcd_printp_at (12, 4, PSTR("Nein"), 0); |
// lcd_puts_at(12, 4, strGet(NOO), 0); |
// else |
// //lcd_printp_at (12, 4, PSTR("Ja "), 0); |
// lcd_puts_at(12, 4, strGet(YES), 0); |
// |
// if(get_key_press (1 << KEY_MINUS)) |
// { |
// UseWi = false; |
// edit = 1; |
// } |
// |
// if(get_key_press (1 << KEY_PLUS)) |
// { |
// UseWi = true; |
// edit = 1; |
// } |
// |
// if(get_key_short (1 << KEY_ENTER)) |
// { |
//// WiIsSet = false; |
//// WriteParameter(); |
//// if(UseWi == true) |
//// Wi_Setup(); |
// return; |
// } |
// |
// if (get_key_press (1 << KEY_ESC)) |
// { |
// get_key_press(KEY_ALL); |
// UseWi = Pre; |
// return; |
// } |
// } |
//} |
//-------------------------------------------------------------- |
void Wi_Setup (void) |
{ |
uint8_t ii = 0; |
uint8_t Offset = 0; |
uint8_t size = 0; |
size = ITEMS_WI; |
uint8_t dmode = 0; |
uint8_t target_pos = 1; |
uint8_t val = 0; |
mmode = 0; |
edit = 0; |
// WiIsSet = true; |
lcd_cls (); |
while(1) |
{ |
lcd_cls (); |
lcd_printp_at (0, 0, PSTR(" Wi.232 Setup "), 2); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_1), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE1), 0); |
while(1) |
{ |
ii = 0; |
if(Offset > 0) |
lcd_printp_at(1, 1, PSTR("\x12"), 0); |
for(ii = 0; ii < 6; ii++) |
{ |
if((ii + Offset) < size) |
lcd_printp_at(3, ii+1, param_menuitems_wi[ii+Offset][DisplayLanguage], 0); |
if((ii == 5)&&(ii + Offset < (size - 1))) |
lcd_printp_at(1, 6, PSTR("\x13"), 0); |
} |
if(dmode == 0) |
{ |
if(Offset == 0) |
{ |
if(size > 6) |
val = menu_choose2 (1, 5, target_pos,0,1); |
else |
val = menu_choose2 (1, size, target_pos,0,0); |
} |
else |
val = menu_choose2 (2, 5, target_pos,1,1); |
} |
if(dmode == 1) |
{ |
if(Offset + 7 > size) |
val = menu_choose2 (2, 6, target_pos, 1, 0); |
else |
val = menu_choose2 (2, 5, target_pos, 1, 1); |
} |
if(val == 254) |
{ |
Offset++; |
dmode = 1; |
target_pos = 5; |
} |
else if(val == 253) |
{ |
Offset--; |
dmode = 0; |
target_pos = 2; |
} |
else if(val == 255) |
{ // Ende mit ESC, speichern |
if (edit == 1) |
{ |
if (UseWi==true) InitWi232(PKT_Baudrate); |
WriteParameter(); |
} |
return; |
} |
else |
break; |
} |
target_pos = val; |
if((val + Offset) == 1) |
{ |
UseWi = Edit_YesNo(UseWi,0,1,WI2321); |
} |
if((val + Offset) == 2) |
{ |
WiTXRXChannel = Edit_Int_Value(WiTXRXChannel, 0, 5,WITXRX); |
} |
if((val + Offset) == 3) |
{ |
WiNetworkGroup = Edit_Int_Value(WiNetworkGroup, 0, 127, WINETWG); |
} |
if((val + Offset) == 4) |
{ |
WiNetworkMode = Edit_Wi_NetMode_Value(WiNetworkMode); |
} |
if((val + Offset) == 5) |
{ |
WiTXTO = Edit_Int_Value(WiTXTO,0,127,WITIMEOUT); |
} |
if((val + Offset) == 6) |
{ |
WiUartMTU = Edit_Int_Value(WiUartMTU,0,127,WIUART); |
} |
if((val + Offset) == 7) |
{ |
PKT_Baudrate = Edit_Baudrate(PKT_Baudrate,0,5,PKT_BAUDRATE); |
New_Baudrate = PKT_Baudrate; |
//TODO: //if (edit==1) bt_init(); |
} |
if((val + Offset) == 8) |
InitWi232(PKT_Baudrate); |
#if defined HWVERSION3_9 |
if((val + Offset) == 9) |
Port_USB2CFG_Wi(); |
#endif |
} |
} |
#endif |
#ifdef HWVERSION3_9 |
//-------------------------------------------------------------- |
//17.6.12 gelöschtCB, geändert durch HaraldB |
//uint8_t Edit_String(const char *data, const uint8_t length, uint8_t type, const char *Text) |
//{ |
// uint8_t y = 1; |
// uint8_t x = 1; |
// uint8_t I = 0; |
// |
// lcd_cls(); |
// lcd_printp_at (0, 0, Text, 2); |
// |
// for (uint8_t i = 0; i < length; i++) |
// { |
// lcd_putc (y++, 3, data[i], 0); |
// lcd_printp_at (y++, 3, PSTR(" "), 0); |
// |
// EditString[i] = data[i]; |
// } |
// |
// lcd_rect ((x*6)-3, (8*3)-2, 10, 10, 1); |
// lcd_printp_at (0, 6, PSTR(" C"), 0); |
// lcd_printp_at (0, 7, PSTR(" \x17 \x16 \x19 OK"), 0); |
// |
// do |
// { |
// if (type == 1) // Name |
// { |
// for (uint8_t i = bt_name_length; i > 0; i--) |
// { |
// if (EditString[i - 1] != ' ') |
// { |
// bt_name_len = i; |
// break; |
// } |
// } |
// |
// if ((get_key_press (1 << KEY_PLUS) || get_key_long_rpt_sp ((1 << KEY_PLUS), 2)) && EditString[I] < 'z') |
// { |
// EditString[I]++; |
// |
// if (EditString[I] >= 0x00 && EditString[I] < ' ') |
// EditString[I] = ' '; |
// |
// if (EditString[I] > ' ' && EditString[I] < '0') |
// EditString[I] = '0'; |
// |
// if (EditString[I] > '9' && EditString[I] < 'A') |
// EditString[I] = 'A'; |
// |
// if (EditString[I] > 'Z' && EditString[I] < 'a') |
// EditString[I] = 'a'; |
// |
// lcd_putc (x, 3, EditString[I], 0); |
// edit = 1; |
// } |
// |
// if ((get_key_press (1 << KEY_MINUS) || get_key_long_rpt_sp ((1 << KEY_MINUS), 2)) && EditString[I] > ' ') |
// { |
// EditString[I]--; |
// |
// if (EditString[I] < 'a' && EditString[I] > 'Z') |
// EditString[I] = 'Z'; |
// |
// if (EditString[I] < 'A' && EditString[I] > '9') |
// EditString[I] = '9'; |
// |
// if (EditString[I] < '0' && EditString[I] > ' ') |
// EditString[I] = ' '; |
// |
// lcd_putc (x, 3, EditString[I], 0); |
// edit = 1; |
// } |
// } |
// else if (type == 2) // PIN |
// { |
// if ((get_key_press (1 << KEY_PLUS) || get_key_long_rpt_sp ((1 << KEY_PLUS), 1)) && (EditString[I] < '9')) |
// { |
// EditString[I]++; |
// lcd_putc (x, 3, EditString[I], 0); |
// edit = 1; |
// } |
// |
// if ((get_key_press (1 << KEY_MINUS) || get_key_long_rpt_sp ((1 << KEY_MINUS), 1)) && (EditString[I] > '0')) |
// { |
// EditString[I]--; |
// lcd_putc (x, 3, EditString[I], 0); |
// edit = 1; |
// } |
// } |
// |
// if (get_key_long (1 << KEY_ESC)) |
// { |
// EditString[I] = ' '; // Zeichen l�schen |
// lcd_putc (x, 3, EditString[I], 0); |
// edit = 1; |
// } |
// |
// if (get_key_short (1 << KEY_ESC)) |
// { |
// if ((x / 2) + 2 > bt_name_length) |
// { |
// lcd_rect ((x*6)-3, (8*3)-2, 10, 10, 0); |
// x = 1; |
// lcd_rect ((x*6)-3, (8*3)-2, 10, 10, 1); |
// I = 0; |
// } |
// else |
// { |
// lcd_rect ((x*6)-3, (8*3)-2, 10, 10, 0); |
// x++; |
// x++; |
// lcd_rect ((x*6)-3, (8*3)-2, 10, 10, 1); |
// I++; //Zeiger auf Zeichen |
// } |
// } |
// } |
// while (!get_key_press (1 << KEY_ENTER)); |
// { |
// get_key_press(KEY_ALL); |
// return 1; |
// } |
//} |
uint8_t Edit_String(const char *data, const uint8_t length, uint8_t type, const char *Text) |
{ |
uint8_t y = 1; |
uint8_t x = 1; |
uint8_t I = 0; |
lcd_cls(); |
lcd_printp_at (0, 0, Text, 2); |
for (uint8_t i = 0; i < length; i++) |
{ |
lcd_putc (y++, 3, data[i], 0); |
lcd_printp_at (y++, 3, PSTR(" "), 0); |
EditString[i] = data[i]; |
} |
lcd_rect ((x*6)-3, (8*3)-2, 10, 10, 1); |
lcd_printp_at (0, 6, PSTR(" C"), 0); |
lcd_printp_at (0, 7, PSTR(" \x17 \x16 \x19 OK"), 0); |
do |
{ |
if (type == 1) // Name |
{ |
for (uint8_t i = bt_name_length; i > 0; i--) |
{ |
if (EditString[i - 1] != ' ') |
{ |
bt_name_len = i; |
break; |
} |
} |
if ((get_key_press (1 << KEY_PLUS) || get_key_long_rpt_sp ((1 << KEY_PLUS), 2)) && EditString[I] < 'z') |
{ |
EditString[I]++; |
//if (EditString[I] >= 0x00 && EditString[I] < ' ') // MartinR: Compilerwarnung |
if (EditString[I] < ' ') // MartinR: geändert |
EditString[I] = ' '; |
if (EditString[I] > ' ' && EditString[I] < '0') |
EditString[I] = '0'; |
if (EditString[I] > '9' && EditString[I] < 'A') |
EditString[I] = 'A'; |
if (EditString[I] > 'Z' && EditString[I] < 'a') |
EditString[I] = 'a'; |
lcd_putc (x, 3, EditString[I], 0); |
edit = 1; |
} |
if ((get_key_press (1 << KEY_MINUS) || get_key_long_rpt_sp ((1 << KEY_MINUS), 2)) && EditString[I] > ' ') |
{ |
EditString[I]--; |
if (EditString[I] < 'a' && EditString[I] > 'Z') |
EditString[I] = 'Z'; |
if (EditString[I] < 'A' && EditString[I] > '9') |
EditString[I] = '9'; |
if (EditString[I] < '0' && EditString[I] > ' ') |
EditString[I] = ' '; |
lcd_putc (x, 3, EditString[I], 0); |
edit = 1; |
} |
} |
else if (type == 2) // PIN |
{ |
if ((get_key_press (1 << KEY_PLUS) || get_key_long_rpt_sp ((1 << KEY_PLUS), 1)) && (EditString[I] < '9')) |
{ |
EditString[I]++; |
//if (EditString[I] >= 0x00 && EditString[I] < ' ') // MartinR: Compilerwarnung |
if (EditString[I] < ' ') // MartinR: geändert |
EditString[I] = ' '; |
if (EditString[I] > ' ' && EditString[I] < '0') |
EditString[I] = '0'; |
lcd_putc (x, 3, EditString[I], 0); |
edit = 1; |
} |
if ((get_key_press (1 << KEY_MINUS) || get_key_long_rpt_sp ((1 << KEY_MINUS), 1)) && (EditString[I] > '0')) |
{ |
EditString[I]--; |
if (EditString[I] < 'A' && EditString[I] > '9') |
EditString[I] = '9'; |
lcd_putc (x, 3, EditString[I], 0); |
edit = 1; |
} |
} |
if (get_key_long (1 << KEY_ESC)) |
{ |
if (type == 1) // Name |
EditString[I] = ' '; // Zeichen l�schen |
else if (type == 2) // Pin |
EditString[I] = '0'; // Zeichen setzen |
lcd_putc (x, 3, EditString[I], 0); |
edit = 1; |
} |
if (get_key_short (1 << KEY_ESC)) |
{ |
if (type == 1) |
length_tmp = bt_name_length; |
else if (type == 2) |
length_tmp = bt_pin_length; |
if ((x / 2) + 2 > length_tmp) |
{ |
lcd_rect ((x*6)-3, (8*3)-2, 10, 10, 0); |
x = 1; |
lcd_rect ((x*6)-3, (8*3)-2, 10, 10, 1); |
I = 0; |
} |
else |
{ |
lcd_rect ((x*6)-3, (8*3)-2, 10, 10, 0); |
x++; |
x++; |
lcd_rect ((x*6)-3, (8*3)-2, 10, 10, 1); |
I++; //Zeiger auf Zeichen |
} |
} |
} |
while (!get_key_press (1 << KEY_ENTER)); |
{ |
return 1; |
} |
} |
////-------------------------------------------------------------- |
//void BT_Use (void) |
//{ |
// Pre = UseBT; |
// |
// lcd_cls (); |
// |
// lcd_cls (); |
//// lcd_printp_at (0, 0, PSTR(" BTM-222 Setup "), 2); |
//// lcd_printp_at (0, 2, PSTR("Ist ein BTM-222-Modul"), 0); |
//// lcd_printp_at (0, 4, PSTR("eingebaut?"), 0); |
// lcd_puts_at(0, 0, strGet(BT1), 2); |
// lcd_puts_at(0, 2, strGet(BT2), 0); |
// lcd_puts_at(0, 4, strGet(BT3), 0); |
//// lcd_printp_at (0, 7, PSTR(KEY_LINE_2), 0); |
// lcd_puts_at(0, 7, strGet(KEYLINE2), 0); |
// |
// while(1) |
// { |
// if(UseBT == false) |
//// lcd_printp_at (12, 4, PSTR("Nein"), 0); |
// lcd_puts_at(12, 4, strGet(NOO), 0); |
// else |
//// lcd_printp_at (12, 4, PSTR("Ja "), 0); |
// lcd_puts_at(12, 4, strGet(YES), 0); |
// if(get_key_press (1 << KEY_MINUS)) |
// UseBT = false; |
// |
// if(get_key_press (1 << KEY_PLUS)) |
// UseBT = true; |
// |
// if(get_key_short (1 << KEY_ENTER)) |
// { |
//// BTIsSet = false; |
// WriteParameter(); |
// if(UseBT == true) |
// BT_Setup(); |
// return; |
// } |
// |
// if (get_key_press (1 << KEY_ESC)) |
// { |
// get_key_press(KEY_ALL); |
// UseBT = Pre; |
// return; |
// } |
// } |
//} |
#ifdef HWVERSION3_9 |
void BT_SelectDevice (void) |
{ |
uint8_t ii = 0; |
uint8_t Offset = 0; |
uint8_t size = 0; |
size = bt_devicecount; |
uint8_t dmode = 0; |
uint8_t target_pos = 1; |
uint8_t val = 0; |
mmode = 0; |
edit = 0; |
lcd_cls (); |
while(1) |
{ |
lcd_cls (); |
lcd_printp_at (0, 0, PSTR(" BT select Device "), 2); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_1), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE1), 0); |
while(1) |
{ |
ii = 0; |
if(Offset > 0) |
lcd_printp_at(1, 1, PSTR("\x12"), 0); |
for(ii = 0; ii < 6; ii++) |
{ |
if((ii + Offset) < size) |
{ |
if (strncmp (device_list[ii + Offset].mac, gps_UsedMac, 14) == 0) |
{ |
lcd_puts_at(3, ii+1, device_list[ii + Offset].DevName, 2); |
} |
else |
{ |
lcd_puts_at(3, ii+1, device_list[ii + Offset].DevName, 0); |
} |
} |
if((ii == 5)&&(ii + Offset < (size - 1))) |
lcd_printp_at(1, 6, PSTR("\x13"), 0); |
} |
if(dmode == 0) |
{ |
if(Offset == 0) |
{ |
if(size > 6) |
val = menu_choose2 (1, 5, target_pos,0,1); |
else |
val = menu_choose2 (1, size, target_pos,0,0); |
} |
else |
val = menu_choose2 (2, 5, target_pos,1,1); |
} |
if(dmode == 1) |
{ |
if(Offset + 7 > size) |
val = menu_choose2 (2, 6, target_pos, 1, 0); |
else |
val = menu_choose2 (2, 5, target_pos, 1, 1); |
} |
if(val == 254) |
{ |
Offset++; |
dmode = 1; |
target_pos = 5; |
} |
else if(val == 253) |
{ |
Offset--; |
dmode = 0; |
target_pos = 2; |
} |
else if(val == 255) |
{ // Ende mit ESC, speichern |
if (edit == 1) |
{ |
WriteParameter(); |
} |
return; |
} |
else |
break; |
} |
target_pos = val; |
if(val > 0 ) |
{ |
for(uint8_t i = 0; i < 14; i++) |
{ |
gps_UsedMac[i] = device_list[val-1].mac[i]; |
} |
for(uint8_t i = 0; i < 20; i++) |
{ |
gps_UsedDevName[i] = device_list[val-1].DevName[i]; |
} |
edit = 1; |
} |
} |
} |
#endif |
//-------------------------------------------------------------- |
// |
void BT_Setup (void) |
{ |
uint8_t ii = 0; |
uint8_t Offset = 0; |
uint8_t size = 0; |
size = ITEMS_BT; |
uint8_t dmode = 0; |
uint8_t target_pos = 1; |
uint8_t val; |
char string[20]; |
mmode = 0; |
edit = 0; |
val = 0; |
// BTIsSet = true; |
lcd_cls (); |
while(1) |
{ |
lcd_cls (); |
// lcd_printp_at (0, 0, PSTR(" BTM-222 Setup "), 2); |
lcd_puts_at(0, 0, strGet(BT1), 2); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_1), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE1), 0); |
while(1) |
{ |
ii = 0; |
if(Offset > 0) |
lcd_printp_at(1,1, PSTR("\x12"), 0); |
for(ii = 0; ii < 6; ii++) |
{ |
if((ii + Offset) < size) |
lcd_printp_at(3, ii + 1, param_menuitems_bt[ii+Offset][DisplayLanguage], 0); |
if((ii == 5) && (ii + Offset < (size - 1))) |
lcd_printp_at(1,6, PSTR("\x13"), 0); |
} |
if(dmode == 0) |
{ |
if(Offset == 0) |
{ |
if(size > 6) |
val = menu_choose2 (1, 5, target_pos, 0, 1); |
else |
val = menu_choose2 (1, size, target_pos, 0, 0); |
} |
else |
val = menu_choose2 (2, 5, target_pos, 1, 1); |
} |
if(dmode == 1) |
{ |
if(Offset + 7 > size) |
val = menu_choose2 (2, 6, target_pos, 1, 0); |
else |
val = menu_choose2 (2, 5, target_pos, 1, 1); |
} |
if(val == 254) |
{ |
Offset++; |
dmode = 1; |
target_pos = 5; |
} |
else if(val == 253) |
{ |
Offset--; |
dmode = 0; |
target_pos = 2; |
} |
else if(val == 255) |
{ // Ende mit ESC, speichern |
// if (edit == 1) |
// { |
// if (UseBT == 1); |
// if (bt_init()) BTIsSet = true; else BTIsSet = false; |
// WriteParameter(); |
// return; |
// } |
return; |
} |
else |
if (edit == 1) |
{ |
if (UseBT == 1); |
if (bt_init()) BTIsSet = true; else BTIsSet = false; |
WriteParameter(); |
return; |
} |
break; |
} |
target_pos = val; |
if((val + Offset) == 1) |
// BT_Use(); |
UseBT = Edit_YesNo(UseBT,0,1,BT4); |
if((val + Offset) == 2) |
{ |
for (uint8_t i = 0; i < bt_name_length; i++) |
{ |
string[i] = bt_name[i]; |
} |
string[bt_name_length] = 0; |
Edit_String(string, bt_name_length, 1, PSTR(" Bluetooth Name ")); |
if (edit == 1) |
{ |
for (uint8_t i = 0; i < bt_name_len; i++) |
{ |
bt_name[i] = EditString[i]; |
WriteParameter(); |
} |
if (bt_name_len < 10) |
{ |
for (uint8_t i = bt_name_len; i < 10; i++) |
{ |
bt_name[i] = ' '; |
WriteParameter(); |
} |
} |
} |
} |
if((val + Offset) == 3) |
{ |
for (uint8_t i = 0; i < bt_pin_length; i++) |
{ |
string[i] = bt_pin[i]; |
} |
string[bt_pin_length] = 0; |
Edit_String(string, bt_pin_length, 2, PSTR(" Bluetooth Pin ")); |
if (edit == 1) |
{ |
for (uint8_t i = 0; i < bt_pin_length; i++) |
{ |
bt_pin[i] = EditString[i]; |
WriteParameter(); |
} |
} |
} |
if((val + Offset) == 4) |
{ |
// if (edit == 1) |
// if(BTIsSet) |
// BTIsSet = false; |
if (bt_init() == true) |
{ |
lcd_printp_at (0, 3, PSTR("BT Init ok"), 0); |
WriteBTInitFlag(); |
} |
else |
{ |
lcd_printp_at (0, 3, PSTR("BT Init Error"), 0); |
BTIsSet = false; |
set_beep ( 1000, 0x0040, BeepNormal); |
} |
} |
if((val + Offset) == 5) |
Port_FC2CFG_BT(); |
} |
} |
void GPS_Setup (void) |
{ |
uint8_t ii = 0; |
uint8_t Offset = 0; |
uint8_t size = 0; |
size = ITEMS_GPS; |
uint8_t dmode = 0; |
uint8_t target_pos = 1; |
uint8_t val; |
uint8_t BT_WhasOn = 0; |
mmode = 0; |
edit = 0; |
val = 0; |
lcd_cls (); |
while(1) |
{ |
lcd_cls (); |
// lcd_printp_at (0, 0, PSTR(" PKT Accu Setup "), 2); |
lcd_puts_at(0, 0, strGet(GPS1), 2); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_1), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE1), 0); |
while(1) |
{ |
ii = 0; |
if(Offset > 0) |
lcd_printp_at(1,1, PSTR("\x12"), 0); |
for(ii = 0; ii < 6; ii++) |
{ |
if((ii + Offset) < size) |
lcd_printp_at(3, ii + 1, param_menuitems_GPS[ii+Offset][DisplayLanguage], 0); |
if((ii == 5) && (ii + Offset < (size - 1))) |
lcd_printp_at(1,6, PSTR("\x13"), 0); |
} |
if(dmode == 0) |
{ |
if(Offset == 0) |
{ |
if(size > 6) |
val = menu_choose2 (1, 5, target_pos, 0, 1); |
else |
val = menu_choose2 (1, size, target_pos, 0, 0); |
} |
else |
val = menu_choose2 (2, 5, target_pos, 1, 1); |
} |
if(dmode == 1) |
{ |
if(Offset + 7 > size) |
val = menu_choose2 (2, 6, target_pos, 1, 0); |
else |
val = menu_choose2 (2, 5, target_pos, 1, 1); |
} |
if(val == 254) |
{ |
Offset++; |
dmode = 1; |
target_pos = 5; |
} |
else if(val == 253) |
{ |
Offset--; |
dmode = 0; |
target_pos = 2; |
} |
else if(val == 255) |
{ // Ende mit ESC, speichern |
if (edit == 1) |
{ |
// WriteParameter(); |
if (BT_WhasOn) |
{ |
set_BTOn(); |
// bt_set_mode(SLAVE); |
bt_init(); |
set_BTOff(); |
} |
return; |
} |
return; |
} |
else |
break; |
} |
target_pos = val; |
// |
// {"Suche GPS Maus ","search GPS mouse ","search GPS mouse ","search GPS mouse "}, |
// {"GPS Maus Typ ","GPS mouse typ ","GPS mouse typ ","GPS mouse typ "}, |
// {"GPS Maus aktiv? ","GPS mouse activ? ","GPS mouse activ? ","GPS mouse activ? "}, |
// {"Zeige GPS Device ","show GPS device ","show GPS device ","show GPS device "}, |
// |
if((val + Offset) == 1) |
{ |
if (bt_devicecount ==0) |
{ |
lcd_cls (); |
lcd_printp_at (0, 0, PSTR("wähle BT Device"), 0); |
set_BTOn(); |
BT_WhasOn = true; |
// _delay_ms(2000); |
bt_downlink_init(); |
bt_searchDevice(); |
set_BTOff(); |
BT_SelectDevice(); |
} |
else |
BT_SelectDevice(); |
// if (edit == 1) WriteParameter(); |
} |
if((val + Offset) == 2) |
{ |
lcd_cls (); |
lcd_printp_at (0, 0, PSTR("suche BT Device"), 0); |
set_BTOn(); |
// _delay_ms(2000); |
BT_WhasOn = true; |
bt_downlink_init(); |
bt_searchDevice(); |
set_BTOff(); |
BT_SelectDevice(); |
} |
if((val + Offset) == 4) |
{ |
gps_UseGPS = Edit_YesNo(gps_UseGPS,0,1,GPS3); |
if (edit == 1) WriteParameter(); |
} |
if((val + Offset) == 5) |
{ |
lcd_cls (); |
lcd_puts_at(0, 0, strGet(GPS2), 2); |
lcd_puts_at(18, 7, strGet(OK), 0); |
lcd_printp_at (0, 1, PSTR("Device:"), 0); |
lcd_printp_at (0, 4, PSTR("MAC:"), 0); |
lcd_puts_at (0, 2,gps_UsedDevName, 0); |
for(uint8_t i = 0; i < 12; i++) |
{ |
lcd_putc (i, 5, gps_UsedMac[i],0); |
} |
while (!get_key_press (1 << KEY_ENTER)); |
} |
if((val + Offset) == 6) |
{ |
lcd_cls (); |
lcd_puts_at(18, 7, strGet(OK), 0); |
lcd_puts_at (0, 0,gps_UsedDevName, 2); |
set_BTOn(); |
BT_WhasOn = true; |
if (BTIsSlave==true) |
{ |
bt_downlink_init(); |
} |
if (bt_connect(gps_UsedMac)) |
{ |
lcd_printp_at (0, 1, PSTR("connected"), 0); |
receiveNMEA = true; |
} |
if (receiveNMEA) |
{ |
lcd_printp_at (0, 3, PSTR(" Latitude Longitude"), 2); |
do |
{ |
// if (!bt_receiveNMEA()) break; |
//// Tracking_NMEA(); |
write_ndigit_number_u (1, 4, (uint16_t)(NMEAlatitude/10000000), 2, 0,0); |
lcd_printp_at (3, 4, PSTR("."), 0); |
write_ndigit_number_u (4, 4, (uint16_t)((NMEAlatitude/1000) % 10000), 4, 1,0); |
write_ndigit_number_u (8, 4, (uint16_t)((NMEAlatitude/10) % 100), 2, 1,0); |
write_ndigit_number_u (12, 4, (uint16_t)(NMEAlongitude/10000000), 2, 0,0); |
lcd_printp_at (14, 4, PSTR("."), 0); |
write_ndigit_number_u (15, 4, (uint16_t)((NMEAlongitude/1000) % 10000), 4, 1,0); |
write_ndigit_number_u (19, 4, (uint16_t)((NMEAlongitude/10) % 100), 2, 1,0); |
lcd_printp_at (0, 2, PSTR("GPS Time: "), 0); |
lcd_puts_at (10, 2, NMEATime, 0); |
lcd_printp_at (0, 6, PSTR(" Satellite: "), 0); |
write_ndigit_number_u (13, 6, NMEAsatsInUse, 2, 1,0); |
// lcd_printp_at (0, 2, PSTR(" BT RX Error: "), 0); |
// write_ndigit_number_u (13, 2, bt_rxerror, 3, 1); |
} |
while (!get_key_press (1 << KEY_ENTER)); |
lcd_cls_line(0,1,21); |
lcd_cls_line(0,2,21); |
lcd_cls_line(0,3,21); |
lcd_cls_line(0,4,21); |
lcd_cls_line(0,5,21); |
lcd_cls_line(0,6,21); |
lcd_printp_at (0, 3, PSTR("GPS trennen"), 0); |
} |
else |
{ |
lcd_printp_at (0, 1, PSTR("Error at connecting"), 0); |
while (!get_key_press (1 << KEY_ENTER)); |
} |
receiveNMEA = false; |
if (!bt_disconnect()) lcd_printp_at (0, 3, PSTR("Fehler beim Trennen"), 0); |
set_BTOff(); |
} |
} |
} |
//-------------------------------------------------------------- |
uint8_t Edit_PKT_Accu(uint8_t Value, uint8_t min, uint8_t max) |
{ |
Pre = Value; |
lcd_cls(); |
// lcd_printp_at (0, 2, Text, 0); |
lcd_puts_at(0, 2, strGet(LIPO2), 0); |
switch (Value) |
{ |
case false :lcd_printp_at (15, 2, PSTR("LiIo"), 0); |
break; |
case true :lcd_printp_at (15, 2, PSTR("LiPo"), 0); |
break; |
break; |
} |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_2), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE2), 0); |
do |
{ |
if ((get_key_press (1 << KEY_PLUS)) && (Value == 0)) |
{ |
Value = 1; |
lcd_printp_at (15, 2, PSTR("LiPo"), 0); |
} |
if ((get_key_press (1 << KEY_MINUS)) && (Value == 1)) |
{ |
Value = 0; |
lcd_printp_at (15, 2, PSTR("LiIo"), 0); |
} |
if (get_key_press (1 << KEY_ENTER)) |
{ |
edit = 1; |
PKT_Accutyp = Value; |
// WriteParameter(); |
return Value; |
} |
} |
while (!get_key_press (1 << KEY_ESC)); |
{ |
get_key_press(KEY_ALL); |
edit = 0; |
PKT_Accutyp = Pre; |
return Pre; |
} |
} |
//-------------------------------------------------------------- |
uint16_t Edit_LipoOffset(uint16_t Value, uint16_t min, uint16_t max) |
{ |
lcd_cls(); |
// lcd_printp_at (0, 2, Text, 0); |
lcd_puts_at(0, 2, strGet(LIPO3), 0); |
lcd_puts_at(0, 5, strGet(LIPO5), 0); |
lcd_puts_at(0, 6, strGet(LIPO6), 0); |
// lcd_printp_at (0, 3, PSTR("Offset verstellen bis"), 0); |
// lcd_printp_at (0, 4, PSTR("die Spannung passt"), 0); |
Pre16 = Value; |
write_ndigit_number_u (16, 2, Value, 4, 0,0); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_2), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE2), 0); |
do |
{ |
if ((get_key_press (1 << KEY_PLUS) || get_key_long_rpt_sp ((1 << KEY_PLUS), 2)) && (Value < max-10)) |
{ |
edit = 1; |
Value = Value +10; |
Lipo_UOffset = Value; |
write_ndigit_number_u (16, 2,Value, 4, 0,0); |
} |
if ((get_key_press (1 << KEY_MINUS) || get_key_long_rpt_sp ((1 << KEY_MINUS), 2)) && (Value > min)) |
{ |
edit = 1; |
Value=Value -10; |
Lipo_UOffset = Value; |
write_ndigit_number_u (16, 2,Value, 4, 0,0); |
} |
if (get_key_press (1 << KEY_ENTER)) |
return Value; |
#ifndef ohne_Lipo // MartinR |
show_Lipo(); |
#endif |
write_ndigit_number_u_100th(8, 3, volt_avg, 0, 0); |
lcd_printp_at(3, 3, PSTR("Volt"), 0); |
} |
while (!get_key_press (1 << KEY_ESC)); |
{ |
get_key_press(KEY_ALL); |
edit = 0; |
Lipo_UOffset = Pre16; |
return Pre16; |
} |
} |
//-------------------------------------------------------------- |
void Accu_Setup (void) |
{ |
uint8_t ii = 0; |
uint8_t Offset = 0; |
uint8_t size = 0; |
size = ITEMS_Accu; |
uint8_t dmode = 0; |
uint8_t target_pos = 1; |
uint8_t val; |
mmode = 0; |
edit = 0; |
val = 0; |
lcd_cls (); |
while(1) |
{ |
lcd_cls (); |
// lcd_printp_at (0, 0, PSTR(" PKT Accu Setup "), 2); |
lcd_puts_at(0, 0, strGet(LIPO1), 2); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_1), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE1), 0); |
while(1) |
{ |
ii = 0; |
if(Offset > 0) |
lcd_printp_at(1,1, PSTR("\x12"), 0); |
for(ii = 0; ii < 6; ii++) |
{ |
if((ii + Offset) < size) |
lcd_printp_at(3, ii + 1, param_menuitems_Accu[ii+Offset][DisplayLanguage], 0); |
if((ii == 5) && (ii + Offset < (size - 1))) |
lcd_printp_at(1,6, PSTR("\x13"), 0); |
} |
if(dmode == 0) |
{ |
if(Offset == 0) |
{ |
if(size > 6) |
val = menu_choose2 (1, 5, target_pos, 0, 1); |
else |
val = menu_choose2 (1, size, target_pos, 0, 0); |
} |
else |
val = menu_choose2 (2, 5, target_pos, 1, 1); |
} |
if(dmode == 1) |
{ |
if(Offset + 7 > size) |
val = menu_choose2 (2, 6, target_pos, 1, 0); |
else |
val = menu_choose2 (2, 5, target_pos, 1, 1); |
} |
if(val == 254) |
{ |
Offset++; |
dmode = 1; |
target_pos = 5; |
} |
else if(val == 253) |
{ |
Offset--; |
dmode = 0; |
target_pos = 2; |
} |
else if(val == 255) |
{ // Ende mit ESC, speichern |
if (edit == 1) |
{ |
WriteParameter(); |
return; |
} |
return; |
} |
else |
break; |
} |
target_pos = val; |
if((val + Offset) == 1) |
{ |
PKT_Accutyp= Edit_PKT_Accu(PKT_Accutyp,0,1); |
if (edit == 1) WriteParameter(); |
} |
if((val + Offset) == 2) |
{ |
Lipo_UOffset = Edit_LipoOffset(Lipo_UOffset,0,9999); |
if (edit == 1) WriteParameter(); |
} |
} |
} |
//-------------------------------------------------------------- |
uint8_t Edit_LED_Form (uint8_t Value, uint8_t min, uint8_t max, uint8_t Text) |
{ |
Pre = Value; |
lcd_cls(); |
lcd_puts_at(0, 2, strGet(Text), 0); |
switch (Value) |
{ |
case 0x1: |
lcd_circle (14 * 6 + 5, 2 * 8 + 3, 3, 1); // kreis |
lcd_fcircle (16 * 6 + 5, 2 * 8 + 3, 3, 0); // löschen |
lcd_circle (16 * 6 + 5, 2 * 8 + 3, 3, 1); // kreis |
lcd_fcircle (16 * 6 + 5, 2 * 8 + 3, 1, 1); // plus |
break; |
case 0x3 : |
lcd_circle (14 * 6 + 5, 2 * 8 + 3, 3, 1); // kreis |
lcd_fcircle (16 * 6 + 5, 2 * 8 + 3, 3, 1); // schwarz |
break; |
break; |
} |
lcd_puts_at(0, 7, strGet(KEYLINE2), 0); |
do |
{ |
if ((get_key_press (1 << KEY_PLUS)) && (Value == 1)) |
{ |
Value = 3; |
lcd_circle (14 * 6 + 5, 2 * 8 + 3, 3, 1); // kreis |
lcd_fcircle (16 * 6 + 5, 2 * 8 + 3, 3, 1); // schwarz |
} |
if ((get_key_press (1 << KEY_MINUS)) && (Value == 3)) |
{ |
Value = 1; |
lcd_circle (14 * 6 + 5, 2 * 8 + 3, 3, 1); // kreis |
lcd_fcircle (16 * 6 + 5, 2 * 8 + 3, 3, 0); // löschen |
lcd_circle (16 * 6 + 5, 2 * 8 + 3, 3, 1); // kreis |
lcd_fcircle (16 * 6 + 5, 2 * 8 + 3, 1, 1); // plus |
} |
if (get_key_press (1 << KEY_ENTER)) |
{ |
edit = 1; |
OSD_LEDform = Value; |
WriteParameter(); |
return Value; |
} |
} |
while (!get_key_press (1 << KEY_ESC)); |
{ |
get_key_press(KEY_ALL); |
edit = 0; |
OSD_LEDform = Pre; |
return Pre; |
} |
} |
//-------------------------------------------------------------- |
void OSD_Setup (void) |
{ |
uint8_t ii = 0; |
uint8_t Offset = 0; |
uint8_t size = 0; |
size = ITEMS_OSD; |
uint8_t dmode = 0; |
uint8_t target_pos = 1; |
uint8_t val; |
mmode = 0; |
edit = 0; |
val = 0; |
lcd_cls (); |
while(1) |
{ |
lcd_cls (); |
lcd_puts_at(0, 0, strGet(OSD_Screen), 2); |
lcd_puts_at(0, 7, strGet(KEYLINE1), 0); |
while(1) |
{ |
ii = 0; |
if(Offset > 0) |
lcd_printp_at(1,1, PSTR("\x12"), 0); |
for(ii = 0; ii < 6; ii++) |
{ |
if((ii + Offset) < size) |
lcd_printp_at(3, ii + 1, param_menuitems_OSD[ii+Offset][DisplayLanguage], 0); |
if((ii == 5) && (ii + Offset < (size - 1))) |
lcd_printp_at(1,6, PSTR("\x13"), 0); |
} |
if(dmode == 0) |
{ |
if(Offset == 0) |
{ |
if(size > 6) |
val = menu_choose2 (1, 5, target_pos, 0, 1); |
else |
val = menu_choose2 (1, size, target_pos, 0, 0); |
} |
else |
val = menu_choose2 (2, 5, target_pos, 1, 1); |
} |
if(dmode == 1) |
{ |
if(Offset + 7 > size) |
val = menu_choose2 (2, 6, target_pos, 1, 0); |
else |
val = menu_choose2 (2, 5, target_pos, 1, 1); |
} |
if(val == 254) |
{ |
Offset++; |
dmode = 1; |
target_pos = 5; |
} |
else if(val == 253) |
{ |
Offset--; |
dmode = 0; |
target_pos = 2; |
} |
else if(val == 255) |
{ // Ende mit ESC, speichern |
if (edit == 1) |
{ |
WriteParameter(); |
return; |
} |
return; |
} |
else |
break; |
} |
target_pos = val; |
if((val + Offset) == 1) OSD_ScreenMode = Edit_Int_Value(OSD_ScreenMode, 0, 2, OSD_SCREENMODE); |
if((val + Offset) == 2) OSD_LEDform = Edit_LED_Form(OSD_LEDform, 1, 3, OSD_LED_Form); |
if((val + Offset) == 3) OSD_InvertOut = Edit_YesNo(OSD_InvertOut, 0, 1, OSD_Invert_Out); |
if((val + Offset) == 4) OSD_SendOSD = Edit_YesNo(OSD_SendOSD, 0, 1, OSD_Send_OSD); |
if((val + Offset) == 5) OSD_Fallspeed = Edit_Int10th_Value(OSD_Fallspeed,0,247,FALLSPEED); |
if((val + Offset) == 6) OSD_VarioBeep = Edit_YesNo(OSD_VarioBeep,0,1,OSD_VARIOBEEP); |
if((val + Offset) == 7) OSD_HomeMKView = Edit_YesNo(OSD_HomeMKView,0,1,OSD_HOMEMKVIEW); |
if((val + Offset) == 8) MK_LowBat = Edit_Int10th_Value(MK_LowBat,32,247,LOWBAT); |
if((val + Offset) == 9) OSD_mAh_Warning = Edit_Int16_Value(OSD_mAh_Warning,0,30000,OSD_MAHWARNING); |
if((val + Offset) == 10)OSD_LipoBar = Edit_YesNo(OSD_LipoBar, 0, 1, OSD_LIPOBAR); |
} |
} |
//-------------------------------------------------------------- |
void FollowMe_Setup (void) |
{ |
uint8_t ii = 0; |
uint8_t Offset = 0; |
uint8_t size = 0; |
size = ITEMS_FOLLOWME; |
uint8_t dmode = 0; |
uint8_t target_pos = 1; |
uint8_t val; |
mmode = 0; |
edit = 0; |
val = 0; |
lcd_cls (); |
while(1) |
{ |
lcd_cls (); |
lcd_puts_at(0, 0, strGet(FOLLOWME_0), 2); |
lcd_puts_at(0, 7, strGet(KEYLINE1), 0); |
while(1) |
{ |
ii = 0; |
if(Offset > 0) |
lcd_printp_at(1,1, PSTR("\x12"), 0); |
for(ii = 0; ii < 6; ii++) |
{ |
if((ii + Offset) < size) |
lcd_printp_at(3, ii + 1, param_menuitems_FOLLOWME[ii+Offset][DisplayLanguage], 0); |
if((ii == 5) && (ii + Offset < (size - 1))) |
lcd_printp_at(1,6, PSTR("\x13"), 0); |
} |
if(dmode == 0) |
{ |
if(Offset == 0) |
{ |
if(size > 6) |
val = menu_choose2 (1, 5, target_pos, 0, 1); |
else |
val = menu_choose2 (1, size, target_pos, 0, 0); |
} |
else |
val = menu_choose2 (2, 5, target_pos, 1, 1); |
} |
if(dmode == 1) |
{ |
if(Offset + 7 > size) |
val = menu_choose2 (2, 6, target_pos, 1, 0); |
else |
val = menu_choose2 (2, 5, target_pos, 1, 1); |
} |
if(val == 254) |
{ |
Offset++; |
dmode = 1; |
target_pos = 5; |
} |
else if(val == 253) |
{ |
Offset--; |
dmode = 0; |
target_pos = 2; |
} |
else if(val == 255) |
{ // Ende mit ESC, speichern |
if (edit == 1) |
{ |
WriteParameter(); |
return; |
} |
return; |
} |
else |
break; |
} |
target_pos = val; |
if((val + Offset) == 1) FM_Refresh = Edit_Int16_Value(FM_Refresh, 250, 60000, FOLLOWME_1); |
if((val + Offset) == 2) FM_Speed = Edit_Int16_Value(FM_Speed, 0, 100, FOLLOWME_2); |
if((val + Offset) == 3) FM_Radius = Edit_Int16_Value(FM_Radius, 1,20, FOLLOWME_3); |
} |
} |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/setup.h |
---|
0,0 → 1,56 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#ifndef _setup_H |
#define _setup_H |
void PKT_Setup (void); |
void Display_Setup (void); |
void Wi_Use (void); |
void Wi_Setup (void); |
void BT_Use (void); |
void BT_Setup (void); |
void Show_Error_HW12(void); |
void Accu_Setup (void); |
void BT_SelectDevice (void); |
void GPS_Setup (void); |
void OSD_Setup (void); |
void FollowMe_Setup (void); |
uint8_t Edit_Language(uint8_t Value, uint8_t min, uint8_t max,uint8_t Text); |
extern uint8_t bt_name_len; |
extern uint8_t length_tmp; |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/stick.c |
---|
0,0 → 1,383 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* Copyright (C) 2012 Martin Runkel * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#include "cpu.h" |
#include <avr/io.h> |
#include <avr/interrupt.h> |
#include <avr/pgmspace.h> |
#include <string.h> |
#include <stdlib.h> |
#include "lcd.h" |
#include "timer.h" |
#include "servo.h" |
#include "messages.h" |
#include "lipo.h" |
#include "stick.h" |
#define SERVO_CORRECT 3.125 |
#include <util/delay.h> |
#include <inttypes.h> |
#include <stdlib.h> |
#include "main.h" |
#include "uart1.h" |
#include "usart.h" |
#define LIMIT_MIN_MAX(value, min, max) {if(value <= min) value = min; else if(value >= max) value = max;} |
int16_t Pos_Stick[12]; // 1,5mS |
int16_t Pos_alt[5]; // |
uint8_t BalkenPos = 0; |
uint8_t Stick_Display = 0; |
uint8_t serialChannelRichtung = 0; |
uint8_t serialChannelConfig = 2; |
//-------------------------------------------------------------- |
// |
void joystick (void) |
{ |
// uint8_t chg = 0; |
// uint8_t Pos_Stick = 150; // 1,5mS |
// uint8_t Pos_alt = 150; // |
//int16_t Pos_Stick[12]; // 1,5mS |
uint8_t chg = 0; |
//uint8_t BalkenPos = 0; |
uint8_t Stick_Nr = 0; |
//uint8_t Stick_Display = 0; |
uint8_t i = 0; |
memset (Pos_Stick, 150, 3); // füllt 3+1 Byte vom Pos_Stick[12] mit 150 |
//int16_t Pos_alt[5]; // |
int16_t Poti_Summe[5]; // |
memset (Poti_Summe, 0, 5); // füllt 3+1 Byte mit 0 |
int16_t Poti_Neutral[5]; // |
// ADC- init |
Stick_Nr = 0; |
ADMUX = (1<<REFS0)|(0<<MUX0); // Multiplexer selection Register: AVCC with external capacitor at AREF pin , ADC1 |
ADMUX = (ADMUX & ~(0x1F)) | (Stick_Nr & 0x1F); // ADC[Stick_Nr] verwenden |
timer = 50; |
while (timer > 0); |
ADCSRA = (1<<ADEN)|(1<<ADSC)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); // ADC Enable, ADC Start, Prescaler 128 |
// Stick-Neutralposition bestimmen |
while (ADCSRA & (1<<ADSC)); // wenn ADC fertig |
Poti_Neutral[Stick_Nr] = ((ADCW>>2)&0xff); |
LIMIT_MIN_MAX (Poti_Neutral[Stick_Nr],108,148); |
Stick_Nr = 2 ; |
ADMUX = (ADMUX & ~(0x1F)) | (Stick_Nr & 0x1F); // ADC[i] verwenden |
// Stick_Nr 1,2,3 = Potis, Stick_Nr 1= Lipo |
ADCSRA |= (1<<ADSC); // ADC Start |
while (ADCSRA & (1<<ADSC)); // wenn ADC fertig |
Poti_Neutral[Stick_Nr] = ((ADCW>>2)&0xff); |
LIMIT_MIN_MAX (Poti_Neutral[Stick_Nr],108,148); |
Stick_Nr = 0; |
ADMUX = (ADMUX & ~(0x1F)) | (Stick_Nr & 0x1F); // ADC[i] verwenden |
// Stick_Nr 1,2,3 = Potis, Stick_Nr 1= Lipo |
ADCSRA |= (1<<ADSC); // ADC Start |
//OCR1A = 150 * SERVO_CORRECT; // Servomitte |
lcd_cls (); |
// Kopfzeile und Rahmen zeichnen |
lcd_printp (PSTR(" serielle Potis 1-5 "), 2); |
//lcd_printp_at (7, 5, PSTR("%"), 0); |
//lcd_printp_at (16, 5, PSTR("mS"), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE3), 0); |
lcd_printp_at (18, 7, PSTR("\x19O\x18"), 0); |
for (i=0 ; i< 5 ; i++) |
{ |
BalkenPos = 12 + (i*8) ; |
lcd_rect(3,BalkenPos, 120, 6, 1); // +-150% Rahmen |
lcd_line(23,BalkenPos,23,(BalkenPos+6),1); // -100% |
lcd_line(43,BalkenPos,43,(BalkenPos+6),1); // -50% |
lcd_frect(62,BalkenPos, 2, 6, 1); // 0% |
lcd_line(83,BalkenPos,83,(BalkenPos+6),1); // +50% |
lcd_line(103,BalkenPos,103,(BalkenPos+6),1); // +100% |
} |
// Reset auf Mittelstellung |
Pos_Stick[0] = 150; |
Poti_Summe[0] = 0; |
Pos_Stick[2] = 150; |
Poti_Summe[2] = 0; |
Pos_Stick[4] = 150; |
Poti_Summe[4] = 0; |
chg = 255; |
do |
{ |
if (!(ADCSRA & (1<<ADSC))) // wenn ADC fertig |
{ |
//Pos_Stick[Stick_Nr] = 150 + 128 - ((ADCW>>2)&0xff); |
if (serialChannelRichtung & (1<<Stick_Nr)) |
Pos_Stick[Stick_Nr] = Poti_Neutral[Stick_Nr] - ((ADCW>>2)&0xff); |
else |
Pos_Stick[Stick_Nr] = ((ADCW>>2)&0xff) - Poti_Neutral[Stick_Nr]; |
LIMIT_MIN_MAX (Pos_Stick[Stick_Nr],-120,120); |
if ((Stick_Nr==0) || (Stick_Nr==2)) // nur die Potis 1,2 sind nicht neutralisierend |
{ |
Poti_Summe[Stick_Nr] += (Pos_Stick[Stick_Nr]/8) * abs(Pos_Stick[Stick_Nr]/8); |
LIMIT_MIN_MAX (Poti_Summe[Stick_Nr],-(120*128),(120*128)); |
Pos_Stick[Stick_Nr]= Poti_Summe[Stick_Nr] / 128; // nicht neutralisierend |
} |
Pos_Stick[Stick_Nr] += 150; |
LIMIT_MIN_MAX (Pos_Stick[Stick_Nr],30,270); // war 75 , 225 |
if (Pos_Stick[Stick_Nr] != Pos_alt[Stick_Nr]) // nur bei Änderung |
{ |
chg |= (1<<Stick_Nr) ; |
//Pos_alt=Pos_Stick ; // verschoben |
} |
Stick_Nr ++ ; |
//if (Stick_Nr==1) Stick_Nr=2; // Lipo überspringen |
if (Stick_Nr==3) // Taster |
{ |
// if (get_key_press (1 << KEY_EXT)) Pos_Stick[Stick_Nr] = 225; |
if (serialChannelRichtung & (1<<Stick_Nr)) |
{ |
if (PINA & (1 << KEY_EXT)) Pos_Stick[Stick_Nr] = 30; |
else Pos_Stick[Stick_Nr] = 270; |
} |
else |
{ |
if (PINA & (1 << KEY_EXT)) Pos_Stick[Stick_Nr] = 270; |
else Pos_Stick[Stick_Nr] = 30; |
} |
if (Pos_Stick[Stick_Nr] != Pos_alt[Stick_Nr]) |
{ |
chg |= (1<<Stick_Nr) ; |
} |
Stick_Nr=0; |
} |
/* |
#ifndef ohne_Lipo // MartinR |
Stick_Nr = 1; // MartinR AD-Kanal 1 überspringen wegen Lipo Überwachung |
#endif |
*/ |
ADMUX = (ADMUX & ~(0x1F)) | (Stick_Nr & 0x1F); // ADC[i] verwenden |
// Stick_Nr 1,2,3 = Potis, Stick_Nr 0= Lipo |
ADCSRA |= (1<<ADSC); // ADC Start |
//serialPotis (); |
} |
if ((get_key_press (1 << KEY_PLUS) || get_key_long_rpt_sp ((1 << KEY_PLUS), 3)) && (Pos_Stick[4] < 271)) |
{ |
Pos_Stick[4] ++ ; |
//LIMIT_MIN_MAX (Pos_Stick[Stick_Nr],30,270); // war 75 , 225 |
chg |= (1<<4) ; |
} |
else if ((get_key_press (1 << KEY_MINUS) || get_key_long_rpt_sp ((1 << KEY_MINUS), 3)) && (Pos_Stick[4] > 29)) |
{ |
Pos_Stick[4] -- ; |
//LIMIT_MIN_MAX (Pos_Stick[Stick_Nr],30,270); // war 75 , 225 |
chg |= (1<<4) ; |
} |
else if (get_key_press (1 << KEY_ENTER)) |
{ |
/* |
for (i=0 ; i< 4 ; i++) |
{ |
BalkenPos = 12 + (i*8) ; |
lcd_frect (4, (BalkenPos+1), 118, 4, 0); // Balken löschen |
lcd_frect(62, BalkenPos, 2, 6, 1); // 0% |
} |
*/ |
Pos_Stick[0] = 150; |
Poti_Summe[0] = 0; |
Pos_Stick[2] = 150; |
Poti_Summe[2] = 0; |
Pos_Stick[4] = 150; |
Poti_Summe[4] = 0; |
BeepTime = 200; |
BeepMuster = 0x0080; |
chg = 255; |
} |
if (chg) |
{ |
if (chg & (1<<0)); // Stick 1 |
{ |
BalkenPos = 12 + (0*8) ; |
Stick_Display = 0; |
Balken_Zeichnen () ; |
Pos_alt[Stick_Display]=Pos_Stick[Stick_Display]; |
} |
// Stick 2 = Lipo |
if (chg & (1<<1)); // Stick 2 |
{ |
BalkenPos = 12 + (1*8) ; |
Stick_Display = 1; |
if (serialChannelConfig & (0<<1)) Balken_Zeichnen () ; // nur wenn keine Lipo-Spannung |
Pos_alt[Stick_Display]=Pos_Stick[Stick_Display]; |
} |
if (chg & (1<<2)); // Stick 3 |
{ |
BalkenPos = 12 + (2*8) ; |
Stick_Display = 2; |
Balken_Zeichnen () ; |
Pos_alt[Stick_Display]=Pos_Stick[Stick_Display]; |
} |
if (chg & (1<<3)); // Stick 4 = Taster |
{ |
BalkenPos = 12 + (3*8) ; |
Stick_Display = 3; |
Balken_Zeichnen () ; |
Pos_alt[Stick_Display]=Pos_Stick[Stick_Display]; |
} |
if (chg & (1<<4)); // Stick 5 = Taster vom PKT |
{ |
BalkenPos = 12 + (4*8) ; |
Stick_Display = 4; |
Balken_Zeichnen () ; |
//OCR1A = (((Pos_Stick[Stick_Display]-150)/1.6)+150) * SERVO_CORRECT; // Servostellung , 1.6=0.8*0.5 |
Pos_alt[Stick_Display]=Pos_Stick[Stick_Display]; |
} |
chg = 0; |
serialPotis (); |
} |
} |
while (!get_key_press (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
#ifdef HWVERSION3_9 |
#ifndef ohne_Lipo // MartinR |
ADC_Init(); // ADC für Lipomessung wieder aktivieren |
#endif |
#endif |
} |
//-------------------------------------------------------------- |
// |
void serialPotis (void) |
{ |
uint8_t i = 0; |
memset (buffer, 0, 12); // füllt die 12+1 Byte vom buffer mit 0 |
for (i=0 ; i< 5 ; i++) |
{ |
buffer[i] = Pos_Stick[i]-150 ; |
} |
SendOutData('y', ADDRESS_FC, 1, buffer, 12); |
} |
//-------------------------------------------------------------- |
// |
void Balken_Zeichnen (void) |
{ |
// Balken löschen |
if ((Pos_Stick[Stick_Display] > Pos_alt[Stick_Display])&&(Pos_alt[Stick_Display] < 150)) // Balken links löschen |
lcd_frect ((63-((150 -Pos_alt[Stick_Display]) * 0.5)), (BalkenPos+1), (63-((150- Pos_Stick[Stick_Display]) * 0.5)), 4, 0); |
if ((Pos_Stick[Stick_Display] < Pos_alt[Stick_Display])&&(Pos_alt[Stick_Display] > 150)) // Balken rechts löschen |
lcd_frect ((63+((Pos_Stick[Stick_Display] - 150) * 0.5)), (BalkenPos+1), (63+((Pos_alt[Stick_Display] - 150) * 0.5)), 4, 0); |
// Balken zeichnen |
if (Pos_Stick[Stick_Display] >= 150) |
{ |
lcd_frect (63, (BalkenPos+1), ((Pos_Stick[Stick_Display] - 150) * 0.5), 4, 1); |
//write_ndigit_number_u (4, 5, ((Pos_Stick[Stick_Display] - 150) * 1.25), 3, 0, 0); // Pulse width in % |
lcd_frect(62, (BalkenPos), 2, 6, 1); // 0% |
} |
else |
{ |
lcd_frect (63 - ((150 - Pos_Stick[Stick_Display]) * 0.5), (BalkenPos+1), ((150 - Pos_Stick[Stick_Display]) * 0.5), 4, 1); |
//write_ndigit_number_u (4, 5, ((150 - Pos_Stick[Stick_Display]) * 1.25), 3, 0, 0); // Pulse width in % |
lcd_frect(62, (BalkenPos), 2, 6, 1); // 0% |
} |
// Raster zeichnen |
lcd_line(3, BalkenPos,3, (BalkenPos+6),1); // -150% |
lcd_line(23, BalkenPos,23, (BalkenPos+6),1); // -100% |
lcd_line(43, BalkenPos,43, (BalkenPos+6),1); // -50% |
lcd_line(83, BalkenPos,83, (BalkenPos+6),1); // +50% |
lcd_line(103,BalkenPos,103,(BalkenPos+6),1); // +100% |
lcd_line(123,BalkenPos,123,(BalkenPos+6),1); // +150% |
} |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/stick.h |
---|
0,0 → 1,42 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#ifndef _STICK_H |
#define _STICK_H |
void joystick (void); |
void serialPotis (void); |
void Balken_Zeichnen (void); |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/timer.c |
---|
0,0 → 1,567 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* based on the key handling by Peter Dannegger * |
* see www.mikrocontroller.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#include "cpu.h" |
#include <avr/io.h> |
#include <avr/interrupt.h> |
#include <avr/pgmspace.h> |
#include <string.h> |
#include <util/delay.h> |
#include <inttypes.h> |
#include "main.h" |
#include "timer.h" |
#include "eeprom.h" |
#include "lcd.h" |
#include "uart1.h" |
#include "bluetooth.h" |
#include "setup.h" |
#if defined HWVERSION1_2W || defined HWVERSION1_2 |
#include "HAL_HW1_2.h" |
#endif |
#if defined HWVERSION1_3W || defined HWVERSION1_3 |
#include "HAL_HW1_3.h" |
#endif |
#ifdef HWVERSION3_9 |
#include "HAL_HW3_9.h" |
#endif |
volatile uint16_t timer; |
volatile uint16_t abo_timer; |
volatile static unsigned int tim_main; |
uint8_t key_state = 0; // debounced and inverted key state: |
// bit = 1: key pressed |
uint8_t key_press = 0; // key press detect |
uint8_t key_long = 0; // key long press |
uint8_t key_rpt = 0; // key repeat |
uint8_t key_lrpt = 0; // key long press and repeat |
uint8_t key_rpts = 0; // key long press and speed repeat |
uint8_t repeat_speed = 0; |
uint16_t DisplayTime = 0; // Leuchtdauer |
volatile uint16_t IdleTimer = 0; // InaktivitätsTimer |
uint16_t WarnCount = 0; // Zähler der LIPO Warnzeit |
uint16_t WarnToggle = 0; // Togglezähler zum blinken |
uint16_t WarnTime = 10; // Länge der LIPO Warnzeit 10 Sek. |
uint16_t PoffTime = 30; // Länge der Wartezeit vor Abschalten 30 Sek. |
//uint8_t servo = 0; |
volatile uint8_t Display_on;// Flag Display on/off |
unsigned int BeepTime = 0; |
unsigned int BeepMuster = 0xffff; |
unsigned int BeepPrio = 0; |
volatile unsigned int CountMilliseconds = 0; |
// Size of Buffer for Converting unsigned int Value to ASCII |
#define STRING_BUFFER_SIZE 5 |
// Buffer for Converting unsigned int Value to ASCII |
char String_Buffer[STRING_BUFFER_SIZE]; |
//-------------------------------------------------------------- |
// |
void Timer1_Init (void) // Timer 1-A |
{ |
// löschen |
TCCR1A = 0; |
TCCR1B = 0; |
TIMSK1 = 0; |
// setzen |
TCCR1A |= (1 << COM1A1) | (1 << WGM11); |
TCCR1B |= (1 << CS11) | (1 << CS10) | (1 << WGM13) | (1 << WGM12); |
ICR1 = (F_CPU / 64) * 20 / 1000; |
OCR1A = 470; // ca. Servomitte |
} |
//-------------------------------------------------------------- |
void Timer2_Init (void) // Displayhelligkeit |
{ |
DDRD |= (1 << DDD7); // PD7 output |
TCCR2A |= (1 << WGM21) | (1 << WGM20) | (1 << COM2A1); // non invers |
TCCR2B |= (1 << CS20); // Prescaler 1/1 |
TIMSK2 |= (1 << OCIE2A) | (1 << OCIE2B); |
OCR2A = 255; |
} |
#if defined HWVERSION1_2 || defined HWVERSION1_2W |
//-------------------------------------------------------------- |
ISR(TIMER2_COMPA_vect) |
{ |
PORTD &= ~(1 << PD7); |
PORTC &= ~(1 << PC0); |
PORTC &= ~(1 << PC1); |
} |
ISR(TIMER2_COMPB_vect) |
{ |
PORTD |= (1 << PD7); |
PORTC |= (1 << PC0); |
PORTC |= (1 << PC1); |
} |
#endif |
#if defined HWVERSION1_3 || defined HWVERSION1_3W |
//-------------------------------------------------------------- |
ISR(TIMER2_COMPA_vect) |
{ |
PORTD &= ~(1 << PD7); |
PORTD &= ~(1 << PD6); |
PORTC &= ~(1 << PC2); |
} |
ISR(TIMER2_COMPB_vect) |
{ |
PORTD |= (1 << PD7); |
PORTD |= (1 << PD6); |
PORTC |= (1 << PC2); |
} |
#endif |
#ifdef HWVERSION3_9 |
//-------------------------------------------------------------- |
ISR(TIMER2_COMPA_vect) |
{ |
PORTD |= (1 << PIND7); // MartinR: von PD auf PIND geändert |
} |
ISR(TIMER2_COMPB_vect) |
{ |
PORTD &= ~(1 << PIND7); // MartinR: von PD auf PIND geändert |
} |
#endif |
//-------------------------------------------------------------- |
void Timer0_Init (void) // System (100Hz) |
{ |
timer = 0; |
TCCR0A = (1 << WGM01); |
TCCR0B = (1 << CS02) | (1 << CS00); |
OCR0A = (F_CPU / (100L * 1024L)) ; |
TIMSK0 |= (1 << OCIE0A); // enable interrupt for OCR |
} |
//-------------------------------------------------------------- |
ISR(TIMER0_COMPA_vect) // Timer-Interrupt (100 Hz) |
{ |
static uint8_t ct0 = 0; |
static uint8_t ct1 = 0; |
static uint8_t k_time_l = 0; |
static uint8_t k_time_r = 0; |
static uint8_t k_time_lr = 0; |
static uint8_t k_time_rs = 0; |
uint8_t i; |
static unsigned char cnt_1ms = 1,cnt = 0; |
unsigned char beeper_ein = 0; |
// unsigned char pieper_ein = 0; |
// Key handling by Peter Dannegger |
// see www.mikrocontroller.net |
i = key_state ^ ~KEY_PIN; // key changed ? |
ct0 = ~(ct0 & i); // reset or count ct0 |
ct1 = ct0 ^ (ct1 & i); // reset or count ct1 |
i &= (ct0 & ct1); // count until roll over ? |
key_state ^= i; // then toggle debounced state |
key_press |= (key_state & i); // 0->1: key press detect |
if (PKT_IdleBeep == 1) |
{ |
IdleTimer ++; // nix zu tun? Timer hochzählen |
if (IdleTimer == 12000) // Warnhinweis |
{ |
set_beep ( 200, 0x0080, BeepNormal); |
IdleTimer = 0; |
} |
} |
if (!cnt--) |
{ |
cnt = 9; |
CountMilliseconds++; |
cnt_1ms++; |
} |
if (i!=0) |
{ // Displaylicht einschalten, und bzw. Timeoutzählerreset wenn Taste gedrückt wurde |
if (Display_on == 0) |
set_D_LIGHT(); |
Display_on = 1; // Flag Display on |
DisplayTime = 0; // Timer Reset |
IdleTimer = 0; // Idletimeout Reset |
} |
if (DisplayTimeout > 0) |
{ |
if (Display_on == 1) |
{ |
DisplayTime++; |
if ((DisplayTime / 100) == DisplayTimeout) // ISR läuft mit 100Hz |
{ // Displaylicht ausschalten |
clr_D_LIGHT(); |
Display_on = 0; // Flag Display off |
} |
} |
} |
//-------------------------------------------------------------- |
#ifdef HWVERSION3_9 |
if (ADCSRA & ADIE) LipoCheck(); // Lipo prüfen // MartinR nicht wenn Stick aktiv |
//LipoCheck(); // Lipo prüfen // MartinR: soe war es |
#endif |
//-------------------------------------------------------------- |
if (BeepTime) |
{ |
if (BeepTime > 10) |
BeepTime -= 10; |
else |
{ |
BeepTime = 0; |
} |
if (BeepTime & BeepMuster) |
beeper_ein = 1; |
else beeper_ein = 0; |
} |
else |
{ |
beeper_ein = 0; |
BeepMuster = 0xffff; |
BeepPrio = BeepNormal; |
} |
if (beeper_ein==1) |
set_BEEP(); |
else |
clr_BEEP(); |
//-------------------------------------------------------------- |
if ((key_state & LONG_MASK) == 0) // check long key function |
k_time_l = REPEAT_START; // start delay |
if (--k_time_l == 0) // long countdown |
key_long |= (key_state & LONG_MASK); |
//-------------------------------------------------------------- |
if ((key_state & REPEAT_MASK) == 0) // check repeat function |
k_time_r = 1; // kein delay |
if (--k_time_r == 0) |
{ |
k_time_r = REPEAT_NEXT; // repeat delay |
key_rpt |= (key_state & REPEAT_MASK); |
} |
//-------------------------------------------------------------- |
if ((key_state & LONG_REPEAT_MASK) == 0) // check repeat function |
k_time_lr = REPEAT_START; // start delay |
if (--k_time_lr == 0) |
{ |
k_time_lr = REPEAT_NEXT; // repeat delay |
key_lrpt |= (key_state & LONG_REPEAT_MASK); |
} |
//-------------------------------------------------------------- |
if ((key_state & LONG_REPEAT_SP_MASK) == 0) // check repeatX function |
k_time_rs = REPEAT_START; // start delay |
if (--k_time_rs == 0) // repeat countdown |
{ |
if (repeat_speed == 1) |
{ |
k_time_rs = REPEAT_SPEED_1; |
key_rpts |= (key_state & LONG_REPEAT_SP_MASK); |
} |
else if (repeat_speed == 2) |
{ |
k_time_rs = REPEAT_SPEED_2; |
key_rpts |= (key_state & LONG_REPEAT_SP_MASK); |
} |
else if (repeat_speed == 3) |
{ |
k_time_rs = REPEAT_SPEED_3; |
key_rpts |= (key_state & LONG_REPEAT_SP_MASK); |
} |
} |
if (timer > 0) |
timer --; |
if (abo_timer > 0) |
abo_timer --; |
// if (receiveNMEA==true) |
// { |
// if (bt_receiveNMEA()) Tracking_NMEA(); |
// |
// } |
} |
//-------------------------------------------------------------- |
#ifdef HWVERSION3_9 |
void LipoCheck (void) // Lowbatpin des Spannungswandlers prüfen |
// LBO des LT1308 wechselt zum Ende der Batterielaufzeit häufig seinen Zustand in der Übergangsphase zum LowBat |
// Die Akkuspannung schwankt auch abhängig vom momentanen Stromverbrauch |
{ |
if (WarnToggle == 1) // Beim ersten Auftreten Warnung ausgeben, Rythmus 5/10 Sekunden |
{ |
set_beep ( 1000, 0x0020, BeepNormal); |
lcd_printp_at (0, 0, PSTR(" LIPO !!Warnung!! "), 2); |
} |
if (WarnToggle == WarnTime * 100) |
WarnToggle = 0; // erstmal bis hier warnen |
if (WarnToggle > 0) |
WarnToggle++; // weiter hochzählen |
if (PINC & (1 << LowBat)) // Kurzzeitige Unterspannung bearbeiten und Warnung ausgeben |
{ |
WarnCount = 0; |
// if (WarnCount > 0) |
// WarnCount--; // Bei LIPO OK erstmal runterzählen, LT1308 überlegt sich noch genauer ob nun ok oder nicht |
} |
if (!(PINC & (1 << LowBat)) ) // LT1308 hat Unterspannung erkannt |
{ |
WarnCount++; // solange LBO low ist Zähler hochzählen |
if (WarnCount == 10 && WarnToggle == 0) // mit "10" etwas unempfindlicher gegen kurze Impulse machen |
WarnToggle = 1; // Warnhinweis starten |
} |
if ((WarnCount) == PoffTime * 100) |
clr_V_On(); // Spannung abschalten |
} |
#endif |
//-------------------------------------------------------------- |
unsigned int SetDelay (unsigned int t) |
{ |
return(CountMilliseconds + t + 1); |
} |
//-------------------------------------------------------------- |
char CheckDelay(unsigned int t) |
{ |
return(((t - CountMilliseconds) & 0x8000) >> 9); |
} |
//-------------------------------------------------------------- |
void Delay_ms(unsigned int w) |
{ |
unsigned int akt; |
akt = SetDelay(w); |
while (!CheckDelay(akt)); |
} |
//-------------------------------------------------------------- |
// |
uint8_t get_key_press (uint8_t key_mask) |
{ |
uint8_t sreg = SREG; |
// disable all interrupts |
cli(); |
key_mask &= key_press; // read key(s) |
key_press ^= key_mask; // clear key(s) |
SREG = sreg; // restore status register |
return key_mask; |
} |
//-------------------------------------------------------------- |
// |
uint8_t get_key_short (uint8_t key_mask) |
{ |
uint8_t ret; |
uint8_t sreg = SREG; |
// disable all interrupts |
cli(); |
ret = get_key_press (~key_state & key_mask); |
SREG = sreg; // restore status register |
return ret; |
} |
//-------------------------------------------------------------- |
// |
uint8_t get_key_long (uint8_t key_mask) |
{ |
uint8_t sreg = SREG; |
// disable all interrupts |
cli(); |
key_mask &= key_long; // read key(s) |
key_long ^= key_mask; // clear key(s) |
SREG = sreg; // restore status register |
return get_key_press (get_key_rpt (key_mask)); |
} |
//-------------------------------------------------------------- |
// |
uint8_t get_key_rpt (uint8_t key_mask) |
{ |
uint8_t sreg = SREG; |
// disable all interrupts |
cli(); |
key_mask &= key_rpt; // read key(s) |
key_rpt ^= key_mask; // clear key(s) |
SREG = sreg; // restore status register |
return key_mask; |
} |
//-------------------------------------------------------------- |
// |
uint8_t get_key_long_rpt (uint8_t key_mask) |
{ |
uint8_t sreg = SREG; |
// disable all interrupts |
cli(); |
key_mask &= key_lrpt; // read key(s) |
key_lrpt ^= key_mask; // clear key(s) |
SREG = sreg; // restore status register |
return get_key_rpt (~key_press^key_mask); |
} |
//-------------------------------------------------------------- |
// |
uint8_t get_key_long_rpt_sp (uint8_t key_mask, uint8_t key_speed) |
{ |
uint8_t sreg = SREG; |
// disable all interrupts |
cli(); |
key_mask &= key_rpts; // read key(s) |
key_rpts ^= key_mask; // clear key(s) |
repeat_speed = key_speed; |
SREG = sreg; // restore status register |
return key_mask; |
} |
void set_beep ( uint16_t Time, uint16_t Muster, uint8_t Prio) |
{ |
if (Prio == BeepNormal) |
{ |
if (BeepPrio == BeepNormal) // nur setzen wenn keine hohe Prio schon aktiv ist |
{ |
BeepTime = Time; |
BeepMuster = Muster; |
} |
} |
if (Prio == BeepSevere) |
{ |
if (!BeepPrio == BeepSevere) |
{ |
BeepPrio = BeepSevere; // hohe Prio setzen |
BeepTime = Time; |
BeepMuster = Muster; |
} |
} |
if (Prio == BeepOff) |
{ |
BeepPrio = BeepNormal; // Beep hohe Prio aus |
BeepTime = 0; |
BeepMuster = 0; |
} |
} |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/timer.h |
---|
0,0 → 1,93 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* based on the key handling by Peter Dannegger * |
* see www.mikrocontroller.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#ifndef _TIMER_H |
#define _TIMER_H |
#include "cpu.h" |
#include "main.h" |
#define KEY_ALL ((1 << KEY_PLUS) | (1 << KEY_MINUS) | (1 << KEY_ENTER) | (1 << KEY_ESC)) |
#define LONG_MASK ((1 << KEY_PLUS) | (1 << KEY_MINUS) | (1 << KEY_ENTER) | (1 << KEY_ESC)) |
#define REPEAT_MASK ((1 << KEY_PLUS) | (1 << KEY_MINUS) | (1 << KEY_ENTER) | (1 << KEY_ESC)) |
#define LONG_REPEAT_MASK ((1 << KEY_PLUS) | (1 << KEY_MINUS) | (1 << KEY_ENTER) | (1 << KEY_ESC)) |
#define LONG_REPEAT_SP_MASK ((1 << KEY_PLUS) | (1 << KEY_MINUS) | (1 << KEY_ENTER) | (1 << KEY_ESC)) |
#define REPEAT_START 70 // after 700ms |
#define REPEAT_NEXT 15 // every 150ms |
#define REPEAT_SPEED_1 20 // every 200ms |
#define REPEAT_SPEED_2 8 // every 80ms |
#define REPEAT_SPEED_3 1 // every 10ms |
#define BeepNormal 0 // Normal Beep |
#define BeepSevere 1 // schwerer Fehler, Beep nicht unterbrechbar |
#define BeepOff 2 // Beep aus |
#define ABO_TIMEOUT 300 // 3 sec |
extern volatile uint8_t Display_on; |
extern volatile uint16_t IdleTimer; |
extern volatile uint16_t timer; |
extern volatile uint16_t abo_timer; |
extern uint16_t WarnCount; |
//extern volatile unsigned int BeepTime; |
extern unsigned int BeepTime; |
extern unsigned int BeepMuster; |
void Timer0_Init (void); // Systeminterrupt |
void Timer1_Init (void); // Servotester |
void Timer2_Init (void); // Displayhelligkeit |
uint8_t get_key_press (uint8_t key_mask); // sofort beim drücken |
uint8_t get_key_short (uint8_t key_mask); // erst beim loslassen |
uint8_t get_key_long (uint8_t key_mask); // verzögert |
uint8_t get_key_rpt (uint8_t key_mask); // mit verzögerung |
uint8_t get_key_long_rpt (uint8_t key_mask); // |
uint8_t get_key_long_rpt_sp (uint8_t key_mask, uint8_t key_speed); // mit verzögerung und 3 versch. geschw. |
void set_beep ( uint16_t Time, uint16_t Muster, uint8_t Prio); |
extern volatile unsigned int CountMilliseconds; |
void Delay_ms(unsigned int); |
unsigned int SetDelay (unsigned int t); |
char CheckDelay (unsigned int t); |
void LipoCheck (void); // Lowbatpin des Spannungswandlers prüfen |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/tools.c |
---|
0,0 → 1,338 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#include "cpu.h" |
#include <avr/io.h> |
#include <avr/interrupt.h> |
#include <avr/pgmspace.h> |
#include <string.h> |
#include <stdlib.h> |
#include <stdbool.h> |
#include <util/delay.h> |
#include "main.h" |
#include "setup.h" |
#include "lcd.h" |
#include "menu.h" |
#include "servo.h" |
#include "motortest.h" |
#include "eeprom.h" |
#include "timer.h" |
#include "connect.h" |
#ifdef HWVERSION3_9 |
#include "HAL_HW3_9.h" |
#endif |
#ifdef HWVERSION1_3 |
#include "HAL_HW1_3.h" |
#endif |
//#include "voltmeter.h" |
#include "lipo.h" |
#include "messages.h" |
//-------------------------------------------------------------- |
#define ITEMS_PKT 6 |
prog_char tools_menuitems_pkt[ITEMS_PKT][NUM_LANG][18]= // zeilen,zeichen+1 |
// German, English, French, Netherlands |
{ |
{"Motor Tester ","Motor Tester ","Motor Tester ","Motor Tester "}, |
{"Servo Tester ","Servo Tester ","Servo Tester ","Servo Tester "}, |
{"PC BT > Kopter ","PC BT > Kopter ","PC BT > Kopter ","PC BT > Kopter "}, |
{"PC USB > Kopter ","PC USB > Kopter ","PC USB > Kopter ","PC USB > Kopter "}, |
{"PKT Setup \x1d","PKT Setup \x1d","PKT Setup \x1d","PKT Setup \x1d"}, |
{"PKT Version ","PKT Version ","PKT Version ","PKT Version "}, |
}; |
//-------------------------------------------------------------- |
void PKT_Tools (void) |
{ |
uint8_t ii = 0; |
uint8_t Offset = 0; |
uint8_t size = 0; |
size = ITEMS_PKT ; |
uint8_t dmode = 0; |
uint8_t target_pos = 1; |
uint8_t val; |
val = 0; |
while(1) |
{ |
lcd_cls (); |
lcd_printp_at (0, 0, PSTR(" PKT-Tools "), 2); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_1), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE1), 0); |
while(2) |
{ |
ii = 0; |
if(Offset > 0) |
{ |
lcd_printp_at(1,1, PSTR("\x12"), 0); |
} |
for(ii = 0;ii < 6 ; ii++) |
{ |
if((ii+Offset) < size) |
{ |
lcd_printp_at(3,ii+1,tools_menuitems_pkt[ii+Offset][DisplayLanguage], 0); |
} |
if((ii == 5)&&(ii+Offset < (size-1))) |
{ |
lcd_printp_at(1,6, PSTR("\x13"), 0); |
} |
} |
if(dmode == 0) |
{ |
if(Offset == 0) |
{ |
if(size > 6) |
{ |
val = menu_choose2 (1, 5, target_pos,0,1); |
} |
else |
{ |
val = menu_choose2 (1, size, target_pos,0,0); |
} |
} |
else |
{ |
val = menu_choose2 (2, 5, target_pos,1,1); |
} |
} |
if(dmode == 1) |
{ |
if(Offset+7 > size) |
{ |
val = menu_choose2 (2, 6, target_pos,1,0); |
} |
else |
{ |
val = menu_choose2 (2, 5, target_pos,1,1); |
} |
} |
if(val == 254) |
{ |
Offset++; |
dmode = 1; |
target_pos = 5; |
} |
else if(val == 253) |
{ |
Offset--; |
dmode = 0; |
target_pos = 2; |
} |
else if(val == 255) |
{ |
return; |
} |
else |
{ |
break; |
} |
} |
target_pos = val; |
if((val+Offset) == 1 ) |
motor_test(FC_Mode); |
if((val+Offset) == 2 ) |
servo_test(); |
#ifdef HWVERSION3_9 |
if(U02SV2 == 0) |
{ |
if((val+Offset) == 3 ) |
Port_BT2Wi(); |
if((val+Offset) == 4 ) |
Port_USB2Wi(); |
} |
else if(U02SV2 == 1) |
{ |
if((val+Offset) == 3 ) |
Port_BT2FC(); |
if((val+Offset) == 4 ) |
Port_USB2FC(); |
} |
#else |
if((val+Offset) == 3 ) |
Show_Error_HW(); |
if((val+Offset) == 4 ) |
Show_Error_HW(); |
#endif |
if((val+Offset) == 5) |
PKT_Setup(); |
if((val+Offset) == 6) |
Show_Version(); |
} |
} |
//-------------------------------------------------------------- |
// |
void PC_Fast_Connect (void) |
{ |
uint8_t value = 1; |
while(1) |
{ |
lcd_cls(); |
// lcd_printp_at (0, 0, PSTR(" PC-Quick-Verbindung "), 2); |
lcd_puts_at(0, 8, strGet(TOOLS1), 2); |
lcd_printp_at (3, 3, PSTR("PC BT > Kopter"), 0); |
lcd_printp_at (3, 4, PSTR("PC USB > Kopter"), 0); |
// lcd_printp_at (0, 7, PSTR(KEY_LINE_1), 0); |
lcd_puts_at(0, 7, strGet(KEYLINE1), 0); |
// lcd_puts_at(0, 7, strGet(KEYLINE1), 0); |
while(2) |
{ |
if(value == 1) |
{ |
lcd_printp_at (1, 3, PSTR("\x1d"), 0); |
lcd_printp_at (1, 4, PSTR(" "), 0); |
} |
else |
{ |
lcd_printp_at (1, 3, PSTR(" "), 0); |
lcd_printp_at (1, 4, PSTR("\x1d"), 0); |
} |
if(get_key_press (1 << KEY_MINUS)) |
value = 1; |
if(get_key_press (1 << KEY_PLUS)) |
value = 2; |
if(get_key_short (1 << KEY_ENTER)) |
{ |
#ifdef HWVERSION3_9 |
if(U02SV2 == 0) |
{ |
if(value == 1) |
Port_BT2Wi(); |
if(value == 2) |
Port_USB2Wi(); |
} |
else if(U02SV2 == 1) |
{ |
if(value == 1) |
Port_BT2FC(); |
if(value == 2) |
Port_USB2FC(); |
} |
#else |
if(value == 1) |
Show_Error_HW(); |
if(value == 2) |
Show_Error_HW(); |
#endif |
break; |
} |
if(get_key_press (1 << KEY_ESC)) |
{ |
get_key_press(KEY_ALL); |
return; |
} |
} |
} |
} |
void Test_HB (void) // bleibt für Tests |
{ |
#ifdef HWVERSION3_9 |
// ADC_Init(); |
// |
// uint16_t volt_avg = 0; |
//// uint64_t volt_tmp = 0; |
// uint16_t Balken = 0; |
lcd_cls(); |
lcd_printp_at(12, 7, PSTR("Ende"), 0); |
// lcd_rect(104, 0, 23, 8, 1); // Rahmen |
do |
{ |
// |
// |
if(samples>4095) |
{ |
// write_ndigit_number_u(0, 4, accumulator, 5, 0); |
oversampled(); |
volt_avg = Vin; |
} |
// // write_ndigit_number_u(0, 3, samples, 5, 0); |
// |
//// write_ndigit_number_u(0, 1, Vin, 5, 0); |
// _delay_ms(50); |
#ifndef ohne_Lipo // MartinR |
show_Lipo(); |
#endif |
write_ndigit_number_u_100th(5, 5, volt_avg, 0, 0); |
lcd_printp_at(10, 5, PSTR("Volt"), 0); |
// |
// |
// |
write_ndigit_number_u(0, 6, Lipo_UOffset, 5, 0,0); |
// write_ndigit_number_u(15, 6, WarnCount, 4, 0); |
//// write_ndigit_number_u(10, 5, Vcorr, 4, 0); |
if (get_key_press (1 << KEY_PLUS) | get_key_long_rpt_sp ((1 << KEY_PLUS), 3)) |
{ |
Lipo_UOffset = Lipo_UOffset +10; |
} |
if (get_key_press (1 << KEY_MINUS) | get_key_long_rpt_sp ((1 << KEY_MINUS),3)) |
{ |
Lipo_UOffset = Lipo_UOffset -10; |
} |
// |
} |
while(!get_key_press (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
return; |
#endif |
} |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/tools.h |
---|
0,0 → 1,41 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#ifndef _tools_H |
#define _tools_H |
void PKT_Tools (void); |
void Test_HB (void); // TestTool für Softwareentwicklung |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/tracking.c |
---|
0,0 → 1,203 |
/* |
* tracking.c |
* |
* Created on: 13.02.2012 |
* Author: cebra |
*/ |
#include "cpu.h" |
#include <string.h> |
#include <util/delay.h> |
#include <avr/interrupt.h> |
#include <stdlib.h> |
#include "main.h" |
#include "tracking.h" |
#include <avr/pgmspace.h> |
#include "fifo.h" |
#include "bluetooth.h" |
#ifdef HWVERSION3_9 |
#define MAX_POWER 10 |
#define getPower(x) (int32_t)pgm_read_dword(&powers[x]) |
const int32_t PROGMEM powers[MAX_POWER] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000}; |
HomePos_t MK_pos; // Home position of station |
//GPS_Pos_t currentPos; // Current position of flying object |
int8_t NMEAsatsInUse; // Number of satelites currently in use |
int32_t NMEAlatitude, NMEAlongitude; |
char NMEATime[9] = "GP:Ti:me"; |
//char NMEADate [6]; |
// Trying to avoid floating point maths here. Converts a floating point string to an integer with a smaller unit |
// i.e. floatStrToInt("4.5", 2) = 4.5 * 1E2 = 450 |
int32_t floatStrToInt(const char *s, int32_t power1) |
{ char *endPtr; |
int32_t v = strtol(s, &endPtr, 10); |
if (*endPtr == '.') { |
for (s = endPtr + 1; *s && power1; s++) { |
v = v * 10 + (*s - '0'); |
--power1; |
} |
} |
if (power1) { |
// Table to avoid multiple multiplications |
v = v * getPower(power1); |
} |
return v; |
} |
// NMEA latitudes are in the form ddmm.mmmmm, we want an integer in 1E-7 degree steps |
int32_t getLatitude(const char *s, const char *NS) |
{ int32_t deg = (s[0] - '0') * 10 + s[1] - '0'; // First 2 chars are full degrees |
int32_t min = floatStrToInt(&s[2], 6) / 6; // Minutes * 1E5 * 100 / 60 = Minutes * 1E6 / 6 = 1E-7 degree steps |
deg = deg * 10000000 + min; |
if (*NS == 'S') deg = -deg; |
return deg; |
} |
// NMEA longitudes are in the form dddmm.mmmmm, we want an integer in 1E-7 degree steps |
int32_t getLongitude(const char *s, const char *WE) |
{ int32_t deg = ((s[0] - '0') * 10 + s[1] - '0') * 10 + s[2] - '0'; // First 3 chars are full degrees |
int32_t min = floatStrToInt(&s[3], 6) / 6; // Minutes * 1E5 * 100 / 60 = Minutes * 1E6 / 6 = 1E-7 degree steps |
deg = deg * 10000000 + min; |
if (*WE == 'W') deg = -deg; |
return deg; |
} |
void getNMEATime( const char *s) |
{ |
uint8_t sem = 0; |
uint8_t i; |
for ( i=0;i < 6; i++ ) |
{ |
NMEATime[sem++] = s[i]; |
if (i==1 || i==3) NMEATime[sem++] = ':'; |
} |
NMEATime[sem] = '\0'; |
} |
//$GPGGA,191410.000,4735.5634,N,00739.3538,E,1,04,4.4,351.5,M,48.0,M,,*45 |
// ^ ^ ^ ^ ^ ^ ^ ^ |
// | | | | | | | | |
// | | | | | | | Höhe Geoid minus |
// | | | | | | | Höhe Ellipsoid (WGS84) |
// | | | | | | | in Metern (48.0,M) |
// | | | | | | | |
// | | | | | | Höhe über Meer (über Geoid)in Metern (351.5,M) |
// | | | | | | |
// | | | | | HDOP (horizontal dilution |
// | | | | | of precision) Genauigkeit |
// | | | | | |
// | | | | Anzahl der erfassten Satelliten |
// | | | | |
// | | | Qualität der Messung |
// | | | (0 = ungültig) |
// | | | (1 = GPS) |
// | | | (2 = DGPS) |
// | | | (6 = geschätzt nur NMEA-0183 2.3) |
// | | | |
// | | Längengrad |
// | | |
// | Breitengrad |
// | |
// Uhrzeit |
void Tracking_NMEA(void) |
{ |
char *token; |
if (decodeNMEA()) { |
token = strtok((char*)data_decode, ","); |
if (!strcmp(token, "GPGGA")) |
{ |
// $GPGGA,220613.400,4843.5080,N,00922.9583,E,1,7,2.23,287.1,M,48.0,M,, |
// Skip time |
getNMEATime(strtok(0, ".")); //Zeit |
strtok(0, ","); // Skip Rest von der Zeit |
// Latitude |
NMEAlatitude = getLatitude(strtok(0, ","), strtok(0, ",")); //N |
// Longitude |
NMEAlongitude = getLongitude(strtok(0, ","), strtok(0, ","));//E |
// Signal valid? (Position Fix Indicator) |
if (*strtok(0, ",") != '0')// Qualität |
{ |
// Satellites in use |
NMEAsatsInUse = atoi(strtok(0, ",")); //Anzahl Sats |
// // Skip dilution |
// strtok(0, ","); //Dilution |
// // Altitude |
// currentPos.Altitude = floatStrToInt(strtok(0, ","), 3); |
// currentPos.Latitude = latitude; |
// currentPos.Longitude = longitude; |
// |
// if ((coldstart) && (satsInUse > 5)) { |
// // First position after reboot (or change of mode) will be the home position (facing north) |
// MK_pos.Home_Lon = (double)currentPos.Longitude / 10000000.0; |
// MK_pos.Home_Lat = (double)currentPos.Latitude / 10000000.0; |
// MK_pos.Home_Lon7 = currentPos.Longitude; |
// MK_pos.Home_Lat7 = currentPos.Latitude; |
// MK_pos.Home_Alt = currentPos.Altitude; |
// MK_pos.direction = 0; |
// coldstart = 0; |
// Double_Beep(DBEEPNMEAFIX, DBEEPMEAFIXP); |
} |
// do_tracking(); |
// } |
} |
} |
// Displ_GPS(); // letzte empfangene Daten auch bei ausgeschalteter NMEA sichtbar |
} |
uint8_t hexDigitToInt(uint8_t digit) |
{ |
if (digit >= '0' && digit <= '9') return digit - '0'; |
if (digit >= 'a' && digit <= 'f') return digit - 'a' + 10; |
if (digit >= 'A' && digit <= 'F') return digit - 'A' + 10; |
return 0; |
} |
uint8_t decodeNMEA(void) |
{ |
uint8_t ret = 0; |
uint8_t crc; |
uint8_t tmpCRC = 0; |
uint8_t i; |
if (rx_ready == 1 && rx_len > 0) { |
// Calculate checksum |
for (i = 1; i < rx_len && rx_buffer[i] != '*'; i++) { |
tmpCRC ^= rx_buffer[i]; |
} |
if (rx_len >= i + 3) { |
crc = hexDigitToInt(rx_buffer[i + 1]) << 4 | hexDigitToInt(rx_buffer[i + 2]); |
if (crc == tmpCRC) { |
rx_buffer[i] = 0; |
strcpy(data_decode, &rx_buffer[1]); // Data without $, crc |
ret = 1; |
// wi232RX = 1; // So antenna-symbol will blink |
// cli(); |
// rx_timeout = 0; // Got valid data, reset counter |
// sei(); |
} |
} |
} |
// if (rx_timeout < RX_TIME_OLD) wi232RX = 1; |
rx_ready = 0; // Unlock buffer, next NMEA string can be received |
return ret; |
} |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/tracking.h |
---|
0,0 → 1,35 |
/* |
* tracking.h |
* |
* Created on: 13.02.2012 |
* Author: cebra |
*/ |
#ifndef TRACKING_H_ |
#define TRACKING_H_ |
typedef struct { |
double Home_Lon; // in degrees |
double Home_Lat; // in degrees |
int32_t Home_Lon7; // in 1E-7 degrees |
int32_t Home_Lat7; // in 1E-7 degrees |
int32_t Home_Alt; // in mm |
int16_t direction; // ermittelte Konstante aus Mittelposition Antenne geo.bearing - navi_data.CompassHeading |
}__attribute__((packed)) HomePos_t; |
extern int8_t NMEAsatsInUse; // Number of satelites currently in use |
extern int32_t NMEAlatitude, NMEAlongitude; |
extern char NMEATime[9]; |
void Tracking_NMEA(void); |
uint8_t decodeNMEA(void); |
#endif /* TRACKING_H_ */ |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/twimaster.c |
---|
0,0 → 1,511 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) Holger Buss, Ingo Busker |
// + Nur f?r den privaten Gebrauch |
// + www.MikroKopter.com |
// + porting the sources to other systems or using the software on other systems (except hardware from www.mikrokopter.de) is not allowed |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Es gilt f?r das gesamte Projekt (Hardware, Software, Bin?rfiles, Sourcecode und Dokumentation), |
// + dass eine Nutzung (auch auszugsweise) nur f?r den privaten (nicht-kommerziellen) Gebrauch zul?ssig ist. |
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt |
// + bzgl. der Nutzungsbedingungen aufzunehmen. |
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Best?ckung und Verkauf von Platinen oder Baus?tzen, |
// + Verkauf von Luftbildaufnahmen, usw. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder ver?ffentlicht, |
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright m?ssen dann beiliegen |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts |
// + auf anderen Webseiten oder sonstigen Medien ver?ffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de" |
// + eindeutig als Ursprung verlinkt werden |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Keine Gew?hr auf Fehlerfreiheit, Vollst?ndigkeit oder Funktion |
// + Benutzung auf eigene Gefahr |
// + Wir ?bernehmen keinerlei Haftung f?r direkte oder indirekte Personen- oder Sachsch?den |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur |
// + mit unserer Zustimmung zul?ssig |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Redistributions of source code (with or without modifications) must retain the above copyright notice, |
// + this list of conditions and the following disclaimer. |
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived |
// + from this software without specific prior written permission. |
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet |
// + for non-commercial use (directly or indirectly) |
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted |
// + with our written permission |
// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be |
// + clearly linked as origin |
// + * porting to systems other than hardware from www.mikrokopter.de is not allowed |
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
// + POSSIBILITY OF SUCH DAMAGE. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "cpu.h" |
#include <avr/io.h> |
#include <avr/interrupt.h> |
#include <util/twi.h> |
#include <util/delay.h> |
#include "eeprom.h" |
#include "twimaster.h" |
#include "timer.h" |
volatile uint8_t twi_state = TWI_STATE_MOTOR_TX; |
volatile uint8_t dac_channel = 0; |
volatile uint8_t motor_write = 0; |
volatile uint8_t motor_read = 0; |
volatile uint8_t I2C_TransferActive = 0; |
volatile uint16_t I2CTimeout = 100; |
uint8_t MissingMotor = 0; |
uint8_t RequiredMotors = 1; |
char MotorenEin = 0; |
volatile uint8_t BLFlags = 0; |
MotorData_t Motor[MAX_MOTORS]; |
// bit mask for witch BL the configuration should be sent |
volatile uint16_t BLConfig_WriteMask = 0; |
// bit mask for witch BL the configuration should be read |
volatile uint16_t BLConfig_ReadMask = 0; |
// buffer for BL Configuration |
BLConfig_t BLConfig; |
#define I2C_WriteByte(byte) {TWDR = byte; TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE);} |
#define I2C_ReceiveByte() {TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE) | (1<<TWEA);} |
#define I2C_ReceiveLastByte() {TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE);} |
#define SCL_CLOCK 200000L |
#define I2C_TIMEOUT 30000 |
#define TWI_BASE_ADDRESS 0x52 |
uint8_t RAM_Checksum(uint8_t* pBuffer, uint16_t len) |
{ |
uint8_t crc = 0xAA; |
uint16_t i; |
for(i=0; i<len; i++) |
{ |
crc += pBuffer[i]; |
} |
return crc; |
} |
//-------------------------------------------------------------- |
// Initialize I2C (TWI) |
// |
void I2C_Init(char clear) |
{ |
uint8_t i; |
uint8_t sreg = SREG; |
cli(); |
// SDA is INPUT |
DDRC &= ~(1<<DDC1); |
// SCL is output |
DDRC |= (1<<DDC0); |
// pull up SDA |
//PORTC |= (1<<PORTC0)|(1<<PORTC1); |
// TWI Status Register |
// prescaler 1 (TWPS1 = 0, TWPS0 = 0) |
TWSR &= ~((1<<TWPS1)|(1<<TWPS0)); |
// set TWI Bit Rate Register |
TWBR = ((F_CPU/SCL_CLOCK)-16)/2; |
twi_state = TWI_STATE_MOTOR_TX; |
motor_write = 0; |
motor_read = 0; |
if(clear) for(i=0; i < MAX_MOTORS; i++) |
{ |
Motor[i].Version = 0; |
Motor[i].SetPoint = 0; |
Motor[i].SetPointLowerBits = 0; |
Motor[i].State = 0; |
Motor[i].ReadMode = BL_READMODE_STATUS; |
Motor[i].Current = 0; |
Motor[i].MaxPWM = 0; |
Motor[i].Temperature = 0; |
} |
sei(); |
SREG = sreg; |
} |
//-------------------------------------------------------------- |
void I2C_Reset(void) |
{ |
// stop i2c bus |
I2C_Stop(TWI_STATE_MOTOR_TX); |
TWCR = (1<<TWINT); // reset to original state incl. interrupt flag reset |
TWAMR = 0; |
TWAR = 0; |
TWDR = 0; |
TWSR = 0; |
TWBR = 0; |
I2C_TransferActive = 0; |
I2C_Init(0); |
I2C_WriteByte(0); |
BLFlags |= BLFLAG_READ_VERSION; |
} |
//-------------------------------------------------------------- |
// I2C ISR |
// |
ISR (TWI_vect) |
{ |
static uint8_t missing_motor = 0, motor_read_temperature = 0; |
static uint8_t *pBuff = 0; |
static uint8_t BuffLen = 0; |
switch (twi_state++) |
{ |
// Master Transmit |
case 0: // TWI_STATE_MOTOR_TX |
I2C_TransferActive = 1; |
// skip motor if not used in mixer |
// while((Mixer.Motor[motor_write][MIX_GAS] <= 0) && (motor_write < MAX_MOTORS)) motor_write++; |
if(motor_write >= MAX_MOTORS) // writing finished, read now |
{ |
BLConfig_WriteMask = 0; // reset configuration bitmask |
motor_write = 0; // reset motor write counter for next cycle |
twi_state = TWI_STATE_MOTOR_RX; |
I2C_WriteByte(TWI_BASE_ADDRESS + TW_READ + (motor_read<<1) ); // select slave address in rx mode |
} |
else I2C_WriteByte(TWI_BASE_ADDRESS + TW_WRITE + (motor_write<<1) ); // select slave address in tx mode |
break; |
case 1: // Send Data to Slave |
I2C_WriteByte(Motor[motor_write].SetPoint); // transmit setpoint |
// if old version has been detected |
if(!(Motor[motor_write].Version & MOTOR_STATE_NEW_PROTOCOL_MASK)) |
{ |
twi_state = 4; //jump over sending more data |
} |
// the new version has been detected |
else if(!( (Motor[motor_write].SetPointLowerBits && (RequiredMotors < 7)) || BLConfig_WriteMask || BLConfig_ReadMask ) ) |
{ // or LowerBits are zero and no BlConfig should be sent (saves round trip time) |
twi_state = 4; //jump over sending more data |
} |
break; |
case 2: // lower bits of setpoint (higher resolution) |
if ((0x0001<<motor_write) & BLConfig_ReadMask) |
{ |
Motor[motor_write].ReadMode = BL_READMODE_CONFIG; // configuration request |
} |
else |
{ |
Motor[motor_write].ReadMode = BL_READMODE_STATUS; // normal status request |
} |
// send read mode and the lower bits of setpoint |
I2C_WriteByte((Motor[motor_write].ReadMode<<3)|(Motor[motor_write].SetPointLowerBits & 0x07)); |
// configuration tranmission request? |
if((0x0001<<motor_write) & BLConfig_WriteMask) |
{ // redirect tx pointer to configuration data |
pBuff = (uint8_t*)&BLConfig; // select config for motor |
BuffLen = sizeof(BLConfig_t); |
} |
else |
{ // jump to end of transmission for that motor |
twi_state = 4; |
} |
break; |
case 3: // send configuration |
I2C_WriteByte(*pBuff); |
pBuff++; |
if(--BuffLen > 0) |
twi_state = 3; // if there are some bytes left |
break; |
case 4: // repeat case 0-4 for all motors |
if(TWSR == TW_MT_DATA_NACK) // Data transmitted, NACK received |
{ |
if(!missing_motor) |
missing_motor = motor_write + 1; |
if((Motor[motor_write].State & MOTOR_STATE_ERROR_MASK) < MOTOR_STATE_ERROR_MASK) |
Motor[motor_write].State++; // increment error counter and handle overflow |
} |
I2C_Stop(TWI_STATE_MOTOR_TX); |
I2CTimeout = 10; |
motor_write++; // next motor |
I2C_Start(TWI_STATE_MOTOR_TX); // Repeated start -> switch slave or switch Master Transmit -> Master Receive |
break; |
// Master Receive Data |
case 5: // TWI_STATE_MOTOR_RX |
if(TWSR != TW_MR_SLA_ACK) // SLA+R transmitted but no ACK received |
{ // no response from the addressed slave received |
Motor[motor_read].State &= ~MOTOR_STATE_PRESENT_MASK; // clear present bit |
if(++motor_read >= MAX_MOTORS) |
{ // all motors read |
motor_read = 0; // restart from beginning |
BLConfig_ReadMask = 0; // reset read configuration bitmask |
if(++motor_read_temperature >= MAX_MOTORS) |
{ |
motor_read_temperature = 0; |
BLFlags &= ~BLFLAG_READ_VERSION; |
} |
} |
BLFlags |= BLFLAG_TX_COMPLETE; |
I2C_Stop(TWI_STATE_MOTOR_TX); |
I2C_TransferActive = 0; |
} |
else |
{ // motor successfully addressed |
Motor[motor_read].State |= MOTOR_STATE_PRESENT_MASK; // set present bit |
if(Motor[motor_read].Version & MOTOR_STATE_NEW_PROTOCOL_MASK) |
{ |
// new BL found |
switch(Motor[motor_read].ReadMode) |
{ |
case BL_READMODE_CONFIG: |
pBuff = (uint8_t*)&BLConfig; |
BuffLen = sizeof(BLConfig_t); |
break; |
case BL_READMODE_STATUS: |
pBuff = (uint8_t*)&(Motor[motor_read].Current); |
if(motor_read == motor_read_temperature) BuffLen = 3; // read Current, MaxPwm & Temp |
else BuffLen = 1;// read Current only |
break; |
} |
} |
else // old BL version |
{ |
pBuff = (uint8_t*)&(Motor[motor_read].Current); |
if((BLFlags & BLFLAG_READ_VERSION) || (motor_read == motor_read_temperature)) BuffLen = 2; // Current & MaxPwm |
else BuffLen = 1; // read Current only |
} |
if(BuffLen == 1) |
{ |
I2C_ReceiveLastByte(); // read last byte |
} |
else |
{ |
I2C_ReceiveByte(); // read next byte |
} |
} |
MissingMotor = missing_motor; |
missing_motor = 0; |
break; |
case 6: // receive bytes |
*pBuff = TWDR; |
pBuff++; |
BuffLen--; |
if(BuffLen>1) |
{ |
I2C_ReceiveByte(); // read next byte |
} |
else if (BuffLen == 1) |
{ |
I2C_ReceiveLastByte(); // read last byte |
} |
else // nothing left |
{ |
if(BLFlags & BLFLAG_READ_VERSION) |
{ |
// if(!(FC_StatusFlags & FC_STATUS_MOTOR_RUN) && (Motor[motor_read].MaxPWM == 250) ) Motor[motor_read].Version |= MOTOR_STATE_NEW_PROTOCOL_MASK; |
if((Motor[motor_read].MaxPWM == 250) ) Motor[motor_read].Version |= MOTOR_STATE_NEW_PROTOCOL_MASK; |
else Motor[motor_read].Version = 0; |
} |
if(++motor_read >= MAX_MOTORS) |
{ |
motor_read = 0; // restart from beginning |
BLConfig_ReadMask = 0; // reset read configuration bitmask |
if(++motor_read_temperature >= MAX_MOTORS) |
{ |
motor_read_temperature = 0; |
BLFlags &= ~BLFLAG_READ_VERSION; |
} |
} |
I2C_Stop(TWI_STATE_MOTOR_TX); |
BLFlags |= BLFLAG_TX_COMPLETE; |
I2C_TransferActive = 0; |
return; |
} |
twi_state = 6; // if there are some bytes left |
break; |
case 21: |
I2C_WriteByte(0x80); // 2nd byte for all channels is 0x80 |
break; |
case 22: |
I2C_Stop(TWI_STATE_MOTOR_TX); |
I2C_TransferActive = 0; |
I2CTimeout = 10; |
// repeat case 18...22 until all DAC Channels are updated |
if(dac_channel < 2) |
{ |
dac_channel ++; // jump to next channel |
I2C_Start(TWI_STATE_GYRO_OFFSET_TX); // start transmission for next channel |
} |
else |
{ |
dac_channel = 0; // reset dac channel counter |
BLFlags |= BLFLAG_TX_COMPLETE; |
} |
break; |
default: |
I2C_Stop(TWI_STATE_MOTOR_TX); |
BLFlags |= BLFLAG_TX_COMPLETE; |
I2CTimeout = 10; |
motor_write = 0; |
motor_read = 0; |
I2C_TransferActive = 0; |
break; |
} |
} |
//-------------------------------------------------------------- |
uint8_t I2C_WriteBLConfig(uint8_t motor) |
{ |
uint8_t i; |
uint16_t timer; |
// if(MotorenEin || PC_MotortestActive) |
// return(BLCONFIG_ERR_MOTOR_RUNNING); // not when motors are running! |
if(MotorenEin) |
return(BLCONFIG_ERR_MOTOR_RUNNING); // not when motors are running! |
if(motor > MAX_MOTORS) |
return (BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist! |
if(motor) |
{ |
if(!(Motor[motor-1].State & MOTOR_STATE_PRESENT_MASK)) |
return(BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist! |
if(!(Motor[motor-1].Version & MOTOR_STATE_NEW_PROTOCOL_MASK)) |
return(BLCONFIG_ERR_HW_NOT_COMPATIBLE); // not a new BL! |
} |
// check BL configuration to send |
if(BLConfig.Revision != BLCONFIG_REVISION) |
return (BLCONFIG_ERR_SW_NOT_COMPATIBLE); // bad revison |
i = RAM_Checksum((uint8_t*)&BLConfig, sizeof(BLConfig_t) - 1); |
if(i != BLConfig.crc) |
return(BLCONFIG_ERR_CHECKSUM); // bad checksum |
timer = SetDelay(2000); |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
// prepare the bitmask |
if(!motor) // 0 means all |
{ |
BLConfig_WriteMask = 0xFF; // all motors at once with the same configuration |
} |
else //only one specific motor |
{ |
BLConfig_WriteMask = 0x0001<<(motor-1); |
} |
for(i = 0; i < MAX_MOTORS; i++) |
{ |
if((0x0001<<i) & BLConfig_WriteMask) |
{ |
Motor[i].SetPoint = 0; |
Motor[i].SetPointLowerBits = 0; |
} |
} |
motor_write = 0; |
// needs at least MAX_MOTORS loops of 2 ms (12*2ms = 24ms) |
do |
{ |
I2C_Start(TWI_STATE_MOTOR_TX); // start an i2c transmission |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
} |
while(BLConfig_WriteMask && !CheckDelay(timer)); // repeat until the BL config has been sent |
if(BLConfig_WriteMask) return(BLCONFIG_ERR_MOTOR_NOT_EXIST); |
return(BLCONFIG_SUCCESS); |
} |
//-------------------------------------------------------------- |
uint8_t I2C_ReadBLConfig(uint8_t motor) |
{ |
uint8_t i; |
uint16_t timer; |
// if(MotorenEin || PC_MotortestActive) |
return(BLCONFIG_ERR_MOTOR_RUNNING); // not when motors are running! |
if(MotorenEin) |
return(BLCONFIG_ERR_MOTOR_RUNNING); // not when motors are running! |
if(motor > MAX_MOTORS) |
return (BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist! |
if(motor == 0) |
return (BLCONFIG_ERR_READ_NOT_POSSIBLE); |
if(!(Motor[motor-1].State & MOTOR_STATE_PRESENT_MASK)) |
return(BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist! |
if(!(Motor[motor-1].Version & MOTOR_STATE_NEW_PROTOCOL_MASK)) |
return(BLCONFIG_ERR_HW_NOT_COMPATIBLE); // not a new BL! |
timer = SetDelay(2000); |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
// prepare the bitmask |
BLConfig_ReadMask = 0x0001<<(motor-1); |
for(i = 0; i < MAX_MOTORS; i++) |
{ |
if((0x0001<<i) & BLConfig_ReadMask) |
{ |
Motor[i].SetPoint = 0; |
Motor[i].SetPointLowerBits = 0; |
} |
} |
motor_read = 0; |
BLConfig.Revision = 0; // bad revision |
BLConfig.crc = 0; // bad checksum |
// needs at least MAX_MOTORS loops of 2 ms (12*2ms = 24ms) |
do |
{ |
I2C_Start(TWI_STATE_MOTOR_TX); // start an i2c transmission |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
}while(BLConfig_ReadMask && !CheckDelay(timer)); // repeat until the BL config has been received from all motors |
// validate result |
if(BLConfig.Revision != BLCONFIG_REVISION) return (BLCONFIG_ERR_SW_NOT_COMPATIBLE); // bad revison |
i = RAM_Checksum((uint8_t*)&BLConfig, sizeof(BLConfig_t) - 1); |
if(i != BLConfig.crc) return(BLCONFIG_ERR_CHECKSUM); // bad checksum |
return(BLCONFIG_SUCCESS); |
} |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/twimaster.h |
---|
0,0 → 1,80 |
#ifndef _I2C_MASTER_H |
#define _I2C_MASTER_H |
+ |
+#include <inttypes.h> |
+#include "mk-data-structs.h" |
+ |
+#define TWI_STATE_MOTOR_TX 0 |
+#define TWI_STATE_MOTOR_RX 5 |
+#define TWI_STATE_GYRO_OFFSET_TX 18 |
+ |
+extern volatile uint8_t twi_state; |
+extern volatile uint8_t motor_write; |
+extern volatile uint8_t motor_read; |
+extern volatile uint8_t I2C_TransferActive; |
+ |
+extern uint8_t MissingMotor; |
+ |
+#define MAX_MOTORS 12 |
+#define MOTOR_STATE_PRESENT_MASK 0x80 |
+#define MOTOR_STATE_ERROR_MASK 0x7F |
+#define MOTOR_STATE_NEW_PROTOCOL_MASK 0x01 |
+#define BLFLAG_TX_COMPLETE 0x01 |
+#define BLFLAG_READ_VERSION 0x02 |
+ |
+extern volatile uint8_t BLFlags; |
+extern char MotorenEin; |
+unsigned char MotorTest[16]; |
+#define BL_READMODE_STATUS 0 |
+#define BL_READMODE_CONFIG 16 |
+ |
+ |
+ |
+extern MotorData_t Motor[MAX_MOTORS]; |
+ |
+#define BLCONFIG_REVISION 2 |
+ |
+#define MASK_SET_PWM_SCALING 0x01 |
+#define MASK_SET_CURRENT_LIMIT 0x02 |
+#define MASK_SET_TEMP_LIMIT 0x04 |
+#define MASK_SET_CURRENT_SCALING 0x08 |
+#define MASK_SET_BITCONFIG 0x10 |
+#define MASK_RESET_CAPCOUNTER 0x20 |
+#define MASK_SET_DEFAULT_PARAMS 0x40 |
+#define MASK_SET_SAVE_EEPROM 0x80 |
+ |
+#define BITCONF_REVERSE_ROTATION 0x01 |
+#define BITCONF_RES1 0x02 |
+#define BITCONF_RES2 0x04 |
+#define BITCONF_RES3 0x08 |
+#define BITCONF_RES4 0x10 |
+#define BITCONF_RES5 0x20 |
+#define BITCONF_RES6 0x40 |
+#define BITCONF_RES7 0x80 |
+ |
+ |
+ |
+extern BLConfig_t BLConfig; |
+ |
+extern volatile uint16_t I2CTimeout; |
+ |
+void I2C_Init(char); // Initialize I2C |
+#define I2C_Start(start_state) {twi_state = start_state; BLFlags &= ~BLFLAG_TX_COMPLETE; TWCR = (1<<TWSTA) | (1<<TWEN) | (1<<TWINT) | (1<<TWIE);} |
+#define I2C_Stop(start_state) {twi_state = start_state; TWCR = (1<<TWEN) | (1<<TWSTO) | (1<<TWINT);} |
+void I2C_Reset(void); // Reset I2C |
+ |
+#define BLCONFIG_SUCCESS 0 |
+#define BLCONFIG_ERR_MOTOR_RUNNING 1 |
+#define BLCONFIG_ERR_MOTOR_NOT_EXIST 2 |
+#define BLCONFIG_ERR_HW_NOT_COMPATIBLE 3 |
+#define BLCONFIG_ERR_SW_NOT_COMPATIBLE 4 |
+#define BLCONFIG_ERR_CHECKSUM 5 |
+#define BLCONFIG_ERR_READ_NOT_POSSIBLE 6 |
+ |
+uint8_t I2C_WriteBLConfig(uint8_t motor); |
+uint8_t I2C_ReadBLConfig(uint8_t motor); |
+ |
+#endif |
+ |
+ |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/types.h |
---|
0,0 → 1,78 |
/** |
************************************************************************************************************* |
* |
* \file types.h |
* This file contains all generic type definitions that are used independendly of the project. |
* The type definitions of this file should be used instead of the standard C-types to simplify |
* porting of a particular software project. |
* |
* \author Ralf Hochhausen |
* \date 22.04.2006 |
* \version 1.1 |
* |
* (c) 2006 by Ralf Hochhausen (e-mail: micro@ralf-hochhausen.de) |
* |
* 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 2 |
* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
* |
* \b History: |
* |
* 22.04.2006 Ralf Hochhausen\n |
* Revision 1.1\n |
* Included GPL header |
* |
************************************************************************************************************* |
*/ |
/** |
* \defgroup TYPES Generic Type Definitions |
* @{ |
*/ |
#ifndef __TYPES_H |
#define __TYPES_H |
#define NULL (void*)0 /**< NULL-pointer definition */ |
/** |
* Boolean type enumeration |
* |
* \note |
* Enumeration type is used here to simplify debugging of the software. Most debuggers will |
* show the text "TRUE" or "FALSE" instead of "1" and "0". It should be noticed that |
* enumeration types are normally 16bit wide => the compiler should be forced to use 8bit |
* to safe RAM memory space if possible. |
* |
*/ |
typedef enum |
{ |
FALSE, /**< FALSE -> 0 */ |
TRUE /**< TRUE -> 1 */ |
}BOOL; |
/* Type definition of unsigned Datatypes */ |
typedef unsigned char uchar8; /**< 8Bit unsigned Datatype */ |
typedef unsigned int uint16; /**< 16Bit unsigned Datatype */ |
typedef unsigned long ulong32; /**< 32Bit unsigned Datatype */ |
/* Type definitions of signed Datatypes */ |
typedef signed char char8; /**< 8Bit signed Datatype */ |
typedef signed int int16; /**< 16Bit signed Datatype */ |
typedef signed long long32; /**< 32Bit signed Datatype */ |
/** |
* @} |
*/ |
#endif /* ifdef __TYPES_H */ |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/uart1.c |
---|
0,0 → 1,328 |
/************************************************************************* |
Title: Interrupt UART library with receive/transmit circular buffers |
Author: Peter Fleury <pfleury@gmx.ch> http://jump.to/fleury |
File: $Id: uart.c,v 1.6.2.2 2009/11/29 08:56:12 Peter Exp $ |
Software: AVR-GCC 4.1, AVR Libc 1.4.6 or higher |
Hardware: any AVR with built-in UART, |
License: GNU General Public License |
DESCRIPTION: |
An interrupt is generated when the UART has finished transmitting or |
receiving a byte. The interrupt handling routines use circular buffers |
for buffering received and transmitted data. |
The UART_RX_BUFFER_SIZE and UART_TX_BUFFER_SIZE variables define |
the buffer size in bytes. Note that these variables must be a |
power of 2. |
USAGE: |
Refere to the header file uart.h for a description of the routines. |
See also example test_uart.c. |
NOTES: |
Based on Atmel Application Note AVR306 |
LICENSE: |
Copyright (C) 2006 Peter Fleury |
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 2 of the License, or |
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. |
*************************************************************************/ |
#include <avr/io.h> |
#include <avr/interrupt.h> |
#include <avr/pgmspace.h> |
#include <string.h> |
#include <stdbool.h> |
#include "uart1.h" |
#include "main.h" |
#include "bluetooth.h" |
#include "tracking.h" |
// |
// constants and macros |
// |
#if defined HWVERSION1_3W || defined HWVERSION3_9 |
// size of RX/TX buffers |
#define UART_RX_BUFFER_MASK ( UART_RX_BUFFER_SIZE - 1) |
#define UART_TX_BUFFER_MASK ( UART_TX_BUFFER_SIZE - 1) |
#if ( UART_RX_BUFFER_SIZE & UART_RX_BUFFER_MASK ) |
#error RX buffer size is not a power of 2 |
#endif |
#if ( UART_TX_BUFFER_SIZE & UART_TX_BUFFER_MASK ) |
#error TX buffer size is not a power of 2 |
#endif |
// ATmega with two USART |
#define ATMEGA_USART1 |
#define UART1_STATUS UCSR1A |
#define UART1_CONTROL UCSR1B |
#define UART1_DATA UDR1 |
#define UART1_UDRIE UDRIE1 |
// |
// module global variables |
// |
uint8_t receiveNMEA = false; |
#if defined( ATMEGA_USART1 ) |
static volatile unsigned char UART1_TxBuf[UART_TX_BUFFER_SIZE]; |
static volatile unsigned char UART1_RxBuf[UART_RX_BUFFER_SIZE]; |
static volatile unsigned char UART1_TxHead; |
static volatile unsigned char UART1_TxTail; |
static volatile unsigned char UART1_RxHead; |
static volatile unsigned char UART1_RxTail; |
static volatile unsigned char UART1_LastRxError; |
#endif |
// |
// these functions are only for ATmegas with two USART |
// |
#if defined( ATMEGA_USART1 ) |
//-------------------------------------------------------------- |
// Function: UART1 Receive Complete interrupt |
// Purpose: called when the UART1 has received a character |
//-------------------------------------------------------------- |
ISR(USART1_RX_vect) |
{ |
unsigned char tmphead; |
unsigned char data; |
unsigned char usr; |
unsigned char lastRxError; |
// read UART status register and UART data register |
usr = UART1_STATUS; |
data = UART1_DATA; |
lastRxError = (usr & (_BV(FE1)|_BV(DOR1)) ); |
// calculate buffer index |
tmphead = ( UART1_RxHead + 1) & UART_RX_BUFFER_MASK; |
if ( tmphead == UART1_RxTail ) |
{ |
// error: receive buffer overflow |
lastRxError = UART_BUFFER_OVERFLOW >> 8; |
} |
else |
{ |
// store new index |
UART1_RxHead = tmphead; |
// store received data in buffer |
UART1_RxBuf[tmphead] = data; |
} |
UART1_LastRxError = lastRxError; |
#if defined HWVERSION3_9 |
if (receiveNMEA==true) |
{ |
if (bt_receiveNMEA()) Tracking_NMEA(); |
} |
#endif |
} |
//-------------------------------------------------------------- |
// Function: UART1 Data Register Empty interrupt |
// Purpose: called when the UART1 is ready to transmit the next byte |
//-------------------------------------------------------------- |
ISR(USART1_UDRE_vect) |
{ |
unsigned char tmptail; |
if ( UART1_TxHead != UART1_TxTail) |
{ |
// calculate and store new buffer index |
tmptail = (UART1_TxTail + 1) & UART_TX_BUFFER_MASK; |
UART1_TxTail = tmptail; |
// get one byte from buffer and write it to UART |
UART1_DATA = UART1_TxBuf[tmptail]; // start transmission |
} |
else |
{ |
// tx buffer empty, disable UDRE interrupt |
UART1_CONTROL &= ~_BV(UART1_UDRIE); |
} |
} |
//-------------------------------------------------------------- |
// Function: uart1_init() |
// Purpose: initialize UART1 and set baudrate |
// Input: baudrate using macro UART_BAUD_SELECT() |
// Returns: none |
//-------------------------------------------------------------- |
void uart1_init(unsigned int baudrate) |
{ |
UART1_TxHead = 0; |
UART1_TxTail = 0; |
UART1_RxHead = 0; |
UART1_RxTail = 0; |
// Set baud rate |
if ( baudrate & 0x8000 ) |
{ |
UART1_STATUS = (1<<U2X1); //Enable 2x speed |
baudrate &= ~0x8000; |
} |
UBRR1H = (unsigned char)(baudrate>>8); |
UBRR1L = (unsigned char) baudrate; |
// Enable USART receiver and transmitter and receive complete interrupt |
UART1_CONTROL = _BV(RXCIE1)|(1<<RXEN1)|(1<<TXEN1); |
// Set frame format: asynchronous, 8data, no parity, 1stop bit |
#ifdef URSEL1 |
UCSR1C = (1<<URSEL1)|(3<<UCSZ10); |
#else |
UCSR1C = (3<<UCSZ10); |
#endif |
} |
//-------------------------------------------------------------- |
// Function: uart1_getc() |
// Purpose: return byte from ringbuffer |
// Returns: lower byte: received byte from ringbuffer |
// higher byte: last receive error |
//-------------------------------------------------------------- |
unsigned int uart1_getc(void) |
{ |
unsigned char tmptail; |
unsigned char data; |
if ( UART1_RxHead == UART1_RxTail ) |
{ |
return UART_NO_DATA; // no data available |
} |
// calculate /store buffer index |
tmptail = (UART1_RxTail + 1) & UART_RX_BUFFER_MASK; |
UART1_RxTail = tmptail; |
// get data from receive buffer |
data = UART1_RxBuf[tmptail]; |
return (UART1_LastRxError << 8) + data; |
} |
//-------------------------------------------------------------- |
// Function: uart1_putc() |
// Purpose: write byte to ringbuffer for transmitting via UART |
// Input: byte to be transmitted |
// Returns: 1 on succes, 0 if remote not ready |
//-------------------------------------------------------------- |
int uart1_putc(unsigned char data) |
{ |
unsigned char tmphead; |
tmphead = (UART1_TxHead + 1) & UART_TX_BUFFER_MASK; |
while ( tmphead == UART1_TxTail ) |
{;} // wait for free space in buffer |
UART1_TxBuf[tmphead] = data; |
UART1_TxHead = tmphead; |
// enable UDRE interrupt |
UART1_CONTROL |= _BV(UART1_UDRIE); |
return (UART1_LastRxError << 8) + data; |
} |
//-------------------------------------------------------------- |
// Function: uart1_puts() |
// Purpose: transmit string to UART1 |
// Input: string to be transmitted |
// Returns: none |
//-------------------------------------------------------------- |
void uart1_puts(const char *s ) |
{ |
while (*s) |
uart1_putc(*s++); |
} |
//-------------------------------------------------------------- |
// Function: uart1_puts_p() |
// Purpose: transmit string from program memory to UART1 |
// Input: program memory string to be transmitted |
// Returns: none |
//-------------------------------------------------------------- |
void uart1_puts_p(const char *progmem_s ) |
{ |
register char c; |
while ( (c = pgm_read_byte(progmem_s++)) ) |
uart1_putc(c); |
} |
//-------------------------------------------------------------- |
// Function: uart1_available() |
// Purpose: Determine the number of bytes waiting in the receive buffer |
// Input: None |
// Returns: Integer number of bytes in the receive buffer |
//-------------------------------------------------------------- |
int uart1_available(void) |
{ |
return (UART_RX_BUFFER_MASK + UART1_RxHead - UART1_RxTail) % UART_RX_BUFFER_MASK; |
} |
//-------------------------------------------------------------- |
// Function: uart1_flush() |
// Purpose: Flush bytes waiting the receive buffer. Acutally ignores them. |
// Input: None |
// Returns: None |
//-------------------------------------------------------------- |
void uart1_flush(void) |
{ |
UART1_RxHead = UART1_RxTail; |
} |
#endif |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/uart1.h |
---|
0,0 → 1,173 |
/************************************************************************ |
Title: Interrupt UART library with receive/transmit circular buffers |
Author: Peter Fleury <pfleury@gmx.ch> http://jump.to/fleury |
File: $Id: uart.h,v 1.8.2.1 2007/07/01 11:14:38 peter Exp $ |
Software: AVR-GCC 4.1, AVR Libc 1.4 |
Hardware: any AVR with built-in UART, tested on AT90S8515 & ATmega8 at 4 Mhz |
License: GNU General Public License |
Usage: see Doxygen manual |
LICENSE: |
Copyright (C) 2006 Peter Fleury |
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 2 of the License, or |
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. |
************************************************************************/ |
// |
// @defgroup pfleury_uart UART Library |
// @code #include <uart.h> @endcode |
// |
// @brief Interrupt UART library using the built-in UART with transmit and receive circular buffers. |
// |
// This library can be used to transmit and receive data through the built in UART. |
// |
// An interrupt is generated when the UART has finished transmitting or |
// receiving a byte. The interrupt handling routines use circular buffers |
// for buffering received and transmitted data. |
// |
// The UART_RX_BUFFER_SIZE and UART_TX_BUFFER_SIZE constants define |
// the size of the circular buffers in bytes. Note that these constants must be a power of 2. |
// You may need to adapt this constants to your target and your application by adding |
// CDEFS += -DUART_RX_BUFFER_SIZE=nn -DUART_RX_BUFFER_SIZE=nn to your Makefile. |
// |
// @note Based on Atmel Application Note AVR306 |
// @author Peter Fleury pfleury@gmx.ch http://jump.to/fleury |
// |
#ifndef UART_H |
#define UART_H |
#if (__GNUC__ * 100 + __GNUC_MINOR__) < 304 |
#error "This library requires AVR-GCC 3.4 or later, update to newer AVR-GCC compiler !" |
#endif |
// constants and macros |
// @brief UART Baudrate Expression |
// @param xtalcpu system clock in Mhz, e.g. 4000000L for 4Mhz |
// @param baudrate baudrate in bps, e.g. 1200, 2400, 9600 |
// |
#define UART_BAUD_SELECT(baudRate,xtalCpu) ((xtalCpu)/((baudRate)*16l)-1) |
// @brief UART Baudrate Expression for ATmega double speed mode |
// @param xtalcpu system clock in Mhz, e.g. 4000000L for 4Mhz |
// @param baudrate baudrate in bps, e.g. 1200, 2400, 9600 |
// |
#define UART_BAUD_SELECT_DOUBLE_SPEED(baudRate,xtalCpu) (((xtalCpu)/((baudRate)*8l)-1)|0x8000) |
// Size of the circular receive buffer, must be power of 2 |
#ifndef UART_RX_BUFFER_SIZE |
#define UART_RX_BUFFER_SIZE 128 |
#endif |
// Size of the circular transmit buffer, must be power of 2 |
#ifndef UART_TX_BUFFER_SIZE |
#define UART_TX_BUFFER_SIZE 64 |
#endif |
// test if the size of the circular buffers fits into SRAM |
#if ( (UART_RX_BUFFER_SIZE+UART_TX_BUFFER_SIZE) >= (RAMEND-0x60 ) ) |
#error "size of UART_RX_BUFFER_SIZE + UART_TX_BUFFER_SIZE larger than size of SRAM" |
#endif |
//global variable |
extern uint8_t receiveNMEA; |
// high byte error return code of uart_getc() |
#define UART_FRAME_ERROR 0x0800 // Framing Error by UART |
#define UART_OVERRUN_ERROR 0x0400 // Overrun condition by UART |
#define UART_BUFFER_OVERFLOW 0x0200 // receive ringbuffer overflow |
#define UART_NO_DATA 0x0100 // no receive data available |
#define TRACKING_RSSI 1 |
#define TRACKING_GPS 2 |
#define TRACKING_MKCOCKPIT 3 |
#define TRACKING_NMEA 4 |
// |
// function prototypes |
// |
// |
// @brief Initialize UART and set baudrate |
// @param baudrate Specify baudrate using macro UART_BAUD_SELECT() |
// @return none |
// |
extern void uart_init(unsigned int baudrate); |
// |
// @brief Get received byte from ringbuffer |
// |
// Returns in the lower byte the received character and in the |
// higher byte the last receive error. |
// UART_NO_DATA is returned when no data is available. |
// |
// @param void |
// @return lower byte: received byte from ringbuffer |
// @return higher byte: last receive status |
// - \b 0 successfully received data from UART |
// - \b UART_NO_DATA |
// <br>no receive data available |
// - \b UART_BUFFER_OVERFLOW |
// <br>Receive ringbuffer overflow. |
// We are not reading the receive buffer fast enough, |
// one or more received character have been dropped |
// - \b UART_OVERRUN_ERROR |
// <br>Overrun condition by UART. |
// A character already present in the UART UDR register was |
// not read by the interrupt handler before the next character arrived, |
// one or more received characters have been dropped. |
// - \b UART_FRAME_ERROR |
// <br>Framing Error by UART |
// |
extern unsigned int uart_getc(void); |
// |
// @brief Put byte to ringbuffer for transmitting via UART |
// @param data byte to be transmitted |
// @return none |
// |
// @brief Initialize USART1 (only available on selected ATmegas) @see uart_init |
extern void uart1_init(unsigned int baudrate); |
// @brief Get received byte of USART1 from ringbuffer. (only available on selected ATmega) @see uart_getc |
extern unsigned int uart1_getc(void); |
// @brief Put byte to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_putc |
//extern void uart1_putc(unsigned char data); |
extern int uart1_putc(unsigned char data); |
// @brief Put string to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_puts |
extern void uart1_puts(const char *s ); |
// @brief Put string from program memory to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_puts_p |
extern void uart1_puts_p(const char *s ); |
// @brief Macro to automatically put a string constant into program memory |
#define uart1_puts_P(__s) uart1_puts_p(PSTR(__s)) |
extern char *utoa1(char* buffer, const unsigned int size, unsigned int value); |
#endif // UART_H |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/usart.c |
---|
0,0 → 1,671 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#include "cpu.h" |
#include <avr/io.h> |
#include <avr/interrupt.h> |
#include <avr/pgmspace.h> |
#include <avr/wdt.h> |
#include <util/delay.h> |
#include <stdarg.h> |
#include "main.h" |
#include "usart.h" |
#include "lcd.h" |
#include "timer.h" |
#include "uart1.h" |
#include "eeprom.h" |
#include "osd.h" |
uint8_t buffer[30]; |
volatile uint8_t txd_buffer[TXD_BUFFER_LEN]; |
volatile uint8_t txd_complete = TRUE; |
volatile uint8_t rxd_buffer[RXD_BUFFER_LEN]; |
volatile uint8_t rxd_buffer_locked = FALSE; |
volatile uint8_t ReceivedBytes = 0; |
volatile uint8_t *pRxData = 0; |
volatile uint8_t RxDataLen = 0; |
volatile uint16_t stat_crc_error = 0; |
volatile uint16_t stat_overflow_error = 0; |
volatile uint8_t rx_byte; |
volatile uint8_t rxFlag = 0; |
#define UART_RXBUFSIZE 64 |
#define UART_NO_DATA 0x0100 /* no receive data available */ |
volatile static uint8_t rxbuf[UART_RXBUFSIZE]; |
volatile static uint8_t *volatile rxhead, *volatile rxtail; |
/* |
//----------------------------------------------------------------------------- |
// USART1 transmitter ISR |
ISR (USART1_TX_vect) |
{ |
static uint16_t ptr_txd1_buffer = 0; |
uint8_t tmp_tx1; |
if(!txd1_complete) // transmission not completed |
{ |
ptr_txd1_buffer++; // [0] was already sent |
tmp_tx1 = txd1_buffer[ptr_txd1_buffer]; |
// if terminating character or end of txd buffer was reached |
if((tmp_tx1 == '\r') || (ptr_txd1_buffer == TXD_BUFFER_LEN)) |
{ |
ptr_txd1_buffer = 0; // reset txd pointer |
txd1_complete = TRUE; // stop transmission |
} |
UDR1 = tmp_tx1; // send current byte will trigger this ISR again |
} |
// transmission completed |
else ptr_txd1_buffer = 0; |
} |
*/ |
#ifdef USART_INT |
//----------------------------------------------------------------------------- |
// USART0 transmitter ISR |
ISR (USART_TX_vect) |
{ |
static uint16_t ptr_txd_buffer = 0; |
uint8_t tmp_tx; |
if(!txd_complete) // transmission not completed |
{ |
ptr_txd_buffer++; // [0] was already sent |
tmp_tx = txd_buffer[ptr_txd_buffer]; |
// if terminating character or end of txd buffer was reached |
if((tmp_tx == '\r') || (ptr_txd_buffer == TXD_BUFFER_LEN)) |
{ |
ptr_txd_buffer = 0; // reset txd pointer |
txd_complete = TRUE; // stop transmission |
} |
UDR = tmp_tx; // send current byte will trigger this ISR again |
} |
// transmission completed |
else ptr_txd_buffer = 0; |
} |
#endif |
//----------------------------------------------------------------------------- |
// |
// |
//uint8_t uart_getc_nb(uint8_t *c) |
//{ |
// if (rxhead==rxtail) return 0; |
// *c = *rxtail; |
// if (++rxtail == (rxbuf + UART_RXBUFSIZE)) rxtail = rxbuf; |
// return 1; |
//} |
ISR (USART0_RX_vect) |
{ |
static uint16_t crc; |
static uint8_t ptr_rxd_buffer = 0; |
uint8_t crc1, crc2; |
uint8_t c; |
// IdleTimer = 0; |
if (current_hardware == Wi232) |
{ |
// rx_byte = c; |
// rxFlag = 1; |
int diff; |
uint8_t c; |
c=UDR; |
diff = rxhead - rxtail; |
if (diff < 0) diff += UART_RXBUFSIZE; |
if (diff < UART_RXBUFSIZE -1) |
{ |
*rxhead = c; |
++rxhead; |
if (rxhead == (rxbuf + UART_RXBUFSIZE)) rxhead = rxbuf; |
}; |
// USART_putc (c); |
return; |
} |
if (current_hardware == MKGPS) |
{ |
// rx_byte = c; |
// rxFlag = 1; |
int diff; |
uint8_t c; |
c=UDR; |
diff = rxhead - rxtail; |
if (diff < 0) diff += UART_RXBUFSIZE; |
if (diff < UART_RXBUFSIZE -1) |
{ |
*rxhead = c; |
++rxhead; |
if (rxhead == (rxbuf + UART_RXBUFSIZE)) rxhead = rxbuf; |
}; |
return; |
} |
c = UDR; // catch the received byte |
if (OSD_active && OSD_SendOSD) // Daten an SV2 senden |
uart1_putc(c); |
if (rxd_buffer_locked) |
return; // if rxd buffer is locked immediately return |
// the rxd buffer is unlocked |
if ((ptr_rxd_buffer == 0) && (c == '#')) // if rxd buffer is empty and syncronisation character is received |
{ |
rxd_buffer[ptr_rxd_buffer++] = c; // copy 1st byte to buffer |
crc = c; // init crc |
} |
else if (ptr_rxd_buffer < RXD_BUFFER_LEN) // collect incomming bytes |
{ |
if(c != '\r') // no termination character |
{ |
rxd_buffer[ptr_rxd_buffer++] = c; // copy byte to rxd buffer |
crc += c; // update crc |
} |
else // termination character was received |
{ |
// the last 2 bytes are no subject for checksum calculation |
// they are the checksum itself |
crc -= rxd_buffer[ptr_rxd_buffer-2]; |
crc -= rxd_buffer[ptr_rxd_buffer-1]; |
// calculate checksum from transmitted data |
crc %= 4096; |
crc1 = '=' + crc / 64; |
crc2 = '=' + crc % 64; |
// compare checksum to transmitted checksum bytes |
if((crc1 == rxd_buffer[ptr_rxd_buffer-2]) && (crc2 == rxd_buffer[ptr_rxd_buffer-1])) |
{ // checksum valid |
rxd_buffer[ptr_rxd_buffer] = '\r'; // set termination character |
ReceivedBytes = ptr_rxd_buffer + 1;// store number of received bytes |
if (mode == rxd_buffer[2]) |
{ |
rxd_buffer_locked = TRUE; // lock the rxd buffer |
// if 2nd byte is an 'R' enable watchdog that will result in an reset |
if(rxd_buffer[2] == 'R') {wdt_enable(WDTO_250MS);} // Reset-Commando |
} |
} |
else |
{ // checksum invalid |
stat_crc_error++; |
rxd_buffer_locked = FALSE; // unlock rxd buffer |
} |
ptr_rxd_buffer = 0; // reset rxd buffer pointer |
} |
} |
else // rxd buffer overrun |
{ |
stat_overflow_error++; |
ptr_rxd_buffer = 0; // reset rxd buffer |
rxd_buffer_locked = FALSE; // unlock rxd buffer |
} |
} |
//----------------------------------------------------------------------------- |
// Function: uart0_getc() |
// Purpose: return byte from ringbuffer |
// Returns: lower byte: received byte from ringbuffer |
// higher byte: last receive error |
//----------------------------------------------------------------------------- |
char USART_getc(void) |
{ |
char val; |
// while(rxhead==rxtail) ; |
if (rxhead==rxtail) |
return val=0; |
// IdleTimer = 0; |
val = *rxtail; |
if (++rxtail == (rxbuf + UART_RXBUFSIZE)) |
rxtail = rxbuf; |
return val; |
} |
uint8_t uart_getc_nb(uint8_t *c) |
{ |
if (rxhead==rxtail) |
return 0; |
// IdleTimer = 0; |
*c = *rxtail; |
if (++rxtail == (rxbuf + UART_RXBUFSIZE)) |
rxtail = rxbuf; |
return 1; |
} |
//----------------------------------------------------------------------------- |
// |
//----------------------------------------------------------------------------- |
// |
void USART_Init (unsigned int baudrate) |
{ |
// set clock divider |
// #undef BAUD |
// #define BAUD baudrate |
// #include <util/setbaud.h> |
// UBRRH = UBRRH_VALUE; |
// UBRRL = UBRRL_VALUE; |
//#ifndef F_CPU |
///* In neueren Version der WinAVR/Mfile Makefile-Vorlage kann |
// F_CPU im Makefile definiert werden, eine nochmalige Definition |
// hier wuerde zu einer Compilerwarnung fuehren. Daher "Schutz" durch |
// #ifndef/#endif |
// |
// Dieser "Schutz" kann zu Debugsessions führen, wenn AVRStudio |
// verwendet wird und dort eine andere, nicht zur Hardware passende |
// Taktrate eingestellt ist: Dann wird die folgende Definition |
// nicht verwendet, sondern stattdessen der Defaultwert (8 MHz?) |
// von AVRStudio - daher Ausgabe einer Warnung falls F_CPU |
// noch nicht definiert: */ |
//#warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 4000000" |
//#define F_CPU 18432000UL // Systemtakt in Hz - Definition als unsigned long beachten |
// Ohne ergeben sich unten Fehler in der Berechnung |
//#endif |
//#define BAUD 115200UL // Baudrate |
// |
//// Berechnungen |
//#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden |
//#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate |
//#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Fehler in Promille, 1000 = kein Fehler. |
// |
// |
//#if ((BAUD_ERROR<990) || (BAUD_ERROR>1010)) |
// #error "Systematischer Fehler der Baudrate grösser 1% und damit zu hoch!" |
//#endif |
UBRRH = (unsigned char)(baudrate>>8); |
UBRRL = (unsigned char) baudrate; |
// UBRRH = (unsigned char)(BAUD_REAL>>8); |
// UBRRL = (unsigned char) BAUD_REAL; |
#if USE_2X |
UCSRA |= (1 << U2X); // enable double speed operation |
#else |
UCSRA &= ~(1 << U2X); // disable double speed operation |
#endif |
// set 8N1 |
#if defined (__AVR_ATmega8__) || defined (__AVR_ATmega32__) |
UCSRC = (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0); |
#else |
UCSRC = (1 << UCSZ1) | (1 << UCSZ0); |
#endif |
UCSRB &= ~(1 << UCSZ2); |
// flush receive buffer |
while ( UCSRA & (1 << RXC) ) UDR; |
UCSRB |= (1 << RXEN) | (1 << TXEN); |
#ifdef USART_INT |
UCSRB |= (1 << RXCIE) | (1 << TXCIE); |
#else |
UCSRB |= (1 << RXCIE); |
#endif |
rxhead = rxtail = rxbuf; |
} |
//----------------------------------------------------------------------------- |
// disable the txd pin of usart |
void USART_DisableTXD (void) |
{ |
#ifdef USART_INT |
UCSRB &= ~(1 << TXCIE); // disable TX-Interrupt |
#endif |
UCSRB &= ~(1 << TXEN); // disable TX in USART |
DDRB &= ~(1 << DDB3); // set TXD pin as input |
PORTB &= ~(1 << PORTB3); // disable pullup on TXD pin |
} |
//----------------------------------------------------------------------------- |
// enable the txd pin of usart |
void USART_EnableTXD (void) |
{ |
DDRB |= (1 << DDB3); // set TXD pin as output |
PORTB &= ~(1 << PORTB3); // disable pullup on TXD pin |
UCSRB |= (1 << TXEN); // enable TX in USART |
#ifdef USART_INT |
UCSRB |= (1 << TXCIE); // enable TX-Interrupt |
#endif |
} |
//----------------------------------------------------------------------------- |
// short script to directly send a request thorugh usart including en- and disabling it |
// where <address> is the address of the receipient, <label> is which data set to request |
// and <ms> represents the milliseconds delay between data |
void USART_request_mk_data (uint8_t cmd, uint8_t addr, uint8_t ms) |
{ |
USART_EnableTXD (); // re-enable TXD pin |
unsigned char mstenth = ms/10; |
SendOutData(cmd, addr, 1, &mstenth, 1); |
// wait until command transmitted |
while (txd_complete == FALSE); |
USART_DisableTXD (); // disable TXD pin again |
} |
//----------------------------------------------------------------------------- |
// |
void USART_putc (char c) |
{ |
#ifdef USART_INT |
#else |
loop_until_bit_is_set(UCSRA, UDRE); |
UDR = c; |
#endif |
} |
//----------------------------------------------------------------------------- |
// |
void USART_puts (char *s) |
{ |
#ifdef USART_INT |
#else |
while (*s) |
{ |
USART_putc (*s); |
s++; |
} |
#endif |
} |
//----------------------------------------------------------------------------- |
// |
void USART_puts_p (const char *s) |
{ |
#ifdef USART_INT |
#else |
while (pgm_read_byte(s)) |
{ |
USART_putc (pgm_read_byte(s)); |
s++; |
} |
#endif |
} |
//----------------------------------------------------------------------------- |
// |
void SendOutData(uint8_t cmd, uint8_t addr, uint8_t numofbuffers, ...) // uint8_t *pdata, uint8_t len, ... |
{ |
va_list ap; |
uint16_t pt = 0; |
uint8_t a,b,c; |
uint8_t ptr = 0; |
uint16_t tmpCRC = 0; |
uint8_t *pdata = 0; |
int len = 0; |
txd_buffer[pt++] = '#'; // Start character |
txd_buffer[pt++] = 'a' + addr; // Address (a=0; b=1,...) |
txd_buffer[pt++] = cmd; // Command |
va_start(ap, numofbuffers); |
if(numofbuffers) |
{ |
pdata = va_arg (ap, uint8_t*); |
len = va_arg (ap, int); |
ptr = 0; |
numofbuffers--; |
} |
while(len) |
{ |
if(len) |
{ |
a = pdata[ptr++]; |
len--; |
if((!len) && numofbuffers) |
{ |
pdata = va_arg(ap, uint8_t*); |
len = va_arg(ap, int); |
ptr = 0; |
numofbuffers--; |
} |
} |
else |
a = 0; |
if(len) |
{ |
b = pdata[ptr++]; |
len--; |
if((!len) && numofbuffers) |
{ |
pdata = va_arg(ap, uint8_t*); |
len = va_arg(ap, int); |
ptr = 0; |
numofbuffers--; |
} |
} |
else |
b = 0; |
if(len) |
{ |
c = pdata[ptr++]; |
len--; |
if((!len) && numofbuffers) |
{ |
pdata = va_arg(ap, uint8_t*); |
len = va_arg(ap, int); |
ptr = 0; |
numofbuffers--; |
} |
} |
else |
c = 0; |
txd_buffer[pt++] = '=' + (a >> 2); |
txd_buffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4)); |
txd_buffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6)); |
txd_buffer[pt++] = '=' + ( c & 0x3f); |
} |
va_end(ap); |
for(a = 0; a < pt; a++) |
{ |
tmpCRC += txd_buffer[a]; |
} |
tmpCRC %= 4096; |
txd_buffer[pt++] = '=' + tmpCRC / 64; |
txd_buffer[pt++] = '=' + tmpCRC % 64; |
txd_buffer[pt++] = '\r'; |
txd_complete = FALSE; |
#ifdef USART_INT |
UDR = txd_buffer[0]; // initiates the transmittion (continued in the TXD ISR) |
#else |
for(a = 0; a < pt; a++) |
{ |
loop_until_bit_is_set(UCSRA, UDRE); |
UDR = txd_buffer[a]; |
} |
txd_complete = TRUE; |
#endif |
} |
//----------------------------------------------------------------------------- |
// |
void Decode64 (void) |
{ |
uint8_t a,b,c,d; |
uint8_t ptrIn = 3; |
uint8_t ptrOut = 3; |
uint8_t len = ReceivedBytes - 6; |
while (len) |
{ |
a = rxd_buffer[ptrIn++] - '='; |
b = rxd_buffer[ptrIn++] - '='; |
c = rxd_buffer[ptrIn++] - '='; |
d = rxd_buffer[ptrIn++] - '='; |
//if(ptrIn > ReceivedBytes - 3) break; |
if (len--) |
rxd_buffer[ptrOut++] = (a << 2) | (b >> 4); |
else |
break; |
if (len--) |
rxd_buffer[ptrOut++] = ((b & 0x0f) << 4) | (c >> 2); |
else |
break; |
if (len--) |
rxd_buffer[ptrOut++] = ((c & 0x03) << 6) | d; |
else |
break; |
} |
pRxData = &rxd_buffer[3]; |
RxDataLen = ptrOut - 3; |
} |
//----------------------------------------------------------------------------- |
// |
void SwitchToNC (void) |
{ |
if(hardware == NC) |
{ |
// switch to NC |
USART_putc (0x1b); |
USART_putc (0x1b); |
USART_putc (0x55); |
USART_putc (0xaa); |
USART_putc (0x00); |
current_hardware = NC; |
_delay_ms (50); |
} |
} |
//----------------------------------------------------------------------------- |
// |
//----------------------------------------------------------------------------- |
// |
void SwitchToWi232 (void) |
{ |
// if(hardware == NC) |
{ |
// switch to Wi232 |
current_hardware = Wi232; |
_delay_ms (50); |
} |
} |
//----------------------------------------------------------------------------- |
// |
void SwitchToFC (void) |
{ |
uint8_t cmd; |
if (current_hardware == NC) |
{ |
// switch to FC |
cmd = 0x00; // 0 = FC, 1 = MK3MAG, 2 = MKGPS |
SendOutData('u', ADDRESS_NC, 1, &cmd, 1); |
current_hardware = FC; |
_delay_ms (50); |
} |
} |
//----------------------------------------------------------------------------- |
// |
void SwitchToMAG (void) |
{ |
uint8_t cmd; |
if (current_hardware == NC) |
{ |
// switch to MK3MAG |
cmd = 0x01; // 0 = FC, 1 = MK3MAG, 2 = MKGPS |
SendOutData('u', ADDRESS_NC, 1, &cmd, 1); |
current_hardware = MK3MAG; |
_delay_ms (50); |
} |
} |
//----------------------------------------------------------------------------- |
// |
void SwitchToGPS (void) |
{ |
uint8_t cmd; |
if (current_hardware == NC) |
{ |
// switch to MKGPS |
cmd = 0x02; // 0 = FC, 1 = MK3MAG, 2 = MKGPS |
SendOutData('u', ADDRESS_NC, 1, &cmd, 1); |
current_hardware = MKGPS; |
_delay_ms (50); |
} |
} |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/usart.h |
---|
0,0 → 1,149 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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 2 of the License. * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
#ifndef _USART_H |
#define _USART_H |
//-------------------------------------------------------------- |
// |
#ifndef FALSE |
#define FALSE 0 |
#endif |
#ifndef TRUE |
#define TRUE 1 |
#endif |
// addresses |
#define ADDRESS_ANY 0 |
#define ADDRESS_FC 1 |
#define ADDRESS_NC 2 |
#define ADDRESS_MAG 3 |
// must be at least 4('#'+Addr+'CmdID'+'\r')+ (80 * 4)/3 = 111 bytes |
#define TXD_BUFFER_LEN 60 |
#define RXD_BUFFER_LEN 180 |
// Baud rate of the USART |
#define USART_BAUD 57600 |
//#define USART_BAUD 125000 |
//-------------------------------------------------------------- |
// |
extern uint8_t buffer[30]; |
extern volatile uint8_t txd_buffer[TXD_BUFFER_LEN]; |
extern volatile uint8_t txd_complete; |
extern volatile uint8_t txd1_buffer[TXD_BUFFER_LEN]; |
extern volatile uint8_t txd1_complete; |
extern volatile uint8_t rxd_buffer[RXD_BUFFER_LEN]; |
extern volatile uint8_t rxd_buffer_locked; |
extern volatile uint8_t ReceivedBytes; |
extern volatile uint8_t *pRxData; |
extern volatile uint8_t RxDataLen; |
extern volatile uint16_t stat_crc_error; |
extern volatile uint16_t stat_overflow_error; |
extern volatile uint8_t rxFlag; |
extern volatile uint8_t rx_byte; |
//-------------------------------------------------------------- |
// |
void USART_Init (unsigned int baudrate); |
void USART_DisableTXD (void); |
void USART_EnableTXD (void); |
void USART_request_mk_data (uint8_t cmd, uint8_t addr, uint8_t ms); |
void USART_putc (char c); |
void USART_puts (char *s); |
void USART_puts_p (const char *s); |
extern char USART_getc(void); |
void SendOutData (uint8_t cmd, uint8_t addr, uint8_t numofbuffers, ...); // uint8_t *pdata, uint8_t len, ... |
//void SendOutData(uint8_t cmd, uint8_t addr, uint8_t numofbuffers, uint8_t *pdata, uint8_t len); // uint8_t *pdata, uint8_t len, ... |
void Decode64 (void); |
void SwitchToNC (void); |
void SwitchToFC (void); |
void SwitchToMAG (void); |
void SwitchToGPS (void); |
void SwitchToWi232 (void); |
void debug1(void); |
uint8_t uart_getc_nb(uint8_t*); |
//-------------------------------------------------------------- |
//Anpassen der seriellen Schnittstellen Register |
#define USART_RXC_vect USART0_RX_vect |
//-------------------------------------------------------------- |
#define UCSRA UCSR0A |
#define UCSRB UCSR0B |
#define UCSRC UCSR0C |
#define UDR UDR0 |
#define UBRRL UBRR0L |
#define UBRRH UBRR0H |
// UCSRA |
#define RXC RXC0 |
#define TXC TXC0 |
#define UDRE UDRE0 |
#define FE FE0 |
#define UPE UPE0 |
#define U2X U2X0 |
#define MPCM MPCM0 |
// UCSRB |
#define RXCIE RXCIE0 |
#define TXCIE TXCIE0 |
#define UDRIE UDRIE0 |
#define TXEN TXEN0 |
#define RXEN RXEN0 |
#define UCSZ2 UCSZ02 |
#define RXB8 RXB80 |
#define TXB8 TXB80 |
// UCSRC |
#define UMSEL1 UMSEL01 |
#define UMSEL0 UMSEL00 |
#define UPM1 UPM01 |
#define UPM0 UPM00 |
#define USBS USBS0 |
#define UCSZ1 UCSZ01 |
#define UCSZ0 UCSZ00 |
#define UCPOL UCPOL0 |
#endif |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/waypoints.c |
---|
0,0 → 1,347 |
/*#######################################################################################*/ |
/* !!! THIS IS NOT FREE SOFTWARE !!! */ |
/*#######################################################################################*/ |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 2008 Ingo Busker, Holger Buss |
// + Nur für den privaten Gebrauch / NON-COMMERCIAL USE ONLY |
// + FOR NON COMMERCIAL USE ONLY |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation), |
// + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulässig ist. |
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt |
// + bzgl. der Nutzungsbedingungen aufzunehmen. |
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen, |
// + Verkauf von Luftbildaufnahmen, usw. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht, |
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts |
// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de" |
// + eindeutig als Ursprung verlinkt werden |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion |
// + Benutzung auf eigene Gefahr |
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die Portierung oder Nutzung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur |
// + mit unserer Zustimmung zulässig |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Redistributions of source code (with or without modifications) must retain the above copyright notice, |
// + this list of conditions and the following disclaimer. |
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived |
// + from this software without specific prior written permission. |
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permitted |
// + for non-commercial use (directly or indirectly) |
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted |
// + with our written permission |
// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be |
// + clearly linked as origin |
// + * porting the sources to other systems or using the software on other systems (except hardware from www.mikrokopter.de) is not allowed |
// |
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
// + POSSIBILITY OF SUCH DAMAGE. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include <string.h> |
#include "91x_lib.h" |
#include "waypoints.h" |
#include "uart1.h" |
// the waypoints list |
#define MAX_LIST_LEN 31 |
Point_t PointList[MAX_LIST_LEN]; |
u8 WPIndex = 0; // list index of GPS point representig the current WP, can be maximal WPCount |
u8 POIIndex = 0; // list index of GPS Point representing the current POI, can be maximal WPCount |
u8 WPCount = 0; // number of waypoints |
u8 PointCount = 0; // number of wp in the list can be maximal equal to MAX_LIST_LEN |
u8 POICount = 0; |
u8 WPActive = FALSE; |
u8 PointList_Init(void) |
{ |
return PointList_Clear(); |
} |
u8 PointList_Clear(void) |
{ |
u8 i; |
WPIndex = 0; // real list position are 1 ,2, 3 ... |
POIIndex = 0; // real list position are 1 ,2, 3 ... |
WPCount = 0; // no waypoints |
POICount = 0; |
PointCount = 0; // no contents |
WPActive = FALSE; |
NaviData.WaypointNumber = WPCount; |
NaviData.WaypointIndex = 0; |
for(i = 0; i < MAX_LIST_LEN; i++) |
{ |
PointList[i].Position.Status = INVALID; |
PointList[i].Position.Latitude = 0; |
PointList[i].Position.Longitude = 0; |
PointList[i].Position.Altitude = 0; |
PointList[i].Heading = 361; // invalid value |
PointList[i].ToleranceRadius = 0; // in meters, if the MK is within that range around the target, then the next target is triggered |
PointList[i].HoldTime = 0; // in seconds, if the was once in the tolerance area around a WP, this time defines the delay before the next WP is triggered |
PointList[i].Type = POINT_TYPE_INVALID; |
PointList[i].Event_Flag = 0; // future implementation |
PointList[i].AltitudeRate = 0; // no change of setpoint |
} |
return TRUE; |
} |
u8 PointList_GetCount(void) |
{ |
return PointCount; // number of points in the list |
} |
Point_t* PointList_GetAt(u8 index) |
{ |
if((index > 0) && (index <= PointCount)) return(&(PointList[index-1])); // return pointer to this waypoint |
else return(NULL); |
} |
u8 PointList_SetAt(Point_t* pPoint) |
{ |
// if index is in range |
if((pPoint->Index > 0) && (pPoint->Index <= MAX_LIST_LEN)) |
{ |
// check list entry before update |
switch(PointList[pPoint->Index-1].Type) |
{ |
case POINT_TYPE_INVALID: // was invalid |
switch(pPoint->Type) |
{ |
default: |
case POINT_TYPE_INVALID: |
// nothing to do |
break; |
case POINT_TYPE_WP: |
WPCount++; |
PointCount++; |
break; |
case POINT_TYPE_POI: |
POICount++; |
PointCount++; |
break; |
} |
break; |
case POINT_TYPE_WP: // was a waypoint |
switch(pPoint->Type) |
{ |
case POINT_TYPE_INVALID: |
WPCount--; |
PointCount--; |
break; |
default: |
case POINT_TYPE_WP: |
//nothing to do |
break; |
case POINT_TYPE_POI: |
POICount++; |
WPCount--; |
break; |
} |
break; |
case POINT_TYPE_POI: // was a poi |
switch(pPoint->Type) |
{ |
case POINT_TYPE_INVALID: |
POICount--; |
PointCount--; |
break; |
case POINT_TYPE_WP: |
WPCount++; |
POICount--; |
break; |
case POINT_TYPE_POI: |
default: |
// nothing to do |
break; |
} |
break; |
} |
memcpy(&PointList[pPoint->Index-1], pPoint, sizeof(Point_t)); // copy data to list entry |
NaviData.WaypointNumber = WPCount; |
return pPoint->Index; |
} |
else return(0); |
} |
// returns the pointer to the first waypoint within the list |
Point_t* PointList_WPBegin(void) |
{ |
u8 i; |
WPIndex = 0; // set list position invalid |
if(WPActive == FALSE) return(NULL); |
POIIndex = 0; // set invalid POI |
if(PointCount > 0) |
{ |
// search for first wp in list |
for(i = 0; i <MAX_LIST_LEN; i++) |
{ |
if((PointList[i].Type == POINT_TYPE_WP) && (PointList[i].Position.Status != INVALID)) |
{ |
WPIndex = i + 1; |
break; |
} |
} |
if(WPIndex) // found a WP in the list |
{ |
NaviData.WaypointIndex = 1; |
// update index to POI |
if(PointList[WPIndex-1].Heading < 0) POIIndex = (u8)(-PointList[WPIndex-1].Heading); |
else POIIndex = 0; |
} |
else // some points in the list but no WP found |
{ |
NaviData.WaypointIndex = 0; |
//Check for an existing POI |
for(i = 0; i < MAX_LIST_LEN; i++) |
{ |
if((PointList[i].Type == POINT_TYPE_POI) && (PointList[i].Position.Status != INVALID)) |
{ |
POIIndex = i + 1; |
break; |
} |
} |
} |
} |
else // no point in the list |
{ |
POIIndex = 0; |
NaviData.WaypointIndex = 0; |
} |
if(WPIndex) return(&(PointList[WPIndex-1])); |
else return(NULL); |
} |
// returns the last waypoint |
Point_t* PointList_WPEnd(void) |
{ |
u8 i; |
WPIndex = 0; // set list position invalid |
POIIndex = 0; // set invalid |
if(WPActive == FALSE) return(NULL); |
if(PointCount > 0) |
{ |
// search backward! |
for(i = 1; i <= MAX_LIST_LEN; i++) |
{ |
if((PointList[MAX_LIST_LEN - i].Type == POINT_TYPE_WP) && (PointList[MAX_LIST_LEN - i].Position.Status != INVALID)) |
{ |
WPIndex = MAX_LIST_LEN - i + 1; |
break; |
} |
} |
if(WPIndex) // found a WP within the list |
{ |
NaviData.WaypointIndex = WPCount; |
if(PointList[WPIndex-1].Heading < 0) POIIndex = (u8)(-PointList[WPIndex-1].Heading); |
else POIIndex = 0; |
} |
else // list contains some points but no WP in the list |
{ |
// search backward for a POI! |
for(i = 1; i <= MAX_LIST_LEN; i++) |
{ |
if((PointList[MAX_LIST_LEN - i].Type == POINT_TYPE_POI) && (PointList[MAX_LIST_LEN - i].Position.Status != INVALID)) |
{ |
POIIndex = MAX_LIST_LEN - i + 1; |
break; |
} |
} |
NaviData.WaypointIndex = 0; |
} |
} |
else // no point in the list |
{ |
POIIndex = 0; |
NaviData.WaypointIndex = 0; |
} |
if(WPIndex) return(&(PointList[WPIndex-1])); |
else return(NULL); |
} |
// returns a pointer to the next waypoint or NULL if the end of the list has been reached |
Point_t* PointList_WPNext(void) |
{ |
u8 wp_found = 0; |
if(WPActive == FALSE) return(NULL); |
if(WPIndex < MAX_LIST_LEN) // if there is a next entry in the list |
{ |
u8 i; |
for(i = WPIndex; i < MAX_LIST_LEN; i++) // start search for next at next list entry |
{ |
if((PointList[i].Type == POINT_TYPE_WP) && (PointList[i].Position.Status != INVALID)) // jump over POIs |
{ |
wp_found = i+1; |
break; |
} |
} |
} |
if(wp_found) |
{ |
WPIndex = wp_found; // update list position |
NaviData.WaypointIndex++; |
if(PointList[WPIndex-1].Heading < 0) POIIndex = (u8)(-PointList[WPIndex-1].Heading); |
else POIIndex = 0; |
return(&(PointList[WPIndex-1])); // return pointer to this waypoint |
} |
else |
{ // no next wp found |
NaviData.WaypointIndex = 0; |
POIIndex = 0; |
return(NULL); |
} |
} |
void PointList_WPActive(u8 set) |
{ |
if(set) |
{ |
WPActive = TRUE; |
PointList_WPBegin(); // uopdates POI index |
} |
else |
{ |
WPActive = FALSE; |
POIIndex = 0; // disable POI also |
} |
} |
Point_t* PointList_GetPOI(void) |
{ |
return PointList_GetAt(POIIndex); |
} |
/Transportables_Koptertool/branch/PKT_V363a_V088n_MartinR/waypoints.h |
---|
0,0 → 1,56 |
#ifndef _WAYPOINTS_H |
#define _WAYPOINTS_H |
//#include "ubx.h" |
#define POINT_TYPE_INVALID 255 |
#define POINT_TYPE_WP 0 |
#define POINT_TYPE_POI 1 |
typedef struct |
{ |
s32 Longitude; // in 1E-7 deg |
s32 Latitude; // in 1E-7 deg |
s32 Altitude; // in mm |
u8 Status;// validity of data |
} __attribute__((packed)) GPS_Pos_t; |
typedef struct |
{ |
GPS_Pos_t Position; // the gps position of the waypoint, see ubx.h for details |
s16 Heading; // orientation, 0 no action, 1...360 fix heading, neg. = Index to POI in WP List |
u8 ToleranceRadius; // in meters, if the MK is within that range around the target, then the next target is triggered |
u8 HoldTime; // in seconds, if the was once in the tolerance area around a WP, this time defines the delay before the next WP is triggered |
u8 Event_Flag; // future implementation |
u8 Index; // to indentify different waypoints, workaround for bad communications PC <-> NC |
u8 Type; // typeof Waypoint |
u8 WP_EventChannelValue; // |
u8 AltitudeRate; // rate to change the setpoint |
u8 reserve[8]; // reserve |
} __attribute__((packed)) Point_t; |
// Init List, return TRUE on success |
u8 PointList_Init(void); |
// Clear List, return TRUE on success |
u8 PointList_Clear(void); |
// Returns number of points in the list |
u8 PointList_GetCount(void); |
// return pointer to point at position |
Point_t* PointList_GetAt(u8 index); |
// set a point in the list at index, returns its index on success, else 0 |
u8 PointList_SetAt(Point_t* pPoint); |
// goto the first WP in the list and return pointer to it |
Point_t* PointList_WPBegin(void); |
// goto the last WP in the list and return pointer to it |
Point_t* PointList_WPEnd(void); |
// goto next WP in the list and return pointer to it |
Point_t* PointList_WPNext(void); |
// enables/disables waypoint function |
void PointList_WPActive(u8 set); |
// returns pointer to actual POI |
Point_t* PointList_GetPOI(void); |
#endif // _WAYPOINTS_H |