Как составляется Рабочий Проект Электроснабжения жилого Дома energy-systems.ru. |
Чтение rma области dvd-r/-rw диска
Операция чтения RMA области позволяет получить информацию о логической структуре DVD-диска: режиме записи данных (DAO/Incremental), расположении (координатах) RZone и Border областей, количестве записанных на диск RZone.
Отметим, что эту информацию можно прочитать как из RMA, так и из последней Border-out области диска. Для чтения RMD блоков, записанных в RMA область, поле Format команды READ DVD STRUCTURE должно быть равно 0x0D. В поле Address записывается стартовый номер сектора RMA области, начиная с которого будет выполняться чтение, в поле Allocation Length – размер считываемых данных. За одно обращение к диску можно прочитать один RMD блок размером 32768 байт (16 секторов).
Давайте проследим, как изменяется содержимое RMA области DVD-RW диска при записи на диск данных в режиме Sequentinal. Для этого из Format 1 RMD будем считывать поля Field 0 для определения статуса диска, и Field 4, содержащее координаты первых 254 RZone (см. табл. 6). Для чтения полей Field 0 и Field 4 из Format 1 RMD необходимо определить смещение к ним в секторах относительно начала RMA. Это смещение определяется по формуле: Start_Sector = 16 x (5 + N) + F + 1, где 16 – это число секторов в одном RMD блоке, N – номер RMD блока, из которого поле Field будет считываться, F – номер поля (0 или 4).
Для чтения Field 4 необходимо пропустить 16 х 5 секторов, принадлежащих RMD Set (см. рис. 16), и затем сместится к нужному RMD блоку. Пятый сектор этого блока и будет искомым полем Field 4.
Чтение RMA области DVD-RW диска выполняет функция read_RMA:__u8 disk_status = 0; // статус диска
__u8 erase_code = 0;
__u16 alloc_size = SIZE;
__u16 EOC = 0; // Erase Operation Count
__u16 RMD_Format = 0; // from RMD Header (Field 0)
__u16 Inv_RZone_num = 0; // Invisible RZone Number (Last Rzone Number)
__u32 addr; // Поле Address командного пакета
__u32 LRS = 0; // Last Recorded RMA sector number
__u32 F3_RMD_Set_Pointer = 0; // Format 3 RMD Set Pointer
__u32 Update_Counter = 0;
__u32 EI1 = 0, EI2 = 0; // Erase Information 1/2
__u32 Start_RZone = 0; // Start Sector Number of RZone #n
__u32 LRA_RZone = 0; // Last Recorded Address of RZone #n
memset(buff, 0, SIZE);
Другие статьи по теме:
- Новые цифровые технологии с огромной скоростью входят в нашу повседневную жизнь- Dvd-r
- Simpledrive
- Средства связи
- Blu-ray