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

📄 aaa.cpp

📁 winCE下开发的一个驱动源码
💻 CPP
字号:
#include <windows.h>
#include <tchar.h>
#include <smbus.h>
#include "platform.h"
#include "bceddk.h"
#include "gpio.h"
#include "E:\WINCE500\PLATFORM\Db1200\Drivers\Psc_i2s\psc_i2s.h"


#define BUFSIZE 256

WCHAR achBuffer[BUFSIZE];
DWORD dwAAASysIntr;
HANDLE hAAAInterruptEvent;
HANDLE hAAAInterruptThread;


BOOL WINAPI DllEntryPoint(HANDLE hinstDLL, 
                          DWORD dwReason, 
                          LPVOID lpvReserved)
{
    switch(dwReason) {
    case DLL_PROCESS_ATTACH:
        RETAILMSG(1, (TEXT("STRINGS:DLL_PROCESS_ATTACH\n")));
        break;
        
    case DLL_THREAD_ATTACH:
        RETAILMSG(1, (TEXT("STRINGS:DLL_THREAD_ATTACH\n")));
        break;
        
    case DLL_THREAD_DETACH:
        RETAILMSG(1, (TEXT("STRINGS:DLL_THREAD_DETACH\n")));
        break;
        
    case DLL_PROCESS_DETACH:
        RETAILMSG(1, (TEXT("STRINGS:DLL_PROCESS_DETACH\n")));
        break;
        
#ifdef UNDER_CE
    case DLL_PROCESS_EXITING:
        RETAILMSG(1, (TEXT("STRINGS:DLL_PROCESS_EXITING\n")));
        break;
        
    case DLL_SYSTEM_STARTED:
        RETAILMSG(1, (TEXT("STRINGS:DLL_SYSTEM_STARTED\n")));
        break;
#endif
        
    }
    
    return TRUE;
    
}


DWORD ThreadProc(PVOID pArg)
{
    DWORD           dw;
    HANDLE          hPCA9554;
    SMBUS_TRANSFER  smPCA9554;

    hPCA9554 = SMBus_Initialize();

    while (1) {
        dw = WaitForSingleObject(hAAAInterruptEvent, INFINITE);
        switch(dw) {
        case WAIT_OBJECT_0:
            ResetEvent(hAAAInterruptEvent);
            InterruptDone(dwAAASysIntr);
            
            RETAILMSG(1, (TEXT("AAA9554: Internal\r\n")));
            
            smPCA9554.Address = 0x4e;
            smPCA9554.Register = 0;
            smPCA9554.DataSize = 0;
            smPCA9554.Data[0] = 0;
            
            SMBus_WriteData(hPCA9554, &smPCA9554);
            
            smPCA9554.Address = 0x4f;
            smPCA9554.Register = 0;
            smPCA9554.DataSize = 1;
            smPCA9554.Data[0] = 0;
            
            SMBus_ReadData(hPCA9554, &smPCA9554);
            
            RETAILMSG(1, (TEXT("AAA9554: smPCA9554.Data[0] = %x\r\n", smPCA9554.Data[0])));
            break;
            
        }
    }
    return 1;
    
}


