Subversion Repositories NaviCtrl

Rev

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

Rev 250 Rev 251
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 "main.h"
62
#include "config.h"
63
#include "config.h"
63
#include "menu.h"
64
#include "menu.h"
64
#include "GPS.h"
65
#include "GPS.h"
65
#include "i2c.h"
66
#include "i2c.h"
66
#include "uart0.h"
67
#include "uart0.h"
67
#include "uart1.h"
68
#include "uart1.h"
68
#include "uart2.h"
69
#include "uart2.h"
69
#include "timer1.h"
70
#include "timer1.h"
70
#include "timer2.h"
71
#include "timer2.h"
71
#include "analog.h"
72
#include "analog.h"
72
#include "compass.h"
73
#include "compass.h"
73
#include "waypoints.h"
74
#include "waypoints.h"
74
#include "mkprotocol.h"
75
#include "mkprotocol.h"
75
#include "params.h"
76
#include "params.h"
76
#include "fifo.h"
77
#include "fifo.h"
77
 
78
 
78
#define FALSE   0
79
#define FALSE   0
79
#define TRUE    1
80
#define TRUE    1
80
 
81
 
81
#define ABO_TIMEOUT 4000 // disable abo after 4 seconds
82
#define ABO_TIMEOUT 4000 // disable abo after 4 seconds
82
u32 UART1_AboTimeOut = 0;
83
u32 UART1_AboTimeOut = 0;
83
 
84
 
84
u8 UART1_Request_VersionInfo    = FALSE;
85
u8 UART1_Request_VersionInfo    = FALSE;
85
u8 UART1_Request_ExternalControl= FALSE;
86
u8 UART1_Request_ExternalControl= FALSE;
86
u8 UART1_Request_Display                = FALSE;
87
u8 UART1_Request_Display                = FALSE;
87
u8 UART1_Request_Display1               = FALSE;
88
u8 UART1_Request_Display1               = FALSE;
88
u8 UART1_Request_DebugData              = FALSE;
89
u8 UART1_Request_DebugData              = FALSE;
89
u8 UART1_Request_DebugLabel             = 255;
90
u8 UART1_Request_DebugLabel             = 255;
90
u8 UART1_Request_NaviData               = FALSE;
91
u8 UART1_Request_NaviData               = FALSE;
91
u8 UART1_Request_ErrorMessage   = FALSE;
92
u8 UART1_Request_ErrorMessage   = FALSE;
92
u8 UART1_Request_NewWaypoint    = FALSE;
93
u8 UART1_Request_NewWaypoint    = FALSE;
93
u8 UART1_Request_ReadWaypoint   = 0;
94
u8 UART1_Request_ReadWaypoint   = 0;
94
u8 UART1_Request_Data3D             = FALSE;
95
u8 UART1_Request_Data3D             = FALSE;
95
u8 UART1_Request_Echo               = FALSE;
96
u8 UART1_Request_Echo               = FALSE;
96
u8 UART1_Request_ParameterId    = 0;
97
u8 UART1_Request_ParameterId    = 0;
97
u8 UART1_Request_Parameter              = FALSE;
98
u8 UART1_Request_Parameter              = FALSE;
98
u8 UART1_DisplayKeys                    = 0;
99
u8 UART1_DisplayKeys                    = 0;
99
u8 UART1_DisplayLine                    = 0;
100
u8 UART1_DisplayLine                    = 0;
100
u8 UART1_ConfirmFrame                   = 0;
101
u8 UART1_ConfirmFrame                   = 0;
101
 
102
 
102
UART_TypeDef *DebugUART = UART1;
103
UART_TypeDef *DebugUART = UART1;
103
 
104
 
104
// the primary rx fifo
105
// the primary rx fifo
105
#define UART1_RX_FIFO_LEN 512
106
#define UART1_RX_FIFO_LEN 512
106
u8 UART1_rxfifobuffer[UART1_RX_FIFO_LEN];
107
u8 UART1_rxfifobuffer[UART1_RX_FIFO_LEN];
107
fifo_t UART1_rx_fifo;
108
fifo_t UART1_rx_fifo;
108
 
109
 
109
// the rx buffer
110
// the rx buffer
110
#define UART1_RX_BUFFER_LEN  150
111
#define UART1_RX_BUFFER_LEN  150
111
u8 UART1_rbuffer[UART1_RX_BUFFER_LEN];
112
u8 UART1_rbuffer[UART1_RX_BUFFER_LEN];
112
Buffer_t UART1_rx_buffer;
113
Buffer_t UART1_rx_buffer;
113
 
114
 
114
// the tx buffer
115
// the tx buffer
115
#define UART1_TX_BUFFER_LEN  150
116
#define UART1_TX_BUFFER_LEN  150
116
u8 UART1_tbuffer[UART1_TX_BUFFER_LEN];
117
u8 UART1_tbuffer[UART1_TX_BUFFER_LEN];
117
Buffer_t UART1_tx_buffer;
118
Buffer_t UART1_tx_buffer;
118
 
119
 
119
 
120
 
120
 
121
 
121
volatile u8 SerialLinkOkay = 0;
122
volatile u8 SerialLinkOkay = 0;
122
 
123
 
123
u8 text[200];
124
u8 text[200];
124
 
125
 
125
const u8 ANALOG_LABEL[32][16] =
126
const u8 ANALOG_LABEL[32][16] =
126
{
127
{
127
   //1234567890123456
128
   //1234567890123456
128
        "AngleNick       ", //0
129
        "AngleNick       ", //0
129
        "AngleRoll       ",
130
        "AngleRoll       ",
130
        "AccNick         ",
131
        "AccNick         ",
131
        "AccRoll         ",
132
        "AccRoll         ",
132
        "OperatingRadius ",
133
        "OperatingRadius ",
133
        "FC-Flags        ", //5
134
        "FC-Flags        ", //5
134
        "NC-Flags        ",
135
        "NC-Flags        ",
135
        "NickServo       ",
136
        "NickServo       ",
136
        "RollServo       ",
137
        "RollServo       ",
137
        "GPS Data        ",
138
        "GPS Data        ",
138
        "CompassHeading  ", //10
139
        "CompassHeading  ", //10
139
        "GyroHeading     ",
140
        "GyroHeading     ",
140
        "SPI Error       ",
141
        "SPI Error       ",
141
        "SPI Okay        ",
142
        "SPI Okay        ",
142
        "I2C Error       ",
143
        "I2C Error       ",
143
        "I2C Okay        ", //15
144
        "I2C Okay        ", //15
144
        "                ",//    "Kalman_K        ",
145
        "                ",//    "Kalman_K        ",
145
        "ACC_Speed_N     ",
146
        "ACC_Speed_N     ",
146
        "ACC_Speed_E     ",
147
        "ACC_Speed_E     ",
147
        "Speed_z         ",//    "GPS ACC         ",
148
        "Speed_z         ",//    "GPS ACC         ",
148
        "                ",//    "MAXDrift        ", //20
149
        "                ",//    "MAXDrift        ", //20
149
        "N_Speed         ",
150
        "N_Speed         ",
150
        "E_Speed         ",
151
        "E_Speed         ",
151
        "                ",
152
        "                ",
152
        "                ",
153
        "                ",
153
        "                ",//25
154
        "                ",//25
154
        "                ",
155
        "                ",
155
        "Distance N      ",
156
        "Distance N      ",
156
        "Distance E      ",
157
        "Distance E      ",
157
        "GPS_Nick        ",
158
        "GPS_Nick        ",
158
        "GPS_Roll        ", //30
159
        "GPS_Roll        ", //30
159
        "Used_Sats       "
160
        "Used_Sats       "
160
};
161
};
161
 
162
 
