MXC_A39_20240320/SW/components/btdm/include/pbap_api.h

1206 lines
45 KiB
C
Raw Permalink Normal View History

2024-03-07 16:46:43 +08:00
#ifndef __PBAP_API_H
#define __PBAP_API_H
#include "bt_types.h"
#include "sec_api.h"
#include "sdp_api.h"
/*---------------------------------------------------------------------------
* PBAP_MAX_APP_PARMS_LEN Constant
*
* Defines the maximum length of the application parameter header information
* used within PBAP.
*
* The default value is 30.
*/
#ifndef PBAP_MAX_APP_PARMS_LEN
#define PBAP_MAX_APP_PARMS_LEN 30
#endif
/*---------------------------------------------------------------------------
* PBAP_FILTER_SIZE constant
*
* This constant defines the size (in bytes) of the vCard filter used
* in the Pull Phonebook and Pull Vcard Entry operations.
*/
#define PBAP_FILTER_SIZE 8
/****************************************************************************
*
* Section: Default general constants that can be overridden in overide.h
*
***************************************************************************/
/*----------------------------------------------------------------------------
* PULL_PHONEBOOK_TYPE constant
*
* The PULL_PHONEBOOK_TYPE specifies the value that is sent by
* the client in an OBEX Type header when requesting a phonebook
* object.
*/
#define PULL_PHONEBOOK_TYPE "x-bt/phonebook"
/*---------------------------------------------------------------------------
* VCARD_LISTING_OBJECT_TYPE constant
*
* The VCARD_LISTING_OBJECT_TYPE specifies the value that is sent by
* the client in an OBEX Type header when requesting the vCard listing
* object.
*/
#define VCARD_LISTING_OBJECT_TYPE "x-bt/vcard-listing"
/*----------------------------------------------------------------------------
* VCARD_OBJECT_TYPE constant
*
* The VCARD_OBJECT_TYPE specifies the value that is sent by
* the client in an OBEX Type header when requesting a vCard
* object.
*/
#define VCARD_OBJECT_TYPE "x-bt/vcard"
/*---------------------------------------------------------------------------
* PB_LOCAL_STORE_NAME constant
*
* String constant for the local phonebook name.
*/
#define PB_LOCAL_STORE_NAME "telecom/pb.vcf"
/*---------------------------------------------------------------------------
* PB_LOCAL_OCH_NAME constant
*
* String constant for the local phonebook outgoing call history.
*/
#define PB_LOCAL_OCH_NAME "telecom/och.vcf"
/*---------------------------------------------------------------------------
* PB_LOCAL_ICH_NAME constant
*
* String constant for the local phonebook incoming call history.
*/
#define PB_LOCAL_ICH_NAME "telecom/ich.vcf"
/*---------------------------------------------------------------------------
* PB_LOCAL_MCH_NAME constant
*
* String constant for the local phonebook missed call history.
*/
#define PB_LOCAL_MCH_NAME "telecom/mch.vcf"
/*---------------------------------------------------------------------------
* PB_LOCAL_CCH_NAME constant
*
* String constant for the local phonebook combined call history.
*/
#define PB_LOCAL_CCH_NAME "telecom/cch.vcf"
/*---------------------------------------------------------------------------
* PB_LOCAL_SPD_NAME constant
*
* String constant for the local phonebook speed dial.
*/
#define PB_LOCAL_SPD_NAME "telecom/spd.vcf"
/*---------------------------------------------------------------------------
* PB_LOCAL_FAV_NAME constant
*
* String constant for the local phonebook favorite number .
*/
#define PB_LOCAL_FAV_NAME "telecom/fav.vcf"
/*---------------------------------------------------------------------------
* PB_SIM_STORE_NAME constant
*
* String constant for the SIM phonebook name.
*/
#define PB_SIM_STORE_NAME "SIM1/telecom/pb.vcf"
/*---------------------------------------------------------------------------
* PB_SIM_OCH_NAME constant
*
* String constant for the SIM phonebook outgoing call history.
*/
#define PB_SIM_OCH_NAME "SIM1/telecom/och.vcf"
/*---------------------------------------------------------------------------
* PB_SIM_ICH_NAME constant
*
* String constant for the SIM phonebook incoming call history.
*/
#define PB_SIM_ICH_NAME "SIM1/telecom/ich.vcf"
/*---------------------------------------------------------------------------
* PB_SIM_MCH_NAME constant
*
* String constant for the SIM phonebook missed call history.
*/
#define PB_SIM_MCH_NAME "SIM1/telecom/mch.vcf"
/*---------------------------------------------------------------------------
* PB_SIM_CCH_NAME constant
*
* String constant for the SIM phonebook combined call history.
*/
#define PB_SIM_CCH_NAME "SIM1/telecom/cch.vcf"
/*---------------------------------------------------------------------------
* PB_SIM_CCH_NAME constant
*
* String constant for the SIM phonebook combined call history.
*/
#define PB_SIM_SPD_NAME "SIM1/telecom/spd.vcf"
/*---------------------------------------------------------------------------
* PB_SIM_CCH_NAME constant
*
* String constant for the SIM phonebook combined call history.
*/
#define PB_SIM_FAV_NAME "SIM1/telecom/fav.vcf"
/****************************************************************************
*
* Section: Types
*
***************************************************************************/
/*---------------------------------------------------------------------------
* ObStatus type
*
* Indicates the status of various OBEX Layer API functions.
*/
typedef BtStatus ObStatus;
/* The function call was successful. */
#define OB_STATUS_SUCCESS BT_STATUS_SUCCESS
/* The operation has failed to start. */
#define OB_STATUS_FAILED BT_STATUS_FAILED
/* The operation has successfully started, callback indicates end. */
#define OB_STATUS_PENDING BT_STATUS_PENDING
/* The transport layer link is disconnected. */
#define OB_STATUS_DISCONNECT BT_STATUS_DISCONNECT
/* No connection exists, when one is required */
#define OB_STATUS_NO_CONNECT BT_STATUS_NO_LINK
/* IrDA Only: The media is busy. */
#define OB_STATUS_MEDIA_BUSY BT_STATUS_MEDIA_BUSY
/* A request is pending or resources are in use. */
#define OB_STATUS_BUSY BT_STATUS_BUSY
/* The necessary resources are not available. */
#define OB_STATUS_NO_RESOURCES BT_STATUS_NO_RESOURCES
/* An invalid function parameter was provided. */
#define OB_STATUS_INVALID_PARM BT_STATUS_INVALID_PARM
/* Bluetooth Only: The request failed because the specified device
* is in the process of being disconnected.
*/
#define OB_STATUS_IN_PROGRESS BT_STATUS_IN_PROGRESS
/* Feature not supported */
#define OB_STATUS_NOT_SUPPORTED BT_STATUS_NOT_SUPPORTED
/* Bluetooth Only : Feature is restricted, due to a
* Bluetooth security failure
*/
#define OB_STATUS_RESTRICTED BT_STATUS_RESTRICTED
/* The object handle was invalid */
#define OB_STATUS_INVALID_HANDLE (BT_STATUS_OPEN+0)
/* The OBEX packet is too small to support the request. */
#define OB_STATUS_PACKET_TOO_SMALL (BT_STATUS_OPEN+1)
/* No active session exists, when one is required. */
#define OB_STATUS_NO_SESSION (BT_STATUS_OPEN+2)
/* End of ObStatus */
/*---------------------------------------------------------------------------
* PbapEvent type
*
* Indicates the current event type. All event indications and
* confirmations are passed to a callback function of type
* PbapClientCallback or PbapServerCallback. The "PbapCallbackParms.event"
* field indicates one of the event types below. The
* "PbapCallbackParms.oper" field indicates the applicable event
* operation.
*/
typedef uint8_t PbapEvent;
/* A transport layer connection has been established. There is no
* operation associated with this event.
*/
#define PBAP_EVENT_TP_CONNECTED 0x01
/* The transport layer connection has been disconnected. There is no
* operation associated with this event.
*/
#define PBAP_EVENT_TP_DISCONNECTED 0x02
/* Indicates that a phonebook operation (see PbapOp) has
* completed successfully.
*/
#define PBAP_EVENT_COMPLETE 0x03
/* Indicates that the current operation has failed or was rejected
* by the remote device.
*/
#define PBAP_EVENT_ABORTED 0x04
/* Delivered to the application when it is time to issue
* another request or response. The application must call either
* PBAP_ServerContinue() or PBAP_ClientContinue().
*/
#define PBAP_EVENT_CONTINUE 0x05
/* Delivered to the application when the Application Parameters
* header information has been fully parsed.
*/
#define PBAP_EVENT_PARAMS_RX 0x06
/* Informs the client application of data that has been received. The
* data length and data buffer pointer that are provided must be handled
* during this callback, as the memory is only good until this callback
* returns (Client only).
*/
#define PBAP_EVENT_DATA_IND 0x0c
/*---------------------------------------------------------------------------
* PbapOp type
*
* Indicates the operation type of the current event. Each event
* indication has an associated operation passed to a callback function
* of type PbapClientCallback or PbapServerCallback. The
* "PbapCallbackParms.oper" field will indicate one of the operation
* types below. Since the Pull Phonebook, Pull Vcard Listing, and Pull
* Vcard Entry operations cannot be known until the actual OBEX headers
* are processed, the initial operation start event will indicate merely
* that a generic Pull operation is occurring, until further information
* arrives. The exact operation will be known either during the
* PBAP_EVENT_PARAMS_RX or PBAP_EVENT_OBJECT_LENGTH_REQ events
*/
typedef uint32_t PbapOp;
#define PBAPOP_NONE 0x0000 /* No current operation */
#define PBAPOP_CONNECT 0x0001 /* Connect operation */
#define PBAPOP_DISCONNECT 0x0002 /* Disconnect operation */
#define PBAPOP_SET_PHONEBOOK 0x0004 /* Set Phonebook operation */
#define PBAPOP_PULL 0x0008 /* Generic Pull operation */
#define PBAPOP_PULL_PHONEBOOK 0x0010 /* Pull Phonebook operation */
#define PBAPOP_PULL_VCARD_LISTING 0x0020 /* Pull vCard listing operation */
#define PBAPOP_PULL_VCARD_ENTRY 0x0040 /* Pull vCard entry operation */
/* End of PbapOp */
/*---------------------------------------------------------------------------
* PbapRespCode type
*
* Response codes used to signify the status of a PBAP operation. They
* are included within OBEX Response packets, which are sent out to other
* devices.
*
* The first two response codes listed below are success responses; the
* remainder are considered failures. The failure codes are frequently
* associated with aborted operations.
*/
typedef uint8_t PbapRespCode;
/* Group: Successful response codes */
#define PBRC_CONTINUE 0x10 /* Continue */
#define PBRC_STATUS_SUCCESS 0x20 /* Success */
/* Group: Failure response codes */
#define PBRC_BAD_REQUEST 0x40 /* Bad Request */
#define PBRC_UNAUTHORIZED 0x41 /* Unauthorized */
#define PBRC_FORBIDDEN 0x43 /* Forbidden - operation is understood */
#define PBRC_NOT_FOUND 0x44 /* Not Found */
#define PBRC_NOT_ACCEPTABLE 0x46 /* Not Acceptable */
#define PBRC_PRECONDITION_FAILED 0x4c /* Precondition Failed */
#define PBRC_NOT_IMPLEMENTED 0x51 /* Not Implemented */
#define PBRC_SERVICE_UNAVAILABLE 0x53 /* Service Unavailable */
#define PBRC_LINK_DISCONNECT 0x80 /* Transport connection has been disconnected. */
/* End of PbapRespCode */
/*---------------------------------------------------------------------------
* PbapVcardFilterBit type
*
* Describes the bit location pertaining to each filter value in
* the 64-bit vCard filter.
*/
typedef uint8_t PbapVcardFilterBit;
#define VCARD_FILTER_VER 0 /* Version (Bit 0) */
#define VCARD_FILTER_FN 1 /* Formatted Name (Bit 1) */
#define VCARD_FILTER_N 2 /* Structured Presentation of Name (Bit 2) */
#define VCARD_FILTER_PHOTO 3 /* Associated Image or Photo (Bit 3) */
#define VCARD_FILTER_BDAY 4 /* Birthday (Bit 4) */
#define VCARD_FILTER_ADR 5 /* Delivery Address (Bit 5) */
#define VCARD_FILTER_LABEL 6 /* Delivery (Bit 6) */
#define VCARD_FILTER_TEL 7 /* Telephone (Bit 7) */
#define VCARD_FILTER_EMAIL 8 /* Electronic Mail Address (Bit 8) */
#define VCARD_FILTER_MAILER 9 /* Electronic Mail (Bit 9) */
#define VCARD_FILTER_TZ 10 /* Time Zone (Bit 10) */
#define VCARD_FILTER_GEO 11 /* Geographic Position (Bit 11) */
#define VCARD_FILTER_TITLE 12 /* Job (Bit 12) */
#define VCARD_FILTER_ROLE 13 /* Role within the Organization (Bit 13) */
#define VCARD_FILTER_LOGO 14 /* Organization Logo (Bit 14) */
#define VCARD_FILTER_AGENT 15 /* vCard of Person Representing (Bit 15) */
#define VCARD_FILTER_ORG 16 /* Name of Organization (Bit 16) */
#define VCARD_FILTER_NOTE 17 /* Comments (Bit 17) */
#define VCARD_FILTER_REV 18 /* Revision (Bit 18) */
#define VCARD_FILTER_SOUND 19 /* Pronunciation of Name (Bit 19) */
#define VCARD_FILTER_URL 20 /* Uniform Resource Locator (Bit 20) */
#define VCARD_FILTER_UID 21 /* Unique ID (Bit 21) */
#define VCARD_FILTER_KEY 22 /* Public Encryption Key (Bit 22) */
#define VCARD_FILTER_NICK 23 /* Nickname (Bit 23) */
#define VCARD_FILTER_CAT 24 /* Categories (Bit 24) */
#define VCARD_FILTER_PRODID 25 /* Product Id (Bit 25) */
#define VCARD_FILTER_CLASS 26 /* Class Information (Bit 26) */
#define VCARD_FILTER_SORT_STR 27 /* Sort string (Bit 27) */
#define VCARD_FILTER_TIMESTAMP 28 /* Time stamp (Bit 28) */
/* Bits 29-38 Reserved for future use */
#define VCARD_FILTER_PROP 39 /* Use of a proprietary filter (Bit 39) */
/* Bits 40-63 Reserved for proprietary filter usage */
/* End of PbapVcardFilterBit */
/*---------------------------------------------------------------------------
* PbapVcardFormat type
*
* Describes the 1-byte vCard format value sent in the Application
* Parameters OBEX header from the Phonebook Access client to the
* server to dictate which vCard format it wishes to be returned for
* each vCard object. This format is used for both the Pull Phonebook
* and Pull Phonebook Entry operations.
*/
typedef uint8_t PbapVcardFormat;
#define VCARD_FORMAT_21 0x00 /* Version 2.1 format */
#define VCARD_FORMAT_30 0x01 /* Version 3.0 format */
/* End of PbapVcardFormat */
/*---------------------------------------------------------------------------
* PbapVcardSortOrder type
*
* Describes the 1-byte vCard sorting order value sent in the Application
* Parameters OBEX header from the Phonebook Access client to the
* server to dictate the ordering of the vCard entries returned in the
* vCard listing. This format is used for the Pull Vcard Listing operation.
*/
typedef uint8_t PbapVcardSortOrder;
#define VCARD_SORT_ORDER_INDEXED 0x00 /* Indexed sorting */
#define VCARD_SORT_ORDER_ALPHA 0x01 /* Alphabetical sorting */
#define VCARD_SORT_ORDER_PHONETICAL 0x02 /* Phonetical sorting */
/* End of PbapVcardSortOrder */
/*---------------------------------------------------------------------------
* PbapVcardSearchAttribute type
*
* Describes the 1-byte vCard search attribute value sent in the
* Application Parameters OBEX header from the Phonebook Access client
* to the server to dictate the type of search to be performed on
* the vCard entries on the Phonebook Access server. This format is
* used for the Pull Vcard Listing operation.
*/
typedef uint8_t PbapVcardSearchAttribute;
#define VCARD_SEARCH_ATTRIB_NAME 0x00 /* Search by Name */
#define VCARD_SEARCH_ATTRIB_NUMBER 0x01 /* Search by Number */
#define VCARD_SEARCH_ATTRIB_SOUND 0x02 /* Search by Sound */
/* End of PbapVcardSearchAttribute */
/*---------------------------------------------------------------------------
* PbapAppParmsTag type
*
* Describes the tag values used in the Application Parameters OBEX header
* that are used on both the Phonebook Access client and server side.
*/
typedef uint8_t PbapAppParmsTag;
#define PBAP_TAG_ORDER 0x01 /* 1-byte, 0x00 (indexed), 0x01 (alpha), or 0x02 (phonetic) */
#define PBAP_TAG_SEARCH_VALUE 0x02 /* Variable length text string */
#define PBAP_TAG_SEARCH_ATTRIB 0x03 /* 1-byte, 0x00 (Name), 0x01 (Number), or 0x02 (Sound) */
#define PBAP_TAG_MAX_LIST_COUNT 0x04 /* 2-bytes, 0x0000 to 0xFFFF */
#define PBAP_TAG_LIST_OFFSET 0x05 /* 2-bytes, 0x0000 to 0xFFFF */
#define PBAP_TAG_FILTER 0x06 /* 8-bytes, 64 bit mask */
#define PBAP_TAG_FORMAT 0x07 /* 1-byte, 0x00 = 2.1, 0x01 = 3.0 */
#define PBAP_TAG_PHONEBOOK_SIZE 0x08 /* 2-bytes, 0x0000 to 0xFFFF */
#define PBAP_TAG_MISSED_CALLS 0x09 /* 1-byte, 0x00 to 0xFF */
/* End of PbapAppParmsTag */
/*---------------------------------------------------------------------------
* PbapSetPbFlags type
*
* Flags used in the SetFolder operation. PBAP specification requires
* that the PBAP_SETPB_DONT_CREATE flag is always set.
*/
typedef uint8_t PbapSetPbFlags;
#define PBAP_SETPB_NONE 0x00 /* No flags */
#define PBAP_SETPB_BACKUP 0x01 /* Back up one level. */
#define PBAP_SETPB_DONT_CREATE 0x02 /* Don't create folder if it doesn't exist. */
/* End of PbapSetPbFlags */
/*---------------------------------------------------------------------------
* PbapSetPbParamFlags type
*
* Flags used in the PbapSetPbParams structure.
*/
typedef uint8_t PbapSetPbParamFlags;
#define PBAP_PARAM_NONE 0x00 /* No flags */
#define PBAP_PARAM_PB_SIZE 0x01 /* Phonebook Size. */
#define PBAP_PARAM_NEW_MISSED_CALLS 0x02 /* New Missed Calls. */
/* End of PbapSetPbParamFlags */
/* Forward reference to PbapClientCallbackParms defined below */
typedef struct _PbapClientCallbackParms PbapClientCallbackParms;
/*---------------------------------------------------------------------------
* PbapClientCallback type
*
* Phonebook Access Client events along with data indications are
* passed to the application through a callback function of this type
* defined by the application.
*/
typedef void (*PbapClientCallback)(PbapClientCallbackParms *parms);
/* End of PbapClientCallback */
/*---------------------------------------------------------------------------
* PbapVcardFilter structure
*
* Describes the 64-bit filter value sent in the Application Parameters
* OBEX header from the Phonebook Access client to the server to dictate
* which fields it wishes to be returned for each vCard object. This
* filter is used for both the Pull Phonebook and Pull Phonebook Entry
* operations.
*/
typedef struct _PbapVcardFilter
{
/* Array of 8 bytes for this 64-bit filter value */
uint8_t byte[PBAP_FILTER_SIZE];
} PbapVcardFilter;
/*---------------------------------------------------------------------------
* GoepClientApp structure
*
* This structure is used by the Client Application (or Profile) to
* register with the GOEP Client multiplexer.
*
* If registering directly, using the GOEP_RegisterClient() function all
* fields must be filled in prior to registration.
*
* If registering via a profile manager, such as GOEP_RegisterFtpClient()
* only the 'callback' field should be filled in.
*/
typedef struct _GoepClientApp_t {
/* Group: These fields must be filled in prior to registration */
void * callback;
/* Group: These fields must be filled in only if using GOEP_RegisterClient() */
uint8_t type; /* GOEP_PROFILE_xxx define */
void * appParent; /* Must be set to zero if unused */
uint8_t connFlags; /* Type of connection - new or multiplexed */
uint8_t connId; /* Id of the Obex connection - existing or new */
/* === Internal use only === */
#if BT_SECURITY == XA_ENABLED
BtSecurityRecord secRecord;
BtSecurityToken secToken;
int authorized;
int registered;
#endif /* BT_SECURITY == XA_ENABLED */
uint32_t obexConnId;
uint8_t connState;
} GoepClientApp;
/*---------------------------------------------------------------------------
* GoepConnectReq structure
*
* This structure is used by the Client when sending an OBEX Connect.
* All fields are optional.
*/
typedef struct _GoepConnectReq {
/* This field specifies the Target server application. */
const uint8_t *target;
/* This field specifies the local client application. */
const uint8_t *who;
/* The length of the string pointed to by the 'target' field. */
uint8_t targetLen;
/* The length of the string pointed to by the 'who' field. */
uint16_t whoLen;
} GoepConnectReq;
/*---------------------------------------------------------------------------
* GoepObjectReq structure
*
* Used by the Client to provide information to GOEP during a Push,
* Pull or Delete request.
*/
typedef struct _GoepObjectReq {
/* The Name of the object, must be null-terminated. The proper format
* (ASCII/UNICODE) is based on the GOEP_DOES_UNICODE_CONVERSIONS option.
*/
const uint8_t *name;
/* The Type of the object, null-terminated, in ASCII format. */
const uint8_t *type;
/* The handle of the object.*/
void *object;
/* In a PUSH request, the length of the object should be provided.
* In PULL and DELETE requests this field is not used.
*/
uint32_t objectLen;
} GoepObjectReq;
/*----------------------------------------------------------------------
* PbapClientSession structure
*
* Maintains Phonebook Access client info and status during an
* application session.
*/
typedef struct _PbapClientSession
{
/* Bluetooth security level - set by the application
* prior to PBAP_RegisterClient. An application must have a
* pairing handler registered in order to receive PIN requests.
* This can be done through the BlueMgr API or done directly
* by the application.
*/
BtSecurityLevel secLevel;
/* GOEP Client instance */
GoepClientApp cApp;
/* === Internal use only === */
PbapOp currOp;
uint8_t flags;
uint8_t appParms[PBAP_MAX_APP_PARMS_LEN];
SdpRecord record;
SdpAttribute attributes[5];
/* Registration status for this PBAP Client instance */
int registered;
/* GOEP Connect information */
GoepConnectReq connect;
/* GOEP Pull information */
GoepObjectReq pull;
} PbapClientSession;
/*---------------------------------------------------------------------------
* PbapPullPbParms structure
*
* Describes the parameters required to issue a Pull Phonebook operation.
* These parameters must be filled in by the client application prior to
* calling PBAP_PullPhonebook.
*/
typedef struct _PbapPullPbParms
{
/* Full path information including the phonebook name (null-terminated)
* (e.g. "telecom\pb.vcf")
*/
const uint8_t *pbName;
/* List of the vCard fields the client wishes the server to return for
* each phonebook entry.
*/
PbapVcardFilter filter;
/* Format of vCard (version 2.1 or version 3.0) */
PbapVcardFormat format;
/* Maximum number of vCard entries supported by the client */
uint16_t maxListCount;
/* Offset of the first vCard entry */
uint16_t listStartOffset;
} PbapPullPbParms;
/*---------------------------------------------------------------------------
* PbapPullVcardListingParms structure
*
* Describes the parameters required to issue a Pull VCard Listing operation.
* These parameters must be filled in by the client application prior to
* calling PBAP_PullVcardListing.
*/
typedef struct _PbapPullVcardListingParms
{
/* Subfolder name (null-terminated) - empty string is used to return the
* current folder listing.
*/
const uint8_t *folderName;
/* Phonebook entries are returned based on the search attribute which
* can be either Name (0x00), Number (0x01), or Sound (0x02). The name
* attribute is assumed if no value is provided.
*/
PbapVcardSearchAttribute searchAttribute;
/* Text string that is used to compare against the specified search
* attribute for each remote phonebook entry to determine if the entry
* will be returned. If this value is not provided, all entries will be
* returned.
*/
const char *searchValue;
/* Indicates the requested sorting method. If no value is provided,
* indexed sorting is assumed. Valid sorting methods are
* Indexed/Alphabetical/Phonetical
*/
PbapVcardSortOrder order;
/* Maximum number of vCard entries supported by the client */
uint16_t maxListCount;
/* Offset of the first vCard entry */
uint16_t listStartOffset;
} PbapPullVcardListingParms;
/*---------------------------------------------------------------------------
* PbapPullVcardEntryParms structure
*
* Describes the parameters required to issue a Pull VCard Entry operation.
* These parameters must be filled in by the client application prior to
* calling PBAP_PullVcardEntry.
*/
typedef struct _PbapPullVcardEntryParms
{
/* Object name (null-terminated) (e.g. "1.vcf") */
const uint8_t *objectName;
/* List of the vCard fields the client wishes the server to return for
* each phonebook entry.
*/
PbapVcardFilter filter;
/* Format of vCard (version 2.1 or version 3.0) */
PbapVcardFormat format;
} PbapPullVcardEntryParms;
/*---------------------------------------------------------------------------
* PbapSetPhonebookParms structure
*
* Describes the parameters required to issue a Set Phonebook operation.
* These parameters must be filled in by the client application prior to
* calling PBAP_SetPhonebook.
*/
typedef struct _PbapSetPhonebookParms
{
/* Name of the folder (null-terminated) */
const uint8_t *folderName;
/* Set Phonebook operation options. PBAP specification requires
* that the PBAP_SETPB_DONT_CREATE flag is always set.
*/
PbapSetPbFlags flags;
/* Set this flag to true to reset the path to the root folder.
* No path flags may be specified if this is TRUE. In addition,
* any name provided will be ignored if this is TRUE, since reset
* uses an empty name header.
*/
int reset;
} PbapSetPhonebookParms;
/*---------------------------------------------------------------------------
* PbapClientCallbackParms structure
*
* Describes a callback event and any data that relates to the event. These
* callback parameters are used for all Phonebook Access Clients.
* Determination of the valid fields can be done by evaluating which event
* is being indicated as well as which client it is intended for.
*/
struct _PbapClientCallbackParms
{
PbapEvent event; /* PBAP event */
PbapOp oper; /* PBAP operation */
PbapClientSession *client; /* PBAP client */
union {
#if OBEX_PROVIDE_SDP_RESULTS == XA_ENABLED
/* Group: During a PBAP_EVENT_TP_CONNECTED event, contains
* the SDP parsed information
*/
struct {
uint16_t profileVersion; /* PBAP profile version */
PbapSupportedPhonebooks suppPhonebooks; /* PBAP supported phonebooks */
} connect;
#endif /* OBEX_PROVIDE_SDP_RESULTS == XA_ENABLED */
/* Group: Valid during PBAP_EVENT_TP_DISCONNECTED event */
PbapRespCode discReason; /* PBAP disconnect reason code */
/* Group: Valid during PBAP_EVENT_ABORTED event */
PbapRespCode abortReason; /* PBAP abort reason code */
#if OBEX_AUTHENTICATION == XA_ENABLED
/* Group: Valid during PBAP_EVENT_AUTH_RESULT event */
struct {
int result; /* Result of the PBAP Authentication attempt */
PbapAuthFailReason reason; /* PBAP Authentication failure reason */
} auth;
#endif /* OBEX_AUTHENTICATION == XA_ENABLED */
/* Group: Valid during PBAP_EVENT_PARAMS_RX event - provides Application
* Parameter header information. Valid for Pull Phonebook and
* Pull Vcard Listing operations only.
*/
struct {
/* Number of new missed calls */
uint8_t newMissedCalls;
/* Provides the size of the requested phonebook. The client
* should set its MaxListCount based on the phonebook size,
* if it is nonzero.
*/
uint16_t phonebookSize;
} paramsRx;
/* Group: Valid during PBAP_EVENT_DATA_IND event */
struct {
/* Object name (null-terminated, ASCII or UTF-16) */
uint8_t *name; /* Name pointer */
/* Data Indication */
uint8_t *buffer; /* Data pointer */
uint16_t len; /* Length of data */
} dataInd;
} u;
};
/* End of PbapClientCallbackParms */
/****************************************************************************
*
* Section: Function Reference
*
****************************************************************************/
/*---------------------------------------------------------------------------
* PBAP_Init()
*
* Initialize the PBAP component. This must be the first PBAP
* function called by the application layer, or if multiple
* PBAP applications exist, this function should be called
* at system startup (see XA_LOAD_LIST in config.h). GOEP and
* OBEX must also be initialized separately.
*
* Returns:
* TRUE - Initialization was successful.
*
* FALSE - Initialization failed.
*/
int PBAP_Init(void);
/*---------------------------------------------------------------------------
* PBAP_RegisterClient()
*
* NOTE: This API is deprecated. Use PBAP_RegisterClientSec instead.
*
* Registers the Phonebook Access Client with the GOEP multiplexor.
* All of the events specified in the PBAP layer are delivered to the
* PBAP client.
*
* Parameters:
* Client - The client application's registration structure.
*
* Callback - callback function for the Phonebook Access client.
*
* Returns:
* OB_STATUS_INVALID_PARM - Invalid or in use profile type.
*
* OB_STATUS_SUCCESS - The PBAP Client is initialized.
*
* OB_STATUS_FAILED - Problem initializing the PBAP Client.
*
* OB_STATUS_BUSY - A PBAP client is already registered.
*
*/
ObStatus PBAP_RegisterClnt(PbapClientSession *Client, PbapClientCallback Callback,
BtSecurityParms *SecParms, int UseOldSecApis);
ObStatus PBAP_RegisterClient(PbapClientSession *Client,
PbapClientCallback Callback);
#define PBAP_RegisterClient(_CLIENT, _CALLBACK) \
PBAP_RegisterClnt(_CLIENT, _CALLBACK, 0, TRUE);
/*---------------------------------------------------------------------------
* PBAP_RegisterClientSec()
*
* Registers the Phonebook Access Client with the GOEP multiplexor.
* All of the events specified in the PBAP layer are delivered to the
* PBAP client.
*
* Parameters:
* Client - The client application's registration structure.
*
* Callback - callback function for the Phonebook Access client.
*
* SecParms - Pointer to the Security Parameters (level and PIN length)
* used by the PBAP Client.
*
* Returns:
* OB_STATUS_INVALID_PARM - Invalid or in use profile type.
*
* OB_STATUS_SUCCESS - The PBAP Client is initialized.
*
* OB_STATUS_FAILED - Problem initializing the PBAP Client.
*
* OB_STATUS_BUSY - A PBAP client is already registered.
*
*/
ObStatus PBAP_RegisterClientSec(PbapClientSession *Client,
PbapClientCallback Callback,
BtSecurityParms *SecParms);
#define PBAP_RegisterClientSec(_CLIENT, _CALLBACK, _PARMS) \
PBAP_RegisterClnt(_CLIENT, _CALLBACK, _PARMS, FALSE);
#if OBEX_DEINIT_FUNCS == XA_ENABLED
/*---------------------------------------------------------------------------
* PBAP_DeregisterClient()
*
* Deregisters the Phonebook Access Client from the GOEP multiplexor.
*
* Parameters:
* Client - The structure used to register the client.
*
* Returns:
* OB_STATUS_SUCCESS - The client was deregistered.
*
* OB_STATUS_INVALID_PARM - The client is not registered.
*
* OB_STATUS_BUSY - The client could not be deregistered because
* it is currently sending an operation.
*
* OB_STATUS_FAILED - The PBAP client failed to deinitialize.
*
*/
ObStatus PBAP_DeregisterClient(PbapClientSession *Client);
#endif /* OBEX_DEINIT_FUNCS == XA_ENABLED */
/*---------------------------------------------------------------------------
* PBAP_ClientConnect()
*
* This function is used by the client to create a transport connection
* to the specified device and issue an OBEX Connect Request. If the
* transport connection was issued by the server, this function will only
* issue the OBEX Connect Request.
*
* Parameters:
* Client - The structure used to register the client.
*
* addr - The remote adress to which the client
* wishes to connect.
*
* Returns:
* OB_STATUS_PENDING - Connection was successfully started. Completion
* will be signaled via a call to the application callback.
*
* If the connection is successful, a PBAP_EVENT_COMPLETE event for
* the PBAPOP_CONNECT operation will be signaled.
*
* If the transport connection is successful, but the OBEX Connect
* failed, the completion event will be PBAP_EVENT_TP_DISCONNECTED
* for the operation PBAP_OPER_CONNECT. At this point the transport
* is DISCONNECTED.
*
* If the transport connection is unsuccessful, the completion event
* will be PBAP_EVENT_TP_DISCONNECTED.
*
* OB_STATUS_SUCCESS - The client is now connected.
*
* OB_STATUS_FAILED - Unable to start the operation because the client
* is in the middle of starting up a connection.
*
* OB_STATUS_BUSY - The client is currently executing an operation.
*
*/
ObStatus PBAP_ClientConnect(PbapClientSession *Client, BD_ADDR *addr);
/*---------------------------------------------------------------------------
* PBAP_ClientDisconnect()
*
* This function is used by the client to issue an OBEX Disconnect Request.
* When the OBEX Disconnect is completed, the transport connection will
* be disconnected automatically.
*
* Parameters:
* Client - The client application's registration structure.
*
* Returns:
* OB_STATUS_PENDING - Operation was successfully started.
* Completion will be signaled with the PBAP_EVENT_TP_DISCONNECTED
* event to the application callback.
*
* OB_STATUS_BUSY - Operation was not started because
* the client is currently executing another operation.
*
* OB_STATUS_NO_CONNECT - Operation was not started because
* the client is not connected.
*/
ObStatus PBAP_ClientDisconnect(PbapClientSession *Client);
/*---------------------------------------------------------------------------
* PBAP_ClientTpDisconnect()
*
* This function is used by the client to initiate a transport
* disconnection. PBAP_ClientDisconnect will cause the transport to be
* brought down automatically, but if the transport must be brought
* down immediately, perhaps due an error condition, this routine may
* be used.
*
* Parameters:
* Client - The client application's registration structure.
*
* Returns:
* OB_STATUS_PENDING - Operation was successfully started.
* Completion will be signaled with the PBAP_EVENT_TP_DISCONNECTED
* event to the application callback.
*
* OB_STATUS_NO_CONNECT - Operation was not started because
* the client is not connected.
*/
ObStatus PBAP_ClientTpDisconnect(PbapClientSession *Client);
/*---------------------------------------------------------------------------
* PBAP_ClientAbort()
*
* Aborts the current client operation. The completion event will signal
* the status of the operation in progress, either COMPLETE or ABORTED.
*
* Parameters:
* Client - The client application's registration structure.
*
* Returns:
* OB_STATUS_SUCCESS - Operation was successful.
*
* OB_STATUS_FAILED - Operation failed to start.
*
* OB_STATUS_NO_CONNECT - Operation was not started because
* the client is not connected.
*
* OB_STATUS_INVALID_PARM - Invalid parameter.
*/
ObStatus PBAP_ClientAbort(PbapClientSession *Client);
/*---------------------------------------------------------------------------
* PBAP_PullPhonebook()
*
* Initiates the OBEX "Get" operation to retrieve a phonebook object from
* the remote Phonebook Access Server.
*
* Parameters:
* Client - The client application's registration structure.
*
* Parms - Parameters to specify the application specific parameters
* including the phonebook name.
*
* Returns:
* OB_STATUS_PENDING - Operation was successfully started. Completion
* will be signaled via an event to the application callback.
*
* OB_STATUS_BUSY - Operation was not started because
* the client is currently executing another operation.
*
* OB_STATUS_NO_CONNECT - Operation was not started because
* the client is not connected.
*
* OB_STATUS_PACKET_TOO_SMALL - Operation was not started
* because the OBEX packet size was insufficient to transmit
* the provided headers.
*
* OB_STATUS_INVALID_HANDLE - The object store handle was invalid.
*/
ObStatus PBAP_PullPhonebook(PbapClientSession *Client, PbapPullPbParms *Parms);
/*---------------------------------------------------------------------------
* PBAP_PullVcardListing()
*
* Initiates the OBEX "Get" operation to retrieve a vCard folder listing
* from the remote Phonebook Access Server.
*
* Parameters:
* Client - The client application's registration structure.
*
* Parms - Parameters to specify the application specific parameters
* including the folder name.
*
* Returns:
* OB_STATUS_PENDING - Operation was successfully started. Completion
* will be signaled via an event to the application callback.
*
* OB_STATUS_BUSY - Operation was not started because
* the client is currently executing another operation.
*
* OB_STATUS_NO_CONNECT - Operation was not started because
* the client is not connected.
*
* OB_STATUS_PACKET_TOO_SMALL - Operation was not started
* because the OBEX packet size was insufficient to transmit
* the provided headers.
*
* OB_STATUS_INVALID_HANDLE - The object store handle was invalid.
*/
ObStatus PBAP_PullVcardListing(PbapClientSession *Client,
PbapPullVcardListingParms *Parms);
/*---------------------------------------------------------------------------
* PBAP_PullVcardEntry()
*
* Initiates the OBEX "Get" operation to retrieve a vCard entry object
* from the remote Phonebook Access Server.
*
* Parameters:
* Client - The client application's registration structure.
*
* Parms - Parameters to specify the application specific parameters
* including the object name.
*
* Returns:
* OB_STATUS_PENDING - Operation was successfully started. Completion
* will be signaled via an event to the application callback.
*
* OB_STATUS_BUSY - Operation was not started because
* the client is currently executing another operation.
*
* OB_STATUS_NO_CONNECT - Operation was not started because
* the client is not connected.
*
* OB_STATUS_PACKET_TOO_SMALL - Operation was not started
* because the OBEX packet size was insufficient to transmit
* the provided headers.
*
* OB_STATUS_INVALID_HANDLE - The object store handle was invalid.
*/
ObStatus PBAP_PullVcardEntry(PbapClientSession *Client,
PbapPullVcardEntryParms *Parms);
/*---------------------------------------------------------------------------
* PBAP_SetPhonebook()
*
* Performs the OBEX "SetPath" operation to set the path to the current
* phonebook. Afterwards, all operations are based on this phonebook
* until this function is called again.
*
* Parameters:
* Parms - Parameters to specify the application specific parameters
* including the folder name.
*
* Returns:
* OB_STATUS_PENDING - Operation was successfully started. Completion
* will be signaled via an event to the application callback.
*
* OB_STATUS_BUSY - Operation was not started because
* the client is currently executing another operation.
*
* OB_STATUS_NO_CONNECT - Operation was not started because
* the client is not connected.
*
* OB_STATUS_PACKET_TOO_SMALL - Operation was not started
* because the OBEX packet size was insufficient to transmit
* the provided headers.
*/
ObStatus PBAP_SetPhonebook(PbapClientSession *Client,
PbapSetPhonebookParms *Parms);
/*---------------------------------------------------------------------------
* PBAP_ClientContinue()
*
* This function is called by the client in response to a received
* PBAP_EVENT_CONTINUE event. It must be called once for every
* CONTINUE event received. It may or may not be called in the context
* of the callback and can be deferred for flow control purposes.
*
* Parameters:
* Client - The client application's registration structure.
*
* Returns:
* OB_STATUS_FAILED - The client is not expecting a continue.
*
* OB_STATUS_SUCCESS - The continue was successful.
*/
ObStatus PBAP_ClientContinue(PbapClientSession *Client);
/*---------------------------------------------------------------------------
* PBAP_SetFilterBit()
*
* Sets the appropriate filter bit in the 64-bit vCard filter.
*
* Parameters:
* Bit - Bit to set in the vCard filter.
*
* Filter - vCard filter structure.
*/
void PBAP_SetFilterBit(PbapVcardFilterBit Bit, PbapVcardFilter *Filter);
#define PBAP_SetFilterBit(_BIT, _FILTER) do { \
Assert((_FILTER)); \
(_FILTER)->byte[(_BIT)/8] |= (uint8_t)(1 << ((_BIT)%8)); \
} while (0);
/*---------------------------------------------------------------------------
* PBAP_ClearFilterBit()
*
* Clears the appropriate filter bit in the 64-bit vCard filter.
*
* Parameters:
* Bit - Bit to clear in the vCard filter.
*
* Filter - vCard filter structure.
*/
void PBAP_ClearFilterBit(PbapVcardFilterBit Bit, PbapVcardFilter *Filter);
#define PBAP_ClearFilterBit(_BIT, _FILTER) do { \
Assert((_FILTER)); \
(_FILTER)->byte[(_BIT)/8] &= ~(uint8_t)(1 << ((_BIT)%8)); \
} while (0);
/*---------------------------------------------------------------------------
* PBAP_ClearAllFilterBits()
*
* Clears all of the filter bits in the 64-bit vCard filter. This should
* be done prior to setting any of the filter bits, just to ensure the
* memory is properly initialized prior to issuing a Pull Phonebook or
* Pull Vcard Entry operation.
*
* Parameters:
* Filter - vCard filter structure.
*/
void PBAP_ClearAllFilterBits(PbapVcardFilter *Filter);
#define PBAP_ClearAllFilterBits(_FILTER) do { \
Assert((_FILTER)); \
OS_MemSet((uint8_t *)(_FILTER)->byte, 0, PBAP_FILTER_SIZE); \
} while (0);
/*---------------------------------------------------------------------------
* PBAP_IsSetFilterBit()
*
* Returns the status of the appropriate filter bit in the 64-bit
* vCard filter.
*
* Parameters:
* Bit - Bit to check in the vCard filter.
*
* Filter - vCard filter structure.
*
* Returns:
* TRUE or FALSE
*/
int PBAP_IsSetFilterBit(PbapVcardFilterBit Bit, PbapVcardFilter *Filter);
#define PBAP_IsSetFilterBit(_BIT, _FILTER) \
(Assert((_FILTER)), \
((_FILTER)->byte[(_BIT)/8] & (1 << ((_BIT)%8)) ? TRUE : FALSE))
#endif