Message ID | 1419872045-16704-1-git-send-email-malaakso@elisanet.fi |
---|---|
State | Changes Requested |
Headers | show |
On 29/12/2014 17:54, Matti Laakso wrote: > Some Huawei mobile broadband sticks utilizing the NCM protocol expose > the control channel as a cdc-wdm device node instead of a virtual serial > port. This device node does not support the serial port ioctls. Add command > line option to not check whether ioctls are successful so that AT commands > can also be sent to these devices. > can you instead of calling the ioctl and then ignoring the error change it to not call the ioctls if the device is not a tty ? > Signed-off-by: Matti Laakso <malaakso@elisanet.fi> > --- > .../utils/comgt/patches/004-add_force_option.patch | 66 ++++++++++++++++++++++ > 1 file changed, 66 insertions(+) > create mode 100644 package/network/utils/comgt/patches/004-add_force_option.patch > > diff --git a/package/network/utils/comgt/patches/004-add_force_option.patch b/package/network/utils/comgt/patches/004-add_force_option.patch > new file mode 100644 > index 0000000..1690e5c > --- /dev/null > +++ b/package/network/utils/comgt/patches/004-add_force_option.patch > @@ -0,0 +1,66 @@ > +--- 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 force=0; > + > + > + //"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 (ioctl(comfd, TCSETA, &stbuf) < 0 && !force) { > + 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 (ioctl(comfd, TCSETA, &svbuf) < 0 && !force) { > + sprintf(msg,"Can't ioctl set device %s.\n",device); > + serror(msg,1); > + } > +@@ -1266,7 +1267,7 @@ void opengt(void) { > + ext(1); > + } > + } > +- if (ioctl (comfd, TCGETA, &svbuf) < 0) { > ++ if (ioctl (comfd, TCGETA, &svbuf) < 0 && !force) { > + sprintf(msg,"Can't control %s, please try again.\n",device); > + serror(msg,1); > + } > +@@ -1303,7 +1304,7 @@ void opendevice(void) { > + } > + else comfd=0; > + > +- if (ioctl (comfd, TCGETA, &svbuf) < 0) { > ++ if (ioctl (comfd, TCGETA, &svbuf) < 0 && !force) { > + sprintf(msg,"Can't ioctl get device %s.\n",device); > + serror(msg,1); > + } > +@@ -1567,7 +1568,7 @@ int main(int argc,char **argv) { > + for(a=0;a<strlen(argv[0]);a++) { > + if(argv[0][a]=='/') b=a+1; > + } > +- while((aa=getopt(argc,argv,"xheVvd:t:sb:"))!= -1) { > ++ while((aa=getopt(argc,argv,"xheVvd:t:sb:f"))!= -1) { > + switch(aa) { > + case 0: > + ext(0); > +@@ -1605,6 +1606,10 @@ int main(int argc,char **argv) { > + printf("High speed overide (115200 is now 57600).\n"); > + high_speed =1; > + break; > ++ case 'f': > ++ force=1; > ++ vmsg("Ignoring ioctl errors"); > ++ break; > + default: > + ext(1); > + } >
diff --git a/package/network/utils/comgt/patches/004-add_force_option.patch b/package/network/utils/comgt/patches/004-add_force_option.patch new file mode 100644 index 0000000..1690e5c --- /dev/null +++ b/package/network/utils/comgt/patches/004-add_force_option.patch @@ -0,0 +1,66 @@ +--- 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 force=0; + + + //"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 (ioctl(comfd, TCSETA, &stbuf) < 0 && !force) { + 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 (ioctl(comfd, TCSETA, &svbuf) < 0 && !force) { + sprintf(msg,"Can't ioctl set device %s.\n",device); + serror(msg,1); + } +@@ -1266,7 +1267,7 @@ void opengt(void) { + ext(1); + } + } +- if (ioctl (comfd, TCGETA, &svbuf) < 0) { ++ if (ioctl (comfd, TCGETA, &svbuf) < 0 && !force) { + sprintf(msg,"Can't control %s, please try again.\n",device); + serror(msg,1); + } +@@ -1303,7 +1304,7 @@ void opendevice(void) { + } + else comfd=0; + +- if (ioctl (comfd, TCGETA, &svbuf) < 0) { ++ if (ioctl (comfd, TCGETA, &svbuf) < 0 && !force) { + sprintf(msg,"Can't ioctl get device %s.\n",device); + serror(msg,1); + } +@@ -1567,7 +1568,7 @@ int main(int argc,char **argv) { + for(a=0;a<strlen(argv[0]);a++) { + if(argv[0][a]=='/') b=a+1; + } +- while((aa=getopt(argc,argv,"xheVvd:t:sb:"))!= -1) { ++ while((aa=getopt(argc,argv,"xheVvd:t:sb:f"))!= -1) { + switch(aa) { + case 0: + ext(0); +@@ -1605,6 +1606,10 @@ int main(int argc,char **argv) { + printf("High speed overide (115200 is now 57600).\n"); + high_speed =1; + break; ++ case 'f': ++ force=1; ++ vmsg("Ignoring ioctl errors"); ++ break; + default: + ext(1); + }
Some Huawei mobile broadband sticks utilizing the NCM protocol expose the control channel as a cdc-wdm device node instead of a virtual serial port. This device node does not support the serial port ioctls. Add command line option to not check whether ioctls are successful so that AT commands can also be sent to these devices. Signed-off-by: Matti Laakso <malaakso@elisanet.fi> --- .../utils/comgt/patches/004-add_force_option.patch | 66 ++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 package/network/utils/comgt/patches/004-add_force_option.patch