Определяет маску необходимую для операций AND/OR/XOR/TEST
m_cValue
Определяет маску необходимую для операций AND/OR/XOR/TEST
m_uTimeOut
Определяет время ожидания для операции WAIT в millis
Подробное описание передаваемых структур для работы и настройки желаемых параметров:
struct EasyDeviceSetup : public ParametersBase
{
// --- Унаследованные поля --int m_nType;
int m_nSizeOf;
// --------------------------char* m_szDeviceName; // Device Name
int m_nDeviceNumber; // Device Number
EasyDeviceSetup()
{
m_nType = EASYDEVICESETUP_TYPE;
m_nSizeOf = sizeof(EasyDeviceSetup);
}
};
m_szDeviceName
Определяет имя устройства
m_nDeviceNumber
Определяет номер устройства 1,2,3,4,… (по умолчанию 0)
struct InterruptEvent : public ParametersBase
{
// --- Унаследованные поля --int m_nType;
int m_nSizeOf;
// --------------------------unsigned m_nIntOf; // Interrupt mode
unsigned m_hWnd; // HWND if(m_hWnd == 0) use m_hEvent;
union // else use m_uMessage;
{
unsigned m_uMessage; // message ID
HANDLE m_hEvent; // handle to Event
};
unsigned m_uLParam; // LPARAM (any 32 bit value)
InterruptEvent()
{
m_nType = INTERRUPTEVENT_TYPE;
m_nSizeOf = sizeof(InterruptEvent);
}
};
m_nIntOf
Определяет режим вызова данного метода, m_nIntOf :
0 – освободить прерывание,
IEASYDRIVER_UNMASK – размаскировать прерывание
IEASYDRIVER_MASK - замаскировать прерывание
IEASYDRIVER_ALLOC - захватить прерывание
m_hWnd
Определяет HWND окна, которому будет послано сообщение в случае возникновения прерывания, если m_hWnd равно 0 то будет срабатывать через m_hEvent
m_uMessage
Определяет значения сообщения, которое будет послано в случае возникновения прерывания
m_hEvent
Определяет Event, который произойдет в случае возникновения прерывания
m_uLParam Определяет модификацию работы методов IEASYDRIVER_UNMASK и IEASYDRIVER_ALLOC, если параметр m_uLParam = IEASYDRIVER_PORT12, то происходит размаскирование прерываний на контроллере шины PCI для портов А и В, если параметр m_uLParam = IEASYDRIVER_PORT1, то происходит размаскирование прерывания на контроллере шины PCI для порта А, и если параметр m_uLParam = IEASYDRIVER_PORT2, то происходит размаскирование прерывания на контроллере шины PCI для порта В.
Возвращаемое значение:
Если метод IO отработал правильно, то возвратится 1. Если произошли ошибки, то возможные коды следующие:
Значение |
Описание |
IEASYDRIVER_ERROR_NO_SUPPORTED_DEVICE |
Не поддерживаемое устройство(Если вызвали Setup с именем другого устройсва) |
IEASYDRIVER_ERROR_NO_REGISTERED_DLL |
Не зарегистрированны DLL необходимые для работы драйвера |
IEASYDRIVER_ERROR_NO_SUPPORTED_VERSION |
Не поддерживаемая версия |
IEASYDRIVER_ERROR_NO_INIT_DEVICE |
Усройство не инициализированно |
IEASYDRIVER_ERROR_INTERFACE |
Не создан интерфейс |
IEASYDRIVER_ERROR_OUT_RANGE |
Выход за допустимые границы, скорее всего ошибка в параметрах |
Описание:
Основной метод позволяет работать с цифровыми портами, при вызове данного метода ему передаетя указатель на структуру данных. Метод определяет по типу параметра необходимые действия и выполняет их, если произошла ошибка выводится код ошибки.
Пример на C++:
В данном примере показан вывод в управляющий регистр второй схемы (А-1,В-1,С-1), значения «4».
IEasyDriver* m_pPCI;
. . .
PortIO* pAdrPIO;
pAdrPIO = new(PortIO);
pAdrPIO->m_wIOOperation = KIOP_OP_OUT;
pAdrPIO->m_uValue = 0x04;
pAdrPIO->m_nPort = 7;
m_pPCI->IO(pAdrPIO);
delete pAdrPIO;
. . .
3.5. Пример использования
Ниже следует пример использования поставляемых средств разработки приложений для C++. Этот пример может быть скомпилирован, например, в среде Microsoft Developer Studio (TM) или Borland C++ Builder как консольное приложение Win32.
Данный пример использует прерывание по порту В. Порт В работает в режиме 1 на ввод, порт В-1,С-1 настраивается на вывод в режиме 0 (для того чтобы можно было создать внешнее прерывание). В порт В-1 записывается информация, в порт С-1 (бит PC2) выводится последовательно 0 потом 1. В порту В возникает прерывание. По этому прерыванию информация считывается из порта и выводится на экран. Потом разрешается прерывание. И все повторяется.
!!!!
Для того чтобы данный пример заработал нужен кабель соединяющий
Порты А,В соответственно с портами А-1,В-1.
Биты порта С и С-1
должны быть соединены так:
Порт С Порт С-1
PC0 не соединены PCO
PC1 соединены PC1
PC2 соединены PC2
PC3 не соединены PC3
PC4 соединены PC4
PC5 соединены PC5
PC6 соединены PC6
PC7 соединены PC7
!!!!
*/
#define Amount 2048 //Количество прерываний которые будут сгенерированны
#include <Windows.h>
#include "IEasyDriver.h"
#include "IFactory.h"
#include "DllClient.h"
#include <iostream.h>
#include <conio.h>
#include "REGKEY\VT_EasyDriver.ri"
int main()
{
DllClient PCIClient;
IFactory* PCIFactory = NULL;
IEasyDriver* m_pPCI = NULL;
EasyDeviceSetup* pAdrEDS = NULL;
PortIO* pAdrPIO = NULL;
InterruptEvent* pAdrIE = NULL;
unsigned i = 0;
unsigned counter = 0;
//Загружаем драйвер устройства (LA48DPCI)
PCIFactory = (IFactory*)PCIClient.LoadRegistered(CompanyNameEASYDRV,
ProductNameEASYDRV_PORT,
VersionNameEASYDRV,
_T("LA48DPCI"));
if(PCIFactory == 0)//Если устройство не загрузилось
{
cout<<"Can not load LA48DPCI"<<endl;
getch();
return 0;
}
//Создаем интерфейс для работы с драйвером
m_pPCI = (IEasyDriver*)PCIFactory->Create(_T("IEasyDriver"), 0);
if(m_pPCI == 0)//Если интерфейс не создался
{
PCIClient.Free();
cout<<"Can not create IEasyDriver"<<endl;
getch();
return 0;
}
//----------------------------------------------------------------HANDLE hIRQEvent;
// Создание Event'а для реакции на прерывание
hIRQEvent = CreateEvent (NULL,FALSE,FALSE,NULL);
//Создание структур для передачи параметров в драйвер
pAdrEDS = new(EasyDeviceSetup);//Применяется для настройки (Setup) //устройства
pAdrPIO = new(PortIO); //Применяется для ввода/вывода
pAdrIE = new(InterruptEvent); //Применяется для работы с прерываниями
if(!pAdrEDS || !pAdrPIO || !pAdrIE)//Если структуры не создались
{
cout << "Not enough memory for working!!! Press any key for terminate!" << endl;
if(pAdrEDS) delete pAdrEDS;
if(pAdrPIO) delete pAdrPIO;
if(pAdrIE) delete pAdrIE;
getch();
return 0;
}
//Setup для платы LA48DPCI
pAdrEDS->m_szDeviceName = "LA48DPCI";//Setup for "LA48DPCI"
pAdrEDS->m_nDeviceNumber = 1; //Инициализируется конкретная плата, //заданная m_nDeviceNumber
if(m_pPCI->IO(pAdrEDS) != 1) //Если setup не прошел
{
if(pAdrEDS) delete pAdrEDS;
if(pAdrPIO) delete pAdrPIO;
if(pAdrIE) delete pAdrIE;
PCIClient.Free();
cout<<"Can not setup LA48DPCI"<<endl;
getch();
return 0;
}
//Настройка портов А-1, В-1, С-1
pAdrPIO->m_wIOOperation = KIOP_OP_OUT;//Порты А-1, В-1, С-1 в режиме 0 //на вывод
pAdrPIO->m_uValue = 0x80;
pAdrPIO->m_nPort = 7; //Управляющий регистр для портов А-1, В-1, //С-1
m_pPCI->IO(pAdrPIO);
pAdrPIO->m_wIOOperation = KIOP_OP_OUT;//Сбрасываем сигналы //(Эмулирующие внешние прерывания)
pAdrPIO->m_uValue = 0;
pAdrPIO->m_nPort = 6;
m_pPCI->IO(pAdrPIO);
//Настройка портов А, В, С
pAdrPIO->m_wIOOperation = KIOP_OP_OUT;
pAdrPIO->m_uValue = 0x9F; //1001 1111 Порт А в режиме 0 ввод, порт
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.