- if (sscanf(line, "serial-number %u", &serial_number) == 1) {
- filename = cc_make_filename(serial_number, "eeprom");
- out = fopen (filename, "w");
- if (!out) {
- perror(filename);
- }
- } 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);
+ }
+ cc_usb_printf(cc, "f\n");
+ storage_size = 0;
+ for (;;) {
+ cc_usb_getline(cc, line, sizeof(line));
+ if (sscanf(line, "Storage size: %u", &storage_size) == 1)
+ break;
+ }
+ printf ("Serial number: %d Storage size: %u\n", serial_number, storage_size);
+ if (storage_size)
+ blocks = storage_size / 256;
+ else
+ blocks = 511;
+ done = 0;
+ column = 0;
+ for (block = 0; !done && block < blocks; 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;
+ }
+ if (out) {
+ fprintf(out, "%c %4x %4x %4x\n",
+ cmd, tick, a, b);
+ if (cmd == 'S' && a == 8) {
+ fclose(out);
+ out = NULL;
+ done = 1;
+ }