// This file was auto-generated by generate_datacopy.py script on Thu Sep  4 12:31:01 2025. Do not edit this file!



template <class A, class B>
void copyCurveRef(A * dest, B * src)
{
  dest->type = src->type;
  dest->value = src->value;
}

template <class A, class B>
void copyMixData(A * dest, B * src)
{
  dest->destCh = src->destCh;
  dest->srcRaw = src->srcRaw;
  dest->carryTrim = src->carryTrim;
  dest->mixWarn = src->mixWarn;
  dest->mltpx = src->mltpx;
  dest->delayPrec = src->delayPrec;
  dest->speedPrec = src->speedPrec;
  dest->flightModes = src->flightModes;
  dest->spare = src->spare;
  dest->weight = src->weight;
  dest->offset = src->offset;
  dest->swtch = src->swtch;
  copyCurveRef(&dest->curve, &src->curve);
  dest->delayUp = src->delayUp;
  dest->delayDown = src->delayDown;
  dest->speedUp = src->speedUp;
  dest->speedDown = src->speedDown;
}

template <class A, class B>
void copyExpoData(A * dest, B * src)
{
  dest->mode = src->mode;
  dest->scale = src->scale;
  dest->trimSource = src->trimSource;
  dest->srcRaw = src->srcRaw;
  dest->weight = src->weight;
  dest->offset = src->offset;
  dest->swtch = src->swtch;
  copyCurveRef(&dest->curve, &src->curve);
  dest->chn = src->chn;
  dest->flightModes = src->flightModes;
  dest->spare = src->spare;
}

template <class A, class B>
void copyLimitData(A * dest, B * src)
{
  dest->min = src->min;
  dest->max = src->max;
  dest->ppmCenter = src->ppmCenter;
  dest->offset = src->offset;
  dest->symetrical = src->symetrical;
  dest->revert = src->revert;
  dest->spare = src->spare;
  dest->curve = src->curve;
}

template <class A, class B>
void copyLogicalSwitchData(A * dest, B * src)
{
  dest->func = src->func;
  dest->v1 = src->v1;
  dest->v3 = src->v3;
  dest->andsw = src->andsw;
  dest->lsPersist = src->lsPersist;
  dest->lsState = src->lsState;
  dest->v2 = src->v2;
  dest->delay = src->delay;
  dest->duration = src->duration;
}

template <class A, class B>
void copyCustomFunctionData(A * dest, B * src)
{
  dest->swtch = src->swtch;
  dest->func = src->func;
  copyCustomFunctionData_all(&dest->all, &src->all);
  dest->active = src->active;
  dest->repeat = src->repeat;
}

template <class A, class B>
void copytrim_t(A * dest, B * src)
{
  dest->value = src->value;
  dest->mode = src->mode;
}

template <class A, class B>
void copyFlightModeData(A * dest, B * src)
{
  for (int i=0; i<8; i++) {
    copytrim_t(&dest->trim[i], &src->trim[i]);
  }
  dest->swtch = src->swtch;
  dest->spare = src->spare;
  dest->fadeIn = src->fadeIn;
  dest->fadeOut = src->fadeOut;
  memcpy(dest->gvars, src->gvars, sizeof(dest->gvars));
}

template <class A, class B>
void copyCurveHeader(A * dest, B * src)
{
  dest->type = src->type;
  dest->smooth = src->smooth;
  dest->points = src->points;
}

template <class A, class B>
void copyGVarData(A * dest, B * src)
{
  dest->min = src->min;
  dest->max = src->max;
  dest->popup = src->popup;
  dest->prec = src->prec;
  dest->unit = src->unit;
  dest->spare = src->spare;
}

template <class A, class B>
void copyTimerData(A * dest, B * src)
{
  dest->start = src->start;
  dest->swtch = src->swtch;
  dest->value = src->value;
  dest->mode = src->mode;
  dest->countdownBeep = src->countdownBeep;
  dest->minuteBeep = src->minuteBeep;
  dest->persistent = src->persistent;
  dest->countdownStart = src->countdownStart;
  dest->showElapsed = src->showElapsed;
  dest->extraHaptic = src->extraHaptic;
  dest->spare = src->spare;
}

template <class A, class B>
void copySwashRingData(A * dest, B * src)
{
  dest->type = src->type;
  dest->value = src->value;
  dest->collectiveSource = src->collectiveSource;
  dest->aileronSource = src->aileronSource;
  dest->elevatorSource = src->elevatorSource;
  dest->collectiveWeight = src->collectiveWeight;
  dest->aileronWeight = src->aileronWeight;
  dest->elevatorWeight = src->elevatorWeight;
}

template <class A, class B>
void copyScriptData(A * dest, B * src)
{
  memcpy(dest->file, src->file, sizeof(dest->file));
  memcpy(dest->name, src->name, sizeof(dest->name));
  memcpy(dest->inputs, src->inputs, sizeof(dest->inputs));
}

template <class A, class B>
void copyRssiAlarmData(A * dest, B * src)
{
}

