Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: TYBLE16_simple_data_logger TYBLE16_MP3_Air
AT_CellularSMS.h
00001 /* 00002 * Copyright (c) 2017, Arm Limited and affiliates. 00003 * SPDX-License-Identifier: Apache-2.0 00004 * 00005 * Licensed under the Apache License, Version 2.0 (the "License"); 00006 * you may not use this file except in compliance with the License. 00007 * You may obtain a copy of the License at 00008 * 00009 * http://www.apache.org/licenses/LICENSE-2.0 00010 * 00011 * Unless required by applicable law or agreed to in writing, software 00012 * distributed under the License is distributed on an "AS IS" BASIS, 00013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00014 * See the License for the specific language governing permissions and 00015 * limitations under the License. 00016 */ 00017 00018 #ifndef AT_CELLULAR_SMS_H_ 00019 #define AT_CELLULAR_SMS_H_ 00020 00021 #if MBED_CONF_CELLULAR_USE_SMS 00022 00023 #include "CellularSMS.h" 00024 #include "ATHandler.h" 00025 #include "Callback.h" 00026 #include "AT_CellularDevice.h" 00027 #include <time.h> 00028 00029 namespace mbed { 00030 00031 /** 00032 * Class AT_CellularSMS 00033 * 00034 * Class for SMS sending, reading and deleting. 00035 */ 00036 class AT_CellularSMS: public CellularSMS { 00037 00038 public: 00039 AT_CellularSMS(ATHandler &atHandler, AT_CellularDevice &device); 00040 virtual ~AT_CellularSMS(); 00041 00042 public: 00043 // from CellularSMS 00044 00045 virtual nsapi_error_t initialize(CellularSMSMmode mode, 00046 CellularSMSEncoding encoding = CellularSMSEncoding7Bit); 00047 00048 virtual nsapi_size_or_error_t send_sms(const char *phone_number, const char *message, int msg_len); 00049 00050 virtual nsapi_size_or_error_t get_sms(char *buf, uint16_t buf_len, char *phone_num, uint16_t phone_len, 00051 char *time_stamp, uint16_t time_len, int *buf_size); 00052 00053 virtual void set_sms_callback(Callback<void()> func); 00054 00055 virtual nsapi_error_t set_cpms(const char *memr, const char *memw, const char *mems); 00056 00057 virtual nsapi_error_t set_csca(const char *sca, int type); 00058 00059 virtual nsapi_size_or_error_t set_cscs(const char *chr_set); 00060 00061 virtual nsapi_error_t delete_all_messages(); 00062 00063 virtual void set_extra_sim_wait_time(int sim_wait_time); 00064 00065 public: 00066 ATHandler &get_at_handler(); 00067 00068 private: 00069 00070 struct sms_info_t { 00071 char date[SMS_MAX_TIME_STAMP_SIZE]; 00072 uint16_t msg_index[50]; // can hold up to 50 concatenated msg parts, indexes are in correct order. So max sms size is 50*140 = 7kb 00073 uint16_t msg_size; 00074 uint8_t parts; 00075 uint8_t parts_added; 00076 uint16_t msg_ref_number; 00077 struct sms_info_t *next_info; 00078 sms_info_t() : msg_size(0), parts(1), parts_added(1), msg_ref_number(0), next_info(0) {}; 00079 }; 00080 00081 // application callback function for received sms 00082 Callback<void()> _cb; 00083 CellularSMSMmode _mode; 00084 bool _use_8bit_encoding; 00085 uint32_t _sim_wait_time; 00086 uint16_t _sms_message_ref_number; 00087 sms_info_t *_sms_info; 00088 00089 // SMS urc's 00090 void cmt_urc(); 00091 void cmti_urc(); 00092 00093 /** Set command selects the format of messages used with send, list, read and write commands. 00094 * 00095 * @param msg_format 0 PDU mode, 1 text mode 00096 * @return zero for success 00097 */ 00098 nsapi_error_t set_cmgf(int msg_format); 00099 00100 /** Set how receiving of new messages from the network is indicated to the TE. 00101 * 00102 * @return zero for success 00103 */ 00104 nsapi_error_t set_cnmi(); 00105 00106 /** Set Text Mode Parameters 00107 * 00108 * @param fo See more from 3GPP TS 27.005 for all params. 00109 * @param vp 00110 * @param pid 00111 * @param dcs 00112 * @return zero for success 00113 */ 00114 nsapi_error_t set_csmp(int fo, int vp, int pid, int dcs); 00115 00116 /** CSDH - Set command controls whether detailed header information is shown in text mode (AT+CMGF=1) result codes. 00117 * 00118 * @param show_header 1 to show detailed header in text mode, 0 for not showing. 00119 * @return zero for success 00120 */ 00121 nsapi_error_t set_csdh(int show_header); 00122 00123 /** Delete SMS in the given message position(s) in the storage 00124 * 00125 * @param sms struct containing index array to delete 00126 * @return zero for success 00127 */ 00128 nsapi_error_t delete_sms(sms_info_t *sms); 00129 00130 /** 00131 * Internal helper methods 00132 */ 00133 nsapi_error_t list_messages(); 00134 int read_sms_params(char *, char *); 00135 void free_linked_list(); 00136 void add_info(sms_info_t *info, int index, int part_number); 00137 int read_udh_from_pdu(const char *pdu, sms_info_t *info, int &part_number, int &padding_bits); 00138 nsapi_size_or_error_t get_data_from_pdu(const char *pdu, sms_info_t *info, int *part_number, 00139 char *phone_number = NULL, char *msg = NULL); 00140 nsapi_size_or_error_t read_pdu_payload(const char *pdu, int msg_len, int scheme, char *msg, int padding_bits); 00141 sms_info_t *get_oldest_sms_index(); 00142 bool create_time(const char *time_string, time_t *time); 00143 int compare_time_strings(const char *time_string_1, const char *time_string_2); 00144 char *create_pdu(const char *phone_number, const char *message, uint8_t message_length, uint8_t msg_parts, 00145 uint8_t msg_part_number, uint8_t &header_size); 00146 nsapi_size_or_error_t read_sms_from_index(int msg_index, char *buf, uint16_t len, char *phone_num, 00147 char *time_stamp); 00148 nsapi_size_or_error_t read_sms(sms_info_t *sms, char *buf, char *phone_num, char *time_stamp); 00149 00150 /** Packs the given str from ascii to 7bit gsm format and converts it to hex to the given buf. 00151 * 00152 * @param str string that is to be converted 00153 * @param len length of the str buffer 00154 * @param buf preallocated buffer that holds the converted string in hex format after successful call 00155 * @param number_of_padding_bit padding bits needed to keep the octet boundary 00156 * @return length of buffer buf or zero on failure 00157 */ 00158 uint16_t pack_7_bit_gsm_and_hex(const char *str, uint16_t len, char *buf, int number_of_padding_bit); 00159 00160 /** Unpacks the given hex- and 7-bit gsm encoded str to ascii string 00161 * 00162 * @param str string to convert to ascii string and write to buf 00163 * @param len length of the str divided by two as str is hexencoded 00164 * @param buf preallocated destination buffer 00165 * @param padding_bits number of padding bits needed to hold the octet boundary 00166 * @param msg_len Length of the received message, which is coded in str 00167 * @return length of the destination buffer buf 00168 * 00169 */ 00170 uint16_t unpack_7_bit_gsm_to_str(const char *str, int len, char *buf, int padding_bits, 00171 int msg_len); 00172 00173 private: 00174 ATHandler &_at; 00175 00176 AT_CellularDevice &_device; 00177 }; 00178 00179 } // namespace mbed 00180 00181 #endif //MBED_CONF_CELLULAR_USE_SMS 00182 00183 #endif // AT_CELLULAR_SMS_H_
Generated on Tue Jul 12 2022 13:54:02 by
1.7.2