[Bugfix][T108][bug-view-2106] Add AT CMD *DIAGSWITCH=diag_media,saveflag;diag_media type{USB,SD,TCP,FS}save flag{0,1} to fix RF test error.

    Only Configure: No
    Affected branch: GSW_V1453
    Affected module: log
    Self-test: yes
    Doc Update: no

Change-Id: I6fd4d521a7d0d19ee89bf16a2586366fd557b4d7
diff --git a/marvell/lte-telephony/apps/atcmd_server_ss/inc/teldbg.h b/marvell/lte-telephony/apps/atcmd_server_ss/inc/teldbg.h
index ea76e32..c7299cf 100755
--- a/marvell/lte-telephony/apps/atcmd_server_ss/inc/teldbg.h
+++ b/marvell/lte-telephony/apps/atcmd_server_ss/inc/teldbg.h
@@ -66,6 +66,6 @@
 RETURNCODE_T  mbtk_GPSFwdl(const utlAtParameterOp_T op, const char *command_name_p, const utlAtParameterValue_P2c parameter_values_p, const size_t num_parameters, const char *info_text_p, unsigned int *xid_p, void *arg_p);
 #endif
 RETURNCODE_T  ciCMTLRA(const utlAtParameterOp_T op,const char *command_name_p,const utlAtParameterValue_P2c parameter_values_p,const size_t num_parameters,const char *info_text_p,unsigned int *xid_p,void *arg_p);
-
+RETURNCODE_T  diagMediaSwitch(const utlAtParameterOp_T op,const char *command_name_p,const utlAtParameterValue_P2c parameter_values_p,const size_t num_parameters,const char *info_text_p,unsigned int *xid_p,void *arg_p);
 #endif
 
diff --git a/marvell/lte-telephony/apps/atcmd_server_ss/src/telcontroller.c b/marvell/lte-telephony/apps/atcmd_server_ss/src/telcontroller.c
index 28f02a0..7650364 100755
--- a/marvell/lte-telephony/apps/atcmd_server_ss/src/telcontroller.c
+++ b/marvell/lte-telephony/apps/atcmd_server_ss/src/telcontroller.c
@@ -822,6 +822,8 @@
 					      utlDEFINE_DECIMAL_AT_PARAMETER(    utlAT_PARAMETER_ACCESS_READ_WRITE, utlAT_PARAMETER_PRESENCE_OPTIONAL),};
 
 static utlAtParameter_T plusAPLOG_params[] = { utlDEFINE_DECIMAL_AT_PARAMETER(    utlAT_PARAMETER_ACCESS_READ_WRITE, utlAT_PARAMETER_PRESENCE_REQUIRED) };
+
+static utlAtParameter_T starDIAGSWITCH_params[] = { utlDEFINE_STRING_AT_PARAMETER(    utlAT_PARAMETER_ACCESS_READ_WRITE, utlAT_PARAMETER_PRESENCE_REQUIRED),                                                                        utlDEFINE_DECIMAL_AT_PARAMETER(    utlAT_PARAMETER_ACCESS_READ_WRITE, utlAT_PARAMETER_PRESENCE_OPTIONAL)};
 static utlAtParameter_T plusRDUP_params[] = { utlDEFINE_DECIMAL_AT_PARAMETER(    utlAT_PARAMETER_ACCESS_READ_WRITE, utlAT_PARAMETER_PRESENCE_REQUIRED) };
 
 // support AT+VPDUS
@@ -2951,7 +2953,9 @@
 	utlDEFINE_EXTENDED_AT_COMMAND("+VHDL",		   NULL,		"+VHDL: (Show Handle)",																																													     vHDL,			    vHDL),
 	utlDEFINE_EXTENDED_AT_COMMAND("+VECHO",		   plusVECHO_params,	"+VECHO: ",																																														     vECHO,			    vECHO),
     utlDEFINE_EXTENDED_AT_COMMAND("+APLOG",         plusAPLOG_params,       "+APLOG: (0-255)",      apLog,       apLog),
