]> rtime.felk.cvut.cz Git - frescor/fna.git/blob - src_frescan/frescan_servers.h
changes to use the FRSH FSA module to do the analysis and spare capacity. TODO: finis...
[frescor/fna.git] / src_frescan / frescan_servers.h
1 /*!
2  * @file frescan_servers.h
3  *
4  * @brief FRESCAN sporadic servers
5  *
6  * @version 0.01
7  *
8  * @date 27-Feb-2008
9  *
10  * @author
11  *      Daniel Sangorrin
12  *
13  * @comments
14  *
15  * This file contains the FRESCAN sporadic servers that allow to isolate
16  * different streams of data by assigning them a budget and replenishment
17  * period.
18  *
19  * @license
20  *
21  * -----------------------------------------------------------------------
22  *  Copyright (C) 2006 - 2008 FRESCOR consortium partners:
23  *
24  *    Universidad de Cantabria,              SPAIN
25  *    University of York,                    UK
26  *    Scuola Superiore Sant'Anna,            ITALY
27  *    Kaiserslautern University,             GERMANY
28  *    Univ. Politécnica  Valencia,           SPAIN
29  *    Czech Technical University in Prague,  CZECH REPUBLIC
30  *    ENEA                                   SWEDEN
31  *    Thales Communication S.A.              FRANCE
32  *    Visual Tools S.A.                      SPAIN
33  *    Rapita Systems Ltd                     UK
34  *    Evidence                               ITALY
35  *
36  *    See http://www.frescor.org for a link to partners' websites
37  *
38  *           FRESCOR project (FP6/2005/IST/5-034026) is funded
39  *        in part by the European Union Sixth Framework Programme
40  *        The European Union is not liable of any use that may be
41  *        made of this code.
42  *
43  *  This file is part of FRESCAN
44  *
45  *  FRESCAN is free software; you can  redistribute it and/or  modify
46  *  it under the terms of  the GNU General Public License as published by
47  *  the Free Software Foundation;  either  version 2, or (at  your option)
48  *  any later version.
49  *
50  *  FRESCAN  is distributed  in  the hope  that  it  will  be useful,  but
51  *  WITHOUT  ANY  WARRANTY;     without  even the   implied   warranty  of
52  *  MERCHANTABILITY  or  FITNESS FOR  A  PARTICULAR PURPOSE. See  the  GNU
53  *  General Public License for more details.
54  *
55  *  You should have  received a  copy of  the  GNU  General Public License
56  *  distributed  with  FRESCAN;  see file COPYING.   If not,  write to the
57  *  Free Software  Foundation,  59 Temple Place  -  Suite 330,  Boston, MA
58  *  02111-1307, USA.
59  *
60  * As a special exception, including FRESCAN header files in a file,
61  * instantiating FRESCAN generics or templates, or linking other files
62  * with FRESCAN objects to produce an executable application, does not
63  * by itself cause the resulting executable application to be covered
64  * by the GNU General Public License. This exception does not
65  * however invalidate any other reasons why the executable file might be
66  * covered by the GNU Public License.
67  * -----------------------------------------------------------------------
68  *
69  */
70
71 #ifndef _MARTE_FRESCAN_SERVERS_H_
72 #define _MARTE_FRESCAN_SERVERS_H_
73
74 #include "frescan.h"         // frescan_prio_t, frescan_ss_t
75 #include "frescan_packets.h" // frescan_packet_t
76 #include "frescan_data.h"
77
78 /**
79  * frescan_servers_init() - initialize server structures
80  *
81  * @net: the network instance
82  */
83
84 extern int frescan_servers_init(frescan_network_t net);
85
86 /**
87  * frescan_servers_create() - create a sporadic server
88  *
89  * @net: the network instance
90  * @params: the parameters for the server
91  * @id: the identificator for the server as a return value
92  *
93  */
94
95 extern int frescan_servers_create(frescan_network_t net,
96                                   const frescan_server_params_t *params,
97                                   frescan_ss_t *id);
98
99 /**
100  * frescan_servers_update() - update a sporadic server data
101  *
102  * @net: the network instance
103  * @params: the parameters for the server
104  * @id: the identificator for the server
105  *
106  */
107
108 extern int frescan_servers_update(frescan_network_t net,
109                                   const frescan_server_params_t *params,
110                                   frescan_ss_t id);
111
112 /**
113  * frescan_servers_destroy() - delete a sporadic server
114  *
115  * @net: the network instance
116  * @id: the identificator for the server
117  *
118  */
119
120 extern int frescan_servers_destroy(frescan_network_t net, frescan_ss_t id);
121
122 /**
123  * frescan_servers_get_data() - get a sporadic server data
124  *
125  * @net: the network instance
126  * @params: the parameters of the server
127  * @id: the identificator for the server
128  *
129  */
130
131 extern  int frescan_servers_get_data(frescan_network_t net,
132                                      frescan_server_params_t *params,
133                                      frescan_ss_t id);
134
135 /**
136  * frescan_servers_get_current_budget() - get the current sporadic server budget
137  *
138  * @net: the network instance
139  * @id: the identificator for the server
140  * @current_budget: the current budget of the server
141  *
142  */
143
144 extern int frescan_servers_get_current_budget(frescan_network_t net,
145                                               frescan_ss_t id,
146                                               frescan_budget_t *current_budget);
147
148 /**
149  * frescan_servers_get_highest_prio() - get the server with highest priority
150  *
151  * @net: the network instance
152  * @id: the identificator for the server
153  * @prio: the priority of that server
154  *
155  * If "id" is returned with a value of FRESCAN_MX_IDS,
156  * there are no active servers.
157  * NOTE: id=FRESCAN_MX_IDS is the identifier for fixed priority messages
158  *
159  */
160
161 extern int frescan_servers_get_highest_prio(frescan_network_t net,
162                                             frescan_ss_t *id,
163                                             frescan_prio_t *prio);
164
165 /**
166  * frescan_servers_frame_sent() - hook to control the server budget and prio
167  *
168  * @net: the network instance
169  * @id: the identificator for the server
170  * @packet: the packet sent (with its timestamp)
171  *
172  * This function is called when a frame has been effectively sent through the
173  * CAN bus and that frame is associated to a certain server. The function
174  * decreases the capacity of the server and sets the priority to background
175  * in case the budget is exhausted.
176  *
177  * NOTE: the replenishment operation is programmed using the corresponding
178  * function at frescan_servers_replenishments module
179  */
180
181 extern int frescan_servers_frame_sent(frescan_network_t net,
182                                       frescan_ss_t id,
183                                       frescan_packet_t *packet);
184
185 #endif // _MARTE_FRESCAN_SERVERS_H_