mirror of
https://gitea.osmocom.org/sim-card/simtrace2.git
synced 2026-03-17 13:48:32 +03:00
146 lines
5.3 KiB
C
146 lines
5.3 KiB
C
/* ----------------------------------------------------------------------------
|
|
* 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.
|
|
* ----------------------------------------------------------------------------
|
|
*/
|
|
|
|
#ifndef _MSDIOFIFO_H
|
|
#define _MSDIOFIFO_H
|
|
|
|
/** \file
|
|
* \addtogroup usbd_msd
|
|
*@{
|
|
*/
|
|
|
|
/*------------------------------------------------------------------------------
|
|
* Headers
|
|
*------------------------------------------------------------------------------*/
|
|
|
|
/*------------------------------------------------------------------------------
|
|
* Definitions
|
|
*------------------------------------------------------------------------------*/
|
|
|
|
/** Idle state, do nothing */
|
|
#define MSDIO_IDLE 0
|
|
/** Start, to start IO operation */
|
|
#define MSDIO_START 1
|
|
/** Wait, waiting for IO operation done */
|
|
#define MSDIO_WAIT 2
|
|
/** Next, to check if the next block can be performed */
|
|
#define MSDIO_NEXT 3
|
|
/** Pause, to pause the process for buffer full or null */
|
|
#define MSDIO_PAUSE 4
|
|
/** Abort, to abort the process */
|
|
#define MSDIO_ABORT 5
|
|
/** Done, finish without error */
|
|
#define MSDIO_DONE 6
|
|
/** Error, any error happens */
|
|
#define MSDIO_ERROR 7
|
|
|
|
/** FIFO offset before USB transmit start */
|
|
/*#define MSDIO_FIFO_OFFSET (4*512) */
|
|
|
|
|
|
/** FIFO trunk size (in each transfer, large amount of data) */
|
|
#if !defined(MSD_OP_BUFFER)
|
|
#define MSDIO_READ10_CHUNK_SIZE (4*512)
|
|
#define MSDIO_WRITE10_CHUNK_SIZE (4*512)
|
|
#endif
|
|
|
|
/*------------------------------------------------------------------------------
|
|
* Types
|
|
*------------------------------------------------------------------------------*/
|
|
|
|
/** \brief FIFO buffer for READ/WRITE (disk) operation of a mass storage device */
|
|
typedef struct _MSDIOFifo {
|
|
|
|
/** Pointer to the ring buffer allocated for read/write */
|
|
unsigned char * pBuffer;
|
|
/** The size of the buffer allocated */
|
|
unsigned int bufferSize;
|
|
#ifdef MSDIO_FIFO_OFFSET
|
|
/** The offset to start USB transfer (READ10) */
|
|
unsigned int bufferOffset;
|
|
#endif
|
|
/** The index of input data (loaded to fifo buffer) */
|
|
unsigned int inputNdx;
|
|
/** The total size of the loaded data */
|
|
unsigned int inputTotal;
|
|
/** The index of output data (sent from the fifo buffer) */
|
|
unsigned int outputNdx;
|
|
/** The total size of the output data */
|
|
unsigned int outputTotal;
|
|
|
|
/** The total size of the data */
|
|
unsigned int dataTotal;
|
|
/** The size of the block in bytes */
|
|
unsigned short blockSize;
|
|
#if defined(MSDIO_READ10_CHUNK_SIZE) || defined(MSDIO_WRITE10_CHUNK_SIZE)
|
|
/** The size of one chunk */
|
|
/** (1 block, or several blocks for large amount data R/W) */
|
|
unsigned int chunkSize;
|
|
#endif
|
|
/** State of input & output */
|
|
unsigned char inputState;
|
|
unsigned char outputState;
|
|
|
|
/*- Statistics */
|
|
|
|
/** Times when fifo has no data to send */
|
|
unsigned short nullCnt;
|
|
/** Times when fifo can not load more input data */
|
|
unsigned short fullCnt;
|
|
} MSDIOFifo, *PMSDIOFifo;
|
|
|
|
/*------------------------------------------------------------------------------
|
|
* MACROS
|
|
*------------------------------------------------------------------------------*/
|
|
|
|
/*------------------------------------------------------------------------------
|
|
* Increase the index, by defined block size, in the ring buffer
|
|
* \param ndx The index to be increased
|
|
* \param sectSize The defined block size
|
|
* \param bufSize The ring buffer size
|
|
*------------------------------------------------------------------------------*/
|
|
#define MSDIOFifo_IncNdx(ndx, sectSize, bufSize) \
|
|
if ((ndx) >= (bufSize) - (sectSize)) (ndx) = 0; \
|
|
else (ndx) += (sectSize)
|
|
|
|
|
|
/*------------------------------------------------------------------------------
|
|
* Exported Functions
|
|
*------------------------------------------------------------------------------*/
|
|
|
|
|
|
extern void MSDIOFifo_Init(MSDIOFifo *pFifo,
|
|
void * pBuffer, unsigned short bufferSize);
|
|
|
|
/**@}*/
|
|
|
|
#endif /* _MSDIOFIFO_H */
|
|
|
|
|