luat_sms.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. /*
  2. * Copyright (c) 2022 OpenLuat & AirM2M
  3. *
  4. * Permission is hereby granted, free of charge, to any person obtaining a copy of
  5. * this software and associated documentation files (the "Software"), to deal in
  6. * the Software without restriction, including without limitation the rights to
  7. * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
  8. * the Software, and to permit persons to whom the Software is furnished to do so,
  9. * subject to the following conditions:
  10. *
  11. * The above copyright notice and this permission notice shall be included in all
  12. * copies or substantial portions of the Software.
  13. *
  14. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
  16. * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
  17. * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
  18. * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  19. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  20. */
  21. #ifndef LUAT_SMS_H
  22. #define LUAT_SMS_H
  23. #include "luat_base.h"
  24. #ifndef bool
  25. #define bool uint8_t
  26. #endif
  27. /**
  28. * @defgroup LUAT_SMS SMS接口
  29. * @{
  30. */
  31. #define LUAT_MSG_MAX_ADDR_LEN 80
  32. #define LUAT_SMS_MAX_TXT_SIZE 640
  33. #define LUAT_SMS_MAX_PDU_SIZE 180
  34. #define LUAT_SMS_MAX_LENGTH_OF_ADDRESS_VALUE 40
  35. #define LUAT_SMS_MAX_ADDR_STR_MAX_LEN ((LUAT_SMS_MAX_LENGTH_OF_ADDRESS_VALUE + 1) * 4)
  36. #define LUAT_SMS_SHORT_MSG_PDU_SIZE (140)
  37. #define LUAT_SMS_LONG_MSG_PDU_SIZE (134)
  38. typedef void (*LUAT_SMS_HANDLE_CB)(uint8_t event, void* param);
  39. typedef void (*LUAT_SMS_HANDLE_SEND_CB)(int ret);
  40. typedef enum
  41. {
  42. SMS_SEND_OK = 0,
  43. SMS_ME_FAILURE = 300,
  44. SMS_SERVICE_OF_ME_RESV,
  45. SMS_OPERATION_NOT_ALLOWED,
  46. SMS_OPERATION_NOT_SUPPORTED,
  47. SMS_INVALID_PDU_MODE_PARAMETER,
  48. SMS_INVALID_TEXT_MODE_PARAMETER,
  49. SMS_USIM_NOT_INSERTED = 310,
  50. SMS_USIM_PIN_REQUIRED,
  51. SMS_PHSIM_PIN_REQUIRED,
  52. SMS_USIM_FAILURE,
  53. SMS_USIM_BUSY,
  54. SMS_USIM_WRONG,
  55. SMS_USIM_PUK_REQUIRED,
  56. SMS_USIM_PIN2_REQUIRED,
  57. SMS_USIM_PUK2_REQUIRED,
  58. SMS_MEMORY_FAILURE = 320,
  59. SMS_INVALID_MEM_INDEX,
  60. SMS_MEM_FULL,
  61. SMS_SMSC_ADDR_UNKNOWN = 330,
  62. SMS_NO_NETWORK_SERVICE,
  63. SMS_NETWORK_TIMEOUT,
  64. SMS_NO_CNMA_ACK_EXPECTED = 340,
  65. SMS_UNKNOWN_ERROR = 500,
  66. SMS_INVALID_DATA = 550,
  67. SMS_UNSUPPORT_TEXT_WITH_CHINESE = 555,
  68. SMS_MAX_ERROR = 0xFFFF
  69. }LUAT_SMS_SEND_RET_CODE_E;
  70. typedef struct
  71. {
  72. LUAT_SMS_HANDLE_CB cb;
  73. LUAT_SMS_HANDLE_SEND_CB send_cb;
  74. }LUAT_SMS_MAIN_CFG_T;
  75. typedef struct
  76. {
  77. uint8_t year;
  78. uint8_t month;
  79. uint8_t day;
  80. uint8_t hour;
  81. uint8_t minute;
  82. uint8_t second;
  83. uint8_t tz; /* time zone */
  84. uint8_t tz_sign; /* '+'/'-' */
  85. }LUAT_SMS_RECV_MSG_TIME_T;
  86. typedef struct
  87. {
  88. uint8_t type;
  89. uint8_t msg_class;
  90. uint8_t alpha_bet;
  91. uint8_t indication;
  92. uint8_t dcs;
  93. }LUAT_SMS_RECV_MSG_DCS_T;
  94. //接受的短信信息结构体
  95. typedef struct
  96. {
  97. uint16_t pdu_length;//PDU 长度
  98. uint16_t sms_length;//TEXT 的长度
  99. LUAT_SMS_RECV_MSG_TIME_T time;//时间
  100. LUAT_SMS_RECV_MSG_DCS_T dcs_info;//Data Coding Scheme
  101. char pdu_data[LUAT_SMS_MAX_TXT_SIZE + 1];//PDU 数据
  102. uint8_t sms_buffer[LUAT_SMS_MAX_TXT_SIZE + 1];//TEXT 数据
  103. uint8_t sc_address[LUAT_MSG_MAX_ADDR_LEN + 1];//中心地址
  104. uint8_t phone_address[LUAT_MSG_MAX_ADDR_LEN + 1];//来电号码
  105. uint8_t refNum;
  106. uint8_t maxNum;
  107. uint8_t seqNum;
  108. }LUAT_SMS_RECV_MSG_T;
  109. typedef struct
  110. {
  111. size_t phone_len; // 电话号码长度
  112. size_t payload_len; // 待组包的短信数据长度
  113. const char *phone; // 电话号码
  114. uint8_t pdu_buf[320]; // 组包后的PDU短信
  115. uint8_t payload_buf[200]; // 待组包的短信数据
  116. uint8_t auto_phone; // 是否自动处理电话号码
  117. uint8_t maxNum; // 短信最大条数, 长短信用
  118. uint8_t seqNum; // 当前短信序号
  119. uint8_t refNum;
  120. }luat_sms_pdu_packet_t;
  121. /**
  122. * @brief 初始化短信
  123. */
  124. void luat_sms_init(void);
  125. /**
  126. * @brief 发送短信
  127. * @param p_input 短信的内容(当 is_pdu = false 时, 只支持英文,数字以及常用符号)
  128. * @param p_des 接收短信的手机号
  129. * @param is_pdu 是否是PDU格式的短信(当 false 时, 有效参数为 p_input & pdes, 当 true 时, 有效参数为 p_input & pudLen)
  130. * @param input_pdu_len PDU格式短信的长度,注意和p_input长度没有关系
  131. * @return 0成功,-1失败
  132. */
  133. int luat_sms_send_msg(uint8_t *p_input, char *p_des, bool is_pdu, int input_pdu_len);
  134. /**
  135. * @brief 发送PDU短信
  136. * @param pdu_data PDU格式的短信
  137. * @param pdu_len PDU格式短信的长度
  138. * @return 0成功,-1失败
  139. */
  140. int luat_sms_send_msg_v2(uint8_t *pdu_data, size_t pdu_len);
  141. /**
  142. * @brief 接受短信回调
  143. * @param callback_fun 回调函数
  144. */
  145. void luat_sms_recv_msg_register_handler(LUAT_SMS_HANDLE_CB callback_fun);
  146. /**
  147. * @brief 发送短信回调
  148. * @param callback_fun 回调函数
  149. */
  150. void luat_sms_send_msg_register_handler(LUAT_SMS_HANDLE_SEND_CB callback_fun);
  151. /**
  152. * @brief 打包pdu数据
  153. * @param packet
  154. */
  155. int luat_sms_pdu_packet(luat_sms_pdu_packet_t *packet);
  156. void ucs2char(char* source, size_t size, char* dst2, size_t* outlen);
  157. int utf82ucs2(char* source, size_t source_len, char* dst, size_t dstlen, size_t* outlen);
  158. /**@}*/
  159. #endif