-    
+   
+    utlDEFINE_EXTENDED_AT_COMMAND("*DIAGSWITCH", starDIAGSWITCH_params, "*DIAGSWITCH: <diag_media>[,0-1]", diagMediaSwitch, diagMediaSwitch),
+
     utlDEFINE_EXTENDED_AT_COMMAND("+RDUP",         plusRDUP_params,       "+RDUP: (0-1)",      ciRdup,       ciRdup),
 
 	// debug atcommand for +cgsend *tgsink.
diff --git a/marvell/lte-telephony/apps/atcmd_server_ss/src/teldbg.c b/marvell/lte-telephony/apps/atcmd_server_ss/src/teldbg.c
index 631470c..cf35bcb 100755
--- a/marvell/lte-telephony/apps/atcmd_server_ss/src/teldbg.c
+++ b/marvell/lte-telephony/apps/atcmd_server_ss/src/teldbg.c
@@ -1196,6 +1196,93 @@
     return(rc);
 }
 
+/*******************************************************************
+*  FUNCTION: diagMediaSwitch
+*
+*  DESCRIPTION: Used to control the diag media
+*
+*  PARAMETERS:
+*
+*  RETURNS:
+*
+*******************************************************************/
+utlReturnCode_T  diagMediaSwitch( const utlAtParameterOp_T op,
+            const char                      *command_name_p,
+            const utlAtParameterValue_P2c parameter_values_p,
+            const size_t num_parameters,
+            const char                      *info_text_p,
+            unsigned int                    *xid_p,
+            void                            *arg_p)
+{
+    UNUSEDPARAM(command_name_p)
+    UNUSEDPARAM(parameter_values_p)
+    UNUSEDPARAM(num_parameters)
+    UNUSEDPARAM(info_text_p)
+
+    TelAtParserID sAtpIndex;
+    int save = 0, err = 0;
+    CHAR diag_media[8] = {0};
+    INT16 strLen = 0;
+    CHAR returnStr[32] = {0};
+    CHAR cmdStr[32] = {0};
+    sAtpIndex =  *(TelAtParserID *)arg_p;
+    *xid_p = MAKE_AT_HANDLE(sAtpIndex);
+    CiReturnCode      ret = CIRC_FAIL;
+    RETURNCODE_T rc = INITIAL_RETURN_CODE;
+
+    memset(diag_media, '\0', sizeof(diag_media));
+
+    switch ( op )
+    {
+        case TEL_EXT_SET_CMD:         /* AT*DIAGSWITCH= */
+        {
+            
+            if( getExtString( parameter_values_p, 0, (CHAR *)diag_media, 8, &strLen, NULL ) == TRUE )
+            {
+                if ( getExtValue( parameter_values_p, 1, &save, 0, 1, 0) == TRUE )
+                {
+                    ERRMSG(diagMediaSwitch001, "%s: diag_media=%s, save=%u\n", __FUNCTION__, diag_media, save);
+                    if (strLen > 0)
+                    {
+                        if (save > 0)
+                        {
+                            memset(returnStr, 0x00, sizeof(returnStr));
+                            memset(cmdStr, 0x00, sizeof(cmdStr));
+                            snprintf(cmdStr, sizeof(cmdStr), "/bin/diagcmd save %s", diag_media);
+                            err = executeShellCMD(cmdStr, returnStr);
+                            ERRMSG(diagMediaSwitch002, "%s: err=%d, returnStr=%s\n", __FUNCTION__, err, returnStr);
+                        }
+
+                        memset(returnStr, 0x00, sizeof(returnStr));
+                        memset(cmdStr, 0x00, sizeof(cmdStr));
+                        snprintf(cmdStr, sizeof(cmdStr), "/bin/diagcmd switch %s", diag_media);
+                        err = executeShellCMD(cmdStr, returnStr);
+                        ERRMSG(diagMediaSwitch003, "%s: err=%d, returnStr=%s\n", __FUNCTION__, err, returnStr);
+                    }
+
+                    ret = ATRESP(*xid_p, ATCI_RESULT_CODE_OK, 0, NULL);
+                }
+            }
+            else
+            {
+                ret = ATRESP( *xid_p, ATCI_RESULT_CODE_CME_ERROR, CME_INVALID_PARAM, NULL );
+            }
+            break;
+        }
+
+        case TEL_EXT_GET_CMD:         /* AT*DIAGSWITCH? */
+        default:
+        {
+            ret = ATRESP( *xid_p, ATCI_RESULT_CODE_CME_ERROR, CME_OPERATION_NOT_SUPPORTED, NULL );
+            break;
+        }
+    }
+
+    /* handle the return value */
+    rc = HANDLE_RETURN_VALUE(ret);
+
+    return(rc);
+}
 
 /*******************************************************************
 *  FUNCTION: ciRdup
diff --git a/marvell/lte-telephony/apps/diag/command_api.c b/marvell/lte-telephony/apps/diag/command_api.c
index 3a541fe..1e54ea2 100644
--- a/marvell/lte-telephony/apps/diag/command_api.c
+++ b/marvell/lte-telephony/apps/diag/command_api.c
@@ -223,7 +223,19 @@
 		sleep(3); // wait for CP to disconnect
 		exit(0);
 	}
-
+           else if (strcasecmp(command,"save") == 0) /* save default media */
+            {
+               ret = getMediaByName(arg);
+              if(ret >= 0)
+              {
+                save_diag_default_media_config(ret);
+                 reply = response_success;
+               }
+              else
+              {
+                reply = response_error;
+               }
+            }
 	(void)sendReply(clients[client_id].fd, reply, reply_arg);
 }
 
