- 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);
- } else if (sscanf(line, "%c %x %x %x", &cmd, &tick, &a, &b) == 4) {
- if (out) {
- fprintf(out, "%s\n", line);
- if (cmd == 'S' && a == 8) {
- fclose(out);
- out = NULL;
+ }
+ if (!serial_number) {
+ fprintf(stderr, "no serial number found\n");
+ cc_usb_close(cc);
+ exit(1);
+ }
+ printf ("Serial number: %d\n", serial_number);
+ done = 0;
+ column = 0;
+ for (block = 0; !done && block < 511; block++) {
+ cc_usb_printf(cc, "e %x\n", block);
+ if (column == 64) {
+ putchar('\n');
+ column = 0;
+ }
+ putchar('.'); fflush(stdout); column++;
+ any_valid = 0;
+ for (addr = 0; addr < 0x100;) {
+ cc_usb_getline(cc, line, sizeof (line));
+ if (sscanf(line, "00%x %x %x %x %x %x %x %x %x",
+ &received_addr,
+ &data[0], &data[1], &data[2], &data[3],
+ &data[4], &data[5], &data[6], &data[7]) == 9)
+ {
+ if (received_addr != addr)
+ fprintf(stderr, "data out of sync at 0x%x\n",
+ block * 256 + received_addr);
+
+ if (log_checksum(data) != 0)
+ fprintf (stderr, "invalid checksum at 0x%x\n",
+ block * 256 + received_addr);
+ else
+ any_valid = 1;
+
+ cmd = data[0];
+ 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]);
+ column = 0;