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; |