123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- /*
- This file is part of UFFS, the Ultra-low-cost Flash File System.
-
- Copyright (C) 2005-2009 Ricky Zheng <ricky_gz_zheng@yahoo.co.nz>
- UFFS is free software; you can redistribute it and/or modify it under
- the GNU Library General Public License as published by the Free Software
- Foundation; either version 2 of the License, or (at your option) any
- later version.
- UFFS is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- or GNU Library General Public License, as applicable, for more details.
-
- You should have received a copy of the GNU General Public License
- and GNU Library General Public License along with UFFS; if not, write
- to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
- As a special exception, if other files instantiate templates or use
- macros or inline functions from this file, or you compile this file
- and link it with other works to produce a work based on this file,
- this file does not by itself cause the resulting work to be covered
- by the GNU General Public License. However the source code for this
- file must still be made available in accordance with section (3) of
- the GNU General Public License v2.
-
- This exception does not invalidate any other reasons why a work based
- on this file might be covered by the GNU General Public License.
- */
- /**
- * \file uffs_os_posix.c
- * \brief Emulation on POSIX host. This is just a dumb implementation, does not really create semaphores.
- * \author Ricky Zheng
- */
- #include "uffs_config.h"
- #include "uffs/uffs_os.h"
- #include "uffs/uffs_public.h"
- //#include <time.h>
- #define PFX "os : "
- int uffs_SemCreate(OSSEM *sem)
- {
- static int count = 0;
- char name [RT_NAME_MAX+1];
- struct rt_mutex *mutex = RT_NULL;
- rt_snprintf(name, sizeof(name), "usem%d", count++);
- mutex = rt_mutex_create(name, RT_IPC_FLAG_FIFO);
- if (mutex != RT_NULL)
- {
- *sem = (OSSEM *)mutex;
- return 0;
- }
- uffs_Perror(UFFS_MSG_SERIOUS, "can't get a semphore");
- return -1;
- }
- int uffs_SemWait(OSSEM sem)
- {
- return rt_mutex_take((struct rt_mutex *)sem, RT_WAITING_FOREVER);
- }
- int uffs_SemSignal(OSSEM sem)
- {
- return rt_mutex_release((struct rt_mutex *)sem);
- }
- int uffs_SemDelete(OSSEM *sem)
- {
- int ret = -1;
-
- if (sem) {
- ret = rt_mutex_delete((struct rt_mutex *)(*sem));
- if (ret == RT_EOK) {
- *sem = 0;
- }
- }
- return ret;
- }
- int uffs_OSGetTaskId(void)
- {
- //TODO: ... return current task ID ...
- return 0;
- }
- unsigned int uffs_GetCurDateTime(void)
- {
- // FIXME: return system time, please modify this for your platform !
- // or just return 0 if you don't care about file time.
- #if 0
- time_t tvalue;
- tvalue = time(NULL);
-
- return (unsigned int)tvalue;
- #endif
- return 0;
- }
- #if CONFIG_USE_SYSTEM_MEMORY_ALLOCATOR > 0
- static void * sys_malloc(struct uffs_DeviceSt *dev, unsigned int size)
- {
- dev = dev;
- uffs_Perror(UFFS_MSG_NORMAL, "system memory alloc %d bytes", size);
- return rt_malloc(size);
- }
- static URET sys_free(struct uffs_DeviceSt *dev, void *p)
- {
- dev = dev;
- rt_free(p);
- return U_SUCC;
- }
- void uffs_MemSetupSystemAllocator(uffs_MemAllocator *allocator)
- {
- allocator->malloc = sys_malloc;
- allocator->free = sys_free;
- }
- #endif
- #if !defined(RT_THREAD)
- /* debug message output throught 'printf' */
- static void output_dbg_msg(const char *msg);
- static struct uffs_DebugMsgOutputSt m_dbg_ops = {
- output_dbg_msg,
- NULL,
- };
- static void output_dbg_msg(const char *msg)
- {
- rt_kprintf("%s", msg);
- }
- void uffs_SetupDebugOutput(void)
- {
- uffs_InitDebugMessageOutput(&m_dbg_ops, UFFS_MSG_NOISY);
- }
- #else
- void uffs_SetupDebugOutput(void)
- {
- }
- #endif
|