Init Project for SMS

Committer:
AustinKim
Date:
Mon Sep 16 02:24:07 2019 +0000
Revision:
1:dd094a78c42c
Parent:
0:f01e76c4c5de
Update project name

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AustinKim 0:f01e76c4c5de 1 /* WIZnet IoT Shield Cat.M1 Sample code for Arm MBED
AustinKim 0:f01e76c4c5de 2 * Copyright (c) 2019 WIZnet Co., Ltd.
AustinKim 0:f01e76c4c5de 3 * SPDX-License-Identifier: Apache-2.0
AustinKim 0:f01e76c4c5de 4 */
AustinKim 0:f01e76c4c5de 5
AustinKim 0:f01e76c4c5de 6 /*
AustinKim 0:f01e76c4c5de 7 * Licensed under the Apache License, Version 2.0 (the "License");
AustinKim 0:f01e76c4c5de 8 * you may not use this file except in compliance with the License.
AustinKim 0:f01e76c4c5de 9 * You may obtain a copy of the License at
AustinKim 0:f01e76c4c5de 10 *
AustinKim 0:f01e76c4c5de 11 * http://www.apache.org/licenses/LICENSE-2.0
AustinKim 0:f01e76c4c5de 12 *
AustinKim 0:f01e76c4c5de 13 * Unless required by applicable law or agreed to in writing, software
AustinKim 0:f01e76c4c5de 14 * distributed under the License is distributed on an "AS IS" BASIS,
AustinKim 0:f01e76c4c5de 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
AustinKim 0:f01e76c4c5de 16 *
AustinKim 0:f01e76c4c5de 17 * See the License for the specific language governing permissions and
AustinKim 0:f01e76c4c5de 18 * limitations under the License.
AustinKim 0:f01e76c4c5de 19 *
AustinKim 0:f01e76c4c5de 20 */
AustinKim 0:f01e76c4c5de 21
AustinKim 0:f01e76c4c5de 22 #include "mbed.h"
AustinKim 0:f01e76c4c5de 23
AustinKim 0:f01e76c4c5de 24 #include <string>
AustinKim 0:f01e76c4c5de 25
AustinKim 0:f01e76c4c5de 26 #define RET_OK 1
AustinKim 0:f01e76c4c5de 27 #define RET_NOK -1
AustinKim 0:f01e76c4c5de 28 #define DEBUG_ENABLE 1
AustinKim 0:f01e76c4c5de 29 #define DEBUG_DISABLE 0
AustinKim 0:f01e76c4c5de 30 #define ON 1
AustinKim 0:f01e76c4c5de 31 #define OFF 0
AustinKim 0:f01e76c4c5de 32
AustinKim 0:f01e76c4c5de 33 #define MAX_BUF_SIZE 1024
AustinKim 0:f01e76c4c5de 34
AustinKim 0:f01e76c4c5de 35 #define WM01_APN_PROTOCOL_IPv4 1
AustinKim 0:f01e76c4c5de 36 #define WM01_APN_PROTOCOL_IPv6 2
AustinKim 0:f01e76c4c5de 37 #define WM01_DEFAULT_TIMEOUT 1000
AustinKim 0:f01e76c4c5de 38 #define WM01_CONNECT_TIMEOUT 15000
AustinKim 0:f01e76c4c5de 39 #define WM01_SEND_TIMEOUT 500
AustinKim 0:f01e76c4c5de 40 #define WM01_RECV_TIMEOUT 500
AustinKim 0:f01e76c4c5de 41 #define WM01_BOOTING_TIME 15000
AustinKim 0:f01e76c4c5de 42
AustinKim 0:f01e76c4c5de 43 #define WM01_APN_PROTOCOL WM01_APN_PROTOCOL_IPv6
AustinKim 0:f01e76c4c5de 44 #define WM01_DEFAULT_BAUD_RATE 115200
AustinKim 0:f01e76c4c5de 45 #define WM01_PARSER_DELIMITER "\r\n"
AustinKim 0:f01e76c4c5de 46
AustinKim 0:f01e76c4c5de 47 #define CATM1_APN_SKT "lte-internet.sktelecom.com"
AustinKim 0:f01e76c4c5de 48
AustinKim 0:f01e76c4c5de 49 #define CATM1_DEVICE_NAME_WM01 "WM01"
AustinKim 0:f01e76c4c5de 50 #define DEVNAME CATM1_DEVICE_NAME_WM01
AustinKim 0:f01e76c4c5de 51
AustinKim 0:f01e76c4c5de 52 #define devlog(f_, ...) if(CATM1_DEVICE_DEBUG == DEBUG_ENABLE) { pc.printf("\r\n[%s] ", DEVNAME); pc.printf((f_), ##__VA_ARGS__); }
AustinKim 0:f01e76c4c5de 53 #define myprintf(f_, ...) {pc.printf("\r\n[MAIN] "); pc.printf((f_), ##__VA_ARGS__);}
AustinKim 0:f01e76c4c5de 54
AustinKim 0:f01e76c4c5de 55 /* Pin configuraiton */
AustinKim 0:f01e76c4c5de 56 // Cat.M1
AustinKim 0:f01e76c4c5de 57 #define MBED_CONF_IOTSHIELD_CATM1_TX D8
AustinKim 0:f01e76c4c5de 58 #define MBED_CONF_IOTSHIELD_CATM1_RX D2
AustinKim 0:f01e76c4c5de 59 #define MBED_CONF_IOTSHIELD_CATM1_RESET D7
AustinKim 0:f01e76c4c5de 60 #define MBED_CONF_IOTSHIELD_CATM1_PWRKEY D9
AustinKim 0:f01e76c4c5de 61
AustinKim 0:f01e76c4c5de 62 // Sensors
AustinKim 0:f01e76c4c5de 63 #define MBED_CONF_IOTSHIELD_SENSOR_CDS A0
AustinKim 0:f01e76c4c5de 64 #define MBED_CONF_IOTSHIELD_SENSOR_TEMP A1
AustinKim 0:f01e76c4c5de 65
AustinKim 0:f01e76c4c5de 66 /* Debug message settings */
AustinKim 0:f01e76c4c5de 67 #define WM01_PARSER_DEBUG DEBUG_DISABLE
AustinKim 0:f01e76c4c5de 68 #define CATM1_DEVICE_DEBUG DEBUG_ENABLE
AustinKim 0:f01e76c4c5de 69
AustinKim 0:f01e76c4c5de 70 /* SMS */
AustinKim 0:f01e76c4c5de 71 #define SMS_EOF 0x1A
AustinKim 0:f01e76c4c5de 72 #define MAX_SMS_SIZE 100
AustinKim 0:f01e76c4c5de 73
AustinKim 0:f01e76c4c5de 74 // have to modify phone number
AustinKim 0:f01e76c4c5de 75 char phone_number[] = "010xxxxxxxx";
AustinKim 0:f01e76c4c5de 76 char send_message[] = "WIZnet Cat.M1 IoT shield is powered on";
AustinKim 0:f01e76c4c5de 77
AustinKim 0:f01e76c4c5de 78 // Functions: Print information
AustinKim 0:f01e76c4c5de 79 void printInfo(void);
AustinKim 0:f01e76c4c5de 80
AustinKim 0:f01e76c4c5de 81 // Functions: Module Status
AustinKim 0:f01e76c4c5de 82 void waitCatM1Ready(void);
AustinKim 0:f01e76c4c5de 83 int8_t setEchoStatus_WM01(bool onoff);
AustinKim 0:f01e76c4c5de 84 int8_t getUsimStatus_WM01(void);
AustinKim 0:f01e76c4c5de 85 int8_t getNetworkStatus_WM01(void);
AustinKim 0:f01e76c4c5de 86
AustinKim 0:f01e76c4c5de 87 // Functions: SMS
AustinKim 0:f01e76c4c5de 88 int8_t initSMS_WM01(void);
AustinKim 0:f01e76c4c5de 89 int8_t sendSMS_WM01(char *da, char *msg, int len);
AustinKim 0:f01e76c4c5de 90 int checkRecvSMS_WM01(void);
AustinKim 0:f01e76c4c5de 91 int8_t recvSMS_WM01(int msg_idx, char *datetime, char *da, char *msg);
AustinKim 0:f01e76c4c5de 92 int8_t deleteSMS_WM01(int msg_idx);
AustinKim 0:f01e76c4c5de 93 int8_t deleteAllSMS_WM01(int delflag);
AustinKim 0:f01e76c4c5de 94
AustinKim 0:f01e76c4c5de 95 Serial pc(USBTX, USBRX); // USB debug
AustinKim 0:f01e76c4c5de 96
AustinKim 0:f01e76c4c5de 97 UARTSerial *_serial; // Cat.M1 module
AustinKim 0:f01e76c4c5de 98 ATCmdParser *_parser;
AustinKim 0:f01e76c4c5de 99
AustinKim 0:f01e76c4c5de 100 DigitalOut _RESET_WM01(MBED_CONF_IOTSHIELD_CATM1_RESET);
AustinKim 0:f01e76c4c5de 101 DigitalOut _PWRKEY_WM01(MBED_CONF_IOTSHIELD_CATM1_PWRKEY);
AustinKim 0:f01e76c4c5de 102
AustinKim 0:f01e76c4c5de 103 void serialPcInit(void)
AustinKim 0:f01e76c4c5de 104 {
AustinKim 0:f01e76c4c5de 105 pc.baud(115200);
AustinKim 0:f01e76c4c5de 106 pc.format(8, Serial::None, 1);
AustinKim 0:f01e76c4c5de 107 }
AustinKim 0:f01e76c4c5de 108
AustinKim 0:f01e76c4c5de 109 void serialDeviceInit(PinName tx, PinName rx, int baudrate)
AustinKim 0:f01e76c4c5de 110 {
AustinKim 0:f01e76c4c5de 111 _serial = new UARTSerial(tx, rx, baudrate);
AustinKim 0:f01e76c4c5de 112 }
AustinKim 0:f01e76c4c5de 113
AustinKim 0:f01e76c4c5de 114 void serialAtParserInit(const char *delimiter, bool debug_en)
AustinKim 0:f01e76c4c5de 115 {
AustinKim 0:f01e76c4c5de 116 _parser = new ATCmdParser(_serial);
AustinKim 0:f01e76c4c5de 117 _parser->debug_on(debug_en);
AustinKim 0:f01e76c4c5de 118 _parser->set_delimiter(delimiter);
AustinKim 0:f01e76c4c5de 119 _parser->set_timeout(WM01_DEFAULT_TIMEOUT);
AustinKim 0:f01e76c4c5de 120 }
AustinKim 0:f01e76c4c5de 121
AustinKim 0:f01e76c4c5de 122 void catm1DeviceInit(void)
AustinKim 0:f01e76c4c5de 123 {
AustinKim 0:f01e76c4c5de 124 serialDeviceInit( MBED_CONF_IOTSHIELD_CATM1_TX,
AustinKim 0:f01e76c4c5de 125 MBED_CONF_IOTSHIELD_CATM1_RX,
AustinKim 0:f01e76c4c5de 126 WM01_DEFAULT_BAUD_RATE);
AustinKim 0:f01e76c4c5de 127
AustinKim 0:f01e76c4c5de 128 serialAtParserInit( WM01_PARSER_DELIMITER,
AustinKim 0:f01e76c4c5de 129 WM01_PARSER_DEBUG);
AustinKim 0:f01e76c4c5de 130 }
AustinKim 0:f01e76c4c5de 131
AustinKim 0:f01e76c4c5de 132 void catm1DeviceReset_WM01(void)
AustinKim 0:f01e76c4c5de 133 {
AustinKim 0:f01e76c4c5de 134 _RESET_WM01 = 1;
AustinKim 0:f01e76c4c5de 135 _PWRKEY_WM01 = 1;
AustinKim 0:f01e76c4c5de 136 wait_ms(300);
AustinKim 0:f01e76c4c5de 137
AustinKim 0:f01e76c4c5de 138 _RESET_WM01 = 0;
AustinKim 0:f01e76c4c5de 139 _PWRKEY_WM01 = 0;
AustinKim 0:f01e76c4c5de 140 wait_ms(400);
AustinKim 0:f01e76c4c5de 141
AustinKim 0:f01e76c4c5de 142 _RESET_WM01 = 1;
AustinKim 0:f01e76c4c5de 143 wait_ms(1000);
AustinKim 0:f01e76c4c5de 144 }
AustinKim 0:f01e76c4c5de 145
AustinKim 0:f01e76c4c5de 146 // ----------------------------------------------------------------
AustinKim 0:f01e76c4c5de 147 // Main routine
AustinKim 0:f01e76c4c5de 148 // ----------------------------------------------------------------
AustinKim 0:f01e76c4c5de 149
AustinKim 0:f01e76c4c5de 150 int main()
AustinKim 0:f01e76c4c5de 151 {
AustinKim 0:f01e76c4c5de 152 serialPcInit();
AustinKim 0:f01e76c4c5de 153 catm1DeviceInit();
AustinKim 0:f01e76c4c5de 154
AustinKim 0:f01e76c4c5de 155 myprintf("Waiting for Cat.M1 Module Ready...\r\n");
AustinKim 0:f01e76c4c5de 156
AustinKim 0:f01e76c4c5de 157 catm1DeviceReset_WM01();
AustinKim 0:f01e76c4c5de 158
AustinKim 0:f01e76c4c5de 159 waitCatM1Ready();
AustinKim 0:f01e76c4c5de 160
AustinKim 0:f01e76c4c5de 161 wait_ms(5000);
AustinKim 0:f01e76c4c5de 162
AustinKim 0:f01e76c4c5de 163 myprintf("System Init Complete\r\n");
AustinKim 0:f01e76c4c5de 164
AustinKim 0:f01e76c4c5de 165 printInfo();
AustinKim 0:f01e76c4c5de 166
AustinKim 0:f01e76c4c5de 167 setEchoStatus_WM01(OFF);
AustinKim 0:f01e76c4c5de 168
AustinKim 0:f01e76c4c5de 169 getUsimStatus_WM01();
AustinKim 0:f01e76c4c5de 170
AustinKim 0:f01e76c4c5de 171 getNetworkStatus_WM01();
AustinKim 0:f01e76c4c5de 172
AustinKim 0:f01e76c4c5de 173 // SMS configuration
AustinKim 0:f01e76c4c5de 174 if(initSMS_WM01() != RET_OK)
AustinKim 0:f01e76c4c5de 175 {
AustinKim 0:f01e76c4c5de 176 myprintf("[SMS Init] failed\r\n");
AustinKim 0:f01e76c4c5de 177 }
AustinKim 0:f01e76c4c5de 178
AustinKim 0:f01e76c4c5de 179 // Send a message
AustinKim 0:f01e76c4c5de 180 if(sendSMS_WM01(phone_number, send_message, strlen(send_message)) == RET_OK)
AustinKim 0:f01e76c4c5de 181 {
AustinKim 0:f01e76c4c5de 182 myprintf("[SMS Send] to %s, \"%s\"\r\n", phone_number, send_message);
AustinKim 0:f01e76c4c5de 183 }
AustinKim 0:f01e76c4c5de 184
AustinKim 0:f01e76c4c5de 185 #if 0
AustinKim 0:f01e76c4c5de 186 // Delete messages
AustinKim 0:f01e76c4c5de 187 deleteAllSMS_WM01(3);
AustinKim 0:f01e76c4c5de 188 #endif
AustinKim 0:f01e76c4c5de 189
AustinKim 0:f01e76c4c5de 190 char date_time[25] = {0, };
AustinKim 0:f01e76c4c5de 191 char dest_addr[20] = {0, };
AustinKim 0:f01e76c4c5de 192 char recv_message[MAX_SMS_SIZE] = {0, };
AustinKim 0:f01e76c4c5de 193 int msg_idx;
AustinKim 0:f01e76c4c5de 194
AustinKim 0:f01e76c4c5de 195 while(1)
AustinKim 0:f01e76c4c5de 196 {
AustinKim 0:f01e76c4c5de 197 // SMS receive check
AustinKim 0:f01e76c4c5de 198 msg_idx = checkRecvSMS_WM01();
AustinKim 0:f01e76c4c5de 199
AustinKim 0:f01e76c4c5de 200 if(msg_idx > RET_NOK) // SMS received
AustinKim 0:f01e76c4c5de 201 {
AustinKim 0:f01e76c4c5de 202 // Receive a message
AustinKim 0:f01e76c4c5de 203 memset(recv_message, 0x00, MAX_SMS_SIZE);
AustinKim 0:f01e76c4c5de 204
AustinKim 0:f01e76c4c5de 205 if(recvSMS_WM01(msg_idx, date_time, dest_addr, recv_message) == RET_OK)
AustinKim 0:f01e76c4c5de 206 {
AustinKim 0:f01e76c4c5de 207 myprintf("[SMS Recv] from %s, %s, \"%s\"\r\n", dest_addr, date_time, recv_message);
AustinKim 0:f01e76c4c5de 208 }
AustinKim 0:f01e76c4c5de 209 }
AustinKim 0:f01e76c4c5de 210 }
AustinKim 0:f01e76c4c5de 211 }
AustinKim 0:f01e76c4c5de 212
AustinKim 0:f01e76c4c5de 213 // ----------------------------------------------------------------
AustinKim 0:f01e76c4c5de 214 // Functions: Print information
AustinKim 0:f01e76c4c5de 215 // ----------------------------------------------------------------
AustinKim 0:f01e76c4c5de 216
AustinKim 0:f01e76c4c5de 217 void printInfo(void)
AustinKim 0:f01e76c4c5de 218 {
AustinKim 0:f01e76c4c5de 219 myprintf("WIZnet IoT Shield for Arm MBED");
AustinKim 0:f01e76c4c5de 220 myprintf("LTE Cat.M1 Version");
AustinKim 0:f01e76c4c5de 221 myprintf("=================================================");
AustinKim 0:f01e76c4c5de 222 myprintf(">> Target Board: WIoT-WM01 (Woorinet WM-N400MSE)");
AustinKim 0:f01e76c4c5de 223 myprintf(">> Sample Code: SMS Test");
AustinKim 0:f01e76c4c5de 224 myprintf("=================================================\r\n");
AustinKim 0:f01e76c4c5de 225 }
AustinKim 0:f01e76c4c5de 226
AustinKim 0:f01e76c4c5de 227 // ----------------------------------------------------------------
AustinKim 0:f01e76c4c5de 228 // Functions: Cat.M1 Status
AustinKim 0:f01e76c4c5de 229 // ----------------------------------------------------------------
AustinKim 0:f01e76c4c5de 230
AustinKim 0:f01e76c4c5de 231 void waitCatM1Ready(void)
AustinKim 0:f01e76c4c5de 232 {
AustinKim 0:f01e76c4c5de 233 while(1)
AustinKim 0:f01e76c4c5de 234 {
AustinKim 0:f01e76c4c5de 235 if(_parser->send("AT") && _parser->recv("OK"))
AustinKim 0:f01e76c4c5de 236 {
AustinKim 0:f01e76c4c5de 237 myprintf("WM01 is Available\r\n");
AustinKim 0:f01e76c4c5de 238
AustinKim 0:f01e76c4c5de 239 return;
AustinKim 0:f01e76c4c5de 240 }
AustinKim 0:f01e76c4c5de 241 }
AustinKim 0:f01e76c4c5de 242 }
AustinKim 0:f01e76c4c5de 243
AustinKim 0:f01e76c4c5de 244 int8_t setEchoStatus_WM01(bool onoff)
AustinKim 0:f01e76c4c5de 245 {
AustinKim 0:f01e76c4c5de 246 int8_t ret = RET_NOK;
AustinKim 0:f01e76c4c5de 247 char _buf[10];
AustinKim 0:f01e76c4c5de 248
AustinKim 0:f01e76c4c5de 249 sprintf((char *)_buf, "ATE%d", onoff);
AustinKim 0:f01e76c4c5de 250
AustinKim 0:f01e76c4c5de 251 if(_parser->send(_buf) && _parser->recv("OK"))
AustinKim 0:f01e76c4c5de 252 {
AustinKim 0:f01e76c4c5de 253 devlog("Turn Echo %s : success\r\n", onoff ? "ON" : "OFF");
AustinKim 0:f01e76c4c5de 254
AustinKim 0:f01e76c4c5de 255 ret = RET_OK;
AustinKim 0:f01e76c4c5de 256 }
AustinKim 0:f01e76c4c5de 257 else
AustinKim 0:f01e76c4c5de 258 {
AustinKim 0:f01e76c4c5de 259 devlog("Turn Echo %s : failed\r\n", onoff ? "ON" : "OFF");
AustinKim 0:f01e76c4c5de 260 }
AustinKim 0:f01e76c4c5de 261
AustinKim 0:f01e76c4c5de 262 return ret;
AustinKim 0:f01e76c4c5de 263 }
AustinKim 0:f01e76c4c5de 264
AustinKim 0:f01e76c4c5de 265 int8_t getUsimStatus_WM01(void)
AustinKim 0:f01e76c4c5de 266 {
AustinKim 0:f01e76c4c5de 267 int8_t ret = RET_NOK;
AustinKim 0:f01e76c4c5de 268
AustinKim 0:f01e76c4c5de 269 if(_parser->send("AT$$STAT?") && _parser->recv("$$STAT:READY") && _parser->recv("OK"))
AustinKim 0:f01e76c4c5de 270 {
AustinKim 0:f01e76c4c5de 271 devlog("USIM Status : READY\r\n");
AustinKim 0:f01e76c4c5de 272
AustinKim 0:f01e76c4c5de 273 ret = RET_OK;
AustinKim 0:f01e76c4c5de 274 }
AustinKim 0:f01e76c4c5de 275 else
AustinKim 0:f01e76c4c5de 276 {
AustinKim 0:f01e76c4c5de 277 devlog("Retrieving USIM Status failed\r\n");
AustinKim 0:f01e76c4c5de 278 }
AustinKim 0:f01e76c4c5de 279
AustinKim 0:f01e76c4c5de 280 return ret;
AustinKim 0:f01e76c4c5de 281 }
AustinKim 0:f01e76c4c5de 282
AustinKim 0:f01e76c4c5de 283 int8_t getNetworkStatus_WM01(void)
AustinKim 0:f01e76c4c5de 284 {
AustinKim 0:f01e76c4c5de 285 int8_t ret = RET_NOK;
AustinKim 0:f01e76c4c5de 286 int val, stat;
AustinKim 0:f01e76c4c5de 287
AustinKim 0:f01e76c4c5de 288 if(_parser->send("AT+CEREG?") && _parser->recv("+CEREG: %d,%d", &val, &stat) && _parser->recv("OK"))
AustinKim 0:f01e76c4c5de 289 {
AustinKim 0:f01e76c4c5de 290 if((val == 0) && (stat == 1))
AustinKim 0:f01e76c4c5de 291 {
AustinKim 0:f01e76c4c5de 292 devlog("Network Status : attached\r\n");
AustinKim 0:f01e76c4c5de 293
AustinKim 0:f01e76c4c5de 294 ret = RET_OK;
AustinKim 0:f01e76c4c5de 295 }
AustinKim 0:f01e76c4c5de 296 else
AustinKim 0:f01e76c4c5de 297 {
AustinKim 0:f01e76c4c5de 298 devlog("Network Status : %d, %d\r\n", val, stat);
AustinKim 0:f01e76c4c5de 299 }
AustinKim 0:f01e76c4c5de 300 }
AustinKim 0:f01e76c4c5de 301 else
AustinKim 0:f01e76c4c5de 302 {
AustinKim 0:f01e76c4c5de 303 devlog("Network Status : Error\r\n");
AustinKim 0:f01e76c4c5de 304 }
AustinKim 0:f01e76c4c5de 305
AustinKim 0:f01e76c4c5de 306 return ret;
AustinKim 0:f01e76c4c5de 307 }
AustinKim 0:f01e76c4c5de 308
AustinKim 0:f01e76c4c5de 309 // ----------------------------------------------------------------
AustinKim 0:f01e76c4c5de 310 // Functions: Cat.M1 SMS
AustinKim 0:f01e76c4c5de 311 // ----------------------------------------------------------------
AustinKim 0:f01e76c4c5de 312
AustinKim 0:f01e76c4c5de 313 int8_t initSMS_WM01(void)
AustinKim 0:f01e76c4c5de 314 {
AustinKim 0:f01e76c4c5de 315 int8_t ret = RET_NOK;
AustinKim 0:f01e76c4c5de 316 bool msgformat, charset, recvset = false;
AustinKim 0:f01e76c4c5de 317
AustinKim 0:f01e76c4c5de 318 // 0 = PDU mode / 1 = Text mode
AustinKim 0:f01e76c4c5de 319 if(_parser->send("AT+CMGF=1") && _parser->recv("OK")) // Set SMS message format as text mode
AustinKim 0:f01e76c4c5de 320 {
AustinKim 0:f01e76c4c5de 321 devlog("SMS message format : Text mode\r\n");
AustinKim 0:f01e76c4c5de 322
AustinKim 0:f01e76c4c5de 323 msgformat = true;
AustinKim 0:f01e76c4c5de 324 }
AustinKim 0:f01e76c4c5de 325
AustinKim 0:f01e76c4c5de 326 // "GSM" / "IRA" / "USC2"
AustinKim 0:f01e76c4c5de 327 if(_parser->send("AT+CSCS=\"GSM\"") && _parser->recv("OK")) // Set character set as GSM
AustinKim 0:f01e76c4c5de 328 {
AustinKim 0:f01e76c4c5de 329 devlog("SMS character set : GSM\r\n");
AustinKim 0:f01e76c4c5de 330
AustinKim 0:f01e76c4c5de 331 charset = true;
AustinKim 0:f01e76c4c5de 332 }
AustinKim 0:f01e76c4c5de 333
AustinKim 0:f01e76c4c5de 334 if(_parser->send("AT*SKT*NEWMSG=4098") && _parser->recv("OK"))
AustinKim 0:f01e76c4c5de 335 {
AustinKim 0:f01e76c4c5de 336 devlog("Tele service ID set : 4098\r\n");
AustinKim 0:f01e76c4c5de 337
AustinKim 0:f01e76c4c5de 338 recvset = true;
AustinKim 0:f01e76c4c5de 339 }
AustinKim 0:f01e76c4c5de 340
AustinKim 0:f01e76c4c5de 341 if(msgformat && charset && recvset)
AustinKim 0:f01e76c4c5de 342 {
AustinKim 0:f01e76c4c5de 343 ret = RET_OK;
AustinKim 0:f01e76c4c5de 344 }
AustinKim 0:f01e76c4c5de 345
AustinKim 0:f01e76c4c5de 346 return ret;
AustinKim 0:f01e76c4c5de 347 }
AustinKim 0:f01e76c4c5de 348
AustinKim 0:f01e76c4c5de 349 int8_t sendSMS_WM01(char *da, char *msg, int len)
AustinKim 0:f01e76c4c5de 350 {
AustinKim 0:f01e76c4c5de 351 int8_t ret = RET_NOK;
AustinKim 0:f01e76c4c5de 352 bool done = false;
AustinKim 0:f01e76c4c5de 353 int msg_idx = 0;
AustinKim 0:f01e76c4c5de 354
AustinKim 0:f01e76c4c5de 355 _parser->set_timeout(WM01_CONNECT_TIMEOUT);
AustinKim 0:f01e76c4c5de 356
AustinKim 0:f01e76c4c5de 357 _parser->send("AT+CMGS=\"%s\"", da); // DA(Destination address, Phone number)
AustinKim 0:f01e76c4c5de 358
AustinKim 0:f01e76c4c5de 359 if(!done && _parser->recv(">"))
AustinKim 0:f01e76c4c5de 360 {
AustinKim 0:f01e76c4c5de 361 done = (_parser->write(msg, len) <= 0) & _parser->send("%c", SMS_EOF);
AustinKim 0:f01e76c4c5de 362 }
AustinKim 0:f01e76c4c5de 363
AustinKim 0:f01e76c4c5de 364 if(!done)
AustinKim 0:f01e76c4c5de 365 {
AustinKim 0:f01e76c4c5de 366 done = (_parser->recv("+CMGS: %d", &msg_idx) && _parser->recv("OK"));
AustinKim 0:f01e76c4c5de 367
AustinKim 0:f01e76c4c5de 368 if(done)
AustinKim 0:f01e76c4c5de 369 {
AustinKim 0:f01e76c4c5de 370 devlog(">> SMS send success : index %d\r\n", msg_idx);
AustinKim 0:f01e76c4c5de 371
AustinKim 0:f01e76c4c5de 372 ret = RET_OK;
AustinKim 0:f01e76c4c5de 373 }
AustinKim 0:f01e76c4c5de 374 }
AustinKim 0:f01e76c4c5de 375
AustinKim 0:f01e76c4c5de 376 _parser->set_timeout(WM01_DEFAULT_TIMEOUT);
AustinKim 0:f01e76c4c5de 377
AustinKim 0:f01e76c4c5de 378 return ret;
AustinKim 0:f01e76c4c5de 379 }
AustinKim 0:f01e76c4c5de 380
AustinKim 0:f01e76c4c5de 381 int checkRecvSMS_WM01(void)
AustinKim 0:f01e76c4c5de 382 {
AustinKim 0:f01e76c4c5de 383 bool received = false;
AustinKim 0:f01e76c4c5de 384 int ret = RET_NOK;
AustinKim 0:f01e76c4c5de 385 int msg_idx = 0;
AustinKim 0:f01e76c4c5de 386 int tele_service_id = 0;
AustinKim 0:f01e76c4c5de 387
AustinKim 0:f01e76c4c5de 388 _parser->set_timeout(1);
AustinKim 0:f01e76c4c5de 389
AustinKim 0:f01e76c4c5de 390 received = _parser->recv("*SKT*NEWMSG:%d", &msg_idx);
AustinKim 0:f01e76c4c5de 391
AustinKim 0:f01e76c4c5de 392 _parser->set_timeout(WM01_DEFAULT_TIMEOUT);
AustinKim 0:f01e76c4c5de 393
AustinKim 0:f01e76c4c5de 394 if(received)
AustinKim 0:f01e76c4c5de 395 {
AustinKim 0:f01e76c4c5de 396 ret = msg_idx;
AustinKim 0:f01e76c4c5de 397
AustinKim 0:f01e76c4c5de 398 devlog("<< SMS received : index %d\r\n", msg_idx);
AustinKim 0:f01e76c4c5de 399 }
AustinKim 0:f01e76c4c5de 400
AustinKim 0:f01e76c4c5de 401 return ret;
AustinKim 0:f01e76c4c5de 402 }
AustinKim 0:f01e76c4c5de 403
AustinKim 0:f01e76c4c5de 404 int8_t recvSMS_WM01(int msg_idx, char *datetime, char *da, char *msg)
AustinKim 0:f01e76c4c5de 405 {
AustinKim 0:f01e76c4c5de 406 int8_t ret = RET_NOK;
AustinKim 0:f01e76c4c5de 407 bool done = false;
AustinKim 0:f01e76c4c5de 408 char type[15] = {0, };
AustinKim 0:f01e76c4c5de 409 char recv_msg[MAX_SMS_SIZE] = {0, };
AustinKim 0:f01e76c4c5de 410 char *search_pt;
AustinKim 0:f01e76c4c5de 411 int i = 0;
AustinKim 0:f01e76c4c5de 412
AustinKim 0:f01e76c4c5de 413 Timer t;
AustinKim 0:f01e76c4c5de 414
AustinKim 0:f01e76c4c5de 415 memset(recv_msg, 0x00, MAX_SMS_SIZE);
AustinKim 0:f01e76c4c5de 416
AustinKim 0:f01e76c4c5de 417 _parser->set_timeout(WM01_RECV_TIMEOUT);
AustinKim 0:f01e76c4c5de 418
AustinKim 0:f01e76c4c5de 419 if(_parser->send("AT+CMGR=%d", msg_idx) && _parser->recv("+CMGR: \"%[^\"]\",\"%[^\"]\",,\"%[^\"]\"", type, da, datetime))
AustinKim 0:f01e76c4c5de 420 {
AustinKim 0:f01e76c4c5de 421 // timer start
AustinKim 0:f01e76c4c5de 422 t.start();
AustinKim 0:f01e76c4c5de 423
AustinKim 1:dd094a78c42c 424 while(!done && (t.read_ms() < WM01_DEFAULT_TIMEOUT))
AustinKim 0:f01e76c4c5de 425 {
AustinKim 0:f01e76c4c5de 426 _parser->read(&recv_msg[i++], 1);
AustinKim 0:f01e76c4c5de 427
AustinKim 0:f01e76c4c5de 428 search_pt = strstr(recv_msg, "OK");
AustinKim 0:f01e76c4c5de 429
AustinKim 1:dd094a78c42c 430 if(search_pt != 0)
AustinKim 0:f01e76c4c5de 431 {
AustinKim 0:f01e76c4c5de 432 done = true; // break;
AustinKim 0:f01e76c4c5de 433 }
AustinKim 0:f01e76c4c5de 434 }
AustinKim 0:f01e76c4c5de 435
AustinKim 0:f01e76c4c5de 436 if(i > 8)
AustinKim 0:f01e76c4c5de 437 {
AustinKim 0:f01e76c4c5de 438 memcpy(msg, recv_msg + 2, i - 8);
AustinKim 0:f01e76c4c5de 439 devlog("<< SMS receive success : index %d\r\n", msg_idx);
AustinKim 0:f01e76c4c5de 440
AustinKim 0:f01e76c4c5de 441 ret = RET_OK;
AustinKim 0:f01e76c4c5de 442 }
AustinKim 0:f01e76c4c5de 443 }
AustinKim 0:f01e76c4c5de 444
AustinKim 0:f01e76c4c5de 445 _parser->set_timeout(WM01_DEFAULT_TIMEOUT);
AustinKim 0:f01e76c4c5de 446 _parser->flush();
AustinKim 0:f01e76c4c5de 447
AustinKim 0:f01e76c4c5de 448 return ret;
AustinKim 0:f01e76c4c5de 449 }
AustinKim 0:f01e76c4c5de 450
AustinKim 0:f01e76c4c5de 451 int8_t deleteSMS_WM01(int msg_idx)
AustinKim 0:f01e76c4c5de 452 {
AustinKim 0:f01e76c4c5de 453 int8_t ret = RET_NOK;
AustinKim 0:f01e76c4c5de 454
AustinKim 0:f01e76c4c5de 455 if(_parser->send("AT+CMGD=%d", msg_idx) && _parser->recv("OK"))
AustinKim 0:f01e76c4c5de 456 {
AustinKim 0:f01e76c4c5de 457 devlog("Message index[%d] has been deleted\r\n", msg_idx);
AustinKim 0:f01e76c4c5de 458
AustinKim 0:f01e76c4c5de 459 ret = RET_OK;
AustinKim 0:f01e76c4c5de 460 }
AustinKim 0:f01e76c4c5de 461 return ret;
AustinKim 0:f01e76c4c5de 462 }
AustinKim 0:f01e76c4c5de 463
AustinKim 0:f01e76c4c5de 464 int8_t deleteAllSMS_WM01(int delflag)
AustinKim 0:f01e76c4c5de 465 {
AustinKim 0:f01e76c4c5de 466 int8_t ret = RET_NOK;
AustinKim 0:f01e76c4c5de 467
AustinKim 0:f01e76c4c5de 468 // delflag == 1; // Delete all read messages from storage
AustinKim 0:f01e76c4c5de 469 // delflag == 2; // Delete all read messages from storage and sent mobile originated messages
AustinKim 0:f01e76c4c5de 470 // delflag == 3; // Delete all read messages from storage, sent and unsent mobile originated messages
AustinKim 0:f01e76c4c5de 471 // delflag == 4; // Delete all messages from storage
AustinKim 0:f01e76c4c5de 472 if(_parser->send("AT+CMGD=0,%d", delflag) && _parser->recv("OK"))
AustinKim 0:f01e76c4c5de 473 {
AustinKim 0:f01e76c4c5de 474 devlog("All messages has been deleted (delflag : %d)\r\n", delflag);
AustinKim 0:f01e76c4c5de 475
AustinKim 0:f01e76c4c5de 476 ret = RET_OK;
AustinKim 0:f01e76c4c5de 477 }
AustinKim 0:f01e76c4c5de 478
AustinKim 0:f01e76c4c5de 479 return ret;
AustinKim 0:f01e76c4c5de 480 }