Subversion Repositories NaviCtrl

Rev

Rev 588 | Rev 599 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 588 Rev 598
Line 78... Line 78...
78
#include "debug.h"
78
#include "debug.h"
79
#include "spi_slave.h"
79
#include "spi_slave.h"
80
#include "ftphelper.h"
80
#include "ftphelper.h"
81
#include "led.h"
81
#include "led.h"
82
#include "fat16.h"
82
#include "fat16.h"
-
 
83
#include "crc16.h"
83
#include "eeprom.h"
84
#include "eeprom.h"
Line 84... Line 85...
84
 
85
 
85
#define LIC_CMD_READ_LICENSE     1
86
#define LIC_CMD_READ_LICENSE     1
86
#define LIC_CMD_WRITE_LICENSE    2
87
#define LIC_CMD_WRITE_LICENSE    2
Line 87... Line -...
87
#define LIC_CMD_ERASE_LICENSE    3
-
 
88
 
88
#define LIC_CMD_ERASE_LICENSE    3
89
 
89
 
Line 90... Line 90...
90
#define FALSE   0
90
#define FALSE   0
91
#define TRUE    1
91
#define TRUE    1
Line -... Line 92...
-
 
92
 
-
 
93
#define ABO_TIMEOUT 8000 // disable abo after 8 seconds
-
 
94
u32 UART1_AboTimeOut = 0;
-
 
95
 
-
 
96
NaviData_Volatile_t NaviData_Volatile;
-
 
97
NaviData_WP_t NaviData_WP;
-
 
98
NaviData_Deviation_t NaviData_Deviation;
-
 
99
NaviData_Home_t NaviData_Home;
-
 
100
NaviData_Target_t NaviData_Target;
92
 
101
NaviData_Flags_t NaviData_Flags;
93
#define ABO_TIMEOUT 8000 // disable abo after 8 seconds
102
NaviData_Tiny_t NaviData_Tiny;
94
u32 UART1_AboTimeOut = 0;
103
NaviData_t NaviData;
95
 
104
 
96
u8 UART1_Request_VersionInfo    = FALSE;
105
u8 UART1_Request_VersionInfo    = FALSE;
Line 201... Line 210...
201
 
210
 
202
u32 UART1_DebugData_Timer = 0;
211
u32 UART1_DebugData_Timer = 0;
203
u32 UART1_DebugData_Interval = 0;       // in ms
212
u32 UART1_DebugData_Interval = 0;       // in ms
204
u32 UART1_NaviData_Timer = 0;
213
u32 UART1_NaviData_Timer = 0;
-
 
214
u32 UART1_NaviData_Interval = 0;        // in ms
205
u32 UART1_NaviData_Interval = 0;        // in ms
215
u16 UART1_NaviData_MaxBytes = 0;                // newer protocol?
206
u32 UART1_Data3D_Timer = 0;
216
u32 UART1_Data3D_Timer = 0;
207
u32 UART1_Data3D_Interval = 0;          // in ms
217
u32 UART1_Data3D_Interval = 0;          // in ms
208
u32 UART1_MotorData_Timer = 0;
218
u32 UART1_MotorData_Timer = 0;
209
u32 UART1_MotorData_Interval = 0;               // in ms
219
u32 UART1_MotorData_Interval = 0;               // in ms
210
u32 UART1_Display_Timer = 0;
220
u32 UART1_Display_Timer = 0;
211
u32 UART1_Display_Interval = 0;         // in ms
221
u32 UART1_Display_Interval = 0;         // in ms
212
u32 NMEA_Timer = 0;
222
u32 NMEA_Timer = 0;
Line -... Line 223...
-
 
223
u32 NMEA_Interval = 0;// in ms
-
 
224
 
-
 
225
u8 CalculateDebugLableCrc(void)
-
 
226
{
-
 
227
        u16 i;
-
 
228
        u8 crc = 0;
-
 
229
        for(i=0;i<sizeof(ANALOG_LABEL);i++) crc += ANALOG_LABEL[0][i];
-
 
230
        return(crc);
213
u32 NMEA_Interval = 0;// in ms
231
}
214
 
232
 
215
/********************************************************/
233
/********************************************************/
216
/*            Initialization the UART1                  */
234
/*            Initialization the UART1                  */
217
/********************************************************/
235
/********************************************************/
Line 290... Line 308...
290
        UART_VersionInfo.SWPatch = VERSION_PATCH;
