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/wiconnect/AsyncCommand.cpp
- Committer:
- dan_ackme
- Date:
- 2014-08-11
- Revision:
- 1:6ec9998427ad
- Parent:
- 0:ea85c4bb5e1f
- Child:
- 5:8d91a87ebba2
File content as of revision 1:6ec9998427ad:
/* * 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 "CommandCommon.h" #ifdef WICONNECT_ASYNC_TIMER_ENABLED /*************************************************************************************************/ WiconnectResult Wiconnect::enqueueCommand(QueuedCommand *command, const Callback &commandCompleteHandler) { if(commandQueue.isFull()) { return WICONNECT_OVERFLOW; } command->setCompletedCallback(commandCompleteHandler); DEBUG_INFO("Queuing command: %s", command->getCommand()); commandQueue.push(command); processNextQueuedCommand(); return WICONNECT_SUCCESS; } /*************************************************************************************************/ void Wiconnect::processNextQueuedCommand() { if(commandQueue.isEmpty()) { return; } else if(commandExecuting) { return; } WiconnectResult result = WICONNECT_SUCCESS; CommandContext *context = (CommandContext*)commandContext; CommandHeader *header = (CommandHeader*)commandHeaderBuffer; commandExecuting = true; currentQueuedCommand = commandQueue.pop(); DEBUG_INFO("Processing next cmd in queue"); strcpy(commandFormatBuffer, currentQueuedCommand->command); RESET_CMD_HEADER(header); memset(context, 0, sizeof(CommandContext)); if(currentQueuedCommand->responseBufferLen > 0) { context->responseBuffer = currentQueuedCommand->responseBuffer; context->responseBufferLen = currentQueuedCommand->responseBufferLen; } else { context->responseBuffer = internalBuffer; context->responseBufferLen = internalBufferSize; } context->responseBufferPtr = context->responseBuffer; context->commandLen = strlen(commandFormatBuffer); context->commandPtr = commandFormatBuffer; context->reader = currentQueuedCommand->reader; context->user = currentQueuedCommand->userData; context->timeoutMs = currentQueuedCommand->timeoutMs; context->callback = currentQueuedCommand->completeCallback; context->nonBlocking = true; DEBUG_CMD_SEND(commandFormatBuffer); commandExecuting = true; timeoutTimer.reset(); commandProcessorTimer.start(this, &Wiconnect::commandProcessingTimerHandler, commandProcessingPeriod); } /*************************************************************************************************/ void Wiconnect::setCommandProcessingPeriod(uint32_t periodMs) { commandProcessingPeriod = periodMs; } /*************************************************************************************************/ void Wiconnect::commandProcessingTimerHandler() { checkCurrentCommand(); } #endif