DWORD AAA_Init(DWORD dwContext)
{
    DWORD dwRet = 0;
    DWORD dwAAAthreadID;
    int   x = 0;
    
    RETAILMSG(1, (TEXT("MYSTRINGS:AAA_Init\n")));
    
    // 初始化驱动程序
    memset(achBuffer, 0, BUFSIZE * sizeof(WCHAR));
    
    // 返回一个不为零的数
    dwRet = 1;
    
    dwAAASysIntr = InterruptConnect(Internal, 0, HWINTR_GPIO28, 0);
    
    if (SYSINTR_NOP == dwAAASysIntr) {
        RETAILMSG(1, (TEXT("AAA9554: Can't allocate AAA9554 SYSINTR\r\n")));
        goto ErrorReturn;
        
    }
    
    hAAAInterruptEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
    
    if (NULL == hAAAInterruptEvent) {
        RETAILMSG(1, (TEXT("AAA9554: Can't create AAA9554 interrupt event\r\n")));
        goto ErrorReturn;
        
    }
    
    if (!InterruptInitialize(dwAAASysIntr, hAAAInterruptEvent, NULL, 0)) {
        RETAILMSG(1, (TEXT("AAA9554: Call to InterruptInitialize failed\r\n")));
        goto ErrorReturn;
        
    }
    
    hAAAInterruptThread = CreateThread(NULL, 0, ThreadProc, &x, 0, &dwAAAthreadID);
    if (NULL == hAAAInterruptThread) {
        RETAILMSG(1, (TEXT("AAA9554: Call to CreateThread failed\r\n")));
        goto ErrorReturn;
    }
    
    return dwRet;
    
ErrorReturn:
    dwRet = 0;
    return dwRet;
    
}


BOOL AAA_Deinit(DWORD hDeviceContext)
{
    BOOL bRet = TRUE;
    
    RETAILMSG(1, (TEXT("MYSTRINGS:AAA_Deinit\n")));
    
    return bRet;
    
}


DWORD AAA_Open(DWORD hDeviceContext, 
               DWORD AccessCode, 
               DWORD ShareMode)
{
    DWORD dwRet = 0;
    
    RETAILMSG(1, (TEXT("MYSTRINGS:AAA_Open\n")));
    
    // 必须返回一个不为空的句柄
    dwRet = 1;
    return dwRet;
    
}


BOOL AAA_Close(DWORD hOpenContext)
{
    BOOL bRet = TRUE;
    
    RETAILMSG(1, (TEXT("MYSTRINGS:AAA_Close\n")));
    
    return bRet;
    
}


BOOL AAA_IOControl(DWORD hOpenContext,
                   DWORD dwCode,
                   PBYTE pBufIn,
                   DWORD dwLenIn,
                   PBYTE pBufOut,
                   DWORD dwLenOut,
                   PDWORD pdwActualOut)
{
    BOOL bRet = TRUE;
    
    RETAILMSG(1, (TEXT("MYSTRINGS:AAA_IOControl\n")));
    
    return bRet;
    
}


void AAA_PowerDown(DWORD hDeviceContext)
{
    RETAILMSG(1, (TEXT("MYSTRINGS:AAA_PowerDown\n")));
    
}


void AAA_PowerUp(DWORD hDeviceContext)
{
    RETAILMSG(1, (TEXT("MYSTRINGS:AAA_PowerUp\n")));
    
}


DWORD AAA_Read(DWORD hOpenContext,
               LPVOID pBuffer,
               DWORD Count)
{
    DWORD dwRet = 0;
    
    RETAILMSG(1, (TEXT("MYSTRINGS:AAA_Read\n")));
    
    // 确定读取的字节大小读取数据
    DWORD cbBuffer = wcslen(achBuffer);
    dwRet = min(cbBuffer, Count);
    
    wcsncpy((LPWSTR)pBuffer, achBuffer, dwRet);
    
    // 返回实际读取的字节数
    return dwRet;
    
}


DWORD AAA_Seek(DWORD hOpenContext,
               long Amount,
               WORD Type)
{
    DWORD dwRet = 0;
    
    RETAILMSG(1, (TEXT("MYSTRINGS:AAA_Seek\n")));
    
    return dwRet;
    
}


DWORD AAA_Write(DWORD hOpenContext,
                LPCVOID pBuffer,
                DWORD Count)
{
    DWORD dwRet = 0;
    
    RETAILMSG(1, (TEXT("MYSTRINGS:AAA_Write\n")));
    
    // 确定实际要写入字节的大小,写入数据
    dwRet = min(BUFSIZE, Count);
    wcsncpy(achBuffer, (LPWSTR)pBuffer, dwRet);
    
    // 返回实际写入的字节数
    return dwRet;
    
}

⌨️ 快捷键说明

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