162
DebugOut_t DebugOut;
163
DebugOut_t DebugOut;
163
ExternControl_t ExternControl;
164
ExternControl_t ExternControl;
164
UART_VersionInfo_t UART_VersionInfo;
165
UART_VersionInfo_t UART_VersionInfo;
165
NaviData_t NaviData;
166
NaviData_t NaviData;
166
Data3D_t Data3D;
167
Data3D_t Data3D;
167
u16 Echo; // 2 bytes recieved will be sent back as echo
168
u16 Echo; // 2 bytes recieved will be sent back as echo
168
 
169
 
169
u32 UART1_DebugData_Timer = 0;
170
u32 UART1_DebugData_Timer = 0;
170
u32 UART1_DebugData_Interval = 0;       // in ms
171
u32 UART1_DebugData_Interval = 0;       // in ms
171
u32 UART1_NaviData_Timer = 0;
172
u32 UART1_NaviData_Timer = 0;
172
u32 UART1_NaviData_Interval = 0;        // in ms
173
u32 UART1_NaviData_Interval = 0;        // in ms
173
u32 UART1_Data3D_Timer = 0;
174
u32 UART1_Data3D_Timer = 0;
174
u32 UART1_Data3D_Interval = 0;          // in ms
175
u32 UART1_Data3D_Interval = 0;          // in ms
175
u32 UART1_Display_Timer = 0;
176
u32 UART1_Display_Timer = 0;
176
u32 UART1_Display_Interval = 0;         // in ms
177
u32 UART1_Display_Interval = 0;         // in ms
177
 
178
 
178
/********************************************************/
179
/********************************************************/
179
/*            Initialization the UART1                  */
180
/*            Initialization the UART1                  */
180
/********************************************************/
181
/********************************************************/
181
void UART1_Init (void)
182
void UART1_Init (void)
182
{
183
{
183
        GPIO_InitTypeDef GPIO_InitStructure;
184
        GPIO_InitTypeDef GPIO_InitStructure;
184
        UART_InitTypeDef UART_InitStructure;
185
        UART_InitTypeDef UART_InitStructure;
185
 
186
 
186
        // initialize txd buffer
187
        // initialize txd buffer
187
        Buffer_Init(&UART1_tx_buffer, UART1_tbuffer, UART1_TX_BUFFER_LEN);
188
        Buffer_Init(&UART1_tx_buffer, UART1_tbuffer, UART1_TX_BUFFER_LEN);
188
 
189
 
189
        // initialize rxd buffer
190
        // initialize rxd buffer
190
        Buffer_Init(&UART1_rx_buffer, UART1_rbuffer, UART1_RX_BUFFER_LEN);
191
        Buffer_Init(&UART1_rx_buffer, UART1_rbuffer, UART1_RX_BUFFER_LEN);
191
 
192
 
192
        // initialize the rx fifo, block UART IRQ geting a byte from fifo
193
        // initialize the rx fifo, block UART IRQ geting a byte from fifo
193
        fifo_init(&UART1_rx_fifo, UART1_rxfifobuffer, UART1_RX_FIFO_LEN, NO_ITLine, UART1_ITLine);
194
        fifo_init(&UART1_rx_fifo, UART1_rxfifobuffer, UART1_RX_FIFO_LEN, NO_ITLine, UART1_ITLine);
194
 
195
 
195
        SCU_APBPeriphClockConfig(__UART1, ENABLE);  // Enable the UART1 Clock
196
        SCU_APBPeriphClockConfig(__UART1, ENABLE);  // Enable the UART1 Clock
196
        SCU_APBPeriphClockConfig(__GPIO3, ENABLE);  // Enable the GPIO3 Clock
197
        SCU_APBPeriphClockConfig(__GPIO3, ENABLE);  // Enable the GPIO3 Clock
197
 
198
 
198
        /*Configure UART1_Rx pin GPIO3.2*/
199
        /*Configure UART1_Rx pin GPIO3.2*/
199
        GPIO_StructInit(&GPIO_InitStructure);
200
        GPIO_StructInit(&GPIO_InitStructure);
200
        GPIO_InitStructure.GPIO_Direction =     GPIO_PinInput;
201
        GPIO_InitStructure.GPIO_Direction =     GPIO_PinInput;
201
        GPIO_InitStructure.GPIO_Pin =                   GPIO_Pin_2;
202
        GPIO_InitStructure.GPIO_Pin =                   GPIO_Pin_2;
202
        GPIO_InitStructure.GPIO_Type =                  GPIO_Type_PushPull;
203
        GPIO_InitStructure.GPIO_Type =                  GPIO_Type_PushPull;
203
        GPIO_InitStructure.GPIO_IPInputConnected =      GPIO_IPInputConnected_Enable;
204
        GPIO_InitStructure.GPIO_IPInputConnected =      GPIO_IPInputConnected_Enable;
204
        GPIO_InitStructure.GPIO_Alternate =     GPIO_InputAlt1; // UART1_RxD
205
        GPIO_InitStructure.GPIO_Alternate =     GPIO_InputAlt1; // UART1_RxD
205
        GPIO_Init(GPIO3, &GPIO_InitStructure);
206
        GPIO_Init(GPIO3, &GPIO_InitStructure);
206
 
207
 
207
        /*Configure UART1_Tx pin GPIO3.3*/
208
        /*Configure UART1_Tx pin GPIO3.3*/
208
        GPIO_StructInit(&GPIO_InitStructure);
209
        GPIO_StructInit(&GPIO_InitStructure);
209
        GPIO_InitStructure.GPIO_Direction =     GPIO_PinOutput;
210
        GPIO_InitStructure.GPIO_Direction =     GPIO_PinOutput;
210
        GPIO_InitStructure.GPIO_Pin =                   GPIO_Pin_3;
211
        GPIO_InitStructure.GPIO_Pin =                   GPIO_Pin_3;
211
        GPIO_InitStructure.GPIO_Type =                  GPIO_Type_PushPull;
212
        GPIO_InitStructure.GPIO_Type =                  GPIO_Type_PushPull;
212
        GPIO_InitStructure.GPIO_Alternate =     GPIO_OutputAlt2; // UART1_TX
213
        GPIO_InitStructure.GPIO_Alternate =     GPIO_OutputAlt2; // UART1_TX
213
        GPIO_Init(GPIO3, &GPIO_InitStructure);
214
        GPIO_Init(GPIO3, &GPIO_InitStructure);
214
 
215
 
215
        /* UART1 configured as follow:
216
        /* UART1 configured as follow:
216
        - Word Length = 8 Bits
217
        - Word Length = 8 Bits
217
        - One Stop Bit
218
        - One Stop Bit
218
        - No parity
219
        - No parity
219
        - BaudRate = 57600 baud
220
        - BaudRate = 57600 baud
220
        - Hardware flow control Disabled
221
        - Hardware flow control Disabled
221
        - Receive and transmit enabled
222
        - Receive and transmit enabled
222
        - Receive and transmit FIFOs are Disabled
223
        - Receive and transmit FIFOs are Disabled
223
        */
224
        */
224
        UART_StructInit(&UART_InitStructure);
225
        UART_StructInit(&UART_InitStructure);
225
        UART_InitStructure.UART_WordLength =                    UART_WordLength_8D;
226
        UART_InitStructure.UART_WordLength =                    UART_WordLength_8D;
226
        UART_InitStructure.UART_StopBits =                              UART_StopBits_1;
227
        UART_InitStructure.UART_StopBits =                              UART_StopBits_1;
227
        UART_InitStructure.UART_Parity =                                UART_Parity_No ;
228
        UART_InitStructure.UART_Parity =                                UART_Parity_No ;
228
        UART_InitStructure.UART_BaudRate =                              UART1_BAUD_RATE;
229
        UART_InitStructure.UART_BaudRate =                              UART1_BAUD_RATE;
229
        UART_InitStructure. UART_HardwareFlowControl =  UART_HardwareFlowControl_None;
230
        UART_InitStructure. UART_HardwareFlowControl =  UART_HardwareFlowControl_None;
230
        UART_InitStructure.UART_Mode =                                  UART_Mode_Tx_Rx;
231
        UART_InitStructure.UART_Mode =                                  UART_Mode_Tx_Rx;
231
        UART_InitStructure.UART_FIFO =                                  UART_FIFO_Enable;
232
        UART_InitStructure.UART_FIFO =                                  UART_FIFO_Enable;
232
        UART_InitStructure.UART_TxFIFOLevel =                   UART_FIFOLevel_1_2;
233
        UART_InitStructure.UART_TxFIFOLevel =                   UART_FIFOLevel_1_2;
233
        UART_InitStructure.UART_RxFIFOLevel =                   UART_FIFOLevel_1_2;
234
        UART_InitStructure.UART_RxFIFOLevel =                   UART_FIFOLevel_1_2;
234
 
235
 
235
        UART_DeInit(UART1); // reset uart 1     to default
236
        UART_DeInit(UART1); // reset uart 1     to default
236
        UART_Init(UART1, &UART_InitStructure); // initialize uart 1
237
        UART_Init(UART1, &UART_InitStructure); // initialize uart 1
237
        // enable uart 1 interrupts selective
238
        // enable uart 1 interrupts selective
238
        UART_ITConfig(UART1, UART_IT_Receive | UART_IT_ReceiveTimeOut, ENABLE);
239
        UART_ITConfig(UART1, UART_IT_Receive | UART_IT_ReceiveTimeOut, ENABLE);
239
        UART_Cmd(UART1, ENABLE); // enable uart 1
240
        UART_Cmd(UART1, ENABLE); // enable uart 1
240
        // configure the uart 1 interupt line
241
        // configure the uart 1 interupt line
241
        VIC_Config(UART1_ITLine, VIC_IRQ, PRIORITY_UART1);
242
        VIC_Config(UART1_ITLine, VIC_IRQ, PRIORITY_UART1);
242
        // enable the uart 1 IRQ
243
        // enable the uart 1 IRQ
243
        VIC_ITCmd(UART1_ITLine, ENABLE);
244
        VIC_ITCmd(UART1_ITLine, ENABLE);
244
 
245
 
245
        // initialize the debug timer
246
        // initialize the debug timer
246
        UART1_DebugData_Timer = SetDelay(UART1_DebugData_Interval);
247
        UART1_DebugData_Timer = SetDelay(UART1_DebugData_Interval);
247
        UART1_NaviData_Timer = SetDelay(UART1_NaviData_Interval)+500;
248
        UART1_NaviData_Timer = SetDelay(UART1_NaviData_Interval)+500;
248
 
249
 
249
        // Fill Version Info Structure
250
        // Fill Version Info Structure
250
        UART_VersionInfo.SWMajor = VERSION_MAJOR;
251
        UART_VersionInfo.SWMajor = VERSION_MAJOR;
251
        UART_VersionInfo.SWMinor = VERSION_MINOR;
252
        UART_VersionInfo.SWMinor = VERSION_MINOR;
252
        UART_VersionInfo.SWPatch = VERSION_PATCH;
253
        UART_VersionInfo.SWPatch = VERSION_PATCH;
253
        UART_VersionInfo.ProtoMajor = VERSION_SERIAL_MAJOR;
254
        UART_VersionInfo.ProtoMajor = VERSION_SERIAL_MAJOR;
254
        UART_VersionInfo.ProtoMinor = VERSION_SERIAL_MINOR;
255
        UART_VersionInfo.ProtoMinor = VERSION_SERIAL_MINOR;
255
 
256
 
256
        NaviData.Version = NAVIDATA_VERSION;
257
        NaviData.Version = NAVIDATA_VERSION;
257
 
258
 
258
        UART1_PutString("\r\n UART1 init...ok");
259
        UART1_PutString("\r\n UART1 init...ok");
259
}
260
}
260
 
