Subversion Repositories NaviCtrl

Compare Revisions

Ignore whitespace Rev 872 → Rev 873

/tags/V2.20g/spi_slave.h
0,0 → 1,395
#ifndef _SPI_SLAVE_H
#define _SPI_SLAVE_H
 
#include "fifo.h"
#include "gps.h"
#include "main.h"
 
#define SPEAK_ERR_CALIBARTION 1
#define SPEAK_ERR_RECEICER 2
#define SPEAK_ERR_DATABUS 3
#define SPEAK_ERR_NAVI 4
#define SPEAK_ERROR 5
#define SPEAK_ERR_COMPASS 6
#define SPEAK_ERR_SENSOR 7
#define SPEAK_ERR_GPS 8
#define SPEAK_ERR_MOTOR 9
#define SPEAK_MAX_TEMPERAT 10
#define SPEAK_ALTI_REACHED 11
#define SPEAK_WP_REACHED 12
#define SPEAK_STARTING_WP 13
#define SPEAK_LANDING 14
#define SPEAK_GPS_FIX 15
#define SPEAK_UNDERVOLTAGE 16
#define SPEAK_GPS_HOLD 17
#define SPEAK_GPS_HOME 18
#define SPEAK_GPS_OFF 19
#define SPEAK_BEEP 20
#define SPEAK_MIKROKOPTER 21
#define SPEAK_CAPACITY 22
#define SPEAK_CF_OFF 23
#define SPEAK_CALIBRATE 24
#define SPEAK_MAX_RANGE 25
#define SPEAK_MAX_ALTITUD 26
 
#define SPEAK_MK_READY 27
#define SPEAK_LOAD 28
#define SPEAK_SAVE 29
#define SPEAK_REDUNDANC_ON 30
#define SPEAK_REDUNDANC_OFF 31
#define SPEAK_NEXT_WP 32 // ?
#define SPEAK_REC_START 33
#define SPEAK_REC_STOP 34
#define SPEAK_OKAY 35 // ?
#define SPEAK_WARNING 36 // ?
 
#define SPEAK_20M 37 // ?
#define SPEAK_MK_OFF 38
#define SPEAK_ALTITUDE_ON 39
#define SPEAK_ALTITUDE_OFF 40
#define SPEAK_100M 41 // ?
#define SPEAK_CONNECTED 42
#define SPEAK_CF_ON 46
#define SPEAK_SINKING 47
#define SPEAK_RISING 48
#define SPEAK_HOLDING 49 // ?
#define SPEAK_GPS_ON 50 // ?
#define SPEAK_FOLLWING 51 // ?
#define SPEAK_STARTING 52
 
 
#define SS_PIN GPIO_ReadBit(GPIO2, GPIO_Pin_7)
 
#define SPI_FCCMD_STICK 11
#define SPI_FCCMD_MISC 12
#define SPI_FCCMD_PARAMETER1 13
#define SPI_FCCMD_VERSION 14
#define SPI_FCCMD_SLOW3 15
#define SPI_FCCMD_BL_ACCU 16
#define SPI_FCCMD_PARAMETER2 17
#define SPI_FCCMD_NEUTRAL 18
#define SPI_FCCMD_SLOW 19 // kommt nicht vor
#define SPI_FCCMD_SLOW2 20
#define SPI_FCCMD_STICK2 21
#define SPI_FCCMD_STATUSTEXT 22
 
#define CHK_POTI(b,a) { if(a < 248) b = a; else b = FC.Poti[255 - a]; }
#define CHK_POTI_MM(b,a,min,max) {CHK_POTI(b,a); LIMIT_MIN_MAX(b, min, max); }
 
// devides only the Poti-value
#define CHK_POTI_DIV(b,a,div) { if(a < 248) b = a; else b = FC.Poti[255 - a] / div; }
#define CHK_POTI_MM_DIV(b,a,min,max,div) {CHK_POTI_DIV(b,a,div); LIMIT_MIN_MAX(b, min, max); }
 
extern s32 Kalman_K;
extern s32 Kalman_Kompass ;
extern s32 Kalman_MaxDrift;
extern s32 Kalman_MaxFusion;
extern s32 ToFC_Rotate_C, ToFC_Rotate_S;
extern s32 HeadFreeStartAngle,CompassDirectionAtMotorStart;
extern s16 FC_WP_EventChannel,LogFC_WP_EventChannel,FC_WP_EventChannel_Processed;
extern u32 ToFC_AltitudeRate;
extern s32 ToFC_AltitudeSetpoint_dm;
extern u8 NC_GPS_ModeCharacter;
extern u8 FC_is_Calibrated;
extern u8 FCCalibActive;
extern u8 SpeakHoTT;
extern u8 NC_Wait_for_LED;
extern u8 CntSpiErrorPerSecond;
extern u8 ToFcBaudrateIndex; // 8 = 57600bd
 
