fs_x_embos.c
上传用户:yj_qqy
上传日期:2017-01-28
资源大小:2911k
文件大小:7k
源码类别:

uCOS

开发平台:

C/C++

  1. /*
  2. **********************************************************************
  3. *                          Micrium, Inc.
  4. *                      949 Crestview Circle
  5. *                     Weston,  FL 33327-1848
  6. *
  7. *                            uC/FS
  8. *
  9. *             (c) Copyright 2001 - 2003, Micrium, Inc.
  10. *                      All rights reserved.
  11. *
  12. ***********************************************************************
  13. ----------------------------------------------------------------------
  14. File        : fs_x_embos.c
  15. Purpose     : embOS OS Layer for the file system
  16. ----------------------------------------------------------------------
  17. Known problems or limitations with current version
  18. ----------------------------------------------------------------------
  19. None.
  20. ---------------------------END-OF-HEADER------------------------------
  21. */
  22. /*********************************************************************
  23. *
  24. *             #include Section
  25. *
  26. **********************************************************************
  27. */
  28. #include "fs_port.h"
  29. #include "fs_dev.h"
  30. #include "fs_api.h"
  31. #include "fs_os.h"
  32. #include "fs_conf.h"
  33. #if (FS_OS_EMBOS)
  34. #if (FS_OS_TIME_SUPPORT==1)
  35. #include <time.h>
  36. #endif
  37. #include "rtos.h"
  38. /*********************************************************************
  39. *
  40. *             Local Variables        
  41. *
  42. **********************************************************************
  43. */
  44. static OS_RSEMA _FS_fh_sema;
  45. static OS_RSEMA _FS_fop_sema;
  46. static OS_RSEMA _FS_mem_sema;
  47. static OS_RSEMA _FS_dop_sema;
  48. #if FS_POSIX_DIR_SUPPORT
  49. static OS_RSEMA _FS_dirh_sema;
  50. static OS_RSEMA _FS_dirop_sema;
  51. #endif  /* FS_POSIX_DIR_SUPPORT */
  52. /*********************************************************************
  53. *
  54. *             Global functions section
  55. *
  56. **********************************************************************
  57. */
  58. /*********************************************************************
  59. *
  60. *             FS_X_OS_LockFileHandle
  61. *
  62.   Lock global table _FS_filehandle (fs_info.c).
  63. */
  64. void FS_X_OS_LockFileHandle(void) {
  65.   OS_Use(&_FS_fh_sema);
  66. }
  67. /*********************************************************************
  68. *
  69. *             FS_X_OS_UnlockFileHandle
  70. *
  71.   Unlock global table _FS_filehandle (fs_conf.c).
  72. */
  73. void FS_X_OS_UnlockFileHandle(void) {
  74.   OS_Unuse(&_FS_fh_sema);
  75. }
  76. /*********************************************************************
  77. *
  78. *             FS_X_OS_LockFileOp
  79. *
  80.   The filesystem does allow unlimited number of file access 
  81.   operations at the same time. It is not allowed to access
  82.   a file during an operation to it is pending. Because different
  83.   fp's may access the same file, an implementation has to check
  84.   fp->fileid_lo, fp->fileid_hi and fp->fileid_ex, if it wants
  85.   to allow multiple file access operations at the same time.
  86.   This implementation does allow only one file access
  87.   operation at the same time.
  88. */
  89. void FS_X_OS_LockFileOp(FS_FILE *fp) {
  90.   OS_Use(&_FS_fop_sema);
  91. }
  92. /*********************************************************************
  93. *
  94. *             FS_X_OS_UnlockFileOp
  95. *
  96.   Please see FS_X_OS_LockFileOp.
  97. */
  98. void FS_X_OS_UnlockFileOp(FS_FILE *fp) {
  99.   OS_Unuse(&_FS_fop_sema);
  100. }
  101. /*********************************************************************
  102. *
  103. *             FS_X_OS_LockMem
  104. *
  105.   Lock global table _FS_memblock (fat_misc.c).
  106. */
  107. void FS_X_OS_LockMem(void) {
  108.   OS_Use(&_FS_mem_sema);
  109. }
  110. /*********************************************************************
  111. *
  112. *             FS_X_OS_UnlockMem
  113. *
  114.     Unlock global table _FS_memblock (fat_misc.c).
  115. */
  116. void FS_X_OS_UnlockMem(void) {
  117.   OS_Unuse(&_FS_mem_sema);
  118. }
  119. /*********************************************************************
  120. *
  121. *             FS_X_OS_LockDeviceOp
  122. *
  123.   The filesystem does allow unlimited number of device access 
  124.   operations at the same time. It is not allowed to access
  125.   the same driver and unit during an operation to it is already
  126.   pending. 
  127.    
  128.   This implementation does allow only one device access
  129.   operation at the same time.
  130. */
  131. void FS_X_OS_LockDeviceOp(const FS__device_type *driver, FS_u32 id) {
  132.   OS_Use(&_FS_dop_sema);
  133. }
  134. /*********************************************************************
  135. *
  136. *             FS_X_OS_UnlockDeviceOp
  137. *
  138.     Please see FS_X_OS_LockDeviceOp.
  139. */
  140. void FS_X_OS_UnlockDeviceOp(const FS__device_type *driver, FS_u32 id) {
  141.   OS_Unuse(&_FS_dop_sema);
  142. }
  143. #if FS_POSIX_DIR_SUPPORT
  144. /*********************************************************************
  145. *
  146. *             FS_X_OS_LockDirHandle
  147. *
  148.   Lock global table _FS_dirhandle (api_dir.c).
  149. */
  150. void FS_X_OS_LockDirHandle(void) {
  151.   OS_Use(&_FS_dirh_sema);
  152. }
  153. /*********************************************************************
  154. *
  155. *             FS_X_OS_UnlockDirHandle
  156. *
  157.   Unlock global table _FS_dirhandle (api_dir.c).
  158. */
  159. void FS_X_OS_UnlockDirHandle(void) {
  160.   OS_Unuse(&_FS_dirh_sema);
  161. }
  162. /*********************************************************************
  163. *
  164. *             FS_X_OS_LockDirOp
  165. *
  166.   The filesystem does allow unlimited number of directory access 
  167.   operations at the same time. It is not allowed to access
  168.   a directory during an operation to it is pending. Because different
  169.   dirp's may access the same directory, an implementation has to check
  170.   dirp->dirid_lo, dirp->dirid_hi and dirp->dirid_ex, if it wants
  171.   to allow multiple directory access operations at the same time.
  172.   This implementation does allow only one directory access
  173.   operation at the same time.
  174. */
  175. void FS_X_OS_LockDirOp(FS_DIR *dirp) {
  176.   OS_Use(&_FS_dirop_sema);
  177. }
  178. /*********************************************************************
  179. *
  180. *             FS_X_OS_UnlockDirOp
  181. *
  182.   Please see FS_X_OS_LockDirOp.
  183. */
  184. void FS_X_OS_UnlockDirOp(FS_DIR *dirp) {
  185.   OS_Unuse(&_FS_dirop_sema);
  186. }
  187. #endif  /* FS_POSIX_DIR_SUPPORT */
  188. /*********************************************************************
  189. *
  190. *             FS_X_OS_GetDate
  191. */
  192. FS_u16 FS_X_OS_GetDate(void) {
  193.   FS_u16 fdate;
  194. #if FS_OS_TIME_SUPPORT
  195.   time_t t;
  196.   struct tm *ltime;
  197.   time(&t);
  198.   ltime = localtime(&t);
  199.   fdate = ltime->tm_mday;
  200.   fdate += ((FS_u16) (ltime->tm_mon+1) << 5);
  201.   fdate += ((FS_u16) (ltime->tm_year-80) << 9);
  202. #else
  203.   fdate = 1;
  204.   fdate += ((FS_u16) 1 << 5);
  205.   fdate += ((FS_u16) 0 << 9);
  206. #endif /* FS_OS_TIME_SUPPORT */
  207.   return fdate;
  208. }
  209. /*********************************************************************
  210. *
  211. *             FS_X_OS_GetTime
  212. */
  213. FS_u16 FS_X_OS_GetTime(void) {
  214.   FS_u16 ftime;
  215. #if FS_OS_TIME_SUPPORT
  216.   time_t t;
  217.   struct tm *ltime;
  218.   time(&t);
  219.   ltime = localtime(&t);
  220.   ftime = ltime->tm_sec/2;
  221.   ftime += ((FS_u16) ltime->tm_min << 5);
  222.   ftime += ((FS_u16) ltime->tm_hour << 11);
  223. #else
  224.   ftime = 0;
  225.   ftime += ((FS_u16) 0 << 5);
  226.   ftime += ((FS_u16) 0 << 11);
  227. #endif /* FS_OS_TIME_SUPPORT */
  228.   return ftime;
  229. }
  230. /*********************************************************************
  231. *
  232. *             FS_X_OS_init
  233. */
  234. int FS_X_OS_Init(void) {
  235.   OS_CREATERSEMA(&_FS_fh_sema);
  236.   OS_CREATERSEMA(&_FS_fop_sema);
  237.   OS_CREATERSEMA(&_FS_mem_sema);
  238.   OS_CREATERSEMA(&_FS_dop_sema);
  239. #if FS_POSIX_DIR_SUPPORT
  240.   OS_CREATERSEMA(&_FS_dirh_sema);
  241.   OS_CREATERSEMA(&_FS_dirop_sema);
  242. #endif  /* FS_POSIX_DIR_SUPPORT */  
  243.   return 0;
  244. }
  245. /*********************************************************************
  246. *
  247. *             FS_X_OS_Exit
  248. */
  249. int FS_X_OS_Exit(void) {
  250.   return 0;
  251. }
  252. #endif /* FS_OS_EMBOS */