| /* |
| * Copyright (C) Texas Instruments - http://www.ti.com/ |
| * |
| * 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. |
| */ |
| |
| |
| |
| #ifndef __MESSAGEQUEUE_H__ |
| #define __MESSAGEQUEUE_H__ |
| |
| #include "DebugUtils.h" |
| #include <stdint.h> |
| |
| ///Uncomment this macro to debug the message queue implementation |
| //#define DEBUG_LOG |
| |
| ///Camera HAL Logging Functions |
| #ifndef DEBUG_LOG |
| |
| #define MSGQ_LOGDA(str) |
| #define MSGQ_LOGDB(str, ...) |
| |
| #undef LOG_FUNCTION_NAME |
| #undef LOG_FUNCTION_NAME_EXIT |
| #define LOG_FUNCTION_NAME |
| #define LOG_FUNCTION_NAME_EXIT |
| |
| #else |
| |
| #define MSGQ_LOGDA DBGUTILS_LOGDA |
| #define MSGQ_LOGDB DBGUTILS_LOGDB |
| |
| #endif |
| |
| #define MSGQ_LOGEA DBGUTILS_LOGEA |
| #define MSGQ_LOGEB DBGUTILS_LOGEB |
| |
| |
| namespace TIUTILS { |
| |
| ///Message type |
| struct Message |
| { |
| unsigned int command; |
| void* arg1; |
| void* arg2; |
| void* arg3; |
| void* arg4; |
| int64_t id; |
| }; |
| |
| ///Message queue implementation |
| class MessageQueue |
| { |
| public: |
| |
| MessageQueue(); |
| ~MessageQueue(); |
| |
| ///Get a message from the queue |
| android::status_t get(Message*); |
| |
| ///Get the input file descriptor of the message queue |
| int getInFd(); |
| |
| ///Set the input file descriptor for the message queue |
| void setInFd(int fd); |
| |
| ///Queue a message |
| android::status_t put(Message*); |
| |
| ///Returns if the message queue is empty or not |
| bool isEmpty(); |
| |
| void clear(); |
| |
| ///Force whether the message queue has message or not |
| void setMsg(bool hasMsg=false); |
| |
| ///Wait for message in maximum three different queues with a timeout |
| static int waitForMsg(MessageQueue *queue1, MessageQueue *queue2=0, MessageQueue *queue3=0, int timeout = 0); |
| |
| bool hasMsg() |
| { |
| return mHasMsg; |
| } |
| |
| private: |
| int fd_read; |
| int fd_write; |
| bool mHasMsg; |
| }; |
| |
| }; |
| |
| #endif |