Commit 90a7b954 authored by julien.delange's avatar julien.delange

seperate services, add new functions to ease drivers design

avoid global variables in core services
!


git-svn-id: https://tecsw.estec.esa.int/svn/taste/trunk/po-hi-c@573 129961e7-ef38-4bb5-a8f7-c9a525a55882
parent d0205e76
......@@ -124,4 +124,13 @@ __po_hi_uint8_t __po_hi_gqueue_store_in (__po_hi_task_id id,
* request that will be stored in the queue.
*/
__po_hi_request_t* __po_hi_get_most_recent_value
(const __po_hi_task_id task_id,
const __po_hi_local_port_t local_port);
__po_hi_port_t __po_hi_gqueue_get_destination (const __po_hi_task_id task_id, const __po_hi_local_port_t local_port, const uint8_t destination_number);
uint8_t __po_hi_gqueue_get_destinations_number (const __po_hi_task_id task_id, const __po_hi_local_port_t local_port);
#endif /* __PO_HI_GQUEUE_H__ */
......@@ -41,8 +41,10 @@ int __po_hi_transport_send_default (__po_hi_task_id id, __po_hi_po
* Default transport layer
*/
const char* __po_hi_get_port_model_name (const __po_hi_port_t port);
char* __po_hi_get_port_model_name (const __po_hi_port_t port);
const char* __po_hi_get_port_name (const __po_hi_port_t port);
char* __po_hi_get_port_name (const __po_hi_port_t port);
__po_hi_local_port_t __po_hi_get_local_port_from_global_port (const __po_hi_port_t global_port);
#endif /* __PO_HI_TRANSPORT__ */
......@@ -34,7 +34,6 @@ int po_hi_c_driver_rasta_serial_fd;
void __po_hi_c_driver_serial_rasta_poller (void)
{
/*
char buf[1024];
int n;
__DEBUGMSG ("Hello, i'm the serial RASTA poller !\n");
......@@ -45,7 +44,6 @@ void __po_hi_c_driver_serial_rasta_poller (void)
buf[n] = '\0';
printf ("[RASTA SERIAL] Received: %s\n", buf);
}
*/
}
void __po_hi_c_driver_serial_rasta_init (void)
......@@ -78,6 +76,10 @@ void __po_hi_c_driver_serial_rasta_init (void)
int __po_hi_c_driver_serial_rasta_sender (const __po_hi_task_id task_id, const __po_hi_port_t port)
{
int n;
__po_hi_local_port_t local_port;
local_port = __po_hi_port_global_to_local[(int)port];
request = &(__po_hi_gqueues_most_recent_values[id][local_port]);
n = write (po_hi_c_driver_rasta_serial_fd, "blabl\n", 6);
__DEBUGMSG ("RASTA write returns %d\n", n);
return 1;
......
......@@ -242,8 +242,8 @@ void __po_hi_driver_sockets_init (void)
}
int __po_hi_driver_sockets_send (__po_hi_entity_t from,
__po_hi_entity_t to,
__po_hi_msg_t* msg)
__po_hi_entity_t to,
__po_hi_msg_t* msg)
{
__po_hi_node_t node;
int len;
......
......@@ -29,9 +29,6 @@
#define __PO_HI_GQUEUE_OUT_PORT constant_out_identifier
/* give a default value to the out port */
extern __po_hi_entity_t __po_hi_port_global_to_entity[__PO_HI_NB_PORTS];
extern __po_hi_local_port_t __po_hi_port_global_to_local[__PO_HI_NB_PORTS];
__po_hi_port_t* __po_hi_gqueues[__PO_HI_NB_TASKS];
__po_hi_int8_t __po_hi_gqueues_nb_ports[__PO_HI_NB_TASKS];
__po_hi_int8_t* __po_hi_gqueues_sizes[__PO_HI_NB_TASKS];
......@@ -312,3 +309,19 @@ int __po_hi_gqueue_next_value (__po_hi_task_id id, __po_hi_local_port_t port)
pthread_mutex_unlock (&__po_hi_gqueues_mutexes[id]);
return __PO_HI_SUCCESS;
}
__po_hi_request_t* __po_hi_get_most_recent_value (const __po_hi_task_id task_id, const __po_hi_local_port_t local_port)
{
return (&__po_hi_gqueues_most_recent_values[task_id][local_port]);
}
uint8_t __po_hi_gqueue_get_destinations_number (const __po_hi_task_id task_id, const __po_hi_local_port_t local_port)
{
return (__po_hi_gqueues_n_destinations[task_id][local_port]);
}
__po_hi_port_t __po_hi_gqueue_get_destination (const __po_hi_task_id task_id, const __po_hi_local_port_t local_port, const uint8_t destination_number)
{
return (__po_hi_gqueues_destinations[task_id][local_port][destination_number]);
}
......@@ -35,55 +35,54 @@ extern __po_hi_node_t entity_table[__PO_HI_NB_ENTITIES];
extern __po_hi_entity_t __po_hi_port_global_to_entity[__PO_HI_NB_PORTS];
extern __po_hi_local_port_t __po_hi_port_global_to_local[__PO_HI_NB_PORTS];
extern __po_hi_request_t* __po_hi_gqueues_most_recent_values[__PO_HI_NB_TASKS];
extern __po_hi_uint8_t* __po_hi_gqueues_n_destinations[__PO_HI_NB_TASKS];
extern __po_hi_port_t** __po_hi_gqueues_destinations[__PO_HI_NB_TASKS];
extern const char* __po_hi_port_global_model_names[__PO_HI_NB_PORTS];
extern const char* __po_hi_port_global_names[__PO_HI_NB_PORTS];
extern char* __po_hi_port_global_model_names[__PO_HI_NB_PORTS];
extern char* __po_hi_port_global_names[__PO_HI_NB_PORTS];
int __po_hi_transport_send_default (__po_hi_task_id id, __po_hi_port_t port)
{
__po_hi_msg_t msg;
__po_hi_request_t* request;
__po_hi_port_t* destinations;
__po_hi_uint8_t ndest;
__po_hi_uint8_t i;
__po_hi_local_port_t local_port;
__po_hi_port_t destination_port;
__po_hi_entity_t destination_entity;
#if defined (__PO_HI_NEED_DRIVER_SOCKETS) && (__PO_HI_NB_NODES > 1)
int error;
#endif
local_port = __po_hi_port_global_to_local[(int)port];
request = &(__po_hi_gqueues_most_recent_values[id][local_port]);
local_port = __po_hi_get_local_port_from_global_port (port);
request = __po_hi_get_most_recent_value (id, local_port);
if (request->port == -1)
{
#ifdef __PO_HI_DEBUG
__DEBUGMSG ("Send output task %d, port %d : no value to send\n",
id, port);
__DEBUGMSG ("Send output task %d, port %d : no value to send\n", id, port);
#endif
return __PO_HI_SUCCESS;
}
destinations = __po_hi_gqueues_destinations[id][local_port];
ndest = __po_hi_gqueues_n_destinations[id][local_port];
ndest = __po_hi_gqueue_get_destinations_number (id, local_port);
#ifdef __PO_HI_DEBUG
__DEBUGMSG ("Send value, emitter task %d, emitter port %d, emitter entity %d, destination ports :\n", id, port, __po_hi_port_global_to_entity[port]);
#endif
for (i=0;i<ndest;i++)
for (i=0 ; i < __po_hi_gqueue_get_destinations_number (id, local_port) ; i++)
{
destination_port = __po_hi_gqueue_get_destination (id, local_port, i);
destination_entity = __po_hi_get_entity_from_global_port (destination_port);
#ifdef __PO_HI_DEBUG
__DEBUGMSG ("\t%d (entity=%d)",
destinations[i],
__po_hi_port_global_to_entity[destinations[i]]);
destination_port,
destination_entity);
#endif
__po_hi_msg_reallocate (&msg);
request->port = (__po_hi_port_t) destinations[i];
request->port = destination_port;
if (__po_hi_transport_get_node_from_entity (__po_hi_get_entity_from_global_port (port)) ==
__po_hi_transport_get_node_from_entity (__po_hi_get_entity_from_global_port (destinations[i])))
__po_hi_transport_get_node_from_entity (__po_hi_get_entity_from_global_port (destination_port)))
{
__DEBUGMSG (" [deliver locally]\n");
__po_hi_main_deliver (request);
......@@ -95,7 +94,7 @@ int __po_hi_transport_send_default (__po_hi_task_id id, __po_hi_port_t port)
__po_hi_marshall_request (request, &msg);
error =__po_hi_driver_sockets_send (__po_hi_port_global_to_entity[port],
__po_hi_port_global_to_entity[destinations[i]],
__po_hi_port_global_to_entity[destination_port],
&msg);
if (error != __PO_HI_SUCCESS)
{
......@@ -113,8 +112,6 @@ int __po_hi_transport_send_default (__po_hi_task_id id, __po_hi_port_t port)
return __PO_HI_SUCCESS;
}
__po_hi_node_t __po_hi_transport_get_node_from_entity (const __po_hi_entity_t entity)
{
return entity_table[entity];
......@@ -125,14 +122,20 @@ __po_hi_entity_t __po_hi_get_entity_from_global_port (const __po_hi_port_t port)
return __po_hi_port_global_to_entity[port];
}
const char* __po_hi_get_port_name (const __po_hi_port_t port)
char* __po_hi_get_port_name (const __po_hi_port_t port)
{
return (__po_hi_port_global_names[port]);
}
const char* __po_hi_get_port_model_name (const __po_hi_port_t port)
char* __po_hi_get_port_model_name (const __po_hi_port_t port)
{
return (__po_hi_port_global_model_names[port]);
}
__po_hi_local_port_t __po_hi_get_local_port_from_global_port (const __po_hi_port_t global_port)
{
return (__po_hi_port_global_to_local[global_port]);
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment