Prof Greg Egan
/
UAVXArm-GKE
UAVX Multicopter Flight Controller.
Diff: stats.c
- Revision:
- 0:62a1c91a859a
- Child:
- 2:90292f8bd179
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/stats.c Fri Feb 18 22:28:05 2011 +0000 @@ -0,0 +1,137 @@ +// =============================================================================================== +// = UAVXArm Quadrocopter Controller = +// = Copyright (c) 2008 by Prof. Greg Egan = +// = Original V3.15 Copyright (c) 2007 Ing. Wolfgang Mahringer = +// = http://code.google.com/p/uavp-mods/ http://uavp.ch = +// =============================================================================================== + +// This is part of UAVXArm. + +// UAVXArm 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 3 of the +// License, or (at your option) any later version. + +// UAVXArm 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, see http://www.gnu.org/licenses/ + +#include "UAVXArm.h" + +void ZeroStats(void); +void ReadStatsPX(void); +void WriteStatsPX(void); +void ShowStats(void); + +int16 Stats[MAX_STATS]; + +#define INIT_MIN 1000L + +void ZeroStats(void) +{ + int8 s; + + for (s = 0 ; s < MAX_STATS ; s++ ) + Stats[s] = 0; + + Stats[MinHDiluteS] = INIT_MIN; + Stats[MaxHDiluteS] = 0; + Stats[MinROCS] = INIT_MIN; + Stats[MaxROCS] = 0; + Stats[GPSMinSatsS] = INIT_MIN; + Stats[GPSMaxSatsS] = 0; + Stats[MinTempS] = INIT_MIN; + Stats[MaxTempS] = 0; + +} // ZeroStats + +void ReadStatsPX(void) +{ + int8 s; + + for (s = 0 ; s < MAX_STATS ; s++ ) + Stats[s] = Read16PX(STATS_ADDR_PX + s*2); +} // InitStats + +void WriteStatsPX() +{ + int8 s, i; + int16 Temp; + + if ( P[ESCType] != ESCPPM ) + for ( i = 0; i < NoOfI2CESCOutputs; i++ ) + Stats[ESCI2CFailS] += ESCI2CFail[i]; + + for (s = 0 ; s < MAX_STATS ; s++ ) + Write16PX(STATS_ADDR_PX + s*2, Stats[s]); + + Temp = ToPercent(CruiseThrottle, OUT_MAXIMUM); + WritePX(PercentCruiseThr, Temp); + +} // WriteStatsPX + +void ShowStats(void) +{ + TxString("\r\nFlight Statistics\r\n"); + + if ( Stats[BadS] != 0 ) + { + TxString("Misc(gke): \t");TxVal32((int32)Stats[BadS],0,' '); TxVal32((int32)Stats[BadNumS],0,' ');TxNextLine(); + } + + TxString("\r\nSensor/Rx Failures (Count)\r\n"); + TxString("I2CBus: \t");TxVal32((int32)Stats[I2CFailS],0,0); TxNextLine(); + TxString("GPS: \t");TxVal32((int32)Stats[GPSInvalidS],0,0); TxNextLine(); + TxString("Acc: \t");TxVal32((int32)Stats[AccFailS], 0, 0); TxNextLine(); + TxString("Gyro: \t");TxVal32((int32)Stats[GyroFailS], 0, 0); TxNextLine(); + TxString("Comp: \t");TxVal32((int32)Stats[CompassFailS], 0, 0); TxNextLine(); + TxString("Baro: \t");TxVal32((int32)Stats[BaroFailS],0 , 0); TxNextLine(); + if ( P[ESCType] != ESCPPM ) + { + TxString("I2CESC: \t");TxVal32((int32)Stats[ESCI2CFailS],0 , 0); TxNextLine(); + } + TxString("Rx: \t");TxVal32((int32)Stats[RCGlitchesS],0,' '); TxNextLine(); + TxString("Failsafes:\t");TxVal32((int32)Stats[RCFailsafesS],0,' '); TxNextLine(); + + TxString("\r\nBaro\r\n"); // can only display to 3276M + TxString("Alt: \t");TxVal32((int32)Stats[BaroRelAltitudeS], 1, ' '); TxString("M \r\n"); + if ( Stats[MinROCS] < INIT_MIN ) + { + TxString("ROC: \t");TxVal32((int32)Stats[MinROCS], 1, ' '); + TxVal32((int32)Stats[MaxROCS], 1, ' '); TxString("M/S\r\n"); + } + + if ( Stats[MinTempS] < INIT_MIN ) + { + TxString("Ambient: \t");TxVal32((int32)Stats[MinTempS], 1, ' '); + TxVal32((int32)Stats[MaxTempS], 1, ' '); TxString("C\r\n"); + } + + TxString("\r\nGPS\r\n"); + TxString("Alt: \t");TxVal32((int32)Stats[GPSAltitudeS], 1, ' '); TxString("M\r\n"); + #ifdef GPS_INC_GROUNDSPPXD + TxString("Vel: \t");TxVal32(ConvertGPSToM((int32)Stats[GPSVelS]), 1, ' '); TxString("M/S\r\n"); + #endif // GPS_INC_GROUNDSPPXD + + if ( Stats[GPSMinSatsS] < INIT_MIN ) + { + TxString("Sats: \t");TxVal32((int32)Stats[GPSMinSatsS], 0, ' '); + TxVal32((int32)Stats[GPSMaxSatsS], 0, 0); TxNextLine(); + } + + if ( Stats[MinHDiluteS] < INIT_MIN ) + { + TxString("HDilute: \t");TxVal32((int32)Stats[MinHDiluteS], 2, ' '); + TxVal32((int32)Stats[MaxHDiluteS], 2, 0); TxNextLine(); + } + + if ( Stats[NavValidS] ) + TxString("Navigation ENABLED\r\n"); + else + TxString("Navigation DISABLED (No fix at launch)\r\n"); + +} // ShowStats + +