📄 dipattn.cpp
字号:
/*
****************************************************************************************
* Program : DIPATTN.CPP *
* Description : Demo program for digital input function with pattern match *
* Boards Supp. : PCI-1760/1753 *
* APIs used : DRV_DeviceOpen,DRV_DeviceClose, DRV_GetErrorMessage, *
* DRV_EnableEventEx, DRV_CheckEvent, DRV_FDITransfer *
* Revision : 1.00 *
* Date : 7/8/1999 Advantech Co., Ltd. *
****************************************************************************************
*/
#include <windows.h>
#include <windef.h>
#include <stdio.h>
#include <conio.h>
#include "..\..\..\include\driver.h"
/******************************
* Local function declaration *
******************************/
void ErrorHandler(DWORD dwErrCde);
void ErrorStop(long*, DWORD);
void main()
{
DWORD dwErrCde;
ULONG lDevNum;
long lDriverHandle;
USHORT usChan;
USHORT usPattern;
USHORT usEventType;
ULONG retValue = 0L;
USHORT usCardflag;
PT_EnableEventEx tEnableEventEx;
PT_CheckEvent tCheckEvent;
PT_FDITransfer tFDITransfer;
//Step 1: Display hardware and software settings for running this example
printf("Before running this example, please\n");
printf("use the device installation utility to add the device.\n");
//Step 2: Input parameters
printf("\nPlease input parameters:");
printf("\nDevice Number (check the device installation utility): ");
scanf("%d", &lDevNum);
printf("\nCard Flag (to distinguish card 0:PCI-1760, 1:PCI-1753): ");
scanf("%d", &usCardflag);
//masked by yingsong.huang, not used in this function-08/86/02
//printf("\nInput DI port: ");
//scanf("%d", &usChan);
//mask end
printf("\nOnly connect bit 0 pattern is 0x01 for PCI-1760.");
printf("\nOnly connect bit 0 pattern is 0xfe for PCI-1753 input mode.");
printf("\nTarget Pattern (HEX): ");
scanf("%X", &usPattern);
//Step 3: Open device
dwErrCde = DRV_DeviceOpen(lDevNum, &lDriverHandle);
if (dwErrCde != SUCCESS)
{
ErrorHandler(dwErrCde);
printf("Program terminated!\n");
printf("Press any key to exit....");
getch();
exit(1);
}
// Step 4: Enable event extension for pattern match
tEnableEventEx.Pattern.usEventType = ADS_EVT_PATTERNMATCH;
tEnableEventEx.Pattern.usEventEnable = true; // enable event extension
tEnableEventEx.Pattern.usCount = 1; // event count
tEnableEventEx.Pattern.usEnable = 0xff; // enable bit 0 to bit 7
tEnableEventEx.Pattern.usValue = usPattern; // target pattern
dwErrCde = DRV_EnableEventEx(lDriverHandle, &tEnableEventEx);
if (dwErrCde != SUCCESS)
{
ErrorStop(&lDriverHandle, dwErrCde);
return;
}
// Step 5: Check event by DRV_CheckEvent in while loop and exit
// at pattern match or pressing any key
tCheckEvent.EventType = &usEventType;
tCheckEvent.Milliseconds = 300;
printf("\nWaiting the pattern match value %xh.", usPattern);
printf("\nPress any key to exit the waiting loop....");
while(!kbhit())
{
//Step 5.1: Check event type
dwErrCde = DRV_CheckEvent(lDriverHandle, &tCheckEvent);
if( (dwErrCde == SUCCESS) && (usEventType == ADS_EVT_PATTERNMATCH) )
{
if(usCardflag == 0)
{
// Step 5.1.1: Check the event type and returned data
// by DRV_FDITransfer when some event is happened
tFDITransfer.usEventType = ADS_EVT_PATTERNMATCH;
tFDITransfer.ulRetData = &retValue;
dwErrCde = DRV_FDITransfer(lDriverHandle, &tFDITransfer);
if (dwErrCde != SUCCESS)
{
ErrorStop(&lDriverHandle, dwErrCde);
return;
}
printf("\nDesired pattern=%2xh. Matched pattern = %2xh",
usPattern, retValue);
}
else if(usCardflag == 1)
printf("\nDesired pattern=%2xh. Matched pattern = %ld",
usPattern, ++retValue);
}
}
if (kbhit()) getch();
// Step 6: Disable event by DRV_EnableEventEx
tEnableEventEx.Pattern.usEventType = ADS_EVT_PATTERNMATCH;
tEnableEventEx.Pattern.usEventEnable = false; // enable event extension
tEnableEventEx.Pattern.usCount = 1; // event count
tEnableEventEx.Pattern.usEnable = 0xff; // enable bit 0 to bit 7
tEnableEventEx.Pattern.usValue = usPattern; // target pattern
dwErrCde = DRV_EnableEventEx(lDriverHandle, &tEnableEventEx);
if (dwErrCde != SUCCESS)
{
ErrorStop(&lDriverHandle, dwErrCde);
return;
}
// Step 7: Close device
dwErrCde = DRV_DeviceClose(&lDriverHandle);
printf("\nPress any key to exit....");
getch();
}//main
/**********************************************************************
* Function: ErrorHandler
* Show the error message for the corresponding error code
* input: dwErrCde, IN, Error code
* return: none
**********************************************************************/
void ErrorHandler(DWORD dwErrCde)
{
char szErrMsg[180];
DRV_GetErrorMessage(dwErrCde, szErrMsg);
printf("\nError(%d): %s\n", dwErrCde & 0xffff, szErrMsg);
}//ErrorHandler
/**********************************************************************
* Function: ErrorStop
* Release all resource and terminate program if error occurs
* Paramaters: pDrvHandle, IN/OUT, pointer to Driver handle
* dwErrCde, IN, Error code.
* return: none
**********************************************************************/
void ErrorStop(long *pDrvHandle, DWORD dwErrCde)
{
//Error message
ErrorHandler(dwErrCde);
printf("Program terminated!\n");
//Close device
DRV_DeviceClose(pDrvHandle);
printf("Press any key to exit....");
getch();
exit(1);
}//ErrorStop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -