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
CommandQueue.h
00001 /** 00002 * ACKme WiConnect Host Library is licensed under the BSD licence: 00003 * 00004 * Copyright (c)2014 ACKme Networks. 00005 * All rights reserved. 00006 * 00007 * Redistribution and use in source and binary forms, with or without modification, 00008 * are permitted provided that the following conditions are met: 00009 * 00010 * 1. Redistributions of source code must retain the above copyright notice, 00011 * this list of conditions and the following disclaimer. 00012 * 2. Redistributions in binary form must reproduce the above copyright notice, 00013 * this list of conditions and the following disclaimer in the documentation 00014 * and/or other materials provided with the distribution. 00015 * 3. The name of the author may not be used to endorse or promote products 00016 * derived from this software without specific prior written permission. 00017 * 00018 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS AND ANY EXPRESS OR IMPLIED 00019 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 00020 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 00021 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00022 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 00023 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 00024 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 00025 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 00026 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 00027 * OF SUCH DAMAGE. 00028 */ 00029 #pragma once 00030 00031 00032 #include "api/WiconnectTypes.h" 00033 00034 00035 namespace wiconnect 00036 { 00037 00038 /** 00039 * Class for hold queued commands 00040 * 00041 * @note Internal use only 00042 */ 00043 class CommandQueue 00044 { 00045 public: 00046 /*************************************************************************************************/ 00047 CommandQueue() 00048 { 00049 head = tail = queue; 00050 count = 0; 00051 } 00052 00053 /*************************************************************************************************/ 00054 bool isFull() 00055 { 00056 return count == WICONNECT_MAX_QUEUED_COMMANDS; 00057 } 00058 00059 /*************************************************************************************************/ 00060 bool isEmpty() 00061 { 00062 return count == 0; 00063 } 00064 00065 /*************************************************************************************************/ 00066 bool push(QueuedCommand *cmd) 00067 { 00068 if(isFull()) 00069 { 00070 return false; 00071 } 00072 ++count; 00073 *tail = cmd; 00074 if(++tail >= queue + WICONNECT_MAX_QUEUED_COMMANDS) 00075 { 00076 tail = queue; 00077 } 00078 00079 return true; 00080 } 00081 00082 /*************************************************************************************************/ 00083 QueuedCommand* pop() 00084 { 00085 if(isEmpty()) 00086 return NULL; 00087 00088 QueuedCommand* cmd = *head; 00089 --count; 00090 if(++head >= queue + WICONNECT_MAX_QUEUED_COMMANDS) 00091 { 00092 head = queue; 00093 } 00094 return cmd; 00095 } 00096 00097 protected: 00098 QueuedCommand* queue[WICONNECT_MAX_QUEUED_COMMANDS]; 00099 QueuedCommand** head; 00100 QueuedCommand** tail; 00101 int count; 00102 }; 00103 00104 00105 00106 00107 }
Generated on Tue Jul 12 2022 17:35:58 by 1.7.2