CANfestival - an open source CANopen framework

Dependencies:   mbed

Committer:
sam_grove
Date:
Mon May 30 07:14:41 2011 +0000
Revision:
0:6219434a0cb5
Initial public release of slave node framework port

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sam_grove 0:6219434a0cb5 1 /*
sam_grove 0:6219434a0cb5 2 This file is part of CanFestival, a library implementing CanOpen Stack.
sam_grove 0:6219434a0cb5 3
sam_grove 0:6219434a0cb5 4 Copyright (C): Edouard TISSERANT and Francis DUPIN
sam_grove 0:6219434a0cb5 5
sam_grove 0:6219434a0cb5 6 See COPYING file for copyrights details.
sam_grove 0:6219434a0cb5 7
sam_grove 0:6219434a0cb5 8 This library is free software; you can redistribute it and/or
sam_grove 0:6219434a0cb5 9 modify it under the terms of the GNU Lesser General Public
sam_grove 0:6219434a0cb5 10 License as published by the Free Software Foundation; either
sam_grove 0:6219434a0cb5 11 version 2.1 of the License, or (at your option) any later version.
sam_grove 0:6219434a0cb5 12
sam_grove 0:6219434a0cb5 13 This library is distributed in the hope that it will be useful,
sam_grove 0:6219434a0cb5 14 but WITHOUT ANY WARRANTY; without even the implied warranty of
sam_grove 0:6219434a0cb5 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
sam_grove 0:6219434a0cb5 16 Lesser General Public License for more details.
sam_grove 0:6219434a0cb5 17
sam_grove 0:6219434a0cb5 18 You should have received a copy of the GNU Lesser General Public
sam_grove 0:6219434a0cb5 19 License along with this library; if not, write to the Free Software
sam_grove 0:6219434a0cb5 20 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
sam_grove 0:6219434a0cb5 21 */
sam_grove 0:6219434a0cb5 22
sam_grove 0:6219434a0cb5 23 #ifndef __objdictdef_h__
sam_grove 0:6219434a0cb5 24 #define __objdictdef_h__
sam_grove 0:6219434a0cb5 25
sam_grove 0:6219434a0cb5 26 /************************* CONSTANTES **********************************/
sam_grove 0:6219434a0cb5 27 /** this are static defined datatypes taken fCODE the canopen standard. They
sam_grove 0:6219434a0cb5 28 * are located at index 0x0001 to 0x001B. As described in the standard, they
sam_grove 0:6219434a0cb5 29 * are in the object dictionary for definition purpose only. a device does not
sam_grove 0:6219434a0cb5 30 * to support all of this datatypes.
sam_grove 0:6219434a0cb5 31 */
sam_grove 0:6219434a0cb5 32 #define boolean 0x01
sam_grove 0:6219434a0cb5 33 #define int8 0x02
sam_grove 0:6219434a0cb5 34 #define int16 0x03
sam_grove 0:6219434a0cb5 35 #define int32 0x04
sam_grove 0:6219434a0cb5 36 #define uint8 0x05
sam_grove 0:6219434a0cb5 37 #define uint16 0x06
sam_grove 0:6219434a0cb5 38 #define uint32 0x07
sam_grove 0:6219434a0cb5 39 #define real32 0x08
sam_grove 0:6219434a0cb5 40 #define visible_string 0x09
sam_grove 0:6219434a0cb5 41 #define octet_string 0x0A
sam_grove 0:6219434a0cb5 42 #define unicode_string 0x0B
sam_grove 0:6219434a0cb5 43 #define time_of_day 0x0C
sam_grove 0:6219434a0cb5 44 #define time_difference 0x0D
sam_grove 0:6219434a0cb5 45
sam_grove 0:6219434a0cb5 46 #define domain 0x0F
sam_grove 0:6219434a0cb5 47 #define int24 0x10
sam_grove 0:6219434a0cb5 48 #define real64 0x11
sam_grove 0:6219434a0cb5 49 #define int40 0x12
sam_grove 0:6219434a0cb5 50 #define int48 0x13
sam_grove 0:6219434a0cb5 51 #define int56 0x14
sam_grove 0:6219434a0cb5 52 #define int64 0x15
sam_grove 0:6219434a0cb5 53 #define uint24 0x16
sam_grove 0:6219434a0cb5 54
sam_grove 0:6219434a0cb5 55 #define uint40 0x18
sam_grove 0:6219434a0cb5 56 #define uint48 0x19
sam_grove 0:6219434a0cb5 57 #define uint56 0x1A
sam_grove 0:6219434a0cb5 58 #define uint64 0x1B
sam_grove 0:6219434a0cb5 59
sam_grove 0:6219434a0cb5 60 #define pdo_communication_parameter 0x20
sam_grove 0:6219434a0cb5 61 #define pdo_mapping 0x21
sam_grove 0:6219434a0cb5 62 #define sdo_parameter 0x22
sam_grove 0:6219434a0cb5 63 #define identity 0x23
sam_grove 0:6219434a0cb5 64
sam_grove 0:6219434a0cb5 65 /* CanFestival is using 0x24 to 0xFF to define some types containing a
sam_grove 0:6219434a0cb5 66 value range (See how it works in objdict.c)
sam_grove 0:6219434a0cb5 67 */
sam_grove 0:6219434a0cb5 68
sam_grove 0:6219434a0cb5 69
sam_grove 0:6219434a0cb5 70 /** Each entry of the object dictionary can be READONLY (RO), READ/WRITE (RW),
sam_grove 0:6219434a0cb5 71 * WRITE-ONLY (WO)
sam_grove 0:6219434a0cb5 72 */
sam_grove 0:6219434a0cb5 73 #define RW 0x00
sam_grove 0:6219434a0cb5 74 #define WO 0x01
sam_grove 0:6219434a0cb5 75 #define RO 0x02
sam_grove 0:6219434a0cb5 76
sam_grove 0:6219434a0cb5 77 #define TO_BE_SAVE 0x04
sam_grove 0:6219434a0cb5 78 #define DCF_TO_SEND 0x08
sam_grove 0:6219434a0cb5 79
sam_grove 0:6219434a0cb5 80 /************************ STRUCTURES ****************************/
sam_grove 0:6219434a0cb5 81 /** This are some structs which are neccessary for creating the entries
sam_grove 0:6219434a0cb5 82 * of the object dictionary.
sam_grove 0:6219434a0cb5 83 */
sam_grove 0:6219434a0cb5 84 typedef struct td_subindex
sam_grove 0:6219434a0cb5 85 {
sam_grove 0:6219434a0cb5 86 UNS8 bAccessType;
sam_grove 0:6219434a0cb5 87 UNS8 bDataType; /* Defines of what datatype the entry is */
sam_grove 0:6219434a0cb5 88 UNS32 size; /* The size (in Byte) of the variable */
sam_grove 0:6219434a0cb5 89 void* pObject; /* This is the pointer of the Variable */
sam_grove 0:6219434a0cb5 90 } subindex;
sam_grove 0:6219434a0cb5 91
sam_grove 0:6219434a0cb5 92 /** Struct for creating entries in the communictaion profile
sam_grove 0:6219434a0cb5 93 */
sam_grove 0:6219434a0cb5 94 typedef struct td_indextable
sam_grove 0:6219434a0cb5 95 {
sam_grove 0:6219434a0cb5 96 subindex* pSubindex; /* Pointer to the subindex */
sam_grove 0:6219434a0cb5 97 UNS8 bSubCount; /* the count of valid entries for this subindex
sam_grove 0:6219434a0cb5 98 * This count here defines how many memory has been
sam_grove 0:6219434a0cb5 99 * allocated. this memory does not have to be used.
sam_grove 0:6219434a0cb5 100 */
sam_grove 0:6219434a0cb5 101 UNS16 index;
sam_grove 0:6219434a0cb5 102 } indextable;
sam_grove 0:6219434a0cb5 103
sam_grove 0:6219434a0cb5 104 typedef struct s_quick_index{
sam_grove 0:6219434a0cb5 105 UNS16 SDO_SVR;
sam_grove 0:6219434a0cb5 106 UNS16 SDO_CLT;
sam_grove 0:6219434a0cb5 107 UNS16 PDO_RCV;
sam_grove 0:6219434a0cb5 108 UNS16 PDO_RCV_MAP;
sam_grove 0:6219434a0cb5 109 UNS16 PDO_TRS;
sam_grove 0:6219434a0cb5 110 UNS16 PDO_TRS_MAP;
sam_grove 0:6219434a0cb5 111 }quick_index;
sam_grove 0:6219434a0cb5 112
sam_grove 0:6219434a0cb5 113
sam_grove 0:6219434a0cb5 114 /*typedef struct struct_CO_Data CO_Data; */
sam_grove 0:6219434a0cb5 115 typedef UNS32 (*ODCallback_t)(CO_Data* d, const indextable *, UNS8 bSubindex);
sam_grove 0:6219434a0cb5 116 typedef const indextable * (*scanIndexOD_t)(UNS16 wIndex, UNS32 * errorCode, ODCallback_t **Callback);
sam_grove 0:6219434a0cb5 117
sam_grove 0:6219434a0cb5 118 /************************** MACROS *********************************/
sam_grove 0:6219434a0cb5 119
sam_grove 0:6219434a0cb5 120 /* CANopen usefull helpers */
sam_grove 0:6219434a0cb5 121 #define GET_NODE_ID(m) (UNS16_LE(m.cob_id) & 0x7f)
sam_grove 0:6219434a0cb5 122 #define GET_FUNCTION_CODE(m) (UNS16_LE(m.cob_id) >> 7)
sam_grove 0:6219434a0cb5 123
sam_grove 0:6219434a0cb5 124 #endif /* __objdictdef_h__ */