#include "input_manager.h"
InputOpr g_InputOpr_event0;
InputOpr g_InputOpr_event1;
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
static int isInputBufferFull(PInputOpr opr)
{
return (opr->read == ((opr->write + 1) % BUFFER_LEN));
}
static int isInputBufferEmpty(PInputOpr opr)
{
return (opr->read == opr->write);
}
void InitInputBuffer(PInputOpr opr)
{
opr->read = 0;
opr->write = 0;
}
int putInputBuffer(PInputOpr opr,PDataItem data)
{
pthread_mutex_lock(&mutex);
if(!isInputBufferFull(opr))
{
opr->devices[opr->write] = *data;
opr->write = (opr->write + 1) % BUFFER_LEN;
pthread_mutex_unlock(&mutex);
return 0;
}
pthread_mutex_unlock(&mutex);
return -1;
}
int getInputBuffer(PInputOpr opr,PDataItem data)
{
if(!isInputBufferEmpty(opr))
{
*data = opr->devices[opr->read];
opr->read = (opr->read + 1) % BUFFER_LEN;
return 0;
}
return -1;
}
#ifndef __INPUT_MANAGER_H_
#define __INPUT_MANAGER_H_
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <semaphore.h>
#include <pthread.h>
#define BUFFER_LEN 20
typedef struct InputDataItem
{
char data;
}DataItem,*PDataItem;
typedef struct InputOpr{
int read;
int write;
DataItem devices[BUFFER_LEN];
}InputOpr,*PInputOpr;
void InitInputBuffer(PInputOpr opr);
int putInputBuffer(PInputOpr opr,PDataItem data);
int getInputBuffer(PInputOpr opr,PDataItem data);
extern InputOpr g_InputOpr_event0;
extern InputOpr g_InputOpr_event1;
#endif