1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2024-12-02 10:24:11 +01:00

Added telemetry functions.

git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@2834 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
pip 2011-02-21 15:10:06 +00:00 committed by pip
parent 1bb5ed54ff
commit 3dcd93e66b
2 changed files with 118 additions and 2 deletions

View File

@ -40,6 +40,12 @@ UAVObjectUtilManager::UAVObjectUtilManager()
UAVObjectUtilManager::~UAVObjectUtilManager()
{
// while (!queue.isEmpty())
{
}
disconnect();
if (mutex)
{
delete mutex;
@ -120,7 +126,7 @@ int UAVObjectUtilManager::setHomeLocation(double LLA[3], bool save_to_sdcard)
return -1; // error
// ******************
// save the new home location details
// save the new settings
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
if (!pm) return -2;
@ -158,7 +164,7 @@ int UAVObjectUtilManager::setHomeLocation(double LLA[3], bool save_to_sdcard)
obj->updated();
// ******************
// save the new location to SD card
// save the new setting to SD card
if (save_to_sdcard)
saveObjectToSD(obj);
@ -195,12 +201,28 @@ int UAVObjectUtilManager::getHomeLocation(bool &set, double LLA[3])
UAVDataObject *obj = dynamic_cast<UAVDataObject*>(obm->getObject(QString("HomeLocation")));
if (!obj) return -3;
// obj->requestUpdate();
set = obj->getField("Set")->getValue().toBool();
LLA[0] = obj->getField("Latitude")->getDouble() * 1e-7;
LLA[1] = obj->getField("Longitude")->getDouble() * 1e-7;
LLA[2] = obj->getField("Altitude")->getDouble();
if (LLA[0] != LLA[0]) LLA[0] = 0; // nan detection
else
if (LLA[0] > 90) LLA[0] = 90;
else
if (LLA[0] < -90) LLA[0] = -90;
if (LLA[1] != LLA[1]) LLA[1] = 0; // nan detection
else
if (LLA[1] > 180) LLA[1] = 180;
else
if (LLA[1] < -180) LLA[1] = -180;
if (LLA[2] != LLA[2]) LLA[2] = 0; // nan detection
return 0; // OK
}
@ -217,6 +239,8 @@ int UAVObjectUtilManager::getHomeLocation(bool &set, double LLA[3], double ECEF[
UAVDataObject *obj = dynamic_cast<UAVDataObject*>(obm->getObject(QString("HomeLocation")));
if (!obj) return -3;
// obj->requestUpdate();
UAVObjectField *ECEF_field = obj->getField(QString("ECEF"));
if (!ECEF_field) return -4;
@ -260,6 +284,8 @@ int UAVObjectUtilManager::getGPSPosition(double LLA[3])
UAVDataObject *obj = dynamic_cast<UAVDataObject*>(obm->getObject(QString("GPSPosition")));
if (!obj) return -3;
// obj->requestUpdate();
LLA[0] = obj->getField(QString("Latitude"))->getDouble() * 1e-7;
LLA[1] = obj->getField(QString("Longitude"))->getDouble() * 1e-7;
LLA[2] = obj->getField(QString("Altitude"))->getDouble();
@ -282,3 +308,88 @@ int UAVObjectUtilManager::getGPSPosition(double LLA[3])
}
// ******************************
// telemetry port
int UAVObjectUtilManager::setTelemetrySerialPortSpeed(QString speed, bool save_to_sdcard)
{
QMutexLocker locker(mutex);
// ******************
// save the new settings
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
if (!pm) return -1;
UAVObjectManager *obm = pm->getObject<UAVObjectManager>();
if (!obm) return -2;
UAVDataObject *obj = dynamic_cast<UAVDataObject*>(obm->getObject(QString("/*TelemetrySettings*/")));
if (!obj) return -3;
UAVObjectField *field = obj->getField(QString("Speed"));
if (!field) return -4;
field->setValue(speed);
obj->updated();
// ******************
// save the new setting to SD card
if (save_to_sdcard)
saveObjectToSD(obj);
// ******************
return 0; // OK
}
int UAVObjectUtilManager::getTelemetrySerialPortSpeed(QString &speed)
{
QMutexLocker locker(mutex);
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
if (!pm) return -1;
UAVObjectManager *obm = pm->getObject<UAVObjectManager>();
if (!obm) return -2;
UAVDataObject *obj = dynamic_cast<UAVDataObject*>(obm->getObject(QString("TelemetrySettings")));
if (!obj) return -3;
// obj->requestUpdate();
UAVObjectField *field = obj->getField(QString("Speed"));
if (!field) return -4;
speed = field->getValue().toString();
return 0; // OK
}
int UAVObjectUtilManager::getTelemetrySerialPortSpeeds(QComboBox *comboBox)
{
QMutexLocker locker(mutex);
if (!comboBox) return -1;
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
if (!pm) return -2;
UAVObjectManager *obm = pm->getObject<UAVObjectManager>();
if (!obm) return -3;
UAVDataObject *obj = dynamic_cast<UAVDataObject*>(obm->getObject(QString("TelemetrySettings")));
if (!obj) return -4;
// obj->requestUpdate();
UAVObjectField *field = obj->getField(QString("Speed"));
if (!field) return -5;
comboBox->addItems(field->getOptions());
return 0; // OK
}
// ******************************

View File

@ -40,6 +40,7 @@
#include <QObject>
#include <QMutex>
#include <QQueue>
#include <QComboBox>
class UAVOBJECTUTIL_EXPORT UAVObjectUtilManager: public QObject
{
@ -55,6 +56,10 @@ public:
int getGPSPosition(double LLA[3]);
int setTelemetrySerialPortSpeed(QString speed, bool save_to_sdcard);
int getTelemetrySerialPortSpeed(QString &speed);
int getTelemetrySerialPortSpeeds(QComboBox *comboBox);
private:
QMutex *mutex;