void user_ports_polling () { __po_hi_port_t portno; __po_hi_node_t mynode; __po_hi_node_t tmpnode; __po_hi_request_t request; __po_hi_port_kind_t pkind; int ret; mynode = __po_hi_transport_get_mynode (); for (portno = 0 ; portno < __PO_HI_NB_PORTS ; portno++) { pkind = __po_hi_transport_get_port_kind (portno); tmpnode = __po_hi_transport_get_node_from_entity (__po_hi_get_entity_from_global_port (portno)); ret = -1; if (tmpnode == mynode) { if (pkind == __PO_HI_IN_DATA_INTER_PROCESS) { ret = XM_read_sampling_message (__po_hi_transport_xtratum_get_port (portno), &request, sizeof (__po_hi_request_t), 0); } if (pkind == __PO_HI_IN_EVENT_DATA_INTER_PROCESS) { ret = XM_receive_queuing_message (__po_hi_transport_xtratum_get_port (portno), &request, sizeof (__po_hi_request_t)); } __DEBUGMSG ("[XTRATUM POLLER] Poll port %d, corresponding xtratum port = %d, return=%d\n", portno, __po_hi_transport_xtratum_get_port (portno), ret); if (ret > 0) { __po_hi_main_deliver (&request); } } } }
/* * 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); }