Subversion Repositories Projects

Rev

Blame | Last modification | View Log | RSS feed

/*****************************************************************************
 *   Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de                  *
 *   Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net                  *
 *   Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net *
 *   Copyright (C) 2011 Harald Bongartz                                      *
 *                                                                           *
 *   This program is free software; you can redistribute it and/or modify    *
 *   it under the terms of the GNU General Public License as published by    *
 *   the Free Software Foundation; either version 2 of the License.          *
 *                                                                           *
 *   This program is distributed in the hope that it will be useful,         *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           *
 *   GNU General Public License for more details.                            *
 *                                                                           *
 *   You should have received a copy of the GNU General Public License       *
 *   along with this program; if not, write to the                           *
 *   Free Software Foundation, Inc.,                                         *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.               *
 *                                                                           *
 *                                                                           *
 *   Credits to:                                                             *
 *   Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN  *
 *                          http://www.mikrokopter.de                        *
 *   Gregor "killagreg" Stobrawa for his version of the MK code              *
 *   Thomas Kaiser "thkais" for the original project. See                    *
 *                          http://www.ft-fanpage.de/mikrokopter/            *
 *                          http://forum.mikrokopter.de/topic-4061-1.html    *
 *   Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code *
 *                          http://www.mylifesucks.de/oss/c-osd/             *
 *   Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility*
 *****************************************************************************/



#ifndef _MK_DATA_STRUCTS_H
#define _MK_DATA_STRUCTS_H


// FC Version 0.88M
#define EEProm_Version  91        // FC EEProm Revision / Struktur FC 0.87
#define FC_Version      "0.88m"   //Softwareversion der FC


#define u8 uint8_t
#define s8 int8_t
#define u16 uint16_t
#define s16 int16_t
#define u32 uint32_t
#define s32 int32_t

#define NUMBER_OF_DEBUG_DATAS 32
#define ANALOG_NAME_LENGTH 16

// Version of supported serial protocol
#define MIN_VERSION 7
#define MAX_VERSION 10

// Setting index
#define SETTING_1       1
#define SETTING_2       2
#define SETTING_3       3
#define SETTING_4       4
#define SETTING_5       5
#define SETTING_CURRENT 0xff


// MikroKopter defines
// taken from
// FC Software eeprom.h
//

//GlobalConfig3 aus FC/eeprom.h
#define CFG3_NO_SDCARD_NO_START                 0x01
#define CFG3_DPH_MAX_RADIUS                     0x02
#define CFG3_VARIO_FAILSAFE                     0x04
#define CFG3_MOTOR_SWITCH_MODE                  0x08    //FC0.88L 7.5.12
#define CFG3_NO_GPSFIX_NO_START                 0x10    //FC0.88L 7.5.12

//GlobalConfig
#define CFG_HOEHENREGELUNG                      0x01
#define CFG_HOEHEN_SCHALTER                     0x02
#define CFG_HEADING_HOLD                        0x04
#define CFG_KOMPASS_AKTIV                       0x08
#define CFG_KOMPASS_FIX                         0x10
#define CFG_GPS_AKTIV                           0x20
#define CFG_ACHSENKOPPLUNG_AKTIV                0x40
#define CFG_DREHRATEN_BEGRENZER                 0x80

//Bitconfig MAsk
#define CFG_LOOP_OBEN                           0x01
#define CFG_LOOP_UNTEN                          0x02
#define CFG_LOOP_LINKS                          0x04
#define CFG_LOOP_RECHTS                         0x08
#define CFG_MOTOR_BLINK1                        0x10
#define CFG_MOTOR_OFF_LED1                      0x20
#define CFG_MOTOR_OFF_LED2                      0x40
#define CFG_MOTOR_BLINK2                        0x80

// 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 CFG_IGNORE_MAG_ERR_AT_STARTUP           0x80

// bit mask for ParamSet.Config0
#define CFG0_AIRPRESS_SENSOR                    0x01
#define CFG0_HEIGHT_SWITCH                      0x02
#define CFG0_HEADING_HOLD                       0x04
#define CFG0_COMPASS_ACTIVE                     0x08
#define CFG0_COMPASS_FIX                        0x10
#define CFG0_GPS_ACTIVE                         0x20
#define CFG0_AXIS_COUPLING_ACTIVE               0x40
#define CFG0_ROTARY_RATE_LIMITER                0x80

// defines for the receiver selection
#define RECEIVER_PPM                            0
#define RECEIVER_SPEKTRUM                       1
#define RECEIVER_SPEKTRUM_HI_RES                2
#define RECEIVER_SPEKTRUM_LOW_RES               3
#define RECEIVER_JETI                           4
#define RECEIVER_ACT_DSL                        5
#define RECEIVER_HOTT                           6
#define RECEIVER_SBUS                           7
#define RECEIVER_USER                           8
#define RECEIVER_UNKNOWN                        0xFF

