/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/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/GPL_PKT_V3_5_8a_FC086/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/GPL_PKT_V3_5_8a_FC086/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/GPL_PKT_V3_5_8a_FC086/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/GPL_PKT_V3_5_8a_FC086/HAL_HW3_1.c |
---|
0,0 → 1,122 |
/***************************************************************************** |
* 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 V3.2 Cebra |
// * USB,Wi232,LED |
#ifndef HAL_HW3_2_C_ |
#define HAL_HW3_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" |
#ifdef HWVERSION3_1 |
#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<<DDC7); /* Leds,Summer*/ |
DDRB = 0xFF; |
set_LED1(); |
set_LED2(); |
set_LED3(); |
set_LED4(); |
BeepTime = 500; |
BeepMuster = 0x0080; |
set_D_LIGHT(); |
clr_WI232CMD(); |
_delay_ms(250); |
clr_LED1(); |
clr_LED2(); |
clr_LED3(); |
clr_LED4(); |
Display_on = 1; |
LCD_Init (); |
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(); //PWM Displaybeleuchtung |
sei (); |
ReadParameter (); |
LCD_Init (); |
InitWi232(); |
} |
#endif |
#endif /* HAL_HW3_2_C_ */ |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/HAL_HW3_1.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 V3.2 Cebra |
// * USB,Wi232,LED |
/* Hardware 3.1 Portbelegung |
Servo PD4 Pin 13 |
Servo PD5 Pin 14 |
Wi.232 CMD PD6 Pin 15 aktiv low |
Displaybeleuchtung PD7 Pin 16 LED an + |
I2C PC0 Pin 19 |
I2C PC1 Pin 20 |
LED2 PC2 Pin 21 LED an + |
LED1 PC3 Pin 22 LED an + |
Summer PC6 Pin 25 Summer an + |
LED3 PB1 Pin 41 LED an + |
LED4 PB0 Pin 40 LED an + |
*/ |
#ifndef HAL_HW3_2_H_ |
#define HAL_HW3_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 set_BEEP() (PORTC &= ~(1 << PC6)) //Summer |
#define clr_BEEP() (PORTC |= (1 << PC6)) |
#define set_D_LIGHT() (PORTD |= (1 << PD7)) // Displaybeleuchtung |
#define clr_D_LIGHT() (PORTD &= ~(1 << PD7)) |
#define set_WI232CMD() (PORTD &= ~(1 << PD6)) |
#define clr_WI232CMD() (PORTD |= (1 << PD6)) |
#define KEY_PIN PINA |
//#if defined HWVERSION1_2 || defined HWVERSION1_3 || defined HWVERSION3_2 |
//#define KEY_ENTER PA7 |
//#define KEY_ESC PA6 |
//#define KEY_PLUS PA5 |
//#define KEY_MINUS PA4 |
//#endif |
/*in der Hardwareversion sind die Tasten im Layout verdreht*/ |
#define KEY_ENTER PA4 |
#define KEY_ESC PA5 |
#define KEY_PLUS PA6 |
#define KEY_MINUS PA7 |
void InitHWPorts(void); |
#endif /* HAL_HW3_2_H_ */ |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/HAL_HW3_9.c |
---|
0,0 → 1,196 |
/***************************************************************************** |
* 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 "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" |
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 |
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 |
set_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); |
BeepTime = 200; |
BeepMuster = 0x0080; |
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_puts_at(0, 2, strGet(BOOT1), 0); |
lcd_puts_at(0, 3, strGet(BOOT2), 0); |
_delay_ms(800); |
if (PINA & (1<<PINA7)) // Spannung eingeschaltet lassen |
clr_V_On(); |
_delay_ms(100); |
BeepTime = 500; |
BeepMuster = 0x0080; |
get_key_press(KEY_ALL); |
lcd_cls(); |
if ((UseWi == true) && (WiIsSet == false)) |
{ |
InitWi232(); // wenn Wi232 nicht initialisiert ist, dann jetzt tun |
} |
lcd_cls(); |
set_USBOn(); // USB erstmal wieder einschalten |
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; |
} |
#endif |
#endif // HAL_HW3_9_C_ |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/HAL_HW3_9.h |
---|
0,0 → 1,139 |
/***************************************************************************** |
* 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 |
#define Touch0 PA0 // Pin 37 |
#define Touch1 PA1 // Pin 36 |
#define Touch2 PA2 // Pin 35 |
#define Touch3 PA3 // Pin 34 |
#define Key1 PA4 // Pin 33 |
#define Key2 PA5 // Pin 32 |
#define Key3 PA6 // Pin 31 |
#define Key4 PA7 // Pin 30 |
#define USB2Wi PB0 // Pin 40 aktiv low > IC5 |
#define VoltageHold PB1 // Pin 41 High = Spannung T3 halten |
#define Display_Reset PB2 // Pin 42 |
#define Display_A0 PB3 // Pin 43 |
#define Display_CS PB4 // Pin 44 |
#define Display_SI PB5 // Pin 1 |
#define LED1 PB6 // Pin 2 Low = LED1 (nicht benutzbar wegen SCL |
#define Display_SCL PB7 // Pin 3 |
#define I2C_SCL PC0 // Pin 19 SCL |
#define I2C_CDA PC1 // Pin 20 SDA |
#define USB2FC PC2 // Pin 21 aktiv low > IC5 |
#define USB_BT PC3 // Pin 22 high = USB, Low = Bluetooth, LED2 |
#define LowBat PC4 // Pin 23 Low Bat Warning Lipo PKT,Input |
#define Uart02Wi PC5 // Pin 24 aktiv Low > IC4 |
#define Uart02FC PC6 // Pin 25 aktiv Low > IC4 |
#define Summer PC7 // Pin 26 Low = Summer |
#define Uart0RxD PD0 // Pin 9 über IC4 =Wi | SV2 |
#define Uart0TxD PD1 // Pin 10 über IC4 =Wi | SV2 |
#define Uart1RxD PD2 // Pin 11 direkt = USB, BTM, über IC5 = Wi | SV2 |
#define Uart1TxD PD3 // Pin 12 direkt = USB, BTM, über IC5 = Wi | SV2 |
#define PiepserTest PD4 // Pin 13 CTC für Piepser |
#define Servo PD5 // Pin 14 PWM für Servo |
#define Wi232_CMD PD6 // Pin 15 aktiv Low = Wi232 CMD |
#define Displaybeleuchtung PD7 // Pin 16 High = Display-LED |
#define KEY_ENTER Key1 |
#define KEY_ESC Key2 |
#define KEY_PLUS Key3 |
#define KEY_MINUS Key4 |
// |= 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 set_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); |
#endif |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/Koptertool 3.9_1/GPL_PKT_V3_5_8a_FC086_HW3_9_atmega1284p.hex |
---|
0,0 → 1,5251 |
:100000000C9479240C94A1240C94A1240C94A12484 |
:100010000C94A1240C94A1240C94A1240C94A1244C |
:100020000C94A1240C94A9810C94B4810C94A12467 |
:100030000C94A1240C94A1240C94A1240C94A1242C |
:100040000C94D2820C94A1240C94A1240C94A1248D |
:100050000C94A18A0C94A1240C94A1240C94A124A6 |
:100060000C94504C0C94A1240C9466860C94A124FE |
:100070000C94C2890C94F2890C94A1240C94A124B0 |
:100080000C94A1240C94A1240C94A124502B542B47 |
:10009000582B5C2B602B752B792B7D2B812B272BE1 |
:1000A0003C2B402B442B482B4C2B382B852BA42B43 |
:1000B00005A84CCDB2D44EB93836A9020C50B9912E |
:1000C0008688083CA6AAAA2ABE000000803F457880 |
:1000D0006974007374617274656E00756E64204D8E |
:1000E000696B726F6B6F70746572746F6F6C0050B8 |
:1000F00043206D6974205553422076657262696EA3 |
:1001000064656E0057692E32333220746F20464387 |
:100110002000457869740050726F6772616D6D20C0 |
:100120007374617274656E0057692E3233320050F9 |
:1001300043206D6974205553422076657262696E62 |
:1001400064656E0057692E323332204B6F6E6669DC |
:100150006775726174696F6E200057692E32333291 |
:10016000204E414B00576932333220496E69744545 |
:1001700072726F72202000576932333220496E69E3 |
:1001800074206F6B2E2E2E2E005769323332204989 |
:100190006E69744572726F722020002E002E002E40 |
:1001A000002E002E002E002E002E002E002E002EDF |
:1001B000002E002E002E002E002E002E002E002ECF |
:1001C00000496E697420576932333220776169744F |
:1001D0002E2E2E2E0056657273696F6E3A006F6B6D |
:1001E000202020202020202020202020202020200F |
:1001F00020200052414D2073657420746F203537E4 |
:1002000036303020202020004572726F72207365D6 |
:10021000742052414D2020202020006F6B20202090 |
:100220002020202020202020202020202020004EC0 |
:10023000562D52414D2073657420746F203537362A |
:100240003030004572726F7220736574204E562DE7 |
:1002500052414D0057692E32333220666F756E64FD |
:1002600020323430300057692E32333220666F75B9 |
:100270006E642035373630300057692E32333220E5 |
:1002800053797461786572726F72202020006E6FEE |
:100290002057692E32333220666F756E64090077FD |
:1002A000697468203234303020426175640920203E |
:1002B0002000776974682035373630302042617508 |
:1002C0006409007365617263682057692E323332A6 |
:1002D000204D6F64756C003030313200496E71759D |
:1002E00069727920456E64000D0A00496E71756966 |
:1002F000727920526573756C74733A0D0A00455219 |
:10030000524F520D0A004F4B0D0A000D004154533D |
:10031000310041544E3D004154523100415452305D |
:100320000041544F31004154463F004154443D0088 |
:10033000415444300041544800415441004154006C |
:100340004154453100415451300041544530004141 |
:100350005451310041544C340041545A30004154FE |
:10036000503D002E0054696D65206F75742C4661F8 |
:10037000696C20746F20636F6E6E65637421004337 |
:100380004F4E4E45435400444953434F4E4E454310 |
:1003900054000D0A00425420696E697469616C69E9 |
:1003A00073696572656E2E2E004576616C75617499 |
:1003B000696F6E20283836384D487A29202000523F |
:1003C0006164696F74726F6E69782057692E323379 |
:1003D00032445453004B6162656C20616E736368F4 |
:1003E0006C69657373656E2E202000504B54206538 |
:1003F000696E2067656B7265757A7465732020205D |
:10040000005A7769736368656E204D4B2D555342D2 |
:1004100020756E642020004D4B2D55534220616E97 |
:1004200020504320616E7363686C2E200046432089 |
:100430003E204D4B2D555342203E2042544D2D32EF |
:1004400032320042544D2D323232204B6F6E66698B |
:10045000677572696572656E004552524F523A2057 |
:100460006E6F2064617461003F004643004E43009C |
:100470004E43004643004552524F523A206E6F2081 |
:100480006461746100416E616C6F67204E616D65DF |
:10049000733A200052656164696E67004665686C56 |
:1004A00065723A204B65696E6520446174656E0023 |
:1004B000464300204E6176692D4374726C20446976 |
:1004C00073706C6179202020004E430020466C69D7 |
:1004D0006768742D4374726C20446973706C617921 |
:1004E000200020200020446973706C617920202056 |
:1004F0002020202020202020202000464300204EC5 |
:100500006176692D4374726C20446973706C6179F3 |
:10051000202020004E430020466C696768742D43FC |
:1005200074726C20446973706C6179200020200023 |
:1005300020446973706C61792020202020202020C5 |
:10054000202020202000464300204E6176692D4364 |
:1005500074726C20446973706C6179202020000DE6 |
:100560000A002E002E004F4B004E6575205374611B |
:100570007274656E206D6974202020202020005048 |
:100580004B54204365627261200031323334005392 |
:1005900074616E64617264776572746520676573F7 |
:1005A00065747A740077657264656E2061756600A3 |
:1005B00020454550524F4D20506172616D65746504 |
:1005C0007220202020000000000000007815141583 |
:1005D0007800205554557800384544453800304956 |
:1005E000484930003C4140413C00384140217800BE |
:1005F0007E1515150A000000000000000000000034 |
:1006000000000000000000000000000000001038A2 |
:100610005410101E000000000000101010101010E8 |
:100620001010107C101000000000000008140000E2 |
:1006300014081008040408100810202010080008EE |
:100640001422410000412214080004027F02040029 |
:1006500010207F201000103854101010101010546B |
:10066000381010181C1C1810081838381808000802 |
:100670001C3E7F00007F3E1C080006090909060099 |
:1006800006497D49060000000000000000002F0020 |
:100690000000000700070000147F147F1400242AC4 |
:1006A0006B2A120023130864620036495522500059 |
:1006B000000503000000001C224100000041221C34 |
:1006C000000014083E08140008083E080800005006 |
:1006D0003000000008080808080000606000000002 |
:1006E0002010080402003E5149453E0000427F4070 |
:1006F00000004261514946002141454B3100181428 |
:10070000127F10002745454539003C4A49493000D1 |
:10071000030171090700364949493600064949294C |
:100720001E00003636000000005636000000081497 |
:100730002241000014141414140000412214080073 |
:10074000020151090600324979413E007E11111122 |
:100750007E007F49494936003E41414122007F41A8 |
:1007600041221C007F49494941007F0909090100D4 |
:100770003E4149497A007F0808087F0000417F41D7 |
:1007800000002040413F01007F08142241007F40CB |
:10079000404040007F020C027F007F0408107F0071 |
:1007A0003E4141413E007F09090906003E41512179 |
:1007B0005E007F0919294600464949493100010177 |
:1007C0007F0101003F4040403F001F2040201F00AC |
:1007D0003F4038403F006314081463000708700866 |
:1007E00007006151494543007F4141000000020478 |
:1007F000081020000041417F0000040201020400B3 |
:100800004040404040000001020400002054545485 |
:1008100078007F4844443800384444442000384439 |
:1008200044487F00385454541800087E09010200DF |
:100830000C5252523E007F080404780000447D4070 |
:1008400000002040443D00007F102844000000418B |
:100850007F4000007C04180478007C0804047800C1 |
:100860003844444438007C14141408000814141844 |
:100870007C007C0804040800485454542000043FC1 |
:10088000444020003C4040207C001C2040201C00B4 |
:100890003C4038403C004428102844000C50505044 |
:1008A0003C004464544C4400000836410000000001 |
:1008B0007F00000000413608000008082A1C0800DC |
:1008C000081C2A0808006D002E002E006B6D2F6892 |
:1008D000002E00636D002020006F6B00200044009C |
:1008E0006E6F0032440033440020002D0078005821 |
:1008F000004F00416C742020202020203A20004C22 |
:1009000061742020202020203A20004C6F6E672048 |
:10091000202020203A20005370656564202020208C |
:100920003A200050444F5020202020203A200041FF |
:1009300063637572616379203A20005361742020EB |
:10094000202020203A2000466978205479706520C4 |
:100950003A20004E7572206D6974204E43202100AC |
:10096000201A202020201B20202020204578697478 |
:100970000020203031323334353637383941424364 |
:100980004445460D0A00302E3836780045455072F1 |
:100990006F6D5265762E3A00454550726F6D526507 |
:1009A000762E3A002E003F002E002E004F5344209A |
:1009B00020202020202020202020202020004F53F5 |
:1009C0004420202020202020202020202020200023 |
:1009D0004F53442020202020202020202020202091 |
:1009E00020004F53442020202020202020202020A1 |
:1009F000202020003344204C6167652020202020E7 |
:100A0000202020202000334420616E67656C6573D0 |
:100A100020202020202020003344206C6F6361744C |
:100A2000696F6E202020202020003344206C6F63EB |
:100A30006174696520202020202020004D4B204437 |
:100A40006973706C617920202020202020004D4B9C |
:100A500020446973706C61792020202020202000C0 |
:100A60004D4B20446973706C617920202020202038 |
:100A700020004D4B20446973706C61792020202048 |
:100A800020202000506172616D6574657220202005 |
:100A9000202020201D00506172616D6574657220F8 |
:100AA0002020202020201D00506172616D6574653A |
:100AB00072202020202020201D00506172616D6571 |
:100AC000746572732020202020201D00446562750B |
:100AD000672044617461202020202020200044658C |
:100AE000627567204461746120202020202020004E |
:100AF00044656275672044617461202020202020B5 |
:100B000020004465627567204461746120202020C4 |
:100B10002020200047505320496E666F202020205F |
:100B200020202020200047505320496E666F20204F |
:100B3000202020202020200047505320496E666F3F |
:100B40002020202020202020200047505320496EC4 |
:100B5000666F20202020202020202000504B542091 |
:100B6000546F6F6C73202020202020201D00504BDC |
:100B70005420546F6F6C73202020202020201D00F3 |
:100B8000504B5420546F6F6C732020202020202065 |
:100B90001D00504B5420546F6F6C73202020202078 |
:100BA00020201D004D4B20446973706C617920201A |
:100BB0002020202020004D4B20446973706C617907 |
:100BC00020202020202020004D4B20446973706C91 |
:100BD000617920202020202020004D4B2044697383 |
:100BE000706C6179202020202020200050617261EB |
:100BF0006D65746572202020202020201D0050612A |
:100C000072616D65746572202020202020201D00F7 |
:100C1000506172616D657465722020202020202053 |
:100C20001D00506172616D65746572202020202066 |
:100C300020201D0044656275672044617461202096 |
:100C40002020202020004465627567204461746183 |
:100C50002020202020202000446562756720446108 |
:100C600074612020202020202000446562756720C8 |
:100C7000446174612020202020202000504B54200B |
:100C8000546F6F6C73202020202020201D00504BBB |
:100C90005420546F6F6C73202020202020201D00D2 |
:100CA000504B5420546F6F6C732020202020202044 |
:100CB0001D00504B5420546F6F6C73202020202057 |
:100CC00020201D00424C2D4374726C2E20546573FD |
:100CD000746572200000424C2D4374726C2E2054B7 |
:100CE0006573746572200000424C2D4374726C2E43 |
:100CF00020546573746572200000424C2D43747259 |
:100D00006C2E2054657374657220000053657276F2 |
:100D10006F20546573746572202020202000536575 |
:100D200072766F2054657374657220202020200035 |
:100D3000536572766F20546573746572202020208D |
:100D40002000536572766F2054657374657220209D |
:100D500020202000504320425420203E204B6F7022 |
:100D6000746572202000504320425420203E204BC6 |
:100D70006F70746572202000504320425420203E42 |
:100D8000204B6F7074657220200050432042542025 |
:100D9000203E204B6F707465722020005043205518 |
:100DA0005342203E204B6F707465722020005043E8 |
:100DB00020555342203E204B6F70746572202000F6 |
:100DC000504320555342203E204B6F707465722073 |
:100DD0002000504320555342203E204B6F707465D5 |
:100DE00072202000504B54205365747570202020D1 |
:100DF000202020201D00504B542053657475702016 |
:100E00002020202020201D00504B54205365747555 |
:100E100070202020202020201D00504B542053659E |
:100E2000747570202020202020201D00504B54205D |
:100E300056657273696F6E20202020202000504B71 |
:100E4000542056657273696F6E2020202020200088 |
:100E5000504B542056657273696F6E2020202020FD |
:100E60002000504B54205665727369652020202065 |
:100E70002020200020202020202020202020202092 |
:100E80002020202020202020200028432920474EF9 |
:100E9000552047504C204C6963656E7365202000D7 |
:100EA000202020204E4F2057415252414E5459206D |
:100EB0002020202020002020202020202020202052 |
:100EC00020202020202020202020200032303038F8 |
:100ED0002054686F6D6173204B61697365722020C7 |
:100EE0002000323030392D32303130205065746579 |
:100EF00072204D61636B20003230313020536562C7 |
:100F000061737469616E20426F65686D20003230D4 |
:100F10003131204368722E204272616E64746E65B6 |
:100F2000722026002020202020486172616C6420FD |
:100F3000426F6E676172747A200020001200130005 |
:100F4000120013002000456E646500206E6963681E |
:100F500074206DF6676C6963682100204D69742008 |
:100F600064696573657220486172647761726500B7 |
:100F70002D55666C6173683A773A46494C452E6840 |
:100F800065783A6120002D50636F6D3F202D6231EE |
:100F90003135323030202020202020002D706D315E |
:100FA00032383470202D6361767231303920202040 |
:100FB0002000537461727420617672647564652ECA |
:100FC000657865202020200020504B542055706407 |
:100FD0006174652020202020202020202000302E39 |
:100FE00038367800504B542D546F6F6C2046432098 |
:100FF0000013001200302E38367800504B542D5418 |
:101000006F6F6C20464320001D002000456E646514 |
:10101000005374617465203A0056657273696F6E8F |
:101020003A0054656D70657261747572653A00437B |
:10103000757272656E74202020203A0053657450DA |
:101040006F696E742020203A001D00200020001DD2 |
:1010500000416C6C00416C6C001D001A201B005696 |
:10106000616C75653A20202030004D6F746F723AC4 |
:10107000202020310020424C2D4374726C20546596 |
:101080007374202020202020202000456E646520DD |
:10109000436865636B0054656D7020203A004D61B4 |
:1010A0007850574D203A00437572726E743A005270 |
:1010B0006561644D6F643A005374617465203A0051 |
:1010C000536574506F694C3A00536574506F693AB8 |
:1010D0000056657273696F6E3A00466F756E6420D4 |
:1010E000424C2D4374726C3A00537563686520421C |
:1010F0004C2D4374726C006D617820416C7469747E |
:101100007564653A006D61782053706565642020D0 |
:10111000203A006D61782044697374616E63653AAA |
:10112000006D696E20566F6C74616765203A006DC2 |
:1011300061782054696D65202020203A006D617827 |
:101140002043757272656E74203A0055736564436E |
:10115000617061636974793A00F710051113112108 |
:10116000112F113D114B110E0F0E4E0E0F0E4F0E83 |
:101170000F0E530E0F0E570E0F0E4E0E0F0E4F0E7C |
:101180000F0E530E0F0E570E0F0E4E0E0F0E4F0E6C |
:101190000F0E530E0F0E574E4500452000534500CD |
:1011A0005320005357005720004E57004E20009701 |
:1011B000119A119D11A011A311A611A911AC112E04 |
:1011C000002E004B3A00523A004E3A00456E642021 |
:1011D00020496E666F006D4168005043002020007A |
:1011E0001F00680046726565202020202020200016 |
:1011F000506F732E20486F6C64202000436F6D6920 |
:101200006E6720486F6D650053617473006B6D2FBE |
:1012100068004F6E6C792077697468204E432021F6 |
:10122000002E002E006D4168006B6D2F68004B6131 |
:101230006EE46C652020202020202020004368617F |
:101240006E6E656C202020202020200043616E619E |
:1012500075782020202020202020004B616E6161C5 |
:101260006C2020202020202020004B6F6E666967B4 |
:1012700075726174696F6E20006D61696E20202047 |
:101280002020202020202000436F6E6669672020E8 |
:1012900020202020202000436F6E666967757261F0 |
:1012A000746965202000537469636B20202020201E |
:1012B0002020202000737469636B202020202020D0 |
:1012C000202020004D616E636865202020202020B2 |
:1012D000202000537469636B2020202020202020D0 |
:1012E00020004C6F6F70696E672020202020202026 |
:1012F000004C6F6F70696E67202020202020200036 |
:101300004C6F6F70696E6720202020202020004CD9 |
:101310006F6F70696E67202020202020200048F623 |
:1013200068652020202020202020202000416C748F |
:10133000697475646520202020202000416C746948 |
:101340007475646520202020202000486F6F67742A |
:10135000652020202020202020004B616D657261D7 |
:1013600020202020202020200043616D6572612014 |
:10137000202020202020200043616D657261202004 |
:101380002020202020200043616D657261202020F4 |
:101390002020202020004E6176694374726C20204A |
:1013A00020202020004E6176694374726C2020203A |
:1013B000202020004E6176694374726C202020202A |
:1013C0002020004E6176694374726C20202020201A |
:1013D000200041757367E46E67652020202020207F |
:1013E000004F757470757473202020202020200019 |
:1013F000536F7274696573202020202020200055CF |
:10140000697467616E67656E202020202000566534 |
:1014100072736368696564656E65732000446976FC |
:1014200065727320202020202020200044697665EA |
:1014300072732020202020202020004469766572CD |
:1014400073656E202020202020004779726F2020B5 |
:101450002020202020202020004779726F2020208B |
:1014600020202020202020004779726F202020207B |
:10147000202020202020004779726F20202020206B |
:1014800020202020200042656E75747A657220202D |
:10149000202020200055736572202020202020204D |
:1014A00020202000506172616D6574726573202088 |
:1014B0002020004765627275696B657220202020CC |
:1014C0002000416368736B6F70706C756E672020CD |
:1014D00000436F75706C20417865732020202000D8 |
:1014E000436F75706C204178657320202020004B7D |
:1014F0006F7070656C696E672041737320004D6971 |
:101500007865722D536574757020202000436F6ECE |
:10151000666967204D69782020202000436F6E6641 |
:101520006967204D69782020202000436F6E66692E |
:10153000672E204D697865722000456173792053CC |
:10154000657475702020202000436F6E66696720E7 |
:101550004561737920202000436F6E6669672045DE |
:1015600061737920202000436F6E6669672E2065C5 |
:1015700061737920200047617320202020202020E3 |
:1015800020202020005468726F74746C6520202025 |
:101590002020200047617A202020202020202020A9 |
:1015A00020200047617320202020202020202020A0 |
:1015B0002000476965722020202020202020202044 |
:1015C0000047696572202020202020202020200054 |
:1015D0004C616365742020202020202020200047BB |
:1015E00069657220202020202020202020004E69C4 |
:1015F000636B20202020202020202020004E6963C3 |
:101600006B202020202020202020200054616E67A5 |
:1016100061676520202020202020004E69636B2018 |
:1016200020202020202020202000526F6C6C2020C1 |
:10163000202020202020202000526F6C6C202020B1 |
:101640002020202020202000526F756C69732020FC |
:1016500020202020202000526F6C6C202020202091 |
:10166000202020202000506F74692031202020206D |
:101670002020202000506F7469203120202020205D |
:1016800020202000506F746920312020202020204D |
:10169000202000506F74692031202020202020203D |
:1016A0002000506F7469203220202020202020202C |
:1016B00000506F746920322020202020202020003C |
:1016C000506F7469203220202020202020200050DC |
:1016D0006F74692032202020202020202000506FAD |
:1016E00074692033202020202020202000506F7497 |
:1016F000692033202020202020202000506F746992 |
:101700002033202020202020202000506F746920CA |
:1017100033202020202020202000506F74692034A6 |
:10172000202020202020202000506F7469203420A9 |
:101730002020202020202000506F74692034202099 |
:1017400020202020202000506F7469203420202089 |
:10175000202020202000506F746920352020202078 |
:101760002020202000506F74692035202020202068 |
:1017700020202000506F7469203520202020202058 |
:10178000202000506F746920352020202020202048 |
:101790002000506F74692036202020202020202037 |
:1017A00000506F7469203620202020202020200047 |
:1017B000506F7469203620202020202020200050E7 |
:1017C0006F74692036202020202020202000506FB8 |
:1017D00074692037202020202020202000506F74A2 |
:1017E000692037202020202020202000506F74699D |
:1017F0002037202020202020202000506F746920D6 |
:1018000037202020202020202000506F74692038AD |
:10181000202020202020202000506F7469203820B4 |
:101820002020202020202000506F746920382020A4 |
:1018300020202020202000506F7469203820202094 |
:101840002020202020004D6F746F72205369636840 |
:101850002E536368004D6F742E5361666574792052 |
:1018600053772E004D6F742E536166657479205343 |
:10187000772E004D6F742E7361662E736368616BF3 |
:101880002E004572772E205369672E2050722E202D |
:1018900000456E682E205369672E436865636B00B0 |
:1018A00052656365702052656E666F7263650055A0 |
:1018B0006974672E5369672E436865636B00456DD5 |
:1018C0007066E46E6765722054797020005265631B |
:1018D0006569766572205479706520005479706569 |
:1018E00020526563657074657572004F6E74766121 |
:1018F0006E672E2054797065200048F668656E7218 |
:101900006567656C65722020004374726C20416CC1 |
:1019100074697475646520004374726C20416C7442 |
:10192000697475646520004374726C20486F6F673A |
:1019300074652020200047505320202020202020A4 |
:10194000202020200047505320202020202020202D |
:10195000202020004750532020202020202020201D |
:10196000202000475053202020202020202020200D |
:1019700020004B6F6D706173732020202020202089 |
:1019800000436F6D706173732020202020202000A1 |
:10199000436F6D7061732020202020202020004B99 |
:1019A0006F6D7061732020202020202020004B6F5D |
:1019B0006D704665737420417573722E00436F6DB0 |
:1019C000704F7269656E742E466978004D61696E5C |
:1019D0007469656E204361702020004B6F6D7061EB |
:1019E000732076617374202020004572772E205377 |
:1019F00069672E2050722E200053656E732E52633D |
:101A00007653696756616C004374726C2052656E40 |
:101A10002052656365700045787452656320536990 |
:101A2000676E61616C004163687328652E296B6F76 |
:101A300070706C2E004178697320436F7570696E09 |
:101A4000672020004465636F75706C616765204195 |
:101A50007865004173206B6F7070656C696E6720EC |
:101A6000200044726568726174656E626567722EEB |
:101A700000526F7452617465206C696D69742E0038 |
:101A80004C696D6974205669742E20526F7400522F |
:101A90006F7452617465206C696D69742E004865BD |
:101AA0006164696E6720486F6C642020004E696332 |
:101AB0006B2F526F6C6C2020202020004F726965C4 |
:101AC0006E742E20466978652020004B6F65727316 |
:101AD000207661737420202020004E69636B2F52A2 |
:101AE0006F6C6C2050202020004E69636B2F526F6A |
:101AF0006C6C205020202000526F756C2F54616E4A |
:101B0000672050202020004E69636B2F526F6C6C51 |
:101B10002050202020004E69636B2F526F6C6C2088 |
:101B200044202020004E69636B2F526F6C6C204460 |
:101B300020202000526F756C2F54616E6720442066 |
:101B40002020004E69636B2F526F6C6C2044202064 |
:101B5000200047696572205020202020202020206E |
:101B6000004769657220502020202020202020007E |
:101B70004C616365742050202020202020200047E5 |
:101B800069657220502020202020202020004578E8 |
:101B90007465726E65204B6F6E74722E004578749A |
:101BA00065726E204374726C202020004374726C46 |
:101BB0002045787465726E652020004578746572E2 |
:101BC0006E20436F6E74726F6C004C6F6F70696E35 |
:101BD00067206F62656E2020004C6F6F70696E67C2 |
:101BE00020757020202020004C6F6F70696E672078 |
:101BF0004176616E7420004C6F6F70696E67206F64 |
:101C00006D686F6F67004C6F6F70696E6720756EDF |
:101C100074656E20004C6F6F70696E6720646F771B |
:101C20006E2020004C6F6F70696E67204172726980 |
:101C30006572004C6F6F70696E672062656E6564D7 |
:101C40002E004C6F6F70696E67206C696E6B73202D |
:101C5000004C6F6F70696E67206C656674202000A1 |
:101C60004C6F6F70696E6720476175636865004CE3 |
:101C70006F6F70696E67206C696E6B7320004C6FBC |
:101C80006F70696E6720726563687473004C6F6F64 |
:101C900070696E6720726967687420004C6F6F709E |
:101CA000696E672044726F697465004C6F6F70696C |
:101CB0006E672072656368747300476173204C69B6 |
:101CC0006D69742020202020005468726F74746C39 |
:101CD00065204C696D6974004C696D6974652047B5 |
:101CE000617A2020202000476173204C696D69656E |
:101CF000742020202000416E7370726563687363E6 |
:101D000068772E2000536575696C205265706F6E80 |
:101D100073652000536575696C205265706F6E7332 |
:101D20006520004472656D70656C776161726465F1 |
:101D30002000487973746572657365202020202027 |
:101D400000487973746572657369732020202000E0 |
:101D50004879737465726573697320202020004888 |
:101D60007973746572657365202020202000556D9D |
:101D70006B656872702E204E69636B20004E69633C |
:101D80006B20496E7665727320202000496E76655F |
:101D9000727320526F756C697320004E69636B20FB |
:101DA0006765696E766572742E00556D6B65687235 |
:101DB000702E20526F6C6C2000526F6C6C20496E3C |
:101DC0007665727320202000496E76657273205408 |
:101DD000616E6761676500526F6C6C206765696E44 |
:101DE000766572742E0048F668656E726567656C7C |
:101DF000756E672000416C74697475646520437466 |
:101E0000726C20004374726C20416C746974756448 |
:101E1000652000486F6F67746520436F6E74726F42 |
:101E20006C004A3A484265672C4E3A566172696FB7 |
:101E300000593A4C696D482C4E3A566172696F00F0 |
:101E4000593A4C696D482C4E3A566172696F005987 |
:101E50003A4C696D482C4E3A566172696F00536373 |
:101E600068616C74657220662E20482E0053776975 |
:101E700074636820662E2048696768005377697428 |
:101E80006820486175746575722000536368616BE2 |
:101E90002E20486F6F6774652000616B7573742E18 |
:101EA00020566172696F20200061636F75737469D9 |
:101EB0006320566172696F00566172696F204163D9 |
:101EC0006F757374696300416B6F6573742E205670 |
:101ED0006172696F2000536F6C6C68F66865202032 |
:101EE0002020202000536574706F696E74202020BC |
:101EF0002020200048617574657572204D6178203E |
:101F0000202000476577656E73746520686F6F6782 |
:101F100074004D696E2E2047617320202020202000 |
:101F2000006D696E2E207468726F74746C65200089 |
:101F300047617A204D696E20202020202020004D0E |
:101F4000696E696D61616C2067617320200048F6DD |
:101F500068652050202020202020202000416C7423 |
:101F6000697475646520502020202000416C7469DC |
:101F70007475646520502020202000486F6F6774BE |
:101F8000652050202020202020004C75667464724B |
:101F900075636B2044202020004261726F6D657470 |
:101FA00072696320442020005072657373696F6EFC |
:101FB000204420202020004261726F6D6574722ED3 |
:101FC0002044202020005A2D41434320202020205F |
:101FD0002020202000414343205A20202020202080 |
:101FE00020202000414343205A2020202020202070 |
:101FF000202000414343205A202020202020202060 |
:1020000020004D61782E2048F66865202020202091 |
:10201000004D61782E20486967682020202020002C |
:102020004D61782E20486967682020202020004DCF |
:1020300061782E20686F6F677465202020005665D8 |
:10204000727374E4726B756E672F5220006761695A |
:102050006E2F726174652020202020004761696E18 |
:102060002F4672657175656E63650056657273748F |
:102070002E2F72617465202020005363687765629B |
:1020800065676173202B2F2D00686F6F7665722056 |
:1020900076617269612E200056617220566F6C2045 |
:1020A00053746174202000686F6F766572207661CA |
:1020B0007269612E2000475053205A202020202092 |
:1020C0002020202000475053205A2020202020206C |
:1020D00020202000475053205A202020202020205C |
:1020E000202000475053205A20202020202020204C |
:1020F0002000537469636B204E657574722E2050F6 |
:1021000000737469636B206E657574722E205000C5 |
:10211000506F73204E6575747265204D616E00734B |
:102120007469636B206E657574722E2050004E6961 |
:10213000636B20532E20416E73742E20006E6963F2 |
:102140006B2073657276206374726C0041737365E3 |
:1021500072762054616E67616765006E69636B20FB |
:1021600073657276206374726C004E69636B204BEA |
:102170006F6D70656E732E20006E69636B20636FE8 |
:102180006D70656E732E2000436F6D702054616E0C |
:10219000676167652020006E69636B20636F6D70F7 |
:1021A000656E732E20004E69636B20556D6B6568FC |
:1021B00072656E20006E69636B20696E762E2064F6 |
:1021C00069722E00496E76657273657220526F7562 |
:1021D0006C20006E69636B20696E762E726963688D |
:1021E0002E004E69636B20536572766F206D696EA9 |
:1021F000006E69636B20736572766F206D696E0087 |
:10220000536572766F204D696E2020202020006E6D |
:1022100069636B20736572766F206D696E004E691D |
:10222000636B20536572766F206D6178006E696311 |
:102230006B20736572766F206D61780053657276DE |
:102240006F204D61782020202020006E69636B2074 |
:10225000736572766F206D617800526F6C6C2053DD |
:102260002E20416E73742E2000726F6C6C2073658B |
:102270007276206374726C004173736572762052BB |
:102280006F756C69732000726F6C6C207365727669 |
:10229000206374726C00526F6C6C204B6F6D7065B4 |
:1022A0006E732E2000726F6C6C20636F6D70656EA4 |
:1022B000732E2000436F6D702054616E67616765F7 |
:1022C000202000726F6C6C20636F6D70656E732ED2 |
:1022D0002000526F6C6C20556D6B656872656E20C6 |
:1022E00000726F6C6C20696E762E206469722E000D |
:1022F000496E7665727365722054616E6720007254 |
:102300006F6C6C206F6D6B6572656E202000526F74 |
:102310006C6C20536572766F206D696E00726F6C05 |
:102320006C20736572766F206D696E0053657276EE |
:102330006F204D696E202020202000726F6C6C2071 |
:10234000736572766F206D696E00526F6C6C2053EE |
:102350006572766F206D617800726F6C6C207365AA |
:1023600072766F206D617800536572766F204D61D3 |
:1023700078202020202000726F6C6C2073657276AC |
:102380006F206D617800416E73742E204765736312 |
:1023900068772E2000736572766F207265667265AD |
:1023A00073682000546175782052656672657368A1 |
:1023B000202000536572766F2072656672657368BF |
:1023C00020004D616E75656C6C65204765736368B0 |
:1023D000006D616E75656C6C2053706565642000DE |
:1023E00056697465737365204D616E2E202000530D |
:1023F0006E656C682E68616E646265642E00436170 |
:102400006D205269636874756E6720200043616DAA |
:10241000204F7269656E74202020200043616D207A |
:102420004F7269656E74202020200043616D6572D3 |
:10243000612072696368742E2000536572766F2084 |
:10244000332020202020202000536572766F203317 |
:102450002020202020202000536572766F2033201A |
:1024600020202020202000536572766F203320200A |
:10247000202020202000536572766F2034202020F9 |
:102480002020202000536572766F203420202020E9 |
:1024900020202000536572766F20342020202020D9 |
:1024A000202000536572766F2034202020202020C9 |
:1024B0002000536572766F203520202020202020B8 |
:1024C00000536572766F20352020202020202000C8 |
:1024D000536572766F203520202020202020005365 |
:1024E0006572766F20352020202020202000475064 |
:1024F00053202020202020202020202000656E61F5 |
:10250000626C65204750532020202000416374698D |
:102510007665722047505320202000656E61626C02 |
:1025200065204750532020202000475053204D6FF6 |
:102530006475732053742E2000475053206D6F64D0 |
:102540006520636F6E747200446566204D6F64652C |
:1025500020475053202000475053206D6F64652062 |
:10256000636F6E747200475053205665727374E443 |
:10257000726B2E2000475053204761696E20202047 |
:10258000202020004761696E2047505320202020E2 |
:1025900020200047505320766572737465726B2E4D |
:1025A00020004750532053742E20536368772E2009 |
:1025B0000047505320737469636B20746872650020 |
:1025C000536575696C204D616E6368652020004716 |
:1025D00050532073742E206472656D702E004D6907 |
:1025E0006E2E205361742E2020202020004D696E15 |
:1025F0002E205361742E2020202020004E62726510 |
:10260000204D696E2E205361742E004D696E2E2070 |
:102610005361742E2020202020004750532D50203D |
:102620002020202020202020004750532D50202003 |
:1026300020202020202020004750532D50202020F3 |
:10264000202020202020004750532D5020202020E3 |
:102650002020202020004750532D492020202020DA |
:1026600020202020004750532D49202020202020CA |
:10267000202020004750532D4920202020202020BA |
:102680002020004750532D492020202020202020AA |
:1026900020004750532D442020202020202020209F |
:1026A000004750532D4420202020202020202000AF |
:1026B0004750532D44202020202020202020004758 |
:1026C00050532D4420202020202020202000502066 |
:1026D0004C696D697420202020202020004C696DF9 |
:1026E0006974202050202020202020004C696D6932 |
:1026F00074652050202020202020004C696D6965E1 |
:102700007420205020202020200049204C696D6931 |
:102710007420202020202020004C696D6974202026 |
:1027200049202020202020004C696D6974652049D3 |
:10273000202020202020004C696D696574202049EC |
:1027400020202020200044204C696D697420202026 |
:1027500020202020004C696D697420204420202016 |
:10276000202020004C696D697465204420202020C1 |
:102770002020004C696D69657420204420202020B1 |
:102780002000475053204163632020202020202038 |
:102790000047505320416363202020202020200048 |
:1027A000416363656C204750532020202020004760 |
:1027B00050532041636320202020202020004750D8 |
:1027C000532057696E646B6F72722E20004750530E |
:1027D0002057696E6420436F72722E00436F7272CD |
:1027E0006563742056656E7420200047505320574F |
:1027F000696E6420436F72722E004272656D73774A |
:1028000069726B756E672020005370656564206384 |
:102810006F6D70656E732E00436F6D70656E732003 |
:102820005669742020200052656D7765726B696E61 |
:10283000672020202000475053206D61782E2052C1 |
:1028400061642E2000475053206D61782E726164C0 |
:10285000697573005261796F6E20475053204D6146 |
:10286000782000475053206D61782E72616469753D |
:1028700073004750532057696E6B656C204C692E6E |
:102880000047505320616E676C2E6C696D6974004F |
:102890004C696D697420416E676C20475053004746 |
:1028A000505320686F656B206C696D2E2000504876 |
:1028B000204C6F67696E2074696D65200050482058 |
:1028C0006C6F67696E2074696D65200054707320A9 |
:1028D0004D656D6F726973202020005048206C6F29 |
:1028E00067696E2074696A64200044796E616D695D |
:1028F00063205048202020200044796E616D696378 |
:10290000205048202020200044796E616D696320AA |
:102910005048202020200044796E616D69736368FF |
:1029200065205048200043482048F6686520202054 |
:10293000202020200043482048696768202020206C |
:10294000202020004348204869676820202020205C |
:10295000202000434820486F6F67746520202020A6 |
:1029600020004C454431204269746D61736B6520D1 |
:10297000004F757431204269746D61736B202000C3 |
:102980004269746D61736B20533120202020005503 |
:102990006974673120426974706174722E0020205E |
:1029A00020202054696D696E67202020004F7574C7 |
:1029B000312054696D696E6720202000486F726C69 |
:1029C0006F676520533120202020005569746731DE |
:1029D0002054696D696E672020002020202020731C |
:1029E0006F666F727420616E004163746976202097 |
:1029F00020202020202020004163746966202020B0 |
:102A000020202020202000446972656374206161C9 |
:102A10006E202020200020202020206E2E6D2E4DA4 |
:102A20006F746F72004163742E2077692E204D6F92 |
:102A3000746F72004163746966204175205265703D |
:102A40006F7300416B742E206D6F746F7220756907 |
:102A500074004C454432204269746D61736B65208B |
:102A6000004F757432204269746D61736B202000D1 |
:102A70004269746D61736B20533220202020005511 |
:102A80006974673220426974706174722E0020206C |
:102A900020202054696D696E67202020004F7574D6 |
:102AA000322054696D696E6720202000486F726C77 |
:102AB0006F676520533220202020005569746732EB |
:102AC0002054696D696E672020002020202020732B |
:102AD0006F666F727420616E0041637469762020A6 |
:102AE00020202020202020004163746966202020BF |
:102AF00020202020202000446972656374206161D9 |
:102B00006E202020200020202020206E2E6D2E4DB3 |
:102B10006F746F72004163742E2077692E204D6FA1 |
:102B2000746F72004163746966204175205265704C |
:102B30006F7300416B742E206D6F746F7220756916 |
:102B400074004C45443120566D696E2E5761726E8B |
:102B5000004F75743120756E646572766F6C740009 |
:102B6000416C20556E646572766F6C7461670055B8 |
:102B700069746731206F6E64657273702E004C4506 |
:102B8000443220566D696E2E5761726E004F757417 |
:102B90003220756E646572766F6C7400416C2055DE |
:102BA0006E646572766F6C74616700556974673224 |
:102BB000206F6E64657273702E004D696E2E204713 |
:102BC0006173202020202020006D696E2E20746803 |
:102BD000726F74746C65200047617A204D696E2EA7 |
:102BE000202020202020006D696E696D61616C20BD |
:102BF0006761732020004D61782E2047617320208B |
:102C000020202020006D61782E207468726F74740B |
:102C10006C65200047617A204D61782E20202020AD |
:102C20002020006D6178696D61616C20676173209F |
:102C300020004B6F6D706173737769726B756E678F |
:102C400000636F6D70617373206566666563740001 |
:102C5000456666657420636F6D7061732020004B5C |
:102C60006F6D7061732065666665637420004361F3 |
:102C70007265667265652053742E20200043617270 |
:102C80006566726565204374726C200043617265ED |
:102C900066726565204374726C20004361726566DC |
:102CA000726565204374726C2000546561636861CD |
:102CB000626C65204361726500546561636861629E |
:102CC0006C65204361726500546561636861626C84 |
:102CD00065204361726500546561636861626C657B |
:102CE000204361726500556E7465727370616E6E1B |
:102CF000756E672000756E646572766F6C746167BF |
:102D000065202000536F75732054656E73696F6E74 |
:102D10002020004F6E6465727370616E6E696E671D |
:102D20002000566F6C74205265666572656E7A205D |
:102D300000566F6C74205265666572656E7A20006D |
:102D400054656E73696F6E205265662020200052B4 |
:102D500065662E207370616E6E696E6720004E6F1F |
:102D60007420476173205A656974202000456D65A1 |
:102D700072672E5468722E54696D650044757265D1 |
:102D800065207365636F75727320004E6F6F6420EA |
:102D90006761732074696A6420004E6F7420476114 |
:102DA000732020202020202000456D6572672E545E |
:102DB00068726F74746C650047617A206465207373 |
:102DC00065636F757273004E6F6F64206761732067 |
:102DD0002020202020004661696C732E204348206B |
:102DE00054696D65004661696C732E204348205418 |
:102DF000696D65004661696C732E204348205469F3 |
:102E00006D65004661696C732E2043482054696AE1 |
:102E10006400436F6D70617373204572726F72202E |
:102E200000436F6D70617373204572726F72200082 |
:102E3000436F6D70617373204572726F7220004B27 |
:102E40006F6D706173204572726F722020006B2E5F |
:102E500053756D6D6572206F2053656E00436F6D05 |
:102E600070617373204572726F722000536F6E2011 |
:102E700041627320456D65747420004B6F6D706105 |
:102E800073204572726F722020004779726F205054 |
:102E90002020202020202020004779726F20502001 |
:102EA00020202020202020004779726F20502020F1 |
:102EB000202020202020004779726F2050202020E1 |
:102EC0002020202020004779726F204920202020D8 |
:102ED00020202020004779726F20492020202020C8 |
:102EE000202020004779726F2049202020202020B8 |
:102EF0002020004779726F204920202020202020A8 |
:102F000020004779726F204420202020202020209C |
:102F1000004779726F2044202020202020202000AC |
:102F20004779726F20442020202020202020004755 |
:102F300079726F2044202020202020202000476923 |
:102F4000657220502020202020202020004C61632A |
:102F50006574205020202020202020004C616365D3 |
:102F600074205020202020202020004769657220F6 |
:102F70005020202020202020200047696572204911 |
:102F80002020202020202020004C616365742049EF |
:102F900020202020202020004C61636574204920DF |
:102FA0002020202020200047696572204920202011 |
:102FB00020202020200044796E616D69736368656C |
:102FC0002053742E0064796E616D6963207374619F |
:102FD00062692E00537461622044796E616D69717B |
:102FE00075650044796E616D69732E20737461623A |
:102FF0002E0044726568726174656E6265672E208A |
:1030000000526F7452617465206C696D69742E0092 |
:103010004C696D69742044697420526F7461005466 |
:103020006F6572656E74616C206C696D2E00414332 |
:10303000432F4779726F2046616B2E200041434336 |
:103040002F4779726F204661637420004143432FFC |
:103050004779726F204661637420004143432F47D4 |
:1030600079726F204661637420004143432F477992 |
:10307000726F204B6F6D702E00436F6D7020414357 |
:10308000432F4779726F2000436F6D702041434397 |
:103090002F4779726F2000436F6D70204143432F9B |
:1030A0004779726F200048617570747265676C654E |
:1030B00072204920004D61696E2049202020202087 |
:1030C00020202000526567756C205072696E632065 |
:1030D000492000486F6F6664726567656C2E2049F1 |
:1030E0002000447269666B6F6D70656E7361742E3B |
:1030F00000647269667420436F6D70656E732E0094 |
:10310000436F6D70656E732044657269762000446C |
:103110007269667420636F6D70656E732E004779F7 |
:10312000726F20737461622E202020200047797214 |
:103130006F2073746162696C697479004779726F8A |
:103140002053746162696C697479004779726F20E9 |
:1031500073746162696C69742E004D6F746F7220B4 |
:10316000736D6F6F74682020004D6F746F722073E1 |
:103170006D6F6F74682020004D6F746F7220536DF7 |
:103180006F6F74682020004D6F746F7220736D6FC5 |
:103190006F7468202000506172616D6574657220E3 |
:1031A0003120202000506172616D6574657220319C |
:1031B00020202000506172616D657465722031209D |
:1031C000202000506172616D65746572203120208D |
:1031D0002000506172616D6574657220322020207C |
:1031E00000506172616D657465722032202020008C |
:1031F000506172616D65746572203220202000502C |
:103200006172616D6574657220322020200050610A |
:1032100072616D65746572203320202000506172E8 |
:10322000616D6574657220332020200050617261E9 |
:103230006D65746572203320202000506172616DCD |
:1032400065746572203320202000506172616D65C5 |
:10325000746572203420202000506172616D6574A5 |
:103260006572203420202000506172616D657465A4 |
:1032700072203420202000506172616D6574657287 |
:10328000203420202000506172616D6574657220C9 |
:103290003520202000506172616D657465722035A3 |
:1032A00020202000506172616D65746572203520A8 |
:1032B000202000506172616D657465722035202098 |
:1032C0002000506172616D65746572203620202087 |
:1032D00000506172616D6574657220362020200097 |
:1032E000506172616D657465722036202020005037 |
:1032F0006172616D65746572203620202000506116 |
:1033000072616D65746572203720202000506172F3 |
:10331000616D6574657220372020200050617261F4 |
:103320006D65746572203720202000506172616DD8 |
:1033300065746572203720202000506172616D65D0 |
:10334000746572203820202000506172616D6574B0 |
:103350006572203820202000506172616D657465AF |
:1033600072203820202000506172616D6574657292 |
:103370002038202020004163687328652E296B6F58 |
:1033800070706C2E0028446529436F75706C204165 |
:103390007865730028446529436F75706C20417807 |
:1033A0006573004173206B6F7070656C696E672088 |
:1033B00020004769657220706F732E204B6F70700C |
:1033C00000526574726F6163206C616365742000E4 |
:1033D000526574726F6163204C61636574200047AD |
:1033E00069657220706F732E206B6F702E004E69AE |
:1033F000636B2F526F6C6C204B6F70700052657452 |
:10340000726F20726F756C2F74616E0052657472EA |
:103410006F20526F756C2F54616E004E69636B2F75 |
:10342000526F6C6C206B6F702E0047696572204B79 |
:103430006F7272656B74757200436F72726563743C |
:10344000206C616365742000436F72726563742041 |
:103450004C6163657420004769657220636F727206 |
:103460006563746965004F7269656E74696572752C |
:103470006E672020004F7269656E74696572756EA3 |
:10348000672020004F7269656E746174696F6E20E9 |
:1034900020200000000000000000000000000000EC |
:1034A000000048F668656E726567656C756E67202A |
:1034B00000416C746974756465204374726C2000FB |
:1034C0004374726C20416C746974756465200048A3 |
:1034D0006F6F67746520436F6E74722E2000536F98 |
:1034E0006C6C68F6686520202020202000536574ED |
:1034F000706F696E74202020202020004861757450 |
:10350000657572204D617820202000476577656ED3 |
:1035100073742E686F6F67746500537469636B20F2 |
:103520004E657574722E205000737469636B206E43 |
:10353000657574722E205000506F73204E6575743F |
:103540007265204D616E00537469636B206E657502 |
:1035500074722E205000475053202020202020201D |
:103560002020202000656E61626C6520475053204A |
:1035700020202000416374697665722047505320F3 |
:10358000202000456E61626C65204750532020204A |
:103590002000475053204D6F6475732053742E20C4 |
:1035A00000475053206D6F646520636F6E74720026 |
:1035B000446566206D6F64652047505320200047A6 |
:1035C0005053206D6F646520636F6E747200447990 |
:1035D0006E616D6963205048202020200044796E80 |
:1035E000616D6963205048202020200044796E617D |
:1035F0006D6963205048202020200044796E616D61 |
:103600006963205048202020200043482048F66865 |
:10361000652020202020202000434820486967683A |
:10362000202020202020200043482048696768206F |
:1036300020202020202000434820686F6F67746599 |
:10364000202020202000436172656672656520534A |
:10365000742E202000436172656672656520437494 |
:10366000726C2000436172656672656520437472F6 |
:103670006C20004361726566726565204374726CEC |
:103680002000546561636861626C65204361726506 |
:1036900000546561636861626C6520436172650016 |
:1036A000546561636861626C6520436172650054B2 |
:1036B0006561636861626C652043617265004D6F8E |
:1036C000746F7220536963682E536368004D6F7482 |
:1036D0002E5361666574792053772E004D6F742EDA |
:1036E0005361666574792053772E004D6F742E7385 |
:1036F00061662E736368616B2E004F7269656E742C |
:10370000696572756E672020004F7269656E74611D |
:1037100074696F6E202020004F7269656E74696550 |
:1037200072756E672020004F7269656E74617469EE |
:103730006520202020000000010C03010101000091 |
:10374000010C040404040000010C01030303000045 |
:10375000010C020202020003011905050505000320 |
:1037600001190606060600030119070707070003EB |
:1037700001190808080800030119090909090003CB |
:1037800001190A0A0A0A000301190B0B0B0B0003AB |
:1037900001190C0C0C0C0000000C6300000000026E |
:1037A00000046A0000000006000627010101010272 |
:1037B00000010D000000010200200D0101010102C5 |
:1037C00000080D010101010200100D0000000102BE |
:1037D00000046A000000010200400D010101010225 |
:1037E00000800D000000010200040D000000020036 |
:1037F0000014170A0806020000141810100A02012B |
:1038000000FF19060604020100FF60000000030229 |
:1038100000016800000003020002680000000302CB |
:1038200000046800000003020008680000000301B3 |
:1038300000FF3B323232030000F73C5A5A5A030071 |
:1038400000F73D323232030000F7414E4E4E030086 |
:1038500000F7424E4E4E040200010D00000004022B |
:1038600000016A000000040200020D0101010402CF |
:1038700000026A010101040100FF10FFFFFF0400C4 |
:1038800000F70E1E1E1E040100FF110F0F0F040192 |
:1038900000FF0F1E1E1E040100FF130000000401A4 |
:1038A00000FF67969696040000F7120F0F0F0400B2 |
:1038B00000F714080808040100FF15404040040008 |
:1038C00000A016000000050100FF2D80808005008B |
:1038D00000F72E32323205020001690000000500B7 |
:1038E00000F72F0F0F0F050000F730E6E6E60501A1 |
:1038F00000FF31808080050000F7325555550502E4 |
:10390000000269000000050000F733464646050046 |
:1039100000F734DCDCDC0500020835040404050093 |
:1039200000F7363C3C3C050500F737000000050178 |
:1039300000FF387D7D7D050100FF397D7D7D05011E |
:1039400000FF3A7D7D7D060200200D010101060188 |
:1039500000FF50FEFEFE060100FF51646464060095 |
:1039600000F75A080808060000F75906060606017F |
:1039700000FF525A5A5A060100FF535A5A5A06017A |
:1039800000FF545A5A5A060100FF554B4B4B060193 |
:1039900000FF56555555060100FF574B4B4B06018E |
:1039A00000FF58000000060100FF5B5A5A5A06014A |
:1039B00000FF5C2A2A2A060100FF5DF5F5F50601E5 |
:1039C00000FF5E8C8C8C060000F75F050505060283 |
:1039D00000206A000000060000F7650000000704F0 |
:1039E00000FF4A5F5F5F070100FF4B1414140702DA |
:1039F00000206800000007020010680101010704B0 |
:103A000000FF4CF3F3F3070100FF4D1414140702F9 |
:103A100000406800000007020080680101010704FF |
:103A200000FF4EAAAAAA070400FF4FAAAAAA0800EC |
:103A300000F71A080808080000F71BE6E6E6080188 |
:103A400000FF1D404040080100FF62000000080226 |
:103A500000406A000000080000F72421212108022C |
:103A600000086A000000080000F7265A5A5A0800A9 |
:103A700000F7252D2D2D080000F766000000080234 |
:103A800000806A000000080200106A0000000901BE |
:103A900000FF1E5A6464090100FF1F78787809014D |
:103AA00000FF200A0A0A090100FF215A6464090183 |
:103AB00000FF22787878090100FF45464646090252 |
:103AC00000800D000000090000F71C1B1B1B0900F3 |
:103AD00000F743202020090100FF281010100900E2 |
:103AE00000F7440000000900001023060606090044 |
:103AF00000F7640000000A0100FF290000000A012D |
:103B000000FF2A0000000A0100FF2B0000000A014C |
:103B100000FF2C0000000A0100FF460000000A011F |
:103B200000FF470000000A0100FF480000000A01F2 |
:103B300000FF490000000B0200400D0000000B01D7 |
:103B400000FF3E5A5A5A0B0100FF3F3737370B012F |
:103B500000FF404646460C050017610000000D02BC |
:103B600000010D0000000D0100FF10FFFFFF0D0020 |
:103B700000A0160000000D0200200D0101010D0142 |
:103B800000FF50FEFEFE0D0200206A0000000D0046 |
:103B900000F7650000000D0100FF620000000D024B |
:103BA00000406A0000000D00000C630000000D05DD |
:103BB00000176100000050504D20202020202020C0 |
:103BC000202020202020005370656B7472756D20BA |
:103BD00020202020202020005370656B7472756DAA |
:103BE0002048695265732020005370656B747275AC |
:103BF0006D204C6F5265732020004A657469202047 |
:103C00002020202020202020202000414354204438 |
:103C1000534C20202020202020202000484F5454A6 |
:103C200020202020202020202020202000130012EF |
:103C3000001300486F5400414354004A6574005318 |
:103C4000704C00537048005370650050504D005741 |
:103C5000504500530020204E0020204A00205000F4 |
:103C60001200130012002000120030003100201951 |
:103C700020202020301149202020456E646520201E |
:103C8000204F4B005750450053005374642E0028BA |
:103C9000312D5331322F57292028643A20202029F2 |
:103CA000001D00200020001D002A002A00506F0087 |
:103CB000506F2029005374642E0028302D32343781 |
:103CC0002D50382928643A506F2029005374642EEF |
:103CD00000282020202D202020292028643A202080 |
:103CE0002029004B6F706965727420756E642041E5 |
:103CF0006B74697669657274005769726B6C69637D |
:103D000068204B6F70696572656E3F00194F18002F |
:103D10006D5300250020536572766F2054657374CF |
:103D200065722020202020202020005665726269C4 |
:103D30006E64756E67207A756D204D4B00636F6EF3 |
:103D40006E656374696F6E20746F204D4B20002088 |
:103D5000636F6E6E6578696F6E2061204D4B200039 |
:103D60000041616E736C756974696E67206F7020B5 |
:103D70004D4B004D4B204C6F774261742057617260 |
:103D80006E756E67004D4B204C6F774261742077E3 |
:103D900061726E696E67004D4B204C6F77426174A3 |
:103DA00020417474656E7400004D4B204C6F774257 |
:103DB0006174207761617273636800416E7A65692E |
:103DC00067652020202020202020201D00446973CA |
:103DD000706C61792020202020202020201D00648C |
:103DE0002761666669636861676520202020201D61 |
:103DF00000746F6E656E202020202020202020205F |
:103E0000201D0057692E3233322020202020202010 |
:103E10002020201D0057692E323332202020202000 |
:103E200020202020201D0057692E323332202020F0 |
:103E3000202020202020201D0057692E32333220E0 |
:103E40002020202020202020201D0042544D2D32F3 |
:103E500032322020202020202020201D0042544DDE |
:103E60002D3232322020202020202020201D004210 |
:103E7000544D2D3232322020202020202020201DA1 |
:103E80000042544D2D32323220202020202020208C |
:103E9000201D00504B542D416B6B7520202020209D |
:103EA0002020201D00504B542D416363752020209D |
:103EB00020202020201D00504B542D41636375208D |
:103EC000202020202020201D00504B542D416363D2 |
:103ED0007520202020202020201D00504B542055EC |
:103EE00070646174652020202020202000504B54F5 |
:103EF000205570646174652020202020202000500F |
:103F00004B54204D69736520E0206A6F7572202044 |
:103F100000504B542055706461746520202020208F |
:103F2000202000446562756720504B5420202020DB |
:103F30002020202000446562756720504B542020CB |
:103F400020202020202000446562756720504B54BB |
:103F5000202020202020202000446562756720500A |
:103F60004B54202020202020202000454550726FF7 |
:103F70006D20526573657420202020200045455037 |
:103F8000726F6D20526573657420202020200045DB |
:103F90004550726F6D2052E9696E697469616C6990 |
:103FA00000454550726F6D20526573657420202066 |
:103FB000202000496E666F73206265696D2053741E |
:103FC0006172742000696E666F2061742073746181 |
:103FD00072747570202000496E666F722E207375A2 |
:103FE00072206C616E63657200496E666F722E207E |
:103FF0006F2E646520737461727400537072616314 |
:10400000686520202020202020202020006C616E68 |
:104010006775616765202020202020202020004C2B |
:10402000616E677565202020202020202020202020 |
:10403000007461616C20202020202020202020207E |
:104040002020004C6963687420617573206E616381 |
:10405000682E2E2E006C69676874206F666620617A |
:10406000667465722020004C756D69E87265206188 |
:104070007520626F75742020004C69636874656EEA |
:104080002075697420766F6F72200048656C6C69CA |
:10409000676B6569742020202020202000627269EF |
:1040A0006768746E65737320202020202020006CC8 |
:1040B000756D696E6F736974E920202020202020BF |
:1040C0000068656C64657268656964202020202042 |
:1040D0002020004B6F6E74726173742020202020AA |
:1040E0002020202000636F6E747261737420202082 |
:1040F00020202020202000636F6E7472617374652D |
:10410000202020202020202000636F6E74726173B5 |
:1041100074202020202020202020004E6F726D610E |
:104120006C2F496E7665727320202020006E6F72AE |
:104130006D616C2F696E7665727465642020004E27 |
:104140006F726D616C202F20696E76657273E92045 |
:10415000004E6F726D616C2F696E76657274656466 |
:104160002020004F7269656E74696572756E6720F4 |
:1041700020202020006F7269656E746174696F6E13 |
:10418000202020202020006F7269656E74617469A0 |
:104190006F6E202020202020006F7269656E746190 |
:1041A00074696520202020202020004D6F64756CEC |
:1041B0002065696E6765626175743F20006D6F648C |
:1041C000756C65206275696C7420696E3F20004DC6 |
:1041D0006F64756C6520696E7374616C6CE9202086 |
:1041E000006D6F64756C65206765EF6E7374616C4C |
:1041F0006C3F0054582F5258204B616E616C202048 |
:10420000202020200054582F5258204368616E6EA1 |
:10421000656C202020200054582F5258204368619C |
:104220006E6E656C202020200054582F5258204379 |
:1042300068616E6E656C20202020004E6574572EDC |
:10424000204772757070652020202020004E657414 |
:10425000572E2047726F7570202020202020004E9E |
:104260006574572E2047726F757020202020202003 |
:10427000004E6574572E2047726F757020202020E5 |
:104280002020004E6574572E204D6F64652020203D |
:1042900020202020004E6574572E204D6F6465202D |
:1042A000202020202020004E6574572E204D6F6462 |
:1042B0006520202020202020004E6574572E204DA0 |
:1042C0006F6465202020202020200054582054694D |
:1042D0006D656F7574202020202020200054582008 |
:1042E00054696D656F7574202020202020200054B3 |
:1042F000582054696D656F7574202020202020207F |
:104300000054582054696D656F757420202020205A |
:104310002020005458204D545520202020202020BB |
:1043200020202020005458204D54552020202020AB |
:10433000202020202020005458204D54552020209B |
:104340002020202020202020005458204D5455208B |
:104350002020202020202020202000496E69746920 |
:10436000616C6973696572656E20202000696E69F1 |
:104370007469616C697A6520202020202020006902 |
:104380006E697469616C6973657220202020202039 |
:1043900000496E697469616C697A6520202020206B |
:1043A0002020004B6F6E6669672E206D6974205067 |
:1043B0004320202000636F6E6669672E2077697442 |
:1043C00068202050432000436F6E6669672E20618D |
:1043D000766563205043202000436F6E6669672E28 |
:1043E000206D6574205043202020004D6F64756C53 |
:1043F0002065696E6765626175743F20006D6F644A |
:10440000756C65206275696C7420696E3F20004D83 |
:104410006F64756C6520696E7374616C6CE9202043 |
:10442000006D6F64756C65206765EF6E7374616C09 |
:104430006C3F004E616D6520202020202020202030 |
:1044400020202020006E616D65202020202020206B |
:10445000202020202020004E6F6D202020202020B2 |
:104460002020202020202020004E61616D2020206F |
:10447000202020202020202020200050696E202095 |
:104480002020202020202020202020200070696E65 |
:10449000202020202020202020202020202000500C |
:1044A000696E202020202020202020202020202075 |
:1044B0000050696E20202020202020202020202055 |
:1044C000202000496E697469616C69736965726561 |
:1044D0006E20202000696E697469616C697A6520BC |
:1044E00020202020202000696E697469616C697346 |
:1044F000657220202020202000496E697469616C5B |
:10450000697A6520202020202020004B6F6E66698C |
:10451000672E206D697420504320202000636F6E49 |
:104520006669672E20776974682020504320004315 |
:104530006F6E6669672E2061766563205043202088 |
:1045400000436F6E6669672E206D657420504320AE |
:10455000202000504B542D416B6B757479702020D6 |
:104560002020202000504B542D41636375747970D6 |
:1045700020202020202000504B542D54797065209D |
:10458000646520626174742E00504B542D62617416 |
:10459000746572696A207479706500504B542041CB |
:1045A0006B6B75204D657373756E672000504B54AF |
:1045B00020416363754D65617375726520200062EB |
:1045C0006174742E206465206D657375726520209A |
:1045D00000504B5420626174742E20206D65746904 |
:1045E0006E670013001200566F6C74004C69496FBF |
:1045F000004C69506F004C69506F004C69496F0066 |
:10460000425420496E6974204572726F72004254A0 |
:1046100020496E6974206F6B0020426C7565746F61 |
:104620006F74682050696E202020202020200020F8 |
:10463000426C7565746F6F7468204E616D652020E3 |
:1046400020202020001300120020172020202020EE |
:1046500016202020202019202020204F4B00202031 |
:104660002020202020202020202020430020001374 |
:104670000012002057692E32333220536574757052 |
:1046800020202020202020200013001200130012E0 |
:104690000020504B542D536574757020202020202D |
:1046A0002020202020200025005769323332005777 |
:1046B00069323332002020206E69636874206DF601 |
:1046C000676C696368202020200020204D697420D9 |
:1046D000486172647761726520312E782020200055 |
:1046E00020204C49504F202021215761726E756E59 |
:1046F0006721212020004D6F746F72205465737400 |
:1047000065722020202020004D6F746F7220546548 |
:10471000737465722020202020004D6F746F72200A |
:104720005465737465722020202020004D6F746FD3 |
:104730007220546573746572202020202000536518 |
:1047400072766F20546573746572202020202000DB |
:10475000536572766F205465737465722020202033 |
:104760002000536572766F20546573746572202043 |
:1047700020202000536572766F2054657374657233 |
:10478000202020202000504320425420203E204B57 |
:104790006F70746572202000504320425420203EE8 |
:1047A000204B6F70746572202000504320425420CB |
:1047B000203E204B6F7074657220200050432042D1 |
:1047C0005420203E204B6F707465722020005043AF |
:1047D00020555342203E204B6F707465722020009C |
:1047E000504320555342203E204B6F707465722019 |
:1047F0002000504320555342203E204B6F7074657B |
:1048000072202000504320555342203E204B6F70B1 |
:10481000746572202000504B5420536574757020CD |
:104820002020202020201D00504B542053657475FB |
:1048300070202020202020201D00504B5420536544 |
:10484000747570202020202020201D00504B542003 |
:104850005365747570202020202020201D00504BAF |
:10486000542056657273696F6E202020202020002E |
:10487000504B542056657273696F6E2020202020A3 |
:104880002000504B542056657273696F6E202020B3 |
:1048900020202000504B542056657273696F6E20A3 |
:1048A000202020202000566F6C7400456E64650047 |
:1048B0001D00200020001D00504320555342203E83 |
:1048C000204B6F7074657200504320425420203E8C |
:1048D000204B6F70746572001300120020504B540F |
:1048E0002D546F6F6C73202020202020202020204A |
:1048F000200014BE88E10FB6F894809360001092F7 |
:1049000060000FBE11241FBECFEFD0E4DEBFCDBFCD |
:1049100012E2A0E0B1E0EAE4F6E201E00BBF02C07F |
:1049200007900D92AE3BB107D9F710E3AEEBB2E2C0 |
:1049300001C01D92AD36B107E1F70E94234D0C94E2 |
:1049400023930C940000E0EBF0E080818368808387 |
:10495000E1EBF0E080818160808308951092B000E7 |
:104960001092B100089582B1806F82B90C988FEFD8 |
:1049700084B988B1806988B987B18C6E87B93C9851 |
:1049800043985E9A8AB1806F8AB9299A0E94BF8142 |
:104990000E947A810E94958181E08093EC2E84E1CF |
:1049A00090E00E94E78B84E190E00E94208A81E001 |
:1049B0000E941286789480E00E948D3F0E94F53913 |
:1049C0008091B728853070F081E08093B72880917E |
:1049D000B72860E043E02CE50E946B728093B72813 |
:1049E0000E94AC3860918A2870E0882777FD809516 |
:1049F000982F0E94EE8F23E333E343E250E40E94BA |
:104A0000DB900E94C08F6093B30081E00E948D3FD5 |
:104A100088EC90E0909372238093712380E890E07B |
:104A20009093B7228093B6220E94C14B84E090E01D |
:104A30000E94AF54AC0180E062E020E00E945C4341 |
:104A400085E090E00E94AF54AC0180E063E020E09C |
:104A50000E945C4380E49FE124EF31E0F90131974B |
:104A6000F1F70197D9F70799299828EE33E044EF39 |
:104A700051E0CA010197F1F721503040D1F784EF9E |
:104A800091E0909372238093712380E890E090935B |
:104A9000B7228093B62280EF0E94FA810E944B3F9A |
:104AA0008091B328813031F48091B628882311F4A5 |
:104AB0000E9457280E944B3F439A8091B028813032 |
:104AC00039F48091B528882319F40E94A72E439ABF |
:104AD0000E944B3F8091B328813051F5809123246F |
:104AE000882331F585E00E94C22F80918B28813088 |
:104AF00009F042C086E090E00E94AF54AC0180E033 |
:104B000060E020E00E945C4387E090E00E94AF54A8 |
:104B1000AC0180E061E020E00E945C4380E29EE422 |
:104B200024EF31E0F9013197F1F70197D9F724C06B |
:104B300086E00E94C22F80918B288130E9F486E0C4 |
:104B400090E00E94AF54AC0180E060E020E00E9461 |
:104B50005C4388E090E00E94AF54AC0180E061E0EB |
:104B600020E00E945C4380E29EE424EF31E0F90102 |
:104B70003197F1F70197D9F70E944B3F0895CF93F2 |
:104B8000DF93EA01DC0120E092E03EEF10C08C915F |
:104B900087FF05C0FE01E90FF11D30839F5FFE0115 |
:104BA000E90FF11D8D918F7780839F5F2F5F26170F |
:104BB00070F3FE01E90FF11D10828FEF8883925090 |
:104BC00099839E5F892F90E0DF91CF9108950F9395 |
:104BD0001F93CF93DF93182F062F8FEF0E94288CFF |
:104BE00082E00E94288C812F0E94288C802F0E94B6 |
:104BF000288C10E0C4EFD1E00E948F8B90E028EE6B |
:104C000033E0FE013197F1F721503040D1F70097A2 |
:104C100021F41F5F1A3081F705C0069719F420E0D0 |
:104C200030E01EC080E062E04AE551E020E00E94F2 |
:104C3000534388EE93E0909372238093712380E432 |
:104C400090E09093B7228093B62280E29EE424EF16 |
:104C500031E0F9013197F1F70197D9F72FEF30E003 |
:104C6000C901DF91CF911F910F91089584E190E0E8 |
:104C70000E94E78B84E190E00E94208A0E944B3FD3 |
:104C800080E060E044E051E020E00E94534380E097 |
:104C900061E04FEE50E020E00E94534380E062E08C |
:104CA0004BED50E020E00E94534380E063E043ED91 |
:104CB00050E020E00E94534381E167E04EEC50E079 |
:104CC00020E00E9453430E943A8A90FF07C00E944E |
:104CD0008F8B882329F00E94578A02C00E94288C5B |
:104CE00080E10E94FA81882371F308958091BE22A9 |
:104CF000823041F487E092E00E94E78B87E092E007 |
:104D00000E94208A0E944B3F5E9880E060E044E46D |
:104D100051E020E00E94534380E061E04FE251E027 |
:104D200020E00E94534380E062E048E251E020E04E |
:104D30000E94534380E063E047E151E020E00E949D |
:104D4000534381E167E042E151E020E00E94534398 |
:104D50000E943A8A90FF07C00E948F8B882329F017 |
:104D60000E94578A02C00E94288C80E10E94FA812A |
:104D7000882371F35E9A08951F93CF93DF93182FC2 |
:104D80000E948F8B8FEF0E94288C82E00E94288CDB |
:104D90008EEF0E94288C812F0E94288C84EF91E056 |
:104DA00024EF31E0F9013197F1F70197D9F710E0DD |
:104DB000C4EFD1E00E948F8B482F50E028EE33E003 |
:104DC000FE013197F1F721503040D1F71F5F4115B7 |
:104DD000510519F41A3071F712C01A3081F04630BB |
:104DE000510519F02FEF30E00CC060E00E949A45A9 |
:104DF0000E948F8B0E948F8B282F30E002C020E012 |
:104E000030E0C901DF91CF911F9108951F93182FB2 |
:104E100080E063E045E651E020E00E945343812FAB |
:104E200060E00E949A451093BF2284EF91E0909336 |
:104E300072238093712380E490E09093B722809353 |
:104E4000B62288E893E124EF31E0F9013197F1F7D8 |
:104E50000197D9F71F910895CF93DF930E94D88CC3 |
:104E60005E9880ED97E024EF31E0F9013197F1F79A |
:104E70000197D9F784E190E00E94E78B80E060E041 |
:104E800043EC52E020E00E94534380E061E042EBBB |
:104E900052E020E00E94534388E790E00E94BC2645 |
:104EA000EC0181E08093BE22209709F587E092E033 |
:104EB0000E94E78B80E061E04FE952E020E00E9431 |
:104EC000534388E790E00E94BC26EC0182E0809387 |
:104ED000BE22209761F40E944B3F80E060E04EE8E4 |
:104EE00052E020E00E9453431092BE22DCC0CF3F2C |
:104EF000D105F9F40E944B3F80E060E049E752E0C1 |
:104F000020E00E94534388EE93E0909372238093B5 |
:104F1000712380E490E09093B7228093B62280E2E0 |
:104F20009EE424EF31E0F9013197F1F70197D9F7C9 |
:104F300003C0209709F4B7C00E944B3F8091BE2266 |
:104F4000813039F480E060E046E652E020E00E94E3 |
:104F500053438091BE22823009F093C01092B6284C |
:104F600080E060E044E552E020E00E94534383E0AB |
:104F700064E00E94E725892BE9F080E061E043E4EA |
:104F800052E020E00E94534388EE93E09093722316 |
:104F90008093712380E490E09093B7228093B622AF |
:104FA00080E29EE424EF31E0F9013197F1F70197B7 |
:104FB000D9F720C080E197E224EF31E0F901319781 |
:104FC000F1F70197D9F780E061E04FE252E020E08D |
:104FD0000E94534380E062E04BE152E020E00E94F7 |
:104FE000534380E29EE424EF31E0F9013197F1F779 |
:104FF0000197D9F78EE464E00E94E725892BE9F058 |
:1050000080E063E048E052E020E00E94534388EEF5 |
:1050100093E0909372238093712380E490E09093C7 |
:10502000B7228093B62280E29EE424EF31E0F901BA |
:105030003197F1F70197D9F720C080E197E224EF8B |
:1050400031E0F9013197F1F70197D9F780E061E09C |
:1050500043EF51E020E00E94534380E062E04EEDD8 |
:1050600051E020E00E94534380E29EE424EF31E0CF |
:10507000F9013197F1F70197D9F784E190E00E94A7 |
:10508000E78B80E061E045E10E94764380E061E0EB |
:1050900045ED51E020E00E94534389E061E04C2F50 |
:1050A00020E00E9475455E9ADF91CF910895FF92AE |
:1050B0000F931F9385E00E94C22F0E942C2780919E |
:1050C000BE22882309F4B1C180E062E041EC51E0E6 |
:1050D00020E00E9453435E9880ED97E024EF31E09A |
:1050E000F9013197F1F70197D9F70E94D88C84E143 |
:1050F00090E00E94E78B81E56EE70E94E725892B0F |
:1051000011F410E008C080E064E04FEB51E020E0D3 |
:105110000E94534311E06091C32880E00E94E7257C |
:10512000892B19F081E00E940627F12EF394812F3C |
:1051300064E04DEB51E020E00E9453436091C328AE |
:105140008BE40E94E725892B19F082E00E94062754 |
:105150000F2D0F5F8F2D64E04BEB51E020E00E949C |
:1051600053436091C32881E00E94E725892B19F001 |
:1051700083E00E940627102F1F5F802F64E049EB19 |
:1051800051E020E00E9453436091C3288CE40E94C8 |
:10519000E725892B19F084E00E940627012F0F5F75 |
:1051A000812F64E047EB51E020E00E9453438DE003 |
:1051B00060E00E94E725892B19F085E00E94062710 |
:1051C000102F1F5F802F64E045EB51E020E00E942C |
:1051D000534382E063E00E94E725892B19F086E0C3 |
:1051E0000E940627012F0F5F812F64E043EB51E0FF |
:1051F00020E00E9453436091AF2885E00E94E7259C |
:10520000892B19F087E00E940627102F1F5F802F3F |
:1052100064E041EB51E020E00E9453436091AF28ED |
:1052200080E50E94E725892B19F088E00E94062777 |
:10523000012F0F5F812F64E04FEA51E020E00E94D0 |
:1052400053436091B22889E00E94E725892B19F029 |
:1052500089E00E940627102F1F5F802F64E04DEA2F |
:1052600051E020E00E9453436091B22884E50E94FF |
:10527000E725892B19F08AE00E940627012F0F5F8E |
:10528000812F64E04BEA51E020E00E94534360919B |
:10529000BC2884E00E94E725892B19F08BE00E944E |
:1052A0000627102F1F5F802F64E049EA51E020E0BD |
:1052B0000E9453436091BC288FE40E94E725892B0C |
:1052C00019F08CE00E940627012F0F5F812F64E008 |
:1052D00047EA51E020E00E94534388E061E00E94E9 |
:1052E000E725892B19F08DE00E940627102F1F5FFC |
:1052F000802F64E045EA51E020E00E9453438BE0B8 |
:1053000061E00E94E725892B19F08EE00E940627B4 |
:10531000012F0F5F812F64E043EA51E020E00E94FB |
:10532000534383E064E00E94E725892B19F08FE066 |
:105330000E940627102F1F5F802F64E041EA51E092 |
:1053400020E00E9453438EE464E00E94E725892B0D |
:1053500019F080E10E940627012F0F5F812F64E082 |
:105360004FE951E020E00E9453436091B12886E06C |
:105370000E94E725892B19F081E10E940627802FE2 |
:1053800064E04DE951E020E00E9453436091B12870 |
:1053900081E50E94E725892B19F082E10E9406270A |
:1053A000802F8F5F64E04BE951E020E00E9453437F |
:1053B0005E9A8091BF22882311F180E062E049E883 |
:1053C00051E020E00E9453438091BF2260E00E94A0 |
:1053D0009A4588EE93E0909372238093712380E442 |
:1053E00090E09093B7228093B62280E29EE424EF6F |
:1053F00031E0F9013197F1F70197D9F709C080E061 |
:1054000062E047E751E020E00E9453430E94D0371A |
:1054100084E190E00E94E78B80E29EE424EF31E09B |
:10542000F9013197F1F70197D9F71F910F91FF908B |
:10543000089520E030E048E853E105C0FA013197D3 |
:10544000F1F72F5F3F4F28173907C4F30895CF9323 |
:10545000DF93EC0140E020E030E0FE01E20FF31FBB |
:10546000E40FF11D80818D3209F44F5FFB01E20FE3 |
:10547000F31FDE01A20FB31FA40FB11D8C91808317 |
:105480002F5F3F4F2E30310541F7DF91CF910895C7 |
:105490001BC00E943A8ABC01807022E080309207D3 |
:1054A000C9F022E08130920720F48050914041F40D |
:1054B000089524E08030920769F08050984051F0C0 |
:1054C00087E293E20E94393B87E293E20E94093B24 |
:1054D0008823F9F208955F926F927F928F929F9244 |
:1054E000AF92BF92CF92DF92EF92FF920F931F93F2 |
:1054F000DF93CF930F92CDB7DEB7182F092F562E1B |
:105500008091C0228F5F8093C022815061E043E68A |
:1055100053E020E00E942343212F302FC9017C015A |
:10552000CC2498E8A92E93E1B92E3E010894611C81 |
:10553000711C84EF882E81E0982E49C0F70180818C |
:105540000E94578A892B09F445C080910001882365 |
:1055500041F484EF91E0F4013197F1F70197D9F725 |
:1055600032C0813011F0833021F4C5010197F1F789 |
:105570002AC0823041F5DD2423C00E94482AC5019B |
:105580000197F1F70F5F1F4F0A3C110531F087E2D9 |
:1055900093E20E94003B882381F787E293E2B30104 |
:1055A0000E94153BF70190818981891761F0892F4D |
:1055B0000E94578A892B71F0D394F3E0DF1619F01B |
:1055C00000E010E0DFCFC3940894E11CF11CC51487 |
:1055D00008F4B4CF0F90CF91DF911F910F91FF90FE |
:1055E000EF90DF90CF90BF90AF909F908F907F9083 |
:1055F0006F905F900895DF92EF92FF920F931F9349 |
:10560000DF93CF93CDB7DEB764970FB6F894DEBFC4 |
:105610000FBECDBFD82EF62EE72E88E893E124EFFB |
:1056200031E0F9013197F1F70197D9F7ED2DF0E06D |
:10563000E231F10508F0CEC0EA5BFF4F8E010F5F4B |
:105640001F4FEE0FFF1F0590F491E02D0994C80144 |
:105650006EE573E00E945D92EEEBF8E2DE011596D6 |
:1056600081918D9388E2E23CF807D1F7198671C0E9 |
:10567000C80169E573E06BC0C80164E573E067C009 |
:10568000C8016FE473E063C0C8016AE473E05FC0FF |
:10569000C80165E473E05BC0C80160E473E057C013 |
:1056A000C8016DE373E053C0C80169E373E04FC004 |
:1056B000C80165E373E04BC0C80160E373E047C015 |
:1056C000C8016BE273E00E945D92F8010190002036 |
:1056D000E9F731978F2D9E2D9C01D9018CE00D901B |
:1056E00001928150E1F7198A34C0C80166E273E083 |
:1056F0002EC0C80161E273E02AC0C8016CE173E00A |
:1057000026C0C80167E173E022C0C80162E173E00E |
:105710000E945D928091E92E6FE778E29E012B5FF7 |
:105720003F4FE82FF0E0AF01460F571F06C0DB01E7 |
:105730008D91BD01D9018D939D0164177507B9F74E |
:10574000EC0FFD1F158205C0C8016DE073E00E94DB |
:105750005D928E010F5F1F4FC8016BE073E00E94E6 |
:1057600052920E94482A87E293E20E945A3BF80133 |
:1057700001900020E9F73197E01BF10BC8016E2F73 |
:105780000E946B2ABEE0DB1641F18DE0D81629F1AC |
:1057900000E010E028E8E22E23E1F22E15C00E947E |
:1057A000482A87E293E266E073E00E94B33B8823D5 |
:1057B000A1F487E293E26EEF72E00E94B33B88238C |
:1057C00049F4C7010197F1F70F5F1F4FA7E0023DB2 |
:1057D0001A0729F720E030E002C021E030E0C901DB |
:1057E00064960FB6F894DEBF0FBECDBFCF91DF91A8 |
:1057F0001F910F91FF90EF90DF9008951F931092EB |
:10580000000110E080E060E070E00E94FB2A892B3C |
:1058100019F41F5F1330B1F782E0809300011F91EC |
:1058200008950F931F93CF93DF93C0E0D0E008E873 |
:1058300013E105C00E94482AC8010197F1F721969B |
:10584000C433D105B9F787E293E262E973E00E94BD |
:10585000B33BDF91CF911F910F910895EF92FF928B |
:105860000F931F93CF93DF938C01C0E0D0E038E813 |
:10587000E32E33E1F32E3FC00E94482A87E293E2F1 |
:1058800067E873E00E94B33B8823E9F487E293E280 |
:105890006FE773E00E94B33B882369F088EE93E0E2 |
:1058A00024EF31E0F9013197F1F70197D9F781E061 |
:1058B0008093000126C087E293E265E673E00E94D0 |
:1058C000B33B882331F00E94112C0E94FE2B82E012 |
:1058D000EFCF98010115110511F021E030E080E0D3 |
:1058E00090E005C0C7010197F1F781E090E08217D1 |
:1058F0009307C4F321960C171D0708F0BDCF8091C4 |
:105900000001DF91CF911F910F91FF90EF900895CB |
:10591000CF92DF92EF92FF920F931F93DF93CF937B |
:105920000F92CDB7DEB788E893E124EF31E0F901BB |
:105930003197F1F70197D9F780E090E00E942E2C83 |
:10594000823089F110E00BE26E010894C11CD11C79 |
:1059500044EFE42E41E0F42E0983C60161E00E9489 |
:105960006B2A88E99AE3F7013197F1F70197D9F7A4 |
:105970001F5F143089F782E060E070E00E94FB2A2C |
:10598000892BC1F00E94FE2B83E060E070E00E9452 |
:10599000FB2A892B79F00E94FE2B80E197E20E947E |
:1059A0002E2C823039F487E293E20E945A3B21E0A8 |
:1059B00030E002C020E030E0C9010F90CF91DF91CC |
:1059C0001F910F91FF90EF90DF90CF900895CF93AC |
:1059D000DF93EC0180E090E00E942E2C813021F1D9 |
:1059E0000E94FE2B86E0BE010E94FB2A892BE1F07B |
:1059F0000E94FE2B84E0BE010E94FB2A892BA1F0AD |
:105A00000E94FE2B81E060E070E00E94FB2A892B5F |
:105A100059F080E69AEE0E942E2C20E030E0813092 |
:105A200029F421E030E002C020E030E0C901DF913C |
:105A3000CF9108950F931F93DF93CF930F92CDB71C |
:105A4000DEB78C01698380E090E00E942E2C8230CA |
:105A500019F420E030E013C0CE01019661E00E940D |
:105A60006B2AC80169810E946B2A80E090E00E9445 |
:105A70002E2C20E030E0813011F421E030E0C9012B |
:105A80000F90CF91DF911F910F9108951F93182FC1 |
:105A900080E090E00E942E2C813019F420E030E06C |
:105AA0002CC080910101181731F1112389F487E08E |
:105AB00060E070E00E94FB2A892BA9F0109201019E |
:105AC0000E94FE2B86E060E070E00E94FB2A0BC083 |
:105AD000113049F488E060E070E00E94FB2A892BD5 |
:105AE00011F0109301010E94FE2B20E030E0809124 |
:105AF0000101181711F421E030E0C9011F91089548 |
:105B00008F929F92AF92BF92CF92DF92EF92FF92CD |
:105B10000F931F93DF93CF93CDB7DEB7CF5FD04006 |
:105B20000FB6F894DEBF0FBECDBFD82EB92E0E949F |
:105B3000FE2B80E00E94462D892B09F47EC085E073 |
:105B400060E070E00E94FB2A892B09F476C000E235 |
:105B50001EE4E8E8EE2EE3E1FE2E0E94482A015002 |
:105B60001040C7010197F1F701151105B1F787E260 |
:105B700093E26BEE72E00E94B33B882371F300E086 |
:105B800010E078E8E72E73E1F72E0E94482AC7015B |
:105B90000197F1F70F5F1F4F8AEE00361807A9F73C |
:105BA000ED2CFB2CDD244E010894811C911C66E138 |
:105BB000A62EB12CAC0EBD1E5CE0C52E36C087E211 |
:105BC00093E2B8010E94153B0F5F1F4F87E293E2FB |
:105BD00068EE72E00E94AE3B882389F3F8011082E0 |
:105BE0008981882311F1C4016CED72E00E947292E8 |
:105BF000892B49F087E293E20E945A3B0E94FE2BD8 |
:105C000021E030E01CC087ED92E0B50144E050E0B7 |
:105C10000E946492892B49F0DC9CB00111246E0D26 |
:105C20007F1DC5010E94272AD39487E293E20E9438 |
:105C3000003B882311F48401C9CF20E030E0C90182 |
:105C4000C150DF4F0FB6F894DEBF0FBECDBFCF916E |
:105C5000DF911F910F91FF90EF90DF90CF90BF9059 |
:105C6000AF909F908F9008956F927F928F929F92A6 |
:105C7000AF92BF92CF92DF92EF92FF920F931F935A |
:105C8000DF93CF930F92CDB7DEB75C01C62E7A01BA |
:105C90001982DD2400E010E03E010894611C711CB3 |
:105CA000F8E88F2EF3E19F2E36C0DC1419F421E0C2 |
:105CB00030E03CC00E94482A87E293E20E94003B09 |
:105CC000882331F580E090E00E942E2C813061F530 |
:105CD00087E293E20E94003B8823D1F489818823E4 |
:105CE00079F487E293E2B3010E94153B89818C1518 |
:105CF00011F019820DC080ED97E0E80EF91E08C082 |
:105D0000B5016D0D711D87E293E20E94153BD3949E |
:105D1000C4010197F1F70F5F1F4F0330110521F008 |
:105D2000E114F10409F0C1CF20E030E0C9010F9087 |
:105D3000CF91DF911F910F91FF90EF90DF90CF9067 |
:105D4000BF90AF909F908F907F906F9008951F931A |
:105D5000CF93DF931092C02243980E944B3F80E084 |
:105D600060E045E953E020E00E94234380ED97E0A6 |
:105D700024EF31E0F9013197F1F70197D9F7E8E81D |
:105D8000F8E29AE08081803219F09093E92E04C005 |
:105D9000915031979923B1F784E190E00E94208AD5 |
:105DA00087E293E263EC72E244E650E00E94F63A46 |
:105DB00088EE93E024EF31E0F9013197F1F7019794 |
:105DC000D9F70E94482A87E293E20E945A3B80E07A |
:105DD00060E070E00E94FB2A83E0809300018EE087 |
:105DE00060E070E00E94FB2A8DE060E070E00E94BD |
:105DF000FB2A80E060E070E00E94FB2A892B09F01A |
:105E00004EC080E490E00E94208A88EE93E024EF68 |
:105E100031E0F9013197F1F70197D9F780E060E0BF |
:105E200070E00E94FB2A8DE060E070E00E94FB2A97 |
:105E30008EE060E070E00E94FB2A80E060E070E0AD |
:105E40000E94FB2A892B09F494C080E060E070E096 |
:105E50000E94FB2A892B19F58CC0CA010197F1F722 |
:105E600021503040D1F780E060E070E00E94FB2AD2 |
:105E70008DE060E070E00E94FB2A8EE060E070E060 |
:105E80000E94FB2A80E060E070E00E94FB2A80E034 |
:105E900060E070E00E94FB2A892B09F462C082E076 |
:105EA000809300018AE060E070E00E94FB2AEC0130 |
:105EB00084E190E00E94208A88EE93E024EF31E0B4 |
:105EC000F9013197F1F70197D9F783E060E070E0CD |
:105ED0000E94FB2A892B19F010E0CD2B09F411E068 |
:105EE00088E060E070E00E94FB2A892B09F411E051 |
:105EF00089E060E070E00E94FB2A892B09F411E040 |
:105F000080E160E070E00E94FB2A892B09F411E037 |
:105F100088EB9BE024EF31E0F9013197F1F701972D |
:105F2000D9F781E160E070E00E94FB2A892B09F437 |
:105F300011E08CE060E070E00E94FB2A83E0809337 |
:105F400000018BE060E070E00E94FB2A81E080931A |
:105F50000101439A112331F40E94C63721E030E059 |
:105F600003C0439A20E030E0C901DF91CF911F9137 |
:105F7000089581E890E00E94208A28EE33E044EF03 |
:105F800051E06BCF429A289A469A459A823051F056 |
:105F9000833018F48823F9F008958530C1F08630F5 |
:105FA00071F517C08091C9008F7E8093C9008091E0 |
:105FB000C900877F8093C9008091C9008F77809343 |
:105FC000C900529853985A985B98429808954598FA |
:105FD0000895469808958091C9008F7E8093C900E6 |
:105FE0008091C900877F8093C9008091C9008F7715 |
:105FF0008093C900529853985A985B9828980895AE |
:106000000E944B3F87E490E00E94AF54AC0180E0D7 |
:1060100060E022E00E945C4385E490E00E94AF547F |
:10602000AC0180E061E022E00E945C4384E490E007 |
:106030000E94AF54AC0180E063E020E00E945C432A |
:1060400080E064E04FEB53E020E00E94234380E0D7 |
:1060500065E049EA53E020E00E94234388E490E0B1 |
:106060000E94AF54AC0180E066E020E00E945C43F7 |
:106070008AE290E00E94AF54AC018CE067E020E03F |
:106080000E945C4380E00E94C22F5E9880E20E94E2 |
:10609000FA818823D9F380EF0E94FA815E9A809179 |
:1060A0002324813011F486E001C085E00E94C22FD4 |
:1060B00008950E944B3F8DE390E00E94AF54AC01E5 |
:1060C00080E060E022E00E945C4385E490E00E9472 |
:1060D000AF54AC0180E061E022E00E945C4384E4C4 |
:1060E00090E00E94AF54AC0180E063E020E00E94A9 |
:1060F0005C4382E490E00E94AF54AC0180E064E035 |
:1061000020E00E945C4386E490E00E94AF54AC0122 |
:1061100080E065E020E00E945C438AE290E00E941B |
:10612000AF54AC018CE067E020E00E945C4380E06B |
:106130000E94C22F80E20E94FA818823D9F380EF67 |
:106140000E94FA8180912324813011F486E001C0FD |
:1061500085E00E94C22F08950E944B3F8DE390E09E |
:106160000E94AF54AC0180E060E022E00E945C43FA |
:1061700083E490E00E94AF54AC0180E061E020E055 |
:106180000E945C4384E490E00E94AF54AC0180E044 |
:1061900063E020E00E945C4380E490E00E94AF5402 |
:1061A000AC0180E064E020E00E945C4386E490E083 |
:1061B0000E94AF54AC0180E065E020E00E945C43A7 |
:1061C0008AE290E00E94AF54AC018CE067E020E0EE |
:1061D0000E945C4382E00E94C22F80E20E94FA810A |
:1061E0008823D9F380EF0E94FA81809123248130A3 |
:1061F00011F486E001C085E00E94C22F08950E943C |
:106200004B3F80E060E043E454E022E00E942343FF |
:1062100080E061E04DE254E022E00E94234380E010 |
:1062200063E047E154E020E00E94234380E064E023 |
:1062300041E054E020E00E94234380E065E04BEE23 |
:1062400053E020E00E94234380E066E045ED53E008 |
:1062500020E00E9423438AE290E00E94AF54AC0108 |
:106260008CE067E020E00E945C43439882E00E945B |
:10627000C22F80E20E94FA818823D9F380EF0E9426 |
:10628000FA8180912324813011F486E001C085E0F9 |
:106290000E94C22F439A08950E944B3F8DE390E0E5 |
:1062A0000E94AF54AC0180E060E022E00E945C43B9 |
:1062B00081E490E00E94AF54AC0180E061E022E014 |
:1062C0000E945C438FE390E00E94AF54AC0180E0F9 |
:1062D00063E020E00E945C4382E490E00E94AF54BF |
:1062E000AC0180E064E020E00E945C4386E490E042 |
:1062F0000E94AF54AC0180E065E020E00E945C4366 |
:106300008AE290E00E94AF54AC018CE067E020E0AC |
:106310000E945C43439880E00E94C22F80E20E946A |
:10632000FA818823D9F380EF0E94FA818091232497 |
:10633000813011F486E001C085E00E94C22F439AAB |
:1063400008950E944B3F8091B028813009F053C0DE |
:106350008DE390E00E94AF54AC0180E060E022E069 |
:106360000E945C438EE390E00E94AF54AC0180E059 |
:1063700061E020E00E945C438FE390E00E94AF5414 |
:10638000AC0180E063E020E00E945C4380E490E0A8 |
:106390000E94AF54AC0180E064E020E00E945C43C6 |
:1063A00086E490E00E94AF54AC0180E065E020E01C |
:1063B0000E945C438AE290E00E94AF54AC018CE002 |
:1063C00067E020E00E945C43439882E00E94C22F75 |
:1063D00080E20E94FA818823D9F380EF0E94FA813B |
:1063E00080912324813011F486E001C085E00E9471 |
:1063F000C22F439A08958BE390E00E94AF54AC0102 |
:1064000080E061E020E00E945C438CE390E00E9429 |
:10641000AF54AC0180E061E020E00E945C4386E381 |
:1064200090E00E94AF54AC0180E062E020E00E9466 |
:106430005C4387E390E00E94AF54AC0180E063E0EE |
:1064400020E00E945C4388E390E00E94AF54AC01DE |
:1064500080E064E020E00E945C4389E190E00E94DB |
:10646000AF54AC018CE067E020E00E945C4380E226 |
:106470000E94FA818823D9F380EF0E94FA8108955F |
:106480004F925F926F927F928F929F92AF92BF9244 |
:10649000CF92DF92EF92FF920F931F93DF93CF93F0 |
:1064A0000F92CDB7DEB7E0914723F0E0E25DFC4DFF |
:1064B000808189830E944B3F80E063E044E954E09F |
:1064C00020E00E94234380E064E045E854E020E0BF |
:1064D0000E94234381E48093452380ED97E024EFDD |
:1064E00031E0F9013197F1F70197D9F71092D223F2 |
:1064F00084E190E09093EE2E8093ED2E00E0F1E6A3 |
:106500004F2E552453943E010894611C711CE1E008 |
:106510008E2E912C74E1C72ED12C64EFA62E61E053 |
:10652000B62E11E150E2E52E52E0F52EAFC02DB7A8 |
:106530003EB7275030400FB6F8943EBF0FBE2DBF78 |
:10654000EDB7FEB73196ADB7BEB711964C9211823A |
:10655000528274826382968285820E94E58C2DB776 |
:106560003EB7295F3F4F0FB6F8943EBF0FBE2DBF19 |
:106570008091D223882331F48091ED2E9091EE2EDC |
:10658000892BB1F78091ED2E9091EE2E892B09F495 |
:1065900062C00E944A8C4981E091D423F091D523B6 |
:1065A0008081481709F049C08EE064E050E022E0A5 |
:1065B00030E000E00E940948E091D423F091D52317 |
:1065C0008191819FD00111248091472390E0019710 |
:1065D0009C012E9DC0012F9D900D3E9D900D11247C |
:1065E000A80FB91FAA5CBB4D80E101900D928150AC |
:1065F000E1F7E091D423F091D523208130E0809120 |
:10660000472390E00197F90144E0EE0FFF1F4A9500 |
:10661000E1F7E20FF31FDC01AE9DC001AF9D900DCD |
:10662000BE9D900D1124E80FF91FEA5CFB4D108A06 |
:1066300089818F5F898300E007C088EE93E0F501D0 |
:106640003197F1F70197D9F7D092EE2EC092ED2E47 |
:106650001092D2231BC00F5FD092EE2EC092ED2E6F |
:106660000233A0F080E062E046E754E020E00E94C0 |
:10667000234384E690E09093EE2E8093ED2E80915C |
:10668000ED2E9091EE2E892BD1F704C089818032B6 |
:1066900008F44DCFE0914723F0E0E25DFC4D8981A5 |
:1066A00080830F90CF91DF911F910F91FF90EF901A |
:1066B000DF90CF90BF90AF909F908F907F906F9022 |
:1066C0005F904F9008952F923F924F925F926F92FA |
:1066D0007F928F929F92AF92BF92CF92DF92EF9272 |
:1066E000FF920F931F93DF93CF930F92CDB7DEB737 |
:1066F0000E944B3F88EC90E09093EE2E8093ED2E1D |
:10670000E0914723F0E0E25DFC4D8081803210F49F |
:106710000E9440328091ED2E9091EE2E892B09F44B |
:10672000B6C284E4809345231092D22388EC90E093 |
:106730009093EE2E8093ED2E8AE089832DB73EB79D |
:10674000275030400FB6F8943EBF0FBE2DBFEDB7B7 |
:10675000FEB7319684E6ADB7BEB711968C93118221 |
:1067600081E08283CE0101969483838381E090E06F |
:10677000968385830E94E58C8CE291E09093F02EC5 |
:106780008093EF2EFF2400E010E02DB73EB7295F85 |
:106790003F4F0FB6F8943EBF0FBE2DBF40E2C42E50 |
:1067A00042E0D42E8091472390E001978C9DA00178 |
:1067B0008D9D500D9C9D500D1124400F511F4A5C22 |
:1067C0005B4D80E06F2D20E00E94F242F3940F5E5B |
:1067D0001F4F37E0F31631F7FF2438EC832E912C4E |
:1067E00024E6E22E1E010894211C311C91E0492E62 |
:1067F000512C80E2682E82E0782E8091D22388236B |
:1068000009F48CC00E944A8CA090D423B090D52368 |
:1068100082E090E00E94AF54AC0180E067E020E0AD |
:106820000E945C434F2D4F5F85E067E00E940A465F |
:10683000809147238130B1F0823001F583E067E039 |
:1068400043E754E020E00E94234383E167E040E710 |
:1068500054E020E00E94234387E0F89E6001112469 |
:1068600010E011C083E067E04DE654E020E00E94B4 |
:10687000234383E167E04AE654E0EBCF83E167E03E |
:1068800048E654E0E6CFF601E10FF11D3196EE0F38 |
:10689000FF1FEA0DFB1D4081518198ED413F5907D3 |
:1068A00014F426E015C0ACEF49315A0774F0BFEF7D |
:1068B0004D395B0764F023E0473E520714F423E0B0 |
:1068C00007C037E24F30530714F025E001C024E041 |
:1068D00085E1821B612F30E000E00E949E4784E04A |
:1068E000F81691F4143080F080E064E045E10E94F5 |
:1068F000764380E065E045E10E94764380E066E013 |
:1069000045E10E94764317E01F5F173008F4BBCFC4 |
:106910009092EE2E8092ED2E1092D2238091EF2E47 |
:106920009091F02E892B31F59AE09983ADB7BEB7DF |
:1069300017970FB6F894BEBF0FBEADBFEDB7FEB749 |
:1069400031961196EC921182B1E0B28334822382A7 |
:10695000568245820E94E58C2CE231E03093F02E85 |
:106960002093EF2E8DB79EB707960FB6F8949EBF73 |
:106970000FBE8DBF80E80E94FA81882309F446C0CB |
:10698000FA9494E09F1510F414E0F12E0E944B3F0E |
:10699000A7E0FA9E6001112400E0C601800F911D5E |
:1069A000AC01B4E0440F551FBA95E1F7480F591FE9 |
:1069B0008091472390E001979C01269DC001279D6F |
:1069C000900D369D900D1124480F591F4A5C5B4D68 |
:1069D00080E0602F20E00E94F24234E0F31691F450 |
:1069E000043080F080E064E045E10E94764380E07E |
:1069F00065E045E10E94764380E066E045E10E9463 |
:106A0000764307E00F5F073040F24AC080E40E94FF |
:106A1000FA81882309F444C0F39484E08F1508F4C4 |
:106A2000FF240E944B3F97E0F99E6001112400E093 |
:106A3000C601800F911DAC01A4E0440F551FAA951B |
:106A4000E1F7480F591F8091472390E00197DC013F |
:106A5000A69DC001A79D900DB69D900D1124480FD5 |
:106A6000591F4A5C5B4D80E0602F20E00E94F2429B |
:106A7000B4E0FB1691F4043080F080E064E045E17E |
:106A80000E94764380E065E045E10E94764380E025 |
:106A900066E045E10E94764307E00F5F073040F271 |
:106AA00010914623113009F09BC080E10E94FA81C9 |
:106AB000882309F495C019822DB73EB7275030407E |
:106AC0000FB6F8943EBF0FBE2DBFEDB7FEB731969F |
:106AD000ADB7BEB71196EC92118212833482238235 |
:106AE000568245820E94E58C80ED97E02DB73EB737 |
:106AF000295F3F4F0FB6F8943EBF0FBE2DBFE4EFA6 |
:106B0000F1E03197F1F70197D1F780914723813078 |
:106B100019F40E94628E02C00E94A58C9092EE2E03 |
:106B20008092ED2E80ED97E0E4EFF1E03197F1F700 |
:106B30000197D1F7E0914723F0E0E25DFC4D8081C1 |
:106B4000803210F40E94403284E4809345231092F6 |
:106B5000D2239092EE2E8092ED2E3AE039838DB7BB |
:106B60009EB707970FB6F8949EBF0FBE8DBFEDB7C7 |
:106B7000FEB73196ADB7BEB71196EC921182B1E077 |
:106B8000B28334822382568245820E94E58C2DB7DF |
:106B90003EB7295F3F4F0FB6F8943EBF0FBE2DBFE3 |
:106BA0000E944B3FFF2400E010E08091472390E0DB |
:106BB0000197869DA001879D500D969D500D112433 |
:106BC000400F511F4A5C5B4D80E06F2D20E00E941A |
:106BD000F242F3940F5E1F4F37E0F31631F7FF24B4 |
:106BE00080E20E94FA81882339F48091ED2E909101 |
:106BF000EE2E892B09F001CE80EF0E94FA811982D6 |
:106C00008DB79EB707970FB6F8949EBF0FBE8DBF86 |
:106C1000EDB7FEB7319684E6ADB7BEB711968C934B |
:106C2000118281E08283CE0101969483838381E087 |
:106C300090E0968385830E94E58C10924523109204 |
:106C4000D2238091ED2E9091EE2E2DB73EB7295F85 |
:106C50003F4F0FB6F8943EBF0FBE2DBF892BA9F44E |
:106C60000E944B3F80E062E049E554E020E00E9452 |
:106C7000234384E690E09093EE2E8093ED2E809156 |
:106C8000ED2E9091EE2E892BD1F70E94A58C0F90BE |
:106C9000CF91DF911F910F91FF90EF90DF90CF90F8 |
:106CA000BF90AF909F908F907F906F905F904F902C |
:106CB0003F902F9008953F924F925F926F927F92F4 |
:106CC0008F929F92AF92BF92CF92DF92EF92FF92FC |
:106CD0000F931F93DF93CF930F92CDB7DEB788E466 |
:106CE000809345230E944B3F82E090E00E94AF5486 |
:106CF000AC0180E067E020E00E945C438091472384 |
:106D0000813061F480E060E049E455E022E00E94D7 |
:106D1000234383E167E046E455E01BC080914623AE |
:106D2000823061F480E060E040E355E022E00E94C0 |
:106D3000234383E167E04DE255E00BC080E060E073 |
:106D400047E155E022E00E94234383E167E044E10C |
:106D500055E020E00E9423431092D22384EF91E07B |
:106D60009093EE2E8093ED2E8CEF898310E058E601 |
:106D7000452E332433944E010894811C911C41E02C |
:106D8000A42EB12C55245A9434EFC32E31E0D32EC7 |
:106D900024EFE22E21E0F22E9EEF692E0DEF8CEF14 |
:106DA000782E2DB73EB7275030400FB6F8943EBF2F |
:106DB0000FBE2DBFEDB7FEB73196ADB7BEB711967A |
:106DC0004C921182328294828382B682A5820E9482 |
:106DD000E58C598284EC99E02DB73EB7295F3F4F8F |
:106DE0000FB6F8943EBF0FBE2DBFF6013197F1F7F5 |
:106DF0000197D9F78091D2238823E9F10E944A8C28 |
:106E000080914623882341F510915F2F11561093EE |
:106E10004623113081F460E04EEF54E022E00E94FE |
:106E2000234383E167E04BEF54E020E00E942343DB |
:106E30001093472311C080E060E045EE54E022E06B |
:106E40000E94234383E167E042EE54E020E00E9489 |
:106E5000234382E0809347231092B12F80E062E0C9 |
:106E600041E65FE20E94C3421092D223F092EE2EDE |
:106E7000E092ED2E11E080E80E94FA81882331F43F |
:106E800080E862E00E945382882311F0698239C051 |
:106E900080E40E94FA81882331F480E462E00E9459 |
:106EA0005382882311F009832CC0809146238130BE |
:106EB00041F580E10E94FA81882319F180914723EE |
:106EC000813071F40E94628E80E060E04CEC54E00E |
:106ED00022E00E94234383E167E049EC54E00DC0C7 |
:106EE0000E94A58C80E060E043EB54E022E00E9429 |
:106EF000234383E167E040EB54E020E00E9423431A |
:106F0000798280E20E94FA81882339F48091ED2E03 |
:106F10009091EE2E892B09F044CF80EF0E94FA81E8 |
:106F2000109245231092D2238091ED2E9091EE2E57 |
:106F3000892BB9F4112311F00E944B3F80E062E0ED |
:106F40004CE954E020E00E94234384E690E09093D3 |
:106F5000EE2E8093ED2E8091ED2E9091EE2E892BCA |
:106F6000D1F70E94A58C0F90CF91DF911F910F91C7 |
:106F7000FF90EF90DF90CF90BF90AF909F908F9059 |
:106F80007F906F905F904F903F90089581E0809345 |
:106F9000B5286091B52882E190E00E94F8920895AA |
:106FA00081E08093B6286091B62881E190E00E944C |
:106FB000F8920895EF92FF920F931F93CF93DF9370 |
:106FC0001092C9281092CA281092CB281092CC286F |
:106FD0001092C5281092C6281092C7281092C8286F |
:106FE0001092CD281092CE281092CF281092D0283F |
:106FF00089E691E09093D3288093D22880E090E0B6 |
:10700000FC01E457F74D128201968F319105C1F7CB |
:10701000C0E0D0E084E695E060E00E94FB428E0193 |
:1070200095E0000F111F9A95E1F70C1B1D0BC8018D |
:1070300080529F4F6C2F0E94F892C80183519F4F3E |
:1070400060E00E94F892B8016B517F4F89EC98E2A2 |
:1070500044E050E00E94EE92B8016F517F4F85EC02 |
:1070600098E244E050E00E94EE92B80167517F4FF1 |
:107070008DEC98E244E050E00E94EE92B80162513B |
:107080007F4F82ED98E242E050E00E94EE92C8010C |
:1070900080519F4F60E00E94F892C8018F509F4F2F |
:1070A00060E00E94F892C8018C509F4F6FEF0E94E1 |
:1070B000F892C8018E509F4F60E00E94F892C8017C |
:1070C0008A509F4F60E00E94F8922196C733D10505 |
:1070D00009F0A0CFC0E0D0E083E2E82EF12C82E6F8 |
:1070E00095E060E00E94FB42CE9D8001CF9D100D97 |
:1070F000DE9D100D1124C8018F5C9F4F6C2F0E94E4 |
:10710000F892C8018E5C9F4F60E00E94F892C8011F |
:107110008D5A9F4F60E00E94F892C8018E5A9F4F8F |
:1071200060E00E94F8920D5C1F4F8EE898E2B80173 |
:107130004FE150E00E94EE922196C530D10579F6DC |
:107140008FE595E060E00E94FB42DF91CF911F91B7 |
:107150000F91FF90EF90089580E090E060913524CA |
:107160000E94F8926091E42881E090E00E94F892F9 |
:107170006091B72882E090E00E94F8926091C32865 |
:1071800083E090E00E94F8926091B12884E090E062 |
:107190000E94F8926091BC2885E090E00E94F892ED |
:1071A0006091AF2886E090E00E94F8926091B2284A |
:1071B00087E090E00E94F89260917A2888E090E061 |
:1071C0000E94F89260917E2889E090E00E94F892F7 |
:1071D0006091E3288AE090E00E94F89260918A280A |
:1071E0008BE090E00E94F892609134248CE090E073 |
:1071F0000E94F892609123248DE090E00E94F89222 |
:107200006091BD288EE090E00E94F8926091B328D2 |
:107210008FE090E00E94F8926091B02880E190E0C9 |
:107220000E94F8926091B62881E190E00E94F89265 |
:107230006091B52882E190E00E94F8926091B428B4 |
:1072400083E190E00E94F89260918B2884E190E0C5 |
:107250000E94F89260917C2870917D2885E190E0F1 |
:107260000E940E9360917B2887E190E00E94F89243 |
:107270008EEB98E261E270E044E050E00E94EE9212 |
:107280008FE798E266E270E04AE050E00E94EE92FA |
:1072900008950E944B3F80E060E040EB55E022E023 |
:1072A0000E94234380E061E045EA55E020E00E942F |
:1072B000234380E062E04FE855E020E00E94234352 |
:1072C00089E8809335241092E4288EEF8093B728C4 |
:1072D00091E09093C32882E48093B1289093BC28D6 |
:1072E00080E18093AF2880E48093B22810927A28BE |
:1072F00010927E2884E18093E32884E680938A2894 |
:1073000010923424109223241092BD289093B32815 |
:107310009093B0281092B6281092B5281092B428F5 |
:1073200090938B2890937B2880E797E190937D281A |
:1073300080937C288EEB98E26AE875E00E945D926B |
:107340008EEB98E261E270E044E050E00E94EE9241 |
:107350008FE798E26FE775E00E945D928FE798E211 |
:1073600066E270E04AE050E00E94EE926091B6283A |
:1073700081E190E00E94F8926091B52882E190E06E |
:107380000E94F89280E290E068E50E94F8920E94E4 |
:10739000AC380E94DA3780E066E049E655E020E04C |
:1073A0000E94234382E167E046E655E020E00E9428 |
:1073B000234388EC90E0909372238093712380E8BC |
:1073C00090E09093B7228093B62280E10E940482DD |
:1073D0008823D9F388E893E124EF31E0F90131976C |
:1073E000F1F70197D9F72998089580E290E00E947B |
:1073F000DA92883509F0B5C080E090E00E94DA9218 |
:107400008093352481E090E00E94DA928093E42812 |
:1074100082E090E00E94DA928093B72883E090E0C7 |
:107420000E94DA928093C32884E090E00E94DA926E |
:107430008093B12885E090E00E94DA928093BC2886 |
:1074400086E090E00E94DA928093AF2887E090E097 |
:107450000E94DA928093B22888E090E00E94DA924B |
:1074600080937A2889E090E00E94DA9280937E28C7 |
:107470008AE090E00E94DA928093E3288BE090E02B |
:107480000E94DA9280938A288CE090E00E94DA923F |
:10749000809334248DE090E00E94DA92809323243C |
:1074A0008EE090E00E94DA928093BD288FE090E019 |
:1074B0000E94DA928093B32880E190E00E94DA92F1 |
:1074C0008093B02881E190E00E94DA928093B62800 |
:1074D00082E190E00E94DA928093B52883E190E007 |
:1074E0000E94DA928093B42884E190E00E94DA92BC |
:1074F00080938B2885E190E00E94E89290937D280C |
:1075000080937C2887E190E00E94DA9280937B2828 |
:107510008EEB98E261E270E044E050E00E94CA9293 |
:107520008FE798E266E270E04AE050E00E94CA927B |
:1075300088E190E00E94E292609376287093772829 |
:1075400080937828909379288CE190E00E94E292D1 |
:107550006093B8287093B9288093BA289093BB2879 |
:1075600008950E944939089588E190E00E94E292CE |
:107570006093762870937728809378289093792861 |
:107580008CE190E00E94E2926093B8287093B92851 |
:107590008093BA289093BB280895AF92BF92CF9260 |
:1075A000DF92EF92FF920F931F937B018C015901A1 |
:1075B0006A0188E190E0B801A7010E9406938CE17E |
:1075C00090E0B601A5010E9406931F910F91FF90D4 |
:1075D000EF90DF90CF90BF90AF900895FC01849121 |
:1075E00001C0849131968823E1F70895FC01558309 |
:1075F00044837783668313821282118210820895F6 |
:10760000FC0120E080819181892B09F421E0822F07 |
:107610000895FC0140E02481358180819181281703 |
:10762000390709F441E0842F0895CF93DF93EC01EB |
:10763000DB0188819981892B11F480E017C0EE81EC |
:10764000FF818A819B81E80FF91F80818C938A8159 |
:107650009B816C817D8101960E94EE919B838A8340 |
:107660008881998101979983888381E0DF91CF9107 |
:107670000895CF93DF93EC01462F6C817D812881A3 |
:1076800039816217730711F480E011C08A819B81F0 |
:10769000820F931F0E94EE91EE81FF81E80FF91F88 |
:1076A00040838881998101969983888381E0DF9165 |
:1076B000CF910895FC01118210821382128281E021 |
:1076C0000895CF92DF92EF92FF920F931F93CF9383 |
:1076D000DF93EC016B017A0100E010E019C0C801F2 |
:1076E0008E0D9F1D8217930778F58A819B818E0DE1 |
:1076F0009F1D6C817D81800F911F0E94EE91EE8114 |
:10770000FF81E80FF91F80818417F1F40F5F1F4F8D |
:10771000F601E00FF11F4491288139814423F9F6E5 |
:107720008A819B818E0D9F1D6C817D81800F911FB1 |
:107730000E94EE919B838A832E193F09201B310BF7 |
:107740003983288381E001C080E0DF91CF911F91D0 |
:107750000F91FF90EF90DF90CF90089540E050E0C0 |
:107760000E94613B0895EF92FF920F931F93CF9376 |
:10777000DF938C017B01C0E0D0E00AC0C801B701F3 |
:10778000AE010E94613B882311F081E008C0219680 |
:10779000F80180819181C817D90780F380E0DF91DB |
:1077A000CF911F910F91FF90EF900895FC01808180 |
:1077B0008093E12981818093E22982818093E3296A |
:1077C00093819093E4296091E1297091E2290895D1 |
:1077D00090913123980F9093312380913223890F18 |
:1077E000809332230895CF92DF92EF92FF920F930E |
:1077F0001F93CF93DF9380E80E94FA81882329F4B6 |
:1078000080913623823009F041C080913623813047 |
:10781000D1F10E944B3F80E060E047E459E020E076 |
:107820000E94234380E061E04BE359E020E00E94A6 |
:10783000234380E062E04FE259E020E00E942343CE |
:1078400080E063E043E259E020E00E94234380E0CF |
:1078500064E047E159E020E00E94234380E065E0D6 |
:107860004BE059E020E00E94234380E066E04FEFC8 |
:1078700058E020E00E94234380E067E043EF58E0B7 |
:1078800020E00E94234381E08093362380913323BC |
:10789000813009F05EC080913423803309F059C0F3 |
:1078A00080913623882309F054C0C090E928CEEE99 |
:1078B000D8E2EE244BC080E1E81609F44AC087E024 |
:1078C0008E1510F010E001C01BE04881812F6E2D55 |
:1078D00050E023E030E000E00E9409484B81812F16 |
:1078E0008C5F6E2D50E022E030E00E9409488981D3 |
:1078F000282F30E0C90183709070039731F4812FF5 |
:10790000895F6E2D41EF58E01CC020FF06C0812F1B |
:10791000895F6E2D4FEE58E014C09A81953030F09B |
:10792000812F895F6E2D4DEE58E00BC0812F895F4E |
:10793000923020F06E2D4BEE58E003C06E2D49EED4 |
:1079400058E020E00E942343E3942C96EC1408F4C2 |
:10795000B2CF80913623813009F06FC180913323FB |
:10796000813009F084C080913423863009F07FC0D3 |
:107970008091EF28823049F0823060F0853050F4F9 |
:107980008BE060E046EE58E009C08BE060E043EE3B |
:1079900058E004C08BE060E040EE58E020E00E9438 |
:1079A00023438091F0288370833029F481E160E0E3 |
:1079B0004EED58E004C081E160E04CED58E020E07D |
:1079C0000E9423438091F02880FF05C08EE060E094 |
:1079D00049ED58E004C08EE060E046ED58E020E05C |
:1079E0000E9423438BE061E0409114290E940A46E3 |
:1079F0008DEF98E20E94D63B9B01AC018BE062E0E8 |
:107A0000A90125E030E000E00E94094881E162E040 |
:107A100043ED58E020E00E942343E09012298FEFCD |
:107A2000E89E7001112480911129E80EF11CC70114 |
:107A300064E670E00E94EE91AB018BE063E022E02F |
:107A400030E00E9409488DE063E041ED58E020E01D |
:107A50000E942343C70164E670E00E94EE91AC01EE |
:107A60008EE063E022E030E001E00E94094880916E |
:107A70003323813019F5809134238231F9F489EF71 |
:107A800098E20E94D63B20E13EE040E050E00E94B8 |
:107A9000C39120EA36E841E050E00E9415928BE065 |
:107AA00064E0A90123E030E000E00E9409488FE093 |
:107AB00064E04CEC58E020E00E94234380913323A3 |
:107AC000813009F0BAC080913423823009F0B5C00A |
:107AD00089EE98E20E94D63B6B017C0120E836E9F2 |
:107AE00048E950E00E9415928AE065E0A90122E091 |
:107AF00030E000E00E9409488CE065E04AEC58E084 |
:107B000020E00E942343C701B60128EE33E040E0A5 |
:107B100050E00E941592CA01B90120E137E240E02D |
:107B200050E00E9415929B01AC018DE065E0A90137 |
:107B300024E030E001E00E940948C701B6012AE0D4 |
:107B400030E040E050E00E941592CA01B90124E6FD |
:107B500030E040E050E00E9415929B01AC0181E1D1 |
:107B600065E0A90122E030E00E9409488DEE98E22C |
:107B70000E94D63B6B017C0120E836E948E950E0E1 |
:107B80000E9415928AE066E0A90122E030E000E060 |
:107B90000E9409488CE066E048EC58E020E00E9432 |
:107BA0002343C701B60128EE33E040E050E00E94D5 |
:107BB0001592CA01B90120E137E240E050E00E948D |
:107BC00015929B01AC018DE066E0A90124E030E054 |
:107BD00001E00E940948C701B6012AE030E040E018 |
:107BE00050E00E941592CA01B90124E630E040E05D |
:107BF00050E00E9415929B01AC0181E166E0A90171 |
:107C000022E030E00E94094885EF98E20E94D63BCE |
:107C100028EE33E040E050E00E9415928BE067E0F0 |
:107C2000A90124E030E000E00E94094880E167E01B |
:107C300046EC58E020E00E942343DF91CF911F9152 |
:107C40000F91FF90EF90DF90CF900895AF92BF9289 |
:107C5000CF92DF92EF92FF920F931F93DF93CF9318 |
:107C60000F92CDB7DEB70E944B3F82E08093362360 |
:107C7000809146238230A1F480E063E043E559E03F |
:107C800020E00E94234384E690E09093EE2E8093C0 |
:107C9000ED2E8091ED2E9091EE2E892BD1F7E1C043 |
:107CA00080914723813011F00E94A58C0E94DF8DC6 |
:107CB00088EC90E09093EE2E8093ED2E198210E0E8 |
:107CC000FF24EE245E010894A11CB11C88ECC82E90 |
:107CD000D12CC5010E94B98B882309F4ACC0D09285 |
:107CE000EE2EC092ED2E143009F45DC0153050F424 |
:107CF000113031F1113098F0123049F1133009F0A0 |
:107D00009AC038C0163009F46BC0163008F45BC056 |
:107D1000173009F480C0183009F08DC080C0898107 |
:107D2000853B09F088C010923523109234231092BD |
:107D3000332310923123109232230F2D11E07FC094 |
:107D40008981823609F079C00F2D12E078C029812F |
:107D5000213009F072C0909131239F5F90933123BD |
:107D600080913223890F80933223209333230F2D68 |
:107D700013E065C08981803339F0863029F0823183 |
:107D800019F0823009F059C0809334239091312347 |
:107D9000980F9093312380913223890F809332235F |
:107DA0000F2D14E04CC009810B3F08F046C09091A4 |
:107DB0003123900F9093312380913223890F809348 |
:107DC000322315E03CC089818823B9F59091312395 |
:107DD00080913223890F809332230F2D16E02FC01C |
:107DE0000F2D0150209135238981E22FF0E0EB51D6 |
:107DF000F74D808390913123980F90933123809198 |
:107E00003223890F809332232F5F20933523002361 |
:107E1000B1F417E014C0E9800F2D18E010C0809174 |
:107E20003123E81651F4998180913223981729F46F |
:107E30000E94F33B02C00F2D02C00F2D10E080E224 |
:107E40000E94FA81882341F48091ED2E9091EE2ECC |
:107E5000892B11F0F02E3DCF80EF0E94FA810E9415 |
:107E6000A58C0F90CF91DF911F910F91FF90EF9014 |
:107E7000DF90CF90BF90AF9008952C988EBD0DB439 |
:107E800007FEFDCF2C9A08952C988EBD0DB407FEE9 |
:107E9000FDCF2C9A08951F93CF93DF9380E090E05D |
:107EA000FC01EA51F64D1082019624E080309207E1 |
:107EB000B9F710EB2B98812F0E943D3F80E10E9483 |
:107EC0003D3F80917A280E943D3F2B9AC0E0D0E050 |
:107ED00080E00E943D3F2196C038D105C9F71F5F61 |
:107EE000183B41F71092692E10926A2EDF91CF91C4 |
:107EF0001F91089588E893E10197F1F7089520E034 |
:107F000030E048E853E105C0FA013197F1F72F5FFF |
:107F10003F4F28173907C0F308951F93182F109269 |
:107F2000692E10926A2E8CE58CBD81E08DBD2C9A55 |
:107F30002A9880E090E028E833E1F9013197F1F7E1 |
:107F400001968A309105C9F72A9A2C982B9880E4DB |
:107F50000E943D3F1130A1F480917A28882329F4B2 |
:107F600081EA0E943D3F80EC04C080EA0E943D3FD0 |
:107F700088EC0E943D3F80917E28882349F406C00A |
:107F800081EA0E943D3F80EC0E943D3F86EA01C0AD |
:107F900087EA0E943D3F82EA0E943D3F8FE20E94B5 |
:107FA0003D3F88EF0E943D3F80E00E943D3F87E2D9 |
:107FB0000E943D3F113031F481E80E943D3F8091A5 |
:107FC000E32804C081E80E943D3F86E10E943D3FD6 |
:107FD0008CEA0E943D3F80E00E943D3F8FEA0E9474 |
:107FE0003D3F1130A1F460918A2870E0882777FD29 |
:107FF0008095982F0E94EE8F23E333E343E250E411 |
:108000000E94DB900E94C08F6093B30003C08FEF8B |
:108010008093B3000E944B3F1F910895FF920F93EE |
:108020001F938C01F62E2B98880F892F881F990B90 |
:10803000919580550E943D3F80917A280F77080FD7 |
:10804000802F82958F70805F0E943D3F802F8F70C0 |
:108050000E943D3F2B9A8F2D0E943D3F1F910F9113 |
:10806000FF900895CF93DF93C0E0D0E0FE01EA597E |
:10807000F54D8081FE01EA51F64D80836081CE018D |
:108080000E940E40219683E0C038D80779F7FE01A0 |
:10809000EA51F64D1082CE0160E00E940E4021961A |
:1080A00084E0C030D80799F7DF91CF9108950F93FE |
:1080B0001F93CF93DF93082F10E01695102F002702 |
:1080C000179507951370C0E0D0E0CE01800F911F87 |
:1080D000DC01AA51B64D2C91FE01E951F24D2083ED |
:1080E0006C910E940E402196CE37D10571F7DF9139 |
:1080F000CF911F910F9108950F931F93CF93DF930B |
:10810000082F10E01695102F00271795079513706C |
:10811000C0E0D0E0CE01800F911FFE01E951F24D89 |
:108120002081FC01EA51F64D208360810E940E40BF |
:108130002196CE37D10571F7DF91CF911F910F9125 |
:10814000089580916A2E8F5F80936A2E883028F080 |
:108150000E94324087E080936A2E0895982F87FD11 |
:108160003AC06034C0F5862F869586958695282F6F |
:1081700030E03695322F222737952795290F311D6C |
:10818000677081E090E0582F01C0550F6A95EAF7BB |
:10819000652F3370413061F0413018F04230A1F466 |
:1081A0000DC0F901EA51F64D8081609586230BC020 |
:1081B000F901EA51F64D8081852B05C0F901EA519C |
:1081C000F64D808185278083F901EA51F64D608163 |
:1081D000C9010E940E4008952F923F924F925F92E4 |
:1081E0006F927F928F929F92AF92BF92CF92DF92C7 |
:1081F000EF92FF920F931F93DF93CF93CDB7DEB72C |
:1082000029970FB6F894DEBF0FBECDBF8E83A62E82 |
:108210000F83482E5524662E7724842F90E09D836B |
:108220008C8384199509E22FF0E0FB83EA83AF0188 |
:108230004619570997FF04C022242A94322C06C0FD |
:108240009C01009711F021E030E0190157FF04C0B4 |
:1082500088248A94982C07C09A014115510511F081 |
:1082600021E030E049016C0197FF04C0D094C19433 |
:10827000D108D3947A0157FF04C0F094E194F10837 |
:10828000F3948E816A2D4F810E94AE40EC14FD0460 |
:10829000A4F5C60162E070E00E9402922227332713 |
:1082A000261B370B39872887A22CB22CB40C00E090 |
:1082B00010E03E81432E552417C0488559854E0D48 |
:1082C0005F1D598748871416150634F4680C791C0D |
:1082D0004C195D09598748878B2D662D4F810E9467 |
:1082E000AE40020D131DBA0CC801840D951DEC8122 |
:1082F000FD818E179F0709F733C0C70162E070E068 |
:108300000E94029222273327261B370B39872887A2 |
:108310008982B82CB60C00E010E06A2C772418C0D3 |
:10832000488559854C0D5D1D5987488714161506DB |
:1083300034F4420C531C4E195F0959874887842D29 |
:108340006B2D4F810E94AE40080D191D5981B50E4D |
:10835000C801860D971DEA81FB818E179F0701F7E3 |
:1083600029960FB6F894DEBF0FBECDBFCF91DF9137 |
:108370001F910F91FF90EF90DF90CF90BF90AF9043 |
:108380009F908F907F906F905F904F903F902F9035 |
:108390000895BF92CF92DF92EF92FF920F931F93B7 |
:1083A000CF93DF93182FB02E87FD1FE7603408F0BE |
:1083B0006FE3C42EDD24862F90E0820F911DC10E45 |
:1083C000D11C21E8C216D10418F0E0E8CE2ED12C41 |
:1083D0007C0181E4E816F10418F070E4E72EF12C3A |
:1083E000C62FD0E008C0812F6C2F4C2D2C2F0B2DC9 |
:1083F0000E94EC402196EC16FD06A8F7DF91CF9184 |
:108400001F910F91FF90EF90DF90CF90BF90089554 |
:10841000CF92DF92FF920F931F93CF93DF93C82EDB |
:10842000D62E142FF22E82E0281779F470E0B3E0F4 |
:10843000660F771FBA95E1F786E0C89E802D11245C |
:1084400045E027E001E00E94C9411F3DE1F0103EF8 |
:1084500038F4163D81F01C3D91F0143CA9F407C09E |
:10846000163F59F01C3F69F0143E71F402C011E050 |
:108470000BC012E009C013E007C014E005C015E00E |
:1084800003C016E001C01EE1CD2DD0E0D695DC2F53 |
:10849000CC27D795C79526E0C29EC0011124C80FEE |
:1084A000D91FD3701F77129F9001112489010A539D |
:1084B0001A4FFCECCF2EF5E0DF2EC20ED31EF801D2 |
:1084C0009491F2E0FF16D1F0FF1530F0FF2059F043 |
:1084D00081E0F81629F50CC0E3E0FE16A9F0F4E0FF |
:1084E000FF16F1F416C0FE01EA51F64D908318C054 |
:1084F000FE01EA51F64D8081892B11C0FE01EA513F |
:10850000F64D808189270BC0FE01EA51F64D80812E |
:1085100005C0FE01EA51F64D808190958923808344 |
:10852000FE01EA51F64D6081CE010E940E400F5FC0 |
:108530001F4F21960C151D0509F0C1CFDF91CF917A |
:108540001F910F91FF90DF90CF900895CF93DF930D |
:10855000EC0113C08091692E60916A2E20E00E9488 |
:1085600008428091692E8F5F8093692E843120F0BC |
:108570001092692E0E94A14021964881442351F710 |
:10858000DF91CF9108958093692E60936A2ECA017E |
:108590000E94A64208951F93CF93DF93EC01162FFC |
:1085A0001AC04A30A9F04D3019F41092692E12C049 |
:1085B0008091692E60916A2E212F0E94084280913D |
:1085C000692E8F5F8093692E863120F01092692E7C |
:1085D0000E94A14021964881442319F7DF91CF9151 |
:1085E0001F9108958093692E60936A2ECA01622FAD |
:1085F0000E94CB4208951F93CF93DF93EC01162F77 |
:108600001AC04A30A9F04D3019F41092692E12C0E8 |
:108610008091692E60916A2E212F0E9408428091DC |
:10862000692E8F5F8093692E863120F01092692E1B |
:108630000E94A1402196FE014491442311F7DF914D |
:10864000CF911F9108958093692E60936A2ECA017D |
:10865000622F0E94FB4208951F93CF93DF93EC019A |
:10866000162F19C04A3019F04D3021F411C00E9464 |
:10867000A14010C08091692E60916A2E212F0E9426 |
:1086800008428091692E8F5F8093692E863110F0A9 |
:108690001092692E2196FE014491442319F7DF912F |
:1086A000CF911F9108958093692E60936A2ECA011D |
:1086B000622F0E942C430895FF920F931F93CF9334 |
:1086C000DF93182FF62EEA01022F07C02196812F83 |
:1086D0006F2D202F0E9408421F5F48814423B1F76D |
:1086E000DF91CF911F910F91FF9008950F931F93EA |
:1086F000282F8093692E60936A2E90E0840F911D3D |
:10870000469714F045E1421B042F020F122F08C0B8 |
:10871000812F60916A2E40E220E00E9408421F5F94 |
:108720001017B0F31F910F910895DF92EF92FF920F |
:108730000F931F93CF93DF93F82ED02E87FF02C0A5 |
:108740001FE7F12E162F603408F01FE350E0C12F11 |
:10875000D0E0C20FD11D4F0D511D4138510510F011 |
:1087600040E850E0E42E8F2D612F212F0D2D0E9427 |
:10877000EC40C134D10510F0C0E4D0E08E2D612F63 |
:108780004E2D2C2F0D2D0E94EC408E2D6C2F4F2D39 |
:108790002C2F0E94EC408F2D6C2F4F2D212F0E94EB |
:1087A000EC40DF91CF911F910F91FF90EF90DF9000 |
:1087B00008952F923F924F925F926F927F928F9285 |
:1087C0009F92AF92BF92CF92DF92EF92FF920F9360 |
:1087D0001F93CF93DF93682E762E8A01C22EC1E0BD |
:1087E000D0E0C41BD50BCA01880F991F2224332463 |
:1087F000281A390A642F670D862D4C2D0E94AE4031 |
:10880000672D601B862D4C2D0E94AE40802F860D5B |
:10881000672D4C2D0E94AE40862D801B672D4C2D60 |
:108820000E94AE404801AA24BB2403E0402E512CF4 |
:108830004DC0D7FD09C008948108910882E090E0FE |
:10884000280E391EC20DD31D0894A11CB11CC40DE5 |
:10885000D51DDA2CD60C182D170D8D2D612F4C2D12 |
:108860000E94AE40E62CEA188E2D612F4C2D0E94FE |
:10887000AE40172D18198D2D612F4C2D0E94AE4042 |
:108880008E2D612F4C2D0E94AE40E82CE60C1A2D47 |
:10889000170D8E2D612F4C2D0E94AE40962D9819EC |
:1088A000092F892F612F4C2D0E94AE40172D1A19C8 |
:1088B0008E2D612F4C2D0E94AE40802F612F4C2DAC |
:1088C0000E94AE4082E090E0480E591EA814B90400 |
:1088D0000CF4AFCFDF91CF911F910F91FF90EF90EC |
:1088E000DF90CF90BF90AF909F908F907F906F90D0 |
:1088F0005F904F903F902F9008952F923F924F920C |
:108900005F927F928F929F92AF92BF92CF92DF92AF |
:10891000EF92FF920F931F93CF93DF93782EC62E83 |
:108920007A01C1E0D0E0C41BD50BCA01880F991FA2 |
:1089300022243324281A390A6E2D6C0D2C2D2E1961 |
:10894000872D472D01E00E94EC40472D4E198E2DBA |
:10895000870D6C2D2C2D0E94EC404701AA24BB24CE |
:1089600033E0432E512C3AC0D7FD09C0089481084A |
:10897000910882E090E0280E391EC20DD31D0894A4 |
:10898000A11CB11CC40DD51DEA2CE70CD72CDA189C |
:10899000282D2C0D8E2D622F4D2D01E00E94EC40D4 |
:1089A0002C2D28198E2D622F4D2D0E94EC40E82C85 |
:1089B000E70C972D9819192F2A2D2C0D8E2D622F2B |
:1089C000492F0E94EC402C2D2A198E2D622F412F09 |
:1089D0000E94EC4082E090E0480E591EA814B904B1 |
:1089E0001CF2DF91CF911F910F91FF90EF90DF90DC |
:1089F000CF90BF90AF909F908F907F905F904F905F |
:108A00003F902F900895CF92DF92EF92FF920F93B5 |
:108A10001F93CF93DF93082F0E944B3F81E799E08C |
:108A200060E00E94FB421092692E87E080936A2EDC |
:108A300080E699E060E00E942C4382E080936A2EF9 |
:108A400010E07801EE0CFF1CEE0CFF1C0F5F1F4FB7 |
:108A50006801CC0CDD1CCC0CDD1C015010400295D3 |
:108A6000000F000F007C12E02EC08AE0E816F1042F |
:108A70001CF44E2D405D02C04E2D495C80E060919B |
:108A80006A2E20E00E9408421093692EC0E0D0E0D8 |
:108A9000402F4C0F8091692E60916A2E20E00E9439 |
:108AA00008428091692E8F5F8093692E2196C03194 |
:108AB000D10571F780916A2E8F5F80936A2E08949A |
:108AC000E11CF11C005FEC14FD047CF2DF91CF91FE |
:108AD0001F910F91FF90EF90DF90CF9008958A3013 |
:108AE00010F4805D0895895C08950F931F93142FEF |
:108AF000022F60936A2E8F5F8093692E815042957A |
:108B00004F704A3010F4405D01C0495C202F0E9434 |
:108B100008428091692E60916A2E412F4F704A3031 |
:108B200010F4405D01C0495C202F0E9408421F9153 |
:108B30000F9108950F931F93082F162F8091692E80 |
:108B40008F5F8093692E815060916A2E402F4295ED |
:108B50004F704A3010F4405D01C0495C212F0E94E3 |
:108B600008428091692E8F5F8093692E81506091B9 |
:108B70006A2E402F4F704A3010F4405D01C0495CAE |
:108B8000212F0E9408428091692E8F5F8093692E69 |
:108B9000815060916A2E40E2212F0E9408421F916D |
:108BA0000F910895FF920F931F93CF93DF93F82EA9 |
:108BB00014E620E0C0E0D0E08F2D612F0E94E2910A |
:108BC000082F882321F4222311F4113071F48091AD |
:108BD000692E8F5F8093692E8150402F405D609198 |
:108BE0006A2E20E00E94084221E0812F6AE00E9464 |
:108BF000E291982F2196C330D10531F0019F802D4D |
:108C00001124F81A192FD8CFDF91CF911F910F910E |
:108C1000FF9008958093692E60936A2E842F0E949E |
:108C2000D2450895BF92CF92DF92EF92FF920F93B9 |
:108C30001F93CF93DF93082FB62E7A0114E6C0E07E |
:108C4000D0E0C701612F70E00E94EE91C62E812F07 |
:108C50008A508A3048F4D02ED394802F6B2D4EE268 |
:108C600020E00E9408420D2D4C2D405D802F6B2D81 |
:108C700020E00E940842812F6AE00E94E291282FA2 |
:108C80002196C330D10541F00F5FC19EC001112470 |
:108C9000E81AF90A122FD5CFDF91CF911F910F91CA |
:108CA000FF90EF90DF90CF90BF9008957F928F92CA |
:108CB0009F92AF92BF92CF92DF92EF92FF920F936B |
:108CC0001F93DF93CF93CDB7DEB727970FB6F894F6 |
:108CD000DEBF0FBECDBF882EC62ECA017901702E11 |
:108CE0008E010F5F1F4FB8014AE050E00E9493923F |
:108CF000F80101900020E9F731979E2E901A092D76 |
:108D000010E0E016F1062CF0DD245701A01AB10A9C |
:108D10001EC010E007C0822F6C2D4AE220E00E94A6 |
:108D200008421F5F212F280D812F90E08E159F058F |
:108D300094F34CC0772021F08F2D6C2D40E303C0BD |
:108D40008F2D6C2D40E220E00E940842D394FD2C30 |
:108D5000F80C8D2D90E08A159B0564F3FE01E00F61 |
:108D6000F11F0081108281E0981619F48F2D815037 |
:108D70000EC082E0981689F489818D3271F48F2DAE |
:108D800081506C2D4DE220E00E9408428F2D6C2D09 |
:108D900040E320E00E94084209C0F092692EC09290 |
:108DA0006A2ECE01019660E00E94CB42192D11502F |
:108DB0001F0D812F6C2D4EE220E00E940842812F72 |
:108DC0008F5F6C2D402F20E00E94084227960FB63F |
:108DD000F894DEBF0FBECDBFCF91DF911F910F91F1 |
:108DE000FF90EF90DF90CF90BF90AF909F908F90CB |
:108DF0007F9008957F928F929F92AF92BF92CF9271 |
:108E0000DF92EF92FF920F931F93DF93CF93CDB733 |
:108E1000DEB727970FB6F894DEBF0FBECDBF882E02 |
:108E2000C62ECA017901702E8E010F5F1F4FB80147 |
:108E30004AE050E00E949392F80101900020E9F787 |
:108E400031979E2E901A092D10E0E016F1062CF0B5 |
:108E5000DD245701A01AB10A1EC010E007C0822FFE |
:108E60006C2D4AE220E00E9408421F5F212F280D4E |
:108E7000812F90E08E159F0594F34CC0772021F050 |
:108E80008F2D6C2D40E303C08F2D6C2D40E220E030 |
:108E90000E940842D394FD2CF80C8D2D90E08A1589 |
:108EA0009B0564F3FE01E00FF11F0081108281E059 |
:108EB000981619F48F2D81500EC082E0981689F40F |
:108EC00089818D3271F48F2D81506C2D4DE220E01F |
:108ED0000E9408428F2D6C2D40E320E00E94084242 |
:108EE00009C0F092692EC0926A2ECE01019660E010 |
:108EF0000E94CB42192D11501F0D812F6C2D4EE277 |
:108F000020E00E940842812F8F5F6C2D402F20E0CF |
:108F10000E94084227960FB6F894DEBF0FBECDBF61 |
:108F2000CF91DF911F910F91FF90EF90DF90CF9045 |
:108F3000BF90AF909F908F907F900895BF92CF92F7 |
:108F4000DF92EF92FF920F931F93DF93CF93CDB7F2 |
:108F5000DEB727970FB6F894DEBF0FBECDBFC82E81 |
:108F6000D62ECA017901B02E8E010F5F1F4FB801B6 |
:108F70004AE050E00E949392F80101900020E9F746 |
:108F80003197E01B2E2F30E0E216F30624F000E0CC |
:108F9000E21AF30A1EC000E007C0822F6D2D4AE2DC |
:108FA00020E00E9408420F5F202F2C0D802F90E0C0 |
:108FB0008E159F0594F31DC0BB2021F0822F6D2DCF |
:108FC00040E303C0822F6D2D40E220E00E94084262 |
:108FD0000F5F202F2C0D802F90E08E159F0564F3DE |
:108FE0002093692ED0926A2ECE01019660E00E94F5 |
:108FF000CB4227960FB6F894DEBF0FBECDBFCF9100 |
:10900000DF911F910F91FF90EF90DF90CF90BF9075 |
:109010000895BF92CF92DF92EF92FF920F931F932A |
:10902000DF93CF93CDB7DEB727970FB6F894DEBFA7 |
:109030000FBECDBFC82ED62ECA017901B02E8E012B |
:109040000F5F1F4FB8014AE050E00E94B492F80150 |
:1090500001900020E9F73197E01B2E2F30E0E21657 |
:10906000F30624F000E0E21AF30A1EC000E007C095 |
:10907000822F6D2D4AE220E00E9408420F5F202FD0 |
:109080002C0D802F90E08E159F0594F31DC0BB2002 |
:1090900021F0822F6D2D40E303C0822F6D2D40E221 |
:1090A00020E00E9408420F5F202F2C0D802F90E0BF |
:1090B0008E159F0564F32093692ED0926A2ECE01FF |
:1090C000019660E00E94CB4227960FB6F894DEBF6F |
:1090D0000FBECDBFCF91DF911F910F91FF90EF9009 |
:1090E000DF90CF90BF9008957F928F929F92AF9222 |
:1090F000BF92CF92DF92EF92FF920F931F93162FA2 |
:1091000069017A01782E739457FF0BC0C094D094F4 |
:10911000E094F0940894C11CD11CE11CF11C4DE2B8 |
:1091200001C040E220E00E940842C701B60120E8E9 |
:1091300036E948E950E00E943792872D612FA90156 |
:1091400023E030E001E00E940948872D8D5F612F08 |
:109150004EE220E00E940842C701B60120E836E94D |
:1091600048E950E00E9437926B017C01C701B601CB |
:1091700028EE33E040E050E00E9437924901872D0D |
:109180008C5F612FA90124E030E00E940948AA24E5 |
:10919000BB24C501B40128E13CEF4FEF5FEF0E9413 |
:1091A000C391C60ED71EE81EF91E872D885F612F5A |
:1091B000A60123E030E00E940948872D855F612FDA |
:1091C0004EE120E00E9408421F910F91FF90EF9026 |
:1091D000DF90CF90BF90AF909F908F907F90089539 |
:1091E000BF92CF92DF92EF92FF920F931F93182FAF |
:1091F000B62E6A01CA016CE370E00E94EE917B0119 |
:10920000812F6B2DA70122E030E000E00E94094889 |
:10921000812F8E5F6B2D4AE320E00E9408428CE391 |
:1092200090E09C01E29EC001E39E900DF29E900DA5 |
:109230001124C81AD90A812F8D5F6B2DA60122E057 |
:1092400030E001E00E9409481F910F91FF90EF90DC |
:10925000DF90CF90BF9008952F923F924F925F92F0 |
:109260006F927F928F929F92AF92BF92CF92DF9236 |
:10927000EF92FF920F931F93DF93CF93CDB7DEB79B |
:109280002F970FB6F894DEBF0FBECDBF8C876D87CA |
:109290006A0159010B87449F9001459F300D549FEF |
:1092A000300D11243E832D83AA9CC001AB9C900DF0 |
:1092B000BA9C900D11249C838B83A29E4001A39E97 |
:1092C000900CB29E900C1124BC0168197909882772 |
:1092D00077FD8095982F0E94EE8F7B018C01ED81A8 |
:1092E000FE81BF01882777FD8095982F0E94EE8F21 |
:1092F00020E030E040E85EE30E94DB909B01AC019F |
:10930000C801B7010E94E88E0E943E910E94BB8F67 |
:109310002B019401220F331F3A8329836D856A0D37 |
:109320008C854B850E94AE406D856A198C854B8576 |
:109330000E94AE408C858C0D6D854B850E94AE40A1 |
:109340008C858C196D854B850E94AE408D819E81E8 |
:10935000880F991FEE27FF27E81BF90BFA87E9878B |
:109360002B813C81220F331F38872F8349018B814A |
:109370009C81880E991E222433246624772438C0C9 |
:1093800057FC0DC00894A108B108E981FA8129852C |
:109390003A85E20FF31FFA83E9834E1A5F0A0894B5 |
:1093A000611C711C8F819885280E391E480C591C30 |
:1093B0000C85060DED84EA0C802F6E2D4B850E94E6 |
:1093C000AE40FD84FA18802F6F2D4B850E94AE4071 |
:1093D0001C851619812F6E2D4B850E94AE40812F62 |
:1093E0006F2D4B850E94AE40EF81F8858E0E9F1E3B |
:1093F00029813A81221633061CF2B301882777FDB2 |
:109400008095982F0E94EE8F20E030E040E05FE3EF |
:109410000E94E88E7B018C0165010894C108D10887 |
:10942000EB81FC81BF01882777FD8095982F0E94F2 |
:10943000EE8FA80197010E94DB90A80197010E947E |
:10944000DB907B018C01CC9CC001CD9C900DDC9C01 |
:10945000900D11242D813E81829FB001839F700D5C |
:10946000929F700D1124882777FD8095982F0E9478 |
:10947000EE8F9B01AC01C801B7010E94E88E7B0111 |
:109480008C018B819C81ED81FE818E9FB0018F9F2D |
:10949000700D9E9F700D1124882777FD8095982F61 |
:1094A0000E94EE8F9B01AC01C801B7010E94E78EBC |
:1094B0000E943E910E94BB8F5B01460149845A8401 |
:1094C00050944194510853942D813E8189859A8509 |
:1094D000281B390BE981FA812E1B3F0B3F872E8712 |
:1094E00035C01A141B044CF00894611C711C2F81A8 |
:1094F0003885220E331EA20CB31C8E859F85A80EC4 |
:10950000B91E0C85060DED84E80C802F6E2D4B8561 |
:109510000E94AE40FD84F818802F6F2D4B850E946D |
:10952000AE401C851619812F6E2D4B850E94AE40D2 |
:10953000812F6F2D4B850E94AE40089481089108C1 |
:10954000EE85FF85E40DF51DFF87EE87C4010196CA |
:109550001816190634F22F960FB6F894DEBF0FBE18 |
:10956000CDBFCF91DF911F910F91FF90EF90DF90D2 |
:10957000CF90BF90AF909F908F907F906F905F90B3 |
:109580004F903F902F9008950F93FA01022F4D5F57 |
:109590005F4F9F010E942C490F9108952F923F9297 |
:1095A0004F925F926F927F928F929F92AF92BF92F3 |
:1095B000CF92DF92EF92FF920F931F93DF93CF939F |
:1095C0000F92CDB7DEB7382E262E4983422EB80132 |
:1095D0000E2D80E090E00E94EC8F2BED3FE049E4FF |
:1095E00050E40E94DB9020E030E044E353E40E942A |
:1095F000538F6B017C01C7010E94508F4B015C01AE |
:10960000552466247724C301B2010E94EC8F9B018C |
:10961000AC01C501B4010E94DB900E943E914B0158 |
:109620005C01B601C7010E945E916B017C0129813A |
:10963000622F70E080E090E00E94EC8F9B01AC0113 |
:10964000C701B6010E94DB900E943E910E94C08F2C |
:10965000132D160FC501B4010E94C08F222D261BA9 |
:10966000832D622D412F0E94EC400F90CF91DF910E |
:109670001F910F91FF90EF90DF90CF90BF90AF9030 |
:109680009F908F907F906F905F904F903F902F9022 |
:109690000895EF920F931F93942FF901E02E4D5FE1 |
:1096A000292F8F010E94CE4A1F910F91EF900895AC |
:1096B0002F923F924F925F926F927F928F929F92E2 |
:1096C000AF92BF92CF92DF92EF92FF920F931F93D0 |
:1096D000382E262E442E40E050E0CA01B9010E94E7 |
:1096E000EC8F2BED3FE049E450E40E94DB9020E05A |
:1096F00030E044E353E40E94538F6B017C01C701C7 |
:109700000E94508F4B015C01552466247724C301CD |
:10971000B2010E94EC8F2B013C01C501B401A301F1 |
:1097200092010E94DB900E943E914B015C01B601C8 |
:10973000C7010E945E91A30192010E94DB900E94EA |
:109740003E910E94C08F132D160FC501B4010E94D7 |
:10975000C08F222D261B832D622D412F0E94EC40AD |
:109760001F910F91FF90EF90DF90CF90BF90AF903F |
:109770009F908F907F906F905F904F903F902F9031 |
:109780000895ECE7F0E080E480838081807E816052 |
:1097900080838FEE80937A000895CF92DF92EF92CC |
:1097A000FF920F931F93F89460917C2870917D280D |
:1097B00080E090E00E94EC8F209137233091382395 |
:1097C0004091392350913A230E94E88E2FE832ECE1 |
:1097D00045E75FE30E94DB906B017C010E94BB8F39 |
:1097E000DC01CB0160E470E00E9402928C01909356 |
:1097F000402380933F23C701B60120E030E040E8DA |
:109800005CE30E94DB90609337237093382380934E |
:10981000392390933A230032110574F020E030E0B0 |
:1098200040E85FE30E94E88E60933723709338230B |
:109830008093392390933A23609137237091382392 |
:109840008091392390913A2320E030E040EF50E4BA |
:109850000E94538F60933B2370933C2380933D235E |
:1098600090933E230E94C08F7093442360934323C0 |
:10987000109242231092412380E090E0A0E0B0E0FB |
:109880008093372390933823A0933923B0933A23BE |
:1098900078941F910F91FF90EF90DF90CF900895F3 |
:1098A0001F920F920FB60F920BB60F9211242F93A7 |
:1098B0003F934F935F936F937F938F939F93AF9358 |
:1098C000BF93EF93FF93609178007091790080E0EF |
:1098D00090E00E94EC8F9B01AC0160913723709166 |
:1098E00038238091392390913A230E94E88E609327 |
:1098F0003723709338238093392390933A238091B0 |
:1099000041239091422301969093422380934123D7 |
:109910008050904114F00E94CD4BFF91EF91BF9188 |
:10992000AF919F918F917F916F915F914F913F91F7 |
:109930002F910F900BBE0F900FBE0F901F90189598 |
:109940000F93CF93DF9387E662E041E023E001E0ED |
:109950000E949543809143239091442380549140E9 |
:1099600038F489E662E043E123E000E00E94C94167 |
:1099700080917B28813019F0C0E0D0E02BC088E6D0 |
:1099800060E047E127E001E00E94954320914323F6 |
:109990003091442381E0243A380718F0C3E1D0E045 |
:1099A00002C0C0E0D0E0C9018154914083369105E6 |
:1099B00040F4C9018054914065E070E00E94EE914E |
:1099C000EB018C2F43E14C1B855962E023E000E062 |
:1099D0000E94C94180917B28882341F588E660E098 |
:1099E00046E127E001E00E94954320914323309116 |
:1099F000442381E02A39380710F0C2E1D0E0C901E0 |
:109A0000815491408935910540F4C90180549140B9 |
:109A100065E070E00E94EE91EB018C2F42E14C1B5F |
:109A2000855962E023E000E00E94C941209739F0A7 |
:109A30008AE662E04C2F23E001E00E94C941DF91F9 |
:109A4000CF910F910895DF92EF92FF920F931F93A2 |
:109A5000CF93DF930E94B3241092462310924723A2 |
:109A600080918B28813009F03DC00E944B3F89E0F6 |
:109A700090E00E94AF54AC0180E060E020E00E94E2 |
:109A80005C438AE090E00E94AF54AC0180E061E06A |
:109A900020E00E945C438BE090E00E94AF54AC0158 |
:109AA00080E063E020E00E945C4383E190E00E945C |
:109AB000AF54AC0180E064E020E00E945C438EE0A3 |
:109AC00090E00E94AF54AC0180E065E020E00E948D |
:109AD0005C4388E99AE324EF31E0F9013197F1F72B |
:109AE0000197D9F70E94B43A80917628909177280F |
:109AF000A0917828B09179280097A105B10509F4C3 |
:109B000037C18091B8289091B928A091BA28B09116 |
:109B1000BB280097A105B10509F42AC184E190E0B2 |
:109B20000E94AF54AC0180E064E022E00E945C43FC |
:109B300085E190E00E94AF54AC0180E065E023E055 |
:109B40000E945C4386E190E00E94AF54AC0180E04B |
:109B500067E020E00E945C4360917628709177284E |
:109B6000809178289091792820E836E948E950E0FA |
:109B70000E94159281E066E0A90122E030E000E059 |
:109B80000E94094883E066E04AEA59E020E00E942A |
:109B9000234360917628709177288091782890915E |
:109BA000792828EE33E040E050E00E941592CA0187 |
:109BB000B90120E137E240E050E00E9415929B019C |
:109BC000AC0184E066E0A90124E030E001E00E94FD |
:109BD0000948609176287091772880917828909133 |
:109BE00079282AE030E040E050E00E941592CA0156 |
:109BF000B90124E630E040E050E00E9415929B015C |
:109C0000AC0188E066E0A90122E030E00E9409484A |
:109C10006091B8287091B9288091BA289091BB289A |
:109C200020E836E948E950E00E9415928CE066E0B1 |
:109C3000A90122E030E000E00E9409488EE066E0E1 |
:109C400048EA59E020E00E9423436091B8287091CF |
:109C5000B9288091BA289091BB2828EE33E040E0E3 |
:109C600050E00E941592CA01B90120E137E240E0BC |
:109C700050E00E9415929B01AC018FE066E0A901C3 |
:109C800024E030E001E00E9409486091B82870911A |
:109C9000B9288091BA289091BB282AE030E040E0B2 |
:109CA00050E00E941592CA01B90124E630E040E07C |
:109CB00050E00E9415929B01AC0183E166E0A9018E |
:109CC00022E030E00E94094880E80E94FA8188235F |
:109CD000A9F160E070E080E090E020E030E040E05A |
:109CE00050E00E94CD3A80E060E240E828E000E0E9 |
:109CF0000E94C94180E068E240E828E00E94C94132 |
:109D000087E190E00E94AF54AC0180E065E020E084 |
:109D10000E945C4380E066E045E10E94764380E07B |
:109D200067E045E10E94764380E197E224EF31E06D |
:109D3000F9013197F1F70197D9F71AC080E10E9434 |
:109D4000FA81882309F4C0CF80E064E045E10E94F5 |
:109D5000764380E065E045E10E94764380E066E07E |
:109D600045E10E94764380E067E045E10E9476434A |
:109D70008BE10E94288C8BE10E94288C85E50E9453 |
:109D8000288C8AEA0E94288C80E00E94288C86E534 |
:109D90008093452310E096E7D92E84E1E82EF12C3C |
:109DA000CAE5D0E00E944B3F88E190E00E94AF54AA |
:109DB000AC0180E064E020E00E945C4389E190E037 |
:109DC0000E94AF54AC018CE067E020E00E945C434D |
:109DD00002E33BC000D00F92EDB7FEB73196ADB7AE |
:109DE000BEB71196DC92118212820E94E58CF0922D |
:109DF000EE2EE092ED2E0F900F900F908091ED2EB1 |
:109E00009091EE2E892BD1F7153148F4812F66E021 |
:109E100046EA59E020E00E9423431F5F06C080E02D |
:109E200066E045E10E94764310E080E20E94FA81FC |
:109E3000882351F080EF0E94FA811092BD28109281 |
:109E400046230E949452F9CF01508091D223882357 |
:109E500021F4002309F0BECF02C00023A9F48DE154 |
:109E600090E00E94AF54AC0180E065E020E00E94E9 |
:109E70005C43D093EE2EC093ED2E8091ED2E909109 |
:109E8000EE2E892BD1F78ECF0E944A8C8091D4235D |
:109E90009091D52390936C2E80936B2E80918B287C |
:109EA0008130B1F40E944B3F8EE190E00E94AF54AC |
:109EB000AC0180E060E020E00E945C438FE190E034 |
:109EC0000E94AF54AC0180E061E020E00E945C435E |
:109ED00080915F2F823681F480918B28813051F4FC |
:109EE00080E290E00E94AF54AC0180E061E020E0AD |
:109EF0000E945C4382E013C080915F2F833699F407 |
:109F000080918B28813051F481E290E00E94AF541F |
:109F1000AC0180E061E020E00E945C4381E080933E |
:109F200046238093472380918B28813099F582E2E4 |
:109F300090E00E94AF54AC0180E062E020E00E941B |
:109F40005C43E0916B2EF0916C2E80810E94D24593 |
:109F500084EA99E060E00E94FB42E0916B2EF09170 |
:109F60006C2E81810E94D245E0916B2EF0916C2E77 |
:109F700044814F598091692E60916A2E20E00E94A1 |
:109F8000084288E99AE324EF31E0F9013197F1F7CB |
:109F90000197D9F70E94628E8FEF0E94D863E091FB |
:109FA0006D2EF0916E2E8081883509F468C00E9474 |
:109FB0004B3F80E060E048E959E020E00E94234305 |
:109FC00088E50E94D24583E290E00E94AF54AC0144 |
:109FD00080E061E020E00E945C4380E061E04CE8CA |
:109FE00059E020E00E942343E0916D2EF0916E2E07 |
:109FF00080810E94D24584E290E00E94AF54AC017F |
:10A0000080E062E020E00E945C4385E290E00E94F4 |
:10A01000AF54AC0180E063E020E00E945C4386E244 |
:10A0200090E00E94AF54AC0180E064E020E00E9428 |
:10A030005C4386E899E060E00E94FB4287E290E0A2 |
:10A040000E94AF54AC0180E065E020E00E945C43D8 |
:10A05000109246238CED95E09093722380937123A8 |
:10A0600080E490E09093B7228093B62280E49CE94C |
:10A0700024EF31E0F9013197F1F70197D9F7109208 |
:10A0800045231092D22382E390E09093EE2E8093AA |
:10A09000ED2E8091ED2E9091EE2E892BD1F70E941E |
:10A0A0009452FDCF0F931F93982F062F142F842FB8 |
:10A0B000692F4AE050E120E00E942343812F602F66 |
:10A0C00048E050E120E00E9423431F910F91089542 |
:10A0D0008F929F92AF92BF92DF92EF92FF920F9377 |
:10A0E0001F93CF93DF930E944B3F8AE090E00E9442 |
:10A0F000AF54AC0180E061E022E00E945C4380E06C |
:10A1000090E00E94AF54AC0180E067E020E00E9444 |
:10A110005C43DD2486E1882E912CED2CFF24E89C05 |
:10A120008001E99C100DF89C100D11240C58114F62 |
:10A13000C0E0D0E05701CE018E0D9F1D099744F479 |
:10A14000CE018D5F682F80E0A80120E00E942343AC |
:10A1500021960A5E1F4FC330D10569F7DD2009F053 |
:10A1600057C080E062E044E45FE020E00E942343C7 |
:10A1700080E066E042E45FE00BC080E062E040E443 |
:10A180005FE020E00E94234380E066E04EE35FE072 |
:10A1900020E00E94234396E0A916B10474F080E009 |
:10A1A00062E04CE35FE020E00E94234380E066E051 |
:10A1B0004AE35FE020E00E94234380E40E94FA81AA |
:10A1C000882329F086E0A816B1040CF4D39480E823 |
:10A1D0000E94FA81882311F0D110DA9480E20E9463 |
:10A1E000FA81882331F480E10E94FA81882309F4FE |
:10A1F00094CF80EF0E94FA81DF91CF911F910F9150 |
:10A20000FF90EF90DF90BF90AF909F908F90089558 |
:10A2100096E0A916B1041CF6B0CF0E944B3F80E037 |
:10A2200062E04BE55FE020E00E94234380E063E0D2 |
:10A230004BE45FE020E00E9423438CE067E046E4CB |
:10A240005FE020E00E94234380E20E94FA8188239D |
:10A25000D9F380EF0E94FA8108950E944B3F80E07D |
:10A2600060E048EC5FE022E00E9423438DE290E052 |
:10A270000E94AF54AC0180E061E020E00E945C43AA |
:10A280008EE290E00E94AF54AC0180E062E020E0FA |
:10A290000E945C4380E063E042EB5FE020E00E94CC |
:10A2A000234380E064E04CE95FE020E00E94234328 |
:10A2B00080E065E046E85FE020E00E94234380E024 |
:10A2C00066E040E75FE020E00E9423438FE290E0F9 |
:10A2D0000E94AF54AC0180E067E020E00E945C4344 |
:10A2E00080E20E94FA81882321F080EF0E94FA81A7 |
:10A2F000089580E10E94FA81882391F32CE088E19F |
:10A3000090E00FB6F894A895809360000FBE20935C |
:10A310006000FFCFBF92CF92DF92EF92FF920F9338 |
:10A320001F93D82EE62E142FB22EC02E842F642F0A |
:10A3300041E00E945250012FF12E80E40E94FA81E8 |
:10A34000182F80E461E00E945382182B51F00E1503 |
:10A3500010F40F5F06C081E0C81611F40EEF24C0A0 |
:10A360000E2D80E80E94FA81182F80E861E00E949B |
:10A370005382182B51F0D01610F4015006C081E022 |
:10A38000B81611F40DEF10C00D2D0F1529F08F2DFB |
:10A39000602F41E00E94525080E30E94FA81F02E2B |
:10A3A000882359F285FD0FEF802F1F910F91FF90A9 |
:10A3B000EF90DF90CF90BF900895CF92DF92EF9211 |
:10A3C000FF920F931F93C82ED62EE42E122F822FAA |
:10A3D000622F0E945250012FF12E80E40E94FA81D8 |
:10A3E000182F80E461E00E945382182B29F00D158C |
:10A3F00010F00D2D01C00F5F80E80E94FA81182F28 |
:10A4000080E861E00E945382182B29F0C01610F0FA |
:10A410000C2D01C001500F1529F08F2D602F4E2DEE |
:10A420000E94525080E30E94FA81F02E8823A9F204 |
:10A4300085FD0FEF802F1F910F91FF90EF90DF9020 |
:10A44000CF900895BF92CF92DF92EF92FF920F9339 |
:10A450001F93D82EE62E142FB22EC02E842F642FD9 |
:10A4600041E00E945250012FF12E80E40E94FA81B7 |
:10A47000182F80E461E00E945382182B51F00E15D2 |
:10A4800010F40F5F06C081E0C81611F40EEF43C050 |
:10A490000E2D80E80E94FA81182F80E861E00E946A |
:10A4A0005382182B51F0D01610F4015006C081E0F1 |
:10A4B000B81611F40DEF2FC00D2D80E20E94158209 |
:10A4C000882329F080EF0E94FA810AEF24C080E1FE |
:10A4D0000E941582882329F080EF0E94FA810BEFF9 |
:10A4E0001AC080E20E940482882329F080EF0E9433 |
:10A4F000FA810CEF10C00F1529F08F2D602F41E06D |
:10A500000E9452500E94A04C80E10E940482F02ED2 |
:10A51000882309F4AACF802F1F910F91FF90EF900D |
:10A52000DF90CF90BF9008952F923F924F925F920D |
:10A530006F927F928F929F92AF92BF92CF92DF9253 |
:10A54000EF92FF920F931F93DF93CF9300D000D031 |
:10A550000F92CDB7DEB720914623298380EF0E946A |
:10A56000FA81772466243324AA24A39462E1262E58 |
:10A5700001C0A02E8091BD28813011F48093462324 |
:10A580008091BD28882319F4398130934623809126 |
:10A590004623882319F456E0652E09C0813019F44A |
:10A5A00047E0642E04C0823011F434E0632E0E9430 |
:10A5B0004B3F80E060E04BEF5FE022E00E942343EE |
:10A5C0008CE060E045EF5FE022E00E94234380E002 |
:10A5D00090E00E94AF54AC0180E067E020E00E9470 |
:10A5E0005C4389E290E00E94AF54AC018CE067E0EC |
:10A5F00020E00E945C43462C5524C20101979B83B6 |
:10A600008A83772039F081E061E043EF5FE020E06A |
:10A610000E942343E72CFF2428E430E0E29EF0016F |
:10A62000E39EF00DF29EF00D1124FD83EC8300E01B |
:10A6300010E0BB24B394670148018E0C9F1C841466 |
:10A64000950474F580914623813061F44091B728D8 |
:10A65000429DA00111248C819D81480F591F4455B2 |
:10A66000564F19C0823061F44091B728429DA00135 |
:10A670001124EC81FD814E0F5F1F4C55544F0BC0D0 |
:10A680004091B728429DA00111242C813D81420FA9 |
:10A69000531F4C53534F83E06B2D20E00E94234304 |
:10A6A000053061F48A819B81881699063CF481E02B |
:10A6B00066E041EF5FE020E00E9423430E94A04C4F |
:10A6C0000F5F1F4FB394EC81FD81E85BFF4FFD836B |
:10A6D000EC83F7E0BF1609F0AFCF332071F4772099 |
:10A6E000C9F46F1629F481E065E04A2D20E016C018 |
:10A6F00081E0662D4A2D20E00BC026E030E0C20E3E |
:10A70000D31EC414D50434F082E066E04A2D21E063 |
:10A7100000E005C082E065E04A2D21E001E00E94F2 |
:10A720002252082F8E3F31F473943324339425E062 |
:10A73000A22E67CF8D3F29F47A94332492E0A92E7C |
:10A7400060CF8C3F09F048C00E944B3F8BE290E005 |
:10A750000E94AF54AC0180E062E020E00E945C43C4 |
:10A760008CE290E00E94AF54AC018CE067E020E006 |
:10A770000E945C4380E10E94FA818111299880E265 |
:10A780000E9404828823B1F380EF0E94FA810E9424 |
:10A790004B3F80E060E044EE5FE022E00E94234314 |
:10A7A0008CE060E04EED5FE022E00E94234380E019 |
:10A7B00090E00E94AF54AC0180E067E020E00E948E |
:10A7C0005C4389E290E00E94AF54AC018CE067E00A |
:10A7D00020E00E945C4315CF8B3F19F40E94A984AE |
:10A7E000A6C08A3F19F40E94C154A1C0809146239B |
:10A7F0008130A9F5E02EFF24E70CF11C31E0E316CF |
:10A80000F10419F40E94B85C16C082E0E816F10465 |
:10A8100021F483E00E94B85C15C093E0E916F104CE |
:10A8200019F40E945B3615C0E4E0EE16F10419F449 |
:10A830000E94A26E14C0F5E0EF16F10419F40E9414 |
:10A8400063330DC026E0E216F10419F40E94263E9F |
:10A8500006C037E0E316F10411F40E9424858091CC |
:10A8600046238230D1F4802F90E0870D911D8130F6 |
:10A87000910519F40E945B3610C08230910519F4DD |
:10A880000E94A26E0AC08330910519F40E946333BE |
:10A8900004C0049711F40E942485809146238823E4 |
:10A8A00009F067CEE02EFF24E70CF11C81E0E816EA |
:10A8B000F10421F482E00E94185606C092E0E916E5 |
:10A8C000F10411F40E94D66F80912324882371F43F |
:10A8D000E3E0EE16F10419F40E944C3120C0F4E0DC |
:10A8E000EF16F104A9F40E94593019C08091232475 |
:10A8F000813071F423E0E216F10419F40E94A131D1 |
:10A900000EC034E0E316F10419F40E94AC3007C025 |
:10A9100085E0E816F10419F40E9433802ACE96E00F |
:10A92000E916F10409F025CE0E94685022CE0F905E |
:10A930000F900F900F900F90CF91DF911F910F917B |
:10A94000FF90EF90DF90CF90BF90AF909F908F904F |
:10A950007F906F905F904F903F902F90089520913F |
:10A96000B728FC01EE0FFF1FEE0FFF1FE80FF91FC6 |
:10A97000E20FF11DEE0FFF1FED52F34E808191812A |
:10A9800008950E944B3F8CE067E04CE050E120E0EE |
:10A990000E942343E091B728F0E0EE0FFF1FE15F34 |
:10A9A000F24E4081518181E062E020E00E945C43F0 |
:10A9B00080E20E94FA81882369F380EF0E94FA8185 |
:10A9C0000895882351F4EFEFFEE2608311823896F8 |
:10A9D0008FE2EF35F807C9F710C0E82FF0E03197A4 |
:10A9E00093E0EE0FFF1F9A95E1F7DF01A250B14D02 |
:10A9F00011966C93E050F14D108280918023882352 |
:10AA000019F010928023089510927E2310927C23D7 |
:10AA1000809183238E7F8093832385EA8093BC007B |
:10AA20000895EF92FF920F931F93CF93DF930E94AD |
:10AA30004B3F109282231092242489EE90E160E033 |
:10AA40000E94FB4280918323826080938323109233 |
:10AA50007F2380E060E00E94E15481E090E00E946A |
:10AA6000CF81EC018091832380FD05C0CE010E943F |
:10AA7000D9818823B9F381E090E00E94CF817C01E5 |
:10AA8000CEEFDEE210E0812F60E00E94E154809181 |
:10AA9000832380FD05C0C7010E94D9818823B9F3B3 |
:10AAA0008B8187FF7AC080E061E04AED50E120E0D1 |
:10AAB0000E94234382E161E0412F20E00E9475451E |
:10AAC00080E062E041ED50E120E00E94234388E015 |
:10AAD00062E0488120E00E9475458BE062E049EC2D |
:10AAE00050E120E00E94234382E162E0498120E0BE |
:10AAF0000E94754580E063E040EC50E120E00E9458 |
:10AB0000234388E063E04A8120E00E9475458BE0A2 |
:10AB100063E048EB50E120E00E94234382E163E0E0 |
:10AB20004B8120E00E94754580E064E04FEA50E1EF |
:10AB300020E00E94234388E064E04C8120E00E94F2 |
:10AB400075458BE064E047EA50E120E00E94234332 |
:10AB500082E164E04D8120E00E94754580E065E07F |
:10AB60004EE950E120E00E94234388E065E04E81F9 |
:10AB700020E00E9475458BE065E046E950E120E069 |
:10AB80000E9423434F81552747FD509582E165E0A0 |
:10AB900023E030E001E00E9409481F5F28961C3046 |
:10ABA00009F071CFDF91CF911F910F91FF90EF903E |
:10ABB0000895CF93DF93E82FA2E1B0E380E1ED01A8 |
:10ABC00019928A95E9F7EE2339F4CD0170E040E15E |
:10ABD00050E00E948C9204C0F0E0EF5EFF4C608376 |
:10ABE0008DB79EB707970FB6F8949EBF0FBE8DBF67 |
:10ABF000EDB7FEB7319684E7ADB7BEB711968C932B |
:10AC000081E08183828382E190E39483838380E186 |
:10AC100090E0968385830E94E58CCDB7DEB72796BA |
:10AC20000FB6F894DEBF0FBECDBFDF91CF91089570 |
:10AC3000BF92CF92DF92EF92FF920F931F93DF9319 |
:10AC4000CF93CDB7DEB727970FB6F894DEBF0FBE10 |
:10AC5000CDBF182F0E944B3F81E08093702E8093D0 |
:10AC6000722E1092712E1130B9F40E9411558BE0A2 |
:10AC700067E04BE850E120E00E94234380E20E941D |
:10AC8000FA81882321F080EF0E94FA813FC380E19E |
:10AC90000E94FA81882359F30E944B3F85E790E197 |
:10ACA00062E00E94FB4282E062E04AE650E120E07E |
:10ACB0000E94234382E063E04FE550E120E00E94E0 |
:10ACC000234388E068E240E026E001E00E94C941B9 |
:10ACD00082E090E00E94AF54AC0180E067E020E0A9 |
:10ACE0000E945C4382E167E04BE550E120E00E9476 |
:10ACF000234380E062E049E550E120E00E942343E5 |
:10AD0000113029F483E592E20E94748A0CC012305B |
:10AD100051F480914623813031F480914723813072 |
:10AD200011F40E94628EEAE0CE2ED12C70E7B72E8D |
:10AD30007E010894E11CF11C8091702E882361F53E |
:10AD400080E40E94FA81882331F480E463E00E9469 |
:10AD50005382882309F14091712E4E3FE8F44F5FF2 |
:10AD60004093712E89E063E050E023E030E000E0A2 |
:10AD70000E940948123081F48091712E8B9DC00190 |
:10AD800011246FEF70E00E940292462F88E068E283 |
:10AD900026E001E00E94C9418091702E882309F0CD |
:10ADA0003FC080E80E94FA81882331F480E863E0A4 |
:10ADB0000E9453828823A1F18091712E882381F112 |
:10ADC000123079F48B9DC00111246FEF70E00E9466 |
:10ADD0000292862F885F68E240E026E000E00E9451 |
:10ADE000C9414091712E41504093712E89E063E03A |
:10ADF00050E023E030E000E00E940948123081F486 |
:10AE00008091712E8B9DC00111246FEF70E00E9424 |
:10AE10000292462F88E068E226E001E00E94C941E4 |
:10AE20008091702E8130D1F480E40E94FA818823D1 |
:10AE300031F480E461E00E945382882379F04091EC |
:10AE4000722E403158F44F5F4093722E89E062E0D9 |
:10AE500050E023E030E000E00E9409488091702E2D |
:10AE6000813039F580E80E94FA81882331F480E846 |
:10AE700061E00E9453828823E1F04091722E4423C6 |
:10AE8000C1F041504093722E442341F089E062E0CA |
:10AE900050E023E030E000E00E9409488091722EEB |
:10AEA000882339F489E062E045E550E120E00E9422 |
:10AEB000234380E10E94FA81882309F478C011308D |
:10AEC00009F050C08091712E882309F44BC0109274 |
:10AED000722E1092712E88E068E240E026E001E0D8 |
:10AEE0000E94C94180E065E045E10E9476434091BF |
:10AEF000722E442341F089E062E050E023E030E02C |
:10AF000000E00E9409488091722E882339F489E07C |
:10AF100062E041E550E120E00E9423434091712E20 |
:10AF200089E063E050E023E030E000E00E9409485F |
:10AF30008091722E6091712E0E94E15481E090E028 |
:10AF40000E94CF819093EE2E8093ED2E80918323EB |
:10AF500080FD08C08091ED2E9091EE2E0E94D98147 |
:10AF60008823A1F38091702E882389F462E04FE456 |
:10AF700050E120E00E94234380E063E04DE450E193 |
:10AF800020E00E94234381E08093702E10C080E077 |
:10AF900062E04BE450E120E00E94234380E063E064 |
:10AFA00049E450E120E00E9423431092702E1130BA |
:10AFB00009F097C18091722E6091712E0E94E15428 |
:10AFC00081E090E00E94CF819093EE2E8093ED2E51 |
:10AFD00080E063E04CE350E120E00E942343E091F5 |
:10AFE000722EF0E063E0EE0FFF1F6A95E1F7EA5082 |
:10AFF000F14D41818DE063E050E023E030E000E07E |
:10B000000E94094880E064E04FE250E120E00E94A5 |
:10B010002343E091722EF0E053E0EE0FFF1F5A95AC |
:10B02000E1F7EA50F14D8DE064E0458120E00E94B7 |
:10B030007545E091722EF0E043E0EE0FFF1F4A9558 |
:10B04000E1F7EA50F14D45818DE064E050E023E006 |
:10B0500030E00E94094880E065E042E250E120E0F3 |
:10B060000E942343E091722EF0E033E0EE0FFF1FC9 |
:10B070003A95E1F7EA50F14D4781552747FD509544 |
:10B080008DE065E023E030E00E94094880E066E062 |
:10B0900049E150E120E00E942343E091722EF0E06C |
:10B0A00023E0EE0FFF1F2A95E1F7EA50F14D88E00B |
:10B0B00066E0408120E00E9475458BE066E041E15A |
:10B0C00050E120E00E942343E091722EF0E093E0F3 |
:10B0D000EE0FFF1F9A95E1F7EA50F14D82E166E02D |
:10B0E000438120E00E9475458091722E282F30E028 |
:10B0F00021503040F90183E0EE0FFF1F8A95E1F700 |
:10B10000E250F14D8181882309F4DEC0C114D104DD |
:10B1100009F0D7C0C901B7014AE050E00E949392FC |
:10B12000C7010E94748A87EA92E20E94748AE091C1 |
:10B13000722EF0E003E0EE0FFF1F0A95E1F7EA50F0 |
:10B14000F14D808190E0B7014AE050E00E94939277 |
:10B15000C7010E94748A87EA92E20E94748AE09191 |
:10B16000722EF0E0B3E0EE0FFF1FBA95E1F7EA5060 |
:10B17000F14D818190E0B7014AE050E00E94939246 |
:10B18000C7010E94748A87EA92E20E94748AE09161 |
:10B19000722EF0E0A3E0EE0FFF1FAA95E1F7E85052 |
:10B1A000F14D808190E0B7014AE050E00E94939217 |
:10B1B000C7010E94748A87EA92E20E94748AE09131 |
:10B1C000722EF0E073E0EE0FFF1F7A95E1F7EA5080 |
:10B1D000F14D838190E0B7014AE050E00E949392E4 |
:10B1E000C7010E94748A87EA92E20E94748AE09101 |
:10B1F000722EF0E063E0EE0FFF1F6A95E1F7E65074 |
:10B20000F14D808190E0B7014AE050E00E949392B6 |
:10B21000C7010E94748A87EA92E20E94748AE091D0 |
:10B22000722EF0E053E0EE0FFF1F5A95E1F7EA505F |
:10B23000F14D858190E0B7014AE050E00E94939281 |
:10B24000C7010E94748A87EA92E20E94748AE091A0 |
:10B25000722EF0E043E0EE0FFF1F4A95E1F7EA504F |
:10B26000F14D868190E0B7014AE050E00E94939250 |
:10B27000C7010E94748A87EA92E20E94748AE09170 |
:10B28000722EF0E033E0EE0FFF1F3A95E1F7EA503F |
:10B29000F14D8781992787FD9095B7014AE050E0ED |
:10B2A0000E949392C7010E94748A89EA92E20E94E6 |
:10B2B000748A8BEA92E20E94748A28ECC22ED12C06 |
:10B2C00003C00894C108D1088091832380FD0FC07A |
:10B2D0008091ED2E9091EE2E0E94D9818823A1F3CA |
:10B2E00006C08091722E6091712E0E94D95580E225 |
:10B2F0000E94FA81882309F41FCD80EF0E94FA8111 |
:10B30000123021F480E060E00E94D95527960FB6F4 |
:10B31000F894DEBF0FBECDBFCF91DF911F910F918B |
:10B32000FF90EF90DF90CF90BF9008959C014897D9 |
:10B330008C9710F480E00895C901845490408D9753 |
:10B3400010F481E00895C901815790408D9710F461 |
:10B3500082E00895C9018E5990408D9710F483E0E2 |
:10B360000895C9018B5C90408D9710F484E0089596 |
:10B37000C901885F90408D9710F485E008952552AB |
:10B3800031402D32310510F087E0089586E00895B0 |
:10B39000EF92FF920F931F93CF93DF93282F062FE7 |
:10B3A000CA0166E170E00E94EE916D5E70E0EB0113 |
:10B3B000CD59DE4E8CE6E82E81E1F82EE60EF71E22 |
:10B3C000122F1F5FFE014491822F602F20E00E9408 |
:10B3D00008422196212FCE15DF0591F7DF91CF91FD |
:10B3E0001F910F91FF90EF900895CF92DF92EF920F |
:10B3F000FF920F931F93CF93DF930E944B3F85E102 |
:10B4000090E00E94AF54AC0180E060E022E00E9436 |
:10B410005C4389E190E00E94AF54AC018CE067E0AE |
:10B4200020E00E945C43C3E7DEE210E0C880D980E0 |
:10B43000EA80FB801F5FC701B60120E836E948E9D2 |
:10B4400050E00E94159281E0612FA90122E030E0D6 |
:10B4500000E00E94094883E0612F43E252E120E0CE |
:10B460000E942343C701B60128EE33E040E050E0DC |
:10B470000E941592CA01B90120E137E240E050E094 |
:10B480000E9415929B01AC0184E0612FA90124E088 |
:10B4900030E001E00E940948C701B6012AE030E02F |
:10B4A00040E050E00E941592CA01B90124E630E064 |
:10B4B00040E050E00E9415929B01AC0188E0612FB2 |
:10B4C000A90122E030E00E940948CC80DD80EE80B6 |
:10B4D000FF80C701B60120E836E948E950E00E9444 |
:10B4E00015928CE0612FA90122E030E000E00E947B |
:10B4F00009488EE0612F41E252E120E00E9423439F |
:10B50000C701B60128EE33E040E050E00E941592FA |
:10B51000CA01B90120E137E240E050E00E941592F3 |
:10B520009B01AC018FE0612FA90124E030E001E034 |
:10B530000E940948C701B6012AE030E040E050E02F |
:10B540000E941592CA01B90124E630E040E050E0C3 |
:10B550000E9415929B01AC0183E1612FA90122E0B9 |
:10B5600030E00E9409482D96163009F05FCF05C0E3 |
:10B570001093EE2E0093ED2E02C008EC10E080E256 |
:10B580000E94FA818823A1F380EF0E94FA810E9431 |
:10B590004B3FDF91CF911F910F91FF90EF90DF9084 |
:10B5A000CF9008950F93CF93DF930E944B3F89E193 |
:10B5B00090E00E94AF54AC018CE067E020E00E9474 |
:10B5C0005C4380E060E047EF50E120E00E942343CD |
:10B5D0006091492370914A23882777FD8095982FA1 |
:10B5E0000E94EE8F20E030E040EA51E40E94538F49 |
:10B5F0000E94BB8F9B01AC018DE060E0A90124E0BB |
:10B6000030E000E00E949E4781E160E04DE620E0EE |
:10B610000E94084280E061E045E051E120E00E94A4 |
:10B62000234320914B2330914C2340E050E0CA014A |
:10B63000B901E3E0660F771F881F991FEA95D1F7DC |
:10B64000620F731F841F951F2AEF30E040E050E027 |
:10B650000E9415928EE061E0A90123E030E00E9493 |
:10B66000094881E161E049E252E120E00E94234380 |
:10B6700080E062E043E151E120E00E9423438091B9 |
:10B680004D2390914E236AE070E00E940292AB013C |
:10B690008EE062E023E030E00E94094881E162E050 |
:10B6A0004DE620E00E94084280E063E04FE251E175 |
:10B6B00020E00E94234340914F23509150238DE07E |
:10B6C00063E00E94F04880E064E041E251E120E064 |
:10B6D0000E9423434091AD228DE064E050E023E0DE |
:10B6E00030E00E94FA4681E164E046E520E00E94F5 |
:10B6F000084280E065E04DE351E120E00E942343F1 |
:10B7000040915123509152238DE065E023E030E0D9 |
:10B710000E94FA4681E165E041E420E00E9408428F |
:10B7200080E066E04BE451E120E00E942343409139 |
:10B730005323509154238DE066E024E030E00E94D2 |
:10B74000094881E166E045E252E120E00E9423439E |
:10B75000C8ECD0E004C0D093EE2EC093ED2E80E272 |
:10B760000E94FA818823B9F3809157238B7F8093BD |
:10B77000572380EF0E94FA810E944B3FDF91CF91C7 |
:10B780000F910895AF92BF92CF92DF92EF92FF9206 |
:10B790000F931F93DF93CF930F92CDB7DEB7D82EC1 |
:10B7A000E62EF42E922F5801822F8695162F181B05 |
:10B7B0008D2D612F01E099830E949543CD2CC39478 |
:10B7C0001F5F4F2D4250998192508C2D612F292F50 |
:10B7D00000E00E94C941FD0C8D2D6E2D4F2D2E2DA8 |
:10B7E00001E00E94EC401A141B040CF050C0C5018B |
:10B7F00065E070E00E9402926130710561F0623094 |
:10B800007105B9F02E2D21508D2D8C5F4D2D4A5F85 |
:10B81000672B29F553C02E2D21508D2D8C5F622F63 |
:10B8200096E0D90E4D2D01E00E94EC40EDEFEE0EBA |
:10B8300057C02E2D21504D2D4A5F8D2D8C5F622FCC |
:10B8400001E00E94EC40FDEFEF0E8D2D8D5F6E2D1F |
:10B8500044E021E00E94C9418EEFE80E5BC0622FF8 |
:10B8600001E00E94EC409DEFE90E8D2D8D5F6E2D65 |
:10B8700044E021E00E94C941EEEFEE0E8D2D8E5F77 |
:10B880006E2D46E021E00E94C941EA945FC0A114F8 |
:10B89000B10409F461C0C5016BEF7FEF0E94029211 |
:10B8A0006130710581F062307105F9F08D2D8C5F8A |
:10B8B0004D2D4A5F2E2D2F5F672B89F5622F01E0FA |
:10B8C0000E94EC4049C02E2D2F5F8D2D8C5F622F82 |
:10B8D000F6E0DF0E4D2D01E00E94EC4082E0E80E24 |
:10B8E0008D2D83506E2D44E034C02E2D2F5F4D2DB5 |
:10B8F0004A5F8D2D8C5F622F01E00E94EC4092E048 |
:10B90000E90E8D2D8D5F6E2D44E021E00E94C9412E |
:10B91000E2E0EE0E8D2D8E5F6E2D46E01AC0622F96 |
:10B9200001E00E94EC40F2E0EF0E8D2D8D5F6E2D58 |
:10B9300044E021E00E94C94182E0E80E8D2D8E5F37 |
:10B940006E2D46E021E00E94C941E3948C2D6E2DBE |
:10B9500048E021E00E94C9410F90CF91DF911F91F3 |
:10B960000F91FF90EF90DF90CF90BF90AF90089530 |
:10B970004F925F926F927F928F929F92AF92BF92FF |
:10B98000CF92DF92EF92FF920F931F93DF93CF93AB |
:10B99000CDB7DEB72E970FB6F894DEBF0FBECDBF82 |
:10B9A000682E10924A231092492310924C23109231 |
:10B9B0004B2310924E2310924D238FEF8093AD2294 |
:10B9C0001092502310924F2380915823882311F412 |
:10B9D0000E944B3F809146238230A1F480E063E0D7 |
:10B9E00042E152E120E00E94234384E690E09093FC |
:10B9F000EE2E8093ED2E8091ED2E9091EE2E892BE0 |
:10BA0000D1F728C60E94A58C8FE480934523198224 |
:10BA10002DB73EB7275030400FB6F8943EBF0FBE4B |
:10BA20002DBFEDB7FEB7319684E6ADB7BEB7119620 |
:10BA30008C931182DD24D394D2828E010F5F1F4F2D |
:10BA40001483038381E0E82EF12CF682E5820E94C4 |
:10BA5000E58C8AE08983EDB7FEB731968FE6ADB706 |
:10BA6000BEB711968C9382E08183D28214830383C4 |
:10BA7000F682E5820E94E58C88EC90E09093EE2EB1 |
:10BA80008093ED2E8CE291E09093F02E8093EF2E38 |
:10BA9000FF249924CC24DD24772488242DB73EB7B5 |
:10BAA000295F3F4F0FB6F8943EBF0FBE2DBF502EFB |
:10BAB000412E8091D223882309F46EC488EC90E053 |
:10BAC0009093EE2E8093ED2E0E944A8C8091D42389 |
:10BAD0009091D5239093CF2E8093CE2E8091582392 |
:10BAE000813011F40E944B3F10925823E091CE2EEA |
:10BAF000F091CF2EE580F68007811085218132817B |
:10BB0000438154818091772E9091782EA091792E47 |
:10BB1000B0917A2EE816F9060A071B0709F455C0FA |
:10BB20008091732E9091742EA091752EB091762EE7 |
:10BB3000281739074A075B0709F447C0E1ECFEE222 |
:10BB4000DF011D978DE00D9001928150E1F7E4EB4C |
:10BB5000FEE2DF011D978DE00D9001928150E1F72B |
:10BB6000E7EAFEE2DF011D978DE00D900192815022 |
:10BB7000E1F7EAE9FEE2DF011D978DE00D90019209 |
:10BB80008150E1F7EDE8FEE2DF011D978DE00D90B9 |
:10BB900001928150E1F7E0E8FEE2DF011D978DE0C0 |
:10BBA0000D9001928150E1F7EE82FF82088719879C |
:10BBB0002A833B834C835D83A3E7BEE2FE0132967A |
:10BBC0008DE001900D928150E1F731E0631609F0AC |
:10BBD0008CC2E091CE2EF091CF2EED5BFF4F808195 |
:10BBE0000091572380FF04C004600093572314C0C2 |
:10BBF00010E00470107080E10E94FA8190E0802BC8 |
:10BC0000912B892B11F00E94D25A80E40E94FA8174 |
:10BC1000882311F00E94F55986E190E063E270E01C |
:10BC200040E150E021E00E94C44AE091CE2EF09124 |
:10BC3000CF2E22AD33AD40E050E0CA01B901B3E0F0 |
:10BC4000660F771F881F991FBA95D1F7620F731F70 |
:10BC5000841F951F2AEF30E040E050E00E941592CB |
:10BC600081E060E0A90123E030E000E00E940948A3 |
:10BC700084E060E04DE052E120E00E942343E09147 |
:10BC8000CE2EF091CF2E46AD57AD8EE060E023E092 |
:10BC900030E00E94094881E160E04EE120E00E942E |
:10BCA0000842E091CE2EF091CF2E86AD97AD0E9446 |
:10BCB0009659E82FF0E0EE0FFF1FE155FE4E45913B |
:10BCC000549182E160E020E00E942343E091CE2E77 |
:10BCD000F091CF2E46AD57AD8CE061E00E94C8597F |
:10BCE000E091CE2EF091CF2E63A974A9882777FD1D |
:10BCF0008095982F0E94EE8F7B018C0120E030E030 |
:10BD000048E453E40E94D790181654F0C801B701D4 |
:10BD100020E030E048E453EC0E944C8F8823ACF4E0 |
:10BD2000C801B70120E030E040EA51E40E94538F9F |
:10BD30000E94BB8F9B01AC0180E061E0A90124E07F |
:10BD400030E000E00E949E4714C0C801B70120E027 |
:10BD500030E040E05FE30E94DB900E94BB8F9B01DC |
:10BD6000AC0180E061E0A90123E030E000E00E9446 |
:10BD7000564684E061E04DE620E00E940842E091F2 |
:10BD8000CE2EF091CF2E05A916A986E367E04AE0F2 |
:10BD90002EE00E94C25BE091CE2EF091CF2E86A5C0 |
:10BDA00097A588599E4F26AD37AD821B930B68E649 |
:10BDB00071E00E940292182FF92E86E163E24FE0B3 |
:10BDC000960100E00E94494B86E163E24FE0212F9B |
:10BDD0003F2D01E00E94494B87E063E0412F5F2D3A |
:10BDE00023E030E000E00E9409488AE063E04EE191 |
:10BDF00020E00E940842E091CE2EF091CF2E84A543 |
:10BE000095A56AE070E00E94EE91AB0187E062E0E8 |
:10BE100023E030E00E9409488AE062E04DE620E03D |
:10BE20000E9408428BE064E048E052E120E00E947A |
:10BE30002343E091CE2EF091CF2E42A988E064E01A |
:10BE400050E022E030E00E940948E091CE2EF091CF |
:10BE5000CF2EEC5BFF4F808186FF04C083E164E05E |
:10BE60004DE403C083E164E048E520E00E9408421D |
:10BE7000E091CE2EF091CF2EEC5BFF4F808182FFC0 |
:10BE800005C088E065E04CEF51E10BC081FF05C0C3 |
:10BE900088E065E040EF51E104C088E065E044EEF1 |
:10BEA00051E120E00E942343E091CE2EF091CF2E6D |
:10BEB00047A950AD87E066E00E94F0488CE066E05C |
:10BEC00042EE51E120E00E942343E091CE2EF0911A |
:10BED000CF2EEE5BFF4F40818FE066E050E023E025 |
:10BEE00030E000E00E94094882E166E040EE51E166 |
:10BEF00020E00E942343E091CE2EF091CF2EEC5B08 |
:10BF0000FF4F808184FF05C083E166E04DED51E184 |
:10BF100004C083E166E04AED51E120E00E94534312 |
:10BF2000E091CE2EF091CF2E41AD80E067E050E061 |
:10BF300023E030E000E00E94FA4684E067E046E556 |
:10BF400020E00E940842E091CE2EF091CF2E91ADDC |
:10BF500080913524981760F488EB9BE090937223CE |
:10BF60008093712380E290E09093B7228093B62271 |
:10BF7000E091CE2EF091CF2EE25BFF4F40815181B8 |
:10BF800087E067E023E030E000E00E94FA468BE0C3 |
:10BF900067E041E420E00E940842E091CE2EF0915B |
:10BFA000CF2EE05BFF4F408151818EE067E024E0BF |
:10BFB00030E00E94094882E167E046ED51E120E06F |
:10BFC0000E942343E091CE2EF091CF2EED5BFF4FE8 |
:10BFD0008081E354F04080FF73C023A934A980918D |
:10BFE000492390914A238217930724F430934A23DC |
:10BFF00020934923E091CE2EF091CF2E22AD33AD88 |
:10C0000080914B2390914C238217930720F4309317 |
:10C010004C2320934B23E091CE2EF091CF2E24A5DC |
:10C0200035A580914D2390914E238217930720F4DC |
:10C0300030934E2320934D23E091CE2EF091CF2EBE |
:10C0400091AD8091AD22981710F49093AD22E091BC |
:10C05000CE2EF091CF2E27A930AD80914F23909115 |
:10C0600050238217930720F43093502320934F23BB |
:10C07000E091CE2EF091CF2EE25BFF4F0190F08148 |
:10C08000E02D80915123909152238E179F0720F429 |
:10C09000F0935223E0935123E091CE2EF091CF2ED6 |
:10C0A000E05BFF4F0190F081E02D80915323909150 |
:10C0B00054238E179F0720F4F0935423E0935323C7 |
:10C0C000E091CE2EF091CF2EEE5BFF4F8081E254B7 |
:10C0D000F0408093AF2281AD8093AE221092D223A4 |
:10C0E000212F3F2DC9016C011EC183E0681609F0A4 |
:10C0F0001AC1E091CE2EF091CF2E86A597A5885932 |
:10C100009E4F26AD37AD821B930B68E671E00E940F |
:10C110000292B82EA92E0E944B3F80E060E240E8D8 |
:10C1200020E201E00E94EC4080E460E040E420E492 |
:10C130000E94EC408CE067E04CEC51E120E00E9472 |
:10C1400023438EE36BE042E42BE00E94EC4086E167 |
:10C150006EE146E122E20E94EC408AE66EE14AE6A8 |
:10C1600022E20E94EC408EE365E342E425E30E9474 |
:10C17000EC40901609F07EC082E261E144E22FE0DB |
:10C180000E94EC408CE56FE04EE521E10E94EC401E |
:10C1900082E26FE244E221E30E94EC408CE561E33D |
:10C1A0004EE52FE20E94EC4087E790E00E94AF54FA |
:10C1B000AC0189E060E020E00E945C4389E790E008 |
:10C1C0000E94AF54AC0180E063E020E00E945C4339 |
:10C1D0008AE790E00E94AF54AC0184E163E020E084 |
:10C1E0000E945C4388E790E00E94AF54AC0189E074 |
:10C1F00067E020E00E945C4380E060E049EC51E1B0 |
:10C2000020E00E942343E091CE2EF091CF2EE05CFF |
:10C21000FF4F4081552747FD509582E060E023E0C5 |
:10C2200030E000E00E949E4780E067E046EC51E18C |
:10C2300020E00E942343E091CE2EF091CF2EEF5BC1 |
:10C24000FF4F4081552747FD509582E067E023E08E |
:10C2500030E00E949E478FE060E043EC51E120E037 |
:10C260000E94234382E160E04B2D5A2D23E030E011 |
:10C270000E949E4780E10E94FA81882329F09394CE |
:10C2800091E0991508F49924E091CE2EF091CF2EEB |
:10C29000E05CFF4F8191992787FD909562E070E007 |
:10C2A0000E9402927B01F094E194F108F394A0E2E1 |
:10C2B000EA0E10E48081181B882D90E0672D70E055 |
:10C2C0004AE050E020E00E94C44A882D672D49E0F2 |
:10C2D000960100E00E94494B812F90E06E2D70E0A6 |
:10C2E0004AE050E021E00E94C44A812F6E2D49E0CF |
:10C2F0002B2D3A2D01E00E94494BE091CE2EF0917A |
:10C30000CF2EEE5BFF4F8081E254F0408093AF224E |
:10C3100081AD8093AE221092D2232B2D3A2DC901EC |
:10C320006C017E2C812E8091EF2E9091F02E892B26 |
:10C3300019F0FF24F39430C08AE089832DB73EB70B |
:10C34000275030400FB6F8943EBF0FBE2DBFEDB75B |
:10C35000FEB731968FE6ADB7BEB711968C9382E0EB |
:10C36000818381E082835382448281E090E09683DE |
:10C3700085830E94E58C8CE291E09093F02E80936F |
:10C38000EF2EFF24F3942DB73EB7295F3F4F0FB632 |
:10C39000F8943EBF0FBE2DBF80E20E94FA81882331 |
:10C3A00039F48091ED2E9091EE2E892B09F081CBFE |
:10C3B00080EF0E94FA8119828DB79EB707970FB65A |
:10C3C000F8949EBF0FBE8DBFEDB7FEB731968FE6D6 |
:10C3D000ADB7BEB711968C9382E0818311E01283D2 |
:10C3E000CE0101969483838381E090E096838583D8 |
:10C3F0000E94E58C109245231092D2238091ED2E5D |
:10C400009091EE2E2DB73EB7295F3F4F0FB6F894AF |
:10C410003EBF0FBE2DBF892B09F01CC1FF2009F4C0 |
:10C4200019C110927223109271238FEF9FEF909396 |
:10C43000B7228093B6220E944B3F6091732E709179 |
:10C44000742E8091752E9091762E2091772E3091BA |
:10C45000782E4091792E50917A2E0E94CD3A8BE71A |
:10C4600090E00E94AF54AC0180E060E022E00E94C6 |
:10C470005C438CE790E00E94AF54AC0180E062E046 |
:10C4800020E00E945C438DE790E00E94AF54AC0135 |
:10C4900080E063E020E00E945C438AE190E00E943B |
:10C4A000AF54AC0183E167E020E00E945C4385E18A |
:10C4B00090E00E94AF54AC0180E065E020E00E9473 |
:10C4C0005C4389E190E00E94AF54AC018CE067E0EE |
:10C4D00020E00E945C438CED95E090937223809362 |
:10C4E000712380E490E09093B7228093B62210935A |
:10C4F0005823C090732ED090742EE090752EF0903B |
:10C50000762EC701B60120E836E948E950E00E94DE |
:10C51000159281E066E0A90122E030E000E00E948F |
:10C52000094883E066E041EC51E120E00E942343AA |
:10C53000C701B60128EE33E040E050E00E941592BA |
:10C54000CA01B90120E137E240E050E00E941592B3 |
:10C550009B01AC0184E066E0A90124E030E001E049 |
:10C560000E940948C701B6012AE030E040E050E0EF |
:10C570000E941592CA01B90124E630E040E050E083 |
:10C580000E9415929B01AC0188E066E0A90122E0BF |
:10C5900030E00E940948C090772ED090782EE0902D |
:10C5A000792EF0907A2EC701B60120E836E948E9E5 |
:10C5B00050E00E9415928CE066E0A90122E030E094 |
:10C5C00000E00E9409488EE066E04FEB51E120E078 |
:10C5D0000E942343C701B60128EE33E040E050E05B |
:10C5E0000E941592CA01B90120E137E240E050E013 |
:10C5F0000E9415929B01AC018FE066E0A90124E046 |
:10C6000030E001E00E940948C701B6012AE030E0AD |
:10C6100040E050E00E941592CA01B90124E630E0E2 |
:10C6200040E050E00E9415929B01AC0183E166E07E |
:10C63000A90122E030E00E94094880E10E94FA81CD |
:10C640008823D9F388EC90E09093EE2E8093ED2E22 |
:10C650000E944B3F2E960FB6F894DEBF0FBECDBFA3 |
:10C66000CF91DF911F910F91FF90EF90DF90CF90CE |
:10C67000BF90AF909F908F907F906F905F904F9002 |
:10C6800008956F927F928F929F92AF92BF92CF92B6 |
:10C69000DF92EF92FF920F931F93DF93CF930F924E |
:10C6A000CDB7DEB7898383E5809345231092D223EB |
:10C6B00012E333E7632E7724739402E04E0108946B |
:10C6C000811C911C21E0A22EB12C98E7C92ED12CFF |
:10C6D00084E1E82EF12C32C08DB79EB70B970FB6D0 |
:10C6E000F8949EBF0FBE8DBFEDB7FEB73196ADB7C4 |
:10C6F000BEB711966C927182028394828382B68255 |
:10C70000A58280916D2E90916E2E90878783D28620 |
:10C71000C1860E94E58CF092EE2EE092ED2E8DB750 |
:10C720009EB70B960FB6F8949EBF0FBE8DBF80913B |
:10C73000ED2E9091EE2E892BD1F711508091D223BE |
:10C74000882319F4112341F60AC0112341F00E94F5 |
:10C750004A8CE091D423F091D523808117C08BE7D8 |
:10C7600090E00E94AF54AC0180E062E020E00E94C3 |
:10C770005C4384E690E09093EE2E8093ED2E8091C2 |
:10C78000ED2E9091EE2E892BD1F78FEF8983898141 |
:10C790000F90CF91DF911F910F91FF90EF90DF905D |
:10C7A000CF90BF90AF909F908F907F906F900895A3 |
:10C7B0009F92AF92BF92CF92DF92EF92FF920F9330 |
:10C7C0001F93DF93CF930F92CDB7DEB7898381E5B7 |
:10C7D000809345231092D22312E361E7962E01E065 |
:10C7E0005E010894A11CB11C51E0C52ED12C44E17E |
:10C7F000E42EF12C2AC08DB79EB707970FB6F89498 |
:10C800009EBF0FBE8DBFEDB7FEB73196ADB7BEB7B9 |
:10C8100011969C9201830283B482A382D682C58240 |
:10C820000E94E58CF092EE2EE092ED2E8DB79EB731 |
:10C8300007960FB6F8949EBF0FBE8DBF8091ED2E68 |
:10C840009091EE2E892BD1F711508091D22388231D |
:10C8500019F4112381F60FC0112369F00E944A8C4C |
:10C86000E091D423F091D52381918983F0936E2EAA |
:10C87000E0936D2E18C08BE790E00E94AF54AC019E |
:10C8800080E062E020E00E945C4384E690E09093C8 |
:10C89000EE2E8093ED2E8091ED2E9091EE2E892B31 |
:10C8A000D1F78FEF898389810F90CF91DF911F910D |
:10C8B0000F91FF90EF90DF90CF90BF90AF909F903F |
:10C8C00008950F930E944B3F8CE890E00E94AF5474 |
:10C8D000AC0180E060E022E00E945C4380E090E0F8 |
:10C8E0000E94AF54AC0180E067E020E00E945C430E |
:10C8F00081E01FC080915D230E94D863482F8F3F45 |
:10C90000C1F160915D2383E050E021E030E000E080 |
:10C910000E94094860915D2340916D2E50916E2ECA |
:10C9200045595F4F85E020E00E94F24280915D23EF |
:10C930008F5F80935D2380915D238630D8F284E8F9 |
:10C9400090E00E94AF54AC0183E066E020E00E94DA |
:10C950005C438FEF0E94D863282F8F3F51F081E016 |
:10C9600066E041E00E94DD5180935D2380915D236C |
:10C9700001C08FEF0F9108950F931F93CF93DF9313 |
:10C9800000E0CCE3D0E01FE00E944B3F8BE890E05A |
:10C990000E94AF54AC0180E067E022E00E945C435B |
:10C9A00080E090E00E94AF54AC0180E067E020E0BE |
:10C9B0000E945C431092D02E80915923882339F035 |
:10C9C00081E061E04FE25CE320E00E9423431092AB |
:10C9D000D02E38C0E62FF0E0809159239F01280F18 |
:10C9E000311D2E303105CCF4209159238091B72888 |
:10C9F0006F5FE20FF11DEC9FA001ED9F500DFC9FBA |
:10CA0000500D1124819FC0011124480F591F425D10 |
:10CA10005D4E83E020E00E9423438091D02E85303C |
:10CA200061F48091592390E008973CF481E066E03E |
:10CA30004DE25CE320E00E9423438091D02E8F5F83 |
:10CA40008093D02E6091D02E663020F280915A23B0 |
:10CA5000882399F480915923882331F44091B0229E |
:10CA600081E065E020E005C04091B02282E065E011 |
:10CA700021E001E00E948A51082F80915A238130E1 |
:10CA8000A9F48091592390E008973CF04091B0229E |
:10CA900082E066E021E000E006C04091B02282E042 |
:10CAA00065E021E001E00E948A51082F0E3F51F419 |
:10CAB000809159238F5F8093592381E080935A237B |
:10CAC00085E00AC00D3F59F480915923815080932D |
:10CAD000592310925A2382E08093B02255CF0F3F02 |
:10CAE00029F00093B02280915923080F802FDF9105 |
:10CAF000CF911F910F9108955F926F927F928F92C5 |
:10CB00009F92AF92BF92CF92DF92EF92FF920F93DC |
:10CB10001F93DF93CF93CDB7DEB764970FB6F8942A |
:10CB2000DEBF0FBECDBFDD2440E0282F30E0215016 |
:10CB30003040BE016F5F7F4F15C0E42FF0E053E03F |
:10CB4000EE0FFF1F5A95E1F7EA5CF84CE4918E2F47 |
:10CB500090E08217930729F4FB01ED0DF11D40834E |
:10CB6000D3944F5F403948F34093D02E10E0ED2C22 |
:10CB7000FF245E010894A11CB11C2CE3522E9FE0FF |
:10CB8000C92E612C81E0782E470108948108910814 |
:10CB90000E944B3F8AE890E00E94AF54AC0180E0D5 |
:10CBA00060E022E00E945C4380E090E00E94AF548D |
:10CBB000AC0180E067E020E00E945C431092D02E40 |
:10CBC00080915B23882339F081E061E040E65CE3FB |
:10CBD00020E00E9423431092D02E9EC1E62FF0E069 |
:10CBE00080915B239F01280F311D2E153F050CF00E |
:10CBF0007CC120915B238091B7286F5FEA0DFB1DFC |
:10CC0000E20FF11D4081459DA00111248C9DC001C2 |
:10CC10001124480F591F4A585A4E83E020E00E94C1 |
:10CC200023436091D02E262F30E080915B23D501E5 |
:10CC3000A20FB31FFD01E80FF11DE081F0E003E05A |
:10CC4000EE0FFF1F0A95E1F7E95CF84C8491882309 |
:10CC500079F480915B23A80FB11DEC91F0E073E0B3 |
:10CC6000EE0FFF1F7A95E1F7E65CF84CE491ACC05B |
:10CC7000813049F580915B23A80FB11DEC91F0E064 |
:10CC800053E0EE0FFF1F5A95E1F7E65CF84CE49194 |
:10CC9000A0916D2EB0916E2EAE0FB11D0C916F5FF5 |
:10CCA000083F08F45FC082E14DE55CE320E00E94AC |
:10CCB00023436091D02E6F5FA301401B510984E193 |
:10CCC00021E030E00FC1823081F580915B23FD01CE |
:10CCD000E80FF11DE081F0E043E0EE0FFF1F4A9501 |
:10CCE000E1F7E65CF84C249180915B23A80FB11D1D |
:10CCF000EC91F0E033E0EE0FFF1F3A95E1F7E75CCF |
:10CD0000F84C9491E0916D2EF0916E2EE20FF11D92 |
:10CD1000808198236F5F992321F082E149E55CE3EC |
:10CD2000C7C082E145E55CE3C3C08330D1F58091A3 |
:10CD30005B23F501E80FF11DE20FF31FE081F0E046 |
:10CD400023E0EE0FFF1F2A95E1F7E65CF84CE49133 |
:10CD5000A0916D2EB0916E2EAE0FB11D0C910D30C5 |
:10CD600020F46F5F82E1402FBAC0093190F46F5F09 |
:10CD700082E143E55CE320E00E9423436091D02EF2 |
:10CD80006F5F402F50E04C50504083E122E030E094 |
:10CD9000A9C0093109F0A9C06F5F82E14FE45CE3EB |
:10CDA00087C08430D1F480915B23F501E80FF11D39 |
:10CDB000E20FF31FE081F0E093E0EE0FFF1F9A9582 |
:10CDC000E1F7E65CF84CE4916F5FA0916D2EB091B5 |
:10CDD0006E2EAE0FB11D4C9181C08530F1F4809163 |
:10CDE0005B23F501E80FF11DE20FF31FE081F0E096 |
:10CDF00083E0EE0FFF1F8A95E1F7E65CF84CE491C3 |
:10CE00006F5FA0916D2EB0916E2EAE0FB11D4C9143 |
:10CE10004C9DA001112482E163C0863009F065C0F9 |
:10CE200020916D2E30916E2E80915B23FD01E80FD5 |
:10CE3000F11DE081F0E003E0EE0FFF1F0A95E1F73E |
:10CE4000E65CF84CE491C9018E0F911DFC01E08174 |
:10CE5000EE2329F46F5F82E14BE45CE329C0E1300B |
:10CE600029F46F5F82E147E45CE322C0E23029F4F9 |
:10CE70006F5F82E143E45CE31BC0E33029F46F5F42 |
:10CE800082E14FE35CE314C0E43029F46F5F82E198 |
:10CE90004BE35CE30DC0E53029F46F5F82E147E3CB |
:10CEA0005CE306C06F5FE63039F482E143E35CE3A4 |
:10CEB00020E00E94234319C080915B23A80FB11D7D |
:10CEC000EC91F0E073E0EE0FFF1F7A95E1F7E65C7E |
:10CED000F84CE4912E0F311DF901408182E150E0C0 |
:10CEE00023E030E000E00E9409488091D02E853098 |
:10CEF00071F480915B2390E00596881599053CF4C8 |
:10CF000081E066E041E35CE320E00E9423438091FE |
:10CF1000D02E8F5F8093D02E6091D02E663008F493 |
:10CF20005DCE80915C238823E9F480915B23882384 |
:10CF300081F4F6E0FD1530F44091B12281E065E026 |
:10CF400020E00CC04091B12281E06D2D20E000E096 |
:10CF500006C04091B12282E065E021E001E00E943C |
:10CF60008A51182F80915C238130B9F480915B2322 |
:10CF700090E006968E159F053CF04091B12282E02C |
:10CF800066E021E000E006C04091B12282E065E069 |
:10CF900021E001E00E948A51182F1E3F51F4809138 |
:10CFA0005B238F5F80935B2381E080935C2385E02C |
:10CFB0000AC01D3F59F480915B23815080935B230D |
:10CFC00010925C2382E08093B122E2CD1F3F59F0A2 |
:10CFD0001093B122E0915B23F0E03197E10FF11D56 |
:10CFE000EC0FFD1F1181812F64960FB6F894DEBF00 |
:10CFF0000FBECDBFCF91DF911F910F91FF90EF90AA |
:10D00000DF90CF90BF90AF909F908F907F906F9068 |
:10D010005F9008952F923F924F925F926F927F920E |
:10D020008F929F92AF92BF92CF92DF92EF92FF9238 |
:10D030000F931F93DF93CF9300D00F92CDB7DEB73E |
:10D04000082F0E944B3FC02EDD247601A3E0EE0C9A |
:10D05000FF1CAA95E1F7F701E95CF84C149189E807 |
:10D0600090E00E94AF54AC0180E060E022E00E94BA |
:10D070005C4380E090E00E94AF54AC0180E067E048 |
:10D0800020E00E945C43163009F490C32091B72839 |
:10D090008CE390E0C89EA001C99E500DD89E500D13 |
:10D0A00011248FE0289F90011124420F531F4A58EA |
:10D0B0005A4E80E062E020E00E942343112309F0F1 |
:10D0C000DAC084E064E041ED5CE320E00E942343A9 |
:10D0D0008CE066E04CEC5CE320E00E94234381E0BE |
:10D0E00090E00E94AF54AC0180E067E020E00E9435 |
:10D0F0005C436701F701E85CF84C149129E337E3DE |
:10D10000E20EF31EF701E490C6010496E6E38E2ECC |
:10D11000E7E39E2E880E991EF4012491E0916D2E76 |
:10D12000F0916E2EE20FF11D608020915D23820F41 |
:10D13000911D8A5C984CFC01749085E064E0412F5D |
:10D1400050E023E030E000E00E94094889E064E01C |
:10D150004E2D50E023E030E00E94094881E164E078 |
:10D16000472D50E023E030E00E940948F62CCE2CF9 |
:10D17000DD24A12EBB2480E064E04F2D50E023E0AD |
:10D1800030E000E00E9409484F2C5524C2019695DA |
:10D19000982F882797958795B6010E940292462F6F |
:10D1A00080E068E226E001E00E94C941F1E3FE155B |
:10D1B000A8F480E40E94FA81182F80E463E00E94C2 |
:10D1C0005382182B21F04C145D040CF4F39480E886 |
:10D1D0000E94FA81182F80E863E014C080E40E9466 |
:10D1E000FA81182F80E462E00E945382182B21F00C |
:10D1F0004C145D040CF4F39480E80E94FA81182F1B |
:10D2000080E862E00E945382182BB1F08F2D90E0ED |
:10D21000A816B9068CF401979695982F88279795AC |
:10D220008795B6010E940292862F68E240E826E0C8 |
:10D2300000E00E94C941FA9480E20E94158288238E |
:10D2400041F080E068E240E826E000E00E94C94149 |
:10D25000F72C80E10E940482882331F0F61409F44F |
:10D26000CEC3F401849193C280E20E940482882399 |
:10D2700009F481CFC4C3113009F017C184E064E020 |
:10D280004AEB5CE320E00E9423438CE066E045EB40 |
:10D290005CE320E00E94234381E090E00E94AF54D1 |
:10D2A000AC0180E067E020E00E945C4353E0CC0CDE |
:10D2B000DD1C5A95E1F7F601E85CF84C949029E3FF |
:10D2C00037E3E20EF31EF7011491C601049636E32C |
:10D2D000632E37E3732E680E791EF3012491E091DB |
:10D2E0006D2EF0916E2EE20FF11D508020915D2386 |
:10D2F000820F911D8A5C984CFC01C490F7EFFC15DD |
:10D3000080F481E164E040EB5CE320E00E94234391 |
:10D3100040E051E04C19510983E164E021E030E044 |
:10D3200006C081E164E04C2D50E023E030E000E0F5 |
:10D330000E940948D52CA12EBB24892C99242FEFBB |
:10D34000222E312C2D2D30E03B832A8337EF3D15E3 |
:10D3500008F0EEC380E064E04DEA5CE320E00E9468 |
:10D360002343E12C91E0F92E8A819B81E81AF90A86 |
:10D3700082E064E0A70121E030E000E00E9409487B |
:10D3800084E0EE0CFF1C8A95E1F780E068E24E2D08 |
:10D3900026E001E00E94C94180E40E94FA81182F32 |
:10D3A00080E461E00E945382182BA1F539C0EA8124 |
:10D3B000FB81EA15FB056CF4D394F8EFDF1649F412 |
:10D3C00080E068E240E826E000E00E94C941DD24F8 |
:10D3D000DA9480E80E94FA81182F80E863E00E94C6 |
:10D3E0005382182BE1F18D2D90E088169906BCF53B |
:10D3F00001979695982F882797958795B5010E9454 |
:10D400000292862F68E240E826E000E00E94C941CF |
:10D41000DA9425C02A813B81283F310509F0DA944E |
:10D4200080E80E94FA81182F80E861E00E94538210 |
:10D43000182BA9F0C1018D1991098295807F68E2AE |
:10D4400040E826E000E00E94C941D39441F480E026 |
:10D4500068E240E826E00E94C94117EFD12E80E241 |
:10D460000E941582882341F080E068E240E826E0CF |
:10D4700000E00E94C941DC2C80E10E9404828823E4 |
:10D4800069F0D51409F4BBC2F3018491E0916D2ECB |
:10D49000F0916E2EE80FF11DD082A7C280E20E94AB |
:10D4A0000482882309F44ECFAAC2123009F09AC030 |
:10D4B0008BE690E00E94AF54AC0183E064E020E092 |
:10D4C0000E945C438CE690E00E94AF54AC0183E084 |
:10D4D00065E020E00E945C4380E090E00E94AF5451 |
:10D4E000AC0180E067E020E00E945C4329E337E381 |
:10D4F000E20EF31EF7010491C601B3E0880F991FF5 |
:10D50000BA95E1F70496A6E3CA2EA7E3DA2EC80E71 |
:10D51000D91EF6012491E0916D2EF0916E2EE20F4E |
:10D52000F11DE08020915D23820F911D8A5C984C53 |
:10D53000FC014491413029F488E064E04BEA5CE36B |
:10D5400006C0442339F488E065E049EA5CE320E062 |
:10D550000E9423431E2DF12EF02261F081E064E051 |
:10D5600047EA5CE320E00E94234381E065E045EA6E |
:10D570005CE30BC081E064E043EA5CE320E00E94EE |
:10D58000234381E065E041EA5CE320E00E9423431D |
:10D5900080E80E94FA81882319F0FF2009F41027FF |
:10D5A00080E40E94FA81882321F0812F802309F0F2 |
:10D5B000102780E10E94FA81882369F01E1509F482 |
:10D5C0001EC2F6018491E0916D2EF0916E2EE80F4F |
:10D5D000F11D10830AC280E20E940482882309F4AC |
:10D5E000BACF0DC2133009F0E1C084E064E04FE827 |
:10D5F0005CE320E00E9423438CE066E04AE85CE3C1 |
:10D6000020E00E94234381E090E00E94AF54AC01EF |
:10D6100080E067E020E00E945C43F3E0CC0CDD1C7E |
:10D62000FA95E1F7F601E85CF84C149129E337E349 |
:10D63000E20EF31EF7014490C601049676E3A72E8E |
:10D6400077E3B72EA80EB91EF5012491E0916D2E57 |
:10D65000F0916E2EE20FF11D508020915D23820F1C |
:10D66000911D8A5C984CFC01E49081E164E04E2DB0 |
:10D6700050E023E030E000E00E940948F52CC42C83 |
:10D68000DD2464EF662E6FEF762E6C0C7D1C812EF0 |
:10D6900099242F2C3324261437043CF480E064E0D2 |
:10D6A0004F2D50E023E030E011C02C143D048CF4E9 |
:10D6B00080E064E048E85CE320E00E942343A101AD |
:10D6C0004C50504081E064E022E030E000E00E94F5 |
:10D6D0000948F41439F480E064E044E85CE320E0B5 |
:10D6E0000E942343C1019695982F88279795879587 |
:10D6F000B6010E940292462F80E068E226E001E037 |
:10D700000E94C94180E40E94FA81182F80E462E0FF |
:10D710000E945382182B21F02C143D040CF4F39436 |
:10D7200080E80E94FA81182F80E862E00E9453820C |
:10D73000182BB1F08F2D90E0881699068CF4019784 |
:10D740009695982F882797958795B6010E94029203 |
:10D75000862F68E240E826E000E00E94C941FA9482 |
:10D7600080E20E941582882341F080E068E240E870 |
:10D7700026E000E00E94C941FE2C80E10E94048264 |
:10D78000882369F0F51409F43AC1F5018491E09118 |
:10D790006D2EF0916E2EE80FF11DF08226C180E211 |
:10D7A0000E940482882309F474CF29C1143009F03F |
:10D7B000A9C080E067E04EE65CE320E00E942343DE |
:10D7C000F02FFD55F983F23050F48CE190E00E9487 |
:10D7D000AF54AC0185E066E020E00E945C43402E3F |
:10D7E000552433E0440C551C3A95E1F72AE337E31E |
:10D7F000420E531EF2018491E0916D2EF0916E2E37 |
:10D80000E80FF11DE0800E2DFF2428E0722E97E036 |
:10D81000892E912C81E0A82EB12C1092D02EC02EF2 |
:10D82000DD241CC0C601022E02C0959587950A947E |
:10D83000E2F780FF06C0872D821B64E04CE65CE3C4 |
:10D8400005C0872D821B64E04AE65CE320E00E946D |
:10D8500023438091D02E8F5F8093D02E2091D02EA5 |
:10D86000283000F31F2D1F5F812F65E048E65CE341 |
:10D8700020E00E94234380E80E94FA81882311F46B |
:10D880001F2D0AC0812F65E046E65CE320E00E9480 |
:10D890002343183009F410E0F981F23050F480E4A9 |
:10D8A0000E941582882329F0002311F40AEA01C09E |
:10D8B00000E080E40E940482882351F0C401811BAF |
:10D8C0009109950102C0220F331F8A95E2F70227C2 |
:10D8D00080E10E940482882369F00E1509F48FC04C |
:10D8E000F2018491E0916D2EF0916E2EE80FF11D02 |
:10D8F00000837BC080E20E940482882309F07FC0FD |
:10D90000F12E8BCF153009F07EC081E090E00E94AF |
:10D91000AF54AC0180E067E020E00E945C43802EC1 |
:10D92000992403E0880C991C0A95E1F72AE337E370 |
:10D93000820E931EF4018491E0916D2EF0916E2E73 |
:10D94000E80FF11DB08086E690E063E270E040E110 |
:10D9500050E021E00E94C44AFB2C1FE0A12E0AC027 |
:10D96000FE1439F086E663E24FE0960100E00E9483 |
:10D97000494BFE2CFA9C6001112486E663E24FE0DD |
:10D98000960101E00E94494B80E40E94FA81182F21 |
:10D9900080E461E00E945382182B11F4EF2C06C042 |
:10D9A000EF2CE394F8E1EF1609F4EE2480E80E94EE |
:10D9B000FA81182F80E861E00E945382182B29F029 |
:10D9C000EE2011F4B8E1EB2EEA9480E10E9404828B |
:10D9D000882379F0EB1499F0F4018491E0916D2E95 |
:10D9E000F0916E2EE80FF11DE08281E080935E23BE |
:10D9F00006C080E20E940482882309F4B1CF80EF40 |
:10DA00000E94FA81BBC0163009F0B8C0802E99245C |
:10DA1000A3E0880C991CAA95E1F72AE337E3820E6C |
:10DA2000931E80E090E00E94AF54AC0180E067E07C |
:10DA300020E00E945C43BB247724AA24A39409C05D |
:10DA4000BB2039F081E061E044E65CE320E00E9425 |
:10DA50002343EB2CFF248701F4E0000F111FFA95FC |
:10DA6000E1F70E0D1F1D0A54144C44245524620185 |
:10DA7000CE0CDF1C37E0C316D1043CF4642D6F5F7D |
:10DA800083E0A80120E00E94234385E0481659F472 |
:10DA900096E0C916D1043CF481E066E042E65CE31E |
:10DAA00020E00E9423430894411C511C0F5E1F4F2D |
:10DAB000E6E04E165104D9F6772039F4BB2069F41C |
:10DAC00081E065E04A2D20E00CC0BB2031F082E00F |
:10DAD00066E04A2D21E000E005C082E065E04A2DC5 |
:10DAE00021E001E00E942252982F8E3F31F4B3943E |
:10DAF00077247394E5E0AE2EA3CF8D3F29F4BA943A |
:10DB0000772472E0A72E9CCF8C3FC1F1883008F0BB |
:10DB100097CFF4018491E0916D2EF0916E2EE80F75 |
:10DB2000F11DB90EBA94B08281E080935E2326C0C5 |
:10DB300080E064E04D2D50E023E030E000E00E9402 |
:10DB400009488A819B819695982F88279795879574 |
:10DB5000B5010E940292462F80E068E226E001E0D3 |
:10DB60000E94C94180E40E94FA81182F80E463E09A |
:10DB70000E945382182B09F01ACC2BCC0F900F90D7 |
:10DB80000F90CF91DF911F910F91FF90EF90DF9059 |
:10DB9000CF90BF90AF909F908F907F906F905F904D |
:10DBA0004F903F902F900895FF920F931F930E94E4 |
:10DBB0004B3F84E890E00E94AF54AC0180E061E00C |
:10DBC00020E00E945C4385E890E00E94AF54AC01E5 |
:10DBD00080E063E020E00E945C4386E890E00E94E1 |
:10DBE000AF54AC0180E067E020E00E945C4313E0AA |
:10DBF000B5E0FB2E85E063E0412F50E021E030E00E |
:10DC000000E00E9409488EE063E04F2D50E021E0E3 |
:10DC100030E00E94094880E80E94FA81882321F0C0 |
:10DC20001F5F163009F411E080E40E94FA81882316 |
:10DC300031F0F39486E0F81611F4FF24F39480E1B8 |
:10DC40000E94FA81882309F470C080E065E049EF02 |
:10DC50005CE320E00E94234387E890E00E94AF54F9 |
:10DC6000AC0180E065E020E00E945C4383E090E04E |
:10DC70000E94AF54AC018CE067E020E00E945C435E |
:10DC800080E10E94FA818823C1F1812F0E94D8632C |
:10DC90008117B9F48F2D0E9441638F1591F480E0B4 |
:10DCA00065E043EE5CE320E00E94234388E890E0D7 |
:10DCB0000E94AF54AC0180E065E020E00E945C432C |
:10DCC0000FC08BE190E00E94AF54AC0180E065E0B2 |
:10DCD00020E00E945C4386E065E04EE00E947643CF |
:10DCE00084E690E09093EE2E8093ED2E8091ED2EC1 |
:10DCF0009091EE2E892BD1F721C080E20E94FA810B |
:10DD0000882309F4BDCF80EF0E94FA8180E065E0AE |
:10DD100045E10E94764386E890E00E94AF54AC0152 |
:10DD200080E067E020E00E945C4380E20E94FA818C |
:10DD3000882309F45FCF80EF0E94FA811F910F9131 |
:10DD4000FF9008950F931F930E94628E0E9461645A |
:10DD500080935D2380915D238F3F09F424C18091DE |
:10DD60005D23863019F40E94D46D1DC10E944B3F83 |
:10DD70008EE790E00E94AF54AC0180E060E022E0CA |
:10DD80000E945C4340915D23405D89E060E022E0B9 |
:10DD90000E9408428FE790E00E94AF54AC0183E0FC |
:10DDA00062E020E00E945C4380E890E00E94AF5473 |
:10DDB000AC0183E063E020E00E945C4380E090E0FF |
:10DDC0000E94AF54AC0180E067E020E00E945C4319 |
:10DDD00082E063E042E020E000E00E948A518F3F51 |
:10DDE00009F4E1C0833009F03CC080915D230E94BA |
:10DDF000D86380915D230E94416390915D238917D0 |
:10DE000091F480E062E045E10E94764380E063E0C7 |
:10DE100045E10E94764381E890E00E94AF54AC0156 |
:10DE20008BE060E011C080E062E045E10E94764353 |
:10DE300080E063E045E10E9476438BE190E00E9440 |
:10DE4000AF54AC0180E064E020E00E945C4380E2DB |
:10DE50009EE424EF31E0F9013197F1F70197D9F70A |
:10DE6000A2C080915D238F3F09F49DC080915D2306 |
:10DE70000E94D8638F3F09F496C0109259231092E4 |
:10DE80005A2381E08093B02210925E2311E00E9419 |
:10DE9000BC64082F8F3F71F010925B2310925C23BB |
:10DEA0001093B122802F0E947C658F3F81F30E94E6 |
:10DEB0000A68F8CF80915E23813009F074C00E9417 |
:10DEC0004B3F82E890E00E94AF54AC0180E060E0FC |
:10DED00022E00E945C4340915D23405D89E060E068 |
:10DEE00022E00E94084240915D2389E060E050E01A |
:10DEF00021E030E000E00E9409488BE690E00E94BB |
:10DF0000AF54AC0183E062E020E00E945C438CE609 |
:10DF100090E00E94AF54AC0183E063E020E00E94F7 |
:10DF20005C4380E090E00E94AF54AC0180E067E089 |
:10DF300020E00E945C4382E063E042E020E00E9437 |
:10DF40008A51823081F580915D230E9441639091D6 |
:10DF50005D23891791F483E890E00E94AF54AC01EF |
:10DF600083E064E020E00E945C4381E890E00E944E |
:10DF7000AF54AC0183E065E007C08BE190E00E9404 |
:10DF8000AF54AC0180E064E020E00E945C4384E692 |
:10DF900090E09093EE2E8093ED2E8091ED2E909157 |
:10DFA000EE2E892BD1F71F910F9108952F923F925A |
:10DFB0004F925F926F927F928F929F92AF92BF9299 |
:10DFC000CF92DF92EF92FF920F931F93DF93CF9345 |
:10DFD000CDB7DEB728970FB6F894DEBF0FBECDBF22 |
:10DFE00084ED91E090938900809388000E944B3FDC |
:10DFF00085E19DE362E00E94FB4287E065E043E14A |
:10E000005DE320E00E94234380E165E040E15DE3C1 |
:10E0100020E00E94234382E090E00E94AF54AC01D4 |
:10E0200080E067E020E00E945C4382E167E04CE032 |
:10E030005DE320E00E94234383E067E148E728E0B6 |
:10E0400001E00E94954387E167E147E12FE10E94EB |
:10E05000EC408BE267E14BE22FE10E94EC408DE364 |
:10E0600067E143E028E00E94C94183E567E143E5B9 |
:10E070002FE10E94EC4087E667E147E62FE10E942E |
:10E08000EC4084E065E040E050E023E030E000E078 |
:10E090000E9409488CE065E046E950E023E030E06A |
:10E0A0000E94124616E946E9442E512C38EC632EA4 |
:10E0B000712C20E8222E312C80E40E94FA818823E2 |
:10E0C00031F480E463E00E9453828823E1F1113E41 |
:10E0D000D0F51639F8F4B201611B7109882777FD74 |
:10E0E0008095982F0E94EE8F2DEC3CEC4CE45FEB7A |
:10E0F0000E94DB9020E030E04CE752E40E94E88E82 |
:10E100000E94C08FDC01CB0168E141E026E000E025 |
:10E110000E94C9411F5F1B3469F0143659F01D3746 |
:10E1200049F0163939F01F3A29F0183C19F0113E20 |
:10E1300009F080C070927223609271233092B722EE |
:10E140002092B62277C080E80E94FA81882339F4B1 |
:10E1500080E863E00E945382882309F44DC01C3498 |
:10E1600008F44AC0173958F1612F70E066597040C1 |
:10E17000882777FD8095982F0E94EE8F2DEC3CEC40 |
:10E180004CE45FE30E94DB905B016C0120E030E037 |
:10E190004CE752E40E94E88E0E94C08F6D837E831C |
:10E1A0008F839887C601B5010E94C08F9B01AC0187 |
:10E1B0008D8168E1422F26E000E00E94C941412F95 |
:10E1C00041504B3461F0443651F04D3741F04639FF |
:10E1D00031F04F3A21F0483C11F0413E41F4709249 |
:10E1E0007223609271233092B7222092B622142FAC |
:10E1F0004B3400F51BE44AC080E10E94FA81882379 |
:10E2000009F4CAC084E068E146E726E000E00E9425 |
:10E21000C9418DE367E143E028E001E00E94C94184 |
:10E2200070927223609271233092B7222092B622AC |
:10E2300016E902C0163950F1E12EFF248AE69FEF5D |
:10E24000E80EF91EB701882777FD8095982F0E9468 |
:10E25000EE8F2DEC3CEC4CE45FE30E94DB900E94DF |
:10E26000C08F9B01AC018FE368E1422F26E001E003 |
:10E270000E94C941EE0CFF1C84E065E0A70123E089 |
:10E2800030E000E00E9409488EE33EC04201811A5E |
:10E290009108B401882777FD8095982F0E94EE8F12 |
:10E2A00069837A838B839C832DEC3CEC4CE45FEB9D |
:10E2B0000E94DB9020E030E04CE752E40E94E88EC0 |
:10E2C0000E94C08F5B016C0169817A818B819C8186 |
:10E2D0002DEC3CEC4CE45FE30E94DB900E94C08F8D |
:10E2E0009B01AC018A2D68E1422F26E001E00E94EB |
:10E2F000C941880C991C84E065E0A40123E030E06A |
:10E3000000E00E9409488DE367E142E028E001E077 |
:10E310000E94C9418CE065E0412F50E023E030E0ED |
:10E3200000E00E94124683E067E143E02FE101E054 |
:10E330000E94EC4087E167E147E12FE10E94EC4059 |
:10E340008BE267E14BE22FE10E94EC4083E567E15D |
:10E3500043E52FE10E94EC4087E667E147E62FE1C5 |
:10E360000E94EC408BE767E14BE72FE10E94EC4015 |
:10E37000612F70E0882777FD8095982F0E94EE8F9F |
:10E3800020E030E048E450E40E94DB900E94C08F1F |
:10E39000709389006093880080E20E94FA8188234C |
:10E3A00009F48ACE80EF0E94FA8128960FB6F8947D |
:10E3B000DEBF0FBECDBFCF91DF911F910F91FF90B8 |
:10E3C000EF90DF90CF90BF90AF909F908F907F9015 |
:10E3D0006F905F904F903F902F9008950E944B3F19 |
:10E3E00080E063E04AEC56E422E00E94234380E0B0 |
:10E3F00064E045EB56E422E00E94234380E197E28B |
:10E4000024EF31E0F9013197F1F70197D9F7089539 |
:10E410001F93182F8093EA2E0E944B3F81E790E0D4 |
:10E420000E94AF54AC0180E062E020E00E945C43B7 |
:10E43000112319F0113069F405C08FE062E04BEF51 |
:10E4400055E404C08FE062E046EF55E420E00E940E |
:10E45000234381E090E00E94AF54AC0180E067E08C |
:10E4600020E00E945C4380E40E94FA81882351F0FE |
:10E47000112341F48FE062E041EF55E420E00E9477 |
:10E48000234311E080E80E94FA81882351F0113083 |
:10E4900041F48FE062E04CEE55E420E00E9423431B |
:10E4A00010E080E10E94FA81882321F081E08093CE |
:10E4B0005F230CC080E20E94FA818823A1F280EFE2 |
:10E4C0000E94FA8110925F231091EA2E10937B280C |
:10E4D000812F1F910895EF92FF920F931F93082FA2 |
:10E4E000E62EF42E122F8093EA2E0E944B3F812FAE |
:10E4F00090E00E94AF54AC0180E062E020E00E9416 |
:10E500005C43013051F0013028F0023049F0033013 |
:10E51000A1F409C086E590E008C087E590E005C059 |
:10E5200088E590E002C089E590E00E94AF54AC011C |
:10E530008AE062E020E00E945C4381E090E00E947B |
:10E54000AF54AC0180E067E020E00E945C4311E042 |
:10E5500080E40E94FA81882309F10F15F8F41093E2 |
:10E560005F230F5F013051F0013028F0023049F095 |
:10E570000330A1F409C086E590E008C087E590E08B |
:10E5800005C088E590E002C089E590E00E94AF54A4 |
:10E59000AC018AE062E020E00E945C4380E80E94D7 |
:10E5A000FA81882309F1E016F8F410935F230150F3 |
:10E5B000013051F0013028F0023049F00330A1F46D |
:10E5C00009C086E590E008C087E590E005C088E5D1 |
:10E5D00090E002C089E590E00E94AF54AC018AE06F |
:10E5E00062E020E00E945C4380E10E94FA8188237F |
:10E5F00069F480E20E94FA81882309F4A9CF80EFB0 |
:10E600000E94FA8110925F230091EA2E802F1F91C1 |
:10E610000F91FF90EF9008950F931F93082F122FE3 |
:10E620008093EA2E0E944B3F812F90E00E94AF54CE |
:10E63000AC0180E062E020E00E945C43002319F01E |
:10E64000013071F403C08CE690E002C08BE690E0EC |
:10E650000E94AF54AC0181E162E020E00E945C4383 |
:10E6600081E090E00E94AF54AC0180E067E020E0E0 |
:10E670000E945C4380E40E94FA81882369F00023B1 |
:10E6800059F48BE690E00E94AF54AC0181E162E066 |
:10E6900020E00E945C4301E080E80E94FA81882328 |
:10E6A00069F0013059F48CE690E00E94AF54AC015F |
:10E6B00081E162E020E00E945C4300E080E10E9492 |
:10E6C000FA81882321F081E080935F230CC080E2EF |
:10E6D0000E94FA81882371F280EF0E94FA811092E1 |
:10E6E0005F230091EA2E802F1F910F9108950F93C1 |
:10E6F0001F93082F122F8093EA2E0E944B3F812FE9 |
:10E7000090E00E94AF54AC0180E062E020E00E9403 |
:10E710005C43002319F0013071F403C089E290E0FA |
:10E7200002C088E290E00E94AF54AC0181E162E057 |
:10E7300020E00E945C4381E090E00E94AF54AC0175 |
:10E7400080E067E020E00E945C4380E40E94FA8160 |
:10E75000882369F0002359F488E290E00E94AF54C6 |
:10E76000AC0181E162E020E00E945C4301E080E8CE |
:10E770000E94FA81882369F0013059F489E290E01F |
:10E780000E94AF54AC0181E162E020E00E945C4352 |
:10E7900000E080E10E94FA81882341F081E08093CB |
:10E7A0005F2300938B280E94AC380EC080E20E9449 |
:10E7B000FA81882351F280EF0E94FA8110925F2340 |
:10E7C0000091EA2E00938B28802F1F910F910895BE |
:10E7D0000F931F93182F8093EA2E0E944B3F85E6DC |
:10E7E00090E00E94AF54AC0180E062E020E00E9423 |
:10E7F0005C43112319F0113071F403C080E590E0FF |
:10E8000002C081E590E00E94AF54AC018FE062E06D |
:10E8100020E00E945C4381E090E00E94AF54AC0194 |
:10E8200080E067E020E00E945C4301E080E40E9419 |
:10E83000FA81882379F0112369F400935F2381E53D |
:10E8400090E00E94AF54AC018FE062E020E00E94B3 |
:10E850005C4311E080E80E94FA81882379F011304E |
:10E8600069F410935F2380E590E00E94AF54AC01FF |
:10E870008FE062E020E00E945C4310E080E10E94B3 |
:10E88000FA81882361F480E20E94FA81882371F280 |
:10E8900080EF0E94FA8110925F231091EA2E812F5F |
:10E8A0001F910F910895DF92EF92FF920F931F93A4 |
:10E8B000F82ED62EE42E122F0E944B3F812F90E08F |
:10E8C0000E94AF54AC0180E062E020E00E945C4313 |
:10E8D000F092EA2E80E162E04F2D50E023E030E03C |
:10E8E00000E00E94094881E090E00E94AF54AC0132 |
:10E8F00080E067E020E00E945C4311E080E40E9439 |
:10E90000FA81882331F480E462E00E9453828823F4 |
:10E9100071F0FE1460F410935F23F39480E162E0E1 |
:10E920004F2D50E023E030E000E00E94094880E8ED |
:10E930000E94FA81882331F480E862E00E945382C9 |
:10E94000882371F0DF1460F410935F23FA9480E160 |
:10E9500062E04F2D50E023E030E000E00E940948E3 |
:10E9600080E10E94FA81882361F480E20E94FA81AA |
:10E97000882321F280EF0E94FA8110925F23F090A9 |
:10E98000EA2E8F2D1F910F91FF90EF90DF90089549 |
:10E99000CF92DF92EF92FF920F931F93CF93DF936B |
:10E9A000EC016B017A010E944B3F82E790E00E94EC |
:10E9B000AF54AC0180E062E020E00E945C4384E759 |
:10E9C00090E00E94AF54AC0180E065E020E00E943E |
:10E9D0005C4385E790E00E94AF54AC0180E066E0C4 |
:10E9E00020E00E945C43D093D22EC093D12E80E1D0 |
:10E9F00062E0AE0124E030E000E00E94094881E0DE |
:10EA000090E00E94AF54AC0180E067E020E00E94FB |
:10EA10005C4386EF9FEFE80EF91E11E080E40E9450 |
:10EA2000FA81882331F480E462E00E9453828823D3 |
:10EA300091F0CE15DF0578F410935F232A96D093DA |
:10EA40007D28C0937C2880E162E0AE0124E030E0C4 |
:10EA500000E00E94094880E80E94FA81882331F48E |
:10EA600080E862E00E945382882391F0CC16DD0694 |
:10EA700078F410935F232A97D0937D28C0937C2845 |
:10EA800080E162E0AE0124E030E000E00E9409484D |
:10EA900080E10E94FA81882339F50E94A04C4091C0 |
:10EAA00043235091442388E063E020E030E000E01D |
:10EAB0000E94124683E063E047EE55E420E00E94A6 |
:10EAC000234380E20E94FA81882309F4A7CF80EFD4 |
:10EAD0000E94FA8110925F23C091D12ED091D22E44 |
:10EAE000D0937D28C0937C28CE01DF91CF911F91D8 |
:10EAF0000F91FF90EF90DF90CF9008956F927F92EB |
:10EB00008F929F92AF92BF92CF92DF92EF92FF923D |
:10EB10000F931F93CF93DF931092702E10925F2369 |
:10EB20000E944B3FBB249924AA24A39438E4632E6B |
:10EB3000712C22E1822E01C0A02E0E944B3F80E763 |
:10EB400090E00E94AF54AC0180E060E022E00E94BF |
:10EB50005C4380E090E00E94AF54AC0180E067E04D |
:10EB600020E00E945C43BB2039F081E061E045EE8B |
:10EB700055E420E00E942343CB2CDD24C69C800179 |
:10EB8000C79C100DD69C100D1124C0E0D0E07E0172 |
:10EB9000EC0CFD1C82E0E816F10484F44091B728E7 |
:10EBA000CE018F5F682F489DA0011124400F511F97 |
:10EBB0004D5A5A4B83E020E00E942343C53049F46C |
:10EBC000EF2839F481E066E043EE55E420E00E944E |
:10EBD00023432196085B1F4FC630D105C1F699200B |
:10EBE00069F4BB2029F481E062E04A2D20E00AC0EC |
:10EBF00082E065E04A2D21E001E005C082E066E0A8 |
:10EC00004A2D21E000E00E948A51082F8E3F31F406 |
:10EC1000B3949924939495E0A92EA5CF8D3F29F420 |
:10EC2000BA94992482E0A82E9ECF8F3F39F4809128 |
:10EC30005F23813059F50E94AC3828C090E08B0DDD |
:10EC4000911D8130910549F480917B2860E041E07D |
:10EC50000E94087280937B2811C0029709F06CCF44 |
:10EC600080917C2890917D2860E070E04FE057E231 |
:10EC70000E94C87490937D2880937C2880915F23A4 |
:10EC8000813009F059CF0E94AC3856CFDF91CF9137 |
:10EC90001F910F91FF90EF90DF90CF90BF90AF90BA |
:10ECA0009F908F907F906F9008956F927F928F9238 |
:10ECB0009F92AF92BF92CF92DF92EF92FF920F930B |
:10ECC0001F93CF93DF93F82EE92ED62EB42E890111 |
:10ECD0000E944B3F80E060E0A80122E00E942343B5 |
:10ECE0002F2D3E2DC901EC01B3EDEB2EBEE2FB2E24 |
:10ECF00001E0DD0CD39414C0102F1F5F802F63E060 |
:10ED0000488120E00E9408420E5F812F63E04DE6BB |
:10ED100056E420E00E9423438991F70181937F010B |
:10ED20000D1551F783E066E14AE02AE001E00E9418 |
:10ED3000954380E066E04EE556E420E00E942343E0 |
:10ED400080E067E049E456E420E00E94234311E0BC |
:10ED5000FF24EE24E394A0E2CA2EF9E37F2EEAE535 |
:10ED60006E2E71E6A72E61E4962E50E3852E46E0C6 |
:10ED7000D42EF1E0BF1609F078C0ECEDFEE29AE087 |
:10ED80008081803219F09093E92E04C09150319720 |
:10ED90009923B1F780E40E94FA81882331F480E45A |
:10EDA00062E00E945382882379F1AF2DB0E0FD012B |
:10EDB000ED52F14D80818A3738F58F5F8083803244 |
:10EDC00008F4C082FD01ED52F14D808181528F30F7 |
:10EDD00008F48082FD01ED52F14D80818A53873025 |
:10EDE00008F49082FD01ED52F14D80818B55863003 |
:10EDF00008F4A082AD52B14D812F63E04C9120E028 |
:10EE00000E940842E0925F2380E80E94FA818823F2 |
:10EE100039F480E862E00E945382882309F45EC0DE |
:10EE2000AF2DB0E0FD01ED52F14D8081813208F44B |
:10EE300055C0815080838B55863008F46082FD0177 |
:10EE4000ED52F14D80818A53873008F47082FD01C4 |
:10EE5000ED52F14D808181528F3008F4C082AD5265 |
:10EE6000B14D812F63E04C9134C082E0B816B1F50A |
:10EE700080E40E94FA81882331F480E461E00E94FA |
:10EE80005382882381F0EF2DF0E0ED52F14D408167 |
:10EE9000493348F44F5F4083812F63E020E00E94B4 |
:10EEA0000842E0925F2380E80E94FA81882331F4CF |
:10EEB00080E861E00E945382882381F0EF2DF0E02A |
:10EEC000ED52F14D4081413348F041504083812F54 |
:10EED00063E020E00E940842E0925F2380E20E940B |
:10EEE0001582882369F0EF2DF0E0ED52F14DC082DC |
:10EEF000812F63E040E220E00E940842E0925F231D |
:10EF000080E20E940482882379F1812F869590E027 |
:10EF10000997A4F01D9DC0011124835066E14AE0C9 |
:10EF20002AE000E00E94954383E066E14AE02AE09F |
:10EF300001E00E94954311E0FF2416C01D9DC00111 |
:10EF40001124835066E14AE02AE000E00E949543E4 |
:10EF50001E5F1D9DC0011124835066E14AE02AE036 |
:10EF600001E00E949543F39480E10E94FA81882396 |
:10EF700009F4FFCE80EF0E94FA8181E0DF91CF910A |
:10EF80001F910F91FF90EF90DF90CF90BF90AF90C7 |
:10EF90009F908F907F906F9008952F923F924F9205 |
:10EFA0005F926F927F928F929F92AF92BF92CF9219 |
:10EFB000DF92EF92FF920F931F93DF93CF93CDB722 |
:10EFC000DEB764970FB6F894DEBF0FBECDBF1092C8 |
:10EFD000702E10925F230E944B3F88245524992461 |
:10EFE000939408EE202E03E0302E3E010894611C1D |
:10EFF000711C10E2412E01C09F2C0E944B3F8DE6F8 |
:10F0000090E00E94AF54AC0180E060E022E00E94FA |
:10F010005C4380E090E00E94AF54AC0180E067E088 |
:10F0200020E00E945C43882039F081E061E047E401 |
:10F0300056E420E00E942343A82CBB2488E490E0FF |
:10F04000A89E7001A99EF00CB89EF00C112400E05F |
:10F0500010E06801CA0CDB1C95E0C916D10484F4E9 |
:10F060004091B728602F6F5F82E1489FA001112473 |
:10F070004E0D5F1D45515C4B83E020E00E94234311 |
:10F08000053059F494E0C916D1043CF481E066E0FF |
:10F0900045E456E420E00E9423430F5F1F4F88E4BD |
:10F0A00090E0E80EF91E0630110599F6552069F436 |
:10F0B000882029F481E065E0492D20E00AC082E043 |
:10F0C00065E0492D21E001E005C082E066E0492DC0 |
:10F0D00021E000E00E948A51F82E9EEF891721F46A |
:10F0E0008394552453941CC08DEFF81619F48A9418 |
:10F0F000552416C09FEFF91609F4BBC010915F2389 |
:10F10000113071F48091B0280E94A72E892B19F03C |
:10F110001093B52802C01092B5280E94AC38A9C03F |
:10F120000F2D10E0080D111D0130110551F48091D3 |
:10F13000B02860E041E02DE60E940C738093B02877 |
:10F1400091C002301105E1F520E030E0F301E20F5B |
:10F15000F31FD901A158B74D8C9180832F5F3F4F8A |
:10F160002A30310599F71B86C3016AE041E02FE29E |
:10F1700036E40E94557680915F23813009F04DC0BE |
:10F1800000E00CC0E02FF0E0DF01AD52B14D8C91FA |
:10F19000E158F74D80830E94AC380F5F1091E92E43 |
:10F1A000011780F31A3048F027CFE12FF0E0E15843 |
:10F1B000F74D40820E94AC381F5F1A30B0F31CCF6D |
:10F1C0000330110551F58091BE2889838091BF28B5 |
:10F1D0008A838091C0288B838091C1288C831D8273 |
:10F1E000C30164E042E029E136E40E945576809153 |
:10F1F0005F23813091F400E010E0F801E254F74D14 |
:10F20000D801AD52B14D8C9180830E94AC380F5F14 |
:10F210001F4F0430110589F7EFCE0430110511F5A9 |
:10F220000E94A72E019751F480E063E04EE056E47F |
:10F2300020E00E9423430E94C637DECE80E063E0D8 |
:10F2400040E056E420E00E9423431092B52830921B |
:10F2500072232092712380E490E09093B7228093F0 |
:10F26000B622CACE0530110509F0C6CE0E94FF3085 |
:10F27000C3CE64960FB6F894DEBF0FBECDBFCF915C |
:10F28000DF911F910F91FF90EF90DF90CF90BF9093 |
:10F29000AF909F908F907F906F905F904F903F9036 |
:10F2A0002F9008954F925F926F927F928F929F92CC |
:10F2B000AF92BF92CF92DF92EF92FF920F931F9384 |
:10F2C000CF93DF931092702E10925F230E944B3FDA |
:10F2D000AA247724BB24B39498E4492E512C82E1CC |
:10F2E000682E01C0B12E0E944B3F80E060E043E7F2 |
:10F2F00056E422E00E94234380E090E00E94AF5455 |
:10F30000AC0180E067E020E00E945C43AA2039F075 |
:10F3100081E061E041E756E420E00E9423430A2DAA |
:10F3200010E0049D7001059DF00C149DF00C11245B |
:10F33000C0E0D0E048016E01C00ED11E88E0C816C2 |
:10F34000D10484F44091B728CE018F5F682F469D89 |
:10F35000A00111244E0D5F1D45555E4B83E020E05A |
:10F360000E942343C53059F497E0C916D1043CF4F8 |
:10F3700081E066E04FE656E420E00E9423432196B8 |
:10F3800088E490E0E80EF91EC630D105A1F677209A |
:10F3900039F4AA2079F481E065E04B2D20E00EC01D |
:10F3A00092E08916910434F082E066E04B2D21E072 |
:10F3B00000E005C082E065E04B2D21E001E00E9405 |
:10F3C0008A51182F8E3F21F4A3947724739414C08C |
:10F3D0008D3F19F4AA9477240FC08F3F09F467C0BA |
:10F3E00080915F23813041F48091B328813011F402 |
:10F3F0000E9457280E94AC38C12FD0E0CA0DD11D01 |
:10F40000C130D10551F48091B32860E041E028E695 |
:10F410000E940C738093B32824C0C230D10551F4EC |
:10F420008091C32860E045E024E60E9453748093F5 |
:10F43000C32824C0C330D10551F48091B12860E0C5 |
:10F440004FE724E60E9453748093B12824C0C4304F |
:10F45000D10539F48091BC280E94E8738093BC28C0 |
:10F4600020C0C530D10551F48091AF2860E04FE74E |
:10F4700026E60E9453748093AF2834CFC630D1055E |
:10F4800051F48091B22860E04FE727E60E94537460 |
:10F490008093B22827CFC730D10519F40E9457288E |
:10F4A00021CF289709F01ECF0E9400301BCFDF919B |
:10F4B000CF911F910F91FF90EF90DF90CF90BF9071 |
:10F4C000AF909F908F907F906F905F904F90089536 |
:10F4D0000E944B3F80EF0E94FA8184E590E00E94F9 |
:10F4E000AF54AC0180E062E020E00E945C4385E51F |
:10F4F00090E00E94AF54AC0180E063E020E00E9405 |
:10F500005C4383E590E00E94AF54AC018CE067E07F |
:10F5100020E00E945C4380E10E94FA81882319F078 |
:10F520000E944939089580E20E94FA81882399F364 |
:10F5300080EF0E94FA810895BF92CF92DF92EF92FE |
:10F54000FF920F931F93CF93DF93F82EB62EE42EE6 |
:10F55000122F8093EA2E682F70E0882777FD809520 |
:10F56000982F0E94EE8F23E333E343E250E40E949E |
:10F57000DB900E94C08F6093B3000E944B3F812FAD |
:10F5800090E00E94AF54AC0180E062E020E00E9475 |
:10F590005C4380E162E04F2D50E023E030E000E08A |
:10F5A0000E94094881E162E047EA56E420E00E94B7 |
:10F5B000234381E090E00E94AF54AC0180E067E01B |
:10F5C00020E00E945C4348ECC42ED12CC0E8D0E07F |
:10F5D00080E162E04F2D50E023E030E000E00E9447 |
:10F5E00009488F2D90E09695982F882797958795B5 |
:10F5F00064E670E00E940292462F80E060E226E01E |
:10F6000001E00E94C94180E40E94FA81882331F41C |
:10F6100080E463E00E945382882309F1FE14F8F429 |
:10F62000F394FE1450F0D0927223C0927123D093C1 |
:10F63000B722C093B622FE2C12C06F2D70E088272F |
:10F6400077FD8095982F0E94EE8F23E333E343E20A |
:10F6500050E40E94DB900E94C08F6093B30080E86A |
:10F660000E94FA81882331F480E863E00E9453828B |
:10F67000882399F1BF1488F58F2D90E00197969516 |
:10F68000982F88279795879564E670E00E940292EC |
:10F69000862F60E240E826E000E00E94C941FA942B |
:10F6A000FB1449F4D0927223C0927123D093B722F5 |
:10F6B000C093B62212C06F2D70E0882777FD809529 |
:10F6C000982F0E94EE8F23E333E343E250E40E943D |
:10F6D000DB900E94C08F6093B30080E10E94FA81AA |
:10F6E0008823D1F081E080935F236F2D70E088271D |
:10F6F00077FD8095982F0E94EE8F23E333E343E25A |
:10F7000050E40E94DB900E94C08F6093B300F0929F |
:10F710008A280E94AC3825C080E20E94FA818823A2 |
:10F7200009F456CF80EF0E94FA8110925F23109166 |
:10F73000EA2E612F70E0882777FD8095982F0E9430 |
:10F74000EE8F23E333E343E250E40E94DB900E9418 |
:10F75000C08F6093B30010938A280E94AC38F09059 |
:10F76000EA2E8F2DDF91CF911F910F91FF90EF9097 |
:10F77000DF90CF90BF900895BF92CF92DF92EF922B |
:10F78000FF920F931F93CF93DF93F82EB62EE42EA4 |
:10F79000122F8093EA2E0E944B3F812F90E00E940F |
:10F7A000AF54AC0180E062E020E00E945C4380E165 |
:10F7B00062E04F2D50E023E030E000E00E94094875 |
:10F7C00081E090E00E94AF54AC0180E067E020E06F |
:10F7D0000E945C4378ECC72ED12CC0E8D0E080E1D9 |
:10F7E00062E04F2D50E023E030E000E00E94094845 |
:10F7F0004F2D50E0440F551F80E060E226E001E00D |
:10F800000E94C94180E40E94FA81882331F480E497 |
:10F8100062E00E9453828823C9F0FE14B8F4F39486 |
:10F82000FE1450F0D0927223C0927123D093B7226D |
:10F83000C093B622FE2C0AC0F8942B9881E80E944F |
:10F840003D3F8F2D0E943D3F2B9A789480E80E9487 |
:10F85000FA81882331F480E862E00E945382882391 |
:10F8600009F1BF14F8F48F2D880F825060E240E850 |
:10F8700026E000E00E94C941FA94FB1449F4D092BA |
:10F880007223C0927123D093B722C093B6220AC0CC |
:10F89000F8942B9881E80E943D3F8F2D0E943D3FB8 |
:10F8A0002B9A789480E162E04F2D50E023E030E025 |
:10F8B00000E00E94094880E10E94FA81882341F01B |
:10F8C00081E080935F23F092E3280E94AC381EC051 |
:10F8D00080E20E94FA81882309F481CF80EF0E94A0 |
:10F8E000FA81F8942B9881E80E943D3F8091EA2E9E |
:10F8F0000E943D3F2B9A789410925F238091EA2ECC |
:10F900008093E3280E94AC38F090EA2E8F2DDF918F |
:10F91000CF911F910F91FF90EF90DF90CF90BF900C |
:10F9200008950F931F93082F122F8093EA2E0E94A1 |
:10F930004B3F812F90E00E94AF54AC0180E062E029 |
:10F9400020E00E945C43002319F0043071F403C0EE |
:10F9500081E590E002C082E590E00E94AF54AC01E6 |
:10F960008EE062E020E00E945C4381E090E00E9433 |
:10F97000AF54AC0180E067E020E00E945C4380E48B |
:10F980000E94FA81882369F0002359F482E590E00F |
:10F990000E94AF54AC018EE062E020E00E945C4324 |
:10F9A00004E080E80E94FA81882369F0043059F469 |
:10F9B00081E590E00E94AF54AC018EE062E020E06F |
:10F9C0000E945C4300E080E10E94FA81882399F064 |
:10F9D00081E080935F23F8942B98002311F486EA4A |
:10F9E00001C087EA0E943D3F2B9A789400937E28BD |
:10F9F0000E94AC380FC080E20E94FA81882309F48B |
:10FA0000BECF80EF0E94FA8110925F230091EA2E10 |
:10FA100000937E28802F1F910F9108950F931F93BD |
:10FA2000082F122F8093EA2E0E944B3F812F90E0E7 |
:10FA30000E94AF54AC0180E062E020E00E945C4391 |
:10FA4000002319F0043071F403C081E590E002C096 |
:10FA500082E590E00E94AF54AC018EE062E020E0CD |
:10FA60000E945C4381E090E00E94AF54AC0180E0D2 |
:10FA700067E020E00E945C4380E40E94FA818823D2 |
:10FA800069F0002359F482E590E00E94AF54AC0184 |
:10FA90008EE062E020E00E945C4304E080E80E9487 |
:10FAA000FA81882369F0043059F481E590E00E94DE |
:10FAB000AF54AC018EE062E020E00E945C4300E0C5 |
:10FAC00080E10E94FA818823C9F081E080935F235E |
:10FAD000F8942B98002329F481EA0E943D3F80ECA2 |
:10FAE00004C080EA0E943D3F88EC0E943D3F2B9A73 |
:10FAF00078940093E82E0E94AC380DC080E20E94FA |
:10FB0000FA81882309F4B8CF80EF0E94FA8110921D |
:10FB10005F230091EA2E802F1F910F9108956F921D |
:10FB20007F928F929F92AF92BF92CF92DF92EF928D |
:10FB3000FF920F931F93CF93DF930E944B3F10923E |
:10FB4000702E10925F2310926023CC249924DD2420 |
:10FB5000D394B8E46B2E712CA2E18A2E01C0D12E71 |
:10FB60000E944B3F8AE590E00E94AF54AC0180E0D8 |
:10FB700060E022E00E945C4380E090E00E94AF548D |
:10FB8000AC0180E067E020E00E945C43CC2039F0CB |
:10FB900081E061E04BE856E420E00E942343AC2C76 |
:10FBA000BB24A69C8001A79C100DB69C100D1124AF |
:10FBB000C0E0D0E07E01EA0CFB1C87E0E816F1040F |
:10FBC00084F44091B728CE018F5F682F489DA00133 |
:10FBD0001124400F511F4D54504C83E020E00E94EF |
:10FBE0002343C53059F496E0E916F1043CF481E072 |
:10FBF00066E049E856E420E00E9423432196085B32 |
:10FC00001F4FC630D105B1F6992039F4CC2069F4E4 |
:10FC100081E065E04D2D20E00CC0CC2031F082E089 |
:10FC200066E04D2D21E000E005C082E065E04D2D4D |
:10FC300021E001E00E948A51182F8E3F31F4C394D5 |
:10FC400099249394F5E0DF2EA1CF8D3F29F4CA9437 |
:10FC50009924E2E0DE2E9ACF8F3F41F480915F231A |
:10FC6000813009F080C00E94AC387DC0C82FD0E040 |
:10FC7000CC0DD11DC130D10551F480918B2860E0AD |
:10FC800042E02BE50E94777380938B2826C0C23018 |
:10FC9000D10551F48091B72860E043E02CE50E9443 |
:10FCA0006B728093B72819C0C330D10551F480918D |
:10FCB000E42860E04EEF2DE50E9453748093E42821 |
:10FCC0000CC0C430D10549F480918A2860E044E634 |
:10FCD0002EE50E949C7A80938A2890915F23913030 |
:10FCE00031F480916023882311F490936023C53010 |
:10FCF000D10549F48091E32860E04FE32FE50E94AD |
:10FD0000BC7B8093E32890915F23913031F4809104 |
:10FD10006023882311F490936023C630D10551F4F9 |
:10FD200080917E2860E044E020E60E94917C8093F0 |
:10FD30007E280CC0279709F012CF8091E82E60E052 |
:10FD400044E021E60E940E7D8093E82E90915F238F |
:10FD5000913009F004CF80916023882309F0FFCE11 |
:10FD600090936023FCCEDF91CF911F910F91FF9074 |
:10FD7000EF90DF90CF90BF90AF909F908F907F904B |
:10FD80006F9008950F931F93182F8093EA2E0E946F |
:10FD90004B3F81E390E00E94AF54AC0180E061E012 |
:10FDA00020E00E945C4382E390E00E94AF54AC01EB |
:10FDB00080E062E020E00E945C438091B3288823C9 |
:10FDC00009F056C081E390E00E94AF54AC0180E09E |
:10FDD00061E020E00E945C4383E390E00E94AF5426 |
:10FDE000AC0180E062E020E00E945C4384E390E0AC |
:10FDF0000E94AF54AC0180E061E020E00E945C43CF |
:10FE000085E390E00E94AF54AC0180E062E020E026 |
:10FE10000E945C4386E390E00E94AF54AC0180E016 |
:10FE200061E020E00E945C4387E390E00E94AF54D1 |
:10FE3000AC0180E062E020E00E945C4388E390E057 |
:10FE40000E94AF54AC0180E061E020E00E945C437E |
:10FE500089E190E00E94AF54AC018CE067E020E0C3 |
:10FE60000E945C4380E20E94FA818823D9F37BC020 |
:10FE7000112319F0113099F408C08EE062E04FEAC6 |
:10FE800056E420E00E9423430AC08FE490E00E94E1 |
:10FE9000AF54AC018EE062E020E00E945C4381E060 |
:10FEA00090E00E94AF54AC0180E067E020E00E9447 |
:10FEB0005C430091B328013009F04FC080E40E94F8 |
:10FEC000FA81882391F0112381F400935F238FE45A |
:10FED00090E00E94AF54AC018EE062E020E00E940E |
:10FEE0005C4386E00E94C22F11E080E80E94FA8104 |
:10FEF000882379F0113069F410935F238EE062E07B |
:10FF000049EA56E420E00E94234385E00E94C22F84 |
:10FF100010E080E10E94FA818823F9F089E390E003 |
:10FF20000E94AF54AC0180E064E020E00E945C439A |
:10FF30008AE390E00E94AF54AC0180E065E020E0ED |
:10FF40000E945C4380E067E042E10E94764380E1EA |
:10FF50000E94FA818823D9F30DC080E20E94FA81C1 |
:10FF6000882309F4A6CF80EF0E94FA8110925F23C4 |
:10FF70001091EA2E812F1F910F910895DF92EF9239 |
:10FF8000FF920F931F93F82ED62EE42E122F8093FC |
:10FF9000EA2E0E944B3F812F90E00E94AF54AC01AB |
:10FFA00080E062E020E00E945C4380E162E04F2D4F |
:10FFB00050E023E030E000E00E94FA4681E090E06B |
:10FFC0000E94AF54AC0180E067E020E00E945C43F7 |
:10FFD00011E080E40E94FA81882331F480E463E038 |
:10FFE0000E945382882371F0FE1460F410935F2303 |
:10FFF000F39480E162E04F2D50E023E030E000E038 |
:020000021000EC |
:100000000E94FA4680E80E94FA81882331F480E851 |
:1000100063E00E945382882371F0DF1460F4109330 |
:100020005F23FA9480E162E04F2D50E023E030E05E |
:1000300000E00E94FA4680E10E94FA81882361F480 |
:1000400080E20E94FA81882321F280EF0E94FA81E7 |
:1000500010925F23F090EA2E8F2D1F910F91FF9049 |
:10006000EF90DF9008954F925F926F927F928F9200 |
:100070009F92AF92BF92CF92DF92EF92FF920F9337 |
:100080001F93CF93DF930E944B3F1092702E1092DC |
:100090005F23AA247724BB24B39498E4492E512CDF |
:1000A00082E1682E01C0B02E0E944B3F80E060E0EC |
:1000B00041E956E422E00E94234380E090E00E9460 |
:1000C000AF54AC0180E067E020E00E945C43AA20CE |
:1000D00039F081E061E04FE856E420E00E942343DC |
:1000E0000A2D10E0049D7001059DF00C149DF00C8C |
:1000F0001124C0E0D0E048016E01C00ED11E89E09D |
:10010000C816D10484F44091B728CE018F5F682FC0 |
:10011000469DA00111244E0D5F1D455D524C83E0AC |
:1001200020E00E942343C53059F498E0C916D10459 |
:100130003CF481E066E04DE856E420E00E94234371 |
:10014000219688E490E0E80EF91EC630D105A1F6AC |
:10015000772039F4AA2079F481E065E04B2D20E086 |
:100160000EC093E08916910434F082E066E04B2DD6 |
:1001700021E000E005C082E065E04B2D21E001E0D8 |
:100180000E948A51082F8E3F31F4A39477247394F0 |
:1001900005E0B02E9CCF8D3F29F4AA94772412E07D |
:1001A000B12E95CF8F3F41F480915F23813009F0CC |
:1001B00090C00E94AC388DC0C82FD0E0CA0DD11DB0 |
:1001C000C130D10569F4809123240E94C27E8093BE |
:1001D000232480915F23813081F4809361235AC06E |
:1001E000C230D10551F48091352461E247EF26E712 |
:1001F0000E94BE7F809335244DC0C330D10519F4D1 |
:100200000E948F7D4DC0C430D105E1F48091B328A8 |
:100210008823A9F48091B32860E041E028E60E9499 |
:100220000C738093B32880915F23813099F580917E |
:10023000B328813009F047C00E94572844C00E946B |
:10024000527928C0C530D10529F58091B02888237E |
:10025000F1F48091B02860E041E02DE60E940C733B |
:100260008093B02880915F238130D1F41091B02821 |
:10027000113009F018CF0E94A72E892B19F0109386 |
:10028000B52802C01092B5280E94AC380CCF0E944D |
:10029000CD7706C0C630D10519F40E947E7503CF14 |
:1002A000C730D10519F40E942D51FDCEC830D105BB |
:1002B00051F48091BD2860E041E022E60E94537431 |
:1002C0008093BD28F0CE299709F0EDCE0E94687A80 |
:1002D000EACEDF91CF911F910F91FF90EF90DF90C9 |
:1002E000CF90BF90AF909F908F907F906F905F90D6 |
:1002F0004F900895E0E8F0E01082A1E8B0E01C9291 |
:1003000010926F008081826880838C918B618C93C6 |
:100310008AE698E1909387008093860086ED91E0CD |
:1003200090938900809388000895579AE0EBF0E05D |
:10033000808183688083E1EBF0E08081816080834D |
:10034000E0E7F0E08081866080838FEF8093B300E8 |
:1003500008951F920F920FB60F9211245F9A0F907B |
:100360000FBE0F901F9018951F920F920FB60F920D |
:1003700011245F980F900FBE0F901F901895109248 |
:10038000EE2E1092ED2E82E084BD85E085BD83ECDB |
:1003900087BDEEE6F0E08081826080830895209141 |
:1003A0007323309174232F5F3F4F280F391FC901EA |
:1003B00008952091732330917423821B930B8070D6 |
:1003C0009078892F86950895209173233091742316 |
:1003D0002F5F3F4F280F391F809173239091742313 |
:1003E000A901481B590BCA0180709078892F869506 |
:1003F00099F308952FB7F894909163238923982750 |
:10040000909363232FBF08954FB7F8943FB7F894A4 |
:10041000209163239091622390958923822328273A |
:10042000209363233FBF4FBF08952FB7F894909157 |
:10043000642389239827909364232FBF2FB7F894C0 |
:100440009091652389239827909365232FBF2FB719 |
:10045000F8949091632389239827909363232FBF67 |
:1004600008952FB7F8949091652389239827909346 |
:1004700065232FBF0895282F9FB7F8948091662396 |
:1004800028238227809366239FBF3FB7F8949091DB |
:1004900065238091632380958227892398279093F1 |
:1004A00065233FBF08952FB7F89490916723892360 |
:1004B000982790936723609368232FBF08958091B6 |
:1004C0006F2390917023019799F488EE93E09093B5 |
:1004D00072238093712380E290E09093B7228093FF |
:1004E000B62280E060E040EE56E422E00E94234322 |
:1004F0002091B2223091B32284E690E0A901489F76 |
:100500009001499F300D589F300D112480916F2329 |
:10051000909170238217930721F410927023109208 |
:100520006F2380916F2390917023009729F001969B |
:100530009093702380936F23349B04C010926E239A |
:1005400010926D23349917C080916D2390916E2382 |
:10055000019690936E2380936D230A9761F48091A6 |
:100560006F2390917023892B31F481E090E0909378 |
:10057000702380936F232091B4223091B52284E6BA |
:1005800090E0A901489F9001499F300D589F300D80 |
:10059000112480916D2390916E238217930709F4A3 |
:1005A000299808951F920F920FB60F920BB60F92D3 |
:1005B00011242F933F934F935F936F937F938F9368 |
:1005C0009F93AF93BF93EF93FF933091622320B13A |
:1005D0002095232780917B238223809580937B2302 |
:1005E00090917A239223982790937A232823292382 |
:1005F000922F932790936223922380916323892BD8 |
:10060000809363238091B428813001F580916B231E |
:1006100090916C23019690936C2380936B2380912F |
:100620006B2390916C23805E9E4281F488EC90E075 |
:10063000909372238093712380E890E09093B72287 |
:100640008093B62210926C2310926B2380917523B5 |
:100650008150809375238F5F89F489E0809375239F |
:1006600080917323909174230196909374238093C7 |
:1006700073238091B8228F5F8093B822222389F060 |
:100680008091EC2E882311F40E94A32481E08093B2 |
:10069000EC2E10926A231092692310926C23109210 |
:1006A0006B238091E4288823D9F08091EC2E81304F |
:1006B000B9F48091692390916A23019690936A23FB |
:1006C000809369232091E42864E670E00E94EE9113 |
:1006D00030E06217730721F40E94AE241092EC2ED2 |
:1006E0000E945F8280917123909172230097D9F0CC |
:1006F0008B30910530F00A97909372238093712389 |
:1007000004C010927223109271238091B6229091AE |
:10071000B722209171233091722382239323892B56 |
:1007200009F090C006C08FEF9FEF9093B72280939F |
:10073000B622479A40916223242F30E0207F307008 |
:100740002115310519F486E480937923809179236A |
:10075000815080937923882339F4942F907F80915E |
:100760006423892B809364232115310519F481E0DA |
:1007700080937823809178238150809378238823F5 |
:1007800051F48FE080937823942F907F809165239C |
:10079000892B809365232115310519F486E4809314 |
:1007A000772380917723815080937723882351F496 |
:1007B0008FE080937723942F907F80916623892BFD |
:1007C00080936623232B19F486E48093762380910B |
:1007D00076238150809376238823A9F4809168231F |
:1007E000813011F484E107C0823011F488E003C045 |
:1007F000833049F481E080937623407F80916723A2 |
:10080000842B809367238091ED2E9091EE2E892B7F |
:1008100049F08091ED2E9091EE2E01979093EE2E5F |
:100820008093ED2E8091EF2E9091F02E892B61F028 |
:100830008091EF2E9091F02E01979093F02E80935F |
:10084000EF2E02C0479876CFFF91EF91BF91AF9105 |
:100850009F918F917F916F915F914F913F912F91D8 |
:100860000F900BBE0F900FBE0F901F9018950F9317 |
:100870001F930E944B3F8CE067E04BEA58E420E076 |
:100880000E942343809141239091422380509041C4 |
:1008900084F00E94CD4B60913B2370913C2380916A |
:1008A0003D2390913E230E94C08F70934423609318 |
:1008B00043230E94A04C409143235091442385E060 |
:1008C00065E020E030E000E00E9412468AE065E04A |
:1008D00046EA58E420E00E94234340917C2850914E |
:1008E0007D2880E066E025E030E00E94094880E451 |
:1008F0000E94FA81182F80E463E00E945382182B33 |
:1009000049F080917C2890917D280A9690937D28CB |
:1009100080937C2880E80E94FA81182F80E863E0A9 |
:100920000E945382182B49F080917C2890917D2859 |
:100930000A9790937D2880937C2880E20E94FA8118 |
:10094000882309F49FCF80EF0E94FA811F910F91B5 |
:1009500008951F9311E00E944B3F80E390E00E94B6 |
:10096000AF54AC0180E068E022E00E945C4383E089 |
:1009700063E048EC58E420E00E94234383E064E015 |
:1009800048EB58E420E00E94234380E090E00E947E |
:10099000AF54AC0180E067E020E00E945C4311307E |
:1009A00061F481E063E046EB58E420E00E942343D9 |
:1009B00081E064E044EB58E40BC081E063E042EB8B |
:1009C00058E420E00E94234381E064E040EB58E4D7 |
:1009D00020E00E94234380E80E94FA81811111E007 |
:1009E00080E40E94FA81811112E080E10E94048279 |
:1009F0008823F9F080912324882359F4113019F4C5 |
:100A00000E944C31A8CF123009F0A5CF0E94593076 |
:100A1000A2CF80912324813009F09DCF113019F4A9 |
:100A20000E94A13198CF123009F095CF0E94AC30CE |
:100A300092CF80E20E94FA81882309F4B0CF80EF40 |
:100A40000E94FA811F9108956F927F928F929F92D8 |
:100A5000AF92BF92CF92DF92EF92FF920F931F93CC |
:100A6000CF93DF93AA249924BB24B39438E4632E54 |
:100A7000712C22E1822E01C0B12E0E944B3F80E0FA |
:100A800060E04CED58E422E00E94234380E090E0D7 |
:100A90000E94AF54AC0180E067E020E00E945C431C |
:100AA000AA2039F081E061E04AED58E420E00E949C |
:100AB0002343CA2CDD24C69C8001C79C100DD69C04 |
:100AC000100D1124C0E0D0E07E01EC0CFD1C86E08E |
:100AD000E816F10484F44091B728CE018F5F682FA7 |
:100AE000489DA0011124400F511F4A50594B83E0EB |
:100AF00020E00E942343C53059F495E0E916F10443 |
:100B00003CF481E066E048ED58E420E00E94234395 |
:100B10002196085B1F4FC630D105B1F6992069F4C4 |
:100B2000AA2029F481E066E04B2D20E00AC082E093 |
:100B300065E04B2D21E001E005C082E066E04B2D31 |
:100B400021E000E00E948A51182F8E3F31F4A394D7 |
:100B50009924939495E0B92EA3CF8D3F29F4AA94BC |
:100B6000992482E0B82E9CCF8F3FE1F1C82FD0E0CE |
:100B7000CA0DD11DC130D10521F482E00E94185662 |
:100B800005C0C230D10511F40E94D66F8091232494 |
:100B9000882361F4C330D10519F40E944C311CC084 |
:100BA000C430D10599F40E94593016C08091232495 |
:100BB000813061F4C330D10519F40E94A1310CC019 |
:100BC000C430D10519F40E94AC3006C0C530D1053F |
:100BD00019F40E94338050CF269709F04DCF0E9420 |
:100BE00068504ACFDF91CF911F910F91FF90EF9006 |
:100BF000DF90CF90BF90AF909F908F907F906F903D |
:100C00000895DC014AEA20E030E007C0FD01E20F70 |
:100C1000F31F8081480F2F5F3F4F26173707B0F330 |
:100C2000842F08952FB7F8943998389A9091B90085 |
:100C30009C7F9093B9009AE29093B80010927C2325 |
:100C400010927E2310927F23882379F0EEEFFEE24C |
:100C500010821182128213821482158216821782E8 |
:100C600038968FE2EE35F80799F778942FBF0895FC |
:100C7000EF92FF920F931F9310927C230CEB10E0E6 |
:100C800084E9F801808380E880831092BD0010928F |
:100C9000BA008BEBE82EF12CF70110821092B9000C |
:100CA0001092B8001092802380E00E941286F70113 |
:100CB000108285E8F801808380918323826080938D |
:100CC00083231F910F91FF90EF9008951F920F9231 |
:100CD0000FB60F920BB60F9211242F933F934F93A1 |
:100CE0008F939F93AF93BF93EF93FF9390917C2348 |
:100CF0009F5F90937C239150943009F4F4C0953019 |
:100D000058F4913099F19130A0F0923009F46CC010 |
:100D1000933009F06EC2CEC0963009F4CEC1963041 |
:100D200008F41CC1953109F438C2963109F061C24A |
:100D300036C281E08093802380917E238C3070F0D6 |
:100D4000109285231092842310927E2385E0809355 |
:100D50007C2380917F23880F8D5A04C080917E234D |
:100D6000880F8E5A8093BB0085E838C2E0917E23BD |
:100D7000F0E043E0EE0FFF1F4A95E1F7E250F14D3E |
:100D800081818093BB0085E88093BC00E0917E2345 |
:100D9000F0E033E0EE0FFF1F3A95E1F7E250F14D3E |
:100DA000808180FF85C0E0917E23F0E023E0EE0F9C |
:100DB000FF1F2A95E1F7E050F14D8081882329F04B |
:100DC0008091BB22873008F42AC2809184239091BD |
:100DD0008523892B09F023C2809186239091872354 |
:100DE000892B09F01CC264C040917E232091862388 |
:100DF0003091872381E090E002C0880F991F4A95C7 |
:100E0000E2F782239323892B69F0E0917E23F0E0BF |
:100E100093E0EE0FFF1F9A95E1F7EE5FF04D80E152 |
:100E200080830BC0E0917E23F0E083E0EE0FFF1F94 |
:100E30008A95E1F7EE5FF04D1082E0917E23A0915C |
:100E40007E23F0E0B3E0EE0FFF1FBA95E1F7EE5F0F |
:100E5000F04D9081990F990F990FB0E043E0AA0FE0 |
:100E6000BB1F4A95E1F7A050B14D8C918770982B2C |
:100E70009093BB0085E88093BC0040917E23209135 |
:100E800084233091852381E090E002C0880F991F70 |
:100E90004A95E2F782239323892B51F086EF9EE255 |
:100EA00090938A238093892388E080938823B7C115 |
:100EB00084E070C1E0918923F0918A23819180932D |
:100EC000BB0085E88093BC00F0938A23E0938923DC |
:100ED00080918823815080938823882309F49FC1BF |
:100EE00090937C239CC18091B900803321F580913F |
:100EF0008C23882329F480917E238F5F80938C2319 |
:100F0000E0917E23F0E033E0EE0FFF1F3A95E1F72A |
:100F1000E250F14D83818F778F3769F0E0917E2326 |
:100F2000F0E023E0EE0FFF1F2A95E1F7E250F14DCC |
:100F300083818F5F838310927C2384E98093BC003C |
:100F40008AE090E09093BA228093B92280917E2328 |
:100F50008F5F80937E2310927C233AC18091B900E9 |
:100F60008034B9F1E0917F23F0E093E0EE0FFF1FB2 |
:100F70009A95E1F7E250F14D83818F7783838091D9 |
:100F80007F238F5F80937F2380917F238C30A0F01D |
:100F900010927F23109287231092862380918B23B7 |
:100FA0008F5F80938B238C3038F010928B2380914D |
:100FB00083238D7F8093832380918323816080931B |
:100FC000832310927C2384E98093BC0010928023B9 |
:100FD0006DC0E0917F23F0E083E0EE0FFF1F8A9564 |
:100FE000E1F7E250F14D838180688383E0917F23B4 |
:100FF000F0E0B3E0EE0FFF1FBA95E1F7E250F14DDC |
:10100000808180FF2DC0E0917F23F0E0A3E0EE0F10 |
:10101000FF1FAA95E1F7EE5FF04DE081EE2351F05E |
:10102000E031D9F586EF9EE290938A23809389235D |
:1010300088E031C080917F2390E0E3E0880F991F22 |
:10104000EA95E1F78D5F904D90938A2380938923F1 |
:1010500090917F2380918B239817E1F483E01BC04C |
:1010600080917F2390E043E0880F991F4A95E1F734 |
:101070008D5F904D90938A23809389238091832361 |
:1010800081FD06C090917F2380918B23981711F4E6 |
:1010900082E001C081E080938823809188238130A1 |
:1010A00011F485E801C085EC8093BC0080918C230D |
:1010B0008093812310928C23B2C08091BB00E09179 |
:1010C0008923F0918A238193F0938A23E0938923E3 |
:1010D00080918823815080938823823010F085ECA2 |
:1010E00003C0813029F485E88093BC0086E052C0BB |
:1010F0008091832381FF26C0E0917F23F0E033E0DD |
:10110000EE0FFF1F3A95E1F7E250F14D86818A3FDD |
:1011100071F4E0917F23F0E023E0EE0FFF1F2A95AA |
:10112000E1F7E250F14D8081816080830BC0E09156 |
:101130007F23F0E093E0EE0FFF1F9A95E1F7E25076 |
:10114000F14D108280917F238F5F80937F23809168 |
:101150007F238C30A0F010927F231092872310926F |
:10116000862380918B238F5F80938B238C3038F084 |
:1011700010928B23809183238D7F80938323109201 |
:101180007C2384E98093BC008091832381608093D9 |
:10119000832343C080937C2342C080E8E3CD109238 |
:1011A0007C2384E98093BC00109280238AE090E045 |
:1011B0009093BA228093B92280917D23823088F463 |
:1011C00080917D238F5F80937D2382E180937C23B8 |
:1011D000809183238E7F8093832385EA8093BC0054 |
:1011E0001EC010927D23809183238160809383238E |
:1011F00016C010927C2384E98093BC0080918323E5 |
:101200008160809383238AE090E09093BA22809358 |
:10121000B92210927E2310927F2310928023FF9197 |
:10122000EF91BF91AF919F918F914F913F912F91EE |
:101230000F900BBE0F900FBE0F901F90189581E07E |
:1012400008951F93CF93DF93182F809182238823D3 |
:1012500011F081E093C01D3008F08FC0112389F098 |
:10126000E12FF0E053E0EE0FFF1F5A95E1F7EA504F |
:10127000F14D838187FF81C0808180FD02C083E0C2 |
:101280007DC08091F62E823011F084E077C0E6EFC9 |
:10129000FEE29AEA8191980F8EE2ED3FF807D1F7CE |
:1012A0008081981711F085E069C080ED97E00E9479 |
:1012B000CF81EC018091832380FD05C0CE010E9487 |
:1012C000D9818823B9F3112369F48FEF90E09093CB |
:1012D000852380938423EFEFFEE240E050E061E05D |
:1012E00070E00CC0212F30E02150304081E090E0D0 |
:1012F00002C0880F991F2A95E2F7E9CF2091842335 |
:1013000030918523CB01042E02C0880F991F0A94C7 |
:10131000E2F782239323892B11F0108211824F5F11 |
:101320005F4F38964C30510549F710927E2315EAED |
:1013300010927C23809183238E7F8093832310934C |
:10134000BC008091832380FD05C0CE010E94D9811D |
:101350008823B9F38091842390918523892B29F0E8 |
:10136000CE010E94D981882319F380918423909122 |
:101370008523892B11F480E001C082E0DF91CF91B9 |
:101380001F9108951F920F920FB60F920BB60F92F6 |
:1013900011242F938F939F93EF93FF939091C80005 |
:1013A0002091CE00E091CF23EF5FEF718091D023A9 |
:1013B000E81711F482E008C0892F8871E093CF23E9 |
:1013C000F0E0E355FC4D20838093D123FF91EF9112 |
:1013D0009F918F912F910F900BBE0F900FBE0F908A |
:1013E0001F9018951F920F920FB60F920BB60F9287 |
:1013F00011248F939F93EF93FF939091CD2380912E |
:10140000CE23981769F0E091CE23EF5FEF71E09360 |
:10141000CE23F0E0E357FC4D80818093CE0005C0E1 |
:101420008091C9008F7D8093C900FF91EF919F91BA |
:101430008F910F900BBE0F900FBE0F901F901895BD |
:101440009C011092CD231092CE231092CF231092A4 |
:10145000D02397FF04C082E08093C8003F77309389 |
:10146000CD002093CC0088E98093C90086E080936A |
:10147000CA0008959091CF238091D023981719F432 |
:1014800020E031E012C0E091D023EF5FEF71E093F4 |
:10149000D023F0E0E355FC4D30812091D123922FF1 |
:1014A00080E0AC01430F511D9A01C9010895482FF6 |
:1014B0009091CD239F5F9F718091CE239817E1F388 |
:1014C000E92FF0E0E357FC4D40839093CD238091CA |
:1014D000C90080628093C9008091D123382F20E019 |
:1014E000240F311DC9010895CF93DF93EC0103C090 |
:1014F00021960E94578A88818823D1F7DF91CF9166 |
:101500000895CF93DF93EC0102C00E94578AFE0139 |
:10151000219684918823C9F7DF91CF910895809116 |
:10152000CF232091D02390E04F96821B91096FE149 |
:1015300070E00E94029208958091D0238093CF237F |
:1015400008951F920F920FB60F920BB60F921124AF |
:101550002F933F934F935F936F937F938F939F93BB |
:10156000AF93BF93CF93DF93EF93FF938091472384 |
:10157000853011F0843089F54091C60020911F24F8 |
:10158000309120248091212490912224281B390B12 |
:1015900037FF02C0205C3F4F2F3331050CF0AAC04B |
:1015A000E0911F24F0912024408380911F2490918A |
:1015B000202401969093202480931F2480911F243F |
:1015C000909120248F51944209F094C08FED93E2C2 |
:1015D0009093202480931F248DC07091C600809129 |
:1015E000D223882309F086C06091DC23662371F43E |
:1015F000733279F470935E2F81E08093DC2383E271 |
:1016000090E09093DE238093DD2374C0643B08F068 |
:1016100064C0A62FB0E02091DD233091DE237D3021 |
:1016200069F0A25AB04D7C936F5F6093DC23270F63 |
:10163000311D3093DE232093DD235CC0FD01E45A8D |
:10164000F04D9081ED01C35AD04D8881A901491B0D |
:101650005109481B51095F705093DE234093DD23ED |
:101660002081CA0136E0969587953A95E1F7835C2B |
:10167000821729F59881842F8F73835C8917F9F479 |
:10168000A25AB04D7C936F5F6093D3239091452312 |
:101690008091602F9817F1F481E08093D22380919C |
:1016A000602F8235B9F42CE088E190E00FB6F89411 |
:1016B000A895809360000FBE209360000BC08091BE |
:1016C000D7239091D82301969093D8238093D72342 |
:1016D0001092D2231092DC230DC08091D9239091D7 |
:1016E000DA2301969093DA238093D9231092DC2396 |
:1016F0001092D223FF91EF91DF91CF91BF91AF91E3 |
:101700009F918F917F916F915F914F913F912F9119 |
:101710000F900BBE0F900FBE0F901F901895209149 |
:101720001F24309120248091212490912224281775 |
:10173000390711F4E0E01BC0E0912124F09122244C |
:10174000E08180912124909122240196909322247B |
:101750008093212480912124909122248F519442BE |
:1017600031F48FED93E290932224809321248E2FE5 |
:101770000895DC0120911F243091202480912124A0 |
:10178000909122242817390711F480E00895E09100 |
:101790002124F091222480818C93809121249091A6 |
:1017A0002224019690932224809321248091212445 |
:1017B000909122248F51944211F081E008958FED91 |
:1017C00093E2909322248093212481E008959093C2 |
:1017D000C5008093C4008091C0008D7F8093C000BD |
:1017E00086E08093C2008091C1008B7F8093C1000E |
:1017F00002C08091C6008091C00087FDFACF809121 |
:10180000C10088618093C1008091C100806880938D |
:10181000C1008FED93E29093222480932124809144 |
:101820002124909122249093202480931F240895B2 |
:10183000E1ECF0E08081877F808323982B980895E6 |
:10184000239A2B98E1ECF0E08081886080830895F2 |
:10185000982F8091C00085FFFCCF9093C60008951B |
:10186000FC0107C08091C00085FFFCCF9093C600AB |
:10187000319690819923B1F70895FC0107C08091BA |
:10188000C00085FFFCCF9093C600319694919923B8 |
:10189000B1F708955091D323565033E043E048C048 |
:1018A000E32FF0E0E25AF04D80813F5FE32FF0E05C |
:1018B000E25AF04D20812D533F5FE32FF0E0E25AD2 |
:1018C000F04D70813F5FE32FF0E03350E25AF04D6E |
:1018D0006081E42FF0E0922F92959F708D53880FD6 |
:1018E000880F892BE25AF04D8083E42FEF5F51304F |
:1018F00081F0972F9D53F0E02295207F892F8695C8 |
:101900008695282BE25AF04D2083E42FEE5F52306B |
:1019100011F44E2F10C03C5F5350F0E09295990F98 |
:10192000990F907C6D53962BE25AF04D90834D5F4A |
:10193000552309F0B5CF81E69FE29093D52380939C |
:10194000D42343504093D623089580914623813079 |
:1019500071F58091C00085FFFCCF8BE18093C600BC |
:101960008091C00085FFFCCF8BE18093C600809101 |
:10197000C00085FFFCCF85E58093C6008091C00044 |
:1019800085FFFCCF8AEA8093C6008091C00085FF66 |
:10199000FCCF1092C60081E08093472384EF91E052 |
:1019A00024EF31E0F9013197F1F70197D9F7089564 |
:1019B00085E08093472384EF91E024EF31E0F90143 |
:1019C0003197F1F70197D9F70895DF92EF92FF92DF |
:1019D0000F931F93DF93CF93CDB7DEB78B857C85B5 |
:1019E00093E2909331308F59809332308A8580937F |
:1019F0003330DE011D96772329F4EE24FF2440E0E6 |
:101A000050E007C0ED84FE84DE0151964F85588971 |
:101A1000715003E010E030E07EC0F701E30FF11DEC |
:101A200090813F5F4150504091F4772309F4C4C046 |
:101A3000FD013296ED90FC90DF0112960190F0814D |
:101A4000E02D7150309709F4B6C0AF0130E0F701D6 |
:101A5000E30FF11DD0803F5F4150504099F4772350 |
:101A600011F460E023C0FD013296ED90FC90DF019F |
:101A700012964081518171504115510511F460E079 |
:101A800014C030E0F701E30FF11D60813F5F41506A |
:101A9000504061F4772351F0FD013296ED90FC90B7 |
:101AA000DF01129640815181715030E0892F869577 |
:101AB0008695835CF801EF5CFF4C80832D2D229589 |
:101AC0002F70892F90E083709070F4E0880F991F39 |
:101AD000FA95E1F7282B235CF801EE5CFF4C20839C |
:101AE0008D2D90E08F709070880F991F880F991F2F |
:101AF000262F2295269526952370282B235CF80106 |
:101B0000ED5CFF4C20836F73635CF801EC5CFF4C71 |
:101B100060830C5F1F4F4115510509F07ECF90E0A7 |
:101B200020E030E006C0EF5CFF4C8081280F311DC3 |
:101B30009F5FE92FF0E0E017F107A8F33F70C901BC |
:101B400046E0969587954A95E1F7835CF801EF5C4E |
:101B5000FF4C8083C80101962F73235CFC01EF5C6E |
:101B6000FF4C20830196FC01EF5CFF4C2DE02083AD |
:101B7000AC014F5F5F4F1092BC2220E00CC08091FF |
:101B8000C00085FFFCCFE22FF0E0EF5CFF4C8081CE |
:101B90008093C6002F5F822F90E08417950778F31B |
:101BA00081E08093BC22CF91DF911F910F91FF9034 |
:101BB000EF90DF90089530E060E0DD2477CFDF9391 |
:101BC000CF930F92CDB7DEB7209147232130A9F5EF |
:101BD00092E099834DB75EB7475050400FB6F894E6 |
:101BE0005EBF0FBE4DBFEDB7FEB7319685E7ADB70F |
:101BF000BEB711968C9391832283CE010196948374 |
:101C0000838381E090E0968385830E94E58C84E065 |
:101C10008093472324EF31E04DB75EB7495F5F4FB4 |
:101C20000FB6F8945EBF0FBE4DBF44EF51E0CA013E |
:101C30000197F1F721503040D1F70F90CF91DF910C |
:101C40000895DF93CF930F92CDB7DEB790914723DE |
:101C50009130A1F599832DB73EB7275030400FB68C |
:101C6000F8943EBF0FBE2DBFEDB7FEB7319685E7A6 |
:101C7000ADB7BEB711968C9382E081839283CE017B |
:101C800001969483838381E090E0968385830E940C |
:101C9000E58C83E08093472324EF31E08DB79EB736 |
:101CA00007960FB6F8949EBF0FBE8DBF44EF51E06C |
:101CB000CA010197F1F721503040D1F70F90CF9131 |
:101CC000DF9108951F93DF93CF930F92CDB7DEB7C7 |
:101CD00090914723913099F519822DB73EB727503F |
:101CE00030400FB6F8943EBF0FBE2DBFEDB7FEB724 |
:101CF000319685E7ADB7BEB711968C9312E011838C |
:101D00009283CE0101969483838381E090E0968351 |
:101D100085830E94E58C1093472324EF31E08DB733 |
:101D20009EB707960FB6F8949EBF0FBE8DBF44EFC7 |
:101D300051E0CA010197F1F721503040D1F70F90DF |
:101D4000CF91DF911F910895FF920F931F93DF931F |
:101D5000CF930F92CDB7DEB7082FF62E142F0E9427 |
:101D6000208C812F6AE00E94E29189838DB79EB713 |
:101D700007970FB6F8949EBF0FBE8DBFEDB7FEB7A5 |
:101D80003196ADB7BEB711960C93F18281E0828394 |
:101D9000CE0101969483838381E090E096838583CE |
:101DA0000E94E58C8DB79EB707960FB6F8949EBF3C |
:101DB0000FBE8DBF8091BC228823E1F30E94188C56 |
:101DC0000F90CF91DF911F910F91FF900895505880 |
:101DD000BB27AA270ED0A0C169D130F06ED120F068 |
:101DE00031F49F3F11F41EF45EC10EF4E095E7FB61 |
:101DF00054C1E92FB3D180F3BA1762077307840780 |
:101E0000950718F071F49EF5CBC10EF4E0950B2EFA |
:101E1000BA2FA02D0B01B90190010C01CA01A0013C |
:101E20001124FF27591B99F0593F50F4503E68F197 |
:101E30001A16F040A22F232F342F4427585FF3CFD8 |
:101E4000469537952795A795F0405395C9F77EF4A9 |
:101E50001F16BA0B620B730B840BBAF09150A1F0F2 |
:101E6000FF0FBB1F661F771F881FC2F70EC0BA0F78 |
:101E7000621F731F841F48F4879577956795B79500 |
:101E8000F7959E3F08F0B3CF9395880F08F09927F8 |
:101E9000EE0F979587950895DCD008F481E00895BA |
:101EA00014D1E3954AC10CD037C107D140F0FED020 |
:101EB00030F021F45F3F19F0F0C0511172C1F3C04E |
:101EC0004DD198F39923C9F35523B1F3951B550BC5 |
:101ED000BB27AA2762177307840738F09F5F5F4FFD |
:101EE000220F331F441FAA1FA9F333D00E2E3AF03E |
:101EF000E0E830D091505040E695001CCAF729D058 |
:101F0000FE2F27D0660F771F881FBB1F26173707A6 |
:101F10004807AB07B0E809F0BB0B802DBF01FF27D6 |
:101F200093585F4F2AF09E3F510568F0B6C039C103 |
:101F30005F3FECF3983EDCF3869577956795B79510 |
:101F4000F7959F5FC9F7880F911D9695879597F92B |
:101F50000895E1E0660F771F881FBB1F62177307A4 |
:101F60008407BA0720F0621B730B840BBA0BEE1FB9 |
:101F700088F7E095089504D06894B11112C10895CE |
:101F8000F5D088F09F5790F0B92F9927B751A0F05E |
:101F9000D1F0660F771F881F991F1AF0BA95C9F7FD |
:101FA00012C0B13081F0FCD0B1E00895F9C0672FC4 |
:101FB000782F8827B85F39F0B93FCCF386957795AD |
:101FC0006795B395D9F73EF4909580957095619596 |
:101FD0007F4F8F4F9F4F0895E89409C097FB3EF4C1 |
:101FE00090958095709561957F4F8F4F9F4F992366 |
:101FF000A9F0F92F96E9BB279395F69587957795E4 |
:102000006795B795F111F8CFFAF4BB0F11F460FFA3 |
:102010001BC06F5F7F4F8F4F9F4F16C0882311F0FB |
:1020200096E911C0772321F09EE8872F762F05C00F |
:10203000662371F096E8862F70E060E02AF09A95AA |
:10204000660F771F881FDAF7880F9695879597F99F |
:102050000895990F0008550FAA0BE0E8FEEF161639 |
:102060001706E807F907C0F012161306E407F5078C |
:1020700098F0621B730B840B950B39F40A2661F000 |
:10208000232B242B252B21F408950A2609F4A140A3 |
:10209000A6958FEF811D811D089597F99F6780E8B0 |
:1020A00070E060E008959FEF80EC089500240A94AA |
:1020B0001616170618060906089500240A94121623 |
:1020C0001306140605060895EECF50D0E8F3E89401 |
:1020D000E0E0BB279F57F0F02AED3FE049EC06C057 |
:1020E000EE0FBB0F661F771F881F28F0B23A6207FA |
:1020F0007307840728F0B25A620B730B840BE395C5 |
:102100009A9572F7803830F49A95BB0F661F771F47 |
:10211000881FD2F79048F5C0092E0394000C11F4E3 |
:10212000882352F0BB0F40F4BF2B11F460FF04C0B2 |
:102130006F5F7F4F8F4F9F4F0895EF93E0FF06C073 |
:10214000A2EA2AED3FE049EC5FEB53DEE5DF0F90BA |
:10215000039401FC9058E0EBF0E0DFC057FD90588D |
:10216000440F551F59F05F3F71F04795880F97FB5B |
:10217000991F61F09F3F79F0879508951216130615 |
:102180001406551FF2CF4695F1DF08C01616170644 |
:102190001806991FF1CF8695710561050894089579 |
:1021A000E894BB2766277727CB0197F9089551DF7D |
:1021B00008F48FEF08950BD0AFCF78DF28F07DDFE4 |
:1021C00018F0952309F069CF6ECF1124EACFC6DF4E |
:1021D000A0F3959FD1F3950F50E0551F629FF0013A |
:1021E000729FBB27F00DB11D639FAA27F00DB11D93 |
:1021F000AA1F649F6627B00DA11D661F829F22271C |
:10220000B00DA11D621F739FB00DA11D621F839FA2 |
:10221000A00D611D221F749F3327A00D611D231F78 |
:10222000849F600D211D822F762F6A2F11249F57C6 |
:1022300050408AF0E1F088234AF0EE0FFF1FBB1FE9 |
:10224000661F771F881F91505040A9F79E3F510588 |
:1022500070F023CFA6CF5F3FECF3983EDCF386957A |
:1022600077956795B795F795E7959F5FC1F7FE2B33 |
:10227000880F911D9695879597F9089577DFE0F07F |
:102280009E37D8F09639B8F49E3848F4672F782FE7 |
:102290008827985FF9CF86957795679593959539B7 |
:1022A000D0F3B62FB1706B0F711D811D20F487958F |
:1022B00077956795939508C022C073CF9F9305DFEC |
:1022C0000F9007FCEE5F39CF882371F4772321F05C |
:1022D0009850872B762F07C0662311F499270DC0DD |
:1022E0009051862B70E060E02AF09A95660F771F78 |
:1022F000881FDAF7880F9695879597F908959F3F7D |
:1023000031F0915020F4879577956795B795880FB0 |
:10231000911D9695879597F908959F938F937F9335 |
:102320006F93FF93EF939B01AC0145DFEF91FF911A |
:1023300005D02F913F914F915F913DCFDF93CF9388 |
:102340001F930F93FF92EF92DF927B018C016894B1 |
:1023500005C0DA2EEF013BDFFE01E894A59125913F |
:10236000359145915591AEF3EF0143DDFE019701A3 |
:10237000A801DA9479F7DF90EF90FF900F911F9109 |
:10238000CF91DF910895629FD001739FF001829FEA |
:10239000E00DF11D649FE00DF11D929FF00D839FF4 |
:1023A000F00D749FF00D659FF00D9927729FB00D91 |
:1023B000E11DF91F639FB00DE11DF91FBD01CF01A4 |
:1023C00011240895991B79E004C0991F961708F00D |
:1023D000961B881F7A95C9F780950895AA1BBB1B89 |
:1023E00051E107C0AA1FBB1FA617B70710F0A61B15 |
:1023F000B70B881F991F5A95A9F780959095BC0136 |
:10240000CD01089597FB092E07260AD077FD04D049 |
:10241000E5DF06D000201AF4709561957F4F08958E |
:10242000F6F7909581959F4F0895A1E21A2EAA1B69 |
:10243000BB1BFD010DC0AA1FBB1FEE1FFF1FA21774 |
:10244000B307E407F50720F0A21BB30BE40BF50B71 |
:10245000661F771F881F991F1A9469F760957095FA |
:10246000809590959B01AC01BD01CF01089597FB2C |
:10247000092E05260ED057FD04D0D7DF0AD0001C48 |
:1024800038F450954095309521953F4F4F4F5F4F11 |
:102490000895F6F790958095709561957F4F8F4FD1 |
:1024A0009F4F0895FB01DC010D900020E9F7119783 |
:1024B00005900D920020E1F70895FB01DC010590E5 |
:1024C0000D920020E1F70895FB01DC0141505040DE |
:1024D00030F08D910590801919F40020B9F7881B10 |
:1024E000990B0895FB0155915523A9F0BF01DC011B |
:1024F0004D9145174111E1F759F4CD0105900020A8 |
:1025000049F04D9140154111C9F3FB014111EFCF45 |
:1025100081E090E001970895DC0101C06D93415086 |
:102520005040E0F70895FB019F01E8944230C4F069 |
:102530004532B4F44A3029F497FB1EF49095819506 |
:102540009F4F642F77270E94EE91805D8A330CF0B5 |
:10255000895D8193CB010097A1F716F45DE2519359 |
:102560001082C9010C941393FB019F01423074F057 |
:10257000453264F4642F77270E94EE91805D8A33A0 |
:102580000CF0895D8193CB010097A1F71082C901FE |
:102590000C941393DC01CB01FC01F999FECF06C02A |
:1025A000F2BDE1BDF89A319600B40D924150504011 |
:1025B000B8F70895F999FECF92BD81BDF89A992791 |
:1025C00080B50895A6E1B0E044E050E00C94CC92D0 |
:1025D000A8E1B0E042E050E00C94CC92DC01CB01E9 |
:1025E00003C02D910E94F99241505040D0F70895B8 |
:1025F000262FF999FECF1FBA92BD81BD20BD0FB61F |
:10260000F894FA9AF99A0FBE01960895242F0E9421 |
:10261000F992252F0E94F9920C940E930E94F89241 |
:10262000272F0C94F992DC01FC01672F719177231D |
:10263000E1F7329704C07C916D9370836291AE177D |
:0A264000BF07C8F30895F894FFCF18 |
:10264A000201201A20202020201B20202020456E55 |
:10265A0064652020204F4B00201A20202020201BB8 |
:10266A0020202020656E64202020204F4B00201A55 |
:10267A0020202020201B2020202066696E20202078 |
:10268A00204F4B00201A20202020201B2020202011 |
:10269A0045696E646520204F4B00201820202020B9 |
:1026AA00201920202020456E64652020204F4B00F1 |
:1026BA00201820202020201920202020656E642048 |
:1026CA002020204F4B0020182020202020192020D5 |
:1026DA00202066696E202020204F4B0020182020E1 |
:1026EA00202020192020202045696E646520204F73 |
:1026FA004B00201820202020201920202020456E61 |
:10270A006465200020182020202020192020202065 |
:10271A00656E642020002018202020202019202007 |
:10272A00202066696E2020002018202020202019F1 |
:10273A002020202045696E646500456E646520206E |
:10274A00204F4B00656E64202020204F4B006669A5 |
:10275A006E202020204F4B0045696E646520204F73 |
:10276A004B00546173746520312053656B756E6438 |
:10277A0065004B6565702074686520627574746FB6 |
:10278A006E004D61696E74656E657A206C652062B3 |
:10279A006F75746F6E00486F7564206465206B6E88 |
:1027AA006F70202020006C616E6720666573746804 |
:1027BA00616C74656E2E0070726573736564206651 |
:1027CA006F722031207365636F6E6400656E666F89 |
:1027DA006E63E9652070656E642E2031207365632F |
:1027EA000031207365636F6E646520696E67656486 |
:1027FA0072756B742E0056657262696E64756E67C7 |
:10280A00207A756D204D4B2069737400436F6E6E8C |
:10281A00656374696F6E20746F204D4B2069730075 |
:10282A00436F6E6E6578696F6E20E0204D4B2065B0 |
:10283A0073740056657262696E64696E67206D65AD |
:10284A0074204D4B206973006175662057693233D5 |
:10285A00322065696E67657374656C6C74007365A4 |
:10286A007420746F205769323332006D697320E027 |
:10287A0020576932333200696E67657374656C6418 |
:10288A00206F7020576932333200617566204B61C0 |
:10289A0062656C2065696E67657374656C6C74003B |
:1028AA0073657420746F206B6162656C206F6E2093 |
:1028BA00535632006D697320E0206B6162656C20AB |
:1028CA007375722053563200766961206B616265B6 |
:1028DA006C76657262696E64696E6700506F7274B5 |
:1028EA0061626C6573204B6F7074657220546F6FF0 |
:1028FA006C00506F727461626C65204B6F70746506 |
:10290A007220546F6F6C200066FC7220464320567A |
:10291A00657220302E38367800666F722046432062 |
:10292A0056657220302E38367800706F75722046E0 |
:10293A00432056657220302E38367800566F6F72F3 |
:10294A002046432056657220302E38367800474E8E |
:10295A00552047504C204C6963656E73650041549D |
:10296A006D656761203634340041546D65676120B6 |
:10297A00363434500041546D656761203132383441 |
:10298A005000486172647761726520312E320048C6 |
:10299A006172647761726520312E32570048617224 |
:1029AA00647761726520312E330048617264776101 |
:1029BA00726520312E3357004861726477617265FF |
:1029CA0020332E39002020204C65747A74652050FB |
:1029DA006F736974696F6E202020002020206C615B |
:1029EA007374202020706F736974696F6E202020C1 |
:1029FA00002020206465726E69E8726520706F732A |
:102A0A006974696F6E20002020204C6161747374B0 |
:102A1A006520706F736974696520202000204CE47A |
:102A2A006E67656E67722020204272656974656EF2 |
:102A3A00677200206C6F6E67697475646520206C1C |
:102A4A00617469747564652000206C656E677465CD |
:102A5A0067722E206272656564746567722E006CF7 |
:102A6A00F6736368656E2020202020202020776579 |
:102A7A00697465720064656C657465202020202085 |
:102A8A002020202020657869742000737570707288 |
:102A9A00696D657220202020202020706C757320BB |
:102AAA000077697373656E20202020202020202063 |
:102ABA007665726465720020202020202067656C8C |
:102ACA00F673636874202020202020200020202014 |
:102ADA0020202064656C65746564202020202020F5 |
:102AEA0020200020202020207375707072696DE903 |
:102AFA0020202020202020200020202020202067A5 |
:102B0A00657769737420202020202020202000531C |
:102B1A00756368652046432E2E2E007365617263C5 |
:102B2A0068696E672046432E2E2E006368657263BD |
:102B3A0068616E742046432E2E2E007A6F656B20D4 |
:102B4A0046432E2E2E00456E64652000656E642075 |
:102B5A00200066696E20200045696E6465004F6B2F |
:102B6A00006F6B0067756564004665686C65720086 |
:102B7A006572726F7200642765727265757200669B |
:102B8A006F757400616B74697600616374697600AD |
:102B9A0061637469667300616374696566004643BC |
:102BAA00206E6963687420676566756E64656E2158 |
:102BBA00004643206E6F7420666F756E642100466E |
:102BCA0043207061732074726F7576E92100464361 |
:102BDA00206E696574206765766F6E64656E210084 |
:102BEA00504B542D546F6F6C20474E552047504C14 |
:102BFA0000676566756E64656E3A2000666F756E6D |
:102C0A00643A200074726F7576E9733A200067653A |
:102C1A00766F6E64656E3A2000466C696768742D3B |
:102C2A004374726C004E6176692D4374726C00565F |
:102C3A00657273696F6E3A20005665727369653AF8 |
:102C4A0020200020657277617274657400206578AF |
:102C5A007065637465640020617474656E6475736D |
:102C6A00002076657277616368740020676566750F |
:102C7A006E64656E0020666F756E64002074726FF4 |
:102C8A007576E97300206765766F6E64656E00502D |
:102C9A004B542D546F6F6C206E7572206D697400E1 |
:102CAA00504B542D546F6F6C206F6E6C792077697E |
:102CBA00746800504B5420756E697175656D656E48 |
:102CCA0074206176656300504B542D546F6F6C20ED |
:102CDA00616C6C65656E206D657400464320536FA8 |
:102CEA0066747761726520006B6F6D7061746962DA |
:102CFA00656C00636F6D70617469626C6500636F07 |
:102D0A006D70617469626C657300636F6D70617474 |
:102D1A006962656C0045696E2020004F6E20202094 |
:102D2A0000556E2020200041616E202000417573FD |
:102D3A002020004F66662020004475202020005580 |
:102D4A006974202000455343002020504B542061D1 |
:102D5A007573736368616C74656E3F0020207368D5 |
:102D6A007574646F776E20504B54203F00202064A6 |
:102D7A00E9736163746976657220504B54203F0091 |
:102D8A002020504B5420756974736368616B656CBD |
:102D9A00656E203F004E65696E2020204A61006EF4 |
:102DAA006F20202020796573006E6F6E2020206FBF |
:102DBA007569004E6565202020204A6100566572BB |
:102DCA0062696E6465205043206D697420504B54CB |
:102DDA00202000436F6E6E65637420504320746F29 |
:102DEA0020504B542D555342006173736F636965CC |
:102DFA0072205043206120504B542D5553420056A7 |
:102E0A00657262696E64205043206D657420504B70 |
:102E1A0054202020004472FC636B652027537461A0 |
:102E2A0072742720616D20504B5400507265737381 |
:102E3A002027537461727427206F6E20504B5420E0 |
:102E4A000070726573736520276C616E6365722703 |
:102E5A00206120504B54004472756B2027537461D3 |
:102E6A00727427206F7020504B542020002020209D |
:102E7A002020202020202020456E64652053746184 |
:102E8A007274002020202020202020202020456E3F |
:102E9A006420205374617274002020202020202096 |
:102EAA0020202066696E20206C616E6365720020A6 |
:102EBA0020202020202020202045696E6465205390 |
:102ECA0074617274002050432D517569636B2D56DD |
:102EDA00657262696E64756E6720002050432D51D9 |
:102EEA007569636B2D436F6E6E656374696F6E20CF |
:102EFA00002050432D636F6E6E6578696F6E207285 |
:102F0A006170696465200020536E656C6C652050A1 |
:102F1A00432D76657262696E64696E6700566572E2 |
:102F2A0062696E64652064617320504B54206D6938 |
:102F3A007400436F6E6E65637420504B542077693A |
:102F4A007468204D4B00636F6E6E656374657A20FA |
:102F5A00504B54206120204D4B0056657262696EB9 |
:102F6A006420504B5420200064656D204D4B20FC9A |
:102F7A006265723A002020206F7665722020202038 |
:102F8A003A002020612070726F706F73203A00201F |
:102F9A0020206D657420202020203A0064656D2071 |
:102FAA004D4B20FC6265723A20204B6162656C2CA5 |
:102FBA0020006F7665723A204B6162656C00612071 |
:102FCA0070726F706F733A204361626C65004D4B8B |
:102FDA00207669613A206B6162656C20202020208E |
:102FEA0020202000657320697374206B65696E2048 |
:102FFA0057692E323332007468657265206973200E |
:10300A006E6F2057692E323332006C206E27796139 |
:10301A0020706173206465200065722069732067DF |
:10302A0065656E2077692E32333220004D6F6475E4 |
:10303A006C2065696E6765626175742E00627569D8 |
:10304A006C7420696E2E006D6F64756C6520696EF4 |
:10305A0074E96772E9205769323332006D6F64751B |
:10306A006C6520696E6765626F7577642E005765B7 |
:10307A006E6E20646F63682C2064616E6E206269D4 |
:10308A00747465006966207965732C207468656EAE |
:10309A0020666972737400536920766F7573206CA9 |
:1030AA006520666169746573007A6F206A612C20F5 |
:1030BA0064616E2061756220656572737400646173 |
:1030CA0073204D6F64756C207A756572737420690C |
:1030DA006D2020006163746976617465206D6F6488 |
:1030EA00756C20696E0061637469766572206C651F |
:1030FA00206D6F64756C65006465206D6F64756C16 |
:10310A006520616B7469766572656E0053657475C6 |
:10311A00706D656EFC20616B746976696572656EA7 |
:10312A002E0053657475706D656E750064616E73FB |
:10313A00206D656E7520646520636F6E6669672E03 |
:10314A0000696E206865742053657475706D656ECC |
:10315A00752E00536965206DFC7373656E2064617A |
:10316A007320504B5400596F75206861766520743E |
:10317A006F00566F757320646576657A0055206D09 |
:10318A006F657420646520504B54006A65747A74C4 |
:10319A00206E6575207374617274656E21007265A4 |
:1031AA00737461727420504B5400726564E96D61E6 |
:1031BA007272657220504B54006E75206F706E6982 |
:1031CA00657577207374617274656E21004573208A |
:1031DA00697374206B65696E2042544D2D32323208 |
:1031EA00005468657265206973206E6F2042544DE1 |
:1031FA002D323232004572206973206765656E2070 |
:10320A0042544D2D323232004D6F64756C2065691F |
:10321A006E676562617574004D6F64756C206275C6 |
:10322A00696C7420696E006D6F64756C6520696ED7 |
:10323A0074E96772E92042544D32323200204D4B14 |
:10324A002D5553422046756E6B74696F6E2020208F |
:10325A00202000204D4B2D5553422046756E637435 |
:10326A00696F6E202020202000204D4B2D5553429F |
:10327A0020666F6E6374696F6E2020202020002004 |
:10328A004D4B2D5553422046756E63746965202057 |
:10329A002020202000204254202D2D3E204B616208 |
:1032AA00656C20616E204643202000204254202D68 |
:1032BA002D3E204B6162656C20746F2046432020AE |
:1032CA0000204254202D2D3E204361626C6520610E |
:1032DA0020204643202000204254202D2D3E206BE2 |
:1032EA006162656C206E6161722046430050432022 |
:1032FA006D697420425420766572622E00636F6E87 |
:10330A006E656374205043207769746820425400C4 |
:10331A006173736F63696572205043206120425460 |
:10332A000050432076696120425420766572626FAC |
:10333A006E64656E2E00504B542D4B6162656C2095 |
:10334A00616E20464300504B542D4B6162656C20E0 |
:10335A00746F20464300504B542D4361626C6520C4 |
:10336A006120464300504B542D6B6162656C206EA0 |
:10337A0061617220464300204254202D2D3E205781 |
:10338A00692E323332202020202020200057692E37 |
:10339A0032333220616E2046432020202020202014 |
:1033AA0020200057692E32333220746F2046432082 |
:1033BA0020202020202020200057692E323332205E |
:1033CA006120464320202020202020202020005752 |
:1033DA00692E323332206E616172204643202020EA |
:1033EA00202020200020555342202D2D3E204B61C5 |
:1033FA0062656C20616E20464320002055534220AE |
:10340A002D2D3E206361626C6520746F2046432037 |
:10341A000020555342202D2D3E206361626C6520A9 |
:10342A0061204643202000555342202D2D3E206B1B |
:10343A006162656C206E61617220464300504320D0 |
:10344A006D6974205553422076657262696E6465AF |
:10345A006E2000636F6E6E65637420504320776937 |
:10346A007468205553422020006173736F63696545 |
:10347A0072205043206120555342202020200056BC |
:10348A00657262696E64205043206D6574205553DD |
:10349A00422020200020555342202D2D3E205769DE |
:1034AA002E323332202020202020004D4B2D546F05 |
:1034BA006F6C207374617274656E007374617274D8 |
:1034CA00204D4B2D546F6F6C0064E96D617272610F |
:1034DA006765204D4B2D546F6F6C002057692E3253 |
:1034EA003332204B6F6E6669677572696572656EF5 |
:1034FA00002057692E32333220436F6E6669677532 |
:10350A00726174696F6E002057692E3233322063FC |
:10351A006F6E666967757265722020200020576990 |
:10352A002E32333220436F6E666967757261746931 |
:10353A0065200050726F6772616D6D2073746172DD |
:10354A0074656E2E202020200073746172742070BE |
:10355A00726F6772616D200044E96D617272657203 |
:10356A00206C652070726F6772616D6D650073748F |
:10357A006172742070726F6772616D6D612E0042A4 |
:10358A00544D2D323232204B6F6E666967757269FF |
:10359A006572656E0042544D2D32323220636F6E71 |
:1035AA0066696775726174696F6E0042544D2D3297 |
:1035BA00323220646520636F6E6669677572612EA8 |
:1035CA000042544D2D32323220636F6E6669677540 |
:1035DA007261746965004643203E204D4B2D555358 |
:1035EA0042203E2042544D2D323232004D4B2D5551 |
:1035FA00534220616E20504320616E7363686C2EC3 |
:10360A002000636F6E6E65637420504320746F20D0 |
:10361A004D4B2D55534220006173736F6369657278 |
:10362A002050432061204D4B2D55534220005665B2 |
:10363A007262696E64205043206D6574204D4B2D73 |
:10364A00555342005A7769736368656E204D4B2D56 |
:10365A0055534220756E64202000636F6E6E656359 |
:10366A00742063726F73736564206361626C6500B2 |
:10367A006C6120636F6E6E6578696F6E20656E741B |
:10368A0072652050430054757373656E204D4B2D3F |
:10369A0055534220656E20504B542000504B542005 |
:1036AA0065696E2067656B7265757A74657320202B |
:1036BA0020006265747765656E204D4B2D55534227 |
:1036CA0020616E6420202000657420464320756EB8 |
:1036DA002063E2626C652063726F6973E900656555 |
:1036EA006E2067656B727569737465206B616265BC |
:1036FA006C2020004B6162656C20616E7363686C9C |
:10370A0069657373656E2E202000504B5420535602 |
:10371A003200200061616E736C756974656E2E00EB |
:10372A004B6162656C006361626C6500536C617623 |
:10373A006520006573636C61766573004E6F726D08 |
:10374A00616C006E6F726D616C65004E6F726D61B7 |
:10375A00616C005265766572736500696E76657292 |
:10376A007365006765696E76657200456E64202030 |
:10377A0020204F4B0046696E202020204F4B0045E9 |
:10378A00696E642020204F4B0020454550726F6DB2 |
:10379A00207769726B6C69636800205265616C7985 |
:1037AA002064656C6574650020656570726F6D20B4 |
:1037BA007375707072696D65723F0020456570722D |
:1037CA006F6D207765726B656C696A6B00206CF6A9 |
:1037DA00736368656E3F0020454570726F6D3F00E8 |
:1037EA0020202020002077697373656E3F0064658E |
:1037FA00757473636820202020006765726D616E9E |
:10380A00202020202000616C6C656D616E6465204B |
:10381A002000647569747320202020202000656EC2 |
:10382A00676C6973636820202000656E676C697332 |
:10383A00682020202000616E676C61697365202012 |
:10384A002000656E67656C73202020202000667258 |
:10385A00616E7AF67369736368006672656E63688F |
:10386A002020202020006672616EE761697365205E |
:10387A0020006672616E7320202020202000686F6D |
:10388A006C6CE46E646973636800647574636820C1 |
:10389A00202020202000686F6C6C616E646169735F |
:1038AA0065006E656465726C616E64732000416EBA |
:1038BA007A656967652045696E7374656C6C756EA7 |
:1038CA0067656E0020446973706C61792053657472 |
:1038DA007570202020202020200020642761666641 |
:1038EA0069636861676520636F6E6669672E200089 |
:1038FA00446973706C617920696E7374656C6C6964 |
:10390A006E67656E2000496E666F73206265692076 |
:10391A0053746172743A00496E666F206174207341 |
:10392A007461727475702000496E662E6175206428 |
:10393A00656D61727261676500496E666F206269C2 |
:10394A006A206F7073746172740053707261636875 |
:10395A0065203A20004C616E67756167653A200000 |
:10396A006C61206C616E6775653A20005461616C08 |
:10397A003A20004C6963687420617573206E616334 |
:10398A00683A004C69676874206F666620616674DD |
:10399A0065723A00457874692E6665757820702ECE |
:1039AA006C65733A004C6963687420756974206E9B |
:1039BA00613A2020004C43442048656C6C69676B6F |
:1039CA002E3A00204272696768746E657373203AF2 |
:1039DA0000206C756D696E6F73697465203A0020FA |
:1039EA00696E74656E7369746569743A004C434410 |
:1039FA00204B6F6E74726173743A004C43442063B7 |
:103A0A006F6E74726173743A004C4344204E6F7245 |
:103A1A006D2F496E763A20004C4344204F726965F7 |
:103A2A006E742E3A2000446562756720504B54002C |
:103A3A0057692054582F5258204368616E3A0057EC |
:103A4A0069204E6574572E204772702E3A005769C6 |
:103A5A00204E6574572E204D6F64653A00576920D1 |
:103A6A0054582054696D656F75743A00576920552A |
:103A7A00415254204D54552020203A0057692E3285 |
:103A8A0033322065696E6765626175743A005769F9 |
:103A9A002E323332206275696C7420696E203A00C6 |
:103AAA0057692E32333220696E74E96772E9202031 |
:103ABA003A0057692E32333220696E6765626F7534 |
:103ACA0077643A004973742065696E2057692E320B |
:103ADA0033322D4D6F64756C20004973205769325B |
:103AEA003332206D6F64756C0065737420756E20B7 |
:103AFA006D6F64756C652000497320657220656579 |
:103B0A006E2057692E3233320065696E67656261CD |
:103B1A0075743F006275696C7420696E3F00696E46 |
:103B2A0074656772652057693233323F006D6F647E |
:103B3A00756C6520696E6765626F7577643F004AC8 |
:103B4A006120200079657320006F756920004E6539 |
:103B5A00696E006E6F2020006E6F6E20004E6565E4 |
:103B6A00200042544D3232322065696E67656261C7 |
:103B7A0075743A0042544D323232206275696C745F |
:103B8A0020696E203A0042544D32323220696E74F6 |
:103B9A006567726520203A0042544D3232322069FC |
:103BAA006E6765626F7577643A0049737420656958 |
:103BBA006E2042544D2D3232322D4D6F64756C0099 |
:103BCA0049732042544D2D323232204D6F64756C48 |
:103BDA000049732065722065656E2042544D2D326E |
:103BEA00323200696E74656772652042544D323212 |
:103BFA00323F0020504B5420416B6B752045696E53 |
:103C0A007374656C6C756E670020504B5420416369 |
:103C1A006375205365747570202020202020005081 |
:103C2A004B5420416B6B757479703A2000504B5499 |
:103C3A0020416363757479703A2000504B542041D7 |
:103C4A00636375747970653A2000416B6B75205512 |
:103C5A00204F66667365743A200041636375205588 |
:103C6A00204F66667365743A20004F666673657402 |
:103C7A00207665727374656C6C656E206269730078 |
:103C8A0061646A757374206F666673657420756EF5 |
:103C9A0074696C00446563616C616765206C2761B7 |
:103CAA006A757374657220004F6666736574206165 |
:103CBA0066726567656C656E20746F740064696509 |
:103CCA00205370616E6E756E672070617373740035 |
:103CDA00766F6C7461676520666974730061206C25 |
:103CEA00612074656E73696F6E006465207370611C |
:103CFA006E6E696E67206A756973742069732E0027 |
:103D0A004C6F77426174205761726E20563A004CAC |
:103D1A006F7742617420616C61726D6572696E675A |
:103D2A003A00560046004C00480042004400410058 |
:103D3A00470052004645484C45523A204461746552 |
:103D4A006E7665726C75737420004552524F523A02 |
:103D5A002044617461206C6F7374007065727465BD |
:103D6A0020646520646F6E6EE96573007665726C17 |
:103D7A006965732076616E206765676576656E731F |
:103D8A0020004C65747A74652062656B616E6E748E |
:103D9A0065004C617374206B6E6F776E200044650A |
:103DAA00726E69E8726520706F736974696F6E006C |
:103DBA004C61617473742062656B656E6465005052 |
:103DCA006F736974696F6E2067657370656963687C |
:103DDA0065727400706F736974696F6E20736176AF |
:103DEA00656400636F6E6E75652073617576E900B0 |
:103DFA00706F736974696520676572656400204530 |
:103E0A00696E7374656C6C756E67656E20782020B8 |
:103E1A00202020002053657474696E672078202062 |
:103E2A002020202020202020200020506172616D57 |
:103E3A00E87472657320782020202020202020003A |
:103E4A0020496E7374656C6C696E67656E207820A4 |
:103E5A00202020202000E46E6465726E0063686191 |
:103E6A006E6765006C65206368616E67656D656E77 |
:103E7A007400766572616E646572696E6700616B63 |
:103E8A00746976696572656E0061637469766174D6 |
:103E9A006500616374697665720061637469766549 |
:103EAA0072656E00616B746976696572740061632C |
:103EBA0074697661746564006163746976E96500A2 |
:103ECA006765616374697665657264002053657419 |
:103EDA0074696E6720782073706569636865726EAD |
:103EEA003F002073746F72652073657474696E671E |
:103EFA003F002052E9676C616765206D61676173F5 |
:103F0A00696E3F0020696E7374656C6C2E6F702049 |
:103F1A00746520736C61616E3F00476573706569F3 |
:103F2A00636865727420756E640073746F72656479 |
:103F3A0020616E640073746F636BE97320657400AB |
:103F4A006F706765736C6167656E20656E004B6F95 |
:103F5A0070696572652053657474696E6700636F72 |
:103F6A0070792073657474696E6773007061726129 |
:103F7A006DE87472657320646520636F706965000B |
:103F8A006B6F706965657220696E7374656C6C69B4 |
:103F9A006E67656E0020766F6E20207820206E6135 |
:103FAA006368202079002066726F6D207820746F14 |
:103FBA0020790020646573207820617072E873208C |
:103FCA0079002076616E2078206E61207900766F04 |
:103FDA006E2020206E6163682020456E6465202073 |
:103FEA00204F4B0066726F6D2020746F20202020B6 |
:103FFA00656E64202020204F4B00646573202020CA |
:10400A00617072E8732066696E202020204F4B0091 |
:10401A0076616E2020206E612020202065696E6402 |
:10402A006520204F4B005769726B6C696368206B7F |
:10403A006F70696572656E3F007265616C6C79209C |
:10404A00636F70793F00767261696D656E74206383 |
:10405A006F7069653F0065636874206B6F7069658E |
:10406A003F004B6F706965727420756E6420616BD6 |
:10407A007469766965727400636F7069656420613A |
:10408A006E64206163746976617465642000636F8D |
:10409A007069657320657420616374696673004B87 |
:1040AA006F706965EB6E20656E2061637469656681 |
:1040BA0000C46E646572652045696E7374656C6CC4 |
:1040CA00756E67656E20002020206368616E6765E3 |
:1040DA002073657474696E6773202020006D6F64A5 |
:1040EA006966696572206C65732072E9676C61673D |
:1040FA00657300696E7374656C6C696E67656E20B2 |
:10410A0077696A7A6967656E002057E4686C65208A |
:10411A00506172616D657465722020202020002034 |
:10412A0073656C65637420706172616D6574657224 |
:10413A00732020200073E96C656374696F6E6E6585 |
:10414A007A20506172616DE8742E0053656C656364 |
:10415A007465657220506172616D65746572732051 |
:10416A00002057E4686C6520536569746520202037 |
:10417A0020202020202000202020202073656C652C |
:10418A006374207061676520202020200053E96C49 |
:10419A00656374696F6E6E657A206C612070616701 |
:1041AA00652000202053656C656374656572207014 |
:1041BA006167696E61202020002057E4686C6520E1 |
:1041CA0053657474696E673A2020202020200020ED |
:1041DA002073656C6563742073657474696E6720F7 |
:1041EA00202020200053E96C656374696F6E6E6548 |
:1041FA007A2073657474696E672000202053656C99 |
:10420A006563746565722073657474696E672020CE |
:10421A00001500020118012E01440115005A01700F |
:10422A000186019C011500B201C401D601E80115FD |
:10423A0000FA0104020E021802150022023202429A |
:10424A000256021500660277028C02A1021500B618 |
:10425A0002CC02E002F302150008031E032B033707 |
:10426A000315004A0360037403880315009C03B214 |
:10427A0003B203B2031500C803D903EA03FC03150A |
:10428A00000E040E040E040E0415001E041E041E65 |
:10429A00041E0415002904290429042904150035DB |
:1042AA00043504350435041500420442044204422C |
:1042BA000415004F044F044F044F0415005D045DBC |
:1042CA00045D045D0415006A046A046A046A04153C |
:1042DA00007804780478047804150085049B04B1F6 |
:1042EA0004C7041500DD04F304F304090515001FCF |
:1042FA000535054B056105150077058D05A305B93B |
:10430A00051500CF05DB05EB05FB05150006060CB8 |
:10431A00061206180615001E062106210624061591 |
:10432A00002906300636063F06150044064A06509E |
:10433A0006570615005E0671067F068E061500A052 |
:10434A0006A006A006A0061500B106BC06C406CE45 |
:10435A00061500D906D906D906D9061500E506E5D7 |
:10436A0006E506E5061500EF06EF06EF06F906155F |
:10437A000003070D071707210715002B0735073C10 |
:10438A0007450715004F0760077307870715009B46 |
:10439A00079B079B079B071500A807B307BE07CA19 |
:1043AA00071500D507DB07E107E7071500ED07F357 |
:1043BA0007F907FF07150005080508050805081588 |
:1043CA000009081C082D084008150055085F0869EF |
:1043DA0008730815007D089308A908BF081500D5B9 |
:1043EA0008EB080109170915002D09430959096F36 |
:1043FA0009150085099B09B109C7091500DD09F2EC |
:10440A0009060A1A0A1500280A350A420A4F0A1525 |
:10441A00005C0A720A7E0A8E0A1500A40AB70ACA42 |
:10442A000AD90A1500EC0AFD0A070B1C0B15002E07 |
:10443A000B440B570B690B15007E0B940BA60BB89C |
:10444A000B1500CC0BE20BEC0B010C1500130C2620 |
:10445A000C320C3D0C15004B0C5E0C6A0C790C15D9 |
:10446A00008D0CA10CCA0AB50C1500C80CD80CE7B3 |
:10447A000C1C0B1500FD0C130D290D3F0D150055D5 |
:10448A000D6B0D810D970D1500AD0DBD0DD00DE114 |
:10449A000D1500F60D060E160E250E1500370E37F1 |
:1044AA000E370E370E15004D0E630E790E8F0E1550 |
:1044BA0000A50EBB0ED10EE70E1500FD0E130F2937 |
:1044CA000F3F0F1500550F550F550F550F15006B60 |
:1044DA000F7B0F890F7B0F15009B0FB10FC70FDDE5 |
:1044EA000F1500F30F091018102E1015003F105564 |
:1044FA00106B1081101500961096109610961015D4 |
:10450A0000AC10C210D810EE10150004111A1130A8 |
:10451A0011461115005C11721188119E111500B413 |
:10452A0011CA11D211D4111500E011E611E611E0F9 |
:10453A00111500EC11EC11F311EC111500FC11FC32 |
:10454A001103120B12150013121B121B1223121540 |
:10455A0000FA012B1235123F12150049125A12683D |
:10456A00127B1215008D129712A012A5121500AE19 |
:10457A0012BA12C612D2121500DE12EA12F612028C |
:10458A001315000E131A132613321315003E134A7D |
:10459A00135613621315006E1384139A13B013156E |
:1045AA0000C613D713E813F91315000A14151420BB |
:1045BA00142C14150033144314541465141500757F |
:1045CA0014831491149F141500AD14BB14BB14BBAF |
:1045DA00141500C914C914C914C9141500D814D85B |
:1045EA0014D814D8141500E614E614E614E61415C3 |
:1045FA0000F014F014F014F0141500FF14FF14FF67 |
:10460A0014FF1415000E150E150E150E1515001DA6 |
:10461A00151D151D151D1515002C152C152C152CE1 |
:10462A001515003C154E1560157215150084159A5E |
:10463A0015A915B8151500C915D415DE15ED1515EA |
:10464A0000FF1504160916FF1515000E1613161885 |
:10465A00161D161500221634164616581615006A27 |
:10466A00168016A91591161500C915D415A316EDAD |
:10467A00151500B316C916C916C9161500DF16EDA9 |
:10468A0016ED16FB1615000A171A171A171A171518 |
:10469A0000DF16ED16ED16FB1615002A1740175403 |
:1046AA0017681715007D1790179D17AA171500C0D0 |
:1046BA0017C017C017CF171500E217E417E617E45B |
:1046CA00171500E817EA17EC17EE171500E617E6B4 |
:1046DA0017F017E6171500F217F217EC17F217156D |
:1046EA0000F4170A181B182C181500421852185EE5 |
:1046FA0018701815007F189418A318B0181500BE62 |
:10470A0018D418EA180019150016191D1924193297 |
:10471A001915003E19491952195A19150064196ECA |
:10472A00197819801915008C19A219B219C419150A |
:10473A0000DA19EA19F519001A15000E1A1E1A2CB0 |
:10474A001A401A1500551A661A731A821A15008E1B |
:10475A001AA41ABA1AD01A1500E61AF91A061B165A |
:10476A001B1500221B381B4E1B5F1B1500711B8774 |
:10477A001B9D1BB31B1500C91BDF1BF51B0B1C154F |
:10478A0000211C371C4D1C631C1500791C8F1CA5AD |
:10479A001CBB1C4D6F746F723B56657273696F6EEA |
:1047AA003B536574706F696E7420686967683B5320 |
:1047BA006574706F696E74206C6F773B53746174A3 |
:1047CA00653B526561644D6F64653B437572726502 |
:1047DA006E743B4D617850574D3B54656D706572F0 |
:1047EA0061747572650D003B000D000A00FFFFFF42 |
:0E47FA0001010A001E00FFFF01640001010022 |
:00000001FF |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/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/GPL_PKT_V3_5_8a_FC086/Wi232.c |
---|
0,0 → 1,562 |
/***************************************************************************** |
* 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 |
uint8_t Wi232_hardware = 0; |
uint8_t InitErr=0; |
/************************************************************************* |
Function: discoverWI232() |
Purpose: check if Wi232 available |
Returns: Version or 0 = timeout |
**************************************************************************/ |
void discoverWi232(void) |
{ |
int16_t RegisterWi232; |
SwitchToWi232(); /* Serielle Kanäle Wi232 mit USB verbinden*/ |
set_WI232CMD(); |
_delay_ms(200); |
USART_Init( UART_BAUD_SELECT(57600,F_CPU) ); /* erstmal mit 57600 versuchen*/ |
lcd_printpns_at (0, 0, PSTR("search Wi.232 Modul"),0); |
lcd_printpns_at (0, 1, PSTR("with 57600 Baud "),0); |
RegisterWi232 = ReadWi232(regDiscover); |
Wi232_hardware = 1; |
if (RegisterWi232 == 0) |
{ |
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); |
Wi232_hardware = 2; |
} |
if (RegisterWi232 == 0) |
{ |
lcd_cls(); |
lcd_printpns_at (0, 0, PSTR("no Wi.232 found "),0); |
Wi232_hardware = 0; |
} |
if (RegisterWi232 == 0xFF) |
{ |
lcd_cls(); |
lcd_printpns_at (0, 0, PSTR("Wi.232 Sytaxerror "),0); |
BeepTime = 1000; |
BeepMuster = 0x0040; |
_delay_ms(2000); |
} |
if (RegisterWi232 != 0) |
{ |
lcd_cls(); |
if (Wi232_hardware ==1) |
lcd_printpns_at (0, 0, PSTR("Wi.232 found 57600"),0); |
if (Wi232_hardware ==2) // bei 2400 Baud |
{ |
WiIsSet= false; //wenn hier 2400 gefunden wurde ist Wi232 nicht initialisiert |
lcd_printpns_at (0, 0, PSTR("Wi.232 found 2400"),0); |
if (WriteWi232(regNVDATARATE,Wi232_57600)!=0) /* NV-Ram auf 57600 setzen*/ |
{ |
lcd_printpns_at (0, 1, PSTR("Error set NV-RAM"),0); |
BeepTime = 1000; |
BeepMuster = 0x0040; |
_delay_ms(2000); |
} |
else |
{ |
_delay_ms(1000); |
lcd_printpns_at (0, 1, PSTR("NV-RAM set to 57600"),0); |
lcd_printpns_at (0, 2, PSTR("ok "),0); |
_delay_ms(2000); |
} |
if (WriteWi232(regDATARATE,Wi232_57600)!=0) /* Ram auf 57600 setzen*/ |
{ |
lcd_printpns_at (0, 3, PSTR("Error set RAM "),0); |
BeepTime = 1000; |
BeepMuster = 0x0040; |
_delay_ms(2000); |
} |
else |
{ |
_delay_ms(1000); |
lcd_printpns_at (0, 1, PSTR("RAM set to 57600 "),0); |
lcd_printpns_at (0, 2, PSTR("ok "),0); |
_delay_ms(2000); |
} |
USART_Init( UART_BAUD_SELECT(57600,F_CPU) ); |
} |
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(void) |
{ |
uint8_t i = 0; |
Change_Output(Uart02Wi); // Verbindung zu Wi232 herstellen |
discoverWi232(); // 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(regNVDATARATE,Wi232_57600)!=0) |
InitErrorWi232(15);/* Baudrate*/ |
lcd_printpns_at (i++,4,PSTR("."),0); |
if (WriteWi232(regDATARATE,Wi232_57600)!=0) |
InitErrorWi232(16);/* Baudrate*/ |
lcd_printpns_at (i++,4,PSTR("."),0); |
if (WriteWi232(regNVNETGRP,WiNetworkGroup)!=0) |
InitErrorWi232(17);/* Networkgroup */ |
lcd_printpns_at (i++,4,PSTR("."),0); |
if (WriteWi232(regNETGRP,WiNetworkGroup)!=0) |
InitErrorWi232(18);/* Networkgroup */ |
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); |
BeepTime = 1000; |
BeepMuster = 0x0040; |
_delay_ms(2000); |
} |
else |
{ |
lcd_printpns_at (0, 2, PSTR("Wi232 Init ok...."),0); |
WriteWiInitFlag(); // Init merken |
} |
USART_Init (UART_BAUD_SELECT(57600,F_CPU)); |
_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; |
BeepTime = 500; |
BeepMuster = 0x0040; |
_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); |
BeepTime = 1000; |
BeepMuster = 0x0040; |
_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(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) ); |
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/GPL_PKT_V3_5_8a_FC086/Wi232.h |
---|
0,0 → 1,177 |
/***************************************************************************** |
* 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(void); |
void InitWi232(void); |
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; |
// 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/GPL_PKT_V3_5_8a_FC086/bluetooth.c |
---|
0,0 → 1,876 |
/** |
* 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 "bluetooth.h" |
#include "main.h" |
#ifdef HWVERSION3_9 |
#include "uart1.h" |
#include "usart.h" |
#include "fifo.h" |
#include "error.h" |
#include "lcd.h" |
#include "eeprom.h" |
#include "error.h" |
#include "setup.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_57600, // ATL4 Baudrate 57600 |
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; |
#ifdef SQUIRREL |
#define IN_FIFO_SIZE 100 |
#endif |
#ifdef NUT |
#define IN_FIFO_SIZE 65 |
#endif |
static uint8_t bt_buffer[IN_FIFO_SIZE]; |
static fifo_t in_fifo; |
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; |
// 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); |
} |
//-------------------------------------------------------------- |
static 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 |
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 |
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 |
return; |
// UART Inputbuffer empty, nothing to do |
case UART_NO_DATA: |
return; |
default: |
{ |
fifo_write(&in_fifo, uart_data); |
// USART_putc(uart_data); |
} |
} |
} |
#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) |
{ |
_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; |
break; |
case BT_SET_DEFAULT: |
strcpy_P(full_command, PSTR("ATZ0")); |
break; |
case BT_SET_57600: |
strcpy_P(full_command, PSTR("ATL4")); |
break; |
case BT_SET_NOANSWER: |
strcpy_P(full_command, PSTR("ATQ1")); |
break; |
case BT_SET_NOECHO: |
strcpy_P(full_command, PSTR("ATE0")); |
break; |
case BT_SET_ANSWER: |
strcpy_P(full_command, PSTR("ATQ0")); |
break; |
case BT_SET_ECHO: |
strcpy_P(full_command, PSTR("ATE1")); |
break; |
case BT_TEST: |
strcpy_P(full_command, PSTR("AT")); |
break; |
case BT_CONNECT: |
strcpy_P(full_command, PSTR("ATA")); |
break; |
case BT_DISCONNECT: |
strcpy_P(full_command, PSTR("ATH")); |
break; |
case BT_CLEAR_ADDRESS: |
strcpy_P(full_command, PSTR("ATD0")); |
break; |
case BT_SET_ADDRESS: |
strcpy_P(full_command, PSTR("ATD=")); |
memcpy((full_command + strlen(full_command)), data, 12); |
full_command[16] = 0; |
break; |
case BT_FIND_DEVICES: |
strcpy_P(full_command, PSTR("ATF?")); |
break; |
case BT_DISABLE_AUTOCONNECT: |
strcpy_P(full_command, PSTR("ATO1")); |
break; |
case BT_SET_MASTER: |
strcpy_P(full_command, PSTR("ATR0")); |
break; |
case BT_SET_SLAVE: |
strcpy_P(full_command, PSTR("ATR1")); |
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; |
break; |
case BT_SET_DISPWRDOWN: |
strcpy_P(full_command, PSTR("ATS1")); |
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_ECHO) |
return true; |
if (command== BT_SET_ANSWER) |
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")); |
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 < 3; 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) |
{ |
/* Set comm_mode to CMD */ |
comm_mode = BT_CMD; |
// test(); |
/* 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_USBOn(); |
if (!init_error) |
{ |
WriteBTInitFlag(); // Init merken |
return true; |
} |
else |
return false; |
} |
else |
{ |
set_USBOn(); |
return false; |
} |
} |
#ifndef SaveMem |
//-------------------------------------------------------------- |
uint16_t bt_set_mode(const bt_mode_t mode) |
{ |
if (update_comm_mode(0) == BT_DATA) |
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); |
} |
if (mode == BLUETOOTH_SLAVE) |
if (send_cmd(BT_SET_SLAVE, NULL)) |
{ |
bt_mode = BLUETOOTH_SLAVE; |
} |
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) |
{ |
// 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) |
{ |
/* Bluetooth reseten */ |
// set_bit(PORTC.DIR, 4); |
// set_bit(PORTC.OUT, 4); |
_delay_ms(500); |
// clear_bit(PORTC.OUT, 4); |
// return bt_init(); |
#if 1 |
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(1500); |
} |
//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; |
#endif |
} |
//-------------------------------------------------------------- |
void copy_address(const char *src, char *dst) |
{ |
uint8_t off = 0; |
for (uint8_t i = 0; i < 14; i++) |
{ |
if (src[i + off] == '-') |
off++; |
dst[i] = src[i + off]; |
} |
} |
//-------------------------------------------------------------- |
uint16_t bt_discover(char result[8][12]) |
// 14.8.2011 ist noch nicht getestet, wird für PKT auch nicht benötigt, Cebra |
{ |
// update_callback(20); |
test(); |
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; |
uint8_t pos = 0; |
uint16_t Timeout = 20000; |
uint8_t pos1 = 0; |
do |
{ |
uart_receive(); |
Timeout--; |
pos1++; |
_delay_ms(1); |
} |
while ((Timeout > 0) ||(!fifo_strstr_pgm(&in_fifo, PSTR("Inquiry Results:\r\n")))); |
// byte_to_hex(Timeout); |
assert_pgm((!fifo_strstr_pgm(&in_fifo, PSTR("Inquiry Results:\r\n"))),PSTR("INQ Result false")); |
info_pgm (PSTR ("Rec1")); |
for (uint16_t i = 0; i < 60000; i++) |
{ |
//if ((i % 1000) == 0) |
//update_callback(40 + i / 1000); |
uart_receive(); |
// lcd_printp(".", 0); |
_delay_ms(1); |
} |
info_pgm (PSTR ("Rec2")); |
//update_callback(100); |
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"))) |
{ |
fifo_clear(&in_fifo); |
test(); |
return true; |
} |
if (strncmp_P(PSTR("0012"), &buffer[21], 4)) |
{ |
copy_address(&buffer[21], result[pos]); |
pos++; |
} |
} |
return false; |
} |
#endif |
#endif |
#endif /* SQUIRREL */ |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/bluetooth.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) 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 |
//void InitBT(void); |
typedef struct _device_info device_info; |
// device info struct, holds mac , class and extensions + values of a device |
struct _device_info |
{ |
char mac[12]; |
uint8_t class; |
uint8_t extension_types[EXTENSIONS_LIST]; |
uint16_t values_cache[EXTENSIONS_LIST]; |
}; |
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)) |
// 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)); |
#endif // SQUIRREL |
#endif |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/connect.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/pgmspace.h> |
#include "lcd.h" |
#include "timer.h" |
#include "eeprom.h" |
#include "messages.h" |
#if defined HWVERSION1_3W || 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<<PD2); // Pullup aus |
PORTD &= ~(1<<PD3); |
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<<PD2); // Pullup aus |
PORTD &= ~(1<<PD3); |
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); |
while(!get_key_press (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
if (U02SV2 == 1) |
Change_Output(Uart02FC); |
else |
Change_Output(Uart02Wi); |
set_USBOn(); |
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); |
while(!get_key_press (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
if (U02SV2 == 1) |
Change_Output(Uart02FC); |
else |
Change_Output(Uart02Wi); |
set_USBOn(); |
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_USBOn(); |
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); |
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); |
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/GPL_PKT_V3_5_8a_FC086/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/GPL_PKT_V3_5_8a_FC086/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 |
#endif |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/debug.c |
---|
0,0 → 1,370 |
/***************************************************************************** |
* 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" |
#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); |
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); |
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(); |
} |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/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/GPL_PKT_V3_5_8a_FC086/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/GPL_PKT_V3_5_8a_FC086/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/GPL_PKT_V3_5_8a_FC086/eeprom.c |
---|
0,0 → 1,353 |
/***************************************************************************** |
* 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_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 EEMEM EE_BTPin[bt_pin_length + 1]; |
uint8_t EEMEM EE_BTName[bt_name_length + 1]; |
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 |
char bt_pin[bt_pin_length + 1]; // BT Pinnummer |
char bt_name[bt_name_length + 1]; // BT Name |
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 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 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); |
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); |
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); |
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 = 254; // default ungesetzt |
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 |
PKT_IdleBeep = 0; // kein Piepsen bei Inaktivität |
PKT_StartInfo = true; // Startnformationen anzeigen |
PKT_Accutyp = true; // True = Lipo, False= LiON |
Lipo_UOffset = 6000; // Offset für PKT-Lipomessung |
strcpy_P(bt_pin, PSTR("1234")); |
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); |
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("Neu Starten mit "), 0); |
lcd_printp_at (18, 7, PSTR("OK"), 0); |
BeepTime = 200; |
BeepMuster = 0x0080; |
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_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_block ((const void*)&bt_pin, (void*)&EE_BTPin, bt_pin_length); |
eeprom_write_block ((const void*)&bt_name, (void*)&EE_BTName, bt_name_length); |
} |
//-------------------------------------------------------------- |
// |
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/GPL_PKT_V3_5_8a_FC086/eeprom.h |
---|
0,0 → 1,148 |
/***************************************************************************** |
* 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 0x58 //Summe aus Soft.vers. ohne erste Ziffer zB 3.5.5 = 55 |
#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 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 char bt_pin[bt_pin_length + 1]; // BT Pinnummer |
extern char bt_name[bt_name_length + 1]; // BT Name |
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; |
#endif |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/error.c |
---|
0,0 → 1,206 |
/* |
___ ___ ___ ___ _____ |
/ /\ /__/\ / /\ /__/\ / /::\ |
/ /::\ | |::\ / /::\ \ \:\ / /:/\:\ |
/ /:/\:\ ___ ___ | |:|:\ / /:/\:\ \ \:\ / /:/ \:\ |
/ /:/~/::\ /__/\ / /\ __|__|:|\:\ / /:/ \:\ _____\__\:\ /__/:/ \__\:| |
/__/:/ /:/\:\ \ \:\ / /:/ /__/::::| \:\ /__/:/ \__\:\ /__/::::::::\ \ \:\ / /:/ |
\ \:\/:/__\/ \ \:\ /:/ \ \:\~~\__\/ \ \:\ / /:/ \ \:\~~\~~\/ \ \:\ /:/ |
\ \::/ \ \:\/:/ \ \:\ \ \:\ /:/ \ \:\ ~~~ \ \:\/:/ |
\ \:\ \ \::/ \ \:\ \ \:\/:/ \ \:\ \ \::/ |
\ \:\ \__\/ \ \:\ \ \::/ \ \:\ \__\/ |
\__\/ \__\/ \__\/ \__\/ |
___ ___ ___ ___ ___ ___ |
/ /\ / /\ /__/\ /__/\ / /\ /__/\ |
/ /:/ / /::\ | |::\ | |::\ / /::\ \ \:\ |
/ /:/ / /:/\:\ | |:|:\ | |:|:\ / /:/\:\ \ \:\ |
/ /:/ ___ / /:/ \:\ __|__|:|\:\ __|__|:|\:\ / /:/ \:\ _____\__\:\ |
/__/:/ / /\ /__/:/ \__\:\ /__/::::| \:\ /__/::::| \:\ /__/:/ \__\:\ /__/::::::::\ |
\ \:\ / /:/ \ \:\ / /:/ \ \:\~~\__\/ \ \:\~~\__\/ \ \:\ / /:/ \ \:\~~\~~\/ |
\ \:\ /:/ \ \:\ /:/ \ \:\ \ \:\ \ \:\ /:/ \ \:\ ~~~ |
\ \:\/:/ \ \:\/:/ \ \:\ \ \:\ \ \:\/:/ \ \:\ |
\ \::/ \ \::/ \ \:\ \ \:\ \ \::/ \ \:\ |
\__\/ \__\/ \__\/ \__\/ \__\/ \__\/ |
** |
* Error handling functions |
*/ |
#include <stdbool.h> |
//#include "ftdi.h" |
#include <avr/pgmspace.h> |
#include "error_driver.h" |
//-------------------------------------------------------------- |
inline void _send_msg(const char *msg) |
{ |
for (uint8_t i=0; i<255 && msg[i]!='\0'; i++) |
{ |
error_driver_write_c(msg[i]); |
} |
error_driver_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++) |
{ |
error_driver_write_c(myByte); |
myByte = pgm_read_byte(msg+i); |
} |
} |
#ifdef DEBUG |
//-------------------------------------------------------------- |
void error_init(void) |
{ |
error_driver_Init(); |
} |
//-------------------------------------------------------------- |
void error_putc(const char c) |
{ |
error_driver_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); |
error_driver_write_c('\n'); |
} |
} |
//-------------------------------------------------------------- |
void info_pgm(const prog_char *msg) |
{ |
send_pgm(PSTR("INF:")); |
send_pgm(msg); |
error_driver_write_c('\n'); |
} |
//-------------------------------------------------------------- |
void warn_pgm(const prog_char *msg) |
{ |
send_pgm(PSTR("WARN:")); |
send_pgm(msg); |
error_driver_write_c('\n'); |
} |
//-------------------------------------------------------------- |
void error_pgm(const prog_char *msg) |
{ |
send_pgm(PSTR("ERR:")); |
send_pgm(msg); |
error_driver_write_c('\n'); |
} |
//-------------------------------------------------------------- |
void debug_pgm(const prog_char *msg) |
{ |
send_pgm(PSTR("DBG:")); |
send_pgm(msg); |
error_driver_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/GPL_PKT_V3_5_8a_FC086/error.h |
---|
0,0 → 1,75 |
/* |
___ ___ ___ ___ _____ |
/ /\ /__/\ / /\ /__/\ / /::\ |
/ /::\ | |::\ / /::\ \ \:\ / /:/\:\ |
/ /:/\:\ ___ ___ | |:|:\ / /:/\:\ \ \:\ / /:/ \:\ |
/ /:/~/::\ /__/\ / /\ __|__|:|\:\ / /:/ \:\ _____\__\:\ /__/:/ \__\:| |
/__/:/ /:/\:\ \ \:\ / /:/ /__/::::| \:\ /__/:/ \__\:\ /__/::::::::\ \ \:\ / /:/ |
\ \:\/:/__\/ \ \:\ /:/ \ \:\~~\__\/ \ \:\ / /:/ \ \:\~~\~~\/ \ \:\ /:/ |
\ \::/ \ \:\/:/ \ \:\ \ \:\ /:/ \ \:\ ~~~ \ \:\/:/ |
\ \:\ \ \::/ \ \:\ \ \:\/:/ \ \:\ \ \::/ |
\ \:\ \__\/ \ \:\ \ \::/ \ \:\ \__\/ |
\__\/ \__\/ \__\/ \__\/ |
___ ___ ___ ___ ___ ___ |
/ /\ / /\ /__/\ /__/\ / /\ /__/\ |
/ /:/ / /::\ | |::\ | |::\ / /::\ \ \:\ |
/ /:/ / /:/\:\ | |:|:\ | |:|:\ / /:/\:\ \ \:\ |
/ /:/ ___ / /:/ \:\ __|__|:|\:\ __|__|:|\:\ / /:/ \:\ _____\__\:\ |
/__/:/ / /\ /__/:/ \__\:\ /__/::::| \:\ /__/::::| \:\ /__/:/ \__\:\ /__/::::::::\ |
\ \:\ / /:/ \ \:\ / /:/ \ \:\~~\__\/ \ \:\~~\__\/ \ \:\ / /:/ \ \:\~~\~~\/ |
\ \:\ /:/ \ \:\ /:/ \ \:\ \ \:\ \ \:\ /:/ \ \:\ ~~~ |
\ \:\/:/ \ \:\/:/ \ \:\ \ \:\ \ \:\/:/ \ \:\ |
\ \::/ \ \::/ \ \:\ \ \:\ \ \::/ \ \:\ |
\__\/ \__\/ \__\/ \__\/ \__\/ \__\/ |
* |
* Error handling functions. |
*/ |
#ifndef __ERROR__ |
#define __ERROR__ |
#include <avr/pgmspace.h> |
#include <stdbool.h> |
#include "main.h" |
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 |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/error_driver.c |
---|
0,0 → 1,21 |
#include "cpu.h" |
#include "error_driver.h" |
#include "main.h" |
#ifdef DEBUG |
#include "usart.h" |
#include "uart1.h" |
void error_driver_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/GPL_PKT_V3_5_8a_FC086/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 error_driver_write_c(uint8_t c); |
extern void error_driver_Init(void); |
#else |
#define error_driver_write_c(c) {} |
#define error_driver_init() {} |
#endif |
#endif //__ERROR_DRIVER__ |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/fifo.c |
---|
0,0 → 1,114 |
/** |
* a simple Fifo |
* @file fifo.c |
* @author Pascal Schnurr |
*/ |
#include "fifo.h" |
//-------------------------------------------------------------- |
void fifo_init (fifo_t * fifo, uint8_t * buffer, uint16_t size) |
{ |
fifo->size = size; |
fifo->buffer = buffer; |
fifo->head = 0; |
fifo->count = 0; |
} |
//-------------------------------------------------------------- |
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_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; |
} |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/fifo.h |
---|
0,0 → 1,83 |
/** |
* 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; |
/** \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, |
* 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/GPL_PKT_V3_5_8a_FC086/font8x6.c |
---|
0,0 → 1,171 |
/***************************************************************************** |
* 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] = |
{ |
{ 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 'ß' |
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 8 08 |
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 9 09 |
{ 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/GPL_PKT_V3_5_8a_FC086/font8x6.h |
---|
0,0 → 1,29 |
/***************************************************************************** |
* 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]; |
#endif |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/gps.c |
---|
0,0 → 1,364 |
/***************************************************************************** |
* 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" |
#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); |
write_ndigit_number_u (col+4, line, UBX_buffer[12 + 12*i], 2, 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]); |
uint16_t acc = (uint16_t)join_4_bytes(&UBX_buffer[24]); |
write_ndigit_number_u (11, 2, acc, 5, 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); |
lcd_printp_at (13,3, PSTR("."), 0); |
write_ndigit_number_u (14, 3, (pdop % 100),2, 1); |
} |
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); |
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); |
lcd_printp_at (12,5, PSTR("."), 0); |
write_ndigit_number_u (13, 5, (uint16_t)((lon/1000) % 10000), 4, 1); |
write_ndigit_number_u (17, 5, (uint16_t)((lon/10) % 100), 2, 1); |
uint32_t lat = join_4_bytes(&UBX_buffer[8]); |
write_ndigit_number_u (10, 6, (uint16_t)(lat/10000000), 2, 0); |
lcd_printp_at (12,6, PSTR("."), 0); |
write_ndigit_number_u (13, 6, (uint16_t)((lat/1000) % 10000), 4, 1); |
write_ndigit_number_u (17, 6, (uint16_t)((lat/10) % 100), 2, 1); |
uint16_t height = (uint16_t)(join_4_bytes(&UBX_buffer[16])/1000); |
write_ndigit_number_u (11, 7, height, 4, 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; |
} |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/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/GPL_PKT_V3_5_8a_FC086/lcd.c |
---|
0,0 → 1,1370 |
/***************************************************************************** |
* 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 0 // 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 |
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; |
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) |
{ |
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, 1); |
lcd_line (x0 + radius, y0, x0 - radius, y0, 1); |
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, 1); |
lcd_line (x0 + x, y0 - y, x0 - x, y0 - y, 1); |
lcd_line (x0 + y, y0 + x, x0 - y, y0 + x, 1); |
lcd_line (x0 + y, y0 - x, x0 - y, y0 - x, 1); |
} |
} |
//----------------------------------------------------------- |
// |
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) |
{ |
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, '*', 0); |
} |
return; |
} |
for (uint8_t i = 0; i < length - len; i++) |
{ |
if (pad) |
{ |
lcd_putc (x++, y, '0', 0); |
} |
else |
{ |
lcd_putc (x++, y, ' ', 0); |
} |
} |
lcd_print_at(x, y, (uint8_t*)s, 0); |
} |
//----------------------------------------------------------- |
// 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) |
{ |
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, '*', 0); |
} |
return; |
} |
for (uint8_t i = 0; i < length - len; i++) |
{ |
if (pad) |
{ |
lcd_putc (x++, y, '0', 0); |
} |
else |
{ |
lcd_putc (x++, y, ' ', 0); |
} |
} |
lcd_print_at(x, y, (uint8_t*)s, 0); |
} |
//----------------------------------------------------------- |
// 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) |
{ |
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, '*', 0); |
} |
return; |
} |
for (uint8_t i = 0; i < length - len; i++) |
{ |
if (pad) |
{ |
lcd_putc (x++, y, '0', 0); |
} |
else |
{ |
lcd_putc (x++, y, ' ', 0); |
} |
} |
char rest = s[len - 1]; |
s[len - 1] = 0; |
if (len == 1) |
{ |
lcd_putc (x-1, y, '0', 0); |
} |
else if (len == 2 && s[0] == '-') |
{ |
lcd_putc (x-1, y, '-', 0); |
lcd_putc (x, y, '0', 0); |
} |
else |
{ |
lcd_print_at(x, y, (uint8_t*)s, 0); |
} |
x += len - 1; |
lcd_putc (x++, y, '.', 0); |
lcd_putc (x++, y, rest, 0); |
} |
//----------------------------------------------------------- |
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) |
{ |
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, '*', 0); |
} |
return; |
} |
for (uint8_t i = 0; i < length - len; i++) |
{ |
if (pad) |
{ |
lcd_putc (x++, y, '0', 0); |
} |
else |
{ |
lcd_putc (x++, y, ' ', 0); |
} |
} |
char rest = s[len - 1]; |
s[len - 1] = 0; |
if (len == 1) |
{ |
lcd_putc (x-1, y, '0', 0); |
} |
else if (len == 2 && s[0] == '-') |
{ |
lcd_putc (x-1, y, '-', 0); |
lcd_putc (x, y, '0', 0); |
} |
else |
{ |
lcd_print_at(x, y, (uint8_t*)s, 0); |
} |
x += len - 1; |
lcd_putc (x++, y, '.', 0); |
lcd_putc (x++, y, rest, 0); |
} |
//----------------------------------------------------------- |
// 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); |
lcd_putc (x + 2, y, ':', 0); |
write_ndigit_number_u (x + 3, y, seconds, 2, 1); |
} |
//----------------------------------------------------------- |
// 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); |
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); |
position = position - ((uint16_t) (position / (int32_t) 1000) * (int32_t) 1000); |
write_ndigit_number_u (x + 8, y, (uint16_t) position, 3, 1); |
lcd_putc (x + 11, y, 0x1e, 0); // degree symbol |
} |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/lcd.h |
---|
0,0 → 1,273 |
/***************************************************************************** |
* 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 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); |
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); |
/** |
* 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); |
/** |
* 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); |
/** |
* 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); |
/** |
* 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/GPL_PKT_V3_5_8a_FC086/lipo.c |
---|
0,0 → 1,149 |
/***************************************************************************** |
* 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 "lcd.h" |
#include "lipo.h" |
#include "eeprom.h" |
// 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) |
{ |
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); // Prescaler 128, Freilaufend, Interrupte frei |
} |
/*! Error compensation, Scaling 16-bit result, Rounding up |
, Calculate 16-bit result, Resets variables |
Quelle AVR121: Enhancing ADC resolution by versampling |
*/ |
void oversampled(void) |
{ |
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) |
{ |
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 |
} |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/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/GPL_PKT_V3_5_8a_FC086/main.c |
---|
0,0 → 1,378 |
/***************************************************************************** |
* 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_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, 4, strGet(START_LASTPOS), 2); |
lcd_puts_at(0, 5, strGet(START_LASTPOS1), 3); |
lcd_puts_at(0, 7, strGet(START_LASTPOS2), 0); |
write_ndigit_number_u (1, 6, (uint16_t)(LastLongitude/10000000), 2, 0); |
lcd_printp_at (3, 6, PSTR("."), 0); |
write_ndigit_number_u (4, 6, (uint16_t)((LastLongitude/1000) % 10000), 4, 1); |
write_ndigit_number_u (8, 6, (uint16_t)((LastLongitude/10) % 100), 2, 1); |
write_ndigit_number_u (12, 6, (uint16_t)(LastLatitude/10000000), 2, 0); |
lcd_printp_at (14, 6, PSTR("."), 0); |
write_ndigit_number_u (15, 6, (uint16_t)((LastLatitude/1000) % 10000), 4, 1); |
write_ndigit_number_u (19, 6, (uint16_t)((LastLatitude/10) % 100), 2, 1); |
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, 1, 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, 1, strGet(START_FCFOUND3), 0); |
} |
hardware = NC; |
current_hardware = hardware; |
} |
if (PKT_StartInfo == true) |
{ |
// lcd_printp (PSTR("Version: "), 0); |
lcd_puts_at(0, 2, strGet(START_VERSIONCHECK), 0); |
lcd_write_number_u (version->SWMajor); |
lcd_printp (PSTR("."), 0); |
lcd_write_number_u (version->SWMinor); |
lcd_putc (lcd_xpos, lcd_ypos, version->SWPatch + 'a', 0); |
_delay_ms(1500); |
} |
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(0, 1, strGet(START_VERSIONCHECK1), 0); |
// lcd_printp (PSTR(" erwartet\r\n"), 0); |
lcd_printp_at (0, 1, PSTR("EEPromRev.:"), 0); |
lcd_write_number_u (mk_param_struct->Revision); |
lcd_puts_at(0, 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, 3, strGet(START_VERSIONCHECK3), 0); |
lcd_puts_at(0, 4, strGet(START_VERSIONCHECK4), 0); |
lcd_printp (PSTR(FC_Version),0); |
// lcd_printp (PSTR("\r\nkompatibel"), 0); |
lcd_puts_at(0, 5, strGet(START_VERSIONCHECK5), 0); |
hardware = NO; |
BeepTime = 1500; |
BeepMuster = 0x0040; |
_delay_ms(4000); |
} |
#endif |
mode = 0; |
rxd_buffer_locked = FALSE; |
timer = 50; |
while (timer > 0); |
for (;;) |
{ |
main_menu (); |
} |
} |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/main.h |
---|
0,0 → 1,121 |
/***************************************************************************** |
* 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* |
*****************************************************************************/ |
/** |
* @Author Cebra |
* |
* ${tags} |
*/ |
//** |
// * |
// * |
// * |
// |
/* |
* File name: $HeadURL$ |
* Revision: $Revision$ |
* Last modified: $Date$ |
* Last modified by: $Author$ |
* $Id$ |
*/ |
#ifndef _MAIN_H |
#define _MAIN_H |
// Version der Software |
#define PKTSWVersion "3.5.8a" // 1. SVN Version test |
//#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 |
//#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_1 // Test Hardware Cebra Juni 2011 |
#define HWVERSION3_9 // Hardware Cebra Oktober 2011 ATmega1284P |
#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 |
#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 |
Property changes: |
Added: svn:keywords |
+Author Date Id Revision HeadURL |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/menu.c |
---|
0,0 → 1,639 |
/***************************************************************************** |
* 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 "messages.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" |
#define ITEMS_NC 7 |
prog_char param_menuitems_nc[ITEMS_NC][NUM_LANG][18]= // zeilen,zeichen+1 |
// German, English, French, Netherlands |
{ |
{"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 "}, |
{"PKT Tools \x1d","PKT Tools \x1d","PKT Tools \x1d","PKT Tools \x1d"}, |
}; |
#define ITEMS_FC 4 |
prog_char param_menuitems_fc[ITEMS_FC][NUM_LANG][18]= // zeilen,zeichen+1 |
{ |
{"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 |
prog_char param_menuitems_no[ITEMS_NO][NUM_LANG][18]= // zeilen,zeichen+1 |
{ |
{"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 "}, |
}; |
#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 ", |
"2011 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; |
} |
show_Lipo(); |
} |
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; |
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); |
show_Lipo(); |
} |
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; |
if(hardware == NC) |
{ |
if((val+offset) == 1 ) |
osd(OSD_Mode); |
if((val+offset) == 2 ) |
osd(THREE_D_Mode); |
if((val+offset) == 3 ) |
display_data(); |
if((val+offset) == 4 ) |
edit_parameter(); |
if((val+offset) == 5 ) |
display_debug(); |
if((val+offset) == 6 ) |
gps(); |
if((val+offset) == 7 ) |
PKT_Tools(); |
} |
if(hardware == FC) |
{ |
if((val+offset) == 1 ) |
display_data(); |
if((val+offset) == 2 ) |
edit_parameter(); |
if((val+offset) == 3 ) |
display_debug(); |
if((val+offset) == 4 ) |
PKT_Tools(); |
} |
if(hardware == NO) |
{ |
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 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 ver "), 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_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/GPL_PKT_V3_5_8a_FC086/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/GPL_PKT_V3_5_8a_FC086/messages.c |
---|
0,0 → 1,1442 |
/**************************************************************************************** |
* 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 "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 |
//{ |
// 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_LASTPOSDEL, |
// START_SEARCHFC,ENDE,START_FCNOTFOUND,START_FCFOUND,START_FCFOUND1,START_FCFOUND2,START_FCFOUND3,START_VERSIONCHECK,START_VERSIONCHECK1, |
// START_VERSIONCHECK2,START_VERSIONCHECK3,START_VERSIONCHECK4,START_VERSIONCHECK5,LAST_STR |
//} STR; |
static const STRING strings[LAST_STR] = |
{ |
{ /*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 */ |
} |
}, |
{ /*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*/ |
"enfoncée 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 à Wi232", /* French */ |
"ingesteld op Wi232", /* Dutch */ |
} |
}, |
{ /*BOOTSV1*/ |
21, |
{ |
"auf Kabel eingestellt", /* German */ |
"set to kabel on SV2", /* English*/ |
"mis à kabel sur SV2", /* French */ |
"via kabelverbinding", /* Dutch */ |
} |
}, |
{ /**/ |
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*/ |
" dernière position ", /* French */ |
" Laatste positie ", /* Dutch */ |
} |
}, |
{ /*START_LASTPOS1*/ |
21, |
{ |
" Längengr Breitengr", /* German */ |
" longitude latitude ", /* English*/ |
" longitude latitude ", /* French */ |
" lengtegr. breedtegr.", /* Dutch */ |
} |
}, |
{ /*START_LASTPOS2*/ |
21, |
{ |
"löschen weiter", /* German */ |
"delete exit ", /* English*/ |
"supprimer plus ", /* French */ |
"wissen verder", /* Dutch */ |
} |
}, |
{ /*START_LASTPOSDEL*/ |
21, |
{ |
" gelöscht ", /* German */ |
" deleted ", /* English*/ |
" supprimé ", /* 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 trouvé!", /* 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*/ |
" trouvés", /* 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*/ |
" désactiver 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 intégré 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*/ |
"redémarrer 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 intégré 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*/ |
"démarrage 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 câble croisé", /* 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*/ |
"normale", /* French */ |
"Normaal", /* 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 */ |
} |
}, |
{ /*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 intégré :", /* 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 eingebaut:", /* German */ |
"BTM222 built in :", /* English*/ |
"BTM222 integre :", /* French */ |
"BTM222 ingebouwd:", /* 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 */ |
} |
}, |
{ /*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 alarmering:", /* Dutch */ |
} |
}, |
{ /*OSD_V, vorne*/ |
21, |
{ |
"V", /* German */ |
"F", /* English*/ |
"L", /* French */ |
"F", /* Dutch */ |
} |
}, |
{ /*OSD_H, hinten*/ |
21, |
{ |
"H", /* German */ |
"B", /* English*/ |
"D", /* French */ |
"A", /* Dutch */ |
} |
}, |
{ /*OSD_L, links*/ |
21, |
{ |
"L", /* German */ |
"L", /* English*/ |
"G", /* French */ |
"L", /* Dutch */ |
} |
}, |
{ /*OSD_R, rechts*/ |
21, |
{ |
"R", /* German */ |
"R", /* English*/ |
"D", /* French */ |
"R", /* Dutch */ |
} |
}, |
{ /*OSD_ERROR*/ |
21, |
{ |
"FEHLER: Datenverlust ", /* German */ |
"ERROR: Data lost", /* English*/ |
"perte de données", /* French */ |
"verlies van gegevens ", /* Dutch */ |
} |
}, |
{ /*OSD_POS1*/ |
21, |
{ |
"Letzte bekannte", /* German */ |
"Last known ", /* English*/ |
"Dernière position", /* French */ |
"Laatst bekende", /* Dutch */ |
} |
}, |
{ /*OSD_POS2*/ |
21, |
{ |
"Position gespeichert", /* German */ |
"position saved", /* English*/ |
"connue sauvé", /* French */ |
"positie gered", /* Dutch */ |
} |
}, |
{ /*PARA_SETTINGS*/ |
21, |
{ |
" Einstellungen x ", /* German */ |
" Setting x ", /* English*/ |
" Paramètres x ", /* French */ |
" Instellingen x ", /* 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*/ |
"activée", /* French */ |
"geactiveerd", /* Dutch */ |
} |
}, |
{ /*PARA_SAVESETT*/ |
21, |
{ |
" Setting x speichern?", /* German */ |
" store setting?", /* English*/ |
" Réglage magasin?", /* French */ |
" instell.op te slaan?", /* Dutch */ |
} |
}, |
{ /*PARA_SETTSAVED*/ |
21, |
{ |
"Gespeichert und", /* German */ |
"stored and", /* English*/ |
"stockés et", /* French */ |
"opgeslagen en", /* Dutch */ |
} |
}, |
{ /*PARA_COPY*/ |
21, |
{ |
"Kopiere Setting", /* German */ |
"copy settings", /* English*/ |
"paramètres de copie", /* French */ |
"kopieer instellingen", /* Dutch */ |
} |
}, |
{ /*PARA_FROMTO*/ |
21, |
{ |
" von x nach y", /* German */ |
" from x to y", /* English*/ |
" des x après y", /* French */ |
" van x na y", /* Dutch */ |
} |
}, |
{ /*PARA_ENDE*/ |
21, |
{ |
"von nach Ende OK", /* German */ |
"from to end OK", /* English*/ |
"des après 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 réglages", /* French */ |
"instellingen wijzigen", /* Dutch */ |
} |
}, |
{ /*PARA_SELECT*/ |
21, |
{ |
" Wähle Parameter ", /* German */ |
" select parameters ", /* English*/ |
"sélectionnez Paramèt.", /* French */ |
"Selecteer Parameters ", /* Dutch */ |
} |
}, |
{ /*PARA_SEITE*/ |
21, |
{ |
" Wähle Seite ", /* German */ |
" select page ", /* English*/ |
"Sélectionnez la page ", /* French */ |
" Selecteer pagina ", /* Dutch */ |
} |
}, |
{ /*PARA_SELSETT*/ |
21, |
{ |
" Wähle Setting: ", /* German */ |
" select setting ", /* English*/ |
"Sélectionnez setting ", /* French */ |
" Selecteer setting ", /* Dutch */ |
} |
}, |
//---------, , |
//----------------- |
}; |
char const * strGet(int str_no) |
{ |
return strings[str_no].text[DisplayLanguage]; |
} |
void Test_Language (void) // bleibt für Tests |
{ |
lcd_cls(); |
lcd_printp_at(12, 7, PSTR("Ende"), 0); |
do |
{ |
lcd_puts_at(1, 2, strGet(BOOT_WI1), 0); |
// lcd_printp_at(1, 2, strGet(BOOT_WI1), 0); |
} |
while(!get_key_press (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
return; |
} |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/messages.h |
---|
0,0 → 1,49 |
/**************************************************************************************** |
* 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 |
{ |
KEYLINE1, KEYLINE2, KEYLINE3,KEYLINE4, 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_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, DEBUGPKT, WITXRX, WINETWG, WINETWM, WITIMEOUT, WIUART, WI2321, WI2322, WI2323, YES, NOO, BT1, BT2, |
BT3, LIPO1, LIPO2, LIPO3, LIPO4, LIPO5, LIPO6, LOWBAT, OSD_V, OSD_H,OSD_L, OSD_R, 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, 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/GPL_PKT_V3_5_8a_FC086/mk-data-structs.h |
---|
0,0 → 1,330 |
/***************************************************************************** |
* 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.86 |
#define EEProm_Version 88 // FC EEProm Revision / Struktur FC 0.86 |
#define FC_Version "0.86x" //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 |
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 |
{ |
uint8_t Digital[2]; |
// NC: unsigned; FC: signed !!!! |
int16_t Analog[32]; // Debugvalues |
} __attribute__((packed)) DebugData_t; |
//typedef struct |
//{ |
// uint8_t line; |
// uint8_t text[20]; |
//} __attribute__((packed)) Display_t; |
//typedef struct |
//{ |
// uint8_t Revision; |
// int8_t Name[12]; |
// int8_t Motor[16][4]; |
// uint8_t crc; |
//} __attribute__((packed)) Mixer_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 |
//{ |
// signed int Winkel[3]; // nick, roll, compass in 0,1.^ |
// signed char Centroid[3]; |
// signed char reserve[5]; |
//} __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; |
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; |
// NaviCtrl struct |
// taken from |
// http://mikrocontroller.cco-ev.de/mikrowebsvn/filedetails.php?repname=NaviCtrl&path=%2Ftags%2FV0.15c%2Fuart1.h |
// |
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 FCFlags; // 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 RC_RSSI; // Receiver signal strength (since version 2 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; |
// MikroKopter Flags |
// taken from |
// http://svn.mikrokopter.de/mikrowebsvn/filedetails.php?repname=FlightCtrl&path=%2Ftags%2FV0.73d%2Ffc.h |
// |
#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 |
// 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 |
// 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 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 |
char Name[12]; |
unsigned char crc; // MUST BE THE LAST BYTE! |
} __attribute__((packed)) mk_param_struct_t; |
#endif |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/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); |
} |
} //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); |
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); |
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); |
} |
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); |
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); |
if(m == 0) lcd_printp_at (9, 2, PSTR("All"), 0); |
write_ndigit_number_u (9, 3, v, 3, 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); |
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); |
lcd_printp_at (0, 5, PSTR("Temperature:"), 0); |
write_ndigit_number_u (13,5,Motor[m-1].Temperature,3,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/GPL_PKT_V3_5_8a_FC086/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/GPL_PKT_V3_5_8a_FC086/osd.c |
---|
0,0 → 1,695 |
/***************************************************************************** |
* 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 "mk-data-structs.h" |
#define COSD_WASFLYING 4 |
#define TIMEOUT 200 // 2 sec |
// global definitions and global vars |
NaviData_t *naviData; |
// löschen und alle mit "naviData->Variometer" ersetzen |
//int8_t Variometer = 0; |
// 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; |
// store stats description in progmem to save space |
const char stats_item_0[] PROGMEM = "max Altitude:"; |
const char stats_item_1[] PROGMEM = "max Speed :"; |
const char stats_item_2[] PROGMEM = "max Distance:"; |
const char stats_item_3[] PROGMEM = "min Voltage :"; |
const char stats_item_4[] PROGMEM = "max Time :"; |
#if 1 |
const char stats_item_5[] PROGMEM = "max Current :"; |
const char stats_item_6[] PROGMEM = "UsedCapacity:"; |
#else |
const char stats_item_5[] PROGMEM = "Long. :"; |
const char stats_item_6[] PROGMEM = "Lat. :"; |
#endif |
const char *stats_item_pointers[] PROGMEM = { |
stats_item_0, |
stats_item_1, |
stats_item_2, |
stats_item_3, |
stats_item_4, |
stats_item_5, |
stats_item_6 |
}; |
//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 |
}; |
// Flags |
uint8_t COSD_FLAGS2 = 0; |
GPS_Pos_t last5pos[7]; |
uint8_t error = 0; |
//-------------------------------------------------------------- |
// 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) |
{ |
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; |
} |
} |
} |
//-------------------------------------------------------------- |
void print_statistics (void) |
{ |
uint8_t line = 0; |
lcd_cls (); |
// lcd_printp_at (12, 7, PSTR("Ende"), 0); |
lcd_puts_at(12, 7, strGet(ENDE), 0); |
// max Altitude |
lcd_printp_at (0, line, stats_item_pointers[0], 0); |
write_ndigit_number_s (13, line, max_Altimeter / (30 / AltimeterAdjust), 4, 0); |
lcd_putc (17, line, 'm', 0); |
// max Speed |
lcd_printp_at (0, ++line, stats_item_pointers[1], 0); |
write_ndigit_number_u (14, line, (uint16_t) (((uint32_t) max_GroundSpeed * (uint32_t) 9) / (uint32_t) 250), 3, 0); |
lcd_printp_at(17, line, PSTR("km/h"), 0); |
// max Distance |
lcd_printp_at (0, ++line, stats_item_pointers[2], 0); |
write_ndigit_number_u (14, line, max_Distance / 10, 3, 0); |
lcd_putc (17, line, 'm', 0); |
// max time |
lcd_printp_at (0, ++line, stats_item_pointers[4], 0); |
write_time (13, line, max_FlyingTime); |
// min voltage |
lcd_printp_at (0, ++line, stats_item_pointers[3], 0); |
write_ndigit_number_u_10th (13, line, min_UBat, 3, 0); |
lcd_putc (17, line, 'V', 0); |
#if 1 |
// max Current |
lcd_printp_at (0, ++line, stats_item_pointers[5], 0); |
write_ndigit_number_u_10th (13, line, max_Current, 3, 0); |
lcd_putc (17, line, 'A', 0); |
// Used Capacity |
lcd_printp_at (0, ++line, stats_item_pointers[6], 0); |
write_ndigit_number_u (13, line, max_Capacity, 4, 0); |
lcd_printp_at(17, line, PSTR("mAh"), 0); |
#else |
// longitude |
lcd_printp_at (0, ++line, stats_item_pointers[5], 0); |
write_gps_pos (8, line, naviData->CurrentPosition.Longitude); |
// latitude |
lcd_printp_at (0, ++line, stats_item_pointers[6], 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_printp_at (0, 0, PSTR(" Breitengr Längengr "), 2); |
lcd_puts_at(0, 0, strGet(START_LASTPOS1), 2); |
// lcd_printp_at (12, 7, PSTR("Ende"), 0); |
lcd_puts_at(12, 7, strGet(ENDE), 0); |
uint8_t ij =0; |
for(ij=0;ij<6;ij++) |
{ |
uint32_t lon = last5pos[ij].Longitude; |
write_ndigit_number_u (1, ij+1, (uint16_t)(lon/10000000), 2, 0); |
lcd_printp_at (3, ij+1, PSTR("."), 0); |
write_ndigit_number_u (4, ij+1, (uint16_t)((lon/1000) % 10000), 4, 1); |
write_ndigit_number_u (8, ij+1, (uint16_t)((lon/10) % 100), 2, 1); |
uint32_t lat = last5pos[ij].Latitude; |
write_ndigit_number_u (12, ij+1, (uint16_t)(lat/10000000), 2, 0); |
lcd_printp_at (14, ij+1, PSTR("."), 0); |
write_ndigit_number_u (15, ij+1, (uint16_t)((lat/1000) % 10000), 4, 1); |
write_ndigit_number_u (19, ij+1, (uint16_t)((lat/10) % 100), 2, 1); |
} |
while (!get_key_press (1 << KEY_ESC)) |
timer = TIMEOUT; |
get_key_press(KEY_ALL); |
lcd_cls(); |
} |
//-------------------------------------------------------------- |
void osd (uint8_t ShowMode) |
{ |
uint8_t flag; |
uint8_t tmp_dat; |
uint8_t OSD_Mode; |
uint8_t info_3D = 0; |
// 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; |
uint16_t old_hh = 0; |
uint8_t old_AngleNick = 0; |
uint8_t old_AngleRoll = 0; |
OSD_Mode = ShowMode; |
if(error == 0) |
lcd_cls(); |
if (hardware == FC) |
{ |
lcd_printp_at(0, 3, PSTR("Only with NC !"), 0); |
timer = 100; |
while (timer > 0); |
return; |
} |
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); |
flag = 0; |
timer = TIMEOUT; |
abo_timer = ABO_TIMEOUT; |
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->FCFlags & FCFLAG_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 (); |
if (get_key_press (1 << KEY_PLUS)) |
print_position (); |
} |
lcd_ecircle(22, 35, 16, 1); |
// Ground Speed |
write_ndigit_number_u (1, 0, (uint16_t) (((uint32_t) naviData->GroundSpeed * (uint32_t) 9) / (uint32_t) 250), 3, 0); |
lcd_printp_at(4, 0, PSTR("km/h"), 0); |
// Compass |
write_ndigit_number_u (14, 0, naviData->CompassHeading, 3, 0); |
lcd_putc (17, 0, 0x1E, 0); // degree symbol |
lcd_printp_at (18, 0, (const char *) (pgm_read_word ( &(directions_p[heading_conv(naviData->CompassHeading)]))), 0); |
draw_compass (12, 1, naviData->CompassHeading); |
// 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 (0, 1, naviData->Altimeter / (30 / AltimeterAdjust), 4, 0); |
else // up to 10m write meters.dm |
write_ndigit_number_s_10th (0, 1, naviData->Altimeter / (3 / AltimeterAdjust), 3, 0); |
lcd_putc (4, 1, 'm', 0); |
draw_variometer (54, 7, 10, 14, naviData->Variometer); |
// TODO: verify correctness |
uint16_t heading_home = (naviData->HomePositionDeviation.Bearing + 360 - naviData->CompassHeading) % 360; |
lcd_ecirc_line (22, 35, 15, old_hh, 0); |
old_hh = heading_home; |
lcd_ecirc_line (22, 35, 15, heading_home, 1); |
write_ndigit_number_u (7, 3, heading_home, 3, 0); |
lcd_putc (10, 3, 0x1e, 0); // degree symbol |
write_ndigit_number_u (7, 2, naviData->HomePositionDeviation.Distance / 10, 3, 0); |
lcd_putc (10, 2, 'm', 0); |
// Sats in use |
lcd_printp_at(11, 4, PSTR("Sats"), 0); |
write_ndigit_number_u (8, 4, naviData->SatsInUse, 2, 0); |
if (naviData->NCFlags & NC_FLAG_MANUAL_CONTROL) |
lcd_putc (19, 4, 'M', 0); // rc transmitter |
else |
lcd_putc (19, 4, 'X', 0); // clear |
if (naviData->NCFlags & NC_FLAG_CH) |
lcd_printp_at (8, 5, PSTR("Coming Home"), 0); |
else if (naviData->NCFlags & NC_FLAG_PH) |
lcd_printp_at (8, 5, PSTR("Pos. Hold "), 0); |
else // (naviData->NCFlags & NC_FLAG_FREE) |
lcd_printp_at (8, 5, PSTR("Free "), 0); |
// Flying time |
write_time (7, 6, naviData->FlyingTime); |
lcd_printp_at (12, 6, PSTR("h"), 0); |
// RC |
write_ndigit_number_u (15, 6, naviData->RC_Quality, 3, 0); |
lcd_printp_at(18, 6, PSTR("\x1F"), 0); // RC-transmitter |
if (naviData->NCFlags & NC_FLAG_NOSERIALLINK) |
{ |
lcd_printpns_at(19, 6, PSTR(" "), 0); // clear |
} |
else |
{ |
lcd_printpns_at(19, 6, PSTR("PC"), 0); |
} |
// Battery level |
write_ndigit_number_u_10th (0, 7, naviData->UBat, 3, 0); |
lcd_putc (4, 7, 'V', 0); |
// Akku Warnung |
if (naviData->UBat < MK_LowBat) |
{ //Beeper ein |
BeepTime = 3000; |
BeepMuster = 0x0020; |
} |
//if (naviData->UBat > MK_LowBat+2) //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 |
// Current |
write_ndigit_number_u_10th (7, 7, naviData->Current, 3, 0); |
lcd_putc (11, 7, 'A', 0); |
// Capacity |
write_ndigit_number_u (14, 7, naviData->UsedCapacity, 4, 0); |
lcd_printp_at(18, 7, PSTR("mAh"), 0); |
// remember statistics (only when engines running) |
if (naviData->FCFlags & FCFLAG_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->FCFlags; |
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(0,32,128,32,1); // horizontal // |
lcd_line(64,0,64,64,1); // vertical // |
lcd_printp_at(12, 7, PSTR("End Info"), 0); |
// 45' Angel |
lcd_line(62,11,66,11,1); // -- // |
lcd_line(22,30,22,34,1); // | // |
lcd_line(106,30,106,34,1); // | // |
lcd_line(62,53,66,53,1); // -- // |
if (info_3D == 1) |
{ |
lcd_line(34,17,36,15,1); // / // |
lcd_line(92,15,94,17,1); // \ // |
lcd_line(34,47,36,49,1); // \ // |
lcd_line(92,49,94,47,1); // / // |
// lcd_printp_at(9, 0, PSTR("V"), 0); |
// lcd_printp_at(0, 3, PSTR("L"), 0); |
// lcd_printp_at(20, 3, PSTR("R"), 0); |
// lcd_printp_at(9, 7, PSTR("H"), 0); |
lcd_puts_at(9, 0, strGet(OSD_V), 0); |
lcd_puts_at(0, 3, strGet(OSD_L), 0); |
lcd_puts_at(20, 3, strGet(OSD_R), 0); |
lcd_puts_at(9, 7, strGet(OSD_H), 0); |
lcd_printp_at(0, 0, PSTR("N:"), 0); |
write_ndigit_number_s (2, 0, naviData->AngleNick, 3, 0); |
lcd_printp_at(0, 7, PSTR("R:"), 0); |
write_ndigit_number_s (2, 7, naviData->AngleRoll, 3, 0); |
lcd_printp_at(15, 0, PSTR("K:"), 0); |
write_ndigit_number_s (18, 0,head_home, 3, 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+64; |
lcd_ecircle(old_AngleRoll,old_AngleNick, 10, 0); |
lcd_ecirc_line (old_AngleRoll, old_AngleNick, 9, old_hh, 0); |
lcd_ecircle(Roll, Nick, 10, 1); |
lcd_ecirc_line (Roll, Nick, 9, 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->FCFlags; |
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; |
} |
} |
} |
while (!get_key_press (1 << KEY_ESC) && timer); |
get_key_press(KEY_ALL); |
// 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 (!timer) |
{ // timeout occured |
if (flag) |
{ |
// Falls Spannungswarnung an war Beeper aus// |
BeepTime = 0; |
BeepMuster = 0xFFFF; |
lcd_cls (); |
WriteLastPosition(last5pos[0].Longitude,last5pos[0].Latitude); // im EEprom speichern |
lcd_puts_at(0, 0, strGet(OSD_ERROR), 2); |
// lcd_printp_at (0, 0, PSTR(" ERROR: Datenverlust "), 2); |
// lcd_printp_at (0, 2, PSTR("Letzte bekannte"), 0); |
// lcd_printp_at (0, 3, PSTR("Position gespeichert."), 0); |
lcd_puts_at(0, 2, strGet(OSD_POS1), 0); |
lcd_puts_at(0, 3, strGet(OSD_POS2), 0); |
// lcd_printp_at (19, 7, PSTR("OK"), 0); |
lcd_puts_at(19, 7, strGet(OK), 0); |
// lcd_printp_at (0, 5, PSTR(" Breitengr Längengr "), 0); |
lcd_puts_at(0, 5, strGet(START_LASTPOS1), 0); |
lcd_puts_at(12, 7, strGet(ENDE), 0); |
BeepTime = 1500; |
BeepMuster = 0x0040; |
error = 1; |
uint32_t lon = last5pos[0].Longitude; |
write_ndigit_number_u (1, 6, (uint16_t)(lon/10000000), 2, 0); |
lcd_printp_at (3, 6, PSTR("."), 0); |
write_ndigit_number_u (4, 6, (uint16_t)((lon/1000) % 10000), 4, 1); |
write_ndigit_number_u (8, 6, (uint16_t)((lon/10) % 100), 2, 1); |
uint32_t lat = last5pos[0].Latitude; |
write_ndigit_number_u (12, 6, (uint16_t)(lat/10000000), 2, 0); |
lcd_printp_at (14, 6, PSTR("."), 0); |
write_ndigit_number_u (15, 6, (uint16_t)((lat/1000) % 10000), 4, 1); |
write_ndigit_number_u (19, 6, (uint16_t)((lat/10) % 100), 2, 1); |
while (!get_key_press (1 << KEY_ENTER)); |
timer = TIMEOUT; |
lcd_cls(); |
return; |
} |
} |
} |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/osd.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 _OSD_H |
#define _OSD_H |
void osd (uint8_t ShowMode); |
void vario_beep_output (void); |
#endif |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/parameter.c |
---|
0,0 → 1,1379 |
/***************************************************************************** |
* 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 "main.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) |
//-------------------------------------------------------------- |
// Group, Typ, Min, Max, Struct-Name(Value), Default1, Default2, Default3+4+5, |
// 0 1 2 3 4 5 6 7 |
// ||| |
// Typ == (0 ohne Poti, 1 mit Poti, 2 bitfield, 3 serCh, 4 LEDmask, 5 Angle, 6 Empfaenger), |
// |
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,0x04, 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,0x01, MKOSO(GlobalConfig), 0,0,0, // hoehenregler |
1,2,0,0x20, MKOSO(GlobalConfig), 1,1,1, // gps |
1,2,0,0x08, MKOSO(GlobalConfig), 1,1,1, // kompass |
1,2,0,0x10, MKOSO(GlobalConfig), 0,0,0, // feste ausrichtung |
1,2,0,0x04, MKOSO(ExtraConfig), 0,0,0, // erweiterte signal pruefung |
1,2,0,0x40, MKOSO(GlobalConfig), 1,1,1, // achsentkopplung |
1,2,0,0x80, MKOSO(GlobalConfig), 0,0,0, // drehratenbregrenzung |
1,2,0,0x04, 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,0x01, MKOSO(BitConfig), 0,0,0, // oben |
3,2,0,0x02, MKOSO(BitConfig), 0,0,0, // unten |
3,2,0,0x04, MKOSO(BitConfig), 0,0,0, // links |
3,2,0,0x08, 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,0x01, MKOSO(GlobalConfig), 0,0,0, // hoehenrelger |
4,2,0,0x01, MKOSO(ExtraConfig), 0,0,0, // vario oder hoeenbergenzung |
4,2,0,0x02, MKOSO(GlobalConfig), 1,1,1, // hoehenschalter |
4,2,0,0x02, 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-66 |
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,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,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,0x20, MKOSO(ExtraConfig), 0,0,0, // dynamic ph |
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,0x20, MKOSO(BitConfig), 0,0,0, // Motor_Off_Led1 |
7,2,0,0x10, 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,0x40, MKOSO(BitConfig), 0,0,0, // Motor_Off_Led2 |
7,2,0,0x80, 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,0x40, MKOSO(ExtraConfig), 0,0,0, // teachable Carefree |
8,0,0,247, MKOSO(UnterspannungsWarnung), 33,33,33, |
8,2,0,0x08, 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, |
8,2,0,0x80, MKOSO(ExtraConfig), 0,0,0, // Ignore Compass Error |
8,2,0,0x10, MKOSO(ExtraConfig), 0,0,0, // Kein Summer ohne Sender beim Start |
// 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,0x80, 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,0x40, 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 7 |
prog_char param_items_rx[ITEMS_RX][17]= // zeilen,zeichen+1 |
{ |
"PPM ", |
"Spektrum ", |
"Spektrum HiRes ", |
"Spektrum LoRes ", |
"Jeti ", |
"ACT DSL ", |
"HOTT ", |
}; |
//-------------------------------------------------------------- |
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 (9, 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(11, 0, 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); |
// 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); |
write_ndigit_number_u(14,3,tosetting, 1,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); |
write_ndigit_number_u (9, 4, max, 3, 0); |
write_ndigit_number_u (17, 4, defaultvalue, 3, 0); |
do |
{ |
write_ndigit_number_u (0, 4, newvalue, 3, 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); |
} |
else |
write_ndigit_number_u (17, 4, defaultvalue, 3, 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); |
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); |
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); |
do |
{ |
if (newvalue<=(max-13)) |
write_ndigit_number_u (0, 4, newvalue, 3, 0); |
else |
{ |
if (newvalue<=(max-1)) |
{ |
lcd_printp_at (0, 4, PSTR("S"), 0); |
write_ndigit_number_u (1, 4, (newvalue-12), 2, 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); |
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); |
if(value >= 248) |
{ |
lcd_printp_at (18, ii+1, PSTR(" P"), 0); |
write_ndigit_number_u (20, ii+1, 256-value, 1, 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); |
else |
if (value<=(24)) |
{ |
lcd_printp_at (18, ii+1, PSTR("S"), 0); |
write_ndigit_number_u (19, ii+1, (value-12), 2, 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); |
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); |
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 |
write_ndigit_number_u (18, ii+1, *(((uint8_t*)mk_param_struct) + pgm_read_byte(param_config+(8*items[ii+offset2])+4)), 3, 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, 7, 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); |
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/GPL_PKT_V3_5_8a_FC086/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 |
void edit_parameter (void); |
uint8_t load_setting(uint8_t setting); |
#endif |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/parameter_names.h |
---|
0,0 → 1,267 |
/***************************************************************************** |
* 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 144 |
#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."}, |
{"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. ","Seuil Reponse ","Seuil Reponse ","Drempelwaarde "}, |
{"Hysterese ","Hysteresis ","Hysteresis ","Hysterese "}, |
{"Umkehrp. Nick ","Nick Invers ","Invers Roulis ","Nick geinvert."}, |
{"Umkehrp. Roll ","Roll Invers ","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.","Switch f. High","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. High ","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-66 |
{"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"}, |
{"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"}, |
{"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) 67-85 "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 "}, |
{"CH Höhe ","CH High ","CH High ","CH Hoogte "}, |
// group 7 : (ausgaenge) 86-95 |
{"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"}, |
{"LED1 Vmin.Warn","Out1 undervolt","Al Undervoltag","Uitg1 ondersp."}, |
{"LED2 Vmin.Warn","Out2 undervolt","Al Undervoltag","Uitg2 ondersp."}, |
// group 8 : (verschiedenes) 96-107 |
{"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"}, |
{"Compass Error ","Compass Error ","Compass Error ","Kompas Error "}, |
{"k.Summer o Sen","Compass Error ","Son Abs Emett ","Kompas Error "}, |
// group 9 : (gyro) 108-120 |
{"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) 121-128 |
{"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) 129-132 |
{"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) 133 |
{"Orientierung ","Orientierung ","Orientation "}, |
// group 13 (easy) 134-144 |
{"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/GPL_PKT_V3_5_8a_FC086/servo.c |
---|
0,0 → 1,156 |
/***************************************************************************** |
* 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) |
{ |
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); // 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) |
{ |
BeepTime = 200; |
BeepMuster = 0x0080; |
} |
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) |
{ |
BeepTime = 200; |
BeepMuster = 0x0080; |
} |
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; |
BeepTime = 200; |
BeepMuster = 0x0080; |
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); // 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); // 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); |
} |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/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/GPL_PKT_V3_5_8a_FC086/setup.c |
---|
0,0 → 1,1969 |
/***************************************************************************** |
* 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" |
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; |
uint8_t Pre; |
uint16_t Pre16; |
char EditString[21]; |
uint8_t bt_name_len; |
//-------------------------------------------------------------- |
#define ITEMS_PKT 9 |
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"}, |
{"MK LowBat Warnung","MK LowBat warning","MK LowBat Attent", "MK LowBat waarsch"}, |
{"Anzeige \x1d","Display \x1d","d'affichage \x1d","tonen \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"}, |
{"PKT-Akku \x1d","PKT-Accu \x1d","PKT-Accu \x1d","PKT-Accu \x1d"}, |
{"PKT Update ","PKT Update ","PKT Mise à jour ","PKT Update "}, |
{"Debug PKT ","Debug PKT ","Debug PKT ","Debug PKT "}, |
{"EEProm Reset ","EEProm Reset ","EEProm Réinitiali","EEProm Reset "}, |
}; |
#define ITEMS_LCD 7 |
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","Infor. o.de start"}, |
{"Sprache ","language ","Langue ","taal "}, |
{"Licht aus nach...","light off after ","Lumière au bout ","Lichten uit voor "}, |
{"Helligkeit ","brightness ","luminosité ","helderheid "}, |
{"Kontrast ","contrast ","contraste ","contrast "}, |
{"Normal/Invers ","normal/inverted ","Normal / inversé ","Normal/inverted "}, |
{"Orientierung ","orientation ","orientation ","orientatie "}, |
}; |
#define ITEMS_WI 8 |
prog_char param_menuitems_wi[ITEMS_WI][NUM_LANG][18]= // zeilen,zeichen+1 |
// German, English, French, Dutch |
{ |
{"Modul eingebaut? ","module built in? ","Module installé ","module geïnstall?"}, |
{"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 "}, |
{"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 installé ","module geïnstall?"}, |
{"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"}, |
}; |
//-------------------------------------------------------------- |
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); |
// 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); |
} |
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); |
} |
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); |
// 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); |
} |
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); |
} |
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 ||HWVERSION1_3W |
//-------------------------------------------------------------- |
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 |
//-------------------------------------------------------------- |
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; |
} |
} |
//-------------------------------------------------------------- |
uint8_t Edit_StartInfo(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; |
// 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; |
// 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; |
// 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; |
// 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_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); |
// 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); |
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; |
BeepTime = 200; |
BeepMuster = 0x0080; |
} |
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; |
BeepTime = 200; |
BeepMuster = 0x0080; |
} |
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); |
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); |
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); |
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; |
BeepTime = 200; |
BeepMuster = 0x0080; |
} |
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; |
BeepTime = 200; |
BeepMuster = 0x0080; |
} |
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; |
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) |
MK_LowBat = Edit_Int10th_Value(MK_LowBat,33,247,LOWBAT); |
if((val + Offset) == 3) |
Display_Setup(); |
if((val + Offset) == 4) |
{ |
#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(); |
} |
else |
Wi_Setup(); |
#else |
Show_Error_HW12(); |
#endif |
} |
if((val + Offset) == 5) |
{ |
#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) == 6) |
#ifdef HWVERSION3_9 |
Accu_Setup(); |
#else |
Show_Error_HW12(); |
#endif |
if((val + Offset) == 7) |
Update_PKT(); |
if((val + Offset) == 8) |
Debug = Edit_Int_Value(Debug,0,1,DEBUGPKT); |
if((val + Offset) == 9) |
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_StartInfo(PKT_StartInfo,0,2,DISPLAY2); |
if((val + Offset) == 2) |
DisplayLanguage = Edit_Language(DisplayLanguage,0,3,DISPLAY3); |
// Edit_Language(DisplayLanguage,0,3,DISPLAY3); |
if((val + Offset) == 3) |
DisplayTimeout = Edit_Int_Value(DisplayTimeout,0,254,DISPLAY4); |
if((val + Offset) == 4) |
LCD_Helligkeit = Edit_DisplayHelligkeit(LCD_Helligkeit,0,100,DISPLAY5); |
if (edit == 1) |
if(!LCD_Change) |
LCD_Change =1; |
if((val + Offset) == 5) |
LCD_Kontrast = Edit_DisplayKontrast(LCD_Kontrast,0,63,DISPLAY6); |
if (edit == 1) |
if(!LCD_Change) |
LCD_Change =1; |
if((val + Offset) == 6) |
{ |
LCD_DisplayMode = Edit_DisplayMode(LCD_DisplayMode,0,4,DISPLAY7); |
if (edit == 1) |
if(!LCD_Change) |
LCD_Change =1; |
} |
if((val + Offset) == 7) |
{ |
LCD_Orientation = Edit_Orientation(LCD_Orientation,0,4,DISPLAY8); |
if (edit == 1) |
if(!LCD_Change) |
LCD_Change =1; |
} |
} |
} |
#if defined HWVERSION3_9 ||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(); |
// WriteParameter(); |
// } |
return; |
} |
else |
if (edit == 1) |
{ |
if (UseWi==true) InitWi232(); |
WriteParameter(); |
} |
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,WINETWG); |
} |
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) |
InitWi232(); |
if((val + Offset) == 8) |
Port_USB2CFG_Wi(); |
} |
} |
#endif |
#ifdef HWVERSION3_9 |
//-------------------------------------------------------------- |
// |
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; |
} |
} |
////-------------------------------------------------------------- |
//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; |
// } |
// } |
//} |
//-------------------------------------------------------------- |
// |
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,BT1); |
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; |
BeepTime = 1000; |
BeepMuster = 0x0040; |
} |
} |
if((val + Offset) == 5) |
Port_FC2CFG_BT(); |
} |
} |
//-------------------------------------------------------------- |
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); |
// 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); |
} |
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); |
} |
if (get_key_press (1 << KEY_ENTER)) |
return Value; |
show_Lipo(); |
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(); |
} |
} |
} |
#endif |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/setup.h |
---|
0,0 → 1,50 |
/***************************************************************************** |
* 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); |
uint8_t Edit_Language(uint8_t Value, uint8_t min, uint8_t max,uint8_t Text); |
extern uint8_t bt_name_len; |
#endif |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/timer.c |
---|
0,0 → 1,519 |
/***************************************************************************** |
* 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" |
#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; |
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 << PD7); |
} |
ISR(TIMER2_COMPB_vect) |
{ |
PORTD &= ~(1 << PD7); |
} |
#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 |
{ |
BeepTime = 200; |
BeepMuster = 0x0080; |
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 |
LipoCheck(); // Lipo prüfen |
#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; |
} |
if (beeper_ein) |
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 --; |
} |
//-------------------------------------------------------------- |
#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 |
{ |
BeepTime = 1000; |
BeepMuster = 0x0020; |
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; |
} |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/timer.h |
---|
0,0 → 1,87 |
/***************************************************************************** |
* 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 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. |
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/GPL_PKT_V3_5_8a_FC086/tools.c |
---|
0,0 → 1,332 |
/***************************************************************************** |
* 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 |
{ |
// 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); |
show_Lipo(); |
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); |
// 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; |
} |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/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/GPL_PKT_V3_5_8a_FC086/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/GPL_PKT_V3_5_8a_FC086/twimaster.h |
---|
0,0 → 1,100 |
#ifndef _I2C_MASTER_H |
#define _I2C_MASTER_H |
+ |
+#include <inttypes.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 |
+ |
+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 |
+ int8_t Temperature; // old BL-Ctrl will return a 255 here, the new version the temp. in �C |
+} __attribute__((packed)) MotorData_t; |
+ |
+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 |
+ |
+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; |
+ |
+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/GPL_PKT_V3_5_8a_FC086/uart1.c |
---|
0,0 → 1,303 |
/************************************************************************* |
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 "uart1.h" |
#include "main.h" |
// |
// constants and macros |
// |
// 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 |
// |
#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; |
} |
//-------------------------------------------------------------- |
// 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 |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8a_FC086/uart1.h |
---|
0,0 → 1,167 |
/************************************************************************ |
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 32 |
#endif |
// Size of the circular transmit buffer, must be power of 2 |
#ifndef UART_TX_BUFFER_SIZE |
#define UART_TX_BUFFER_SIZE 32 |
#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 |
// 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 |
// |
// 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/GPL_PKT_V3_5_8a_FC086/usart.c |
---|
0,0 → 1,634 |
/***************************************************************************** |
* 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" |
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 (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; |
UBRRH = (unsigned char)(baudrate>>8); |
UBRRL = (unsigned char) baudrate; |
#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/GPL_PKT_V3_5_8a_FC086/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/GPL_PKT_V3_5_8a_FC086/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/GPL_PKT_V3_5_8a_FC086/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 |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/Beta/GPL_PKT_V3_5_9a_FC087.hex |
---|
0,0 → 1,5328 |
:100000000C9481250C94A9250C94A9250C94A92560 |
:100010000C94A9250C94A9250C94A9250C94A92528 |
:100020000C94A9250C94EA830C94F5830C94A925CF |
:100030000C94A9250C94A9250C94A9250C94A92508 |
:100040000C9413850C94A9250C94A9250C94A9252E |
:100050000C94E28C0C94A9250C94A9250C94A92548 |
:100060000C94914D0C94A9250C94A7880C94A92567 |
:100070000C94038C0C94338C0C94A9250C94A92516 |
:100080000C94A9250C94A9250C94A925582C5C2C1A |
:10009000602C642C682C7D2C812C852C892C2F2C99 |
:1000A000442C482C4C2C502C542C402C8D2CAC2CFB |
:1000B00005A84CCDB2D44EB93836A9020C50B9912E |
:1000C0008688083CA6AAAA2ABE000000803F457880 |
:1000D0006974007374617274656E00756E64204D8E |
:1000E000696B726F6B6F70746572746F6F6C0050B8 |
:1000F00043206D6974205553422076657262696EA3 |
:1001000064656E0057692E32333220746F20464387 |
:100110002000457869740050726F6772616D6D20C0 |
:100120007374617274656E0057692E3233320050F9 |
:1001300043206D6974205553422076657262696E62 |
:1001400064656E0057692E323332204B6F6E6669DC |
:100150006775726174696F6E200057692E32333291 |
:10016000204E414B00576932333220496E69744545 |
:1001700072726F72202000576932333220496E69E3 |
:1001800074206F6B2E2E2E2E005769323332204989 |
:100190006E69744572726F722020002E002E002E40 |
:1001A000002E002E002E002E002E002E002E002EDF |
:1001B000002E002E002E002E002E002E002E002ECF |
:1001C00000496E697420576932333220776169744F |
:1001D0002E2E2E2E0056657273696F6E3A006F6B6D |
:1001E000202020202020202020202020202020200F |
:1001F00020200052414D2073657420746F203537E4 |
:1002000036303020202020004572726F72207365D6 |
:10021000742052414D2020202020006F6B20202090 |
:100220002020202020202020202020202020004EC0 |
:10023000562D52414D2073657420746F203537362A |
:100240003030004572726F7220736574204E562DE7 |
:1002500052414D0057692E32333220666F756E64FD |
:1002600020323430300057692E32333220666F75B9 |
:100270006E642035373630300057692E32333220E5 |
:1002800053797461786572726F72202020006E6FEE |
:100290002057692E32333220666F756E64090077FD |
:1002A000697468203234303020426175640920203E |
:1002B0002000776974682035373630302042617508 |
:1002C0006409007365617263682057692E323332A6 |
:1002D000204D6F64756C003030313200496E71759D |
:1002E00069727920456E64000D0A00496E71756966 |
:1002F000727920526573756C74733A0D0A00455219 |
:10030000524F520D0A004F4B0D0A000D004154533D |
:10031000310041544E3D004154523100415452305D |
:100320000041544F31004154463F004154443D0088 |
:10033000415444300041544800415441004154006C |
:100340004154453100415451300041544530004141 |
:100350005451310041544C340041545A30004154FE |
:10036000503D002E0054696D65206F75742C4661F8 |
:10037000696C20746F20636F6E6E65637421004337 |
:100380004F4E4E45435400444953434F4E4E454310 |
:1003900054000D0A00425420696E697469616C69E9 |
:1003A00073696572656E2E2E004576616C75617499 |
:1003B000696F6E20283836384D487A29202000523F |
:1003C0006164696F74726F6E69782057692E323379 |
:1003D00032445453004B6162656C20616E736368F4 |
:1003E0006C69657373656E2E202000504B54206538 |
:1003F000696E2067656B7265757A7465732020205D |
:10040000005A7769736368656E204D4B2D555342D2 |
:1004100020756E642020004D4B2D55534220616E97 |
:1004200020504320616E7363686C2E200046432089 |
:100430003E204D4B2D555342203E2042544D2D32EF |
:1004400032320042544D2D323232204B6F6E66698B |
:10045000677572696572656E004552524F523A2057 |
:100460006E6F2064617461003F004643004E43009C |
:100470004E43004643004552524F523A206E6F2081 |
:100480006461746100416E616C6F67204E616D65DF |
:10049000733A200052656164696E67004665686C56 |
:1004A00065723A204B65696E6520446174656E0023 |
:1004B000464300204E6176692D4374726C20446976 |
:1004C00073706C6179202020004E430020466C69D7 |
:1004D0006768742D4374726C20446973706C617921 |
:1004E000200020200020446973706C617920202056 |
:1004F0002020202020202020202000464300204EC5 |
:100500006176692D4374726C20446973706C6179F3 |
:10051000202020004E430020466C696768742D43FC |
:1005200074726C20446973706C6179200020200023 |
:1005300020446973706C61792020202020202020C5 |
:10054000202020202000464300204E6176692D4364 |
:1005500074726C20446973706C6179202020000DE6 |
:100560000A002E002E004F4B002121436865636B6B |
:1005700020506172616D6574657221212000504BBD |
:100580005420436562726120003132333400537469 |
:10059000616E646172647765727465206765736506 |
:1005A000747A740077657264656E206175660020E8 |
:1005B000454550524F4D20506172616D65746572B2 |
:1005C000202020200000000000000078151415787D |
:1005D0000020555455780038454445380030494886 |
:1005E0004930003C4140413C003841402178007E88 |
:1005F0001515150A000000000000000000000000B2 |
:10060000000000000000000000000000001038544E |
:1006100010101E000000000000101010101010102C |
:1006200010107C10100000000000000814000014DE |
:1006300008100804040810081020201008000814EE |
:1006400022410000412214080004027F020400102D |
:10065000207F201000103854101010101010543843 |
:100660001010181C1C181008183838180800081C1E |
:100670003E7F00007F3E1C080006090909060006AF |
:10068000497D49060000000000000000002F000026 |
:1006900000000700070000147F147F1400242A6B59 |
:1006A0002A120023130864620036495522500000C4 |
:1006B0000503000000001C224100000041221C0034 |
:1006C0000014083E08140008083E080800005030D6 |
:1006D0000000000808080808000060600000002012 |
:1006E00010080402003E5149453E0000427F400090 |
:1006F000004261514946002141454B310018141216 |
:100700007F10002745454539003C4A4949300003E0 |
:100710000171090700364949493600064949291E31 |
:100720000000363600000000563600000008142293 |
:100730004100001414141414000041221408000293 |
:100740000151090600324979413E007E1111117EA6 |
:10075000007F49494936003E41414122007F4141E5 |
:10076000221C007F49494941007F09090901003ED7 |
:100770004149497A007F0808087F0000417F410015 |
:10078000002040413F01007F08142241007F40408B |
:100790004040007F020C027F007F0408107F003E73 |
:1007A0004141413E007F09090906003E4151215E59 |
:1007B000007F091929460046494949310001017F56 |
:1007C0000101003F4040403F001F2040201F003FEC |
:1007D0004038403F0063140814630007087008079E |
:1007E000006151494543007F414100000002040877 |
:1007F0001020000041417F0000040201020400407B |
:10080000404040400000010204000020545454784D |
:10081000007F48444438003844444420003844446D |
:10082000487F00385454541800087E090102000C17 |
:100830005252523E007F080404780000447D40007C |
:10084000002040443D00007F102844000000417F0C |
:100850004000007C04180478007C08040478003808 |
:1008600044444438007C1414140800081414187C00 |
:10087000007C0804040800485454542000043F44F9 |
:100880004020003C4040207C001C2040201C003CBC |
:100890004038403C004428102844000C5050503C44 |
:1008A000004464544C440000083641000000007FBE |
:1008B00000000000413608000008082A1C08000853 |
:1008C0001C2A0808006D002E002E006B6D2F68009A |
:1008D0002E00636D002020006F6B00200044006E2E |
:1008E0006F0032440033440020002D00780058008F |
:1008F0004F00416C742020202020203A20004C61C1 |
:10090000742020202020203A20004C6F6E67202089 |
:100910002020203A20005370656564202020203A72 |
:10092000200050444F5020202020203A20004163D6 |
:10093000637572616379203A20005361742020202E |
:100940002020203A20004669782054797065203AAA |
:1009500020004E7572206D6974204E4320210020C6 |
:100960001A202020201B2020202020457869740098 |
:100970002020303132333435363738394142434420 |
:1009800045460D0A00302E38377800454550726FC5 |
:100990006D5265762E3A00454550726F6D52657600 |
:1009A0002E3A002E003F002E002E004F53442020F0 |
:1009B000202020202020202020202020004F5344D1 |
:1009C0002020202020202020202020202020004F18 |
:1009D00053442020202020202020202020202020C0 |
:1009E000004F5344202020202020202020202020A1 |
:1009F0002020003344204C616765202020202020E7 |
:100A00002020202000334420616E67656C657320D0 |
:100A1000202020202020003344206C6F6361746903 |
:100A20006F6E202020202020003344206C6F6361F3 |
:100A300074696520202020202020004D4B2044692F |
:100A400073706C617920202020202020004D4B20E5 |
:100A5000446973706C617920202020202020004D93 |
:100A60004B20446973706C61792020202020202065 |
:100A7000004D4B20446973706C6179202020202048 |
:100A8000202000506172616D657465722020202005 |
:100A90002020201D00506172616D657465722020F8 |
:100AA00020202020201D00506172616D65746572E8 |
:100AB000202020202020201D00506172616D65746F |
:100AC0006572732020202020201D00446562756718 |
:100AD0002044617461202020202020200044656291 |
:100AE000756720446174612020202020202000446C |
:100AF00065627567204461746120202020202020D9 |
:100B000000446562756720446174612020202020C4 |
:100B100020200047505320496E666F20202020205F |
:100B2000202020200047505320496E666F2020204F |
:100B30002020202020200047505320496E666F203F |
:100B400020202020202020200047505320496E667E |
:100B50006F20202020202020202000504B542054A3 |
:100B60006F6F6C73202020202020201D00504B54DC |
:100B700020546F6F6C73202020202020201D0050F7 |
:100B80004B5420546F6F6C73202020202020201D98 |
:100B900000504B5420546F6F6C7320202020202075 |
:100BA000201D004D4B20446973706C61792020201A |
:100BB00020202020004D4B20446973706C61792007 |
:100BC000202020202020004D4B20446973706C6150 |
:100BD0007920202020202020004D4B204469737074 |
:100BE0006C61792020202020202000506172616DEE |
:100BF00065746572202020202020201D0050617225 |
:100C0000616D65746572202020202020201D005019 |
:100C10006172616D65746572202020202020201D86 |
:100C200000506172616D6574657220202020202063 |
:100C3000201D004465627567204461746120202096 |
:100C40002020202000446562756720446174612083 |
:100C500020202020202000446562756720446174B4 |
:100C600061202020202020200044656275672044F8 |
:100C70006174612020202020202000504B542054FB |
:100C80006F6F6C73202020202020201D00504B54BB |
:100C900020546F6F6C73202020202020201D0050D6 |
:100CA0004B5420546F6F6C73202020202020201D77 |
:100CB00000504B5420546F6F6C7320202020202054 |
:100CC000201D00424C2D4374726C2E2054657374A9 |
:100CD0006572200000424C2D4374726C2E205465C6 |
:100CE00073746572200000424C2D4374726C2E2088 |
:100CF000546573746572200000424C2D4374726C0D |
:100D00002E20546573746572200000536572766FEF |
:100D10002054657374657220202020200053657272 |
:100D2000766F205465737465722020202020005354 |
:100D30006572766F205465737465722020202020C0 |
:100D400000536572766F205465737465722020209D |
:100D5000202000504320425420203E204B6F7074CE |
:100D60006572202000504320425420203E204B6FCB |
:100D700070746572202000504320425420203E2091 |
:100D80004B6F707465722020005043204254202025 |
:100D90003E204B6F707465722020005043205553E5 |
:100DA00042203E204B6F707465722020005043201B |
:100DB000555342203E204B6F7074657220200050C6 |
:100DC0004320555342203E204B6F707465722020A3 |
:100DD00000504320555342203E204B6F7074657283 |
:100DE000202000504B542053657475702020202023 |
:100DF0002020201D00504B54205365747570202016 |
:100E000020202020201D00504B5420536574757005 |
:100E1000202020202020201D00504B54205365749A |
:100E20007570202020202020201D00504B5420567B |
:100E3000657273696F6E20202020202000504B5473 |
:100E40002056657273696F6E20202020202000508C |
:100E50004B542056657273696F6E2020202020202D |
:100E600000504B5420566572736965202020202065 |
:100E70002020002020202020202020202020202092 |
:100E800020202020202020200028432920474E55C4 |
:100E90002047504C204C6963656E7365202000200C |
:100EA0002020204E4F2057415252414E545920206D |
:100EB0002020202000202020202020202020202052 |
:100EC00020202020202020202020003230303820F8 |
:100ED00054686F6D6173204B6169736572202020C7 |
:100EE00000323030392D3230313020506574657227 |
:100EF000204D61636B2000323031302053656261D8 |
:100F0000737469616E20426F65686D200032303104 |
:100F100031204368722E204272616E64746E657275 |
:100F20002026002020202020486172616C6420422D |
:100F30006F6E676172747A20002000120013001235 |
:100F40000013002000332E352E396100504B542001 |
:100F5000546F6F6C2020562E20202020202020202F |
:100F60002000456E646500206E69636874206DF62C |
:100F7000676C6963682100204D697420646965733A |
:100F80006572204861726477617265002D55666CE8 |
:100F90006173683A773A46494C452E6865783A61FC |
:100FA00020002D50636F6D3F202D6231313532307E |
:100FB00030202020202020002D706D3132383470F8 |
:100FC000202D636176723130392020202000537447 |
:100FD00061727420617672647564652E657865202F |
:100FE0002020200020504B542055706461746520EF |
:100FF00020202020202020202000302E383778008C |
:10100000504B542D546F6F6C204643200013001238 |
:1010100000302E38377800504B542D546F6F6C20B1 |
:10102000464320001D0020005374617465203A007F |
:1010300056657273696F6E3A0054656D70657261C2 |
:10104000747572653A0043757272656E7420202063 |
:10105000203A00536574506F696E742020203A0066 |
:101060001D00200020001D00416C6C00416C6C00D4 |
:101070001D001A201B0056616C75653A2020203037 |
:10108000004D6F746F723A202020310020424C2DA9 |
:101090004374726C2054657374202020202020201B |
:1010A0002000456E646520436865636B0054656D80 |
:1010B0007020203A004D617850574D203A0043751A |
:1010C00072726E743A00526561644D6F643A0053F7 |
:1010D00074617465203A00536574506F694C3A002E |
:1010E000536574506F693A0056657273696F6E3A52 |
:1010F00000466F756E6420424C2D4374726C3A004A |
:10110000537563686520424C2D4374726C006D61A9 |
:101110007820416C7469747564653A006D6178205B |
:1011200053706565642020203A006D617820446921 |
:101130007374616E63653A006D696E20566F6C74EE |
:10114000616765203A006D61782054696D652020E3 |
:1011500020203A006D61782043757272656E7420AC |
:101160003A005573656443617061636974793A004C |
:101170000E111C112A1138114611541162110E0F53 |
:101180000E4E0E0F0E4F0E0F0E530E0F0E570E0F6C |
:101190000E4E0E0F0E4F0E0F0E530E0F0E570E0F5C |
:1011A0000E4E0E0F0E4F0E0F0E530E0F0E574E45D6 |
:1011B000004520005345005320005357005720009E |
:1011C0004E57004E2000AE11B111B411B711BA1133 |
:1011D000BD11C011C3114B3A00523A004E3A0045BE |
:1011E0006E642020496E666F006D416800504300B8 |
:1011F0002020001F00680046726565202020202006 |
:10120000202000506F732E20486F6C642020004314 |
:101210006F6D696E6720486F6D6500536174730070 |
:101220006B6D2F68004F6E6C792077697468204E63 |
:10123000432021002E002E002E002E002E002E0016 |
:101240006D4168006B6D2F68004B616EE46C65202A |
:1012500020202020202020004368616E6E656C20D5 |
:101260002020202020200043616E617578202020FE |
:101270002020202020004B616E61616C2020202006 |
:1012800020202020004B6F6E66696775726174695B |
:101290006F6E20006D61696E2020202020202020AC |
:1012A000202000436F6E66696720202020202020C8 |
:1012B0002000436F6E6669677572617469652020EE |
:1012C00000537469636B2020202020202020200000 |
:1012D000737469636B202020202020202020004D83 |
:1012E000616E636865202020202020202000537438 |
:1012F00069636B202020202020202020004C6F6F6D |
:1013000070696E6720202020202020004C6F6F70B5 |
:10131000696E6720202020202020004C6F6F7069AC |
:101320006E6720202020202020004C6F6F70696E97 |
:1013300067202020202020200048F66865202020FB |
:101340002020202020202000416C74697475646581 |
:1013500020202020202000416C7469747564652071 |
:10136000202020202000486F6F67746520202020F7 |
:1013700020202020004B616D6572612020202020FC |
:101380002020200043616D657261202020202020F4 |
:1013900020200043616D65726120202020202020E4 |
:1013A000200043616D6572612020202020202020D4 |
:1013B000004E6176694374726C202020202020004A |
:1013C0004E6176694374726C202020202020004EEC |
:1013D0006176694374726C202020202020004E61C9 |
:1013E00076694374726C20202020202000417573A0 |
:1013F00067E46E6765202020202020004F75747000 |
:101400007574732020202020202000536F7274698F |
:101410006573202020202020200055697467616EAC |
:1014200067656E202020202000566572736368690E |
:101430006564656E6573200044697665727320206B |
:10144000202020202020004469766572732020200F |
:10145000202020202000446976657273656E20206C |
:1014600020202020004779726F202020202020207B |
:10147000202020004779726F20202020202020206B |
:101480002020004779726F2020202020202020205B |
:1014900020004779726F202020202020202020204B |
:1014A0000042656E75747A6572202020202020002D |
:1014B00055736572202020202020202020200050FD |
:1014C0006172616D6574726573202020200047652C |
:1014D000627275696B65722020202020004163686C |
:1014E000736B6F70706C756E67202000436F757042 |
:1014F0006C20417865732020202000436F75706C4C |
:10150000204178657320202020004B6F7070656C3F |
:10151000696E672041737320004D697865722D53A1 |
:101520006574757020202000436F6E666967204DDA |
:1015300069782020202000436F6E666967204D691E |
:10154000782020202000436F6E6669672E204D6949 |
:101550007865722000456173792053657475702039 |
:1015600020202000436F6E666967204561737920F3 |
:10157000202000436F6E66696720456173792020E3 |
:101580002000436F6E6669672E20656173792020A5 |
:1015900000476173202020202020202020202000D0 |
:1015A0005468726F74746C652020202020200047DE |
:1015B000617A202020202020202020202000476148 |
:1015C0007320202020202020202020200047696533 |
:1015D00072202020202020202020200047696572D2 |
:1015E00020202020202020202020004C61636574D2 |
:1015F0002020202020202020200047696572202004 |
:101600002020202020202020004E69636B202020F5 |
:1016100020202020202020004E69636B20202020E5 |
:101620002020202020200054616E67616765202003 |
:101630002020202020004E69636B202020202020C5 |
:101640002020202000526F6C6C20202020202020A1 |
:1016500020202000526F6C6C202020202020202091 |
:10166000202000526F756C697320202020202020DC |
:101670002000526F6C6C2020202020202020202071 |
:1016800000506F746920312020202020202020006D |
:10169000506F74692031202020202020202000500D |
:1016A0006F74692031202020202020202000506FDE |
:1016B00074692031202020202020202000506F74C9 |
:1016C000692032202020202020202000506F7469C3 |
:1016D0002032202020202020202000506F746920FC |
:1016E00032202020202020202000506F74692032DA |
:1016F000202020202020202000506F7469203320DB |
:101700002020202020202000506F746920332020CA |
:1017100020202020202000506F74692033202020BA |
:10172000202020202000506F7469203320202020AA |
:101730002020202000506F74692034202020202099 |
:1017400020202000506F7469203420202020202089 |
:10175000202000506F746920342020202020202079 |
:101760002000506F74692034202020202020202069 |
:1017700000506F7469203520202020202020200078 |
:10178000506F746920352020202020202020005018 |
:101790006F74692035202020202020202000506FE9 |
:1017A00074692035202020202020202000506F74D4 |
:1017B000692036202020202020202000506F7469CE |
:1017C0002036202020202020202000506F74692007 |
:1017D00036202020202020202000506F74692036E1 |
:1017E000202020202020202000506F7469203720E6 |
:1017F0002020202020202000506F746920372020D6 |
:1018000020202020202000506F74692037202020C5 |
:10181000202020202000506F7469203720202020B5 |
:101820002020202000506F746920382020202020A4 |
:1018300020202000506F7469203820202020202094 |
:10184000202000506F746920382020202020202084 |
:101850002000506F74692038202020202020202074 |
:10186000004D6F746F7220536963682E5363680074 |
:101870004D6F742E5361666574792053772E004D39 |
:101880006F742E5361666574792053772E004D6F07 |
:10189000742E7361662E736368616B2E00457277D8 |
:1018A0002E205369672E2050722E2000456E682E20 |
:1018B000205369672E436865636B005265636570EA |
:1018C0002052656E666F72636500556974672E53AA |
:1018D00069672E436865636B00456D7066E46E67EB |
:1018E000657220547970200052656365697665726F |
:1018F00020547970652000547970652052656365C5 |
:101900007074657572004F6E7476616E672E205428 |
:10191000797065200048F668656E726567656C656C |
:10192000722020004374726C20416C746974756479 |
:101930006520004374726C20416C74697475646531 |
:1019400020004374726C20486F6F677465202020FC |
:10195000004750532020202020202020202020003D |
:1019600047505320202020202020202020200047E6 |
:1019700050532020202020202020202020004750CD |
:10198000532020202020202020202020004B6F6D7D |
:10199000706173732020202020202000436F6D7021 |
:1019A0006173732020202020202000436F6D706120 |
:1019B000732020202020202020004B6F6D70617349 |
:1019C0002020202020202020004B6F6D7046657362 |
:1019D0007420417573722E00436F6D704F7269658C |
:1019E0006E742E466978004D61696E7469656E206B |
:1019F0004361702020004B6F6D70617320766173BE |
:101A000074202020004572772E205369672E2050C5 |
:101A1000722E200053656E732E526376536967569B |
:101A2000616C004374726C2052656E205265636570 |
:101A30007000457874526563205369676E61616C0C |
:101A4000004163687328652E296B6F70706C2E00DF |
:101A50004178697320436F7570696E672020004478 |
:101A600065636F75706C61676520417865004173CF |
:101A7000206B6F7070656C696E6720200044726522 |
:101A800068726174656E626567722E00526F74527F |
:101A9000617465206C696D69742E004C696D6974A0 |
:101AA000205669742E20526F7400526F7452617404 |
:101AB00065206C696D69742E0048656164696E67A4 |
:101AC00020486F6C642020004E69636B2F526F6C4E |
:101AD0006C2020202020004F7269656E742E2046F5 |
:101AE0006978652020004B6F65727320766173748E |
:101AF00020202020004E69636B2F526F6C6C2050A9 |
:101B0000202020004E69636B2F526F6C6C20502098 |
:101B1000202000526F756C2F54616E67205020207A |
:101B200020004E69636B2F526F6C6C205020202078 |
:101B3000004E69636B2F526F6C6C20442020200094 |
:101B40004E69636B2F526F6C6C2044202020005232 |
:101B50006F756C2F54616E672044202020004E6901 |
:101B6000636B2F526F6C6C20442020200047696506 |
:101B700072205020202020202020200047696572FC |
:101B800020502020202020202020004C61636574FC |
:101B900020502020202020202000476965722050FE |
:101BA00020202020202020200045787465726E655A |
:101BB000204B6F6E74722E0045787465726E2043F0 |
:101BC00074726C202020004374726C204578746518 |
:101BD000726E6520200045787465726E20436F6ECA |
:101BE00074726F6C004C6F6F70696E67206F626506 |
:101BF0006E2020004C6F6F70696E6720757020201A |
:101C00002020004C6F6F70696E67204176616E74A2 |
:101C100020004C6F6F70696E67206F6D686F6F6723 |
:101C2000004C6F6F70696E6720756E74656E200072 |
:101C30004C6F6F70696E6720646F776E2020004C68 |
:101C40006F6F70696E6720417272696572004C6FC8 |
:101C50006F70696E672062656E65642E004C6F6FF1 |
:101C600070696E67206C696E6B7320004C6F6F70CB |
:101C7000696E67206C6566742020004C6F6F706918 |
:101C80006E6720476175636865004C6F6F70696EA1 |
:101C900067206C696E6B7320004C6F6F70696E67A4 |
:101CA00020726563687473004C6F6F70696E672093 |
:101CB000726967687420004C6F6F70696E672044AA |
:101CC000726F697465004C6F6F70696E6720726522 |
:101CD0006368747300476173204C696D69742020D8 |
:101CE000202020005468726F74746C65204C696DFC |
:101CF0006974004C696D6974652047617A20202001 |
:101D00002000476173204C696D6965742020202094 |
:101D100000416E737072656368736368772E20008C |
:101D2000526573702E205468726573682E200053BC |
:101D30006575696C205265706F6E73652000447222 |
:101D4000656D70656C7761617264652000487973B8 |
:101D500074657265736520202020200048797374B3 |
:101D6000657265736973202020200048797374655B |
:101D7000726573697320202020004879737465723E |
:101D8000657365202020202000556D6B656872709A |
:101D90002E204E69636B20005475726E6F766572EB |
:101DA000204E69636B2000496E7665727320526F16 |
:101DB000756C697320004E69636B206765696E7688 |
:101DC0006572742E00556D6B656872702E20526FAF |
:101DD0006C6C20005475726E6F76657220526F6C59 |
:101DE0006C2000496E766572732054616E6761677E |
:101DF0006500526F6C6C206765696E766572742E33 |
:101E00000048F668656E726567656C756E672000E0 |
:101E1000416C746974756465204374726C2000436E |
:101E200074726C20416C7469747564652000486F2D |
:101E30006F67746520436F6E74726F6C004A3A4826 |
:101E40004265672C4E3A566172696F00593A4C6987 |
:101E50006D482C4E3A566172696F00593A4C696D63 |
:101E6000482C4E3A566172696F00593A4C696D4878 |
:101E70002C4E3A566172696F00536368616C7465E9 |
:101E80007220662E20482E007573652053772E2011 |
:101E9000662E5365747000537769746820486175C5 |
:101EA000746575722000536368616B2E20486F6FF4 |
:101EB0006774652000616B7573742E2056617269BA |
:101EC0006F20200061636F757374696320566172BF |
:101ED000696F00566172696F2041636F7573746931 |
:101EE0006300416B6F6573742E20566172696F20B9 |
:101EF00000536F6C6C68F66865202020202020005D |
:101F0000536574706F696E74202020202020004873 |
:101F1000617574657572204D6178202020004765D9 |
:101F200077656E73746520686F6F6774004D696EB6 |
:101F30002E20476173202020202020006D696E2E06 |
:101F4000207468726F74746C65200047617A204D4C |
:101F5000696E20202020202020004D696E696D616F |
:101F6000616C2067617320200048F668652050206E |
:101F70002020202020202000416C74697475646545 |
:101F800020502020202000416C7469747564652005 |
:101F9000502020202000486F6F677465205020205B |
:101FA00020202020004C756674647275636B204499 |
:101FB000202020004261726F6D6574726963204455 |
:101FC0002020005072657373696F6E2044202020BA |
:101FD00020004261726F6D6574722E2044202020B3 |
:101FE000005A2D4143432020202020202020200083 |
:101FF000414343205A20202020202020202000413F |
:102000004343205A2020202020202020200041432C |
:1020100043205A202020202020202020004D6178BD |
:102020002E2048F668652020202020004D61782E63 |
:1020300020416C74697475646520004D61782E20B0 |
:10204000486967682020202020004D61782E206894 |
:102050006F6F677465202020005665727374E47298 |
:102060006B756E672F5220006761696E2F72617405 |
:10207000652020202020004761696E2F467265711F |
:1020800075656E63650056657273742E2F72617488 |
:10209000652020200053636877656265676173205F |
:1020A0002B2F2D00686F6F766572207661726961E3 |
:1020B0002E200056617220566F6C2053746174207C |
:1020C0002000686F6F7665722076617269612E20DC |
:1020D00000475053205A202020202020202020007C |
:1020E000475053205A202020202020202020004725 |
:1020F0005053205A2020202020202020200047500C |
:1021000053205A20202020202020202000537469B2 |
:10211000636B204E657574722E2050007374696372 |
:102120006B206E657574722E205000506F73204EB8 |
:102130006575747265204D616E00737469636B2000 |
:102140006E657574722E2050004E69636B20532E9D |
:1021500020416E73742E20006E69636B207365726C |
:1021600076206374726C00417373657276205461DB |
:102170006E67616765006E69636B207365727620B8 |
:102180006374726C004E69636B204B6F6D70656E8B |
:10219000732E20006E69636B20636F6D70656E73C4 |
:1021A0002E2000436F6D702054616E67616765205B |
:1021B00020006E69636B20636F6D70656E732E20F7 |
:1021C000004E69636B20556D6B656872656E20000B |
:1021D0006E69636B20696E762E206469722E0049E9 |
:1021E0006E76657273657220526F756C20006E6931 |
:1021F000636B20696E762E726963682E004E696388 |
:102200006B20536572766F206D696E006E69636B2B |
:1022100020736572766F206D696E00536572766FFC |
:10222000204D696E2020202020006E69636B207392 |
:102230006572766F206D696E004E69636B20536521 |
:1022400072766F206D6178006E69636B20736572C2 |
:10225000766F206D617800536572766F204D6178DE |
:102260002020202020006E69636B20736572766FDA |
:10227000206D6178004E69636B205365727620464D |
:10228000696C74004E69636B2053657276204669F1 |
:102290006C74004E69636B20536572762046696CDE |
:1022A00074004E69636B20536572762046696C74C6 |
:1022B00000526F6C6C20532E20416E73742E2000E0 |
:1022C000726F6C6C2073657276206374726C00415F |
:1022D000737365727620526F756C69732000726F2C |
:1022E0006C6C2073657276206374726C00526F6C34 |
:1022F0006C204B6F6D70656E732E2000726F6C6C6E |
:1023000020636F6D70656E732E2000436F6D7020BB |
:1023100054616E67616765202000726F6C6C20638A |
:102320006F6D70656E732E2000526F6C6C20556D52 |
:102330006B656872656E2000726F6C6C20696E76DA |
:102340002E206469722E00496E7665727365722064 |
:1023500054616E672000726F6C6C206F6D6B6572DC |
:10236000656E202000526F6C6C20536572766F2072 |
:102370006D696E00726F6C6C20736572766F206D84 |
:10238000696E00536572766F204D696E20202020A3 |
:102390002000726F6C6C20736572766F206D696EB1 |
:1023A00000526F6C6C20536572766F206D617800FF |
:1023B000726F6C6C20736572766F206D617800535C |
:1023C0006572766F204D6178202020202000726F8A |
:1023D0006C6C20736572766F206D617800526F6C43 |
:1023E0006C20536572762046696C7400526F6C6C79 |
:1023F00020536572762046696C7400526F6C6C20B5 |
:10240000536572762046696C7400526F6C6C205371 |
:102410006572762046696C7400416E73742E204795 |
:1024200065736368772E2000736572766F2072651E |
:102430006672657368200054617578205265667213 |
:10244000657368202000536572766F20726566722E |
:1024500065736820004D616E75656C6C652047651D |
:10246000736368006D616E75656C6C205370656593 |
:1024700064200056697465737365204D616E2E206B |
:102480002000536E656C682E68616E646265642E10 |
:102490000043616D205269636874756E6720200087 |
:1024A00043616D204F7269656E74202020200043C7 |
:1024B000616D204F7269656E742020202000436199 |
:1024C0006D6572612072696368742E2000536572B5 |
:1024D000766F203320202020202020005365727644 |
:1024E0006F20332020202020202000536572766F3B |
:1024F00020332020202020202000536572766F207A |
:10250000332020202020202000536572766F203455 |
:102510002020202020202000536572766F20342058 |
:1025200020202020202000536572766F2034202048 |
:10253000202020202000536572766F203420202038 |
:102540002020202000536572766F20352020202027 |
:1025500020202000536572766F2035202020202017 |
:10256000202000536572766F203520202020202007 |
:102570002000536572766F203520202020202020F7 |
:102580000047505320202020202020202020200001 |
:10259000656E61626C652047505320202020004109 |
:1025A0006374697665722047505320202000656E61 |
:1025B00061626C6520475053202020200047505313 |
:1025C000204D6F6475732053742E200047505320A4 |
:1025D0006D6F646520636F6E747200446566204D94 |
:1025E0006F646520475053202000475053206D6F83 |
:1025F000646520636F6E7472004750532056657295 |
:102600007374E4726B2E2000475053204761696E4B |
:10261000202020202020004761696E204750532051 |
:102620002020202020004750532076657273746567 |
:10263000726B2E20004750532053742E2053636832 |
:10264000772E200047505320737469636B207468A1 |
:10265000726500536575696C204D616E6368652015 |
:1026600020004750532073742E206472656D702EC5 |
:10267000004D696E2E205361742E202020202000F2 |
:102680004D696E2E205361742E2020202020004E94 |
:10269000627265204D696E2E205361742E004D6963 |
:1026A0006E2E205361742E2020202020004750538E |
:1026B0002D50202020202020202020004750532D66 |
:1026C00050202020202020202020004750532D5033 |
:1026D000202020202020202020004750532D502053 |
:1026E0002020202020202020004750532D4920204A |
:1026F00020202020202020004750532D492020203A |
:10270000202020202020004750532D492020202029 |
:102710002020202020004750532D49202020202019 |
:1027200020202020004750532D442020202020200E |
:10273000202020004750532D4420202020202020FE |
:102740002020004750532D442020202020202020EE |
:1027500020004750532D44202020202020202020DE |
:102760000050204C696D697420202020202020001A |
:102770004C696D6974202050202020202020004CBE |
:10278000696D6974652050202020202020004C694C |
:102790006D69657420205020202020200049204CA5 |
:1027A000696D697420202020202020004C696D690B |
:1027B00074202049202020202020004C696D69745D |
:1027C000652049202020202020004C696D69657417 |
:1027D00020204920202020200044204C696D69746D |
:1027E00020202020202020004C696D697420204486 |
:1027F000202020202020004C696D69746520442031 |
:102800002020202020004C696D6965742020442020 |
:1028100020202020004750532041636320202020A7 |
:102820002020200047505320416363202020202097 |
:10283000202000416363656C2047505320202020F6 |
:102840002000475053204163632020202020202077 |
:10285000004750532057696E646B6F72722E2000D0 |
:102860004750532057696E6420436F72722E0043A5 |
:102870006F72726563742056656E74202000475035 |
:10288000532057696E6420436F72722E0042726546 |
:102890006D737769726B756E672020005370656584 |
:1028A0006420636F6D70656E732E00436F6D70658D |
:1028B0006E73205669742020200052656D77657212 |
:1028C0006B696E672020202000475053206D61788F |
:1028D0002E205261642E2000475053206D61782EC7 |
:1028E000726164697573005261796F6E204750534D |
:1028F000204D61782000475053206D61782E726121 |
:1029000064697573004750532057696E6B656C207E |
:102910004C692E0047505320616E676C2E6C696DB8 |
:102920006974004C696D697420416E676C20475072 |
:10293000530047505320686F656B206C696D2E20E3 |
:10294000005048204C6F67696E2074696D652000E7 |
:102950005048206C6F67696E2074696D6520005463 |
:102960007073204D656D6F72697320202000504890 |
:10297000206C6F67696E2074696A64200044796E08 |
:10298000616D6963205048202020200044796E61E9 |
:102990006D6963205048202020200044796E616DCD |
:1029A0006963205048202020200044796E616D69C1 |
:1029B000736368652050482000475053206D2E20D7 |
:1029C0005261642064504800475053206D2E2052BD |
:1029D00061642064504800475053206D2E2052619E |
:1029E000642064504800475053206D2E205261648B |
:1029F000206450480043482048F668652020202085 |
:102A000020202000434820416C746974756465205F |
:102A1000202000434820416C74697475646520204F |
:102A20002000434820486F6F6774652020202020D5 |
:102A3000004C454431204269746D61736B65200020 |
:102A40004F757431204269746D61736B20200042B0 |
:102A500069746D61736B205331202020200055690B |
:102A600074673120426974706174722E00202020D6 |
:102A7000202054696D696E67202020004F757431E5 |
:102A80002054696D696E6720202000486F726C6F5A |
:102A9000676520533120202020005569746731205C |
:102AA00054696D696E672020002020202020736FFC |
:102AB000666F727420616E00416374697620202015 |
:102AC00020202020202000416374696620202020DF |
:102AD0002020202020004469726563742061616EAB |
:102AE000202020200020202020206E2E6D2E4D6FD3 |
:102AF000746F72004163742E2077692E204D6F74BD |
:102B00006F72004163746966204175205265706F71 |
:102B10007300416B742E206D6F746F722075697431 |
:102B2000004C454432204269746D61736B6520002E |
:102B30004F757432204269746D61736B20200042BE |
:102B400069746D61736B2053322020202000556919 |
:102B500074673220426974706174722E00202020E4 |
:102B6000202054696D696E67202020004F757432F3 |
:102B70002054696D696E6720202000486F726C6F69 |
:102B80006765205332202020200055697467322069 |
:102B900054696D696E672020002020202020736F0B |
:102BA000666F727420616E00416374697620202024 |
:102BB00020202020202000416374696620202020EE |
:102BC0002020202020004469726563742061616EBA |
:102BD000202020200020202020206E2E6D2E4D6FE2 |
:102BE000746F72004163742E2077692E204D6F74CC |
:102BF0006F72004163746966204175205265706F81 |
:102C00007300416B742E206D6F746F722075697440 |
:102C1000004F75743120566D696E2E5761726E00CB |
:102C20004F75743120756E646572766F6C740041F7 |
:102C30006C20556E646572766F6C746167005569BF |
:102C4000746731206F6E64657273702E004F7574F7 |
:102C50003220566D696E2E5761726E004F75743258 |
:102C600020756E646572766F6C7400416C20556ED1 |
:102C7000646572766F6C74616700556974673220A1 |
:102C80006F6E64657273702E004D696E2E20476101 |
:102C900073202020202020006D696E2E2074687221 |
:102CA0006F74746C65200047617A204D696E2E2028 |
:102CB0002020202020006D696E696D61616C2067A5 |
:102CC00061732020004D61782E2047617320202001 |
:102CD000202020006D61782E207468726F74746CEF |
:102CE00065200047617A204D61782E202020202029 |
:102CF00020006D6178696D61616C206761732020CF |
:102D0000004B6F6D706173737769726B756E6700DE |
:102D1000636F6D70617373206566666563740045EB |
:102D20006666657420636F6D7061732020004B6F61 |
:102D30006D7061732065666665637420004361721F |
:102D400065667265652053742E20200043617265AC |
:102D500066726565204374726C200043617265661B |
:102D6000726565204374726C2000436172656672FF |
:102D70006565204374726C2000546561636861620C |
:102D80006C65204361726500546561636861626CC3 |
:102D900065204361726500546561636861626C65BA |
:102DA000204361726500546561636861626C6520EF |
:102DB0004361726500556E7465727370616E6E75F5 |
:102DC0006E672000756E646572766F6C74616765FE |
:102DD000202000536F75732054656E73696F6E20E9 |
:102DE00020004F6E6465727370616E6E696E67204D |
:102DF00000566F6C74205265666572656E7A2000AD |
:102E0000566F6C74205265666572656E7A20005448 |
:102E1000656E73696F6E20526566202020005265D2 |
:102E2000662E207370616E6E696E6720004E6F743F |
:102E300020476173205A656974202000456D6572D2 |
:102E4000672E5468722E54696D650044757265650D |
:102E5000207365636F75727320004E6F6F64206717 |
:102E600061732074696A6420004E6F742047617337 |
:102E70002020202020202000456D6572672E546898 |
:102E8000726F74746C650047617A206465207365A5 |
:102E9000636F757273004E6F6F64206761732020DB |
:102EA00020202020004661696C732E204348205466 |
:102EB000696D65004661696C732E20434820546932 |
:102EC0006D65004661696C732E2043482054696D1E |
:102ED00065004661696C732E2043482054696A641A |
:102EE000004661696C732E204368616E6E656C00EC |
:102EF0004661696C732E204368616E6E656C004696 |
:102F000061696C732E204368616E6E656C0046616A |
:102F1000696C732E204368616E6E656C006B2E5376 |
:102F2000756D6D6572206F2053656E006E20626551 |
:102F300065702061637420545820006E20626565BE |
:102F4000702061637420545820006E2062656570A3 |
:102F5000206163742054582000566172696F2066A6 |
:102F600061696C20416C7400566172696F20666102 |
:102F7000696C20416C7400566172696F20666169EA |
:102F80006C20416C7400566172696F206661696CD7 |
:102F900020416C7400436F6D7061737320457272D1 |
:102FA0006F722000436F6D70617373204572726F92 |
:102FB000722000436F6D70617373204572726F727F |
:102FC00020004B6F6D706173204572726F7220200C |
:102FD000006B2E5374617274206F2E53442D4B007E |
:102FE0006E2073742E207774686F20534420006E17 |
:102FF0002073742E207774686F20534420006E2055 |
:1030000073742E207774686F2053442000477972C0 |
:103010006F20502020202020202020004779726F30 |
:1030200020502020202020202020004779726F206F |
:10303000502020202020202020004779726F20502F |
:103040002020202020202020004779726F20492056 |
:1030500020202020202020004779726F2049202046 |
:10306000202020202020004779726F204920202036 |
:103070002020202020004779726F20492020202026 |
:1030800020202020004779726F204420202020201B |
:10309000202020004779726F20442020202020200B |
:1030A0002020004779726F204420202020202020FB |
:1030B00020004779726F20442020202020202020EB |
:1030C0000047696572205020202020202020200009 |
:1030D0004C61636574205020202020202020004C6B |
:1030E0006163657420502020202020202000476943 |
:1030F0006572205020202020202020200047696574 |
:103100007220492020202020202020004C6163656F |
:1031100074204920202020202020004C6163657409 |
:103120002049202020202020200047696572204966 |
:1031300020202020202020200044796E616D6973BA |
:103140006368652053742E0064796E616D69632035 |
:1031500073746162692E00537461622044796E61F8 |
:103160006D697175650044796E616D69732E2073A8 |
:103170007461622E0044726568726174656E626586 |
:10318000672E2000526F7452617465206C696D69FE |
:10319000742E004C696D69742044697420526F74F8 |
:1031A0006100546F6572656E74616C206C696D2E80 |
:1031B000004143432F4779726F2046616B2E2000F8 |
:1031C0004143432F4779726F204661637420004169 |
:1031D00043432F4779726F20466163742000414357 |
:1031E000432F4779726F2046616374200041434347 |
:1031F0002F4779726F204B6F6D702E00436F6D708B |
:10320000204143432F4779726F2000436F6D702038 |
:103210004143432F4779726F2000436F6D70204107 |
:1032200043432F4779726F2000486175707472654F |
:10323000676C6572204920004D61696E204920202D |
:1032400020202020202000526567756C2050726974 |
:103250006E6320492000486F6F6664726567656C15 |
:103260002E20492000447269666B6F6D70656E7325 |
:1032700061742E00647269667420436F6D70656EB0 |
:10328000732E00436F6D70656E73204465726976AE |
:103290002000447269667420636F6D70656E732ED2 |
:1032A000004779726F20737461622E202020200005 |
:1032B0004779726F2073746162696C697479004731 |
:1032C00079726F2053746162696C6974790047790F |
:1032D000726F2073746162696C69742E004D6F7433 |
:1032E0006F7220736D6F6F74682020004D6F746F64 |
:1032F0007220736D6F6F74682020004D6F746F7251 |
:1033000020536D6F6F74682020004D6F746F7220B2 |
:10331000736D6F6F7468202000506172616D657409 |
:103320006572203120202000506172616D657465E6 |
:1033300072203120202000506172616D65746572C9 |
:10334000203120202000506172616D65746572200B |
:103350003120202000506172616D657465722032E9 |
:1033600020202000506172616D65746572203220EA |
:10337000202000506172616D6574657220322020DA |
:103380002000506172616D657465722032202020CA |
:1033900000506172616D65746572203320202000D9 |
:1033A000506172616D657465722033202020005079 |
:1033B0006172616D65746572203320202000506158 |
:1033C00072616D6574657220332020200050617237 |
:1033D000616D657465722034202020005061726137 |
:1033E0006D65746572203420202000506172616D1B |
:1033F00065746572203420202000506172616D6513 |
:10340000746572203420202000506172616D6574F3 |
:103410006572203520202000506172616D657465F1 |
:1034200072203520202000506172616D65746572D4 |
:10343000203520202000506172616D657465722016 |
:103440003520202000506172616D657465722036F0 |
:1034500020202000506172616D65746572203620F5 |
:10346000202000506172616D6574657220362020E5 |
:103470002000506172616D657465722036202020D5 |
:1034800000506172616D65746572203720202000E4 |
:10349000506172616D657465722037202020005084 |
:1034A0006172616D65746572203720202000506163 |
:1034B00072616D6574657220372020200050617242 |
:1034C000616D657465722038202020005061726142 |
:1034D0006D65746572203820202000506172616D26 |
:1034E00065746572203820202000506172616D651E |
:1034F0007465722038202020004163687328652E8F |
:10350000296B6F70706C2E0028446529436F7570AD |
:103510006C20417865730028446529436F75706C91 |
:103520002041786573004173206B6F7070656C6922 |
:103530006E672020004769657220706F732E204BE4 |
:103540006F707000526574726F6163206C616365A7 |
:10355000742000526574726F6163204C61636574FE |
:1035600020004769657220706F732E206B6F702E7C |
:10357000004E69636B2F526F6C6C204B6F70700044 |
:10358000526574726F20726F756C2F74616E005289 |
:103590006574726F20526F756C2F54616E004E69A6 |
:1035A000636B2F526F6C6C206B6F702E00476965D8 |
:1035B00072204B6F7272656B74757200436F72721A |
:1035C000656374206C616365742000436F7272657B |
:1035D0006374204C616365742000476965722063E1 |
:1035E0006F72726563746965004F7269656E7469A4 |
:1035F0006572756E672020004F7269656E7469652B |
:1036000072756E672020004F7269656E746174690F |
:103610006F6E20202000000000000000000000006D |
:10362000000000000048F668656E726567656C759D |
:103630006E672000416C7469747564652043747210 |
:103640006C20004374726C20416C746974756465FD |
:103650002000486F6F67746520436F6E74722E2070 |
:1036600000536F6C6C68F6686520202020202000D5 |
:10367000536574706F696E742020202020200048EC |
:10368000617574657572204D617820202000476552 |
:1036900077656E73742E686F6F6774650053746915 |
:1036A000636B204E657574722E20500073746963CD |
:1036B0006B206E657574722E205000506F73204E13 |
:1036C0006575747265204D616E00537469636B207B |
:1036D0006E657574722E20500047505320202020B4 |
:1036E0002020202020202000656E61626C6520472C |
:1036F0005053202020200041637469766572204772 |
:10370000505320202000456E61626C652047505365 |
:103710002020202000475053204D6F6475732053A4 |
:10372000742E2000475053206D6F646520636F6EC8 |
:10373000747200446566206D6F64652047505320A5 |
:103740002000475053206D6F646520636F6E747264 |
:103750000044796E616D696320504820202020006C |
:1037600044796E616D696320504820202020004418 |
:10377000796E616D696320504820202020004479D3 |
:103780006E616D696320504820202020004348204E |
:1037900048F668652020202020202000434820484B |
:1037A00069676820202020202020004348204869A5 |
:1037B00067682020202020202000434820686F6F69 |
:1037C0006774652020202020004361726566726561 |
:1037D000652053742E202000436172656672656512 |
:1037E000204374726C2000436172656672656520C7 |
:1037F0004374726C20004361726566726565204394 |
:1038000074726C2000546561636861626C6520436A |
:1038100061726500546561636861626C6520436133 |
:10382000726500546561636861626C652043617212 |
:103830006500546561636861626C6520436172650F |
:10384000004D6F746F7220536963682E5363680074 |
:103850004D6F742E5361666574792053772E004D39 |
:103860006F742E5361666574792053772E004D6F07 |
:10387000742E7361662E736368616B2E004F7269DC |
:10388000656E74696572756E672020004F72696598 |
:103890006E746174696F6E202020004F7269656ECE |
:1038A00074696572756E672020004F7269656E7469 |
:1038B0006174696520202020000000010C030101D3 |
:1038C000010000010C040404040000010C010303C6 |
:1038D000030000010C0202020200030119050505A4 |
:1038E000050003011906060606000301190707076C |
:1038F000070003011908080808000301190909094C |
:1039000009000301190A0A0A0A000301190B0B0B2B |
:103910000B000301190C0C0C0C0000000C630000E0 |
:1039200000000200046D00000000060006270101EF |
:1039300001010200010D000000010200200D010143 |
:1039400001010200080D010101010200100D00003B |
:1039500000010200046D000000010200400D0101A1 |
:1039600001010200800D000000010200040D0000B2 |
:103970000002000014170A080602000014181010B4 |
:103980000A020100FF19060604020100FF600000A0 |
:1039900000030200016B000000030200026B000044 |
:1039A00000030200046B000000030200086B00002B |
:1039B00000030100FF3B323232030000F73C5A5A49 |
:1039C0005A030000F73D323232030000F7414E4EF9 |
:1039D0004E030000F7424E4E4E040200010D00005F |
:1039E00000040200016D000000040200020D01014C |
:1039F00001040200026D010101040100FF10FFFF3C |
:103A0000FF040000F70E1E1E1E040100FF110F0F21 |
:103A10000F040100FF0F1E1E1E040100FF13000013 |
:103A200000040100FF67969696040000F7120F0F3E |
:103A30000F040000F714080808040100FF154040B7 |
:103A400040040000A016000000050100FF2D80804A |
:103A500080050000F72E323232050200016C0000B2 |
:103A600000050000F72F0F0F0F050000F730E6E606 |
:103A7000E60500001969000000050100FF318080A3 |
:103A800080050000F732555555050200026C000014 |
:103A900000050000F733464646050000F734DCDC3D |
:103AA000DC050000196A0000000500020835040466 |
:103AB00004050000F7363C3C3C050500F7370000E4 |
:103AC00000050100FF387D7D7D050100FF397D7D0A |
:103AD0007D050100FF3A7D7D7D060200200D01017C |
:103AE00001060100FF50FEFEFE060100FF51646466 |
:103AF00064060000F75A080808060000F759060691 |
:103B000006060100FF525A5A5A060100FF535A5A3C |
:103B10005A060100FF545A5A5A060100FF554B4BF2 |
:103B20004B060100FF56555555060100FF574B4BFC |
:103B30004B060100FF58000000060100FF5B5A5AC7 |
:103B40005A060100FF5C2A2A2A060100FF5DF5F5EE |
:103B5000F5060100FF5E8C8C8C060000F75F050502 |
:103B600005060200206D000000060200026E000043 |
:103B700000060000F765000000070400FF4A5F5FD1 |
:103B80005F070100FF4B141414070200206B0000B4 |
:103B900000070200106B010101070400FF4CF3F362 |
:103BA000F3070100FF4D141414070200406B0000DE |
:103BB00000070200806B010101070400FF4EAAAA62 |
:103BC000AA070400FF4FAAAAAA080000F71A0808CB |
:103BD00008080000F71BE6E6E6080100FF1D40406C |
:103BE00040080100FF62000000080200406D000074 |
:103BF00000080000F724212121080200086D0000C0 |
:103C000000080000F7265A5A5A080000F7252D2D03 |
:103C10002D080000F7660000000800000C68000096 |
:103C200000080200106D000000080200046E000091 |
:103C300000080200806D000000080200016E000014 |
:103C400000090100FF1E5A6464090100FF1F787813 |
:103C500078090100FF200A0A0A090100FF215A64BD |
:103C600064090100FF22787878090100FF45464683 |
:103C700046090200800D000000090000F71C1B1B14 |
:103C80001B090000F743202020090100FF28101025 |
:103C900010090000F7440000000900001023060688 |
:103CA00006090000F7640000000A0100FF29000077 |
:103CB000000A0100FF2A0000000A0100FF2B00009B |
:103CC000000A0100FF2C0000000A0100FF4600006E |
:103CD000000A0100FF470000000A0100FF48000041 |
:103CE000000A0100FF490000000B0200400D000027 |
:103CF000000B0100FF3E5A5A5A0B0100FF3F3737B5 |
:103D0000370B0100FF404646460C050017610000D6 |
:103D1000000D0200010D0000000D0100FF10FFFF6B |
:103D2000FF0D0000A0160000000D0200200D010193 |
:103D3000010D0100FF50FEFEFE0D0200206D00008F |
:103D4000000D0000F7650000000D0100FF6200009B |
:103D5000000D0200406D0000000D00000C6300002B |
:103D6000000D0500176100000050504D202020205C |
:103D7000202020202020202020005370656B7472AA |
:103D8000756D2020202020202020005370656B744A |
:103D900072756D2048695265732020005370656B01 |
:103DA0007472756D204C6F5265732020004A6574E3 |
:103DB0006920202020202020202020202000414396 |
:103DC000542044534C202020202020202020004834 |
:103DD0004F5454202020202020202020202020006C |
:103DE000467574756261205342555320202020206F |
:103DF0000013001200130053425500486F54004155 |
:103E00004354004A65740053704C0053704800538B |
:103E100070650050504D0057504500530020204E13 |
:103E20000020204A00205000120013001200200041 |
:103E300012003000310020192020202030114920AC |
:103E40002020456E64652020204F4B0057504500D0 |
:103E500053005374642E0028312D5331322F5729CB |
:103E60002028643A20202029001D00200020001D69 |
:103E7000002A002A00506F00506F202900537464FC |
:103E80002E0028302D3234372D50382928643A50EE |
:103E90006F2029005374642E00282020202D20201C |
:103EA00020292028643A20202029004B6F70696562 |
:103EB000727420756E6420416B74697669657274E2 |
:103EC000005769726B6C696368204B6F706965722B |
:103ED000656E3F00194F18006D5300250020536593 |
:103EE00072766F2054657374657220202020202024 |
:103EF00020200056657262696E64756E67207A755F |
:103F00006D204D4B00636F6E6E656374696F6E203C |
:103F1000746F204D4B200020636F6E6E6578696F63 |
:103F20006E2061204D4B20000041616E736C7569FD |
:103F300074696E67206F70204D4B004D4B204C6FA5 |
:103F400077426174205761726E756E67004D4B2029 |
:103F50004C6F77426174207761726E696E67004DB5 |
:103F60004B204C6F7742617420417474656E74000D |
:103F7000004D4B204C6F42617420616C61726D206A |
:103F8000202000416E7A656967652020202020206E |
:103F90002020201D00446973706C6179202020204E |
:103FA00020202020201D0064276166666963686107 |
:103FB000676520202020201D00446973706C6179A2 |
:103FC0002020202020202020201D0057692E323361 |
:103FD00032202020202020202020201D0057692E64 |
:103FE000323332202020202020202020201D005786 |
:103FF000692E323332202020202020202020201D36 |
:104000000057692E3233322020202020202020200B |
:10401000201D0042544D2D323232202020202020FD |
:104020002020201D0042544D2D32323220202020ED |
:1040300020202020201D0042544D2D3232322020DD |
:10404000202020202020201D0042544D2D323232CD |
:104050002020202020202020201D00504B542D41C6 |
:104060006B6B7520202020202020201D00504B54F9 |
:104070002D4163637520202020202020201D00502A |
:104080004B542D4163637520202020202020201DCB |
:1040900000504B542D4163637520202020202020A8 |
:1040A000201D00504B542055706461746520202001 |
:1040B0002020202000504B542055706461746520EE |
:1040C00020202020202000504B54204D6973652073 |
:1040D00061206A6F7572202000504B542055706427 |
:1040E00061746520202020202020004465627567CF |
:1040F00020504B54202020202020202000446562A6 |
:10410000756720504B542020202020202020004480 |
:104110006562756720504B542020202020202020ED |
:1041200000446562756720504B54202020202020D9 |
:10413000202000454550726F6D20526573657420D4 |
:104140002020202000454550726F6D205265736518 |
:1041500074202020202000454550726F6D2052654C |
:10416000696E697469616C6900454550726F6D20B4 |
:104170005265736574202020202000496E666F739D |
:10418000206265696D2053746172742000696E66E7 |
:104190006F206174207374617274757020200049FF |
:1041A0006E666F722E20737572206C616E6365721D |
:1041B00000696E666F2062696A206F707374617245 |
:1041C0007420004F534420456D7066616E677361C3 |
:1041D0007573662E004F534420726563656976657A |
:1041E000204572726F72004F534420726563656997 |
:1041F0007665204572726F72004F5344207265637A |
:1042000065697665204572726F72005370726163E2 |
:10421000686520202020202020202020006C616E56 |
:104220006775616765202020202020202020004C19 |
:10423000616E67756520202020202020202020200E |
:10424000007461616C20202020202020202020206C |
:104250002020004C6963687420617573206E61636F |
:10426000682E2E2E006C69676874206F6666206168 |
:10427000667465722020004C756D696572652061F9 |
:104280007520626F75742020006C696368742075F6 |
:104290006974206E6120202020200048656C6C69C4 |
:1042A000676B6569742020202020202000627269DD |
:1042B0006768746E65737320202020202020006CB6 |
:1042C000756D696E6F736974652020202020202031 |
:1042D0000068656C64657268656964202020202030 |
:1042E0002020004B6F6E7472617374202020202098 |
:1042F0002020202000636F6E747261737420202070 |
:1043000020202020202000636F6E7472617374651A |
:10431000202020202020202000636F6E74726173A3 |
:1043200074202020202020202020004E6F726D61FC |
:104330006C2F496E7665727320202020006E6F729C |
:104340006D616C2F696E7665727465642020004E15 |
:104350006F726D616C202F20696E766572736520B7 |
:10436000004E6F726D616C2F696E76657274656454 |
:104370002020004F7269656E74696572756E6720E2 |
:1043800020202020006F7269656E746174696F6E01 |
:10439000202020202020006F7269656E746174698E |
:1043A0006F6E202020202020006F7269656E74617E |
:1043B00074696520202020202020004D6F64756CDA |
:1043C0002065696E6765626175743F20006D6F647A |
:1043D000756C65206275696C7420696E3F20004DB4 |
:1043E0006F64756C6520696E7374616C6CE9202074 |
:1043F000004D6F64756C65206765696E7374616CE0 |
:104400002E3F0054582F5258204B616E616C202073 |
:10441000202020200054582F5258204368616E6E8F |
:10442000656C202020200054582F5258204368618A |
:104430006E6E656C202020200054582F5258204367 |
:1044400068616E6E656C20202020004E6574572ECA |
:10445000204772757070652020202020004E657402 |
:10446000572E2047726F7570202020202020004E8C |
:104470006574572E2047726F7570202020202020F1 |
:10448000004E6574572E2047726F757020202020D3 |
:104490002020004E6574572E204D6F64652020202B |
:1044A00020202020004E6574572E204D6F6465201B |
:1044B000202020202020004E6574572E204D6F6450 |
:1044C0006520202020202020004E6574572E204D8E |
:1044D0006F6465202020202020200054582054693B |
:1044E0006D656F75742020202020202000545820F6 |
:1044F00054696D656F7574202020202020200054A1 |
:10450000582054696D656F7574202020202020206C |
:104510000054582054696D656F7574202020202048 |
:104520002020005458204D545520202020202020A9 |
:1045300020202020005458204D5455202020202099 |
:10454000202020202020005458204D545520202089 |
:104550002020202020202020005458204D54552079 |
:104560002020202020202020202000496E6974690E |
:10457000616C6973696572656E20202000696E69DF |
:104580007469616C697A65202020202020200069F0 |
:104590006E697469616C6973657220202020202027 |
:1045A00000496E697469616C697A65202020202059 |
:1045B0002020004B6F6E6669672E206D6974205055 |
:1045C0004320202000636F6E6669672E2077697430 |
:1045D00068202050432000436F6E6669672E20617B |
:1045E000766563205043202000436F6E6669672E16 |
:1045F000206D6574205043202020004D6F64756C41 |
:104600002065696E6765626175743F20006D6F6437 |
:10461000756C65206275696C7420696E3F20004D71 |
:104620006F64756C6520696E7374616C6CE9202031 |
:10463000006D6F64756C65206765EF6E7374616CF7 |
:104640006C3F004E616D652020202020202020201E |
:1046500020202020006E616D652020202020202059 |
:10466000202020202020004E6F6D202020202020A0 |
:104670002020202020202020004E61616D2020205D |
:10468000202020202020202020200050696E202083 |
:104690002020202020202020202020200070696E53 |
:1046A00020202020202020202020202020200050FA |
:1046B000696E202020202020202020202020202063 |
:1046C0000050696E20202020202020202020202043 |
:1046D000202000496E697469616C6973696572654F |
:1046E0006E20202000696E697469616C697A6520AA |
:1046F00020202020202000696E697469616C697334 |
:10470000657220202020202000496E697469616C48 |
:10471000697A6520202020202020004B6F6E66697A |
:10472000672E206D697420504320202000636F6E37 |
:104730006669672E20776974682020504320004303 |
:104740006F6E6669672E2061766563205043202076 |
:1047500000436F6E6669672E206D6574205043209C |
:10476000202000504B542D416B6B757479702020C4 |
:104770002020202000504B542D41636375747970C4 |
:1047800020202020202000504B542D54797065208B |
:10479000646520626174742E00504B542D62617404 |
:1047A000746572696A207479706500504B542041B9 |
:1047B0006B6B75204D657373756E672000504B549D |
:1047C00020416363754D65617375726520200062D9 |
:1047D0006174742E206465206D6573757265202088 |
:1047E00000504B5420626174742E206D6574696EA4 |
:1047F00067200013001200566F6C74004C69496FFB |
:10480000004C69506F004C69506F004C69496F0053 |
:10481000425420496E6974204572726F720042548E |
:1048200020496E6974206F6B0020426C7565746F4F |
:104830006F74682050696E202020202020200020E6 |
:10484000426C7565746F6F7468204E616D652020D1 |
:1048500020202020001300120020172020202020DC |
:1048600016202020202019202020204F4B0020201F |
:104870002020202020202020202020430020001362 |
:104880000012002057692E32333220536574757040 |
:1048900020202020202020200013001200130012CE |
:1048A0000020504B542D536574757020202020201B |
:1048B0002020202020200025005769323332005765 |
:1048C00069323332002020206E69636874206DF6EF |
:1048D000676C696368202020200020204D697420C7 |
:1048E000486172647761726520312E782020200043 |
:1048F00020204C49504F202021215761726E756E47 |
:104900006721212020004D6F746F722054657374ED |
:1049100065722020202020004D6F746F7220546536 |
:10492000737465722020202020004D6F746F7220F8 |
:104930005465737465722020202020004D6F746FC1 |
:104940007220546573746572202020202000536506 |
:1049500072766F20546573746572202020202000C9 |
:10496000536572766F205465737465722020202021 |
:104970002000536572766F20546573746572202031 |
:1049800020202000536572766F2054657374657221 |
:10499000202020202000504320425420203E204B45 |
:1049A0006F70746572202000504320425420203ED6 |
:1049B000204B6F70746572202000504320425420B9 |
:1049C000203E204B6F7074657220200050432042BF |
:1049D0005420203E204B6F7074657220200050439D |
:1049E00020555342203E204B6F707465722020008A |
:1049F000504320555342203E204B6F707465722007 |
:104A00002000504320555342203E204B6F70746568 |
:104A100072202000504320555342203E204B6F709F |
:104A2000746572202000504B5420536574757020BB |
:104A30002020202020201D00504B542053657475E9 |
:104A400070202020202020201D00504B5420536532 |
:104A5000747570202020202020201D00504B5420F1 |
:104A60005365747570202020202020201D00504B9D |
:104A7000542056657273696F6E202020202020001C |
:104A8000504B542056657273696F6E202020202091 |
:104A90002000504B542056657273696F6E202020A1 |
:104AA00020202000504B542056657273696F6E2091 |
:104AB000202020202000566F6C7400456E64650035 |
:104AC0001D00200020001D00504320555342203E71 |
:104AD000204B6F7074657200504320425420203E7A |
:104AE000204B6F70746572001300120020504B54FD |
:104AF0002D546F6F6C732020202020202020202038 |
:104B0000200014BE88E10FB6F894809360001092E4 |
:104B100060000FBE11241FBECFEFD0E4DEBFCDBFBB |
:104B200013E2A0E0B1E0ECECFAE201E00BBF02C05E |
:104B300007900D92A230B107D9F710E3A2E0B3E2DB |
:104B400001C01D92A23BB107E1F70E94644E0C9494 |
:104B500064950C940000E0EBF0E080818368808332 |
:104B6000E1EBF0E080818160808308951092B000D5 |
:104B70001092B100089582B1806F82B90C988FEFC6 |
:104B800084B988B1806988B987B18C6E87B93C983F |
:104B900043985E9A8AB1806F8AB9299A0E940084EC |
:104BA0000E94BB830E94D68381E08093312F84E1F1 |
:104BB00090E00E94288E84E190E00E94618C81E068 |
:104BC0000E945388789480E00E94CE400E94513B1E |
:104BD0008091FC28853070F081E08093FC288091E2 |
:104BE000FC2860E043E02EE50E949A748093FC2844 |
:104BF0000E94BC396091CE2870E0882777FD8095AF |
:104C0000982F0E942F9223E333E343E250E40E9463 |
:104C10001C930E9401926093B30081E00E94CE40F9 |
:104C200088EC90E09093B6238093B52380E890E0E1 |
:104C30009093FB228093FA220E94024D85E090E03F |
:104C40000E94F055AC0180E062E020E00E949D44AB |
:104C500086E090E00E94F055AC0180E063E020E047 |
:104C60000E949D4480E49FE124EF31E0F9013197F7 |
:104C7000F1F70197D9F70799299828EE33E044EF27 |
:104C800051E0CA010197F1F721503040D1F784EF8C |
:104C900091E09093B6238093B52380E890E09093C1 |
:104CA000FB228093FA2280EF0E943B840E948C407A |
:104CB0008091F828813031F48091FB28882311F409 |
:104CC0000E945F290E948C40439A8091F528813090 |
:104CD00039F48091FA28882319F40E94AF2F439A5F |
:104CE0000E948C408091F828813051F58091672492 |
:104CF000882331F585E00E94CA308091CF28813029 |
:104D000009F042C087E090E00E94F055AC0180E0DD |
:104D100060E020E00E949D4488E090E00E94F05511 |
:104D2000AC0180E061E020E00E949D4480E29EE4CE |
:104D300024EF31E0F9013197F1F70197D9F724C059 |
:104D400086E00E94CA308091CF288130E9F487E064 |
:104D500090E00E94F055AC0180E060E020E00E940D |
:104D60009D4489E090E00E94F055AC0180E061E054 |
:104D700020E00E949D4480E29EE424EF31E0F901AE |
:104D80003197F1F70197D9F70E948C400895CF939E |
:104D9000DF93EA01DC0120E092E03EEF10C08C914D |
:104DA00087FF05C0FE01E90FF11D30839F5FFE0103 |
:104DB000E90FF11D8D918F7780839F5F2F5F2617FD |
:104DC00070F3FE01E90FF11D10828FEF888392507E |
:104DD00099839E5F892F90E0DF91CF9108950F9383 |
:104DE0001F93CF93DF93182F062F8FEF0E94698EAA |
:104DF00082E00E94698E812F0E94698E802F0E941E |
:104E0000698E10E0C4EFD1E00E94D08D90E028EED2 |
:104E100033E0FE013197F1F721503040D1F7009790 |
:104E200021F41F5F1A3081F705C0069719F420E0BE |
:104E300030E01EC080E062E04AE551E020E00E94E0 |
:104E4000944488EE93E09093B6238093B52380E456 |
:104E500090E09093FB228093FA2280E29EE424EF7C |
:104E600031E0F9013197F1F70197D9F72FEF30E0F1 |
:104E7000C901DF91CF911F910F91089584E190E0D6 |
:104E80000E94288E84E190E00E94618C0E948C40F8 |
:104E900080E060E044E051E020E00E94944480E043 |
:104EA00061E04FEE50E020E00E94944480E062E038 |
:104EB0004BED50E020E00E94944480E063E043ED3D |
:104EC00050E020E00E94944481E167E04EEC50E025 |
:104ED00020E00E9494440E947B8C90FF07C00E94B7 |
:104EE000D08D882329F00E94988C02C00E94698E80 |
:104EF00080E10E943B84882371F30895809102230E |
:104F0000823041F487E092E00E94288E87E092E0B0 |
:104F10000E94618C0E948C405E9880E060E044E4D6 |
:104F200051E020E00E94944480E061E04FE251E0D3 |
:104F300020E00E94944480E062E048E251E020E0FA |
:104F40000E94944480E063E047E151E020E00E9449 |
:104F5000944481E167E042E151E020E00E94944402 |
:104F60000E947B8C90FF07C00E94D08D882329F07F |
:104F70000E94988C02C00E94698E80E10E943B844E |
:104F8000882371F35E9A08951F93CF93DF93182FB0 |
:104F90000E94D08D8FEF0E94698E82E00E94698E00 |
:104FA0008EEF0E94698E812F0E94698E84EF91E0BE |
:104FB00024EF31E0F9013197F1F70197D9F710E0CB |
:104FC000C4EFD1E00E94D08D482F50E028EE33E0AE |
:104FD000FE013197F1F721503040D1F71F5F4115A5 |
:104FE000510519F41A3071F712C01A3081F04630A9 |
:104FF000510519F02FEF30E00CC060E00E94DB4655 |
:105000000E94D08D0E94D08D282F30E002C020E079 |
:1050100030E0C901DF91CF911F9108951F93182FA0 |
:1050200080E063E045E651E020E00E949444812F57 |
:1050300060E00E94DB461093032384EF91E090939D |
:10504000B6238093B52380E490E09093FB22809375 |
:10505000FA2288E893E124EF31E0F9013197F1F782 |
:105060000197D9F71F910895CF93DF930E94198F6D |
:105070005E9880ED97E024EF31E0F9013197F1F788 |
:105080000197D9F784E190E00E94288E80E060E0EB |
:1050900043EC52E020E00E94944480E061E042EB67 |
:1050A00052E020E00E94944488E790E00E94C427E8 |
:1050B000EC0181E080930223209709F587E092E0DC |
:1050C0000E94288E80E061E04FE952E020E00E94DB |
:1050D000944488E790E00E94C427EC0182E080932A |
:1050E0000223209761F40E948C4080E060E04EE84B |
:1050F00052E020E00E94944410920223DCC0CF3F93 |
:10510000D105F9F40E948C4080E060E049E752E06C |
:1051100020E00E94944488EE93E09093B62380931D |
:10512000B52380E490E09093FB228093FA2280E202 |
:105130009EE424EF31E0F9013197F1F70197D9F7B7 |
:1051400003C0209709F4B7C00E948C4080910223CD |
:10515000813039F480E060E046E652E020E00E94D1 |
:10516000944480910223823009F093C01092FB286E |
:1051700080E060E044E552E020E00E94944483E057 |
:1051800064E00E94EF26892BE9F080E061E043E4CF |
:1051900052E020E00E94944488EE93E09093B6237E |
:1051A0008093B52380E490E09093FB228093FA22D1 |
:1051B00080E29EE424EF31E0F9013197F1F70197A5 |
:1051C000D9F720C080E197E224EF31E0F90131976F |
:1051D000F1F70197D9F780E061E04FE252E020E07B |
:1051E0000E94944480E062E04BE152E020E00E94A3 |
:1051F000944480E29EE424EF31E0F9013197F1F725 |
:105200000197D9F78EE464E00E94EF26892BE9F03C |
:1052100080E063E048E052E020E00E94944488EEA1 |
:1052200093E09093B6238093B52380E490E090932D |
:10523000FB228093FA2280E29EE424EF31E0F90120 |
:105240003197F1F70197D9F720C080E197E224EF79 |
:1052500031E0F9013197F1F70197D9F780E061E08A |
:1052600043EF51E020E00E94944480E062E04EED84 |
:1052700051E020E00E94944480E29EE424EF31E07B |
:10528000F9013197F1F70197D9F784E190E00E9495 |
:10529000288E80E061E045E10E94B74480E061E053 |
:1052A00045ED51E020E00E94944489E061E04C2FFC |
:1052B00020E00E94B6465E9ADF91CF910895FF925A |
:1052C0000F931F9385E00E94CA300E94342880917A |
:1052D0000223882309F4B1C180E062E041EC51E08F |
:1052E00020E00E9494445E9880ED97E024EF31E046 |
:1052F000F9013197F1F70197D9F70E94198F84E1ED |
:1053000090E00E94288E81E56EE70E94EF26892BAF |
:1053100011F410E008C080E064E04FEB51E020E0C1 |
:105320000E94944411E06091082980E00E94EF26D9 |
:10533000892B19F081E00E940E28F12EF394812F21 |
:1053400064E04DEB51E020E00E9494446091082914 |
:105350008BE40E94EF26892B19F082E00E940E2830 |
:105360000F2D0F5F8F2D64E04BEB51E020E00E948A |
:1053700094446091082981E00E94EF26892B19F05E |
:1053800083E00E940E28102F1F5F802F64E049EBFE |
:1053900051E020E00E949444609108298CE40E942E |
:1053A000EF26892B19F084E00E940E28012F0F5F51 |
:1053B000812F64E047EB51E020E00E9494448DE0AF |
:1053C00060E00E94EF26892B19F085E00E940E28EC |
:1053D000102F1F5F802F64E045EB51E020E00E941A |
:1053E000944482E063E00E94EF26892B19F086E066 |
:1053F0000E940E28012F0F5F812F64E043EB51E0E4 |
:1054000020E00E9494446091F32885E00E94EF26FA |
:10541000892B19F087E00E940E28102F1F5F802F24 |
:1054200064E041EB51E020E00E9494446091F32855 |
:1054300080E50E94EF26892B19F088E00E940E2853 |
:10544000012F0F5F812F64E04FEA51E020E00E94BE |
:1054500094446091F72889E00E94EF26892B19F087 |
:1054600089E00E940E28102F1F5F802F64E04DEA14 |
:1054700051E020E00E9494446091F72884E50E9466 |
:10548000EF26892B19F08AE00E940E28012F0F5F6A |
:10549000812F64E04BEA51E020E00E949444609147 |
:1054A000012984E00E94EF26892B19F08BE00E94ED |
:1054B0000E28102F1F5F802F64E049EA51E020E0A2 |
:1054C0000E949444609101298FE40E94EF26892B69 |
:1054D00019F08CE00E940E28012F0F5F812F64E0ED |
:1054E00047EA51E020E00E94944488E061E00E9495 |
:1054F000EF26892B19F08DE00E940E28102F1F5FD8 |
:10550000802F64E045EA51E020E00E9494448BE063 |
:1055100061E00E94EF26892B19F08EE00E940E2890 |
:10552000012F0F5F812F64E043EA51E020E00E94E9 |
:10553000944483E064E00E94EF26892B19F08FE009 |
:105540000E940E28102F1F5F802F64E041EA51E077 |
:1055500020E00E9494448EE464E00E94EF26892BB0 |
:1055600019F080E10E940E28012F0F5F812F64E067 |
:105570004FE951E020E00E9494446091F62886E0D3 |
:105580000E94EF26892B19F081E10E940E28802FBE |
:1055900064E04DE951E020E00E9494446091F628D7 |
:1055A00081E50E94EF26892B19F082E10E940E28E6 |
:1055B000802F8F5F64E04BE951E020E00E9494442B |
:1055C0005E9A80910323882311F180E062E049E82C |
:1055D00051E020E00E9494448091032360E00E9407 |
:1055E000DB4688EE93E09093B6238093B52380E466 |
:1055F00090E09093FB228093FA2280E29EE424EFD5 |
:1056000031E0F9013197F1F70197D9F709C080E04E |
:1056100062E047E751E020E00E9494440E94E038B5 |
:1056200084E190E00E94288E80E29EE424EF31E045 |
:10563000F9013197F1F70197D9F71F910F91FF9079 |
:10564000089520E030E048E853E105C0FA013197C1 |
:10565000F1F72F5F3F4F28173907C4F30895CF9311 |
:10566000DF93EC0140E020E030E0FE01E20FF31FA9 |
:10567000E40FF11D80818D3209F44F5FFB01E20FD1 |
:10568000F31FDE01A20FB31FA40FB11D8C91808305 |
:105690002F5F3F4F2E30310541F7DF91CF910895B5 |
:1056A0001BC00E947B8CBC01807022E0803092077E |
:1056B000C9F022E08130920720F48050914041F4FB |
:1056C000089524E08030920769F08050984051F0AE |
:1056D0008BE693E20E947A3C8BE693E20E944A3C7E |
:1056E0008823F9F208955F926F927F928F929F9232 |
:1056F000AF92BF92CF92DF92EF92FF920F931F93E0 |
:10570000DF93CF930F92CDB7DEB7182F092F562E08 |
:10571000809104238F5F80930423815061E043E6EE |
:1057200053E020E00E946444212F302FC9017C0106 |
:10573000CC2498E8A92E93E1B92E3E010894611C6F |
:10574000711C84EF882E81E0982E49C0F70180817A |
:105750000E94988C892B09F445C080910001882310 |
:1057600041F484EF91E0F4013197F1F70197D9F713 |
:1057700032C0813011F0833021F4C5010197F1F777 |
:105780002AC0823041F5DD2423C00E94502BC50180 |
:105790000197F1F70F5F1F4F0A3C110531F08BE6BF |
:1057A00093E20E94413C882381F78BE693E2B301A8 |
:1057B0000E94563CF70190818981891761F0892FF9 |
:1057C0000E94988C892B71F0D394F3E0DF1619F0C6 |
:1057D00000E010E0DFCFC3940894E11CF11CC51475 |
:1057E00008F4B4CF0F90CF91DF911F910F91FF90EC |
:1057F000EF90DF90CF90BF90AF909F908F907F9071 |
:105800006F905F900895DF92EF92FF920F931F9336 |
:10581000DF93CF93CDB7DEB764970FB6F894DEBFB2 |
:105820000FBECDBFD82EF62EE72E88E893E124EFE9 |
:1058300031E0F9013197F1F70197D9F7ED2DF0E05B |
:10584000E231F10508F0CEC0EA5BFF4F8E010F5F39 |
:105850001F4FEE0FFF1F0590F491E02D0994C80132 |
:105860006EE573E00E949E94E3E0F9E2DE01159696 |
:1058700081918D9389E2E730F807D1F7198671C0DD |
:10588000C80169E573E06BC0C80164E573E067C0F7 |
:10589000C8016FE473E063C0C8016AE473E05FC0ED |
:1058A000C80165E473E05BC0C80160E473E057C001 |
:1058B000C8016DE373E053C0C80169E373E04FC0F2 |
:1058C000C80165E373E04BC0C80160E373E047C003 |
:1058D000C8016BE273E00E949E94F80101900020E1 |
:1058E000E9F731978F2D9E2D9C01D9018CE00D9009 |
:1058F00001928150E1F7198A34C0C80166E273E071 |
:105900002EC0C80161E273E02AC0C8016CE173E0F7 |
:1059100026C0C80167E173E022C0C80162E173E0FC |
:105920000E949E9480912E2F63EC78E29E012B5F63 |
:105930003F4FE82FF0E0AF01460F571F06C0DB01D5 |
:105940008D91BD01D9018D939D0164177507B9F73C |
:10595000EC0FFD1F158205C0C8016DE073E00E94C9 |
:105960009E948E010F5F1F4FC8016BE073E00E9491 |
:1059700093940E94502B8BE693E20E949B3CF8018B |
:1059800001900020E9F73197E01BF10BC8016E2F61 |
:105990000E94732BBEE0DB1641F18DE0D81629F191 |
:1059A00000E010E028E8E22E23E1F22E15C00E946C |
:1059B000502B8BE693E266E073E00E94F43C882370 |
:1059C000A1F48BE693E26EEF72E00E94F43C882330 |
:1059D00049F4C7010197F1F70F5F1F4FA7E0023DA0 |
:1059E0001A0729F720E030E002C021E030E0C901C9 |
:1059F00064960FB6F894DEBF0FBECDBFCF91DF9196 |
:105A00001F910F91FF90EF90DF9008951F931092D8 |
:105A1000000110E080E060E070E00E94032C892B20 |
:105A200019F41F5F1330B1F782E0809300011F91DA |
:105A300008950F931F93CF93DF93C0E0D0E008E861 |
:105A400013E105C00E94502BC8010197F1F7219680 |
:105A5000C433D105B9F78BE693E262E973E00E94A3 |
:105A6000F43CDF91CF911F910F910895EF92FF9237 |
:105A70000F931F93CF93DF938C01C0E0D0E038E801 |
:105A8000E32E33E1F32E3FC00E94502B8BE693E2CE |
:105A900067E873E00E94F43C8823E9F48BE693E224 |
:105AA0006FE773E00E94F43C882369F088EE93E08E |
:105AB00024EF31E0F9013197F1F70197D9F781E04F |
:105AC0008093000126C08BE693E265E673E00E94B6 |
:105AD000F43C882331F00E94192D0E94062D82E0AB |
:105AE000EFCF98010115110511F021E030E080E0C1 |
:105AF00090E005C0C7010197F1F781E090E08217BF |
:105B00009307C4F321960C171D0708F0BDCF8091B1 |
:105B10000001DF91CF911F910F91FF90EF900895B9 |
:105B2000CF92DF92EF92FF920F931F93DF93CF9369 |
:105B30000F92CDB7DEB788E893E124EF31E0F901A9 |
:105B40003197F1F70197D9F780E090E00E94362D68 |
:105B5000823089F110E00BE26E010894C11CD11C67 |
:105B600044EFE42E41E0F42E0983C60161E00E9477 |
:105B7000732B88E99AE3F7013197F1F70197D9F789 |
:105B80001F5F143089F782E060E070E00E94032C10 |
:105B9000892BC1F00E94062D83E060E070E00E9436 |
:105BA000032C892B79F00E94062D80E197E20E9458 |
:105BB000362D823039F48BE693E20E949B3C21E043 |
:105BC00030E002C020E030E0C9010F90CF91DF91BA |
:105BD0001F910F91FF90EF90DF90CF900895CF939A |
:105BE000DF93EC0180E090E00E94362D813021F1BE |
:105BF0000E94062D86E0BE010E94032C892BE1F055 |
:105C00000E94062D84E0BE010E94032C892BA1F086 |
:105C10000E94062D81E060E070E00E94032C892B39 |
:105C200059F080E69AEE0E94362D20E030E0813077 |
:105C300029F421E030E002C020E030E0C901DF912A |
:105C4000CF9108950F931F93DF93CF930F92CDB70A |
:105C5000DEB78C01698380E090E00E94362D8230AF |
:105C600019F420E030E013C0CE01019661E00E94FB |
:105C7000732BC80169810E94732B80E090E00E9421 |
:105C8000362D20E030E0813011F421E030E0C90110 |
:105C90000F90CF91DF911F910F9108951F93182FAF |
:105CA00080E090E00E94362D813019F420E030E051 |
:105CB0002CC080910101181731F1112389F487E07C |
:105CC00060E070E00E94032C892BA9F01092010182 |
:105CD0000E94062D86E060E070E00E94032C0BC05D |
:105CE000113049F488E060E070E00E94032C892BB9 |
:105CF00011F0109301010E94062D20E030E0809108 |
:105D00000101181711F421E030E0C9011F91089535 |
:105D10008F929F92AF92BF92CF92DF92EF92FF92BB |
:105D20000F931F93DF93CF93CDB7DEB7CF5FD040F4 |
:105D30000FB6F894DEBF0FBECDBFD82EB92E0E948D |
:105D4000062D80E00E944E2E892B09F47EC085E04E |
:105D500060E070E00E94032C892B09F476C000E219 |
:105D60001EE4E8E8EE2EE3E1FE2E0E94502B0150E7 |
:105D70001040C7010197F1F701151105B1F78BE646 |
:105D800093E26BEE72E00E94F43C882371F300E032 |
:105D900010E078E8E72E73E1F72E0E94502BC70140 |
:105DA0000197F1F70F5F1F4F8AEE00361807A9F72A |
:105DB000ED2CFB2CDD244E010894811C911C66E126 |
:105DC000A62EB12CAC0EBD1E5CE0C52E36C08BE6F7 |
:105DD00093E2B8010E94563C0F5F1F4F8BE693E29F |
:105DE00068EE72E00E94EF3C882389F3F80110828C |
:105DF0008981882311F1C4016CED72E00E94B39493 |
:105E0000892B49F08BE693E20E949B3C0E94062D71 |
:105E100021E030E01CC087ED92E0B50144E050E0A5 |
:105E20000E94A594892B49F0DC9CB00111246E0DD1 |
:105E30007F1DC5010E942F2BD3948BE693E20E9415 |
:105E4000413C882311F48401C9CF20E030E0C9012E |
:105E5000C150DF4F0FB6F894DEBF0FBECDBFCF915C |
:105E6000DF911F910F91FF90EF90DF90CF90BF9047 |
:105E7000AF909F908F9008956F927F928F929F9294 |
:105E8000AF92BF92CF92DF92EF92FF920F931F9348 |
:105E9000DF93CF930F92CDB7DEB75C01C62E7A01A8 |
:105EA0001982DD2400E010E03E010894611C711CA1 |
:105EB000F8E88F2EF3E19F2E36C0DC1419F421E0B0 |
:105EC00030E03CC00E94502B8BE693E20E94413CA4 |
:105ED000882331F580E090E00E94362D813061F515 |
:105EE0008BE693E20E94413C8823D1F48981882388 |
:105EF00079F48BE693E2B3010E94563C89818C15BC |
:105F000011F019820DC080ED97E0E80EF91E08C06F |
:105F1000B5016D0D711D8BE693E20E94563CD39442 |
:105F2000C4010197F1F70F5F1F4F0330110521F0F6 |
:105F3000E114F10409F0C1CF20E030E0C9010F9075 |
:105F4000CF91DF911F910F91FF90EF90DF90CF9055 |
:105F5000BF90AF909F908F907F906F9008951F9308 |
:105F6000CF93DF931092042343980E948C4080E0EB |
:105F700060E045E953E020E00E94644480ED97E052 |
:105F800024EF31E0F9013197F1F70197D9F7ECEC03 |
:105F9000F8E29AE08081803219F090932E2F04C0AD |
:105FA000915031979923B1F784E190E00E94618C80 |
:105FB0008BE693E267E073E244E650E00E94373CF0 |
:105FC00088EE93E024EF31E0F9013197F1F7019782 |
:105FD000D9F70E94502B8BE693E20E949B3C80E015 |
:105FE00060E070E00E94032C83E0809300018EE06B |
:105FF00060E070E00E94032C8DE060E070E00E94A1 |
:10600000032C80E060E070E00E94032C892B09F0F3 |
:106010004EC080E490E00E94618C88EE93E024EF13 |
:1060200031E0F9013197F1F70197D9F780E060E0AD |
:1060300070E00E94032C8DE060E070E00E94032C71 |
:106040008EE060E070E00E94032C80E060E070E091 |
:106050000E94032C892B09F494C080E060E070E07A |
:106060000E94032C892B19F58CC0CA010197F1F706 |
:1060700021503040D1F780E060E070E00E94032CB6 |
:106080008DE060E070E00E94032C8EE060E070E044 |
:106090000E94032C80E060E070E00E94032C80E00E |
:1060A00060E070E00E94032C892B09F462C082E05A |
:1060B000809300018AE060E070E00E94032CEC0114 |
:1060C00084E190E00E94618C88EE93E024EF31E05F |
:1060D000F9013197F1F70197D9F783E060E070E0BB |
:1060E0000E94032C892B19F010E0CD2B09F411E04C |
:1060F00088E060E070E00E94032C892B09F411E035 |
:1061000089E060E070E00E94032C892B09F411E023 |
:1061100080E160E070E00E94032C892B09F411E01B |
:1061200088EB9BE024EF31E0F9013197F1F701971B |
:10613000D9F781E160E070E00E94032C892B09F41B |
:1061400011E08CE060E070E00E94032C83E080931B |
:1061500000018BE060E070E00E94032C81E08093FE |
:106160000101439A112331F40E94D63821E030E036 |
:1061700003C0439A20E030E0C901DF91CF911F9125 |
:10618000089581E890E00E94618C28EE33E044EFAE |
:1061900051E06BCF429A289A469A459A823051F044 |
:1061A000833018F48823F9F008958530C1F08630E3 |
:1061B00071F517C08091C9008F7E8093C9008091CE |
:1061C000C900877F8093C9008091C9008F77809331 |
:1061D000C900529853985A985B98429808954598E8 |
:1061E0000895469808958091C9008F7E8093C900D4 |
:1061F0008091C900877F8093C9008091C9008F7703 |
:106200008093C900529853985A985B98289808959B |
:106210000E948C4089E490E00E94F055AC0180E03F |
:1062200060E022E00E949D4487E490E00E94F055E7 |
:10623000AC0180E061E022E00E949D4486E490E0B1 |
:106240000E94F055AC0180E063E020E00E949D4494 |
:1062500080E064E04FEB53E020E00E94644480E083 |
:1062600065E049EA53E020E00E9464448AE490E05B |
:106270000E94F055AC0180E066E020E00E949D4461 |
:106280008CE290E00E94F055AC018CE067E020E0E9 |
:106290000E949D4480E00E94CA305E9880E20E9485 |
:1062A0003B848823D9F380EF0E943B845E9A8091DF |
:1062B0006724813011F486E001C085E00E94CA3075 |
:1062C00008950E948C4080E060E043E454E022E0C6 |
:1062D0000E94644480E061E04DE254E022E00E94CC |
:1062E000644480E063E047E154E020E00E946444BD |
:1062F00080E064E041E054E020E00E94644480E0FB |
:1063000065E04BEE53E020E00E94644480E066E0EC |
:1063100045ED53E020E00E9464448CE290E00E944E |
:10632000F055AC018CE067E020E00E949D4443986A |
:1063300082E00E94CA3080E20E943B848823D9F325 |
:1063400080EF0E943B8480916724813011F486E0C5 |
:1063500001C085E00E94CA30439A08950E948C4093 |
:106360008FE390E00E94F055AC0180E060E022E015 |
:106370000E949D4487E490E00E94F055AC0180E0CB |
:1063800061E022E00E949D4486E490E00E94F05586 |
:10639000AC0180E063E020E00E949D4484E490E052 |
:1063A0000E94F055AC0180E064E020E00E949D4432 |
:1063B00088E490E00E94F055AC0180E065E020E0C8 |
:1063C0000E949D448CE290E00E94F055AC018CE06C |
:1063D00067E020E00E949D4480E00E94CA300E9455 |
:1063E000E14D80E20E943B848823C9F380EF0E9444 |
:1063F0003B8480916724813011F486E001C085E000 |
:106400000E94CA3008950E948C408FE390E00E9461 |
:10641000F055AC0180E060E022E00E949D4485E4FC |
:1064200090E00E94F055AC0180E061E020E00E9425 |
:106430009D4486E490E00E94F055AC0180E063E06A |
:1064400020E00E949D4482E490E00E94F055AC015F |
:1064500080E064E020E00E949D4488E490E00E9497 |
:10646000F055AC0180E065E020E00E949D448CE2A4 |
:1064700090E00E94F055AC018CE067E020E00E94C3 |
:106480009D4482E00E94CA300E94E14D80E20E9459 |
:106490003B848823C9F380EF0E943B84809167246A |
:1064A000813011F486E001C085E00E94CA30089571 |
:1064B0000E948C408FE390E00E94F055AC0180E098 |
:1064C00060E022E00E949D4483E490E00E94F05549 |
:1064D000AC0180E061E022E00E949D4481E490E014 |
:1064E0000E94F055AC0180E063E020E00E949D44F2 |
:1064F00084E490E00E94F055AC0180E064E020E08C |
:106500000E949D4488E490E00E94F055AC0180E038 |
:1065100065E020E00E949D448CE290E00E94F055EE |
:10652000AC018CE067E020E00E949D44439880E04D |
:106530000E94CA300E94E14D80E20E943B84882381 |
:10654000C9F380EF0E943B8480916724813011F46D |
:1065500086E001C085E00E94CA30439A08950E94F7 |
:106560008C408091F528813009F055C08FE390E090 |
:106570000E94F055AC0180E060E022E00E949D4462 |
:1065800080E490E00E94F055AC0180E061E020E002 |
:106590000E949D4481E490E00E94F055AC0180E0AF |
:1065A00063E020E00E949D4482E490E00E94F05568 |
:1065B000AC0180E064E020E00E949D4488E490E02B |
:1065C0000E94F055AC0180E065E020E00E949D440F |
:1065D0008CE290E00E94F055AC018CE067E020E096 |
:1065E0000E949D44439882E00E94CA300E94E14D7F |
:1065F00080E20E943B848823C9F380EF0E943B84A1 |
:1066000080916724813011F486E001C085E00E940A |
:10661000CA30439A08958DE390E00E94F055AC0192 |
:1066200080E061E020E00E949D448EE390E00E94C3 |
:10663000F055AC0180E061E020E00E949D4488E3D9 |
:1066400090E00E94F055AC0180E062E020E00E9402 |
:106650009D4489E390E00E94F055AC0180E063E046 |
:1066600020E00E949D448AE390E00E94F055AC0136 |
:1066700080E064E020E00E949D448BE190E00E9475 |
:10668000F055AC018CE067E020E00E949D4480E280 |
:106690000E943B848823D9F380EF0E943B840895B5 |
:1066A0004F925F926F927F928F929F92AF92BF9222 |
:1066B000CF92DF92EF92FF920F931F93DF93CF93CE |
:1066C0000F92CDB7DEB7E0918B23F0E0EE58FC4D92 |
:1066D000808189830E948C4080E063E044E954E03B |
:1066E00020E00E94644480E064E045E854E020E05B |
:1066F0000E94644481E48093892380ED97E024EF35 |
:1067000031E0F9013197F1F70197D9F7109216248A |
:1067100084E190E09093332F8093322F00E0F1E6F4 |
:106720004F2E552453943E010894611C711CE1E0E6 |
:106730008E2E912C74E1C72ED12C64EFA62E61E031 |
:10674000B62E11E150E2E52E52E0F52EAFC02DB786 |
:106750003EB7275030400FB6F8943EBF0FBE2DBF56 |
:10676000EDB7FEB73196ADB7BEB711964C92118218 |
:10677000528274826382968285820E94268F2DB710 |
:106780003EB7295F3F4F0FB6F8943EBF0FBE2DBFF7 |
:1067900080911624882331F48091322F9091332FE9 |
:1067A000892BB1F78091322F9091332F892B09F4E7 |
:1067B00062C00E948B8E4981E0911824F0911924C7 |
:1067C0008081481709F049C08EE064E050E022E083 |
:1067D00030E000E00E944A49E0911824F091192429 |
:1067E0008191819FD001112480918B2390E00197AA |
:1067F0009C012E9DC0012F9D900D3E9D900D11245A |
:10680000A80FB91FA658BB4D80E101900D92815091 |
:10681000E1F7E0911824F0911924208130E0809173 |
:106820008B2390E00197F90144E0EE0FFF1F4A959A |
:10683000E1F7E20FF31FDC01AE9DC001AF9D900DAB |
:10684000BE9D900D1124E80FF91FE658FB4D108AEC |
:1068500089818F5F898300E007C088EE93E0F501AE |
:106860003197F1F70197D9F7D092332FC092322F99 |
:10687000109216241BC00F5FD092332FC092322F7C |
:106880000233A0F080E062E046E754E020E00E949E |
:10689000644484E690E09093332F8093322F80916C |
:1068A000322F9091332F892BD1F704C08981803208 |
:1068B00008F44DCFE0918B23F0E0EE58FC4D898138 |
:1068C00080830F90CF91DF911F910F91FF90EF90F8 |
:1068D000DF90CF90BF90AF909F908F907F906F9000 |
:1068E0005F904F9008952F923F924F925F926F92D8 |
:1068F0007F928F929F92AF92BF92CF92DF92EF9250 |
:10690000FF920F931F93DF93CF930F92CDB7DEB714 |
:106910000E948C4088EC90E09093332F8093322F2C |
:10692000E0918B23F0E0EE58FC4D8081803210F432 |
:106930000E9450338091322F9091332F892B09F48C |
:10694000B6C284E4809389231092162488EC90E0E8 |
:106950009093332F8093322F8AE089832DB73EB7EF |
:10696000275030400FB6F8943EBF0FBE2DBFEDB795 |
:10697000FEB7319684E6ADB7BEB711968C931182FF |
:1069800081E08283CE0101969483838381E090E04D |
:10699000968385830E94268F8CE291E09093352F19 |
:1069A0008093342FFF2400E010E02DB73EB7295F1D |
:1069B0003F4F0FB6F8943EBF0FBE2DBF40E2C42E2E |
:1069C00042E0D42E80918B2390E001978C9DA00112 |
:1069D0008D9D500D9C9D500D1124400F511F465808 |
:1069E0005B4D80E06F2D20E00E943344F3940F5EF6 |
:1069F0001F4F37E0F31631F7FF2438EC832E912C2C |
:106A000024E6E22E1E010894211C311C91E0492E3F |
:106A1000512C80E2682E82E0782E80911624882303 |
:106A200009F48CC00E948B8EA0901824B090192479 |
:106A300083E090E00E94F055AC0180E067E020E048 |
:106A40000E949D444F2D4F5F85E067E00E944B47B9 |
:106A500080918B238130B1F0823001F583E067E0D3 |
:106A600043E754E020E00E94644483E167E040E7AC |
:106A700054E020E00E94644487E0F89E6001112405 |
:106A800010E011C083E067E04DE654E020E00E9492 |
:106A9000644483E167E04AE654E0EBCF83E167E0DA |
:106AA00048E654E0E6CFF601E10FF11D3196EE0F16 |
:106AB000FF1FEA0DFB1D4081518198ED413F5907B1 |
:106AC00014F426E015C0ACEF49315A0774F0BFEF5B |
:106AD0004D395B0764F023E0473E520714F423E08E |
:106AE00007C037E24F30530714F025E001C024E01F |
:106AF00085E1821B612F30E000E00E94DF4884E0E6 |
:106B0000F81691F4143080F080E064E045E10E94D2 |
:106B1000B74480E065E045E10E94B74480E066E06C |
:106B200045E10E94B74417E01F5F173008F4BBCF60 |
:106B30009092332F8092322F109216248091342F0E |
:106B40009091352F892B31F59AE09983ADB7BEB777 |
:106B500017970FB6F894BEBF0FBEADBFEDB7FEB727 |
:106B600031961196EC921182B1E0B2833482238285 |
:106B7000568245820E94268F2CE231E03093352FD9 |
:106B80002093342F8DB79EB707960FB6F8949EBF0B |
:106B90000FBE8DBF80E80E943B84882309F446C065 |
:106BA000FA9494E09F1510F414E0F12E0E948C40AA |
:106BB000A7E0FA9E6001112400E0C601800F911D3C |
:106BC000AC01B4E0440F551FBA95E1F7480F591FC7 |
:106BD00080918B2390E001979C01269DC001279D09 |
:106BE000900D369D900D1124480F591F46585B4D4E |
:106BF00080E0602F20E00E94334434E0F31691F4EB |
:106C0000043080F080E064E045E10E94B74480E019 |
:106C100065E045E10E94B74480E066E045E10E94FE |
:106C2000B74407E00F5F073040F24AC080E40E949B |
:106C30003B84882309F444C0F39484E08F1508F45E |
:106C4000FF240E948C4097E0F99E6001112400E02F |
:106C5000C601800F911DAC01A4E0440F551FAA95F9 |
:106C6000E1F7480F591F80918B2390E00197DC01D9 |
:106C7000A69DC001A79D900DB69D900D1124480FB3 |
:106C8000591F46585B4D80E0602F20E00E9433443E |
:106C9000B4E0FB1691F4043080F080E064E045E15C |
:106CA0000E94B74480E065E045E10E94B74480E07F |
:106CB00066E045E10E94B74407E00F5F073040F20D |
:106CC00010918A23113009F09BC080E10E943B841F |
:106CD000882309F495C019822DB73EB7275030405C |
:106CE0000FB6F8943EBF0FBE2DBFEDB7FEB731967D |
:106CF000ADB7BEB71196EC92118212833482238213 |
:106D0000568245820E94268F80ED97E02DB73EB7D0 |
:106D1000295F3F4F0FB6F8943EBF0FBE2DBFE4EF83 |
:106D2000F1E03197F1F70197D1F780918B23813012 |
:106D300019F40E94A39002C00E94E68E9092332F15 |
:106D40008092322F80ED97E0E4EFF1E03197F1F798 |
:106D50000197D1F7E0918B23F0E0EE58FC4D808154 |
:106D6000803210F40E94503384E48093892310927F |
:106D700016249092332F8092322F3AE039838DB7C8 |
:106D80009EB707970FB6F8949EBF0FBE8DBFEDB7A5 |
:106D9000FEB73196ADB7BEB71196EC921182B1E055 |
:106DA000B28334822382568245820E94268F2DB779 |
:106DB0003EB7295F3F4F0FB6F8943EBF0FBE2DBFC1 |
:106DC0000E948C40FF2400E010E080918B2390E033 |
:106DD0000197869DA001879D500D969D500D112411 |
:106DE000400F511F46585B4D80E06F2D20E00E9400 |
:106DF0003344F3940F5E1F4F37E0F31631F7FF244F |
:106E000080E20E943B84882339F48091322F909154 |
:106E1000332F892B09F001CE80EF0E943B84198229 |
:106E20008DB79EB707970FB6F8949EBF0FBE8DBF64 |
:106E3000EDB7FEB7319684E6ADB7BEB711968C9329 |
:106E4000118281E08283CE0101969483838381E065 |
:106E500090E0968385830E94268F1092892310925A |
:106E600016248091322F9091332F2DB73EB7295F92 |
:106E70003F4F0FB6F8943EBF0FBE2DBF892BA9F42C |
:106E80000E948C4080E062E049E554E020E00E94EE |
:106E9000644484E690E09093332F8093322F809166 |
:106EA000322F9091332F892BD1F70E94E68E0F90CD |
:106EB000CF91DF911F910F91FF90EF90DF90CF90D6 |
:106EC000BF90AF909F908F907F906F905F904F900A |
:106ED0003F902F9008953F924F925F926F927F92D2 |
:106EE0008F929F92AF92BF92CF92DF92EF92FF92DA |
:106EF0000F931F93DF93CF930F92CDB7DEB788E444 |
:106F0000809389230E948C4083E090E00E94F0559A |
:106F1000AC0180E067E020E00E949D4480918B23DB |
:106F2000813061F480E060E049E455E022E00E94B5 |
:106F3000644483E167E046E455E01BC080918A2306 |
:106F4000823061F480E060E040E355E022E00E949E |
:106F5000644483E167E04DE255E00BC080E060E00F |
:106F600047E155E022E00E94644483E167E044E1A8 |
:106F700055E020E00E9464441092162484EF91E0D2 |
:106F80009093332F8093322F8CEF898310E058E653 |
:106F9000452E332433944E010894811C911C41E00A |
:106FA000A42EB12C55245A9434EFC32E31E0D32EA5 |
:106FB00024EFE22E21E0F22E9EEF692E0DEF8CEFF2 |
:106FC000782E2DB73EB7275030400FB6F8943EBF0D |
:106FD0000FBE2DBFEDB7FEB73196ADB7BEB7119658 |
:106FE0004C921182328294828382B682A5820E9460 |
:106FF000268F598284EC99E02DB73EB7295F3F4F29 |
:107000000FB6F8943EBF0FBE2DBFF6013197F1F7D2 |
:107010000197D9F7809116248823E9F10E948B8E7D |
:1070200080918A23882341F51091A42F1156109343 |
:107030008A23113081F460E04EEF54E022E00E9498 |
:10704000644483E167E04BEF54E020E00E94644435 |
:1070500010938B2311C080E060E045EE54E022E005 |
:107060000E94644483E167E042EE54E020E00E9425 |
:10707000644482E080938B231092F62F80E062E0DC |
:1070800046EA5FE20E94044410921624F092332FE5 |
:10709000E092322F11E080E80E943B84882331F493 |
:1070A00080E862E00E949484882311F0698239C0EC |
:1070B00080E40E943B84882331F480E462E00E94F3 |
:1070C0009484882311F009832CC080918A23813015 |
:1070D00041F580E10E943B84882319F180918B2344 |
:1070E000813071F40E94A39080E060E04CEC54E0A9 |
:1070F00022E00E94644483E167E049EC54E00DC063 |
:107100000E94E68E80E060E043EB54E022E00E94C3 |
:10711000644483E167E040EB54E020E00E94644473 |
:10712000798280E20E943B84882339F48091322F57 |
:107130009091332F892B09F044CF80EF0E943B843C |
:1071400010928923109216248091322F9091332F20 |
:10715000892BB9F4112311F00E948C4080E062E089 |
:107160004CE954E020E00E94644484E690E090936F |
:10717000332F8093322F8091322F9091332F892B90 |
:10718000D1F70E94E68E0F90CF91DF911F910F9162 |
:10719000FF90EF90DF90CF90BF90AF909F908F9037 |
:1071A0007F906F905F904F903F90089581E0809323 |
:1071B000FA286091FA2882E190E00E9439950895BA |
:1071C00081E08093FB286091FB2881E190E00E94A0 |
:1071D00039950895EF92FF920F931F93CF93DF930A |
:1071E00010920E2910920F29109210291092112935 |
:1071F00010920A2910920B2910920C2910920D2935 |
:107200001092122910921329109214291092152904 |
:1072100089E691E0909318298093172980E090E007 |
:10722000FC01E053F74D128201968F319105C1F7B1 |
:10723000C0E0D0E084E695E060E00E943C448E012E |
:1072400095E0000F111F9A95E1F70C1B1D0BC8016B |
:107250008F519F4F6C2F0E943995C80182519F4FCB |
:1072600060E00E943995B8016A517F4F8EE099E243 |
:1072700044E050E00E942F95B8016E517F4F8AE0A4 |
:1072800099E244E050E00E942F95B80166517F4F8B |
:1072900082E199E244E050E00E942F95B8016151EB |
:1072A0007F4F87E199E242E050E00E942F95C801AC |
:1072B0008F509F4F60E00E943995C8018E509F4FBC |
:1072C00060E00E943995C8018B509F4F6FEF0E947C |
:1072D0003995C8018D509F4F60E00E943995C801D3 |
:1072E00089509F4F60E00E9439952196C733D105A0 |
:1072F00009F0A0CFC0E0D0E083E2E82EF12C82E6D6 |
:1073000095E060E00E943C44CE9D8001CF9D100D31 |
:10731000DE9D100D1124C8018E5C9F4F6C2F0E94C2 |
:107320003995C8018D5C9F4F60E00E943995C80176 |
:107330008C5A9F4F60E00E943995C8018D5A9F4F2B |
:1073400060E00E9439950C5C1F4F82ED98E2B80115 |
:107350004FE150E00E942F952196C530D10579F676 |
:107360008FE595E060E00E943C44DF91CF911F9152 |
:107370000F91FF90EF90089580E090E06091792464 |
:107380000E9439956091292981E090E00E94399509 |
:107390006091FC2882E090E00E9439956091082974 |
:1073A00083E090E00E9439956091F62884E090E0B7 |
:1073B0000E9439956091012985E090E00E943995FD |
:1073C0006091F32886E090E00E9439956091F7285B |
:1073D00087E090E00E9439956091BE2888E090E0B7 |
:1073E0000E9439956091C22889E090E00E94399509 |
:1073F000609128298AE090E00E9439956091CE281A |
:107400008BE090E00E943995609178248CE090E0C8 |
:107410000E943995609167248DE090E00E94399533 |
:10742000609102298EE090E00E9439956091F828E1 |
:107430008FE090E00E9439956091F52880E190E01E |
:107440000E9439956091FB2881E190E00E94399576 |
:107450006091FA2882E190E00E9439956091F928C4 |
:1074600083E190E00E9439956091CF2884E190E01B |
:107470000E9439956091C0287091C12885E190E003 |
:107480000E944F956091BF2887E190E00E94399556 |
:107490006091F42888E190E00E94399583E099E2B8 |
:1074A00062E270E044E050E00E942F9583EC98E2A5 |
:1074B00067E270E04AE050E00E942F950895AF9295 |
:1074C000BF92CF92DF92EF92FF920F931F937B01B7 |
:1074D0008C0159016A0189E190E0B801A7010E947D |
:1074E00047958DE190E0B601A5010E9447951F9157 |
:1074F0000F91FF90EF90DF90CF90BF90AF900895E5 |
:107500000E948C4080E060E04FEA55E022E00E945B |
:10751000644480E061E044EA55E020E00E94644475 |
:1075200080E062E04EE855E020E00E94644489E893 |
:10753000809379241092292991E09093FC289093CC |
:10754000082982E48093F6289093012980E18093B2 |
:10755000F32880E48093F7281092BE281092C22866 |
:1075600084E18093282984E68093CE2810927824A1 |
:1075700010926724109202299093F8289093F5288E |
:107580001092FB281092FA281092F9289093CF2895 |
:107590009093BF289093F42880E797E19093C128B7 |
:1075A0008093C02888E292EDA1E4B5E08093BA28E8 |
:1075B0009093BB28A093BC28B093BD288EE491EB98 |
:1075C000ADE1BFE18093FD289093FE28A093FF28B2 |
:1075D000B09300294091BA285091BB286091BC28F3 |
:1075E0007091BD2889E190E00E9447954091FD2867 |
:1075F0005091FE286091FF28709100298DE190E064 |
:107600000E94479583E099E269E875E00E949E94A4 |
:1076100083E099E262E270E044E050E00E942F953E |
:1076200083EC98E26EE775E00E949E9483EC98E20A |
:1076300067E270E04AE050E00E942F956091FB28DD |
:1076400081E190E00E9439956091FA2882E190E012 |
:107650000E94399581E290E069E50E9439950E9487 |
:10766000BC3980E066E049E655E020E00E946444D1 |
:1076700082E167E046E655E020E00E94644488EC41 |
:1076800090E09093B6238093B52380E890E09093A8 |
:10769000FB228093FA2280E10E9445848823D9F35B |
:1076A000089581E290E00E941B95893509F0BBC0E6 |
:1076B00080E090E00E941B958093792481E090E027 |
:1076C0000E941B958093292982E090E00E941B95DF |
:1076D0008093FC2883E090E00E941B95809308290A |
:1076E00084E090E00E941B958093F62885E090E06E |
:1076F0000E941B958093012986E090E00E941B95D3 |
:107700008093F32887E090E00E941B958093F728F0 |
:1077100088E090E00E941B958093BE2889E090E06D |
:107720000E941B958093C2288AE090E00E941B95DE |
:10773000809328298BE090E00E941B958093CE28AF |
:107740008CE090E00E941B95809378248DE090E07F |
:107750000E941B95809367248EE090E00E941B9509 |
:10776000809302298FE090E00E941B958093F82877 |
:1077700080E190E00E941B958093F52881E190E0E4 |
:107780000E941B958093FB2882E190E00E941B954C |
:107790008093FA2883E190E00E941B958093F9285A |
:1077A00084E190E00E941B958093CF2885E190E0D2 |
:1077B0000E9429959093C1288093C02887E190E08A |
:1077C0000E941B958093BF2888E190E00E941B9542 |
:1077D0008093F42883E099E262E270E044E050E0B4 |
:1077E0000E940B9583EC98E267E270E04AE050E07B |
:1077F0000E940B9589E190E00E9423956093BA283E |
:107800007093BB288093BC289093BD288DE190E0B5 |
:107810000E9423956093FD287093FE288093FF2893 |
:107820009093002908950E94803A089589E190E09C |
:107830000E9423956093BA287093BB288093BC283C |
:107840009093BD288DE190E00E9423956093FD28E0 |
:107850007093FE288093FF28909300290895FC01DF |
:10786000849101C0849131968823E1F70895FC0149 |
:107870005583448377836683138212821182108238 |
:107880000895FC0120E080819181892B09F421E099 |
:10789000822F0895FC0140E024813581808191810F |
:1078A0002817390709F441E0842F0895CF93DF9317 |
:1078B000EC01DB0188819981892B11F480E017C0EC |
:1078C000EE81FF818A819B81E80FF91F80818C9373 |
:1078D0008A819B816C817D8101960E942F949B837C |
:1078E0008A838881998101979983888381E0DF91D8 |
:1078F000CF910895CF93DF93EC01462F6C817D816A |
:10790000288139816217730711F480E011C08A81E0 |
:107910009B81820F931F0E942F94EE81FF81E80FBD |
:10792000F91F40838881998101969983888381E03A |
:10793000DF91CF910895FC0111821082138212828F |
:1079400081E00895CF92DF92EF92FF920F931F9301 |
:10795000CF93DF93EC016B017A0100E010E019C0D6 |
:10796000C8018E0D9F1D8217930778F58A819B8130 |
:107970008E0D9F1D6C817D81800F911F0E942F9421 |
:10798000EE81FF81E80FF91F80818417F1F40F5F0A |
:107990001F4FF601E00FF11F4491288139814423E4 |
:1079A000F9F68A819B818E0D9F1D6C817D81800FF0 |
:1079B000911F0E942F949B838A832E193F09201BBD |
:1079C000310B3983288381E001C080E0DF91CF91C2 |
:1079D0001F910F91FF90EF90DF90CF90089540E0BE |
:1079E00050E00E94A23C0895EF92FF920F931F93E4 |
:1079F000CF93DF938C017B01C0E0D0E00AC0C801C7 |
:107A0000B701AE010E94A23C882311F081E008C0BA |
:107A10002196F80180819181C817D90780F380E011 |
:107A2000DF91CF911F910F91FF90EF900895FC018E |
:107A300080818093262A81818093272A8281809366 |
:107A4000282A93819093292A6091262A7091272AC7 |
:107A5000089590917523980F9093752380917623C4 |
:107A6000890F809376230895CF92DF92EF92FF9251 |
:107A70000F931F93CF93DF9380E80E943B8488236A |
:107A800029F480917A23823009F041C080917A23D1 |
:107A90008130D1F10E948C4080E060E046E459E002 |
:107AA00020E00E94644480E061E04AE359E020E085 |
:107AB0000E94644480E062E04EE259E020E00E94CF |
:107AC000644480E063E042E259E020E00E946444C4 |
:107AD00080E064E046E159E020E00E94644480E0F8 |
:107AE00065E04AE059E020E00E94644480E066E0FE |
:107AF0004EEF58E020E00E94644480E067E042EFEF |
:107B000058E020E00E94644481E080937A238091D1 |
:107B10007723813009F05EC080917823803309F0AB |
:107B200059C080917A23882309F054C0C0902E292F |
:107B3000C3E3D9E2EE244BC080E1E81609F44AC061 |
:107B400087E08E1510F010E001C01BE04881812F06 |
:107B50006E2D50E023E030E000E00E944A494B8166 |
:107B6000812F8C5F6E2D50E022E030E00E944A4968 |
:107B70008981282F30E0C90183709070039731F418 |
:107B8000812F895F6E2D40EF58E01CC020FF06C09A |
:107B9000812F895F6E2D4EEE58E014C09A8195308A |
:107BA00030F0812F895F6E2D4CEE58E00BC0812F95 |
:107BB000895F923020F06E2D4AEE58E003C06E2DA2 |
:107BC00048EE58E020E00E946444E3942C96EC14C4 |
:107BD00008F4B2CF80917A23813009F06FC180918F |
:107BE0007723813009F084C080917823863009F0B2 |
:107BF0007FC080913429823049F0823060F0853036 |
:107C000050F48BE060E045EE58E009C08BE060E0A6 |
:107C100042EE58E004C08BE060E04FED58E020E019 |
:107C20000E946444809135298370833029F481E176 |
:107C300060E04DED58E004C081E160E04BED58E0BC |
:107C400020E00E9464448091352980FF05C08EE0C9 |
:107C500060E048ED58E004C08EE060E045ED58E09B |
:107C600020E00E9464448BE061E0409159290E9429 |
:107C70004B4782E499E20E94173D9B01AC018BE0E7 |
:107C800062E0A90125E030E000E00E944A4981E17C |
:107C900062E042ED58E020E00E946444E090572901 |
:107CA0008FEFE89E7001112480915629E80EF11C97 |
:107CB000C70164E670E00E942F94AB018BE063E0A3 |
:107CC00022E030E00E944A498DE063E040ED58E058 |
:107CD00020E00E946444C70164E670E00E942F9493 |
:107CE000AC018EE063E022E030E001E00E944A490E |
:107CF00080917723813019F5809178238231F9F4CE |
:107D00008EE399E20E94173D20E13EE040E050E022 |
:107D10000E94049420EA36E841E050E00E94569424 |
:107D20008BE064E0A90123E030E000E00E944A49D2 |
:107D30008FE064E04BEC58E020E00E9464448091C6 |
:107D40007723813009F0BAC080917823823009F01E |
:107D5000B5C08EE299E20E94173D6B017C0120E8DC |
:107D600036E948E950E00E9456948AE065E0A901AE |
:107D700022E030E000E00E944A498CE065E049ECF6 |
:107D800058E020E00E946444C701B60128EE33E0C9 |
:107D900040E050E00E945694CA01B90120E137E268 |
:107DA00040E050E00E9456949B01AC018DE065E0FC |
:107DB000A90124E030E001E00E944A49C701B60170 |
:107DC0002AE030E040E050E00E945694CA01B90138 |
:107DD00024E630E040E050E00E9456949B01AC0164 |
:107DE00081E165E0A90122E030E00E944A4982E396 |
:107DF00099E20E94173D6B017C0120E836E948E9D1 |
:107E000050E00E9456948AE066E0A90122E030E04A |
:107E100000E00E944A498CE066E047EC58E020E030 |
:107E20000E946444C701B60128EE33E040E050E010 |
:107E30000E945694CA01B90120E137E240E050E0C7 |
:107E40000E9456949B01AC018DE066E0A90124E0FC |
:107E500030E001E00E944A49C701B6012AE030E063 |
:107E600040E050E00E945694CA01B90124E630E097 |
:107E700040E050E00E9456949B01AC0181E166E035 |
:107E8000A90122E030E00E944A498AE399E20E9477 |
:107E9000173D28EE33E040E050E00E9456948BE01E |
:107EA00067E0A90124E030E000E00E944A4980E157 |
:107EB00067E045EC58E020E00E946444DF91CF91F8 |
:107EC0001F910F91FF90EF90DF90CF900895AF92A8 |
:107ED000BF92CF92DF92EF92FF920F931F93DF93A7 |
:107EE000CF930F92CDB7DEB70E948C4082E0809393 |
:107EF0007A2380918A238230A1F480E063E042E516 |
:107F000059E020E00E94644484E690E09093332F8F |
:107F10008093322F8091322F9091332F892BD1F77C |
:107F2000E1C080918B23813011F00E94E68E0E9487 |
:107F3000209088EC90E09093332F8093322F198219 |
:107F400010E0FF24EE245E010894A11CB11C88EC13 |
:107F5000C82ED12CC5010E94FA8D882309F4ACC02B |
:107F6000D092332FC092322F143009F45DC01530F7 |
:107F700050F4113031F1113098F0123049F11330D2 |
:107F800009F09AC038C0163009F46BC0163008F4F6 |
:107F90005BC0173009F480C0183009F08DC080C074 |
:107FA0008981853B09F088C010927923109278234B |
:107FB0001092772310927523109276230F2D11E0E3 |
:107FC0007FC08981823609F079C00F2D12E078C018 |
:107FD0002981213009F072C0909175239F5F9093A1 |
:107FE000752380917623890F8093762320937723BE |
:107FF0000F2D13E065C08981803339F0863029F078 |
:10800000823119F0823009F059C080937823909121 |
:108010007523980F9093752380917623890F809311 |
:1080200076230F2D14E04CC009810B3F08F046C0A9 |
:1080300090917523900F9093752380917623890FEB |
:108040008093762315E03CC089818823B9F590910F |
:10805000752380917623890F809376230F2D16E068 |
:108060002FC00F2D0150209179238981E22FF0E05C |
:10807000E65DF64D808390917523980F909375235C |
:1080800080917623890F809376232F5F2093792325 |
:108090000023B1F417E014C0E9800F2D18E010C0E0 |
:1080A00080917523E81651F4998180917623981771 |
:1080B00029F40E94343D02C00F2D02C00F2D10E0A4 |
:1080C00080E20E943B84882341F48091322F90917A |
:1080D000332F892B11F0F02E3DCF80EF0E943B848F |
:1080E0000E94E68E0F90CF91DF911F910F91FF902C |
:1080F000EF90DF90CF90BF90AF9008952C988EBDF9 |
:108100000DB407FEFDCF2C9A08952C988EBD0DB4AA |
:1081100007FEFDCF2C9A08951F93CF93DF9380E045 |
:1081200090E0FC01E55DF54D1082019624E0803081 |
:108130009207B9F710EB2B98812F0E947E4080E1C7 |
:108140000E947E408091BE280E947E402B9AC0E013 |
:10815000D0E080E00E947E402196C038D105C9F76A |
:108160001F5F183B41F71092AE2E1092AF2EDF9199 |
:10817000CF911F91089588E893E10197F1F7089551 |
:1081800020E030E048E853E105C0FA013197F1F70B |
:108190002F5F3F4F28173907C0F308951F93182FFB |
:1081A0001092AE2E1092AF2E8CE58CBD81E08DBD6D |
:1081B0002C9A2A9880E090E028E833E1F901319781 |
:1081C000F1F701968A309105C9F72A9A2C982B98D5 |
:1081D00080E40E947E401130A1F48091BE28882363 |
:1081E00029F481EA0E947E4080EC04C080EA0E946B |
:1081F0007E4088EC0E947E408091C228882349F40A |
:1082000006C081EA0E947E4080EC0E947E4086EAA1 |
:1082100001C087EA0E947E4082EA0E947E408FE28F |
:108220000E947E4088EF0E947E4080E00E947E4057 |
:1082300087E20E947E40113031F481E80E947E4046 |
:108240008091282904C081E80E947E4086E10E9436 |
:108250007E408CEA0E947E4080E00E947E408FEA51 |
:108260000E947E401130A1F46091CE2870E08827F2 |
:1082700077FD8095982F0E942F9223E333E343E20A |
:1082800050E40E941C930E9401926093B30003C0CB |
:108290008FEF8093B3000E948C401F910895FF924E |
:1082A0000F931F938C01F62E2B98880F892F881F10 |
:1082B000990B919580550E947E408091BE280F7742 |
:1082C000080F802F82958F70805F0E947E40802FE4 |
:1082D0008F700E947E402B9A8F2D0E947E401F91AE |
:1082E0000F91FF900895CF93DF93C0E0D0E0FE019F |
:1082F000E555F54D8081FE01E55DF54D808360819A |
:10830000CE010E944F41219683E0C038D80779F70B |
:10831000FE01E55DF54D1082CE0160E00E944F4107 |
:10832000219684E0C030D80799F7DF91CF91089566 |
:108330000F931F93CF93DF93082F10E01695102F04 |
:108340000027179507951370C0E0D0E0CE01800F8D |
:10835000911FDC01A55DB54D2C91FE01E45DF14D51 |
:1083600020836C910E944F412196CE37D10571F741 |
:10837000DF91CF911F910F9108950F931F93CF938A |
:10838000DF93082F10E01695102F002717950795FB |
:108390001370C0E0D0E0CE01800F911FFE01E45DBC |
:1083A000F14D2081FC01E55DF54D208360810E9447 |
:1083B0004F412196CE37D10571F7DF91CF911F91B3 |
:1083C0000F9108958091AF2E8F5F8093AF2E8830EC |
:1083D00028F00E94734187E08093AF2E0895982F74 |
:1083E00087FD3AC06034C0F5862F869586958695C0 |
:1083F000282F30E03695322F222737952795290FE1 |
:10840000311D677081E090E0582F01C0550F6A95CB |
:10841000EAF7652F3370413061F0413018F0423097 |
:10842000A1F40DC0F901E55DF54D808160958623CD |
:108430000BC0F901E55DF54D8081852B05C0F90183 |
:10844000E55DF54D808185278083F901E55DF54D7A |
:108450006081C9010E944F4108952F923F924F922F |
:108460005F926F927F928F929F92AF92BF92CF92C4 |
:10847000DF92EF92FF920F931F93DF93CF93CDB7CD |
:10848000DEB729970FB6F894DEBF0FBECDBF8E833F |
:10849000A62E0F83482E5524662E7724842F90E035 |
:1084A0009D838C8384199509E22FF0E0FB83EA8396 |
:1084B000AF014619570997FF04C022242A94322C91 |
:1084C00006C09C01009711F021E030E0190157FF30 |
:1084D00004C088248A94982C07C09A01411551053C |
:1084E00011F021E030E049016C0197FF04C0D09405 |
:1084F000C194D108D3947A0157FF04C0F094E19459 |
:10850000F108F3948E816A2D4F810E94EF41EC14A3 |
:10851000FD04A4F5C60162E070E00E9443942227A6 |
:108520003327261B370B39872887A22CB22CB40C93 |
:1085300000E010E03E81432E552417C04885598540 |
:108540004E0D5F1D598748871416150634F4680CC4 |
:10855000791C4C195D09598748878B2D662D4F81F1 |
:108560000E94EF41020D131DBA0CC801840D951D28 |
:10857000EC81FD818E179F0709F733C0C70162E0C8 |
:1085800070E00E94439422273327261B370B39873C |
:1085900028878982B82CB60C00E010E06A2C77247A |
:1085A00018C0488559854C0D5D1D5987488714169C |
:1085B000150634F4420C531C4E195F09598748873D |
:1085C000842D6B2D4F810E94EF41080D191D59819B |
:1085D000B50EC801860D971DEA81FB818E179F0796 |
:1085E00001F729960FB6F894DEBF0FBECDBFCF912D |
:1085F000DF911F910F91FF90EF90DF90CF90BF9090 |
:10860000AF909F908F907F906F905F904F903F9032 |
:108610002F900895BF92CF92DF92EF92FF920F9327 |
:108620001F93CF93DF93182FB02E87FD1FE7603481 |
:1086300008F06FE3C42EDD24862F90E0820F911D99 |
:10864000C10ED11C21E8C216D10418F0E0E8CE2EEC |
:10865000D12C7C0181E4E816F10418F070E4E72ED7 |
:10866000F12CC62FD0E008C0812F6C2F4C2D2C2F61 |
:108670000B2D0E942D422196EC16FD06A8F7DF91E6 |
:10868000CF911F910F91FF90EF90DF90CF90BF900F |
:108690000895CF92DF92FF920F931F93CF93DF93B2 |
:1086A000C82ED62E142FF22E82E0281779F470E00F |
:1086B000B3E0660F771FBA95E1F786E0C89E802D7C |
:1086C000112445E027E001E00E940A431F3DE1F04C |
:1086D000103E38F4163D81F01C3D91F0143CA9F495 |
:1086E00007C0163F59F01C3F69F0143E71F402C0F8 |
:1086F00011E00BC012E009C013E007C014E005C090 |
:1087000015E003C016E001C01EE1CD2DD0E0D695E6 |
:10871000DC2FCC27D795C79526E0C29EC001112437 |
:10872000C80FD91FD3701F77129F900111248901A0 |
:108730000B531A4FFBECCF2EF5E0DF2EC20ED31EEB |
:10874000F8019491F2E0FF16D1F0FF1530F0FF2010 |
:1087500059F081E0F81629F50CC0E3E0FE16A9F007 |
:10876000F4E0FF16F1F416C0FE01E55DF54D9083CF |
:1087700018C0FE01E55DF54D8081892B11C0FE0119 |
:10878000E55DF54D808189270BC0FE01E55DF54D66 |
:10879000808105C0FE01E55DF54D808190958923BE |
:1087A0008083FE01E55DF54D6081CE010E944F4161 |
:1087B0000F5F1F4F21960C151D0509F0C1CFDF91EA |
:1087C000CF911F910F91FF90DF90CF900895CF939D |
:1087D000DF93EC0113C08091AE2E6091AF2E20E0AC |
:1087E0000E9449438091AE2E8F5F8093AE2E8431DC |
:1087F00020F01092AE2E0E94E2412196488144233F |
:1088000051F7DF91CF9108958093AE2E6093AF2EF4 |
:10881000CA010E94E74308951F93CF93DF93EC01B1 |
:10882000162F1AC04A30A9F04D3019F41092AE2E0E |
:1088300012C08091AE2E6091AF2E212F0E9449432D |
:108840008091AE2E8F5F8093AE2E863120F01092F5 |
:10885000AE2E0E94E24121964881442319F7DF9110 |
:10886000CF911F9108958093AE2E6093AF2ECA01D1 |
:10887000622F0E940C4408951F93CF93DF93EC0165 |
:10888000162F1AC04A30A9F04D3019F41092AE2EAE |
:1088900012C08091AE2E6091AF2E212F0E944943CD |
:1088A0008091AE2E8F5F8093AE2E863120F0109295 |
:1088B000AE2E0E94E2412196FE014491442311F71D |
:1088C000DF91CF911F9108958093AE2E6093AF2ECC |
:1088D000CA01622F0E943C4408951F93CF93DF93F7 |
:1088E000EC01162F19C04A3019F04D3021F411C097 |
:1088F0000E94E24110C08091AE2E6091AF2E212FD8 |
:108900000E9449438091AE2E8F5F8093AE2E8631B8 |
:1089100010F01092AE2E2196FE014491442319F7D7 |
:10892000DF91CF911F9108958093AE2E6093AF2E6B |
:10893000CA01622F0E946D440895FF920F931F9306 |
:10894000CF93DF93182FF62EEA01022F07C021964E |
:10895000812F6F2D202F0E9449431F5F48814423A0 |
:10896000B1F7DF91CF911F910F91FF9008950F9371 |
:108970001F93282F8093AE2E6093AF2E90E0840F2C |
:10898000911D469714F045E1421B042F020F122F50 |
:1089900008C0812F6091AF2E40E220E00E94494341 |
:1089A0001F5F1017B0F31F910F910895DF92EF92A0 |
:1089B000FF920F931F93CF93DF93F82ED02E87FF54 |
:1089C00002C01FE7F12E162F603408F01FE350E0BD |
:1089D000C12FD0E0C20FD11D4F0D511D413851059F |
:1089E00010F040E850E0E42E8F2D612F212F0D2D47 |
:1089F0000E942D42C134D10510F0C0E4D0E08E2D8C |
:108A0000612F4E2D2C2F0D2D0E942D428E2D6C2F5F |
:108A10004F2D2C2F0E942D428F2D6C2F4F2D212F4B |
:108A20000E942D42DF91CF911F910F91FF90EF9007 |
:108A3000DF9008952F923F924F925F926F927F92B4 |
:108A40008F929F92AF92BF92CF92DF92EF92FF925E |
:108A50000F931F93CF93DF93682E762E8A01C22E39 |
:108A6000C1E0D0E0C41BD50BCA01880F991F222496 |
:108A70003324281A390A642F670D862D4C2D0E9445 |
:108A8000EF41672D601B862D4C2D0E94EF41802FFA |
:108A9000860D672D4C2D0E94EF41862D801B672D82 |
:108AA0004C2D0E94EF414801AA24BB2403E0402E34 |
:108AB000512C4DC0D7FD09C008948108910882E06F |
:108AC00090E0280E391EC20DD31D0894A11CB11CC4 |
:108AD000C40DD51DDA2CD60C182D170D8D2D612F38 |
:108AE0004C2D0E94EF41E62CEA188E2D612F4C2D63 |
:108AF0000E94EF41172D18198D2D612F4C2D0E94CA |
:108B0000EF418E2D612F4C2D0E94EF41E82CE60C99 |
:108B10001A2D170D8E2D612F4C2D0E94EF41962D91 |
:108B20009819092F892F612F4C2D0E94EF41172D85 |
:108B30001A198E2D612F4C2D0E94EF41802F612F2D |
:108B40004C2D0E94EF4182E090E0480E591EA8147F |
:108B5000B9040CF4AFCFDF91CF911F910F91FF902B |
:108B6000EF90DF90CF90BF90AF909F908F907F90CD |
:108B70006F905F904F903F902F9008952F923F926B |
:108B80004F925F927F928F929F92AF92BF92CF92BD |
:108B9000DF92EF92FF920F931F93CF93DF93782E84 |
:108BA000C62E7A01C1E0D0E0C41BD50BCA01880FE4 |
:108BB000991F22243324281A390A6E2D6C0D2C2D6E |
:108BC0002E19872D472D01E00E942D42472D4E1969 |
:108BD0008E2D870D6C2D2C2D0E942D424701AA242D |
:108BE000BB2433E0432E512C3AC0D7FD09C0089472 |
:108BF0008108910882E090E0280E391EC20DD31D35 |
:108C00000894A11CB11CC40DD51DEA2CE70CD72C6F |
:108C1000DA18282D2C0D8E2D622F4D2D01E00E948B |
:108C20002D422C2D28198E2D622F4D2D0E942D4264 |
:108C3000E82CE70C972D9819192F2A2D2C0D8E2D25 |
:108C4000622F492F0E942D422C2D2A198E2D622F22 |
:108C5000412F0E942D4282E090E0480E591EA81438 |
:108C6000B9041CF2DF91CF911F910F91FF90EF900B |
:108C7000DF90CF90BF90AF909F908F907F905F904C |
:108C80004F903F902F900895CF92DF92EF92FF92F6 |
:108C90000F931F93CF93DF93082F0E948C4080E7A0 |
:108CA00099E060E00E943C441092AE2E87E08093F1 |
:108CB000AF2E8FE599E060E00E946D4482E08093E2 |
:108CC000AF2E10E07801EE0CFF1CEE0CFF1C0F5FC6 |
:108CD0001F4F6801CC0CDD1CCC0CDD1C015010407A |
:108CE0000295000F000F007C12E02EC08AE0E8160B |
:108CF000F1041CF44E2D405D02C04E2D495C80E015 |
:108D00006091AF2E20E00E9449431093AE2EC0E048 |
:108D1000D0E0402F4C0F8091AE2E6091AF2E20E01E |
:108D20000E9449438091AE2E8F5F8093AE2E219694 |
:108D3000C031D10571F78091AF2E8F5F8093AF2E38 |
:108D40000894E11CF11C005FEC14FD047CF2DF913F |
:108D5000CF911F910F91FF90EF90DF90CF900895EA |
:108D60008A3010F4805D0895895C08950F931F93F5 |
:108D7000142F022F6093AF2E8F5F8093AE2E815001 |
:108D800042954F704A3010F4405D01C0495C202F7D |
:108D90000E9449438091AE2E6091AF2E412F4F70BB |
:108DA0004A3010F4405D01C0495C202F0E944943C5 |
:108DB0001F910F9108950F931F93082F162F8091E5 |
:108DC000AE2E8F5F8093AE2E81506091AF2E402FDC |
:108DD00042954F704A3010F4405D01C0495C212F2C |
:108DE0000E9449438091AE2E8F5F8093AE2E8150BA |
:108DF0006091AF2E402F4F704A3010F4405D01C09B |
:108E0000495C212F0E9449438091AE2E8F5F809351 |
:108E1000AE2E81506091AF2E40E2212F0E94494337 |
:108E20001F910F910895FF920F931F93CF93DF939C |
:108E3000F82E14E620E0C0E0D0E08F2D612F0E94D4 |
:108E40002394082F882321F4222311F4113071F484 |
:108E50008091AE2E8F5F8093AE2E8150402F405D6B |
:108E60006091AF2E20E00E94494321E0812F6AE00B |
:108E70000E942394982F2196C330D10531F0019F91 |
:108E8000802D1124F81A192FD8CFDF91CF911F917F |
:108E90000F91FF9008958093AE2E6093AF2E842F94 |
:108EA0000E9413470895BF92CF92DF92EF92FF92F4 |
:108EB0000F931F93CF93DF93082FB62E7A0114E6FA |
:108EC000C0E0D0E0C701612F70E00E942F94C62E51 |
:108ED000812F8A508A3048F4D02ED394802F6B2D66 |
:108EE0004EE220E00E9449430D2D4C2D405D802F25 |
:108EF0006B2D20E00E944943812F6AE00E94239459 |
:108F0000282F2196C330D10541F00F5FC19EC001CB |
:108F10001124E81AF90A122FD5CFDF91CF911F91B2 |
:108F20000F91FF90EF90DF90CF90BF9008957F92C8 |
:108F30008F929F92AF92BF92CF92DF92EF92FF9269 |
:108F40000F931F93DF93CF93CDB7DEB727970FB65D |
:108F5000F894DEBF0FBECDBF882EC62ECA017901A0 |
:108F6000702E8E010F5F1F4FB8014AE050E00E9443 |
:108F7000D494F80101900020E9F731979E2E901AC1 |
:108F8000092D10E0E016F1062CF0DD245701A01A9F |
:108F9000B10A1EC010E007C0822F6C2D4AE220E00B |
:108FA0000E9449431F5F212F280D812F90E08E15CD |
:108FB0009F0594F34CC0772021F08F2D6C2D40E35A |
:108FC00003C08F2D6C2D40E220E00E944943D394D2 |
:108FD000FD2CF80C8D2D90E08A159B0564F3FE01A5 |
:108FE000E00FF11F0081108281E0981619F48F2D97 |
:108FF00081500EC082E0981689F489818D3271F417 |
:109000008F2D81506C2D4DE220E00E9449438F2D21 |
:109010006C2D40E320E00E94494309C0F092AE2E3F |
:10902000C092AF2ECE01019660E00E940C44192D33 |
:1090300011501F0D812F6C2D4EE220E00E944943FC |
:10904000812F8F5F6C2D402F20E00E94494327968F |
:109050000FB6F894DEBF0FBECDBFCF91DF911F9149 |
:109060000F91FF90EF90DF90CF90BF90AF909F90C7 |
:109070008F907F9008957F928F929F92AF92BF9230 |
:10908000CF92DF92EF92FF920F931F93DF93CF93D4 |
:10909000CDB7DEB727970FB6F894DEBF0FBECDBFB2 |
:1090A000882EC62ECA017901702E8E010F5F1F4FC8 |
:1090B000B8014AE050E00E94D494F80101900020E9 |
:1090C000E9F731979E2E901A092D10E0E016F1066F |
:1090D0002CF0DD245701A01AB10A1EC010E007C011 |
:1090E000822F6C2D4AE220E00E9449431F5F212F0E |
:1090F000280D812F90E08E159F0594F34CC07720AA |
:1091000021F08F2D6C2D40E303C08F2D6C2D40E29C |
:1091100020E00E944943D394FD2CF80C8D2D90E063 |
:109120008A159B0564F3FE01E00FF11F0081108298 |
:1091300081E0981619F48F2D81500EC082E09816A8 |
:1091400089F489818D3271F48F2D81506C2D4DE21F |
:1091500020E00E9449438F2D6C2D40E320E00E94C7 |
:10916000494309C0F092AE2EC092AF2ECE010196B7 |
:1091700060E00E940C44192D11501F0D812F6C2DA1 |
:109180004EE220E00E944943812F8F5F6C2D402FDB |
:1091900020E00E94494327960FB6F894DEBF0FBE29 |
:1091A000CDBFCF91DF911F910F91FF90EF90DF9096 |
:1091B000CF90BF90AF909F908F907F900895BF9277 |
:1091C000CF92DF92EF92FF920F931F93DF93CF9393 |
:1091D000CDB7DEB727970FB6F894DEBF0FBECDBF71 |
:1091E000C82ED62ECA017901B02E8E010F5F1F4FF7 |
:1091F000B8014AE050E00E94D494F80101900020A8 |
:10920000E9F73197E01B2E2F30E0E216F30624F049 |
:1092100000E0E21AF30A1EC000E007C0822F6D2DA5 |
:109220004AE220E00E9449430F5F202F2C0D802F3F |
:1092300090E08E159F0594F31DC0BB2021F0822F76 |
:109240006D2D40E303C0822F6D2D40E220E00E948F |
:1092500049430F5F202F2C0D802F90E08E159F0526 |
:1092600064F32093AE2ED092AF2ECE01019660E033 |
:109270000E940C4427960FB6F894DEBF0FBECDBFF8 |
:10928000CF91DF911F910F91FF90EF90DF90CF90E2 |
:10929000BF900895BF92CF92DF92EF92FF920F930B |
:1092A0001F93DF93CF93CDB7DEB727970FB6F89410 |
:1092B000DEBF0FBECDBFC82ED62ECA017901B02E9B |
:1092C0008E010F5F1F4FB8014AE050E00E94F594F5 |
:1092D000F80101900020E9F73197E01B2E2F30E0D4 |
:1092E000E216F30624F000E0E21AF30A1EC000E0E2 |
:1092F00007C0822F6D2D4AE220E00E9449430F5F94 |
:10930000202F2C0D802F90E08E159F0594F31DC00B |
:10931000BB2021F0822F6D2D40E303C0822F6D2DE5 |
:1093200040E220E00E9449430F5F202F2C0D802F48 |
:1093300090E08E159F0564F32093AE2ED092AF2E51 |
:10934000CE01019660E00E940C4427960FB6F89477 |
:10935000DEBF0FBECDBFCF91DF911F910F91FF9068 |
:10936000EF90DF90CF90BF9008957F928F929F9261 |
:10937000AF92BF92CF92DF92EF92FF920F931F9323 |
:10938000162F69017A01782E739457FF0BC0C09491 |
:10939000D094E094F0940894C11CD11CE11CF11C01 |
:1093A0004DE201C040E220E00E944943C701B601FE |
:1093B00020E836E948E950E00E947894872D612F33 |
:1093C000A90123E030E001E00E944A49872D8D5F2A |
:1093D000612F4EE220E00E944943C701B60120E818 |
:1093E00036E948E950E00E9478946B017C01C7019E |
:1093F000B60128EE33E040E050E00E947894490145 |
:10940000872D8C5F612FA90124E030E00E944A493A |
:10941000AA24BB24C501B40128E13CEF4FEF5FEF64 |
:109420000E940494C60ED71EE81EF91E872D885F81 |
:10943000612FA60123E030E00E944A49872D855F15 |
:10944000612F4EE120E00E9449431F910F91FF9050 |
:10945000EF90DF90CF90BF90AF909F908F907F90D4 |
:109460000895BF92CF92DF92EF92FF920F931F93D6 |
:10947000182FB62E6A01CA016CE370E00E942F9487 |
:109480007B01812F6B2DA70122E030E000E00E94DC |
:109490004A49812F8E5F6B2D4AE320E00E944943A9 |
:1094A0008CE390E09C01E29EC001E39E900DF29E51 |
:1094B000900D1124C81AD90A812F8D5F6B2DA6013A |
:1094C00022E030E001E00E944A491F910F91FF9095 |
:1094D000EF90DF90CF90BF9008952F923F924F92E0 |
:1094E0005F926F927F928F929F92AF92BF92CF9234 |
:1094F000DF92EF92FF920F931F93DF93CF93CDB73D |
:10950000DEB72F970FB6F894DEBF0FBECDBF8C87A6 |
:109510006D876A0159010B87449F9001459F300D6B |
:10952000549F300D11243E832D83AA9CC001AB9C17 |
:10953000900DBA9C900D11249C838B83A29E4001B8 |
:10954000A39E900CB29E900C1124BC01681979095D |
:10955000882777FD8095982F0E942F927B018C01A0 |
:10956000ED81FE81BF01882777FD8095982F0E94AD |
:109570002F9220E030E040E85EE30E941C939B01C4 |
:10958000AC01C801B7010E9429910E947F930E94FB |
:10959000FC912B019401220F331F3A8329836D859F |
:1095A0006A0D8C854B850E94EF416D856A198C850B |
:1095B0004B850E94EF418C858C0D6D854B850E94FB |
:1095C000EF418C858C196D854B850E94EF418D8113 |
:1095D0009E81880F991FEE27FF27E81BF90BFA875A |
:1095E000E9872B813C81220F331F38872F83490164 |
:1095F0008B819C81880E991E222433246624772433 |
:1096000038C057FC0DC00894A108B108E981FA815F |
:1096100029853A85E20FF31FFA83E9834E1A5F0A20 |
:109620000894611C711C8F819885280E391E480C86 |
:10963000591C0C85060DED84EA0C802F6E2D4B8590 |
:109640000E94EF41FD84FA18802F6F2D4B850E94F8 |
:10965000EF411C851619812F6E2D4B850E94EF411D |
:10966000812F6F2D4B850E94EF41EF81F8858E0E83 |
:109670009F1E29813A81221633061CF2B3018827E6 |
:1096800077FD8095982F0E942F9220E030E040E0F7 |
:109690005FE30E9429917B018C0165010894C10858 |
:1096A000D108EB81FC81BF01882777FD8095982F39 |
:1096B0000E942F92A80197010E941C93A801970174 |
:1096C0000E941C937B018C01CC9CC001CD9C900D11 |
:1096D000DC9C900D11242D813E81829FB001839FDF |
:1096E000700D929F700D1124882777FD8095982F1B |
:1096F0000E942F929B01AC01C801B7010E942991E1 |
:109700007B018C018B819C81ED81FE818E9FB0015C |
:109710008F9F700D9E9F700D1124882777FD809577 |
:10972000982F0E942F929B01AC01C801B7010E94A3 |
:1097300028910E947F930E94FC915B01460149841D |
:109740005A8450944194510853942D813E818985C7 |
:109750009A85281B390BE981FA812E1B3F0B3F8725 |
:109760002E8735C01A141B044CF00894611C711C20 |
:109770002F813885220E331EA20CB31C8E859F8547 |
:10978000A80EB91E0C85060DED84E80C802F6E2DF9 |
:109790004B850E94EF41FD84F818802F6F2D4B857B |
:1097A0000E94EF411C851619812F6E2D4B850E945A |
:1097B000EF41812F6F2D4B850E94EF410894810866 |
:1097C0009108EE85FF85E40DF51DFF87EE87C40146 |
:1097D00001961816190634F22F960FB6F894DEBFCC |
:1097E0000FBECDBFCF91DF911F910F91FF90EF90F2 |
:1097F000DF90CF90BF90AF909F908F907F906F90B1 |
:109800005F904F903F902F9008950F93FA01022F91 |
:109810004D5F5F4F9F010E946D4A0F9108952F92F7 |
:109820003F924F925F926F927F928F929F92AF92F0 |
:10983000BF92CF92DF92EF92FF920F931F93DF932D |
:10984000CF930F92CDB7DEB7382E262E4983422E06 |
:10985000B8010E2D80E090E00E942D922BED3FE0AC |
:1098600049E450E40E941C9320E030E044E353E4D8 |
:109870000E9494916B017C01C7010E9491914B0160 |
:109880005C01552466247724C301B2010E942D9205 |
:109890009B01AC01C501B4010E941C930E947F93FF |
:1098A0004B015C01B601C7010E949F936B017C01D3 |
:1098B0002981622F70E080E090E00E942D929B0150 |
:1098C000AC01C701B6010E941C930E947F930E94C5 |
:1098D0000192132D160FC501B4010E940192222D91 |
:1098E000261B832D622D412F0E942D420F90CF9178 |
:1098F000DF911F910F91FF90EF90DF90CF90BF907D |
:10990000AF909F908F907F906F905F904F903F901F |
:109910002F900895EF920F931F93942FF901E02E4B |
:109920004D5F292F8F010E940F4C1F910F91EF90D7 |
:1099300008952F923F924F925F926F927F928F92F3 |
:109940009F92AF92BF92CF92DF92EF92FF920F93CE |
:109950001F93382E262E442E40E050E0CA01B90154 |
:109960000E942D922BED3FE049E450E40E941C93AD |
:1099700020E030E044E353E40E9494916B017C01C9 |
:10998000C7010E9491914B015C0155246624772404 |
:10999000C301B2010E942D922B013C01C501B4010B |
:1099A000A30192010E941C930E947F934B015C01D2 |
:1099B000B601C7010E949F93A30192010E941C93CC |
:1099C0000E947F930E940192132D160FC501B401CE |
:1099D0000E940192222D261B832D622D412F0E9471 |
:1099E0002D421F910F91FF90EF90DF90CF90BF908D |
:1099F000AF909F908F907F906F905F904F903F902F |
:109A00002F900895ECE7F0E080E480838081807EF1 |
:109A1000816080838FEE80937A000895CF92DF92E9 |
:109A2000EF92FF920F931F93F8946091C02870916A |
:109A3000C12880E090E00E942D9220917B233091FC |
:109A40007C2340917D2350917E230E9429912FE811 |
:109A500032EC45E75FE30E941C936B017C010E949E |
:109A6000FC91DC01CB0160E470E00E9443948C0126 |
:109A70009093842380938323C701B60120E030E0D4 |
:109A800040E85CE30E941C9360937B2370937C23EB |
:109A900080937D2390937E230032110574F020E0A3 |
:109AA00030E040E85FE30E94299160937B2370934C |
:109AB0007C2380937D2390937E2360917B23709100 |
:109AC0007C2380917D2390917E2320E030E040EF45 |
:109AD00050E40E94949160937F237093802380933D |
:109AE0008123909382230E94019270938823609334 |
:109AF0008723109286231092852380E090E0A0E0D7 |
:109B0000B0E080937B2390937C23A0937D23B0933C |
:109B10007E2378941F910F91FF90EF90DF90CF906C |
:109B200008951F920F920FB60F920BB60F92112449 |
:109B30002F933F934F935F936F937F938F939F9355 |
:109B4000AF93BF93EF93FF9360917800709179008A |
:109B500080E090E00E942D929B01AC0160917B23FC |
:109B600070917C2380917D2390917E230E94299186 |
:109B700060937B2370937C2380937D2390937E233B |
:109B800080918523909186230196909386238093DC |
:109B900085238050904114F00E940E4DFF91EF916B |
:109BA000BF91AF919F918F917F916F915F914F91F5 |
:109BB0003F912F910F900BBE0F900FBE0F901F90F3 |
:109BC00018950F93CF93DF9387E662E041E023E09F |
:109BD00001E00E94D644809187239091882380548D |
:109BE000914038F489E662E043E123E000E00E941E |
:109BF0000A438091BF28813019F0C0E0D0E02BC02B |
:109C000088E660E047E127E001E00E94D644209129 |
:109C100087233091882381E0243A380718F0C3E184 |
:109C2000D0E002C0C0E0D0E0C90181549140833649 |
:109C3000910540F4C9018054914065E070E00E94B4 |
:109C40002F94EB018C2F43E14C1B855962E023E0FC |
:109C500000E00E940A438091BF28882341F588E6EE |
:109C600060E046E127E001E00E94D644209187238E |
:109C70003091882381E02A39380710F0C2E1D0E022 |
:109C8000C901815491408935910540F4C90180543E |
:109C9000914065E070E00E942F94EB018C2F42E12F |
:109CA0004C1B855962E023E000E00E940A432097A4 |
:109CB00039F08AE662E04C2F23E001E00E940A437B |
:109CC000DF91CF910F910895DF92EF92FF920F9362 |
:109CD0001F93CF93DF930E94BB2510928A2310928B |
:109CE0008B238091CF28813009F03DC00E948C40A9 |
:109CF0008AE090E00E94F055AC0180E060E020E056 |
:109D00000E949D448BE090E00E94F055AC0180E001 |
:109D100061E020E00E949D448CE090E00E94F055BC |
:109D2000AC0180E063E020E00E949D4484E190E08B |
:109D30000E94F055AC0180E064E020E00E949D4468 |
:109D40008FE090E00E94F055AC0180E065E020E0FB |
:109D50000E949D4488E99AE324EF31E0F9013197AC |
:109D6000F1F70197D9F70E94163C8091BA2890919B |
:109D7000BB28A091BC28B091BD280097A105B105D2 |
:109D800009F443C18091FD289091FE28A091FF28FD |
:109D9000B09100290097A105B10509F436C10E94D0 |
:109DA0008C4085E190E00E94F055AC0180E060E0DD |
:109DB00022E00E949D4488E190E00E94F055AC01B1 |
:109DC00080E061E022E00E949D4486E190E00E94F4 |
:109DD000F055AC0180E062E022E00E949D4487E102 |
:109DE00090E00E94F055AC0180E067E020E00E9426 |
:109DF0009D446091FD287091FE288091FF289091EC |
:109E0000002920E836E948E950E00E94569481E0B4 |
:109E100064E0A90122E030E000E00E944A4983E0CA |
:109E200064E049EA59E020E00E9464446091FD2822 |
:109E30007091FE288091FF289091002928EE33E050 |
:109E400040E050E00E945694CA01B90120E137E297 |
:109E500040E050E00E9456949B01AC0184E064E035 |
:109E6000A90124E030E001E00E944A496091FD2808 |
:109E70007091FE288091FF28909100292AE030E01F |
:109E800040E050E00E945694CA01B90124E630E057 |
:109E900040E050E00E9456949B01AC0188E064E0F1 |
:109EA000A90122E030E00E944A496091BA287091ED |
:109EB000BB288091BC289091BD2820E836E948E96C |
:109EC00050E00E9456948CE064E0A90122E030E06A |
:109ED00000E00E944A498EE064E047EA59E020E051 |
:109EE0000E9464446091BA287091BB288091BC287C |
:109EF0009091BD2828EE33E040E050E00E94569457 |
:109F0000CA01B90120E137E240E050E00E945694D6 |
:109F10009B01AC018FE064E0A90124E030E001E0A6 |
:109F20000E944A496091BA287091BB288091BC2850 |
:109F30009091BD282AE030E040E050E00E94569425 |
:109F4000CA01B90124E630E040E050E00E94569496 |
:109F50009B01AC0183E164E0A90122E030E00E94B2 |
:109F60004A4980E80E943B848823A9F160E070E0C0 |
:109F700080E090E020E030E040E050E00E945F3A76 |
:109F800080E060E240E828E000E00E940A4380E0D0 |
:109F900068E240E828E00E940A4389E190E00E94DC |
:109FA000F055AC0180E065E020E00E949D4480E037 |
:109FB00066E045E10E94B74480E067E045E10E9429 |
:109FC000B74480E197E224EF31E0F9013197F1F7EE |
:109FD0000197D9F71AC080E10E943B84882309F4D5 |
:109FE000C0CF80E064E045E10E94B74480E065E0D6 |
:109FF00045E10E94B74480E066E045E10E94B74435 |
:10A0000080E067E045E10E94B7448BE10E94698EE1 |
:10A010008BE10E94698E85E50E94698E8AEA0E9422 |
:10A02000698E80E00E94698E86E58093892310E026 |
:10A0300096E7D92E84E1E82EF12CCAE5D0E00E9403 |
:10A040008C408AE190E00E94F055AC0180E064E031 |
:10A0500020E00E949D448BE190E00E94F055AC010D |
:10A060008CE067E020E00E949D4402E33BC000D00A |
:10A070000F92EDB7FEB73196ADB7BEB71196DC9231 |
:10A08000118212820E94268FF092332FE092322F9B |
:10A090000F900F900F908091322F9091332F892B3A |
:10A0A000D1F7153148F4812F66E045EA59E020E008 |
:10A0B0000E9464441F5F06C080E066E045E10E94A4 |
:10A0C000B74410E080E20E943B84882351F080EF87 |
:10A0D0000E943B841092022910928A230E94EF531F |
:10A0E000F9CF015080911624882321F4002309F030 |
:10A0F000BECF02C00023A9F48FE190E00E94F0558A |
:10A10000AC0180E065E020E00E949D44D093332FB5 |
:10A11000C093322F8091322F9091332F892BD1F71A |
:10A120008ECF0E948B8E8091182490911924909349 |
:10A13000B12E8093B02E8091CF288130B1F40E944F |
:10A140008C4080E290E00E94F055AC0180E060E03D |
:10A1500020E00E949D4481E290E00E94F055AC0115 |
:10A1600080E061E020E00E949D448091A42F82362F |
:10A1700081F48091CF28813051F482E290E00E94F6 |
:10A18000F055AC0180E061E020E00E949D4482E057 |
:10A1900013C08091A42F833699F48091CF28813009 |
:10A1A00051F483E290E00E94F055AC0180E061E060 |
:10A1B00020E00E949D4481E080938A2380938B233A |
:10A1C0008091CF28813099F584E290E00E94F0558B |
:10A1D000AC0180E062E020E00E949D44E091B02E5E |
:10A1E000F091B12E80810E94134783EA99E060E0EC |
:10A1F0000E943C44E091B02EF091B12E81810E94EA |
:10A200001347E091B02EF091B12E44814F598091C7 |
:10A21000AE2E6091AF2E20E00E94494388E99AE378 |
:10A2200024EF31E0F9013197F1F70197D9F70E9456 |
:10A23000A3908FEF0E94FD65E091B22EF091B32EB6 |
:10A2400080818A3509F468C00E948C4080E060E01B |
:10A2500047E959E020E00E9464448AE50E941347E0 |
:10A2600085E290E00E94F055AC0180E061E020E0E2 |
:10A270000E949D4480E061E04BE859E020E00E94AC |
:10A280006444E091B22EF091B32E80810E94134776 |
:10A2900086E290E00E94F055AC0180E062E020E0B0 |
:10A2A0000E949D4487E290E00E94F055AC0180E05E |
:10A2B00063E020E00E949D4488E290E00E94F05517 |
:10A2C000AC0180E064E020E00E949D4485E899E0D4 |
:10A2D00060E00E943C4489E290E00E94F055AC01AD |
:10A2E00080E065E020E00E949D4410928A238CED7E |
:10A2F00095E09093B6238093B52380E490E090930B |
:10A30000FB228093FA2280E49CE924EF31E0F901FA |
:10A310003197F1F70197D9F71092892310921624FB |
:10A3200082E390E09093332F8093322F8091322FED |
:10A330009091332F892BD1F70E94EF53FDCF0F93CC |
:10A340001F93982F062F142F842F692F46E250E178 |
:10A3500020E00E946444812F602F44E250E120E01D |
:10A360000E9464441F910F9108958F929F92AF9223 |
:10A37000BF92DF92EF92FF920F931F93CF93DF93E1 |
:10A380000E948C4080E060E04CE45FE022E00E94AC |
:10A3900064448DE060E045E45FE022E00E946444B4 |
:10A3A0008BE090E00E94F055AC0180E061E022E09B |
:10A3B0000E949D4481E090E00E94F055AC0180E055 |
:10A3C00067E020E00E949D44DD2486E1882E912CE8 |
:10A3D000ED2CFF24E89C8001E99C100DF89C100DE9 |
:10A3E00011240D58114FC0E0D0E05701CE018E0D61 |
:10A3F0009F1D099744F4CE018D5F682F80E0A8016E |
:10A4000020E00E94644421960A5E1F4FC330D105AC |
:10A4100069F7DD2009F057C080E062E043E45FE0C7 |
:10A4200020E00E94644480E066E041E45FE00BC00D |
:10A4300080E062E04FE35FE020E00E94644480E05F |
:10A4400066E04DE35FE020E00E94644496E0A916D8 |
:10A45000B10474F080E062E04BE35FE020E00E9432 |
:10A46000644480E066E049E35FE020E00E946444E9 |
:10A4700080E40E943B84882329F086E0A816B1047A |
:10A480000CF4D39480E80E943B84882311F0D1100F |
:10A49000DA9480E20E943B84882331F480E10E94B8 |
:10A4A0003B84882309F494CF80EF0E943B84DF91A2 |
:10A4B000CF911F910F91FF90EF90DF90BF90AF90E1 |
:10A4C0009F908F90089596E0A916B1041CF6B0CF26 |
:10A4D0000E948C4080E062E047E75FE020E00E945D |
:10A4E000644480E063E047E65FE020E00E9464446B |
:10A4F0008CE067E042E65FE020E00E94644480E296 |
:10A500000E943B848823D9F380EF0E943B84089506 |
:10A510000E948C4080E060E044EE5FE022E00E9418 |
:10A5200064448FE290E00E94F055AC0180E061E06D |
:10A5300020E00E949D4480E390E00E94F055AC0131 |
:10A5400080E062E020E00E949D4480E063E04EEC09 |
:10A550005FE020E00E94644480E064E048EB5FE05C |
:10A5600020E00E94644480E065E042EA5FE020E091 |
:10A570000E94644480E066E04CE85FE020E00E94D6 |
:10A58000644481E390E00E94F055AC0180E067E014 |
:10A5900020E00E949D4480E20E943B84882321F0B9 |
:10A5A00080EF0E943B84089580E10E943B848823D1 |
:10A5B00091F32CE088E190E00FB6F894A895809391 |
:10A5C00060000FBE20936000FFCFBF92CF92DF925A |
:10A5D000EF92FF920F931F93D82EE62E142FB22ED8 |
:10A5E000C02E842F642F41E00E949F51012FF12E35 |
:10A5F00080E40E943B84182F80E461E00E949484F0 |
:10A60000182B51F00E1510F40F5F06C081E0C8162C |
:10A6100011F40EEF24C00E2D80E80E943B84182F09 |
:10A6200080E861E00E949484182B51F0D01610F459 |
:10A63000015006C081E0B81611F40DEF10C00D2DC9 |
:10A640000F1529F08F2D602F41E00E949F5180E36C |
:10A650000E943B84F02E882359F285FD0FEF802F56 |
:10A660001F910F91FF90EF90DF90CF90BF900895D2 |
:10A67000CF92DF92EF92FF920F931F93C82ED62EA8 |
:10A68000E42E122F822F622F0E949F51012FF12E54 |
:10A6900080E40E943B84182F80E461E00E9494844F |
:10A6A000182B29F00D1510F00D2D01C00F5F80E85B |
:10A6B0000E943B84182F80E861E00E949484182B4C |
:10A6C00029F0C01610F00C2D01C001500F1529F013 |
:10A6D0008F2D602F4E2D0E949F5180E30E943B845E |
:10A6E000F02E8823A9F285FD0FEF802F1F910F9187 |
:10A6F000FF90EF90DF90CF900895BF92CF92DF92BE |
:10A70000EF92FF920F931F93D82EE62E142FB22EA6 |
:10A71000C02E842F642F41E00E949F51012FF12E03 |
:10A7200080E40E943B84182F80E461E00E949484BE |
:10A73000182B51F00E1510F40F5F06C081E0C816FB |
:10A7400011F40EEF43C00E2D80E80E943B84182FB9 |
:10A7500080E861E00E949484182B51F0D01610F428 |
:10A76000015006C081E0B81611F40DEF2FC00D2D79 |
:10A7700080E20E945684882329F080EF0E943B8467 |
:10A780000AEF24C080E10E945684882329F080EFDC |
:10A790000E943B840BEF1AC080E20E94458488230C |
:10A7A00029F080EF0E943B840CEF10C00F1529F0B8 |
:10A7B0008F2D602F41E00E949F510E94E14D80E16A |
:10A7C0000E944584F02E882309F4AACF802F1F9180 |
:10A7D0000F91FF90EF90DF90CF90BF9008952F9250 |
:10A7E0003F924F925F926F927F928F929F92AF9221 |
:10A7F000BF92CF92DF92EF92FF920F931F93DF935E |
:10A80000CF9300D000D00F92CDB7DEB720918A232E |
:10A81000298380EF0E943B84772466243324AA2472 |
:10A82000A39462E1262E01C0A02E809102298130DE |
:10A8300011F480938A2380910229882319F43981A5 |
:10A8400030938A2380918A23882319F456E0652E59 |
:10A8500009C0813019F447E0642E04C0823011F43D |
:10A8600034E0632E0E948C4080E060E047E150E1DC |
:10A8700022E00E9464448CE060E041E150E122E08B |
:10A880000E94644481E090E00E94F055AC0180E0B9 |
:10A8900067E020E00E949D448BE290E00E94F0552A |
:10A8A000AC018CE067E020E00E949D44462C5524DA |
:10A8B000C20101979B838A83772039F081E061E0B0 |
:10A8C0004FE050E120E00E946444E72CFF2428E49C |
:10A8D00030E0E29EF001E39EF00DF29EF00D1124B7 |
:10A8E000FD83EC8300E010E0BB24B39467014801D2 |
:10A8F0008E0C9F1C8414950474F580918A238130FA |
:10A9000061F44091FC28429DA00111248C819D811D |
:10A91000480F591F4555564F19C0823061F4409178 |
:10A92000FC28429DA0011124EC81FD814E0F5F1F88 |
:10A930004D55544F0BC04091FC28429DA00111245D |
:10A940002C813D81420F531F4D53534F83E06B2D9C |
:10A9500020E00E946444053061F48A819B8188165E |
:10A9600099063CF481E066E04DE050E120E00E9471 |
:10A9700064440E94E14D0F5F1F4FB394EC81FD8151 |
:10A98000E85BFF4FFD83EC83F7E0BF1609F0AFCF24 |
:10A99000332071F47720C9F46F1629F481E065E063 |
:10A9A0004A2D20E016C081E0662D4A2D20E00BC024 |
:10A9B00026E030E0C20ED31EC414D50434F082E089 |
:10A9C00066E04A2D21E000E005C082E065E04A2D06 |
:10A9D00021E001E00E947D53082F8E3F31F47394F3 |
:10A9E0003324339425E0A22E67CF8D3F29F47A9447 |
:10A9F000332492E0A92E60CF8C3F09F048C00E941A |
:10AA00008C408DE290E00E94F055AC0180E062E065 |
:10AA100020E00E949D448EE290E00E94F055AC013F |
:10AA20008CE067E020E00E949D4480E10E943B842E |
:10AA30008111299880E20E9445848823B1F380EF38 |
:10AA40000E943B840E948C4080E060E040E050E146 |
:10AA500022E00E9464448CE060E04AEF5FE022E084 |
:10AA60000E94644481E090E00E94F055AC0180E0D7 |
:10AA700067E020E00E949D448BE290E00E94F05548 |
:10AA8000AC018CE067E020E00E949D4415CF8B3F35 |
:10AA900019F40E94EA868CC08A3F19F40E9402567B |
:10AAA00087C080918A23813039F5E02EFF24E70C9E |
:10AAB000F11C31E0E316F10419F40E944D6016C058 |
:10AAC00082E0E816F10421F483E00E944D6014C096 |
:10AAD00093E0E916F10419F40E946B370DC0E4E02D |
:10AAE000EE16F10419F40E94D17006C0F7E0EF16DB |
:10AAF000F10411F40E94658780918A23823071F4F9 |
:10AB0000802F90E0870D911D8130910519F40E94EE |
:10AB10006B3704C0029711F40E94D17080918A2390 |
:10AB2000882309F081CEE02EFF24E70CF11C21E000 |
:10AB3000E216F10421F482E00E94605706C032E080 |
:10AB4000E316F10411F40E940572809167248823B2 |
:10AB500071F483E0E816F10419F40E94583220C021 |
:10AB600094E0E916F104A9F40E94AE3119C0809175 |
:10AB70006724813071F4E3E0EE16F10419F40E94C9 |
:10AB8000AF320EC0F4E0EF16F10419F40E94033264 |
:10AB900007C025E0E216F10419F40E94748244CE45 |
:10ABA00036E0E316F10409F03FCE0E94B5513CCEE9 |
:10ABB0000F900F900F900F900F90CF91DF911F91FA |
:10ABC0000F91FF90EF90DF90CF90BF90AF909F904C |
:10ABD0008F907F906F905F904F903F902F9008954F |
:10ABE0002091FC28FC01EE0FFF1FEE0FFF1FE80F66 |
:10ABF000F91FE20FF11DEE0FFF1FE750F34E8081AA |
:10AC0000918108950E948C40E091FC28F0E0EE0FC5 |
:10AC1000FF1FEB53F14E408151818CE067E020E053 |
:10AC20000E949D44E091FC28F0E0EE0FFF1FE750EA |
:10AC3000F34E4081518180E062E020E00E949D441B |
:10AC400080E20E943B84882369F380EF0E943B846A |
:10AC50000895882351F4E4E4FFE26083118238967A |
:10AC60008FE2E43AF807C9F710C0E82FF0E0319717 |
:10AC700093E0EE0FFF1F9A95E1F7DF01AD5BB04D5A |
:10AC800011966C93EB5BF04D10828091C423882366 |
:10AC900019F01092C42308951092C2231092C02379 |
:10ACA0008091C7238E7F8093C72385EA8093BC0061 |
:10ACB0000895EF92FF920F931F93CF93DF930E941B |
:10ACC0008C401092C6231092682480E091E160E0ED |
:10ACD0000E943C448091C72382608093C7231092D6 |
:10ACE000C32380E060E00E94295681E090E00E944A |
:10ACF0001084EC018091C72380FD05C0CE010E9425 |
:10AD00001A848823B9F381E090E00E9410847C01CA |
:10AD1000C3E4DFE210E0812F60E00E9429568091B9 |
:10AD2000C72380FD05C0C7010E941A848823B9F398 |
:10AD30008B8187FF7AC080E061E041EF50E120E045 |
:10AD40000E94644482E161E0412F20E00E94B64607 |
:10AD500080E062E048EE50E120E00E94644488E038 |
:10AD600062E0488120E00E94B6468BE062E040EE5F |
:10AD700050E120E00E94644482E162E0498120E0E9 |
:10AD80000E94B64680E063E047ED50E120E00E947B |
:10AD9000644488E063E04A8120E00E94B6468BE08C |
:10ADA00063E04FEC50E120E00E94644482E163E004 |
:10ADB0004B8120E00E94B64680E064E046EC50E122 |
:10ADC00020E00E94644488E064E04C8120E00E941E |
:10ADD000B6468BE064E04EEB50E120E00E94644414 |
:10ADE00082E164E04D8120E00E94B64680E065E0AB |
:10ADF00045EB50E120E00E94644488E065E04E812C |
:10AE000020E00E94B6468BE065E04DEA50E120E08C |
:10AE10000E9464444F81552747FD509582E165E0CB |
:10AE200023E030E001E00E944A491F5F28961C3071 |
:10AE300009F071CFDF91CF911F910F91FF90EF90AB |
:10AE40000895CF93DF93E82FA7E5B0E380E1ED010C |
:10AE500019928A95E9F7EE2339F4CD0170E040E1CB |
:10AE600050E00E94CD9404C0F0E0EA5AFF4C6083A9 |
:10AE70008DB79EB707970FB6F8949EBF0FBE8DBFD4 |
:10AE8000EDB7FEB7319684E7ADB7BEB711968C9398 |
:10AE900081E08183828387E590E39483838380E1EB |
:10AEA00090E0968385830E94268FCDB7DEB72796E4 |
:10AEB0000FB6F894DEBF0FBECDBFDF91CF910895DE |
:10AEC000BF92CF92DF92EF92FF920F931F93DF9387 |
:10AED000CF93CDB7DEB727970FB6F894DEBF0FBE7E |
:10AEE000CDBF182F0E948C4081E08093B52E8093B7 |
:10AEF000B72E1092B62E1130B9F40E9459568BE03D |
:10AF000067E042EA50E120E00E94644480E20E944F |
:10AF10003B84882321F080EF0E943B843FC380E183 |
:10AF20000E943B84882359F30E948C408CE890E176 |
:10AF300062E00E943C4482E062E041E850E120E0AF |
:10AF40000E94644482E063E046E750E120E00E9412 |
:10AF5000644488E068E240E026E001E00E940A43A1 |
:10AF600083E090E00E94F055AC0180E067E020E0D3 |
:10AF70000E949D4482E167E042E750E120E00E94A8 |
:10AF8000644480E062E040E750E120E00E946444D5 |
:10AF9000113029F487E992E20E94B58C0CC012307E |
:10AFA00051F480918A23813031F480918B23813058 |
:10AFB00011F40E94A390EAE0CE2ED12C70E7B72EB8 |
:10AFC0007E010894E11CF11C8091B52E882361F567 |
:10AFD00080E40E943B84882331F480E463E00E9493 |
:10AFE0009484882309F14091B62E4E3FE8F44F5FD8 |
:10AFF0004093B62E89E063E050E023E030E000E0CB |
:10B000000E944A49123081F48091B62E8B9DC00176 |
:10B0100011246FEF70E00E944394462F88E068E2AD |
:10B0200026E001E00E940A438091B52E882309F0B2 |
:10B030003FC080E80E943B84882331F480E863E0CD |
:10B040000E9494848823A1F18091B62E882381F1F7 |
:10B05000123079F48B9DC00111246FEF70E00E94D3 |
:10B060004394862F885F68E240E026E000E00E947B |
:10B070000A434091B62E41504093B62E89E063E0DA |
:10B0800050E023E030E000E00E944A49123081F4B1 |
:10B090008091B62E8B9DC00111246FEF70E00E944D |
:10B0A0004394462F88E068E226E001E00E940A43CC |
:10B0B0008091B52E8130D1F480E40E943B848823B6 |
:10B0C00031F480E461E00E949484882379F0409117 |
:10B0D000B72E403158F44F5F4093B72E89E062E0BD |
:10B0E00050E023E030E000E00E944A498091B52E14 |
:10B0F000813039F580E80E943B84882331F480E870 |
:10B1000061E00E9494848823E1F04091B72E4423AB |
:10B11000C1F041504093B72E442341F089E062E0F2 |
:10B1200050E023E030E000E00E944A498091B72ED1 |
:10B13000882339F489E062E04CE650E120E00E9487 |
:10B14000644480E10E943B84882309F478C0113074 |
:10B1500009F050C08091B62E882309F44BC010929C |
:10B16000B72E1092B62E88E068E240E026E001E0BB |
:10B170000E940A4380E065E045E10E94B7444091A7 |
:10B18000B72E442341F089E062E050E023E030E054 |
:10B1900000E00E944A498091B72E882339F489E063 |
:10B1A00062E048E650E120E00E9464444091B62EFF |
:10B1B00089E063E050E023E030E000E00E944A498B |
:10B1C0008091B72E6091B62E0E94295681E090E0C2 |
:10B1D0000E9410849093332F8093322F8091C72345 |
:10B1E00080FD08C08091322F9091332F0E941A84E5 |
:10B1F0008823A1F38091B52E882389F462E046E686 |
:10B2000050E120E00E94644480E063E044E650E1C5 |
:10B2100020E00E94644481E08093B52E10C080E05D |
:10B2200062E042E650E120E00E94644480E063E096 |
:10B2300040E650E120E00E9464441092B52E1130A7 |
:10B2400009F097C18091B72E6091B62E0E942956C1 |
:10B2500081E090E00E9410849093332F8093322FEE |
:10B2600080E063E043E550E120E00E946444E09127 |
:10B27000B72EF0E063E0EE0FFF1F6A95E1F7E55CA3 |
:10B28000F04D41818DE063E050E023E030E000E0EC |
:10B290000E944A4980E064E046E450E120E00E94D8 |
:10B2A0006444E091B72EF0E053E0EE0FFF1F5A9593 |
:10B2B000E1F7E55CF04D8DE064E0458120E00E941F |
:10B2C000B646E091B72EF0E043E0EE0FFF1F4A953F |
:10B2D000E1F7E55CF04D45818DE064E050E023E06E |
:10B2E00030E00E944A4980E065E049E350E120E017 |
:10B2F0000E946444E091B72EF0E033E0EE0FFF1FB0 |
:10B300003A95E1F7E55CF04D4781552747FD5095AB |
:10B310008DE065E023E030E00E944A4980E066E08D |
:10B3200040E350E120E00E946444E091B72EF0E059 |
:10B3300023E0EE0FFF1F2A95E1F7E55CF04D88E072 |
:10B3400066E0408120E00E94B6468BE066E048E27D |
:10B3500050E120E00E946444E091B72EF0E093E0D9 |
:10B36000EE0FFF1F9A95E1F7E55CF04D82E166E094 |
:10B37000438120E00E94B6468091B72E282F30E00E |
:10B3800021503040F90183E0EE0FFF1F8A95E1F76D |
:10B39000ED5BF04D8181882309F4DEC0C114D10436 |
:10B3A00009F0D7C0C901B7014AE050E00E94D49427 |
:10B3B000C7010E94B58C8BEE92E20E94B58CE091A1 |
:10B3C000B72EF0E003E0EE0FFF1F0A95E1F7E55C12 |
:10B3D000F04D808190E0B7014AE050E00E94D494A3 |
:10B3E000C7010E94B58C8BEE92E20E94B58CE09171 |
:10B3F000B72EF0E0B3E0EE0FFF1FBA95E1F7E55C82 |
:10B40000F04D818190E0B7014AE050E00E94D49471 |
:10B41000C7010E94B58C8BEE92E20E94B58CE09140 |
:10B42000B72EF0E0A3E0EE0FFF1FAA95E1F7E35C73 |
:10B43000F04D808190E0B7014AE050E00E94D49442 |
:10B44000C7010E94B58C8BEE92E20E94B58CE09110 |
:10B45000B72EF0E073E0EE0FFF1F7A95E1F7E55CA1 |
:10B46000F04D838190E0B7014AE050E00E94D4940F |
:10B47000C7010E94B58C8BEE92E20E94B58CE091E0 |
:10B48000B72EF0E063E0EE0FFF1F6A95E1F7E15C95 |
:10B49000F04D808190E0B7014AE050E00E94D494E2 |
:10B4A000C7010E94B58C8BEE92E20E94B58CE091B0 |
:10B4B000B72EF0E053E0EE0FFF1F5A95E1F7E55C81 |
:10B4C000F04D858190E0B7014AE050E00E94D494AD |
:10B4D000C7010E94B58C8BEE92E20E94B58CE09180 |
:10B4E000B72EF0E043E0EE0FFF1F4A95E1F7E55C71 |
:10B4F000F04D868190E0B7014AE050E00E94D4947C |
:10B50000C7010E94B58C8BEE92E20E94B58CE0914F |
:10B51000B72EF0E033E0EE0FFF1F3A95E1F7E55C60 |
:10B52000F04D8781992787FD9095B7014AE050E05B |
:10B530000E94D494C7010E94B58C8DEE92E20E94C5 |
:10B54000B58C8FEE92E20E94B58C28ECC22ED12CE5 |
:10B5500003C00894C108D1088091C72380FD0FC0A3 |
:10B560008091322F9091332F0E941A848823A1F367 |
:10B5700006C08091B72E6091B62E0E94215780E2BE |
:10B580000E943B84882309F41FCD80EF0E943B84F6 |
:10B59000123021F480E060E00E94215727960FB618 |
:10B5A000F894DEBF0FBECDBFCF91DF911F910F91F9 |
:10B5B000FF90EF90DF90CF90BF9008959C01489747 |
:10B5C0008C9710F480E00895C901845490408D97C1 |
:10B5D00010F481E00895C901815790408D9710F4CF |
:10B5E00082E00895C9018E5990408D9710F483E050 |
:10B5F0000895C9018B5C90408D9710F484E0089504 |
:10B60000C901885F90408D9710F485E00895255218 |
:10B6100031402D32310510F087E0089586E008951D |
:10B62000EF92FF920F931F93CF93DF93282F062F54 |
:10B63000CA0166E170E00E942F946D5E70E0EB013C |
:10B64000C658DE4E83E8E82E81E1F82EE60EF71E9E |
:10B65000122F1F5FFE014491822F602F20E00E9475 |
:10B6600049432196212FCE15DF0591F7DF91CF9128 |
:10B670001F910F91FF90EF900895CF92DF92EF927C |
:10B68000FF920F938FE790E00E94F055AC0180E0AD |
:10B6900062E020E00E949D4480E890E00E94F05526 |
:10B6A000AC0180E063E020E00E949D4486E190E0F0 |
:10B6B0000E94F055AC0180E065E020E00E949D44CE |
:10B6C000C090BC2ED090BD2EE090BE2EF090BF2E2C |
:10B6D000C701B60120E836E948E950E00E945694D7 |
:10B6E00081E066E0A90122E030E000E00E944A49E2 |
:10B6F00083E066E04AE352E120E00E946444C7012F |
:10B70000B60128EE33E040E050E00E945694CA01B2 |
:10B71000B90120E137E240E050E00E9456949B01DD |
:10B72000AC0184E066E0A90124E030E001E00E9481 |
:10B730004A49C701B6012AE030E040E050E00E94EB |
:10B740005694CA01B90124E630E040E050E00E947E |
:10B7500056949B01AC0188E066E0A90122E030E04C |
:10B760000E944A49C090B82ED090B92EE090BA2ECF |
:10B77000F090BB2EC701B60120E836E948E950E059 |
:10B780000E9456948CE066E0A90122E030E000E0DF |
:10B790000E944A498EE066E048E352E120E00E94C0 |
:10B7A0006444C701B60128EE33E040E050E00E9457 |
:10B7B0005694CA01B90120E137E240E050E00E940E |
:10B7C00056949B01AC018FE066E0A90124E030E0D3 |
:10B7D00001E00E944A49C701B6012AE030E040E09A |
:10B7E00050E00E945694CA01B90124E630E040E0DE |
:10B7F00050E00E9456949B01AC0183E166E0A901F0 |
:10B8000022E030E00E944A490F91FF90EF90DF90D4 |
:10B81000CF900895CF92DF92EF92FF920F931F93F4 |
:10B82000CF93DF930E948C4086E190E00E94F05518 |
:10B83000AC0180E060E022E00E949D448BE190E05A |
:10B840000E94F055AC018CE067E020E00E949D442E |
:10B85000C8EBDEE210E0CC80DD80EE80FF801F5F71 |
:10B86000C701B60120E836E948E950E00E94569445 |
:10B8700081E0612FA90122E030E000E00E944A4906 |
:10B8800083E0612F4EE352E120E00E946444C7014F |
:10B89000B60128EE33E040E050E00E945694CA0121 |
:10B8A000B90120E137E240E050E00E9456949B014C |
:10B8B000AC0184E0612FA90124E030E001E00E94A6 |
:10B8C0004A49C701B6012AE030E040E050E00E945A |
:10B8D0005694CA01B90124E630E040E050E00E94ED |
:10B8E00056949B01AC0188E0612FA90122E030E071 |
:10B8F0000E944A49C880D980EA80FB80C701B6010E |
:10B9000020E836E948E950E00E9456948CE0612F27 |
:10B91000A90122E030E000E00E944A498EE0612F58 |
:10B920004CE352E120E00E946444C701B60128EED6 |
:10B9300033E040E050E00E945694CA01B90120E192 |
:10B9400037E240E050E00E9456949B01AC018FE04A |
:10B95000612FA90124E030E001E00E944A49C701BB |
:10B96000B6012AE030E040E050E00E945694CA015F |
:10B97000B90124E630E040E050E00E9456949B017B |
:10B98000AC0183E1612FA90122E030E00E944A4925 |
:10B990002D96163009F05FCF05C01093332F00931A |
:10B9A000322F02C008EC10E080E20E943B84882322 |
:10B9B000A1F380EF0E943B840E948C40DF91CF91E5 |
:10B9C0001F910F91FF90EF90DF90CF9008950F930C |
:10B9D000CF93DF930E948C408BE190E00E94F05562 |
:10B9E000AC018CE067E020E00E949D4480E060E0D4 |
:10B9F0004EE051E120E00E94644460918D237091FB |
:10BA00008E23882777FD8095982F0E942F9220E023 |
:10BA100030E040EA51E40E9494910E94FC919B0125 |
:10BA2000AC018DE060E0A90124E030E000E00E947C |
:10BA3000DF4881E160E04DE620E00E94494380E07C |
:10BA400061E04CE151E120E00E94644420918F23A9 |
:10BA50003091902340E050E0CA01B901E3E0660F65 |
:10BA6000771F881F991FEA95D1F7620F731F841FF4 |
:10BA7000951F2AEF30E040E050E00E9456948EE09F |
:10BA800061E0A90123E030E00E944A4981E161E0E0 |
:10BA900044E452E120E00E94644480E062E04AE233 |
:10BAA00051E120E00E94644480919123909192237F |
:10BAB0006AE070E00E944394AB018EE062E023E014 |
:10BAC00030E00E944A4981E162E04DE620E00E94B8 |
:10BAD000494380E063E046E451E120E00E94644491 |
:10BAE00040919323509194238DE063E00E94314A6A |
:10BAF00080E064E048E351E120E00E94644440912A |
:10BB0000F1228DE064E050E023E030E00E943B4809 |
:10BB100081E164E046E520E00E94494380E065E081 |
:10BB200044E551E120E00E94644440919523509106 |
:10BB300096238DE065E023E030E00E943B4881E100 |
:10BB400065E041E420E00E94494380E066E042E68F |
:10BB500051E120E00E946444409197235091982342 |
:10BB60008DE066E024E030E00E944A4981E166E031 |
:10BB700040E452E120E00E946444C8ECD0E004C0FC |
:10BB8000D093332FC093322F80E20E943B848823CE |
:10BB9000B9F380919B238B7F80939B2380EF0E943E |
:10BBA0003B840E948C40DF91CF910F910895AF921A |
:10BBB000BF92CF92DF92EF92FF920F931F93DF938A |
:10BBC000CF930F92CDB7DEB7F8ECAF2EB12CB09279 |
:10BBD000332FA092322F109289231092162488239B |
:10BBE00009F4FEC01092B6231092B5238FEF9FEF99 |
:10BBF0009093FB228093FA220E948C406091B82E91 |
:10BC00007091B92E8091BA2E9091BB2E2091BC2EAE |
:10BC10003091BD2E4091BE2E5091BF2E0E945F3AB2 |
:10BC20008EE790E00E94F055AC0180E060E022E0F9 |
:10BC30000E949D448FE790E00E94F055AC0180E0A7 |
:10BC400062E020E00E949D4480E890E00E94F05570 |
:10BC5000AC0180E063E020E00E949D4486E190E03A |
:10BC60000E94F055AC0180E065E020E00E949D4418 |
:10BC70008AEF90E09093B6238093B52380E490E020 |
:10BC80009093FB228093FA2281E080939C23C090C2 |
:10BC9000BC2ED090BD2EE090BE2EF090BF2EC701DE |
:10BCA000B60120E836E948E950E00E94569481E068 |
:10BCB00066E0A90122E030E000E00E944A4983E00A |
:10BCC00066E046E352E120E00E946444C701B60109 |
:10BCD00028EE33E040E050E00E945694CA01B901DA |
:10BCE00020E137E240E050E00E9456949B01AC0115 |
:10BCF00084E066E0A90124E030E001E00E944A49C6 |
:10BD0000C701B6012AE030E040E050E00E945694BE |
:10BD1000CA01B90124E630E040E050E00E945694A8 |
:10BD20009B01AC0188E066E0A90122E030E00E94BE |
:10BD30004A49C090B82ED090B92EE090BA2EF0901B |
:10BD4000BB2EC701B60120E836E948E950E00E9461 |
:10BD500056948CE066E0A90122E030E000E00E9409 |
:10BD60004A498EE066E044E352E120E00E946444E8 |
:10BD7000C701B60128EE33E040E050E00E9456943F |
:10BD8000CA01B90120E137E240E050E00E94569438 |
:10BD90009B01AC018FE066E0A90124E030E001E006 |
:10BDA0000E944A49C701B6012AE030E040E050E075 |
:10BDB0000E945694CA01B90124E630E040E050E008 |
:10BDC0000E9456949B01AC0183E166E0A90122E048 |
:10BDD00030E00E944A49B092332FA092322F1AC00D |
:10BDE0008EE790E00E94F055AC0180E060E022E038 |
:10BDF0000E949D440E943D5B8091F428813051F463 |
:10BE0000B092B623A092B52380E890E09093FB22F5 |
:10BE10008093FA220E94E68E8FE480938923198210 |
:10BE20008DB79EB707970FB6F8949EBF0FBE8DBF14 |
:10BE3000EDB7FEB7319684E6ADB7BEB711968C93D9 |
:10BE40001182DD24D394D2827E010894E11CF11C7E |
:10BE5000F482E38201E010E0168305830E94268FBE |
:10BE60008AE08983EDB7FEB731968FE6ADB7BEB7EE |
:10BE700011968C9382E08183D282F482E3821683CE |
:10BE800005830E94268F8DB79EB707960FB6F8944C |
:10BE90009EBF0FBE8DBF0F90CF91DF911F910F916D |
:10BEA000FF90EF90DF90CF90BF90AF900895AF924A |
:10BEB000BF92CF92DF92EF92FF920F931F93DF9387 |
:10BEC000CF930F92CDB7DEB7D82EE62EF42E922F59 |
:10BED0005801822F8695162F181B8D2D612F01E09A |
:10BEE00099830E94D644CD2CC3941F5F4F2D42509E |
:10BEF000998192508C2D612F292F00E00E940A43D6 |
:10BF0000FD0C8D2D6E2D4F2D2E2D01E00E942D420A |
:10BF10001A141B040CF050C0C50165E070E00E94CB |
:10BF200043946130710561F062307105B9F02E2DD6 |
:10BF300021508D2D8C5F4D2D4A5F672B29F553C005 |
:10BF40002E2D21508D2D8C5F622F96E0D90E4D2D18 |
:10BF500001E00E942D42EDEFEE0E57C02E2D215034 |
:10BF60004D2D4A5F8D2D8C5F622F01E00E942D4286 |
:10BF7000FDEFEF0E8D2D8D5F6E2D44E021E00E94D0 |
:10BF80000A438EEFE80E5BC0622F01E00E942D4253 |
:10BF90009DEFE90E8D2D8D5F6E2D44E021E00E9416 |
:10BFA0000A43EEEFEE0E8D2D8E5F6E2D46E021E002 |
:10BFB0000E940A43EA945FC0A114B10409F461C06D |
:10BFC000C5016BEF7FEF0E9443946130710581F0F2 |
:10BFD00062307105F9F08D2D8C5F4D2D4A5F2E2D4D |
:10BFE0002F5F672B89F5622F01E00E942D4249C027 |
:10BFF0002E2D2F5F8D2D8C5F622FF6E0DF0E4D2DE5 |
:10C0000001E00E942D4282E0E80E8D2D83506E2DBE |
:10C0100044E034C02E2D2F5F4D2D4A5F8D2D8C5F57 |
:10C02000622F01E00E942D4292E0E90E8D2D8D5F7E |
:10C030006E2D44E021E00E940A43E2E0EE0E8D2DD9 |
:10C040008E5F6E2D46E01AC0622F01E00E942D42E5 |
:10C05000F2E0EF0E8D2D8D5F6E2D44E021E00E9409 |
:10C060000A4382E0E80E8D2D8E5F6E2D46E021E0C2 |
:10C070000E940A43E3948C2D6E2D48E021E00E943B |
:10C080000A430F90CF91DF911F910F91FF90EF9096 |
:10C09000DF90CF90BF90AF9008954F925F926F92D4 |
:10C0A0007F928F929F92AF92BF92CF92DF92EF9248 |
:10C0B000FF920F931F93DF93CF93CDB7DEB72E97E9 |
:10C0C0000FB6F894DEBF0FBECDBF682E10928E2340 |
:10C0D00010928D231092902310928F23109292230E |
:10C0E000109291238FEF8093F1221092942310925B |
:10C0F00093230E948C4080918A238230A1F480E0B7 |
:10C1000063E045E252E120E00E94644484E690E06E |
:10C110009093332F8093322F8091322F9091332F31 |
:10C12000892BD1F7BCC40E94E68E8FE480938923CB |
:10C1300019828DB79EB707970FB6F8949EBF0FBEB2 |
:10C140008DBFEDB7FEB7319684E6ADB7BEB7119699 |
:10C150008C931182DD24D394D2828E010F5F1F4F06 |
:10C160001483038381E0E82EF12CF682E5820E949D |
:10C17000268F8AE08983EDB7FEB731968FE6ADB79B |
:10C18000BEB711968C9382E08183D282148303839D |
:10C19000F682E5820E94268F88EC90E09093332F00 |
:10C1A0008093322F8CE291E09093352F8093342F3F |
:10C1B000FF249924CC24DD2477248824EDB7FEB70E |
:10C1C00037960FB6F894FEBF0FBEEDBF502E412E2E |
:10C1D00080911624882309F44FC488EC90E0909352 |
:10C1E000332F8093322F0E948B8E80911824909150 |
:10C1F00019249093142F8093132F80919C238130C6 |
:10C2000011F40E948C4010929C232091132F3091A6 |
:10C21000142FD9011596ED90FD900D911C91189752 |
:10C2200011964D915D916D917C9114978091BC2EEA |
:10C230009091BD2EA091BE2EB091BF2EE816F906AA |
:10C240000A071B0709F455C08091B82E9091B92EAA |
:10C25000A091BA2EB091BB2E481759076A077B07E9 |
:10C2600009F447C0E6E0FFE2DF011D978DE00D9085 |
:10C2700001928150E1F7E9EFFEE2DF011D978DE0C9 |
:10C280000D9001928150E1F7ECEEFEE2DF011D9787 |
:10C290008DE00D9001928150E1F7EFEDFEE2DF01BC |
:10C2A0001D978DE00D9001928150E1F7E2EDFEE2E5 |
:10C2B000DF011D978DE00D9001928150E1F7E5ECD3 |
:10C2C000FEE2DF011D978DE00D9001928150E1F7B4 |
:10C2D000EE82FF82088719874A835B836C837D83A4 |
:10C2E000A8EBBEE2FE0132968DE001900D928150E6 |
:10C2F000E1F7B1E06B1609F06BC22D5B3F4FF9011E |
:10C30000808100919B2380FF04C0046000939B23E5 |
:10C3100014C010E00470107080E10E943B8490E033 |
:10C32000802B912B892B11F00E94E75C80E40E9406 |
:10C330003B84882311F00E940A5C86E190E063E26E |
:10C3400070E040E150E021E00E94054CE091132FA5 |
:10C35000F091142F22AD33AD40E050E0CA01B90195 |
:10C36000B3E0660F771F881F991FBA95D1F7620F48 |
:10C37000731F841F951F2AEF30E040E050E00E94B9 |
:10C38000569481E060E0A90123E030E000E00E94E3 |
:10C390004A4984E060E040E252E120E00E946444C7 |
:10C3A000E091132FF091142F46AD57AD8EE060E071 |
:10C3B00023E030E00E944A4981E160E04EE120E064 |
:10C3C0000E944943E091132FF091142F86AD97AD51 |
:10C3D0000E94DE5AE82FF0E0EE0FFF1FEA53FE4EF8 |
:10C3E0004591549182E160E020E00E946444E09134 |
:10C3F000132FF091142F46AD57AD8CE061E00E94F1 |
:10C40000105BE091132FF091142F63A974A9882772 |
:10C4100077FD8095982F0E942F927B018C0120E060 |
:10C4200030E048E453E40E941893181654F0C80111 |
:10C43000B70120E030E048E453EC0E948D9188235E |
:10C44000ACF4C801B70120E030E040EA51E40E94BA |
:10C4500094910E94FC919B01AC0180E061E0A901F4 |
:10C4600024E030E000E00E94DF4814C0C801B701BA |
:10C4700020E030E040E05FE30E941C930E94FC91CA |
:10C480009B01AC0180E061E0A90123E030E000E025 |
:10C490000E94974784E061E04DE620E00E94494316 |
:10C4A000E091132FF091142F05A916A986E367E0F8 |
:10C4B0004AE02EE00E94575FE091132FF091142F75 |
:10C4C00086A597A588599E4F26AD37AD821B930B45 |
:10C4D00068E671E00E944394182FF92E86E163E22A |
:10C4E0004FE0960100E00E948A4C86E163E24FE053 |
:10C4F000212F3F2D01E00E948A4C87E063E0412F0D |
:10C500005F2D23E030E000E00E944A498AE063E0CA |
:10C510004EE120E00E944943E091132FF091142F47 |
:10C5200084A595A56AE070E00E942F94AB0187E096 |
:10C5300062E023E030E00E944A498AE062E04DE692 |
:10C5400020E00E9449438BE064E04BE152E120E0AF |
:10C550000E946444E091132FF091142F42A988E0C7 |
:10C5600064E050E022E030E00E944A49E091132F5D |
:10C57000F091142FEC5BFF4F808186FF04C083E1B4 |
:10C5800064E04DE403C083E164E048E520E00E94FC |
:10C590004943E091132FF091142FEC5BFF4F808102 |
:10C5A00082FF05C088E065E04FE052E10BC081FFEB |
:10C5B00005C088E065E043E052E104C088E065E042 |
:10C5C00047EF51E120E00E946444E091132FF09185 |
:10C5D000142F47A950AD87E066E00E94314A8CE0F5 |
:10C5E00066E045EF51E120E00E946444E091132FA2 |
:10C5F000F091142FEE5BFF4F40818FE066E050E03A |
:10C6000023E030E000E00E944A4982E166E043EF27 |
:10C6100051E120E00E946444E091132FF091142F27 |
:10C62000EC5BFF4F808184FF05C083E166E040EF53 |
:10C6300051E104C083E166E04DEE51E120E00E944B |
:10C640009444E091132FF091142F41AD80E067E006 |
:10C6500050E023E030E000E00E943B4884E067E0E7 |
:10C6600046E520E00E944943E091132FF091142FFA |
:10C6700091AD80917924981760F488EB9BE09093BA |
:10C68000B6238093B52380E290E09093FB228093C1 |
:10C69000FA22E25BFF4F4081518187E067E023E0AF |
:10C6A00030E000E00E943B488BE067E041E420E09E |
:10C6B0000E944943E091132FF091142FE05BFF4F4C |
:10C6C000408151818EE067E024E030E00E944A49D9 |
:10C6D00082E167E049EE51E120E00E946444E0918C |
:10C6E000132FF091142FED5BFF4F8081E354F04046 |
:10C6F00080FF5DC023A934A980918D2390918E2362 |
:10C700008217930724F430938E2320938D2322AD38 |
:10C7100033AD80918F23909190238217930720F45B |
:10C720003093902320938F2324A535A580919123C6 |
:10C73000909192238217930720F4309392232093B1 |
:10C74000912391AD8091F122981710F49093F122EA |
:10C7500027A930AD8091932390919423821793075A |
:10C7600020F43093942320939323E25BFF4F2081A6 |
:10C770003181EE54F0408091952390919623821759 |
:10C78000930720F43093962320939523E05BFF4F8B |
:10C7900020813181E055F04080919723909198233A |
:10C7A0008217930720F43093982320939723EE5B0E |
:10C7B000FF4F8081E254F0408093F32281AD80935B |
:10C7C000F22210921624212F3F2DC9016C011FC1A6 |
:10C7D000F3E06F1609F01BC1D9019E968D919C91D3 |
:10C7E0009F9788599E4FDE962D913C91DF97821B33 |
:10C7F000930B68E671E00E944394B82EA92E0E9424 |
:10C800008C4080E060E240E820E201E00E942D429E |
:10C8100080E460E040E420E40E942D428CE067E088 |
:10C820004FED51E120E00E9464448EE36BE042E46E |
:10C830002BE00E942D4286E16EE146E122E20E9459 |
:10C840002D428AE66EE14AE622E20E942D428EE304 |
:10C8500065E342E425E30E942D42901609F07EC074 |
:10C8600082E261E144E22FE00E942D428CE56FE01C |
:10C870004EE521E10E942D4282E26FE244E221E393 |
:10C880000E942D428CE561E34EE52FE20E942D428D |
:10C890008AE790E00E94F055AC0189E060E020E07A |
:10C8A0000E949D448CE790E00E94F055AC0180E02E |
:10C8B00063E020E00E949D448DE790E00E94F055E7 |
:10C8C000AC0184E163E020E00E949D448BE790E0AE |
:10C8D0000E94F055AC0189E067E020E00E949D4491 |
:10C8E00080E060E04CED51E120E00E946444E09182 |
:10C8F000132FF091142FE05CFF4F4081552747FD27 |
:10C90000509582E060E023E030E000E00E94DF48E4 |
:10C9100080E067E049ED51E120E00E946444E0914D |
:10C92000132FF091142FEF5BFF4F4081552747FDE8 |
:10C93000509582E067E023E030E00E94DF488FE01E |
:10C9400060E046ED51E120E00E94644482E160E055 |
:10C950004B2D5A2D23E030E00E94DF4880E10E94F9 |
:10C960003B84882329F09394B1E0B91508F4992405 |
:10C97000E091132FF091142FE05CFF4F81919927E4 |
:10C9800087FD909562E070E00E9443947B01F094F3 |
:10C99000E194F108F39480E2E80E10E48081181B22 |
:10C9A000882D90E0672D70E04AE050E020E00E9482 |
:10C9B000054C882D672D49E0960100E00E948A4CC5 |
:10C9C000812F90E06E2D70E04AE050E021E00E945F |
:10C9D000054C812F6E2D49E02B2D3A2D01E00E9450 |
:10C9E0008A4CE091132FF091142FEE5BFF4F808162 |
:10C9F000E254F0408093F32281AD8093F2221092B2 |
:10CA000016242B2D3A2DC9016C017E2C812E80918C |
:10CA1000342F9091352F892B19F0FF24F3942CC0DB |
:10CA20008AE08983ADB7BEB717970FB6F894BEBF3B |
:10CA30000FBEADBFEDB7FEB731968FE611968C9362 |
:10CA400082E0818381E082835382448281E090E0AE |
:10CA5000968385830E94268F8CE291E09093352FF8 |
:10CA60008093342FFF24F394EDB7FEB737960FB6BB |
:10CA7000F894FEBF0FBEEDBF8091322F9091332FFF |
:10CA8000892B39F48F2D0E94D75D81E080939C2300 |
:10CA9000FF2480E20E943B84882309F499CB2E96E0 |
:10CAA0000FB6F894DEBF0FBECDBFCF91DF911F91BF |
:10CAB0000F91FF90EF90DF90CF90BF90AF909F903D |
:10CAC0008F907F906F905F904F9008956F927F92BC |
:10CAD0008F929F92AF92BF92CF92DF92EF92FF928E |
:10CAE0000F931F93DF93CF930F92CDB7DEB7898358 |
:10CAF00083E5809389231092162412E333E7632E93 |
:10CB00007724739402E04E010894811C911C21E06B |
:10CB1000A22EB12C9CE7C92ED12C84E1E82EF12C59 |
:10CB200032C08DB79EB70B970FB6F8949EBF0FBE5D |
:10CB30008DBFEDB7FEB73196ADB7BEB711966C920B |
:10CB40007182028394828382B682A5828091B22E02 |
:10CB50009091B32E90878783D286C1860E94268FBC |
:10CB6000F092332FE092322F8DB79EB70B960FB60F |
:10CB7000F8949EBF0FBE8DBF8091322F9091332FBE |
:10CB8000892BD1F7115080911624882319F4112391 |
:10CB900041F60AC0112341F00E948B8EE0911824C7 |
:10CBA000F0911924808117C08EE790E00E94F05523 |
:10CBB000AC0180E062E020E00E949D4484E690E0C9 |
:10CBC0009093332F8093322F8091322F9091332F77 |
:10CBD000892BD1F78FEF898389810F90CF91DF91D6 |
:10CBE0001F910F91FF90EF90DF90CF90BF90AF908B |
:10CBF0009F908F907F906F9008959F92AF92BF9279 |
:10CC0000CF92DF92EF92FF920F931F93DF93CF9318 |
:10CC10000F92CDB7DEB7898381E580938923109287 |
:10CC2000162412E361E7962E01E05E010894A11C30 |
:10CC3000B11C51E0C52ED12C44E1E42EF12C2AC0C8 |
:10CC40008DB79EB707970FB6F8949EBF0FBE8DBFE6 |
:10CC5000EDB7FEB73196ADB7BEB711969C92018382 |
:10CC60000283B482A382D682C5820E94268FF0926C |
:10CC7000332FE092322F8DB79EB707960FB6F894F8 |
:10CC80009EBF0FBE8DBF8091322F9091332F892B85 |
:10CC9000D1F7115080911624882319F4112381F6BD |
:10CCA0000FC0112369F00E948B8EE0911824F0913F |
:10CCB000192481918983F093B32EE093B22E18C08A |
:10CCC0008EE790E00E94F055AC0180E062E020E049 |
:10CCD0000E949D4484E690E09093332F8093322FFE |
:10CCE0008091322F9091332F892BD1F78FEF898349 |
:10CCF00089810F90CF91DF911F910F91FF90EF905D |
:10CD0000DF90CF90BF90AF909F9008950F930E94B7 |
:10CD10008C408FE890E00E94F055AC0180E060E02C |
:10CD200022E00E949D4481E090E00E94F055AC0119 |
:10CD300080E067E020E00E949D4481E01FC0809178 |
:10CD4000A1230E94FD65482F8F3FC1F16091A1236F |
:10CD500083E050E021E030E000E00E944A49609129 |
:10CD6000A1234091B22E5091B32E41595F4F85E0DF |
:10CD700020E00E9433448091A1238F5F8093A12300 |
:10CD80008091A1238630D8F287E890E00E94F05588 |
:10CD9000AC0183E066E020E00E949D448FEF0E949A |
:10CDA000FD65282F8F3F51F081E066E041E00E9451 |
:10CDB00038538093A1238091A12301C08FEF0F915D |
:10CDC00008950F931F93CF93DF9300E0CCE3D0E05F |
:10CDD0001FE00E948C408EE890E00E94F055AC016C |
:10CDE00080E067E022E00E949D4481E090E00E94A4 |
:10CDF000F055AC0180E067E020E00E949D44109275 |
:10CE0000152F80919D23882339F081E061E043EF65 |
:10CE10005DE320E00E9464441092152F38C0E62F95 |
:10CE2000F0E080919D239F01280F311D2E303105A8 |
:10CE3000CCF420919D238091FC286F5FE20FF11DBF |
:10CE4000EC9FA001ED9F500DFC9F500D1124819F80 |
:10CE5000C0011124480F591F475B5D4E83E020E05D |
:10CE60000E9464448091152F853061F480919D2348 |
:10CE700090E008973CF481E066E041EF5DE320E05C |
:10CE80000E9464448091152F8F5F8093152F6091CD |
:10CE9000152F663020F280919E23882399F480918B |
:10CEA0009D23882331F44091F42281E065E020E065 |
:10CEB00005C04091F42282E065E021E001E00E949B |
:10CEC000E552082F80919E238130A9F480919D2303 |
:10CED00090E008973CF04091F42282E066E021E087 |
:10CEE00000E006C04091F42282E065E021E001E02C |
:10CEF0000E94E552082F0E3F51F480919D238F5FD1 |
:10CF000080939D2381E080939E2385E00AC00D3F9E |
:10CF100059F480919D23815080939D2310929E23EC |
:10CF200082E08093F42255CF0F3F29F00093F42242 |
:10CF300080919D23080F802FDF91CF911F910F913A |
:10CF400008955F926F927F928F929F92AF92BF925D |
:10CF5000CF92DF92EF92FF920F931F93DF93CF93C5 |
:10CF6000CDB7DEB764970FB6F894DEBF0FBECDBF66 |
:10CF7000DD2440E0282F30E021503040BE016F5FBB |
:10CF80007F4F15C0E42FF0E053E0EE0FFF1F5A95DE |
:10CF9000E1F7E754F74CE4918E2F90E08217930766 |
:10CFA00029F4FB01ED0DF11D4083D3944F5F463909 |
:10CFB00048F34093152F10E0ED2CFF245E010894F8 |
:10CFC000A11CB11C2CE3522E9FE0C92E612C81E0E4 |
:10CFD000782E47010894810891080E948C408DE8C2 |
:10CFE00090E00E94F055AC0180E060E022E00E94F9 |
:10CFF0009D4481E090E00E94F055AC0180E067E044 |
:10D0000020E00E949D441092152F80919F23882339 |
:10D0100039F081E061E048E25EE320E00E94644490 |
:10D020001092152FA5C1E62FF0E080919F239F015C |
:10D03000280F311D2E153F050CF083C120919F2331 |
:10D040008091FC286F5FEA0DFB1DE20FF11D40810E |
:10D05000459DA00111248C9DC0011124480F591F2A |
:10D060004F565A4E83E020E00E9464446091152F91 |
:10D07000262F30E080919F23D501A20FB31FFD0121 |
:10D08000E80FF11DE081F0E003E0EE0FFF1F0A95CD |
:10D09000E1F7E654F74C8491882379F480919F233B |
:10D0A000A80FB11DEC91F0E073E0EE0FFF1F7A9531 |
:10D0B000E1F7E354F74CE491ACC0813049F580913D |
:10D0C0009F23A80FB11DEC91F0E053E0EE0FFF1F7E |
:10D0D0005A95E1F7E354F74CE491A091B22EB09148 |
:10D0E000B32EAE0FB11D0C916F5F083F08F45FC007 |
:10D0F00082E145E25EE320E00E9464446091152FE6 |
:10D100006F5FA301401B510984E121E030E016C1AB |
:10D11000823081F580919F23FD01E80FF11DE081B0 |
:10D12000F0E043E0EE0FFF1F4A95E1F7E354F74CC0 |
:10D13000249180919F23A80FB11DEC91F0E033E082 |
:10D14000EE0FFF1F3A95E1F7E454F74C9491E0910C |
:10D15000B22EF091B32EE20FF11D808198236F5F04 |
:10D16000992321F082E141E25EE3CEC082E14DE10C |
:10D170005EE3CAC08330D1F580919F23F501E80FAB |
:10D18000F11DE20FF31FE081F0E023E0EE0FFF1F3F |
:10D190002A95E1F7E354F74CE491A091B22EB091B7 |
:10D1A000B32EAE0FB11D0C910D3020F46F5F82E1F4 |
:10D1B000402FC1C0093190F46F5F82E14BE15EE323 |
:10D1C00020E00E9464446091152F6F5F402F50E073 |
:10D1D0004C50504083E122E030E0B0C0093109F00A |
:10D1E000B0C06F5F82E147E15EE38EC08430D1F46E |
:10D1F00080919F23F501E80FF11DE20FF31FE081FD |
:10D20000F0E093E0EE0FFF1F9A95E1F7E354F74C3F |
:10D21000E4916F5FA091B22EB091B32EAE0FB11D0D |
:10D220004C9188C08530F1F480919F23F501E80F7F |
:10D23000F11DE20FF31FE081F0E083E0EE0FFF1F2E |
:10D240008A95E1F7E354F74CE4916F5FA091B22E19 |
:10D25000B091B32EAE0FB11D4C914C9DA001112485 |
:10D2600082E16AC0863009F06CC02091B22E309104 |
:10D27000B32E80919F23FD01E80FF11DE081F0E0C6 |
:10D2800003E0EE0FFF1F0A95E1F7E354F74CE4913A |
:10D29000C9018E0F911DFC01E081EE2329F46F5F1F |
:10D2A00082E143E15EE330C0E13029F46F5F82E167 |
:10D2B0004FE05EE329C0E23029F46F5F82E14BE08A |
:10D2C0005EE322C0E33029F46F5F82E147E05EE372 |
:10D2D0001BC0E43029F46F5F82E143E05EE314C0D9 |
:10D2E000E53029F46F5F82E14FEF5DE30DC0E6307A |
:10D2F00029F46F5F82E14BEF5DE306C06F5FE730BB |
:10D3000039F482E147EF5DE320E00E94644419C0F4 |
:10D3100080919F23A80FB11DEC91F0E073E0EE0F18 |
:10D32000FF1F7A95E1F7E354F74CE4912E0F311D7E |
:10D33000F901408182E150E023E030E000E00E940A |
:10D340004A498091152F853071F480919F2390E098 |
:10D350000596881599053CF481E066E045EF5DE3AC |
:10D3600020E00E9464448091152F8F5F8093152FD9 |
:10D370006091152F663008F456CE8091A023882343 |
:10D38000E9F480919F23882381F4F6E0FD1530F4C1 |
:10D390004091F52281E065E020E00CC04091F5224B |
:10D3A00081E06D2D20E000E006C04091F52282E092 |
:10D3B00065E021E001E00E94E552182F8091A02352 |
:10D3C0008130B9F480919F2390E006968E159F05D9 |
:10D3D0003CF04091F52282E066E021E000E006C0EA |
:10D3E0004091F52282E065E021E001E00E94E552F3 |
:10D3F000182F1E3F51F480919F238F5F80939F23AE |
:10D4000081E08093A02385E00AC01D3F59F48091FC |
:10D410009F23815080939F231092A02382E08093CA |
:10D42000F522DBCD1F3F59F01093F522E0919F23A9 |
:10D43000F0E03197E10FF11DEC0FFD1F1181812FFD |
:10D4400064960FB6F894DEBF0FBECDBFCF91DF91CB |
:10D450001F910F91FF90EF90DF90CF90BF90AF9012 |
:10D460009F908F907F906F905F9008952F923F9242 |
:10D470004F925F926F927F928F929F92AF92BF92E4 |
:10D48000CF92DF92EF92FF920F931F93DF93CF9390 |
:10D4900000D00F92CDB7DEB7082F0E948C40C02E6F |
:10D4A000DD247601A3E0EE0CFF1CAA95E1F7F7015D |
:10D4B000E654F74C14918CE890E00E94F055AC01D2 |
:10D4C00080E060E022E00E949D4481E090E00E94C4 |
:10D4D000F055AC0180E067E020E00E949D441630EA |
:10D4E00009F490C32091FC288CE390E0C89EA00131 |
:10D4F000C99E500DD89E500D11248FE0289F900199 |
:10D500001124420F531F4F565A4E80E062E020E034 |
:10D510000E946444112309F0DAC084E064E049E920 |
:10D520005EE320E00E9464448CE066E044E95EE350 |
:10D5300020E00E94644482E090E00E94F055AC013B |
:10D5400080E067E020E00E949D446701F701E55418 |
:10D55000F74C14912CEB38E3E20EF31EF701E49044 |
:10D56000C6010496E9EB8E2EE8E39E2E880E991EE6 |
:10D57000F4012491E091B22EF091B32EE20FF11D4F |
:10D5800060802091A123820F911D8754974CFC014C |
:10D59000749085E064E0412F50E023E030E000E04B |
:10D5A0000E944A4989E064E04E2D50E023E030E0DB |
:10D5B0000E944A4981E164E0472D50E023E030E0D9 |
:10D5C0000E944A49F62CCE2CDD24A12EBB2480E0FB |
:10D5D00064E04F2D50E023E030E000E00E944A4933 |
:10D5E0004F2C5524C2019695982F8827979587959B |
:10D5F000B6010E944394462F80E068E226E001E0F5 |
:10D600000E940A43F1E3FE15A8F480E40E943B84E3 |
:10D61000182F80E463E00E949484182B21F04C14AE |
:10D620005D040CF4F39480E80E943B84182F80E89A |
:10D6300063E014C080E40E943B84182F80E462E021 |
:10D640000E949484182B21F04C145D040CF4F39484 |
:10D6500080E80E943B84182F80E862E00E94948456 |
:10D66000182BB1F08F2D90E0A816B9068CF4019715 |
:10D670009695982F882797958795B6010E94439491 |
:10D68000862F68E240E826E000E00E940A43FA9410 |
:10D6900080E20E945684882341F080E068E240E8FE |
:10D6A00026E000E00E940A43F72C80E10E944584B6 |
:10D6B000882331F0F61409F4CEC3F401849193C2A7 |
:10D6C00080E20E944584882309F481CFC4C31130CD |
:10D6D00009F017C184E064E042E85EE320E00E94C4 |
:10D6E00064448CE066E04DE75EE320E00E94644421 |
:10D6F00082E090E00E94F055AC0180E067E020E01D |
:10D700000E949D4453E0CC0CDD1C5A95E1F7F601D4 |
:10D71000E554F74C94902CEB38E3E20EF31EF7013E |
:10D720001491C601049639EB632E38E3732E680E0C |
:10D73000791EF3012491E091B22EF091B32EE20F05 |
:10D74000F11D50802091A123820F911D8754974C89 |
:10D75000FC01C490F7EFFC1580F481E164E048E738 |
:10D760005EE320E00E94644440E051E04C1951091E |
:10D7700083E164E021E030E006C081E164E04C2D0B |
:10D7800050E023E030E000E00E944A49D52CA12E71 |
:10D79000BB24892C99242FEF222E312C2D2D30E003 |
:10D7A0003B832A8337EF3D1508F0F1C380E064E046 |
:10D7B00045E75EE320E00E946444E12C91E0F92E0D |
:10D7C0008A819B81E81AF90A82E064E0A70121E0DE |
:10D7D00030E000E00E944A4984E0EE0CFF1C8A958C |
:10D7E000E1F780E068E24E2D26E001E00E940A4366 |
:10D7F00080E40E943B84182F80E461E00E949484BE |
:10D80000182BA1F539C0EA81FB81EA15FB056CF400 |
:10D81000D394F8EFDF1649F480E068E240E826E0B0 |
:10D8200000E00E940A43DD24DA9480E80E943B84F1 |
:10D83000182F80E863E00E949484182BE1F18D2D6D |
:10D8400090E088169906BCF501979695982F882741 |
:10D8500097958795B5010E944394862F68E240E82A |
:10D8600026E000E00E940A43DA9425C02A813B8129 |
:10D87000283F310509F0DA9480E80E943B84182F94 |
:10D8800080E861E00E949484182BA9F0C1018D19F1 |
:10D8900091098295807F68E240E826E000E00E94DE |
:10D8A0000A43D39441F480E068E240E826E00E9415 |
:10D8B0000A4317EFD12E80E20E945684882341F05C |
:10D8C00080E068E240E826E000E00E940A43DC2CA9 |
:10D8D00080E10E944584882369F0D51409F4BBC215 |
:10D8E000F3018491E091B22EF091B32EE80FF11D77 |
:10D8F000D082A7C280E20E944584882309F44ECFDB |
:10D90000AAC2123009F09AC08EE690E00E94F0554B |
:10D91000AC0183E064E020E00E949D448FE690E04B |
:10D920000E94F055AC0183E065E020E00E949D4438 |
:10D9300081E090E00E94F055AC0180E067E020E0DB |
:10D940000E949D442CEB38E3E20EF31EF701049194 |
:10D95000C601B3E0880F991FBA95E1F70496A9EBC9 |
:10D96000CA2EA8E3DA2EC80ED91EF6012491E09142 |
:10D97000B22EF091B32EE20FF11DE0802091A12391 |
:10D98000820F911D8754974CFC014491413029F43A |
:10D9900088E064E043E75EE306C0442339F488E0AE |
:10D9A00065E041E75EE320E00E9464441E2DF12E15 |
:10D9B000F02261F081E064E04FE65EE320E00E9447 |
:10D9C000644481E065E04DE65EE30BC081E064E025 |
:10D9D0004BE65EE320E00E94644481E065E049E6B6 |
:10D9E0005EE320E00E94644480E80E943B84882338 |
:10D9F00019F0FF2009F4102780E40E943B8488235B |
:10DA000021F0812F802309F0102780E10E943B84C0 |
:10DA1000882369F01E1509F41EC2F6018491E09175 |
:10DA2000B22EF091B32EE80FF11D10830AC280E2EE |
:10DA30000E944584882309F4BACF0DC2133009F03F |
:10DA4000E1C084E064E047E55EE320E00E946444D6 |
:10DA50008CE066E042E55EE320E00E94644482E000 |
:10DA600090E00E94F055AC0180E067E020E00E9469 |
:10DA70009D44F3E0CC0CDD1CFA95E1F7F601E5548A |
:10DA8000F74C14912CEB38E3E20EF31EF7014490AF |
:10DA9000C601049679EBA72E78E3B72EA80EB91E1F |
:10DAA000F5012491E091B22EF091B32EE20FF11D19 |
:10DAB00050802091A123820F911D8754974CFC0127 |
:10DAC000E49081E164E04E2D50E023E030E000E09E |
:10DAD0000E944A49F52CC42CDD2464EF662E6FEFBA |
:10DAE000762E6C0C7D1C812E99242F2C3324261429 |
:10DAF00037043CF480E064E04F2D50E023E030E058 |
:10DB000011C02C143D048CF480E064E040E55EE339 |
:10DB100020E00E946444A1014C50504081E064E048 |
:10DB200022E030E000E00E944A49F41439F480E039 |
:10DB300064E04CE45EE320E00E946444C1019695F9 |
:10DB4000982F882797958795B6010E944394462F72 |
:10DB500080E068E226E001E00E940A4380E40E943F |
:10DB60003B84182F80E462E00E949484182B21F0FB |
:10DB70002C143D040CF4F39480E80E943B84182F8D |
:10DB800080E862E00E949484182BB1F08F2D90E021 |
:10DB9000881699068CF401979695982F8827979563 |
:10DBA0008795B6010E944394862F68E240E826E0FC |
:10DBB00000E00E940A43FA9480E20E94568488237F |
:10DBC00041F080E068E240E826E000E00E940A437D |
:10DBD000FE2C80E10E944584882369F0F51409F445 |
:10DBE0003AC1F5018491E091B22EF091B32EE80F85 |
:10DBF000F11DF08226C180E20E944584882309F449 |
:10DC000074CF29C1143009F0A9C080E067E046E371 |
:10DC10005EE320E00E946444F02FFD55F983F2306A |
:10DC200050F48EE190E00E94F055AC0185E066E092 |
:10DC300020E00E949D44402E552433E0440C551CA6 |
:10DC40003A95E1F72DEB38E3420E531EF201849131 |
:10DC5000E091B22EF091B32EE80FF11DE0800E2D71 |
:10DC6000FF2428E0722E97E0892E912C81E0A82EC7 |
:10DC7000B12C1092152FC02EDD241CC0C601022E1F |
:10DC800002C0959587950A94E2F780FF06C0872D1C |
:10DC9000821B64E044E35EE305C0872D821B64E0E1 |
:10DCA00042E35EE320E00E9464448091152F8F5F81 |
:10DCB0008093152F2091152F283000F31F2D1F5F03 |
:10DCC000812F65E040E35EE320E00E94644480E849 |
:10DCD0000E943B84882311F41F2D0AC0812F65E028 |
:10DCE0004EE25EE320E00E946444183009F410E044 |
:10DCF000F981F23050F480E40E945684882329F0A0 |
:10DD0000002311F40AEA01C000E080E40E94458487 |
:10DD1000882351F0C401811B9109950102C0220F93 |
:10DD2000331F8A95E2F7022780E10E944584882309 |
:10DD300069F00E1509F48FC0F2018491E091B22EC2 |
:10DD4000F091B32EE80FF11D00837BC080E20E94AA |
:10DD50004584882309F07FC0F12E8BCF153009F060 |
:10DD60007EC082E090E00E94F055AC0180E067E068 |
:10DD700020E00E949D44802E992403E0880C991C89 |
:10DD80000A95E1F72DEB38E3820E931EF40184919E |
:10DD9000E091B22EF091B32EE80FF11DB08086E62F |
:10DDA00090E063E270E040E150E021E00E94054C29 |
:10DDB000FB2C1FE0A12E0AC0FE1439F086E663E2B8 |
:10DDC0004FE0960100E00E948A4CFE2CFA9C600114 |
:10DDD000112486E663E24FE0960101E00E948A4C3E |
:10DDE00080E40E943B84182F80E461E00E949484C8 |
:10DDF000182B11F4EF2C06C0EF2CE394F8E1EF168A |
:10DE000009F4EE2480E80E943B84182F80E861E04A |
:10DE10000E949484182B29F0EE2011F4B8E1EB2E27 |
:10DE2000EA9480E10E944584882379F0EB1499F00C |
:10DE3000F4018491E091B22EF091B32EE80FF11D20 |
:10DE4000E08281E08093A22306C080E20E944584A4 |
:10DE5000882309F4B1CF80EF0E943B84BEC0163006 |
:10DE600009F0BBC0802E9924A3E0880C991CAA95C8 |
:10DE7000E1F72DEB38E3820E931E81E090E00E94E3 |
:10DE8000F055AC0180E067E020E00E949D44BB2497 |
:10DE90005524AA24A39409C0BB2039F081E061E095 |
:10DEA0004CE25EE320E00E946444EB2CFF248701F7 |
:10DEB000F4E0000F111FFA95E1F70E0D1F1D075931 |
:10DEC000124C2224332437016101CE0CDF1C38E0D0 |
:10DED000C316D1043CF4622D6F5F83E0A80120E0FB |
:10DEE0000E94644485E0281659F497E0C916D104CD |
:10DEF0003CF481E066E04AE25EE320E00E94644494 |
:10DF00000894211C311C0F5E1F4FE6E02E163104D1 |
:10DF1000D9F6552039F4BB2079F481E065E04A2D2B |
:10DF200020E00EC0F2E06F16710434F082E066E08B |
:10DF30004A2D21E000E005C082E065E04A2D21E0A5 |
:10DF400001E00E947D53982F8E3F31F4B394552405 |
:10DF50005394E5E0AE2EA0CF8D3F29F4BA9455241A |
:10DF600072E0A72E99CF8C3FC1F1893008F094CF91 |
:10DF7000F4018491E091B22EF091B32EE80FF11DDF |
:10DF8000B90EBA94B08281E08093A22326C080E0CB |
:10DF900064E04D2D50E023E030E000E00E944A496B |
:10DFA0008A819B819695982F882797958795B501AB |
:10DFB0000E944394462F80E068E226E001E00E9440 |
:10DFC0000A4380E40E943B84182F80E463E00E94AF |
:10DFD0009484182B09F017CC28CC0F900F900F9039 |
:10DFE000CF91DF911F910F91FF90EF90DF90CF9035 |
:10DFF000BF90AF909F908F907F906F905F904F9069 |
:10E000003F902F900895FF920F931F930E948C4092 |
:10E0100087E890E00E94F055AC0180E061E020E0EC |
:10E020000E949D4488E890E00E94F055AC0180E099 |
:10E0300063E020E00E949D4489E890E00E94F05552 |
:10E04000AC0180E067E020E00E949D4413E0B5E071 |
:10E05000FB2E85E063E0412F50E021E030E000E05E |
:10E060000E944A498EE063E04F2D50E021E030E00D |
:10E070000E944A4980E80E943B84882321F01F5F68 |
:10E08000163009F411E080E40E943B84882331F0CB |
:10E09000F39486E0F81611F4FF24F39480E10E94D3 |
:10E0A0003B84882309F470C080E065E041EC5EE3C6 |
:10E0B00020E00E9464448AE890E00E94F055AC01A0 |
:10E0C00080E065E020E00E949D4484E090E00E94B2 |
:10E0D000F055AC018CE067E020E00E949D4480E1B7 |
:10E0E0000E943B848823C1F1812F0E94FD65811726 |
:10E0F000B9F48F2D0E9466658F1591F480E065E07C |
:10E100004BEA5EE320E00E9464448BE890E00E94CA |
:10E11000F055AC0180E065E020E00E949D440FC016 |
:10E120008DE190E00E94F055AC0180E065E020E0D8 |
:10E130000E949D4486E065E04EE00E94B74484E67C |
:10E1400090E09093332F8093322F8091322F9091D3 |
:10E15000332F892BD1F721C080E20E943B84882392 |
:10E1600009F4BDCF80EF0E943B8480E065E045E18B |
:10E170000E94B74489E890E00E94F055AC0180E02D |
:10E1800067E020E00E949D4480E20E943B84882357 |
:10E1900009F45FCF80EF0E943B841F910F91FF90A5 |
:10E1A00008950F931F930E94A3900E948666809308 |
:10E1B000A1238091A1238F3F09F424C18091A12341 |
:10E1C000863019F40E9403701DC10E948C4081E8C2 |
:10E1D00090E00E94F055AC0180E060E022E00E94F7 |
:10E1E0009D444091A123405D89E060E022E00E94CF |
:10E1F000494382E890E00E94F055AC0183E062E080 |
:10E2000020E00E949D4483E890E00E94F055AC011C |
:10E2100083E063E020E00E949D4481E090E00E9462 |
:10E22000F055AC0180E067E020E00E949D4482E070 |
:10E2300063E042E020E000E00E94E5528F3F09F4F5 |
:10E24000E1C0833009F03CC08091A1230E94FD65AC |
:10E250008091A1230E9466659091A123891791F472 |
:10E2600080E062E045E10E94B74480E063E045E180 |
:10E270000E94B74484E890E00E94F055AC018BE026 |
:10E2800060E011C080E062E045E10E94B74480E0B8 |
:10E2900063E045E10E94B7448DE190E00E94F055B3 |
:10E2A000AC0180E064E020E00E949D4480E29EE4B6 |
:10E2B00024EF31E0F9013197F1F70197D9F7A2C0C6 |
:10E2C0008091A1238F3F09F49DC08091A1230E94DA |
:10E2D000FD658F3F09F496C010929D2310929E23F6 |
:10E2E00081E08093F4221092A22311E00E94E16663 |
:10E2F000082F8F3F71F010929F231092A02310934C |
:10E30000F522802F0E94A1678F3F81F30E94366A19 |
:10E31000F8CF8091A223813009F074C00E948C4014 |
:10E3200085E890E00E94F055AC0180E060E022E0DA |
:10E330000E949D444091A123405D89E060E022E07D |
:10E340000E9449434091A12389E060E050E021E030 |
:10E3500030E000E00E944A498EE690E00E94F055CD |
:10E36000AC0183E062E020E00E949D448FE690E0F3 |
:10E370000E94F055AC0183E063E020E00E949D44E0 |
:10E3800081E090E00E94F055AC0180E067E020E081 |
:10E390000E949D4482E063E042E020E00E94E5525A |
:10E3A000823081F58091A1230E9466659091A1231E |
:10E3B000891791F486E890E00E94F055AC0183E063 |
:10E3C00064E020E00E949D4484E890E00E94F055C3 |
:10E3D000AC0183E065E007C08DE190E00E94F0555C |
:10E3E000AC0180E064E020E00E949D4484E690E07F |
:10E3F0009093332F8093322F8091322F9091332F2F |
:10E40000892BD1F71F910F9108952F923F924F9230 |
:10E410005F926F927F928F929F92AF92BF92CF92B4 |
:10E42000DF92EF92FF920F931F93DF93CF93CDB7BD |
:10E43000DEB728970FB6F894DEBF0FBECDBF84EDD0 |
:10E4400091E090938900809388000E948C408DED2C |
:10E450009EE362E00E943C4487E065E04BED5EE3B2 |
:10E4600020E00E94644480E165E048ED5EE320E046 |
:10E470000E94644483E090E00E94F055AC0180E08B |
:10E4800067E020E00E949D4482E167E044ED5EE3A6 |
:10E4900020E00E94644483E067E148E728E001E06F |
:10E4A0000E94D64487E167E147E12FE10E942D42B7 |
:10E4B0008BE267E14BE22FE10E942D428DE367E1A1 |
:10E4C00043E028E00E940A4383E567E143E52FE14A |
:10E4D0000E942D4287E667E147E62FE10E942D4228 |
:10E4E00084E065E040E050E023E030E000E00E949E |
:10E4F0004A498CE065E046E950E023E030E00E94C4 |
:10E50000534716E946E9442E512C38EC632E712C02 |
:10E5100020E8222E312C80E40E943B84882331F4B1 |
:10E5200080E463E00E9494848823E1F1113ED0F5F9 |
:10E530001639F8F4B201611B7109882777FD8095BF |
:10E54000982F0E942F922DEC3CEC4CE45FEB0E9444 |
:10E550001C9320E030E04CE752E40E9429910E9495 |
:10E560000192DC01CB0168E141E026E000E00E947D |
:10E570000A431F5F1B3469F0143659F01D3749F008 |
:10E58000163939F01F3A29F0183C19F0113E09F0FC |
:10E5900080C07092B6236092B5233092FB22209205 |
:10E5A000FA2277C080E80E943B84882339F480E80F |
:10E5B00063E00E949484882309F44DC01C3408F45D |
:10E5C0004AC0173958F1612F70E0665970408827AA |
:10E5D00077FD8095982F0E942F922DEC3CEC4CE417 |
:10E5E0005FE30E941C935B016C0120E030E04CE78C |
:10E5F00052E40E9429910E9401926D837E838F8351 |
:10E600009887C601B5010E9401929B01AC018D81E2 |
:10E6100068E1422F26E000E00E940A43412F41506A |
:10E620004B3461F0443651F04D3741F0463931F00A |
:10E630004F3A21F0483C11F0413E41F47092B6232C |
:10E640006092B5233092FB222092FA22142F4B3491 |
:10E6500000F51BE44AC080E10E943B84882309F452 |
:10E66000CAC084E068E146E726E000E00E940A4371 |
:10E670008DE367E143E028E001E00E940A437092E5 |
:10E68000B6236092B5233092FB222092FA2216E93B |
:10E6900002C0163950F1E12EFF248AE69FEFE80E02 |
:10E6A000F91EB701882777FD8095982F0E942F9239 |
:10E6B0002DEC3CEC4CE45FE30E941C930E94019221 |
:10E6C0009B01AC018FE368E1422F26E001E00E944C |
:10E6D0000A43EE0CFF1C84E065E0A70123E030E074 |
:10E6E00000E00E944A498EE33EC04201811A91082F |
:10E6F000B401882777FD8095982F0E942F92698317 |
:10E700007A838B839C832DEC3CEC4CE45FEB0E9482 |
:10E710001C9320E030E04CE752E40E9429910E94D3 |
:10E7200001925B016C0169817A818B819C812DEC66 |
:10E730003CEC4CE45FE30E941C930E9401929B011D |
:10E74000AC018A2D68E1422F26E001E00E940A43D5 |
:10E75000880C991C84E065E0A40123E030E000E02F |
:10E760000E944A498DE367E142E028E001E00E940F |
:10E770000A438CE065E0412F50E023E030E000E008 |
:10E780000E94534783E067E143E02FE101E00E94EC |
:10E790002D4287E167E147E12FE10E942D428BE2A4 |
:10E7A00067E14BE22FE10E942D4283E567E143E5FB |
:10E7B0002FE10E942D4287E667E147E62FE10E94A4 |
:10E7C0002D428BE767E14BE72FE10E942D42612F3D |
:10E7D00070E0882777FD8095982F0E942F9220E087 |
:10E7E00030E048E450E40E941C930E940192709330 |
:10E7F00089006093880080E20E943B84882309F4AA |
:10E800008ACE80EF0E943B8428960FB6F894DEBF34 |
:10E810000FBECDBFCF91DF911F910F91FF90EF9071 |
:10E82000DF90CF90BF90AF909F908F907F906F9030 |
:10E830005F904F903F902F9008950E948C4080E011 |
:10E8400063E04AED58E422E00E94644480E064E022 |
:10E8500045EC58E422E00E94644480E197E224EF12 |
:10E8600031E0F9013197F1F70197D9F708951F9336 |
:10E87000182F80932F2F0E948C4084E790E00E94F5 |
:10E88000F055AC0180E062E020E00E949D4411233D |
:10E8900019F0113069F405C08FE062E04BE058E4F4 |
:10E8A00004C08FE062E046E058E420E00E94644447 |
:10E8B00082E090E00E94F055AC0180E067E020E04B |
:10E8C0000E949D4480E40E943B84882351F01123E0 |
:10E8D00041F48FE062E041E058E420E00E946444AB |
:10E8E00011E080E80E943B84882351F0113041F40C |
:10E8F0008FE062E04CEF57E420E00E94644410E0B7 |
:10E9000080E10E943B84882321F081E08093A3234F |
:10E910000CC080E20E943B848823A1F280EF0E9419 |
:10E920003B841092A32310912F2F1093BF28812F87 |
:10E930001F910895EF92FF920F931F93082FE62ED9 |
:10E94000F42E122F80932F2F0E948C40812F90E065 |
:10E950000E94F055AC0180E062E020E00E949D44FE |
:10E96000013051F0013028F0023049F00330A1F4B9 |
:10E9700009C088E590E008C089E590E005C08AE517 |
:10E9800090E002C08BE590E00E94F055AC018AE077 |
:10E9900062E020E00E949D4482E090E00E94F055F9 |
:10E9A000AC0180E067E020E00E949D4411E080E43B |
:10E9B0000E943B84882309F10F15F8F41093A323D8 |
:10E9C0000F5F013051F0013028F0023049F0033080 |
:10E9D000A1F409C088E590E008C089E590E005C091 |
:10E9E0008AE590E002C08BE590E00E94F055AC0112 |
:10E9F0008AE062E020E00E949D4480E80E943B841F |
:10EA0000882309F1E016F8F41093A3230150013094 |
:10EA100051F0013028F0023049F00330A1F409C070 |
:10EA200088E590E008C089E590E005C08AE590E0BF |
:10EA300002C08BE590E00E94F055AC018AE062E0F4 |
:10EA400020E00E949D4480E10E943B84882369F479 |
:10EA500080E20E943B84882309F4A9CF80EF0E94C2 |
:10EA60003B841092A32300912F2F802F1F910F9191 |
:10EA7000FF90EF9008950F931F93082F122F80930C |
:10EA80002F2F0E948C40812F90E00E94F055AC0106 |
:10EA900080E062E020E00E949D44002319F00130F4 |
:10EAA00071F403C08FE690E002C08EE690E00E9411 |
:10EAB000F055AC0181E162E020E00E949D4482E0DB |
:10EAC00090E00E94F055AC0180E067E020E00E94F9 |
:10EAD0009D4411E080E40E943B84882379F0002368 |
:10EAE00069F41093A3238EE690E00E94F055AC01E8 |
:10EAF00081E162E020E00E949D4401E080E80E9404 |
:10EB00003B84882379F0013069F40093A3238FE6D6 |
:10EB100090E00E94F055AC0181E162E020E00E94AB |
:10EB20009D4400E080E10E943B84882361F480E200 |
:10EB30000E943B84882371F280EF0E943B841092F4 |
:10EB4000A32300912F2F802F1F910F9108950F93D2 |
:10EB50001F93082F122F80932F2F0E948C40812FFC |
:10EB600090E00E94F055AC0180E062E020E00E945D |
:10EB70009D44002319F0013071F403C08BE290E052 |
:10EB800002C08AE290E00E94F055AC0181E162E0AF |
:10EB900020E00E949D4482E090E00E94F055AC018C |
:10EBA00080E067E020E00E949D4411E080E40E9444 |
:10EBB0003B84882379F0002369F41093A3238AE22D |
:10EBC00090E00E94F055AC0181E162E020E00E94FB |
:10EBD0009D4401E080E80E943B84882379F0013065 |
:10EBE00069F40093A3238BE290E00E94F055AC01FE |
:10EBF00081E162E020E00E949D4400E080E10E940B |
:10EC00003B84882361F480E20E943B84882371F274 |
:10EC100080EF0E943B841092A32300912F2F802F1E |
:10EC20001F910F9108950F931F93182F80932F2FEB |
:10EC30000E948C4088E690E00E94F055AC0180E094 |
:10EC400062E020E00E949D44112319F0113071F41C |
:10EC500003C082E590E002C083E590E00E94F05599 |
:10EC6000AC018FE062E020E00E949D4482E090E0F1 |
:10EC70000E94F055AC0180E067E020E00E949D44D6 |
:10EC800001E080E40E943B84882379F0112369F439 |
:10EC90000093A32383E590E00E94F055AC018FE040 |
:10ECA00062E020E00E949D4411E080E80E943B84E5 |
:10ECB000882379F0113069F41093A32382E590E062 |
:10ECC0000E94F055AC018FE062E020E00E949D447C |
:10ECD00010E080E10E943B84882361F480E20E947E |
:10ECE0003B84882371F280EF0E943B841092A3231F |
:10ECF00010912F2F812F1F910F910895DF92EF9286 |
:10ED0000FF920F931F93F82ED62EE42E122F0E94FF |
:10ED10008C40812F90E00E94F055AC0180E062E0D1 |
:10ED200020E00E949D44F0922F2F80E162E04F2D61 |
:10ED300050E023E030E000E00E944A4982E090E0A9 |
:10ED40000E94F055AC0180E067E020E00E949D4405 |
:10ED500011E080E40E943B84882331F480E462E087 |
:10ED60000E949484882371F0FE1460F41093A3230E |
:10ED7000F39480E162E04F2D50E023E030E000E0CA |
:10ED80000E944A4980E80E943B84882331F480E84D |
:10ED900062E00E949484882371F0DF1460F4109381 |
:10EDA000A323FA9480E162E04F2D50E023E030E0AD |
:10EDB00000E00E944A4980E10E943B84882361F47C |
:10EDC00080E20E943B84882321F280EF0E943B84F2 |
:10EDD0001092A323F0902F2F8F2D1F910F91FF9052 |
:10EDE000EF90DF900895CF92DF92EF92FF920F9312 |
:10EDF0001F93CF93DF93EC016B017A010E948C404B |
:10EE000085E790E00E94F055AC0180E062E020E0F0 |
:10EE10000E949D4487E790E00E94F055AC0180E09D |
:10EE200065E020E00E949D4488E790E00E94F05554 |
:10EE3000AC0180E066E020E00E949D44D093172F53 |
:10EE4000C093162F80E162E0AE0124E030E000E0E4 |
:10EE50000E944A4982E090E00E94F055AC0180E0B7 |
:10EE600067E020E00E949D4486EF9FEFE80EF91EC8 |
:10EE700011E080E40E943B84882331F480E462E066 |
:10EE80000E949484882391F0CE15DF0578F41093C6 |
:10EE9000A3232A96D093C128C093C02880E162E0C2 |
:10EEA000AE0124E030E000E00E944A4980E80E9480 |
:10EEB0003B84882331F480E862E00E9494848823B4 |
:10EEC00091F0CC16DD0678F41093A3232A97D09303 |
:10EED000C128C093C02880E162E0AE0124E030E0A8 |
:10EEE00000E00E944A4980E10E943B84882339F572 |
:10EEF0000E94E14D409187235091882388E063E090 |
:10EF000020E030E000E00E94534783E063E047EFF9 |
:10EF100057E420E00E94644480E20E943B848823FE |
:10EF200009F4A7CF80EF0E943B841092A323C091E5 |
:10EF3000162FD091172FD093C128C093C028CE018F |
:10EF4000DF91CF911F910F91FF90EF90DF90CF90C5 |
:10EF500008956F927F928F929F92AF92BF92CF92BD |
:10EF6000DF92EF92FF920F931F93CF93DF93109254 |
:10EF7000B52E1092A3230E948C40BB249924AA246E |
:10EF8000A39438E4632E712C22E1822E01C0A02EBE |
:10EF90000E948C4083E790E00E94F055AC0180E035 |
:10EFA00060E022E00E949D4481E090E00E94F055E4 |
:10EFB000AC0180E067E020E00E949D44BB2039F076 |
:10EFC00081E061E045EF57E420E00E946444CB2CEF |
:10EFD000DD24C69C8001C79C100DD69C100D112409 |
:10EFE000C0E0D0E07E01EC0CFD1C82E0E816F104EC |
:10EFF00084F44091FC28CE018F5F682F489DA001CA |
:10F000001124400F511F4D59584B83E020E00E94BE |
:10F010006444C53049F4EF2839F481E066E043EFF9 |
:10F0200057E420E00E9464442196085B1F4FC630DD |
:10F03000D105C1F6992069F4BB2029F481E062E092 |
:10F040004A2D20E00AC082E065E04A2D21E001E07F |
:10F0500005C082E066E04A2D21E000E00E94E55212 |
:10F06000082F8E3F31F4B3949924939495E0A92E00 |
:10F07000A5CF8D3F29F4BA94992482E0A82E9ECF83 |
:10F080008F3F39F48091A323813059F50E94BC3918 |
:10F0900028C090E08B0D911D8130910549F480913D |
:10F0A000BF2860E041E00E9437748093BF2811C000 |
:10F0B000029709F06CCF8091C0289091C12860E040 |
:10F0C00070E04FE057E20E94F3769093C12880935E |
:10F0D000C0288091A323813009F059CF0E94BC3908 |
:10F0E00056CFDF91CF911F910F91FF90EF90DF905E |
:10F0F000CF90BF90AF909F908F907F906F9008952A |
:10F100006F927F928F929F92AF92BF92CF92DF9237 |
:10F11000EF92FF920F931F93CF93DF93F82EE92E78 |
:10F12000D62EB42E89010E948C4080E060E0A801B8 |
:10F1300022E00E9464442F2D3E2DC901EC01B8E16C |
:10F14000EB2EBFE2FB2E01E0DD0CD39414C0102F98 |
:10F150001F5F802F63E0488120E00E9449430E5FDB |
:10F16000812F63E04DE758E420E00E9464448991D8 |
:10F17000F70181937F010D1551F783E066E14AE0C5 |
:10F180002AE001E00E94D64480E066E04EE658E4C2 |
:10F1900020E00E94644480E067E049E558E420E014 |
:10F1A0000E94644411E0FF24EE24E394A0E2CA2EFE |
:10F1B000F9E37F2EEAE56E2E71E6A72E61E4962E26 |
:10F1C00050E3852E46E0D42EF1E0BF1609F078C05A |
:10F1D000E1E2FFE29AE08081803219F090932E2FD5 |
:10F1E00004C0915031979923B1F780E40E943B8489 |
:10F1F000882331F480E462E00E949484882379F1CA |
:10F20000AF2DB0E0FD01E85EF04D80818A3738F522 |
:10F210008F5F8083803208F4C082FD01E85EF04D8C |
:10F22000808181528F3008F48082FD01E85EF04DCC |
:10F2300080818A53873008F49082FD01E85EF04DAA |
:10F2400080818B55863008F4A082A85EB04D812F56 |
:10F2500063E04C9120E00E944943E092A32380E8C0 |
:10F260000E943B84882339F480E862E00E94948401 |
:10F27000882309F45EC0AF2DB0E0FD01E85EF04DDB |
:10F280008081813208F455C0815080838B5586304F |
:10F2900008F46082FD01E85EF04D80818A5387307A |
:10F2A00008F47082FD01E85EF04D808181528F305C |
:10F2B00008F4C082A85EB04D812F63E04C9134C049 |
:10F2C00082E0B816B1F580E40E943B84882331F4D3 |
:10F2D00080E461E00E949484882381F0EF2DF0E0C7 |
:10F2E000E85EF04D4081493348F44F5F4083812F01 |
:10F2F00063E020E00E944943E092A32380E80E945B |
:10F300003B84882331F480E861E00E949484882360 |
:10F3100081F0EF2DF0E0E85EF04D4081413348F0A0 |
:10F3200041504083812F63E020E00E944943E092F6 |
:10F33000A32380E20E945684882369F0EF2DF0E039 |
:10F34000E85EF04DC082812F63E040E220E00E9441 |
:10F350004943E092A32380E20E944584882379F107 |
:10F36000812F869590E00997A4F01D9DC00111247E |
:10F37000835066E14AE02AE000E00E94D64483E040 |
:10F3800066E14AE02AE001E00E94D64411E0FF2451 |
:10F3900016C01D9DC0011124835066E14AE02AE099 |
:10F3A00000E00E94D6441E5F1D9DC00111248350C1 |
:10F3B00066E14AE02AE001E00E94D644F39480E14D |
:10F3C0000E943B84882309F4FFCE80EF0E943B8497 |
:10F3D00081E0DF91CF911F910F91FF90EF90DF902F |
:10F3E000CF90BF90AF909F908F907F906F90089537 |
:10F3F0002F923F924F925F926F927F928F929F9245 |
:10F40000AF92BF92CF92DF92EF92FF920F931F9332 |
:10F41000DF93CF93CDB7DEB764970FB6F894DEBF16 |
:10F420000FBECDBF1092B52E1092A3230E948C4028 |
:10F43000882455249924939408EE202E03E0302E3E |
:10F440003E010894611C711C10E2412E01C09F2CEA |
:10F450000E948C4080E790E00E94F055AC0180E073 |
:10F4600060E022E00E949D4481E090E00E94F0551F |
:10F47000AC0180E067E020E00E949D44882039F0E4 |
:10F4800081E061E047E558E420E00E946444A82C54 |
:10F49000BB2488E490E0A89E7001A99EF00CB89E61 |
:10F4A000F00C112400E010E06801CA0CDB1C95E0B0 |
:10F4B000C916D10484F44091FC28602F6F5F82E16B |
:10F4C000489FA00111244E0D5F1D45505A4B83E00B |
:10F4D00020E00E946444053059F494E0C916D10438 |
:10F4E0003CF481E066E045E558E420E00E94644495 |
:10F4F0000F5F1F4F88E490E0E80EF91E06301105FB |
:10F5000099F6552069F4882029F481E065E0492DB9 |
:10F5100020E00AC082E065E0492D21E001E005C05D |
:10F5200082E066E0492D21E000E00E94E552F82EDD |
:10F530009EEF891721F48394552453941CC08DEFBA |
:10F54000F81619F48A94552416C09FEFF91609F499 |
:10F55000BBC01091A323113071F48091F5280E9453 |
:10F56000AF2F892B19F01093FA2802C01092FA28B5 |
:10F570000E94BC39A9C00F2D10E0080D111D0130EB |
:10F58000110551F48091F52860E041E020E70E94E8 |
:10F590003B758093F52891C002301105E1F520E01C |
:10F5A00030E0F301E20FF31FD901AD53B74D8C9159 |
:10F5B00080832F5F3F4F2A30310599F71B86C301A7 |
:10F5C0006AE041E02FE338E40E9480788091A32331 |
:10F5D000813009F04DC000E00CC0E02FF0E0DF0109 |
:10F5E000A85EB04D8C91ED53F74D80830E94BC39DD |
:10F5F0000F5F10912E2F011780F31A3048F027CF9C |
:10F60000E12FF0E0ED53F74D40820E94BC391F5FBF |
:10F610001A30B0F31CCF0330110551F58091032946 |
:10F620008983809104298A83809105298B83809125 |
:10F6300006298C831D82C30164E042E029E238E49C |
:10F640000E9480788091A323813091F400E010E043 |
:10F65000F801ED5FF64DD801A85EB04D8C91808326 |
:10F660000E94BC390F5F1F4F0430110589F7EFCEA0 |
:10F670000430110511F50E94AF2F019751F480E07D |
:10F6800063E04EE158E420E00E9464440E94D638D2 |
:10F69000DECE80E063E040E158E420E00E94644474 |
:10F6A0001092FA283092B6232092B52380E490E09D |
:10F6B0009093FB228093FA22CACE0530110509F0FF |
:10F6C000C6CE0E946131C3CE64960FB6F894DEBFF9 |
:10F6D0000FBECDBFCF91DF911F910F91FF90EF90A3 |
:10F6E000DF90CF90BF90AF909F908F907F906F9062 |
:10F6F0005F904F903F902F9008954F925F926F923E |
:10F700007F928F929F92AF92BF92CF92DF92EF92B1 |
:10F71000FF920F931F93CF93DF931092B52E109209 |
:10F72000A3230E948C40AA247724BB24B39498E49A |
:10F73000492E512C82E1682E01C0B12E0E948C40CE |
:10F7400080E060E043E858E422E00E94644481E005 |
:10F7500090E00E94F055AC0180E067E020E00E945C |
:10F760009D44AA2039F081E061E041E858E420E0BE |
:10F770000E9464440A2D10E0049D7001059DF00C68 |
:10F78000149DF00C1124C0E0D0E048016E01C00EC1 |
:10F79000D11E88E0C816D10484F44091FC28CE0123 |
:10F7A0008F5F682F469DA00111244E0D5F1D4554AB |
:10F7B0005C4B83E020E00E946444C53059F497E03C |
:10F7C000C916D1043CF481E066E04FE758E420E03C |
:10F7D0000E946444219688E490E0E80EF91EC63049 |
:10F7E000D105A1F6772039F4AA2079F481E065E00B |
:10F7F0004B2D20E00EC092E08916910434F082E097 |
:10F8000066E04B2D21E000E005C082E065E04B2D75 |
:10F8100021E001E00E94E552182F8E3F21F4A394CD |
:10F820007724739414C08D3F19F4AA9477240FC0E1 |
:10F830008F3F09F467C08091A323813041F4809108 |
:10F84000F828813011F40E945F290E94BC39C12F31 |
:10F85000D0E0CA0DD11DC130D10551F48091F828F6 |
:10F8600060E041E02BE60E943B758093F82824C0BD |
:10F87000C230D10551F48091082960E045E027E6C7 |
:10F880000E947E768093082924C0C330D10551F4AC |
:10F890008091F62860E04FE727E60E947E7680930D |
:10F8A000F62824C0C430D10539F4809101290E9482 |
:10F8B00013768093012920C0C530D10551F4809181 |
:10F8C000F32860E04FE729E60E947E768093F328D4 |
:10F8D00034CFC630D10551F48091F72860E04FE76E |
:10F8E0002AE60E947E768093F72827CFC730D1057D |
:10F8F00019F40E945F2921CF289709F01ECF0E949A |
:10F9000008311BCFDF91CF911F910F91FF90EF90A6 |
:10F91000DF90CF90BF90AF909F908F907F906F902F |
:10F920005F904F9008950E948C4080EF0E943B842E |
:10F9300086E590E00E94F055AC0180E062E020E0B6 |
:10F940000E949D4487E590E00E94F055AC0180E064 |
:10F9500063E020E00E949D4485E590E00E94F05520 |
:10F96000AC018CE067E020E00E949D4480E10E94B1 |
:10F970003B84882319F00E94803A089580E20E9417 |
:10F980003B84882399F380EF0E943B840895BF92C3 |
:10F99000CF92DF92EF92FF920F931F93CF93DF935B |
:10F9A000F82EB62EE42E122F80932F2F682F70E0A2 |
:10F9B000882777FD8095982F0E942F9223E333E3C9 |
:10F9C00043E250E40E941C930E9401926093B300B2 |
:10F9D0000E948C40812F90E00E94F055AC0180E0A5 |
:10F9E00062E020E00E949D4480E162E04F2D50E003 |
:10F9F00023E030E000E00E944A4981E162E047EB09 |
:10FA000058E420E00E94644482E090E00E94F055B7 |
:10FA1000AC0180E067E020E00E949D4448ECC42EE9 |
:10FA2000D12CC0E8D0E080E162E04F2D50E023E02F |
:10FA300030E000E00E944A498F2D90E09695982F83 |
:10FA400088279795879564E670E00E944394462F37 |
:10FA500080E060E226E001E00E940A4380E40E9428 |
:10FA60003B84882331F480E463E00E9494848823FB |
:10FA700009F1FE14F8F4F394FE1450F0D092B6237A |
:10FA8000C092B523D093FB22C093FA22FE2C12C061 |
:10FA90006F2D70E0882777FD8095982F0E942F9218 |
:10FAA00023E333E343E250E40E941C930E9401925B |
:10FAB0006093B30080E80E943B84882331F480E89F |
:10FAC00063E00E949484882399F1BF1488F58F2DF8 |
:10FAD00090E001979695982F88279795879564E6EB |
:10FAE00070E00E944394862F60E240E826E000E048 |
:10FAF0000E940A43FA94FB1449F4D092B623C092B0 |
:10FB0000B523D093FB22C093FA2212C06F2D70E070 |
:10FB1000882777FD8095982F0E942F9223E333E367 |
:10FB200043E250E40E941C930E9401926093B30050 |
:10FB300080E10E943B848823D1F081E08093A3235D |
:10FB40006F2D70E0882777FD8095982F0E942F9267 |
:10FB500023E333E343E250E40E941C930E940192AA |
:10FB60006093B300F092CE280E94BC3925C080E299 |
:10FB70000E943B84882309F456CF80EF0E943B8487 |
:10FB80001092A32310912F2F612F70E0882777FD0B |
:10FB90008095982F0E942F9223E333E343E250E4B1 |
:10FBA0000E941C930E9401926093B3001093CE2890 |
:10FBB0000E94BC39F0902F2F8F2DDF91CF911F9194 |
:10FBC0000F91FF90EF90DF90CF90BF900895BF927C |
:10FBD000CF92DF92EF92FF920F931F93CF93DF9319 |
:10FBE000F82EB62EE42E122F80932F2F0E948C40D9 |
:10FBF000812F90E00E94F055AC0180E062E020E0AF |
:10FC00000E949D4480E162E04F2D50E023E030E00F |
:10FC100000E00E944A4982E090E00E94F055AC0169 |
:10FC200080E067E020E00E949D4478ECC72ED12C54 |
:10FC3000C0E8D0E080E162E04F2D50E023E030E00A |
:10FC400000E00E944A494F2D50E0440F551F80E0CC |
:10FC500060E226E001E00E940A4380E40E943B84C7 |
:10FC6000882331F480E462E00E9494848823C9F000 |
:10FC7000FE14B8F4F394FE1450F0D092B623C09260 |
:10FC8000B523D093FB22C093FA22FE2C0AC0F8942D |
:10FC90002B9881E80E947E408F2D0E947E402B9AF7 |
:10FCA000789480E80E943B84882331F480E862E005 |
:10FCB0000E949484882309F1BF14F8F48F2D880FD3 |
:10FCC000825060E240E826E000E00E940A43FA9495 |
:10FCD000FB1449F4D092B623C092B523D093FB22F3 |
:10FCE000C093FA220AC0F8942B9881E80E947E40C3 |
:10FCF0008F2D0E947E402B9A789480E162E04F2DF8 |
:10FD000050E023E030E000E00E944A4980E10E9498 |
:10FD10003B84882341F081E08093A323F09228293B |
:10FD20000E94BC391EC080E20E943B84882309F4F3 |
:10FD300081CF80EF0E943B84F8942B9881E80E9449 |
:10FD40007E4080912F2F0E947E402B9A78941092B3 |
:10FD5000A32380912F2F809328290E94BC39F090F3 |
:10FD60002F2F8F2DDF91CF911F910F91FF90EF904B |
:10FD7000DF90CF90BF9008950F931F93082F122FFD |
:10FD800080932F2F0E948C40812F90E00E94F0558D |
:10FD9000AC0180E062E020E00E949D44002319F065 |
:10FDA000043071F403C083E590E002C084E590E084 |
:10FDB0000E94F055AC018EE062E020E00E949D447C |
:10FDC00082E090E00E94F055AC0180E067E020E026 |
:10FDD0000E949D4480E40E943B84882369F00023B4 |
:10FDE00059F484E590E00E94F055AC018EE062E0A9 |
:10FDF00020E00E949D4404E080E80E943B84882328 |
:10FE000069F0043059F483E590E00E94F055AC01AC |
:10FE10008EE062E020E00E949D4400E080E10E94CC |
:10FE20003B84882399F081E08093A323F8942B9856 |
:10FE3000002311F486EA01C087EA0E947E402B9AD3 |
:10FE400078940093C2280E94BC390FC080E20E94BF |
:10FE50003B84882309F4BECF80EF0E943B8410923C |
:10FE6000A32300912F2F0093C228802F1F910F9161 |
:10FE700008950F931F93082F122F80932F2F0E9406 |
:10FE80008C40812F90E00E94F055AC0180E062E050 |
:10FE900020E00E949D44002319F0043071F403C057 |
:10FEA00083E590E002C084E590E00E94F055AC014B |
:10FEB0008EE062E020E00E949D4482E090E00E949B |
:10FEC000F055AC0180E067E020E00E949D4480E4B2 |
:10FED0000E943B84882369F0002359F484E590E074 |
:10FEE0000E94F055AC018EE062E020E00E949D444B |
:10FEF00004E080E80E943B84882369F0043059F4D0 |
:10FF000083E590E00E94F055AC018EE062E020E0D5 |
:10FF10000E949D4400E080E10E943B848823C9F058 |
:10FF200081E08093A323F8942B98002329F481EA9D |
:10FF30000E947E4080EC04C080EA0E947E4088ECF3 |
:10FF40000E947E402B9A789400932D2F0E94BC39FA |
:10FF50000DC080E20E943B84882309F4B8CF80EF73 |
:10FF60000E943B841092A32300912F2F802F1F917A |
:10FF70000F9108954F925F926F927F928F929F920E |
:10FF8000AF92BF92CF92DF92EF92FF920F931F93A7 |
:10FF9000CF93DF930E948C401092B52E1092A32332 |
:10FFA0001092A423AA247724BB24B394B8E44B2E44 |
:10FFB000512CA2E16A2E01C0B12E0E948C408CE52A |
:10FFC00090E00E94F055AC0180E060E022E00E94E9 |
:10FFD0009D4481E090E00E94F055AC0180E067E034 |
:10FFE00020E00E949D44AA2039F081E061E04BE9C5 |
:10FFF00058E420E00E9464440A2D10E0049D700142 |
:020000021000EC |
:10000000059DF00C149DF00C1124C0E0D0E04801D7 |
:100010006E01C00ED11E88E0C816D10484F4409150 |
:10002000FC28CE018F5F682F469DA00111244E0D44 |
:100030005F1D45585E4B83E020E00E946444C5305C |
:1000400059F497E0C916D1043CF481E066E049E92F |
:1000500058E420E00E946444219688E490E0E80E91 |
:10006000F91EC630D105A1F6772039F4AA2079F41B |
:1000700081E065E04B2D20E00EC092E089169104EE |
:1000800034F082E066E04B2D21E000E005C082E024 |
:1000900065E04B2D21E001E00E94E552182F8E3FD4 |
:1000A00031F4A39477247394F5E0BF2E9CCF8D3F59 |
:1000B00029F4AA947724E2E0BE2E95CF8F3F41F435 |
:1000C0008091A323813009F08DC00E94BC398AC081 |
:1000D000C82FD0E0CA0DD11DC130D10551F4809197 |
:1000E000CF2860E042E02DE50E94A7758093CF28DD |
:1000F00027C0C230D10551F48091F42860E042E07D |
:1001000024E60E94A7758093F42826C0C330D10549 |
:1001100051F48091FC2860E043E02EE50E949A743F |
:100120008093FC2819C0C430D10551F4809129294D |
:1001300060E04EEF2FE50E947E76809329290CC067 |
:10014000C530D10549F48091CE2860E044E620E630 |
:100150000E94C77C8093CE289091A323913031F4E4 |
:100160008091A423882311F49093A423C630D10551 |
:1001700049F48091282960E04FE321E60E94E77D61 |
:10018000809328299091A323913031F48091A42366 |
:10019000882311F49093A423C730D10551F48091A2 |
:1001A000C22860E044E022E60E94BC7E8093C22820 |
:1001B0000CC0289709F000CF80912D2F60E044E01B |
:1001C00023E60E94397F80932D2F9091A3239130B5 |
:1001D00009F0F2CE8091A423882309F0EDCE90930C |
:1001E000A423EACEDF91CF911F910F91FF90EF9062 |
:1001F000DF90CF90BF90AF909F908F907F906F9047 |
:100200005F904F9008950F931F93182F80932F2F77 |
:100210000E948C4083E390E00E94F055AC0180E0A6 |
:1002200061E020E00E949D4484E390E00E94F0554C |
:10023000AC0180E062E020E00E949D448091F828BB |
:10024000882309F056C083E390E00E94F055AC018A |
:1002500080E061E020E00E949D4485E390E00E9400 |
:10026000F055AC0180E062E020E00E949D4486E30E |
:1002700090E00E94F055AC0180E061E020E00E9437 |
:100280009D4487E390E00E94F055AC0180E062E07D |
:1002900020E00E949D4488E390E00E94F055AC016C |
:1002A00080E061E020E00E949D4489E390E00E94AC |
:1002B000F055AC0180E062E020E00E949D448AE3BA |
:1002C00090E00E94F055AC0180E061E020E00E94E7 |
:1002D0009D448BE190E00E94F055AC018CE067E01A |
:1002E00020E00E949D4480E20E943B848823D9F351 |
:1002F0007BC0112319F0113099F408C08EE062E040 |
:100300004FEB58E420E00E9464440AC081E590E08D |
:100310000E94F055AC018EE062E020E00E949D4416 |
:1003200082E090E00E94F055AC0180E067E020E0C0 |
:100330000E949D440091F828013009F04FC080E4EC |
:100340000E943B84882391F0112381F40093A3231E |
:1003500081E590E00E94F055AC018EE062E020E083 |
:100360000E949D4486E00E94CA3011E080E80E940D |
:100370003B84882379F0113069F41093A3238EE035 |
:1003800062E049EB58E420E00E94644485E00E946A |
:10039000CA3010E080E10E943B848823F9F08BE3AF |
:1003A00090E00E94F055AC0180E064E020E00E9403 |
:1003B0009D448CE390E00E94F055AC0180E065E044 |
:1003C00020E00E949D4480E067E042E10E94B74443 |
:1003D00080E10E943B848823D9F30DC080E20E9413 |
:1003E0003B84882309F4A6CF80EF0E943B841092BF |
:1003F000A32310912F2F812F1F910F910895DF922A |
:10040000EF92FF920F931F93F82ED62EE42E122F09 |
:1004100080932F2F0E948C40812F90E00E94F055F6 |
:10042000AC0180E062E020E00E949D4480E162E057 |
:100430004F2D50E023E030E000E00E943B4882E096 |
:1004400090E00E94F055AC0180E067E020E00E945F |
:100450009D4411E080E40E943B84882331F480E4D1 |
:1004600063E00E949484882371F0FE1460F410937A |
:10047000A323F39480E162E04F2D50E023E030E0CD |
:1004800000E00E943B4880E80E943B84882331F4CE |
:1004900080E863E00E949484882371F0DF1460F4A4 |
:1004A0001093A323FA9480E162E04F2D50E023E003 |
:1004B00030E000E00E943B4880E10E943B848823BA |
:1004C00061F480E20E943B84882321F280EF0E9445 |
:1004D0003B841092A323F0902F2F8F2D1F910F910B |
:1004E000FF90EF90DF9008954F925F926F927F920E |
:1004F0008F929F92AF92BF92CF92DF92EF92FF9234 |
:100500000F931F93CF93DF930E948C401092B52ED0 |
:100510001092A323AA247724BB24B39498E4492EF1 |
:10052000512C82E1682E01C0B02E0E948C4080E0E8 |
:1005300060E041EA58E422E00E94644481E090E0F7 |
:100540000E94F055AC0180E067E020E00E949D44ED |
:10055000AA2039F081E061E04FE958E420E00E94F0 |
:1005600064440A2D10E0049D7001059DF00C149D5B |
:10057000F00C1124C0E0D0E048016E01C00ED11E85 |
:1005800089E0C816D10484F44091FC28CE018F5F25 |
:10059000682F469DA00111244E0D5F1D4D50514CFA |
:1005A00083E020E00E946444C53059F498E0C91605 |
:1005B000D1043CF481E066E04DE958E420E00E947B |
:1005C0006444219688E490E0E80EF91EC630D10517 |
:1005D000A1F6772039F4AA2079F481E065E04B2D6B |
:1005E00020E00EC093E08916910434F082E066E0CA |
:1005F0004B2D21E000E005C082E065E04B2D21E0BD |
:1006000001E00E94E552082F8E3F31F4A394772435 |
:10061000739405E0B02E9CCF8D3F29F4AA947724E3 |
:1006200012E0B12E95CF8F3F41F48091A32381300A |
:1006300009F090C00E94BC398DC0C82FD0E0CA0D0F |
:10064000D11DC130D10569F4809167240E940381D6 |
:10065000809367248091A323813081F48093A52324 |
:100660005AC0C230D10551F48091792461E247EF3C |
:1006700029E70E94FF81809379244DC0C330D105C2 |
:1006800019F40E94BA7F4DC0C430D105E1F48091C5 |
:10069000F8288823A9F48091F82860E041E02BE64F |
:1006A0000E943B758093F8288091A323813099F5AF |
:1006B0008091F828813009F047C00E945F2944C02A |
:1006C0000E947D7B28C0C530D10529F58091F52891 |
:1006D0008823F1F48091F52860E041E020E70E9452 |
:1006E0003B758093F5288091A3238130D1F410913C |
:1006F000F528113009F018CF0E94AF2F892B19F07F |
:100700001093FA2802C01092FA280E94BC390CCF2C |
:100710000E94F87906C0C630D10519F40E94A97765 |
:1007200003CFC730D10519F40E948852FDCEC830DE |
:10073000D10551F48091022960E041E025E60E9454 |
:100740007E7680930229F0CE299709F0EDCE0E94A3 |
:10075000937CEACEDF91CF911F910F91FF90EF90A4 |
:10076000DF90CF90BF90AF909F908F907F906F90D1 |
:100770005F904F900895E0E8F0E01082A1E8B0E0CB |
:100780001C9210926F008081826880838C918B61B3 |
:100790008C938AE698E1909387008093860086ED9B |
:1007A00091E090938900809388000895579AE0EB38 |
:1007B000F0E0808183688083E1EBF0E080818160FC |
:1007C0008083E0E7F0E08081866080838FEF809314 |
:1007D000B30008951F920F920FB60F9211245F9AE3 |
:1007E0000F900FBE0F901F9018951F920F920FB68B |
:1007F0000F9211245F980F900FBE0F901F901895C5 |
:100800001092332F1092322F82E084BD85E085BD97 |
:1008100083EC87BDEEE6F0E08081826080830895FE |
:100820002091B7233091B8232F5F3F4F280F391FF6 |
:10083000C90108952091B7233091B823821B930BEF |
:1008400080709078892F869508952091B7233091F4 |
:10085000B8232F5F3F4F280F391F8091B723909106 |
:10086000B823A901481B590BCA0180709078892FC1 |
:10087000869599F308952FB7F8949091A72389232B |
:1008800098279093A7232FBF08954FB7F8943FB7A9 |
:10089000F8942091A7239091A623909589238223F1 |
:1008A00028272093A7233FBF4FBF08952FB7F89461 |
:1008B0009091A823892398279093A8232FBF2FB71F |
:1008C000F8949091A923892398279093A9232FBF67 |
:1008D0002FB7F8949091A723892398279093A72363 |
:1008E0002FBF08952FB7F8949091A92389239827B3 |
:1008F0009093A9232FBF0895282F9FB7F894809134 |
:10090000AA23282382278093AA239FBF3FB7F89466 |
:100910009091A9238091A7238095822789239827E6 |
:100920009093A9233FBF08952FB7F8949091AB23DC |
:10093000892398279093AB236093AC232FBF08950E |
:100940008091B3239091B423019799F488EE93E0BA |
:100950009093B6238093B52380E290E09093FB229E |
:100960008093FA2280E060E040EF58E422E00E94A9 |
:1009700064442091F6223091F72284E690E0A901A8 |
:10098000489F9001499F300D589F300D1124809150 |
:10099000B3239091B4238217930721F41092B423C8 |
:1009A0001092B3238091B3239091B423009729F040 |
:1009B00001969093B4238093B323349B04C0109288 |
:1009C000B2231092B123349917C08091B123909132 |
:1009D000B22301969093B2238093B1230A9761F4D6 |
:1009E0008091B3239091B423892B31F481E090E07E |
:1009F0009093B4238093B3232091F8223091F9226D |
:100A000084E690E0A901489F9001499F300D589FCE |
:100A1000300D11248091B1239091B2238217930756 |
:100A200009F4299808951F920F920FB60F920BB6F2 |
:100A30000F9211242F933F934F935F936F937F9364 |
:100A40008F939F93AF93BF93EF93FF933091A62320 |
:100A500020B1209523278091BF2382238095809306 |
:100A6000BF239091BE23922398279093BE232823DF |
:100A70002923922F93279093A62392238091A72333 |
:100A8000892B8093A7238091F928813001F58091EB |
:100A9000AF239091B02301969093B0238093AF231E |
:100AA0008091AF239091B023805E9E4281F488ECC8 |
:100AB00090E09093B6238093B52380E890E09093E4 |
:100AC000FB228093FA221092B0231092AF238091E0 |
:100AD000B92381508093B9238F5F89F489E0809393 |
:100AE000B9238091B7239091B82301969093B823AE |
:100AF0008093B7238091FC228F5F8093FC22222376 |
:100B000089F08091312F882311F40E94AB2581E078 |
:100B10008093312F1092AE231092AD231092B02308 |
:100B20001092AF23809129298823D9F08091312F09 |
:100B30008130B9F48091AD239091AE2301969093CA |
:100B4000AE238093AD232091292964E670E00E94B2 |
:100B50002F9430E06217730721F40E94B62510929B |
:100B6000312F0E94A0848091B5239091B6230097E5 |
:100B7000D9F08B30910530F00A979093B62380938B |
:100B8000B52304C01092B6231092B5238091FA22A7 |
:100B90009091FB222091B5233091B6238223932399 |
:100BA000892B09F090C006C08FEF9FEF9093FB2236 |
:100BB0008093FA22479A4091A623242F30E0207F89 |
:100BC00030702115310519F486E48093BD2380919E |
:100BD000BD2381508093BD23882339F4942F907FC7 |
:100BE0008091A823892B8093A8232115310519F41E |
:100BF00081E08093BC238091BC2381508093BC23EF |
:100C0000882351F48FE08093BC23942F907F8091B0 |
:100C1000A923892B8093A9232115310519F486E492 |
:100C20008093BB238091BB2381508093BB23882377 |
:100C300051F48FE08093BB23942F907F8091AA235F |
:100C4000892B8093AA23232B19F486E48093BA235B |
:100C50008091BA2381508093BA238823A9F480918C |
:100C6000AC23813011F484E107C0823011F488E0B4 |
:100C700003C0833049F481E08093BA23407F8091A0 |
:100C8000AB23842B8093AB238091322F9091332F11 |
:100C9000892B49F08091322F9091332F01979093B7 |
:100CA000332F8093322F8091342F9091352F892BC1 |
:100CB00061F08091342F9091352F01979093352FCB |
:100CC0008093342F02C0479876CFFF91EF91BF9168 |
:100CD000AF919F918F917F916F915F914F913F91D4 |
:100CE0002F910F900BBE0F900FBE0F901F90189575 |
:100CF0000F931F930E948C408CE067E04BEB5AE40B |
:100D000020E00E9464448091852390918623805046 |
:100D1000904184F00E940E4D60917F23709180235A |
:100D200080918123909182230E9401927093882365 |
:100D3000609387230E94E14D40918723509188233F |
:100D400085E065E020E030E000E00E9453478AE063 |
:100D500065E046EB5AE420E00E9464444091C028DC |
:100D60005091C12880E066E025E030E00E944A49C9 |
:100D700080E40E943B84182F80E463E00E94948406 |
:100D8000182B49F08091C0289091C1280A96909321 |
:100D9000C1288093C02880E80E943B84182F80E8F7 |
:100DA00063E00E949484182B49F08091C0289091B0 |
:100DB000C1280A979093C1288093C02880E20E949E |
:100DC0003B84882309F49FCF80EF0E943B841F91CE |
:100DD0000F9108951F9311E00E948C4082E390E0F0 |
:100DE0000E94F055AC0180E068E022E00E949D4442 |
:100DF00083E063E048ED5AE420E00E94644483E02D |
:100E000064E048EC5AE420E00E94644481E090E011 |
:100E10000E94F055AC0180E067E020E00E949D4414 |
:100E2000113061F481E063E046EC5AE420E00E9476 |
:100E3000644481E064E044EC5AE40BC081E063E088 |
:100E400042EC5AE420E00E94644481E064E040EC1B |
:100E50005AE420E00E94644480E80E943B848111AF |
:100E600011E080E40E943B84811112E080E10E9445 |
:100E700045848823F9F080916724882359F4113040 |
:100E800019F40E945832A8CF123009F0A5CF0E9461 |
:100E9000AE31A2CF80916724813009F09DCF11300F |
:100EA00019F40E94AF3298CF123009F095CF0E940A |
:100EB000033292CF80E20E943B84882309F4B0CFB2 |
:100EC00080EF0E943B841F9108956F927F928F92D2 |
:100ED0009F92AF92BF92CF92DF92EF92FF920F93C9 |
:100EE0001F93CF93DF93AA249924BB24B39438E4AF |
:100EF000632E712C22E1822E01C0B12E0E948C4003 |
:100F000080E060E04CEE5AE422E00E94644481E01C |
:100F100090E00E94F055AC0180E067E020E00E9484 |
:100F20009D44AA2039F081E061E04AEE5AE420E0D5 |
:100F30000E946444CA2CDD24C69C8001C79C100D0D |
:100F4000D69C100D1124C0E0D0E07E01EC0CFD1CFD |
:100F500086E0E816F10484F44091FC28CE018F5F0E |
:100F6000682F489DA0011124400F511F4A5F564B26 |
:100F700083E020E00E946444C53059F495E0E9160E |
:100F8000F1043CF481E066E048EE5AE420E00E947F |
:100F900064442196085B1F4FC630D105B1F69920F5 |
:100FA00069F4AA2029F481E066E04B2D20E00AC014 |
:100FB00082E065E04B2D21E001E005C082E066E0C3 |
:100FC0004B2D21E000E00E94E552182F8E3F31F4B6 |
:100FD000A3949924939495E0B92EA3CF8D3F29F43F |
:100FE000AA94992482E0B82E9CCF8F3FE1F1C82FBC |
:100FF000D0E0CA0DD11DC130D10521F482E00E949C |
:10100000605705C0C230D10511F40E94057280916D |
:101010006724882361F4C330D10519F40E94583243 |
:101020001CC0C430D10599F40E94AE3116C0809125 |
:101030006724813061F4C330D10519F40E94AF32C6 |
:101040000CC0C430D10519F40E94033206C0C5306B |
:10105000D10519F40E94748250CF269709F04DCF24 |
:101060000E94B5514ACFDF91CF911F910F91FF9010 |
:10107000EF90DF90CF90BF90AF909F908F907F9038 |
:101080006F900895DC014AEA20E030E007C0FD01DE |
:10109000E20FF31F8081480F2F5F3F4F261737075E |
:1010A000B0F3842F08952FB7F8943998389A909117 |
:1010B000B9009C7F9093B9009AE29093B800109287 |
:1010C000C0231092C2231092C323882379F0E3E453 |
:1010D000FFE210821182128213821482158216821C |
:1010E000178238968FE2E33AF80799F778942FBF82 |
:1010F0000895EF92FF920F931F931092C0230CEB71 |
:1011000010E084E9F801808380E880831092BD00BC |
:101110001092BA008BEBE82EF12CF701108210929E |
:10112000B9001092B8001092C42380E00E94538846 |
:10113000F701108285E8F80180838091C7238260DF |
:101140008093C7231F910F91FF90EF9008951F92F6 |
:101150000F920FB60F920BB60F9211242F933F935D |
:101160004F938F939F93AF93BF93EF93FF93909180 |
:10117000C0239F5F9093C0239150943009F4F4C032 |
:10118000953058F4913099F19130A0F0923009F4F3 |
:101190006CC0933009F06EC2CEC0963009F4CEC157 |
:1011A000963008F41CC1953109F438C2963109F023 |
:1011B00061C236C281E08093C4238091C2238C3007 |
:1011C00070F01092C9231092C8231092C22385E0B8 |
:1011D0008093C0238091C323880F8D5A04C08091CF |
:1011E000C223880F8E5A8093BB0085E838C2E091F5 |
:1011F000C223F0E043E0EE0FFF1F4A95E1F7ED5BFD |
:10120000F04D81818093BB0085E88093BC00E09124 |
:10121000C223F0E033E0EE0FFF1F3A95E1F7ED5BFC |
:10122000F04D808180FF85C0E091C223F0E023E093 |
:10123000EE0FFF1F2A95E1F7EB5BF04D80818823CD |
:1012400029F08091FF22873008F42AC28091C823B8 |
:101250009091C923892B09F023C28091CA239091D0 |
:10126000CB23892B09F01CC264C04091C22320917A |
:10127000CA233091CB2381E090E002C0880F991FF0 |
:101280004A95E2F782239323892B69F0E091C223E8 |
:10129000F0E093E0EE0FFF1F9A95E1F7E95BF04D68 |
:1012A00080E180830BC0E091C223F0E083E0EE0F89 |
:1012B000FF1F8A95E1F7E95BF04D1082E091C223B0 |
:1012C000A091C223F0E0B3E0EE0FFF1FBA95E1F763 |
:1012D000E95BF04D9081990F990F990FB0E043E0D1 |
:1012E000AA0FBB1F4A95E1F7AB5BB04D8C9187709D |
:1012F000982B9093BB0085E88093BC004091C2235B |
:101300002091C8233091C92381E090E002C0880F6A |
:10131000991F4A95E2F782239323892B51F08BE39F |
:101320009FE29093CE238093CD2388E08093CC23BB |
:10133000B7C184E070C1E091CD23F091CE238191BB |
:101340008093BB0085E88093BC00F093CE23E093AC |
:10135000CD238091CC2381508093CC23882309F422 |
:101360009FC19093C0239CC18091B900803321F527 |
:101370008091D023882329F48091C2238F5F8093AA |
:10138000D023E091C223F0E033E0EE0FFF1F3A9547 |
:10139000E1F7ED5BF04D83818F778F3769F0E09156 |
:1013A000C223F0E023E0EE0FFF1F2A95E1F7ED5B8B |
:1013B000F04D83818F5F83831092C02384E98093F3 |
:1013C000BC008AE090E09093FE228093FD22809101 |
:1013D000C2238F5F8093C2231092C0233AC18091B1 |
:1013E000B9008034B9F1E091C323F0E093E0EE0F4F |
:1013F000FF1F9A95E1F7ED5BF04D83818F77838333 |
:101400008091C3238F5F8093C3238091C3238C304B |
:10141000A0F01092C3231092CB231092CA23809184 |
:10142000CF238F5F8093CF238C3038F01092CF235F |
:101430008091C7238D7F8093C7238091C7238160CC |
:101440008093C7231092C02384E98093BC0010923C |
:10145000C4236DC0E091C323F0E083E0EE0FFF1FD3 |
:101460008A95E1F7ED5BF04D838180688383E0919D |
:10147000C323F0E0B3E0EE0FFF1FBA95E1F7ED5B99 |
:10148000F04D808180FF2DC0E091C323F0E0A3E008 |
:10149000EE0FFF1FAA95E1F7E95BF04DE081EE2327 |
:1014A00051F0E031D9F58BE39FE29093CE23809306 |
:1014B000CD2388E031C08091C32390E0E3E0880F22 |
:1014C000991FEA95E1F7885B904D9093CE23809326 |
:1014D000CD239091C3238091CF239817E1F483E02B |
:1014E0001BC08091C32390E043E0880F991F4A9569 |
:1014F000E1F7885B904D9093CE238093CD2380912C |
:10150000C72381FD06C09091C3238091CF239817F4 |
:1015100011F482E001C081E08093CC238091CC2340 |
:10152000813011F485E801C085EC8093BC00809186 |
:10153000D0238093C5231092D023B2C08091BB00EA |
:10154000E091CD23F091CE238193F093CE23E093CD |
:10155000CD238091CC2381508093CC23823010F016 |
:1015600085EC03C0813029F485E88093BC0086E0D7 |
:1015700052C08091C72381FF26C0E091C323F0E0D1 |
:1015800033E0EE0FFF1F3A95E1F7ED5BF04D8681FA |
:101590008A3F71F4E091C323F0E023E0EE0FFF1FD8 |
:1015A0002A95E1F7ED5BF04D8081816080830BC06F |
:1015B000E091C323F0E093E0EE0FFF1F9A95E1F76F |
:1015C000ED5BF04D10828091C3238F5F8093C32326 |
:1015D0008091C3238C30A0F01092C3231092CB23B0 |
:1015E0001092CA238091CF238F5F8093CF238C30BA |
:1015F00038F01092CF238091C7238D7F8093C7232B |
:101600001092C02384E98093BC008091C72381603D |
:101610008093C72343C08093C02342C080E8E3CDBA |
:101620001092C02384E98093BC001092C4238AE006 |
:1016300090E09093FE228093FD228091C12382301E |
:1016400088F48091C1238F5F8093C12382E18093CE |
:10165000C0238091C7238E7F8093C72385EA809320 |
:10166000BC001EC01092C1238091C723816080936B |
:10167000C72316C01092C02384E98093BC008091D8 |
:10168000C72381608093C7238AE090E09093FE2275 |
:101690008093FD221092C2231092C3231092C42380 |
:1016A000FF91EF91BF91AF919F918F914F913F919A |
:1016B0002F910F900BBE0F900FBE0F901F9018959B |
:1016C00081E008951F93CF93DF93182F8091C62355 |
:1016D000882311F081E093C01D3008F08FC01123E2 |
:1016E00089F0E12FF0E053E0EE0FFF1F5A95E1F78C |
:1016F000E55CF04D838187FF81C0808180FD02C061 |
:1017000083E07DC080913B2F823011F084E077C070 |
:10171000EBE3FFE29AEA8191980F8FE2E234F80757 |
:10172000D1F78081981711F085E069C080ED97E0CE |
:101730000E941084EC018091C72380FD05C0CE017A |
:101740000E941A848823B9F3112369F48FEF90E083 |
:101750009093C9238093C823E4E4FFE240E050E083 |
:1017600061E070E00CC0212F30E02150304081E07A |
:1017700090E002C0880F991F2A95E2F7E9CF2091E7 |
:10178000C8233091C923CB01042E02C0880F991FB2 |
:101790000A94E2F782239323892B11F0108211829D |
:1017A0004F5F5F4F38964C30510549F71092C22376 |
:1017B00015EA1092C0238091C7238E7F8093C723A0 |
:1017C0001093BC008091C72380FD05C0CE010E940C |
:1017D0001A848823B9F38091C8239091C923892B57 |
:1017E00029F0CE010E941A84882319F38091C8231E |
:1017F0009091C923892B11F480E001C082E0DF9130 |
:10180000CF911F9108951F920F920FB60F920BB6B2 |
:101810000F9211242F938F939F93EF93FF939091A7 |
:10182000C8002091CE00E0911324EF5FEF7180910A |
:101830001424E81711F482E008C0892F8871E0931E |
:101840001324F0E0EF50FC4D208380931524FF918A |
:10185000EF919F918F912F910F900BBE0F900FBE24 |
:101860000F901F9018951F920F920FB60F920BB604 |
:101870000F9211248F939F93EF93FF9390911124D4 |
:1018800080911224981769F0E0911224EF5FEF71B4 |
:10189000E0931224F0E0EF52FC4D80818093CE0063 |
:1018A00005C08091C9008F7D8093C900FF91EF91A1 |
:1018B0009F918F910F900BBE0F900FBE0F901F90B6 |
:1018C00018959C0110921124109212241092132446 |
:1018D0001092142497FF04C082E08093C8003F77E1 |
:1018E0003093CD002093CC0088E98093C90086E036 |
:1018F0008093CA000895909113248091142498171E |
:1019000019F420E031E012C0E0911424EF5FEF7190 |
:10191000E0931424F0E0EF50FC4D30812091152429 |
:10192000922F80E0AC01430F511D9A01C901089527 |
:10193000482F909111249F5F9F71809112249817D6 |
:10194000E1F3E92FF0E0EF52FC4D40839093112436 |
:101950008091C90080628093C90080911524382F3E |
:1019600020E0240F311DC9010895CF93DF93EC01CE |
:1019700003C021960E94988C88818823D1F7DF913B |
:10198000CF910895CF93DF93EC0102C00E94988C11 |
:10199000FE01219684918823C9F7DF91CF910895A4 |
:1019A000809113242091142490E04F96821B91097A |
:1019B0006FE170E00E944394089580911424809315 |
:1019C000132408951F920F920FB60F920BB60F9229 |
:1019D00011242F933F934F935F936F937F938F9334 |
:1019E0009F93AF93BF93CF93DF93EF93FF93809138 |
:1019F0008B23853011F0843089F54091C600209109 |
:101A00006324309164248091652490916624281B7E |
:101A1000390B37FF02C0205C3F4F2F3331050CF0EC |
:101A2000AAC0E0916324F0916424408380916324F0 |
:101A30009091642401969093642480936324809110 |
:101A40006324909164248356944209F094C083E205 |
:101A500094E290936424809363248DC07091C600B7 |
:101A600080911624882309F086C060912024662383 |
:101A700071F4733279F47093A32F81E08093202462 |
:101A800083E290E0909322248093212474C0643BED |
:101A900008F064C0A62FB0E02091212430912224C8 |
:101AA0007D3069F0AD55B04D7C936F5F609320241D |
:101AB000270F311D30932224209321245CC0FD0187 |
:101AC000EF55F04D9081ED01CE55D04D8881A901A3 |
:101AD000491B5109481B51095F70509322244093C0 |
:101AE00021242081CA0136E0969587953A95E1F741 |
:101AF000835C821729F59881842F8F73835C891703 |
:101B0000F9F4AD55B04D7C936F5F609317249091BD |
:101B100089238091A52F9817F1F481E080931624F2 |
:101B20008091A52F8235B9F42CE088E190E00FB6C2 |
:101B3000F894A895809360000FBE209360000BC0BE |
:101B400080911B2490911C24019690931C248093D7 |
:101B50001B2410921624109220240DC080911D2465 |
:101B600090911E24019690931E2480931D24109220 |
:101B7000202410921624FF91EF91DF91CF91BF9115 |
:101B8000AF919F918F917F916F915F914F913F9115 |
:101B90002F910F900BBE0F900FBE0F901F901895B6 |
:101BA000209163243091642480916524909166246F |
:101BB0002817390711F4E0E01BC0E0916524F0918B |
:101BC0006624E0818091652490916624019690932B |
:101BD00066248093652480916524909166248356C1 |
:101BE000944231F483E294E29093662480936524D6 |
:101BF0008E2F0895DC01209163243091642480911C |
:101C00006524909166242817390711F480E008951F |
:101C1000E0916524F091662480818C938091652405 |
:101C20009091662401969093662480936524809118 |
:101C30006524909166248356944211F081E00895C2 |
:101C400083E294E2909366248093652481E0089572 |
:101C50009093C5008093C4008091C0008D7F8093D5 |
:101C6000C00086E08093C2008091C1008B7F80938A |
:101C7000C10002C08091C6008091C00087FDFACFEC |
:101C80008091C10088618093C1008091C10080680B |
:101C90008093C10083E294E290936624809365244C |
:101CA00080916524909166249093642480936324AA |
:101CB0000895E1ECF0E08081877F808323982B9862 |
:101CC0000895239A2B98E1ECF0E08081886080836E |
:101CD0000895982F8091C00085FFFCCF9093C60097 |
:101CE0000895FC0107C08091C00085FFFCCF909350 |
:101CF000C600319690819923B1F70895FC0107C081 |
:101D00008091C00085FFFCCF9093C60031969491DE |
:101D10009923B1F7089550911724565033E043E0CA |
:101D200048C0E32FF0E0ED55F04D80813F5FE32F99 |
:101D3000F0E0ED55F04D20812D533F5FE32FF0E0B3 |
:101D4000ED55F04D70813F5FE32FF0E03350ED55DE |
:101D5000F04D6081E42FF0E0922F92959F708D53AB |
:101D6000880F880F892BED55F04D8083E42FEF5FAE |
:101D7000513081F0972F9D53F0E02295207F892FDD |
:101D800086958695282BED55F04D2083E42FEE5F48 |
:101D9000523011F44E2F10C03C5F5350F0E092953A |
:101DA000990F990F907C6D53962BED55F04D9083C4 |
:101DB0004D5F552309F0B5CF86EA9FE29093192431 |
:101DC00080931824435040931A24089580918A23C5 |
:101DD000813071F58091C00085FFFCCF8BE180934D |
:101DE000C6008091C00085FFFCCF8BE18093C600C8 |
:101DF0008091C00085FFFCCF85E58093C60080916F |
:101E0000C00085FFFCCF8AEA8093C6008091C000A5 |
:101E100085FFFCCF1092C60081E080938B2384EF76 |
:101E200091E024EF31E0F9013197F1F70197D9F70B |
:101E3000089585E080938B2384EF91E024EF31E0D7 |
:101E4000F9013197F1F70197D9F70895DF92EF92F1 |
:101E5000FF920F931F93DF93CF93CDB7DEB78B85A0 |
:101E60007C8593E2909376308F59809377308A8582 |
:101E700080937830DE011D96772329F4EE24FF2429 |
:101E800040E050E007C0ED84FE84DE0151964F85AE |
:101E90005889715003E010E030E07EC0F701E30F95 |
:101EA000F11D90813F5F4150504091F4772309F438 |
:101EB000C4C0FD013296ED90FC90DF0112960190B6 |
:101EC000F081E02D7150309709F4B6C0AF0130E0D9 |
:101ED000F701E30FF11DD0803F5F4150504099F46E |
:101EE000772311F460E023C0FD013296ED90FC9061 |
:101EF000DF0112964081518171504115510511F455 |
:101F000060E014C030E0F701E30FF11D60813F5F36 |
:101F10004150504061F4772351F0FD013296ED902D |
:101F2000FC90DF01129640815181715030E0892F81 |
:101F300086958695835CF801EA58FF4C80832D2DA9 |
:101F400022952F70892F90E083709070F4E0880FB5 |
:101F5000991FFA95E1F7282B235CF801E958FF4C0B |
:101F600020838D2D90E08F709070880F991F880FBF |
:101F7000991F262F2295269526952370282B235CC2 |
:101F8000F801E858FF4C20836F73635CF801E75851 |
:101F9000FF4C60830C5F1F4F4115510509F07ECF48 |
:101FA00090E020E030E006C0EA58FF4C8081280F26 |
:101FB000311D9F5FE92FF0E0E017F107A8F33F70B4 |
:101FC000C90146E0969587954A95E1F7835CF8014B |
:101FD000EA58FF4C8083C80101962F73235CFC01F3 |
:101FE000EA58FF4C20830196FC01EA58FF4C2DE093 |
:101FF0002083AC014F5F5F4F1092002320E00CC0A4 |
:102000008091C00085FFFCCFE22FF0E0EA58FF4C42 |
:1020100080818093C6002F5F822F90E08417950700 |
:1020200078F381E080930023CF91DF911F910F918E |
:10203000FF90EF90DF90089530E060E0DD2477CFEF |
:10204000DF93CF930F92CDB7DEB720918B23213052 |
:10205000A9F592E099834DB75EB7475050400FB64F |
:10206000F8945EBF0FBE4DBFEDB7FEB7319685E762 |
:10207000ADB7BEB711968C9391832283CE010196A2 |
:102080009483838381E090E0968385830E94268FEA |
:1020900084E080938B2324EF31E04DB75EB7495F36 |
:1020A0005F4F0FB6F8945EBF0FBE4DBF44EF51E0D7 |
:1020B000CA010197F1F721503040D1F70F90CF912D |
:1020C000DF910895DF93CF930F92CDB7DEB7909154 |
:1020D0008B239130A1F599832DB73EB7275030401F |
:1020E0000FB6F8943EBF0FBE2DBFEDB7FEB73196C9 |
:1020F00085E7ADB7BEB711968C9382E0818392835A |
:10210000CE0101969483838381E090E0968385835A |
:102110000E94268F83E080938B2324EF31E08DB7DC |
:102120009EB707960FB6F8949EBF0FBE8DBF44EFC3 |
:1021300051E0CA010197F1F721503040D1F70F90DB |
:10214000CF91DF9108951F93DF93CF930F92CDB777 |
:10215000DEB790918B23913099F519822DB73EB758 |
:10216000275030400FB6F8943EBF0FBE2DBFEDB7DD |
:10217000FEB7319685E7ADB7BEB711968C9312E0E6 |
:1021800011839283CE0101969483838381E090E052 |
:10219000968385830E94268F10938B2324EF31E052 |
:1021A0008DB79EB707960FB6F8949EBF0FBE8DBF32 |
:1021B00044EF51E0CA010197F1F721503040D1F7C7 |
:1021C0000F90CF91DF911F910895FF920F931F936E |
:1021D000DF93CF930F92CDB7DEB7082FF62E142FD3 |
:1021E0000E94618E812F6AE00E94239489838DB7BB |
:1021F0009EB707970FB6F8949EBF0FBE8DBFEDB781 |
:10220000FEB73196ADB7BEB711960C93F18281E05F |
:102210008283CE0101969483838381E090E096834C |
:1022200085830E94268F8DB79EB707960FB6F894C8 |
:102230009EBF0FBE8DBF809100238823E1F30E94D3 |
:10224000598E0F90CF91DF911F910F91FF900895BC |
:102250005058BB27AA270ED0A0C169D130F06ED14B |
:1022600020F031F49F3F11F41EF45EC10EF4E095AE |
:10227000E7FB54C1E92FB3D180F3BA1762077307A4 |
:102280008407950718F071F49EF5CBC10EF4E09524 |
:102290000B2EBA2FA02D0B01B90190010C01CA0120 |
:1022A000A0011124FF27591B99F0593F50F4503ECB |
:1022B00068F11A16F040A22F232F342F4427585FBD |
:1022C000F3CF469537952795A795F0405395C9F7D5 |
:1022D0007EF41F16BA0B620B730B840BBAF091508D |
:1022E000A1F0FF0FBB1F661F771F881FC2F70EC02C |
:1022F000BA0F621F731F841F48F4879577956795FF |
:10230000B795F7959E3F08F0B3CF9395880F08F0E7 |
:102310009927EE0F979587950895DCD008F481E012 |
:10232000089514D1E3954AC10CD037C107D140F0CC |
:10233000FED030F021F45F3F19F0F0C0511172C1AE |
:10234000F3C04DD198F39923C9F35523B1F3951BED |
:10235000550BBB27AA2762177307840738F09F5FC6 |
:102360005F4F220F331F441FAA1FA9F333D00E2E35 |
:102370003AF0E0E830D091505040E695001CCAF7A2 |
:1023800029D0FE2F27D0660F771F881FBB1F261767 |
:1023900037074807AB07B0E809F0BB0B802DBF013A |
:1023A000FF2793585F4F2AF09E3F510568F0B6C053 |
:1023B00039C15F3FECF3983EDCF3869577956795DE |
:1023C000B795F7959F5FC9F7880F911D96958795EB |
:1023D00097F90895E1E0660F771F881FBB1F62170A |
:1023E00073078407BA0720F0621B730B840BBA0BC8 |
:1023F000EE1F88F7E095089504D06894B11112C1DA |
:102400000895F5D088F09F5790F0B92F9927B751CC |
:10241000A0F0D1F0660F771F881F991F1AF0BA95A8 |
:10242000C9F712C0B13081F0FCD0B1E00895F9C015 |
:10243000672F782F8827B85F39F0B93FCCF386959E |
:1024400077956795B395D9F73EF4909580957095FB |
:1024500061957F4F8F4F9F4F0895E89409C097FB78 |
:102460003EF490958095709561957F4F8F4F9F4F6B |
:102470009923A9F0F92F96E9BB279395F6958795AF |
:1024800077956795B795F111F8CFFAF4BB0F11F472 |
:1024900060FF1BC06F5F7F4F8F4F9F4F16C0882319 |
:1024A00011F096E911C0772321F09EE8872F762F4F |
:1024B00005C0662371F096E8862F70E060E02AF090 |
:1024C0009A95660F771F881FDAF7880F969587957C |
:1024D00097F90895990F0008550FAA0BE0E8FEEF51 |
:1024E00016161706E807F907C0F012161306E407D8 |
:1024F000F50798F0621B730B840B950B39F40A26D1 |
:1025000061F0232B242B252B21F408950A2609F4AE |
:10251000A140A6958FEF811D811D089597F99F67B2 |
:1025200080E870E060E008959FEF80EC089500245B |
:102530000A941616170618060906089500240A9428 |
:1025400012161306140605060895EECF50D0E8F3D0 |
:10255000E894E0E0BB279F57F0F02AED3FE049EC1C |
:1025600006C0EE0FBB0F661F771F881F28F0B23A18 |
:1025700062077307840728F0B25A620B730B840B4F |
:10258000E3959A9572F7803830F49A95BB0F661FE1 |
:10259000771F881FD2F79048F5C0092E0394000CCE |
:1025A00011F4882352F0BB0F40F4BF2B11F460FFED |
:1025B00004C06F5F7F4F8F4F9F4F0895EF93E0FFF1 |
:1025C00006C0A2EA2AED3FE049EC5FEB53DEE5DF0F |
:1025D0000F90039401FC9058E0EBF0E0DFC057FD52 |
:1025E0009058440F551F59F05F3F71F04795880F81 |
:1025F00097FB991F61F09F3F79F087950895121618 |
:1026000013061406551FF2CF4695F1DF08C01616C3 |
:1026100017061806991FF1CF869571056105089474 |
:102620000895E894BB2766277727CB0197F908958B |
:1026300051DF08F48FEF08950BD0AFCF78DF28F08B |
:102640007DDF18F0952309F069CF6ECF1124EACF12 |
:10265000C6DFA0F3959FD1F3950F50E0551F629F01 |
:10266000F001729FBB27F00DB11D639FAA27F00DEB |
:10267000B11DAA1F649F6627B00DA11D661F829F12 |
:102680002227B00DA11D621F739FB00DA11D621FF7 |
:10269000839FA00D611D221F749F3327A00D611D14 |
:1026A000231F849F600D211D822F762F6A2F1124F6 |
:1026B0009F5750408AF0E1F088234AF0EE0FFF1F49 |
:1026C000BB1F661F771F881F91505040A9F79E3F80 |
:1026D000510570F023CFA6CF5F3FECF3983EDCF3BB |
:1026E000869577956795B795F795E7959F5FC1F7BD |
:1026F000FE2B880F911D9695879597F9089577DFA2 |
:10270000E0F09E37D8F09639B8F49E3848F4672F39 |
:10271000782F8827985FF9CF869577956795939559 |
:102720009539D0F3B62FB1706B0F711D811D20F458 |
:10273000879577956795939508C022C073CF9F932F |
:1027400005DF0F9007FCEE5F39CF882371F4772304 |
:1027500021F09850872B762F07C0662311F4992714 |
:102760000DC09051862B70E060E02AF09A95660FBC |
:10277000771F881FDAF7880F9695879597F9089540 |
:102780009F3F31F0915020F4879577956795B795E5 |
:10279000880F911D9695879597F908959F938F932C |
:1027A0007F936F93FF93EF939B01AC0145DFEF9114 |
:1027B000FF9105D02F913F914F915F913DCFDF93D6 |
:1027C000CF931F930F93FF92EF92DF927B018C01C7 |
:1027D000689405C0DA2EEF013BDFFE01E894A59175 |
:1027E0002591359145915591AEF3EF0143DDFE0101 |
:1027F0009701A801DA9479F7DF90EF90FF900F919D |
:102800001F91CF91DF910895629FD001739FF001D6 |
:10281000829FE00DF11D649FE00DF11D929FF00D70 |
:10282000839FF00D749FF00D659FF00D9927729FA7 |
:10283000B00DE11DF91F639FB00DE11DF91FBD0132 |
:10284000CF0111240895991B79E004C0991F9617B0 |
:1028500008F0961B881F7A95C9F780950895AA1BE2 |
:10286000BB1B51E107C0AA1FBB1FA617B70710F07B |
:10287000A61BB70B881F991F5A95A9F780959095AD |
:10288000BC01CD01089597FB092E07260AD077FDDC |
:1028900004D0E5DF06D000201AF4709561957F4FD3 |
:1028A0000895F6F7909581959F4F0895A1E21A2E0D |
:1028B000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1FE4 |
:1028C000A217B307E407F50720F0A21BB30BE40B34 |
:1028D000F50B661F771F881F991F1A9469F760957B |
:1028E0007095809590959B01AC01BD01CF01089535 |
:1028F00097FB092E05260ED057FD04D0D7DF0AD04E |
:10290000001C38F450954095309521953F4F4F4F1E |
:102910005F4F0895F6F790958095709561957F4F7C |
:102920008F4F9F4F0895FB01DC010D900020E9F7C8 |
:10293000119705900D920020E1F70895FB01DC014D |
:1029400005900D920020E1F70895FB01DC01415054 |
:10295000504030F08D910590801919F40020B9F79E |
:10296000881B990B0895FB0155915523A9F0BF01D0 |
:10297000DC014D9145174111E1F759F4CD01059066 |
:10298000002049F04D9140154111C9F3FB0141115F |
:10299000EFCF81E090E001970895DC0101C06D93D5 |
:1029A00041505040E0F70895FB019F01E894423008 |
:1029B000C4F04532B4F44A3029F497FB1EF49095E4 |
:1029C00081959F4F642F77270E942F94805D8A33D3 |
:1029D0000CF0895D8193CB010097A1F716F45DE2BD |
:1029E00051931082C9010C945495FB019F01423010 |
:1029F00074F0453264F4642F77270E942F94805D31 |
:102A00008A330CF0895D8193CB010097A1F7108286 |
:102A1000C9010C945495DC01CB01FC01F999FECF5E |
:102A200006C0F2BDE1BDF89A319600B40D92415056 |
:102A30005040B8F70895F999FECF92BD81BDF89A3C |
:102A4000992780B50895A6E1B0E044E050E00C94E9 |
:102A50000D95A8E1B0E042E050E00C940D95DC014A |
:102A6000CB0103C02D910E943A9541505040D0F7C0 |
:102A70000895262FF999FECF1FBA92BD81BD20BDC2 |
:102A80000FB6F894FA9AF99A0FBE01960895242F7A |
:102A90000E943A95252F0E943A950C944F950E94DA |
:102AA0003995272F0C943A95DC01FC01672F719121 |
:102AB0007723E1F7329704C07C916D937083629124 |
:0C2AC000AE17BF07C8F30895F894FFCFCD |
:102ACC0002014E6F7420666F726D617420686172C2 |
:102ADC006469736B20433F00201A20202020201BA8 |
:102AEC0020202020456E64652020204F4B00201AAA |
:102AFC0020202020201B20202020656E64202020F8 |
:102B0C00204F4B00201A20202020201B202020208A |
:102B1C0066696E202020204F4B00201A2020202098 |
:102B2C00201B2020202045696E646520204F4B001F |
:102B3C00201820202020201920202020456E64659C |
:102B4C002020204F4B00201820202020201920204E |
:102B5C002020656E64202020204F4B002018202060 |
:102B6C00202020192020202066696E202020204F54 |
:102B7C004B002018202020202019202020204569DF |
:102B8C006E646520204F4B00201820202020201937 |
:102B9C0020202020456E6465200020182020202055 |
:102BAC00201920202020656E642020002018202071 |
:102BBC00202020192020202066696E20200020185B |
:102BCC002020202020192020202045696E646500DB |
:102BDC00456E64652020204F4B00656E64202020DC |
:102BEC00204F4B0066696E202020204F4B0045691A |
:102BFC006E646520204F4B00546173746520312046 |
:102C0C0053656B756E6465004B6565702074686503 |
:102C1C0020627574746F6E004D61696E74656E65BB |
:102C2C007A206C6520626F75746F6E00486F7564E6 |
:102C3C00206465206B6E6F70202020006C616E67C5 |
:102C4C00206665737468616C74656E2E00707265B5 |
:102C5C007373656420666F722031207365636F6EC9 |
:102C6C006400656E666F6E6365652070656E642EBC |
:102C7C002031207365630031207365636F6E64656A |
:102C8C0020696E67656472756B742E00566572628E |
:102C9C00696E64756E67207A756D204D4B20697373 |
:102CAC007400436F6E6E656374696F6E20746F2071 |
:102CBC004D4B20697300436F6E6E6578696F6E20A3 |
:102CCC00E0204D4B206573740056657262696E642A |
:102CDC00696E67206D6574204D4B206973006175BA |
:102CEC00662057693233322065696E676573746587 |
:102CFC006C6C740073657420746F205769323332B6 |
:102D0C00006D6973206120576932333200696E6738 |
:102D1C00657374656C64206F7020576932333200B0 |
:102D2C00617566204B6162656C2065696E676573C1 |
:102D3C0074656C6C740073657420746F206B6162C5 |
:102D4C00656C206F6E20535632006D6973206120C4 |
:102D5C006B6162656C207375722053563200766914 |
:102D6C0061206B6162656C76657262696E64696E16 |
:102D7C006700506F727461626C6573204B6F707476 |
:102D8C00657220546F6F6C00506F727461626C6569 |
:102D9C00204B6F7074657220546F6F6C200066FC52 |
:102DAC00722046432056657220302E3837780066E4 |
:102DBC006F722046432056657220302E38377800CB |
:102DCC00706F75722046432056657220302E38374E |
:102DDC007800566F6F722046432056657220302E55 |
:102DEC0038377800474E552047504C204C69636566 |
:102DFC006E73650041546D65676120363434004153 |
:102E0C00546D65676120363434500041546D6567EC |
:102E1C0061203132383450004861726477617265D8 |
:102E2C0020312E3200486172647761726520312E38 |
:102E3C00325700486172647761726520312E33001D |
:102E4C00486172647761726520312E335700486196 |
:102E5C0072647761726520332E39002020204C6516 |
:102E6C00747A746520506F736974696F6E202020BA |
:102E7C00002020206C617374202020706F736974A3 |
:102E8C00696F6E202020002020206465726E6965B9 |
:102E9C00726520706F736974696F6E20002020203A |
:102EAC004C61617473746520706F7369746965200B |
:102EBC00202000204272656974656E677220204C78 |
:102ECC00E46E67656E67722000206C6174697475BE |
:102EDC00646520206C6F6E67697475646520006290 |
:102EEC0072656564746567722E206C656E677465B7 |
:102EFC0067722E20006CF6736368656E20202020AC |
:102F0C00202020207765697465720064656C657497 |
:102F1C006520202020202020202020657869742026 |
:102F2C00007375707072696D6572202020202020EE |
:102F3C0020706C7573200077697373656E20202088 |
:102F4C0020202020202076657264657200202020CD |
:102F5C0020476F6F676C652045696E6761626520FD |
:102F6C0020200020202020476F6F676C6520496E61 |
:102F7C007075742020202020002020202020206725 |
:102F8C00656CF673636874202020202020200020BC |
:102F9C00202020202064656C65746564202020202E |
:102FAC002020202000202020202073757070726952 |
:102FBC006D65202020202020202000202020202093 |
:102FCC002067657769737420202020202020202022 |
:102FDC000053756368652046432E2E2E0073656181 |
:102FEC00726368696E672046432E2E2E00636865F7 |
:102FFC00726368616E742046432E2E2E007A6F65C4 |
:10300C006B2046432E2E2E00456E64652000656EA7 |
:10301C006420200066696E20200045696E6465009E |
:10302C004F6B006F6B0067756564004665686C6577 |
:10303C0072006572726F72006427657272657572C8 |
:10304C0000666F757400616B7469760061637469F6 |
:10305C007600616374696673006163746965660008 |
:10306C004643206E6963687420676566756E646597 |
:10307C006E21004643206E6F7420666F756E64215E |
:10308C00004643207061732074726F757665210061 |
:10309C004643206E696574206765766F6E64656E55 |
:1030AC002100504B542D546F6F6C20474E552047C8 |
:1030BC00504C00676566756E64656E3A2000666FED |
:1030CC00756E643A200074726F7576E9733A20005D |
:1030DC006765766F6E64656E3A2000466C6967684A |
:1030EC00742D4374726C004E6176692D4374726C4E |
:1030FC000056657273696F6E3A200056657273697B |
:10310C00653A202000206572776172746574002026 |
:10311C0065787065637465640020617474656E64B1 |
:10312C00757300207665727761636874002067653B |
:10313C0066756E64656E0020666F756E6400207433 |
:10314C00726F7576657300206765766F6E64656E59 |
:10315C0000504B542D546F6F6C206E7572206D693E |
:10316C007400504B542D546F6F6C206F6E6C792023 |
:10317C007769746800504B5420756E697175656D74 |
:10318C00656E74206176656300504B542D546F6FDF |
:10319C006C20616C6C65656E206D65740046432017 |
:1031AC00536F66747761726520006B6F6D7061741C |
:1031BC006962656C00636F6D70617469626C650047 |
:1031CC00636F6D70617469626C657300636F6D70B1 |
:1031DC0061746962656C0045696E2020004F6E2039 |
:1031EC00202000556E2020200041616E20200041DF |
:1031FC0075732020004F6666202000447520202027 |
:10320C0000556974202000455343002020504B5436 |
:10321C0020617573736368616C74656E3F00202068 |
:10322C0073687574646F776E20504B54203F002088 |
:10323C00206465736163746976657220504B542009 |
:10324C003F002020504B5420756974736368616B88 |
:10325C00656C656E203F004E65696E2020204A61CA |
:10326C00006E6F20202020796573006E6F6E202019 |
:10327C00206F7569004E6565202020204A6100563C |
:10328C00657262696E6465205043206D69742050CC |
:10329C004B54202000436F6E6E65637420504320A6 |
:1032AC00746F20504B542D555342006173736F63F0 |
:1032BC00696572205043206120504B542D55534268 |
:1032CC000056657262696E64205043206D657420EF |
:1032DC00504B54202020004472FC636B6520275314 |
:1032EC00746172742720616D20504B5400507265CC |
:1032FC0073732027537461727427206F6E20504BA8 |
:10330C0054200070726573736520276C616E636561 |
:10331C007227206120504B54004472756B20275348 |
:10332C007461727427206F7020504B542020002041 |
:10333C0020202020202020202020456E6465205352 |
:10334C007461727400202020202020202020202056 |
:10335C00456E64202053746172740020202020205C |
:10336C00202020202066696E20206C616E636572BF |
:10337C00002020202020202020202045696E64651C |
:10338C00205374617274002050432D517569636B26 |
:10339C002D56657262696E64756E6720002050430D |
:1033AC002D517569636B2D436F6E6E656374696F18 |
:1033BC006E20002050432D636F6E6E6578696F6EC2 |
:1033CC0020726170696465200020536E656C6C65B9 |
:1033DC002050432D76657262696E64696E67005683 |
:1033EC00657262696E64652064617320504B542071 |
:1033FC006D697400436F6E6E65637420504B54207E |
:10340C0077697468204D4B00636F6E6E65637465ED |
:10341C007A20504B54206120204D4B00566572622F |
:10342C00696E6420504B5420200064656D204D4B18 |
:10343C0020FC6265723A002020206F766572202095 |
:10344C0020203A002020612070726F706F73203A38 |
:10345C00002020206D657420202020203A00646517 |
:10346C006D204D4B20FC6265723A20204B616265E9 |
:10347C006C2C20006F7665723A204B6162656C0093 |
:10348C00612070726F706F733A204361626C6500DB |
:10349C004D4B207669613A206B6162656C2020206F |
:1034AC00202020202000657320697374206B6569CF |
:1034BC006E2057692E32333200746865726520694C |
:1034CC0073206E6F2057692E323332006C206E27BA |
:1034DC0079612070617320646520006572206973C6 |
:1034EC00206765656E2077692E32333220004D6F70 |
:1034FC0064756C2065696E6765626175742E006217 |
:10350C0075696C7420696E2E006D6F64756C652026 |
:10351C00696E7465677265205769323332006D6F5E |
:10352C0064756C6520696E6765626F7577642E00D3 |
:10353C0057656E6E20646F63682C2064616E6E201C |
:10354C006269747465006966207965732C207468EF |
:10355C00656E20666972737400536920766F75739B |
:10356C00206C6520666169746573007A6F206A61EE |
:10357C002C2064616E206175622065657273740025 |
:10358C00646173204D6F64756C207A756572737409 |
:10359C0020696D2020006163746976617465206D0B |
:1035AC006F64756C20696E00616374697665722056 |
:1035BC006C65206D6F64756C65006465206D6F645F |
:1035CC00756C6520616B7469766572656E00536508 |
:1035DC007475706D656EFC20616B746976696572CB |
:1035EC00656E2E0053657475706D656E7500646143 |
:1035FC006E73206D656E7520646520636F6E6669F1 |
:10360C00672E00696E206865742053657475706D43 |
:10361C00656E752E00536965206DFC7373656E20A5 |
:10362C0064617320504B5400596F75206861766546 |
:10363C0020746F00566F757320646576657A00553B |
:10364C00206D6F657420646520504B54006A65745E |
:10365C007A74206E6575207374617274656E2100C6 |
:10366C007265737461727420504B5400726564659A |
:10367C006D617272657220504B54006E75206F70C4 |
:10368C006E69657577207374617274656E2100457F |
:10369C007320697374206B65696E2042544D2D3212 |
:1036AC003232005468657265206973206E6F204257 |
:1036BC00544D2D3232320045722069732067656596 |
:1036CC006E2042544D2D323232004D6F64756C2099 |
:1036DC0065696E676562617574004D6F64756C2009 |
:1036EC006275696C7420696E006D6F64756C652011 |
:1036FC00696E74656772652042544D323232002017 |
:10370C004D4B2D5553422046756E6B74696F6E2070 |
:10371C0000204D4B2D5553422046756E6374696FD6 |
:10372C006E2000204D4B2D55534220666F6E6374F6 |
:10373C00696F6E2000204D4B2D5553422046756EFF |
:10374C0063746965202000204254202D2D3E204BAF |
:10375C006162656C20616E2046432020002042543B |
:10376C00202D2D3E204B6162656C20746F204643EA |
:10377C00202000204254202D2D3E204361626C6598 |
:10378C00206120204643202000204254202D2D3E35 |
:10379C00206B6162656C206E616172204643005043 |
:1037AC0043206D697420425420766572622E00634A |
:1037BC006F6E6E6563742050432077697468204285 |
:1037CC0054006173736F63696572205043206120EC |
:1037DC004254005043207669612042542076657231 |
:1037EC00626F6E64656E2E00504B542D4B6162659A |
:1037FC006C20616E20464300504B542D4B6162652A |
:10380C006C20746F20464300504B542D4361626C06 |
:10381C0065206120464300504B542D6B6162656CF2 |
:10382C00206E61617220464300204254202D2D3EB3 |
:10383C002057692E323332202020202020200057A0 |
:10384C00692E32333220616E204643202020202006 |
:10385C00202020200057692E32333220746F2046EE |
:10386C00432020202020202020200057692E323396 |
:10387C0032206120464320202020202020202020A0 |
:10388C000057692E323332206E616172204643201C |
:10389C002020202020200020555342202D2D3E207A |
:1038AC004B6162656C20616E2046432000205553AD |
:1038BC0042202D2D3E206361626C6520746F204682 |
:1038CC0043200020555342202D2D3E206361626C15 |
:1038DC00652061204643202000555342202D2D3E6B |
:1038EC00206B6162656C206E6161722046430050F2 |
:1038FC0043206D6974205553422076657262696E5F |
:10390C0064656E2000636F6E6E6563742050432097 |
:10391C0077697468205553422020006173736F637C |
:10392C00696572205043206120555342202020208D |
:10393C000056657262696E64205043206D65742078 |
:10394C005553422020200020555342202D2D3E203F |
:10395C0057692E323332202020202020004D4B2D51 |
:10396C00546F6F6C207374617274656E0073746144 |
:10397C007274204D4B2D546F6F6C0064656D6172C9 |
:10398C0072616765204D4B2D546F6F6C0020576929 |
:10399C002E323332204B6F6E6669677572696572B1 |
:1039AC00656E002057692E32333220436F6E666984 |
:1039BC006775726174696F6E002057692E323332ED |
:1039CC0020636F6E66696775726572202020002017 |
:1039DC0057692E32333220436F6E66696775726198 |
:1039EC00746965200050726F6772616D6D2073741D |
:1039FC00617274656E2E20202020007374617274C5 |
:103A0C002070726F6772616D200044E96D61727293 |
:103A1C006572206C652070726F6772616D6D6500E8 |
:103A2C0073746172742070726F6772616D6D612E48 |
:103A3C000042544D2D323232204B6F6E66696775E1 |
:103A4C0072696572656E0042544D2D3232322063BC |
:103A5C006F6E66696775726174696F6E0042544D62 |
:103A6C002D32323220646520636F6E666967757221 |
:103A7C00612E0042544D2D32323220636F6E6669D6 |
:103A8C0067757261746965004643203E204D4B2D6D |
:103A9C00555342203E2042544D2D323232004D4B74 |
:103AAC002D55534220616E20504320616E73636824 |
:103ABC006C2E2000636F6E6E65637420504320740F |
:103ACC006F204D4B2D55534220006173736F63690A |
:103ADC0065722050432061204D4B2D5553422000E0 |
:103AEC0056657262696E64205043206D6574204D7A |
:103AFC004B2D555342005A7769736368656E204DA0 |
:103B0C004B2D55534220756E64202000636F6E6EF2 |
:103B1C006563742063726F73736564206361626C98 |
:103B2C0065006C6120636F6E6E6578696F6E2065E1 |
:103B3C006E7472652050430054757373656E204D1E |
:103B4C004B2D55534220656E20504B542000504B4A |
:103B5C00542065696E2067656B7265757A74657340 |
:103B6C00202020006265747765656E204D4B2D55C5 |
:103B7C00534220616E64202020006574204643204F |
:103B8C00756E206361626C652063726F697365008A |
:103B9C0065656E2067656B727569737465206B6102 |
:103BAC0062656C2020004B6162656C20616E7363F2 |
:103BBC00686C69657373656E2E202000504B542021 |
:103BCC0053563200200061616E736C756974656EBA |
:103BDC002E004B6162656C006361626C6500536C16 |
:103BEC0061766520006573636C61766573004E6F5A |
:103BFC00726D616C006E6F726D616C004E6F726DE8 |
:103C0C002E20005265766572736500696E7665725A |
:103C1C007365006765696E76657200456E64202079 |
:103C2C0020204F4B0046696E202020204F4B004532 |
:103C3C00696E642020204F4B0020454550726F6DFB |
:103C4C00207769726B6C69636800205265616C79CE |
:103C5C002064656C6574650020656570726F6D20FD |
:103C6C007375707072696D65723F00204565707276 |
:103C7C006F6D207765726B656C696A6B00206CF6F2 |
:103C8C00736368656E3F0020454570726F6D3F0031 |
:103C9C0020202020002077697373656E3F006465D7 |
:103CAC00757473636820202020006765726D616EE7 |
:103CBC00202020202000616C6C656D616E64652095 |
:103CCC002000647569747320202020202000656E0C |
:103CDC00676C6973636820202000656E676C69737C |
:103CEC00682020202000616E676C6169736520205C |
:103CFC002000656E67656C732020202020006672A2 |
:103D0C00616E7AF67369736368006672656E6368D8 |
:103D1C002020202020006672616EE76169736520A7 |
:103D2C0020006672616E7320202020202000686FB6 |
:103D3C006C6CE46E6469736368006475746368200A |
:103D4C00202020202000686F6C6C616E64616973A8 |
:103D5C0065006E656465726C616E64732000416E03 |
:103D6C007A656967652045696E7374656C6C756EF0 |
:103D7C0067656E0020446973706C617920536574BB |
:103D8C00757020202020202020002064276166668A |
:103D9C0069636861676520636F6E6669672E2000D2 |
:103DAC00446973706C617920696E7374656C6C69AD |
:103DBC006E67656E2000496E666F732062656920C0 |
:103DCC0053746172743A00496E666F20617420738B |
:103DDC007461727475702000496E662E6175206472 |
:103DEC00656D61727261676500496E666F2062690C |
:103DFC006A206F70737461727400537072616368BF |
:103E0C0065203A20004C616E67756167653A200049 |
:103E1C006C61206C616E6775653A20005461616C51 |
:103E2C003A20004C6963687420617573206E61637D |
:103E3C00683A004C69676874206F66662061667426 |
:103E4C0065723A00457874692E6665757820702E17 |
:103E5C006C65733A004C6963687420756974206EE4 |
:103E6C00613A2020004C43442048656C6C69676BB8 |
:103E7C002E3A00204272696768746E657373203A3B |
:103E8C0000206C756D696E6F73697465203A002043 |
:103E9C00696E74656E7369746569743A004C434459 |
:103EAC00204B6F6E74726173743A004C4344206300 |
:103EBC006F6E74726173743A004C4344204E6F728F |
:103ECC006D2F496E763A20004C4344204F72696541 |
:103EDC006E742E3A20005243204665686C657270F1 |
:103EEC00696570203A005243204572726F726265A8 |
:103EFC00657020203A00446562756720504B540071 |
:103F0C0057692054582F5258204368616E3A005715 |
:103F1C0069204E6574572E204772702E3A005769EF |
:103F2C00204E6574572E204D6F64653A00576920FA |
:103F3C0054582054696D656F75743A005769205553 |
:103F4C00415254204D54552020203A0057692E32AE |
:103F5C0033322065696E6765626175743A00576922 |
:103F6C002E323332206275696C7420696E203A00EF |
:103F7C0057692E32333220696E7465677265202062 |
:103F8C003A0057692E32333220696E6765626F755D |
:103F9C0077643A004973742065696E2057692E3234 |
:103FAC0033322D4D6F64756C200049732057693284 |
:103FBC003332206D6F64756C0065737420756E20E0 |
:103FCC006D6F64756C6520004973206572206565A2 |
:103FDC006E2057692E3233320065696E67656261F7 |
:103FEC0075743F006275696C7420696E3F00696E70 |
:103FFC0074656772652057693233323F006D6F64A8 |
:10400C00756C6520696E6765626F7577643F004AF1 |
:10401C006120200079657320006F756920004E6562 |
:10402C00696E006E6F2020006E6F6E20004E65650D |
:10403C00200042544D3232322065696E67656261F0 |
:10404C0075743A0042544D323232206275696C7488 |
:10405C0020696E203A0042544D32323220696E741F |
:10406C006567726520203A0042544D323232206925 |
:10407C006E6765626F7577643A0049737420656981 |
:10408C006E2042544D2D3232322D4D6F64756C00C2 |
:10409C0049732042544D2D323232204D6F64756C71 |
:1040AC000049732065722065656E2042544D2D3297 |
:1040BC00323200696E74656772652042544D32323B |
:1040CC00323F0020504B5420416B6B752045696E7C |
:1040DC007374656C6C756E670020504B5420416393 |
:1040EC0063752053657475702020202020200050AB |
:1040FC004B5420416B6B757479703A2000504B54C3 |
:10410C0020416363757479703A2000504B54204100 |
:10411C00636375747970653A2000416B6B7520553B |
:10412C00204F66667365743A2000416363752055B1 |
:10413C00204F66667365743A20004F66667365742B |
:10414C00207665727374656C6C656E2062697300A1 |
:10415C0061646A757374206F666673657420756E1E |
:10416C0074696C00446563616C616765206C2761E0 |
:10417C006A757374657220004F666673657420618E |
:10418C0066726567656C656E20746F740064696532 |
:10419C00205370616E6E756E67207061737374005E |
:1041AC00766F6C7461676520666974730061206C4E |
:1041BC00612074656E73696F6E0064652073706145 |
:1041CC006E6E696E67206A756973742069732E0050 |
:1041DC004C6F77426174205761726E20563A004CD6 |
:1041EC006F7742617420616C61726D203A005600E9 |
:1041FC0046004C0048004200440041004700520079 |
:10420C004645484C45523A20446174656E76657259 |
:10421C006C75737420004552524F523A20446174AD |
:10422C0061206C6F73740070657274652064652016 |
:10423C00646F6E6E6565730076657262696E646933 |
:10424C006E672076657262726F6B656E20004C65CE |
:10425C00747A74652062656B616E6E7465004C6176 |
:10426C007374206B6E6F776E20004465726E696597 |
:10427C00726520706F736974696F6E004C61617444 |
:10428C0073742062656B656E646500506F7369743E |
:10429C00696F6E2000706F736974696F6E20000017 |
:1042AC00706F736974696520002045696E7374655D |
:1042BC006C6C756E67656E207820202020200020A5 |
:1042CC0053657474696E672078202020202020208C |
:1042DC00202020200020506172616D65747265731E |
:1042EC00207820202020202020200020496E73746C |
:1042FC00656C6C696E67656E20782020202020200C |
:10430C0000E46E6465726E006368616E6765006CD4 |
:10431C0065206368616E67656D656E7400766572A5 |
:10432C00616E646572696E6700616B74697669654C |
:10433C0072656E00616374697661746500616374A3 |
:10434C00697665720061637469766572656E006189 |
:10435C006B746976696572740061637469766174F3 |
:10436C006564006163746976656500676561637493 |
:10437C00697665657264002053657474696E672094 |
:10438C00782073706569636865726E3F0020737482 |
:10439C006F72652073657474696E673F0020526597 |
:1043AC00676C616765206D61676173696E3F0020A2 |
:1043BC00696E7374656C6C2E6F7020746520736CF1 |
:1043CC0061616E3F004765737065696368657274FF |
:1043DC0020756E640073746F72656420616E640086 |
:1043EC0073746F636B6573206574006F70676573AE |
:1043FC006C6167656E20656E004B6F7069657265E8 |
:10440C002053657474696E6700636F7079207365EF |
:10441C007474696E677300706172616D6574726536 |
:10442C007320646520636F706965006B6F706965DC |
:10443C00657220696E7374656C2E0020766F6E2029 |
:10444C00207820206E616368202079002066726FCE |
:10445C006D207820746F207900206465732078209B |
:10446C0061707265732079002076616E2078206E01 |
:10447C0061207900766F6E2020206E6163682020A9 |
:10448C00456E64652020204F4B0066726F6D2020B6 |
:10449C00746F20202020656E64202020204F4B005C |
:1044AC0064657320202061707265732066696E20CC |
:1044BC002020204F4B0076616E2020206E61202042 |
:1044CC00202065696E646520204F4B005769726B24 |
:1044DC006C696368206B6F70696572656E3F007202 |
:1044EC0065616C6C7920636F70793F0076726169DD |
:1044FC006D656E7420636F7069653F0065636874E9 |
:10450C00206B6F7069653F004B6F7069657274202A |
:10451C00756E6420616B7469766965727400636F83 |
:10452C007069656420616E6420616374697661747E |
:10453C0065642000636F7069657320657420616326 |
:10454C0074696673004B6F706965EB6E20656E2045 |
:10455C0061637469656600C46E6465726520456943 |
:10456C006E7374656C6C756E67656E200020202010 |
:10457C006368616E67652073657474696E67732018 |
:10458C002020006D6F646966696572206C6573200C |
:10459C007265676C6167657300696E7374656C6CCA |
:1045AC00696E67656E2077696A7A6967656E002047 |
:1045BC0057E4686C6520506172616D65746572209A |
:1045CC0020202020002073656C656374207061725C |
:1045DC00616D65746572732020200073656C656372 |
:1045EC0074696F6E6E657A20506172616D65742EA0 |
:1045FC000053656C65637465657220506172616D02 |
:10460C00657465727320002057E4686C65205365EF |
:10461C0069746520202020202020202000202020CC |
:10462C00202073656C6563742070616765202020A1 |
:10463C0020200053656C656374696F6E6E657A201B |
:10464C006C6120706167652000202053656C656388 |
:10465C007465657220706167696E6120202000208E |
:10466C0057E4686C652053657474696E673A202052 |
:10467C002020202000202073656C656374207365F6 |
:10468C007474696E6720202020200053656C65636C |
:10469C0074696F6E6E657A2073657474696E6720C9 |
:1046AC0000202053656C65637465657220736574B6 |
:1046BC0074696E67202000150002010201020102DC |
:1046CC0001150018012E0144015A011500700186D4 |
:1046DC00019C01B2011500C801DA01EC01FE0115C3 |
:1046EC000010021A0224022E021500380248025849 |
:1046FC00026C0215007C028D02A202B7021500CCDE |
:10470C0002E202F602090315001E03340341034DB5 |
:10471C00031500600376038A039E031500B203C8D9 |
:10472C0003C803C8031500DE03EF030004120415CD |
:10473C000024042404240424041500340434043414 |
:10474C0004340415003F043F043F043F0415004BA0 |
:10475C00044B044B044B04150058045804580458DB |
:10476C000415006504650465046504150073047381 |
:10477C000473047304150080048004800480041501 |
:10478C00008E048E048E048E0415009B04B104C7A5 |
:10479C0004DD041500F304090509051F0515003592 |
:1047AC00054B056105770515008D05A305A305A32C |
:1047BC00051500B905CF05E505FB05150011061D0E |
:1047CC00062D063D06150048064E0654065A0615DB |
:1047DC0000600663066306660615006B06720678B3 |
:1047EC00068106150086068C06920699061500A011 |
:1047FC0006B306C106D0061500E206E206E206E2A2 |
:10480C00061500F306FE060607100715001B071B0E |
:10481C00071B071B0715002707270727072707155F |
:10482C00003107310731073B07150045074F075982 |
:10483C0007630715006D0777077E0787071500913B |
:10484C0007A207B507C9071500DD07DD07DD07DD82 |
:10485C00071500EA07F50700080C08150017081DD6 |
:10486C00082308290815002F0835083B08410815AE |
:10487C0000470847084708470815004B085E086FB3 |
:10488C0008820815009708A108AB08B5081500BFE9 |
:10489C0008D508EB080109150017092D094309591A |
:1048AC000915006F0985099B09B1091500C709DDB8 |
:1048BC0009F309090A15001F0A340A480A5C0A158B |
:1048CC00006A0A770A840A910A15009E0AB40AC083 |
:1048DC000AD00A1500E60AF90A0C0B1B0B15002E60 |
:1048EC000B3F0B490B5E0B1500700B860B990BAB3A |
:1048FC000B1500C00BD60BE80BFA0B15000E0C2495 |
:10490C000C2E0C430C1500550C680C740C7F0C15FC |
:10491C00008D0CA00CAC0CBB0C1500CF0CE30C0CDC |
:10492C000BF70C15000A0D1A0D290D5E0B15003F27 |
:10493C000D510D630D750D1500870D9D0DB30DC932 |
:10494C000D1500DF0DEF0D020E130E1500280E389D |
:10495C000E480E570E1500690E690E690E690E157C |
:10496C00007F0E950EAB0EC10E1500D70EED0E038B |
:10497C000F190F15002F0F450F5B0F710F150087C7 |
:10498C000F870F870F870F15009D0FAD0FBB0FAD56 |
:10499C000F1500CD0FE30FF90F0F10150025103B6D |
:1049AC00104A1060101500711087109D10B310156F |
:1049BC0000C810C810C810C8101500DE10F4100A7A |
:1049CC00112011150036114C116211781115008E41 |
:1049DC0011A411BA11D0111500E611FC1104120624 |
:1049EC00121500121218121812121215001E121E95 |
:1049FC001225121E1215002E122E1235123C1215F3 |
:104A0C000043124B124B125312150010025B12652D |
:104A1C00126F12150079128A129812AB121500BD82 |
:104A2C0012C712D012D5121500DE12EA12F61202BB |
:104A3C001315000E131A132613321315003E134AC6 |
:104A4C00135613621315006E137A138613921315F3 |
:104A5C00009E13B413CA13E0131500F613071418B1 |
:104A6C0014291415003A14451450145C14150063E1 |
:104A7C00147314841495141500A514B314C114CF15 |
:104A8C00141500DD14EB14EB14EB141500F914F9E8 |
:104A9C0014F914F91415000815081508150815153E |
:104AAC00001615261526152615150036153615363D |
:104ABC001536151500401540154015401515004FBD |
:104ACC00154F154F154F1515005E155E155E155ECD |
:104ADC001515006D156D156D156D1515007C157C76 |
:104AEC00157C157C1515008C159E15B015C2151569 |
:104AFC0000D415EA15F91508161500191624162EEA |
:104B0C00163D1615004F16541659164F1615005E05 |
:104B1C0016631668166D161500721684169616A86E |
:104B2C00161500BA16D016F915E11615001916242B |
:104B3C0016F3163D16150003171917191719171523 |
:104B4C00002F173D173D174B1715005A176A176A98 |
:104B5C00176A1715002F173D173D174B1715007ABD |
:104B6C00179017A417B8171500CD17E017ED17FA03 |
:104B7C001715001018101810181F1815002E1830C3 |
:104B8C00183218301815003418361838183A181509 |
:104B9C0000321832183C18321815003E183E1838DE |
:104BAC00183E181500401856186718781815008EFE |
:104BBC00189E18AA18BC181500CB18D518DF18E0C9 |
:104BCC00181500E918FF1815192B1915004119486B |
:104BDC00194F195D191500691974197D1985191565 |
:104BEC00008F199919A319AB191500B719CD19DD37 |
:104BFC0019EF191500051A151A201A2B1A15003958 |
:104C0C001A491A571A6B1A15007B1A8C1A991AA87A |
:104C1C001A1500B41ACA1AE01AF61A15000C1B1F42 |
:104C2C001B2C1B3C1B1500481B5E1B741B851B158A |
:104C3C0000971BAD1BC31BD91B1500EF1B051C1BC1 |
:104C4C001C311C1500471C5D1C731C891C15009F16 |
:104C5C001CB51CCB1CE11C4D6F746F723B566572FE |
:104C6C0073696F6E3B536574706F696E74206869FD |
:104C7C0067683B536574706F696E74206C6F773B1B |
:104C8C0053746174653B526561644D6F64653B435D |
:104C9C00757272656E743B4D617850574D3B54651F |
:104CAC006D70657261747572650D003B000D000AC4 |
:104CBC0000FFFFFF01010A001E00FFFF016400015D |
:024CCC000100E5 |
:00000001FF |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/CHANGE.LOG |
---|
0,0 → 1,92 |
/**************************************************************************** |
* 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!! |
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/GPL_PKT_V3_5_8b_FC086/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_ */ |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/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_ */ |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/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_ */ |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/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_ */ |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/HAL_HW3_1.c |
---|
0,0 → 1,122 |
/***************************************************************************** |
* 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 V3.2 Cebra |
// * USB,Wi232,LED |
#ifndef HAL_HW3_2_C_ |
#define HAL_HW3_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" |
#ifdef HWVERSION3_1 |
#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<<DDC7); /* Leds,Summer*/ |
DDRB = 0xFF; |
set_LED1(); |
set_LED2(); |
set_LED3(); |
set_LED4(); |
BeepTime = 500; |
BeepMuster = 0x0080; |
set_D_LIGHT(); |
clr_WI232CMD(); |
_delay_ms(250); |
clr_LED1(); |
clr_LED2(); |
clr_LED3(); |
clr_LED4(); |
Display_on = 1; |
LCD_Init (); |
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(); //PWM Displaybeleuchtung |
sei (); |
ReadParameter (); |
LCD_Init (); |
InitWi232(); |
} |
#endif |
#endif /* HAL_HW3_2_C_ */ |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/HAL_HW3_1.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 V3.2 Cebra |
// * USB,Wi232,LED |
/* Hardware 3.1 Portbelegung |
Servo PD4 Pin 13 |
Servo PD5 Pin 14 |
Wi.232 CMD PD6 Pin 15 aktiv low |
Displaybeleuchtung PD7 Pin 16 LED an + |
I2C PC0 Pin 19 |
I2C PC1 Pin 20 |
LED2 PC2 Pin 21 LED an + |
LED1 PC3 Pin 22 LED an + |
Summer PC6 Pin 25 Summer an + |
LED3 PB1 Pin 41 LED an + |
LED4 PB0 Pin 40 LED an + |
*/ |
#ifndef HAL_HW3_2_H_ |
#define HAL_HW3_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 set_BEEP() (PORTC &= ~(1 << PC6)) //Summer |
#define clr_BEEP() (PORTC |= (1 << PC6)) |
#define set_D_LIGHT() (PORTD |= (1 << PD7)) // Displaybeleuchtung |
#define clr_D_LIGHT() (PORTD &= ~(1 << PD7)) |
#define set_WI232CMD() (PORTD &= ~(1 << PD6)) |
#define clr_WI232CMD() (PORTD |= (1 << PD6)) |
#define KEY_PIN PINA |
//#if defined HWVERSION1_2 || defined HWVERSION1_3 || defined HWVERSION3_2 |
//#define KEY_ENTER PA7 |
//#define KEY_ESC PA6 |
//#define KEY_PLUS PA5 |
//#define KEY_MINUS PA4 |
//#endif |
/*in der Hardwareversion sind die Tasten im Layout verdreht*/ |
#define KEY_ENTER PA4 |
#define KEY_ESC PA5 |
#define KEY_PLUS PA6 |
#define KEY_MINUS PA7 |
void InitHWPorts(void); |
#endif /* HAL_HW3_2_H_ */ |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/HAL_HW3_9.c |
---|
0,0 → 1,196 |
/***************************************************************************** |
* 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 "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" |
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 |
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 |
set_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); |
BeepTime = 200; |
BeepMuster = 0x0080; |
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_puts_at(0, 2, strGet(BOOT1), 0); |
lcd_puts_at(0, 3, strGet(BOOT2), 0); |
_delay_ms(800); |
if (PINA & (1<<PINA7)) // Spannung eingeschaltet lassen |
clr_V_On(); |
_delay_ms(100); |
BeepTime = 500; |
BeepMuster = 0x0080; |
get_key_press(KEY_ALL); |
lcd_cls(); |
if ((UseWi == true) && (WiIsSet == false)) |
{ |
InitWi232(); // wenn Wi232 nicht initialisiert ist, dann jetzt tun |
} |
lcd_cls(); |
set_USBOn(); // USB erstmal wieder einschalten |
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; |
} |
#endif |
#endif // HAL_HW3_9_C_ |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/HAL_HW3_9.h |
---|
0,0 → 1,139 |
/***************************************************************************** |
* 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 |
#define Touch0 PA0 // Pin 37 |
#define Touch1 PA1 // Pin 36 |
#define Touch2 PA2 // Pin 35 |
#define Touch3 PA3 // Pin 34 |
#define Key1 PA4 // Pin 33 |
#define Key2 PA5 // Pin 32 |
#define Key3 PA6 // Pin 31 |
#define Key4 PA7 // Pin 30 |
#define USB2Wi PB0 // Pin 40 aktiv low > IC5 |
#define VoltageHold PB1 // Pin 41 High = Spannung T3 halten |
#define Display_Reset PB2 // Pin 42 |
#define Display_A0 PB3 // Pin 43 |
#define Display_CS PB4 // Pin 44 |
#define Display_SI PB5 // Pin 1 |
#define LED1 PB6 // Pin 2 Low = LED1 (nicht benutzbar wegen SCL |
#define Display_SCL PB7 // Pin 3 |
#define I2C_SCL PC0 // Pin 19 SCL |
#define I2C_CDA PC1 // Pin 20 SDA |
#define USB2FC PC2 // Pin 21 aktiv low > IC5 |
#define USB_BT PC3 // Pin 22 high = USB, Low = Bluetooth, LED2 |
#define LowBat PC4 // Pin 23 Low Bat Warning Lipo PKT,Input |
#define Uart02Wi PC5 // Pin 24 aktiv Low > IC4 |
#define Uart02FC PC6 // Pin 25 aktiv Low > IC4 |
#define Summer PC7 // Pin 26 Low = Summer |
#define Uart0RxD PD0 // Pin 9 über IC4 =Wi | SV2 |
#define Uart0TxD PD1 // Pin 10 über IC4 =Wi | SV2 |
#define Uart1RxD PD2 // Pin 11 direkt = USB, BTM, über IC5 = Wi | SV2 |
#define Uart1TxD PD3 // Pin 12 direkt = USB, BTM, über IC5 = Wi | SV2 |
#define PiepserTest PD4 // Pin 13 CTC für Piepser |
#define Servo PD5 // Pin 14 PWM für Servo |
#define Wi232_CMD PD6 // Pin 15 aktiv Low = Wi232 CMD |
#define Displaybeleuchtung PD7 // Pin 16 High = Display-LED |
#define KEY_ENTER Key1 |
#define KEY_ESC Key2 |
#define KEY_PLUS Key3 |
#define KEY_MINUS Key4 |
// |= 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 set_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); |
#endif |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/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 |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/Wi232.c |
---|
0,0 → 1,562 |
/***************************************************************************** |
* 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 |
uint8_t Wi232_hardware = 0; |
uint8_t InitErr=0; |
/************************************************************************* |
Function: discoverWI232() |
Purpose: check if Wi232 available |
Returns: Version or 0 = timeout |
**************************************************************************/ |
void discoverWi232(void) |
{ |
int16_t RegisterWi232; |
SwitchToWi232(); /* Serielle Kanäle Wi232 mit USB verbinden*/ |
set_WI232CMD(); |
_delay_ms(200); |
USART_Init( UART_BAUD_SELECT(57600,F_CPU) ); /* erstmal mit 57600 versuchen*/ |
lcd_printpns_at (0, 0, PSTR("search Wi.232 Modul"),0); |
lcd_printpns_at (0, 1, PSTR("with 57600 Baud "),0); |
RegisterWi232 = ReadWi232(regDiscover); |
Wi232_hardware = 1; |
if (RegisterWi232 == 0) |
{ |
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); |
Wi232_hardware = 2; |
} |
if (RegisterWi232 == 0) |
{ |
lcd_cls(); |
lcd_printpns_at (0, 0, PSTR("no Wi.232 found "),0); |
Wi232_hardware = 0; |
} |
if (RegisterWi232 == 0xFF) |
{ |
lcd_cls(); |
lcd_printpns_at (0, 0, PSTR("Wi.232 Sytaxerror "),0); |
BeepTime = 1000; |
BeepMuster = 0x0040; |
_delay_ms(2000); |
} |
if (RegisterWi232 != 0) |
{ |
lcd_cls(); |
if (Wi232_hardware ==1) |
lcd_printpns_at (0, 0, PSTR("Wi.232 found 57600"),0); |
if (Wi232_hardware ==2) // bei 2400 Baud |
{ |
WiIsSet= false; //wenn hier 2400 gefunden wurde ist Wi232 nicht initialisiert |
lcd_printpns_at (0, 0, PSTR("Wi.232 found 2400"),0); |
if (WriteWi232(regNVDATARATE,Wi232_57600)!=0) /* NV-Ram auf 57600 setzen*/ |
{ |
lcd_printpns_at (0, 1, PSTR("Error set NV-RAM"),0); |
BeepTime = 1000; |
BeepMuster = 0x0040; |
_delay_ms(2000); |
} |
else |
{ |
_delay_ms(1000); |
lcd_printpns_at (0, 1, PSTR("NV-RAM set to 57600"),0); |
lcd_printpns_at (0, 2, PSTR("ok "),0); |
_delay_ms(2000); |
} |
if (WriteWi232(regDATARATE,Wi232_57600)!=0) /* Ram auf 57600 setzen*/ |
{ |
lcd_printpns_at (0, 3, PSTR("Error set RAM "),0); |
BeepTime = 1000; |
BeepMuster = 0x0040; |
_delay_ms(2000); |
} |
else |
{ |
_delay_ms(1000); |
lcd_printpns_at (0, 1, PSTR("RAM set to 57600 "),0); |
lcd_printpns_at (0, 2, PSTR("ok "),0); |
_delay_ms(2000); |
} |
USART_Init( UART_BAUD_SELECT(57600,F_CPU) ); |
} |
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(void) |
{ |
uint8_t i = 0; |
Change_Output(Uart02Wi); // Verbindung zu Wi232 herstellen |
discoverWi232(); // 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(regNVDATARATE,Wi232_57600)!=0) |
InitErrorWi232(15);/* Baudrate*/ |
lcd_printpns_at (i++,4,PSTR("."),0); |
if (WriteWi232(regDATARATE,Wi232_57600)!=0) |
InitErrorWi232(16);/* Baudrate*/ |
lcd_printpns_at (i++,4,PSTR("."),0); |
if (WriteWi232(regNVNETGRP,WiNetworkGroup)!=0) |
InitErrorWi232(17);/* Networkgroup */ |
lcd_printpns_at (i++,4,PSTR("."),0); |
if (WriteWi232(regNETGRP,WiNetworkGroup)!=0) |
InitErrorWi232(18);/* Networkgroup */ |
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); |
BeepTime = 1000; |
BeepMuster = 0x0040; |
_delay_ms(2000); |
} |
else |
{ |
lcd_printpns_at (0, 2, PSTR("Wi232 Init ok...."),0); |
WriteWiInitFlag(); // Init merken |
} |
USART_Init (UART_BAUD_SELECT(57600,F_CPU)); |
_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; |
BeepTime = 500; |
BeepMuster = 0x0040; |
_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); |
BeepTime = 1000; |
BeepMuster = 0x0040; |
_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(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) ); |
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 |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/Wi232.h |
---|
0,0 → 1,177 |
/***************************************************************************** |
* 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(void); |
void InitWi232(void); |
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; |
// 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_ |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/bluetooth.c |
---|
0,0 → 1,876 |
/** |
* 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 "bluetooth.h" |
#include "main.h" |
#ifdef HWVERSION3_9 |
#include "uart1.h" |
#include "usart.h" |
#include "fifo.h" |
#include "error.h" |
#include "lcd.h" |
#include "eeprom.h" |
#include "error.h" |
#include "setup.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_57600, // ATL4 Baudrate 57600 |
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; |
#ifdef SQUIRREL |
#define IN_FIFO_SIZE 100 |
#endif |
#ifdef NUT |
#define IN_FIFO_SIZE 65 |
#endif |
static uint8_t bt_buffer[IN_FIFO_SIZE]; |
static fifo_t in_fifo; |
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; |
// 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); |
} |
//-------------------------------------------------------------- |
static 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 |
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 |
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 |
return; |
// UART Inputbuffer empty, nothing to do |
case UART_NO_DATA: |
return; |
default: |
{ |
fifo_write(&in_fifo, uart_data); |
// USART_putc(uart_data); |
} |
} |
} |
#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) |
{ |
_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; |
break; |
case BT_SET_DEFAULT: |
strcpy_P(full_command, PSTR("ATZ0")); |
break; |
case BT_SET_57600: |
strcpy_P(full_command, PSTR("ATL4")); |
break; |
case BT_SET_NOANSWER: |
strcpy_P(full_command, PSTR("ATQ1")); |
break; |
case BT_SET_NOECHO: |
strcpy_P(full_command, PSTR("ATE0")); |
break; |
case BT_SET_ANSWER: |
strcpy_P(full_command, PSTR("ATQ0")); |
break; |
case BT_SET_ECHO: |
strcpy_P(full_command, PSTR("ATE1")); |
break; |
case BT_TEST: |
strcpy_P(full_command, PSTR("AT")); |
break; |
case BT_CONNECT: |
strcpy_P(full_command, PSTR("ATA")); |
break; |
case BT_DISCONNECT: |
strcpy_P(full_command, PSTR("ATH")); |
break; |
case BT_CLEAR_ADDRESS: |
strcpy_P(full_command, PSTR("ATD0")); |
break; |
case BT_SET_ADDRESS: |
strcpy_P(full_command, PSTR("ATD=")); |
memcpy((full_command + strlen(full_command)), data, 12); |
full_command[16] = 0; |
break; |
case BT_FIND_DEVICES: |
strcpy_P(full_command, PSTR("ATF?")); |
break; |
case BT_DISABLE_AUTOCONNECT: |
strcpy_P(full_command, PSTR("ATO1")); |
break; |
case BT_SET_MASTER: |
strcpy_P(full_command, PSTR("ATR0")); |
break; |
case BT_SET_SLAVE: |
strcpy_P(full_command, PSTR("ATR1")); |
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; |
break; |
case BT_SET_DISPWRDOWN: |
strcpy_P(full_command, PSTR("ATS1")); |
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_ECHO) |
return true; |
if (command== BT_SET_ANSWER) |
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")); |
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 < 3; 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) |
{ |
/* Set comm_mode to CMD */ |
comm_mode = BT_CMD; |
// test(); |
/* 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_USBOn(); |
if (!init_error) |
{ |
WriteBTInitFlag(); // Init merken |
return true; |
} |
else |
return false; |
} |
else |
{ |
set_USBOn(); |
return false; |
} |
} |
#ifndef SaveMem |
//-------------------------------------------------------------- |
uint16_t bt_set_mode(const bt_mode_t mode) |
{ |
if (update_comm_mode(0) == BT_DATA) |
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); |
} |
if (mode == BLUETOOTH_SLAVE) |
if (send_cmd(BT_SET_SLAVE, NULL)) |
{ |
bt_mode = BLUETOOTH_SLAVE; |
} |
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) |
{ |
// 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) |
{ |
/* Bluetooth reseten */ |
// set_bit(PORTC.DIR, 4); |
// set_bit(PORTC.OUT, 4); |
_delay_ms(500); |
// clear_bit(PORTC.OUT, 4); |
// return bt_init(); |
#if 1 |
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(1500); |
} |
//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; |
#endif |
} |
//-------------------------------------------------------------- |
void copy_address(const char *src, char *dst) |
{ |
uint8_t off = 0; |
for (uint8_t i = 0; i < 14; i++) |
{ |
if (src[i + off] == '-') |
off++; |
dst[i] = src[i + off]; |
} |
} |
//-------------------------------------------------------------- |
uint16_t bt_discover(char result[8][12]) |
// 14.8.2011 ist noch nicht getestet, wird für PKT auch nicht benötigt, Cebra |
{ |
// update_callback(20); |
test(); |
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; |
uint8_t pos = 0; |
uint16_t Timeout = 20000; |
uint8_t pos1 = 0; |
do |
{ |
uart_receive(); |
Timeout--; |
pos1++; |
_delay_ms(1); |
} |
while ((Timeout > 0) ||(!fifo_strstr_pgm(&in_fifo, PSTR("Inquiry Results:\r\n")))); |
// byte_to_hex(Timeout); |
assert_pgm((!fifo_strstr_pgm(&in_fifo, PSTR("Inquiry Results:\r\n"))),PSTR("INQ Result false")); |
info_pgm (PSTR ("Rec1")); |
for (uint16_t i = 0; i < 60000; i++) |
{ |
//if ((i % 1000) == 0) |
//update_callback(40 + i / 1000); |
uart_receive(); |
// lcd_printp(".", 0); |
_delay_ms(1); |
} |
info_pgm (PSTR ("Rec2")); |
//update_callback(100); |
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"))) |
{ |
fifo_clear(&in_fifo); |
test(); |
return true; |
} |
if (strncmp_P(PSTR("0012"), &buffer[21], 4)) |
{ |
copy_address(&buffer[21], result[pos]); |
pos++; |
} |
} |
return false; |
} |
#endif |
#endif |
#endif /* SQUIRREL */ |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/bluetooth.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) 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 |
//void InitBT(void); |
typedef struct _device_info device_info; |
// device info struct, holds mac , class and extensions + values of a device |
struct _device_info |
{ |
char mac[12]; |
uint8_t class; |
uint8_t extension_types[EXTENSIONS_LIST]; |
uint16_t values_cache[EXTENSIONS_LIST]; |
}; |
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)) |
// 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)); |
#endif // SQUIRREL |
#endif |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/connect.c |
---|
0,0 → 1,394 |
/***************************************************************************** |
* 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" |
#if defined HWVERSION1_3W || 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<<PD2); // Pullup aus |
PORTD &= ~(1<<PD3); |
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<<PD2); // Pullup aus |
PORTD &= ~(1<<PD3); |
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 |
{ |
show_Lipo(); |
} |
while(!get_key_press (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
if (U02SV2 == 1) |
Change_Output(Uart02FC); |
else |
Change_Output(Uart02Wi); |
set_USBOn(); |
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 |
{ |
show_Lipo(); |
} |
while(!get_key_press (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
if (U02SV2 == 1) |
Change_Output(Uart02FC); |
else |
Change_Output(Uart02Wi); |
set_USBOn(); |
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_USBOn(); |
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 |
{ |
show_Lipo(); |
} |
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 |
{ |
show_Lipo(); |
} |
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 |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/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 |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/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 |
#endif |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/debug.c |
---|
0,0 → 1,370 |
/***************************************************************************** |
* 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" |
#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); |
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); |
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(); |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/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 |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/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(); |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/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 |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/eeprom.c |
---|
0,0 → 1,356 |
/***************************************************************************** |
* 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_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 EEMEM EE_BTPin[bt_pin_length + 1]; |
uint8_t EEMEM EE_BTName[bt_name_length + 1]; |
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 |
char bt_pin[bt_pin_length + 1]; // BT Pinnummer |
char bt_name[bt_name_length + 1]; // BT Name |
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 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 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); |
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); |
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); |
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 |
PKT_IdleBeep = 0; // kein Piepsen bei Inaktivität |
PKT_StartInfo = true; // Startnformationen anzeigen |
PKT_Accutyp = true; // True = Lipo, False= LiON |
Lipo_UOffset = 6000; // Offset für PKT-Lipomessung |
LastLongitude = 88199720; |
LastLatitude = 522039630; |
eeprom_write_dword(&EE_LastLongitude,LastLongitude); |
eeprom_write_dword(&EE_LastLatitude,LastLatitude); |
strcpy_P(bt_pin, PSTR("1234")); |
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); |
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); |
BeepTime = 200; |
BeepMuster = 0x0080; |
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_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_block ((const void*)&bt_pin, (void*)&EE_BTPin, bt_pin_length); |
eeprom_write_block ((const void*)&bt_name, (void*)&EE_BTName, bt_name_length); |
} |
//-------------------------------------------------------------- |
// |
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); |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/eeprom.h |
---|
0,0 → 1,148 |
/***************************************************************************** |
* 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 0x58 //Summe aus Soft.vers. ohne erste Ziffer zB 3.5.5 = 55 |
#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 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 char bt_pin[bt_pin_length + 1]; // BT Pinnummer |
extern char bt_name[bt_name_length + 1]; // BT Name |
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; |
#endif |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/error.c |
---|
0,0 → 1,206 |
/* |
___ ___ ___ ___ _____ |
/ /\ /__/\ / /\ /__/\ / /::\ |
/ /::\ | |::\ / /::\ \ \:\ / /:/\:\ |
/ /:/\:\ ___ ___ | |:|:\ / /:/\:\ \ \:\ / /:/ \:\ |
/ /:/~/::\ /__/\ / /\ __|__|:|\:\ / /:/ \:\ _____\__\:\ /__/:/ \__\:| |
/__/:/ /:/\:\ \ \:\ / /:/ /__/::::| \:\ /__/:/ \__\:\ /__/::::::::\ \ \:\ / /:/ |
\ \:\/:/__\/ \ \:\ /:/ \ \:\~~\__\/ \ \:\ / /:/ \ \:\~~\~~\/ \ \:\ /:/ |
\ \::/ \ \:\/:/ \ \:\ \ \:\ /:/ \ \:\ ~~~ \ \:\/:/ |
\ \:\ \ \::/ \ \:\ \ \:\/:/ \ \:\ \ \::/ |
\ \:\ \__\/ \ \:\ \ \::/ \ \:\ \__\/ |
\__\/ \__\/ \__\/ \__\/ |
___ ___ ___ ___ ___ ___ |
/ /\ / /\ /__/\ /__/\ / /\ /__/\ |
/ /:/ / /::\ | |::\ | |::\ / /::\ \ \:\ |
/ /:/ / /:/\:\ | |:|:\ | |:|:\ / /:/\:\ \ \:\ |
/ /:/ ___ / /:/ \:\ __|__|:|\:\ __|__|:|\:\ / /:/ \:\ _____\__\:\ |
/__/:/ / /\ /__/:/ \__\:\ /__/::::| \:\ /__/::::| \:\ /__/:/ \__\:\ /__/::::::::\ |
\ \:\ / /:/ \ \:\ / /:/ \ \:\~~\__\/ \ \:\~~\__\/ \ \:\ / /:/ \ \:\~~\~~\/ |
\ \:\ /:/ \ \:\ /:/ \ \:\ \ \:\ \ \:\ /:/ \ \:\ ~~~ |
\ \:\/:/ \ \:\/:/ \ \:\ \ \:\ \ \:\/:/ \ \:\ |
\ \::/ \ \::/ \ \:\ \ \:\ \ \::/ \ \:\ |
\__\/ \__\/ \__\/ \__\/ \__\/ \__\/ |
** |
* Error handling functions |
*/ |
#include <stdbool.h> |
//#include "ftdi.h" |
#include <avr/pgmspace.h> |
#include "error_driver.h" |
//-------------------------------------------------------------- |
inline void _send_msg(const char *msg) |
{ |
for (uint8_t i=0; i<255 && msg[i]!='\0'; i++) |
{ |
error_driver_write_c(msg[i]); |
} |
error_driver_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++) |
{ |
error_driver_write_c(myByte); |
myByte = pgm_read_byte(msg+i); |
} |
} |
#ifdef DEBUG |
//-------------------------------------------------------------- |
void error_init(void) |
{ |
error_driver_Init(); |
} |
//-------------------------------------------------------------- |
void error_putc(const char c) |
{ |
error_driver_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); |
error_driver_write_c('\n'); |
} |
} |
//-------------------------------------------------------------- |
void info_pgm(const prog_char *msg) |
{ |
send_pgm(PSTR("INF:")); |
send_pgm(msg); |
error_driver_write_c('\n'); |
} |
//-------------------------------------------------------------- |
void warn_pgm(const prog_char *msg) |
{ |
send_pgm(PSTR("WARN:")); |
send_pgm(msg); |
error_driver_write_c('\n'); |
} |
//-------------------------------------------------------------- |
void error_pgm(const prog_char *msg) |
{ |
send_pgm(PSTR("ERR:")); |
send_pgm(msg); |
error_driver_write_c('\n'); |
} |
//-------------------------------------------------------------- |
void debug_pgm(const prog_char *msg) |
{ |
send_pgm(PSTR("DBG:")); |
send_pgm(msg); |
error_driver_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 |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/error.h |
---|
0,0 → 1,75 |
/* |
___ ___ ___ ___ _____ |
/ /\ /__/\ / /\ /__/\ / /::\ |
/ /::\ | |::\ / /::\ \ \:\ / /:/\:\ |
/ /:/\:\ ___ ___ | |:|:\ / /:/\:\ \ \:\ / /:/ \:\ |
/ /:/~/::\ /__/\ / /\ __|__|:|\:\ / /:/ \:\ _____\__\:\ /__/:/ \__\:| |
/__/:/ /:/\:\ \ \:\ / /:/ /__/::::| \:\ /__/:/ \__\:\ /__/::::::::\ \ \:\ / /:/ |
\ \:\/:/__\/ \ \:\ /:/ \ \:\~~\__\/ \ \:\ / /:/ \ \:\~~\~~\/ \ \:\ /:/ |
\ \::/ \ \:\/:/ \ \:\ \ \:\ /:/ \ \:\ ~~~ \ \:\/:/ |
\ \:\ \ \::/ \ \:\ \ \:\/:/ \ \:\ \ \::/ |
\ \:\ \__\/ \ \:\ \ \::/ \ \:\ \__\/ |
\__\/ \__\/ \__\/ \__\/ |
___ ___ ___ ___ ___ ___ |
/ /\ / /\ /__/\ /__/\ / /\ /__/\ |
/ /:/ / /::\ | |::\ | |::\ / /::\ \ \:\ |
/ /:/ / /:/\:\ | |:|:\ | |:|:\ / /:/\:\ \ \:\ |
/ /:/ ___ / /:/ \:\ __|__|:|\:\ __|__|:|\:\ / /:/ \:\ _____\__\:\ |
/__/:/ / /\ /__/:/ \__\:\ /__/::::| \:\ /__/::::| \:\ /__/:/ \__\:\ /__/::::::::\ |
\ \:\ / /:/ \ \:\ / /:/ \ \:\~~\__\/ \ \:\~~\__\/ \ \:\ / /:/ \ \:\~~\~~\/ |
\ \:\ /:/ \ \:\ /:/ \ \:\ \ \:\ \ \:\ /:/ \ \:\ ~~~ |
\ \:\/:/ \ \:\/:/ \ \:\ \ \:\ \ \:\/:/ \ \:\ |
\ \::/ \ \::/ \ \:\ \ \:\ \ \::/ \ \:\ |
\__\/ \__\/ \__\/ \__\/ \__\/ \__\/ |
* |
* Error handling functions. |
*/ |
#ifndef __ERROR__ |
#define __ERROR__ |
#include <avr/pgmspace.h> |
#include <stdbool.h> |
#include "main.h" |
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 |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/error_driver.c |
---|
0,0 → 1,21 |
#include "cpu.h" |
#include "error_driver.h" |
#include "main.h" |
#ifdef DEBUG |
#include "usart.h" |
#include "uart1.h" |
void error_driver_write_c(uint8_t c) |
{ |
USART_putc(c); |
} |
void error_driver_Init(void) |
{ |
// USART_Init(UART_BAUD_SELECT(USART_BAUD,F_CPU)); |
} |
#endif |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/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 error_driver_write_c(uint8_t c); |
extern void error_driver_Init(void); |
#else |
#define error_driver_write_c(c) {} |
#define error_driver_init() {} |
#endif |
#endif //__ERROR_DRIVER__ |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/fifo.c |
---|
0,0 → 1,114 |
/** |
* a simple Fifo |
* @file fifo.c |
* @author Pascal Schnurr |
*/ |
#include "fifo.h" |
//-------------------------------------------------------------- |
void fifo_init (fifo_t * fifo, uint8_t * buffer, uint16_t size) |
{ |
fifo->size = size; |
fifo->buffer = buffer; |
fifo->head = 0; |
fifo->count = 0; |
} |
//-------------------------------------------------------------- |
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_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; |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/fifo.h |
---|
0,0 → 1,83 |
/** |
* 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; |
/** \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, |
* 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_ */ |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/font8x6.c |
---|
0,0 → 1,171 |
/***************************************************************************** |
* 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] = |
{ |
{ 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 'ß' |
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 8 08 |
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 9 09 |
{ 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 <- |
}; |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/font8x6.h |
---|
0,0 → 1,29 |
/***************************************************************************** |
* 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]; |
#endif |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/gps.c |
---|
0,0 → 1,364 |
/***************************************************************************** |
* 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" |
#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); |
write_ndigit_number_u (col+4, line, UBX_buffer[12 + 12*i], 2, 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]); |
uint16_t acc = (uint16_t)join_4_bytes(&UBX_buffer[24]); |
write_ndigit_number_u (11, 2, acc, 5, 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); |
lcd_printp_at (13,3, PSTR("."), 0); |
write_ndigit_number_u (14, 3, (pdop % 100),2, 1); |
} |
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); |
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); |
lcd_printp_at (12,5, PSTR("."), 0); |
write_ndigit_number_u (13, 5, (uint16_t)((lon/1000) % 10000), 4, 1); |
write_ndigit_number_u (17, 5, (uint16_t)((lon/10) % 100), 2, 1); |
uint32_t lat = join_4_bytes(&UBX_buffer[8]); |
write_ndigit_number_u (10, 6, (uint16_t)(lat/10000000), 2, 0); |
lcd_printp_at (12,6, PSTR("."), 0); |
write_ndigit_number_u (13, 6, (uint16_t)((lat/1000) % 10000), 4, 1); |
write_ndigit_number_u (17, 6, (uint16_t)((lat/10) % 100), 2, 1); |
uint16_t height = (uint16_t)(join_4_bytes(&UBX_buffer[16])/1000); |
write_ndigit_number_u (11, 7, height, 4, 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; |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/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 |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/joop_parameter_names.h |
---|
0,0 → 1,264 |
/***************************************************************************** |
* 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 144 |
#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."}, |
{"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. ","Seuil Reponse ","Seuil Reponse ","Drempelwaarde "}, |
{"Hysterese ","Hysteresis ","Hysteresis ","Hysterese "}, |
{"Umkehrp. Nick ","Nick Invers ","Invers Roulis ","Nick geinvert."}, |
{"Umkehrp. Roll ","Roll Invers ","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.","Switch f. High","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. High ","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-66 |
{"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"}, |
{"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"}, |
{"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) 67-85 |
{"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 "}, |
{"CH Höhe ","CH High ","CH High ","CH Hoogte "}, |
// group 7 : (ausgaenge) 86-95 |
{"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"}, |
{"LED1 Vmin.Warn","Out1 undervolt","Al Undervoltag","Uitg1 ondersp."}, |
{"LED2 Vmin.Warn","Out2 undervolt","Al Undervoltag","Uitg2 ondersp."}, |
// group 8 : (verschiedenes) 96-107 |
{"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"}, |
{"Compass Error ","Compass Error ","Compass Error ","Kompas Error "}, |
{"k.Summer o Sen","Compass Error ","Son Abs Emett ","Kompas Error "}, |
// group 9 : (gyro) 108-120 |
{"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) 121-128 |
{"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) 129-132 |
{"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) 133 |
{"Orientierung ","Orientierung ","Orientation "}, |
// group 13 (easy) 134-144 |
{"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 "}, |
}; |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/lcd.c |
---|
0,0 → 1,1370 |
/***************************************************************************** |
* 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 0 // 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 |
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; |
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) |
{ |
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, 1); |
lcd_line (x0 + radius, y0, x0 - radius, y0, 1); |
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, 1); |
lcd_line (x0 + x, y0 - y, x0 - x, y0 - y, 1); |
lcd_line (x0 + y, y0 + x, x0 - y, y0 + x, 1); |
lcd_line (x0 + y, y0 - x, x0 - y, y0 - x, 1); |
} |
} |
//----------------------------------------------------------- |
// |
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) |
{ |
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, '*', 0); |
} |
return; |
} |
for (uint8_t i = 0; i < length - len; i++) |
{ |
if (pad) |
{ |
lcd_putc (x++, y, '0', 0); |
} |
else |
{ |
lcd_putc (x++, y, ' ', 0); |
} |
} |
lcd_print_at(x, y, (uint8_t*)s, 0); |
} |
//----------------------------------------------------------- |
// 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) |
{ |
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, '*', 0); |
} |
return; |
} |
for (uint8_t i = 0; i < length - len; i++) |
{ |
if (pad) |
{ |
lcd_putc (x++, y, '0', 0); |
} |
else |
{ |
lcd_putc (x++, y, ' ', 0); |
} |
} |
lcd_print_at(x, y, (uint8_t*)s, 0); |
} |
//----------------------------------------------------------- |
// 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) |
{ |
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, '*', 0); |
} |
return; |
} |
for (uint8_t i = 0; i < length - len; i++) |
{ |
if (pad) |
{ |
lcd_putc (x++, y, '0', 0); |
} |
else |
{ |
lcd_putc (x++, y, ' ', 0); |
} |
} |
char rest = s[len - 1]; |
s[len - 1] = 0; |
if (len == 1) |
{ |
lcd_putc (x-1, y, '0', 0); |
} |
else if (len == 2 && s[0] == '-') |
{ |
lcd_putc (x-1, y, '-', 0); |
lcd_putc (x, y, '0', 0); |
} |
else |
{ |
lcd_print_at(x, y, (uint8_t*)s, 0); |
} |
x += len - 1; |
lcd_putc (x++, y, '.', 0); |
lcd_putc (x++, y, rest, 0); |
} |
//----------------------------------------------------------- |
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) |
{ |
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, '*', 0); |
} |
return; |
} |
for (uint8_t i = 0; i < length - len; i++) |
{ |
if (pad) |
{ |
lcd_putc (x++, y, '0', 0); |
} |
else |
{ |
lcd_putc (x++, y, ' ', 0); |
} |
} |
char rest = s[len - 1]; |
s[len - 1] = 0; |
if (len == 1) |
{ |
lcd_putc (x-1, y, '0', 0); |
} |
else if (len == 2 && s[0] == '-') |
{ |
lcd_putc (x-1, y, '-', 0); |
lcd_putc (x, y, '0', 0); |
} |
else |
{ |
lcd_print_at(x, y, (uint8_t*)s, 0); |
} |
x += len - 1; |
lcd_putc (x++, y, '.', 0); |
lcd_putc (x++, y, rest, 0); |
} |
//----------------------------------------------------------- |
// 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); |
lcd_putc (x + 2, y, ':', 0); |
write_ndigit_number_u (x + 3, y, seconds, 2, 1); |
} |
//----------------------------------------------------------- |
// 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); |
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); |
position = position - ((uint16_t) (position / (int32_t) 1000) * (int32_t) 1000); |
write_ndigit_number_u (x + 8, y, (uint16_t) position, 3, 1); |
lcd_putc (x + 11, y, 0x1e, 0); // degree symbol |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/lcd.h |
---|
0,0 → 1,273 |
/***************************************************************************** |
* 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 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); |
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); |
/** |
* 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); |
/** |
* 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); |
/** |
* 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); |
/** |
* 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 |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/lipo.c |
---|
0,0 → 1,149 |
/***************************************************************************** |
* 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 "lcd.h" |
#include "lipo.h" |
#include "eeprom.h" |
// 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) |
{ |
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); // Prescaler 128, Freilaufend, Interrupte frei |
} |
/*! Error compensation, Scaling 16-bit result, Rounding up |
, Calculate 16-bit result, Resets variables |
Quelle AVR121: Enhancing ADC resolution by versampling |
*/ |
void oversampled(void) |
{ |
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) |
{ |
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 |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/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 |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/main.c |
---|
0,0 → 1,380 |
/***************************************************************************** |
* 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); |
lcd_printp_at (3, 4, PSTR("."), 0); |
write_ndigit_number_u (4, 4, (uint16_t)((LastLatitude/1000) % 10000), 4, 1); |
write_ndigit_number_u (8, 4, (uint16_t)((LastLatitude/10) % 100), 2, 1); |
write_ndigit_number_u (12, 4, (uint16_t)(LastLongitude/10000000), 2, 0); |
lcd_printp_at (14, 4, PSTR("."), 0); |
write_ndigit_number_u (15, 4, (uint16_t)((LastLongitude/1000) % 10000), 4, 1); |
write_ndigit_number_u (19, 4, (uint16_t)((LastLongitude/10) % 100), 2, 1); |
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, 1, 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, 1, strGet(START_FCFOUND3), 0); |
} |
hardware = NC; |
current_hardware = hardware; |
} |
if (PKT_StartInfo == true) |
{ |
// lcd_printp (PSTR("Version: "), 0); |
lcd_puts_at(0, 2, strGet(START_VERSIONCHECK), 0); |
lcd_write_number_u (version->SWMajor); |
lcd_printp (PSTR("."), 0); |
lcd_write_number_u (version->SWMinor); |
lcd_putc (lcd_xpos, lcd_ypos, version->SWPatch + 'a', 0); |
_delay_ms(1500); |
} |
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(0, 1, strGet(START_VERSIONCHECK1), 0); |
// lcd_printp (PSTR(" erwartet\r\n"), 0); |
lcd_printp_at (0, 1, PSTR("EEPromRev.:"), 0); |
lcd_write_number_u (mk_param_struct->Revision); |
lcd_puts_at(0, 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, 3, strGet(START_VERSIONCHECK3), 0); |
lcd_puts_at(0, 4, strGet(START_VERSIONCHECK4), 0); |
lcd_printp (PSTR(FC_Version),0); |
// lcd_printp (PSTR("\r\nkompatibel"), 0); |
lcd_puts_at(0, 5, strGet(START_VERSIONCHECK5), 0); |
hardware = NO; |
BeepTime = 1500; |
BeepMuster = 0x0040; |
_delay_ms(4000); |
} |
#endif |
mode = 0; |
rxd_buffer_locked = FALSE; |
timer = 50; |
while (timer > 0); |
for (;;) |
{ |
main_menu (); |
} |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/main.h |
---|
0,0 → 1,121 |
/***************************************************************************** |
* 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* |
*****************************************************************************/ |
/** |
* @Author Cebra test test test test |
* |
* ${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.5.8c" // 1. SVN Version test |
//#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 |
//#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_1 // Test Hardware Cebra Juni 2011 |
#define HWVERSION3_9 // Hardware Cebra Oktober 2011 ATmega1284P |
#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 |
#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 |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/menu.c |
---|
0,0 → 1,639 |
/***************************************************************************** |
* 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 "messages.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" |
#define ITEMS_NC 7 |
prog_char param_menuitems_nc[ITEMS_NC][NUM_LANG][18]= // zeilen,zeichen+1 |
// German, English, French, Netherlands |
{ |
{"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 "}, |
{"PKT Tools \x1d","PKT Tools \x1d","PKT Tools \x1d","PKT Tools \x1d"}, |
}; |
#define ITEMS_FC 4 |
prog_char param_menuitems_fc[ITEMS_FC][NUM_LANG][18]= // zeilen,zeichen+1 |
{ |
{"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 |
prog_char param_menuitems_no[ITEMS_NO][NUM_LANG][18]= // zeilen,zeichen+1 |
{ |
{"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 "}, |
}; |
#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 ", |
"2011 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; |
} |
show_Lipo(); |
} |
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; |
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); |
show_Lipo(); |
} |
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; |
if(hardware == NC) |
{ |
if((val+offset) == 1 ) |
osd(OSD_Mode); |
if((val+offset) == 2 ) |
osd(THREE_D_Mode); |
if((val+offset) == 3 ) |
display_data(); |
if((val+offset) == 4 ) |
edit_parameter(); |
if((val+offset) == 5 ) |
display_debug(); |
if((val+offset) == 6 ) |
gps(); |
if((val+offset) == 7 ) |
PKT_Tools(); |
} |
if(hardware == FC) |
{ |
if((val+offset) == 1 ) |
display_data(); |
if((val+offset) == 2 ) |
edit_parameter(); |
if((val+offset) == 3 ) |
display_debug(); |
if((val+offset) == 4 ) |
PKT_Tools(); |
} |
if(hardware == NO) |
{ |
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 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_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; |
} |
} |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/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 |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/messages.c |
---|
0,0 → 1,1451 |
/**************************************************************************************** |
* 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 "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 |
//{ |
// 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_LASTPOSDEL, |
// START_SEARCHFC,ENDE,START_FCNOTFOUND,START_FCFOUND,START_FCFOUND1,START_FCFOUND2,START_FCFOUND3,START_VERSIONCHECK,START_VERSIONCHECK1, |
// START_VERSIONCHECK2,START_VERSIONCHECK3,START_VERSIONCHECK4,START_VERSIONCHECK5,LAST_STR |
//} STR; |
static const STRING strings[LAST_STR] = |
{ |
{ /*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 */ |
} |
}, |
{ /*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 */ |
} |
}, |
{ /**/ |
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 */ |
} |
}, |
{ /*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 eingebaut:", /* German */ |
"BTM222 built in :", /* English*/ |
"BTM222 integre :", /* French */ |
"BTM222 ingebouwd:", /* 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 */ |
} |
}, |
{ /*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_V, vorne*/ |
21, |
{ |
"V", /* German */ |
"F", /* English*/ |
"L", /* French */ |
"F", /* Dutch */ |
} |
}, |
{ /*OSD_H, hinten*/ |
21, |
{ |
"H", /* German */ |
"B", /* English*/ |
"D", /* French */ |
"A", /* Dutch */ |
} |
}, |
{ /*OSD_L, links*/ |
21, |
{ |
"L", /* German */ |
"L", /* English*/ |
"G", /* French */ |
"L", /* Dutch */ |
} |
}, |
{ /*OSD_R, rechts*/ |
21, |
{ |
"R", /* German */ |
"R", /* English*/ |
"D", /* French */ |
"R", /* 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*/ |
"", /* French */ |
"positie ", /* Dutch */ |
} |
}, |
{ /*PARA_SETTINGS*/ |
21, |
{ |
" Einstellungen x ", /* German */ |
" Setting x ", /* English*/ |
" Parametres x ", /* French */ |
" Instellingen x ", /* 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 */ |
} |
}, |
//---------, , |
//----------------- |
}; |
char const * strGet(int str_no) |
{ |
return strings[str_no].text[DisplayLanguage]; |
} |
void Test_Language (void) // bleibt für Tests |
{ |
lcd_cls(); |
lcd_printp_at(12, 7, PSTR("Ende"), 0); |
do |
{ |
lcd_puts_at(1, 2, strGet(BOOT_WI1), 0); |
// lcd_printp_at(1, 2, strGet(BOOT_WI1), 0); |
} |
while(!get_key_press (1 << KEY_ESC)); |
get_key_press(KEY_ALL); |
return; |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/messages.h |
---|
0,0 → 1,49 |
/**************************************************************************************** |
* 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 |
{ |
KEYLINE1, KEYLINE2, KEYLINE3,KEYLINE4, 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, DEBUGPKT, WITXRX, WINETWG, WINETWM, WITIMEOUT, WIUART, WI2321, WI2322, WI2323, YES, NOO, BT1, BT2, |
BT3, LIPO1, LIPO2, LIPO3, LIPO4, LIPO5, LIPO6, LOWBAT, OSD_V, OSD_H,OSD_L, OSD_R, 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, 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_ */ |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/mk-data-structs.h |
---|
0,0 → 1,330 |
/***************************************************************************** |
* 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.86 |
#define EEProm_Version 88 // FC EEProm Revision / Struktur FC 0.86 |
#define FC_Version "0.86x" //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 |
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 |
{ |
uint8_t Digital[2]; |
// NC: unsigned; FC: signed !!!! |
int16_t Analog[32]; // Debugvalues |
} __attribute__((packed)) DebugData_t; |
//typedef struct |
//{ |
// uint8_t line; |
// uint8_t text[20]; |
//} __attribute__((packed)) Display_t; |
//typedef struct |
//{ |
// uint8_t Revision; |
// int8_t Name[12]; |
// int8_t Motor[16][4]; |
// uint8_t crc; |
//} __attribute__((packed)) Mixer_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 |
//{ |
// signed int Winkel[3]; // nick, roll, compass in 0,1.^ |
// signed char Centroid[3]; |
// signed char reserve[5]; |
//} __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; |
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; |
// NaviCtrl struct |
// taken from |
// http://mikrocontroller.cco-ev.de/mikrowebsvn/filedetails.php?repname=NaviCtrl&path=%2Ftags%2FV0.15c%2Fuart1.h |
// |
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 FCFlags; // 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 RC_RSSI; // Receiver signal strength (since version 2 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; |
// MikroKopter Flags |
// taken from |
// http://svn.mikrokopter.de/mikrowebsvn/filedetails.php?repname=FlightCtrl&path=%2Ftags%2FV0.73d%2Ffc.h |
// |
#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 |
// 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 |
// 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 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 |
char Name[12]; |
unsigned char crc; // MUST BE THE LAST BYTE! |
} __attribute__((packed)) mk_param_struct_t; |
#endif |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/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); |
} |
} //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); |
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); |
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); |
} |
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); |
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); |
if(m == 0) lcd_printp_at (9, 2, PSTR("All"), 0); |
write_ndigit_number_u (9, 3, v, 3, 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); |
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); |
lcd_printp_at (0, 5, PSTR("Temperature:"), 0); |
write_ndigit_number_u (13,5,Motor[m-1].Temperature,3,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 |
} |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/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 |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/osd.c |
---|
0,0 → 1,813 |
/***************************************************************************** |
* 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 "mk-data-structs.h" |
#define COSD_WASFLYING 4 |
#define TIMEOUT 200 // 2 sec |
// global definitions and global vars |
NaviData_t *naviData; |
// löschen und alle mit "naviData->Variometer" ersetzen |
//int8_t Variometer = 0; |
// 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; |
// store stats description in progmem to save space |
const char stats_item_0[] PROGMEM = "max Altitude:"; |
const char stats_item_1[] PROGMEM = "max Speed :"; |
const char stats_item_2[] PROGMEM = "max Distance:"; |
const char stats_item_3[] PROGMEM = "min Voltage :"; |
const char stats_item_4[] PROGMEM = "max Time :"; |
#if 1 |
const char stats_item_5[] PROGMEM = "max Current :"; |
const char stats_item_6[] PROGMEM = "UsedCapacity:"; |
#else |
const char stats_item_5[] PROGMEM = "Long. :"; |
const char stats_item_6[] PROGMEM = "Lat. :"; |
#endif |
const char *stats_item_pointers[] PROGMEM = { |
stats_item_0, |
stats_item_1, |
stats_item_2, |
stats_item_3, |
stats_item_4, |
stats_item_5, |
stats_item_6 |
}; |
//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 |
}; |
// Flags |
uint8_t COSD_FLAGS2 = 0; |
GPS_Pos_t last5pos[7]; |
uint8_t error = 0; |
//-------------------------------------------------------------- |
// 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) |
{ |
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; |
} |
} |
} |
//-------------------------------------------------------------- |
void print_statistics (void) |
{ |
uint8_t line = 0; |
lcd_cls (); |
// lcd_printp_at (12, 7, PSTR("Ende"), 0); |
lcd_puts_at(12, 7, strGet(ENDE), 0); |
// max Altitude |
lcd_printp_at (0, line, stats_item_pointers[0], 0); |
write_ndigit_number_s (13, line, max_Altimeter / (30 / AltimeterAdjust), 4, 0); |
lcd_putc (17, line, 'm', 0); |
// max Speed |
lcd_printp_at (0, ++line, stats_item_pointers[1], 0); |
write_ndigit_number_u (14, line, (uint16_t) (((uint32_t) max_GroundSpeed * (uint32_t) 9) / (uint32_t) 250), 3, 0); |
lcd_printp_at(17, line, PSTR("km/h"), 0); |
// max Distance |
lcd_printp_at (0, ++line, stats_item_pointers[2], 0); |
write_ndigit_number_u (14, line, max_Distance / 10, 3, 0); |
lcd_putc (17, line, 'm', 0); |
// max time |
lcd_printp_at (0, ++line, stats_item_pointers[4], 0); |
write_time (13, line, max_FlyingTime); |
// min voltage |
lcd_printp_at (0, ++line, stats_item_pointers[3], 0); |
write_ndigit_number_u_10th (13, line, min_UBat, 3, 0); |
lcd_putc (17, line, 'V', 0); |
#if 1 |
// max Current |
lcd_printp_at (0, ++line, stats_item_pointers[5], 0); |
write_ndigit_number_u_10th (13, line, max_Current, 3, 0); |
lcd_putc (17, line, 'A', 0); |
// Used Capacity |
lcd_printp_at (0, ++line, stats_item_pointers[6], 0); |
write_ndigit_number_u (13, line, max_Capacity, 4, 0); |
lcd_printp_at(17, line, PSTR("mAh"), 0); |
#else |
// longitude |
lcd_printp_at (0, ++line, stats_item_pointers[5], 0); |
write_gps_pos (8, line, naviData->CurrentPosition.Longitude); |
// latitude |
lcd_printp_at (0, ++line, stats_item_pointers[6], 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_printp_at (0, 0, PSTR(" Breitengr Längengr "), 2); |
lcd_puts_at(0, 0, strGet(START_LASTPOS1), 2); |
// lcd_printp_at (12, 7, PSTR("Ende"), 0); |
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); |
lcd_printp_at (3, ij+1, PSTR("."), 0); |
write_ndigit_number_u (4, ij+1, (uint16_t)((lon/1000) % 10000), 4, 1); |
write_ndigit_number_u (8, ij+1, (uint16_t)((lon/10) % 100), 2, 1); |
uint32_t lat = last5pos[ij].Longitude; |
write_ndigit_number_u (12, ij+1, (uint16_t)(lat/10000000), 2, 0); |
lcd_printp_at (14, ij+1, PSTR("."), 0); |
write_ndigit_number_u (15, ij+1, (uint16_t)((lat/1000) % 10000), 4, 1); |
write_ndigit_number_u (19, ij+1, (uint16_t)((lat/10) % 100), 2, 1); |
} |
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); |
lcd_printp_at (3, 6, PSTR("."), 0); |
write_ndigit_number_u (4, 6, (uint16_t)((lon/1000) % 10000), 4, 1); |
write_ndigit_number_u (8, 6, (uint16_t)((lon/10) % 100), 2, 1); |
uint32_t lat = last5pos[0].Longitude; |
write_ndigit_number_u (12, 6, (uint16_t)(lat/10000000), 2, 0); |
lcd_printp_at (14, 6, PSTR("."), 0); |
write_ndigit_number_u (15, 6, (uint16_t)((lat/1000) % 10000), 4, 1); |
write_ndigit_number_u (19, 6, (uint16_t)((lat/10) % 100), 2, 1); |
} |
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 (!timer) |
// { // timeout occured |
if (flag) |
{ |
// Falls Spannungswarnung an war Beeper aus// |
BeepTime = 0; |
BeepMuster = 0xFFFF; |
lcd_cls (); |
WriteLastPosition(last5pos[0].Longitude,last5pos[0].Latitude); // im EEprom speichern |
lcd_puts_at(0, 0, strGet(OSD_ERROR), 2); |
// lcd_printp_at (0, 0, PSTR(" ERROR: Datenverlust "), 2); |
// lcd_printp_at (0, 2, PSTR("Letzte bekannte"), 0); |
// lcd_printp_at (0, 3, PSTR("Position gespeichert."), 0); |
lcd_puts_at(0, 2, strGet(OSD_POS1), 0); |
lcd_puts_at(0, 3, strGet(OSD_POS2), 0); |
// lcd_printp_at (19, 7, PSTR("OK"), 0); |
lcd_puts_at(19, 7, strGet(OK), 0); |
// lcd_printp_at (0, 5, PSTR(" Breitengr Längengr "), 0); |
lcd_puts_at(0, 5, strGet(START_LASTPOS1), 0); |
lcd_puts_at(12, 7, strGet(ENDE), 0); |
BeepTime = 250; |
BeepMuster = 0x0080; |
error = 1; |
uint32_t lon = last5pos[0].Latitude; |
write_ndigit_number_u (1, 6, (uint16_t)(lon/10000000), 2, 0); |
lcd_printp_at (3, 6, PSTR("."), 0); |
write_ndigit_number_u (4, 6, (uint16_t)((lon/1000) % 10000), 4, 1); |
write_ndigit_number_u (8, 6, (uint16_t)((lon/10) % 100), 2, 1); |
uint32_t lat = last5pos[0].Longitude; |
write_ndigit_number_u (12, 6, (uint16_t)(lat/10000000), 2, 0); |
lcd_printp_at (14, 6, PSTR("."), 0); |
write_ndigit_number_u (15, 6, (uint16_t)((lat/1000) % 10000), 4, 1); |
write_ndigit_number_u (19, 6, (uint16_t)((lat/10) % 100), 2, 1); |
// 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(); |
BeepTime = 250; |
BeepMuster = 0x0080; |
} |
// } |
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 osd (uint8_t ShowMode) |
{ |
uint8_t flag; |
uint8_t tmp_dat; |
uint8_t OSD_Mode; |
uint8_t info_3D = 0; |
// 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; |
uint16_t old_hh = 0; |
uint8_t old_AngleNick = 0; |
uint8_t old_AngleRoll = 0; |
lcd_cls(); |
OSD_Mode = ShowMode; |
// if(error == 0) |
// lcd_cls(); |
if (hardware == FC) |
{ |
lcd_printp_at(0, 3, PSTR("Only with NC !"), 0); |
timer = 100; |
while (timer > 0); |
return; |
} |
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); |
flag = 0; |
timer = TIMEOUT; |
abo_timer = ABO_TIMEOUT; |
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->FCFlags & FCFLAG_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 (); |
if (get_key_press (1 << KEY_PLUS)) |
print_position (); |
} |
lcd_ecircle(22, 35, 16, 1); |
// Ground Speed |
write_ndigit_number_u (1, 0, (uint16_t) (((uint32_t) naviData->GroundSpeed * (uint32_t) 9) / (uint32_t) 250), 3, 0); |
lcd_printp_at(4, 0, PSTR("km/h"), 0); |
// Compass |
write_ndigit_number_u (14, 0, naviData->CompassHeading, 3, 0); |
lcd_putc (17, 0, 0x1E, 0); // degree symbol |
lcd_printp_at (18, 0, (const char *) (pgm_read_word ( &(directions_p[heading_conv(naviData->CompassHeading)]))), 0); |
draw_compass (12, 1, naviData->CompassHeading); |
// 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 (0, 1, naviData->Altimeter / (30 / AltimeterAdjust), 4, 0); |
else // up to 10m write meters.dm |
write_ndigit_number_s_10th (0, 1, naviData->Altimeter / (3 / AltimeterAdjust), 3, 0); |
lcd_putc (4, 1, 'm', 0); |
draw_variometer (54, 7, 10, 14, naviData->Variometer); |
// TODO: verify correctness |
uint16_t heading_home = (naviData->HomePositionDeviation.Bearing + 360 - naviData->CompassHeading) % 360; |
lcd_ecirc_line (22, 35, 15, old_hh, 0); |
old_hh = heading_home; |
lcd_ecirc_line (22, 35, 15, heading_home, 1); |
write_ndigit_number_u (7, 3, heading_home, 3, 0); |
lcd_putc (10, 3, 0x1e, 0); // degree symbol |
write_ndigit_number_u (7, 2, naviData->HomePositionDeviation.Distance / 10, 3, 0); |
lcd_putc (10, 2, 'm', 0); |
// Sats in use |
lcd_printp_at(11, 4, PSTR("Sats"), 0); |
write_ndigit_number_u (8, 4, naviData->SatsInUse, 2, 0); |
if (naviData->NCFlags & NC_FLAG_MANUAL_CONTROL) |
lcd_putc (19, 4, 'M', 0); // rc transmitter |
else |
lcd_putc (19, 4, 'X', 0); // clear |
if (naviData->NCFlags & NC_FLAG_CH) |
lcd_printp_at (8, 5, PSTR("Coming Home"), 0); |
else if (naviData->NCFlags & NC_FLAG_PH) |
lcd_printp_at (8, 5, PSTR("Pos. Hold "), 0); |
else // (naviData->NCFlags & NC_FLAG_FREE) |
lcd_printp_at (8, 5, PSTR("Free "), 0); |
// Flying time |
write_time (7, 6, naviData->FlyingTime); |
lcd_printp_at (12, 6, PSTR("h"), 0); |
// RC |
write_ndigit_number_u (15, 6, naviData->RC_Quality, 3, 0); |
lcd_printp_at(18, 6, PSTR("\x1F"), 0); // RC-transmitter |
if (naviData->NCFlags & NC_FLAG_NOSERIALLINK) |
{ |
lcd_printpns_at(19, 6, PSTR(" "), 0); // clear |
} |
else |
{ |
lcd_printpns_at(19, 6, PSTR("PC"), 0); |
} |
// Battery level |
write_ndigit_number_u_10th (0, 7, naviData->UBat, 3, 0); |
lcd_putc (4, 7, 'V', 0); |
// Akku Warnung |
if (naviData->UBat < MK_LowBat) |
{ //Beeper ein |
BeepTime = 3000; |
BeepMuster = 0x0020; |
} |
//if (naviData->UBat > MK_LowBat+2) //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 |
// Current |
write_ndigit_number_u_10th (7, 7, naviData->Current, 3, 0); |
lcd_putc (11, 7, 'A', 0); |
// Capacity |
write_ndigit_number_u (14, 7, naviData->UsedCapacity, 4, 0); |
lcd_printp_at(18, 7, PSTR("mAh"), 0); |
// remember statistics (only when engines running) |
if (naviData->FCFlags & FCFLAG_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->FCFlags; |
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(0,32,128,32,1); // horizontal // |
lcd_line(64,0,64,64,1); // vertical // |
lcd_printp_at(12, 7, PSTR("End Info"), 0); |
// 45' Angel |
lcd_line(62,11,66,11,1); // -- // |
lcd_line(22,30,22,34,1); // | // |
lcd_line(106,30,106,34,1); // | // |
lcd_line(62,53,66,53,1); // -- // |
if (info_3D == 1) |
{ |
lcd_line(34,17,36,15,1); // / // |
lcd_line(92,15,94,17,1); // \ // |
lcd_line(34,47,36,49,1); // \ // |
lcd_line(92,49,94,47,1); // / // |
// lcd_printp_at(9, 0, PSTR("V"), 0); |
// lcd_printp_at(0, 3, PSTR("L"), 0); |
// lcd_printp_at(20, 3, PSTR("R"), 0); |
// lcd_printp_at(9, 7, PSTR("H"), 0); |
lcd_puts_at(9, 0, strGet(OSD_V), 0); |
lcd_puts_at(0, 3, strGet(OSD_L), 0); |
lcd_puts_at(20, 3, strGet(OSD_R), 0); |
lcd_puts_at(9, 7, strGet(OSD_H), 0); |
lcd_printp_at(0, 0, PSTR("N:"), 0); |
write_ndigit_number_s (2, 0, naviData->AngleNick, 3, 0); |
lcd_printp_at(0, 7, PSTR("R:"), 0); |
write_ndigit_number_s (2, 7, naviData->AngleRoll, 3, 0); |
lcd_printp_at(15, 0, PSTR("K:"), 0); |
write_ndigit_number_s (18, 0,head_home, 3, 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+64; |
lcd_ecircle(old_AngleRoll,old_AngleNick, 10, 0); |
lcd_ecirc_line (old_AngleRoll, old_AngleNick, 9, old_hh, 0); |
lcd_ecircle(Roll, Nick, 10, 1); |
lcd_ecirc_line (Roll, Nick, 9, 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->FCFlags; |
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; |
} |
} |
while (!get_key_press (1 << KEY_ESC)); |
// while (!get_key_press (1 << KEY_ESC) && timer); |
// get_key_press(KEY_ALL); |
// |
// |
// // 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 (!timer) |
// { // timeout occured |
// if (flag) |
// { |
// // Falls Spannungswarnung an war Beeper aus// |
// BeepTime = 0; |
// BeepMuster = 0xFFFF; |
// |
// lcd_cls (); |
// WriteLastPosition(last5pos[0].Longitude,last5pos[0].Latitude); // im EEprom speichern |
// lcd_puts_at(0, 0, strGet(OSD_ERROR), 2); |
// |
//// lcd_printp_at (0, 0, PSTR(" ERROR: Datenverlust "), 2); |
// |
//// lcd_printp_at (0, 2, PSTR("Letzte bekannte"), 0); |
//// lcd_printp_at (0, 3, PSTR("Position gespeichert."), 0); |
// lcd_puts_at(0, 2, strGet(OSD_POS1), 0); |
// lcd_puts_at(0, 3, strGet(OSD_POS2), 0); |
//// lcd_printp_at (19, 7, PSTR("OK"), 0); |
// lcd_puts_at(19, 7, strGet(OK), 0); |
//// lcd_printp_at (0, 5, PSTR(" Breitengr Längengr "), 0); |
// |
// lcd_puts_at(0, 5, strGet(START_LASTPOS1), 0); |
// |
// lcd_puts_at(12, 7, strGet(ENDE), 0); |
// |
// BeepTime = 1500; |
// BeepMuster = 0x0040; |
// error = 1; |
// |
// uint32_t lon = last5pos[0].Longitude; |
// write_ndigit_number_u (1, 6, (uint16_t)(lon/10000000), 2, 0); |
// lcd_printp_at (3, 6, PSTR("."), 0); |
// write_ndigit_number_u (4, 6, (uint16_t)((lon/1000) % 10000), 4, 1); |
// write_ndigit_number_u (8, 6, (uint16_t)((lon/10) % 100), 2, 1); |
// |
// uint32_t lat = last5pos[0].Latitude; |
// write_ndigit_number_u (12, 6, (uint16_t)(lat/10000000), 2, 0); |
// lcd_printp_at (14, 6, PSTR("."), 0); |
// write_ndigit_number_u (15, 6, (uint16_t)((lat/1000) % 10000), 4, 1); |
// write_ndigit_number_u (19, 6, (uint16_t)((lat/10) % 100), 2, 1); |
// |
// while (!get_key_press (1 << KEY_ENTER)); |
// |
// timer = TIMEOUT; |
// lcd_cls(); |
// return; |
// |
// } |
// } |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/osd.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 _OSD_H |
#define _OSD_H |
void osd (uint8_t ShowMode); |
void vario_beep_output (void); |
void OSD_Timeout(uint8_t flag); |
#endif |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/parameter.c |
---|
0,0 → 1,1384 |
/***************************************************************************** |
* 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 "main.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) |
//-------------------------------------------------------------- |
// Group, Typ, Min, Max, Struct-Name(Value), Default1, Default2, Default3+4+5, |
// 0 1 2 3 4 5 6 7 |
// ||| |
// Typ == (0 ohne Poti, 1 mit Poti, 2 bitfield, 3 serCh, 4 LEDmask, 5 Angle, 6 Empfaenger), |
// |
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,0x04, 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,0x01, MKOSO(GlobalConfig), 0,0,0, // hoehenregler |
1,2,0,0x20, MKOSO(GlobalConfig), 1,1,1, // gps |
1,2,0,0x08, MKOSO(GlobalConfig), 1,1,1, // kompass |
1,2,0,0x10, MKOSO(GlobalConfig), 0,0,0, // feste ausrichtung |
1,2,0,0x04, MKOSO(ExtraConfig), 0,0,0, // erweiterte signal pruefung |
1,2,0,0x40, MKOSO(GlobalConfig), 1,1,1, // achsentkopplung |
1,2,0,0x80, MKOSO(GlobalConfig), 0,0,0, // drehratenbregrenzung |
1,2,0,0x04, 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,0x01, MKOSO(BitConfig), 0,0,0, // oben |
3,2,0,0x02, MKOSO(BitConfig), 0,0,0, // unten |
3,2,0,0x04, MKOSO(BitConfig), 0,0,0, // links |
3,2,0,0x08, 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,0x01, MKOSO(GlobalConfig), 0,0,0, // hoehenrelger |
4,2,0,0x01, MKOSO(ExtraConfig), 0,0,0, // vario oder hoeenbergenzung |
4,2,0,0x02, MKOSO(GlobalConfig), 1,1,1, // hoehenschalter |
4,2,0,0x02, 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-66 |
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,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,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,0x20, MKOSO(ExtraConfig), 0,0,0, // dynamic ph |
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,0x20, MKOSO(BitConfig), 0,0,0, // Motor_Off_Led1 |
7,2,0,0x10, 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,0x40, MKOSO(BitConfig), 0,0,0, // Motor_Off_Led2 |
7,2,0,0x80, 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,0x40, MKOSO(ExtraConfig), 0,0,0, // teachable Carefree |
8,0,0,247, MKOSO(UnterspannungsWarnung), 33,33,33, |
8,2,0,0x08, 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, |
8,2,0,0x80, MKOSO(ExtraConfig), 0,0,0, // Ignore Compass Error |
8,2,0,0x10, MKOSO(ExtraConfig), 0,0,0, // Kein Summer ohne Sender beim Start |
// 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,0x80, 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,0x40, 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 7 |
prog_char param_items_rx[ITEMS_RX][17]= // zeilen,zeichen+1 |
{ |
"PPM ", |
"Spektrum ", |
"Spektrum HiRes ", |
"Spektrum LoRes ", |
"Jeti ", |
"ACT DSL ", |
"HOTT ", |
}; |
//-------------------------------------------------------------- |
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 (9, 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(11, 0, 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); |
// 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); |
write_ndigit_number_u(14,3,tosetting, 1,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); |
write_ndigit_number_u (9, 4, max, 3, 0); |
write_ndigit_number_u (17, 4, defaultvalue, 3, 0); |
do |
{ |
write_ndigit_number_u (0, 4, newvalue, 3, 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); |
} |
else |
write_ndigit_number_u (17, 4, defaultvalue, 3, 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); |
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); |
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); |
do |
{ |
if (newvalue<=(max-13)) |
write_ndigit_number_u (0, 4, newvalue, 3, 0); |
else |
{ |
if (newvalue<=(max-1)) |
{ |
lcd_printp_at (0, 4, PSTR("S"), 0); |
write_ndigit_number_u (1, 4, (newvalue-12), 2, 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); |
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); |
if(value >= 248) |
{ |
lcd_printp_at (18, ii+1, PSTR(" P"), 0); |
write_ndigit_number_u (20, ii+1, 256-value, 1, 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); |
else |
if (value<=(24)) |
{ |
lcd_printp_at (18, ii+1, PSTR("S"), 0); |
write_ndigit_number_u (19, ii+1, (value-12), 2, 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); |
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); |
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 |
write_ndigit_number_u (18, ii+1, *(((uint8_t*)mk_param_struct) + pgm_read_byte(param_config+(8*items[ii+offset2])+4)), 3, 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, 7, 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); |
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; |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/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 |
void edit_parameter (void); |
uint8_t load_setting(uint8_t setting); |
#endif |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/parameter_names.h |
---|
0,0 → 1,267 |
/***************************************************************************** |
* 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 144 |
#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."}, |
{"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. ","Seuil Reponse ","Seuil Reponse ","Drempelwaarde "}, |
{"Hysterese ","Hysteresis ","Hysteresis ","Hysterese "}, |
{"Umkehrp. Nick ","Nick Invers ","Invers Roulis ","Nick geinvert."}, |
{"Umkehrp. Roll ","Roll Invers ","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.","Switch f. High","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. High ","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-66 |
{"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"}, |
{"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"}, |
{"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) 67-85 "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 "}, |
{"CH Höhe ","CH High ","CH High ","CH Hoogte "}, |
// group 7 : (ausgaenge) 86-95 |
{"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"}, |
{"LED1 Vmin.Warn","Out1 undervolt","Al Undervoltag","Uitg1 ondersp."}, |
{"LED2 Vmin.Warn","Out2 undervolt","Al Undervoltag","Uitg2 ondersp."}, |
// group 8 : (verschiedenes) 96-107 |
{"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"}, |
{"Compass Error ","Compass Error ","Compass Error ","Kompas Error "}, |
{"k.Summer o Sen","Compass Error ","Son Abs Emett ","Kompas Error "}, |
// group 9 : (gyro) 108-120 |
{"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) 121-128 |
{"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) 129-132 |
{"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) 133 |
{"Orientierung ","Orientierung ","Orientation "}, |
// group 13 (easy) 134-144 |
{"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 "}, |
}; |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/servo.c |
---|
0,0 → 1,156 |
/***************************************************************************** |
* 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) |
{ |
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); // 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) |
{ |
BeepTime = 200; |
BeepMuster = 0x0080; |
} |
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) |
{ |
BeepTime = 200; |
BeepMuster = 0x0080; |
} |
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; |
BeepTime = 200; |
BeepMuster = 0x0080; |
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); // 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); // 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); |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/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 |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/setup.c |
---|
0,0 → 1,1969 |
/***************************************************************************** |
* 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" |
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; |
uint8_t Pre; |
uint16_t Pre16; |
char EditString[21]; |
uint8_t bt_name_len; |
//-------------------------------------------------------------- |
#define ITEMS_PKT 9 |
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"}, |
{"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"}, |
{"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 7 |
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 "}, |
{"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 8 |
prog_char param_menuitems_wi[ITEMS_WI][NUM_LANG][18]= // zeilen,zeichen+1 |
// German, English, French, Dutch |
{ |
{"Modul eingebaut? ","module built in? ","Module installé ","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 "}, |
{"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 installé ","module geïnstall?"}, |
{"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 "}, |
}; |
//-------------------------------------------------------------- |
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); |
// 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); |
} |
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); |
} |
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); |
// 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); |
} |
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); |
} |
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 ||HWVERSION1_3W |
//-------------------------------------------------------------- |
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 |
//-------------------------------------------------------------- |
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; |
} |
} |
//-------------------------------------------------------------- |
uint8_t Edit_StartInfo(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; |
// 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; |
// 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; |
// 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; |
// 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_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); |
// 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); |
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; |
BeepTime = 200; |
BeepMuster = 0x0080; |
} |
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; |
BeepTime = 200; |
BeepMuster = 0x0080; |
} |
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); |
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); |
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); |
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; |
BeepTime = 200; |
BeepMuster = 0x0080; |
} |
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; |
BeepTime = 200; |
BeepMuster = 0x0080; |
} |
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; |
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) |
MK_LowBat = Edit_Int10th_Value(MK_LowBat,33,247,LOWBAT); |
if((val + Offset) == 3) |
Display_Setup(); |
if((val + Offset) == 4) |
{ |
#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(); |
} |
else |
Wi_Setup(); |
#else |
Show_Error_HW12(); |
#endif |
} |
if((val + Offset) == 5) |
{ |
#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) == 6) |
#ifdef HWVERSION3_9 |
Accu_Setup(); |
#else |
Show_Error_HW12(); |
#endif |
if((val + Offset) == 7) |
Update_PKT(); |
if((val + Offset) == 8) |
Debug = Edit_Int_Value(Debug,0,1,DEBUGPKT); |
if((val + Offset) == 9) |
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_StartInfo(PKT_StartInfo,0,2,DISPLAY2); |
if((val + Offset) == 2) |
DisplayLanguage = Edit_Language(DisplayLanguage,0,3,DISPLAY3); |
// Edit_Language(DisplayLanguage,0,3,DISPLAY3); |
if((val + Offset) == 3) |
DisplayTimeout = Edit_Int_Value(DisplayTimeout,0,254,DISPLAY4); |
if((val + Offset) == 4) |
LCD_Helligkeit = Edit_DisplayHelligkeit(LCD_Helligkeit,0,100,DISPLAY5); |
if (edit == 1) |
if(!LCD_Change) |
LCD_Change =1; |
if((val + Offset) == 5) |
LCD_Kontrast = Edit_DisplayKontrast(LCD_Kontrast,0,63,DISPLAY6); |
if (edit == 1) |
if(!LCD_Change) |
LCD_Change =1; |
if((val + Offset) == 6) |
{ |
LCD_DisplayMode = Edit_DisplayMode(LCD_DisplayMode,0,4,DISPLAY7); |
if (edit == 1) |
if(!LCD_Change) |
LCD_Change =1; |
} |
if((val + Offset) == 7) |
{ |
LCD_Orientation = Edit_Orientation(LCD_Orientation,0,4,DISPLAY8); |
if (edit == 1) |
if(!LCD_Change) |
LCD_Change =1; |
} |
} |
} |
#if defined HWVERSION3_9 ||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(); |
// WriteParameter(); |
// } |
return; |
} |
else |
if (edit == 1) |
{ |
if (UseWi==true) InitWi232(); |
WriteParameter(); |
} |
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,WINETWG); |
} |
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) |
InitWi232(); |
if((val + Offset) == 8) |
Port_USB2CFG_Wi(); |
} |
} |
#endif |
#ifdef HWVERSION3_9 |
//-------------------------------------------------------------- |
// |
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; |
} |
} |
////-------------------------------------------------------------- |
//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; |
// } |
// } |
//} |
//-------------------------------------------------------------- |
// |
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,BT1); |
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; |
BeepTime = 1000; |
BeepMuster = 0x0040; |
} |
} |
if((val + Offset) == 5) |
Port_FC2CFG_BT(); |
} |
} |
//-------------------------------------------------------------- |
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); |
// 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); |
} |
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); |
} |
if (get_key_press (1 << KEY_ENTER)) |
return Value; |
show_Lipo(); |
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(); |
} |
} |
} |
#endif |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/setup.h |
---|
0,0 → 1,50 |
/***************************************************************************** |
* 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); |
uint8_t Edit_Language(uint8_t Value, uint8_t min, uint8_t max,uint8_t Text); |
extern uint8_t bt_name_len; |
#endif |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/timer.c |
---|
0,0 → 1,519 |
/***************************************************************************** |
* 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" |
#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; |
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 << PD7); |
} |
ISR(TIMER2_COMPB_vect) |
{ |
PORTD &= ~(1 << PD7); |
} |
#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 |
{ |
BeepTime = 200; |
BeepMuster = 0x0080; |
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 |
LipoCheck(); // Lipo prüfen |
#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; |
} |
if (beeper_ein) |
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 --; |
} |
//-------------------------------------------------------------- |
#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 |
{ |
BeepTime = 1000; |
BeepMuster = 0x0020; |
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; |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/timer.h |
---|
0,0 → 1,87 |
/***************************************************************************** |
* 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 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. |
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 |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/tools.c |
---|
0,0 → 1,332 |
/***************************************************************************** |
* 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 |
{ |
// 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); |
show_Lipo(); |
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); |
// 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; |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/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 |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/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); |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/twimaster.h |
---|
0,0 → 1,100 |
#ifndef _I2C_MASTER_H |
#define _I2C_MASTER_H |
+ |
+#include <inttypes.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 |
+ |
+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 |
+ int8_t Temperature; // old BL-Ctrl will return a 255 here, the new version the temp. in �C |
+} __attribute__((packed)) MotorData_t; |
+ |
+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 |
+ |
+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; |
+ |
+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 |
+ |
+ |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/uart1.c |
---|
0,0 → 1,303 |
/************************************************************************* |
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 "uart1.h" |
#include "main.h" |
// |
// constants and macros |
// |
// 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 |
// |
#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; |
} |
//-------------------------------------------------------------- |
// 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 |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/uart1.h |
---|
0,0 → 1,167 |
/************************************************************************ |
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 32 |
#endif |
// Size of the circular transmit buffer, must be power of 2 |
#ifndef UART_TX_BUFFER_SIZE |
#define UART_TX_BUFFER_SIZE 32 |
#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 |
// 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 |
// |
// 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 |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/usart.c |
---|
0,0 → 1,634 |
/***************************************************************************** |
* 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" |
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 (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; |
UBRRH = (unsigned char)(baudrate>>8); |
UBRRL = (unsigned char) baudrate; |
#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); |
} |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/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 |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/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); |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/Transportables_Koptertool/branch/GPL_PKT_V3_5_8b_FC086/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 |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/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 |