コード例 #1
0
ファイル: JammingCurve.cpp プロジェクト: BulSV/Radar
void JammingCurve::setData(double azimuth,
                           double azimutWidth,
                           QList<double> distances,
                           size_t size,
                           const QPen &pen)
{
    clearCurves();
    
    for(int i = 0; i < distances.size(); ++i) {
        QwtPolarCurve *curve = new QwtPolarCurve();
        curve->setPen(pen);
        m_curves.append(curve);
        m_curves.last()->setData(new ArcData(azimuth, azimutWidth, distances.at(i), size));
    }		
}
コード例 #2
0
ファイル: tempcompcurve.cpp プロジェクト: Crash1/TauLabs
/**
 * @brief TempCompCurve::plotData Visualize the measured data
 * @param temp The set of temperature measurements
 * @param gyro The set of gyro measurements
 */
void TempCompCurve::plotData(QList<double> temp, QList<double> gyro, QList <double> coeff)
{
    // TODO: Keep the curves and free them in the destructors
    const int STEPS = 100;

    points.clear();
    fit.clear();

    clearCurves();

    double min = temp[0];
    double max = temp[0];
    for (int i = 0; i < temp.size(); i++) {
        points.append(QPointF(temp[i],gyro[i]));
        min = qMin(min, temp[i]);
        max = qMax(max, temp[i]);
    }

    double step = (max - min) / STEPS;
    for (int i = 0; i < STEPS; i++) {
        double t = min + step * i;
        double f = coeff[0] + coeff[1] * t + coeff[2] * pow(t,2) + coeff[3] * pow(t,3);
        fit.append(QPointF(t, f));
    }

    // Plot the raw data points
    QPen pen = QPen(Qt::DotLine);
    pen.setColor(QColor(244, 244, 244));

    dataCurve = new QwtPlotCurve("Gyro");
    dataCurve->setPen(pen);
    dataCurve->setSamples(this->points);
    dataCurve->attach(this);

    // Plot the fit
    pen.setStyle(Qt::SolidLine);
    pen.setColor(QColor(0,255,0));

    fitCurve = new QwtPlotCurve("Fit");
    fitCurve->setPen(pen);
    fitCurve->setSamples(fit);
    fitCurve->attach(this);

    replot();
}
コード例 #3
0
ファイル: templates.cpp プロジェクト: BenZoFly/opentx
void applyTemplate(uint8_t idx)
{
    MixData *md;

    //CC(STK)   -> vSTK
    //ICC(vSTK) -> STK
#define ICC(x) icc[(x)-1]
    uint8_t icc[4] = {0};
    for (uint8_t i=0; i<4; i++) { //generate inverse array
      for(uint8_t j=0; j<4; j++)
        if(CC(i+1)==j+MIXSRC_Rud) icc[j]=i;
    }

    switch (idx) {
      case TMPL_CLEAR_MIXES:
      case TMPL_SIMPLE_4CH:
      case TMPL_HELI_SETUP:
        clearMixes();
        break;
    }

    switch (idx) {
      // Simple 4-Ch
      case TMPL_SIMPLE_4CH:
        defaultInputs();
        setDest(ICC(STK_RUD), TMPL_INPUT(STK_RUD));
        setDest(ICC(STK_ELE), TMPL_INPUT(STK_ELE));
        setDest(ICC(STK_THR), TMPL_INPUT(STK_THR));
        setDest(ICC(STK_AIL), TMPL_INPUT(STK_AIL));
        break;

      // Sticky-T-Cut
      case TMPL_STI_THR_CUT:
        md=setDest(ICC(STK_THR), MIXSRC_MAX); mixSetWeight(md, -100);  md->swtch=SWSRC_SWC;  md->mltpx=MLTPX_REP;
        md=setDest(13, MIXSRC_CH14); // md->weight= 100; done by setDest anyway
        md=setDest(13, MIXSRC_MAX); mixSetWeight(md, -100);  md->swtch=SWSRC_SWB;  md->mltpx=MLTPX_REP;
        md=setDest(13, MIXSRC_MAX); /* md->weight= 100;*/  md->swtch=SWSRC_THR;  md->mltpx=MLTPX_REP;
        setLogicalSwitch(11, LS_FUNC_VNEG, STK_THR, -99);
        setLogicalSwitch(12, LS_FUNC_VPOS, MIXSRC_CH14, 0);
        break;

      // V-Tail
      case TMPL_V_TAIL:
        defaultInputs();
        setDest(ICC(STK_RUD), TMPL_INPUT(STK_RUD), true);
        md=setDest(ICC(STK_RUD), TMPL_INPUT(STK_ELE)); mixSetWeight(md, -100);
        setDest(ICC(STK_ELE), TMPL_INPUT(STK_RUD), true);
        setDest(ICC(STK_ELE), TMPL_INPUT(STK_ELE));
        break;

      // Elevon\\Delta
      case TMPL_ELEVON_DELTA:
        defaultInputs();
        setDest(ICC(STK_ELE), MIXSRC_Ele, true);
        setDest(ICC(STK_ELE), MIXSRC_Ail);
        setDest(ICC(STK_AIL), MIXSRC_Ele, true);
        md=setDest(ICC(STK_AIL), MIXSRC_Ail); mixSetWeight(md, -100);
        break;

      // eCCPM
      case TMPL_ECCPM:
        md=setDest(ICC(STK_ELE), MIXSRC_Ele, true); md->weight= 72;
        md=setDest(ICC(STK_ELE), MIXSRC_Thr);  md->weight= 55;
        md=setDest(ICC(STK_AIL), MIXSRC_Ele, true);  mixSetWeight(md, -36);
        md=setDest(ICC(STK_AIL), MIXSRC_Ail);  md->weight= 62;
        md=setDest(ICC(STK_AIL), MIXSRC_Thr);  md->weight= 55;
        md=setDest(5, MIXSRC_Ele, true);       mixSetWeight(md, -36);
        md=setDest(5, MIXSRC_Ail);             mixSetWeight(md, -62);
        md=setDest(5, MIXSRC_Thr);             md->weight= 55;
        break;

      // Heli Setup
      case TMPL_HELI_SETUP:
        clearCurves();

        //Set up Mixes
        // 3 cyclic channels
        md=setDest(0, MIXSRC_CYC1); // md->weight=100;
        md=setDest(1, MIXSRC_CYC2); // md->weight=100;
        md=setDest(2, MIXSRC_CYC3); // md->weight=100;

        // rudder
        md=setDest(3, MIXSRC_Rud); // md->weight=100;

        // throttle
#if defined(PCBTARANIS)
        // TODO
#else
        md=setDest(4, MIXSRC_Thr); md->swtch=SWSRC_ID0; mixSetCurve(md, 0); md->carryTrim=TRIM_OFF;
        md=setDest(4, MIXSRC_Thr); md->swtch=SWSRC_ID1; mixSetCurve(md, 1); md->carryTrim=TRIM_OFF;
        md=setDest(4, MIXSRC_Thr); md->swtch=SWSRC_ID2; mixSetCurve(md, 2); md->carryTrim=TRIM_OFF;
#endif
        md=setDest(4, MIXSRC_MAX); mixSetWeight(md, -100); md->swtch=SWSRC_THR;  md->mltpx=MLTPX_REP;

        // gyro gain
        md=setDest(5, MIXSRC_MAX); md->weight= 30; md->swtch=-SWSRC_GEA;
        md=setDest(5, MIXSRC_MAX); mixSetWeight(md, -30); md->swtch= SWSRC_GEA;
   
        // collective
#if defined(PCBTARANIS)
        // TODO
#else
        md=setDest(10, MIXSRC_Thr); /*md->weight= 100;*/ md->swtch=SWSRC_ID0; mixSetCurve(md, 3); md->carryTrim=TRIM_OFF;
        md=setDest(10, MIXSRC_Thr); /*md->weight= 100;*/ md->swtch=SWSRC_ID1; mixSetCurve(md, 4); md->carryTrim=TRIM_OFF;
        md=setDest(10, MIXSRC_Thr); /*md->weight= 100;*/ md->swtch=SWSRC_ID2; mixSetCurve(md, 5); md->carryTrim=TRIM_OFF;
#endif

        g_model.swashR.collectiveSource = MIXSRC_CH11;
        g_model.swashR.type = SWASH_TYPE_120;

        // curves
        setCurve(0, heli_ar1);
        setCurve(1, heli_ar2);
        setCurve(2, heli_ar3);
        setCurve(3, heli_ar4);
        setCurve(4, heli_ar5);
        setCurve(5, heli_ar5);
        break;

      // Servo Test
      case TMPL_SERVO_TEST:
        md=setDest(NUM_CHNOUT-1, MIXSRC_SW1, true); md->weight=110; md->mltpx=MLTPX_ADD; md->delayUp = 6; md->delayDown = 6; md->speedUp = 8; md->speedDown = 8;
        setLogicalSwitch(1, LS_FUNC_VNEG, MIXSRC_LAST_CH, 0);
        break;

    default:
        break;

    }

    eeDirty(EE_MODEL);
}
コード例 #4
0
ファイル: ezset.cpp プロジェクト: leila1349/OPT_recon
bool
EZPlot::do_cmd (int lx)
{
  char str [1024];
  char strIn [1024];
  int n;
  double f;

  switch (lx) {
  case S_TEXTSIZE:
    if (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE) {
      if (f >= 0.0 && f <= 1.0) {
        v_textsize = f;
        s_textsize = TRUE;
      } else
        s_textsize = FALSE;
    }
    break;
  case S_REPLOT:
    plot (m_pSGP);
    break;
  case S_CLEAR:
    clearCurves ();
    break;
  case S_TITLE:
    m_pol.readText (strIn, sizeof(strIn));
    c_title = strIn;
    break;
  case S_LEGEND:
    m_pol.readText (strIn, sizeof(strIn));
    if (m_iCurrentCurve >= 0)
      setLegend (m_iCurrentCurve, strIn);
    break;
  case S_XLABEL:
    m_pol.readText (strIn, sizeof(strIn));
    c_xlabel = strIn;
    break;
  case S_YLABEL:
    m_pol.readText (strIn, sizeof(strIn));
    c_ylabel = strIn;
    break;
  case S_XCROSS:
    if (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE) {
      v_xcross = f;
      s_xcross = TRUE;
    } else
      s_xcross = FALSE;
    break;
  case S_YCROSS:
    if (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE) {
      v_ycross = f;
      s_ycross = TRUE;
    } else
      s_ycross = FALSE;
    break;
  case S_NOXAXIS:
    o_xaxis = NOAXIS;
    break;
  case S_NOYAXIS:
    o_yaxis = NOAXIS;
    break;
  case S_XLIN:
    o_xaxis = LINEAR;
    break;
  case S_YLIN:
    o_yaxis = LINEAR;
    break;
  case S_XLOG:
    o_xaxis = LOG;
    break;
  case S_YLOG:
    o_yaxis = LOG;
    break;
  case S_XAUTOSCALE:
    s_xmin = FALSE;
    s_xmax = FALSE;
    break;
  case S_YAUTOSCALE:
    s_ymin = FALSE;
    s_ymax = FALSE;
    break;
  case S_XMIN:
    if (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE) {
      v_xmin = f;
      s_xmin = TRUE;
    }
    break;
  case S_XMAX:
    if (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE) {
      v_xmax = f;
      s_xmax = TRUE;
    }
    break;
  case S_YMIN:
    if (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE) {
      v_ymin = f;
      s_ymin = TRUE;
    }
    break;
  case S_YMAX:
    if (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE) {
      v_ymax = f;
      s_ymax = TRUE;
    }
    break;
  case S_SOLID:
    o_linestyle = SGP::LS_SOLID;
    break;
  case S_DASH:
    int ls;
    ls = SGP::LS_DASH1;
    if (m_pol.readInteger (&n, POL::TT_REAL, FALSE, 0, 0) == TRUE) {
      if (n == 1)
        ls = SGP::LS_DASH1;
      else if (n == 2)
        ls = SGP::LS_DASH2;
      else if (n == 3)
        ls = SGP::LS_DASH3;
      else if (n == 4)
        ls = SGP::LS_DASH4;
      else if (n == 5)
        ls = SGP::LS_DOTTED;
    }
    if (m_iCurrentCurve < 0)
      o_linestyle = ls;
    else
      setLinestyle (m_iCurrentCurve, ls);
    break;
  case S_NOLINE:
    o_linestyle = SGP::LS_NOLINE;
    break;
  case S_PEN:
  case S_COLOR:
    if (m_pol.readInteger (&n, POL::TT_REAL, FALSE, 0, 0) == TRUE)
    {
      if (n >= 0) {
        if (m_iCurrentCurve < 0)
          o_color = n;
        else
          setColor (m_iCurrentCurve, n);
      } else
        bad_option("The color you picked");
    }
    break;
  case S_BOX:
    o_box = TRUE;
    break;
  case S_NOBOX:
    o_box = FALSE;
    break;
  case S_GRID:
    o_grid = TRUE;
    break;
  case S_NOGRID:
    o_grid = FALSE;
    break;
  case S_XLENGTH:
    if (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE)
      if (f > 0.0 && f <= 1.0)
        o_xlength = f;
      break;
  case S_YLENGTH:
    if (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE)
      if (f > 0.0 && f <= 1.0)
        o_ylength = f;
      break;
  case S_XPORIGIN:
    if (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE)
      if (f >= 0.0 && f < 1.0)
        o_xporigin = f;
      break;
  case S_YPORIGIN:
    if (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE)
      if (f >= 0.0 && f < 1.0)
        o_yporigin = f;
      break;
  case S_TAG:
    if (m_pol.readWord("no", 2) == TRUE)
      o_tag = FALSE;
    else if (m_pol.readWord("off", 2) == TRUE)
      o_tag = FALSE;
    else
      o_tag = TRUE;
    break;
  case S_LEGENDBOX:
    if (m_pol.readWord("inside", 2) == TRUE)
      o_legendbox = INSIDE;
    else if (m_pol.readWord("outside", 3) == TRUE)
      o_legendbox = OUTSIDE;
    else if (m_pol.readWord("none",2) == TRUE)
      o_legendbox = NOLEGEND;
    else {
      m_pol.readText (str, POL::MAXTOK);
      bad_option(str);
    }
    break;
  case S_XLEGEND:
    if (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE)
    {
      if (f >= 0.0 && f < 1.0) {
        v_xlegend = f;
        s_xlegend = TRUE;
      }
      else
        s_xlegend = FALSE;
    }
    break;
  case S_YLEGEND:
    if (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE)
    {
      if (f >= 0.0 && f < 1.0) {
        v_ylegend = f;
        s_ylegend = TRUE;
      }
      else
        s_ylegend = FALSE;
    }
    break;
  case S_SYMBOL:
    if (m_pol.readInteger (&n, POL::TT_REAL, FALSE, 0, 0) == TRUE) {
      if (n > 0 && n <= MAXSYMBOL) {
        if (m_iCurrentCurve < 0)
          o_symbol = n;
        else
          setSymbol (m_iCurrentCurve, n);
      }
    } else {
      if (m_pol.readWord("every",5) == TRUE) {
        if (m_pol.readInteger (&n, POL::TT_REAL, FALSE, 0, 0) == TRUE) {
          int sym = 1;
          if (n > 0)
            sym = n;
          if (m_iCurrentCurve < 0)
            o_symfreq = sym;
          else
            setSymbolFreq (m_iCurrentCurve, sym);
        }
      } else if (m_pol.readWord ("none",4) == TRUE) {
        o_symbol = -1;
      }
    }
    break;
  case S_CURVE:
    if (m_pol.readInteger (&n, POL::TT_REAL, FALSE, 0, 0) == TRUE) {
      if (n > 0)
        m_iCurrentCurve = n - 1;
    } else {
      if (m_pol.readWord ("all",3) == TRUE)
        m_iCurrentCurve = -1;
    }
    break;
  case S_XTICKS:
    if (m_pol.readUserToken(str,&lx) == FALSE)
      break;
    if (lx == S_ABOVE)
      o_xticks = ABOVE;
    else if (lx == S_BELOW)
      o_xticks = BELOW;
    else if (lx == S_NOLABEL)
      o_xtlabel = FALSE;
    else if (lx == S_LABEL)
      o_xtlabel = TRUE;
    else if (lx == S_MAJOR) {
      if (m_pol.readInteger (&n, POL::TT_REAL, FALSE, 0, 0) == TRUE)
        if (n > 1 && n < 100)
          o_xmajortick = n;
    } else if (lx == S_MINOR)
      if (m_pol.readInteger (&n, POL::TT_REAL, FALSE, 0, 0) == TRUE)
        if (n >= 0 && n < 100)
          o_xminortick = n;
        break;
  case S_YTICKS:
    if (m_pol.readUserToken(str,&lx) == FALSE)
      break;
    if (lx == S_RIGHT)
      o_yticks = RIGHT;
    else if (lx == S_LEFT)
      o_yticks = LEFT;
    else if (lx == S_NOLABEL)
      o_ytlabel = FALSE;
    else if (lx == S_LABEL)
      o_ytlabel = TRUE;
    else if (lx == S_MAJOR) {
      if (m_pol.readInteger (&n, POL::TT_REAL, FALSE, 0, 0) == TRUE)
        if (n > 1 && n < 100)
          o_ymajortick = n;
    } else if (lx == S_MINOR)
      if (m_pol.readInteger (&n, POL::TT_REAL, FALSE, 0, 0) == TRUE)
        if (n >= 0 && n < 100)
          o_yminortick = n;
        break;
  case S_LXFRAC:
    if (m_pol.readInteger (&n, POL::TT_REAL, FALSE, 0, 0) == TRUE) {
      if (n >= 0) {
        v_lxfrac = n;
        s_lxfrac = TRUE;
      }
    } else
      s_lxfrac = FALSE;
    break;
  case S_LYFRAC:
    if (m_pol.readInteger (&n, POL::TT_REAL, FALSE, 0, 0) == TRUE) {
      if (n >= 0) {
        v_lyfrac = n;
        s_lyfrac = TRUE;
      }
    } else
      s_lyfrac = FALSE;
    break;
    break;
  default:
    fprintf (stderr, "Unimplemented EZPLOT command\n");
    break;
  }

  m_pol.reader ();
  return (true);
}
コード例 #5
0
ファイル: JammingCurve.cpp プロジェクト: BulSV/Radar
JammingCurve::~JammingCurve()
{
    clearCurves();
}
コード例 #6
0
void applyTemplate(uint8_t idx)
#endif
{
    MixData *md = &g_model.mixData[0];

    //CC(STK)   -> vSTK
    //ICC(vSTK) -> STK
#define ICC(x) icc[(x)-1]
    uint8_t icc[4] = {0};
    for(uint8_t i=1; i<=4; i++) //generate inverse array
        for(uint8_t j=1; j<=4; j++) if(CC(i)==j) icc[j-1]=i;


#ifndef NO_TEMPLATES
    uint8_t j = 0;

    //Simple 4-Ch
    if(idx==j++)
    {
#endif
        clearMixes();
        md=setDest(ICC(STK_RUD));
        md->srcRaw=CM(STK_RUD);
        md=setDest(ICC(STK_ELE));
        md->srcRaw=CM(STK_ELE);
        md=setDest(ICC(STK_THR));
        md->srcRaw=CM(STK_THR);
        md=setDest(ICC(STK_AIL));
        md->srcRaw=CM(STK_AIL);

#ifndef NO_TEMPLATES
    }

    //T-Cut
    if(idx==j++)
    {
        md=setDest(ICC(STK_THR));
        md->srcRaw=MIX_MAX;
        md->weight=-100;
        md->swtch=DSW_THR;
        md->mltpx=MLTPX_REP;
    }

    //sticky t-cut
    if(idx==j++)
    {
        md=setDest(ICC(STK_THR));
        md->srcRaw=MIX_MAX;
        md->weight=-100;
        md->swtch=DSW_SWC;
        md->mltpx=MLTPX_REP;
        md=setDest(14);
        md->srcRaw=CH(14);
        md=setDest(14);
        md->srcRaw=MIX_MAX;
        md->weight=-100;
        md->swtch=DSW_SWB;
        md->mltpx=MLTPX_REP;
        md=setDest(14);
        md->srcRaw=MIX_MAX;
        md->swtch=DSW_THR;
        md->mltpx=MLTPX_REP;

        setSwitch(0xB,CS_VNEG, CM(STK_THR), -99);
        setSwitch(0xC,CS_VPOS, CH(14), 0);
    }

    //V-Tail
    if(idx==j++)
    {
        clearMixes();
        md=setDest(ICC(STK_RUD));
        md->srcRaw=CM(STK_RUD);
        md=setDest(ICC(STK_RUD));
        md->srcRaw=CM(STK_ELE);
        md->weight=-100;
        md=setDest(ICC(STK_ELE));
        md->srcRaw=CM(STK_RUD);
        md=setDest(ICC(STK_ELE));
        md->srcRaw=CM(STK_ELE);
    }

    //Elevon\\Delta
    if(idx==j++)
    {
        clearMixes();
        md=setDest(ICC(STK_ELE));
        md->srcRaw=CM(STK_ELE);
        md=setDest(ICC(STK_ELE));
        md->srcRaw=CM(STK_AIL);
        md=setDest(ICC(STK_AIL));
        md->srcRaw=CM(STK_ELE);
        md=setDest(ICC(STK_AIL));
        md->srcRaw=CM(STK_AIL);
        md->weight=-100;
    }


    //Heli Setup
    if(idx==j++)
    {
        clearMixes();  //This time we want a clean slate
        clearCurves();

        //Set up Mixes
        //3 cyclic channels
        md=setDest(1);
        md->srcRaw=MIX_CYC1;
        md=setDest(2);
        md->srcRaw=MIX_CYC2;
        md=setDest(3);
        md->srcRaw=MIX_CYC3;

        //rudder
        md=setDest(4);
        md->srcRaw=CM(STK_RUD);

        //Throttle
        md=setDest(5);
        md->srcRaw=CM(STK_THR);
        md->swtch= DSW_ID0;
        md->curve=CV(1);
        md->carryTrim=TRIM_OFF;
        md=setDest(5);
        md->srcRaw=CM(STK_THR);
        md->swtch= DSW_ID1;
        md->curve=CV(2);
        md->carryTrim=TRIM_OFF;
        md=setDest(5);
        md->srcRaw=CM(STK_THR);
        md->swtch= DSW_ID2;
        md->curve=CV(3);
        md->carryTrim=TRIM_OFF;
        md=setDest(5);
        md->srcRaw=MIX_MAX;
        md->weight=-100;
        md->swtch= DSW_THR;
        md->mltpx=MLTPX_REP;

        //gyro gain
        md=setDest(6);
        md->srcRaw=MIX_FULL;
        md->weight=30;
        md->swtch=-DSW_GEA;

        //collective
        md=setDest(11);
        md->srcRaw=CM(STK_THR);
        md->weight=70;
        md->swtch= DSW_ID0;
        md->curve=CV(4);
        md->carryTrim=TRIM_OFF;
        md=setDest(11);
        md->srcRaw=CM(STK_THR);
        md->weight=70;
        md->swtch= DSW_ID1;
        md->curve=CV(5);
        md->carryTrim=TRIM_OFF;
        md=setDest(11);
        md->srcRaw=CM(STK_THR);
        md->weight=70;
        md->swtch= DSW_ID2;
        md->curve=CV(6);
        md->carryTrim=TRIM_OFF;

        g_model.swashType = SWASH_TYPE_120;
        g_model.swashCollectiveSource = CH(11);

        //Set up Curves
        setCurve(CURVE5(1),heli_ar1);
        setCurve(CURVE5(2),heli_ar2);
        setCurve(CURVE5(3),heli_ar3);
        setCurve(CURVE5(4),heli_ar4);
        setCurve(CURVE5(5),heli_ar5);
        setCurve(CURVE5(6),heli_ar5);
    }

    //Gyro Gain
    if(idx==j++)
    {
        md=setDest(6);
        md->srcRaw=STK_P2;
        md->weight= 50;
        md->swtch=-DSW_GEA;
        md->sOffset=100;
        md=setDest(6);
        md->srcRaw=STK_P2;
        md->weight=-50;
        md->swtch= DSW_GEA;
        md->sOffset=100;
    }

    //Servo Test
    if(idx==j++)
    {
        md=setDest(15);
        md->srcRaw=CH(16);
        md->speedUp = 8;
        md->speedDown = 8;
        md=setDest(16);
        md->srcRaw=MIX_FULL;
        md->weight= 110;
        md->swtch=DSW_SW1;
        md=setDest(16);
        md->srcRaw=MIX_MAX;
        md->weight=-110;
        md->swtch=DSW_SW2;
        md->mltpx=MLTPX_REP;
        md=setDest(16);
        md->srcRaw=MIX_MAX;
        md->weight= 110;
        md->swtch=DSW_SW3;
        md->mltpx=MLTPX_REP;

        setSwitch(1,CS_LESS,CH(15),CH(16));
        setSwitch(2,CS_VPOS,CH(15),   105);
        setSwitch(3,CS_VNEG,CH(15),  -105);
    }



    STORE_MODELVARS;
    eeWaitComplete() ;

#endif

}