diff options
Diffstat (limited to 'bta/include/bta_fs_co.h')
-rw-r--r-- | bta/include/bta_fs_co.h | 690 |
1 files changed, 690 insertions, 0 deletions
diff --git a/bta/include/bta_fs_co.h b/bta/include/bta_fs_co.h new file mode 100644 index 0000000..6b068df --- /dev/null +++ b/bta/include/bta_fs_co.h @@ -0,0 +1,690 @@ +/***************************************************************************** +** +** Name: bta_fs_co.h +** +** Description: This is the interface file for the synchronization +** server call-out functions. +** +** Copyright (c) 2003-2009, Broadcom Corp., All Rights Reserved. +** Broadcom Bluetooth Core. Proprietary and confidential. +** +*****************************************************************************/ +#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 */ |