Description
Source
Call Graph
Start Line: 217
unsigned char LUN_Read(MSDLun *lun, unsigned int blockAddress, void *data, unsigned int length, TransferCallback callback, void *argument)
{
unsigned int address;
unsigned char status;
// Check that the data is not too big
if ((length * lun->blockSize)
> (lun->size - lun->blockSize * blockAddress)) {
TRACE_WARNING("LUN_Read: Data too big\n\r");
status = USBD_STATUS_ABORTED;
}
else {
TRACE_INFO_WP("LUNRead(%u) ", blockAddress);
// Compute read start address
address = lun->media->baseAddress
+ lun->baseAddress
+ blockAddress * lun->blockSize;
// Start write operation
status = MED_Read(lun->media,
address,
data,
length * lun->blockSize,
(MediaCallback) callback,
argument);
// Check result code
if (status == MED_STATUS_SUCCESS) {
status = USBD_STATUS_SUCCESS;
}
else {
TRACE_WARNING("LUN_Read: Cannot read media\n\r");
status = USBD_STATUS_ABORTED;
}
}
return status;
}