#define MAX_RC_IN 16+12+3+4 // 16ch + 12ser + 3stages + 4 reserved
extern s8 PPM_In[MAX_RC_IN];
extern u8 BL_MinOfMaxPWM; // indication if all BL-controllers run on full power
extern u8 Logging_BL_MinOfMaxPWM;
extern u8 ErrorCheck_BL_MinOfMaxPWM;
extern u32 FC_I2C_ErrorConter;
extern u8 FromFC_VarioCharacter;
extern u8 Logging_FCStatusFlags1,Logging_FCStatusFlags2;
extern s16 POI_KameraNick;
extern u16 FlugMinutenGesamt;
extern u32 LoggingGasFilter, LoggingGasCnt;
extern u8 HoverGas;
extern s16 FromFlightCtrl_AccNick,FromFlightCtrl_AccRoll,FromFlightCtrl_GyroNick,FromFlightCtrl_GyroRoll;
extern u8 RequestConfigFromFC;
extern u8 SendOemName;
extern u8 CamCtrlCharacter;
extern s16 NickServoValue;
extern s16 FromFC_ServoRollControl;
extern s16 FromFC_ServoNickControl;
 
typedef struct
{
u8 Command;
s16 AngleNick; // NickAngle in 0.1 deg
s16 AngleRoll; // RollAngle in 0.1 deg
s16 GyroHeading; // Heading in 0.1 deg
s16 GyroYaw;
union
{
u8 Byte[22];
s8 sByte[22];
u16 Int[11];
s16 sInt[11];
} __attribute__((packed)) Param;
u8 Chksum;
} __attribute__((packed)) FromFlightCtrl_t;
 
#define SPI_NCCMD_OSD_DATA 100
#define SPI_NCCMD_GPS_POS 101
#define SPI_NCCMD_GPS_TARGET 102
#define SPI_NCCMD_KALMAN 103
#define SPI_NCCMD_VERSION 104
#define SPI_NCCMD_GPSINFO 105
#define SPI_NCCMD_HOTT_INFO 106
#define SPI_MISC 107
#define SPI_SERIAL_CH 108
#define SPI_OEM_NAME 109
 
#define HOTT_VARIO_PACKET_ID 0x89
#define HOTT_GPS_PACKET_ID 0x8A
#define HOTT_ELECTRIC_AIR_PACKET_ID 0x8E
#define HOTT_GENERAL_PACKET_ID 0x8D
#define JETI_GPS_PACKET_ID1 0x01
#define JETI_GPS_PACKET_ID2 0x02
#define HOTT_WPL_NAME 0x03
 
// bitcoding for EE_Parameter.ServoCompInvert
#define SERVO_NICK_INV 0x01
#define SERVO_ROLL_INV 0x02
#define SERVO_RELATIVE 0x04 // direct poti control or relative moving of the servo value
#define CH_DIRECTION_1 0x08
#define CH_DIRECTION_2 0x10
 
//CH Orientation ServoBits 0x08 0x10
// --> no change 0 0
// --> front to starting point 0 1
// --> rear to to starting point 1 0
//-> start orientation 1 1
 
 
typedef struct
{
u8 Command;
GPS_Stick_t GPSStick;
s16 CompassHeading;
s16 AccErrorN;
s16 AccErrorR;
union
{
u8 Byte[20];
s8 sByte[20];
u16 Int[10];
s16 sInt[10];
u32 Long[5];
s32 sLong[5];
float Float[5];
} __attribute__((packed)) Param;
u8 Chksum;
} __attribute__((packed)) ToFlightCtrl_t;
 
typedef struct
{
unsigned char Sync1,Sync2;
unsigned char WhoAmI;
unsigned char Data[200];
unsigned char Chksum;
}__attribute__((packed)) str_HugeBlockFromFC;
extern str_HugeBlockFromFC HugeBlockFromFC;
 
typedef struct
{
unsigned char Sync1,Sync2;
unsigned char WhoAmI;
unsigned char Data[200];
unsigned char Chksum;
}__attribute__((packed)) str_HugeBlockToFC;
extern str_HugeBlockToFC HugeBlockToFC;
 
