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
internal/types/QueuedCommand.cpp
- Committer:
- dan_ackme
- Date:
- 2014-08-11
- Revision:
- 0:ea85c4bb5e1f
- Child:
- 1:6ec9998427ad
File content as of revision 0:ea85c4bb5e1f:
/* * Copyright 2014, ACKme Networks * All Rights Reserved. * * This is UNPUBLISHED PROPRIETARY SOURCE CODE of ACKme Networks; * the contents of this file may not be disclosed to third parties, copied * or duplicated in any form, in whole or in part, without the prior * written permission of ACKme Networks. */ #include <assert.h> #include "Wiconnect.h" /*************************************************************************************************/ QueuedCommand::QueuedCommand(int responseBufferLen_, char *responseBuffer_, int timeoutMs_, const ReaderFunc &reader_, void *user_, const char *cmd_, va_list vaList) { initialize(responseBufferLen_, responseBuffer_, timeoutMs_, reader_, user_, cmd_, vaList); } /*************************************************************************************************/ QueuedCommand::QueuedCommand(int responseBufferLen_, char* responseBuffer_, int timeoutMs_, const char *cmd_, ...) { va_list args; va_start(args, cmd_); initialize(responseBufferLen_, responseBuffer_, timeoutMs_, NULL, NULL, cmd_, args); va_end(args); } /*************************************************************************************************/ QueuedCommand::QueuedCommand(int responseBufferLen_, char *responseBuffer_, const char *cmd_, ...) { va_list args; va_start(args, cmd_); initialize(responseBufferLen_, responseBuffer_, WICONNECT_DEFAULT_TIMEOUT, NULL, NULL, cmd_, args); va_end(args); } /*************************************************************************************************/ QueuedCommand::QueuedCommand(int timeoutMs_, const char *cmd_, ...) { va_list args; va_start(args, cmd_); initialize(0, NULL, timeoutMs_, NULL, NULL, cmd_, args); va_end(args); } /*************************************************************************************************/ QueuedCommand::QueuedCommand(const char *cmd_, ...) { va_list args; va_start(args, cmd_); initialize(0, NULL, WICONNECT_DEFAULT_TIMEOUT, NULL, NULL, cmd_, args); va_end(args); } /*************************************************************************************************/ QueuedCommand::~QueuedCommand() { #ifdef WICONNECT_ENABLE_MALLOC if(allocatedBuffer) { Wiconnect::getInstance()->_free(responseBuffer); } #endif } /*************************************************************************************************/ char *QueuedCommand::getResponseBuffer() { return responseBuffer; } /*************************************************************************************************/ int QueuedCommand::getResponseBufferLen() { return responseBufferLen; } /*************************************************************************************************/ int QueuedCommand::getTimeoutMs() { return timeoutMs; } /*************************************************************************************************/ ReaderFunc QueuedCommand::getReader() { return reader; } /*************************************************************************************************/ void * QueuedCommand::getReaderUserData() { return user; } /*************************************************************************************************/ char* QueuedCommand::getCommand() { return command; } /*************************************************************************************************/ Callback QueuedCommand::getCompletedCallback() { return completeCallback; } /*************************************************************************************************/ void QueuedCommand::setCompletedCallback(const Callback &cb) { completeCallback = cb; } /*************************************************************************************************/ QueuedCommand& QueuedCommand::operator=( const QueuedCommand& other ) { responseBuffer = other.responseBuffer; responseBufferLen = other.responseBufferLen; timeoutMs = other.timeoutMs; reader = other.reader; user = other.user; completeCallback = other.completeCallback; memcpy(command, other.command, sizeof(command)); return *this; } /*************************************************************************************************/ void* QueuedCommand::operator new(size_t size) { assert(Wiconnect::getInstance()->_malloc != NULL); return Wiconnect::getInstance()->_malloc(size); } /*************************************************************************************************/ void QueuedCommand::operator delete(void* ptr) { assert(Wiconnect::getInstance()->_free != NULL); Wiconnect::getInstance()->_free(ptr); } /*************************************************************************************************/ void QueuedCommand::initialize(int responseBufferLen_, char *responseBuffer_, int timeoutMs_, const ReaderFunc &reader_, void *user_, const char *cmd_, va_list vaList) { if(responseBufferLen_ > 0) { #ifdef WICONNECT_ENABLE_MALLOC allocatedBuffer = false; if(responseBuffer_ == NULL) { assert(Wiconnect::getInstance()->_malloc != NULL); responseBuffer = (char*)Wiconnect::getInstance()->_malloc(responseBufferLen_); allocatedBuffer = true; } else #endif { assert(responseBuffer_ != NULL); responseBuffer = responseBuffer_; } } responseBufferLen = responseBufferLen_; timeoutMs = timeoutMs_; reader = reader_; user = user_; userData = NULL; if(cmd_ != NULL) { int len = vsnprintf(command, sizeof(command)-3, cmd_, vaList); command[len++] = '\r'; command[len++] = '\n'; command[len] = 0; } }