#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