how to write application for 32 com port


 
Thread Tools Search this Thread
Top Forums Programming how to write application for 32 com port
# 1  
Old 07-31-2007
how to write application for 32 com port

Dear Sir,
i m going to use NP5610-16 moxa device for multiport serial communication.
i m using fedora-core 6 o.s.
after installation it will detect serial ports as /dev/ttyr0,/dev/ttyr1...ttyr32.
there are total 32 com ports.
now i want to write application which monitor all serial ports and received data from particular serial ports.
after that it send data on particular port.
its ok i understand this concept.
but i confuse that what programming approach i have to use to monitor multiport serial ports.
i have to fire 32 diff threads for each port or what
tell me how i write application such that it is easy to control all 32 com port
plz help me to sort out this issue
please also guide me that which is the best approach i have to use for this
Regards,
Amit
# 2  
Old 07-31-2007
There are three basic options.

1. Write a single application and run 32 copies of it (this is the same way getty works)

2. Write a single-threaded application and use 'select' to determine which port is ready to read or write from.

3. Write a multi-threaded application and use either a thread per port, or two threads per port (one for reading, one for writing).

I would recommend option 1 as it's the easiest to write and test.

Option 2 is a more portable solution than 3 as you can avoid multithreading race conditions and synchronisation issues.
# 3  
Old 08-01-2007
Quote:
Originally Posted by porter
There are three basic options.

1. Write a single application and run 32 copies of it (this is the same way getty works)

2. Write a single-threaded application and use 'select' to determine which port is ready to read or write from.

3. Write a multi-threaded application and use either a thread per port, or two threads per port (one for reading, one for writing).

I would recommend option 1 as it's the easiest to write and test.

Option 2 is a more portable solution than 3 as you can avoid multithreading race conditions and synchronisation issues.
thx very much for replying me.
now in my application ,
data may come simultaneously in any port.
i mean data may come on more than one ports at a time and as soon as data come i m going to extract the packet and send that packet to another
port.
i think option 3 is better for me. but i m confuse here that if i use
two thread per port then there are 32 ports and i need to fire 64 threads.
is it good solution.
some one tell me that if u use 64 threads then your application become hand
please give me correct direction because its very important to make a correct design before writing the code.
Regards,
Amit
# 4  
Old 08-01-2007
One technique is to use a thread to read and a thread to write, however what consider what is the purpose of a thread to write when it will be idle 99% of the time. You could have a thread per port which still uses a select().

Personally I would do the single select statement and no threads as this is the most portable solution, select() will tell you when each port needs to be read, and you would manage your own buffers. You would hook in a select() for the write mask only when you have data queued to write out.
# 5  
Old 08-06-2007
how to use select() function for 32 com ports

Quote:
Originally Posted by porter
One technique is to use a thread to read and a thread to write, however what consider what is the purpose of a thread to write when it will be idle 99% of the time. You could have a thread per port which still uses a select().

Personally I would do the single select statement and no threads as this is the most portable solution, select() will tell you when each port needs to be read, and you would manage your own buffers. You would hook in a select() for the write mask only when you have data queued to write out.
Dear Sir thx very much for replying me.
can u help me how i can write single select function for all 32 com ports.
i mean if i have single thread and i m use select() for all 32 com port then how i write select function to watch multiple fds.
Regards,
Amit
# 6  
Old 08-06-2007
The technique I normally use is to have a list of structs with a file-descriptor and a bitmask

Code:
struct serial_port
{
     struct serial_port *next
     int fd;
     int flags;
     .....
};

        .....

        fd_set fdr,fdw,fde;
        int n=-1; 
        FD_ZERO(&fdr); FD_ZERO(&fdw); FD_ZERO(&fde);

        struct serial_port *p=list;

        while (p) {        
              if (p->flags & 1) { FD_SET(p->fd,&fdr); n=max(n,p->fd); }
              if (p->flags & 2) { FD_SET(p->fd,&fdw); n=max(n,p->fd); }
              if (p->flags & 4) { FD_SET(p->fd,&fde); n=max(n,p->fd); }
             p=p->next;
        }
...
        n=select(n+1,&fdr,&fdw,&fde,NULL);
...
        p=list;
        
        while (p)
        {
            if ((p->flags & 1)&&FD_ISSET(p->fd,&fdr)) .... do read ...
            if ((p->flags & 2)&&FD_ISSET(p->fd,&fdw)) .... do write ...
            if ((p->flags & 4)&&FD_ISSET(p->fd,&fde)) .... do except ...
            p=p->next;
        }

# 7  
Old 08-10-2007
how i create thread for handling 32 com ports

Quote:
Originally Posted by porter
The technique I normally use is to have a list of structs with a file-descriptor and a bitmask

