Exemplo n.º 1
0
//------------------------------------------------------------------------------
static void Ymodem_PreparePacket(uint8_t *data, uint8_t pktNo, uint32_t sizeBlk)
{
  uint16_t i, size;
  uint16_t tempCRC;
  
  data[0] = STX;
  data[1] = pktNo;
  data[2] = (~pktNo);

  size = sizeBlk < PACKET_1K_SIZE ? sizeBlk :PACKET_1K_SIZE;
  // Read block from file
  if (size > 0) SPIFFS_read(&fs, (spiffs_file)file_fd, data + PACKET_HEADER, size);

  if ( size  <= PACKET_1K_SIZE)
  {
    for (i = size + PACKET_HEADER; i < PACKET_1K_SIZE + PACKET_HEADER; i++)
    {
      data[i] = 0x1A; // EOF (0x1A) or 0x00
    }
  }
  tempCRC = Cal_CRC16(&data[PACKET_HEADER], PACKET_1K_SIZE);
  data[PACKET_1K_SIZE + PACKET_HEADER] = tempCRC >> 8;
  data[PACKET_1K_SIZE + PACKET_HEADER + 1] = tempCRC & 0xFF;
}
Exemplo n.º 2
0
int read_and_verify_fd(spiffs_file fd, char *name) {
  int32_t res;
  int pfd = open(make_test_fname(name), O_RDONLY);
  spiffs_stat s;
  res = SPIFFS_fstat(&__fs, fd, &s);
  if (res < 0) {
    printf("  read_and_verify: could not stat file %s\n", name);
    return res;
  }
  if (s.size == 0) {
    SPIFFS_close(&__fs, fd);
    close(pfd);
    return 0;
  }

  //printf("verifying %s, len %i\n", name, s.size);
  int offs = 0;
  uint8_t buf_d[256];
  uint8_t buf_v[256];
  while (offs < s.size) {
    int read_len = MIN(s.size - offs, sizeof(buf_d));
    res = SPIFFS_read(&__fs, fd, buf_d, read_len);
    if (res < 0) {
      printf("  read_and_verify: could not read file %s offs:%i len:%i filelen:%i\n", name, offs, read_len, s.size);
      return res;
    }
    int pres = read(pfd, buf_v, read_len);
    (void)pres;
    //printf("reading offs:%i len:%i spiffs_res:%i posix_res:%i\n", offs, read_len, res, pres);
    int i;
    int veri_ok = 1;
    for (i = 0; veri_ok && i < read_len; i++) {
      if (buf_d[i] != buf_v[i]) {
        printf("file verification mismatch @ %i, %02x %c != %02x %c\n", offs+i, buf_d[i], buf_d[i], buf_v[i], buf_v[i]);
        int j = MAX(0, i-16);
        int k = MIN(sizeof(buf_d), i+16);
        k = MIN(s.size-offs, k);
        int l;
        for (l = j; l < k; l++) {
          printf("%c", buf_d[l] > 31 ? buf_d[l] : '.');
        }
        printf("\n");
        for (l = j; l < k; l++) {
          printf("%c", buf_v[l] > 31 ? buf_v[l] : '.');
        }
        printf("\n");
        veri_ok = 0;
      }
    }
    if (!veri_ok) {
      SPIFFS_close(&__fs, fd);
      close(pfd);
      printf("data mismatch\n");
      return -1;
    }

    offs += read_len;
  }

  SPIFFS_close(&__fs, fd);
  close(pfd);

  return 0;
}
Exemplo n.º 3
0
ssize_t fs_spiffs_read(int fd, void *buf, size_t count) {
  struct mount_info *m = &s_fsm;
  if (!m->valid) return set_errno(EBADF);
  return set_spiffs_errno(m, SPIFFS_read(&m->fs, fd, buf, count));
}
Exemplo n.º 4
0
int ICACHE_FLASH_ATTR roffs_read(ROFFS_FILE *file, char *buf, int len)
{
    return SPIFFS_read(&fs, file->fd, buf, len);
}
Exemplo n.º 5
0
size_t spiffs_fread(void *ptr, size_t size, size_t count, int fd) {
  int res = SPIFFS_read(&fs, fd, ptr, size * count);
  set_errno(res);

  return res < 0 ? 0 : res;
}
Exemplo n.º 6
0
int main(int argc, char **argv) {
  FILE *fp;
  const char *filename = NULL;
  int i;
  int list = 0;
  const char *extDir = ".";

  for (i = 1; i < argc && argv[i][0] == '-'; i++) {
    if (strcmp(argv[i], "-d") == 0 && i + 1 < argc) {
      extDir = argv[i + 1];
      i++;
    } else if (strcmp(argv[i], "-l") == 0) {
      list = 1;
    } else if (strcmp(argv[i], "-h") == 0) {
      show_usage(argv);
    }
  }

  if (argc - i < 1) {
    show_usage(argv);
  }

  filename = argv[i];
  fp = fopen(filename, "r");
  if (fp == NULL) {
    fprintf(stderr, "unable to open %s, err: %d\n", filename, errno);
    return 1;
  }

  fseek(fp, 0, SEEK_END);
  image_size = ftell(fp);
  fseek(fp, 0, SEEK_SET);

  image = (char *) malloc(image_size);
  if (fread(image, image_size, 1, fp) < 1) {
    fprintf(stderr, "cannot read %s, err: %d\n", filename, errno);
    return 1;
  }

  mem_spiffs_mount();

  {
    spiffs_DIR d;
    struct spiffs_dirent de;
    SPIFFS_opendir(&fs, ".", &d);

    while (SPIFFS_readdir(&d, &de) != NULL) {
      if (list) {
        printf("%s\n", de.name);
      } else {
        char target[1024];
        char *buf = NULL;
        FILE *out;
        spiffs_file in;

        sprintf(target, "%s/%s", extDir, de.name);

        fprintf(stderr, "extracting %s\n", de.name);
        out = fopen(target, "w");
        if (out == NULL) {
          fprintf(stderr, "cannot write %s, err: %d\n", target, errno);
          return 1;
        }

        in = SPIFFS_open_by_dirent(&fs, &de, SPIFFS_RDONLY, 0);
        if (in < 0) {
          fprintf(stderr, "cannot open spiffs file %s, err: %d\n", de.name,
                  SPIFFS_errno(&fs));
          return 1;
        }

        buf = malloc(de.size);
        if (SPIFFS_read(&fs, in, buf, de.size) != de.size) {
          fprintf(stderr, "cannot read %s, err: %d\n", de.name,
                  SPIFFS_errno(&fs));
          return 1;
        }

        SPIFFS_close(&fs, in);
        fwrite(buf, de.size, 1, out);
        free(buf);
        fclose(out);
      }
    }

    SPIFFS_closedir(&d);
  }

  free(image);
  fclose(fp);

  return 0;
}