0,0 → 1,202 |
/* 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; |
|
} |