Subversion Repositories FlightCtrl

Rev

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

Rev Author Line No. Line
827 ingob 1
// ######################## SPI - FlightCtrl ###################
2
#ifndef _SPI_H
3
#define _SPI_H
4
 
5
#include <util/delay.h>
1852 killagreg 6
#include "vector.h"
827 ingob 7
 
1051 killagreg 8
#define USE_SPI_COMMUNICATION
2407 holgerb 9
#define SPI_BYTEGAP 5
827 ingob 10
//-----------------------------------------
11
#define DDR_SPI DDRB
1561 killagreg 12
#define SLAVE_SELECT_DDR_PORT   DDRC
13
#define SLAVE_SELECT_PORT       PORTC
827 ingob 14
 
1561 killagreg 15
#if defined(__AVR_ATmega1284P__)
16
#define DD_SS                           PORTB4
17
#define DD_SCK                          PORTB7
18
#define DD_MOSI                         PORTB5
19
#define DD_MISO                         PORTB6
20
#define SPI_SLAVE_SELECT        PORTC5
21
#else
22
#define DD_SS                           PB4
23
#define DD_SCK                          PB7
24
#define DD_MOSI                         PB5
25
#define DD_MISO                         PB6
26
#define SPI_SLAVE_SELECT        PC5
27
#endif
28
 
1051 killagreg 29
// for compatibility reasons gcc3.x <-> gcc4.x
30
#ifndef SPCR
827 ingob 31
#define SPCR   SPCR0
1051 killagreg 32
#endif
33
#ifndef SPE
827 ingob 34
#define SPE   SPE0
1051 killagreg 35
#endif
36
#ifndef MSTR
827 ingob 37
#define MSTR   MSTR0
1051 killagreg 38
#endif
39
#ifndef SPR1
827 ingob 40
#define SPR1   SPR01
1051 killagreg 41
#endif
42
#ifndef SPR0
827 ingob 43
#define SPR0   SPR00
1051 killagreg 44
#endif
45
#ifndef SPIE
827 ingob 46
#define SPIE   SPIE0
1051 killagreg 47
#endif
48
#ifndef SPDR
827 ingob 49
#define SPDR   SPDR0
1051 killagreg 50
#endif
51
#ifndef SPIF
827 ingob 52
#define SPIF   SPIF0
1051 killagreg 53
#endif
54
#ifndef SPSR
827 ingob 55
#define SPSR   SPSR0
1051 killagreg 56
#endif
827 ingob 57
// -------------------------
58
 
1448 killagreg 59
#define SPI_FCCMD_STICK                 11
60
#define SPI_FCCMD_MISC                  12
61
#define SPI_FCCMD_PARAMETER1    13
62
#define SPI_FCCMD_VERSION               14
2499 holgerb 63
#define SPI_FCCMD_SLOW3                 15
2341 holgerb 64
#define SPI_FCCMD_BL_ACCU               16
2183 holgerb 65
#define SPI_FCCMD_PARAMETER2    17
2478 holgerb 66
#define SPI_FCCMD_NEUTRAL               18
67
#define SPI_FCCMD_SLOW                  19
2499 holgerb 68
#define SPI_FCCMD_SLOW2                 20
2596 holgerb 69
#define SPI_FCCMD_STICK2                21
2725 holgerb 70
#define SPI_FCCMD_STATUSTEXT    22
991 ingob 71
 
2596 holgerb 72
 
73
#define SPI_FCSYNCBYTE1         0xAA
74
#define SPI_FCSYNCBYTE2         0x85
75
#define SPI_FCSYNCBYTE_HB1      0xA2  // for the huge Block
76
#define SPI_FCSYNCBYTE_HB2      0x48  // for the huge Block
77
#define SPI_NCSYNCBYTE1         0x82
78
#define SPI_NCSYNCBYTE2         0x55
79
#define SPI_NCSYNCBYTE_HB1      0xB2  // for the huge Block
80
#define SPI_NCSYNCBYTE_HB2      0xA5  // for the huge Block
81
 
2702 holgerb 82
 
83
#define KM_BIT_YAW              0x01
84
#define KM_BIT_UART             0x02
85
#define KM_BIT_SLOW             0x04  // Fast switch off
86
#define KM_BIT_OFF              0x08  // Fast switch off
87
#define KM_BIT_EXTCNTRL 0x10
88
 
2729 holgerb 89
 
