Kenji Arai / mbed-os_TYBLE16

Dependents:   TYBLE16_simple_data_logger TYBLE16_MP3_Air

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers AT_CellularSMS.h Source File

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_