1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-02-20 10:54:14 +01:00

OP-1058 Add xxxGet and xxxSet functions to handle multielement fields as struct

for example:
EKFStateVariancePSet(EKFStateVariancePData *NewP);
EKFStateVariancePGet(EKFStateVariancePData *NewP);
Also in this case array accessors are renamed as xxxArrayGet/Set:
EKFStateVariancePArraySet(float *NewP);
EKFStateVariancePArrayGet(float *NewP);

Nothing changes for anonymous items as default functions continues to deal with arrays

+review OPReview-552
This commit is contained in:
Alessio Morale 2013-09-01 13:23:20 +02:00
parent e91bc28667
commit 0db9a9bf8d
14 changed files with 96 additions and 37 deletions

View File

@ -204,13 +204,13 @@ static int32_t check_stabilization_settings(int index, bool multirotor)
// Get the different axis modes for this switch position
switch (index) {
case 1:
ManualControlSettingsStabilization1SettingsGet(modes);
ManualControlSettingsStabilization1SettingsArrayGet(modes);
break;
case 2:
ManualControlSettingsStabilization2SettingsGet(modes);
ManualControlSettingsStabilization2SettingsArrayGet(modes);
break;
case 3:
ManualControlSettingsStabilization3SettingsGet(modes);
ManualControlSettingsStabilization3SettingsArrayGet(modes);
break;
default:
return SYSTEMALARMS_ALARM_ERROR;

View File

@ -109,7 +109,7 @@ int32_t AirspeedInitialize()
#endif
uint8_t adcRouting[HWSETTINGS_ADCROUTING_NUMELEM];
HwSettingsADCRoutingGet(adcRouting);
HwSettingsADCRoutingArrayGet(adcRouting);
// Determine if the barometric airspeed sensor is routed to an ADC pin
for (int i = 0; i < HWSETTINGS_ADCROUTING_NUMELEM; i++) {

View File

@ -647,7 +647,7 @@ static void settingsUpdatedCb(__attribute__((unused)) UAVObjEvent *objEv)
attitudeSettings.AccelBias.Y = trim_accels[1] / trim_samples;
// Z should average -grav
attitudeSettings.AccelBias.Z = trim_accels[2] / trim_samples + GRAV / ACCEL_SCALE;
attitudeSettings.TrimFlight = ATTITUDESETTINGS_TRIMFLIGHT_NORMAL;
attitudeSettings.TrimFlight = ATTITUDESETTINGS_TRIMFLIGHT_NORMAL;
AttitudeSettingsSet(&attitudeSettings);
} else {
trim_requested = false;

View File

@ -366,7 +366,7 @@ static int32_t updateAttitudeComplementary(bool first_run)
magData.z = 0.0f;
#endif
float magBias[3];
RevoCalibrationmag_biasGet(magBias);
RevoCalibrationmag_biasArrayGet(magBias);
// don't trust Mag for initial orientation if it has not been calibrated
if (magBias[0] < 1e-6f && magBias[1] < 1e-6f && magBias[2] < 1e-6f) {
magCalibrated = false;

View File

@ -91,7 +91,7 @@ int32_t BatteryInitialize(void)
#endif
uint8_t adcRouting[HWSETTINGS_ADCROUTING_NUMELEM];
HwSettingsADCRoutingGet(adcRouting);
HwSettingsADCRoutingArrayGet(adcRouting);
// Determine if the battery sensors are routed to ADC pins
for (int i = 0; i < HWSETTINGS_ADCROUTING_NUMELEM; i++) {

View File

@ -97,12 +97,12 @@ int32_t CameraStabInitialize(void)
#ifdef MODULE_CAMERASTAB_BUILTIN
cameraStabEnabled = true;
#else
uint8_t optionalModules[HWSETTINGS_OPTIONALMODULES_NUMELEM];
HwSettingsOptionalModulesData optionalModules;
HwSettingsInitialize();
HwSettingsOptionalModulesGet(optionalModules);
HwSettingsOptionalModulesGet(&optionalModules);
if (optionalModules[HWSETTINGS_OPTIONALMODULES_CAMERASTAB] == HWSETTINGS_OPTIONALMODULES_ENABLED) {
if (optionalModules.CameraStab == HWSETTINGS_OPTIONALMODULES_ENABLED) {
cameraStabEnabled = true;
} else {
cameraStabEnabled = false;

View File

@ -102,12 +102,12 @@ static int32_t comUsbBridgeInitialize(void)
bridge_enabled = true;
#else
HwSettingsInitialize();
uint8_t optionalModules[HWSETTINGS_OPTIONALMODULES_NUMELEM];
HwSettingsOptionalModulesData optionalModules;
HwSettingsOptionalModulesGet(optionalModules);
HwSettingsOptionalModulesGet(&optionalModules);
if (usart_port && vcp_port &&
(optionalModules[HWSETTINGS_OPTIONALMODULES_COMUSBBRIDGE] == HWSETTINGS_OPTIONALMODULES_ENABLED)) {
(optionalModules.ComUsbBridge == HWSETTINGS_OPTIONALMODULES_ENABLED)) {
bridge_enabled = true;
} else {
bridge_enabled = false;

View File

@ -110,9 +110,9 @@ int32_t FixedWingPathFollowerStart()
int32_t FixedWingPathFollowerInitialize()
{
HwSettingsInitialize();
uint8_t optionalModules[HWSETTINGS_OPTIONALMODULES_NUMELEM];
HwSettingsOptionalModulesGet(optionalModules);
if (optionalModules[HWSETTINGS_OPTIONALMODULES_FIXEDWINGPATHFOLLOWER] == HWSETTINGS_OPTIONALMODULES_ENABLED) {
HwSettingsOptionalModulesData optionalModules;
HwSettingsOptionalModulesGet(&optionalModules);
if (optionalModules.FixedWingPathFollower == HWSETTINGS_OPTIONALMODULES_ENABLED) {
followerEnabled = true;
FixedWingPathFollowerSettingsInitialize();
FixedWingPathFollowerStatusInitialize();

View File

@ -130,11 +130,11 @@ int32_t GPSInitialize(void)
gpsEnabled = true;
#else
HwSettingsInitialize();
uint8_t optionalModules[HWSETTINGS_OPTIONALMODULES_NUMELEM];
HwSettingsOptionalModulesData optionalModules;
HwSettingsOptionalModulesGet(optionalModules);
HwSettingsOptionalModulesGet(&optionalModules);
if (optionalModules[HWSETTINGS_OPTIONALMODULES_GPS] == HWSETTINGS_OPTIONALMODULES_ENABLED) {
if (optionalModules.GPS == HWSETTINGS_OPTIONALMODULES_ENABLED) {
gpsEnabled = true;
} else {
gpsEnabled = false;

View File

@ -276,9 +276,9 @@ static int32_t osdoutputInitialize(void)
osdoutputEnabled = 1;
#else
HwSettingsInitialize();
uint8_t optionalModules[HWSETTINGS_OPTIONALMODULES_NUMELEM];
HwSettingsOptionalModulesGet(optionalModules);
if (optionalModules[HWSETTINGS_OPTIONALMODULES_OSDHK] == HWSETTINGS_OPTIONALMODULES_ENABLED) {
HwSettingsOptionalModulesData optionalModules;
HwSettingsOptionalModulesGet(&optionalModules);
if (optionalModules.OsdHk == HWSETTINGS_OPTIONALMODULES_ENABLED) {
osdoutputEnabled = 1;
} else {
osdoutputEnabled = 0;

View File

@ -229,7 +229,7 @@ static int32_t complementaryFilter(struct data *this, float gyro[3], float accel
mag[2] = 0.0f;
#endif
float magBias[3];
RevoCalibrationmag_biasGet(magBias);
RevoCalibrationmag_biasArrayGet(magBias);
// don't trust Mag for initial orientation if it has not been calibrated
if (magBias[0] < 1e-6f && magBias[1] < 1e-6f && magBias[2] < 1e-6f) {
this->magCalibrated = false;

View File

@ -88,12 +88,12 @@ static float scale(float val, float inMin, float inMax, float outMin, float outM
int32_t TxPIDInitialize(void)
{
bool txPIDEnabled;
uint8_t optionalModules[HWSETTINGS_OPTIONALMODULES_NUMELEM];
HwSettingsOptionalModulesData optionalModules;
HwSettingsInitialize();
HwSettingsOptionalModulesGet(optionalModules);
HwSettingsOptionalModulesGet(&optionalModules);
if (optionalModules[HWSETTINGS_OPTIONALMODULES_TXPID] == HWSETTINGS_OPTIONALMODULES_ENABLED) {
if (optionalModules.TxPID == HWSETTINGS_OPTIONALMODULES_ENABLED) {
txPIDEnabled = true;
} else {
txPIDEnabled = false;

View File

@ -125,11 +125,11 @@ int32_t VtolPathFollowerStart()
*/
int32_t VtolPathFollowerInitialize()
{
uint8_t optionalModules[HWSETTINGS_OPTIONALMODULES_NUMELEM];
HwSettingsOptionalModulesData optionalModules;
HwSettingsOptionalModulesGet(optionalModules);
HwSettingsOptionalModulesGet(&optionalModules);
if (optionalModules[HWSETTINGS_OPTIONALMODULES_VTOLPATHFOLLOWER] == HWSETTINGS_OPTIONALMODULES_ENABLED) {
if (optionalModules.VtolPathFollower == HWSETTINGS_OPTIONALMODULES_ENABLED) {
VtolPathFollowerSettingsInitialize();
NedAccelInitialize();
PathDesiredInitialize();

View File

@ -280,11 +280,49 @@ bool UAVObjectGeneratorFlight::process_object(ObjectInfo *info)
.arg(fieldTypeStrC[info->fields[n]->type]));
setgetfields.append(QString("}\n"));
} else {
// When no struct accessor is available for a field array accessor is the default.
QString suffix = QString("");
if (info->fields[n]->elementNames[0].compare(QString("0")) != 0) {
// struct based field accessor
QString structTypeName = QString("%1%2Data").arg(info->name).arg(info->fields[n]->name);
/* SET */
setgetfields.append(QString("void %2%3Set( %1 *New%3 )\n")
.arg(structTypeName)
.arg(info->name)
.arg(info->fields[n]->name));
setgetfields.append(QString("{\n"));
setgetfields.append(QString(" UAVObjSetDataField(%1Handle(), (void *)New%2, offsetof(%1Data, %2), %3*sizeof(%4));\n")
.arg(info->name)
.arg(info->fields[n]->name)
.arg(info->fields[n]->numElements)
.arg(fieldTypeStrC[info->fields[n]->type]));
setgetfields.append(QString("}\n"));
/* GET */
setgetfields.append(QString("void %2%3Get( %1 *New%3 )\n")
.arg(structTypeName)
.arg(info->name)
.arg(info->fields[n]->name));
setgetfields.append(QString("{\n"));
setgetfields.append(QString(" UAVObjGetDataField(%1Handle(), (void *)New%2, offsetof(%1Data, %2), %3*sizeof(%4));\n")
.arg(info->name)
.arg(info->fields[n]->name)
.arg(info->fields[n]->numElements)
.arg(fieldTypeStrC[info->fields[n]->type]));
setgetfields.append(QString("}\n"));
// Append array suffix to array accessors
suffix = QString("Array");
}
// array based field accessor
/* SET */
setgetfields.append(QString("void %2%3Set( %1 *New%3 )\n")
setgetfields.append(QString("void %2%3%4Set( %1 *New%3 )\n")
.arg(fieldTypeStrC[info->fields[n]->type])
.arg(info->name)
.arg(info->fields[n]->name));
.arg(info->fields[n]->name)
.arg(suffix));
setgetfields.append(QString("{\n"));
setgetfields.append(QString(" UAVObjSetDataField(%1Handle(), (void *)New%2, offsetof(%1Data, %2), %3*sizeof(%4));\n")
.arg(info->name)
@ -294,10 +332,11 @@ bool UAVObjectGeneratorFlight::process_object(ObjectInfo *info)
setgetfields.append(QString("}\n"));
/* GET */
setgetfields.append(QString("void %2%3Get( %1 *New%3 )\n")
setgetfields.append(QString("void %2%3%4Get( %1 *New%3 )\n")
.arg(fieldTypeStrC[info->fields[n]->type])
.arg(info->name)
.arg(info->fields[n]->name));
.arg(info->fields[n]->name)
.arg(suffix));
setgetfields.append(QString("{\n"));
setgetfields.append(QString(" UAVObjGetDataField(%1Handle(), (void *)New%2, offsetof(%1Data, %2), %3*sizeof(%4));\n")
.arg(info->name)
@ -315,17 +354,37 @@ bool UAVObjectGeneratorFlight::process_object(ObjectInfo *info)
for (int n = 0; n < info->fields.length(); ++n) {
// if (!info->fields[n]->defaultValues.isEmpty() )
{
QString suffix = QString("");
if (info->fields[n]->elementNames[0].compare(QString("0")) != 0) {
// struct based field accessor
QString structTypeName = QString("%1%2Data").arg(info->name).arg(info->fields[n]->name);
/* SET */
setgetfieldsextern.append(QString("extern void %2%3Set(%1 *New%3);\n")
.arg(structTypeName)
.arg(info->name)
.arg(info->fields[n]->name));
/* GET */
setgetfieldsextern.append(QString("extern void %2%3Get(%1 *New%3);\n")
.arg(structTypeName)
.arg(info->name)
.arg(info->fields[n]->name));
suffix = QString("Array");
}
/* SET */
setgetfieldsextern.append(QString("extern void %2%3Set(%1 *New%3);\n")
setgetfieldsextern.append(QString("extern void %2%3%4Set(%1 *New%3);\n")
.arg(fieldTypeStrC[info->fields[n]->type])
.arg(info->name)
.arg(info->fields[n]->name));
.arg(info->fields[n]->name)
.arg(suffix));
/* GET */
setgetfieldsextern.append(QString("extern void %2%3Get(%1 *New%3);\n")
setgetfieldsextern.append(QString("extern void %2%3%4Get(%1 *New%3);\n")
.arg(fieldTypeStrC[info->fields[n]->type])
.arg(info->name)
.arg(info->fields[n]->name));
.arg(info->fields[n]->name)
.arg(suffix));
}
}
outInclude.replace(QString("$(SETGETFIELDSEXTERN)"), setgetfieldsextern);