261
 
261
 
262
 
262
/****************************************************************/
263
/****************************************************************/
263
/*               USART1 receiver ISR                            */
264
/*               USART1 receiver ISR                            */
264
/****************************************************************/
265
/****************************************************************/
265
void UART1_IRQHandler(void)
266
void UART1_IRQHandler(void)
266
{
267
{
267
        static u8 abortState = 0;
268
        static u8 abortState = 0;
268
        u8 c;
269
        u8 c;
269
 
270
 
270
        IENABLE;
271
        IENABLE;
271
 
272
 
272
        if((UART_GetITStatus(UART1, UART_IT_Receive) != RESET) || (UART_GetITStatus(UART1, UART_IT_ReceiveTimeOut) != RESET) )
273
        if((UART_GetITStatus(UART1, UART_IT_Receive) != RESET) || (UART_GetITStatus(UART1, UART_IT_ReceiveTimeOut) != RESET) )
273
        {
274
        {
274
                // clear the pending bits!
275
                // clear the pending bits!
275
                UART_ClearITPendingBit(UART1, UART_IT_Receive);
276
                UART_ClearITPendingBit(UART1, UART_IT_Receive);
276
                UART_ClearITPendingBit(UART1, UART_IT_ReceiveTimeOut);
277
                UART_ClearITPendingBit(UART1, UART_IT_ReceiveTimeOut);
277
                // if debug UART is not UART1
278
                // if debug UART is not UART1
278
                if (DebugUART != UART1)
279
                if (DebugUART != UART1)
279
                {       // forward received data to the debug UART tx buffer
280
                {       // forward received data to the debug UART tx buffer
280
                        while(UART_GetFlagStatus(UART1, UART_FLAG_RxFIFOEmpty) != SET)
281
                        while(UART_GetFlagStatus(UART1, UART_FLAG_RxFIFOEmpty) != SET)
281
                        {
282
                        {
282
                                // move the byte from the rx buffer of UART1 to the tx buffer of DebugUART
283
                                // move the byte from the rx buffer of UART1 to the tx buffer of DebugUART
283
                                c = UART_ReceiveData(UART1);
284
                                c = UART_ReceiveData(UART1);
284
 
285
 
285
                                // check for abort condition (ESC ESC 0x55 0xAA 0x00)
286
                                // check for abort condition (ESC ESC 0x55 0xAA 0x00)
286
                                switch (abortState)
287
                                switch (abortState)
287
                                {
288
                                {
288
                                        case 0:
289
                                        case 0:
289
                                                if (c == 27) abortState++;
290
                                                if (c == 27) abortState++;
290
                                                break;
291
                                                break;
291
                                        case 1:
292
                                        case 1:
292
                                                if (c == 27) abortState++;
293
                                                if (c == 27) abortState++;
293
                                                else abortState = 0;
294
                                                else abortState = 0;
294
                                        break;
295
                                        break;
295
                                        case 2:
296
                                        case 2:
296
                                                if (c == 0x55) abortState++;
297
                                                if (c == 0x55) abortState++;
297
                                                else abortState = 0;
298
                                                else abortState = 0;
298
                                                break;
299
                                                break;
299
                                        case 3:
300
                                        case 3:
300
                                                if (c == 0xAA) abortState++;
301
                                                if (c == 0xAA) abortState++;
301
                                                else abortState = 0;
302
                                                else abortState = 0;
302
                                                break;
303
                                                break;
303
                                        case 4:
304
                                        case 4:
304
                                                if (c == 0x00)
305
                                                if (c == 0x00)
305
                                                {
306
                                                {
306
                                                        if(DebugUART == UART0)
307
                                                        if(DebugUART == UART0)
307
                                                        {
308
                                                        {
308
                                                                UART0_Connect_to_MKGPS(UART0_BAUD_RATE);
309
                                                                UART0_Connect_to_MKGPS(UART0_BAUD_RATE);
309
                                                                TIMER2_Init(); // enbable servo outputs
310
                                                                TIMER2_Init(); // enbable servo outputs
310
                                                                fifo_purge(&UART1_rx_fifo); // flush the whole fifo init buffer
311
                                                                fifo_purge(&UART1_rx_fifo); // flush the whole fifo init buffer
311
                                                        }
312
                                                        }
312
                                                        DebugUART = UART1;
313
                                                        DebugUART = UART1;
313
                                                }
314
                                                }
314
                                                abortState = 0;
315
                                                abortState = 0;
315
                                                break;
316
                                                break;
316
                                } // end switch abort state
317
                                } // end switch abort state
317
                                // if the Debug uart is not UART1, redirect input to the Debug UART
318
                                // if the Debug uart is not UART1, redirect input to the Debug UART
318
                                if (DebugUART != UART1)
319
                                if (DebugUART != UART1)
319
                                {
320
                                {
320
                                        // wait for space in the tx buffer of the DebugUART
321
                                        // wait for space in the tx buffer of the DebugUART
321
                                        while(UART_GetFlagStatus(DebugUART, UART_FLAG_TxFIFOFull) == SET) {};
322
                                        while(UART_GetFlagStatus(DebugUART, UART_FLAG_TxFIFOFull) == SET) {};
322
                                        // move byte to the tx fifo of the debug uart
323
                                        // move byte to the tx fifo of the debug uart
323
                                        UART_SendData(DebugUART, c);
324
                                        UART_SendData(DebugUART, c);
324
                                }
325
                                }
325
                        }
326
                        }
326
                }
327
                }
327
                else  // DebugUART == UART1 (normal operation)
328
                else  // DebugUART == UART1 (normal operation)
328
                {
329
                {
329
                        while(UART_GetFlagStatus(UART1, UART_FLAG_RxFIFOEmpty) != SET)
330
                        while(UART_GetFlagStatus(UART1, UART_FLAG_RxFIFOEmpty) != SET)
330
                        { // some byes in the hardware fifo
331
                        { // some byes in the hardware fifo
331
                            // get byte from hardware fifo
332
                            // get byte from hardware fifo
332
                        c = UART_ReceiveData(UART1);
333
                        c = UART_ReceiveData(UART1);
333
                                // put into the software fifo
334
                                // put into the software fifo
334
                                if(!fifo_put(&UART1_rx_fifo, c))
335
                                if(!fifo_put(&UART1_rx_fifo, c))
335
                                {       // fifo overflow
336
                                {       // fifo overflow
336
                                        //fifo_purge(&UART1_rx_fifo); // flush the whole buffer
337
                                        //fifo_purge(&UART1_rx_fifo); // flush the whole buffer
337
                                }
338
                                }
338
                        } // EOF while some byes in the hardware fifo
339
                        } // EOF while some byes in the hardware fifo
339
                } // eof DebugUart = UART1
340
                } // eof DebugUart = UART1
340
        }
341
        }
341
 
342
 
342
        IDISABLE;
343
        IDISABLE;
343
}
344
}
344
 