308
        UART_VersionInfo.SWPatch = VERSION_PATCH;
291
        UART_VersionInfo.ProtoMajor = VERSION_SERIAL_MAJOR;
309
        UART_VersionInfo.ProtoMajor = VERSION_SERIAL_MAJOR;
292
    UART_VersionInfo.HWMajor = Version_HW & 0x7F;
310
    UART_VersionInfo.HWMajor = Version_HW & 0x7F;
293
    UART_VersionInfo.BL_Firmware = 255;
311
    UART_VersionInfo.BL_Firmware = 255;
294
        UART_VersionInfo.Flags = 0;
312
        UART_VersionInfo.Flags = 0;
295
        UART_VersionInfo.Reserved1 = 0;
313
        UART_VersionInfo.LabelTextCRC = CalculateDebugLableCrc();
296
        NaviData.Version = NAVIDATA_VERSION;
314
        NaviData.Version = NAVIDATA_VERSION;
297
 
-
 
298
        UART1_PutString("\r\n UART1 init...ok");
315
        UART1_PutString("\r\n UART1 init...ok");
299
}
316
}
Line 300... Line 317...
300
 
317
 
Line 622... Line 639...
622
                        case 'h':// reqest for display line
639
                        case 'h':// reqest for display line
623
                                if((SerialMsg.pData[0]& 0x80) == 0x00)// old format
640
                                if((SerialMsg.pData[0]& 0x80) == 0x00)// old format
624
                                {
641
                                {
625
                                        UART1_DisplayLine = 2;
642
                                        UART1_DisplayLine = 2;
626
                                        UART1_Display_Interval = 0;
643
                                        UART1_Display_Interval = 0;
-
 
644
                                        UART1_Request_Display = TRUE;
627
                                }
645
                                }
628
                                else
646
                                else
629
                                {
647
                                {
630
                                        UART1_DisplayKeys |= ~SerialMsg.pData[0];
648
                                        UART1_DisplayKeys |= ~SerialMsg.pData[0];
631
                                        UART1_Display_Interval = (u32) SerialMsg.pData[1] * 10;
649
                                        UART1_Display_Interval = (u32) SerialMsg.pData[1] * 10;
632
                                        UART1_DisplayLine = 4;
650
                                        UART1_DisplayLine = 4;
633
                                        UART1_AboTimeOut = SetDelay(ABO_TIMEOUT);
651
                                        UART1_AboTimeOut = SetDelay(ABO_TIMEOUT);
-
 
652
                                        if(UART1_Display_Interval) UART1_Request_Display = TRUE;
634
                                }
653
                                }
635
                                UART1_Request_Display = TRUE;
-
 
636
                                break;
654
                                break;
Line 637... Line 655...
637
 
655
 
638
                        case 'l':// reqest for display columns
656
                        case 'l':// reqest for display columns
639
                                MenuItem = SerialMsg.pData[0];
657
                                MenuItem = SerialMsg.pData[0];
640
                                UART1_Request_Display1 = TRUE;
658
                                UART1_Request_Display1 = TRUE;
Line 641... Line 659...
641
                                break;
659
                                break;
642
 
660
 
-
 
661
                        case 'o': // request for navigation information
-
 
662
                                UART1_NaviData_Interval = (u32) SerialMsg.pData[0] * 10;
643
                        case 'o': // request for navigation information
663
                                if(SerialMsg.DataLen > 2) UART1_NaviData_MaxBytes = SerialMsg.pData[1] * 256 + SerialMsg.pData[2];
644
                                UART1_NaviData_Interval = (u32) SerialMsg.pData[0] * 10;
664
                                else UART1_NaviData_MaxBytes = 0;
645
                                if(UART1_NaviData_Interval > 0) UART1_Request_NaviData = TRUE;
665
                                if(UART1_NaviData_Interval > 0) UART1_Request_NaviData = TRUE;
Line 646... Line 666...
646
                                UART1_AboTimeOut = SetDelay(ABO_TIMEOUT);
666
                                UART1_AboTimeOut = SetDelay(ABO_TIMEOUT);
Line 945... Line 965...
945
 
965
 
946
*/
966
*/
Line -... Line 967...
-
 
967
}
-
 
968
 
