comgt: Allow using non-TTY devices
Some Huawei mobile broadband sticks utilizing the NCM protocol expose the control channel as a cdc-wdm device node instead of a virtual TTY. This device node does not support the terminal ioctls. This patch adds a check whether the provided device is a TTY or not and does not attempt to use the terminal ioctls if they are not supported. v2: reduce diffstat by simplifying code a little Signed-off-by: Matti Laakso <malaakso@elisanet.fi> SVN-Revision: 44054
This commit is contained in:
parent
7aba4f1539
commit
eb6acdf6b4
1 changed files with 68 additions and 0 deletions
68
package/network/utils/comgt/patches/004-check_tty.patch
Normal file
68
package/network/utils/comgt/patches/004-check_tty.patch
Normal file
|
@ -0,0 +1,68 @@
|
|||
--- a/comgt.c
|
||||
+++ b/comgt.c
|
||||
@@ -91,6 +91,7 @@ unsigned long hstart,hset;
|
||||
char NullString[]={ "" };
|
||||
BOOL lastcharnl=1; /* Indicate that last char printed from getonebyte
|
||||
was a nl, so no new one is needed */
|
||||
+BOOL tty=1;
|
||||
|
||||
|
||||
//"open com \"/dev/modem\"\nset com 38400n81\nset senddelay 0.05\nsend \"ATi^m\"\nget 2 \" ^m\" $s\nprint \"Response : \",$s,\"\\n\"\nget 2 \" ^m\" $s\nprint \"Response :\",$s,\"\\n\"\nget 2 \" ^m\" $s\nprint \"Response : \",$s,\"\\n\"\n\n";
|
||||
@@ -920,7 +921,7 @@ BOOL getonoroff(void) {
|
||||
void setcom(void) {
|
||||
stbuf.c_cflag &= ~(CBAUD | CSIZE | CSTOPB | CLOCAL | PARENB);
|
||||
stbuf.c_cflag |= (speed | bits | CREAD | clocal | parity | stopbits );
|
||||
- if (ioctl(comfd, TCSETA, &stbuf) < 0) {
|
||||
+ if (tty && ioctl(comfd, TCSETA, &stbuf) < 0) {
|
||||
serror("Can't ioctl set device",1);
|
||||
}
|
||||
}
|
||||
@@ -1224,7 +1225,7 @@ void doclose(void) {
|
||||
if(strcmp(token,"hardcom")==0) {
|
||||
if(comfd== -1) serror("Com device not open",1);
|
||||
vmsg("Closing device");
|
||||
- if (ioctl(comfd, TCSETA, &svbuf) < 0) {
|
||||
+ if (tty && ioctl(comfd, TCSETA, &svbuf) < 0) {
|
||||
sprintf(msg,"Can't ioctl set device %s.\n",device);
|
||||
serror(msg,1);
|
||||
}
|
||||
@@ -1266,12 +1267,17 @@ void opengt(void) {
|
||||
ext(1);
|
||||
}
|
||||
}
|
||||
- if (ioctl (comfd, TCGETA, &svbuf) < 0) {
|
||||
+ if (isatty (comfd))
|
||||
+ tty=1;
|
||||
+ else
|
||||
+ tty=0;
|
||||
+ if (tty && ioctl (comfd, TCGETA, &svbuf) < 0) {
|
||||
sprintf(msg,"Can't control %s, please try again.\n",device);
|
||||
serror(msg,1);
|
||||
}
|
||||
setenv("COMGTDEVICE",device,1);
|
||||
- ioctl(comfd, TCGETA, &stbuf);
|
||||
+ if (tty)
|
||||
+ ioctl(comfd, TCGETA, &stbuf);
|
||||
speed=stbuf.c_cflag & CBAUD;
|
||||
if (high_speed == 0) strcpy(cspeed,"115200");
|
||||
else strcpy(cspeed,"57600");
|
||||
@@ -1302,12 +1308,16 @@ void opendevice(void) {
|
||||
}
|
||||
}
|
||||
else comfd=0;
|
||||
-
|
||||
- if (ioctl (comfd, TCGETA, &svbuf) < 0) {
|
||||
+ if (isatty (comfd))
|
||||
+ tty=1;
|
||||
+ else
|
||||
+ tty=0;
|
||||
+ if (tty && ioctl (comfd, TCGETA, &svbuf) < 0) {
|
||||
sprintf(msg,"Can't ioctl get device %s.\n",device);
|
||||
serror(msg,1);
|
||||
}
|
||||
- ioctl(comfd, TCGETA, &stbuf);
|
||||
+ if (tty)
|
||||
+ ioctl(comfd, TCGETA, &stbuf);
|
||||
speed=stbuf.c_cflag & CBAUD;
|
||||
switch(speed) {
|
||||
case B0: strcpy(cspeed,"0");break;
|
Loading…
Reference in a new issue