1 /******************************************************************************
2  *
3  *  Copyright 2004-2012 Broadcom Corporation
4  *
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at:
8  *
9  *  http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  ******************************************************************************/
18 
19 /******************************************************************************
20  *
21  *  Interface file for BTA AG AT command interpreter.
22  *
23  ******************************************************************************/
24 #ifndef BTA_AG_AT_H
25 #define BTA_AG_AT_H
26 
27 #include <stddef.h>
28 #include <cstddef>
29 #include <cstdint>
30 
31 /*****************************************************************************
32  *  Constants
33  ****************************************************************************/
34 
35 /* AT command argument capabilities */
36 #define BTA_AG_AT_NONE 0x01 /* no argument */
37 #define BTA_AG_AT_SET 0x02  /* set value */
38 #define BTA_AG_AT_READ 0x04 /* read value */
39 #define BTA_AG_AT_TEST 0x08 /* test value range */
40 #define BTA_AG_AT_FREE 0x10 /* freeform argument */
41 
42 /* AT command argument format */
43 #define BTA_AG_AT_STR 0 /* string */
44 #define BTA_AG_AT_INT 1 /* integer */
45 
46 /*****************************************************************************
47  *  Data types
48  ****************************************************************************/
49 
50 /* AT command table element */
51 typedef struct {
52   const char* p_cmd; /* AT command string */
53   size_t command_id; /* passed to the callback on p_cmd match */
54   uint8_t arg_type;  /* allowable argument type syntax */
55   uint8_t fmt;       /* whether arg is int or string */
56   uint8_t min;       /* minimum value for int arg */
57   int16_t max;       /* maximum value for int arg */
58 } tBTA_AG_AT_CMD;
59 
60 /* callback function executed when command is parsed */
61 struct tBTA_AG_SCB;
62 typedef void(tBTA_AG_AT_CMD_CBACK)(tBTA_AG_SCB* p_user, uint16_t command_id,
63                                    uint8_t arg_type, char* p_arg, char* p_end,
64                                    int16_t int_arg);
65 
66 /* callback function executed to send "ERROR" result code */
67 typedef void(tBTA_AG_AT_ERR_CBACK)(tBTA_AG_SCB* p_user, bool unknown,
68                                    const char* p_arg);
69 
70 /* AT command parsing control block */
71 typedef struct {
72   const tBTA_AG_AT_CMD* p_at_tbl;    /* AT command table */
73   tBTA_AG_AT_CMD_CBACK* p_cmd_cback; /* command callback */
74   tBTA_AG_AT_ERR_CBACK* p_err_cback; /* error callback */
75   void* p_user;                      /* user-defined data */
76   char* p_cmd_buf;                   /* temp parsing buffer */
77   uint16_t cmd_pos;                  /* position in temp buffer */
78   uint16_t cmd_max_len;              /* length of temp buffer to allocate */
79   uint8_t state;                     /* parsing state */
80 } tBTA_AG_AT_CB;
81 
82 /*****************************************************************************
83  *  Function prototypes
84  ****************************************************************************/
85 
86 /*****************************************************************************
87  *
88  * Function         bta_ag_at_init
89  *
90  * Description      Initialize the AT command parser control block.
91  *
92  *
93  * Returns          void
94  *
95  ****************************************************************************/
96 extern void bta_ag_at_init(tBTA_AG_AT_CB* p_cb);
97 
98 /*****************************************************************************
99  *
100  * Function         bta_ag_at_reinit
101  *
102  * Description      Re-initialize the AT command parser control block.  This
103  *                  function resets the AT command parser state and frees
104  *                  any GKI buffer.
105  *
106  *
107  * Returns          void
108  *
109  ****************************************************************************/
110 extern void bta_ag_at_reinit(tBTA_AG_AT_CB* p_cb);
111 
112 /*****************************************************************************
113  *
114  * Function         bta_ag_at_parse
115  *
116  * Description      Parse AT commands.  This function will take the input
117  *                  character string and parse it for AT commands according to
118  *                  the AT command table passed in the control block.
119  *
120  *
121  * Returns          void
122  *
123  ****************************************************************************/
124 extern void bta_ag_at_parse(tBTA_AG_AT_CB* p_cb, char* p_buf, uint16_t len);
125 
126 #endif /* BTA_AG_AT_H */
127