Kenji Arai / mbed-os_TYBLE16

Dependents:   TYBLE16_simple_data_logger TYBLE16_MP3_Air

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?

UserRevisionLine numberNew 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_