// MikroKopter Flags
// taken from
// http://svn.mikrokopter.de/mikrowebsvn/filedetails.php?repname=FlightCtrl&path=%2Ftags%2FV0.73d%2Ffc.h
//alt 0.86
//#define FCFLAG_MOTOR_RUN    0x01
//#define FCFLAG_FLY          0x02
//#define FCFLAG_CALIBRATE    0x04
//#define FCFLAG_START        0x08
//#define FCFLAG_NOTLANDUNG   0x10
//#define FCFLAG_LOWBAT       0x20
//#define FCFLAG_SPI_RX_ERR   0x40
//#define FCFLAG_I2CERR       0x80
// FC_StatusFlags 0.88
#define FC_STATUS_MOTOR_RUN                     0x01
#define FC_STATUS_FLY                           0x02
#define FC_STATUS_CALIBRATE                     0x04
#define FC_STATUS_START                         0x08
#define FC_STATUS_EMERGENCY_LANDING             0x10
#define FC_STATUS_LOWBAT                        0x20
#define FC_STATUS_VARIO_TRIM_UP                 0x40
#define FC_STATUS_VARIO_TRIM_DOWN               0x80

// FC_StatusFlags2
#define FC_STATUS2_CAREFREE                     0x01
#define FC_STATUS2_ALTITUDE_CONTROL             0x02
#define FC_STATUS2_RC_FAILSAVE_ACTIVE           0x04
#define FC_STATUS2_OUT1_ACTIVE                  0x08
#define FC_STATUS2_OUT2_ACTIVE                  0x10

// NaviCtrl Flags
// taken from
// http://mikrocontroller.cco-ev.de/mikrowebsvn/filedetails.php?repname=NaviCtrl&path=%2Ftags%2FV0.15c%2Fuart1.h
//
#define NC_FLAG_FREE                            0x01
#define NC_FLAG_PH                              0x02
#define NC_FLAG_CH                              0x04
#define NC_FLAG_RANGE_LIMIT                     0x08
#define NC_FLAG_NOSERIALLINK                    0x10
#define NC_FLAG_TARGET_REACHED                  0x20
#define NC_FLAG_MANUAL_CONTROL                  0x40
#define NC_FLAG_GPS_OK                          0x80

typedef struct
{
        unsigned char SWMajor;
        unsigned char SWMinor;
        unsigned char ProtoMajor;
        unsigned char ProtoMinor;
        unsigned char SWPatch;
        unsigned char HardwareError[5];
} __attribute__((packed)) Version_t;


// FC Debug Struct
// portions taken and adapted from
// http://svn.mikrokopter.de/mikrowebsvn/filedetails.php?repname=FlightCtrl&path=%2Ftags%2FV0.72p%2Fuart.h
//
typedef struct // 0.86
{
        uint8_t Digital[2];
        // NC: unsigned; FC: signed !!!!
        int16_t Analog[32];     // Debugvalues
} __attribute__((packed)) DebugData_t;

//******************************************************************
// uart1.h NC 0.87, zur Zeit hier nicht verwendet 28.01.2012 CB

#define AMPEL_FC                0x01
#define AMPEL_BL                0x02
#define AMPEL_NC                0x04
#define AMPEL_COMPASS           0x08


typedef struct  //0.87
{
        u8 StatusGreen;
        u8 StatusRed;
        u16 Analog[32];    // Debugwerte
} __attribute__((packed)) DebugOut_t;
//******************************************************************


// NaviCtrl OSD Structs
// portions taken and adapted from
// http://svn.mikrokopter.de/mikrowebsvn/filedetails.php?repname=NaviCtrl&path=%2Ftags%2FV0.15c%2Fuart1.h
//

typedef struct  //NC uart1.h
{
        s16 AngleNick;  // in 0.1 deg
        s16 AngleRoll;   // in 0.1 deg
        s16 Heading;    // in 0.1 deg
        u8 StickNick;
        u8 StickRoll;
        u8 StickYaw;
        u8 StickGas;
        u8 reserve[4];
} __attribute__((packed)) Data3D_t;



typedef struct
{
        s32 Longitude;          // in 1E-7 deg
        s32 Latitude;           // in 1E-7 deg
        s32 Altitude;           // in mm
        u8 Status;                      // validity of data
} __attribute__((packed)) GPS_Pos_t;


typedef struct
{
        u16 Distance;           // distance to target in cm
        s16 Bearing;            // course to target in deg
} __attribute__((packed)) GPS_PosDev_t;


// aus NC waypoint.h
typedef struct
{
        GPS_Pos_t Position;             // the gps position of the waypoint, see ubx.h for details
        s16 Heading;                    // orientation, 0 no action, 1...360 fix heading, neg. = Index to POI in WP List
        u8  ToleranceRadius;            // in meters, if the MK is within that range around the target, then the next target is triggered
        u8  HoldTime;                   // in seconds, if the was once in the tolerance area around a WP, this time defines the delay before the next WP is triggered
        u8  Event_Flag;                 // future implementation
        u8  Index;                      // to indentify different waypoints, workaround for bad communications PC <-> NC
        u8  Type;                               // typeof Waypoint
        u8  WP_EventChannelValue;       //
        u8  AltitudeRate;               // rate to change the setpoint
        u8  Speed;                      // rate to change the Position
        u8  CamAngle;                   // Camera servo angle
        u8  reserve[6];                 // reserve
} __attribute__((packed)) Point_t;


