Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: ppCANOpen_Example DISCO-F746NG_rtos_test
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