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