diff options
Diffstat (limited to 'nci/jni/DataQueue.h')
-rw-r--r-- | nci/jni/DataQueue.h | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/nci/jni/DataQueue.h b/nci/jni/DataQueue.h new file mode 100644 index 0000000..bfd415c --- /dev/null +++ b/nci/jni/DataQueue.h @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Store data bytes in a variable-size queue. + */ + +#pragma once +#include "NfcJniUtil.h" +#include "gki.h" +#include "Mutex.h" +#include <list> + + +class DataQueue +{ +public: + /******************************************************************************* + ** + ** Function: DataQueue + ** + ** Description: Initialize member variables. + ** + ** Returns: None. + ** + *******************************************************************************/ + DataQueue (); + + + /******************************************************************************* + ** + ** Function: ~DataQueue + ** + ** Description: Release all resources. + ** + ** Returns: None. + ** + *******************************************************************************/ + ~DataQueue (); + + + /******************************************************************************* + ** + ** Function: enqueue + ** + ** Description: Append data to the queue. + ** data: array of bytes + ** dataLen: length of the data. + ** + ** Returns: True if ok. + ** + *******************************************************************************/ + bool enqueue (UINT8* data, UINT16 dataLen); + + + /******************************************************************************* + ** + ** Function: dequeue + ** + ** Description: Retrieve and remove data from the front of the queue. + ** buffer: array to store the data. + ** bufferMaxLen: maximum size of the buffer. + ** actualLen: actual length of the data. + ** + ** Returns: True if ok. + ** + *******************************************************************************/ + bool dequeue (UINT8* buffer, UINT16 bufferMaxLen, UINT16& actualLen); + + + /******************************************************************************* + ** + ** Function: isEmpty + ** + ** Description: Whether the queue is empty. + ** + ** Returns: True if empty. + ** + *******************************************************************************/ + bool isEmpty(); + +private: + struct tHeader + { + UINT16 mDataLen; //number of octets of data + UINT16 mOffset; //offset of the first octet of data + }; + typedef std::list<tHeader*> Queue; + + Queue mQueue; + Mutex mMutex; +}; + |