コード例 #1
0
ファイル: BL_IX.cpp プロジェクト: EstebanQuerol/Black_FORTE
void FORTE_BL_IX::executeEvent(int pa_nEIID){
  switch(pa_nEIID){
    case scm_nEventINITID:
    	delete m_poGPIO;
    	m_poGPIO = NULL;
		if(QI() == true){
			char * pacBuffer =  new char[PARAMS().length() + 3];
			PARAMS().toString(pacBuffer, sizeof(char)*(PARAMS().length() + 3));
			if (verifyInput(pacBuffer, PARAMS().length() + 2)){
				STATUS() = "OK";
				QO() = true;
			}else{
				STATUS() = "Input PARAM error";
				QO() = false;
			}
			delete[] pacBuffer;
		}else{
			STATUS() = "INIT- OK";
			QO() = false;
		}
		sendOutputEvent(scm_nEventINITOID);
		break;
	case scm_nEventREQID:
		if(m_poGPIO != NULL){
			IN() = m_poGPIO->isHigh();
			STATUS() = "OK";
		}else{
			IN() = false;
			STATUS() = "Not initialized";
		}
		sendOutputEvent(scm_nEventCNFID);
		break;
  }
}
コード例 #2
0
ファイル: Device.cpp プロジェクト: paulv888/Arduino
bool Device::checkCommandValue(){ 
	if (EEPROMReadInt(PARAMS(deviceIdx, 2)) != FFFF) {				// Threshold set
		if (abs(previousCommandValue - commandValue) >= (EEPROMReadInt(PARAMS(deviceIdx, 2)))) {
			previousCommandValue = commandValue;
			return true;
		}
	}
	return false;
}
コード例 #3
0
ファイル: LIF.c プロジェクト: gitter-badger/OpenPV
int LIF_update(PVLayer *l)
{
   int i;
   float r = 0.0;
   float phiAve = 0.0, phiMax = FLT_MIN, phiMin = FLT_MAX;
   float VAve = 0.0, VMax = FLT_MIN, VMin = FLT_MAX;

   for (i = 0; i < l->numNeurons; i++) {
      if (pv_random_prob() < PARAMS(LIF_NOISE_FREQ)) {
         r = PARAMS(LIF_NOISE_AMP) * 2 * (pv_random_prob() - 0.5);
      }
      else r = 0.0;

      l->V[i] += PARAMS(LIF_DT_d_TAU) * (r + l->phi[PHI0][i] - l->V[i]);
      l->V[i] = (l->V[i] < PARAMS(LIF_V_Min)) ? PARAMS(LIF_V_Min) : l->V[i]; // hard lower limit

      // Gather some statistics
      // TODO - take into account extended border
      phiAve += l->phi[0][i];
      if (l->phi[PHI0][i] < phiMin) phiMin = l->phi[PHI0][i];
      if (l->phi[PHI0][i] > phiMax) phiMax = l->phi[PHI0][i];

      VAve += l->V[i];
      if (l->V[i] < VMin) VMin = l->V[i];
      if (l->V[i] > VMax) VMax = l->V[i];

      //pv_log("V1 PHI %d=%f\n", i, phi[i]);

      // TODO - take into account extended border
      l->phi[PHI0][i] = 0.0;
   }

#ifdef DEBUG_OUTPUT
   {
      char msg[128];
      sprintf(msg, "IF1: phi: Max: %1.4f, Avg=%1.4f Min=%1.4f\n", phiMax, phiAve
            / l->numNeurons, phiMin);
      pv_log(stderr, msg);
      sprintf(msg, "IF1: V  : Max: %1.4f, Avg=%1.4f Min=%1.4f\n", VMax,
            VAve / l->numNeurons, VMin);
      pv_log(stderr, msg);
   }
#endif

   update_f(l);

   return 0;
}
コード例 #4
0
ファイル: LIF.c プロジェクト: gitter-badger/OpenPV
// Default handlers for a layer of leaky integrate-and-fire neurons.
static inline int update_f(PVLayer *l)
{
   int i;
   const float Vth = PARAMS(LIF_V_TH_0);

   for (i = 0; i < l->numNeurons; i++) {
      l->activity->data[i] = ((l->V[i] - Vth) > 0.0) ? 1.0 : 0.0;
      l->V[i] -= l->activity->data[i] * l->V[i]; // reset cells that fired
   }

   return 0;
}
コード例 #5
0
/*******************************************************************************
 ***  FUNCTIONCALL ()
 *******************************************************************************
 ***  DESCRIPTION  :  Processes FUNCTIONCALL grammar rule.
 ***
 ***  FUNCTIONCALL ->   idt ( PARAMS )
 ***
 ******************************************************************************/
