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