Subversion Repositories NaviCtrl

Rev

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

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