Subversion Repositories FlightCtrl

Rev

Rev 2729 | Blame | Compare with Previous | Last modification | View Log | RSS feed

// ######################## SPI - FlightCtrl ###################
#ifndef _SPI_H
#define _SPI_H

#include <util/delay.h>
#include "vector.h"

#define USE_SPI_COMMUNICATION
#define SPI_BYTEGAP 5
//-----------------------------------------
#define DDR_SPI DDRB
#define SLAVE_SELECT_DDR_PORT   DDRC
#define SLAVE_SELECT_PORT       PORTC

#if defined(__AVR_ATmega1284P__)
#define DD_SS                           PORTB4
#define DD_SCK                          PORTB7
#define DD_MOSI                         PORTB5
#define DD_MISO                         PORTB6
#define SPI_SLAVE_SELECT        PORTC5
#else
#define DD_SS                           PB4
#define DD_SCK                          PB7
#define DD_MOSI                         PB5
#define DD_MISO                         PB6
#define SPI_SLAVE_SELECT        PC5
#endif

// for compatibility reasons gcc3.x <-> gcc4.x
#ifndef SPCR
#define SPCR   SPCR0
#endif
#ifndef SPE
#define SPE   SPE0
#endif
#ifndef MSTR
#define MSTR   MSTR0
#endif
#ifndef SPR1
#define SPR1   SPR01
#endif
#ifndef SPR0
#define SPR0   SPR00
#endif
#ifndef SPIE
#define SPIE   SPIE0
#endif
#ifndef SPDR
#define SPDR   SPDR0
#endif
#ifndef SPIF
#define SPIF   SPIF0
#endif
#ifndef SPSR
#define SPSR   SPSR0
#endif
// -------------------------

#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
#define SPI_FCCMD_SLOW2                 20
#define SPI_FCCMD_STICK2                21
#define SPI_FCCMD_STATUSTEXT    22


#define SPI_FCSYNCBYTE1         0xAA
#define SPI_FCSYNCBYTE2         0x85
#define SPI_FCSYNCBYTE_HB1      0xA2  // for the huge Block
#define SPI_FCSYNCBYTE_HB2      0x48  // for the huge Block
#define SPI_NCSYNCBYTE1         0x82
#define SPI_NCSYNCBYTE2         0x55
#define SPI_NCSYNCBYTE_HB1      0xB2  // for the huge Block
#define SPI_NCSYNCBYTE_HB2      0xA5  // for the huge Block


#define KM_BIT_YAW              0x01
#define KM_BIT_UART             0x02
#define KM_BIT_SLOW             0x04  // Fast switch off
#define KM_BIT_OFF              0x08  // Fast switch off
#define KM_BIT_EXTCNTRL 0x10


/*
struct str_ToNaviCtrl
{
        unsigned char Sync1, Sync2;
        unsigned char Command;
        signed int  IntegralNick;
        signed int  IntegralRoll;
        signed int  AccNick;
        signed int  AccRoll;
        signed int  GyroCompass;
        signed int  GyroNick;
        signed int  GyroRoll;
        signed int  GyroGier;
        unsigned int FCStatus;
        union
        {
                unsigned char Byte[12];
                char sByte[12];
                unsigned int Int[6];
                int  sInt[6];
                unsigned long Long[3];
                long sLong[3];
                float Float[3];
        } Param;
        unsigned char Chksum;
};
*/


struct str_HugeBlockToNavi
{
        unsigned char Sync1,Sync2;
        unsigned char WhoAmI;
        unsigned char Data[200];
        unsigned char Chksum;
};
extern struct str_HugeBlockToNavi HugeBlockToNavi;

struct str_HugeBlockFromNavi
{
        unsigned char WhoAmI;
        unsigned char Data[200];
        unsigned char Chksum;
};
extern struct str_HugeBlockFromNavi HugeBlockFromNavi;

extern void TransmitHugeBlock(void);
extern void SendSettingToNC(void);

struct str_ToNaviCtrl
{
        unsigned char Sync1, Sync2;
        unsigned char Command;
        signed int  IntegralNick;
        signed int  IntegralRoll;
        signed int  GyroCompass;
        signed int  GyroGier;
        union
        {
                unsigned char Byte[22];
                char sByte[22];
                unsigned int Int[11];
                int  sInt[11];
        } Param;
        unsigned char Chksum;
};


