Joerg Schmalzl / USBHost_DISCO-F746NG_joerg

Fork of USBHost_DISCO-F746NG by Dieter Graef

Committer:
DieterGraef
Date:
Mon Jun 13 17:21:07 2016 +0000
Revision:
24:5396b6a93262
USB Host for STM32F746 DISCO Board. At the moment you can only use either the High Speed Port or the Fast Speed Port.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DieterGraef 24:5396b6a93262 1 /*-----------------------------------------------------------------------*/
DieterGraef 24:5396b6a93262 2 /* Low level disk I/O module skeleton for FatFs (C)ChaN, 2007 */
DieterGraef 24:5396b6a93262 3 /*-----------------------------------------------------------------------*/
DieterGraef 24:5396b6a93262 4 /* This is a stub disk I/O module that acts as front end of the existing */
DieterGraef 24:5396b6a93262 5 /* disk I/O modules and attach it to FatFs module with common interface. */
DieterGraef 24:5396b6a93262 6 /*-----------------------------------------------------------------------*/
DieterGraef 24:5396b6a93262 7 #include "ffconf.h"
DieterGraef 24:5396b6a93262 8 #include "diskio.h"
DieterGraef 24:5396b6a93262 9
DieterGraef 24:5396b6a93262 10 #include "mbed_debug.h"
DieterGraef 24:5396b6a93262 11 #include "FATFileSystem.h"
DieterGraef 24:5396b6a93262 12
DieterGraef 24:5396b6a93262 13 using namespace mbed;
DieterGraef 24:5396b6a93262 14
DieterGraef 24:5396b6a93262 15 DSTATUS disk_initialize (
DieterGraef 24:5396b6a93262 16 BYTE pdrv /* Physical drive number (0..) */
DieterGraef 24:5396b6a93262 17 )
DieterGraef 24:5396b6a93262 18 {
DieterGraef 24:5396b6a93262 19 debug_if(FFS_DBG, "disk_initialize on pdrv [%d]\n", pdrv);
DieterGraef 24:5396b6a93262 20 return (DSTATUS)FATFileSystem::_ffs[pdrv]->disk_initialize();
DieterGraef 24:5396b6a93262 21 }
DieterGraef 24:5396b6a93262 22
DieterGraef 24:5396b6a93262 23 DSTATUS disk_status (
DieterGraef 24:5396b6a93262 24 BYTE pdrv /* Physical drive number (0..) */
DieterGraef 24:5396b6a93262 25 )
DieterGraef 24:5396b6a93262 26 {
DieterGraef 24:5396b6a93262 27 debug_if(FFS_DBG, "disk_status on pdrv [%d]\n", pdrv);
DieterGraef 24:5396b6a93262 28 return (DSTATUS)FATFileSystem::_ffs[pdrv]->disk_status();
DieterGraef 24:5396b6a93262 29 }
DieterGraef 24:5396b6a93262 30
DieterGraef 24:5396b6a93262 31 DRESULT disk_read (
DieterGraef 24:5396b6a93262 32 BYTE pdrv, /* Physical drive number (0..) */
DieterGraef 24:5396b6a93262 33 BYTE* buff, /* Data buffer to store read data */
DieterGraef 24:5396b6a93262 34 DWORD sector, /* Sector address (LBA) */
DieterGraef 24:5396b6a93262 35 UINT count /* Number of sectors to read (1..) */
DieterGraef 24:5396b6a93262 36 )
DieterGraef 24:5396b6a93262 37 {
DieterGraef 24:5396b6a93262 38 debug_if(FFS_DBG, "disk_read(sector %d, count %d) on pdrv [%d]\n", sector, count, pdrv);
DieterGraef 24:5396b6a93262 39 if (FATFileSystem::_ffs[pdrv]->disk_read((uint8_t*)buff, sector, count))
DieterGraef 24:5396b6a93262 40 return RES_PARERR;
DieterGraef 24:5396b6a93262 41 else
DieterGraef 24:5396b6a93262 42 return RES_OK;
DieterGraef 24:5396b6a93262 43 }
DieterGraef 24:5396b6a93262 44
DieterGraef 24:5396b6a93262 45 #if _READONLY == 0
DieterGraef 24:5396b6a93262 46 DRESULT disk_write (
DieterGraef 24:5396b6a93262 47 BYTE pdrv, /* Physical drive number (0..) */
DieterGraef 24:5396b6a93262 48 const BYTE* buff, /* Data to be written */
DieterGraef 24:5396b6a93262 49 DWORD sector, /* Sector address (LBA) */
DieterGraef 24:5396b6a93262 50 UINT count /* Number of sectors to write (1..) */
DieterGraef 24:5396b6a93262 51 )
DieterGraef 24:5396b6a93262 52 {
DieterGraef 24:5396b6a93262 53 debug_if(FFS_DBG, "disk_write(sector %d, count %d) on pdrv [%d]\n", sector, count, pdrv);
DieterGraef 24:5396b6a93262 54 if (FATFileSystem::_ffs[pdrv]->disk_write((uint8_t*)buff, sector, count))
DieterGraef 24:5396b6a93262 55 return RES_PARERR;
DieterGraef 24:5396b6a93262 56 else
DieterGraef 24:5396b6a93262 57 return RES_OK;
DieterGraef 24:5396b6a93262 58 }
DieterGraef 24:5396b6a93262 59 #endif /* _READONLY */
DieterGraef 24:5396b6a93262 60
DieterGraef 24:5396b6a93262 61 DRESULT disk_ioctl (
DieterGraef 24:5396b6a93262 62 BYTE pdrv, /* Physical drive number (0..) */
DieterGraef 24:5396b6a93262 63 BYTE cmd, /* Control code */
DieterGraef 24:5396b6a93262 64 void* buff /* Buffer to send/receive control data */
DieterGraef 24:5396b6a93262 65 )
DieterGraef 24:5396b6a93262 66 {
DieterGraef 24:5396b6a93262 67 debug_if(FFS_DBG, "disk_ioctl(%d)\n", cmd);
DieterGraef 24:5396b6a93262 68 switch(cmd) {
DieterGraef 24:5396b6a93262 69 case CTRL_SYNC:
DieterGraef 24:5396b6a93262 70 if(FATFileSystem::_ffs[pdrv] == NULL) {
DieterGraef 24:5396b6a93262 71 return RES_NOTRDY;
DieterGraef 24:5396b6a93262 72 } else if(FATFileSystem::_ffs[pdrv]->disk_sync()) {
DieterGraef 24:5396b6a93262 73 return RES_ERROR;
DieterGraef 24:5396b6a93262 74 }
DieterGraef 24:5396b6a93262 75 return RES_OK;
DieterGraef 24:5396b6a93262 76 case GET_SECTOR_COUNT:
DieterGraef 24:5396b6a93262 77 if(FATFileSystem::_ffs[pdrv] == NULL) {
DieterGraef 24:5396b6a93262 78 return RES_NOTRDY;
DieterGraef 24:5396b6a93262 79 } else {
DieterGraef 24:5396b6a93262 80 DWORD res = FATFileSystem::_ffs[pdrv]->disk_sectors();
DieterGraef 24:5396b6a93262 81 if(res > 0) {
DieterGraef 24:5396b6a93262 82 *((DWORD*)buff) = res; // minimum allowed
DieterGraef 24:5396b6a93262 83 return RES_OK;
DieterGraef 24:5396b6a93262 84 } else {
DieterGraef 24:5396b6a93262 85 return RES_ERROR;
DieterGraef 24:5396b6a93262 86 }
DieterGraef 24:5396b6a93262 87 }
DieterGraef 24:5396b6a93262 88 case GET_BLOCK_SIZE:
DieterGraef 24:5396b6a93262 89 *((DWORD*)buff) = 1; // default when not known
DieterGraef 24:5396b6a93262 90 return RES_OK;
DieterGraef 24:5396b6a93262 91
DieterGraef 24:5396b6a93262 92 }
DieterGraef 24:5396b6a93262 93 return RES_PARERR;
DieterGraef 24:5396b6a93262 94 }