Subversion Repositories NaviCtrl

Compare Revisions

Ignore whitespace Rev 640 → Rev 641

/tags/V2.10c/spi_slave.h
0,0 → 1,210
#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_NEXT_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_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_USER 10
#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 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 ToFcGpsZ;
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;
extern u8 NC_GPS_ModeCharacter;
extern u8 FC_is_Calibrated;
extern u8 FCCalibActive;
extern u8 SpeakHoTT;
extern u8 NC_Wait_for_LED;
extern s16 GyroCompassCorrected;
extern s16 CompassSetpointCorrected; // The compass setpoint that the FC tries to keep - corrected with the magnetic declination
extern s16 CompassSetpoint;
extern u8 AmountOfMotors;
extern s16 SimulatedDirection; // simulated compass direction
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 u8 NC_To_FC_Flags, NC_To_FC_Autostart;
extern u16 FlugMinutenGesamt;
extern u32 LoggingGasFilter, LoggingGasCnt;
extern u8 HoverGas;
 
typedef struct
{
u8 Command;
s16 AngleNick; // NickAngle in 0.1 deg
s16 AngleRoll; // RollAngle in 0.1 deg
s16 AccNick;
s16 AccRoll;
s16 GyroHeading; // Heading in 0.1 deg
s16 GyroNick;
s16 GyroRoll;
s16 GyroYaw;
u16 FCStatus;
union
{
u8 Byte[12];
s8 sByte[12];
u16 Int[6];
s16 sInt[6];
u32 Long[3];
s32 sLong[3];
float Float[3];
} 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 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
 
typedef struct
{
u8 Command;
GPS_Stick_t GPSStick;
s16 MagVecX;
s16 CompassHeading;
s16 AccErrorN;
s16 AccErrorR;
s16 MagVecY;
s16 MagVecZ;
u16 BeepTime;
union
{
u8 Byte[12];
s8 sByte[12];
u16 Int[6];
s16 sInt[6];
u32 Long[3];
s32 sLong[3];
float Float[3];
}Param;
u8 Chksum;
} __attribute__((packed)) ToFlightCtrl_t;
 
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
 
#endif //_SPI_SLAVE_H