/*
 * Copyright 2010 Trident Microsystems (Far East) Ltd. All rights reserved.
 * All prior copyright rights in this work and the accompanying software
 * products transferred to Trident Microsystems (Far East) Ltd. by written
 * agreement.
 */
/*****************************************************************************/
/* Copyright (c) 2010 NXP B.V.  All rights are reserved.                     */
/*                                                                           */
/* Redistribution and use in source and binary forms, with or without        */
/* modification, are permitted provided that the following conditions        */
/* are met:                                                                  */
/*                                                                           */
/* Redistributions of source code must retain the above copyright            */
/* notice, this list of conditions and the following disclaimer.             */
/*                                                                           */
/* Redistributions in binary form must reproduce the above copyright         */
/* notice, this list of conditions and the following disclaimer in the       */
/* documentation and/or other materials provided with the distribution.      */
/*                                                                           */
/* Neither the name of NXP nor the names of its                              */
/* contributors may be used to endorse or promote products derived from      */
/* this software without specific prior written permission.                  */
/*                                                                           */
/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS       */
/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT         */
/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR     */
/* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT      */
/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,     */
/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT          */
/* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,     */
/* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY     */
/* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT       */
/* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE         */
/* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH          */
/* DAMAGE.                                                                   */
/*                                                                           */
/*****************************************************************************/
/**
    @file   sem.h
    @brief  STB225 Demo Application semaphore functions

@b  Application:  exStbDemo

*//*

Rev Date        Author      Comments
--------------------------------------------------------------------------------
  1 20061006    neill       Ported from STB810
  2 20071023    neill       Fix QAC errors
  3 20080206    batelaan    Update file copyright/license text
  4 20080414    neill       Add events
--------------------------------------------------------------------------------
    For consistency and standardisation retain the Section Separators.
*/

#ifndef __SEM_H
#define __SEM_H

/*******************
* INCLUDE FILES    *
********************/

#include <pthread.h>

/*******************
* EXPORTED MACROS  *
********************/

/*********************
* EXPORTED TYPEDEFS  *
**********************/

typedef struct
{
	pthread_mutex_t	mutex;
	pthread_cond_t	condition;
	int			    semCount;
}sem_t, *psem_t;

/*******************
* EXPORTED DATA    *
********************/

/********************************
* EXPORTED FUNCTIONS PROTOTYPES *
*********************************/

/* Obtains the semaphore. */
extern int sem_get(psem_t semaphore);

/* Releases the semaphore. */
extern int sem_release(psem_t semaphore);

/* Creates a semaphore object. */
extern int sem_create(psem_t* semaphore);

/* Destroys a semaphore object. */
extern int sem_destroy(psem_t semaphore);

/* Wait for an event. */
extern int event_wait(psem_t semaphore);

/* Wait for an event (with a timeout). */
extern int event_waitWithTimeout(psem_t semaphore, unsigned int seconds, unsigned int milli_seconds );

/* Sends an event. */
extern int event_send(psem_t semaphore);

/* Creates a event object. */
extern int event_create(psem_t* semaphore);

/* Destroys a event object. */
extern int event_destroy(psem_t semaphore);

#endif /* __SEM_H      Do not add any thing below this line */
