#ifndef __HF_API_H_ #define __HF_API_H_ #include "btconfig.h" #include "bt_types.h" #include "rfcomm_api.h" #include "sec_api.h" /*--------------------------------------------------------------------------- * Hands-free SDK API layer * * The Hands-free SDK is designed to create a hands-free application * for Bluetooth. It includes a complete implementation of the * Hands-Free Profiles v1.5. It also includes some features beyond the * basic profiles that take advantage of features exported by many * shipping phones. * * The Hands-free SDK provides service discovery, connection management, * call management, and basic phone book management. It also allows for * the transmission and reception of AT commands not specifically * supported by Bluetooth profiles. * * This SDK also includes an optional Call Manager component that tracks * the state of calls in the audio gateway. Many different events are * generated to provide information about calls on the audio gateway. * The Call Manager interprets these various events and translates them * into a simplified event form. The states of all calls are maintained * within the Call Manager and can be queried by the application. The * Hands-Free code informs the Call Manager when events occur that could * affect the call state. The Call Manager makes intelligent decisions * on which AT commands to send based on this information. The Call * Manager will also use a polling method to keep the call state * information up to date. */ /**************************************************************************** * * Constants * ****************************************************************************/ #ifndef HF_WIDE_BAND_SPEECH #define HF_WIDE_BAND_SPEECH XA_DISABLED #endif #define HF_CODEC_NEG HF_WIDE_BAND_SPEECH /*--------------------------------------------------------------------------- * HF_VREC constant * This define indicates whether the voice recognition features are * supported or not. Normally, voice recognition is enabled. If your * application does not support voice recognition, then you can define * HF_VREC as XA_DISABLED in the overide.h file. */ #ifndef HF_VREC #define HF_VREC XA_ENABLED #endif /* HF_VREC */ /*--------------------------------------------------------------------------- * HF_FEATURE_ECHO_NOISE constant * This define indicates whether this device supports the echo canceling * and/or noise reduction feature. This value is used when defining the * capabilities of the Hands-Free application. See HF_SDK_FEATURES. */ #define HF_FEATURE_ECHO_NOISE 0x00000001 /*--------------------------------------------------------------------------- * HF_FEATURE_CALL_WAITING constant * This define indicates whether this device supports the call-waiting * and 3-way calling feature. This value can be used when defining the * capabilities of the Hands-Free application. See HF_SDK_FEATURES. */ #define HF_FEATURE_CALL_WAITING 0x00000002 /*--------------------------------------------------------------------------- * HF_FEATURE_CLI_PRESENTATION constant * This define indicates whether this device supports the Calling Line * Identification (CLI) presentation capability feature. This value can * be used when defining the capabilities of the Hands-Free * application. See HF_SDK_FEATURES. */ #define HF_FEATURE_CLI_PRESENTATION 0x00000004 /*--------------------------------------------------------------------------- * HF_FEATURE_VOICE_RECOGNITION constant * This define indicates whether this device supports the voice * recognition function. This value can be used when defining the * capabilities of the Hands-Free application. See HF_SDK_FEATURES. */ #define HF_FEATURE_VOICE_RECOGNITION 0x00000008 /*--------------------------------------------------------------------------- * HF_FEATURE_VOLUME_CONTROL constant * This define indicates whether this device supports the remote volume * control feature. This value can be used when defining the * capabilities of the Hands-Free application. See HF_SDK_FEATURES. */ #define HF_FEATURE_VOLUME_CONTROL 0x00000010 /*--------------------------------------------------------------------------- * HF_FEATURE_ENHANCED_CALL_STATUS constant * This define indicates whether this device supports enhanced call * status features like call listing and call held indications. See * HF_SDK_FEATURES. */ #define HF_FEATURE_ENHANCED_CALL_STATUS 0x00000020 /*--------------------------------------------------------------------------- * HF_FEATURE_ENHANCED_CALL_CTRL constant * This define indicates whether this device supports enhanced call * control features like call specifying specific lines to put on hold. * See HF_SDK_FEATURES. */ #define HF_FEATURE_ENHANCED_CALL_CTRL 0x00000040 /*--------------------------------------------------------------------------- * HF_FEATURE_CODEC_NEGOTIATION constant * This define indicates whether this device supports codec negotiation * features used for Wide Band Speech. * See HF_SDK_FEATURES. */ #define HF_FEATURE_CODEC_NEGOTIATION 0x00000080 /*--------------------------------------------------------------------------- * HF_SDK_FEATURES constant * This define indicates which Hands Free Unit features are supported by * the application and device. Features that are supported by the * application must be advertised to the Audio Gateway, so that it knows * the capabilities of the Hands-Free Unit. If this value needs to be * changed, a modified definition can be placed in overide.h with the * features supported by the Hands-Free application. */ #ifndef HF_SDK_FEATURES #define HF_FEATURE_VOICE_RECOGNITION_CFG HF_FEATURE_VOICE_RECOGNITION #define HF_FEATURE_CODEC_NEGOTIATION_CFG HF_FEATURE_CODEC_NEGOTIATION #define HF_SDK_FEATURES (HF_FEATURE_ECHO_NOISE | \ HF_FEATURE_CALL_WAITING | \ HF_FEATURE_CLI_PRESENTATION | \ HF_FEATURE_VOICE_RECOGNITION_CFG| \ HF_FEATURE_CODEC_NEGOTIATION_CFG| \ HF_FEATURE_VOLUME_CONTROL | \ HF_FEATURE_ENHANCED_CALL_STATUS | \ HF_FEATURE_ENHANCED_CALL_CTRL) #endif /* HF_SDK_FEATURES */ /*--------------------------------------------------------------------------- * HF_TX_BUFFER_SIZE constant * HF_TX_BUFFER_SIZE defines the maximum size of AT command data that * can be transmitted. The default is large enough to handle all AT * commands supported by the Hands-free SDK. If raw AT commands are * sent that are larger than the default value, then this number must be * increased. */ #ifndef HF_TX_BUFFER_SIZE #define HF_TX_BUFFER_SIZE 32 #endif /* HF_TX_BUFFER_SIZE */ /*--------------------------------------------------------------------------- * HF_RECV_BUFFER_SIZE constant * HF_RECV_BUFFER_SIZE defines the maximum size of AT response data that * can be received. The default is large enough to handle all AT * responses supported by the Hands-Free profile. */ #ifndef HF_RECV_BUFFER_SIZE #define HF_RECV_BUFFER_SIZE 512 #endif /* HF_RECV_BUFFER_SIZE */ /**************************************************************************** * * Types * ****************************************************************************/ /*-------------------------------------------------------------------------- * HfChannelStates type * * This type enumerates the possible Hands-Free channel connection * states. */ typedef uint8_t HfChannelStates; /** The channel is currently closed. */ #define HF_STATE_CLOSED 0 /** An outgoing ACL data link is currently being setup. */ #define HF_STATE_CONN_PENDING 1 /** An incoming ACL data link is currently being setup. */ #define HF_STATE_CONN_INCOMING 2 /** An ACL data link has been established, and the Hands-Free Service Level * Link parameters are currently being negotiated. */ #define HF_STATE_NEGOTIATE 3 /** A Hands-Free channel is currently open. */ #define HF_STATE_OPEN 4 /** Closing the link but waiting for the audio link to go down first. */ #define HF_STATE_DISC 5 /* End of HfChannelStates */ /*--------------------------------------------------------------------------- * HfEvent type * * All indications and confirmations are sent through a callback * function. Depending on the event, different elements of * the HfCallbackParms "HfCallbackParms.p" union will be valid. */ typedef uint16_t HfEvent; /** An incoming service level connection is being established. This happens * when the audio gateway establishes the service connection. * The data connection is not available yet for issuing commands to the * audio gateway. When the HF_EVENT_SERVICE_CONNECTED event is received, * the channel is available for issuing commands. * * When this callback is received, the "HfCallbackParms.p.remDev" field * contains a pointer to the remote device context. */ #define HF_EVENT_SERVICE_CONNECT_REQ 0 /** A service level connection has been established. This can happen as the * result of a call to HF_CreateServiceLink, or if the audio gateway * establishes the service connection. When this event has been received, * a data connection is available for issuing commands to the audio * gateway. * * When this callback is received, the "HfCallbackParms.p.remDev" field * contains a pointer to the remote device context. */ #define HF_EVENT_SERVICE_CONNECTED 1 /** The service level connection has been released. This can happen as the * result of a call to HF_DisconnectServiceLink, or if the audio gateway * releases the service connection. Communication with the audio gateways * is no longer possible. In order to communicate with the audio gateway, * a new service level connection must be established. * * This event can also occur when an attempt to create a service level * connection (HF_CreateServiceLink) fails. * * When this callback is received, the "HfCallbackParms.p.remDev" * field contains a pointer to the remote device context. If the * "HfCallbackParms.p.remDev" field contains a NULL, then the ACL * connection attempt failed and a remote device was never established. * In addition, the "HfCallbackParms.errCode" fields contains the reason * for disconnect. */ #define HF_EVENT_SERVICE_DISCONNECTED 2 /** An audio connection has been established. This event occurs whenever * the audio channel (SCO) comes up, whether it is initiated by the audio * gateway or the hands-free unit. * * When this callback is received, the "HfCallbackParms.p.remDev" field * contains a pointer to the remote device context. */ #define HF_EVENT_AUDIO_CONNECTED 3 /** An audio connection has been released. This event occurs whenever the * audio channel (SCO) goes down, whether it is terminated by the audio * gateway or the hands-free unit. * * When this callback is received, the "HfCallbackParms.p.remDev" field * contains a pointer to the remote device context. In addition, the * "HfCallbackParms.errCode" fields contains the reason for disconnect. */ #define HF_EVENT_AUDIO_DISCONNECTED 4 /** Only valid if BT_SCO_HCI_DATA is set to XA_ENABLED. Audio data has been * received from the remote device. The data is only valid during the * callback. * * When this callback is received, the "HfCallbackParms.p.audioData" field * contains the audio data. */ #define HF_EVENT_AUDIO_DATA 5 /** Only valid if BT_SCO_HCI_DATA is set to XA_ENABLED. Audio data has been * sent to the remote device. This event is received by the application * when the data sent by HF_SendAudioData has been successfully sent. * * When this callback is received, the "HfCallbackParms.p.audioPacket" * field contains the result. */ #define HF_EVENT_AUDIO_DATA_SENT 6 /** After the service level connection has been established, this event will * indicate the features supported on the audio gateway. * * When this callback is received, the "HfCallbackParms.p.features" field * contains the features (see HfFeatures). */ #define HF_EVENT_GATEWAY_FEATURES 7 /** After the service level connection has been established, this event will * indicate the hold features (3-Way calling) supported on the audio * gateway. * * When this callback is received, the "HfCallbackParms.p.holdFeatures" * field contains the features (see HfGwHoldFeatures). */ #define HF_EVENT_GW_HOLD_FEATURES 8 /** This event is generated only if HF_USE_CALL_MANAGER is defined as * XA_ENABLED. After the service level connection has been established, * this event will indicate the call state of the current connection. * Whenever the call state changes or the multiparty status changes, this * event is generated. * * When this callback is received, the "HfCallbackParms.p.callStateParms" * field contains the current call state (see HfCallStateParms). */ #define HF_EVENT_CALL_STATE 9 /** This event is generated only if HF_USE_CALL_MANAGER is defined as * XA_ENABLED. The identification of the call has been received from the * audio gateway. * * When this callback is received, the "HfCallbackParms.p.callerId" * field contains a pointer to the ASCII string representation of the * number (NULL terminated). */ #define HF_EVENT_CALLER_ID 10 /** This event is generated only if HF_USE_CALL_MANAGER is defined as * XA_ENABLED. The Call Manager has determined the CLCC command is * supported by the device. If this event is received, all call state * information can be considered reliable. */ #define HF_EVENT_CALL_LISTING_ENABLED 11 /** This event is generated only if both HF_USE_CALL_MANAGER and * HF_USE_RESP_HOLD are defined as XA_ENABLED. The Call Manager has * determined that a response and hold feature has changed its * applicability. * * When this callback is received, the "HfCallbackParms.p.respHoldAppl" * field contains the current response-hold relevancies. (See * HfRespHoldAppl). */ #define HF_EVENT_RESPONSE_HOLD_APPL 12 /** This event is generated only if HF_USE_CALL_MANAGER is defined as * XA_DISABLED. After the service level connection has been established, * this event will indicate whether at least one call is active on the * gateway device. Whenever all calls are terminated, or when there were * no calls and a new call is created, this event is generated. * * When this callback is received, the "HfCallbackParms.p.call" field * contains the current call state (see HfCallActiveState). */ #define HF_EVENT_CALL_IND 13 /** This event is generated only if HF_USE_CALL_MANAGER is defined as * XA_DISABLED. After the service level connection has been established, * this event will indicate the current call setup state. Whenever the * call setup state changes, this event is generated. * * When this callback is received, the "HfCallbackParms.p.callSetup" field * contains the current call setup state (see HfCallSetupState). */ #define HF_EVENT_CALLSETUP_IND 14 /** This event is generated only if HF_USE_CALL_MANAGER is defined as * XA_DISABLED. After the service level connection has been established, * this event will indicate the current call held state. Whenever the held * state changes, this event is generated. * * When this callback is received, the "HfCallbackParms.p.callHeld" field * contains the current call held state (see HfCallHeldState). */ #define HF_EVENT_CALLHELD_IND 15 /** This event is generated only if HF_USE_CALL_MANAGER is defined as * XA_DISABLED. When an incoming call is received on the audio gateway, * this event is generated to indicate the incoming ring. */ #define HF_EVENT_RING_IND 16 /** This event is generated only if HF_USE_CALL_MANAGER is defined as * XA_DISABLED. When call waiting is supported on the audio gateway and an * incoming call is received while another call is active, this event is * received. * * When this callback is received, the "HfCallbackParms.p.callWaitParms" * field contains information about the waiting call (see * HfCallWaitParms). */ #define HF_EVENT_WAIT_NOTIFY 17 /** This event is generated only if HF_USE_CALL_MANAGER is defined as * XA_DISABLED. If caller ID notification is active, this event is * received when an incoming call is detected on the audio gateway. * * When this callback is received, the "HfCallbackParms.p.callerIdParms" * field contains the current caller ID information (see HfCallerIdParms). */ #define HF_EVENT_CALLER_ID_NOTIFY 18 /** This event is generated only if HF_USE_CALL_MANAGER is defined as * XA_DISABLED. This event is received once for each call which exists on * the audio gateway. This event is received after calling * HF_ListCurrentCalls(). * * When this callback is received, the "HfCallbackParms.p.callListParms" * field contains the current caller ID information (see HfCallListParms). */ #define HF_EVENT_CURRENT_CALL_STATE 19 /** This event is only available when HF_USE_RESP_HOLD is set to XA_ENABLED * and HF_USE_CALL_MANAGER is set to XA_DISABLED. The Response and Hold * state has been received from the audio gateway. This event is generated * in response to a call to HF_QueryResponseHold() or HF_ResponseHold(). * * When this callback is received, the "HfCallbackParms.p.respHold" field * contains the result. */ #define HF_EVENT_RESPONSE_HOLD 20 /** The service indicator has been received from the audio gateway. * * When this callback is received, the "HfCallbackParms.p.service" * field contains a pointer to the service state. */ #define HF_EVENT_SERVICE_IND 21 /** The battery indicator has been received from the audio gateway. * * When this callback is received, the "HfCallbackParms.p.battery" * field contains a pointer to the battery level. */ #define HF_EVENT_BATTERY_IND 22 /** The signal strength indicator has been received from the audio gateway. * * When this callback is received, the "HfCallbackParms.p.signal" * field contains a pointer to the signal strength. */ #define HF_EVENT_SIGNAL_IND 23 /** The roam indicator has been received from the audio gateway. * * When this callback is received, the "HfCallbackParms.p.roam" * field contains a pointer to the roam state. */ #define HF_EVENT_ROAM_IND 24 /** The voice recognition state has changed. This event occurs if the * audio gateway changes the state of voice recognition. * * When this callback is received, the "HfCallbackParms.p.voiceRecognition" * field contains state of voice recognition. */ #define HF_EVENT_VOICE_REC_STATE 26 /** A number was returned in response to the HF_GetLastVoiceTag function. * * When this callback is received, the "HfCallbackParms.p.voiceTag" field * contains a pointer to the ASCII string representation of the number * (NULL terminated). */ #define HF_EVENT_VOICE_TAG_NUMBER 27 /** The speaker volume has been received from the audio gateway. */ #define HF_EVENT_SPEAKER_VOLUME 28 /** The microphone volume has been received from the audio gateway. */ #define HF_EVENT_MIC_VOLUME 29 /** The in-band ring tone setting has been received from the audio gateway. * * When this callback is received, the "HfCallbackParms.p.inBandRing" * field contains a pointer to the In-Band ring state. */ #define HF_EVENT_IN_BAND_RING 30 /** The network operator string has been received from the remote device. * * When this callback is received, the "HfCallbackParms.p.networkOper" * field contains a pointer to the operator string state. */ #define HF_EVENT_NETWORK_OPERATOR 31 /** The subscriber number has been received from the audio gateway. * * When this callback is received, the "HfCallbackParms.p.subscriberNum" * field contains a pointer to the subscriber number. */ #define HF_EVENT_SUBSCRIBER_NUMBER 32 /** The NO CARRIER event has been received from the audio gateway. If * HF_USE_CALL_MANAGER is defined as XA_ENABLED, then the call manager will * have already modified the call states accordingly, so this event is for * informational purposes only and the application need take no further * action. If HF_USE_CALL_MANAGER is defined as XA_DISABLED, then the * application will need to make the appropriate call state changes * itself. */ #define HF_EVENT_NO_CARRIER 33 /** The BUSY event has been received from the audio gateway. If * HF_USE_CALL_MANAGER is defined as XA_ENABLED, then the call manager will * have already modified the call states accordingly, so this event is for * informational purposes only and the application need take no further * action. If HF_USE_CALL_MANAGER is defined as XA_DISABLED, then the * application will need to make the appropriate call state changes * itself. */ #define HF_EVENT_BUSY 34 /** The NO ANSWER event has been received from the audio gateway. If * HF_USE_CALL_MANAGER is defined as XA_ENABLED, then the call manager will * have already modified the call states accordingly, so this event is for * informational purposes only and the application need take no further * action. If HF_USE_CALL_MANAGER is defined as XA_DISABLED, then the * application will need to make the appropriate call state changes * itself. */ #define HF_EVENT_NO_ANSWER 35 /** The DELAYED event has been received from the audio gateway. */ #define HF_EVENT_DELAYED 36 /** The BLACKLISTED event has been received from the audio gateway. */ #define HF_EVENT_BLACKLISTED 37 /** The supported phonebook storage types have been received from the audio * gateway. This event occurs in response to a call to * HF_QueryPhonebooks. * * When this callback is received, the "HfCallbackParms.p.phonebooks" * field contains a bitmask of phonebook type supported on the gateway * (see HfPhonebooks). */ #define HF_EVENT_PHONEBOOK_STORAGE 38 /** The phonebook storage information has been received from the audio * gateway. This event occurs in response to a call to * HF_GetCurrentPhonebooksInfo. * * When this callback is received, the "HfCallbackParms.p.phonebookInfo" * field contains a pointer to a structure containing the phonebook * information. */ #define HF_EVENT_PHONEBOOK_INFO 39 /** The number of phonebook entries has been received from the audio * gateway. This event occurs in response to a call to * HF_GetPhonebookSize. * * When this callback is received, the "HfCallbackParms.p.phonebookSize" * field contains a pointer to a structure containing the phonebook * information. */ #define HF_EVENT_PHONEBOOK_SIZE 40 /** A phonebook entry has been received from the audio gateway. This event * occurs in response to a call to HF_ReadPhonebookEntries or * HF_FindPhonebookEntries. * * When this callback is received, the "HfCallbackParms.p.phonebookEntry" * field contains a pointer to a structure containing the phonebook * information. */ #define HF_EVENT_PHONEBOOK_ENTRY 41 /** A result code has been received from the audio gateway. This event is * received for unsolicited result codes not handled by the internal * Hands-free AT parser. * * When this callback is received, the "HfCallbackParms.p.data" field * contains the AT result code. */ #define HF_EVENT_AT_RESULT_DATA 42 /** A command to the audio gateway has completed. This event is received * when the processing a command is complete. * * When this callback is received, the "HfCallbackParms.p.command" field * contains the command that was sent. If "HfCallbackParms.status is set * to BT_STATUS_FAILED, then "HfCallbackParms.p.command->cmeError" contains * the command error (if known). */ #define HF_EVENT_COMMAND_COMPLETE 43 /** The codec negotiation has been received from the audio gateway. */ #define HF_EVENT_CODEC_NEGOTIATION 44 /* End of HfEvent */ /*-------------------------------------------------------------------------- * HfCommandType type * * HfCommandType corresponds to a logical command. This value is * returned in the "HfCallbackParms.p.command" structure with the * HF_EVENT_COMMAND_COMPLETE event. It indicates the API call * associated with this command structure. Any API call that takes an * HfCommand parameter receives the HF_EVENT_COMMAND_COMPLETE event when * the command has completed. The "HfCallbackParms.p.command->type" * field identifies the API call that was made. */ typedef uint8_t HfCommandType; /* HF_AnswerCall */ #define HF_COMMAND_ANSWER_CALL 0 /* HF_DialNumber */ #define HF_COMMAND_DIAL_NUMBER 1 /* HF_MemoryDial */ #define HF_COMMAND_DIAL_MEMORY 2 /* HF_Redial */ #define HF_COMMAND_REDIAL 3 /* HF_CallHold */ #define HF_COMMAND_CALL_HOLD 4 /* HF_QueryResponseHold */ #define HF_COMMAND_QUERY_RESPONSE_HOLD 5 /* HF_ResponseHold */ #define HF_COMMAND_RESPONSE_HOLD 6 /* HF_Hangup */ #define HF_COMMAND_HANGUP_CALL 7 /* HF_ListCurrentCalls */ #define HF_COMMAND_LIST_CURRENT_CALLS 8 /* HF_EnableCallerIdNotify */ #define HF_COMMAND_ENABLE_CID_NOTIFY 9 /* HF_EnableCallWaitNotify */ #define HF_COMMAND_ENABLE_WAIT_NOTIFY 10 /* HF_GenerateDtmf() */ #define HF_COMMAND_GENERATE_DTMF 11 /* HF_GetLastVoiceTag */ #define HF_COMMAND_GET_LAST_VOICE_TAG 12 /* HF_EnableVoiceRecognition */ #define HF_COMMAND_VOICE_RECOGNITION 13 /* HF_DisableNREC */ #define HF_COMMAND_DISABLE_NREC 14 /* HF_ReportMicVolume */ #define HF_COMMAND_REPORT_MIC_VOLUME 15 /* HF_ReportSpeakerVolume */ #define HF_COMMAND_REPORT_SPEAKER_VOLUME 16 /* HF_QueryNetworkOperator */ #define HF_COMMAND_QUERY_NETWORK_OPER 17 /* HF_QuerySubscriberNumber */ #define HF_COMMAND_QUERY_SUBSCRIBER_NUM 18 /* HF_EnableExtendedErrors */ #define HF_COMMAND_ENABLE_EXTENDED_ERR 19 /* HF_SendAtCommand */ #define HF_COMMAND_SEND_AT_COMMAND 20 /* HF_QueryPhonebooks */ #define HF_COMMAND_QUERY_PB 21 /* HF_SelectPhonebook */ #define HF_COMMAND_SELECT_PB 22 /* HF_GetCurrentPhonebookInfo */ #define HF_COMMAND_GET_CURRENT_PB_INFO 23 /* HF_GetPhonebookSize */ #define HF_COMMAND_GET_PB_SIZE 24 /* HF_ReadPhonebookEntries */ #define HF_COMMAND_READ_PB_ENTRIES 25 /* HF_FindPhonebookEntries */ #define HF_COMMAND_FIND_PB_ENTRIES 26 /* HF_WritePhonebookEntry */ #define HF_COMMAND_WRITE_PB_ENTRY 27 #define HF_COMMAND_IIA 28 /* HF_CodecConnectionSetup */ #define HF_COMMAND_BCS 29 /* End of HfCommandType */ /*-------------------------------------------------------------------------- * HfCmeError type * * HfCmeError corresponds to an AT error indication. */ typedef uint8_t HfCmeError; #define AT_CME_NO_CONNECTION ATCME_NO_CONNECTION #define AT_CME_OP_NOT_ALLOWED ATCME_OP_NOT_ALLOWED #define AT_CME_OP_NOT_SUPPORTED ATCME_OP_NOT_SUPPORTED #define AT_CME_PH_SIM_PIN_REQUIRED ATCME_PH_SIM_PIN_REQUIRED #define AT_CME_SIM_NOT_INSERTED ATCME_SIM_NOT_INSERTED #define AT_CME_SIM_PIN_REQUIRED ATCME_SIM_PIN_REQUIRED #define AT_CME_SIM_PUK_REQUIRED ATCME_SIM_PUK_REQUIRED #define AT_CME_SIM_FAILURE ATCME_SIM_FAILURE #define AT_CME_SIM_BUSY ATCME_SIM_BUSY #define AT_CME_INCORRECT_PASSWORD ATCME_INCORRECT_PASSWORD #define AT_CME_SIM_PIN2_REQUIRED ATCME_SIM_PIN2_REQUIRED #define AT_CME_SIM_PUK2_REQUIRED ATCME_SIM_PUK2_REQUIRED #define AT_CME_MEMORY_FULL ATCME_MEMORY_FULL #define AT_CME_INVALID_INDEX ATCME_INVALID_INDEX #define AT_CME_MEMORY_FAILURE ATCME_MEMORY_FAILURE #define AT_CME_TEXT_STRING_TOO_LONG ATCME_TEXT_STRING_TOO_LONG #define AT_CME_INVALID_CHARS_IN_TEXT_STRING ATCME_INVALID_CHARS_IN_TEXT_STRING #define AT_CME_DIAL_STRING_TOO_LONG ATCME_DIAL_STRING_TOO_LONG #define AT_CME_INVALID_CHARS_IN_DIAL_STRING ATCME_INVALID_CHARS_IN_DIAL_STRING #define AT_CME_NO_NETWORK_SERVICE ATCME_NO_NETWORK_SERVICE #define AT_CME_NETWORK_NOT_ALLOWED ATCME_NETWORK_NOT_ALLOWED #define AT_CME_UNKNOWN ATCME_UNKNOWN /* End of HfCmeError */ /*-------------------------------------------------------------------------- * HfGatewayVersion type * * HfGatewayVersion corresponds to the Audio Gateway Profile version * discovered during the SDP query. The service connection features * will be limited to the capabilities of this profile version. */ typedef uint16_t HfGatewayVersion; /* Unable to determine the Hands Free Profile version that is supported */ #define HF_GW_VERSION_UNKNOWN 0x0000 /* Supports Version 0.96 of the Hands Free Profile */ #define HF_GW_VERSION_0_96 0x0100 /* Supports Version 1.0 of the Hands Free Profile */ #define HF_GW_VERSION_1_0 0x0101 /* Supports Version 1.5 of the Hands Free Profile */ #define HF_GW_VERSION_1_5 0x0105 /* Supports Version 1.5 of the Hands Free Profile */ #define HF_GW_VERSION_1_6 0x0106 /* Supports Version 1.5 of the Hands Free Profile */ #define HF_GW_VERSION_1_8 0x0108 /* End of HfGatewayVersion */ /*--------------------------------------------------------------------------- * HfGatewayFeatures type * * HfGatewayFeatures is a bit mask specifying the gateway feature set. The * service connection capabilities will be limited to the features * advertised by the profile. */ typedef uint32_t HfGatewayFeatures; /** 3-way calling */ #define HF_GW_FEATURE_3_WAY 0x00000001 /** Echo canceling and/or noise reduction function */ #define HF_GW_FEATURE_ECHO_NOISE 0x00000002 /** Voice recognition function */ #define HF_GW_FEATURE_VOICE_RECOGNITION 0x00000004 /** In-band ring tone */ #define HF_GW_FEATURE_IN_BAND_RING 0x00000008 /** Voice tag */ #define HF_GW_FEATURE_VOICE_TAG 0x00000010 /** Reject a call */ #define HF_GW_FEATURE_CALL_REJECT 0x00000020 /** Enhanced Call Status */ #define HF_GW_FEATURE_ENH_CALL_STATUS 0x00000040 /** Enhanced Call Control */ #define HF_GW_FEATURE_ENH_CALL_CTRL 0x00000080 /* End of HfGatewayFeatures */ /*--------------------------------------------------------------------------- * HfGwHoldFeatures type * * This type is used as a bit mask specifying the gateway's 3-Way calling * (hold) feature set. The service connection capabilities will be limited * to the features advertised by the profile. */ typedef uint8_t HfGwHoldFeatures; /** Releases all held calls or sets User Determined User Busy * (UDUB) for a waiting call. */ #define HF_GW_HOLD_RELEASE_HELD_CALLS 0x01 /** Releases all active calls (if any exist) and accepts the other * (held or waiting) call. */ #define HF_GW_HOLD_RELEASE_ACTIVE_CALLS 0x02 /** Releases a specific call. */ #define HF_GW_HOLD_RELEASE_SPECIFIC_CALL 0x04 /** Places all active calls (if any exist) on hold and accepts the * other (held or waiting) call. */ #define HF_GW_HOLD_HOLD_ACTIVE_CALLS 0x08 /** Places a specific call on hold. */ #define HF_GW_HOLD_HOLD_SPECIFIC_CALL 0x10 /** Adds a held call to the conversation. */ #define HF_GW_HOLD_ADD_HELD_CALL 0x20 /** Connects the two calls and disconnects the AG from * both calls (Explicit Call Transfer). */ #define HF_GW_HOLD_CALL_TRANSFER 0x40 /* End of HfGwHoldFeatures */ /*--------------------------------------------------------------------------- * HfSignalStrength type * * HfSignalStrength contains the last signal strength reading from the * Audio Gateway. */ typedef uint8_t HfSignalStrength; /* End of HfSignalStrength */ /* Forward references */ typedef struct _HfCallbackParms HfCallbackParms; typedef struct _HfChannel HfChannel; typedef struct _HfCommand HfCommand; /*--------------------------------------------------------------------------- * HfCallback type * * A function of this type is called to indicate events to the application. */ typedef void (*HfCallback)(HfChannel *Chan, HfCallbackParms *Info); /* End of HfCallback */ /*--------------------------------------------------------------------------- * HfCmdOverride type * * A function of this type is called when a function override is * registered. */ typedef BtStatus (*HfCmdOverride)(HfChannel *Chan, HfCommand *Command); /* End of HfCmdOverride */ /*--------------------------------------------------------------------------- * HfCallStatus type * * HfCallStatus defines the current state of a call. Not all states are * supported by all Audio Gateways. At the very minimum, * HF_CALL_STATUS_NONE, HF_CALL_STATUS_DIALING, HF_CALL_STATUS_INCOMING, and * HF_CALL_STATUS_ACTIVE will be supported. */ typedef uint8_t HfCallStatus; /** An active call exists. */ #define HF_CALL_STATUS_ACTIVE 0 /** The call is held. */ #define HF_CALL_STATUS_HELD 1 /** A call is outgoing. This state occurs when attempting a call using any * of the dialing functions. */ #define HF_CALL_STATUS_DIALING 2 /** The remote party is being alerted. */ #define HF_CALL_STATUS_ALERTING 3 /** A call is incoming. It can be answered by invoking HFG_AnswerCall() or * rejected by invoking HFG_Hangup(). This state occurs when a call is * being set up by a remote party, and there is currently no * established call. */ #define HF_CALL_STATUS_INCOMING 4 /** A call is waiting. It can be answered by invoking HFG_AnswerCall() or * rejected by invoking HFG_Hangup(). This state occurs when a call is * being set up by a remote party, and there is currently an * established call. */ #define HF_CALL_STATUS_WAITING 5 /** A call is in the response and hold state. It can be accepted or * rejected by invoking HF_ResponseHold(). This can be thought of as a * special muted "active call" state. This state is not used by most * networks, but it can occur in Japanese networks. See the Hands Free * Specification Errata 2716, which adds this new call state to the CLCC * messages. */ #define HF_CALL_STATUS_RESPHOLD 6 /** No active call */ #define HF_CALL_STATUS_NONE 0xFF /** Unknown call state */ #define HF_CALL_STATUS_UNKNOWN 0xFE /* End of HfCallStatus */ /*--------------------------------------------------------------------------- * HfCallMode type * * HfCallMode defines the current mode of a call. It is only meaningful if * HF_USE_CALL_MANAGER is defined as XA_DISABLED. */ typedef uint8_t HfCallMode; /** Voice Call */ #define HF_CALL_MODE_VOICE 0 /** Data Call */ #define HF_CALL_MODE_DATA 1 /** FAX Call */ #define HF_CALL_MODE_FAX 2 /* End of HfCallMode */ /*--------------------------------------------------------------------------- * HfCallActiveState type * * HfCallActiveState enumerates the possible current call states that can be * indicated by the Audio Gateway. */ typedef uint8_t HfCallActiveState; /** No call exists on the Audio Gateway */ #define HF_CALL_NONE 0 /** A call is active on the Audio Gateway */ #define HF_CALL_ACTIVE 1 /* End of HfCallActiveState */ /*--------------------------------------------------------------------------- * HfCallHeldState type * * HfCallHeldState enumerates the possible current held state that can be * indicated by the audio gateway. */ typedef uint8_t HfCallHeldState; /** No calls are held on the audio gateway */ #define HF_CALL_HELD_NONE 0 /** A call is held and another call is active on the audio gateway. This * indication can be sent for several reasons, including when an active and * held call are swapped. */ #define HF_CALL_HELD_ACTIVE 1 /** A call is held and no active call exists on the audio gateway */ #define HF_CALL_HELD_NO_ACTIVE 2 /* End of HfCallHeldState */ /*--------------------------------------------------------------------------- * HfCallSetupState type * * HfCallSetupState enumerates the possible current call setup state that * can be indicated by the Audio Gateway. */ typedef uint8_t HfCallSetupState; /** No outgoing or incoming call is present on the Audio Gateway */ #define HF_CALL_SETUP_NONE 0 /** An incoming call is present on the Audio Gateway */ #define HF_CALL_SETUP_IN 1 /** An outgoing call is present on the Audio Gateway */ #define HF_CALL_SETUP_OUT 2 /** An outgoing call is being alerted on the Audio Gateway */ #define HF_CALL_SETUP_ALERT 3 /* End of HfCallSetupState */ /*--------------------------------------------------------------------------- * HfHoldAction type * * HfHoldAction enumerates the possible actions that can be taken when * calling the HF_CallHold() function. */ typedef uint8_t HfHoldAction; /** Indicates that the code should release all held calls, or set the User * Determined User Busy (UDUB) indication for a waiting call. */ #define HF_HOLD_RELEASE_HELD_CALLS 0 /** Indicates that the code should release all active calls (if any exist) * and accepts the other (held or waiting) call. * * If a call index is specified, the code should release the specific call. */ #define HF_HOLD_RELEASE_ACTIVE_CALLS 1 /** Indicates that the code should place all active calls (if any exist) on * hold and accepts the other (held or waiting) call. * * If a call index is specified, the code should put all calls on hold * except the specified call. */ #define HF_HOLD_HOLD_ACTIVE_CALLS 2 /** Indicates that the code should add a held call to the conversation. */ #define HF_HOLD_ADD_HELD_CALL 3 /** Indicates that the code should connects the two calls and disconnect the * Audio Gateway from both calls. In other words, the code should perform * an Explicit Call Transfer. */ #define HF_HOLD_CALL_TRANSFER 4 /* End of HfHoldAction */ /*--------------------------------------------------------------------------- * HfRespHoldAction type * * HfRespHoldAction enumerates the possible actions that can be taken when * calling the HF_ResponseHold() function. */ typedef uint8_t HfRespHoldAction; /** This action is used to request that an incoming call be put on hold. */ #define HF_RH_HOLD 0 /** This action is used to request that a call that was previously put on * hold by a response and hold command now be activated. */ #define HF_RH_ACCEPT 1 /** This action is used to request that a call that was previously put on * hold by a response and hold command now be dropped. */ #define HF_RH_REJECT 2 /* End of HfRespHoldAction */ /*--------------------------------------------------------------------------- * HfPhonebooks type * * This type is only available when HF_USE_PHONEBOOK_COMMANDS is set to * XA_ENABLED. It enumerates the possible types of phone books supported in * an Audio Gateway. */ typedef uint16_t HfPhonebooks; /** GW dialed calls list */ #define HF_PB_DIALED_CALLS AT_PBS_DIALED_CALLS /** SIM fixed-dialing-phonebook list */ #define HF_PB_FIXED_DIAL AT_PBS_FIXED_DIAL /** SIM last-dialing-phonebook list */ #define HF_PB_LAST_DIAL AT_PBS_LAST_DIAL /** GW missed calls list */ #define HF_PB_MISSED_CALLS AT_PBS_MISSED_CALLS /** GW phonebook list */ #define HF_PB_PHONE AT_PBS_ME_PHONEBOOK /** Combined GW and SIM phonebook list */ #define HF_PB_COMBINED AT_PBS_ME_SIM_COMBINED /** GW received calls list */ #define HF_PB_RECEIVED_CALLS AT_PBS_RECEIVED_CALLS /** SIM phonebook list */ #define HF_PB_SIM AT_PBS_SIM_PHONEBOOK /* End of HfPhonebooks */ /*--------------------------------------------------------------------------- * Poll Interval type * * Indicates the interval between CLCC polls. */ typedef uint8_t PollInterval; /** The polling interval has not been defined. */ #define PL_UNKNOWN 0x00 /** Used to indicate that low rate polling is sufficient because there are * no calls on either line. */ #define PL_SLOW 0x0F /** Used to indicate that high rate polling is wanted because there is a * call on at least one of the lines. */ #define PL_FAST 0xF0 /* End of PollInterval */ #if 0 #if BT_SCO_HCI_DATA == XA_ENABLED /*--------------------------------------------------------------------------- * HfAudioData type * * This type is only available when BT_SCO_HCI_DATA is set to XA_ENABLED. * It can be used to store audio data received from the remote device. */ typedef CmgrAudioData HfAudioData; /* End of HfAudioData */ #endif /* BT_SCO_HCI_DATA == XA_ENABLED */ #endif /*--------------------------------------------------------------------------- * HfCallListState type * * HfCallListState is used to indicate whether received call list messages * have been formatted correctly or have been mangled. */ typedef uint8_t HfCallListState; /** No mangled call list messages have been received. */ #define HF_CALL_LIST_OK 0x00 /** At least one mangled call list message has been received. */ #define HF_CALL_LIST_MANGLED 0x01 /* End of HfCallListState */ #if HF_USE_IIA == XA_ENABLED /*--------------------------------------------------------------------------- * HfIIReportingState type * * This type indicates the reporting state for an individual indicator. */ typedef U8 HfIIReportingState; /** Actively reporting the individual indicator. */ #define HF_IIA_ACTIVE 0 /** Reporting for the individual indicator has been deactivated. */ #define HF_IIA_INACTIVE 1 /** Used for indices that are not applicable because they exceed * the number of indicators reported by the CIND message. */ #define HF_IIA_NA 2 /* End of HfIIReportingState */ /*--------------------------------------------------------------------------- * HfIIRepStatCmd type * * This type indicates whether the state of an individual indicator should be * actively reported, left unreported, or whether the current reporting state * should not be modified. */ typedef U8 HfIIRepStatCmd; /** This define is used to request that reporting for the individual * indicator be activated. */ #define HF_IIA_CMD_ACTIVATE 0 /** This define is used to request that reporting for the individual * indicator be deactivated. */ #define HF_IIA_CMD_DEACTIVE 1 /** This define is used to request that reporting for the individual * indicator be left unchanged. It is also used for individual activators * not defined in the CIND message. */ #define HF_IIA_CMD_DONT_CHANGE 2 /* End of HfIIRepStatCmd */ #endif /* HF_USE_IIA == XA_ENABLED */ /**************************************************************************** * * Data Structures * ****************************************************************************/ #if HF_USE_IIA == XA_ENABLED /*--------------------------------------------------------------------------- * HfIIARepElem structure * * Structures of type HfIIARepElem can be used to store the reporting state * for an individual indicator. */ typedef struct _HfIIARepElem { char *desc; HfIIReportingState state; } HfIIARepElem; /*--------------------------------------------------------------------------- * HfIIAReporting structure * * Structures of type HfIIAReporting can be used to store the reporting * state for the various individual indicators. */ typedef struct _HfIIAReporting { HfIIARepElem ii[AT_MAX_INDICATORS]; /* The number of indicators that were defined in the CIND message. */ U8 numInd; } HfIIAReporting; /*--------------------------------------------------------------------------- * HfIIACmd structure * * Structures of type HfIIACmd can be used to store commands for changing * the reporting state of the various individual indicators. */ typedef struct _HfIIACmd { HfIIRepStatCmd state[AT_MAX_INDICATORS]; } HfIIACmd; #endif /* HF_USE_IIA == XA_ENABLED */ /*--------------------------------------------------------------------------- * HfCommand structure * * Structures of type HfCommand can be used to store the command type and * parameters for sending Hands-Free SDK commands. */ struct _HfCommand { /* Used Internally by the Hands-free SDK */ ListEntry node; /* The type of command */ uint8_t type; /* The command parameters */ uint32_t parms[6]; /* The command status */ BtStatus status; /* CME Error when command fails */ HfCmeError cmeError; /* Application context */ void *context; /* === Internal use only === */ uint8_t state; #if HF_USE_CALL_MANAGER == XA_ENABLED U16 callMgrFlags; #endif /* HF_USE_CALL_MANAGER == XA_ENABLED */ }; /*--------------------------------------------------------------------------- * HfAtData structure * * Structures of type HfAtData can be used to store raw AT data. */ typedef struct _HfAtData { uint8_t *data; uint16_t dataLen; } HfAtData; /*--------------------------------------------------------------------------- * HfCallWaitParms structure * * This type is defined only if HF_USE_CALL_MANAGER is defined as * XA_DISABLED. It is used to identify the waiting call. */ typedef struct _HfCallWaitParms { /* Phone number of the waiting call */ const char *number; /* Voice parameters */ uint8_t classmap; /* Type of address */ uint8_t type; } HfCallWaitParms; /*--------------------------------------------------------------------------- * HfCallerIdParms structure * * This type is defined only if HF_USE_CALL_MANAGER is defined as * XA_DISABLED. It is used to identify the calling number. */ typedef struct _HfCallerIdParms { /* Phone number of the caller */ const char *number; /* Type of address */ uint8_t type; } HfCallerIdParms; /*--------------------------------------------------------------------------- * HfCallListParms structure * * This type is defined only if HF_USE_CALL_MANAGER is defined as * XA_DISABLED. It is used to identify the listed calls on the Audio * Gateway. */ typedef struct _HfCallListParms { /* Index of the call on the audio gateway (1 based). */ uint8_t index; /* 0 - Mobile Originated, 1 = Mobile Terminated */ uint8_t dir; /* Call state (see HfCallState). */ HfCallStatus state; /* Call mode (see HfCallMode). */ HfCallMode mode; /* 0 - Not Multiparty, 1 - Multiparty */ uint8_t multiParty; /* Phone number of the call */ const char *number; /* Type of address */ uint8_t type; } HfCallListParms; /*--------------------------------------------------------------------------- * HfSubscriberNum structure * * Structures of type HfSubscriberNum can be used to identify the * subscriber number. */ typedef struct _HfSubscriberNum { /* String phone number of format specified by "type". */ const char *number; /* Phone number format */ uint8_t type; /* Service related to the phone number. */ uint8_t service; } HfSubscriberNum; /*--------------------------------------------------------------------------- * AtRaw structure * * Defines the structure containing raw AT data. */ typedef struct _AtRaw { uint8_t *str; uint8_t len; } AtRaw; #if AT_HEADSET == XA_ENABLED /*--------------------------------------------------------------------------- * AtHeadsetCmd * * This structure is used to specify the parameters associated with * Headset commands. Headset commands are sent from the Headset device * to the Audio Gateway. As such, this structure is used by the Headset * device encoder, and the Audio Gateway decoder functions. */ typedef union _AtHeadsetCmd { /* AT_MICROPHONE_GAIN */ struct { uint8_t gain; } mic; /* AT_SPEAKER_GAIN */ struct { uint8_t gain; } speaker; /* AT_KEYPAD_CONTROL */ struct { uint8_t button; } keypad; } AtHeadsetCmd; #else /* AT_HEADSET == XA_ENABLED */ /* Stub structures to keep #defines out * of AtResults/AtCommands structures. */ typedef uint8_t AtHeadsetCmd; #endif /* AT_HEADSET == XA_ENABLED */ #if AT_HANDSFREE == XA_ENABLED /*--------------------------------------------------------------------------- * AtHandsfreeCmd * * This structure is used to specify the parameters associated with * Hands-Free commands. Hands-Free commands are sent from the * Hands-Free unit to the Audio Gateway. As such, this structure is * used by the Hands-Free unit encoder, and the Audio Gateway decoder * functions. */ typedef union _AtHandsfreeCmd { /* AT_DIAL_NUMBER, AT_DIAL_MEMORY */ struct { const char *number; } dial; /* AT_CALL_WAIT_NOTIFY */ struct { /* Enable/Disable the presentation of the AT_CALL_WAIT_NOTIFY * unsolicited result code. */ uint8_t notify; } wait; /* AT_CALL_HOLD */ struct { /* Call hold procedure to perform. */ uint8_t action; /* If "action" is AT_HOLD_RELEASE_ACTIVE_CALLS or * AT_HOLD_HOLD_ACTIVE_CALLS, this value can be used to specify * the index (1 - 9) of a specific call to address. */ uint8_t call; } hold; /* AT_CALL_ID */ struct { int32_t enabled; } callId; /* AT_EVENT_REPORTING */ struct { uint8_t mode; uint8_t ind; } report; /* AT_GENERATE_DTMF_TONE */ struct { uint8_t tone; } dtmf; /* AT_VOICE_RECOGNITION */ struct { int enabled; } vrec; struct { uint32_t bitmap; } features; /* AT_RESPONSE_AND_HOLD */ struct { uint8_t setting; } btrh; /* AT_NETWORK_OPERATOR */ struct { /* 0 = automatic, 1 = manual, 2 = deregister, 3 = set format only, * 4 = manual/automatic. */ uint8_t mode; /* Format of "oper" parameter (0-3) */ uint8_t format; } networkOper; /* AT_IIA */ struct { /* A string of up to 20 zeroes and ones separated by commas. One * means activate, and zero means deactivate. The zeroes and ones * can be left out for individual indicators whose reporting state * should not change. */ const char *activationStr; } iia; /* AT_BCS */ struct { /* A string of supported codec. */ const char *supportedCodec; } bcs; /* AT_BAC */ struct { /* A string of supported codec. */ const char *supportedCodec; } bac; } AtHandsfreeCmd; #else /* AT_HANDSFREE == XA_ENABLED */ /* Stub structures to keep #defines out * of AtResults/AtCommands structures. */ typedef uint8_t AtHandsfreeCmd; #endif /* AT_HANDSFREE == XA_ENABLED */ #if AT_PHONEBOOK == XA_ENABLED /*--------------------------------------------------------------------------- * AtPhonebookCmd * */ typedef union _AtPhonebookCmd { /* AT_SELECT_PHONEBOOK_STORAGE */ struct { /* Phonebook storage type to select. */ uint16_t select; } storage; /* AT_READ_PHONEBOOK_ENTRY */ struct { /* First entry to return. */ uint16_t first; /* Last entry to return. To return only one entry, * set last = first. */ uint16_t last; } read; /* AT_FIND_PHONEBOOK_ENTRY */ struct { /* Start text to search for. */ const char *text; } find; /* AT_WRITE_PHONEBOOK_ENTRY */ struct { /* Index of this entry. */ uint16_t index; /* Phone number format. */ uint8_t type; /* Phone number. */ const char *number; /* Text associated with phone number. The character set used with * this parameter is specified by AT_SELECT_CHARACTER_SET command. */ const char *text; } write; } AtPhonebookCmd; #else /* AT_PHONEBOOK == XA_ENABLED */ /* Stub structures to keep #defines out * of AtResults/AtCommands structures. */ typedef uint8_t AtPhonebookCmd; #endif /* AT_PHONEBOOK == XA_ENABLED */ #if AT_SMS == XA_ENABLED /*--------------------------------------------------------------------------- * * */ typedef union _AtSmsCmd { struct { /* Service type: 0=GSM 7.05 Phase 2, 1=GSM 7.05 Phase 2+ */ uint8_t type; } service; struct { /* Memory from which messages are read and deleted. */ uint8_t read; /* Memory to which writing and sending operations are made. */ uint8_t write; /* Memory to which received SMs are preferred to be stored. */ uint8_t recv; } preferred; struct { /* Message format 0=PDU mode, 1=text mode. */ uint8_t mode; } format; } AtSmsCmd; #else /* AT_SMS != XA_ENABLED */ /* Stub structures to keep #defines out * of AtResults/AtCommands structures. */ typedef uint8_t AtSmsCmd; #endif /* AT_SMS != XA_ENABLED */ #if AT_DUN == XA_ENABLED /*--------------------------------------------------------------------------- * * */ typedef union _AtDunCmd { uint8_t junk; } AtDunCmd; #else /* AT_DUN == XA_ENABLED */ /* Stub structures to keep #defines out of AtResults/AtCommands structures. */ typedef uint8_t AtDunCmd; #endif /* AT_DUN == XA_ENABLED */ /*--------------------------------------------------------------------------- * AtCommands structure * * This structure is used to specify the parameters associated with * all supported AT commands. Commands are sent by the Terminal Entity * (e.g. Hands-Free unit) and received on the Mobile Entity (e.g. * Gateway). */ typedef struct _AtCommands { /* This field is intended for use by the structure owner. */ ListEntry node; /* AT_??? type from any specified command group. The type may include * the AT_READ or AT_TEST flags. No parameters are specified when * reading or testing a command. */ uint16_t type; union { /* Headset AT command group parameters. */ AtHeadsetCmd hs; /* Hands-Free AT command group parameters. */ AtHandsfreeCmd hf; /* Phonebook AT command group parameters. */ AtPhonebookCmd pb; /* Short Message Service AT command group parameters. */ AtSmsCmd sms; /* Dial Up Networking AT command group parameters. */ AtDunCmd dun; /* AT_SET_ERROR_MODE */ struct { /* Error mode: 0=disable, 1=enable, 2=verbose */ uint8_t mode; } error; #if (AT_HANDSFREE == XA_ENABLED) || (AT_PHONEBOOK == XA_ENABLED) /* AT_SELECT_CHARACTER_SET */ struct { /* Character set type (e.g. "GSM", "HEX", "UCS2"). */ const char *type; } charSet; #endif /* (AT_HANDSFREE == XA_ENABLED) || (AT_PHONEBOOK == XA_ENABLED) */ AtRaw raw; } p; } AtCommands; /*--------------------------------------------------------------------------- * HfChannel structure * * Structures of type HfChannel can be used to store information about a * Hands-Free channel. */ struct _HfChannel { /* === Internal use only === */ /* Registration variables */ ListEntry node; HfCallback callback; /* Application callback * function */ RfChannel rfChannel; /* RFCOMM channel used for * hands-freeclient or server * connection. */ /* Transmit Queue */ int processingCmdQ; /* Used to prevent recursive calls * to HfExecuteNextCommand(). */ ListEntry cmdQueue; /* List of logical commands */ ListEntry txQueue; /* List of AT commands */ HfCommand *nextCommand; /* The next command to execute */ /* Connection State Variables */ HfChannelStates state; /* Current connection state */ uint16_t flags; /* Current connection flags */ uint8_t linkFlags; /* Levels of service connected */ /* Gateway State Information */ HfGatewayVersion version; /* Profile version parsed from * SDP */ HfGatewayFeatures gwFeatures; /* Profile features parsed from * SDP */ HfGwHoldFeatures gwHoldFeatures; /* 3-Way calling hold features */ int nrec; /* State of noise reduction and * echo cancellation */ int ibRing; /* State of in-band ringing */ #if HF_VREC == XA_ENABLED int voiceRec; /* State of voice recognition */ #endif /* HF_VREC == XA_ENABLED */ #if HF_CODEC_NEG == XA_ENABLED uint8_t codecID; /* current selected codec ID */ #endif /* HF_CODEC_NEG == XA_ENABLED */ int callId; /* State of caller id * nofitication */ int callWaiting; /* State of call waiting */ uint8_t micGain; /* Current microphone gain */ uint8_t speakerGain; /* Current speaker gain */ /* SDP variables for client */ SdpQueryToken sdpQueryToken; /* Used to query the service */ uint8_t queryFlags; /* Defines which SDP entries were * parsed from the gateway. */ uint8_t rfServerChannel; /* When connecting hf client */ /* Channel Resources */ CmgrHandler cmgrHandler; AtCommands atCommand; AtCommands *currentAtCommand; AtCommands *lastAtCommand; XaBufferDesc atBuffer; BtPacket atTxPacket; uint8_t atTxData[HF_TX_BUFFER_SIZE]; uint16_t bytesToSend; EvmTimer atTimer; EvmTimer ringTimer; uint8_t atRxBuffer[HF_RECV_BUFFER_SIZE]; uint16_t atRxLen; #if HF_USE_CALL_MANAGER == XA_ENABLED /* Polling resources */ EvmTimer pollTimer; AtCommands pollCommand; BtPacket pollPacket; U8 pollData[RF_MAX_FRAME_SIZE]; U8 pollFlags; PollInterval pollInterval; BOOL pollQuickPending; HfCallListState pollCallListState; /* Call State */ HfCallStatus oldState[2]; /* Old Call States */ HfCallStatus recentState[2]; /* Recent Call States */ HfCallStatus callState[2]; /* Current Call States */ BOOL multiParty; BOOL multiRecent; BOOL multiOld; U8 context; /* Context for the current op */ HfOptCallIDStruct cidOld; /* The caller ID for old calls */ HfOptCallIDStruct cidRecent; /* The caller ID for recent * calls. */ HfOptCallIDStruct cid; /* The caller ID for current * calls. */ BOOL heldActiveSwap; /* If a held-active event is * received, and there is a held * and an active call, then they * should be swapped. */ #if HF_USE_RESP_HOLD == XA_ENABLED HfRespHoldAppl respHoldAppl; HfRespHoldAppl respHoldRecent; HfRespHoldAppl respHoldOld; HfRespHoldStatus respHoldStatus[2]; HfRespHoldQState respHoldQState; BOOL rhPending; /* TRUE when a response and hold * command or query is pending. * Additional response and hold * commands or queries must not be * issued until this is FALSE * again. Otherwise, the call * manager will be confused by the * interleaved OK responses. */ #endif /* HF_USE_RESP_HOLD == XA_ENABLED */ #endif /* HF_USE_CALL_MANAGER == XA_ENABLED */ uint8_t indMap[20]; #if HF_USE_IIA == XA_ENABLED #if HF_USE_CALL_MANAGER == XA_ENABLED /* This contains the current individual * indicator active or inactive reporting state. */ HfIIAReporting cur; /* This contains the individual indicator active or inactive reporting * state that the audio gateway has been commanded to adopt. The * individual indicator order in this array is the same the CIND * message. */ HfIIReportingState iiaCmd[AT_MAX_INDICATORS]; char cindBuf[0x400]; #endif /* HF_USE_CALL_MANAGER == XA_ENABLED */ char biaBuff[HF_MAX_BIA_STRING]; #else /* HF_USE_IIA != XA_ENABLED */ uint8_t numInd; #endif }; /*--------------------------------------------------------------------------- * HfPhonebookInfo structure * * This type is only available when HF_USE_PHONEBOOK_COMMANDS is set to * XA_ENABLED. A pointer to this structure is sent to the application's * callback function notifying the application when phonebook storage * information is received (see HF_GetPhonebookInfo). */ typedef struct _HfPhonebookInfo { HfPhonebooks selected; /* Selected phonebook type */ uint16_t used; /* Number of entries used */ uint16_t total; /* Total number of entries */ } HfPhonebookInfo; /*--------------------------------------------------------------------------- * HfPhonebookSize structure * * This type is only available when HF_USE_PHONEBOOK_COMMANDS is set to * XA_ENABLED. A pointer to this structure is sent to the application's * callback function notifying the application when phonebook size * information is received (see HF_GetPhonebookSize). */ typedef struct _HfPhonebookSize { uint16_t index1; /* First Entry */ uint16_t index2; /* Last Entry */ uint16_t numberLen; /* Maximum number length */ uint16_t textLen; /* Maximum text length */ } HfPhonebookSize; /*--------------------------------------------------------------------------- * HfPhonebookEntry structure * * This type is only available when HF_USE_PHONEBOOK_COMMANDS is set to * XA_ENABLED. A pointer to this structure is sent to the application's * callback function notifying the application when a phonebook entry is * received (see HF_ReadPhonebookEntries and HF_FindPhonebookEntries). */ typedef struct _HfPhonebookEntry { uint16_t index; /* Location in the phone book */ uint8_t type; const char *number; /* The phone number */ const char *text; /* The text part */ } HfPhonebookEntry; /*--------------------------------------------------------------------------- * HfCallbackParms structure * * A pointer to this structure is sent to the application's callback * function notifying the application of any state changes or important * events. */ struct _HfCallbackParms { HfEvent event; /* Event associated with the callback */ BtStatus status; /* Status of the callback event */ BtErrorCode errCode; /* Error code (reason) on disconnect events */ /* For certain events, a single member of this union will be valid. * See HfEvent documentation for more information. */ union { void *ptr; BtRemoteDevice *remDev; HfGatewayFeatures features; HfGwHoldFeatures holdFeatures; int service; int roam; int inBandRing; int voiceRecognition; uint8_t battery; uint8_t signal; uint8_t gain; #if HF_CODEC_NEG == XA_ENABLED uint8_t codecID; #endif HfCommand *command; uint8_t *networkOper; uint8_t *voiceTag; HfSubscriberNum *subscriberNum; #if HF_USE_MESSAGING_COMMANDS == XA_ENABLED BOOL sms; /* Only valid if * HF_USE_MESSAGING_COMMANDS * is set to XA_ENABLED. */ #endif /* HF_USE_MESSAGING_COMMANDS == XA_ENABLED */ #if HF_USE_RESP_HOLD == XA_ENABLED #if HF_USE_CALL_MANAGER == XA_ENABLED HfRespHoldAppl respHoldAppl; /* Indicates which response and * hold features are currently * applicable. */ #else /* HF_USE_CALL_MANAGER != XA_ENABLED */ HfRespHoldAction respHold; /* Only valid if HF_USE_RESP_HOLD * is set to XA_ENABLED. */ #endif /* else HF_USE_CALL_MANAGER != XA_ENABLED */ #endif /* HF_USE_RESP_HOLD == XA_ENABLED */ #if HF_USE_CALL_MANAGER == XA_ENABLED HfCallStateParms *callStateParms;/* Only valid if * HF_USE_CALL_MANAGER is set to * XA_ENABLED. */ HfCallIdParms *callIdParms; /* Only valid if HF_ * USE_CALL_MANAGER is set to * XA_ENABLED. */ #else /* HF_USE_CALL_MANAGER != XA_ENABLED */ HfCallActiveState call; /* Only valid if * HF_USE_CALL_MANAGER is set to * XA_DISABLED. */ HfCallSetupState callSetup; /* Only valid if * HF_USE_CALL_MANAGER is set to * XA_DISABLED. */ HfCallHeldState callHeld; /* Only valid if * HF_USE_CALL_MANAGER is set to * XA_DISABLED. */ HfCallWaitParms *callWaitParms; /* Only valid if * HF_USE_CALL_MANAGER is set to * XA_DISABLED. */ HfCallerIdParms *callerIdParms; /* Only valid if * HF_USE_CALL_MANAGER is set to * XA_DISABLED. */ HfCallListParms *callListParms; /* Only valid if * HF_USE_CALL_MANAGER is set to * XA_DISABLED. */ #endif /* else HF_USE_CALL_MANAGER != XA_ENABLED */ #if HF_USE_PHONEBOOK_COMMANDS == XA_ENABLED HfPhonebooks phonebooks; /* Only valid if * HF_USE_PHONEBOOK_COMMANDS * is set to XA_ENABLED. */ HfPhonebookInfo *phonebookInfo; /* Only valid if * HF_USE_PHONEBOOK_COMMANDS * is set to XA_ENABLED. */ HfPhonebookSize *phonebookSize; /* Only valid if * HF_USE_PHONEBOOK_COMMANDS * is set to XA_ENABLED. */ HfPhonebookEntry *phonebookEntry;/* Only valid if * HF_USE_PHONEBOOK_COMMANDS * is set to XA_ENABLED. */ #endif /* HF_USE_PHONEBOOK_COMMANDS == XA_ENABLED */ #if BT_SCO_HCI_DATA == XA_ENABLED HfAudioData *audioData; /* Only valid if BT_SCO_HCI_DATA is * set to XA_ENABLED. */ BtPacket *audioPacket; /* Only valid if BT_SCO_HCI_DATA is * set to XA_ENABLED. */ #endif /* BT_SCO_HCI_DATA == XA_ENABLED */ HfAtData *data; } p; }; /**************************************************************************** * * Function Reference * ****************************************************************************/ /*--------------------------------------------------------------------------- * HF_Init() * * This function initializes the Hands-free SDK. This function should * only be called once, normally at system initialization time. The * calling of this function can be specified in overide.h using the * XA_LOAD_LIST macro. * * Returns: * TRUE - Initialization was successful * * FALSE - Initialization failed. */ int HF_Init(void); /*--------------------------------------------------------------------------- * HF_Register() * * HF_Register() has been deprecated. The HF_RegisterSec() function * should be used instead. For the time being, if HF_Register() is * used, it is remapped as a macro to the HF_RegisterSec(). However, * the HF_Register() macro will be deleted from future releases of the * Hands Free profile. This macro registers and initializes a channel * for use in creating or receiving service level connections. It * registers the Hands-Free profile with the connection manager, RFCOMM, * and SDP. The application callback function is also bound to the * channel. This API will register a security record with default * values using HF_SECURITY_SETTINGS. To set the values in the security * settings for the security record, it is better to use * HF_RegisterSec() instead of HF_Register(). * * Parameters: * Chan - Contains a pointer to the channel structure that will be * initialized and registered. * * Callback - The application callback function that will receive * events. * * Returns: * BT_STATUS_SUCCESS - The operation completed successfully. * * BT_STATUS_IN_USE - The operation failed because the channel has * already been initialized. * * BT_STATUS_FAILED - The operation failed because either the RFCOMM * channel or the SDP record could not be registered. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_Register(HfChannel *Chan, HfCallback Callback); #define HF_Register(ch, cb) HF_RegisterSec(ch, cb, 0) /*--------------------------------------------------------------------------- * HF_RegisterSec() * * This function registers and initializes a channel for use in creating * or receiving service level connections. Registers the Hands-Free * profile with the connection manager, RFCOMM, and SDP. The * application callback function is also bound to the channel. * Registers a security record based on the values passed to the secParm * parameter. If null, a record with default values set with * HF_SECURITY_SETTINGS is used. * * Parameters: * Chan - Contains a pointer to the channel structure that will be * initialized and registered. * * Callback - The application callback function that will receive * events. * * secParms - The BtSecurityParms values passed in for registering * a BtSecurityRecord. * * Returns: * BT_STATUS_SUCCESS - The operation completed successfully. * * BT_STATUS_IN_USE - The operation failed because the channel has * already been initialized. * * BT_STATUS_FAILED - The operation failed because either the RFCOMM * channel or the SDP record could not be registered. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_RegisterSec(HfChannel *Chan, HfCallback Callback, BtSecurityParms *secParms); /*--------------------------------------------------------------------------- * HF_Deregister() * * This function deregisters the channel. The channel becomes unbound * from RFCOMM and SDP, and can no longer be used for creating service * level connections. * * Parameters: * Chan - Contains a pointer to the channel structure that will be * deregistered. * * Returns: * BT_STATUS_SUCCESS - The operation completed successfully. * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_BUSY - The operation failed because a service level * connection is still open to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_Deregister(HfChannel *Chan); /*--------------------------------------------------------------------------- * HF_CreateServiceLink() * * This function creates a service level connection with the Audio * Gateway. This includes performing SDP Queries to find the * appropriate service and opening an RFCOMM channel. The success of * the operation is indicated by the HF_EVENT_SERVICE_CONNECTED event. * If the connection fails, the application is notified by the * HF_EVENT_SERVICE_DISCONNECTED event. * * If an ACL link does not exist to the audio gateway, one will be * created first. If desired, however, the ACL link can be established * prior to calling this function. * * Parameters: * * Chan - Pointer to a registered channel structure. * * Addr - The Bluetooth address of the remote device. * * Returns: * BT_STATUS_PENDING - The operation has started; the application will * be notified when the connection has been created (via the * callback function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_BUSY - The operation failed because a connection is already * open to the remote device, or a new connection is being created. * * BT_STATUS_FAILED - The channel has not been registered. * * BT_STATUS_CONNECTION_FAILED - The connection failed. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_CreateServiceLink(HfChannel *Chan, BD_ADDR *Addr); /*--------------------------------------------------------------------------- * HF_DisconnectServiceLink() * * This function releases the service level connection with the Audio * Gateway. This will close the RFCOMM channel and will also close the * SCO and ACL links if no other services are active, and no other link * handlers are in use (ME_CreateLink). When the operation is complete * the application will be notified by the HF_EVENT_SERVICE_DISCONNECTED * event. * * Parameters: * Channel - Pointer to a registered channel structure. * * Returns: * BT_STATUS_PENDING - The operation has started; the application will * be notified when the service level connection is down (via the * callback function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_DisconnectServiceLink(HfChannel *Chan); /*--------------------------------------------------------------------------- * HF_CreateAudioLink() * * This function creates an audio (SCO) link to the Audio Gateway. The * success of the operation is indicated by the HF_EVENT_AUDIO_CONNECTED * event. If the connection fails, the application is notified by the * HF_EVENT_AUDIO_DISCONNECTED event. * * Parameters: * Chan - Pointer to a registered channel structure. * * Returns: * BT_STATUS_PENDING - The operation has started; the application will * be notified when the audio link has been established (via the * callback function registered by HF_Register). * * BT_STATUS_SUCCESS - The audio (SCO) link already exists. * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service level * connection does not exist to the audio gateway. * * BT_STATUS_FAILED - An audio connection already exists. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_CreateAudioLink(HfChannel *Chan); /*--------------------------------------------------------------------------- * HF_DisconnectAudioLink() * * This function releases the audio connection with the Audio Gateway. * When the operation is complete the application will be notified by * the HF_EVENT_AUDIO_DISCONNECTED event. * * Parameters: * Chan - Pointer to a registered channel structure. * * Returns: * BT_STATUS_PENDING - The operation has started; the application will * be notified when the audio connection is down (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_DisconnectAudioLink(HfChannel *Chan); #if BT_SCO_HCI_DATA == XA_ENABLED /*--------------------------------------------------------------------------- * Sends the given data on the SCO link */ BtStatus SCO_SendData(BtScoConnect *scocon, BtPacket *packet); /*--------------------------------------------------------------------------- * CMGR_SendAudioData() * * Sends the specified audio data on the SCO link. * * Requires: * BT_SCO_HCI_DATA enabled * * Parameters: * Handler - Handler structure to use. * * Packet - The packet of data to send. After this call, the SCO * manager owns the packet. When the packet has been transmitted * to the host controller, CMEVENT_AUDIO_DATA_SENT is sent to the * handler(s). * * Returns: * BT_STATUS_PENDING - The packet was queued successfully. * * BT_STATUS_NO_CONNECTION - No SCO connection exists. * * BT_STATUS_INVALID_PARM - Invalid parameter (XA_ERROR_CHECK only). */ BtStatus CMGR_SendAudioData(CmgrHandler *Handler, BtPacket *Packet); #define CMGR_SendAudioData(h, p) (SCO_SendData((h)->scoConnect, p)) /*--------------------------------------------------------------------------- * HF_SendAudioData() * * This macro sends the specified audio data on the audio link. * * Requires: * BT_SCO_HCI_DATA enabled. * * Parameters: * Chan - The Channel over which to send the audio data. * * Packet - The packet of data to send. After this call, the Hands-free * SDK owns the packet. When the packet has been transmitted * to the host controller, HF_EVENT_AUDIO_DATA_SENT is sent to the * application. * * Returns: * BT_STATUS_PENDING - The packet was queued successfully. * * BT_STATUS_NO_CONNECTION - No audio connection exists. * * BT_STATUS_INVALID_PARM - Invalid parameter (XA_ERROR_CHECK only). */ BtStatus HF_SendAudioData(HfChannel *Chan, BtPacket *Packet); #define HF_SendAudioData(c, p) (CMGR_SendAudioData((&(c)->cmgrHandler), p)) #endif /* BT_SCO_HCI_DATA == XA_ENABLED */ /*--------------------------------------------------------------------------- * HF_AnswerCall() * * This function answers an incoming call. This function is called * after receiving a HF_EVENT_CALL_STATE event that indicates an * incoming call. To reject the incoming call, use the HF_Hangup * function. When the call is accepted or rejected by the gateway, the * application will be notified of the call state change by the * HF_EVENT_CALL_STATE event. * * In addition, the HF_EVENT_COMMAND_COMPLETE event will be received. * * When an active call exists and a second incoming call is indicated, * the HF_AnswerCall function will perform the equivalent of HF_CallHold * with an "HfHoldAction" of HF_HOLD_HOLD_ACTIVE_CALLS. If call waiting * is disabled, notification of a second incoming call will not occur * (see HF_EnableCallWaitNotify). * * Parameters: * Chan - Pointer to a registered channel structure. * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). * * BT_STATUS_FAILED - No incoming call exists. */ BtStatus HF_AnswerCall(HfChannel *Chan, HfCommand *Command); /*--------------------------------------------------------------------------- * HF_DialNumber() * * This function initiates an outgoing call using a phone number. * * During the process of calling, the HF_EVENT_CALL_STATE event will be * generated to show the progress of the call. Not all states are * applicable to all services. At a minimum, the application will be * notified of the following states: HF_CALL_STATUS_DIALING and * HF_CALL_STATUS_ACTIVE. * * In addition, the HF_EVENT_COMMAND_COMPLETE event will be received. * * If a call is already active, it must be put on hold before calling * this function. * * Parameters: * Chan - Pointer to a registered channel structure. * * Number - An ASCII string containing the number to be dialed. Until * the Bluetooth stack sends the HF_EVENT_COMMAND_COMPLETE event for * this command back to the application, the application must not * reuse the memory space in this string, but instead must use * different strings for sending additional commands. * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_FAILED - A call cannot be made. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_DialNumber(HfChannel *Chan, uint8_t *Number, uint16_t Len, HfCommand *Command); /*--------------------------------------------------------------------------- * HF_MemoryDial() * * This function initiates an outgoing call using a memory location on * the phone. * * During the process of calling, the HF_EVENT_CALL_STATE event will be * generated to show the progress of the call. Not all states are * applicable to all services. At a minimum, the application will be * notified of the following states: HF_CALL_STATUS_DIALING and * HF_CALL_STATUS_ACTIVE. * * In addition, the HF_EVENT_COMMAND_COMPLETE event will be received. * * If a call is already active, it must be put on hold before calling * this function. * * Parameters: * Chan - Pointer to a registered channel structure. * * Location - An ASCII string containing the memory location * to be dialed. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this string, but instead must use different strings for sending * additional commands. * * Len - This parameter must contain the number of characters in the * Location parameter string, not counting any NULL termination * characters. * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_FAILED - A call cannot be made. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_MemoryDial(HfChannel *Chan, uint8_t *Location, uint16_t Len, HfCommand *Command); /*--------------------------------------------------------------------------- * HF_Redial() * * This function initiates an outgoing call based on the last number * dialed in the audio gateway. * * During the process of calling, the HF_EVENT_CALL_STATE event will be * generated to show the progress of the call. Not all states are * applicable to all services. At a minimum, the application will be * notified of the following states: HF_CALL_STATUS_DIALING and * HF_CALL_STATUS_ACTIVE. * * In addition, the HF_EVENT_COMMAND_COMPLETE event will be received. * * If a call is already active, it must be put on hold before calling * this function. * * Parameters: * Chan - Pointer to a registered channel structure. * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_FAILED - A call cannot be made. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_Redial(HfChannel *Chan, HfCommand *Command); /*--------------------------------------------------------------------------- * HF_CallHold() * * This function issues a command to the Audio Gateway to manage * multi-party calling. This function allows the application to perform * explicit handling of 3-Way calls (see HfHoldAction). During the * process of this command, the HF_EVENT_CALL_STATE event will be * generated to show the state change of the call. * * In addition, the HF_EVENT_COMMAND_COMPLETE event will be received. * * Parameters: * Chan - Pointer to a registered channel structure. * * HoldAction - Describes the type of hold function. * * Index - Call to which the action applies. Ignored if HoldAction is * not 1 or 2. * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_CallHold(HfChannel *Chan, HfHoldAction HoldAction, uint8_t Index, HfCommand *Command); #if HF_USE_RESP_HOLD == XA_ENABLED /*--------------------------------------------------------------------------- * HF_QueryResponseHold() * * This function is only available if HF_USE_RESP_HOLD is set to * XA_ENABLED. It issues a Query for the state of Response and Hold on * the Audio Gateway. This feature is typically supported in Japanese * markets (see HfResponseHoldState). If the audio gateway is in a * response and hold state, then it will send back a +BTRH message. If * HF_USE_CALL_MANAGER is set to XA_ENABLED, if polling is not reliable, * and if the previous call state does not correspond to the reported * response and hold condition, then an HF_EVENT_CALL_STATE event is * received; but if HF_USE_CALL_MANAGER is not set to XA_ENABLED, and if * the audio gateway is in a response and hold state, then a * HF_EVENT_RESPONSE_HOLD will be received. * * In addition, the HF_EVENT_COMMAND_COMPLETE event will be received. * * Requires: * HF_USE_RESP_HOLD enabled. * * Parameters: * Chan - Pointer to a registered channel structure. * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). * * BT_STATUS_BUSY - A response and hold message is already in progress, * so a new one cannot be started until the other completes. */ BtStatus HF_QueryResponseHold(HfChannel *Chan, HfCommand *Command); /*--------------------------------------------------------------------------- * HF_ResponseHold() * * This function is only available if HF_USE_RESP_HOLD is set to * XA_ENABLED. It issues a Response and Hold command to the Audio * Gateway to manage incoming calls. This feature is typically * supported in Japanese markets. (See HfResponseHoldState). When the * specified action is taken, the HF_EVENT_RESPONSE_HOLD event will be * received, which should indicate the action that was taken. * * In addition, the HF_EVENT_COMMAND_COMPLETE event will be received. * * Requires: * HF_USE_RESP_HOLD enabled. * * Parameters: * Chan - Pointer to a registered channel structure. * * RespHoldAction - Describes the type of action to take. * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). * * BT_STATUS_BUSY - A response and hold message is already in progress, * so a new one cannot be started until the other completes. */ BtStatus HF_ResponseHold(HfChannel *Chan, HfRespHoldAction RespHoldAction, HfCommand *Command); #endif /* HF_USE_RESP_HOLD == XA_ENABLED */ /*--------------------------------------------------------------------------- * HF_Hangup() * * This function terminates an existing (active) call, rejects an * incoming call, or cancels an outgoing call. This function can be * called whenever an active call exists or after receiving a * HF_EVENT_CALL_STATE event that indicates an incoming or outgoing * call. When the call is terminated, the application will be notified * of the call state change by the HF_EVENT_CALL_STATE event. * * In addition, the HF_EVENT_COMMAND_COMPLETE event will be received. * * Parameters: * Chan - Pointer to a registered channel structure. * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). * * BT_STATUS_FAILED - No call exists. */ BtStatus HF_Hangup(HfChannel *Chan, HfCommand *Command); /*--------------------------------------------------------------------------- * HF_ListCurrentCalls() * * This function queries the Audio Gateway for call state information. * * After making this call, the HF_EVENT_CURRENT_CALL_STATE event will be * generated for each call on the audio gateway. * * If HF_USE_CALL_MANAGER is set to XA_ENABLED, an HF_EVENT_CALL_STATE * event is received instead of the HF_EVENT_CURRENT_CALL_STATE event. * * The HF_EVENT_COMMAND_COMPLETE event will be received when the * gateway signals that all calls have been listed. * * Parameters: * Chan - Pointer to a registered channel structure. * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_ListCurrentCalls(HfChannel *Chan, HfCommand *Command); /*--------------------------------------------------------------------------- * HF_EnableCallerIdNotify() * * This function enables notification of the calling line * identification. When this command is complete, the * HF_EVENT_COMMAND_COMPLETE event will be received. * * Parameters: * Chan - Pointer to a registered channel structure. * * Enabled - TRUE or FALSE. * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_EnableCallerIdNotify(HfChannel *Chan, int Enabled, HfCommand *Command); /*--------------------------------------------------------------------------- * HF_EnableCallWaitNotify() * * This function enables notification of call waiting. When this * command is complete, the HF_EVENT_COMMAND_COMPLETE event will be * received. * * Parameters: * Chan - Pointer to a registered channel structure. * * Enabled - TRUE or FALSE. * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). * * BT_STATUS_NOT_SUPPORTED - Call waiting was not included in the list * of supported features (HF_SDK_FEATURES). */ BtStatus HF_EnableCallWaitNotify(HfChannel *Chan, int Enabled, HfCommand *Command); /*--------------------------------------------------------------------------- * HF_GenerateDtmf() * * This function commands the Audio Gateway to send a DTMF code to the * network. A call MUST be ongoing in order for the Audio Gateway to * generate a DTMF code. The HF_EVENT_COMMAND_COMPLETE event will be * received when the DTMF code is sent. * * * Parameters: * Chan - Pointer to a registered channel structure. * * dtmfTone - A single ASCII character in the set 0-9, #, *, A-D. * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_BUSY - No available RFCOMM packets. * * BT_STATUS_FAILED - A service link is not active. * * BT_STATUS_INVALID_PARM - Invalid ASCII character. */ BtStatus HF_GenerateDtmf(HfChannel *Chan, uint8_t dtmfTone, HfCommand *Command); /*--------------------------------------------------------------------------- * HF_GetLastVoiceTag() * * This function retrieves the number associated with the last voice tag * recorded in the Hands-Free Unit. When the number is received, the * application's callback function will receive the * HF_EVENT_COMMAND_COMPLETE event. * * Parameters: * Chan - Pointer to a registered channel structure. * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_GetLastVoiceTag(HfChannel *Chan, HfCommand *Command); /*--------------------------------------------------------------------------- * HF_EnableVoiceRecognition() * * This function enables or disables voice recognition on the Audio * Gateway. When this command is complete, the * HF_EVENT_COMMAND_COMPLETE event will be received. * * Parameters: * Chan - Pointer to a registered channel structure. * * Enabled - Set to TRUE if voice recognition is enabled, and FALSE * if it is disabled. * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_SUCCESS - The specified mode is already set. * * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_FAILED - Could not initiate voice recognition. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_EnableVoiceRecognition(HfChannel *Chan, int Enabled, HfCommand *Command); /*--------------------------------------------------------------------------- * HF_DisableNREC() * * This function disables noise reduction and echo canceling. When this * command is complete, the HF_EVENT_COMMAND_COMPLETE event will be * received. * * Parameters: * Chan - Pointer to a registered channel structure. * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_DisableNREC(HfChannel *Chan, HfCommand *Command); /*--------------------------------------------------------------------------- * HF_ReportMicVolume() * * This function reports the current microphone gain of the Hands-Free * device. * * When the command issued as a result of this call is completed, * the HF_EVENT_COMMAND_COMPLETE event will be received by the * application's callback function. * * Parameters: * Chan - Pointer to a registered channel structure. * * Gain - The current gain level (0-15). * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_ReportMicVolume(HfChannel *Chan, uint8_t Gain, HfCommand *Command); /*--------------------------------------------------------------------------- * HF_ReportSpeakerVolume() * * This function reports the current speaker volume of the Hands-Free * Unit. * * When the command issued as a result of this call is completed, * the HF_EVENT_COMMAND_COMPLETE event will be received by the * application's callback function. * * Parameters: * Chan - Pointer to a registered channel structure. * * Gain - The current gain level (0-15). * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_ReportSpeakerVolume(HfChannel *Chan, uint8_t Gain, HfCommand *Command); /*--------------------------------------------------------------------------- * HF_QueryNetworkOperator() * * This function queries the Audio Gateway for the Network Operator. * The HF_EVENT_NETWORK_OPERATOR event will be received from the audio * gateway. * * When the command issued as a result of this call is completed, * the HF_EVENT_COMMAND_COMPLETE event will be received by the * application's callback function. * * Parameters: * Chan - Pointer to a registered channel structure. * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_QueryNetworkOperator(HfChannel *Chan, HfCommand *Command); /*--------------------------------------------------------------------------- * HF_QuerySubscriberNumber() * * This function queries the Audio Gateway for the Subscriber Number. * The HF_EVENT_SUBSCRIBER_NUMBER event will be received from the audio * gateway. * * When the command issued as a result of this call is completed, * the HF_EVENT_COMMAND_COMPLETE event will be received by the * application's callback function. * * Parameters: * Chan - Pointer to a registered channel structure. * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_QuerySubscriberNumber(HfChannel *Chan, HfCommand *Command); /*--------------------------------------------------------------------------- * HF_EnableExtendedErrors() * * This function enables extended error codes on the Audio Gateway. * (See HfCmeError.) * * When the command issued as a result of this call is completed, * the HF_EVENT_COMMAND_COMPLETE event will be received by the * application's callback function. * * Parameters: * Chan - Pointer to a registered channel structure. * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_EnableExtendedErrors(HfChannel *Chan, HfCommand *Command); /*--------------------------------------------------------------------------- * HF_SendAtCommand() * * This function sends any AT command. The 'AtString' parameter must be * initialized and the AT command must be a properly formatted AT * Command. The "AT" characters must be included in the string when * needed. A carriage return character will be appended to the end of * the string. * * When the AT command is completed, the HF_EVENT_COMMAND_COMPLETE * event will be received by the application's callback function. In * addition, any unsolicited result code not recognized by the * Hands-free SDK will generate an HF_EVENT_AT_RESULT_DATA event. * * When HF_USE_CALL_MANAGER, sending AT commands that affect the call * state should be avoided, because they may compromise the internal * call states of the Call Manager. Use the API calls provided for * initiating, answering, or changing the state of ongoing calls. * * Parameters: * Chan - Pointer to a registered channel structure. * * AtString - A pointer to an initialized AT Command string. Until the * Bluetooth stack sends the HF_EVENT_COMMAND_COMPLETE event for * this command back to the application, the application must not * reuse the memory space in this string, but instead must use * different strings for sending additional commands. * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_SendAtCommand(HfChannel *Chan, const char *AtString, HfCommand *Command); /*--------------------------------------------------------------------------- * HF_QueryPhonebooks() * * This function is only available when HF_USE_PHONEBOOK_COMMANDS is set * to XA_ENABLED. It queries the Audio Gateway for its supported * phonebooks. When this command is issued successfully, the * HF_EVENT_PHONEBOOK_STORAGE event will be received, followed by the * HF_EVENT_COMMAND_COMPLETE event. * * Requires: * HF_USE_PHONEBOOK_COMMANDS must be enabled. * * Parameters: * Chan - Pointer to a registered channel structure. * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_QueryPhonebooks(HfChannel *Chan, HfCommand *Command); /*--------------------------------------------------------------------------- * HF_SelectPhonebook() * * This function is only available when HF_USE_PHONEBOOK_COMMANDS is set * to XA_ENABLED. It makes the specific phonebook the active one for * subsequent calls. When this occurs, the HF_EVENT_COMMAND_COMPLETE * event will be received. * * Requires: * HF_USE_PHONEBOOK_COMMANDS must be enabled. * * Parameters: * Chan - Pointer to a registered channel structure. * * Phonebook - This parameter must contain an enumeration value * corresponding to the phonebook that is to be activated. * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_SelectPhonebook(HfChannel *Chan, HfPhonebooks Phonebook, HfCommand *Command); /*--------------------------------------------------------------------------- * HF_GetCurrentPhonebookInfo() * * This function is only available when HF_USE_PHONEBOOK_COMMANDS is set * to XA_ENABLED. It queries for the active phonebook. When this * command is issued successfully, the HF_EVENT_PHONEBOOK_INFO event * will be received, followed by the HF_EVENT_COMMAND_COMPLETE event. * * Requires: * HF_USE_PHONEBOOK_COMMANDS must be enabled. * * Parameters: * Chan - Pointer to a registered channel structure. * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_GetCurrentPhonebookInfo(HfChannel *Chan, HfCommand *Command); /*--------------------------------------------------------------------------- * HF_GetPhonebookSize() * * This function is only available when HF_USE_PHONEBOOK_COMMANDS is set * to XA_ENABLED. It gets the number of entries and the size of the * elements of the active phonebook. When this command is issued * successfully, the HF_EVENT_PHONEBOOK_INFO event will be received, * followed by the HF_EVENT_COMMAND_COMPLETE event. * * Requires: * HF_USE_PHONEBOOK_COMMANDS must be enabled. * * Parameters: * Chan - Pointer to a registered channel structure. * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_GetPhonebookSize(HfChannel *Chan, HfCommand *Command); /*--------------------------------------------------------------------------- * HF_ReadPhonebookEntries() * * This function is only available when HF_USE_PHONEBOOK_COMMANDS is set * to XA_ENABLED. It reads entries from the specified phonebook in the * specified range. When this command is issued successfully, the * HF_EVENT_PHONEBOOK_ENTRY event will be received, followed by the * HF_EVENT_COMMAND_COMPLETE event. * * Requires: * HF_USE_PHONEBOOK_COMMANDS must be enabled. * * Parameters: * Chan - Pointer to a registered channel structure. * * From - Starting index * * To - Ending index * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_ReadPhonebookEntries(HfChannel *Chan, uint16_t From, uint16_t To, HfCommand *Command); /*--------------------------------------------------------------------------- * HF_FindPhonebookEntries() * * This function is only available when HF_USE_PHONEBOOK_COMMANDS is set * to XA_ENABLED. It finds all entries beginning with the specified * string. Queries the Audio Gateway for its supported phonebooks. * When this command is issued successfully, the * HF_EVENT_PHONEBOOK_ENTRY event will be received, followed by the * HF_EVENT_COMMAND_COMPLETE event. * * Requires: * HF_USE_PHONEBOOK_COMMANDS must be enabled. * * Parameters: * Chan - Pointer to a registered channel structure. * * Text - The search string. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this string, but instead must use different strings for sending * additional commands. * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_FindPhonebookEntries(HfChannel *Chan, const char *Text, HfCommand *Command); /*--------------------------------------------------------------------------- * HF_WritePhonebookEntry() * * This function is only available when HF_USE_PHONEBOOK_COMMANDS is set * to XA_ENABLED. It writes the phonebook entry. When the request is * done HF_EVENT_COMMAND_COMPLETE event will be received. * * Requires: * HF_USE_PHONEBOOK_COMMANDS must be enabled. * * Parameters: * Channel - Pointer to a registered channel structure. * * Index - The phone book index * * Number - The telephone number string. Until the Bluetooth stack * sends the HF_EVENT_COMMAND_COMPLETE event for this command back * to the application, the application must not reuse the memory * space in this string, but instead must use different strings for * sending additional commands. * * Text - The phone book text string. Until the Bluetooth stack sends * the HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this string, but instead must use different strings for sending * additional commands. * * Type - The phone book type * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_WritePhonebookEntry(HfChannel *Chan, uint16_t Index, const char *Number, const char *Text, uint8_t Type, HfCommand *Command); #if HF_USE_IIA == XA_ENABLED /*--------------------------------------------------------------------------- * HF_IIAlwaysActive() * * This function is only available when HF_USE_IIA is set to * XA_ENABLED. This function indicates whether the reporting for an * individual indicator corresponding to the given index can be * deactivated or not. The call, call setup, and call hold individual * indicators cannot be deactivated. * * Requires: * HF_USE_IIA must be enabled. * * Parameters: * hfChanP - This parameter must contain the address of a registered * hands free channel structure. * * iiNdx - An index corresponding to an individual indicator as defined * by the CIND message. * * Returns: * TRUE if the reporting for an individual indicator corresponding * to the given index must always be activated, or FALSE * otherwise. */ BOOL HF_IIAlwaysActive(HfChannel *hfChanP, U8 iiNdx); /*--------------------------------------------------------------------------- * HF_SetIIAReportingState() * * This function is only available when HF_USE_IIA is set to * XA_ENABLED. This function defines which Individual Indicators should * be reported by the Audio Gateway, and which should not. This allows * the reporting of certain individual activators such as signal * strength to be disabled to extend battery life. When the request is * done HF_EVENT_COMMAND_COMPLETE event will be received. * * Requires: * HF_USE_IIA must be enabled. * * Parameters: * hfChanP - This parameter must contain the address of a registered * hands free channel structure. * * iiaCmdP - This parameter must contain the address of a individual * indicators activation command structure. The elements in this * structure correspond to the desired reporting state for the * various individual indicators. * * hfCommandP - This parameter must contain the address of a hands free * command structure to be used for transmitting the command. Until * the HF_EVENT_COMMAND_COMPLETE event for this command is sent back * to the application, the application must not reuse the memory * space in this structure, but instead must use different command * structure instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_CANCELLED - The reporting state is already as requested, so * no BIA command message was sent. * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_SetIIAReportingState(HfChannel *hfChanP, HfIIACmd *iiaCmdP, HfCommand *hfCommandP); #if HF_USE_CALL_MANAGER == XA_ENABLED /*--------------------------------------------------------------------------- * HF_GetIIAReportingState() * * This function is only available when HF_USE_IIA and * HF_USE_CALL_MANAGER are both set to XA_ENABLED. This function * indicates which Individual Indicators are being reported by the Audio * Gateway, and which are not. The application can invoke * HF_SetIIAReportingState() to disable the reporting of certain * individual activators such as signal strength to extend battery * life. * * Requires: * HF_USE_IIA and HF_USE_CALL_MANAGER both must be enabled. * * Parameters: * hfChanP - This parameter must contain the address of a registered * hands free channel structure. * * rsP - This parameter must contain the address of an individual * indicators activation report structure. The elements in this * structure will be updated to correspond to the current reporting * state for the various individual indicators. * * Returns: * BT_STATUS_SUCCESS - The given individual indication report structure * has been updated with the latest activation state information. * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). * * BT_STATUS_FAILED - The call manager data has become corrupted. */ BtStatus HF_GetIIAReportingState(HfChannel *hfChanP, HfIIAReporting *rsP); #endif /* HF_USE_CALL_MANAGER == XA_ENABLED */ #endif /* HF_USE_IIA == XA_ENABLED */ #if HF_CODEC_NEG == XA_ENABLED /*--------------------------------------------------------------------------- * HF_CodecConnectionSetup() *--------------------------------------------------------------------------- * * Synopsis: Send available codec to AG when doing connection codec setup. * * Return: (See header file) * */ BtStatus HF_CodecConnectionSetup(HfChannel *Chan, const char *codecID, HfCommand *Command); /*--------------------------------------------------------------------------- * HF_CodecConnectionReq() * * HF requesting the AG to start the codec connection procedure. * * Parameters: * Chan - Pointer to a registered channel structure. * * Command - A command structure to be used for transmitting the * command. Until the Bluetooth stack sends the * HF_EVENT_COMMAND_COMPLETE event for this command back to the * application, the application must not reuse the memory space in * this structure, but instead must use different command structure * instances for sending additional commands. * * Returns: * BT_STATUS_PENDING - The operation has started, the application will * be notified when the command has completed (via the callback * function registered by HF_Register). * * BT_STATUS_NOT_FOUND - The specified channel has not been registered. * * BT_STATUS_NO_CONNECTION - The operation failed because a service link * does not exist to the audio gateway. * * BT_STATUS_INVALID_PARM - A parameter invalid or not properly * initialized (XA_ERROR_CHECK only). */ BtStatus HF_CodecConnectionReq(HfChannel *Chan, HfCommand *Command); #endif /* HF_CODEC_NEG == XA_ENABLED */ /*--------------------------------------------------------------------------- * HF_IsChannelOpen() * * This function indicates whether a channel is open. * * Parameters: * Chan - Pointer to a registered channel structure. * * Returns: * * TRUE - The specified channel is open. * * FALSE - The channel is closed. */ int HF_IsChannelOpen(HfChannel *Chan); /*--------------------------------------------------------------------------- * HF_IsACLConnected() * * This function indicates whether the ACL link is up. * * Parameters: * Chan - Pointer to a registered channel structure. * * Returns: * TRUE - The ACL link is connected. * * FALSE - The ACL link is disconnected. */ int HF_IsACLConnected(HfChannel *Chan); /*--------------------------------------------------------------------------- * HF_IsHandsfreeConnected() * * This function indicates whether the Hands-Free profile is connected. * * Parameters: * Chan - Pointer to a registered channel structure. * * Returns: * TRUE - The Hands-Free profile is connected. * * FALSE - The Hands-Free profile is not connected. */ int HF_IsHandsfreeConnected(HfChannel *Chan); /*--------------------------------------------------------------------------- * HF_IsAudioConnected() * * This function indicates whether an audio connection is up. * * Parameters: * Chan - Pointer to a registered channel structure. * * Returns: * TRUE - An audio link is up. * * FALSE - No audio link is up. */ int HF_IsAudioConnected(HfChannel *Chan); /*--------------------------------------------------------------------------- * HF_GetRemoteBDAddr() * * This function provides the Bluetooth Device Address associated with * the given channel. * * Parameters: * Chan - Pointer to a registered channel structure. * * bdAddrP - Must contain the address of a structure of type BD_ADDR * where the Bluetooth Device Address can be written. * * Returns: * TRUE if the address was obtained, or FALSE otherwise. */ int HF_GetRemoteBDAddr(HfChannel *Chan, BD_ADDR *bdAddrP); /*--------------------------------------------------------------------------- * HF_ProfileVersion() * * This function provides the profile version retrieved from the SDP * database of the remote device for this service connection. * * Parameters: * Chan - Pointer to a registered channel structure. * * Returns: * HfGatewayVersion * */ HfGatewayVersion HF_ProfileVersion(HfChannel *Chan); /*--------------------------------------------------------------------------- * HF_GatewayFeatures() * * This function provides the features of the Audio Gateway. * * Parameters: * Chan - Pointer to a registered channel structure. * * Returns: * HfGatewayFeatures * */ HfGatewayFeatures HF_GatewayFeatures(HfChannel *Chan); /*--------------------------------------------------------------------------- * HF_GatewayHoldFeatures() * * This function provides the hold features of the audio gateway. * * Parameters: * Chan - Pointer to a registered channel structure. * * Returns: * HfGwHoldFeatures * */ HfGwHoldFeatures HF_GatewayHoldFeatures(HfChannel *Chan); /*--------------------------------------------------------------------------- * HF_SpeakerGain() * * This function provides the current value of speaker volume. * * Parameters: * Chan - Pointer to a registered channel structure. * * Returns: * The current Speaker Gain setting. * */ uint8_t HF_SpeakerGain(HfChannel *Chan); /*--------------------------------------------------------------------------- * HF_MicGain() * * This function the current value of microphone gain. * * Parameters: * Chan - Pointer to a registered channel structure. * * Returns: * The current Microphone Gain setting. */ uint8_t HF_MicGain(HfChannel *Chan); /*--------------------------------------------------------------------------- * HF_IsNRECEnabled() * * This function indicates whether Noise Reduction and Echo Cancelling * is enabled in the Audio Gateway. * * Parameters: * Chan - Pointer to a registered channel structure. * * Returns: * TRUE - NREC is enabled in the AG. * * FALSE - NREC is disabled in the AG. */ int HF_IsNRECEnabled(HfChannel *Chan); /*--------------------------------------------------------------------------- * HF_IsInbandRingEnabled() * * This function indicates whether In-band Ringing is enabled in the * Audio Gateway. * * Parameters: * Chan - Pointer to a registered channel structure. * * Returns: * TRUE - In-band ringing is enabled in the AG. * * FALSE - In-band ringing is disabled in the AG. */ int HF_IsInbandRingEnabled(HfChannel *Chan); /*--------------------------------------------------------------------------- * HF_IsCallIdNotifyEnabled() * * This function indicates whether Caller ID notification is enabled in * the Audio Gateway. * * Parameters: * Chan - Pointer to a registered channel structure. * * Returns: * TRUE - Caller ID notification is enabled in the AG. * * FALSE - Caller ID notification is disabled in the AG. */ int HF_IsCallIdNotifyEnabled(HfChannel *Chan); /*--------------------------------------------------------------------------- * HF_IsVoiceRecActive() * * This function indicates whether Voice Recognition is active in the * Audio Gateway. * * Parameters: * Chan - Pointer to a registered channel structure. * * Returns: * TRUE - Voice Recognition is active in the AG. * * FALSE - Voice Recognition is inactive in the AG. */ int HF_IsVoiceRecActive(HfChannel *Chan); /*--------------------------------------------------------------------------- * HF_IsCallWaitingActive() * * This function indicates whether Call Waiting is active in the Audio * Gateway. * * Parameters: * Chan - Pointer to a registered channel structure. * * Returns: * TRUE - Call Waiting is active in the AG. * * FALSE - Call Waiting is inactive in the AG. */ int HF_IsCallWaitingActive(HfChannel *Chan); /*--------------------------------------------------------------------------- * HF_RegisterCmdOverride() * * This function registers a callback function to be called any time the * command state machine is called. * * When an API function is called in the Hands-free SDK, the request is * queued up to be executed when the channel becomes available. When * the channel is available for the next command on the queue, the * command state machine is called repeatedly to allow the work of the * logical command to be performed. Each call the command state machine * results in either an AT command being sent, or completion of a * command. Each time an AT command is sent and a response is received * (OK, ERROR, CME ERROR, or a command timeout), the state machine is * called again. When the work of the logical command is completed, the * command state machine completes the command and notifies the * application. * * This function allows the registration of a callback function that * will be called each time the command state machine is called. This * allows an application to override the default behavior of an API * call. The callback function can determine which function call is * being executed and set up its own AT commands for transmission. * * When the override function sets up an AT command for transmission, it * must return BT_STATUS_PENDING. This indicates to the command state * machine that it must send the AT command. When the override function * has completed its work, it must return BT_STATUS_SUCCESS. This * indicates to the command state machine that it must complete the * command and notify the application (no AT command will be sent). If * the override function does not perform any work, it must return * BT_STATUS_FAILED to indicate to the command state machine that it * must take the default action. * * In order to use this feature properly, AT commands must be set up * using the internal HfChannel structure field "atCommand." This field * is not normally a public field, but it can be accessed directly and * is of the type AtCommandValues (see HF_SendAtCommand). The override * function must not send the AT command itself, but must rely on the * command state machine to transmit the command. * * In addition, the override function can look at the "state" field of * the HfCommand structure to determine how many times the command state * machine has been called for this particular command. Each time the * state machine is called, the "state" field is incremented. Initially * it will have the value of 0. If multiple AT commands must be sent * for a particular logical command, the "state" field will help to * identify the command to send, or if the command is complete. * * This feature adds a lot of power, but must be used properly as * defined above in order for the internal states of the SDK to be * maintained properly. * * To unregister the callback, this function should be called with a * NULL parameter. * * Parameters: * Callback - A pointer to the function that will be called. * * Returns: * void */ void HF_RegisterCmdOverride(HfCmdOverride Callback); /*--------------------------------------------------------------------------- * HF_SetMasterRole() * * This macro attempts to keep the local device in the Master role. * * Parameters: * Chan - Pointer to a registered channel structure. * * Flag - TRUE if this device wants to be the master, otherwise FALSE. * * Returns: * * BtStatus */ BtStatus HF_SetMasterRole(HfChannel *Chan, int Flag); //#define HF_SetMasterRole(c, f) CMGR_SetMasterRole(&((c)->cmgrHandler), f) /*--------------------------------------------------------------------------- * HF_SetSupportedFeature() * * This function set local hf supported features. * * Parameters: * * feature - bit mask of hf feature. * * Returns: * * NULL */ void HF_SetSupportedFeature(uint16_t feature); /*--------------------------------------------------------------------------- * HF_GetSupportedFeature() * * This function get local hf supported features. * * Parameters: * * NULL. * * Returns: * * hf supported feature */ uint16_t HF_GetSupportedFeature(void); #endif /* __HF_H_ */