Mbed OS Reference
Loading...
Searching...
No Matches
AT_CellularSMS.h
1/*
2 * Copyright (c) 2017, Arm Limited and affiliates.
3 * SPDX-License-Identifier: Apache-2.0
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 AT_CELLULAR_SMS_H_
19#define AT_CELLULAR_SMS_H_
20
21#if MBED_CONF_CELLULAR_USE_SMS
22
23#include "CellularSMS.h"
24#include "ATHandler.h"
25#include "Callback.h"
26#include "AT_CellularDevice.h"
27#include <time.h>
28
29
30namespace mbed {
31
32/**
33 * @addtogroup at-hayes AT/Hayes Command Set
34 * @ingroup Cellular
35 * @{
36 */
37
38/**
39 * Class AT_CellularSMS
40 *
41 * Class for SMS sending, reading and deleting.
42 */
43class AT_CellularSMS: public CellularSMS {
44
45public:
46 AT_CellularSMS(ATHandler &atHandler, AT_CellularDevice &device);
47 virtual ~AT_CellularSMS();
48
49public:
50 // from CellularSMS
51
52 virtual nsapi_error_t initialize(CellularSMSMmode mode,
53 CellularSMSEncoding encoding = CellularSMSEncoding7Bit);
54
55 virtual nsapi_size_or_error_t send_sms(const char *phone_number, const char *message, int msg_len);
56
57 virtual nsapi_size_or_error_t get_sms(char *buf, uint16_t buf_len, char *phone_num, uint16_t phone_len,
58 char *time_stamp, uint16_t time_len, int *buf_size);
59
60 virtual void set_sms_callback(Callback<void()> func);
61
62 virtual nsapi_error_t set_cpms(const char *memr, const char *memw, const char *mems);
63
64 virtual nsapi_error_t set_csca(const char *sca, int type);
65
66 virtual nsapi_size_or_error_t set_cscs(const char *chr_set);
67
68 virtual nsapi_error_t delete_all_messages();
69
70 virtual void set_extra_sim_wait_time(int sim_wait_time);
71
72private:
73 struct sms_info_t {
74 char date[SMS_MAX_TIME_STAMP_SIZE];
75 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
76 uint16_t msg_size;
77 uint8_t parts;
78 uint8_t parts_added;
79 uint16_t msg_ref_number;
80 struct sms_info_t *next_info;
81 sms_info_t() : msg_size(0), parts(1), parts_added(1), msg_ref_number(0), next_info(0) {};
82 };
83
84 // SMS urc's
85 void cmt_urc();
86 void cmti_urc();
87
88 /** Set command selects the format of messages used with send, list, read and write commands.
89 *
90 * @param msg_format 0 PDU mode, 1 text mode
91 * @return zero for success
92 */
93 nsapi_error_t set_cmgf(int msg_format);
94
95 /** Set how receiving of new messages from the network is indicated to the TE.
96 *
97 * @return zero for success
98 */
99 nsapi_error_t set_cnmi();
100
101 /** Set Text Mode Parameters
102 *
103 * @param fo See more from 3GPP TS 27.005 for all params.
104 * @param vp
105 * @param pid
106 * @param dcs
107 * @return zero for success
108 */
109 nsapi_error_t set_csmp(int fo, int vp, int pid, int dcs);
110
111 /** CSDH - Set command controls whether detailed header information is shown in text mode (AT+CMGF=1) result codes.
112 *
113 * @param show_header 1 to show detailed header in text mode, 0 for not showing.
114 * @return zero for success
115 */
116 nsapi_error_t set_csdh(int show_header);
117
118 /** Delete SMS in the given message position(s) in the storage
119 *
120 * @param sms struct containing index array to delete
121 * @return zero for success
122 */
123 nsapi_error_t delete_sms(sms_info_t *sms);
124
125 /**
126 * Internal helper methods
127 */
128 nsapi_error_t list_messages();
129 int read_sms_params(char *, char *);
130 void free_linked_list();
131 void add_info(sms_info_t *info, int index, int part_number);
132 int read_udh_from_pdu(const char *pdu, sms_info_t *info, int &part_number, int &padding_bits);
133 nsapi_size_or_error_t get_data_from_pdu(const char *pdu, sms_info_t *info, int *part_number,
134 char *phone_number = NULL, char *msg = NULL);
135 nsapi_size_or_error_t read_pdu_payload(const char *pdu, int msg_len, int scheme, char *msg, int padding_bits);
136 sms_info_t *get_oldest_sms_index();
137 bool create_time(const char *time_string, time_t *time);
138 int compare_time_strings(const char *time_string_1, const char *time_string_2);
139 char *create_pdu(const char *phone_number, const char *message, uint8_t message_length, uint8_t msg_parts,
140 uint8_t msg_part_number, uint8_t &header_size);
141 nsapi_size_or_error_t read_sms_from_index(int msg_index, char *buf, uint16_t len, char *phone_num,
142 char *time_stamp);
143 nsapi_size_or_error_t read_sms(sms_info_t *sms, char *buf, char *phone_num, char *time_stamp);
144
145 /** Packs the given str from ascii to 7bit gsm format and converts it to hex to the given buf.
146 *
147 * @param str string that is to be converted
148 * @param len length of the str buffer
149 * @param buf preallocated buffer that holds the converted string in hex format after successful call
150 * @param number_of_padding_bit padding bits needed to keep the octet boundary
151 * @return length of buffer buf or zero on failure
152 */
153 uint16_t pack_7_bit_gsm_and_hex(const char *str, uint16_t len, char *buf, int number_of_padding_bit);
154
155 /** Unpacks the given hex- and 7-bit gsm encoded str to ascii string
156 *
157 * @param str string to convert to ascii string and write to buf
158 * @param len length of the str divided by two as str is hexencoded
159 * @param buf preallocated destination buffer
160 * @param padding_bits number of padding bits needed to hold the octet boundary
161 * @param msg_len Length of the received message, which is coded in str
162 * @return length of the destination buffer buf
163 *
164 */
165 uint16_t unpack_7_bit_gsm_to_str(const char *str, int len, char *buf, int padding_bits,
166 int msg_len);
167
168private:
169 // application callback function for received sms
170 Callback<void()> _cb;
171 CellularSMSMmode _mode;
172 bool _use_8bit_encoding;
173 uint32_t _sim_wait_time;
174 uint16_t _sms_message_ref_number;
175 sms_info_t *_sms_info;
176
177 ATHandler &_at;
178 AT_CellularDevice &_device;
179};
180
181/**
182 * @}
183 */
184
185} // namespace mbed
186
187#endif //MBED_CONF_CELLULAR_USE_SMS
188
189#endif // AT_CELLULAR_SMS_H_
signed int nsapi_size_or_error_t
Type used to represent either a size or error passed through sockets.
Definition: nsapi_types.h:153
signed int nsapi_error_t
Type used to represent error codes.
Definition: nsapi_types.h:142
The key size.