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

📄 candrv.c

📁 三星2440 ARM CAN总线驱动 源代码
💻 C
字号:
/* OEMHexDisplayDrv.c - Intel IXP425 HEX Display source file */

/*
 * Copyright (c) 2001 Intel Corporation, All Rights 
 * Reserved. The information contained herein is proprietary and
 * confidential to Intel Communications Europe. Unauthorised
 * use is STRICTLY FORBIDDEN.
 */


/* includes */
#include "OEMHexDisplayDrv.h"


/* defines */
volatile WORD *v_pHexDisp = NULL;
extern PVOID VirtualAllocCopy(unsigned size,char *str,PVOID pVirtualAddress);


#ifdef BOOTLOADER_BLD
#define IXP425_HEX_SWAP(x) (x)
#else
#define IXP425_HEX_SWAP(x) (WORD)(((x)<< 8) | ((x)>>8))
#endif


#define IXP425_HEX_DISP_WRITE(dispPtr,val) \
	(*((volatile WORD *)(dispPtr)) = IXP425_HEX_SWAP((val)))


/******************************************************************************
*
* OEMHexDispInit - allocates pages in virtual memory space for HEX display 
*
*
* RETURNS: N/A
*******************************************************************************/

void canInit(PVOID Context)
{
    UNREFERENCED_PARAMETER(Context);

	if (v_pHexDisp == NULL) 
	{
		v_pHexDisp = (volatile WORD *) VirtualAllocCopy(sizeof(WORD),
													   (char *)TEXT("HexDisplayDriver: IXDP425_7SEG_BASE_U_VIRTUAL"),
													   (PVOID)IXDP425_7SEG_BASE_U_VIRTUAL);
	}
	DEBUGMSG(1,(TEXT("OEMHexDispInit:v_pHexDisp value: 0x%x."),v_pHexDisp));
}

/******************************************************************************
*
* OEMHexDispDeInit - de-allocates pages in virtual memory space for HEX display
*
*
* RETURNS: N/A
*******************************************************************************/

void OEMHexDispDeInit(DWORD dwContext)
{
    UNREFERENCED_PARAMETER(dwContext);
	if (v_pHexDisp)
	{
		VirtualFree((PVOID)v_pHexDisp,0,MEM_RELEASE);
		v_pHexDisp = NULL;
	}
	DEBUGMSG(1,(TEXT("OEMHexDispDeInit:v_pHexDisp value: 0x%x."),v_pHexDisp));
}

/******************************************************************************
*
* OEMHexDispWrite - writes value which will be displayed on HEX display.
*
*
* RETURNS: N/A
*******************************************************************************/
void canWrite(DWORD value)
{
	
	IXP425_HEX_DISP_WRITE(v_pHexDisp, (WORD)value);
	
}

void canRead(DWORD value)
{
	
	IXP425_HEX_DISP_WRITE(v_pHexDisp, (WORD)value);
	
}

/******************************************************************************
*
* DllEntry - entry point for DLL
*
*
* RETURNS: TRUE as a success.
*******************************************************************************/


BOOL
DllEntry(
   HANDLE hDllHandle,
   DWORD  dwReason,
   LPVOID lpreserved
   )
{
    static UINT uiRefCount = 0;
    BOOL bRc = TRUE;
    HANDLE hProcess = GetCurrentProcess();

    UNREFERENCED_PARAMETER(hDllHandle);
    UNREFERENCED_PARAMETER(lpreserved);

    switch (dwReason) {
        case DLL_PROCESS_ATTACH:
        {
            DEBUGMSG(1, (TEXT("Hex Display loaded by process 0x%lx"),hProcess));
			if (uiRefCount == 0)
            {
                canInit(hProcess);
            }
            uiRefCount++;
        }
        break;

        case DLL_PROCESS_DETACH:
        {
            
			DEBUGMSG(1, (TEXT("Hex Display unloaded by process 0x%lx"),hProcess));
            uiRefCount--;
            if (uiRefCount == 0)
            {
                canDeInit((DWORD)hProcess);
            }
        }
        break;

        default:
            break;
    }

    return bRc;
}

⌨️ 快捷键说明

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