diff --git a/marvell/lte-telephony/apps/diag/diag_config.c b/marvell/lte-telephony/apps/diag/diag_config.c
index 569ede1..ef00c93 100644
--- a/marvell/lte-telephony/apps/diag/diag_config.c
+++ b/marvell/lte-telephony/apps/diag/diag_config.c
@@ -366,3 +366,37 @@
 	return 0;
 }
 
+int save_diag_default_media_config(int default_media)
+{
+    void * pRoot = NULL;
+    int ret;
+    int tmpVal = 0;
+
+    if ((default_media >= diagNoConnection) && (default_media <= diagFSConnection))
+    {
+        pRoot = mrvl_open_tel_cfg(file_name,FILE_FORMAT);
+        if (pRoot)
+        {
+            ret = mrvl_set_int_value(pRoot, "SystemSettings/default_media", default_media);
+            //ERRMSG("%s: default_media=%d", __FUNCTION__, default_media);
+            if (ret == 0)
+            {
+                diagConfig.sys_settings.default_media = default_media;
+                ret = mrvl_save_tel_cfg(file_name, &pRoot);
+            }
+
+            if(ret < 0)
+            {
+                ERRMSG("failed to save diag config");
+                if (pRoot)
+                {
+                    free(pRoot);
+                    pRoot = NULL;
+                }
+                return -1;
+            }
+        }
+    }
+
+    return 0;
+}
diff --git a/marvell/lte-telephony/apps/diag/diag_config.h b/marvell/lte-telephony/apps/diag/diag_config.h
index 9e237f9..445d4ce 100755
--- a/marvell/lte-telephony/apps/diag/diag_config.h
+++ b/marvell/lte-telephony/apps/diag/diag_config.h
@@ -105,7 +105,7 @@
 void LogcatTaskResume(ActiveConnectionType type);
 void LogcatTaskSuspend(ActiveConnectionType type);
 int change_sdlogfolderNum(void);
-
+int save_diag_default_media_config(int default_media);
 extern unsigned int DiagProdMode;
 extern struct diagConfiguration_tag diagConfig;