-
 
969
 
-
 
970
u16 TransmitNavigationData(u16 MaxBytesPerSecond) // returns the minumum pause time in ms
-
 
971
{
-
 
972
static u8 state = 0, count_flags = 2, count_target = 3, count_home = 4, count_wp = 5 , count_tiny = 6;
-
 
973
static u16 CRC_Home = 0, CRC_Target = 0, CRC_Flags = 0, CRC_Wp = 0;
-
 
974
u16 pause, sent = 0, crc_home = 0xff, crc_target = 0xff, crc_flags = 0xff, crc_wp = 0xff;
-
 
975
 
-
 
976
while(!sent)
-
 
977
 {
-
 
978
                switch(state++)
-
 
979
                {
-
 
980
                 case 0:
-
 
981
                 case 4:
-
 
982
// belegt 35 ASCII-Zeichen
-
 
983
                                NaviData_Flags.Index = 11;
-
 
984
                                NaviData_Flags.ActualLongitude = NaviData.CurrentPosition.Longitude;
-
 
985
                                NaviData_Flags.ActualLatitude = NaviData.CurrentPosition.Latitude;
-
 
986
                                NaviData_Flags.Altimeter = NaviData.Altimeter;
-
 
987
                                NaviData_Flags.GroundSpeed = NaviData.GroundSpeed / 10;
-
 
988
                                NaviData_Flags.OSDStatusFlags = (FC.StatusFlags & OSD_FLAG_MASK1) | (FC.StatusFlags2 & OSD_FLAG_MASK2);
-
 
989
                                NaviData_Flags.OSDStatusFlags2 = (FC.StatusFlags & ~OSD_FLAG_MASK1) | (FC.StatusFlags2 & ~OSD_FLAG_MASK2);
-
 
990
                                NaviData_Flags.NCFlags = NaviData.NCFlags;
-
 
991
                                NaviData_Flags.Errorcode = ErrorCode;
-
 
992
                                NaviData_Flags.ReserveFlags = 0;
-
 
993
                                NaviData_Flags.SpeakHoTT = FC.FromFC_SpeakHoTT;
-
 
994
                                NaviData_Flags.VarioCharacter = FromFC_VarioCharacter;
-
 
995
                                NaviData_Flags.GPS_ModeCharacter = NC_GPS_ModeCharacter;
-
 
996
                                NaviData_Flags.BL_MinOfMaxPWM = BL_MinOfMaxPWM;
-
 
997
                                crc_flags = CRC16((unsigned char*)(&NaviData_Flags.OSDStatusFlags2), sizeof(NaviData_Flags) - START_PAYLOAD_DATA); // update crc for the license structure
-
 
998
                                if((crc_flags != CRC_Flags) || (--count_flags == 0))
-
 
999
                                {
-
 
1000
                                 sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Flags, sizeof(NaviData_Flags)) + 1;
-
 
1001
                                 CRC_Flags = crc_flags;
-
 
1002
                                 count_flags = 11*2;
-
 
1003
                                }
-
 
1004
                                break;
-
 
1005
                 case 1:
-
 
1006
                 case 5:
-
 
1007
// belegt 43 ASCII-Zeichen
-
 
1008
                                NaviData_Target.Index = 12;
-
 
1009
                                NaviData_Target.ActualLongitude = NaviData.CurrentPosition.Longitude;
-
 
1010
                                NaviData_Target.ActualLatitude = NaviData.CurrentPosition.Latitude;
-
 
1011
                                NaviData_Target.Altimeter = NaviData.Altimeter;
-
 
1012
                                NaviData_Target.GroundSpeed = NaviData.GroundSpeed / 10;
-
 
1013
                                NaviData_Target.OSDStatusFlags = (FC.StatusFlags & OSD_FLAG_MASK1) | (FC.StatusFlags2 & OSD_FLAG_MASK2);
-
 
1014
                                NaviData_Target.TargetLongitude = NaviData.TargetPosition.Longitude;
-
 
1015
                                NaviData_Target.TargetLatitude = NaviData.TargetPosition.Latitude;
-
 
1016
                                NaviData_Target.TargetAltitude = NaviData.TargetPosition.Altitude;
-
 
1017
                                NaviData_Target.RC_Quality = NaviData.RC_Quality;
-
 
1018
                                crc_target = CRC16((unsigned char*)(&NaviData_Target.TargetLongitude), sizeof(NaviData_Target) - START_PAYLOAD_DATA); // update crc for the license structure
-
 
1019
                            if((crc_target != CRC_Target) || (--count_target == 0))
-
 
1020
                                {
-
 
1021
                                 sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Target, sizeof(NaviData_Target)) + 1;
-
 
1022
                                 CRC_Target = crc_target;
-
 
1023
                                 count_target = 10*2;
-
 
1024
                                }
-
 
1025
                                break;
-
 
1026
                 case 2:
-
 
1027
                 case 6:
-
 
1028
// belegt 31 ASCII-Zeichen
-
 
1029
                                NaviData_WP.Index = 15;
-
 
1030
                                NaviData_WP.ActualLongitude = NaviData.CurrentPosition.Longitude;
-
 
1031
                                NaviData_WP.ActualLatitude = NaviData.CurrentPosition.Latitude;
-
 
1032
                                NaviData_WP.Altimeter = NaviData.Altimeter;
-
 
1033
                                NaviData_WP.GroundSpeed = NaviData.GroundSpeed / 10;
-
 
1034
                                NaviData_WP.OSDStatusFlags = (FC.StatusFlags & OSD_FLAG_MASK1) | (FC.StatusFlags2 & OSD_FLAG_MASK2);
-
 
1035
                                NaviData_WP.WaypointIndex = NaviData.WaypointIndex;
-
 
1036
                                NaviData_WP.WaypointNumber = NaviData.WaypointNumber;
-
 
1037
                                NaviData_WP.TargetHoldTime = NaviData.TargetHoldTime;
-
 
1038
                                // NaviData_WP.WP_Eventchannel = FC_WP_EventChannel; -> happends already in SPI.c
-
 
1039
                                crc_wp = CRC16((unsigned char*)(&NaviData_WP.WaypointIndex), sizeof(NaviData_WP) - START_PAYLOAD_DATA); // update crc for the license structure
-
 
1040
                                if((crc_wp != CRC_Wp) || (--count_wp == 0))
-
 
1041
                                {
-
 
1042
                         sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_WP, sizeof(NaviData_WP)) + 1;
-
 
1043
                                 CRC_Wp = crc_wp;
-
 
1044
                                 count_wp = 12*2;
-
 
1045
                                }