typedef struct
{
u8 Current;
u8 Temperature;
u8 MaxPWM;
u8 State;
u8 NotReadyCnt;
} __attribute__((packed)) Motor_t;
 
extern Motor_t Motor[MAX_MOTORS];
 
#define MOTOR_STATE_NEW_PROTOCOL_MASK 0x01
#define MOTOR_STATE_FAST_MODE 0x02
#define MOTOR_STATE_BL30 0x04 // extended Current measurement -> 200 = 20A 201 = 21A 255 = 75A (20+55)
extern u8 Motor_Version[MAX_MOTORS]; // das kann nicht in die struct, weil der PC die Struktur bekommt
 
 
typedef struct
{
u8 Major;
u8 Minor;
u8 Patch;
u8 Compatible;
u8 Hardware;
} __attribute__((packed)) SPI_Version_t;
 
 
extern FromFlightCtrl_t FromFlightCtrl;
extern ToFlightCtrl_t ToFlightCtrl;
extern volatile u32 SPI0_Timeout;
extern SPI_Version_t FC_Version;
extern s16 GPS_Aid_StickMultiplikator;
extern u8 CompassCalState;
extern u8 Out1TriggerUpdateNewData;
extern u8 LowVoltageLandingActive;
 
void SPI0_Init(void);
void SPI0_GetFlightCtrlVersion(void);
void SPI0_UpdateBuffer(void);
u16 BL3_Current(u8 who); // in 0.1A
 
