1*10465441SEvalZero /*
2*10465441SEvalZero * FreeModbus Libary: RT-Thread Port
3*10465441SEvalZero * Copyright (C) 2013 Armink <[email protected]>
4*10465441SEvalZero *
5*10465441SEvalZero * This library is free software; you can redistribute it and/or
6*10465441SEvalZero * modify it under the terms of the GNU Lesser General Public
7*10465441SEvalZero * License as published by the Free Software Foundation; either
8*10465441SEvalZero * version 2.1 of the License, or (at your option) any later version.
9*10465441SEvalZero *
10*10465441SEvalZero * This library is distributed in the hope that it will be useful,
11*10465441SEvalZero * but WITHOUT ANY WARRANTY; without even the implied warranty of
12*10465441SEvalZero * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13*10465441SEvalZero * Lesser General Public License for more details.
14*10465441SEvalZero *
15*10465441SEvalZero * You should have received a copy of the GNU Lesser General Public
16*10465441SEvalZero * License along with this library; if not, write to the Free Software
17*10465441SEvalZero * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18*10465441SEvalZero *
19*10465441SEvalZero * File: $Id: portevent.c,v 1.60 2013/08/13 15:07:05 Armink $
20*10465441SEvalZero */
21*10465441SEvalZero
22*10465441SEvalZero /* ----------------------- Modbus includes ----------------------------------*/
23*10465441SEvalZero #include "mb.h"
24*10465441SEvalZero #include "mbport.h"
25*10465441SEvalZero
26*10465441SEvalZero /* ----------------------- Variables ----------------------------------------*/
27*10465441SEvalZero static struct rt_event xSlaveOsEvent;
28*10465441SEvalZero /* ----------------------- Start implementation -----------------------------*/
29*10465441SEvalZero BOOL
xMBPortEventInit(void)30*10465441SEvalZero xMBPortEventInit( void )
31*10465441SEvalZero {
32*10465441SEvalZero rt_event_init(&xSlaveOsEvent,"slave event",RT_IPC_FLAG_PRIO);
33*10465441SEvalZero return TRUE;
34*10465441SEvalZero }
35*10465441SEvalZero
36*10465441SEvalZero BOOL
xMBPortEventPost(eMBEventType eEvent)37*10465441SEvalZero xMBPortEventPost( eMBEventType eEvent )
38*10465441SEvalZero {
39*10465441SEvalZero rt_event_send(&xSlaveOsEvent, eEvent);
40*10465441SEvalZero return TRUE;
41*10465441SEvalZero }
42*10465441SEvalZero
43*10465441SEvalZero BOOL
xMBPortEventGet(eMBEventType * eEvent)44*10465441SEvalZero xMBPortEventGet( eMBEventType * eEvent )
45*10465441SEvalZero {
46*10465441SEvalZero rt_uint32_t recvedEvent;
47*10465441SEvalZero /* waiting forever OS event */
48*10465441SEvalZero rt_event_recv(&xSlaveOsEvent,
49*10465441SEvalZero EV_READY | EV_FRAME_RECEIVED | EV_EXECUTE | EV_FRAME_SENT,
50*10465441SEvalZero RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, RT_WAITING_FOREVER,
51*10465441SEvalZero &recvedEvent);
52*10465441SEvalZero switch (recvedEvent)
53*10465441SEvalZero {
54*10465441SEvalZero case EV_READY:
55*10465441SEvalZero *eEvent = EV_READY;
56*10465441SEvalZero break;
57*10465441SEvalZero case EV_FRAME_RECEIVED:
58*10465441SEvalZero *eEvent = EV_FRAME_RECEIVED;
59*10465441SEvalZero break;
60*10465441SEvalZero case EV_EXECUTE:
61*10465441SEvalZero *eEvent = EV_EXECUTE;
62*10465441SEvalZero break;
63*10465441SEvalZero case EV_FRAME_SENT:
64*10465441SEvalZero *eEvent = EV_FRAME_SENT;
65*10465441SEvalZero break;
66*10465441SEvalZero }
67*10465441SEvalZero return TRUE;
68*10465441SEvalZero }
69