Subversion Repositories NaviCtrl

Rev

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

Rev 598 Rev 599
Line 98... Line 98...
98
NaviData_Deviation_t NaviData_Deviation;
98
NaviData_Deviation_t NaviData_Deviation;
99
NaviData_Home_t NaviData_Home;
99
NaviData_Home_t NaviData_Home;
100
NaviData_Target_t NaviData_Target;
100
NaviData_Target_t NaviData_Target;
101
NaviData_Flags_t NaviData_Flags;
101
NaviData_Flags_t NaviData_Flags;
102
NaviData_Tiny_t NaviData_Tiny;
102
NaviData_Tiny_t NaviData_Tiny;
-
 
103
NaviData_Failsafe_t NaviData_Failsafe;
103
NaviData_t NaviData;
104
NaviData_t NaviData;
Line 104... Line 105...
104
 
105
 
105
u8 UART1_Request_VersionInfo    = FALSE;
106
u8 UART1_Request_VersionInfo    = FALSE;
106
u8 UART1_Request_ExternalControl= FALSE;
107
u8 UART1_Request_ExternalControl= FALSE;
Line 965... Line 966...
965
 
966
 
966
*/
967
*/
Line 967... Line 968...
967
}
968
}
968
 
969
 
969
 
970
 
970
u16 TransmitNavigationData(u16 MaxBytesPerSecond) // returns the minumum pause time in ms
971
u16 TransmitNavigationData(u16 MaxBytesPerSecond, u8 clear) // returns the minumum pause time in ms
971
{
972
{
Line -... Line 973...
-
 
973
static u8 state = 0, count_flags = 2, count_target = 3, count_home = 4, count_wp = 5 , count_tiny = 6, count_fs = 7;
-
 
974
static u16 CRC_Home = 0, CRC_Target = 0, CRC_Flags = 0, CRC_Wp = 0, CRC_Fs = 0;
-
 
975
u16 pause, sent = 0, crc_home, crc_target, crc_flags, crc_wp, crc_fs;
-
 
976
 
-
 
977
 if(clear)
-
 
978
 {
-
 
979
        state = 0;
-
 
980
        CRC_Home++;
-
 
981
        CRC_Target++;
-
 
982
        CRC_Flags++;
972
static u8 state = 0, count_flags = 2, count_target = 3, count_home = 4, count_wp = 5 , count_tiny = 6;
983
        CRC_Wp++;
973
static u16 CRC_Home = 0, CRC_Target = 0, CRC_Flags = 0, CRC_Wp = 0;
984
        CRC_Fs++;
974
u16 pause, sent = 0, crc_home = 0xff, crc_target = 0xff, crc_flags = 0xff, crc_wp = 0xff;
985
        return(1);
975
 
986
 }
976
while(!sent)
987
while(!sent)
977
 {
988
 {
978
                switch(state++)
989
                switch(state++)
979
                {
990
                {
980
                 case 0:
991
                 case 0:
981
                 case 4:
992
                 case 5:
982
// belegt 35 ASCII-Zeichen
993
// belegt 35 ASCII-Zeichen
Line 1001... Line 1012...
1001
                                 CRC_Flags = crc_flags;
1012
                                 CRC_Flags = crc_flags;
1002
                                 count_flags = 11*2;
1013
                                 count_flags = 11*2;
1003
                                }
1014
                                }
1004
                                break;
1015
                                break;
1005
                 case 1:
1016
                 case 1:
1006
                 case 5:
1017
                 case 6:
1007
// belegt 43 ASCII-Zeichen
1018
// belegt 43 ASCII-Zeichen
1008
                                NaviData_Target.Index = 12;
1019
                                NaviData_Target.Index = 12;
1009
                                NaviData_Target.ActualLongitude = NaviData.CurrentPosition.Longitude;
1020
                                NaviData_Target.ActualLongitude = NaviData.CurrentPosition.Longitude;
1010
                                NaviData_Target.ActualLatitude = NaviData.CurrentPosition.Latitude;
1021
                                NaviData_Target.ActualLatitude = NaviData.CurrentPosition.Latitude;
1011
                                NaviData_Target.Altimeter = NaviData.Altimeter;
1022
                                NaviData_Target.Altimeter = NaviData.Altimeter;
Line 1022... Line 1033...
1022
                                 CRC_Target = crc_target;
1033
                                 CRC_Target = crc_target;
1023
                                 count_target = 10*2;
1034
                                 count_target = 10*2;
1024
                                }
1035
                                }
1025
                                break;
1036
                                break;
1026
                 case 2:
1037
                 case 2:
1027
                 case 6:
1038
                 case 7:
1028
// belegt 31 ASCII-Zeichen
1039
// belegt 31 ASCII-Zeichen
1029
                                NaviData_WP.Index = 15;
1040
                                NaviData_WP.Index = 15;
1030
                                NaviData_WP.ActualLongitude = NaviData.CurrentPosition.Longitude;
1041
                                NaviData_WP.ActualLongitude = NaviData.CurrentPosition.Longitude;
1031
                                NaviData_WP.ActualLatitude = NaviData.CurrentPosition.Latitude;
1042
                                NaviData_WP.ActualLatitude = NaviData.CurrentPosition.Latitude;
1032
                                NaviData_WP.Altimeter = NaviData.Altimeter;
1043
                                NaviData_WP.Altimeter = NaviData.Altimeter;
Line 1043... Line 1054...
1043
                                 CRC_Wp = crc_wp;
1054
                                 CRC_Wp = crc_wp;
1044
                                 count_wp = 12*2;
1055
                                 count_wp = 12*2;
1045
                                }
1056
                                }
