#include #include #include #include #include "database.h" #include "event.h" #include "config.h" void usage(void) { printf( "usage: [options] \n" "options:\n" " -d this option is mandatory\n" " -v verbose\n" ); exit(1); } int main(int n, char **v) { char *database_filename = NULL; void *database; int i; int input_event_id; database_event_format f; char *file = NULL; int fd; int frame = -1, subframe = -1; int frame_arg, subframe_arg, buffer_arg; int verbose = 0; for (i = 1; i < n; i++) { if (!strcmp(v[i], "-h") || !strcmp(v[i], "--help")) usage(); if (!strcmp(v[i], "-d")) { if (i > n-2) usage(); database_filename = v[++i]; continue; } if (!strcmp(v[i], "-v")) { verbose = 1; continue; } if (file == NULL) { file = v[i]; continue; } if (frame == -1) { frame = atoi(v[i]); continue; } if (subframe == -1) { subframe = atoi(v[i]); continue; } usage(); } if (file == NULL || frame == -1 || subframe == -1) usage(); if (database_filename == NULL) { printf("ERROR: provide a database file (-d)\n"); exit(1); } database = parse_database(database_filename); load_config_file(database_filename); input_event_id = event_id_from_name(database, "ENB_PHY_INPUT_SIGNAL"); f = get_format(database, input_event_id); frame_arg = subframe_arg = buffer_arg = -1; for (i = 0; i < f.count; i++) { if (!strcmp(f.name[i], "frame")) { if (frame_arg != -1) goto err; if (strcmp(f.type[i], "int")) goto err; frame_arg = i; } if (!strcmp(f.name[i], "subframe")) { if (subframe_arg != -1) goto err; if (strcmp(f.type[i], "int")) goto err; subframe_arg = i; } if (!strcmp(f.name[i], "rxdata")) { if (buffer_arg != -1) goto err; if (strcmp(f.type[i], "buffer")) goto err; buffer_arg = i; } continue; err: printf("cannot deal with ENB_PHY_INPUT_SIGNAL from database file\n"); exit(1); } if (frame_arg == -1 || subframe_arg == -1 || buffer_arg == -1) goto err; fd = open(file, O_RDONLY); if (fd == -1) { perror(file); exit(1); } /* get wanted frame/subframe */ while (1) { char v[T_BUFFER_MAX]; event e; e = get_event(fd, v, database); if (e.type == -1) break; if (e.type != input_event_id) continue; if (verbose) printf("input frame %d subframe %d size %d\n", e.e[frame_arg].i, e.e[subframe_arg].i, e.e[buffer_arg].bsize); if (!(frame == e.e[frame_arg].i && subframe == e.e[subframe_arg].i)) continue; #if 0 for (i = 0; i < e.e[buffer_arg].bsize/2; i++) { short *x = e.e[buffer_arg].b; x[i] *= 14; } #endif fwrite(e.e[buffer_arg].b, e.e[buffer_arg].bsize, 1, stdout); fflush(stdout); return 0; } printf("frame %d subframe %d not found\n", frame, subframe); return 0; }