verify_mode_2_form_2_encoder.c
上传用户:weiliju62
上传日期:2007-01-06
资源大小:619k
文件大小:2k
源码类别:

SCSI/ASPI

开发平台:

MultiPlatform

  1. /* test program for the sector formatting library */
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5. #include <fcntl.h>
  6. #include "ecc.h"
  7. int main(int argc, char *argv[])
  8. {
  9. int fin;
  10. unsigned int sector = 0;
  11. unsigned int verified = 0;
  12. int address;
  13. if (argc < 2) {
  14. fprintf(stderr, "Usage: %s 2352-byte-sector-filen", argv[0]);
  15. return 0;
  16. }
  17. if (argv[1][0] == '-') {
  18. fin = STDIN_FILENO;
  19. } else {
  20. fin = open(argv[1], O_RDONLY);
  21. }
  22. if (fin == -1) {
  23. perror("");
  24. fprintf(stderr, "could not open file %s for reading.n",argv[1]);
  25. exit(1);
  26. }
  27. address = 150;
  28. for (; 1; sector++) {
  29. unsigned char inbuf[2448];
  30. unsigned char inbuf_copy[2448];
  31. unsigned int result;
  32. int have_read;
  33. /* get one original sector */
  34. have_read = 0;
  35. while (2352 != have_read) {
  36. int retval;
  37. retval = read(fin, inbuf+have_read, 2352-have_read);
  38. if (retval < 0) break;
  39. if (retval == 0)
  40. break;
  41. have_read += retval;
  42. }
  43. if (have_read != 2352) 
  44.   break;
  45.         /* make a copy to work on */
  46. memcpy(inbuf_copy, inbuf, 2352);
  47. #if 0
  48. /* check CRC value */
  49. if (memcmp(inbuf_copy+2348, "", 4) != 0
  50.     || build_edc(inbuf_copy,16,16+8+2324-1) != 0U)
  51. continue;
  52. #endif
  53. /* clear fields,  which shall be build */
  54. memset(inbuf_copy, 0, 16);
  55. memset(inbuf_copy+16+8+2324, 0, 4);
  56. /* build fields */
  57. do_encode_L2(inbuf_copy, MODE_2_FORM_2, address++);
  58. /* check fields */
  59. if (memcmp(inbuf_copy, inbuf, 2352) != 0) {
  60. fprintf(stderr, "difference at sector %un", sector);
  61. } else verified++;
  62. }
  63. fprintf(stderr, "%u sectors, %u verified okn", sector, verified);
  64. close(fin);
  65. return 0;
  66. }