141d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta/******************************************************************************
241d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta *
341d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta *  Copyright (c) 2014 The Android Open Source Project
441d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta *  Copyright (C) 2003-2012 Broadcom Corporation
541d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta *
641d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta *  Licensed under the Apache License, Version 2.0 (the "License");
741d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta *  you may not use this file except in compliance with the License.
841d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta *  You may obtain a copy of the License at:
941d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta *
1041d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta *  http://www.apache.org/licenses/LICENSE-2.0
1141d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta *
1241d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta *  Unless required by applicable law or agreed to in writing, software
1341d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta *  distributed under the License is distributed on an "AS IS" BASIS,
1441d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1541d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta *  See the License for the specific language governing permissions and
1641d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta *  limitations under the License.
1741d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta *
1841d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta ******************************************************************************/
1941d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta
2041d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta/*****************************************************************************
2141d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta**  Data types
2241d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta*****************************************************************************/
2341d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta
2441d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta/* ASCII character string of arguments to the AT command */
2541d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta#define BTA_HF_CLIENT_AT_MAX_LEN        512
2641d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta
2741d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta/* AT command table element */
2841d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Guptatypedef struct
2941d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta{
3041d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    const char  *p_cmd;         /* AT command string */
3141d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    UINT8       arg_type;       /* allowable argument type syntax */
3241d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    UINT8       fmt;            /* whether arg is int or string */
3341d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    UINT8       min;            /* minimum value for int arg */
3441d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    INT16       max;            /* maximum value for int arg */
3541d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta} tBTA_AG_AT_CMD;
3641d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta
3741d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta/* callback function executed when command is parsed */
3841d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Guptatypedef void (tBTA_AG_AT_CMD_CBACK)(void *p_user, UINT16 cmd, UINT8 arg_type,
3941d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta                                    char *p_arg, INT16 int_arg);
4041d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta
4141d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta/* callback function executed to send "ERROR" result code */
4241d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Guptatypedef void (tBTA_AG_AT_ERR_CBACK)(void *p_user, BOOLEAN unknown, char *p_arg);
4341d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta
4441d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Guptaenum
4541d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta{
4641d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    BTA_HF_CLIENT_AT_NONE,
4741d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    BTA_HF_CLIENT_AT_BRSF,
4841d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    BTA_HF_CLIENT_AT_BAC,
4941d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    BTA_HF_CLIENT_AT_CIND,
5041d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    BTA_HF_CLIENT_AT_CIND_STATUS,
5141d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    BTA_HF_CLIENT_AT_CMER,
5241d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    BTA_HF_CLIENT_AT_CHLD,
5341d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    BTA_HF_CLIENT_AT_CMEE,
5441d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    BTA_HF_CLIENT_AT_BIA,
5541d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    BTA_HF_CLIENT_AT_CLIP,
5641d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    BTA_HF_CLIENT_AT_CCWA,
5741d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    BTA_HF_CLIENT_AT_COPS,
5841d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    BTA_HF_CLIENT_AT_CLCC,
5941d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    BTA_HF_CLIENT_AT_BVRA,
6041d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    BTA_HF_CLIENT_AT_VGS,
6141d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    BTA_HF_CLIENT_AT_VGM,
6241d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    BTA_HF_CLIENT_AT_ATD,
6341d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    BTA_HF_CLIENT_AT_BLDN,
6441d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    BTA_HF_CLIENT_AT_ATA,
6541d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    BTA_HF_CLIENT_AT_CHUP,
6641d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    BTA_HF_CLIENT_AT_BTRH,
6741d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    BTA_HF_CLIENT_AT_VTS,
6841d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    BTA_HF_CLIENT_AT_BCC,
6941d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    BTA_HF_CLIENT_AT_BCS,
7041d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    BTA_HF_CLIENT_AT_CNUM,
7141d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    BTA_HF_CLIENT_AT_NREC,
7241d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    BTA_HF_CLIENT_AT_BINP,
7341d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta};
7441d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta
7541d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Guptatypedef UINT8 tBTA_HF_CLIENT_AT_CMD;
7641d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta
7741d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta/* Maximum combined buffer for received AT events string */
7841d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta#define BTA_HF_CLIENT_AT_PARSER_MAX_LEN        4096
7941d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta
8041d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta/* This structure holds prepared AT command queued for sending */
8141d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Guptastruct queued_at_cmd{
8241d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    tBTA_HF_CLIENT_AT_CMD cmd;
8341d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    char buf[BTA_HF_CLIENT_AT_MAX_LEN];
8441d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    UINT16 buf_len;
8541d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    struct queued_at_cmd *next;
8641d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta};
8741d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Guptatypedef struct queued_at_cmd tBTA_HF_CLIENT_AT_QCMD;
8841d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta
8941d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta/* Maximum number of indicators */
9041d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta#define BTA_HF_CLIENT_AT_INDICATOR_COUNT 20
9141d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta
9241d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta/* AT command parsing control block */
9341d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Guptatypedef struct
9441d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta{
9541d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    char                    buf[BTA_HF_CLIENT_AT_PARSER_MAX_LEN + 1]; /* extra byte to always have \0 at the end */
9641d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    unsigned int            offset;
9741d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    tBTA_HF_CLIENT_AT_CMD   current_cmd;
9841d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    tBTA_HF_CLIENT_AT_QCMD  *queued_cmd;
9978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov    alarm_t                 *resp_timer;    /* AT response timer */
10078bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov    alarm_t                 *hold_timer;    /* AT hold timer */
10141d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta
10241d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    /* CIND: lookup table to store the sequence of incoming indicators and their values
10341d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta       so when their values come later, we know which value in sequence match certain indicator */
10441d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta    int                     indicator_lookup[BTA_HF_CLIENT_AT_INDICATOR_COUNT];
10541d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta
10641d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta} tBTA_HF_CLIENT_AT_CB;
10741d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta
10841d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta/*****************************************************************************
10941d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta**  Functions
11041d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta*****************************************************************************/
11141d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta
11241d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Guptavoid bta_hf_client_at_init(void);
11341d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Guptavoid bta_hf_client_at_reset(void);
114