157d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu/* 257d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu * Copyright (C) 2017 The Android Open Source Project 357d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu * 457d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu * Licensed under the Apache License, Version 2.0 (the "License"); 557d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu * you may not use this file except in compliance with the License. 657d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu * You may obtain a copy of the License at 757d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu * 857d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu * http://www.apache.org/licenses/LICENSE-2.0 957d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu * 1057d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu * Unless required by applicable law or agreed to in writing, software 1157d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu * distributed under the License is distributed on an "AS IS" BASIS, 1257d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1357d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu * See the License for the specific language governing permissions and 1457d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu * limitations under the License. 1557d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu */ 1657d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu 1757d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu#ifndef RING_BUFFER_H_ 1857d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu 1957d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu#define RING_BUFFER_H_ 2057d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu 2157d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu#include <media/stagefright/foundation/ABase.h> 2257d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu 2357d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu#include <hardware/sensors.h> 2457d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu#include <utils/threads.h> 2557d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu 2657d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xunamespace android { 2757d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu 2857d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xuclass RingBuffer { 2957d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xupublic: 3057d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu explicit RingBuffer(size_t size); 3157d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu ~RingBuffer(); 3257d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu 3357d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu ssize_t write(const sensors_event_t *ev, size_t size); 3457d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu ssize_t read(sensors_event_t *ev, size_t size); 3557d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu 3657d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xuprivate: 3757d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu Mutex mLock; 3857d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu Condition mNotEmptyCondition; 3957d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu 4057d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu size_t mSize; 4157d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu sensors_event_t *mData; 4257d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu size_t mReadPos, mWritePos; 4357d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu 4457d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu DISALLOW_EVIL_CONSTRUCTORS(RingBuffer); 4557d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu}; 4657d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu 4757d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu} // namespace android 4857d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu 4957d8af7f5ecbdbadb043b05ac5874989ef33fdadPeng Xu#endif // RING_BUFFER_H_ 50