Subversion Repositories NaviCtrl

Rev

Rev 608 | 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