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