Subversion Repositories NaviCtrl

Rev

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

Rev 599 Rev 608
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_Pos_t NaviData_Failsafe;
-
 
104
NaviData_Pos_t NaviData_Out1Trigger;
104
NaviData_t NaviData;
105
NaviData_t NaviData;
Line 105... Line 106...
105
 
106
 
106
u8 UART1_Request_VersionInfo    = FALSE;
107
u8 UART1_Request_VersionInfo    = FALSE;
107
u8 UART1_Request_ExternalControl= FALSE;
108
u8 UART1_Request_ExternalControl= FALSE;
Line 969... Line 970...
969
 
970
 
970
 
971
 
971
u16 TransmitNavigationData(u16 MaxBytesPerSecond, u8 clear) // returns the minumum pause time in ms
972
u16 TransmitNavigationData(u16 MaxBytesPerSecond, u8 clear) // returns the minumum pause time in ms
972
{
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 u8 state = 0, count_flags = 2, count_target = 3, count_home = 4, count_wp = 5 , count_tiny = 6, count_fs = 7;
Line 974... Line 975...
974
static u16 CRC_Home = 0, CRC_Target = 0, CRC_Flags = 0, CRC_Wp = 0, CRC_Fs = 0;
975
static u16 CRC_Home = 0, CRC_Target = 0, CRC_Flags = 0, CRC_Wp = 0, CRC_Fs = 0, CRC_Out;
975
u16 pause, sent = 0, crc_home, crc_target, crc_flags, crc_wp, crc_fs;
976
u16 pause, sent = 0, crc_home, crc_target, crc_flags, crc_wp, crc_fs, crc_out;
976
 
977
 
977
 if(clear)
978
 if(clear)
Line 987... Line 988...
987
while(!sent)
988
while(!sent)
988
 {
989
 {
989
                switch(state++)
990
                switch(state++)
990
                {
991
                {
991
                 case 0:
992
                 case 0:
992
                 case 5:
993
                 case 6:
993
// belegt 35 ASCII-Zeichen
994
// belegt 35 ASCII-Zeichen
994
                                NaviData_Flags.Index = 11;
995
                                NaviData_Flags.Index = 11;
995
                                NaviData_Flags.ActualLongitude = NaviData.CurrentPosition.Longitude;
996
                                NaviData_Flags.ActualLongitude = NaviData.CurrentPosition.Longitude;
996
                                NaviData_Flags.ActualLatitude = NaviData.CurrentPosition.Latitude;
997
                                NaviData_Flags.ActualLatitude = NaviData.CurrentPosition.Latitude;
997
                                NaviData_Flags.Altimeter = NaviData.Altimeter;
998
                                NaviData_Flags.Altimeter = NaviData.Altimeter;
Line 1012... Line 1013...
1012
                                 CRC_Flags = crc_flags;
1013
                                 CRC_Flags = crc_flags;
1013
                                 count_flags = 11*2;
1014
                                 count_flags = 11*2;
1014
                                }
1015
                                }
1015
                                break;
1016
                                break;
1016
                 case 1:
1017
                 case 1:
1017
                 case 6:
1018
                 case 7:
1018
// belegt 43 ASCII-Zeichen
1019
// belegt 43 ASCII-Zeichen
1019
                                NaviData_Target.Index = 12;
1020
                                NaviData_Target.Index = 12;
1020
                                NaviData_Target.ActualLongitude = NaviData.CurrentPosition.Longitude;
1021
                                NaviData_Target.ActualLongitude = NaviData.CurrentPosition.Longitude;
1021
                                NaviData_Target.ActualLatitude = NaviData.CurrentPosition.Latitude;
1022
                                NaviData_Target.ActualLatitude = NaviData.CurrentPosition.Latitude;
1022
                                NaviData_Target.Altimeter = NaviData.Altimeter;
1023
                                NaviData_Target.Altimeter = NaviData.Altimeter;
Line 1033... Line 1034...
1033
                                 CRC_Target = crc_target;
1034
                                 CRC_Target = crc_target;
1034
                                 count_target = 10*2;
1035
                                 count_target = 10*2;
1035
                                }
1036
                                }
1036
                                break;
1037
                                break;
1037
                 case 2:
1038
                 case 2:
1038
                 case 7:
1039
                 case 8:
1039
// belegt 31 ASCII-Zeichen
1040
// belegt 31 ASCII-Zeichen
1040
                                NaviData_WP.Index = 15;
1041
                                NaviData_WP.Index = 15;
1041
                                NaviData_WP.ActualLongitude = NaviData.CurrentPosition.Longitude;
1042
                                NaviData_WP.ActualLongitude = NaviData.CurrentPosition.Longitude;
1042
                                NaviData_WP.ActualLatitude = NaviData.CurrentPosition.Latitude;
1043
                                NaviData_WP.ActualLatitude = NaviData.CurrentPosition.Latitude;
1043
                                NaviData_WP.Altimeter = NaviData.Altimeter;
1044
                                NaviData_WP.Altimeter = NaviData.Altimeter;
Line 1054... Line 1055...
1054
                                 CRC_Wp = crc_wp;
1055
                                 CRC_Wp = crc_wp;
1055
                                 count_wp = 12*2;
1056
                                 count_wp = 12*2;
1056
                                }
