Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 1224 → Rev 1225

/demos/trunk/loader/event_gen.h
0,0 → 1,12
/* Event Generator Header
*
* Giacomo Guidi
*/
 
/* Posix TimeSpec */
struct new_timespec {
long tv_sec;
long tv_nsec;
};
 
 
/demos/trunk/loader/event_gen.c
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;
 
}