A library for talking to Multi-Tech's Cellular SocketModem Devices.

Dependents:   M2X_dev axeda_wrapper_dev MTS_M2x_Example1 MTS_Cellular_Connect_Example ... more

Committer:
mfiore
Date:
Tue Sep 02 18:38:55 2014 +0000
Revision:
152:9a2c7ed27744
Parent:
141:571e0ef6c8dc
Wifi: fix compatibility break with old shields by checking for both old and new style responses to "show connection" command

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kranjan 141:571e0ef6c8dc 1 /* Universal Socket Modem Interface Library
kranjan 141:571e0ef6c8dc 2 * Copyright (c) 2013 Multi-Tech Systems
kranjan 141:571e0ef6c8dc 3 *
kranjan 141:571e0ef6c8dc 4 * Licensed under the Apache License, Version 2.0 (the "License");
kranjan 141:571e0ef6c8dc 5 * you may not use this file except in compliance with the License.
kranjan 141:571e0ef6c8dc 6 * You may obtain a copy of the License at
kranjan 141:571e0ef6c8dc 7 *
kranjan 141:571e0ef6c8dc 8 * http://www.apache.org/licenses/LICENSE-2.0
kranjan 141:571e0ef6c8dc 9 *
kranjan 141:571e0ef6c8dc 10 * Unless required by applicable law or agreed to in writing, software
kranjan 141:571e0ef6c8dc 11 * distributed under the License is distributed on an "AS IS" BASIS,
kranjan 141:571e0ef6c8dc 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kranjan 141:571e0ef6c8dc 13 * See the License for the specific language governing permissions and
kranjan 141:571e0ef6c8dc 14 * limitations under the License.
kranjan 141:571e0ef6c8dc 15 */
kranjan 141:571e0ef6c8dc 16
jengbrecht 0:563b70517320 17 #ifndef TESTMTSCIRCULARBUFFER_H
jengbrecht 0:563b70517320 18 #define TESTMTSCIRCULARBUFFER_H
jengbrecht 0:563b70517320 19
jengbrecht 0:563b70517320 20 #include "MTSCircularBuffer.h"
jengbrecht 0:563b70517320 21 #include "Vars.h"
jengbrecht 0:563b70517320 22
mfiore 124:6d964b4343c8 23 /* unit tests for the circular buffer class */
mfiore 124:6d964b4343c8 24
mfiore 60:ee9c7a700330 25 using namespace mts;
mfiore 60:ee9c7a700330 26
jengbrecht 0:563b70517320 27 int capacity = 0;
jengbrecht 0:563b70517320 28 MTSCircularBuffer* buffer = new MTSCircularBuffer(5);
jengbrecht 0:563b70517320 29
jengbrecht 0:563b70517320 30 void callback()
jengbrecht 0:563b70517320 31 {
sgodinez 67:1003b410f781 32 capacity = buffer->remaining();
jengbrecht 0:563b70517320 33 }
jengbrecht 0:563b70517320 34
jengbrecht 0:563b70517320 35 int testMTSCircularBuffer()
jengbrecht 0:563b70517320 36 {
sgodinez 67:1003b410f781 37 printf("Testing: MTSCircularBuffer\r\n");
jengbrecht 0:563b70517320 38 int failed = 0;
mfiore 60:ee9c7a700330 39 char byte;
jengbrecht 0:563b70517320 40
jengbrecht 0:563b70517320 41
jengbrecht 0:563b70517320 42 //Test getSize method
sgodinez 67:1003b410f781 43 if (buffer->capacity() != 5) {
sgodinez 67:1003b410f781 44 printf("Failed: capacity()\r\n");
jengbrecht 0:563b70517320 45 failed++;
jengbrecht 0:563b70517320 46 }
jengbrecht 0:563b70517320 47
jengbrecht 0:563b70517320 48 //Test clear function
jengbrecht 0:563b70517320 49 buffer->write("AT", 2);
jengbrecht 0:563b70517320 50 buffer->clear();
sgodinez 67:1003b410f781 51 if (buffer->size() != 0) {
sgodinez 67:1003b410f781 52 printf("Failed: clear()\r\n");
jengbrecht 0:563b70517320 53 failed++;
jengbrecht 0:563b70517320 54 }
jengbrecht 0:563b70517320 55
jengbrecht 0:563b70517320 56 /* The next set of test all rely on an empty buffer!!! */
jengbrecht 0:563b70517320 57
jengbrecht 0:563b70517320 58 //Test isEmpty method - empty buffer
jengbrecht 0:563b70517320 59 if (buffer->isEmpty() != true) {
sgodinez 67:1003b410f781 60 printf("Failed: isEmpty() - empty\r\n");
jengbrecht 0:563b70517320 61 failed++;
jengbrecht 0:563b70517320 62 }
jengbrecht 0:563b70517320 63
jengbrecht 0:563b70517320 64 //Test isFull method - empty buffer
jengbrecht 0:563b70517320 65 if (buffer->isFull() == true) {
sgodinez 67:1003b410f781 66 printf("Failed: isFull() - empty\r\n");
jengbrecht 0:563b70517320 67 failed++;
jengbrecht 0:563b70517320 68 }
jengbrecht 0:563b70517320 69
jengbrecht 0:563b70517320 70 //Test capacity method - empty buffer
sgodinez 67:1003b410f781 71 if (buffer->remaining() != 5) {
sgodinez 67:1003b410f781 72 printf("Failed: remaining() - empty\r\n");
jengbrecht 0:563b70517320 73 failed++;
jengbrecht 0:563b70517320 74 }
jengbrecht 0:563b70517320 75
jengbrecht 0:563b70517320 76 //Test available method - empty buffer
sgodinez 67:1003b410f781 77 if (buffer->size() != 0) {
sgodinez 67:1003b410f781 78 printf("Failed: size() - empty\r\n");
jengbrecht 0:563b70517320 79 failed++;
jengbrecht 0:563b70517320 80 }
jengbrecht 0:563b70517320 81
jengbrecht 0:563b70517320 82 /* The next set of tests all rely on a full buffer */
jengbrecht 0:563b70517320 83
jengbrecht 0:563b70517320 84 //Test bulk write method
jengbrecht 0:563b70517320 85 int tmp = buffer->write("Test", 5);
mfiore 60:ee9c7a700330 86 if (tmp != 5) {
sgodinez 67:1003b410f781 87 printf("Failed: bulk write()\r\n");
jengbrecht 0:563b70517320 88 failed++;
jengbrecht 0:563b70517320 89 }
jengbrecht 0:563b70517320 90
jengbrecht 0:563b70517320 91 //Test isEmpty method - full buffer
jengbrecht 0:563b70517320 92 if (buffer->isEmpty() == true) {
sgodinez 67:1003b410f781 93 printf("Failed: isEmpty() - full\r\n");
jengbrecht 0:563b70517320 94 failed++;
jengbrecht 0:563b70517320 95 }
jengbrecht 0:563b70517320 96
jengbrecht 0:563b70517320 97 //Test isFull method - full buffer
jengbrecht 0:563b70517320 98 if (buffer->isFull() == false) {
sgodinez 67:1003b410f781 99 printf("Failed: isFull() - full\r\n");
jengbrecht 0:563b70517320 100 failed++;
jengbrecht 0:563b70517320 101 }
jengbrecht 0:563b70517320 102
jengbrecht 0:563b70517320 103 //Test capacity method - full buffer
sgodinez 67:1003b410f781 104 if (buffer->remaining() != 0) {
sgodinez 67:1003b410f781 105 printf("Failed: remaining() - full\r\n");
jengbrecht 0:563b70517320 106 failed++;
jengbrecht 0:563b70517320 107 }
jengbrecht 0:563b70517320 108
jengbrecht 0:563b70517320 109 //Test available method - full buffer
sgodinez 67:1003b410f781 110 if (buffer->size() != 5) {
sgodinez 67:1003b410f781 111 printf("Failed: size() - full\r\n");
jengbrecht 0:563b70517320 112 failed++;
jengbrecht 0:563b70517320 113 }
jengbrecht 0:563b70517320 114
jengbrecht 0:563b70517320 115 //Test single overwrite method
mfiore 60:ee9c7a700330 116 if (buffer->write('A') != 0) {
sgodinez 67:1003b410f781 117 printf("Failed: write() - overwrite\r\n");
jengbrecht 0:563b70517320 118 failed++;
jengbrecht 0:563b70517320 119 }
jengbrecht 0:563b70517320 120
jengbrecht 0:563b70517320 121 //Test bulk overwrite method
mfiore 60:ee9c7a700330 122 if (buffer->write("Test", 5) != 0) {
sgodinez 67:1003b410f781 123 printf("Failed: bulk write() - overflow\r\n");
jengbrecht 0:563b70517320 124 failed++;
jengbrecht 0:563b70517320 125 }
jengbrecht 0:563b70517320 126
jengbrecht 0:563b70517320 127 //Test single read method
sgodinez 67:1003b410f781 128 if ((buffer->read(byte) < 1 && byte != 'T') || buffer->remaining() != 1) {
sgodinez 67:1003b410f781 129 printf("Failed: single read()\r\n");
jengbrecht 0:563b70517320 130 failed++;
jengbrecht 0:563b70517320 131 }
jengbrecht 0:563b70517320 132
jengbrecht 0:563b70517320 133 //Test bulk read method
jengbrecht 0:563b70517320 134 char data[5];
mfiore 60:ee9c7a700330 135 if (buffer->read(data, 4) != 4 || data[0] != 'e' || data[1] != 's' || data[2] != 't' || data[3] != '\0') {
sgodinez 67:1003b410f781 136 printf("Failed: bulk read()\r\n");
jengbrecht 0:563b70517320 137 failed++;
jengbrecht 0:563b70517320 138 }
jengbrecht 0:563b70517320 139
jengbrecht 0:563b70517320 140 //Test wrap write/read methods
mfiore 60:ee9c7a700330 141 tmp = buffer->write("AT", 3);
mfiore 60:ee9c7a700330 142 if (tmp != 3 || (buffer->read(byte) < 1 && byte != 'A') || (buffer->read(byte) < 1 && byte != 'T')) {
sgodinez 67:1003b410f781 143 printf("Failed: wrap write()/read()\r\n");
jengbrecht 0:563b70517320 144 failed++;
jengbrecht 0:563b70517320 145 }
jengbrecht 0:563b70517320 146 buffer->clear();
jengbrecht 0:563b70517320 147
jengbrecht 0:563b70517320 148 /* The next set of test are focused all on the attach methods */
jengbrecht 0:563b70517320 149
jengbrecht 0:563b70517320 150 //Test attach with greater than below level
jengbrecht 0:563b70517320 151 buffer->attach(&callback, 3, Vars::GREATER);
jengbrecht 0:563b70517320 152 buffer->write("ABC", 3);
jengbrecht 0:563b70517320 153 if (capacity != 0) {
sgodinez 67:1003b410f781 154 printf("Failed: attach() - greater/below\r\n");
jengbrecht 0:563b70517320 155 failed++;
jengbrecht 0:563b70517320 156 }
jengbrecht 0:563b70517320 157
jengbrecht 0:563b70517320 158 //Test attach with greater than above level
jengbrecht 0:563b70517320 159 buffer->write('T');
jengbrecht 0:563b70517320 160 if (capacity != 1) {
sgodinez 67:1003b410f781 161 printf("Failed: attach() - greater/above\r\n");
jengbrecht 0:563b70517320 162 failed++;
jengbrecht 0:563b70517320 163 }
jengbrecht 0:563b70517320 164 buffer->clear();
jengbrecht 0:563b70517320 165 capacity = 0;
jengbrecht 0:563b70517320 166
jengbrecht 0:563b70517320 167 //Test attach with greater equal than below level
jengbrecht 0:563b70517320 168 buffer->attach(&callback, 3, Vars::GREATER_EQUAL);
jengbrecht 0:563b70517320 169 buffer->write("AB", 2);
jengbrecht 0:563b70517320 170 if (capacity != 0) {
sgodinez 67:1003b410f781 171 printf("Failed: attach() - greater equal/below\r\n");
jengbrecht 0:563b70517320 172 failed++;
jengbrecht 0:563b70517320 173 }
jengbrecht 0:563b70517320 174
jengbrecht 0:563b70517320 175 //Test attach with greater equal than above level
jengbrecht 0:563b70517320 176 buffer->write('T');
jengbrecht 0:563b70517320 177 if (capacity != 2) {
sgodinez 67:1003b410f781 178 printf("Failed: attach() - greater equal/above\r\n");
jengbrecht 0:563b70517320 179 failed++;
jengbrecht 0:563b70517320 180 }
jengbrecht 0:563b70517320 181
jengbrecht 0:563b70517320 182 //Test attach with less than above level
jengbrecht 0:563b70517320 183 buffer->clear();
jengbrecht 0:563b70517320 184 buffer->write("ABC", 3);
jengbrecht 0:563b70517320 185 capacity = 0;
jengbrecht 0:563b70517320 186 buffer->attach(&callback, 2, Vars::LESS);
mfiore 60:ee9c7a700330 187 buffer->read(byte);
jengbrecht 0:563b70517320 188 if (capacity != 0) {
sgodinez 67:1003b410f781 189 printf("Failed: attach() - less_equal/above\r\n");
jengbrecht 0:563b70517320 190 failed++;
jengbrecht 0:563b70517320 191 }
jengbrecht 0:563b70517320 192
jengbrecht 0:563b70517320 193 //Test attach with less than below level
mfiore 60:ee9c7a700330 194 buffer->read(byte);
jengbrecht 0:563b70517320 195 if (capacity != 4) {
sgodinez 67:1003b410f781 196 printf("Failed: attach() - less_equal/below%d\r\n", capacity);
jengbrecht 0:563b70517320 197 failed++;
jengbrecht 0:563b70517320 198 }
jengbrecht 0:563b70517320 199
jengbrecht 0:563b70517320 200 //Test attach with less equal than above level
jengbrecht 0:563b70517320 201 buffer->clear();
jengbrecht 0:563b70517320 202 buffer->write("Test", 4);
jengbrecht 0:563b70517320 203 capacity = 0;
jengbrecht 0:563b70517320 204 buffer->attach(&callback, 2, Vars::LESS_EQUAL);
mfiore 60:ee9c7a700330 205 buffer->read(byte);
jengbrecht 0:563b70517320 206 if (capacity != 0) {
sgodinez 67:1003b410f781 207 printf("Failed: attach() - less equal/above\r\n");
jengbrecht 0:563b70517320 208 failed++;
jengbrecht 0:563b70517320 209 }
jengbrecht 0:563b70517320 210
jengbrecht 0:563b70517320 211 //Test attach with less equal than below level
mfiore 60:ee9c7a700330 212 buffer->read(byte);
jengbrecht 0:563b70517320 213 if (capacity != 3) {
sgodinez 67:1003b410f781 214 printf("Failed: attach() - less equal/below%d\r\n", capacity);
jengbrecht 0:563b70517320 215 failed++;
jengbrecht 0:563b70517320 216 }
jengbrecht 0:563b70517320 217
jengbrecht 0:563b70517320 218 //Test attach with less equal than above level
jengbrecht 0:563b70517320 219 buffer->clear();
jengbrecht 0:563b70517320 220 buffer->write("Test", 4);
jengbrecht 0:563b70517320 221 capacity = 0;
jengbrecht 0:563b70517320 222 buffer->attach(&callback, 2, Vars::EQUAL);
mfiore 60:ee9c7a700330 223 buffer->read(byte);
jengbrecht 0:563b70517320 224 if (capacity != 0) {
sgodinez 67:1003b410f781 225 printf("Failed: attach() - equal/above\r\n");
jengbrecht 0:563b70517320 226 failed++;
jengbrecht 0:563b70517320 227 }
jengbrecht 0:563b70517320 228
jengbrecht 0:563b70517320 229 //Test attach with less equal than below level
mfiore 60:ee9c7a700330 230 buffer->read(byte);
jengbrecht 0:563b70517320 231 if (capacity != 3) {
sgodinez 67:1003b410f781 232 printf("Failed: attach() - equal/below%d\r\n", capacity);
jengbrecht 0:563b70517320 233 failed++;
jengbrecht 0:563b70517320 234 }
jengbrecht 0:563b70517320 235
sgodinez 67:1003b410f781 236 //Test Ins and Outs
sgodinez 67:1003b410f781 237 {
sgodinez 68:c490e4a51778 238 const char inData[] = "*ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890*";
sgodinez 67:1003b410f781 239 const int size = sizeof(inData);
sgodinez 67:1003b410f781 240 char outData[size];
sgodinez 67:1003b410f781 241
sgodinez 67:1003b410f781 242 int bytesWritten = 0;
sgodinez 67:1003b410f781 243 int bytesRead = 0;
sgodinez 67:1003b410f781 244 buffer->clear();
sgodinez 67:1003b410f781 245
sgodinez 67:1003b410f781 246 Timer tmr;
sgodinez 67:1003b410f781 247 tmr.start();
sgodinez 67:1003b410f781 248 do {
sgodinez 67:1003b410f781 249 int remaining = size - bytesRead;
sgodinez 67:1003b410f781 250 int readable = buffer->size();
sgodinez 67:1003b410f781 251 if(remaining) {
sgodinez 67:1003b410f781 252 if(readable) {
sgodinez 67:1003b410f781 253 //printf("READABLE [%d]\r\n", readable);
sgodinez 67:1003b410f781 254 int received = buffer->read(&outData[bytesRead], remaining);
sgodinez 67:1003b410f781 255 bytesRead += received;
sgodinez 67:1003b410f781 256 //printf("READ [%d] TOTAL[%d] REMAINING[%d]\r\n", received, bytesRead, size - bytesRead);
sgodinez 67:1003b410f781 257 }
sgodinez 67:1003b410f781 258 }
sgodinez 67:1003b410f781 259
sgodinez 67:1003b410f781 260 remaining = size - bytesWritten;
sgodinez 67:1003b410f781 261 int writeable = buffer->remaining();
sgodinez 67:1003b410f781 262 if(remaining) {
sgodinez 67:1003b410f781 263 if(writeable) {
sgodinez 67:1003b410f781 264 //printf("WRITEABLE [%d]\r\n", writeable);
sgodinez 67:1003b410f781 265 int written = buffer->write(&inData[bytesWritten], remaining);
sgodinez 67:1003b410f781 266 bytesWritten += written;
sgodinez 67:1003b410f781 267 remaining = size - bytesWritten;
sgodinez 67:1003b410f781 268 //printf("WROTE [%d] TOTAL[%d] REMAINING[%d]\r\n", written, bytesWritten, size - bytesWritten);
sgodinez 67:1003b410f781 269 }
sgodinez 67:1003b410f781 270 }
sgodinez 67:1003b410f781 271
sgodinez 67:1003b410f781 272 } while (tmr.read_ms() <= 5000 && bytesRead < size);
sgodinez 67:1003b410f781 273
sgodinez 68:c490e4a51778 274 printf("INPUT [%d]: [%s]\r\n", size, inData);
sgodinez 68:c490e4a51778 275 printf("OUTPUT [%d]: [%s]\r\n", bytesRead, outData);
sgodinez 67:1003b410f781 276 for(int i = 0; i < size - 1; i++) {
sgodinez 67:1003b410f781 277 if(inData[i] != outData[i]) {
sgodinez 67:1003b410f781 278 printf("Failed: Buffers do not match at index %d\r\n", i);
sgodinez 67:1003b410f781 279 failed++;
sgodinez 67:1003b410f781 280 break;
sgodinez 67:1003b410f781 281 }
sgodinez 67:1003b410f781 282 }
sgodinez 67:1003b410f781 283 }
sgodinez 67:1003b410f781 284
sgodinez 67:1003b410f781 285 printf("Finished Testing: MTSCircularBuffer\r\n");
jengbrecht 0:563b70517320 286 return failed;
jengbrecht 0:563b70517320 287 }
jengbrecht 0:563b70517320 288
kranjan 141:571e0ef6c8dc 289 #endif /* TESTMTSCIRCULARBUFFER_H */