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