Subversion Repositories NaviCtrl

Rev

Rev 214 | Rev 224 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 214 Rev 215
1
/*#######################################################################################*/
1
/*#######################################################################################*/
2
/* !!! THIS IS NOT FREE SOFTWARE !!!                                                     */
2
/* !!! THIS IS NOT FREE SOFTWARE !!!                                                     */
3
/*#######################################################################################*/
3
/*#######################################################################################*/
4
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
4
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5
// + Copyright (c) 2008 Ingo Busker, Holger Buss
5
// + Copyright (c) 2008 Ingo Busker, Holger Buss
6
// + Nur für den privaten Gebrauch / NON-COMMERCIAL USE ONLY
6
// + Nur für den privaten Gebrauch / NON-COMMERCIAL USE ONLY
7
// + FOR NON COMMERCIAL USE ONLY
7
// + FOR NON COMMERCIAL USE ONLY
8
// + www.MikroKopter.com
8
// + www.MikroKopter.com
9
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
9
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
10
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
10
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
11
// + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulässig ist.
11
// + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulässig ist.
12
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
12
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
13
// + bzgl. der Nutzungsbedingungen aufzunehmen.
13
// + bzgl. der Nutzungsbedingungen aufzunehmen.
14
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
14
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
15
// + Verkauf von Luftbildaufnahmen, usw.
15
// + Verkauf von Luftbildaufnahmen, usw.
16
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
17
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
18
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
18
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
19
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
20
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
20
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
21
// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
21
// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
22
// + eindeutig als Ursprung verlinkt werden
22
// + eindeutig als Ursprung verlinkt werden
23
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
23
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
24
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
24
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
25
// + Benutzung auf eigene Gefahr
25
// + Benutzung auf eigene Gefahr
26
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
26
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
27
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
27
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
28
// + Die Portierung oder Nutzung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
28
// + Die Portierung oder Nutzung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
29
// + mit unserer Zustimmung zulässig
29
// + mit unserer Zustimmung zulässig
30
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
30
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
31
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
31
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
32
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
32
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
33
// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
33
// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
34
// + this list of conditions and the following disclaimer.
34
// + this list of conditions and the following disclaimer.
35
// +   * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
35
// +   * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
36
// +     from this software without specific prior written permission.
36
// +     from this software without specific prior written permission.
37
// +   * The use of this project (hardware, software, binary files, sources and documentation) is only permitted
37
// +   * The use of this project (hardware, software, binary files, sources and documentation) is only permitted
38
// +     for non-commercial use (directly or indirectly)
38
// +     for non-commercial use (directly or indirectly)
39
// +     Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
39
// +     Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
40
// +     with our written permission
40
// +     with our written permission
41
// +   * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be
41
// +   * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be
42
// +     clearly linked as origin
42
// +     clearly linked as origin
43
// +   * porting the sources to other systems or using the software on other systems (except hardware from www.mikrokopter.de) is not allowed
43
// +   * porting the sources to other systems or using the software on other systems (except hardware from www.mikrokopter.de) is not allowed
44
//
44
//
45
// +  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
45
// +  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
46
// +  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
46
// +  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
47
// +  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
47
// +  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
48
// +  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
48
// +  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
49
// +  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
49
// +  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
50
// +  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
50
// +  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
51
// +  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
51
// +  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
52
// +  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
52
// +  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
53
// +  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
53
// +  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
54
// +  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
54
// +  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
55
// +  POSSIBILITY OF SUCH DAMAGE.
55
// +  POSSIBILITY OF SUCH DAMAGE.
56
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
56
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
57
#include <stdio.h>
57
#include <stdio.h>
58
#include <stdarg.h>
58
#include <stdarg.h>
59
#include <string.h>
59
#include <string.h>
60
 
60
 
61
#include "91x_lib.h"
61
#include "91x_lib.h"
62
#include "config.h"
62
#include "config.h"
63
#include "menu.h"
63
#include "menu.h"
64
#include "GPS.h"
64
#include "GPS.h"
65
#include "i2c.h"
65
#include "i2c.h"
66
#include "uart0.h"
66
#include "uart0.h"
67
#include "uart1.h"
67
#include "uart1.h"
68
#include "uart2.h"
68
#include "uart2.h"
69
#include "timer1.h"
69
#include "timer1.h"
70
#include "timer2.h"
70
#include "timer2.h"
71
#include "analog.h"
71
#include "analog.h"
72
#include "main.h"
72
#include "main.h"
73
#include "waypoints.h"
73
#include "waypoints.h"
74
#include "mkprotocol.h"
74
#include "mkprotocol.h"
75
#include "params.h"
75
#include "params.h"
76
#include "fifo.h"
76
#include "fifo.h"
77
 
77
 
78
#define FALSE   0
78
#define FALSE   0
79
#define TRUE    1
79
#define TRUE    1
80
 
80
 
81
#define ABO_TIMEOUT 4000 // disable abo after 4 seconds
81
#define ABO_TIMEOUT 4000 // disable abo after 4 seconds
82
u32 UART1_AboTimeOut = 0;
82
u32 UART1_AboTimeOut = 0;
83
 
83
 
84
u8 UART1_Request_VersionInfo    = FALSE;
84
u8 UART1_Request_VersionInfo    = FALSE;
85
u8 UART1_Request_SendFollowMe   = FALSE;
-
 
86
u8 UART1_Request_ExternalControl= FALSE;
85
u8 UART1_Request_ExternalControl= FALSE;
87
u8 UART1_Request_Display                = FALSE;
86
u8 UART1_Request_Display                = FALSE;
88
u8 UART1_Request_Display1               = FALSE;
87
u8 UART1_Request_Display1               = FALSE;
89
u8 UART1_Request_DebugData              = FALSE;
88
u8 UART1_Request_DebugData              = FALSE;
90
u8 UART1_Request_DebugLabel             = 255;
89
u8 UART1_Request_DebugLabel             = 255;
91
u8 UART1_Request_NaviData               = FALSE;
90
u8 UART1_Request_NaviData               = FALSE;
92
u8 UART1_Request_ErrorMessage   = FALSE;
91
u8 UART1_Request_ErrorMessage   = FALSE;
93
u8 UART1_Request_NewWaypoint    = FALSE;
92
u8 UART1_Request_NewWaypoint    = FALSE;
94
u8 UART1_Request_ReadWaypoint   = 255;
93
u8 UART1_Request_ReadWaypoint   = 255;
95
u8 UART1_Request_Data3D             = FALSE;
94
u8 UART1_Request_Data3D             = FALSE;
96
u8 UART1_Request_Echo               = FALSE;
95
u8 UART1_Request_Echo               = FALSE;
97
u8 UART1_Request_ParameterId    = 0;
96
u8 UART1_Request_ParameterId    = 0;
98
u8 UART1_Request_Parameter              = FALSE;
97
u8 UART1_Request_Parameter              = FALSE;
99
u8 UART1_DisplayKeys                    = 0;
98
u8 UART1_DisplayKeys                    = 0;
100
u8 UART1_DisplayLine                    = 0;
99
u8 UART1_DisplayLine                    = 0;
101
u8 UART1_ConfirmFrame                   = 0;
100
u8 UART1_ConfirmFrame                   = 0;
102
 
101
 
103
UART_TypeDef *DebugUART = UART1;
102
UART_TypeDef *DebugUART = UART1;
104
 
103
 
105
// the primary rx fifo
104
// the primary rx fifo
106
#define UART1_RX_FIFO_LEN 1024
105
#define UART1_RX_FIFO_LEN 1024
107
u8 UART1_rxfifobuffer[UART1_RX_FIFO_LEN];
106
u8 UART1_rxfifobuffer[UART1_RX_FIFO_LEN];
108
fifo_t UART1_rx_fifo;
107
fifo_t UART1_rx_fifo;
109
 
108
 
110
// the rx buffer
109
// the rx buffer
111
#define UART1_RX_BUFFER_LEN  150
110
#define UART1_RX_BUFFER_LEN  150
112
u8 UART1_rbuffer[UART1_RX_BUFFER_LEN];
111
u8 UART1_rbuffer[UART1_RX_BUFFER_LEN];
113
Buffer_t UART1_rx_buffer;
112
Buffer_t UART1_rx_buffer;
114
 
113
 
115
// the tx buffer
114
// the tx buffer
116
#define UART1_TX_BUFFER_LEN  150
115
#define UART1_TX_BUFFER_LEN  150
117
u8 UART1_tbuffer[UART1_TX_BUFFER_LEN];
116
u8 UART1_tbuffer[UART1_TX_BUFFER_LEN];
118
Buffer_t UART1_tx_buffer;
117
Buffer_t UART1_tx_buffer;
119
 
