예제 #1
0
BOOL PCMCIA_Get_WD_handle(HANDLE *phWD)
{
    WD_VERSION ver;

    *phWD = WD_Open();
    if (*phWD==INVALID_HANDLE_VALUE) 
    {
        printf("Failed opening " WD_PROD_NAME " device\n");
        return FALSE;
    }

    BZERO(ver);
    WD_Version(*phWD,&ver);
    if (ver.dwVer<WD_VER) 
    {
        printf("Incorrect " WD_PROD_NAME " version\n");
        WD_Close (*phWD);
        *phWD = INVALID_HANDLE_VALUE;
        return FALSE;
    }

    return TRUE;
}
예제 #2
0
// Function: LPT_Open()
//   Register an ISA card to enable working with it.
//   The handle returned from this function is used by most of the functions in this file.
// Parameters:
//   phLPT [out] returns the handle to the opened card.
// Return Value:
//   TRUE if the card was opened successfully. FALSE if there were any errors.
BOOL LPT_Open (LPT_HANDLE *phLPT)
{
    LPT_HANDLE hLPT = (LPT_HANDLE)malloc(sizeof(LPT_STRUCT));

    WD_VERSION ver;
    DWORD dwStatus;

    *phLPT = NULL;
    LPT_ErrorString[0] = '\0';
    if (!hLPT)
    {
        sprintf(LPT_ErrorString, "Failed allocating memory\n");
        return FALSE;
    }
    BZERO(*hLPT);

    dwStatus = LPT_RegisterWinDriver();
    if (dwStatus)
    {
        sprintf(LPT_ErrorString, "Failed registering WinDriver license\n");
        goto Exit;
    }

    hLPT->hWD = WD_Open();

    // Verify that the handle is valid and that the version number is correct
    if (hLPT->hWD==INVALID_HANDLE_VALUE)
    {
        sprintf(LPT_ErrorString, "Failed opening WinDriver device\n");
        goto Exit;
    }

    BZERO(ver);
    WD_Version(hLPT->hWD,&ver);
    if (ver.dwVer<WD_VER)
    {
        sprintf(LPT_ErrorString, "Incorrect WinDriver version. Expected %d.%02d, got %ld.%02ld\n",
             WD_VER/100, WD_VER, ver.dwVer/100, ver.dwVer);
        goto Exit;
    }

    LPT_SetCardElements(hLPT);
    hLPT->cardReg.fCheckLockOnly = FALSE;
    dwStatus = WD_CardRegister(hLPT->hWD, &hLPT->cardReg);
    if (dwStatus)
    {
        sprintf(LPT_ErrorString, "Failed locking device. Status 0x%lx - %s\n",
            dwStatus, Stat2Str(dwStatus));
        goto Exit;
    }

    BZERO (hLPT->IntA);
    hLPT->IntA.Int.hInterrupt = hLPT->cardReg.Card.Item[LPT_IntA].I.Int.hInterrupt;
    hLPT->IntA.Int.dwOptions = hLPT->cardReg.Card.Item[LPT_IntA].I.Int.dwOptions;

    // LPT_Open() was successful
    *phLPT = hLPT;
    return TRUE;

Exit:
    // An error occured during the execution of LPT_Open()
    if (hLPT->cardReg.hCard) 
        WD_CardUnregister(hLPT->hWD, &hLPT->cardReg);
    if (hLPT->hWD!=INVALID_HANDLE_VALUE)
        WD_Close(hLPT->hWD);
    free (hLPT);
    return FALSE;
}