-
 
1046
                                break;
-
 
1047
                 case 3:
-
 
1048
// belegt 43 ASCII-Zeichen
-
 
1049
                                NaviData_Home.Index = 13;
-
 
1050
                                NaviData_Home.ActualLongitude = NaviData.CurrentPosition.Longitude;
-
 
1051
                                NaviData_Home.ActualLatitude = NaviData.CurrentPosition.Latitude;
-
 
1052
                                NaviData_Home.Altimeter = NaviData.Altimeter;
-
 
1053
                                NaviData_Home.GroundSpeed = NaviData.GroundSpeed / 10;
-
 
1054
                                NaviData_Home.OSDStatusFlags = (FC.StatusFlags & OSD_FLAG_MASK1) | (FC.StatusFlags2 & OSD_FLAG_MASK2);
-
 
1055
                                NaviData_Home.HomeLongitude = NaviData.HomePosition.Longitude;
-
 
1056
                                NaviData_Home.HomeLatitude = NaviData.HomePosition.Latitude;
-
 
1057
                                NaviData_Home.HomeAltitude = NaviData.HomePosition.Altitude;
-
 
1058
                                crc_home = CRC16((unsigned char*)(&NaviData_Home.HomeLongitude), sizeof(NaviData_Home_t) - START_PAYLOAD_DATA); // update crc for the license structure
-
 
1059
                                if((crc_home != CRC_Home) || (--count_home == 0))
-
 
1060
                                {
-
 
1061
                                 sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Home, sizeof(NaviData_Home)) + 1;
-
 
1062
                                 CRC_Home = crc_home;
-
 
1063
                                 count_home = 25;
-
 
1064
                                }
-
 
1065
                                break;
-
 
1066
                 case 7:
-
 
1067
// belegt 39 ASCII-Zeichen
-
 
1068
                                NaviData_Deviation.Index = 14;
-
 
1069
                                NaviData_Deviation.ActualLongitude = NaviData.CurrentPosition.Longitude;
-
 