118
 
120
 
119
 
121
 
120
 
122
volatile u8 SerialLinkOkay = 0;
121
volatile u8 SerialLinkOkay = 0;
123
 
122
 
124
u8 text[200];
123
u8 text[200];
125
 
124
 
126
const u8 ANALOG_LABEL[32][16] =
125
const u8 ANALOG_LABEL[32][16] =
127
{
126
{
128
   //1234567890123456
127
   //1234567890123456
129
        "AngleNick       ", //0
128
        "AngleNick       ", //0
130
        "AngleRoll       ",
129
        "AngleRoll       ",
131
        "AccNick         ",
130
        "AccNick         ",
132
        "AccRoll         ",
131
        "AccRoll         ",
133
        "OperatingRadius ",
132
        "OperatingRadius ",
134
        "FC-Flags        ", //5
133
        "FC-Flags        ", //5
135
        "NC-Flags        ",
134
        "NC-Flags        ",
136
        "NickServo       ",
135
        "NickServo       ",
137
        "RollServo       ",
136
        "RollServo       ",
138
        "GPS Data        ",
137
        "GPS Data        ",
139
        "CompassHeading  ", //10
138
        "CompassHeading  ", //10
140
        "GyroHeading     ",
139
        "GyroHeading     ",
141
        "SPI Error       ",
140
        "SPI Error       ",
142
        "SPI Okay        ",
141
        "SPI Okay        ",
143
        "I2C Error       ",
142
        "I2C Error       ",
144
        "I2C Okay        ", //15
143
        "I2C Okay        ", //15
145
        "                ",//    "Kalman_K        ",
144
        "                ",//    "Kalman_K        ",
146
        "ACC_Speed_N     ",
145
        "ACC_Speed_N     ",
147
        "ACC_Speed_E     ",
146
        "ACC_Speed_E     ",
148
        "Speed_z         ",//    "GPS ACC         ",
147
        "Speed_z         ",//    "GPS ACC         ",
149
        "                ",//    "MAXDrift        ", //20
148
        "                ",//    "MAXDrift        ", //20
150
        "N_Speed         ",
149
        "N_Speed         ",
151
        "E_Speed         ",
150
        "E_Speed         ",
152
        "P-Part          ",
151
        "P-Part          ",
153
        "I-Part          ",
152
        "I-Part          ",
154
        "D-Part          ",//25
153
        "D-Part          ",//25
155
        "PID-Part        ",
154
        "PID-Part        ",
156
        "Distance N      ",
155
        "Distance N      ",
157
        "Distance E      ",
156
        "Distance E      ",
158
        "GPS_Nick        ",
157
        "GPS_Nick        ",
159
        "GPS_Roll        ", //30
158
        "GPS_Roll        ", //30
160
        "Used_Sats       "
159
        "Used_Sats       "
161
};
160
};
162
 
161
 
163
DebugOut_t DebugOut;
162
DebugOut_t DebugOut;
164
ExternControl_t ExternControl;
163
ExternControl_t ExternControl;
165
UART_VersionInfo_t UART_VersionInfo;
164
UART_VersionInfo_t UART_VersionInfo;
166
NaviData_t NaviData;
165
NaviData_t NaviData;
167
Waypoint_t FollowMe;
-
 
168
Data3D_t Data3D;
166
Data3D_t Data3D;
169
u16 Echo; // 2 bytes recieved will be sent back as echo
167
u16 Echo; // 2 bytes recieved will be sent back as echo
170
 
168
 
171
u32 UART1_DebugData_Timer = 0;
169
u32 UART1_DebugData_Timer = 0;
172
u32 UART1_DebugData_Interval = 0;       // in ms
170
u32 UART1_DebugData_Interval = 0;       // in ms
173
u32 UART1_NaviData_Timer = 0;
171
u32 UART1_NaviData_Timer = 0;
174
u32 UART1_NaviData_Interval = 0;        // in ms
172
u32 UART1_NaviData_Interval = 0;        // in ms
175
u32 UART1_Data3D_Timer = 0;
173
u32 UART1_Data3D_Timer = 0;
176
u32 UART1_Data3D_Interval = 0;          // in ms
174
u32 UART1_Data3D_Interval = 0;          // in ms
177
u32 UART1_Display_Timer = 0;
175
u32 UART1_Display_Timer = 0;
178
u32 UART1_Display_Interval = 0;         // in ms
176
u32 UART1_Display_Interval = 0;         // in ms
179
 
177
 
