| /* |
| * 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; |
| }; |
| |