code:
#include <dos.h>
#include <stdio.h>
long *ad;
typedef union
{
unsigned char c[6];
unsigned short int i[3];
}
IA;
int RWH(unsigned short type, IA &ia, unsigned short *v) //Прототип драйвера
{
switch (type){
case 0x8000: // Первый вызов драйвера
return 0;
case 0x1000: // Последний вызов драйвера
return 0;
case 0x2000: // AI RWH & AO RWH инициализация
// Можно оставить код пустым или реализовать какие-либо алгоритмы
// например, инициализации платы УСО
return 0;
case 0x3000: // DI RWH & DO RWH Инициализация
// Можно оставить код пустым или реализовать какие-либо алгоритмы
// например, инициализации платы УСО
return 0;
case 0x4000: // AO RWH Обработка Аналогов - Выходы
// Считали адрес ia - в соответсвии с настройками послали в устройство значение v
return 0;
case 0x5000: // AI RWH Обработка Аналогов - Входы
// Считали адрес ia - в соответсвии с настройками считали из устройства значение и присвоили его в v
return 0;
case 0x6000: // DO RWH Обработка Дискретов - Выходы
// Считали адрес ia - в соответсвии с настройками послали в устройство значение v
return 0;
case 0x7000: // DI RWH Обработка Дискретов - Входы
// Считали адрес ia - в соответсвии с настройками послали в устройство значение v
return 0;
case 0xa000: // INPUT VOID_RWH - посылка значений в базу каналов
// управляя адресом ia посылаем новые значения в атрибуты каналов
return 0;
case 0xb000: // OUPUT VOID_RWH - чтение атрибутов из базы каналов
// управляя адресом ia считываем значения атрибутов каналов
return 0;
}
return 0;
}
int main (void)
{
union REGS inr;
ad=(long*)MK_FP(0,0x04f0); // Set call address
*ad=(long)RWH; // Driver procedures
inr.x.ax=0x3100; // Exit to DOS
inr.x.dx=800; // Normal finishing
intdos(&inr,&inr); // of the resident code
return 0;
}