1070
                                NaviData_Deviation.ActualLatitude = NaviData.CurrentPosition.Latitude;
-
 
1071
                                NaviData_Deviation.Altimeter = NaviData.Altimeter;
-
 
1072
                                NaviData_Deviation.GroundSpeed = NaviData.GroundSpeed / 10;
-
 
1073
                                NaviData_Deviation.OSDStatusFlags = (FC.StatusFlags & OSD_FLAG_MASK1) | (FC.StatusFlags2 & OSD_FLAG_MASK2);
-
 
1074
                                NaviData_Deviation.FlyingTime = NaviData.FlyingTime;
-
 
1075
                                NaviData_Deviation.DistanceToHome = NaviData.HomePositionDeviation.Distance;
-
 
1076
                                NaviData_Deviation.HeadingToHome = NaviData.HomePositionDeviation.Bearing/2;
-
 
1077
                                NaviData_Deviation.DistanceToTarget = NaviData.TargetPositionDeviation.Distance;
-
 
1078
                                NaviData_Deviation.HeadingToTarget = NaviData.TargetPositionDeviation.Bearing/2;
-
 
1079
                                NaviData_Deviation.AngleNick = NaviData.AngleNick;
-
 
1080
                                NaviData_Deviation.AngleRoll = NaviData.AngleRoll;
-
 
1081
                                NaviData_Deviation.SatsInUse = NaviData.SatsInUse;
-
 
1082
                            sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Deviation, sizeof(NaviData_Deviation)) + 1;
-
 
1083
                                break;
-
 
1084
                 case 8:
-
 
1085
// belegt 43 ASCII-Zeichen
-
 
1086
                                NaviData_Volatile.Index = 16;
-
 
1087
                                NaviData_Volatile.ActualLongitude = NaviData.CurrentPosition.Longitude;
-
 
1088
                                NaviData_Volatile.ActualLatitude = NaviData.CurrentPosition.Latitude;
-
 
1089
                                NaviData_Volatile.Altimeter = NaviData.Altimeter;
-
 
1090
                                NaviData_Volatile.GroundSpeed = NaviData.GroundSpeed / 10;
-
 
1091
                                NaviData_Volatile.OSDStatusFlags = (FC.StatusFlags & OSD_FLAG_MASK1) | (FC.StatusFlags2 & OSD_FLAG_MASK2);
-
 
1092
                                NaviData_Volatile.UBat = FC.BAT_Voltage;
-
 
1093
                                NaviData_Volatile.Current = NaviData.Current;
-
 
1094
                                NaviData_Volatile.UsedCapacity = NaviData.UsedCapacity;
-
 
1095
                                NaviData_Volatile.Variometer = NaviData.Variometer;
-
 
1096
                                NaviData_Volatile.Heading = NaviData.Heading / 2;
-
 
1097
                                NaviData_Volatile.CompassHeading = NaviData.CompassHeading / 2;
-
 
1098
                                NaviData_Volatile.Gas = NaviData.Gas;
-
 
1099
                                NaviData_Volatile.Gas = NaviData.SetpointAltitude;
-
 
1100
                                sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Volatile, sizeof(NaviData_Volatile)) + 1;
-
 
1101
                        break;
-
 
1102
 
-
 
1103
                 case 9:
-
 
1104
// belegt 27 ASCII-Zeichen
-
 
1105
                                NaviData_Tiny.Index = 10;
-
 
1106
                                NaviData_Tiny.ActualLongitude = NaviData.CurrentPosition.Longitude;
-
 
1107
                                NaviData_Tiny.ActualLatitude = NaviData.CurrentPosition.Latitude;
-
 
1108
                                NaviData_Tiny.Altimeter = NaviData.Altimeter;
-
 
1109
                                NaviData_Tiny.GroundSpeed = NaviData.GroundSpeed / 10;
-
 
1110
                                NaviData_Tiny.OSDStatusFlags = (FC.StatusFlags & OSD_FLAG_MASK1) | (FC.StatusFlags2 & OSD_FLAG_MASK2);
-
 
1111
                                if(--count_tiny == 0)
-
 
1112
                                 {
-
 
1113
                                        sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Tiny, sizeof(NaviData_Tiny)) + 1;
-
 
1114
                                        count_tiny = 60;
-
 
1115
                                 }
-
 
1116
                        break;