Code:
struct serial_port
{
     struct serial_port *next
     int fd;
     int flags;
     .....
};

        .....

        fd_set fdr,fdw,fde;
        int n=-1; 
        FD_ZERO(&fdr); FD_ZERO(&fdw); FD_ZERO(&fde);

        struct serial_port *p=list;

        while (p) {        
              if (p->flags & 1) { FD_SET(p->fd,&fdr); n=max(n,p->fd); }
              if (p->flags & 2) { FD_SET(p->fd,&fdw); n=max(n,p->fd); }
              if (p->flags & 4) { FD_SET(p->fd,&fde); n=max(n,p->fd); }
             p=p->next;
        }
...
        n=select(n+1,&fdr,&fdw,&fde,NULL);
...
        p=list;
        
        while (p)
        {
            if ((p->flags & 1)&&FD_ISSET(p->fd,&fdr)) .... do read ...
            if ((p->flags & 2)&&FD_ISSET(p->fd,&fdw)) .... do write ...
            if ((p->flags & 4)&&FD_ISSET(p->fd,&fde)) .... do except ...
            p=p->next;
        }

Dear Sir,
thx very much for guiding me.
i m new in this serial stuff on linux.
now i want to write application using c++ which handle 32 com port simultaneously
using multithreading. i m still confusing about this stuff.
how i create one thread for read and one thread for write for each 32 com port(total 64 threads).
and second issue is that how i syncrhonize theses threads. and
third issue is that if i create 64 threads then application become crash or hand
i read tutorial on net but still confuse.
can u have some sample application for multiport application using multithreading
Regards,
Amit
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Help Generate new port base on the last port but not in used by other application

Hi Expert, Anybody can figure it out on how to generate new port base on my last port let say my last port var1=124 and increment for new port 125,126 but this new two ports need to look at first if this port is not in used by any service, if the port is in used add 1 to new port and if in used... (6 Replies)
Discussion started by: lxdorney
6 Replies

2. UNIX for Advanced & Expert Users

How to write if condition in shell script for application server?

Hi all, I have a code to create folder in application server through shell script and i want to create if conditional based folder folder=$HOME/test/sample/whatever if ; then echo "$folder already exists, not created." else mkdir -p "$folder" > /dev/null 2>&1 ... (7 Replies)
Discussion started by: Boost
7 Replies

3. HP-UX

how to check remote server port listening from application.

Hi, I have an application running on HP-UX, from this application I need to findout if the port number. lets say 7890,7891, 7892 are listening on the remote server running on HP-UX. Is there any way of doing it using "system()" function or any other? I noticed that nmap, netcat are not... (0 Replies)
Discussion started by: einsteinBrain
0 Replies

4. Programming

unable to send read and write serial port

hey frns pls help me out !! i hav a code of c that i have to include in my project. i am using a device (geomeda) that has unix based OS. it also support SIM card for connecting to server . I need to send SMS to user from this device.. below code is not working .. i am unable to send sms and the... (7 Replies)
Discussion started by: yashwantkumar
7 Replies

5. Programming

Write own decryption application

Hi , I need some help as I dont know where to start. I need to create a unix decryption application. The information I have been given is this so far: the specification of the encryption process is: NET 2 Cryptography classes. RijndaelManaged encryption algorithm ... (13 Replies)
Discussion started by: caciing_help
13 Replies

6. Shell Programming and Scripting

command to know the application running of the port

Hi, is there any command to findout that which application is using the particular port. or whether any port is occupied with the specfic process id ? (4 Replies)
Discussion started by: mail2sant
4 Replies

7. Linux

MQ application port 1414

Hi All, I have two MQ (port) 1414 established (going out) $ netstat -an | grep 1414 tcp 0 0 0.0.0.0:1414 0.0.0.0:* LISTEN tcp 0 0 20.76.1.1:32855 142.8.1.3:1414 ESTABLISHED tcp 0 0... (2 Replies)
Discussion started by: itik
2 Replies

8. UNIX for Dummies Questions & Answers

What application is using the port

Hello im using sunos im trying to lock down application that taking my port when Im doing "netstat -in | grep 8080" Is gives me the indication that the port is taken but no indication who is taken the port. How can I find out who is taking my port? Thanks allot (7 Replies)
Discussion started by: umen
7 Replies

9. IP Networking

How can I check what port addresses used the application

Hello Mentors! I am a new here in the furom, i hope somebody can understand my problem. Basically we have an application here called unigraphics and being installed per station and the setup is look like this. 1. installed unigraphics UGNX3 version on every station 2. some are installed in... (1 Reply)
Discussion started by: eykyn17
1 Replies

10. UNIX for Advanced & Expert Users

which port to write my server application?

I want to write a server application that would accept HTTP requests from client. The server would be on a machine that has no connection to the INTERNET. The clients that would be posting their HTTP requests would be doing so through webbrowser .Thus it would be sort of intranet application.... (0 Replies)
Discussion started by: rraajjiibb
0 Replies
Login or Register to Ask a Question