180
/********************************************************/
178
/********************************************************/
181
/*            Initialization the UART1                  */
179
/*            Initialization the UART1                  */
182
/********************************************************/
180
/********************************************************/
183
void UART1_Init (void)
181
void UART1_Init (void)
184
{
182
{
185
        GPIO_InitTypeDef GPIO_InitStructure;
183
        GPIO_InitTypeDef GPIO_InitStructure;
186
        UART_InitTypeDef UART_InitStructure;
184
        UART_InitTypeDef UART_InitStructure;
187
 
185
 
188
        // initialize txd buffer
186
        // initialize txd buffer
189
        Buffer_Init(&UART1_tx_buffer, UART1_tbuffer, UART1_TX_BUFFER_LEN);
187
        Buffer_Init(&UART1_tx_buffer, UART1_tbuffer, UART1_TX_BUFFER_LEN);
190
 
188
 
191
        // initialize rxd buffer
189
        // initialize rxd buffer
192
        Buffer_Init(&UART1_rx_buffer, UART1_rbuffer, UART1_RX_BUFFER_LEN);
190
        Buffer_Init(&UART1_rx_buffer, UART1_rbuffer, UART1_RX_BUFFER_LEN);
193
 
191
 
194
        // initialize the rx fifo
192
        // initialize the rx fifo
195
        fifo_init(&UART1_rx_fifo, UART1_rxfifobuffer, UART1_RX_FIFO_LEN);
193
        fifo_init(&UART1_rx_fifo, UART1_rxfifobuffer, UART1_RX_FIFO_LEN);
196
 
194
 
197
        SCU_APBPeriphClockConfig(__UART1, ENABLE);  // Enable the UART1 Clock
195
        SCU_APBPeriphClockConfig(__UART1, ENABLE);  // Enable the UART1 Clock
198
        SCU_APBPeriphClockConfig(__GPIO3, ENABLE);  // Enable the GPIO3 Clock
196
        SCU_APBPeriphClockConfig(__GPIO3, ENABLE);  // Enable the GPIO3 Clock
199
 
197
 
200
        /*Configure UART1_Rx pin GPIO3.2*/
198
        /*Configure UART1_Rx pin GPIO3.2*/
201
        GPIO_StructInit(&GPIO_InitStructure);
199
        GPIO_StructInit(&GPIO_InitStructure);
202
        GPIO_InitStructure.GPIO_Direction =     GPIO_PinInput;
200
        GPIO_InitStructure.GPIO_Direction =     GPIO_PinInput;
203
        GPIO_InitStructure.GPIO_Pin =                   GPIO_Pin_2;
201
        GPIO_InitStructure.GPIO_Pin =                   GPIO_Pin_2;
204
        GPIO_InitStructure.GPIO_Type =                  GPIO_Type_PushPull;
202
        GPIO_InitStructure.GPIO_Type =                  GPIO_Type_PushPull;
205
        GPIO_InitStructure.GPIO_IPInputConnected =      GPIO_IPInputConnected_Enable;
203
        GPIO_InitStructure.GPIO_IPInputConnected =      GPIO_IPInputConnected_Enable;
206
        GPIO_InitStructure.GPIO_Alternate =     GPIO_InputAlt1; // UART1_RxD
204
        GPIO_InitStructure.GPIO_Alternate =     GPIO_InputAlt1; // UART1_RxD
207
        GPIO_Init(GPIO3, &GPIO_InitStructure);
205
        GPIO_Init(GPIO3, &GPIO_InitStructure);
208
 
206
 
209
        /*Configure UART1_Tx pin GPIO3.3*/
207
        /*Configure UART1_Tx pin GPIO3.3*/
210
        GPIO_StructInit(&GPIO_InitStructure);
208
        GPIO_StructInit(&GPIO_InitStructure);
211
        GPIO_InitStructure.GPIO_Direction =     GPIO_PinOutput;
209
        GPIO_InitStructure.GPIO_Direction =     GPIO_PinOutput;
212
        GPIO_InitStructure.GPIO_Pin =                   GPIO_Pin_3;
210
        GPIO_InitStructure.GPIO_Pin =                   GPIO_Pin_3;
213
        GPIO_InitStructure.GPIO_Type =                  GPIO_Type_PushPull;
211
        GPIO_InitStructure.GPIO_Type =                  GPIO_Type_PushPull;
214
        GPIO_InitStructure.GPIO_Alternate =     GPIO_OutputAlt2; // UART1_TX
212
        GPIO_InitStructure.GPIO_Alternate =     GPIO_OutputAlt2; // UART1_TX
215
        GPIO_Init(GPIO3, &GPIO_InitStructure);
213
        GPIO_Init(GPIO3, &GPIO_InitStructure);
216
 
214
 
217
        /* UART1 configured as follow:
215
        /* UART1 configured as follow:
218
        - Word Length = 8 Bits
216
        - Word Length = 8 Bits
219
        - One Stop Bit
217
        - One Stop Bit
220
        - No parity
218
        - No parity
221
        - BaudRate = 57600 baud
219
        - BaudRate = 57600 baud
222
        - Hardware flow control Disabled
220
        - Hardware flow control Disabled
223
        - Receive and transmit enabled
221
        - Receive and transmit enabled
224
        - Receive and transmit FIFOs are Disabled
222
        - Receive and transmit FIFOs are Disabled
225
        */
223
        */
226
        UART_StructInit(&UART_InitStructure);
224
        UART_StructInit(&UART_InitStructure);
227
        UART_InitStructure.UART_WordLength =                    UART_WordLength_8D;
225
        UART_InitStructure.UART_WordLength =                    UART_WordLength_8D;
228
        UART_InitStructure.UART_StopBits =                              UART_StopBits_1;
226
        UART_InitStructure.UART_StopBits =                              UART_StopBits_1;
229
        UART_InitStructure.UART_Parity =                                UART_Parity_No ;
227
        UART_InitStructure.UART_Parity =                                UART_Parity_No ;
230
        UART_InitStructure.UART_BaudRate =                              UART1_BAUD_RATE;
228
        UART_InitStructure.UART_BaudRate =                              UART1_BAUD_RATE;
231
        UART_InitStructure. UART_HardwareFlowControl =  UART_HardwareFlowControl_None;
229
        UART_InitStructure. UART_HardwareFlowControl =  UART_HardwareFlowControl_None;
232
        UART_InitStructure.UART_Mode =                                  UART_Mode_Tx_Rx;
230
        UART_InitStructure.UART_Mode =                                  UART_Mode_Tx_Rx;
233
        UART_InitStructure.UART_FIFO =                                  UART_FIFO_Enable;
231
        UART_InitStructure.UART_FIFO =                                  UART_FIFO_Enable;
234
        UART_InitStructure.UART_TxFIFOLevel =                   UART_FIFOLevel_1_2;
232
        UART_InitStructure.UART_TxFIFOLevel =                   UART_FIFOLevel_1_2;
235
        UART_InitStructure.UART_RxFIFOLevel =                   UART_FIFOLevel_1_2;
233
        UART_InitStructure.UART_RxFIFOLevel =                   UART_FIFOLevel_1_2;
236
 
234
 
237
        UART_DeInit(UART1); // reset uart 1     to default
235
        UART_DeInit(UART1); // reset uart 1     to default
238
        UART_Init(UART1, &UART_InitStructure); // initialize uart 1
236
        UART_Init(UART1, &UART_InitStructure); // initialize uart 1
239
        // enable uart 1 interrupts selective
237
        // enable uart 1 interrupts selective
240
        UART_ITConfig(UART1, UART_IT_Receive | UART_IT_ReceiveTimeOut, ENABLE);
238
        UART_ITConfig(UART1, UART_IT_Receive | UART_IT_ReceiveTimeOut, ENABLE);
241
        UART_Cmd(UART1, ENABLE); // enable uart 1
239
        UART_Cmd(UART1, ENABLE); // enable uart 1
242
        // configure the uart 1 interupt line
240
        // configure the uart 1 interupt line
243
        VIC_Config(UART1_ITLine, VIC_IRQ, PRIORITY_UART1);
241
        VIC_Config(UART1_ITLine, VIC_IRQ, PRIORITY_UART1);
244
                // enable the uart 1 IRQ
242
                // enable the uart 1 IRQ
245
        VIC_ITCmd(UART1_ITLine, ENABLE);
243
        VIC_ITCmd(UART1_ITLine, ENABLE);
246
 
244
 
247
        // initialize the debug timer
245
        // initialize the debug timer
248
        UART1_DebugData_Timer = SetDelay(UART1_DebugData_Interval);
246
        UART1_DebugData_Timer = SetDelay(UART1_DebugData_Interval);
249
        UART1_NaviData_Timer = SetDelay(UART1_NaviData_Interval)+500;
247
        UART1_NaviData_Timer = SetDelay(UART1_NaviData_Interval)+500;
250
 
248
 
251
        // Fill Version Info Structure
249
        // Fill Version Info Structure
252
        UART_VersionInfo.SWMajor = VERSION_MAJOR;
250
        UART_VersionInfo.SWMajor = VERSION_MAJOR;
253
        UART_VersionInfo.SWMinor = VERSION_MINOR;
251
        UART_VersionInfo.SWMinor = VERSION_MINOR;
254
        UART_VersionInfo.SWPatch = VERSION_PATCH;
252
        UART_VersionInfo.SWPatch = VERSION_PATCH;
255
        UART_VersionInfo.ProtoMajor = VERSION_SERIAL_MAJOR;
253
        UART_VersionInfo.ProtoMajor = VERSION_SERIAL_MAJOR;
256
        UART_VersionInfo.ProtoMinor = VERSION_SERIAL_MINOR;
254
        UART_VersionInfo.ProtoMinor = VERSION_SERIAL_MINOR;
257
 
255
 
258
        NaviData.Version = NAVIDATA_VERSION;
256
        NaviData.Version = NAVIDATA_VERSION;
259
 
257
 
260
        UART1_PutString("\r\n UART1 init...ok");
258
        UART1_PutString("\r\n UART1 init...ok");
261
}
259
}
262
 
260
 
263
 
261
 