345
 
345
/**************************************************************/
346
/**************************************************************/
346
/* Process incomming data from debug uart                     */
347
/* Process incomming data from debug uart                     */
347
/**************************************************************/
348
/**************************************************************/
348
void UART1_ProcessRxData(void)
349
void UART1_ProcessRxData(void)
349
{
350
{
350
        // return on forwarding uart  or unlocked rx buffer
351
        // return on forwarding uart  or unlocked rx buffer
351
        if(DebugUART != UART1) return;
352
        if(DebugUART != UART1) return;
352
 
353
 
353
        u8 c;
354
        u8 c;
354
        // if rx buffer is not locked
355
        // if rx buffer is not locked
355
        if(UART1_rx_buffer.Locked == FALSE)
356
        if(UART1_rx_buffer.Locked == FALSE)
356
        {
357
        {
357
                //collect data from primary rx fifo
358
                //collect data from primary rx fifo
358
                while(fifo_get(&UART1_rx_fifo, &c))
359
                while(fifo_get(&UART1_rx_fifo, &c))
359
                {      
360
                {      
360
                        // break if complete frame is collected
361
                        // break if complete frame is collected
361
                        if(MKProtocol_CollectSerialFrame(&UART1_rx_buffer, c)) break;
362
                        if(MKProtocol_CollectSerialFrame(&UART1_rx_buffer, c)) break;
362
                }
363
                }
363
        }
364
        }
364
        if(UART1_rx_buffer.Locked == FALSE) return;
365
        if(UART1_rx_buffer.Locked == FALSE) return;
365
 
366
 
366
        Waypoint_t * pWaypoint = NULL;
367
        Waypoint_t * pWaypoint = NULL;
367
        SerialMsg_t SerialMsg;
368
        SerialMsg_t SerialMsg;
368
 
369
 
369
        // analyze header first
370
        // analyze header first
370
        MKProtocol_DecodeSerialFrameHeader(&UART1_rx_buffer, &SerialMsg);
371
        MKProtocol_DecodeSerialFrameHeader(&UART1_rx_buffer, &SerialMsg);
371
        if( SerialMsg.Address == FC_ADDRESS )
372
        if( SerialMsg.Address == FC_ADDRESS )
372
        {
373
        {
373
                switch(SerialMsg.CmdID)
374
                switch(SerialMsg.CmdID)
374
                {
375
                {
375
//                      case 'v': // version
376
//                      case 'v': // version
376
                        case 'y': // serial poti values
377
                        case 'y': // serial poti values
377
                        case 'b': // extern control
378
                        case 'b': // extern control
378
                                Buffer_Copy(&UART1_rx_buffer, &UART2_tx_buffer); //forward to FC
379
                                Buffer_Copy(&UART1_rx_buffer, &UART2_tx_buffer); //forward to FC
379
                                Buffer_Clear(&UART1_rx_buffer); // free rc buffer for next frame
380
                                Buffer_Clear(&UART1_rx_buffer); // free rc buffer for next frame
380
                                return; //end process rx data
381
                                return; //end process rx data
381
                        break;
382
                        break;
382
                }
383
                }
383
        }
384
        }
384
 
385
 
385
        MKProtocol_DecodeSerialFrameData(&UART1_rx_buffer, &SerialMsg); // decode serial frame in rxd buffer
386
        MKProtocol_DecodeSerialFrameData(&UART1_rx_buffer, &SerialMsg); // decode serial frame in rxd buffer
386
    if(SerialMsg.CmdID != 'z') SerialLinkOkay = 250;      // reset SerialTimeout, but not in case of the "ping"
387
    if(SerialMsg.CmdID != 'z') SerialLinkOkay = 250;      // reset SerialTimeout, but not in case of the "ping"
387
        switch(SerialMsg.Address) // check for Slave Address
388
        switch(SerialMsg.Address) // check for Slave Address
388
        {
389
        {
389
                case NC_ADDRESS:  // own Slave Address
390
                case NC_ADDRESS:  // own Slave Address
390
                switch(SerialMsg.CmdID)
391
                switch(SerialMsg.CmdID)
391
                {
392
                {
392
                        case 'z': // connection checker
393
                        case 'z': // connection checker
393
                                memcpy(&Echo, SerialMsg.pData, sizeof(Echo)); // copy echo pattern
394
                                memcpy(&Echo, SerialMsg.pData, sizeof(Echo)); // copy echo pattern
394
                                UART1_Request_Echo = TRUE;
395
                                UART1_Request_Echo = TRUE;
395
                                break;
396
                                break;
396
 
397
 
397
                        case 'e': // request for the text of the error status
398
                        case 'e': // request for the text of the error status
398
                                UART1_Request_ErrorMessage = TRUE;
399
                                UART1_Request_ErrorMessage = TRUE;
399
                                break;
400
                                break;
400
 
401
 
401
                        case 's'://  new target position
402
                        case 's'://  new target position
402
                                pWaypoint = (Waypoint_t*)SerialMsg.pData;
403
                                pWaypoint = (Waypoint_t*)SerialMsg.pData;
403
                                BeepTime = 300;
404
                                BeepTime = 300;
404
                                if(pWaypoint->Position.Status == NEWDATA)
405
                                if(pWaypoint->Position.Status == NEWDATA)
405
                                {
406
                                {
406
                                        WPList_Clear(); // empty WPList
407
                                        WPList_Clear(); // empty WPList
407
                                        WPList_Append(pWaypoint);
408
                                        WPList_Append(pWaypoint);
408
                                        GPS_pWaypoint = WPList_Begin();
409
                                        GPS_pWaypoint = WPList_Begin();
409
                                }
410
                                }
410
                                break;
411
                                break;
411
 
412
 
412
                        case 'u': // redirect debug uart
413
                        case 'u': // redirect debug uart
413
                                switch(SerialMsg.pData[0])
414
                                switch(SerialMsg.pData[0])
414
                                {
415
                                {
415
                                        case UART_FLIGHTCTRL:
416
                                        case UART_FLIGHTCTRL:
416
                                                UART2_Init();                           // initialize UART2 to FC pins
417
                                                UART2_Init();                           // initialize UART2 to FC pins
417
                                                fifo_purge(&UART1_rx_fifo);
418
                                                fifo_purge(&UART1_rx_fifo);
418
                                                TIMER2_Deinit();                        // reduce irq load
419
                                                TIMER2_Deinit();                        // reduce irq load
419
                                                DebugUART = UART2;
420
                                                DebugUART = UART2;
420
                                                break;
421
                                                break;
421
                                        case UART_MK3MAG:
422
                                        case UART_MK3MAG:
422
                                                if(FC.Flags & FCFLAG_MOTOR_RUN) break; // not if the motors are running
423
                                                if(FC.Flags & FCFLAG_MOTOR_RUN) break; // not if the motors are running
423
                                                UART0_Connect_to_MK3MAG();      // mux UART0 to MK3MAG pins
424
                                                UART0_Connect_to_MK3MAG();      // mux UART0 to MK3MAG pins
424
                                                GPSData.Status = INVALID;
425
                                                GPSData.Status = INVALID;
425
                                                fifo_purge(&UART1_rx_fifo);
426
                                                fifo_purge(&UART1_rx_fifo);
426
                                                DebugUART = UART0;
427
                                                DebugUART = UART0;
427
                                                break;
428
                                                break;
428
                                        case UART_MKGPS:
429
                                        case UART_MKGPS:
429
                                                if(FC.Flags & FCFLAG_MOTOR_RUN) break; // not if the motors are running
430
                                                if(FC.Flags & FCFLAG_MOTOR_RUN) break; // not if the motors are running
430
                                                TIMER2_Deinit();                        // disable servo outputs to reduce irq load
431
                                                TIMER2_Deinit();                        // disable servo outputs to reduce irq load
431
                                                UART0_Connect_to_MKGPS(UART0_BAUD_RATE);        // connect UART0 to MKGPS pins
432
                                                UART0_Connect_to_MKGPS(UART0_BAUD_RATE);        // connect UART0 to MKGPS pins
432
                                                GPSData.Status = INVALID;
433
                                                GPSData.Status = INVALID;
433
                                                fifo_purge(&UART1_rx_fifo);
434
                                                fifo_purge(&UART1_rx_fifo);
434
                                                DebugUART = UART0;
435
                                                DebugUART = UART0;
435
                                                break;
436
                                                break;
436
                                        default:
437
                                        default:
437
                                                break;
438
                                                break;
438
                                }
439
                                }
439
                                break;
440
                                break;
440
 
441
 
441
                        case 'w'://  Append Waypoint to List
442
                        case 'w'://  Append Waypoint to List
442
                                {
443
                                {
443
                                        pWaypoint = (Waypoint_t*)SerialMsg.pData;
444
                                        pWaypoint = (Waypoint_t*)SerialMsg.pData;
444
                                        //sprintf(text, "\r\nI=%d, S=%d,T=%d\r\n",pWaypoint->Index, pWaypoint->Position.Status, pWaypoint->Type);
445
                                        //sprintf(text, "\r\nI=%d, S=%d,T=%d\r\n",pWaypoint->Index, pWaypoint->Position.Status, pWaypoint->Type);
445
                                        //UART1_PutString(text);
446
                                        //UART1_PutString(text);
446
 
447
 
447
                                        if((pWaypoint->Position.Status == INVALID) && (pWaypoint->Index == 0))
448
                                        if((pWaypoint->Position.Status == INVALID) && (pWaypoint->Index == 0))
448
                                        {
449
                                        {
449
                                                WPList_Clear();
450
                                                WPList_Clear();
450
                                                GPS_pWaypoint = WPList_Begin();
451
                                                GPS_pWaypoint = WPList_Begin();
451
                                                UART1_Request_NewWaypoint = TRUE; // return new WP number       
452
                                                UART1_Request_NewWaypoint = TRUE; // return new WP number       
452
                                        }
453
                                        }
453
                                        else
454
                                        else
454
                                        {  // app current WP to the list
455
                                        {  // app current WP to the list
455
                                                if (pWaypoint->Index == (WPList_GetCount() + 1))
456
                                                if (pWaypoint->Index == (WPList_GetCount() + 1))
456
                                                {
457
                                                {
457
                                                        WPList_Append(pWaypoint);
458
                                                        WPList_Append(pWaypoint);
458
                                                        BeepTime = 500;
459
                                                        BeepTime = 500;
459
                                                        UART1_Request_NewWaypoint = TRUE; // return new WP number
460
                                                        UART1_Request_NewWaypoint = TRUE; // return new WP number
460
                                                }
461
                                                }
461
                                        }
462
                                        }
462
                                }
463
                                }
463
                                break;
464
                                break;
464
 
465
 
465
                        case 'x'://  Read Waypoint from List
466
                        case 'x'://  Read Waypoint from List
466
                                UART1_Request_ReadWaypoint = SerialMsg.pData[0];
467
                                UART1_Request_ReadWaypoint = SerialMsg.pData[0];
467
                                break;
468
                                break;
468
 
469
 
469
                        case 'j':// Set/Get NC-Parameter
470
                        case 'j':// Set/Get NC-Parameter
470
                                switch(SerialMsg.pData[0])
471
                                switch(SerialMsg.pData[0])
471
                                {
472
                                {
472
                                        case 0: // get
473
                                        case 0: // get
473
                                        break;
474
                                        break;
474
 
475
 
475
                                        case 1: // set
476
                                        case 1: // set
476
                                        {
477
                                        {
477
                                                s16 value;
478
                                                s16 value;
478
                                                value = SerialMsg.pData[2] + (s16)SerialMsg.pData[3] * 0x0100;
479
                                                value = SerialMsg.pData[2] + (s16)SerialMsg.pData[3] * 0x0100;
479
                                                NCParams_SetValue(SerialMsg.pData[1], &value);
480
                                                NCParams_SetValue(SerialMsg.pData[1], &value);
480
                                        }
481
                                        }
481
                                        break;
482
                                        break;
482
 
483
 
483
                                        default:
484
                                        default:
484
                                        break;
485
                                        break;
485
                                }
486
                                }
486
                                UART1_Request_ParameterId = SerialMsg.pData[1];
487
                                UART1_Request_ParameterId = SerialMsg.pData[1];
487
                                UART1_Request_Parameter = TRUE;
488
                                UART1_Request_Parameter = TRUE;
488
                                break;
489
                                break;
489
                        default:
490
                        default:
490
                                // unsupported command recieved
491
                                // unsupported command recieved
491
                                break;
492
                                break;
492
                } // case NC_ADDRESS
493
                } // case NC_ADDRESS
493
                // "break;" is missing here to fall thru to the common commands
494
                // "break;" is missing here to fall thru to the common commands
494
 
495
 
495
                default:  // and any other Slave Address
496
                default:  // and any other Slave Address
496
 
497
 
497
                switch(SerialMsg.CmdID) // check CmdID
498
                switch(SerialMsg.CmdID) // check CmdID
498
                {
499
                {
499
                        case 'a':// request for the labels of the analog debug outputs
500
                        case 'a':// request for the labels of the analog debug outputs
500
                                UART1_Request_DebugLabel = SerialMsg.pData[0];
501
                                UART1_Request_DebugLabel = SerialMsg.pData[0];
501
                                if(UART1_Request_DebugLabel > 31) UART1_Request_DebugLabel = 31;
502
                                if(UART1_Request_DebugLabel > 31) UART1_Request_DebugLabel = 31;
502
                                break;
503
                                break;
503
                        /*
504
                        /*
504
                        case 'b': // submit extern control
505
                        case 'b': // submit extern control
505
                                memcpy(&ExternControl, SerialMsg.pData, sizeof(ExternControl));
506
                                memcpy(&ExternControl, SerialMsg.pData, sizeof(ExternControl));
506
                                UART1_ConfirmFrame = ExternControl.Frame;
507
                                UART1_ConfirmFrame = ExternControl.Frame;
507
                                break;
508
                                break;
508
                        */
509
                        */
509
                        case 'd': // request for debug data;
510
                        case 'd': // request for debug data;
510
                                UART1_DebugData_Interval = (u32) SerialMsg.pData[0] * 10;
511
                                UART1_DebugData_Interval = (u32) SerialMsg.pData[0] * 10;
511
                                if(UART1_DebugData_Interval > 0) UART1_Request_DebugData = TRUE;
512
                                if(UART1_DebugData_Interval > 0) UART1_Request_DebugData = TRUE;
512
                                UART1_AboTimeOut = SetDelay(ABO_TIMEOUT);
513
                                UART1_AboTimeOut = SetDelay(ABO_TIMEOUT);
513
                                break;
514
                                break;
514
 
515
 
515
                        case 'c': // request for 3D data;
516
                        case 'c': // request for 3D data;
516
                                UART1_Data3D_Interval = (u32) SerialMsg.pData[0] * 10;
517
                                UART1_Data3D_Interval = (u32) SerialMsg.pData[0] * 10;
517
                                if(UART1_Data3D_Interval > 0) UART1_Request_Data3D = TRUE;
518
                                if(UART1_Data3D_Interval > 0) UART1_Request_Data3D = TRUE;
518
                                UART1_AboTimeOut = SetDelay(ABO_TIMEOUT);
519
                                UART1_AboTimeOut = SetDelay(ABO_TIMEOUT);
519
                                break;
520
                                break;
520
                        /*
521
                        /*
521
                        case 'g':// request for external control data
522
                        case 'g':// request for external control data
522
                                UART1_Request_ExternalControl = TRUE;
523
                                UART1_Request_ExternalControl = TRUE;
523
                                break;
524
                                break;
524
                        */
525
                        */
525
                        case 'h':// reqest for display line
526
                        case 'h':// reqest for display line
526
                                if((SerialMsg.pData[0]& 0x80) == 0x00)// old format
527
                                if((SerialMsg.pData[0]& 0x80) == 0x00)// old format
527
                                {
528
                                {
528
                                        UART1_DisplayLine = 2;
529
                                        UART1_DisplayLine = 2;
529
                                        UART1_Display_Interval = 0;
530
                                        UART1_Display_Interval = 0;
530
                                }
531
                                }
531
                                else
532
                                else
532
                                {
533
                                {
533
                                        UART1_DisplayKeys |= ~SerialMsg.pData[0];
534
                                        UART1_DisplayKeys |= ~SerialMsg.pData[0];
534
                                        UART1_Display_Interval = (u32) SerialMsg.pData[1] * 10;
535
                                        UART1_Display_Interval = (u32) SerialMsg.pData[1] * 10;
535
                                        UART1_DisplayLine = 4;
536
                                        UART1_DisplayLine = 4;
536
                                        UART1_AboTimeOut = SetDelay(ABO_TIMEOUT);
537
                                        UART1_AboTimeOut = SetDelay(ABO_TIMEOUT);
537
                                }
538
                                }
538
                                UART1_Request_Display = TRUE;
539
                                UART1_Request_Display = TRUE;
539
                                break;
540
                                break;
540
 
541
 
541
                        case 'l':// reqest for display columns
542
                        case 'l':// reqest for display columns
542
                                MenuItem = SerialMsg.pData[0];
543
                                MenuItem = SerialMsg.pData[0];
543
                                UART1_Request_Display1 = TRUE;
544
                                UART1_Request_Display1 = TRUE;
544
                                break;
545
                                break;
545
 
546
 
546
                        case 'o': // request for navigation information
547
                        case 'o': // request for navigation information
547
                                UART1_NaviData_Interval = (u32) SerialMsg.pData[0] * 10;
548
                                UART1_NaviData_Interval = (u32) SerialMsg.pData[0] * 10;
548
                                if(UART1_NaviData_Interval > 0) UART1_Request_NaviData = TRUE;
549
                                if(UART1_NaviData_Interval > 0) UART1_Request_NaviData = TRUE;
549
                                UART1_AboTimeOut = SetDelay(ABO_TIMEOUT);
550
                                UART1_AboTimeOut = SetDelay(ABO_TIMEOUT);
550
                                break;
551
                                break;
551
 
552
 
552
                        case 'v': // request for version info
553
                        case 'v': // request for version info
553
                                UART1_Request_VersionInfo = TRUE;
554
                                UART1_Request_VersionInfo = TRUE;
554
                                break;
555
                                break;
555
                        default:
556
                        default:
556
                                // unsupported command recieved
557
                                // unsupported command recieved
557
                                break;
558
                                break;
558
                }
559
                }
559
                break; // default:
560
                break; // default:
560
        }
561
        }
561
        Buffer_Clear(&UART1_rx_buffer); // free rc buffer for next frame
562
        Buffer_Clear(&UART1_rx_buffer); // free rc buffer for next frame
562
}
563
}
563
 
