FreeCalypso > hg > fc-magnetite
view src/ui3/mfw/mfw_BtipsOppc.c @ 624:012028896cfb
FFS dev.c, Leonardo target: Fujitsu MB84VF5F5F4J2 #if 0'ed out
The FFS code we got from TI/Openmoko had a stanza for "Fujitsu MB84VF5F5F4J2
stacked device", using a fake device ID code that would need to be patched
manually into cfgffs.c (suppressing and overriding autodetection) and using
an FFS base address in the nCS2 bank, indicating that this FFS config was
probably meant for the MCP version of Leonardo which allows for 16 MiB flash
with a second bank on nCS2.
We previously had this FFS config stanza conditionalized under
CONFIG_TARGET_LEONARDO because the base address contained therein is invalid
for other targets, but now that we actually have a Leonardo build target in
FC Magnetite, I realize that the better approach is to #if 0 out this stanza
altogether: it is already non-functional because it uses a fake device ID
code, thus it is does not add support for more Leonardo board variants,
instead it is just noise.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 22 Dec 2019 21:24:29 +0000 |
parents | e8ddbb0837ed |
children |
line wrap: on
line source
/* ========================================================= * 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_BtipsOppc.c $Revision: 1.0 $Author: Texas Instruments $Date: 26/06/07 ******************************************************************************** Description: This module provides the OPP Client APPlication functionality. ******************************************************************************** $History: Mfw_BtipsOppc.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 "osapi.h" #include "btl_common.h" #include "debug.h" //#include "../app_main.h" #include "btl_oppc.h" #include "btl_config.h" #include "bthal_fs.h" //#include "../../btl/inc/int/obstore.h" #include "obstore.h" #include "mfw_BtipsOppc.h" #include "Mfw_mfw.h" #include "mfw_Btips.h" #include "mfw_ffs.h" extern int oppc_files_count; //Array to load fileNames in content directory extern char* oppc_file_names[OPPC_MAX_FILES]; /* 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 /******************************************************************************** * * Constants * *******************************************************************************/ /******************************************************************************* * * Macro definitions * ******************************************************************************/ #define OPPCA_BUFF_MAX (1 * 512) #define BTL_CONFIG_OPP_MAX_FILE_NAME_LEN min(GOEP_MAX_UNICODE_LEN/2-2, BTHAL_FS_MAX_FILE_NAME_LENGTH) #define OPPCA_CHECK_FS_NAME_LEN(fsPath) \ (OS_StrLen(fsPath) < (BTL_CONFIG_OPP_MAX_FILE_NAME_LEN + BTHAL_FS_MAX_PATH_LENGTH + 1)) /******************************************************************************* * * OPPC External Function prototypes * ******************************************************************************/ void mfw_btips_oppcInit(void); void mfw_btips_oppcDeinit(void); void mfw_btips_oppcEncapsulatePush(const char *fsPushPath, BD_ADDR *bd_addr); void mfw_btips_oppcEncapsulatePull(const char *fsPullPath, BD_ADDR *bd_addr); void mfw_btips_oppcEncapsulateExchange(const char *fsPushPath, const char *fsPullPath, BD_ADDR *bd_addr); /*------------------------------------------------------------------------------- * OppcaCurrOperation type * * Defines the OPPCA current operation. */ typedef U8 OppcaCurrOperation; #define OPPCA_OPER_NONE 0x00 #define OPPCA_OPER_BASIC_PULL 0x01 /* Pull */ #define OPPCA_OPER_BASIC_PUSH 0x02 /* Push */ #define OPPCA_OPER_BASIC_EXCHANGE 0x03 /* Push-Pull */ #define OPPCA_OPER_ENC_PULL 0x04 /* Connect-Pull-Disconnect */ #define OPPCA_OPER_ENC_PUSH 0x05 /* Connect-Push-Disconnect */ #define OPPCA_OPER_ENC_EXCHANGE 0x06 /* Connect-Push-Pull-Disconnect */ /*------------------------------------------------------------------------------- * OppcaState type * * Defines the OPPCA current state. */ typedef U8 OppcaState; #define OPPCA_IDLE 0x00 /* OBEX and Transport disconnected */ #define OPPCA_CONNECTING 0x01 /* OBEX connecting */ #define OPPCA_TP_CONNECTED 0x02 /* Transport connected */ #define OPPCA_CONNECTED 0x03 /* OBEX connected */ #define OPPCA_DISCONNECTING 0x04 /* OBEX disconnecting */ #define OPPCA_TP_DISCONNECTING 0x05 /* Transport disconnecting */ #define OPPCA_DISABLING 0x06 /* OBEX and Transport disabling */ typedef struct _OppcaData { OppcaState state; BOOL isConnected; BOOL operationOngoing; BtSecurityLevel securityLevel; BtlObjectLocation objLocation; OppcaCurrOperation currOper; /* Memory Objects */ char pushBuff[OPPCA_BUFF_MAX]; char pullBuff[OPPCA_BUFF_MAX]; } OppcaData; /******************************************************************************** * * Globals * *******************************************************************************/ static OppcaData oppClient; static BtlOppcContext *oppcContext = 0; static char ObPushName[BTL_CONFIG_OPP_MAX_FILE_NAME_LEN + 1] = {'\0'}; static char ObPullName[BTL_CONFIG_OPP_MAX_FILE_NAME_LEN + 1] = {'\0'}; extern char push_file_name[]; /******************************************************************************* * * Internal Function prototypes * ******************************************************************************/ static void btips_oppcCallback(const BtlOppcEvent *Event); static const char *mfw_btips_oppcGoepOpName(GoepOperation Op); static BOOL mfw_btips_oppcBuildPushObject(BtlObject *objToPush, const char *fsPath, char *buff); static BOOL mfw_btips_oppcBuildPullObject(BtlObject *objToPull, const char *fsPath, char *buff); static BOOL mfw_btips_oppcConvertToMemPushObject(BtlObject *obj, const char *fsPushPathh, char *buff); static void mfw_btips_oppcSetFsPushObject(BtlObject *obj, const char *fsPushPath); static void mfw_btips_oppcSetFsPullObject(BtlObject *obj, const char *fsPullPath); static void mfw_btips_oppcSetMemPullObject(BtlObject *obj, const char *fsPullPath, char *buff); /*--------------------------------------------------------------------------- * mfw_btips_oppcInit *--------------------------------------------------------------------------- * * Synopsis: Initialize the OBEX Client for the OPP application * and the Object Store. * * Return: void * */ void mfw_btips_oppcInit(void) { BtStatus status; oppClient.state = OPPCA_IDLE; oppClient.isConnected = FALSE; oppClient.operationOngoing = FALSE; oppClient.securityLevel = BSL_NO_SECURITY; oppClient.currOper = OPPCA_OPER_NONE; oppClient.objLocation = BTL_OBJECT_LOCATION_FS; status = BTL_OPPC_Create((BtlAppHandle *)0, btips_oppcCallback, &oppClient.securityLevel, &oppcContext); TRACE_EVENT_P1("BTL_OPPC_Create() returned %s.",pBT_Status(status)); status = BTL_OPPC_Enable(oppcContext); TRACE_EVENT_P1("BTL_OPPC_Enable() returned %s.",pBT_Status(status)); } /*--------------------------------------------------------------------------- * mfw_btips_oppcDeinit *--------------------------------------------------------------------------- * * Synopsis: Deinitialize the OBEX Client protocol. * * Return: void * */ void mfw_btips_oppcDeinit(void) { BtStatus status; status = BTL_OPPC_Disable(oppcContext); Report(("BTL_OPPC_Disable() returned %s.",pBT_Status(status))); if (status == BT_STATUS_SUCCESS) { status = BTL_OPPC_Destroy(&oppcContext); Report(("BTL_OPPC_Destroy() returned %s.", pBT_Status(status))); oppClient.state = OPPCA_IDLE; oppClient.isConnected = FALSE; oppClient.operationOngoing = FALSE; } else { oppClient.state = OPPCA_DISABLING; } } /*--------------------------------------------------------------------------- * mfw_btips_oppcEncapsulatePush *--------------------------------------------------------------------------- * * Synopsis: Initiate an OBEX Object Push procedure. * Includes Connect and Disconnect from the opp server. * If the given BD_ADDR is NULL, a search is performed. * * Return: void * */ void mfw_btips_oppcEncapsulatePush(const char *fsPushPath, BD_ADDR *bd_addr) { BtStatus status; BtlObject objToPush; Report(("mfw_btips_oppcEncapsulatePush: fsPushPath = %s", fsPushPath)); if (TRUE != OPPCA_CHECK_FS_NAME_LEN(fsPushPath)) { Report(("mfw_btips_oppcEncapsulatePush: Can't push. fsPushPath too long")); return; } if (TRUE != mfw_btips_oppcBuildPushObject(&objToPush, fsPushPath, oppClient.pushBuff)) { Report(("OPPCA_BasicPull: Can't pull")); return; } status = BTL_OPPC_ConnectPushDisconnect(oppcContext, bd_addr, &objToPush); Report(("BTL_OPPC_ConnectPushDisconnect() returned %s.", pBT_Status(status))); if (status == OB_STATUS_PENDING) { Report(("mfw_btips_oppcEncapsulatePush(): Started ...")); oppClient.operationOngoing = TRUE; oppClient.currOper = OPPCA_OPER_ENC_PUSH; } } /*--------------------------------------------------------------------------- * mfw_btips_oppcEncapsulatePull *--------------------------------------------------------------------------- * * Synopsis: Initiate an OBEX Business Card Pull procedure. * Includes Connect and Disconnect from the opp server. * If the given BD_ADDR is NULL, a search is performed. * * Return: void * */ void mfw_btips_oppcEncapsulatePull(const char *fsPullPath, BD_ADDR *bd_addr) { BtStatus status; BtlObject objToPull; Report(("mfw_btips_oppcEncapsulatePull: fsPullPath = %s", fsPullPath)); if (TRUE != OPPCA_CHECK_FS_NAME_LEN(fsPullPath)) { Report(("mfw_btips_oppcEncapsulatePull: Can't pull. fsPullPath too long")); return; } if (TRUE != mfw_btips_oppcBuildPullObject(&objToPull, fsPullPath, oppClient.pullBuff)) { Report(("mfw_btips_oppcEncapsulatePull: Can't pull")); return; } status = BTL_OPPC_ConnectPullDisconnect(oppcContext, bd_addr, &objToPull); Report(("BTL_OPPC_Pull() returned %s.", pBT_Status(status))); if (status == OB_STATUS_PENDING) { Report(("mfw_btips_oppcEncapsulatePull(): Started ...")); oppClient.operationOngoing = TRUE; oppClient.currOper = OPPCA_OPER_ENC_PULL; } } /*--------------------------------------------------------------------------- * mfw_btips_oppcEncapsulateExchange *--------------------------------------------------------------------------- * * Synopsis: Initiate an OBEX Business Card Exchange procedure. * Includes Connect and Disconnect from the opp server. * If the given BD_ADDR is NULL, a search is performed. * * Return: void * */ void mfw_btips_oppcEncapsulateExchange(const char *fsPushPath, const char *fsPullPath, BD_ADDR *bd_addr) { BtStatus status; BtlObject objToPush, objToPull; Report(("mfw_btips_oppcEncapsulateExchange: fsPushPath = %s, fsPullPath = %s", fsPushPath, fsPullPath)); /* -------- Push Operation --------- */ if (TRUE != OPPCA_CHECK_FS_NAME_LEN(fsPushPath)) { Report(("mfw_btips_oppcEncapsulateExchange: Can't push. fsPushath too long")); return; } if (TRUE != mfw_btips_oppcBuildPushObject(&objToPush, fsPushPath, oppClient.pushBuff)) { Report(("mfw_btips_oppcEncapsulateExchange: Can't push")); return; } /* -------- Pull Operation --------- */ if (TRUE != OPPCA_CHECK_FS_NAME_LEN(fsPullPath)) { Report(("mfw_btips_oppcEncapsulateExchange: Can't pull. fsPullPath too long")); return; } if (TRUE != mfw_btips_oppcBuildPullObject(&objToPull, fsPullPath, oppClient.pullBuff)) { Report(("mfw_btips_oppcEncapsulateExchange: Can't pull")); return; } status = BTL_OPPC_ConnectExchangeDisconnect(oppcContext, bd_addr, &objToPush, &objToPull); Report(("BTL_OPPC_ConnectExchangeDisconnect() returned %s.", pBT_Status(status))); if (status == OB_STATUS_PENDING) { Report(("mfw_btips_oppcEncapsulateExchange(): Started ...")); oppClient.operationOngoing = TRUE; oppClient.currOper = OPPCA_OPER_ENC_EXCHANGE; } } /*--------------------------------------------------------------------------- * btips_oppcCallback *--------------------------------------------------------------------------- * * Synopsis: This function processes OBEX Client protocol events. * * Return: void * */ static void btips_oppcCallback(const BtlOppcEvent *Event) { BD_ADDR bdAddr; char addr[BDADDR_NTOA_SIZE]; BtStatus status; switch (Event->oppcEvent->event) { case OPPC_EVENT_COMPLETE: TRACE_EVENT_P1("btips_oppcCallback: The current %s is complete.", mfw_btips_oppcGoepOpName(Event->oppcEvent->oper)); switch (Event->oppcEvent->oper) { case GOEP_OPER_CONNECT: TRACE_EVENT_P1("btips_oppcCallback: Transport Connection has been established with %s", bdaddr_ntoa(&bdAddr, addr)); BTL_OPPC_GetConnectedDevice(oppcContext, &bdAddr); oppClient.state = OPPCA_CONNECTED; oppClient.isConnected = TRUE; break; case GOEP_OPER_DISCONNECT: TRACE_EVENT("btips_oppcCallback: Transport Connection has been disconnected."); oppClient.isConnected = FALSE; oppClient.state = OPPCA_IDLE; oppClient.operationOngoing = FALSE; break; case GOEP_OPER_PULL: switch(oppClient.currOper) { case OPPCA_OPER_BASIC_PULL: oppClient.operationOngoing = FALSE; break; case OPPCA_OPER_BASIC_EXCHANGE: oppClient.operationOngoing = FALSE; break; } break; case GOEP_OPER_PUSH: switch(oppClient.currOper) { case OPPCA_OPER_BASIC_PUSH: oppClient.operationOngoing = FALSE; break; } break; } break; case OPPC_EVENT_ABORTED: UI_DISPLAY(("btips_oppcCallback: %s operation failed.", mfw_btips_oppcGoepOpName(Event->oppcEvent->oper))); break; case OPPC_EVENT_TP_CONNECTED: BTL_OPPC_GetConnectedDevice(oppcContext, &bdAddr); UI_DISPLAY(("btips_oppcCallback: Transport Connection is up to %s.", bdaddr_ntoa(&bdAddr, addr))); oppClient.state = OPPCA_TP_CONNECTED; oppClient.isConnected = TRUE; break; case OPPC_EVENT_TP_DISCONNECTED: UI_DISPLAY(("btips_oppcCallback: Transport Connection has been disconnected.")); oppClient.isConnected = FALSE; oppClient.operationOngoing = FALSE; if (oppClient.state != OPPCA_DISABLING) { oppClient.state = OPPCA_IDLE; } break; case OPPC_EVENT_DISCOVERY_FAILED: UI_DISPLAY(("btips_oppcCallback: Discovery Failure.")); oppClient.state = OPPCA_IDLE; break; case OPPC_EVENT_NO_SERVICE_FOUND: UI_DISPLAY(("btips_oppcCallback: No OBEX Service Found.")); oppClient.state = OPPCA_IDLE; break; case OPPC_EVENT_OBJECT_PROGRESS: UI_DISPLAY(("btips_oppcCallback: progress bar ...")); break; case OPPC_EVENT_DISABLED: UI_DISPLAY(("btips_oppcCallback: Receiving OPPC_EVENT_DISABLED.")); if (OPPCA_DISABLING == oppClient.state) { status = BTL_OPPC_Destroy(&oppcContext); Report(("BTL_OPPC_Destroy() returned %s.", pBT_Status(status))); } oppClient.state = OPPCA_IDLE; break; default: UI_DISPLAY(("btips_oppcCallback: Unexpected event: %i", Event->oppcEvent->event)); break; } } /*--------------------------------------------------------------------------- * mfw_btips_oppcGoepOpName *--------------------------------------------------------------------------- * * Synopsis: Return a pointer to the name of the current operation. * * Return: ASCII String pointer. * */ static const char *mfw_btips_oppcGoepOpName(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_oppcBuildPushObject() * * Synopsis: Build push object * * Return: TRUE - success FALSE - failed * */ static BOOL mfw_btips_oppcBuildPushObject(BtlObject *objToPush, const char *fsPath, char *buff) { if (oppClient.objLocation == BTL_OBJECT_LOCATION_MEM) { if (TRUE != mfw_btips_oppcConvertToMemPushObject(objToPush, fsPath, buff)) { return FALSE; } } else if (oppClient.objLocation == BTL_OBJECT_LOCATION_FS) { mfw_btips_oppcSetFsPushObject(objToPush, fsPath); } return TRUE; } /*--------------------------------------------------------------------------- * mfw_btips_oppcBuildPullObject() * * Synopsis: Build push object * * Return: TRUE - success FALSE - failed * */ static BOOL mfw_btips_oppcBuildPullObject(BtlObject *objToPull, const char *fsPath, char *buff) { if (oppClient.objLocation == BTL_OBJECT_LOCATION_MEM) { mfw_btips_oppcSetMemPullObject(objToPull, fsPath, buff); } else if (oppClient.objLocation == BTL_OBJECT_LOCATION_FS) { mfw_btips_oppcSetFsPullObject(objToPull, fsPath); } return TRUE; } /*--------------------------------------------------------------------------- * mfw_btips_oppcConvertToMemPushObject() * * Synopsis: Function for testing OPP from memory objects. Convert file object to memory object by reading the * file and modifying proper fileds uses a static buffer, so only one such object can be supported at a time * maximum file size is 512 KB * * Return: void * */ static BOOL mfw_btips_oppcConvertToMemPushObject(BtlObject *obj, const char *fsPushPath, char *buff) { BtFsStatus btFsStatus; BthalFsFileDesc fd; BTHAL_U32 numRead; BthalFsStat FileStat; btFsStatus = BTHAL_FS_Stat((const BTHAL_U8 *)fsPushPath, &FileStat); if(btFsStatus != BT_STATUS_HAL_FS_SUCCESS) { Report(("Client: Error - File was not found %s", fsPushPath)); return FALSE; } if (FileStat.size > OPPCA_BUFF_MAX) { Report(("Client: Error pushed file > %d bytes", OPPCA_BUFF_MAX)); return FALSE; } btFsStatus = BTHAL_FS_Open((const BTHAL_U8 *)fsPushPath, BTHAL_FS_O_RDONLY | BTHAL_FS_O_BINARY, /* Read Only */ (BthalFsFileDesc *)&fd); if (btFsStatus == BT_STATUS_HAL_FS_SUCCESS) { btFsStatus = BTHAL_FS_Read(fd, oppClient.pushBuff, OPPCA_BUFF_MAX, &numRead); if (btFsStatus == BT_STATUS_HAL_FS_SUCCESS) { Report(("Client: fsPushPath = %s, numRead = %d", fsPushPath, numRead)); } BTHAL_FS_Close(fd); /* Extract object name from fsPath */ OBSTORE_ExtractObjName(fsPushPath, ObPushName); obj->objectLocation = BTL_OBJECT_LOCATION_MEM; obj->objectName = ObPushName; obj->location.memLocation.memAddr = buff; obj->location.memLocation.size = numRead; obj->objectMimeType = "text/x-vCard"; } else { Report(("Client: Error - could not open %s", fsPushPath)); return FALSE; } return TRUE; } /*--------------------------------------------------------------------------- * mfw_btips_oppcSetMemPullObject() * * Synopsis: Function for testing OPP from memory objects. * Sets memory object fields prior to PULL operation * * Return: void * */ static void mfw_btips_oppcSetMemPullObject(BtlObject *obj, const char *fsPullPath, char *buff) { OBSTORE_ExtractObjName(fsPullPath, ObPullName); obj->objectLocation = BTL_OBJECT_LOCATION_MEM; obj->location.fsLocation.fsPath = NULL; obj->location.memLocation.memAddr = buff; obj->location.memLocation.size = OPPCA_BUFF_MAX; obj->objectMimeType = "text/x-vCard";; obj->objectName = ObPullName; } /*--------------------------------------------------------------------------- * mfw_btips_oppcSetFsPushObject() * * Synopsis: Function for testing OPP from FS Push objects. * * Return: void * */ static void mfw_btips_oppcSetFsPushObject(BtlObject *obj, const char *fsPushPath) { OBSTORE_ExtractObjName(fsPushPath, ObPushName); obj->objectName = ObPushName; obj->location.fsLocation.fsPath = fsPushPath; /* This should be provided by the user (i.e. this is just an example) */ obj->objectMimeType = "text/x-vCard"; obj->objectLocation = BTL_OBJECT_LOCATION_FS; } /*--------------------------------------------------------------------------- * mfw_btips_oppcSetFsPullObject() * * Synopsis: Function for testing OPP from FS Pull objects. * * Return: void * */ static void mfw_btips_oppcSetFsPullObject(BtlObject *obj, const char *fsPullPath) { OBSTORE_ExtractObjName(fsPullPath, ObPullName); obj->objectName = ObPullName; obj->location.fsLocation.fsPath = fsPullPath; obj->objectMimeType = "text/x-vCard"; obj->objectLocation = BTL_OBJECT_LOCATION_FS; } /*--------------------------------------------------------------------------- * mfw_btips_oppcCallback *--------------------------------------------------------------------------- * * Synopsis: This function processes OBEX client protocol events. * * Return: void * */ void mfw_btips_oppcCallback(T_BTIPS_MMI_IND *para) { } /******************************************************************************* $Function: mfw_btips_oppcPopulateFiles $Description:Populates file names into the array $Returns: The count of the files in the directory $Arguments: file_names:Pointer to the arrayto store file names max_files_count:Max file counts to be stored in array *******************************************************************************/ int mfw_btips_oppcPopulateFiles(char **file_names, int max_files_count,char* dir_name_p) { T_FFS_DIR dir = {0}; char dest_name_p[100] = ""; int i, files_count = 0; char *fileExt; TRACE_FUNCTION_P1("mfw_btips_oppcPopulateFiles from directory %s", dir_name_p); if (ffs_opendir (dir_name_p, &dir) <= 0) { TRACE_ERROR("Could not open Dir"); files_count = 0; } //Release previous allocated memory before allocating again mfw_btips_oppcUnpopulateFiles(file_names); //read the file names //file_count will be used to populate the array index for (i = 0; ffs_readdir (&dir, dest_name_p, 100) > 0x0; i++) { if((strcmp(dest_name_p, ".") == 0) || (strcmp(dest_name_p, "..") == 0)) continue; TRACE_FUNCTION_P1("Reading Dir - %s",dest_name_p); (file_names[files_count]) = (char*)mfwAlloc(strlen(dest_name_p) + 1); if(file_names[files_count] != NULL) { #if 0 //Retrieve file extension.Store only the supported file formats in array fileExt =mfw_btips_oppcGetExtension(dest_name_p); //List the MP3 files also.Mp3 files hsould not be listed or ULC if ( (strcmp(fileExt, "mp3") == 0)) { strcpy (file_names[files_count], dest_name_p); files_count++; } else if ( (strcmp(fileExt, "wav")== 0)) { strcpy (file_names[files_count], dest_name_p); files_count++; } else if ( (strcmp(fileExt, "pcm")== 0)) { strcpy (file_names[files_count], dest_name_p); files_count++; } else if(files_count >= max_files_count) break; #endif strcpy (file_names[files_count], dest_name_p); TRACE_FUNCTION_P1("file_names - %s", file_names[files_count]); files_count++; if(files_count >= max_files_count) break; } else { //files_count = 0; } } //Closing the directory aa per the new FFS logic ffs_closedir(dir); TRACE_EVENT_P1("read files_count is %d",files_count); TRACE_FUNCTION_P1("read files_count is %d",files_count); return files_count; } /******************************************************************************* $Function: mfw_btips_oppcUnpopulateFiles $Description:Frees the memory allocated for the array $Returns: None $Arguments: file_names:Pointer to the arrayto store file names *******************************************************************************/ void mfw_btips_oppcUnpopulateFiles(char **file_names) { int i; TRACE_FUNCTION("mfw_btips_oppcUnpopulateFiles"); mfw_BtipsReport("mfw_btips_oppcUnpopulateFiles"); //Free the allocated memory for file names for (i = 0; i<OPPC_MAX_FILES; i++) { if(file_names[i]) { mfwFree((U8 *)file_names[i],(U16)strlen(file_names[i]) + 1); } file_names[i]=NULL; } } /******************************************************************************* $Function: mfw_btips_oppcGetExtension $Description: public function to retrieve the extension of a file $Returns:Extention of the filename $Arguments: scr- Filename *******************************************************************************/ char *mfw_btips_oppcGetExtension(char *src) { int i,len; TRACE_FUNCTION("mfw_btips_oppcGetExtension"); mfw_BtipsReport("mfw_btips_oppcGetExtension"); len = strlen(src); for(i = 0; i < len; i++){ if(src[i] == '.'){ return (src+i+1); } } return (src+i); } /******************************************************************************* $Function: mfw_btips_oppcGetNumFiles $Description: returns the file count $Returns: Count of the Midi files $Arguments: None *******************************************************************************/ int mfw_btips_oppcGetNumFiles(void) { TRACE_FUNCTION_P1("mfw_btips_oppcGetNumFiles -oppc_files_count - %d", oppc_files_count); if(oppc_files_count<=0) return 0; else return oppc_files_count; } /******************************************************************************* $Function: mfw_btips_oppcGetFileName $Description: Returns the file name $Returns: Name of the file $Arguments: index:The index of the file, whose name has to be retrieved *******************************************************************************/ char* mfw_btips_oppcGetFileName(UBYTE index) { TRACE_FUNCTION_P2("oppc_file_names[%d] is %s",index,(char *)oppc_file_names[index]); return (char *) oppc_file_names[index]; } /******************************************************************************* $Function: mfw_btips_oppcGetConnectDevice $Description: Returns the TRUE when succeeds $Returns: TRUE or FALSE $Arguments: *******************************************************************************/ BOOL mfw_btips_oppcGetConnectedDevice (BD_ADDR *bdAddr, U8 *name) { BtStatus status; char bdaddrstring[BDADDR_NTOA_SIZE]; status = BTL_OPPC_GetConnectedDevice (oppcContext, bdAddr); bdaddr_ntoa(bdAddr,bdaddrstring); TRACE_FUNCTION_P1("mfw_btips_ftpsGetConnectDevice OPPC %s ",bdaddrstring); if (status == BT_STATUS_SUCCESS) { mfw_btips_bmgGetDeviceName (bdAddr, name); TRACE_FUNCTION_P1("mfw_btips_oppcGetConnectDevice OPPC name %s ",name); return TRUE; } return FALSE; } void mfw_btips_oppc_Disconnect(void) { BtStatus status; if (oppClient.isConnected == TRUE) { status = BTL_OPPC_Disconnect(oppcContext); Report(("BTL_OPPC_Disconnect() returned %s.", pBT_Status(status))); } else { Report(("mfw_btips_oppc_Disconnect: Client is not connected!")); } } #endif