1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-02-21 11:54:15 +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 // Get the different axis modes for this switch position
switch (index) { switch (index) {
case 1: case 1:
ManualControlSettingsStabilization1SettingsGet(modes); ManualControlSettingsStabilization1SettingsArrayGet(modes);
break; break;
case 2: case 2:
ManualControlSettingsStabilization2SettingsGet(modes); ManualControlSettingsStabilization2SettingsArrayGet(modes);
break; break;
case 3: case 3:
ManualControlSettingsStabilization3SettingsGet(modes); ManualControlSettingsStabilization3SettingsArrayGet(modes);
break; break;
default: default:
return SYSTEMALARMS_ALARM_ERROR; return SYSTEMALARMS_ALARM_ERROR;

View File

@ -109,7 +109,7 @@ int32_t AirspeedInitialize()
#endif #endif
uint8_t adcRouting[HWSETTINGS_ADCROUTING_NUMELEM]; uint8_t adcRouting[HWSETTINGS_ADCROUTING_NUMELEM];
HwSettingsADCRoutingGet(adcRouting); HwSettingsADCRoutingArrayGet(adcRouting);
// Determine if the barometric airspeed sensor is routed to an ADC pin // Determine if the barometric airspeed sensor is routed to an ADC pin
for (int i = 0; i < HWSETTINGS_ADCROUTING_NUMELEM; i++) { 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; attitudeSettings.AccelBias.Y = trim_accels[1] / trim_samples;
// Z should average -grav // Z should average -grav
attitudeSettings.AccelBias.Z = trim_accels[2] / trim_samples + GRAV / ACCEL_SCALE; attitudeSettings.AccelBias.Z = trim_accels[2] / trim_samples + GRAV / ACCEL_SCALE;
attitudeSettings.TrimFlight = ATTITUDESETTINGS_TRIMFLIGHT_NORMAL; attitudeSettings.TrimFlight = ATTITUDESETTINGS_TRIMFLIGHT_NORMAL;
AttitudeSettingsSet(&attitudeSettings); AttitudeSettingsSet(&attitudeSettings);
} else { } else {
trim_requested = false; trim_requested = false;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -130,11 +130,11 @@ int32_t GPSInitialize(void)
gpsEnabled = true; gpsEnabled = true;
#else #else
HwSettingsInitialize(); 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; gpsEnabled = true;
} else { } else {
gpsEnabled = false; gpsEnabled = false;

View File

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

View File

@ -229,7 +229,7 @@ static int32_t complementaryFilter(struct data *this, float gyro[3], float accel
mag[2] = 0.0f; mag[2] = 0.0f;
#endif #endif
float magBias[3]; float magBias[3];
RevoCalibrationmag_biasGet(magBias); RevoCalibrationmag_biasArrayGet(magBias);
// don't trust Mag for initial orientation if it has not been calibrated // 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) { if (magBias[0] < 1e-6f && magBias[1] < 1e-6f && magBias[2] < 1e-6f) {
this->magCalibrated = false; 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) int32_t TxPIDInitialize(void)
{ {
bool txPIDEnabled; bool txPIDEnabled;
uint8_t optionalModules[HWSETTINGS_OPTIONALMODULES_NUMELEM]; HwSettingsOptionalModulesData optionalModules;
HwSettingsInitialize(); HwSettingsInitialize();
HwSettingsOptionalModulesGet(optionalModules); HwSettingsOptionalModulesGet(&optionalModules);
if (optionalModules[HWSETTINGS_OPTIONALMODULES_TXPID] == HWSETTINGS_OPTIONALMODULES_ENABLED) { if (optionalModules.TxPID == HWSETTINGS_OPTIONALMODULES_ENABLED) {
txPIDEnabled = true; txPIDEnabled = true;
} else { } else {
txPIDEnabled = false; txPIDEnabled = false;

View File

@ -125,11 +125,11 @@ int32_t VtolPathFollowerStart()
*/ */
int32_t VtolPathFollowerInitialize() 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(); VtolPathFollowerSettingsInitialize();
NedAccelInitialize(); NedAccelInitialize();
PathDesiredInitialize(); PathDesiredInitialize();

View File

@ -280,11 +280,49 @@ bool UAVObjectGeneratorFlight::process_object(ObjectInfo *info)
.arg(fieldTypeStrC[info->fields[n]->type])); .arg(fieldTypeStrC[info->fields[n]->type]));
setgetfields.append(QString("}\n")); setgetfields.append(QString("}\n"));
} else { } 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 */ /* 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(fieldTypeStrC[info->fields[n]->type])
.arg(info->name) .arg(info->name)
.arg(info->fields[n]->name)); .arg(info->fields[n]->name)
.arg(suffix));
setgetfields.append(QString("{\n")); setgetfields.append(QString("{\n"));
setgetfields.append(QString(" UAVObjSetDataField(%1Handle(), (void *)New%2, offsetof(%1Data, %2), %3*sizeof(%4));\n") setgetfields.append(QString(" UAVObjSetDataField(%1Handle(), (void *)New%2, offsetof(%1Data, %2), %3*sizeof(%4));\n")
.arg(info->name) .arg(info->name)
@ -294,10 +332,11 @@ bool UAVObjectGeneratorFlight::process_object(ObjectInfo *info)
setgetfields.append(QString("}\n")); setgetfields.append(QString("}\n"));
/* GET */ /* 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(fieldTypeStrC[info->fields[n]->type])
.arg(info->name) .arg(info->name)
.arg(info->fields[n]->name)); .arg(info->fields[n]->name)
.arg(suffix));
setgetfields.append(QString("{\n")); setgetfields.append(QString("{\n"));
setgetfields.append(QString(" UAVObjGetDataField(%1Handle(), (void *)New%2, offsetof(%1Data, %2), %3*sizeof(%4));\n") setgetfields.append(QString(" UAVObjGetDataField(%1Handle(), (void *)New%2, offsetof(%1Data, %2), %3*sizeof(%4));\n")
.arg(info->name) .arg(info->name)
@ -315,17 +354,37 @@ bool UAVObjectGeneratorFlight::process_object(ObjectInfo *info)
for (int n = 0; n < info->fields.length(); ++n) { for (int n = 0; n < info->fields.length(); ++n) {
// if (!info->fields[n]->defaultValues.isEmpty() ) // 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 */ /* 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(fieldTypeStrC[info->fields[n]->type])
.arg(info->name) .arg(info->name)
.arg(info->fields[n]->name)); .arg(info->fields[n]->name)
.arg(suffix));
/* GET */ /* 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(fieldTypeStrC[info->fields[n]->type])
.arg(info->name) .arg(info->name)
.arg(info->fields[n]->name)); .arg(info->fields[n]->name)
.arg(suffix));
} }
} }
outInclude.replace(QString("$(SETGETFIELDSEXTERN)"), setgetfieldsextern); outInclude.replace(QString("$(SETGETFIELDSEXTERN)"), setgetfieldsextern);