zoukankan      html  css  js  c++  java
  • 【原创】WinCE下流驱动开发流程

    硬件平台:S5PV210

    软件平台:WinCE6.0

    已IICBUS为例,实现流驱动框架,供以后参考使用

    1、创建文件

      IICBUS.cpp

      IICBUS.DEF

      makefile

      sources

    2、IICBUS.DEF文件导出函数接口

    EXPORTS IBS_Init
        IBS_Deinit
        IBS_Open
        IBS_Close
        IBS_Read
        IBS_Write
        IBS_Seek
        IBS_IOControl
        IBS_PowerDown
        IBS_PowerUp
    

     3、source文件

    TARGETNAME=IICBUS
    TARGETTYPE=DYNLINK
    RELEASETYPE=PLATFORM
    DLLENTRY = DllEntry
    DEFFILE = IICBUS.DEF
    
    
    TARGETLIBS=$(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib
    
    INCLUDES=$(INCLUDES); \
            
    SOURCES= \
    	iicbus.cpp	\
    

    4、 IICBUS.cpp文件

    BOOL WINAPI DllEntry(HANDLE hInstDll, DWORD dwReason, LPVOID lpvReserved)
    {
    	switch ( dwReason ) 
    	{
    	case DLL_PROCESS_ATTACH:
    		RETAILMSG(TRUE,(TEXT("******************[+IICBUS DLL_PROCESS_ATTACH]**************\r\n"))); 
    		break;
    	case DLL_PROCESS_DETACH:
    		RETAILMSG(TRUE,(TEXT("******************[-IICBUS DLL_PROCESS_DETACH]**************\r\n"))); 
    		break;
    	}
    	return TRUE;
    }
    
     DWORD IBS_Init(DWORD dwContext)
    {
    	RETAILMSG(TRUE,(TEXT("[+IICBUS_Init: %s]\r\n"), (LPCTSTR)dwContext)); 
    
    	RETAILMSG(TRUE,(TEXT("[-IICBUS_Init]\r\n")));
    
    	return TRUE;
    }
    
    BOOL IBS_Deinit(DWORD dwContext)
    {
    	RETAILMSG(TRUE, (TEXT("[+IICBUS_Deinit]\r\n"))); 	
    	
    		
    	RETAILMSG(TRUE,(TEXT("[-VSP_Deinit]\r\n")));
    	return TRUE;
    }
    
    BOOL IBS_Open( DWORD dwData, DWORD dwAccess, DWORD dwShareMode)
    {	
    	RETAILMSG(TRUE,(TEXT("[+IICBUS_Open]\r\n"))); 
    	  
    	RETAILMSG(TRUE,(TEXT("[-IICBUS_Open]\r\n")));
    	
    	return TRUE;
    }
    
    
    BOOL IBS_Close(DWORD dwHandle)
    {
                    RETAILMSG(TRUE,(TEXT("[+IICBUS_Close]\r\n")));
    
    	
    	RETAILMSG(TRUE,(TEXT("[-IICBUS_Close]\r\n")));
    
    	return TRUE;
    }
    
    
    BOOL IBS_IOControl(
    				   DWORD dwHandle,
    				   DWORD dwIoControlCode,
    				   PBYTE pBufIn,
    				   DWORD dwBufInSize,
    				   PBYTE pBufOut,
    				   DWORD dwBufOutSize,
    				   PDWORD pBytesReturned
    				   )
    { 
    	switch(dwIoControlCode)
    	{
                     。。。。。
                  。。。。。
    	}
    
    	return TRUE;
    }
    
    
    DWORD IBS_Read(DWORD dwHandle, LPVOID pBuffer, DWORD dwNumBytes)
    {
    	RETAILMSG(TRUE,(TEXT("[+IICBUS_Read]\r\n")));
    
    	RETAILMSG(TRUE,(TEXT("[-IICBUS_Read]\r\n")));
    	
    	return 0;
    }
    
    DWORD IBS_Write(DWORD dwHandle, LPCVOID pBuffer, DWORD dwNumBytes)
    {
    	RETAILMSG(TRUE,(TEXT("[+IICBUS_Write]\r\n")));
    
    	RETAILMSG(TRUE,(TEXT("[-IICBUS_Write]\r\n")));
    	return 0;
    }
    
    
    DWORD IBS_Seek(DWORD dwHandle, long lDistance, DWORD dwMoveMethod)
    {
    	return FALSE;
    }
    
    void IBS_PowerUp(void)
    {
    	return;
    }
    
    void IBS_PowerDown(void)
    {
    	return;
    }
    

     4、修改platform.bib文件

    IF BSP_NOIICBUS !
    IICBUS.dll			$(_FLATRELEASEDIR)\IICBUS.dll           NK SHK  
    ENDIF BSP_NOIICBUS !
    

     5、修改platform.reg文件

    IF BSP_NOIICBUS !
    [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\IICBUS]
    	"DLL" = "IICBUS.DLL"
    	"Prefix" = "IBS"
    	"Index" = dword:1
    	"Order" = dword:0
    ENDIF BSP_NOIICBUS !
    

    注意:Prefix不能超过3个字符!而且必须跟驱动文件里的前缀一致!

     以上完成流驱动的架构,具体的实现功能可以根据需求来做。

    6、应用程序调用

    	HANDLE hIICBUS;
    
    	hIICBUS = CreateFile(_T("IBS1:"),
    						GENERIC_READ|GENERIC_WRITE,
    						FILE_SHARE_READ|FILE_SHARE_WRITE,
    						NULL,
    						OPEN_EXISTING,
    						0,
    						0);
    
    	if (INVALID_HANDLE_VALUE == hIICBUS)
    	{
    		MessageBox(_T("打开IICBUS:失败!"));
    		return;
    	}
    
    	if(!DeviceIoControl(hIICBUS,
    					CHANGE_CH1, 
    					NULL, 0, 
    					NULL, 0,
    					NULL, NULL))
    	{
    		MessageBox(_T("CH1切换失败!"));
    		return;
    	}
    
    	CloseHandle(hIICBUS);
    
  • 相关阅读:
    MySQL SQL语言学习
    02-MySQL执行计划详解(EXPLAIN)
    linux下删除oracle11g单实例的方法
    01. Oracle 实例恢复
    替代变量与SQL*Plus环境设置
    9. Oracle 归档日志
    8. Oracle 联机重做日志文件(ONLINE LOG FILE)
    7. Oracle 控制文件(CONTROLFILE)
    6. Oracle 回滚(ROLLBACK)和撤销(UNDO)
    5. Oracle 表空间与数据文件
  • 原文地址:https://www.cnblogs.com/hao507/p/2440935.html
Copyright © 2011-2022 走看看