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:
parent
3dcd93e66b
commit
931102bf37
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user