564
 
564
 
565
 
565
/*****************************************************/
566
/*****************************************************/
566
/*                   Send a character                */
567
/*                   Send a character                */
567
/*****************************************************/
568
/*****************************************************/
568
s16 UART1_Putchar(char c)
569
s16 UART1_Putchar(char c)
569
{
570
{
570
        if (c == '\n') UART1_Putchar('\r');
571
        if (c == '\n') UART1_Putchar('\r');
571
        // wait until txd fifo is not full
572
        // wait until txd fifo is not full
572
        while (UART_GetFlagStatus(UART1, UART_FLAG_TxFIFOFull) != RESET);
573
        while (UART_GetFlagStatus(UART1, UART_FLAG_TxFIFOFull) != RESET);
573
        // transmit byte
574
        // transmit byte
574
        UART_SendData(UART1, c);
575
        UART_SendData(UART1, c);
575
        return (0);
576
        return (0);
576
}
577
}
577
 
578
 
578
/*****************************************************/
579
/*****************************************************/
579
/*       Send a string to the debug uart              */
580
/*       Send a string to the debug uart              */
580
/*****************************************************/
581
/*****************************************************/
581
void UART1_PutString(u8 *s)
582
void UART1_PutString(u8 *s)
582
{
583
{
583
        if(s == NULL) return;
584
        if(s == NULL) return;
584
        while (*s != '\0' && DebugUART == UART1)
585
        while (*s != '\0' && DebugUART == UART1)
585
        {
586
        {
586
                UART1_Putchar(*s);
587
                UART1_Putchar(*s);
587
                s ++;
588
                s ++;
588
        }
589
        }
589
}
590
}
590
 