264
/****************************************************************/
262
/****************************************************************/
265
/*               USART1 receiver ISR                            */
263
/*               USART1 receiver ISR                            */
266
/****************************************************************/
264
/****************************************************************/
267
void UART1_IRQHandler(void)
265
void UART1_IRQHandler(void)
268
{
266
{
269
        static u8 abortState = 0;
267
        static u8 abortState = 0;
270
        u8 c;
268
        u8 c;
271
 
269
 
272
        IENABLE;
270
        IENABLE;
273
 
271
 
274
        if((UART_GetITStatus(UART1, UART_IT_Receive) != RESET) || (UART_GetITStatus(UART1, UART_IT_ReceiveTimeOut) != RESET) )
272
        if((UART_GetITStatus(UART1, UART_IT_Receive) != RESET) || (UART_GetITStatus(UART1, UART_IT_ReceiveTimeOut) != RESET) )
275
        {
273
        {
276
                // clear the pending bits!
274
                // clear the pending bits!
277
                UART_ClearITPendingBit(UART1, UART_IT_Receive);
275
                UART_ClearITPendingBit(UART1, UART_IT_Receive);
278
                UART_ClearITPendingBit(UART1, UART_IT_ReceiveTimeOut);
276
                UART_ClearITPendingBit(UART1, UART_IT_ReceiveTimeOut);
279
                // if debug UART is not UART1
277
                // if debug UART is not UART1
280
                if (DebugUART != UART1)
278
                if (DebugUART != UART1)
281
                {       // forward received data to the debug UART tx buffer
279
                {       // forward received data to the debug UART tx buffer
282
                        while(UART_GetFlagStatus(UART1, UART_FLAG_RxFIFOEmpty) != SET)
280
                        while(UART_GetFlagStatus(UART1, UART_FLAG_RxFIFOEmpty) != SET)
283
                        {
281
                        {
284
                                // move the byte from the rx buffer of UART1 to the tx buffer of DebugUART
282
                                // move the byte from the rx buffer of UART1 to the tx buffer of DebugUART
285
                                c = UART_ReceiveData(UART1);
283
                                c = UART_ReceiveData(UART1);
286
 
284
 
287
                                // check for abort condition (ESC ESC 0x55 0xAA 0x00)
285
                                // check for abort condition (ESC ESC 0x55 0xAA 0x00)
288
                                switch (abortState)
286
                                switch (abortState)
289
                                {
287
                                {
290
                                        case 0:
288
                                        case 0:
291
                                                if (c == 27) abortState++;
289
                                                if (c == 27) abortState++;
292
                                                break;
290
                                                break;
293
                                        case 1:
291
                                        case 1:
294
                                                if (c == 27) abortState++;
292
                                                if (c == 27) abortState++;
295
                                                else abortState = 0;
293
                                                else abortState = 0;
296
                                        break;
294
                                        break;
297
                                        case 2:
295
                                        case 2:
298
                                                if (c == 0x55) abortState++;
296
                                                if (c == 0x55) abortState++;
299
                                                else abortState = 0;
297
                                                else abortState = 0;
300
                                                break;
298
                                                break;
301
                                        case 3:
299
                                        case 3:
302
                                                if (c == 0xAA) abortState++;
300
                                                if (c == 0xAA) abortState++;
303
                                                else abortState = 0;
301
                                                else abortState = 0;
304
                                                break;
302
                                                break;
305
                                        case 4:
303
                                        case 4:
306
                                                if (c == 0x00)
304
                                                if (c == 0x00)
307
                                                {
305
                                                {
308
                                                        if(DebugUART == UART0)
306
                                                        if(DebugUART == UART0)
309
                                                        {
307
                                                        {
310
                                                                UART0_Connect_to_MKGPS();
308
                                                                UART0_Connect_to_MKGPS();
311
                                                                TIMER2_Init(); // enbable servo outputs
309
                                                                TIMER2_Init(); // enbable servo outputs
312
                                                                fifo_purge(&UART1_rx_fifo); // flush the whole fifo init buffer
310
                                                                fifo_purge(&UART1_rx_fifo); // flush the whole fifo init buffer
313
                                                        }
311
                                                        }
314
                                                        DebugUART = UART1;
312
                                                        DebugUART = UART1;
315
                                                }
313
                                                }
316
                                                abortState = 0;
314
                                                abortState = 0;
317
                                                break;
315
                                                break;
318
                                } // end switch abort state
316
                                } // end switch abort state
319
                                // if the Debug uart is not UART1, redirect input to the Debug UART
317
                                // if the Debug uart is not UART1, redirect input to the Debug UART
320
                                if (DebugUART != UART1)
318
                                if (DebugUART != UART1)
321
                                {
319
                                {
322
                                        // wait for space in the tx buffer of the DebugUART
320
                                        // wait for space in the tx buffer of the DebugUART
323
                                        while(UART_GetFlagStatus(DebugUART, UART_FLAG_TxFIFOFull) == SET) {};
321
                                        while(UART_GetFlagStatus(DebugUART, UART_FLAG_TxFIFOFull) == SET) {};
324
                                        // move byte to the tx fifo of the debug uart
322
                                        // move byte to the tx fifo of the debug uart
325
                                        UART_SendData(DebugUART, c);
323
                                        UART_SendData(DebugUART, c);
326
                                }
324
                                }
327
                        }
325
                        }
328
                }
326
                }
329
                else  // DebugUART == UART1 (normal operation)
327
                else  // DebugUART == UART1 (normal operation)
330
                {
328
                {
331
                        while(UART_GetFlagStatus(UART1, UART_FLAG_RxFIFOEmpty) != SET)
329
                        while(UART_GetFlagStatus(UART1, UART_FLAG_RxFIFOEmpty) != SET)
332
                        { // some byes in the hardware fifo
330
                        { // some byes in the hardware fifo
333
                            // get byte from hardware fifo
331
                            // get byte from hardware fifo
334
                        c = UART_ReceiveData(UART1);
332
                        c = UART_ReceiveData(UART1);
335
                                // put into the software fifo
333
                                // put into the software fifo
336
                                if(!fifo_put(&UART1_rx_fifo, c))
334
                                if(!fifo_put(&UART1_rx_fifo, c))
337
                                {       // fifo overflow
335
                                {       // fifo overflow
338
                                        //fifo_purge(&UART1_rx_fifo); // flush the whole buffer
336
                                        //fifo_purge(&UART1_rx_fifo); // flush the whole buffer
339
                                }
337
                                }
340
                        } // EOF while some byes in the hardware fifo
338
                        } // EOF while some byes in the hardware fifo
341
                } // eof DebugUart = UART1
339
                } // eof DebugUart = UART1
342
        }
340
        }
343
 
341
 
344
        IDISABLE;
342
        IDISABLE;
345
}
343
}
346
 
344
 
