updated chan_fatfs

Dependents:   HARP2 HARP3

Fork of chan_fatfs by Eli Hughes

Committer:
tylerjw
Date:
Fri Dec 28 17:12:02 2012 +0000
Revision:
8:1f9748c6b865
Parent:
6:d770e6821de6
Added f_size() macro, not tested!!!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tylerjw 6:d770e6821de6 1 //------------------------------------------------------------------------/
tylerjw 6:d770e6821de6 2 // Sample code of OS dependent controls for FatFs /
tylerjw 6:d770e6821de6 3 // (C)ChaN, 2012 /
tylerjw 6:d770e6821de6 4 //------------------------------------------------------------------------/
tylerjw 6:d770e6821de6 5
tylerjw 6:d770e6821de6 6 #include "ff.h"
tylerjw 6:d770e6821de6 7 #include "rtos.h"
tylerjw 6:d770e6821de6 8
tylerjw 6:d770e6821de6 9 #if _FS_REENTRANT
tylerjw 6:d770e6821de6 10 /*-----------------------------------------------------------------------/
tylerjw 6:d770e6821de6 11 / Create a Synchronization Object
tylerjw 6:d770e6821de6 12 /------------------------------------------------------------------------/
tylerjw 6:d770e6821de6 13 / This function is called in f_mount function to create a new
tylerjw 6:d770e6821de6 14 / synchronization object, such as semaphore and mutex. When a FALSE is
tylerjw 6:d770e6821de6 15 / returned, the f_mount function fails with FR_INT_ERR.
tylerjw 6:d770e6821de6 16 */
tylerjw 6:d770e6821de6 17
tylerjw 6:d770e6821de6 18 bool ff_cre_syncobj ( /* 1:Function succeeded, 0:Could not create due to any error */
tylerjw 6:d770e6821de6 19 BYTE vol, /* Corresponding logical drive being processed */
tylerjw 6:d770e6821de6 20 _SYNC_t *sobj /* Pointer to return the created sync object */
tylerjw 6:d770e6821de6 21 )
tylerjw 6:d770e6821de6 22 {
tylerjw 6:d770e6821de6 23 (*sobj) = new Semaphore(1);
tylerjw 6:d770e6821de6 24
tylerjw 6:d770e6821de6 25 return 1;
tylerjw 6:d770e6821de6 26 }
tylerjw 6:d770e6821de6 27
tylerjw 6:d770e6821de6 28
tylerjw 6:d770e6821de6 29
tylerjw 6:d770e6821de6 30 /*------------------------------------------------------------------------*/
tylerjw 6:d770e6821de6 31 /* Delete a Synchronization Object */
tylerjw 6:d770e6821de6 32 /*------------------------------------------------------------------------*/
tylerjw 6:d770e6821de6 33 /* This function is called in f_mount function to delete a synchronization
tylerjw 6:d770e6821de6 34 / object that created with ff_cre_syncobj function. When a FALSE is
tylerjw 6:d770e6821de6 35 / returned, the f_mount function fails with FR_INT_ERR.
tylerjw 6:d770e6821de6 36 */
tylerjw 6:d770e6821de6 37
tylerjw 6:d770e6821de6 38 bool ff_del_syncobj ( /* 1:Function succeeded, 0:Could not delete due to any error */
tylerjw 6:d770e6821de6 39 _SYNC_t sobj /* Sync object tied to the logical drive to be deleted */
tylerjw 6:d770e6821de6 40 )
tylerjw 6:d770e6821de6 41 {
tylerjw 6:d770e6821de6 42 delete sobj;
tylerjw 6:d770e6821de6 43 return true;
tylerjw 6:d770e6821de6 44 }
tylerjw 6:d770e6821de6 45
tylerjw 6:d770e6821de6 46
tylerjw 6:d770e6821de6 47
tylerjw 6:d770e6821de6 48 /*------------------------------------------------------------------------*/
tylerjw 6:d770e6821de6 49 /* Request Grant to Access the Volume */
tylerjw 6:d770e6821de6 50 /*------------------------------------------------------------------------*/
tylerjw 6:d770e6821de6 51 /* This function is called on entering file functions to lock the volume.
tylerjw 6:d770e6821de6 52 / When a FALSE is returned, the file function fails with FR_TIMEOUT.
tylerjw 6:d770e6821de6 53 */
tylerjw 6:d770e6821de6 54
tylerjw 6:d770e6821de6 55 bool ff_req_grant ( /* TRUE:Got a grant to access the volume, FALSE:Could not get a grant */
tylerjw 6:d770e6821de6 56 _SYNC_t sobj /* Sync object to wait */
tylerjw 6:d770e6821de6 57 )
tylerjw 6:d770e6821de6 58 {
tylerjw 6:d770e6821de6 59 bool ret;
tylerjw 6:d770e6821de6 60
tylerjw 6:d770e6821de6 61 ret = (sobj->wait(_FS_TIMEOUT) > 0);
tylerjw 6:d770e6821de6 62
tylerjw 6:d770e6821de6 63 return ret;
tylerjw 6:d770e6821de6 64 }
tylerjw 6:d770e6821de6 65
tylerjw 6:d770e6821de6 66
tylerjw 6:d770e6821de6 67
tylerjw 6:d770e6821de6 68 /*------------------------------------------------------------------------*/
tylerjw 6:d770e6821de6 69 /* Release Grant to Access the Volume */
tylerjw 6:d770e6821de6 70 /*------------------------------------------------------------------------*/
tylerjw 6:d770e6821de6 71 /* This function is called on leaving file functions to unlock the volume.
tylerjw 6:d770e6821de6 72 */
tylerjw 6:d770e6821de6 73
tylerjw 6:d770e6821de6 74 void ff_rel_grant (
tylerjw 6:d770e6821de6 75 _SYNC_t sobj /* Sync object to be signaled */
tylerjw 6:d770e6821de6 76 )
tylerjw 6:d770e6821de6 77 {
tylerjw 6:d770e6821de6 78 sobj->release();
tylerjw 6:d770e6821de6 79 }
tylerjw 6:d770e6821de6 80
tylerjw 6:d770e6821de6 81 #endif
tylerjw 6:d770e6821de6 82
tylerjw 6:d770e6821de6 83
tylerjw 6:d770e6821de6 84
tylerjw 6:d770e6821de6 85
tylerjw 6:d770e6821de6 86 #if _USE_LFN == 3 /* LFN with a working buffer on the heap */
tylerjw 6:d770e6821de6 87 /*------------------------------------------------------------------------*/
tylerjw 6:d770e6821de6 88 /* Allocate a memory block */
tylerjw 6:d770e6821de6 89 /*------------------------------------------------------------------------*/
tylerjw 6:d770e6821de6 90 /* If a NULL is returned, the file function fails with FR_NOT_ENOUGH_CORE.
tylerjw 6:d770e6821de6 91 */
tylerjw 6:d770e6821de6 92
tylerjw 6:d770e6821de6 93 void* ff_memalloc ( /* Returns pointer to the allocated memory block */
tylerjw 6:d770e6821de6 94 UINT size /* Number of bytes to allocate */
tylerjw 6:d770e6821de6 95 )
tylerjw 6:d770e6821de6 96 {
tylerjw 6:d770e6821de6 97 return malloc(size);
tylerjw 6:d770e6821de6 98 }
tylerjw 6:d770e6821de6 99
tylerjw 6:d770e6821de6 100
tylerjw 6:d770e6821de6 101 /*------------------------------------------------------------------------*/
tylerjw 6:d770e6821de6 102 /* Free a memory block */
tylerjw 6:d770e6821de6 103 /*------------------------------------------------------------------------*/
tylerjw 6:d770e6821de6 104
tylerjw 6:d770e6821de6 105 void ff_memfree (
tylerjw 6:d770e6821de6 106 void* mblock /* Pointer to the memory block to free */
tylerjw 6:d770e6821de6 107 )
tylerjw 6:d770e6821de6 108 {
tylerjw 6:d770e6821de6 109 free(mblock);
tylerjw 6:d770e6821de6 110 }
tylerjw 6:d770e6821de6 111
tylerjw 6:d770e6821de6 112 #endif