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

📄 dskmanager.c

📁 The combined demo is dedicated for S1C33L05, so DMT33L05 should be used to load and run the demo. F
💻 C
字号:
//--------------------------------------------------------------------------------- 
//
//      Copyright (C) SEIKO EPSON CORP. 2004 
//
//      GROUP					: SEE LSI
//      FILE                    : dskmanager.c
//      MODULE                  : disk manage app
//      Function description    : application 
//      Revision history        :                                                                                               
//                                Date            userName        	Description
//                                2004/06/7       David.Ji		      	start
//
//      Notes                   : 
//
//---------------------------------------------------------------------------------
//---------------------------------------------------------------------------------
// Include files (#include)
//---------------------------------------------------------------------------------
#include "ros33.h"
#include "sysGUI.h"
#include "comFS.h"

//---------------------------------------------------------------------------------
// Marco definition
//---------------------------------------------------------------------------------
#define IDC_BTN1     100
#define IDC_BTN2     110
#define IDC_BTN3     120
#define IDC_BTN4     130
#define	IDC_PROGBAR  140



typedef struct t_DskInfo
{
	unsigned int 	ulTotalBytes;
	unsigned int 	ulFreeBytes;
	float			fFreePer;
	unsigned char	ubStatus;
}T_DISKINFO;
typedef T_DISKINFO* pT_DISKINFO;

T_MODULE T_WORD fnDSKM_GetDiskInfo(T_DISKINFO*);
T_MODULE T_VOID fnDSKM_ShowDiskInfo(T_GUI_HWND, T_DISKINFO*);

