Store AT* strings and termios config directly within dialup_device struct.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39580 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -39,12 +39,13 @@ enum dialup_state {
|
|||||||
|
|
||||||
struct dialup_device : net_device {
|
struct dialup_device : net_device {
|
||||||
int fd;
|
int fd;
|
||||||
|
struct termios line_config;
|
||||||
dialup_state state;
|
dialup_state state;
|
||||||
char* init_string;
|
char init_string[64];
|
||||||
char* dial_string;
|
char dial_string[64];
|
||||||
char* escape_string;
|
char escape_string[8];
|
||||||
bigtime_t escape_silence;
|
bigtime_t escape_silence;
|
||||||
char* hangup_string;
|
char hangup_string[16];
|
||||||
};
|
};
|
||||||
|
|
||||||
net_buffer_module_info* gBufferModule;
|
net_buffer_module_info* gBufferModule;
|
||||||
@@ -74,7 +75,7 @@ dialup_init(const char* name, net_device** _device)
|
|||||||
|
|
||||||
strcpy(device->name, name);
|
strcpy(device->name, name);
|
||||||
device->flags = IFF_POINTOPOINT;
|
device->flags = IFF_POINTOPOINT;
|
||||||
device->type = IFT_PPP;
|
device->type = IFT_PPP; // this device handle RFC 1331 frame format only
|
||||||
device->mtu = 1502;
|
device->mtu = 1502;
|
||||||
device->media = 0;
|
device->media = 0;
|
||||||
device->header_length = 8; // HDLC_HEADER_LENGTH;
|
device->header_length = 8; // HDLC_HEADER_LENGTH;
|
||||||
@@ -82,11 +83,12 @@ dialup_init(const char* name, net_device** _device)
|
|||||||
device->state = DOWN;
|
device->state = DOWN;
|
||||||
|
|
||||||
// default AT strings
|
// default AT strings
|
||||||
device->init_string = strdup("ATZ");
|
strncpy(device->init_string, "ATZ", sizeof(device->init_string));
|
||||||
device->dial_string = strdup("ATDT");
|
strncpy(device->dial_string, "ATDT", sizeof(device->dial_string));
|
||||||
device->escape_string = strdup("+++");
|
strncpy(device->hangup_string, "ATH0", sizeof(device->hangup_string));
|
||||||
device->escape_silence = 1000000;
|
|
||||||
device->hangup_string = strdup("ATH0");
|
strncpy(device->escape_string, "+++", sizeof(device->escape_string));
|
||||||
|
device->escape_silence = 1000000;
|
||||||
|
|
||||||
*_device = device;
|
*_device = device;
|
||||||
return B_OK;
|
return B_OK;
|
||||||
@@ -97,15 +99,9 @@ status_t
|
|||||||
dialup_uninit(net_device* _device)
|
dialup_uninit(net_device* _device)
|
||||||
{
|
{
|
||||||
dialup_device* device = (dialup_device*)_device;
|
dialup_device* device = (dialup_device*)_device;
|
||||||
free(device->init_string);
|
|
||||||
free(device->dial_string);
|
|
||||||
free(device->escape_string);
|
|
||||||
free(device->hangup_string);
|
|
||||||
|
|
||||||
delete device;
|
delete device;
|
||||||
|
|
||||||
put_module(NET_BUFFER_MODULE_NAME);
|
put_module(NET_BUFFER_MODULE_NAME);
|
||||||
|
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -120,21 +116,22 @@ dialup_up(net_device* _device)
|
|||||||
return errno;
|
return errno;
|
||||||
|
|
||||||
// init port
|
// init port
|
||||||
struct termios options;
|
if (ioctl(device->fd, TCGETA, &device->line_config,
|
||||||
if (ioctl(device->fd, TCGETA, &options, sizeof(options)) < 0)
|
sizeof(device->line_config)) < 0)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
// adjust options
|
// adjust options
|
||||||
options.c_cflag &= ~CBAUD;
|
device->line_config.c_cflag &= ~CBAUD;
|
||||||
options.c_cflag |= B115200; // TODO: make this configurable too...
|
device->line_config.c_cflag |= B115200; // TODO: make this configurable too...
|
||||||
options.c_cflag |= (CLOCAL | CREAD);
|
device->line_config.c_cflag |= (CLOCAL | CREAD);
|
||||||
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
|
device->line_config.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
|
||||||
options.c_oflag &= ~OPOST;
|
device->line_config.c_oflag &= ~OPOST;
|
||||||
options.c_cc[VMIN] = 0;
|
device->line_config.c_cc[VMIN] = 0;
|
||||||
options.c_cc[VTIME] = 10;
|
device->line_config.c_cc[VTIME] = 10;
|
||||||
|
|
||||||
// set new options
|
// set new options
|
||||||
if(ioctl(device->fd, TCSETA, &options) < 0)
|
if(ioctl(device->fd, TCSETA, &device->line_config,
|
||||||
|
sizeof(device->line_config)) < 0)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
// TODO: init modem & start dialing phase
|
// TODO: init modem & start dialing phase
|
||||||
@@ -160,6 +157,8 @@ dialup_down(net_device* _device)
|
|||||||
strlen(device->escape_string)) > 0) {
|
strlen(device->escape_string)) > 0) {
|
||||||
snooze(device->escape_silence);
|
snooze(device->escape_silence);
|
||||||
// TODO: send hangup string and check for OK ack
|
// TODO: send hangup string and check for OK ack
|
||||||
|
write(device->fd, device->hangup_string,
|
||||||
|
strlen(device->hangup_string));
|
||||||
}
|
}
|
||||||
device->flags &= ~IFF_LINK;
|
device->flags &= ~IFF_LINK;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user