347
/**************************************************************/
345
/**************************************************************/
348
/* Process incomming data from debug uart                     */
346
/* Process incomming data from debug uart                     */
349
/**************************************************************/
347
/**************************************************************/
350
void UART1_ProcessRxData(void)
348
void UART1_ProcessRxData(void)
351
{
349
{
352
        // return on forwarding uart  or unlocked rx buffer
350
        // return on forwarding uart  or unlocked rx buffer
353
        if(DebugUART != UART1) return;
351
        if(DebugUART != UART1) return;
354
 
352
 
355
        u8 c;
353
        u8 c;
356
        // if rx buffer is not locked
354
        // if rx buffer is not locked
357
        if(UART1_rx_buffer.Locked == FALSE)
355
        if(UART1_rx_buffer.Locked == FALSE)
358
        {   //collect data from primary rx fifo
356
        {   //collect data from primary rx fifo
359
                while(fifo_get(&UART1_rx_fifo, &c))
357
                while(fifo_get(&UART1_rx_fifo, &c))
360
                {       // break if complete frame is collected
358
                {       // break if complete frame is collected
361
                        if(MKProtocol_CollectSerialFrame(&UART1_rx_buffer, c)) break;
359
                        if(MKProtocol_CollectSerialFrame(&UART1_rx_buffer, c)) break;
362
                }
360
                }
363
        }
361
        }
364
        if(UART1_rx_buffer.Locked == FALSE) return;
362
        if(UART1_rx_buffer.Locked == FALSE) return;
365
 
363
 
366
        Waypoint_t * pWaypoint = NULL;
364
        Waypoint_t * pWaypoint = NULL;
367
        SerialMsg_t SerialMsg;
365
        SerialMsg_t SerialMsg;
368
 
366
 
369
        // analyze header first
367
        // analyze header first
370
        MKProtocol_DecodeSerialFrameHeader(&UART1_rx_buffer, &SerialMsg);
368
        MKProtocol_DecodeSerialFrameHeader(&UART1_rx_buffer, &SerialMsg);
371
        if( SerialMsg.Address == FC_ADDRESS )
369
        if( SerialMsg.Address == FC_ADDRESS )
372
        {
370
        {
373
                switch(SerialMsg.CmdID)
371
                switch(SerialMsg.CmdID)
374
                {
372
                {
375
                        case 'y': // serial poti values
373
                        case 'y': // serial poti values
376
                        case 'b': // extern control
374
                        case 'b': // extern control
377
                                Buffer_Copy(&UART1_rx_buffer, &UART2_tx_buffer); //forward to FC
375
                                Buffer_Copy(&UART1_rx_buffer, &UART2_tx_buffer); //forward to FC
378
                                Buffer_Clear(&UART1_rx_buffer); // free rc buffer for next frame
376
                                Buffer_Clear(&UART1_rx_buffer); // free rc buffer for next frame
379
                                return; //end process rx data
377
                                return; //end process rx data
380
                        break;
378
                        break;
381
                }
379
                }
382
        }
380
        }
383
 
381
 
384
        MKProtocol_DecodeSerialFrameData(&UART1_rx_buffer, &SerialMsg); // decode serial frame in rxd buffer
382
        MKProtocol_DecodeSerialFrameData(&UART1_rx_buffer, &SerialMsg); // decode serial frame in rxd buffer
385
    if(SerialMsg.CmdID != 'z') SerialLinkOkay = 250;      // reset SerialTimeout, but not in case of the "ping"
383
    if(SerialMsg.CmdID != 'z') SerialLinkOkay = 250;      // reset SerialTimeout, but not in case of the "ping"
386
        switch(SerialMsg.Address) // check for Slave Address
384
        switch(SerialMsg.Address) // check for Slave Address
387
        {
385
        {
388
                case NC_ADDRESS:  // own Slave Address
386
                case NC_ADDRESS:  // own Slave Address
389
                switch(SerialMsg.CmdID)
387
                switch(SerialMsg.CmdID)
390
                {
388
                {
391
                        case 'z': // connection checker
389
                        case 'z': // connection checker
392
                                memcpy(&Echo, SerialMsg.pData, sizeof(Echo)); // copy echo pattern
390
                                memcpy(&Echo, SerialMsg.pData, sizeof(Echo)); // copy echo pattern
393
                                UART1_Request_Echo = TRUE;
391
                                UART1_Request_Echo = TRUE;
394
                                break;
392
                                break;
395
 
393
 
396
                        case 'e': // request for the text of the error status
394
                        case 'e': // request for the text of the error status
397
                                UART1_Request_ErrorMessage = TRUE;
395
                                UART1_Request_ErrorMessage = TRUE;
398
                                break;
396
                                break;
399
 
397
 
400
                        case 's'://  new target position
398
                        case 's'://  new target position
401
                                pWaypoint = (Waypoint_t*)SerialMsg.pData;
399
                                pWaypoint = (Waypoint_t*)SerialMsg.pData;
402
                                BeepTime = 300;
400
                                BeepTime = 300;
403
                                if(pWaypoint->Position.Status == NEWDATA)
401
                                if(pWaypoint->Position.Status == NEWDATA)
404
                                {
402
                                {
405
                                        WPList_Clear(); // empty WPList
403
                                        WPList_Clear(); // empty WPList
406
                                        WPList_Append(pWaypoint);
404
                                        WPList_Append(pWaypoint);
407
                                        GPS_pWaypoint = WPList_Begin();
405
                                        GPS_pWaypoint = WPList_Begin();
408
                                }
406
                                }
409
                                break;
407
                                break;
410
 
408
 
411
                        case 'u': // redirect debug uart
409
                        case 'u': // redirect debug uart
412
                                switch(SerialMsg.pData[0])
410
                                switch(SerialMsg.pData[0])
413
                                {
411
                                {
414
                                        case UART_FLIGHTCTRL:
412
                                        case UART_FLIGHTCTRL:
415
                                                UART2_Init();                           // initialize UART2 to FC pins
413
                                                UART2_Init();                           // initialize UART2 to FC pins
416
                                                fifo_purge(&UART1_rx_fifo);
414
                                                fifo_purge(&UART1_rx_fifo);
417
                                                TIMER2_Deinit();                        // reduce irq load
415
                                                TIMER2_Deinit();                        // reduce irq load
418
                                                DebugUART = UART2;
416
                                                DebugUART = UART2;
419
                                                break;
417
                                                break;
420
                                        case UART_MK3MAG:
418
                                        case UART_MK3MAG:
421
                                                if(FC.Flags & FCFLAG_MOTOR_RUN) break; // not if the motors are running
419
                                                if(FC.Flags & FCFLAG_MOTOR_RUN) break; // not if the motors are running
422
                                                UART0_Connect_to_MK3MAG();      // mux UART0 to MK3MAG pins
420
                                                UART0_Connect_to_MK3MAG();      // mux UART0 to MK3MAG pins
423
                                                GPSData.Status = INVALID;
421
                                                GPSData.Status = INVALID;
424
                                                fifo_purge(&UART1_rx_fifo);
422
                                                fifo_purge(&UART1_rx_fifo);
425
                                                DebugUART = UART0;
423
                                                DebugUART = UART0;
426
                                                break;
424
                                                break;
427
                                        case UART_MKGPS:
425
                                        case UART_MKGPS:
428
                                                if(FC.Flags & FCFLAG_MOTOR_RUN) break; // not if the motors are running
426
                                                if(FC.Flags & FCFLAG_MOTOR_RUN) break; // not if the motors are running
429
                                                TIMER2_Deinit();                        // disable servo outputs to reduce irq load
427
                                                TIMER2_Deinit();                        // disable servo outputs to reduce irq load
430
                                                UART0_Connect_to_MKGPS();       // connect UART0 to MKGPS pins
428
                                                UART0_Connect_to_MKGPS();       // connect UART0 to MKGPS pins
431
                                                GPSData.Status = INVALID;
429
                                                GPSData.Status = INVALID;
432
                                                fifo_purge(&UART1_rx_fifo);
430
                                                fifo_purge(&UART1_rx_fifo);
433
                                                DebugUART = UART0;
431
                                                DebugUART = UART0;
434
                                                break;
432
                                                break;
435
                                        default:
433
                                        default:
436
                                                break;
434
                                                break;
437
                                }
435
                                }
438
                                break;
436
                                break;
439
 
437
 
440
                        case 'w'://  Append Waypoint to List
438
                        case 'w'://  Append Waypoint to List
441
                                {
439
                                {
442
                                        static u8 oldIndex = 0x00;
440
                                        static u8 oldIndex = 0x00;
443
 
441
 
444
                                        pWaypoint = (Waypoint_t*)SerialMsg.pData;
442
                                        pWaypoint = (Waypoint_t*)SerialMsg.pData;
445
                                        if(pWaypoint->Position.Status == INVALID)
443
                                        if(pWaypoint->Position.Status == INVALID)
446
                                        {  // clear WP List
444
                                        {  // clear WP List
447
                                                WPList_Clear();
445
                                                WPList_Clear();
448
                                                oldIndex = 0x00;
446
                                                oldIndex = 0x00;
449
                                                GPS_pWaypoint = WPList_Begin();
447
                                                GPS_pWaypoint = WPList_Begin();
450
                                                UART1_Request_NewWaypoint = TRUE;
448
                                                UART1_Request_NewWaypoint = TRUE;
451
                                        }
449
                                        }
452
                                        else if (pWaypoint->Position.Status == NEWDATA)
450
                                        else if (pWaypoint->Position.Status == NEWDATA)
453
                                        {  // app current WP to the list
451
                                        {  // app current WP to the list
454
                                                 if (pWaypoint->Index == oldIndex + 1)
452
                                                 if (pWaypoint->Index == oldIndex + 1)
455
                                                {
453
                                                {
456
                                                        WPList_Append(pWaypoint);
454
                                                        WPList_Append(pWaypoint);
457
                                                        BeepTime = 500;
455
                                                        BeepTime = 500;
458
                                                        oldIndex = pWaypoint->Index;
456
                                                        oldIndex = pWaypoint->Index;
459
                                                        UART1_Request_NewWaypoint = TRUE;
457
                                                        UART1_Request_NewWaypoint = TRUE;
460
                                                }
458
                                                }
461
                                        }
459
                                        }
462
                                }
460
                                }
463
                                break;
461
                                break;
464
 
462
 
465
                        case 'x'://  Read Waypoint from List
463
                        case 'x'://  Read Waypoint from List
466
                                UART1_Request_ReadWaypoint = SerialMsg.pData[0];
464
                                UART1_Request_ReadWaypoint = SerialMsg.pData[0];
467
                                break;
465
                                break;
468
 
466
 
469
                        case 'j':// Set/Get NC-Parameter
467
                        case 'j':// Set/Get NC-Parameter
470
                                switch(SerialMsg.pData[0])
468
                                switch(SerialMsg.pData[0])
471
                                {
469
                                {
472
                                        case 0: // get
470
                                        case 0: // get
473
                                        break;
471
                                        break;
474
 
472
 
475
                                        case 1: // set
473
                                        case 1: // set
476
                                        {
474
                                        {
477
                                                s16 value;
475
                                                s16 value;
478
                                                value = SerialMsg.pData[2] + (s16)SerialMsg.pData[3] * 0x0100;
476
                                                value = SerialMsg.pData[2] + (s16)SerialMsg.pData[3] * 0x0100;
479
                                                NCParams_SetValue(SerialMsg.pData[1], &value);
477
                                                NCParams_SetValue(SerialMsg.pData[1], &value);
480
                                        }
478
                                        }
481
                                        break;
479
                                        break;
482
 
480
 
483
                                        default:
481
                                        default:
484
                                        break;
482
                                        break;
485
                                }
483
                                }
486
                                UART1_Request_ParameterId = SerialMsg.pData[1];
484
                                UART1_Request_ParameterId = SerialMsg.pData[1];
487
                                UART1_Request_Parameter = TRUE;
485
                                UART1_Request_Parameter = TRUE;
488
                                break;
486
                                break;
489
                        default:
487
                        default:
490
                                // unsupported command recieved
488
                                // unsupported command recieved
491
                                break;
489
                                break;
492
                } // case NC_ADDRESS
490
                } // case NC_ADDRESS
493
                // "break;" is missing here to fall thru to the common commands
491
                // "break;" is missing here to fall thru to the common commands
494
 
492
 
495
                default:  // and any other Slave Address
493
                default:  // and any other Slave Address
496
 
494
 
497
                switch(SerialMsg.CmdID) // check CmdID
495
                switch(SerialMsg.CmdID) // check CmdID
498
                {
496
                {
499
                        case 'a':// request for the labels of the analog debug outputs
497
                        case 'a':// request for the labels of the analog debug outputs
500
                                UART1_Request_DebugLabel = SerialMsg.pData[0];
498
                                UART1_Request_DebugLabel = SerialMsg.pData[0];
501
                                if(UART1_Request_DebugLabel > 31) UART1_Request_DebugLabel = 31;
499
                                if(UART1_Request_DebugLabel > 31) UART1_Request_DebugLabel = 31;
502
                                break;
500
                                break;
503
                        /*
501
                        /*
504
                        case 'b': // submit extern control
502
                        case 'b': // submit extern control
505
                                memcpy(&ExternControl, SerialMsg.pData, sizeof(ExternControl));
503
                                memcpy(&ExternControl, SerialMsg.pData, sizeof(ExternControl));
506
                                UART1_ConfirmFrame = ExternControl.Frame;
504
                                UART1_ConfirmFrame = ExternControl.Frame;
507
                                break;
505
                                break;
508
                        */
506
                        */
509
                        case 'd': // request for debug data;
507
                        case 'd': // request for debug data;
510
                                UART1_DebugData_Interval = (u32) SerialMsg.pData[0] * 10;
508
                                UART1_DebugData_Interval = (u32) SerialMsg.pData[0] * 10;
511
                                if(UART1_DebugData_Interval > 0) UART1_Request_DebugData = TRUE;
509
                                if(UART1_DebugData_Interval > 0) UART1_Request_DebugData = TRUE;
512
                                UART1_AboTimeOut = SetDelay(ABO_TIMEOUT);
510
                                UART1_AboTimeOut = SetDelay(ABO_TIMEOUT);
513
                                break;
511
                                break;
514
 
512
 
515
                        case 'c': // request for 3D data;
513
                        case 'c': // request for 3D data;
516
                                UART1_Data3D_Interval = (u32) SerialMsg.pData[0] * 10;
514
                                UART1_Data3D_Interval = (u32) SerialMsg.pData[0] * 10;
517
                                if(UART1_Data3D_Interval > 0) UART1_Request_Data3D = TRUE;
515
                                if(UART1_Data3D_Interval > 0) UART1_Request_Data3D = TRUE;
518
                                UART1_AboTimeOut = SetDelay(ABO_TIMEOUT);
516
                                UART1_AboTimeOut = SetDelay(ABO_TIMEOUT);
519
                                break;
517
                                break;
520
                        /*
518
                        /*
521
                        case 'g':// request for external control data
519
                        case 'g':// request for external control data
522
                                UART1_Request_ExternalControl = TRUE;
520
                                UART1_Request_ExternalControl = TRUE;
523
                                break;
521
                                break;
524
                        */
522
                        */
525
                        case 'h':// reqest for display line
523
                        case 'h':// reqest for display line
526
                                if((SerialMsg.pData[0]& 0x80) == 0x00)// old format
524
                                if((SerialMsg.pData[0]& 0x80) == 0x00)// old format
527
                                {
525
                                {
528
                                        UART1_DisplayLine = 2;
526
                                        UART1_DisplayLine = 2;
529
                                        UART1_Display_Interval = 0;
527
                                        UART1_Display_Interval = 0;
530
                                }
528
                                }
531
                                else
529
                                else
532
                                {
530
                                {
533
                                        UART1_DisplayKeys |= ~SerialMsg.pData[0];
531
                                        UART1_DisplayKeys |= ~SerialMsg.pData[0];
534
                                        UART1_Display_Interval = (u32) SerialMsg.pData[1] * 10;
532
                                        UART1_Display_Interval = (u32) SerialMsg.pData[1] * 10;
535
                                        UART1_DisplayLine = 4;
533
                                        UART1_DisplayLine = 4;
536
                                        UART1_AboTimeOut = SetDelay(ABO_TIMEOUT);
534
                                        UART1_AboTimeOut = SetDelay(ABO_TIMEOUT);
537
                                }
535
                                }
538
                                UART1_Request_Display = TRUE;
536
                                UART1_Request_Display = TRUE;
539
                                break;
537
                                break;
540
 
538
 
541
                        case 'l':// reqest for display columns
539
                        case 'l':// reqest for display columns
542
                                MenuItem = SerialMsg.pData[0];
540
                                MenuItem = SerialMsg.pData[0];
543
                                UART1_Request_Display1 = TRUE;
541
                                UART1_Request_Display1 = TRUE;
544
                                break;
542
                                break;
545
 
543
 
546
                        case 'o': // request for navigation information
544
                        case 'o': // request for navigation information
547
                                UART1_NaviData_Interval = (u32) SerialMsg.pData[0] * 10;
545
                                UART1_NaviData_Interval = (u32) SerialMsg.pData[0] * 10;
548
                                if(UART1_NaviData_Interval > 0) UART1_Request_NaviData = TRUE;
546
                                if(UART1_NaviData_Interval > 0) UART1_Request_NaviData = TRUE;
549
                                UART1_AboTimeOut = SetDelay(ABO_TIMEOUT);
547
                                UART1_AboTimeOut = SetDelay(ABO_TIMEOUT);
550
                                break;
548
                                break;
551
 
549
 
552
                        case 'v': // request for version info
550
                        case 'v': // request for version info
553
                                UART1_Request_VersionInfo = TRUE;
551
                                UART1_Request_VersionInfo = TRUE;
554
                                break;
552
                                break;
555
                        default:
553
                        default:
556
                                // unsupported command recieved
554
                                // unsupported command recieved
557
                                break;
555
                                break;
558
                }
556
                }
559
                break; // default:
557
                break; // default:
560
        }
558
        }
561
        Buffer_Clear(&UART1_rx_buffer); // free rc buffer for next frame
559
        Buffer_Clear(&UART1_rx_buffer); // free rc buffer for next frame
562
}
560
}
563
 
