[En-Nut-Discussion] PPP/AHDLC logic problems...
Brett Abbott
Brett.Abbott at digital-telemetry.com
Sun Apr 17 01:31:57 CEST 2005
re: Closing PPP in a managed way....
>> There seems to be same fix for exiting loop. But other problems
remains there that I was talking about. I am little worried about the
fact that sometimes if I do HDLC_SETIFNET with value 0, it will reboot
whole system.
I have not found this to occur anymore (but only once I worked out why I
kept rebooting). Take care you havent issued the _close function if you
intend to use the uart as _close (ppp) also closes the uart. If you
then send anything to the device (pointer=0), you will reboot. This is
a nasty in nutos, fprintf to a null pointer or closed file will bounce
the baby.
If you issue ClosePPP you cant write AT commands (or anyhting to the device) without causing a reboot! (writing to closed uart device)
Additionally: The openPPP opens both the uart and the device driver as a single step - perhaps they should be separated?
Please see code snippets below showing steps I use to shutdown and then restart, any feedback appreciated.
Cheers
Brett
void StopPPP(char StreamNum)
{
if(pppcom!=-1)
{
_ioctl(pppcom, HDLC_SETIFNET, 0);
NutSleep(2000);
}
}
void ClosePPP(char StreamNum)
{
if(pppcom!=-1)
{
_close(pppcom);
NutSleep(2000);
pppcom=-1;
myStream_fd=-1; // We have closed the stream - special case for ppp
//AvrUsartSetDTR1(1); //or the function you use to hang up the modem
}
}
void OpenMyPPP(char StreamNum)
{
int uart_fileno;
u_long long_ctl;
pppcom = _open(myDeviceOpenString, _O_RDWR | _O_BINARY);
uart_fileno=pppcom;
myStream_fd=uart_fileno;
long_ctl = mq_StreamConfig[StreamNum].RXTimeout;
_ioctl(uart_fileno, UART_SETREADTIMEOUT, &long_ctl);
long_ctl = mq_StreamConfig[StreamNum].Speed;
_ioctl(uart_fileno, UART_SETSPEED, &long_ctl);
long_ctl = mq_StreamConfig[StreamNum].WordLength;
_ioctl(uart_fileno, UART_SETDATABITS, &long_ctl);
NutSleep(200);
}
.... Using PPP then decide to stop./...
// Ensure the stream did disconnect before retrying
StopPPP(StreamNum); // Stops PPP but does not close the uart
DisconnectStream(StreamNum); // This uses chat to issue +++ (1 second pause) then ATH<cr>
ClosePPP(StreamNum);
...
OpenMyPPP()
....
-----------------------------------------------------------------
Brett Abbott, Managing Director, Digital Telemetry Limited
Email: Brett.Abbott at digital-telemetry.com
PO Box 24 036 Manners Street, Wellington, New Zealand
Phone +64 (4) 5666-860 Mobile +64 (21) 656-144
------------------- Commercial in confidence --------------------
More information about the En-Nut-Discussion
mailing list