#include <stdlib.h>
#include <unistd.h>
#include <getopt.h>
+#include <string.h>
#include "cc-usb.h"
#include "cc.h"
"invalid"
};
+
int
main (int argc, char **argv)
{
char line[8192];
FILE *out;
char *filename;
- int serial_number;
+ int serial_number = 0;
+ int flight = 0;
char cmd;
int tick, a, b;
int block;
int remote = 0;
int any_valid;
int invalid;
+ char serial_line[8192];
while ((c = getopt_long(argc, argv, "T:D:R", options, NULL)) != -1) {
switch (c) {
out = NULL;
for (;;) {
cc_usb_getline(cc, line, sizeof (line));
- if (sscanf(line, "serial-number %u", &serial_number) == 1) {
- filename = cc_make_filename(serial_number, "eeprom");
- out = fopen (filename, "w");
- if (!out) {
- perror(filename);
- }
- fprintf (out, "%s\n", line);
- }
+ if (sscanf(line, "serial-number %u", &serial_number) == 1)
+ strcpy(serial_line, line);
if (!strncmp(line, "software-version", 16))
break;
}
- if (!out) {
+ if (!serial_number) {
fprintf(stderr, "no serial number found\n");
cc_usb_close(cc);
exit(1);
}
printf ("Serial number: %d\n", serial_number);
- printf ("File name: %s\n", filename);
done = 0;
column = 0;
for (block = 0; !done && block < 511; block++) {
tick = data[2] + (data[3] << 8);
a = data[4] + (data[5] << 8);
b = data[6] + (data[7] << 8);
+ if (cmd == 'F') {
+ flight = b;
+ filename = cc_make_filename(serial_number, flight, "eeprom");
+ printf ("Flight: %d\n", flight);
+ printf ("File name: %s\n", filename);
+ out = fopen (filename, "w");
+ if (!out) {
+ perror(filename);
+ exit(1);
+ }
+ fprintf(out, "%s\n", serial_line);
+ }
+
if (cmd == 'S' && a <= 8) {
if (column) putchar('\n');
printf("%s\n", state_names[a]);
if (sscanf(line, "serial-number %u", &serial_number) == 1) {
aoview_file_set_serial(eeprom_file, serial_number);
} else if (sscanf(line, "%c %x %x %x", &cmd, &tick, &a, &b) == 4) {
+ if (cmd == 'F')
+ aoview_file_set_flight(eeprom_file, b);
aoview_file_printf(eeprom_file, "%s\n", line);
if (cmd == 'S' && a == 8) {
aoview_eeprom_done(serial);
char *name;
int failed;
int serial;
+ int flight;
int sequence;
};
aoview_file_start(struct aoview_file *file)
{
char base[50];
+ char seq[20];
struct tm tm;
time_t now;
char *full;
if (file->failed)
return FALSE;
- now = time(NULL);
- (void) localtime_r(&now, &tm);
- aoview_mkdir(aoview_file_dir);
- for (;;) {
- snprintf(base, sizeof (base), "%04d-%02d-%02d-serial-%03d-flight-%03d.%s",
- tm.tm_year + 1900,
- tm.tm_mon + 1,
- tm.tm_mday,
- file->serial,
- file->sequence,
- file->ext);
- full = aoview_fullname(aoview_file_dir, base);
- r = access(full, F_OK);
- if (r < 0) {
- file->file = fopen(full, "w");
- if (!file->file) {
- aoview_file_open_failed(full);
- free(full);
- file->failed = 1;
- return FALSE;
- } else {
- setlinebuf(file->file);
- file->name = full;
- return TRUE;
- }
- }
+ full = cc_make_filename(file->serial, file->flight, file->ext);
+ file->file = fopen(full, "w");
+ if (!file->file) {
+ aoview_file_open_failed(full);
free(full);
- file->sequence++;
+ file->failed = 1;
+ return FALSE;
+ } else {
+ setlinebuf(file->file);
+ file->name = full;
+ return TRUE;
}
}
return file->serial;
}
+void
+aoview_file_set_flight(struct aoview_file *file, int flight)
+{
+ if (flight != file->flight)
+ aoview_file_finish(file);
+ file->flight = flight;
+}
+
+int
+aoview_file_get_flight(struct aoview_file *file)
+{
+ return file->flight;
+}
+
void
aoview_file_init(GladeXML *xml)
{
return aoview_file_get_serial(aoview_log);
}
+void
+aoview_log_set_flight(int flight)
+{
+ aoview_file_set_flight(aoview_log, flight);
+}
+
+int
+aoview_log_get_flight(void)
+{
+ return aoview_file_get_flight(aoview_log);
+}
+
void
aoview_log_printf(char *format, ...)
{
if (monitor_pos) {
if (aoview_monitor_parse(monitor_line)) {
aoview_log_set_serial(aostate.data.serial);
+ aoview_log_set_flight(aostate.data.flight);
if (aoview_log_get_serial())
aoview_log_printf ("%s\n", monitor_line);
}
}
char *
-cc_make_filename(int serial, char *ext)
+cc_make_filename(int serial, int flight, char *ext)
{
char base[50];
+ char seq[20];
struct tm tm;
time_t now;
char *full;
cc_mkdir(cc_get_log_dir());
sequence = 0;
for (;;) {
- snprintf(base, sizeof (base), "%04d-%02d-%02d-serial-%03d-flight-%03d.%s",
- tm.tm_year + 1900,
- tm.tm_mon + 1,
- tm.tm_mday,
- serial,
- sequence,
- ext);
+ if (sequence)
+ snprintf(seq, sizeof(seq), "-seq-%03d", sequence);
+ else
+ seq[0] = '\0';
+
+ snprintf(base, sizeof (base), "%04d-%02d-%02d-serial-%03d-flight-%03d%s.%s",
+ tm.tm_year + 1900,
+ tm.tm_mon + 1,
+ tm.tm_mday,
+ serial,
+ flight,
+ seq,
+ ext);
full = cc_fullname(cc_get_log_dir(), base);
r = access(full, F_OK);
if (r < 0)
cc_get_log_dir(void);
char *
-cc_make_filename(int serial, char *ext);
+cc_make_filename(int serial, int flight, char *ext);
/*
* For sequential data which are not evenly spaced