typedef struct
{
unsigned char Revision;
unsigned char Kanalbelegung[12]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3
unsigned char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv
unsigned char Hoehe_MinGas; // Wert : 0-100
unsigned char Luftdruck_D; // Wert : 0-250
unsigned char HoeheChannel; // Wert : 0-32
unsigned char Hoehe_P; // Wert : 0-32
unsigned char Hoehe_Verstaerkung; // Wert : 0-50
unsigned char Hoehe_ACC_Wirkung; // Wert : 0-250
unsigned char Hoehe_HoverBand; // Wert : 0-250
unsigned char Hoehe_TiltCompensation; // Wert : 0-250
unsigned char Hoehe_StickNeutralPoint;// Wert : 0-250
unsigned char Stick_P; // Wert : 1-6
unsigned char Stick_D; // Wert : 0-64
unsigned char StickGier_P; // Wert : 1-20
unsigned char Gas_Min; // Wert : 0-32
unsigned char Gas_Max; // Wert : 33-250
unsigned char GyroAccFaktor; // Wert : 1-64
unsigned char KompassWirkung; // Wert : 0-32
unsigned char Gyro_P; // Wert : 10-250
unsigned char Gyro_I; // Wert : 0-250
unsigned char Gyro_D; // Wert : 0-250
unsigned char Gyro_Gier_P; // Wert : 10-250
unsigned char Gyro_Gier_I; // Wert : 0-250
unsigned char Gyro_Stability; // Wert : 0-16
unsigned char UnterspannungsWarnung; // Wert : 0-250
unsigned char NotGas; // Wert : 0-250 //Gaswert bei Empängsverlust
unsigned char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen
unsigned char Receiver; // 0= Summensignal, 1= Spektrum, 2 =Jeti, 3=ACT DSL, 4=ACT S3D
unsigned char I_Faktor; // Wert : 0-250
unsigned char UserParam1; // Wert : 0-250
unsigned char UserParam2; // Wert : 0-250
unsigned char UserParam3; // Wert : 0-250
unsigned char UserParam4; // Wert : 0-250
unsigned char ServoNickControl; // Wert : 0-250 // Stellung des Servos
unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo
unsigned char ServoNickMin; // Wert : 0-250 // Anschlag
unsigned char ServoNickMax; // Wert : 0-250 // Anschlag
//--- Seit V0.75
unsigned char ServoRollControl; // Wert : 0-250 // Stellung des Servos
unsigned char ServoRollComp; // Wert : 0-250
unsigned char ServoRollMin; // Wert : 0-250
unsigned char ServoRollMax; // Wert : 0-250
//---
unsigned char ServoNickRefresh; // Speed of the Servo
unsigned char ServoManualControlSpeed;//
unsigned char CamOrientation; //
unsigned char Servo3; // Value or mapping of the Servo Output
unsigned char Servo4; // Value or mapping of the Servo Output
unsigned char Servo5; // Value or mapping of the Servo Output
unsigned char LoopGasLimit; // Wert: 0-250 max. Gas während Looping
unsigned char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag
unsigned char LoopHysterese; // Wert: 0-250 Hysterese für Stickausschlag
unsigned char AchsKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick koppelt (NickRollMitkopplung)
unsigned char AchsKopplung2; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
unsigned char CouplingYawCorrection; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
unsigned char WinkelUmschlagNick; // Wert: 0-250 180°-Punkt
unsigned char WinkelUmschlagRoll; // Wert: 0-250 180°-Punkt
unsigned char GyroAccAbgleich; // 1/k (Koppel_ACC_Wirkung)
unsigned char Driftkomp;
unsigned char DynamicStability;
unsigned char UserParam5; // Wert : 0-250
unsigned char UserParam6; // Wert : 0-250
unsigned char UserParam7; // Wert : 0-250
unsigned char UserParam8; // Wert : 0-250
//---Output ---------------------------------------------
unsigned char J16Bitmask; // for the J16 Output
unsigned char J16Timing; // for the J16 Output
unsigned char J17Bitmask; // for the J17 Output
unsigned char J17Timing; // for the J17 Output
// seit version V0.75c
unsigned char WARN_J16_Bitmask; // for the J16 Output
unsigned char WARN_J17_Bitmask; // for the J17 Output
//---NaviCtrl---------------------------------------------
unsigned char AutoPhotoDistance; // Auto Photo
unsigned char NaviGpsModeChannel; // Parameters for the Naviboard
unsigned char NaviGpsGain;
unsigned char NaviGpsP;
unsigned char NaviGpsI;
unsigned char NaviGpsD;
unsigned char NaviGpsPLimit;
unsigned char NaviGpsILimit;
unsigned char NaviGpsDLimit;
unsigned char NaviGpsA;
unsigned char NaviGpsMinSat;
unsigned char NaviStickThreshold;
unsigned char NaviWindCorrection;
unsigned char NaviAccCompensation; // New since 0.86 -> was: SpeedCompensation
unsigned char NaviMaxFlyingRange; // in 10m
unsigned char NaviAngleLimitation;
unsigned char NaviPH_LoginTime;
unsigned char NaviDescendRange;
//---Ext.Ctrl---------------------------------------------
unsigned char ExternalControl; // for serial Control
//---CareFree---------------------------------------------
unsigned char OrientationAngle; // Where is the front-direction?
unsigned char CareFreeChannel; // switch for CareFree
unsigned char MotorSafetySwitch;
unsigned char MotorSmooth;
unsigned char ComingHomeAltitude;
unsigned char FailSafeTime;
unsigned char MaxAltitude;
unsigned char FailsafeChannel; // if the value of this channel is > 100, the MK reports "RC-Lost"
unsigned char ServoFilterNick;
unsigned char ServoFilterRoll;
unsigned char Servo3OnValue;
unsigned char Servo3OffValue;
unsigned char Servo4OnValue;
unsigned char Servo4OffValue;
unsigned char ServoFS_Pos[5];
unsigned char StartLandChannel;
unsigned char LandingSpeed;
unsigned char CompassOffset;
unsigned char AutoLandingVoltage; // in 0,1V 0 -> disabled
unsigned char ComingHomeVoltage; // in 0,1V 0 -> disabled
unsigned char AutoPhotoAtitudes;
unsigned char SingleWpSpeed;
unsigned char LandingPulse;
unsigned char SingleWpControlChannel;
unsigned char MenuKeyChannel;
unsigned char CamCtrlModeChannel;
unsigned char CamCtrlZoomChannel;
unsigned char FailSafeAltitude;
unsigned char GimbalYawChannel;
unsigned char GimbalOut1Channel;
unsigned char GimbalOut2Channel;
unsigned char reserved[28]; // for later use
//------------------------------------------------
unsigned char BitConfig; // (war Loop-Cfg) Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
unsigned char ServoCompInvert; // // 0x01 = Nick, 0x02 = Roll, 0x04 = relative moving // WICHTIG!!! am Ende lassen
unsigned char ExtraConfig; // bitcodiert
unsigned char GlobalConfig3; // bitcodiert
char Name[12];
unsigned char crc; // must be the last byte!
} __attribute__((packed)) paramset_t; // must be 179 bytes
 
extern paramset_t EE_Parameter;
#endif //_SPI_SLAVE_H