Sam Grove
/
canopen_slavenode
CANfestival - an open source CANopen framework
framework/include/states.h
- Committer:
- sam_grove
- Date:
- 2011-05-30
- Revision:
- 0:6219434a0cb5
File content as of revision 0:6219434a0cb5:
/* This file is part of CanFestival, a library implementing CanOpen Stack. Copyright (C): Edouard TISSERANT and Francis DUPIN See COPYING file for copyrights details. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /** @defgroup statemachine State Machine * @ingroup userapi */ #ifndef __states_h__ #define __states_h__ #include <applicfg.h> /* The nodes states * ----------------- * values are choosen so, that they can be sent directly * for heartbeat messages... * Must be coded on 7 bits only * */ /* Should not be modified */ enum enum_nodeState { Initialisation = 0x00, Disconnected = 0x01, Connecting = 0x02, Preparing = 0x02, Stopped = 0x04, Operational = 0x05, Pre_operational = 0x7F, Unknown_state = 0x0F }; typedef enum enum_nodeState e_nodeState; typedef struct { INTEGER8 csBoot_Up; INTEGER8 csSDO; INTEGER8 csEmergency; INTEGER8 csSYNC; INTEGER8 csHeartbeat; INTEGER8 csPDO; INTEGER8 csLSS; } s_state_communication; /** * @brief Function that user app can overload * @ingroup statemachine */ typedef void (*initialisation_t)(CO_Data*); typedef void (*preOperational_t)(CO_Data*); typedef void (*operational_t)(CO_Data*); typedef void (*stopped_t)(CO_Data*); /** * @ingroup statemachine * @brief Function that user app can overload * @param *d Pointer on a CAN object data structure */ void _initialisation(CO_Data* d); /** * @ingroup statemachine * @brief Function that user app can overload * @param *d Pointer on a CAN object data structure */ void _preOperational(CO_Data* d); /** * @ingroup statemachine * @brief Function that user app can overload * @param *d Pointer on a CAN object data structure */ void _operational(CO_Data* d); /** * @ingroup statemachine * @brief Function that user app can overload * @param *d Pointer on a CAN object data structure */ void _stopped(CO_Data* d); #include "data.h" /************************* prototypes ******************************/ /** * @brief Called by driver/app when receiving messages * @param *d Pointer on a CAN object data structure * @param *m Pointer on a CAN message structure */ void canDispatch(CO_Data* d, Message *m); /** * @ingroup statemachine * @brief Returns the state of the node * @param *d Pointer on a CAN object data structure * @return The node state */ e_nodeState getState (CO_Data* d); /** * @ingroup statemachine * @brief Change the state of the node * @param *d Pointer on a CAN object data structure * @param newState The state to assign * @return */ UNS8 setState (CO_Data* d, e_nodeState newState); /** * @ingroup statemachine * @brief Returns the nodId * @param *d Pointer on a CAN object data structure * @return */ UNS8 getNodeId (CO_Data* d); /** * @ingroup statemachine * @brief Define the node ID. Initialize the object dictionary * @param *d Pointer on a CAN object data structure * @param nodeId The node ID to assign */ void setNodeId (CO_Data* d, UNS8 nodeId); /** * @brief Some stuff to do when the node enter in pre-operational mode * @param *d Pointer on a CAN object data structure */ void initPreOperationalMode (CO_Data* d); #endif