101,7 → 101,7 |
NaviData_Flags_t NaviData_Flags; |
NaviData_Tiny_t NaviData_Tiny; |
NaviData_Pos_t NaviData_Failsafe; |
NaviData_Pos_t NaviData_Out1Trigger; |
NaviData_Out_t NaviData_Out1Trigger; |
NaviData_t NaviData; |
|
u8 UART1_Request_VersionInfo = FALSE; |
968,12 → 968,22 |
*/ |
} |
|
u16 SendTriggerPos(void) |
{ |
u16 sent = 0; |
NaviData_Out1Trigger.Index = 18; |
sent = MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Out1Trigger, sizeof(NaviData_Out1Trigger)) + 1; |
Out1TriggerUpdateNewData = 0; |
// BeepTime = 50; // beep |
return(sent); |
} |
|
|
u16 TransmitNavigationData(u16 MaxBytesPerSecond, u8 clear) // returns the minumum pause time in ms |
{ |
static u8 state = 0, count_flags = 2, count_target = 3, count_home = 4, count_wp = 5 , count_tiny = 6, count_fs = 7; |
static u16 CRC_Home = 0, CRC_Target = 0, CRC_Flags = 0, CRC_Wp = 0, CRC_Fs = 0, CRC_Out; |
u16 pause, sent = 0, crc_home, crc_target, crc_flags, crc_wp, crc_fs, crc_out; |
static u16 CRC_Home = 0, CRC_Target = 0, CRC_Flags = 0, CRC_Wp = 0, CRC_Fs = 0; |
u16 pause, sent = 0, crc_home, crc_target, crc_flags, crc_wp, crc_fs; |
|
if(clear) |
{ |
987,10 → 997,14 |
} |
while(!sent) |
{ |
// 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 |
// sent += SendTriggerPos(); // dann passen die 35 Bytes noch ohne Verzögerung |
|
switch(state++) |
{ |
case 0: |
case 6: |
case 5: |
// belegt 35 ASCII-Zeichen |
NaviData_Flags.Index = 11; |
NaviData_Flags.ActualLongitude = NaviData.CurrentPosition.Longitude; |
1058,7 → 1072,7 |
break; |
case 3: |
case 9: |
// 39 ASCII-Zeichen |
// 35 ASCII-Zeichen |
NaviData_Failsafe.Index = 17; |
NaviData_Failsafe.ActualLongitude = NaviData.CurrentPosition.Longitude; |
NaviData_Failsafe.ActualLatitude = NaviData.CurrentPosition.Latitude; |
1067,7 → 1081,6 |
NaviData_Failsafe.OSDStatusFlags = (FC.StatusFlags & OSD_FLAG_MASK1) | (FC.StatusFlags2 & OSD_FLAG_MASK2); |
NaviData_Failsafe.Longitude = GPS_FailsafePosition.Longitude; |
NaviData_Failsafe.Latitude = GPS_FailsafePosition.Latitude; |
NaviData_Failsafe.Altitude = GPS_FailsafePosition.Altitude; |
crc_fs = CRC16((unsigned char*)(&NaviData_Failsafe.Longitude), sizeof(NaviData_Pos_t) - START_PAYLOAD_DATA); // update crc for the license structure |
if((crc_fs != CRC_Fs) || (--count_fs == 0)) |
{ |
1096,25 → 1109,7 |
count_home = 25; |
} |
break; |
case 5: |
case 11: |
case 13: |
// 39 ASCII-Zeichen |
NaviData_Out1Trigger.Index = 18; |
NaviData_Out1Trigger.ActualLongitude = NaviData.CurrentPosition.Longitude; |
NaviData_Out1Trigger.ActualLatitude = NaviData.CurrentPosition.Latitude; |
NaviData_Out1Trigger.Altimeter = NaviData.Altimeter; |
NaviData_Out1Trigger.GroundSpeed = NaviData.GroundSpeed / 10; |
NaviData_Out1Trigger.OSDStatusFlags = (FC.StatusFlags & OSD_FLAG_MASK1) | (FC.StatusFlags2 & OSD_FLAG_MASK2); |
crc_out = CRC16((unsigned char*)(&NaviData_Out1Trigger.Longitude), sizeof(NaviData_Pos_t) - START_PAYLOAD_DATA); // update crc for the license structure |
if((crc_out != CRC_Out)) |
{ |
sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Out1Trigger, sizeof(NaviData_Out1Trigger)) + 1; |
CRC_Out = crc_out; |
DebugOut.Analog[17]++; |
} |
break; |
case 12: |
case 11: |
// belegt 39 ASCII-Zeichen |
NaviData_Deviation.Index = 14; |
NaviData_Deviation.ActualLongitude = NaviData.CurrentPosition.Longitude; |
1132,7 → 1127,7 |
NaviData_Deviation.SatsInUse = NaviData.SatsInUse; |
sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Deviation, sizeof(NaviData_Deviation)) + 1; |
break; |
case 14: |
case 12: |
// belegt 43 ASCII-Zeichen |
NaviData_Volatile.Index = 16; |
NaviData_Volatile.ActualLongitude = NaviData.CurrentPosition.Longitude; |
1150,7 → 1145,7 |
NaviData_Volatile.SetpointAltitude = NaviData.SetpointAltitude; |
sent += MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'O', NC_ADDRESS, 1 , (u8 *)&NaviData_Volatile, sizeof(NaviData_Volatile)) + 1; |
break; |
case 15: |
case 13: |
// belegt 27 ASCII-Zeichen |
NaviData_Tiny.Index = 10; |
NaviData_Tiny.ActualLongitude = NaviData.CurrentPosition.Longitude; |
1170,7 → 1165,6 |
} |
pause = (sent * 1000) / MaxBytesPerSecond; |
|
UART1_NaviData_Timer = SetDelay(UART1_NaviData_Interval); |
UART1_Request_NaviData = FALSE; |
LastTransmittedFCStatusFlags2 = NaviData.FCStatusFlags2; |
return(pause); |
1266,6 → 1260,12 |
MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'B', NC_ADDRESS, 1,(u8 *)&UART1_ExternalControlConfirmFrame, sizeof(UART1_ExternalControlConfirmFrame)); |
UART1_ExternalControlConfirmFrame = 0; |
} |
else |
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 |
{ |
//sent += |
SendTriggerPos(); // dann passen die 35 Bytes noch ohne Verzögerung |
} |
else if(( ((UART1_NaviData_Interval > 0) && CheckDelay(UART1_NaviData_Timer) ) || UART1_Request_NaviData) && (UART1_tx_buffer.Locked == FALSE)) |
{ |
u16 time = 0; |