/**************************************************************************** * Copyright (C) 2009 by Claas Anders "CaScAdE" Rathje * * admiralcascade@gmail.com * * Project-URL: http://www.mylifesucks.de/oss/c-osd/ * * * * 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. * ****************************************************************************/ /* ########################################################################## * gain some fake arm compat :) * ##########################################################################*/ #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 typedef struct { unsigned char SWMajor; unsigned char SWMinor; unsigned char ProtoMajor; unsigned char ProtoMinor; unsigned char SWPatch; unsigned char Reserved[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 { uint8_t Digital[2]; // NC: unsigned; FC: signed !!!! int16_t Analog[32]; // Debugvalues } __attribute__((packed)) DebugData_t; typedef struct { uint8_t line; uint8_t text[20]; } __attribute__((packed)) Display_t; typedef struct { char Revision; char Name[12]; signed char Motor[16][4]; } __attribute__((packed)) Mixer_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 { s16 AngleNick; // in 0.1 deg s16 AngleRoll; // in 0.1 deg s16 Heading; // in 0.1 deg u8 reserve[8]; } __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 { s16 Distance; // distance to target in cm s16 Bearing; // course to target in deg } __attribute__((packed)) GPS_PosDev_t; #if 0 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 MKFlags; // 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 Reserve[4]; // for future use } __attribute__((packed)) NaviData_t; #endif 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 FCFlags; // 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 RC_RSSI; // Receiver signal strength (since version 2 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; /* * MikroKopter Flags * taken from * http://svn.mikrokopter.de/mikrowebsvn/filedetails.php?repname=FlightCtrl&path=%2Ftags%2FV0.73d%2Ffc.h */ #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 /* * 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_8 0x80 #if 0 typedef struct { unsigned char Kanalbelegung[8]; // 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 Gier_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 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 UfoAusrichtung; // X oder + Formation 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; // 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 NaviSpeedCompensation; unsigned char NaviOperatingRadius; unsigned char NaviAngleLimitation; unsigned char NaviPH_LoginTime; //---Ext.Ctrl--------------------------------------------- unsigned char ExternalControl; // for serial Control //------------------------------------------------ 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 char Name[12]; } __attribute__((packed)) mk_param_struct_t; #endif typedef struct { 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 Gier_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 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 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 NaviSpeedCompensation; unsigned char NaviOperatingRadius; unsigned char NaviAngleLimitation; unsigned char NaviPH_LoginTime; //---Ext.Ctrl--------------------------------------------- unsigned char ExternalControl; // for serial Control //------------------------------------------------ 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 char Name[12]; } __attribute__((packed)) mk_param_struct_t; #define STRUCT_PARAM_LAENGE sizeof(mk_param_struct_t)