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:
kranjan
Date:
Sat Jan 04 05:28:45 2014 +0000
Revision:
141:571e0ef6c8dc
Parent:
124:6d964b4343c8
Added licensing header to all files in the library

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 */