Click here to Skip to main content
Click here to Skip to main content

Port Access

By , 17 Aug 2004
 

Introduction

At first I want to thank Mr. Tomas Franzon as I used his help a lot in this project. This code opens and closes 0x378 port ( printer port ) manually. In XP we have no permission to access external port like Printer. Here we copy a sys file to system32 and use it in the code so we can send and receive data through this port.

Using the code

For using the code you have to copy PortAccess.sys ( exists in source ) to system32\drivers. Then you can run the program.

For sending and receiving data we do this :

#include <conio.h>
#include <math.h>
// 

         // for sending data
         _outp(Port_Address,iByte); 

//

Return Value:

This function returns data output . There is no error return.

Parameters:

Unsigned short Port Number ( defined 0x378 )

Int Output value

         // for receiving data
         iByte=_inp(Port_Address); 

Return Value:

This function returns the byte, word or int from port. There is no error report

Parameters:

Unsigned short Port Number ( defined 0x378 )

When you check a check box the iBitOut value is Set or Reset.

// to set or reset a bit
iBitOut[i]=1-iBitOut[i];
 

When you click output button the Bits are changed to int value to send to port.

 
         // to send value to port

         iByte=0;

         for (i=0;i<=7;i++)

         {

                 iTemp=pow(2,i);

                 nIndex=iTemp*iBitOut[i];

                 iByte=iByte+nIndex;

         }

         _outp(Port_Address,iByte);
 

When you click input button the input value is read and iBitIn[i] becomes set or reset.

 

         // to get data from port 

         iByte=_inp(Port_Address);

         for (i=7;i>=0;i--)

         {

                 nIndex=pow(2,i);

                 if (iByte>=nIndex)

                 {        iByte=iByte-nIndex;

                          iBitIn[i]=1;

                 }

                 else iBitIn[i]=0;

         } 

For checking a check box we use code below :

         // to check a check box

         if (iBitIn[0]==1)
                 CheckDlgButton(hDlg,IDC_CHECKINPUT1,BST_CHECKED);
 

Points of Interest

I always work with peripheral devices. In these cases, communicating in parallel mode is more flexible and easier than the other modes like serial communication. So I am forced to go to this field. You can send and receive int, long, Byte, unsigned short, unsigned char etc as easy as possible.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

asef
Web Developer
Iran (Islamic Republic Of) Iran (Islamic Republic Of)
Member
I live in Iran . I started hardware programming when I was young. I designed and built some ISA cards for attaching to PC.like ocsiloscope and signal generator. Now I am working for a engineering company and Manager of some project.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralMy vote of 4memberMember 870111428 Apr '12 - 22:19 
its helpful!
GeneralRun filememberROVIO5 Oct '09 - 3:47 
Good day
Can you please upload the .exe file for me, and send me the link.
I do not have a clue when it comes to things like source code.
 
Thank you very much.
Regards Riaan Deyzel Laugh | :laugh:
Questionemergency helpmembermechatron19 Apr '08 - 0:39 
Roll eyes | :rolleyes: Roll eyes | :rolleyes: Roll eyes | :rolleyes:
hello asef
i am ahmad kassem a student from Lebanon, and I want to use the parallel port to control a motor in robotic arm.
So I want information about accessing this port in c++ because I don’t know any other language, and I also need to know how to use the inpout32.dll file in c++.
So please help me
Thank you very much
QuestionI have a problem with a parallel port, could you please help me?memberluixilva9 Oct '07 - 11:53 
I have a problem: a program X send an output to the printer, but.... i need this output in a file in another computer. Then I need to "catch" this output trough the parallel port in another computer. I am using a cable DB25M - DB25M connected to the parallel port of both computers (this cable was used with a switch between two printers and worked properly), but.... i just can't do it, i don't know what happen, because i can read properly the ports: data, status and control.
 
I am using a visual C++ program to catch the output from the other computer trough the parallel port. The code i am using is something like this...
 
fin = 0;
count = 0;
data = _inp( dataport );
stat = _inp( statport );
ctrl = _inp( ctrlport );
do
{
ctrl = ctrl & 0x000000ff;
if( ctrl & 0x01 )
{
stat = stat | 0x80; // set the busy port on
retu = _outp( stat );
wait( (clock_t) 5 ); // wait for 5 micro-seconds
data = _inp( dataport );
printf( "Data read: 0x%2x\n", data );
stat = stat | 0x40; // set acknowledge on
retu = _outp( stat );
wait( (clock_t) 5 ); // wait for 5 micro-seconds
stat = stat & 0x7f; // set busy off
retu = _outp( stat );
stat = stat & 0xbf; // set ackn off
retu = _outp( stat );
++count;
}
if( _kbhit() != 0 )
{
c = getch();
if( c == 'c' || c == 'C' )
{
fin = 1;
printf("End of process\n");
}
}
} while( fin != 0 );
 
Could you please help me?
 
Thank you in advance for your attentions.
 
Regards.
QuestionInput Problemmembermirispearl5 Sep '07 - 19:37 
Hi
I'm having the same problem that bhaskar_gupta explained in the thread "Input Probs" on 8 Feb '06. any solution? Smile | :)
 
|r|spearl
Questiona question from lovers_aliadminSean Ewington6 Jun '07 - 8:41 
"hi when i ues your source code thrw this error : Unhandled exception at 0x00435cdb in UserPort.exe: 0xC0000096: Privileged instruction. what i do? plz help me"
- lovers_ali
AnswerRe: a question from lovers_alimemberasef9 Jun '07 - 19:26 
Hi
Go to this link. It works well:
http://www.logix4u.net/inpout32.htm
 
Have fun
Smile | :)
 
MOSTAFA

GeneralPort access projectmemberRupanagudi4 May '07 - 15:25 
Asef
 
Have you tested for yourself the project that you have posted in the site. I am not sure whether _inp and _outp will work properly in Windows XP. I just wanted to confirm whether you have tested it out and whether it works perfectly.
 
I heard that no programming language will be able to directly write and read data from ports in Win XP and that you need low level assembly code embedded in your C code.
 
Thanks
Phaneendra
GeneralRe: Port access projectmemberf227 May '07 - 16:49 
that's why the he said u must copy this file "PortAccess.sys" from the zip in order to run the program. the sys file provide easy calling function like old time when we did in dos platform.
 
from,
-= aLbert =-

GeneralRe: Port access projectmemberasef9 Jun '07 - 19:42 
Hi Sir or Madam
When I posted an article in the site, it means at least I tested it several times. So...
Go to this link:
http://www.logix4u.net/inpout32.htm
 
Becareful
 
Have Fun
 
MOSTAFA

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web03 | 2.6.130523.1 | Last Updated 18 Aug 2004
Article Copyright 2004 by asef
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid