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 <malaa...@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); + } -- 2.1.0 _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel