LUN_Write
Default mainpageat91libusbdevicemassstorageLUN_Write
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;
}