/******************************************************************************
 *
 *  Copyright 2004-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.
 *
 ******************************************************************************/

/******************************************************************************
 *
 *  Interface file for BTA AG AT command interpreter.
 *
 ******************************************************************************/
#ifndef BTA_AG_AT_H
#define BTA_AG_AT_H

#include <stddef.h>
#include <cstddef>
#include <cstdint>

/*****************************************************************************
 *  Constants
 ****************************************************************************/

/* AT command argument capabilities */
#define BTA_AG_AT_NONE 0x01 /* no argument */
#define BTA_AG_AT_SET 0x02  /* set value */
#define BTA_AG_AT_READ 0x04 /* read value */
#define BTA_AG_AT_TEST 0x08 /* test value range */
#define BTA_AG_AT_FREE 0x10 /* freeform argument */

/* AT command argument format */
#define BTA_AG_AT_STR 0 /* string */
#define BTA_AG_AT_INT 1 /* integer */

/*****************************************************************************
 *  Data types
 ****************************************************************************/

/* AT command table element */
typedef struct {
  const char* p_cmd; /* AT command string */
  size_t command_id; /* passed to the callback on p_cmd match */
  uint8_t arg_type;  /* allowable argument type syntax */
  uint8_t fmt;       /* whether arg is int or string */
  uint8_t min;       /* minimum value for int arg */
  int16_t max;       /* maximum value for int arg */
} tBTA_AG_AT_CMD;

/* callback function executed when command is parsed */
struct tBTA_AG_SCB;
typedef void(tBTA_AG_AT_CMD_CBACK)(tBTA_AG_SCB* p_user, uint16_t command_id,
                                   uint8_t arg_type, char* p_arg, char* p_end,
                                   int16_t int_arg);

/* callback function executed to send "ERROR" result code */
typedef void(tBTA_AG_AT_ERR_CBACK)(tBTA_AG_SCB* p_user, bool unknown,
                                   const char* p_arg);

/* AT command parsing control block */
typedef struct {
  const tBTA_AG_AT_CMD* p_at_tbl;    /* AT command table */
  tBTA_AG_AT_CMD_CBACK* p_cmd_cback; /* command callback */
  tBTA_AG_AT_ERR_CBACK* p_err_cback; /* error callback */
  void* p_user;                      /* user-defined data */
  char* p_cmd_buf;                   /* temp parsing buffer */
  uint16_t cmd_pos;                  /* position in temp buffer */
  uint16_t cmd_max_len;              /* length of temp buffer to allocate */
  uint8_t state;                     /* parsing state */
} tBTA_AG_AT_CB;

/*****************************************************************************
 *  Function prototypes
 ****************************************************************************/

/*****************************************************************************
 *
 * Function         bta_ag_at_init
 *
 * Description      Initialize the AT command parser control block.
 *
 *
 * Returns          void
 *
 ****************************************************************************/
extern void bta_ag_at_init(tBTA_AG_AT_CB* p_cb);

/*****************************************************************************
 *
 * Function         bta_ag_at_reinit
 *
 * Description      Re-initialize the AT command parser control block.  This
 *                  function resets the AT command parser state and frees
 *                  any GKI buffer.
 *
 *
 * Returns          void
 *
 ****************************************************************************/
extern void bta_ag_at_reinit(tBTA_AG_AT_CB* p_cb);

/*****************************************************************************
 *
 * Function         bta_ag_at_parse
 *
 * Description      Parse AT commands.  This function will take the input
 *                  character string and parse it for AT commands according to
 *                  the AT command table passed in the control block.
 *
 *
 * Returns          void
 *
 ****************************************************************************/
extern void bta_ag_at_parse(tBTA_AG_AT_CB* p_cb, char* p_buf, uint16_t len);

#endif /* BTA_AG_AT_H */