/******************************************************************
 * FUNCTION: DskManagerWinProc(
 *
 * PURPOSE:
 *		disk manager win proc
 *
 * PARAMETERS
 *    Input:
 *    Output:
 *    InOut:
 *
 * Return value:
 *
 * Reentrant : No
*****************************************************************/
T_WORD DskManagerWinProc(T_GUI_HWND hWnd, T_WORD message, T_GUI_WPARAM wParam, T_GUI_LPARAM lParam)
{
	T_MODULE T_GUI_HWND hChildWnd1, hChildWnd2, hChildWnd3, hChildWnd4, 
						hChildWnd5, hChildWnd6, hChildWnd7;
	
	T_MODULE T_DISKINFO stDiskInfo;
	
	T_MODULE T_UBYTE ubFmtStep = FMT_STAGE1;
	T_MODULE T_UBYTE ubSelDsk;				
    
    switch (message) {
		case MSG_CREATE:
		{
			hChildWnd1 = fnGUI_CreateWindow (CTRL_BUTTON,
                                        "OK",
                                        WS_CHILD
                                        | STY_BTN_DEFPUSHBUTTON
                                        | WS_VISIBLE,
                                        IDC_BTN1,
                                        80, 10, 60, 20, hWnd, 0);

            hChildWnd2 = fnGUI_CreateWindow (CTRL_BUTTON,
                                        "Exit",
                                        WS_CHILD
                                        | STY_BTN_PUSHBUTTON
                                        | WS_VISIBLE,
                                        IDC_BTN2,
                                        80, 40, 60, 20, hWnd, 0);
			
			hChildWnd3 = fnGUI_CreateWindow (CTRL_BUTTON,
                                        "Format",
                                        WS_CHILD
                                        | STY_BTN_PUSHBUTTON
                                        | WS_VISIBLE,
                                        IDC_BTN3,
                                        80, 70, 60, 20, hWnd, 0);
		
			hChildWnd4 = fnGUI_CreateWindow (CTRL_BUTTON,
                                        "Ram disk",
                                        WS_CHILD | STY_BTN_AUTORADIOBUTTON
                                        | WS_VISIBLE | WS_GROUP,
                                        IDC_BTN4,
                                        5, 15, 80, 15, hWnd, 0);
            hChildWnd5 = fnGUI_CreateWindow (CTRL_BUTTON,
                                        "Smt disk",
                                        WS_CHILD | STY_BTN_AUTORADIOBUTTON
                                        | WS_VISIBLE,
                                        IDC_BTN4 + 1,
                                        5, 45, 80, 15, hWnd, 0);
            hChildWnd6 = fnGUI_CreateWindow (CTRL_BUTTON,
                                        "Mcp disk",
                                        WS_CHILD | STY_BTN_AUTORADIOBUTTON
                                        | WS_VISIBLE,
                                        IDC_BTN4 + 2,
                                        5, 75, 80, 15, hWnd, 0);
            switch(g_StgUseDrv)
            {
            case DRV_RAM:
            	fnGUI_SendMessage (hChildWnd4, MSG_BTN_SETCHECK,  STA_BTN_CHECKED, 0);
            break;
            
            case DRV_SMT:
            	fnGUI_SendMessage (hChildWnd5, MSG_BTN_SETCHECK,  STA_BTN_CHECKED, 0);
            break;
            
			case DRV_MCP:
			case DRV_ADV:
            	fnGUI_SendMessage (hChildWnd6, MSG_BTN_SETCHECK,  STA_BTN_CHECKED, 0);
        	}
                        
            hChildWnd7 = fnGUI_CreateWindow (CTRL_PROGBAR, 
                              "", 
                              WS_VISIBLE | STY_PB_NOTIFY, 
                              IDC_PROGBAR, 
                              5, 170, 140, 20, hWnd, 0);
            fnGUI_SendMessage (hChildWnd7, MSG_PB_SETRANGE , 0, 180);
            fnGUI_SendMessage (hChildWnd7, MSG_PB_SETSTEP , 10, 0);
            
			ubSelDsk = g_StgUseDrv;

   			if(fnDSKM_GetDiskInfo(&stDiskInfo) != FS_SUCCESS)
   			{
   				fnGUI_SendMessage (hChildWnd1, MSG_ENABLE, 0, 0);
   				fnGUI_SendMessage (hChildWnd3, MSG_ENABLE, 0, 0);
   				fnGUI_SendMessage (hChildWnd4, MSG_ENABLE, 0, 0);
   				fnGUI_SendMessage (hChildWnd5, MSG_ENABLE, 0, 0);
   				fnGUI_SendMessage (hChildWnd6, MSG_ENABLE, 0, 0);
   			}
   			fnDSKM_ShowDiskInfo (hWnd, &stDiskInfo);
   			fnGUI_InvalidateRect (hWnd, NULL, FALSE);
        }
                                        
    	break;
    	
    	case MSG_PAINT:
    	{
 	       fnDSKM_ShowDiskInfo(hWnd, &stDiskInfo);
		}
		break;
    	
        case MSG_COMMAND:
        {	
        	T_WORD id   = LOHWORD(wParam);
            T_WORD code = HIHWORD(wParam);
            switch(id)
            {
            	case IDC_BTN1:
            		if(ComFS_SelDsk(ubSelDsk) == FS_SUCCESS){

						fnDSKM_GetDiskInfo(&stDiskInfo);
						fnGUI_InvalidateRect (hWnd, NULL, FALSE);
            		}
            		else{
            			if(fnGUI_MessageBox (hWnd,
                    			"Disk open error,format disk?", "Disk Manager",
                    			MB_YESNO | MB_ICONQUESTION | MB_ALIGNCENTER)== IDYES){

                    		fnGUI_SendMessage (hChildWnd7, MSG_PB_SETPOS, 0, 0);	
            				fnGUI_SetTimer (hWnd, 10, 20);
                    		ubFmtStep = FMT_STAGE1;
                    		ComFS_Format(ubSelDsk, ubFmtStep);
                    	}
            		}
            	break;
            	
            	case IDC_BTN2:
            		 fnGUI_PostMessage (hWnd, MSG_CLOSE, 0, 0);
            	break;
            	
            	case IDC_BTN3:		//formate buttion click
            		if(code == SIG_BTN_CLICKED){
            			if(fnGUI_MessageBox (hWnd,
                    			"All data will be lost?", "Disk Manager",
                    			MB_YESNO | MB_ICONQUESTION | MB_ALIGNCENTER) == IDYES)
                    	{
                    		fnGUI_SendMessage (hChildWnd7, MSG_PB_SETPOS, 0, 0);	
            				fnGUI_SetTimer (hWnd, 10, 20);
            				ubFmtStep = FMT_STAGE1;
            				ComFS_Format(ubSelDsk, ubFmtStep);
            			}
            		}
		        break;
		        
		        case IDC_BTN4:
		        	if(code == SIG_BTN_SETFOCUS){
		        		ubSelDsk = DRV_RAM;
		        	}
		        	break;
		        	
		        case IDC_BTN4+1:
		        	if(code == SIG_BTN_SETFOCUS){
		        		ubSelDsk = DRV_SMT;
		        	}
		        	break;
		        	
		        case IDC_BTN4+2:
		        	if(code == SIG_BTN_SETFOCUS){
		        		ubSelDsk = DRV_MCP;
		        	}
		        	break;	
		        	
		        case IDC_PROGBAR:		//progress bar step
                	if(code == SIG_PB_REACHMAX)
                	{
                		fnGUI_KillTimer (hWnd, 10);
                		ubFmtStep = FMT_STAGE1;
                		fnGUI_MessageBox (hWnd,
                    			"Disk format complete", "Disk Manager",
                    			MB_OK | MB_ICONINFORMATION | MB_ALIGNCENTER);
                    	fnDSKM_GetDiskInfo(&stDiskInfo);
                    	g_StgUseDrv = ubSelDsk;
                    	fnGUI_InvalidateRect (hWnd, NULL, FALSE);
                    }
                break;
            }
        }
        
        break;
        
        case MSG_TIMER:
        		ubFmtStep ++;
        		if(ubFmtStep > FMT_MAXSTAGE){
        			fnGUI_SendMessage (hChildWnd7, MSG_PB_STEPIT, 0, 0);
        			break;
        		}	
        		
        		if(ComFS_Format(ubSelDsk, ubFmtStep) != SMT_E_SUCCESS)
        		{
              		fnGUI_KillTimer (hWnd, 10);
              		ubFmtStep = FMT_STAGE1;
              		fnGUI_MessageBox (hWnd,
                   			"Disk format error", "Disk Manager",
                   			MB_OK | MB_ICONASTERISK | MB_ALIGNCENTER);
                   	fnGUI_SendMessage (hChildWnd7, MSG_PB_SETPOS, 0, 0);
        		}
        		else{
	        		fnGUI_SendMessage (hChildWnd7, MSG_PB_STEPIT, 0, 0);
	        	}
		break;
			
        case MSG_CLOSE:
        		fnGUI_DestroyMainWindow (hChildWnd1 );
        		fnGUI_DestroyMainWindow (hChildWnd2 );
        		fnGUI_DestroyMainWindow (hChildWnd3 );
        		fnGUI_DestroyMainWindow (hChildWnd4 );
        		fnGUI_DestroyMainWindow (hChildWnd5 );
        		fnGUI_DestroyMainWindow (hChildWnd6 );
        		fnGUI_DestroyMainWindow (hChildWnd7 );
        		fnGUI_DestroyMainWindow (hWnd );
        break;
    }

    return fnGUI_DefaultMainWinProc(hWnd, message, wParam, lParam);
}