561
 
564
 
562
 
565
/*****************************************************/
563
/*****************************************************/
566
/*                   Send a character                */
564
/*                   Send a character                */
567
/*****************************************************/
565
/*****************************************************/
568
s16 UART1_Putchar(char c)
566
s16 UART1_Putchar(char c)
569
{
567
{
570
        if (c == '\n') UART1_Putchar('\r');
568
        if (c == '\n') UART1_Putchar('\r');
571
        // wait until txd fifo is not full
569
        // wait until txd fifo is not full
572
        while (UART_GetFlagStatus(UART1, UART_FLAG_TxFIFOFull) != RESET);
570
        while (UART_GetFlagStatus(UART1, UART_FLAG_TxFIFOFull) != RESET);
573
        // transmit byte
571
        // transmit byte
574
        UART_SendData(UART1, c);
572
        UART_SendData(UART1, c);
575
        return (0);
573
        return (0);
576
}
574
}
577
 
575
 
578
/*****************************************************/
576
/*****************************************************/
579
/*       Send a string to the debug uart              */
577
/*       Send a string to the debug uart              */
580
/*****************************************************/
578
/*****************************************************/
581
void UART1_PutString(u8 *s)
579
void UART1_PutString(u8 *s)
582
{
580
{
583
        if(s == NULL) return;
581
        if(s == NULL) return;
584
        while (*s != '\0' && DebugUART == UART1)
582
        while (*s != '\0' && DebugUART == UART1)
585
        {
583
        {
586
                UART1_Putchar(*s);
584
                UART1_Putchar(*s);
587
                s ++;
585
                s ++;
588
        }
586
        }
589
}
587
}
590
 
588
 
591
 
589
 
592
/**************************************************************/
590
/**************************************************************/
593
/*         Transmit tx buffer via debug uart                  */
591
/*         Transmit tx buffer via debug uart                  */
594
/**************************************************************/
592
/**************************************************************/
595
void UART1_Transmit(void)
593
void UART1_Transmit(void)
596
{
594
{
597
        u8 tmp_tx;
595
        u8 tmp_tx;
598
        if(DebugUART != UART1) return;
596
        if(DebugUART != UART1) return;
599
        // if something has to be send and the txd fifo is not full
597
        // if something has to be send and the txd fifo is not full
600
        if(UART1_tx_buffer.Locked == TRUE)
598
        if(UART1_tx_buffer.Locked == TRUE)
601
        {
599
        {
602
                // while there is some space in the tx fifo
600
                // while there is some space in the tx fifo
603
                while(UART_GetFlagStatus(UART1, UART_FLAG_TxFIFOFull) != SET)
601
                while(UART_GetFlagStatus(UART1, UART_FLAG_TxFIFOFull) != SET)
604
                {
602
                {
605
                        tmp_tx = UART1_tx_buffer.pData[UART1_tx_buffer.Position++]; // read next byte from txd buffer
603
                        tmp_tx = UART1_tx_buffer.pData[UART1_tx_buffer.Position++]; // read next byte from txd buffer
606
                        UART_SendData(UART1, tmp_tx); // put character to txd fifo
604
                        UART_SendData(UART1, tmp_tx); // put character to txd fifo
607
                        // if terminating character or end of txd buffer reached
605
                        // if terminating character or end of txd buffer reached
608
                        if((tmp_tx == '\r') || (UART1_tx_buffer.Position == UART1_tx_buffer.DataBytes))
606
                        if((tmp_tx == '\r') || (UART1_tx_buffer.Position == UART1_tx_buffer.DataBytes))
609
                        {
607
                        {
610
                                Buffer_Clear(&UART1_tx_buffer); // clear txd buffer
608
                                Buffer_Clear(&UART1_tx_buffer); // clear txd buffer
611
                                break; // end while loop
609
                                break; // end while loop
612
                        }
610
                        }
613
                }
611
                }
614
        }
612
        }
615
}
613
}
616
 
