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; 9941d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta 10041d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta TIMER_LIST_ENT resp_timer; /* AT response timer */ 10141d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta BOOLEAN resp_timer_on; /* TRUE if AT response timer is active */ 10241d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta 10341d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta TIMER_LIST_ENT hold_timer; /* AT hold timer */ 10441d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta BOOLEAN hold_timer_on; /* TRUE if AT hold timer is active */ 10541d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta 10641d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta /* CIND: lookup table to store the sequence of incoming indicators and their values 10741d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta so when their values come later, we know which value in sequence match certain indicator */ 10841d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta int indicator_lookup[BTA_HF_CLIENT_AT_INDICATOR_COUNT]; 10941d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta 11041d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta} tBTA_HF_CLIENT_AT_CB; 11141d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta 11241d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta/***************************************************************************** 11341d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta** Functions 11441d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta*****************************************************************************/ 11541d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta 11641d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Guptavoid bta_hf_client_at_init(void); 11741d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Guptavoid bta_hf_client_at_reset(void); 118