2596 holgerb 90
/*
827 ingob 91
struct str_ToNaviCtrl
92
{
1231 killagreg 93
        unsigned char Sync1, Sync2;
94
        unsigned char Command;
95
        signed int  IntegralNick;
96
        signed int  IntegralRoll;
97
        signed int  AccNick;
98
        signed int  AccRoll;
99
        signed int  GyroCompass;
100
        signed int  GyroNick;
101
        signed int  GyroRoll;
102
        signed int  GyroGier;
1852 killagreg 103
        unsigned int FCStatus;
1231 killagreg 104
        union
105
        {
1472 killagreg 106
                unsigned char Byte[12];
1231 killagreg 107
                char sByte[12];
1472 killagreg 108
                unsigned int Int[6];
109
                int  sInt[6];
110
                unsigned long Long[3];
111
                long sLong[3];
1231 killagreg 112
                float Float[3];
113
        } Param;
114
        unsigned char Chksum;
1051 killagreg 115
};
2596 holgerb 116
*/
827 ingob 117
 
2596 holgerb 118
struct str_HugeBlockToNavi
119
{
120
        unsigned char Sync1,Sync2;
121
        unsigned char WhoAmI;
2631 holgerb 122
        unsigned char Data[200];
2596 holgerb 123
        unsigned char Chksum;
124
};
125
extern struct str_HugeBlockToNavi HugeBlockToNavi;
126
 
127
struct str_HugeBlockFromNavi
128
{
129
        unsigned char WhoAmI;
2631 holgerb 130
        unsigned char Data[200];
2596 holgerb 131
        unsigned char Chksum;
132
};
133
extern struct str_HugeBlockFromNavi HugeBlockFromNavi;
134
 
135
extern void TransmitHugeBlock(void);
2604 holgerb 136
extern void SendSettingToNC(void);
2596 holgerb 137
 
138
struct str_ToNaviCtrl
139
{
140
        unsigned char Sync1, Sync2;
141
        unsigned char Command;
142
        signed int  IntegralNick;
143
        signed int  IntegralRoll;
144
        signed int  GyroCompass;
145
        signed int  GyroGier;
146
        union
147
        {
2725 holgerb 148
                unsigned char Byte[22];
149
                char sByte[22];
150
                unsigned int Int[11];
151
                int  sInt[11];
2596 holgerb 152
        } Param;
153
        unsigned char Chksum;
154
};
155
 
156
 
1448 killagreg 157
#define SPI_NCCMD_KALMAN                103
158
#define SPI_NCCMD_VERSION               104
1451 killagreg 159
#define SPI_NCCMD_GPSINFO               105
1940 holgerb 160
#define SPI_NCCMD_HOTT_DATA             106
1972 holgerb 161
#define SPI_MISC                                107
2596 holgerb 162
#define SPI_SERIAL_CH                   108 // kommt nur, wenn NC den Datensatz empfangen hat
2662 holgerb 163
#define SPI_OEM_NAME                    109 // kommt nur nach einer Settings-Übertragung per HugeBlock
1241 killagreg 164
 
827 ingob 165
struct str_FromNaviCtrl
166
{
1231 killagreg 167
        unsigned char Command;
2596 holgerb 168
        signed int GPS_Nick;
169
        signed int GPS_Roll;
170
        signed int CompassValue;
1936 holgerb 171
        signed int AccErrorN;
172
        signed int AccErrorR;
1231 killagreg 173
        union
174
        {
2596 holgerb 175
                unsigned char Byte[20];
176
                char sByte[20];
177
                unsigned int Int[10];
178
                int  sInt[10];
179
                unsigned long Long[5];
180
                long sLong[5];
181
                float Float[5];
1231 killagreg 182
        } Param;
183
        unsigned char Chksum;
1051 killagreg 184
};
827 ingob 185
 
978 hbuss 186
struct str_FromNaviCtrl_Value
187
{
992 hbuss 188
 signed char Kalman_K;
189
 signed char Kalman_MaxDrift;
190
 signed char Kalman_MaxFusion;
1215 hbuss 191
 unsigned char SerialDataOkay;
2501 holgerb 192
 signed char reserve;
978 hbuss 193
};
827 ingob 194
 
1051 killagreg 195
struct str_SPI_VersionInfo
196
{
197
  unsigned char Major;
198
  unsigned char Minor;
199
  unsigned char Patch;
200
  unsigned char Compatible;
1448 killagreg 201
  unsigned char Hardware;
1051 killagreg 202
};
203
 
