Giung Kim
/
WIZnet-IoTShield-WM01-SMS
Init Project for SMS
main.cpp@1:dd094a78c42c, 2019-09-16 (annotated)
- 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?
User | Revision | Line number | New 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 | } |