/trunk/main.c |
---|
239,10 → 239,15 |
else if(CheckDelay(UBX_Timeout)) |
{ |
LED_RED_ON; |
sprintf(ErrorMSG,"no GPS communication "); |
ErrorCode = 5; |
if(!(Parameter.GlobalConfig & FC_CFG_GPS_AKTIV)) sprintf(ErrorMSG,"GPS disconnected "); |
else |
{ |
sprintf(ErrorMSG,"no GPS communication "); |
UART_VersionInfo.HardwareError[0] |= NC_ERROR0_GPS_RX; |
ErrorCode = 5; |
} |
StopNavigation = 1; |
UART_VersionInfo.HardwareError[0] |= NC_ERROR0_GPS_RX; |
// UBX_Timeout = SetDelay(500); |
} |
else if(Compass_Heading < 0) |
{ |
395,7 → 400,7 |
if(SerialLinkOkay) SerialLinkOkay--; |
if(SerialLinkOkay < 250 - 5) NCFlags |= NC_FLAG_NOSERIALLINK; // 5 seconds timeout for serial communication |
else NCFlags &= ~NC_FLAG_NOSERIALLINK; |
if(StopNavigation && (Parameter.NaviGpsModeControl >= 50)) BeepTime = 1000; |
if(StopNavigation && (Parameter.NaviGpsModeControl >= 50) && (Parameter.GlobalConfig & FC_CFG_GPS_AKTIV)) BeepTime = 1000; |
} |
// ---------------- Logging --------------------------------------- |
Logging_Update(); // could be block some time for at max. 2 seconds, therefore move time critical part of the mainloop into the ISR of timer 1 |
/trunk/main.h |
---|
42,7 → 42,7 |
#define MK3MAG_I2C_COMPATIBLE 3 |
// FC STATUS FLAGS |
// FC.StatusFlags |
#define FC_STATUS_MOTOR_RUN 0x01 |
#define FC_STATUS_FLY 0x02 |
#define FC_STATUS_CALIBRATE 0x04 |
52,7 → 52,7 |
#define FC_STATUS_VARIO_TRIM_UP 0x40 |
#define FC_STATUS_VARIO_TRIM_DOWN 0x80 |
// FC STATUS FLAGS2 |
// FC.StatusFlags2 |
#define FC_STATUS2_CAREFREE 0x01 |
#define FC_STATUS2_ALTITUDE_CONTROL 0x02 |
86,7 → 86,26 |
#define NCERR_FLAG_RC_SIGNAL_LOST 0x00000040 |
#define NCERR_FLAG_EEPROM_NOT_FOUND 0x00000080 |
// Parameter.GlobalConfig |
#define FC_CFG_HOEHENREGELUNG 0x01 |
#define FC_CFG_HOEHEN_SCHALTER 0x02 |
#define FC_CFG_HEADING_HOLD 0x04 |
#define FC_CFG_KOMPASS_AKTIV 0x08 |
#define FC_CFG_KOMPASS_FIX 0x10 |
#define FC_CFG_GPS_AKTIV 0x20 |
#define FC_CFG_ACHSENKOPPLUNG_AKTIV 0x40 |
#define FC_CFG_DREHRATEN_BEGRENZER 0x80 |
//Parameter.ExtraConfig |
#define CFG2_HEIGHT_LIMIT 0x01 |
#define CFG2_VARIO_BEEP 0x02 |
#define CFG_SENSITIVE_RC 0x04 |
#define CFG_3_3V_REFERENCE 0x08 |
#define CFG_NO_RCOFF_BEEPING 0x10 |
#define CFG_GPS_AID 0x20 |
#define CFG_LEARNABLE_CAREFREE 0x40 |
#define LIMIT_MIN(value, min) {if(value <= min) value = min;} |
#define LIMIT_MAX(value, max) {if(value >= max) value = max;} |
#define LIMIT_MIN_MAX(value, min, max) {if(value <= min) value = min; else if(value >= max) value = max;} |
126,6 → 145,9 |
u8 LowVoltageWarning; |
u8 NaviAngleLimitation; |
u8 NaviPH_LoginTime; |
u8 OrientationAngle; |
u8 GlobalConfig; |
u8 ExtraConfig; |
} __attribute__((packed)) Param_t; |
typedef struct |
/trunk/menu.c |
---|
72,7 → 72,7 |
u8 MenuItem = 0; |
u8 MaxMenuItem = 15; |
u8 MaxMenuItem = 16; |
/trunk/spi_slave.c |
---|
396,21 → 396,38 |
ClearFCStatusFlags = 0; |
} |
FC.StatusFlags |= FromFlightCtrl.Param.Byte[8]; |
if(FC.StatusFlags&FC_STATUS_CALIBRATE && !FCCalibActive) |
if(FC.StatusFlags & FC_STATUS_CALIBRATE && !FCCalibActive) |
{ |
Compass_Init(); |
FCCalibActive = 1; |
HeadFreeStartAngle = FromFlightCtrl.GyroHeading; |
} |
else |
{ |
FCCalibActive = 0; |
} |
if(FC.StatusFlags & FC_STATUS_START) HeadFreeStartAngle = FromFlightCtrl.GyroHeading; |
if((Parameter.ExtraConfig & CFG_LEARNABLE_CAREFREE) && (NCFlags & NC_FLAG_GPS_OK)) |
{ |
if(!(FC.StatusFlags2 & FC_STATUS2_CAREFREE)) // CF ist jetzt ausgeschaltet -> neue Richtung lernen |
{ |
if(NaviData.HomePositionDeviation.Distance > 100) // nur bei ausreichender distance |
{ |
HeadFreeStartAngle = (10 * NaviData.HomePositionDeviation.Bearing + 1800) % 3600; // in 0.1° |
} |
else // Ansonsten die aktuelle Richtung übernehmen |
HeadFreeStartAngle = FromFlightCtrl.GyroHeading; // in 0.1° |
} |
} |
Parameter.ActiveSetting = FromFlightCtrl.Param.Byte[9]; |
DebugOut.Analog[5] = FC.StatusFlags; |
FC.StatusFlags2 = FromFlightCtrl.Param.Byte[11]; |
NaviData.FCStatusFlags = FC.StatusFlags; |
NaviData.FCStatusFlags2 = FC.StatusFlags2; |
HeadFreeStartAngle = (s32) FromFlightCtrl.Param.Byte[10] * 20; // convert to 0.1° |
// HeadFreeStartAngle = (s32) FromFlightCtrl.Param.Byte[10] * 20; // convert to 0.1° |
break; |
case SPI_FCCMD_ACCU: |
419,11 → 436,12 |
FC.BAT_Voltage = FromFlightCtrl.Param.Byte[4]; |
Parameter.LowVoltageWarning = FromFlightCtrl.Param.Byte[5]; |
FromFC_VarioCharacter = FromFlightCtrl.Param.Byte[6]; |
Parameter.GlobalConfig = FromFlightCtrl.Param.Byte[7]; |
Parameter.ExtraConfig = FromFlightCtrl.Param.Byte[8]; |
if(FromFC_VarioCharacter == '+' || FromFC_VarioCharacter == '-') // manual setpoint clears the NC-Parameter command |
{ |
NCParams_ClearValue(NCPARAMS_ALTITUDE_RATE); |
} |
NaviData.UBat = FC.BAT_Voltage; |
NaviData.Current = FC.BAT_Current; |
NaviData.UsedCapacity = FC.BAT_UsedCapacity; |
506,6 → 524,7 |
FC.Error[2] = FromFlightCtrl.Param.Byte[7]; |
FC.Error[3] = FromFlightCtrl.Param.Byte[8]; |
FC.Error[4] = FromFlightCtrl.Param.Byte[9]; |
Parameter.OrientationAngle = FromFlightCtrl.Param.Byte[10]; |
DebugOut.Status[0] |= 0x01; // status of FC Present |
DebugOut.Status[0] |= 0x02; // status of BL Present |
if(FC.Error[0] || FC.Error[1] || FC.Error[2] || FC.Error[3] || FC.Error[4]) DebugOut.Status[1] |= 0x01; |