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:
Mon Aug 11 13:55:07 2014 -0700
Revision:
6:8a87a59d0d21
Parent:
1:6ec9998427ad
Child:
8:1fad4ca6c6a4
added support for assertion handling

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dan_ackme 0:ea85c4bb5e1f 1 /*
dan_ackme 0:ea85c4bb5e1f 2 * Copyright 2014, ACKme Networks
dan_ackme 0:ea85c4bb5e1f 3 * All Rights Reserved.
dan_ackme 0:ea85c4bb5e1f 4 *
dan_ackme 0:ea85c4bb5e1f 5 * This is UNPUBLISHED PROPRIETARY SOURCE CODE of ACKme Networks;
dan_ackme 0:ea85c4bb5e1f 6 * the contents of this file may not be disclosed to third parties, copied
dan_ackme 0:ea85c4bb5e1f 7 * or duplicated in any form, in whole or in part, without the prior
dan_ackme 0:ea85c4bb5e1f 8 * written permission of ACKme Networks.
dan_ackme 0:ea85c4bb5e1f 9 */
dan_ackme 0:ea85c4bb5e1f 10
dan_ackme 0:ea85c4bb5e1f 11
dan_ackme 0:ea85c4bb5e1f 12 #include "Wiconnect.h"
dan_ackme 6:8a87a59d0d21 13 #include "internal/common.h"
dan_ackme 0:ea85c4bb5e1f 14
dan_ackme 0:ea85c4bb5e1f 15 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 16 QueuedCommand::QueuedCommand(int responseBufferLen_, char *responseBuffer_, int timeoutMs_, const ReaderFunc &reader_, void *user_, const char *cmd_, va_list vaList)
dan_ackme 0:ea85c4bb5e1f 17 {
dan_ackme 0:ea85c4bb5e1f 18 initialize(responseBufferLen_, responseBuffer_, timeoutMs_, reader_, user_, cmd_, vaList);
dan_ackme 0:ea85c4bb5e1f 19 }
dan_ackme 0:ea85c4bb5e1f 20
dan_ackme 0:ea85c4bb5e1f 21 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 22 QueuedCommand::QueuedCommand(int responseBufferLen_, char* responseBuffer_, int timeoutMs_, const char *cmd_, ...)
dan_ackme 0:ea85c4bb5e1f 23 {
dan_ackme 0:ea85c4bb5e1f 24 va_list args;
dan_ackme 0:ea85c4bb5e1f 25 va_start(args, cmd_);
dan_ackme 0:ea85c4bb5e1f 26 initialize(responseBufferLen_, responseBuffer_, timeoutMs_, NULL, NULL, cmd_, args);
dan_ackme 0:ea85c4bb5e1f 27 va_end(args);
dan_ackme 0:ea85c4bb5e1f 28 }
dan_ackme 0:ea85c4bb5e1f 29
dan_ackme 0:ea85c4bb5e1f 30 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 31 QueuedCommand::QueuedCommand(int responseBufferLen_, char *responseBuffer_, const char *cmd_, ...)
dan_ackme 0:ea85c4bb5e1f 32 {
dan_ackme 0:ea85c4bb5e1f 33 va_list args;
dan_ackme 0:ea85c4bb5e1f 34 va_start(args, cmd_);
dan_ackme 0:ea85c4bb5e1f 35 initialize(responseBufferLen_, responseBuffer_, WICONNECT_DEFAULT_TIMEOUT, NULL, NULL, cmd_, args);
dan_ackme 0:ea85c4bb5e1f 36 va_end(args);
dan_ackme 0:ea85c4bb5e1f 37 }
dan_ackme 0:ea85c4bb5e1f 38
dan_ackme 0:ea85c4bb5e1f 39 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 40 QueuedCommand::QueuedCommand(int timeoutMs_, const char *cmd_, ...)
dan_ackme 0:ea85c4bb5e1f 41 {
dan_ackme 0:ea85c4bb5e1f 42 va_list args;
dan_ackme 0:ea85c4bb5e1f 43 va_start(args, cmd_);
dan_ackme 0:ea85c4bb5e1f 44 initialize(0, NULL, timeoutMs_, NULL, NULL, cmd_, args);
dan_ackme 0:ea85c4bb5e1f 45 va_end(args);
dan_ackme 0:ea85c4bb5e1f 46 }
dan_ackme 0:ea85c4bb5e1f 47
dan_ackme 0:ea85c4bb5e1f 48 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 49 QueuedCommand::QueuedCommand(const char *cmd_, ...)
dan_ackme 0:ea85c4bb5e1f 50 {
dan_ackme 0:ea85c4bb5e1f 51 va_list args;
dan_ackme 0:ea85c4bb5e1f 52 va_start(args, cmd_);
dan_ackme 0:ea85c4bb5e1f 53 initialize(0, NULL, WICONNECT_DEFAULT_TIMEOUT, NULL, NULL, cmd_, args);
dan_ackme 0:ea85c4bb5e1f 54 va_end(args);
dan_ackme 0:ea85c4bb5e1f 55 }
dan_ackme 0:ea85c4bb5e1f 56
dan_ackme 0:ea85c4bb5e1f 57 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 58 QueuedCommand::~QueuedCommand()
dan_ackme 0:ea85c4bb5e1f 59 {
dan_ackme 0:ea85c4bb5e1f 60 #ifdef WICONNECT_ENABLE_MALLOC
dan_ackme 0:ea85c4bb5e1f 61 if(allocatedBuffer)
dan_ackme 0:ea85c4bb5e1f 62 {
dan_ackme 0:ea85c4bb5e1f 63 Wiconnect::getInstance()->_free(responseBuffer);
dan_ackme 0:ea85c4bb5e1f 64 }
dan_ackme 0:ea85c4bb5e1f 65 #endif
dan_ackme 0:ea85c4bb5e1f 66 }
dan_ackme 0:ea85c4bb5e1f 67
dan_ackme 0:ea85c4bb5e1f 68 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 69 char *QueuedCommand::getResponseBuffer()
dan_ackme 0:ea85c4bb5e1f 70 {
dan_ackme 0:ea85c4bb5e1f 71 return responseBuffer;
dan_ackme 0:ea85c4bb5e1f 72 }
dan_ackme 0:ea85c4bb5e1f 73 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 74 int QueuedCommand::getResponseBufferLen()
dan_ackme 0:ea85c4bb5e1f 75 {
dan_ackme 0:ea85c4bb5e1f 76 return responseBufferLen;
dan_ackme 0:ea85c4bb5e1f 77 }
dan_ackme 0:ea85c4bb5e1f 78 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 79 int QueuedCommand::getTimeoutMs()
dan_ackme 0:ea85c4bb5e1f 80 {
dan_ackme 0:ea85c4bb5e1f 81 return timeoutMs;
dan_ackme 0:ea85c4bb5e1f 82 }
dan_ackme 0:ea85c4bb5e1f 83 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 84 ReaderFunc QueuedCommand::getReader()
dan_ackme 0:ea85c4bb5e1f 85 {
dan_ackme 0:ea85c4bb5e1f 86 return reader;
dan_ackme 0:ea85c4bb5e1f 87 }
dan_ackme 0:ea85c4bb5e1f 88 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 89 void * QueuedCommand::getReaderUserData()
dan_ackme 0:ea85c4bb5e1f 90 {
dan_ackme 0:ea85c4bb5e1f 91 return user;
dan_ackme 0:ea85c4bb5e1f 92 }
dan_ackme 0:ea85c4bb5e1f 93 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 94 char* QueuedCommand::getCommand()
dan_ackme 0:ea85c4bb5e1f 95 {
dan_ackme 0:ea85c4bb5e1f 96 return command;
dan_ackme 0:ea85c4bb5e1f 97 }
dan_ackme 0:ea85c4bb5e1f 98 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 99 Callback QueuedCommand::getCompletedCallback()
dan_ackme 0:ea85c4bb5e1f 100 {
dan_ackme 0:ea85c4bb5e1f 101 return completeCallback;
dan_ackme 0:ea85c4bb5e1f 102 }
dan_ackme 0:ea85c4bb5e1f 103 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 104 void QueuedCommand::setCompletedCallback(const Callback &cb)
dan_ackme 0:ea85c4bb5e1f 105 {
dan_ackme 0:ea85c4bb5e1f 106 completeCallback = cb;
dan_ackme 0:ea85c4bb5e1f 107 }
dan_ackme 0:ea85c4bb5e1f 108
dan_ackme 0:ea85c4bb5e1f 109 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 110 QueuedCommand& QueuedCommand::operator=( const QueuedCommand& other )
dan_ackme 0:ea85c4bb5e1f 111 {
dan_ackme 0:ea85c4bb5e1f 112 responseBuffer = other.responseBuffer;
dan_ackme 0:ea85c4bb5e1f 113 responseBufferLen = other.responseBufferLen;
dan_ackme 0:ea85c4bb5e1f 114 timeoutMs = other.timeoutMs;
dan_ackme 0:ea85c4bb5e1f 115 reader = other.reader;
dan_ackme 0:ea85c4bb5e1f 116 user = other.user;
dan_ackme 0:ea85c4bb5e1f 117 completeCallback = other.completeCallback;
dan_ackme 0:ea85c4bb5e1f 118 memcpy(command, other.command, sizeof(command));
dan_ackme 0:ea85c4bb5e1f 119 return *this;
dan_ackme 0:ea85c4bb5e1f 120 }
dan_ackme 0:ea85c4bb5e1f 121
dan_ackme 0:ea85c4bb5e1f 122 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 123 void* QueuedCommand::operator new(size_t size)
dan_ackme 0:ea85c4bb5e1f 124 {
dan_ackme 6:8a87a59d0d21 125 Wiconnect *wiconnect = Wiconnect::getInstance();
dan_ackme 6:8a87a59d0d21 126 wiconnect_assert(wiconnect, "QueuedCommand:new malloc not defined", wiconnect->_malloc != NULL);
dan_ackme 0:ea85c4bb5e1f 127 return Wiconnect::getInstance()->_malloc(size);
dan_ackme 0:ea85c4bb5e1f 128 }
dan_ackme 0:ea85c4bb5e1f 129
dan_ackme 0:ea85c4bb5e1f 130 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 131 void QueuedCommand::operator delete(void* ptr)
dan_ackme 0:ea85c4bb5e1f 132 {
dan_ackme 6:8a87a59d0d21 133 Wiconnect *wiconnect = Wiconnect::getInstance();
dan_ackme 6:8a87a59d0d21 134 wiconnect_assert(wiconnect, "QueuedCommand:delete free not defined", wiconnect->_free != NULL);
dan_ackme 0:ea85c4bb5e1f 135 Wiconnect::getInstance()->_free(ptr);
dan_ackme 0:ea85c4bb5e1f 136 }
dan_ackme 0:ea85c4bb5e1f 137
dan_ackme 0:ea85c4bb5e1f 138 /*************************************************************************************************/
dan_ackme 0:ea85c4bb5e1f 139 void QueuedCommand::initialize(int responseBufferLen_, char *responseBuffer_, int timeoutMs_, const ReaderFunc &reader_, void *user_, const char *cmd_, va_list vaList)
dan_ackme 0:ea85c4bb5e1f 140 {
dan_ackme 0:ea85c4bb5e1f 141 if(responseBufferLen_ > 0)
dan_ackme 0:ea85c4bb5e1f 142 {
dan_ackme 0:ea85c4bb5e1f 143 #ifdef WICONNECT_ENABLE_MALLOC
dan_ackme 6:8a87a59d0d21 144 Wiconnect *wiconnect = Wiconnect::getInstance();
dan_ackme 0:ea85c4bb5e1f 145 allocatedBuffer = false;
dan_ackme 0:ea85c4bb5e1f 146 if(responseBuffer_ == NULL)
dan_ackme 0:ea85c4bb5e1f 147 {
dan_ackme 6:8a87a59d0d21 148 wiconnect_assert(wiconnect, "QueuedCommand() malloc not defined", wiconnect->_malloc != NULL);
dan_ackme 6:8a87a59d0d21 149 responseBuffer = (char*)wiconnect->_malloc(responseBufferLen_);
dan_ackme 6:8a87a59d0d21 150 wiconnect_assert(wiconnect, "QueuedCommand() responseBuffer malloc failed", responseBuffer != NULL);
dan_ackme 0:ea85c4bb5e1f 151 allocatedBuffer = true;
dan_ackme 0:ea85c4bb5e1f 152 }
dan_ackme 0:ea85c4bb5e1f 153 else
dan_ackme 0:ea85c4bb5e1f 154 #endif
dan_ackme 0:ea85c4bb5e1f 155 {
dan_ackme 6:8a87a59d0d21 156 wiconnect_assert(wiconnect, "QueuedCommand(), null buffer", responseBuffer_ != NULL);
dan_ackme 0:ea85c4bb5e1f 157 responseBuffer = responseBuffer_;
dan_ackme 0:ea85c4bb5e1f 158 }
dan_ackme 0:ea85c4bb5e1f 159 }
dan_ackme 0:ea85c4bb5e1f 160 responseBufferLen = responseBufferLen_;
dan_ackme 0:ea85c4bb5e1f 161 timeoutMs = timeoutMs_;
dan_ackme 0:ea85c4bb5e1f 162 reader = reader_;
dan_ackme 0:ea85c4bb5e1f 163 user = user_;
dan_ackme 0:ea85c4bb5e1f 164 userData = NULL;
dan_ackme 0:ea85c4bb5e1f 165
dan_ackme 0:ea85c4bb5e1f 166 if(cmd_ != NULL)
dan_ackme 0:ea85c4bb5e1f 167 {
dan_ackme 0:ea85c4bb5e1f 168 int len = vsnprintf(command, sizeof(command)-3, cmd_, vaList);
dan_ackme 0:ea85c4bb5e1f 169 command[len++] = '\r';
dan_ackme 0:ea85c4bb5e1f 170 command[len++] = '\n';
dan_ackme 0:ea85c4bb5e1f 171 command[len] = 0;
dan_ackme 0:ea85c4bb5e1f 172 }
dan_ackme 0:ea85c4bb5e1f 173 }