📄 diint.cpp
字号:
/*
****************************************************************************************
* Program : DIINT.CPP (For PCI-1733 only) *
* Description : Demo program for digital input function with interrupt event *
* Boards Supp. : *
* APIs used : DRV_DeviceOpen,DRV_DeviceClose, DRV_GetErrorMessage, *
* DRV_EnableEvent, DRV_CheckEvent *
* Revision : 1.00 *
* Date : 11/2/2003 Advantech Co., Ltd. *
****************************************************************************************
*/
#include <windows.h>
#include <windef.h>
#include <stdio.h>
#include <conio.h>
#include "..\..\..\..\include\driver.h"
#define MAX_DEVICES 100
/******************************
* Local function declaration *
******************************/
void ErrorHandler(DWORD dwErrCde);
void ErrorStop(long*, DWORD);
void main()
{
DWORD dwErrCde;
DWORD dwEventCount[4] = {0,0,0,0};
ULONG lDevNum;
long lDriverHandle;
int i;
BOOL bPrint;
DWORD dwStartTime,dwCurrentTime;
USHORT usEventType;
PT_EnableEvent EventSetting;
PT_CheckEvent ptCheckEvent;
short gnNumOfDevices;
short nOutEntries;
DEVLIST DeviceList[MAX_DEVICES ];
//Step 1: Display hardware and software settings for running this example
printf("---------------Demo the Digital Input with Interrupt Event for PCI-1733----------\n");
printf("Before running this example, please\n");
printf("use the device installation utility to add the device.\n");
// Add type of PC Laboratory Card
dwErrCde = DRV_DeviceGetList(&DeviceList[0], MAX_DEVICES, &nOutEntries);
// Return the number of devices which you install in the system using
// Device Installation
dwErrCde = DRV_DeviceGetNumOfList(&gnNumOfDevices);
printf("This is the installed device list:\n");
for (i = 0; i < gnNumOfDevices; i++)
{
printf(" %3.3d %s\n",DeviceList[i].dwDeviceNum,DeviceList[i].szDeviceName);
}
//Step 2: Input parameters
printf("\nPlease input parameters:");
printf("\nDevice Number (check the device installation utility): ");
scanf("%d", &lDevNum);
//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 DI with interrupt by DRV_EnableEvent
EventSetting.EventType = ADS_EVT_INTERRUPT_IDI0; // event type: DI with interrupt
EventSetting.Enabled = true; // event DI with interrupt
EventSetting.Count = 1; // each interrupt generates an event
dwErrCde = DRV_EnableEvent( lDriverHandle, &EventSetting );
if (dwErrCde != SUCCESS)
{
ErrorHandler(dwErrCde);
printf("Program terminated!\n");
printf("Press any key to exit....");
getch();
exit(1);
}
EventSetting.EventType = ADS_EVT_INTERRUPT_IDI1; // event type: DI with interrupt
EventSetting.Enabled = true; // event DI with interrupt
EventSetting.Count = 1; // each interrupt generates an event
dwErrCde = DRV_EnableEvent( lDriverHandle, &EventSetting );
if (dwErrCde != SUCCESS)
{
ErrorHandler(dwErrCde);
printf("Program terminated!\n");
printf("Press any key to exit....");
getch();
exit(1);
}
EventSetting.EventType = ADS_EVT_INTERRUPT_IDI16; // event type: DI with interrupt
EventSetting.Enabled = true; // event DI with interrupt
EventSetting.Count = 1; // each interrupt generates an event
dwErrCde = DRV_EnableEvent( lDriverHandle, &EventSetting );
if (dwErrCde != SUCCESS)
{
ErrorHandler(dwErrCde);
printf("Program terminated!\n");
printf("Press any key to exit....");
getch();
exit(1);
}
EventSetting.EventType = ADS_EVT_INTERRUPT_IDI17; // event type: DI with interrupt
EventSetting.Enabled = true; // event DI with interrupt
EventSetting.Count = 1; // each interrupt generates an event
dwErrCde = DRV_EnableEvent( lDriverHandle, &EventSetting );
if (dwErrCde != SUCCESS)
{
ErrorHandler(dwErrCde);
printf("Program terminated!\n");
printf("Press any key to exit....");
getch();
exit(1);
}
// Step 5: Check event by DRV_CheckEvent in while loop, exit at pressing
// any key. If DRV_CheckEvent returns successful, increases
// dwEventCount
ptCheckEvent.EventType = &usEventType;
ptCheckEvent.Milliseconds = 300;
bPrint=false;
dwStartTime=GetTickCount();
printf("\nWaiting DI interrupt signal.\n");
printf("Press any key to exit the waiting loop....\n");
while (!kbhit())
{
dwErrCde = DRV_CheckEvent( lDriverHandle, &ptCheckEvent );
//Check function calling successful
if (dwErrCde == SUCCESS)
{
//Check desired event generation
if(usEventType == ADS_EVT_INTERRUPT_IDI0)
{
dwEventCount[0]++;
bPrint=true;
}
if(usEventType == ADS_EVT_INTERRUPT_IDI1)
{
dwEventCount[1]++;
bPrint=true;
}
if(usEventType == ADS_EVT_INTERRUPT_IDI16)
{
dwEventCount[2]++;
bPrint=true;
}
if(usEventType == ADS_EVT_INTERRUPT_IDI17)
{
dwEventCount[3]++;
bPrint=true;
}
if(bPrint && (GetTickCount()-dwStartTime>100))
{
printf("Event Count: IDIO = %lu; IDI1 = %lu; IDI16 = %lu; IDI17 = %lu; \n",
dwEventCount[0], dwEventCount[1],dwEventCount[2],dwEventCount[3]);
bPrint=false;
dwStartTime=GetTickCount();
}
}
}
if (kbhit()) getch();
// Step 7: Disable event by DRV_EnableEvent
EventSetting.EventType = ADS_EVT_INTERRUPT_IDI0; // event type: DI with interrupt
EventSetting.Enabled = false; // event DI with interrupt
EventSetting.Count = 1; // each interrupt generates an event
dwErrCde = DRV_EnableEvent( lDriverHandle, &EventSetting );
if (dwErrCde != SUCCESS)
{
ErrorHandler(dwErrCde);
printf("Program terminated!\n");
printf("Press any key to exit....");
getch();
exit(1);
}
EventSetting.EventType = ADS_EVT_INTERRUPT_IDI1; // event type: DI with interrupt
EventSetting.Enabled = false; // event DI with interrupt
EventSetting.Count = 1; // each interrupt generates an event
dwErrCde = DRV_EnableEvent( lDriverHandle, &EventSetting );
if (dwErrCde != SUCCESS)
{
ErrorHandler(dwErrCde);
printf("Program terminated!\n");
printf("Press any key to exit....");
getch();
exit(1);
}
EventSetting.EventType = ADS_EVT_INTERRUPT_IDI16; // event type: DI with interrupt
EventSetting.Enabled = false; // event DI with interrupt
EventSetting.Count = 1; // each interrupt generates an event
dwErrCde = DRV_EnableEvent( lDriverHandle, &EventSetting );
if (dwErrCde != SUCCESS)
{
ErrorHandler(dwErrCde);
printf("Program terminated!\n");
printf("Press any key to exit....");
getch();
exit(1);
}
EventSetting.EventType = ADS_EVT_INTERRUPT_IDI17; // event type: DI with interrupt
EventSetting.Enabled = false; // event DI with interrupt
EventSetting.Count = 1; // each interrupt generates an event
dwErrCde = DRV_EnableEvent( lDriverHandle, &EventSetting );
if (dwErrCde != SUCCESS)
{
ErrorHandler(dwErrCde);
printf("Program terminated!\n");
printf("Press any key to exit....");
getch();
exit(1);
}
// Step 8: Close device
dwErrCde = DRV_DeviceClose(&lDriverHandle);
if (dwErrCde != SUCCESS)
{
ErrorHandler(dwErrCde);
printf("Program terminated!\n");
printf("Press any key to exit....");
getch();
exit(1);
}
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);
exit(1);
}//ErrorStop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -