Host library for controlling a WiConnect enabled Wi-Fi module.

Dependents:   wiconnect-ota_example wiconnect-web_setup_example wiconnect-test-console wiconnect-tcp_server_example ... more

Committer:
dan_ackme
Date:
Wed Aug 13 04:41:04 2014 -0700
Revision:
16:7f1d6d359787
Parent:
6:8a87a59d0d21
updated documentation and copyright

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dan_ackme 16:7f1d6d359787 1 /**
dan_ackme 16:7f1d6d359787 2 * ACKme WiConnect Host Library is licensed under the BSD licence:
dan_ackme 16:7f1d6d359787 3 *
dan_ackme 16:7f1d6d359787 4 * Copyright (c)2014 ACKme Networks.
dan_ackme 16:7f1d6d359787 5 * All rights reserved.
dan_ackme 16:7f1d6d359787 6 *
dan_ackme 16:7f1d6d359787 7 * Redistribution and use in source and binary forms, with or without modification,
dan_ackme 16:7f1d6d359787 8 * are permitted provided that the following conditions are met:
dan_ackme 16:7f1d6d359787 9 *
dan_ackme 16:7f1d6d359787 10 * 1. Redistributions of source code must retain the above copyright notice,
dan_ackme 16:7f1d6d359787 11 * this list of conditions and the following disclaimer.
dan_ackme 16:7f1d6d359787 12 * 2. Redistributions in binary form must reproduce the above copyright notice,
dan_ackme 16:7f1d6d359787 13 * this list of conditions and the following disclaimer in the documentation
dan_ackme 16:7f1d6d359787 14 * and/or other materials provided with the distribution.
dan_ackme 16:7f1d6d359787 15 * 3. The name of the author may not be used to endorse or promote products
dan_ackme 16:7f1d6d359787 16 * derived from this software without specific prior written permission.
dan_ackme 16:7f1d6d359787 17 *
dan_ackme 16:7f1d6d359787 18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS AND ANY EXPRESS OR IMPLIED
dan_ackme 16:7f1d6d359787 19 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
dan_ackme 16:7f1d6d359787 20 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
dan_ackme 16:7f1d6d359787 21 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
dan_ackme 16:7f1d6d359787 22 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
dan_ackme 16:7f1d6d359787 23 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
dan_ackme 16:7f1d6d359787 24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
dan_ackme 16:7f1d6d359787 25 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
dan_ackme 16:7f1d6d359787 26 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
dan_ackme 16:7f1d6d359787 27 * OF SUCH DAMAGE.
dan_ackme 0:ea85c4bb5e1f 28 */
dan_ackme 0:ea85c4bb5e1f 29
dan_ackme 0:ea85c4bb5e1f 30 #include "Wiconnect.h"
dan_ackme 0:ea85c4bb5e1f 31 #include "internal/common.h"
dan_ackme 0:ea85c4bb5e1f 32
dan_ackme 0:ea85c4bb5e1f 33 #define CHECK_OPENED_FOR_READING() if(!readEnabled) return WICONNECT_NOT_OPENED_FOR_READING
dan_ackme 0:ea85c4bb5e1f 34
dan_ackme 0:ea85c4bb5e1f 35
dan_ackme 0:ea85c4bb5e1f 36
dan_ackme 0:ea85c4bb5e1f 37
dan_ackme 0:ea85c4bb5e1f 38 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 39 File::File(int rxBufferLen, void *rxBuffer_)
dan_ackme 0:ea85c4bb5e1f 40 {
dan_ackme 0:ea85c4bb5e1f 41 wiconnect = Wiconnect::getInstance();
dan_ackme 0:ea85c4bb5e1f 42
dan_ackme 0:ea85c4bb5e1f 43 memset(&rxBuffer, 0, sizeof(Buffer));
dan_ackme 0:ea85c4bb5e1f 44
dan_ackme 0:ea85c4bb5e1f 45 rxBuffer.size = !wiconnect->nonBlocking ? rxBufferLen : 0;
dan_ackme 0:ea85c4bb5e1f 46 rxBuffer.buffer = (uint8_t*)rxBuffer_;
dan_ackme 0:ea85c4bb5e1f 47
dan_ackme 0:ea85c4bb5e1f 48 if(rxBuffer.size > 0)
dan_ackme 0:ea85c4bb5e1f 49 {
dan_ackme 0:ea85c4bb5e1f 50 if(rxBuffer_ == NULL)
dan_ackme 0:ea85c4bb5e1f 51 {
dan_ackme 0:ea85c4bb5e1f 52 #ifdef WICONNECT_ENABLE_MALLOC
dan_ackme 6:8a87a59d0d21 53 wiconnect_assert(wiconnect, "File(), malloc not defined", wiconnect->_malloc != NULL);
dan_ackme 0:ea85c4bb5e1f 54 rxBuffer.buffer = (uint8_t*)wiconnect->_malloc(rxBufferLen);
dan_ackme 6:8a87a59d0d21 55 wiconnect_assert(wiconnect, "File(), failed to malloc buffer", rxBuffer.buffer != NULL);
dan_ackme 0:ea85c4bb5e1f 56 rxBuffer.allocated = true;
dan_ackme 0:ea85c4bb5e1f 57 #else
dan_ackme 6:8a87a59d0d21 58 wiconnect_assert(0);
dan_ackme 0:ea85c4bb5e1f 59 #endif
dan_ackme 0:ea85c4bb5e1f 60 }
dan_ackme 0:ea85c4bb5e1f 61 }
dan_ackme 0:ea85c4bb5e1f 62
dan_ackme 0:ea85c4bb5e1f 63 previous = next = NULL;
dan_ackme 0:ea85c4bb5e1f 64 handle = 0xff;
dan_ackme 0:ea85c4bb5e1f 65 readEnabled = false;
dan_ackme 0:ea85c4bb5e1f 66 *name = 0;
dan_ackme 0:ea85c4bb5e1f 67 size = 0;
dan_ackme 0:ea85c4bb5e1f 68 type = FILE_TYPE_UNKNOWN;
dan_ackme 0:ea85c4bb5e1f 69 version = 0;
dan_ackme 0:ea85c4bb5e1f 70 flags = FILE_FLAG_NONE;
dan_ackme 0:ea85c4bb5e1f 71 }
dan_ackme 0:ea85c4bb5e1f 72
dan_ackme 0:ea85c4bb5e1f 73 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 74 File::~File()
dan_ackme 0:ea85c4bb5e1f 75 {
dan_ackme 0:ea85c4bb5e1f 76 while(close() == WICONNECT_PROCESSING)
dan_ackme 0:ea85c4bb5e1f 77 {
dan_ackme 0:ea85c4bb5e1f 78 }
dan_ackme 0:ea85c4bb5e1f 79
dan_ackme 0:ea85c4bb5e1f 80 #ifdef WICONNECT_ENABLE_MALLOC
dan_ackme 0:ea85c4bb5e1f 81 if(rxBuffer.allocated && rxBuffer.size > 0)
dan_ackme 0:ea85c4bb5e1f 82 {
dan_ackme 6:8a87a59d0d21 83 wiconnect_assert(wiconnect, "~File(), free not defined", wiconnect->_free != NULL);
dan_ackme 0:ea85c4bb5e1f 84 wiconnect->_free(rxBuffer.buffer);
dan_ackme 0:ea85c4bb5e1f 85 }
dan_ackme 0:ea85c4bb5e1f 86 #endif
dan_ackme 0:ea85c4bb5e1f 87 }
dan_ackme 0:ea85c4bb5e1f 88
dan_ackme 0:ea85c4bb5e1f 89 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 90 WiconnectResult File::openForRead(uint8_t handle_, const char *filename)
dan_ackme 0:ea85c4bb5e1f 91 {
dan_ackme 0:ea85c4bb5e1f 92 handle = handle_;
dan_ackme 0:ea85c4bb5e1f 93 readEnabled = true;
dan_ackme 0:ea85c4bb5e1f 94 strcpy(name, filename);
dan_ackme 0:ea85c4bb5e1f 95
dan_ackme 0:ea85c4bb5e1f 96 return WICONNECT_SUCCESS;
dan_ackme 0:ea85c4bb5e1f 97 }
dan_ackme 0:ea85c4bb5e1f 98
dan_ackme 0:ea85c4bb5e1f 99 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 100 WiconnectResult File::initWithListing(const char *typeStr, const char *flagsStr, const char* sizeStr, const char *versionStr, const char *nameStr)
dan_ackme 0:ea85c4bb5e1f 101 {
dan_ackme 0:ea85c4bb5e1f 102 uint32_t tmp;
dan_ackme 0:ea85c4bb5e1f 103
dan_ackme 0:ea85c4bb5e1f 104 if(!StringUtil::strHexToUint32(&typeStr[2], &tmp))
dan_ackme 0:ea85c4bb5e1f 105 {
dan_ackme 0:ea85c4bb5e1f 106 return WICONNECT_RESPONSE_PARSE_ERROR;
dan_ackme 0:ea85c4bb5e1f 107 }
dan_ackme 0:ea85c4bb5e1f 108 type = (FileType)tmp;
dan_ackme 0:ea85c4bb5e1f 109
dan_ackme 0:ea85c4bb5e1f 110 if(!StringUtil::strHexToUint32(flagsStr, &tmp))
dan_ackme 0:ea85c4bb5e1f 111 {
dan_ackme 0:ea85c4bb5e1f 112 return WICONNECT_RESPONSE_PARSE_ERROR;
dan_ackme 0:ea85c4bb5e1f 113 }
dan_ackme 0:ea85c4bb5e1f 114 flags = (FileFlags)tmp;
dan_ackme 0:ea85c4bb5e1f 115
dan_ackme 0:ea85c4bb5e1f 116 if(!StringUtil::strToUint32(sizeStr, &tmp))
dan_ackme 0:ea85c4bb5e1f 117 {
dan_ackme 0:ea85c4bb5e1f 118 return WICONNECT_RESPONSE_PARSE_ERROR;
dan_ackme 0:ea85c4bb5e1f 119 }
dan_ackme 0:ea85c4bb5e1f 120 size = (uint32_t)tmp;
dan_ackme 0:ea85c4bb5e1f 121
dan_ackme 0:ea85c4bb5e1f 122 if(!FileInterface::fileVersionStrToInt(versionStr, &version))
dan_ackme 0:ea85c4bb5e1f 123 {
dan_ackme 0:ea85c4bb5e1f 124 return WICONNECT_RESPONSE_PARSE_ERROR;
dan_ackme 0:ea85c4bb5e1f 125 }
dan_ackme 0:ea85c4bb5e1f 126
dan_ackme 0:ea85c4bb5e1f 127 strcpy(name, nameStr);
dan_ackme 0:ea85c4bb5e1f 128
dan_ackme 0:ea85c4bb5e1f 129 return WICONNECT_SUCCESS;
dan_ackme 0:ea85c4bb5e1f 130 }
dan_ackme 0:ea85c4bb5e1f 131
dan_ackme 0:ea85c4bb5e1f 132 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 133 void* File::operator new(size_t size)
dan_ackme 0:ea85c4bb5e1f 134 {
dan_ackme 6:8a87a59d0d21 135 Wiconnect *wiconnect = Wiconnect::getInstance();
dan_ackme 6:8a87a59d0d21 136 wiconnect_assert(wiconnect, "File:new, malloc not defined", wiconnect->_malloc != NULL);
dan_ackme 0:ea85c4bb5e1f 137 return Wiconnect::getInstance()->_malloc(size);
dan_ackme 0:ea85c4bb5e1f 138 }
dan_ackme 0:ea85c4bb5e1f 139
dan_ackme 0:ea85c4bb5e1f 140 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 141 void File::operator delete(void* ptr)
dan_ackme 0:ea85c4bb5e1f 142 {
dan_ackme 6:8a87a59d0d21 143 Wiconnect *wiconnect = Wiconnect::getInstance();
dan_ackme 6:8a87a59d0d21 144 wiconnect_assert(wiconnect, "File:delete, free not defined", wiconnect->_free != NULL);
dan_ackme 0:ea85c4bb5e1f 145 Wiconnect::getInstance()->_free(ptr);
dan_ackme 0:ea85c4bb5e1f 146 }
dan_ackme 0:ea85c4bb5e1f 147
dan_ackme 0:ea85c4bb5e1f 148
dan_ackme 0:ea85c4bb5e1f 149 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 150 WiconnectResult File::close()
dan_ackme 0:ea85c4bb5e1f 151 {
dan_ackme 0:ea85c4bb5e1f 152 WiconnectResult result;
dan_ackme 0:ea85c4bb5e1f 153 CHECK_OPENED_FOR_READING();
dan_ackme 0:ea85c4bb5e1f 154 CHECK_OTHER_COMMAND_EXECUTING();
dan_ackme 0:ea85c4bb5e1f 155
dan_ackme 0:ea85c4bb5e1f 156 if(WICONNECT_SUCCEEDED(result, wiconnect->sendCommand("close %d", handle)))
dan_ackme 0:ea85c4bb5e1f 157 {
dan_ackme 0:ea85c4bb5e1f 158 readEnabled = false;
dan_ackme 0:ea85c4bb5e1f 159 }
dan_ackme 0:ea85c4bb5e1f 160
dan_ackme 0:ea85c4bb5e1f 161 CHECK_CLEANUP_COMMAND();
dan_ackme 0:ea85c4bb5e1f 162
dan_ackme 0:ea85c4bb5e1f 163 return result;
dan_ackme 0:ea85c4bb5e1f 164 }
dan_ackme 0:ea85c4bb5e1f 165
dan_ackme 0:ea85c4bb5e1f 166 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 167 const char* File::getName() const
dan_ackme 0:ea85c4bb5e1f 168 {
dan_ackme 0:ea85c4bb5e1f 169 return name;
dan_ackme 0:ea85c4bb5e1f 170 }
dan_ackme 0:ea85c4bb5e1f 171
dan_ackme 0:ea85c4bb5e1f 172 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 173 uint32_t File::getSize() const
dan_ackme 0:ea85c4bb5e1f 174 {
dan_ackme 0:ea85c4bb5e1f 175 return size;
dan_ackme 0:ea85c4bb5e1f 176 }
dan_ackme 0:ea85c4bb5e1f 177
dan_ackme 0:ea85c4bb5e1f 178 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 179 FileType File::getType() const
dan_ackme 0:ea85c4bb5e1f 180 {
dan_ackme 0:ea85c4bb5e1f 181 return type;
dan_ackme 0:ea85c4bb5e1f 182 }
dan_ackme 0:ea85c4bb5e1f 183
dan_ackme 0:ea85c4bb5e1f 184 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 185 FileFlags File::getFlags() const
dan_ackme 0:ea85c4bb5e1f 186 {
dan_ackme 0:ea85c4bb5e1f 187 return flags;
dan_ackme 0:ea85c4bb5e1f 188 }
dan_ackme 0:ea85c4bb5e1f 189
dan_ackme 0:ea85c4bb5e1f 190 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 191 uint32_t File::getVersion() const
dan_ackme 0:ea85c4bb5e1f 192 {
dan_ackme 0:ea85c4bb5e1f 193 return version;
dan_ackme 0:ea85c4bb5e1f 194 }
dan_ackme 0:ea85c4bb5e1f 195
dan_ackme 0:ea85c4bb5e1f 196 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 197 const char* File::getVersionStr(char *buffer) const
dan_ackme 0:ea85c4bb5e1f 198 {
dan_ackme 0:ea85c4bb5e1f 199 return FileInterface::fileVersionIntToStr(version, true, buffer);
dan_ackme 0:ea85c4bb5e1f 200 }
dan_ackme 0:ea85c4bb5e1f 201
dan_ackme 0:ea85c4bb5e1f 202 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 203 const File* File::getNext() const
dan_ackme 0:ea85c4bb5e1f 204 {
dan_ackme 0:ea85c4bb5e1f 205 return next;
dan_ackme 0:ea85c4bb5e1f 206 }
dan_ackme 0:ea85c4bb5e1f 207
dan_ackme 0:ea85c4bb5e1f 208 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 209 const File* File::getPrevious() const
dan_ackme 0:ea85c4bb5e1f 210 {
dan_ackme 0:ea85c4bb5e1f 211 return previous;
dan_ackme 0:ea85c4bb5e1f 212 }
dan_ackme 0:ea85c4bb5e1f 213
dan_ackme 0:ea85c4bb5e1f 214
dan_ackme 0:ea85c4bb5e1f 215 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 216 WiconnectResult File::read(void* buffer, uint16_t maxLength, uint16_t *bytesRead)
dan_ackme 0:ea85c4bb5e1f 217 {
dan_ackme 0:ea85c4bb5e1f 218 WiconnectResult result;
dan_ackme 0:ea85c4bb5e1f 219
dan_ackme 0:ea85c4bb5e1f 220 CHECK_OPENED_FOR_READING();
dan_ackme 0:ea85c4bb5e1f 221 CHECK_OTHER_COMMAND_EXECUTING();
dan_ackme 0:ea85c4bb5e1f 222
dan_ackme 0:ea85c4bb5e1f 223 if(WICONNECT_SUCCEEDED(result, wiconnect->sendCommand((char*)buffer, maxLength, "read %d %d", handle, maxLength-2)))
dan_ackme 0:ea85c4bb5e1f 224 {
dan_ackme 0:ea85c4bb5e1f 225 *bytesRead = wiconnect->getLastCommandResponseLength();
dan_ackme 0:ea85c4bb5e1f 226 }
dan_ackme 0:ea85c4bb5e1f 227
dan_ackme 0:ea85c4bb5e1f 228 CHECK_CLEANUP_COMMAND();
dan_ackme 0:ea85c4bb5e1f 229
dan_ackme 0:ea85c4bb5e1f 230 return result;
dan_ackme 0:ea85c4bb5e1f 231 }
dan_ackme 0:ea85c4bb5e1f 232
dan_ackme 0:ea85c4bb5e1f 233 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 234 WiconnectResult File::read(uint8_t **bufferPtr, uint16_t *bytesReadPtr)
dan_ackme 0:ea85c4bb5e1f 235 {
dan_ackme 0:ea85c4bb5e1f 236 WiconnectResult result = WICONNECT_SUCCESS;
dan_ackme 0:ea85c4bb5e1f 237
dan_ackme 0:ea85c4bb5e1f 238 CHECK_OPENED_FOR_READING();
dan_ackme 0:ea85c4bb5e1f 239
dan_ackme 0:ea85c4bb5e1f 240 if(rxBuffer.size == 0)
dan_ackme 0:ea85c4bb5e1f 241 {
dan_ackme 0:ea85c4bb5e1f 242 return WICONNECT_UNSUPPORTED;
dan_ackme 0:ea85c4bb5e1f 243 }
dan_ackme 0:ea85c4bb5e1f 244 else if(bufferPtr != NULL && bytesReadPtr == NULL)
dan_ackme 0:ea85c4bb5e1f 245 {
dan_ackme 0:ea85c4bb5e1f 246 return WICONNECT_BAD_ARG;
dan_ackme 0:ea85c4bb5e1f 247 }
dan_ackme 0:ea85c4bb5e1f 248 else if(rxBuffer.bytesPending < rxBuffer.size - 2)
dan_ackme 0:ea85c4bb5e1f 249 {
dan_ackme 0:ea85c4bb5e1f 250 const int bytesToRead = rxBuffer.size - rxBuffer.bytesPending - 2;
dan_ackme 0:ea85c4bb5e1f 251 char* ptr = (char*)&rxBuffer.buffer[rxBuffer.bytesPending];
dan_ackme 0:ea85c4bb5e1f 252 if(!WICONNECT_FAILED(result, wiconnect->sendCommand(ptr, bytesToRead+2, "read %d %d", handle, bytesToRead)))
dan_ackme 0:ea85c4bb5e1f 253 {
dan_ackme 0:ea85c4bb5e1f 254 rxBuffer.bytesPending += wiconnect->getLastCommandResponseLength();
dan_ackme 0:ea85c4bb5e1f 255 }
dan_ackme 0:ea85c4bb5e1f 256 }
dan_ackme 0:ea85c4bb5e1f 257
dan_ackme 0:ea85c4bb5e1f 258 if(bufferPtr != NULL)
dan_ackme 0:ea85c4bb5e1f 259 {
dan_ackme 0:ea85c4bb5e1f 260 *bufferPtr = rxBuffer.buffer;
dan_ackme 0:ea85c4bb5e1f 261 *bytesReadPtr = rxBuffer.bytesPending;
dan_ackme 0:ea85c4bb5e1f 262 clearRxBuffer();
dan_ackme 0:ea85c4bb5e1f 263 }
dan_ackme 0:ea85c4bb5e1f 264
dan_ackme 0:ea85c4bb5e1f 265 return result;
dan_ackme 0:ea85c4bb5e1f 266 }
dan_ackme 0:ea85c4bb5e1f 267
dan_ackme 0:ea85c4bb5e1f 268 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 269 WiconnectResult File::getc(uint8_t *c)
dan_ackme 0:ea85c4bb5e1f 270 {
dan_ackme 0:ea85c4bb5e1f 271 WiconnectResult result;
dan_ackme 0:ea85c4bb5e1f 272
dan_ackme 0:ea85c4bb5e1f 273 if(rxBuffer.size == 0)
dan_ackme 0:ea85c4bb5e1f 274 {
dan_ackme 0:ea85c4bb5e1f 275 return WICONNECT_UNSUPPORTED;
dan_ackme 0:ea85c4bb5e1f 276 }
dan_ackme 0:ea85c4bb5e1f 277
dan_ackme 0:ea85c4bb5e1f 278 read_data:
dan_ackme 0:ea85c4bb5e1f 279 if(rxBuffer.bytesPending == 0 &&
dan_ackme 0:ea85c4bb5e1f 280 WICONNECT_FAILED(result, read()))
dan_ackme 0:ea85c4bb5e1f 281 {
dan_ackme 0:ea85c4bb5e1f 282 return result;
dan_ackme 0:ea85c4bb5e1f 283 }
dan_ackme 0:ea85c4bb5e1f 284 else if(rxBuffer.ptr < &rxBuffer.buffer[rxBuffer.bytesPending])
dan_ackme 0:ea85c4bb5e1f 285 {
dan_ackme 0:ea85c4bb5e1f 286 *c = *rxBuffer.ptr;
dan_ackme 0:ea85c4bb5e1f 287 ++rxBuffer.ptr;
dan_ackme 0:ea85c4bb5e1f 288 return WICONNECT_SUCCESS;
dan_ackme 0:ea85c4bb5e1f 289 }
dan_ackme 0:ea85c4bb5e1f 290 else
dan_ackme 0:ea85c4bb5e1f 291 {
dan_ackme 0:ea85c4bb5e1f 292 clearRxBuffer();
dan_ackme 0:ea85c4bb5e1f 293 goto read_data;
dan_ackme 0:ea85c4bb5e1f 294 }
dan_ackme 0:ea85c4bb5e1f 295 }
dan_ackme 0:ea85c4bb5e1f 296
dan_ackme 0:ea85c4bb5e1f 297 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 298 void File::clearRxBuffer()
dan_ackme 0:ea85c4bb5e1f 299 {
dan_ackme 0:ea85c4bb5e1f 300 rxBuffer.bytesPending = 0;
dan_ackme 0:ea85c4bb5e1f 301 rxBuffer.ptr = rxBuffer.buffer;
dan_ackme 0:ea85c4bb5e1f 302 }