Bluetooth: Add support for HFP Client role.

Implementation changes in BTA and BTIF layer to support
HFP Client role.

Change-Id: I9f939c18e8f989a50f298d0b313c5a0959c030a7
diff --git a/bta/hf_client/bta_hf_client_at.h b/bta/hf_client/bta_hf_client_at.h
new file mode 100644
index 0000000..917c605
--- /dev/null
+++ b/bta/hf_client/bta_hf_client_at.h
@@ -0,0 +1,117 @@
+/******************************************************************************
+ *
+ *  Copyright (c) 2014 The Android Open Source Project
+ *  Copyright (C) 2003-2012 Broadcom Corporation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at:
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ ******************************************************************************/
+
+/*****************************************************************************
+**  Data types
+*****************************************************************************/
+
+/* ASCII character string of arguments to the AT command */
+#define BTA_HF_CLIENT_AT_MAX_LEN        512
+
+/* AT command table element */
+typedef struct
+{
+    const char  *p_cmd;         /* AT command string */
+    UINT8       arg_type;       /* allowable argument type syntax */
+    UINT8       fmt;            /* whether arg is int or string */
+    UINT8       min;            /* minimum value for int arg */
+    INT16       max;            /* maximum value for int arg */
+} tBTA_AG_AT_CMD;
+
+/* callback function executed when command is parsed */
+typedef void (tBTA_AG_AT_CMD_CBACK)(void *p_user, UINT16 cmd, UINT8 arg_type,
+                                    char *p_arg, INT16 int_arg);
+
+/* callback function executed to send "ERROR" result code */
+typedef void (tBTA_AG_AT_ERR_CBACK)(void *p_user, BOOLEAN unknown, char *p_arg);
+
+enum
+{
+    BTA_HF_CLIENT_AT_NONE,
+    BTA_HF_CLIENT_AT_BRSF,
+    BTA_HF_CLIENT_AT_BAC,
+    BTA_HF_CLIENT_AT_CIND,
+    BTA_HF_CLIENT_AT_CIND_STATUS,
+    BTA_HF_CLIENT_AT_CMER,
+    BTA_HF_CLIENT_AT_CHLD,
+    BTA_HF_CLIENT_AT_CMEE,
+    BTA_HF_CLIENT_AT_BIA,
+    BTA_HF_CLIENT_AT_CLIP,
+    BTA_HF_CLIENT_AT_CCWA,
+    BTA_HF_CLIENT_AT_COPS,
+    BTA_HF_CLIENT_AT_CLCC,
+    BTA_HF_CLIENT_AT_BVRA,
+    BTA_HF_CLIENT_AT_VGS,
+    BTA_HF_CLIENT_AT_VGM,
+    BTA_HF_CLIENT_AT_ATD,
+    BTA_HF_CLIENT_AT_BLDN,
+    BTA_HF_CLIENT_AT_ATA,
+    BTA_HF_CLIENT_AT_CHUP,
+    BTA_HF_CLIENT_AT_BTRH,
+    BTA_HF_CLIENT_AT_VTS,
+    BTA_HF_CLIENT_AT_BCC,
+    BTA_HF_CLIENT_AT_BCS,
+    BTA_HF_CLIENT_AT_CNUM,
+    BTA_HF_CLIENT_AT_NREC,
+    BTA_HF_CLIENT_AT_BINP,
+};
+
+typedef UINT8 tBTA_HF_CLIENT_AT_CMD;
+
+/* Maximum combined buffer for received AT events string */
+#define BTA_HF_CLIENT_AT_PARSER_MAX_LEN        4096
+
+/* This structure holds prepared AT command queued for sending */
+struct queued_at_cmd{
+    tBTA_HF_CLIENT_AT_CMD cmd;
+    char buf[BTA_HF_CLIENT_AT_MAX_LEN];
+    UINT16 buf_len;
+    struct queued_at_cmd *next;
+};
+typedef struct queued_at_cmd tBTA_HF_CLIENT_AT_QCMD;
+
+/* Maximum number of indicators */
+#define BTA_HF_CLIENT_AT_INDICATOR_COUNT 20
+
+/* AT command parsing control block */
+typedef struct
+{
+    char                    buf[BTA_HF_CLIENT_AT_PARSER_MAX_LEN + 1]; /* extra byte to always have \0 at the end */
+    unsigned int            offset;
+    tBTA_HF_CLIENT_AT_CMD   current_cmd;
+    tBTA_HF_CLIENT_AT_QCMD  *queued_cmd;
+
+    TIMER_LIST_ENT          resp_timer;    /* AT response timer */
+    BOOLEAN                 resp_timer_on; /* TRUE if AT response timer is active */
+
+    TIMER_LIST_ENT          hold_timer;    /* AT hold timer */
+    BOOLEAN                 hold_timer_on; /* TRUE if AT hold timer is active */
+
+    /* CIND: lookup table to store the sequence of incoming indicators and their values
+       so when their values come later, we know which value in sequence match certain indicator */
+    int                     indicator_lookup[BTA_HF_CLIENT_AT_INDICATOR_COUNT];
+
+} tBTA_HF_CLIENT_AT_CB;
+
+/*****************************************************************************
+**  Functions
+*****************************************************************************/
+
+void bta_hf_client_at_init(void);
+void bta_hf_client_at_reset(void);