/******************************************************************
 * FUNCTION: GetDiskInfo(
 *
 * PURPOSE:
 *		Get disk info
 *
 * PARAMETERS
 *    Input:
 *    Output:
 *    InOut:
 *
 * Return value:
 *
 * Reentrant : No
*****************************************************************/
T_MODULE T_WORD fnDSKM_GetDiskInfo(T_DISKINFO *pDiskInfo)
{
	T_WORD RetVal;
	T_UWORD ulFree, ulTotal;
	
	struct diskfree_t	stDiskFree;
	
	if(ComFS_GetDiskFree(&stDiskFree) != FS_SUCCESS){
		pDiskInfo->ubStatus = 0;
		return FS_FAILED;
	}
	
	ulFree = stDiskFree.avail_clusters \
				* stDiskFree.sectors_per_cluster \
			 	* stDiskFree.bytes_per_sector;
			 	
	ulTotal = stDiskFree.total_clusters \
				 * stDiskFree.sectors_per_cluster \
				 * stDiskFree.bytes_per_sector;			 	
		
	pDiskInfo->ulFreeBytes = ulFree;
				 
	pDiskInfo->ulTotalBytes = ulTotal;
				 
	pDiskInfo->fFreePer = ((T_FLOAT)ulFree/(T_FLOAT)ulTotal)*360;
	
	pDiskInfo->ubStatus = 1;
	
	return FS_SUCCESS;
	
}

/******************************************************************
 * FUNCTION: GetDiskInfo(
 *
 * PURPOSE:
 *		Get disk info
 *
 * PARAMETERS
 *    Input:
 *    Output:
 *    InOut:
 *
 * Return value:
 *
 * Reentrant : No
*****************************************************************/
T_MODULE T_VOID fnDSKM_ShowDiskInfo(T_GUI_HWND hWnd, T_DISKINFO* pDiskInfo)
{
	T_BYTE buffer [16];
	
	T_GUI_HDC hdc;

	T_UWORD total = pDiskInfo->ulTotalBytes;
	T_UWORD free = pDiskInfo->ulFreeBytes;
	T_UWORD per = (T_UWORD)pDiskInfo->fFreePer;
	T_UWORD used;
	
	used = total - free;
	
	hdc = fnGUI_GetClientDC(hWnd);
	
	if(pDiskInfo->ubStatus)
	{
        // info disk Free
        fnGUI_SetPenColor(hdc, COLOR_RED);
		fnGUI_Ellipse(hdc,40,128,29,29,0,360,TRUE);
		fnGUI_DrawRoundRect(hdc,85,105,8,8,0,0,TRUE);
		fnGUI_TextOut (hdc, 100, 100, "free");
		sprintf(buffer, "%d b",free);
		fnGUI_TextOut (hdc, 80, 115, "           ");
		fnGUI_TextOut (hdc, 80, 115, buffer);
        
        // info disk used			
		fnGUI_SetPenColor(hdc, COLOR_BLUE);
		if((T_UWORD)per != 360)
			fnGUI_Ellipse(hdc,40,128,29,29,0,-(360-per),TRUE);
		fnGUI_DrawRoundRect(hdc,85,135,8,8,0,0,TRUE);
		fnGUI_TextOut (hdc, 100, 130, "used");
		sprintf(buffer, "%d b",used);
		fnGUI_TextOut (hdc, 80, 145, "           ");
		fnGUI_TextOut (hdc, 80, 145, buffer);
	}
	else
	{
		fnGUI_SetPenColor(hdc, COLOR_DARKGRAY);
		fnGUI_Ellipse(hdc,40,128,29,29,0,360,TRUE);
		fnGUI_DrawRoundRect(hdc,85,105,8,8,0,0,TRUE);
		
		fnGUI_TextOut (hdc, 80, 115, "Error!");
		fnGUI_TextOut (hdc, 80, 130, "USB");
		fnGUI_TextOut (hdc, 80, 140, "Connected!");

	}
	
	fnGUI_ReleaseDC(hdc);
}

⌨️ 快捷键说明

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