⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yaffsfsd.c

📁 Flash文件系统
💻 C
📖 第 1 页 / 共 5 页
字号:
/* * YAFFS: Yet another FFS. A NAND-flash specific file system. * yaffsfsd.c: FSD interface funtions for WinCE. * * Copyright (C) 2002 Trimble Navigation Ltd. * * Created by Charles Manning <charles.manning@trimble.co.nz> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * This program 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 for more details. You should have received a  * copy of the GNU General Public License along with this program;  * if not, write to the Free Software Foundation, Inc.,  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  * * Acknowledgements: *  Various clean-ups and WinCE4 support by Steve Fogle and Lynn Winter * $Id: yaffsfsd.c,v 1.4 2003/01/31 03:30:33 charles Exp $ */#include <windows.h>#include <extfile.h>#include <yaffs_guts.h>#include <ynandif.h>//slf021104b begin#include <diskio.h>//slf021104b end#define MAX_WIN_FILE	200#define YFSD_NAME_LENGTH 128#define YFSD_FULL_PATH_NAME_SIZE 500#define YFSD_DISK_NAME L"Disk"#define YFSD_BOOT_NAME L"Boot"#define PARTITION_START_NUMBER (1280)	// if this is defined the there will be a constant message box raised to display status//#define MSGBOX_DISPLAY	//#define MSGSTATE 1#define MSGSTATE 0//#define DISABLE_BOOT_PARTITION//slf021105a begin// Define DO_PARTITION_TABLE to cause the partition table // information to be retrieved from the block driver.// Can define this in your sources file.//#define DO_PARTITION_TABLE// How many partitions the disk might have.  2 gives // space for the "Disk" and "Boot" partitions.#define MAXPARTITIONS (2)//slf021105a end//unsigned yaffs_traceMask=0xffffffff;unsigned yaffs_traceMask=0;typedef struct{	yaffs_Device dev;	DWORD	hdsk;	DWORD    mgrVolume; // The volume id from the manager issed when we registered it - it is an HVOL	BOOL	isMounted;	BOOL	configured;//	DWORD	guard0[100];//	DWORD	guard1[100];	SHELLFILECHANGEFUNC_t shellFunction;	PWSTR volName;} yfsd_Volume;typedef struct {	yaffs_Object *obj;	DWORD offset;	BOOL isopen;	BOOL dirty;	WCHAR *fullName;	yfsd_Volume *myVolume;	BOOL writePermitted;	BOOL readPermitted;	BOOL shareRead;	BOOL shareWrite;}	yfsd_WinFile;struct yfsd_FoundObjectStruct{  yaffs_Object *obj;  struct yfsd_FoundObjectStruct *next;};typedef struct yfsd_FoundObjectStruct yaffs_FoundObject;typedef struct {	yaffs_Object *dir;	char pattern[YFSD_NAME_LENGTH+1];	yaffs_FoundObject *foundObjects;}	yfsd_WinFind;#define PSEARCH yfsd_WinFind*#define PVOLUME yfsd_Volume*#define PFILE   yfsd_WinFile*#define FSD_API	YFSD#include <fsdmgr.h>//slf021105a begin//static yfsd_Volume disk_volume;//static yfsd_Volume boot_volume;static yfsd_Volume * disk_volumes[MAXPARTITIONS];//slf021105a end;static CRITICAL_SECTION yaffsLock;static CRITICAL_SECTION winFileLock;static int yaffsLockInited = 0;static yfsd_WinFile yfsd_winFile[MAX_WIN_FILE];#if 0static yfsd_SetGuards(void){	int i;	for(i = 0; i < 100; i++)	{		yfsd_volume.guard0[i] = yfsd_volume.guard1[i] = i;	}}static void yfsd_CheckGuards(void){	int i;	int found;	for(i = found = 0; i < 100 && !found; i++)	{			if(yfsd_volume.guard0[i] != i)			{					RETAILMSG (MSGSTATE, (L"YAFFS:: guard 0 %d brocken\r\n",i));					found = 1;			}			if(yfsd_volume.guard1[i] != i)			{					RETAILMSG (MSGSTATE, (L"YAFFS:: guard 0 %d brocken\r\n",i));					found = 1;			}	}}#endif#ifdef MSGBOX_DISPLAYDWORD WINAPI yfsd_MessageThread(LPVOID param){    yaffs_Device *dev = (yaffs_Device *)param;    TCHAR dataBuffer[1000];    Sleep(10000);    // note : if the device gets free'd from under us, we will cause an exception in the loop    while (1)    {        wsprintf(dataBuffer, L"nShortOpCaches %i\r\n"                             L"nErasedBlocks %i\r\n"                             L"allocationBlock %i\r\n"                             L"allocationPage %i\r\n"                             L"garbageCollectionRequired %i\r\n"                             L"nRetiredBlocks %i\r\n"                             L"cacheHits %i\r\n"                             L"eccFixed %i\r\n"                             L"eccUnfixed %i\r\n"                             L"tagsEccFixed %i\r\n"                             L"tagsEccUnfixed %i\r\n",                             dev->nShortOpCaches,                              dev->nErasedBlocks,                             dev->allocationBlock,                             dev->allocationPage,                             dev->garbageCollectionRequired,                             dev->nRetiredBlocks,                             dev->cacheHits,                             dev->eccFixed,                             dev->eccUnfixed,                             dev->tagsEccFixed,                             dev->tagsEccUnfixed);        MessageBox(NULL,                   dataBuffer,                   L"YAFFS PROC INFO",                   MB_OK);        Sleep(1);    }}#endifvoid yfsd_LockWinFiles(void){	//RETAILMSG (MSGSTATE, (L"YAFFS::LockWinfiles\r\n"));	EnterCriticalSection(&winFileLock);}void yfsd_UnlockWinFiles(void){	//RETAILMSG (MSGSTATE, (L"YAFFS::UnlockWinFiles\r\n"));	LeaveCriticalSection(&winFileLock);}int lockwaits;void yfsd_LockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits));	lockwaits++;	EnterCriticalSection(&yaffsLock);	//RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS "));	LeaveCriticalSection(&yaffsLock);	lockwaits--;	//RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){	int i;		RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits));	lockwaits++;	EnterCriticalSection(&yaffsLock);	//RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS "));	LeaveCriticalSection(&yaffsLock);	lockwaits--;	//RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){	int i;		RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits));	lockwaits++;	EnterCriticalSection(&yaffsLock);	//RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS "));	LeaveCriticalSection(&yaffsLock);	lockwaits--;	//RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){	int i;		RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits));	lockwaits++;	EnterCriticalSection(&yaffsLock);	//RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS "));	LeaveCriticalSection(&yaffsLock);	lockwaits--;	//RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){	int i;		RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits));	lockwaits++;	EnterCriticalSection(&yaffsLock);	//RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS "));	LeaveCriticalSection(&yaffsLock);	lockwaits--;	//RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){	int i;		RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits));	lockwaits++;	EnterCriticalSection(&yaffsLock);	//RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS "));	LeaveCriticalSection(&yaffsLock);	lockwaits--;	//RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){	int i;		RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits));	lockwaits++;	EnterCriticalSection(&yaffsLock);	//RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS "));	LeaveCriticalSection(&yaffsLock);	lockwaits--;	//RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){	int i;		RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits));	lockwaits++;	EnterCriticalSection(&yaffsLock);	//RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS "));	LeaveCriticalSection(&yaffsLock);	lockwaits--;	//RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){	int i;		RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits));	lockwaits++;	EnterCriticalSection(&yaffsLock);	//RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS "));	LeaveCriticalSection(&yaffsLock);	lockwaits--;	//RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){	int i;		RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits));	lockwaits++;	EnterCriticalSection(&yaffsLock);	//RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS "));	LeaveCriticalSection(&yaffsLock);	lockwaits--;	//RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){	int i;		RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits));	lockwaits++;	EnterCriticalSection(&yaffsLock);	//RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS "));	LeaveCriticalSection(&yaffsLock);	lockwaits--;	//RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){	int i;		RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits));	lockwaits++;	EnterCriticalSection(&yaffsLock);	//RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS "));	LeaveCriticalSection(&yaffsLock);	lockwaits--;	//RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){	int i;		RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits));	lockwaits++;	EnterCriticalSection(&yaffsLock);	//RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS "));	LeaveCriticalSection(&yaffsLock);	lockwaits--;	//RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){	int i;		RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits));	lockwaits++;	EnterCriticalSection(&yaffsLock);	//RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS "));	LeaveCriticalSection(&yaffsLock);	lockwaits--;	//RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){	int i;		RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits));	lockwaits++;	EnterCriticalSection(&yaffsLock);	//RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS "));	LeaveCriticalSection(&yaffsLock);	lockwaits--;	//RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){	int i;		RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits));	lockwaits++;	EnterCriticalSection(&yaffsLock);	//RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){	//yfsd_CheckGuards();	//RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS "));	LeaveCriticalSection(&yaffsLock);	lockwaits--;	//RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){	int i;	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -