Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Hi monks, I have program that issues commands to device that are attached to COM port and collects the response and then does the pattern matching.Now , i have a command whose response takes some time and that too comes in bits and pieces.I am able to collect that response that i want ,but remaining response keeps on coming even after i completed with that command , when i issue the next commmand the response i get is the leftout response in RX buffer of the previous command. i need to discard the data in the buffer before issuing the next command.How can i do this ? I appreciate your help Thanks, westar.
  • Comment on How to flush the data accumulated in COM port buffer

Replies are listed 'Best First'.
Re: How to flush the data accumulated in COM port buffer
by fizbin (Chaplain) on Mar 18, 2005 at 18:42 UTC
    First off, it's incredibly hard to read your question. Please fix that.

    Secondly, as for your question itself, you seem to be asking "how can I clear out any characters waiting in the input buffer for a particular filehandle". The easiest way to accomplish this is with the Term::ReadKey module:

    use Term::ReadKey; # ... do some stuff to the filehandle COMPORT ... # ... do the command that gives the long response ... # Clear the remaining input while (defined(ReadKey(0.1,COMPORT))) {} # ... do some other command ...
    That code will pull characters until the RX buffer is empty and will wait 0.1 seconds on an empty RX buffer to decide that it's really done. You can use "-1" if you want it to exit as soon as the RX buffer is empty and not wait.

    I do hope that you're using sysread or some similar unbuffered system to deal with serial ports - otherwise, you'll have all sorts of trouble.

    -- @/=map{[/./g]}qw/.h_nJ Xapou cets krht ele_ r_ra/; map{y/X_/\n /;print}map{pop@$_}@/for@/