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
features/cellular/framework/API/CellularSMS.h@0:5b88d5760320, 2019-12-17 (annotated)
- Committer:
- kenjiArai
- Date:
- Tue Dec 17 23:23:45 2019 +0000
- Revision:
- 0:5b88d5760320
- Child:
- 1:9db0e321a9f4
mbed-os5 only for TYBLE16
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| kenjiArai | 0:5b88d5760320 | 1 | /* |
| kenjiArai | 0:5b88d5760320 | 2 | * Copyright (c) 2017, Arm Limited and affiliates. |
| kenjiArai | 0:5b88d5760320 | 3 | * SPDX-License-Identifier: Apache-2.0 |
| kenjiArai | 0:5b88d5760320 | 4 | * |
| kenjiArai | 0:5b88d5760320 | 5 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| kenjiArai | 0:5b88d5760320 | 6 | * you may not use this file except in compliance with the License. |
| kenjiArai | 0:5b88d5760320 | 7 | * You may obtain a copy of the License at |
| kenjiArai | 0:5b88d5760320 | 8 | * |
| kenjiArai | 0:5b88d5760320 | 9 | * http://www.apache.org/licenses/LICENSE-2.0 |
| kenjiArai | 0:5b88d5760320 | 10 | * |
| kenjiArai | 0:5b88d5760320 | 11 | * Unless required by applicable law or agreed to in writing, software |
| kenjiArai | 0:5b88d5760320 | 12 | * distributed under the License is distributed on an "AS IS" BASIS, |
| kenjiArai | 0:5b88d5760320 | 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| kenjiArai | 0:5b88d5760320 | 14 | * See the License for the specific language governing permissions and |
| kenjiArai | 0:5b88d5760320 | 15 | * limitations under the License. |
| kenjiArai | 0:5b88d5760320 | 16 | */ |
| kenjiArai | 0:5b88d5760320 | 17 | |
| kenjiArai | 0:5b88d5760320 | 18 | #ifndef CELLULAR_SMS_H_ |
| kenjiArai | 0:5b88d5760320 | 19 | #define CELLULAR_SMS_H_ |
| kenjiArai | 0:5b88d5760320 | 20 | |
| kenjiArai | 0:5b88d5760320 | 21 | #include "Callback.h" |
| kenjiArai | 0:5b88d5760320 | 22 | #include "nsapi_types.h" |
| kenjiArai | 0:5b88d5760320 | 23 | |
| kenjiArai | 0:5b88d5760320 | 24 | namespace mbed { |
| kenjiArai | 0:5b88d5760320 | 25 | |
| kenjiArai | 0:5b88d5760320 | 26 | // including trailing '\0' |
| kenjiArai | 0:5b88d5760320 | 27 | const uint16_t SMS_MAX_SIZE_WITH_CONCATENATION = 4096 + 1; |
| kenjiArai | 0:5b88d5760320 | 28 | const uint16_t SMS_MAX_PHONE_NUMBER_SIZE = 20 + 1; |
| kenjiArai | 0:5b88d5760320 | 29 | const uint16_t SMS_MAX_TIME_STAMP_SIZE = 20 + 1; |
| kenjiArai | 0:5b88d5760320 | 30 | |
| kenjiArai | 0:5b88d5760320 | 31 | const uint16_t SMS_MAX_SIZE_8BIT_SINGLE_SMS_SIZE = 140; |
| kenjiArai | 0:5b88d5760320 | 32 | const uint16_t SMS_MAX_SIZE_GSM7_SINGLE_SMS_SIZE = 160; |
| kenjiArai | 0:5b88d5760320 | 33 | |
| kenjiArai | 0:5b88d5760320 | 34 | const uint16_t SMS_SIM_WAIT_TIME_MILLISECONDS = 200; |
| kenjiArai | 0:5b88d5760320 | 35 | |
| kenjiArai | 0:5b88d5760320 | 36 | const int SMS_ERROR_MULTIPART_ALL_PARTS_NOT_READ = -5001; |
| kenjiArai | 0:5b88d5760320 | 37 | |
| kenjiArai | 0:5b88d5760320 | 38 | /** |
| kenjiArai | 0:5b88d5760320 | 39 | * @addtogroup cellular |
| kenjiArai | 0:5b88d5760320 | 40 | * @{ |
| kenjiArai | 0:5b88d5760320 | 41 | */ |
| kenjiArai | 0:5b88d5760320 | 42 | |
| kenjiArai | 0:5b88d5760320 | 43 | /** |
| kenjiArai | 0:5b88d5760320 | 44 | * Class CellularSMS |
| kenjiArai | 0:5b88d5760320 | 45 | * |
| kenjiArai | 0:5b88d5760320 | 46 | * An abstract interface for SMS sending, reading and deleting. |
| kenjiArai | 0:5b88d5760320 | 47 | */ |
| kenjiArai | 0:5b88d5760320 | 48 | class CellularSMS { |
| kenjiArai | 0:5b88d5760320 | 49 | protected: |
| kenjiArai | 0:5b88d5760320 | 50 | // friend of CellularDevice so that it's the only way to close/delete this class. |
| kenjiArai | 0:5b88d5760320 | 51 | friend class CellularDevice; |
| kenjiArai | 0:5b88d5760320 | 52 | |
| kenjiArai | 0:5b88d5760320 | 53 | /** |
| kenjiArai | 0:5b88d5760320 | 54 | * virtual Destructor |
| kenjiArai | 0:5b88d5760320 | 55 | */ |
| kenjiArai | 0:5b88d5760320 | 56 | virtual ~CellularSMS() {}; |
| kenjiArai | 0:5b88d5760320 | 57 | public: |
| kenjiArai | 0:5b88d5760320 | 58 | |
| kenjiArai | 0:5b88d5760320 | 59 | /* Enumeration for possible SMS modes, PDU and Text */ |
| kenjiArai | 0:5b88d5760320 | 60 | enum CellularSMSMmode { |
| kenjiArai | 0:5b88d5760320 | 61 | CellularSMSMmodePDU = 0, |
| kenjiArai | 0:5b88d5760320 | 62 | CellularSMSMmodeText |
| kenjiArai | 0:5b88d5760320 | 63 | }; |
| kenjiArai | 0:5b88d5760320 | 64 | |
| kenjiArai | 0:5b88d5760320 | 65 | /** Does all the necessary initializations needed for receiving and sending SMS. |
| kenjiArai | 0:5b88d5760320 | 66 | * |
| kenjiArai | 0:5b88d5760320 | 67 | * @param mode enumeration for choosing the correct mode: text/pdu |
| kenjiArai | 0:5b88d5760320 | 68 | * @return NSAPI_ERROR_OK on success |
| kenjiArai | 0:5b88d5760320 | 69 | * NSAPI_ERROR_NO_MEMORY on memory failure |
| kenjiArai | 0:5b88d5760320 | 70 | * NSAPI_ERROR_DEVICE_ERROR on other failures |
| kenjiArai | 0:5b88d5760320 | 71 | */ |
| kenjiArai | 0:5b88d5760320 | 72 | virtual nsapi_error_t initialize(CellularSMSMmode mode) = 0; |
| kenjiArai | 0:5b88d5760320 | 73 | |
| kenjiArai | 0:5b88d5760320 | 74 | /** Send the SMS with the given parameters |
| kenjiArai | 0:5b88d5760320 | 75 | * |
| kenjiArai | 0:5b88d5760320 | 76 | * @param phone_number Phone number where to send SMS |
| kenjiArai | 0:5b88d5760320 | 77 | * @param message SMS message content |
| kenjiArai | 0:5b88d5760320 | 78 | * @param msg_len Length of the message |
| kenjiArai | 0:5b88d5760320 | 79 | * @return On success, length of the sent SMS (positive value) |
| kenjiArai | 0:5b88d5760320 | 80 | * NSAPI_ERROR_PARAMETER if invalid parameters |
| kenjiArai | 0:5b88d5760320 | 81 | * NSAPI_ERROR_NO_MEMORY on memory failure |
| kenjiArai | 0:5b88d5760320 | 82 | * NSAPI_ERROR_DEVICE_ERROR on other failures |
| kenjiArai | 0:5b88d5760320 | 83 | */ |
| kenjiArai | 0:5b88d5760320 | 84 | virtual nsapi_size_or_error_t send_sms(const char *phone_number, const char *message, int msg_len) = 0; |
| kenjiArai | 0:5b88d5760320 | 85 | |
| kenjiArai | 0:5b88d5760320 | 86 | /** Gets the oldest received sms. |
| kenjiArai | 0:5b88d5760320 | 87 | * |
| kenjiArai | 0:5b88d5760320 | 88 | * @param buf preallocated buffer for SMS message content |
| kenjiArai | 0:5b88d5760320 | 89 | * @param buf_len length of allocated buf |
| kenjiArai | 0:5b88d5760320 | 90 | * @param phone_num preallocated buffer for phone number where SMS was sent |
| kenjiArai | 0:5b88d5760320 | 91 | * @param phone_len length of allocated phone_num buffer |
| kenjiArai | 0:5b88d5760320 | 92 | * @param time_stamp preallocated buffer for TP-Service Centre Time Stamp (format: yy/MM/dd,hh:mm:ss-+zz). +-zz is timezone. |
| kenjiArai | 0:5b88d5760320 | 93 | * The unit of time zone is a quarter of an hour relative to GMT. For example +32 would be GMT+8. |
| kenjiArai | 0:5b88d5760320 | 94 | * @param time_len length of allocated time_stamp buffer |
| kenjiArai | 0:5b88d5760320 | 95 | * @param buf_size if method return error NSAPI_ERROR_NO_MEMORY because the given buf was not big enough, this |
| kenjiArai | 0:5b88d5760320 | 96 | * holds the size which is enough. Otherwise zero. |
| kenjiArai | 0:5b88d5760320 | 97 | * @return On success, length of the received SMS, (length of the buf, positive value) |
| kenjiArai | 0:5b88d5760320 | 98 | * NSAPI_ERROR_PARAMETER if invalid parameters |
| kenjiArai | 0:5b88d5760320 | 99 | * NSAPI_ERROR_NO_MEMORY on memory failure |
| kenjiArai | 0:5b88d5760320 | 100 | * SMS_ERROR_MULTIPART_ALL_PARTS_NOT_READ if SMS was multipart but not all parts are present/failed to read. |
| kenjiArai | 0:5b88d5760320 | 101 | * -1 if no SMS was found |
| kenjiArai | 0:5b88d5760320 | 102 | * NSAPI_ERROR_DEVICE_ERROR on other failures |
| kenjiArai | 0:5b88d5760320 | 103 | */ |
| kenjiArai | 0:5b88d5760320 | 104 | virtual nsapi_size_or_error_t get_sms(char *buf, uint16_t buf_len, char *phone_num, uint16_t phone_len, |
| kenjiArai | 0:5b88d5760320 | 105 | char *time_stamp, uint16_t time_len, int *buf_size) = 0; |
| kenjiArai | 0:5b88d5760320 | 106 | |
| kenjiArai | 0:5b88d5760320 | 107 | /** Callback that is called when new SMS is received. SMS can be fetched using method get_sms(). |
| kenjiArai | 0:5b88d5760320 | 108 | * |
| kenjiArai | 0:5b88d5760320 | 109 | * @remark In PDU mode, there can be multipart SMS, and callback is called for every received part. |
| kenjiArai | 0:5b88d5760320 | 110 | * |
| kenjiArai | 0:5b88d5760320 | 111 | * @param func Callback function that is called when new SMS is received. |
| kenjiArai | 0:5b88d5760320 | 112 | */ |
| kenjiArai | 0:5b88d5760320 | 113 | virtual void set_sms_callback(Callback<void()> func) = 0; |
| kenjiArai | 0:5b88d5760320 | 114 | |
| kenjiArai | 0:5b88d5760320 | 115 | /** CPMS preferred message storage |
| kenjiArai | 0:5b88d5760320 | 116 | * |
| kenjiArai | 0:5b88d5760320 | 117 | * @param memr memory from which messages are read and deleted |
| kenjiArai | 0:5b88d5760320 | 118 | * "SM" - SIM SMS memory storage (default) |
| kenjiArai | 0:5b88d5760320 | 119 | * "ME" - NVM SMS storage |
| kenjiArai | 0:5b88d5760320 | 120 | * @param memw memory to which writing and sending operations are made |
| kenjiArai | 0:5b88d5760320 | 121 | * "SM" - SIM SMS memory storage (default) |
| kenjiArai | 0:5b88d5760320 | 122 | * "ME" - NVM SMS storage |
| kenjiArai | 0:5b88d5760320 | 123 | * @param mems memory to which received SMs are preferred to be stored |
| kenjiArai | 0:5b88d5760320 | 124 | * "SM" - SIM SMS memory storage (default) |
| kenjiArai | 0:5b88d5760320 | 125 | * "ME" - NVM SMS storage |
| kenjiArai | 0:5b88d5760320 | 126 | * |
| kenjiArai | 0:5b88d5760320 | 127 | * @return NSAPI_ERROR_OK on success |
| kenjiArai | 0:5b88d5760320 | 128 | * NSAPI_ERROR_DEVICE_ERROR on failure |
| kenjiArai | 0:5b88d5760320 | 129 | */ |
| kenjiArai | 0:5b88d5760320 | 130 | virtual nsapi_error_t set_cpms(const char *memr, const char *memw, const char *mems) = 0; |
| kenjiArai | 0:5b88d5760320 | 131 | |
| kenjiArai | 0:5b88d5760320 | 132 | /** CSCA - set Service Center Address |
| kenjiArai | 0:5b88d5760320 | 133 | * |
| kenjiArai | 0:5b88d5760320 | 134 | * @param sca Service Center Address to be used for mobile originated SMS transmissions. |
| kenjiArai | 0:5b88d5760320 | 135 | * @param type 129 - national numbering scheme, 145 - international numbering scheme (contains the character "+") |
| kenjiArai | 0:5b88d5760320 | 136 | * |
| kenjiArai | 0:5b88d5760320 | 137 | * @return NSAPI_ERROR_OK on success |
| kenjiArai | 0:5b88d5760320 | 138 | * NSAPI_ERROR_DEVICE_ERROR on failure |
| kenjiArai | 0:5b88d5760320 | 139 | */ |
| kenjiArai | 0:5b88d5760320 | 140 | virtual nsapi_error_t set_csca(const char *sca, int type) = 0; |
| kenjiArai | 0:5b88d5760320 | 141 | |
| kenjiArai | 0:5b88d5760320 | 142 | /** Set command sets the current character set used by the device. "GSM", "IRA",.... |
| kenjiArai | 0:5b88d5760320 | 143 | * |
| kenjiArai | 0:5b88d5760320 | 144 | * @remark Current implementation support only ASCII so choose the correct character set. |
| kenjiArai | 0:5b88d5760320 | 145 | * |
| kenjiArai | 0:5b88d5760320 | 146 | * @param chr_set preferred character set list (comma separated). Modem might not support the wanted character set, |
| kenjiArai | 0:5b88d5760320 | 147 | * so chr_set list is looped from start until supported set is found. Used character set index is returned. |
| kenjiArai | 0:5b88d5760320 | 148 | * See more from 3GPP TS 27.005. |
| kenjiArai | 0:5b88d5760320 | 149 | * @return Used character set index from the given list in case of success. |
| kenjiArai | 0:5b88d5760320 | 150 | * NSAPI_ERROR_DEVICE_ERROR on failure |
| kenjiArai | 0:5b88d5760320 | 151 | */ |
| kenjiArai | 0:5b88d5760320 | 152 | virtual nsapi_size_or_error_t set_cscs(const char *chr_set) = 0; |
| kenjiArai | 0:5b88d5760320 | 153 | |
| kenjiArai | 0:5b88d5760320 | 154 | /** Deletes all messages from the currently set memory/SIM |
| kenjiArai | 0:5b88d5760320 | 155 | * |
| kenjiArai | 0:5b88d5760320 | 156 | * @return NSAPI_ERROR_OK on success |
| kenjiArai | 0:5b88d5760320 | 157 | * NSAPI_ERROR_DEVICE_ERROR on failure |
| kenjiArai | 0:5b88d5760320 | 158 | */ |
| kenjiArai | 0:5b88d5760320 | 159 | virtual nsapi_error_t delete_all_messages() = 0; |
| kenjiArai | 0:5b88d5760320 | 160 | |
| kenjiArai | 0:5b88d5760320 | 161 | /** Some modems need extra time between AT commands and responses, or there will be error -314, SIM busy. |
| kenjiArai | 0:5b88d5760320 | 162 | * If SIM busy errors are an issue, this time should be increased. It can also be set to zero to make |
| kenjiArai | 0:5b88d5760320 | 163 | * operations faster and more energy efficient if no errors will follow. By default, wait time is zero. |
| kenjiArai | 0:5b88d5760320 | 164 | * |
| kenjiArai | 0:5b88d5760320 | 165 | * @param sim_wait_time |
| kenjiArai | 0:5b88d5760320 | 166 | */ |
| kenjiArai | 0:5b88d5760320 | 167 | virtual void set_extra_sim_wait_time(int sim_wait_time) = 0; |
| kenjiArai | 0:5b88d5760320 | 168 | }; |
| kenjiArai | 0:5b88d5760320 | 169 | |
| kenjiArai | 0:5b88d5760320 | 170 | /** |
| kenjiArai | 0:5b88d5760320 | 171 | * @} |
| kenjiArai | 0:5b88d5760320 | 172 | */ |
| kenjiArai | 0:5b88d5760320 | 173 | |
| kenjiArai | 0:5b88d5760320 | 174 | } // namespace mbed |
| kenjiArai | 0:5b88d5760320 | 175 | |
| kenjiArai | 0:5b88d5760320 | 176 | #endif // CELLULAR_SMS_H_ |