template <class A, class B>
void copyRFAlarmData(A * dest, B * src)
{
  dest->warning = src->warning;
  dest->critical = src->critical;
}

template <class A, class B>
void copyFrSkyBarData(A * dest, B * src)
{
  dest->source = src->source;
  dest->barMin = src->barMin;
  dest->barMax = src->barMax;
}

template <class A, class B>
void copyFrSkyLineData(A * dest, B * src)
{
  memcpy(dest->sources, src->sources, sizeof(dest->sources));
}

template <class A, class B>
void copyTelemetryScriptData(A * dest, B * src)
{
  memcpy(dest->file, src->file, sizeof(dest->file));
  memcpy(dest->inputs, src->inputs, sizeof(dest->inputs));
}

template <class A, class B>
void copyVarioData(A * dest, B * src)
{
  dest->source = src->source;
  dest->centerSilent = src->centerSilent;
  dest->centerMax = src->centerMax;
  dest->centerMin = src->centerMin;
  dest->min = src->min;
  dest->max = src->max;
}

template <class A, class B>
void copyTelemetrySensor(A * dest, B * src)
{
  dest->id = src->id;
  dest->instance = src->instance;
  dest->subId = src->subId;
  dest->type = src->type;
  dest->spare1 = src->spare1;
  dest->unit = src->unit;
  dest->prec = src->prec;
  dest->autoOffset = src->autoOffset;
  dest->filter = src->filter;
  dest->logs = src->logs;
  dest->persistent = src->persistent;
  dest->onlyPositive = src->onlyPositive;
  dest->spare2 = src->spare2;
  dest->param = src->param;
}

template <class A, class B>
void copyTrainerModuleData(A * dest, B * src)
{
  dest->mode = src->mode;
  dest->channelsStart = src->channelsStart;
  dest->channelsCount = src->channelsCount;
  dest->frameLength = src->frameLength;
  dest->delay = src->delay;
  dest->pulsePol = src->pulsePol;
  dest->spare2 = src->spare2;
}

template <class A, class B>
void copyPpmModule(A * dest, B * src)
{
  dest->delay = src->delay;
  dest->pulsePol = src->pulsePol;
  dest->outputType = src->outputType;
  dest->frameLength = src->frameLength;
}

template <class A, class B>
void copyModuleData(A * dest, B * src)
{
  dest->type = src->type;
  dest->channelsStart = src->channelsStart;
  dest->channelsCount = src->channelsCount;
  dest->failsafeMode = src->failsafeMode;
  dest->subType = src->subType;
  memcpy(dest->raw, src->raw, sizeof(dest->raw));
}

template <class A, class B>
void copyModelHeader(A * dest, B * src)
{
  memcpy(dest->name, src->name, sizeof(dest->name));
  memcpy(dest->modelId, src->modelId, sizeof(dest->modelId));
}

template <class A, class B>
void copyRGBLedColor(A * dest, B * src)
{
  dest->r = src->r;
  dest->g = src->g;
  dest->b = src->b;
}

template <class A, class B>
void copyPartialModel(A * dest, B * src)
{
  copyModelHeader(&dest->header, &src->header);
  for (int i=0; i<3; i++) {
    copyTimerData(&dest->timers[i], &src->timers[i]);
  }
}

template <class A, class B>
void copyUSBJoystickChData(A * dest, B * src)
{
  dest->mode = src->mode;
  dest->inversion = src->inversion;
  dest->param = src->param;
  dest->btn_num = src->btn_num;
  dest->switch_npos = src->switch_npos;
}