614
 
617
/**************************************************************/
615
/**************************************************************/
618
/* Send the answers to incomming commands at the debug uart   */
616
/* Send the answers to incomming commands at the debug uart   */
619
/**************************************************************/
617
/**************************************************************/
620
void UART1_TransmitTxData(void)
618
void UART1_TransmitTxData(void)
621
{
619
{
622
        if(DebugUART != UART1) return;
620
        if(DebugUART != UART1) return;
623
 
621
 
624
        if(CheckDelay(UART1_AboTimeOut))
622
        if(CheckDelay(UART1_AboTimeOut))
625
        {
623
        {
626
                UART1_DebugData_Interval = 0;
624
                UART1_DebugData_Interval = 0;
627
                UART1_NaviData_Interval = 0;
625
                UART1_NaviData_Interval = 0;
628
                UART1_Data3D_Interval = 0;
626
                UART1_Data3D_Interval = 0;
629
                UART1_Display_Interval = 0;
627
                UART1_Display_Interval = 0;
630
        }
628
        }
631
 
629
 
632
        UART1_Transmit(); // output pending bytes in tx buffer
630
        UART1_Transmit(); // output pending bytes in tx buffer
633
        if((UART1_tx_buffer.Locked == TRUE)) return;
631
        if((UART1_tx_buffer.Locked == TRUE)) return;
634
 
632
 
635
        if(UART1_Request_Parameter && (UART1_tx_buffer.Locked == FALSE))
633
        if(UART1_Request_Parameter && (UART1_tx_buffer.Locked == FALSE))
636
        {
634
        {
637
                s16 ParamValue;
635
                s16 ParamValue;
638
                NCParams_GetValue(UART1_Request_ParameterId, &ParamValue);
636
                NCParams_GetValue(UART1_Request_ParameterId, &ParamValue);
639
                //sprintf(text, "\r\nId=%d, value = %d\r\n", UART1_Request_ParameterId, ParamValue);
637
                //sprintf(text, "\r\nId=%d, value = %d\r\n", UART1_Request_ParameterId, ParamValue);
640
                //UART1_PutString(text);
638
                //UART1_PutString(text);
641
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'J', NC_ADDRESS, 2, &UART1_Request_ParameterId, sizeof(UART1_Request_ParameterId), &ParamValue, sizeof(ParamValue)); // answer the param request
639
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'J', NC_ADDRESS, 2, &UART1_Request_ParameterId, sizeof(UART1_Request_ParameterId), &ParamValue, sizeof(ParamValue)); // answer the param request
642
                UART1_Request_Parameter = FALSE;
640
                UART1_Request_Parameter = FALSE;
643
        }
641
        }
644
        else if(UART1_Request_Echo && (UART1_tx_buffer.Locked == FALSE))
642
        else if(UART1_Request_Echo && (UART1_tx_buffer.Locked == FALSE))
645
        {
643
        {
646
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'Z', NC_ADDRESS, 1, &Echo, sizeof(Echo)); // answer the echo request
644
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'Z', NC_ADDRESS, 1, &Echo, sizeof(Echo)); // answer the echo request
647
                Echo = 0; // reset echo value
645
                Echo = 0; // reset echo value
648
                UART1_Request_Echo = FALSE;
646
                UART1_Request_Echo = FALSE;
649
        }
647
        }
650
        else if(UART1_Request_NewWaypoint && (UART1_tx_buffer.Locked == FALSE))
648
        else if(UART1_Request_NewWaypoint && (UART1_tx_buffer.Locked == FALSE))
651
        {
649
        {
652
                u8 WPNumber = WPList_GetCount();
650
                u8 WPNumber = WPList_GetCount();
653
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'W', NC_ADDRESS, 1, &WPNumber, sizeof(WPNumber));
651
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'W', NC_ADDRESS, 1, &WPNumber, sizeof(WPNumber));
654
                UART1_Request_NewWaypoint = FALSE;
652
                UART1_Request_NewWaypoint = FALSE;
655
        }
653
        }
656
        else if((UART1_Request_ReadWaypoint != 0xFF) && (UART1_tx_buffer.Locked == FALSE))
654
        else if((UART1_Request_ReadWaypoint != 0xFF) && (UART1_tx_buffer.Locked == FALSE))
657
        {
655
        {
658
                u8 WPNumber = WPList_GetCount();
656
                u8 WPNumber = WPList_GetCount();
659
                if (UART1_Request_ReadWaypoint < WPNumber)
657
                if (UART1_Request_ReadWaypoint < WPNumber)
660
                {
658
                {
661
                        MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'X', NC_ADDRESS, 3, &WPNumber, 1, &UART1_Request_ReadWaypoint, 1, WPList_GetAt(UART1_Request_ReadWaypoint), sizeof(Waypoint_t));
659
                        MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'X', NC_ADDRESS, 3, &WPNumber, 1, &UART1_Request_ReadWaypoint, 1, WPList_GetAt(UART1_Request_ReadWaypoint), sizeof(Waypoint_t));
662
                }
660
                }
663
                else
661
                else
664
                {
662
                {
665
                        MKProtocol_CreateSerialFrame(&UART1_tx_buffer,'X', NC_ADDRESS, 1, &WPNumber, sizeof(WPNumber));
663
                        MKProtocol_CreateSerialFrame(&UART1_tx_buffer,'X', NC_ADDRESS, 1, &WPNumber, sizeof(WPNumber));
666
                }
664
                }
667
                UART1_Request_ReadWaypoint = 0xFF;
665
                UART1_Request_ReadWaypoint = 0xFF;
668
        }
666
        }
669
        else if((UART1_Request_DebugLabel != 0xFF) && (UART1_tx_buffer.Locked == FALSE))
667
        else if((UART1_Request_DebugLabel != 0xFF) && (UART1_tx_buffer.Locked == FALSE))
670
        {
668
        {
671
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'A', NC_ADDRESS, 2, &UART1_Request_DebugLabel, sizeof(UART1_Request_DebugLabel), (u8 *) ANALOG_LABEL[UART1_Request_DebugLabel], 16);
669
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'A', NC_ADDRESS, 2, &UART1_Request_DebugLabel, sizeof(UART1_Request_DebugLabel), (u8 *) ANALOG_LABEL[UART1_Request_DebugLabel], 16);
672
                UART1_Request_DebugLabel = 0xFF;
670
                UART1_Request_DebugLabel = 0xFF;
673
        }
671
        }
674
        else if(( ((UART1_NaviData_Interval > 0) && CheckDelay(UART1_NaviData_Timer) ) || UART1_Request_NaviData) && (UART1_tx_buffer.Locked == FALSE))
672
        else if(( ((UART1_NaviData_Interval > 0) && CheckDelay(UART1_NaviData_Timer) ) || UART1_Request_NaviData) && (UART1_tx_buffer.Locked == FALSE))
675
        {
673
        {
676
                NaviData.Errorcode = ErrorCode;
674
                NaviData.Errorcode = ErrorCode;
677
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS,1, (u8 *)&NaviData, sizeof(NaviData));
675
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS,1, (u8 *)&NaviData, sizeof(NaviData));
678
                UART1_NaviData_Timer = SetDelay(UART1_NaviData_Interval);
676
                UART1_NaviData_Timer = SetDelay(UART1_NaviData_Interval);
679
                UART1_Request_NaviData = FALSE;
677
                UART1_Request_NaviData = FALSE;
680
        }
678
        }
681
        else if( (( (UART1_DebugData_Interval > 0) && CheckDelay(UART1_DebugData_Timer)) || UART1_Request_DebugData) && (UART1_tx_buffer.Locked == FALSE))
