1a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/*
2a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * fsm.h
3a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
4a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved.
5a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * All rights reserved.
6a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
7a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * Redistribution and use in source and binary forms, with or without
8a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * modification, are permitted provided that the following conditions
9a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * are met:
10a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
11a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *  * Redistributions of source code must retain the above copyright
12a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    notice, this list of conditions and the following disclaimer.
13a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *  * Redistributions in binary form must reproduce the above copyright
14a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    notice, this list of conditions and the following disclaimer in
15a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    the documentation and/or other materials provided with the
16a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    distribution.
17a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *  * Neither the name Texas Instruments nor the names of its
18a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    contributors may be used to endorse or promote products derived
19a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    from this software without specific prior written permission.
20a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
21a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt */
33a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
34a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/** \file fsm.h
35a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *  \brief finite state machine header file
36a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
37a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *  \see fsm.c
38a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt */
39a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
40a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
41a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/***************************************************************************/
42a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/*																		   */
43a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/*		MODULE:	fsm.h													   */
44a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/*    PURPOSE:	Finite State Machine API								   */
45a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/*																	 	   */
46a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/***************************************************************************/
47a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
48a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#ifndef __FSM_H__
49a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#define __FSM_H__
50a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
51a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "tidef.h"
52a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "commonTypes.h"
53a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
54a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/* Constants */
55a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#define	MAX_DESC_STRING_LEN		64
56a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
57a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
58a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/* Enumerations */
59a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
60a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/* Typedefs */
61a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
62a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/** state transition function */
63a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidttypedef	TI_STATUS (*fsm_eventActivation_t)(TI_UINT8 *currState, TI_UINT8 event, void* data);
64a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
65a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/** action function type definition */
66a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidttypedef TI_STATUS (*fsm_Action_t)(void* pData);
67a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
68a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/* Structures */
69a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
70a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/* State\Event cell */
71a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidttypedef  struct
72a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
73a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_UINT8			nextState;		/**< next state in transition */
74a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	fsm_Action_t	actionFunc;		/**< action function */
75a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt} fsm_actionCell_t;
76a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
77a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/** matrix type */
78a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidttypedef	fsm_actionCell_t*		fsm_Matrix_t;
79a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
80a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/** general FSM structure */
81a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidttypedef struct
82a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
83a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	fsm_Matrix_t			stateEventMatrix;		/**< State\Event matrix */
84a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_UINT8					MaxNoOfStates;			/**< Max Number of states in the matrix */
85a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_UINT8					MaxNoOfEvents;			/**< Max Number of events in the matrix */
86a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_UINT8					ActiveNoOfStates;		/**< Active Number of states in the matrix */
87a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_UINT8					ActiveNoOfEvents;		/**< Active Number of events in the matrix */
88a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	fsm_eventActivation_t	transitionFunc;			/**< State transition function */
89a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt} fsm_stateMachine_t;
90a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
91a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/* External data definitions */
92a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
93a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/* External functions definitions */
94a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
95a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/* Function prototypes */
96a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
97a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS fsm_Create(TI_HANDLE				hOs,
98a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				fsm_stateMachine_t		**pFsm,
99a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				TI_UINT8					MaxNoOfStates,
100a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				TI_UINT8					MaxNoOfEvents);
101a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
102a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS fsm_Unload(TI_HANDLE				hOs,
103a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				fsm_stateMachine_t		*pFsm);
104a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
105a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS fsm_Config(fsm_stateMachine_t	*pFsm,
106a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				  fsm_Matrix_t			pMatrix,
107a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				  TI_UINT8					ActiveNoOfStates,
108a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				  TI_UINT8					ActiveNoOfEvents,
109a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				  fsm_eventActivation_t	transFunc,
110a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				  TI_HANDLE				hOs);
111a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
112a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS fsm_Event(fsm_stateMachine_t		*pFsm,
113a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				 TI_UINT8					*currentState,
114a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				 TI_UINT8					event,
115a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				 void					*pData);
116a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
117a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS fsm_GetNextState(fsm_stateMachine_t		*pFsm,
118a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt						TI_UINT8					currentState,
119a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt						TI_UINT8					event,
120a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt						TI_UINT8					*nextState);
121a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
122a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
123a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS action_nop(void *pData);
124a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
125a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
126a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#endif /* __FSM_H__ */
127