[bugfix] Rndis needs to be enabled twice after it is disabled(SZZT-47)
Change-Id: I69e4517d6410ff3b61d6f9f24005d8d724b398ff
diff --git a/src/lynq/framework/lynq-atsvc/src/ril.cpp b/src/lynq/framework/lynq-atsvc/src/ril.cpp
index a68f78c..ddd569b 100755
--- a/src/lynq/framework/lynq-atsvc/src/ril.cpp
+++ b/src/lynq/framework/lynq-atsvc/src/ril.cpp
@@ -6568,7 +6568,7 @@
}
case LYNQ_GOTO_RNDIS_REQ:
{
- lynq_get_rndis_data(buffer);
+ lynq_deal_with_rndis(argc,argv);
break;
}
case LYNQ_GOTO_FACTORY:
diff --git a/src/lynq/framework/lynq-atsvc/src/rndis/lynq_rndis.cpp b/src/lynq/framework/lynq-atsvc/src/rndis/lynq_rndis.cpp
index 0339390..9373c90 100755
--- a/src/lynq/framework/lynq-atsvc/src/rndis/lynq_rndis.cpp
+++ b/src/lynq/framework/lynq-atsvc/src/rndis/lynq_rndis.cpp
@@ -23,131 +23,56 @@
#include <log/log.h>
#include "lynq_rndis.h"
-#define LYNQ_RNDIS_MALLOC_LEN 64
-
void lynq_rndis_response_ttyGS3(char *log_buf)
{
-// sprintf(log_buf,"LYNQ_GOTO_LOGS_REQ\n");
write(ttyGS3_fd,log_buf,strlen(log_buf));
return ;
}
-int lynqParseRndisCommand(const char* cmd,char **argv)
-{
- char test[1024];
- char *token;
- char *str = test;
- char *string;
- char *lynq_str_buf;
- char *parameter;
- int cnt = 0;
- memcpy(test, cmd, strlen(cmd));
- if(strstr(cmd,"="))
- {
- token = strtok(str, "=");
- lynq_str_buf = strstr(token, "+");
- cnt++;
- if((strlen(lynq_str_buf)) <LYNQ_RNDIS_MALLOC_LEN)
- {
- bzero(argv[0], LYNQ_RNDIS_MALLOC_LEN);
- memcpy(argv[0],lynq_str_buf,strlen(lynq_str_buf));
- }
-
- while (token != NULL)
- {
- string = token;
- token = strtok(NULL, "=");
- }
- parameter = strtok(string, ",");
- int i = 1;
- while (parameter != NULL)
- {
- if(((strlen(parameter)) <LYNQ_RNDIS_MALLOC_LEN) && (cnt < MAX_RNDIS_NUM))
- {
- cnt++;
- bzero(argv[i], LYNQ_RNDIS_MALLOC_LEN);
- memcpy(argv[i++],parameter,strlen(parameter));
- }
- parameter = strtok(NULL, ",");
- }
- }
- if(cnt > MAX_RNDIS_NUM)
- return -1;
- return cnt;
-}
-
-
int lynq_deal_with_rndis(int cmd_num,char **lynq_rndis_arr)
{
- FILE *fp;
- char lynq_rndis_dev[LYNQ_RNDIS_MALLOC_LEN+32] = {0};
- char lynq_rndis_buf[1024];
- char lynq_rndis_log_buf[256];
- int m = 1;
- if(0 == strcmp(lynq_rndis_arr[0], "+LRNDISHANDLE"))
- {
-// lynq_rndis_response_ttyGS3("##############\n");
- for(m = 1; m < cmd_num; m++)
- {
-/* bzero(lynq_rndis_log_buf, 256);
- sprintf(lynq_rndis_log_buf,"cmd_num:%d,m=%d:%s\n",cmd_num,m,lynq_rndis_arr[m]);
- lynq_rndis_response_ttyGS3(lynq_rndis_log_buf);
-*/
- bzero(lynq_rndis_buf, 1024);
-
- bzero(lynq_rndis_dev, (LYNQ_RNDIS_MALLOC_LEN+32));
- sprintf(lynq_rndis_dev,"%s 2>&1",lynq_rndis_arr[m]);
- fp=popen(lynq_rndis_dev, "r");
- usleep(500);
-// sleep(2);
- fgets(lynq_rndis_buf,sizeof(lynq_rndis_buf),fp);
- pclose(fp);
- if(strlen(lynq_rndis_buf) > 0)
- {
- lynq_rndis_response_ttyGS3(lynq_rndis_buf);
- lynq_rndis_response_ttyGS3("\n");
- }
- }
-
+ FILE *fp;
+ char lynq_rndis_dev[128] = {0};
+ char lynq_rndis_buf[1024];
+ char lynq_rndis_log_buf[256];
+ int m = 3;
+ if(0 == strcmp(lynq_rndis_arr[0], "LRNDISHANDLE"))
+ {
+ for(m = 3; m < cmd_num; m++)
+ {
+ /*
+ bzero(lynq_rndis_log_buf, 256);
+ sprintf(lynq_rndis_log_buf,"cmd_num:%d,m=%d:%s\n",cmd_num,m,lynq_rndis_arr[m]);
+ lynq_rndis_response_ttyGS3(lynq_rndis_log_buf);
+ */
+ bzero(lynq_rndis_buf,1024);
+ bzero(lynq_rndis_dev,128);
+ sprintf(lynq_rndis_dev,"%s 2>&1",lynq_rndis_arr[m]);
+ fp=popen(lynq_rndis_dev, "r");
+ if(!fp)
+ {
+ lynq_rndis_response_ttyGS3("\n+CME: POPEN ERROR\n");
+ return -1;
+ }
+ while(fgets(lynq_rndis_buf,sizeof(lynq_rndis_buf),fp) != NULL)
+ {
+ lynq_rndis_response_ttyGS3(lynq_rndis_buf);
+ lynq_rndis_response_ttyGS3("\n");
+ }
+ pclose(fp);
}
- return 1;
+
+ }
+ return 1;
}
int lynq_open_rndis(int cmd_num,char **lynq_argv)
{
- for(int j = 0;j<cmd_num;j++)
- {
- lynq_rndis_response_ttyGS3(lynq_argv[j]);
- lynq_rndis_response_ttyGS3("\n");
- }
- return 1;
-}
-
-int lynq_get_rndis_data(char *rndis_data)
-{
- int lynq_argc_num = 0;
- char *lynq_str_argv[MAX_RNDIS_NUM];
-
-for(int i = 0;i < MAX_RNDIS_NUM; i++)
-{
- lynq_str_argv[i] = (char*)calloc(1,LYNQ_RNDIS_MALLOC_LEN);
- if(lynq_str_argv[i] == NULL)
+ for(int j = 0;j<cmd_num;j++)
{
- return -1;
- }
-}
-
- lynq_argc_num = lynqParseRndisCommand(rndis_data,lynq_str_argv);
-// lynq_open_rndis(lynq_argc_num,lynq_str_argv);
- lynq_deal_with_rndis(lynq_argc_num,lynq_str_argv);
-for(int mm= 0;mm < MAX_RNDIS_NUM; mm++)
-{
- if(lynq_str_argv[mm] != NULL)
- {
- free(lynq_str_argv[mm]);
- lynq_str_argv[mm] = NULL;
- }
-}
+ lynq_rndis_response_ttyGS3(lynq_argv[j]);
+ lynq_rndis_response_ttyGS3("\n");
+ }
return 1;
}
diff --git a/src/lynq/framework/lynq-atsvc/src/rndis/lynq_rndis.h b/src/lynq/framework/lynq-atsvc/src/rndis/lynq_rndis.h
index a6d9009..a58c989 100755
--- a/src/lynq/framework/lynq-atsvc/src/rndis/lynq_rndis.h
+++ b/src/lynq/framework/lynq-atsvc/src/rndis/lynq_rndis.h
@@ -7,8 +7,7 @@
#define MAX_RNDIS_NUM 10
int lynq_open_rndis(int cmd_num,char **lynq_argv);
-int lynq_get_rndis_data(char *rndis_data);
-
+int lynq_deal_with_rndis(int cmd_num,char **lynq_rndis_arr);
#ifdef __cplusplus
}
#endif