"DVD-ROM media (which I need to be able to analyse)."
Ask Carsten GnÃ¶rlich why he doesn't support DVD-ROM. The answer might
help explain your difficulties. I'd be interested to know.
Did you read the part on his site about PI/PO errors ?
"... And I cannot set the EMCDR bit in
the Error Recovery Mode Page without getting the same error, though I can
set and reset the other bitfields in that Mode page fine."
On EMCDR forget it. Probably your drive was made before the manufacturer implemented it in bios? In that case they would have treated it as a "Reserved" field and all reserved fields must be set to zero or you'll get that CDB error almost every time. Check all your routines for that. Reserved fields = zero or errors result.
"I need more detailed error information about sectors that are still readable but that had some recoverable PI/PO errors encountered during the read. AND I need to get those errors back from the drive!"
The DVD data loss prevention methods seem pretty elaborate compared with CDs. So far in my reading/research on EDC, I get the impression the drive bios does all the work then outputs the results according to the "Software Defect Managementâ€ & "Enhanced Defect Reporting" schemes. What we as programmers can do is set the parameters for them then interpret the sense returns from read/writes based on those settings i. e. Type 1, Type 2 & Type 3. It's block level detection & reporting. Supposedly this enables us to notify the user about the condition of the disc even in the early stages of deterioration well before actual data loss occurs.
I haven't implemented all the pieces needed to do this yet so I have no practical testing results to share. But I'm glad you posted because it's got me going on an area that I haven't paid enough attention to.
From a standard DVD burner app point of view, these data loss prevention schemes which are already implemented & accessible to programmers are all that's needed. It wouldn't be enough for a more technical app designed to report errors in greater detail at the byte & sector level -- the same level the bios does it at already.
"That's the next area of expirimentation for sure. I'm gonna follow up the READ12 or READ10 commands with the REQUEST SENSE (0x03); trying different Error Recovery Mode Page settings and see what I get back."
Exactly. That's what I'm going to do too. I think I can confirm that sense returns is how the error reporting is done. Be sure your sense routine includes recovered errors. I'd do the read in blocks (not sectors) (Transfer Length = 16). Start at LBA 0 ... or if you know the LBA where those errors are start just before them. I'm interested to see what you get.
I think (?) what spath is saying is that the commands to read bytes from the non-user data areas are proprietary and will be unique for each manufacturer.