591
 
591
 
592
 
592
/**************************************************************/
593
/**************************************************************/
593
/*         Transmit tx buffer via debug uart                  */
594
/*         Transmit tx buffer via debug uart                  */
594
/**************************************************************/
595
/**************************************************************/
595
void UART1_Transmit(void)
596
void UART1_Transmit(void)
596
{
597
{
597
        u8 tmp_tx;
598
        u8 tmp_tx;
598
        if(DebugUART != UART1) return;
599
        if(DebugUART != UART1) return;
599
        // if something has to be send and the txd fifo is not full
600
        // if something has to be send and the txd fifo is not full
600
        if(UART1_tx_buffer.Locked == TRUE)
601
        if(UART1_tx_buffer.Locked == TRUE)
601
        {
602
        {
602
                // while there is some space in the tx fifo
603
                // while there is some space in the tx fifo
603
                while(UART_GetFlagStatus(UART1, UART_FLAG_TxFIFOFull) != SET)
604
                while(UART_GetFlagStatus(UART1, UART_FLAG_TxFIFOFull) != SET)
604
                {
605
                {
605
                        tmp_tx = UART1_tx_buffer.pData[UART1_tx_buffer.Position++]; // read next byte from txd buffer
606
                        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
607
                        UART_SendData(UART1, tmp_tx); // put character to txd fifo
607
                        // if terminating character or end of txd buffer reached
608
                        // if terminating character or end of txd buffer reached
608
                        if((tmp_tx == '\r') || (UART1_tx_buffer.Position == UART1_tx_buffer.DataBytes))
609
                        if((tmp_tx == '\r') || (UART1_tx_buffer.Position == UART1_tx_buffer.DataBytes))
609
                        {
610
                        {
610
                                Buffer_Clear(&UART1_tx_buffer); // clear txd buffer
611
                                Buffer_Clear(&UART1_tx_buffer); // clear txd buffer
611
                                break; // end while loop
612
                                break; // end while loop
612
                        }
613
                        }
613
                }
614
                }
614
        }
615
        }
615
}
616
}
616
 
