1/*
2 * Copyright (C) 2012 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17/*
18 *  Store data bytes in a variable-size queue.
19 */
20
21#pragma once
22#include "NfcJniUtil.h"
23#include "gki.h"
24#include "Mutex.h"
25#include <list>
26
27
28class DataQueue
29{
30public:
31    /*******************************************************************************
32    **
33    ** Function:        DataQueue
34    **
35    ** Description:     Initialize member variables.
36    **
37    ** Returns:         None.
38    **
39    *******************************************************************************/
40    DataQueue ();
41
42
43    /*******************************************************************************
44    **
45    ** Function:        ~DataQueue
46    **
47    ** Description:      Release all resources.
48    **
49    ** Returns:         None.
50    **
51    *******************************************************************************/
52    ~DataQueue ();
53
54
55    /*******************************************************************************
56    **
57    ** Function:        enqueue
58    **
59    ** Description:     Append data to the queue.
60    **                  data: array of bytes
61    **                  dataLen: length of the data.
62    **
63    ** Returns:         True if ok.
64    **
65    *******************************************************************************/
66    bool enqueue (UINT8* data, UINT16 dataLen);
67
68
69    /*******************************************************************************
70    **
71    ** Function:        dequeue
72    **
73    ** Description:     Retrieve and remove data from the front of the queue.
74    **                  buffer: array to store the data.
75    **                  bufferMaxLen: maximum size of the buffer.
76    **                  actualLen: actual length of the data.
77    **
78    ** Returns:         True if ok.
79    **
80    *******************************************************************************/
81    bool dequeue (UINT8* buffer, UINT16 bufferMaxLen, UINT16& actualLen);
82
83
84    /*******************************************************************************
85    **
86    ** Function:        isEmpty
87    **
88    ** Description:     Whether the queue is empty.
89    **
90    ** Returns:         True if empty.
91    **
92    *******************************************************************************/
93    bool isEmpty();
94
95private:
96    struct tHeader
97    {
98        UINT16 mDataLen; //number of octets of data
99        UINT16 mOffset; //offset of the first octet of data
100    };
101    typedef std::list<tHeader*> Queue;
102
103    Queue mQueue;
104    Mutex mMutex;
105};
106
107