Subversion Repositories Projects

Compare Revisions

Regard whitespace Rev 725 → Rev 729

/Transportables_Koptertool/tags/V-0.1/F8X6.c
0,0 → 1,290
/*******************************************************************************
;
; taskit Rechnertechnik Berlin GmbH
; Kaiser-Friedrich-Straáe 51
; 1000 Berlin 12
; Tel. 030-3245836
; FAX 030-3232649
;
;
; Projekt :
;
; Datei :
;
; Funktion :
;
; Version :
;
; Letzte Änderung : 06/28/95 - 15:04:59
;
; Info :
;
*******************************************************************************/
#include <avr/pgmspace.h>
 
//Die Bytes gehören zu jeweils einer Spalte des Buchstabens
//D7 ist dabei das unterste Bit. Es handelt sich um einen DOS-Font !
//DOS-Zeichensatz
 
prog_uchar f8x6[ 256 ][ 6 ] =
{
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 0
{ 0x3E,0x5B,0x4F,0x5B,0x3E,0x00 }, // ASCII - 1
{ 0x3E,0x6B,0x4F,0x6B,0x3E,0x00 }, // ASCII - 2
{ 0x1C,0x3E,0x7C,0x3E,0x1C,0x00 }, // ASCII - 3
{ 0x18,0x3C,0x7E,0x3C,0x18,0x00 }, // ASCII - 4
{ 0x1C,0x57,0x7D,0x57,0x1C,0x00 }, // ASCII - 5
{ 0x1C,0x5E,0x7F,0x5E,0x1C,0x00 }, // ASCII - 6
{ 0x00,0x18,0x3C,0x18,0x00,0x00 }, // ASCII - 7
{ 0xFF,0xE7,0xC3,0xE7,0xFF,0x00 }, // ASCII - 8
{ 0x00,0x18,0x24,0x18,0x00,0x00 }, // ASCII - 9
{ 0xFF,0xE7,0xDB,0xE7,0xFF,0x00 }, // ASCII - 10
{ 0x30,0x48,0x3A,0x06,0x0E,0x00 }, // ASCII - 11
{ 0x26,0x29,0x79,0x29,0x26,0x00 }, // ASCII - 12
{ 0x40,0x7F,0x05,0x05,0x07,0x00 }, // ASCII - 13
{ 0x40,0x7F,0x05,0x25,0x3F,0x00 }, // ASCII - 14
{ 0x5A,0x3C,0xE7,0x3C,0x5A,0x00 }, // ASCII - 15
{ 0x7F,0x3E,0x1C,0x1C,0x08,0x00 }, // ASCII - 16
{ 0x08,0x1C,0x1C,0x3E,0x7F,0x00 }, // ASCII - 17
{ 0x14,0x22,0x7F,0x22,0x14,0x00 }, // ASCII - 18
{ 0x5F,0x5F,0x00,0x5F,0x5F,0x00 }, // ASCII - 19
{ 0x06,0x09,0x7F,0x01,0x7F,0x00 }, // ASCII - 20
{ 0x00,0x66,0x89,0x95,0x6A,0x00 }, // ASCII - 21
{ 0x60,0x60,0x60,0x60,0x60,0x60 }, // ASCII - 22
{ 0x94,0xA2,0xFF,0xA2,0x94,0x00 }, // ASCII - 23
{ 0x08,0x04,0x7E,0x04,0x08,0x00 }, // ASCII - 24
{ 0x10,0x20,0x7E,0x20,0x10,0x00 }, // ASCII - 25
{ 0x08,0x08,0x2A,0x1C,0x08,0x00 }, // ASCII - 26
{ 0x08,0x1C,0x2A,0x08,0x08,0x00 }, // ASCII - 27
{ 0x1E,0x10,0x10,0x10,0x10,0x00 }, // ASCII - 28
{ 0x0C,0x1E,0x0C,0x1E,0x0C,0x00 }, // ASCII - 29
{ 0x30,0x38,0x3E,0x38,0x30,0x00 }, // ASCII - 30
{ 0x06,0x0E,0x3E,0x0E,0x06,0x00 }, // ASCII - 31
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 32
{ 0x00,0x00,0x5F,0x00,0x00,0x00 }, // ASCII - 33
{ 0x00,0x07,0x00,0x07,0x00,0x00 }, // ASCII - 34
{ 0x14,0x7F,0x14,0x7F,0x14,0x00 }, // ASCII - 35
{ 0x24,0x2A,0x7F,0x2A,0x12,0x00 }, // ASCII - 36
{ 0x23,0x13,0x08,0x64,0x62,0x00 }, // ASCII - 37
{ 0x36,0x49,0x56,0x20,0x50,0x00 }, // ASCII - 38
{ 0x00,0x08,0x07,0x03,0x00,0x00 }, // ASCII - 39
{ 0x00,0x1C,0x22,0x41,0x00,0x00 }, // ASCII - 40
{ 0x00,0x41,0x22,0x1C,0x00,0x00 }, // ASCII - 41
{ 0x2A,0x1C,0x7F,0x1C,0x2A,0x00 }, // ASCII - 42
{ 0x08,0x08,0x3E,0x08,0x08,0x00 }, // ASCII - 43
{ 0x00,0x80,0x70,0x30,0x00,0x00 }, // ASCII - 44
{ 0x08,0x08,0x08,0x08,0x08,0x00 }, // ASCII - 45
{ 0x00,0x00,0x60,0x60,0x00,0x00 }, // ASCII - 46
{ 0x20,0x10,0x08,0x04,0x02,0x00 }, // ASCII - 47
{ 0x3E,0x51,0x49,0x45,0x3E,0x00 }, // ASCII - 48
{ 0x00,0x42,0x7F,0x40,0x00,0x00 }, // ASCII - 49
{ 0x72,0x49,0x49,0x49,0x46,0x00 }, // ASCII - 50
{ 0x21,0x41,0x49,0x4D,0x33,0x00 }, // ASCII - 51
{ 0x18,0x14,0x12,0x7F,0x10,0x00 }, // ASCII - 52
{ 0x27,0x45,0x45,0x45,0x39,0x00 }, // ASCII - 53
{ 0x3C,0x4A,0x49,0x49,0x31,0x00 }, // ASCII - 54
{ 0x41,0x21,0x11,0x09,0x07,0x00 }, // ASCII - 55
{ 0x36,0x49,0x49,0x49,0x36,0x00 }, // ASCII - 56
{ 0x46,0x49,0x49,0x29,0x1E,0x00 }, // ASCII - 57
{ 0x00,0x00,0x14,0x00,0x00,0x00 }, // ASCII - 58
{ 0x00,0x40,0x34,0x00,0x00,0x00 }, // ASCII - 59
{ 0x00,0x08,0x14,0x22,0x41,0x00 }, // ASCII - 60
{ 0x14,0x14,0x14,0x14,0x14,0x00 }, // ASCII - 61
{ 0x00,0x41,0x22,0x14,0x08,0x00 }, // ASCII - 62
{ 0x02,0x01,0x59,0x09,0x06,0x00 }, // ASCII - 63
{ 0x3E,0x41,0x5D,0x59,0x4E,0x00 }, // ASCII - 64
{ 0x7C,0x12,0x11,0x12,0x7C,0x00 }, // ASCII - 65
{ 0x7F,0x49,0x49,0x49,0x36,0x00 }, // ASCII - 66
{ 0x3E,0x41,0x41,0x41,0x22,0x00 }, // ASCII - 67
{ 0x7F,0x41,0x41,0x41,0x3E,0x00 }, // ASCII - 68
{ 0x7F,0x49,0x49,0x49,0x41,0x00 }, // ASCII - 69
{ 0x7F,0x09,0x09,0x09,0x01,0x00 }, // ASCII - 70
{ 0x3E,0x41,0x41,0x51,0x73,0x00 }, // ASCII - 71
{ 0x7F,0x08,0x08,0x08,0x7F,0x00 }, // ASCII - 72
{ 0x00,0x41,0x7F,0x41,0x00,0x00 }, // ASCII - 73
{ 0x20,0x40,0x41,0x3F,0x01,0x00 }, // ASCII - 74
{ 0x7F,0x08,0x14,0x22,0x41,0x00 }, // ASCII - 75
{ 0x7F,0x40,0x40,0x40,0x40,0x00 }, // ASCII - 76
{ 0x7F,0x02,0x1C,0x02,0x7F,0x00 }, // ASCII - 77
{ 0x7F,0x04,0x08,0x10,0x7F,0x00 }, // ASCII - 78
{ 0x3E,0x41,0x41,0x41,0x3E,0x00 }, // ASCII - 79
{ 0x7F,0x09,0x09,0x09,0x06,0x00 }, // ASCII - 80
{ 0x3E,0x41,0x51,0x21,0x5E,0x00 }, // ASCII - 81
{ 0x7F,0x09,0x19,0x29,0x46,0x00 }, // ASCII - 82
{ 0x26,0x49,0x49,0x49,0x32,0x00 }, // ASCII - 83
{ 0x03,0x01,0x7F,0x01,0x03,0x00 }, // ASCII - 84
{ 0x3F,0x40,0x40,0x40,0x3F,0x00 }, // ASCII - 85
{ 0x1F,0x20,0x40,0x20,0x1F,0x00 }, // ASCII - 86
{ 0x3F,0x40,0x38,0x40,0x3F,0x00 }, // ASCII - 87
{ 0x63,0x14,0x08,0x14,0x63,0x00 }, // ASCII - 88
{ 0x03,0x04,0x78,0x04,0x03,0x00 }, // ASCII - 89
{ 0x61,0x59,0x49,0x4D,0x43,0x00 }, // ASCII - 90
{ 0x00,0x7F,0x41,0x41,0x41,0x00 }, // ASCII - 91
{ 0x02,0x04,0x08,0x10,0x20,0x00 }, // ASCII - 92
{ 0x00,0x41,0x41,0x41,0x7F,0x00 }, // ASCII - 93
{ 0x04,0x02,0x01,0x02,0x04,0x00 }, // ASCII - 94
{ 0x40,0x40,0x40,0x40,0x40,0x00 }, // ASCII - 95
{ 0x00,0x03,0x07,0x08,0x00,0x00 }, // ASCII - 96
{ 0x20,0x54,0x54,0x78,0x40,0x00 }, // ASCII - 97
{ 0x7F,0x28,0x44,0x44,0x38,0x00 }, // ASCII - 98
{ 0x38,0x44,0x44,0x44,0x28,0x00 }, // ASCII - 99
{ 0x38,0x44,0x44,0x28,0x7F,0x00 }, // ASCII - 100
{ 0x38,0x54,0x54,0x54,0x18,0x00 }, // ASCII - 101
{ 0x00,0x08,0x7E,0x09,0x02,0x00 }, // ASCII - 102
{ 0x18,0xA4,0xA4,0x9C,0x78,0x00 }, // ASCII - 103
{ 0x7F,0x08,0x04,0x04,0x78,0x00 }, // ASCII - 104
{ 0x00,0x44,0x7D,0x40,0x00,0x00 }, // ASCII - 105
{ 0x20,0x40,0x40,0x3D,0x00,0x00 }, // ASCII - 106
{ 0x7F,0x10,0x28,0x44,0x00,0x00 }, // ASCII - 107
{ 0x00,0x41,0x7F,0x40,0x00,0x00 }, // ASCII - 108
{ 0x7C,0x04,0x78,0x04,0x78,0x00 }, // ASCII - 109
{ 0x7C,0x08,0x04,0x04,0x78,0x00 }, // ASCII - 110
{ 0x38,0x44,0x44,0x44,0x38,0x00 }, // ASCII - 111
{ 0xFC,0x18,0x24,0x24,0x18,0x00 }, // ASCII - 112
{ 0x18,0x24,0x24,0x18,0xFC,0x00 }, // ASCII - 113
{ 0x7C,0x08,0x04,0x04,0x08,0x00 }, // ASCII - 114
{ 0x48,0x54,0x54,0x54,0x24,0x00 }, // ASCII - 115
{ 0x04,0x04,0x3F,0x44,0x24,0x00 }, // ASCII - 116
{ 0x3C,0x40,0x40,0x20,0x7C,0x00 }, // ASCII - 117
{ 0x1C,0x20,0x40,0x20,0x1C,0x00 }, // ASCII - 118
{ 0x3C,0x40,0x30,0x40,0x3C,0x00 }, // ASCII - 119
{ 0x44,0x28,0x10,0x28,0x44,0x00 }, // ASCII - 120
{ 0x4C,0x90,0x90,0x90,0x7C,0x00 }, // ASCII - 121
{ 0x44,0x64,0x54,0x4C,0x44,0x00 }, // ASCII - 122
{ 0x00,0x08,0x36,0x41,0x00,0x00 }, // ASCII - 123
{ 0x00,0x00,0x77,0x00,0x00,0x00 }, // ASCII - 124
{ 0x00,0x41,0x36,0x08,0x00,0x00 }, // ASCII - 125
{ 0x02,0x01,0x02,0x04,0x02,0x00 }, // ASCII - 126
{ 0x3C,0x26,0x23,0x26,0x3C,0x00 }, // ASCII - 127
{ 0x1E,0xA1,0xA1,0x61,0x12,0x00 }, // ASCII - 128 80
{ 0x3A,0x40,0x40,0x20,0x7A,0x00 }, // ASCII - 129
{ 0x38,0x54,0x54,0x55,0x59,0x00 }, // ASCII - 130
{ 0x21,0x55,0x55,0x79,0x41,0x00 }, // ASCII - 131
{ 0x21,0x54,0x54,0x78,0x41,0x00 }, // ASCII - 132
{ 0x21,0x55,0x54,0x78,0x40,0x00 }, // ASCII - 133
{ 0x20,0x54,0x55,0x79,0x40,0x00 }, // ASCII - 134
{ 0x0C,0x1E,0x52,0x72,0x12,0x00 }, // ASCII - 135
{ 0x39,0x55,0x55,0x55,0x59,0x00 }, // ASCII - 136
{ 0x39,0x54,0x54,0x54,0x59,0x00 }, // ASCII - 137
{ 0x39,0x55,0x54,0x54,0x58,0x00 }, // ASCII - 138
{ 0x00,0x00,0x45,0x7C,0x41,0x00 }, // ASCII - 139
{ 0x00,0x02,0x45,0x7D,0x42,0x00 }, // ASCII - 140
{ 0x00,0x01,0x45,0x7C,0x40,0x00 }, // ASCII - 141
// { 0xF0,0x29,0x24,0x29,0xF0,0x00 }, // ASCII - 142 Ä
{ 0x79,0x14,0x12,0x14,0x79,0x00 }, // ASCII - 142 Ä korrigiert
{ 0xF0,0x28,0x25,0x28,0xF0,0x00 }, // ASCII - 143
{ 0x7C,0x54,0x55,0x45,0x00,0x00 }, // ASCII - 144 90
{ 0x20,0x54,0x54,0x7C,0x54,0x44 }, // ASCII - 145
{ 0x7C,0x0A,0x09,0x7F,0x49,0x41 }, // ASCII - 146
{ 0x32,0x49,0x49,0x49,0x32,0x00 }, // ASCII - 147
{ 0x32,0x48,0x48,0x48,0x32,0x00 }, // ASCII - 148
{ 0x32,0x4A,0x48,0x48,0x30,0x00 }, // ASCII - 149
{ 0x3A,0x41,0x41,0x21,0x7A,0x00 }, // ASCII - 150
{ 0x3A,0x42,0x40,0x20,0x78,0x00 }, // ASCII - 151
{ 0x00,0x9D,0xA0,0xA0,0x7D,0x00 }, // ASCII - 152
{ 0x39,0x44,0x44,0x44,0x39,0x00 }, // ASCII - 153
{ 0x3D,0x40,0x40,0x40,0x3D,0x00 }, // ASCII - 154
{ 0x3C,0x24,0xFF,0x24,0x24,0x00 }, // ASCII - 155
{ 0x48,0x7E,0x49,0x43,0x66,0x00 }, // ASCII - 156
{ 0x2B,0x2F,0xFC,0x2F,0x2B,0x00 }, // ASCII - 157
{ 0xFF,0x09,0x29,0xF6,0x20,0x00 }, // ASCII - 158
{ 0xC0,0x88,0x7E,0x09,0x03,0x00 }, // ASCII - 159
{ 0x20,0x54,0x54,0x79,0x41,0x00 }, // ASCII - 160
{ 0x00,0x00,0x44,0x7D,0x41,0x00 }, // ASCII - 161
{ 0x30,0x48,0x48,0x4A,0x32,0x00 }, // ASCII - 162
{ 0x38,0x40,0x40,0x22,0x7A,0x00 }, // ASCII - 163
{ 0x00,0x7A,0x0A,0x0A,0x72,0x00 }, // ASCII - 164
{ 0x7D,0x0D,0x19,0x31,0x7D,0x00 }, // ASCII - 165
{ 0x26,0x29,0x29,0x2F,0x28,0x00 }, // ASCII - 166
{ 0x26,0x29,0x29,0x29,0x26,0x00 }, // ASCII - 167
{ 0x30,0x48,0x4D,0x40,0x20,0x00 }, // ASCII - 168
{ 0x38,0x08,0x08,0x08,0x08,0x00 }, // ASCII - 169
{ 0x08,0x08,0x08,0x08,0x38,0x00 }, // ASCII - 170
{ 0x2F,0x10,0xC8,0xAC,0xBA,0x00 }, // ASCII - 171
{ 0x2F,0x10,0x28,0x34,0xFA,0x00 }, // ASCII - 172
{ 0x00,0x00,0x7B,0x00,0x00,0x00 }, // ASCII - 173
{ 0x08,0x14,0x2A,0x14,0x22,0x00 }, // ASCII - 174
{ 0x22,0x14,0x2A,0x14,0x08,0x00 }, // ASCII - 175
{ 0xAA,0x00,0x55,0x00,0xAA,0x00 }, // ASCII - 176
{ 0xAA,0x55,0xAA,0x55,0xAA,0x55 }, // ASCII - 177
{ 0x55,0xAA,0x55,0xAA,0x55,0xAA }, // ASCII - 178
{ 0x00,0x00,0x00,0xFF,0x00,0x00 }, // ASCII - 179
{ 0x10,0x10,0x10,0xFF,0x00,0x00 }, // ASCII - 180
{ 0x14,0x14,0x14,0xFF,0x00,0x00 }, // ASCII - 181
{ 0x10,0x10,0xFF,0x00,0xFF,0x00 }, // ASCII - 182
{ 0x10,0x10,0xF0,0x10,0xF0,0x00 }, // ASCII - 183
{ 0x14,0x14,0x14,0xFC,0x00,0x00 }, // ASCII - 184
{ 0x14,0x14,0xF7,0x00,0xFF,0x00 }, // ASCII - 185
{ 0x00,0x00,0xFF,0x00,0xFF,0x00 }, // ASCII - 186
{ 0x14,0x14,0xF4,0x04,0xFC,0x00 }, // ASCII - 187
{ 0x14,0x14,0x17,0x10,0x1F,0x00 }, // ASCII - 188
{ 0x10,0x10,0x1F,0x10,0x1F,0x00 }, // ASCII - 189
{ 0x14,0x14,0x14,0x1F,0x00,0x00 }, // ASCII - 190
{ 0x10,0x10,0x10,0xF0,0x00,0x00 }, // ASCII - 191
{ 0x00,0x00,0x00,0x1F,0x10,0x10 }, // ASCII - 192
{ 0x10,0x10,0x10,0x1F,0x10,0x10 }, // ASCII - 193
{ 0x10,0x10,0x10,0xF0,0x10,0x10 }, // ASCII - 194
{ 0x00,0x00,0x00,0xFF,0x10,0x10 }, // ASCII - 195
{ 0x10,0x10,0x10,0x10,0x10,0x10 }, // ASCII - 196
{ 0x10,0x10,0x10,0xFF,0x10,0x10 }, // ASCII - 197
{ 0x00,0x00,0x00,0xFF,0x14,0x14 }, // ASCII - 198
{ 0x00,0x00,0xFF,0x00,0xFF,0x10 }, // ASCII - 199
{ 0x00,0x00,0x1F,0x10,0x17,0x14 }, // ASCII - 200
{ 0x00,0x00,0xFC,0x04,0xF4,0x14 }, // ASCII - 201
{ 0x14,0x14,0x17,0x10,0x17,0x14 }, // ASCII - 202
{ 0x14,0x14,0xF4,0x04,0xF4,0x14 }, // ASCII - 203
{ 0x00,0x00,0xFF,0x00,0xF7,0x14 }, // ASCII - 204
{ 0x14,0x14,0x14,0x14,0x14,0x14 }, // ASCII - 205
{ 0x14,0x14,0xF7,0x00,0xF7,0x14 }, // ASCII - 206
{ 0x14,0x14,0x14,0x17,0x14,0x14 }, // ASCII - 207
{ 0x10,0x10,0x1F,0x10,0x1F,0x10 }, // ASCII - 208
{ 0x14,0x14,0x14,0xF4,0x14,0x14 }, // ASCII - 209
{ 0x10,0x10,0xF0,0x10,0xF0,0x10 }, // ASCII - 210
{ 0x00,0x00,0x1F,0x10,0x1F,0x10 }, // ASCII - 211
{ 0x00,0x00,0x00,0x1F,0x14,0x14 }, // ASCII - 212
{ 0x00,0x00,0x00,0xFC,0x14,0x14 }, // ASCII - 213
{ 0x00,0x00,0xF0,0x10,0xF0,0x10 }, // ASCII - 214
{ 0x10,0x10,0xFF,0x10,0xFF,0x10 }, // ASCII - 215
{ 0x14,0x14,0x14,0xFF,0x14,0x14 }, // ASCII - 216
{ 0x10,0x10,0x10,0x1F,0x00,0x00 }, // ASCII - 217
{ 0x00,0x00,0x00,0xF0,0x10,0x10 }, // ASCII - 218
{ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF }, // ASCII - 219
{ 0xF0,0xF0,0xF0,0xF0,0xF0,0xF0 }, // ASCII - 220
{ 0xFF,0xFF,0xFF,0x00,0x00,0x00 }, // ASCII - 221
{ 0x00,0x00,0x00,0xFF,0xFF,0xFF }, // ASCII - 222
{ 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F }, // ASCII - 223
{ 0x38,0x44,0x44,0x38,0x44,0x00 }, // ASCII - 224
{ 0x7C,0x2A,0x2A,0x3E,0x14,0x00 }, // ASCII - 225
{ 0x7E,0x02,0x02,0x06,0x06,0x00 }, // ASCII - 226
{ 0x02,0x7E,0x02,0x7E,0x02,0x00 }, // ASCII - 227
{ 0x63,0x55,0x49,0x41,0x63,0x00 }, // ASCII - 228
{ 0x38,0x44,0x44,0x3C,0x04,0x00 }, // ASCII - 229
{ 0x40,0x7E,0x20,0x1E,0x20,0x00 }, // ASCII - 230
{ 0x06,0x02,0x7E,0x02,0x02,0x00 }, // ASCII - 231
{ 0x99,0xA5,0xE7,0xA5,0x99,0x00 }, // ASCII - 232
{ 0x1C,0x2A,0x49,0x2A,0x1C,0x00 }, // ASCII - 233
{ 0x4C,0x72,0x01,0x72,0x4C,0x00 }, // ASCII - 234
{ 0x30,0x4A,0x4D,0x4D,0x30,0x00 }, // ASCII - 235
{ 0x30,0x48,0x78,0x48,0x30,0x00 }, // ASCII - 236
{ 0xBC,0x62,0x5A,0x46,0x3D,0x00 }, // ASCII - 237
{ 0x3E,0x49,0x49,0x49,0x00,0x00 }, // ASCII - 238
{ 0x7E,0x01,0x01,0x01,0x7E,0x00 }, // ASCII - 239
{ 0x2A,0x2A,0x2A,0x2A,0x2A,0x00 }, // ASCII - 240
{ 0x44,0x44,0x5F,0x44,0x44,0x00 }, // ASCII - 241
{ 0x40,0x51,0x4A,0x44,0x40,0x00 }, // ASCII - 242
{ 0x40,0x44,0x4A,0x51,0x40,0x00 }, // ASCII - 243
{ 0x00,0x00,0xFF,0x01,0x03,0x00 }, // ASCII - 244
{ 0xE0,0x80,0xFF,0x00,0x00,0x00 }, // ASCII - 245
{ 0x08,0x08,0x6B,0x6B,0x08,0x08 }, // ASCII - 246
{ 0x36,0x12,0x36,0x24,0x36,0x00 }, // ASCII - 247
{ 0x06,0x0F,0x09,0x0F,0x06,0x00 }, // ASCII - 248
{ 0x00,0x00,0x18,0x18,0x00,0x00 }, // ASCII - 249
{ 0x00,0x00,0x10,0x10,0x00,0x00 }, // ASCII - 250
{ 0x30,0x40,0xFF,0x01,0x01,0x00 }, // ASCII - 251
{ 0x00,0x1F,0x01,0x01,0x1E,0x00 }, // ASCII - 252
{ 0x00,0x19,0x1D,0x17,0x12,0x00 }, // ASCII - 253
{ 0x00,0x3C,0x3C,0x3C,0x3C,0x00 }, // ASCII - 254
{ 0x00,0x00,0x00,0x00,0x00,0x00 } // ASCII - 255
};
 
/************************ E n d o f F i l e ****************************/
/Transportables_Koptertool/tags/V-0.1/MMT.aps
0,0 → 1,0
<AVRStudio><MANAGEMENT><ProjectName>MMT</ProjectName><Created>16-May-2008 00:42:21</Created><LastEdit>22-May-2008 20:56:53</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>16-May-2008 00:42:21</Created><Version>4</Version><Build>4, 13, 0, 528</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\MMT.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>D:\Develop\MMT\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>ICE50</CURRENT_TARGET><CURRENT_PART>ATmega32</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>1</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>base64.c</SOURCEFILE><SOURCEFILE>displ_val.c</SOURCEFILE><SOURCEFILE>display.c</SOURCEFILE><SOURCEFILE>F8X6.c</SOURCEFILE><SOURCEFILE>lcd.c</SOURCEFILE><SOURCEFILE>main.c</SOURCEFILE><SOURCEFILE>menu.c</SOURCEFILE><SOURCEFILE>motortest.c</SOURCEFILE><SOURCEFILE>parameter.c</SOURCEFILE><SOURCEFILE>rs232.c</SOURCEFILE><SOURCEFILE>timer.c</SOURCEFILE><SOURCEFILE>settings.c</SOURCEFILE><SOURCEFILE>debug.c</SOURCEFILE><HEADERFILE>base64.h</HEADERFILE><HEADERFILE>displ_val.h</HEADERFILE><HEADERFILE>display.h</HEADERFILE><HEADERFILE>font8x6.h</HEADERFILE><HEADERFILE>lcd.h</HEADERFILE><HEADERFILE>main.h</HEADERFILE><HEADERFILE>menu.h</HEADERFILE><HEADERFILE>motortest.h</HEADERFILE><HEADERFILE>parameter.h</HEADERFILE><HEADERFILE>rs232.h</HEADERFILE><HEADERFILE>timer.h</HEADERFILE><HEADERFILE>settings.h</HEADERFILE><HEADERFILE>debug.h</HEADERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega32</PART><HEX>1</HEX><LIST>0</LIST><MAP>0</MAP><OUTPUTFILENAME>MMT.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>D:\WinAVR-20070525\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>D:\WinAVR-20070525\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/></IOView><Files><File00000><FileId>00000</FileId><FileName>lcd.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>settings.c</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>settings.h</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>main.h</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>lcd.h</FileName><Status>1</Status></File00004><File00005><FileId>00005</FileId><FileName>main.c</FileName><Status>1</Status></File00005><File00006><FileId>00006</FileId><FileName>menu.c</FileName><Status>1</Status></File00006></Files><Workspace><File00000><Position>270 211 1117 677</Position><LineCol>26 0</LineCol></File00000><File00001><Position>312 267 1159 733</Position><LineCol>9 0</LineCol></File00001><File00002><Position>179 65 1188 768</Position><LineCol>4 0</LineCol></File00002><File00003><Position>211 128 1058 594</Position><LineCol>43 0</LineCol></File00003><File00004><Position>255 186 1102 652</Position><LineCol>27 0</LineCol></File00004><File00005><Position>277 215 1124 681</Position><LineCol>88 0</LineCol></File00005><File00006><Position>188 71 1197 774</Position><LineCol>0 0</LineCol><State>Maximized</State></File00006></Workspace><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>
/Transportables_Koptertool/tags/V-0.1/base64.c
0,0 → 1,116
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "rs232.h"
#include "base64.h"
#include "lcd.h"
 
uint8_t r_buffer[128]; // Dieser Puffer enthält die Rohdaten (kodiert)
uint8_t p_buffer[128]; // Dieser Puffer enthält die Daten im Klartext
//struct str_DebugIn *p_buffer;
 
 
uint8_t get_message() // Liest eine komplette Übertragung und dekodiert sie
{
uint8_t index, comm;
timer = 20; // Timer für Timeout
while ((RS232_get() != '#') && (timer > 0)); // Warten auf Start-Zeichen #
if (timer > 0) // Falls kein Timeout auftrat
{
index = 0; // Die Rohdaten in r_buffer einlesen
do
{
comm = RS232_get();
r_buffer[index++] = comm;
if (index > 127) // Schutz vor Puffer-Überlauf
index = 127;
}
while (comm != 0x0D); // ... bis End-Signal = 0x0D kommt...
base64_decode(index); // Die base64-kodierten Rohdaten umwandeln
return 0; // kein Fehler aufgetreten
}
else
{
return 1; // Fehler aufgetreten
}
}
 
 
uint8_t base64_decode(uint8_t number) // Wandelt die base64-Rohdaten in lesbare Daten um
{
uint8_t p,q;
uint8_t a,b,c,d;
 
p = 2;
q = 0;
while (p < number)
{
a = r_buffer[p + 0] - 61;
b = r_buffer[p + 1] - 61;
c = r_buffer[p + 2] - 61;
d = r_buffer[p + 3] - 61;
p += 4;
p_buffer[q + 0] = (a << 2) | (b >> 4); // gespeichert werden die Daten in p_buffer
p_buffer[q + 1] = ((b & 0x0F) << 4) | (c >> 2);
p_buffer[q + 2] = ((c & 0x03) << 6) | d;
q += 3;
}
return q; // Rückgabe der Anzahl der Datenbytes
}
 
void base64_send(uint8_t number) // Sendet Daten zur Flight-Control
{ // Die Daten werden in p_buffer erwartet, umcodiert und gesendet
uint8_t bpointer,spointer;
uint8_t x,y,z,a;
uint16_t checksum;
 
r_buffer[0] = p_buffer[0];
r_buffer[1] = p_buffer[1];
r_buffer[2] = p_buffer[2];
 
bpointer = 3;
spointer = 3;
 
while (spointer < number)
{
x = p_buffer[spointer];
y = p_buffer[spointer + 1];
z = p_buffer[spointer + 2];
spointer += 3;
r_buffer[bpointer + 0] = (x >> 2) + 61;
r_buffer[bpointer + 1] = (((x & 0x03) << 4) | ((y & 0xF0) >> 4)) + 61;
r_buffer[bpointer + 2] = (((y & 0x0F) << 2) | ((z & 0xC0) >> 6)) + 61;
r_buffer[bpointer + 3] = (z & 0x3F) + 61;
bpointer += 4;
}
 
checksum = 0;
for(a=0;a<bpointer;a++)
checksum += r_buffer[a];
checksum %= 4096;
r_buffer[bpointer] = (checksum / 64) + 61;
r_buffer[bpointer + 1] = (checksum % 64) + 61;
r_buffer[bpointer + 2] = 13;
r_buffer[bpointer + 3] = 0;
bpointer += 3;
for(a=0;a<bpointer;a++)
RS232_send(r_buffer[a]);
}
/Transportables_Koptertool/tags/V-0.1/base64.h
0,0 → 1,12
#ifndef base64_h
#define base64_h
 
uint8_t base64_decode(uint8_t number);
void base64_send(uint8_t number);
uint8_t get_message(void);
 
uint8_t p_buffer[128]; // Dieser Puffer enthält die Daten im Klartext
uint8_t r_buffer[128]; // Dieser Puffer enthält die Rohdaten (kodiert)
 
 
#endif
/Transportables_Koptertool/tags/V-0.1/debug.c
0,0 → 1,228
// debug Data
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "lcd.h"
#include "rs232.h"
#include "base64.h"
#include "parameter.h"
#include "menu.h"
#include "debug.h"
 
uint8_t r_buffer[128]; // Dieser Puffer enthält die Rohdaten (kodiert)
//uint8_t p_buffer[128]; // Dieser Puffer enthält die Daten im Klartext
//struct str_DebugIn *p_buffer;
 
uint8_t base64_decode_debug(unsigned char *ptrOut, uint8_t number) // Wandelt die base64-Rohdaten in lesbare Daten um
{
uint8_t p,q;
uint8_t a,b,c,d;
 
p = 2;
q = 0;
while (p < number)
{
a = r_buffer[p + 0] - 61;
b = r_buffer[p + 1] - 61;
c = r_buffer[p + 2] - 61;
d = r_buffer[p + 3] - 61;
p += 4;
ptrOut[q + 0] = (a << 2) | (b >> 4); // gespeichert werden die Daten in p_buffer
ptrOut[q + 1] = ((b & 0x0F) << 4) | (c >> 2);
ptrOut[q + 2] = ((c & 0x03) << 6) | d;
q += 3;
}
return q; // Rückgabe der Anzahl der Datenbytes
}
 
uint8_t get_message_debug() // Liest eine komplette Übertragung und dekodiert sie
{
uint8_t index, comm;
timer = 20; // Timer für Timeout
while ((RS232_get() != '#') && (timer > 0)); // Warten auf Start-Zeichen #
if (timer > 0) // Falls kein Timeout auftrat
{
index = 0; // Die Rohdaten in r_buffer einlesen
do
{
comm = RS232_get();
r_buffer[index++] = comm;
if (index > 127) // Schutz vor Puffer-Überlauf
index = 127;
}
while (comm != 0x0D); // ... bis End-Signal = 0x0D kommt...
base64_decode_debug((unsigned char *) &DebugIn, index); // Die base64-kodierten Rohdaten umwandeln
return 0; // kein Fehler aufgetreten
}
else
{
return 1; // Fehler aufgetreten
}
}
 
uint8_t read_debug(uint8_t command) //
{
uint8_t timeout;
timeout = 0;
p_buffer[0] = '#'; // Debug-Daten anfordern
p_buffer[1] = 'a';
p_buffer[2] = 'c';
p_buffer[3] = command;
p_buffer[4] = 0;
p_buffer[5] = 0;
base64_send(6);
do // warten, bis die Parameter gesendet werden
{
if (get_message_debug() == 1)
timeout = 30;
timeout ++;
}
while ((r_buffer[1] != 'D') && (timeout < 30));
if (timeout >= 30)
return 1;
else
return 0;
}
 
#define isminus 65536 / 2
 
void decimal_int (unsigned int data, uint8_t *text) // wandelt Wert in rechtsbündigen Text um
{
int sign = 0;
text[0] = 0x20; // (schneller/kleiner als printf())
if (data > isminus)
{
data = 65536 - data;
sign = 1;
text[0] = '-';
}
 
text[1] = data/10000;
data -= (text[1] * 10000);
text[2] = data/1000;
data -= (text[2] *1000);
 
text[3] = data/100;
data -= (text[3] * 100);
text[4] = data/10;
data -= (text[4] *10);
 
 
text[5] = data + 0x30;
text[1] += 0x30;
text[2] += 0x30;
text[3] += 0x30;
text[4] += 0x30;
 
 
if (text[1] == 0x30)
{
text[0] = 0x20;
if (sign == 1) text[1] = '-'; else text[1] = 0x20;
if (text[2] == 0x30)
{
text[1] = 0x20;
if (sign == 1) text[2] = '-'; else text[2] = 0x20;
if (text[3] == 0x30)
{
text[2] = 0x20;
if (sign == 1) text[3] = '-'; else text[3] = 0x20;
if (text[4] == 0x30)
{
text[3] = 0x20;
if (sign == 1) text[4] = '-'; else text[4] = 0x20;
}
}
}
}
// if (sign == 1) text[0] = '-';
text[6] = 0x00;
}
 
void display_debug(void)
{
uint8_t line;
uint8_t zeile;
uint8_t text[10];
 
lcd_cls();
zeile = 0;
lcd_printp(PSTR("Debug-Display"),0);
do
{
while (key != 0x00);
if (read_debug(0) == 1)
{
lcd_printp(PSTR("\r\nTimeout!"),0);
timer = 200;
while (timer > 0);
break;
}
else
{
line = p_buffer[2];
text[0] = line;
text[1] = 0x00;
lcd_print_at(15,0,text,0);
//lcd_print_at(0,++zeile,p_buffer,0);
 
decimal_int(DebugIn.Analog[0],text);
lcd_print_at(0,1,"Nick",0);
lcd_print_at(10,1,text,0);
decimal_int(DebugIn.Analog[1],text);
lcd_print_at(0,2,"Roll",0);
lcd_print_at(10,2,text,0);
decimal_int(DebugIn.Analog[2],text);
lcd_print_at(0,3,"ACC Nick",0);
lcd_print_at(10,3,text,0);
decimal_int(DebugIn.Analog[3],text);
lcd_print_at(0,4,"ACC Roll",0);
lcd_print_at(10,4,text,0);
decimal_int(DebugIn.Analog[4],text);
lcd_print_at(0,5,"Gier",0);
lcd_print_at(10,5,text,0);
decimal_int(DebugIn.Analog[5],text);
lcd_print_at(0,6,"ACC",0);
lcd_print_at(10,6,text,0);
 
decimal_int(DebugIn.Analog[9],text);
lcd_print_at(0,7,"Spannung",0);
lcd_print_at(10,7,text,0);
 
// decimal_int(DebugIn.Analog[zeile],text);
// lcd_print_at(0,++zeile,text,0);
 
 
// decimal(p_buffer[zeile],text);
// lcd_print_at(0,++zeile,text,0);
 
if (zeile > 5) zeile = 0;
 
timer = 10;
while(timer > 0);
// if (key == 0x01)
// read_debug(1);
// if (key == 0x02)
// read_debug(2);
}
}
while (key != 0x04);
}
/Transportables_Koptertool/tags/V-0.1/debug.h
0,0 → 1,15
#ifndef debug_h
#define debug_h
 
void display_debug(void);
 
struct str_DebugIn
{
unsigned char Digital[2];
unsigned int Analog[32]; // Debugwerte
};
 
struct str_DebugIn DebugIn;
//extern struct str_DebugIn *p_buffer;
 
#endif
/Transportables_Koptertool/tags/V-0.1/default/MMT.eep
0,0 → 1,65
:1000000000000000000000000000000000000000F0
:1000100000000000000000000000000000000000E0
:1000200000000000000000000000000000000000D0
:1000300000000000000000000000000000000000C0
:1000400000000000000000000000000000000000B0
:1000500000000000000000000000000000000000A0
:100060000000000000000000000000000000000090
:100070000000000000000000000000000000000080
:100080000000000000000000000000000000000070
:100090000000000000000000000000000000000060
:1000A0000000000000000000000000000000000050
:1000B0000000000000000000000000000000000040
:1000C0000000000000000000000000000000000030
:1000D0000000000000000000000000000000000020
:1000E0000000000000000000000000000000000010
:1000F0000000000000000000000000000000000000
:1001000000000000000000000000000000000000EF
:1001100000000000000000000000000000000000DF
:1001200000000000000000000000000000000000CF
:1001300000000000000000000000000000000000BF
:1001400000000000000000000000000000000000AF
:10015000000000000000000000000000000000009F
:10016000000000000000000000000000000000008F
:10017000000000000000000000000000000000007F
:10018000000000000000000000000000000000006F
:10019000000000000000000000000000000000005F
:1001A000000000000000000000000000000000004F
:1001B000000000000000000000000000000000003F
:1001C000000000000000000000000000000000002F
:1001D000000000000000000000000000000000001F
:1001E000000000000000000000000000000000000F
:1001F00000000000000000000000000000000000FF
:1002000000000000000000000000000000000000EE
:1002100000000000000000000000000000000000DE
:1002200000000000000000000000000000000000CE
:1002300000000000000000000000000000000000BE
:1002400000000000000000000000000000000000AE
:10025000000000000000000000000000000000009E
:10026000000000000000000000000000000000008E
:10027000000000000000000000000000000000007E
:10028000000000000000000000000000000000006E
:10029000000000000000000000000000000000005E
:1002A000000000000000000000000000000000004E
:1002B000000000000000000000000000000000003E
:1002C000000000000000000000000000000000002E
:1002D000000000000000000000000000000000001E
:1002E000000000000000000000000000000000000E
:1002F00000000000000000000000000000000000FE
:1003000000000000000000000000000000000000ED
:1003100000000000000000000000000000000000DD
:1003200000000000000000000000000000000000CD
:1003300000000000000000000000000000000000BD
:1003400000000000000000000000000000000000AD
:10035000000000000000000000000000000000009D
:10036000000000000000000000000000000000008D
:10037000000000000000000000000000000000007D
:10038000000000000000000000000000000000006D
:10039000000000000000000000000000000000005D
:1003A000000000000000000000000000000000004D
:1003B000000000000000000000000000000000003D
:1003C000000000000000000000000000000000002D
:1003D000000000000000000000000000000000001D
:1003E000000000000000000000000000000000000D
:1003F00000000000000000000000000000000000FD
:00000001FF
/Transportables_Koptertool/tags/V-0.1/default/MMT.elf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Transportables_Koptertool/tags/V-0.1/default/MMT_Mega32_7.hex
0,0 → 1,716
:100000000C94C1060C94DE060C94DE060C94DE06FD
:100010000C94DE060C94DE060C94DE060C94DE06D0
:100020000C94DE060C94DE060C94CA120C94DE06C8
:100030000C94DE060C9470120C94DE060C94DE0612
:100040000C94DE060C94DE060C94DE060C94DE06A0
:100050000C94DE06202020202020000D0A54696D1B
:10006000656F75742100446973706C6179000000DC
:10007000000000003E5B4F5B3E003E6B4F6B3E005E
:100080001C3E7C3E1C00183C7E3C18001C577D57D3
:100090001C001C5E7F5E1C0000183C180000FFE77F
:1000A000C3E7FF00001824180000FFE7DBE7FF00AC
:1000B00030483A060E00262979292600407F05059A
:1000C0000700407F05253F005A3CE73C5A007F3E31
:1000D0001C1C0800081C1C3E7F0014227F221400F8
:1000E0005F5F005F5F0006097F017F000066899502
:1000F0006A0060606060606094A2FFA294000804DF
:100100007E04080010207E20100008082A1C080029
:10011000081C2A0808001E10101010000C1E0C1ECF
:100120000C0030383E383000060E3E0E060000004F
:100130000000000000005F00000000070007000052
:10014000147F147F1400242A7F2A120023130864CA
:100150006200364956205000000807030000001CCA
:10016000224100000041221C00002A1C7F1C2A00A2
:1001700008083E08080000807030000008080808E1
:1001800008000000606000002010080402003E51DA
:1001900049453E0000427F400000724949494600FF
:1001A0002141494D33001814127F10002745454561
:1001B00039003C4A494931004121110907003649BB
:1001C00049493600464949291E0000001400000034
:1001D00000403400000000081422410014141414DC
:1001E00014000041221408000201590906003E4192
:1001F0005D594E007C1211127C007F49494936003E
:100200003E41414122007F4141413E007F494949F1
:1002100041007F09090901003E41415173007F08F7
:1002200008087F0000417F4100002040413F01005D
:100230007F08142241007F40404040007F021C02A2
:100240007F007F0408107F003E4141413E007F094E
:10025000090906003E4151215E007F091929460027
:1002600026494949320003017F0103003F404040D5
:100270003F001F2040201F003F4038403F006314D4
:10028000081463000304780403006159494D4300D6
:10029000007F41414100020408102000004141411B
:1002A0007F0004020102040040404040400000037F
:1002B000070800002054547840007F284444380048
:1002C000384444442800384444287F003854545467
:1002D000180000087E09020018A4A49C78007F087A
:1002E0000404780000447D4000002040403D0000B0
:1002F0007F102844000000417F4000007C04780407
:1003000078007C0804047800384444443800FC1821
:100310002424180018242418FC007C080404080075
:1003200048545454240004043F4424003C404020DA
:100330007C001C2040201C003C4030403C004428F5
:10034000102844004C9090907C004464544C44002D
:100350000008364100000000770000000041360828
:1003600000000201020402003C2623263C001EA1DC
:10037000A16112003A4040207A0038545455590087
:100380002155557941002154547841002155547824
:1003900040002054557940000C1E5272120039550D
:1003A000555559003954545459003955545458002E
:1003B0000000457C41000002457D42000001457C73
:1003C0004000791412147900F0282528F0007C549C
:1003D000554500002054547C54447C0A097F49410F
:1003E000324949493200324848483200324A484886
:1003F00030003A4141217A003A4240207800009D85
:10040000A0A07D003944444439003D4040403D00B7
:100410003C24FF242400487E494366002B2FFC2FF8
:100420002B00FF0929F62000C0887E090300205414
:10043000547941000000447D41003048484A320070
:10044000384040227A00007A0A0A72007D0D193184
:100450007D002629292F2800262929292600304811
:100460004D4020003808080808000808080838002F
:100470002F10C8ACBA002F102834FA0000007B00FF
:10048000000008142A14220022142A140800AA00CA
:100490005500AA00AA55AA55AA5555AA55AA55AA63
:1004A000000000FF0000101010FF0000141414FFE3
:1004B00000001010FF00FF001010F010F0001414E6
:1004C00014FC00001414F700FF000000FF00FF0000
:1004D0001414F404FC00141417101F0010101F1043
:1004E0001F001414141F0000101010F00000000072
:1004F000001F10101010101F1010101010F010100E
:10050000000000FF1010101010101010101010FF3D
:100510001010000000FF14140000FF00FF10000086
:100520001F1017140000FC04F414141417101714EF
:100530001414F404F4140000FF00F7141414141439
:1005400014141414F700F7141414141714141010BE
:100550001F101F10141414F414141010F010F010C5
:1005600000001F101F100000001F1414000000FCEA
:1005700014140000F010F0101010FF10FF101414ED
:1005800014FF14141010101F0000000000F01010D1
:10059000FFFFFFFFFFFFF0F0F0F0F0F0FFFFFF00C4
:1005A0000000000000FFFFFF0F0F0F0F0F0F384478
:1005B000443844007C2A2A3E14007E0202060600CB
:1005C000027E027E02006355494163003844443C88
:1005D0000400407E201E200006027E02020099A533
:1005E000E7A599001C2A492A1C004C7201724C0094
:1005F000304A4D4D3000304878483000BC625A4691
:100600003D003E49494900007E0101017E002A2A41
:100610002A2A2A0044445F44440040514A4440008E
:1006200040444A5140000000FF010300E080FF0009
:10063000000008086B6B0808361236243600060FD7
:10064000090F06000000181800000000101000003C
:100650003040FF010100001F01011E0000191D179D
:100660001200003C3C3C3C000000000000004D6FCC
:1006700064206279204D696B656C6A6F2030352F7C
:1006800030380053657474696E67730D0A004465F1
:1006900062756720446174656E0D0A004D6F746F5A
:1006A00072746573740D0A00506172616D657465D2
:1006B000720D0A000D0A446973706C61790D0A00AD
:1006C00048617570746D656EFC2842455441205632
:1006D000302E31290D0A002A002000546173746500
:1006E000206472FC636B656E0D0A00436F6E666971
:1006F0006720202020004368616E6E656C732020A7
:1007000000537469636B202020202000486F6568C7
:10071000652020202020004779726F202020202093
:1007200020004C6F6F70696E672020200043616D60
:100730006572612020202000536F6E7374696765B5
:100740007320005573657220202020202000436F05
:1007500075706C696E67202000436F6E666967284C
:10076000322920004C6F6F70696E677365740002E8
:10077000020202020202020004040404040403034D
:1007800003080808080505080808000509090909FB
:100790000707070707070606060A0A0606050505EE
:1007A0000909090900070B0B0B0B0C0C0C0C0C0CAA
:1007B0000C0C0108020108020108020108020108EC
:1007C0000201080201080201080200000000FF0403
:1007D00000FF0400FF0400FF0400320400FF0400D7
:1007E000060300400300140300200821FA08003229
:1007F0000800FF0800000500000500FA0800FA08DC
:1008000000FA0800010000FF0500FF0900FF0900D1
:10081000FF0900FF0900FF0700FA0700FA0700FAC6
:100820000700190700FF0600FA0600FA0600FF0A93
:1008300000FF0A00FA0600FA0600FA0500FA0500B1
:10084000FF0500FF0900FF0900FF0900FF09000084
:10085000010001070000000000000000000000008F
:100860000000000000000000000000000000000088
:100870000000000000000000004C6F6F70207570D9
:100880002020202020202020004C6F6F7020646FDB
:10089000776E092020202000004C6F6F70206C655F
:1008A0006674202020202020004C6F6F7020726919
:1008B00067687420202020200048F668656E726505
:1008C000676C6572202020200048F668656E7363AF
:1008D00068616C74657220200048656164686F6CA3
:1008E0006409090000000000004B6F6D70617373B4
:1008F0000909000000000000004B6F6D7061737308
:1009000046697809090000000047505309090900A9
:1009100000000000000000000041636873656E6B1A
:100920006F70706C756E67200044726568726174D8
:100930006509090000000000004E69636B2020205B
:10094000202020202020202000526F6C6C202020AE
:1009500020202020202020200047617320202020FC
:1009600020202020202020200047696572090909E5
:10097000000000000000000000506F746931090998
:10098000090000000000000000506F74693209097E
:10099000090000000000000000506F74693309096D
:1009A000090000000000000000506F74693409095C
:1009B000090000000000000000436F6E66696709CF
:1009C000090900000000000000486F6568655F4D80
:1009D000696E476173202020004C756674647275DF
:1009E000636B5F4420202020004D6178486F65686C
:1009F000652020202020202000486F6568655F501A
:100A0000202020202020202000486F6568655F5648
:100A1000657273746165726B00486F6568655F41EC
:100A200043435F5769726B2E00537469636B5F5069
:100A3000202020202020202000537469636B5F4415
:100A4000202020202020202000476965725F502050
:100A50002020202020202020004761735F4D696EF8
:100A60002020202020202020004761735F4D6178E6
:100A70002020202020202020004779726F416363CE
:100A800046616B746F720900004B6F6D7061737318
:100A90005769726B756E6720004779726F5F5020DF
:100AA0000909000000000000004779726F5F4909E2
:100AB000090900000000000000556E746572737033
:100AC000616E6E756E672020004E6F74476173090A
:100AD0000909000000000000004E6F744761735A5E
:100AE00065697420202020200055666F417573725F
:100AF00069636874756E672000495F46616B746F47
:100B000072202020202020200055736572506172D1
:100B1000616D310909000000005573657250617202
:100B2000616D3209090000000055736572506172F1
:100B3000616D3309090000000055736572506172E0
:100B4000616D34090900000000536572766F4E69CB
:100B5000636B4374726C090000536572766F4E6963
:100B6000636B436F6D70090000536572766F4E6959
:100B7000636B4D696E09000000536572766F4E69B4
:100B8000636B4D617809000000536572766F4E69A2
:100B9000636B526566727368004C6F6F7047617368
:100BA0004C696D6974090000004C6F6F7054687275
:100BB0006573686F6C640900004C6F6F70487973DF
:100BC000746572657365090000416368734B6F70EB
:100BD000706C756E67090000004163687347656754
:100BE000656E4B6F70706C2E0057696E6B6C556D37
:100BF0007363686C4E69636B0057696E6B6C556DFF
:100C00007363686C526F6C6C004779726F416363F9
:100C10004162676C656963680044726966746B6FF2
:100C20006D700909000000000044796E616D696310
:100C300053746162696C69740055736572506172B6
:100C4000616D3509090000000055736572506172CD
:100C5000616D3609090000000055736572506172BC
:100C6000616D3709090000000055736572506172AB
:100C7000616D380909000000004C6F6F70436F6EA2
:100C8000666967090900000000536572766F4E6956
:100C9000636B436F6D70496E000D0A4E6963687433
:100CA000206765737065696368657274000D0A502A
:100CB0006172616D657465722067657370656963E3
:100CC00068657274000D0A2D2D2D3E005061726111
:100CD0006D657465722073706569636865726E3FD7
:100CE0000D0A20206A610D0A20206E65696E00548D
:100CF000696D656F75740020353A0D0A0020343A2D
:100D00000D0A0020333A0D0A0020323A0D0A002065
:100D1000313A0D0A004C61646520506172616D6565
:100D20007465720D0A002D002D002D004578697440
:100D30000D0A00526563687465636B0D0A004C69A7
:100D40006E69650D0A004F7269656E74696572752A
:100D50006E670D0A000D0A0045696E7374656C6C50
:100D6000756E67656E3A0D0A000D0A54696D656F00
:100D70007574210044656275672D446973706C61F8
:100D8000790011241FBECFE5D8E0DEBFCDBF10E053
:100D9000A0E6B0E0E8E7FCE202C005900D92AE38B4
:100DA000B107D9F715E0AEE8B0E001C01D92A83F49
:100DB000B107E1F70E94DC0D0C943B160C94000087
:100DC000782F52E060E026C0E52FFF27EC5EFA4F57
:100DD00021812D5332813D5343814D535C5FDC01B2
:100DE000AF56BB4F80818D53880F880F922F9295FD
:100DF0009F70892B8C932295207F832F86958695D3
:100E0000282BFD0121833295330F330F307C342B97
:100E100032836D5F862F99275717B0F208950F938D
:100E20001F93B82F809191048093140580919204B0
:100E3000809315058091930480931605A3E073E0D9
:100E400035C0E72FFF27EF56FB4F8081418162813C
:100E50007D5FEA2FFF27EC5EFA4F282F2695269517
:100E6000235C2083552799278370907024E0880F96
:100E7000991F2A95E1F79A0104E0369527950A957E
:100E8000E1F7822B835C81834F705070440F551FB4
:100E9000440F551F862F8295869586958370842BE7
:100EA000835C82836F73635C6383AC5F7B1748F200
:100EB00090E020E030E008C0E92FFF27EC5EFA4F19
:100EC0008081280F311D9F5F9A17B1F73F70EA2F7D
:100ED000FF27EC5EFA4FC90136E0969587953A9563
:100EE000E1F7835C80832F73235C21838DE0828311
:100EF00013820A2F0D5F10E008C0E12FFF27EC5E80
:100F0000FA4F80810E94BC121F5F1017B1F71F912A
:100F10000F9108951F9384E1809397050E94971283
:100F2000833221F0809197058823C1F7809197053E
:100F3000882319F481E090E017C00E9497128093F3
:100F4000140511E00AC00E949712E12FFF27EC5E02
:100F5000FA4F80831F5F17FD1FE78D30A1F7812FA8
:100F60000E94E00680E090E01F9108951F93CF93C8
:100F7000DF93CDB7DEB761970FB6F894DEBF0FBE33
:100F8000CDBF182F83E28093910481E68093920471
:100F900080939304109394041092950410929604F5
:100FA00086E00E940F070E948A0780911505813410
:100FB000D1F7E1E9F4E0DE01119681918D9384E0AF
:100FC000E13AF807D1F7198A177020E0AE014F5FB8
:100FD0005F4F612F80E00E94DA0A61960FB6F894A5
:100FE000DEBF0FBECDBFDF91CF911F9108959F92BD
:100FF000AF92BF92CF92DF92EF92FF920F931F9327
:10100000CF93DF93CDB7DEB761970FB6F894DEBF0D
:101010000FBECDBF0E9438099924A92CBB2453E0F0
:10102000AA0CBB1C5A95E1F7FA2C00E010E08F2DBA
:10103000800F0E94B6070F5F1F4F08301105B9F7E8
:101040000E948A0780911505843489F57501EE0C9C
:10105000FF1C83E994E0E80EF91ECC24DD248E0108
:101060000F5F1F4FF701208181819927982F8827D3
:101070004AE050E0B801820F911D0E94AD1520E0BA
:1010800044E550E06C2D8EE00E94A40A20E0A80107
:101090006C2D8EE00E94DA0A0894C11CD11C82E0FB
:1010A00090E0E80EF91E98E0C916D104C1F68091CF
:1010B0009A05882329F280919A05813009F4939446
:1010C00080919A05823009F49A9480919A0588302B
:1010D00019F0E3E09E22A1CF61960FB6F894DEBF2F
:1010E0000FBECDBFDF91CF911F910F91FF90EF9079
:1010F000DF90CF90BF90AF909F9008951F9393E2A1
:101100009093910491E69093920498E690939304BF
:1011100080939404109295041092960486E00E94A5
:101120000F0710E00E948A07813009F41AE01F5F60
:10113000809115058053853018F01A3098F304C05B
:1011400080E090E01A3010F081E090E01F91089567
:101150001F93CF93DF93CDB7DEB72A970FB6F894DE
:10116000DEBF0FBECDBF0E94380960E086E690E08A
:101170000E94760A80919A058823E1F70E947E08F2
:10118000813069F460E08BE590E00E94760A88EC9B
:101190008093970580919705882369F1FBCF109183
:1011A000150519831A8220E0AE014F5F5F4F60E0A2
:1011B0008AE00E94DA0A1F5F20E041E954E0612FD3
:1011C00080E00E94DA0A8AE0809397058091970573
:1011D0008823E1F780919A05813011F40E947E08FE
:1011E00080919A05823011F40E947E0880919A05C0
:1011F000843009F0BFCF2A960FB6F894DEBF0FBE39
:10120000CDBFDF91CF911F910895C4988FB9779B7F
:10121000FECF8EB18EB9C49A08951F93CF93DF93FA
:10122000E0E9F0E0119284E0E039F807D9F710EB3B
:10123000C398812F0E94050980E10E9405098091D1
:101240008F000E940509C39AC0E0D0E080E00E94B0
:1012500005092196C038D105C9F71F5F183B41F732
:101260001092950510929605DF91CF911F910895E8
:101270000E940D09089583E397E00197F1F708951F
:101280000F931F93CF93DF938C01C0E0D0E003C096
:101290000E943B092196C017D107D1F7DF91CF916A
:1012A0001F910F91089510929505109296058FEF5A
:1012B00087BB8EE58DB9C49AC2988AE090E00E94FF
:1012C0004009C29AC498C39880E40E94050980919D
:1012D0008F00882329F481EA0E94050980EC04C06C
:1012E00080EA0E94050988EC0E94050986EA0E94AE
:1012F000050982EA0E9405098FE20E94050988EF2C
:101300000E94050980E00E94050987E20E94050904
:1013100081E80E94050986E10E9405098CEA0E9485
:10132000050980E00E9405098FEA0E9405090E94D4
:101330000D090895FF920F931F938C01F62EC39809
:10134000880F892F881F990B919580550E94050958
:1013500080918F000F77080F802F82958F70805FAC
:101360000E940509802F8F700E940509C39A8F2D56
:101370000E9405091F910F91FF900895EF92FF922F
:101380000F931F93CF93DF93C0E0D0E000E910E00C
:1013900030E1E32E31E0F32EF70181917F01F80176
:1013A000808361918F01CE010E949A092196F3E01A
:1013B000C038DF0789F700E114E0F80111928F01CE
:1013C00060E0CE010E949A092196F4E0C030DF0768
:1013D000A1F7DF91CF911F910F91FF90EF900895AA
:1013E000CF92DF92EF92FF920F931F93CF93DF93F1
:1013F000D22E4F3D81F0403E38F4463DB1F04C3D99
:10140000B1F0443CA9F40FC0463F49F04C3F49F0CD
:10141000443E71F402C041EE0BC044E809C044E907
:1014200007C041E805C04EE803C049E901C04AE9E8
:10143000062F11271695102F00271795079526E0E0
:10144000829FC0011124080F191F1370429F700161
:1014500011248EE690E0E80EF91ECC24E801C05776
:10146000DF4FF7019491F2E0DF16A1F0FD1530F0A7
:10147000DD2059F081E0D816B1F409C0E3E0DE16B2
:1014800061F0F4E0DF1679F40AC098830CC088811B
:10149000892B08C08881892705C0888102C088817E
:1014A0009095892388836991C8010E949A09C39401
:1014B0000894E11CF11C0F5F1F4F86E0C81689F6E7
:1014C000DF91CF911F910F91FF90EF90DF90CF9020
:1014D0000895809196058F5F80939605883028F057
:1014E0000E94BE0987E08093960508951F93CF93CD
:1014F000DF93EC01162F20C04032A0F02196212F5F
:1015000060919605809195050E94F009809195055E
:101510008F5F80939505853178F0109295050E9434
:10152000690A0AC04A3029F04D3029F41092950515
:1015300002C00E94690A2196FE0144914423E1F60B
:10154000DF91CF911F910895809395056093960543
:10155000622FCA010E94760A08951F93CF93DF93EA
:10156000EC01162F20C04032A0F02196212F60916F
:101570009605809195050E94F009809195058F5FF1
:1015800080939505853178F0109295050E94690A3F
:101590000AC04A3029F04D3029F41092950502C056
:1015A0000E94690A219648814423E9F6DF91CF9190
:1015B0001F9108958093950560939605622FCA0147
:1015C0000E94AD0A0895982F87FD39C06034B8F5A0
:1015D000862F869586958695282F33273695322F28
:1015E000222737952795290F311D677081E090E0FC
:1015F00001C0880F6A95EAF7682F3370413061F0B7
:10160000413018F04230A1F40DC0F901E057FF4F0E
:101610008081609586230BC0F901E057FF4F8081E0
:10162000862B05C0F901E057FF4F80818627808314
:10163000F901E057FF4F6081C9010E949A0908959E
:101640002F923F924F925F926F927F928F929F92D2
:10165000AF92BF92CF92DF92EF92FF920F931F93C0
:10166000CF93DF93CDB7DEB728970FB6F894DEBFE0
:101670000FBECDBF8D83162F0E83682E7724862E46
:101680009924842F99279C838B8386199709E22FAD
:10169000FF27FA83E9839F012819390997FF04C0BE
:1016A000FFEF2F2E3F2E07C040E050E0009711F0D3
:1016B00041E050E01A0137FF04C0EFEF4E2E5E2EDE
:1016C00008C040E050E02115310511F041E050E044
:1016D0002A016C0197FF04C0D094C194D108D3941F
:1016E000790137FF04C0F094E194F108F3944E813E
:1016F000682D862D0E94E30AEC14FD047CF5C601DA
:1017000062E070E00E94141644275527461B570BD1
:1017100058874F83A22CB62CB20C5D81052F112760
:1017200017C08F8198858E0D9F1D98878F831816FF
:10173000190634F4840C951C8C199D0998878F83A5
:101740004E81682D8B2D0E94E30A020D131DBA0CE9
:10175000EB81FC810E171F0721F72DC0C70162E046
:1017600070E00E94141644275527461B570B5887D4
:101770004F83A42CB82CB40C012F112717C08F81D4
:1017800098858C0D9D1D98878F831816190634F443
:10179000620C731C8E199F0998878F834E816B2D65
:1017A000862D0E94E30A040D151DBA0CE981FA8109
:1017B0000E171F0721F728960FB6F894DEBF0FBE4D
:1017C000CDBFDF91CF911F910F91FF90EF90DF90F0
:1017D000CF90BF90AF909F908F907F906F905F90D1
:1017E0004F903F902F900895BF92CF92DF92EF924B
:1017F000FF920F931F93CF93DF93182FB02E87FD87
:101800001FE7603408F06FE37727CB01820F911D4B
:101810009C01812F840F912D911D6C0191E8C916B7
:10182000D10418F0B0E8CB2ED12C79012134310548
:1018300018F0A0E4EA2EF12CEB0108C00B2D2C2FA0
:101840004C2D6C2F812F0E94200B2196EC16FD064B
:10185000A8F7DF91CF911F910F91FF90EF90DF904C
:10186000CF90BF900895CF92DF92EF92FF920F93A7
:101870001F93CF93DF93D82EC02E87FF02C08FE730
:10188000D82E162F603408F01FE3812F820F912D80
:10189000911DEC018D2D840F912D911D7C0191E8FE
:1018A000E916F10418F000E8E02EF12C0C2D212FA0
:1018B0004E2D612F8D2D0E94200BC134D10510F0CB
:1018C000C0E4D0E00C2D2C2F4E2D612F8E2D0E94C8
:1018D000200B2C2F4D2D6C2F8E2D0E94200B212F95
:1018E0004D2D6C2F8D2D0E94200BDF91CF911F91DC
:1018F0000F91FF90EF90DF90CF9008952F923F923D
:101900004F925F926F927F928F929F92AF92BF920F
:10191000CF92DF92EF92FF920F931F93CF93DF93BB
:10192000CDB7DEB724970FB6F894DEBF0FBECDBF9C
:101930008C016B017A01A22E21E030E0241B350BD3
:101940003C832B83CA01880F991F66247724681A69
:10195000790A462E502E640F4A2D802F0E94E30AEA
:101960006C2D6E194A2D802F0E94E30A4A2D6C2D92
:10197000802F8E0D0E94E30A4A2D6C2D802F8E1928
:101980000E94E30A4701222433241A82198258C094
:101990008B819C8197FD0BC0089481089108E2E03F
:1019A000F0E06E0E7F1E860D971D9C838B8308943E
:1019B000211C311C29813A812E5F3F4F3A832983B4
:1019C0008B819C810196820F931F9C838B83142DA6
:1019D000180DD52CD20C4A2D612F8D2D0E94E30AB3
:1019E000E52CE2184A2D612F8E2D0E94E30A142D5A
:1019F00018194A2D612F8D2D0E94E30A4A2D612F5F
:101A00008E2D0E94E30A142D120DE52CE80C4A2DB0
:101A1000612F8E2D0E94E30A952D9819092F4A2DCA
:101A2000612F892F0E94E30A142D12194A2D612F6C
:101A30008E2D0E94E30A4A2D612F802F0E94E30A17
:101A4000281439040CF4A4CF24960FB6F894DEBF02
:101A50000FBECDBFDF91CF911F910F91FF90EF90FF
:101A6000DF90CF90BF90AF909F908F907F906F90BE
:101A70005F904F903F902F9008952F923F924F92FA
:101A80005F926F927F928F929F92AF92BF92CF920E
:101A9000DF92EF92FF920F931F93CF93DF936B012F
:101AA0007A0151E0A52EB12CAE18BF089701220F84
:101AB000331F88249924821A930A662E782E262FA3
:101AC0002E196E0D01E0482F0E94200B472D4E1954
:101AD0002C2D6C2D872D8E0D0E94200BE7014424A8
:101AE0005524222433243AC0B7FC07C0219782E052
:101AF00090E0880E991EA80CB91C0894411C511C3A
:101B000082E090E0280E391E0894A11CB11CA20CA2
:101B1000B31C1C2F662D6C0FE72CE418D72CD40CAB
:101B200001E0262F4E2D8D2D0E94200B662D6C1B63
:101B3000262F4E2D8D2D0E94200B662D640DE72C37
:101B4000EC1A170D262F4E2D812F0E94200B662D8B
:101B50006419262F4E2D812F0E94200B4C165D06F6
:101B60001CF2DF91CF911F910F91FF90EF90DF90CA
:101B7000CF90BF90AF909F908F907F906F905F902D
:101B80004F903F902F900895A2E0B0E00E9427165A
:101B9000802D992780938F00089581E021E030E027
:101BA000D901082E0E942F1680E02F5F3F4FD901E8
:101BB000082E0E942F1608958FEF8BBB83E488BBFD
:101BC0008CEF85BB8CE782BB83E084BB80E881BB64
:101BD00021E030E0D9010E942716802D813071F07C
:101BE00081E0D901082E0E942F1680E02F5F3F4F21
:101BF000D901082E0E942F16215030402F5F3F4FF1
:101C0000D9010E942716802D992780938F000E946A
:101C100053090E9492120E94091378940E94650E43
:101C2000FDCF0F931F93062F142F20E049ED56E0B0
:101C3000682F812F0E94A40A20E047ED56E0602F14
:101C4000812F0E94A40A1F910F910895EF92FF9295
:101C50000F931F93082FE62EF42E682F0E94110E6B
:101C6000102F912F80919A058823E1F780919A0592
:101C70008823E1F380919A05823019F41E1508F447
:101C80001F5F80919A05813019F4011708F41150F3
:101C90004F2D612F892F0E94110E80919A05883057
:101CA00021F080919A058430E1F680919A05843084
:101CB00009F41FEF80919A058823E1F7812F992776
:101CC0001F910F91FF90EF9008950E94380960E0F6
:101CD00080EC96E00E94760A60E084EB96E00E9439
:101CE000760A60E088EA96E00E94760A60E08CE975
:101CF00096E00E94760A60E08EE896E00E94760AFE
:101D000060E083E896E00E94760A60E08EE696E066
:101D10000E94760A4CE066E082E00E94260E843043
:101D200091F0853028F4823041F08330A1F408C06E
:101D3000853061F0863079F40CC00E94A8080895BF
:101D40000E94BD1108950E94AC0E08950E94D41403
:101D500008950E94271308950E94380980919A05DA
:101D60008823E1F760E08BED96E00E94760A80918F
:101D70009A058823E1F380919A058830C9F483E2BB
:101D80008093910481E68093920484E78093930486
:101D90008AE08093940480939504809396048093C2
:101DA0009704109298041092990489E00E940F07FA
:101DB00080919A058823E1F780919A058823E1F3C1
:101DC00083E28093910481E68093920484E7809378
:101DD0009304109294041092950410929604109219
:101DE0009704109298041092990489E00E940F07BA
:101DF0000895FB0120E030E0482F552761E0CA013B
:101E0000022E02C0959587950A94E2F780FF02C0E2
:101E1000608301C010822F5F3F4F3196283031051B
:101E200071F7089540E020E030E061E070E0FC01EF
:101E30008191813041F4CB01022E02C0880F991F9D
:101E40000A94E2F7480F2F5F3F4F2830310581F7A2
:101E5000842F99270895482FFB0164E60E94F4150A
:101E6000808324E6829FC0011124481B842F6AE0EE
:101E70000E94F4152AE0829F90011124421B405DCC
:101E800042839081905D9083805D8183903329F4BB
:101E900090E29083803309F4918313820895CF9266
:101EA000DF92EF92FF920F931F93CF93DF93CDB703
:101EB000DEB762970FB6F894DEBF0FBECDBF82309B
:101EC00008F455C0615044E080E00E94260EC82E00
:101ED0008FEFC81609F421C1EC2CFF24F701E25260
:101EE000FA4FE081FF27EF56FB4FD08020E04AE217
:101EF0005DE06C2D84E00E94A40A80919A058823FD
:101F0000E1F780919A05813009F4DA9480919A057D
:101F1000823009F4D3948E01075F1F4FB8018D2DD5
:101F20000E942B0F20E0A8016C2D80E00E94DA0AAD
:101F300084E180939705809197058823E1F780914C
:101F40009A05843021F080919A058830D1F68091ED
:101F50009A05883009F0E1C0AEEDB5E0EA0EFB1E4F
:101F6000D701EC91FF27EF56FB4FD082D6C08130CE
:101F700009F069C08E010F5F1F4FB8018091C50441
:101F80000E94F90E1A8644E063E080E00E94260E6B
:101F9000D82EBFEF8B1709F4C0C0E82EFF240E0D1A
:101FA0001F1DF801008120E048E25DE0682F84E019
:101FB0000E94A40A80919A05813009F400E0809182
:101FC0009A05823009F401E0005D0987005320E0A2
:101FD000AE01475F5F4F6D2D80E00E94DA0A84E119
:101FE00080939705809197058823E1F780919A0562
:101FF000883021F080919A058430E1F680919A052D
:10200000883051F4CE010196E80EF91ED7010C93E9
:102010000E94120F8093C5040E9438098E01075F49
:102020001F4FB8018091C5040E942B0F60E0C801CA
:102030000E94AD0A88EC80939705809197058823CC
:1020400009F46BC0FACF882309F067C08E010F5FD7
:102050001F4FB801809199040E94F90E1A8644E03E
:1020600067E080E00E94260ED82EBFEF8B1709F4A0
:1020700054C0E82EFF240E0D1F1DF801008120E042
:1020800046E25DE0682F84E00E94A40A80919A05F0
:10209000813009F400E080919A05823009F401E072
:1020A000005D0987005320E0AE01475F5F4F6D2D53
:1020B00080E00E94DA0A84E1809397058091970579
:1020C0008823E1F780919A05883021F080919A0564
:1020D0008430E1F680919A05883051F4CE01019662
:1020E000E80EF91ED7010C930E94120F80939904F9
:1020F0000E9438098E01075F1F4FB8018091990433
:102100000E942B0F60E0C8010E94AD0A88EC80930A
:102110009705809197058823E1F762960FB6F894AA
:10212000DEBF0FBECDBFDF91CF911F910F91FF900A
:10213000EF90DF90CF9008956F927F928F929F9251
:10214000AF92BF92CF92DF92EF92FF920F931F93C5
:10215000CF93DF93CDB7DEB7A1970FB6F894DEBF6C
:102160000FBECDBFE82E81E08E1508F044C044EBD1
:10217000A42E47E0B42E39E3632E39E0732EFF24FA
:10218000CC24DD2421E9822E24E0922EF5018491D5
:102190008E15E9F4EF2DFF27E252FA4FC0828E012F
:1021A000075F1F4FB801F40180810E942B0F20E0D0
:1021B000A8016F2D80E00E94DA0A20E0A3016F2DB4
:1021C00085E00E94A40AF7E0FF1508F0F394089454
:1021D000C11CD11C83E090E0A80EB91E0894811C9C
:1021E000911CE0E1F0E06E0E7F1EF2E4CF16D10408
:1021F00009F463C0CBCF81E0E81679F58E010F5F5B
:102200001F4FB8018091C5040E94F90E1A8699E704
:10221000A92E98E0B92E6801CE0101961C2D181B3D
:10222000F60181916F01805D898720E0AE01475FF3
:102230005F4F612F80E00E94DA0A20E0A501612F44
:1022400085E00E94A40A80E190E0A80EB91ECE01AC
:102250000596C816D90681F1DFCFEE2069F58E010B
:102260000F5F1F4FB801809199040E94F90E1A86E2
:10227000680189EBA82E88E0B82ECE010196FC2CCF
:10228000F81AF60181916F01805D89878E01075FE1
:102290001F4F20E0A8016F2D80E00E94DA0A20E0A5
:1022A000A5016F2D85E00E94A40A80E190E0A80EB0
:1022B000B91EC016D10609F7FF248F2D9927A196C4
:1022C0000FB6F894DEBF0FBECDBFDF91CF911F9147
:1022D0000F91FF90EF90DF90CF90BF90AF909F90C5
:1022E0008F907F906F900895982F8630D8F426E4D1
:1022F00030E0E7EDF4E08081838321503040319776
:102300008FEF2F3F3807B9F783E28093910481E67E
:10231000809392049559909393041092DB048BE47C
:102320000E940F0708951F9393E29093910491E602
:102330009093920491E79093930480939404109265
:1023400095041092960486E00E940F0710E00E9408
:102350008A07813009F41EE11F5F809115058C54B6
:10236000853018F01E3198F304C080E090E01E31F3
:1023700010F081E090E01F910895FF920F931F935A
:10238000CF93DF93CDB7DEB72F970FB6F894DEBFAC
:102390000FBECDBF0E94380960E085E19DE00E943C
:1023A000760A60E08FE09DE00E94760A60E089E0B6
:1023B0009DE00E94760A60E083E09DE00E94760A3C
:1023C00060E08DEF9CE00E94760A60E087EF9CE081
:1023D0000E94760A40E065E081E00E94260E0E949D
:1023E0009311813041F420E04FEE5CE066E080E044
:1023F0000E94A40A62C062E0F62E0E9438098E0193
:102400000F5F1F4F4AE050E0B8018F2D99270E94BF
:10241000CE1560E0C8010E94AD0A82E38093970563
:10242000809197058823E1F70E9438098F2D0E943B
:102430009C10682F80919A058823E1F380919A057A
:10244000823009F4F39480919A05813009F4FA946A
:102450008FEFF81619F45CE0F52E04C08CE08F15B0
:1024600008F4FF2480919A05883019F48F2D0E947A
:102470004F0F80919A05843009F0BFCF0E94380930
:1024800060E08CEC9CE00E94760A40E062E081E033
:102490000E94260E813061F460E085EC9CE00E9491
:1024A000760A85E00E94741160E08DEA9CE003C02A
:1024B00060E089E99CE00E94760A84E680939705B3
:1024C000809197058823E1F72F960FB6F894DEBF29
:1024D0000FBECDBFDF91CF911F910F91FF90089557
:1024E0001F920F920FB60F9211248F939F93EF9329
:1024F000FF938091E6059CB1E8EEF5E0E80FF11D51
:1025000090838F5F8093E6058091E6058F708093BE
:10251000E605FF91EF919F918F910F900FBE0F9065
:102520001F90189588E98AB987E089B908958AE0EB
:10253000809399059091E7058091E605981721F41D
:10254000809199058823B1F780919905882311F42A
:10255000E0E00FC08091E705E82FFF27E851FA4F30
:10256000E0818F5F8093E7058091E7058F7080930E
:10257000E7058E2F992708955D9BFECF8CB90895AE
:10258000FC0104C05D9BFECF8CB93196808188230D
:10259000C9F708951F920F920FB60F9211248F93CF
:1025A0009F9380919805882331F080919805815000
:1025B0008093980515C08AE08093980589B3992780
:1025C00080959095689413F8959587951694E1F702
:1025D0008F7080939A0580919B058F5F80939B05F8
:1025E00080919705882329F08091970581508093E9
:1025F000970580919905882329F08091990581504C
:10260000809399059F918F910F900FBE0F901F900F
:1026100018958DE083BF88E48CBF89B7826089BF3D
:102620000895F89480918F00882321F484E08093AA
:102630008F0002C010928F0080918F00A2E0B0E066
:10264000082E0E942F160E945309789408950F9324
:102650001F9311E00E94380960E088E59DE00E9428
:10266000760A60E085E59DE00E94760A60E086E4F7
:102670009DE00E94760A60E08EE39DE00E94760A6B
:1026800060E083E39DE00E94760A60E08CE29DE0DA
:102690000E94760A4FE065E082E00E94260E8330B9
:1026A00049F08430C9F0823011F010E026C00E9459
:1026B000111323C00E94380901E022E344E664E1DB
:1026C0008AE00E94200B80919A058830B1F08091B9
:1026D0009A05843091F0F7CF0E94380901E028E292
:1026E00044E664E18AE00E94330C80919A058830C8
:1026F00021F080919A058430C1F7112309F0AACF07
:102700001F910F910895CF93DF93EC0152E070E099
:1027100026C0E52FFF27EC5EFA4F21812D53328131
:102720003D5343814D535C5FDE01A80FB91F80818B
:102730008D53880F880F922F92959F70892B8C93C1
:102740002295207F832F86958695282BFD01218356
:102750003295330F330F307C342B32837D5F872FDC
:1027600099275617B0F2DF91CF9108954F925F925B
:102770006F927F928F929F92AF92BF92CF92DF9291
:10278000EF92FF920F931F93CF93DF93FC01EB0126
:1027900080E2888340E8E130F40718F46624772467
:1027A00008C0F095E195FF4F8DE2888351E0652EDA
:1027B000712C2E010894411C511CCF0160E177E27D
:1027C0000E9400168B01262F332780E197E2BC017F
:1027D000269FC001279F900D369F900D11249F01C9
:1027E000281B390B42E0C42ED12CCC0EDD1EC901B2
:1027F00068EE73E00E9400167B01462F552788EE95
:1028000093E0FC014E9FC0014F9F900D5E9F900D85
:102810001124281B390B93E0A92EB12CAC0EBD1E40
:10282000C90164E670E00E940016FB0184E6689F1F
:10283000C0011124281B390B84E0882E912C8C0EAA
:102840009D1EC9016AE070E00E9400168AE0689F40
:10285000C0011124281B390B205D2D83005D0983E5
:10286000F0E3EF0EEA82E05DEB83605D6C830033A2
:1028700091F580E2888341E06416710409F48DE2E9
:102880008983F6018081803331F580E2F201808313
:10289000F1E06F16710409F48DE2F6018083F50111
:1028A00080818033C1F480E2F6018083F1E06F160D
:1028B000710409F48DE2F5018083F4018081803395
:1028C00051F480E2F5018083F1E06F16710409F4A0
:1028D0008DE2F40180831E82DF91CF911F910F91D1
:1028E000FF90EF90DF90CF90BF90AF909F908F9030
:1028F0007F906F905F904F9008951F9384E1809335
:1029000097050E949712833221F0809197058823C2
:10291000C1F780919705882319F481E090E019C0F0
:102920000E9497128093140511E00AC00E9497122A
:10293000E12FFF27EC5EFA4F80831F5F17FD1FE733
:102940008D30A1F7612F8CE995E00E94831380E020
:1029500090E01F9108951F9393E29093910491E664
:102960009093920493E6909393048093940410922E
:1029700095041092960486E00E940F0710E00E94D2
:102980007D14813009F41EE11F5F809115058434A8
:1029900019F01E31A0F304C080E090E01E3110F069
:1029A00081E090E01F9108950F931F93CF93DF93E1
:1029B000CDB7DEB72A970FB6F894DEBF0FBECDBFF6
:1029C0000E94380960E084E79DE00E94760A8091C9
:1029D0009A058823E1F70E94AB14813071F460E01E
:1029E00089E69DE00E94760A88EC809397058091A5
:1029F0009705882309F4A6C0FACF809193048983B0
:102A00001A8220E08E010F5F1F4FA80160E08FE067
:102A10000E94DA0AB80180919E0590919F050E945C
:102A2000B61320E040E650E061E080E00E94DA0A60
:102A300020E0A80161E08AE00E94DA0AB8018091F2
:102A4000A0059091A1050E94B61320E045E650E054
:102A500062E080E00E94DA0A20E0A80162E08AE0F9
:102A60000E94DA0AB8018091A2059091A3050E9404
:102A7000B61320E04AE650E063E080E00E94DA0A04
:102A800020E0A80163E08AE00E94DA0AB8018091A0
:102A9000A4059091A5050E94B61320E043E750E0FD
:102AA00064E080E00E94DA0A20E0A80164E08AE0A5
:102AB0000E94DA0AB8018091A6059091A7050E94AC
:102AC000B61320E04CE750E065E080E00E94DA0AAF
:102AD00020E0A80165E08AE00E94DA0AB80180914E
:102AE000A8059091A9050E94B61320E041E850E0A6
:102AF00066E080E00E94DA0A20E0A80166E08AE051
:102B00000E94DA0AB8018091B0059091B1050E9447
:102B1000B61320E045E850E067E080E00E94DA0A62
:102B200020E0A80167E08AE00E94DA0A8AE0809348
:102B30009705809197058823E1F780919A05843065
:102B400009F045CF2A960FB6F894DEBF0FBECDBF71
:102B5000DF91CF911F910F910895FB019F01E894A0
:102B60004230C4F04532B4F44A3029F497FB1EF4E5
:102B7000909581959F4F642F77270E940016805D66
:102B80008A330CF0895D8193CB010097A1F716F48D
:102B90005DE251931082C9010C94E415FB019F0181
:102BA000423074F0453264F4642F77270E94001697
:102BB000805D8A330CF0895D8193CB010097A1F78A
:102BC0001082C9010C94E415DC01FC01672F71919E
:102BD0007723E1F7329704C07C916D937083629103
:102BE000AE17BF07C8F30895991B79E004C0991F79
:102BF000961708F0961B881F7A95C9F78095089557
:102C0000AA1BBB1B51E107C0AA1FBB1FA617B70712
:102C100010F0A61BB70B881F991F5A95A9F780952E
:102C20009095BC01CD01089597FB092E07260AD087
:102C300077FD04D0E5DF06D000201AF47095619589
:102C40007F4F0895F6F7909581959F4F0895E199EC
:102C5000FECFBFBBAEBBE09A11960DB20895E199CD
:102C6000FECFBFBBAEBB0DBA11960FB6F894E29A79
:082C7000E19A0FBE0895FFCFA9
:102C78004E69636B00526F6C6C00414343204E6990
:102C8800636B0041434320526F6C6C004769657267
:0E2C980000414343005370616E6E756E67001D
:00000001FF
/Transportables_Koptertool/tags/V-0.1/default/Makefile
0,0 → 1,110
###############################################################################
# Makefile for the project MMT
###############################################################################
 
## General Flags
PROJECT = MMT
MCU = atmega32
TARGET = MMT.elf
CC = avr-gcc.exe
 
## Options common to compile, link and assembly rules
COMMON = -mmcu=$(MCU)
 
## Compile options common for all C compilation units.
CFLAGS = $(COMMON)
CFLAGS += -Wall -gdwarf-2 -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d
 
## Assembly specific flags
ASMFLAGS = $(COMMON)
ASMFLAGS += $(CFLAGS)
ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2
 
## Linker flags
LDFLAGS = $(COMMON)
LDFLAGS +=
 
 
## Intel Hex file production flags
HEX_FLASH_FLAGS = -R .eeprom
 
HEX_EEPROM_FLAGS = -j .eeprom
HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load"
HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0 --no-change-warnings
 
 
## Objects that must be built in order to link
OBJECTS = base64.o displ_val.o display.o F8X6.o lcd.o main.o menu.o motortest.o parameter.o rs232.o timer.o settings.o debug.o
 
## Objects explicitly added by the user
LINKONLYOBJECTS =
 
## Build
all: $(TARGET) MMT.hex MMT.eep size
 
## Compile
base64.o: ../base64.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
 
displ_val.o: ../displ_val.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
 
display.o: ../display.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
 
F8X6.o: ../F8X6.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
 
lcd.o: ../lcd.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
 
main.o: ../main.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
 
menu.o: ../menu.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
 
motortest.o: ../motortest.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
 
parameter.o: ../parameter.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
 
rs232.o: ../rs232.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
 
timer.o: ../timer.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
 
settings.o: ../settings.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
 
debug.o: ../debug.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
 
##Link
$(TARGET): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET)
 
%.hex: $(TARGET)
avr-objcopy -O ihex $(HEX_FLASH_FLAGS) $< $@
 
%.eep: $(TARGET)
-avr-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@ || exit 0
 
%.lss: $(TARGET)
avr-objdump -h -S $< > $@
 
size: ${TARGET}
@echo
@avr-size -C --mcu=${MCU} ${TARGET}
 
## Clean target
.PHONY: clean
clean:
-rm -rf $(OBJECTS) MMT.elf dep/* MMT.hex MMT.eep
 
## Other dependencies
-include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*)
 
/Transportables_Koptertool/tags/V-0.1/displ_val.c
0,0 → 1,83
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "base64.h"
#include "lcd.h"
#include "rs232.h"
 
// Insgesamt 32 Werte können angezeigt werden
// jeweils 8 Stück werden gleichzeitg angezeigt
// Auswahl über Tasten
 
uint8_t displ_page;
 
 
void displ_get_text(uint8_t number)
{
uint8_t text[17];
uint8_t i;
p_buffer[0] = '#';
p_buffer[1] = 'a';
p_buffer[2] = 'a';
p_buffer[3] = number;
p_buffer[4] = 0;
p_buffer[5] = 0;
base64_send(6);
 
do
{
get_message();
}
while (r_buffer[1] != 'A');
 
for (i=0;i<16;i++)
text[i] = p_buffer[i];
text[16] = 0x00;
lcd_print_at(0,(number & 0x07),text,0);
}
 
void displ_values(void)
{
uint8_t displ_page, i;
int16_t value;
uint8_t text[17];
 
displ_page = 0; // Page 0..3 (4 Pages zu je 8 Werte)
lcd_cls(); // LCD löschen
do
{
for (i=0;i<8;i++) // Texte lesen und anzeigen
displ_get_text(i+displ_page*8);
do
{
get_message();
if(r_buffer[1] == 'D')
{
for (i=0;i<8;i++)
{
value = p_buffer[i*2+displ_page*16+2] + 256*p_buffer[i*2+displ_page*16+3];
itoa(value,text,10);
lcd_print_atp(14,i,PSTR(" "),0);
lcd_print_at(14,i,text,0);
}
}
}
while (key == 0x00);
if (key == 0x01)
displ_page++;
if (key == 0x02)
displ_page--;
displ_page &= 0x03;
}
while(key != 0x08);
}
 
/Transportables_Koptertool/tags/V-0.1/displ_val.h
0,0 → 1,6
#ifndef displ_val_h
#define displ_val_h
 
void displ_values(void);
 
#endif
/Transportables_Koptertool/tags/V-0.1/display.c
0,0 → 1,78
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "lcd.h"
#include "rs232.h"
#include "base64.h"
#include "parameter.h"
#include "menu.h"
 
uint8_t read_display (uint8_t command) //
{
uint8_t timeout;
timeout = 0;
p_buffer[0] = '#'; // Display-Zeile anfordern
p_buffer[1] = 'a';
p_buffer[2] = 'h';
p_buffer[3] = command;
p_buffer[4] = 0;
p_buffer[5] = 0;
base64_send(6);
do // warten, bis die Parameter gesendet werden
{
if (get_message() == 1)
timeout = 10;
timeout ++;
}
while (((r_buffer[1] < '0') || (r_buffer[1] > '4')) && (timeout < 10));
if (timeout >= 10)
return 1;
else
return 0;
}
 
void display_data (void)
{
uint8_t line;
uint8_t text[10];
 
lcd_cls();
lcd_printp(PSTR("Display"),0);
do
{
while (key != 0x00);
if (read_display(0) == 1)
{
lcd_printp(PSTR("\r\nTimeout!"),0);
timer = 200;
while (timer > 0);
break;
}
else
{
line = r_buffer[1];
text[0] = line;
text[1] = 0x00;
lcd_print_at(10,0,text,0);
lcd_print_at(0,line+1,p_buffer,0);
timer = 10;
while(timer > 0);
if (key == 0x01)
read_display(1);
if (key == 0x02)
read_display(2);
}
}
while (key != 0x04);
}
/Transportables_Koptertool/tags/V-0.1/display.h
0,0 → 1,6
#ifndef display_h
#define display_h
 
void display_data (void);
 
#endif
/Transportables_Koptertool/tags/V-0.1/font8x6.h
0,0 → 1,9
 
#ifndef font8x6_h
#define font8x6_h
 
#include <avr/pgmspace.h>
 
extern prog_uint8_t f8x6[256][6];
 
#endif
/Transportables_Koptertool/tags/V-0.1/lcd.c
0,0 → 1,557
 
#define F_CPU 7372800UL
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
 
#include "font8x6.h"
#include "main.h"
#include "lcd.h"
 
#define DISP_W 128
#define DISP_H 64
// #define LCD_ORIENTATION 0 // 0 MJ Tasten unten / 4 Original Tasten oben
 
 
uint8_t lcd_xpos;
uint8_t lcd_ypos;
//volatile uint8_t display_buffer[1024]; // Display-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
 
 
void send_byte (uint8_t data)
{
clr_cs();
SPDR = data;
while(!(SPSR & (1<<SPIF)));
SPSR = SPSR;
set_cs();
}
 
void cls (void)
{
uint16_t i,j;
for (i=0;i<1024;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 (void)
{
cls();
}
 
void wait_1ms(void)
{
_delay_ms (1.0);
}
 
void wait_ms (uint16_t time)
{
uint16_t i;
for (i=0; i<time; i++)
wait_1ms();
}
 
void lcd_init (void)
{
lcd_xpos = 0;
lcd_ypos = 0;
 
DDRB = 0xFF;
SPCR = (1<<SPE)|(1<<MSTR)|(1<<CPHA)|(1<<CPOL)|(1<<SPR1);
set_cs();
clr_reset();
wait_ms(10);
set_reset();
clr_cs();
clr_A0();
send_byte(0x40);
 
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)
}
send_byte(0xA6);
send_byte(0xA2);
send_byte(0x2F);
send_byte(0xF8);
send_byte(0x00);
send_byte(0x27);
send_byte(0x81);
send_byte(0x16);
send_byte(0xAC);
send_byte(0x00);
send_byte(0xAF);
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) + 4; Wenn gedreht
// column = (adress & 0x7F);
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);
}
}
 
//
// x,y = character-Pos. !
//
// mode: 0=Overwrite, 1 = OR, 2 = XOR, 3 = AND, 4 = Delete
void put_char (uint8_t x, uint8_t y, uint8_t c, uint8_t mode)
{
uint8_t ch;
uint8_t i;
uint16_t adress;
 
switch(c)
{
case 'ä':
c = 0x84;
break;
case 'ö':
c = 0x94;
break;
case 'ü':
c = 0x81;
break;
case 'Ä':
c = 0x8E;
break;
case 'Ö':
c = 0x99;
break;
case 'Ü':
c = 0x9A;
break;
case 'ß':
c = 0xE1;
break;
}
adress = y*128 + x*6;
adress &= 0x3FF;
for (i=0;i<6;i++)
{
ch = pgm_read_byte (&f8x6[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]);
}
}
 
void new_line (void)
{
lcd_ypos++;
if (lcd_ypos > 7)
{
scroll();
lcd_ypos = 7;
}
}
 
 
void lcd_printp (const char *text, uint8_t mode)
{
while (pgm_read_byte(text))
{
if (pgm_read_byte(text) > 0x1F)
{
put_char(lcd_xpos,lcd_ypos,pgm_read_byte(text++),mode);
lcd_xpos++;
if (lcd_xpos > 20)
{
lcd_xpos = 0;
new_line();
}
}
else
{
switch (pgm_read_byte(text))
{
case 0x0D:
lcd_xpos = 0;
break;
case 0x0A:
new_line();
break;
}
text++;
}
}
}
 
void lcd_print_atp (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)
{
if (*text > 0x1F)
{
put_char(lcd_xpos,lcd_ypos,*text++,mode);
lcd_xpos++;
if (lcd_xpos > 20)
{
lcd_xpos = 0;
new_line();
}
}
else
{
switch (*text)
{
case 0x0D:
lcd_xpos = 0;
break;
case 0x0A:
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);
}
 
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + 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 < 128) && (ypos < 64))
{
adress = (ypos/8) * 128 + xpos; // adress = 0/8 * 128 + 0 = 0
mask = 1<<(ypos & 0x07); // mask = 1<<0 = 1
adress &= 0x3FF;
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 draw_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 draw_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);
}
}
/Transportables_Koptertool/tags/V-0.1/lcd.h
0,0 → 1,27
 
#ifndef graphics_h
#define graphics_h
 
void lcd_init (void);
void lcd_plot (uint8_t x, uint8_t y, 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 x2, uint8_t y2, uint8_t mode);
void draw_circle(int16_t x0, int16_t y0, int16_t radius, uint8_t mode);
void draw_fcircle(int16_t x0, int16_t y0, int16_t radius);
void put_char (uint8_t x, uint8_t y, uint8_t c, uint8_t mode);
void lcd_line(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, 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_print_atp (uint8_t x, uint8_t y, const char *text, uint8_t mode);
void lcd_cls (void);
 
volatile uint8_t display_buffer[1024]; // Display-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;
 
#endif
/Transportables_Koptertool/tags/V-0.1/main.c
0,0 → 1,88
/*
Mobiles Mikrokopter-Tool
+++++ BETA 0.1 +++++
Diese Software ist Open-Source und darf nicht für kommerzielle Zwecke verwendet werden.
Die Software darf kopiert, verändert und weitergegeben werden, unter der Bedingung,
dass immer der komplette Source inklusive dieser Lizenz weitergegeben wird.
Für den LCD-Font gilt das dort angegebene Copyright.
(C) 2008 Thomas Kaiser, thomas@ft-fanpage.de
 
Die Software wird "so wie sie ist" geliefert.
Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion.
Benutzung auf eigene Gefahr.
Ich übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden.
Dies gilt insbesondere für die vorliegende Beta-Version.
 
Teile des Source (z.B. die base64-Funktionen) sind abgewandelte Funktionen aus dem Mikrokopter-Source,
siehe http://www.mikrokopter.de
 
*/
 
//#define F_CPU 7378200ul
 
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "lcd.h"
#include "rs232.h"
#include "parameter.h"
#include "menu.h"
#include "display.h"
#include "base64.h"
#include "timer.h"
 
unsigned char EEPromArray[E2END+1] EEMEM;
 
void ReadParameter(void)
{
// unsigned char *buffer;
 
LCD_ORIENTATION = eeprom_read_byte(&EEPromArray[EEPROM_ADR_ORIENTATION]);
 
// set = eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET]);
// if (number > 5) number = 5;
// eeprom_read_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length);
}
 
void WriteParameterset(void)
{
 
eeprom_write_byte(&EEPromArray[EEPROM_ADR_VALID], 1);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ORIENTATION], 0);
 
// if(number > 5) number = 5;
// eeprom_write_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length);
// eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], number); // diesen Parametersatz als aktuell merken
}
 
 
int main (void)
{
PORTA = 0xFF; // unbenutzte Pins auf Pull-Up
PORTB = 0x43;
PORTC = 0xFC;
PORTD = 0x7C;
DDRC = 0x03; // Pins für Beleuchtung auf Ausgang
DDRD = 0x80;
 
if ((eeprom_read_byte(&EEPromArray[EEPROM_ADR_VALID])) != 1)
WriteParameterset();
 
ReadParameter();
// LCD_ORIENTATION = 0;
 
lcd_init();
RS232_init();
timer_init();
sei();
 
for (;;)
main_menu();
}
/Transportables_Koptertool/tags/V-0.1/main.eep
0,0 → 1,0
:00000001FF
/Transportables_Koptertool/tags/V-0.1/main.elf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Transportables_Koptertool/tags/V-0.1/main.h
0,0 → 1,45
 
#ifndef main_h
#define main_h
 
#include <avr/eeprom.h>
 
#define set_cs() PORTB |= (1<<4)
#define clr_cs() PORTB &=~(1<<4)
#define set_reset() PORTB |= (1<<2)
#define clr_reset() PORTB &=~(1<<2)
#define set_A0() PORTB |= (1<<3) // Data
#define clr_A0() PORTB &=~(1<<3) // Command
#define set_scl() PORTB |= (1<<7)
#define clr_scl() PORTB &=~(1<<7)
#define set_si() PORTB |= (1<<5)
#define clr_si() PORTB &=~(1<<5)
 
#define key_enter 0x08
#define key_esc 0x04
#define key_plus 0x02
#define key_minus 0x01
#define key_nokey 0x00
 
extern uint8_t r_buffer[128];
extern uint8_t p_buffer[128];
//extern struct str_DebugIn *p_buffer;
 
extern volatile uint8_t key;
 
extern volatile uint8_t timer;
extern volatile uint8_t rs232_timer;
 
#endif
 
//#define EEPROM_ADR_VALID 1
 
#define EEPROM_ADR_VALID 1
#define EEPROM_ADR_ORIENTATION 2
 
 
extern unsigned char EEPromArray[];
 
#ifndef EEMEM
#define EEMEM __attribute__ ((section (".eeprom")))
#endif
/Transportables_Koptertool/tags/V-0.1/main.hex
0,0 → 1,616
:100000000C947E060C9499060C9499060C9499060F
:100010000C9499060C9499060C9499060C949906E4
:100020000C9499060C9499060C94B5060C949906B8
:100030000C9499060C94F80B0C9499060C94990660
:100040000C9499060C9499060C9499060C949906B4
:100050000C9499060000000000003E5B4F5B3E00E0
:100060003E6B4F6B3E001C3E7C3E1C00183C7E3CB1
:1000700018001C577D571C001C5E7F5E1C0000187A
:100080003C180000FFE7C3E7FF0000182418000039
:10009000FFE7DBE7FF0030483A060E002629792902
:1000A0002600407F05050700407F05253F005A3C9C
:1000B000E73C5A007F3E1C1C0800081C1C3E7F00C9
:1000C00014227F2214005F5F005F5F0006097F013A
:1000D0007F00006689956A0060606060606094A23D
:1000E000FFA2940008047E04080010207E20100067
:1000F00008082A1C0800081C2A0808001E101010F6
:1001000010000C1E0C1E0C0030383E383000060E5D
:100110003E0E060000000000000000005F0000002E
:10012000000700070000147F147F1400242A7F2A90
:10013000120023130864620036495620500000085C
:1001400007030000001C224100000041221C0000A7
:100150002A1C7F1C2A0008083E0808000080703016
:100160000000080808080800000060600000201077
:10017000080402003E5149453E0000427F40000015
:100180007249494946002141494D33001814127FF4
:1001900010002745454539003C4A49493100412175
:1001A00011090700364949493600464949291E00C8
:1001B0000000140000000040340000000008142279
:1001C0004100141414141400004122140800020108
:1001D000590906003E415D594E007C1211127C0007
:1001E0007F49494936003E41414122007F4141411A
:1001F0003E007F49494941007F09090901003E410C
:10020000415173007F0808087F0000417F410000D2
:100210002040413F01007F08142241007F404040C0
:1002200040007F021C027F007F0408107F003E41D7
:1002300041413E007F09090906003E4151215E000F
:100240007F091929460026494949320003017F01E7
:1002500003003F4040403F001F2040201F003F4020
:1002600038403F006314081463000304780403005B
:100270006159494D4300007F41414100020408108B
:100280002000004141417F0004020102040040407F
:10029000404040000003070800002054547840000C
:1002A0007F284444380038444444280038444428D3
:1002B0007F0038545454180000087E09020018A426
:1002C000A49C78007F080404780000447D4000006E
:1002D0002040403D00007F102844000000417F4046
:1002E00000007C04780478007C080404780038441A
:1002F00044443800FC182424180018242418FC0056
:100300007C080404080048545454240004043F4466
:1003100024003C4040207C001C2040201C003C402D
:1003200030403C004428102844004C9090907C00C1
:100330004464544C4400000836410000000077003B
:1003400000000041360800000201020402003C26C1
:1003500023263C001EA1A16112003A4040207A00F1
:100360003854545559002155557941002154547839
:1003700041002155547840002054557940000C1E0E
:100380005272120039555555590039545454590078
:100390003955545458000000457C41000002457D09
:1003A00042000001457C4000791412147900F028C5
:1003B0002528F0007C54554500002054547C5444BA
:1003C0007C0A097F4941324949493200324848484C
:1003D0003200324A484830003A4141217A003A42DC
:1003E00040207800009DA0A07D003944444439009D
:1003F0003D4040403D003C24FF242400487E4943CA
:1004000066002B2FFC2F2B00FF0929F62000C08847
:100410007E0903002054547941000000447D4100CE
:100420003048484A3200384040227A00007A0A0AAE
:1004300072007D0D19317D002629292F28002629DB
:100440002929260030484D402000380808080800B7
:100450000808080838002F10C8ACBA002F1028343C
:10046000FA0000007B00000008142A142200221465
:100470002A140800AA005500AA00AA55AA55AA5590
:1004800055AA55AA55AA000000FF0000101010FF41
:100490000000141414FF00001010FF00FF001010E3
:1004A000F010F000141414FC00001414F700FF0006
:1004B0000000FF00FF001414F404FC0014141710D3
:1004C0001F0010101F101F001414141F0000101024
:1004D00010F000000000001F10101010101F10106E
:1004E000101010F01010000000FF1010101010106D
:1004F0001010101010FF1010000000FF1414000066
:10050000FF00FF1000001F1017140000FC04F4147B
:100510001414171017141414F404F4140000FF003A
:10052000F7141414141414141414F700F7141414F6
:100530001417141410101F101F10141414F4141492
:100540001010F010F01000001F101F100000001F0E
:100550001414000000FC14140000F010F01010102F
:10056000FF10FF10141414FF14141010101F0000BB
:10057000000000F01010FFFFFFFFFFFFF0F0F0F0B1
:10058000F0F0FFFFFF000000000000FFFFFF0F0F73
:100590000F0F0F0F3844443844007C2A2A3E1400C1
:1005A0007E0202060600027E027E02006355494179
:1005B00063003844443C0400407E201E20000602B4
:1005C0007E02020099A5E7A599001C2A492A1C0071
:1005D0004C7201724C00304A4D4D30003048784822
:1005E0003000BC625A463D003E49494900007E0148
:1005F00001017E002A2A2A2A2A0044445F4444003A
:1006000040514A44400040444A5140000000FF012C
:100610000300E080FF00000008086B6B080836123A
:1006200036243600060F090F0600000018180000D7
:100630000000101000003040FF010100001F010108
:100640001E0000191D171200003C3C3C3C0000003D
:1006500000000000202020202020004E69636B2035
:100660002020202020202020202000526F6C6C2091
:1006700020202020202020202020004761732020DF
:10068000202020202020202020200047696572099A
:100690000909000000000000000000506F7469317B
:1006A0000909090000000000000000506F74693261
:1006B0000909090000000000000000506F74693350
:1006C0000909090000000000000000506F7469343F
:1006D0000909090000000000000000436F6E666910
:1006E0006709090900000000000000486F6568659F
:1006F0005F4D696E476173202020004C75667464FD
:100700007275636B5F4420202020004D6178486F34
:100710006568652020202020202000486F656865DE
:100720005F50202020202020202000486F65686531
:100730005F56657273746165726B00486F656865BA
:100740005F4143435F5769726B2E00537469636B5B
:100750005F50202020202020202000537469636BEC
:100760005F44202020202020202000476965725F00
:1007700050202020202020202020004761735F4D42
:10078000696E2020202020202020004761735F4DCB
:1007900061782020202020202020004779726F419E
:1007A000636346616B746F720900004B6F6D70611B
:1007B00073735769726B756E6720004779726F5F4C
:1007C00050200909000000000000004779726F5FA7
:1007D0004909090900000000000000556E746572A7
:1007E0007370616E6E756E672020004E6F74476186
:1007F00073090909000000000000004E6F74476192
:10080000735A65697420202020200055666F417559
:10081000737269636874756E672000495F46616B27
:10082000746F7220202020202020005573657250A4
:100830006172616D310909000000005573657250E5
:100840006172616D320909000000005573657250D4
:100850006172616D330909000000005573657250C3
:100860006172616D34090900000000536572766F92
:100870004E69636B4374726C090000536572766F46
:100880004E69636B436F6D70090000536572766F3C
:100890004E69636B4D696E09000000536572766F97
:1008A0004E69636B4D617809000000536572766F85
:1008B0004E69636B526566727368004C6F6F704768
:1008C00061734C696D6974090000004C6F6F70545E
:1008D00068726573686F6C640900004C6F6F7048D4
:1008E0007973746572657365090000416368734BC1
:1008F0006F70706C756E6709000000416368734724
:100900006567656E4B6F70706C2E0057696E6B6C0F
:10091000556D7363686C4E69636B0057696E6B6CE1
:10092000556D7363686C526F6C6C004779726F41E0
:1009300063634162676C65696368004472696674E9
:100940006B6F6D700909000000000044796E616DE5
:10095000696353746162696C6974005573657250A0
:100960006172616D350909000000005573657250B0
:100970006172616D3609090000000055736572509F
:100980006172616D3709090000000055736572508E
:100990006172616D380909000000004C6F6F70438F
:1009A0006F6E666967090900000000536572766F13
:1009B0004E69636B436F6D70496E004C6F6F7020B2
:1009C00075702020202020202020004C6F6F702088
:1009D000646F776E092020202000004C6F6F70201C
:1009E0006C656674202020202020004C6F6F7020E2
:1009F000726967687420202020200048F668656EC0
:100A00007265676C6572202020200048F668656E6C
:100A1000736368616C746572202000486561646866
:100A20006F6C6409090000000000004B6F6D70617D
:100A300073730909000000000000004B6F6D7061C6
:100A4000737346697809090000000047505309098B
:100A500009000000000000000000004163687365A9
:100A60006E6B6F70706C756E672000447265687293
:100A70006174650909000000000000010802010816
:100A8000020108020108020108020108020108022D
:100A900001080200000000FF0400FF0400FF040042
:100AA000FF0400320400FF040006030040030014AA
:100AB0000300200821FA0800320800FF08000005A2
:100AC00000000500FA0800FA0800FA08000100001A
:100AD000FF0500FF0900FF0900FF0900FF0900FFF3
:100AE0000700FA0700FA0700FA0700190700FF06D7
:100AF00000FA0600FA0600FF0A00FF0A00FA0600E4
:100B0000FA0600FA0500FA0500FF0500FF0900FFDC
:100B10000900FF0900FF09000001000107000000B3
:100B200000000000000000000000000000000000C5
:100B300000000000000000000000000000000000B5
:100B40000000020202020202020200040404040481
:100B50000403030308080808050508080800050938
:100B60000909090707070707070606060A0A06060E
:100B70000505050909090900070B0B0B0B0C0C0CEB
:100B80000C0C0C0C0C436F6E666967202020200053
:100B90004368616E6E656C73202000537469636BEB
:100BA000202020202000486F65686520202020201C
:100BB000004779726F202020202020004C6F6F703A
:100BC000696E672020200043616D657261202020DE
:100BD0002000536F6E7374696765732000557365E9
:100BE0007220202020202000436F75706C696E6792
:100BF000202000436F6E66696728322920004C6F01
:100C00006F70696E67736574002D002D002D004CA8
:100C100061646520506172616D657465720D0A00D2
:100C200020313A0D0A0020323A0D0A0020333A0DE5
:100C30000A0020343A0D0A0020353A0D0A005469A2
:100C40006D656F757400506172616D6574657220B9
:100C500073706569636865726E3F0D0A20206A6172
:100C60000D0A20206E65696E000D0A2D2D2D3E00A7
:100C70000D0A506172616D657465722067657370ED
:100C800065696368657274000D0A4E696368742053
:100C900067657370656963686572740020002A0077
:100CA00048617570746D656EFC284245544120564C
:100CB000302E31290D0A000D0A446973706C617978
:100CC0000D0A00506172616D657465720D0A004D08
:100CD0006F746F727465737400446973706C6179BA
:100CE000000D0A54696D656F757421005461737449
:100CF00065206472FC636B656E0D0A0011241FBED3
:100D0000CFE5D8E0DEBFCDBF10E0A0E6B0E0ECE676
:100D1000F6E202C005900D92A036B107D9F715E0B2
:100D2000A0E6B0E001C01D92A738B107E1F70C942E
:100D30009B060C940000CFE5D8E0DEBFCDBF8FEF5F
:100D40008BBB83E488BB8CEF85BB8CE782BB83E0E5
:100D500084BB80E881BB0E9453070E941A0C0E944A
:100D6000F40678940E94C811FDCF1F920F920FB61F
:100D70000F9211248F939F938091E404882331F084
:100D80008091E40481508093E40415C08AE080934C
:100D9000E40489B3992780959095689413F8959504
:100DA00087951694E1F78F708093E604809169052A
:100DB0008F5F8093690580916100882329F080917D
:100DC00061008150809361008091E504882329F0BF
:100DD0008091E50481508093E5049F918F910F905D
:100DE0000FBE0F901F9018958DE083BF88E48CBFD5
:100DF00089B7826089BF0895C4988FB9779BFECF69
:100E00008EB18EB9C49A08950F931F93CF93DF9339
:100E100082E690E0FC011192019624E0813692076F
:100E2000D1F3C8F300E010E0C398802F80550E94F2
:100E3000FC0680E10E94FC0684E00E94FC06C39A46
:100E4000CFE7D0E080E00E94FC062197D7FFFACFE1
:100E50000F5F1F4F0830110538F310926A0510928A
:100E60006B05DF91CF911F910F9108950E940407A8
:100E7000089583E397E00197F1F708950F931F9387
:100E8000CF93DF938C01C0E0D0E0C817D90730F4CE
:100E90000E9439072196C017D107D0F3DF91CF9177
:100EA0001F910F91089510926A0510926B058FEFB4
:100EB00087BB8EE58DB9C49AC2988AE090E00E9403
:100EC0003E07C29AC498C39880E40E94FC0680EA58
:100ED0000E94FC0688EC0E94FC0686EA0E94FC0642
:100EE00082EA0E94FC068FE20E94FC0688EF0E94C4
:100EF000FC0680E00E94FC0687E20E94FC0681E876
:100F00000E94FC0686E10E94FC068CEA0E94FC0618
:100F100080E00E94FC068FEA0E94FC060E94040703
:100F20000895FF920F931F938C01F62E880F892F3F
:100F3000881F990B9195C39880550E94FC06102F2D
:100F40001F771C5F812F82958F70805F0E94FC0647
:100F5000812F8F700E94FC06C39A8F2D0E94FC0681
:100F60001F910F91FF900895EF92FF920F931F939F
:100F7000CF93DF93C0E0D0E032EEE32E30E0F32EEB
:100F8000870100581040F70181917F01F8018083AB
:100F900061918F01CE010E9491072196F3E0C03844
:100FA000DF0788F3C0E8D3E002EE13E0F801119206
:100FB0008F0160E0CE010E9491072196F4E0C030DD
:100FC000DF07A0F3DF91CF911F910F91FF90EF907A
:100FD0000895BF92CF92DF92EF92FF920F931F93EB
:100FE000CF93DF93382FF42EB22E842F99278F3D85
:100FF000910589F1803E910574F4863D910529F1B2
:10100000873D910524F4843C9105E1F026C08C3D98
:101010009105F1F022C0863F910571F0873F91055F
:1010200024F4843E910529F018C08C3F910539F0D5
:1010300014C014E8F12E11C0C4E9FC2E0EC0B1E8B2
:10104000FB2E0BC0AEE8FA2E08C0F9E9FF2E05C052
:10105000EAE9FE2E02C071EEF72EC62FDD27D695E7
:10106000DC2FCC27D795C79586E0389FC001112487
:10107000C80FD91FD3706E0100E010E045E0E42EE8
:1010800086E0F89EF0011124E00FF11FEC5AFF4FAB
:1010900024918B2D992782309105E9F083309105B9
:1010A0002CF4009749F0019771F02CC08330910522
:1010B000D1F00497F1F026C0FE01EE59FF4FE00F8A
:1010C000F11F20831FC0FE01EE59FF4FE00FF11FFB
:1010D0008081822B16C0FE01EE59FF4FE00FF11FF9
:1010E000808182270EC0FE01EE59FF4FE00FF11FF5
:1010F00006C0FE01EE59FF4FE00FF11F20958081E1
:1011000082238083FE01EE59FF4FE00FF11F6081C3
:10111000C6010E949107EA940F5F1F4F0894C11CFB
:10112000D11CE7FEADCFDF91CF911F910F91FF90C2
:10113000EF90DF90CF90BF90089580916B058F5F07
:1011400080936B05883028F00E94B40787E0809375
:101150006B0508951F93CF93DF93EC01162FFC01CD
:101160008491882351F1FE0184918032B0F0219660
:101170008491212F482F60916B0580916A050E9410
:10118000E90780916A058F5F80936A05853188F051
:1011900010926A050E949D080CC099278A3091051B
:1011A00029F00D9729F410926A0502C00E949D084B
:1011B0002196FE0184918823B1F6DF91CF911F9192
:1011C000089580936A0560936B05622FCA010E949F
:1011D000AA0808951F93CF93DF93EC01162F8881FF
:1011E000882339F148814032A0F02196212F609167
:1011F0006B0580916A050E94E90780916A058F5FFF
:1012000080936A05853190F010926A050E949D08CE
:101210000DC055274A30510531F04D30510529F4A4
:1012200010926A0502C00E949D0821968881882339
:10123000C9F6DF91CF911F91089580936A0560935D
:101240006B05622FCA010E94EA080895982F87FD56
:1012500045C0603408F042C0862F869586958695F5
:10126000A82FBB27B695BA2FAA27B795A795A90F80
:10127000B11D262F33272770307081E090E002C027
:10128000880F991F2A95E2F7982FB37055274130A0
:10129000510589F0423051051CF4452B29F017C047
:1012A0004230510571F013C0FD01EE59FF4F90958A
:1012B000808189230BC0FD01EE59FF4F8081892B6E
:1012C00005C0FD01EE59FF4F808189278083FD0114
:1012D000EE59FF4F6081CD010E94910708952F9232
:1012E0003F924F925F926F927F928F929F92AF92B6
:1012F000BF92CF92DF92EF92FF920F931F93CF9303
:10130000DF93CDB7DEB723970FB6F894DEBF0FBEDD
:10131000CDBF0983A82EBB24C62EDD24642E7724DE
:101320007301EA18FB08822E992484010C191D0907
:10133000F7FE04C07FEF272E372E09C01E141F04AE
:1013400024F461E0262E312C02C02224332417FF1E
:1013500004C05FEF452E552E09C01016110624F467
:1013600041E0442E512C02C044245524F7FE04C011
:10137000F094E194F108F39417FF03C010950195E0
:101380001F4F49816C2D8A2D0E9426090E151F05BD
:101390004CF5C701F7FC01969595879522273327D1
:1013A000281B390B3B832A83A614B70409F441C0D8
:1013B0008A819B81800F911F9B838A83A20CB31C1F
:1013C0001816190634F4C40CD51C8E199F099B837A
:1013D0008A8349816C2D8A2D0E942609A614B704A0
:1013E00039F727C0C80117FD019695958795EE2717
:1013F000FF27E81BF90BFB83EA83C814D904C9F063
:101400002A813B812E0D3F1D3B832A83C40CD51CB2
:101410001216130634F4A20CB31C201B310B3B83B1
:101420002A8349816C2D8A2D0E942609C814D9046B
:1014300039F723960FB6F894DEBF0FBECDBFDF910C
:10144000CF911F910F91FF90EF90DF90CF90BF90C1
:10145000AF909F908F907F906F905F904F903F9054
:101460002F900895BF92CF92DF92EF92FF920F9349
:101470001F93CF93DF93182F822FB02E17FD1FE7F6
:10148000603408F06FE3212F240F312D311D6901E5
:10149000262F33277901E80EF11C81E8C816D10404
:1014A00018F0F0E8CF2ED12C81E4E816F10418F002
:1014B000E0E4EE2EF12CE901E216F30658F00B2DD4
:1014C0002C2F4C2D6C2F812F0E946F092196EC162A
:1014D000FD06A8F7DF91CF911F910F91FF90EF903C
:1014E000DF90CF90BF900895CF92DF92EF92FF925E
:1014F0000F931F93CF93DF93D82E162FC02E87FF05
:1015000002C0BFE7DB2E103408F01FE38D2D840FDF
:10151000912D911DEC01812F820F912D911D7C0148
:10152000C138D10510F0C0E8D0E091E4E916F1042B
:1015300018F0A0E4EA2EF12C0C2D212F4C2F612F56
:101540008D2D0E946F092E2D4C2F612F8C2F0E9404
:101550006F092E2D4D2D6E2D8C2F0E946F09212F7E
:101560004D2D6E2D8D2D0E946F09DF91CF911F9112
:101570000F91FF90EF90DF90CF9008952F923F92C0
:101580004F925F926F927F928F929F92AF92BF9293
:10159000CF92DF92EF92FF920F931F93CF93DF933F
:1015A0005C016B01E22EC1E08C2E912C841A950A0D
:1015B000222433248EEF9FEF489F2001499F500C37
:1015C000589F500C11243101EA01862F840F422FBD
:1015D000682F8A2D0E9426098C2D8C1B4E2D682F7A
:1015E0008A2D0E9426094E2D6C2D8A2D8C0F0E946B
:1015F00026094E2D6C2D8A2D8C1B0E9426092C1637
:101600003D060CF051C097FC07C0219782E090E0A6
:10161000480E591E840C951C0894611C711C82E0B4
:1016200090E0280E391E820C931C0894811C911C9A
:101630001C2D1C0FFA2CF60C4E2D612F8F2D0E94A5
:1016400026090A2D06194E2D612F802F0E9426098A
:101650001C2D1C1B4E2D612F8F2D0E9426094E2DF7
:10166000612F802F0E9426091C2D160DFA2CFC0ECE
:101670004E2D612F8F2D0E9426090A2D0C1B4E2DF9
:10168000612F802F0E9426091C2D16194E2D612FC7
:101690008F2D0E9426094E2D612F802F0E94260932
:1016A0006C167D060CF4AFCFDF91CF911F910F9197
:1016B000FF90EF90DF90CF90BF90AF909F908F9072
:1016C0007F906F905F904F903F902F9008952F9252
:1016D0003F924F925F926F927F928F929F92AF92C2
:1016E000BF92CF92DF92FF920F931F93CF93DF931E
:1016F0005C016B0111E0612E712C641A750A2224C1
:1017000033248EEF9FEF489F2001499F500C589F34
:10171000500C11244101EA01862F841B962F940F4F
:1017200001E0282F4A2D692F8A2D0E946F098A2DEA
:101730008C1B2C2D482F6C2D8A2D8C0F0E946F092D
:101740002C163D060CF042C077FC07C0219782E0C2
:1017500090E0480E591E640C751C0894811C911C65
:1017600082E090E0280E391E620C731C0894611C04
:10177000711C8C2D8C0F1A2D1819FA2CF80C01E005
:10178000282F412F682F8F2D0E946F098C2D8C1BC5
:10179000282F412F682F8F2D0E946F098C2D880DC7
:1017A0001A2D1C1BFA2CFC0E282F412F682F8F2D71
:1017B0000E946F098C2D8819282F412F682F8F2D9B
:1017C0000E946F098C169D060CF4BECFDF91CF915D
:1017D0001F910F91FF90DF90CF90BF90AF909F909F
:1017E0008F907F906F905F904F903F902F900895D3
:1017F0001F920F920FB60F9211248F939F93EF9326
:10180000FF9390916C05EEE6F5E0E90FF11D8CB1C8
:1018100080839F5F90936C0580916C058F7080939F
:101820006C05FF91EF919F918F910F900FBE0F90DC
:101830001F90189588E98AB987E089B908958AE0E8
:101840008093E50490916D0580916C05981721F4C3
:101850008091E5048823B1F78091E504882381F025
:1018600080916D05E82FFF27E259FA4F8F5F809333
:101870006D05E08180916D058F7080936D0501C0CD
:10188000E82F8E2F992708955D9BFECF8CB9089580
:10189000CF93DF93EC018881882331F089910E94F6
:1018A000440C88818823D1F7DF91CF910895A82F28
:1018B00062E070E06A17B0F5E62FFF27E751FB4FB3
:1018C00080818D5331813D5352815D5343814D530E
:1018D0006C5FE72FFF27ED59FB4F9927880F991F62
:1018E000880F991F232F22952F70282B2083832F59
:1018F00099278F70907034E0880F991F3A95E1F71F
:10190000252F26952695282B2183852F99278370AF
:10191000907026E0880F991F2A95E1F7482B4283A3
:101920007D5FC8CF872F99270895CF9384E1809357
:1019300061000E941F0C833221F080916100882396
:10194000C1F780916100882399F0C0E00E941F0CCC
:10195000EC2FFF27E751FB4F8083CF5FC7FDCFE719
:101960008D30A1F78C2F0E94570C80E090E002C0D0
:1019700081E090E0CF910895FF920F931F93CF9352
:10198000A82F809163048093E9048091640480937C
:10199000EA04809165048093EB0443E0F42E7F2DEC
:1019A000FA16E0F5E72FFF27ED59FB4F90812181D3
:1019B00062817D5FEF2DFF27E751FB4F892F8695D1
:1019C0008695835C8083892F99278370907034E09B
:1019D000880F991F3A95E1F7422F55279A0194E015
:1019E000369527959A95E1F7822B835C81834F701A
:1019F0005070440F551F440F551F862F992716E02E
:101A0000969587951A95E1F7842B835C82836F7393
:101A1000635C638384E0F80E7A1720F220E030E004
:101A2000C0E0CF1540F4E9EEF4E08191280F311DBC
:101A3000CF5FCF15D0F33F70EF2DFF27E751FB4F5E
:101A4000C901C6E096958795CA95E1F7835C8083C6
:101A50002F733070822F835C81838DE082831382A9
:101A600083E0F80EC381CF1550F409EE14E0F801BD
:101A700081918F010E94440CCF5FCF15C0F3CF91AD
:101A80001F910F91FF9008951F93CF93DF93CDB7D0
:101A9000DEB761970FB6F894DEBF0FBECDBF182F2B
:101AA00083E28093630481E68093640480936504F9
:101AB00010936604109267041092680486E00E94F6
:101AC000BC0C0E94950C8091EA048134D1F7DE01B0
:101AD0001196E3E6F4E09FE081918D93915097FF9A
:101AE000FBCF198A17702989AE014F5F5F4F612FB5
:101AF000822F0E941D0961960FB6F894DEBF0FBEBB
:101B0000CDBFDF91CF911F910895CF92DF92EF92D9
:101B1000FF920F931F93CF93DF93CDB7DEB76197FB
:101B20000FB6F894DEBF0FBECDBF00E00E943607AF
:101B300010E0C02EDD24C60153E0880F991F5A958E
:101B4000E1F7810F0E94440D1F5F183090F30E944F
:101B5000950C8091EA04843491F510E0EE24FF2482
:101B6000F60143E0EE0FFF1F4A95E1F7EE0DFF1D72
:101B7000EE0FFF1FED59FB4F228183819927982F8C
:101B800088274AE050E0BE016F5F7F4F820F911DB2
:101B90000E94CF1220E044E556E0612F8EE00E94C3
:101BA000E10820E0AE014F5F5F4F612F8EE00E94A1
:101BB0001D091F5F0894E11CF11C183088F2809108
:101BC000E604882321F28091E604813009F40F5F56
:101BD0008091E604823009F4015003708091E6049C
:101BE000883009F0A5CF61960FB6F894DEBF0FBE1E
:101BF000CDBFDF91CF911F910F91FF90EF90DF90BC
:101C0000CF900895CF93C0E093E29093630491E660
:101C10009093640491E79093650480936604C09365
:101C20006704C093680486E00E94BC0C0E94950C77
:101C3000813009F4CEE1CF5F8091EA048C54853085
:101C400010F0CE3198F3CE3118F081E090E002C070
:101C500080E090E0CF910895982F8630B8F4E9EABB
:101C6000F4E026E4808183832150319727FFFACF67
:101C700083E28093630481E6809364049559909392
:101C800065041092AD048BE40E94BC0C08959B0186
:101C9000682F772751E0F90120E030E047E0CB01E1
:101CA000022E02C0959587950A94E2F780FF02C044
:101CB000508301C0108241502F5F3F4F319647FF44
:101CC000EECF089550E061E070E0FC0120E030E0EC
:101CD00047E08191813041F4CB01022E02C0880F90
:101CE000991F0A94E2F7580F41502F5F3F4F47FF6B
:101CF000F0CF852F99270895282FFB0134E6632F15
:101D00000E941613582F839FC0011124281B3AE00C
:101D1000822F632F0E941613482F839FC001112426
:101D2000281B205D2283852F805D8083405D418359
:101D3000803329F480E28083403309F48183138265
:101D400008959F92AF92BF92CF92DF92EF92FF924F
:101D50000F931F93CF93DF93CDB7DEB7A1970FB645
:101D6000F894DEBF0FBECDBF082F9924823008F44F
:101D70003EC0192D4BE5A42E46E0B42E33E6C32E0B
:101D800034E0D32E2DE7E22E2AE0F22EF7018491E3
:101D90008017F1F4E92DFF27E158FA4F1083BE01B7
:101DA0006F5F7F4FF60180810E947C0E20E0AE01C4
:101DB0004F5F5F4F692D822F0E941D0920E0A50112
:101DC000692D85E00E94E108F7E0F91508F0939489
:101DD0001F5F83E090E0E80EF91E0894C11CD11C3F
:101DE000E0E1F0E0AE0EBF1E123480F25FC0813041
:101DF00071F5BE01665E7F4F809197040E94470E89
:101E00009A82192D9BEBC92E99E0D92EEE24FF243E
:101E1000CE010196F701E80FF91F218D205D29837E
:101E200020E0AC01612F822F0E941D0920E0A60155
:101E3000612F85E00E94E1081F5F0894E11CF11CFE
:101E400080E190E0C80ED91E143010F32FC0882313
:101E500069F5BE01665E7F4F80916B040E94470E5C
:101E60009A82192D8BEFC82E89E0D82EEE24FF24FC
:101E7000CE010196F701E80FF91F218D205D29831E
:101E800020E0AC01612F822F0E941D0920E0A601F5
:101E9000612F85E00E94E1081F5F0894E11CF11C9E
:101EA000E0E1F0E0CE0EDF1E183010F3892D992707
:101EB000A1960FB6F894DEBF0FBECDBFDF91CF91D4
:101EC0001F910F91FF90EF90DF90CF90BF90AF9058
:101ED0009F9008958F929F92AF92BF92DF92EF9260
:101EE000FF920F931F93CF93DF93CDB7DEB7629727
:101EF0000FB6F894DEBF0FBECDBFD82E81E08D1592
:101F000008F055C0615044E080E00E948611082F1F
:101F10008F3F09F44CC0E82EFF24F701E158FA4F37
:101F20008081E82FFF27ED59FB4F108120E049E029
:101F30005CE0602F84E00E94E1088091E604882341
:101F4000E1F78091E604813009F411508091E604B4
:101F5000823009F41F5FBE016F5F7F4F812F0E94A7
:101F60007C0E20E0AE014F5F5F4F602F822F0E94FA
:101F70001D0984E180936100809161008823E1F76D
:101F80008091E604843021F08091E6048830C9F61F
:101F90008091E604883059F4EFE7F5E0EE0EFF1E7D
:101FA000F7018081E82FFF27ED59FB4F1083F1E007
:101FB000DF1609F06CC06BE0862E912C8C0E9D1EF6
:101FC000B401809197040E94470E1A8244E063E0B6
:101FD0008A810E948611082F8F3F09F4C6C0E82E1F
:101FE000FF245E010894A11CB11CF701EA0DFB1D42
:101FF000128520E04BE05CE0682F84E00E94E1085D
:102000008091E604813009F410E08091E60482308A
:1020100009F411E0105D1983105320E0AE014F5F09
:102020005F4F602F822F0E941D0984E18093610021
:10203000D0906100DD20E1F78091E604883021F046
:102040008091E6048430E1F68091E604883049F41A
:10205000EA0CFB1CF7011287C4010E94620E8093F8
:1020600097040E943607BE016F5F7F4F80919704EF
:102070000E947C0E6D2DCE0101960E94EA0888EC2C
:1020800080936100809161008823E1F76EC0DD20BC
:1020900009F06BC05BE0852E912C8C0E9D1EB40167
:1020A00080916B040E94470EDA8244E067E08D2D38
:1020B0000E948611082F8F3F09F457C0E82EFF2495
:1020C0005E010894A11CB11CF701EA0DFB1D1285ED
:1020D0002D2D4DE05CE0682F84E00E94E1088091A6
:1020E000E604813009F410E08091E604823009F4BE
:1020F00011E0105D1983105320E0AE014F5F5F4F78
:10210000602F822F0E941D0984E180936100D0908E
:102110006100DD20E1F78091E604883021F08091B4
:10212000E6048430E1F68091E604883049F4EA0C54
:10213000FB1CF7011287C4010E94620E80936B049E
:102140000E943607BE016F5F7F4F80916B040E9433
:102150007C0E6D2DCE0101960E94EA0888EC8093DA
:102160006100809161008823E1F762960FB6F894D0
:10217000DEBF0FBECDBFDF91CF911F910F91FF90BA
:10218000EF90DF90BF90AF909F908F9008951F9336
:10219000CF93DF93CDB7DEB72F970FB6F894DEBF9E
:1021A0000FBECDBF0E94360760E08FE09CE00E942A
:1021B000AA0860E080E29CE00E94AA0860E086E253
:1021C0009CE00E94AA0860E08CE29CE00E94AA08C1
:1021D00060E082E39CE00E94AA0860E088E39CE063
:1021E0000E94AA0840E065E081E00E94861112E0AA
:1021F0000E94020E813041F420E04EE35CE066E094
:10220000822F0E94E1085CC00E9436074AE050E03D
:10221000BE016F5F7F4F812F99270E94F01260E00F
:10222000CE0101960E94EA0882E3809361008091CA
:1022300061008823E1F70E943607812F0E94A10EDA
:10224000682F8091E6048823E1F38091E6048230D0
:1022500009F41F5F8091E604813009F411501F3F9B
:1022600011F41CE003C01D3008F010E08091E6047A
:10227000883019F4812F0E946A0F8091E60484301F
:1022800019F60E94360760E086E49CE00E94AA08E6
:1022900040E062E081E00E948611813061F460E0FC
:1022A00089E69CE00E94AA0885E00E942C0E60E06E
:1022B00080E79CE003C060E088E89CE00E94AA08F8
:1022C00084E680936100809161008823E1F72F9676
:1022D0000FB6F894DEBF0FBECDBFDF91CF911F9137
:1022E00008950F931F93062F142F20E04CE95CE014
:1022F000682F812F0E94E10820E04EE95CE0602F0A
:10230000812F0E94E1081F910F910895EF92FF9293
:102310000F931F93CF93F82EE62E042FC82F182F5C
:10232000682F0E9471118091E6048823E1F7809163
:10233000E6048823E1F38091E604823019F4CE1597
:1023400008F4CF5F8091E604813019F4FC1608F49C
:10235000C150402F6C2F812F0E9471111C2F809132
:10236000E604883021F08091E6048430E1F6809123
:10237000E604843009F4CFEF8091E6048823E1F786
:102380008C2F9927CF911F910F91FF90EF90089577
:102390000E94360760E080EA9CE00E94AA0860E0A4
:1023A00087EB9CE00E94AA0860E083EC9CE00E941E
:1023B000AA0860E08FEC9CE00E94AA084AE064E072
:1023C00082E00E94861199278330910561F0843064
:1023D00091051CF4029721F00895049739F00895AF
:1023E0000E94231208950E94C71008950E9483122C
:1023F0000895CF93C0E093E29093630491E69093A5
:10240000640498E69093650480936604C09367041F
:10241000C093680486E00E94BC0C0E94950C813039
:1024200009F4CAE0CF5F8091EA048053853010F050
:10243000CA3098F3CA3018F081E090E002C080E022
:1024400090E0CF9108950F931F93CF93DF93CDB773
:10245000DEB72A970FB6F894DEBF0FBECDBF0E943D
:10246000360760E089ED9CE00E94AA080091E6042E
:102470000023E1F7802F0E94F911813069F4602F69
:1024800081EE9CE00E94AA0888EC80936100809114
:1024900061008823E1F72CC01091EA0419830A83B4
:1024A000202FAE014F5F5F4F602F8AE00E941D0911
:1024B0001F5F202F43E654E0612F802F0E941D09EB
:1024C0008AE080936100809161008823E1F7809128
:1024D000E604813011F40E94F9118091E604823003
:1024E00011F40E94F9118091E604843009F0BECF06
:1024F0002A960FB6F894DEBF0FBECDBFDF91CF9105
:102500001F910F9108950E9436076091E60466239B
:10251000E1F78CEE9CE00E94AA088091E6048823F3
:10252000E1F38091E6048830C9F483E28093630488
:1025300081E68093640484E7809365048AE0809355
:102540006604809367048093680480936904109202
:102550006A0410926B0489E00E94BC0C8091E6042E
:102560008823E1F78091E6048823E1F383E28093F6
:10257000630481E68093640484E780936504109289
:102580006604109267041092680410926904109215
:102590006A0410926B0489E00E94BC0C0895FB0150
:1025A0009F01E8944230C4F04532B4F44A3029F433
:1025B00097FB1EF4909581959F4F642F77270E947B
:1025C0002213805D8A330CF0895D8193CB010097E3
:1025D000A1F716F45DE251931082C9010C94061321
:1025E000FB019F01423074F0453264F4642F772779
:1025F0000E942213805D8A330CF0895D8193CB01A8
:102600000097A1F71082C9010C940613DC01FC01AC
:1026100001900020E9F73297AE17BF0730F47C91A4
:102620006081708331976D93F7CF0895991B79E09E
:1026300004C0991F961708F0961B881F7A95C9F752
:1026400080950895AA1BBB1B51E107C0AA1FBB1FA1
:10265000A617B70710F0A61BB70B881F991F5A952E
:0C266000A9F780959095BC01CD0108956C
:00000001FF
/Transportables_Koptertool/tags/V-0.1/main.lss
0,0 → 1,5331
 
main.elf: file format elf32-avr
 
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0000266c 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000000 00800060 0000266c 00002700 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000527 00800060 00800060 00002700 2**0
ALLOC
3 .noinit 00000000 00800587 00800587 00002700 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 00002700 2**0
CONTENTS
5 .stab 0000036c 00000000 00000000 00002700 2**2
CONTENTS, READONLY, DEBUGGING
6 .stabstr 00000084 00000000 00000000 00002a6c 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_aranges 000000c8 00000000 00000000 00002af0 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_pubnames 00000902 00000000 00000000 00002bb8 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_info 00001dfa 00000000 00000000 000034ba 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_abbrev 0000098e 00000000 00000000 000052b4 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_line 00001982 00000000 00000000 00005c42 2**0
CONTENTS, READONLY, DEBUGGING
12 .debug_str 000004dc 00000000 00000000 000075c4 2**0
CONTENTS, READONLY, DEBUGGING
13 .debug_ranges 0000000c 0000266c 0000266c 00007aa0 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
 
00000000 <__vectors>:
0: 0c 94 7e 06 jmp 0xcfc <__init>
4: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
8: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
c: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
10: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
14: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
18: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
1c: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
20: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
24: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
28: 0c 94 b5 06 jmp 0xd6a <__vector_10>
2c: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
30: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
34: 0c 94 f8 0b jmp 0x17f0 <__vector_13>
38: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
3c: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
40: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
44: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
48: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
4c: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
50: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
 
00000054 <__ctors_end>:
54: 00 00 nop
56: 00 00 nop
58: 00 00 nop
5a: 3e 5b subi r19, 0xBE ; 190
5c: 4f 5b subi r20, 0xBF ; 191
5e: 3e 00 .word 0x003e ; ????
60: 3e 6b ori r19, 0xBE ; 190
62: 4f 6b ori r20, 0xBF ; 191
64: 3e 00 .word 0x003e ; ????
66: 1c 3e cpi r17, 0xEC ; 236
68: 7c 3e cpi r23, 0xEC ; 236
6a: 1c 00 .word 0x001c ; ????
6c: 18 3c cpi r17, 0xC8 ; 200
6e: 7e 3c cpi r23, 0xCE ; 206
70: 18 00 .word 0x0018 ; ????
72: 1c 57 subi r17, 0x7C ; 124
74: 7d 57 subi r23, 0x7D ; 125
76: 1c 00 .word 0x001c ; ????
78: 1c 5e subi r17, 0xEC ; 236
7a: 7f 5e subi r23, 0xEF ; 239
7c: 1c 00 .word 0x001c ; ????
7e: 00 18 sub r0, r0
80: 3c 18 sub r3, r12
82: 00 00 nop
84: ff e7 ldi r31, 0x7F ; 127
86: c3 e7 ldi r28, 0x73 ; 115
88: ff 00 .word 0x00ff ; ????
8a: 00 18 sub r0, r0
8c: 24 18 sub r2, r4
8e: 00 00 nop
90: ff e7 ldi r31, 0x7F ; 127
92: db e7 ldi r29, 0x7B ; 123
94: ff 00 .word 0x00ff ; ????
96: 30 48 sbci r19, 0x80 ; 128
98: 3a 06 cpc r3, r26
9a: 0e 00 .word 0x000e ; ????
9c: 26 29 or r18, r6
9e: 79 29 or r23, r9
a0: 26 00 .word 0x0026 ; ????
a2: 40 7f andi r20, 0xF0 ; 240
a4: 05 05 cpc r16, r5
a6: 07 00 .word 0x0007 ; ????
a8: 40 7f andi r20, 0xF0 ; 240
aa: 05 25 eor r16, r5
ac: 3f 00 .word 0x003f ; ????
ae: 5a 3c cpi r21, 0xCA ; 202
b0: e7 3c cpi r30, 0xC7 ; 199
b2: 5a 00 .word 0x005a ; ????
b4: 7f 3e cpi r23, 0xEF ; 239
b6: 1c 1c adc r1, r12
b8: 08 00 .word 0x0008 ; ????
ba: 08 1c adc r0, r8
bc: 1c 3e cpi r17, 0xEC ; 236
be: 7f 00 .word 0x007f ; ????
c0: 14 22 and r1, r20
c2: 7f 22 and r7, r31
c4: 14 00 .word 0x0014 ; ????
c6: 5f 5f subi r21, 0xFF ; 255
c8: 00 5f subi r16, 0xF0 ; 240
ca: 5f 00 .word 0x005f ; ????
cc: 06 09 sbc r16, r6
ce: 7f 01 movw r14, r30
d0: 7f 00 .word 0x007f ; ????
d2: 00 66 ori r16, 0x60 ; 96
d4: 89 95 .word 0x9589 ; ????
d6: 6a 00 .word 0x006a ; ????
d8: 60 60 ori r22, 0x00 ; 0
da: 60 60 ori r22, 0x00 ; 0
dc: 60 60 ori r22, 0x00 ; 0
de: 94 a2 std Z+36, r9 ; 0x24
e0: ff a2 std Y+39, r15 ; 0x27
e2: 94 00 .word 0x0094 ; ????
e4: 08 04 cpc r0, r8
e6: 7e 04 cpc r7, r14
e8: 08 00 .word 0x0008 ; ????
ea: 10 20 and r1, r0
ec: 7e 20 and r7, r14
ee: 10 00 .word 0x0010 ; ????
f0: 08 08 sbc r0, r8
f2: 2a 1c adc r2, r10
f4: 08 00 .word 0x0008 ; ????
f6: 08 1c adc r0, r8
f8: 2a 08 sbc r2, r10
fa: 08 00 .word 0x0008 ; ????
fc: 1e 10 cpse r1, r14
fe: 10 10 cpse r1, r0
100: 10 00 .word 0x0010 ; ????
102: 0c 1e adc r0, r28
104: 0c 1e adc r0, r28
106: 0c 00 .word 0x000c ; ????
108: 30 38 cpi r19, 0x80 ; 128
10a: 3e 38 cpi r19, 0x8E ; 142
10c: 30 00 .word 0x0030 ; ????
10e: 06 0e add r0, r22
110: 3e 0e add r3, r30
112: 06 00 .word 0x0006 ; ????
...
11c: 5f 00 .word 0x005f ; ????
11e: 00 00 nop
120: 00 07 cpc r16, r16
122: 00 07 cpc r16, r16
124: 00 00 nop
126: 14 7f andi r17, 0xF4 ; 244
128: 14 7f andi r17, 0xF4 ; 244
12a: 14 00 .word 0x0014 ; ????
12c: 24 2a or r2, r20
12e: 7f 2a or r7, r31
130: 12 00 .word 0x0012 ; ????
132: 23 13 cpse r18, r19
134: 08 64 ori r16, 0x48 ; 72
136: 62 00 .word 0x0062 ; ????
138: 36 49 sbci r19, 0x96 ; 150
13a: 56 20 and r5, r6
13c: 50 00 .word 0x0050 ; ????
13e: 00 08 sbc r0, r0
140: 07 03 mulsu r16, r23
142: 00 00 nop
144: 00 1c adc r0, r0
146: 22 41 sbci r18, 0x12 ; 18
148: 00 00 nop
14a: 00 41 sbci r16, 0x10 ; 16
14c: 22 1c adc r2, r2
14e: 00 00 nop
150: 2a 1c adc r2, r10
152: 7f 1c adc r7, r15
154: 2a 00 .word 0x002a ; ????
156: 08 08 sbc r0, r8
158: 3e 08 sbc r3, r14
15a: 08 00 .word 0x0008 ; ????
15c: 00 80 ld r0, Z
15e: 70 30 cpi r23, 0x00 ; 0
160: 00 00 nop
162: 08 08 sbc r0, r8
164: 08 08 sbc r0, r8
166: 08 00 .word 0x0008 ; ????
168: 00 00 nop
16a: 60 60 ori r22, 0x00 ; 0
16c: 00 00 nop
16e: 20 10 cpse r2, r0
170: 08 04 cpc r0, r8
172: 02 00 .word 0x0002 ; ????
174: 3e 51 subi r19, 0x1E ; 30
176: 49 45 sbci r20, 0x59 ; 89
178: 3e 00 .word 0x003e ; ????
17a: 00 42 sbci r16, 0x20 ; 32
17c: 7f 40 sbci r23, 0x0F ; 15
17e: 00 00 nop
180: 72 49 sbci r23, 0x92 ; 146
182: 49 49 sbci r20, 0x99 ; 153
184: 46 00 .word 0x0046 ; ????
186: 21 41 sbci r18, 0x11 ; 17
188: 49 4d sbci r20, 0xD9 ; 217
18a: 33 00 .word 0x0033 ; ????
18c: 18 14 cp r1, r8
18e: 12 7f andi r17, 0xF2 ; 242
190: 10 00 .word 0x0010 ; ????
192: 27 45 sbci r18, 0x57 ; 87
194: 45 45 sbci r20, 0x55 ; 85
196: 39 00 .word 0x0039 ; ????
198: 3c 4a sbci r19, 0xAC ; 172
19a: 49 49 sbci r20, 0x99 ; 153
19c: 31 00 .word 0x0031 ; ????
19e: 41 21 and r20, r1
1a0: 11 09 sbc r17, r1
1a2: 07 00 .word 0x0007 ; ????
1a4: 36 49 sbci r19, 0x96 ; 150
1a6: 49 49 sbci r20, 0x99 ; 153
1a8: 36 00 .word 0x0036 ; ????
1aa: 46 49 sbci r20, 0x96 ; 150
1ac: 49 29 or r20, r9
1ae: 1e 00 .word 0x001e ; ????
1b0: 00 00 nop
1b2: 14 00 .word 0x0014 ; ????
1b4: 00 00 nop
1b6: 00 40 sbci r16, 0x00 ; 0
1b8: 34 00 .word 0x0034 ; ????
1ba: 00 00 nop
1bc: 00 08 sbc r0, r0
1be: 14 22 and r1, r20
1c0: 41 00 .word 0x0041 ; ????
1c2: 14 14 cp r1, r4
1c4: 14 14 cp r1, r4
1c6: 14 00 .word 0x0014 ; ????
1c8: 00 41 sbci r16, 0x10 ; 16
1ca: 22 14 cp r2, r2
1cc: 08 00 .word 0x0008 ; ????
1ce: 02 01 movw r0, r4
1d0: 59 09 sbc r21, r9
1d2: 06 00 .word 0x0006 ; ????
1d4: 3e 41 sbci r19, 0x1E ; 30
1d6: 5d 59 subi r21, 0x9D ; 157
1d8: 4e 00 .word 0x004e ; ????
1da: 7c 12 cpse r7, r28
1dc: 11 12 cpse r1, r17
1de: 7c 00 .word 0x007c ; ????
1e0: 7f 49 sbci r23, 0x9F ; 159
1e2: 49 49 sbci r20, 0x99 ; 153
1e4: 36 00 .word 0x0036 ; ????
1e6: 3e 41 sbci r19, 0x1E ; 30
1e8: 41 41 sbci r20, 0x11 ; 17
1ea: 22 00 .word 0x0022 ; ????
1ec: 7f 41 sbci r23, 0x1F ; 31
1ee: 41 41 sbci r20, 0x11 ; 17
1f0: 3e 00 .word 0x003e ; ????
1f2: 7f 49 sbci r23, 0x9F ; 159
1f4: 49 49 sbci r20, 0x99 ; 153
1f6: 41 00 .word 0x0041 ; ????
1f8: 7f 09 sbc r23, r15
1fa: 09 09 sbc r16, r9
1fc: 01 00 .word 0x0001 ; ????
1fe: 3e 41 sbci r19, 0x1E ; 30
200: 41 51 subi r20, 0x11 ; 17
202: 73 00 .word 0x0073 ; ????
204: 7f 08 sbc r7, r15
206: 08 08 sbc r0, r8
208: 7f 00 .word 0x007f ; ????
20a: 00 41 sbci r16, 0x10 ; 16
20c: 7f 41 sbci r23, 0x1F ; 31
20e: 00 00 nop
210: 20 40 sbci r18, 0x00 ; 0
212: 41 3f cpi r20, 0xF1 ; 241
214: 01 00 .word 0x0001 ; ????
216: 7f 08 sbc r7, r15
218: 14 22 and r1, r20
21a: 41 00 .word 0x0041 ; ????
21c: 7f 40 sbci r23, 0x0F ; 15
21e: 40 40 sbci r20, 0x00 ; 0
220: 40 00 .word 0x0040 ; ????
222: 7f 02 muls r23, r31
224: 1c 02 muls r17, r28
226: 7f 00 .word 0x007f ; ????
228: 7f 04 cpc r7, r15
22a: 08 10 cpse r0, r8
22c: 7f 00 .word 0x007f ; ????
22e: 3e 41 sbci r19, 0x1E ; 30
230: 41 41 sbci r20, 0x11 ; 17
232: 3e 00 .word 0x003e ; ????
234: 7f 09 sbc r23, r15
236: 09 09 sbc r16, r9
238: 06 00 .word 0x0006 ; ????
23a: 3e 41 sbci r19, 0x1E ; 30
23c: 51 21 and r21, r1
23e: 5e 00 .word 0x005e ; ????
240: 7f 09 sbc r23, r15
242: 19 29 or r17, r9
244: 46 00 .word 0x0046 ; ????
246: 26 49 sbci r18, 0x96 ; 150
248: 49 49 sbci r20, 0x99 ; 153
24a: 32 00 .word 0x0032 ; ????
24c: 03 01 movw r0, r6
24e: 7f 01 movw r14, r30
250: 03 00 .word 0x0003 ; ????
252: 3f 40 sbci r19, 0x0F ; 15
254: 40 40 sbci r20, 0x00 ; 0
256: 3f 00 .word 0x003f ; ????
258: 1f 20 and r1, r15
25a: 40 20 and r4, r0
25c: 1f 00 .word 0x001f ; ????
25e: 3f 40 sbci r19, 0x0F ; 15
260: 38 40 sbci r19, 0x08 ; 8
262: 3f 00 .word 0x003f ; ????
264: 63 14 cp r6, r3
266: 08 14 cp r0, r8
268: 63 00 .word 0x0063 ; ????
26a: 03 04 cpc r0, r3
26c: 78 04 cpc r7, r8
26e: 03 00 .word 0x0003 ; ????
270: 61 59 subi r22, 0x91 ; 145
272: 49 4d sbci r20, 0xD9 ; 217
274: 43 00 .word 0x0043 ; ????
276: 00 7f andi r16, 0xF0 ; 240
278: 41 41 sbci r20, 0x11 ; 17
27a: 41 00 .word 0x0041 ; ????
27c: 02 04 cpc r0, r2
27e: 08 10 cpse r0, r8
280: 20 00 .word 0x0020 ; ????
282: 00 41 sbci r16, 0x10 ; 16
284: 41 41 sbci r20, 0x11 ; 17
286: 7f 00 .word 0x007f ; ????
288: 04 02 muls r16, r20
28a: 01 02 muls r16, r17
28c: 04 00 .word 0x0004 ; ????
28e: 40 40 sbci r20, 0x00 ; 0
290: 40 40 sbci r20, 0x00 ; 0
292: 40 00 .word 0x0040 ; ????
294: 00 03 mulsu r16, r16
296: 07 08 sbc r0, r7
298: 00 00 nop
29a: 20 54 subi r18, 0x40 ; 64
29c: 54 78 andi r21, 0x84 ; 132
29e: 40 00 .word 0x0040 ; ????
2a0: 7f 28 or r7, r15
2a2: 44 44 sbci r20, 0x44 ; 68
2a4: 38 00 .word 0x0038 ; ????
2a6: 38 44 sbci r19, 0x48 ; 72
2a8: 44 44 sbci r20, 0x44 ; 68
2aa: 28 00 .word 0x0028 ; ????
2ac: 38 44 sbci r19, 0x48 ; 72
2ae: 44 28 or r4, r4
2b0: 7f 00 .word 0x007f ; ????
2b2: 38 54 subi r19, 0x48 ; 72
2b4: 54 54 subi r21, 0x44 ; 68
2b6: 18 00 .word 0x0018 ; ????
2b8: 00 08 sbc r0, r0
2ba: 7e 09 sbc r23, r14
2bc: 02 00 .word 0x0002 ; ????
2be: 18 a4 ldd r1, Y+40 ; 0x28
2c0: a4 9c mul r10, r4
2c2: 78 00 .word 0x0078 ; ????
2c4: 7f 08 sbc r7, r15
2c6: 04 04 cpc r0, r4
2c8: 78 00 .word 0x0078 ; ????
2ca: 00 44 sbci r16, 0x40 ; 64
2cc: 7d 40 sbci r23, 0x0D ; 13
2ce: 00 00 nop
2d0: 20 40 sbci r18, 0x00 ; 0
2d2: 40 3d cpi r20, 0xD0 ; 208
2d4: 00 00 nop
2d6: 7f 10 cpse r7, r15
2d8: 28 44 sbci r18, 0x48 ; 72
2da: 00 00 nop
2dc: 00 41 sbci r16, 0x10 ; 16
2de: 7f 40 sbci r23, 0x0F ; 15
2e0: 00 00 nop
2e2: 7c 04 cpc r7, r12
2e4: 78 04 cpc r7, r8
2e6: 78 00 .word 0x0078 ; ????
2e8: 7c 08 sbc r7, r12
2ea: 04 04 cpc r0, r4
2ec: 78 00 .word 0x0078 ; ????
2ee: 38 44 sbci r19, 0x48 ; 72
2f0: 44 44 sbci r20, 0x44 ; 68
2f2: 38 00 .word 0x0038 ; ????
2f4: fc 18 sub r15, r12
2f6: 24 24 eor r2, r4
2f8: 18 00 .word 0x0018 ; ????
2fa: 18 24 eor r1, r8
2fc: 24 18 sub r2, r4
2fe: fc 00 .word 0x00fc ; ????
300: 7c 08 sbc r7, r12
302: 04 04 cpc r0, r4
304: 08 00 .word 0x0008 ; ????
306: 48 54 subi r20, 0x48 ; 72
308: 54 54 subi r21, 0x44 ; 68
30a: 24 00 .word 0x0024 ; ????
30c: 04 04 cpc r0, r4
30e: 3f 44 sbci r19, 0x4F ; 79
310: 24 00 .word 0x0024 ; ????
312: 3c 40 sbci r19, 0x0C ; 12
314: 40 20 and r4, r0
316: 7c 00 .word 0x007c ; ????
318: 1c 20 and r1, r12
31a: 40 20 and r4, r0
31c: 1c 00 .word 0x001c ; ????
31e: 3c 40 sbci r19, 0x0C ; 12
320: 30 40 sbci r19, 0x00 ; 0
322: 3c 00 .word 0x003c ; ????
324: 44 28 or r4, r4
326: 10 28 or r1, r0
328: 44 00 .word 0x0044 ; ????
32a: 4c 90 ld r4, X
32c: 90 90 7c 00 lds r9, 0x007C
330: 44 64 ori r20, 0x44 ; 68
332: 54 4c sbci r21, 0xC4 ; 196
334: 44 00 .word 0x0044 ; ????
336: 00 08 sbc r0, r0
338: 36 41 sbci r19, 0x16 ; 22
33a: 00 00 nop
33c: 00 00 nop
33e: 77 00 .word 0x0077 ; ????
340: 00 00 nop
342: 00 41 sbci r16, 0x10 ; 16
344: 36 08 sbc r3, r6
346: 00 00 nop
348: 02 01 movw r0, r4
34a: 02 04 cpc r0, r2
34c: 02 00 .word 0x0002 ; ????
34e: 3c 26 eor r3, r28
350: 23 26 eor r2, r19
352: 3c 00 .word 0x003c ; ????
354: 1e a1 ldd r17, Y+38 ; 0x26
356: a1 61 ori r26, 0x11 ; 17
358: 12 00 .word 0x0012 ; ????
35a: 3a 40 sbci r19, 0x0A ; 10
35c: 40 20 and r4, r0
35e: 7a 00 .word 0x007a ; ????
360: 38 54 subi r19, 0x48 ; 72
362: 54 55 subi r21, 0x54 ; 84
364: 59 00 .word 0x0059 ; ????
366: 21 55 subi r18, 0x51 ; 81
368: 55 79 andi r21, 0x95 ; 149
36a: 41 00 .word 0x0041 ; ????
36c: 21 54 subi r18, 0x41 ; 65
36e: 54 78 andi r21, 0x84 ; 132
370: 41 00 .word 0x0041 ; ????
372: 21 55 subi r18, 0x51 ; 81
374: 54 78 andi r21, 0x84 ; 132
376: 40 00 .word 0x0040 ; ????
378: 20 54 subi r18, 0x40 ; 64
37a: 55 79 andi r21, 0x95 ; 149
37c: 40 00 .word 0x0040 ; ????
37e: 0c 1e adc r0, r28
380: 52 72 andi r21, 0x22 ; 34
382: 12 00 .word 0x0012 ; ????
384: 39 55 subi r19, 0x59 ; 89
386: 55 55 subi r21, 0x55 ; 85
388: 59 00 .word 0x0059 ; ????
38a: 39 54 subi r19, 0x49 ; 73
38c: 54 54 subi r21, 0x44 ; 68
38e: 59 00 .word 0x0059 ; ????
390: 39 55 subi r19, 0x59 ; 89
392: 54 54 subi r21, 0x44 ; 68
394: 58 00 .word 0x0058 ; ????
396: 00 00 nop
398: 45 7c andi r20, 0xC5 ; 197
39a: 41 00 .word 0x0041 ; ????
39c: 00 02 muls r16, r16
39e: 45 7d andi r20, 0xD5 ; 213
3a0: 42 00 .word 0x0042 ; ????
3a2: 00 01 movw r0, r0
3a4: 45 7c andi r20, 0xC5 ; 197
3a6: 40 00 .word 0x0040 ; ????
3a8: 79 14 cp r7, r9
3aa: 12 14 cp r1, r2
3ac: 79 00 .word 0x0079 ; ????
3ae: f0 28 or r15, r0
3b0: 25 28 or r2, r5
3b2: f0 00 .word 0x00f0 ; ????
3b4: 7c 54 subi r23, 0x4C ; 76
3b6: 55 45 sbci r21, 0x55 ; 85
3b8: 00 00 nop
3ba: 20 54 subi r18, 0x40 ; 64
3bc: 54 7c andi r21, 0xC4 ; 196
3be: 54 44 sbci r21, 0x44 ; 68
3c0: 7c 0a sbc r7, r28
3c2: 09 7f andi r16, 0xF9 ; 249
3c4: 49 41 sbci r20, 0x19 ; 25
3c6: 32 49 sbci r19, 0x92 ; 146
3c8: 49 49 sbci r20, 0x99 ; 153
3ca: 32 00 .word 0x0032 ; ????
3cc: 32 48 sbci r19, 0x82 ; 130
3ce: 48 48 sbci r20, 0x88 ; 136
3d0: 32 00 .word 0x0032 ; ????
3d2: 32 4a sbci r19, 0xA2 ; 162
3d4: 48 48 sbci r20, 0x88 ; 136
3d6: 30 00 .word 0x0030 ; ????
3d8: 3a 41 sbci r19, 0x1A ; 26
3da: 41 21 and r20, r1
3dc: 7a 00 .word 0x007a ; ????
3de: 3a 42 sbci r19, 0x2A ; 42
3e0: 40 20 and r4, r0
3e2: 78 00 .word 0x0078 ; ????
3e4: 00 9d mul r16, r0
3e6: a0 a0 ldd r10, Z+32 ; 0x20
3e8: 7d 00 .word 0x007d ; ????
3ea: 39 44 sbci r19, 0x49 ; 73
3ec: 44 44 sbci r20, 0x44 ; 68
3ee: 39 00 .word 0x0039 ; ????
3f0: 3d 40 sbci r19, 0x0D ; 13
3f2: 40 40 sbci r20, 0x00 ; 0
3f4: 3d 00 .word 0x003d ; ????
3f6: 3c 24 eor r3, r12
3f8: ff 24 eor r15, r15
3fa: 24 00 .word 0x0024 ; ????
3fc: 48 7e andi r20, 0xE8 ; 232
3fe: 49 43 sbci r20, 0x39 ; 57
400: 66 00 .word 0x0066 ; ????
402: 2b 2f mov r18, r27
404: fc 2f mov r31, r28
406: 2b 00 .word 0x002b ; ????
408: ff 09 sbc r31, r15
40a: 29 f6 brne .-118 ; 0x396 <__ctors_end+0x342>
40c: 20 00 .word 0x0020 ; ????
40e: c0 88 ldd r12, Z+16 ; 0x10
410: 7e 09 sbc r23, r14
412: 03 00 .word 0x0003 ; ????
414: 20 54 subi r18, 0x40 ; 64
416: 54 79 andi r21, 0x94 ; 148
418: 41 00 .word 0x0041 ; ????
41a: 00 00 nop
41c: 44 7d andi r20, 0xD4 ; 212
41e: 41 00 .word 0x0041 ; ????
420: 30 48 sbci r19, 0x80 ; 128
422: 48 4a sbci r20, 0xA8 ; 168
424: 32 00 .word 0x0032 ; ????
426: 38 40 sbci r19, 0x08 ; 8
428: 40 22 and r4, r16
42a: 7a 00 .word 0x007a ; ????
42c: 00 7a andi r16, 0xA0 ; 160
42e: 0a 0a sbc r0, r26
430: 72 00 .word 0x0072 ; ????
432: 7d 0d add r23, r13
434: 19 31 cpi r17, 0x19 ; 25
436: 7d 00 .word 0x007d ; ????
438: 26 29 or r18, r6
43a: 29 2f mov r18, r25
43c: 28 00 .word 0x0028 ; ????
43e: 26 29 or r18, r6
440: 29 29 or r18, r9
442: 26 00 .word 0x0026 ; ????
444: 30 48 sbci r19, 0x80 ; 128
446: 4d 40 sbci r20, 0x0D ; 13
448: 20 00 .word 0x0020 ; ????
44a: 38 08 sbc r3, r8
44c: 08 08 sbc r0, r8
44e: 08 00 .word 0x0008 ; ????
450: 08 08 sbc r0, r8
452: 08 08 sbc r0, r8
454: 38 00 .word 0x0038 ; ????
456: 2f 10 cpse r2, r15
458: c8 ac ldd r12, Y+56 ; 0x38
45a: ba 00 .word 0x00ba ; ????
45c: 2f 10 cpse r2, r15
45e: 28 34 cpi r18, 0x48 ; 72
460: fa 00 .word 0x00fa ; ????
462: 00 00 nop
464: 7b 00 .word 0x007b ; ????
466: 00 00 nop
468: 08 14 cp r0, r8
46a: 2a 14 cp r2, r10
46c: 22 00 .word 0x0022 ; ????
46e: 22 14 cp r2, r2
470: 2a 14 cp r2, r10
472: 08 00 .word 0x0008 ; ????
474: aa 00 .word 0x00aa ; ????
476: 55 00 .word 0x0055 ; ????
478: aa 00 .word 0x00aa ; ????
47a: aa 55 subi r26, 0x5A ; 90
47c: aa 55 subi r26, 0x5A ; 90
47e: aa 55 subi r26, 0x5A ; 90
480: 55 aa std Z+53, r5 ; 0x35
482: 55 aa std Z+53, r5 ; 0x35
484: 55 aa std Z+53, r5 ; 0x35
486: 00 00 nop
488: 00 ff sbrs r16, 0
48a: 00 00 nop
48c: 10 10 cpse r1, r0
48e: 10 ff sbrs r17, 0
490: 00 00 nop
492: 14 14 cp r1, r4
494: 14 ff sbrs r17, 4
496: 00 00 nop
498: 10 10 cpse r1, r0
49a: ff 00 .word 0x00ff ; ????
49c: ff 00 .word 0x00ff ; ????
49e: 10 10 cpse r1, r0
4a0: f0 10 cpse r15, r0
4a2: f0 00 .word 0x00f0 ; ????
4a4: 14 14 cp r1, r4
4a6: 14 fc sbrc r1, 4
4a8: 00 00 nop
4aa: 14 14 cp r1, r4
4ac: f7 00 .word 0x00f7 ; ????
4ae: ff 00 .word 0x00ff ; ????
4b0: 00 00 nop
4b2: ff 00 .word 0x00ff ; ????
4b4: ff 00 .word 0x00ff ; ????
4b6: 14 14 cp r1, r4
4b8: f4 04 cpc r15, r4
4ba: fc 00 .word 0x00fc ; ????
4bc: 14 14 cp r1, r4
4be: 17 10 cpse r1, r7
4c0: 1f 00 .word 0x001f ; ????
4c2: 10 10 cpse r1, r0
4c4: 1f 10 cpse r1, r15
4c6: 1f 00 .word 0x001f ; ????
4c8: 14 14 cp r1, r4
4ca: 14 1f adc r17, r20
4cc: 00 00 nop
4ce: 10 10 cpse r1, r0
4d0: 10 f0 brcs .+4 ; 0x4d6 <__ctors_end+0x482>
4d2: 00 00 nop
4d4: 00 00 nop
4d6: 00 1f adc r16, r16
4d8: 10 10 cpse r1, r0
4da: 10 10 cpse r1, r0
4dc: 10 1f adc r17, r16
4de: 10 10 cpse r1, r0
4e0: 10 10 cpse r1, r0
4e2: 10 f0 brcs .+4 ; 0x4e8 <__ctors_end+0x494>
4e4: 10 10 cpse r1, r0
4e6: 00 00 nop
4e8: 00 ff sbrs r16, 0
4ea: 10 10 cpse r1, r0
4ec: 10 10 cpse r1, r0
4ee: 10 10 cpse r1, r0
4f0: 10 10 cpse r1, r0
4f2: 10 10 cpse r1, r0
4f4: 10 ff sbrs r17, 0
4f6: 10 10 cpse r1, r0
4f8: 00 00 nop
4fa: 00 ff sbrs r16, 0
4fc: 14 14 cp r1, r4
4fe: 00 00 nop
500: ff 00 .word 0x00ff ; ????
502: ff 10 cpse r15, r15
504: 00 00 nop
506: 1f 10 cpse r1, r15
508: 17 14 cp r1, r7
50a: 00 00 nop
50c: fc 04 cpc r15, r12
50e: f4 14 cp r15, r4
510: 14 14 cp r1, r4
512: 17 10 cpse r1, r7
514: 17 14 cp r1, r7
516: 14 14 cp r1, r4
518: f4 04 cpc r15, r4
51a: f4 14 cp r15, r4
51c: 00 00 nop
51e: ff 00 .word 0x00ff ; ????
520: f7 14 cp r15, r7
522: 14 14 cp r1, r4
524: 14 14 cp r1, r4
526: 14 14 cp r1, r4
528: 14 14 cp r1, r4
52a: f7 00 .word 0x00f7 ; ????
52c: f7 14 cp r15, r7
52e: 14 14 cp r1, r4
530: 14 17 cp r17, r20
532: 14 14 cp r1, r4
534: 10 10 cpse r1, r0
536: 1f 10 cpse r1, r15
538: 1f 10 cpse r1, r15
53a: 14 14 cp r1, r4
53c: 14 f4 brge .+4 ; 0x542 <__ctors_end+0x4ee>
53e: 14 14 cp r1, r4
540: 10 10 cpse r1, r0
542: f0 10 cpse r15, r0
544: f0 10 cpse r15, r0
546: 00 00 nop
548: 1f 10 cpse r1, r15
54a: 1f 10 cpse r1, r15
54c: 00 00 nop
54e: 00 1f adc r16, r16
550: 14 14 cp r1, r4
552: 00 00 nop
554: 00 fc sbrc r0, 0
556: 14 14 cp r1, r4
558: 00 00 nop
55a: f0 10 cpse r15, r0
55c: f0 10 cpse r15, r0
55e: 10 10 cpse r1, r0
560: ff 10 cpse r15, r15
562: ff 10 cpse r15, r15
564: 14 14 cp r1, r4
566: 14 ff sbrs r17, 4
568: 14 14 cp r1, r4
56a: 10 10 cpse r1, r0
56c: 10 1f adc r17, r16
56e: 00 00 nop
570: 00 00 nop
572: 00 f0 brcs .+0 ; 0x574 <__ctors_end+0x520>
574: 10 10 cpse r1, r0
576: ff ff .word 0xffff ; ????
578: ff ff .word 0xffff ; ????
57a: ff ff .word 0xffff ; ????
57c: f0 f0 brcs .+60 ; 0x5ba <__ctors_end+0x566>
57e: f0 f0 brcs .+60 ; 0x5bc <__ctors_end+0x568>
580: f0 f0 brcs .+60 ; 0x5be <__ctors_end+0x56a>
582: ff ff .word 0xffff ; ????
584: ff 00 .word 0x00ff ; ????
586: 00 00 nop
588: 00 00 nop
58a: 00 ff sbrs r16, 0
58c: ff ff .word 0xffff ; ????
58e: 0f 0f add r16, r31
590: 0f 0f add r16, r31
592: 0f 0f add r16, r31
594: 38 44 sbci r19, 0x48 ; 72
596: 44 38 cpi r20, 0x84 ; 132
598: 44 00 .word 0x0044 ; ????
59a: 7c 2a or r7, r28
59c: 2a 3e cpi r18, 0xEA ; 234
59e: 14 00 .word 0x0014 ; ????
5a0: 7e 02 muls r23, r30
5a2: 02 06 cpc r0, r18
5a4: 06 00 .word 0x0006 ; ????
5a6: 02 7e andi r16, 0xE2 ; 226
5a8: 02 7e andi r16, 0xE2 ; 226
5aa: 02 00 .word 0x0002 ; ????
5ac: 63 55 subi r22, 0x53 ; 83
5ae: 49 41 sbci r20, 0x19 ; 25
5b0: 63 00 .word 0x0063 ; ????
5b2: 38 44 sbci r19, 0x48 ; 72
5b4: 44 3c cpi r20, 0xC4 ; 196
5b6: 04 00 .word 0x0004 ; ????
5b8: 40 7e andi r20, 0xE0 ; 224
5ba: 20 1e adc r2, r16
5bc: 20 00 .word 0x0020 ; ????
5be: 06 02 muls r16, r22
5c0: 7e 02 muls r23, r30
5c2: 02 00 .word 0x0002 ; ????
5c4: 99 a5 ldd r25, Y+41 ; 0x29
5c6: e7 a5 ldd r30, Z+47 ; 0x2f
5c8: 99 00 .word 0x0099 ; ????
5ca: 1c 2a or r1, r28
5cc: 49 2a or r4, r25
5ce: 1c 00 .word 0x001c ; ????
5d0: 4c 72 andi r20, 0x2C ; 44
5d2: 01 72 andi r16, 0x21 ; 33
5d4: 4c 00 .word 0x004c ; ????
5d6: 30 4a sbci r19, 0xA0 ; 160
5d8: 4d 4d sbci r20, 0xDD ; 221
5da: 30 00 .word 0x0030 ; ????
5dc: 30 48 sbci r19, 0x80 ; 128
5de: 78 48 sbci r23, 0x88 ; 136
5e0: 30 00 .word 0x0030 ; ????
5e2: bc 62 ori r27, 0x2C ; 44
5e4: 5a 46 sbci r21, 0x6A ; 106
5e6: 3d 00 .word 0x003d ; ????
5e8: 3e 49 sbci r19, 0x9E ; 158
5ea: 49 49 sbci r20, 0x99 ; 153
5ec: 00 00 nop
5ee: 7e 01 movw r14, r28
5f0: 01 01 movw r0, r2
5f2: 7e 00 .word 0x007e ; ????
5f4: 2a 2a or r2, r26
5f6: 2a 2a or r2, r26
5f8: 2a 00 .word 0x002a ; ????
5fa: 44 44 sbci r20, 0x44 ; 68
5fc: 5f 44 sbci r21, 0x4F ; 79
5fe: 44 00 .word 0x0044 ; ????
600: 40 51 subi r20, 0x10 ; 16
602: 4a 44 sbci r20, 0x4A ; 74
604: 40 00 .word 0x0040 ; ????
606: 40 44 sbci r20, 0x40 ; 64
608: 4a 51 subi r20, 0x1A ; 26
60a: 40 00 .word 0x0040 ; ????
60c: 00 00 nop
60e: ff 01 movw r30, r30
610: 03 00 .word 0x0003 ; ????
612: e0 80 ld r14, Z
614: ff 00 .word 0x00ff ; ????
616: 00 00 nop
618: 08 08 sbc r0, r8
61a: 6b 6b ori r22, 0xBB ; 187
61c: 08 08 sbc r0, r8
61e: 36 12 cpse r3, r22
620: 36 24 eor r3, r6
622: 36 00 .word 0x0036 ; ????
624: 06 0f add r16, r22
626: 09 0f add r16, r25
628: 06 00 .word 0x0006 ; ????
62a: 00 00 nop
62c: 18 18 sub r1, r8
62e: 00 00 nop
630: 00 00 nop
632: 10 10 cpse r1, r0
634: 00 00 nop
636: 30 40 sbci r19, 0x00 ; 0
638: ff 01 movw r30, r30
63a: 01 00 .word 0x0001 ; ????
63c: 00 1f adc r16, r16
63e: 01 01 movw r0, r2
640: 1e 00 .word 0x001e ; ????
642: 00 19 sub r16, r0
644: 1d 17 cp r17, r29
646: 12 00 .word 0x0012 ; ????
648: 00 3c cpi r16, 0xC0 ; 192
64a: 3c 3c cpi r19, 0xCC ; 204
64c: 3c 00 .word 0x003c ; ????
64e: 00 00 nop
650: 00 00 nop
...
 
00000654 <__c.0>:
654: 20 20 20 20 20 20 00 .
 
0000065b <parameter>:
65b: 4e 69 63 6b 20 20 20 20 20 20 20 20 20 20 20 00 Nick .
66b: 52 6f 6c 6c 20 20 20 20 20 20 20 20 20 20 20 00 Roll .
67b: 47 61 73 20 20 20 20 20 20 20 20 20 20 20 20 00 Gas .
68b: 47 69 65 72 09 09 09 00 00 00 00 00 00 00 00 00 Gier............
69b: 50 6f 74 69 31 09 09 09 00 00 00 00 00 00 00 00 Poti1...........
6ab: 50 6f 74 69 32 09 09 09 00 00 00 00 00 00 00 00 Poti2...........
6bb: 50 6f 74 69 33 09 09 09 00 00 00 00 00 00 00 00 Poti3...........
6cb: 50 6f 74 69 34 09 09 09 00 00 00 00 00 00 00 00 Poti4...........
6db: 43 6f 6e 66 69 67 09 09 09 00 00 00 00 00 00 00 Config..........
6eb: 48 6f 65 68 65 5f 4d 69 6e 47 61 73 20 20 20 00 Hoehe_MinGas .
6fb: 4c 75 66 74 64 72 75 63 6b 5f 44 20 20 20 20 00 Luftdruck_D .
70b: 4d 61 78 48 6f 65 68 65 20 20 20 20 20 20 20 00 MaxHoehe .
71b: 48 6f 65 68 65 5f 50 20 20 20 20 20 20 20 20 00 Hoehe_P .
72b: 48 6f 65 68 65 5f 56 65 72 73 74 61 65 72 6b 00 Hoehe_Verstaerk.
73b: 48 6f 65 68 65 5f 41 43 43 5f 57 69 72 6b 2e 00 Hoehe_ACC_Wirk..
74b: 53 74 69 63 6b 5f 50 20 20 20 20 20 20 20 20 00 Stick_P .
75b: 53 74 69 63 6b 5f 44 20 20 20 20 20 20 20 20 00 Stick_D .
76b: 47 69 65 72 5f 50 20 20 20 20 20 20 20 20 20 00 Gier_P .
77b: 47 61 73 5f 4d 69 6e 20 20 20 20 20 20 20 20 00 Gas_Min .
78b: 47 61 73 5f 4d 61 78 20 20 20 20 20 20 20 20 00 Gas_Max .
79b: 47 79 72 6f 41 63 63 46 61 6b 74 6f 72 09 00 00 GyroAccFaktor...
7ab: 4b 6f 6d 70 61 73 73 57 69 72 6b 75 6e 67 20 00 KompassWirkung .
7bb: 47 79 72 6f 5f 50 20 09 09 00 00 00 00 00 00 00 Gyro_P .........
7cb: 47 79 72 6f 5f 49 09 09 09 00 00 00 00 00 00 00 Gyro_I..........
7db: 55 6e 74 65 72 73 70 61 6e 6e 75 6e 67 20 20 00 Unterspannung .
7eb: 4e 6f 74 47 61 73 09 09 09 00 00 00 00 00 00 00 NotGas..........
7fb: 4e 6f 74 47 61 73 5a 65 69 74 20 20 20 20 20 00 NotGasZeit .
80b: 55 66 6f 41 75 73 72 69 63 68 74 75 6e 67 20 00 UfoAusrichtung .
81b: 49 5f 46 61 6b 74 6f 72 20 20 20 20 20 20 20 00 I_Faktor .
82b: 55 73 65 72 50 61 72 61 6d 31 09 09 00 00 00 00 UserParam1......
83b: 55 73 65 72 50 61 72 61 6d 32 09 09 00 00 00 00 UserParam2......
84b: 55 73 65 72 50 61 72 61 6d 33 09 09 00 00 00 00 UserParam3......
85b: 55 73 65 72 50 61 72 61 6d 34 09 09 00 00 00 00 UserParam4......
86b: 53 65 72 76 6f 4e 69 63 6b 43 74 72 6c 09 00 00 ServoNickCtrl...
87b: 53 65 72 76 6f 4e 69 63 6b 43 6f 6d 70 09 00 00 ServoNickComp...
88b: 53 65 72 76 6f 4e 69 63 6b 4d 69 6e 09 00 00 00 ServoNickMin....
89b: 53 65 72 76 6f 4e 69 63 6b 4d 61 78 09 00 00 00 ServoNickMax....
8ab: 53 65 72 76 6f 4e 69 63 6b 52 65 66 72 73 68 00 ServoNickRefrsh.
8bb: 4c 6f 6f 70 47 61 73 4c 69 6d 69 74 09 00 00 00 LoopGasLimit....
8cb: 4c 6f 6f 70 54 68 72 65 73 68 6f 6c 64 09 00 00 LoopThreshold...
8db: 4c 6f 6f 70 48 79 73 74 65 72 65 73 65 09 00 00 LoopHysterese...
8eb: 41 63 68 73 4b 6f 70 70 6c 75 6e 67 09 00 00 00 AchsKopplung....
8fb: 41 63 68 73 47 65 67 65 6e 4b 6f 70 70 6c 2e 00 AchsGegenKoppl..
90b: 57 69 6e 6b 6c 55 6d 73 63 68 6c 4e 69 63 6b 00 WinklUmschlNick.
91b: 57 69 6e 6b 6c 55 6d 73 63 68 6c 52 6f 6c 6c 00 WinklUmschlRoll.
92b: 47 79 72 6f 41 63 63 41 62 67 6c 65 69 63 68 00 GyroAccAbgleich.
93b: 44 72 69 66 74 6b 6f 6d 70 09 09 00 00 00 00 00 Driftkomp.......
94b: 44 79 6e 61 6d 69 63 53 74 61 62 69 6c 69 74 00 DynamicStabilit.
95b: 55 73 65 72 50 61 72 61 6d 35 09 09 00 00 00 00 UserParam5......
96b: 55 73 65 72 50 61 72 61 6d 36 09 09 00 00 00 00 UserParam6......
97b: 55 73 65 72 50 61 72 61 6d 37 09 09 00 00 00 00 UserParam7......
98b: 55 73 65 72 50 61 72 61 6d 38 09 09 00 00 00 00 UserParam8......
99b: 4c 6f 6f 70 43 6f 6e 66 69 67 09 09 00 00 00 00 LoopConfig......
9ab: 53 65 72 76 6f 4e 69 63 6b 43 6f 6d 70 49 6e 00 ServoNickCompIn.
 
000009bb <bin_parameter>:
9bb: 4c 6f 6f 70 20 75 70 20 20 20 20 20 20 20 20 00 Loop up .
9cb: 4c 6f 6f 70 20 64 6f 77 6e 09 20 20 20 20 00 00 Loop down. ..
9db: 4c 6f 6f 70 20 6c 65 66 74 20 20 20 20 20 20 00 Loop left .
9eb: 4c 6f 6f 70 20 72 69 67 68 74 20 20 20 20 20 00 Loop right .
9fb: 48 f6 68 65 6e 72 65 67 6c 65 72 20 20 20 20 00 H.henregler .
a0b: 48 f6 68 65 6e 73 63 68 61 6c 74 65 72 20 20 00 H.henschalter .
a1b: 48 65 61 64 68 6f 6c 64 09 09 00 00 00 00 00 00 Headhold........
a2b: 4b 6f 6d 70 61 73 73 09 09 00 00 00 00 00 00 00 Kompass.........
a3b: 4b 6f 6d 70 61 73 73 46 69 78 09 09 00 00 00 00 KompassFix......
a4b: 47 50 53 09 09 09 00 00 00 00 00 00 00 00 00 00 GPS.............
a5b: 41 63 68 73 65 6e 6b 6f 70 70 6c 75 6e 67 20 00 Achsenkopplung .
a6b: 44 72 65 68 72 61 74 65 09 09 00 00 00 00 00 00 Drehrate........
 
00000a7b <p_limits>:
a7b: 01 08 02 01 08 02 01 08 02 01 08 02 01 08 02 01 ................
a8b: 08 02 01 08 02 01 08 02 00 00 00 00 ff 04 00 ff ................
a9b: 04 00 ff 04 00 ff 04 00 32 04 00 ff 04 00 06 03 ........2.......
aab: 00 40 03 00 14 03 00 20 08 21 fa 08 00 32 08 00 .@..... .!...2..
abb: ff 08 00 00 05 00 00 05 00 fa 08 00 fa 08 00 fa ................
acb: 08 00 01 00 00 ff 05 00 ff 09 00 ff 09 00 ff 09 ................
adb: 00 ff 09 00 ff 07 00 fa 07 00 fa 07 00 fa 07 00 ................
aeb: 19 07 00 ff 06 00 fa 06 00 fa 06 00 ff 0a 00 ff ................
afb: 0a 00 fa 06 00 fa 06 00 fa 05 00 fa 05 00 ff 05 ................
b0b: 00 ff 09 00 ff 09 00 ff 09 00 ff 09 00 00 01 00 ................
b1b: 01 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
...
 
00000b42 <p_menu_number>:
b42: 02 02 02 02 02 02 02 02 00 04 04 04 04 04 04 03 ................
b52: 03 03 08 08 08 08 05 05 08 08 08 00 05 09 09 09 ................
b62: 09 07 07 07 07 07 07 06 06 06 0a 0a 06 06 05 05 ................
b72: 05 09 09 09 09 00 07 0b 0b 0b 0b 0c 0c 0c 0c 0c ................
b82: 0c 0c 0c ...
 
00000b85 <p_menus>:
b85: 43 6f 6e 66 69 67 20 20 20 20 00 43 68 61 6e 6e Config .Chann
b95: 65 6c 73 20 20 00 53 74 69 63 6b 20 20 20 20 20 els .Stick
ba5: 00 48 6f 65 68 65 20 20 20 20 20 00 47 79 72 6f .Hoehe .Gyro
bb5: 20 20 20 20 20 20 00 4c 6f 6f 70 69 6e 67 20 20 .Looping
bc5: 20 00 43 61 6d 65 72 61 20 20 20 20 00 53 6f 6e .Camera .Son
bd5: 73 74 69 67 65 73 20 00 55 73 65 72 20 20 20 20 stiges .User
be5: 20 20 00 43 6f 75 70 6c 69 6e 67 20 20 00 43 6f .Coupling .Co
bf5: 6e 66 69 67 28 32 29 20 00 4c 6f 6f 70 69 6e 67 nfig(2) .Looping
c05: 73 65 74 00 set.
 
00000c09 <__c.11>:
c09: 2d 00 -.
 
00000c0b <__c.12>:
c0b: 2d 00 -.
 
00000c0d <__c.13>:
c0d: 2d 00 -.
 
00000c0f <__c.0>:
c0f: 4c 61 64 65 20 50 61 72 61 6d 65 74 65 72 0d 0a Lade Parameter..
...
 
00000c20 <__c.1>:
c20: 20 31 3a 0d 0a 00 1:...
 
00000c26 <__c.2>:
c26: 20 32 3a 0d 0a 00 2:...
 
00000c2c <__c.3>:
c2c: 20 33 3a 0d 0a 00 3:...
 
00000c32 <__c.4>:
c32: 20 34 3a 0d 0a 00 4:...
 
00000c38 <__c.5>:
c38: 20 35 3a 0d 0a 00 5:...
 
00000c3e <__c.6>:
c3e: 54 69 6d 65 6f 75 74 00 Timeout.
 
00000c46 <__c.7>:
c46: 50 61 72 61 6d 65 74 65 72 20 73 70 65 69 63 68 Parameter speich
c56: 65 72 6e 3f 0d 0a 20 20 6a 61 0d 0a 20 20 6e 65 ern?.. ja.. ne
c66: 69 6e 00 in.
 
00000c69 <__c.8>:
c69: 0d 0a 2d 2d 2d 3e 00 ..--->.
 
00000c70 <__c.9>:
c70: 0d 0a 50 61 72 61 6d 65 74 65 72 20 67 65 73 70 ..Parameter gesp
c80: 65 69 63 68 65 72 74 00 eichert.
 
00000c88 <__c.10>:
c88: 0d 0a 4e 69 63 68 74 20 67 65 73 70 65 69 63 68 ..Nicht gespeich
c98: 65 72 74 00 ert.
 
00000c9c <__c.4>:
c9c: 20 00 .
 
00000c9e <__c.5>:
c9e: 2a 00 *.
 
00000ca0 <__c.0>:
ca0: 48 61 75 70 74 6d 65 6e fc 28 42 45 54 41 20 56 Hauptmen.(BETA V
cb0: 30 2e 31 29 0d 0a 00 0.1)...
 
00000cb7 <__c.1>:
cb7: 0d 0a 44 69 73 70 6c 61 79 0d 0a 00 ..Display...
 
00000cc3 <__c.2>:
cc3: 50 61 72 61 6d 65 74 65 72 0d 0a 00 Parameter...
 
00000ccf <__c.3>:
ccf: 4d 6f 74 6f 72 74 65 73 74 00 Motortest.
 
00000cd9 <__c.0>:
cd9: 44 69 73 70 6c 61 79 00 Display.
 
00000ce1 <__c.1>:
ce1: 0d 0a 54 69 6d 65 6f 75 74 21 00 ..Timeout!.
 
00000cec <__c.0>:
cec: 54 61 73 74 65 20 64 72 fc 63 6b 65 6e 0d 0a 00 Taste dr.cken...
 
00000cfc <__init>:
cfc: 11 24 eor r1, r1
cfe: 1f be out 0x3f, r1 ; 63
d00: cf e5 ldi r28, 0x5F ; 95
d02: d8 e0 ldi r29, 0x08 ; 8
d04: de bf out 0x3e, r29 ; 62
d06: cd bf out 0x3d, r28 ; 61
 
00000d08 <__do_copy_data>:
d08: 10 e0 ldi r17, 0x00 ; 0
d0a: a0 e6 ldi r26, 0x60 ; 96
d0c: b0 e0 ldi r27, 0x00 ; 0
d0e: ec e6 ldi r30, 0x6C ; 108
d10: f6 e2 ldi r31, 0x26 ; 38
d12: 02 c0 rjmp .+4 ; 0xd18 <.do_copy_data_start>
 
00000d14 <.do_copy_data_loop>:
d14: 05 90 lpm r0, Z+
d16: 0d 92 st X+, r0
 
00000d18 <.do_copy_data_start>:
d18: a0 36 cpi r26, 0x60 ; 96
d1a: b1 07 cpc r27, r17
d1c: d9 f7 brne .-10 ; 0xd14 <.do_copy_data_loop>
 
00000d1e <__do_clear_bss>:
d1e: 15 e0 ldi r17, 0x05 ; 5
d20: a0 e6 ldi r26, 0x60 ; 96
d22: b0 e0 ldi r27, 0x00 ; 0
d24: 01 c0 rjmp .+2 ; 0xd28 <.do_clear_bss_start>
 
00000d26 <.do_clear_bss_loop>:
d26: 1d 92 st X+, r1
 
00000d28 <.do_clear_bss_start>:
d28: a7 38 cpi r26, 0x87 ; 135
d2a: b1 07 cpc r27, r17
d2c: e1 f7 brne .-8 ; 0xd26 <.do_clear_bss_loop>
d2e: 0c 94 9b 06 jmp 0xd36 <main>
 
00000d32 <__bad_interrupt>:
d32: 0c 94 00 00 jmp 0x0 <__vectors>
 
00000d36 <main>:
#include "timer.h"
 
 
int main (void)
{
d36: cf e5 ldi r28, 0x5F ; 95
d38: d8 e0 ldi r29, 0x08 ; 8
d3a: de bf out 0x3e, r29 ; 62
d3c: cd bf out 0x3d, r28 ; 61
PORTA = 0xFF; // unbenutzte Pins auf Pull-Up
d3e: 8f ef ldi r24, 0xFF ; 255
d40: 8b bb out 0x1b, r24 ; 27
PORTB = 0x43;
d42: 83 e4 ldi r24, 0x43 ; 67
d44: 88 bb out 0x18, r24 ; 24
PORTC = 0xFC;
d46: 8c ef ldi r24, 0xFC ; 252
d48: 85 bb out 0x15, r24 ; 21
PORTD = 0x7C;
d4a: 8c e7 ldi r24, 0x7C ; 124
d4c: 82 bb out 0x12, r24 ; 18
DDRC = 0x03; // Pins für Beleuchtung auf Ausgang
d4e: 83 e0 ldi r24, 0x03 ; 3
d50: 84 bb out 0x14, r24 ; 20
DDRD = 0x80;
d52: 80 e8 ldi r24, 0x80 ; 128
d54: 81 bb out 0x11, r24 ; 17
 
lcd_init();
d56: 0e 94 53 07 call 0xea6 <lcd_init>
RS232_init();
d5a: 0e 94 1a 0c call 0x1834 <RS232_init>
timer_init();
d5e: 0e 94 f4 06 call 0xde8 <timer_init>
sei();
d62: 78 94 sei
 
for (;;)
main_menu();
d64: 0e 94 c8 11 call 0x2390 <main_menu>
d68: fd cf rjmp .-6 ; 0xd64 <main+0x2e>
 
00000d6a <__vector_10>:
volatile uint8_t rs232_timer;
 
 
ISR(SIG_OUTPUT_COMPARE0) // Timer-Interrupt (100 Hz)
{
d6a: 1f 92 push r1
d6c: 0f 92 push r0
d6e: 0f b6 in r0, 0x3f ; 63
d70: 0f 92 push r0
d72: 11 24 eor r1, r1
d74: 8f 93 push r24
d76: 9f 93 push r25
if (counter > 0)
d78: 80 91 e4 04 lds r24, 0x04E4
d7c: 88 23 and r24, r24
d7e: 31 f0 breq .+12 ; 0xd8c <__vector_10+0x22>
counter --;
d80: 80 91 e4 04 lds r24, 0x04E4
d84: 81 50 subi r24, 0x01 ; 1
d86: 80 93 e4 04 sts 0x04E4, r24
d8a: 15 c0 rjmp .+42 ; 0xdb6 <__vector_10+0x4c>
else
{
counter = 10;
d8c: 8a e0 ldi r24, 0x0A ; 10
d8e: 80 93 e4 04 sts 0x04E4, r24
key = (~PINA >> 4) & 0x0F;
d92: 89 b3 in r24, 0x19 ; 25
d94: 99 27 eor r25, r25
d96: 80 95 com r24
d98: 90 95 com r25
d9a: 68 94 set
d9c: 13 f8 bld r1, 3
d9e: 95 95 asr r25
da0: 87 95 ror r24
da2: 16 94 lsr r1
da4: e1 f7 brne .-8 ; 0xd9e <__vector_10+0x34>
da6: 8f 70 andi r24, 0x0F ; 15
da8: 80 93 e6 04 sts 0x04E6, r24
counter2 ++;
dac: 80 91 69 05 lds r24, 0x0569
db0: 8f 5f subi r24, 0xFF ; 255
db2: 80 93 69 05 sts 0x0569, r24
}
if (timer > 0)
db6: 80 91 61 00 lds r24, 0x0061
dba: 88 23 and r24, r24
dbc: 29 f0 breq .+10 ; 0xdc8 <__vector_10+0x5e>
timer --;
dbe: 80 91 61 00 lds r24, 0x0061
dc2: 81 50 subi r24, 0x01 ; 1
dc4: 80 93 61 00 sts 0x0061, r24
if (rs232_timer > 0)
dc8: 80 91 e5 04 lds r24, 0x04E5
dcc: 88 23 and r24, r24
dce: 29 f0 breq .+10 ; 0xdda <__vector_10+0x70>
rs232_timer --;
dd0: 80 91 e5 04 lds r24, 0x04E5
dd4: 81 50 subi r24, 0x01 ; 1
dd6: 80 93 e5 04 sts 0x04E5, r24
dda: 9f 91 pop r25
ddc: 8f 91 pop r24
dde: 0f 90 pop r0
de0: 0f be out 0x3f, r0 ; 63
de2: 0f 90 pop r0
de4: 1f 90 pop r1
de6: 18 95 reti
 
00000de8 <timer_init>:
}
 
void timer_init (void)
{
TCCR0 = (1<<CS02)|(1<<CS00)|(1<<WGM01); // Prescaler 1024
de8: 8d e0 ldi r24, 0x0D ; 13
dea: 83 bf out 0x33, r24 ; 51
OCR0 = 72; // Interrupt 100Hz für 7,372800 MHz-Quarz
dec: 88 e4 ldi r24, 0x48 ; 72
dee: 8c bf out 0x3c, r24 ; 60
TIMSK |= (1<<OCIE0); // Interrupt freigeben für OCR
df0: 89 b7 in r24, 0x39 ; 57
df2: 82 60 ori r24, 0x02 ; 2
df4: 89 bf out 0x39, r24 ; 57
df6: 08 95 ret
 
00000df8 <send_byte>:
 
 
void send_byte (uint8_t data)
{
clr_cs();
df8: c4 98 cbi 0x18, 4 ; 24
SPDR = data;
dfa: 8f b9 out 0x0f, r24 ; 15
while(!(SPSR & (1<<SPIF)));
dfc: 77 9b sbis 0x0e, 7 ; 14
dfe: fe cf rjmp .-4 ; 0xdfc <send_byte+0x4>
SPSR = SPSR;
e00: 8e b1 in r24, 0x0e ; 14
e02: 8e b9 out 0x0e, r24 ; 14
set_cs();
e04: c4 9a sbi 0x18, 4 ; 24
e06: 08 95 ret
 
00000e08 <cls>:
}
 
void cls (void)
{
e08: 0f 93 push r16
e0a: 1f 93 push r17
e0c: cf 93 push r28
e0e: df 93 push r29
e10: 82 e6 ldi r24, 0x62 ; 98
e12: 90 e0 ldi r25, 0x00 ; 0
e14: fc 01 movw r30, r24
uint16_t i,j;
for (i=0;i<1024;i++)
display_buffer[i] = 0x00;
e16: 11 92 st Z+, r1
e18: 01 96 adiw r24, 0x01 ; 1
e1a: 24 e0 ldi r18, 0x04 ; 4
e1c: 81 36 cpi r24, 0x61 ; 97
e1e: 92 07 cpc r25, r18
e20: d1 f3 breq .-12 ; 0xe16 <cls+0xe>
e22: c8 f3 brcs .-14 ; 0xe16 <cls+0xe>
for (i=0;i<8;i++)
e24: 00 e0 ldi r16, 0x00 ; 0
e26: 10 e0 ldi r17, 0x00 ; 0
{
clr_A0();
e28: c3 98 cbi 0x18, 3 ; 24
send_byte(0xB0+i);
e2a: 80 2f mov r24, r16
e2c: 80 55 subi r24, 0x50 ; 80
e2e: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0x10);
e32: 80 e1 ldi r24, 0x10 ; 16
e34: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0x04);
e38: 84 e0 ldi r24, 0x04 ; 4
e3a: 0e 94 fc 06 call 0xdf8 <send_byte>
set_A0();
e3e: c3 9a sbi 0x18, 3 ; 24
e40: cf e7 ldi r28, 0x7F ; 127
e42: d0 e0 ldi r29, 0x00 ; 0
for (j=0;j<128;j++)
send_byte(0x00);
e44: 80 e0 ldi r24, 0x00 ; 0
e46: 0e 94 fc 06 call 0xdf8 <send_byte>
e4a: 21 97 sbiw r28, 0x01 ; 1
e4c: d7 ff sbrs r29, 7
e4e: fa cf rjmp .-12 ; 0xe44 <cls+0x3c>
e50: 0f 5f subi r16, 0xFF ; 255
e52: 1f 4f sbci r17, 0xFF ; 255
e54: 08 30 cpi r16, 0x08 ; 8
e56: 11 05 cpc r17, r1
e58: 38 f3 brcs .-50 ; 0xe28 <cls+0x20>
}
lcd_xpos = 0;
e5a: 10 92 6a 05 sts 0x056A, r1
lcd_ypos = 0;
e5e: 10 92 6b 05 sts 0x056B, r1
e62: df 91 pop r29
e64: cf 91 pop r28
e66: 1f 91 pop r17
e68: 0f 91 pop r16
e6a: 08 95 ret
 
00000e6c <lcd_cls>:
}
 
void lcd_cls (void)
{
cls();
e6c: 0e 94 04 07 call 0xe08 <cls>
e70: 08 95 ret
 
00000e72 <wait_1ms>:
__ticks = 1;
else if (__tmp > 65535)
__ticks = 0; /* i.e. 65536 */
else
__ticks = (uint16_t)__tmp;
e72: 83 e3 ldi r24, 0x33 ; 51
e74: 97 e0 ldi r25, 0x07 ; 7
e76: 01 97 sbiw r24, 0x01 ; 1
e78: f1 f7 brne .-4 ; 0xe76 <wait_1ms+0x4>
e7a: 08 95 ret
 
00000e7c <wait_ms>:
}
 
void wait_1ms(void)
{
_delay_ms (1.0);
}
 
void wait_ms (uint16_t time)
{
e7c: 0f 93 push r16
e7e: 1f 93 push r17
e80: cf 93 push r28
e82: df 93 push r29
e84: 8c 01 movw r16, r24
uint16_t i;
for (i=0; i<time; i++)
e86: c0 e0 ldi r28, 0x00 ; 0
e88: d0 e0 ldi r29, 0x00 ; 0
e8a: c8 17 cp r28, r24
e8c: d9 07 cpc r29, r25
e8e: 30 f4 brcc .+12 ; 0xe9c <wait_ms+0x20>
wait_1ms();
e90: 0e 94 39 07 call 0xe72 <wait_1ms>
e94: 21 96 adiw r28, 0x01 ; 1
e96: c0 17 cp r28, r16
e98: d1 07 cpc r29, r17
e9a: d0 f3 brcs .-12 ; 0xe90 <wait_ms+0x14>
e9c: df 91 pop r29
e9e: cf 91 pop r28
ea0: 1f 91 pop r17
ea2: 0f 91 pop r16
ea4: 08 95 ret
 
00000ea6 <lcd_init>:
}
 
void lcd_init (void)
{
lcd_xpos = 0;
ea6: 10 92 6a 05 sts 0x056A, r1
lcd_ypos = 0;
eaa: 10 92 6b 05 sts 0x056B, r1
DDRB = 0xFF;
eae: 8f ef ldi r24, 0xFF ; 255
eb0: 87 bb out 0x17, r24 ; 23
SPCR = (1<<SPE)|(1<<MSTR)|(1<<CPHA)|(1<<CPOL)|(1<<SPR1);
eb2: 8e e5 ldi r24, 0x5E ; 94
eb4: 8d b9 out 0x0d, r24 ; 13
set_cs();
eb6: c4 9a sbi 0x18, 4 ; 24
clr_reset();
eb8: c2 98 cbi 0x18, 2 ; 24
wait_ms(10);
eba: 8a e0 ldi r24, 0x0A ; 10
ebc: 90 e0 ldi r25, 0x00 ; 0
ebe: 0e 94 3e 07 call 0xe7c <wait_ms>
set_reset();
ec2: c2 9a sbi 0x18, 2 ; 24
clr_cs();
ec4: c4 98 cbi 0x18, 4 ; 24
clr_A0();
ec6: c3 98 cbi 0x18, 3 ; 24
send_byte(0x40);
ec8: 80 e4 ldi r24, 0x40 ; 64
eca: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0xA0); // A1
ece: 80 ea ldi r24, 0xA0 ; 160
ed0: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0xC8); // C0
ed4: 88 ec ldi r24, 0xC8 ; 200
ed6: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0xA6);
eda: 86 ea ldi r24, 0xA6 ; 166
edc: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0xA2);
ee0: 82 ea ldi r24, 0xA2 ; 162
ee2: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0x2F);
ee6: 8f e2 ldi r24, 0x2F ; 47
ee8: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0xF8);
eec: 88 ef ldi r24, 0xF8 ; 248
eee: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0x00);
ef2: 80 e0 ldi r24, 0x00 ; 0
ef4: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0x27);
ef8: 87 e2 ldi r24, 0x27 ; 39
efa: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0x81);
efe: 81 e8 ldi r24, 0x81 ; 129
f00: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0x16);
f04: 86 e1 ldi r24, 0x16 ; 22
f06: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0xAC);
f0a: 8c ea ldi r24, 0xAC ; 172
f0c: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0x00);
f10: 80 e0 ldi r24, 0x00 ; 0
f12: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0xAF);
f16: 8f ea ldi r24, 0xAF ; 175
f18: 0e 94 fc 06 call 0xdf8 <send_byte>
cls();
f1c: 0e 94 04 07 call 0xe08 <cls>
f20: 08 95 ret
 
00000f22 <set_adress>:
 
}
 
void set_adress (uint16_t adress, uint8_t data)
{
f22: ff 92 push r15
f24: 0f 93 push r16
f26: 1f 93 push r17
f28: 8c 01 movw r16, r24
f2a: f6 2e mov r15, r22
uint8_t page;
uint8_t column;
page = adress >> 7;
f2c: 88 0f add r24, r24
f2e: 89 2f mov r24, r25
f30: 88 1f adc r24, r24
f32: 99 0b sbc r25, r25
f34: 91 95 neg r25
clr_A0();
f36: c3 98 cbi 0x18, 3 ; 24
send_byte(0xB0 + page);
f38: 80 55 subi r24, 0x50 ; 80
f3a: 0e 94 fc 06 call 0xdf8 <send_byte>
column = (adress & 0x7F) + 4;
f3e: 10 2f mov r17, r16
f40: 1f 77 andi r17, 0x7F ; 127
f42: 1c 5f subi r17, 0xFC ; 252
send_byte(0x10 + (column >> 4));
f44: 81 2f mov r24, r17
f46: 82 95 swap r24
f48: 8f 70 andi r24, 0x0F ; 15
f4a: 80 5f subi r24, 0xF0 ; 240
f4c: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(column & 0x0F);
f50: 81 2f mov r24, r17
f52: 8f 70 andi r24, 0x0F ; 15
f54: 0e 94 fc 06 call 0xdf8 <send_byte>
set_A0();
f58: c3 9a sbi 0x18, 3 ; 24
send_byte(data);
f5a: 8f 2d mov r24, r15
f5c: 0e 94 fc 06 call 0xdf8 <send_byte>
f60: 1f 91 pop r17
f62: 0f 91 pop r16
f64: ff 90 pop r15
f66: 08 95 ret
 
00000f68 <scroll>:
}
 
void scroll (void)
{
f68: ef 92 push r14
f6a: ff 92 push r15
f6c: 0f 93 push r16
f6e: 1f 93 push r17
f70: cf 93 push r28
f72: df 93 push r29
uint16_t adress;
for (adress=0;adress<896;adress++)
f74: c0 e0 ldi r28, 0x00 ; 0
f76: d0 e0 ldi r29, 0x00 ; 0
f78: 32 ee ldi r19, 0xE2 ; 226
f7a: e3 2e mov r14, r19
f7c: 30 e0 ldi r19, 0x00 ; 0
f7e: f3 2e mov r15, r19
f80: 87 01 movw r16, r14
f82: 00 58 subi r16, 0x80 ; 128
f84: 10 40 sbci r17, 0x00 ; 0
{
display_buffer[adress] = display_buffer[adress+128];
f86: f7 01 movw r30, r14
f88: 81 91 ld r24, Z+
f8a: 7f 01 movw r14, r30
f8c: f8 01 movw r30, r16
f8e: 80 83 st Z, r24
set_adress(adress,display_buffer[adress]);
f90: 61 91 ld r22, Z+
f92: 8f 01 movw r16, r30
f94: ce 01 movw r24, r28
f96: 0e 94 91 07 call 0xf22 <set_adress>
f9a: 21 96 adiw r28, 0x01 ; 1
f9c: f3 e0 ldi r31, 0x03 ; 3
f9e: c0 38 cpi r28, 0x80 ; 128
fa0: df 07 cpc r29, r31
fa2: 88 f3 brcs .-30 ; 0xf86 <scroll+0x1e>
fa4: c0 e8 ldi r28, 0x80 ; 128
fa6: d3 e0 ldi r29, 0x03 ; 3
fa8: 02 ee ldi r16, 0xE2 ; 226
faa: 13 e0 ldi r17, 0x03 ; 3
}
for (adress=896;adress<1024;adress++)
{
display_buffer[adress] = 0;
fac: f8 01 movw r30, r16
fae: 11 92 st Z+, r1
fb0: 8f 01 movw r16, r30
set_adress(adress,0);
fb2: 60 e0 ldi r22, 0x00 ; 0
fb4: ce 01 movw r24, r28
fb6: 0e 94 91 07 call 0xf22 <set_adress>
fba: 21 96 adiw r28, 0x01 ; 1
fbc: f4 e0 ldi r31, 0x04 ; 4
fbe: c0 30 cpi r28, 0x00 ; 0
fc0: df 07 cpc r29, r31
fc2: a0 f3 brcs .-24 ; 0xfac <scroll+0x44>
fc4: df 91 pop r29
fc6: cf 91 pop r28
fc8: 1f 91 pop r17
fca: 0f 91 pop r16
fcc: ff 90 pop r15
fce: ef 90 pop r14
fd0: 08 95 ret
 
00000fd2 <put_char>:
}
}
 
//
// x,y = character-Pos. !
//
// mode: 0=Overwrite, 1 = OR, 2 = XOR, 3 = AND, 4 = Delete
void put_char (uint8_t x, uint8_t y, uint8_t c, uint8_t mode)
{
fd2: bf 92 push r11
fd4: cf 92 push r12
fd6: df 92 push r13
fd8: ef 92 push r14
fda: ff 92 push r15
fdc: 0f 93 push r16
fde: 1f 93 push r17
fe0: cf 93 push r28
fe2: df 93 push r29
fe4: 38 2f mov r19, r24
fe6: f4 2e mov r15, r20
fe8: b2 2e mov r11, r18
uint8_t ch;
uint8_t i;
uint16_t adress;
 
switch(c)
fea: 84 2f mov r24, r20
fec: 99 27 eor r25, r25
fee: 8f 3d cpi r24, 0xDF ; 223
ff0: 91 05 cpc r25, r1
ff2: 89 f1 breq .+98 ; 0x1056 <put_char+0x84>
ff4: 80 3e cpi r24, 0xE0 ; 224
ff6: 91 05 cpc r25, r1
ff8: 74 f4 brge .+28 ; 0x1016 <put_char+0x44>
ffa: 86 3d cpi r24, 0xD6 ; 214
ffc: 91 05 cpc r25, r1
ffe: 29 f1 breq .+74 ; 0x104a <put_char+0x78>
1000: 87 3d cpi r24, 0xD7 ; 215
1002: 91 05 cpc r25, r1
1004: 24 f4 brge .+8 ; 0x100e <put_char+0x3c>
1006: 84 3c cpi r24, 0xC4 ; 196
1008: 91 05 cpc r25, r1
100a: e1 f0 breq .+56 ; 0x1044 <put_char+0x72>
100c: 26 c0 rjmp .+76 ; 0x105a <put_char+0x88>
100e: 8c 3d cpi r24, 0xDC ; 220
1010: 91 05 cpc r25, r1
1012: f1 f0 breq .+60 ; 0x1050 <put_char+0x7e>
1014: 22 c0 rjmp .+68 ; 0x105a <put_char+0x88>
1016: 86 3f cpi r24, 0xF6 ; 246
1018: 91 05 cpc r25, r1
101a: 71 f0 breq .+28 ; 0x1038 <put_char+0x66>
101c: 87 3f cpi r24, 0xF7 ; 247
101e: 91 05 cpc r25, r1
1020: 24 f4 brge .+8 ; 0x102a <put_char+0x58>
1022: 84 3e cpi r24, 0xE4 ; 228
1024: 91 05 cpc r25, r1
1026: 29 f0 breq .+10 ; 0x1032 <put_char+0x60>
1028: 18 c0 rjmp .+48 ; 0x105a <put_char+0x88>
102a: 8c 3f cpi r24, 0xFC ; 252
102c: 91 05 cpc r25, r1
102e: 39 f0 breq .+14 ; 0x103e <put_char+0x6c>
1030: 14 c0 rjmp .+40 ; 0x105a <put_char+0x88>
{
case 'ä':
c = 0x84;
1032: 14 e8 ldi r17, 0x84 ; 132
1034: f1 2e mov r15, r17
break;
1036: 11 c0 rjmp .+34 ; 0x105a <put_char+0x88>
case 'ö':
c = 0x94;
1038: c4 e9 ldi r28, 0x94 ; 148
103a: fc 2e mov r15, r28
break;
103c: 0e c0 rjmp .+28 ; 0x105a <put_char+0x88>
case 'ü':
c = 0x81;
103e: b1 e8 ldi r27, 0x81 ; 129
1040: fb 2e mov r15, r27
break;
1042: 0b c0 rjmp .+22 ; 0x105a <put_char+0x88>
case 'Ä':
c = 0x8E;
1044: ae e8 ldi r26, 0x8E ; 142
1046: fa 2e mov r15, r26
break;
1048: 08 c0 rjmp .+16 ; 0x105a <put_char+0x88>
case 'Ö':
c = 0x99;
104a: f9 e9 ldi r31, 0x99 ; 153
104c: ff 2e mov r15, r31
break;
104e: 05 c0 rjmp .+10 ; 0x105a <put_char+0x88>
case 'Ü':
c = 0x9A;
1050: ea e9 ldi r30, 0x9A ; 154
1052: fe 2e mov r15, r30
break;
1054: 02 c0 rjmp .+4 ; 0x105a <put_char+0x88>
case 'ß':
c = 0xE1;
1056: 71 ee ldi r23, 0xE1 ; 225
1058: f7 2e mov r15, r23
break;
}
adress = y*128 + x*6;
105a: c6 2f mov r28, r22
105c: dd 27 eor r29, r29
105e: d6 95 lsr r29
1060: dc 2f mov r29, r28
1062: cc 27 eor r28, r28
1064: d7 95 ror r29
1066: c7 95 ror r28
1068: 86 e0 ldi r24, 0x06 ; 6
106a: 38 9f mul r19, r24
106c: c0 01 movw r24, r0
106e: 11 24 eor r1, r1
1070: c8 0f add r28, r24
1072: d9 1f adc r29, r25
adress &= 0x3FF;
1074: d3 70 andi r29, 0x03 ; 3
1076: 6e 01 movw r12, r28
1078: 00 e0 ldi r16, 0x00 ; 0
107a: 10 e0 ldi r17, 0x00 ; 0
107c: 45 e0 ldi r20, 0x05 ; 5
107e: e4 2e mov r14, r20
for (i=0;i<6;i++)
{
ch = pgm_read_byte (&f8x6[0][0] + i + c * 6);
1080: 86 e0 ldi r24, 0x06 ; 6
1082: f8 9e mul r15, r24
1084: f0 01 movw r30, r0
1086: 11 24 eor r1, r1
1088: e0 0f add r30, r16
108a: f1 1f adc r31, r17
108c: ec 5a subi r30, 0xAC ; 172
108e: ff 4f sbci r31, 0xFF ; 255
1090: 24 91 lpm r18, Z
switch (mode)
1092: 8b 2d mov r24, r11
1094: 99 27 eor r25, r25
1096: 82 30 cpi r24, 0x02 ; 2
1098: 91 05 cpc r25, r1
109a: e9 f0 breq .+58 ; 0x10d6 <put_char+0x104>
109c: 83 30 cpi r24, 0x03 ; 3
109e: 91 05 cpc r25, r1
10a0: 2c f4 brge .+10 ; 0x10ac <put_char+0xda>
10a2: 00 97 sbiw r24, 0x00 ; 0
10a4: 49 f0 breq .+18 ; 0x10b8 <put_char+0xe6>
10a6: 01 97 sbiw r24, 0x01 ; 1
10a8: 71 f0 breq .+28 ; 0x10c6 <put_char+0xf4>
10aa: 2c c0 rjmp .+88 ; 0x1104 <put_char+0x132>
10ac: 83 30 cpi r24, 0x03 ; 3
10ae: 91 05 cpc r25, r1
10b0: d1 f0 breq .+52 ; 0x10e6 <put_char+0x114>
10b2: 04 97 sbiw r24, 0x04 ; 4
10b4: f1 f0 breq .+60 ; 0x10f2 <put_char+0x120>
10b6: 26 c0 rjmp .+76 ; 0x1104 <put_char+0x132>
{
case 0:
display_buffer[adress+i] = ch;
10b8: fe 01 movw r30, r28
10ba: ee 59 subi r30, 0x9E ; 158
10bc: ff 4f sbci r31, 0xFF ; 255
10be: e0 0f add r30, r16
10c0: f1 1f adc r31, r17
10c2: 20 83 st Z, r18
break;
10c4: 1f c0 rjmp .+62 ; 0x1104 <put_char+0x132>
case 1:
display_buffer[adress+i] |= ch;
10c6: fe 01 movw r30, r28
10c8: ee 59 subi r30, 0x9E ; 158
10ca: ff 4f sbci r31, 0xFF ; 255
10cc: e0 0f add r30, r16
10ce: f1 1f adc r31, r17
10d0: 80 81 ld r24, Z
10d2: 82 2b or r24, r18
10d4: 16 c0 rjmp .+44 ; 0x1102 <put_char+0x130>
break;
case 2:
display_buffer[adress+i] ^= ch;
10d6: fe 01 movw r30, r28
10d8: ee 59 subi r30, 0x9E ; 158
10da: ff 4f sbci r31, 0xFF ; 255
10dc: e0 0f add r30, r16
10de: f1 1f adc r31, r17
10e0: 80 81 ld r24, Z
10e2: 82 27 eor r24, r18
10e4: 0e c0 rjmp .+28 ; 0x1102 <put_char+0x130>
break;
case 3:
display_buffer[adress+i] &= ch;
10e6: fe 01 movw r30, r28
10e8: ee 59 subi r30, 0x9E ; 158
10ea: ff 4f sbci r31, 0xFF ; 255
10ec: e0 0f add r30, r16
10ee: f1 1f adc r31, r17
10f0: 06 c0 rjmp .+12 ; 0x10fe <put_char+0x12c>
break;
case 4:
display_buffer[adress+i] &= ~ch;
10f2: fe 01 movw r30, r28
10f4: ee 59 subi r30, 0x9E ; 158
10f6: ff 4f sbci r31, 0xFF ; 255
10f8: e0 0f add r30, r16
10fa: f1 1f adc r31, r17
10fc: 20 95 com r18
10fe: 80 81 ld r24, Z
1100: 82 23 and r24, r18
1102: 80 83 st Z, r24
break;
}
set_adress(adress+i,display_buffer[adress+i]);
1104: fe 01 movw r30, r28
1106: ee 59 subi r30, 0x9E ; 158
1108: ff 4f sbci r31, 0xFF ; 255
110a: e0 0f add r30, r16
110c: f1 1f adc r31, r17
110e: 60 81 ld r22, Z
1110: c6 01 movw r24, r12
1112: 0e 94 91 07 call 0xf22 <set_adress>
1116: ea 94 dec r14
1118: 0f 5f subi r16, 0xFF ; 255
111a: 1f 4f sbci r17, 0xFF ; 255
111c: 08 94 sec
111e: c1 1c adc r12, r1
1120: d1 1c adc r13, r1
1122: e7 fe sbrs r14, 7
1124: ad cf rjmp .-166 ; 0x1080 <put_char+0xae>
1126: df 91 pop r29
1128: cf 91 pop r28
112a: 1f 91 pop r17
112c: 0f 91 pop r16
112e: ff 90 pop r15
1130: ef 90 pop r14
1132: df 90 pop r13
1134: cf 90 pop r12
1136: bf 90 pop r11
1138: 08 95 ret
 
0000113a <new_line>:
}
}
 
void new_line (void)
{
lcd_ypos++;
113a: 80 91 6b 05 lds r24, 0x056B
113e: 8f 5f subi r24, 0xFF ; 255
1140: 80 93 6b 05 sts 0x056B, r24
if (lcd_ypos > 7)
1144: 88 30 cpi r24, 0x08 ; 8
1146: 28 f0 brcs .+10 ; 0x1152 <new_line+0x18>
{
scroll();
1148: 0e 94 b4 07 call 0xf68 <scroll>
lcd_ypos = 7;
114c: 87 e0 ldi r24, 0x07 ; 7
114e: 80 93 6b 05 sts 0x056B, r24
1152: 08 95 ret
 
00001154 <lcd_printp>:
}
}
 
 
void lcd_printp (const char *text, uint8_t mode)
{
1154: 1f 93 push r17
1156: cf 93 push r28
1158: df 93 push r29
115a: ec 01 movw r28, r24
115c: 16 2f mov r17, r22
while (pgm_read_byte(text))
{
if (pgm_read_byte(text) > 0x1F)
{
put_char(lcd_xpos,lcd_ypos,pgm_read_byte(text++),mode);
lcd_xpos++;
if (lcd_xpos > 20)
{
lcd_xpos = 0;
new_line();
}
}
else
{
switch (pgm_read_byte(text))
{
case 0x0D:
lcd_xpos = 0;
break;
case 0x0A:
new_line();
break;
}
text++;
115e: fc 01 movw r30, r24
1160: 84 91 lpm r24, Z
1162: 88 23 and r24, r24
1164: 51 f1 breq .+84 ; 0x11ba <lcd_printp+0x66>
1166: fe 01 movw r30, r28
1168: 84 91 lpm r24, Z
116a: 80 32 cpi r24, 0x20 ; 32
116c: b0 f0 brcs .+44 ; 0x119a <lcd_printp+0x46>
116e: 21 96 adiw r28, 0x01 ; 1
1170: 84 91 lpm r24, Z
1172: 21 2f mov r18, r17
1174: 48 2f mov r20, r24
1176: 60 91 6b 05 lds r22, 0x056B
117a: 80 91 6a 05 lds r24, 0x056A
117e: 0e 94 e9 07 call 0xfd2 <put_char>
1182: 80 91 6a 05 lds r24, 0x056A
1186: 8f 5f subi r24, 0xFF ; 255
1188: 80 93 6a 05 sts 0x056A, r24
118c: 85 31 cpi r24, 0x15 ; 21
118e: 88 f0 brcs .+34 ; 0x11b2 <lcd_printp+0x5e>
1190: 10 92 6a 05 sts 0x056A, r1
1194: 0e 94 9d 08 call 0x113a <new_line>
1198: 0c c0 rjmp .+24 ; 0x11b2 <lcd_printp+0x5e>
119a: 99 27 eor r25, r25
119c: 8a 30 cpi r24, 0x0A ; 10
119e: 91 05 cpc r25, r1
11a0: 29 f0 breq .+10 ; 0x11ac <lcd_printp+0x58>
11a2: 0d 97 sbiw r24, 0x0d ; 13
11a4: 29 f4 brne .+10 ; 0x11b0 <lcd_printp+0x5c>
11a6: 10 92 6a 05 sts 0x056A, r1
11aa: 02 c0 rjmp .+4 ; 0x11b0 <lcd_printp+0x5c>
11ac: 0e 94 9d 08 call 0x113a <new_line>
11b0: 21 96 adiw r28, 0x01 ; 1
11b2: fe 01 movw r30, r28
11b4: 84 91 lpm r24, Z
11b6: 88 23 and r24, r24
11b8: b1 f6 brne .-84 ; 0x1166 <lcd_printp+0x12>
11ba: df 91 pop r29
11bc: cf 91 pop r28
11be: 1f 91 pop r17
11c0: 08 95 ret
 
000011c2 <lcd_print_atp>:
}
}
}
 
void lcd_print_atp (uint8_t x, uint8_t y, const char *text, uint8_t mode)
{
lcd_xpos = x;
11c2: 80 93 6a 05 sts 0x056A, r24
lcd_ypos = y;
11c6: 60 93 6b 05 sts 0x056B, r22
lcd_printp (text, mode);
11ca: 62 2f mov r22, r18
11cc: ca 01 movw r24, r20
11ce: 0e 94 aa 08 call 0x1154 <lcd_printp>
11d2: 08 95 ret
 
000011d4 <lcd_print>:
}
 
 
void lcd_print (uint8_t *text, uint8_t mode)
{
11d4: 1f 93 push r17
11d6: cf 93 push r28
11d8: df 93 push r29
11da: ec 01 movw r28, r24
11dc: 16 2f mov r17, r22
while (*text)
{
if (*text > 0x1F)
{
put_char(lcd_xpos,lcd_ypos,*text++,mode);
lcd_xpos++;
if (lcd_xpos > 20)
{
lcd_xpos = 0;
new_line();
}
}
else
{
switch (*text)
{
case 0x0D:
lcd_xpos = 0;
break;
case 0x0A:
new_line();
break;
}
text++;
11de: 88 81 ld r24, Y
11e0: 88 23 and r24, r24
11e2: 39 f1 breq .+78 ; 0x1232 <lcd_print+0x5e>
11e4: 48 81 ld r20, Y
11e6: 40 32 cpi r20, 0x20 ; 32
11e8: a0 f0 brcs .+40 ; 0x1212 <lcd_print+0x3e>
11ea: 21 96 adiw r28, 0x01 ; 1
11ec: 21 2f mov r18, r17
11ee: 60 91 6b 05 lds r22, 0x056B
11f2: 80 91 6a 05 lds r24, 0x056A
11f6: 0e 94 e9 07 call 0xfd2 <put_char>
11fa: 80 91 6a 05 lds r24, 0x056A
11fe: 8f 5f subi r24, 0xFF ; 255
1200: 80 93 6a 05 sts 0x056A, r24
1204: 85 31 cpi r24, 0x15 ; 21
1206: 90 f0 brcs .+36 ; 0x122c <lcd_print+0x58>
1208: 10 92 6a 05 sts 0x056A, r1
120c: 0e 94 9d 08 call 0x113a <new_line>
1210: 0d c0 rjmp .+26 ; 0x122c <lcd_print+0x58>
1212: 55 27 eor r21, r21
1214: 4a 30 cpi r20, 0x0A ; 10
1216: 51 05 cpc r21, r1
1218: 31 f0 breq .+12 ; 0x1226 <lcd_print+0x52>
121a: 4d 30 cpi r20, 0x0D ; 13
121c: 51 05 cpc r21, r1
121e: 29 f4 brne .+10 ; 0x122a <lcd_print+0x56>
1220: 10 92 6a 05 sts 0x056A, r1
1224: 02 c0 rjmp .+4 ; 0x122a <lcd_print+0x56>
1226: 0e 94 9d 08 call 0x113a <new_line>
122a: 21 96 adiw r28, 0x01 ; 1
122c: 88 81 ld r24, Y
122e: 88 23 and r24, r24
1230: c9 f6 brne .-78 ; 0x11e4 <lcd_print+0x10>
1232: df 91 pop r29
1234: cf 91 pop r28
1236: 1f 91 pop r17
1238: 08 95 ret
 
0000123a <lcd_print_at>:
}
}
}
 
void lcd_print_at (uint8_t x, uint8_t y, uint8_t *text, uint8_t mode)
{
lcd_xpos = x;
123a: 80 93 6a 05 sts 0x056A, r24
lcd_ypos = y;
123e: 60 93 6b 05 sts 0x056B, r22
lcd_print(text, mode);
1242: 62 2f mov r22, r18
1244: ca 01 movw r24, r20
1246: 0e 94 ea 08 call 0x11d4 <lcd_print>
124a: 08 95 ret
 
0000124c <lcd_plot>:
}
 
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Plot (set one Pixel)
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// mode:
// 0=Clear, 1=Set, 2=XOR
void lcd_plot (uint8_t xpos, uint8_t ypos, uint8_t mode)
{
124c: 98 2f mov r25, r24
uint16_t adress;
uint8_t mask;
if ((xpos < 128) && (ypos < 64))
124e: 87 fd sbrc r24, 7
1250: 45 c0 rjmp .+138 ; 0x12dc <lcd_plot+0x90>
1252: 60 34 cpi r22, 0x40 ; 64
1254: 08 f0 brcs .+2 ; 0x1258 <lcd_plot+0xc>
1256: 42 c0 rjmp .+132 ; 0x12dc <lcd_plot+0x90>
{
adress = (ypos/8) * 128 + xpos; // adress = 0/8 * 128 + 0 = 0
1258: 86 2f mov r24, r22
125a: 86 95 lsr r24
125c: 86 95 lsr r24
125e: 86 95 lsr r24
1260: a8 2f mov r26, r24
1262: bb 27 eor r27, r27
1264: b6 95 lsr r27
1266: ba 2f mov r27, r26
1268: aa 27 eor r26, r26
126a: b7 95 ror r27
126c: a7 95 ror r26
126e: a9 0f add r26, r25
1270: b1 1d adc r27, r1
mask = 1<<(ypos & 0x07); // mask = 1<<0 = 1
1272: 26 2f mov r18, r22
1274: 33 27 eor r19, r19
1276: 27 70 andi r18, 0x07 ; 7
1278: 30 70 andi r19, 0x00 ; 0
127a: 81 e0 ldi r24, 0x01 ; 1
127c: 90 e0 ldi r25, 0x00 ; 0
127e: 02 c0 rjmp .+4 ; 0x1284 <lcd_plot+0x38>
1280: 88 0f add r24, r24
1282: 99 1f adc r25, r25
1284: 2a 95 dec r18
1286: e2 f7 brpl .-8 ; 0x1280 <lcd_plot+0x34>
1288: 98 2f mov r25, r24
adress &= 0x3FF;
128a: b3 70 andi r27, 0x03 ; 3
switch (mode)
128c: 55 27 eor r21, r21
128e: 41 30 cpi r20, 0x01 ; 1
1290: 51 05 cpc r21, r1
1292: 89 f0 breq .+34 ; 0x12b6 <lcd_plot+0x6a>
1294: 42 30 cpi r20, 0x02 ; 2
1296: 51 05 cpc r21, r1
1298: 1c f4 brge .+6 ; 0x12a0 <lcd_plot+0x54>
129a: 45 2b or r20, r21
129c: 29 f0 breq .+10 ; 0x12a8 <lcd_plot+0x5c>
129e: 17 c0 rjmp .+46 ; 0x12ce <lcd_plot+0x82>
12a0: 42 30 cpi r20, 0x02 ; 2
12a2: 51 05 cpc r21, r1
12a4: 71 f0 breq .+28 ; 0x12c2 <lcd_plot+0x76>
12a6: 13 c0 rjmp .+38 ; 0x12ce <lcd_plot+0x82>
{
case 0:
display_buffer[adress] &=~mask;
12a8: fd 01 movw r30, r26
12aa: ee 59 subi r30, 0x9E ; 158
12ac: ff 4f sbci r31, 0xFF ; 255
12ae: 90 95 com r25
12b0: 80 81 ld r24, Z
12b2: 89 23 and r24, r25
12b4: 0b c0 rjmp .+22 ; 0x12cc <lcd_plot+0x80>
break;
case 1:
display_buffer[adress] |= mask;
12b6: fd 01 movw r30, r26
12b8: ee 59 subi r30, 0x9E ; 158
12ba: ff 4f sbci r31, 0xFF ; 255
12bc: 80 81 ld r24, Z
12be: 89 2b or r24, r25
12c0: 05 c0 rjmp .+10 ; 0x12cc <lcd_plot+0x80>
break;
case 2:
display_buffer[adress] ^= mask;
12c2: fd 01 movw r30, r26
12c4: ee 59 subi r30, 0x9E ; 158
12c6: ff 4f sbci r31, 0xFF ; 255
12c8: 80 81 ld r24, Z
12ca: 89 27 eor r24, r25
12cc: 80 83 st Z, r24
break;
}
set_adress(adress,display_buffer[adress]);
12ce: fd 01 movw r30, r26
12d0: ee 59 subi r30, 0x9E ; 158
12d2: ff 4f sbci r31, 0xFF ; 255
12d4: 60 81 ld r22, Z
12d6: cd 01 movw r24, r26
12d8: 0e 94 91 07 call 0xf22 <set_adress>
12dc: 08 95 ret
 
000012de <lcd_line>:
}
}
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + 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)
 
{
12de: 2f 92 push r2
12e0: 3f 92 push r3
12e2: 4f 92 push r4
12e4: 5f 92 push r5
12e6: 6f 92 push r6
12e8: 7f 92 push r7
12ea: 8f 92 push r8
12ec: 9f 92 push r9
12ee: af 92 push r10
12f0: bf 92 push r11
12f2: cf 92 push r12
12f4: df 92 push r13
12f6: ef 92 push r14
12f8: ff 92 push r15
12fa: 0f 93 push r16
12fc: 1f 93 push r17
12fe: cf 93 push r28
1300: df 93 push r29
1302: cd b7 in r28, 0x3d ; 61
1304: de b7 in r29, 0x3e ; 62
1306: 23 97 sbiw r28, 0x03 ; 3
1308: 0f b6 in r0, 0x3f ; 63
130a: f8 94 cli
130c: de bf out 0x3e, r29 ; 62
130e: 0f be out 0x3f, r0 ; 63
1310: cd bf out 0x3d, r28 ; 61
1312: 09 83 std Y+1, r16 ; 0x01
int x,y,count,xs,ys,xm,ym;
 
x=(int)x1;
1314: a8 2e mov r10, r24
1316: bb 24 eor r11, r11
y=(int)y1;
1318: c6 2e mov r12, r22
131a: dd 24 eor r13, r13
xs=(int)x2 - (int)x1;
131c: 64 2e mov r6, r20
131e: 77 24 eor r7, r7
1320: 73 01 movw r14, r6
1322: ea 18 sub r14, r10
1324: fb 08 sbc r15, r11
ys=(int)y2 - (int)y1;
1326: 82 2e mov r8, r18
1328: 99 24 eor r9, r9
132a: 84 01 movw r16, r8
132c: 0c 19 sub r16, r12
132e: 1d 09 sbc r17, r13
if(xs < 0)
1330: f7 fe sbrs r15, 7
1332: 04 c0 rjmp .+8 ; 0x133c <lcd_line+0x5e>
xm= -1;
1334: 7f ef ldi r23, 0xFF ; 255
1336: 27 2e mov r2, r23
1338: 37 2e mov r3, r23
133a: 09 c0 rjmp .+18 ; 0x134e <lcd_line+0x70>
else
if(xs > 0)
133c: 1e 14 cp r1, r14
133e: 1f 04 cpc r1, r15
1340: 24 f4 brge .+8 ; 0x134a <lcd_line+0x6c>
xm= 1;
1342: 61 e0 ldi r22, 0x01 ; 1
1344: 26 2e mov r2, r22
1346: 31 2c mov r3, r1
1348: 02 c0 rjmp .+4 ; 0x134e <lcd_line+0x70>
else
xm= 0;
134a: 22 24 eor r2, r2
134c: 33 24 eor r3, r3
if(ys < 0)
134e: 17 ff sbrs r17, 7
1350: 04 c0 rjmp .+8 ; 0x135a <lcd_line+0x7c>
ym= -1;
1352: 5f ef ldi r21, 0xFF ; 255
1354: 45 2e mov r4, r21
1356: 55 2e mov r5, r21
1358: 09 c0 rjmp .+18 ; 0x136c <lcd_line+0x8e>
else
if(ys > 0)
135a: 10 16 cp r1, r16
135c: 11 06 cpc r1, r17
135e: 24 f4 brge .+8 ; 0x1368 <lcd_line+0x8a>
ym= 1;
1360: 41 e0 ldi r20, 0x01 ; 1
1362: 44 2e mov r4, r20
1364: 51 2c mov r5, r1
1366: 02 c0 rjmp .+4 ; 0x136c <lcd_line+0x8e>
else
ym= 0;
1368: 44 24 eor r4, r4
136a: 55 24 eor r5, r5
if(xs < 0)
136c: f7 fe sbrs r15, 7
136e: 04 c0 rjmp .+8 ; 0x1378 <lcd_line+0x9a>
xs= -xs;
1370: f0 94 com r15
1372: e1 94 neg r14
1374: f1 08 sbc r15, r1
1376: f3 94 inc r15
if(ys < 0)
1378: 17 ff sbrs r17, 7
137a: 03 c0 rjmp .+6 ; 0x1382 <lcd_line+0xa4>
ys= -ys;
137c: 10 95 com r17
137e: 01 95 neg r16
1380: 1f 4f sbci r17, 0xFF ; 255
 
lcd_plot((unsigned char)x, (unsigned char)y, mode);
1382: 49 81 ldd r20, Y+1 ; 0x01
1384: 6c 2d mov r22, r12
1386: 8a 2d mov r24, r10
1388: 0e 94 26 09 call 0x124c <lcd_plot>
 
if(xs > ys) // Flat Line <45 degrees
138c: 0e 15 cp r16, r14
138e: 1f 05 cpc r17, r15
1390: 4c f5 brge .+82 ; 0x13e4 <lcd_line+0x106>
{
count= -(xs / 2);
1392: c7 01 movw r24, r14
1394: f7 fc sbrc r15, 7
1396: 01 96 adiw r24, 0x01 ; 1
1398: 95 95 asr r25
139a: 87 95 ror r24
139c: 22 27 eor r18, r18
139e: 33 27 eor r19, r19
13a0: 28 1b sub r18, r24
13a2: 39 0b sbc r19, r25
13a4: 3b 83 std Y+3, r19 ; 0x03
13a6: 2a 83 std Y+2, r18 ; 0x02
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);
13a8: a6 14 cp r10, r6
13aa: b7 04 cpc r11, r7
13ac: 09 f4 brne .+2 ; 0x13b0 <lcd_line+0xd2>
13ae: 41 c0 rjmp .+130 ; 0x1432 <lcd_line+0x154>
13b0: 8a 81 ldd r24, Y+2 ; 0x02
13b2: 9b 81 ldd r25, Y+3 ; 0x03
13b4: 80 0f add r24, r16
13b6: 91 1f adc r25, r17
13b8: 9b 83 std Y+3, r25 ; 0x03
13ba: 8a 83 std Y+2, r24 ; 0x02
13bc: a2 0c add r10, r2
13be: b3 1c adc r11, r3
13c0: 18 16 cp r1, r24
13c2: 19 06 cpc r1, r25
13c4: 34 f4 brge .+12 ; 0x13d2 <lcd_line+0xf4>
13c6: c4 0c add r12, r4
13c8: d5 1c adc r13, r5
13ca: 8e 19 sub r24, r14
13cc: 9f 09 sbc r25, r15
13ce: 9b 83 std Y+3, r25 ; 0x03
13d0: 8a 83 std Y+2, r24 ; 0x02
13d2: 49 81 ldd r20, Y+1 ; 0x01
13d4: 6c 2d mov r22, r12
13d6: 8a 2d mov r24, r10
13d8: 0e 94 26 09 call 0x124c <lcd_plot>
13dc: a6 14 cp r10, r6
13de: b7 04 cpc r11, r7
13e0: 39 f7 brne .-50 ; 0x13b0 <lcd_line+0xd2>
13e2: 27 c0 rjmp .+78 ; 0x1432 <lcd_line+0x154>
}
}
else // Line >=45 degrees
{
count=- (ys / 2);
13e4: c8 01 movw r24, r16
13e6: 17 fd sbrc r17, 7
13e8: 01 96 adiw r24, 0x01 ; 1
13ea: 95 95 asr r25
13ec: 87 95 ror r24
13ee: ee 27 eor r30, r30
13f0: ff 27 eor r31, r31
13f2: e8 1b sub r30, r24
13f4: f9 0b sbc r31, r25
13f6: fb 83 std Y+3, r31 ; 0x03
13f8: ea 83 std Y+2, r30 ; 0x02
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);
13fa: c8 14 cp r12, r8
13fc: d9 04 cpc r13, r9
13fe: c9 f0 breq .+50 ; 0x1432 <lcd_line+0x154>
1400: 2a 81 ldd r18, Y+2 ; 0x02
1402: 3b 81 ldd r19, Y+3 ; 0x03
1404: 2e 0d add r18, r14
1406: 3f 1d adc r19, r15
1408: 3b 83 std Y+3, r19 ; 0x03
140a: 2a 83 std Y+2, r18 ; 0x02
140c: c4 0c add r12, r4
140e: d5 1c adc r13, r5
1410: 12 16 cp r1, r18
1412: 13 06 cpc r1, r19
1414: 34 f4 brge .+12 ; 0x1422 <lcd_line+0x144>
1416: a2 0c add r10, r2
1418: b3 1c adc r11, r3
141a: 20 1b sub r18, r16
141c: 31 0b sbc r19, r17
141e: 3b 83 std Y+3, r19 ; 0x03
1420: 2a 83 std Y+2, r18 ; 0x02
1422: 49 81 ldd r20, Y+1 ; 0x01
1424: 6c 2d mov r22, r12
1426: 8a 2d mov r24, r10
1428: 0e 94 26 09 call 0x124c <lcd_plot>
142c: c8 14 cp r12, r8
142e: d9 04 cpc r13, r9
1430: 39 f7 brne .-50 ; 0x1400 <lcd_line+0x122>
1432: 23 96 adiw r28, 0x03 ; 3
1434: 0f b6 in r0, 0x3f ; 63
1436: f8 94 cli
1438: de bf out 0x3e, r29 ; 62
143a: 0f be out 0x3f, r0 ; 63
143c: cd bf out 0x3d, r28 ; 61
143e: df 91 pop r29
1440: cf 91 pop r28
1442: 1f 91 pop r17
1444: 0f 91 pop r16
1446: ff 90 pop r15
1448: ef 90 pop r14
144a: df 90 pop r13
144c: cf 90 pop r12
144e: bf 90 pop r11
1450: af 90 pop r10
1452: 9f 90 pop r9
1454: 8f 90 pop r8
1456: 7f 90 pop r7
1458: 6f 90 pop r6
145a: 5f 90 pop r5
145c: 4f 90 pop r4
145e: 3f 90 pop r3
1460: 2f 90 pop r2
1462: 08 95 ret
 
00001464 <lcd_frect>:
}
}
}
 
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + 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)
{
1464: bf 92 push r11
1466: cf 92 push r12
1468: df 92 push r13
146a: ef 92 push r14
146c: ff 92 push r15
146e: 0f 93 push r16
1470: 1f 93 push r17
1472: cf 93 push r28
1474: df 93 push r29
1476: 18 2f mov r17, r24
1478: 82 2f mov r24, r18
147a: b0 2e mov r11, r16
uint16_t x2, y2;
uint16_t i;
 
if (x1 >= DISP_W)
147c: 17 fd sbrc r17, 7
x1 = DISP_W - 1;
147e: 1f e7 ldi r17, 0x7F ; 127
if (y1 >= DISP_H)
1480: 60 34 cpi r22, 0x40 ; 64
1482: 08 f0 brcs .+2 ; 0x1486 <lcd_frect+0x22>
y1 = DISP_H - 1;
1484: 6f e3 ldi r22, 0x3F ; 63
x2 = x1 + widthx;
1486: 21 2f mov r18, r17
1488: 24 0f add r18, r20
148a: 31 2d mov r19, r1
148c: 31 1d adc r19, r1
148e: 69 01 movw r12, r18
y2 = y1 + widthy;
1490: 26 2f mov r18, r22
1492: 33 27 eor r19, r19
1494: 79 01 movw r14, r18
1496: e8 0e add r14, r24
1498: f1 1c adc r15, r1
if (x2 > DISP_W)
149a: 81 e8 ldi r24, 0x81 ; 129
149c: c8 16 cp r12, r24
149e: d1 04 cpc r13, r1
14a0: 18 f0 brcs .+6 ; 0x14a8 <lcd_frect+0x44>
x2 = DISP_W;
14a2: f0 e8 ldi r31, 0x80 ; 128
14a4: cf 2e mov r12, r31
14a6: d1 2c mov r13, r1
if (y2 > DISP_H)
14a8: 81 e4 ldi r24, 0x41 ; 65
14aa: e8 16 cp r14, r24
14ac: f1 04 cpc r15, r1
14ae: 18 f0 brcs .+6 ; 0x14b6 <lcd_frect+0x52>
y2 = DISP_H;
14b0: e0 e4 ldi r30, 0x40 ; 64
14b2: ee 2e mov r14, r30
14b4: f1 2c mov r15, r1
for (i=y1;i<=y2;i++)
14b6: e9 01 movw r28, r18
14b8: e2 16 cp r14, r18
14ba: f3 06 cpc r15, r19
14bc: 58 f0 brcs .+22 ; 0x14d4 <lcd_frect+0x70>
{
lcd_line(x1,i,x2,i,mode);
14be: 0b 2d mov r16, r11
14c0: 2c 2f mov r18, r28
14c2: 4c 2d mov r20, r12
14c4: 6c 2f mov r22, r28
14c6: 81 2f mov r24, r17
14c8: 0e 94 6f 09 call 0x12de <lcd_line>
14cc: 21 96 adiw r28, 0x01 ; 1
14ce: ec 16 cp r14, r28
14d0: fd 06 cpc r15, r29
14d2: a8 f7 brcc .-22 ; 0x14be <lcd_frect+0x5a>
14d4: df 91 pop r29
14d6: cf 91 pop r28
14d8: 1f 91 pop r17
14da: 0f 91 pop r16
14dc: ff 90 pop r15
14de: ef 90 pop r14
14e0: df 90 pop r13
14e2: cf 90 pop r12
14e4: bf 90 pop r11
14e6: 08 95 ret
 
000014e8 <lcd_rect>:
}
}
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + 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)
{
14e8: cf 92 push r12
14ea: df 92 push r13
14ec: ef 92 push r14
14ee: ff 92 push r15
14f0: 0f 93 push r16
14f2: 1f 93 push r17
14f4: cf 93 push r28
14f6: df 93 push r29
14f8: d8 2e mov r13, r24
14fa: 16 2f mov r17, r22
14fc: c0 2e mov r12, r16
uint16_t x2, y2;
 
if (x1 >= DISP_W)
14fe: 87 ff sbrs r24, 7
1500: 02 c0 rjmp .+4 ; 0x1506 <lcd_rect+0x1e>
x1 = DISP_W - 1;
1502: bf e7 ldi r27, 0x7F ; 127
1504: db 2e mov r13, r27
if (y1 >= DISP_H)
1506: 10 34 cpi r17, 0x40 ; 64
1508: 08 f0 brcs .+2 ; 0x150c <lcd_rect+0x24>
y1 = DISP_H - 1;
150a: 1f e3 ldi r17, 0x3F ; 63
x2 = x1 + widthx;
150c: 8d 2d mov r24, r13
150e: 84 0f add r24, r20
1510: 91 2d mov r25, r1
1512: 91 1d adc r25, r1
1514: ec 01 movw r28, r24
y2 = y1 + widthy;
1516: 81 2f mov r24, r17
1518: 82 0f add r24, r18
151a: 91 2d mov r25, r1
151c: 91 1d adc r25, r1
151e: 7c 01 movw r14, r24
if (x2 > DISP_W)
1520: c1 38 cpi r28, 0x81 ; 129
1522: d1 05 cpc r29, r1
1524: 10 f0 brcs .+4 ; 0x152a <lcd_rect+0x42>
x2 = DISP_W;
1526: c0 e8 ldi r28, 0x80 ; 128
1528: d0 e0 ldi r29, 0x00 ; 0
if (y2 > DISP_H)
152a: 91 e4 ldi r25, 0x41 ; 65
152c: e9 16 cp r14, r25
152e: f1 04 cpc r15, r1
1530: 18 f0 brcs .+6 ; 0x1538 <lcd_rect+0x50>
y2 = DISP_H;
1532: a0 e4 ldi r26, 0x40 ; 64
1534: ea 2e mov r14, r26
1536: f1 2c mov r15, r1
 
lcd_line (x1, y1, x2, y1, mode);
1538: 0c 2d mov r16, r12
153a: 21 2f mov r18, r17
153c: 4c 2f mov r20, r28
153e: 61 2f mov r22, r17
1540: 8d 2d mov r24, r13
1542: 0e 94 6f 09 call 0x12de <lcd_line>
lcd_line (x2, y1, x2, y2, mode);
1546: 2e 2d mov r18, r14
1548: 4c 2f mov r20, r28
154a: 61 2f mov r22, r17
154c: 8c 2f mov r24, r28
154e: 0e 94 6f 09 call 0x12de <lcd_line>
lcd_line (x2, y2, x1, y2, mode);
1552: 2e 2d mov r18, r14
1554: 4d 2d mov r20, r13
1556: 6e 2d mov r22, r14
1558: 8c 2f mov r24, r28
155a: 0e 94 6f 09 call 0x12de <lcd_line>
lcd_line (x1, y2, x1, y1, mode);
155e: 21 2f mov r18, r17
1560: 4d 2d mov r20, r13
1562: 6e 2d mov r22, r14
1564: 8d 2d mov r24, r13
1566: 0e 94 6f 09 call 0x12de <lcd_line>
156a: df 91 pop r29
156c: cf 91 pop r28
156e: 1f 91 pop r17
1570: 0f 91 pop r16
1572: ff 90 pop r15
1574: ef 90 pop r14
1576: df 90 pop r13
1578: cf 90 pop r12
157a: 08 95 ret
 
0000157c <draw_circle>:
}
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + outline of a circle
// + Based on Bresenham-algorithm found in wikipedia
// + modified by thkais (2007)
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 
void draw_circle(int16_t x0, int16_t y0, int16_t radius, uint8_t mode)
{
157c: 2f 92 push r2
157e: 3f 92 push r3
1580: 4f 92 push r4
1582: 5f 92 push r5
1584: 6f 92 push r6
1586: 7f 92 push r7
1588: 8f 92 push r8
158a: 9f 92 push r9
158c: af 92 push r10
158e: bf 92 push r11
1590: cf 92 push r12
1592: df 92 push r13
1594: ef 92 push r14
1596: ff 92 push r15
1598: 0f 93 push r16
159a: 1f 93 push r17
159c: cf 93 push r28
159e: df 93 push r29
15a0: 5c 01 movw r10, r24
15a2: 6b 01 movw r12, r22
15a4: e2 2e mov r14, r18
int16_t f = 1 - radius;
15a6: c1 e0 ldi r28, 0x01 ; 1
15a8: 8c 2e mov r8, r28
15aa: 91 2c mov r9, r1
15ac: 84 1a sub r8, r20
15ae: 95 0a sbc r9, r21
int16_t ddF_x = 0;
15b0: 22 24 eor r2, r2
15b2: 33 24 eor r3, r3
int16_t ddF_y = -2 * radius;
15b4: 8e ef ldi r24, 0xFE ; 254
15b6: 9f ef ldi r25, 0xFF ; 255
15b8: 48 9f mul r20, r24
15ba: 20 01 movw r4, r0
15bc: 49 9f mul r20, r25
15be: 50 0c add r5, r0
15c0: 58 9f mul r21, r24
15c2: 50 0c add r5, r0
15c4: 11 24 eor r1, r1
int16_t x = 0;
15c6: 31 01 movw r6, r2
int16_t y = radius;
15c8: ea 01 movw r28, r20
 
lcd_plot(x0, y0 + radius, mode);
15ca: 86 2f mov r24, r22
15cc: 84 0f add r24, r20
15ce: 42 2f mov r20, r18
15d0: 68 2f mov r22, r24
15d2: 8a 2d mov r24, r10
15d4: 0e 94 26 09 call 0x124c <lcd_plot>
lcd_plot(x0, y0 - radius, mode);
15d8: 8c 2d mov r24, r12
15da: 8c 1b sub r24, r28
15dc: 4e 2d mov r20, r14
15de: 68 2f mov r22, r24
15e0: 8a 2d mov r24, r10
15e2: 0e 94 26 09 call 0x124c <lcd_plot>
lcd_plot(x0 + radius, y0, mode);
15e6: 4e 2d mov r20, r14
15e8: 6c 2d mov r22, r12
15ea: 8a 2d mov r24, r10
15ec: 8c 0f add r24, r28
15ee: 0e 94 26 09 call 0x124c <lcd_plot>
lcd_plot(x0 - radius, y0, mode);
15f2: 4e 2d mov r20, r14
15f4: 6c 2d mov r22, r12
15f6: 8a 2d mov r24, r10
15f8: 8c 1b sub r24, r28
15fa: 0e 94 26 09 call 0x124c <lcd_plot>
 
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);
15fe: 2c 16 cp r2, r28
1600: 3d 06 cpc r3, r29
1602: 0c f0 brlt .+2 ; 0x1606 <draw_circle+0x8a>
1604: 51 c0 rjmp .+162 ; 0x16a8 <draw_circle+0x12c>
1606: 97 fc sbrc r9, 7
1608: 07 c0 rjmp .+14 ; 0x1618 <draw_circle+0x9c>
160a: 21 97 sbiw r28, 0x01 ; 1
160c: 82 e0 ldi r24, 0x02 ; 2
160e: 90 e0 ldi r25, 0x00 ; 0
1610: 48 0e add r4, r24
1612: 59 1e adc r5, r25
1614: 84 0c add r8, r4
1616: 95 1c adc r9, r5
1618: 08 94 sec
161a: 61 1c adc r6, r1
161c: 71 1c adc r7, r1
161e: 82 e0 ldi r24, 0x02 ; 2
1620: 90 e0 ldi r25, 0x00 ; 0
1622: 28 0e add r2, r24
1624: 39 1e adc r3, r25
1626: 82 0c add r8, r2
1628: 93 1c adc r9, r3
162a: 08 94 sec
162c: 81 1c adc r8, r1
162e: 91 1c adc r9, r1
1630: 1c 2d mov r17, r12
1632: 1c 0f add r17, r28
1634: fa 2c mov r15, r10
1636: f6 0c add r15, r6
1638: 4e 2d mov r20, r14
163a: 61 2f mov r22, r17
163c: 8f 2d mov r24, r15
163e: 0e 94 26 09 call 0x124c <lcd_plot>
1642: 0a 2d mov r16, r10
1644: 06 19 sub r16, r6
1646: 4e 2d mov r20, r14
1648: 61 2f mov r22, r17
164a: 80 2f mov r24, r16
164c: 0e 94 26 09 call 0x124c <lcd_plot>
1650: 1c 2d mov r17, r12
1652: 1c 1b sub r17, r28
1654: 4e 2d mov r20, r14
1656: 61 2f mov r22, r17
1658: 8f 2d mov r24, r15
165a: 0e 94 26 09 call 0x124c <lcd_plot>
165e: 4e 2d mov r20, r14
1660: 61 2f mov r22, r17
1662: 80 2f mov r24, r16
1664: 0e 94 26 09 call 0x124c <lcd_plot>
1668: 1c 2d mov r17, r12
166a: 16 0d add r17, r6
166c: fa 2c mov r15, r10
166e: fc 0e add r15, r28
1670: 4e 2d mov r20, r14
1672: 61 2f mov r22, r17
1674: 8f 2d mov r24, r15
1676: 0e 94 26 09 call 0x124c <lcd_plot>
167a: 0a 2d mov r16, r10
167c: 0c 1b sub r16, r28
167e: 4e 2d mov r20, r14
1680: 61 2f mov r22, r17
1682: 80 2f mov r24, r16
1684: 0e 94 26 09 call 0x124c <lcd_plot>
1688: 1c 2d mov r17, r12
168a: 16 19 sub r17, r6
168c: 4e 2d mov r20, r14
168e: 61 2f mov r22, r17
1690: 8f 2d mov r24, r15
1692: 0e 94 26 09 call 0x124c <lcd_plot>
1696: 4e 2d mov r20, r14
1698: 61 2f mov r22, r17
169a: 80 2f mov r24, r16
169c: 0e 94 26 09 call 0x124c <lcd_plot>
16a0: 6c 16 cp r6, r28
16a2: 7d 06 cpc r7, r29
16a4: 0c f4 brge .+2 ; 0x16a8 <draw_circle+0x12c>
16a6: af cf rjmp .-162 ; 0x1606 <draw_circle+0x8a>
16a8: df 91 pop r29
16aa: cf 91 pop r28
16ac: 1f 91 pop r17
16ae: 0f 91 pop r16
16b0: ff 90 pop r15
16b2: ef 90 pop r14
16b4: df 90 pop r13
16b6: cf 90 pop r12
16b8: bf 90 pop r11
16ba: af 90 pop r10
16bc: 9f 90 pop r9
16be: 8f 90 pop r8
16c0: 7f 90 pop r7
16c2: 6f 90 pop r6
16c4: 5f 90 pop r5
16c6: 4f 90 pop r4
16c8: 3f 90 pop r3
16ca: 2f 90 pop r2
16cc: 08 95 ret
 
000016ce <draw_fcircle>:
}
}
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + filled Circle
// + modified circle-algorithm thkais (2007)
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
void draw_fcircle(int16_t x0, int16_t y0, int16_t radius)
{
16ce: 2f 92 push r2
16d0: 3f 92 push r3
16d2: 4f 92 push r4
16d4: 5f 92 push r5
16d6: 6f 92 push r6
16d8: 7f 92 push r7
16da: 8f 92 push r8
16dc: 9f 92 push r9
16de: af 92 push r10
16e0: bf 92 push r11
16e2: cf 92 push r12
16e4: df 92 push r13
16e6: ff 92 push r15
16e8: 0f 93 push r16
16ea: 1f 93 push r17
16ec: cf 93 push r28
16ee: df 93 push r29
16f0: 5c 01 movw r10, r24
16f2: 6b 01 movw r12, r22
int16_t f = 1 - radius;
16f4: 11 e0 ldi r17, 0x01 ; 1
16f6: 61 2e mov r6, r17
16f8: 71 2c mov r7, r1
16fa: 64 1a sub r6, r20
16fc: 75 0a sbc r7, r21
int16_t ddF_x = 0;
16fe: 22 24 eor r2, r2
1700: 33 24 eor r3, r3
int16_t ddF_y = -2 * radius;
1702: 8e ef ldi r24, 0xFE ; 254
1704: 9f ef ldi r25, 0xFF ; 255
1706: 48 9f mul r20, r24
1708: 20 01 movw r4, r0
170a: 49 9f mul r20, r25
170c: 50 0c add r5, r0
170e: 58 9f mul r21, r24
1710: 50 0c add r5, r0
1712: 11 24 eor r1, r1
int16_t x = 0;
1714: 41 01 movw r8, r2
int16_t y = radius;
1716: ea 01 movw r28, r20
lcd_line(x0, y0 + radius,x0, y0 - radius,1);
1718: 86 2f mov r24, r22
171a: 84 1b sub r24, r20
171c: 96 2f mov r25, r22
171e: 94 0f add r25, r20
1720: 01 e0 ldi r16, 0x01 ; 1
1722: 28 2f mov r18, r24
1724: 4a 2d mov r20, r10
1726: 69 2f mov r22, r25
1728: 8a 2d mov r24, r10
172a: 0e 94 6f 09 call 0x12de <lcd_line>
lcd_line(x0 + radius, y0,x0 - radius, y0,1);
172e: 8a 2d mov r24, r10
1730: 8c 1b sub r24, r28
1732: 2c 2d mov r18, r12
1734: 48 2f mov r20, r24
1736: 6c 2d mov r22, r12
1738: 8a 2d mov r24, r10
173a: 8c 0f add r24, r28
173c: 0e 94 6f 09 call 0x12de <lcd_line>
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);
1740: 2c 16 cp r2, r28
1742: 3d 06 cpc r3, r29
1744: 0c f0 brlt .+2 ; 0x1748 <draw_fcircle+0x7a>
1746: 42 c0 rjmp .+132 ; 0x17cc <draw_fcircle+0xfe>
1748: 77 fc sbrc r7, 7
174a: 07 c0 rjmp .+14 ; 0x175a <draw_fcircle+0x8c>
174c: 21 97 sbiw r28, 0x01 ; 1
174e: 82 e0 ldi r24, 0x02 ; 2
1750: 90 e0 ldi r25, 0x00 ; 0
1752: 48 0e add r4, r24
1754: 59 1e adc r5, r25
1756: 64 0c add r6, r4
1758: 75 1c adc r7, r5
175a: 08 94 sec
175c: 81 1c adc r8, r1
175e: 91 1c adc r9, r1
1760: 82 e0 ldi r24, 0x02 ; 2
1762: 90 e0 ldi r25, 0x00 ; 0
1764: 28 0e add r2, r24
1766: 39 1e adc r3, r25
1768: 62 0c add r6, r2
176a: 73 1c adc r7, r3
176c: 08 94 sec
176e: 61 1c adc r6, r1
1770: 71 1c adc r7, r1
1772: 8c 2d mov r24, r12
1774: 8c 0f add r24, r28
1776: 1a 2d mov r17, r10
1778: 18 19 sub r17, r8
177a: fa 2c mov r15, r10
177c: f8 0c add r15, r8
177e: 01 e0 ldi r16, 0x01 ; 1
1780: 28 2f mov r18, r24
1782: 41 2f mov r20, r17
1784: 68 2f mov r22, r24
1786: 8f 2d mov r24, r15
1788: 0e 94 6f 09 call 0x12de <lcd_line>
178c: 8c 2d mov r24, r12
178e: 8c 1b sub r24, r28
1790: 28 2f mov r18, r24
1792: 41 2f mov r20, r17
1794: 68 2f mov r22, r24
1796: 8f 2d mov r24, r15
1798: 0e 94 6f 09 call 0x12de <lcd_line>
179c: 8c 2d mov r24, r12
179e: 88 0d add r24, r8
17a0: 1a 2d mov r17, r10
17a2: 1c 1b sub r17, r28
17a4: fa 2c mov r15, r10
17a6: fc 0e add r15, r28
17a8: 28 2f mov r18, r24
17aa: 41 2f mov r20, r17
17ac: 68 2f mov r22, r24
17ae: 8f 2d mov r24, r15
17b0: 0e 94 6f 09 call 0x12de <lcd_line>
17b4: 8c 2d mov r24, r12
17b6: 88 19 sub r24, r8
17b8: 28 2f mov r18, r24
17ba: 41 2f mov r20, r17
17bc: 68 2f mov r22, r24
17be: 8f 2d mov r24, r15
17c0: 0e 94 6f 09 call 0x12de <lcd_line>
17c4: 8c 16 cp r8, r28
17c6: 9d 06 cpc r9, r29
17c8: 0c f4 brge .+2 ; 0x17cc <draw_fcircle+0xfe>
17ca: be cf rjmp .-132 ; 0x1748 <draw_fcircle+0x7a>
17cc: df 91 pop r29
17ce: cf 91 pop r28
17d0: 1f 91 pop r17
17d2: 0f 91 pop r16
17d4: ff 90 pop r15
17d6: df 90 pop r13
17d8: cf 90 pop r12
17da: bf 90 pop r11
17dc: af 90 pop r10
17de: 9f 90 pop r9
17e0: 8f 90 pop r8
17e2: 7f 90 pop r7
17e4: 6f 90 pop r6
17e6: 5f 90 pop r5
17e8: 4f 90 pop r4
17ea: 3f 90 pop r3
17ec: 2f 90 pop r2
17ee: 08 95 ret
 
000017f0 <__vector_13>:
volatile uint8_t read_index, write_index;
volatile uint8_t rs232_buffer[16];
 
ISR(USART_RXC_vect)
{
17f0: 1f 92 push r1
17f2: 0f 92 push r0
17f4: 0f b6 in r0, 0x3f ; 63
17f6: 0f 92 push r0
17f8: 11 24 eor r1, r1
17fa: 8f 93 push r24
17fc: 9f 93 push r25
17fe: ef 93 push r30
1800: ff 93 push r31
rs232_buffer[write_index++] = UDR;
1802: 90 91 6c 05 lds r25, 0x056C
1806: ee e6 ldi r30, 0x6E ; 110
1808: f5 e0 ldi r31, 0x05 ; 5
180a: e9 0f add r30, r25
180c: f1 1d adc r31, r1
180e: 8c b1 in r24, 0x0c ; 12
1810: 80 83 st Z, r24
1812: 9f 5f subi r25, 0xFF ; 255
1814: 90 93 6c 05 sts 0x056C, r25
write_index &= 15;
1818: 80 91 6c 05 lds r24, 0x056C
181c: 8f 70 andi r24, 0x0F ; 15
181e: 80 93 6c 05 sts 0x056C, r24
1822: ff 91 pop r31
1824: ef 91 pop r30
1826: 9f 91 pop r25
1828: 8f 91 pop r24
182a: 0f 90 pop r0
182c: 0f be out 0x3f, r0 ; 63
182e: 0f 90 pop r0
1830: 1f 90 pop r1
1832: 18 95 reti
 
00001834 <RS232_init>:
}
 
void RS232_init (void)
{
UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
1834: 88 e9 ldi r24, 0x98 ; 152
1836: 8a b9 out 0x0a, r24 ; 10
UBRRL = 7; // 57600 Baud @ 7,372800 MHz
1838: 87 e0 ldi r24, 0x07 ; 7
183a: 89 b9 out 0x09, r24 ; 9
183c: 08 95 ret
 
0000183e <RS232_get>:
}
 
uint8_t RS232_get (void)
{
uint8_t c;
 
rs232_timer = 10;
183e: 8a e0 ldi r24, 0x0A ; 10
1840: 80 93 e5 04 sts 0x04E5, r24
while ((read_index == write_index) && (rs232_timer > 0));
1844: 90 91 6d 05 lds r25, 0x056D
1848: 80 91 6c 05 lds r24, 0x056C
184c: 98 17 cp r25, r24
184e: 21 f4 brne .+8 ; 0x1858 <RS232_get+0x1a>
1850: 80 91 e5 04 lds r24, 0x04E5
1854: 88 23 and r24, r24
1856: b1 f7 brne .-20 ; 0x1844 <RS232_get+0x6>
if (rs232_timer != 0)
1858: 80 91 e5 04 lds r24, 0x04E5
185c: 88 23 and r24, r24
185e: 81 f0 breq .+32 ; 0x1880 <RS232_get+0x42>
{
c = rs232_buffer[read_index++];
1860: 80 91 6d 05 lds r24, 0x056D
1864: e8 2f mov r30, r24
1866: ff 27 eor r31, r31
1868: e2 59 subi r30, 0x92 ; 146
186a: fa 4f sbci r31, 0xFA ; 250
186c: 8f 5f subi r24, 0xFF ; 255
186e: 80 93 6d 05 sts 0x056D, r24
1872: e0 81 ld r30, Z
read_index &= 15;
1874: 80 91 6d 05 lds r24, 0x056D
1878: 8f 70 andi r24, 0x0F ; 15
187a: 80 93 6d 05 sts 0x056D, r24
187e: 01 c0 rjmp .+2 ; 0x1882 <RS232_get+0x44>
}
else
{
c=0;
1880: e8 2f mov r30, r24
}
return c;
}
1882: 8e 2f mov r24, r30
1884: 99 27 eor r25, r25
1886: 08 95 ret
 
00001888 <RS232_send>:
void RS232_send (uint8_t data)
{
while ((UCSRA & (1<<UDRE)) == 0);
1888: 5d 9b sbis 0x0b, 5 ; 11
188a: fe cf rjmp .-4 ; 0x1888 <RS232_send>
UDR = data;
188c: 8c b9 out 0x0c, r24 ; 12
188e: 08 95 ret
 
00001890 <RS232_text>:
}
void RS232_text (uint8_t *text)
{
1890: cf 93 push r28
1892: df 93 push r29
1894: ec 01 movw r28, r24
while (*text)
{
RS232_send(*text);
text++;
1896: 88 81 ld r24, Y
1898: 88 23 and r24, r24
189a: 31 f0 breq .+12 ; 0x18a8 <RS232_text+0x18>
189c: 89 91 ld r24, Y+
189e: 0e 94 44 0c call 0x1888 <RS232_send>
18a2: 88 81 ld r24, Y
18a4: 88 23 and r24, r24
18a6: d1 f7 brne .-12 ; 0x189c <RS232_text+0xc>
18a8: df 91 pop r29
18aa: cf 91 pop r28
18ac: 08 95 ret
 
000018ae <base64_decode>:
}
 
 
uint8_t base64_decode(uint8_t number) // Wandelt die base64-Rohdaten in lesbare Daten um
{
18ae: a8 2f mov r26, r24
uint8_t p,q;
uint8_t a,b,c,d;
 
p = 2;
18b0: 62 e0 ldi r22, 0x02 ; 2
q = 0;
18b2: 70 e0 ldi r23, 0x00 ; 0
while (p < number)
{
a = r_buffer[p + 0] - 61;
b = r_buffer[p + 1] - 61;
c = r_buffer[p + 2] - 61;
d = r_buffer[p + 3] - 61;
p += 4;
p_buffer[q + 0] = (a << 2) | (b >> 4); // gespeichert werden die Daten in p_buffer
p_buffer[q + 1] = ((b & 0x0F) << 4) | (c >> 2);
p_buffer[q + 2] = ((c & 0x03) << 6) | d;
q += 3;
18b4: 6a 17 cp r22, r26
18b6: b0 f5 brcc .+108 ; 0x1924 <base64_decode+0x76>
18b8: e6 2f mov r30, r22
18ba: ff 27 eor r31, r31
18bc: e7 51 subi r30, 0x17 ; 23
18be: fb 4f sbci r31, 0xFB ; 251
18c0: 80 81 ld r24, Z
18c2: 8d 53 subi r24, 0x3D ; 61
18c4: 31 81 ldd r19, Z+1 ; 0x01
18c6: 3d 53 subi r19, 0x3D ; 61
18c8: 52 81 ldd r21, Z+2 ; 0x02
18ca: 5d 53 subi r21, 0x3D ; 61
18cc: 43 81 ldd r20, Z+3 ; 0x03
18ce: 4d 53 subi r20, 0x3D ; 61
18d0: 6c 5f subi r22, 0xFC ; 252
18d2: e7 2f mov r30, r23
18d4: ff 27 eor r31, r31
18d6: ed 59 subi r30, 0x9D ; 157
18d8: fb 4f sbci r31, 0xFB ; 251
18da: 99 27 eor r25, r25
18dc: 88 0f add r24, r24
18de: 99 1f adc r25, r25
18e0: 88 0f add r24, r24
18e2: 99 1f adc r25, r25
18e4: 23 2f mov r18, r19
18e6: 22 95 swap r18
18e8: 2f 70 andi r18, 0x0F ; 15
18ea: 28 2b or r18, r24
18ec: 20 83 st Z, r18
18ee: 83 2f mov r24, r19
18f0: 99 27 eor r25, r25
18f2: 8f 70 andi r24, 0x0F ; 15
18f4: 90 70 andi r25, 0x00 ; 0
18f6: 34 e0 ldi r19, 0x04 ; 4
18f8: 88 0f add r24, r24
18fa: 99 1f adc r25, r25
18fc: 3a 95 dec r19
18fe: e1 f7 brne .-8 ; 0x18f8 <base64_decode+0x4a>
1900: 25 2f mov r18, r21
1902: 26 95 lsr r18
1904: 26 95 lsr r18
1906: 28 2b or r18, r24
1908: 21 83 std Z+1, r18 ; 0x01
190a: 85 2f mov r24, r21
190c: 99 27 eor r25, r25
190e: 83 70 andi r24, 0x03 ; 3
1910: 90 70 andi r25, 0x00 ; 0
1912: 26 e0 ldi r18, 0x06 ; 6
1914: 88 0f add r24, r24
1916: 99 1f adc r25, r25
1918: 2a 95 dec r18
191a: e1 f7 brne .-8 ; 0x1914 <base64_decode+0x66>
191c: 48 2b or r20, r24
191e: 42 83 std Z+2, r20 ; 0x02
1920: 7d 5f subi r23, 0xFD ; 253
1922: c8 cf rjmp .-112 ; 0x18b4 <base64_decode+0x6>
}
return q; // Rückgabe der Anzahl der Datenbytes
}
1924: 87 2f mov r24, r23
1926: 99 27 eor r25, r25
1928: 08 95 ret
 
0000192a <get_message>:
192a: cf 93 push r28
192c: 84 e1 ldi r24, 0x14 ; 20
192e: 80 93 61 00 sts 0x0061, r24
1932: 0e 94 1f 0c call 0x183e <RS232_get>
1936: 83 32 cpi r24, 0x23 ; 35
1938: 21 f0 breq .+8 ; 0x1942 <get_message+0x18>
193a: 80 91 61 00 lds r24, 0x0061
193e: 88 23 and r24, r24
1940: c1 f7 brne .-16 ; 0x1932 <get_message+0x8>
1942: 80 91 61 00 lds r24, 0x0061
1946: 88 23 and r24, r24
1948: 99 f0 breq .+38 ; 0x1970 <get_message+0x46>
194a: c0 e0 ldi r28, 0x00 ; 0
194c: 0e 94 1f 0c call 0x183e <RS232_get>
1950: ec 2f mov r30, r28
1952: ff 27 eor r31, r31
1954: e7 51 subi r30, 0x17 ; 23
1956: fb 4f sbci r31, 0xFB ; 251
1958: 80 83 st Z, r24
195a: cf 5f subi r28, 0xFF ; 255
195c: c7 fd sbrc r28, 7
195e: cf e7 ldi r28, 0x7F ; 127
1960: 8d 30 cpi r24, 0x0D ; 13
1962: a1 f7 brne .-24 ; 0x194c <get_message+0x22>
1964: 8c 2f mov r24, r28
1966: 0e 94 57 0c call 0x18ae <base64_decode>
196a: 80 e0 ldi r24, 0x00 ; 0
196c: 90 e0 ldi r25, 0x00 ; 0
196e: 02 c0 rjmp .+4 ; 0x1974 <get_message+0x4a>
1970: 81 e0 ldi r24, 0x01 ; 1
1972: 90 e0 ldi r25, 0x00 ; 0
1974: cf 91 pop r28
1976: 08 95 ret
 
00001978 <base64_send>:
 
void base64_send(uint8_t number) // Sendet Daten zur Flight-Control
{ // Die Daten werden in p_buffer erwartet, umcodiert und gesendet
1978: ff 92 push r15
197a: 0f 93 push r16
197c: 1f 93 push r17
197e: cf 93 push r28
1980: a8 2f mov r26, r24
uint8_t bpointer,spointer;
uint8_t x,y,z,a;
uint16_t checksum;
 
r_buffer[0] = p_buffer[0];
1982: 80 91 63 04 lds r24, 0x0463
1986: 80 93 e9 04 sts 0x04E9, r24
r_buffer[1] = p_buffer[1];
198a: 80 91 64 04 lds r24, 0x0464
198e: 80 93 ea 04 sts 0x04EA, r24
r_buffer[2] = p_buffer[2];
1992: 80 91 65 04 lds r24, 0x0465
1996: 80 93 eb 04 sts 0x04EB, r24
 
bpointer = 3;
199a: 43 e0 ldi r20, 0x03 ; 3
199c: f4 2e mov r15, r20
spointer = 3;
199e: 7f 2d mov r23, r15
 
while (spointer < number)
{
x = p_buffer[spointer];
y = p_buffer[spointer + 1];
z = p_buffer[spointer + 2];
spointer += 3;
r_buffer[bpointer + 0] = (x >> 2) + 61;
r_buffer[bpointer + 1] = (((x & 0x03) << 4) | ((y & 0xF0) >> 4)) + 61;
r_buffer[bpointer + 2] = (((y & 0x0F) << 2) | ((z & 0xC0) >> 6)) + 61;
r_buffer[bpointer + 3] = (z & 0x3F) + 61;
bpointer += 4;
19a0: fa 16 cp r15, r26
19a2: e0 f5 brcc .+120 ; 0x1a1c <base64_send+0xa4>
19a4: e7 2f mov r30, r23
19a6: ff 27 eor r31, r31
19a8: ed 59 subi r30, 0x9D ; 157
19aa: fb 4f sbci r31, 0xFB ; 251
19ac: 90 81 ld r25, Z
19ae: 21 81 ldd r18, Z+1 ; 0x01
19b0: 62 81 ldd r22, Z+2 ; 0x02
19b2: 7d 5f subi r23, 0xFD ; 253
19b4: ef 2d mov r30, r15
19b6: ff 27 eor r31, r31
19b8: e7 51 subi r30, 0x17 ; 23
19ba: fb 4f sbci r31, 0xFB ; 251
19bc: 89 2f mov r24, r25
19be: 86 95 lsr r24
19c0: 86 95 lsr r24
19c2: 83 5c subi r24, 0xC3 ; 195
19c4: 80 83 st Z, r24
19c6: 89 2f mov r24, r25
19c8: 99 27 eor r25, r25
19ca: 83 70 andi r24, 0x03 ; 3
19cc: 90 70 andi r25, 0x00 ; 0
19ce: 34 e0 ldi r19, 0x04 ; 4
19d0: 88 0f add r24, r24
19d2: 99 1f adc r25, r25
19d4: 3a 95 dec r19
19d6: e1 f7 brne .-8 ; 0x19d0 <base64_send+0x58>
19d8: 42 2f mov r20, r18
19da: 55 27 eor r21, r21
19dc: 9a 01 movw r18, r20
19de: 94 e0 ldi r25, 0x04 ; 4
19e0: 36 95 lsr r19
19e2: 27 95 ror r18
19e4: 9a 95 dec r25
19e6: e1 f7 brne .-8 ; 0x19e0 <base64_send+0x68>
19e8: 82 2b or r24, r18
19ea: 83 5c subi r24, 0xC3 ; 195
19ec: 81 83 std Z+1, r24 ; 0x01
19ee: 4f 70 andi r20, 0x0F ; 15
19f0: 50 70 andi r21, 0x00 ; 0
19f2: 44 0f add r20, r20
19f4: 55 1f adc r21, r21
19f6: 44 0f add r20, r20
19f8: 55 1f adc r21, r21
19fa: 86 2f mov r24, r22
19fc: 99 27 eor r25, r25
19fe: 16 e0 ldi r17, 0x06 ; 6
1a00: 96 95 lsr r25
1a02: 87 95 ror r24
1a04: 1a 95 dec r17
1a06: e1 f7 brne .-8 ; 0x1a00 <base64_send+0x88>
1a08: 84 2b or r24, r20
1a0a: 83 5c subi r24, 0xC3 ; 195
1a0c: 82 83 std Z+2, r24 ; 0x02
1a0e: 6f 73 andi r22, 0x3F ; 63
1a10: 63 5c subi r22, 0xC3 ; 195
1a12: 63 83 std Z+3, r22 ; 0x03
1a14: 84 e0 ldi r24, 0x04 ; 4
1a16: f8 0e add r15, r24
1a18: 7a 17 cp r23, r26
1a1a: 20 f2 brcs .-120 ; 0x19a4 <base64_send+0x2c>
}
 
checksum = 0;
1a1c: 20 e0 ldi r18, 0x00 ; 0
1a1e: 30 e0 ldi r19, 0x00 ; 0
for(a=0;a<bpointer;a++)
1a20: c0 e0 ldi r28, 0x00 ; 0
1a22: cf 15 cp r28, r15
1a24: 40 f4 brcc .+16 ; 0x1a36 <base64_send+0xbe>
1a26: e9 ee ldi r30, 0xE9 ; 233
1a28: f4 e0 ldi r31, 0x04 ; 4
checksum += r_buffer[a];
1a2a: 81 91 ld r24, Z+
1a2c: 28 0f add r18, r24
1a2e: 31 1d adc r19, r1
1a30: cf 5f subi r28, 0xFF ; 255
1a32: cf 15 cp r28, r15
1a34: d0 f3 brcs .-12 ; 0x1a2a <base64_send+0xb2>
checksum %= 4096;
1a36: 3f 70 andi r19, 0x0F ; 15
r_buffer[bpointer] = (checksum / 64) + 61;
1a38: ef 2d mov r30, r15
1a3a: ff 27 eor r31, r31
1a3c: e7 51 subi r30, 0x17 ; 23
1a3e: fb 4f sbci r31, 0xFB ; 251
1a40: c9 01 movw r24, r18
1a42: c6 e0 ldi r28, 0x06 ; 6
1a44: 96 95 lsr r25
1a46: 87 95 ror r24
1a48: ca 95 dec r28
1a4a: e1 f7 brne .-8 ; 0x1a44 <base64_send+0xcc>
1a4c: 83 5c subi r24, 0xC3 ; 195
1a4e: 80 83 st Z, r24
r_buffer[bpointer + 1] = (checksum % 64) + 61;
1a50: 2f 73 andi r18, 0x3F ; 63
1a52: 30 70 andi r19, 0x00 ; 0
1a54: 82 2f mov r24, r18
1a56: 83 5c subi r24, 0xC3 ; 195
1a58: 81 83 std Z+1, r24 ; 0x01
r_buffer[bpointer + 2] = 13;
1a5a: 8d e0 ldi r24, 0x0D ; 13
1a5c: 82 83 std Z+2, r24 ; 0x02
r_buffer[bpointer + 3] = 0;
1a5e: 13 82 std Z+3, r1 ; 0x03
bpointer += 3;
1a60: 83 e0 ldi r24, 0x03 ; 3
1a62: f8 0e add r15, r24
for(a=0;a<bpointer;a++)
1a64: c3 81 ldd r28, Z+3 ; 0x03
1a66: cf 15 cp r28, r15
1a68: 50 f4 brcc .+20 ; 0x1a7e <base64_send+0x106>
1a6a: 09 ee ldi r16, 0xE9 ; 233
1a6c: 14 e0 ldi r17, 0x04 ; 4
RS232_send(r_buffer[a]);
1a6e: f8 01 movw r30, r16
1a70: 81 91 ld r24, Z+
1a72: 8f 01 movw r16, r30
1a74: 0e 94 44 0c call 0x1888 <RS232_send>
1a78: cf 5f subi r28, 0xFF ; 255
1a7a: cf 15 cp r28, r15
1a7c: c0 f3 brcs .-16 ; 0x1a6e <base64_send+0xf6>
1a7e: cf 91 pop r28
1a80: 1f 91 pop r17
1a82: 0f 91 pop r16
1a84: ff 90 pop r15
1a86: 08 95 ret
 
00001a88 <displ_get_text>:
uint8_t displ_page;
 
 
void displ_get_text(uint8_t number)
{
1a88: 1f 93 push r17
1a8a: cf 93 push r28
1a8c: df 93 push r29
1a8e: cd b7 in r28, 0x3d ; 61
1a90: de b7 in r29, 0x3e ; 62
1a92: 61 97 sbiw r28, 0x11 ; 17
1a94: 0f b6 in r0, 0x3f ; 63
1a96: f8 94 cli
1a98: de bf out 0x3e, r29 ; 62
1a9a: 0f be out 0x3f, r0 ; 63
1a9c: cd bf out 0x3d, r28 ; 61
1a9e: 18 2f mov r17, r24
uint8_t text[17];
uint8_t i;
p_buffer[0] = '#';
1aa0: 83 e2 ldi r24, 0x23 ; 35
1aa2: 80 93 63 04 sts 0x0463, r24
p_buffer[1] = 'a';
1aa6: 81 e6 ldi r24, 0x61 ; 97
1aa8: 80 93 64 04 sts 0x0464, r24
p_buffer[2] = 'a';
1aac: 80 93 65 04 sts 0x0465, r24
p_buffer[3] = number;
1ab0: 10 93 66 04 sts 0x0466, r17
p_buffer[4] = 0;
1ab4: 10 92 67 04 sts 0x0467, r1
p_buffer[5] = 0;
1ab8: 10 92 68 04 sts 0x0468, r1
base64_send(6);
1abc: 86 e0 ldi r24, 0x06 ; 6
1abe: 0e 94 bc 0c call 0x1978 <base64_send>
 
do
{
get_message();
1ac2: 0e 94 95 0c call 0x192a <get_message>
}
1ac6: 80 91 ea 04 lds r24, 0x04EA
1aca: 81 34 cpi r24, 0x41 ; 65
1acc: d1 f7 brne .-12 ; 0x1ac2 <displ_get_text+0x3a>
1ace: de 01 movw r26, r28
1ad0: 11 96 adiw r26, 0x01 ; 1
1ad2: e3 e6 ldi r30, 0x63 ; 99
1ad4: f4 e0 ldi r31, 0x04 ; 4
1ad6: 9f e0 ldi r25, 0x0F ; 15
while (r_buffer[1] != 'A');
 
for (i=0;i<16;i++)
text[i] = p_buffer[i];
1ad8: 81 91 ld r24, Z+
1ada: 8d 93 st X+, r24
1adc: 91 50 subi r25, 0x01 ; 1
1ade: 97 ff sbrs r25, 7
1ae0: fb cf rjmp .-10 ; 0x1ad8 <displ_get_text+0x50>
text[16] = 0x00;
1ae2: 19 8a std Y+17, r1 ; 0x11
lcd_print_at(0,(number & 0x07),text,0);
1ae4: 17 70 andi r17, 0x07 ; 7
1ae6: 29 89 ldd r18, Y+17 ; 0x11
1ae8: ae 01 movw r20, r28
1aea: 4f 5f subi r20, 0xFF ; 255
1aec: 5f 4f sbci r21, 0xFF ; 255
1aee: 61 2f mov r22, r17
1af0: 82 2f mov r24, r18
1af2: 0e 94 1d 09 call 0x123a <lcd_print_at>
1af6: 61 96 adiw r28, 0x11 ; 17
1af8: 0f b6 in r0, 0x3f ; 63
1afa: f8 94 cli
1afc: de bf out 0x3e, r29 ; 62
1afe: 0f be out 0x3f, r0 ; 63
1b00: cd bf out 0x3d, r28 ; 61
1b02: df 91 pop r29
1b04: cf 91 pop r28
1b06: 1f 91 pop r17
1b08: 08 95 ret
 
00001b0a <displ_values>:
}
 
void displ_values(void)
{
1b0a: cf 92 push r12
1b0c: df 92 push r13
1b0e: ef 92 push r14
1b10: ff 92 push r15
1b12: 0f 93 push r16
1b14: 1f 93 push r17
1b16: cf 93 push r28
1b18: df 93 push r29
1b1a: cd b7 in r28, 0x3d ; 61
1b1c: de b7 in r29, 0x3e ; 62
1b1e: 61 97 sbiw r28, 0x11 ; 17
1b20: 0f b6 in r0, 0x3f ; 63
1b22: f8 94 cli
1b24: de bf out 0x3e, r29 ; 62
1b26: 0f be out 0x3f, r0 ; 63
1b28: cd bf out 0x3d, r28 ; 61
uint8_t displ_page, i;
int16_t value;
uint8_t text[17];
 
displ_page = 0; // Page 0..3 (4 Pages zu je 8 Werte)
1b2a: 00 e0 ldi r16, 0x00 ; 0
lcd_cls(); // LCD löschen
1b2c: 0e 94 36 07 call 0xe6c <lcd_cls>
do
{
for (i=0;i<8;i++) // Texte lesen und anzeigen
1b30: 10 e0 ldi r17, 0x00 ; 0
displ_get_text(i+displ_page*8);
1b32: c0 2e mov r12, r16
1b34: dd 24 eor r13, r13
1b36: c6 01 movw r24, r12
1b38: 53 e0 ldi r21, 0x03 ; 3
1b3a: 88 0f add r24, r24
1b3c: 99 1f adc r25, r25
1b3e: 5a 95 dec r21
1b40: e1 f7 brne .-8 ; 0x1b3a <displ_values+0x30>
1b42: 81 0f add r24, r17
1b44: 0e 94 44 0d call 0x1a88 <displ_get_text>
1b48: 1f 5f subi r17, 0xFF ; 255
1b4a: 18 30 cpi r17, 0x08 ; 8
1b4c: 90 f3 brcs .-28 ; 0x1b32 <displ_values+0x28>
do
{
get_message();
1b4e: 0e 94 95 0c call 0x192a <get_message>
if(r_buffer[1] == 'D')
1b52: 80 91 ea 04 lds r24, 0x04EA
1b56: 84 34 cpi r24, 0x44 ; 68
1b58: 91 f5 brne .+100 ; 0x1bbe <displ_values+0xb4>
{
for (i=0;i<8;i++)
1b5a: 10 e0 ldi r17, 0x00 ; 0
1b5c: ee 24 eor r14, r14
1b5e: ff 24 eor r15, r15
{
value = p_buffer[i*2+displ_page*16+2] + 256*p_buffer[i*2+displ_page*16+3];
1b60: f6 01 movw r30, r12
1b62: 43 e0 ldi r20, 0x03 ; 3
1b64: ee 0f add r30, r30
1b66: ff 1f adc r31, r31
1b68: 4a 95 dec r20
1b6a: e1 f7 brne .-8 ; 0x1b64 <displ_values+0x5a>
1b6c: ee 0d add r30, r14
1b6e: ff 1d adc r31, r15
1b70: ee 0f add r30, r30
1b72: ff 1f adc r31, r31
1b74: ed 59 subi r30, 0x9D ; 157
1b76: fb 4f sbci r31, 0xFB ; 251
1b78: 22 81 ldd r18, Z+2 ; 0x02
1b7a: 83 81 ldd r24, Z+3 ; 0x03
1b7c: 99 27 eor r25, r25
1b7e: 98 2f mov r25, r24
1b80: 88 27 eor r24, r24
itoa(value,text,10);
1b82: 4a e0 ldi r20, 0x0A ; 10
1b84: 50 e0 ldi r21, 0x00 ; 0
1b86: be 01 movw r22, r28
1b88: 6f 5f subi r22, 0xFF ; 255
1b8a: 7f 4f sbci r23, 0xFF ; 255
1b8c: 82 0f add r24, r18
1b8e: 91 1d adc r25, r1
1b90: 0e 94 cf 12 call 0x259e <itoa>
lcd_print_atp(14,i,PSTR(" "),0);
1b94: 20 e0 ldi r18, 0x00 ; 0
1b96: 44 e5 ldi r20, 0x54 ; 84
1b98: 56 e0 ldi r21, 0x06 ; 6
1b9a: 61 2f mov r22, r17
1b9c: 8e e0 ldi r24, 0x0E ; 14
1b9e: 0e 94 e1 08 call 0x11c2 <lcd_print_atp>
lcd_print_at(14,i,text,0);
1ba2: 20 e0 ldi r18, 0x00 ; 0
1ba4: ae 01 movw r20, r28
1ba6: 4f 5f subi r20, 0xFF ; 255
1ba8: 5f 4f sbci r21, 0xFF ; 255
1baa: 61 2f mov r22, r17
1bac: 8e e0 ldi r24, 0x0E ; 14
1bae: 0e 94 1d 09 call 0x123a <lcd_print_at>
1bb2: 1f 5f subi r17, 0xFF ; 255
1bb4: 08 94 sec
1bb6: e1 1c adc r14, r1
1bb8: f1 1c adc r15, r1
1bba: 18 30 cpi r17, 0x08 ; 8
1bbc: 88 f2 brcs .-94 ; 0x1b60 <displ_values+0x56>
}
}
}
1bbe: 80 91 e6 04 lds r24, 0x04E6
1bc2: 88 23 and r24, r24
1bc4: 21 f2 breq .-120 ; 0x1b4e <displ_values+0x44>
while (key == 0x00);
if (key == 0x01)
1bc6: 80 91 e6 04 lds r24, 0x04E6
1bca: 81 30 cpi r24, 0x01 ; 1
1bcc: 09 f4 brne .+2 ; 0x1bd0 <displ_values+0xc6>
displ_page++;
1bce: 0f 5f subi r16, 0xFF ; 255
if (key == 0x02)
1bd0: 80 91 e6 04 lds r24, 0x04E6
1bd4: 82 30 cpi r24, 0x02 ; 2
1bd6: 09 f4 brne .+2 ; 0x1bda <displ_values+0xd0>
displ_page--;
1bd8: 01 50 subi r16, 0x01 ; 1
displ_page &= 0x03;
1bda: 03 70 andi r16, 0x03 ; 3
}
1bdc: 80 91 e6 04 lds r24, 0x04E6
1be0: 88 30 cpi r24, 0x08 ; 8
1be2: 09 f0 breq .+2 ; 0x1be6 <displ_values+0xdc>
1be4: a5 cf rjmp .-182 ; 0x1b30 <displ_values+0x26>
1be6: 61 96 adiw r28, 0x11 ; 17
1be8: 0f b6 in r0, 0x3f ; 63
1bea: f8 94 cli
1bec: de bf out 0x3e, r29 ; 62
1bee: 0f be out 0x3f, r0 ; 63
1bf0: cd bf out 0x3d, r28 ; 61
1bf2: df 91 pop r29
1bf4: cf 91 pop r28
1bf6: 1f 91 pop r17
1bf8: 0f 91 pop r16
1bfa: ff 90 pop r15
1bfc: ef 90 pop r14
1bfe: df 90 pop r13
1c00: cf 90 pop r12
1c02: 08 95 ret
 
00001c04 <read_parameter>:
 
// Parameter lesen, editieren und zurückschreiben
 
uint8_t read_parameter (uint8_t number) // Number = Parameter-Set#
{
1c04: cf 93 push r28
uint8_t timeout;
timeout = 0;
1c06: c0 e0 ldi r28, 0x00 ; 0
p_buffer[0] = '#'; // Parameter anfordern
1c08: 93 e2 ldi r25, 0x23 ; 35
1c0a: 90 93 63 04 sts 0x0463, r25
p_buffer[1] = 'a';
1c0e: 91 e6 ldi r25, 0x61 ; 97
1c10: 90 93 64 04 sts 0x0464, r25
p_buffer[2] = 'q';
1c14: 91 e7 ldi r25, 0x71 ; 113
1c16: 90 93 65 04 sts 0x0465, r25
p_buffer[3] = number;
1c1a: 80 93 66 04 sts 0x0466, r24
p_buffer[4] = 0;
1c1e: c0 93 67 04 sts 0x0467, r28
p_buffer[5] = 0;
1c22: c0 93 68 04 sts 0x0468, r28
base64_send(6);
1c26: 86 e0 ldi r24, 0x06 ; 6
1c28: 0e 94 bc 0c call 0x1978 <base64_send>
 
do // warten, bis die Parameter gesendet werden
{
if (get_message() == 1) // Fehler bei der Übertragung?
1c2c: 0e 94 95 0c call 0x192a <get_message>
1c30: 81 30 cpi r24, 0x01 ; 1
1c32: 09 f4 brne .+2 ; 0x1c36 <read_parameter+0x32>
timeout = 30; // Timeout sofort auf Endwert setzen
1c34: ce e1 ldi r28, 0x1E ; 30
timeout ++;
1c36: cf 5f subi r28, 0xFF ; 255
}
1c38: 80 91 ea 04 lds r24, 0x04EA
1c3c: 8c 54 subi r24, 0x4C ; 76
1c3e: 85 30 cpi r24, 0x05 ; 5
1c40: 10 f0 brcs .+4 ; 0x1c46 <read_parameter+0x42>
1c42: ce 31 cpi r28, 0x1E ; 30
1c44: 98 f3 brcs .-26 ; 0x1c2c <read_parameter+0x28>
while (((r_buffer[1] < 'L') || (r_buffer[1] > 'P')) && (timeout < 30)); // warten, bis Parameter empfangen wurden oder ein Timeout auftrat
if (timeout >= 30) // Wenn ein Timeout (=Fehler) auftrat, eine 1 zurückgeben, ansonsten 0
1c46: ce 31 cpi r28, 0x1E ; 30
1c48: 18 f0 brcs .+6 ; 0x1c50 <read_parameter+0x4c>
return 1;
1c4a: 81 e0 ldi r24, 0x01 ; 1
1c4c: 90 e0 ldi r25, 0x00 ; 0
1c4e: 02 c0 rjmp .+4 ; 0x1c54 <read_parameter+0x50>
else
return 0;
1c50: 80 e0 ldi r24, 0x00 ; 0
1c52: 90 e0 ldi r25, 0x00 ; 0
1c54: cf 91 pop r28
1c56: 08 95 ret
 
00001c58 <write_parameter>:
}
 
void write_parameter(uint8_t number) // Schreibe Parameter-Satz
{
1c58: 98 2f mov r25, r24
uint8_t i;
if (number <= 5)
1c5a: 86 30 cpi r24, 0x06 ; 6
1c5c: b8 f4 brcc .+46 ; 0x1c8c <write_parameter+0x34>
1c5e: e9 ea ldi r30, 0xA9 ; 169
1c60: f4 e0 ldi r31, 0x04 ; 4
1c62: 26 e4 ldi r18, 0x46 ; 70
{
 
for (i=0;i<71;i++) // Den gesamten Parameter-Puffer um 3 Bytes nach hinten verschieben
p_buffer[(70-i)+3] = p_buffer[70-i];
1c64: 80 81 ld r24, Z
1c66: 83 83 std Z+3, r24 ; 0x03
1c68: 21 50 subi r18, 0x01 ; 1
1c6a: 31 97 sbiw r30, 0x01 ; 1
1c6c: 27 ff sbrs r18, 7
1c6e: fa cf rjmp .-12 ; 0x1c64 <write_parameter+0xc>
p_buffer[0] = '#'; // Befehl zum Schreiben der Parameter
1c70: 83 e2 ldi r24, 0x23 ; 35
1c72: 80 93 63 04 sts 0x0463, r24
p_buffer[1] = 'a';
1c76: 81 e6 ldi r24, 0x61 ; 97
1c78: 80 93 64 04 sts 0x0464, r24
p_buffer[2] = number + 'k'; // Nummer des Parameters
1c7c: 95 59 subi r25, 0x95 ; 149
1c7e: 90 93 65 04 sts 0x0465, r25
p_buffer[74] = 0;
1c82: 10 92 ad 04 sts 0x04AD, r1
base64_send(75); // Parameter in base64 kodieren und senden, 75 Bytes
1c86: 8b e4 ldi r24, 0x4B ; 75
1c88: 0e 94 bc 0c call 0x1978 <base64_send>
1c8c: 08 95 ret
 
00001c8e <binary>:
}
}
 
void binary (uint8_t data, uint8_t *feld) // Wandelt eine 8-Bit Zahl in eine Binärzahl um (Array mit 8 Elementen)
{ // Wird für die Flags (Loop + Grundkonfiguration) benötigt
1c8e: 9b 01 movw r18, r22
1c90: 68 2f mov r22, r24
1c92: 77 27 eor r23, r23
1c94: 51 e0 ldi r21, 0x01 ; 1
1c96: f9 01 movw r30, r18
1c98: 20 e0 ldi r18, 0x00 ; 0
1c9a: 30 e0 ldi r19, 0x00 ; 0
1c9c: 47 e0 ldi r20, 0x07 ; 7
uint8_t i;
i=0;
for (i=0;i<8;i++)
{
if ((1<<i) & data)
1c9e: cb 01 movw r24, r22
1ca0: 02 2e mov r0, r18
1ca2: 02 c0 rjmp .+4 ; 0x1ca8 <binary+0x1a>
1ca4: 95 95 asr r25
1ca6: 87 95 ror r24
1ca8: 0a 94 dec r0
1caa: e2 f7 brpl .-8 ; 0x1ca4 <binary+0x16>
1cac: 80 ff sbrs r24, 0
1cae: 02 c0 rjmp .+4 ; 0x1cb4 <binary+0x26>
feld[i] = 1;
1cb0: 50 83 st Z, r21
1cb2: 01 c0 rjmp .+2 ; 0x1cb6 <binary+0x28>
else
feld[i] = 0;
1cb4: 10 82 st Z, r1
1cb6: 41 50 subi r20, 0x01 ; 1
1cb8: 2f 5f subi r18, 0xFF ; 255
1cba: 3f 4f sbci r19, 0xFF ; 255
1cbc: 31 96 adiw r30, 0x01 ; 1
1cbe: 47 ff sbrs r20, 7
1cc0: ee cf rjmp .-36 ; 0x1c9e <binary+0x10>
1cc2: 08 95 ret
 
00001cc4 <bindec>:
}
}
 
uint8_t bindec (uint8_t *feld) // wandelt eine Binärzahl (im Array) in eine 8-Bit Zahl
{ // Wird für die Flags (Loop + Grundkonfiguration) benötigt
uint8_t i;
uint8_t result;
result = 0;
1cc4: 50 e0 ldi r21, 0x00 ; 0
1cc6: 61 e0 ldi r22, 0x01 ; 1
1cc8: 70 e0 ldi r23, 0x00 ; 0
1cca: fc 01 movw r30, r24
1ccc: 20 e0 ldi r18, 0x00 ; 0
1cce: 30 e0 ldi r19, 0x00 ; 0
1cd0: 47 e0 ldi r20, 0x07 ; 7
for (i=0;i<8;i++)
{
if (feld[i] == 1)
1cd2: 81 91 ld r24, Z+
1cd4: 81 30 cpi r24, 0x01 ; 1
1cd6: 41 f4 brne .+16 ; 0x1ce8 <bindec+0x24>
result += 1<<i;
1cd8: cb 01 movw r24, r22
1cda: 02 2e mov r0, r18
1cdc: 02 c0 rjmp .+4 ; 0x1ce2 <bindec+0x1e>
1cde: 88 0f add r24, r24
1ce0: 99 1f adc r25, r25
1ce2: 0a 94 dec r0
1ce4: e2 f7 brpl .-8 ; 0x1cde <bindec+0x1a>
1ce6: 58 0f add r21, r24
1ce8: 41 50 subi r20, 0x01 ; 1
1cea: 2f 5f subi r18, 0xFF ; 255
1cec: 3f 4f sbci r19, 0xFF ; 255
1cee: 47 ff sbrs r20, 7
1cf0: f0 cf rjmp .-32 ; 0x1cd2 <bindec+0xe>
}
return result;
}
1cf2: 85 2f mov r24, r21
1cf4: 99 27 eor r25, r25
1cf6: 08 95 ret
 
00001cf8 <decimal>:
 
 
 
 
void decimal (uint8_t data, uint8_t *text) // wandelt Wert in rechtsbündigen Text um
{ // (schneller/kleiner als printf())
1cf8: 28 2f mov r18, r24
1cfa: fb 01 movw r30, r22
text[0] = data/100;
1cfc: 34 e6 ldi r19, 0x64 ; 100
1cfe: 63 2f mov r22, r19
1d00: 0e 94 16 13 call 0x262c <__udivmodqi4>
1d04: 58 2f mov r21, r24
data -= (text[0] * 100);
1d06: 83 9f mul r24, r19
1d08: c0 01 movw r24, r0
1d0a: 11 24 eor r1, r1
1d0c: 28 1b sub r18, r24
text[1] = data/10;
1d0e: 3a e0 ldi r19, 0x0A ; 10
1d10: 82 2f mov r24, r18
1d12: 63 2f mov r22, r19
1d14: 0e 94 16 13 call 0x262c <__udivmodqi4>
1d18: 48 2f mov r20, r24
data -= (text[1] *10);
1d1a: 83 9f mul r24, r19
1d1c: c0 01 movw r24, r0
1d1e: 11 24 eor r1, r1
1d20: 28 1b sub r18, r24
text[2] = data + 0x30;
1d22: 20 5d subi r18, 0xD0 ; 208
1d24: 22 83 std Z+2, r18 ; 0x02
text[0] += 0x30;
1d26: 85 2f mov r24, r21
1d28: 80 5d subi r24, 0xD0 ; 208
1d2a: 80 83 st Z, r24
text[1] += 0x30;
1d2c: 40 5d subi r20, 0xD0 ; 208
1d2e: 41 83 std Z+1, r20 ; 0x01
 
if (text[0] == 0x30)
1d30: 80 33 cpi r24, 0x30 ; 48
1d32: 29 f4 brne .+10 ; 0x1d3e <decimal+0x46>
{
text[0] = 0x20;
1d34: 80 e2 ldi r24, 0x20 ; 32
1d36: 80 83 st Z, r24
if (text[1] == 0x30)
1d38: 40 33 cpi r20, 0x30 ; 48
1d3a: 09 f4 brne .+2 ; 0x1d3e <decimal+0x46>
text[1] = 0x20;
1d3c: 81 83 std Z+1, r24 ; 0x01
}
text[3] = 0x00;
1d3e: 13 82 std Z+3, r1 ; 0x03
1d40: 08 95 ret
 
00001d42 <show_parameter>:
}
 
uint8_t show_parameter (uint8_t number) // Zeigt eine Parameter-Seite an und gibt die ausgewählte Zeile zurück
{
1d42: 9f 92 push r9
1d44: af 92 push r10
1d46: bf 92 push r11
1d48: cf 92 push r12
1d4a: df 92 push r13
1d4c: ef 92 push r14
1d4e: ff 92 push r15
1d50: 0f 93 push r16
1d52: 1f 93 push r17
1d54: cf 93 push r28
1d56: df 93 push r29
1d58: cd b7 in r28, 0x3d ; 61
1d5a: de b7 in r29, 0x3e ; 62
1d5c: a1 97 sbiw r28, 0x21 ; 33
1d5e: 0f b6 in r0, 0x3f ; 63
1d60: f8 94 cli
1d62: de bf out 0x3e, r29 ; 62
1d64: 0f be out 0x3f, r0 ; 63
1d66: cd bf out 0x3d, r28 ; 61
1d68: 08 2f mov r16, r24
uint8_t i;
uint8_t line;
uint8_t text[25];
uint8_t bin[8];
line = 0;
1d6a: 99 24 eor r9, r9
if (number > 1)
1d6c: 82 30 cpi r24, 0x02 ; 2
1d6e: 08 f4 brcc .+2 ; 0x1d72 <show_parameter+0x30>
1d70: 3e c0 rjmp .+124 ; 0x1dee <show_parameter+0xac>
{
for (i = 0; i<66; i++)
1d72: 19 2d mov r17, r9
1d74: 4b e5 ldi r20, 0x5B ; 91
1d76: a4 2e mov r10, r20
1d78: 46 e0 ldi r20, 0x06 ; 6
1d7a: b4 2e mov r11, r20
1d7c: 33 e6 ldi r19, 0x63 ; 99
1d7e: c3 2e mov r12, r19
1d80: 34 e0 ldi r19, 0x04 ; 4
1d82: d3 2e mov r13, r19
1d84: 2d e7 ldi r18, 0x7D ; 125
1d86: e2 2e mov r14, r18
1d88: 2a e0 ldi r18, 0x0A ; 10
1d8a: f2 2e mov r15, r18
{
if (pgm_read_byte(p_limits+i*3+2) == number)
1d8c: f7 01 movw r30, r14
1d8e: 84 91 lpm r24, Z
1d90: 80 17 cp r24, r16
1d92: f1 f4 brne .+60 ; 0x1dd0 <show_parameter+0x8e>
{
array[line] = i;
1d94: e9 2d mov r30, r9
1d96: ff 27 eor r31, r31
1d98: e1 58 subi r30, 0x81 ; 129
1d9a: fa 4f sbci r31, 0xFA ; 250
1d9c: 10 83 st Z, r17
decimal(p_buffer[i],text);
1d9e: be 01 movw r22, r28
1da0: 6f 5f subi r22, 0xFF ; 255
1da2: 7f 4f sbci r23, 0xFF ; 255
1da4: f6 01 movw r30, r12
1da6: 80 81 ld r24, Z
1da8: 0e 94 7c 0e call 0x1cf8 <decimal>
lcd_print_at(0,line,text,0);
1dac: 20 e0 ldi r18, 0x00 ; 0
1dae: ae 01 movw r20, r28
1db0: 4f 5f subi r20, 0xFF ; 255
1db2: 5f 4f sbci r21, 0xFF ; 255
1db4: 69 2d mov r22, r9
1db6: 82 2f mov r24, r18
1db8: 0e 94 1d 09 call 0x123a <lcd_print_at>
lcd_print_atp(5,line,parameter[i],0);
1dbc: 20 e0 ldi r18, 0x00 ; 0
1dbe: a5 01 movw r20, r10
1dc0: 69 2d mov r22, r9
1dc2: 85 e0 ldi r24, 0x05 ; 5
1dc4: 0e 94 e1 08 call 0x11c2 <lcd_print_atp>
if (line <= 7)
1dc8: f7 e0 ldi r31, 0x07 ; 7
1dca: f9 15 cp r31, r9
1dcc: 08 f0 brcs .+2 ; 0x1dd0 <show_parameter+0x8e>
line++;
1dce: 93 94 inc r9
1dd0: 1f 5f subi r17, 0xFF ; 255
1dd2: 83 e0 ldi r24, 0x03 ; 3
1dd4: 90 e0 ldi r25, 0x00 ; 0
1dd6: e8 0e add r14, r24
1dd8: f9 1e adc r15, r25
1dda: 08 94 sec
1ddc: c1 1c adc r12, r1
1dde: d1 1c adc r13, r1
1de0: e0 e1 ldi r30, 0x10 ; 16
1de2: f0 e0 ldi r31, 0x00 ; 0
1de4: ae 0e add r10, r30
1de6: bf 1e adc r11, r31
1de8: 12 34 cpi r17, 0x42 ; 66
1dea: 80 f2 brcs .-96 ; 0x1d8c <show_parameter+0x4a>
1dec: 5f c0 rjmp .+190 ; 0x1eac <show_parameter+0x16a>
}
}
}
else
{ // Sonderfälle: Binäre Eingabe
if (number == 1)
1dee: 81 30 cpi r24, 0x01 ; 1
1df0: 71 f5 brne .+92 ; 0x1e4e <show_parameter+0x10c>
{
binary(p_buffer[52],bin); // Loop-Config
1df2: be 01 movw r22, r28
1df4: 66 5e subi r22, 0xE6 ; 230
1df6: 7f 4f sbci r23, 0xFF ; 255
1df8: 80 91 97 04 lds r24, 0x0497
1dfc: 0e 94 47 0e call 0x1c8e <binary>
text[1] = 0x00;
1e00: 9a 82 std Y+2, r9 ; 0x02
for (i=0;i<4;i++)
1e02: 19 2d mov r17, r9
1e04: 9b eb ldi r25, 0xBB ; 187
1e06: c9 2e mov r12, r25
1e08: 99 e0 ldi r25, 0x09 ; 9
1e0a: d9 2e mov r13, r25
1e0c: ee 24 eor r14, r14
1e0e: ff 24 eor r15, r15
{
text[0] = bin[i] + 0x30;
1e10: ce 01 movw r24, r28
1e12: 01 96 adiw r24, 0x01 ; 1
1e14: f7 01 movw r30, r14
1e16: e8 0f add r30, r24
1e18: f9 1f adc r31, r25
1e1a: 21 8d ldd r18, Z+25 ; 0x19
1e1c: 20 5d subi r18, 0xD0 ; 208
1e1e: 29 83 std Y+1, r18 ; 0x01
lcd_print_at(0,i,text,0);
1e20: 20 e0 ldi r18, 0x00 ; 0
1e22: ac 01 movw r20, r24
1e24: 61 2f mov r22, r17
1e26: 82 2f mov r24, r18
1e28: 0e 94 1d 09 call 0x123a <lcd_print_at>
lcd_print_atp(5,i,bin_parameter[i],0);
1e2c: 20 e0 ldi r18, 0x00 ; 0
1e2e: a6 01 movw r20, r12
1e30: 61 2f mov r22, r17
1e32: 85 e0 ldi r24, 0x05 ; 5
1e34: 0e 94 e1 08 call 0x11c2 <lcd_print_atp>
1e38: 1f 5f subi r17, 0xFF ; 255
1e3a: 08 94 sec
1e3c: e1 1c adc r14, r1
1e3e: f1 1c adc r15, r1
1e40: 80 e1 ldi r24, 0x10 ; 16
1e42: 90 e0 ldi r25, 0x00 ; 0
1e44: c8 0e add r12, r24
1e46: d9 1e adc r13, r25
1e48: 14 30 cpi r17, 0x04 ; 4
1e4a: 10 f3 brcs .-60 ; 0x1e10 <show_parameter+0xce>
1e4c: 2f c0 rjmp .+94 ; 0x1eac <show_parameter+0x16a>
}
}
if (number == 0)
1e4e: 88 23 and r24, r24
1e50: 69 f5 brne .+90 ; 0x1eac <show_parameter+0x16a>
{
binary(p_buffer[8],bin); // Config
1e52: be 01 movw r22, r28
1e54: 66 5e subi r22, 0xE6 ; 230
1e56: 7f 4f sbci r23, 0xFF ; 255
1e58: 80 91 6b 04 lds r24, 0x046B
1e5c: 0e 94 47 0e call 0x1c8e <binary>
text[1] = 0x00;
1e60: 9a 82 std Y+2, r9 ; 0x02
for (i=0;i<8;i++)
1e62: 19 2d mov r17, r9
1e64: 8b ef ldi r24, 0xFB ; 251
1e66: c8 2e mov r12, r24
1e68: 89 e0 ldi r24, 0x09 ; 9
1e6a: d8 2e mov r13, r24
1e6c: ee 24 eor r14, r14
1e6e: ff 24 eor r15, r15
{
text[0] = bin[i] + 0x30;
1e70: ce 01 movw r24, r28
1e72: 01 96 adiw r24, 0x01 ; 1
1e74: f7 01 movw r30, r14
1e76: e8 0f add r30, r24
1e78: f9 1f adc r31, r25
1e7a: 21 8d ldd r18, Z+25 ; 0x19
1e7c: 20 5d subi r18, 0xD0 ; 208
1e7e: 29 83 std Y+1, r18 ; 0x01
lcd_print_at(0,i,text,0);
1e80: 20 e0 ldi r18, 0x00 ; 0
1e82: ac 01 movw r20, r24
1e84: 61 2f mov r22, r17
1e86: 82 2f mov r24, r18
1e88: 0e 94 1d 09 call 0x123a <lcd_print_at>
lcd_print_atp(5,i,bin_parameter[i+4],0);
1e8c: 20 e0 ldi r18, 0x00 ; 0
1e8e: a6 01 movw r20, r12
1e90: 61 2f mov r22, r17
1e92: 85 e0 ldi r24, 0x05 ; 5
1e94: 0e 94 e1 08 call 0x11c2 <lcd_print_atp>
1e98: 1f 5f subi r17, 0xFF ; 255
1e9a: 08 94 sec
1e9c: e1 1c adc r14, r1
1e9e: f1 1c adc r15, r1
1ea0: e0 e1 ldi r30, 0x10 ; 16
1ea2: f0 e0 ldi r31, 0x00 ; 0
1ea4: ce 0e add r12, r30
1ea6: df 1e adc r13, r31
1ea8: 18 30 cpi r17, 0x08 ; 8
1eaa: 10 f3 brcs .-60 ; 0x1e70 <show_parameter+0x12e>
}
}
 
}
return line;
}
1eac: 89 2d mov r24, r9
1eae: 99 27 eor r25, r25
1eb0: a1 96 adiw r28, 0x21 ; 33
1eb2: 0f b6 in r0, 0x3f ; 63
1eb4: f8 94 cli
1eb6: de bf out 0x3e, r29 ; 62
1eb8: 0f be out 0x3f, r0 ; 63
1eba: cd bf out 0x3d, r28 ; 61
1ebc: df 91 pop r29
1ebe: cf 91 pop r28
1ec0: 1f 91 pop r17
1ec2: 0f 91 pop r16
1ec4: ff 90 pop r15
1ec6: ef 90 pop r14
1ec8: df 90 pop r13
1eca: cf 90 pop r12
1ecc: bf 90 pop r11
1ece: af 90 pop r10
1ed0: 9f 90 pop r9
1ed2: 08 95 ret
 
00001ed4 <edit_parameter2>:
 
void edit_parameter2 (uint8_t page, uint8_t lines) // Ändern der Parameter einer Seite
{
1ed4: 8f 92 push r8
1ed6: 9f 92 push r9
1ed8: af 92 push r10
1eda: bf 92 push r11
1edc: df 92 push r13
1ede: ef 92 push r14
1ee0: ff 92 push r15
1ee2: 0f 93 push r16
1ee4: 1f 93 push r17
1ee6: cf 93 push r28
1ee8: df 93 push r29
1eea: cd b7 in r28, 0x3d ; 61
1eec: de b7 in r29, 0x3e ; 62
1eee: 62 97 sbiw r28, 0x12 ; 18
1ef0: 0f b6 in r0, 0x3f ; 63
1ef2: f8 94 cli
1ef4: de bf out 0x3e, r29 ; 62
1ef6: 0f be out 0x3f, r0 ; 63
1ef8: cd bf out 0x3d, r28 ; 61
1efa: d8 2e mov r13, r24
uint8_t line;
uint8_t par;
uint8_t min;
uint8_t max;
uint8_t text[10];
uint8_t bin[8];
if (page > 1) // "normale" Parameter-Seiten
1efc: 81 e0 ldi r24, 0x01 ; 1
1efe: 8d 15 cp r24, r13
1f00: 08 f0 brcs .+2 ; 0x1f04 <edit_parameter2+0x30>
1f02: 55 c0 rjmp .+170 ; 0x1fae <edit_parameter2+0xda>
{
line = menu_choose(0,lines-1,4);
1f04: 61 50 subi r22, 0x01 ; 1
1f06: 44 e0 ldi r20, 0x04 ; 4
1f08: 80 e0 ldi r24, 0x00 ; 0
1f0a: 0e 94 86 11 call 0x230c <menu_choose>
1f0e: 08 2f mov r16, r24
if (line != 255) // Wenn line == 255, wurde Escape gedrückt
1f10: 8f 3f cpi r24, 0xFF ; 255
1f12: 09 f4 brne .+2 ; 0x1f16 <edit_parameter2+0x42>
1f14: 4c c0 rjmp .+152 ; 0x1fae <edit_parameter2+0xda>
{
par = p_buffer[array[line]];
1f16: e8 2e mov r14, r24
1f18: ff 24 eor r15, r15
1f1a: f7 01 movw r30, r14
1f1c: e1 58 subi r30, 0x81 ; 129
1f1e: fa 4f sbci r31, 0xFA ; 250
1f20: 80 81 ld r24, Z
1f22: e8 2f mov r30, r24
1f24: ff 27 eor r31, r31
1f26: ed 59 subi r30, 0x9D ; 157
1f28: fb 4f sbci r31, 0xFB ; 251
1f2a: 10 81 ld r17, Z
min = pgm_read_byte(p_limits + par * 3);
max = pgm_read_byte(p_limits + par * 3 + 1);
lcd_print_atp(4,line,PSTR("-"),0);
1f2c: 20 e0 ldi r18, 0x00 ; 0
1f2e: 49 e0 ldi r20, 0x09 ; 9
1f30: 5c e0 ldi r21, 0x0C ; 12
1f32: 60 2f mov r22, r16
1f34: 84 e0 ldi r24, 0x04 ; 4
1f36: 0e 94 e1 08 call 0x11c2 <lcd_print_atp>
while (key != key_nokey);
1f3a: 80 91 e6 04 lds r24, 0x04E6
1f3e: 88 23 and r24, r24
1f40: e1 f7 brne .-8 ; 0x1f3a <edit_parameter2+0x66>
do
{
if (key == key_minus)
1f42: 80 91 e6 04 lds r24, 0x04E6
1f46: 81 30 cpi r24, 0x01 ; 1
1f48: 09 f4 brne .+2 ; 0x1f4c <edit_parameter2+0x78>
{
//if (par > min) // Überprüfung der Parameter auf Bereichsüberschreitung derzeit deaktiviert
par --;
1f4a: 11 50 subi r17, 0x01 ; 1
}
if (key == key_plus)
1f4c: 80 91 e6 04 lds r24, 0x04E6
1f50: 82 30 cpi r24, 0x02 ; 2
1f52: 09 f4 brne .+2 ; 0x1f56 <edit_parameter2+0x82>
{
//if (par < max)
par ++;
1f54: 1f 5f subi r17, 0xFF ; 255
}
decimal(par,text);
1f56: be 01 movw r22, r28
1f58: 6f 5f subi r22, 0xFF ; 255
1f5a: 7f 4f sbci r23, 0xFF ; 255
1f5c: 81 2f mov r24, r17
1f5e: 0e 94 7c 0e call 0x1cf8 <decimal>
lcd_print_at(0,line,text,0);
1f62: 20 e0 ldi r18, 0x00 ; 0
1f64: ae 01 movw r20, r28
1f66: 4f 5f subi r20, 0xFF ; 255
1f68: 5f 4f sbci r21, 0xFF ; 255
1f6a: 60 2f mov r22, r16
1f6c: 82 2f mov r24, r18
1f6e: 0e 94 1d 09 call 0x123a <lcd_print_at>
timer = 20;
1f72: 84 e1 ldi r24, 0x14 ; 20
1f74: 80 93 61 00 sts 0x0061, r24
while (timer > 0);
1f78: 80 91 61 00 lds r24, 0x0061
1f7c: 88 23 and r24, r24
1f7e: e1 f7 brne .-8 ; 0x1f78 <edit_parameter2+0xa4>
}
1f80: 80 91 e6 04 lds r24, 0x04E6
1f84: 84 30 cpi r24, 0x04 ; 4
1f86: 21 f0 breq .+8 ; 0x1f90 <edit_parameter2+0xbc>
1f88: 80 91 e6 04 lds r24, 0x04E6
1f8c: 88 30 cpi r24, 0x08 ; 8
1f8e: c9 f6 brne .-78 ; 0x1f42 <edit_parameter2+0x6e>
while ((key != 0x04) && (key != 0x08));
if (key == 0x08)
1f90: 80 91 e6 04 lds r24, 0x04E6
1f94: 88 30 cpi r24, 0x08 ; 8
1f96: 59 f4 brne .+22 ; 0x1fae <edit_parameter2+0xda>
p_buffer[array[line]] = par;
1f98: ef e7 ldi r30, 0x7F ; 127
1f9a: f5 e0 ldi r31, 0x05 ; 5
1f9c: ee 0e add r14, r30
1f9e: ff 1e adc r15, r31
1fa0: f7 01 movw r30, r14
1fa2: 80 81 ld r24, Z
1fa4: e8 2f mov r30, r24
1fa6: ff 27 eor r31, r31
1fa8: ed 59 subi r30, 0x9D ; 157
1faa: fb 4f sbci r31, 0xFB ; 251
1fac: 10 83 st Z, r17
}
}
if (page == 1) // Spezialfall: Loop-Config (einzelne Bits setzen / löschen)
1fae: f1 e0 ldi r31, 0x01 ; 1
1fb0: df 16 cp r13, r31
1fb2: 09 f0 breq .+2 ; 0x1fb6 <edit_parameter2+0xe2>
1fb4: 6c c0 rjmp .+216 ; 0x208e <edit_parameter2+0x1ba>
{
binary(p_buffer[52],bin);
1fb6: 6b e0 ldi r22, 0x0B ; 11
1fb8: 86 2e mov r8, r22
1fba: 91 2c mov r9, r1
1fbc: 8c 0e add r8, r28
1fbe: 9d 1e adc r9, r29
1fc0: b4 01 movw r22, r8
1fc2: 80 91 97 04 lds r24, 0x0497
1fc6: 0e 94 47 0e call 0x1c8e <binary>
text[1] = 0x00;
1fca: 1a 82 std Y+2, r1 ; 0x02
 
line = menu_choose(0,3,4);
1fcc: 44 e0 ldi r20, 0x04 ; 4
1fce: 63 e0 ldi r22, 0x03 ; 3
1fd0: 8a 81 ldd r24, Y+2 ; 0x02
1fd2: 0e 94 86 11 call 0x230c <menu_choose>
1fd6: 08 2f mov r16, r24
if (line != 255) // Wenn line == 255, wurde Escape gedrückt
1fd8: 8f 3f cpi r24, 0xFF ; 255
1fda: 09 f4 brne .+2 ; 0x1fde <edit_parameter2+0x10a>
1fdc: c6 c0 rjmp .+396 ; 0x216a <edit_parameter2+0x296>
{
par = bin[line];
1fde: e8 2e mov r14, r24
1fe0: ff 24 eor r15, r15
1fe2: 5e 01 movw r10, r28
1fe4: 08 94 sec
1fe6: a1 1c adc r10, r1
1fe8: b1 1c adc r11, r1
1fea: f7 01 movw r30, r14
1fec: ea 0d add r30, r10
1fee: fb 1d adc r31, r11
1ff0: 12 85 ldd r17, Z+10 ; 0x0a
lcd_print_atp(4,line,PSTR("-"),0);
1ff2: 20 e0 ldi r18, 0x00 ; 0
1ff4: 4b e0 ldi r20, 0x0B ; 11
1ff6: 5c e0 ldi r21, 0x0C ; 12
1ff8: 68 2f mov r22, r24
1ffa: 84 e0 ldi r24, 0x04 ; 4
1ffc: 0e 94 e1 08 call 0x11c2 <lcd_print_atp>
do
{
if (key == key_minus)
2000: 80 91 e6 04 lds r24, 0x04E6
2004: 81 30 cpi r24, 0x01 ; 1
2006: 09 f4 brne .+2 ; 0x200a <edit_parameter2+0x136>
{
par = 0x00;
2008: 10 e0 ldi r17, 0x00 ; 0
}
if (key == key_plus)
200a: 80 91 e6 04 lds r24, 0x04E6
200e: 82 30 cpi r24, 0x02 ; 2
2010: 09 f4 brne .+2 ; 0x2014 <edit_parameter2+0x140>
{
par = 0x01;
2012: 11 e0 ldi r17, 0x01 ; 1
}
text[0] = par+0x30;
2014: 10 5d subi r17, 0xD0 ; 208
2016: 19 83 std Y+1, r17 ; 0x01
2018: 10 53 subi r17, 0x30 ; 48
lcd_print_at(0,line,text,0);
201a: 20 e0 ldi r18, 0x00 ; 0
201c: ae 01 movw r20, r28
201e: 4f 5f subi r20, 0xFF ; 255
2020: 5f 4f sbci r21, 0xFF ; 255
2022: 60 2f mov r22, r16
2024: 82 2f mov r24, r18
2026: 0e 94 1d 09 call 0x123a <lcd_print_at>
timer = 20;
202a: 84 e1 ldi r24, 0x14 ; 20
202c: 80 93 61 00 sts 0x0061, r24
while (timer > 0);
2030: d0 90 61 00 lds r13, 0x0061
2034: dd 20 and r13, r13
2036: e1 f7 brne .-8 ; 0x2030 <edit_parameter2+0x15c>
}
2038: 80 91 e6 04 lds r24, 0x04E6
203c: 88 30 cpi r24, 0x08 ; 8
203e: 21 f0 breq .+8 ; 0x2048 <edit_parameter2+0x174>
2040: 80 91 e6 04 lds r24, 0x04E6
2044: 84 30 cpi r24, 0x04 ; 4
2046: e1 f6 brne .-72 ; 0x2000 <edit_parameter2+0x12c>
while ((key != key_enter) && (key != key_esc));
if (key == key_enter)
2048: 80 91 e6 04 lds r24, 0x04E6
204c: 88 30 cpi r24, 0x08 ; 8
204e: 49 f4 brne .+18 ; 0x2062 <edit_parameter2+0x18e>
{
bin[line] = par;
2050: ea 0c add r14, r10
2052: fb 1c adc r15, r11
2054: f7 01 movw r30, r14
2056: 12 87 std Z+10, r17 ; 0x0a
p_buffer[52] = bindec(bin);
2058: c4 01 movw r24, r8
205a: 0e 94 62 0e call 0x1cc4 <bindec>
205e: 80 93 97 04 sts 0x0497, r24
}
lcd_cls();
2062: 0e 94 36 07 call 0xe6c <lcd_cls>
decimal(p_buffer[52],text);
2066: be 01 movw r22, r28
2068: 6f 5f subi r22, 0xFF ; 255
206a: 7f 4f sbci r23, 0xFF ; 255
206c: 80 91 97 04 lds r24, 0x0497
2070: 0e 94 7c 0e call 0x1cf8 <decimal>
lcd_print(text,0);
2074: 6d 2d mov r22, r13
2076: ce 01 movw r24, r28
2078: 01 96 adiw r24, 0x01 ; 1
207a: 0e 94 ea 08 call 0x11d4 <lcd_print>
timer = 200;
207e: 88 ec ldi r24, 0xC8 ; 200
2080: 80 93 61 00 sts 0x0061, r24
while(timer > 0);
2084: 80 91 61 00 lds r24, 0x0061
2088: 88 23 and r24, r24
208a: e1 f7 brne .-8 ; 0x2084 <edit_parameter2+0x1b0>
208c: 6e c0 rjmp .+220 ; 0x216a <edit_parameter2+0x296>
}
}
if (page == 0) // Spezialfall: Allgemeine Konfiguration (einzelne Bits setzen/löschen)
208e: dd 20 and r13, r13
2090: 09 f0 breq .+2 ; 0x2094 <edit_parameter2+0x1c0>
2092: 6b c0 rjmp .+214 ; 0x216a <edit_parameter2+0x296>
{
binary(p_buffer[8],bin);
2094: 5b e0 ldi r21, 0x0B ; 11
2096: 85 2e mov r8, r21
2098: 91 2c mov r9, r1
209a: 8c 0e add r8, r28
209c: 9d 1e adc r9, r29
209e: b4 01 movw r22, r8
20a0: 80 91 6b 04 lds r24, 0x046B
20a4: 0e 94 47 0e call 0x1c8e <binary>
text[1] = 0x00;
20a8: da 82 std Y+2, r13 ; 0x02
 
line = menu_choose(0,7,4);
20aa: 44 e0 ldi r20, 0x04 ; 4
20ac: 67 e0 ldi r22, 0x07 ; 7
20ae: 8d 2d mov r24, r13
20b0: 0e 94 86 11 call 0x230c <menu_choose>
20b4: 08 2f mov r16, r24
if (line != 255) // Wenn line == 255, wurde Escape gedrückt
20b6: 8f 3f cpi r24, 0xFF ; 255
20b8: 09 f4 brne .+2 ; 0x20bc <edit_parameter2+0x1e8>
20ba: 57 c0 rjmp .+174 ; 0x216a <edit_parameter2+0x296>
{
par = bin[line];
20bc: e8 2e mov r14, r24
20be: ff 24 eor r15, r15
20c0: 5e 01 movw r10, r28
20c2: 08 94 sec
20c4: a1 1c adc r10, r1
20c6: b1 1c adc r11, r1
20c8: f7 01 movw r30, r14
20ca: ea 0d add r30, r10
20cc: fb 1d adc r31, r11
20ce: 12 85 ldd r17, Z+10 ; 0x0a
lcd_print_atp(4,line,PSTR("-"),0);
20d0: 2d 2d mov r18, r13
20d2: 4d e0 ldi r20, 0x0D ; 13
20d4: 5c e0 ldi r21, 0x0C ; 12
20d6: 68 2f mov r22, r24
20d8: 84 e0 ldi r24, 0x04 ; 4
20da: 0e 94 e1 08 call 0x11c2 <lcd_print_atp>
do
{
if (key == key_minus)
20de: 80 91 e6 04 lds r24, 0x04E6
20e2: 81 30 cpi r24, 0x01 ; 1
20e4: 09 f4 brne .+2 ; 0x20e8 <edit_parameter2+0x214>
{
par = 0x00;
20e6: 10 e0 ldi r17, 0x00 ; 0
}
if (key == key_plus)
20e8: 80 91 e6 04 lds r24, 0x04E6
20ec: 82 30 cpi r24, 0x02 ; 2
20ee: 09 f4 brne .+2 ; 0x20f2 <edit_parameter2+0x21e>
{
par = 0x01;
20f0: 11 e0 ldi r17, 0x01 ; 1
}
text[0] = par+0x30;
20f2: 10 5d subi r17, 0xD0 ; 208
20f4: 19 83 std Y+1, r17 ; 0x01
20f6: 10 53 subi r17, 0x30 ; 48
lcd_print_at(0,line,text,0);
20f8: 20 e0 ldi r18, 0x00 ; 0
20fa: ae 01 movw r20, r28
20fc: 4f 5f subi r20, 0xFF ; 255
20fe: 5f 4f sbci r21, 0xFF ; 255
2100: 60 2f mov r22, r16
2102: 82 2f mov r24, r18
2104: 0e 94 1d 09 call 0x123a <lcd_print_at>
timer = 20;
2108: 84 e1 ldi r24, 0x14 ; 20
210a: 80 93 61 00 sts 0x0061, r24
while (timer > 0);
210e: d0 90 61 00 lds r13, 0x0061
2112: dd 20 and r13, r13
2114: e1 f7 brne .-8 ; 0x210e <edit_parameter2+0x23a>
}
2116: 80 91 e6 04 lds r24, 0x04E6
211a: 88 30 cpi r24, 0x08 ; 8
211c: 21 f0 breq .+8 ; 0x2126 <edit_parameter2+0x252>
211e: 80 91 e6 04 lds r24, 0x04E6
2122: 84 30 cpi r24, 0x04 ; 4
2124: e1 f6 brne .-72 ; 0x20de <edit_parameter2+0x20a>
while ((key != key_enter) && (key != key_esc));
if (key == key_enter)
2126: 80 91 e6 04 lds r24, 0x04E6
212a: 88 30 cpi r24, 0x08 ; 8
212c: 49 f4 brne .+18 ; 0x2140 <edit_parameter2+0x26c>
{
bin[line] = par;
212e: ea 0c add r14, r10
2130: fb 1c adc r15, r11
2132: f7 01 movw r30, r14
2134: 12 87 std Z+10, r17 ; 0x0a
p_buffer[8] = bindec(bin);
2136: c4 01 movw r24, r8
2138: 0e 94 62 0e call 0x1cc4 <bindec>
213c: 80 93 6b 04 sts 0x046B, r24
}
lcd_cls();
2140: 0e 94 36 07 call 0xe6c <lcd_cls>
decimal(p_buffer[8],text);
2144: be 01 movw r22, r28
2146: 6f 5f subi r22, 0xFF ; 255
2148: 7f 4f sbci r23, 0xFF ; 255
214a: 80 91 6b 04 lds r24, 0x046B
214e: 0e 94 7c 0e call 0x1cf8 <decimal>
lcd_print(text,0);
2152: 6d 2d mov r22, r13
2154: ce 01 movw r24, r28
2156: 01 96 adiw r24, 0x01 ; 1
2158: 0e 94 ea 08 call 0x11d4 <lcd_print>
timer = 200;
215c: 88 ec ldi r24, 0xC8 ; 200
215e: 80 93 61 00 sts 0x0061, r24
while(timer > 0);
2162: 80 91 61 00 lds r24, 0x0061
2166: 88 23 and r24, r24
2168: e1 f7 brne .-8 ; 0x2162 <edit_parameter2+0x28e>
216a: 62 96 adiw r28, 0x12 ; 18
216c: 0f b6 in r0, 0x3f ; 63
216e: f8 94 cli
2170: de bf out 0x3e, r29 ; 62
2172: 0f be out 0x3f, r0 ; 63
2174: cd bf out 0x3d, r28 ; 61
2176: df 91 pop r29
2178: cf 91 pop r28
217a: 1f 91 pop r17
217c: 0f 91 pop r16
217e: ff 90 pop r15
2180: ef 90 pop r14
2182: df 90 pop r13
2184: bf 90 pop r11
2186: af 90 pop r10
2188: 9f 90 pop r9
218a: 8f 90 pop r8
218c: 08 95 ret
 
0000218e <edit_parameter>:
}
}
}
 
 
void edit_parameter (void) // Blättert die Parameter seitenweise durch, Einsprung vom Hauptmenü
{
218e: 1f 93 push r17
2190: cf 93 push r28
2192: df 93 push r29
2194: cd b7 in r28, 0x3d ; 61
2196: de b7 in r29, 0x3e ; 62
2198: 2f 97 sbiw r28, 0x0f ; 15
219a: 0f b6 in r0, 0x3f ; 63
219c: f8 94 cli
219e: de bf out 0x3e, r29 ; 62
21a0: 0f be out 0x3f, r0 ; 63
21a2: cd bf out 0x3d, r28 ; 61
uint8_t page; // 12 Pages
uint8_t text[15];
uint8_t lines;
uint8_t parameter;
lcd_cls();
21a4: 0e 94 36 07 call 0xe6c <lcd_cls>
lcd_printp(PSTR("Lade Parameter\r\n"),0);
21a8: 60 e0 ldi r22, 0x00 ; 0
21aa: 8f e0 ldi r24, 0x0F ; 15
21ac: 9c e0 ldi r25, 0x0C ; 12
21ae: 0e 94 aa 08 call 0x1154 <lcd_printp>
lcd_printp(PSTR(" 1:\r\n"),0);
21b2: 60 e0 ldi r22, 0x00 ; 0
21b4: 80 e2 ldi r24, 0x20 ; 32
21b6: 9c e0 ldi r25, 0x0C ; 12
21b8: 0e 94 aa 08 call 0x1154 <lcd_printp>
lcd_printp(PSTR(" 2:\r\n"),0);
21bc: 60 e0 ldi r22, 0x00 ; 0
21be: 86 e2 ldi r24, 0x26 ; 38
21c0: 9c e0 ldi r25, 0x0C ; 12
21c2: 0e 94 aa 08 call 0x1154 <lcd_printp>
lcd_printp(PSTR(" 3:\r\n"),0);
21c6: 60 e0 ldi r22, 0x00 ; 0
21c8: 8c e2 ldi r24, 0x2C ; 44
21ca: 9c e0 ldi r25, 0x0C ; 12
21cc: 0e 94 aa 08 call 0x1154 <lcd_printp>
lcd_printp(PSTR(" 4:\r\n"),0);
21d0: 60 e0 ldi r22, 0x00 ; 0
21d2: 82 e3 ldi r24, 0x32 ; 50
21d4: 9c e0 ldi r25, 0x0C ; 12
21d6: 0e 94 aa 08 call 0x1154 <lcd_printp>
lcd_printp(PSTR(" 5:\r\n"),0);
21da: 60 e0 ldi r22, 0x00 ; 0
21dc: 88 e3 ldi r24, 0x38 ; 56
21de: 9c e0 ldi r25, 0x0C ; 12
21e0: 0e 94 aa 08 call 0x1154 <lcd_printp>
parameter = menu_choose(1,5,0);
21e4: 40 e0 ldi r20, 0x00 ; 0
21e6: 65 e0 ldi r22, 0x05 ; 5
21e8: 81 e0 ldi r24, 0x01 ; 1
21ea: 0e 94 86 11 call 0x230c <menu_choose>
 
page = 2;
21ee: 12 e0 ldi r17, 0x02 ; 2
if (read_parameter(parameter) == 1)
21f0: 0e 94 02 0e call 0x1c04 <read_parameter>
21f4: 81 30 cpi r24, 0x01 ; 1
21f6: 41 f4 brne .+16 ; 0x2208 <edit_parameter+0x7a>
{
lcd_print_atp(0,6,PSTR("Timeout"),0);
21f8: 20 e0 ldi r18, 0x00 ; 0
21fa: 4e e3 ldi r20, 0x3E ; 62
21fc: 5c e0 ldi r21, 0x0C ; 12
21fe: 66 e0 ldi r22, 0x06 ; 6
2200: 82 2f mov r24, r18
2202: 0e 94 e1 08 call 0x11c2 <lcd_print_atp>
2206: 5c c0 rjmp .+184 ; 0x22c0 <edit_parameter+0x132>
}
else
{
do
{
lcd_cls();
2208: 0e 94 36 07 call 0xe6c <lcd_cls>
utoa(page,text,10);
220c: 4a e0 ldi r20, 0x0A ; 10
220e: 50 e0 ldi r21, 0x00 ; 0
2210: be 01 movw r22, r28
2212: 6f 5f subi r22, 0xFF ; 255
2214: 7f 4f sbci r23, 0xFF ; 255
2216: 81 2f mov r24, r17
2218: 99 27 eor r25, r25
221a: 0e 94 f0 12 call 0x25e0 <utoa>
lcd_print(text,0);
221e: 60 e0 ldi r22, 0x00 ; 0
2220: ce 01 movw r24, r28
2222: 01 96 adiw r24, 0x01 ; 1
2224: 0e 94 ea 08 call 0x11d4 <lcd_print>
timer = 50;
2228: 82 e3 ldi r24, 0x32 ; 50
222a: 80 93 61 00 sts 0x0061, r24
while (timer > 0);
222e: 80 91 61 00 lds r24, 0x0061
2232: 88 23 and r24, r24
2234: e1 f7 brne .-8 ; 0x222e <edit_parameter+0xa0>
lcd_cls();
2236: 0e 94 36 07 call 0xe6c <lcd_cls>
lines = show_parameter(page);
223a: 81 2f mov r24, r17
223c: 0e 94 a1 0e call 0x1d42 <show_parameter>
2240: 68 2f mov r22, r24
while (key == key_nokey);
2242: 80 91 e6 04 lds r24, 0x04E6
2246: 88 23 and r24, r24
2248: e1 f3 breq .-8 ; 0x2242 <edit_parameter+0xb4>
if (key == key_plus)
224a: 80 91 e6 04 lds r24, 0x04E6
224e: 82 30 cpi r24, 0x02 ; 2
2250: 09 f4 brne .+2 ; 0x2254 <edit_parameter+0xc6>
page++;
2252: 1f 5f subi r17, 0xFF ; 255
if (key == key_minus)
2254: 80 91 e6 04 lds r24, 0x04E6
2258: 81 30 cpi r24, 0x01 ; 1
225a: 09 f4 brne .+2 ; 0x225e <edit_parameter+0xd0>
page--;
225c: 11 50 subi r17, 0x01 ; 1
if (page == 255)
225e: 1f 3f cpi r17, 0xFF ; 255
2260: 11 f4 brne .+4 ; 0x2266 <edit_parameter+0xd8>
page = 12;
2262: 1c e0 ldi r17, 0x0C ; 12
2264: 03 c0 rjmp .+6 ; 0x226c <edit_parameter+0xde>
if (page > 12)
2266: 1d 30 cpi r17, 0x0D ; 13
2268: 08 f0 brcs .+2 ; 0x226c <edit_parameter+0xde>
page = 0;
226a: 10 e0 ldi r17, 0x00 ; 0
if (key == key_enter)
226c: 80 91 e6 04 lds r24, 0x04E6
2270: 88 30 cpi r24, 0x08 ; 8
2272: 19 f4 brne .+6 ; 0x227a <edit_parameter+0xec>
edit_parameter2(page,lines);
2274: 81 2f mov r24, r17
2276: 0e 94 6a 0f call 0x1ed4 <edit_parameter2>
}
227a: 80 91 e6 04 lds r24, 0x04E6
227e: 84 30 cpi r24, 0x04 ; 4
2280: 19 f6 brne .-122 ; 0x2208 <edit_parameter+0x7a>
while (key != key_esc);
lcd_cls();
2282: 0e 94 36 07 call 0xe6c <lcd_cls>
lcd_printp(PSTR("Parameter speichern?\r\n ja\r\n nein"),0);
2286: 60 e0 ldi r22, 0x00 ; 0
2288: 86 e4 ldi r24, 0x46 ; 70
228a: 9c e0 ldi r25, 0x0C ; 12
228c: 0e 94 aa 08 call 0x1154 <lcd_printp>
lines = menu_choose(1,2,0);
2290: 40 e0 ldi r20, 0x00 ; 0
2292: 62 e0 ldi r22, 0x02 ; 2
2294: 81 e0 ldi r24, 0x01 ; 1
2296: 0e 94 86 11 call 0x230c <menu_choose>
if (lines == 1 )
229a: 81 30 cpi r24, 0x01 ; 1
229c: 61 f4 brne .+24 ; 0x22b6 <edit_parameter+0x128>
{
lcd_printp(PSTR("\r\n--->"),0);
229e: 60 e0 ldi r22, 0x00 ; 0
22a0: 89 e6 ldi r24, 0x69 ; 105
22a2: 9c e0 ldi r25, 0x0C ; 12
22a4: 0e 94 aa 08 call 0x1154 <lcd_printp>
write_parameter(5); // Sicherheitshalber wird derzeit ausschließlich auf Parametersatz 5 gesichert.
22a8: 85 e0 ldi r24, 0x05 ; 5
22aa: 0e 94 2c 0e call 0x1c58 <write_parameter>
lcd_printp(PSTR("\r\nParameter gespeichert"),0);
22ae: 60 e0 ldi r22, 0x00 ; 0
22b0: 80 e7 ldi r24, 0x70 ; 112
22b2: 9c e0 ldi r25, 0x0C ; 12
22b4: 03 c0 rjmp .+6 ; 0x22bc <edit_parameter+0x12e>
}
else
{
lcd_printp(PSTR("\r\nNicht gespeichert"),0);
22b6: 60 e0 ldi r22, 0x00 ; 0
22b8: 88 e8 ldi r24, 0x88 ; 136
22ba: 9c e0 ldi r25, 0x0C ; 12
22bc: 0e 94 aa 08 call 0x1154 <lcd_printp>
}
}
timer = 100;
22c0: 84 e6 ldi r24, 0x64 ; 100
22c2: 80 93 61 00 sts 0x0061, r24
while(timer > 0);
22c6: 80 91 61 00 lds r24, 0x0061
22ca: 88 23 and r24, r24
22cc: e1 f7 brne .-8 ; 0x22c6 <edit_parameter+0x138>
22ce: 2f 96 adiw r28, 0x0f ; 15
22d0: 0f b6 in r0, 0x3f ; 63
22d2: f8 94 cli
22d4: de bf out 0x3e, r29 ; 62
22d6: 0f be out 0x3f, r0 ; 63
22d8: cd bf out 0x3d, r28 ; 61
22da: df 91 pop r29
22dc: cf 91 pop r28
22de: 1f 91 pop r17
22e0: 08 95 ret
 
000022e2 <menu_set_cursor>:
 
// Subroutine für den Stern (*) bzw. Cursor
 
void menu_set_cursor (uint8_t before, uint8_t line, uint8_t pos)
{
22e2: 0f 93 push r16
22e4: 1f 93 push r17
22e6: 06 2f mov r16, r22
22e8: 14 2f mov r17, r20
lcd_print_atp(pos,before,PSTR(" "),0); // Die vorhergehende Position löschen
22ea: 20 e0 ldi r18, 0x00 ; 0
22ec: 4c e9 ldi r20, 0x9C ; 156
22ee: 5c e0 ldi r21, 0x0C ; 12
22f0: 68 2f mov r22, r24
22f2: 81 2f mov r24, r17
22f4: 0e 94 e1 08 call 0x11c2 <lcd_print_atp>
lcd_print_atp(pos,line,PSTR("*"),0); // Den Cursor an der aktuellen Position anzeigen
22f8: 20 e0 ldi r18, 0x00 ; 0
22fa: 4e e9 ldi r20, 0x9E ; 158
22fc: 5c e0 ldi r21, 0x0C ; 12
22fe: 60 2f mov r22, r16
2300: 81 2f mov r24, r17
2302: 0e 94 e1 08 call 0x11c2 <lcd_print_atp>
2306: 1f 91 pop r17
2308: 0f 91 pop r16
230a: 08 95 ret
 
0000230c <menu_choose>:
}
 
 
// Zeigt einen Stern (*) an der x-Position <pos> an, y-Position von min bis max.
// Mit der +/- Taste kann ein Menü-Punkt ausgewählt und mit (Enter) bestätigt werden.
// Die Zeilennummer des aktuellen Menüpunkts wird zurückgegeben.
 
uint8_t menu_choose (uint8_t min, uint8_t max, uint8_t pos)
{
230c: ef 92 push r14
230e: ff 92 push r15
2310: 0f 93 push r16
2312: 1f 93 push r17
2314: cf 93 push r28
2316: f8 2e mov r15, r24
2318: e6 2e mov r14, r22
231a: 04 2f mov r16, r20
uint8_t line, before;
line = min;
231c: c8 2f mov r28, r24
before = min;
231e: 18 2f mov r17, r24
menu_set_cursor(line,line,pos);
2320: 68 2f mov r22, r24
2322: 0e 94 71 11 call 0x22e2 <menu_set_cursor>
do
{
while (key != key_nokey);
2326: 80 91 e6 04 lds r24, 0x04E6
232a: 88 23 and r24, r24
232c: e1 f7 brne .-8 ; 0x2326 <menu_choose+0x1a>
while(key == key_nokey);
232e: 80 91 e6 04 lds r24, 0x04E6
2332: 88 23 and r24, r24
2334: e1 f3 breq .-8 ; 0x232e <menu_choose+0x22>
if ((key == key_plus) && (line < max))
2336: 80 91 e6 04 lds r24, 0x04E6
233a: 82 30 cpi r24, 0x02 ; 2
233c: 19 f4 brne .+6 ; 0x2344 <menu_choose+0x38>
233e: ce 15 cp r28, r14
2340: 08 f4 brcc .+2 ; 0x2344 <menu_choose+0x38>
line ++;
2342: cf 5f subi r28, 0xFF ; 255
if ((key == key_minus) && (line > min))
2344: 80 91 e6 04 lds r24, 0x04E6
2348: 81 30 cpi r24, 0x01 ; 1
234a: 19 f4 brne .+6 ; 0x2352 <menu_choose+0x46>
234c: fc 16 cp r15, r28
234e: 08 f4 brcc .+2 ; 0x2352 <menu_choose+0x46>
line --;
2350: c1 50 subi r28, 0x01 ; 1
 
menu_set_cursor(before,line,pos);
2352: 40 2f mov r20, r16
2354: 6c 2f mov r22, r28
2356: 81 2f mov r24, r17
2358: 0e 94 71 11 call 0x22e2 <menu_set_cursor>
before = line;
235c: 1c 2f mov r17, r28
}
235e: 80 91 e6 04 lds r24, 0x04E6
2362: 88 30 cpi r24, 0x08 ; 8
2364: 21 f0 breq .+8 ; 0x236e <menu_choose+0x62>
2366: 80 91 e6 04 lds r24, 0x04E6
236a: 84 30 cpi r24, 0x04 ; 4
236c: e1 f6 brne .-72 ; 0x2326 <menu_choose+0x1a>
while ((key != key_enter) && (key != key_esc)); // Schleife wiederholen, bis (Enter) / Esc gedrückt wurde
if (key == key_esc)
236e: 80 91 e6 04 lds r24, 0x04E6
2372: 84 30 cpi r24, 0x04 ; 4
2374: 09 f4 brne .+2 ; 0x2378 <menu_choose+0x6c>
line = 255;
2376: cf ef ldi r28, 0xFF ; 255
while (key != key_nokey); // Warten, bis Taste wieder losgelassen wurde
2378: 80 91 e6 04 lds r24, 0x04E6
237c: 88 23 and r24, r24
237e: e1 f7 brne .-8 ; 0x2378 <menu_choose+0x6c>
return line;
}
2380: 8c 2f mov r24, r28
2382: 99 27 eor r25, r25
2384: cf 91 pop r28
2386: 1f 91 pop r17
2388: 0f 91 pop r16
238a: ff 90 pop r15
238c: ef 90 pop r14
238e: 08 95 ret
 
00002390 <main_menu>:
 
void main_menu (void)
{
lcd_cls();
2390: 0e 94 36 07 call 0xe6c <lcd_cls>
lcd_printp(PSTR("Hauptmenü(BETA V0.1)\r\n"),0);
2394: 60 e0 ldi r22, 0x00 ; 0
2396: 80 ea ldi r24, 0xA0 ; 160
2398: 9c e0 ldi r25, 0x0C ; 12
239a: 0e 94 aa 08 call 0x1154 <lcd_printp>
lcd_printp(PSTR("\r\nDisplay\r\n"),0);
239e: 60 e0 ldi r22, 0x00 ; 0
23a0: 87 eb ldi r24, 0xB7 ; 183
23a2: 9c e0 ldi r25, 0x0C ; 12
23a4: 0e 94 aa 08 call 0x1154 <lcd_printp>
lcd_printp(PSTR("Parameter\r\n"),0);
23a8: 60 e0 ldi r22, 0x00 ; 0
23aa: 83 ec ldi r24, 0xC3 ; 195
23ac: 9c e0 ldi r25, 0x0C ; 12
23ae: 0e 94 aa 08 call 0x1154 <lcd_printp>
lcd_printp(PSTR("Motortest"),0);
23b2: 60 e0 ldi r22, 0x00 ; 0
23b4: 8f ec ldi r24, 0xCF ; 207
23b6: 9c e0 ldi r25, 0x0C ; 12
23b8: 0e 94 aa 08 call 0x1154 <lcd_printp>
switch(menu_choose(2,4,10))
23bc: 4a e0 ldi r20, 0x0A ; 10
23be: 64 e0 ldi r22, 0x04 ; 4
23c0: 82 e0 ldi r24, 0x02 ; 2
23c2: 0e 94 86 11 call 0x230c <menu_choose>
23c6: 99 27 eor r25, r25
23c8: 83 30 cpi r24, 0x03 ; 3
23ca: 91 05 cpc r25, r1
23cc: 61 f0 breq .+24 ; 0x23e6 <main_menu+0x56>
23ce: 84 30 cpi r24, 0x04 ; 4
23d0: 91 05 cpc r25, r1
23d2: 1c f4 brge .+6 ; 0x23da <main_menu+0x4a>
23d4: 02 97 sbiw r24, 0x02 ; 2
23d6: 21 f0 breq .+8 ; 0x23e0 <main_menu+0x50>
23d8: 08 95 ret
23da: 04 97 sbiw r24, 0x04 ; 4
23dc: 39 f0 breq .+14 ; 0x23ec <main_menu+0x5c>
23de: 08 95 ret
{
case 2:
display_data(); // LCD-Modus
23e0: 0e 94 23 12 call 0x2446 <display_data>
break;
23e4: 08 95 ret
case 3:
edit_parameter(); // Parameter (Settings) laden/editieren
23e6: 0e 94 c7 10 call 0x218e <edit_parameter>
break;
23ea: 08 95 ret
case 4:
motor_test(); // primitiver Motor-Test
23ec: 0e 94 83 12 call 0x2506 <motor_test>
23f0: 08 95 ret
 
000023f2 <read_display>:
#include "parameter.h"
#include "menu.h"
 
uint8_t read_display (uint8_t command) //
{
23f2: cf 93 push r28
uint8_t timeout;
timeout = 0;
23f4: c0 e0 ldi r28, 0x00 ; 0
p_buffer[0] = '#'; // Display-Zeile anfordern
23f6: 93 e2 ldi r25, 0x23 ; 35
23f8: 90 93 63 04 sts 0x0463, r25
p_buffer[1] = 'a';
23fc: 91 e6 ldi r25, 0x61 ; 97
23fe: 90 93 64 04 sts 0x0464, r25
p_buffer[2] = 'h';
2402: 98 e6 ldi r25, 0x68 ; 104
2404: 90 93 65 04 sts 0x0465, r25
p_buffer[3] = command;
2408: 80 93 66 04 sts 0x0466, r24
p_buffer[4] = 0;
240c: c0 93 67 04 sts 0x0467, r28
p_buffer[5] = 0;
2410: c0 93 68 04 sts 0x0468, r28
base64_send(6);
2414: 86 e0 ldi r24, 0x06 ; 6
2416: 0e 94 bc 0c call 0x1978 <base64_send>
do // warten, bis die Parameter gesendet werden
{
if (get_message() == 1)
241a: 0e 94 95 0c call 0x192a <get_message>
241e: 81 30 cpi r24, 0x01 ; 1
2420: 09 f4 brne .+2 ; 0x2424 <read_display+0x32>
timeout = 10;
2422: ca e0 ldi r28, 0x0A ; 10
timeout ++;
2424: cf 5f subi r28, 0xFF ; 255
}
2426: 80 91 ea 04 lds r24, 0x04EA
242a: 80 53 subi r24, 0x30 ; 48
242c: 85 30 cpi r24, 0x05 ; 5
242e: 10 f0 brcs .+4 ; 0x2434 <read_display+0x42>
2430: ca 30 cpi r28, 0x0A ; 10
2432: 98 f3 brcs .-26 ; 0x241a <read_display+0x28>
while (((r_buffer[1] < '0') || (r_buffer[1] > '4')) && (timeout < 10));
if (timeout >= 10)
2434: ca 30 cpi r28, 0x0A ; 10
2436: 18 f0 brcs .+6 ; 0x243e <read_display+0x4c>
return 1;
2438: 81 e0 ldi r24, 0x01 ; 1
243a: 90 e0 ldi r25, 0x00 ; 0
243c: 02 c0 rjmp .+4 ; 0x2442 <read_display+0x50>
else
return 0;
243e: 80 e0 ldi r24, 0x00 ; 0
2440: 90 e0 ldi r25, 0x00 ; 0
2442: cf 91 pop r28
2444: 08 95 ret
 
00002446 <display_data>:
}
 
void display_data (void)
{
2446: 0f 93 push r16
2448: 1f 93 push r17
244a: cf 93 push r28
244c: df 93 push r29
244e: cd b7 in r28, 0x3d ; 61
2450: de b7 in r29, 0x3e ; 62
2452: 2a 97 sbiw r28, 0x0a ; 10
2454: 0f b6 in r0, 0x3f ; 63
2456: f8 94 cli
2458: de bf out 0x3e, r29 ; 62
245a: 0f be out 0x3f, r0 ; 63
245c: cd bf out 0x3d, r28 ; 61
uint8_t line;
uint8_t text[10];
 
lcd_cls();
245e: 0e 94 36 07 call 0xe6c <lcd_cls>
lcd_printp(PSTR("Display"),0);
2462: 60 e0 ldi r22, 0x00 ; 0
2464: 89 ed ldi r24, 0xD9 ; 217
2466: 9c e0 ldi r25, 0x0C ; 12
2468: 0e 94 aa 08 call 0x1154 <lcd_printp>
do
{
while (key != 0x00);
246c: 00 91 e6 04 lds r16, 0x04E6
2470: 00 23 and r16, r16
2472: e1 f7 brne .-8 ; 0x246c <display_data+0x26>
if (read_display(0) == 1)
2474: 80 2f mov r24, r16
2476: 0e 94 f9 11 call 0x23f2 <read_display>
247a: 81 30 cpi r24, 0x01 ; 1
247c: 69 f4 brne .+26 ; 0x2498 <display_data+0x52>
{
lcd_printp(PSTR("\r\nTimeout!"),0);
247e: 60 2f mov r22, r16
2480: 81 ee ldi r24, 0xE1 ; 225
2482: 9c e0 ldi r25, 0x0C ; 12
2484: 0e 94 aa 08 call 0x1154 <lcd_printp>
timer = 200;
2488: 88 ec ldi r24, 0xC8 ; 200
248a: 80 93 61 00 sts 0x0061, r24
while (timer > 0);
248e: 80 91 61 00 lds r24, 0x0061
2492: 88 23 and r24, r24
2494: e1 f7 brne .-8 ; 0x248e <display_data+0x48>
break;
2496: 2c c0 rjmp .+88 ; 0x24f0 <display_data+0xaa>
}
else
{
line = r_buffer[1];
2498: 10 91 ea 04 lds r17, 0x04EA
text[0] = line;
249c: 19 83 std Y+1, r17 ; 0x01
text[1] = 0x00;
249e: 0a 83 std Y+2, r16 ; 0x02
lcd_print_at(10,0,text,0);
24a0: 20 2f mov r18, r16
24a2: ae 01 movw r20, r28
24a4: 4f 5f subi r20, 0xFF ; 255
24a6: 5f 4f sbci r21, 0xFF ; 255
24a8: 60 2f mov r22, r16
24aa: 8a e0 ldi r24, 0x0A ; 10
24ac: 0e 94 1d 09 call 0x123a <lcd_print_at>
lcd_print_at(0,line+1,p_buffer,0);
24b0: 1f 5f subi r17, 0xFF ; 255
24b2: 20 2f mov r18, r16
24b4: 43 e6 ldi r20, 0x63 ; 99
24b6: 54 e0 ldi r21, 0x04 ; 4
24b8: 61 2f mov r22, r17
24ba: 80 2f mov r24, r16
24bc: 0e 94 1d 09 call 0x123a <lcd_print_at>
timer = 10;
24c0: 8a e0 ldi r24, 0x0A ; 10
24c2: 80 93 61 00 sts 0x0061, r24
while(timer > 0);
24c6: 80 91 61 00 lds r24, 0x0061
24ca: 88 23 and r24, r24
24cc: e1 f7 brne .-8 ; 0x24c6 <display_data+0x80>
if (key == 0x01)
24ce: 80 91 e6 04 lds r24, 0x04E6
24d2: 81 30 cpi r24, 0x01 ; 1
24d4: 11 f4 brne .+4 ; 0x24da <display_data+0x94>
read_display(1);
24d6: 0e 94 f9 11 call 0x23f2 <read_display>
if (key == 0x02)
24da: 80 91 e6 04 lds r24, 0x04E6
24de: 82 30 cpi r24, 0x02 ; 2
24e0: 11 f4 brne .+4 ; 0x24e6 <display_data+0xa0>
read_display(2);
24e2: 0e 94 f9 11 call 0x23f2 <read_display>
}
}
24e6: 80 91 e6 04 lds r24, 0x04E6
24ea: 84 30 cpi r24, 0x04 ; 4
24ec: 09 f0 breq .+2 ; 0x24f0 <display_data+0xaa>
24ee: be cf rjmp .-132 ; 0x246c <display_data+0x26>
24f0: 2a 96 adiw r28, 0x0a ; 10
24f2: 0f b6 in r0, 0x3f ; 63
24f4: f8 94 cli
24f6: de bf out 0x3e, r29 ; 62
24f8: 0f be out 0x3f, r0 ; 63
24fa: cd bf out 0x3d, r28 ; 61
24fc: df 91 pop r29
24fe: cf 91 pop r28
2500: 1f 91 pop r17
2502: 0f 91 pop r16
2504: 08 95 ret
 
00002506 <motor_test>:
#include "base64.h"
 
void motor_test(void)
{
lcd_cls();
2506: 0e 94 36 07 call 0xe6c <lcd_cls>
 
while (key != 0x00);
250a: 60 91 e6 04 lds r22, 0x04E6
250e: 66 23 and r22, r22
2510: e1 f7 brne .-8 ; 0x250a <motor_test+0x4>
 
lcd_printp(PSTR("Taste drücken\r\n"),0);
2512: 8c ee ldi r24, 0xEC ; 236
2514: 9c e0 ldi r25, 0x0C ; 12
2516: 0e 94 aa 08 call 0x1154 <lcd_printp>
while (key == 0x00);
251a: 80 91 e6 04 lds r24, 0x04E6
251e: 88 23 and r24, r24
2520: e1 f3 breq .-8 ; 0x251a <motor_test+0x14>
if (key == 0x08) // nur, wenn die Bestätigungstaste gedrückt wird
2522: 80 91 e6 04 lds r24, 0x04E6
2526: 88 30 cpi r24, 0x08 ; 8
2528: c9 f4 brne .+50 ; 0x255c <motor_test+0x56>
{
p_buffer[0] = '#'; // Motoren einschalten
252a: 83 e2 ldi r24, 0x23 ; 35
252c: 80 93 63 04 sts 0x0463, r24
p_buffer[1] = 'a';
2530: 81 e6 ldi r24, 0x61 ; 97
2532: 80 93 64 04 sts 0x0464, r24
p_buffer[2] = 't';
2536: 84 e7 ldi r24, 0x74 ; 116
2538: 80 93 65 04 sts 0x0465, r24
p_buffer[3] = 10;
253c: 8a e0 ldi r24, 0x0A ; 10
253e: 80 93 66 04 sts 0x0466, r24
p_buffer[4] = 10;
2542: 80 93 67 04 sts 0x0467, r24
p_buffer[5] = 10;
2546: 80 93 68 04 sts 0x0468, r24
p_buffer[6] = 10;
254a: 80 93 69 04 sts 0x0469, r24
p_buffer[7] = 0;
254e: 10 92 6a 04 sts 0x046A, r1
p_buffer[8] = 0;
2552: 10 92 6b 04 sts 0x046B, r1
 
base64_send(9);
2556: 89 e0 ldi r24, 0x09 ; 9
2558: 0e 94 bc 0c call 0x1978 <base64_send>
}
while (key != 0x00);
255c: 80 91 e6 04 lds r24, 0x04E6
2560: 88 23 and r24, r24
2562: e1 f7 brne .-8 ; 0x255c <motor_test+0x56>
while (key == 0x00);
2564: 80 91 e6 04 lds r24, 0x04E6
2568: 88 23 and r24, r24
256a: e1 f3 breq .-8 ; 0x2564 <motor_test+0x5e>
p_buffer[0] = '#'; // Motoren ausschalten
256c: 83 e2 ldi r24, 0x23 ; 35
256e: 80 93 63 04 sts 0x0463, r24
p_buffer[1] = 'a';
2572: 81 e6 ldi r24, 0x61 ; 97
2574: 80 93 64 04 sts 0x0464, r24
p_buffer[2] = 't';
2578: 84 e7 ldi r24, 0x74 ; 116
257a: 80 93 65 04 sts 0x0465, r24
p_buffer[3] = 0;
257e: 10 92 66 04 sts 0x0466, r1
p_buffer[4] = 0;
2582: 10 92 67 04 sts 0x0467, r1
p_buffer[5] = 0;
2586: 10 92 68 04 sts 0x0468, r1
p_buffer[6] = 0;
258a: 10 92 69 04 sts 0x0469, r1
p_buffer[7] = 0;
258e: 10 92 6a 04 sts 0x046A, r1
p_buffer[8] = 0;
2592: 10 92 6b 04 sts 0x046B, r1
 
base64_send(9);
2596: 89 e0 ldi r24, 0x09 ; 9
2598: 0e 94 bc 0c call 0x1978 <base64_send>
259c: 08 95 ret
 
0000259e <itoa>:
259e: fb 01 movw r30, r22
25a0: 9f 01 movw r18, r30
25a2: e8 94 clt
25a4: 42 30 cpi r20, 0x02 ; 2
25a6: c4 f0 brlt .+48 ; 0x25d8 <itoa+0x3a>
25a8: 45 32 cpi r20, 0x25 ; 37
25aa: b4 f4 brge .+44 ; 0x25d8 <itoa+0x3a>
25ac: 4a 30 cpi r20, 0x0A ; 10
25ae: 29 f4 brne .+10 ; 0x25ba <itoa+0x1c>
25b0: 97 fb bst r25, 7
25b2: 1e f4 brtc .+6 ; 0x25ba <itoa+0x1c>
25b4: 90 95 com r25
25b6: 81 95 neg r24
25b8: 9f 4f sbci r25, 0xFF ; 255
25ba: 64 2f mov r22, r20
25bc: 77 27 eor r23, r23
25be: 0e 94 22 13 call 0x2644 <__udivmodhi4>
25c2: 80 5d subi r24, 0xD0 ; 208
25c4: 8a 33 cpi r24, 0x3A ; 58
25c6: 0c f0 brlt .+2 ; 0x25ca <itoa+0x2c>
25c8: 89 5d subi r24, 0xD9 ; 217
25ca: 81 93 st Z+, r24
25cc: cb 01 movw r24, r22
25ce: 00 97 sbiw r24, 0x00 ; 0
25d0: a1 f7 brne .-24 ; 0x25ba <itoa+0x1c>
25d2: 16 f4 brtc .+4 ; 0x25d8 <itoa+0x3a>
25d4: 5d e2 ldi r21, 0x2D ; 45
25d6: 51 93 st Z+, r21
25d8: 10 82 st Z, r1
25da: c9 01 movw r24, r18
25dc: 0c 94 06 13 jmp 0x260c <strrev>
 
000025e0 <utoa>:
25e0: fb 01 movw r30, r22
25e2: 9f 01 movw r18, r30
25e4: 42 30 cpi r20, 0x02 ; 2
25e6: 74 f0 brlt .+28 ; 0x2604 <utoa+0x24>
25e8: 45 32 cpi r20, 0x25 ; 37
25ea: 64 f4 brge .+24 ; 0x2604 <utoa+0x24>
25ec: 64 2f mov r22, r20
25ee: 77 27 eor r23, r23
25f0: 0e 94 22 13 call 0x2644 <__udivmodhi4>
25f4: 80 5d subi r24, 0xD0 ; 208
25f6: 8a 33 cpi r24, 0x3A ; 58
25f8: 0c f0 brlt .+2 ; 0x25fc <utoa+0x1c>
25fa: 89 5d subi r24, 0xD9 ; 217
25fc: 81 93 st Z+, r24
25fe: cb 01 movw r24, r22
2600: 00 97 sbiw r24, 0x00 ; 0
2602: a1 f7 brne .-24 ; 0x25ec <utoa+0xc>
2604: 10 82 st Z, r1
2606: c9 01 movw r24, r18
2608: 0c 94 06 13 jmp 0x260c <strrev>
 
0000260c <strrev>:
260c: dc 01 movw r26, r24
260e: fc 01 movw r30, r24
2610: 01 90 ld r0, Z+
2612: 00 20 and r0, r0
2614: e9 f7 brne .-6 ; 0x2610 <strrev+0x4>
2616: 32 97 sbiw r30, 0x02 ; 2
2618: ae 17 cp r26, r30
261a: bf 07 cpc r27, r31
261c: 30 f4 brcc .+12 ; 0x262a <strrev+0x1e>
261e: 7c 91 ld r23, X
2620: 60 81 ld r22, Z
2622: 70 83 st Z, r23
2624: 31 97 sbiw r30, 0x01 ; 1
2626: 6d 93 st X+, r22
2628: f7 cf rjmp .-18 ; 0x2618 <strrev+0xc>
262a: 08 95 ret
 
0000262c <__udivmodqi4>:
262c: 99 1b sub r25, r25
262e: 79 e0 ldi r23, 0x09 ; 9
2630: 04 c0 rjmp .+8 ; 0x263a <__udivmodqi4_ep>
 
00002632 <__udivmodqi4_loop>:
2632: 99 1f adc r25, r25
2634: 96 17 cp r25, r22
2636: 08 f0 brcs .+2 ; 0x263a <__udivmodqi4_ep>
2638: 96 1b sub r25, r22
 
0000263a <__udivmodqi4_ep>:
263a: 88 1f adc r24, r24
263c: 7a 95 dec r23
263e: c9 f7 brne .-14 ; 0x2632 <__udivmodqi4_loop>
2640: 80 95 com r24
2642: 08 95 ret
 
00002644 <__udivmodhi4>:
2644: aa 1b sub r26, r26
2646: bb 1b sub r27, r27
2648: 51 e1 ldi r21, 0x11 ; 17
264a: 07 c0 rjmp .+14 ; 0x265a <__udivmodhi4_ep>
 
0000264c <__udivmodhi4_loop>:
264c: aa 1f adc r26, r26
264e: bb 1f adc r27, r27
2650: a6 17 cp r26, r22
2652: b7 07 cpc r27, r23
2654: 10 f0 brcs .+4 ; 0x265a <__udivmodhi4_ep>
2656: a6 1b sub r26, r22
2658: b7 0b sbc r27, r23
 
0000265a <__udivmodhi4_ep>:
265a: 88 1f adc r24, r24
265c: 99 1f adc r25, r25
265e: 5a 95 dec r21
2660: a9 f7 brne .-22 ; 0x264c <__udivmodhi4_loop>
2662: 80 95 com r24
2664: 90 95 com r25
2666: bc 01 movw r22, r24
2668: cd 01 movw r24, r26
266a: 08 95 ret
/Transportables_Koptertool/tags/V-0.1/main.map
0,0 → 1,760
Archive member included because of file (symbol)
 
F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_udivmodqi4.o)
parameter.o (__udivmodqi4)
F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_copy_data.o)
main.o (__do_copy_data)
F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_clear_bss.o)
main.o (__do_clear_bss)
F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(itoa.o)
displ_val.o (itoa)
F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(utoa.o)
parameter.o (utoa)
F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(strrev.o)
F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(itoa.o) (strrev)
F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_udivmodhi4.o)
F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(itoa.o) (__udivmodhi4)
 
Allocating common symbols
Common symbol size file
 
display_page_counter
0x1 main.o
timer 0x1 main.o
display_buffer 0x400 main.o
write_index 0x1 rs232.o
display_buffer_counter
0x1 main.o
p_buffer 0x80 main.o
read_index 0x1 rs232.o
display_mode 0x1 main.o
displ_page 0x1 displ_val.o
counter 0x1 main.o
rs232_timer 0x1 main.o
rs232_buffer 0x10 rs232.o
key 0x1 main.o
display_buffer_pointer
0x2 main.o
array 0x8 parameter.o
lcd_xpos 0x1 lcd.o
r_buffer 0x80 main.o
lcd_ypos 0x1 lcd.o
counter2 0x1 main.o
 
Memory Configuration
 
Name Origin Length Attributes
text 0x00000000 0x00020000 xr
data 0x00800060 0x0000ffa0 rw !x
eeprom 0x00810000 0x00010000 rw !x
*default* 0x00000000 0xffffffff
 
Linker script and memory map
 
LOAD F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
LOAD main.o
LOAD timer.o
LOAD lcd.o
LOAD F8X6.o
LOAD rs232.o
LOAD base64.o
LOAD displ_val.o
LOAD parameter.o
LOAD menu.o
LOAD display.o
LOAD motortest.o
LOAD F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libm.a
LOAD F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a
LOAD F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a
LOAD F:/WinAvr/lib/gcc/avr/3.4.5/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 0x266c
*(.vectors)
.vectors 0x00000000 0x54 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
0x00000000 __vectors
0x00000000 __vector_default
0x00000054 __ctors_start = .
*(.ctors)
0x00000054 __ctors_end = .
0x00000054 __dtors_start = .
*(.dtors)
0x00000054 __dtors_end = .
*(.progmem.gcc*)
*(.progmem*)
.progmem.data 0x00000054 0x600 F8X6.o
0x00000054 f8x6
.progmem.data 0x00000654 0x7 displ_val.o
.progmem.data 0x0000065b 0x641 parameter.o
0x0000065b parameter
0x00000a7b p_limits
0x00000b42 p_menu_number
0x000009bb bin_parameter
0x00000b85 p_menus
.progmem.data 0x00000c9c 0x3d menu.o
.progmem.data 0x00000cd9 0x13 display.o
.progmem.data 0x00000cec 0x10 motortest.o
0x00000cfc . = ALIGN (0x2)
*(.init0)
*(.init1)
*(.init2)
.init2 0x00000cfc 0xc F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
*(.init3)
*(.init4)
.init4 0x00000d08 0x16 F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_copy_data.o)
0x00000d08 __do_copy_data
.init4 0x00000d1e 0x10 F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_clear_bss.o)
0x00000d1e __do_clear_bss
*(.init5)
*(.init6)
*(.init7)
*(.init8)
*(.init9)
.init9 0x00000d2e 0x4 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
*(.text)
.text 0x00000d32 0x4 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
0x00000d32 __vector_1
0x00000d32 __vector_12
0x00000d32 __bad_interrupt
0x00000d32 __vector_6
0x00000d32 __vector_3
0x00000d32 __vector_11
0x00000d32 __vector_17
0x00000d32 __vector_19
0x00000d32 __vector_7
0x00000d32 __vector_5
0x00000d32 __vector_4
0x00000d32 __vector_9
0x00000d32 __vector_2
0x00000d32 __vector_15
0x00000d32 __vector_8
0x00000d32 __vector_14
0x00000d32 __vector_16
0x00000d32 __vector_18
0x00000d32 __vector_20
.text 0x00000d36 0x34 main.o
0x00000d36 main
.text 0x00000d6a 0x8e timer.o
0x00000de8 timer_init
0x00000d6a __vector_10
.text 0x00000df8 0x9f8 lcd.o
0x00000e6c lcd_cls
0x0000123a lcd_print_at
0x00000e72 wait_1ms
0x0000124c lcd_plot
0x00000df8 send_byte
0x000012de lcd_line
0x000011c2 lcd_print_atp
0x0000113a new_line
0x000016ce draw_fcircle
0x000011d4 lcd_print
0x00000f68 scroll
0x00000f22 set_adress
0x00000ea6 lcd_init
0x00001464 lcd_frect
0x00000e7c wait_ms
0x000014e8 lcd_rect
0x00000e08 cls
0x0000157c draw_circle
0x00001154 lcd_printp
0x00000fd2 put_char
.text 0x000017f0 0xbe rs232.o
0x00001834 RS232_init
0x00001888 RS232_send
0x000017f0 __vector_13
0x0000183e RS232_get
0x00001890 RS232_text
.text 0x000018ae 0x1da base64.o
0x00001978 base64_send
0x0000192a get_message
0x000018ae base64_decode
.text 0x00001a88 0x17c displ_val.o
0x00001b0a displ_values
0x00001a88 displ_get_text
.text 0x00001c04 0x6de parameter.o
0x00001ed4 edit_parameter2
0x00001c04 read_parameter
0x0000218e edit_parameter
0x00001cc4 bindec
0x00001d42 show_parameter
0x00001cf8 decimal
0x00001c8e binary
0x00001c58 write_parameter
.text 0x000022e2 0x110 menu.o
0x000022e2 menu_set_cursor
0x0000230c menu_choose
0x00002390 main_menu
.text 0x000023f2 0x114 display.o
0x00002446 display_data
0x000023f2 read_display
.text 0x00002506 0x98 motortest.o
0x00002506 motor_test
.text 0x0000259e 0x42 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(itoa.o)
0x0000259e itoa
.text 0x000025e0 0x2c F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(utoa.o)
0x000025e0 utoa
.text 0x0000260c 0x20 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(strrev.o)
0x0000260c strrev
0x0000262c . = ALIGN (0x2)
*(.text.*)
.text.libgcc 0x0000262c 0x18 F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_udivmodqi4.o)
0x0000262c __udivmodqi4
.text.libgcc 0x00002644 0x28 F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_udivmodhi4.o)
0x00002644 __udivmodhi4
0x0000266c . = ALIGN (0x2)
*(.fini9)
*(.fini8)
*(.fini7)
*(.fini6)
*(.fini5)
*(.fini4)
*(.fini3)
*(.fini2)
*(.fini1)
*(.fini0)
0x0000266c _etext = .
 
.data 0x00800060 0x0 load address 0x0000266c
0x00800060 PROVIDE (__data_start, .)
*(.data)
*(.gnu.linkonce.d*)
0x00800060 . = ALIGN (0x2)
0x00800060 _edata = .
0x00800060 PROVIDE (__data_end, .)
 
.bss 0x00800060 0x527
0x00800060 PROVIDE (__bss_start, .)
*(.bss)
*(COMMON)
COMMON 0x00800060 0x50a main.o
0x00800060 display_page_counter
0x00800061 timer
0x00800062 display_buffer
0x00800462 display_buffer_counter
0x00800463 p_buffer
0x008004e3 display_mode
0x008004e4 counter
0x008004e5 rs232_timer
0x008004e6 key
0x008004e7 display_buffer_pointer
0x008004e9 r_buffer
0x00800569 counter2
COMMON 0x0080056a 0x2 lcd.o
0x0080056a lcd_xpos
0x0080056b lcd_ypos
COMMON 0x0080056c 0x12 rs232.o
0x0080056c write_index
0x0080056d read_index
0x0080056e rs232_buffer
COMMON 0x0080057e 0x1 displ_val.o
0x0080057e displ_page
COMMON 0x0080057f 0x8 parameter.o
0x0080057f array
0x00800587 PROVIDE (__bss_end, .)
0x0000266c __data_load_start = LOADADDR (.data)
0x0000266c __data_load_end = (__data_load_start + SIZEOF (.data))
 
.noinit 0x00800587 0x0
0x00800587 PROVIDE (__noinit_start, .)
*(.noinit*)
0x00800587 PROVIDE (__noinit_end, .)
0x00800587 _end = .
0x00800587 PROVIDE (__heap_start, .)
 
.eeprom 0x00810000 0x0
*(.eeprom*)
0x00810000 __eeprom_end = .
 
.stab 0x00000000 0x36c
*(.stab)
.stab 0x00000000 0x36c F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
 
.stabstr 0x00000000 0x84
*(.stabstr)
.stabstr 0x00000000 0x84 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.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 0xc8
*(.debug_aranges)
.debug_aranges
0x00000000 0x14 main.o
.debug_aranges
0x00000014 0x14 timer.o
.debug_aranges
0x00000028 0x14 lcd.o
.debug_aranges
0x0000003c 0x14 rs232.o
.debug_aranges
0x00000050 0x14 base64.o
.debug_aranges
0x00000064 0x14 displ_val.o
.debug_aranges
0x00000078 0x14 parameter.o
.debug_aranges
0x0000008c 0x14 menu.o
.debug_aranges
0x000000a0 0x14 display.o
.debug_aranges
0x000000b4 0x14 motortest.o
 
.debug_pubnames
0x00000000 0x902
*(.debug_pubnames)
.debug_pubnames
0x00000000 0xe3 main.o
.debug_pubnames
0x000000e3 0x6c timer.o
.debug_pubnames
0x0000014f 0x1b1 lcd.o
.debug_pubnames
0x00000300 0x1b F8X6.o
.debug_pubnames
0x0000031b 0x8d rs232.o
.debug_pubnames
0x000003a8 0xd1 base64.o
.debug_pubnames
0x00000479 0xd2 displ_val.o
.debug_pubnames
0x0000054b 0x177 parameter.o
.debug_pubnames
0x000006c2 0xd1 menu.o
.debug_pubnames
0x00000793 0xc1 display.o
.debug_pubnames
0x00000854 0xae motortest.o
 
.debug_info 0x00000000 0x1dfa
*(.debug_info)
.debug_info 0x00000000 0x1c7 main.o
.debug_info 0x000001c7 0xe6 timer.o
.debug_info 0x000002ad 0x979 lcd.o
.debug_info 0x00000c26 0xdd F8X6.o
.debug_info 0x00000d03 0x174 rs232.o
.debug_info 0x00000e77 0x28d base64.o
.debug_info 0x00001104 0x21e displ_val.o
.debug_info 0x00001322 0x542 parameter.o
.debug_info 0x00001864 0x222 menu.o
.debug_info 0x00001a86 0x1f4 display.o
.debug_info 0x00001c7a 0x180 motortest.o
*(.gnu.linkonce.wi.*)
 
.debug_abbrev 0x00000000 0x98e
*(.debug_abbrev)
.debug_abbrev 0x00000000 0x92 main.o
.debug_abbrev 0x00000092 0x75 timer.o
.debug_abbrev 0x00000107 0x1c7 lcd.o
.debug_abbrev 0x000002ce 0x61 F8X6.o
.debug_abbrev 0x0000032f 0xde rs232.o
.debug_abbrev 0x0000040d 0xe5 base64.o
.debug_abbrev 0x000004f2 0xcc displ_val.o
.debug_abbrev 0x000005be 0x179 parameter.o
.debug_abbrev 0x00000737 0xed menu.o
.debug_abbrev 0x00000824 0xda display.o
.debug_abbrev 0x000008fe 0x90 motortest.o
 
.debug_line 0x00000000 0x1982
*(.debug_line)
.debug_line 0x00000000 0x13b main.o
.debug_line 0x0000013b 0xcd timer.o
.debug_line 0x00000208 0x71f lcd.o
.debug_line 0x00000927 0xbf F8X6.o
.debug_line 0x000009e6 0x144 rs232.o
.debug_line 0x00000b2a 0x236 base64.o
.debug_line 0x00000d60 0x1c3 displ_val.o
.debug_line 0x00000f23 0x547 parameter.o
.debug_line 0x0000146a 0x1b2 menu.o
.debug_line 0x0000161c 0x1cd display.o
.debug_line 0x000017e9 0x199 motortest.o
 
.debug_frame
*(.debug_frame)
 
.debug_str 0x00000000 0x4dc
*(.debug_str)
.debug_str 0x00000000 0x124 main.o
0x192 (size before relaxing)
.debug_str 0x00000124 0x1f timer.o
0xf5 (size before relaxing)
.debug_str 0x00000143 0x166 lcd.o
0x2e2 (size before relaxing)
.debug_str 0x000002a9 0x12 F8X6.o
0x101 (size before relaxing)
.debug_str 0x000002bb 0x63 rs232.o
0x12c (size before relaxing)
.debug_str 0x0000031e 0x4f base64.o
0x1c5 (size before relaxing)
.debug_str 0x0000036d 0x39 displ_val.o
0x1a8 (size before relaxing)
.debug_str 0x000003a6 0xbf parameter.o
0x271 (size before relaxing)
.debug_str 0x00000465 0x34 menu.o
0x19c (size before relaxing)
.debug_str 0x00000499 0x2c display.o
0x1a7 (size before relaxing)
.debug_str 0x000004c5 0x17 motortest.o
0x17a (size before relaxing)
 
.debug_loc
*(.debug_loc)
 
.debug_macinfo
*(.debug_macinfo)
OUTPUT(main.elf elf32-avr)
 
.debug_ranges 0x0000266c 0xc
.debug_ranges 0x0000266c 0xc lcd.o
 
Cross Reference Table
 
Symbol File
RS232_get rs232.o
base64.o
RS232_init rs232.o
main.o
RS232_send rs232.o
base64.o
RS232_text rs232.o
__bad_interrupt F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__bss_end F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_clear_bss.o)
__bss_start F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_clear_bss.o)
__data_end F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_copy_data.o)
__data_load_start F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_copy_data.o)
__data_start F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_copy_data.o)
__do_clear_bss F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_clear_bss.o)
motortest.o
display.o
menu.o
parameter.o
displ_val.o
base64.o
rs232.o
F8X6.o
lcd.o
timer.o
main.o
__do_copy_data F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_copy_data.o)
motortest.o
display.o
menu.o
parameter.o
displ_val.o
base64.o
rs232.o
F8X6.o
lcd.o
timer.o
main.o
__heap_end F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__init F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__stack F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
main.o
__udivmodhi4 F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_udivmodhi4.o)
F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(utoa.o)
F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(itoa.o)
__udivmodqi4 F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_udivmodqi4.o)
parameter.o
__vector_1 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_10 timer.o
F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_11 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_12 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_13 rs232.o
F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_14 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_15 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_16 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_17 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_18 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_19 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_2 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_20 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_3 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_4 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_5 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_6 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_7 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_8 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_9 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_default F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vectors F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
array parameter.o
base64_decode base64.o
base64_send base64.o
motortest.o
display.o
parameter.o
displ_val.o
bin_parameter parameter.o
binary parameter.o
bindec parameter.o
cls lcd.o
counter timer.o
main.o
counter2 timer.o
main.o
decimal parameter.o
displ_get_text displ_val.o
displ_page displ_val.o
displ_values displ_val.o
display_buffer motortest.o
display.o
menu.o
parameter.o
displ_val.o
base64.o
lcd.o
main.o
display_buffer_counter motortest.o
display.o
menu.o
parameter.o
displ_val.o
base64.o
lcd.o
main.o
display_buffer_pointer motortest.o
display.o
menu.o
parameter.o
displ_val.o
base64.o
lcd.o
main.o
display_data display.o
menu.o
display_mode motortest.o
display.o
menu.o
parameter.o
displ_val.o
base64.o
lcd.o
main.o
display_page_counter motortest.o
display.o
menu.o
parameter.o
displ_val.o
base64.o
lcd.o
main.o
draw_circle lcd.o
draw_fcircle lcd.o
edit_parameter parameter.o
menu.o
edit_parameter2 parameter.o
f8x6 F8X6.o
lcd.o
get_message base64.o
display.o
parameter.o
displ_val.o
itoa F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(itoa.o)
displ_val.o
key motortest.o
display.o
menu.o
parameter.o
displ_val.o
timer.o
main.o
lcd_cls lcd.o
motortest.o
display.o
menu.o
parameter.o
displ_val.o
lcd_frect lcd.o
lcd_init lcd.o
main.o
lcd_line lcd.o
lcd_plot lcd.o
lcd_print lcd.o
parameter.o
lcd_print_at lcd.o
display.o
parameter.o
displ_val.o
lcd_print_atp lcd.o
menu.o
parameter.o
displ_val.o
lcd_printp lcd.o
motortest.o
display.o
menu.o
parameter.o
lcd_rect lcd.o
lcd_xpos lcd.o
lcd_ypos lcd.o
main main.o
F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
main_menu menu.o
main.o
menu_choose menu.o
parameter.o
menu_set_cursor menu.o
motor_test motortest.o
menu.o
new_line lcd.o
p_buffer motortest.o
display.o
menu.o
parameter.o
displ_val.o
base64.o
main.o
p_limits parameter.o
p_menu_number parameter.o
p_menus parameter.o
parameter parameter.o
put_char lcd.o
r_buffer motortest.o
display.o
menu.o
parameter.o
displ_val.o
base64.o
main.o
read_display display.o
read_index rs232.o
read_parameter parameter.o
rs232_buffer rs232.o
rs232_timer rs232.o
timer.o
main.o
scroll lcd.o
send_byte lcd.o
set_adress lcd.o
show_parameter parameter.o
strrev F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(strrev.o)
F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(utoa.o)
F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(itoa.o)
timer display.o
parameter.o
base64.o
timer.o
main.o
timer_init timer.o
main.o
utoa F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(utoa.o)
parameter.o
wait_1ms lcd.o
wait_ms lcd.o
write_index rs232.o
write_parameter parameter.o
/Transportables_Koptertool/tags/V-0.1/main.sym
0,0 → 1,204
00000000 W __heap_end
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 W __vector_default
00000000 T __vectors
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
00000054 T __ctors_end
00000054 T __ctors_start
00000054 T __dtors_end
00000054 T __dtors_start
00000054 T f8x6
00000654 t __c.0
0000065b T parameter
0000085f W __stack
000009bb T bin_parameter
00000a7b T p_limits
00000b42 T p_menu_number
00000b85 T p_menus
00000c09 t __c.11
00000c0b t __c.12
00000c0d t __c.13
00000c0f t __c.0
00000c20 t __c.1
00000c26 t __c.2
00000c2c t __c.3
00000c32 t __c.4
00000c38 t __c.5
00000c3e t __c.6
00000c46 t __c.7
00000c69 t __c.8
00000c70 t __c.9
00000c88 t __c.10
00000c9c t __c.4
00000c9e t __c.5
00000ca0 t __c.0
00000cb7 t __c.1
00000cc3 t __c.2
00000ccf t __c.3
00000cd9 t __c.0
00000ce1 t __c.1
00000cec t __c.0
00000cfc W __init
00000d08 T __do_copy_data
00000d14 t .do_copy_data_loop
00000d18 t .do_copy_data_start
00000d1e T __do_clear_bss
00000d26 t .do_clear_bss_loop
00000d28 t .do_clear_bss_start
00000d32 T __bad_interrupt
00000d32 W __vector_1
00000d32 W __vector_11
00000d32 W __vector_12
00000d32 W __vector_14
00000d32 W __vector_15
00000d32 W __vector_16
00000d32 W __vector_17
00000d32 W __vector_18
00000d32 W __vector_19
00000d32 W __vector_2
00000d32 W __vector_20
00000d32 W __vector_3
00000d32 W __vector_4
00000d32 W __vector_5
00000d32 W __vector_6
00000d32 W __vector_7
00000d32 W __vector_8
00000d32 W __vector_9
00000d36 T main
00000d6a T __vector_10
00000de8 T timer_init
00000df8 T send_byte
00000e08 T cls
00000e6c T lcd_cls
00000e72 T wait_1ms
00000e7c T wait_ms
00000ea6 T lcd_init
00000f22 T set_adress
00000f68 T scroll
00000fd2 T put_char
0000113a T new_line
00001154 T lcd_printp
000011c2 T lcd_print_atp
000011d4 T lcd_print
0000123a T lcd_print_at
0000124c T lcd_plot
000012de T lcd_line
00001464 T lcd_frect
000014e8 T lcd_rect
0000157c T draw_circle
000016ce T draw_fcircle
000017f0 T __vector_13
00001834 T RS232_init
0000183e T RS232_get
00001888 T RS232_send
00001890 T RS232_text
000018ae T base64_decode
0000192a T get_message
00001978 T base64_send
00001a88 T displ_get_text
00001b0a T displ_values
00001c04 T read_parameter
00001c58 T write_parameter
00001c8e T binary
00001cc4 T bindec
00001cf8 T decimal
00001d42 T show_parameter
00001ed4 T edit_parameter2
0000218e T edit_parameter
000022e2 T menu_set_cursor
0000230c T menu_choose
00002390 T main_menu
000023f2 T read_display
00002446 T display_data
00002506 T motor_test
0000259e T itoa
000025e0 T utoa
0000260c T strrev
0000262c T __udivmodqi4
00002632 t __udivmodqi4_loop
0000263a t __udivmodqi4_ep
00002644 T __udivmodhi4
0000264c t __udivmodhi4_loop
0000265a t __udivmodhi4_ep
0000266c A __data_load_end
0000266c A __data_load_start
0000266c T _etext
00800060 B __bss_start
00800060 D __data_end
00800060 D __data_start
00800060 D _edata
00800060 B display_page_counter
00800061 B timer
00800062 B display_buffer
00800462 B display_buffer_counter
00800463 B p_buffer
008004e3 B display_mode
008004e4 B counter
008004e5 B rs232_timer
008004e6 B key
008004e7 B display_buffer_pointer
008004e9 B r_buffer
00800569 B counter2
0080056a B lcd_xpos
0080056b B lcd_ypos
0080056c B write_index
0080056d B read_index
0080056e B rs232_buffer
0080057e B displ_page
0080057f B array
00800587 B __bss_end
00800587 ? _end
00810000 ? __eeprom_end
/Transportables_Koptertool/tags/V-0.1/makefile
0,0 → 1,414
# WinAVR Sample makefile written by Eric B. Weddington, Jörg Wunsch, et al.
# Released to the Public Domain
# Please read the make user manual!
#
# Additional material for this makefile was submitted by:
# Tim Henigan
# Peter Fleury
# Reiner Patommel
# Sander Pool
# Frederik Rouleau
# Markus Pfaff
#
# On command line:
#
# make all = Make software.
#
# make clean = Clean out built project files.
#
# make coff = Convert ELF to AVR COFF (for use with AVR Studio 3.x or VMLAB).
#
# make extcoff = Convert ELF to AVR Extended COFF (for use with AVR Studio
# 4.07 or greater).
#
# make program = Download the hex file to the device, using avrdude. Please
# customize the avrdude settings below first!
#
# make filename.s = Just compile filename.c into the assembler code only
#
# To rebuild project do "make clean" then "make all".
#
 
 
# MCU name
MCU = atmega32
 
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
 
#put the name of the target file here (without extension)
# TARGET = main
TARGET = MMT
 
#put your C sourcefiles here
# SRC = circle.c F8x8b.c F8x8a.c F8x6.c f8x8fv.c f8x6fv.c f6x5fv.c f6x4fv.c fontsoft.c serial.c paul.c bitmap.c demo.c draw.c F16x8a.c F16x8b.c F16x8c.c t6963.c $(TARGET).c
SRC = $(TARGET).c timer.c lcd.c F8X6.c rs232.c base64.c displ_val.c parameter.c menu.c display.c motortest.c
 
# 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 = $(TARGET).c
 
# If there is more than one source file, append them above, or modify and
# uncomment the following:
#SRC += foo.c bar.c
 
# You can also wrap lines by appending a backslash to the end of the line:
#SRC += baz.c \
#xyzzy.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 = -g -O$(OPT) \
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
-Wall -Wstrict-prototypes \
-Wa,-adhlns=$(<:.c=.lst) \
$(patsubst %,-I%,$(EXTRAINCDIRS))
 
 
# Set a "language standard" compiler flag.
# Unremark just one line below to set the language standard to use.
# gnu99 = C99 + GNU extensions. See GCC manual for more information.
#CFLAGS += -std=c89
#CFLAGS += -std=gnu89
#CFLAGS += -std=c99
CFLAGS += -std=gnu99
 
 
 
# 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
 
 
 
 
# Programming support using avrdude. Settings and variables.
 
# Programming hardware: alf avr910 avrisp bascom bsd
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
#
# Type: avrdude -c ?
# to get a full listing.
#
AVRDUDE_PROGRAMMER = avr911
 
 
AVRDUDE_PORT = com4 # programmer connected to serial device
#AVRDUDE_PORT = lpt1 # programmer connected to parallel port
 
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
 
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) -b 115200 -F
 
# 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 = F:/Eigene Dateien/Controller/winavr
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = .
DIRLIB = $(DIRAVR)/avr/lib
 
 
# Defines 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
 
 
 
# 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 = $(ASRC:.S=.lst) $(SRC:.c=.lst)
 
# Combine all necessary flags and optional flags.
# Add target processor to flags.
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
 
 
 
# Programming support using ponyprog. Settings and variables.
#PONYPROG= ponyprog2000.exe
#PONYPROG= C:\Programme\ponyprog2000\ponyprog2000.exe
# Program the device.
#program: $(TARGET).hex $(TARGET).eep
# echo -e "SELECTDEVICE $(MCU)\nLOAD-PROG $(TARGET).hex\n#LOAD-DATA $(TARGET).eep\nWRITE-PROG" >isp.e2s
# $(PONYPROG) isp.e2s
 
program: $(TARGET).hex $(TARGET).eep
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 
 
 
 
# 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)
 
 
# 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 program
 
/Transportables_Koptertool/tags/V-0.1/menu.c
0,0 → 1,90
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "lcd.h"
#include "rs232.h"
#include "base64.h"
#include "parameter.h"
#include "menu.h"
#include "display.h"
#include "motortest.h"
#include "debug.h"
#include "settings.h"
 
 
// Subroutine für den Stern (*) bzw. Cursor
 
void menu_set_cursor (uint8_t before, uint8_t line, uint8_t pos)
{
lcd_print_atp(pos,before,PSTR(" "),0); // Die vorhergehende Position löschen
lcd_print_atp(pos,line,PSTR("*"),0); // Den Cursor an der aktuellen Position anzeigen
}
 
 
// Zeigt einen Stern (*) an der x-Position <pos> an, y-Position von min bis max.
// Mit der +/- Taste kann ein Menü-Punkt ausgewählt und mit (Enter) bestätigt werden.
// Die Zeilennummer des aktuellen Menüpunkts wird zurückgegeben.
 
uint8_t menu_choose (uint8_t min, uint8_t max, uint8_t pos)
{
uint8_t line, before;
line = min;
before = min;
menu_set_cursor(line,line,pos);
do
{
while (key != key_nokey);
while(key == key_nokey);
if ((key == key_plus) && (line < max))
line ++;
if ((key == key_minus) && (line > min))
line --;
 
menu_set_cursor(before,line,pos);
before = line;
}
while ((key != key_enter) && (key != key_esc)); // Schleife wiederholen, bis (Enter) / Esc gedrückt wurde
if (key == key_esc)
line = 255;
while (key != key_nokey); // Warten, bis Taste wieder losgelassen wurde
return line;
}
 
void main_menu (void)
{
lcd_cls();
lcd_printp(PSTR("Hauptmenü(BETA V0.1)\r\n"),0);
lcd_printp(PSTR("\r\nDisplay\r\n"),0);
lcd_printp(PSTR("Parameter\r\n"),0);
lcd_printp(PSTR("Motortest\r\n"),0);
lcd_printp(PSTR("Debug Daten\r\n"),0);
lcd_printp(PSTR("Settings\r\n"),0);
lcd_printp(PSTR("Mod by Mikeljo 05/08"),0);
 
switch(menu_choose(2,6,12))
{
case 2:
display_data(); // LCD-Modus
break;
case 3:
edit_parameter(); // Parameter (Settings) laden/editieren
break;
case 4:
motor_test(); // primitiver Motor-Test
break;
case 5:
display_debug(); // Debug Daten
break;
case 6:
LCD_settings(); // Einstellungen
break;
}
}
/Transportables_Koptertool/tags/V-0.1/menu.h
0,0 → 1,7
#ifndef menu_h
#define menu_h
 
void main_menu (void);
uint8_t menu_choose (uint8_t min, uint8_t max, uint8_t pos);
 
#endif
/Transportables_Koptertool/tags/V-0.1/mmt.aws
0,0 → 1,0
<AVRWorkspace><IOSettings><CurrentRegisters/></IOSettings><part name="ATMEGA32"/><Files><File00000 Name="D:\Develop\MMT\lcd.c" Position="269 211 1116 677" LineCol="26 0" State="Maximized"/><File00001 Name="D:\Develop\MMT\settings.c" Position="309 265 1156 731" LineCol="9 0" State="Maximized"/><File00002 Name="D:\Develop\MMT\settings.h" Position="176 63 1185 766" LineCol="4 0" State="Maximized"/><File00003 Name="D:\Develop\MMT\main.h" Position="208 126 1055 592" LineCol="25 0" State="Maximized"/><File00004 Name="D:\Develop\MMT\lcd.h" Position="252 184 1099 650" LineCol="27 0" State="Maximized"/><File00005 Name="D:\Develop\MMT\main.c" Position="274 213 1121 679" LineCol="88 0" State="Maximized"/><File00006 Name="D:\Develop\MMT\menu.c" Position="185 69 1194 772" LineCol="0 0" State="Maximized"/><File00007 Name="D:\Develop\MMT\debug.c" Position="188 71 1197 774" LineCol="184 39" State="Maximized"/><File00008 Name="D:\Develop\MMT\base64.c" Position="214 130 1061 596" LineCol="77 0" State="Maximized"/><File00009 Name="D:\Develop\MMT\display.c" Position="236 159 1083 625" LineCol="32 72" State="Maximized"/><File00010 Name="D:\Develop\MMT\parameter.c" Position="258 188 1105 654" LineCol="277 18" State="Maximized"/><File00011 Name="D:\Develop\MMT\base64.h" Position="302 246 1149 712" LineCol="9 0" State="Maximized"/><File00012 Name="D:\Develop\MMT\debug.h" Position="324 275 1171 741" LineCol="8 10" State="Maximized"/><File00013 Name="D:\Develop\MMT\parameter.h" Position="346 304 1193 770" LineCol="4 43" State="Maximized"/></Files></AVRWorkspace>
/Transportables_Koptertool/tags/V-0.1/motortest.c
0,0 → 1,52
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "motortest.h"
#include "lcd.h"
#include "base64.h"
 
void motor_test(void)
{
lcd_cls();
 
while (key != 0x00);
 
lcd_printp(PSTR("Taste drücken\r\n"),0);
while (key == 0x00);
if (key == 0x08) // nur, wenn die Bestätigungstaste gedrückt wird
{
p_buffer[0] = '#'; // Motoren einschalten
p_buffer[1] = 'a';
p_buffer[2] = 't';
p_buffer[3] = 10;
p_buffer[4] = 10;
p_buffer[5] = 10;
p_buffer[6] = 10;
p_buffer[7] = 0;
p_buffer[8] = 0;
 
base64_send(9);
}
while (key != 0x00);
while (key == 0x00);
p_buffer[0] = '#'; // Motoren ausschalten
p_buffer[1] = 'a';
p_buffer[2] = 't';
p_buffer[3] = 0;
p_buffer[4] = 0;
p_buffer[5] = 0;
p_buffer[6] = 0;
p_buffer[7] = 0;
p_buffer[8] = 0;
 
base64_send(9);
}
/Transportables_Koptertool/tags/V-0.1/motortest.h
0,0 → 1,6
#ifndef motortest_h
#define motortest_h
 
void motor_test(void);
 
#endif
/Transportables_Koptertool/tags/V-0.1/parameter.c
0,0 → 1,556
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "lcd.h"
#include "rs232.h"
#include "base64.h"
#include "parameter.h"
#include "menu.h"
 
uint8_t array[8];
 
prog_uchar p_menus[12][11]=
{
"Config ",
"Channels ",
"Stick ",
"Hoehe ",
"Gyro ",
"Looping ",
"Camera ",
"Sonstiges ",
"User ",
"Coupling ",
"Config(2) ",
"Loopingset"
};
 
 
// Diese Tabelle ordnet die eingelesenen Parameter den Menü-Seiten zu
 
prog_uchar p_menu_number[67]=
{
2,2,2,2,2,2,2,2, // Die ersten 8 Parameter werden auf Menüseite 2 angezeigt (=Kanalzuordnungen)
0,4,4,4,4,4,4,3,
3,3,8,8,8,8,5,5,
8,8,8,0,5,9,9,9,
9,7,7,7,7,7,7,6,
6,6,10,10,6,6,5,5,
5,9,9,9,9,0,7,11,
11,11,11,12,12, 12,
12,12,12,12,12
 
};
 
prog_uchar p_limits[199]= // Limits für die Parameter
{
1,8,2, // 2:Nick (3)
1,8,2, // 2:Roll (4)
1,8,2, // 2:Gas (2)
1,8,2, // 2:Gier (1)
1,8,2, // 2:Poti1 (6)
1,8,2, // 2:Poti2 (6)
1,8,2, // 2:Poti3 (7)
1,8,2, // 2:Poti4 (5)
0,0,0, // 1:Config
0,255,4, // 4:Höhe MinGas (30)
0,255,4, // 4:Luftdruck_D (30)
0,255,4, // 4:MaxHöhe (Setpoint?) (Poti4)
0,255,4, // 4:Höhe_P (10)
0,50,4, // 4:Höhe Verstärkung (3)
0,255,4, // 4:Höhe Z-acc (30)
0,6,3, // 3:Nick/Roll P (3)
0,64,3, // 3:Nick/Roll D (4)
0,20,3, // 3:Gier_P (6)
0,32,8, // 8:Min.Gas (15)
33,250,8, // 8:Max.Gas (250)
0,50,8, // 5:Gyro-Acc Faktor (30)
0,255,8, // 8:Kompass-Wirkung (128)
0,0,5, // 5:Gyro-P (80)
0,0,5, // 5:Gyro-I (120)
0,250,8, // 8:Unterspannung (94)
0,250,8, // 8:Not-Gas Zeit (20)
0,250,8, // 8:Not-Gas (35)
0,1,0, // Ufo-Ausrichtung (X +)
0,255,5, // I-Faktor (32)
0,255,9, // 9:User1 (80)
0,255,9, // 9:User2 (0)
0,255,9, // 9:User3
0,255,9, // 9:User4
0,255,7, // 7:Servo Nick Control (100)
0,250,7, // 7:Servo Nick Compensation (40)
0,250,7, // 7:Servo Nick min (50)
0,250,7, // 7:Servo Nick max (150)
0,25,7, // 7:Servo Nick refrsh (5)
0,255,6, // 6:Loop Gas Limit (50)
0,250,6, // 6:Loop Ansprechschwelle (90)
0,250,6, // 6:Loop Hysterese (50)
0,255,10, // 10:Achskopplung (90)
0,255,10, // 10:Achsgegenkopplung (5)
0,250,6, // 6:Turnover Nick (100)
0,250,6, // 6:Turnover Roll (100)
0,250,5, // 5: Gyro-Abgleich (Comp.) (32)
0,250,5, // 5: Drift (4)
0,255,5, // 5: Dynamic stability (75)
0,255,9, // 9:User5
0,255,9, // 9:User6
0,255,9, // 9:User7
0,255,9, // 9:User8 (0)
 
0,0,1, // 6:Loop Config (0)
0,1,7 // 7:Servo Nick Compensation Invert (0)
};
 
prog_char bin_parameter[12][16] = // Die binär kodierten Parametern werden getrennt behandelt.
{
"Loop up ",
"Loop down ",
"Loop left ",
"Loop right ",
"Höhenregler ", // 8
"Höhenschalter ",
"Headhold ",
"Kompass ",
"KompassFix ",
"GPS ",
"Achsenkopplung ",
"Drehrate "
};
 
prog_char parameter[54][16]=
{
"Nick ", // 0 (3)
"Roll ", // 1 (4)
"Gas ", // (2)
"Gier ", // (1)
"Poti1 ", // (6)
"Poti2 ", // (6)
"Poti3 ", // (7)
"Poti4 ", // 7 (5)
"Config ", // 8
"Hoehe_MinGas ", // 9 (30)
"Luftdruck_D ", // 10 Wert : 0-250 (30)
"MaxHoehe ", // 11 Wert : 0-250 251 -> Poti1 (Poti4)
"Hoehe_P ", // 12 Wert : 0-32 (10)
"Hoehe_Verstaerk", // 13 Wert : 0-50
"Hoehe_ACC_Wirk.", // 14 Wert : 0-250 (30)
"Stick_P ", // 15 Wert : 1-6
"Stick_D ", // 16 Wert : 0-64
"Gier_P ", // 17 Wert : 1-20 POTI(?)
"Gas_Min ", // 17 Wert : 0-32
"Gas_Max ", // 18 Wert : 33-250
"GyroAccFaktor ", // 19 Wert : 1-64
"KompassWirkung ", // 20 Wert : 0-250
"Gyro_P ", // 21 Wert : 0-250
"Gyro_I ", // 22 Wert : 0-250
"Unterspannung ", // 23 Wert : 0-250
"NotGas ", // 24 Wert : 0-250 // Gaswert bei Empangsverlust
"NotGasZeit ", // 25 Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
"UfoAusrichtung ", // 26 X oder + Formation
"I_Faktor ", // 27 = 32;
"UserParam1 ", // 28 = 32 * 4; //zur freien Verwendung
"UserParam2 ", // 29 zur freien Verwendung
"UserParam3 ", // 30 zur freien Verwendung
"UserParam4 ", // 31 zur freien Verwendung
"ServoNickCtrl ", // 32 Wert : 0-250 // Stellung des Servos
"ServoNickComp ", // 33 Wert : 0-250 // Einfluss Gyro/Servo
"ServoNickMin ", // 34 Wert : 0-250 // Anschlag
"ServoNickMax ", // 35 Wert : 0-250 // Anschlag
"ServoNickRefrsh", // 36
"LoopGasLimit ", // 37
"LoopThreshold ", // 38 Wert: 0-250 Schwelle für Stickausschlag
"LoopHysterese ", // 39
"AchsKopplung ", // 40
"AchsGegenKoppl.", // 41
"WinklUmschlNick", // 42
"WinklUmschlRoll", // 43
"GyroAccAbgleich", // 44 1/k
"Driftkomp ", // 45
"DynamicStabilit", // 47
"UserParam5 ", // 48 zur freien Verwendung
"UserParam6 ", // 49 zur freien Verwendung
"UserParam7 ", // 50 zur freien Verwendung
"UserParam8 ", // 51 zur freien Verwendung
"LoopConfig ", // 52 Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
"ServoNickCompIn" // 53 Wert : 0-250 // Richtung Einfluss Gyro/Servo
// "Name " // 54
};
 
 
// Parameter lesen, editieren und zurückschreiben
 
uint8_t read_parameter (uint8_t number) // Number = Parameter-Set#
{
uint8_t timeout;
timeout = 0;
p_buffer[0] = '#'; // Parameter anfordern
p_buffer[1] = 'a';
p_buffer[2] = 'q';
p_buffer[3] = number;
p_buffer[4] = 0;
p_buffer[5] = 0;
base64_send(6);
 
do // warten, bis die Parameter gesendet werden
{
if (get_message() == 1) // Fehler bei der Übertragung?
timeout = 30; // Timeout sofort auf Endwert setzen
timeout ++;
}
while (((r_buffer[1] < 'L') || (r_buffer[1] > 'P')) && (timeout < 30)); // warten, bis Parameter empfangen wurden oder ein Timeout auftrat
if (timeout >= 30) // Wenn ein Timeout (=Fehler) auftrat, eine 1 zurückgeben, ansonsten 0
return 1;
else
return 0;
}
 
void write_parameter(uint8_t number) // Schreibe Parameter-Satz
{
uint8_t i;
if (number <= 5)
{
 
for (i=0;i<71;i++) // Den gesamten Parameter-Puffer um 3 Bytes nach hinten verschieben
p_buffer[(70-i)+3] = p_buffer[70-i];
p_buffer[0] = '#'; // Befehl zum Schreiben der Parameter
p_buffer[1] = 'a';
p_buffer[2] = number + 'k'; // Nummer des Parameters
p_buffer[74] = 0;
base64_send(75); // Parameter in base64 kodieren und senden, 75 Bytes
}
}
 
void binary (uint8_t data, uint8_t *feld) // Wandelt eine 8-Bit Zahl in eine Binärzahl um (Array mit 8 Elementen)
{ // Wird für die Flags (Loop + Grundkonfiguration) benötigt
uint8_t i;
i=0;
for (i=0;i<8;i++)
{
if ((1<<i) & data)
feld[i] = 1;
else
feld[i] = 0;
}
}
 
uint8_t bindec (uint8_t *feld) // wandelt eine Binärzahl (im Array) in eine 8-Bit Zahl
{ // Wird für die Flags (Loop + Grundkonfiguration) benötigt
uint8_t i;
uint8_t result;
result = 0;
for (i=0;i<8;i++)
{
if (feld[i] == 1)
result += 1<<i;
}
return result;
}
 
 
 
 
void decimal (uint8_t data, uint8_t *text) // wandelt Wert in rechtsbündigen Text um
{ // (schneller/kleiner als printf())
text[0] = data/100;
data -= (text[0] * 100);
text[1] = data/10;
data -= (text[1] *10);
text[2] = data + 0x30;
text[0] += 0x30;
text[1] += 0x30;
 
if (text[0] == 0x30)
{
text[0] = 0x20;
if (text[1] == 0x30)
text[1] = 0x20;
}
text[3] = 0x00;
}
 
uint8_t show_parameter (uint8_t number) // Zeigt eine Parameter-Seite an und gibt die ausgewählte Zeile zurück
{
uint8_t i;
uint8_t line;
uint8_t text[25];
uint8_t bin[8];
line = 0;
if (number > 1)
{
for (i = 0; i<66; i++)
{
if (pgm_read_byte(p_limits+i*3+2) == number)
{
array[line] = i;
decimal(p_buffer[i],text);
lcd_print_at(0,line,text,0);
lcd_print_atp(5,line,parameter[i],0);
if (line <= 7)
line++;
}
}
}
else
{ // Sonderfälle: Binäre Eingabe
if (number == 1)
{
binary(p_buffer[52],bin); // Loop-Config
text[1] = 0x00;
for (i=0;i<4;i++)
{
text[0] = bin[i] + 0x30;
lcd_print_at(0,i,text,0);
lcd_print_atp(5,i,bin_parameter[i],0);
}
}
if (number == 0)
{
binary(p_buffer[8],bin); // Config
text[1] = 0x00;
for (i=0;i<8;i++)
{
text[0] = bin[i] + 0x30;
lcd_print_at(0,i,text,0);
lcd_print_atp(5,i,bin_parameter[i+4],0);
}
}
 
}
return line;
}
 
void edit_parameter2 (uint8_t page, uint8_t lines) // Ändern der Parameter einer Seite
{
uint8_t line;
uint8_t par;
uint8_t min;
uint8_t max;
uint8_t text[10];
uint8_t bin[8];
if (page > 1) // "normale" Parameter-Seiten
{
line = menu_choose(0,lines-1,4);
if (line != 255) // Wenn line == 255, wurde Escape gedrückt
{
par = p_buffer[array[line]];
min = pgm_read_byte(p_limits + par * 3);
max = pgm_read_byte(p_limits + par * 3 + 1);
lcd_print_atp(4,line,PSTR("-"),0);
while (key != key_nokey);
do
{
if (key == key_minus)
{
//if (par > min) // Überprüfung der Parameter auf Bereichsüberschreitung derzeit deaktiviert
par --;
}
if (key == key_plus)
{
//if (par < max)
par ++;
}
decimal(par,text);
lcd_print_at(0,line,text,0);
timer = 20;
while (timer > 0);
}
while ((key != 0x04) && (key != 0x08));
if (key == 0x08)
p_buffer[array[line]] = par;
}
}
if (page == 1) // Spezialfall: Loop-Config (einzelne Bits setzen / löschen)
{
binary(p_buffer[52],bin);
text[1] = 0x00;
 
line = menu_choose(0,3,4);
if (line != 255) // Wenn line == 255, wurde Escape gedrückt
{
par = bin[line];
lcd_print_atp(4,line,PSTR("-"),0);
do
{
if (key == key_minus)
{
par = 0x00;
}
if (key == key_plus)
{
par = 0x01;
}
text[0] = par+0x30;
lcd_print_at(0,line,text,0);
timer = 20;
while (timer > 0);
}
while ((key != key_enter) && (key != key_esc));
if (key == key_enter)
{
bin[line] = par;
p_buffer[52] = bindec(bin);
}
lcd_cls();
decimal(p_buffer[52],text);
lcd_print(text,0);
timer = 200;
while(timer > 0);
}
}
if (page == 0) // Spezialfall: Allgemeine Konfiguration (einzelne Bits setzen/löschen)
{
binary(p_buffer[8],bin);
text[1] = 0x00;
 
line = menu_choose(0,7,4);
if (line != 255) // Wenn line == 255, wurde Escape gedrückt
{
par = bin[line];
lcd_print_atp(4,line,PSTR("-"),0);
do
{
if (key == key_minus)
{
par = 0x00;
}
if (key == key_plus)
{
par = 0x01;
}
text[0] = par+0x30;
lcd_print_at(0,line,text,0);
timer = 20;
while (timer > 0);
}
while ((key != key_enter) && (key != key_esc));
if (key == key_enter)
{
bin[line] = par;
p_buffer[8] = bindec(bin);
}
lcd_cls();
decimal(p_buffer[8],text);
lcd_print(text,0);
timer = 200;
while(timer > 0);
}
}
}
 
 
void edit_parameter (void) // Blättert die Parameter seitenweise durch, Einsprung vom Hauptmenü
{
uint8_t page; // 12 Pages
uint8_t text[15];
uint8_t lines;
uint8_t parameter;
lcd_cls();
lcd_printp(PSTR("Lade Parameter\r\n"),0);
lcd_printp(PSTR(" 1:\r\n"),0);
lcd_printp(PSTR(" 2:\r\n"),0);
lcd_printp(PSTR(" 3:\r\n"),0);
lcd_printp(PSTR(" 4:\r\n"),0);
lcd_printp(PSTR(" 5:\r\n"),0);
parameter = menu_choose(1,5,0);
 
page = 2;
if (read_parameter(parameter) == 1)
{
lcd_print_atp(0,6,PSTR("Timeout"),0);
}
else
{
do
{
lcd_cls();
utoa(page,text,10);
lcd_print(text,0);
timer = 50;
while (timer > 0);
lcd_cls();
lines = show_parameter(page);
while (key == key_nokey);
if (key == key_plus)
page++;
if (key == key_minus)
page--;
if (page == 255)
page = 12;
if (page > 12)
page = 0;
if (key == key_enter)
edit_parameter2(page,lines);
}
while (key != key_esc);
lcd_cls();
lcd_printp(PSTR("Parameter speichern?\r\n ja\r\n nein"),0);
lines = menu_choose(1,2,0);
if (lines == 1 )
{
lcd_printp(PSTR("\r\n--->"),0);
write_parameter(5); // Sicherheitshalber wird derzeit ausschließlich auf Parametersatz 5 gesichert.
lcd_printp(PSTR("\r\nParameter gespeichert"),0);
}
else
{
lcd_printp(PSTR("\r\nNicht gespeichert"),0);
}
}
timer = 100;
while(timer > 0);
 
}
/Transportables_Koptertool/tags/V-0.1/parameter.h
0,0 → 1,7
#ifndef parameter_h
#define parameter_h
 
void edit_parameter (void);
void decimal (uint8_t data, uint8_t *text);
 
#endif
/Transportables_Koptertool/tags/V-0.1/rs232.c
0,0 → 1,58
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/interrupt.h>
#include "main.h"
#include "rs232.h"
 
volatile uint8_t read_index, write_index;
volatile uint8_t rs232_buffer[16];
 
ISR(USART_RXC_vect)
{
rs232_buffer[write_index++] = UDR;
write_index &= 15;
}
 
void RS232_init (void)
{
UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
// UBRRL = 7; // 57600 Baud @ 7,372800 MHz
UBRR = 7; // 57600 Baud @ 7,372800 MHz
}
 
uint8_t RS232_get (void)
{
uint8_t c;
 
rs232_timer = 10;
while ((read_index == write_index) && (rs232_timer > 0));
if (rs232_timer != 0)
{
c = rs232_buffer[read_index++];
read_index &= 15;
}
else
{
c=0;
}
return c;
}
void RS232_send (uint8_t data)
{
// while ((UCSRA & (1<<UDRE)) == 0);
while ((USR & (1<<UDRE)) == 0);
UDR = data;
}
void RS232_text (uint8_t *text)
{
while (*text)
{
RS232_send(*text);
text++;
}
}
 
 
/Transportables_Koptertool/tags/V-0.1/rs232.h
0,0 → 1,46
#ifndef rs232_h
#define rs232_h
 
void RS232_init (void);
uint8_t RS232_get (void);
void RS232_send (uint8_t data);
void RS232_text (uint8_t *text);
#endif
 
//Anpassen der seriellen Schnittstellen Register wenn ein ATMega128 benutzt wird
#if defined (__AVR_ATmega128__)
#define USR UCSR0A
#define UCR UCSR0B
#define UDR UDR0
#define UBRR UBRR0L
#define EICR EICRB
#endif
 
#if defined (__AVR_ATmega32__)
#define USR UCSRA
#define UCR UCSRB
#define UBRR UBRRL
#define EICR EICRB
#define INT_VEC_RX SIG_UART_RECV
#define INT_VEC_TX SIG_UART_TRANS
#endif
 
#if defined (__AVR_ATmega644__)
#define USR UCSR0A
#define UCR UCSR0B
#define UDR UDR0
#define UBRR UBRR0L
#define EICR EICR0B
#define TXEN TXEN0
#define RXEN RXEN0
#define RXCIE RXCIE0
#define TXCIE TXCIE0
#define U2X U2X0
#define UCSRB UCSR0B
#define UDRE UDRE0
#define INT_VEC_RX SIG_USART_RECV
#define INT_VEC_TX SIG_USART_TRANS
 
#define USART_RXC_vect SIG_USART_RECV
#endif
/Transportables_Koptertool/tags/V-0.1/settings.c
0,0 → 1,70
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
 
#include "main.h"
#include "menu.h"
#include "lcd.h"
#include "settings.h"
 
 
void toggle_display(void)
{
cli();
 
if (LCD_ORIENTATION == 0)
LCD_ORIENTATION = 4;
else LCD_ORIENTATION = 0;
 
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ORIENTATION], LCD_ORIENTATION);
 
lcd_init();
 
sei();
}
 
void LCD_settings(void)
{
 
// uint8_t parameter;
 
char loop = 1;
 
while(loop)
{
lcd_cls();
lcd_printp(PSTR("Einstellungen:\r\n"),0);
lcd_printp(PSTR("\r\n"),0);
lcd_printp(PSTR("Orientierung\r\n"),0);
lcd_printp(PSTR("Linie\r\n"),0);
lcd_printp(PSTR("Rechteck\r\n"),0);
// lcd_printp(PSTR("\r\n"),0);
lcd_printp(PSTR("Exit\r\n"),0);
// parameter = menu_choose(1,5,0);
 
switch(menu_choose(2,5,15))
{
case 2:
toggle_display(); // LCD-Modus
break;
case 3:
lcd_cls();
lcd_line(10,20,100,50, 1);
while ((key != key_enter) && (key != key_esc));
break;
case 4:
lcd_cls();
lcd_rect (10,20,100,40, 1);
while ((key != key_enter) && (key != key_esc));
break;
case 5:
loop = 0;
break;
default:
loop = 0;
break;
}
}
}
/Transportables_Koptertool/tags/V-0.1/settings.h
0,0 → 1,9
void LCD_settings(void);
 
#if defined (__AVR_ATmega32__)
#endif
 
#if defined (__AVR_ATmega644__)
 
#endif
/Transportables_Koptertool/tags/V-0.1/timer.c
0,0 → 1,37
 
#include <avr/io.h>
#include <avr/interrupt.h>
#include "main.h"
#include "timer.h"
 
volatile uint8_t timer;
volatile uint8_t counter, counter2;
volatile uint8_t key;
volatile uint8_t rs232_timer;
 
 
ISR(SIG_OUTPUT_COMPARE0) // Timer-Interrupt (100 Hz)
{
if (counter > 0)
counter --;
else
{
counter = 10;
key = (~PINA >> 4) & 0x0F;
counter2 ++;
}
if (timer > 0)
timer --;
if (rs232_timer > 0)
rs232_timer --;
}
 
void timer_init (void)
{
TCCR0 = (1<<CS02)|(1<<CS00)|(1<<WGM01); // Prescaler 1024
OCR0 = 72; // Interrupt 100Hz für 7,372800 MHz-Quarz
TIMSK |= (1<<OCIE0); // Interrupt freigeben für OCR
}
/Transportables_Koptertool/tags/V-0.1/timer.h
0,0 → 1,26
#ifndef timer_h
#define timer_h
 
volatile uint8_t timer;
volatile uint8_t counter, counter2;
volatile uint8_t key;
volatile uint8_t rs232_timer;
 
void timer_init (void);
 
#endif
 
#if defined (__AVR_ATmega32__)
#endif
 
#if defined (__AVR_ATmega644__)
#define TCCR0 TCCR0A
#define OCR0 OCR0A
#define TIMSK TIMSK0
#define OCIE0 OCIE0A
 
#define INT_VEC_TX SIG_USART_TRANS
 
#define SIG_OUTPUT_COMPARE0 SIG_OUTPUT_COMPARE0A
#endif
/Transportables_Koptertool/tags/V-0.1.1/F8X6.c
0,0 → 1,290
/*******************************************************************************
;
; taskit Rechnertechnik Berlin GmbH
; Kaiser-Friedrich-Straáe 51
; 1000 Berlin 12
; Tel. 030-3245836
; FAX 030-3232649
;
;
; Projekt :
;
; Datei :
;
; Funktion :
;
; Version :
;
; Letzte Änderung : 06/28/95 - 15:04:59
;
; Info :
;
*******************************************************************************/
#include <avr/pgmspace.h>
 
//Die Bytes gehören zu jeweils einer Spalte des Buchstabens
//D7 ist dabei das unterste Bit. Es handelt sich um einen DOS-Font !
//DOS-Zeichensatz
 
prog_uchar f8x6[ 256 ][ 6 ] =
{
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 0
{ 0x3E,0x5B,0x4F,0x5B,0x3E,0x00 }, // ASCII - 1
{ 0x3E,0x6B,0x4F,0x6B,0x3E,0x00 }, // ASCII - 2
{ 0x1C,0x3E,0x7C,0x3E,0x1C,0x00 }, // ASCII - 3
{ 0x18,0x3C,0x7E,0x3C,0x18,0x00 }, // ASCII - 4
{ 0x1C,0x57,0x7D,0x57,0x1C,0x00 }, // ASCII - 5
{ 0x1C,0x5E,0x7F,0x5E,0x1C,0x00 }, // ASCII - 6
{ 0x00,0x18,0x3C,0x18,0x00,0x00 }, // ASCII - 7
{ 0xFF,0xE7,0xC3,0xE7,0xFF,0x00 }, // ASCII - 8
{ 0x00,0x18,0x24,0x18,0x00,0x00 }, // ASCII - 9
{ 0xFF,0xE7,0xDB,0xE7,0xFF,0x00 }, // ASCII - 10
{ 0x30,0x48,0x3A,0x06,0x0E,0x00 }, // ASCII - 11
{ 0x26,0x29,0x79,0x29,0x26,0x00 }, // ASCII - 12
{ 0x40,0x7F,0x05,0x05,0x07,0x00 }, // ASCII - 13
{ 0x40,0x7F,0x05,0x25,0x3F,0x00 }, // ASCII - 14
{ 0x5A,0x3C,0xE7,0x3C,0x5A,0x00 }, // ASCII - 15
{ 0x7F,0x3E,0x1C,0x1C,0x08,0x00 }, // ASCII - 16
{ 0x08,0x1C,0x1C,0x3E,0x7F,0x00 }, // ASCII - 17
{ 0x14,0x22,0x7F,0x22,0x14,0x00 }, // ASCII - 18
{ 0x5F,0x5F,0x00,0x5F,0x5F,0x00 }, // ASCII - 19
{ 0x06,0x09,0x7F,0x01,0x7F,0x00 }, // ASCII - 20
{ 0x00,0x66,0x89,0x95,0x6A,0x00 }, // ASCII - 21
{ 0x60,0x60,0x60,0x60,0x60,0x60 }, // ASCII - 22
{ 0x94,0xA2,0xFF,0xA2,0x94,0x00 }, // ASCII - 23
{ 0x08,0x04,0x7E,0x04,0x08,0x00 }, // ASCII - 24
{ 0x10,0x20,0x7E,0x20,0x10,0x00 }, // ASCII - 25
{ 0x08,0x08,0x2A,0x1C,0x08,0x00 }, // ASCII - 26
{ 0x08,0x1C,0x2A,0x08,0x08,0x00 }, // ASCII - 27
{ 0x1E,0x10,0x10,0x10,0x10,0x00 }, // ASCII - 28
{ 0x0C,0x1E,0x0C,0x1E,0x0C,0x00 }, // ASCII - 29
{ 0x30,0x38,0x3E,0x38,0x30,0x00 }, // ASCII - 30
{ 0x06,0x0E,0x3E,0x0E,0x06,0x00 }, // ASCII - 31
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 32
{ 0x00,0x00,0x5F,0x00,0x00,0x00 }, // ASCII - 33
{ 0x00,0x07,0x00,0x07,0x00,0x00 }, // ASCII - 34
{ 0x14,0x7F,0x14,0x7F,0x14,0x00 }, // ASCII - 35
{ 0x24,0x2A,0x7F,0x2A,0x12,0x00 }, // ASCII - 36
{ 0x23,0x13,0x08,0x64,0x62,0x00 }, // ASCII - 37
{ 0x36,0x49,0x56,0x20,0x50,0x00 }, // ASCII - 38
{ 0x00,0x08,0x07,0x03,0x00,0x00 }, // ASCII - 39
{ 0x00,0x1C,0x22,0x41,0x00,0x00 }, // ASCII - 40
{ 0x00,0x41,0x22,0x1C,0x00,0x00 }, // ASCII - 41
{ 0x2A,0x1C,0x7F,0x1C,0x2A,0x00 }, // ASCII - 42
{ 0x08,0x08,0x3E,0x08,0x08,0x00 }, // ASCII - 43
{ 0x00,0x80,0x70,0x30,0x00,0x00 }, // ASCII - 44
{ 0x08,0x08,0x08,0x08,0x08,0x00 }, // ASCII - 45
{ 0x00,0x00,0x60,0x60,0x00,0x00 }, // ASCII - 46
{ 0x20,0x10,0x08,0x04,0x02,0x00 }, // ASCII - 47
{ 0x3E,0x51,0x49,0x45,0x3E,0x00 }, // ASCII - 48
{ 0x00,0x42,0x7F,0x40,0x00,0x00 }, // ASCII - 49
{ 0x72,0x49,0x49,0x49,0x46,0x00 }, // ASCII - 50
{ 0x21,0x41,0x49,0x4D,0x33,0x00 }, // ASCII - 51
{ 0x18,0x14,0x12,0x7F,0x10,0x00 }, // ASCII - 52
{ 0x27,0x45,0x45,0x45,0x39,0x00 }, // ASCII - 53
{ 0x3C,0x4A,0x49,0x49,0x31,0x00 }, // ASCII - 54
{ 0x41,0x21,0x11,0x09,0x07,0x00 }, // ASCII - 55
{ 0x36,0x49,0x49,0x49,0x36,0x00 }, // ASCII - 56
{ 0x46,0x49,0x49,0x29,0x1E,0x00 }, // ASCII - 57
{ 0x00,0x00,0x14,0x00,0x00,0x00 }, // ASCII - 58
{ 0x00,0x40,0x34,0x00,0x00,0x00 }, // ASCII - 59
{ 0x00,0x08,0x14,0x22,0x41,0x00 }, // ASCII - 60
{ 0x14,0x14,0x14,0x14,0x14,0x00 }, // ASCII - 61
{ 0x00,0x41,0x22,0x14,0x08,0x00 }, // ASCII - 62
{ 0x02,0x01,0x59,0x09,0x06,0x00 }, // ASCII - 63
{ 0x3E,0x41,0x5D,0x59,0x4E,0x00 }, // ASCII - 64
{ 0x7C,0x12,0x11,0x12,0x7C,0x00 }, // ASCII - 65
{ 0x7F,0x49,0x49,0x49,0x36,0x00 }, // ASCII - 66
{ 0x3E,0x41,0x41,0x41,0x22,0x00 }, // ASCII - 67
{ 0x7F,0x41,0x41,0x41,0x3E,0x00 }, // ASCII - 68
{ 0x7F,0x49,0x49,0x49,0x41,0x00 }, // ASCII - 69
{ 0x7F,0x09,0x09,0x09,0x01,0x00 }, // ASCII - 70
{ 0x3E,0x41,0x41,0x51,0x73,0x00 }, // ASCII - 71
{ 0x7F,0x08,0x08,0x08,0x7F,0x00 }, // ASCII - 72
{ 0x00,0x41,0x7F,0x41,0x00,0x00 }, // ASCII - 73
{ 0x20,0x40,0x41,0x3F,0x01,0x00 }, // ASCII - 74
{ 0x7F,0x08,0x14,0x22,0x41,0x00 }, // ASCII - 75
{ 0x7F,0x40,0x40,0x40,0x40,0x00 }, // ASCII - 76
{ 0x7F,0x02,0x1C,0x02,0x7F,0x00 }, // ASCII - 77
{ 0x7F,0x04,0x08,0x10,0x7F,0x00 }, // ASCII - 78
{ 0x3E,0x41,0x41,0x41,0x3E,0x00 }, // ASCII - 79
{ 0x7F,0x09,0x09,0x09,0x06,0x00 }, // ASCII - 80
{ 0x3E,0x41,0x51,0x21,0x5E,0x00 }, // ASCII - 81
{ 0x7F,0x09,0x19,0x29,0x46,0x00 }, // ASCII - 82
{ 0x26,0x49,0x49,0x49,0x32,0x00 }, // ASCII - 83
{ 0x03,0x01,0x7F,0x01,0x03,0x00 }, // ASCII - 84
{ 0x3F,0x40,0x40,0x40,0x3F,0x00 }, // ASCII - 85
{ 0x1F,0x20,0x40,0x20,0x1F,0x00 }, // ASCII - 86
{ 0x3F,0x40,0x38,0x40,0x3F,0x00 }, // ASCII - 87
{ 0x63,0x14,0x08,0x14,0x63,0x00 }, // ASCII - 88
{ 0x03,0x04,0x78,0x04,0x03,0x00 }, // ASCII - 89
{ 0x61,0x59,0x49,0x4D,0x43,0x00 }, // ASCII - 90
{ 0x00,0x7F,0x41,0x41,0x41,0x00 }, // ASCII - 91
{ 0x02,0x04,0x08,0x10,0x20,0x00 }, // ASCII - 92
{ 0x00,0x41,0x41,0x41,0x7F,0x00 }, // ASCII - 93
{ 0x04,0x02,0x01,0x02,0x04,0x00 }, // ASCII - 94
{ 0x40,0x40,0x40,0x40,0x40,0x00 }, // ASCII - 95
{ 0x00,0x03,0x07,0x08,0x00,0x00 }, // ASCII - 96
{ 0x20,0x54,0x54,0x78,0x40,0x00 }, // ASCII - 97
{ 0x7F,0x28,0x44,0x44,0x38,0x00 }, // ASCII - 98
{ 0x38,0x44,0x44,0x44,0x28,0x00 }, // ASCII - 99
{ 0x38,0x44,0x44,0x28,0x7F,0x00 }, // ASCII - 100
{ 0x38,0x54,0x54,0x54,0x18,0x00 }, // ASCII - 101
{ 0x00,0x08,0x7E,0x09,0x02,0x00 }, // ASCII - 102
{ 0x18,0xA4,0xA4,0x9C,0x78,0x00 }, // ASCII - 103
{ 0x7F,0x08,0x04,0x04,0x78,0x00 }, // ASCII - 104
{ 0x00,0x44,0x7D,0x40,0x00,0x00 }, // ASCII - 105
{ 0x20,0x40,0x40,0x3D,0x00,0x00 }, // ASCII - 106
{ 0x7F,0x10,0x28,0x44,0x00,0x00 }, // ASCII - 107
{ 0x00,0x41,0x7F,0x40,0x00,0x00 }, // ASCII - 108
{ 0x7C,0x04,0x78,0x04,0x78,0x00 }, // ASCII - 109
{ 0x7C,0x08,0x04,0x04,0x78,0x00 }, // ASCII - 110
{ 0x38,0x44,0x44,0x44,0x38,0x00 }, // ASCII - 111
{ 0xFC,0x18,0x24,0x24,0x18,0x00 }, // ASCII - 112
{ 0x18,0x24,0x24,0x18,0xFC,0x00 }, // ASCII - 113
{ 0x7C,0x08,0x04,0x04,0x08,0x00 }, // ASCII - 114
{ 0x48,0x54,0x54,0x54,0x24,0x00 }, // ASCII - 115
{ 0x04,0x04,0x3F,0x44,0x24,0x00 }, // ASCII - 116
{ 0x3C,0x40,0x40,0x20,0x7C,0x00 }, // ASCII - 117
{ 0x1C,0x20,0x40,0x20,0x1C,0x00 }, // ASCII - 118
{ 0x3C,0x40,0x30,0x40,0x3C,0x00 }, // ASCII - 119
{ 0x44,0x28,0x10,0x28,0x44,0x00 }, // ASCII - 120
{ 0x4C,0x90,0x90,0x90,0x7C,0x00 }, // ASCII - 121
{ 0x44,0x64,0x54,0x4C,0x44,0x00 }, // ASCII - 122
{ 0x00,0x08,0x36,0x41,0x00,0x00 }, // ASCII - 123
{ 0x00,0x00,0x77,0x00,0x00,0x00 }, // ASCII - 124
{ 0x00,0x41,0x36,0x08,0x00,0x00 }, // ASCII - 125
{ 0x02,0x01,0x02,0x04,0x02,0x00 }, // ASCII - 126
{ 0x3C,0x26,0x23,0x26,0x3C,0x00 }, // ASCII - 127
{ 0x1E,0xA1,0xA1,0x61,0x12,0x00 }, // ASCII - 128 80
{ 0x3A,0x40,0x40,0x20,0x7A,0x00 }, // ASCII - 129
{ 0x38,0x54,0x54,0x55,0x59,0x00 }, // ASCII - 130
{ 0x21,0x55,0x55,0x79,0x41,0x00 }, // ASCII - 131
{ 0x21,0x54,0x54,0x78,0x41,0x00 }, // ASCII - 132
{ 0x21,0x55,0x54,0x78,0x40,0x00 }, // ASCII - 133
{ 0x20,0x54,0x55,0x79,0x40,0x00 }, // ASCII - 134
{ 0x0C,0x1E,0x52,0x72,0x12,0x00 }, // ASCII - 135
{ 0x39,0x55,0x55,0x55,0x59,0x00 }, // ASCII - 136
{ 0x39,0x54,0x54,0x54,0x59,0x00 }, // ASCII - 137
{ 0x39,0x55,0x54,0x54,0x58,0x00 }, // ASCII - 138
{ 0x00,0x00,0x45,0x7C,0x41,0x00 }, // ASCII - 139
{ 0x00,0x02,0x45,0x7D,0x42,0x00 }, // ASCII - 140
{ 0x00,0x01,0x45,0x7C,0x40,0x00 }, // ASCII - 141
// { 0xF0,0x29,0x24,0x29,0xF0,0x00 }, // ASCII - 142 Ä
{ 0x79,0x14,0x12,0x14,0x79,0x00 }, // ASCII - 142 Ä korrigiert
{ 0xF0,0x28,0x25,0x28,0xF0,0x00 }, // ASCII - 143
{ 0x7C,0x54,0x55,0x45,0x00,0x00 }, // ASCII - 144 90
{ 0x20,0x54,0x54,0x7C,0x54,0x44 }, // ASCII - 145
{ 0x7C,0x0A,0x09,0x7F,0x49,0x41 }, // ASCII - 146
{ 0x32,0x49,0x49,0x49,0x32,0x00 }, // ASCII - 147
{ 0x32,0x48,0x48,0x48,0x32,0x00 }, // ASCII - 148
{ 0x32,0x4A,0x48,0x48,0x30,0x00 }, // ASCII - 149
{ 0x3A,0x41,0x41,0x21,0x7A,0x00 }, // ASCII - 150
{ 0x3A,0x42,0x40,0x20,0x78,0x00 }, // ASCII - 151
{ 0x00,0x9D,0xA0,0xA0,0x7D,0x00 }, // ASCII - 152
{ 0x39,0x44,0x44,0x44,0x39,0x00 }, // ASCII - 153
{ 0x3D,0x40,0x40,0x40,0x3D,0x00 }, // ASCII - 154
{ 0x3C,0x24,0xFF,0x24,0x24,0x00 }, // ASCII - 155
{ 0x48,0x7E,0x49,0x43,0x66,0x00 }, // ASCII - 156
{ 0x2B,0x2F,0xFC,0x2F,0x2B,0x00 }, // ASCII - 157
{ 0xFF,0x09,0x29,0xF6,0x20,0x00 }, // ASCII - 158
{ 0xC0,0x88,0x7E,0x09,0x03,0x00 }, // ASCII - 159
{ 0x20,0x54,0x54,0x79,0x41,0x00 }, // ASCII - 160
{ 0x00,0x00,0x44,0x7D,0x41,0x00 }, // ASCII - 161
{ 0x30,0x48,0x48,0x4A,0x32,0x00 }, // ASCII - 162
{ 0x38,0x40,0x40,0x22,0x7A,0x00 }, // ASCII - 163
{ 0x00,0x7A,0x0A,0x0A,0x72,0x00 }, // ASCII - 164
{ 0x7D,0x0D,0x19,0x31,0x7D,0x00 }, // ASCII - 165
{ 0x26,0x29,0x29,0x2F,0x28,0x00 }, // ASCII - 166
{ 0x26,0x29,0x29,0x29,0x26,0x00 }, // ASCII - 167
{ 0x30,0x48,0x4D,0x40,0x20,0x00 }, // ASCII - 168
{ 0x38,0x08,0x08,0x08,0x08,0x00 }, // ASCII - 169
{ 0x08,0x08,0x08,0x08,0x38,0x00 }, // ASCII - 170
{ 0x2F,0x10,0xC8,0xAC,0xBA,0x00 }, // ASCII - 171
{ 0x2F,0x10,0x28,0x34,0xFA,0x00 }, // ASCII - 172
{ 0x00,0x00,0x7B,0x00,0x00,0x00 }, // ASCII - 173
{ 0x08,0x14,0x2A,0x14,0x22,0x00 }, // ASCII - 174
{ 0x22,0x14,0x2A,0x14,0x08,0x00 }, // ASCII - 175
{ 0xAA,0x00,0x55,0x00,0xAA,0x00 }, // ASCII - 176
{ 0xAA,0x55,0xAA,0x55,0xAA,0x55 }, // ASCII - 177
{ 0x55,0xAA,0x55,0xAA,0x55,0xAA }, // ASCII - 178
{ 0x00,0x00,0x00,0xFF,0x00,0x00 }, // ASCII - 179
{ 0x10,0x10,0x10,0xFF,0x00,0x00 }, // ASCII - 180
{ 0x14,0x14,0x14,0xFF,0x00,0x00 }, // ASCII - 181
{ 0x10,0x10,0xFF,0x00,0xFF,0x00 }, // ASCII - 182
{ 0x10,0x10,0xF0,0x10,0xF0,0x00 }, // ASCII - 183
{ 0x14,0x14,0x14,0xFC,0x00,0x00 }, // ASCII - 184
{ 0x14,0x14,0xF7,0x00,0xFF,0x00 }, // ASCII - 185
{ 0x00,0x00,0xFF,0x00,0xFF,0x00 }, // ASCII - 186
{ 0x14,0x14,0xF4,0x04,0xFC,0x00 }, // ASCII - 187
{ 0x14,0x14,0x17,0x10,0x1F,0x00 }, // ASCII - 188
{ 0x10,0x10,0x1F,0x10,0x1F,0x00 }, // ASCII - 189
{ 0x14,0x14,0x14,0x1F,0x00,0x00 }, // ASCII - 190
{ 0x10,0x10,0x10,0xF0,0x00,0x00 }, // ASCII - 191
{ 0x00,0x00,0x00,0x1F,0x10,0x10 }, // ASCII - 192
{ 0x10,0x10,0x10,0x1F,0x10,0x10 }, // ASCII - 193
{ 0x10,0x10,0x10,0xF0,0x10,0x10 }, // ASCII - 194
{ 0x00,0x00,0x00,0xFF,0x10,0x10 }, // ASCII - 195
{ 0x10,0x10,0x10,0x10,0x10,0x10 }, // ASCII - 196
{ 0x10,0x10,0x10,0xFF,0x10,0x10 }, // ASCII - 197
{ 0x00,0x00,0x00,0xFF,0x14,0x14 }, // ASCII - 198
{ 0x00,0x00,0xFF,0x00,0xFF,0x10 }, // ASCII - 199
{ 0x00,0x00,0x1F,0x10,0x17,0x14 }, // ASCII - 200
{ 0x00,0x00,0xFC,0x04,0xF4,0x14 }, // ASCII - 201
{ 0x14,0x14,0x17,0x10,0x17,0x14 }, // ASCII - 202
{ 0x14,0x14,0xF4,0x04,0xF4,0x14 }, // ASCII - 203
{ 0x00,0x00,0xFF,0x00,0xF7,0x14 }, // ASCII - 204
{ 0x14,0x14,0x14,0x14,0x14,0x14 }, // ASCII - 205
{ 0x14,0x14,0xF7,0x00,0xF7,0x14 }, // ASCII - 206
{ 0x14,0x14,0x14,0x17,0x14,0x14 }, // ASCII - 207
{ 0x10,0x10,0x1F,0x10,0x1F,0x10 }, // ASCII - 208
{ 0x14,0x14,0x14,0xF4,0x14,0x14 }, // ASCII - 209
{ 0x10,0x10,0xF0,0x10,0xF0,0x10 }, // ASCII - 210
{ 0x00,0x00,0x1F,0x10,0x1F,0x10 }, // ASCII - 211
{ 0x00,0x00,0x00,0x1F,0x14,0x14 }, // ASCII - 212
{ 0x00,0x00,0x00,0xFC,0x14,0x14 }, // ASCII - 213
{ 0x00,0x00,0xF0,0x10,0xF0,0x10 }, // ASCII - 214
{ 0x10,0x10,0xFF,0x10,0xFF,0x10 }, // ASCII - 215
{ 0x14,0x14,0x14,0xFF,0x14,0x14 }, // ASCII - 216
{ 0x10,0x10,0x10,0x1F,0x00,0x00 }, // ASCII - 217
{ 0x00,0x00,0x00,0xF0,0x10,0x10 }, // ASCII - 218
{ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF }, // ASCII - 219
{ 0xF0,0xF0,0xF0,0xF0,0xF0,0xF0 }, // ASCII - 220
{ 0xFF,0xFF,0xFF,0x00,0x00,0x00 }, // ASCII - 221
{ 0x00,0x00,0x00,0xFF,0xFF,0xFF }, // ASCII - 222
{ 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F }, // ASCII - 223
{ 0x38,0x44,0x44,0x38,0x44,0x00 }, // ASCII - 224
{ 0x7C,0x2A,0x2A,0x3E,0x14,0x00 }, // ASCII - 225
{ 0x7E,0x02,0x02,0x06,0x06,0x00 }, // ASCII - 226
{ 0x02,0x7E,0x02,0x7E,0x02,0x00 }, // ASCII - 227
{ 0x63,0x55,0x49,0x41,0x63,0x00 }, // ASCII - 228
{ 0x38,0x44,0x44,0x3C,0x04,0x00 }, // ASCII - 229
{ 0x40,0x7E,0x20,0x1E,0x20,0x00 }, // ASCII - 230
{ 0x06,0x02,0x7E,0x02,0x02,0x00 }, // ASCII - 231
{ 0x99,0xA5,0xE7,0xA5,0x99,0x00 }, // ASCII - 232
{ 0x1C,0x2A,0x49,0x2A,0x1C,0x00 }, // ASCII - 233
{ 0x4C,0x72,0x01,0x72,0x4C,0x00 }, // ASCII - 234
{ 0x30,0x4A,0x4D,0x4D,0x30,0x00 }, // ASCII - 235
{ 0x30,0x48,0x78,0x48,0x30,0x00 }, // ASCII - 236
{ 0xBC,0x62,0x5A,0x46,0x3D,0x00 }, // ASCII - 237
{ 0x3E,0x49,0x49,0x49,0x00,0x00 }, // ASCII - 238
{ 0x7E,0x01,0x01,0x01,0x7E,0x00 }, // ASCII - 239
{ 0x2A,0x2A,0x2A,0x2A,0x2A,0x00 }, // ASCII - 240
{ 0x44,0x44,0x5F,0x44,0x44,0x00 }, // ASCII - 241
{ 0x40,0x51,0x4A,0x44,0x40,0x00 }, // ASCII - 242
{ 0x40,0x44,0x4A,0x51,0x40,0x00 }, // ASCII - 243
{ 0x00,0x00,0xFF,0x01,0x03,0x00 }, // ASCII - 244
{ 0xE0,0x80,0xFF,0x00,0x00,0x00 }, // ASCII - 245
{ 0x08,0x08,0x6B,0x6B,0x08,0x08 }, // ASCII - 246
{ 0x36,0x12,0x36,0x24,0x36,0x00 }, // ASCII - 247
{ 0x06,0x0F,0x09,0x0F,0x06,0x00 }, // ASCII - 248
{ 0x00,0x00,0x18,0x18,0x00,0x00 }, // ASCII - 249
{ 0x00,0x00,0x10,0x10,0x00,0x00 }, // ASCII - 250
{ 0x30,0x40,0xFF,0x01,0x01,0x00 }, // ASCII - 251
{ 0x00,0x1F,0x01,0x01,0x1E,0x00 }, // ASCII - 252
{ 0x00,0x19,0x1D,0x17,0x12,0x00 }, // ASCII - 253
{ 0x00,0x3C,0x3C,0x3C,0x3C,0x00 }, // ASCII - 254
{ 0x00,0x00,0x00,0x00,0x00,0x00 } // ASCII - 255
};
 
/************************ E n d o f F i l e ****************************/
/Transportables_Koptertool/tags/V-0.1.1/MMT.hex
0,0 → 1,728
:100000000C94E3060C9400070C9400070C94000772
:100010000C9400070C9400070C9400070C94000744
:100020000C9400070C9400070C94F1120C94000738
:100030000C9400070C9497120C9400070C94000782
:100040000C9400070C9400070C9400070C94000714
:100050000C940007202020202020000D0A54696DF8
:10006000656F75742100446973706C6179000000DC
:10007000000000003E5B4F5B3E003E6B4F6B3E005E
:100080001C3E7C3E1C00183C7E3C18001C577D57D3
:100090001C001C5E7F5E1C0000183C180000FFE77F
:1000A000C3E7FF00001824180000FFE7DBE7FF00AC
:1000B00030483A060E00262979292600407F05059A
:1000C0000700407F05253F005A3CE73C5A007F3E31
:1000D0001C1C0800081C1C3E7F0014227F221400F8
:1000E0005F5F005F5F0006097F017F000066899502
:1000F0006A0060606060606094A2FFA294000804DF
:100100007E04080010207E20100008082A1C080029
:10011000081C2A0808001E10101010000C1E0C1ECF
:100120000C0030383E383000060E3E0E060000004F
:100130000000000000005F00000000070007000052
:10014000147F147F1400242A7F2A120023130864CA
:100150006200364956205000000807030000001CCA
:10016000224100000041221C00002A1C7F1C2A00A2
:1001700008083E08080000807030000008080808E1
:1001800008000000606000002010080402003E51DA
:1001900049453E0000427F400000724949494600FF
:1001A0002141494D33001814127F10002745454561
:1001B00039003C4A494931004121110907003649BB
:1001C00049493600464949291E0000001400000034
:1001D00000403400000000081422410014141414DC
:1001E00014000041221408000201590906003E4192
:1001F0005D594E007C1211127C007F49494936003E
:100200003E41414122007F4141413E007F494949F1
:1002100041007F09090901003E41415173007F08F7
:1002200008087F0000417F4100002040413F01005D
:100230007F08142241007F40404040007F021C02A2
:100240007F007F0408107F003E4141413E007F094E
:10025000090906003E4151215E007F091929460027
:1002600026494949320003017F0103003F404040D5
:100270003F001F2040201F003F4038403F006314D4
:10028000081463000304780403006159494D4300D6
:10029000007F41414100020408102000004141411B
:1002A0007F0004020102040040404040400000037F
:1002B000070800002054547840007F284444380048
:1002C000384444442800384444287F003854545467
:1002D000180000087E09020018A4A49C78007F087A
:1002E0000404780000447D4000002040403D0000B0
:1002F0007F102844000000417F4000007C04780407
:1003000078007C0804047800384444443800FC1821
:100310002424180018242418FC007C080404080075
:1003200048545454240004043F4424003C404020DA
:100330007C001C2040201C003C4030403C004428F5
:10034000102844004C9090907C004464544C44002D
:100350000008364100000000770000000041360828
:1003600000000201020402003C2623263C001EA1DC
:10037000A16112003A4040207A0038545455590087
:100380002155557941002154547841002155547824
:1003900040002054557940000C1E5272120039550D
:1003A000555559003954545459003955545458002E
:1003B0000000457C41000002457D42000001457C73
:1003C0004000791412147900F0282528F0007C549C
:1003D000554500002054547C54447C0A097F49410F
:1003E000324949493200324848483200324A484886
:1003F00030003A4141217A003A4240207800009D85
:10040000A0A07D003944444439003D4040403D00B7
:100410003C24FF242400487E494366002B2FFC2FF8
:100420002B00FF0929F62000C0887E090300205414
:10043000547941000000447D41003048484A320070
:10044000384040227A00007A0A0A72007D0D193184
:100450007D002629292F2800262929292600304811
:100460004D4020003808080808000808080838002F
:100470002F10C8ACBA002F102834FA0000007B00FF
:10048000000008142A14220022142A140800AA00CA
:100490005500AA00AA55AA55AA5555AA55AA55AA63
:1004A000000000FF0000101010FF0000141414FFE3
:1004B00000001010FF00FF001010F010F0001414E6
:1004C00014FC00001414F700FF000000FF00FF0000
:1004D0001414F404FC00141417101F0010101F1043
:1004E0001F001414141F0000101010F00000000072
:1004F000001F10101010101F1010101010F010100E
:10050000000000FF1010101010101010101010FF3D
:100510001010000000FF14140000FF00FF10000086
:100520001F1017140000FC04F414141417101714EF
:100530001414F404F4140000FF00F7141414141439
:1005400014141414F700F7141414141714141010BE
:100550001F101F10141414F414141010F010F010C5
:1005600000001F101F100000001F1414000000FCEA
:1005700014140000F010F0101010FF10FF101414ED
:1005800014FF14141010101F0000000000F01010D1
:10059000FFFFFFFFFFFFF0F0F0F0F0F0FFFFFF00C4
:1005A0000000000000FFFFFF0F0F0F0F0F0F384478
:1005B000443844007C2A2A3E14007E0202060600CB
:1005C000027E027E02006355494163003844443C88
:1005D0000400407E201E200006027E02020099A533
:1005E000E7A599001C2A492A1C004C7201724C0094
:1005F000304A4D4D3000304878483000BC625A4691
:100600003D003E49494900007E0101017E002A2A41
:100610002A2A2A0044445F44440040514A4440008E
:1006200040444A5140000000FF010300E080FF0009
:10063000000008086B6B0808361236243600060FD7
:10064000090F06000000181800000000101000003C
:100650003040FF010100001F01011E0000191D179D
:100660001200003C3C3C3C000000000000004D6FCC
:1006700064206279204D696B656C6A6F2030352F7C
:1006800030380020202053657474696E67730D0A3A
:1006900000202020446562756720446174656E0DFA
:1006A0000A002020204D6F746F72746573740D0AF8
:1006B00000202020506172616D657465720D0A0022
:1006C000202020446973706C61790D0A0020204855
:1006D000617570746D656EFC202856302E312E3198
:1006E000290D0A00506F727461626C6573204B6F44
:1006F00070746572746F6F6C0D0A002A00200054CC
:1007000061737465206472FC636B656E0D0A00434F
:100710006F6E66696720202020004368616E6E65F9
:100720006C73202000537469636B2020202020000C
:10073000486F6568652020202020004779726F206F
:100740002020202020004C6F6F70696E67202020D1
:100750000043616D6572612020202000536F6E732D
:10076000746967657320005573657220202020200E
:100770002000436F75706C696E67202000436F6EB8
:1007800066696728322920004C6F6F70696E677345
:100790006574000202020202020202000404040460
:1007A00004040303030808080805050808080005F1
:1007B000090909090707070707070606060A0A06BF
:1007C000060505050909090900070B0B0B0B0C0CA5
:1007D0000C0C0C0C0C0C01080201080201080201AF
:1007E00008020108020108020108020108020000D3
:1007F0000000FF0400FF0400FF0400FF04003204B7
:1008000000FF040006030040030014030020082139
:10081000FA0800320800FF0800000500000500FA91
:100820000800FA0800FA0800010000FF0500FF09AF
:1008300000FF0900FF0900FF0900FF0700FA070099
:10084000FA0700FA0700190700FF0600FA0600FA87
:100850000600FF0A00FF0A00FA0600FA0600FA0581
:1008600000FA0500FF0500FF0900FF0900FF09006D
:10087000FF09000001000107000000000000000067
:100880000000000000000000000000000000000068
:10089000000000000000000000000000004C6F6F2E
:1008A000702075702020202020202020004C6F6FA9
:1008B0007020646F776E092020202000004C6F6F3D
:1008C00070206C656674202020202020004C6F6F03
:1008D0007020726967687420202020200048F66824
:1008E000656E7265676C6572202020200048F6688E
:1008F000656E736368616C74657220200048656181
:1009000064686F6C6409090000000000004B6F6DA3
:10091000706173730909000000000000004B6F6DE7
:1009200070617373466978090900000000475053ED
:100930000909090000000000000000000041636890
:1009400073656E6B6F70706C756E672000447265B6
:10095000687261746509090000000000004E696357
:100960006B202020202020202020202000526F6C8F
:100970006C20202020202020202020200047617390
:1009800020202020202020202020202000476965D2
:1009900072090909000000000000000000506F7497
:1009A00069310909090000000000000000506F745F
:1009B00069320909090000000000000000506F744E
:1009C00069330909090000000000000000506F743D
:1009D00069340909090000000000000000436F6E3F
:1009E00066696709090900000000000000486F659A
:1009F00068655F4D696E476173202020004C756605
:100A000074647275636B5F4420202020004D617810
:100A1000486F6568652020202020202000486F65F1
:100A200068655F50202020202020202000486F652E
:100A300068655F56657273746165726B00486F65B7
:100A400068655F4143435F5769726B2E0053746959
:100A5000636B5F50202020202020202000537469E9
:100A6000636B5F4420202020202020200047696500
:100A7000725F50202020202020202020004761731A
:100A80005F4D696E202020202020202000476173C8
:100A90005F4D61782020202020202020004779729F
:100AA0006F41636346616B746F720900004B6F6D39
:100AB000706173735769726B756E67200047797246
:100AC0006F5F5020090900000000000000477972A4
:100AD0006F5F4909090900000000000000556E74AD
:100AE00065727370616E6E756E672020004E6F7454
:100AF000476173090909000000000000004E6F748F
:100B00004761735A65697420202020200055666F64
:100B10004175737269636874756E672000495F463A
:100B2000616B746F72202020202020200055736597
:100B300072506172616D31090900000000557365E2
:100B400072506172616D32090900000000557365D1
:100B500072506172616D33090900000000557365C0
:100B600072506172616D34090900000000536572B2
:100B7000766F4E69636B4374726C09000053657243
:100B8000766F4E69636B436F6D7009000053657239
:100B9000766F4E69636B4D696E0900000053657294
:100BA000766F4E69636B4D61780900000053657282
:100BB000766F4E69636B526566727368004C6F6F37
:100BC000704761734C696D6974090000004C6F6F68
:100BD000705468726573686F6C640900004C6F6FC5
:100BE00070487973746572657365090000416368C4
:100BF000734B6F70706C756E67090000004163681D
:100C000073476567656E4B6F70706C2E0057696E29
:100C10006B6C556D7363686C4E69636B0057696EDE
:100C20006B6C556D7363686C526F6C6C00477972B6
:100C30006F4163634162676C656963680044726910
:100C400066746B6F6D700909000000000044796ED6
:100C5000616D696353746162696C69740055736591
:100C600072506172616D35090900000000557365AD
:100C700072506172616D360909000000005573659C
:100C800072506172616D370909000000005573658B
:100C900072506172616D380909000000004C6F6F7D
:100CA00070436F6E66696709090000000053657242
:100CB000766F4E69636B436F6D70496E000D0A4E1F
:100CC00069636874206765737065696368657274C9
:100CD000000D0A506172616D6574657220676573FD
:100CE0007065696368657274000D0A2D2D2D3E00D4
:100CF000506172616D6574657220737065696368B7
:100D000065726E3F0D0A20206A610D0A20206E6513
:100D1000696E0054696D656F75740020353A0D0A6F
:100D20000020343A0D0A0020333A0D0A0020323AEE
:100D30000D0A0020313A0D0A004C616465205061B3
:100D400072616D657465720D0A002D002D002D0015
:100D5000457869740D0A00526563687465636B0DAC
:100D60000A004C696E69650D0A004F7269656E7400
:100D7000696572756E670D0A000D0A0045696E732C
:100D800074656C6C756E67656E3A0D0A00202020E4
:100D90002020202020202020202020202020202053
:100DA00020000D0A54696D656F757421000D0A5499
:100DB000696D656F7574210044656275672D4469BE
:100DC00073706C61790011241FBECFE5D8E0DEBFDF
:100DD000CDBF10E0A0E6B0E0ECE6FDE202C0059079
:100DE0000D92A036B107D9F717E0A0E6B0E001C038
:100DF0001D92A03DB107E1F70E94FE0D0C94B516BF
:100E00000C940000782F52E060E026C0E52FFF2709
:100E1000E951FB4F21812D5332813D5343814D5385
:100E20005C5FDC01AD59BB4F80818D53880F880F0B
:100E3000922F92959F70892B8C932295207F832FE0
:100E400086958695282BFD0121833295330F330F2C
:100E5000307C342B32836D5F862F99275717B0F281
:100E600008950F931F93B82F809163048093E70434
:100E7000809164048093E804809165048093E90480
:100E8000A3E073E035C0E72FFF27ED59FB4F8081CA
:100E9000418162817D5FEA2FFF27E951FB4F282FB7
:100EA00026952695235C208355279927837090707B
:100EB00024E0880F991F2A95E1F79A0104E03695FE
:100EC00027950A95E1F7822B835C81834F705070E0
:100ED000440F551F440F551F862F82958695869582
:100EE0008370842B835C82836F73635C6383AC5FEA
:100EF0007B1748F290E020E030E008C0E92FFF27A0
:100F0000E951FB4F8081280F311D9F5F9A17B1F780
:100F10003F70EA2FFF27E951FB4FC90136E0969554
:100F200087953A95E1F7835C80832F73235C218357
:100F30008DE0828313820A2F0D5F10E008C0E12F3D
:100F4000FF27E951FB4F80810E94E3121F5F1017BA
:100F5000B1F71F910F9108951F9384E180936B0562
:100F60000E94BE12833221F080916B058823C1F765
:100F700080916B05882319F481E090E017C00E94EE
:100F8000BE128093E70411E00AC00E94BE12E12F56
:100F9000FF27E951FB4F80831F5F17FD1FE78D304F
:100FA000A1F7812F0E94020780E090E01F91089531
:100FB0001F93CF93DF93CDB7DEB761970FB6F89449
:100FC000DEBF0FBECDBF182F83E28093630481E69E
:100FD0008093640480936504109366041092670400
:100FE0001092680486E00E9431070E94AC0780914D
:100FF000E8048134D1F7E3E6F4E0DE011196819153
:101000008D9384E0E337F807D1F7198A177020E051
:10101000AE014F5F5F4F612F80E00E94FC0A619636
:101020000FB6F894DEBF0FBECDBFDF91CF911F91F9
:1010300008959F92AF92BF92CF92DF92EF92FF926C
:101040000F931F93CF93DF93CDB7DEB761970FB6A2
:10105000F894DEBF0FBECDBF0E945A099924A92C77
:10106000BB2453E0AA0CBB1C5A95E1F7FA2C00E014
:1010700010E08F2D800F0E94D8070F5F1F4F0830A0
:101080001105B9F70E94AC078091E804843489F512
:101090007501EE0CFF1C85E694E0E80EF91ECC24E9
:1010A000DD248E010F5F1F4FF70120818181992779
:1010B000982F88274AE050E0B801820F911D0E94C6
:1010C000271620E044E550E06C2D8EE00E94C60A11
:1010D00020E0A8016C2D8EE00E94FC0A0894C11C3F
:1010E000D11C82E090E0E80EF91E98E0C916D10408
:1010F000C1F680916E05882329F280916E058130BA
:1011000009F4939480916E05823009F49A94809149
:101110006E05883019F0E3E09E22A1CF61960FB6EC
:10112000F894DEBF0FBECDBFDF91CF911F910F911D
:10113000FF90EF90DF90CF90BF90AF909F90089579
:101140001F9393E29093630491E69093640498E66E
:10115000909365048093660410926704109268046B
:1011600086E00E94310710E00E94AC07813009F44C
:101170001AE01F5F8091E8048053853018F01A3020
:1011800098F304C080E090E01A3010F081E090E025
:101190001F9108951F93CF93DF93CDB7DEB72A97A2
:1011A0000FB6F894DEBF0FBECDBF0E945A0960E0B3
:1011B00086E690E00E94980A80916E058823E1F708
:1011C0000E94A008813069F460E08BE590E00E9405
:1011D000980A88EC80936B0580916B05882369F1F0
:1011E000FBCF1091E80419831A8220E0AE014F5F13
:1011F0005F4F60E08AE00E94FC0A1F5F20E043E648
:1012000054E0612F80E00E94FC0A8AE080936B0525
:1012100080916B058823E1F780916E05813011F490
:101220000E94A00880916E05823011F40E94A008EF
:1012300080916E05843009F0BFCF2A960FB6F894DE
:10124000DEBF0FBECDBFDF91CF911F910895C4982F
:101250008FB9779BFECF8EB18EB9C49A08951F9334
:10126000CF93DF93E2E6F0E0119284E0E236F807F4
:10127000D9F710EBC398812F0E94270980E10E94C3
:101280002709809161000E942709C39AC0E0D0E03D
:1012900080E00E9427092196C038D105C9F71F5F59
:1012A000183B41F71092690510926A05DF91CF91C2
:1012B0001F9108950E942F09089583E397E00197F5
:1012C000F1F708950F931F93CF93DF938C01C0E044
:1012D000D0E003C00E945D092196C017D107D1F765
:1012E000DF91CF911F910F9108951092690510928F
:1012F0006A058FEF87BB8EE58DB9C49AC2988AE0E4
:1013000090E00E946209C29AC498C39880E40E9447
:10131000270980916100882329F481EA0E94270926
:1013200080EC04C080EA0E94270988EC0E9427090B
:1013300086EA0E94270982EA0E9427098FE20E941A
:10134000270988EF0E94270980E00E94270987E289
:101350000E94270981E80E94270986E10E94270947
:101360008CEA0E94270980E00E9427098FEA0E94E8
:1013700027090E942F090895FF920F931F938C0154
:10138000F62EC398880F892F881F990B9195805549
:101390000E942709809161000F77080F802F8295A6
:1013A0008F70805F0E942709802F8F700E9427090D
:1013B000C39A8F2D0E9427091F910F91FF900895C6
:1013C000EF92FF920F931F93CF93DF93C0E0D0E093
:1013D00002E610E032EEE32E30E0F32EF7018191C9
:1013E0007F01F801808361918F01CE010E94BC09C9
:1013F0002196F3E0C038DF0789F702EE13E0F80129
:1014000011928F0160E0CE010E94BC092196F4E0A8
:10141000C030DF07A1F7DF91CF911F910F91FF90AF
:10142000EF900895CF92DF92EF92FF920F931F9368
:10143000CF93DF93D22E4F3D81F0403E38F4463DAE
:10144000B1F04C3DB1F0443CA9F40FC0463F49F027
:101450004C3F49F0443E71F402C041EE0BC044E8F9
:1014600009C044E907C041E805C04EE803C049E9A6
:1014700001C04AE9062F11271695102F002717954E
:10148000079526E0829FC0011124080F191F1370D1
:10149000429F700111248EE690E0E80EF91ECC24E4
:1014A000E801CE59DF4FF7019491F2E0DF16A1F089
:1014B000FD1530F0DD2059F081E0D816B1F409C0F7
:1014C000E3E0DE1661F0F4E0DF1679F40AC09883F9
:1014D0000CC08881892B08C08881892705C0888134
:1014E00002C088819095892388836991C8010E94F0
:1014F000BC09C3940894E11CF11C0F5F1F4F86E0E8
:10150000C81689F6DF91CF911F910F91FF90EF9050
:10151000DF90CF90089580916A058F5F80936A0570
:10152000883028F00E94E00987E080936A050895DA
:101530001F93CF93DF93EC01162F20C04032A0F011
:101540002196212F60916A05809169050E94120AF7
:10155000809169058F5F80936905853178F01092DD
:1015600069050E948B0A0AC04A3029F04D3029F4DF
:101570001092690502C00E948B0A2196FE014491D7
:101580004423E1F6DF91CF911F910895809369057F
:1015900060936A05622FCA010E94980A08951F93FA
:1015A000CF93DF93EC01162F20C04032A0F021969C
:1015B000212F60916A05809169050E94120A80912D
:1015C00069058F5F80936905853178F01092690510
:1015D0000E948B0A0AC04A3029F04D3029F410923B
:1015E000690502C00E948B0A219648814423E9F6CE
:1015F000DF91CF911F9108958093690560936A05EB
:10160000622FCA010E94CF0A0895982F87FD39C022
:101610006034B8F5862F869586958695282F3327D2
:101620003695322F222737952795290F311D677060
:1016300081E090E001C0880F6A95EAF7682F337067
:10164000413061F0413018F04230A1F40DC0F90191
:10165000EE59FF4F8081609586230BC0F901EE594A
:10166000FF4F8081862B05C0F901EE59FF4F808125
:1016700086278083F901EE59FF4F6081C9010E94DE
:10168000BC0908952F923F924F925F926F927F9282
:101690008F929F92AF92BF92CF92DF92EF92FF9282
:1016A0000F931F93CF93DF93CDB7DEB728970FB675
:1016B000F894DEBF0FBECDBF8D83162F0E83682E2C
:1016C0007724862E9924842F99279C838B838619CF
:1016D0009709E22FFF27FA83E9839F012819390927
:1016E00097FF04C0FFEF2F2E3F2E07C040E050E0D1
:1016F000009711F041E050E01A0137FF04C0EFEF0E
:101700004E2E5E2E08C040E050E02115310511F04C
:1017100041E050E02A016C0197FF04C0D094C194CD
:10172000D108D394790137FF04C0F094E194F10813
:10173000F3944E81682D862D0E94050BEC14FD0458
:101740007CF5C60162E070E00E948E1644275527A2
:10175000461B570B58874F83A22CB62CB20C5D81C9
:10176000052F112717C08F8198858E0D9F1D988793
:101770008F831816190634F4840C951C8C199D0956
:1017800098878F834E81682D8B2D0E94050B020D4B
:10179000131DBA0CEB81FC810E171F0721F72DC01A
:1017A000C70162E070E00E948E1644275527461B51
:1017B000570B58874F83A42CB82CB40C012F11273A
:1017C00017C08F8198858C0D9D1D98878F83181663
:1017D000190634F4620C731C8E199F0998878F8345
:1017E0004E816B2D862D0E94050B040D151DBA0C24
:1017F000E981FA810E171F0721F728960FB6F89492
:10180000DEBF0FBECDBFDF91CF911F910F91FF9033
:10181000EF90DF90CF90BF90AF909F908F907F9090
:101820006F905F904F903F902F900895BF92CF920E
:10183000DF92EF92FF920F931F93CF93DF93182FB6
:10184000B02E87FD1FE7603408F06FE37727CB01E8
:10185000820F911D9C01812F840F912D911D6C0190
:1018600091E8C916D10418F0B0E8CB2ED12C79013B
:101870002134310518F0A0E4EA2EF12CEB0108C068
:101880000B2D2C2F4C2D6C2F812F0E94420B21965B
:10189000EC16FD06A8F7DF91CF911F910F91FF90F5
:1018A000EF90DF90CF90BF900895CF92DF92EF92AC
:1018B000FF920F931F93CF93DF93D82EC02E87FFF5
:1018C00002C08FE7D82E162F603408F01FE3812F57
:1018D000820F912D911DEC018D2D840F912D911D65
:1018E0007C0191E8E916F10418F000E8E02EF12CF3
:1018F0000C2D212F4E2D612F8D2D0E94420BC134B6
:10190000D10510F0C0E4D0E00C2D2C2F4E2D612F0E
:101910008E2D0E94420B2C2F4D2D6C2F8E2D0E9450
:10192000420B212F4D2D6C2F8D2D0E94420BDF91EC
:10193000CF911F910F91FF90EF90DF90CF9008957E
:101940002F923F924F925F926F927F928F929F92CF
:10195000AF92BF92CF92DF92EF92FF920F931F93BD
:10196000CF93DF93CDB7DEB724970FB6F894DEBFE1
:101970000FBECDBF8C016B017A01A22E21E030E0B9
:10198000241B350B3C832B83CA01880F991F6624C7
:101990007724681A790A462E502E640F4A2D802F1C
:1019A0000E94050B6C2D6E194A2D802F0E94050B8D
:1019B0004A2D6C2D802F8E0D0E94050B4A2D6C2D0B
:1019C000802F8E190E94050B4701222433241A828E
:1019D000198258C08B819C8197FD0BC008948108A7
:1019E0009108E2E0F0E06E0E7F1E860D971D9C834D
:1019F0008B830894211C311C29813A812E5F3F4F33
:101A00003A8329838B819C810196820F931F9C834B
:101A10008B83142D180DD52CD20C4A2D612F8D2DB2
:101A20000E94050BE52CE2184A2D612F8E2D0E9495
:101A3000050B142D18194A2D612F8D2D0E94050BB1
:101A40004A2D612F8E2D0E94050B142D120DE52CB1
:101A5000E80C4A2D612F8E2D0E94050B952D9819AB
:101A6000092F4A2D612F892F0E94050B142D121961
:101A70004A2D612F8E2D0E94050B4A2D612F802F3C
:101A80000E94050B281439040CF4A4CF24960FB639
:101A9000F894DEBF0FBECDBFDF91CF911F910F91A4
:101AA000FF90EF90DF90CF90BF90AF909F908F907E
:101AB0007F906F905F904F903F902F9008952F925E
:101AC0003F924F925F926F927F928F929F92AF92CE
:101AD000BF92CF92DF92EF92FF920F931F93CF931B
:101AE000DF936B017A0151E0A52EB12CAE18BF082F
:101AF0009701220F331F88249924821A930A662E95
:101B0000782E262F2E196E0D01E0482F0E94420BD1
:101B1000472D4E192C2D6C2D872D8E0D0E94420BBA
:101B2000E70144245524222433243AC0B7FC07C0DB
:101B3000219782E090E0880E991EA80CB91C0894A9
:101B4000411C511C82E090E0280E391E0894A11C13
:101B5000B11CA20CB31C1C2F662D6C0FE72CE418D3
:101B6000D72CD40C01E0262F4E2D8D2D0E94420B38
:101B7000662D6C1B262F4E2D8D2D0E94420B662D3F
:101B8000640DE72CEC1A170D262F4E2D812F0E9485
:101B9000420B662D6419262F4E2D812F0E94420B79
:101BA0004C165D061CF2DF91CF911F910F91FF90B3
:101BB000EF90DF90CF90BF90AF909F908F907F90ED
:101BC0006F905F904F903F902F900895A2E0B0E00B
:101BD0000E94A116802D992780936100089581E0CD
:101BE00021E030E0D901082E0E94A91680E02F5F85
:101BF0003F4FD901082E0E94A91608958FEF8BBB85
:101C000083E488BB8CEF85BB8CE782BB83E084BB1D
:101C100080E881BB21E030E0D9010E94A116802D2F
:101C2000813071F081E0D901082E0E94A91680E070
:101C30002F5F3F4FD901082E0E94A9162150304036
:101C40002F5F3F4FD9010E94A116802D99278093C5
:101C500061000E9475090E94B9120E9430137894A5
:101C60000E94870EFDCF0F931F93062F142F20E0A5
:101C70004DEF56E0682F812F0E94C60A20E04BEFFF
:101C800056E0602F812F0E94C60A1F910F91089580
:101C9000EF92FF920F931F93082FE62EF42E682FDA
:101CA0000E94330E102F912F80916E058823E1F74B
:101CB00080916E058823E1F380916E05823019F4DE
:101CC0001E1508F41F5F80916E05813019F401170D
:101CD00008F411504F2D612F892F0E94330E8091EF
:101CE0006E05883021F080916E058430E1F6809198
:101CF0006E05843009F41FEF80916E058823E1F7AB
:101D0000812F99271F910F91FF90EF9008950E94C6
:101D10005A0960E084EE96E00E94980A60E08DEC3B
:101D200096E00E94980A60E080EC96E00E94980A93
:101D300060E081EB96E00E94980A60E082EA96E01B
:101D40000E94980A60E081E996E00E94980A60E0AB
:101D500083E896E00E94980A60E08EE696E00E9492
:101D6000980A4FE066E082E00E94480E843091F0CD
:101D7000853028F4823041F08330A1F408C08530EA
:101D800061F0863079F40CC00E94CA0808950E9460
:101D9000E41108950E94D30E08950E94311508950C
:101DA0000E944E1308950E945A0980916E0588235F
:101DB000E1F760E08FEF96E00E94980A80916E054F
:101DC0008823E1F380916E058830C9F483E2809323
:101DD000630481E68093640484E7809365048AE069
:101DE00080936604809367048093680480936904F9
:101DF00010926A0410926B0489E00E94310780916E
:101E00006E058823E1F780916E058823E1F383E274
:101E10008093630481E68093640484E7809365047F
:101E2000109266041092670410926804109269047C
:101E300010926A0410926B0489E00E9431070895A1
:101E4000FB0120E030E0482F552761E0CA01022E57
:101E500002C0959587950A94E2F780FF02C06083DF
:101E600001C010822F5F3F4F31962830310571F746
:101E7000089540E020E030E061E070E0FC018191F5
:101E8000813041F4CB01022E02C0880F991F0A94C1
:101E9000E2F7480F2F5F3F4F2830310581F7842F3D
:101EA00099270895482FFB0164E60E946E168083EF
:101EB00024E6829FC0011124481B842F6AE00E94FF
:101EC0006E162AE0829F90011124421B405D4283DE
:101ED0009081905D9083805D8183903329F490E2BE
:101EE0009083803309F4918313820895CF92DF9217
:101EF000EF92FF920F931F93CF93DF93CDB7DEB78F
:101F000062970FB6F894DEBF0FBECDBF823008F4E3
:101F100055C0615044E080E00E94480EC82E8FEF0B
:101F2000C81609F421C1EC2CFF24F701EA54F84F3C
:101F3000E081FF27ED59FB4FD08020E04EE45DE0CB
:101F40006C2D84E00E94C60A80916E058823E1F71B
:101F500080916E05813009F4DA9480916E058230AB
:101F600009F4D3948E01075F1F4FB8018D2D0E9495
:101F7000520F20E0A8016C2D80E00E94FC0A84E151
:101F800080936B0580916B058823E1F780916E0546
:101F9000843021F080916E058830D1F680916E05F5
:101FA000883009F0E1C0A6EBB7E0EA0EFB1ED701CE
:101FB000EC91FF27ED59FB4FD082D6C0813009F05C
:101FC00069C08E010F5F1F4FB801809197040E9476
:101FD000200F1A8644E063E080E00E94480ED82E6D
:101FE000BFEF8B1709F4C0C0E82EFF240E0D1F1D94
:101FF000F801008120E04CE45DE0682F84E00E945D
:10200000C60A80916E05813009F400E080916E056A
:10201000823009F401E0005D0987005320E0AE0141
:10202000475F5F4F6D2D80E00E94FC0A84E1809342
:102030006B0580916B058823E1F780916E058830F0
:1020400021F080916E058430E1F680916E05883034
:1020500051F4CE010196E80EF91ED7010C930E94AF
:10206000390F809397040E945A098E01075F1F4F12
:10207000B801809197040E94520F60E0C8010E944D
:10208000CF0A88EC80936B0580916B05882309F457
:102090006BC0FACF882309F067C08E010F5F1F4F16
:1020A000B80180916B040E94200F1A8644E067E01B
:1020B00080E00E94480ED82EBFEF8B1709F454C061
:1020C000E82EFF240E0D1F1DF801008120E04AE4D8
:1020D0005DE0682F84E00E94C60A80916E05813021
:1020E00009F400E080916E05823009F401E0005DA2
:1020F0000987005320E0AE01475F5F4F6D2D80E000
:102100000E94FC0A84E180936B0580916B05882313
:10211000E1F780916E05883021F080916E05843062
:10212000E1F680916E05883051F4CE010196E80EFB
:10213000F91ED7010C930E94390F80936B040E9403
:102140005A098E01075F1F4FB80180916B040E94EE
:10215000520F60E0C8010E94CF0A88EC80936B05A3
:1021600080916B058823E1F762960FB6F894DEBF85
:102170000FBECDBFDF91CF911F910F91FF90EF90D8
:10218000DF90CF9008956F927F928F929F92AF923F
:10219000BF92CF92DF92EF92FF920F931F93CF9354
:1021A000DF93CDB7DEB7A1970FB6F894DEBF0FBEB1
:1021B000CDBFE82E81E08E1508F044C048EDA42E76
:1021C00047E0B42E3DE5632E39E0732EFF24CC2486
:1021D000DD2423E6822E24E0922EF50184918E15D3
:1021E000E9F4EF2DFF27EA54F84FC0828E01075F14
:1021F0001F4FB801F40180810E94520F20E0A80116
:102200006F2D80E00E94FC0A20E0A3016F2D85E085
:102210000E94C60AF7E0FF1508F0F3940894C11C69
:10222000D11C83E090E0A80EB91E0894811C911C7B
:10223000E0E1F0E06E0E7F1EF2E4CF16D10409F467
:1022400063C0CBCF81E0E81679F58E010F5F1F4F99
:10225000B801809197040E94200F1A869DE9A92E4B
:1022600098E0B92E6801CE0101961C2D181BF601CD
:1022700081916F01805D898720E0AE01475F5F4FEC
:10228000612F80E00E94FC0A20E0A501612F85E01B
:102290000E94C60A80E190E0A80EB91ECE01059604
:1022A000C816D90681F1DFCFEE2069F58E010F5FE8
:1022B0001F4FB80180916B040E94200F1A8668019D
:1022C0008DEDA82E88E0B82ECE010196FC2CF81AD0
:1022D000F60181916F01805D89878E01075F1F4F35
:1022E00020E0A8016F2D80E00E94FC0A20E0A501FB
:1022F0006F2D85E00E94C60A80E190E0A80EB91E0D
:10230000C016D10609F7FF248F2D9927A1960FB685
:10231000F894DEBF0FBECDBFDF91CF911F910F911B
:10232000FF90EF90DF90CF90BF90AF909F908F90F5
:102330007F906F900895982F8630D8F426E430E08F
:10234000E9EAF4E0808183832150304031978FEFB8
:102350002F3F3807B9F783E28093630481E68093C7
:1023600064049559909365041092AD048BE40E9427
:10237000310708951F9393E29093630491E690933D
:10238000640491E790936504809366041092670457
:102390001092680486E00E94310710E00E94AC07AA
:1023A000813009F41EE11F5F8091E8048C54853070
:1023B00018F01E3198F304C080E090E01E3110F058
:1023C00081E090E01F910895FF920F931F93CF93A8
:1023D000DF93CDB7DEB72F970FB6F894DEBF0FBEF1
:1023E000CDBF0E945A0960E089E39DE00E94980AEF
:1023F00060E083E39DE00E94980A60E08DE29DE04A
:102400000E94980A60E087E29DE00E94980A60E0DE
:1024100081E29DE00E94980A60E08BE19DE00E94CD
:10242000980A40E065E081E00E94480E0E94BA11DF
:10243000813041F420E043E15DE066E080E00E940D
:10244000C60A62C062E0F62E0E945A098E010F5F32
:102450001F4F4AE050E0B8018F2D99270E9448167F
:1024600060E0C8010E94CF0A82E380936B058091EF
:102470006B058823E1F70E945A098F2D0E94C31033
:10248000682F80916E058823E1F380916E0582307C
:1024900009F4F39480916E05813009F4FA948FEF7A
:1024A000F81619F45CE0F52E04C08CE08F1508F4E2
:1024B000FF2480916E05883019F48F2D0E94760FCD
:1024C00080916E05843009F0BFCF0E945A0960E008
:1024D00080EF9CE00E94980A40E062E081E00E9468
:1024E000480E813061F460E089EE9CE00E94980A19
:1024F00085E00E949B1160E081ED9CE003C060E0FC
:102500008DEB9CE00E94980A84E680936B05809195
:102510006B058823E1F72F960FB6F894DEBF0FBE48
:10252000CDBFDF91CF911F910F91FF9008951F9222
:102530000F920FB60F9211248F939F93EF93FF93F7
:102540008091BE079CB1E0ECF7E0E80FF11D9083AD
:102550008F5F8093BE078091BE078F708093BE0708
:10256000FF91EF919F918F910F900FBE0F901F9051
:10257000189588E98AB987E089B908958AE0809337
:102580006D059091BF078091BE07981721F4809147
:102590006D058823B1F780916D05882311F4E0E083
:1025A0000FC08091BF07E82FFF27E054F84FE0816C
:1025B0008F5F8093BF078091BF078F708093BF07A5
:1025C0008E2F992708955D9BFECF8CB90895FC014D
:1025D00004C05D9BFECF8CB9319680818823C9F7FA
:1025E00008951F920F920FB60F9211248F939F930D
:1025F00080916C05882331F080916C058150809327
:102600006C0515C08AE080936C0589B39927809585
:102610009095689413F8959587951694E1F78F70C7
:1026200080936E0580916F058F5F80936F05809119
:102630006B05882329F080916B05815080936B0591
:1026400080916D05882329F080916D0581508093DC
:102650006D059F918F910F900FBE0F901F90189551
:102660008DE083BF88E48CBF89B7826089BF0895FD
:10267000F89480916100882321F484E080936100C4
:1026800002C01092610080916100A2E0B0E0082ECB
:102690000E94A9160E947509789408950F931F93BC
:1026A00011E00E945A0960E08CE79DE00E94980AC0
:1026B00060E089E79DE00E94980A60E08AE69DE07C
:1026C0000E94980A60E082E69DE00E94980A60E01D
:1026D00087E59DE00E94980A60E080E59DE00E9409
:1026E000980A4FE065E082E00E94480E833049F08E
:1026F0008430C9F0823011F010E026C00E943813F7
:1027000023C00E945A0901E022E344E664E18AE022
:102710000E94420B80916E058830B1F080916E0569
:10272000843091F0F7CF0E945A0901E028E244E694
:1027300064E18AE00E94550C80916E05883021F09A
:1027400080916E058430C1F7112309F0AACF1F9143
:102750000F910895CF93DF93EC0152E070E026C013
:10276000E52FFF27E951FB4F21812D5332813D5346
:1027700043814D535C5FDE01A80FB91F80818D53EB
:10278000880F880F922F92959F70892B8C9322959A
:10279000207F832F86958695282BFD0121833295F6
:1027A000330F330F307C342B32837D5F872F992793
:1027B0005617B0F2DF91CF9108954F925F926F92CA
:1027C0007F928F929F92AF92BF92CF92DF92EF92C1
:1027D000FF920F931F93CF93DF93FC01EB0180E2F5
:1027E000888340E8E130F40718F46624772408C0B1
:1027F000F095E195FF4F8DE2888351E0652E712CB5
:102800002E010894411C511CCF0160E177E20E9427
:102810007A168B01262F332780E197E2BC01269F91
:10282000C001279F900D369F900D11249F01281BFA
:10283000390B42E0C42ED12CCC0EDD1EC90168EE4E
:1028400073E00E947A167B01462F552788EE93E0AD
:10285000FC014E9FC0014F9F900D5E9F900D112473
:10286000281B390B93E0A92EB12CAC0EBD1EC9015B
:1028700064E670E00E947A16FB0184E6689FC0015E
:102880001124281B390B84E0882E912C8C0E9D1E60
:10289000C9016AE070E00E947A168AE0689FC00170
:1028A0001124281B390B205D2D83005D0983F0E383
:1028B000EF0EEA82E05DEB83605D6C83003391F59F
:1028C00080E2888341E06416710409F48DE2898313
:1028D000F6018081803331F580E2F2018083F1E0FE
:1028E0006F16710409F48DE2F6018083F501808191
:1028F0008033C1F480E2F6018083F1E06F16710449
:1029000009F48DE2F5018083F4018081803351F474
:1029100080E2F5018083F1E06F16710409F48DE225
:10292000F40180831E82DF91CF911F910F91FF9060
:10293000EF90DF90CF90BF90AF909F908F907F905F
:102940006F905F904F9008950F931F93082F84E12D
:1029500080936B050E94BE12833221F080916B053B
:102960008823C1F780916B05882319F481E090E0FA
:1029700030C00E94BE128093E70411E00AC00E949A
:10298000BE12E12FFF27E951FB4F80831F5F17FD28
:102990001FE78D30A1F7023221F4612F80E795E027
:1029A0000AC0802F992774E0880F991F7A95E1F764
:1029B000612F8A549A4F0E94AA13E02FFF2764E0E8
:1029C000EE0FFF1F6A95E1F7EA54FA4F178680E091
:1029D00090E01F910F910895FF920F931F93F82E8F
:1029E00083E28093630481E68093640492E2F916A3
:1029F00071F483E680936504109266041092670474
:102A00001092680486E00E94310704E40FC09FE141
:102A10009F1520F080936504F0926604109267047D
:102A20001092680486E00E94310701E410E08F2DC7
:102A30000E94A414813009F41EE11F5F8091E80414
:102A4000801710F0081718F41E3188F304C080E0D6
:102A500090E01E3110F081E090E01F910F91FF9007
:102A600008954F925F927F928F929F92AF92BF9202
:102A7000CF92DF92EF92FF920F931F93CF93DF934A
:102A8000CDB7DEB72B970FB6F894DEBF0FBECDBF24
:102A90000E945A0960E088EB9DE00E94980A1B861C
:102AA00000E010E0802F0E94EC14813039F4802F78
:102AB0000E94EC14813011F421E02B870F5F1F4F2F
:102AC0000032110579F73B85313019F088249924BB
:102AD0000EC060E08DEA9DE00E94980A88EC809329
:102AE0006B0580916B05882309F49BC0FACF809118
:102AF0006E058823E1F782E20E94EC14813071F4C4
:102B000060E082EA9DE00E94980A88EC80936B0561
:102B100080916B05882309F484C0FACF8E010F5F82
:102B20001F4FB801C4010E94DD1320E0A80160E03E
:102B30008FE00E94FC0AC401B3E0880F991FBA9588
:102B4000E1F7881999096C01CC0CDD1CE2E7F5E08E
:102B5000CE0EDF1E7C01F4E0EE0CFF1CFA95E1F7CF
:102B600026EB35E0E20EF31E442455245C01742C60
:102B7000739430E2A316B104B4F48E010F5F1F4FBB
:102B8000B801F601808191810E94DD1320E0A70148
:102B9000672D80E00E94FC0A20E0A801672D8DE0EF
:102BA0000E94FC0A07C020E04DE85DE0672D80E050
:102BB0000E94C60A0894411C511C0894A11CB11C17
:102BC00022E030E0C20ED31E80E190E0E80EF91E54
:102BD00097E04916510459F68AE080936B0580917D
:102BE0006B058823E1F780916E05813039F40894F4
:102BF0008108910897FE02C08824992480916E056F
:102C0000823051F40894811C911CE8E08E169104E6
:102C10001CF0E7E08E2E912C80916E05843009F037
:102C200066CF2B960FB6F894DEBF0FBECDBFDF91F7
:102C3000CF911F910F91FF90EF90DF90CF90BF90B9
:102C4000AF909F908F907F905F904F900895FB0181
:102C50009F01E8944230C4F04532B4F44A3029F47C
:102C600097FB1EF4909581959F4F642F77270E94C4
:102C70007A16805D8A330CF0895D8193CB010097D1
:102C8000A1F716F45DE251931082C9010C945E160F
:102C9000FB019F01423074F0453264F4642F7727C2
:102CA0000E947A16805D8A330CF0895D8193CB0196
:102CB0000097A1F71082C9010C945E16DC01FC019B
:102CC000672F71917723E1F7329704C07C916D9360
:102CD00070836291AE17BF07C8F30895991B79E01E
:102CE00004C0991F961708F0961B881F7A95C9F79C
:102CF00080950895AA1BBB1B51E107C0AA1FBB1FEB
:102D0000A617B70710F0A61BB70B881F991F5A9577
:102D1000A9F780959095BC01CD01089597FB092EE8
:102D200007260AD077FD04D0E5DF06D000201AF48C
:102D3000709561957F4F0895F6F7909581959F4F17
:102D40000895E199FECFBFBBAEBBE09A11960DB2DC
:102D50000895E199FECFBFBBAEBB0DBA11960FB679
:0C2D6000F894E29AE19A0FBE0895FFCFAC
:00000001FF
/Transportables_Koptertool/tags/V-0.1.1/Readme.txt
0,0 → 1,17
Version V 0.1.1
 
Debug Anzeige liest nun die Texte aus der FC aus und stellt sie dar.
Beim Auslesen kann es immer mal wieder zu einem TimeOut kommen. Einfach nochmal die Daten anfordern.
Wenn keine Beschreibung angezeigt wird ist auch keine in der FC vorhanden.
 
Geblättert wird mit den beiden "Pfeiltasten".
Oben Rechts wird die Nummer der "Seite" angezeigt.
 
Das hex ist für einen AtMega32 mit 7,xx MHz.
getestet gegen FC V0.69j
 
Erstellt mit AVRStudio 4.13
 
Have Fun
 
Mikeljo. 31.05.2008
/Transportables_Koptertool/tags/V-0.1.1/Spezial/MMT-Mega32-16.hex
0,0 → 1,728
:100000000C94E3060C9400070C9400070C94000772
:100010000C9400070C9400070C9400070C94000744
:100020000C9400070C9400070C94F1120C94000738
:100030000C9400070C9497120C9400070C94000782
:100040000C9400070C9400070C9400070C94000714
:100050000C940007202020202020000D0A54696DF8
:10006000656F75742100446973706C6179000000DC
:10007000000000003E5B4F5B3E003E6B4F6B3E005E
:100080001C3E7C3E1C00183C7E3C18001C577D57D3
:100090001C001C5E7F5E1C0000183C180000FFE77F
:1000A000C3E7FF00001824180000FFE7DBE7FF00AC
:1000B00030483A060E00262979292600407F05059A
:1000C0000700407F05253F005A3CE73C5A007F3E31
:1000D0001C1C0800081C1C3E7F0014227F221400F8
:1000E0005F5F005F5F0006097F017F000066899502
:1000F0006A0060606060606094A2FFA294000804DF
:100100007E04080010207E20100008082A1C080029
:10011000081C2A0808001E10101010000C1E0C1ECF
:100120000C0030383E383000060E3E0E060000004F
:100130000000000000005F00000000070007000052
:10014000147F147F1400242A7F2A120023130864CA
:100150006200364956205000000807030000001CCA
:10016000224100000041221C00002A1C7F1C2A00A2
:1001700008083E08080000807030000008080808E1
:1001800008000000606000002010080402003E51DA
:1001900049453E0000427F400000724949494600FF
:1001A0002141494D33001814127F10002745454561
:1001B00039003C4A494931004121110907003649BB
:1001C00049493600464949291E0000001400000034
:1001D00000403400000000081422410014141414DC
:1001E00014000041221408000201590906003E4192
:1001F0005D594E007C1211127C007F49494936003E
:100200003E41414122007F4141413E007F494949F1
:1002100041007F09090901003E41415173007F08F7
:1002200008087F0000417F4100002040413F01005D
:100230007F08142241007F40404040007F021C02A2
:100240007F007F0408107F003E4141413E007F094E
:10025000090906003E4151215E007F091929460027
:1002600026494949320003017F0103003F404040D5
:100270003F001F2040201F003F4038403F006314D4
:10028000081463000304780403006159494D4300D6
:10029000007F41414100020408102000004141411B
:1002A0007F0004020102040040404040400000037F
:1002B000070800002054547840007F284444380048
:1002C000384444442800384444287F003854545467
:1002D000180000087E09020018A4A49C78007F087A
:1002E0000404780000447D4000002040403D0000B0
:1002F0007F102844000000417F4000007C04780407
:1003000078007C0804047800384444443800FC1821
:100310002424180018242418FC007C080404080075
:1003200048545454240004043F4424003C404020DA
:100330007C001C2040201C003C4030403C004428F5
:10034000102844004C9090907C004464544C44002D
:100350000008364100000000770000000041360828
:1003600000000201020402003C2623263C001EA1DC
:10037000A16112003A4040207A0038545455590087
:100380002155557941002154547841002155547824
:1003900040002054557940000C1E5272120039550D
:1003A000555559003954545459003955545458002E
:1003B0000000457C41000002457D42000001457C73
:1003C0004000791412147900F0282528F0007C549C
:1003D000554500002054547C54447C0A097F49410F
:1003E000324949493200324848483200324A484886
:1003F00030003A4141217A003A4240207800009D85
:10040000A0A07D003944444439003D4040403D00B7
:100410003C24FF242400487E494366002B2FFC2FF8
:100420002B00FF0929F62000C0887E090300205414
:10043000547941000000447D41003048484A320070
:10044000384040227A00007A0A0A72007D0D193184
:100450007D002629292F2800262929292600304811
:100460004D4020003808080808000808080838002F
:100470002F10C8ACBA002F102834FA0000007B00FF
:10048000000008142A14220022142A140800AA00CA
:100490005500AA00AA55AA55AA5555AA55AA55AA63
:1004A000000000FF0000101010FF0000141414FFE3
:1004B00000001010FF00FF001010F010F0001414E6
:1004C00014FC00001414F700FF000000FF00FF0000
:1004D0001414F404FC00141417101F0010101F1043
:1004E0001F001414141F0000101010F00000000072
:1004F000001F10101010101F1010101010F010100E
:10050000000000FF1010101010101010101010FF3D
:100510001010000000FF14140000FF00FF10000086
:100520001F1017140000FC04F414141417101714EF
:100530001414F404F4140000FF00F7141414141439
:1005400014141414F700F7141414141714141010BE
:100550001F101F10141414F414141010F010F010C5
:1005600000001F101F100000001F1414000000FCEA
:1005700014140000F010F0101010FF10FF101414ED
:1005800014FF14141010101F0000000000F01010D1
:10059000FFFFFFFFFFFFF0F0F0F0F0F0FFFFFF00C4
:1005A0000000000000FFFFFF0F0F0F0F0F0F384478
:1005B000443844007C2A2A3E14007E0202060600CB
:1005C000027E027E02006355494163003844443C88
:1005D0000400407E201E200006027E02020099A533
:1005E000E7A599001C2A492A1C004C7201724C0094
:1005F000304A4D4D3000304878483000BC625A4691
:100600003D003E49494900007E0101017E002A2A41
:100610002A2A2A0044445F44440040514A4440008E
:1006200040444A5140000000FF010300E080FF0009
:10063000000008086B6B0808361236243600060FD7
:10064000090F06000000181800000000101000003C
:100650003040FF010100001F01011E0000191D179D
:100660001200003C3C3C3C000000000000004D6FCC
:1006700064206279204D696B656C6A6F2030352F7C
:1006800030380020202053657474696E67730D0A3A
:1006900000202020446562756720446174656E0DFA
:1006A0000A002020204D6F746F72746573740D0AF8
:1006B00000202020506172616D657465720D0A0022
:1006C000202020446973706C61790D0A0020204855
:1006D000617570746D656EFC202856302E312E3198
:1006E000290D0A00506F727461626C6573204B6F44
:1006F00070746572746F6F6C0D0A002A00200054CC
:1007000061737465206472FC636B656E0D0A00434F
:100710006F6E66696720202020004368616E6E65F9
:100720006C73202000537469636B2020202020000C
:10073000486F6568652020202020004779726F206F
:100740002020202020004C6F6F70696E67202020D1
:100750000043616D6572612020202000536F6E732D
:10076000746967657320005573657220202020200E
:100770002000436F75706C696E67202000436F6EB8
:1007800066696728322920004C6F6F70696E677345
:100790006574000202020202020202000404040460
:1007A00004040303030808080805050808080005F1
:1007B000090909090707070707070606060A0A06BF
:1007C000060505050909090900070B0B0B0B0C0CA5
:1007D0000C0C0C0C0C0C01080201080201080201AF
:1007E00008020108020108020108020108020000D3
:1007F0000000FF0400FF0400FF0400FF04003204B7
:1008000000FF040006030040030014030020082139
:10081000FA0800320800FF0800000500000500FA91
:100820000800FA0800FA0800010000FF0500FF09AF
:1008300000FF0900FF0900FF0900FF0700FA070099
:10084000FA0700FA0700190700FF0600FA0600FA87
:100850000600FF0A00FF0A00FA0600FA0600FA0581
:1008600000FA0500FF0500FF0900FF0900FF09006D
:10087000FF09000001000107000000000000000067
:100880000000000000000000000000000000000068
:10089000000000000000000000000000004C6F6F2E
:1008A000702075702020202020202020004C6F6FA9
:1008B0007020646F776E092020202000004C6F6F3D
:1008C00070206C656674202020202020004C6F6F03
:1008D0007020726967687420202020200048F66824
:1008E000656E7265676C6572202020200048F6688E
:1008F000656E736368616C74657220200048656181
:1009000064686F6C6409090000000000004B6F6DA3
:10091000706173730909000000000000004B6F6DE7
:1009200070617373466978090900000000475053ED
:100930000909090000000000000000000041636890
:1009400073656E6B6F70706C756E672000447265B6
:10095000687261746509090000000000004E696357
:100960006B202020202020202020202000526F6C8F
:100970006C20202020202020202020200047617390
:1009800020202020202020202020202000476965D2
:1009900072090909000000000000000000506F7497
:1009A00069310909090000000000000000506F745F
:1009B00069320909090000000000000000506F744E
:1009C00069330909090000000000000000506F743D
:1009D00069340909090000000000000000436F6E3F
:1009E00066696709090900000000000000486F659A
:1009F00068655F4D696E476173202020004C756605
:100A000074647275636B5F4420202020004D617810
:100A1000486F6568652020202020202000486F65F1
:100A200068655F50202020202020202000486F652E
:100A300068655F56657273746165726B00486F65B7
:100A400068655F4143435F5769726B2E0053746959
:100A5000636B5F50202020202020202000537469E9
:100A6000636B5F4420202020202020200047696500
:100A7000725F50202020202020202020004761731A
:100A80005F4D696E202020202020202000476173C8
:100A90005F4D61782020202020202020004779729F
:100AA0006F41636346616B746F720900004B6F6D39
:100AB000706173735769726B756E67200047797246
:100AC0006F5F5020090900000000000000477972A4
:100AD0006F5F4909090900000000000000556E74AD
:100AE00065727370616E6E756E672020004E6F7454
:100AF000476173090909000000000000004E6F748F
:100B00004761735A65697420202020200055666F64
:100B10004175737269636874756E672000495F463A
:100B2000616B746F72202020202020200055736597
:100B300072506172616D31090900000000557365E2
:100B400072506172616D32090900000000557365D1
:100B500072506172616D33090900000000557365C0
:100B600072506172616D34090900000000536572B2
:100B7000766F4E69636B4374726C09000053657243
:100B8000766F4E69636B436F6D7009000053657239
:100B9000766F4E69636B4D696E0900000053657294
:100BA000766F4E69636B4D61780900000053657282
:100BB000766F4E69636B526566727368004C6F6F37
:100BC000704761734C696D6974090000004C6F6F68
:100BD000705468726573686F6C640900004C6F6FC5
:100BE00070487973746572657365090000416368C4
:100BF000734B6F70706C756E67090000004163681D
:100C000073476567656E4B6F70706C2E0057696E29
:100C10006B6C556D7363686C4E69636B0057696EDE
:100C20006B6C556D7363686C526F6C6C00477972B6
:100C30006F4163634162676C656963680044726910
:100C400066746B6F6D700909000000000044796ED6
:100C5000616D696353746162696C69740055736591
:100C600072506172616D35090900000000557365AD
:100C700072506172616D360909000000005573659C
:100C800072506172616D370909000000005573658B
:100C900072506172616D380909000000004C6F6F7D
:100CA00070436F6E66696709090000000053657242
:100CB000766F4E69636B436F6D70496E000D0A4E1F
:100CC00069636874206765737065696368657274C9
:100CD000000D0A506172616D6574657220676573FD
:100CE0007065696368657274000D0A2D2D2D3E00D4
:100CF000506172616D6574657220737065696368B7
:100D000065726E3F0D0A20206A610D0A20206E6513
:100D1000696E0054696D656F75740020353A0D0A6F
:100D20000020343A0D0A0020333A0D0A0020323AEE
:100D30000D0A0020313A0D0A004C616465205061B3
:100D400072616D657465720D0A002D002D002D0015
:100D5000457869740D0A00526563687465636B0DAC
:100D60000A004C696E69650D0A004F7269656E7400
:100D7000696572756E670D0A000D0A0045696E732C
:100D800074656C6C756E67656E3A0D0A00202020E4
:100D90002020202020202020202020202020202053
:100DA00020000D0A54696D656F757421000D0A5499
:100DB000696D656F7574210044656275672D4469BE
:100DC00073706C61790011241FBECFE5D8E0DEBFDF
:100DD000CDBF10E0A0E6B0E0ECE6FDE202C0059079
:100DE0000D92A036B107D9F717E0A0E6B0E001C038
:100DF0001D92A03DB107E1F70E94FE0D0C94B516BF
:100E00000C940000782F52E060E026C0E52FFF2709
:100E1000E951FB4F21812D5332813D5343814D5385
:100E20005C5FDC01AD59BB4F80818D53880F880F0B
:100E3000922F92959F70892B8C932295207F832FE0
:100E400086958695282BFD0121833295330F330F2C
:100E5000307C342B32836D5F862F99275717B0F281
:100E600008950F931F93B82F809163048093E70434
:100E7000809164048093E804809165048093E90480
:100E8000A3E073E035C0E72FFF27ED59FB4F8081CA
:100E9000418162817D5FEA2FFF27E951FB4F282FB7
:100EA00026952695235C208355279927837090707B
:100EB00024E0880F991F2A95E1F79A0104E03695FE
:100EC00027950A95E1F7822B835C81834F705070E0
:100ED000440F551F440F551F862F82958695869582
:100EE0008370842B835C82836F73635C6383AC5FEA
:100EF0007B1748F290E020E030E008C0E92FFF27A0
:100F0000E951FB4F8081280F311D9F5F9A17B1F780
:100F10003F70EA2FFF27E951FB4FC90136E0969554
:100F200087953A95E1F7835C80832F73235C218357
:100F30008DE0828313820A2F0D5F10E008C0E12F3D
:100F4000FF27E951FB4F80810E94E3121F5F1017BA
:100F5000B1F71F910F9108951F9384E180936B0562
:100F60000E94BE12833221F080916B058823C1F765
:100F700080916B05882319F481E090E017C00E94EE
:100F8000BE128093E70411E00AC00E94BE12E12F56
:100F9000FF27E951FB4F80831F5F17FD1FE78D304F
:100FA000A1F7812F0E94020780E090E01F91089531
:100FB0001F93CF93DF93CDB7DEB761970FB6F89449
:100FC000DEBF0FBECDBF182F83E28093630481E69E
:100FD0008093640480936504109366041092670400
:100FE0001092680486E00E9431070E94AC0780914D
:100FF000E8048134D1F7E3E6F4E0DE011196819153
:101000008D9384E0E337F807D1F7198A177020E051
:10101000AE014F5F5F4F612F80E00E94FC0A619636
:101020000FB6F894DEBF0FBECDBFDF91CF911F91F9
:1010300008959F92AF92BF92CF92DF92EF92FF926C
:101040000F931F93CF93DF93CDB7DEB761970FB6A2
:10105000F894DEBF0FBECDBF0E945A099924A92C77
:10106000BB2453E0AA0CBB1C5A95E1F7FA2C00E014
:1010700010E08F2D800F0E94D8070F5F1F4F0830A0
:101080001105B9F70E94AC078091E804843489F512
:101090007501EE0CFF1C85E694E0E80EF91ECC24E9
:1010A000DD248E010F5F1F4FF70120818181992779
:1010B000982F88274AE050E0B801820F911D0E94C6
:1010C000271620E044E550E06C2D8EE00E94C60A11
:1010D00020E0A8016C2D8EE00E94FC0A0894C11C3F
:1010E000D11C82E090E0E80EF91E98E0C916D10408
:1010F000C1F680916E05882329F280916E058130BA
:1011000009F4939480916E05823009F49A94809149
:101110006E05883019F0E3E09E22A1CF61960FB6EC
:10112000F894DEBF0FBECDBFDF91CF911F910F911D
:10113000FF90EF90DF90CF90BF90AF909F90089579
:101140001F9393E29093630491E69093640498E66E
:10115000909365048093660410926704109268046B
:1011600086E00E94310710E00E94AC07813009F44C
:101170001AE01F5F8091E8048053853018F01A3020
:1011800098F304C080E090E01A3010F081E090E025
:101190001F9108951F93CF93DF93CDB7DEB72A97A2
:1011A0000FB6F894DEBF0FBECDBF0E945A0960E0B3
:1011B00086E690E00E94980A80916E058823E1F708
:1011C0000E94A008813069F460E08BE590E00E9405
:1011D000980A88EC80936B0580916B05882369F1F0
:1011E000FBCF1091E80419831A8220E0AE014F5F13
:1011F0005F4F60E08AE00E94FC0A1F5F20E043E648
:1012000054E0612F80E00E94FC0A8AE080936B0525
:1012100080916B058823E1F780916E05813011F490
:101220000E94A00880916E05823011F40E94A008EF
:1012300080916E05843009F0BFCF2A960FB6F894DE
:10124000DEBF0FBECDBFDF91CF911F910895C4982F
:101250008FB9779BFECF8EB18EB9C49A08951F9334
:10126000CF93DF93E2E6F0E0119284E0E236F807F4
:10127000D9F710EBC398812F0E94270980E10E94C3
:101280002709809161000E942709C39AC0E0D0E03D
:1012900080E00E9427092196C038D105C9F71F5F59
:1012A000183B41F71092690510926A05DF91CF91C2
:1012B0001F9108950E942F09089580EA9FE00197E9
:1012C000F1F708950F931F93CF93DF938C01C0E044
:1012D000D0E003C00E945D092196C017D107D1F765
:1012E000DF91CF911F910F9108951092690510928F
:1012F0006A058FEF87BB8EE58DB9C49AC2988AE0E4
:1013000090E00E946209C29AC498C39880E40E9447
:10131000270980916100882329F481EA0E94270926
:1013200080EC04C080EA0E94270988EC0E9427090B
:1013300086EA0E94270982EA0E9427098FE20E941A
:10134000270988EF0E94270980E00E94270987E289
:101350000E94270981E80E94270986E10E94270947
:101360008CEA0E94270980E00E9427098FEA0E94E8
:1013700027090E942F090895FF920F931F938C0154
:10138000F62EC398880F892F881F990B9195805549
:101390000E942709809161000F77080F802F8295A6
:1013A0008F70805F0E942709802F8F700E9427090D
:1013B000C39A8F2D0E9427091F910F91FF900895C6
:1013C000EF92FF920F931F93CF93DF93C0E0D0E093
:1013D00002E610E032EEE32E30E0F32EF7018191C9
:1013E0007F01F801808361918F01CE010E94BC09C9
:1013F0002196F3E0C038DF0789F702EE13E0F80129
:1014000011928F0160E0CE010E94BC092196F4E0A8
:10141000C030DF07A1F7DF91CF911F910F91FF90AF
:10142000EF900895CF92DF92EF92FF920F931F9368
:10143000CF93DF93D22E4F3D81F0403E38F4463DAE
:10144000B1F04C3DB1F0443CA9F40FC0463F49F027
:101450004C3F49F0443E71F402C041EE0BC044E8F9
:1014600009C044E907C041E805C04EE803C049E9A6
:1014700001C04AE9062F11271695102F002717954E
:10148000079526E0829FC0011124080F191F1370D1
:10149000429F700111248EE690E0E80EF91ECC24E4
:1014A000E801CE59DF4FF7019491F2E0DF16A1F089
:1014B000FD1530F0DD2059F081E0D816B1F409C0F7
:1014C000E3E0DE1661F0F4E0DF1679F40AC09883F9
:1014D0000CC08881892B08C08881892705C0888134
:1014E00002C088819095892388836991C8010E94F0
:1014F000BC09C3940894E11CF11C0F5F1F4F86E0E8
:10150000C81689F6DF91CF911F910F91FF90EF9050
:10151000DF90CF90089580916A058F5F80936A0570
:10152000883028F00E94E00987E080936A050895DA
:101530001F93CF93DF93EC01162F20C04032A0F011
:101540002196212F60916A05809169050E94120AF7
:10155000809169058F5F80936905853178F01092DD
:1015600069050E948B0A0AC04A3029F04D3029F4DF
:101570001092690502C00E948B0A2196FE014491D7
:101580004423E1F6DF91CF911F910895809369057F
:1015900060936A05622FCA010E94980A08951F93FA
:1015A000CF93DF93EC01162F20C04032A0F021969C
:1015B000212F60916A05809169050E94120A80912D
:1015C00069058F5F80936905853178F01092690510
:1015D0000E948B0A0AC04A3029F04D3029F410923B
:1015E000690502C00E948B0A219648814423E9F6CE
:1015F000DF91CF911F9108958093690560936A05EB
:10160000622FCA010E94CF0A0895982F87FD39C022
:101610006034B8F5862F869586958695282F3327D2
:101620003695322F222737952795290F311D677060
:1016300081E090E001C0880F6A95EAF7682F337067
:10164000413061F0413018F04230A1F40DC0F90191
:10165000EE59FF4F8081609586230BC0F901EE594A
:10166000FF4F8081862B05C0F901EE59FF4F808125
:1016700086278083F901EE59FF4F6081C9010E94DE
:10168000BC0908952F923F924F925F926F927F9282
:101690008F929F92AF92BF92CF92DF92EF92FF9282
:1016A0000F931F93CF93DF93CDB7DEB728970FB675
:1016B000F894DEBF0FBECDBF8D83162F0E83682E2C
:1016C0007724862E9924842F99279C838B838619CF
:1016D0009709E22FFF27FA83E9839F012819390927
:1016E00097FF04C0FFEF2F2E3F2E07C040E050E0D1
:1016F000009711F041E050E01A0137FF04C0EFEF0E
:101700004E2E5E2E08C040E050E02115310511F04C
:1017100041E050E02A016C0197FF04C0D094C194CD
:10172000D108D394790137FF04C0F094E194F10813
:10173000F3944E81682D862D0E94050BEC14FD0458
:101740007CF5C60162E070E00E948E1644275527A2
:10175000461B570B58874F83A22CB62CB20C5D81C9
:10176000052F112717C08F8198858E0D9F1D988793
:101770008F831816190634F4840C951C8C199D0956
:1017800098878F834E81682D8B2D0E94050B020D4B
:10179000131DBA0CEB81FC810E171F0721F72DC01A
:1017A000C70162E070E00E948E1644275527461B51
:1017B000570B58874F83A42CB82CB40C012F11273A
:1017C00017C08F8198858C0D9D1D98878F83181663
:1017D000190634F4620C731C8E199F0998878F8345
:1017E0004E816B2D862D0E94050B040D151DBA0C24
:1017F000E981FA810E171F0721F728960FB6F89492
:10180000DEBF0FBECDBFDF91CF911F910F91FF9033
:10181000EF90DF90CF90BF90AF909F908F907F9090
:101820006F905F904F903F902F900895BF92CF920E
:10183000DF92EF92FF920F931F93CF93DF93182FB6
:10184000B02E87FD1FE7603408F06FE37727CB01E8
:10185000820F911D9C01812F840F912D911D6C0190
:1018600091E8C916D10418F0B0E8CB2ED12C79013B
:101870002134310518F0A0E4EA2EF12CEB0108C068
:101880000B2D2C2F4C2D6C2F812F0E94420B21965B
:10189000EC16FD06A8F7DF91CF911F910F91FF90F5
:1018A000EF90DF90CF90BF900895CF92DF92EF92AC
:1018B000FF920F931F93CF93DF93D82EC02E87FFF5
:1018C00002C08FE7D82E162F603408F01FE3812F57
:1018D000820F912D911DEC018D2D840F912D911D65
:1018E0007C0191E8E916F10418F000E8E02EF12CF3
:1018F0000C2D212F4E2D612F8D2D0E94420BC134B6
:10190000D10510F0C0E4D0E00C2D2C2F4E2D612F0E
:101910008E2D0E94420B2C2F4D2D6C2F8E2D0E9450
:10192000420B212F4D2D6C2F8D2D0E94420BDF91EC
:10193000CF911F910F91FF90EF90DF90CF9008957E
:101940002F923F924F925F926F927F928F929F92CF
:10195000AF92BF92CF92DF92EF92FF920F931F93BD
:10196000CF93DF93CDB7DEB724970FB6F894DEBFE1
:101970000FBECDBF8C016B017A01A22E21E030E0B9
:10198000241B350B3C832B83CA01880F991F6624C7
:101990007724681A790A462E502E640F4A2D802F1C
:1019A0000E94050B6C2D6E194A2D802F0E94050B8D
:1019B0004A2D6C2D802F8E0D0E94050B4A2D6C2D0B
:1019C000802F8E190E94050B4701222433241A828E
:1019D000198258C08B819C8197FD0BC008948108A7
:1019E0009108E2E0F0E06E0E7F1E860D971D9C834D
:1019F0008B830894211C311C29813A812E5F3F4F33
:101A00003A8329838B819C810196820F931F9C834B
:101A10008B83142D180DD52CD20C4A2D612F8D2DB2
:101A20000E94050BE52CE2184A2D612F8E2D0E9495
:101A3000050B142D18194A2D612F8D2D0E94050BB1
:101A40004A2D612F8E2D0E94050B142D120DE52CB1
:101A5000E80C4A2D612F8E2D0E94050B952D9819AB
:101A6000092F4A2D612F892F0E94050B142D121961
:101A70004A2D612F8E2D0E94050B4A2D612F802F3C
:101A80000E94050B281439040CF4A4CF24960FB639
:101A9000F894DEBF0FBECDBFDF91CF911F910F91A4
:101AA000FF90EF90DF90CF90BF90AF909F908F907E
:101AB0007F906F905F904F903F902F9008952F925E
:101AC0003F924F925F926F927F928F929F92AF92CE
:101AD000BF92CF92DF92EF92FF920F931F93CF931B
:101AE000DF936B017A0151E0A52EB12CAE18BF082F
:101AF0009701220F331F88249924821A930A662E95
:101B0000782E262F2E196E0D01E0482F0E94420BD1
:101B1000472D4E192C2D6C2D872D8E0D0E94420BBA
:101B2000E70144245524222433243AC0B7FC07C0DB
:101B3000219782E090E0880E991EA80CB91C0894A9
:101B4000411C511C82E090E0280E391E0894A11C13
:101B5000B11CA20CB31C1C2F662D6C0FE72CE418D3
:101B6000D72CD40C01E0262F4E2D8D2D0E94420B38
:101B7000662D6C1B262F4E2D8D2D0E94420B662D3F
:101B8000640DE72CEC1A170D262F4E2D812F0E9485
:101B9000420B662D6419262F4E2D812F0E94420B79
:101BA0004C165D061CF2DF91CF911F910F91FF90B3
:101BB000EF90DF90CF90BF90AF909F908F907F90ED
:101BC0006F905F904F903F902F900895A2E0B0E00B
:101BD0000E94A116802D992780936100089581E0CD
:101BE00021E030E0D901082E0E94A91680E02F5F85
:101BF0003F4FD901082E0E94A91608958FEF8BBB85
:101C000083E488BB8CEF85BB8CE782BB83E084BB1D
:101C100080E881BB21E030E0D9010E94A116802D2F
:101C2000813071F081E0D901082E0E94A91680E070
:101C30002F5F3F4FD901082E0E94A9162150304036
:101C40002F5F3F4FD9010E94A116802D99278093C5
:101C500061000E9475090E94B9120E9430137894A5
:101C60000E94870EFDCF0F931F93062F142F20E0A5
:101C70004DEF56E0682F812F0E94C60A20E04BEFFF
:101C800056E0602F812F0E94C60A1F910F91089580
:101C9000EF92FF920F931F93082FE62EF42E682FDA
:101CA0000E94330E102F912F80916E058823E1F74B
:101CB00080916E058823E1F380916E05823019F4DE
:101CC0001E1508F41F5F80916E05813019F401170D
:101CD00008F411504F2D612F892F0E94330E8091EF
:101CE0006E05883021F080916E058430E1F6809198
:101CF0006E05843009F41FEF80916E058823E1F7AB
:101D0000812F99271F910F91FF90EF9008950E94C6
:101D10005A0960E084EE96E00E94980A60E08DEC3B
:101D200096E00E94980A60E080EC96E00E94980A93
:101D300060E081EB96E00E94980A60E082EA96E01B
:101D40000E94980A60E081E996E00E94980A60E0AB
:101D500083E896E00E94980A60E08EE696E00E9492
:101D6000980A4FE066E082E00E94480E843091F0CD
:101D7000853028F4823041F08330A1F408C08530EA
:101D800061F0863079F40CC00E94CA0808950E9460
:101D9000E41108950E94D30E08950E94311508950C
:101DA0000E944E1308950E945A0980916E0588235F
:101DB000E1F760E08FEF96E00E94980A80916E054F
:101DC0008823E1F380916E058830C9F483E2809323
:101DD000630481E68093640484E7809365048AE069
:101DE00080936604809367048093680480936904F9
:101DF00010926A0410926B0489E00E94310780916E
:101E00006E058823E1F780916E058823E1F383E274
:101E10008093630481E68093640484E7809365047F
:101E2000109266041092670410926804109269047C
:101E300010926A0410926B0489E00E9431070895A1
:101E4000FB0120E030E0482F552761E0CA01022E57
:101E500002C0959587950A94E2F780FF02C06083DF
:101E600001C010822F5F3F4F31962830310571F746
:101E7000089540E020E030E061E070E0FC018191F5
:101E8000813041F4CB01022E02C0880F991F0A94C1
:101E9000E2F7480F2F5F3F4F2830310581F7842F3D
:101EA00099270895482FFB0164E60E946E168083EF
:101EB00024E6829FC0011124481B842F6AE00E94FF
:101EC0006E162AE0829F90011124421B405D4283DE
:101ED0009081905D9083805D8183903329F490E2BE
:101EE0009083803309F4918313820895CF92DF9217
:101EF000EF92FF920F931F93CF93DF93CDB7DEB78F
:101F000062970FB6F894DEBF0FBECDBF823008F4E3
:101F100055C0615044E080E00E94480EC82E8FEF0B
:101F2000C81609F421C1EC2CFF24F701EA54F84F3C
:101F3000E081FF27ED59FB4FD08020E04EE45DE0CB
:101F40006C2D84E00E94C60A80916E058823E1F71B
:101F500080916E05813009F4DA9480916E058230AB
:101F600009F4D3948E01075F1F4FB8018D2D0E9495
:101F7000520F20E0A8016C2D80E00E94FC0A84E151
:101F800080936B0580916B058823E1F780916E0546
:101F9000843021F080916E058830D1F680916E05F5
:101FA000883009F0E1C0A6EBB7E0EA0EFB1ED701CE
:101FB000EC91FF27ED59FB4FD082D6C0813009F05C
:101FC00069C08E010F5F1F4FB801809197040E9476
:101FD000200F1A8644E063E080E00E94480ED82E6D
:101FE000BFEF8B1709F4C0C0E82EFF240E0D1F1D94
:101FF000F801008120E04CE45DE0682F84E00E945D
:10200000C60A80916E05813009F400E080916E056A
:10201000823009F401E0005D0987005320E0AE0141
:10202000475F5F4F6D2D80E00E94FC0A84E1809342
:102030006B0580916B058823E1F780916E058830F0
:1020400021F080916E058430E1F680916E05883034
:1020500051F4CE010196E80EF91ED7010C930E94AF
:10206000390F809397040E945A098E01075F1F4F12
:10207000B801809197040E94520F60E0C8010E944D
:10208000CF0A88EC80936B0580916B05882309F457
:102090006BC0FACF882309F067C08E010F5F1F4F16
:1020A000B80180916B040E94200F1A8644E067E01B
:1020B00080E00E94480ED82EBFEF8B1709F454C061
:1020C000E82EFF240E0D1F1DF801008120E04AE4D8
:1020D0005DE0682F84E00E94C60A80916E05813021
:1020E00009F400E080916E05823009F401E0005DA2
:1020F0000987005320E0AE01475F5F4F6D2D80E000
:102100000E94FC0A84E180936B0580916B05882313
:10211000E1F780916E05883021F080916E05843062
:10212000E1F680916E05883051F4CE010196E80EFB
:10213000F91ED7010C930E94390F80936B040E9403
:102140005A098E01075F1F4FB80180916B040E94EE
:10215000520F60E0C8010E94CF0A88EC80936B05A3
:1021600080916B058823E1F762960FB6F894DEBF85
:102170000FBECDBFDF91CF911F910F91FF90EF90D8
:10218000DF90CF9008956F927F928F929F92AF923F
:10219000BF92CF92DF92EF92FF920F931F93CF9354
:1021A000DF93CDB7DEB7A1970FB6F894DEBF0FBEB1
:1021B000CDBFE82E81E08E1508F044C048EDA42E76
:1021C00047E0B42E3DE5632E39E0732EFF24CC2486
:1021D000DD2423E6822E24E0922EF50184918E15D3
:1021E000E9F4EF2DFF27EA54F84FC0828E01075F14
:1021F0001F4FB801F40180810E94520F20E0A80116
:102200006F2D80E00E94FC0A20E0A3016F2D85E085
:102210000E94C60AF7E0FF1508F0F3940894C11C69
:10222000D11C83E090E0A80EB91E0894811C911C7B
:10223000E0E1F0E06E0E7F1EF2E4CF16D10409F467
:1022400063C0CBCF81E0E81679F58E010F5F1F4F99
:10225000B801809197040E94200F1A869DE9A92E4B
:1022600098E0B92E6801CE0101961C2D181BF601CD
:1022700081916F01805D898720E0AE01475F5F4FEC
:10228000612F80E00E94FC0A20E0A501612F85E01B
:102290000E94C60A80E190E0A80EB91ECE01059604
:1022A000C816D90681F1DFCFEE2069F58E010F5FE8
:1022B0001F4FB80180916B040E94200F1A8668019D
:1022C0008DEDA82E88E0B82ECE010196FC2CF81AD0
:1022D000F60181916F01805D89878E01075F1F4F35
:1022E00020E0A8016F2D80E00E94FC0A20E0A501FB
:1022F0006F2D85E00E94C60A80E190E0A80EB91E0D
:10230000C016D10609F7FF248F2D9927A1960FB685
:10231000F894DEBF0FBECDBFDF91CF911F910F911B
:10232000FF90EF90DF90CF90BF90AF909F908F90F5
:102330007F906F900895982F8630D8F426E430E08F
:10234000E9EAF4E0808183832150304031978FEFB8
:102350002F3F3807B9F783E28093630481E68093C7
:1023600064049559909365041092AD048BE40E9427
:10237000310708951F9393E29093630491E690933D
:10238000640491E790936504809366041092670457
:102390001092680486E00E94310710E00E94AC07AA
:1023A000813009F41EE11F5F8091E8048C54853070
:1023B00018F01E3198F304C080E090E01E3110F058
:1023C00081E090E01F910895FF920F931F93CF93A8
:1023D000DF93CDB7DEB72F970FB6F894DEBF0FBEF1
:1023E000CDBF0E945A0960E089E39DE00E94980AEF
:1023F00060E083E39DE00E94980A60E08DE29DE04A
:102400000E94980A60E087E29DE00E94980A60E0DE
:1024100081E29DE00E94980A60E08BE19DE00E94CD
:10242000980A40E065E081E00E94480E0E94BA11DF
:10243000813041F420E043E15DE066E080E00E940D
:10244000C60A62C062E0F62E0E945A098E010F5F32
:102450001F4F4AE050E0B8018F2D99270E9448167F
:1024600060E0C8010E94CF0A82E380936B058091EF
:102470006B058823E1F70E945A098F2D0E94C31033
:10248000682F80916E058823E1F380916E0582307C
:1024900009F4F39480916E05813009F4FA948FEF7A
:1024A000F81619F45CE0F52E04C08CE08F1508F4E2
:1024B000FF2480916E05883019F48F2D0E94760FCD
:1024C00080916E05843009F0BFCF0E945A0960E008
:1024D00080EF9CE00E94980A40E062E081E00E9468
:1024E000480E813061F460E089EE9CE00E94980A19
:1024F00085E00E949B1160E081ED9CE003C060E0FC
:102500008DEB9CE00E94980A84E680936B05809195
:102510006B058823E1F72F960FB6F894DEBF0FBE48
:10252000CDBFDF91CF911F910F91FF9008951F9222
:102530000F920FB60F9211248F939F93EF93FF93F7
:102540008091BE079CB1E0ECF7E0E80FF11D9083AD
:102550008F5F8093BE078091BE078F708093BE0708
:10256000FF91EF919F918F910F900FBE0F901F9051
:10257000189588E98AB980E189B908958AE080933D
:102580006D059091BF078091BE07981721F4809147
:102590006D058823B1F780916D05882311F4E0E083
:1025A0000FC08091BF07E82FFF27E054F84FE0816C
:1025B0008F5F8093BF078091BF078F708093BF07A5
:1025C0008E2F992708955D9BFECF8CB90895FC014D
:1025D00004C05D9BFECF8CB9319680818823C9F7FA
:1025E00008951F920F920FB60F9211248F939F930D
:1025F00080916C05882331F080916C058150809327
:102600006C0515C08AE080936C0589B39927809585
:102610009095689413F8959587951694E1F78F70C7
:1026200080936E0580916F058F5F80936F05809119
:102630006B05882329F080916B05815080936B0591
:1026400080916D05882329F080916D0581508093DC
:102650006D059F918F910F900FBE0F901F90189551
:102660008DE083BF8CE98CBF89B7826089BF0895F4
:10267000F89480916100882321F484E080936100C4
:1026800002C01092610080916100A2E0B0E0082ECB
:102690000E94A9160E947509789408950F931F93BC
:1026A00011E00E945A0960E08CE79DE00E94980AC0
:1026B00060E089E79DE00E94980A60E08AE69DE07C
:1026C0000E94980A60E082E69DE00E94980A60E01D
:1026D00087E59DE00E94980A60E080E59DE00E9409
:1026E000980A4FE065E082E00E94480E833049F08E
:1026F0008430C9F0823011F010E026C00E943813F7
:1027000023C00E945A0901E022E344E664E18AE022
:102710000E94420B80916E058830B1F080916E0569
:10272000843091F0F7CF0E945A0901E028E244E694
:1027300064E18AE00E94550C80916E05883021F09A
:1027400080916E058430C1F7112309F0AACF1F9143
:102750000F910895CF93DF93EC0152E070E026C013
:10276000E52FFF27E951FB4F21812D5332813D5346
:1027700043814D535C5FDE01A80FB91F80818D53EB
:10278000880F880F922F92959F70892B8C9322959A
:10279000207F832F86958695282BFD0121833295F6
:1027A000330F330F307C342B32837D5F872F992793
:1027B0005617B0F2DF91CF9108954F925F926F92CA
:1027C0007F928F929F92AF92BF92CF92DF92EF92C1
:1027D000FF920F931F93CF93DF93FC01EB0180E2F5
:1027E000888340E8E130F40718F46624772408C0B1
:1027F000F095E195FF4F8DE2888351E0652E712CB5
:102800002E010894411C511CCF0160E177E20E9427
:102810007A168B01262F332780E197E2BC01269F91
:10282000C001279F900D369F900D11249F01281BFA
:10283000390B42E0C42ED12CCC0EDD1EC90168EE4E
:1028400073E00E947A167B01462F552788EE93E0AD
:10285000FC014E9FC0014F9F900D5E9F900D112473
:10286000281B390B93E0A92EB12CAC0EBD1EC9015B
:1028700064E670E00E947A16FB0184E6689FC0015E
:102880001124281B390B84E0882E912C8C0E9D1E60
:10289000C9016AE070E00E947A168AE0689FC00170
:1028A0001124281B390B205D2D83005D0983F0E383
:1028B000EF0EEA82E05DEB83605D6C83003391F59F
:1028C00080E2888341E06416710409F48DE2898313
:1028D000F6018081803331F580E2F2018083F1E0FE
:1028E0006F16710409F48DE2F6018083F501808191
:1028F0008033C1F480E2F6018083F1E06F16710449
:1029000009F48DE2F5018083F4018081803351F474
:1029100080E2F5018083F1E06F16710409F48DE225
:10292000F40180831E82DF91CF911F910F91FF9060
:10293000EF90DF90CF90BF90AF909F908F907F905F
:102940006F905F904F9008950F931F93082F84E12D
:1029500080936B050E94BE12833221F080916B053B
:102960008823C1F780916B05882319F481E090E0FA
:1029700030C00E94BE128093E70411E00AC00E949A
:10298000BE12E12FFF27E951FB4F80831F5F17FD28
:102990001FE78D30A1F7023221F4612F80E795E027
:1029A0000AC0802F992774E0880F991F7A95E1F764
:1029B000612F8A549A4F0E94AA13E02FFF2764E0E8
:1029C000EE0FFF1F6A95E1F7EA54FA4F178680E091
:1029D00090E01F910F910895FF920F931F93F82E8F
:1029E00083E28093630481E68093640492E2F916A3
:1029F00071F483E680936504109266041092670474
:102A00001092680486E00E94310704E40FC09FE141
:102A10009F1520F080936504F0926604109267047D
:102A20001092680486E00E94310701E410E08F2DC7
:102A30000E94A414813009F41EE11F5F8091E80414
:102A4000801710F0081718F41E3188F304C080E0D6
:102A500090E01E3110F081E090E01F910F91FF9007
:102A600008954F925F927F928F929F92AF92BF9202
:102A7000CF92DF92EF92FF920F931F93CF93DF934A
:102A8000CDB7DEB72B970FB6F894DEBF0FBECDBF24
:102A90000E945A0960E088EB9DE00E94980A1B861C
:102AA00000E010E0802F0E94EC14813039F4802F78
:102AB0000E94EC14813011F421E02B870F5F1F4F2F
:102AC0000032110579F73B85313019F088249924BB
:102AD0000EC060E08DEA9DE00E94980A88EC809329
:102AE0006B0580916B05882309F49BC0FACF809118
:102AF0006E058823E1F782E20E94EC14813071F4C4
:102B000060E082EA9DE00E94980A88EC80936B0561
:102B100080916B05882309F484C0FACF8E010F5F82
:102B20001F4FB801C4010E94DD1320E0A80160E03E
:102B30008FE00E94FC0AC401B3E0880F991FBA9588
:102B4000E1F7881999096C01CC0CDD1CE2E7F5E08E
:102B5000CE0EDF1E7C01F4E0EE0CFF1CFA95E1F7CF
:102B600026EB35E0E20EF31E442455245C01742C60
:102B7000739430E2A316B104B4F48E010F5F1F4FBB
:102B8000B801F601808191810E94DD1320E0A70148
:102B9000672D80E00E94FC0A20E0A801672D8DE0EF
:102BA0000E94FC0A07C020E04DE85DE0672D80E050
:102BB0000E94C60A0894411C511C0894A11CB11C17
:102BC00022E030E0C20ED31E80E190E0E80EF91E54
:102BD00097E04916510459F68AE080936B0580917D
:102BE0006B058823E1F780916E05813039F40894F4
:102BF0008108910897FE02C08824992480916E056F
:102C0000823051F40894811C911CE8E08E169104E6
:102C10001CF0E7E08E2E912C80916E05843009F037
:102C200066CF2B960FB6F894DEBF0FBECDBFDF91F7
:102C3000CF911F910F91FF90EF90DF90CF90BF90B9
:102C4000AF909F908F907F905F904F900895FB0181
:102C50009F01E8944230C4F04532B4F44A3029F47C
:102C600097FB1EF4909581959F4F642F77270E94C4
:102C70007A16805D8A330CF0895D8193CB010097D1
:102C8000A1F716F45DE251931082C9010C945E160F
:102C9000FB019F01423074F0453264F4642F7727C2
:102CA0000E947A16805D8A330CF0895D8193CB0196
:102CB0000097A1F71082C9010C945E16DC01FC019B
:102CC000672F71917723E1F7329704C07C916D9360
:102CD00070836291AE17BF07C8F30895991B79E01E
:102CE00004C0991F961708F0961B881F7A95C9F79C
:102CF00080950895AA1BBB1B51E107C0AA1FBB1FEB
:102D0000A617B70710F0A61BB70B881F991F5A9577
:102D1000A9F780959095BC01CD01089597FB092EE8
:102D200007260AD077FD04D0E5DF06D000201AF48C
:102D3000709561957F4F0895F6F7909581959F4F17
:102D40000895E199FECFBFBBAEBBE09A11960DB2DC
:102D50000895E199FECFBFBBAEBB0DBA11960FB679
:0C2D6000F894E29AE19A0FBE0895FFCFAC
:00000001FF
/Transportables_Koptertool/tags/V-0.1.1/Spezial/MMT-Mega32-20.hex
0,0 → 1,728
:100000000C94E3060C9400070C9400070C94000772
:100010000C9400070C9400070C9400070C94000744
:100020000C9400070C9400070C94F1120C94000738
:100030000C9400070C9497120C9400070C94000782
:100040000C9400070C9400070C9400070C94000714
:100050000C940007202020202020000D0A54696DF8
:10006000656F75742100446973706C6179000000DC
:10007000000000003E5B4F5B3E003E6B4F6B3E005E
:100080001C3E7C3E1C00183C7E3C18001C577D57D3
:100090001C001C5E7F5E1C0000183C180000FFE77F
:1000A000C3E7FF00001824180000FFE7DBE7FF00AC
:1000B00030483A060E00262979292600407F05059A
:1000C0000700407F05253F005A3CE73C5A007F3E31
:1000D0001C1C0800081C1C3E7F0014227F221400F8
:1000E0005F5F005F5F0006097F017F000066899502
:1000F0006A0060606060606094A2FFA294000804DF
:100100007E04080010207E20100008082A1C080029
:10011000081C2A0808001E10101010000C1E0C1ECF
:100120000C0030383E383000060E3E0E060000004F
:100130000000000000005F00000000070007000052
:10014000147F147F1400242A7F2A120023130864CA
:100150006200364956205000000807030000001CCA
:10016000224100000041221C00002A1C7F1C2A00A2
:1001700008083E08080000807030000008080808E1
:1001800008000000606000002010080402003E51DA
:1001900049453E0000427F400000724949494600FF
:1001A0002141494D33001814127F10002745454561
:1001B00039003C4A494931004121110907003649BB
:1001C00049493600464949291E0000001400000034
:1001D00000403400000000081422410014141414DC
:1001E00014000041221408000201590906003E4192
:1001F0005D594E007C1211127C007F49494936003E
:100200003E41414122007F4141413E007F494949F1
:1002100041007F09090901003E41415173007F08F7
:1002200008087F0000417F4100002040413F01005D
:100230007F08142241007F40404040007F021C02A2
:100240007F007F0408107F003E4141413E007F094E
:10025000090906003E4151215E007F091929460027
:1002600026494949320003017F0103003F404040D5
:100270003F001F2040201F003F4038403F006314D4
:10028000081463000304780403006159494D4300D6
:10029000007F41414100020408102000004141411B
:1002A0007F0004020102040040404040400000037F
:1002B000070800002054547840007F284444380048
:1002C000384444442800384444287F003854545467
:1002D000180000087E09020018A4A49C78007F087A
:1002E0000404780000447D4000002040403D0000B0
:1002F0007F102844000000417F4000007C04780407
:1003000078007C0804047800384444443800FC1821
:100310002424180018242418FC007C080404080075
:1003200048545454240004043F4424003C404020DA
:100330007C001C2040201C003C4030403C004428F5
:10034000102844004C9090907C004464544C44002D
:100350000008364100000000770000000041360828
:1003600000000201020402003C2623263C001EA1DC
:10037000A16112003A4040207A0038545455590087
:100380002155557941002154547841002155547824
:1003900040002054557940000C1E5272120039550D
:1003A000555559003954545459003955545458002E
:1003B0000000457C41000002457D42000001457C73
:1003C0004000791412147900F0282528F0007C549C
:1003D000554500002054547C54447C0A097F49410F
:1003E000324949493200324848483200324A484886
:1003F00030003A4141217A003A4240207800009D85
:10040000A0A07D003944444439003D4040403D00B7
:100410003C24FF242400487E494366002B2FFC2FF8
:100420002B00FF0929F62000C0887E090300205414
:10043000547941000000447D41003048484A320070
:10044000384040227A00007A0A0A72007D0D193184
:100450007D002629292F2800262929292600304811
:100460004D4020003808080808000808080838002F
:100470002F10C8ACBA002F102834FA0000007B00FF
:10048000000008142A14220022142A140800AA00CA
:100490005500AA00AA55AA55AA5555AA55AA55AA63
:1004A000000000FF0000101010FF0000141414FFE3
:1004B00000001010FF00FF001010F010F0001414E6
:1004C00014FC00001414F700FF000000FF00FF0000
:1004D0001414F404FC00141417101F0010101F1043
:1004E0001F001414141F0000101010F00000000072
:1004F000001F10101010101F1010101010F010100E
:10050000000000FF1010101010101010101010FF3D
:100510001010000000FF14140000FF00FF10000086
:100520001F1017140000FC04F414141417101714EF
:100530001414F404F4140000FF00F7141414141439
:1005400014141414F700F7141414141714141010BE
:100550001F101F10141414F414141010F010F010C5
:1005600000001F101F100000001F1414000000FCEA
:1005700014140000F010F0101010FF10FF101414ED
:1005800014FF14141010101F0000000000F01010D1
:10059000FFFFFFFFFFFFF0F0F0F0F0F0FFFFFF00C4
:1005A0000000000000FFFFFF0F0F0F0F0F0F384478
:1005B000443844007C2A2A3E14007E0202060600CB
:1005C000027E027E02006355494163003844443C88
:1005D0000400407E201E200006027E02020099A533
:1005E000E7A599001C2A492A1C004C7201724C0094
:1005F000304A4D4D3000304878483000BC625A4691
:100600003D003E49494900007E0101017E002A2A41
:100610002A2A2A0044445F44440040514A4440008E
:1006200040444A5140000000FF010300E080FF0009
:10063000000008086B6B0808361236243600060FD7
:10064000090F06000000181800000000101000003C
:100650003040FF010100001F01011E0000191D179D
:100660001200003C3C3C3C000000000000004D6FCC
:1006700064206279204D696B656C6A6F2030352F7C
:1006800030380020202053657474696E67730D0A3A
:1006900000202020446562756720446174656E0DFA
:1006A0000A002020204D6F746F72746573740D0AF8
:1006B00000202020506172616D657465720D0A0022
:1006C000202020446973706C61790D0A0020204855
:1006D000617570746D656EFC202856302E312E3198
:1006E000290D0A00506F727461626C6573204B6F44
:1006F00070746572746F6F6C0D0A002A00200054CC
:1007000061737465206472FC636B656E0D0A00434F
:100710006F6E66696720202020004368616E6E65F9
:100720006C73202000537469636B2020202020000C
:10073000486F6568652020202020004779726F206F
:100740002020202020004C6F6F70696E67202020D1
:100750000043616D6572612020202000536F6E732D
:10076000746967657320005573657220202020200E
:100770002000436F75706C696E67202000436F6EB8
:1007800066696728322920004C6F6F70696E677345
:100790006574000202020202020202000404040460
:1007A00004040303030808080805050808080005F1
:1007B000090909090707070707070606060A0A06BF
:1007C000060505050909090900070B0B0B0B0C0CA5
:1007D0000C0C0C0C0C0C01080201080201080201AF
:1007E00008020108020108020108020108020000D3
:1007F0000000FF0400FF0400FF0400FF04003204B7
:1008000000FF040006030040030014030020082139
:10081000FA0800320800FF0800000500000500FA91
:100820000800FA0800FA0800010000FF0500FF09AF
:1008300000FF0900FF0900FF0900FF0700FA070099
:10084000FA0700FA0700190700FF0600FA0600FA87
:100850000600FF0A00FF0A00FA0600FA0600FA0581
:1008600000FA0500FF0500FF0900FF0900FF09006D
:10087000FF09000001000107000000000000000067
:100880000000000000000000000000000000000068
:10089000000000000000000000000000004C6F6F2E
:1008A000702075702020202020202020004C6F6FA9
:1008B0007020646F776E092020202000004C6F6F3D
:1008C00070206C656674202020202020004C6F6F03
:1008D0007020726967687420202020200048F66824
:1008E000656E7265676C6572202020200048F6688E
:1008F000656E736368616C74657220200048656181
:1009000064686F6C6409090000000000004B6F6DA3
:10091000706173730909000000000000004B6F6DE7
:1009200070617373466978090900000000475053ED
:100930000909090000000000000000000041636890
:1009400073656E6B6F70706C756E672000447265B6
:10095000687261746509090000000000004E696357
:100960006B202020202020202020202000526F6C8F
:100970006C20202020202020202020200047617390
:1009800020202020202020202020202000476965D2
:1009900072090909000000000000000000506F7497
:1009A00069310909090000000000000000506F745F
:1009B00069320909090000000000000000506F744E
:1009C00069330909090000000000000000506F743D
:1009D00069340909090000000000000000436F6E3F
:1009E00066696709090900000000000000486F659A
:1009F00068655F4D696E476173202020004C756605
:100A000074647275636B5F4420202020004D617810
:100A1000486F6568652020202020202000486F65F1
:100A200068655F50202020202020202000486F652E
:100A300068655F56657273746165726B00486F65B7
:100A400068655F4143435F5769726B2E0053746959
:100A5000636B5F50202020202020202000537469E9
:100A6000636B5F4420202020202020200047696500
:100A7000725F50202020202020202020004761731A
:100A80005F4D696E202020202020202000476173C8
:100A90005F4D61782020202020202020004779729F
:100AA0006F41636346616B746F720900004B6F6D39
:100AB000706173735769726B756E67200047797246
:100AC0006F5F5020090900000000000000477972A4
:100AD0006F5F4909090900000000000000556E74AD
:100AE00065727370616E6E756E672020004E6F7454
:100AF000476173090909000000000000004E6F748F
:100B00004761735A65697420202020200055666F64
:100B10004175737269636874756E672000495F463A
:100B2000616B746F72202020202020200055736597
:100B300072506172616D31090900000000557365E2
:100B400072506172616D32090900000000557365D1
:100B500072506172616D33090900000000557365C0
:100B600072506172616D34090900000000536572B2
:100B7000766F4E69636B4374726C09000053657243
:100B8000766F4E69636B436F6D7009000053657239
:100B9000766F4E69636B4D696E0900000053657294
:100BA000766F4E69636B4D61780900000053657282
:100BB000766F4E69636B526566727368004C6F6F37
:100BC000704761734C696D6974090000004C6F6F68
:100BD000705468726573686F6C640900004C6F6FC5
:100BE00070487973746572657365090000416368C4
:100BF000734B6F70706C756E67090000004163681D
:100C000073476567656E4B6F70706C2E0057696E29
:100C10006B6C556D7363686C4E69636B0057696EDE
:100C20006B6C556D7363686C526F6C6C00477972B6
:100C30006F4163634162676C656963680044726910
:100C400066746B6F6D700909000000000044796ED6
:100C5000616D696353746162696C69740055736591
:100C600072506172616D35090900000000557365AD
:100C700072506172616D360909000000005573659C
:100C800072506172616D370909000000005573658B
:100C900072506172616D380909000000004C6F6F7D
:100CA00070436F6E66696709090000000053657242
:100CB000766F4E69636B436F6D70496E000D0A4E1F
:100CC00069636874206765737065696368657274C9
:100CD000000D0A506172616D6574657220676573FD
:100CE0007065696368657274000D0A2D2D2D3E00D4
:100CF000506172616D6574657220737065696368B7
:100D000065726E3F0D0A20206A610D0A20206E6513
:100D1000696E0054696D656F75740020353A0D0A6F
:100D20000020343A0D0A0020333A0D0A0020323AEE
:100D30000D0A0020313A0D0A004C616465205061B3
:100D400072616D657465720D0A002D002D002D0015
:100D5000457869740D0A00526563687465636B0DAC
:100D60000A004C696E69650D0A004F7269656E7400
:100D7000696572756E670D0A000D0A0045696E732C
:100D800074656C6C756E67656E3A0D0A00202020E4
:100D90002020202020202020202020202020202053
:100DA00020000D0A54696D656F757421000D0A5499
:100DB000696D656F7574210044656275672D4469BE
:100DC00073706C61790011241FBECFE5D8E0DEBFDF
:100DD000CDBF10E0A0E6B0E0ECE6FDE202C0059079
:100DE0000D92A036B107D9F717E0A0E6B0E001C038
:100DF0001D92A03DB107E1F70E94FE0D0C94B516BF
:100E00000C940000782F52E060E026C0E52FFF2709
:100E1000E951FB4F21812D5332813D5343814D5385
:100E20005C5FDC01AD59BB4F80818D53880F880F0B
:100E3000922F92959F70892B8C932295207F832FE0
:100E400086958695282BFD0121833295330F330F2C
:100E5000307C342B32836D5F862F99275717B0F281
:100E600008950F931F93B82F809163048093E70434
:100E7000809164048093E804809165048093E90480
:100E8000A3E073E035C0E72FFF27ED59FB4F8081CA
:100E9000418162817D5FEA2FFF27E951FB4F282FB7
:100EA00026952695235C208355279927837090707B
:100EB00024E0880F991F2A95E1F79A0104E03695FE
:100EC00027950A95E1F7822B835C81834F705070E0
:100ED000440F551F440F551F862F82958695869582
:100EE0008370842B835C82836F73635C6383AC5FEA
:100EF0007B1748F290E020E030E008C0E92FFF27A0
:100F0000E951FB4F8081280F311D9F5F9A17B1F780
:100F10003F70EA2FFF27E951FB4FC90136E0969554
:100F200087953A95E1F7835C80832F73235C218357
:100F30008DE0828313820A2F0D5F10E008C0E12F3D
:100F4000FF27E951FB4F80810E94E3121F5F1017BA
:100F5000B1F71F910F9108951F9384E180936B0562
:100F60000E94BE12833221F080916B058823C1F765
:100F700080916B05882319F481E090E017C00E94EE
:100F8000BE128093E70411E00AC00E94BE12E12F56
:100F9000FF27E951FB4F80831F5F17FD1FE78D304F
:100FA000A1F7812F0E94020780E090E01F91089531
:100FB0001F93CF93DF93CDB7DEB761970FB6F89449
:100FC000DEBF0FBECDBF182F83E28093630481E69E
:100FD0008093640480936504109366041092670400
:100FE0001092680486E00E9431070E94AC0780914D
:100FF000E8048134D1F7E3E6F4E0DE011196819153
:101000008D9384E0E337F807D1F7198A177020E051
:10101000AE014F5F5F4F612F80E00E94FC0A619636
:101020000FB6F894DEBF0FBECDBFDF91CF911F91F9
:1010300008959F92AF92BF92CF92DF92EF92FF926C
:101040000F931F93CF93DF93CDB7DEB761970FB6A2
:10105000F894DEBF0FBECDBF0E945A099924A92C77
:10106000BB2453E0AA0CBB1C5A95E1F7FA2C00E014
:1010700010E08F2D800F0E94D8070F5F1F4F0830A0
:101080001105B9F70E94AC078091E804843489F512
:101090007501EE0CFF1C85E694E0E80EF91ECC24E9
:1010A000DD248E010F5F1F4FF70120818181992779
:1010B000982F88274AE050E0B801820F911D0E94C6
:1010C000271620E044E550E06C2D8EE00E94C60A11
:1010D00020E0A8016C2D8EE00E94FC0A0894C11C3F
:1010E000D11C82E090E0E80EF91E98E0C916D10408
:1010F000C1F680916E05882329F280916E058130BA
:1011000009F4939480916E05823009F49A94809149
:101110006E05883019F0E3E09E22A1CF61960FB6EC
:10112000F894DEBF0FBECDBFDF91CF911F910F911D
:10113000FF90EF90DF90CF90BF90AF909F90089579
:101140001F9393E29093630491E69093640498E66E
:10115000909365048093660410926704109268046B
:1011600086E00E94310710E00E94AC07813009F44C
:101170001AE01F5F8091E8048053853018F01A3020
:1011800098F304C080E090E01A3010F081E090E025
:101190001F9108951F93CF93DF93CDB7DEB72A97A2
:1011A0000FB6F894DEBF0FBECDBF0E945A0960E0B3
:1011B00086E690E00E94980A80916E058823E1F708
:1011C0000E94A008813069F460E08BE590E00E9405
:1011D000980A88EC80936B0580916B05882369F1F0
:1011E000FBCF1091E80419831A8220E0AE014F5F13
:1011F0005F4F60E08AE00E94FC0A1F5F20E043E648
:1012000054E0612F80E00E94FC0A8AE080936B0525
:1012100080916B058823E1F780916E05813011F490
:101220000E94A00880916E05823011F40E94A008EF
:1012300080916E05843009F0BFCF2A960FB6F894DE
:10124000DEBF0FBECDBFDF91CF911F910895C4982F
:101250008FB9779BFECF8EB18EB9C49A08951F9334
:10126000CF93DF93E2E6F0E0119284E0E236F807F4
:10127000D9F710EBC398812F0E94270980E10E94C3
:101280002709809161000E942709C39AC0E0D0E03D
:1012900080E00E9427092196C038D105C9F71F5F59
:1012A000183B41F71092690510926A05DF91CF91C2
:1012B0001F9108950E942F09089588E893E10197EE
:1012C000F1F708950F931F93CF93DF938C01C0E044
:1012D000D0E003C00E945D092196C017D107D1F765
:1012E000DF91CF911F910F9108951092690510928F
:1012F0006A058FEF87BB8EE58DB9C49AC2988AE0E4
:1013000090E00E946209C29AC498C39880E40E9447
:10131000270980916100882329F481EA0E94270926
:1013200080EC04C080EA0E94270988EC0E9427090B
:1013300086EA0E94270982EA0E9427098FE20E941A
:10134000270988EF0E94270980E00E94270987E289
:101350000E94270981E80E94270986E10E94270947
:101360008CEA0E94270980E00E9427098FEA0E94E8
:1013700027090E942F090895FF920F931F938C0154
:10138000F62EC398880F892F881F990B9195805549
:101390000E942709809161000F77080F802F8295A6
:1013A0008F70805F0E942709802F8F700E9427090D
:1013B000C39A8F2D0E9427091F910F91FF900895C6
:1013C000EF92FF920F931F93CF93DF93C0E0D0E093
:1013D00002E610E032EEE32E30E0F32EF7018191C9
:1013E0007F01F801808361918F01CE010E94BC09C9
:1013F0002196F3E0C038DF0789F702EE13E0F80129
:1014000011928F0160E0CE010E94BC092196F4E0A8
:10141000C030DF07A1F7DF91CF911F910F91FF90AF
:10142000EF900895CF92DF92EF92FF920F931F9368
:10143000CF93DF93D22E4F3D81F0403E38F4463DAE
:10144000B1F04C3DB1F0443CA9F40FC0463F49F027
:101450004C3F49F0443E71F402C041EE0BC044E8F9
:1014600009C044E907C041E805C04EE803C049E9A6
:1014700001C04AE9062F11271695102F002717954E
:10148000079526E0829FC0011124080F191F1370D1
:10149000429F700111248EE690E0E80EF91ECC24E4
:1014A000E801CE59DF4FF7019491F2E0DF16A1F089
:1014B000FD1530F0DD2059F081E0D816B1F409C0F7
:1014C000E3E0DE1661F0F4E0DF1679F40AC09883F9
:1014D0000CC08881892B08C08881892705C0888134
:1014E00002C088819095892388836991C8010E94F0
:1014F000BC09C3940894E11CF11C0F5F1F4F86E0E8
:10150000C81689F6DF91CF911F910F91FF90EF9050
:10151000DF90CF90089580916A058F5F80936A0570
:10152000883028F00E94E00987E080936A050895DA
:101530001F93CF93DF93EC01162F20C04032A0F011
:101540002196212F60916A05809169050E94120AF7
:10155000809169058F5F80936905853178F01092DD
:1015600069050E948B0A0AC04A3029F04D3029F4DF
:101570001092690502C00E948B0A2196FE014491D7
:101580004423E1F6DF91CF911F910895809369057F
:1015900060936A05622FCA010E94980A08951F93FA
:1015A000CF93DF93EC01162F20C04032A0F021969C
:1015B000212F60916A05809169050E94120A80912D
:1015C00069058F5F80936905853178F01092690510
:1015D0000E948B0A0AC04A3029F04D3029F410923B
:1015E000690502C00E948B0A219648814423E9F6CE
:1015F000DF91CF911F9108958093690560936A05EB
:10160000622FCA010E94CF0A0895982F87FD39C022
:101610006034B8F5862F869586958695282F3327D2
:101620003695322F222737952795290F311D677060
:1016300081E090E001C0880F6A95EAF7682F337067
:10164000413061F0413018F04230A1F40DC0F90191
:10165000EE59FF4F8081609586230BC0F901EE594A
:10166000FF4F8081862B05C0F901EE59FF4F808125
:1016700086278083F901EE59FF4F6081C9010E94DE
:10168000BC0908952F923F924F925F926F927F9282
:101690008F929F92AF92BF92CF92DF92EF92FF9282
:1016A0000F931F93CF93DF93CDB7DEB728970FB675
:1016B000F894DEBF0FBECDBF8D83162F0E83682E2C
:1016C0007724862E9924842F99279C838B838619CF
:1016D0009709E22FFF27FA83E9839F012819390927
:1016E00097FF04C0FFEF2F2E3F2E07C040E050E0D1
:1016F000009711F041E050E01A0137FF04C0EFEF0E
:101700004E2E5E2E08C040E050E02115310511F04C
:1017100041E050E02A016C0197FF04C0D094C194CD
:10172000D108D394790137FF04C0F094E194F10813
:10173000F3944E81682D862D0E94050BEC14FD0458
:101740007CF5C60162E070E00E948E1644275527A2
:10175000461B570B58874F83A22CB62CB20C5D81C9
:10176000052F112717C08F8198858E0D9F1D988793
:101770008F831816190634F4840C951C8C199D0956
:1017800098878F834E81682D8B2D0E94050B020D4B
:10179000131DBA0CEB81FC810E171F0721F72DC01A
:1017A000C70162E070E00E948E1644275527461B51
:1017B000570B58874F83A42CB82CB40C012F11273A
:1017C00017C08F8198858C0D9D1D98878F83181663
:1017D000190634F4620C731C8E199F0998878F8345
:1017E0004E816B2D862D0E94050B040D151DBA0C24
:1017F000E981FA810E171F0721F728960FB6F89492
:10180000DEBF0FBECDBFDF91CF911F910F91FF9033
:10181000EF90DF90CF90BF90AF909F908F907F9090
:101820006F905F904F903F902F900895BF92CF920E
:10183000DF92EF92FF920F931F93CF93DF93182FB6
:10184000B02E87FD1FE7603408F06FE37727CB01E8
:10185000820F911D9C01812F840F912D911D6C0190
:1018600091E8C916D10418F0B0E8CB2ED12C79013B
:101870002134310518F0A0E4EA2EF12CEB0108C068
:101880000B2D2C2F4C2D6C2F812F0E94420B21965B
:10189000EC16FD06A8F7DF91CF911F910F91FF90F5
:1018A000EF90DF90CF90BF900895CF92DF92EF92AC
:1018B000FF920F931F93CF93DF93D82EC02E87FFF5
:1018C00002C08FE7D82E162F603408F01FE3812F57
:1018D000820F912D911DEC018D2D840F912D911D65
:1018E0007C0191E8E916F10418F000E8E02EF12CF3
:1018F0000C2D212F4E2D612F8D2D0E94420BC134B6
:10190000D10510F0C0E4D0E00C2D2C2F4E2D612F0E
:101910008E2D0E94420B2C2F4D2D6C2F8E2D0E9450
:10192000420B212F4D2D6C2F8D2D0E94420BDF91EC
:10193000CF911F910F91FF90EF90DF90CF9008957E
:101940002F923F924F925F926F927F928F929F92CF
:10195000AF92BF92CF92DF92EF92FF920F931F93BD
:10196000CF93DF93CDB7DEB724970FB6F894DEBFE1
:101970000FBECDBF8C016B017A01A22E21E030E0B9
:10198000241B350B3C832B83CA01880F991F6624C7
:101990007724681A790A462E502E640F4A2D802F1C
:1019A0000E94050B6C2D6E194A2D802F0E94050B8D
:1019B0004A2D6C2D802F8E0D0E94050B4A2D6C2D0B
:1019C000802F8E190E94050B4701222433241A828E
:1019D000198258C08B819C8197FD0BC008948108A7
:1019E0009108E2E0F0E06E0E7F1E860D971D9C834D
:1019F0008B830894211C311C29813A812E5F3F4F33
:101A00003A8329838B819C810196820F931F9C834B
:101A10008B83142D180DD52CD20C4A2D612F8D2DB2
:101A20000E94050BE52CE2184A2D612F8E2D0E9495
:101A3000050B142D18194A2D612F8D2D0E94050BB1
:101A40004A2D612F8E2D0E94050B142D120DE52CB1
:101A5000E80C4A2D612F8E2D0E94050B952D9819AB
:101A6000092F4A2D612F892F0E94050B142D121961
:101A70004A2D612F8E2D0E94050B4A2D612F802F3C
:101A80000E94050B281439040CF4A4CF24960FB639
:101A9000F894DEBF0FBECDBFDF91CF911F910F91A4
:101AA000FF90EF90DF90CF90BF90AF909F908F907E
:101AB0007F906F905F904F903F902F9008952F925E
:101AC0003F924F925F926F927F928F929F92AF92CE
:101AD000BF92CF92DF92EF92FF920F931F93CF931B
:101AE000DF936B017A0151E0A52EB12CAE18BF082F
:101AF0009701220F331F88249924821A930A662E95
:101B0000782E262F2E196E0D01E0482F0E94420BD1
:101B1000472D4E192C2D6C2D872D8E0D0E94420BBA
:101B2000E70144245524222433243AC0B7FC07C0DB
:101B3000219782E090E0880E991EA80CB91C0894A9
:101B4000411C511C82E090E0280E391E0894A11C13
:101B5000B11CA20CB31C1C2F662D6C0FE72CE418D3
:101B6000D72CD40C01E0262F4E2D8D2D0E94420B38
:101B7000662D6C1B262F4E2D8D2D0E94420B662D3F
:101B8000640DE72CEC1A170D262F4E2D812F0E9485
:101B9000420B662D6419262F4E2D812F0E94420B79
:101BA0004C165D061CF2DF91CF911F910F91FF90B3
:101BB000EF90DF90CF90BF90AF909F908F907F90ED
:101BC0006F905F904F903F902F900895A2E0B0E00B
:101BD0000E94A116802D992780936100089581E0CD
:101BE00021E030E0D901082E0E94A91680E02F5F85
:101BF0003F4FD901082E0E94A91608958FEF8BBB85
:101C000083E488BB8CEF85BB8CE782BB83E084BB1D
:101C100080E881BB21E030E0D9010E94A116802D2F
:101C2000813071F081E0D901082E0E94A91680E070
:101C30002F5F3F4FD901082E0E94A9162150304036
:101C40002F5F3F4FD9010E94A116802D99278093C5
:101C500061000E9475090E94B9120E9430137894A5
:101C60000E94870EFDCF0F931F93062F142F20E0A5
:101C70004DEF56E0682F812F0E94C60A20E04BEFFF
:101C800056E0602F812F0E94C60A1F910F91089580
:101C9000EF92FF920F931F93082FE62EF42E682FDA
:101CA0000E94330E102F912F80916E058823E1F74B
:101CB00080916E058823E1F380916E05823019F4DE
:101CC0001E1508F41F5F80916E05813019F401170D
:101CD00008F411504F2D612F892F0E94330E8091EF
:101CE0006E05883021F080916E058430E1F6809198
:101CF0006E05843009F41FEF80916E058823E1F7AB
:101D0000812F99271F910F91FF90EF9008950E94C6
:101D10005A0960E084EE96E00E94980A60E08DEC3B
:101D200096E00E94980A60E080EC96E00E94980A93
:101D300060E081EB96E00E94980A60E082EA96E01B
:101D40000E94980A60E081E996E00E94980A60E0AB
:101D500083E896E00E94980A60E08EE696E00E9492
:101D6000980A4FE066E082E00E94480E843091F0CD
:101D7000853028F4823041F08330A1F408C08530EA
:101D800061F0863079F40CC00E94CA0808950E9460
:101D9000E41108950E94D30E08950E94311508950C
:101DA0000E944E1308950E945A0980916E0588235F
:101DB000E1F760E08FEF96E00E94980A80916E054F
:101DC0008823E1F380916E058830C9F483E2809323
:101DD000630481E68093640484E7809365048AE069
:101DE00080936604809367048093680480936904F9
:101DF00010926A0410926B0489E00E94310780916E
:101E00006E058823E1F780916E058823E1F383E274
:101E10008093630481E68093640484E7809365047F
:101E2000109266041092670410926804109269047C
:101E300010926A0410926B0489E00E9431070895A1
:101E4000FB0120E030E0482F552761E0CA01022E57
:101E500002C0959587950A94E2F780FF02C06083DF
:101E600001C010822F5F3F4F31962830310571F746
:101E7000089540E020E030E061E070E0FC018191F5
:101E8000813041F4CB01022E02C0880F991F0A94C1
:101E9000E2F7480F2F5F3F4F2830310581F7842F3D
:101EA00099270895482FFB0164E60E946E168083EF
:101EB00024E6829FC0011124481B842F6AE00E94FF
:101EC0006E162AE0829F90011124421B405D4283DE
:101ED0009081905D9083805D8183903329F490E2BE
:101EE0009083803309F4918313820895CF92DF9217
:101EF000EF92FF920F931F93CF93DF93CDB7DEB78F
:101F000062970FB6F894DEBF0FBECDBF823008F4E3
:101F100055C0615044E080E00E94480EC82E8FEF0B
:101F2000C81609F421C1EC2CFF24F701EA54F84F3C
:101F3000E081FF27ED59FB4FD08020E04EE45DE0CB
:101F40006C2D84E00E94C60A80916E058823E1F71B
:101F500080916E05813009F4DA9480916E058230AB
:101F600009F4D3948E01075F1F4FB8018D2D0E9495
:101F7000520F20E0A8016C2D80E00E94FC0A84E151
:101F800080936B0580916B058823E1F780916E0546
:101F9000843021F080916E058830D1F680916E05F5
:101FA000883009F0E1C0A6EBB7E0EA0EFB1ED701CE
:101FB000EC91FF27ED59FB4FD082D6C0813009F05C
:101FC00069C08E010F5F1F4FB801809197040E9476
:101FD000200F1A8644E063E080E00E94480ED82E6D
:101FE000BFEF8B1709F4C0C0E82EFF240E0D1F1D94
:101FF000F801008120E04CE45DE0682F84E00E945D
:10200000C60A80916E05813009F400E080916E056A
:10201000823009F401E0005D0987005320E0AE0141
:10202000475F5F4F6D2D80E00E94FC0A84E1809342
:102030006B0580916B058823E1F780916E058830F0
:1020400021F080916E058430E1F680916E05883034
:1020500051F4CE010196E80EF91ED7010C930E94AF
:10206000390F809397040E945A098E01075F1F4F12
:10207000B801809197040E94520F60E0C8010E944D
:10208000CF0A88EC80936B0580916B05882309F457
:102090006BC0FACF882309F067C08E010F5F1F4F16
:1020A000B80180916B040E94200F1A8644E067E01B
:1020B00080E00E94480ED82EBFEF8B1709F454C061
:1020C000E82EFF240E0D1F1DF801008120E04AE4D8
:1020D0005DE0682F84E00E94C60A80916E05813021
:1020E00009F400E080916E05823009F401E0005DA2
:1020F0000987005320E0AE01475F5F4F6D2D80E000
:102100000E94FC0A84E180936B0580916B05882313
:10211000E1F780916E05883021F080916E05843062
:10212000E1F680916E05883051F4CE010196E80EFB
:10213000F91ED7010C930E94390F80936B040E9403
:102140005A098E01075F1F4FB80180916B040E94EE
:10215000520F60E0C8010E94CF0A88EC80936B05A3
:1021600080916B058823E1F762960FB6F894DEBF85
:102170000FBECDBFDF91CF911F910F91FF90EF90D8
:10218000DF90CF9008956F927F928F929F92AF923F
:10219000BF92CF92DF92EF92FF920F931F93CF9354
:1021A000DF93CDB7DEB7A1970FB6F894DEBF0FBEB1
:1021B000CDBFE82E81E08E1508F044C048EDA42E76
:1021C00047E0B42E3DE5632E39E0732EFF24CC2486
:1021D000DD2423E6822E24E0922EF50184918E15D3
:1021E000E9F4EF2DFF27EA54F84FC0828E01075F14
:1021F0001F4FB801F40180810E94520F20E0A80116
:102200006F2D80E00E94FC0A20E0A3016F2D85E085
:102210000E94C60AF7E0FF1508F0F3940894C11C69
:10222000D11C83E090E0A80EB91E0894811C911C7B
:10223000E0E1F0E06E0E7F1EF2E4CF16D10409F467
:1022400063C0CBCF81E0E81679F58E010F5F1F4F99
:10225000B801809197040E94200F1A869DE9A92E4B
:1022600098E0B92E6801CE0101961C2D181BF601CD
:1022700081916F01805D898720E0AE01475F5F4FEC
:10228000612F80E00E94FC0A20E0A501612F85E01B
:102290000E94C60A80E190E0A80EB91ECE01059604
:1022A000C816D90681F1DFCFEE2069F58E010F5FE8
:1022B0001F4FB80180916B040E94200F1A8668019D
:1022C0008DEDA82E88E0B82ECE010196FC2CF81AD0
:1022D000F60181916F01805D89878E01075F1F4F35
:1022E00020E0A8016F2D80E00E94FC0A20E0A501FB
:1022F0006F2D85E00E94C60A80E190E0A80EB91E0D
:10230000C016D10609F7FF248F2D9927A1960FB685
:10231000F894DEBF0FBECDBFDF91CF911F910F911B
:10232000FF90EF90DF90CF90BF90AF909F908F90F5
:102330007F906F900895982F8630D8F426E430E08F
:10234000E9EAF4E0808183832150304031978FEFB8
:102350002F3F3807B9F783E28093630481E68093C7
:1023600064049559909365041092AD048BE40E9427
:10237000310708951F9393E29093630491E690933D
:10238000640491E790936504809366041092670457
:102390001092680486E00E94310710E00E94AC07AA
:1023A000813009F41EE11F5F8091E8048C54853070
:1023B00018F01E3198F304C080E090E01E3110F058
:1023C00081E090E01F910895FF920F931F93CF93A8
:1023D000DF93CDB7DEB72F970FB6F894DEBF0FBEF1
:1023E000CDBF0E945A0960E089E39DE00E94980AEF
:1023F00060E083E39DE00E94980A60E08DE29DE04A
:102400000E94980A60E087E29DE00E94980A60E0DE
:1024100081E29DE00E94980A60E08BE19DE00E94CD
:10242000980A40E065E081E00E94480E0E94BA11DF
:10243000813041F420E043E15DE066E080E00E940D
:10244000C60A62C062E0F62E0E945A098E010F5F32
:102450001F4F4AE050E0B8018F2D99270E9448167F
:1024600060E0C8010E94CF0A82E380936B058091EF
:102470006B058823E1F70E945A098F2D0E94C31033
:10248000682F80916E058823E1F380916E0582307C
:1024900009F4F39480916E05813009F4FA948FEF7A
:1024A000F81619F45CE0F52E04C08CE08F1508F4E2
:1024B000FF2480916E05883019F48F2D0E94760FCD
:1024C00080916E05843009F0BFCF0E945A0960E008
:1024D00080EF9CE00E94980A40E062E081E00E9468
:1024E000480E813061F460E089EE9CE00E94980A19
:1024F00085E00E949B1160E081ED9CE003C060E0FC
:102500008DEB9CE00E94980A84E680936B05809195
:102510006B058823E1F72F960FB6F894DEBF0FBE48
:10252000CDBFDF91CF911F910F91FF9008951F9222
:102530000F920FB60F9211248F939F93EF93FF93F7
:102540008091BE079CB1E0ECF7E0E80FF11D9083AD
:102550008F5F8093BE078091BE078F708093BE0708
:10256000FF91EF919F918F910F900FBE0F901F9051
:10257000189588E98AB984E189B908958AE0809339
:102580006D059091BF078091BE07981721F4809147
:102590006D058823B1F780916D05882311F4E0E083
:1025A0000FC08091BF07E82FFF27E054F84FE0816C
:1025B0008F5F8093BF078091BF078F708093BF07A5
:1025C0008E2F992708955D9BFECF8CB90895FC014D
:1025D00004C05D9BFECF8CB9319680818823C9F7FA
:1025E00008951F920F920FB60F9211248F939F930D
:1025F00080916C05882331F080916C058150809327
:102600006C0515C08AE080936C0589B39927809585
:102610009095689413F8959587951694E1F78F70C7
:1026200080936E0580916F058F5F80936F05809119
:102630006B05882329F080916B05815080936B0591
:1026400080916D05882329F080916D0581508093DC
:102650006D059F918F910F900FBE0F901F90189551
:102660008DE083BF83EC8CBF89B7826089BF0895FA
:10267000F89480916100882321F484E080936100C4
:1026800002C01092610080916100A2E0B0E0082ECB
:102690000E94A9160E947509789408950F931F93BC
:1026A00011E00E945A0960E08CE79DE00E94980AC0
:1026B00060E089E79DE00E94980A60E08AE69DE07C
:1026C0000E94980A60E082E69DE00E94980A60E01D
:1026D00087E59DE00E94980A60E080E59DE00E9409
:1026E000980A4FE065E082E00E94480E833049F08E
:1026F0008430C9F0823011F010E026C00E943813F7
:1027000023C00E945A0901E022E344E664E18AE022
:102710000E94420B80916E058830B1F080916E0569
:10272000843091F0F7CF0E945A0901E028E244E694
:1027300064E18AE00E94550C80916E05883021F09A
:1027400080916E058430C1F7112309F0AACF1F9143
:102750000F910895CF93DF93EC0152E070E026C013
:10276000E52FFF27E951FB4F21812D5332813D5346
:1027700043814D535C5FDE01A80FB91F80818D53EB
:10278000880F880F922F92959F70892B8C9322959A
:10279000207F832F86958695282BFD0121833295F6
:1027A000330F330F307C342B32837D5F872F992793
:1027B0005617B0F2DF91CF9108954F925F926F92CA
:1027C0007F928F929F92AF92BF92CF92DF92EF92C1
:1027D000FF920F931F93CF93DF93FC01EB0180E2F5
:1027E000888340E8E130F40718F46624772408C0B1
:1027F000F095E195FF4F8DE2888351E0652E712CB5
:102800002E010894411C511CCF0160E177E20E9427
:102810007A168B01262F332780E197E2BC01269F91
:10282000C001279F900D369F900D11249F01281BFA
:10283000390B42E0C42ED12CCC0EDD1EC90168EE4E
:1028400073E00E947A167B01462F552788EE93E0AD
:10285000FC014E9FC0014F9F900D5E9F900D112473
:10286000281B390B93E0A92EB12CAC0EBD1EC9015B
:1028700064E670E00E947A16FB0184E6689FC0015E
:102880001124281B390B84E0882E912C8C0E9D1E60
:10289000C9016AE070E00E947A168AE0689FC00170
:1028A0001124281B390B205D2D83005D0983F0E383
:1028B000EF0EEA82E05DEB83605D6C83003391F59F
:1028C00080E2888341E06416710409F48DE2898313
:1028D000F6018081803331F580E2F2018083F1E0FE
:1028E0006F16710409F48DE2F6018083F501808191
:1028F0008033C1F480E2F6018083F1E06F16710449
:1029000009F48DE2F5018083F4018081803351F474
:1029100080E2F5018083F1E06F16710409F48DE225
:10292000F40180831E82DF91CF911F910F91FF9060
:10293000EF90DF90CF90BF90AF909F908F907F905F
:102940006F905F904F9008950F931F93082F84E12D
:1029500080936B050E94BE12833221F080916B053B
:102960008823C1F780916B05882319F481E090E0FA
:1029700030C00E94BE128093E70411E00AC00E949A
:10298000BE12E12FFF27E951FB4F80831F5F17FD28
:102990001FE78D30A1F7023221F4612F80E795E027
:1029A0000AC0802F992774E0880F991F7A95E1F764
:1029B000612F8A549A4F0E94AA13E02FFF2764E0E8
:1029C000EE0FFF1F6A95E1F7EA54FA4F178680E091
:1029D00090E01F910F910895FF920F931F93F82E8F
:1029E00083E28093630481E68093640492E2F916A3
:1029F00071F483E680936504109266041092670474
:102A00001092680486E00E94310704E40FC09FE141
:102A10009F1520F080936504F0926604109267047D
:102A20001092680486E00E94310701E410E08F2DC7
:102A30000E94A414813009F41EE11F5F8091E80414
:102A4000801710F0081718F41E3188F304C080E0D6
:102A500090E01E3110F081E090E01F910F91FF9007
:102A600008954F925F927F928F929F92AF92BF9202
:102A7000CF92DF92EF92FF920F931F93CF93DF934A
:102A8000CDB7DEB72B970FB6F894DEBF0FBECDBF24
:102A90000E945A0960E088EB9DE00E94980A1B861C
:102AA00000E010E0802F0E94EC14813039F4802F78
:102AB0000E94EC14813011F421E02B870F5F1F4F2F
:102AC0000032110579F73B85313019F088249924BB
:102AD0000EC060E08DEA9DE00E94980A88EC809329
:102AE0006B0580916B05882309F49BC0FACF809118
:102AF0006E058823E1F782E20E94EC14813071F4C4
:102B000060E082EA9DE00E94980A88EC80936B0561
:102B100080916B05882309F484C0FACF8E010F5F82
:102B20001F4FB801C4010E94DD1320E0A80160E03E
:102B30008FE00E94FC0AC401B3E0880F991FBA9588
:102B4000E1F7881999096C01CC0CDD1CE2E7F5E08E
:102B5000CE0EDF1E7C01F4E0EE0CFF1CFA95E1F7CF
:102B600026EB35E0E20EF31E442455245C01742C60
:102B7000739430E2A316B104B4F48E010F5F1F4FBB
:102B8000B801F601808191810E94DD1320E0A70148
:102B9000672D80E00E94FC0A20E0A801672D8DE0EF
:102BA0000E94FC0A07C020E04DE85DE0672D80E050
:102BB0000E94C60A0894411C511C0894A11CB11C17
:102BC00022E030E0C20ED31E80E190E0E80EF91E54
:102BD00097E04916510459F68AE080936B0580917D
:102BE0006B058823E1F780916E05813039F40894F4
:102BF0008108910897FE02C08824992480916E056F
:102C0000823051F40894811C911CE8E08E169104E6
:102C10001CF0E7E08E2E912C80916E05843009F037
:102C200066CF2B960FB6F894DEBF0FBECDBFDF91F7
:102C3000CF911F910F91FF90EF90DF90CF90BF90B9
:102C4000AF909F908F907F905F904F900895FB0181
:102C50009F01E8944230C4F04532B4F44A3029F47C
:102C600097FB1EF4909581959F4F642F77270E94C4
:102C70007A16805D8A330CF0895D8193CB010097D1
:102C8000A1F716F45DE251931082C9010C945E160F
:102C9000FB019F01423074F0453264F4642F7727C2
:102CA0000E947A16805D8A330CF0895D8193CB0196
:102CB0000097A1F71082C9010C945E16DC01FC019B
:102CC000672F71917723E1F7329704C07C916D9360
:102CD00070836291AE17BF07C8F30895991B79E01E
:102CE00004C0991F961708F0961B881F7A95C9F79C
:102CF00080950895AA1BBB1B51E107C0AA1FBB1FEB
:102D0000A617B70710F0A61BB70B881F991F5A9577
:102D1000A9F780959095BC01CD01089597FB092EE8
:102D200007260AD077FD04D0E5DF06D000201AF48C
:102D3000709561957F4F0895F6F7909581959F4F17
:102D40000895E199FECFBFBBAEBBE09A11960DB2DC
:102D50000895E199FECFBFBBAEBB0DBA11960FB679
:0C2D6000F894E29AE19A0FBE0895FFCFAC
:00000001FF
/Transportables_Koptertool/tags/V-0.1.1/Spezial/MMT-Mega32-7.hex
0,0 → 1,728
:100000000C94E3060C9400070C9400070C94000772
:100010000C9400070C9400070C9400070C94000744
:100020000C9400070C9400070C94F1120C94000738
:100030000C9400070C9497120C9400070C94000782
:100040000C9400070C9400070C9400070C94000714
:100050000C940007202020202020000D0A54696DF8
:10006000656F75742100446973706C6179000000DC
:10007000000000003E5B4F5B3E003E6B4F6B3E005E
:100080001C3E7C3E1C00183C7E3C18001C577D57D3
:100090001C001C5E7F5E1C0000183C180000FFE77F
:1000A000C3E7FF00001824180000FFE7DBE7FF00AC
:1000B00030483A060E00262979292600407F05059A
:1000C0000700407F05253F005A3CE73C5A007F3E31
:1000D0001C1C0800081C1C3E7F0014227F221400F8
:1000E0005F5F005F5F0006097F017F000066899502
:1000F0006A0060606060606094A2FFA294000804DF
:100100007E04080010207E20100008082A1C080029
:10011000081C2A0808001E10101010000C1E0C1ECF
:100120000C0030383E383000060E3E0E060000004F
:100130000000000000005F00000000070007000052
:10014000147F147F1400242A7F2A120023130864CA
:100150006200364956205000000807030000001CCA
:10016000224100000041221C00002A1C7F1C2A00A2
:1001700008083E08080000807030000008080808E1
:1001800008000000606000002010080402003E51DA
:1001900049453E0000427F400000724949494600FF
:1001A0002141494D33001814127F10002745454561
:1001B00039003C4A494931004121110907003649BB
:1001C00049493600464949291E0000001400000034
:1001D00000403400000000081422410014141414DC
:1001E00014000041221408000201590906003E4192
:1001F0005D594E007C1211127C007F49494936003E
:100200003E41414122007F4141413E007F494949F1
:1002100041007F09090901003E41415173007F08F7
:1002200008087F0000417F4100002040413F01005D
:100230007F08142241007F40404040007F021C02A2
:100240007F007F0408107F003E4141413E007F094E
:10025000090906003E4151215E007F091929460027
:1002600026494949320003017F0103003F404040D5
:100270003F001F2040201F003F4038403F006314D4
:10028000081463000304780403006159494D4300D6
:10029000007F41414100020408102000004141411B
:1002A0007F0004020102040040404040400000037F
:1002B000070800002054547840007F284444380048
:1002C000384444442800384444287F003854545467
:1002D000180000087E09020018A4A49C78007F087A
:1002E0000404780000447D4000002040403D0000B0
:1002F0007F102844000000417F4000007C04780407
:1003000078007C0804047800384444443800FC1821
:100310002424180018242418FC007C080404080075
:1003200048545454240004043F4424003C404020DA
:100330007C001C2040201C003C4030403C004428F5
:10034000102844004C9090907C004464544C44002D
:100350000008364100000000770000000041360828
:1003600000000201020402003C2623263C001EA1DC
:10037000A16112003A4040207A0038545455590087
:100380002155557941002154547841002155547824
:1003900040002054557940000C1E5272120039550D
:1003A000555559003954545459003955545458002E
:1003B0000000457C41000002457D42000001457C73
:1003C0004000791412147900F0282528F0007C549C
:1003D000554500002054547C54447C0A097F49410F
:1003E000324949493200324848483200324A484886
:1003F00030003A4141217A003A4240207800009D85
:10040000A0A07D003944444439003D4040403D00B7
:100410003C24FF242400487E494366002B2FFC2FF8
:100420002B00FF0929F62000C0887E090300205414
:10043000547941000000447D41003048484A320070
:10044000384040227A00007A0A0A72007D0D193184
:100450007D002629292F2800262929292600304811
:100460004D4020003808080808000808080838002F
:100470002F10C8ACBA002F102834FA0000007B00FF
:10048000000008142A14220022142A140800AA00CA
:100490005500AA00AA55AA55AA5555AA55AA55AA63
:1004A000000000FF0000101010FF0000141414FFE3
:1004B00000001010FF00FF001010F010F0001414E6
:1004C00014FC00001414F700FF000000FF00FF0000
:1004D0001414F404FC00141417101F0010101F1043
:1004E0001F001414141F0000101010F00000000072
:1004F000001F10101010101F1010101010F010100E
:10050000000000FF1010101010101010101010FF3D
:100510001010000000FF14140000FF00FF10000086
:100520001F1017140000FC04F414141417101714EF
:100530001414F404F4140000FF00F7141414141439
:1005400014141414F700F7141414141714141010BE
:100550001F101F10141414F414141010F010F010C5
:1005600000001F101F100000001F1414000000FCEA
:1005700014140000F010F0101010FF10FF101414ED
:1005800014FF14141010101F0000000000F01010D1
:10059000FFFFFFFFFFFFF0F0F0F0F0F0FFFFFF00C4
:1005A0000000000000FFFFFF0F0F0F0F0F0F384478
:1005B000443844007C2A2A3E14007E0202060600CB
:1005C000027E027E02006355494163003844443C88
:1005D0000400407E201E200006027E02020099A533
:1005E000E7A599001C2A492A1C004C7201724C0094
:1005F000304A4D4D3000304878483000BC625A4691
:100600003D003E49494900007E0101017E002A2A41
:100610002A2A2A0044445F44440040514A4440008E
:1006200040444A5140000000FF010300E080FF0009
:10063000000008086B6B0808361236243600060FD7
:10064000090F06000000181800000000101000003C
:100650003040FF010100001F01011E0000191D179D
:100660001200003C3C3C3C000000000000004D6FCC
:1006700064206279204D696B656C6A6F2030352F7C
:1006800030380020202053657474696E67730D0A3A
:1006900000202020446562756720446174656E0DFA
:1006A0000A002020204D6F746F72746573740D0AF8
:1006B00000202020506172616D657465720D0A0022
:1006C000202020446973706C61790D0A0020204855
:1006D000617570746D656EFC202856302E312E3198
:1006E000290D0A00506F727461626C6573204B6F44
:1006F00070746572746F6F6C0D0A002A00200054CC
:1007000061737465206472FC636B656E0D0A00434F
:100710006F6E66696720202020004368616E6E65F9
:100720006C73202000537469636B2020202020000C
:10073000486F6568652020202020004779726F206F
:100740002020202020004C6F6F70696E67202020D1
:100750000043616D6572612020202000536F6E732D
:10076000746967657320005573657220202020200E
:100770002000436F75706C696E67202000436F6EB8
:1007800066696728322920004C6F6F70696E677345
:100790006574000202020202020202000404040460
:1007A00004040303030808080805050808080005F1
:1007B000090909090707070707070606060A0A06BF
:1007C000060505050909090900070B0B0B0B0C0CA5
:1007D0000C0C0C0C0C0C01080201080201080201AF
:1007E00008020108020108020108020108020000D3
:1007F0000000FF0400FF0400FF0400FF04003204B7
:1008000000FF040006030040030014030020082139
:10081000FA0800320800FF0800000500000500FA91
:100820000800FA0800FA0800010000FF0500FF09AF
:1008300000FF0900FF0900FF0900FF0700FA070099
:10084000FA0700FA0700190700FF0600FA0600FA87
:100850000600FF0A00FF0A00FA0600FA0600FA0581
:1008600000FA0500FF0500FF0900FF0900FF09006D
:10087000FF09000001000107000000000000000067
:100880000000000000000000000000000000000068
:10089000000000000000000000000000004C6F6F2E
:1008A000702075702020202020202020004C6F6FA9
:1008B0007020646F776E092020202000004C6F6F3D
:1008C00070206C656674202020202020004C6F6F03
:1008D0007020726967687420202020200048F66824
:1008E000656E7265676C6572202020200048F6688E
:1008F000656E736368616C74657220200048656181
:1009000064686F6C6409090000000000004B6F6DA3
:10091000706173730909000000000000004B6F6DE7
:1009200070617373466978090900000000475053ED
:100930000909090000000000000000000041636890
:1009400073656E6B6F70706C756E672000447265B6
:10095000687261746509090000000000004E696357
:100960006B202020202020202020202000526F6C8F
:100970006C20202020202020202020200047617390
:1009800020202020202020202020202000476965D2
:1009900072090909000000000000000000506F7497
:1009A00069310909090000000000000000506F745F
:1009B00069320909090000000000000000506F744E
:1009C00069330909090000000000000000506F743D
:1009D00069340909090000000000000000436F6E3F
:1009E00066696709090900000000000000486F659A
:1009F00068655F4D696E476173202020004C756605
:100A000074647275636B5F4420202020004D617810
:100A1000486F6568652020202020202000486F65F1
:100A200068655F50202020202020202000486F652E
:100A300068655F56657273746165726B00486F65B7
:100A400068655F4143435F5769726B2E0053746959
:100A5000636B5F50202020202020202000537469E9
:100A6000636B5F4420202020202020200047696500
:100A7000725F50202020202020202020004761731A
:100A80005F4D696E202020202020202000476173C8
:100A90005F4D61782020202020202020004779729F
:100AA0006F41636346616B746F720900004B6F6D39
:100AB000706173735769726B756E67200047797246
:100AC0006F5F5020090900000000000000477972A4
:100AD0006F5F4909090900000000000000556E74AD
:100AE00065727370616E6E756E672020004E6F7454
:100AF000476173090909000000000000004E6F748F
:100B00004761735A65697420202020200055666F64
:100B10004175737269636874756E672000495F463A
:100B2000616B746F72202020202020200055736597
:100B300072506172616D31090900000000557365E2
:100B400072506172616D32090900000000557365D1
:100B500072506172616D33090900000000557365C0
:100B600072506172616D34090900000000536572B2
:100B7000766F4E69636B4374726C09000053657243
:100B8000766F4E69636B436F6D7009000053657239
:100B9000766F4E69636B4D696E0900000053657294
:100BA000766F4E69636B4D61780900000053657282
:100BB000766F4E69636B526566727368004C6F6F37
:100BC000704761734C696D6974090000004C6F6F68
:100BD000705468726573686F6C640900004C6F6FC5
:100BE00070487973746572657365090000416368C4
:100BF000734B6F70706C756E67090000004163681D
:100C000073476567656E4B6F70706C2E0057696E29
:100C10006B6C556D7363686C4E69636B0057696EDE
:100C20006B6C556D7363686C526F6C6C00477972B6
:100C30006F4163634162676C656963680044726910
:100C400066746B6F6D700909000000000044796ED6
:100C5000616D696353746162696C69740055736591
:100C600072506172616D35090900000000557365AD
:100C700072506172616D360909000000005573659C
:100C800072506172616D370909000000005573658B
:100C900072506172616D380909000000004C6F6F7D
:100CA00070436F6E66696709090000000053657242
:100CB000766F4E69636B436F6D70496E000D0A4E1F
:100CC00069636874206765737065696368657274C9
:100CD000000D0A506172616D6574657220676573FD
:100CE0007065696368657274000D0A2D2D2D3E00D4
:100CF000506172616D6574657220737065696368B7
:100D000065726E3F0D0A20206A610D0A20206E6513
:100D1000696E0054696D656F75740020353A0D0A6F
:100D20000020343A0D0A0020333A0D0A0020323AEE
:100D30000D0A0020313A0D0A004C616465205061B3
:100D400072616D657465720D0A002D002D002D0015
:100D5000457869740D0A00526563687465636B0DAC
:100D60000A004C696E69650D0A004F7269656E7400
:100D7000696572756E670D0A000D0A0045696E732C
:100D800074656C6C756E67656E3A0D0A00202020E4
:100D90002020202020202020202020202020202053
:100DA00020000D0A54696D656F757421000D0A5499
:100DB000696D656F7574210044656275672D4469BE
:100DC00073706C61790011241FBECFE5D8E0DEBFDF
:100DD000CDBF10E0A0E6B0E0ECE6FDE202C0059079
:100DE0000D92A036B107D9F717E0A0E6B0E001C038
:100DF0001D92A03DB107E1F70E94FE0D0C94B516BF
:100E00000C940000782F52E060E026C0E52FFF2709
:100E1000E951FB4F21812D5332813D5343814D5385
:100E20005C5FDC01AD59BB4F80818D53880F880F0B
:100E3000922F92959F70892B8C932295207F832FE0
:100E400086958695282BFD0121833295330F330F2C
:100E5000307C342B32836D5F862F99275717B0F281
:100E600008950F931F93B82F809163048093E70434
:100E7000809164048093E804809165048093E90480
:100E8000A3E073E035C0E72FFF27ED59FB4F8081CA
:100E9000418162817D5FEA2FFF27E951FB4F282FB7
:100EA00026952695235C208355279927837090707B
:100EB00024E0880F991F2A95E1F79A0104E03695FE
:100EC00027950A95E1F7822B835C81834F705070E0
:100ED000440F551F440F551F862F82958695869582
:100EE0008370842B835C82836F73635C6383AC5FEA
:100EF0007B1748F290E020E030E008C0E92FFF27A0
:100F0000E951FB4F8081280F311D9F5F9A17B1F780
:100F10003F70EA2FFF27E951FB4FC90136E0969554
:100F200087953A95E1F7835C80832F73235C218357
:100F30008DE0828313820A2F0D5F10E008C0E12F3D
:100F4000FF27E951FB4F80810E94E3121F5F1017BA
:100F5000B1F71F910F9108951F9384E180936B0562
:100F60000E94BE12833221F080916B058823C1F765
:100F700080916B05882319F481E090E017C00E94EE
:100F8000BE128093E70411E00AC00E94BE12E12F56
:100F9000FF27E951FB4F80831F5F17FD1FE78D304F
:100FA000A1F7812F0E94020780E090E01F91089531
:100FB0001F93CF93DF93CDB7DEB761970FB6F89449
:100FC000DEBF0FBECDBF182F83E28093630481E69E
:100FD0008093640480936504109366041092670400
:100FE0001092680486E00E9431070E94AC0780914D
:100FF000E8048134D1F7E3E6F4E0DE011196819153
:101000008D9384E0E337F807D1F7198A177020E051
:10101000AE014F5F5F4F612F80E00E94FC0A619636
:101020000FB6F894DEBF0FBECDBFDF91CF911F91F9
:1010300008959F92AF92BF92CF92DF92EF92FF926C
:101040000F931F93CF93DF93CDB7DEB761970FB6A2
:10105000F894DEBF0FBECDBF0E945A099924A92C77
:10106000BB2453E0AA0CBB1C5A95E1F7FA2C00E014
:1010700010E08F2D800F0E94D8070F5F1F4F0830A0
:101080001105B9F70E94AC078091E804843489F512
:101090007501EE0CFF1C85E694E0E80EF91ECC24E9
:1010A000DD248E010F5F1F4FF70120818181992779
:1010B000982F88274AE050E0B801820F911D0E94C6
:1010C000271620E044E550E06C2D8EE00E94C60A11
:1010D00020E0A8016C2D8EE00E94FC0A0894C11C3F
:1010E000D11C82E090E0E80EF91E98E0C916D10408
:1010F000C1F680916E05882329F280916E058130BA
:1011000009F4939480916E05823009F49A94809149
:101110006E05883019F0E3E09E22A1CF61960FB6EC
:10112000F894DEBF0FBECDBFDF91CF911F910F911D
:10113000FF90EF90DF90CF90BF90AF909F90089579
:101140001F9393E29093630491E69093640498E66E
:10115000909365048093660410926704109268046B
:1011600086E00E94310710E00E94AC07813009F44C
:101170001AE01F5F8091E8048053853018F01A3020
:1011800098F304C080E090E01A3010F081E090E025
:101190001F9108951F93CF93DF93CDB7DEB72A97A2
:1011A0000FB6F894DEBF0FBECDBF0E945A0960E0B3
:1011B00086E690E00E94980A80916E058823E1F708
:1011C0000E94A008813069F460E08BE590E00E9405
:1011D000980A88EC80936B0580916B05882369F1F0
:1011E000FBCF1091E80419831A8220E0AE014F5F13
:1011F0005F4F60E08AE00E94FC0A1F5F20E043E648
:1012000054E0612F80E00E94FC0A8AE080936B0525
:1012100080916B058823E1F780916E05813011F490
:101220000E94A00880916E05823011F40E94A008EF
:1012300080916E05843009F0BFCF2A960FB6F894DE
:10124000DEBF0FBECDBFDF91CF911F910895C4982F
:101250008FB9779BFECF8EB18EB9C49A08951F9334
:10126000CF93DF93E2E6F0E0119284E0E236F807F4
:10127000D9F710EBC398812F0E94270980E10E94C3
:101280002709809161000E942709C39AC0E0D0E03D
:1012900080E00E9427092196C038D105C9F71F5F59
:1012A000183B41F71092690510926A05DF91CF91C2
:1012B0001F9108950E942F09089583E397E00197F5
:1012C000F1F708950F931F93CF93DF938C01C0E044
:1012D000D0E003C00E945D092196C017D107D1F765
:1012E000DF91CF911F910F9108951092690510928F
:1012F0006A058FEF87BB8EE58DB9C49AC2988AE0E4
:1013000090E00E946209C29AC498C39880E40E9447
:10131000270980916100882329F481EA0E94270926
:1013200080EC04C080EA0E94270988EC0E9427090B
:1013300086EA0E94270982EA0E9427098FE20E941A
:10134000270988EF0E94270980E00E94270987E289
:101350000E94270981E80E94270986E10E94270947
:101360008CEA0E94270980E00E9427098FEA0E94E8
:1013700027090E942F090895FF920F931F938C0154
:10138000F62EC398880F892F881F990B9195805549
:101390000E942709809161000F77080F802F8295A6
:1013A0008F70805F0E942709802F8F700E9427090D
:1013B000C39A8F2D0E9427091F910F91FF900895C6
:1013C000EF92FF920F931F93CF93DF93C0E0D0E093
:1013D00002E610E032EEE32E30E0F32EF7018191C9
:1013E0007F01F801808361918F01CE010E94BC09C9
:1013F0002196F3E0C038DF0789F702EE13E0F80129
:1014000011928F0160E0CE010E94BC092196F4E0A8
:10141000C030DF07A1F7DF91CF911F910F91FF90AF
:10142000EF900895CF92DF92EF92FF920F931F9368
:10143000CF93DF93D22E4F3D81F0403E38F4463DAE
:10144000B1F04C3DB1F0443CA9F40FC0463F49F027
:101450004C3F49F0443E71F402C041EE0BC044E8F9
:1014600009C044E907C041E805C04EE803C049E9A6
:1014700001C04AE9062F11271695102F002717954E
:10148000079526E0829FC0011124080F191F1370D1
:10149000429F700111248EE690E0E80EF91ECC24E4
:1014A000E801CE59DF4FF7019491F2E0DF16A1F089
:1014B000FD1530F0DD2059F081E0D816B1F409C0F7
:1014C000E3E0DE1661F0F4E0DF1679F40AC09883F9
:1014D0000CC08881892B08C08881892705C0888134
:1014E00002C088819095892388836991C8010E94F0
:1014F000BC09C3940894E11CF11C0F5F1F4F86E0E8
:10150000C81689F6DF91CF911F910F91FF90EF9050
:10151000DF90CF90089580916A058F5F80936A0570
:10152000883028F00E94E00987E080936A050895DA
:101530001F93CF93DF93EC01162F20C04032A0F011
:101540002196212F60916A05809169050E94120AF7
:10155000809169058F5F80936905853178F01092DD
:1015600069050E948B0A0AC04A3029F04D3029F4DF
:101570001092690502C00E948B0A2196FE014491D7
:101580004423E1F6DF91CF911F910895809369057F
:1015900060936A05622FCA010E94980A08951F93FA
:1015A000CF93DF93EC01162F20C04032A0F021969C
:1015B000212F60916A05809169050E94120A80912D
:1015C00069058F5F80936905853178F01092690510
:1015D0000E948B0A0AC04A3029F04D3029F410923B
:1015E000690502C00E948B0A219648814423E9F6CE
:1015F000DF91CF911F9108958093690560936A05EB
:10160000622FCA010E94CF0A0895982F87FD39C022
:101610006034B8F5862F869586958695282F3327D2
:101620003695322F222737952795290F311D677060
:1016300081E090E001C0880F6A95EAF7682F337067
:10164000413061F0413018F04230A1F40DC0F90191
:10165000EE59FF4F8081609586230BC0F901EE594A
:10166000FF4F8081862B05C0F901EE59FF4F808125
:1016700086278083F901EE59FF4F6081C9010E94DE
:10168000BC0908952F923F924F925F926F927F9282
:101690008F929F92AF92BF92CF92DF92EF92FF9282
:1016A0000F931F93CF93DF93CDB7DEB728970FB675
:1016B000F894DEBF0FBECDBF8D83162F0E83682E2C
:1016C0007724862E9924842F99279C838B838619CF
:1016D0009709E22FFF27FA83E9839F012819390927
:1016E00097FF04C0FFEF2F2E3F2E07C040E050E0D1
:1016F000009711F041E050E01A0137FF04C0EFEF0E
:101700004E2E5E2E08C040E050E02115310511F04C
:1017100041E050E02A016C0197FF04C0D094C194CD
:10172000D108D394790137FF04C0F094E194F10813
:10173000F3944E81682D862D0E94050BEC14FD0458
:101740007CF5C60162E070E00E948E1644275527A2
:10175000461B570B58874F83A22CB62CB20C5D81C9
:10176000052F112717C08F8198858E0D9F1D988793
:101770008F831816190634F4840C951C8C199D0956
:1017800098878F834E81682D8B2D0E94050B020D4B
:10179000131DBA0CEB81FC810E171F0721F72DC01A
:1017A000C70162E070E00E948E1644275527461B51
:1017B000570B58874F83A42CB82CB40C012F11273A
:1017C00017C08F8198858C0D9D1D98878F83181663
:1017D000190634F4620C731C8E199F0998878F8345
:1017E0004E816B2D862D0E94050B040D151DBA0C24
:1017F000E981FA810E171F0721F728960FB6F89492
:10180000DEBF0FBECDBFDF91CF911F910F91FF9033
:10181000EF90DF90CF90BF90AF909F908F907F9090
:101820006F905F904F903F902F900895BF92CF920E
:10183000DF92EF92FF920F931F93CF93DF93182FB6
:10184000B02E87FD1FE7603408F06FE37727CB01E8
:10185000820F911D9C01812F840F912D911D6C0190
:1018600091E8C916D10418F0B0E8CB2ED12C79013B
:101870002134310518F0A0E4EA2EF12CEB0108C068
:101880000B2D2C2F4C2D6C2F812F0E94420B21965B
:10189000EC16FD06A8F7DF91CF911F910F91FF90F5
:1018A000EF90DF90CF90BF900895CF92DF92EF92AC
:1018B000FF920F931F93CF93DF93D82EC02E87FFF5
:1018C00002C08FE7D82E162F603408F01FE3812F57
:1018D000820F912D911DEC018D2D840F912D911D65
:1018E0007C0191E8E916F10418F000E8E02EF12CF3
:1018F0000C2D212F4E2D612F8D2D0E94420BC134B6
:10190000D10510F0C0E4D0E00C2D2C2F4E2D612F0E
:101910008E2D0E94420B2C2F4D2D6C2F8E2D0E9450
:10192000420B212F4D2D6C2F8D2D0E94420BDF91EC
:10193000CF911F910F91FF90EF90DF90CF9008957E
:101940002F923F924F925F926F927F928F929F92CF
:10195000AF92BF92CF92DF92EF92FF920F931F93BD
:10196000CF93DF93CDB7DEB724970FB6F894DEBFE1
:101970000FBECDBF8C016B017A01A22E21E030E0B9
:10198000241B350B3C832B83CA01880F991F6624C7
:101990007724681A790A462E502E640F4A2D802F1C
:1019A0000E94050B6C2D6E194A2D802F0E94050B8D
:1019B0004A2D6C2D802F8E0D0E94050B4A2D6C2D0B
:1019C000802F8E190E94050B4701222433241A828E
:1019D000198258C08B819C8197FD0BC008948108A7
:1019E0009108E2E0F0E06E0E7F1E860D971D9C834D
:1019F0008B830894211C311C29813A812E5F3F4F33
:101A00003A8329838B819C810196820F931F9C834B
:101A10008B83142D180DD52CD20C4A2D612F8D2DB2
:101A20000E94050BE52CE2184A2D612F8E2D0E9495
:101A3000050B142D18194A2D612F8D2D0E94050BB1
:101A40004A2D612F8E2D0E94050B142D120DE52CB1
:101A5000E80C4A2D612F8E2D0E94050B952D9819AB
:101A6000092F4A2D612F892F0E94050B142D121961
:101A70004A2D612F8E2D0E94050B4A2D612F802F3C
:101A80000E94050B281439040CF4A4CF24960FB639
:101A9000F894DEBF0FBECDBFDF91CF911F910F91A4
:101AA000FF90EF90DF90CF90BF90AF909F908F907E
:101AB0007F906F905F904F903F902F9008952F925E
:101AC0003F924F925F926F927F928F929F92AF92CE
:101AD000BF92CF92DF92EF92FF920F931F93CF931B
:101AE000DF936B017A0151E0A52EB12CAE18BF082F
:101AF0009701220F331F88249924821A930A662E95
:101B0000782E262F2E196E0D01E0482F0E94420BD1
:101B1000472D4E192C2D6C2D872D8E0D0E94420BBA
:101B2000E70144245524222433243AC0B7FC07C0DB
:101B3000219782E090E0880E991EA80CB91C0894A9
:101B4000411C511C82E090E0280E391E0894A11C13
:101B5000B11CA20CB31C1C2F662D6C0FE72CE418D3
:101B6000D72CD40C01E0262F4E2D8D2D0E94420B38
:101B7000662D6C1B262F4E2D8D2D0E94420B662D3F
:101B8000640DE72CEC1A170D262F4E2D812F0E9485
:101B9000420B662D6419262F4E2D812F0E94420B79
:101BA0004C165D061CF2DF91CF911F910F91FF90B3
:101BB000EF90DF90CF90BF90AF909F908F907F90ED
:101BC0006F905F904F903F902F900895A2E0B0E00B
:101BD0000E94A116802D992780936100089581E0CD
:101BE00021E030E0D901082E0E94A91680E02F5F85
:101BF0003F4FD901082E0E94A91608958FEF8BBB85
:101C000083E488BB8CEF85BB8CE782BB83E084BB1D
:101C100080E881BB21E030E0D9010E94A116802D2F
:101C2000813071F081E0D901082E0E94A91680E070
:101C30002F5F3F4FD901082E0E94A9162150304036
:101C40002F5F3F4FD9010E94A116802D99278093C5
:101C500061000E9475090E94B9120E9430137894A5
:101C60000E94870EFDCF0F931F93062F142F20E0A5
:101C70004DEF56E0682F812F0E94C60A20E04BEFFF
:101C800056E0602F812F0E94C60A1F910F91089580
:101C9000EF92FF920F931F93082FE62EF42E682FDA
:101CA0000E94330E102F912F80916E058823E1F74B
:101CB00080916E058823E1F380916E05823019F4DE
:101CC0001E1508F41F5F80916E05813019F401170D
:101CD00008F411504F2D612F892F0E94330E8091EF
:101CE0006E05883021F080916E058430E1F6809198
:101CF0006E05843009F41FEF80916E058823E1F7AB
:101D0000812F99271F910F91FF90EF9008950E94C6
:101D10005A0960E084EE96E00E94980A60E08DEC3B
:101D200096E00E94980A60E080EC96E00E94980A93
:101D300060E081EB96E00E94980A60E082EA96E01B
:101D40000E94980A60E081E996E00E94980A60E0AB
:101D500083E896E00E94980A60E08EE696E00E9492
:101D6000980A4FE066E082E00E94480E843091F0CD
:101D7000853028F4823041F08330A1F408C08530EA
:101D800061F0863079F40CC00E94CA0808950E9460
:101D9000E41108950E94D30E08950E94311508950C
:101DA0000E944E1308950E945A0980916E0588235F
:101DB000E1F760E08FEF96E00E94980A80916E054F
:101DC0008823E1F380916E058830C9F483E2809323
:101DD000630481E68093640484E7809365048AE069
:101DE00080936604809367048093680480936904F9
:101DF00010926A0410926B0489E00E94310780916E
:101E00006E058823E1F780916E058823E1F383E274
:101E10008093630481E68093640484E7809365047F
:101E2000109266041092670410926804109269047C
:101E300010926A0410926B0489E00E9431070895A1
:101E4000FB0120E030E0482F552761E0CA01022E57
:101E500002C0959587950A94E2F780FF02C06083DF
:101E600001C010822F5F3F4F31962830310571F746
:101E7000089540E020E030E061E070E0FC018191F5
:101E8000813041F4CB01022E02C0880F991F0A94C1
:101E9000E2F7480F2F5F3F4F2830310581F7842F3D
:101EA00099270895482FFB0164E60E946E168083EF
:101EB00024E6829FC0011124481B842F6AE00E94FF
:101EC0006E162AE0829F90011124421B405D4283DE
:101ED0009081905D9083805D8183903329F490E2BE
:101EE0009083803309F4918313820895CF92DF9217
:101EF000EF92FF920F931F93CF93DF93CDB7DEB78F
:101F000062970FB6F894DEBF0FBECDBF823008F4E3
:101F100055C0615044E080E00E94480EC82E8FEF0B
:101F2000C81609F421C1EC2CFF24F701EA54F84F3C
:101F3000E081FF27ED59FB4FD08020E04EE45DE0CB
:101F40006C2D84E00E94C60A80916E058823E1F71B
:101F500080916E05813009F4DA9480916E058230AB
:101F600009F4D3948E01075F1F4FB8018D2D0E9495
:101F7000520F20E0A8016C2D80E00E94FC0A84E151
:101F800080936B0580916B058823E1F780916E0546
:101F9000843021F080916E058830D1F680916E05F5
:101FA000883009F0E1C0A6EBB7E0EA0EFB1ED701CE
:101FB000EC91FF27ED59FB4FD082D6C0813009F05C
:101FC00069C08E010F5F1F4FB801809197040E9476
:101FD000200F1A8644E063E080E00E94480ED82E6D
:101FE000BFEF8B1709F4C0C0E82EFF240E0D1F1D94
:101FF000F801008120E04CE45DE0682F84E00E945D
:10200000C60A80916E05813009F400E080916E056A
:10201000823009F401E0005D0987005320E0AE0141
:10202000475F5F4F6D2D80E00E94FC0A84E1809342
:102030006B0580916B058823E1F780916E058830F0
:1020400021F080916E058430E1F680916E05883034
:1020500051F4CE010196E80EF91ED7010C930E94AF
:10206000390F809397040E945A098E01075F1F4F12
:10207000B801809197040E94520F60E0C8010E944D
:10208000CF0A88EC80936B0580916B05882309F457
:102090006BC0FACF882309F067C08E010F5F1F4F16
:1020A000B80180916B040E94200F1A8644E067E01B
:1020B00080E00E94480ED82EBFEF8B1709F454C061
:1020C000E82EFF240E0D1F1DF801008120E04AE4D8
:1020D0005DE0682F84E00E94C60A80916E05813021
:1020E00009F400E080916E05823009F401E0005DA2
:1020F0000987005320E0AE01475F5F4F6D2D80E000
:102100000E94FC0A84E180936B0580916B05882313
:10211000E1F780916E05883021F080916E05843062
:10212000E1F680916E05883051F4CE010196E80EFB
:10213000F91ED7010C930E94390F80936B040E9403
:102140005A098E01075F1F4FB80180916B040E94EE
:10215000520F60E0C8010E94CF0A88EC80936B05A3
:1021600080916B058823E1F762960FB6F894DEBF85
:102170000FBECDBFDF91CF911F910F91FF90EF90D8
:10218000DF90CF9008956F927F928F929F92AF923F
:10219000BF92CF92DF92EF92FF920F931F93CF9354
:1021A000DF93CDB7DEB7A1970FB6F894DEBF0FBEB1
:1021B000CDBFE82E81E08E1508F044C048EDA42E76
:1021C00047E0B42E3DE5632E39E0732EFF24CC2486
:1021D000DD2423E6822E24E0922EF50184918E15D3
:1021E000E9F4EF2DFF27EA54F84FC0828E01075F14
:1021F0001F4FB801F40180810E94520F20E0A80116
:102200006F2D80E00E94FC0A20E0A3016F2D85E085
:102210000E94C60AF7E0FF1508F0F3940894C11C69
:10222000D11C83E090E0A80EB91E0894811C911C7B
:10223000E0E1F0E06E0E7F1EF2E4CF16D10409F467
:1022400063C0CBCF81E0E81679F58E010F5F1F4F99
:10225000B801809197040E94200F1A869DE9A92E4B
:1022600098E0B92E6801CE0101961C2D181BF601CD
:1022700081916F01805D898720E0AE01475F5F4FEC
:10228000612F80E00E94FC0A20E0A501612F85E01B
:102290000E94C60A80E190E0A80EB91ECE01059604
:1022A000C816D90681F1DFCFEE2069F58E010F5FE8
:1022B0001F4FB80180916B040E94200F1A8668019D
:1022C0008DEDA82E88E0B82ECE010196FC2CF81AD0
:1022D000F60181916F01805D89878E01075F1F4F35
:1022E00020E0A8016F2D80E00E94FC0A20E0A501FB
:1022F0006F2D85E00E94C60A80E190E0A80EB91E0D
:10230000C016D10609F7FF248F2D9927A1960FB685
:10231000F894DEBF0FBECDBFDF91CF911F910F911B
:10232000FF90EF90DF90CF90BF90AF909F908F90F5
:102330007F906F900895982F8630D8F426E430E08F
:10234000E9EAF4E0808183832150304031978FEFB8
:102350002F3F3807B9F783E28093630481E68093C7
:1023600064049559909365041092AD048BE40E9427
:10237000310708951F9393E29093630491E690933D
:10238000640491E790936504809366041092670457
:102390001092680486E00E94310710E00E94AC07AA
:1023A000813009F41EE11F5F8091E8048C54853070
:1023B00018F01E3198F304C080E090E01E3110F058
:1023C00081E090E01F910895FF920F931F93CF93A8
:1023D000DF93CDB7DEB72F970FB6F894DEBF0FBEF1
:1023E000CDBF0E945A0960E089E39DE00E94980AEF
:1023F00060E083E39DE00E94980A60E08DE29DE04A
:102400000E94980A60E087E29DE00E94980A60E0DE
:1024100081E29DE00E94980A60E08BE19DE00E94CD
:10242000980A40E065E081E00E94480E0E94BA11DF
:10243000813041F420E043E15DE066E080E00E940D
:10244000C60A62C062E0F62E0E945A098E010F5F32
:102450001F4F4AE050E0B8018F2D99270E9448167F
:1024600060E0C8010E94CF0A82E380936B058091EF
:102470006B058823E1F70E945A098F2D0E94C31033
:10248000682F80916E058823E1F380916E0582307C
:1024900009F4F39480916E05813009F4FA948FEF7A
:1024A000F81619F45CE0F52E04C08CE08F1508F4E2
:1024B000FF2480916E05883019F48F2D0E94760FCD
:1024C00080916E05843009F0BFCF0E945A0960E008
:1024D00080EF9CE00E94980A40E062E081E00E9468
:1024E000480E813061F460E089EE9CE00E94980A19
:1024F00085E00E949B1160E081ED9CE003C060E0FC
:102500008DEB9CE00E94980A84E680936B05809195
:102510006B058823E1F72F960FB6F894DEBF0FBE48
:10252000CDBFDF91CF911F910F91FF9008951F9222
:102530000F920FB60F9211248F939F93EF93FF93F7
:102540008091BE079CB1E0ECF7E0E80FF11D9083AD
:102550008F5F8093BE078091BE078F708093BE0708
:10256000FF91EF919F918F910F900FBE0F901F9051
:10257000189588E98AB987E089B908958AE0809337
:102580006D059091BF078091BE07981721F4809147
:102590006D058823B1F780916D05882311F4E0E083
:1025A0000FC08091BF07E82FFF27E054F84FE0816C
:1025B0008F5F8093BF078091BF078F708093BF07A5
:1025C0008E2F992708955D9BFECF8CB90895FC014D
:1025D00004C05D9BFECF8CB9319680818823C9F7FA
:1025E00008951F920F920FB60F9211248F939F930D
:1025F00080916C05882331F080916C058150809327
:102600006C0515C08AE080936C0589B39927809585
:102610009095689413F8959587951694E1F78F70C7
:1026200080936E0580916F058F5F80936F05809119
:102630006B05882329F080916B05815080936B0591
:1026400080916D05882329F080916D0581508093DC
:102650006D059F918F910F900FBE0F901F90189551
:102660008DE083BF88E48CBF89B7826089BF0895FD
:10267000F89480916100882321F484E080936100C4
:1026800002C01092610080916100A2E0B0E0082ECB
:102690000E94A9160E947509789408950F931F93BC
:1026A00011E00E945A0960E08CE79DE00E94980AC0
:1026B00060E089E79DE00E94980A60E08AE69DE07C
:1026C0000E94980A60E082E69DE00E94980A60E01D
:1026D00087E59DE00E94980A60E080E59DE00E9409
:1026E000980A4FE065E082E00E94480E833049F08E
:1026F0008430C9F0823011F010E026C00E943813F7
:1027000023C00E945A0901E022E344E664E18AE022
:102710000E94420B80916E058830B1F080916E0569
:10272000843091F0F7CF0E945A0901E028E244E694
:1027300064E18AE00E94550C80916E05883021F09A
:1027400080916E058430C1F7112309F0AACF1F9143
:102750000F910895CF93DF93EC0152E070E026C013
:10276000E52FFF27E951FB4F21812D5332813D5346
:1027700043814D535C5FDE01A80FB91F80818D53EB
:10278000880F880F922F92959F70892B8C9322959A
:10279000207F832F86958695282BFD0121833295F6
:1027A000330F330F307C342B32837D5F872F992793
:1027B0005617B0F2DF91CF9108954F925F926F92CA
:1027C0007F928F929F92AF92BF92CF92DF92EF92C1
:1027D000FF920F931F93CF93DF93FC01EB0180E2F5
:1027E000888340E8E130F40718F46624772408C0B1
:1027F000F095E195FF4F8DE2888351E0652E712CB5
:102800002E010894411C511CCF0160E177E20E9427
:102810007A168B01262F332780E197E2BC01269F91
:10282000C001279F900D369F900D11249F01281BFA
:10283000390B42E0C42ED12CCC0EDD1EC90168EE4E
:1028400073E00E947A167B01462F552788EE93E0AD
:10285000FC014E9FC0014F9F900D5E9F900D112473
:10286000281B390B93E0A92EB12CAC0EBD1EC9015B
:1028700064E670E00E947A16FB0184E6689FC0015E
:102880001124281B390B84E0882E912C8C0E9D1E60
:10289000C9016AE070E00E947A168AE0689FC00170
:1028A0001124281B390B205D2D83005D0983F0E383
:1028B000EF0EEA82E05DEB83605D6C83003391F59F
:1028C00080E2888341E06416710409F48DE2898313
:1028D000F6018081803331F580E2F2018083F1E0FE
:1028E0006F16710409F48DE2F6018083F501808191
:1028F0008033C1F480E2F6018083F1E06F16710449
:1029000009F48DE2F5018083F4018081803351F474
:1029100080E2F5018083F1E06F16710409F48DE225
:10292000F40180831E82DF91CF911F910F91FF9060
:10293000EF90DF90CF90BF90AF909F908F907F905F
:102940006F905F904F9008950F931F93082F84E12D
:1029500080936B050E94BE12833221F080916B053B
:102960008823C1F780916B05882319F481E090E0FA
:1029700030C00E94BE128093E70411E00AC00E949A
:10298000BE12E12FFF27E951FB4F80831F5F17FD28
:102990001FE78D30A1F7023221F4612F80E795E027
:1029A0000AC0802F992774E0880F991F7A95E1F764
:1029B000612F8A549A4F0E94AA13E02FFF2764E0E8
:1029C000EE0FFF1F6A95E1F7EA54FA4F178680E091
:1029D00090E01F910F910895FF920F931F93F82E8F
:1029E00083E28093630481E68093640492E2F916A3
:1029F00071F483E680936504109266041092670474
:102A00001092680486E00E94310704E40FC09FE141
:102A10009F1520F080936504F0926604109267047D
:102A20001092680486E00E94310701E410E08F2DC7
:102A30000E94A414813009F41EE11F5F8091E80414
:102A4000801710F0081718F41E3188F304C080E0D6
:102A500090E01E3110F081E090E01F910F91FF9007
:102A600008954F925F927F928F929F92AF92BF9202
:102A7000CF92DF92EF92FF920F931F93CF93DF934A
:102A8000CDB7DEB72B970FB6F894DEBF0FBECDBF24
:102A90000E945A0960E088EB9DE00E94980A1B861C
:102AA00000E010E0802F0E94EC14813039F4802F78
:102AB0000E94EC14813011F421E02B870F5F1F4F2F
:102AC0000032110579F73B85313019F088249924BB
:102AD0000EC060E08DEA9DE00E94980A88EC809329
:102AE0006B0580916B05882309F49BC0FACF809118
:102AF0006E058823E1F782E20E94EC14813071F4C4
:102B000060E082EA9DE00E94980A88EC80936B0561
:102B100080916B05882309F484C0FACF8E010F5F82
:102B20001F4FB801C4010E94DD1320E0A80160E03E
:102B30008FE00E94FC0AC401B3E0880F991FBA9588
:102B4000E1F7881999096C01CC0CDD1CE2E7F5E08E
:102B5000CE0EDF1E7C01F4E0EE0CFF1CFA95E1F7CF
:102B600026EB35E0E20EF31E442455245C01742C60
:102B7000739430E2A316B104B4F48E010F5F1F4FBB
:102B8000B801F601808191810E94DD1320E0A70148
:102B9000672D80E00E94FC0A20E0A801672D8DE0EF
:102BA0000E94FC0A07C020E04DE85DE0672D80E050
:102BB0000E94C60A0894411C511C0894A11CB11C17
:102BC00022E030E0C20ED31E80E190E0E80EF91E54
:102BD00097E04916510459F68AE080936B0580917D
:102BE0006B058823E1F780916E05813039F40894F4
:102BF0008108910897FE02C08824992480916E056F
:102C0000823051F40894811C911CE8E08E169104E6
:102C10001CF0E7E08E2E912C80916E05843009F037
:102C200066CF2B960FB6F894DEBF0FBECDBFDF91F7
:102C3000CF911F910F91FF90EF90DF90CF90BF90B9
:102C4000AF909F908F907F905F904F900895FB0181
:102C50009F01E8944230C4F04532B4F44A3029F47C
:102C600097FB1EF4909581959F4F642F77270E94C4
:102C70007A16805D8A330CF0895D8193CB010097D1
:102C8000A1F716F45DE251931082C9010C945E160F
:102C9000FB019F01423074F0453264F4642F7727C2
:102CA0000E947A16805D8A330CF0895D8193CB0196
:102CB0000097A1F71082C9010C945E16DC01FC019B
:102CC000672F71917723E1F7329704C07C916D9360
:102CD00070836291AE17BF07C8F30895991B79E01E
:102CE00004C0991F961708F0961B881F7A95C9F79C
:102CF00080950895AA1BBB1B51E107C0AA1FBB1FEB
:102D0000A617B70710F0A61BB70B881F991F5A9577
:102D1000A9F780959095BC01CD01089597FB092EE8
:102D200007260AD077FD04D0E5DF06D000201AF48C
:102D3000709561957F4F0895F6F7909581959F4F17
:102D40000895E199FECFBFBBAEBBE09A11960DB2DC
:102D50000895E199FECFBFBBAEBB0DBA11960FB679
:0C2D6000F894E29AE19A0FBE0895FFCFAC
:00000001FF
/Transportables_Koptertool/tags/V-0.1.1/Spezial/MMT-Mega644-16.hex
0,0 → 1,732
:100000000C94F1060C940E070C940E070C940E073A
:100010000C940E070C940E070C940E070C940E070C
:100020000C940E070C940E070C940E070C940E07FC
:100030000C940E070C940E070C940E070C940E07EC
:100040000C940A130C940E070C940E070C940E07D4
:100050000C94A6120C940E070C940E070C940E0729
:100060000C940E070C940E070C940E070C940E07BC
:10007000202020202020000D0A54696D656F7574C2
:100080002100446973706C61790000000000000079
:100090003E5B4F5B3E003E6B4F6B3E001C3E7C3E2A
:1000A0001C00183C7E3C18001C577D571C001C5E31
:1000B0007F5E1C0000183C180000FFE7C3E7FF004C
:1000C000001824180000FFE7DBE7FF0030483A067D
:1000D0000E00262979292600407F05050700407F6C
:1000E00005253F005A3CE73C5A007F3E1C1C080097
:1000F000081C1C3E7F0014227F2214005F5F005FFB
:100100005F0006097F017F00006689956A006060D4
:100110006060606094A2FFA2940008047E0408005E
:1001200010207E20100008082A1C0800081C2A083D
:1001300008001E10101010000C1E0C1E0C00303891
:100140003E383000060E3E0E0600000000000000A3
:1001500000005F000000000700070000147F147F0C
:100160001400242A7F2A12002313086462003649EF
:1001700056205000000807030000001C2241000028
:100180000041221C00002A1C7F1C2A0008083E088F
:10019000080000807030000008080808080000000F
:1001A000606000002010080402003E5149453E00F6
:1001B00000427F4000007249494946002141494DB3
:1001C00033001814127F10002745454539003C4A7A
:1001D0004949310041211109070036494949360092
:1001E000464949291E000000140000000040340068
:1001F00000000008142241001414141414000041DB
:10020000221408000201590906003E415D594E00C2
:100210007C1211127C007F49494936003E41414120
:1002200022007F4141413E007F49494941007F0909
:10023000090901003E41415173007F0808087F0011
:1002400000417F4100002040413F01007F0814220F
:1002500041007F40404040007F021C027F007F043D
:1002600008107F003E4141413E007F090909060018
:100270003E4151215E007F0919294600264949491E
:10028000320003017F0103003F4040403F001F2038
:1002900040201F003F4038403F00631408146300B3
:1002A0000304780403006159494D4300007F414134
:1002B0004100020408102000004141417F00040277
:1002C00001020400404040404000000307080000D5
:1002D0002054547840007F28444438003844444433
:1002E0002800384444287F0038545454180000082B
:1002F0007E09020018A4A49C78007F0804047800FA
:1003000000447D4000002040403D00007F10284414
:10031000000000417F4000007C04780478007C08E5
:1003200004047800384444443800FC18242418009D
:1003300018242418FC007C08040408004854545471
:10034000240004043F4424003C4040207C001C2046
:1003500040201C003C4030403C0044281028440011
:100360004C9090907C004464544C4400000836410A
:100370000000000077000000004136080000020184
:10038000020402003C2623263C001EA1A1611200AB
:100390003A4040207A003854545559002155557937
:1003A0004100215454784100215554784000205494
:1003B000557940000C1E527212003955555559009E
:1003C0003954545459003955545458000000457C50
:1003D00041000002457D42000001457C4000791447
:1003E00012147900F0282528F0007C5455450000AF
:1003F0002054547C54447C0A097F4941324949497C
:100400003200324848483200324A484830003A41C7
:1004100041217A003A4240207800009DA0A07D0052
:100420003944444439003D4040403D003C24FF24D1
:100430002400487E494366002B2FFC2F2B00FF0928
:1004400029F62000C0887E09030020545479410019
:100450000000447D41003048484A32003840402284
:100460007A00007A0A0A72007D0D19317D00262972
:10047000292F280026292929260030484D40200010
:100480003808080808000808080838002F10C8AC09
:10049000BA002F102834FA0000007B000000081476
:1004A0002A14220022142A140800AA005500AA00C7
:1004B000AA55AA55AA5555AA55AA55AA000000FF43
:1004C0000000101010FF0000141414FF00001010A2
:1004D000FF00FF001010F010F000141414FC0000D6
:1004E0001414F700FF000000FF00FF001414F404D0
:1004F000FC00141417101F0010101F101F001414FC
:10050000141F0000101010F000000000001F101059
:100510001010101F1010101010F01010000000FF2D
:100520001010101010101010101010FF10100000FC
:1005300000FF14140000FF00FF1000001F1017142C
:100540000000FC04F4141414171017141414F40409
:10055000F4140000FF00F7141414141414141414E9
:10056000F700F71414141417141410101F101F1090
:10057000141414F414141010F010F01000001F10D4
:100580001F100000001F1414000000FC14140000D1
:10059000F010F0101010FF10FF10141414FF1414BA
:1005A0001010101F0000000000F01010FFFFFFFFF0
:1005B000FFFFF0F0F0F0F0F0FFFFFF0000000000A0
:1005C00000FFFFFF0F0F0F0F0F0F38444438440098
:1005D0007C2A2A3E14007E0202060600027E027E6B
:1005E00002006355494163003844443C0400407EA6
:1005F000201E200006027E02020099A5E7A59900B0
:100600001C2A492A1C004C7201724C00304A4D4D84
:100610003000304878483000BC625A463D003E49C0
:10062000494900007E0101017E002A2A2A2A2A0067
:1006300044445F44440040514A44400040444A51CD
:1006400040000000FF010300E080FF0000000808F8
:100650006B6B0808361236243600060F090F0600A9
:100660000000181800000000101000003040FF01CA
:100670000100001F01011E0000191D171200003C9F
:100680003C3C3C000000000000004D6F642062799B
:10069000204D696B656C6A6F2030352F3038002033
:1006A000202053657474696E67730D0A0020202042
:1006B000446562756720446174656E0D0A002020F0
:1006C000204D6F746F72746573740D0A00202020C2
:1006D000506172616D657465720D0A0020202044BE
:1006E0006973706C61790D0A00202048617570741F
:1006F0006D656EFC202856302E312E31290D0A00F2
:10070000506F727461626C6573204B6F70746572A8
:10071000746F6F6C0D0A002A0020005461737465B9
:10072000206472FC636B656E0D0A00436F6E666930
:100730006720202020004368616E6E656C73202066
:1007400000537469636B202020202000486F656887
:10075000652020202020004779726F202020202053
:1007600020004C6F6F70696E672020200043616D20
:100770006572612020202000536F6E737469676575
:100780007320005573657220202020202000436FC5
:1007900075706C696E67202000436F6E666967280C
:1007A000322920004C6F6F70696E677365740002A8
:1007B000020202020202020004040404040403030D
:1007C00003080808080505080808000509090909BB
:1007D0000707070707070606060A0A0606050505AE
:1007E0000909090900070B0B0B0B0C0C0C0C0C0C6A
:1007F0000C0C0108020108020108020108020108AC
:100800000201080201080201080200000000FF04C2
:1008100000FF0400FF0400FF0400320400FF040096
:10082000060300400300140300200821FA080032E8
:100830000800FF0800000500000500FA0800FA089B
:1008400000FA0800010000FF0500FF0900FF090091
:10085000FF0900FF0900FF0700FA0700FA0700FA86
:100860000700190700FF0600FA0600FA0600FF0A53
:1008700000FF0A00FA0600FA0600FA0500FA050071
:10088000FF0500FF0900FF0900FF0900FF09000044
:10089000010001070000000000000000000000004F
:1008A0000000000000000000000000000000000048
:1008B0000000000000000000004C6F6F7020757099
:1008C0002020202020202020004C6F6F7020646F9B
:1008D000776E092020202000004C6F6F70206C651F
:1008E0006674202020202020004C6F6F70207269D9
:1008F00067687420202020200048F668656E7265C5
:10090000676C6572202020200048F668656E73636E
:1009100068616C74657220200048656164686F6C62
:100920006409090000000000004B6F6D7061737373
:100930000909000000000000004B6F6D70617373C7
:100940004669780909000000004750530909090069
:1009500000000000000000000041636873656E6BDA
:100960006F70706C756E6720004472656872617498
:100970006509090000000000004E69636B2020201B
:10098000202020202020202000526F6C6C2020206E
:1009900020202020202020200047617320202020BC
:1009A00020202020202020200047696572090909A5
:1009B000000000000000000000506F746931090958
:1009C000090000000000000000506F74693209093E
:1009D000090000000000000000506F74693309092D
:1009E000090000000000000000506F74693409091C
:1009F000090000000000000000436F6E666967098F
:100A0000090900000000000000486F6568655F4D3F
:100A1000696E476173202020004C7566746472759E
:100A2000636B5F4420202020004D6178486F65682B
:100A3000652020202020202000486F6568655F50D9
:100A4000202020202020202000486F6568655F5608
:100A5000657273746165726B00486F6568655F41AC
:100A600043435F5769726B2E00537469636B5F5029
:100A7000202020202020202000537469636B5F44D5
:100A8000202020202020202000476965725F502010
:100A90002020202020202020004761735F4D696EB8
:100AA0002020202020202020004761735F4D6178A6
:100AB0002020202020202020004779726F4163638E
:100AC00046616B746F720900004B6F6D70617373D8
:100AD0005769726B756E6720004779726F5F50209F
:100AE0000909000000000000004779726F5F4909A2
:100AF000090900000000000000556E7465727370F3
:100B0000616E6E756E672020004E6F7447617309C9
:100B10000909000000000000004E6F744761735A1D
:100B200065697420202020200055666F417573721E
:100B300069636874756E672000495F46616B746F06
:100B40007220202020202020005573657250617291
:100B5000616D3109090000000055736572506172C2
:100B6000616D3209090000000055736572506172B1
:100B7000616D3309090000000055736572506172A0
:100B8000616D34090900000000536572766F4E698B
:100B9000636B4374726C090000536572766F4E6923
:100BA000636B436F6D70090000536572766F4E6919
:100BB000636B4D696E09000000536572766F4E6974
:100BC000636B4D617809000000536572766F4E6962
:100BD000636B526566727368004C6F6F7047617328
:100BE0004C696D6974090000004C6F6F7054687235
:100BF0006573686F6C640900004C6F6F704879739F
:100C0000746572657365090000416368734B6F70AA
:100C1000706C756E67090000004163687347656713
:100C2000656E4B6F70706C2E0057696E6B6C556DF6
:100C30007363686C4E69636B0057696E6B6C556DBE
:100C40007363686C526F6C6C004779726F416363B9
:100C50004162676C656963680044726966746B6FB2
:100C60006D700909000000000044796E616D6963D0
:100C700053746162696C6974005573657250617276
:100C8000616D35090900000000557365725061728D
:100C9000616D36090900000000557365725061727C
:100CA000616D37090900000000557365725061726B
:100CB000616D380909000000004C6F6F70436F6E62
:100CC000666967090900000000536572766F4E6916
:100CD000636B436F6D70496E000D0A4E69636874F3
:100CE000206765737065696368657274000D0A50EA
:100CF0006172616D657465722067657370656963A3
:100D000068657274000D0A2D2D2D3E0050617261D0
:100D10006D657465722073706569636865726E3F96
:100D20000D0A20206A610D0A20206E65696E00544C
:100D3000696D656F75740020353A0D0A0020343AEC
:100D40000D0A0020333A0D0A0020323A0D0A002025
:100D5000313A0D0A004C61646520506172616D6525
:100D60007465720D0A002D002D002D004578697400
:100D70000D0A00526563687465636B0D0A004C6967
:100D80006E69650D0A004F7269656E7469657275EA
:100D90006E670D0A000D0A0045696E7374656C6C10
:100DA000756E67656E3A0D0A0020202020202020F5
:100DB00020202020202020202020202020000D0A7C
:100DC00054696D656F757421000D0A54696D656F06
:100DD0007574210044656275672D446973706C6198
:100DE000790011241FBECFEFD0E1DEBFCDBF11E0EF
:100DF000A0E0B1E0E2EAFDE202C005900D92A03071
:100E0000B107D9F718E0A0E0B1E001C01D92A0370A
:100E1000B107E1F70E940D0E0C94D0160C9400005F
:100E2000782F52E060E026C0E52FFF27E957FA4F00
:100E300021812D5332813D5343814D535C5FDC0151
:100E4000AD5FBA4F80818D53880F880F922F929596
:100E50009F70892B8C932295207F832F8695869572
:100E6000282BFD0121833295330F330F307C342B37
:100E700032836D5F862F99275717B0F208950F932D
:100E80001F93B82F809103058093870580910405F7
:100E9000809388058091050580938905A3E073E020
:100EA00035C0E72FFF27ED5FFA4F808141816281D6
:100EB0007D5FEA2FFF27E957FA4F282F26952695C1
:100EC000235C2083552799278370907024E0880F36
:100ED000991F2A95E1F79A0104E0369527950A951E
:100EE000E1F7822B835C81834F705070440F551F54
:100EF000440F551F862F8295869586958370842B87
:100F0000835C82836F73635C6383AC5F7B1748F29F
:100F100090E020E030E008C0E92FFF27E957FA4FC2
:100F20008081280F311D9F5F9A17B1F73F70EA2F1C
:100F3000FF27E957FA4FC90136E0969587953A950C
:100F4000E1F7835C80832F73235C21838DE08283B0
:100F500013820A2F0D5F10E008C0E12FFF27E95729
:100F6000FA4F80810E94F5121F5F1017B1F71F9191
:100F70000F9108951F9384E180930B060E94D01275
:100F8000833221F080910B068823C1F780910B06F4
:100F9000882319F481E090E017C00E94D01280935A
:100FA000870511E00AC00E94D012E12FFF27E95700
:100FB000FA4F80831F5F17FD1FE78D30A1F7812F48
:100FC0000E94100780E090E01F9108951F93CF9337
:100FD000DF93CDB7DEB761970FB6F894DEBF0FBED3
:100FE000CDBF182F83E28093030581E6809304052B
:100FF00080930505109306051092070510920805C9
:1010000086E00E943F070E94BA07809188058134DC
:10101000D1F7E3E0F5E0DE01119681918D9385E053
:10102000E331F807D1F7198A177020E0AE014F5F5E
:101030005F4F612F80E00E940B0B61960FB6F89412
:10104000DEBF0FBECDBFDF91CF911F9108959F925C
:10105000AF92BF92CF92DF92EF92FF920F931F93C6
:10106000CF93DF93CDB7DEB761970FB6F894DEBFAD
:101070000FBECDBF0E9469099924A92CBB2453E05F
:10108000AA0CBB1C5A95E1F7FA2C00E010E08F2D5A
:10109000800F0E94E6070F5F1F4F08301105B9F758
:1010A0000E94BA0780918805843489F57501EE0C99
:1010B000FF1C85E095E0E80EF91ECC24DD248E01AE
:1010C0000F5F1F4FF701208181819927982F882773
:1010D0004AE050E0B801820F911D0E94421620E0C4
:1010E00040E750E06C2D8EE00E94D50A20E0A80178
:1010F0006C2D8EE00E940B0B0894C11CD11C82E069
:1011000090E0E80EF91E98E0C916D104C1F680916E
:101110000E06882329F280910E06813009F49394FB
:1011200080910E06823009F49A9480910E068830E0
:1011300019F0E3E09E22A1CF61960FB6F894DEBFCE
:101140000FBECDBFDF91CF911F910F91FF90EF9018
:10115000DF90CF90BF90AF909F9008951F9393E240
:101160009093030591E69093040598E69093050506
:1011700080930605109207051092080586E00E94EC
:101180003F0710E00E94BA07813009F41AE01F5FA0
:10119000809188058053853018F01A3098F304C088
:1011A00080E090E01A3010F081E090E01F91089507
:1011B0001F93CF93DF93CDB7DEB72A970FB6F8947E
:1011C000DEBF0FBECDBF0E94690960E082E890E0FB
:1011D0000E94A70A80910E068823E1F70E94AE08BC
:1011E000813069F460E087E790E00E94A70A88EC0C
:1011F00080930B0680910B06882369F1FBCF109139
:10120000880519831A8220E0AE014F5F5F4F60E0CE
:101210008AE00E940B0B1F5F20E043E055E0612F46
:1012200080E00E940B0B8AE080930B0680910B06F6
:101230008823E1F780910E06813011F40E94AE08F8
:1012400080910E06823011F40E94AE0880910E0645
:10125000843009F0BFCF2A960FB6F894DEBF0FBED8
:10126000CDBFDF91CF911F9108952C988EBD0DB405
:1012700007FEFDCF8DB58DBD2C9A08951F93CF939A
:10128000DF93E2E0F1E0119285E0E230F807D9F770
:1012900010EB2B98812F0E94350980E10E943509BF
:1012A000809101010E9435092B9AC0E0D0E080E0D6
:1012B0000E9435092196C038D105C9F71F5F183B38
:1012C00041F71092090610920A06DF91CF911F9103
:1012D00008950E943E09089580EA9FE00197F1F782
:1012E00008950F931F93CF93DF938C01C0E0D0E05C
:1012F00003C00E946C092196C017D107D1F7DF9176
:10130000CF911F910F9108951092090610920A062D
:101310008FEF84B98EE58CBD2C9A2A988AE090E0F4
:101320000E9471092A9A2C982B9880E40E94350912
:1013300080910101882329F481EA0E94350980EC1B
:1013400004C080EA0E94350988EC0E94350986EACB
:101350000E94350982EA0E9435098FE20E94350910
:1013600088EF0E94350980E00E94350987E20E94DB
:10137000350981E80E94350986E10E9435098CEA29
:101380000E94350980E00E9435098FEA0E943509E4
:101390000E943E090895FF920F931F938C01F62E31
:1013A0002B98880F892F881F990B919580550E9443
:1013B0003509809101010F77080F802F82958F707A
:1013C000805F0E943509802F8F700E9435092B9A0B
:1013D0008F2D0E9435091F910F91FF900895EF9274
:1013E000FF920F931F93CF93DF93C0E0D0E002E012
:1013F00011E032E8E32E31E0F32EF70181917F0115
:10140000F801808361918F01CE010E94CB09219662
:10141000F3E0C038DF0789F702E814E0F801119221
:101420008F0160E0CE010E94CB092196F4E0C0302C
:10143000DF07A1F7DF91CF911F910F91FF90EF9000
:101440000895CF92DF92EF92FF920F931F93CF9365
:10145000DF93D22E4F3D81F0403E38F4463DB1F04F
:101460004C3DB1F0443CA9F40FC0463F49F04C3F1D
:1014700049F0443E71F402C041EE0BC044E809C09B
:1014800044E907C041E805C04EE803C049E901C08E
:101490004AE9062F11271695102F00271795079553
:1014A00026E0829FC0011124080F191F1370429F6C
:1014B000700111248AE890E0E80EF91ECC24E801BE
:1014C000CE5FDE4FF7019491F2E0DF16A1F0FD153B
:1014D00030F0DD2059F081E0D816B1F409C0E3E026
:1014E000DE1661F0F4E0DF1679F40AC098830CC0D0
:1014F0008881892B08C08881892705C0888102C01E
:1015000088819095892388836991C8010E94CB09BD
:10151000C3940894E11CF11C0F5F1F4F86E0C816AE
:1015200089F6DF91CF911F910F91FF90EF90DF909F
:10153000CF90089580910A068F5F80930A068830C5
:1015400028F00E94EF0987E080930A0608951F9310
:10155000CF93DF93EC01162F20C04032A0F02196EC
:10156000212F60910A06809109060E94210A80912C
:1015700009068F5F80930906853178F0109209067D
:101580000E949A0A0AC04A3029F04D3029F410927C
:10159000090602C00E949A0A2196FE014491442342
:1015A000E1F6DF91CF911F91089580930906609332
:1015B0000A06622FCA010E94A70A08951F93CF93BB
:1015C000DF93EC01162F20C04032A0F02196212F8E
:1015D00060910A06809109060E94210A80910906FD
:1015E0008F5F80930906853178F0109209060E947A
:1015F0009A0A0AC04A3029F04D3029F4109209069F
:1016000002C00E949A0A219648814423E9F6DF919C
:10161000CF911F9108958093090660930A06622F67
:10162000CA010E94DE0A0895982F87FD39C06034F0
:10163000B8F5862F869586958695282F332736957B
:10164000322F222737952795290F311D677081E0AA
:1016500090E001C0880F6A95EAF7682F3370413037
:1016600061F0413018F04230A1F40DC0F901EE5F95
:10167000FE4F8081609586230BC0F901EE5FFE4F1F
:101680008081862B05C0F901EE5FFE4F80818627A1
:101690008083F901EE5FFE4F6081C9010E94CB0992
:1016A00008952F923F924F925F926F927F928F9206
:1016B0009F92AF92BF92CF92DF92EF92FF920F93E1
:1016C0001F93CF93DF93CDB7DEB728970FB6F8946B
:1016D000DEBF0FBECDBF8D83162F0E83682E7724FD
:1016E000862E9924842F99279C838B8386199709AA
:1016F000E22FFF27FA83E9839F012819390997FF11
:1017000004C0FFEF2F2E3F2E07C040E050E00097AF
:1017100011F041E050E01A0137FF04C0EFEF4E2E08
:101720005E2E08C040E050E02115310511F041E087
:1017300050E02A016C0197FF04C0D094C194D108F5
:10174000D394790137FF04C0F094E194F108F39445
:101750004E81682D862D0E94140BEC14FD047CF53F
:10176000C60162E070E00E94A91644275527461B77
:10177000570B58874F83A22CB62CB20C5D81052FD6
:10178000112717C08F8198858E0D9F1D98878F8395
:101790001816190634F4840C951C8C199D09988729
:1017A0008F834E81682D8B2D0E94140B020D131D0B
:1017B000BA0CEB81FC810E171F0721F72DC0C70162
:1017C00062E070E00E94A91644275527461B570B7C
:1017D00058874F83A42CB82CB40C012F112717C0A5
:1017E0008F8198858C0D9D1D98878F8318161906FB
:1017F00034F4620C731C8E199F0998878F834E8175
:101800006B2D862D0E94140B040D151DBA0CE98159
:10181000FA810E171F0721F728960FB6F894DEBF3E
:101820000FBECDBFDF91CF911F910F91FF90EF9031
:10183000DF90CF90BF90AF909F908F907F906F90F0
:101840005F904F903F902F900895BF92CF92DF927C
:10185000EF92FF920F931F93CF93DF93182FB02E29
:1018600087FD1FE7603408F06FE37727CB01820F15
:10187000911D9C01812F840F912D911D6C0191E888
:10188000C916D10418F0B0E8CB2ED12C790121343F
:10189000310518F0A0E4EA2EF12CEB0108C00B2D65
:1018A0002C2F4C2D6C2F812F0E94510B2196EC1662
:1018B000FD06A8F7DF91CF911F910F91FF90EF9058
:1018C000DF90CF90BF900895CF92DF92EF92FF927A
:1018D0000F931F93CF93DF93D82EC02E87FF02C0A4
:1018E0008FE7D82E162F603408F01FE3812F820F68
:1018F000912D911DEC018D2D840F912D911D7C0159
:1019000091E8E916F10418F000E8E02EF12C0C2D16
:10191000212F4E2D612F8D2D0E94510BC134D105E9
:1019200010F0C0E4D0E00C2D2C2F4E2D612F8E2D09
:101930000E94510B2C2F4D2D6C2F8E2D0E94510B80
:10194000212F4D2D6C2F8D2D0E94510BDF91CF91AA
:101950001F910F91FF90EF90DF90CF9008952F92FD
:101960003F924F925F926F927F928F929F92AF922F
:10197000BF92CF92DF92EF92FF920F931F93CF937C
:10198000DF93CDB7DEB724970FB6F894DEBF0FBE56
:10199000CDBF8C016B017A01A22E21E030E0241B27
:1019A000350B3C832B83CA01880F991F662477244B
:1019B000681A790A462E502E640F4A2D802F0E94F5
:1019C000140B6C2D6E194A2D802F0E94140B4A2D7A
:1019D0006C2D802F8E0D0E94140B4A2D6C2D802FA4
:1019E0008E190E94140B4701222433241A82198273
:1019F00058C08B819C8197FD0BC008948108910889
:101A0000E2E0F0E06E0E7F1E860D971D9C838B83B7
:101A10000894211C311C29813A812E5F3F4F3A8363
:101A200029838B819C810196820F931F9C838B83DA
:101A3000142D180DD52CD20C4A2D612F8D2D0E94FE
:101A4000140BE52CE2184A2D612F8E2D0E94140BE9
:101A5000142D18194A2D612F8D2D0E94140B4A2D1B
:101A6000612F8E2D0E94140B142D120DE52CE80C05
:101A70004A2D612F8E2D0E94140B952D9819092F38
:101A80004A2D612F892F0E94140B142D12194A2DF3
:101A9000612F8E2D0E94140B4A2D612F802F0E94E2
:101AA000140B281439040CF4A4CF24960FB6F89420
:101AB000DEBF0FBECDBFDF91CF911F910F91FF9081
:101AC000EF90DF90CF90BF90AF909F908F907F90DE
:101AD0006F905F904F903F902F9008952F923F927C
:101AE0004F925F926F927F928F929F92AF92BF922E
:101AF000CF92DF92EF92FF920F931F93CF93DF93DA
:101B00006B017A0151E0A52EB12CAE18BF089701E8
:101B1000220F331F88249924821A930A662E782E66
:101B2000262F2E196E0D01E0482F0E94510B472DD4
:101B30004E192C2D6C2D872D8E0D0E94510BE70117
:101B400044245524222433243AC0B7FC07C02197EB
:101B500082E090E0880E991EA80CB91C0894411CE4
:101B6000511C82E090E0280E391E0894A11CB11C83
:101B7000A20CB31C1C2F662D6C0FE72CE418D72C7D
:101B8000D40C01E0262F4E2D8D2D0E94510B662D79
:101B90006C1B262F4E2D8D2D0E94510B662D640D32
:101BA000E72CEC1A170D262F4E2D812F0E94510B7A
:101BB000662D6419262F4E2D812F0E94510B4C1635
:101BC0005D061CF2DF91CF911F910F91FF90EF9076
:101BD000DF90CF90BF90AF909F908F907F906F904D
:101BE0005F904F903F902F900895A2E0B0E00E9448
:101BF000BC16802D992780930101089581E021E092
:101C000030E0D901082E0E94C41680E02F5F3F4FBC
:101C1000D901082E0E94C41608958FEF82B983E47B
:101C200085B98CEF88B98CE78BB983E087B980E8F8
:101C30008AB921E030E0D9010E94BC16802D8130A4
:101C400071F081E0D901082E0E94C41680E02F5F58
:101C50003F4FD901082E0E94C416215030402F5FFB
:101C60003F4FD9010E94BC16802D99278093010116
:101C70000E9484090E94C9120E94491378940E940C
:101C8000960EFDCF0F931F93062F142F20E049E1EE
:101C900057E0682F812F0E94D50A20E047E157E0E6
:101CA000602F812F0E94D50A1F910F910895EF9206
:101CB000FF920F931F93082FE62EF42E682F0E9499
:101CC000420E102F912F80910E068823E1F780910C
:101CD0000E068823E1F380910E06823019F41E155A
:101CE00008F41F5F80910E06813019F4011708F483
:101CF00011504F2D612F892F0E94420E80910E06A8
:101D0000883021F080910E068430E1F680910E0635
:101D1000843009F41FEF80910E068823E1F7812FAC
:101D200099271F910F91FF90EF9008950E946909E4
:101D300060E080E097E00E94A70A60E089EE96E00C
:101D40000E94A70A60E08CED96E00E94A70A60E07E
:101D50008DEC96E00E94A70A60E08EEB96E00E9470
:101D6000A70A60E08DEA96E00E94A70A60E08FE98A
:101D700096E00E94A70A60E08AE896E00E94A70A1F
:101D80004FE066E082E00E94570E843091F085308B
:101D900028F4823041F08330A1F408C0853061F02E
:101DA000863079F40CC00E94D80808950E94F3117F
:101DB00008950E94E20E08950E944C1508950E9415
:101DC000691308950E94690980910E068823E1F73E
:101DD00060E08BE197E00E94A70A80910E068823BD
:101DE000E1F380910E068830C9F483E28093030505
:101DF00081E68093040584E7809305058AE080935B
:101E000006058093070580930805809309051092C5
:101E10000A0510920B0589E00E943F0780910E068B
:101E20008823E1F780910E068823E1F383E2809313
:101E3000030581E68093040584E7809305051092ED
:101E400006051092070510920805109209051092D8
:101E50000A0510920B0589E00E943F070895FB01D7
:101E600020E030E0482F552761E0CA01022E02C071
:101E7000959587950A94E2F780FF02C0608301C0C0
:101E800010822F5F3F4F31962830310571F708954A
:101E900040E020E030E061E070E0FC0181918130C1
:101EA00041F4CB01022E02C0880F991F0A94E2F779
:101EB000480F2F5F3F4F2830310581F7842F992736
:101EC0000895482FFB0164E60E948916808324E66A
:101ED000829FC0011124481B842F6AE00E9489164A
:101EE0002AE0829F90011124421B405D4283908131
:101EF000905D9083805D8183903329F490E290839C
:101F0000803309F4918313820895CF92DF92EF9288
:101F1000FF920F931F93CF93DF93CDB7DEB76297F6
:101F20000FB6F894DEBF0FBECDBF823008F455C0A7
:101F3000615044E080E00E94570EC82E8FEFC81613
:101F400009F421C1EC2CFF24F701EA5AF74FE08194
:101F5000FF27ED5FFA4FD08020E04AE65DE06C2D70
:101F600084E00E94D50A80910E068823E1F78091D3
:101F70000E06813009F4DA9480910E06823009F45D
:101F8000D3948E01075F1F4FB8018D2D0E94610F02
:101F900020E0A8016C2D80E00E940B0B84E180936F
:101FA0000B0680910B068823E1F780910E068430A2
:101FB00021F080910E068830D1F680910E0688308F
:101FC00009F0E1C0A6E5B8E0EA0EFB1ED701EC91EE
:101FD000FF27ED5FFA4FD082D6C0813009F069C08B
:101FE0008E010F5F1F4FB801809137050E942F0FA0
:101FF0001A8644E063E080E00E94570ED82EBFEFBF
:102000008B1709F4C0C0E82EFF240E0D1F1DF80128
:10201000008120E048E65DE0682F84E00E94D50A58
:1020200080910E06813009F400E080910E06823026
:1020300009F401E0005D0987005320E0AE01475F2D
:102040005F4F6D2D80E00E940B0B84E180930B06A7
:1020500080910B068823E1F780910E06883021F0ED
:1020600080910E068430E1F680910E06883051F49E
:10207000CE010196E80EF91ED7010C930E94480F7D
:10208000809337050E9469098E01075F1F4FB801D1
:10209000809137050E94610F60E0C8010E94DE0A4E
:1020A00088EC80930B0680910B06882309F46BC0A3
:1020B000FACF882309F067C08E010F5F1F4FB80168
:1020C00080910B050E942F0F1A8644E067E080E0A4
:1020D0000E94570ED82EBFEF8B1709F454C0E82E7C
:1020E000FF240E0D1F1DF801008120E046E65DE093
:1020F000682F84E00E94D50A80910E06813009F491
:1021000000E080910E06823009F401E0005D09874D
:10211000005320E0AE01475F5F4F6D2D80E00E94CD
:102120000B0B84E180930B0680910B068823E1F76B
:1021300080910E06883021F080910E068430E1F601
:1021400080910E06883051F4CE010196E80EF91EFA
:10215000D7010C930E94480F80930B050E946909D8
:102160008E01075F1F4FB80180910B050E94610F20
:1021700060E0C8010E94DE0A88EC80930B06809123
:102180000B068823E1F762960FB6F894DEBF0FBE08
:10219000CDBFDF91CF911F910F91FF90EF90DF9016
:1021A000CF9008956F927F928F929F92AF92BF923D
:1021B000CF92DF92EF92FF920F931F93CF93DF9313
:1021C000CDB7DEB7A1970FB6F894DEBF0FBECDBF77
:1021D000E82E81E08E1508F044C044EFA42E47E0BD
:1021E000B42E39E7632E39E0732EFF24CC24DD248E
:1021F00023E0822E25E0922EF50184918E15E9F4DC
:10220000EF2DFF27EA5AF74FC0828E01075F1F4F5D
:10221000B801F40180810E94610F20E0A8016F2DB8
:1022200080E00E940B0B20E0A3016F2D85E00E944F
:10223000D50AF7E0FF1508F0F3940894C11CD11CEF
:1022400083E090E0A80EB91E0894811C911CE0E187
:10225000F0E06E0E7F1EF2E4CF16D10409F463C0E5
:10226000CBCF81E0E81679F58E010F5F1F4FB801E3
:10227000809137050E942F0F1A8699EBA92E98E0BE
:10228000B92E6801CE0101961C2D181BF601819113
:102290006F01805D898720E0AE01475F5F4F612F4E
:1022A00080E00E940B0B20E0A501612F85E00E94D9
:1022B000D50A80E190E0A80EB91ECE010596C81699
:1022C000D90681F1DFCFEE2069F58E010F5F1F4F38
:1022D000B80180910B050E942F0F1A86680189EFC3
:1022E000A82E88E0B82ECE010196FC2CF81AF60133
:1022F00081916F01805D89878E01075F1F4F20E00C
:10230000A8016F2D80E00E940B0B20E0A5016F2D2E
:1023100085E00E94D50A80E190E0A80EB91EC016A3
:10232000D10609F7FF248F2D9927A1960FB6F894AF
:10233000DEBF0FBECDBFDF91CF911F910F91FF90F8
:10234000EF90DF90CF90BF90AF909F908F907F9055
:102350006F900895982F8630D8F426E430E0E9E4B1
:10236000F5E0808183832150304031978FEF2F3FFC
:102370003807B9F783E28093030581E6809304056B
:1023800095599093050510924D058BE40E943F07E7
:1023900008951F9393E29093030591E690930405AB
:1023A00091E790930505809306051092070510921A
:1023B000080586E00E943F0710E00E94BA078130BE
:1023C00009F41EE11F5F809188058C54853018F058
:1023D0001E3198F304C080E090E01E3110F081E0DF
:1023E00090E01F910895FF920F931F93CF93DF9377
:1023F000CDB7DEB72F970FB6F894DEBF0FBECDBFB7
:102400000E94690960E085E59DE00E94A70A60E0FE
:102410008FE49DE00E94A70A60E089E49DE00E94AD
:10242000A70A60E083E49DE00E94A70A60E08DE3D4
:102430009DE00E94A70A60E087E39DE00E94A70A52
:1024400040E065E081E00E94570E0E94C911813092
:1024500041F420E04FE25DE066E080E00E94D50AB2
:1024600062C062E0F62E0E9469098E010F5F1F4F65
:102470004AE050E0B8018F2D99270E94631660E072
:10248000C8010E94DE0A82E380930B0680910B064E
:102490008823E1F70E9469098F2D0E94D210682FCE
:1024A00080910E068823E1F380910E06823009F4B4
:1024B000F39480910E06813009F4FA948FEFF816A8
:1024C00019F45CE0F52E04C08CE08F1508F4FF24AD
:1024D00080910E06883019F48F2D0E94850F80910F
:1024E0000E06843009F0BFCF0E94690960E08CE0DD
:1024F0009DE00E94A70A40E062E081E00E94570E42
:10250000813061F460E085E09DE00E94A70A85E0EB
:102510000E94AA1160E08DEE9CE003C060E089EDAE
:102520009CE00E94A70A84E680930B0680910B062C
:102530008823E1F72F960FB6F894DEBF0FBECDBF0C
:10254000DF91CF911F910F91FF9008951F920F92ED
:102550000FB60F9211248F939F93EF93FF93809167
:102560005E089091C600E0E6F8E0E80FF11D908368
:102570008F5F80935E0880915E088F7080935E0805
:10258000FF91EF919F918F910F900FBE0F901F9031
:10259000189588E98093C10080E18093C400089574
:1025A0008AE080930D0690915F0880915E089817ED
:1025B00021F480910D068823B1F780910D068823C0
:1025C00011F4E0E00FC080915F08E82FFF27E05A88
:1025D000F74FE0818F5F80935F0880915F088F7075
:1025E00080935F088E2F99270895982F8091C000BF
:1025F00085FFFCCF9093C6000895FC0107C0809131
:10260000C00085FFFCCF9093C6003196908199233E
:10261000B1F708951F920F920FB60F9211248F9366
:102620009F9380910C06882331F080910C06815095
:1026300080930C0615C08AE080930C0680B1992720
:1026400080959095689413F8959587951694E1F781
:102650008F7080930E0680910F068F5F80930F0618
:1026600080910B06882329F080910B06815080937E
:102670000B0680910D06882329F080910D0681506C
:1026800080930D069F918F910F900FBE0F901F901A
:10269000189587E084BD8CE987BDEEE6F0E0808187
:1026A000826080830895F89480910101882321F449
:1026B00084E08093010102C0109201018091010128
:1026C000A2E0B0E0082E0E94C4160E94840978940B
:1026D00008950F931F9311E00E94690960E088E953
:1026E0009DE00E94A70A60E085E99DE00E94A70A9C
:1026F00060E086E89DE00E94A70A60E08EE79DE02A
:102700000E94A70A60E083E79DE00E94A70A60E0BC
:102710008CE69DE00E94A70A4FE065E082E00E94FF
:10272000570E833049F08430C9F0823011F010E048
:1027300026C00E94531323C00E94690901E022E3CE
:1027400044E664E18AE00E94510B80910E068830D5
:10275000B1F080910E06843091F0F7CF0E946909A4
:1027600001E028E244E664E18AE00E94640C809182
:102770000E06883021F080910E068430C1F71123B7
:1027800009F0AACF1F910F910895CF93DF93EC0129
:1027900052E070E026C0E52FFF27E957FA4F21816C
:1027A0002D5332813D5343814D535C5FDE01A80FB1
:1027B000B91F80818D53880F880F922F92959F703B
:1027C000892B8C932295207F832F86958695282BA5
:1027D000FD0121833295330F330F307C342B32834C
:1027E0007D5F872F99275617B0F2DF91CF9108951B
:1027F0004F925F926F927F928F929F92AF92BF9211
:10280000CF92DF92EF92FF920F931F93CF93DF93BC
:10281000FC01EB0180E2888340E8E130F40718F422
:102820006624772408C0F095E195FF4F8DE28883F8
:1028300051E0652E712C2E010894411C511CCF01D2
:1028400060E177E20E9495168B01262F332780E105
:1028500097E2BC01269FC001279F900D369F900DE7
:1028600011249F01281B390B42E0C42ED12CCC0E21
:10287000DD1EC90168EE73E00E9495167B01462FAC
:10288000552788EE93E0FC014E9FC0014F9F900DAD
:102890005E9F900D1124281B390B93E0A92EB12CBB
:1028A000AC0EBD1EC90164E670E00E949516FB01E6
:1028B00084E6689FC0011124281B390B84E0882E10
:1028C000912C8C0E9D1EC9016AE070E00E94951645
:1028D0008AE0689FC0011124281B390B205D2D83DD
:1028E000005D0983F0E3EF0EEA82E05DEB83605D5B
:1028F0006C83003391F580E2888341E064167104B3
:1029000009F48DE28983F6018081803331F580E21C
:10291000F2018083F1E06F16710409F48DE2F60193
:102920008083F50180818033C1F480E2F6018083E9
:10293000F1E06F16710409F48DE2F5018083F40172
:102940008081803351F480E2F5018083F1E06F16DD
:10295000710409F48DE2F40180831E82DF91CF912E
:102960001F910F91FF90EF90DF90CF90BF90AF90AD
:102970009F908F907F906F905F904F9008950F93EE
:102980001F93082F84E180930B060E94D01283329C
:1029900021F080910B068823C1F780910B068823D4
:1029A00019F481E090E030C00E94D0128093870536
:1029B00011E00AC00E94D012E12FFF27E957FA4F19
:1029C00080831F5F17FD1FE78D30A1F7023221F4CE
:1029D000612F80E196E00AC0802F992774E0880F6C
:1029E000991F7A95E1F7612F8A5A994F0E94C51372
:1029F000E02FFF2764E0EE0FFF1F6A95E1F7EA5A28
:102A0000F94F178680E090E01F910F910895FF9293
:102A10000F931F93F82E83E28093030581E6809342
:102A2000040592E2F91671F483E68093050510928D
:102A30000605109207051092080586E00E943F07E0
:102A400004E40FC09FE19F1520F080930505F092EC
:102A50000605109207051092080586E00E943F07C0
:102A600001E410E08F2D0E94BF14813009F41EE1B3
:102A70001F5F80918805801710F0081718F41E3129
:102A800088F304C080E090E01E3110F081E090E017
:102A90001F910F91FF9008954F925F927F928F92B6
:102AA0009F92AF92BF92CF92DF92EF92FF920F93DD
:102AB0001F93CF93DF93CDB7DEB72B970FB6F89464
:102AC000DEBF0FBECDBF0E94690960E084ED9DE0CE
:102AD0000E94A70A1B8600E010E0802F0E940715C5
:102AE000813039F4802F0E940715813011F421E0E4
:102AF0002B870F5F1F4F0032110579F73B8531306F
:102B000019F0882499240EC060E089EC9DE00E94B1
:102B1000A70A88EC80930B0680910B06882309F4A2
:102B20009BC0FACF80910E068823E1F782E20E94D3
:102B30000715813071F460E08EEB9DE00E94A70ADA
:102B400088EC80930B0680910B06882309F484C0DF
:102B5000FACF8E010F5F1F4FB801C4010E94F81316
:102B600020E0A80160E08FE00E940B0BC401B3E0FD
:102B7000880F991FBA95E1F7881999096C01CC0C57
:102B8000DD1CE2E1F6E0CE0EDF1E7C01F4E0EE0C8F
:102B9000FF1CFA95E1F726E536E0E20EF31E442429
:102BA00055245C01742C739430E2A316B104B4F480
:102BB0008E010F5F1F4FB801F601808191810E9445
:102BC000F81320E0A701672D80E00E940B0B20E0A6
:102BD000A801672D8DE00E940B0B07C020E049EA99
:102BE0005DE0672D80E00E94D50A0894411C511CCD
:102BF0000894A11CB11C22E030E0C20ED31E80E17B
:102C000090E0E80EF91E97E04916510459F68AE063
:102C100080930B0680910B068823E1F780910E06C6
:102C2000813039F408948108910897FE02C0882405
:102C3000992480910E06823051F40894811C911CD5
:102C4000E8E08E1691041CF0E7E08E2E912C809126
:102C50000E06843009F066CF2B960FB6F894DEBFCF
:102C60000FBECDBFDF91CF911F910F91FF90EF90DD
:102C7000DF90CF90BF90AF909F908F907F905F90AC
:102C80004F900895FB019F01E8944230C4F0453213
:102C9000B4F44A3029F497FB1EF4909581959F4F28
:102CA000642F77270E949516805D8A330CF0895D2A
:102CB0008193CB010097A1F716F45DE25193108246
:102CC000C9010C947916FB019F01423074F0453222
:102CD00064F4642F77270E949516805D8A330CF088
:102CE000895D8193CB010097A1F71082C9010C94F3
:102CF0007916DC01FC01672F71917723E1F7329798
:102D000004C07C916D9370836291AE17BF07C8F3C6
:102D10000895991B79E004C0991F961708F0961B37
:102D2000881F7A95C9F780950895AA1BBB1B51E1AE
:102D300007C0AA1FBB1FA617B70710F0A61BB70B2B
:102D4000881F991F5A95A9F780959095BC01CD01D0
:102D5000089597FB092E07260AD077FD04D0E5DFFA
:102D600006D000201AF4709561957F4F0895F6F70C
:102D7000909581959F4F0895F999FECFB2BDA1BD61
:102D8000F89A119600B40895F999FECFB2BDA1BD8D
:102D900000BC11960FB6F894FA9AF99A0FBE0895EE
:022DA000FFCF63
:00000001FF
/Transportables_Koptertool/tags/V-0.1.1/Spezial/MMT-Mega644-20.hex
0,0 → 1,732
:100000000C94F1060C940E070C940E070C940E073A
:100010000C940E070C940E070C940E070C940E070C
:100020000C940E070C940E070C940E070C940E07FC
:100030000C940E070C940E070C940E070C940E07EC
:100040000C940A130C940E070C940E070C940E07D4
:100050000C94A6120C940E070C940E070C940E0729
:100060000C940E070C940E070C940E070C940E07BC
:10007000202020202020000D0A54696D656F7574C2
:100080002100446973706C61790000000000000079
:100090003E5B4F5B3E003E6B4F6B3E001C3E7C3E2A
:1000A0001C00183C7E3C18001C577D571C001C5E31
:1000B0007F5E1C0000183C180000FFE7C3E7FF004C
:1000C000001824180000FFE7DBE7FF0030483A067D
:1000D0000E00262979292600407F05050700407F6C
:1000E00005253F005A3CE73C5A007F3E1C1C080097
:1000F000081C1C3E7F0014227F2214005F5F005FFB
:100100005F0006097F017F00006689956A006060D4
:100110006060606094A2FFA2940008047E0408005E
:1001200010207E20100008082A1C0800081C2A083D
:1001300008001E10101010000C1E0C1E0C00303891
:100140003E383000060E3E0E0600000000000000A3
:1001500000005F000000000700070000147F147F0C
:100160001400242A7F2A12002313086462003649EF
:1001700056205000000807030000001C2241000028
:100180000041221C00002A1C7F1C2A0008083E088F
:10019000080000807030000008080808080000000F
:1001A000606000002010080402003E5149453E00F6
:1001B00000427F4000007249494946002141494DB3
:1001C00033001814127F10002745454539003C4A7A
:1001D0004949310041211109070036494949360092
:1001E000464949291E000000140000000040340068
:1001F00000000008142241001414141414000041DB
:10020000221408000201590906003E415D594E00C2
:100210007C1211127C007F49494936003E41414120
:1002200022007F4141413E007F49494941007F0909
:10023000090901003E41415173007F0808087F0011
:1002400000417F4100002040413F01007F0814220F
:1002500041007F40404040007F021C027F007F043D
:1002600008107F003E4141413E007F090909060018
:100270003E4151215E007F0919294600264949491E
:10028000320003017F0103003F4040403F001F2038
:1002900040201F003F4038403F00631408146300B3
:1002A0000304780403006159494D4300007F414134
:1002B0004100020408102000004141417F00040277
:1002C00001020400404040404000000307080000D5
:1002D0002054547840007F28444438003844444433
:1002E0002800384444287F0038545454180000082B
:1002F0007E09020018A4A49C78007F0804047800FA
:1003000000447D4000002040403D00007F10284414
:10031000000000417F4000007C04780478007C08E5
:1003200004047800384444443800FC18242418009D
:1003300018242418FC007C08040408004854545471
:10034000240004043F4424003C4040207C001C2046
:1003500040201C003C4030403C0044281028440011
:100360004C9090907C004464544C4400000836410A
:100370000000000077000000004136080000020184
:10038000020402003C2623263C001EA1A1611200AB
:100390003A4040207A003854545559002155557937
:1003A0004100215454784100215554784000205494
:1003B000557940000C1E527212003955555559009E
:1003C0003954545459003955545458000000457C50
:1003D00041000002457D42000001457C4000791447
:1003E00012147900F0282528F0007C5455450000AF
:1003F0002054547C54447C0A097F4941324949497C
:100400003200324848483200324A484830003A41C7
:1004100041217A003A4240207800009DA0A07D0052
:100420003944444439003D4040403D003C24FF24D1
:100430002400487E494366002B2FFC2F2B00FF0928
:1004400029F62000C0887E09030020545479410019
:100450000000447D41003048484A32003840402284
:100460007A00007A0A0A72007D0D19317D00262972
:10047000292F280026292929260030484D40200010
:100480003808080808000808080838002F10C8AC09
:10049000BA002F102834FA0000007B000000081476
:1004A0002A14220022142A140800AA005500AA00C7
:1004B000AA55AA55AA5555AA55AA55AA000000FF43
:1004C0000000101010FF0000141414FF00001010A2
:1004D000FF00FF001010F010F000141414FC0000D6
:1004E0001414F700FF000000FF00FF001414F404D0
:1004F000FC00141417101F0010101F101F001414FC
:10050000141F0000101010F000000000001F101059
:100510001010101F1010101010F01010000000FF2D
:100520001010101010101010101010FF10100000FC
:1005300000FF14140000FF00FF1000001F1017142C
:100540000000FC04F4141414171017141414F40409
:10055000F4140000FF00F7141414141414141414E9
:10056000F700F71414141417141410101F101F1090
:10057000141414F414141010F010F01000001F10D4
:100580001F100000001F1414000000FC14140000D1
:10059000F010F0101010FF10FF10141414FF1414BA
:1005A0001010101F0000000000F01010FFFFFFFFF0
:1005B000FFFFF0F0F0F0F0F0FFFFFF0000000000A0
:1005C00000FFFFFF0F0F0F0F0F0F38444438440098
:1005D0007C2A2A3E14007E0202060600027E027E6B
:1005E00002006355494163003844443C0400407EA6
:1005F000201E200006027E02020099A5E7A59900B0
:100600001C2A492A1C004C7201724C00304A4D4D84
:100610003000304878483000BC625A463D003E49C0
:10062000494900007E0101017E002A2A2A2A2A0067
:1006300044445F44440040514A44400040444A51CD
:1006400040000000FF010300E080FF0000000808F8
:100650006B6B0808361236243600060F090F0600A9
:100660000000181800000000101000003040FF01CA
:100670000100001F01011E0000191D171200003C9F
:100680003C3C3C000000000000004D6F642062799B
:10069000204D696B656C6A6F2030352F3038002033
:1006A000202053657474696E67730D0A0020202042
:1006B000446562756720446174656E0D0A002020F0
:1006C000204D6F746F72746573740D0A00202020C2
:1006D000506172616D657465720D0A0020202044BE
:1006E0006973706C61790D0A00202048617570741F
:1006F0006D656EFC202856302E312E31290D0A00F2
:10070000506F727461626C6573204B6F70746572A8
:10071000746F6F6C0D0A002A0020005461737465B9
:10072000206472FC636B656E0D0A00436F6E666930
:100730006720202020004368616E6E656C73202066
:1007400000537469636B202020202000486F656887
:10075000652020202020004779726F202020202053
:1007600020004C6F6F70696E672020200043616D20
:100770006572612020202000536F6E737469676575
:100780007320005573657220202020202000436FC5
:1007900075706C696E67202000436F6E666967280C
:1007A000322920004C6F6F70696E677365740002A8
:1007B000020202020202020004040404040403030D
:1007C00003080808080505080808000509090909BB
:1007D0000707070707070606060A0A0606050505AE
:1007E0000909090900070B0B0B0B0C0C0C0C0C0C6A
:1007F0000C0C0108020108020108020108020108AC
:100800000201080201080201080200000000FF04C2
:1008100000FF0400FF0400FF0400320400FF040096
:10082000060300400300140300200821FA080032E8
:100830000800FF0800000500000500FA0800FA089B
:1008400000FA0800010000FF0500FF0900FF090091
:10085000FF0900FF0900FF0700FA0700FA0700FA86
:100860000700190700FF0600FA0600FA0600FF0A53
:1008700000FF0A00FA0600FA0600FA0500FA050071
:10088000FF0500FF0900FF0900FF0900FF09000044
:10089000010001070000000000000000000000004F
:1008A0000000000000000000000000000000000048
:1008B0000000000000000000004C6F6F7020757099
:1008C0002020202020202020004C6F6F7020646F9B
:1008D000776E092020202000004C6F6F70206C651F
:1008E0006674202020202020004C6F6F70207269D9
:1008F00067687420202020200048F668656E7265C5
:10090000676C6572202020200048F668656E73636E
:1009100068616C74657220200048656164686F6C62
:100920006409090000000000004B6F6D7061737373
:100930000909000000000000004B6F6D70617373C7
:100940004669780909000000004750530909090069
:1009500000000000000000000041636873656E6BDA
:100960006F70706C756E6720004472656872617498
:100970006509090000000000004E69636B2020201B
:10098000202020202020202000526F6C6C2020206E
:1009900020202020202020200047617320202020BC
:1009A00020202020202020200047696572090909A5
:1009B000000000000000000000506F746931090958
:1009C000090000000000000000506F74693209093E
:1009D000090000000000000000506F74693309092D
:1009E000090000000000000000506F74693409091C
:1009F000090000000000000000436F6E666967098F
:100A0000090900000000000000486F6568655F4D3F
:100A1000696E476173202020004C7566746472759E
:100A2000636B5F4420202020004D6178486F65682B
:100A3000652020202020202000486F6568655F50D9
:100A4000202020202020202000486F6568655F5608
:100A5000657273746165726B00486F6568655F41AC
:100A600043435F5769726B2E00537469636B5F5029
:100A7000202020202020202000537469636B5F44D5
:100A8000202020202020202000476965725F502010
:100A90002020202020202020004761735F4D696EB8
:100AA0002020202020202020004761735F4D6178A6
:100AB0002020202020202020004779726F4163638E
:100AC00046616B746F720900004B6F6D70617373D8
:100AD0005769726B756E6720004779726F5F50209F
:100AE0000909000000000000004779726F5F4909A2
:100AF000090900000000000000556E7465727370F3
:100B0000616E6E756E672020004E6F7447617309C9
:100B10000909000000000000004E6F744761735A1D
:100B200065697420202020200055666F417573721E
:100B300069636874756E672000495F46616B746F06
:100B40007220202020202020005573657250617291
:100B5000616D3109090000000055736572506172C2
:100B6000616D3209090000000055736572506172B1
:100B7000616D3309090000000055736572506172A0
:100B8000616D34090900000000536572766F4E698B
:100B9000636B4374726C090000536572766F4E6923
:100BA000636B436F6D70090000536572766F4E6919
:100BB000636B4D696E09000000536572766F4E6974
:100BC000636B4D617809000000536572766F4E6962
:100BD000636B526566727368004C6F6F7047617328
:100BE0004C696D6974090000004C6F6F7054687235
:100BF0006573686F6C640900004C6F6F704879739F
:100C0000746572657365090000416368734B6F70AA
:100C1000706C756E67090000004163687347656713
:100C2000656E4B6F70706C2E0057696E6B6C556DF6
:100C30007363686C4E69636B0057696E6B6C556DBE
:100C40007363686C526F6C6C004779726F416363B9
:100C50004162676C656963680044726966746B6FB2
:100C60006D700909000000000044796E616D6963D0
:100C700053746162696C6974005573657250617276
:100C8000616D35090900000000557365725061728D
:100C9000616D36090900000000557365725061727C
:100CA000616D37090900000000557365725061726B
:100CB000616D380909000000004C6F6F70436F6E62
:100CC000666967090900000000536572766F4E6916
:100CD000636B436F6D70496E000D0A4E69636874F3
:100CE000206765737065696368657274000D0A50EA
:100CF0006172616D657465722067657370656963A3
:100D000068657274000D0A2D2D2D3E0050617261D0
:100D10006D657465722073706569636865726E3F96
:100D20000D0A20206A610D0A20206E65696E00544C
:100D3000696D656F75740020353A0D0A0020343AEC
:100D40000D0A0020333A0D0A0020323A0D0A002025
:100D5000313A0D0A004C61646520506172616D6525
:100D60007465720D0A002D002D002D004578697400
:100D70000D0A00526563687465636B0D0A004C6967
:100D80006E69650D0A004F7269656E7469657275EA
:100D90006E670D0A000D0A0045696E7374656C6C10
:100DA000756E67656E3A0D0A0020202020202020F5
:100DB00020202020202020202020202020000D0A7C
:100DC00054696D656F757421000D0A54696D656F06
:100DD0007574210044656275672D446973706C6198
:100DE000790011241FBECFEFD0E1DEBFCDBF11E0EF
:100DF000A0E0B1E0E2EAFDE202C005900D92A03071
:100E0000B107D9F718E0A0E0B1E001C01D92A0370A
:100E1000B107E1F70E940D0E0C94D0160C9400005F
:100E2000782F52E060E026C0E52FFF27E957FA4F00
:100E300021812D5332813D5343814D535C5FDC0151
:100E4000AD5FBA4F80818D53880F880F922F929596
:100E50009F70892B8C932295207F832F8695869572
:100E6000282BFD0121833295330F330F307C342B37
:100E700032836D5F862F99275717B0F208950F932D
:100E80001F93B82F809103058093870580910405F7
:100E9000809388058091050580938905A3E073E020
:100EA00035C0E72FFF27ED5FFA4F808141816281D6
:100EB0007D5FEA2FFF27E957FA4F282F26952695C1
:100EC000235C2083552799278370907024E0880F36
:100ED000991F2A95E1F79A0104E0369527950A951E
:100EE000E1F7822B835C81834F705070440F551F54
:100EF000440F551F862F8295869586958370842B87
:100F0000835C82836F73635C6383AC5F7B1748F29F
:100F100090E020E030E008C0E92FFF27E957FA4FC2
:100F20008081280F311D9F5F9A17B1F73F70EA2F1C
:100F3000FF27E957FA4FC90136E0969587953A950C
:100F4000E1F7835C80832F73235C21838DE08283B0
:100F500013820A2F0D5F10E008C0E12FFF27E95729
:100F6000FA4F80810E94F5121F5F1017B1F71F9191
:100F70000F9108951F9384E180930B060E94D01275
:100F8000833221F080910B068823C1F780910B06F4
:100F9000882319F481E090E017C00E94D01280935A
:100FA000870511E00AC00E94D012E12FFF27E95700
:100FB000FA4F80831F5F17FD1FE78D30A1F7812F48
:100FC0000E94100780E090E01F9108951F93CF9337
:100FD000DF93CDB7DEB761970FB6F894DEBF0FBED3
:100FE000CDBF182F83E28093030581E6809304052B
:100FF00080930505109306051092070510920805C9
:1010000086E00E943F070E94BA07809188058134DC
:10101000D1F7E3E0F5E0DE01119681918D9385E053
:10102000E331F807D1F7198A177020E0AE014F5F5E
:101030005F4F612F80E00E940B0B61960FB6F89412
:10104000DEBF0FBECDBFDF91CF911F9108959F925C
:10105000AF92BF92CF92DF92EF92FF920F931F93C6
:10106000CF93DF93CDB7DEB761970FB6F894DEBFAD
:101070000FBECDBF0E9469099924A92CBB2453E05F
:10108000AA0CBB1C5A95E1F7FA2C00E010E08F2D5A
:10109000800F0E94E6070F5F1F4F08301105B9F758
:1010A0000E94BA0780918805843489F57501EE0C99
:1010B000FF1C85E095E0E80EF91ECC24DD248E01AE
:1010C0000F5F1F4FF701208181819927982F882773
:1010D0004AE050E0B801820F911D0E94421620E0C4
:1010E00040E750E06C2D8EE00E94D50A20E0A80178
:1010F0006C2D8EE00E940B0B0894C11CD11C82E069
:1011000090E0E80EF91E98E0C916D104C1F680916E
:101110000E06882329F280910E06813009F49394FB
:1011200080910E06823009F49A9480910E068830E0
:1011300019F0E3E09E22A1CF61960FB6F894DEBFCE
:101140000FBECDBFDF91CF911F910F91FF90EF9018
:10115000DF90CF90BF90AF909F9008951F9393E240
:101160009093030591E69093040598E69093050506
:1011700080930605109207051092080586E00E94EC
:101180003F0710E00E94BA07813009F41AE01F5FA0
:10119000809188058053853018F01A3098F304C088
:1011A00080E090E01A3010F081E090E01F91089507
:1011B0001F93CF93DF93CDB7DEB72A970FB6F8947E
:1011C000DEBF0FBECDBF0E94690960E082E890E0FB
:1011D0000E94A70A80910E068823E1F70E94AE08BC
:1011E000813069F460E087E790E00E94A70A88EC0C
:1011F00080930B0680910B06882369F1FBCF109139
:10120000880519831A8220E0AE014F5F5F4F60E0CE
:101210008AE00E940B0B1F5F20E043E055E0612F46
:1012200080E00E940B0B8AE080930B0680910B06F6
:101230008823E1F780910E06813011F40E94AE08F8
:1012400080910E06823011F40E94AE0880910E0645
:10125000843009F0BFCF2A960FB6F894DEBF0FBED8
:10126000CDBFDF91CF911F9108952C988EBD0DB405
:1012700007FEFDCF8DB58DBD2C9A08951F93CF939A
:10128000DF93E2E0F1E0119285E0E230F807D9F770
:1012900010EB2B98812F0E94350980E10E943509BF
:1012A000809101010E9435092B9AC0E0D0E080E0D6
:1012B0000E9435092196C038D105C9F71F5F183B38
:1012C00041F71092090610920A06DF91CF911F9103
:1012D00008950E943E09089588E893E10197F1F787
:1012E00008950F931F93CF93DF938C01C0E0D0E05C
:1012F00003C00E946C092196C017D107D1F7DF9176
:10130000CF911F910F9108951092090610920A062D
:101310008FEF84B98EE58CBD2C9A2A988AE090E0F4
:101320000E9471092A9A2C982B9880E40E94350912
:1013300080910101882329F481EA0E94350980EC1B
:1013400004C080EA0E94350988EC0E94350986EACB
:101350000E94350982EA0E9435098FE20E94350910
:1013600088EF0E94350980E00E94350987E20E94DB
:10137000350981E80E94350986E10E9435098CEA29
:101380000E94350980E00E9435098FEA0E943509E4
:101390000E943E090895FF920F931F938C01F62E31
:1013A0002B98880F892F881F990B919580550E9443
:1013B0003509809101010F77080F802F82958F707A
:1013C000805F0E943509802F8F700E9435092B9A0B
:1013D0008F2D0E9435091F910F91FF900895EF9274
:1013E000FF920F931F93CF93DF93C0E0D0E002E012
:1013F00011E032E8E32E31E0F32EF70181917F0115
:10140000F801808361918F01CE010E94CB09219662
:10141000F3E0C038DF0789F702E814E0F801119221
:101420008F0160E0CE010E94CB092196F4E0C0302C
:10143000DF07A1F7DF91CF911F910F91FF90EF9000
:101440000895CF92DF92EF92FF920F931F93CF9365
:10145000DF93D22E4F3D81F0403E38F4463DB1F04F
:101460004C3DB1F0443CA9F40FC0463F49F04C3F1D
:1014700049F0443E71F402C041EE0BC044E809C09B
:1014800044E907C041E805C04EE803C049E901C08E
:101490004AE9062F11271695102F00271795079553
:1014A00026E0829FC0011124080F191F1370429F6C
:1014B000700111248AE890E0E80EF91ECC24E801BE
:1014C000CE5FDE4FF7019491F2E0DF16A1F0FD153B
:1014D00030F0DD2059F081E0D816B1F409C0E3E026
:1014E000DE1661F0F4E0DF1679F40AC098830CC0D0
:1014F0008881892B08C08881892705C0888102C01E
:1015000088819095892388836991C8010E94CB09BD
:10151000C3940894E11CF11C0F5F1F4F86E0C816AE
:1015200089F6DF91CF911F910F91FF90EF90DF909F
:10153000CF90089580910A068F5F80930A068830C5
:1015400028F00E94EF0987E080930A0608951F9310
:10155000CF93DF93EC01162F20C04032A0F02196EC
:10156000212F60910A06809109060E94210A80912C
:1015700009068F5F80930906853178F0109209067D
:101580000E949A0A0AC04A3029F04D3029F410927C
:10159000090602C00E949A0A2196FE014491442342
:1015A000E1F6DF91CF911F91089580930906609332
:1015B0000A06622FCA010E94A70A08951F93CF93BB
:1015C000DF93EC01162F20C04032A0F02196212F8E
:1015D00060910A06809109060E94210A80910906FD
:1015E0008F5F80930906853178F0109209060E947A
:1015F0009A0A0AC04A3029F04D3029F4109209069F
:1016000002C00E949A0A219648814423E9F6DF919C
:10161000CF911F9108958093090660930A06622F67
:10162000CA010E94DE0A0895982F87FD39C06034F0
:10163000B8F5862F869586958695282F332736957B
:10164000322F222737952795290F311D677081E0AA
:1016500090E001C0880F6A95EAF7682F3370413037
:1016600061F0413018F04230A1F40DC0F901EE5F95
:10167000FE4F8081609586230BC0F901EE5FFE4F1F
:101680008081862B05C0F901EE5FFE4F80818627A1
:101690008083F901EE5FFE4F6081C9010E94CB0992
:1016A00008952F923F924F925F926F927F928F9206
:1016B0009F92AF92BF92CF92DF92EF92FF920F93E1
:1016C0001F93CF93DF93CDB7DEB728970FB6F8946B
:1016D000DEBF0FBECDBF8D83162F0E83682E7724FD
:1016E000862E9924842F99279C838B8386199709AA
:1016F000E22FFF27FA83E9839F012819390997FF11
:1017000004C0FFEF2F2E3F2E07C040E050E00097AF
:1017100011F041E050E01A0137FF04C0EFEF4E2E08
:101720005E2E08C040E050E02115310511F041E087
:1017300050E02A016C0197FF04C0D094C194D108F5
:10174000D394790137FF04C0F094E194F108F39445
:101750004E81682D862D0E94140BEC14FD047CF53F
:10176000C60162E070E00E94A91644275527461B77
:10177000570B58874F83A22CB62CB20C5D81052FD6
:10178000112717C08F8198858E0D9F1D98878F8395
:101790001816190634F4840C951C8C199D09988729
:1017A0008F834E81682D8B2D0E94140B020D131D0B
:1017B000BA0CEB81FC810E171F0721F72DC0C70162
:1017C00062E070E00E94A91644275527461B570B7C
:1017D00058874F83A42CB82CB40C012F112717C0A5
:1017E0008F8198858C0D9D1D98878F8318161906FB
:1017F00034F4620C731C8E199F0998878F834E8175
:101800006B2D862D0E94140B040D151DBA0CE98159
:10181000FA810E171F0721F728960FB6F894DEBF3E
:101820000FBECDBFDF91CF911F910F91FF90EF9031
:10183000DF90CF90BF90AF909F908F907F906F90F0
:101840005F904F903F902F900895BF92CF92DF927C
:10185000EF92FF920F931F93CF93DF93182FB02E29
:1018600087FD1FE7603408F06FE37727CB01820F15
:10187000911D9C01812F840F912D911D6C0191E888
:10188000C916D10418F0B0E8CB2ED12C790121343F
:10189000310518F0A0E4EA2EF12CEB0108C00B2D65
:1018A0002C2F4C2D6C2F812F0E94510B2196EC1662
:1018B000FD06A8F7DF91CF911F910F91FF90EF9058
:1018C000DF90CF90BF900895CF92DF92EF92FF927A
:1018D0000F931F93CF93DF93D82EC02E87FF02C0A4
:1018E0008FE7D82E162F603408F01FE3812F820F68
:1018F000912D911DEC018D2D840F912D911D7C0159
:1019000091E8E916F10418F000E8E02EF12C0C2D16
:10191000212F4E2D612F8D2D0E94510BC134D105E9
:1019200010F0C0E4D0E00C2D2C2F4E2D612F8E2D09
:101930000E94510B2C2F4D2D6C2F8E2D0E94510B80
:10194000212F4D2D6C2F8D2D0E94510BDF91CF91AA
:101950001F910F91FF90EF90DF90CF9008952F92FD
:101960003F924F925F926F927F928F929F92AF922F
:10197000BF92CF92DF92EF92FF920F931F93CF937C
:10198000DF93CDB7DEB724970FB6F894DEBF0FBE56
:10199000CDBF8C016B017A01A22E21E030E0241B27
:1019A000350B3C832B83CA01880F991F662477244B
:1019B000681A790A462E502E640F4A2D802F0E94F5
:1019C000140B6C2D6E194A2D802F0E94140B4A2D7A
:1019D0006C2D802F8E0D0E94140B4A2D6C2D802FA4
:1019E0008E190E94140B4701222433241A82198273
:1019F00058C08B819C8197FD0BC008948108910889
:101A0000E2E0F0E06E0E7F1E860D971D9C838B83B7
:101A10000894211C311C29813A812E5F3F4F3A8363
:101A200029838B819C810196820F931F9C838B83DA
:101A3000142D180DD52CD20C4A2D612F8D2D0E94FE
:101A4000140BE52CE2184A2D612F8E2D0E94140BE9
:101A5000142D18194A2D612F8D2D0E94140B4A2D1B
:101A6000612F8E2D0E94140B142D120DE52CE80C05
:101A70004A2D612F8E2D0E94140B952D9819092F38
:101A80004A2D612F892F0E94140B142D12194A2DF3
:101A9000612F8E2D0E94140B4A2D612F802F0E94E2
:101AA000140B281439040CF4A4CF24960FB6F89420
:101AB000DEBF0FBECDBFDF91CF911F910F91FF9081
:101AC000EF90DF90CF90BF90AF909F908F907F90DE
:101AD0006F905F904F903F902F9008952F923F927C
:101AE0004F925F926F927F928F929F92AF92BF922E
:101AF000CF92DF92EF92FF920F931F93CF93DF93DA
:101B00006B017A0151E0A52EB12CAE18BF089701E8
:101B1000220F331F88249924821A930A662E782E66
:101B2000262F2E196E0D01E0482F0E94510B472DD4
:101B30004E192C2D6C2D872D8E0D0E94510BE70117
:101B400044245524222433243AC0B7FC07C02197EB
:101B500082E090E0880E991EA80CB91C0894411CE4
:101B6000511C82E090E0280E391E0894A11CB11C83
:101B7000A20CB31C1C2F662D6C0FE72CE418D72C7D
:101B8000D40C01E0262F4E2D8D2D0E94510B662D79
:101B90006C1B262F4E2D8D2D0E94510B662D640D32
:101BA000E72CEC1A170D262F4E2D812F0E94510B7A
:101BB000662D6419262F4E2D812F0E94510B4C1635
:101BC0005D061CF2DF91CF911F910F91FF90EF9076
:101BD000DF90CF90BF90AF909F908F907F906F904D
:101BE0005F904F903F902F900895A2E0B0E00E9448
:101BF000BC16802D992780930101089581E021E092
:101C000030E0D901082E0E94C41680E02F5F3F4FBC
:101C1000D901082E0E94C41608958FEF82B983E47B
:101C200085B98CEF88B98CE78BB983E087B980E8F8
:101C30008AB921E030E0D9010E94BC16802D8130A4
:101C400071F081E0D901082E0E94C41680E02F5F58
:101C50003F4FD901082E0E94C416215030402F5FFB
:101C60003F4FD9010E94BC16802D99278093010116
:101C70000E9484090E94C9120E94491378940E940C
:101C8000960EFDCF0F931F93062F142F20E049E1EE
:101C900057E0682F812F0E94D50A20E047E157E0E6
:101CA000602F812F0E94D50A1F910F910895EF9206
:101CB000FF920F931F93082FE62EF42E682F0E9499
:101CC000420E102F912F80910E068823E1F780910C
:101CD0000E068823E1F380910E06823019F41E155A
:101CE00008F41F5F80910E06813019F4011708F483
:101CF00011504F2D612F892F0E94420E80910E06A8
:101D0000883021F080910E068430E1F680910E0635
:101D1000843009F41FEF80910E068823E1F7812FAC
:101D200099271F910F91FF90EF9008950E946909E4
:101D300060E080E097E00E94A70A60E089EE96E00C
:101D40000E94A70A60E08CED96E00E94A70A60E07E
:101D50008DEC96E00E94A70A60E08EEB96E00E9470
:101D6000A70A60E08DEA96E00E94A70A60E08FE98A
:101D700096E00E94A70A60E08AE896E00E94A70A1F
:101D80004FE066E082E00E94570E843091F085308B
:101D900028F4823041F08330A1F408C0853061F02E
:101DA000863079F40CC00E94D80808950E94F3117F
:101DB00008950E94E20E08950E944C1508950E9415
:101DC000691308950E94690980910E068823E1F73E
:101DD00060E08BE197E00E94A70A80910E068823BD
:101DE000E1F380910E068830C9F483E28093030505
:101DF00081E68093040584E7809305058AE080935B
:101E000006058093070580930805809309051092C5
:101E10000A0510920B0589E00E943F0780910E068B
:101E20008823E1F780910E068823E1F383E2809313
:101E3000030581E68093040584E7809305051092ED
:101E400006051092070510920805109209051092D8
:101E50000A0510920B0589E00E943F070895FB01D7
:101E600020E030E0482F552761E0CA01022E02C071
:101E7000959587950A94E2F780FF02C0608301C0C0
:101E800010822F5F3F4F31962830310571F708954A
:101E900040E020E030E061E070E0FC0181918130C1
:101EA00041F4CB01022E02C0880F991F0A94E2F779
:101EB000480F2F5F3F4F2830310581F7842F992736
:101EC0000895482FFB0164E60E948916808324E66A
:101ED000829FC0011124481B842F6AE00E9489164A
:101EE0002AE0829F90011124421B405D4283908131
:101EF000905D9083805D8183903329F490E290839C
:101F0000803309F4918313820895CF92DF92EF9288
:101F1000FF920F931F93CF93DF93CDB7DEB76297F6
:101F20000FB6F894DEBF0FBECDBF823008F455C0A7
:101F3000615044E080E00E94570EC82E8FEFC81613
:101F400009F421C1EC2CFF24F701EA5AF74FE08194
:101F5000FF27ED5FFA4FD08020E04AE65DE06C2D70
:101F600084E00E94D50A80910E068823E1F78091D3
:101F70000E06813009F4DA9480910E06823009F45D
:101F8000D3948E01075F1F4FB8018D2D0E94610F02
:101F900020E0A8016C2D80E00E940B0B84E180936F
:101FA0000B0680910B068823E1F780910E068430A2
:101FB00021F080910E068830D1F680910E0688308F
:101FC00009F0E1C0A6E5B8E0EA0EFB1ED701EC91EE
:101FD000FF27ED5FFA4FD082D6C0813009F069C08B
:101FE0008E010F5F1F4FB801809137050E942F0FA0
:101FF0001A8644E063E080E00E94570ED82EBFEFBF
:102000008B1709F4C0C0E82EFF240E0D1F1DF80128
:10201000008120E048E65DE0682F84E00E94D50A58
:1020200080910E06813009F400E080910E06823026
:1020300009F401E0005D0987005320E0AE01475F2D
:102040005F4F6D2D80E00E940B0B84E180930B06A7
:1020500080910B068823E1F780910E06883021F0ED
:1020600080910E068430E1F680910E06883051F49E
:10207000CE010196E80EF91ED7010C930E94480F7D
:10208000809337050E9469098E01075F1F4FB801D1
:10209000809137050E94610F60E0C8010E94DE0A4E
:1020A00088EC80930B0680910B06882309F46BC0A3
:1020B000FACF882309F067C08E010F5F1F4FB80168
:1020C00080910B050E942F0F1A8644E067E080E0A4
:1020D0000E94570ED82EBFEF8B1709F454C0E82E7C
:1020E000FF240E0D1F1DF801008120E046E65DE093
:1020F000682F84E00E94D50A80910E06813009F491
:1021000000E080910E06823009F401E0005D09874D
:10211000005320E0AE01475F5F4F6D2D80E00E94CD
:102120000B0B84E180930B0680910B068823E1F76B
:1021300080910E06883021F080910E068430E1F601
:1021400080910E06883051F4CE010196E80EF91EFA
:10215000D7010C930E94480F80930B050E946909D8
:102160008E01075F1F4FB80180910B050E94610F20
:1021700060E0C8010E94DE0A88EC80930B06809123
:102180000B068823E1F762960FB6F894DEBF0FBE08
:10219000CDBFDF91CF911F910F91FF90EF90DF9016
:1021A000CF9008956F927F928F929F92AF92BF923D
:1021B000CF92DF92EF92FF920F931F93CF93DF9313
:1021C000CDB7DEB7A1970FB6F894DEBF0FBECDBF77
:1021D000E82E81E08E1508F044C044EFA42E47E0BD
:1021E000B42E39E7632E39E0732EFF24CC24DD248E
:1021F00023E0822E25E0922EF50184918E15E9F4DC
:10220000EF2DFF27EA5AF74FC0828E01075F1F4F5D
:10221000B801F40180810E94610F20E0A8016F2DB8
:1022200080E00E940B0B20E0A3016F2D85E00E944F
:10223000D50AF7E0FF1508F0F3940894C11CD11CEF
:1022400083E090E0A80EB91E0894811C911CE0E187
:10225000F0E06E0E7F1EF2E4CF16D10409F463C0E5
:10226000CBCF81E0E81679F58E010F5F1F4FB801E3
:10227000809137050E942F0F1A8699EBA92E98E0BE
:10228000B92E6801CE0101961C2D181BF601819113
:102290006F01805D898720E0AE01475F5F4F612F4E
:1022A00080E00E940B0B20E0A501612F85E00E94D9
:1022B000D50A80E190E0A80EB91ECE010596C81699
:1022C000D90681F1DFCFEE2069F58E010F5F1F4F38
:1022D000B80180910B050E942F0F1A86680189EFC3
:1022E000A82E88E0B82ECE010196FC2CF81AF60133
:1022F00081916F01805D89878E01075F1F4F20E00C
:10230000A8016F2D80E00E940B0B20E0A5016F2D2E
:1023100085E00E94D50A80E190E0A80EB91EC016A3
:10232000D10609F7FF248F2D9927A1960FB6F894AF
:10233000DEBF0FBECDBFDF91CF911F910F91FF90F8
:10234000EF90DF90CF90BF90AF909F908F907F9055
:102350006F900895982F8630D8F426E430E0E9E4B1
:10236000F5E0808183832150304031978FEF2F3FFC
:102370003807B9F783E28093030581E6809304056B
:1023800095599093050510924D058BE40E943F07E7
:1023900008951F9393E29093030591E690930405AB
:1023A00091E790930505809306051092070510921A
:1023B000080586E00E943F0710E00E94BA078130BE
:1023C00009F41EE11F5F809188058C54853018F058
:1023D0001E3198F304C080E090E01E3110F081E0DF
:1023E00090E01F910895FF920F931F93CF93DF9377
:1023F000CDB7DEB72F970FB6F894DEBF0FBECDBFB7
:102400000E94690960E085E59DE00E94A70A60E0FE
:102410008FE49DE00E94A70A60E089E49DE00E94AD
:10242000A70A60E083E49DE00E94A70A60E08DE3D4
:102430009DE00E94A70A60E087E39DE00E94A70A52
:1024400040E065E081E00E94570E0E94C911813092
:1024500041F420E04FE25DE066E080E00E94D50AB2
:1024600062C062E0F62E0E9469098E010F5F1F4F65
:102470004AE050E0B8018F2D99270E94631660E072
:10248000C8010E94DE0A82E380930B0680910B064E
:102490008823E1F70E9469098F2D0E94D210682FCE
:1024A00080910E068823E1F380910E06823009F4B4
:1024B000F39480910E06813009F4FA948FEFF816A8
:1024C00019F45CE0F52E04C08CE08F1508F4FF24AD
:1024D00080910E06883019F48F2D0E94850F80910F
:1024E0000E06843009F0BFCF0E94690960E08CE0DD
:1024F0009DE00E94A70A40E062E081E00E94570E42
:10250000813061F460E085E09DE00E94A70A85E0EB
:102510000E94AA1160E08DEE9CE003C060E089EDAE
:102520009CE00E94A70A84E680930B0680910B062C
:102530008823E1F72F960FB6F894DEBF0FBECDBF0C
:10254000DF91CF911F910F91FF9008951F920F92ED
:102550000FB60F9211248F939F93EF93FF93809167
:102560005E089091C600E0E6F8E0E80FF11D908368
:102570008F5F80935E0880915E088F7080935E0805
:10258000FF91EF919F918F910F900FBE0F901F9031
:10259000189588E98093C10084E18093C400089570
:1025A0008AE080930D0690915F0880915E089817ED
:1025B00021F480910D068823B1F780910D068823C0
:1025C00011F4E0E00FC080915F08E82FFF27E05A88
:1025D000F74FE0818F5F80935F0880915F088F7075
:1025E00080935F088E2F99270895982F8091C000BF
:1025F00085FFFCCF9093C6000895FC0107C0809131
:10260000C00085FFFCCF9093C6003196908199233E
:10261000B1F708951F920F920FB60F9211248F9366
:102620009F9380910C06882331F080910C06815095
:1026300080930C0615C08AE080930C0680B1992720
:1026400080959095689413F8959587951694E1F781
:102650008F7080930E0680910F068F5F80930F0618
:1026600080910B06882329F080910B06815080937E
:102670000B0680910D06882329F080910D0681506C
:1026800080930D069F918F910F900FBE0F901F901A
:10269000189587E084BD83EC87BDEEE6F0E080818D
:1026A000826080830895F89480910101882321F449
:1026B00084E08093010102C0109201018091010128
:1026C000A2E0B0E0082E0E94C4160E94840978940B
:1026D00008950F931F9311E00E94690960E088E953
:1026E0009DE00E94A70A60E085E99DE00E94A70A9C
:1026F00060E086E89DE00E94A70A60E08EE79DE02A
:102700000E94A70A60E083E79DE00E94A70A60E0BC
:102710008CE69DE00E94A70A4FE065E082E00E94FF
:10272000570E833049F08430C9F0823011F010E048
:1027300026C00E94531323C00E94690901E022E3CE
:1027400044E664E18AE00E94510B80910E068830D5
:10275000B1F080910E06843091F0F7CF0E946909A4
:1027600001E028E244E664E18AE00E94640C809182
:102770000E06883021F080910E068430C1F71123B7
:1027800009F0AACF1F910F910895CF93DF93EC0129
:1027900052E070E026C0E52FFF27E957FA4F21816C
:1027A0002D5332813D5343814D535C5FDE01A80FB1
:1027B000B91F80818D53880F880F922F92959F703B
:1027C000892B8C932295207F832F86958695282BA5
:1027D000FD0121833295330F330F307C342B32834C
:1027E0007D5F872F99275617B0F2DF91CF9108951B
:1027F0004F925F926F927F928F929F92AF92BF9211
:10280000CF92DF92EF92FF920F931F93CF93DF93BC
:10281000FC01EB0180E2888340E8E130F40718F422
:102820006624772408C0F095E195FF4F8DE28883F8
:1028300051E0652E712C2E010894411C511CCF01D2
:1028400060E177E20E9495168B01262F332780E105
:1028500097E2BC01269FC001279F900D369F900DE7
:1028600011249F01281B390B42E0C42ED12CCC0E21
:10287000DD1EC90168EE73E00E9495167B01462FAC
:10288000552788EE93E0FC014E9FC0014F9F900DAD
:102890005E9F900D1124281B390B93E0A92EB12CBB
:1028A000AC0EBD1EC90164E670E00E949516FB01E6
:1028B00084E6689FC0011124281B390B84E0882E10
:1028C000912C8C0E9D1EC9016AE070E00E94951645
:1028D0008AE0689FC0011124281B390B205D2D83DD
:1028E000005D0983F0E3EF0EEA82E05DEB83605D5B
:1028F0006C83003391F580E2888341E064167104B3
:1029000009F48DE28983F6018081803331F580E21C
:10291000F2018083F1E06F16710409F48DE2F60193
:102920008083F50180818033C1F480E2F6018083E9
:10293000F1E06F16710409F48DE2F5018083F40172
:102940008081803351F480E2F5018083F1E06F16DD
:10295000710409F48DE2F40180831E82DF91CF912E
:102960001F910F91FF90EF90DF90CF90BF90AF90AD
:102970009F908F907F906F905F904F9008950F93EE
:102980001F93082F84E180930B060E94D01283329C
:1029900021F080910B068823C1F780910B068823D4
:1029A00019F481E090E030C00E94D0128093870536
:1029B00011E00AC00E94D012E12FFF27E957FA4F19
:1029C00080831F5F17FD1FE78D30A1F7023221F4CE
:1029D000612F80E196E00AC0802F992774E0880F6C
:1029E000991F7A95E1F7612F8A5A994F0E94C51372
:1029F000E02FFF2764E0EE0FFF1F6A95E1F7EA5A28
:102A0000F94F178680E090E01F910F910895FF9293
:102A10000F931F93F82E83E28093030581E6809342
:102A2000040592E2F91671F483E68093050510928D
:102A30000605109207051092080586E00E943F07E0
:102A400004E40FC09FE19F1520F080930505F092EC
:102A50000605109207051092080586E00E943F07C0
:102A600001E410E08F2D0E94BF14813009F41EE1B3
:102A70001F5F80918805801710F0081718F41E3129
:102A800088F304C080E090E01E3110F081E090E017
:102A90001F910F91FF9008954F925F927F928F92B6
:102AA0009F92AF92BF92CF92DF92EF92FF920F93DD
:102AB0001F93CF93DF93CDB7DEB72B970FB6F89464
:102AC000DEBF0FBECDBF0E94690960E084ED9DE0CE
:102AD0000E94A70A1B8600E010E0802F0E940715C5
:102AE000813039F4802F0E940715813011F421E0E4
:102AF0002B870F5F1F4F0032110579F73B8531306F
:102B000019F0882499240EC060E089EC9DE00E94B1
:102B1000A70A88EC80930B0680910B06882309F4A2
:102B20009BC0FACF80910E068823E1F782E20E94D3
:102B30000715813071F460E08EEB9DE00E94A70ADA
:102B400088EC80930B0680910B06882309F484C0DF
:102B5000FACF8E010F5F1F4FB801C4010E94F81316
:102B600020E0A80160E08FE00E940B0BC401B3E0FD
:102B7000880F991FBA95E1F7881999096C01CC0C57
:102B8000DD1CE2E1F6E0CE0EDF1E7C01F4E0EE0C8F
:102B9000FF1CFA95E1F726E536E0E20EF31E442429
:102BA00055245C01742C739430E2A316B104B4F480
:102BB0008E010F5F1F4FB801F601808191810E9445
:102BC000F81320E0A701672D80E00E940B0B20E0A6
:102BD000A801672D8DE00E940B0B07C020E049EA99
:102BE0005DE0672D80E00E94D50A0894411C511CCD
:102BF0000894A11CB11C22E030E0C20ED31E80E17B
:102C000090E0E80EF91E97E04916510459F68AE063
:102C100080930B0680910B068823E1F780910E06C6
:102C2000813039F408948108910897FE02C0882405
:102C3000992480910E06823051F40894811C911CD5
:102C4000E8E08E1691041CF0E7E08E2E912C809126
:102C50000E06843009F066CF2B960FB6F894DEBFCF
:102C60000FBECDBFDF91CF911F910F91FF90EF90DD
:102C7000DF90CF90BF90AF909F908F907F905F90AC
:102C80004F900895FB019F01E8944230C4F0453213
:102C9000B4F44A3029F497FB1EF4909581959F4F28
:102CA000642F77270E949516805D8A330CF0895D2A
:102CB0008193CB010097A1F716F45DE25193108246
:102CC000C9010C947916FB019F01423074F0453222
:102CD00064F4642F77270E949516805D8A330CF088
:102CE000895D8193CB010097A1F71082C9010C94F3
:102CF0007916DC01FC01672F71917723E1F7329798
:102D000004C07C916D9370836291AE17BF07C8F3C6
:102D10000895991B79E004C0991F961708F0961B37
:102D2000881F7A95C9F780950895AA1BBB1B51E1AE
:102D300007C0AA1FBB1FA617B70710F0A61BB70B2B
:102D4000881F991F5A95A9F780959095BC01CD01D0
:102D5000089597FB092E07260AD077FD04D0E5DFFA
:102D600006D000201AF4709561957F4F0895F6F70C
:102D7000909581959F4F0895F999FECFB2BDA1BD61
:102D8000F89A119600B40895F999FECFB2BDA1BD8D
:102D900000BC11960FB6F894FA9AF99A0FBE0895EE
:022DA000FFCF63
:00000001FF
/Transportables_Koptertool/tags/V-0.1.1/base64.c
0,0 → 1,116
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "rs232.h"
#include "base64.h"
#include "lcd.h"
 
uint8_t r_buffer[129]; // Dieser Puffer enthält die Rohdaten (kodiert)
uint8_t p_buffer[129]; // Dieser Puffer enthält die Daten im Klartext
//struct str_DebugIn *p_buffer;
 
 
uint8_t get_message() // Liest eine komplette Übertragung und dekodiert sie
{
uint8_t index, comm;
timer = 20; // Timer für Timeout
while ((RS232_get() != '#') && (timer > 0)); // Warten auf Start-Zeichen #
if (timer > 0) // Falls kein Timeout auftrat
{
index = 0; // Die Rohdaten in r_buffer einlesen
do
{
comm = RS232_get();
r_buffer[index++] = comm;
if (index > 127) // Schutz vor Puffer-Überlauf
index = 127;
}
while (comm != 0x0D); // ... bis End-Signal = 0x0D kommt...
base64_decode(index); // Die base64-kodierten Rohdaten umwandeln
return 0; // kein Fehler aufgetreten
}
else
{
return 1; // Fehler aufgetreten
}
}
 
 
uint8_t base64_decode(uint8_t number) // Wandelt die base64-Rohdaten in lesbare Daten um
{
uint8_t p,q;
uint8_t a,b,c,d;
 
p = 2;
q = 0;
while (p < number)
{
a = r_buffer[p + 0] - 61;
b = r_buffer[p + 1] - 61;
c = r_buffer[p + 2] - 61;
d = r_buffer[p + 3] - 61;
p += 4;
p_buffer[q + 0] = (a << 2) | (b >> 4); // gespeichert werden die Daten in p_buffer
p_buffer[q + 1] = ((b & 0x0F) << 4) | (c >> 2);
p_buffer[q + 2] = ((c & 0x03) << 6) | d;
q += 3;
}
return q; // Rückgabe der Anzahl der Datenbytes
}
 
void base64_send(uint8_t number) // Sendet Daten zur Flight-Control
{ // Die Daten werden in p_buffer erwartet, umcodiert und gesendet
uint8_t bpointer,spointer;
uint8_t x,y,z,a;
uint16_t checksum;
 
r_buffer[0] = p_buffer[0];
r_buffer[1] = p_buffer[1];
r_buffer[2] = p_buffer[2];
 
bpointer = 3;
spointer = 3;
 
while (spointer < number)
{
x = p_buffer[spointer];
y = p_buffer[spointer + 1];
z = p_buffer[spointer + 2];
spointer += 3;
r_buffer[bpointer + 0] = (x >> 2) + 61;
r_buffer[bpointer + 1] = (((x & 0x03) << 4) | ((y & 0xF0) >> 4)) + 61;
r_buffer[bpointer + 2] = (((y & 0x0F) << 2) | ((z & 0xC0) >> 6)) + 61;
r_buffer[bpointer + 3] = (z & 0x3F) + 61;
bpointer += 4;
}
 
checksum = 0;
for(a=0;a<bpointer;a++)
checksum += r_buffer[a];
checksum %= 4096;
r_buffer[bpointer] = (checksum / 64) + 61;
r_buffer[bpointer + 1] = (checksum % 64) + 61;
r_buffer[bpointer + 2] = 13;
r_buffer[bpointer + 3] = 0;
bpointer += 3;
for(a=0;a<bpointer;a++)
RS232_send(r_buffer[a]);
}
/Transportables_Koptertool/tags/V-0.1.1/base64.h
0,0 → 1,12
#ifndef base64_h
#define base64_h
 
uint8_t base64_decode(uint8_t number);
void base64_send(uint8_t number);
uint8_t get_message(void);
 
uint8_t p_buffer[129]; // Dieser Puffer enthält die Daten im Klartext
uint8_t r_buffer[129]; // Dieser Puffer enthält die Rohdaten (kodiert)
 
 
#endif
/Transportables_Koptertool/tags/V-0.1.1/debug.c
0,0 → 1,257
// debug Data
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "lcd.h"
#include "rs232.h"
#include "base64.h"
#include "parameter.h"
#include "menu.h"
#include "debug.h"
 
uint8_t r_buffer[129]; // Dieser Puffer enthält die Rohdaten (kodiert)
 
uint8_t base64_decode_debug(unsigned char *ptrOut, uint8_t number) // Wandelt die base64-Rohdaten in lesbare Daten um
{
uint8_t p,q;
uint8_t a,b,c,d;
 
p = 2;
q = 0;
while (p < number)
{
a = r_buffer[p + 0] - 61;
b = r_buffer[p + 1] - 61;
c = r_buffer[p + 2] - 61;
d = r_buffer[p + 3] - 61;
p += 4;
ptrOut[q + 0] = (a << 2) | (b >> 4); // gespeichert werden die Daten in ptrOut
ptrOut[q + 1] = ((b & 0x0F) << 4) | (c >> 2);
ptrOut[q + 2] = ((c & 0x03) << 6) | d;
q += 3;
}
return q; // Rückgabe der Anzahl der Datenbytes
}
 
uint8_t get_message_debug(uint8_t command) // Liest eine komplette Übertragung und dekodiert sie
{
uint8_t index, comm;
timer = 20; // Timer für Timeout
while ((RS232_get() != '#') && (timer > 0)); // Warten auf Start-Zeichen #
if (timer > 0) // Falls kein Timeout auftrat
{
index = 0; // Die Rohdaten in r_buffer einlesen
do
{
comm = RS232_get();
r_buffer[index++] = comm;
if (index > 127) // Schutz vor Puffer-Überlauf
index = 127;
}
while (comm != 0x0D); // ... bis End-Signal = 0x0D kommt...
if (command == 34)
base64_decode_debug((unsigned char *) &DebugIn,index); // Die base64-kodierten Rohdaten umwandeln
else
base64_decode_debug((unsigned char *) &DebugInText[command][0], index); // Die base64-kodierten Rohdaten umwandeln
DebugInText[command][15] = 0x00; // Ende Zeichen setzen!!
return 0; // kein Fehler aufgetreten
}
else
{
return 1; // Fehler aufgetreten
}
}
 
uint8_t read_debug(uint8_t command_read) //
{
uint8_t timeout;
char compare;
 
timeout = 0;
p_buffer[0] = '#'; // Debug-Daten anfordern
p_buffer[1] = 'a';
 
if (command_read == 34)
{
p_buffer[2] = 'c';
p_buffer[3] = 0;
}
if (command_read < 32)
{
p_buffer[2] = 'a';
p_buffer[3] = command_read;
}
 
p_buffer[4] = 0;
p_buffer[5] = 0;
base64_send(6);
if (command_read == 34)
compare = 'D';
else
compare = 'A';
 
do // warten, bis die Parameter gesendet werden
{
if (get_message_debug(command_read) == 1)
timeout = 30;
timeout ++;
}
while (((r_buffer[1] < compare) || (r_buffer[1] > compare)) && (timeout < 30)); // "!=" funktioniert witzigerweise ned
 
if (timeout >= 30)
return 1;
else
return 0;
}
 
#define isminus 65536 / 2
 
void decimal_int (unsigned int data, uint8_t *text) // wandelt Wert in rechtsbündigen Text um
{
int sign = 0;
text[0] = 0x20; // (schneller/kleiner als printf())
if (data > isminus)
{
data = 65536 - data;
sign = 1;
text[0] = '-';
}
 
text[1] = data/10000;
data -= (text[1] * 10000);
text[2] = data/1000;
data -= (text[2] *1000);
 
text[3] = data/100;
data -= (text[3] * 100);
text[4] = data/10;
data -= (text[4] *10);
 
 
text[5] = data + 0x30;
text[1] += 0x30;
text[2] += 0x30;
text[3] += 0x30;
text[4] += 0x30;
 
 
if (text[1] == 0x30)
{
text[0] = 0x20;
if (sign == 1) text[1] = '-'; else text[1] = 0x20;
if (text[2] == 0x30)
{
text[1] = 0x20;
if (sign == 1) text[2] = '-'; else text[2] = 0x20;
if (text[3] == 0x30)
{
text[2] = 0x20;
if (sign == 1) text[3] = '-'; else text[3] = 0x20;
if (text[4] == 0x30)
{
text[3] = 0x20;
if (sign == 1) text[4] = '-'; else text[4] = 0x20;
}
}
}
}
text[6] = 0x00;
}
 
void display_debug(void)
{
uint8_t zeile;
uint8_t text[10];
uint8_t i = 0;
int page = 0;
#define step 7
uint8_t flag = 0;
 
lcd_cls();
zeile = 0;
lcd_printp(PSTR("Debug-Display"),0);
 
for (i=0;i<32;i++)
{
if (read_debug(i) == 1)
{
if (read_debug(i) == 1) // 2mal Probieren
flag = 1;
}
}
 
if (flag == 1)
{
flag = 0;
lcd_printp(PSTR("\r\nTimeout!"),0);
timer = 200;
while (timer > 0);
}
else
{
 
do
{
while (key != 0x00);
if (read_debug(34) == 1) //Debugwerte
{
lcd_printp(PSTR("\r\nTimeout!"),0);
timer = 200;
while (timer > 0);
break;
}
else
{
 
decimal_int(page,text);
// lcd_print_atp(0,6,PSTR("Page"),0);
lcd_print_at(15,0,text,0);
for (i=0;i<step;i++)
{
if ((i + (page * step)) < 32)
{
decimal_int(DebugIn.Analog[i + (page * step)],text);
lcd_print_at(0,i+1,DebugInText[i + (page * step)],0);
lcd_print_at(13,i+1,text,0);
}
else
lcd_print_atp(0,i+1,PSTR(" "),0);
}
 
// decimal_int(DebugIn.Analog[9],text);
// lcd_print_atp(0,7,PSTR("Spannung"),0);
// lcd_print_at(10,7,text,0);
 
timer = 10;
while(timer > 0);
if (key == 0x01)
{
page--;
if (page < 0) page = 0;
}
if (key == 0x02)
{
page++;
if (page > 7) page = 7;
}
} // end else
}
while (key != 0x04); // ESC
} // end else
}
/Transportables_Koptertool/tags/V-0.1.1/debug.h
0,0 → 1,26
#ifndef debug_h
#define debug_h
 
void display_debug(void);
 
struct str_DebugIn
{
unsigned char Digital[2];
signed int Analog[34]; // Debugwerte
};
 
struct str_DebugIn DebugIn;
 
 
//struct str_DebugIn_Text
//{
// unsigned char Texte[16];
//};
 
//struct str_DebugIn_Text DebugInText[32];
 
unsigned char DebugInText[32][16];
 
//extern struct str_DebugIn *p_buffer;
 
#endif
/Transportables_Koptertool/tags/V-0.1.1/displ_val.c
0,0 → 1,83
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "base64.h"
#include "lcd.h"
#include "rs232.h"
 
// Insgesamt 32 Werte können angezeigt werden
// jeweils 8 Stück werden gleichzeitg angezeigt
// Auswahl über Tasten
 
uint8_t displ_page;
 
 
void displ_get_text(uint8_t number)
{
uint8_t text[17];
uint8_t i;
p_buffer[0] = '#';
p_buffer[1] = 'a';
p_buffer[2] = 'a';
p_buffer[3] = number;
p_buffer[4] = 0;
p_buffer[5] = 0;
base64_send(6);
 
do
{
get_message();
}
while (r_buffer[1] != 'A');
 
for (i=0;i<16;i++)
text[i] = p_buffer[i];
text[16] = 0x00;
lcd_print_at(0,(number & 0x07),text,0);
}
 
void displ_values(void)
{
uint8_t displ_page, i;
int16_t value;
uint8_t text[17];
 
displ_page = 0; // Page 0..3 (4 Pages zu je 8 Werte)
lcd_cls(); // LCD löschen
do
{
for (i=0;i<8;i++) // Texte lesen und anzeigen
displ_get_text(i+displ_page*8);
do
{
get_message();
if(r_buffer[1] == 'D')
{
for (i=0;i<8;i++)
{
value = p_buffer[i*2+displ_page*16+2] + 256*p_buffer[i*2+displ_page*16+3];
itoa(value,text,10);
lcd_print_atp(14,i,PSTR(" "),0);
lcd_print_at(14,i,text,0);
}
}
}
while (key == 0x00);
if (key == 0x01)
displ_page++;
if (key == 0x02)
displ_page--;
displ_page &= 0x03;
}
while(key != 0x08);
}
 
/Transportables_Koptertool/tags/V-0.1.1/displ_val.h
0,0 → 1,6
#ifndef displ_val_h
#define displ_val_h
 
void displ_values(void);
 
#endif
/Transportables_Koptertool/tags/V-0.1.1/display.c
0,0 → 1,78
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "lcd.h"
#include "rs232.h"
#include "base64.h"
#include "parameter.h"
#include "menu.h"
 
uint8_t read_display (uint8_t command) //
{
uint8_t timeout;
timeout = 0;
p_buffer[0] = '#'; // Display-Zeile anfordern
p_buffer[1] = 'a';
p_buffer[2] = 'h';
p_buffer[3] = command;
p_buffer[4] = 0;
p_buffer[5] = 0;
base64_send(6);
do // warten, bis die Parameter gesendet werden
{
if (get_message() == 1)
timeout = 10;
timeout ++;
}
while (((r_buffer[1] < '0') || (r_buffer[1] > '4')) && (timeout < 10));
if (timeout >= 10)
return 1;
else
return 0;
}
 
void display_data (void)
{
uint8_t line;
uint8_t text[10];
 
lcd_cls();
lcd_printp(PSTR("Display"),0);
do
{
while (key != 0x00);
if (read_display(0) == 1)
{
lcd_printp(PSTR("\r\nTimeout!"),0);
timer = 200;
while (timer > 0);
break;
}
else
{
line = r_buffer[1];
text[0] = line;
text[1] = 0x00;
lcd_print_at(10,0,text,0);
lcd_print_at(0,line+1,p_buffer,0);
timer = 10;
while(timer > 0);
if (key == 0x01)
read_display(1);
if (key == 0x02)
read_display(2);
}
}
while (key != 0x04);
}
/Transportables_Koptertool/tags/V-0.1.1/display.h
0,0 → 1,6
#ifndef display_h
#define display_h
 
void display_data (void);
 
#endif
/Transportables_Koptertool/tags/V-0.1.1/font8x6.h
0,0 → 1,9
 
#ifndef font8x6_h
#define font8x6_h
 
#include <avr/pgmspace.h>
 
extern prog_uint8_t f8x6[256][6];
 
#endif
/Transportables_Koptertool/tags/V-0.1.1/lcd.c
0,0 → 1,558
 
//#define F_CPU 7372800UL
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
 
#include "font8x6.h"
#include "main.h"
#include "lcd.h"
 
#define DISP_W 128
#define DISP_H 64
// #define LCD_ORIENTATION 0 // 0 MJ Tasten unten / 4 Original Tasten oben
 
 
uint8_t lcd_xpos;
uint8_t lcd_ypos;
//volatile uint8_t display_buffer[1024]; // Display-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
 
 
void send_byte (uint8_t data)
{
clr_cs();
SPDR = data;
while(!(SPSR & (1<<SPIF)));
SPSR = SPSR;
set_cs();
}
 
void cls (void)
{
uint16_t i,j;
for (i=0;i<1024;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 (void)
{
cls();
}
 
void wait_1ms(void)
{
_delay_ms (1.0);
}
 
void wait_ms (uint16_t time)
{
uint16_t i;
for (i=0; i<time; i++)
wait_1ms();
}
 
void lcd_init (void)
{
lcd_xpos = 0;
lcd_ypos = 0;
 
DDRB = 0xFF;
SPCR = (1<<SPE)|(1<<MSTR)|(1<<CPHA)|(1<<CPOL)|(1<<SPR1);
set_cs();
clr_reset();
wait_ms(10);
set_reset();
clr_cs();
clr_A0();
send_byte(0x40);
 
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)
}
send_byte(0xA6);
send_byte(0xA2);
send_byte(0x2F);
send_byte(0xF8);
send_byte(0x00);
send_byte(0x27);
send_byte(0x81);
send_byte(0x16);
send_byte(0xAC);
send_byte(0x00);
send_byte(0xAF);
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) + 4; Wenn gedreht
// column = (adress & 0x7F);
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);
}
}
 
//
// x,y = character-Pos. !
//
// mode: 0=Overwrite, 1 = OR, 2 = XOR, 3 = AND, 4 = Delete
void put_char (uint8_t x, uint8_t y, uint8_t c, uint8_t mode)
{
uint8_t ch;
uint8_t i;
uint16_t adress;
 
switch(c)
{
case 'ä':
c = 0x84;
break;
case 'ö':
c = 0x94;
break;
case 'ü':
c = 0x81;
break;
case 'Ä':
c = 0x8E;
break;
case 'Ö':
c = 0x99;
break;
case 'Ü':
c = 0x9A;
break;
case 'ß':
c = 0xE1;
break;
}
adress = y*128 + x*6;
adress &= 0x3FF;
for (i=0;i<6;i++)
{
ch = pgm_read_byte (&f8x6[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]);
}
}
 
void new_line (void)
{
lcd_ypos++;
if (lcd_ypos > 7)
{
scroll();
lcd_ypos = 7;
}
}
 
 
void lcd_printp (const char *text, uint8_t mode)
{
while (pgm_read_byte(text))
{
if (pgm_read_byte(text) > 0x1F)
{
put_char(lcd_xpos,lcd_ypos,pgm_read_byte(text++),mode);
lcd_xpos++;
if (lcd_xpos > 20)
{
lcd_xpos = 0;
new_line();
}
}
else
{
switch (pgm_read_byte(text))
{
case 0x0D:
lcd_xpos = 0;
break;
case 0x0A:
new_line();
break;
}
text++;
}
}
}
 
void lcd_print_atp (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)
{
if (*text > 0x1F)
{
put_char(lcd_xpos,lcd_ypos,*text++,mode);
lcd_xpos++;
if (lcd_xpos > 20)
{
lcd_xpos = 0;
new_line();
}
}
else
{
switch (*text)
{
case 0x0D:
lcd_xpos = 0;
break;
case 0x0A:
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);
}
 
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + 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 < 128) && (ypos < 64))
{
adress = (ypos/8) * 128 + xpos; // adress = 0/8 * 128 + 0 = 0
mask = 1<<(ypos & 0x07); // mask = 1<<0 = 1
adress &= 0x3FF;
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 draw_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 draw_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);
}
}
/Transportables_Koptertool/tags/V-0.1.1/lcd.h
0,0 → 1,27
 
#ifndef graphics_h
#define graphics_h
 
void lcd_init (void);
void lcd_plot (uint8_t x, uint8_t y, 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 x2, uint8_t y2, uint8_t mode);
void draw_circle(int16_t x0, int16_t y0, int16_t radius, uint8_t mode);
void draw_fcircle(int16_t x0, int16_t y0, int16_t radius);
void put_char (uint8_t x, uint8_t y, uint8_t c, uint8_t mode);
void lcd_line(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, 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_print_atp (uint8_t x, uint8_t y, const char *text, uint8_t mode);
void lcd_cls (void);
 
volatile uint8_t display_buffer[1024]; // Display-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;
 
#endif
/Transportables_Koptertool/tags/V-0.1.1/main.c
0,0 → 1,88
/*
Mobiles Mikrokopter-Tool
+++++ BETA 0.1 +++++
Diese Software ist Open-Source und darf nicht für kommerzielle Zwecke verwendet werden.
Die Software darf kopiert, verändert und weitergegeben werden, unter der Bedingung,
dass immer der komplette Source inklusive dieser Lizenz weitergegeben wird.
Für den LCD-Font gilt das dort angegebene Copyright.
(C) 2008 Thomas Kaiser, thomas@ft-fanpage.de
 
Die Software wird "so wie sie ist" geliefert.
Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion.
Benutzung auf eigene Gefahr.
Ich übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden.
Dies gilt insbesondere für die vorliegende Beta-Version.
 
Teile des Source (z.B. die base64-Funktionen) sind abgewandelte Funktionen aus dem Mikrokopter-Source,
siehe http://www.mikrokopter.de
 
*/
 
//#define F_CPU 7378200ul
 
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "lcd.h"
#include "rs232.h"
#include "parameter.h"
#include "menu.h"
#include "display.h"
#include "base64.h"
#include "timer.h"
 
unsigned char EEPromArray[E2END+1] EEMEM;
 
void ReadParameter(void)
{
// unsigned char *buffer;
 
LCD_ORIENTATION = eeprom_read_byte(&EEPromArray[EEPROM_ADR_ORIENTATION]);
 
// set = eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET]);
// if (number > 5) number = 5;
// eeprom_read_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length);
}
 
void WriteParameterset(void)
{
 
eeprom_write_byte(&EEPromArray[EEPROM_ADR_VALID], 1);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ORIENTATION], 0);
 
// if(number > 5) number = 5;
// eeprom_write_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length);
// eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], number); // diesen Parametersatz als aktuell merken
}
 
 
int main (void)
{
PORTA = 0xFF; // unbenutzte Pins auf Pull-Up
PORTB = 0x43;
PORTC = 0xFC;
PORTD = 0x7C;
DDRC = 0x03; // Pins für Beleuchtung auf Ausgang
DDRD = 0x80;
 
if ((eeprom_read_byte(&EEPromArray[EEPROM_ADR_VALID])) != 1)
WriteParameterset();
 
ReadParameter();
// LCD_ORIENTATION = 0;
 
lcd_init();
RS232_init();
timer_init();
sei();
 
for (;;)
main_menu();
}
/Transportables_Koptertool/tags/V-0.1.1/main.h
0,0 → 1,47
 
#ifndef main_h
#define main_h
 
#include <avr/eeprom.h>
 
#define set_cs() PORTB |= (1<<4)
#define clr_cs() PORTB &=~(1<<4)
#define set_reset() PORTB |= (1<<2)
#define clr_reset() PORTB &=~(1<<2)
#define set_A0() PORTB |= (1<<3) // Data
#define clr_A0() PORTB &=~(1<<3) // Command
#define set_scl() PORTB |= (1<<7)
#define clr_scl() PORTB &=~(1<<7)
#define set_si() PORTB |= (1<<5)
#define clr_si() PORTB &=~(1<<5)
 
#define key_enter 0x08
#define key_esc 0x04
#define key_plus 0x02
#define key_minus 0x01
#define key_nokey 0x00
 
//#define SYSCLK F_CPU
 
extern uint8_t r_buffer[129];
extern uint8_t p_buffer[129];
//extern struct str_DebugIn *p_buffer;
 
extern volatile uint8_t key;
 
extern volatile uint8_t timer;
extern volatile uint8_t rs232_timer;
 
#endif
 
//#define EEPROM_ADR_VALID 1
 
#define EEPROM_ADR_VALID 1
#define EEPROM_ADR_ORIENTATION 2
 
 
extern unsigned char EEPromArray[];
 
#ifndef EEMEM
#define EEMEM __attribute__ ((section (".eeprom")))
#endif
/Transportables_Koptertool/tags/V-0.1.1/makefile
0,0 → 1,414
# WinAVR Sample makefile written by Eric B. Weddington, Jörg Wunsch, et al.
# Released to the Public Domain
# Please read the make user manual!
#
# Additional material for this makefile was submitted by:
# Tim Henigan
# Peter Fleury
# Reiner Patommel
# Sander Pool
# Frederik Rouleau
# Markus Pfaff
#
# On command line:
#
# make all = Make software.
#
# make clean = Clean out built project files.
#
# make coff = Convert ELF to AVR COFF (for use with AVR Studio 3.x or VMLAB).
#
# make extcoff = Convert ELF to AVR Extended COFF (for use with AVR Studio
# 4.07 or greater).
#
# make program = Download the hex file to the device, using avrdude. Please
# customize the avrdude settings below first!
#
# make filename.s = Just compile filename.c into the assembler code only
#
# To rebuild project do "make clean" then "make all".
#
 
 
# MCU name
MCU = atmega32
 
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
 
#put the name of the target file here (without extension)
# TARGET = main
TARGET = MMT
 
#put your C sourcefiles here
# SRC = circle.c F8x8b.c F8x8a.c F8x6.c f8x8fv.c f8x6fv.c f6x5fv.c f6x4fv.c fontsoft.c serial.c paul.c bitmap.c demo.c draw.c F16x8a.c F16x8b.c F16x8c.c t6963.c $(TARGET).c
SRC = $(TARGET).c timer.c lcd.c F8X6.c rs232.c base64.c displ_val.c parameter.c menu.c display.c motortest.c
 
# 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 = $(TARGET).c
 
# If there is more than one source file, append them above, or modify and
# uncomment the following:
#SRC += foo.c bar.c
 
# You can also wrap lines by appending a backslash to the end of the line:
#SRC += baz.c \
#xyzzy.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 = -g -O$(OPT) \
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
-Wall -Wstrict-prototypes \
-Wa,-adhlns=$(<:.c=.lst) \
$(patsubst %,-I%,$(EXTRAINCDIRS))
 
 
# Set a "language standard" compiler flag.
# Unremark just one line below to set the language standard to use.
# gnu99 = C99 + GNU extensions. See GCC manual for more information.
#CFLAGS += -std=c89
#CFLAGS += -std=gnu89
#CFLAGS += -std=c99
CFLAGS += -std=gnu99
 
 
 
# 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
 
 
 
 
# Programming support using avrdude. Settings and variables.
 
# Programming hardware: alf avr910 avrisp bascom bsd
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
#
# Type: avrdude -c ?
# to get a full listing.
#
AVRDUDE_PROGRAMMER = avr911
 
 
AVRDUDE_PORT = com4 # programmer connected to serial device
#AVRDUDE_PORT = lpt1 # programmer connected to parallel port
 
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
 
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) -b 115200 -F
 
# 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 = F:/Eigene Dateien/Controller/winavr
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = .
DIRLIB = $(DIRAVR)/avr/lib
 
 
# Defines 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
 
 
 
# 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 = $(ASRC:.S=.lst) $(SRC:.c=.lst)
 
# Combine all necessary flags and optional flags.
# Add target processor to flags.
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
 
 
 
# Programming support using ponyprog. Settings and variables.
#PONYPROG= ponyprog2000.exe
#PONYPROG= C:\Programme\ponyprog2000\ponyprog2000.exe
# Program the device.
#program: $(TARGET).hex $(TARGET).eep
# echo -e "SELECTDEVICE $(MCU)\nLOAD-PROG $(TARGET).hex\n#LOAD-DATA $(TARGET).eep\nWRITE-PROG" >isp.e2s
# $(PONYPROG) isp.e2s
 
program: $(TARGET).hex $(TARGET).eep
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 
 
 
 
# 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)
 
 
# 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 program
 
/Transportables_Koptertool/tags/V-0.1.1/menu.c
0,0 → 1,91
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "lcd.h"
#include "rs232.h"
#include "base64.h"
#include "parameter.h"
#include "menu.h"
#include "display.h"
#include "motortest.h"
#include "debug.h"
#include "settings.h"
 
 
// Subroutine für den Stern (*) bzw. Cursor
 
void menu_set_cursor (uint8_t before, uint8_t line, uint8_t pos)
{
lcd_print_atp(pos,before,PSTR(" "),0); // Die vorhergehende Position löschen
lcd_print_atp(pos,line,PSTR("*"),0); // Den Cursor an der aktuellen Position anzeigen
}
 
 
// Zeigt einen Stern (*) an der x-Position <pos> an, y-Position von min bis max.
// Mit der +/- Taste kann ein Menü-Punkt ausgewählt und mit (Enter) bestätigt werden.
// Die Zeilennummer des aktuellen Menüpunkts wird zurückgegeben.
 
uint8_t menu_choose (uint8_t min, uint8_t max, uint8_t pos)
{
uint8_t line, before;
line = min;
before = min;
menu_set_cursor(line,line,pos);
do
{
while (key != key_nokey);
while(key == key_nokey);
if ((key == key_plus) && (line < max))
line ++;
if ((key == key_minus) && (line > min))
line --;
 
menu_set_cursor(before,line,pos);
before = line;
}
while ((key != key_enter) && (key != key_esc)); // Schleife wiederholen, bis (Enter) / Esc gedrückt wurde
if (key == key_esc)
line = 255;
while (key != key_nokey); // Warten, bis Taste wieder losgelassen wurde
return line;
}
 
void main_menu (void)
{
lcd_cls();
lcd_printp(PSTR("Portables Koptertool\r\n"),0);
lcd_printp(PSTR(" Hauptmenü (V0.1.1)\r\n"),0);
lcd_printp(PSTR(" Display\r\n"),0);
lcd_printp(PSTR(" Parameter\r\n"),0);
lcd_printp(PSTR(" Motortest\r\n"),0);
lcd_printp(PSTR(" Debug Daten\r\n"),0);
lcd_printp(PSTR(" Settings\r\n"),0);
lcd_printp(PSTR("Mod by Mikeljo 05/08"),0);
 
switch(menu_choose(2,6,15))
{
case 2:
display_data(); // LCD-Modus
break;
case 3:
edit_parameter(); // Parameter (Settings) laden/editieren
break;
case 4:
motor_test(); // primitiver Motor-Test
break;
case 5:
display_debug(); // Debug Daten
break;
case 6:
LCD_settings(); // Einstellungen
break;
}
}
/Transportables_Koptertool/tags/V-0.1.1/menu.h
0,0 → 1,7
#ifndef menu_h
#define menu_h
 
void main_menu (void);
uint8_t menu_choose (uint8_t min, uint8_t max, uint8_t pos);
 
#endif
/Transportables_Koptertool/tags/V-0.1.1/motortest.c
0,0 → 1,52
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "motortest.h"
#include "lcd.h"
#include "base64.h"
 
void motor_test(void)
{
lcd_cls();
 
while (key != 0x00);
 
lcd_printp(PSTR("Taste drücken\r\n"),0);
while (key == 0x00);
if (key == 0x08) // nur, wenn die Bestätigungstaste gedrückt wird
{
p_buffer[0] = '#'; // Motoren einschalten
p_buffer[1] = 'a';
p_buffer[2] = 't';
p_buffer[3] = 10;
p_buffer[4] = 10;
p_buffer[5] = 10;
p_buffer[6] = 10;
p_buffer[7] = 0;
p_buffer[8] = 0;
 
base64_send(9);
}
while (key != 0x00);
while (key == 0x00);
p_buffer[0] = '#'; // Motoren ausschalten
p_buffer[1] = 'a';
p_buffer[2] = 't';
p_buffer[3] = 0;
p_buffer[4] = 0;
p_buffer[5] = 0;
p_buffer[6] = 0;
p_buffer[7] = 0;
p_buffer[8] = 0;
 
base64_send(9);
}
/Transportables_Koptertool/tags/V-0.1.1/motortest.h
0,0 → 1,6
#ifndef motortest_h
#define motortest_h
 
void motor_test(void);
 
#endif
/Transportables_Koptertool/tags/V-0.1.1/parameter.c
0,0 → 1,556
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "lcd.h"
#include "rs232.h"
#include "base64.h"
#include "parameter.h"
#include "menu.h"
 
uint8_t array[8];
 
prog_uchar p_menus[12][11]=
{
"Config ",
"Channels ",
"Stick ",
"Hoehe ",
"Gyro ",
"Looping ",
"Camera ",
"Sonstiges ",
"User ",
"Coupling ",
"Config(2) ",
"Loopingset"
};
 
 
// Diese Tabelle ordnet die eingelesenen Parameter den Menü-Seiten zu
 
prog_uchar p_menu_number[67]=
{
2,2,2,2,2,2,2,2, // Die ersten 8 Parameter werden auf Menüseite 2 angezeigt (=Kanalzuordnungen)
0,4,4,4,4,4,4,3,
3,3,8,8,8,8,5,5,
8,8,8,0,5,9,9,9,
9,7,7,7,7,7,7,6,
6,6,10,10,6,6,5,5,
5,9,9,9,9,0,7,11,
11,11,11,12,12, 12,
12,12,12,12,12
 
};
 
prog_uchar p_limits[199]= // Limits für die Parameter
{
1,8,2, // 2:Nick (3)
1,8,2, // 2:Roll (4)
1,8,2, // 2:Gas (2)
1,8,2, // 2:Gier (1)
1,8,2, // 2:Poti1 (6)
1,8,2, // 2:Poti2 (6)
1,8,2, // 2:Poti3 (7)
1,8,2, // 2:Poti4 (5)
0,0,0, // 1:Config
0,255,4, // 4:Höhe MinGas (30)
0,255,4, // 4:Luftdruck_D (30)
0,255,4, // 4:MaxHöhe (Setpoint?) (Poti4)
0,255,4, // 4:Höhe_P (10)
0,50,4, // 4:Höhe Verstärkung (3)
0,255,4, // 4:Höhe Z-acc (30)
0,6,3, // 3:Nick/Roll P (3)
0,64,3, // 3:Nick/Roll D (4)
0,20,3, // 3:Gier_P (6)
0,32,8, // 8:Min.Gas (15)
33,250,8, // 8:Max.Gas (250)
0,50,8, // 5:Gyro-Acc Faktor (30)
0,255,8, // 8:Kompass-Wirkung (128)
0,0,5, // 5:Gyro-P (80)
0,0,5, // 5:Gyro-I (120)
0,250,8, // 8:Unterspannung (94)
0,250,8, // 8:Not-Gas Zeit (20)
0,250,8, // 8:Not-Gas (35)
0,1,0, // Ufo-Ausrichtung (X +)
0,255,5, // I-Faktor (32)
0,255,9, // 9:User1 (80)
0,255,9, // 9:User2 (0)
0,255,9, // 9:User3
0,255,9, // 9:User4
0,255,7, // 7:Servo Nick Control (100)
0,250,7, // 7:Servo Nick Compensation (40)
0,250,7, // 7:Servo Nick min (50)
0,250,7, // 7:Servo Nick max (150)
0,25,7, // 7:Servo Nick refrsh (5)
0,255,6, // 6:Loop Gas Limit (50)
0,250,6, // 6:Loop Ansprechschwelle (90)
0,250,6, // 6:Loop Hysterese (50)
0,255,10, // 10:Achskopplung (90)
0,255,10, // 10:Achsgegenkopplung (5)
0,250,6, // 6:Turnover Nick (100)
0,250,6, // 6:Turnover Roll (100)
0,250,5, // 5: Gyro-Abgleich (Comp.) (32)
0,250,5, // 5: Drift (4)
0,255,5, // 5: Dynamic stability (75)
0,255,9, // 9:User5
0,255,9, // 9:User6
0,255,9, // 9:User7
0,255,9, // 9:User8 (0)
 
0,0,1, // 6:Loop Config (0)
0,1,7 // 7:Servo Nick Compensation Invert (0)
};
 
prog_char bin_parameter[12][16] = // Die binär kodierten Parametern werden getrennt behandelt.
{
"Loop up ",
"Loop down ",
"Loop left ",
"Loop right ",
"Höhenregler ", // 8
"Höhenschalter ",
"Headhold ",
"Kompass ",
"KompassFix ",
"GPS ",
"Achsenkopplung ",
"Drehrate "
};
 
prog_char parameter[54][16]=
{
"Nick ", // 0 (3)
"Roll ", // 1 (4)
"Gas ", // (2)
"Gier ", // (1)
"Poti1 ", // (6)
"Poti2 ", // (6)
"Poti3 ", // (7)
"Poti4 ", // 7 (5)
"Config ", // 8
"Hoehe_MinGas ", // 9 (30)
"Luftdruck_D ", // 10 Wert : 0-250 (30)
"MaxHoehe ", // 11 Wert : 0-250 251 -> Poti1 (Poti4)
"Hoehe_P ", // 12 Wert : 0-32 (10)
"Hoehe_Verstaerk", // 13 Wert : 0-50
"Hoehe_ACC_Wirk.", // 14 Wert : 0-250 (30)
"Stick_P ", // 15 Wert : 1-6
"Stick_D ", // 16 Wert : 0-64
"Gier_P ", // 17 Wert : 1-20 POTI(?)
"Gas_Min ", // 17 Wert : 0-32
"Gas_Max ", // 18 Wert : 33-250
"GyroAccFaktor ", // 19 Wert : 1-64
"KompassWirkung ", // 20 Wert : 0-250
"Gyro_P ", // 21 Wert : 0-250
"Gyro_I ", // 22 Wert : 0-250
"Unterspannung ", // 23 Wert : 0-250
"NotGas ", // 24 Wert : 0-250 // Gaswert bei Empangsverlust
"NotGasZeit ", // 25 Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
"UfoAusrichtung ", // 26 X oder + Formation
"I_Faktor ", // 27 = 32;
"UserParam1 ", // 28 = 32 * 4; //zur freien Verwendung
"UserParam2 ", // 29 zur freien Verwendung
"UserParam3 ", // 30 zur freien Verwendung
"UserParam4 ", // 31 zur freien Verwendung
"ServoNickCtrl ", // 32 Wert : 0-250 // Stellung des Servos
"ServoNickComp ", // 33 Wert : 0-250 // Einfluss Gyro/Servo
"ServoNickMin ", // 34 Wert : 0-250 // Anschlag
"ServoNickMax ", // 35 Wert : 0-250 // Anschlag
"ServoNickRefrsh", // 36
"LoopGasLimit ", // 37
"LoopThreshold ", // 38 Wert: 0-250 Schwelle für Stickausschlag
"LoopHysterese ", // 39
"AchsKopplung ", // 40
"AchsGegenKoppl.", // 41
"WinklUmschlNick", // 42
"WinklUmschlRoll", // 43
"GyroAccAbgleich", // 44 1/k
"Driftkomp ", // 45
"DynamicStabilit", // 47
"UserParam5 ", // 48 zur freien Verwendung
"UserParam6 ", // 49 zur freien Verwendung
"UserParam7 ", // 50 zur freien Verwendung
"UserParam8 ", // 51 zur freien Verwendung
"LoopConfig ", // 52 Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
"ServoNickCompIn" // 53 Wert : 0-250 // Richtung Einfluss Gyro/Servo
// "Name " // 54
};
 
 
// Parameter lesen, editieren und zurückschreiben
 
uint8_t read_parameter (uint8_t number) // Number = Parameter-Set#
{
uint8_t timeout;
timeout = 0;
p_buffer[0] = '#'; // Parameter anfordern
p_buffer[1] = 'a';
p_buffer[2] = 'q';
p_buffer[3] = number;
p_buffer[4] = 0;
p_buffer[5] = 0;
base64_send(6);
 
do // warten, bis die Parameter gesendet werden
{
if (get_message() == 1) // Fehler bei der Übertragung?
timeout = 30; // Timeout sofort auf Endwert setzen
timeout ++;
}
while (((r_buffer[1] < 'L') || (r_buffer[1] > 'P')) && (timeout < 30)); // warten, bis Parameter empfangen wurden oder ein Timeout auftrat
if (timeout >= 30) // Wenn ein Timeout (=Fehler) auftrat, eine 1 zurückgeben, ansonsten 0
return 1;
else
return 0;
}
 
void write_parameter(uint8_t number) // Schreibe Parameter-Satz
{
uint8_t i;
if (number <= 5)
{
 
for (i=0;i<71;i++) // Den gesamten Parameter-Puffer um 3 Bytes nach hinten verschieben
p_buffer[(70-i)+3] = p_buffer[70-i];
p_buffer[0] = '#'; // Befehl zum Schreiben der Parameter
p_buffer[1] = 'a';
p_buffer[2] = number + 'k'; // Nummer des Parameters
p_buffer[74] = 0;
base64_send(75); // Parameter in base64 kodieren und senden, 75 Bytes
}
}
 
void binary (uint8_t data, uint8_t *feld) // Wandelt eine 8-Bit Zahl in eine Binärzahl um (Array mit 8 Elementen)
{ // Wird für die Flags (Loop + Grundkonfiguration) benötigt
uint8_t i;
i=0;
for (i=0;i<8;i++)
{
if ((1<<i) & data)
feld[i] = 1;
else
feld[i] = 0;
}
}
 
uint8_t bindec (uint8_t *feld) // wandelt eine Binärzahl (im Array) in eine 8-Bit Zahl
{ // Wird für die Flags (Loop + Grundkonfiguration) benötigt
uint8_t i;
uint8_t result;
result = 0;
for (i=0;i<8;i++)
{
if (feld[i] == 1)
result += 1<<i;
}
return result;
}
 
 
 
 
void decimal (uint8_t data, uint8_t *text) // wandelt Wert in rechtsbündigen Text um
{ // (schneller/kleiner als printf())
text[0] = data/100;
data -= (text[0] * 100);
text[1] = data/10;
data -= (text[1] *10);
text[2] = data + 0x30;
text[0] += 0x30;
text[1] += 0x30;
 
if (text[0] == 0x30)
{
text[0] = 0x20;
if (text[1] == 0x30)
text[1] = 0x20;
}
text[3] = 0x00;
}
 
uint8_t show_parameter (uint8_t number) // Zeigt eine Parameter-Seite an und gibt die ausgewählte Zeile zurück
{
uint8_t i;
uint8_t line;
uint8_t text[25];
uint8_t bin[8];
line = 0;
if (number > 1)
{
for (i = 0; i<66; i++)
{
if (pgm_read_byte(p_limits+i*3+2) == number)
{
array[line] = i;
decimal(p_buffer[i],text);
lcd_print_at(0,line,text,0);
lcd_print_atp(5,line,parameter[i],0);
if (line <= 7)
line++;
}
}
}
else
{ // Sonderfälle: Binäre Eingabe
if (number == 1)
{
binary(p_buffer[52],bin); // Loop-Config
text[1] = 0x00;
for (i=0;i<4;i++)
{
text[0] = bin[i] + 0x30;
lcd_print_at(0,i,text,0);
lcd_print_atp(5,i,bin_parameter[i],0);
}
}
if (number == 0)
{
binary(p_buffer[8],bin); // Config
text[1] = 0x00;
for (i=0;i<8;i++)
{
text[0] = bin[i] + 0x30;
lcd_print_at(0,i,text,0);
lcd_print_atp(5,i,bin_parameter[i+4],0);
}
}
 
}
return line;
}
 
void edit_parameter2 (uint8_t page, uint8_t lines) // Ändern der Parameter einer Seite
{
uint8_t line;
uint8_t par;
uint8_t min;
uint8_t max;
uint8_t text[10];
uint8_t bin[8];
if (page > 1) // "normale" Parameter-Seiten
{
line = menu_choose(0,lines-1,4);
if (line != 255) // Wenn line == 255, wurde Escape gedrückt
{
par = p_buffer[array[line]];
min = pgm_read_byte(p_limits + par * 3);
max = pgm_read_byte(p_limits + par * 3 + 1);
lcd_print_atp(4,line,PSTR("-"),0);
while (key != key_nokey);
do
{
if (key == key_minus)
{
//if (par > min) // Überprüfung der Parameter auf Bereichsüberschreitung derzeit deaktiviert
par --;
}
if (key == key_plus)
{
//if (par < max)
par ++;
}
decimal(par,text);
lcd_print_at(0,line,text,0);
timer = 20;
while (timer > 0);
}
while ((key != 0x04) && (key != 0x08));
if (key == 0x08)
p_buffer[array[line]] = par;
}
}
if (page == 1) // Spezialfall: Loop-Config (einzelne Bits setzen / löschen)
{
binary(p_buffer[52],bin);
text[1] = 0x00;
 
line = menu_choose(0,3,4);
if (line != 255) // Wenn line == 255, wurde Escape gedrückt
{
par = bin[line];
lcd_print_atp(4,line,PSTR("-"),0);
do
{
if (key == key_minus)
{
par = 0x00;
}
if (key == key_plus)
{
par = 0x01;
}
text[0] = par+0x30;
lcd_print_at(0,line,text,0);
timer = 20;
while (timer > 0);
}
while ((key != key_enter) && (key != key_esc));
if (key == key_enter)
{
bin[line] = par;
p_buffer[52] = bindec(bin);
}
lcd_cls();
decimal(p_buffer[52],text);
lcd_print(text,0);
timer = 200;
while(timer > 0);
}
}
if (page == 0) // Spezialfall: Allgemeine Konfiguration (einzelne Bits setzen/löschen)
{
binary(p_buffer[8],bin);
text[1] = 0x00;
 
line = menu_choose(0,7,4);
if (line != 255) // Wenn line == 255, wurde Escape gedrückt
{
par = bin[line];
lcd_print_atp(4,line,PSTR("-"),0);
do
{
if (key == key_minus)
{
par = 0x00;
}
if (key == key_plus)
{
par = 0x01;
}
text[0] = par+0x30;
lcd_print_at(0,line,text,0);
timer = 20;
while (timer > 0);
}
while ((key != key_enter) && (key != key_esc));
if (key == key_enter)
{
bin[line] = par;
p_buffer[8] = bindec(bin);
}
lcd_cls();
decimal(p_buffer[8],text);
lcd_print(text,0);
timer = 200;
while(timer > 0);
}
}
}
 
 
void edit_parameter (void) // Blättert die Parameter seitenweise durch, Einsprung vom Hauptmenü
{
uint8_t page; // 12 Pages
uint8_t text[15];
uint8_t lines;
uint8_t parameter;
lcd_cls();
lcd_printp(PSTR("Lade Parameter\r\n"),0);
lcd_printp(PSTR(" 1:\r\n"),0);
lcd_printp(PSTR(" 2:\r\n"),0);
lcd_printp(PSTR(" 3:\r\n"),0);
lcd_printp(PSTR(" 4:\r\n"),0);
lcd_printp(PSTR(" 5:\r\n"),0);
parameter = menu_choose(1,5,0);
 
page = 2;
if (read_parameter(parameter) == 1)
{
lcd_print_atp(0,6,PSTR("Timeout"),0);
}
else
{
do
{
lcd_cls();
utoa(page,text,10);
lcd_print(text,0);
timer = 50;
while (timer > 0);
lcd_cls();
lines = show_parameter(page);
while (key == key_nokey);
if (key == key_plus)
page++;
if (key == key_minus)
page--;
if (page == 255)
page = 12;
if (page > 12)
page = 0;
if (key == key_enter)
edit_parameter2(page,lines);
}
while (key != key_esc);
lcd_cls();
lcd_printp(PSTR("Parameter speichern?\r\n ja\r\n nein"),0);
lines = menu_choose(1,2,0);
if (lines == 1 )
{
lcd_printp(PSTR("\r\n--->"),0);
write_parameter(5); // Sicherheitshalber wird derzeit ausschließlich auf Parametersatz 5 gesichert.
lcd_printp(PSTR("\r\nParameter gespeichert"),0);
}
else
{
lcd_printp(PSTR("\r\nNicht gespeichert"),0);
}
}
timer = 100;
while(timer > 0);
 
}
/Transportables_Koptertool/tags/V-0.1.1/parameter.h
0,0 → 1,7
#ifndef parameter_h
#define parameter_h
 
void edit_parameter (void);
void decimal (uint8_t data, uint8_t *text);
 
#endif
/Transportables_Koptertool/tags/V-0.1.1/rs232.c
0,0 → 1,60
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/interrupt.h>
#include "main.h"
#include "rs232.h"
 
volatile uint8_t read_index, write_index;
volatile uint8_t rs232_buffer[16];
 
ISR(USART_RXC_vect)
{
rs232_buffer[write_index++] = UDR;
write_index &= 15;
}
 
void RS232_init (void)
{
UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
// UBRRL = 7; // 57600 Baud @ 7,372800 MHz
// UBRR = 7; // 57600 Baud @ 7,372800 MHz
 
UBRR=(F_CPU / (BAUD_RATE * 16L) - 1);
}
 
uint8_t RS232_get (void)
{
uint8_t c;
 
rs232_timer = 10;
while ((read_index == write_index) && (rs232_timer > 0));
if (rs232_timer != 0)
{
c = rs232_buffer[read_index++];
read_index &= 15;
}
else
{
c=0;
}
return c;
}
void RS232_send (uint8_t data)
{
// while ((UCSRA & (1<<UDRE)) == 0);
while ((USR & (1<<UDRE)) == 0);
UDR = data;
}
void RS232_text (uint8_t *text)
{
while (*text)
{
RS232_send(*text);
text++;
}
}
 
 
/Transportables_Koptertool/tags/V-0.1.1/rs232.h
0,0 → 1,67
#ifndef rs232_h
#define rs232_h
 
void RS232_init (void);
uint8_t RS232_get (void);
void RS232_send (uint8_t data);
void RS232_text (uint8_t *text);
 
#define BAUD_RATE 57600 //Baud Rate für die Serielle Schnittstelle
#endif
 
//Anpassen der seriellen Schnittstellen Register wenn ein ATMega128 benutzt wird
#if defined (__AVR_ATmega128__)
#define USR UCSR0A
#define UCR UCSR0B
#define UDR UDR0
#define UBRR UBRR0L
#define EICR EICRB
#endif
 
#if defined (__AVR_ATmega32__)
#define USR UCSRA
#define UCR UCSRB
#define UBRR UBRRL
#define EICR EICRB
#define INT_VEC_RX SIG_UART_RECV
#define INT_VEC_TX SIG_UART_TRANS
#endif
 
#if defined (__AVR_ATmega644__)
#define USR UCSR0A
#define UCR UCSR0B
#define UDR UDR0
#define UBRR UBRR0L
#define EICR EICR0B
#define TXEN TXEN0
#define RXEN RXEN0
#define RXCIE RXCIE0
#define TXCIE TXCIE0
#define U2X U2X0
#define UCSRB UCSR0B
#define UDRE UDRE0
#define INT_VEC_RX SIG_USART_RECV
#define INT_VEC_TX SIG_USART_TRANS
 
#define USART_RXC_vect SIG_USART_RECV
#endif
 
#if defined (__AVR_ATmega644P__)
#define USR UCSR0A
#define UCR UCSR0B
#define UDR UDR0
#define UBRR UBRR0L
#define EICR EICR0B
#define TXEN TXEN0
#define RXEN RXEN0
#define RXCIE RXCIE0
#define TXCIE TXCIE0
#define U2X U2X0
#define UCSRB UCSR0B
#define UDRE UDRE0
#define INT_VEC_RX SIG_USART_RECV
#define INT_VEC_TX SIG_USART_TRANS
 
#define USART_RXC_vect SIG_USART_RECV
#endif
/Transportables_Koptertool/tags/V-0.1.1/settings.c
0,0 → 1,70
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
 
#include "main.h"
#include "menu.h"
#include "lcd.h"
#include "settings.h"
 
 
void toggle_display(void)
{
cli();
 
if (LCD_ORIENTATION == 0)
LCD_ORIENTATION = 4;
else LCD_ORIENTATION = 0;
 
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ORIENTATION], LCD_ORIENTATION);
 
lcd_init();
 
sei();
}
 
void LCD_settings(void)
{
 
// uint8_t parameter;
 
char loop = 1;
 
while(loop)
{
lcd_cls();
lcd_printp(PSTR("Einstellungen:\r\n"),0);
lcd_printp(PSTR("\r\n"),0);
lcd_printp(PSTR("Orientierung\r\n"),0);
lcd_printp(PSTR("Linie\r\n"),0);
lcd_printp(PSTR("Rechteck\r\n"),0);
// lcd_printp(PSTR("\r\n"),0);
lcd_printp(PSTR("Exit\r\n"),0);
// parameter = menu_choose(1,5,0);
 
switch(menu_choose(2,5,15))
{
case 2:
toggle_display(); // LCD-Modus
break;
case 3:
lcd_cls();
lcd_line(10,20,100,50, 1);
while ((key != key_enter) && (key != key_esc));
break;
case 4:
lcd_cls();
lcd_rect (10,20,100,40, 1);
while ((key != key_enter) && (key != key_esc));
break;
case 5:
loop = 0;
break;
default:
loop = 0;
break;
}
}
}
/Transportables_Koptertool/tags/V-0.1.1/settings.h
0,0 → 1,9
void LCD_settings(void);
 
#if defined (__AVR_ATmega32__)
#endif
 
#if defined (__AVR_ATmega644__)
 
#endif
/Transportables_Koptertool/tags/V-0.1.1/timer.c
0,0 → 1,41
 
#include <avr/io.h>
#include <avr/interrupt.h>
#include "main.h"
#include "timer.h"
 
volatile uint8_t timer;
volatile uint8_t counter, counter2;
volatile uint8_t key;
volatile uint8_t rs232_timer;
 
 
ISR(SIG_OUTPUT_COMPARE0) // Timer-Interrupt (100 Hz)
{
if (counter > 0)
counter --;
else
{
counter = 10;
key = (~PINA >> 4) & 0x0F;
counter2 ++;
}
if (timer > 0)
timer --;
if (rs232_timer > 0)
rs232_timer --;
}
 
void timer_init (void)
{
TCCR0 = (1<<CS02)|(1<<CS00)|(1<<WGM01); // Prescaler 1024
// OCR0 = 72; // Interrupt 100Hz für 7,372800 MHz-Quarz
 
// OCR0 = (F_CPU / ( 100 * 2 * 1024)) -1 ;
OCR0 = (F_CPU / ( 100L * 1024L)) ;
 
TIMSK |= (1<<OCIE0); // Interrupt freigeben für OCR
}
/Transportables_Koptertool/tags/V-0.1.1/timer.h
0,0 → 1,37
#ifndef timer_h
#define timer_h
 
volatile uint8_t timer;
volatile uint8_t counter, counter2;
volatile uint8_t key;
volatile uint8_t rs232_timer;
 
void timer_init (void);
 
#endif
 
#if defined (__AVR_ATmega32__)
#endif
 
#if defined (__AVR_ATmega644__)
#define TCCR0 TCCR0A
#define OCR0 OCR0A
#define TIMSK TIMSK0
#define OCIE0 OCIE0A
 
#define INT_VEC_TX SIG_USART_TRANS
 
#define SIG_OUTPUT_COMPARE0 SIG_OUTPUT_COMPARE0A
#endif
 
#if defined (__AVR_ATmega644P__)
#define TCCR0 TCCR0A
#define OCR0 OCR0A
#define TIMSK TIMSK0
#define OCIE0 OCIE0A
 
#define INT_VEC_TX SIG_USART_TRANS
 
#define SIG_OUTPUT_COMPARE0 SIG_OUTPUT_COMPARE0A
#endif
/Transportables_Koptertool/tags/V-0.1.2/CHANGE.LOG
0,0 → 1,194
/****************************************************************************
* Copyright (C) 2009 by Claas Anders "CaScAdE" Rathje *
* admiralcascade@gmail.com *
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ *
* *
* 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. *
****************************************************************************/
 
20090612-2100
*spi transfer now struct driven (needs C-Strom 20090612-2100 now!!!)
*lesser spi update rate (caused problems on some strom-slaves)
*voltage gets transfered via spi as well
*menu to switch display of 2nd voltage measured by C-Strom on and off
 
20090604-1350
*bugfix for stats
 
20090604-1330
*possible to choose between different osd-layouts (via menu)
 
20090604-0700
+(shaddi)osd_ncmode_minimal for less symbols during FPV
 
20090601-2233
*(woggle) changed timer init an interupt to be more precise
*(woggle) remove all warning during compile
*(woggle) simplify draw_big_variometer
*(woggle) put compass rose to PROGMEM
*(woggle) put directions array to PROGMEM
 
20090525-2305
+HUD on/off via RC (connect to PPM, according to manual) testing stuff
 
20090523-1150
+pal/ntsc changable in menu (applied immedeately!)
 
20090519-2245
*mah corrected
+config gets saved now (menu item!)
*source moved a bit
 
20090519-0115
+mah currently wasted
*some small changes
 
20090517-2345
*modded the real alpha stuff i have been talking about below
 
20090516-2345
+some really testing stuff 'bout current measurement, more to come
 
20090513-2350
*cellnumber autoconfig modified, offset set to 1,5V
*copy paste nick/roll error fixed
*clean after build in dist.sh
+a little shellscript to auto-build the files (testing)
*osd-layouts in seperate files so including own layouts should get easier
+build date is displayed during init to know which version you are runing
 
20090513-1040
*some code movement
+artificial horizon for FC-ONLY mode
 
20090512-2100
+some FCONLY basics (set FCONLY to 1 in main.h to use it)
 
20090511-2345
*battery voltages now calculated according to CELL_VOLT_MIN CELL_VOLT_MAX and CELL_NUM
*CELL_NUM -1 causes a rough auto detection of cell number
-UBAT_WRN and UBAT_MAX are now deprecated
 
20090427-2315
+write_gps_pos(...) (needs to be tested)
+gps position is shown in stats screen for testing purpose
 
20090427-2131
*stats are only collected while engines running (shaddi)
 
20090427-2102
*fixed maximum distance in stats (shaddi)
 
20090427-2050
*clear() now faster
*fixed calculation of max speed in stats (shaddi)
*littel typo in artificial horizon (thx joko)
*stats are only shown AFTER flight (more specific, after motors had been on at least once)
+indication icon for serial link (requires new character 198)
+indication icon for manual controll (stick > stick threshold)
(Character set 192 needs to be reflashed since new icon is in it)
 
20090420-0205
*reset-bug fixed
*moved code a bit
 
20090419-2145
*reset-bug workaround in usart1.c: usart1_DisableTXD and usart1_EnableTXD
 
20090419-1900
*fixed bug in heading-fine conv for bearing to home
 
20090419-1245
*compass characters bigger
*battery position
+voltage-symbol to battery-voltage
(Character Set 208 needs to be reflashed since compass chars are in it)
 
20090418-2015
*fixed bug in Character Set 128 (reflash it if you already flashed it!)
+another set of vario chars
*changed vario to use new characters
*moved vario/home-bearing positions
*big vario now enabled via menu or BIGVARIO
(Character Set 112 needs to be flashed)
 
20090418-1235
+big vario for testing purpose
(Character Set 192 needs to be flashed)
 
20090418-0100
*variometer uses more steps (9 instead of 5)
*home-arrow is now home-clock using more steps (22,5° resolution)
+visual battery-gauge according to difference between UBAT_WRN and UBAT_MAX
 
20090417-1115
*changed calculation of km/h (thx wowie)
*added JochenK_(joko)'s characters
(Character-Sets 128, 136, 144, 152, 160, 168, 176 and 184 need to be flashed!)
 
20090408-1245 (shaddi)
*fixed distance towards home
 
20090408-0035
*rewrote number->display functions
*fixed height bug (uint vs int)
 
20090407-2100
+added request of OSD data, disrequest of debug data and uptime reset to menu
-removed the uptime-reset binding from S2
+pgm space for some strings to save _normal_ data space
*some code movement
 
20090406-0130
*MK-Datastruct updated to work with NaviCtrl 0.15c firmware
*changed flags from NO* to invers versions
*enhanced the menu a bit
-artificial horizon at bootup, the menu is cooler imho
 
20090405-0207
+NOOSD as requested
*height now corrected (thx lephisto) and displayed as .x up to 10m
 
20090402-0106
+ disabling the txd pin while not using it so it won't interfere with KopterTool usage (thx joko)
+ if no data has been received for over 2sec we re-request it
* tried source organisation a bit
 
20090401-1741 (shaddi)
+ More precise Veriometer. Uses more more characters to show the speed of the movement
(Character-Set 232 needs to be flashed!)
 
20090331-1549
+ simple config menu during runtime, press S1 to jump in, S2 to cyle and S1 to accept choice
- S1 no longer requests the NC data
 
20090331-1305
+ added more statistics
* corrected S1/S2 mapping (d'oh)
+ started simple mode controll, press S2 during bootup toggles artificial horizon
 
20090329-1452
* fixed bearing to home
+ added flight stats (shown while engines off)
+ sat icon should indicate PH/CH/Free now
+ you need to flash characters 224-231 if you were using previous versions
 
20090327-2140
* fixed km/h (was cm/s)
* fixed height m (was dm)
* modified incoming data speed to 100ms (was 200ms)
 
20090326-2031
+ first binary release
/Transportables_Koptertool/tags/V-0.1.2/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/tags/V-0.1.2/MMB 1.pdf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Transportables_Koptertool/tags/V-0.1.2/MMB 1.sch
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Transportables_Koptertool/tags/V-0.1.2/Makefile
0,0 → 1,499
#-------------------------------------------------------------------
# Use only one!
# _M_obiles _M_ikrokopter _T_ool http://forum.mikrokopter.de/topic-4061-1.html
# MK Multi Box
BOARD = MMB
#
#BOARD = xxx
 
#-------------------------------------------------------------------
VERSION_MAJOR = 0
VERSION_MINOR = 2
VERSION_PATCH = 1
 
VERSION_SERIAL_MAJOR = 10 # Serial Protocol Major Version
VERSION_SERIAL_MINOR = 0 # Serial Protocol Minor Version
 
#-------------------------------------------------------------------
# get SVN revision
REV := $(shell sh -c "cat .svn/entries | sed -n '4p'")
 
ifeq ($(BOARD), MMT)
# The original with ATmega32 and 7.3 MHz
MCU = atmega32
F_CPU = 7372800
QUARZ = 7MHZ
FUSE_SETTINGS = -u -U lfuse:w:0x3f:m -U hfuse:w:0xcf:m
HEX_NAME = $(BOARD)_MEGA32
endif
ifeq ($(BOARD), MMB)
# MK Multi Box with ATmega644p and 20 MHz
MCU = atmega644p
F_CPU = 20000000
QUARZ = 20MHZ
FUSE_SETTINGS = -u -U lfuse:w:0xd7:m -U hfuse:w:0xdf:m -U efuse:w:0xfc:m
HEX_NAME = $(BOARD)_MEGA644p
endif
ifeq ($(BOARD), MMB1)
# original board. ATmega32 replaced with ATmega644p
MCU = atmega644p
F_CPU = 7372800
QUARZ = 7MHZ
FUSE_SETTINGS = -u -U lfuse:w:0xd7:m -U hfuse:w:0xdf:m -U efuse:w:0xfc:m
HEX_NAME = $(BOARD)_MEGA644p
endif
 
 
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
 
# Target file name (without extension).
ifeq ($(VERSION_PATCH), 0)
TARGET = $(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)a_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 1)
TARGET = $(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)b_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 2)
TARGET = $(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)c_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 3)
TARGET = $(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)d_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 4)
TARGET = $(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)e_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 5)
TARGET = $(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)f_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 6)
TARGET = $(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)g_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 7)
TARGET = $(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)h_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 8)
TARGET = $(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)i_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 9)
TARGET = $(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)j_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 10)
TARGET = $(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)k_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 11)
TARGET = $(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)l_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 12)
TARGET = $(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)m_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 13)
TARGET = $(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)n_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 14)
TARGET = $(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)o_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 15)
TARGET = $(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)p_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 16)
TARGET = $(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)q_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 17)
TARGET = $(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)r_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 18)
TARGET = $(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)s_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 19)
TARGET = $(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)t_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 20)
TARGET = $(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)u_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 21)
TARGET = $(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)v_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 22)
TARGET = $(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)w_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 23)
TARGET = $(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)x_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 24)
TARGET = $(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)y_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 25)
TARGET = $(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)z_SVN$(REV)
endif
 
 
# 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 lcd.c font8X6.c font8x8.c usart.c settings.c motortest.c display.c osd.c debug.c jeti.c servo.c lipo.c parameter.c status.c eeprom.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)
CFLAGS += -DQUARZ=$(QUARZ)
CFLAGS += -DVERSION_MAJOR=$(VERSION_MAJOR)
CFLAGS += -DVERSION_MINOR=$(VERSION_MINOR)
CFLAGS += -DVERSION_PATCH=$(VERSION_PATCH)
CFLAGS += -DVERSION_SERIAL_MAJOR=$(VERSION_SERIAL_MAJOR)
CFLAGS += -DVERSION_SERIAL_MINOR=$(VERSION_SERIAL_MINOR)
 
ifeq ($(BOARD), MMT)
CFLAGS += -DUSE_MMT
endif
ifeq ($(BOARD), MMTNG)
CFLAGS += -DUSE_MMTNG
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 = usbasp
#falls Ponyser ausgewählt wird, muss sich unsere avrdude-Configdatei im Bin-Verzeichnis des Compilers befinden
 
#AVRDUDE_PORT = com1 # 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/tags/V-0.1.2/README.txt
0,0 → 1,166
MK Multi Box:
=============
 
Stand: 16.01.2010
 
Was kann die MMB:
- Anzeige der OSD-Daten
- MK Display
- MK Motor Test
- MK Debug-Daten
- Jeti Box
- Servo Tester
 
Das muß noch geschrieben/überarbeitet/getestet werde:
- MK Parameter
- LiPo Überwachung
- I2C-Tester für BL-Ctrl
 
Die MMB entstand aus dem Projekt "Transportables Kopter Tool" von thkais:
http://www.ft-fanpage.de/mikrokopter/
und
http://forum.mikrokopter.de/topic-4061-1.html
 
Das Projekt hatte ich mal auf Lochraster nachgebaut.
Leider war es kurz nach dem Bau ziemlich nutzlos.
Die FC bekam ein Firmware-Update und niemand hat sich um die Software-Anpassung des Tools gekümmert. :-(
So lag es denn einige Monate und staubte vor sich hin...
 
Mitte 2009 wollte ich mich mit den AVRs beschäftigen und
mir etwas basteln um die OSD-Daten vom MK zu visualisieren.
 
Und zufällig schweift mein Blick über die verstaubte Kopter-Tool Hardware. ;-)
Herausgekommen ist die MMB.
 
Die Hardware basiert weitestgehend auf dem Entwurf von thkais.
Ich habe nur etwas "modernisiert", d.h. den ATmega32 durch einen ATmega644p mit 20 MHz ersetzt.
Die genauen Hardware-Details finden sich im Schaltplan, der auch im Eagle-Format vorliegt.
 
Die "tausend" LEDs habe ich mir nur als "Debug-Hilfe" dazugebastelt
und können auch weggelassen werden.
 
Entwickelt habe ich auf dem Mac (Mac OS X 10.6) mit Crosspack. Als Editor mußte XCode herhalten.
Der Source sollte sich aber auch unter Linux oder (zur Not) auch Windows mit den entsprechenden AVR-Tools compilieren lassen.
 
Die Tasten
^ v ⎋ ⏎
^ - Up
v - Down
⎋ - Escape/Back/Top
⏎ - Enter
 
Wenn genug Platz im Display vorhanden ist, wird in der untersten Zeile die aktuelle
Tastenbelegung eingeblendet. Das ist aber leider nicht immer möglich.
 
Hauptmenü:
==========
- Navi Data
- Display
- Parameters
- Debug Data
- Jeti
- Utilities...
 
1) Navi Data
Anzeige des OSD Datensatzes der NC.
 
Tasten:
---- ---- Exit Status
 
Beim Stoppen der Motoren wird einen Statusseite angezeigt.
Die Statusseite kann auch gezielt mit der Status-taste ausgerufen werden.
 
Tasten (Statusseite):
---- ---- Exit ----
 
2) Display
Anzeigen des MK-Displays.
 
Tasten:
page- page+ Exit NC/FC
 
3) Parameters
-- noch nicht funktionsfähig ---
Auslesen und Ändern der FC Parameter.
 
4) Debug Data
Anzeige der MK Debug Daten.
 
Tasten:
page- page+ Exit NC/FC
 
5) Jeti
Die MK Multi Box arbeitet als "Jeti Box".
Die Belegung der Tasten hat sich wie folgt geändert:
^ v < >
^ - Up
v - Down
< - Left
> - Right
 
Die "Jeti Box"-Funktion wird über längeres Drückern der <-Taste (Left) verlassen.
 
6) Utilities...
Weiter zum Sub-Menü "Utilities".
 
 
Utilities:
==========
- Motor Test
- Servo Tester
- LiPo Status
- Status
- Settings...
 
1) Motor Test
MK Motortest
 
2) Servo Tester
Generiert einen Servo Puls mit variabler Länge von 1.0 ms bis 2.0 ms
mit einer Wiederholrate vom 20 ms.
 
Tasten:
-10 +10 Exit >|<
 
-10 - -10 Steps
+10 - +10 Steps
Exit - Servo-Test verlassen
>|< - Servo in Mittenposition (1,5 ms)
 
Langes Drücken auf >|< schaltet die Schrittweite auf +1/-1 um.
 
Schrittweite ist 0,32 µs.
 
3) LiPo Status
Anzeige der Zellenspannungen eines LiPos bis max 4S.
 
4) Status
Einige Statusinformationen...
 
5) Settings...
Weiter zum Sub-Menü "Settings".
 
 
Settings:
=========
- Orientation
- LiPo Warn
- View Font
- Line
- Rectangle
 
1) Orientation
Anzeige um 128 Grad drehen.
Einstellung wird im EEPROM gespeichert.
 
2) LiPo Warn
Einstellen der Warnschwelle
 
3) View Font
Anzeige des 6x8 Fonts.
 
4) Line
***TEST
 
5) Rectangle
***TEST
/Transportables_Koptertool/tags/V-0.1.2/TODO.txt
0,0 → 1,8
- MK Parameter
 
- LiPo Überwachung
Warnung ausgeben!
 
- I2C BL-Ctrl Tester
entweder zusammen mit dem Motor-Test (einfach alle Motoren bzw. alle I2C BL-Ctrl Adressen) oder
als extra Menü und Reglernummer wählbar
/Transportables_Koptertool/tags/V-0.1.2/debug.c
0,0 → 1,278
/*****************************************************************************
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de *
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.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. *
* *
*****************************************************************************/
 
// @TODO: maybe choose a smaler font for the debug data. 6x6 or 6x7 would be nice and gives some additional space for status lines
 
#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 "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 < 4; page++)
{
for (i = 0; i < 7; i++)
{
lcd_print_at (0, i, AnalogNames[current_hardware - 1][i + page * 8], 0);
}
while (!get_key_press (1 << KEY_ESC)); // ESC
}
}
//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);
 
for (i = 0; i < 8; i++)
{
lcd_print_at (0, i, AnalogNames[current_hardware - 1][i + page * 8], 0);
}
 
do
{
if (rxd_buffer_locked)
{
Decode64 ();
DebugData = (DebugData_t *) pRxData;
 
//lcd_printp_at (0,6,PSTR("Page"),0);
lcd_write_number_u_at (20, 0, page);
switch (current_hardware)
{
case FC:
lcd_printp_at (20, 1, PSTR("F"), 0);
break;
 
case NC:
lcd_printp_at (20, 1, PSTR("N"), 0);
break;
default:
lcd_printp_at (20, 1, PSTR("?"), 0);
break;
}
 
for (i = 0; i < 8; i++)
{
//lcd_print_at (0, i, AnalogNames[i + page * 8], 0);
if (current_hardware == NC)
{
write_ndigit_number_u (14, i, DebugData->Analog[i + page * 8], 5, 0);
}
else
{
write_ndigit_number_s (14, i, DebugData->Analog[i + page * 8], 5, 0);
}
}
timer = TIMEOUT;
rxd_buffer_locked = FALSE;
}
 
if (get_key_press (1 << KEY_MINUS))
{
page--;
page &= 0x03;
lcd_cls ();
for (i = 0; i < 8; i++)
{
lcd_print_at (0, i, AnalogNames[current_hardware - 1][i + page * 8], 0);
}
}
else if (get_key_press (1 << KEY_PLUS))
{
page++;
page &= 0x03;
lcd_cls ();
for (i = 0; i < 8; i++)
{
lcd_print_at (0, i, AnalogNames[current_hardware - 1][i + page * 8], 0);
}
}
 
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;
//lcd_printpns_at (0, 7, PSTR(" \x1c \x1d Exit NC"), 0);
}
else
{
SwitchToNC();
 
timer = TIMEOUT;
//lcd_printpns_at (0, 7, PSTR(" \x1c \x1d Exit FC"), 0);
}
_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 < 8; i++)
{
lcd_print_at (0, i, AnalogNames[current_hardware - 1][i + page * 8], 0);
}
}
}
while (!get_key_press (1 << KEY_ESC) && timer); // ESC
 
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);
}
}
/Transportables_Koptertool/tags/V-0.1.2/debug.h
0,0 → 1,32
/*****************************************************************************
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de *
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.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. *
* *
*****************************************************************************/
 
#ifndef _DEBUG_H
#define _DEBUG_H
 
//*****************************************************************************
//
extern uint8_t AnalogNamesRead[2];
 
//*****************************************************************************
//
void display_debug(void);
 
#endif
/Transportables_Koptertool/tags/V-0.1.2/displ_val.c
0,0 → 1,88
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "lcd.h"
#include "usart.h"
 
// Insgesamt 32 Werte können angezeigt werden
// jeweils 8 Stück werden gleichzeitg angezeigt
// Auswahl über Tasten
 
uint8_t displ_page;
 
 
void displ_get_text (uint8_t number)
{
#if 0
uint8_t text[17];
uint8_t i;
buffer[0] = '#';
buffer[1] = 'a';
buffer[2] = 'a';
buffer[3] = number;
buffer[4] = 0;
buffer[5] = 0;
// base64_send(6);
 
do
{
// get_message ();
}
while (buffer[1] != 'A');
 
for (i = 0; i < 16; i++)
text[i] = buffer[i];
 
text[16] = 0x00;
 
lcd_print_at (0, (number & 0x07), text, 0);
#endif
}
 
void displ_values (void)
{
#if 0
uint8_t displ_page, i;
int16_t value;
uint8_t text[17];
 
displ_page = 0; // Page 0..3 (4 Pages zu je 8 Werte)
lcd_cls (); // LCD löschen
do
{
for (i = 0; i < 8; i++) // Texte lesen und anzeigen
displ_get_text (i + displ_page * 8);
do
{
// get_message ();
if (buffer[1] == 'D')
{
for (i = 0; i < 8; i++)
{
value = buffer[i * 2 + displ_page * 16 + 2] + 256 * buffer[i * 2 + displ_page * 16 + 3];
itoa (value, text, 10);
lcd_printp_at (14, i, PSTR(" "), 0);
lcd_print_at (14, i, text, 0);
}
}
}
while (key == key_nokey);
if (key == key_minus)
displ_page++;
if (key == key_plus)
displ_page--;
displ_page &= 0x03;
}
while (key != key_enter);
#endif
}
 
/Transportables_Koptertool/tags/V-0.1.2/displ_val.h
0,0 → 1,9
 
#ifndef _DISPL_VAL_H
#define _DISPL_VAL_H
 
//*****************************************************************************
//
void displ_values(void);
 
#endif
/Transportables_Koptertool/tags/V-0.1.2/display.c
0,0 → 1,153
/*****************************************************************************
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.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. *
* *
*****************************************************************************/
 
#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 "mk-data-structs.h"
 
#define TIMEOUT 500 // 5 sec
 
void display_data (void)
{
uint8_t cmd;
uint8_t flag = 0;;
mode = 'H';
lcd_cls ();
if (current_hardware == NC)
{
lcd_printpns_at (0, 7, PSTR(" \x1c \x1d Exit FC"), 0);
}
else
{
if (hardware == FC)
{
lcd_printpns_at (0, 7, PSTR(" \x1c \x1d Exit"), 0);
}
else
{
lcd_printpns_at (0, 7, PSTR(" \x1c \x1d Exit NC"), 0);
}
}
lcd_printp_at (0, 0, PSTR("Display"), 0);
rxd_buffer_locked = FALSE;
timer = TIMEOUT;
cmd = 0x03; // Home = first page
 
do
{
SendOutData('h', ADDRESS_ANY, 1, &cmd, 1);
cmd = 0;
//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_printpns_at (0, 7, PSTR(" \x1c \x1d Exit FC"), 0);
current_hardware = NC;
}
else
{
lcd_printpns_at (0, 7, PSTR(" \x1c \x1d Exit"), 0);
current_hardware = FC;
}
}
 
rxd_buffer[24] = 0;
lcd_print_at (0, rxd_buffer[3] + 1, (uint8_t *) &rxd_buffer[4], 0);
 
rxd_buffer_locked = FALSE;
timer = TIMEOUT;
}
if (get_key_press (1 << KEY_MINUS))
{
cmd = 0x01; // next page
LED1_TOGGLE;
//SendOutData('h', ADDRESS_ANY, 1, &cmd, 1);
//cmd = 0;
}
else if (get_key_press (1 << KEY_PLUS))
{
cmd = 0x02; // previous page
LED2_TOGGLE;
//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_printpns_at (0, 7, PSTR(" \x1c \x1d Exit NC"), 0);
LED3_TOGGLE;
}
else
{
SwitchToNC();
 
//timer = TIMEOUT;
lcd_printpns_at (0, 7, PSTR(" \x1c \x1d Exit FC"), 0);
LED4_TOGGLE;
}
cmd = 0x03; // 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("ERROR: no data"), 0);
timer = 100;
while (timer > 0);
}
LED_ALL_OFF;
}
/Transportables_Koptertool/tags/V-0.1.2/display.h
0,0 → 1,27
/*****************************************************************************
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.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. *
* *
*****************************************************************************/
 
#ifndef _DISPLAY_H
#define _DISPLAY_H
 
//*****************************************************************************
//
void display_data (void);
 
#endif
/Transportables_Koptertool/tags/V-0.1.2/eeprom.c
0,0 → 1,60
/*****************************************************************************
* Copyright (C) 2010 Peter "woggle" Mack, mac@denich.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. *
* *
*****************************************************************************/
 
#include <avr/io.h>
#include <avr/eeprom.h>
#include <avr/pgmspace.h>
 
#include "eeprom.h"
#include "lcd.h"
#include "lipo.h"
#include "timer.h"
 
//*****************************************************************************
//
unsigned char EEPromArray[E2END+1] EEMEM;
 
//*****************************************************************************
//
void WriteParameterDefaults (void)
{
eeprom_write_byte(&EEPromArray[EEPROM_ADDR_VALID], EEPROM_REV);
eeprom_write_byte(&EEPromArray[EEPROM_ADDR_ORIENTATION], 0);
eeprom_write_byte(&EEPromArray[EEPROM_ADDR_LIPO], 33);
}
 
//*****************************************************************************
//
void ReadParameter (void)
{
if ((eeprom_read_byte(&EEPromArray[EEPROM_ADDR_VALID])) != EEPROM_REV)
{
WriteParameterDefaults();
}
LCD_ORIENTATION = eeprom_read_byte (&EEPromArray[EEPROM_ADDR_ORIENTATION]);
AD_WarnLevel = eeprom_read_byte (&EEPromArray[EEPROM_ADDR_LIPO]);
}
 
//*****************************************************************************
//
void WriteParameter (void)
{
eeprom_write_byte(&EEPromArray[EEPROM_ADDR_ORIENTATION], LCD_ORIENTATION);
eeprom_write_byte(&EEPromArray[EEPROM_ADDR_LIPO], AD_WarnLevel);
}
/Transportables_Koptertool/tags/V-0.1.2/eeprom.h
0,0 → 1,34
/*****************************************************************************
* Copyright (C) 2010 Peter "woggle" Mack, mac@denich.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. *
* *
*****************************************************************************/
 
#ifndef _EEPROM_H
#define _EEPROM_H
 
#define EEPROM_REV 1 // please increment when adding or changing parameters!
 
#define EEPROM_ADDR_VALID 1
#define EEPROM_ADDR_ORIENTATION 2
#define EEPROM_ADDR_LIPO 3
 
//*****************************************************************************
//
void ReadParameter (void);
void WriteParameter (void);
 
#endif
/Transportables_Koptertool/tags/V-0.1.2/font8X6.c
0,0 → 1,158
/*****************************************************************************
* 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
 
prog_uint8_t font8x6[128][6] =
{
{ 0x78,0x15,0x14,0x15,0x78,0x00 }, // ASCII - 0 'Ä'
{ 0x20,0x55,0x54,0x55,0x78,0x00 }, // ASCII - 1 'ä'
{ 0x38,0x45,0x44,0x45,0x38,0x00 }, // ASCII - 2 'Ö'
{ 0x30,0x49,0x48,0x49,0x30,0x00 }, // ASCII - 3 'ö'
{ 0x3c,0x41,0x40,0x41,0x3c,0x00 }, // ASCII - 4 'Ü'
{ 0x38,0x41,0x40,0x21,0x78,0x00 }, // ASCII - 5 'ü'
{ 0x7e,0x15,0x15,0x15,0x0a,0x00 }, // ASCII - 6 'ß'
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 7
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 8
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 9
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 10 A (not useable)
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 11 B
{ 0x10,0x38,0x54,0x10,0x10,0x1e }, // ASCII - 12 C Enter Symbol
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 13 D (not useable)
{ 0x10,0x10,0x10,0x10,0x10,0x10 }, // ASCII - 14 E hor. line
{ 0x10,0x10,0x10,0x7c,0x10,0x10 }, // ASCII - 15 F hor. line with tick mark
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 16 10
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 17 11
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 18 12
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 19 13
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 20 14
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 21 15
{ 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 <-
{ 0x10,0x10,0x10,0x54,0x38,0x10 }, // ASCII - 25 19 ->
{ 0x10,0x18,0x1c,0x1c,0x18,0x10 }, // ASCII - 26 1A ^
{ 0x08,0x18,0x38,0x38,0x18,0x08 }, // ASCII - 27 1B v
{ 0x00,0x08,0x1c,0x3e,0x7f,0x00 }, // ASCII - 28 1C <
{ 0x00,0x7f,0x3e,0x1c,0x08,0x00 }, // ASCII - 29 1D >
{ 0x06,0x09,0x09,0x09,0x06,0x00 }, // ASCII - 30 1E '°'
{ 0x06,0x49,0x7d,0x49,0x06,0x00 }, // ASCII - 31 1F RC-Tx
 
{ 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/tags/V-0.1.2/font8x6.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 _FONT8X6_H
#define _FONT8X6_H
 
#include <avr/pgmspace.h>
 
//*****************************************************************************
//
extern prog_uint8_t font8x6[128][6];
 
#endif
/Transportables_Koptertool/tags/V-0.1.2/font8x8.c
0,0 → 1,271
/*
* 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>
 
prog_uint8_t font8x8[256][8]={
{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/tags/V-0.1.2/font8x8.h
0,0 → 1,19
/*
* font8x8.h
* LCD-OSD
*
* Created by Peter Mack on 26.12.09.
* Copyright 2009 SCS GmbH & Co. KG. All rights reserved.
*
*/
 
#ifndef _FONT8X8_H
#define _FONT8X8_H
 
#include <avr/pgmspace.h>
 
//*****************************************************************************
//
extern prog_uint8_t font8x8[256][8];
 
#endif
/Transportables_Koptertool/tags/V-0.1.2/jeti.c
0,0 → 1,260
/*****************************************************************************
* Copyright (C) 2009-2010 Peter "woggle" Mack, mac@denich.net *
* *
* see this fine thread on RCLine: *
* http://www.rclineforum.de/forum/thread.php?threadid=226786 *
* *
* 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/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
 
#include "main.h" // LEDs
#include "timer.h" // Keys
#include "lcd.h"
#include "jeti.h"
 
#define font8x8
 
uint8_t JetiBuffer[32]; // 32 characters
volatile uint8_t JetiBufferReady;
 
 
//*****************************************************************************
//
ISR (USART1_RX_vect)
{
uint8_t stat;
uint8_t rh;
uint8_t rl;
static uint8_t jbp;
stat = UCSR1A;
rh = UCSR1B;
rl = UDR1;
if (stat & ((1 << FE1) | (1 << DOR1) | (1 << UPE1)))
{ // discard buffer and start new on any error
JetiBufferReady = 0;
jbp = 0;
//1234567890123456
lcd_printpj_at (0, 3, PSTR(" Communication "), 0);
lcd_printpj_at (0, 4, PSTR(" Error "), 0);
LED6_TOGGLE;
}
else if ((rh & (1 << RXB81)) == 0)
{ // control
if (rl == 0xfe)
{ // start condition
JetiBufferReady = 0;
jbp = 0;
LED1_ON;
}
else if (rl == 0xff)
{ // stop condition
JetiBufferReady = 1;
LED1_OFF;
}
}
else
{ // data
if (jbp < 32)
{
JetiBuffer[jbp++] = rl;
}
}
}
 
//*****************************************************************************
//
void JETI_Init (void)
{
DDRD &= ~(1 << DDD3); // set TXD1 pin as input
PORTD &= ~(1 << PORTD3); // disable pullup on TXD1 pin
// set clock divider
#undef BAUD
#define BAUD 9600
#include <util/setbaud.h>
UBRR1H = UBRRH_VALUE;
UBRR1L = UBRRL_VALUE;
#if USE_2X
UCSR1A |= (1 << U2X1); // enable double speed operation
#else
UCSR1A &= ~(1 << U2X1); // disable double speed operation
#endif
// set 9O1
UCSR1C = (1 << UPM11) | (1 << UPM10) | (1 << UCSZ11) | (1 << UCSZ10);
UCSR1B = (1 << UCSZ12);
// flush receive buffer
while ( UCSR1A & (1 << RXC1) ) UDR1;
}
 
//*****************************************************************************
// disable the txd pin of usart
void JETI_DisableTXD (void)
{
UCSR1B &= ~(1 << TXEN1); // disable TX}
}
 
//*****************************************************************************
// enable the txd pin of usart
void JETI_EnableTXD (void)
{
UCSR1B |= (1 << TXEN1); // enable TX
}
 
 
//*****************************************************************************
//
void JETI_putw (uint16_t c)
{
loop_until_bit_is_set(UCSR1A, UDRE1);
UCSR1B &= ~(1 << TXB81);
if (c & 0x0100)
{
UCSR1B |= (1 << TXB81);
}
UDR1 = c;
}
 
//*****************************************************************************
//
void JETI_putc (uint8_t c)
{
loop_until_bit_is_set(UCSR1A, UDRE1);
// UCSRB &= ~(1 << TXB8);
UCSR1B |= (1 << TXB81);
UDR1 = c;
}
 
//*****************************************************************************
//
void JETI_puts (char *s)
{
while (*s)
{
JETI_putc (*s);
s++;
}
}
 
//*****************************************************************************
//
void JETI_puts_p (const char *s)
{
while (pgm_read_byte(s))
{
JETI_putc (pgm_read_byte(s));
s++;
}
}
 
//*****************************************************************************
//
void JETI_put_start (void)
{
loop_until_bit_is_set(UCSR1A, UDRE1);
UCSR1B &= ~(1 << TXB81);
UDR1 = 0xFE;
}
 
//*****************************************************************************
//
void JETI_put_stop (void)
{
loop_until_bit_is_set(UCSR1A, UDRE1);
UCSR1B &= ~(1 << TXB81);
UDR1 = 0xFF;
}
 
//*****************************************************************************
//
void jeti (void)
{
uint8_t key;
uint8_t i;
 
// enable Rx
UCSR1B |= (1 << RXEN1);
UCSR1B |= (1 << RXCIE1);
lcd_cls ();
lcd_printp_at (0, 0, PSTR("Jeti Box Display"), 0);
lcd_printpns_at (0, 7, PSTR(" \x1a \x1b \x1c \x1d"), 0);
#ifdef font8x8
lcd_line(0, 21, 127, 21, 1);
lcd_line(0, 22, 127, 22, 1);
lcd_line(0, 40, 127, 40, 1);
lcd_line(0, 41, 127, 41, 1);
#else
lcd_rect(10, 22, 98, 18, 1);
#endif
do
{
if (JetiBufferReady)
{
JETI_EnableTXD();
LED2_ON;
for (i = 0; i < 16; i++)
{
#ifdef font8x8
lcd_putc_jeti(i, 3, JetiBuffer[i], 0);
#else
lcd_putc (2 + i, 3, JetiBuffer[i], 0);
#endif
}
for (i = 0; i < 16; i++)
{
#ifdef font8x8
lcd_putc_jeti(i, 4, JetiBuffer[i + 16], 0);
#else
lcd_putc (2 + i, 4, JetiBuffer[i + 16], 0);
#endif
}
JetiBufferReady = 0; // invalidate buffer
LED2_OFF;
_delay_ms (1); //
// Writing to the display takes aprox. 5.8 ms @ 7 MHz and 3.2 ms @ 20 MHz.
// With the additional 4 ms we had a 10 ms delay.
// 10 ms works perfect with the MUI30 and the MT125
// But not with the TU transceiver module.
key = get_key_short ((1 << KEY_MINUS) | (1 << KEY_PLUS) | (1 << KEY_ESC) | (1 << KEY_ENTER));
key = (key << 1) | (key >> 3);
key = (~key) & 0xf0;
JETI_putw((uint16_t) key);
_delay_ms (1);
JETI_DisableTXD();
}
}
while (!get_key_long (1 << KEY_ESC));
get_key_press(KEY_ALL);
 
// disable Rx
UCSR1B &= ~(1 << RXCIE1);
UCSR1B &= ~(1 << RXEN1);
}
/Transportables_Koptertool/tags/V-0.1.2/jeti.h
0,0 → 1,40
/*****************************************************************************
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net *
* *
* see this fine thread on RCLine: *
* http://www.rclineforum.de/forum/thread.php?threadid=226786 *
* *
* 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 _JETI_H
#define _JETI_H
 
//*****************************************************************************
//
void JETI_Init (void);
void JETI_DisableTXD (void);
void JETI_EnableTXD (void);
void JETI_putw (uint16_t c);
void JETI_putc (uint8_t c);
void JETI_puts (char *s);
void JETI_puts_p (const char *s);
void JETI_put_start (void);
void JETI_put_stop (void);
 
void jeti (void);
 
#endif
/Transportables_Koptertool/tags/V-0.1.2/lcd.c
0,0 → 1,1130
/*****************************************************************************
* 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 <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 "main.h"
#include "lcd.h"
 
 
#define DISP_W 128
#define DISP_H 64
 
#define DISP_BUFFER ((DISP_H * DISP_W) / 8)
 
volatile uint8_t display_buffer[DISP_BUFFER]; // Display-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 ();
}
 
 
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 wait_1ms (void)
{
_delay_ms (1.0);
}
 
void wait_ms (uint16_t time)
{
uint16_t i;
for (i = 0; i < time; i++)
wait_1ms ();
}
 
void LCD_Init (void)
{
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);
 
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)
}
send_byte (0xA6);
send_byte (0xA2);
send_byte (0x2F);
send_byte (0xF8);
send_byte (0x00);
send_byte (0x27);
send_byte (0x81);
send_byte (0x16);
send_byte (0xAC);
send_byte (0x00);
send_byte (0xAF);
 
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) + 4; Wenn gedreht
// column = (adress & 0x7F);
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);
}
}
 
 
//
// x,y = character-Pos. !
//
// mode: 0=Overwrite, 1 = OR, 2 = XOR, 3 = AND, 4 = Delete
void lcd_putc (uint8_t x, uint8_t y, uint8_t c, uint8_t mode)
{
uint8_t ch;
uint8_t i;
uint16_t adress;
 
switch (c)
{ // ISO 8859-1
case 0xc4: // Ä
c = 0x00;
break;
case 0xe4: // ä
c = 0x01;
break;
case 0xd6: // Ö
c = 0x02;
break;
case 0xf6: // ö
c = 0x03;
break;
case 0xdc: // Ü
c = 0x04;
break;
case 0xfc: // ü
c = 0x05;
break;
case 0xdf: // ß
//c = 0x06;
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]);
}
}
 
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 new_line (void)
{
lcd_ypos++;
if (lcd_ypos > 7)
{
scroll ();
lcd_ypos = 7;
}
}
 
 
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);
}
 
 
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 > 20)
{
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 > 20)
{
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 > 20)
{
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);
}
 
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + 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(" \x16 \x17 Exit"), 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_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, 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, 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, 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, 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/tags/V-0.1.2/lcd.h
0,0 → 1,118
/*****************************************************************************
* 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. *
* *
*****************************************************************************/
 
#ifndef _LCD_H
#define _LCD_H
 
//*****************************************************************************
//
extern volatile uint8_t LCD_ORIENTATION;
 
extern uint8_t lcd_xpos;
extern uint8_t lcd_ypos;
 
//*****************************************************************************
//
void LCD_Init (void);
 
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);
 
// 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);
 
/**
* 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/tags/V-0.1.2/lipo.c
0,0 → 1,105
/*****************************************************************************
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.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. *
* *
*****************************************************************************/
 
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
 
#include "main.h" // LEDs
#include "timer.h" // Keys
#include "lcd.h"
#include "lipo.h"
 
 
volatile uint8_t AD_Ready = 0;
volatile uint8_t AD_Channel = 0;
volatile uint16_t AD_Val[4];
 
volatile uint8_t AD_WarnLevel;
volatile uint8_t AD_Warn = 0;
 
 
//*****************************************************************************
//
ISR(ADC_vect)
{
LED1_TOGGLE;
AD_Val[AD_Channel] = ADC;
if (AD_Val[AD_Channel] <= (AD_WarnLevel * 20))
{
AD_Warn |= (1 << AD_Channel);
}
AD_Channel++;
AD_Channel &= 0x03;
ADMUX = (ADMUX & 0xe0) | AD_Channel;
if (AD_Channel)
{
ADCSRA |= (1 << ADSC);
}
else
{
AD_Ready = 1;
}
 
}
 
//*****************************************************************************
//
void ADC_Init(void)
{
DIDR0 = 0x0f; // disable digital inputs on PA0-3
ADMUX = (1 << REFS1) | (1 << REFS0); // internal 2.56 V ref.
ADCSRB = 0; // free running mode
// enable ADC, start conversion, auto trigger, enable interrupt, prescaler = 128
ADCSRA = (1 << ADEN) | (1 << ADSC) | (0 << ADATE) | (1 << ADIE) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
}
 
//*****************************************************************************
//
void lipo (void)
{
uint8_t i;
lcd_cls ();
lcd_printp_at (0, 0, PSTR("LiPo Display"), 0);
lcd_printpns_at (0, 7, PSTR(" Exit"), 0);
 
lcd_printp_at (0, 2, PSTR("Cell 1:"), 0);
lcd_printp_at (0, 3, PSTR("Cell 2:"), 0);
lcd_printp_at (0, 4, PSTR("Cell 3:"), 0);
lcd_printp_at (0, 5, PSTR("Cell 4:"), 0);
 
do
{
if (AD_Ready)
{
for (i = 0; i < 4; i++)
{
//write_ndigit_number_u (0, 2 + i, AD_Val[i], 4, 0);
//write_ndigit_number_u_10th (6, 2 + i, AD_Val[i] >> 1, 3, 0);
write_ndigit_number_u_100th (10, 2 + i, AD_Val[i] >> 1, 10, 0);
}
AD_Ready = 0;
ADCSRA |= (1 << ADSC);
}
}
while (!get_key_press (1 << KEY_ESC));
get_key_press(KEY_ALL);
}
/Transportables_Koptertool/tags/V-0.1.2/lipo.h
0,0 → 1,34
/*****************************************************************************
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.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. *
* *
*****************************************************************************/
 
#ifndef _LIPO_H
#define _LIPO_H
 
//*****************************************************************************
//
extern volatile uint16_t AD_Val[4];
extern volatile uint8_t AD_WarnLevel;
extern volatile uint8_t AD_Warn;
 
//*****************************************************************************
//
void ADC_Init(void);
void lipo (void);
 
#endif
/Transportables_Koptertool/tags/V-0.1.2/main.c
0,0 → 1,156
/*****************************************************************************
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de *
* Copyright (C) 2009-2010 Peter "woggle" Mack, mac@denich.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/ *
*****************************************************************************/
 
#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"
#include "lcd.h"
#include "usart.h"
#include "parameter.h"
#include "menu.h"
#include "display.h"
#include "timer.h"
#include "jeti.h"
#include "lipo.h"
#include "eeprom.h"
 
#include "mk-data-structs.h"
 
 
#define LEDS // my development board has some status LEDs
 
//#define MTEST // Menu Test (skip FC/NC detection)
 
 
Version_t *version;
 
volatile uint8_t mode = 0;
 
uint8_t hardware = 0;
uint8_t current_hardware = 0;
 
 
int main (void)
{
uint8_t timeout;
 
PORTA = 0xF0;
PORTB = 0x43;
PORTC = 0xFF;
PORTD = 0x70;
#ifdef LEDS
DDRC = 0x1C;
DDRD = 0xF0;
#else
// DDRC = 0x03;
DDRD = 0x80;
#endif
 
ReadParameter ();
 
LCD_Init ();
USART_Init ();
JETI_Init();
TIMER0_Init ();
ADC_Init();
 
sei ();
#ifndef MTEST
lcd_cls ();
//lcd_printp (PSTR("Portable Kopter Tool\r\n"), 0);
lcd_printp (PSTR("MK Multi Box\r\n"), 0);
lcd_printp (PSTR("checking hardware..."), 0);
 
// switch to NC
USART_putc (0x1b);
USART_putc (0x1b);
USART_putc (0x55);
USART_putc (0xaa);
USART_putc (0x00);
 
mode = 'V';
timeout = 50;
while (!rxd_buffer_locked && timeout)
{
SendOutData('v', ADDRESS_ANY, 0);
timer = 20;
while (timer > 0);
timeout--;
}
if (timeout != 0)
{
Decode64 ();
version = (Version_t *) pRxData;
lcd_cls ();
//lcd_printp (PSTR("Portable Kopter Tool\r\n"), 0);
lcd_printp (PSTR("MK Multi Box\r\n"), 0);
lcd_printp (PSTR("found:\r\n\n"), 0);
if ((rxd_buffer[1] - 'a') == ADDRESS_FC)
{
lcd_printp (PSTR("Flight-Ctrl\r\n"), 0);
hardware = FC;
current_hardware = hardware;
}
else if ((rxd_buffer[1] - 'a') == ADDRESS_NC)
{
lcd_printp (PSTR("Navi-Ctrl\r\n"), 0);
hardware = NC;
current_hardware = hardware;
}
lcd_printp (PSTR("Version: "), 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);
}
else
{ // timeout occured
lcd_printp (PSTR("\r\n\nERROR: no data"), 0);
}
mode = 0;
rxd_buffer_locked = FALSE;
 
timer = 200;
while (timer > 0);
#endif
for (;;)
{
main_menu ();
}
}
/Transportables_Koptertool/tags/V-0.1.2/main.h
0,0 → 1,84
/*****************************************************************************
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de *
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.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/ *
*****************************************************************************/
 
#ifndef _MAIN_H
#define _MAIN_H
 
//*****************************************************************************
//
#define set_cs() (PORTB |= (1 << PB4))
#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 LED1_OFF PORTC |= (1 << PC3)
#define LED1_ON PORTC &= ~(1 << PC3)
#define LED1_TOGGLE PORTC ^= (1 << PC3)
 
#define LED2_OFF PORTD |= (1 << PD4)
#define LED2_ON PORTD &= ~(1 << PD4)
#define LED2_TOGGLE PORTD ^= (1 << PD4)
 
#define LED3_OFF PORTD |= (1 << PD5)
#define LED3_ON PORTD &= ~(1 << PD5)
#define LED3_TOGGLE PORTD ^= (1 << PD5)
 
#define LED4_OFF PORTD |= (1 << PD6)
#define LED4_ON PORTD &= ~(1 << PD6)
#define LED4_TOGGLE PORTD ^= (1 << PD6)
 
#define LED5_OFF PORTC |= (1 << PC4)
#define LED5_ON PORTC &= ~(1 << PC4)
#define LED5_TOGGLE PORTC ^= (1 << PC4)
 
#define LED6_OFF PORTC |= (1 << PC2)
#define LED6_ON PORTC &= ~(1 << PC2)
#define LED6_TOGGLE PORTC ^= (1 << PC2)
 
#define LED_ALL_OFF {LED1_OFF; LED2_OFF; LED3_OFF; LED4_OFF; LED5_OFF; LED6_OFF;}
 
#define NC 1
#define FC 2
#define MK3MAG 3
#define MKGPS 4
 
//*****************************************************************************
//
extern volatile uint8_t mode;
extern uint8_t hardware;
extern uint8_t current_hardware;
 
#endif
/Transportables_Koptertool/tags/V-0.1.2/menu.c
0,0 → 1,253
/*****************************************************************************
* Copyright (C) 2009-2010 Peter "woggle" Mack, mac@denich.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. *
* *
*****************************************************************************/
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "lcd.h"
#include "parameter.h"
#include "menu.h"
#include "display.h"
#include "motortest.h"
#include "debug.h"
#include "settings.h"
#include "timer.h"
#include "osd.h"
#include "jeti.h"
#include "servo.h"
#include "lipo.h"
#include "status.h"
 
 
void utils (void);
void sett (void);
 
 
//*****************************************************************************
// Main Menu
const char mm_item_0[] PROGMEM = "Navi Data";
const char mm_item_1[] PROGMEM = "Display";
const char mm_item_2[] PROGMEM = "Parameters";
const char mm_item_3[] PROGMEM = "Debug Data";
const char mm_item_4[] PROGMEM = "Jeti";
const char mm_item_5[] PROGMEM = "Utilities...";
 
const struct menu menu_main[] PROGMEM = {
{mm_item_0, osd},
{mm_item_1, display_data},
{mm_item_2, edit_parameter},
{mm_item_3, display_debug},
{mm_item_4, jeti},
{mm_item_5, utils}, // sub menu
};
#define N_MAIN (sizeof menu_main / sizeof menu_main[0])
 
 
//*****************************************************************************
// Utilities Menu
const char mu_item_0[] PROGMEM = "Motor Test";
const char mu_item_1[] PROGMEM = "I2C Motor Test";
const char mu_item_2[] PROGMEM = "Servo Tester";
const char mu_item_3[] PROGMEM = "LiPo Status";
const char mu_item_4[] PROGMEM = "Status";
const char mu_item_5[] PROGMEM = "Settings...";
 
const struct menu menu_util[] PROGMEM = {
{mu_item_0, motor_test},
{mu_item_1, motor_i2c},
{mu_item_2, servo_test},
{mu_item_3, lipo},
{mu_item_4, status},
{mu_item_5, sett}, // sub menu
};
#define N_UTIL (sizeof menu_util / sizeof menu_util[0])
 
 
//*****************************************************************************
// Settings Menu
const char ms_item_0[] PROGMEM = "Orientation";
const char ms_item_1[] PROGMEM = "LiPo Warn";
const char ms_item_2[] PROGMEM = "View Font";
const char ms_item_3[] PROGMEM = "Line";
const char ms_item_4[] PROGMEM = "Rectangle";
 
const struct menu menu_set[] PROGMEM = {
{ms_item_0, set_toggledisplay},
{ms_item_1, set_lipo},
{ms_item_2, set_viewfont},
{ms_item_3, set_line},
{ms_item_4, set_rect},
};
#define N_SET (sizeof menu_set / sizeof menu_set[0])
 
#if 0
const struct menus PROGMEM = {
{menu_main, N_MAIN, title_main},
{menu_util, N_UTIL, title_util},
{menu_set, N_SET, title_set},
};
#endif
 
 
//*****************************************************************************
//
void menu_print (const struct menu m[], uint8_t size)
{
uint8_t i;
for (i = MENU_LINE; i < MENU_LINE + size; i++)
{
lcd_printp_at (MENU_COL, i, (const char *) pgm_read_word(&(m[i - MENU_LINE].str)), 0);
}
lcd_printpns_at (0, 7, PSTR(" \x1a \x1b Back \x0c"), 0);
}
 
 
//*****************************************************************************
//
void utils (void)
{
static uint8_t f = MENU_LINE;
do
{
lcd_cls ();
lcd_printp (PSTR("Utilities:"), 0);
menu_print(menu_util, N_UTIL);
f = menu_choose (MENU_LINE, N_UTIL, CURSOR_COL, f);
if (f != 255)
{
((pfunc)(pgm_read_word (&(menu_util[f - MENU_LINE].func))))();
}
}
while (f != 255);
f = MENU_LINE;
}
 
 
//*****************************************************************************
//
void sett (void)
{
static uint8_t f = MENU_LINE;
 
do
{
lcd_cls ();
lcd_printp (PSTR("Settings:"), 0);
menu_print(menu_set, N_SET);
f = menu_choose (MENU_LINE, N_SET, CURSOR_COL, f);
if (f != 255)
{
((pfunc)(pgm_read_word (&(menu_set[f - MENU_LINE].func))))();
}
}
while (f != 255);
f = MENU_LINE;
}
 
 
//*****************************************************************************
// 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);
}
 
 
//*****************************************************************************
//
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))
{
if (line < max)
{
line ++;
}
else
{
line = min;
}
}
 
if (get_key_press (1 << KEY_MINUS))
{
if (line > min)
{
line --;
}
else
{
line = max;
}
}
 
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;
}
 
 
//*****************************************************************************
//
void main_menu (void)
{
static uint8_t f = MENU_LINE;
lcd_cls ();
//lcd_printp (PSTR("Portable Kopter Tool"), 0);
lcd_printp (PSTR("MK Multi Box"), 0);
menu_print(menu_main, N_MAIN);
 
f = menu_choose (MENU_LINE, N_MAIN, CURSOR_COL, f);
if (f != 255)
{
((pfunc)(pgm_read_word (&(menu_main[f - MENU_LINE].func))))();
}
else
{
f = MENU_LINE;
}
}
/Transportables_Koptertool/tags/V-0.1.2/menu.h
0,0 → 1,43
/*****************************************************************************
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.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. *
* *
*****************************************************************************/
 
#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
 
//*****************************************************************************
//
typedef void(*pfunc)(void);
 
struct menu {
const char *str;
pfunc func;
};
 
//*****************************************************************************
//
void main_menu (void);
uint8_t menu_choose (uint8_t min, uint8_t max, uint8_t pos, uint8_t start);
 
#endif
/Transportables_Koptertool/tags/V-0.1.2/mk-data-structs.h
0,0 → 1,246
/****************************************************************************
* Copyright (C) 2009 by Claas Anders "CaScAdE" Rathje *
* admiralcascade@gmail.com *
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ *
* *
* 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. *
****************************************************************************/
 
/* ##########################################################################
* gain some fake arm compat :)
* ##########################################################################*/
#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 Reserved[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
{
char Revision;
char Name[12];
signed char Motor[16][4];
} __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 {
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 {
s16 Distance; // distance to target in cm
s16 Bearing; // course to target in deg
} __attribute__((packed)) GPS_PosDev_t;
 
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 MKFlags; // 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 Reserve[4]; // for future use
} __attribute__((packed)) NaviData_t;
 
/*
* MikroKopter Flags
* taken from
* http://svn.mikrokopter.de/mikrowebsvn/filedetails.php?repname=FlightCtrl&path=%2Ftags%2FV0.73d%2Ffc.h
*/
#define FLAG_MOTOR_RUN 1
#define FLAG_FLY 2
#define FLAG_CALIBRATE 4
#define FLAG_START 8
#define FLAG_NOTLANDUNG 16
#define FLAG_LOWBAT 32
 
/*
* 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_8 0x80
 
typedef struct
{
unsigned char Kanalbelegung[8]; // 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 Gier_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 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 UfoAusrichtung; // X oder + Formation
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; //
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 NaviSpeedCompensation;
unsigned char NaviOperatingRadius;
unsigned char NaviAngleLimitation;
unsigned char NaviPH_LoginTime;
//---Ext.Ctrl---------------------------------------------
unsigned char ExternalControl; // for serial Control
//------------------------------------------------
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];
} __attribute__((packed)) mk_param_struct_t;
#define STRUCT_PARAM_LAENGE sizeof(mk_param_struct_t)
/Transportables_Koptertool/tags/V-0.1.2/motortest.c
0,0 → 1,281
/*****************************************************************************
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.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. *
* *
*****************************************************************************/
 
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <string.h>
#include <util/twi.h>
 
#include "main.h"
#include "motortest.h"
#include "lcd.h"
#include "usart.h"
#include "timer.h"
 
 
uint8_t m;
 
 
#define SCL_FREQ 200000L
 
#define I2C_STATE_TX_ADDRESS 0
#define I2C_STATE_TX_DATA 1
#define I2C_STATE_TX_STOP 2
#define I2C_STATE_RX_ADDRESS 3
#define I2C_STATE_RX_1BYTE 4
#define I2C_STATE_RX_2BYTE 5
 
volatile uint8_t i2c_state;
volatile uint8_t motor_addr = 0;
 
//*****************************************************************************
//
void I2C_Init(void)
{
uint8_t sreg = SREG;
cli();
DDRC &= ~(1<<DDC1); // SDA is input
DDRC |= (1<<DDC0); // SCL is output
PORTC |= (1<<PORTC0)|(1<<PORTC1); // pull up SDA and SCL
// prescaler 1 (TWPS1 = 0, TWPS0 = 0)
TWSR &= ~((1<<TWPS1)|(1<<TWPS0));
 
TWBR = ((F_CPU/SCL_FREQ)-16)/2;
i2c_state = I2C_STATE_TX_ADDRESS;
 
SREG = sreg;
}
 
//*****************************************************************************
//
void I2C_Start(uint8_t start_state)
{
i2c_state = start_state;
 
// generate start condition and enable interrupts
TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN) | (1<<TWIE);
}
 
//*****************************************************************************
//
void I2C_Stop(uint8_t start_state)
{
i2c_state = start_state;
 
// generate stop condition and disable interrupt
TWCR = (1<<TWINT) | (1<<TWSTO) | (1<<TWEN);
}
 
//*****************************************************************************
//
void I2C_WriteByte(int8_t b)
{
TWDR = b;
// clear interrupt flag (TWINT = 1)
// enable i2c bus (TWEN = 1)
// enable interrupt (TWIE = 1)
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE);
}
 
//*****************************************************************************
//
void I2C_ReceiveByte(void)
{
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE) | (1<<TWEA);
}
 
//*****************************************************************************
//
void I2C_ReceiveLastByte(void)
{
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE);
}
 
 
//*****************************************************************************
//
ISR (TWI_vect)
{
int8_t mrCurrent;
int8_t mrMaxpwm;
switch (i2c_state++)
{
// TWI Master Transmit
case I2C_STATE_TX_ADDRESS:
I2C_WriteByte(0x52 + (motor_addr * 2) ); // select slave adress in tx mode
break;
 
case I2C_STATE_TX_DATA:
I2C_WriteByte(m);
break;
 
case I2C_STATE_TX_STOP:
if(TWSR == TW_MT_DATA_NACK) // Data transmitted, NACK received
{
// error occured
}
I2C_Stop(I2C_STATE_TX_ADDRESS);
I2C_Start(I2C_STATE_RX_ADDRESS); // Repeated start -> switch slave or switch Master Transmit -> Master Receive
break;
 
// Master Receive Data
case I2C_STATE_RX_ADDRESS:
I2C_WriteByte(0x53 + (motor_addr * 2) ); // select slave adress in rx mode
if(TWSR != TW_MR_SLA_ACK) // SLA+R transmitted, if not ACK received
{ // no response from the addressed slave received
I2C_Stop(I2C_STATE_TX_ADDRESS);
}
else
{
I2C_ReceiveByte(); //Transmit 1st byte
}
break;
 
case I2C_STATE_RX_1BYTE: //Read 1st byte and transmit 2nd Byte
mrCurrent = TWDR;
I2C_ReceiveLastByte(); // nack
break;
 
case I2C_STATE_RX_2BYTE:
//Read 2nd byte
mrMaxpwm = TWDR;;
I2C_Stop(I2C_STATE_TX_ADDRESS);
break;
default:
I2C_Stop(I2C_STATE_TX_ADDRESS);
break;
}
}
 
//*****************************************************************************
//
void motor_i2c (void)
{
uint8_t blc = 0;
lcd_cls ();
m = 0;
lcd_printp (PSTR("I2C Motor Test"), 0);
lcd_printpns_at (0, 7, PSTR("dec inc Exit Off"), 0);
lcd_printp (PSTR("BLC #"), 0);
do
{
if ((get_key_press (1 << KEY_PLUS) || get_key_rpt (1 << KEY_PLUS)) && (m < 254))
{
m++;
}
if ((get_key_press (1 << KEY_MINUS) || get_key_rpt (1 << KEY_MINUS)) && (m > 0))
{
lcd_frect (GX, GY, (m * 108) / 255, 10, 0);
m--;
}
if (get_key_press (1 << KEY_ENTER))
{
lcd_frect (GX, GY, (m * 108) / 255, 10, 0);
m = 0;
}
}
while (!get_key_press (1 << KEY_ESC));
// switch all engines off at exit !
}
 
 
//*****************************************************************************
//
void motor (uint8_t m)
{
memset (buffer, m, 16);
#if 0
buffer[0] = m; // 0
buffer[1] = m; // 1
buffer[2] = m; // 2
buffer[3] = m; // 3
buffer[4] = m; // 4
buffer[5] = m; // 5
buffer[6] = m; // 6
buffer[7] = m; // 7
buffer[8] = m; // 8
buffer[9] = m; // 9
buffer[10] = m; // 10
buffer[11] = m; // 11
buffer[12] = m; // 12
buffer[13] = m; // 13
buffer[14] = m; // 14
buffer[15] = m; // 15
#endif
SendOutData('t', ADDRESS_FC, 1, buffer, 16);
// hier könnte man noch eine I2C-Ausgabe einbauen...
lcd_frect (GX, GY, (m * 108) / 255, 10, 1);
write_ndigit_number_u (MX, MY, m, 3, 0);
}
 
//*****************************************************************************
//
void motor_test (void)
{
//uint8_t m;
 
lcd_cls ();
m = 0;
 
lcd_printp (PSTR("Motor Test"), 0);
lcd_printpns_at (0, 7, PSTR("dec inc Exit Off"), 0);
 
if (hardware == NC && current_hardware == NC)
{
SwitchToFC();
}
motor (m);
 
do
{
if ((get_key_press (1 << KEY_PLUS) || get_key_rpt (1 << KEY_PLUS)) && (m < 254))
{
m++;
}
if ((get_key_press (1 << KEY_MINUS) || get_key_rpt (1 << KEY_MINUS)) && (m > 0))
{
lcd_frect (GX, GY, (m * 108) / 255, 10, 0);
m--;
}
if (get_key_press (1 << KEY_ENTER))
{
lcd_frect (GX, GY, (m * 108) / 255, 10, 0);
m = 0;
}
motor (m);
}
while (!get_key_press (1 << KEY_ESC));
 
// switch all engines off at exit !
motor (0);
}
/Transportables_Koptertool/tags/V-0.1.2/motortest.h
0,0 → 1,36
/*****************************************************************************
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.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. *
* *
*****************************************************************************/
 
#ifndef _MOTORTEST_H
#define _MOTORTEST_H
 
//*****************************************************************************
//
#define MX 0
#define MY 3
#define GX (MX + 3) * 6 + 1 // 3 for 3 digits
#define GY MY * 8 - 2
#define MAXGX 128 - GX
 
//*****************************************************************************
//
void motor_test (void);
void motor_i2c (void);
 
#endif
/Transportables_Koptertool/tags/V-0.1.2/osd.c
0,0 → 1,462
/*****************************************************************************
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net *
* based on the C-OSD code from CaScAdE *
* http://www.mylifesucks.de/oss/c-osd/ *
* *
* 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/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "osd.h"
#include "lcd.h"
#include "timer.h"
#include "usart.h"
 
#include "mk-data-structs.h"
 
#define COSD_WASFLYING 4
 
/* ##########################################################################
* global definitions and global vars
* ##########################################################################*/
NaviData_t *naviData;
 
// 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;
 
// 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 :";
const char stats_item_5[] PROGMEM = "Long. :";
const char stats_item_6[] PROGMEM = "Lat. :";
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;
 
 
/**
* 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_x, uint8_t width_y, int16_t variometer)
{
lcd_rect (x, y - ((width_y - 1) / 2), width_x, width_y, 1);
lcd_frect (x + 1, y - ((width_y - 1) / 2) + 1, width_x - 2, width_y - 2, 0);
lcd_line (x, y, x + width_x, y, 1);
 
if (variometer > 0)
{ // gain height
switch (variometer / 5)
{
case 0:
lcd_frect (x + 3, y - 1, 3, 1, 1);
break;
case 1:
lcd_frect (x + 2, y - 3, 5, 3, 1);
break;
case 2:
lcd_frect (x + 2, y - 4, 5, 4, 1);
break;
default:
lcd_frect (x + 1, y - 5, 7, 5, 1);
break;
}
}
else
{ // sink
switch (variometer / -5)
{
case 0:
lcd_frect (x + 3, y, 3, 1, 1);
break;
case 1:
lcd_frect (x + 2, y, 5, 3, 1);
break;
case 2:
lcd_frect (x + 2, y, 5, 4, 1);
break;
default:
lcd_frect (x + 1, y, 7, 5, 1);
break;
}
}
}
 
 
#define TIMEOUT 200 // 2 sec
 
void print_statistics (void)
{
uint8_t line = 0;
lcd_cls ();
// max Altitude
lcd_printpns_at (0, line, stats_item_pointers[0], 0);
write_ndigit_number_s (13, line, max_Altimeter / 30, 4, 0);
lcd_putc (17, line, 'm', 0);
// max Speed
lcd_printpns_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_printpns_at(17, line, PSTR("km/h"), 0);
// max Distance
lcd_printpns_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);
// min voltage
lcd_printpns_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);
// max time
lcd_printpns_at (0, ++line, stats_item_pointers[4], 0);
write_time (13, line, max_FlyingTime);
// longitude
lcd_printpns_at (0, ++line, stats_item_pointers[5], 0);
write_gps_pos (8, line, naviData->CurrentPosition.Longitude);
// latitude
lcd_printpns_at (0, ++line, stats_item_pointers[6], 0);
write_gps_pos (8, line, naviData->CurrentPosition.Latitude);
while (!get_key_press (1 << KEY_ESC))
timer = TIMEOUT;
COSD_FLAGS2 &= ~COSD_WASFLYING;
get_key_press(KEY_ALL);
lcd_cls();
}
 
void osd (void)
{
uint8_t flag;
uint8_t tmp_dat;
 
// 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_MKFlags = 0;
 
uint16_t old_hh = 0;
lcd_cls();
 
if (hardware == FC)
{
lcd_printp_at(0, 3, PSTR("Only with NC !"), 0);
timer = 100;
while (timer > 0);
}
 
SwitchToNC();
mode = 'O';
 
// 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);
 
// and disable debug...
// RS232_request_mk_data (0, 'd', 0);
tmp_dat = 0;
SendOutData ('d', ADDRESS_ANY, 1, &tmp_dat, 1);
flag = 0;
timer = TIMEOUT;
do
{
if (rxd_buffer_locked)
{
timer = TIMEOUT;
Decode64 ();
naviData = (NaviData_t *) pRxData;
flag = 1;
if (naviData->MKFlags & FLAG_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 ();
}
}
 
// lcd_printpns_at (0, 3, PSTR("012345678901234567890"), 0);
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_printpns_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_printpns_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 || naviData->Altimeter < -300)
{
// above 10m only write full meters
write_ndigit_number_s (0, 1, naviData->Altimeter / 30, 4, 0);
}
else
{
// up to 10m write meters.dm
write_ndigit_number_s_10th (0, 1, naviData->Altimeter / 3, 3, 0);
}
lcd_putc (4, 1, 'm', 0);
 
draw_variometer (55, 7, 9, 13, 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(10, 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, ' ', 0); // clear
}
#if 0
lcd_printp_at(11, 5, PSTR("Mode:"), 0);
if (naviData->NCFlags & NC_FLAG_CH)
{
lcd_printpns_at (17, 5, PSTR("CH "), 0);
}
else if (naviData->NCFlags & NC_FLAG_PH)
{
lcd_printpns_at (17, 5, PSTR("PH "), 0);
}
else
{ // (naviData->NCFlags & NC_FLAG_FREE)
lcd_printpns_at (17, 5, PSTR("Free"), 0); // sat2 (free)
}
#endif
if (naviData->NCFlags & NC_FLAG_CH)
{
lcd_printpns_at (10, 5, PSTR("Coming Home"), 0);
}
else if (naviData->NCFlags & NC_FLAG_PH)
{
lcd_printpns_at (10, 5, PSTR("Pos. Hold "), 0);
}
else
{ // (naviData->NCFlags & NC_FLAG_FREE)
lcd_printpns_at (10, 5, PSTR("Free "), 0);
}
// Battery level
write_ndigit_number_u_10th (0, 7, naviData->UBat, 3, 0);
lcd_putc (4, 7, 'V', 0);
 
// Flying time
write_time (7, 7, naviData->FlyingTime);
// lcd_printp_at (7, 6, PSTR("Fly"), 0);
 
// RC
write_ndigit_number_u (15, 7, naviData->RC_Quality, 3, 0);
lcd_putc (18, 7, 0x1F, 0); // RC-transmitter
if (naviData->NCFlags & NC_FLAG_NOSERIALLINK)
{
lcd_printpns_at(19, 7, PSTR(" "), 0); // clear
}
else
{
lcd_printpns_at(19, 7, PSTR("PC"), 0);
}
 
// remember statistics (only when engines running)
if (naviData->MKFlags & FLAG_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;
}
 
// remember last values
last_RC_Quality = naviData->RC_Quality;
last_UBat = naviData->UBat;
old_MKFlags = naviData->MKFlags;
 
rxd_buffer_locked = FALSE;
}
}
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;
if (!timer)
{ // timeout occured
if (flag)
{
lcd_cls ();
}
lcd_printp_at (0, 2, PSTR("ERROR: no data"), 0);
timer = 100;
while (timer > 0);
print_statistics ();
}
}
/Transportables_Koptertool/tags/V-0.1.2/osd.h
0,0 → 1,29
/*****************************************************************************
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net *
* based on the C-OSD code from CaScAdE *
* http://www.mylifesucks.de/oss/c-osd/ *
* *
* 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 _OSD_H
#define _OSD_H
 
//*****************************************************************************
//
void osd (void);
 
#endif
/Transportables_Koptertool/tags/V-0.1.2/parameter.c
0,0 → 1,687
/*****************************************************************************
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de *
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.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. *
* *
*****************************************************************************/
 
#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 "parameter.h"
#include "menu.h"
 
#include "mk-data-structs.h"
 
#define TIMEOUT 500 // 5 sec
 
mk_param_struct_t *mk_param_struct;
 
uint8_t array[8];
 
prog_uchar p_menus[12][11]=
{
"Config ",
"Channels ",
"Stick ",
"Hight ",
"Gyro ",
"Looping ",
"Camera ",
"Misc. ",
"User ",
"Coupling ",
"Config(2) ",
"Loopingset"
};
 
 
// Diese Tabelle ordnet die eingelesenen Parameter den Menü-Seiten zu
 
prog_uchar p_menu_number[67]=
{
2, 2, 2, 2, 2, 2, 2, 2, // Die ersten 8 Parameter werden auf Menüseite 2 angezeigt (=Kanalzuordnungen)
0, 4, 4, 4, 4, 4, 4, 3,
3, 3, 8, 8, 8, 8, 5, 5,
8,8,8,0,5,9,9,9,
9,7,7,7,7,7,7,6,
6,6,10,10,6,6,5,5,
5,9,9,9,9,0,7,11,
11,11,11,12,12, 12,
12,12,12,12,12
 
};
 
prog_uchar p_limits[199]= // Limits f¸r die Parameter
{
1,8,2, // 2:Nick (3)
1,8,2, // 2:Roll (4)
1,8,2, // 2:Gas (2)
1,8,2, // 2:Gier (1)
1,8,2, // 2:Poti1 (6)
1,8,2, // 2:Poti2 (6)
1,8,2, // 2:Poti3 (7)
1,8,2, // 2:Poti4 (5)
0,0,0, // 1:Config
0,255,4, // 4:Höhe MinGas (30)
0,255,4, // 4:Luftdruck_D (30)
0,255,4, // 4:MaxHöhe (Setpoint?) (Poti4)
0,255,4, // 4:Höhe_P (10)
0,50,4, // 4:Höhe Verst‰rkung (3)
0,255,4, // 4:Höhe Z-acc (30)
0,6,3, // 3:Nick/Roll P (3)
0,64,3, // 3:Nick/Roll D (4)
0,20,3, // 3:Gier_P (6)
0,32,8, // 8:Min.Gas (15)
33,250,8, // 8:Max.Gas (250)
0,50,8, // 5:Gyro-Acc Faktor (30)
0,255,8, // 8:Kompass-Wirkung (128)
0,0,5, // 5:Gyro-P (80)
0,0,5, // 5:Gyro-I (120)
0,250,8, // 8:Unterspannung (94)
0,250,8, // 8:Not-Gas Zeit (20)
0,250,8, // 8:Not-Gas (35)
0,1,0, // Ufo-Ausrichtung (X +)
0,255,5, // I-Faktor (32)
0,255,9, // 9:User1 (80)
0,255,9, // 9:User2 (0)
0,255,9, // 9:User3
0,255,9, // 9:User4
0,255,7, // 7:Servo Nick Control (100)
0,250,7, // 7:Servo Nick Compensation (40)
0,250,7, // 7:Servo Nick min (50)
0,250,7, // 7:Servo Nick max (150)
0,25,7, // 7:Servo Nick refrsh (5)
0,255,6, // 6:Loop Gas Limit (50)
0,250,6, // 6:Loop Ansprechschwelle (90)
0,250,6, // 6:Loop Hysterese (50)
0,255,10, // 10:Achskopplung (90)
0,255,10, // 10:Achsgegenkopplung (5)
0,250,6, // 6:Turnover Nick (100)
0,250,6, // 6:Turnover Roll (100)
0,250,5, // 5: Gyro-Abgleich (Comp.) (32)
0,250,5, // 5: Drift (4)
0,255,5, // 5: Dynamic stability (75)
0,255,9, // 9:User5
0,255,9, // 9:User6
0,255,9, // 9:User7
0,255,9, // 9:User8 (0)
 
0,0,1, // 6:Loop Config (0)
0,1,7 // 7:Servo Nick Compensation Invert (0)
};
 
prog_char bin_parameter[12][16] = // Die bin‰r kodierten Parametern werden getrennt behandelt.
{
"Loop up ",
"Loop down ",
"Loop left ",
"Loop right ",
"Höhenregler ", // 8
"Höhenschalter ",
"Headhold ",
"Kompass ",
"KompassFix ",
"GPS ",
"Achsenkopplung ",
"Drehrate "
};
 
prog_char parameter[54][16]=
{
"Nick ", // 0 (3)
"Roll ", // 1 (4)
"Gas ", // (2)
"Gier ", // (1)
"Poti1 ", // (6)
"Poti2 ", // (6)
"Poti3 ", // (7)
"Poti4 ", // 7 (5)
"Config ", // 8
"Höhe_MinGas ", // 9 (30)
"Luftdruck_D ", // 10 Wert : 0-250 (30)
"MaxHöhe ", // 11 Wert : 0-250 251 -> Poti1 (Poti4)
"Höhe_P ", // 12 Wert : 0-32 (10)
"Höhe_Verstaerk", // 13 Wert : 0-50
"Höhe_ACC_Wirk.", // 14 Wert : 0-250 (30)
"Stick_P ", // 15 Wert : 1-6
"Stick_D ", // 16 Wert : 0-64
"Gier_P ", // 17 Wert : 1-20 POTI(?)
"Gas_Min ", // 17 Wert : 0-32
"Gas_Max ", // 18 Wert : 33-250
"GyroAccFaktor ", // 19 Wert : 1-64
"KompassWirkung ", // 20 Wert : 0-250
"Gyro_P ", // 21 Wert : 0-250
"Gyro_I ", // 22 Wert : 0-250
"Unterspannung ", // 23 Wert : 0-250
"NotGas ", // 24 Wert : 0-250 // Gaswert bei Empangsverlust
"NotGasZeit ", // 25 Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
"UfoAusrichtung ", // 26 X oder + Formation
"I_Faktor ", // 27 = 32;
"UserParam1 ", // 28 = 32 * 4; //zur freien Verwendung
"UserParam2 ", // 29 zur freien Verwendung
"UserParam3 ", // 30 zur freien Verwendung
"UserParam4 ", // 31 zur freien Verwendung
"ServoNickCtrl ", // 32 Wert : 0-250 // Stellung des Servos
"ServoNickComp ", // 33 Wert : 0-250 // Einfluss Gyro/Servo
"ServoNickMin ", // 34 Wert : 0-250 // Anschlag
"ServoNickMax ", // 35 Wert : 0-250 // Anschlag
"ServoNickRefrsh", // 36
"LoopGasLimit ", // 37
"LoopThreshold ", // 38 Wert: 0-250 Schwelle f¸r Stickausschlag
"LoopHysterese ", // 39
"AchsKopplung ", // 40
"AchsGegenKoppl.", // 41
"WinklUmschlNick", // 42
"WinklUmschlRoll", // 43
"GyroAccAbgleich", // 44 1/k
"Driftkomp ", // 45
"DynamicStabilit", // 47
"UserParam5 ", // 48 zur freien Verwendung
"UserParam6 ", // 49 zur freien Verwendung
"UserParam7 ", // 50 zur freien Verwendung
"UserParam8 ", // 51 zur freien Verwendung
"LoopConfig ", // 52 Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
"ServoNickCompIn" // 53 Wert : 0-250 // Richtung Einfluss Gyro/Servo
// "Name " // 54
};
 
 
 
 
void binary (uint8_t data, uint8_t *feld) // Wandelt eine 8-Bit Zahl in eine Bin‰rzahl um (Array mit 8 Elementen)
{ // Wird f¸r die Flags (Loop + Grundkonfiguration) benˆtigt
uint8_t i;
i=0;
for (i = 0; i < 8; i++)
{
if ((1 << i) & data)
feld[i] = 1;
else
feld[i] = 0;
}
}
 
uint8_t bindec (uint8_t *feld) // wandelt eine Bin‰rzahl (im Array) in eine 8-Bit Zahl
{ // Wird f¸r die Flags (Loop + Grundkonfiguration) benˆtigt
uint8_t i;
uint8_t result;
result = 0;
for (i = 0; i < 8; i++)
{
if (feld[i] == 1)
result += 1 << i;
}
return result;
}
 
 
 
 
void decimal (uint8_t data, uint8_t *text) // wandelt Wert in rechtsbündigen Text um
{ // (schneller/kleiner als printf())
text[0] = data/100;
data -= (text[0] * 100);
text[1] = data/10;
data -= (text[1] *10);
text[2] = data + 0x30;
text[0] += 0x30;
text[1] += 0x30;
 
if (text[0] == 0x30)
{
text[0] = 0x20;
if (text[1] == 0x30)
text[1] = 0x20;
}
text[3] = 0x00;
}
 
uint8_t show_parameter (uint8_t number) // Zeigt eine Parameter-Seite an und gibt die ausgew‰hlte Zeile zur¸ck
{
#if 0
uint8_t i;
uint8_t line;
uint8_t text[25];
uint8_t bin[8];
line = 0;
if (number > 1)
{
for (i = 0; i<66; i++)
{
if (pgm_read_byte(p_limits+i*3+2) == number)
{
array[line] = i;
decimal(buffer[i],text);
lcd_print_at(0,line,text,0);
lcd_printp_at (5,line,parameter[i],0);
if (line <= 7)
line++;
}
}
}
else
{ // Sonderf‰lle: Bin‰re Eingabe
if (number == 1)
{
binary(buffer[52],bin); // Loop-Config
text[1] = 0x00;
for (i = 0; i < 4; i++)
{
text[0] = bin[i] + 0x30;
lcd_print_at (0, i, text, 0);
lcd_printp_at (5, i, bin_parameter[i], 0);
}
}
if (number == 0)
{
binary (buffer[8], bin); // Config
text[1] = 0x00;
for (i = 0; i < 8; i++)
{
text[0] = bin[i] + 0x30;
lcd_print_at (0, i, text, 0);
lcd_printp_at (5, i, bin_parameter[i + 4], 0);
}
}
 
}
return line;
#endif
}
 
void edit_parameter2 (uint8_t page, uint8_t lines) // ƒndern der Parameter einer Seite
{
#if 0
uint8_t line;
uint8_t par;
uint8_t min;
uint8_t max;
uint8_t text[10];
uint8_t bin[8];
if (page > 1) // "normale" Parameter-Seiten
{
line = menu_choose(0,lines-1,4);
if (line != 255) // Wenn line == 255, wurde Escape gedr¸ckt
{
par = buffer[array[line]];
min = pgm_read_byte(p_limits + par * 3);
max = pgm_read_byte(p_limits + par * 3 + 1);
lcd_printp_at(4,line,PSTR("-"),0);
while (key != key_nokey);
do
{
if (key == key_minus)
{
//if (par > min) // ‹berpr¸fung der Parameter auf Bereichs¸berschreitung derzeit deaktiviert
par --;
}
if (key == key_plus)
{
//if (par < max)
par ++;
}
decimal(par,text);
lcd_print_at(0,line,text,0);
timer = 20;
while (timer > 0);
}
while ((key != 0x04) && (key != 0x08));
if (key == 0x08)
buffer[array[line]] = par;
}
}
if (page == 1) // Spezialfall: Loop-Config (einzelne Bits setzen / lˆschen)
{
binary(buffer[52],bin);
text[1] = 0x00;
 
line = menu_choose(0,3,4);
if (line != 255) // Wenn line == 255, wurde Escape gedr¸ckt
{
par = bin[line];
lcd_printp_at(4,line,PSTR("-"),0);
do
{
if (key == key_minus)
{
par = 0x00;
}
if (key == key_plus)
{
par = 0x01;
}
text[0] = par+0x30;
lcd_print_at(0,line,text,0);
timer = 20;
while (timer > 0);
}
while ((key != key_enter) && (key != key_esc));
if (key == key_enter)
{
bin[line] = par;
buffer[52] = bindec(bin);
}
lcd_cls();
decimal(buffer[52],text);
lcd_print(text,0);
timer = 200;
while(timer > 0);
}
}
if (page == 0) // Spezialfall: Allgemeine Konfiguration (einzelne Bits setzen/lˆschen)
{
binary(buffer[8],bin);
text[1] = 0x00;
 
line = menu_choose(0,7,4);
if (line != 255) // Wenn line == 255, wurde Escape gedr¸ckt
{
par = bin[line];
lcd_printp_at(4,line,PSTR("-"),0);
do
{
if (key == key_minus)
{
par = 0x00;
}
if (key == key_plus)
{
par = 0x01;
}
text[0] = par+0x30;
lcd_print_at(0,line,text,0);
timer = 20;
while (timer > 0);
}
while ((key != key_enter) && (key != key_esc));
if (key == key_enter)
{
bin[line] = par;
buffer[8] = bindec(bin);
}
lcd_cls();
decimal(buffer[8],text);
lcd_print(text,0);
timer = 200;
while(timer > 0);
}
}
#endif
}
 
 
void edit_parameter1 (void)
{
uint8_t cmd;
uint8_t setting = 0xff;
mode = 'P'; // Settings
 
lcd_cls ();
 
//mode = 'Q'; // Settings
_delay_ms (50);
rxd_buffer_locked = FALSE;
timer = TIMEOUT;
LED2_ON;
//SendOutData ('q', ADDRESS_FC, 1, &setting, 1);
SendOutData ('p', ADDRESS_FC, 1);
while (!rxd_buffer_locked && timer);
if (timer)
{
LED3_ON;
Decode64 ();
#if 0
mk_param_struct = (mk_param_struct_t *) pRxData + 2;
 
lcd_printp (PSTR("Current Setting: "), 0);
lcd_write_number_u (*pRxData);
lcd_printp (PSTR("Setting Version: "), 0);
lcd_write_number_u (*pRxData+1);
#endif
LED3_OFF;
}
else
{ // timeout occured
lcd_printp_at (0, 2, PSTR("ERROR: no data"), 0);
timer = 100;
while (timer > 0);
return;
}
LED2_OFF;
 
// after all work is done...
rxd_buffer_locked = FALSE;
 
#if 0
uint8_t page; // 12 Pages
uint8_t text[15];
uint8_t lines;
uint8_t parameter;
lcd_cls ();
lcd_printp (PSTR("Load Setting\r\n"), 0);
lcd_printp (PSTR(" 1:\r\n"), 0);
lcd_printp (PSTR(" 2:\r\n"), 0);
lcd_printp (PSTR(" 3:\r\n"), 0);
lcd_printp (PSTR(" 4:\r\n"), 0);
lcd_printp (PSTR(" 5:\r\n"), 0);
parameter = menu_choose (1, 5, 0);
 
page = 2;
if (read_parameter (parameter) == 1)
{
lcd_printp_at (0, 6, PSTR("Timeout"), 0);
}
else
{
do
{
lcd_cls ();
utoa (page, text, 10);
lcd_print (text, 0);
timer = 50;
while (timer > 0);
lcd_cls ();
lines = show_parameter (page);
while (key == key_nokey);
if (key == key_plus)
page++;
if (key == key_minus)
page--;
if (page == 255)
page = 12;
if (page > 12)
page = 0;
if (key == key_enter)
edit_parameter2 (page, lines);
}
while (key != key_esc);
lcd_cls ();
lcd_printp (PSTR("Parameter speichern?\r\n ja\r\n nein"), 0);
lines = menu_choose (1, 2, 0);
if (lines == 1 )
{
lcd_printp (PSTR("\r\n--->"), 0);
write_parameter (5); // Sicherheitshalber wird derzeit ausschliefllich auf Parametersatz 5 gesichert.
lcd_printp (PSTR("\r\nParameter gespeichert"), 0);
}
else
{
lcd_printp (PSTR("\r\nNicht gespeichert"), 0);
}
}
timer = 100;
while (timer > 0);
#endif
}
 
void display_page (uint8_t page)
{
lcd_cls ();
 
switch (page)
{
case 0:
lcd_printp (PSTR("Current Setting: "), 0);
lcd_write_number_u (*pRxData);
lcd_printp (PSTR("\r\nSetting Version: "), 0);
lcd_write_number_u (*(pRxData + 1));
#if 0
lcd_printp (PSTR("\r\nRxDataLen: "), 0);
lcd_write_number_u (RxDataLen);
lcd_printp (PSTR("\r\nRxBytes: "), 0);
lcd_write_number_u (ReceivedBytes);
#endif
break;
 
case 1:
lcd_printp (PSTR("Pitch: "), 0);
lcd_write_number_u (mk_param_struct->Kanalbelegung[0]);
 
lcd_printp (PSTR("Yaw : "), 0);
lcd_write_number_u (mk_param_struct->Kanalbelegung[1]);
lcd_printp (PSTR("Nick : "), 0);
lcd_write_number_u (mk_param_struct->Kanalbelegung[2]);
lcd_printp (PSTR("Roll : "), 0);
lcd_write_number_u (mk_param_struct->Kanalbelegung[3]);
lcd_printp (PSTR("Poti1: "), 0);
lcd_write_number_u (mk_param_struct->Kanalbelegung[4]);
lcd_printp (PSTR("Poti2: "), 0);
lcd_write_number_u (mk_param_struct->Kanalbelegung[5]);
lcd_printp (PSTR("Poti3: "), 0);
lcd_write_number_u (mk_param_struct->Kanalbelegung[6]);
lcd_printp (PSTR("Poti4: "), 0);
lcd_write_number_u (mk_param_struct->Kanalbelegung[7]);
break;
}
}
 
 
void edit_parameter (void)
{
uint8_t cmd;
uint8_t sett = 0xff; // current active parameter set
uint8_t page = 0;
SwitchToFC();
mode = 'Q'; // Settings
lcd_cls ();
 
_delay_ms (50);
rxd_buffer_locked = FALSE;
timer = TIMEOUT;
SendOutData ('q', ADDRESS_FC, 1, &sett, 1);
while (!rxd_buffer_locked && timer);
if (timer)
{
Decode64 ();
mk_param_struct = (mk_param_struct_t *) pRxData + 2;
display_page (page);
if (get_key_press (1 << KEY_MINUS))
{
page--;
}
else if (get_key_press (1 << KEY_PLUS))
{
page++;
}
 
}
else
{ // timeout occured
lcd_printp_at (0, 2, PSTR("ERROR: no data"), 0);
timer = 100;
while (timer > 0);
return;
}
// after all work is done...
//rxd_buffer_locked = FALSE;
while (!get_key_press (1 << KEY_ESC)); // ESC
 
mode = 0;
rxd_buffer_locked = FALSE;
}
/Transportables_Koptertool/tags/V-0.1.2/parameter.h
0,0 → 1,29
/*****************************************************************************
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de *
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.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. *
* *
*****************************************************************************/
 
#ifndef _PARAMETER_H
#define _PARAMETER_H
 
//*****************************************************************************
//
void edit_parameter (void);
void decimal (uint8_t data, uint8_t *text);
 
#endif
/Transportables_Koptertool/tags/V-0.1.2/servo.c
0,0 → 1,128
/*****************************************************************************
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.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. *
* *
*****************************************************************************/
 
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
 
#include "lcd.h"
#include "timer.h" // Keys
#include "servo.h"
 
#define SERVO_MIN 313 // 1.0 ms (Servo min)
#define SERVO_MAX 625 // 2.0 ms (Servo max)
#define SERVO_CENTER 469 // 1.5 ms
 
#define SERVO_PULSE 6250 // 20 ms
 
//*****************************************************************************
//
ISR(TIMER1_COMPA_vect)
{
PORTD |= (1 << PD7);
}
 
//*****************************************************************************
//
ISR(TIMER1_COMPB_vect)
{
PORTD &= ~(1 << PD7);
}
 
//*****************************************************************************
//
void servo_test (void)
{
uint8_t chg = 0;
uint8_t step = 10;
DDRD |= (1 << DDD7); // PD7 output
 
TCCR1B = (1 << WGM12) | (1 << CS11) | (1 << CS10); // Prescaler 1/64, CTC mode
// 1 step = 3,2 µs (@ 20 MHz)
 
OCR1A = SERVO_PULSE;
 
OCR1B = SERVO_CENTER;
 
TIMSK1 = (1 << OCIE1A) | (1 << OCIE1B);
 
lcd_cls ();
lcd_printp (PSTR("Servo Tester"), 0);
//lcd_printpns_at (0, 7, PSTR("-1 +1 Exit \x1d\x7c\x1c"), 0);
lcd_printpns_at (0, 7, PSTR("-10 +10 Exit \x1d\x7c\x1c"), 0);
lcd_frect (SGX, SGY, ((OCR1B - SERVO_MIN) * SMAXGX) / (SERVO_MAX - SERVO_MIN), 10, 1);
//write_ndigit_number_u (SMX, SMY, ((OCR1B - SERVO_MIN) * 100) / (SERVO_MAX - SERVO_MIN), 3, 0); // Pulse width in %
write_ndigit_number_u_100th(SMX, SMY, (OCR1B * 64) / 200 , 3, 0); // Pulse width in ms
 
do
{
if ((get_key_press (1 << KEY_PLUS) || get_key_rpt (1 << KEY_PLUS)) && (OCR1B < SERVO_MAX))
{
OCR1B += step;
if (OCR1B > SERVO_MAX)
{
OCR1B = SERVO_MAX;
}
chg++;
}
else if ((get_key_press (1 << KEY_MINUS) || get_key_rpt (1 << KEY_MINUS)) && (OCR1B > SERVO_MIN))
{
lcd_frect (SGX, SGY, ((OCR1B - SERVO_MIN) * SMAXGX) / (SERVO_MAX - SERVO_MIN), 10, 0);
OCR1B -= step;
if (OCR1B < SERVO_MIN)
{
OCR1B = SERVO_MIN;
}
chg++;
}
else if (get_key_short (1 << KEY_ENTER))
{
lcd_frect (SGX, SGY, ((OCR1B - SERVO_MIN) * SMAXGX) / (SERVO_MAX - SERVO_MIN), 10, 0);
OCR1B = SERVO_CENTER;
chg++;
}
else if (get_key_long (1 << KEY_ENTER))
{
if (step == 1)
{
step = 10;
lcd_printpns_at (0, 7, PSTR("-10 +10 Exit \x1d\x7c\x1c"), 0);
}
else
{
step = 1;
lcd_printpns_at (0, 7, PSTR("-1 +1 Exit \x1d\x7c\x1c"), 0);
}
}
if (chg)
{
chg = 0;
lcd_frect (SGX, SGY, ((OCR1B - SERVO_MIN) * SMAXGX) / (SERVO_MAX - SERVO_MIN), 10, 1);
//write_ndigit_number_u (SMX, SMY, ((OCR1B - SERVO_MIN) * 100) / (SERVO_MAX - SERVO_MIN), 3, 0); // Pulse width in %
write_ndigit_number_u_100th(SMX, SMY, (OCR1B * 64) / 200 , 3, 0); // Pulse width in ms
}
}
while (!get_key_press (1 << KEY_ESC));
get_key_press(KEY_ALL);
 
TIMSK1 = 0;
}
/Transportables_Koptertool/tags/V-0.1.2/servo.h
0,0 → 1,41
/*****************************************************************************
* Copyright (C) 2009-2010 Peter "woggle" Mack, mac@denich.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. *
* *
*****************************************************************************/
 
#ifndef _SERVO_H
#define _SERVO_H
 
//*****************************************************************************
//
 
// text position
#define SMX 0
#define SMY 3
 
// graphics position
//#define SGX ((SMX + 3) * 6 + 1) // 3 for 3 digits
#define SGX ((SMX + 4) * 6 + 1) // 4 for 4 digits
#define SGY (SMY * 8 - 2)
 
#define SMAXGX (128 - SGX)
 
//*****************************************************************************
//
void servo_test (void);
 
#endif
/Transportables_Koptertool/tags/V-0.1.2/settings.c
0,0 → 1,142
/*****************************************************************************
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de *
* Copyright (C) 2009-2010 Peter "woggle" Mack, mac@denich.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. *
* *
*****************************************************************************/
 
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
 
#include "main.h"
#include "menu.h"
#include "lcd.h"
#include "settings.h"
#include "timer.h"
#include "lipo.h"
#include "eeprom.h"
 
 
//*****************************************************************************
//
void set_toggledisplay(void)
{
cli();
 
if (LCD_ORIENTATION == 0)
LCD_ORIENTATION = 4;
else
LCD_ORIENTATION = 0;
 
WriteParameter ();
LCD_Init();
 
sei();
}
 
//*****************************************************************************
//
void set_viewfont(void)
{
uint8_t page;
page = 0;
lcd_view_font (page);
do
{
if (get_key_press (1 << KEY_PLUS) && (page < 1))
{
page++;
lcd_view_font (page);
}
if (get_key_press (1 << KEY_MINUS) && (page > 0))
{
page--;
lcd_view_font (page);
}
}
while (!get_key_press (1 << KEY_ESC));
get_key_press(KEY_ALL);
}
 
//*****************************************************************************
//
void set_lipo(void)
{
lcd_cls();
lcd_printp_at(0, 0, PSTR("LiPo Under Voltage:"), 0);
lcd_printp_at(0, 2, PSTR("Warn Voltage: "), 0);
lcd_printpns_at (0, 7, PSTR(" - + Ok"), 0);
do
{
write_ndigit_number_u_10th(14, 2, AD_WarnLevel, 3, 0);
if (get_key_press (1 << KEY_PLUS) && (AD_WarnLevel < 40))
{
AD_WarnLevel++;
}
else if (get_key_press (1 << KEY_MINUS) && (AD_WarnLevel > 20))
{
AD_WarnLevel--;
}
}
while (!get_key_press (1 << KEY_ESC));
get_key_press(KEY_ALL);
WriteParameter ();
}
 
 
// Not really usefull :-)
// testing....
 
//*****************************************************************************
//
void set_line(void)
{
lcd_cls ();
#if 1
lcd_line (10, 20, 100, 50, 1); // draw a line
#else
lcd_ecircle(22, 35, 18, 1);
uint16_t old_d = 0;
for (uint16_t i = 0; i < 360; i += 10)
{
lcd_ecirc_line (22, 35, 17, old_d, 0);
old_d = i;
lcd_ecirc_line (22, 35, 17, i, 1);
while (!get_key_press (1 << KEY_ENTER));
}
#endif
while (!get_key_press (1 << KEY_ESC));
}
 
//*****************************************************************************
//
void set_rect(void)
{
lcd_cls ();
//lcd_rect (10, 20, 100, 40, 1); // draw a rect
//lcd_ellipse(60, 30, 23, 20, 1);
lcd_frect(10, 10, 20, -5, 1);
write_ndigit_number_s (10, 1, -10, 2, 0);
write_ndigit_number_s (10, 2, -10, 3, 0);
write_ndigit_number_s (10, 3, -10, 4, 0);
write_ndigit_number_s (10, 4, -10, 5, 0);
while (!get_key_press (1 << KEY_ESC));
}
/Transportables_Koptertool/tags/V-0.1.2/settings.h
0,0 → 1,34
/*****************************************************************************
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de *
* Copyright (C) 2009-2010 Peter "woggle" Mack, mac@denich.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. *
* *
*****************************************************************************/
 
#ifndef _SETTINGS_H
#define _SETTINGS_H
 
//*****************************************************************************
//
void set_toggledisplay(void);
void set_viewfont(void);
 
void set_line(void);
void set_rect(void);
 
void set_lipo(void);
 
#endif
/Transportables_Koptertool/tags/V-0.1.2/status.c
0,0 → 1,65
/*****************************************************************************
* Copyright (C) 2010 Peter "woggle" Mack, mac@denich.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. *
* *
*****************************************************************************/
 
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
 
#include "lcd.h"
#include "timer.h" // Keys
#include "usart.h"
#include "status.h"
#include "debug.h"
 
 
//*****************************************************************************
//
void status (void)
{
uint8_t line = 1;
 
lcd_cls ();
lcd_printp (PSTR("Status:"), 0);
lcd_printpns_at (0, 7, PSTR(" Back "), 0);
lcd_printp_at(0, line, PSTR("MMB Version: "), 0);
lcd_write_number_u (VERSION_MAJOR);
lcd_printp(PSTR("."), 0);
lcd_write_number_u (VERSION_MINOR);
line++;
lcd_printp_at(0, line, PSTR("UART CRC ERR: "), 0);
write_ndigit_number_u(15, line, stat_crc_error, 5, 0);
line++;
lcd_printp_at(0, line, PSTR("UART OVEFLOW: "), 0);
write_ndigit_number_u(15, line, stat_overflow_error, 5, 0);
line++;
lcd_printp_at(0, line, PSTR("Names NC: "), 0);
write_ndigit_number_u(15, line, AnalogNamesRead[0], 5, 0);
line++;
 
lcd_printp_at(0, line, PSTR("AN FC: "), 0);
write_ndigit_number_u(15, line, AnalogNamesRead[1], 5, 0);
line++;
 
while (!get_key_press (1 << KEY_ESC));
}
/Transportables_Koptertool/tags/V-0.1.2/status.h
0,0 → 1,30
/*****************************************************************************
* Copyright (C) 2010 Peter "woggle" Mack, mac@denich.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. *
* *
*****************************************************************************/
 
#ifndef _STATUS_H
#define _STATUS_H
 
//*****************************************************************************
//
 
//*****************************************************************************
//
void status (void);
 
#endif
/Transportables_Koptertool/tags/V-0.1.2/timer.c
0,0 → 1,169
/*****************************************************************************
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net *
* based on the key handling by Peter Dannegger *
* see www.mikrocontroller.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. *
* *
*****************************************************************************/
 
#include <avr/io.h>
#include <avr/interrupt.h>
#include "main.h"
#include "timer.h"
 
volatile uint16_t timer;
 
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_rpt; // key long press and repeat
 
 
//*****************************************************************************
//
#if defined (__AVR_ATmega32__)
ISR(TIMER0_COMP_vect) // Timer-Interrupt (100 Hz)
#else
ISR(TIMER0_COMPA_vect) // Timer-Interrupt (100 Hz)
#endif
{
static uint8_t ct0 = 0;
static uint8_t ct1 = 0;
static uint8_t rpt = 0;
uint8_t i;
// 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 ((key_state & REPEAT_MASK) == 0) // check repeat function
{
rpt = REPEAT_START; // start delay
}
if (--rpt == 0)
{
rpt = REPEAT_NEXT; // repeat delay
key_rpt |= (key_state & REPEAT_MASK);
}
 
if (timer > 0)
timer --;
}
 
 
//*****************************************************************************
//
void TIMER0_Init (void)
{
timer = 0;
#if defined (__AVR_ATmega32__)
TCCR0 = (1 << CS02) | (1 << CS00) | (1 << WGM01); // Prescaler 1024
OCR0 = (F_CPU / (100L * 1024L)) ;
 
TIMSK |= (1 << OCIE0); // enable interrupt for OCR
#else
TCCR0A = (1 << WGM01);
TCCR0B = (1 << CS02) | (1 << CS00);
OCR0A = (F_CPU / (100L * 1024L)) ;
 
TIMSK0 |= (1 << OCIE0A); // enable interrupt for OCR
#endif
}
 
 
//*****************************************************************************
//
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_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_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)
{
return get_key_press (get_key_rpt (key_mask));
}
 
 
//*****************************************************************************
//
uint8_t get_key_long2 (uint8_t key_mask)
{
return get_key_press (get_key_rpt (key_press^key_mask));
}
 
 
//*****************************************************************************
//
uint8_t get_key_long_rpt (uint8_t key_mask)
{
return get_key_rpt (~key_press^key_mask);
}
/Transportables_Koptertool/tags/V-0.1.2/timer.h
0,0 → 1,47
/*****************************************************************************
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net *
* based on the key handling by Peter Dannegger *
* see www.mikrocontroller.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. *
* *
*****************************************************************************/
 
#ifndef _TIMER_H
#define _TIMER_H
 
#define KEY_PIN PINA
#define KEY_ENTER PA7
#define KEY_ESC PA6
#define KEY_PLUS PA5
#define KEY_MINUS PA4
#define KEY_ALL ((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)) // repeat: MODE
 
#define REPEAT_START 50 // after 500ms
#define REPEAT_NEXT 10 // every 100ms
 
extern volatile uint16_t timer;
 
void TIMER0_Init (void);
 
uint8_t get_key_press (uint8_t key_mask);
uint8_t get_key_rpt (uint8_t key_mask);
uint8_t get_key_short (uint8_t key_mask);
uint8_t get_key_long (uint8_t key_mask);
uint8_t get_key_long2 (uint8_t key_mask);
uint8_t get_key_long_rpt (uint8_t key_mask);
 
#endif
/Transportables_Koptertool/tags/V-0.1.2/usart.c
0,0 → 1,515
/*****************************************************************************
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net *
* taken some ideas from the C-OSD code from CaScAdE *
* the MK communication routines are taken from the MK source *
* (killagreg version) *
* *
* 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/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"
 
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;
 
#ifdef DEBUG_UART
//*****************************************************************************
// USART1 transmitter ISR
ISR (USART1_TXC_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
}
UDR1 = tmp_tx; // send current byte will trigger this ISR again
}
// transmission completed
else ptr_txd_buffer = 0;
}
 
//*****************************************************************************
//
void USART1_Init (void)
{
// set clock divider
#undef BAUD
#define BAUD USART_BAUD
#include <util/setbaud.h>
UBRR1H = UBRRH_VALUE;
UBRR1L = UBRRL_VALUE;
#if USE_2X
UCSR1A |= (1 << U2X1); // enable double speed operation
#else
UCSR1A &= ~(1 << U2X1); // disable double speed operation
#endif
// set 8N1
UCSR1C = (1 << UCSZ11) | (1 << UCSZ10);
UCSR1B &= ~(1 << UCSZ12);
// flush receive buffer
while ( UCSR1A & (1 << RXC1) ) UDR1;
// UCSR1B |= (1 << RXEN1) | (1 << TXEN1);
// UCSR1B |= (1 << RXCIE1) | (1 << TXCIE1);
UCSR1B |= (1 << RXEN1) | (1 << TXEN1);
UCSR1B |= (1 << TXCIE1);
}
 
void debug ()
{
sprintf (txd_buffer, "test\r");
txd_complete = FALSE;
UDR1 = txd_buffer[0];
}
#endif
 
#ifdef USART_INT
//*****************************************************************************
// USART0 transmitter ISR
ISR (USART_TXC_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
 
//*****************************************************************************
//
ISR (USART_RXC_vect)
{
static uint16_t crc;
static uint8_t ptr_rxd_buffer = 0;
uint8_t crc1, crc2;
uint8_t c;
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
{
LED6_OFF;
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
LED6_ON;
// 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
//LED5_TOGGLE;
//lcd_putc(0, 6, rxd_buffer[2], 0);
}
ptr_rxd_buffer = 0; // reset rxd buffer pointer
}
}
else // rxd buffer overrun
{
//LED4_TOGGLE;
stat_overflow_error++;
ptr_rxd_buffer = 0; // reset rxd buffer
rxd_buffer_locked = FALSE; // unlock rxd buffer
}
}
 
//*****************************************************************************
//
void USART_Init (void)
{
// set clock divider
#undef BAUD
#define BAUD USART_BAUD
#include <util/setbaud.h>
UBRRH = UBRRH_VALUE;
UBRRL = UBRRL_VALUE;
#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
}
 
//*****************************************************************************
// 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)
{
// 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 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/tags/V-0.1.2/usart.h
0,0 → 1,127
/*****************************************************************************
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net *
* taken some ideas from the C-OSD code from CaScAdE *
* the MK communication routines are taken from the MK source *
* (killagreg version) *
* *
* 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 _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
 
//*****************************************************************************
//
extern uint8_t buffer[30];
 
extern volatile uint8_t txd_buffer[TXD_BUFFER_LEN];
extern volatile uint8_t txd_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;
 
//*****************************************************************************
//
void USART_Init (void);
 
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);
 
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);
 
//*****************************************************************************
//Anpassen der seriellen Schnittstellen Register
#if defined (__AVR_ATmega644__) || defined (__AVR_ATmega644P__) || defined (__AVR_ATmega168__)
#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
 
#endif
/Transportables_Koptertool/trunk/V-0.1.1/font8x6.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/displ_val.h
File deleted
\ No newline at end of file
/Transportables_Koptertool/trunk/V-0.1.1/main.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/base64.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/timer.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/parameter.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/debug.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/Spezial/MMT-Mega644-16.hex
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/Spezial/MMT-Mega32-20.hex
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/Spezial/MMT-Mega32-7.hex
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/Spezial/MMT-Mega32-16.hex
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/Spezial/MMT-Mega644-20.hex
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/base64.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/main.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/Readme.txt
File deleted
\ No newline at end of file
/Transportables_Koptertool/trunk/V-0.1.1/debug.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/F8X6.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/makefile
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/MMT.hex
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/motortest.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/settings.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/lcd.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/menu.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/display.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/motortest.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/settings.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/lcd.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/menu.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/display.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/rs232.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/displ_val.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/timer.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/parameter.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.1/rs232.h
File deleted
/Transportables_Koptertool/trunk/V-0.1/debug.c
File deleted
/Transportables_Koptertool/trunk/V-0.1/debug.h
File deleted
/Transportables_Koptertool/trunk/V-0.1/F8X6.c
File deleted
/Transportables_Koptertool/trunk/V-0.1/motortest.c
File deleted
/Transportables_Koptertool/trunk/V-0.1/settings.c
File deleted
/Transportables_Koptertool/trunk/V-0.1/lcd.c
File deleted
/Transportables_Koptertool/trunk/V-0.1/default/Makefile
File deleted
/Transportables_Koptertool/trunk/V-0.1/default/MMT.elf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/Transportables_Koptertool/trunk/V-0.1/default/MMT_Mega32_7.hex
File deleted
/Transportables_Koptertool/trunk/V-0.1/default/MMT.eep
File deleted
/Transportables_Koptertool/trunk/V-0.1/menu.c
File deleted
/Transportables_Koptertool/trunk/V-0.1/motortest.h
File deleted
/Transportables_Koptertool/trunk/V-0.1/settings.h
File deleted
/Transportables_Koptertool/trunk/V-0.1/lcd.h
File deleted
/Transportables_Koptertool/trunk/V-0.1/menu.h
File deleted
/Transportables_Koptertool/trunk/V-0.1/main.eep
File deleted
/Transportables_Koptertool/trunk/V-0.1/displ_val.c
File deleted
/Transportables_Koptertool/trunk/V-0.1/main.map
File deleted
/Transportables_Koptertool/trunk/V-0.1/timer.c
File deleted
/Transportables_Koptertool/trunk/V-0.1/displ_val.h
File deleted
\ No newline at end of file
/Transportables_Koptertool/trunk/V-0.1/main.c
File deleted
/Transportables_Koptertool/trunk/V-0.1/base64.c
File deleted
/Transportables_Koptertool/trunk/V-0.1/timer.h
File deleted
/Transportables_Koptertool/trunk/V-0.1/main.hex
File deleted
/Transportables_Koptertool/trunk/V-0.1/base64.h
File deleted
/Transportables_Koptertool/trunk/V-0.1/main.h
File deleted
/Transportables_Koptertool/trunk/V-0.1/makefile
File deleted
/Transportables_Koptertool/trunk/V-0.1/MMT.aps
File deleted
/Transportables_Koptertool/trunk/V-0.1/main.lss
File deleted
/Transportables_Koptertool/trunk/V-0.1/mmt.aws
File deleted
/Transportables_Koptertool/trunk/V-0.1/display.c
File deleted
/Transportables_Koptertool/trunk/V-0.1/main.elf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/Transportables_Koptertool/trunk/V-0.1/main.sym
File deleted
/Transportables_Koptertool/trunk/V-0.1/display.h
File deleted
/Transportables_Koptertool/trunk/V-0.1/rs232.c
File deleted
/Transportables_Koptertool/trunk/V-0.1/rs232.h
File deleted
/Transportables_Koptertool/trunk/V-0.1/parameter.c
File deleted
/Transportables_Koptertool/trunk/V-0.1/font8x6.h
File deleted
/Transportables_Koptertool/trunk/V-0.1/parameter.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/font8x6.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/font8x8.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/main.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/CHANGE.LOG
File deleted
\ No newline at end of file
/Transportables_Koptertool/trunk/V-0.1.2/parameter.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/debug.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/MMB 1.sch
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/Transportables_Koptertool/trunk/V-0.1.2/mk-data-structs.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/main.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/README.txt
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/debug.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/jeti.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/servo.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/usart.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/motortest.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/jeti.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/TODO.txt
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/lcd.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/servo.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/usart.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/lipo.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/motortest.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/lcd.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/lipo.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/font8X6.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/displ_val.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/timer.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/displ_val.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/status.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/MMB 1.pdf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/Transportables_Koptertool/trunk/V-0.1.2/osd.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/timer.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/eeprom.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/status.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/osd.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/eeprom.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/Makefile
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/settings.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/menu.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/settings.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/display.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/menu.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/display.h
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/font8x8.c
File deleted
/Transportables_Koptertool/trunk/V-0.1.2/LICENSE.TXT
File deleted
\ No newline at end of file
/Transportables_Koptertool/trunk/V-0.1.2/parameter.c
File deleted