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