diff src/ui/mfw/mfw_BtipsOpps.c @ 3:67bfe9f274f6

src/ui: import of src/ui3 from Magnetite
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 16 Oct 2020 06:33:10 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ui/mfw/mfw_BtipsOpps.c	Fri Oct 16 06:33:10 2020 +0000
@@ -0,0 +1,866 @@
+/* =========================================================
+*             Texas Instruments OMAP(TM) Platform Software
+*  (c) Copyright Texas Instruments, Incorporated.  All Rights Reserved.
+*
+*  Use of this software is controlled by the terms and conditions found
+*  in the license agreement under which this software has been supplied.
+* ========================================================== */
+/*
+ $Project name: Basic Bluetooth MMI
+ $Project code:
+ $Module:		Bluetooth BMG MFW
+ $File:			mfw_BtipsOpps.c
+ $Revision:		1.0
+ $Author:		Texas Instruments
+ $Date:			26/06/07
+
+********************************************************************************
+
+ Description:
+
+    This module provides the BTIPS BMG APPlication functionality.
+
+********************************************************************************
+ $History: mfw_BtipsOpps.c
+
+  26/06/07 Sasken original version
+
+ $End
+
+*******************************************************************************/
+
+
+
+
+/*******************************************************************************
+
+                                Include files
+
+*******************************************************************************/
+
+#define ENTITY_MFW
+/* includes */
+
+#include <string.h>
+
+#if defined (NEW_FRAME)
+
+#include "typedefs.h"
+#include "vsi.h"
+#include "pei.h"
+#include "custom.h"
+#include "gsm.h"
+#include "prim.h"
+
+#else
+
+#include "STDDEFS.H"
+#include "custom.h"
+#include "gsm.h"
+#include "vsi.h"
+
+#endif
+
+#ifdef FF_MMI_BTIPS_APP
+#include "btl_bmg.h"
+
+/* Macro for sending events to UI - meanwhile, trace message to PCO Viewer */
+extern int vsi_o_state_ttrace ( const char * const format, ... );
+#define UI_DISPLAY(s) vsi_o_state_ttrace s
+
+#include "osapi.h"
+#include "btl_common.h"
+#include "debug.h"
+
+#include "btl_opps.h"
+#include "btl_config.h"
+#include "bthal_config.h"
+#include "bthal_fs.h"
+
+#include "Mfw_mfw.h"
+#include "Mfw_Btips.h"
+
+
+
+/********************************************************************************
+ *
+ * Constants 
+ *
+ *******************************************************************************/
+
+#define OPPSA_DEFAULT_VCARD_NAME     "mycard.vcf"
+#define OPPSA_ACCEPT_DEFAULT_DIR     "/MfwBtDemo"
+
+#define OPPSA_DEFAULT_FULL_NAME      "/MfwBtDemo/default/mycard.vcf"
+
+#define OPPSA_SERVER_NAME            "OBEX Object Push"
+
+#define OPPSA_DEFAULT_FULL_DIR "/MfwBtDemo"
+
+#define OPPSA_NEW_PUSH_NAME          "pushed_file.vcf"//sundeep
+
+#define OPPSA_PULL_USE_DEFAULT_OBJ     				(0x01)//sundeep
+#define OPPSA_PULL_USE_NEW_OBJ           			(0x02)//sundeep	
+#define OPPSA_NEW_VCARD_NAME         "mycard_t.vcf"
+#define OPPSA_NEW_FULL_NAME          "/QbInbox/default_object/mycard_t.vcf"
+typedef U8 OppsaPullUseObject;
+
+ /*******************************************************************************
+ *
+ * Macro definitions
+ *
+ ******************************************************************************/
+#define OPPSA_BUFF_MAX                    (1 * 512)
+
+
+#define OPPSA_CHECK_OBJ_LOCATION(objectLocation)                  \
+          ((objectLocation == BTL_OBJECT_LOCATION_FS) ||         \
+              (objectLocation == BTL_OBJECT_LOCATION_MEM))
+//sundeep
+static char userPushFileName[BTHAL_FS_MAX_FILE_NAME_LENGTH + 1] = {'\0'};
+static char userPushPath[BTHAL_FS_MAX_PATH_LENGTH + 1] = {'\0'};
+static char userPushFsPath[BTHAL_FS_MAX_FILE_NAME_LENGTH + BTHAL_FS_MAX_PATH_LENGTH + 1] = {'\0'};
+
+
+/*******************************************************************************
+ *
+ * OPP External Function prototypes
+ *
+ ******************************************************************************/
+#if 1
+void mfw_btips_oppsInit(void);
+void mfw_btips_oppsDeinit(void);
+void mfw_btips_opps_AbortServer(void);
+void mfw_btips_opps_Disconnect(void);
+void mfw_btips_opps_GetConnectedDevice(void);
+BOOL mfw_btips_opps_GetSecurityLevel(void);
+BOOL mfw_btips_opps_SetSecurityLevel(BtSecurityLevel level);
+void mfw_btips_oppsAcceptObjectRequest(BOOL accept);
+void OPPSA_SetObjLocation(BtlObjectLocation objLocation);
+#endif
+
+
+/*-------------------------------------------------------------------------------
+ * OppsaState type
+ *
+ *     Defines the OPPS current state.
+ */
+typedef U8 OppsaState;
+
+#define OPPSA_IDLE				0x00	/* OBEX and Transport disconnected */   
+#define OPPSA_CONNECTING		0x01	/* OBEX connecting */
+#define OPPSA_TP_CONNECTED		0x02	/* Transport connected */
+#define OPPSA_CONNECTED			0x03	/* OBEX connected */
+#define OPPSA_DISCONNECTING		0x04	/* OBEX disconnecting */   
+#define OPPSA_TP_DISCONNECTING	0x05	/* Transport disconnecting */
+#define OPPSA_DISABLING     	0x06	/* OBEX and Transport disabling */
+
+
+typedef struct _OppsaData 
+{
+    OppsaState          state;
+
+    BOOL                isConnected;
+
+    BOOL 	            operationOngoing;
+
+    BtSecurityLevel     securityLevel;
+
+    OppsOperation       serverOperation;  
+    
+    BtlObjectLocation   objLocation;
+    
+    /* Memory Objects */
+    char                pushBuff[OPPSA_BUFF_MAX];
+    char                pullBuff[OPPSA_BUFF_MAX];
+
+} OppsaData;
+
+
+/********************************************************************************
+ *
+ * Globals
+ *
+ *******************************************************************************/
+
+static OppsaData           oppServer;		
+
+static BtlOppsContext      *oppsContext = 0;   
+
+
+/*******************************************************************************
+ *
+ * Internal Function prototypes
+ *
+ ******************************************************************************/
+static void btips_oppsCallback(const BtlOppsEvent *Event);
+static const char *mfw_btips_oppsGoepOpName(GoepOperation Op);
+//static void mfw_btips_oppsSetDefaultObject(BtlObject *obj, const char *ObName, const char* fullPath);//sundeep
+static void mfw_btips_oppsSetDefaultObject(BtlObject *obj, OppsaPullUseObject useObj);
+static void mfw_btips_oppsSetToMemObject(BtlObject *obj, char *buff);
+static void mfw_btips_oppsSetToFsObject(BtlObject *obj, char *userPushFileName, char *userPushPath);
+static void mfw_btips_oppsCreateDefaultVCardFile(void);
+BOOL mfw_btips_oppsGetConnectedDevice (BD_ADDR *bdAddr, U8 *name);
+BOOL mfw_btips_OppsDisconnect ();
+
+/*---------------------------------------------------------------------------
+ *            mfw_btips_oppsInit
+ *---------------------------------------------------------------------------
+ *
+ * Synopsis:  Initialize the OBEX server for the OPP application 
+ *            and the Object Store.
+ *
+ * Return:    voidOppsaPullUseObject useObj
+ *
+ */
+void mfw_btips_oppsInit(void)
+{
+    BtStatus status;
+    BtlObject serverObject;    
+    
+    oppServer.securityLevel = BSL_NO_SECURITY;
+    oppServer.state = OPPSA_IDLE;
+    oppServer.isConnected = FALSE;
+    oppServer.operationOngoing = FALSE;
+    oppServer.objLocation = BTL_OBJECT_LOCATION_FS;
+
+	status = BTL_OPPS_Create((BtlAppHandle *)0, btips_oppsCallback, &oppServer.securityLevel, &oppsContext);	
+    Report(("BTL_OPPS_Create() returned %s.",pBT_Status(status)));
+
+	mfw_btips_oppsCreateDefaultVCardFile();
+	
+    //mfw_btips_oppsSetDefaultObject(&serverObject, OPPSA_DEFAULT_VCARD_NAME, OPPSA_DEFAULT_FULL_NAME);//sundeep
+	mfw_btips_oppsSetDefaultObject(&serverObject, OPPSA_PULL_USE_DEFAULT_OBJ);
+    status = BTL_OPPS_SetDefaultObject(&serverObject);
+    Report(("BTL_OPPS_SetDefaultObject() returned %s.",pBT_Status(status)));
+
+    status = BTL_OPPS_Enable(oppsContext, "OPPS Server", BTL_OPPS_SUPPORTED_FORMATS_ANY);
+    Report(("BTL_OPPS_Enable() returned %s.",pBT_Status(status)));
+}
+
+
+/*---------------------------------------------------------------------------
+ *            mfw_btips_oppsDeinit
+ *---------------------------------------------------------------------------
+ *
+ * Synopsis:  Deinitialize the OBEX Server protocol.
+ *
+ * Return:    voidOPPSA_PULL_USE_DEFAULT_OBJ
+ *
+ */
+
+void mfw_btips_oppsDeinit(void)
+{
+	BtStatus status;
+
+	status = BTL_OPPS_Disable(oppsContext);
+	
+    Report(("BTL_OPPS_Disable() returned %s.",pBT_Status(status)));
+
+    if (status == BT_STATUS_SUCCESS)
+    {
+    status = BTL_OPPS_Destroy(&oppsContext);
+    
+    Report(("BTL_OPPS_Destroy() returned %s.", pBT_Status(status)));
+
+        oppServer.state = OPPSA_IDLE;
+        oppServer.isConnected = FALSE;
+        oppServer.operationOngoing = FALSE;
+    }
+    else
+    {
+        oppServer.state = OPPSA_DISABLING;
+    }
+}
+
+
+/*---------------------------------------------------------------------------
+ *            mfw_btips_opps_AbortServer
+ *---------------------------------------------------------------------------
+ *
+ * Synopsis:  Requests the current operation to be aborted.
+ *
+ * Return:    void
+ *
+ */
+void mfw_btips_opps_AbortServer(void)
+{
+    BtStatus status;
+
+    if (oppServer.operationOngoing == TRUE)
+    {
+        status = BTL_OPPS_Abort(oppsContext, OBRC_CONFLICT);
+        Report(("BTL_OPPS_Abort() returned %s.",pBT_Status(status)));
+    }
+	else
+    {
+        Report(("mfw_btips_opps_AbortServer: No ongoing OPP operation!"));
+    }
+}
+
+
+/*---------------------------------------------------------------------------
+ *            mfw_btips_opps_Disconnect
+ *---------------------------------------------------------------------------
+ *
+ * Synopsis:  Disconnects 
+ *
+ */
+void mfw_btips_opps_Disconnect(void)
+{
+	BtStatus status; 	
+
+    if (oppServer.isConnected == TRUE)
+	{
+        status = BTL_OPPS_Disconnect(oppsContext);
+		Report(("BTL_OPPS_Disconnect() returned %s.", pBT_Status(status)));
+	}
+	else
+	{
+		Report(("mfw_btips_opps_Disconnect: Server is not connected!"));
+	}
+}
+
+
+     
+
+/*---------------------------------------------------------------------------
+ *            mfw_btips_opps_SetSecurityLevel
+ *
+ * Synopsis:  Set the OPP Server security level.
+ *
+ * Return:    void
+ *
+ */
+BOOL mfw_btips_opps_SetSecurityLevel(BtSecurityLevel level)
+{
+	BtStatus status; 	
+    BtSecurityLevel securityLevel;
+    BOOL ret_val;
+    
+    securityLevel = oppServer.securityLevel;
+    
+    if (securityLevel & level)
+    {
+        securityLevel &= (~level);
+        ret_val = FALSE;
+    }
+	else
+    {
+        securityLevel |= level;
+        ret_val = TRUE;
+    }
+	
+    status = BTL_OPPS_SetSecurityLevel(oppsContext, &securityLevel);
+
+	Report(("BTL_OPPS_SetSecurityLevel() returned %s.", pBT_Status(status)));
+
+    if (status == BT_STATUS_SUCCESS)
+    {
+        oppServer.securityLevel = securityLevel;
+    }
+    
+    return ((status == BT_STATUS_SUCCESS) ? (ret_val) : (!ret_val));
+}
+
+
+/*---------------------------------------------------------------------------
+ *            mfw_btips_opps_GetSecurityLevel
+ *---------------------------------------------------------------------------
+ *
+ * Synopsis:  Gets security level for the given OPPC context.
+ *
+ * Return:    TRUE if security level is ON, else FALSE.
+ *
+ */
+BOOL mfw_btips_opps_GetSecurityLevel(void)
+{
+	BtStatus status;
+	BtSecurityLevel securityLevel;
+	
+	status = BTL_OPPS_GetSecurityLevel(oppsContext, &securityLevel);
+	
+    Report(("BTL_OPPS_GetSecurityLevel() returned %s.",pBT_Status(status)));
+
+	switch (securityLevel)
+	{
+		case 0:
+			Report(("Security level: BSL_NO_SECURITY"));
+			break;
+		case 1:
+			Report(("Security level: BSL_AUTHENTICATION_IN"));
+			break;
+		case 2:
+			Report(("Security level: BSL_AUTHORIZATION_IN"));
+			break;
+		case 4:
+			Report(("Security level: BSL_ENCRYPTION_IN"));
+			break;
+		case 3:
+			Report(("Security level: BSL_AUTHENTICATION_IN"));
+			Report(("and BSL_AUTHORIZATION_IN"));
+			break;
+		case 5:
+			Report(("Security level: BSL_AUTHENTICATION_IN"));
+			Report(("and BSL_ENCRYPTION_IN"));
+			break;
+		case 6:
+			Report(("Security level: BSL_AUTHORIZATION_IN"));
+			Report(("and BSL_ENCRYPTION_IN"));
+			break;
+		case 7:
+			Report(("Security level: BSL_AUTHENTICATION_IN"));
+			Report(("and BSL_AUTHORIZATION_IN"));
+			Report(("and BSL_ENCRYPTION_IN"));
+			break;
+		default:
+			Report(("Error: Wrong security level"));
+			break;
+			
+	}
+	
+    return ((status == BT_STATUS_SUCCESS) ? (TRUE) : (FALSE));
+}
+
+
+/*---------------------------------------------------------------------------
+ *            OPPSA_AcceptObjectRequest
+ *---------------------------------------------------------------------------
+ *
+ * Synopsis:  Accept the pending object request.
+ *
+ * Return:    void
+ *
+ */
+void mfw_btips_oppsAcceptObjectRequest(BOOL accept)
+{
+	BtStatus    status;
+    BtlObject	serverObject;    
+
+	TRACE_FUNCTION_P1("mfw_btips_oppsAcceptObjectRequest - %d", accept);
+    if (TRUE != OPPSA_CHECK_OBJ_LOCATION(oppServer.objLocation))
+    {
+        Report(("OPPSA_AcceptObjectRequest: Invalid objectLocation"));
+        return;
+    }
+
+	if (accept == FALSE)
+	{
+		mfw_btips_oppsSetToFsObject(&serverObject, userPushFileName, OPPSA_ACCEPT_DEFAULT_DIR);
+					
+		status = BTL_OPPS_AcceptObjectRequest(oppsContext, FALSE, &serverObject);
+
+        Report(("BTL_OPPS_AcceptObjectRequest() returned %s.", pBT_Status(status)));
+	}
+    else
+    {
+		if (oppServer.serverOperation == GOEP_OPER_PUSH)
+		{
+			if (oppServer.objLocation == BTL_OBJECT_LOCATION_MEM)
+			{
+                mfw_btips_oppsSetToMemObject(&serverObject, oppServer.pushBuff);
+			}
+            else if (oppServer.objLocation == BTL_OBJECT_LOCATION_FS)
+            {
+                mfw_btips_oppsSetToFsObject(&serverObject, userPushFileName, OPPSA_ACCEPT_DEFAULT_DIR);
+            }
+		}
+		else if (oppServer.serverOperation == GOEP_OPER_PULL)
+		{
+    		if (oppServer.objLocation == BTL_OBJECT_LOCATION_MEM)
+			{
+				mfw_btips_oppsSetToMemObject(&serverObject, oppServer.pullBuff);
+			}
+            else if (oppServer.objLocation == BTL_OBJECT_LOCATION_FS)
+            {
+                mfw_btips_oppsSetToFsObject(&serverObject, userPushFileName, OPPSA_ACCEPT_DEFAULT_DIR);
+            }
+		}
+	
+        status = BTL_OPPS_AcceptObjectRequest(oppsContext, accept, &serverObject);
+
+        Report(("BTL_OPPS_AcceptObjectRequest() returned %s.", pBT_Status(status)));
+    }
+}
+
+
+/*---------------------------------------------------------------------------
+ *            OPPSA_SetObjLocation
+ *---------------------------------------------------------------------------
+ *
+ * Synopsis:  Set the object Location (Memory or FS)
+ *
+ * Return:    None
+ *
+ */
+void OPPSA_SetObjLocation(BtlObjectLocation objLocation)
+{
+    oppServer.objLocation = objLocation;
+}
+
+
+/*---------------------------------------------------------------------------
+ *            btips_oppsCallback
+ *---------------------------------------------------------------------------
+ *
+ * Synopsis:  This function processes OBEX server protocol events.
+ *
+ * Return:    void
+ *
+ */
+void btips_oppsCallback(const BtlOppsEvent *Event)
+{
+	/* Local variables */
+	static BD_ADDR	bdAddr;
+	char 		addr[BDADDR_NTOA_SIZE];
+	BtStatus 		status = BT_STATUS_FAILED;
+	BtlBmgDeviceRecord 	record;
+	T_BTIPS_MMI_IND		btips_mmi_ind;
+				
+	btips_mmi_ind.mfwBtipsEventType = MFW_BTIPS_OPPS_EVENT;
+
+	TRACE_EVENT_P1("btips_oppsCallback %d", Event->oppsEvent->event);
+	/* Save the GOEP operation for future use */
+	oppServer.serverOperation = Event->oppsEvent->oper;
+
+	switch (Event->oppsEvent->event) 
+	{
+           case OPPS_EVENT_START:
+		    TRACE_EVENT_P1("Server: Starting %s operation.", mfw_btips_oppsGoepOpName(Event->oppsEvent->oper));
+		    oppServer.operationOngoing = TRUE;
+            break;
+
+        case OPPS_EVENT_COMPLETE:	    
+		    TRACE_EVENT_P1("Server: %s operation complete.", mfw_btips_oppsGoepOpName(Event->oppsEvent->oper));     
+            oppServer.operationOngoing = FALSE;
+//#if 0
+		if (Event->oppsEvent ->oper == GOEP_OPER_PUSH)
+		{
+			btips_mmi_ind.data.oppsBtEvent.mfwOppsEventType = MFW_BTIPS_OPPS_PUSH_COMP_EVENT;
+		}
+		if(Event->oppsEvent ->oper == GOEP_OPER_PULL)
+		{
+			btips_mmi_ind.data.oppsBtEvent.mfwOppsEventType = MFW_BTIPS_OPPS_PULL_COMP_EVENT;
+		}
+		btipsNotifyMFW(&btips_mmi_ind);
+#if 0		
+		if (Event->oppsEvent ->oper == GOEP_OPER_DISCONNECT)
+		{
+			btips_mmi_ind.data.oppsBtEvent.mfwOppsEventType = MFW_BTIPS_OPPS_DISCONNECT_EVENT;
+		}
+		btipsNotifyMFW(&btips_mmi_ind);
+#endif
+            break;
+
+        case OPPS_EVENT_ABORTED:
+		    TRACE_EVENT_P1("Server: GOEP %s operation failed or aborted.", mfw_btips_oppsGoepOpName(Event->oppsEvent->oper));
+            oppServer.isConnected = FALSE;
+			oppServer.operationOngoing = FALSE;
+            oppServer.state = OPPSA_IDLE;
+            break;
+
+        case OPPS_EVENT_TP_CONNECTED:  
+			BTL_OPPS_GetConnectedDevice(oppsContext, &bdAddr);
+			TRACE_EVENT_P1("Server: Transport Connection is up to %s.", bdaddr_ntoa(&bdAddr, addr));
+            oppServer.state = OPPSA_TP_CONNECTED;
+            oppServer.isConnected = TRUE;
+        	break;
+
+    	case OPPS_EVENT_TP_DISCONNECTED:
+            TRACE_EVENT("Server: Transport Connection has been disconnected.");        
+        	oppServer.isConnected = FALSE;
+			oppServer.operationOngoing = FALSE;
+        	if (oppServer.state != OPPSA_DISABLING)
+            {
+            oppServer.state = OPPSA_IDLE;
+            }
+            break;
+	
+       	case OPPS_EVENT_OBJECT_PROGRESS:
+            TRACE_EVENT("OPPSA_Callback: progress bar ...");
+        	break;
+
+	case OPPS_EVENT_OBJECT_REQUEST:
+		TRACE_EVENT_P1("Server: Incoming object request: %s operation.", mfw_btips_oppsGoepOpName(Event->oppsEvent->oper));	
+		TRACE_EVENT_P3("Server: Name: %s, Type: %s, Size: %u.", Event->oppsEvent->info.request.name, 
+				Event->oppsEvent->info.request.type, Event->oppsEvent->info.request.objectLen);
+		TRACE_EVENT("Server: Please accept or reject!");
+		status = BTL_BMG_DDB_FindRecord(bdAddr, &record);
+		Report(("BTL_BMG_DDB_FindRecord() returned %s.", pBT_Status(status)));
+		btips_mmi_ind.data.oppsBtEvent.mfwOppsEventType = Event->oppsEvent ->oper;
+		strcpy(btips_mmi_ind.data.oppsBtEvent.p.opps.deviceName, record.name);
+		strcpy(btips_mmi_ind.data.oppsBtEvent.p.opps.oppObjectName, Event ->oppsEvent->info.request.name);
+#if 1
+		btipsNotifyMFW(&btips_mmi_ind);
+#else	
+		mfw_btips_oppsAcceptObjectRequest(TRUE);
+#endif		
+        	break;
+
+        case OPPS_EVENT_DISABLED: 
+            UI_DISPLAY(("Server: Receiving OPPS_EVENT_DISABLED."));
+            if (OPPSA_DISABLING == oppServer.state)
+            {
+                status = BTL_OPPS_Destroy(&oppsContext);
+                Report(("BTL_OPPS_Destroy() returned %s.", pBT_Status(status)));
+            }
+            oppServer.state = OPPSA_IDLE;
+            break;
+
+        default:	
+            UI_DISPLAY(("Server: Unexpected event: %i", Event->oppsEvent->event));
+        	break;
+
+    }
+}
+
+/*---------------------------------------------------------------------------
+ *            mfw_btips_oppsCallback
+ *---------------------------------------------------------------------------
+ *
+ * Synopsis:  This function processes OBEX server protocol events.
+ *
+ * Return:    void
+ *
+ */
+void mfw_btips_oppsCallback(T_BTIPS_MMI_IND *para)
+{
+
+	MfwBtOppsEvent oopsBtEvent = para->data.oppsBtEvent;
+	TRACE_FUNCTION_P1("mfw_btips_oppsCallback %d", oopsBtEvent.mfwOppsEventType);
+	
+	switch(oopsBtEvent.mfwOppsEventType)
+	{
+		case OPPS_OPER_PUSH:
+			mfw_btips_signal(E_BTIPS_OPPS_PUSH_EVENT, para);
+		break;
+		
+		case OPPS_OPER_PULL:
+			mfw_btips_signal(E_BTIPS_OPPS_PULL_EVENT, para);
+		break;
+//#if 0		
+		case MFW_BTIPS_OPPS_PUSH_COMP_EVENT:
+			mfw_btips_signal(E_BTIPS_OPPS_PUSH_COMP_EVENT, para);
+		break;
+
+		case MFW_BTIPS_OPPS_PULL_COMP_EVENT:
+			mfw_btips_signal(E_BTIPS_OPPS_PULL_COMP_EVENT, para);
+//#endif
+	}
+
+}
+
+/*---------------------------------------------------------------------------
+ *            mfw_btips_oppsGoepOpName
+ *---------------------------------------------------------------------------
+ *
+ * Synopsis:  Return a pointer to the name of the current operation.
+ *
+ * Return:    ASCII String pointer.
+ *
+ */
+static const char *mfw_btips_oppsGoepOpName(GoepOperation Op)
+{
+    switch (Op) 
+	{
+    case GOEP_OPER_PUSH:
+        return "Push";
+    case GOEP_OPER_PULL:
+        return "Pull";
+    case GOEP_OPER_CONNECT:
+        return "Connect";
+    case GOEP_OPER_DISCONNECT:
+        return "Disconnect";
+    case GOEP_OPER_ABORT:
+        return "Abort";
+	case GOEP_OPER_DELETE:
+        return "Delete";
+	case GOEP_OPER_SETFOLDER:
+        return "Set Folder";
+    }
+    return "Unknown";
+}
+
+
+/*---------------------------------------------------------------------------
+ * mfw_btips_oppsSetDefaultObject()
+ *
+ * Synopsis:  Function for setting the OPPS default object.
+  *
+ * Return:    void
+ *
+ */
+//static void mfw_btips_oppsSetDefaultObject(BtlObject *obj, const char *ObName, const char* fullPath)
+static void mfw_btips_oppsSetDefaultObject(BtlObject *obj, OppsaPullUseObject useObj)
+{		
+    switch (useObj)
+	{
+		case OPPSA_PULL_USE_DEFAULT_OBJ:
+			obj->objectName 		        = (const BtlUtf8 *)OPPSA_DEFAULT_VCARD_NAME;  
+			obj->location.fsLocation.fsPath = (const BtlUtf8 *)OPPSA_DEFAULT_FULL_NAME;
+			break;
+
+		case OPPSA_PULL_USE_NEW_OBJ:
+			obj->objectName 			    = (const BtlUtf8 *)OPPSA_NEW_VCARD_NAME;  
+			obj->location.fsLocation.fsPath = (const BtlUtf8 *)OPPSA_NEW_FULL_NAME;
+			break;
+	}
+   // obj->objectName      			    = ObName;
+	//obj->location.fsLocation.fsPath     = fullPath;  
+	
+    obj->objectMimeType 			    = "text/x-vCard";
+	obj->objectLocation 			    = oppServer.objLocation;
+}
+
+/*---------------------------------------------------------------------------
+ * mfw_btips_oppsSetToMemObject()
+ *
+ * Synopsis:  Function for testing OPP from memory objects. 
+ *            Sets memory object fields prior to PULL operation
+ *
+ * Return:    void
+ *
+ */
+static void mfw_btips_oppsSetToMemObject(BtlObject *obj, char *buff)
+{			
+	obj->objectLocation                 = BTL_OBJECT_LOCATION_MEM;
+	obj->location.fsLocation.fsPath     = NULL;
+	obj->location.memLocation.memAddr   = buff;
+	obj->location.memLocation.size      = OPPSA_BUFF_MAX;		
+
+    obj->objectMimeType 		        = NULL;
+}
+
+/*---------------------------------------------------------------------------
+ * mfw_btips_oppsSetToFsObject()
+ *
+ * Synopsis:  Function for testing OPP from memory objects. 
+ *            Sets FS object
+ *
+ * Return:    void
+ *
+ */
+static void mfw_btips_oppsSetToFsObject(BtlObject *obj, char *userPushFileName, char *userPushPath)
+{			
+    U16 len;
+	/* ToDo: obj->objectName 
+    
+      [NULL]- pushed objects are saved in C:\QInbox location
+      
+      ["defaultPushed.vcf"] - pushed objects are saved in C:\QInbox location, 
+         and then rename to "defaultPushed.vcf" file.               
+     */
+    
+    //obj->objectName 			        = "defaultPushed.vcf";  
+    obj->objectName 			        = NULL;  
+    obj->objectMimeType 		        = NULL;
+    obj->objectLocation 		        = BTL_OBJECT_LOCATION_FS;
+    //obj->location.fsLocation.fsPath     = OPPSA_ACCEPT_DEFAULT_DIR;
+    if (userPushFileName[0] == '\0')
+    {
+        OS_StrCpyUtf8(userPushFileName, (const char *)OPPSA_NEW_PUSH_NAME); 
+    }
+    
+    userPushFsPath[0] = '\0';
+	OS_StrCpyUtf8(userPushFsPath, userPushPath);
+	len = OS_StrLenUtf8(userPushFsPath);
+	userPushFsPath[len] = BTHAL_FS_PATH_DELIMITER;
+	userPushFsPath[++len] = '\0';
+    OS_StrCatUtf8(userPushFsPath, userPushFileName); 
+
+    userPushFileName[0] = '\0';
+
+	obj->location.fsLocation.fsPath     = (const BtlUtf8 *)userPushFsPath;
+}
+
+/*---------------------------------------------------------------------------
+ *            OppsaUiCreateDefaultVCardFile
+ *---------------------------------------------------------------------------
+ *
+ * Synopsis:  Creates the default VCard file 
+ *
+ * Return:    void.
+ *
+ */
+static void mfw_btips_oppsCreateDefaultVCardFile(void)
+{
+	static char  content[] = "BEGIN:VCARD\nVERSION:2.1\nN:Adam;Smith\nFN:Adam Smith\nTEL;WORK;VOICE:erez972-76271234\nTEL;CELL:972-9-54-785345\n \
+     X-IRMC-LUID:0000000089112FB8F5ED98469F141223445D85EC0700651F055323C0104ABA16A3A82F42C81E000000D0841B0000B783C70B99B5BE4CAF782AB8DD188B6D0000DF0956010000\n \
+     END:VCARD";
+
+	BtFsStatus btFsStatus;
+    BthalFsFileDesc fp;
+    BTHAL_U32 pNumWritten;
+    BTHAL_INT nSize;
+    
+	/* Creates / Overwrites the current default VCard file */
+	
+    //BTHAL_FS_Remove(OPPSA_DEFAULT_FULL_NAME);
+    btFsStatus = BTHAL_FS_Open((const BTHAL_U8 *)OPPSA_DEFAULT_FULL_NAME, 
+    			BTHAL_FS_O_RDWR| BTHAL_FS_O_BINARY, (BthalFsFileDesc *)&fp);
+    if (BT_STATUS_HAL_FS_SUCCESS == btFsStatus)
+    {
+    		BTHAL_FS_Close(fp);
+		return;
+    }		
+    btFsStatus = BTHAL_FS_Open((const BTHAL_U8 *)OPPSA_DEFAULT_FULL_NAME, 
+                        BTHAL_FS_O_CREATE | BTHAL_FS_O_RDWR | BTHAL_FS_O_BINARY,  /* Create file */
+                            (BthalFsFileDesc *)&fp);
+    if (BT_STATUS_HAL_FS_SUCCESS != btFsStatus)
+    {
+        Report(("OppsaUiCreateDefaultVCardFile(): Error - could not create Default VCard file %s.", OPPSA_DEFAULT_FULL_NAME));
+        Report(("Make sure that %s directory exists !.", OPPSA_DEFAULT_FULL_DIR));
+        return;
+    }
+    
+    nSize = OS_StrLen(content);
+
+    if (BT_STATUS_HAL_FS_SUCCESS == BTHAL_FS_Write(fp, (void*)content, nSize, &pNumWritten))
+	{
+		Report(("OppsaUiCreateDefaultVCardFile(): Default VCard file \"%s\" created successfully.", OPPSA_DEFAULT_FULL_NAME));
+	}
+	else
+	{
+		Report(("OppsaUiCreateDefaultVCardFile(): Error - Unable to create default VCard file."));
+	}
+
+	
+    BTHAL_FS_Close(fp);
+
+    Report(("OppsaUiCreateDefaultVCardFile(): nSize = %d, pNumWritten = %d", nSize, pNumWritten));
+}
+
+/*******************************************************************************
+
+ $Function:     mfw_btips_oppsGetConnectDevice
+
+ $Description: Returns the TRUE when succeeds
+ $Returns:		TRUE or FALSE 
+
+ $Arguments:		
+
+*******************************************************************************/
+
+BOOL mfw_btips_oppsGetConnectedDevice (BD_ADDR *bdAddr, U8 *name)
+{
+	BtStatus status;
+	
+	
+	status = BTL_OPPS_GetConnectedDevice (oppsContext, bdAddr);
+	
+	
+	
+	
+	if (status == BT_STATUS_SUCCESS)
+	{
+		mfw_btips_bmgGetDeviceName (bdAddr, name);
+		TRACE_FUNCTION_P1("mfw_btips_oppsGetConnectDevice OPPS name %s  ",name);
+		return TRUE;
+	}
+	return FALSE;
+}
+
+
+
+#endif
+