portevent.c 1.4 KB
Newer Older
qiuyiuestc's avatar
qiuyiuestc 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
/*
 * File      : portevent.c
 * This file is part of freemodbus in RT-Thread RTOS
 * COPYRIGHT (C) 2006 - 2009, RT-Thread Development Team
 *
 * The license and distribution terms for this file may be
 * found in the file LICENSE in this distribution or at
 * http://www.rt-thread.org/license/LICENSE
 *
 * Change Logs:
 * Date           Author       Notes
 * 2010-04-04     yi.qiu      first version
 */

/* ----------------------- Modbus includes ----------------------------------*/
#include <rtthread.h>

#include "mb.h"
#include "mbport.h"

/* ----------------------- Variables ----------------------------------------*/
static struct rt_event event;

/* ----------------------- Start implementation -----------------------------*/
BOOL xMBPortEventInit( void )
{
	rt_event_init(&event, "modbus", RT_IPC_FLAG_FIFO);

	return TRUE;
}

BOOL xMBPortEventPost( eMBEventType eEvent )
{
	/* only care abot EV_FRAME_RECEIVED event */
	if(eEvent == EV_FRAME_RECEIVED)
qiuyiuestc's avatar
qiuyiuestc 已提交
36
	{	
qiuyiuestc's avatar
qiuyiuestc 已提交
37
		rt_event_send(&event, 1<<eEvent);
qiuyiuestc's avatar
qiuyiuestc 已提交
38
	}
qiuyiuestc's avatar
qiuyiuestc 已提交
39 40 41 42 43 44
	return TRUE;
}

BOOL xMBPortEventGet( eMBEventType * eEvent )
{
	rt_uint32_t e;
qiuyiuestc's avatar
qiuyiuestc 已提交
45
	rt_int32_t time_out = 3000/(1000/RT_TICK_PER_SECOND);
qiuyiuestc's avatar
qiuyiuestc 已提交
46 47 48 49 50 51 52 53
		
	if(rt_event_recv(&event, (1<<EV_FRAME_RECEIVED),
			RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR,
			time_out, &e) == RT_EOK)
	{
		*eEvent = EV_FRAME_RECEIVED;
		return TRUE;
	}		
qiuyiuestc's avatar
qiuyiuestc 已提交
54 55 56 57 58 59
	else 
	{
		rt_kprintf("get event timeout\n");

		return FALSE;
	}	
qiuyiuestc's avatar
qiuyiuestc 已提交
60 61
}