diff options
| author | Yuval Adam <yuv.adm@gmail.com> | 2014-08-08 14:42:07 +0300 |
|---|---|---|
| committer | Yuval Adam <yuv.adm@gmail.com> | 2014-08-08 14:42:07 +0300 |
| commit | a6163888f3c56123b1db313743c6147ba498732c (patch) | |
| tree | ff7d15d991d1d09ba6cbc0cec80924f57445bfdd /third_party/FreeRTOS/Demo/Common/FileSystem/FatFs-0.7e/src/option/syncobj.c | |
| parent | c3e4c9a25c2910d2d66d52215b3406b13d5b23d5 (diff) | |
Add third_party libs
Diffstat (limited to 'third_party/FreeRTOS/Demo/Common/FileSystem/FatFs-0.7e/src/option/syncobj.c')
| -rw-r--r-- | third_party/FreeRTOS/Demo/Common/FileSystem/FatFs-0.7e/src/option/syncobj.c | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/third_party/FreeRTOS/Demo/Common/FileSystem/FatFs-0.7e/src/option/syncobj.c b/third_party/FreeRTOS/Demo/Common/FileSystem/FatFs-0.7e/src/option/syncobj.c new file mode 100644 index 0000000..6d8ad28 --- /dev/null +++ b/third_party/FreeRTOS/Demo/Common/FileSystem/FatFs-0.7e/src/option/syncobj.c @@ -0,0 +1,111 @@ +/*------------------------------------------------------------------------*/
+/* Sample code of OS dependent synchronization object controls */
+/* for FatFs R0.07d (C)ChaN, 2009 */
+/*------------------------------------------------------------------------*/
+
+#include <FreeRTOS.h>
+#include <semphr.h>
+
+#include "../ff.h"
+
+#if _FS_REENTRANT
+
+/*------------------------------------------------------------------------*/
+/* Create a Synchronization Object for a Volume */
+/*------------------------------------------------------------------------*/
+/* This function is called in f_mount function to create a new
+/ synchronization object, such as semaphore and mutex. When a FALSE is
+/ returned, the f_mount function fails with FR_INT_ERR.
+*/
+
+BOOL ff_cre_syncobj ( /* TRUE:Function succeeded, FALSE:Could not create due to any error */
+ BYTE vol, /* Corresponding logical drive being processed */
+ _SYNC_t *sobj /* Pointer to return the created sync object */
+)
+{
+ BOOL ret;
+
+ *sobj = xSemaphoreCreateMutex();
+
+ if( *sobj == NULL )
+ {
+ ret = FALSE;
+ }
+ else
+ {
+ ret = TRUE;
+ }
+
+ return ret;
+}
+
+
+
+/*------------------------------------------------------------------------*/
+/* Delete a Synchronization Object */
+/*------------------------------------------------------------------------*/
+/* This function is called in f_mount function to delete a synchronization
+/ object that created with ff_cre_syncobj function. When a FALSE is
+/ returned, the f_mount function fails with FR_INT_ERR.
+*/
+
+BOOL ff_del_syncobj ( /* TRUE:Function succeeded, FALSE:Could not delete due to any error */
+ _SYNC_t sobj /* Sync object tied to the logical drive to be deleted */
+)
+{
+ BOOL ret;
+
+ if( sobj != NULL )
+ {
+ vQueueDelete( sobj );
+ ret = TRUE;
+ }
+ else
+ {
+ ret = FALSE;
+ }
+
+ return ret;
+}
+
+
+
+/*------------------------------------------------------------------------*/
+/* Request Grant to Access the Volume */
+/*------------------------------------------------------------------------*/
+/* This function is called on entering file functions to lock the volume.
+/ When a FALSE is returned, the file function fails with FR_TIMEOUT.
+*/
+
+BOOL ff_req_grant ( /* TRUE:Got a grant to access the volume, FALSE:Could not get a grant */
+ _SYNC_t sobj /* Sync object to wait */
+)
+{
+ BOOL ret;
+
+ ret = xSemaphoreTake( sobj, _FS_TIMEOUT );
+
+ return ret;
+}
+
+
+
+/*------------------------------------------------------------------------*/
+/* Release Grant to Access the Volume */
+/*------------------------------------------------------------------------*/
+/* This function is called on leaving file functions to unlock the volume.
+*/
+
+void ff_rel_grant (
+ _SYNC_t sobj /* Sync object to be signaled */
+)
+{
+ xSemaphoreGive( sobj );
+}
+
+
+#else
+
+#error This file is not needed in this configuration.
+
+#endif
|
