/****************************************************************************** * * Copyright (C) 2003-2012 Broadcom Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ******************************************************************************/ /****************************************************************************** * * This is the interface file for the synchronization server call-out * functions. * ******************************************************************************/ #ifndef BTA_FS_CO_H #define BTA_FS_CO_H #include <time.h> #include "bta_api.h" #include "goep_fs.h" #include "obx_api.h" /***************************************************************************** ** Constants and Data Types *****************************************************************************/ #ifndef BTA_FS_CO_MAX_SSN_ENTRIES #define BTA_FS_CO_MAX_SSN_ENTRIES 10 #endif /* Maximum path length supported by FS_CO */ #ifndef BTA_FS_CO_PATH_LEN #define BTA_FS_CO_PATH_LEN 294 #endif #ifndef BTA_FS_CO_TEST_ROOT #define BTA_FS_CO_TEST_ROOT "test_files" #endif #define BTA_FS_CO_TEST_TYPE_NONE 0 #define BTA_FS_CO_TEST_TYPE_REJECT 1 #define BTA_FS_CO_TEST_TYPE_SUSPEND 2 #ifndef BTA_FS_CO_TEST_AB_END #define BTA_FS_CO_TEST_AB_END BTA_FS_CO_TEST_TYPE_NONE #endif /************************** ** Common Definitions ***************************/ /* Status codes returned by call-out functions, or in call-in functions as status */ #define BTA_FS_CO_OK GOEP_OK #define BTA_FS_CO_FAIL GOEP_FAIL /* Used to pass all other errors */ #define BTA_FS_CO_EACCES GOEP_EACCES #define BTA_FS_CO_ENOTEMPTY GOEP_ENOTEMPTY #define BTA_FS_CO_EOF GOEP_EOF #define BTA_FS_CO_EODIR GOEP_EODIR #define BTA_FS_CO_ENOSPACE GOEP_ENOSPACE/* Returned in bta_fs_ci_open if no room */ #define BTA_FS_CO_EIS_DIR GOEP_EIS_DIR #define BTA_FS_CO_RESUME GOEP_RESUME /* used in ci_open, on resume */ #define BTA_FS_CO_NONE GOEP_NONE /* used in ci_open, on resume (no file to resume) */ typedef UINT16 tBTA_FS_CO_STATUS; /* the index to the permission flags */ #define BTA_FS_PERM_USER 0 #define BTA_FS_PERM_GROUP 1 #define BTA_FS_PERM_OTHER 2 /* max number of the permission flags */ #define BTA_FS_PERM_SIZE 3 /* Flags passed to the open function (bta_fs_co_open) ** Values are OR'd together. (First 3 are ** mutually exclusive. */ #define BTA_FS_O_RDONLY GOEP_O_RDONLY #define BTA_FS_O_WRONLY GOEP_O_WRONLY #define BTA_FS_O_RDWR GOEP_O_RDWR #define BTA_FS_O_CREAT GOEP_O_CREAT #define BTA_FS_O_EXCL GOEP_O_EXCL #define BTA_FS_O_TRUNC GOEP_O_TRUNC #define BTA_FS_O_MODE_MASK(x) (((UINT16)(x)) & 0x0003) /* Origin for the bta_fs_co_seek function */ #define BTA_FS_SEEK_SET GOEP_SEEK_SET #define BTA_FS_SEEK_CUR GOEP_SEEK_CUR #define BTA_FS_SEEK_END GOEP_SEEK_END /* mode field in bta_fs_co_access callout */ #define BTA_FS_ACC_EXIST GOEP_ACC_EXIST #define BTA_FS_ACC_READ GOEP_ACC_READ #define BTA_FS_ACC_RDWR GOEP_ACC_RDWR #define BTA_FS_LEN_UNKNOWN GOEP_LEN_UNKNOWN #define BTA_FS_INVALID_FD GOEP_INVALID_FD #define BTA_FS_INVALID_APP_ID (0xFF) /* this app_id is reserved */ /* mode field in tBTA_FS_DIRENTRY (OR'd together) */ #define BTA_FS_A_RDONLY GOEP_A_RDONLY #define BTA_FS_A_DIR GOEP_A_DIR /* Entry is a sub directory */ #define BTA_FS_CTIME_LEN GOEP_CTIME_LEN /* Creation time "yyyymmddTHHMMSSZ" */ /* Return structure type for a directory entry */ typedef struct { UINT32 refdata; /* holder for OS specific data used to get next entry */ UINT32 filesize; char crtime[BTA_FS_CTIME_LEN]; /* "yyyymmddTHHMMSSZ", or "" if none */ char *p_name; /* Contains the addr of memory to copy name into */ UINT8 mode; /* BTA_FS_A_RDONLY and/or BTA_FS_A_DIR */ } tBTA_FS_DIRENTRY; /* session state */ enum { BTA_FS_CO_SESS_ST_NONE, BTA_FS_CO_SESS_ST_ACTIVE, BTA_FS_CO_SESS_ST_SUSPEND, BTA_FS_CO_SESS_ST_RESUMING }; typedef UINT8 tBTA_FS_CO_SESS_ST; /* a data type to keep an array of ssn/file offset - the info can be saved to NV */ typedef struct { char path[BTA_FS_CO_PATH_LEN + 1]; /* the "current path". path[0]==0-> root */ char file[BTA_FS_CO_PATH_LEN + 1]; /* file[0] !=0 on resume -> the previous suspended session had opened files */ int oflags; /* the flag to open the file */ BD_ADDR bd_addr; UINT8 sess_info[OBX_SESSION_INFO_SIZE]; UINT32 offset; /* last file offset */ UINT32 timeout; /* the timeout value on suspend */ time_t suspend_time; /* the time of suspend */ UINT16 nbytes; /* number of bytes for last read/write */ UINT8 ssn; UINT8 info; /* info for BTA on the client side */ UINT8 app_id; tBTA_FS_CO_SESS_ST sess_st; } tBTA_FS_CO_SESSION; /***************************************************************************** ** Function Declarations *****************************************************************************/ /************************** ** Common Functions ***************************/ /******************************************************************************* ** ** Function bta_fs_co_init ** ** Description This function is executed as a part of the start up sequence ** to make sure the control block is initialized. ** ** Parameters void. ** ** Returns void ** ** *******************************************************************************/ BTA_API extern void bta_fs_co_init(void); /******************************************************************************* ** ** Function bta_fs_co_open ** ** Description This function is executed by BTA when a file is opened. ** The phone uses this function to open ** a file for reading or writing. ** ** Parameters p_path - Fully qualified path and file name. ** oflags - permissions and mode (see constants above) ** size - size of file to put (0 if unavailable or not applicable) ** evt - event that must be passed into the call-in function. ** app_id - application ID specified in the enable functions. ** It can be used to identify which profile is the caller ** of the call-out function. ** ** Returns void ** ** Note: Upon completion of the request, a file descriptor (int), ** if successful, and an error code (tBTA_FS_CO_STATUS) ** are returned in the call-in function, bta_fs_ci_open(). ** *******************************************************************************/ BTA_API extern void bta_fs_co_open(const char *p_path, int oflags, UINT32 size, UINT16 evt, UINT8 app_id); /******************************************************************************* ** ** Function bta_fs_co_session_info ** ** Description This function is executed by BTA when a reliable session is ** established (p_sess_info != NULL) or ended (p_sess_info == NULL). ** ** Parameters bd_addr - the peer address ** p_sess_info - the session ID and related information. ** app_id - application ID specified in the enable functions. ** It can be used to identify which profile is the caller ** of the call-out function. ** ** Returns void ** *******************************************************************************/ BTA_API extern void bta_fs_co_session_info(BD_ADDR bd_addr, UINT8 *p_sess_info, UINT8 ssn, tBTA_FS_CO_SESS_ST new_st, char *p_path, UINT8 *p_info, UINT8 app_id); /******************************************************************************* ** ** Function bta_fs_co_resume_op ** ** Description This function is executed by BTA when a reliable session is ** resumed and there was an interrupted operation. ** ** Parameters offset - the session ID and related information. ** evt - event that must be passed into the call-in function. ** app_id - application ID specified in the enable functions. ** It can be used to identify which profile is the caller ** of the call-out function. ** ** Returns void ** *******************************************************************************/ BTA_API extern void bta_fs_co_resume_op(UINT32 offset, UINT16 evt, UINT8 app_id); /******************************************************************************* ** ** Function bta_fs_co_suspend ** ** Description This function is executed by BTA when a reliable session is ** suspended. ** ** Parameters bd_addr - the peer address ** ssn - the session sequence number. ** info - the BTA specific information (like last active operation). ** p_offset- the location to receive object offset of the suspended session ** app_id - application ID specified in the enable functions. ** It can be used to identify which profile is the caller ** of the call-out function. ** ** Returns void ** *******************************************************************************/ BTA_API extern void bta_fs_co_suspend(BD_ADDR bd_addr, UINT8 *p_sess_info, UINT8 ssn, UINT32 *p_timeout, UINT32 *p_offset, UINT8 info, UINT8 app_id); /******************************************************************************* ** ** Function bta_fs_co_resume ** ** Description This function is executed by BTA when resuming a session. ** This is used to retrieve the session ID and related information ** ** Parameters evt - event that must be passed into the call-in function. ** app_id - application ID specified in the enable functions. ** It can be used to identify which profile is the caller ** of the call-out function. ** ** Returns void ** ** Note: Upon completion of the request, the related session information, ** if successful, and an error code (tBTA_FS_CO_STATUS) ** are returned in the call-in function, bta_fs_ci_resume(). ** *******************************************************************************/ BTA_API extern void bta_fs_co_resume(UINT16 evt, UINT8 app_id); /******************************************************************************* ** ** Function bta_fs_co_sess_ssn ** ** Description This function is executed by BTA when resuming a session. ** This is used to inform call-out module if the ssn/file offset ** needs to be adjusted. ** ** Parameters ssn - the session sequence number of the first request ** after resume. ** app_id - application ID specified in the enable functions. ** It can be used to identify which profile is the caller ** of the call-out function. ** ** Returns void ** *******************************************************************************/ BTA_API extern void bta_fs_co_sess_ssn(int fd, UINT8 ssn, UINT8 app_id); /******************************************************************************* ** ** Function bta_fs_co_setdir ** ** Description This function is executed by BTA when the server changes the ** local path ** ** Parameters p_path - the new path. ** app_id - application ID specified in the enable functions. ** It can be used to identify which profile is the caller ** of the call-out function. ** ** Returns void ** *******************************************************************************/ BTA_API extern void bta_fs_co_setdir(const char *p_path, UINT8 app_id); /******************************************************************************* ** ** Function bta_fs_co_close ** ** Description This function is called by BTA when a connection to a ** client is closed. ** ** Parameters fd - file descriptor of file to close. ** app_id - application ID specified in the enable functions. ** It can be used to identify which profile is the caller ** of the call-out function. ** ** Returns (tBTA_FS_CO_STATUS) status of the call. ** [BTA_FS_CO_OK if successful], ** [BTA_FS_CO_FAIL if failed ] ** *******************************************************************************/ BTA_API extern tBTA_FS_CO_STATUS bta_fs_co_close(int fd, UINT8 app_id); /******************************************************************************* ** ** Function bta_fs_co_read ** ** Description This function is called by BTA to read in data from the ** previously opened file on the phone. ** ** Parameters fd - file descriptor of file to read from. ** p_buf - buffer to read the data into. ** nbytes - number of bytes to read into the buffer. ** evt - event that must be passed into the call-in function. ** ssn - session sequence number. Ignored, if bta_fs_co_open ** was not called with BTA_FS_CO_RELIABLE. ** app_id - application ID specified in the enable functions. ** It can be used to identify which profile is the caller ** of the call-out function. ** ** Returns void ** ** Note: Upon completion of the request, bta_fs_ci_read() is ** called with the buffer of data, along with the number ** of bytes read into the buffer, and a status. The ** call-in function should only be called when ALL requested ** bytes have been read, the end of file has been detected, ** or an error has occurred. ** *******************************************************************************/ BTA_API extern void bta_fs_co_read(int fd, UINT8 *p_buf, UINT16 nbytes, UINT16 evt, UINT8 ssn, UINT8 app_id); /******************************************************************************* ** ** Function bta_fs_co_write ** ** Description This function is called by io to send file data to the ** phone. ** ** Parameters fd - file descriptor of file to write to. ** p_buf - buffer to read the data from. ** nbytes - number of bytes to write out to the file. ** evt - event that must be passed into the call-in function. ** ssn - session sequence number. Ignored, if bta_fs_co_open ** was not called with BTA_FS_CO_RELIABLE. ** app_id - application ID specified in the enable functions. ** It can be used to identify which profile is the caller ** of the call-out function. ** ** Returns void ** ** Note: Upon completion of the request, bta_fs_ci_write() is ** called with the file descriptor and the status. The ** call-in function should only be called when ALL requested ** bytes have been written, or an error has been detected, ** *******************************************************************************/ BTA_API extern void bta_fs_co_write(int fd, const UINT8 *p_buf, UINT16 nbytes, UINT16 evt, UINT8 ssn, UINT8 app_id); /******************************************************************************* ** ** Function bta_fs_co_seek ** ** Description This function is called by io to move the file pointer ** of a previously opened file to the specified location for ** the next read or write operation. ** ** Parameters fd - file descriptor of file. ** offset - Number of bytes from origin. ** origin - Initial position: BTA_FS_SEEK_SET, BTA_FS_SEEK_CUR, ** or BTA_FS_SEEK_END. ** ** Returns void ** *******************************************************************************/ BTA_API extern void bta_fs_co_seek (int fd, INT32 offset, INT16 origin, UINT8 app_id); /******************************************************************************* ** ** Function bta_fs_co_access ** ** Description This function is called to check the existence of a file or ** directory. ** ** Parameters p_path - (input) file or directory to access (fully qualified path). ** mode - (input) [BTA_FS_ACC_EXIST, BTA_FS_ACC_READ, or BTA_FS_ACC_RDWR] ** p_is_dir - (output) returns TRUE if p_path specifies a directory. ** app_id - (input) application ID specified in the enable functions. ** It can be used to identify which profile is the caller ** of the call-out function. ** ** Returns (tBTA_FS_CO_STATUS) status of the call. ** [BTA_FS_CO_OK if it exists] ** [BTA_FS_CO_EACCES if permissions are wrong] ** [BTA_FS_CO_FAIL if it does not exist] ** *******************************************************************************/ BTA_API extern tBTA_FS_CO_STATUS bta_fs_co_access(const char *p_path, int mode, BOOLEAN *p_is_dir, UINT8 app_id); /******************************************************************************* ** ** Function bta_fs_co_mkdir ** ** Description This function is called to create a directory with ** the pathname given by path. The pathname is a null terminated ** string. All components of the path must already exist. ** ** Parameters p_path - (input) name of directory to create (fully qualified path). ** app_id - (input) application ID specified in the enable functions. ** It can be used to identify which profile is the caller ** of the call-out function. ** ** Returns (tBTA_FS_CO_STATUS) status of the call. ** [BTA_FS_CO_OK if successful] ** [BTA_FS_CO_FAIL if unsuccessful] ** *******************************************************************************/ BTA_API extern tBTA_FS_CO_STATUS bta_fs_co_mkdir(const char *p_path, UINT8 app_id); /******************************************************************************* ** ** Function bta_fs_co_rmdir ** ** Description This function is called to remove a directory whose ** name is given by path. The directory must be empty. ** ** Parameters p_path - (input) name of directory to remove (fully qualified path). ** app_id - (input) application ID specified in the enable functions. ** It can be used to identify which profile is the caller ** of the call-out function. ** ** Returns (tBTA_FS_CO_STATUS) status of the call. ** [BTA_FS_CO_OK if successful] ** [BTA_FS_CO_EACCES if read-only] ** [BTA_FS_CO_ENOTEMPTY if directory is not empty] ** [BTA_FS_CO_FAIL otherwise] ** *******************************************************************************/ BTA_API extern tBTA_FS_CO_STATUS bta_fs_co_rmdir(const char *p_path, UINT8 app_id); /******************************************************************************* ** ** Function bta_fs_co_unlink ** ** Description This function is called by to remove a file whose name ** is given by p_path. ** ** Parameters p_path - (input) name of file to remove (fully qualified path). ** app_id - (input) application ID specified in the enable functions. ** It can be used to identify which profile is the caller ** of the call-out function. ** ** Returns (tBTA_FS_CO_STATUS) status of the call. ** [BTA_FS_CO_OK if successful] ** [BTA_FS_CO_EACCES if read-only] ** [BTA_FS_CO_FAIL otherwise] ** *******************************************************************************/ BTA_API extern tBTA_FS_CO_STATUS bta_fs_co_unlink(const char *p_path, UINT8 app_id); /******************************************************************************* ** ** Function bta_fs_co_getdirentry ** ** Description This function is called to retrieve a directory entry for the ** specified path. The first/next directory should be filled ** into the location specified by p_entry. ** ** Parameters p_path - directory to search (Fully qualified path) ** first_item - TRUE if first search, FALSE if next search ** (p_cur contains previous) ** p_entry (input/output) - Points to last entry data (valid when ** first_item is FALSE) ** evt - event that must be passed into the call-in function. ** app_id - application ID specified in the enable functions. ** It can be used to identify which profile is the caller ** of the call-out function. ** ** Returns void ** ** Note: Upon completion of the request, the status is passed ** in the bta_fs_ci_direntry() call-in function. ** BTA_FS_CO_OK is returned when p_entry is valid, ** BTA_FS_CO_EODIR is returned when no more entries [finished] ** BTA_FS_CO_FAIL is returned if an error occurred ** *******************************************************************************/ BTA_API extern void bta_fs_co_getdirentry(const char *p_path, BOOLEAN first_item, tBTA_FS_DIRENTRY *p_entry, UINT16 evt, UINT8 app_id); /******************************************************************************* ** ** Function bta_fs_co_copy ** ** Description This function is called to copy a file/directory whose ** name is given by p_src_path to p_dest_path. ** ** Parameters p_src_path - (input) name of file/directory to be copied (fully qualified path). ** p_dest_path - (input) new name of file/directory(fully qualified path). ** p_perms - the permission of the new object. ** evt - event that must be passed into the call-in function. ** app_id - (input) application ID specified in the enable functions. ** It can be used to identify which profile is the caller ** of the call-out function. ** ** Returns (tBTA_FS_CO_STATUS) status of the call. ** [BTA_FS_CO_OK if successful] ** [BTA_FS_CO_EIS_DIR if p_src_path is a folder] ** [BTA_FS_CO_EACCES if p_dest_path already exists or could not be created (invalid path); ** or p_src_path is a directory and p_dest_path specifies a different path. ] ** [BTA_FS_CO_FAIL otherwise] ** *******************************************************************************/ BTA_API extern void bta_fs_co_copy(const char *p_src_path, const char *p_dest_path, UINT8 *p_perms, UINT16 evt, UINT8 app_id); /******************************************************************************* ** ** Function bta_fs_co_rename ** ** Description This function is called to move a file/directory whose ** name is given by p_src_path to p_dest_path. ** ** Parameters p_src_path - (input) name of file/directory to be moved (fully qualified path). ** p_dest_path - (input) new name of file/directory(fully qualified path). ** p_perms - the permission of the new object. ** app_id - (input) application ID specified in the enable functions. ** It can be used to identify which profile is the caller ** of the call-out function. ** ** Returns (tBTA_FS_CO_STATUS) status of the call. ** [BTA_FS_CO_OK if successful] ** [BTA_FS_CO_EACCES if p_dest_path already exists or could not be created (invalid path); ** or p_src_path is a directory and p_dest_path specifies a different path. ] ** [BTA_FS_CO_FAIL otherwise] ** *******************************************************************************/ BTA_API extern void bta_fs_co_rename(const char *p_src_path, const char *p_dest_path, UINT8 *p_perms, UINT16 evt, UINT8 app_id); /******************************************************************************* ** ** Function bta_fs_co_set_perms ** ** Description This function is called to set the permission a file/directory ** with name as p_src_path. ** ** Parameters p_src_path - (input) name of file/directory to set permission (fully qualified path). ** p_perms - the permission . ** app_id - (input) application ID specified in the enable functions. ** It can be used to identify which profile is the caller ** of the call-out function. ** ** Returns (tBTA_FS_CO_STATUS) status of the call. ** [BTA_FS_CO_OK if successful] ** [BTA_FS_CO_EACCES if p_dest_path already exists or could not be created (invalid path); ** or p_src_path is a directory and p_dest_path specifies a different path. ] ** [BTA_FS_CO_FAIL otherwise] ** *******************************************************************************/ BTA_API extern void bta_fs_co_set_perms(const char *p_src_path, UINT8 *p_perms, UINT16 evt, UINT8 app_id); /******************************************************************************* ** ** Function bta_fs_co_sess_fopen ** ** Description This function is called by bta_fs_co_open to keep track of ** the opened file (for reliable session suspend/resume.) ** ** Parameters p_path - Fully qualified path and file name. ** oflags - permissions and mode (see constants above) ** app_id - application ID specified in the enable functions. ** It can be used to identify which profile is the caller ** of the call-out function. ** ** Returns void ** *******************************************************************************/ BTA_API extern void bta_fs_co_sess_fopen(const char *p_path, int oflags, UINT8 app_id); /******************************************************************************* ** ** Function bta_fs_co_sess_fclose ** ** Description This function is called by bta_fs_co_close ** ** Parameters app_id - application ID specified in the enable functions. ** It can be used to identify which profile is the caller ** of the call-out function. ** ** Returns void ** *******************************************************************************/ BTA_API extern void bta_fs_co_sess_fclose(UINT8 app_id); /******************************************************************************* ** ** Function bta_fs_co_sess_offset ** ** Description This function is called by bta_fs_co_write to keep track of ** the last file offset (Only the receiving side needs to keep ** track of the file offset) ** ** Returns void ** *******************************************************************************/ BTA_API extern void bta_fs_co_sess_offset(UINT8 ssn, INT32 pos, UINT16 nbytes, UINT8 app_id); /******************************************************************************* ** ** Function bta_fs_co_suspended_addr ** ** Description find the peer address of the suspended session control block ** for the given an app_id. ** ** Returns the control block found. ** *******************************************************************************/ BTA_API extern UINT8 *bta_fs_co_suspended_addr(UINT8 app_id); /******************************************************************************* ** ** Function bta_fs_co_num_suspended_session ** ** Description find the number of suspended session control blocks for the ** given an app_id. ** ** Returns the number of control blocks found. ** *******************************************************************************/ BTA_API extern UINT8 bta_fs_co_num_suspended_session(UINT8 app_id); /******************************************************************************* ** ** Function bta_fs_co_get_active_session ** ** Description find the active session control block for the given an app_id. ** ** Returns the control block found. ** *******************************************************************************/ BTA_API extern tBTA_FS_CO_SESSION *bta_fs_co_get_active_session(UINT8 app_id); /******************************************************************************* ** ** Function bta_fs_co_init_db ** ** Description Initialize the session control blocks for platform. ** ** Returns void ** *******************************************************************************/ BTA_API extern void bta_fs_co_init_db (tBTA_FS_CO_SESSION *p_first); /******************************************************************************* ** ** Function bta_fs_convert_oflags ** ** Description This function converts the open flags from BTA into MFS. ** ** Returns BTA FS status value. ** *******************************************************************************/ BTA_API extern int bta_fs_convert_bta_oflags(int bta_oflags); #endif /* BTA_FS_CO_H */