verify_mode_2_form_1_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. int fout;
  14. if (argc < 2) {
  15. fprintf(stderr, "Usage: %s 2352-byte-sector-filen", argv[0]);
  16. return 0;
  17. }
  18. if (argv[1][0] == '-') {
  19. fin = STDIN_FILENO;
  20. } else {
  21. fin = open(argv[1], O_RDONLY);
  22. }
  23. if (fin == -1) {
  24. perror("");
  25. fprintf(stderr, "could not open file %s for reading.n",argv[1]);
  26. exit(1);
  27. }
  28. address = 150;
  29. for (; 1; sector++) {
  30. unsigned char inbuf[2448];
  31. unsigned char inbuf_copy[2448];
  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, 2448);
  47. #if 0
  48. /* check CRC value */
  49. if (memcmp(inbuf_copy+16+8+2048, "", 4) != 0
  50.     || build_edc(inbuf_copy,16,16+8+2048-1) != 0U)
  51. continue;
  52. { int j;
  53. for (j = 0; j < 1; j++) {
  54. if (decode_L2_P(inbuf_copy) != 0) {
  55. break;
  56. }
  57. if (decode_L2_Q(inbuf_copy) != 0) {
  58. break;
  59. }
  60. }
  61. if (j != 1) continue;
  62. }
  63. #endif
  64. /* clear fields,  which shall be build */
  65. memset(inbuf_copy, 0, 16);
  66. memset(inbuf_copy+16+8+2048, 0, 4 + 276);
  67. /* build fields */
  68. do_encode_L2(inbuf_copy, MODE_2_FORM_1, address++);
  69. /* check fields */
  70. if (memcmp(inbuf_copy, inbuf, 2352) != 0) {
  71. fprintf(stderr, "difference at sector %un", sector);
  72. } else verified++;
  73. printf("%dr", sector);
  74. fflush(stdout);
  75. }
  76. fprintf(stderr, "%u sectors, %u verified okn", sector, verified);
  77. close(fin);
  78. return 0;
  79. }