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); }
ObitInfoList* MednFlagIn (int argc, char **argv, ObitErr *err) /*----------------------------------------------------------------------- */ /* Parse control info from command line */ /* Input: */ /* argc Number of arguments from command line */ /* argv Array of strings from command line */ /* Output: */ /* err Obit Error stack */ /* return ObitInfoList with defaults/parsed values */ /*----------------------------------------------------------------------- */ { olong ax; gchar *arg; gboolean init=FALSE; ObitInfoType type; gint32 dim[MAXINFOELEMDIM] = {1,1,1,1,1}; gchar *strTemp; oint itemp, i, j, k; ObitInfoList* list=NULL; gchar *routine = "MednFlagIn"; /* error checks */ if (err->error) return list; /* Make default inputs InfoList */ list = defaultInputs(err); /* command line arguments */ if (argc<=1) Usage(); /* must have arguments */ /* parse command line */ for (ax=1; ax<argc; ax++) { arg = argv[ax]; if (strcmp(arg, "-input") == 0){ /* input parameters */ infile = argv[++ax]; /* parse input file */ ObitParserParse (infile, list, err); init = TRUE; } else if (strcmp(arg, "-output") == 0){ /* output results */ outfile = argv[++ax]; } else if (strcmp(arg, "-pgmNumber") == 0) { /*Program number */ dim[0] = 1; itemp = strtol(argv[++ax], NULL, 0); ObitInfoListPut (list, "pgmNumber", OBIT_oint, dim, &itemp, err); } else if (strcmp(arg, "-AIPSuser") == 0) { /* AIPS user number */ dim[0] = 1; itemp = strtol(argv[++ax], NULL, 0); ObitInfoListPut (list, "AIPSuser", OBIT_oint, dim, &itemp, err); } else if (strcmp(arg, "-inSeq") == 0) { /* AIPS sequence number */ dim[0] = 1; itemp = strtol(argv[++ax], NULL, 0); ObitInfoListPut (list, "inSeq", OBIT_oint, dim, &itemp, err); } else if (strcmp(arg, "-inDisk") == 0) { /* input disk number */ dim[0] = 1; itemp = strtol(argv[++ax], NULL, 0); ObitInfoListPut (list, "inDisk", OBIT_oint, dim, &itemp, err); } else if (strcmp(arg, "-DataType") == 0) { /* Image type AIPS or FITS */ strTemp = argv[++ax]; dim[0] = strlen (strTemp); ObitInfoListAlwaysPut (list, "DataType", OBIT_string, dim, strTemp); } else if (strcmp(arg, "-inName") == 0) { /* AIPS inName*/ strTemp = argv[++ax]; dim[0] = strlen (strTemp); ObitInfoListAlwaysPut (list, "inName", OBIT_string, dim, strTemp); } else if (strcmp(arg, "-inClass") == 0) { /* AIPS inClass*/ strTemp = argv[++ax]; dim[0] = strlen (strTemp); ObitInfoListAlwaysPut (list, "inClass", OBIT_string, dim, strTemp); } else if (strcmp(arg, "-inFile") == 0) { /*inFile */ strTemp = argv[++ax]; dim[0] = strlen (strTemp); ObitInfoListAlwaysPut (list, "inFile", OBIT_string, dim, strTemp); } else if (strcmp(arg, "-outSeq") == 0) { /* AIPS image sequence number */ dim[0] = 1; itemp = strtol(argv[++ax], NULL, 0); ObitInfoListPut (list, "outSeq", OBIT_oint, dim, &itemp, err); } else if (strcmp(arg, "-outDisk") == 0) { /* output image disk number */ dim[0] = 1; itemp = strtol(argv[++ax], NULL, 0); ObitInfoListPut (list, "outDisk", OBIT_oint, dim, &itemp, err); } else if (strcmp(arg, "-outName") == 0) { /* AIPS image outName */ strTemp = argv[++ax]; dim[0] = strlen (strTemp); ObitInfoListAlwaysPut (list, "outName", OBIT_string, dim, strTemp); } else if (strcmp(arg, "-outClass") == 0) { /* AIPS image outClass */ strTemp = argv[++ax]; dim[0] = strlen (strTemp); ObitInfoListAlwaysPut (list, "outClass", OBIT_string, dim, strTemp); } else if (strcmp(arg, "-outFile") == 0) { /*outFile */ strTemp = argv[++ax]; dim[0] = strlen (strTemp); ObitInfoListAlwaysPut (list, "outFile", OBIT_string, dim, strTemp); } else { /* unknown argument */ Usage(); } if (err->error) Obit_traceback_val (err, routine, "GetInput", list); } /* end parsing input arguments */ /* Read defaults if no file specified */ if (!init) ObitParserParse (infile, list, err); /* Extract basic information to program globals */ ObitInfoListGet(list, "pgmNumber", &type, dim, &pgmNumber, err); ObitInfoListGet(list, "AIPSuser", &type, dim, &AIPSuser, err); ObitInfoListGet(list, "nAIPS", &type, dim, &nAIPS, err); ObitInfoListGet(list, "nFITS", &type, dim, &nFITS, err); if (err->error) Obit_traceback_val (err, routine, "GetInput", list); /* Directories more complicated */ ObitInfoListGetP(list, "AIPSdirs", &type, dim, (gpointer)&strTemp); if (strTemp) { /* Found? */ AIPSdirs = g_malloc0(dim[1]*sizeof(gchar*)); for (i=0; i<dim[1]; i++) { AIPSdirs[i] = g_malloc0(dim[0]*sizeof(gchar)); k = 0; for (j=0; j<dim[0]; j++) { /* Don't copy blanks */ if (strTemp[j]!=' ') {AIPSdirs[i][k] = strTemp[j]; k++;} } AIPSdirs[i][k] = 0; strTemp += dim[0]; } } ObitInfoListGetP(list, "FITSdirs", &type, dim, (gpointer)&strTemp); if (strTemp) { /* Found? */ FITSdirs = g_malloc0(dim[1]*sizeof(gchar*)); for (i=0; i<dim[1]; i++) { FITSdirs[i] = g_malloc0(dim[0]*sizeof(gchar)); k = 0; for (j=0; j<dim[0]; j++) { /* Don't copy blanks */ if (strTemp[j]!=' ') {FITSdirs[i][k] = strTemp[j]; k++;} } FITSdirs[i][k] = 0; strTemp += dim[0]; } } /* Initialize output */ myOutput = defaultOutputs(err); ObitReturnDumpRetCode (-999, outfile, myOutput, err); if (err->error) Obit_traceback_val (err, routine, "GetInput", list); return list; } /* end MednFlagIn */
/*luadoc @function model.defaultInputs() Set all inputs to defaults @status current Introduced in 2.0.0 */ static int luaModelDefaultInputs(lua_State *L) { defaultInputs(); return 0; }