1046
                                break;
1057
                                break;
1047
                 case 3:
1058
                 case 3:
-
 
1059
                 case 8:
-
 
1060
                                NaviData_Failsafe.Index = 17;
-
 
1061
                                NaviData_Failsafe.ActualLongitude = NaviData.CurrentPosition.Longitude;
-
 
1062
                                NaviData_Failsafe.ActualLatitude = NaviData.CurrentPosition.Latitude;
-
 
1063
                                NaviData_Failsafe.Altimeter = NaviData.Altimeter;
-
 
1064
                                NaviData_Failsafe.GroundSpeed = NaviData.GroundSpeed / 10;
-
 
1065
                                NaviData_Failsafe.OSDStatusFlags = (FC.StatusFlags & OSD_FLAG_MASK1) | (FC.StatusFlags2 & OSD_FLAG_MASK2);
-
 
1066
                                NaviData_Failsafe.FailsafeLongitude = GPS_FailsafePosition.Longitude;
-
 
1067
                                NaviData_Failsafe.FailsafeLatitude = GPS_FailsafePosition.Latitude;
-
 
1068
                                NaviData_Failsafe.FailsafeAltitude = GPS_FailsafePosition.Altitude;
-
 
1069
                                crc_fs = CRC16((unsigned char*)(&NaviData_Failsafe.FailsafeLongitude), sizeof(NaviData_Failsafe_t) - START_PAYLOAD_DATA); // update crc for the license structure
-
 
1070
                                if((crc_fs != CRC_Fs) || (--count_fs == 0))
-
 
1071
                                {
-
 
1072
                                 sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Failsafe, sizeof(NaviData_Failsafe)) + 1;
-
 
1073
                                 CRC_Fs = crc_fs;
-
 
1074
                                 count_fs = 20*2;
-
 
1075
                                }
-
 
1076
                                break;
-
 
1077
                 case 4:
-
 
1078
                 case 9:
1048
// belegt 43 ASCII-Zeichen
1079
// belegt 43 ASCII-Zeichen
1049
                                NaviData_Home.Index = 13;
1080
                                NaviData_Home.Index = 13;
1050
                                NaviData_Home.ActualLongitude = NaviData.CurrentPosition.Longitude;
1081
                                NaviData_Home.ActualLongitude = NaviData.CurrentPosition.Longitude;
1051
                                NaviData_Home.ActualLatitude = NaviData.CurrentPosition.Latitude;
1082
                                NaviData_Home.ActualLatitude = NaviData.CurrentPosition.Latitude;
1052
                                NaviData_Home.Altimeter = NaviData.Altimeter;
1083
                                NaviData_Home.Altimeter = NaviData.Altimeter;
Line 1061... Line 1092...
1061
                                 sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Home, sizeof(NaviData_Home)) + 1;
1092
                                 sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Home, sizeof(NaviData_Home)) + 1;
1062
                                 CRC_Home = crc_home;