1057
                                }
1057
                                break;
1058
                                break;
1058
                 case 3:
1059
                 case 3:
1059
                 case 8:
1060
                 case 9:
-
 
1061
// 39 ASCII-Zeichen
1060
                                NaviData_Failsafe.Index = 17;
1062
                                NaviData_Failsafe.Index = 17;
1061
                                NaviData_Failsafe.ActualLongitude = NaviData.CurrentPosition.Longitude;
1063
                                NaviData_Failsafe.ActualLongitude = NaviData.CurrentPosition.Longitude;
1062
                                NaviData_Failsafe.ActualLatitude = NaviData.CurrentPosition.Latitude;
1064
                                NaviData_Failsafe.ActualLatitude = NaviData.CurrentPosition.Latitude;
1063
                                NaviData_Failsafe.Altimeter = NaviData.Altimeter;
1065
                                NaviData_Failsafe.Altimeter = NaviData.Altimeter;
1064
                                NaviData_Failsafe.GroundSpeed = NaviData.GroundSpeed / 10;
1066
                                NaviData_Failsafe.GroundSpeed = NaviData.GroundSpeed / 10;
1065
                                NaviData_Failsafe.OSDStatusFlags = (FC.StatusFlags & OSD_FLAG_MASK1) | (FC.StatusFlags2 & OSD_FLAG_MASK2);
1067
                                NaviData_Failsafe.OSDStatusFlags = (FC.StatusFlags & OSD_FLAG_MASK1) | (FC.StatusFlags2 & OSD_FLAG_MASK2);
1066
                                NaviData_Failsafe.FailsafeLongitude = GPS_FailsafePosition.Longitude;
1068
                                NaviData_Failsafe.Longitude = GPS_FailsafePosition.Longitude;
1067
                                NaviData_Failsafe.FailsafeLatitude = GPS_FailsafePosition.Latitude;
1069
                                NaviData_Failsafe.Latitude = GPS_FailsafePosition.Latitude;
1068
                                NaviData_Failsafe.FailsafeAltitude = GPS_FailsafePosition.Altitude;
1070
                                NaviData_Failsafe.Altitude = 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
1071
                                crc_fs = CRC16((unsigned char*)(&NaviData_Failsafe.Longitude), sizeof(NaviData_Pos_t) - START_PAYLOAD_DATA); // update crc for the license structure
1070
                                if((crc_fs != CRC_Fs) || (--count_fs == 0))
1072
                                if((crc_fs != CRC_Fs) || (--count_fs == 0))
1071
                                {
1073
                                {
1072
                                 sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Failsafe, sizeof(NaviData_Failsafe)) + 1;
1074
                                 sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Failsafe, sizeof(NaviData_Failsafe)) + 1;
1073
                                 CRC_Fs = crc_fs;
1075
                                 CRC_Fs = crc_fs;
1074
                                 count_fs = 20*2;
1076
                                 count_fs = 20*2;
1075
                                }
1077
                                }
1076
                                break;
1078
                                break;
1077
                 case 4:
1079
                 case 4:
1078
                 case 9:
1080
                 case 10:
1079
// belegt 43 ASCII-Zeichen
1081
// belegt 43 ASCII-Zeichen
1080
                                NaviData_Home.Index = 13;
1082
                                NaviData_Home.Index = 13;
1081
                                NaviData_Home.ActualLongitude = NaviData.CurrentPosition.Longitude;
1083
                                NaviData_Home.ActualLongitude = NaviData.CurrentPosition.Longitude;
1082
                                NaviData_Home.ActualLatitude = NaviData.CurrentPosition.Latitude;
1084
                                NaviData_Home.ActualLatitude = NaviData.CurrentPosition.Latitude;
1083
                                NaviData_Home.Altimeter = NaviData.Altimeter;
1085
                                NaviData_Home.Altimeter = NaviData.Altimeter;
