The Android Open Source Project | 00f06fc | 2009-03-03 19:32:15 -0800 | [diff] [blame] | 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 | |
Chih-Hung Hsieh | 8593eeb | 2016-06-29 11:22:36 -0700 | [diff] [blame] | 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 */ |
The Android Open Source Project | 00f06fc | 2009-03-03 19:32:15 -0800 | [diff] [blame] | 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*/ |