Sam Grove
/
canopen_slavenode
CANfestival - an open source CANopen framework
Diff: framework/include/pdo.h
- Revision:
- 0:6219434a0cb5
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/framework/include/pdo.h Mon May 30 07:14:41 2011 +0000 @@ -0,0 +1,159 @@ +/* +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 pdo Process Data Object (PDO) + * PDO is a communication object defined by the DPO communication parameter and PDA mapping parameter objects. + * It is an uncomfirmed communication service without protocol overhead. + * @ingroup comobj + */ + +#ifndef __pdo_h__ +#define __pdo_h__ + +#include <applicfg.h> +#include <def.h> + +#include "canopen_can.h" + +typedef struct struct_s_PDO_status s_PDO_status; + +#include "data.h" + +#ifdef __cplusplus +extern "C"{ +#endif + +/* Status of the TPDO : */ +#define PDO_INHIBITED 0x01 +#define PDO_RTR_SYNC_READY 0x01 + +/** The PDO structure */ +struct struct_s_PDO_status { + UNS8 transmit_type_parameter; + TIMER_HANDLE event_timer; + TIMER_HANDLE inhibit_timer; + Message last_message; +}; + +#define s_PDO_status_Initializer {0, TIMER_NONE, TIMER_NONE, Message_Initializer} + +/** definitions of the different types of PDOs' transmission + * + * SYNCHRO(n) means that the PDO will be transmited every n SYNC signal. + */ +#define TRANS_EVERY_N_SYNC(n) (n) /*n = 1 to 240 */ +#define TRANS_SYNC_ACYCLIC 0 /* Trans after reception of n SYNC. n = 1 to 240 */ +#define TRANS_SYNC_MIN 1 /* Trans after reception of n SYNC. n = 1 to 240 */ +#define TRANS_SYNC_MAX 240 /* Trans after reception of n SYNC. n = 1 to 240 */ +#define TRANS_RTR_SYNC 252 /* Transmission on request */ +#define TRANS_RTR 253 /* Transmission on request */ +#define TRANS_EVENT_SPECIFIC 254 /* Transmission on event */ +#define TRANS_EVENT_PROFILE 255 /* Transmission on event */ + +/** + * @brief Copy all the data to transmit in process_var + * Prepare the PDO defined at index to be sent + * *pwCobId : returns the value of the cobid. (subindex 1) + * @param *d Pointer on a CAN object data structure + * @param numPdo The PDO number + * @param *pdo Pointer on a CAN message structure + * @return 0 or 0xFF if error. + */ +UNS8 buildPDO(CO_Data* d, UNS8 numPdo, Message *pdo); + +/** + * @ingroup pdo + * @brief Transmit a PDO request frame on the network to the slave. + * @param *d Pointer on a CAN object data structure + * @param RPDOIndex Index of the receive PDO + * @return + * - CanFestival file descriptor is returned upon success. + * - 0xFF is returned if RPDO Index is not found. + + * @return 0xFF if error, other in success. + */ +UNS8 sendPDOrequest( CO_Data* d, UNS16 RPDOIndex ); + +/** + * @brief Compute a PDO frame reception + * bus_id is hardware dependant + * @param *d Pointer on a CAN object data structure + * @param *m Pointer on a CAN message structure + * @return 0xFF if error, else return 0 + */ +UNS8 proceedPDO (CO_Data* d, Message *m); + +/** + * @brief Used by the application to signal changes in process data + * that could be mapped to some TPDO. + * This do not necessarily imply PDO emission. + * Function iterates on all TPDO and look TPDO transmit + * type and content change before sending it. + * @param *d Pointer on a CAN object data structure + */ +UNS8 sendPDOevent (CO_Data* d); +UNS8 sendOnePDOevent (CO_Data* d, UNS8 pdoNum); + +/** + * @ingroup pdo + * @brief Function iterates on all TPDO and look TPDO transmit + * type and content change before sending it. + * @param *d Pointer on a CAN object data structure + * @param isSyncEvent + */ +UNS8 _sendPDOevent(CO_Data* d, UNS8 isSyncEvent); + +/** + * @brief Initialize PDO feature + * @param *d Pointer on a CAN object data structure + */ +void PDOInit(CO_Data* d); + +/** + * @brief Stop PDO feature + * @param *d Pointer on a CAN object data structure + */ +void PDOStop(CO_Data* d); + +/** + * @ingroup pdo + * @brief Set timer for PDO event + * @param *d Pointer on a CAN object data structure + * @param pdoNum The PDO number + */ +void PDOEventTimerAlarm(CO_Data* d, UNS32 pdoNum); + +/** + * @ingroup pdo + * @brief Inhibit timer for PDO event + * @param *d Pointer on a CAN object data structure + * @param pdoNum The PDO number + */ +void PDOInhibitTimerAlarm(CO_Data* d, UNS32 pdoNum); + +/* copy bit per bit in little endian */ +void CopyBits(UNS8 NbBits, UNS8* SrcByteIndex, UNS8 SrcBitIndex, UNS8 SrcBigEndian, UNS8* DestByteIndex, UNS8 DestBitIndex, UNS8 DestBigEndian); + +#ifdef __cplusplus +} +#endif +#endif