- What is Device::Modem?
- Who is the author of this work?
- BTW, what is Perl?
- What is an AT command set?
- What is a modem?
- What are the requisites of Device::Modem?
- Is it multi-platform?
- Can I use it for my commercial application?
- Why the [insert_you_preferred_feature_here] does not work?
- Do XModem transfers work?
- XModem sucks. What about ZModem?
- Why I keep getting "can't open device: /dev/xxxxx at .../Modem.pm line 468" errors ?
- Why I get the error "Can't call method "purge_all" on an undefined value at .../Modem.pm line 545" ?
- Can I make voice calls with this modem?
- This module is pretty slow. What can I do?
- Can I make a [insert_your_preferred_number_here] euro donation to you for this fantastic module?
- I think you are a ?#!x$*z!#(!* and your software sucks
This is a Frequently Asked Questions list about
Device::Modem perl extension.
Device::Modem is a perl extension written in pure perl that allows to communicate with modems, or generically with
AT command set compliant devices connected to your computer via a serial port.
Cosimo Streppone (firstname.lastname@example.org), an Italian guy, who works and enjoys writing perl programs and objects. If you want to know more, go to http://www.streppone.it/cosimo/work/perl/
BTW, what is Perl?
If you are asking that, probably you are in the wrong place.
Perl is a wonderful programming language, that cuts development times, helps developer keep mental health, good life-style, doesn't pollute developer's mind, allows complete freedom of style, and (from perl manual), gives you enough rope to hang yourself.
Some starting points:
http://www.perl.com - Reference site for Perl programmers
http://www.perl.org - Perl Mongers home
http://cpan.perl.org - Comprehensive Perl Archive Network
http://www.perlmonks.org - Higher Perl souls
http://use.perl.org - Large Perl community
It is a set of standard commands, also called
Hayes, in which (almost) all commands begin with
AT prefix and they allow to control a modem, router, whatever device. Also cellular phones work with a subset of standard
What the heck are you doing here? http://www.google.com/search?q=Tech+glossary+modem
You must have:
A working computer with a standard RS-232 serial port
An AT-compliant device (a modem will do perfectly here :-)
A working Perl installation
Device::SerialPortmodule installed if you are on some unix platform.
Win32::SerialPortmodule installed if you are on Win32 platform.
Device::Modem works close to the serial port communication layer, which varies on many platforms. It relies on
Win32::SerialPort modules for all low-level communication layer.
It tries to build a platform independent layer above these two low-level modules, so developers don't need to distinguish among different platforms.
It's been reported to work on
Mac OS X,
Yes, it is allowed by its license, that is the same as Perl language. If you are using it in a commercial package, or plan to do so, please inform the author (Cosimo Streppone, email@example.com). Thank you.
This is an open-source software developed in my little home spare time and for my personal interest and amusement. This module has a test suite, but it is not very extensive, so it is possible that some feature X does not work, or it is not implemented yet or I cannot test it.
If you are in this situation, please contact me and provide the following information:
Your operating system version and architecture. Complete output of
perl -Vcommand is good for this.
Your perl version. Again
Device::SerialPortand (if you are using it)
Device::Gsmversion. In case of doubt, send the output of:
perl -MDevice::Modem -le 'print Device::Modem->VERSION'
This is definitely reported to be working by several users, who also contributed patches and tested the feature.
Otherwise, just look at Aaron Mitti's Device::SerialPort::Xmodem CPAN module.
It might seem that XModem and ZModem should be well over dead at this point. But, looks like several old/new devices still support them.
So, ZModem support has been contributed by a user, and will be added to the main release Soon(tm).
First of all, be sure to use Device::Modem version 1.52+.
Probably you don't have the correct permissions to access your modem device (usually /dev/modem, or /dev/ttyS0 on unix and COM1/COM2/... on windows). Or you are trying to use the examples that come with Device::Modem distribution with an older version (Device::Modem <= 1.33).
In this case, you should upgrade to Device::Modem 1.52+.
Why I get the error "Can't call method "purge_all" on an undefined value at .../Modem.pm line 545" ?
Again, upgrade to Device::Modem version 1.52+.
If you get this error, it means that the communication port could not be opened. Most probably you don't have permissions to access your serial port, or you have used a wrong device name (check your device entry in
Since version 1.52,
Device::Modem::connect() will try to automatically reconnect if your port connection shuts down, or the
Win32::SerialPort underlying object is deleted or invalidated.
You should really upgrade to Device::Modem 1.52+.
No. What you can do, is voice call dialing. After the dialing though, you have to speak. Your computer can not do that, unless you have a PBX board, at least not with Device::Modem.
Make sure you are using that latest version. From version 1.30, the main "send-command" / "wait-answer" cycle has been sensibly improved for speed, though you now have to specify a timeout if you want the module to wait an answer if modem is not ready.
Probably this is the better compromise...
Oh, yes! Please feel free to contact firstname.lastname@example.org to decide details about this... :-)Or, if you have nothing wrong with that, go to my Amazon wishlist.
Please contact me, so I can improve my software design, ideas and coding, but only if you explain the reasons of your criticism. Thank you.