/*----------------------------------------------------------------------*/
/* usblFatFsSmp.h -- Interface library for fatFs include file.          */
/*                                                                      */
/* Copyright 2011 TEPCO UQUEST, LTD.                                    */
/*----------------------------------------------------------------------*/

/* $Id: usblFatFsSmp.h,v 1.4 2011/04/07 10:31:04 sasaki Exp $: */

/*
HISTORY
-------
1.1.0a 2011/03/25,ssa create.
*/

/*----- defines -----*/
#define K_OK (0)
#define K_ERROR (-1)

#define USBL_FF_MAX_DEV (1)
#define USBL_TASK_PRI (10)
#define FIXED_SECTOR_SIZE (512)

#ifndef NULL
#define NULL    ((void *)0)
#endif


#define printf k_printf

/*----- typedefs -----*/

/* fatFs デバイス管理構造体 */
typedef struct _usblFatFsInfo {
	void *pUsblBlk;
	DSTATUS diskStatus;
} USBL_FATFS_INFO;

/*----- forward declerations -----*/
extern DSTATUS disk_initialize (
  BYTE Drive      /* 物理ドライブ番号 */
);

extern DSTATUS disk_status (
  BYTE Drive           /* 物理ドライブ番号 */
);

extern DRESULT disk_read (
  BYTE Drive,          /* 物理ドライブ番号 */
  BYTE* Buffer,        /* 読み出しバッファへのポインタ */
  DWORD SectorNumber,  /* 読み出し開始セクタ番号 */
  BYTE SectorCount     /* 読み出しセクタ数 */
);

extern DRESULT disk_write (
  BYTE Drive,          /* 物理ドライブ番号 */
  const BYTE* Buffer,  /* 書き込むデータへのポインタ */
  DWORD SectorNumber,  /* 書き込み開始セクタ番号 */
  BYTE SectorCount     /* 書き込みセクタ数 */
);

extern DRESULT disk_ioctl (
  BYTE Drive,          /* 物理ドライブ番号 */
  BYTE Command,        /* 制御コマンド */
  void* Buffer         /* データ受け渡しバッファ */
);

extern INT usblFfInsert( void *pDevice );
extern INT usblFfRemove( void *pDevice );

extern INT usblBlkRd(
  void *pUsbBDev,      /* pointer to device structure   */
  UINT startBlk,       /* starting block number to read */
  UINT numBlks,        /* number of blocks to read      */
  BYTE *pBuffer        /* pointer to buffer to read     */
);

extern INT usblBlkWrt(
  void *pUsbBDev,      /* pointer to device structure   */
  UINT startBlk,       /* starting block number to read */
  UINT numBlks,        /* number of blocks to read      */
  const BYTE *pBuffer        /* pointer to buffer to read     */
);

extern void *usblBlkDevCreate(
  void * pDevice,
  UINT offset,         /* partition offset */
  UINT size,           /* size of partition */
  UCHAR lun            /* Logical Unit Number */
);

extern INT usblBlkDevDelete(
  void *pDev
);

extern USBL_FATFS_INFO usblFatFsInfo;

extern INT         usblBlkDrv ();

extern INT k_printf( const char *fmt, ... );