617
 
617
/**************************************************************/
618
/**************************************************************/
618
/* Send the answers to incomming commands at the debug uart   */
619
/* Send the answers to incomming commands at the debug uart   */
619
/**************************************************************/
620
/**************************************************************/
620
void UART1_TransmitTxData(void)
621
void UART1_TransmitTxData(void)
621
{
622
{
622
        if(DebugUART != UART1) return;
623
        if(DebugUART != UART1) return;
623
 
624
 
624
        if(CheckDelay(UART1_AboTimeOut))
625
        if(CheckDelay(UART1_AboTimeOut))
625
        {
626
        {
626
                UART1_DebugData_Interval = 0;
627
                UART1_DebugData_Interval = 0;
627
                UART1_NaviData_Interval = 0;
628
                UART1_NaviData_Interval = 0;
628
                UART1_Data3D_Interval = 0;
629
                UART1_Data3D_Interval = 0;
629
                UART1_Display_Interval = 0;
630
                UART1_Display_Interval = 0;
630
        }
631
        }
631
 
632
 
632
        UART1_Transmit(); // output pending bytes in tx buffer
633
        UART1_Transmit(); // output pending bytes in tx buffer
633
        if((UART1_tx_buffer.Locked == TRUE)) return;
634
        if((UART1_tx_buffer.Locked == TRUE)) return;
634
 
635
 
635
        if(UART1_Request_Parameter && (UART1_tx_buffer.Locked == FALSE))
636
        if(UART1_Request_Parameter && (UART1_tx_buffer.Locked == FALSE))
636
        {
637
        {
637
                s16 ParamValue;
638
                s16 ParamValue;
638
                NCParams_GetValue(UART1_Request_ParameterId, &ParamValue);
639
                NCParams_GetValue(UART1_Request_ParameterId, &ParamValue);
639
                //sprintf(text, "\r\nId=%d, value = %d\r\n", UART1_Request_ParameterId, ParamValue);
640
                //sprintf(text, "\r\nId=%d, value = %d\r\n", UART1_Request_ParameterId, ParamValue);
640
                //UART1_PutString(text);
641
                //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
642
                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;
643
                UART1_Request_Parameter = FALSE;
643
        }
644
        }
644
        else if(UART1_Request_Echo && (UART1_tx_buffer.Locked == FALSE))
645
        else if(UART1_Request_Echo && (UART1_tx_buffer.Locked == FALSE))
645
        {
646
        {
646
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'Z', NC_ADDRESS, 1, &Echo, sizeof(Echo)); // answer the echo request
647
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'Z', NC_ADDRESS, 1, &Echo, sizeof(Echo)); // answer the echo request
647
                Echo = 0; // reset echo value
648
                Echo = 0; // reset echo value
648
                UART1_Request_Echo = FALSE;
649
                UART1_Request_Echo = FALSE;
649
        }
650
        }
650
        else if(UART1_Request_NewWaypoint && (UART1_tx_buffer.Locked == FALSE))
651
        else if(UART1_Request_NewWaypoint && (UART1_tx_buffer.Locked == FALSE))
651
        {
652
        {
652
                u8 WPNumber = WPList_GetCount();
653
                u8 WPNumber = WPList_GetCount();
653
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'W', NC_ADDRESS, 1, &WPNumber, sizeof(WPNumber));
654
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'W', NC_ADDRESS, 1, &WPNumber, sizeof(WPNumber));
654
                UART1_Request_NewWaypoint = FALSE;
655
                UART1_Request_NewWaypoint = FALSE;
655
        }
656
        }
656
        else if((UART1_Request_ReadWaypoint) && (UART1_tx_buffer.Locked == FALSE))
657
        else if((UART1_Request_ReadWaypoint) && (UART1_tx_buffer.Locked == FALSE))
657
        {
658
        {
658
                u8 WPNumber = WPList_GetCount();
659
                u8 WPNumber = WPList_GetCount();
659
                if (UART1_Request_ReadWaypoint <= WPNumber)
660
                if (UART1_Request_ReadWaypoint <= WPNumber)
660
                {
661
                {
661
                        MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'X', NC_ADDRESS, 3, &WPNumber, 1, &UART1_Request_ReadWaypoint, 1, WPList_GetAt(UART1_Request_ReadWaypoint), sizeof(Waypoint_t));
662
                        MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'X', NC_ADDRESS, 3, &WPNumber, 1, &UART1_Request_ReadWaypoint, 1, WPList_GetAt(UART1_Request_ReadWaypoint), sizeof(Waypoint_t));
662
                }
663
                }
663
                else
664
                else
664
                {
665
                {
665
                        MKProtocol_CreateSerialFrame(&UART1_tx_buffer,'X', NC_ADDRESS, 1, &WPNumber, sizeof(WPNumber));
666
                        MKProtocol_CreateSerialFrame(&UART1_tx_buffer,'X', NC_ADDRESS, 1, &WPNumber, sizeof(WPNumber));
666
                }
667
                }
667
                UART1_Request_ReadWaypoint = 0;
668
                UART1_Request_ReadWaypoint = 0;
668
        }
669
        }
669
        else if((UART1_Request_DebugLabel != 0xFF) && (UART1_tx_buffer.Locked == FALSE))
670
        else if((UART1_Request_DebugLabel != 0xFF) && (UART1_tx_buffer.Locked == FALSE))
670
        {
671
        {
671
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'A', NC_ADDRESS, 2, &UART1_Request_DebugLabel, sizeof(UART1_Request_DebugLabel), (u8 *) ANALOG_LABEL[UART1_Request_DebugLabel], 16);
672
                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;
673
                UART1_Request_DebugLabel = 0xFF;
673
        }
674
        }
674
        else if(( ((UART1_NaviData_Interval > 0) && CheckDelay(UART1_NaviData_Timer) ) || UART1_Request_NaviData) && (UART1_tx_buffer.Locked == FALSE))
675
        else if(( ((UART1_NaviData_Interval > 0) && CheckDelay(UART1_NaviData_Timer) ) || UART1_Request_NaviData) && (UART1_tx_buffer.Locked == FALSE))
675
        {
676
        {
676
                NaviData.Errorcode = ErrorCode;
677
                NaviData.Errorcode = ErrorCode;
677
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS,1, (u8 *)&NaviData, sizeof(NaviData));
678
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS,1, (u8 *)&NaviData, sizeof(NaviData));
678
                UART1_NaviData_Timer = SetDelay(UART1_NaviData_Interval);
679
                UART1_NaviData_Timer = SetDelay(UART1_NaviData_Interval);
679
                UART1_Request_NaviData = FALSE;
680
                UART1_Request_NaviData = FALSE;
