コード例 #1
0
ファイル: tutorial.cpp プロジェクト: codejumper/simpleSim
void TutorialComponent::processMessage(OjCmpt cmpt, JausMessage msg) {
//<ROS2JAUS>
	TutorialData *data = NULL;
	data = (TutorialData *)ojCmptGetUserData(cmpt);
	SetWrenchEffortMessage wrMsg;
	beginner_tutorials::wrenchData rosWrenchMsg;

	switch (msg->commandCode) {

		case JAUS_SET_WRENCH_EFFORT:
			//If we recieve a set wrench message from someone, publish the contents of the message to ROS
			wrMsg = setWrenchEffortMessageFromJausMessage(msg);
			rosWrenchMsg.throttle = wrMsg->propulsiveLinearEffortXPercent;
			rosWrenchMsg.brake = wrMsg->resistiveLinearEffortXPercent;
			rosWrenchMsg.steering = wrMsg->propulsiveRotationalEffortZPercent;
			data->wrenchPub->publish(rosWrenchMsg);

		case JAUS_REQUEST_COMPONENT_CONTROL:
			//Hardcode an outgoing address, only necessary if the message doesn't provide a source
			JausAddress addr;
			addr = jausAddressCreate();
			addr->subsystem = 1;
			addr->node = 1;
			addr->component = JAUS_EXPERIMENTAL_MOTION_PROFILE_DRIVER;
			addr->instance = 1;
			
			//Spoof a message to confirm control of the primitive driver	
			ConfirmComponentControlMessage confirmComponentControl; 
			confirmComponentControl = confirmComponentControlMessageCreate();
			jausAddressCopy(confirmComponentControl->source, ojCmptGetAddress(cmpt));
			jausAddressCopy(confirmComponentControl->destination, addr);
			confirmComponentControl->responseCode = JAUS_CONTROL_ACCEPTED;

			JausMessage confirmControl;
			confirmControl = confirmComponentControlMessageToJausMessage(confirmComponentControl);
			ojCmptSendMessage(cmpt, confirmControl);
			
			//Spoof a message to report the status of the component
			ReportComponentStatusMessage reportComponentStatus;
			reportComponentStatus = reportComponentStatusMessageCreate();
			reportComponentStatus->primaryStatusCode = JAUS_READY_STATE;
			jausAddressCopy(reportComponentStatus->source, ojCmptGetAddress(cmpt));
			jausAddressCopy(reportComponentStatus->destination, addr);
			
			JausMessage reportStatus;
			reportStatus = reportComponentStatusMessageToJausMessage(reportComponentStatus);
			ojCmptSendMessage(cmpt, reportStatus);


			ojCmptDefaultMessageProcessor(cmpt, msg);
//</ROS2JAUS>
		default:
			//if we recieve an unfamiliar message, print its command code
			if (msg->commandCode != JAUS_REPORT_HEARTBEAT_PULSE && msg->commandCode != JAUS_CREATE_SERVICE_CONNECTION) {
				std::cout << "Received message..." << std::endl;
				std::cout << "Command code=" << jausCommandCodeString(msg->commandCode) << std::endl;
			}

			ojCmptDefaultMessageProcessor(cmpt, msg);


	}

}
コード例 #2
0
ファイル: wd.c プロジェクト: OpenJAUS/openjaus
void wdAllState(void)
{
	JausMessage message = NULL;
	ServiceConnection scList;
	ServiceConnection sc;
	ReportComponentStatusMessage reportStatus;	
	ReleaseComponentControlMessage releaseControl = NULL;

	// Retrieve the Gpos SC Message
	if(gposSc && gposSc->isActive)
	{
		if(scManagerReceiveServiceConnection(wdNmi, gposSc, &message))
		{
			wdProcessMessage(message);
		}
	}

	if(vssSc && vssSc->isActive)
	{
		if(scManagerReceiveServiceConnection(wdNmi, vssSc, &message))
		{
			wdProcessMessage(message);
		}
	}

	if(pdWrenchSc && pdWrenchSc->isActive)
	{
		if(scManagerReceiveServiceConnection(wdNmi, pdWrenchSc, &message))
		{
			wdProcessMessage(message);
		}
	}

	if(pdStatusSc && pdStatusSc->isActive)
	{
		if(scManagerReceiveServiceConnection(wdNmi, pdStatusSc, &message))
		{
			wdProcessMessage(message);
		}
	}

	// Respond to a ReportComponentStatus Service Connection
	scList = scManagerGetSendList(wdNmi, JAUS_REPORT_COMPONENT_STATUS);
	if(scList)
	{
		reportStatus = reportComponentStatusMessageCreate();
		jausAddressCopy(reportStatus->source, wd->address);
		reportStatus->properties.scFlag = JAUS_SERVICE_CONNECTION_MESSAGE;
		reportStatus->primaryStatusCode = wd->state;

		sc = scList;
		while(sc)
		{
				jausAddressCopy(reportStatus->destination, sc->address);
				reportStatus->sequenceNumber = sc->sequenceNumber;

				message = reportComponentStatusMessageToJausMessage(reportStatus);
				nodeManagerSend(wdNmi, message);
				jausMessageDestroy(message);

				sc = sc->nextSc;
		}
		reportComponentStatusMessageDestroy(reportStatus);
	}
	scManagerDestroySendList(scList);

	// Check Control
	if(!wdRequestControl && wdInControl)
	{
		// Release Control
		//cDebug(4, "wd: Releasing control of PD\n");

		releaseControl = releaseComponentControlMessageCreate();
		jausAddressCopy(releaseControl->source, wd->address);
		jausAddressCopy(releaseControl->destination, pd->address);
		
		message = releaseComponentControlMessageToJausMessage(releaseControl);
		nodeManagerSend(wdNmi, message);
		jausMessageDestroy(message);
		
		releaseComponentControlMessageDestroy(releaseControl);
		
		wdInControl = JAUS_FALSE;
		pd->state = JAUS_UNKNOWN_STATE;
		
		if(pdStatusSc->isActive)
		{	
			scManagerTerminateServiceConnection(wdNmi, pdStatusSc);
		}
		
		if(pdWrenchSc->isActive)
		{	
			scManagerTerminateServiceConnection(wdNmi, pdWrenchSc);		
		}	

		wd->state = JAUS_INITIALIZE_STATE;

	}
}