Line 1092... Line 1094...
1092
                                 sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Home, sizeof(NaviData_Home)) + 1;
1094
                                 sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Home, sizeof(NaviData_Home)) + 1;
1093
                                 CRC_Home = crc_home;
1095
                                 CRC_Home = crc_home;
1094
                                 count_home = 25;
1096
                                 count_home = 25;
1095
                                }
1097
                                }
1096
                                break;
1098
                                break;
-
 
1099
                 case 5:
-
 
1100
                 case 11:
1097
                 case 10:
1101
                 case 13:
-
 
1102
// 39 ASCII-Zeichen
-
 
1103
                                NaviData_Out1Trigger.Index = 18;
-
 
1104
                                NaviData_Out1Trigger.ActualLongitude = NaviData.CurrentPosition.Longitude;
-
 
1105
                                NaviData_Out1Trigger.ActualLatitude = NaviData.CurrentPosition.Latitude;
-
 
1106
                                NaviData_Out1Trigger.Altimeter = NaviData.Altimeter;
-
 
1107
                                NaviData_Out1Trigger.GroundSpeed = NaviData.GroundSpeed / 10;
-
 
1108
                                NaviData_Out1Trigger.OSDStatusFlags = (FC.StatusFlags & OSD_FLAG_MASK1) | (FC.StatusFlags2 & OSD_FLAG_MASK2);
-
 
1109
                                crc_out = CRC16((unsigned char*)(&NaviData_Out1Trigger.Longitude), sizeof(NaviData_Pos_t) - START_PAYLOAD_DATA); // update crc for the license structure
-
 
1110
                                if((crc_out != CRC_Out))
-
 
1111
                                {
-
 
1112
                                 sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Out1Trigger, sizeof(NaviData_Out1Trigger)) + 1;
-
 
1113
                                 CRC_Out = crc_out;
-
 
1114
DebugOut.Analog[17]++;
-
 
1115
                                }
-
 
1116
                                break;
-
 
1117
                 case 12:
1098
// belegt 39 ASCII-Zeichen
1118
// belegt 39 ASCII-Zeichen
1099
                                NaviData_Deviation.Index = 14;
1119
                                NaviData_Deviation.Index = 14;
1100
                                NaviData_Deviation.ActualLongitude = NaviData.CurrentPosition.Longitude;
1120
                                NaviData_Deviation.ActualLongitude = NaviData.CurrentPosition.Longitude;
1101
                                NaviData_Deviation.ActualLatitude = NaviData.CurrentPosition.Latitude;
1121
                                NaviData_Deviation.ActualLatitude = NaviData.CurrentPosition.Latitude;
1102
                                NaviData_Deviation.Altimeter = NaviData.Altimeter;
1122
                                NaviData_Deviation.Altimeter = NaviData.Altimeter;
Line 1110... Line 1130...
1110
                                NaviData_Deviation.AngleNick = NaviData.AngleNick;
1130
                                NaviData_Deviation.AngleNick = NaviData.AngleNick;
1111
                                NaviData_Deviation.AngleRoll = NaviData.AngleRoll;
1131
                                NaviData_Deviation.AngleRoll = NaviData.AngleRoll;
1112
                                NaviData_Deviation.SatsInUse = NaviData.SatsInUse;
1132
                                NaviData_Deviation.SatsInUse = NaviData.SatsInUse;
1113
                            sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Deviation, sizeof(NaviData_Deviation)) + 1;
1133
                            sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Deviation, sizeof(NaviData_Deviation)) + 1;
1114
                                break;
1134
                                break;
1115
                 case 11:
1135
                 case 14:
1116
// belegt 43 ASCII-Zeichen
1136
// belegt 43 ASCII-Zeichen
1117
                                NaviData_Volatile.Index = 16;
1137
                                NaviData_Volatile.Index = 16;
1118
                                NaviData_Volatile.ActualLongitude = NaviData.CurrentPosition.Longitude;
1138
                                NaviData_Volatile.ActualLongitude = NaviData.CurrentPosition.Longitude;
1119
                                NaviData_Volatile.ActualLatitude = NaviData.CurrentPosition.Latitude;
1139
                                NaviData_Volatile.ActualLatitude = NaviData.CurrentPosition.Latitude;
1120
                                NaviData_Volatile.Altimeter = NaviData.Altimeter;
1140
                                NaviData_Volatile.Altimeter = NaviData.Altimeter;
Line 1128... Line 1148...
1128
                                NaviData_Volatile.CompassHeading = NaviData.CompassHeading / 2;
1148
                                NaviData_Volatile.CompassHeading = NaviData.CompassHeading / 2;
