1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-02-27 16:54:15 +01:00

Added more error checking (checking for NULL pointers)

git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@2835 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
pip 2011-02-21 15:33:20 +00:00 committed by pip
parent 3dcd93e66b
commit 931102bf37

View File

@ -33,6 +33,9 @@
#include <QMutexLocker> #include <QMutexLocker>
#include <QDebug> #include <QDebug>
// ******************************
// constructor/destructor
UAVObjectUtilManager::UAVObjectUtilManager() UAVObjectUtilManager::UAVObjectUtilManager()
{ {
mutex = new QMutex(QMutex::Recursive); mutex = new QMutex(QMutex::Recursive);
@ -82,10 +85,10 @@ void UAVObjectUtilManager::saveNextObject()
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
if (!pm) return; if (!pm) return;
UAVObjectManager *obm = pm->getObject<UAVObjectManager>(); UAVObjectManager *om = pm->getObject<UAVObjectManager>();
if (!obm) return; if (!om) return;
ObjectPersistence *objper = dynamic_cast<ObjectPersistence *>(obm->getObject(ObjectPersistence::NAME)); ObjectPersistence *objper = dynamic_cast<ObjectPersistence *>(om->getObject(ObjectPersistence::NAME));
connect(objper, SIGNAL(transactionCompleted(UAVObject *, bool)), this, SLOT(transactionCompleted(UAVObject *, bool))); connect(objper, SIGNAL(transactionCompleted(UAVObject *, bool)), this, SLOT(transactionCompleted(UAVObject *, bool)));
ObjectPersistence::DataFields data; ObjectPersistence::DataFields data;
@ -119,6 +122,7 @@ int UAVObjectUtilManager::setHomeLocation(double LLA[3], bool save_to_sdcard)
double ECEF[3]; double ECEF[3];
double RNE[9]; double RNE[9];
double Be[3]; double Be[3];
UAVObjectField *field;
QMutexLocker locker(mutex); QMutexLocker locker(mutex);
@ -131,10 +135,10 @@ int UAVObjectUtilManager::setHomeLocation(double LLA[3], bool save_to_sdcard)
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
if (!pm) return -2; if (!pm) return -2;
UAVObjectManager *obm = pm->getObject<UAVObjectManager>(); UAVObjectManager *om = pm->getObject<UAVObjectManager>();
if (!obm) return -3; if (!om) return -3;
UAVDataObject *obj = dynamic_cast<UAVDataObject*>(obm->getObject(QString("HomeLocation"))); UAVDataObject *obj = dynamic_cast<UAVDataObject*>(om->getObject(QString("HomeLocation")));
if (!obj) return -4; if (!obj) return -4;
UAVObjectField *ECEF_field = obj->getField(QString("ECEF")); UAVObjectField *ECEF_field = obj->getField(QString("ECEF"));
@ -146,9 +150,17 @@ int UAVObjectUtilManager::setHomeLocation(double LLA[3], bool save_to_sdcard)
UAVObjectField *Be_field = obj->getField(QString("Be")); UAVObjectField *Be_field = obj->getField(QString("Be"));
if (!Be_field) return -7; if (!Be_field) return -7;
obj->getField("Latitude")->setDouble(LLA[0] * 10e6); field = obj->getField("Latitude");
obj->getField("Longitude")->setDouble(LLA[1] * 10e6); if (!field) return -8;
obj->getField("Altitude")->setDouble(LLA[2]); field->setDouble(LLA[0] * 10e6);
field = obj->getField("Longitude");
if (!field) return -9;
field->setDouble(LLA[1] * 10e6);
field = obj->getField("Altitude");
if (!field) return -10;
field->setDouble(LLA[2]);
for (int i = 0; i < 3; i++) for (int i = 0; i < 3; i++)
ECEF_field->setDouble(ECEF[i] * 100, i); ECEF_field->setDouble(ECEF[i] * 100, i);
@ -159,7 +171,9 @@ int UAVObjectUtilManager::setHomeLocation(double LLA[3], bool save_to_sdcard)
for (int i = 0; i < 3; i++) for (int i = 0; i < 3; i++)
Be_field->setDouble(Be[i], i); Be_field->setDouble(Be[i], i);
obj->getField("Set")->setValue("TRUE"); field = obj->getField("Set");
if (!field) return -11;
field->setValue("TRUE");
obj->updated(); obj->updated();
@ -190,24 +204,36 @@ int UAVObjectUtilManager::setHomeLocation(double LLA[3], bool save_to_sdcard)
int UAVObjectUtilManager::getHomeLocation(bool &set, double LLA[3]) int UAVObjectUtilManager::getHomeLocation(bool &set, double LLA[3])
{ {
UAVObjectField *field;
QMutexLocker locker(mutex); QMutexLocker locker(mutex);
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
if (!pm) return -1; if (!pm) return -1;
UAVObjectManager *obm = pm->getObject<UAVObjectManager>(); UAVObjectManager *om = pm->getObject<UAVObjectManager>();
if (!obm) return -2; if (!om) return -2;
UAVDataObject *obj = dynamic_cast<UAVDataObject*>(obm->getObject(QString("HomeLocation"))); UAVDataObject *obj = dynamic_cast<UAVDataObject*>(om->getObject(QString("HomeLocation")));
if (!obj) return -3; if (!obj) return -3;
// obj->requestUpdate(); // obj->requestUpdate();
set = obj->getField("Set")->getValue().toBool(); field = obj->getField("Set");
if (!field) return -4;
set = field->getValue().toBool();
LLA[0] = obj->getField("Latitude")->getDouble() * 1e-7; field = obj->getField("Latitude");
LLA[1] = obj->getField("Longitude")->getDouble() * 1e-7; if (!field) return -5;
LLA[2] = obj->getField("Altitude")->getDouble(); LLA[0] = field->getDouble() * 1e-7;
field = obj->getField("Longitude");
if (!field) return -6;
LLA[1] = field->getDouble() * 1e-7;
field = obj->getField("Altitude");
if (!field) return -7;
LLA[2] = field->getDouble();
if (LLA[0] != LLA[0]) LLA[0] = 0; // nan detection if (LLA[0] != LLA[0]) LLA[0] = 0; // nan detection
else else
@ -228,42 +254,51 @@ int UAVObjectUtilManager::getHomeLocation(bool &set, double LLA[3])
int UAVObjectUtilManager::getHomeLocation(bool &set, double LLA[3], double ECEF[3], double RNE[9], double Be[3]) int UAVObjectUtilManager::getHomeLocation(bool &set, double LLA[3], double ECEF[3], double RNE[9], double Be[3])
{ {
UAVObjectField *field;
QMutexLocker locker(mutex); QMutexLocker locker(mutex);
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
if (!pm) return -1; if (!pm) return -1;
UAVObjectManager *obm = pm->getObject<UAVObjectManager>(); UAVObjectManager *om = pm->getObject<UAVObjectManager>();
if (!obm) return -2; if (!om) return -2;
UAVDataObject *obj = dynamic_cast<UAVDataObject*>(obm->getObject(QString("HomeLocation"))); UAVDataObject *obj = dynamic_cast<UAVDataObject*>(om->getObject(QString("HomeLocation")));
if (!obj) return -3; if (!obj) return -3;
// obj->requestUpdate(); // obj->requestUpdate();
UAVObjectField *ECEF_field = obj->getField(QString("ECEF")); field = obj->getField("Set");
if (!ECEF_field) return -4; if (!field) return -4;
set = field->getValue().toBool();
UAVObjectField *RNE_field = obj->getField(QString("RNE")); field = obj->getField("Latitude");
if (!RNE_field) return -5; if (!field) return -5;
LLA[0] = field->getDouble() * 1e-7;
UAVObjectField *Be_field = obj->getField(QString("Be")); field = obj->getField("Longitude");
if (!Be_field) return -6; if (!field) return -6;
LLA[1] = field->getDouble() * 1e-7;
set = obj->getField("Set")->getValue().toBool(); field = obj->getField("Altitude");
if (!field) return -7;
LLA[0] = obj->getField("Latitude")->getDouble() * 1e-7; LLA[2] = field->getDouble();
LLA[1] = obj->getField("Longitude")->getDouble() * 1e-7;
LLA[2] = obj->getField("Altitude")->getDouble();
field = obj->getField(QString("ECEF"));
if (!field) return -8;
for (int i = 0; i < 3; i++) for (int i = 0; i < 3; i++)
ECEF[i] = ECEF_field->getDouble(i); ECEF[i] = field->getDouble(i);
field = obj->getField(QString("RNE"));
if (!field) return -9;
for (int i = 0; i < 9; i++) for (int i = 0; i < 9; i++)
RNE[i] = RNE_field->getDouble(i); RNE[i] = field->getDouble(i);
field = obj->getField(QString("Be"));
if (!field) return -10;
for (int i = 0; i < 3; i++) for (int i = 0; i < 3; i++)
Be[i] = Be_field->getDouble(i); Be[i] = field->getDouble(i);
return 0; // OK return 0; // OK
} }
@ -273,22 +308,32 @@ int UAVObjectUtilManager::getHomeLocation(bool &set, double LLA[3], double ECEF[
int UAVObjectUtilManager::getGPSPosition(double LLA[3]) int UAVObjectUtilManager::getGPSPosition(double LLA[3])
{ {
UAVObjectField *field;
QMutexLocker locker(mutex); QMutexLocker locker(mutex);
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
if (!pm) return -1; if (!pm) return -1;
UAVObjectManager *obm = pm->getObject<UAVObjectManager>(); UAVObjectManager *om = pm->getObject<UAVObjectManager>();
if (!obm) return -2; if (!om) return -2;
UAVDataObject *obj = dynamic_cast<UAVDataObject*>(obm->getObject(QString("GPSPosition"))); UAVDataObject *obj = dynamic_cast<UAVDataObject*>(om->getObject(QString("GPSPosition")));
if (!obj) return -3; if (!obj) return -3;
// obj->requestUpdate(); // obj->requestUpdate();
LLA[0] = obj->getField(QString("Latitude"))->getDouble() * 1e-7; field = obj->getField(QString("Latitude"));
LLA[1] = obj->getField(QString("Longitude"))->getDouble() * 1e-7; if (!field) return -4;
LLA[2] = obj->getField(QString("Altitude"))->getDouble(); LLA[0] = field->getDouble() * 1e-7;
field = obj->getField(QString("Longitude"));
if (!field) return -5;
LLA[1] = field->getDouble() * 1e-7;
field = obj->getField(QString("Altitude"));
if (!field) return -6;
LLA[2] = field->getDouble();
if (LLA[0] != LLA[0]) LLA[0] = 0; // nan detection if (LLA[0] != LLA[0]) LLA[0] = 0; // nan detection
else else
@ -312,6 +357,8 @@ int UAVObjectUtilManager::getGPSPosition(double LLA[3])
int UAVObjectUtilManager::setTelemetrySerialPortSpeed(QString speed, bool save_to_sdcard) int UAVObjectUtilManager::setTelemetrySerialPortSpeed(QString speed, bool save_to_sdcard)
{ {
UAVObjectField *field;
QMutexLocker locker(mutex); QMutexLocker locker(mutex);
// ****************** // ******************
@ -320,15 +367,14 @@ int UAVObjectUtilManager::setTelemetrySerialPortSpeed(QString speed, bool save_t
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
if (!pm) return -1; if (!pm) return -1;
UAVObjectManager *obm = pm->getObject<UAVObjectManager>(); UAVObjectManager *om = pm->getObject<UAVObjectManager>();
if (!obm) return -2; if (!om) return -2;
UAVDataObject *obj = dynamic_cast<UAVDataObject*>(obm->getObject(QString("/*TelemetrySettings*/"))); UAVDataObject *obj = dynamic_cast<UAVDataObject*>(om->getObject(QString("/*TelemetrySettings*/")));
if (!obj) return -3; if (!obj) return -3;
UAVObjectField *field = obj->getField(QString("Speed")); field = obj->getField(QString("Speed"));
if (!field) return -4; if (!field) return -4;
field->setValue(speed); field->setValue(speed);
obj->updated(); obj->updated();
@ -346,22 +392,23 @@ int UAVObjectUtilManager::setTelemetrySerialPortSpeed(QString speed, bool save_t
int UAVObjectUtilManager::getTelemetrySerialPortSpeed(QString &speed) int UAVObjectUtilManager::getTelemetrySerialPortSpeed(QString &speed)
{ {
UAVObjectField *field;
QMutexLocker locker(mutex); QMutexLocker locker(mutex);
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
if (!pm) return -1; if (!pm) return -1;
UAVObjectManager *obm = pm->getObject<UAVObjectManager>(); UAVObjectManager *om = pm->getObject<UAVObjectManager>();
if (!obm) return -2; if (!om) return -2;
UAVDataObject *obj = dynamic_cast<UAVDataObject*>(obm->getObject(QString("TelemetrySettings"))); UAVDataObject *obj = dynamic_cast<UAVDataObject*>(om->getObject(QString("TelemetrySettings")));
if (!obj) return -3; if (!obj) return -3;
// obj->requestUpdate(); // obj->requestUpdate();
UAVObjectField *field = obj->getField(QString("Speed")); field = obj->getField(QString("Speed"));
if (!field) return -4; if (!field) return -4;
speed = field->getValue().toString(); speed = field->getValue().toString();
return 0; // OK return 0; // OK
@ -369,6 +416,8 @@ int UAVObjectUtilManager::getTelemetrySerialPortSpeed(QString &speed)
int UAVObjectUtilManager::getTelemetrySerialPortSpeeds(QComboBox *comboBox) int UAVObjectUtilManager::getTelemetrySerialPortSpeeds(QComboBox *comboBox)
{ {
UAVObjectField *field;
QMutexLocker locker(mutex); QMutexLocker locker(mutex);
if (!comboBox) return -1; if (!comboBox) return -1;
@ -376,17 +425,16 @@ int UAVObjectUtilManager::getTelemetrySerialPortSpeeds(QComboBox *comboBox)
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
if (!pm) return -2; if (!pm) return -2;
UAVObjectManager *obm = pm->getObject<UAVObjectManager>(); UAVObjectManager *om = pm->getObject<UAVObjectManager>();
if (!obm) return -3; if (!om) return -3;
UAVDataObject *obj = dynamic_cast<UAVDataObject*>(obm->getObject(QString("TelemetrySettings"))); UAVDataObject *obj = dynamic_cast<UAVDataObject*>(om->getObject(QString("TelemetrySettings")));
if (!obj) return -4; if (!obj) return -4;
// obj->requestUpdate(); // obj->requestUpdate();
UAVObjectField *field = obj->getField(QString("Speed")); field = obj->getField(QString("Speed"));
if (!field) return -5; if (!field) return -5;
comboBox->addItems(field->getOptions()); comboBox->addItems(field->getOptions());
return 0; // OK return 0; // OK