mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2024-11-30 08:24:11 +01:00
Merge branch 'next' into thread/OP-39
This commit is contained in:
commit
59d71c2b98
@ -33,7 +33,6 @@
|
|||||||
#define PIOS_INCLUDE_SYS
|
#define PIOS_INCLUDE_SYS
|
||||||
#define PIOS_INCLUDE_DELAY
|
#define PIOS_INCLUDE_DELAY
|
||||||
#define PIOS_INCLUDE_LED
|
#define PIOS_INCLUDE_LED
|
||||||
#define PIOS_INCLUDE_SDCARD
|
|
||||||
#define PIOS_INCLUDE_FREERTOS
|
#define PIOS_INCLUDE_FREERTOS
|
||||||
#define PIOS_INCLUDE_COM
|
#define PIOS_INCLUDE_COM
|
||||||
#define PIOS_INCLUDE_UDP
|
#define PIOS_INCLUDE_UDP
|
||||||
|
@ -463,15 +463,6 @@ static void updateSystemAlarms()
|
|||||||
AlarmsClear(SYSTEMALARMS_ALARM_STACKOVERFLOW);
|
AlarmsClear(SYSTEMALARMS_ALARM_STACKOVERFLOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(PIOS_INCLUDE_SDCARD)
|
|
||||||
// Check for SD card
|
|
||||||
if (PIOS_SDCARD_IsMounted() == 0) {
|
|
||||||
AlarmsSet(SYSTEMALARMS_ALARM_SDCARD, SYSTEMALARMS_ALARM_ERROR);
|
|
||||||
} else {
|
|
||||||
AlarmsClear(SYSTEMALARMS_ALARM_SDCARD);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Check for event errors
|
// Check for event errors
|
||||||
UAVObjGetStats(&objStats);
|
UAVObjGetStats(&objStats);
|
||||||
EventGetStats(&evStats);
|
EventGetStats(&evStats);
|
||||||
|
@ -33,7 +33,6 @@
|
|||||||
#define PIOS_INCLUDE_SYS
|
#define PIOS_INCLUDE_SYS
|
||||||
#define PIOS_INCLUDE_DELAY
|
#define PIOS_INCLUDE_DELAY
|
||||||
#define PIOS_INCLUDE_LED
|
#define PIOS_INCLUDE_LED
|
||||||
#define PIOS_INCLUDE_SDCARD
|
|
||||||
#define PIOS_INCLUDE_FREERTOS
|
#define PIOS_INCLUDE_FREERTOS
|
||||||
#define PIOS_INCLUDE_COM
|
#define PIOS_INCLUDE_COM
|
||||||
#define PIOS_INCLUDE_UDP
|
#define PIOS_INCLUDE_UDP
|
||||||
|
@ -46,13 +46,6 @@
|
|||||||
#define UAVOBJ_GCS_TELEMETRY_UPDATE_MODE_SHIFT 6
|
#define UAVOBJ_GCS_TELEMETRY_UPDATE_MODE_SHIFT 6
|
||||||
#define UAVOBJ_UPDATE_MODE_MASK 0x3
|
#define UAVOBJ_UPDATE_MODE_MASK 0x3
|
||||||
|
|
||||||
|
|
||||||
// FIXME: All this typedef for SDCARD needs to be abstracted away
|
|
||||||
#if !defined(PIOS_INCLUDE_SDCARD)
|
|
||||||
typedef struct {} FILEINFO;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
typedef void* UAVObjHandle;
|
typedef void* UAVObjHandle;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -164,8 +157,10 @@ int32_t UAVObjPack(UAVObjHandle obj_handle, uint16_t instId, uint8_t* dataOut);
|
|||||||
int32_t UAVObjSave(UAVObjHandle obj_handle, uint16_t instId);
|
int32_t UAVObjSave(UAVObjHandle obj_handle, uint16_t instId);
|
||||||
int32_t UAVObjLoad(UAVObjHandle obj_handle, uint16_t instId);
|
int32_t UAVObjLoad(UAVObjHandle obj_handle, uint16_t instId);
|
||||||
int32_t UAVObjDelete(UAVObjHandle obj_handle, uint16_t instId);
|
int32_t UAVObjDelete(UAVObjHandle obj_handle, uint16_t instId);
|
||||||
|
#if defined(PIOS_INCLUDE_SDCARD)
|
||||||
int32_t UAVObjSaveToFile(UAVObjHandle obj_handle, uint16_t instId, FILEINFO* file);
|
int32_t UAVObjSaveToFile(UAVObjHandle obj_handle, uint16_t instId, FILEINFO* file);
|
||||||
UAVObjHandle UAVObjLoadFromFile(FILEINFO* file);
|
UAVObjHandle UAVObjLoadFromFile(FILEINFO* file);
|
||||||
|
#endif
|
||||||
int32_t UAVObjSaveSettings();
|
int32_t UAVObjSaveSettings();
|
||||||
int32_t UAVObjLoadSettings();
|
int32_t UAVObjLoadSettings();
|
||||||
int32_t UAVObjDeleteSettings();
|
int32_t UAVObjDeleteSettings();
|
||||||
|
@ -668,6 +668,7 @@ unlock_exit:
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(PIOS_INCLUDE_SDCARD)
|
||||||
/**
|
/**
|
||||||
* Save the data of the specified object instance to the file system (SD card).
|
* Save the data of the specified object instance to the file system (SD card).
|
||||||
* The object will be appended and the file will not be closed.
|
* The object will be appended and the file will not be closed.
|
||||||
@ -682,7 +683,6 @@ int32_t UAVObjSaveToFile(UAVObjHandle obj_handle, uint16_t instId,
|
|||||||
{
|
{
|
||||||
PIOS_Assert(obj_handle);
|
PIOS_Assert(obj_handle);
|
||||||
|
|
||||||
#if defined(PIOS_INCLUDE_SDCARD)
|
|
||||||
uint32_t bytesWritten;
|
uint32_t bytesWritten;
|
||||||
// Check for file system availability
|
// Check for file system availability
|
||||||
if (PIOS_SDCARD_IsMounted() == 0) {
|
if (PIOS_SDCARD_IsMounted() == 0) {
|
||||||
@ -741,9 +741,9 @@ int32_t UAVObjSaveToFile(UAVObjHandle obj_handle, uint16_t instId,
|
|||||||
}
|
}
|
||||||
// Done
|
// Done
|
||||||
xSemaphoreGiveRecursive(mutex);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
#endif /* PIOS_INCLUDE_SDCARD */
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif /* PIOS_INCLUDE_SDCARD */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save the data of the specified object to the file system (SD card).
|
* Save the data of the specified object to the file system (SD card).
|
||||||
@ -811,6 +811,7 @@ int32_t UAVObjSave(UAVObjHandle obj_handle, uint16_t instId)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(PIOS_INCLUDE_SDCARD)
|
||||||
/**
|
/**
|
||||||
* Load an object from the file system (SD card).
|
* Load an object from the file system (SD card).
|
||||||
* @param[in] file File to read from
|
* @param[in] file File to read from
|
||||||
@ -818,7 +819,6 @@ int32_t UAVObjSave(UAVObjHandle obj_handle, uint16_t instId)
|
|||||||
*/
|
*/
|
||||||
UAVObjHandle UAVObjLoadFromFile(FILEINFO * file)
|
UAVObjHandle UAVObjLoadFromFile(FILEINFO * file)
|
||||||
{
|
{
|
||||||
#if defined(PIOS_INCLUDE_SDCARD)
|
|
||||||
uint32_t bytesRead;
|
uint32_t bytesRead;
|
||||||
struct UAVOBase *objEntry;
|
struct UAVOBase *objEntry;
|
||||||
InstanceHandle instEntry;
|
InstanceHandle instEntry;
|
||||||
@ -898,10 +898,8 @@ UAVObjHandle UAVObjLoadFromFile(FILEINFO * file)
|
|||||||
// Unlock
|
// Unlock
|
||||||
xSemaphoreGiveRecursive(mutex);
|
xSemaphoreGiveRecursive(mutex);
|
||||||
return obj_handle;
|
return obj_handle;
|
||||||
#else /* PIOS_INCLUDE_SDCARD */
|
|
||||||
return NULL;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
#endif /* PIOS_INCLUDE_SDCARD */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load an object from the file system (SD card).
|
* Load an object from the file system (SD card).
|
||||||
|
@ -1385,26 +1385,6 @@
|
|||||||
id="Telemetry-Critical"
|
id="Telemetry-Critical"
|
||||||
style="fill:#cf0e0e;fill-opacity:1;stroke:#ffffff;stroke-width:0.29055119;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
|
style="fill:#cf0e0e;fill-opacity:1;stroke:#ffffff;stroke-width:0.29055119;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
|
||||||
</g>
|
</g>
|
||||||
<g
|
|
||||||
style="display:inline"
|
|
||||||
inkscape:label="SDCard-OK"
|
|
||||||
id="layer1"
|
|
||||||
inkscape:groupmode="layer" />
|
|
||||||
<g
|
|
||||||
style="display:inline"
|
|
||||||
inkscape:label="SDCard-Warning"
|
|
||||||
id="layer6"
|
|
||||||
inkscape:groupmode="layer" />
|
|
||||||
<g
|
|
||||||
style="display:inline"
|
|
||||||
inkscape:label="SDCard-Error"
|
|
||||||
id="layer11"
|
|
||||||
inkscape:groupmode="layer" />
|
|
||||||
<g
|
|
||||||
style="display:inline"
|
|
||||||
inkscape:label="SDCard-Critical"
|
|
||||||
id="layer20"
|
|
||||||
inkscape:groupmode="layer" />
|
|
||||||
<g
|
<g
|
||||||
style="display:none"
|
style="display:none"
|
||||||
inkscape:label="Memory-OK"
|
inkscape:label="Memory-OK"
|
||||||
|
Before Width: | Height: | Size: 236 KiB After Width: | Height: | Size: 235 KiB |
@ -82,12 +82,12 @@ ConfigInputWidget::ConfigInputWidget(QWidget *parent) : ConfigTaskWidget(parent)
|
|||||||
connect(m_config->wzBack,SIGNAL(clicked()),this,SLOT(wzBack()));
|
connect(m_config->wzBack,SIGNAL(clicked()),this,SLOT(wzBack()));
|
||||||
|
|
||||||
m_config->stackedWidget->setCurrentIndex(0);
|
m_config->stackedWidget->setCurrentIndex(0);
|
||||||
addUAVObjectToWidgetRelation("ManualControlSettings","FlightModePosition",m_config->fmsModePos1,0);
|
addUAVObjectToWidgetRelation("ManualControlSettings","FlightModePosition",m_config->fmsModePos1,0,1,true);
|
||||||
addUAVObjectToWidgetRelation("ManualControlSettings","FlightModePosition",m_config->fmsModePos2,1);
|
addUAVObjectToWidgetRelation("ManualControlSettings","FlightModePosition",m_config->fmsModePos2,1,1,true);
|
||||||
addUAVObjectToWidgetRelation("ManualControlSettings","FlightModePosition",m_config->fmsModePos3,2);
|
addUAVObjectToWidgetRelation("ManualControlSettings","FlightModePosition",m_config->fmsModePos3,2,1,true);
|
||||||
addUAVObjectToWidgetRelation("ManualControlSettings","FlightModePosition",m_config->fmsModePos4,3);
|
addUAVObjectToWidgetRelation("ManualControlSettings","FlightModePosition",m_config->fmsModePos4,3,1,true);
|
||||||
addUAVObjectToWidgetRelation("ManualControlSettings","FlightModePosition",m_config->fmsModePos5,4);
|
addUAVObjectToWidgetRelation("ManualControlSettings","FlightModePosition",m_config->fmsModePos5,4,1,true);
|
||||||
addUAVObjectToWidgetRelation("ManualControlSettings","FlightModePosition",m_config->fmsModePos6,5);
|
addUAVObjectToWidgetRelation("ManualControlSettings","FlightModePosition",m_config->fmsModePos6,5,1,true);
|
||||||
addUAVObjectToWidgetRelation("ManualControlSettings","FlightModeNumber",m_config->fmsPosNum);
|
addUAVObjectToWidgetRelation("ManualControlSettings","FlightModeNumber",m_config->fmsPosNum);
|
||||||
|
|
||||||
addUAVObjectToWidgetRelation("ManualControlSettings","Stabilization1Settings",m_config->fmsSsPos1Roll,"Roll");
|
addUAVObjectToWidgetRelation("ManualControlSettings","Stabilization1Settings",m_config->fmsSsPos1Roll,"Roll");
|
||||||
|
@ -112,327 +112,370 @@ void UAVObjectField::limitsInitialize(const QString &limits)
|
|||||||
QStringList stringPerElement=limits.split(",");
|
QStringList stringPerElement=limits.split(",");
|
||||||
quint32 index=0;
|
quint32 index=0;
|
||||||
foreach (QString str, stringPerElement) {
|
foreach (QString str, stringPerElement) {
|
||||||
QString _str=str.trimmed();
|
QStringList ruleList=str.split(";");
|
||||||
QStringList valuesPerElement=_str.split(":");
|
QList<LimitStruct> limitList;
|
||||||
LimitStruct lstruc;
|
foreach(QString rule,ruleList)
|
||||||
bool b1=valuesPerElement.at(0).startsWith("%");
|
|
||||||
bool b2=(int)(index)<(int)numElements;
|
|
||||||
if(b1 && b2)
|
|
||||||
{
|
{
|
||||||
if(valuesPerElement.at(0).right(2)=="EQ")
|
QString _str=rule.trimmed();
|
||||||
lstruc.type=EQUAL;
|
if(_str.isEmpty())
|
||||||
else if(valuesPerElement.at(0).right(2)=="NE")
|
continue;
|
||||||
lstruc.type=NOT_EQUAL;
|
QStringList valuesPerElement=_str.split(":");
|
||||||
else if(valuesPerElement.at(0).right(2)=="BE")
|
LimitStruct lstruc;
|
||||||
lstruc.type=BETWEEN;
|
bool b1=valuesPerElement.at(0).startsWith("%");
|
||||||
else if(valuesPerElement.at(0).right(2)=="BI")
|
bool b2=(int)(index)<(int)numElements;
|
||||||
lstruc.type=BIGGER;
|
bool b3=valuesPerElement.at(0).size()==3;
|
||||||
else if(valuesPerElement.at(0).right(2)=="SM")
|
bool auxb;
|
||||||
lstruc.type=SMALLER;
|
valuesPerElement.at(0).mid(1,4).toInt(&auxb,16);
|
||||||
else
|
bool b4=((valuesPerElement.at(0).size())==7 && auxb);
|
||||||
qDebug()<<"limits parsing failed (invalid property) on UAVObjectField"<<name;
|
if(b1 && b2 && (b3 || b4))
|
||||||
valuesPerElement.removeAt(0);
|
|
||||||
foreach(QString _value,valuesPerElement)
|
|
||||||
{
|
{
|
||||||
QString value=_value.trimmed();
|
if(b4)
|
||||||
switch (type)
|
lstruc.board=valuesPerElement.at(0).mid(1,4).toInt(&auxb,16);
|
||||||
|
else
|
||||||
|
lstruc.board=0;
|
||||||
|
if(valuesPerElement.at(0).right(2)=="EQ")
|
||||||
|
lstruc.type=EQUAL;
|
||||||
|
else if(valuesPerElement.at(0).right(2)=="NE")
|
||||||
|
lstruc.type=NOT_EQUAL;
|
||||||
|
else if(valuesPerElement.at(0).right(2)=="BE")
|
||||||
|
lstruc.type=BETWEEN;
|
||||||
|
else if(valuesPerElement.at(0).right(2)=="BI")
|
||||||
|
lstruc.type=BIGGER;
|
||||||
|
else if(valuesPerElement.at(0).right(2)=="SM")
|
||||||
|
lstruc.type=SMALLER;
|
||||||
|
else
|
||||||
|
qDebug()<<"limits parsing failed (invalid property) on UAVObjectField"<<name;
|
||||||
|
valuesPerElement.removeAt(0);
|
||||||
|
foreach(QString _value,valuesPerElement)
|
||||||
{
|
{
|
||||||
case UINT8:
|
QString value=_value.trimmed();
|
||||||
case UINT16:
|
switch (type)
|
||||||
case UINT32:
|
{
|
||||||
case BITFIELD:
|
case UINT8:
|
||||||
lstruc.values.append((quint32)value.toULong());
|
case UINT16:
|
||||||
break;
|
case UINT32:
|
||||||
case INT8:
|
case BITFIELD:
|
||||||
case INT16:
|
lstruc.values.append((quint32)value.toULong());
|
||||||
case INT32:
|
break;
|
||||||
lstruc.values.append((qint32)value.toLong());
|
case INT8:
|
||||||
break;
|
case INT16:
|
||||||
case FLOAT32:
|
case INT32:
|
||||||
lstruc.values.append((float)value.toFloat());
|
lstruc.values.append((qint32)value.toLong());
|
||||||
break;
|
break;
|
||||||
case ENUM:
|
case FLOAT32:
|
||||||
lstruc.values.append((QString)value);
|
lstruc.values.append((float)value.toFloat());
|
||||||
break;
|
break;
|
||||||
case STRING:
|
case ENUM:
|
||||||
lstruc.values.append((QString)value);
|
lstruc.values.append((QString)value);
|
||||||
break;
|
break;
|
||||||
default:
|
case STRING:
|
||||||
lstruc.values.append(QVariant());
|
lstruc.values.append((QString)value);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
lstruc.values.append(QVariant());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
limitList.append(lstruc);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(!valuesPerElement.at(0).isEmpty() && !b1)
|
||||||
|
qDebug()<<"limits parsing failed (property doesn't start with %) on UAVObjectField"<<name;
|
||||||
|
else if(!b2)
|
||||||
|
qDebug()<<"limits parsing failed (index>numelements) on UAVObjectField"<<name<<"index"<<index<<"numElements"<<numElements;
|
||||||
|
else if(!b3 || !b4 )
|
||||||
|
qDebug()<<"limits parsing failed limit not starting with %XX or %YYYYXX where XX is the limit type and YYYY is the board type on UAVObjectField"<<name;
|
||||||
}
|
}
|
||||||
elementLimits.insert(index,lstruc);
|
|
||||||
++index;
|
|
||||||
}
|
}
|
||||||
else
|
elementLimits.insert(index,limitList);
|
||||||
|
++index;
|
||||||
|
|
||||||
|
}
|
||||||
|
foreach(QList<LimitStruct> limitList,elementLimits)
|
||||||
|
{
|
||||||
|
foreach(LimitStruct limit,limitList)
|
||||||
{
|
{
|
||||||
if(!valuesPerElement.at(0).isEmpty() && !b1)
|
qDebug()<<"Limit type"<<limit.type<<"for board"<<limit.board<<"for field"<<getName();
|
||||||
qDebug()<<"limits parsing failed (property doesn't start with %) on UAVObjectField"<<name;
|
foreach(QVariant var,limit.values)
|
||||||
else if(!b2)
|
{
|
||||||
qDebug()<<"limits parsing failed (index>numelements) on UAVObjectField"<<name<<"index"<<index<<"numElements"<<numElements;
|
qDebug()<<"value"<<var;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bool UAVObjectField::isWithinLimits(QVariant var,quint32 index)
|
bool UAVObjectField::isWithinLimits(QVariant var,quint32 index, int board)
|
||||||
{
|
{
|
||||||
if(!elementLimits.keys().contains(index))
|
if(!elementLimits.keys().contains(index))
|
||||||
return true;
|
return true;
|
||||||
LimitStruct struc=elementLimits.value(index);
|
|
||||||
switch(struc.type)
|
foreach(LimitStruct struc,elementLimits.value(index))
|
||||||
{
|
{
|
||||||
case EQUAL:
|
if((struc.board!=board) && board!=0 && struc.board!=0)
|
||||||
switch (type)
|
continue;
|
||||||
|
switch(struc.type)
|
||||||
{
|
{
|
||||||
case INT8:
|
case EQUAL:
|
||||||
case INT16:
|
switch (type)
|
||||||
case INT32:
|
{
|
||||||
foreach (QVariant vars, struc.values) {
|
case INT8:
|
||||||
if(var.toInt()==vars.toInt())
|
case INT16:
|
||||||
return true;
|
case INT32:
|
||||||
|
foreach (QVariant vars, struc.values) {
|
||||||
|
if(var.toInt()==vars.toInt())
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case UINT8:
|
||||||
|
case UINT16:
|
||||||
|
case UINT32:
|
||||||
|
case BITFIELD:
|
||||||
|
foreach (QVariant vars, struc.values) {
|
||||||
|
if(var.toUInt()==vars.toUInt())
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case ENUM:
|
||||||
|
case STRING:
|
||||||
|
foreach (QVariant vars, struc.values) {
|
||||||
|
if(var.toString()==vars.toString())
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case FLOAT32:
|
||||||
|
foreach (QVariant vars, struc.values) {
|
||||||
|
if(var.toFloat()==vars.toFloat())
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
break;
|
break;
|
||||||
case UINT8:
|
case NOT_EQUAL:
|
||||||
case UINT16:
|
switch (type)
|
||||||
case UINT32:
|
{
|
||||||
case BITFIELD:
|
case INT8:
|
||||||
foreach (QVariant vars, struc.values) {
|
case INT16:
|
||||||
if(var.toUInt()==vars.toUInt())
|
case INT32:
|
||||||
return true;
|
foreach (QVariant vars, struc.values) {
|
||||||
|
if(var.toInt()==vars.toInt())
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
case UINT8:
|
||||||
|
case UINT16:
|
||||||
|
case UINT32:
|
||||||
|
case BITFIELD:
|
||||||
|
foreach (QVariant vars, struc.values) {
|
||||||
|
if(var.toUInt()==vars.toUInt())
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
case ENUM:
|
||||||
|
case STRING:
|
||||||
|
foreach (QVariant vars, struc.values) {
|
||||||
|
if(var.toString()==vars.toString())
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
case FLOAT32:
|
||||||
|
foreach (QVariant vars, struc.values) {
|
||||||
|
if(var.toFloat()==vars.toFloat())
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
break;
|
break;
|
||||||
case ENUM:
|
case BETWEEN:
|
||||||
case STRING:
|
if(struc.values.length()<2)
|
||||||
foreach (QVariant vars, struc.values) {
|
{
|
||||||
if(var.toString()==vars.toString())
|
qDebug()<<__FUNCTION__<<"between limit with less than 1 pair, aborting; field:"<<name;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
if(struc.values.length()>2)
|
||||||
break;
|
qDebug()<<__FUNCTION__<<"between limit with more than 1 pair, using first; field"<<name;
|
||||||
case FLOAT32:
|
switch (type)
|
||||||
foreach (QVariant vars, struc.values) {
|
{
|
||||||
if(var.toFloat()==vars.toFloat())
|
case INT8:
|
||||||
return true;
|
case INT16:
|
||||||
|
case INT32:
|
||||||
|
if(!(var.toInt()>=struc.values.at(0).toInt() && var.toInt()<=struc.values.at(1).toInt()))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
case UINT8:
|
||||||
|
case UINT16:
|
||||||
|
case UINT32:
|
||||||
|
case BITFIELD:
|
||||||
|
if(!(var.toUInt()>=struc.values.at(0).toUInt() && var.toUInt()<=struc.values.at(1).toUInt()))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
case ENUM:
|
||||||
|
if(!(options.indexOf(var.toString())>=options.indexOf(struc.values.at(0).toString()) && options.indexOf(var.toString())<=options.indexOf(struc.values.at(1).toString())))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
case STRING:
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
case FLOAT32:
|
||||||
|
if(!(var.toFloat()>=struc.values.at(0).toFloat() && var.toFloat()<=struc.values.at(1).toFloat()))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
break;
|
break;
|
||||||
default:
|
case BIGGER:
|
||||||
return true;
|
if(struc.values.length()<1)
|
||||||
}
|
{
|
||||||
break;
|
qDebug()<<__FUNCTION__<<"BIGGER limit with less than 1 value, aborting; field:"<<name;
|
||||||
case NOT_EQUAL:
|
return true;
|
||||||
switch (type)
|
|
||||||
{
|
|
||||||
case INT8:
|
|
||||||
case INT16:
|
|
||||||
case INT32:
|
|
||||||
foreach (QVariant vars, struc.values) {
|
|
||||||
if(var.toInt()==vars.toInt())
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
return true;
|
if(struc.values.length()>1)
|
||||||
break;
|
qDebug()<<__FUNCTION__<<"BIGGER limit with more than 1 value, using first; field"<<name;
|
||||||
case UINT8:
|
switch (type)
|
||||||
case UINT16:
|
{
|
||||||
case UINT32:
|
case INT8:
|
||||||
case BITFIELD:
|
case INT16:
|
||||||
foreach (QVariant vars, struc.values) {
|
case INT32:
|
||||||
if(var.toUInt()==vars.toUInt())
|
if(!(var.toInt()>=struc.values.at(0).toInt()))
|
||||||
return false;
|
return false;
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
case UINT8:
|
||||||
|
case UINT16:
|
||||||
|
case UINT32:
|
||||||
|
case BITFIELD:
|
||||||
|
if(!(var.toUInt()>=struc.values.at(0).toUInt()))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
case ENUM:
|
||||||
|
if(!(options.indexOf(var.toString())>=options.indexOf(struc.values.at(0).toString())))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
case STRING:
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
case FLOAT32:
|
||||||
|
if(!(var.toFloat()>=struc.values.at(0).toFloat()))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
break;
|
break;
|
||||||
case ENUM:
|
case SMALLER:
|
||||||
case STRING:
|
switch (type)
|
||||||
foreach (QVariant vars, struc.values) {
|
{
|
||||||
if(var.toString()==vars.toString())
|
case INT8:
|
||||||
return false;
|
case INT16:
|
||||||
|
case INT32:
|
||||||
|
if(!(var.toInt()<=struc.values.at(0).toInt()))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
case UINT8:
|
||||||
|
case UINT16:
|
||||||
|
case UINT32:
|
||||||
|
case BITFIELD:
|
||||||
|
if(!(var.toUInt()<=struc.values.at(0).toUInt()))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
case ENUM:
|
||||||
|
if(!(options.indexOf(var.toString())<=options.indexOf(struc.values.at(0).toString())))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
case STRING:
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
case FLOAT32:
|
||||||
|
if(!(var.toFloat()<=struc.values.at(0).toFloat()))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
case FLOAT32:
|
|
||||||
foreach (QVariant vars, struc.values) {
|
|
||||||
if(var.toFloat()==vars.toFloat())
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case BETWEEN:
|
|
||||||
if(struc.values.length()<2)
|
|
||||||
{
|
|
||||||
qDebug()<<__FUNCTION__<<"between limit with less than 1 pair, aborting; field:"<<name;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if(struc.values.length()>2)
|
|
||||||
qDebug()<<__FUNCTION__<<"between limit with more than 1 pair, using first; field"<<name;
|
|
||||||
switch (type)
|
|
||||||
{
|
|
||||||
case INT8:
|
|
||||||
case INT16:
|
|
||||||
case INT32:
|
|
||||||
if(!(var.toInt()>=struc.values.at(0).toInt() && var.toInt()<=struc.values.at(1).toInt()))
|
|
||||||
return false;
|
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
case UINT8:
|
|
||||||
case UINT16:
|
|
||||||
case UINT32:
|
|
||||||
case BITFIELD:
|
|
||||||
if(!(var.toUInt()>=struc.values.at(0).toUInt() && var.toUInt()<=struc.values.at(1).toUInt()))
|
|
||||||
return false;
|
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
case ENUM:
|
|
||||||
if(!(options.indexOf(var.toString())>=options.indexOf(struc.values.at(0).toString()) && options.indexOf(var.toString())<=options.indexOf(struc.values.at(1).toString())))
|
|
||||||
return false;
|
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
case STRING:
|
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
case FLOAT32:
|
|
||||||
if(!(var.toFloat()>=struc.values.at(0).toFloat() && var.toFloat()<=struc.values.at(1).toFloat()))
|
|
||||||
return false;
|
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case BIGGER:
|
|
||||||
if(struc.values.length()<1)
|
|
||||||
{
|
|
||||||
qDebug()<<__FUNCTION__<<"BIGGER limit with less than 1 value, aborting; field:"<<name;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if(struc.values.length()>1)
|
|
||||||
qDebug()<<__FUNCTION__<<"BIGGER limit with more than 1 value, using first; field"<<name;
|
|
||||||
switch (type)
|
|
||||||
{
|
|
||||||
case INT8:
|
|
||||||
case INT16:
|
|
||||||
case INT32:
|
|
||||||
if(!(var.toInt()>=struc.values.at(0).toInt()))
|
|
||||||
return false;
|
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
case UINT8:
|
|
||||||
case UINT16:
|
|
||||||
case UINT32:
|
|
||||||
case BITFIELD:
|
|
||||||
if(!(var.toUInt()>=struc.values.at(0).toUInt()))
|
|
||||||
return false;
|
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
case ENUM:
|
|
||||||
if(!(options.indexOf(var.toString())>=options.indexOf(struc.values.at(0).toString())))
|
|
||||||
return false;
|
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
case STRING:
|
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
case FLOAT32:
|
|
||||||
if(!(var.toFloat()>=struc.values.at(0).toFloat()))
|
|
||||||
return false;
|
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case SMALLER:
|
|
||||||
switch (type)
|
|
||||||
{
|
|
||||||
case INT8:
|
|
||||||
case INT16:
|
|
||||||
case INT32:
|
|
||||||
if(!(var.toInt()<=struc.values.at(0).toInt()))
|
|
||||||
return false;
|
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
case UINT8:
|
|
||||||
case UINT16:
|
|
||||||
case UINT32:
|
|
||||||
case BITFIELD:
|
|
||||||
if(!(var.toUInt()<=struc.values.at(0).toUInt()))
|
|
||||||
return false;
|
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
case ENUM:
|
|
||||||
if(!(options.indexOf(var.toString())<=options.indexOf(struc.values.at(0).toString())))
|
|
||||||
return false;
|
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
case STRING:
|
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
case FLOAT32:
|
|
||||||
if(!(var.toFloat()<=struc.values.at(0).toFloat()))
|
|
||||||
return false;
|
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant UAVObjectField::getMaxLimit(quint32 index)
|
QVariant UAVObjectField::getMaxLimit(quint32 index,int board)
|
||||||
{
|
{
|
||||||
if(!elementLimits.keys().contains(index))
|
if(!elementLimits.keys().contains(index))
|
||||||
return QVariant();
|
return QVariant();
|
||||||
LimitStruct struc=elementLimits.value(index);
|
foreach(LimitStruct struc,elementLimits.value(index))
|
||||||
switch(struc.type)
|
|
||||||
{
|
{
|
||||||
case EQUAL:
|
if((struc.board!=board) && board!=0 && struc.board!=0)
|
||||||
case NOT_EQUAL:
|
continue;
|
||||||
case BIGGER:
|
switch(struc.type)
|
||||||
return QVariant();
|
{
|
||||||
break;
|
case EQUAL:
|
||||||
break;
|
case NOT_EQUAL:
|
||||||
case BETWEEN:
|
case BIGGER:
|
||||||
return struc.values.at(1);
|
return QVariant();
|
||||||
break;
|
break;
|
||||||
case SMALLER:
|
break;
|
||||||
return struc.values.at(0);
|
case BETWEEN:
|
||||||
break;
|
return struc.values.at(1);
|
||||||
default:
|
break;
|
||||||
return QVariant();
|
case SMALLER:
|
||||||
break;
|
return struc.values.at(0);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return QVariant();
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
QVariant UAVObjectField::getMinLimit(quint32 index)
|
QVariant UAVObjectField::getMinLimit(quint32 index, int board)
|
||||||
{
|
{
|
||||||
if(!elementLimits.keys().contains(index))
|
if(!elementLimits.keys().contains(index))
|
||||||
return QVariant();
|
return QVariant();
|
||||||
LimitStruct struc=elementLimits.value(index);
|
foreach(LimitStruct struc,elementLimits.value(index))
|
||||||
switch(struc.type)
|
|
||||||
{
|
{
|
||||||
case EQUAL:
|
if((struc.board!=board) && board!=0 && struc.board!=0)
|
||||||
case NOT_EQUAL:
|
return QVariant();
|
||||||
case SMALLER:
|
switch(struc.type)
|
||||||
return QVariant();
|
{
|
||||||
break;
|
case EQUAL:
|
||||||
break;
|
case NOT_EQUAL:
|
||||||
case BETWEEN:
|
case SMALLER:
|
||||||
return struc.values.at(0);
|
return QVariant();
|
||||||
break;
|
break;
|
||||||
case BIGGER:
|
break;
|
||||||
return struc.values.at(0);
|
case BETWEEN:
|
||||||
break;
|
return struc.values.at(0);
|
||||||
default:
|
break;
|
||||||
return QVariant();
|
case BIGGER:
|
||||||
break;
|
return struc.values.at(0);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return QVariant();
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
void UAVObjectField::initialize(quint8* data, quint32 dataOffset, UAVObject* obj)
|
void UAVObjectField::initialize(quint8* data, quint32 dataOffset, UAVObject* obj)
|
||||||
{
|
{
|
||||||
|
@ -48,6 +48,7 @@ public:
|
|||||||
{
|
{
|
||||||
LimitType type;
|
LimitType type;
|
||||||
QList<QVariant> values;
|
QList<QVariant> values;
|
||||||
|
int board;
|
||||||
} LimitStruct;
|
} LimitStruct;
|
||||||
|
|
||||||
UAVObjectField(const QString& name, const QString& units, FieldType type, quint32 numElements, const QStringList& options,const QString& limits=QString());
|
UAVObjectField(const QString& name, const QString& units, FieldType type, quint32 numElements, const QStringList& options,const QString& limits=QString());
|
||||||
@ -74,9 +75,9 @@ public:
|
|||||||
bool isText();
|
bool isText();
|
||||||
QString toString();
|
QString toString();
|
||||||
|
|
||||||
bool isWithinLimits(QVariant var, quint32 index);
|
bool isWithinLimits(QVariant var, quint32 index, int board=0);
|
||||||
QVariant getMaxLimit(quint32 index);
|
QVariant getMaxLimit(quint32 index, int board=0);
|
||||||
QVariant getMinLimit(quint32 index);
|
QVariant getMinLimit(quint32 index, int board=0);
|
||||||
signals:
|
signals:
|
||||||
void fieldUpdated(UAVObjectField* field);
|
void fieldUpdated(UAVObjectField* field);
|
||||||
|
|
||||||
@ -91,7 +92,7 @@ protected:
|
|||||||
quint32 offset;
|
quint32 offset;
|
||||||
quint8* data;
|
quint8* data;
|
||||||
UAVObject* obj;
|
UAVObject* obj;
|
||||||
QMap<quint32,LimitStruct> elementLimits;
|
QMap<quint32, QList<LimitStruct> > elementLimits;
|
||||||
void clear();
|
void clear();
|
||||||
void constructorInitialize(const QString& name, const QString& units, FieldType type, const QStringList& elementNames, const QStringList& options, const QString &limits);
|
void constructorInitialize(const QString& name, const QString& units, FieldType type, const QStringList& elementNames, const QStringList& options, const QString &limits);
|
||||||
void limitsInitialize(const QString &limits);
|
void limitsInitialize(const QString &limits);
|
||||||
|
@ -37,6 +37,7 @@ ConfigTaskWidget::ConfigTaskWidget(QWidget *parent) : QWidget(parent),isConnecte
|
|||||||
pm = ExtensionSystem::PluginManager::instance();
|
pm = ExtensionSystem::PluginManager::instance();
|
||||||
objManager = pm->getObject<UAVObjectManager>();
|
objManager = pm->getObject<UAVObjectManager>();
|
||||||
TelemetryManager* telMngr = pm->getObject<TelemetryManager>();
|
TelemetryManager* telMngr = pm->getObject<TelemetryManager>();
|
||||||
|
utilMngr = pm->getObject<UAVObjectUtilManager>();
|
||||||
connect(telMngr, SIGNAL(connected()), this, SLOT(onAutopilotConnect()));
|
connect(telMngr, SIGNAL(connected()), this, SLOT(onAutopilotConnect()));
|
||||||
connect(telMngr, SIGNAL(disconnected()), this, SLOT(onAutopilotDisconnect()));
|
connect(telMngr, SIGNAL(disconnected()), this, SLOT(onAutopilotDisconnect()));
|
||||||
connect(telMngr, SIGNAL(connected()), this, SIGNAL(autoPilotConnected()));
|
connect(telMngr, SIGNAL(connected()), this, SIGNAL(autoPilotConnected()));
|
||||||
@ -226,9 +227,15 @@ void ConfigTaskWidget::onAutopilotDisconnect()
|
|||||||
|
|
||||||
void ConfigTaskWidget::onAutopilotConnect()
|
void ConfigTaskWidget::onAutopilotConnect()
|
||||||
{
|
{
|
||||||
|
if (utilMngr)
|
||||||
|
currentBoard = utilMngr->getBoardModel();//TODO REMEMBER TO ADD THIS TO FORCE CONNECTED FUNC ON CC3D_RELEASE
|
||||||
invalidateObjects();
|
invalidateObjects();
|
||||||
dirty=false;
|
dirty=false;
|
||||||
isConnected=true;
|
isConnected=true;
|
||||||
|
foreach(objectToWidget * ow,objOfInterest)
|
||||||
|
{
|
||||||
|
loadWidgetLimits(ow->widget,ow->field,ow->index,ow->isLimited,ow->scale);
|
||||||
|
}
|
||||||
enableControls(true);
|
enableControls(true);
|
||||||
refreshWidgetsValues();
|
refreshWidgetsValues();
|
||||||
}
|
}
|
||||||
@ -1057,7 +1064,7 @@ void ConfigTaskWidget::checkWidgetsLimits(QWidget * widget,UAVObjectField * fiel
|
|||||||
{
|
{
|
||||||
if(!hasLimits)
|
if(!hasLimits)
|
||||||
return;
|
return;
|
||||||
if(!field->isWithinLimits(value,index))
|
if(!field->isWithinLimits(value,index,currentBoard))
|
||||||
{
|
{
|
||||||
if(!widget->property("styleBackup").isValid())
|
if(!widget->property("styleBackup").isValid())
|
||||||
widget->setProperty("styleBackup",widget->styleSheet());
|
widget->setProperty("styleBackup",widget->styleSheet());
|
||||||
@ -1131,7 +1138,7 @@ void ConfigTaskWidget::loadWidgetLimits(QWidget * widget,UAVObjectField * field,
|
|||||||
{
|
{
|
||||||
foreach(QString str,option)
|
foreach(QString str,option)
|
||||||
{
|
{
|
||||||
if(field->isWithinLimits(str,index))
|
if(field->isWithinLimits(str,index,currentBoard))
|
||||||
cb->addItem(str);
|
cb->addItem(str);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1144,33 +1151,33 @@ void ConfigTaskWidget::loadWidgetLimits(QWidget * widget,UAVObjectField * field,
|
|||||||
{
|
{
|
||||||
if(field->getMaxLimit(index).isValid())
|
if(field->getMaxLimit(index).isValid())
|
||||||
{
|
{
|
||||||
cb->setMaximum((double)(field->getMaxLimit(index).toDouble()/scale));
|
cb->setMaximum((double)(field->getMaxLimit(index,currentBoard).toDouble()/scale));
|
||||||
}
|
}
|
||||||
if(field->getMinLimit(index).isValid())
|
if(field->getMinLimit(index,currentBoard).isValid())
|
||||||
{
|
{
|
||||||
cb->setMinimum((double)(field->getMinLimit(index).toDouble()/scale));
|
cb->setMinimum((double)(field->getMinLimit(index,currentBoard).toDouble()/scale));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(QSpinBox * cb=qobject_cast<QSpinBox *>(widget))
|
else if(QSpinBox * cb=qobject_cast<QSpinBox *>(widget))
|
||||||
{
|
{
|
||||||
if(field->getMaxLimit(index).isValid())
|
if(field->getMaxLimit(index,currentBoard).isValid())
|
||||||
{
|
{
|
||||||
cb->setMaximum((int)qRound(field->getMaxLimit(index).toDouble()/scale));
|
cb->setMaximum((int)qRound(field->getMaxLimit(index,currentBoard).toDouble()/scale));
|
||||||
}
|
}
|
||||||
if(field->getMinLimit(index).isValid())
|
if(field->getMinLimit(index,currentBoard).isValid())
|
||||||
{
|
{
|
||||||
cb->setMinimum((int)qRound(field->getMinLimit(index).toDouble()/scale));
|
cb->setMinimum((int)qRound(field->getMinLimit(index,currentBoard).toDouble()/scale));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(QSlider * cb=qobject_cast<QSlider *>(widget))
|
else if(QSlider * cb=qobject_cast<QSlider *>(widget))
|
||||||
{
|
{
|
||||||
if(field->getMaxLimit(index).isValid())
|
if(field->getMaxLimit(index,currentBoard).isValid())
|
||||||
{
|
{
|
||||||
cb->setMaximum((int)qRound(field->getMaxLimit(index).toDouble()/scale));
|
cb->setMaximum((int)qRound(field->getMaxLimit(index,currentBoard).toDouble()/scale));
|
||||||
}
|
}
|
||||||
if(field->getMinLimit(index).isValid())
|
if(field->getMinLimit(index,currentBoard).isValid())
|
||||||
{
|
{
|
||||||
cb->setMinimum((int)(field->getMinLimit(index).toDouble()/scale));
|
cb->setMinimum((int)(field->getMinLimit(index,currentBoard).toDouble()/scale));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -144,12 +144,14 @@ private slots:
|
|||||||
void defaultButtonClicked();
|
void defaultButtonClicked();
|
||||||
void reloadButtonClicked();
|
void reloadButtonClicked();
|
||||||
private:
|
private:
|
||||||
|
int currentBoard;
|
||||||
bool isConnected;
|
bool isConnected;
|
||||||
bool allowWidgetUpdates;
|
bool allowWidgetUpdates;
|
||||||
QStringList objectsList;
|
QStringList objectsList;
|
||||||
QList <objectToWidget*> objOfInterest;
|
QList <objectToWidget*> objOfInterest;
|
||||||
ExtensionSystem::PluginManager *pm;
|
ExtensionSystem::PluginManager *pm;
|
||||||
UAVObjectManager *objManager;
|
UAVObjectManager *objManager;
|
||||||
|
UAVObjectUtilManager* utilMngr;
|
||||||
smartSaveButton *smartsave;
|
smartSaveButton *smartsave;
|
||||||
QMap<UAVObject *,bool> objectUpdates;
|
QMap<UAVObject *,bool> objectUpdates;
|
||||||
QMap<int,QList<objectToWidget*> *> defaultReloadGroups;
|
QMap<int,QList<objectToWidget*> *> defaultReloadGroups;
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
<!-- Note these options values should be identical to those defined in FlightMode -->
|
<!-- Note these options values should be identical to those defined in FlightMode -->
|
||||||
<field name="FlightModeNumber" units="" type="uint8" elements="1" defaultvalue="3"/>
|
<field name="FlightModeNumber" units="" type="uint8" elements="1" defaultvalue="3"/>
|
||||||
<field name="FlightModePosition" units="" type="enum" elements="6" options="Manual,Stabilized1,Stabilized2,Stabilized3,AltitudeHold,VelocityControl,PositionHold" defaultvalue="Manual,Stabilized1,Stabilized2,Stabilized3,AltitudeHold,PositionHold"/>
|
<field name="FlightModePosition" units="" type="enum" elements="6" options="Manual,Stabilized1,Stabilized2,Stabilized3,AltitudeHold,VelocityControl,PositionHold" defaultvalue="Manual,Stabilized1,Stabilized2,Stabilized3,Stabilized1,Stabilized2" limits="%0401NE:AltitudeHold:VelocityControl:PositionHold;%0402NE:AltitudeHold:VelocityControl:PositionHold,%0401NE:AltitudeHold:VelocityControl:PositionHold;%0402NE:AltitudeHold:VelocityControl:PositionHold,%0401NE:AltitudeHold:VelocityControl:PositionHold;%0402NE:AltitudeHold:VelocityControl:PositionHold,%0401NE:AltitudeHold:VelocityControl:PositionHold;%0402NE:AltitudeHold:VelocityControl:PositionHold,%0401NE:AltitudeHold:VelocityControl:PositionHold;%0402NE:AltitudeHold:VelocityControl:PositionHold,%0401NE:AltitudeHold:VelocityControl:PositionHold;%0402NE:AltitudeHold:VelocityControl:PositionHold"/>
|
||||||
|
|
||||||
<field name="ArmedTimeout" units="ms" type="uint16" elements="1" defaultvalue="30000"/>
|
<field name="ArmedTimeout" units="ms" type="uint16" elements="1" defaultvalue="30000"/>
|
||||||
<access gcs="readwrite" flight="readwrite"/>
|
<access gcs="readwrite" flight="readwrite"/>
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<object name="SystemAlarms" singleinstance="true" settings="false">
|
<object name="SystemAlarms" singleinstance="true" settings="false">
|
||||||
<description>Alarms from OpenPilot to indicate failure conditions or warnings. Set by various modules.</description>
|
<description>Alarms from OpenPilot to indicate failure conditions or warnings. Set by various modules.</description>
|
||||||
<field name="Alarm" units="" type="enum" options="Uninitialised,OK,Warning,Error,Critical"
|
<field name="Alarm" units="" type="enum" options="Uninitialised,OK,Warning,Error,Critical"
|
||||||
elementnames="OutOfMemory,StackOverflow,CPUOverload,EventSystem,SDCard,Telemetry,ManualControl,Actuator,Attitude,Sensors,Stabilization,Guidance,AHRSComms,Battery,FlightTime,I2C,GPS,BootFault" defaultvalue="Uninitialised"/>
|
elementnames="OutOfMemory,StackOverflow,CPUOverload,EventSystem,Telemetry,ManualControl,Actuator,Attitude,Sensors,Stabilization,Guidance,Battery,FlightTime,I2C,GPS,BootFault" defaultvalue="Uninitialised"/>
|
||||||
<access gcs="readwrite" flight="readwrite"/>
|
<access gcs="readwrite" flight="readwrite"/>
|
||||||
<telemetrygcs acked="true" updatemode="onchange" period="0"/>
|
<telemetrygcs acked="true" updatemode="onchange" period="0"/>
|
||||||
<telemetryflight acked="true" updatemode="onchange" period="0"/>
|
<telemetryflight acked="true" updatemode="onchange" period="0"/>
|
||||||
|
Loading…
Reference in New Issue
Block a user