asterisk-chan-dongle/at_response.h

107 lines
3.2 KiB
C
Raw Normal View History

2023-05-25 08:30:27 +00:00
/*
Copyright (C) 2010 bg <bg_one@mail.ru>
*/
#ifndef CHAN_DONGLE_AT_RESPONSE_H_INCLUDED
#define CHAN_DONGLE_AT_RESPONSE_H_INCLUDED
#include "export.h" /* EXPORT_DECL EXPORT_DEF */
struct pvt;
struct iovec;
/* AT_RESPONSES_TABLE */
#define AT_RES_AS_ENUM(res, desc, str) RES_ ## res,
#define AT_RES_AS_STRUCTLIST(res, desc, str) {RES_ ## res, desc, str, (sizeof(str)-1)},
#define AT_RESPONSES_TABLE(_) \
_( PARSE_ERROR, "PARSE ERROR", "") \
_( UNKNOWN, "UNKNOWN", "") \
\
_( BOOT, "^BOOT", "^BOOT:") \
_( BUSY, "BUSY", "BUSY\r") \
_( CEND, "^CEND", "^CEND:") \
\
_( CMGR, "+CMGR", "+CMGR:") \
_( CMS_ERROR, "+CMS ERROR", "+CMS ERROR:") \
_( CMTI, "+CMTI", "+CMTI:") \
_( CDSI, "+CDSI", "+CDSI:") \
\
_( CNUM, "+CNUM", "+CNUM:") \
/* and "ERROR+CNUM:", hacked later on */ \
\
_( CONF, "^CONF", "^CONF:") \
_( CONN, "^CONN", "^CONN:") \
_( COPS, "+COPS", "+COPS:") \
_( CPIN, "+CPIN", "+CPIN:") \
\
_( CREG, "+CREG", "+CREG:") \
_( CSQ, "+CSQ", "+CSQ:") \
_( CSSI, "+CSSI", "+CSSI:") \
_( CSSU, "+CSSU", "+CSSU:") \
\
_( CUSD, "+CUSD", "+CUSD:") \
_( ERROR, "ERROR", "ERROR\r") \
/* and "COMMAND NOT SUPPORT\r", hacked later on */ \
\
_( MODE, "^MODE", "^MODE:") \
_( NO_CARRIER, "NO CARRIER", "NO CARRIER\r") \
\
_( NO_DIALTONE, "NO DIALTONE", "NO DIALTONE\r") \
_( OK, "OK", "OK\r") \
_( ORIG, "^ORIG", "^ORIG:") \
_( RING, "RING", "RING\r") \
\
_( RSSI, "^RSSI", "^RSSI:") \
_( SMMEMFULL, "^SMMEMFULL", "^SMMEMFULL:") \
_( SMS_PROMPT, "> ", "> ") \
_( SRVST, "^SRVST", "^SRVST:") \
\
_( CVOICE, "^CVOICE", "^CVOICE:") \
_( CMGS, "+CMGS", "+CMGS:") \
_( CPMS, "+CPMS", "+CPMS:") \
_( CSCA, "+CSCA", "+CSCA:") \
\
_( CLCC, "+CLCC", "+CLCC:") \
_( CCWA, "+CCWA", "+CCWA:") \
/* AT_RESPONSES_TABLE */
typedef enum {
/* Hackish way to force RES_PARSE_ERROR = -1 for compatibility */
COMPATIBILITY_RES_START_AT_MINUSONE = -2,
AT_RESPONSES_TABLE(AT_RES_AS_ENUM)
/* Hackish way to maintain MAX and MIN responses for compatibility */
RES_MIN = RES_PARSE_ERROR,
RES_MAX = RES_CCWA,
} at_res_t;
/*! response description */
typedef struct at_response_t
{
at_res_t res;
const char* name;
const char* id;
unsigned idlen;
} at_response_t;
/*! responses control */
typedef struct at_responses_t
{
const at_response_t* responses;
unsigned ids_first; /*!< index of first id */
unsigned ids; /*!< number of ids */
int name_first; /*!< value of enum for first name */
int name_last; /*!< value of enum for last name */
} at_responses_t;
/*! responses description */
EXPORT_DECL const at_responses_t at_responses;
EXPORT_DECL const char* at_res2str (at_res_t res);
EXPORT_DECL int at_response (struct pvt* pvt, const struct iovec * iov, int iovcnt, at_res_t at_res);
EXPORT_DECL int at_poll_sms (struct pvt* pvt);
#endif /* CHAN_DONGLE_AT_RESPONSE_H_INCLUDED */