#define SPI_NCCMD_KALMAN                103
#define SPI_NCCMD_VERSION               104
#define SPI_NCCMD_GPSINFO               105
#define SPI_NCCMD_HOTT_DATA             106
#define SPI_MISC                                107
#define SPI_SERIAL_CH                   108 // kommt nur, wenn NC den Datensatz empfangen hat
#define SPI_OEM_NAME                    109 // kommt nur nach einer Settings-Übertragung per HugeBlock

struct str_FromNaviCtrl
{
        unsigned char Command;
        signed int GPS_Nick;
        signed int GPS_Roll;
        signed int CompassValue;
        signed int AccErrorN;
        signed int AccErrorR;
        union
        {
                unsigned char Byte[20];
                char sByte[20];
                unsigned int Int[10];
                int  sInt[10];
                unsigned long Long[5];
                long sLong[5];
                float Float[5];
        } Param;
        unsigned char Chksum;
};

struct str_FromNaviCtrl_Value
{
 signed char Kalman_K;
 signed char Kalman_MaxDrift;
 signed char Kalman_MaxFusion;
 unsigned char SerialDataOkay;
 signed char reserve;
};

struct str_SPI_VersionInfo
{
  unsigned char Major;
  unsigned char Minor;
  unsigned char Patch;
  unsigned char Compatible;
  unsigned char Hardware;
};

// Satfix types for GPSData.SatFix
#define SATFIX_NONE                             0x00
#define SATFIX_DEADRECKOING             0x01
#define SATFIX_2D                               0x02
#define SATFIX_3D                               0x03
#define SATFIX_GPS_DEADRECKOING 0x04
#define SATFIX_TIMEONLY                 0x05
// Flags for interpretation of the GPSData.Flags
#define FLAG_GPSFIXOK                           0x01 // (i.e. within DOP & ACC Masks)
#define FLAG_DIFFSOLN                           0x02 // (is DGPS used)
#define FLAG_WKNSET                                     0x04 // (is Week Number valid)
#define FLAG_TOWSET                                     0x08 // (is Time of Week valid)
#define FLAG_GPS_NAVIGATION_ACTIVE      0x10 // NC to FC -> NC is ready to navigate

struct str_GPSInfo
{
        unsigned char   Flags;                  // Status Flags
        unsigned char   NumOfSats;              // number of satelites
        unsigned char   SatFix;                 // type of satfix
        unsigned char   Speed;                  // m/sek
        unsigned int    HomeDistance;   // distance to Home in dm
        int                             HomeBearing;    // bearing to home in deg
};


#ifdef USE_SPI_COMMUNICATION
extern struct str_GPSInfo GPSInfo;
extern struct str_SPI_VersionInfo NC_Version;
extern struct str_FromNaviCtrl_Value FromNaviCtrl_Value;
extern struct str_ToNaviCtrl   ToNaviCtrl;
extern struct str_FromNaviCtrl FromNaviCtrl;
extern unsigned char SPI_CommandCounter,NaviDataOkay;
extern signed char FromNC_Rotate_C, FromNC_Rotate_S;
extern unsigned char NC_ErrorCode,Partner_ErrorCode;
extern void SPI_MasterInit(void);
extern unsigned char SPI_StartTransmitPacket(void);
extern void UpdateSPI_Buffer(void);
extern void SPI_TransmitByte(void);
extern signed int POI_KameraNick;
extern unsigned char NC_GPS_ModeCharacter, NC_To_FC_Flags, NC_To_FC_MaxAltitude;
extern vector16_t MagVec;
extern unsigned char EarthMagneticField;
extern unsigned char EarthMagneticInclination,EarthMagneticInclinationTheoretic;
extern signed char FromNC_WP_EventChannel_New;
extern unsigned char NCForcesNewDirection; // allows Yawing without CareFree (Yawing at Coming Home)
extern unsigned char NC_RequestsConfig;
extern unsigned char CamCtrlCharacter;
extern unsigned char NCParachute;
extern unsigned char BaroCalState;
extern unsigned int FromNC_Laser_cm;
extern unsigned char FlyzonePointCnt;
extern unsigned int TrigLogging_CountExternal;
extern unsigned char FromNcBaudrateIndex;
extern unsigned char GPS_TimeHours, GPS_TimeMinutes, GPS_TimeSeconds;
#else


// -------------------------------- Dummy -----------------------------------------
#define  SPI_MasterInit() ;
//#define  SPI_StartTransmitPacket() ;
#define  UpdateSPI_Buffer() ;
#define  SPI_TransmitByte() ;
#endif


#endif