1129
                                NaviData_Volatile.Gas = NaviData.Gas;
1149
                                NaviData_Volatile.Gas = NaviData.Gas;
1130
                                NaviData_Volatile.SetpointAltitude = NaviData.SetpointAltitude;
1150
                                NaviData_Volatile.SetpointAltitude = NaviData.SetpointAltitude;
1131
                                sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Volatile, sizeof(NaviData_Volatile)) + 1;
1151
                                sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Volatile, sizeof(NaviData_Volatile)) + 1;
1132
                        break;
1152
                        break;
1133
                 case 12:
1153
                 case 15:
1134
// belegt 27 ASCII-Zeichen
1154
// belegt 27 ASCII-Zeichen
1135
                                NaviData_Tiny.Index = 10;
1155
                                NaviData_Tiny.Index = 10;
1136
                                NaviData_Tiny.ActualLongitude = NaviData.CurrentPosition.Longitude;
1156
                                NaviData_Tiny.ActualLongitude = NaviData.CurrentPosition.Longitude;
1137
                                NaviData_Tiny.ActualLatitude = NaviData.CurrentPosition.Latitude;
1157
                                NaviData_Tiny.ActualLatitude = NaviData.CurrentPosition.Latitude;
1138
                                NaviData_Tiny.Altimeter = NaviData.Altimeter;
1158
                                NaviData_Tiny.Altimeter = NaviData.Altimeter;
1139
                                NaviData_Tiny.GroundSpeed = NaviData.GroundSpeed / 10;
1159
                                NaviData_Tiny.GroundSpeed = NaviData.GroundSpeed / 10;
1140
                                NaviData_Tiny.OSDStatusFlags = (FC.StatusFlags & OSD_FLAG_MASK1) | (FC.StatusFlags2 & OSD_FLAG_MASK2);
1160
                                NaviData_Tiny.OSDStatusFlags = (FC.StatusFlags & OSD_FLAG_MASK1) | (FC.StatusFlags2 & OSD_FLAG_MASK2);
1141
                                if(--count_tiny == 0)
1161
                                if(--count_tiny == 0)
1142
                                 {
1162
                                 {
1143
                                        sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Tiny, sizeof(NaviData_Tiny)) + 1;
1163
                                        sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Tiny, sizeof(NaviData_Tiny)) + 1;
1144
                                        count_tiny = 60;
1164
                                        count_tiny = 200; // just to make sure that it comes sometimes
1145
                                 }
1165
                                 }
1146
                        break;
1166
                        break;
1147
                 default: state = 0;
1167
                 default: state = 0;
1148
                                break;
1168
                                break;
1149
                }
1169
                }
Line 1263... Line 1283...
1263
// Wert =  50 -> Sekunden laufen in 2 s-Abstand (im Wegpunkteflug mit aktivem Countdown in 3-4s)
1283
// Wert =  50 -> Sekunden laufen in 2 s-Abstand (im Wegpunkteflug mit aktivem Countdown in 3-4s)
1264
// Wert = 100 -> Sekunden laufen in 1-2 s-Abstand (im Wegpunkteflug mit aktivem Countdown in 2s)
1284
// Wert = 100 -> Sekunden laufen in 1-2 s-Abstand (im Wegpunkteflug mit aktivem Countdown in 2s)
1265
// Wert = 150 -> Sekunden laufen flüssig (im Wegpunkteflug mit aktivem Countdown und gleichzeitig Target verschieben manchmal in 2s)
1285
// Wert = 150 -> Sekunden laufen flüssig (im Wegpunkteflug mit aktivem Countdown und gleichzeitig Target verschieben manchmal in 2s)
1266
// Wert = 200 -> Sekunden laufen flüssig
1286
// Wert = 200 -> Sekunden laufen flüssig
1267
// Wert >= 250 -> optimal 
1287
// Wert >= 250 -> optimal 
1268
//UART1_NaviData_MaxBytes = 250;
1288
//UART1_NaviData_MaxBytes = 45;
1269
            time = TransmitNavigationData(UART1_NaviData_MaxBytes,0);
1289
            time = TransmitNavigationData(UART1_NaviData_MaxBytes,0);
1270
                if(UART1_NaviData_Interval > time) time = UART1_NaviData_Interval;
1290
                if(UART1_NaviData_Interval > time) time = UART1_NaviData_Interval;
1271
                UART1_NaviData_Timer = SetDelay(time);
1291
                UART1_NaviData_Timer = SetDelay(time);
1272
           }
1292
           }
1273
        UART1_Request_NaviData = FALSE;
1293
        UART1_Request_NaviData = FALSE;