1451 killagreg 204
// Satfix types for GPSData.SatFix
205
#define SATFIX_NONE                             0x00
206
#define SATFIX_DEADRECKOING             0x01
207
#define SATFIX_2D                               0x02
208
#define SATFIX_3D                               0x03
209
#define SATFIX_GPS_DEADRECKOING 0x04
210
#define SATFIX_TIMEONLY                 0x05
211
// Flags for interpretation of the GPSData.Flags
1916 holgerb 212
#define FLAG_GPSFIXOK                           0x01 // (i.e. within DOP & ACC Masks)
213
#define FLAG_DIFFSOLN                           0x02 // (is DGPS used)
214
#define FLAG_WKNSET                                     0x04 // (is Week Number valid)
215
#define FLAG_TOWSET                                     0x08 // (is Time of Week valid)
216
#define FLAG_GPS_NAVIGATION_ACTIVE      0x10 // NC to FC -> NC is ready to navigate
1451 killagreg 217
 
218
struct str_GPSInfo
219
{
1472 killagreg 220
        unsigned char   Flags;                  // Status Flags
221
        unsigned char   NumOfSats;              // number of satelites
222
        unsigned char   SatFix;                 // type of satfix
1690 holgerb 223
        unsigned char   Speed;                  // m/sek
1472 killagreg 224
        unsigned int    HomeDistance;   // distance to Home in dm
225
        int                             HomeBearing;    // bearing to home in deg
1451 killagreg 226
};
227
 
228
 
827 ingob 229
#ifdef USE_SPI_COMMUNICATION
1451 killagreg 230
extern struct str_GPSInfo GPSInfo;
1448 killagreg 231
extern struct str_SPI_VersionInfo NC_Version;
978 hbuss 232
extern struct str_FromNaviCtrl_Value FromNaviCtrl_Value;
827 ingob 233
extern struct str_ToNaviCtrl   ToNaviCtrl;
234
extern struct str_FromNaviCtrl FromNaviCtrl;
1215 hbuss 235
extern unsigned char SPI_CommandCounter,NaviDataOkay;
1664 holgerb 236
extern signed char FromNC_Rotate_C, FromNC_Rotate_S;
2619 holgerb 237
extern unsigned char NC_ErrorCode,Partner_ErrorCode;
827 ingob 238
extern void SPI_MasterInit(void);
2386 holgerb 239
extern unsigned char SPI_StartTransmitPacket(void);
827 ingob 240
extern void UpdateSPI_Buffer(void);
241
extern void SPI_TransmitByte(void);
1840 holgerb 242
extern signed int POI_KameraNick;
2034 holgerb 243
extern unsigned char NC_GPS_ModeCharacter, NC_To_FC_Flags, NC_To_FC_MaxAltitude;
1852 killagreg 244
extern vector16_t MagVec;
1972 holgerb 245
extern unsigned char EarthMagneticField;
246
extern unsigned char EarthMagneticInclination,EarthMagneticInclinationTheoretic;
2485 holgerb 247
extern signed char FromNC_WP_EventChannel_New;
2501 holgerb 248
extern unsigned char NCForcesNewDirection; // allows Yawing without CareFree (Yawing at Coming Home)
2604 holgerb 249
extern unsigned char NC_RequestsConfig;
2624 holgerb 250
extern unsigned char CamCtrlCharacter;
2676 holgerb 251
extern unsigned char NCParachute;
252
extern unsigned char BaroCalState;
2681 holgerb 253
extern unsigned int FromNC_Laser_cm;
2691 holgerb 254
extern unsigned char FlyzonePointCnt;
2702 holgerb 255
extern unsigned int TrigLogging_CountExternal;
2709 holgerb 256
extern unsigned char FromNcBaudrateIndex;
2729 holgerb 257
extern unsigned char GPS_TimeHours, GPS_TimeMinutes, GPS_TimeSeconds;
827 ingob 258
#else
259
 
260
 
261
// -------------------------------- Dummy -----------------------------------------
1051 killagreg 262
#define  SPI_MasterInit() ;
2386 holgerb 263
//#define  SPI_StartTransmitPacket() ;
827 ingob 264
#define  UpdateSPI_Buffer() ;
265
#define  SPI_TransmitByte() ;
266
#endif
267
 
268
 
269
#endif