123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313 |
- #ifndef __AT_CMD_SMS_H__
- #define __AT_CMD_SMS_H__
- #include "ats_config.h"
- #include "mal_api.h"
- #include "quec_proj_config.h"
- #include "quec_atcmd_sms.h"
- #define AT_SMS_STATUS_UNREAD 0
- #define AT_SMS_STATUS_READ 1
- #define AT_SMS_STATUS_UNSENT 2
- #define AT_SMS_STATUS_SENT 3
- #define AT_SMS_STATUS_ALL 4
- #define AT_SMS_LONG_MAX_SIZE 420
- #ifdef CONFIG_QUEC_PROJECT_FEATURE_SMS
- bool atSmsGetPduNum(const uint8_t *pPDUData, uint8_t *pPDUNUM, uint8_t *pType, uint8_t *nPDULen);
- bool atSmsIsPduValid(uint8_t *pPDUData, uint8_t *nPDULen, bool bReadOrListMsgFlag);
- #else
- static bool atSmsGetPduNum(const uint8_t *pPDUData, uint8_t *pPDUNUM, uint8_t *pType, uint8_t *nPDULen);
- static bool atSmsIsPduValid(uint8_t *pPDUData, uint8_t *nPDULen, bool bReadOrListMsgFlag);
- #endif
- /**
- * add sca to pdu
- */
- #ifdef CONFIG_QUEC_PROJECT_FEATURE_SMS
- bool atSmsPduAddSca(uint8_t *InPDU, uint8_t *OutPDU, size_t *pSize, uint8_t nSim);
- #else
- static bool atSmsPduAddSca(uint8_t *InPDU, uint8_t *OutPDU, size_t *pSize, uint8_t nSim);
- #endif
- #define SMS_CMGS_MAX_SIZE 1024 + 2 // include ctrl+z
- #ifndef CONFIG_QUEC_PROJECT_FEATURE_SMS
- typedef struct
- {
- CFW_DIALNUMBER_V2 number;
- uint8_t *data;
- unsigned pdu_length;
- } cmgsAsyncContext_t;
- #endif
- #ifndef CONFIG_QUEC_PROJECT_FEATURE_SMS
- typedef struct
- {
- CFW_DIALNUMBER_V2 number;
- uint8_t data[SMS_MAX_SIZE];
- unsigned pdu_length;
- } cmgcAsyncContext_t;
- typedef struct
- {
- CFW_DIALNUMBER_V2 number;
- uint8_t stat;
- uint8_t *data;
- uint8_t pdu_data[SMS_MAX_SIZE];
- uint32_t pdu_length;
- } cmgwAsyncCtx_t;
- #endif
- typedef struct
- {
- CFW_DIALNUMBER_V2 number;
- unsigned number_strlen;
- unsigned nindex;
- uint8_t status;
- } cmssAsyncContext_t;
- typedef struct
- {
- uint32_t value1;
- uint32_t value2;
- } smsValueIntegerMap_t;
- static const osiValueStrMap_t gSmsState[] = {
- {CFW_SMS_STORED_STATUS_UNREAD, "REC UNREAD"},
- {CFW_SMS_STORED_STATUS_READ, "REC READ"},
- {CFW_SMS_STORED_STATUS_UNSENT, "STO UNSENT"},
- {CFW_SMS_STORED_STATUS_SENT_NOT_SR_REQ, "STO SENT"},
- {CFW_SMS_STORED_STATUS_STORED_ALL, "ALL"},
- {0, NULL},
- };
- static const osiValueStrMap_t gCmgwSmsState[] = {
- {CFW_SMS_STORED_STATUS_UNSENT, "STO UNSENT"},
- {CFW_SMS_STORED_STATUS_SENT_NOT_SR_REQ, "STO SENT"},
- {0, NULL},
- };
- static const osiValueStrMap_t gSmsNumState[] = {
- {AT_SMS_STATUS_UNREAD, "REC UNREAD"},
- {AT_SMS_STATUS_READ, "REC READ"},
- {AT_SMS_STATUS_UNSENT, "STO UNSENT"},
- {AT_SMS_STATUS_SENT, "STO SENT"},
- {AT_SMS_STATUS_ALL, "ALL"},
- {0, NULL},
- };
- static smsValueIntegerMap_t gSmsStatusCfwToAt[] = {
- {CFW_SMS_STORED_STATUS_UNREAD, AT_SMS_STATUS_UNREAD},
- {CFW_SMS_STORED_STATUS_READ, AT_SMS_STATUS_READ},
- {CFW_SMS_STORED_STATUS_UNSENT, AT_SMS_STATUS_UNSENT},
- {CFW_SMS_STORED_STATUS_SENT_NOT_SR_REQ, AT_SMS_STATUS_SENT},
- {CFW_SMS_STORED_STATUS_SENT_SR_REQ_NOT_RECV, AT_SMS_STATUS_SENT},
- {CFW_SMS_STORED_STATUS_SENT_SR_REQ_NOT_STORE, AT_SMS_STATUS_SENT},
- {CFW_SMS_STORED_STATUS_SENT_SR_REQ_RECV_STORE, AT_SMS_STATUS_SENT},
- {CFW_SMS_STORED_STATUS_STORED_ALL, CFW_SMS_STORED_STATUS_STORED_ALL},
- {0, 0},
- };
- static smsValueIntegerMap_t gAtStatusToCfw[] = {
- {AT_SMS_STATUS_UNREAD, CFW_SMS_STORED_STATUS_UNREAD},
- {AT_SMS_STATUS_READ, CFW_SMS_STORED_STATUS_READ},
- {AT_SMS_STATUS_UNSENT, CFW_SMS_STORED_STATUS_UNSENT},
- {AT_SMS_STATUS_SENT, CFW_SMS_STORED_STATUS_SENT_NOT_SR_REQ |
- CFW_SMS_STORED_STATUS_SENT_SR_REQ_NOT_RECV |
- CFW_SMS_STORED_STATUS_SENT_SR_REQ_NOT_STORE |
- CFW_SMS_STORED_STATUS_SENT_SR_REQ_RECV_STORE},
- {AT_SMS_STATUS_ALL, CFW_SMS_STORED_STATUS_STORED_ALL},
- {5, 0xff},
- };
- static smsValueIntegerMap_t gAtCmgdStatusToCfw[] = {
- {0, 0},
- {1, CFW_SMS_STORED_STATUS_READ},
- {2, CFW_SMS_STORED_STATUS_READ | CFW_SMS_STORED_STATUS_SENT_NOT_SR_REQ |
- CFW_SMS_STORED_STATUS_SENT_SR_REQ_NOT_RECV | CFW_SMS_STORED_STATUS_SENT_SR_REQ_NOT_STORE |
- CFW_SMS_STORED_STATUS_SENT_SR_REQ_RECV_STORE},
- {3, CFW_SMS_STORED_STATUS_READ | CFW_SMS_STORED_STATUS_SENT_NOT_SR_REQ |
- CFW_SMS_STORED_STATUS_SENT_SR_REQ_NOT_RECV | CFW_SMS_STORED_STATUS_SENT_SR_REQ_NOT_STORE |
- CFW_SMS_STORED_STATUS_SENT_SR_REQ_RECV_STORE | CFW_SMS_STORED_STATUS_UNSENT},
- {4, CFW_SMS_STORED_STATUS_STORED_ALL},
- {5, 0xff},
- };
- static const osiValueStrMap_t gStoreList[] = {
- {CFW_SMS_STORAGE_ME, "ME"},
- {CFW_SMS_STORAGE_MT, "MT"},
- {CFW_SMS_STORAGE_SM, "SM"},
- {0, NULL},
- };
- typedef struct
- {
- uint8_t n;
- uint8_t cnma_data[200];
- uint16_t cnma_data_length;
- } cnmaAsyncContext_t;
- #ifdef CONFIG_CONCAT_SMS_SUPPORT
- typedef struct
- {
- uint8_t nCurrent; // the index of the segment of the concatenated short message
- uint16_t nRefNum; // The reference number of concatenated short message
- uint16_t nPhyIndex; // Physical storage index
- uint8_t nStorage;
- uint8_t nSimId;
- char *pHeadStr; // The string of urc of contain +CMGL
- char *pDataStr; // The real sms data
- uint16_t pDataStrLen;
- } SMS_BUF_NODE_T;
- SMS_BUF_NODE_T *pSmsBufNode[32] = {
- 0,
- };
- typedef struct _AT_SMS_INIT_ALL
- {
- uint8_t nSim;
- uint8_t nStorage;
- } AT_SMS_INIT_ALL;
- typedef struct _CMGL_UNREAD_TO_READ_PARAM_T
- {
- uint8_t simId;
- uint16_t refNum;
- } CMGL_UNREAD_TO_READ_PARAM_T;
- typedef struct
- {
- uint8_t delflag;
- uint16_t nIndex;
- uint8_t nStatus;
- uint8_t nStorage;
- } cmgdAsyncContext_t;
- typedef struct
- {
- uint8_t current;
- uint8_t nIndex;
- void *map;
- } cmgrAsyncContext_t;
- #endif
- #ifdef CONFIG_AT_SMS_CB_SUPPORT
- /*
- the short message class enum
- */
- typedef enum _AT_SMS_CLASS_E
- {
- AT_SMS_CLASS_0,
- AT_SMS_CLASS_1,
- AT_SMS_CLASS_2,
- AT_SMS_CLASS_3
- } AT_SMS_CLASS_E;
- typedef enum
- {
- AT_SMSCB_GERMAN_ID = 0,
- AT_SMSCB_ENGLISH_ID = 1,
- AT_SMSCB_ITALIAN_ID = 2,
- AT_SMSCB_FRENCH_ID = 3,
- AT_SMSCB_SPANISH_ID = 4,
- AT_SMSCB_DUTCH_ID = 5,
- AT_SMSCB_SWEDISH_ID = 6,
- AT_SMSCB_DANISH_ID = 7,
- AT_SMSCB_PORTUGUESE_ID = 8,
- AT_SMSCB_FINNISH_ID = 9,
- AT_SMSCB_NORWEGIAN_ID = 10,
- AT_SMSCB_GREEK_ID = 11,
- AT_SMSCB_TURKISH_ID = 12,
- AT_SMSCB_HUNGARIAN_ID = 13,
- AT_SMSCB_POLISH_ID = 14,
- AT_SMSCB_LANGUAGE_UNSPECIFIED = 15,
- AT_SMSCB_CZECH_ID = 0x20,
- AT_SMSCB_HEBREW_ID = 0x21,
- AT_SMSCB_ARABIC_ID = 0x22,
- AT_SMSCB_RUSSIAN_ID = 0x23,
- AT_SMSCB_ICELANDIC_ID = 0x24,
- AT_SMSCB_CHINESE_ID = 0x48,
- AT_SMSCB_LANGUAGE_NUM = 0x7a7b // max language id = 0x7a7a(zz)
- } AT_SMSCB_LANGUAGE_ID_E;
- /*
- the alphabet type being used
- */
- typedef enum _AT_SMS_ALPHABET_TYPE_E
- {
- AT_SMS_DEFAULT_ALPHABET = 0, // default alphabet
- AT_SMS_8_BIT_ALPHBET, // 8 bit data
- AT_SMS_UCS2_ALPHABET, // UCS2(16bit)
- AT_SMS_RESERVED_ALPHABET // reserved
- } AT_SMS_ALPHABET_TYPE_E;
- typedef struct _AT_SMSCB_DCS_T
- {
- bool class_is_present; // whether use specified class
- AT_SMS_CLASS_E sms_class; // the sms class type
- AT_SMS_ALPHABET_TYPE_E alphabet_type; // the alphabet type
- bool language_id_present;
- AT_SMSCB_LANGUAGE_ID_E language_id;
- } AT_SMSCB_DCS_T;
- typedef uint16_t AT_CB_MSG_ID_T;
- typedef uint8_t AT_CB_UPDATE_T;
- typedef uint8_t AT_MESSAGE_CODE_T;
- typedef uint16_t AT_MSG_CODE_T;
- typedef uint8_t SMSCB_UPDATE_NUM_T;
- typedef uint8_t SMSCB_PAGE_TOTAL_NUM_T;
- typedef uint8_t SMSCB_PAGE_CURR_NUM_T;
- typedef uint8_t SMSCB_GEOGRAPH_SCOPE_T;
- typedef uint8_t SMSCB_MSG_CODE_T;
- #define SMSCB_INVALID_PAGE_NUM 0
- #define AT_CB_MSG_LEN 93
- #define GET_MSG_CODE(_msg_value_ptr) \
- (((uint16_t)(*(_msg_value_ptr)&0x3F) << 4) | ((uint16_t)(*((_msg_value_ptr) + 1) >> 4)))
- #define GET_UPDATE_NUM(_msg_value) \
- ((_msg_value)&0x0f)
- #define GET_MSG_ID(_msg_value_ptr) \
- (((uint16_t)(*(_msg_value_ptr)) << 8) | ((uint16_t) * (((_msg_value_ptr) + 1))))
- #define GET_GS_CODE(_msg_value_ptr) \
- (((*(_msg_value_ptr)) & 0xc0) >> 6)
- typedef enum
- {
- AT_CB_DISPLAY_IMMEDIATE,
- AT_CB_DISPLAY_NORMAL
- } AT_CB_DISPLAY_MODE_E;
- #define AT_CB_MAX_PAGE_NUM 15
- #define SMSCB_PAGE_LENGTH 88
- typedef SLIST_ENTRY(SMSCB_PAGE_MSG) atCbPageMsgIter_t;
- typedef SLIST_HEAD(atCbPageMsgHead, SMSCB_PAGE_MSG) atCbPageMsgHead_t;
- typedef uint8_t AT_CB_PAGE_ARR_T[SMSCB_PAGE_LENGTH];
- struct SMSCB_PAGE_MSG
- {
- atCbPageMsgIter_t iter;
- uint16_t msg_id;
- uint16_t msg_code;
- AT_SMSCB_DCS_T dcs_t;
- uint8_t page_total_num;
- uint8_t cur_page_len[AT_CB_MAX_PAGE_NUM];
- AT_CB_PAGE_ARR_T page_arr[AT_CB_MAX_PAGE_NUM];
- };
- typedef struct SMSCB_PAGE_MSG SMSCB_PAGE_MSG_T;
- atCbPageMsgHead_t gAtCbPageMsgList[CONFIG_NUMBER_OF_SIM] = {NULL};
- #endif
- #endif
|