Subversion Repositories NaviCtrl

Rev

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

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