Minicom/Modem Questions From A Perl Programmer

Hal Vaughan hal at thresholddigital.com
Sat Dec 17 17:19:45 UTC 2005


On Saturday 17 December 2005 12:07 pm, Adam Lackorzynski wrote:
> On Sat Dec 17, 2005 at 11:22:57 -0500, Hal Vaughan wrote:
> > On Saturday 17 December 2005 10:53 am, Adam Lackorzynski wrote:
> > > Hi,
> > >
> > > On Wed Dec 14, 2005 at 18:05:25 -0500, Hal Vaughan wrote:
> > > > Any answers, suggestions, or help will be greatly appreciated.  If I
> > > > knew C, I'd just rip out the routine m_setparms and set it up as a
> > > > stand alone program, but it would also help to understand what is
> > > > going on so I can do, in Perl, everything it does.
> > >
> > > Hmm, isn't 'stty' what you're looking for?
> >
> > That hadn't come up in my searches.  I remember another program showed up
> > that didn't do half that (can't remember it now, I'd have to dig through
> > notes).
> >
> > According to the man page, it just might do what I need.
> >
> > As I go through the Minicom code, though, I still find a few things in it
> > where I'm not sure what it is doing, and I'd like to do the same thing. 
> > For example, I've found CTRL-A then X from Minicom tends to reset the
> > modem from just about anything.  I found the code it uses:
> >
> > void modemreset()
> > {
> > 	WIN *w;
> >
> > 	if (P_MRESET[0] == '\0') return;
> >
> > 	w = mc_tell(_("Resetting Modem"));
> > 	mputs(P_MRESET, 0);
> > 	sleep(1);
> > 	wclose(w, 1);
> > }
> >
> > As I understand it, this is writing to the modem, but I can't find a
> > definition of P_MRESET anywhere.  So what is being written to the modem? 
> > Is it just a reset string like ATZ or the init string?
>
> P_MRESET is the string from the configuration. Grep for mreset in
> rwconf.c to get the default string.

I got this (grep is aliased to show lines and ignore case):

[hal at wizard:src]$ grep P_MRESET *.c
config.c:651:  wprintf(w, "%s %.48s\n", reset_string, P_MRESET);
dial.c:216:  if (P_MRESET[0] == '\0') return;
dial.c:219:  mputs(P_MRESET, 0);

So I loaded rwconf.c and found this line:

  { "^M~ATZ^M~",	PUBLIC,   "mreset" }

Is that what you mean?  Is the "P_" prefix something used in C for identifying 
or something?

It does help, since I've been leaving out pauses and not preceding with a CR, 
which could make a difference.  It'd be frustrating to find out that is all, 
but I am *very* weak in this area, so I'm not surprised that it could be 
something so obvious.

One related question: In a reset routine, I tried sending the following 
commands:

ATZ
AT&F
AT ...(init string)...

and I found whenever I included the AT&F I ran into trouble with garbage 
appearing whenever I connected to another system.  The last time I ever had 
to worry about modem configuration was on an Apple //e, with an AppleCat (oh, 
those WERE the days!).  I remember whenever anything went wrong, the thing to 
do was AT&F to get the factory defaults, then send in all your init strings 
to change the settings to what you wanted.  (Since then, when I had dialup, 
it was an easy ISP connection without the need for config tweaking.)

Is there some problem with AT&F (Yes, I know it resets defaults, but shouldn't 
those allow for reading data from another system)?

Thanks again!

Hal



More information about the minicom-devel mailing list