Чтение блока physical format information dvd-r/-rw диска
/* Формируем командный пакет */
read_dvd_struct_cmd[0] = 0xAD; // код команды
read_dvd_struct_cmd[7] = ffield; // значение поля Format field
/* Размер запрашиваемых у устройства данных */
read_dvd_struct_cmd[8] = *((__u8 *)&alloc_size + 1);
read_dvd_struct_cmd[9] = *((__u8 *)&alloc_size);
/* Посылаем устройству команду при помощи SCSI Generic драйвера.
* Порядок работы с ним рассмотрен в [6]
*/
test_unit_ready();
if(send_cmd(read_dvd_struct_cmd, 12, SG_DXFER_FROM_DEV, \
buff, 2052, 20) <0) return -1;
/* Отображаем полученные результаты */
printf("\nFormat field: 0x%X\n", ffield);
printf("Book type: 0x%.2X\n", ldesc->book_type);
printf("Disk size: %d\n", ldesc->disk_size);
/* Стартовые и конечные адреса области данных */
Start_DA = __swab32(ldesc->start_psn_da);
End_DA = __swab32(ldesc->end_psn_da);
printf("Starting PSN of Data Area: 0x%X (%u)\n", Start_DA, Start_DA);
printf("End PSN of Data Area: 0x%X (%u)\n", End_DA, End_DA);
/* Считываем значение из поля Medium Unique Data, находящееся по смещению 32 байта
* от начала Layer Descriptor. Если Format = 0x10, то будет считано значение 02FE10h,
* если Format = 0x00 - стартовый адрес текущей Border-out области
*/
memcpy((void *)&u_part, buff + 4 + 32, 4);
u_part = __swab32(u_part);
if(ffield == 0) printf("Start PSN of Current Border-out: ");
printf("%Xh (%u)\n", u_part, u_part);
Другие статьи по теме:
- Портативный dvd ergo tf-dvd7050d 7- Signature
- Dvd плееры
- Новое устройство цифровой аудиоаппаратуры
- Sfedit