-
 
1117
                 default: state = 0;
-
 
1118
                                break;
-
 
1119
                }
-
 
1120
 }
-
 
1121
        pause = (sent * 1000) / MaxBytesPerSecond;
-
 
1122
 
-
 
1123
        UART1_NaviData_Timer = SetDelay(UART1_NaviData_Interval);
-
 
1124
        UART1_Request_NaviData = FALSE;
-
 
1125
        LastTransmittedFCStatusFlags2 = NaviData.FCStatusFlags2;
-
 
1126
return(pause);
-
 
1127
// Clear at timeout: 
947
}
1128
// NaviData_WP.WP_Eventchannel
948
 
1129
}
949
 
1130
 
950
/**************************************************************/
1131
/**************************************************************/
951
/* Send the answers to incomming commands at the debug uart   */
1132
/* Send the answers to incomming commands at the debug uart   */
Line 957... Line 1138...
957
 
1138
 
958
        if(CheckDelay(UART1_AboTimeOut))
1139
        if(CheckDelay(UART1_AboTimeOut))
959
        {
1140
        {
960
                UART1_DebugData_Interval = 0;
1141
                UART1_DebugData_Interval = 0;
-
 
1142
                UART1_NaviData_Interval = 0;
961
                UART1_NaviData_Interval = 0;
1143
                UART1_NaviData_MaxBytes = 0;
962
                UART1_Data3D_Interval = 0;
1144
                UART1_Data3D_Interval = 0;
963
                UART1_Display_Interval = 0;
1145
                UART1_Display_Interval = 0;
-
 
1146
                UART1_MotorData_Interval = 0;
-
 
1147
                UART1_NaviData_Timer = SetDelay(500);
964
                UART1_MotorData_Interval = 0;
1148
                UART1_AboTimeOut = SetDelay(100);
965
        }
1149
        }
-
 
1150
/*
-
 
1151
#define CHK_MIN_INTERVAL(a,b) {if(a && a < b) a = b;}
-
 
1152
UART1_NaviData_Interval = 500;
-
 
1153
CHK_MIN_INTERVAL(UART1_DebugData_Interval,500);
-
 
1154
CHK_MIN_INTERVAL(UART1_NaviData_Interval,1000);
-
 
1155
CHK_MIN_INTERVAL(UART1_Data3D_Interval,255);
-
 
1156
CHK_MIN_INTERVAL(UART1_Display_Interval,1500);
-
 
1157
CHK_MIN_INTERVAL(UART1_MotorData_Interval,750);
966
 
1158
*/
967
        UART1_Transmit(); // output pending bytes in tx buffer
1159
        UART1_Transmit(); // output pending bytes in tx buffer
Line 968... Line 1160...
968
        if((UART1_tx_buffer.Locked == TRUE)) return;
1160
        if((UART1_tx_buffer.Locked == TRUE)) return;
969
 
1161
 
Line 1023... Line 1215...
1023
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'B', NC_ADDRESS, 1,(u8 *)&UART1_ExternalControlConfirmFrame, sizeof(UART1_ExternalControlConfirmFrame));
1215
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'B', NC_ADDRESS, 1,(u8 *)&UART1_ExternalControlConfirmFrame, sizeof(UART1_ExternalControlConfirmFrame));
1024
                UART1_ExternalControlConfirmFrame = 0;
1216
                UART1_ExternalControlConfirmFrame = 0;
1025
        }
1217
        }
1026
        else if(( ((UART1_NaviData_Interval > 0) && CheckDelay(UART1_NaviData_Timer) ) || UART1_Request_NaviData) && (UART1_tx_buffer.Locked == FALSE))
1218
        else if(( ((UART1_NaviData_Interval > 0) && CheckDelay(UART1_NaviData_Timer) ) || UART1_Request_NaviData) && (UART1_tx_buffer.Locked == FALSE))
1027
        {
1219
        {
-
 
1220
          u16 time = 0;
-
 
1221
      if(UART1_NaviData_MaxBytes == 0) // Transmit the big NC Data frame
-
 
1222
           {
1028
                NaviData.Errorcode = ErrorCode;
1223
                NaviData.Errorcode = ErrorCode;
1029
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData, sizeof(NaviData));
1224
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData, sizeof(NaviData));
1030
                UART1_NaviData_Timer = SetDelay(UART1_NaviData_Interval);
-
 
1031
                UART1_Request_NaviData = FALSE;
-
 
1032
                LastTransmittedFCStatusFlags2 = NaviData.FCStatusFlags2;
1225
                LastTransmittedFCStatusFlags2 = NaviData.FCStatusFlags2;
-
 
1226
                UART1_NaviData_Timer = SetDelay(UART1_NaviData_Interval);
-
 
1227
           }
