Subversion Repositories NaviCtrl

Compare Revisions

Ignore whitespace Rev 619 → Rev 620

/trunk/uart1.c
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;