コード例 #1
0
ファイル: main.c プロジェクト: vtselfa/ControlDeTanque
void PartitionMain(void){

	//Puertos de lectura
    if ((p_sim=XM_create_sampling_port(PORT_SIM, PORT_SIZE, XM_DESTINATION_PORT))<0) {
        printf("[ControlNivel] port [%s] cannot be created\n", PORT_SIM);
        return;
    }
    if ((p_e=XM_create_sampling_port(PORT_E, PORT_SIZE, XM_DESTINATION_PORT))<0) {
        printf("[ControlNivel] port [%s] cannot be created\n", PORT_E);
        return;
    }

    //Puertos de escritura
    if ((p_pvs1=XM_create_sampling_port(PORT_PVS1, PORT_SIZE, XM_SOURCE_PORT))<0) {
        printf("[Simulador] port [%s] cannot be created\n", PORT_PVS1);
        return;
    }
	if ((p_pvs3=XM_create_sampling_port(PORT_PVS3, PORT_SIZE, XM_SOURCE_PORT))<0) {
        printf("[Simulador] port [%s] cannot be created\n", PORT_PVS3);
        return;
    }

	float n_nivel; 
	Estado n_e; 
	int flags;
    while (1) {
		//Anem llegint estats mentre estiga parat
		do{
    		XM_read_sampling_message(p_e, &n_e, sizeof(n_e), &flags);
    		if (flags&XM_MSG_VALID){
        		if(estado != n_e) estado = n_e;
			}else{
				XM_idle_self();
			}
	        printf("[P%d] Soc el control de nivell i estic PARAT\n", XM_PARTITION_SELF);
		} while(estado==PARADO);
		
		//Si es rep ordre de acabar, parem la partició
		if(estado==TERMINADO) XM_halt_partition(XM_PARTITION_SELF);

	
		//Llegim nou nivell
    	XM_read_sampling_message(p_sim, &n_nivel, sizeof(n_nivel), &flags);
    	if (flags&XM_MSG_VALID){
        	if(nivel != n_nivel){
            	nivel = n_nivel;
				actualizarPVS();
        	}	
    	}
	
		//Enviem la nova pvs
    	XM_write_sampling_message(p_pvs1, &pvs, sizeof(pvs)); 
    	XM_write_sampling_message(p_pvs3, &pvs, sizeof(pvs)); 


        printf("[P%d] Soc el control de nivell\n", XM_PARTITION_SELF);
		XM_idle_self();
	}
    
    XM_halt_partition(XM_PARTITION_SELF);
}
コード例 #2
0
/*
 * The __po_hi_initialize function is only called
 * by the main thread (the one that executes the traditional
 * main() function.
 */
int __po_hi_initialize ()
{
#if (defined (XM3_RTEMS_MODE) && (__PO_HI_NB_PORTS > 0))
   #include <deployment.h>
   #include <po_hi_types.h>
   #include <po_hi_transport.h>
   #include <xm.h>

   __po_hi_port_kind_t        pkind;
   __po_hi_port_t             tmp;
   __po_hi_node_t             tmpnode;
   __po_hi_node_t             mynode;
   int                        portno;

   mynode = __po_hi_transport_get_mynode ();

   for (tmp = 0 ; tmp < __PO_HI_NB_PORTS ; tmp++)
   {
      pkind = __po_hi_transport_get_port_kind (tmp);
      tmpnode = __po_hi_transport_get_node_from_entity (__po_hi_get_entity_from_global_port (tmp));
      if ((tmpnode == mynode) &&
          ( (pkind ==  __PO_HI_IN_DATA_INTER_PROCESS)          ||
            (pkind ==  __PO_HI_OUT_DATA_INTER_PROCESS)         ||
            (pkind ==  __PO_HI_IN_EVENT_DATA_INTER_PROCESS)    ||
            (pkind ==  __PO_HI_OUT_EVENT_DATA_INTER_PROCESS)
          ))
      {
         __DEBUGMSG ("[MAIN] Should init port %d\n", tmp);
         portno = -1;
         switch (pkind)
         {
            case __PO_HI_IN_DATA_INTER_PROCESS:
               portno = XM_create_sampling_port (__po_hi_transport_get_model_name (tmp), __po_hi_transport_get_queue_size (tmp), XM_DESTINATION_PORT);
               break;

            case __PO_HI_OUT_DATA_INTER_PROCESS:
               portno = XM_create_sampling_port (__po_hi_transport_get_model_name (tmp), __po_hi_transport_get_queue_size (tmp), XM_SOURCE_PORT);
               break;

            case __PO_HI_IN_EVENT_DATA_INTER_PROCESS:
               portno = XM_create_queuing_port (__po_hi_transport_get_model_name (tmp), __po_hi_transport_get_queue_size (tmp), __po_hi_transport_get_data_size (tmp), XM_DESTINATION_PORT);
               break;

            case __PO_HI_OUT_EVENT_DATA_INTER_PROCESS:
               portno = XM_create_queuing_port (__po_hi_transport_get_model_name (tmp), __po_hi_transport_get_queue_size (tmp), __po_hi_transport_get_data_size (tmp), XM_SOURCE_PORT);
               break;

            default:
               __DEBUGMSG ("[MAIN] Port kind not handled at this time for port %d\n", tmp);
               break;
         }

         if (portno < 0)
         {
               __DEBUGMSG ("[MAIN] Cannot open port %d, name=%s, return=%d\n", tmp, __po_hi_transport_get_model_name (tmp), portno);
         }
         else
         {
               __po_hi_transport_xtratum_port_init (tmp, portno);
               __DEBUGMSG ("[MAIN] Port %d (name=%s) created, identifier = %d\n", tmp, __po_hi_transport_get_model_name (tmp), portno);
         }

      }
   }
#endif


/*!
 * Initialize the monitoring trace if needed
 */
#if defined (MONITORING)
  trace_initialize ();
#endif

  return (__PO_HI_SUCCESS);
}