-
 
1228
           else
-
 
1229
           if(CheckDelay(UART1_NaviData_Timer))
-
 
1230
           {
-
 
1231
// Wert =  50 -> Sekunden laufen in 2 s-Abstand (im Wegpunkteflug mit aktivem Countdown in 3-4s)
-
 
1232
// Wert = 100 -> Sekunden laufen in 1-2 s-Abstand (im Wegpunkteflug mit aktivem Countdown in 2s)
-
 
1233
// Wert = 150 -> Sekunden laufen flüssig (im Wegpunkteflug mit aktivem Countdown und gleichzeitig Target verschieben manchmal in 2s)
-
 
1234
// Wert = 200 -> Sekunden laufen flüssig
-
 
1235
// Wert >= 250 -> optimal 
-
 
1236
//UART1_NaviData_MaxBytes = 250;
-
 
1237
            time = TransmitNavigationData(UART1_NaviData_MaxBytes);
-
 
1238
                if(UART1_NaviData_Interval > time) time = UART1_NaviData_Interval;
-
 
1239
                UART1_NaviData_Timer = SetDelay(time);
-
 
1240
           }
-
 
1241
        UART1_Request_NaviData = FALSE;
1033
        }
1242
        }
1034
        else if( (( (UART1_DebugData_Interval > 0) && CheckDelay(UART1_DebugData_Timer)) || UART1_Request_DebugData) && (UART1_tx_buffer.Locked == FALSE))
1243
        else if( (( (UART1_DebugData_Interval > 0) && CheckDelay(UART1_DebugData_Timer)) || UART1_Request_DebugData) && (UART1_tx_buffer.Locked == FALSE))
1035
        {
1244
        {
1036
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'D', NC_ADDRESS, 1,(u8 *)&DebugOut, sizeof(DebugOut));
1245
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'D', NC_ADDRESS, 1,(u8 *)&DebugOut, sizeof(DebugOut));
1037
                UART1_DebugData_Timer = SetDelay(UART1_DebugData_Interval);
1246
                UART1_DebugData_Timer = SetDelay(UART1_DebugData_Interval);
Line 1136... Line 1345...
1136
                version_tmp.HardwareError[0] = 0xff; // tells the KopterTool that it is the FC-version 
1345
                version_tmp.HardwareError[0] = 0xff; // tells the KopterTool that it is the FC-version 
1137
                version_tmp.HardwareError[1] = 0xff; // tells the KopterTool that it is the FC-version 
1346
                version_tmp.HardwareError[1] = 0xff; // tells the KopterTool that it is the FC-version 
1138
                version_tmp.ProtoMajor = UART_VersionInfo.ProtoMajor;
1347
                version_tmp.ProtoMajor = UART_VersionInfo.ProtoMajor;
1139
                version_tmp.BL_Firmware = UART_VersionInfo.BL_Firmware;
1348
                version_tmp.BL_Firmware = UART_VersionInfo.BL_Firmware;
1140
                version_tmp.Flags = 0;
1349
                version_tmp.Flags = 0;
1141
                version_tmp.Reserved1 = 0;
1350
                version_tmp.LabelTextCRC = 0;//UART_VersionInfo.DebugTextCRC;
1142
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'V', NC_ADDRESS,1, (u8 *)&version_tmp, sizeof(version_tmp));
1351
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'V', NC_ADDRESS,1, (u8 *)&version_tmp, sizeof(version_tmp));
1143
                UART1_Request_VersionInfo = FALSE;
1352
                UART1_Request_VersionInfo = FALSE;
1144
        }
1353
        }
1145
        else if(UART1_Request_VersionInfo == 2 && (UART1_tx_buffer.Locked == FALSE)) // get NC-Versions
1354
        else if(UART1_Request_VersionInfo == 2 && (UART1_tx_buffer.Locked == FALSE)) // get NC-Versions
1146
        {
1355
        {