Rev 1226 |
Go to most recent revision |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
/* Event Generator
*
* Giacomo Guidi
*/
#include <stdio.h>
#include <stdlib.h>
#include "event_gen.h"
#define ACT_SINGLE 0
#define ACT_PERIODIC 1
#define ACT_MEAN 2
#define ACT_INVALID 3
int select_act_type
(void)
{
char act_type
[10];
printf("\nInsert the activation type\n");
printf(" S - Single\n");
printf(" P - Periodic\n");
printf(" M - Sporadic with constant distribution (Mean,Delta)\n");
printf("> ");
scanf("%s",act_type
);
switch (act_type
[0]) {
case 's':
case 'S':
return ACT_SINGLE
;
break;
case 'p':
case 'P':
return ACT_PERIODIC
;
break;
case 'm':
case 'M':
return ACT_MEAN
;
break;
default:
return ACT_INVALID
;
}
return ACT_INVALID
;
}
int write_single_act
(char *task_name
)
{
FILE
*file_act_header
;
int time_usec
;
file_act_header
= fopen("test_header.h","a+");
if (file_act_header
== NULL
) return 1;
printf("\nInsert single activation time [us]\n");
printf("> ");
scanf("%d",&time_usec
);
fprintf(file_act_header
,"\nstruct timespec %s_act_event[1] = {%d,%d};\n",
task_name
,time_usec
/1000000,time_usec
%1000000);
fclose(file_act_header
);
return 0;
}
int write_periodic_act
(char *task_name
)
{
FILE
*file_act_header
;
int i
,first_time_usec
,per_time_usec
,act_num
;
long long tot_time_usec
;
file_act_header
= fopen("test_header.h","a+");
if (file_act_header
== NULL
) return 1;
printf("\nInsert the number of activations\n");
printf("> ");
scanf("%d",&act_num
);
printf("Insert first activation time [us]\n");
printf("> ");
scanf("%d",&first_time_usec
);
printf("Insert periodic activation time [us]\n");
printf("> ");
scanf("%d",&per_time_usec
);
fprintf(file_act_header
,"\nstruct timespec %s_act_event[%d] = {{%d,%d},\n",
task_name
,act_num
,first_time_usec
/1000000,first_time_usec
%1000000);
tot_time_usec
= first_time_usec
;
for (i
=0;i
<act_num
-1;i
++) {
tot_time_usec
+= per_time_usec
;
fprintf(file_act_header
," {%d,%d},\n",
(int)tot_time_usec
/1000000,(int)tot_time_usec
%1000000);
}
fprintf(file_act_header
,"};\n");
fclose(file_act_header
);
return 0;
}
int write_mean_act
(char *task_name
)
{
FILE
*file_act_header
;
int i
,first_time_usec
,mean_time_usec
,act_num
,delta_time_usec
;
long long tot_time_usec
;
file_act_header
= fopen("test_header.h","a+");
if (file_act_header
== NULL
) return 1;
printf("\nInsert the number of activations\n");
printf("> ");
scanf("%d",&act_num
);
printf("Insert first activation time [us]\n");
printf("> ");
scanf("%d",&first_time_usec
);
printf("Insert mean peridic time [us]\n");
printf("> ");
scanf("%d",&mean_time_usec
);
printf("Insert delta time [us]\n");
printf("> ");
scanf("%d",&delta_time_usec
);
fprintf(file_act_header
,"\nstruct timespec %s_act_event[%d] = {{%d,%d},\n",
task_name
,act_num
,first_time_usec
/1000000,first_time_usec
%1000000);
tot_time_usec
= first_time_usec
;
for (i
=0;i
<act_num
-1;i
++) {
tot_time_usec
+= mean_time_usec
+ random
() % delta_time_usec
- delta_time_usec
/2;
fprintf(file_act_header
," {%d,%d},\n",
(int)tot_time_usec
/1000000,(int)tot_time_usec
%1000000);
}
fprintf(file_act_header
,"};\n");
fclose(file_act_header
);
return 0;
}
int main
(void) {
char task_name
[100];
char act_type
;
int err
;
printf("\nEvent Generator\n\n");
srandom
(12354132);
printf("Insert the name of the task\n");
printf("> ");
scanf("%s",task_name
);
while((act_type
= select_act_type
()) == ACT_INVALID
) {
printf("Error: Invalid Act Type\n");
}
switch (act_type
) {
case ACT_SINGLE
:
err
= write_single_act
(task_name
);
if (err
!= 0) {
printf("Error writing activation header\n");
exit(1);
}
break;
case ACT_PERIODIC
:
err
= write_periodic_act
(task_name
);
if (err
!= 0) {
printf("Error writing activation header\n");
exit(1);
}
break;
case ACT_MEAN
:
err
= write_mean_act
(task_name
);
if (err
!= 0) {
printf("Error writing activation header\n");
exit(1);
}
break;
}
return 0;
}