679
        else if( (( (UART1_DebugData_Interval > 0) && CheckDelay(UART1_DebugData_Timer)) || UART1_Request_DebugData) && (UART1_tx_buffer.Locked == FALSE))
682
        {
680
        {
683
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'D', NC_ADDRESS, 1,(u8 *)&DebugOut, sizeof(DebugOut));
681
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'D', NC_ADDRESS, 1,(u8 *)&DebugOut, sizeof(DebugOut));
684
                UART1_DebugData_Timer = SetDelay(UART1_DebugData_Interval);
682
                UART1_DebugData_Timer = SetDelay(UART1_DebugData_Interval);
685
                UART1_Request_DebugData = FALSE;
683
                UART1_Request_DebugData = FALSE;
686
        }
684
        }
687
        else if((( (UART1_Data3D_Interval > 0) && CheckDelay(UART1_Data3D_Timer) ) || UART1_Request_Data3D) && (UART1_tx_buffer.Locked == FALSE))
685
        else if((( (UART1_Data3D_Interval > 0) && CheckDelay(UART1_Data3D_Timer) ) || UART1_Request_Data3D) && (UART1_tx_buffer.Locked == FALSE))
688
        {
686
        {
689
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'C', NC_ADDRESS, 1,(u8 *)&Data3D, sizeof(Data3D));
687
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'C', NC_ADDRESS, 1,(u8 *)&Data3D, sizeof(Data3D));
690
                UART1_Data3D_Timer = SetDelay(UART1_Data3D_Interval);
688
                UART1_Data3D_Timer = SetDelay(UART1_Data3D_Interval);
691
                UART1_Request_Data3D = FALSE;
689
                UART1_Request_Data3D = FALSE;
692
        }
690
        }
693
        /*
691
        /*
694
        else if(UART1_ConfirmFrame && (UART1_tx_buffer.Locked == FALSE))
692
        else if(UART1_ConfirmFrame && (UART1_tx_buffer.Locked == FALSE))
695
        {
693
        {
696
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'B', NC_ADDRESS, 1, &UART1_ConfirmFrame, sizeof(UART1_ConfirmFrame));
694
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'B', NC_ADDRESS, 1, &UART1_ConfirmFrame, sizeof(UART1_ConfirmFrame));
697
                UART1_ConfirmFrame = 0;
695
                UART1_ConfirmFrame = 0;
698
        }
696
        }
699
        */
697
        */
700
        /*
698
        /*
701
        else if(UART1_Request_ExternalControl && (UART1_tx_buffer.Locked == FALSE))
699
        else if(UART1_Request_ExternalControl && (UART1_tx_buffer.Locked == FALSE))
702
        {
700
        {
703
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'G', NC_ADDRESS, 1, (u8 *)&ExternControl, sizeof(ExternControl));
701
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'G', NC_ADDRESS, 1, (u8 *)&ExternControl, sizeof(ExternControl));
704
                UART1_Request_ExternalControl = FALSE;
702
                UART1_Request_ExternalControl = FALSE;
705
        }
703
        }
706
        */
704
        */
707
        else if( (( (UART1_Display_Interval > 0) && CheckDelay(UART1_Display_Timer)) || UART1_Request_Display) && (UART1_tx_buffer.Locked == FALSE))
705
        else if( (( (UART1_Display_Interval > 0) && CheckDelay(UART1_Display_Timer)) || UART1_Request_Display) && (UART1_tx_buffer.Locked == FALSE))
708
        {
706
        {
709
                if(UART1_DisplayLine > 3)
707
                if(UART1_DisplayLine > 3)
710
                {
708
                {
711
                        Menu_Update(UART1_DisplayKeys);
709
                        Menu_Update(UART1_DisplayKeys);
712
                        UART1_DisplayKeys = 0;
710
                        UART1_DisplayKeys = 0;
713
                        MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'H', NC_ADDRESS, 1, (u8*)DisplayBuff, sizeof(DisplayBuff));
711
                        MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'H', NC_ADDRESS, 1, (u8*)DisplayBuff, sizeof(DisplayBuff));
714
                }
712
                }
715
                else
713
                else
716
                {
714
                {
717
                        UART1_DisplayLine = 2;
715
                        UART1_DisplayLine = 2;
718
                        sprintf(text,"!!! incompatible !!!");
716
                        sprintf(text,"!!! incompatible !!!");
719
                        MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'H', NC_ADDRESS, 2, &UART1_DisplayLine, sizeof(UART1_DisplayLine), (u8*)&text, 20);
717
                        MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'H', NC_ADDRESS, 2, &UART1_DisplayLine, sizeof(UART1_DisplayLine), (u8*)&text, 20);
720
                        if(UART1_DisplayLine++ > 3) UART1_DisplayLine = 0;
718
                        if(UART1_DisplayLine++ > 3) UART1_DisplayLine = 0;
721
                }
719
                }
722
                UART1_Display_Timer = SetDelay(UART1_Display_Interval);
720
                UART1_Display_Timer = SetDelay(UART1_Display_Interval);
723
                UART1_Request_Display = FALSE;
721
                UART1_Request_Display = FALSE;
724
        }
722
        }
725
        else if(UART1_Request_Display1 && (UART1_tx_buffer.Locked == FALSE))
723
        else if(UART1_Request_Display1 && (UART1_tx_buffer.Locked == FALSE))
726
        {
724
        {
727
                Menu_Update(0);
725
                Menu_Update(0);
728
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'L', NC_ADDRESS, 3, (u8*)&MenuItem, sizeof(MenuItem), (u8*)&MaxMenuItem, sizeof(MaxMenuItem),(u8*)DisplayBuff, sizeof(DisplayBuff));
726
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'L', NC_ADDRESS, 3, (u8*)&MenuItem, sizeof(MenuItem), (u8*)&MaxMenuItem, sizeof(MaxMenuItem),(u8*)DisplayBuff, sizeof(DisplayBuff));
729
                UART1_Request_Display1 = FALSE;
727
                UART1_Request_Display1 = FALSE;
730
        }
728
        }
731
        else if(UART1_Request_VersionInfo && (UART1_tx_buffer.Locked == FALSE))
729
        else if(UART1_Request_VersionInfo && (UART1_tx_buffer.Locked == FALSE))
732
        {
730
        {
733
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'V', NC_ADDRESS,1, (u8 *)&UART_VersionInfo, sizeof(UART_VersionInfo));
731
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'V', NC_ADDRESS,1, (u8 *)&UART_VersionInfo, sizeof(UART_VersionInfo));
734
                UART1_Request_VersionInfo = FALSE;
732
                UART1_Request_VersionInfo = FALSE;
735
        }
733
        }
736
        else if(UART1_Request_ErrorMessage && (UART1_tx_buffer.Locked == FALSE))
734
        else if(UART1_Request_ErrorMessage && (UART1_tx_buffer.Locked == FALSE))
737
        {
735
        {
738
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'E', NC_ADDRESS, 1, (u8 *)&ErrorMSG, sizeof(ErrorMSG));
736
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'E', NC_ADDRESS, 1, (u8 *)&ErrorMSG, sizeof(ErrorMSG));
739
                UART1_Request_ErrorMessage = FALSE;
737
                UART1_Request_ErrorMessage = FALSE;
740
        }
738
        }
741
        else if(UART1_Request_SendFollowMe && (UART1_tx_buffer.Locked == FALSE) && (GPSData.NumOfSats >= 4))              // sending for "Follow me"
-
 
742
        {
-
 
743
                GPS_CopyPosition(&(GPSData.Position),&(FollowMe.Position));
-
 
744
                FollowMe.Position.Status = NEWDATA;
-
 
745
                FollowMe.Heading = -1;
-
 
746
                FollowMe.ToleranceRadius = 1;
-
 
747
                FollowMe.HoldTime = 60;
-
 
748
                FollowMe.Event_Flag = 0;
-
 
749
                FollowMe.Index = 1;
-
 
750
                FollowMe.reserve[0] = 0;                // reserve
-
 
751
                FollowMe.reserve[1] = 0;                // reserve
-
 
752
                FollowMe.reserve[2] = 0;                // reserve
-
 
753
                FollowMe.reserve[3] = 0;                // reserve
-
 
754
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 's', NC_ADDRESS, 1, (u8 *)&FollowMe, sizeof(FollowMe));
-
 
755
                UART1_Request_SendFollowMe = FALSE;
-
 
756
        }
-
 
757
        UART1_Transmit(); // output pending bytes in tx buffer
739
        UART1_Transmit(); // output pending bytes in tx buffer
758
}
740
}
759
 
741
 
760
 
742