• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /* //device/system/reference-ril/atchannel.h
2  **
3  ** Copyright 2006, The Android Open Source Project
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  #ifndef ATCHANNEL_H
19  #define ATCHANNEL_H 1
20  
21  #ifdef __cplusplus
22  extern "C" {
23  #endif
24  
25  /* define AT_DEBUG to send AT traffic to /tmp/radio-at.log" */
26  #define AT_DEBUG  0
27  
28  #if AT_DEBUG
29  extern void  AT_DUMP(const char* prefix, const char*  buff, int  len);
30  #else
31  #define  AT_DUMP(prefix,buff,len)  do{}while(0)
32  #endif
33  
34  #define AT_ERROR_GENERIC -1
35  #define AT_ERROR_COMMAND_PENDING -2
36  #define AT_ERROR_CHANNEL_CLOSED -3
37  #define AT_ERROR_TIMEOUT -4
38  #define AT_ERROR_INVALID_THREAD -5 /* AT commands may not be issued from
39                                         reader thread (or unsolicited response
40                                         callback */
41  #define AT_ERROR_INVALID_RESPONSE -6 /* eg an at_send_command_singleline that
42                                          did not get back an intermediate
43                                          response */
44  
45  
46  typedef enum {
47      NO_RESULT,   /* no intermediate response expected */
48      NUMERIC,     /* a single intermediate response starting with a 0-9 */
49      SINGLELINE,  /* a single intermediate response starting with a prefix */
50      MULTILINE    /* multiple line intermediate response
51                      starting with a prefix */
52  } ATCommandType;
53  
54  /** a singly-lined list of intermediate responses */
55  typedef struct ATLine  {
56      struct ATLine *p_next;
57      char *line;
58  } ATLine;
59  
60  /** Free this with at_response_free() */
61  typedef struct {
62      int success;              /* true if final response indicates
63                                      success (eg "OK") */
64      char *finalResponse;      /* eg OK, ERROR */
65      ATLine  *p_intermediates; /* any intermediate responses */
66  } ATResponse;
67  
68  /**
69   * a user-provided unsolicited response handler function
70   * this will be called from the reader thread, so do not block
71   * "s" is the line, and "sms_pdu" is either NULL or the PDU response
72   * for multi-line TS 27.005 SMS PDU responses (eg +CMT:)
73   */
74  typedef void (*ATUnsolHandler)(const char *s, const char *sms_pdu);
75  
76  int at_open(int fd, ATUnsolHandler h);
77  void at_close();
78  
79  /* This callback is invoked on the command thread.
80     You should reset or handshake here to avoid getting out of sync */
81  void at_set_on_timeout(void (*onTimeout)(void));
82  /* This callback is invoked on the reader thread (like ATUnsolHandler)
83     when the input stream closes before you call at_close
84     (not when you call at_close())
85     You should still call at_close()
86     It may also be invoked immediately from the current thread if the read
87     channel is already closed */
88  void at_set_on_reader_closed(void (*onClose)(void));
89  
90  int at_send_command_singleline (const char *command,
91                                  const char *responsePrefix,
92                                   ATResponse **pp_outResponse);
93  
94  int at_send_command_numeric (const char *command,
95                                   ATResponse **pp_outResponse);
96  
97  int at_send_command_multiline (const char *command,
98                                  const char *responsePrefix,
99                                   ATResponse **pp_outResponse);
100  
101  
102  int at_handshake();
103  
104  int at_send_command (const char *command, ATResponse **pp_outResponse);
105  
106  int at_send_command_sms (const char *command, const char *pdu,
107                              const char *responsePrefix,
108                              ATResponse **pp_outResponse);
109  
110  void at_response_free(ATResponse *p_response);
111  
112  typedef enum {
113      CME_ERROR_NON_CME = -1,
114      CME_SUCCESS = 0,
115      CME_SIM_NOT_INSERTED = 10
116  } AT_CME_Error;
117  
118  AT_CME_Error at_get_cme_error(const ATResponse *p_response);
119  
120  #ifdef __cplusplus
121  }
122  #endif
123  
124  #endif /*ATCHANNEL_H*/
125