1093
                                 CRC_Home = crc_home;
1063
                                 count_home = 25;
1094
                                 count_home = 25;
1064
                                }
1095
                                }
1065
                                break;
1096
                                break;
1066
                 case 7:
1097
                 case 10:
1067
// belegt 39 ASCII-Zeichen
1098
// belegt 39 ASCII-Zeichen
1068
                                NaviData_Deviation.Index = 14;
1099
                                NaviData_Deviation.Index = 14;
1069
                                NaviData_Deviation.ActualLongitude = NaviData.CurrentPosition.Longitude;
1100
                                NaviData_Deviation.ActualLongitude = NaviData.CurrentPosition.Longitude;
1070
                                NaviData_Deviation.ActualLatitude = NaviData.CurrentPosition.Latitude;
1101
                                NaviData_Deviation.ActualLatitude = NaviData.CurrentPosition.Latitude;
1071
                                NaviData_Deviation.Altimeter = NaviData.Altimeter;
1102
                                NaviData_Deviation.Altimeter = NaviData.Altimeter;
Line 1079... Line 1110...
1079
                                NaviData_Deviation.AngleNick = NaviData.AngleNick;
1110
                                NaviData_Deviation.AngleNick = NaviData.AngleNick;
1080
                                NaviData_Deviation.AngleRoll = NaviData.AngleRoll;
1111
                                NaviData_Deviation.AngleRoll = NaviData.AngleRoll;
1081
                                NaviData_Deviation.SatsInUse = NaviData.SatsInUse;
1112
                                NaviData_Deviation.SatsInUse = NaviData.SatsInUse;
1082
                            sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Deviation, sizeof(NaviData_Deviation)) + 1;
1113
                            sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Deviation, sizeof(NaviData_Deviation)) + 1;
1083
                                break;
1114
                                break;
1084
                 case 8:
1115
                 case 11:
1085
// belegt 43 ASCII-Zeichen
1116
// belegt 43 ASCII-Zeichen
1086
                                NaviData_Volatile.Index = 16;
1117
                                NaviData_Volatile.Index = 16;
1087
                                NaviData_Volatile.ActualLongitude = NaviData.CurrentPosition.Longitude;
1118
                                NaviData_Volatile.ActualLongitude = NaviData.CurrentPosition.Longitude;
1088
                                NaviData_Volatile.ActualLatitude = NaviData.CurrentPosition.Latitude;
1119
                                NaviData_Volatile.ActualLatitude = NaviData.CurrentPosition.Latitude;
1089
                                NaviData_Volatile.Altimeter = NaviData.Altimeter;
1120
                                NaviData_Volatile.Altimeter = NaviData.Altimeter;
Line 1094... Line 1125...
1094
                                NaviData_Volatile.UsedCapacity = NaviData.UsedCapacity;
1125
                                NaviData_Volatile.UsedCapacity = NaviData.UsedCapacity;
1095
                                NaviData_Volatile.Variometer = NaviData.Variometer;
1126
                                NaviData_Volatile.Variometer = NaviData.Variometer;
1096
                                NaviData_Volatile.Heading = NaviData.Heading / 2;
1127
                                NaviData_Volatile.Heading = NaviData.Heading / 2;
1097
                                NaviData_Volatile.CompassHeading = NaviData.CompassHeading / 2;
1128
                                NaviData_Volatile.CompassHeading = NaviData.CompassHeading / 2;
1098
                                NaviData_Volatile.Gas = NaviData.Gas;
1129
                                NaviData_Volatile.Gas = NaviData.Gas;
1099
                                NaviData_Volatile.Gas = NaviData.SetpointAltitude;
1130
                                NaviData_Volatile.SetpointAltitude = NaviData.SetpointAltitude;
1100
                                sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Volatile, sizeof(NaviData_Volatile)) + 1;
1131
                                sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Volatile, sizeof(NaviData_Volatile)) + 1;
1101
                        break;
1132
                        break;
1102
 
-
 
1103
                 case 9:
1133
                 case 12:
1104
// belegt 27 ASCII-Zeichen
1134
// belegt 27 ASCII-Zeichen
1105
                                NaviData_Tiny.Index = 10;
1135
                                NaviData_Tiny.Index = 10;
1106
                                NaviData_Tiny.ActualLongitude = NaviData.CurrentPosition.Longitude;
