FW Profile - C1 Implementation
FwRtMakeTest.c
Go to the documentation of this file.
1 
19 #include "FwRtMakeTest.h"
20 #include "FwRtConstants.h"
21 #include "FwRtConfig.h"
22 #include <stdlib.h>
23 #include <time.h>
24 
26 static struct timespec oneMs = {0,1000000};
27 
29 static struct TestRtData rt1Data[MAX_RT_INDEX];
31 static struct TestRtData rt2Data[MAX_RT_INDEX];
33 static struct TestRtData rt3Data[MAX_RT_INDEX];
35 static struct TestRtData rt4Data[MAX_RT_INDEX];
37 static struct TestRtData rt5Data[MAX_RT_INDEX];
38 
49 
56 static FwRtOutcome_t npInitAction(FwRtDesc_t rtDesc) {
57  struct TestRtData* rtData = FwRtGetData(rtDesc);
58  rtData->npInitCounter++;
59  return 1;
60 }
61 
68 static FwRtOutcome_t npFinalAction(FwRtDesc_t rtDesc) {
69  struct TestRtData* rtData = FwRtGetData(rtDesc);
70  rtData->npFinalCounter++;
71  return 1;
72 }
73 
81 static FwRtOutcome_t npImplNotifLogic(FwRtDesc_t rtDesc) {
82  struct TestRtData* rtData = FwRtGetData(rtDesc);
83  rtData->npImplNotifLogicCounter++;
84  return rtData->npImplNotifLogicFlag;
85 }
86 
94 static FwRtOutcome_t npImplNotifLogicRnd(FwRtDesc_t rtDesc) {
95  struct TestRtData* rtData = FwRtGetData(rtDesc);
96  if (rand()<RAND_MAX/2)
97  return 0;
98  else {
99  rtData->npImplNotifLogicCounter++;
100  return 1;
101  }
102 }
103 
110 static FwRtOutcome_t apInitAction(FwRtDesc_t rtDesc) {
111  struct TestRtData* rtData = FwRtGetData(rtDesc);
112  rtData->apInitCounter++;
113  return 1;
114 }
115 
122 static FwRtOutcome_t apFinalAction(FwRtDesc_t rtDesc) {
123  struct TestRtData* rtData = FwRtGetData(rtDesc);
124  rtData->apFinalCounter++;
125  return 1;
126 }
127 
134 static FwRtOutcome_t apSetupNotif(FwRtDesc_t rtDesc) {
135  struct TestRtData* rtData = FwRtGetData(rtDesc);
136  rtData->apSetupNotifCounter++;
137  return 1;
138 }
139 
147 static FwRtOutcome_t apImplActivLogic(FwRtDesc_t rtDesc) {
148  struct TestRtData* rtData = FwRtGetData(rtDesc);
149  rtData->apImplActivLogicCounter++;
150  return rtData->apImplActivLogicFlag;
151 }
152 
160 static FwRtOutcome_t apImplActivLogicRnd(FwRtDesc_t rtDesc) {
161  struct TestRtData* rtData = FwRtGetData(rtDesc);
162  rtData->apImplActivLogicCounter++;
163  if (rand()<RAND_MAX/2)
164  return 0;
165  else
166  return 1;
167 }
168 
176 static FwRtOutcome_t apImplFuncBehaviour(FwRtDesc_t rtDesc) {
177  struct TestRtData* rtData = FwRtGetData(rtDesc);
178  rtData->apExecFuncBehaviourCounter++;
179  return rtData->apExecFuncBehaviourFlag;
180 }
181 
190 static FwRtOutcome_t apImplFuncBehaviourWithWait(FwRtDesc_t rtDesc) {
191  struct TestRtData* rtData = FwRtGetData(rtDesc);
192  rtData->apExecFuncBehaviourCounter++;
193  nanosleep(&oneMs,NULL);
194  return rtData->apExecFuncBehaviourFlag;
195 }
196 
204 static FwRtOutcome_t apImplFuncBehaviourRnd(FwRtDesc_t rtDesc) {
205  struct TestRtData* rtData = FwRtGetData(rtDesc);
206  rtData->apExecFuncBehaviourCounter++;
207  if (rand()<RAND_MAX/2)
208  nanosleep(&oneMs,NULL);
209  rtData->apExecFuncBehaviourFlag = 0;
210  return rtData->apExecFuncBehaviourFlag;
211 }
212 
221 static FwRtOutcome_t apImplFuncBehaviourRnd2(FwRtDesc_t rtDesc) {
222  struct TestRtData* rtData = FwRtGetData(rtDesc);
223  rtData->apExecFuncBehaviourCounter++;
224  if (rand()<RAND_MAX/2)
225  nanosleep(&oneMs,NULL);
226  if (rand()<RAND_MAX/99)
227  rtData->apExecFuncBehaviourFlag = 1;
228  else
229  rtData->apExecFuncBehaviourFlag = 0;
230  return rtData->apExecFuncBehaviourFlag;
231 }
232 /*---------------------------------------------------------------------*/
233 FwRtDesc_t FwRtMakeTestRT1(unsigned int i) {
234  if (i >= MAX_RT_INDEX)
235  return NULL;
236 
237  rt1Data[i-1].apExecFuncBehaviourCounter = 0;
238  rt1Data[i-1].apExecFuncBehaviourFlag = 0;
239  rt1Data[i-1].apFinalCounter = 0;
240  rt1Data[i-1].apImplActivLogicCounter = 0;
241  rt1Data[i-1].apImplActivLogicFlag = 0;
242  rt1Data[i-1].apInitCounter = 0;
243  rt1Data[i-1].apSetupNotifCounter = 0;
244  rt1Data[i-1].npFinalCounter = 0;
245  rt1Data[i-1].npImplNotifLogicCounter = 0;
246  rt1Data[i-1].npImplNotifLogicFlag = 0;
247  rt1Data[i-1].npInitCounter = 0;
248 
249  /* Reset the RT Container */
250  FwRtReset(&rt1Desc[i-1]);
251 
252  /* Load the container data into the RT Container */
253  FwRtSetData(&rt1Desc[i-1],&rt1Data[i-1]);
254 
255  /* Define the actions of the RT Container */
256  FwRtSetInitializeNotifPr(&rt1Desc[i-1],&npInitAction);
257  FwRtSetFinalizeNotifPr(&rt1Desc[i-1],&npFinalAction);
258  FwRtSetImplementNotifLogic(&rt1Desc[i-1],&npImplNotifLogic);
259  FwRtSetInitializeActivPr(&rt1Desc[i-1],&apInitAction);
260  FwRtSetFinalizeActivPr(&rt1Desc[i-1],&apFinalAction);
261  FwRtSetSetUpNotif(&rt1Desc[i-1],&apSetupNotif);
262  FwRtSetImplementActivLogic(&rt1Desc[i-1],&apImplActivLogic);
263  FwRtSetExecFuncBehaviour(&rt1Desc[i-1],&apImplFuncBehaviour);
264 
265  /* Set Activation Thread, Mutex and Conditional Variable attributes */
266  FwRtSetPosixAttr(&rt1Desc[i-1],NULL, NULL, NULL);
267 
268  /* Initialize the RT Container */
269  FwRtInit(&rt1Desc[i-1]);
270 
271  return &rt1Desc[i-1];
272 }
273 
274 /*---------------------------------------------------------------------*/
275 FwRtDesc_t FwRtMakeTestRT2(unsigned int i) {
276  if (i >= MAX_RT_INDEX)
277  return NULL;
278 
279  rt2Data[i-1].apExecFuncBehaviourCounter = 0;
280  rt2Data[i-1].apExecFuncBehaviourFlag = 0;
281  rt2Data[i-1].apFinalCounter = 0;
282  rt2Data[i-1].apImplActivLogicCounter = 0;
283  rt2Data[i-1].apImplActivLogicFlag = 0;
284  rt2Data[i-1].apInitCounter = 0;
285  rt2Data[i-1].apSetupNotifCounter = 0;
286  rt2Data[i-1].npFinalCounter = 0;
287  rt2Data[i-1].npImplNotifLogicCounter = 0;
288  rt2Data[i-1].npImplNotifLogicFlag = 0;
289  rt2Data[i-1].npInitCounter = 0;
290 
291  /* Reset the RT Container */
292  FwRtReset(&rt2Desc[i-1]);
293 
294  /* Load the container data into the RT Container */
295  FwRtSetData(&rt2Desc[i-1],&rt2Data[i-1]);
296 
297  /* Define the actions of the RT Container */
298  FwRtSetInitializeNotifPr(&rt2Desc[i-1],&npInitAction);
299  FwRtSetFinalizeNotifPr(&rt2Desc[i-1],&npFinalAction);
300  FwRtSetImplementNotifLogic(&rt2Desc[i-1],&npImplNotifLogic);
301  FwRtSetInitializeActivPr(&rt2Desc[i-1],&apInitAction);
302  FwRtSetFinalizeActivPr(&rt2Desc[i-1],&apFinalAction);
303  FwRtSetSetUpNotif(&rt2Desc[i-1],&apSetupNotif);
304  FwRtSetImplementActivLogic(&rt2Desc[i-1],&apImplActivLogic);
305  FwRtSetExecFuncBehaviour(&rt2Desc[i-1],&apImplFuncBehaviourWithWait);
306 
307  /* Set Activation Thread, Mutex and Conditional Variable attributes */
308  FwRtSetPosixAttr(&rt2Desc[i-1],NULL, NULL, NULL);
309 
310  /* Initialize the RT Container */
311  FwRtInit(&rt2Desc[i-1]);
312 
313  return &rt2Desc[i-1];
314 }
315 
316 /*---------------------------------------------------------------------*/
317 FwRtDesc_t FwRtMakeTestRT3(unsigned int i) {
318  if (i >= MAX_RT_INDEX)
319  return NULL;
320 
321  rt3Data[i-1].apExecFuncBehaviourCounter = 0;
322  rt3Data[i-1].apExecFuncBehaviourFlag = 0;
323  rt3Data[i-1].apFinalCounter = 0;
324  rt3Data[i-1].apImplActivLogicCounter = 0;
325  rt3Data[i-1].apImplActivLogicFlag = 0;
326  rt3Data[i-1].apInitCounter = 0;
327  rt3Data[i-1].apSetupNotifCounter = 0;
328  rt3Data[i-1].npFinalCounter = 0;
329  rt3Data[i-1].npImplNotifLogicCounter = 0;
330  rt3Data[i-1].npImplNotifLogicFlag = 0;
331  rt3Data[i-1].npInitCounter = 0;
332 
333  /* Reset the RT Container */
334  FwRtReset(&rt3Desc[i-1]);
335 
336  /* Load the container data into the RT Container */
337  FwRtSetData(&rt3Desc[i-1],&rt3Data[i-1]);
338 
339  /* Define the actions of the RT Container */
340  FwRtSetInitializeNotifPr(&rt3Desc[i-1],&npInitAction);
341  FwRtSetFinalizeNotifPr(&rt3Desc[i-1],&npFinalAction);
342  FwRtSetImplementNotifLogic(&rt3Desc[i-1],&npImplNotifLogicRnd);
343  FwRtSetInitializeActivPr(&rt3Desc[i-1],&apInitAction);
344  FwRtSetFinalizeActivPr(&rt3Desc[i-1],&apFinalAction);
345  FwRtSetSetUpNotif(&rt3Desc[i-1],&apSetupNotif);
346  FwRtSetImplementActivLogic(&rt3Desc[i-1],&apImplActivLogicRnd);
347  FwRtSetExecFuncBehaviour(&rt3Desc[i-1],&apImplFuncBehaviourRnd);
348 
349  /* Set Activation Thread, Mutex and Conditional Variable attributes */
350  FwRtSetPosixAttr(&rt3Desc[i-1],NULL, NULL, NULL);
351 
352  /* Initialize the RT Container */
353  FwRtInit(&rt3Desc[i-1]);
354 
355  return &rt3Desc[i-1];
356 }
357 
358 /*---------------------------------------------------------------------*/
359 FwRtDesc_t FwRtMakeTestRT4(unsigned int i) {
360  if (i >= MAX_RT_INDEX)
361  return NULL;
362 
363  rt4Data[i-1].apExecFuncBehaviourCounter = 0;
364  rt4Data[i-1].apExecFuncBehaviourFlag = 0;
365  rt4Data[i-1].apFinalCounter = 0;
366  rt4Data[i-1].apImplActivLogicCounter = 0;
367  rt4Data[i-1].apImplActivLogicFlag = 0;
368  rt4Data[i-1].apInitCounter = 0;
369  rt4Data[i-1].apSetupNotifCounter = 0;
370  rt4Data[i-1].npFinalCounter = 0;
371  rt4Data[i-1].npImplNotifLogicCounter = 0;
372  rt4Data[i-1].npImplNotifLogicFlag = 0;
373  rt4Data[i-1].npInitCounter = 0;
374 
375  /* Reset the RT Container */
376  FwRtReset(&rt4Desc[i-1]);
377 
378  /* Load the container data into the RT Container */
379  FwRtSetData(&rt4Desc[i-1],&rt4Data[i-1]);
380 
381  /* Define the actions of the RT Container */
382  FwRtSetInitializeNotifPr(&rt4Desc[i-1],&npInitAction);
383  FwRtSetFinalizeNotifPr(&rt4Desc[i-1],&npFinalAction);
384  FwRtSetImplementNotifLogic(&rt4Desc[i-1],&npImplNotifLogicRnd);
385  FwRtSetInitializeActivPr(&rt4Desc[i-1],&apInitAction);
386  FwRtSetFinalizeActivPr(&rt4Desc[i-1],&apFinalAction);
387  FwRtSetSetUpNotif(&rt4Desc[i-1],&apSetupNotif);
388  FwRtSetImplementActivLogic(&rt4Desc[i-1],&apImplActivLogicRnd);
389  FwRtSetExecFuncBehaviour(&rt4Desc[i-1],&apImplFuncBehaviourRnd2);
390 
391  /* Set Activation Thread, Mutex and Conditional Variable attributes */
392  FwRtSetPosixAttr(&rt4Desc[i-1],NULL, NULL, NULL);
393 
394  /* Initialize the RT Container */
395  FwRtInit(&rt4Desc[i-1]);
396 
397  return &rt4Desc[i-1];
398 }
399 
400 /*---------------------------------------------------------------------*/
401 FwRtDesc_t FwRtMakeTestRT5(unsigned int i) {
402  if (i >= MAX_RT_INDEX)
403  return NULL;
404 
405  rt5Data[i-1].apExecFuncBehaviourCounter = 0;
406  rt5Data[i-1].apExecFuncBehaviourFlag = 0;
407  rt5Data[i-1].apFinalCounter = 0;
408  rt5Data[i-1].apImplActivLogicCounter = 0;
409  rt5Data[i-1].apImplActivLogicFlag = 0;
410  rt5Data[i-1].apInitCounter = 0;
411  rt5Data[i-1].apSetupNotifCounter = 0;
412  rt5Data[i-1].npFinalCounter = 0;
413  rt5Data[i-1].npImplNotifLogicCounter = 0;
414  rt5Data[i-1].npImplNotifLogicFlag = 0;
415  rt5Data[i-1].npInitCounter = 0;
416 
417  /* Reset the RT Container */
418  FwRtReset(&rt5Desc[i-1]);
419 
420  /* Load the container data into the RT Container */
421  FwRtSetData(&rt5Desc[i-1],&rt5Data[i-1]);
422 
423  /* Define the actions of the RT Container */
424  FwRtSetInitializeNotifPr(&rt5Desc[i-1],&npInitAction);
425  FwRtSetFinalizeNotifPr(&rt5Desc[i-1],&npFinalAction);
426  FwRtSetImplementNotifLogic(&rt5Desc[i-1],&npImplNotifLogic);
427  FwRtSetInitializeActivPr(&rt5Desc[i-1],&apInitAction);
428  FwRtSetFinalizeActivPr(&rt5Desc[i-1],&apFinalAction);
429  FwRtSetSetUpNotif(&rt5Desc[i-1],&apSetupNotif);
430  FwRtSetImplementActivLogic(&rt5Desc[i-1],&apImplActivLogic);
431  FwRtSetExecFuncBehaviour(&rt5Desc[i-1],&apImplFuncBehaviourRnd2);
432 
433  /* Set Activation Thread, Mutex and Conditional Variable attributes */
434  FwRtSetPosixAttr(&rt5Desc[i-1],NULL, NULL, NULL);
435 
436  /* Initialize the RT Container */
437  FwRtInit(&rt5Desc[i-1]);
438 
439  return &rt5Desc[i-1];
440 }
void FwRtSetInitializeActivPr(FwRtDesc_t rtDesc, FwRtAction_t initializeActivPr)
Define the function implementing the Initialization Action for the Activation Procedure.
Definition: FwRtConfig.c:217
int apImplActivLogicCounter
Counter increment by the Implement Activation Logic Action.
Definition: FwRtMakeTest.h:53
FwRtDesc_t FwRtMakeTestRT3(unsigned int i)
This function resets the i-th instance of the Test RT Container RT3 and returns a pointer to its desc...
Definition: FwRtMakeTest.c:317
void FwRtSetPosixAttr(FwRtDesc_t rtDesc, pthread_attr_t *pThreadAttr, pthread_mutexattr_t *pMutexAttr, pthread_condattr_t *pCondAttr)
Set the pointers to the attribute objects of the POSIX thread, mutex and condition variable used by t...
Definition: FwRtConfig.c:151
#define MAX_RT_INDEX
Maximum number of Test RT Container instances of type RT1 or RT2.
Definition: FwRtMakeTest.h:29
Header file to define all constants and types for the RT Container Module of the FW Profile...
FwRtDesc_t FwRtMakeTestRT5(unsigned int i)
This function resets the i-th instance of the Test RT Container RT5 and returns a pointer to its desc...
Definition: FwRtMakeTest.c:401
FwRtOutcome_t apExecFuncBehaviourFlag
Flag determining the outcome of the Execute Functional Behaviour Action.
Definition: FwRtMakeTest.h:59
int apSetupNotifCounter
Counter incremented by the Setup Notification Action.
Definition: FwRtMakeTest.h:51
FwRtDesc_t FwRtMakeTestRT1(unsigned int i)
This function resets the i-th instance of the Test RT Container RT1 and returns a pointer to its desc...
Definition: FwRtMakeTest.c:233
void FwRtSetImplementActivLogic(FwRtDesc_t rtDesc, FwRtAction_t implementActivLogic)
Define the function implementing the activation logic for the RT Container.
Definition: FwRtConfig.c:244
void FwRtSetInitializeNotifPr(FwRtDesc_t rtDesc, FwRtAction_t initializeNotifPr)
Define the function implementing the Initialization Action for the Notification Procedure.
Definition: FwRtConfig.c:190
Declaration of the configuration interface for a RT Container.
struct FwRtDesc rt1Desc[MAX_RT_INDEX]
The array of RT Container descriptors for RT1 containers.
Definition: FwRtMakeTest.c:40
struct FwRtDesc rt2Desc[MAX_RT_INDEX]
The array of RT Container descriptors for RT2 containers.
Definition: FwRtMakeTest.c:42
void FwRtReset(FwRtDesc_t rtDesc)
Reset the RT Container descriptor (RTD).
Definition: FwRtConfig.c:31
int apFinalCounter
Counter incremented by the Finalization Action of the Activation Procedure.
Definition: FwRtMakeTest.h:49
void FwRtSetFinalizeActivPr(FwRtDesc_t rtDesc, FwRtAction_t finalizeActivPr)
Define the function implementing the Finalization Action for the Activation Procedure.
Definition: FwRtConfig.c:226
int apExecFuncBehaviourCounter
Counter incremented by the Execute Functional Behaviour Action.
Definition: FwRtMakeTest.h:57
void FwRtSetImplementNotifLogic(FwRtDesc_t rtDesc, FwRtAction_t implementNotifLogicPr)
Define the function implementing the Notification Logic for the Notification Procedure.
Definition: FwRtConfig.c:208
Type for the data structure passed to all RT Containers made by the functions declared by this header...
Definition: FwRtMakeTest.h:37
int npInitCounter
Counter incremented by the Initialization Action of the Notification Procedure.
Definition: FwRtMakeTest.h:39
void FwRtSetSetUpNotif(FwRtDesc_t rtDesc, FwRtAction_t setUpNotification)
Define the function implementing the logic to set up a notification for the RT Container.
Definition: FwRtConfig.c:235
FwRtOutcome_t apImplActivLogicFlag
Flag determining outcome of Implement Activation Logic Action.
Definition: FwRtMakeTest.h:55
Declaration of functions to create and configure test RT Containers.
FwRtDesc_t FwRtMakeTestRT2(unsigned int i)
This function resets the i-th instance of the Test RT Container RT2 and returns a pointer to its desc...
Definition: FwRtMakeTest.c:275
int apInitCounter
Counter incremented by the Initialization Action of the Activation Procedure.
Definition: FwRtMakeTest.h:47
struct FwRtDesc rt5Desc[MAX_RT_INDEX]
The array of RT Container descriptors for RT5 containers.
Definition: FwRtMakeTest.c:48
struct FwRtDesc rt4Desc[MAX_RT_INDEX]
The array of RT Container descriptors for RT4 containers.
Definition: FwRtMakeTest.c:46
int npImplNotifLogicCounter
Counter incremented by the Implement Notification Logic Action.
Definition: FwRtMakeTest.h:43
struct FwRtDesc rt3Desc[MAX_RT_INDEX]
The array of RT Container descriptors for RT3 containers.
Definition: FwRtMakeTest.c:44
void FwRtSetFinalizeNotifPr(FwRtDesc_t rtDesc, FwRtAction_t finalizeNotifPr)
Define the function implementing the Finalization Action for the Notification Procedure.
Definition: FwRtConfig.c:199
void FwRtSetData(FwRtDesc_t rtDesc, void *rtData)
Set the pointer to the RT Container data in the container descriptor.
Definition: FwRtConfig.c:180
void FwRtInit(FwRtDesc_t rtDesc)
Initialize a RT Container.
Definition: FwRtConfig.c:52
FwRtDesc_t FwRtMakeTestRT4(unsigned int i)
This function resets the i-th instance of the Test RT Container RT4 and returns a pointer to its desc...
Definition: FwRtMakeTest.c:359
void * FwRtGetData(FwRtDesc_t rtDesc)
Get the pointer to the container data in the container descriptor.
Definition: FwRtConfig.c:185
FwRtOutcome_t npImplNotifLogicFlag
Flag determining outcome of Implement Notification Logic Action.
Definition: FwRtMakeTest.h:45
Structure representing a RT Container Descriptor.
int FwRtOutcome_t
Type used for the outcome of a container action.
Definition: FwRtConstants.h:37
void FwRtSetExecFuncBehaviour(FwRtDesc_t rtDesc, FwRtAction_t execFuncBehaviour)
Define the function which executes the functional behaviour associated to the RT Container.
Definition: FwRtConfig.c:253
int npFinalCounter
Counter incremented by the Finalization Action of the Notification Procedure.
Definition: FwRtMakeTest.h:41
P&P Software GmbH, Copyright 2011, All Rights Reserved