|
|
|
Developers Area - DOS API - "C" Example
#include "stdio.h"
#include "stdlib.h"
#include "dos.h"
#include "conio.h"
#include "ctype.h"
#include "memory.h"
#include "string.h"
#define STOP 0
#define ON 1
#define LEFT 2
#define RIGHT 4
#define UP 0x16
#define DOWN 0x32
#define INT 0x61
char buffer[9] ;
int x,ch ;
static void (interrupt far *IntRCI) (void) ; // Pointer to Int61
void main()
{
char far * bufptr ;
int car ;
//char car ;
union REGS inregs,outregs ;
struct SREGS segregs ;
unsigned int value ;
IntRCI = _dos_getvect(INT) ;
if (IntRCI == 0)
{
printf("\nERROR: RCIPLUS not loaded.")
;
printf("\n You must load the RCIPLUS driver
before.") ;
exit(1) ;
}
inregs.h.al = 00 ;
inregs.h.ch = 00 ;
inregs.h.cl = 00 ;
inregs.h.dh = 00 ;
inregs.h.dl = 00 ;
printf("\n\n\n\n\n") ;
printf("* * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * *\n") ;
printf("* D E M O P R O G R A M F O R T E S T T H E
R C I *\n") ;
printf("* ( B Y E A 4 T X ) *\n") ;
printf("* * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * *") ;
while(car != 0x1b)
{
printf("\n\n\t1.- Init(LPT)") ;
printf("\n\t2.- Brake 3.- Left 4.- Right 5.-
Stop") ;
printf("\n\t6.- Up 7.- Down") ;
printf("\n\t8.- Read Azi. Posit.(0-360 Deg)
9.- Read Azi. Posit.(0-255 Dig)");
printf("\n\tA.- Read Elev. Posit.(0-360 Deg)
B.- Read Elev. Posit.(0-255 Dig)");
printf("\n\tC.- Status") ;
printf("\n\tD.- Turn to a Possition
Azimut") ;
printf("\n\tE.- Turn to a Possition
Elevation") ;
printf("\n\t0.- Stop use the
Interface") ;
printf("\n\tEsc.- Quit") ;
printf("\n\t--------------------------------------------------------------\n");
car=getch() ;
switch(car)
{
case '1': // Init LPT
- inregs.h.ah = 00 ;
inregs.h.dh = 0x00 ; // i.e.
ARS.CNF
inregs.h.dl = 0x00 ;
// inregs.h.dh = 0x03 ; // i.e.
Port_Base=0x378
// inregs.h.dl = 0x78 ;
int86x(INT,&inregs,&outregs,&segregs)
;
if(outregs.h.ah==0 &&
outregs.h.al==0)
- printf("Init Lpt
Driver: Ok. ") ;
else
- printf("Init Lpt
Driver: Ko. Verify the
LPT port or there is a
Hardware Problem!")
;
break;
case '2': // Turn On Brake
- inregs.h.ah = 01 ;
inregs.h.dl = 0x00 ;
inregs.h.dh = ON ;
int86x(INT,&inregs,&outregs,&segregs)
;
value=
outregs.h.ah*255+outregs.h.al ;
printf("Return value=
%d",value) ;
break;
case '3': // Turn On Left Rele
- inregs.h.ah = 01 ;
inregs.h.dl = 0x00 ;
inregs.h.dh = LEFT ;
int86x(INT,&inregs,&outregs,&segregs)
;
value=
outregs.h.ah*255+outregs.h.al ;
printf("Return value=
%d",value) ;
break;
case '4': // Turn On Right Rele
- inregs.h.ah = 01 ;
inregs.h.dl = 0x00 ;
inregs.h.dh = RIGHT ;
int86x(INT,&inregs,&outregs,&segregs)
;
value=
outregs.h.ah*255+outregs.h.al ;
printf("Return value=
%d",value) ;
break;
case '5': // Stop Rele (step by step)
- // Azimut
inregs.h.ah = 01 ;
inregs.h.dl = 0x00 ;
inregs.h.dh = STOP ;
int86x(INT,&inregs,&outregs,&segregs)
;
value=
outregs.h.ah*255+outregs.h.al ;
printf("Return value Azimut=
%d",value) ;
// Elevation
inregs.h.ah = 01 ;
inregs.h.dl = 0x01 ;
inregs.h.dh = STOP ;
int86x(INT,&inregs,&outregs,&segregs)
;
value=
outregs.h.ah*255+outregs.h.al ;
printf("\nReturn value
Elevation= %d",value) ;
break;
case '6': // Turn Up Rele
- inregs.h.ah = 01 ;
inregs.h.dl = 0x01 ;
inregs.h.dh = UP ;
int86x(INT,&inregs,&outregs,&segregs)
;
value=
outregs.h.ah*255+outregs.h.al ;
printf("Return value=
%d",value) ;
break;
case '7': // Turn Down Rele
- inregs.h.ah = 01 ;
inregs.h.dl = 0x01 ;
inregs.h.dh = DOWN ;
int86x(INT,&inregs,&outregs,&segregs)
;
value=
outregs.h.ah*255+outregs.h.al ;
printf("Return value=
%d",value) ;
break;
case '8': // Read Antenna Azimuth
Position (Degree)
- inregs.h.ah = 02 ;
inregs.h.al = 00 ; //Degree
inregs.h.dh = 0x01 ; //Number
times
inregs.h.dl = 0x00 ; //Azimuth
int86x(INT,&inregs,&outregs,&segregs)
;
value=
outregs.h.ah*255+outregs.h.al ;
printf("Read value=
%d",value) ;
break;
case 'a': // Read Antenna Elevation
Position (Degree)
case 'A':
- inregs.h.ah = 02 ;
inregs.h.al = 00 ; //Degree
inregs.h.dh = 0x01 ; //Number
times
inregs.h.dl = 0x01 ; //Elevation
int86x(INT,&inregs,&outregs,&segregs)
;
value=
outregs.h.ah*255+outregs.h.al ;
printf("Read value=
%d",value) ;
break;
case '9': // Read Antenna Position
(Digital)
- inregs.h.ah = 02 ;
inregs.h.al = 01 ; //Digital
inregs.h.dh = 0x01 ; //Number
times
inregs.h.dl = 0x00 ; //Azimuth
int86x(INT,&inregs,&outregs,&segregs)
;
value=
outregs.h.ah*255+outregs.h.al ;
printf("Read value=
%d",value) ;
break;
case 'b': // Read Antenna Position
(Digital)
case 'B':
- inregs.h.ah = 02 ;
inregs.h.al = 01 ; //Digital
inregs.h.dh = 0x01 ; //Number
times
inregs.h.dl = 0x01 ; //Elevation
int86x(INT,&inregs,&outregs,&segregs)
;
value=
outregs.h.ah*255+outregs.h.al ;
printf("Read value=
%d",value) ;
break;
case 'c': // RCI Status
case 'C':
- inregs.h.ah = 03 ;
int86x(INT,&inregs,&outregs,&segregs)
;
value=
outregs.h.ah*255+outregs.h.al ;
printf("Return value=
%d",value) ;
break;
case 'd': // Turn Automaticaly to a
Preset Azim
case 'D':
- memcpy(buffer,'\0',sizeof(buffer))
;
x=0 ;
inregs.h.ah = 04 ;
inregs.h.al = 00 ;
inregs.h.dl = 0x00 ; //Azimuth
printf("\nInput the Preset
Value: ") ;
while(isalnum(ch = getche()))
value=atoi(buffer) ;
if(value>=360) value=0 ;
inregs.h.dl=value % 256 ;
inregs.h.dh=value / 255 ;
int86x(INT,&inregs,&outregs,&segregs)
;
value=
outregs.h.ah*255+outregs.h.al ;
printf("\nReturn value=
%d",value) ;
break;
case 'e': // Turn Automaticaly to a
Preset Elev
case 'E':
- memcpy(buffer,'\0',sizeof(buffer))
;
x=0 ;
inregs.h.ah = 04 ;
inregs.h.al = 01 ;
inregs.h.dl = 0x01 ; //Elevation
printf("\nInput the Preset
Value: ") ;
while(isalnum(ch = getche()))
value=atoi(buffer) ;
if(value>=360) value=0 ;
inregs.h.dl=value % 256 ;
inregs.h.dh=value / 255 ;
int86x(INT,&inregs,&outregs,&segregs)
;
value=
outregs.h.ah*255+outregs.h.al ;
printf("\nReturn value=
%d",value) ;
break;
case '0': // STOP the Interface
- inregs.h.ah = 05 ;
int86x(INT,&inregs,&outregs,&segregs)
;
value=
outregs.h.ah*255+outregs.h.al ;
printf("Return value=
%d",value) ;
break;
}
}
}
|
|
|
|