// NaviCtrl struct
// taken from
// http://mikrocontroller.cco-ev.de/mikrowebsvn/filedetails.php?repname=NaviCtrl&path=%2Ftags%2FV0.15c%2Fuart1.h
//
#define NAVIDATA_VERSION 5

typedef struct
{
        u8 Version;                                     // version of the data structure
        GPS_Pos_t CurrentPosition;                      // see ubx.h for details
        GPS_Pos_t TargetPosition;
        GPS_PosDev_t TargetPositionDeviation;
        GPS_Pos_t HomePosition;
        GPS_PosDev_t HomePositionDeviation;
        u8  WaypointIndex;                              // index of current waypoints running from 0 to WaypointNumber-1
        u8  WaypointNumber;                             // number of stored waypoints
        u8  SatsInUse;                                  // number of satellites used for position solution
        s16 Altimeter;                                  // hight according to air pressure
        s16 Variometer;                                 // climb(+) and sink(-) rate
        u16 FlyingTime;                                 // in seconds
        u8  UBat;                                       // Battery Voltage in 0.1 Volts
        u16 GroundSpeed;                                // speed over ground in cm/s (2D)
        s16 Heading;                                    // current flight direction in ° as angle to north
        s16 CompassHeading;                             // current compass value in °
        s8  AngleNick;                                  // current Nick angle in 1°
        s8  AngleRoll;                                  // current Rick angle in 1°
        u8  RC_Quality;                                 // RC_Quality
        u8  FCStatusFlags;                              // Flags from FC
        u8  NCFlags;                                    // Flags from NC
        u8  Errorcode;                                  // 0 --> okay
        u8  OperatingRadius;                            // current operation radius around the Home Position in m
        s16 TopSpeed;                                   // velocity in vertical direction in cm/s
        u8  TargetHoldTime;                             // time in s to stay at the given target, counts down to 0 if target has been reached
        u8  FCStatusFlags2;                             // StatusFlags2 (since version 5 added)
        s16 SetpointAltitude;                           // setpoint for altitude
        u8  Gas;                                        // for future use
        u16 Current;                                    // actual current in 0.1A steps
        u16 UsedCapacity;                               // used capacity in mAh
} __attribute__((packed)) NaviData_t;


typedef struct
{
        uint8_t Version;                        // the version of the BL (0 = old)
        uint8_t SetPoint;                       // written by attitude controller
        uint8_t SetPointLowerBits;      // for higher Resolution of new BLs
        uint8_t State;                          // 7 bit for I2C error counter, highest bit indicates if motor is present
        uint8_t ReadMode;                       // select data to read
        // the following bytes must be exactly in that order!
        uint8_t Current;                        // in 0.1 A steps, read back from BL
        uint8_t MaxPWM;                         // read back from BL -> is less than 255 if BL is in current limit, not running (250) or starting (40)
        int8_t  Temperature;            // old BL-Ctrl will return a 255 here, the new version the temp. in �C
} __attribute__((packed)) MotorData_t;

typedef struct
{
        uint8_t Revision;                       // must be BL_REVISION
        uint8_t SetMask;                        // settings mask
        uint8_t PwmScaling;                     // maximum value of control pwm, acts like a thrust limit
        uint8_t CurrentLimit;           // current limit in A
        uint8_t TempLimit;                      // in �C
        uint8_t CurrentScaling;         // scaling factor for current measurement
        uint8_t BitConfig;                      // see defines above
        uint8_t crc;                            // checksum
}  __attribute__((packed)) BLConfig_t;


// Aus FC eeprom.h
//
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 MaxHoehe;               // 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_GPS_Z;            // 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 NaviGpsModeControl;     // 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 NaviGpsACC;
  unsigned char NaviGpsMinSat;
  unsigned char NaviStickThreshold;
  unsigned char NaviWindCorrection;
  unsigned char NaviAccCompensation;    // New since 0.86 -> was: SpeedCompensation
  unsigned char NaviOperatingRadius;
  unsigned char NaviAngleLimitation;
  unsigned char NaviPH_LoginTime;
  //---Ext.Ctrl---------------------------------------------
  unsigned char ExternalControl;         // for serial Control
  //---CareFree---------------------------------------------
  unsigned char OrientationAngle;        // Where is the front-direction?
  unsigned char CareFreeModeControl;         // 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 BitConfig;          // (war Loop-Cfg) Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
  unsigned char ServoCompInvert;    // //  0x01 = Nick, 0x02 = Roll   0 oder 1  // WICHTIG!!! am Ende lassen
  unsigned char ExtraConfig;        // bitcodiert
  unsigned char GlobalConfig3;      // bitcodiert
  char Name[12];
  unsigned char crc;                                // must be the last byte!                                   // MUST BE THE LAST BYTE!
} __attribute__((packed)) mk_param_struct_t;

#endif