library for C++ CANOpen implementation. mbed independant, but is easy to attach into with mbed.
Dependents: ppCANOpen_Example DISCO-F746NG_rtos_test
Example:
Import programppCANOpen_Example
I am no longer actively working on the ppCANOpen library, however, I want to publish this project so that anyone who wants to pick up any of the pieces can have a good example. This is a a project I was working on using the ppCANOpen library. It has a pretty in deep use of the object dictionary structure. And a number of functions to control high voltage pinball drivers, if you're into that sort of thing.
include/Node.h
- Committer:
- ptpaterson
- Date:
- 2015-12-30
- Revision:
- 2:c724ff3a4e4d
- Child:
- 3:12b3c25bdeba
File content as of revision 2:c724ff3a4e4d:
/** ****************************************************************************** * @file * @author Paul Paterson * @version * @date 2015-12-14 * @brief CANOpen implementation library ****************************************************************************** * @attention * * <h2><center>© COPYRIGHT(c) 2015 Paul Paterson * * All rights reserved. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifndef PPCAN_NODE_H #define PPCAN_NODE_H #include "canopen_protocol.h" namespace ppCANOpen { /* Avoid circular reference */ class ServiceProvider; class ObjectDictionary; /** Maintain the multitude of states for a node */ typedef struct { NmtState nmtState; int csBoot_Up; int csSDO; int csEmergency; int csSYNC; int csLifeGuard; int csPDO; int csLSS; } NodeState; /** Node Class to implement feature of a CANOpen NMT node */ class Node { public: Node (void); /* ======================================================================== * Methods to message indication and confirmation * Called by a ServiceProvider when a message is received. * ======================================================================== */ /* PDO (7.2.2), MPDO (7.2.3) --------------------------------------------*/ int ConsumePdo (int pdoNum, char * dataIn); int HandlePdoReadRequest (int pdoNum); /* SDO (7.2.4) ----------------------------------------------------------*/ int HandleExpeditedDownload (int sdoNum, int index, int subIndex, int dataCount, char * data); int HandleInitiateDownloadRequest (int sdoNum, int index, int subIndex, int dataCount, char * data); int HandleExpeditedUpload (int sdoNum, int index, int subIndex); // TODO: express and not express /* SYNC object (7.2.5) --------------------------------------------------*/ // TODO: SYNC consumer /* Time Stamp object (7.2.6) --------------------------------------------*/ // TODO: time consumer /* Emergency object (7.2.7) ---------------------------------------------*/ int ConsumeEmergency (void);// TODO: fix params /* Network Management (7.2.8) -------------------------------------------*/ /* ---- Node Control (7.2.8.2.1) ----------------------------------------*/ int HandleNodeControl (void); /* ---- Error Control (7.2.8.2.2) ---------------------------------------*/ int HandleNodeGuardRequest (int masterId); int ConsumeHeartbeat (int producerId); /* ======================================================================== * Methods to handle operation of node device * ======================================================================== */ /** * @note */ // TODO: pass elapsed time to Update method virtual void Update (void); /* ======================================================================== * Public members * ======================================================================== */ /** Network id for the node * @note May need to be a pointer, because node id is held in object dictionary */ int nodeId; /** Network and communication state of the node * @note */ NodeState state; protected: /* ======================================================================== * Methods to implement node control in derived classes * ======================================================================== */ /** Perform actions when node reset * @note Override to implement user application */ virtual void OnInitialize (void); /** Perform actions when state changed to pre-operational * @note Override to implement user application */ virtual void OnPreoperational (void); /** Perform actions when state changed to operational * @note Override to implement user application */ virtual void OnOperational (void); /** Perform actions when state changed to stop * @note Override to implement user application */ virtual void OnStopped (void); /* ======================================================================== * Object Dictionary * ======================================================================== */ /** object dictionary */ ObjectDictionary * pDictionary; private: }; } /* namespace ppCANOpen */ #endif // PPCAN_NODE_H