void RecursiveParser::FUNCTIONCALL(TableEntry left1)
{
   if (global->Token == Global::idt)
   {
      EntryPtr peek = symtab->lookup(global->Lexeme);

      if (peek->TypeOfEntry == functionEntry)
      {
         string code = "call " + global->Lexeme + '\n';

         EntryPtr left = symtab->lookup(left1.Lexeme);

         if (left->depth <= 1)
            code += left->Lexeme;

         else
         {
            code += "[bp";

            if (left->isParam)
               code += "+";
            else
               code += "-";

            code += NumberToString(left->var.Offset);
            code += "]";
         }

         code += " = AX";

         match(Global::idt);
         match(Global::lparent);
         PARAMS();
         match(Global::rparent);

         emit(code);
      }
      else
      {
         cout << "ERROR: Undefined function " << global->Lexeme << " at line " << lex->line_num << endl;
         raise(SIGINT);
      }
   }
   else
   {
      cout << "ERROR: Unexpected symbol " << global->Lexeme << " at line " << lex->line_num << endl;
      raise(SIGINT);
   }
}
コード例 #6
0
bool CRaspiProcessInterface::initialise(bool m_bInputOrOutput){
  wiringPiSetup();
  CIEC_INT param;
  param.fromString(PARAMS().getValue());
  mPinNumber = param;

  if(true == checkPin()){
    if(m_bInputOrOutput){ 						//if pin used as input
      pullUpDnControl(mPinNumber, PUD_DOWN); 	//pull-down the input-pin. use PUD_UP for pull-up. 
      CRaspiProcessInterface::smPinUsage[mPinNumber] = CRaspiProcessInterface::enInput;
      pinMode(mPinNumber, INPUT);
    }else{
      CRaspiProcessInterface::smPinUsage[mPinNumber] = CRaspiProcessInterface::enOutput;
      pinMode(mPinNumber, OUTPUT);
    }
    STATUS() = scmInitDeinitOK;
    return true;
  }else{
    STATUS() = scmPinInUse;
    return false;
  }
}
コード例 #7
0
ファイル: main.cpp プロジェクト: JustineSurGithub/tom-cv
//! Load settings from config and use them to set up mosaicer components, and set them going.
int main(int argc, char* argv[])
{
    //grc::FeatureDetector * featureDetector = 0; //Delete these after (potentially) handling exceptions
    grc::Renderer * mosaicRenderer = 0;
    grc::EvaluationFunction * evaluationFunction = 0;

    try
    {
    	CMosaicingParams PARAMS(0, 0);
        config config(argc > 1 ? argv[1] : "default.cfg");

        PARAMS.init(&config);
        PARAMS.BOW.DescriptorBinning.RADIUS = PARAMS.PatchDescriptor.radius();

       	boost::scoped_ptr<CImageSource> pImageLoader( CImageSource::makeImageSource( PARAMS.Im));

        boost::scoped_ptr<CFeatureExtractor> pFeatureExtractor ( CFeatureExtractor::makeFeatureExtractor(PARAMS.Im, PARAMS.Corner, PARAMS.PatchDescriptor, PARAMS.DescriptorSetClustering));

        grc::Transform::eTransType_s = (grc::Enums::eTransformType)(int)PARAMS.TransformType;
        grc::Transform::warpMethod_s = (grc::Enums::eWarpMethod)(int)PARAMS.WarpMethod == grc::Enums::eWarpBilinear ? CV_INTER_LINEAR : CV_INTER_NN;
        grc::cDescriptor::eDescriptorType_s = (grc::Enums::eDescriptorInvarianceType)(int)PARAMS.PatchDescriptorType;
        grc::cDescriptor::eDescriptorSize_s = (grc::Enums::eDescriptorSize)(int)PARAMS.PatchDescriptorSize;

        grc::ImageSource imSource((grc::Enums::eVideoSource)(int)PARAMS.VideoSource, PARAMS.Im.ImageDir.IMAGE_DIR.asSz(), PARAMS.Im.VideoFile.FILENAME.asSz(), (grc::Enums::eDisplayMode)(int)PARAMS.MosaicDestination, PARAMS.MosaicSaveDir.asSz()); //Pure-Translation-Extended "H:/Projects/External/DTA003 Image mosaicing/Test Data/Rangiora"
        
        IplImage * pIm = cvLoadImage("/home/data/data/data/mosaicing/FixedCamera800/IMG_0004.JPG");

        grc::FeatureMatcher2 * featureMatcher = 0;

        //featureMatcher = new grc::BFFeatureMatcher(imSource, *pFeatureExtractor, PARAMS.BOWMatching);

        CBoW bow(PARAMS.BOW);
        featureMatcher = new grc::BoWFeatureMatcher(imSource, *pFeatureExtractor, bow, PARAMS.BOWMatching);

        grc::BaySACTransformEstimator transformEstimator(*featureMatcher, PARAMS.RANSACHomography, PARAMS.Im.getCamCalibrationMat(),
        		((bool)PARAMS.MarkCorrespondences) ? pImageLoader.get() : 0);

        switch(PARAMS.EvaluationFunction)
        {
        case grc::Enums::eSSDEvaluation:
            evaluationFunction = new grc::SumSquaredErrorEvaluationFunction;
            break;
        }
        if(evaluationFunction == 0 && PARAMS.EvaluationFunction != grc::Enums::eNoEvaluation)
            throw new grc::GRCException("main: No evaluation function initialised");

        CvSize mosaicSize = cvSize(PARAMS.MosaicX,PARAMS.MosaicY);
        grc::TransformEngine engine(transformEstimator, PARAMS.MaxFrames, PARAMS.IncrementalRendering ? 1 : 0, PARAMS.LM * PARAMS.LMIterations,
			mosaicSize, PARAMS.SkipFrames ? grc::Enums::eChooseSequentialSkip : grc::Enums::eChooseSequential, PARAMS.FullFrameUpdateFreq, PARAMS.MaxSearchForTransform);

        switch(PARAMS.RendererType)
        {
        case grc::Enums::eBasicRenderer:
		    mosaicRenderer = new grc::Renderer(imSource, engine, mosaicSize, evaluationFunction);
            break;
        case grc::Enums::eFeatheredRenderer:
            mosaicRenderer = new grc::FeatheredRenderer(imSource, engine, mosaicSize, PARAMS.FeatherRadius, evaluationFunction);
            break;
        case grc::Enums::eMultiScaleRenderer:
		    mosaicRenderer = new grc::MultiScaleFeatheredRenderer(imSource, engine, mosaicSize, PARAMS.FeatherRadius, evaluationFunction);
            break;
        case grc::Enums::eDijkstraRenderer:
		    mosaicRenderer = new grc::DijkstraCutRenderer(imSource, engine, mosaicSize, PARAMS.DijkstraScale, evaluationFunction);
            break;
        }
        if(mosaicRenderer == 0)
            throw new grc::GRCException("main: No renderer initialised");

		//This ensures images are captured by this thread:
        CStopWatch s;
        s.startTimer();

        imSource.doCaptureImages(&engine, mosaicRenderer);

        s.stopTimer();
        std::cout << s.getElapsedTime() << " seconds total" << endl;
        //PARAMS.printUseSummary();
        //PARAMS.printCfgFile();
    }
    catch(grc::GRCException * pEx)
    {
        std::cout << "ERROR: Unhandled exception: " << *(pEx->GetErrorMessage()) << std::endl << "Exiting...";
        cvDestroyAllWindows();
#ifndef __GNUC__
        Sleep(5000);
#endif
        delete pEx;
    }

    //delete featureDetector;
    delete mosaicRenderer;
    delete evaluationFunction;
}
コード例 #8
0
ファイル: main.cpp プロジェクト: tlin067/Opensim_development
/**
* Run an fwd simulation optimization
*/
int main()
{


	try {

		//////////////////////////////////////////////////////////////////////////////////////////////
		//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%//
		//////////////////////////////////////////////////////////////////////////////////////////////
		SimTools* simtools = new SimTools(); // Instance of simtools class to use my functions

		string osim_filename = "";
		string force_filename_flex = "";
		string marker_filename_flex = "";
		string ik_setup_filename_flex = "";

		string force_filename_ext = "";
		string marker_filename_ext = "";
		string ik_setup_filename_ext = "";

		// Set up file directories
		
		// Define osim file location
		string osim_fd = "T:/Lamb expts 2012/Lamb experiments 2012/23rd - 24th July Expts/Opensim/Version9/";

		// Specify force and trc mocap file
		string fd = "T:/Lamb expts 2012/Lamb experiments 2012/23rd - 24th July Expts/Opensim/Lamb2 data files/";
		

		osim_filename = osim_filename.append(osim_fd).append("Version9_contrained.osim"); // for flex		
		//Open existing XML model
		Model osimModel(osim_filename); 
		Model osimModelE(osim_filename); 
		osimModel.printBasicInfo(cout);		
		
		//FLEXION
		string expt_file_flex = "l2flexv2";


		string output_fd_flex = "T:/Lamb expts 2012/Lamb experiments 2012/23rd - 24th July Expts/Opensim/Version9/flex_output.sto";
		double tiFlex,tfFlex;
		tiFlex = 2; // Static equilibrium
		tfFlex = 15;		

		// EXTENSION
		string expt_file_ext = "l2extv2a";

		string output_fd_ext = "T:/Lamb expts 2012/Lamb experiments 2012/23rd - 24th July Expts/Opensim/Version9/ext_output.sto";
		double tiExt,tfExt;
		tiExt = 5;
		tfExt = 18;

		//flex filenames
		force_filename_flex = force_filename_flex.append(fd).append(expt_file_flex).append(".mot");
		marker_filename_flex = marker_filename_flex.append(fd).append(expt_file_flex).append(".trc");
		ik_setup_filename_flex = ik_setup_filename_flex.append(osim_fd).append(expt_file_flex).append("_initial_ik.xml");

		//ext filenames
		force_filename_ext = force_filename_ext.append(fd).append(expt_file_ext).append(".mot");
		marker_filename_ext = marker_filename_ext.append(fd).append(expt_file_ext).append(".trc");
		ik_setup_filename_ext = ik_setup_filename_ext.append(osim_fd).append(expt_file_ext).append("_initial_ik.xml");

		// Create storage object for force file
		OpenSim::Storage* force_storage_ext = new Storage(force_filename_ext);
		OpenSim::Storage* force_storage_flex = new Storage(force_filename_flex);

		// smooths out all data....
		force_storage_flex->smoothSpline(3,1); // order = 3, cutoff freq = 1Hz
		force_storage_flex->resampleLinear(0.1); // resample to 10Hz

		force_storage_ext->smoothSpline(3,1); // order = 3, cutoff freq = 1Hz
		force_storage_ext->resampleLinear(0.1); // resample to 10Hz
		//force_storage->print("T:/Lamb expts 2012/Lamb experiments 2012/23rd - 24th July Expts/Opensim/Version4/force_flex_smooth.sto");
		//////////////////////////////////////////////////////////////////////////////////////////////
		//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%//
		//////////////////////////////////////////////////////////////////////////////////////////////

	

		//OpenSim::CoordinateSet& CS = osimModel.updCoordinateSet();
		// Run initial ik step to find Initial conditions for forward simulation
		Array<double> ICs_Flex, ICs_Ext;

		osimModel.updCoordinateSet().get("t2ToGND_FE").setDefaultValue(0); // to flip up model so initial ik guess is close
		osimModel.updCoordinateSet().get("t2ToGND_LB").setDefaultValue(0);
		ICs_Ext = simtools->ik_constrain_torso(osimModel,marker_filename_ext,ik_setup_filename_ext,tiExt,tfExt);
		cout<<"\n\next ic: :"<<ICs_Ext<<endl;
        osimModel.print("T:/Lamb expts 2012/Lamb experiments 2012/23rd - 24th July Expts/Opensim/Version9/test1.osim");		
		

		OpenSim::CoordinateSet& CS = osimModel.updCoordinateSet();//.get("t2ToGND_FE").setDefaultIsPrescribed(false);

		for(int i = 0; i<6; i++)
		{
			// First 6 coordinates in cooridnate set correspond to rotx,roty,rotz,tx,ty,tz
			CS[i].setDefaultIsPrescribed(false);
			CS[i].setDefaultValue(0.0);

		} 
		// For Flex
		osimModel.updCoordinateSet().get("t2ToGND_FE").setDefaultValue(-Pi/2); // to flip up model so initial ik guess is close
		osimModel.updCoordinateSet().get("t2ToGND_LB").setDefaultValue(-Pi/2);
		osimModel.print("T:/Lamb expts 2012/Lamb experiments 2012/23rd - 24th July Expts/Opensim/Version9/testa.osim");
		// Returns state values at initial time -> ICs has length of coordinate set (computed by single ik step)
		ICs_Flex = simtools->ik_constrain_torso(osimModel,marker_filename_flex,ik_setup_filename_flex,tiFlex,tfFlex);	
		osimModel.print("T:/Lamb expts 2012/Lamb experiments 2012/23rd - 24th July Expts/Opensim/Version9/test.osim");
		cout<<"\n\nflex ic: :"<<ICs_Flex<<endl;
		
		// Set up point kinematic analyses -> to track marker positions for use in objective function
		//AnalysisSet pk_set = 
		//simtools->AddPKAtest(osimModel);

		//cout<<"name : "<<osimModel.getNumAnalyses();

		//cout<<"\n\nname : "<<osimModel.updAnalysisSet().get("m1");

		////// USE force file to prescribe forces to head_markers body
		////simtools->ApplyForce(*force_storage_flex,osimModel);


		// Create measurement data structure for each simulation // 
		// Open trc file and store in class MarkerData
		MarkerData md_flex = OpenSim::MarkerData(marker_filename_flex);
		MarkerData md_ext = OpenSim::MarkerData(marker_filename_ext);

		// Create storage object with marker data (md) in it
		Storage data_trc_flex, data_trc_ext;
		md_flex.makeRdStorage(data_trc_flex);
		md_ext.makeRdStorage(data_trc_ext);
		// crop storage object to only include data in time frame of simulation
		data_trc_flex.crop(tiFlex,tfFlex); // -> data_trc is used to calculate rms error between model marker and motion capture markers
		data_trc_ext.crop(tiExt,tfExt); // -> data_trc is used to calculate rms error between model marker and motion capture markers



		//osimModel.print("T:/Lamb expts 2012/Lamb experiments 2012/23rd - 24th July Expts/Opensim/Version9/test.osim");

		////////////////////////////////////////////////////////////////////////////////////////////////
		////%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%//
		////////////////////////////////////////////////////////////////////////////////////////////////
		//////////////////////////////////////////////////////////////////////////////////////////
		//////////////////////////////////////////////////////////////////////////////////////////
		//		 Create list of point kinematics reporters which match marker positions from osim model
		PointKinematics* m1h = new PointKinematics(&osimModel);
		PointKinematics* m2h = new PointKinematics(&osimModel);
		PointKinematics* m3h = new PointKinematics(&osimModel);
		PointKinematics* m4h = new PointKinematics(&osimModel);
		PointKinematics* m5h = new PointKinematics(&osimModel);
		PointKinematics* m6h = new PointKinematics(&osimModel);


		// points in head_marker ref frame specified by inspection
		Vec3 p1(0.071700000,0.00000000,-0.054772000);
		Vec3 p2(-0.071700000,0.00000000,-0.038524000);
		Vec3 p3(0.071700000,0.00000000,0.005228);
		Vec3 p4(-0.0300000,0.00000000,0.026928);
		Vec3 p5(0.0300000,0.00000000,0.026928);
		Vec3 p6(-0.071700000,0.00000000,-0.008524000);

		m1h->setBodyPoint("head_markers",p1);
		m2h->setBodyPoint("head_markers",p2);
		m3h->setBodyPoint("head_markers",p3);
		m4h->setBodyPoint("head_markers",p4);
		m5h->setBodyPoint("head_markers",p5);
		m6h->setBodyPoint("head_markers",p6);
		
		m1h->setRelativeToBody(&osimModel.updBodySet().get("ground"));
		m2h->setRelativeToBody(&osimModel.updBodySet().get("ground"));
		m3h->setRelativeToBody(&osimModel.updBodySet().get("ground"));
		m4h->setRelativeToBody(&osimModel.updBodySet().get("ground"));
		m5h->setRelativeToBody(&osimModel.updBodySet().get("ground"));
		m6h->setRelativeToBody(&osimModel.updBodySet().get("ground"));

		m1h->setName("m1");
		m2h->setName("m2");
		m3h->setName("m3");
		m4h->setName("m4");
		m5h->setName("m5");
		m6h->setName("m6");

		osimModel.addAnalysis(m1h);
		osimModel.addAnalysis(m2h);
		osimModel.addAnalysis(m3h);
		osimModel.addAnalysis(m4h);
		osimModel.addAnalysis(m5h);
		osimModel.addAnalysis(m6h);

		//////////////////////////////////////////////////////////////////////////////////////////
		//////////////////////////////////////////////////////////////////////////////////////////

		//// RUN SIMULATION for a given set of bushing force properties

		//// Define bushing properties
		//// Define translational stiffness (t_stiff - x,y,z), rotational stiffness (r_stiff - x,y,z) and corresponding damping
		Vec3 t_stiff(0),r_stiff(0.01),t_damp(0),r_damp(10);

		//// initialise vector of initial parameter guesses
		//int numParams = 4;
		//Vector guess(numParams);
	
		//guess[0] = 6.82;//6.00553; // theta star (degrees)
		//guess[1] = 1.22; // k1 (N*m/degree)
		//guess[2] = 7.29; // k2 (N*m/degree)
		//guess[3] = 0.22;//0.409055; // damping (Nm/(deg/sec))

		//Vector PARAMS(numParams);
		//for (int i = 0; i<numParams; i++){
		//	PARAMS[i] = guess[i];
		//}
		////string fd = "";
		//simtools->RunSimulation_FlexExt(osimModel,PARAMS,tiFlex,tiExt,tfFlex,tfExt,ICs_Flex,ICs_Ext,false,fd,*force_storage_flex,*force_storage_ext,*m1h,*m2h,*m3h,*m4h,*m5h,*m6h,data_trc_flex,data_trc_ext);
		//
		
		// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //
		//
		//// Initialise and run optimization
		int numParams = 5;
		//// Parameters:
		//// - Theta_STAR
		//// - k1		
		//// - k2
		//// - damping
		//MyOptimizerSystem sys(numParams,osimModel,data_trc,ti,tf,ICs,*m1h,*m2h,*m3h,*m4h,*m5h,*m6h,output_fd);

		MyOptimizerSystem sys(numParams,osimModel,tiFlex,tiExt,tfFlex,tfExt,ICs_Flex,ICs_Ext,*force_storage_flex,*force_storage_ext,*m1h,*m2h,*m3h,*m4h,*m5h,*m6h,data_trc_flex,data_trc_ext);

		Real f = NaN;

		Vector lower_bounds(numParams);
		Vector upper_bounds(numParams);

		// theta star flex
		lower_bounds[0] = 2;//0.0;//*Pi/180;
		upper_bounds[0] = 12;//1.0;//*Pi/180;

		// theta star ext 
		lower_bounds[1] = 2;//0.0;//*Pi/180;
		upper_bounds[1] = 12;//1.0;//*Pi/180;

		// k1
		lower_bounds[2] = 1e-6;//0.0;//*Pi/180;
		upper_bounds[2] = 15;//1.0;//*Pi/180;

		// k2
		lower_bounds[3] = 0.1;
		upper_bounds[3] = 100;

		// damping
		lower_bounds[4] = -2;
		upper_bounds[4] = 2;

		//head mass
		//lower_bounds[3] = -2.0;
		//upper_bounds[3] = 2.0;

		//// theta star sk
		//lower_bounds[4] = 6;//0.0;//*Pi/180;
		//upper_bounds[4] = 30;//1.0;//*Pi/180;

		//// k1 sk
		//lower_bounds[5] = 1e-6;//0.0;//*Pi/180;
		//upper_bounds[5] = 15;//1.0;//*Pi/180;

		//// k2 sk
		//lower_bounds[6] = 0.1;
		//upper_bounds[6] = 100;

		// set parameter limits
		sys.setParameterLimits(lower_bounds,upper_bounds);

		// initialise vector of initial parameter guesses
		Vector guess(numParams);
	
		guess[0] = 6.82; //flexion theta star (degrees)
		guess[1] = 6.82; // extension theta star (degrees)
		guess[2] = 1.22; // k1 (N*m/degree)
		guess[3] = 7.29; // k2 (N*m/degree)
		guess[4] = 0.3; // bushing offset

		//guess[4] = 0.0; // head mass
		//		guess[4] = 45; // theta star sk (degrees)
		//guess[5] = guess[1]; // k1 sk (N*m/degree)
		//guess[6] = guess[2]; // k2 sk (N*m/degree)
		
		// Try optimisation
		clock_t t1,t2,t3,t4;
		t1 = clock();
		try{
		
			// intialise optimizer
			Optimizer opt(sys, SimTK::InteriorPoint);
			opt.setDiagnosticsLevel(5);
			
			// Optimisation settings					
			opt.setConvergenceTolerance(1e-3);
			opt.setMaxIterations(1000);
			opt.useNumericalGradient(true);
			opt.setLimitedMemoryHistory(500);
			
			// return optimum solution
			f = opt.optimize(guess);
			
			cout<<"\nf = "<<f;
			cout<<"\nguess = "<<guess;
		}
		catch(const std::exception& e) {
		std::cout << "OptimizationExample.cpp Caught exception :"  << std::endl;
		std::cout << e.what() << std::endl;
		}
		t2 = clock();
		//// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //	

		//cout<<"\n\nOptimiszation time: "<<((float)t2-(float)t1)/ CLOCKS_PER_SEC << " seconds";
		//
		//// Run simulation and save point kinematic reporter in data_sim storage object. Print simulation results to file.
		//Array<Array<double>> pk_data;

		Vector PARAMS(numParams);
		for (int i = 0; i<numParams; i++){
			PARAMS[i] = guess[i];
		}
		//string fd = "";
		simtools->RunSimulation_FlexExt(osimModel,PARAMS,tiFlex,tiExt,tfFlex,tfExt,ICs_Flex,ICs_Ext,false,fd,*force_storage_flex,*force_storage_ext,*m1h,*m2h,*m3h,*m4h,*m5h,*m6h,data_trc_flex,data_trc_ext);
			
		////
		//////cout<<"\n\npk_data: "<<pk_data;
		////t3 = clock();
		////cout<<"\n\nSimulation time: "<<((float)t3-(float)t2)/ CLOCKS_PER_SEC << " seconds";
		////double rms = simtools->Calc_rms_VERSION2(data_trc,ti,tf,pk_data);
		////t4 = clock();
		////cout<<"\n\nRMS time: "<<((float)t4-(float)t3)/ CLOCKS_PER_SEC << " seconds";

		////cout<<"\n\nRMS ERROR: "<<rms;
		////
		////osimModel.print("T:/Lamb expts 2012/Lamb experiments 2012/23rd - 24th July Expts/Opensim/Version5/test.osim");

		////ofstream myfile;
		////myfile.open("T:/Lamb expts 2012/Lamb experiments 2012/23rd - 24th July Expts/Opensim/Version6/Model/fileConstrainedwBushingAndLimit.txt");
		////double rms = 0;
		////int n = 25;
		////double val = 0;
		////Vector k(n,(double)0);
		////Vector obj(n,(double)0);
		////for (int i=0; i<n; i++){
		////	t1 = clock();
		////	val = i*0.5 + 4;
		////	t_slackL_opt = val;
		////	//Vec3 r_stiff_opt(val);
		////	pk_data = simtools->RunSimulation_LIMITSTOP(osimModel,t_stiff,r_stiff_opt,t_damp,r_damp,ti,tf,t_slackL_opt,vert_mass_opt,head_mass_opt,ICs,false,osim_fd,*m1h,*m2h,*m3h,*m4h,*m5h,*m6h,fibreL_opt);
		////	rms = simtools->Calc_rms_VERSION2(data_trc,ti,tf,pk_data);
		////	k[i] = val;
		////	obj[i] = rms;
		////	cout<<i<<"\n";
		////	myfile<<k[i]<<"\t"<<obj[i]<<"\n";
		////	t2 = clock();
		////	cout<<k[i]<<"\t"<<obj[i]<<"\n";
		////	cout<<"\n\nLoop time: "<<((float)t2-(float)t1)/ CLOCKS_PER_SEC << " seconds";
		////}

		////myfile.close();
		////cout<<"\n\nk = "<<k;
		////cout<<"\n\nobj = "<<obj;
		//

		////ofstream myfile_2param;
		////myfile_2param.open("T:/Lamb expts 2012/Lamb experiments 2012/23rd - 24th July Expts/Opensim/Version6/Model/fileConstrainedwBushingAndLimit_2param_v2.txt");
		////double rms = 0;
		////int n =10;
		////int nn = 20;
		////double val_k = 0, val_m = 0;
		////Vector k(n*nn,(double)0);
		////Vector m(n*nn,(double)0);
		////Vector obj(n*nn,(double)0);
		////for (int i=0; i<n; i++){
		////	for (int j=0;j<nn; j++){
		////		val_k = i*0.05 + 0.3;
		////		val_m = j*0.5 + 5;
		////		t_slackL_opt = val_m;
		////		head_mass_opt = val_k;
		////		//Vec3 r_stiff_opt(val_k);
		////		t_slackL_opt = val_m;
		////		pk_data = simtools->RunSimulation_LIMITSTOP(osimModel,t_stiff,r_stiff_opt,t_damp,r_damp,ti,tf,t_slackL_opt,vert_mass_opt,head_mass_opt,ICs,false,osim_fd,*m1h,*m2h,*m3h,*m4h,*m5h,*m6h,fibreL_opt);
		////		rms = simtools->Calc_rms_VERSION2(data_trc,ti,tf,pk_data);
		////		k[i*n + j] = val_k;
		////		m[i*n + j] = val_m;
		////		obj[i*n + j] = rms;
		////		cout<<(i)<<"\t"<<j<<"\n";
		////		cout<<k[i*n + j]<<"\n";
		////		cout<<m[i*n + j]<<"\n";
		////		cout<<rms<<"\n";
		////		myfile_2param<<k[i*n + j]<<"\t"<<m[i*n + j]<<"\t"<<obj[i*n + j]<<"\n";
		////	}
		////}

		////myfile_2param.close();
		////cout<<"\n\nk = "<<k;
		////cout<<"\n\nm = "<<m;
		////cout<<"\n\nobj = "<<obj;
		////////////////////////////////////////////////////////////////////////////////////////////////
		////%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%//
		////////////////////////////////////////////////////////////////////////////////////////////////

		///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////		
	}
	catch (OpenSim::Exception ex)
	{
		std::cout << ex.getMessage() << std::endl;
		return 1;
	}
	catch (std::exception ex)
	{
		std::cout << ex.what() << std::endl;
		return 1;
	}
	catch (...)
	{
		std::cout << "UNRECOGNIZED EXCEPTION" << std::endl;
		return 1;
	}

	//std::cout << "main() routine time = " << 1.e3*(std::clock()-startTime)/CLOCKS_PER_SEC << "ms\n";
	
	std::cout << "\n\nOpenSim example completed successfully.\n";
	std::cin.get();
	return 0;
}
コード例 #9
0
ファイル: Web.cpp プロジェクト: paulv888/Arduino
void printPage(const byte clientsel, const byte deviceIdx) {

	// Index
	printP(clientsel, TXTIND);
	printP(clientsel, TXTCOLON);
	printV(clientsel, deviceIdx);
	printP(clientsel, ANBSP);

	// DeviceID
	printP(clientsel, TXTDEVICEID);
	printP(clientsel, TXTCOLON);
	printV(clientsel, mdevices[deviceIdx].getDeviceID());

	// Type
	printP(clientsel, ANBSP);
	if (mdevices[deviceIdx].getType() != 0) {
		printP(clientsel, TXTTYPE);
		printP(clientsel, TXTCOLON);
		printV(clientsel, mdevices[deviceIdx].getType());
		printP(clientsel, AOPEN);
		printP(clientsel, BR);
		printP(clientsel, SLASH);
		printP(clientsel, ACLOSE);
	}

	// CommandID
	printP(clientsel, TXTCOMMAND );
	printP(clientsel, TXTCOLON);
	printVstr(clientsel, mdevices[deviceIdx].getCommand());

	// Status
	printP(clientsel, ANBSP);
	printP(clientsel, TXTSTATUS );
	printP(clientsel, TXTCOLON);
	printVstr(clientsel, mdevices[deviceIdx].getStatus());

	// Value
	if (mdevices[deviceIdx].commandValue != 0) {
		printP(clientsel, ANBSP);
		printP(clientsel, TXTVALUE );
		printP(clientsel, TXTCOLON);
		printVstr(clientsel, mdevices[deviceIdx].getValue());
	}

	// ExtData
	if (printVstr(clientsel, mdevices[deviceIdx].getExtData(), true) > 0) {
		printP(clientsel, AOPEN);
		printP(clientsel, BR);
		printP(clientsel, SLASH);
		printP(clientsel, ACLOSE);
		printP(clientsel, TXTEXTDATA );
		printP(clientsel, TXTCOLON);
		printVstr(clientsel, mdevices[deviceIdx].getExtData());
	}


	printP(clientsel, AOPEN);
	printP(clientsel, BR);
	printP(clientsel, SLASH);
	printP(clientsel, ACLOSE);
	if (EEPROMReadInt(PARAMS(deviceIdx, 1)) !=  FFFF) {
		// Parameter 1
		printP(clientsel, TXTPAR1);
		printP(clientsel, TXTCOLON);
		printV(clientsel, EEPROMReadInt(PARAMS(deviceIdx, 1)));
		printP(clientsel, AOPEN);
		printP(clientsel, BR);
		printP(clientsel, SLASH);
		printP(clientsel, ACLOSE);
	}
	if (EEPROMReadInt(PARAMS(deviceIdx, 2)) !=  FFFF) {
		// Parameter 2
		printP(clientsel, TXTPAR2);
		printP(clientsel, TXTCOLON);
		printV(clientsel, EEPROMReadInt(PARAMS(deviceIdx, 2)));
		printP(clientsel, AOPEN);
		printP(clientsel, BR);
		printP(clientsel, SLASH);
		printP(clientsel, ACLOSE);
	}
	if (EEPROMReadInt(PARAMS(deviceIdx, 3)) !=  FFFF) {
		// Parameter 3
		printP(clientsel, TXTPAR3);
		printP(clientsel, TXTCOLON);
		printV(clientsel, EEPROMReadInt(PARAMS(deviceIdx, 3)));
		printP(clientsel, AOPEN);
		printP(clientsel, BR);
		printP(clientsel, SLASH);
		printP(clientsel, ACLOSE);
	}
	if (EEPROMReadInt(PARAMS(deviceIdx, 4)) !=  FFFF) {
		// Parameter 3
		printP(clientsel, TXTPAR4);
		printP(clientsel, TXTCOLON);
		printV(clientsel, EEPROMReadInt(PARAMS(deviceIdx, 4)));
		printP(clientsel, AOPEN);
		printP(clientsel, BR);
		printP(clientsel, SLASH);
		printP(clientsel, ACLOSE);
	}
	if (EEPROMReadInt(PARAMS(deviceIdx, 5)) !=  FFFF) {
		// Parameter 5
		printP(clientsel, TXTPAR5);
		printP(clientsel, TXTCOLON);
		printV(clientsel, EEPROMReadInt(PARAMS(deviceIdx, 5)));
		printP(clientsel, AOPEN);
		printP(clientsel, BR);
		printP(clientsel, SLASH);
		printP(clientsel, ACLOSE);
	}

	// In deviceIdx
	if (mdevices[deviceIdx].getInput() != 0) {
		printP(clientsel, TXTDEVIND);
		printP(clientsel, TXTCOLON);
		printV(clientsel, mdevices[deviceIdx].getInput());
		printP(clientsel, AOPEN);
		printP(clientsel, BR);
		printP(clientsel, SLASH);
		printP(clientsel, ACLOSE);
	}

	// Pin
	if (mdevices[deviceIdx].getPin() != 0) {
		printP(clientsel, TXTPIN);
		printP(clientsel, TXTCOLON);
		printV(clientsel, mdevices[deviceIdx].getPin());
		printP(clientsel, AOPEN);
		printP(clientsel, BR);
		printP(clientsel, SLASH);
		printP(clientsel, ACLOSE);
	}


	if (DEBUG_WEB) dbg.println();

	return;
}
コード例 #10
0
ファイル: Device.cpp プロジェクト: paulv888/Arduino
void Device::readInput() {
/*!
*		Reads current input value of device	
*/
	commandValue = 0;
	int prevRunning;
	
	switch (type) {
	case TYPE_DIGITAL_IO:
	case TYPE_DIGITAL_IO_NEG:
		status = digitalRead(getPin());
		break;
	case TYPE_ANALOG_IN:
	case TYPE_NTC:
		commandValue = analogRead(getPin());
		if (type == TYPE_NTC) commandValue = 1024 - commandValue;
		if (EEPROMReadInt(PARAMS(deviceIdx, 1)) == FFFF) {				// No setpoint set
			status = STATUS_UNKNOWN;
			sprintf(temp, "{\"V\":\"%i\"}", commandValue);
			setExtData(temp);
		} else {
			if (commandValue > EEPROMReadInt(PARAMS(deviceIdx, 1))) {														// Above set point
				status = STATUS_ON;
			}
			if (commandValue <= (EEPROMReadInt(PARAMS(deviceIdx, 1)) - EEPROMReadInt(PARAMS(deviceIdx, 2)))) {		// Below set point and threshold
				status = STATUS_OFF;
			}
			sprintf(temp, "{\"V\":\"%i\",\"S\":\"%u\",\"T\":\"%u\"}", commandValue, EEPROMReadInt(PARAMS(deviceIdx, 1)), EEPROMReadInt(PARAMS(deviceIdx, 2)));
			setExtData(temp);
			checkStatusOrCommandValue();
		}
		break;
	case TYPE_DHT22:
		byte chk;
		status = STATUS_ERROR;
		chk = dht.read(getPin());
		switch (chk) {
		case DHTLIB_OK:
			commandValue = ((int)dht.temperature);
			int temp1;
			int temp2;
			temp1 = abs((dht.temperature - (int)dht.temperature) * 100);
			temp2 = (dht.humidity - (int)dht.humidity) * 100;
			if (EEPROMReadInt(PARAMS(deviceIdx, 1)) == FFFF) {				// No setpoint set
				status = STATUS_UNKNOWN;
				sprintf(temp, "{\"T\":\"%0d.%d\",\"H\":\"%0d.%d\"}", (int)dht.temperature, temp1, (int)dht.humidity, temp2);
				setExtData(temp);
			} else {
				if (commandValue > EEPROMReadInt(PARAMS(deviceIdx, 1))) {												// below set point
					status = STATUS_ON;
				} 
				if (commandValue <= (EEPROMReadInt(PARAMS(deviceIdx, 1)) - EEPROMReadInt(PARAMS(deviceIdx, 2)))) {		// above set point plus threshold
					status = STATUS_OFF;
				}
				sprintf(temp, "{\"T\":\"%0d.%d\",\"H\":\"%0d.%d\",\"S\":\"%u\"}", (int)dht.temperature, temp1, (int)dht.humidity, temp2, EEPROMReadInt(PARAMS(deviceIdx, 1)));
				setExtData(temp);
				checkStatusOrCommandValue();
			}
			break;
		default:
			status= STATUS_ERROR;
			setExtData("");
			break;
		}
		break;
	case TYPE_THERMO_HEAT:
	case TYPE_THERMO_COOL:
		commandValue = readTemp(getInput());
		prevRunning = digitalRead(getPin());
		if (status) {					// Enabled or Not
			if (commandValue != ERROR) {							// Could not read temp, leave as is
				if (getType() == TYPE_THERMO_COOL) {
					if (commandValue >= EEPROMReadInt(PARAMS(deviceIdx, 1))) {						// Switch on if above set point
						digitalWrite(getPin(), HIGH);
					}
					if (commandValue <= (EEPROMReadInt(PARAMS(deviceIdx, 1)) - EEPROMReadInt(PARAMS(deviceIdx, 2)))) {	// Switch off if below threshold
						digitalWrite(getPin(), LOW);
					}
				} 
				if (getType() == TYPE_THERMO_HEAT) {
					if (commandValue <= EEPROMReadInt(PARAMS(deviceIdx, 1))) {						// 	Switch on if below set point
						digitalWrite(getPin(), HIGH);
					}
					if (commandValue >= (EEPROMReadInt(PARAMS(deviceIdx, 1)) + EEPROMReadInt(PARAMS(deviceIdx, 2)))) {	// Switch off if above threshold
						digitalWrite(getPin(), LOW);
					}
				}
			}			// If Error read fall trough
		} else {
			digitalWrite(mdevices[deviceIdx].getPin(), LOW);
		}
		sprintf(temp, "{\"V\":\"%i\",\"R\":\"%i\",\"S\":\"%u\",\"T\":\"%u\"}", commandValue, digitalRead(getPin()), EEPROMReadInt(PARAMS(deviceIdx, 1)), EEPROMReadInt(PARAMS(deviceIdx, 2)));
		setExtData(temp);
		if ((prevRunning != digitalRead(getPin())) || checkCommandValue()) {
			int previousCommandID = commandID;
			setCommand(COMMAND_SET_RESULT);
			postMessage(deviceIdx);
			commandID = previousCommandID;
		}	
		break;
	case TYPE_AUTO_DOOR:
		if (!digitalRead(TOP_SWITCH_PIN)) {
			status = STATUS_ON;
		} else if (!digitalRead(BOTTOM_SWITCH_PIN)) {
			status = STATUS_OFF;
		} else {
			status = STATUS_UNKNOWN;
		}
		
		sprintf(temp, "{\"T\":\"%i\",\"B\":\"%i\",\"P\":\"%i\",\"D\":\"%i\"}", digitalRead(TOP_SWITCH_PIN), digitalRead(BOTTOM_SWITCH_PIN), digitalRead(POWER_RELAY_PIN), digitalRead(DIRECTION_RELAY_PIN));
		setExtData(temp);
		checkStatus();
		break;
	case TYPE_ARDUINO:
		status = digitalRead(getPin());
		sprintf(temp, "{\"R\":\"%i\",\"M\":\"%lu\",\"U\":\"%lu\"}", RELEASE, check_mem(), millis()/1000);
		setExtData(temp);
		checkStatus();
		break;
	default:
		break;
	}
}
コード例 #11
0
ファイル: BL_PWM.cpp プロジェクト: EstebanQuerol/Black_FORTE
void FORTE_BL_PWM::executeEvent(int pa_nEIID){
	bool bRet = true;
	switch(pa_nEIID){
    case scm_nEventINITID:
    	if(m_poPWM != NULL){
    		//Fix output before stopping the PWM
    		//TODO:Handle the PWM output level when stopping it
    		m_poPWM->setRunState(BlackLib::stop);
    		delete m_poPWM;
    		m_poPWM = NULL;
    	}
    	if(QI() == true){
    		char * pacBuffer =  new char[PARAMS().length() + 3];
			PARAMS().toString(pacBuffer, sizeof(char)*(PARAMS().length() + 3));
			if (strncmp(pacBuffer, "\'EHRPWM2B\'", 10) == 0) {
				m_poPWM = new BlackLib::BlackPWM(BlackLib::EHRPWM2B);
			} else if (strncmp(pacBuffer, "\'EHRPWM2A\'", 10) == 0) {
				m_poPWM = new BlackLib::BlackPWM(BlackLib::EHRPWM2A);
			} else if (strncmp(pacBuffer, "\'EHRPWM1A\'", 10) == 0) {
				m_poPWM = new BlackLib::BlackPWM(BlackLib::EHRPWM1A);
			} else if (strncmp(pacBuffer, "\'EHRPWM1B\'", 10) == 0) {
				m_poPWM = new BlackLib::BlackPWM(BlackLib::EHRPWM1B);
			} else if (strncmp(pacBuffer, "\'EHRPWM0B\'", 10) == 0) {
				m_poPWM = new BlackLib::BlackPWM(BlackLib::EHRPWM0B);
			} else if (strncmp(pacBuffer, "\'EHRPWM0A\'", 10) == 0) {
				m_poPWM = new BlackLib::BlackPWM(BlackLib::EHRPWM0A);
			} else if (strncmp(pacBuffer, "\'ECAP0\'", 7) == 0) {
				m_poPWM = new BlackLib::BlackPWM(BlackLib::ECAP0);
			} else {
				delete[] pacBuffer;
				DEVLOG_ERROR("Invalid input PARAM in BL_PWM FB\n");
				STATUS() = "Input PARAM error";
				QO() = false;
				sendOutputEvent(scm_nEventINITOID);
				break;
			}
            delete[] pacBuffer;
            bRet = m_poPWM->setRunState(BlackLib::stop);
            bRet = bRet && m_poPWM->setDutyPercent(0.0);
			bRet = bRet && m_poPWM->setPeriodTime(Period().getInMicroSeconds(), BlackLib::microsecond);
			bRet = bRet && m_poPWM->setDutyPercent(Duty());
			if(Polarity() == true){
				bRet = bRet && m_poPWM->setPolarity(BlackLib::straight);
			}else{
				bRet = bRet && m_poPWM->setPolarity(BlackLib::reverse);
			}
			bRet = bRet && m_poPWM->setRunState(BlackLib::run);
			if(bRet == true){
				//PWM configuration OK
				STATUS() ="OK";
				QO() = true;
			}else{
				//PWM configuration Error
				DEVLOG_DEBUG("Invalid configuration parameters in BL_PWM FB\n");
				STATUS() ="Configuration Error";
				QO() = false;
			}
    	}else{
			STATUS() = "INIT- OK";
			QO() = false;
    	}
    	sendOutputEvent(scm_nEventINITOID);
    	break;
    case scm_nEventUpdateID:
    	if (m_poPWM == NULL){
    		//PWM must be initialized before updating configuration
    		DEVLOG_ERROR("Trying to update before initializing PWM\n");
    		STATUS() = "ERROR updating PWM";
    		QO()=false;
    	    sendOutputEvent(scm_nEventCNFID);
    	    break;
    	}
    	bRet = m_poPWM->setDutyPercent(0.0);
    	bRet = bRet && m_poPWM->setPeriodTime(Period().getInMicroSeconds(), BlackLib::microsecond);
    	bRet = bRet && m_poPWM->setDutyPercent(Duty());
    	if(Polarity() == false){
    		//BlackLib polarity seems to be inverse; For us straight is HIGH->LOW
    		bRet = bRet && m_poPWM->setPolarity(BlackLib::straight);
    	}else{
    		bRet = bRet && m_poPWM->setPolarity(BlackLib::reverse);
    	}
    	if(bRet == true){
    		//PWM configuration OK
    		STATUS() ="OK";
    		QO() = true;
    	}else{
    		//PWM configuration Error
    		DEVLOG_DEBUG("Invalid configuration parameters in BL_PWM FB\n");
    		STATUS() ="Configuration Error";
    		QO() = false;
    	}
    	sendOutputEvent(scm_nEventCNFID);
    	break;
    case scm_nEventStartID:
    	if(m_poPWM != NULL){
    		if(m_poPWM->setRunState(BlackLib::run)){
    	    	QI() = true;
    	    	STATUS() = "Running";
    		}else{
				//Could not start PWM
				DEVLOG_ERROR("Unable to run PWM\n");
				STATUS() = "ERROR running PWM";
				QO()=false;
    		}
    	}else{
        	QI() = false;
        	STATUS() = "PWM not initialized";
    	}
    	sendOutputEvent(scm_nEventCNFID);
    	break;
    case scm_nEventStopID:
    	if (m_poPWM != NULL){
    		//TODO:Handle the PWM output level when stopping it
    		if(m_poPWM->setRunState(BlackLib::stop)){
				STATUS() = "PWM Stopped";
				QO()=true;
    		}else{
				//Could not stop PWM
				DEVLOG_ERROR("Unable to stop PWM\n");
				STATUS() = "ERROR stopping PWM";
				QO()=false;
    		}
    	}else{
        	QI() = false;
        	STATUS() = "PWM not initialized";
    	}
    	sendOutputEvent(scm_nEventCNFID);
    	break;
  }
}
コード例 #12
0
ファイル: syntakticka_analyza.c プロジェクト: adamVass/IFJ
//funkce na vkladani parametru
tChyba PARAMS() {
	int analyza;
	//PARAMS->( id : DTYPE PARAMS
	if(token.stav == s_leva_zavorka) {
		token = getNextToken();
		if(token.stav == s_lex_error) {
			return S_LEXIKALNI_CHYBA;
		}

		else if(token.stav == s_identifikator) {
			if((params = malloc(strlen(token.data)+1)) == NULL) {
				return S_INTERNI_CHYBA;
			}
			//do globalni promenne params nacteme id parametru funkce
			strcpy(params, token.data);			
		
			token = getNextToken();
			if(token.stav == s_lex_error) {
				return S_LEXIKALNI_CHYBA;
			}

			if(token.stav == s_dvojtecka) {
				token = getNextToken();
				if(token.stav == s_lex_error) {
					return S_LEXIKALNI_CHYBA;
				}

				analyza = DTYPE();
				if(analyza != S_BEZ_CHYB) {
					return analyza;
				}

				if(!strcmp(token.data, "integer")) {
					dtype = TYPEINT;
				}
				else if(!strcmp(token.data, "real")) {
					dtype = TYPEDOUBLE;
				}
				else if(!strcmp(token.data, "string")) {
					dtype = TYPESTR;
				}
				else if(!strcmp(token.data, "boolean")) {
					dtype = TYPEBOOL;
				}
				//vlozeni do pole parametru
				htParamInsert(ptrhtGlobal,funkce, params, dtype);
				//vlozeni parametru do lokalni hash
				htInsert(func[currFuncSize].table, params, NULL, dtype, ID_PARAM);			
				free(params);
				
				token = getNextToken();
				if(token.stav == s_lex_error) {
					return S_LEXIKALNI_CHYBA;
				}
				//rekurzivni volani
		        return PARAMS();
			}
			return S_SYNTAKTICKA_CHYBA;
		}
	}//PARAMS->; id : DTYPE PARAMS	
	else if(token.stav == s_strednik) {
		token = getNextToken();
		if(token.stav == s_lex_error) {
			return S_LEXIKALNI_CHYBA;
		}
		
		if(token.stav == s_identifikator) {
			
			if((params = malloc(strlen(token.data)+1)) == NULL) {
				return S_INTERNI_CHYBA;
			}
			//vlozeni klice do globalni promenne
			strcpy(params, token.data);
			token = getNextToken();
			if(token.stav == s_lex_error) {
				return S_LEXIKALNI_CHYBA;
			}

			else if(token.stav == s_dvojtecka) {
				token = getNextToken();
				if(token.stav == s_lex_error) {
					return S_LEXIKALNI_CHYBA;
				}
				
				analyza = DTYPE();
				if(analyza != S_BEZ_CHYB) {
					return analyza;
				}
				
				if(!strcmp(token.data, "integer")) {
				dtype = TYPEINT;
				}
				else if(!strcmp(token.data, "string")) {
					dtype = TYPESTR;
				}
				else if(!strcmp(token.data, "real")) {
					dtype = TYPEDOUBLE;
				}
				else if(!strcmp(token.data, "boolean")){
					dtype = TYPEBOOL;
				}
				//vlozeni do globalni, do pole parametru funkce	
				htParamInsert(ptrhtGlobal,funkce, params, dtype);
				htInsert(func[currFuncSize].table, params, NULL, dtype, ID_PARAM);
				free(params);
				token = getNextToken();
				if(token.stav == s_lex_error) {
					return S_LEXIKALNI_CHYBA;
				}	
				return PARAMS();
			}
		}
		return S_SYNTAKTICKA_CHYBA;
	}
	else if(token.stav == s_prava_zavorka) {
		token = getNextToken();
		if(token.stav == s_lex_error) {
			return S_LEXIKALNI_CHYBA;
		}

		return S_BEZ_CHYB;
	}
	return S_SYNTAKTICKA_CHYBA;
}
コード例 #13
0
ファイル: syntakticka_analyza.c プロジェクト: adamVass/IFJ
tChyba FUNKCE() {
	int analyza;
	//opet lokalni promenna, stejna funkce jako ve funkci nahore
	TItem *nasel;
	// FUNKCE-> begin ACT_LIST
	if(!strcmp(token.data, "begin") && token.stav == s_klicove) {
		token = getNextToken();			//pres strcmp porovnavam data tokenu (prakticky primo to, co se nacte)
		if(token.stav == s_lex_error) {
			return S_LEXIKALNI_CHYBA;
		}
		//po zavolani funkce se getToken nevola, protoze kazda funkce, nez vrati hodnotu, nacte dalsi token
		analyza = ACT_LIST();			
		if(analyza != S_BEZ_CHYB) {
			return analyza;
		}
		return S_BEZ_CHYB;
	}
	//FUNKCE->function id PARAMS : DTYPE ; DOPREDNE ; FUNKCE
	else if(!strcmp(token.data, "function") && token.stav == s_klicove) {
		//pamatujeme si, ze jsme v definici funkce
		byla_funkce = true;				
		token = getNextToken();
		if(token.stav == s_lex_error) {
			return S_LEXIKALNI_CHYBA;
		}

		if(token.stav == s_identifikator) {	
			//pokud id ma nazev stejny jako tyto 2 funkce, jedna se o chybu
			if(!strcmp(token.data, "length") || !strcmp(token.data, "copy")) {
				return S_SEMANTICKA_CHYBA_NEDEF;
			}

			if((funkce = malloc(strlen(token.data)+1)) == NULL) {	
				return S_INTERNI_CHYBA;
			}
			//nulovani poctu parametru funkce
			TData *dat = (TData*)malloc(sizeof(TData));
			dat->param.numParam = 0;
			
			strcpy(funkce, token.data);
			//pokud id funkce j*z je v globalni hash tabulce a nejedna se o doprednou deklaraci -> chyba
			nasel = htSearch(ptrhtGlobal,funkce);		
			if(nasel != NULL ) {
				if(nasel->init == true) {
					return S_SEMANTICKA_CHYBA_NEDEF;
				}
				nasel->init = true;
			}
			//vlozeni nazvu funkce do globalni hash
			htInsert(ptrhtGlobal,funkce,dat, TYPEUNDEF , ID_FUNCTION);		

			token = getNextToken();
			if(token.stav == s_lex_error) {
			return S_LEXIKALNI_CHYBA;
			}
			//funkce na kontrolu a ukladani parametru funkce
			analyza = PARAMS();
			if(analyza != S_BEZ_CHYB) {
				return analyza;
			}
				
			else if(token.stav == s_dvojtecka) {
				token = getNextToken();
				if(token.stav == s_lex_error) {
					return S_LEXIKALNI_CHYBA;
				}
				//funkce na kontrolu datovych typu	
				analyza = DTYPE();
				if(analyza != S_BEZ_CHYB) {
					return analyza;
				}
										
				if(!strcmp(token.data, "integer")) {
					dtype = TYPEINT;
				}
				else if(!strcmp(token.data, "real")) {				//do docasne promene nacteme datovy typ funkce
					dtype = TYPEDOUBLE;
				}
				else if(!strcmp(token.data, "string")) {
					dtype = TYPESTR;
				}
				else if(!strcmp(token.data, "boolean")) {
					dtype = TYPEBOOL;
				}
					
				token = getNextToken();
				if(token.stav == s_lex_error) {
					return S_LEXIKALNI_CHYBA;
				}
	
				else if(token.stav == s_strednik) {
					token = getNextToken();
					if(token.stav == s_lex_error) {
						return S_LEXIKALNI_CHYBA;
					}
					//zjisteni, zda se jedna o doprednou deklaraci funkces
					analyza = DOPREDNE();
					if(analyza != S_BEZ_CHYB) {
						return analyza;
					}
					//pokud neni dopredna, vkladame do globalni hash tabulky a zaroven i do lokalni hash tabulky
					if(init == true) {
						htCompleteInsert(ptrhtGlobal,funkce, ID_FUNCTION, dtype, true);				
						htInsert(func[currFuncSize-1].table, funkce, dat, dtype, ID_FUNCTION);
							
					}//pokud se jedna o doprednou deklaraci, ukladame jen do globalky hlavicku funkce																			
					else if (init == false) {
						htCompleteInsert(ptrhtGlobal,funkce, ID_FUNCTION, dtype, false);	
						

							//vlozeni navratove hodnoty do lokalni tabulky
					}
						
					if(token.stav == s_strednik) {
							
						token = getNextToken();
						if(token.stav == s_lex_error) {
							return S_LEXIKALNI_CHYBA;
						}
						else {
							//nastaveni ukazatele lokalni tabulky na vrchol zasobniku
							ptrhtLocal = ptrStack->top->ptrht;
							listIntrukci = &(ptrStack->top->field);
							// nastaveni tabulky instrukci v mainu
							byla_funkce = false;
							//rekurzivni volani 
							return FUNKCE();
						}								
					}
				}
			}
		}
		//pokud se nacte token, ktery podle pravidla tam nepatri, vrati se syntakticka chyba
		return S_SYNTAKTICKA_CHYBA;		
	}
	//FUNKCE->var DEKLARACE FUNKCE
	else if(!strcmp(token.data, "var") && token.stav == s_klicove) {
		token = getNextToken();
		if(token.stav == s_lex_error) {
			return S_LEXIKALNI_CHYBA;
		}
		//volani funkce na kontrolu a ukladani globalnich id
		analyza = DEKLARACE();
		if(analyza != S_BEZ_CHYB) {
			return analyza;
		}
		return FUNKCE();
	}
	return S_SYNTAKTICKA_CHYBA;
}