template <class A, class B>
void copyModelData(A * dest, B * src)
{
  copyModelHeader(&dest->header, &src->header);
  for (int i=0; i<3; i++) {
    copyTimerData(&dest->timers[i], &src->timers[i]);
  }
  dest->telemetryProtocol = src->telemetryProtocol;
  dest->thrTrim = src->thrTrim;
  dest->noGlobalFunctions = src->noGlobalFunctions;
  dest->displayTrims = src->displayTrims;
  dest->ignoreSensorIds = src->ignoreSensorIds;
  dest->trimInc = src->trimInc;
  dest->disableThrottleWarning = src->disableThrottleWarning;
  dest->displayChecklist = src->displayChecklist;
  dest->extendedLimits = src->extendedLimits;
  dest->extendedTrims = src->extendedTrims;
  dest->throttleReversed = src->throttleReversed;
  dest->enableCustomThrottleWarning = src->enableCustomThrottleWarning;
  dest->disableTelemetryWarning = src->disableTelemetryWarning;
  dest->showInstanceIds = src->showInstanceIds;
  dest->checklistInteractive = src->checklistInteractive;
  dest->spare3 = src->spare3;
  dest->customThrottleWarningPosition = src->customThrottleWarningPosition;
  dest->beepANACenter = src->beepANACenter;
  for (int i=0; i<64; i++) {
    copyMixData(&dest->mixData[i], &src->mixData[i]);
  }
  for (int i=0; i<32; i++) {
    copyLimitData(&dest->limitData[i], &src->limitData[i]);
  }
  for (int i=0; i<64; i++) {
    copyExpoData(&dest->expoData[i], &src->expoData[i]);
  }
  for (int i=0; i<32; i++) {
    copyCurveHeader(&dest->curves[i], &src->curves[i]);
  }
  memcpy(dest->points, src->points, sizeof(dest->points));
  for (int i=0; i<64; i++) {
    copyLogicalSwitchData(&dest->logicalSw[i], &src->logicalSw[i]);
  }
  for (int i=0; i<64; i++) {
    copyCustomFunctionData(&dest->customFn[i], &src->customFn[i]);
  }
  copySwashRingData(&dest->swashR, &src->swashR);
  for (int i=0; i<9; i++) {
    copyFlightModeData(&dest->flightModeData[i], &src->flightModeData[i]);
  }
  for (int i=0; i<9; i++) {
    copyGVarData(&dest->gvars[i], &src->gvars[i]);
  }
  dest->thrTrimSw = src->thrTrimSw;
  dest->potsWarnMode = src->potsWarnMode;
  dest->spare1 = src->spare1;
  for (int i=0; i<2; i++) {
    copyModuleData(&dest->moduleData[i], &src->moduleData[i]);
  }
  memcpy(dest->failsafeChannels, src->failsafeChannels, sizeof(dest->failsafeChannels));
  copyTrainerModuleData(&dest->trainerData, &src->trainerData);
  dest->screensType = src->screensType;
  memcpy(dest->screens, src->screens, sizeof(dest->screens));
  dest->view = src->view;
  memcpy(dest->modelRegistrationID, src->modelRegistrationID, sizeof(dest->modelRegistrationID));
  dest->functionSwitchConfig = src->functionSwitchConfig;
  dest->functionSwitchGroup = src->functionSwitchGroup;
  dest->functionSwitchStartConfig = src->functionSwitchStartConfig;
  dest->functionSwitchLogicalState = src->functionSwitchLogicalState;
  memcpy(dest->switchNames, src->switchNames, sizeof(dest->switchNames));
  dest->radioGFDisabled = src->radioGFDisabled;
  dest->radioTrainerDisabled = src->radioTrainerDisabled;
  dest->modelHeliDisabled = src->modelHeliDisabled;
  dest->modelFMDisabled = src->modelFMDisabled;
  dest->modelCurvesDisabled = src->modelCurvesDisabled;
  dest->modelGVDisabled = src->modelGVDisabled;
  dest->modelLSDisabled = src->modelLSDisabled;
  dest->modelSFDisabled = src->modelSFDisabled;
  dest->modelCustomScriptsDisabled = src->modelCustomScriptsDisabled;
  dest->modelTelemetryDisabled = src->modelTelemetryDisabled;
}

template <class A, class B>
void copyStepsCalibData(A * dest, B * src)
{
  dest->count = src->count;
  memcpy(dest->steps, src->steps, sizeof(dest->steps));
}

template <class A, class B>
void copyCalibData(A * dest, B * src)
{
  dest->mid = src->mid;
  dest->spanNeg = src->spanNeg;
  dest->spanPos = src->spanPos;
}

template <class A, class B>
void copyTrainerMix(A * dest, B * src)
{
  dest->srcChn = src->srcChn;
  dest->mode = src->mode;
  dest->studWeight = src->studWeight;
}

template <class A, class B>
void copyTrainerData(A * dest, B * src)
{
  memcpy(dest->calib, src->calib, sizeof(dest->calib));
}

template <class A, class B>
void copyRadioData(A * dest, B * src)
{
  dest->timezoneMinutes = src->timezoneMinutes;
  for (int i=0; i<12; i++) {
    copyCalibData(&dest->calib[i], &src->calib[i]);
  }
  dest->currModel = src->currModel;
  dest->contrast = src->contrast;
  dest->backlightMode = src->backlightMode;
  dest->antennaMode = src->antennaMode;
  dest->disableRtcWarning = src->disableRtcWarning;
  dest->keysBacklight = src->keysBacklight;
  dest->internalModule = src->internalModule;
  dest->stickMode = src->stickMode;
  dest->timezone = src->timezone;
  dest->adjustRTC = src->adjustRTC;
  dest->internalModuleBaudrate = src->internalModuleBaudrate;
  dest->splashMode = src->splashMode;
  dest->hapticMode = src->hapticMode;
  dest->switchesDelay = src->switchesDelay;
  for (int i=0; i<64; i++) {
    copyCustomFunctionData(&dest->customFn[i], &src->customFn[i]);
  }
  dest->potsConfig = src->potsConfig;
  dest->switchConfig = src->switchConfig;
  dest->backlightColor = src->backlightColor;
  memcpy(dest->bluetoothName, src->bluetoothName, sizeof(dest->bluetoothName));
  memcpy(dest->ownerRegistrationID, src->ownerRegistrationID, sizeof(dest->ownerRegistrationID));
  dest->invertLCD = src->invertLCD;
}

template <class A, class B>
void copyCustomFunctionData_all(A * dest, B * src)
{
  dest->val = src->val;
  dest->mode = src->mode;
  dest->param = src->param;
  dest->val2 = src->val2;
}

