| /* ---------------------------------------------------------------------------- |
| * ATMEL Microcontroller Software Support |
| * ---------------------------------------------------------------------------- |
| * Copyright (c) 2008, Atmel Corporation |
| * |
| * All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions are met: |
| * |
| * - Redistributions of source code must retain the above copyright notice, |
| * this list of conditions and the disclaimer below. |
| * |
| * Atmel's name may not be used to endorse or promote products derived from |
| * this software without specific prior written permission. |
| * |
| * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR |
| * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE |
| * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, |
| * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, |
| * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
| * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
| * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, |
| * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| * ---------------------------------------------------------------------------- |
| */ |
| |
| /** \file |
| * \section Purpose |
| * |
| * SCSI commands implementation. |
| * |
| * section Usage |
| * |
| * -# After a CBW is received from host, use SBC_GetCommandInformation to check |
| * if the command is supported, and get the command length and type |
| * information before processing it. |
| * -# Then SBC_ProcessCommand can be used to handle a valid command, to |
| * perform the command operations. |
| * -# SBC_UpdateSenseData is used to update the sense data that will be sent |
| * to host. |
| */ |
| |
| #ifndef SBCMETHODS_H |
| #define SBCMETHODS_H |
| |
| /** \addtogroup usbd_msd |
| *@{ |
| */ |
| |
| /*------------------------------------------------------------------------------ |
| * Headers |
| *------------------------------------------------------------------------------*/ |
| |
| #include "SBC.h" |
| #include "MSDLun.h" |
| #include "MSDDStateMachine.h" |
| |
| /*------------------------------------------------------------------------------ |
| * Definitions |
| *------------------------------------------------------------------------------*/ |
| |
| /** \addtogroup usbd_sbc_command_state SBC Command States |
| * @{ |
| * This page lists the possible states of a SBC command. |
| * |
| * \section States |
| * - SBC_STATE_READ |
| * - SBC_STATE_WAIT_READ |
| * - SBC_STATE_WRITE |
| * - SBC_STATE_WAIT_WRITE |
| * - SBC_STATE_NEXT_BLOCK |
| */ |
| |
| /** Start of reading bulk data */ |
| #define SBC_STATE_READ 0x01 |
| /** Waiting for the bulk data reading complete */ |
| #define SBC_STATE_WAIT_READ 0x02 |
| /** Read error state */ |
| #define SBC_STATE_READ_ERROR 0x03 |
| /** Start next read block */ |
| #define SBC_STATE_NEXT_READ 0x04 |
| /** Start writing bulk data to host */ |
| #define SBC_STATE_WRITE 0x05 |
| /** Waiting for the bulk data sending complete */ |
| #define SBC_STATE_WAIT_WRITE 0x06 |
| /** Write error state */ |
| #define SBC_STATE_WRITE_ERROR 0x07 |
| /** Start next write block */ |
| #define SBC_STATE_NEXT_WRITE 0x08 |
| /** Start next command block */ |
| #define SBC_STATE_NEXT_BLOCK 0x09 |
| /** @}*/ |
| |
| /*------------------------------------------------------------------------------ |
| * Exported functions |
| *------------------------------------------------------------------------------*/ |
| |
| void SBC_UpdateSenseData(SBCRequestSenseData *requestSenseData, |
| unsigned char senseKey, |
| unsigned char additionalSenseCode, |
| unsigned char additionalSenseCodeQualifier); |
| |
| unsigned char SBC_GetCommandInformation(void *command, |
| unsigned int *length, |
| unsigned char *type, |
| MSDLun *lun); |
| |
| unsigned char SBC_ProcessCommand(MSDLun *lun, |
| MSDCommandState *commandState); |
| |
| /**@}*/ |
| |
| #endif /*#ifndef SBCMETHODS_H */ |
| |
| |