680
        }
681
        }
681
        else if( (( (UART1_DebugData_Interval > 0) && CheckDelay(UART1_DebugData_Timer)) || UART1_Request_DebugData) && (UART1_tx_buffer.Locked == FALSE))
682
        else if( (( (UART1_DebugData_Interval > 0) && CheckDelay(UART1_DebugData_Timer)) || UART1_Request_DebugData) && (UART1_tx_buffer.Locked == FALSE))
682
        {
683
        {
683
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'D', NC_ADDRESS, 1,(u8 *)&DebugOut, sizeof(DebugOut));
684
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'D', NC_ADDRESS, 1,(u8 *)&DebugOut, sizeof(DebugOut));
684
                UART1_DebugData_Timer = SetDelay(UART1_DebugData_Interval);
685
                UART1_DebugData_Timer = SetDelay(UART1_DebugData_Interval);
685
                UART1_Request_DebugData = FALSE;
686
                UART1_Request_DebugData = FALSE;
686
        }
687
        }
687
        else if((( (UART1_Data3D_Interval > 0) && CheckDelay(UART1_Data3D_Timer) ) || UART1_Request_Data3D) && (UART1_tx_buffer.Locked == FALSE))
688
        else if((( (UART1_Data3D_Interval > 0) && CheckDelay(UART1_Data3D_Timer) ) || UART1_Request_Data3D) && (UART1_tx_buffer.Locked == FALSE))
688
        {
689
        {
689
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'C', NC_ADDRESS, 1,(u8 *)&Data3D, sizeof(Data3D));
690
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'C', NC_ADDRESS, 1,(u8 *)&Data3D, sizeof(Data3D));
690
                UART1_Data3D_Timer = SetDelay(UART1_Data3D_Interval);
691
                UART1_Data3D_Timer = SetDelay(UART1_Data3D_Interval);
691
                UART1_Request_Data3D = FALSE;
692
                UART1_Request_Data3D = FALSE;
692
        }
693
        }
693
        /*
694
        /*
694
        else if(UART1_ConfirmFrame && (UART1_tx_buffer.Locked == FALSE))
695
        else if(UART1_ConfirmFrame && (UART1_tx_buffer.Locked == FALSE))
695
        {
696
        {
696
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'B', NC_ADDRESS, 1, &UART1_ConfirmFrame, sizeof(UART1_ConfirmFrame));
697
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'B', NC_ADDRESS, 1, &UART1_ConfirmFrame, sizeof(UART1_ConfirmFrame));
697
                UART1_ConfirmFrame = 0;
698
                UART1_ConfirmFrame = 0;
698
        }
699
        }
699
        */
700
        */
700
        /*
701
        /*
701
        else if(UART1_Request_ExternalControl && (UART1_tx_buffer.Locked == FALSE))
702
        else if(UART1_Request_ExternalControl && (UART1_tx_buffer.Locked == FALSE))
702
        {
703
        {
703
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'G', NC_ADDRESS, 1, (u8 *)&ExternControl, sizeof(ExternControl));
704
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'G', NC_ADDRESS, 1, (u8 *)&ExternControl, sizeof(ExternControl));
704
                UART1_Request_ExternalControl = FALSE;
705
                UART1_Request_ExternalControl = FALSE;
705
        }
706
        }
706
        */
707
        */
707
        else if( (( (UART1_Display_Interval > 0) && CheckDelay(UART1_Display_Timer)) || UART1_Request_Display) && (UART1_tx_buffer.Locked == FALSE))
708
        else if( (( (UART1_Display_Interval > 0) && CheckDelay(UART1_Display_Timer)) || UART1_Request_Display) && (UART1_tx_buffer.Locked == FALSE))
708
        {
709
        {
709
                if(UART1_DisplayLine > 3)
710
                if(UART1_DisplayLine > 3)
710
                {
711
                {
711
                        Menu_Update(UART1_DisplayKeys);
712
                        Menu_Update(UART1_DisplayKeys);
712
                        UART1_DisplayKeys = 0;
713
                        UART1_DisplayKeys = 0;
713
                        MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'H', NC_ADDRESS, 1, (u8*)DisplayBuff, sizeof(DisplayBuff));
714
                        MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'H', NC_ADDRESS, 1, (u8*)DisplayBuff, sizeof(DisplayBuff));
714
                }
715
                }
715
                else
716
                else
716
                {
717
                {
717
                        UART1_DisplayLine = 2;
718
                        UART1_DisplayLine = 2;
718
                        sprintf(text,"!!! incompatible !!!");
719
                        sprintf(text,"!!! incompatible !!!");
719
                        MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'H', NC_ADDRESS, 2, &UART1_DisplayLine, sizeof(UART1_DisplayLine), (u8*)&text, 20);
720
                        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;
721
                        if(UART1_DisplayLine++ > 3) UART1_DisplayLine = 0;
721
                }
722
                }
722
                UART1_Display_Timer = SetDelay(UART1_Display_Interval);
723
                UART1_Display_Timer = SetDelay(UART1_Display_Interval);
723
                UART1_Request_Display = FALSE;
724
                UART1_Request_Display = FALSE;
724
        }
725
        }
725
        else if(UART1_Request_Display1 && (UART1_tx_buffer.Locked == FALSE))
726
        else if(UART1_Request_Display1 && (UART1_tx_buffer.Locked == FALSE))
726
        {
727
        {
727
                Menu_Update(0);
728
                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));
729
                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;
730
                UART1_Request_Display1 = FALSE;
730
        }
731
        }
731
        else if(UART1_Request_VersionInfo && (UART1_tx_buffer.Locked == FALSE))
732
        else if(UART1_Request_VersionInfo && (UART1_tx_buffer.Locked == FALSE))
732
        {
733
        {
733
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'V', NC_ADDRESS,1, (u8 *)&UART_VersionInfo, sizeof(UART_VersionInfo));
734
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'V', NC_ADDRESS,1, (u8 *)&UART_VersionInfo, sizeof(UART_VersionInfo));
734
                UART1_Request_VersionInfo = FALSE;
735
                UART1_Request_VersionInfo = FALSE;
735
        }
736
        }
736
        else if(UART1_Request_ErrorMessage && (UART1_tx_buffer.Locked == FALSE))
737
        else if(UART1_Request_ErrorMessage && (UART1_tx_buffer.Locked == FALSE))
737
        {
738
        {
738
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'E', NC_ADDRESS, 1, (u8 *)&ErrorMSG, sizeof(ErrorMSG));
739
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'E', NC_ADDRESS, 1, (u8 *)&ErrorMSG, sizeof(ErrorMSG));
739
                UART1_Request_ErrorMessage = FALSE;
740
                UART1_Request_ErrorMessage = FALSE;
740
        }
741
        }
741
#ifdef DEBUG                                                                                                                    // only include functions if DEBUG is defined
742
#ifdef DEBUG                                                                                                                    // only include functions if DEBUG is defined
742
     if(SendDebugOutput && (UART1_tx_buffer.Locked == FALSE))
743
     if(SendDebugOutput && (UART1_tx_buffer.Locked == FALSE))
743
     {
744
     {
744
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer,'0', NC_ADDRESS, 1, (unsigned char *) &tDebug, sizeof(tDebug));
745
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer,'0', NC_ADDRESS, 1, (unsigned char *) &tDebug, sizeof(tDebug));
745
                 //SendOutData('0', FC_ADDRESS, 1, (unsigned char *) &tDebug, sizeof(tDebug));
746
                 //SendOutData('0', FC_ADDRESS, 1, (unsigned char *) &tDebug, sizeof(tDebug));
746
                 SendDebugOutput = 0;
747
                 SendDebugOutput = 0;
747
         }
748
         }
748
#endif  
749
#endif  
749
 
750
 
750
        UART1_Transmit(); // output pending bytes in tx buffer
751
        UART1_Transmit(); // output pending bytes in tx buffer
751
}
752
}
752
 
753
 
753
 
754