1136
                                NaviData_Tiny.ActualLongitude = NaviData.CurrentPosition.Longitude;
1107
                                NaviData_Tiny.ActualLatitude = NaviData.CurrentPosition.Latitude;
1137
                                NaviData_Tiny.ActualLatitude = NaviData.CurrentPosition.Latitude;
1108
                                NaviData_Tiny.Altimeter = NaviData.Altimeter;
1138
                                NaviData_Tiny.Altimeter = NaviData.Altimeter;
Line 1144... Line 1174...
1144
                UART1_Data3D_Interval = 0;
1174
                UART1_Data3D_Interval = 0;
1145
                UART1_Display_Interval = 0;
1175
                UART1_Display_Interval = 0;
1146
                UART1_MotorData_Interval = 0;
1176
                UART1_MotorData_Interval = 0;
1147
                UART1_NaviData_Timer = SetDelay(500);
1177
                UART1_NaviData_Timer = SetDelay(500);
1148
                UART1_AboTimeOut = SetDelay(100);
1178
                UART1_AboTimeOut = SetDelay(100);
-
 
1179
                TransmitNavigationData(0,1); // clear the CRC values
1149
        }
1180
        }
1150
/*
1181
/*
1151
#define CHK_MIN_INTERVAL(a,b) {if(a && a < b) a = b;}
1182
#define CHK_MIN_INTERVAL(a,b) {if(a && a < b) a = b;}
1152
UART1_NaviData_Interval = 500;
1183
UART1_NaviData_Interval = 500;
1153
CHK_MIN_INTERVAL(UART1_DebugData_Interval,500);
1184
CHK_MIN_INTERVAL(UART1_DebugData_Interval,500);
Line 1216... Line 1247...
1216
                UART1_ExternalControlConfirmFrame = 0;
1247
                UART1_ExternalControlConfirmFrame = 0;
1217
        }
1248
        }
1218
        else if(( ((UART1_NaviData_Interval > 0) && CheckDelay(UART1_NaviData_Timer) ) || UART1_Request_NaviData) && (UART1_tx_buffer.Locked == FALSE))
1249
        else if(( ((UART1_NaviData_Interval > 0) && CheckDelay(UART1_NaviData_Timer) ) || UART1_Request_NaviData) && (UART1_tx_buffer.Locked == FALSE))
1219
        {
1250
        {
1220
          u16 time = 0;
1251
          u16 time = 0;
-
 
1252
//UART1_NaviData_MaxBytes = 250;
1221
      if(UART1_NaviData_MaxBytes == 0) // Transmit the big NC Data frame
1253
      if(UART1_NaviData_MaxBytes == 0) // Transmit the big NC Data frame
1222
           {
1254
           {
1223
                NaviData.Errorcode = ErrorCode;
1255
                NaviData.Errorcode = ErrorCode;
1224
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData, sizeof(NaviData));
1256
                MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData, sizeof(NaviData));
1225
                LastTransmittedFCStatusFlags2 = NaviData.FCStatusFlags2;
1257
                LastTransmittedFCStatusFlags2 = NaviData.FCStatusFlags2;
Line 1232... Line 1264...
1232
// Wert = 100 -> Sekunden laufen in 1-2 s-Abstand (im Wegpunkteflug mit aktivem Countdown in 2s)
1264
// 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)
1265
// 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
1266
// Wert = 200 -> Sekunden laufen flüssig
1235
// Wert >= 250 -> optimal 
1267
// Wert >= 250 -> optimal 
1236
//UART1_NaviData_MaxBytes = 250;
1268
//UART1_NaviData_MaxBytes = 250;
1237
            time = TransmitNavigationData(UART1_NaviData_MaxBytes);
1269
            time = TransmitNavigationData(UART1_NaviData_MaxBytes,0);
1238
                if(UART1_NaviData_Interval > time) time = UART1_NaviData_Interval;
1270
                if(UART1_NaviData_Interval > time) time = UART1_NaviData_Interval;
1239
                UART1_NaviData_Timer = SetDelay(time);
1271
                UART1_NaviData_Timer = SetDelay(time);
1240
           }
1272
           }
1241
        UART1_Request_NaviData = FALSE;
1273
        UART1_Request_NaviData = FALSE;
1242
        }
1274
        }