Rev 608 | Rev 622 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 608 | Rev 620 | ||
---|---|---|---|
Line 99... | Line 99... | ||
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_Pos_t NaviData_Failsafe; |
103 | NaviData_Pos_t NaviData_Failsafe; |
104 | NaviData_Pos_t NaviData_Out1Trigger; |
104 | NaviData_Out_t NaviData_Out1Trigger; |
105 | NaviData_t NaviData; |
105 | NaviData_t NaviData; |
Line 106... | Line 106... | ||
106 | 106 | ||
107 | u8 UART1_Request_VersionInfo = FALSE; |
107 | u8 UART1_Request_VersionInfo = FALSE; |
108 | u8 UART1_Request_ExternalControl= FALSE; |
108 | u8 UART1_Request_ExternalControl= FALSE; |
Line 966... | Line 966... | ||
966 | i2 = abs(GPSData.Position.Longitude)%10000000L; |
966 | i2 = abs(GPSData.Position.Longitude)%10000000L; |
Line 967... | Line 967... | ||
967 | 967 | ||
968 | */ |
968 | */ |
Line -... | Line 969... | ||
- | 969 | } |
|
- | 970 | ||
- | 971 | u16 SendTriggerPos(void) |
|
- | 972 | { |
|
- | 973 | u16 sent = 0; |
|
- | 974 | NaviData_Out1Trigger.Index = 18; |
|
- | 975 | sent = MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Out1Trigger, sizeof(NaviData_Out1Trigger)) + 1; |
|
- | 976 | Out1TriggerUpdateNewData = 0; |
|
- | 977 | // BeepTime = 50; // beep |
|
- | 978 | return(sent); |
|
Line 969... | Line 979... | ||
969 | } |
979 | } |
970 | 980 | ||
971 | 981 | ||
972 | u16 TransmitNavigationData(u16 MaxBytesPerSecond, u8 clear) // returns the minumum pause time in ms |
982 | u16 TransmitNavigationData(u16 MaxBytesPerSecond, u8 clear) // returns the minumum pause time in ms |
973 | { |
983 | { |
Line 974... | Line 984... | ||
974 | static u8 state = 0, count_flags = 2, count_target = 3, count_home = 4, count_wp = 5 , count_tiny = 6, count_fs = 7; |
984 | static u8 state = 0, count_flags = 2, count_target = 3, count_home = 4, count_wp = 5 , count_tiny = 6, count_fs = 7; |
975 | static u16 CRC_Home = 0, CRC_Target = 0, CRC_Flags = 0, CRC_Wp = 0, CRC_Fs = 0, CRC_Out; |
985 | static u16 CRC_Home = 0, CRC_Target = 0, CRC_Flags = 0, CRC_Wp = 0, CRC_Fs = 0; |
976 | u16 pause, sent = 0, crc_home, crc_target, crc_flags, crc_wp, crc_fs, crc_out; |
986 | u16 pause, sent = 0, crc_home, crc_target, crc_flags, crc_wp, crc_fs; |
977 | 987 | ||
Line 985... | Line 995... | ||
985 | CRC_Fs++; |
995 | CRC_Fs++; |
986 | return(1); |
996 | return(1); |
987 | } |
997 | } |
988 | while(!sent) |
998 | while(!sent) |
989 | { |
999 | { |
- | 1000 | // if(Out1TriggerUpdateNewData && MaxBytesPerSecond > 200) // (only if the data link can transmit more than 200Bytes per secons) -> it wouldn't fit into the data-flow if there are too few bytes available |
|
- | 1001 | // sent += SendTriggerPos(); // dann passen die 35 Bytes noch ohne Verzögerung |
|
- | 1002 | ||
990 | switch(state++) |
1003 | switch(state++) |
991 | { |
1004 | { |
992 | case 0: |
1005 | case 0: |
993 | case 6: |
1006 | case 6: |
- | 1007 | case 5: |
|
994 | // belegt 35 ASCII-Zeichen |
1008 | // belegt 35 ASCII-Zeichen |
995 | NaviData_Flags.Index = 11; |
1009 | NaviData_Flags.Index = 11; |
996 | NaviData_Flags.ActualLongitude = NaviData.CurrentPosition.Longitude; |
1010 | NaviData_Flags.ActualLongitude = NaviData.CurrentPosition.Longitude; |
997 | NaviData_Flags.ActualLatitude = NaviData.CurrentPosition.Latitude; |
1011 | NaviData_Flags.ActualLatitude = NaviData.CurrentPosition.Latitude; |
998 | NaviData_Flags.Altimeter = NaviData.Altimeter; |
1012 | NaviData_Flags.Altimeter = NaviData.Altimeter; |
Line 1056... | Line 1070... | ||
1056 | count_wp = 12*2; |
1070 | count_wp = 12*2; |
1057 | } |
1071 | } |
1058 | break; |
1072 | break; |
1059 | case 3: |
1073 | case 3: |
1060 | case 9: |
1074 | case 9: |
1061 | // 39 ASCII-Zeichen |
1075 | // 35 ASCII-Zeichen |
1062 | NaviData_Failsafe.Index = 17; |
1076 | NaviData_Failsafe.Index = 17; |
1063 | NaviData_Failsafe.ActualLongitude = NaviData.CurrentPosition.Longitude; |
1077 | NaviData_Failsafe.ActualLongitude = NaviData.CurrentPosition.Longitude; |
1064 | NaviData_Failsafe.ActualLatitude = NaviData.CurrentPosition.Latitude; |
1078 | NaviData_Failsafe.ActualLatitude = NaviData.CurrentPosition.Latitude; |
1065 | NaviData_Failsafe.Altimeter = NaviData.Altimeter; |
1079 | NaviData_Failsafe.Altimeter = NaviData.Altimeter; |
1066 | NaviData_Failsafe.GroundSpeed = NaviData.GroundSpeed / 10; |
1080 | NaviData_Failsafe.GroundSpeed = NaviData.GroundSpeed / 10; |
1067 | NaviData_Failsafe.OSDStatusFlags = (FC.StatusFlags & OSD_FLAG_MASK1) | (FC.StatusFlags2 & OSD_FLAG_MASK2); |
1081 | NaviData_Failsafe.OSDStatusFlags = (FC.StatusFlags & OSD_FLAG_MASK1) | (FC.StatusFlags2 & OSD_FLAG_MASK2); |
1068 | NaviData_Failsafe.Longitude = GPS_FailsafePosition.Longitude; |
1082 | NaviData_Failsafe.Longitude = GPS_FailsafePosition.Longitude; |
1069 | NaviData_Failsafe.Latitude = GPS_FailsafePosition.Latitude; |
1083 | NaviData_Failsafe.Latitude = GPS_FailsafePosition.Latitude; |
1070 | NaviData_Failsafe.Altitude = GPS_FailsafePosition.Altitude; |
- | |
1071 | crc_fs = CRC16((unsigned char*)(&NaviData_Failsafe.Longitude), sizeof(NaviData_Pos_t) - START_PAYLOAD_DATA); // update crc for the license structure |
1084 | crc_fs = CRC16((unsigned char*)(&NaviData_Failsafe.Longitude), sizeof(NaviData_Pos_t) - START_PAYLOAD_DATA); // update crc for the license structure |
1072 | if((crc_fs != CRC_Fs) || (--count_fs == 0)) |
1085 | if((crc_fs != CRC_Fs) || (--count_fs == 0)) |
1073 | { |
1086 | { |
1074 | sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Failsafe, sizeof(NaviData_Failsafe)) + 1; |
1087 | sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Failsafe, sizeof(NaviData_Failsafe)) + 1; |
1075 | CRC_Fs = crc_fs; |
1088 | CRC_Fs = crc_fs; |
Line 1094... | Line 1107... | ||
1094 | sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Home, sizeof(NaviData_Home)) + 1; |
1107 | sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Home, sizeof(NaviData_Home)) + 1; |
1095 | CRC_Home = crc_home; |
1108 | CRC_Home = crc_home; |
1096 | count_home = 25; |
1109 | count_home = 25; |
1097 | } |
1110 | } |
1098 | break; |
1111 | break; |
1099 | case 5: |
- | |
1100 | case 11: |
1112 | case 11: |
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: |
- | |
1118 | // belegt 39 ASCII-Zeichen |
1113 | // belegt 39 ASCII-Zeichen |
1119 | NaviData_Deviation.Index = 14; |
1114 | NaviData_Deviation.Index = 14; |
1120 | NaviData_Deviation.ActualLongitude = NaviData.CurrentPosition.Longitude; |
1115 | NaviData_Deviation.ActualLongitude = NaviData.CurrentPosition.Longitude; |
1121 | NaviData_Deviation.ActualLatitude = NaviData.CurrentPosition.Latitude; |
1116 | NaviData_Deviation.ActualLatitude = NaviData.CurrentPosition.Latitude; |
1122 | NaviData_Deviation.Altimeter = NaviData.Altimeter; |
1117 | NaviData_Deviation.Altimeter = NaviData.Altimeter; |
Line 1130... | Line 1125... | ||
1130 | NaviData_Deviation.AngleNick = NaviData.AngleNick; |
1125 | NaviData_Deviation.AngleNick = NaviData.AngleNick; |
1131 | NaviData_Deviation.AngleRoll = NaviData.AngleRoll; |
1126 | NaviData_Deviation.AngleRoll = NaviData.AngleRoll; |
1132 | NaviData_Deviation.SatsInUse = NaviData.SatsInUse; |
1127 | NaviData_Deviation.SatsInUse = NaviData.SatsInUse; |
1133 | sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Deviation, sizeof(NaviData_Deviation)) + 1; |
1128 | sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Deviation, sizeof(NaviData_Deviation)) + 1; |
1134 | break; |
1129 | break; |
1135 | case 14: |
1130 | case 12: |
1136 | // belegt 43 ASCII-Zeichen |
1131 | // belegt 43 ASCII-Zeichen |
1137 | NaviData_Volatile.Index = 16; |
1132 | NaviData_Volatile.Index = 16; |
1138 | NaviData_Volatile.ActualLongitude = NaviData.CurrentPosition.Longitude; |
1133 | NaviData_Volatile.ActualLongitude = NaviData.CurrentPosition.Longitude; |
1139 | NaviData_Volatile.ActualLatitude = NaviData.CurrentPosition.Latitude; |
1134 | NaviData_Volatile.ActualLatitude = NaviData.CurrentPosition.Latitude; |
1140 | NaviData_Volatile.Altimeter = NaviData.Altimeter; |
1135 | NaviData_Volatile.Altimeter = NaviData.Altimeter; |
Line 1148... | Line 1143... | ||
1148 | NaviData_Volatile.CompassHeading = NaviData.CompassHeading / 2; |
1143 | NaviData_Volatile.CompassHeading = NaviData.CompassHeading / 2; |
1149 | NaviData_Volatile.Gas = NaviData.Gas; |
1144 | NaviData_Volatile.Gas = NaviData.Gas; |
1150 | NaviData_Volatile.SetpointAltitude = NaviData.SetpointAltitude; |
1145 | NaviData_Volatile.SetpointAltitude = NaviData.SetpointAltitude; |
1151 | sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Volatile, sizeof(NaviData_Volatile)) + 1; |
1146 | sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Volatile, sizeof(NaviData_Volatile)) + 1; |
1152 | break; |
1147 | break; |
1153 | case 15: |
1148 | case 13: |
1154 | // belegt 27 ASCII-Zeichen |
1149 | // belegt 27 ASCII-Zeichen |
1155 | NaviData_Tiny.Index = 10; |
1150 | NaviData_Tiny.Index = 10; |
1156 | NaviData_Tiny.ActualLongitude = NaviData.CurrentPosition.Longitude; |
1151 | NaviData_Tiny.ActualLongitude = NaviData.CurrentPosition.Longitude; |
1157 | NaviData_Tiny.ActualLatitude = NaviData.CurrentPosition.Latitude; |
1152 | NaviData_Tiny.ActualLatitude = NaviData.CurrentPosition.Latitude; |
1158 | NaviData_Tiny.Altimeter = NaviData.Altimeter; |
1153 | NaviData_Tiny.Altimeter = NaviData.Altimeter; |
Line 1168... | Line 1163... | ||
1168 | break; |
1163 | break; |
1169 | } |
1164 | } |
1170 | } |
1165 | } |
1171 | pause = (sent * 1000) / MaxBytesPerSecond; |
1166 | pause = (sent * 1000) / MaxBytesPerSecond; |
Line 1172... | Line -... | ||
1172 | - | ||
1173 | UART1_NaviData_Timer = SetDelay(UART1_NaviData_Interval); |
1167 | |
1174 | UART1_Request_NaviData = FALSE; |
1168 | UART1_Request_NaviData = FALSE; |
1175 | LastTransmittedFCStatusFlags2 = NaviData.FCStatusFlags2; |
1169 | LastTransmittedFCStatusFlags2 = NaviData.FCStatusFlags2; |
1176 | return(pause); |
1170 | return(pause); |
1177 | // Clear at timeout: |
1171 | // Clear at timeout: |
Line 1264... | Line 1258... | ||
1264 | else if(UART1_ExternalControlConfirmFrame && (UART1_tx_buffer.Locked == FALSE)) |
1258 | else if(UART1_ExternalControlConfirmFrame && (UART1_tx_buffer.Locked == FALSE)) |
1265 | { |
1259 | { |
1266 | MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'B', NC_ADDRESS, 1,(u8 *)&UART1_ExternalControlConfirmFrame, sizeof(UART1_ExternalControlConfirmFrame)); |
1260 | MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'B', NC_ADDRESS, 1,(u8 *)&UART1_ExternalControlConfirmFrame, sizeof(UART1_ExternalControlConfirmFrame)); |
1267 | UART1_ExternalControlConfirmFrame = 0; |
1261 | UART1_ExternalControlConfirmFrame = 0; |
1268 | } |
1262 | } |
- | 1263 | else |
|
- | 1264 | if((UART1_NaviData_Interval > 0) && Out1TriggerUpdateNewData && UART1_NaviData_MaxBytes > 200) // (only if the data link can transmit more than 200Bytes per secons) -> it wouldn't fit into the data-flow if there are too few bytes available |
|
- | 1265 | { |
|
- | 1266 | //sent += |
|
- | 1267 | SendTriggerPos(); // dann passen die 35 Bytes noch ohne Verzögerung |
|
- | 1268 | } |
|
1269 | else if(( ((UART1_NaviData_Interval > 0) && CheckDelay(UART1_NaviData_Timer) ) || UART1_Request_NaviData) && (UART1_tx_buffer.Locked == FALSE)) |
1269 | else if(( ((UART1_NaviData_Interval > 0) && CheckDelay(UART1_NaviData_Timer) ) || UART1_Request_NaviData) && (UART1_tx_buffer.Locked == FALSE)) |
1270 | { |
1270 | { |
1271 | u16 time = 0; |
1271 | u16 time = 0; |
1272 | //UART1_NaviData_MaxBytes = 250; |
1272 | //UART1_NaviData_MaxBytes = 250; |
1273 | if(UART1_NaviData_MaxBytes == 0) // Transmit the big NC Data frame |
1273 | if(UART1_NaviData_MaxBytes == 0) // Transmit the big NC Data frame |