--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/data.h Wed May 10 16:59:40 2006 +0200
@@ -0,0 +1,164 @@
+/*
+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
+*/
+
+
+#ifndef __data_h__
+#define __data_h__
+
+// declaration of CO_Data type let us include all necessary headers
+// struct struct_CO_Data can then be defined later
+typedef struct struct_CO_Data CO_Data;
+
+#include <applicfg.h>
+#include "def.h"
+#include "can.h"
+#include "objdictdef.h"
+#include "objacces.h"
+#include "sdo.h"
+#include "pdo.h"
+#include "states.h"
+#include "lifegrd.h"
+#include "sync.h"
+#include "nmtMaster.h"
+
+// This structurs contains all necessary information for a CanOpen node
+struct struct_CO_Data {
+ // Object dictionary
+ UNS8 *bDeviceNodeId;
+ const indextable *objdict;
+ UNS8 *count_sync;
+ quick_index *firstIndex;
+ quick_index *lastIndex;
+ UNS16 *ObjdictSize;
+ const UNS8 *iam_a_slave;
+ valueRangeTest_t valueRangeTest;
+
+ // SDO
+ s_transfer transfers[SDO_MAX_SIMULTANEOUS_TRANSFERTS];
+ SDOtimeoutError_t SDOtimeoutError;
+ //s_sdo_parameter *sdo_parameters;
+
+ // State machine
+ e_nodeState nodeState;
+ s_state_communication CurrentCommunicationState;
+ initialisation_t initialisation;
+ preOperational_t preOperational;
+ operational_t operational;
+ stopped_t stopped;
+
+ // NMT-heartbeat
+ UNS8 *ConsumerHeartbeatCount;
+ UNS32 *ConsumerHeartbeatEntries;
+ TIMER_HANDLE *ConsumerHeartBeatTimers;
+ UNS16 *ProducerHeartBeatTime;
+ TIMER_HANDLE ProducerHeartBeatTimer;
+ heartbeatError_t heartbeatError;
+ e_nodeState NMTable[NMT_MAX_NODE_ID];
+
+ // SYNC
+ TIMER_HANDLE syncTimer;
+ UNS32 *COB_ID_Sync;
+ UNS32 *Sync_Cycle_Period;
+ /*UNS32 *Sync_window_length*/;
+ post_sync_t post_sync;
+ post_TPDO_t post_TPDO;
+
+ // PDO
+ s_process_var process_var;
+
+ // General
+ UNS8 toggle;
+ canSend_t canSend;
+ scanIndexOD_t scanIndexOD;
+};
+
+// A macro to initialize the data in client app.
+#define CANOPEN_NODE_DATA_INITIALIZER(NODE_PREFIX) {\
+ /* Object dictionary*/\
+ bDeviceNodeId:& NODE_PREFIX ## _bDeviceNodeId,\
+ objdict: NODE_PREFIX ## _objdict,\
+ count_sync: NODE_PREFIX ## _count_sync,\
+ firstIndex: & NODE_PREFIX ## _firstIndex,\
+ lastIndex: & NODE_PREFIX ## _lastIndex,\
+ ObjdictSize: & NODE_PREFIX ## _ObjdictSize,\
+ iam_a_slave: & NODE_PREFIX ## _iam_a_slave,\
+ valueRangeTest: NODE_PREFIX ## _valueRangeTest,\
+ \
+ /* SDO */\
+ transfers:{{\
+ nodeId: 0,\
+ index: 0,\
+ subIndex: 0,\
+ state: SDO_RESET,\
+ toggle: 0,\
+ count: 0,\
+ offset: 0,\
+ data: {0,},\
+ dataType: 0,\
+ timer: -1},},\
+ SDOtimeoutError: &NODE_PREFIX ## _SDOtimeoutError,\
+ \
+ /* State machine */\
+ nodeState:Unknown_state,\
+ CurrentCommunicationState:{\
+ csBoot_Up: 0,\
+ csSDO: 0,\
+ csEmergency: 0,\
+ csSYNC: 0,\
+ csHeartbeat: 0,\
+ csPDO: 0},\
+ initialisation: &NODE_PREFIX ## _initialisation,\
+ preOperational: &NODE_PREFIX ## _preOperational,\
+ operational: &NODE_PREFIX ## _operational,\
+ stopped: &NODE_PREFIX ## _stopped,\
+ \
+ /* NMT-heartbeat */\
+ ConsumerHeartbeatCount: & NODE_PREFIX ## _highestSubIndex_obj1016,\
+ ConsumerHeartbeatEntries: NODE_PREFIX ## _obj1016,\
+ ConsumerHeartBeatTimers: NODE_PREFIX ## _heartBeatTimers,\
+ ProducerHeartBeatTime: & NODE_PREFIX ## _obj1017,\
+ ProducerHeartBeatTimer: TIMER_NONE,\
+ heartbeatError: NODE_PREFIX ## _heartbeatError,\
+ NMTable:{Unknown_state,},\
+ \
+ /* SYNC */\
+ syncTimer: TIMER_NONE,\
+ COB_ID_Sync: & NODE_PREFIX ## _obj1005,\
+ Sync_Cycle_Period: & NODE_PREFIX ## _obj1006,\
+ /*Sync_window_length: & NODE_PREFIX ## _obj1007,*/\
+ post_sync: NODE_PREFIX ## _post_sync,\
+ post_TPDO: NODE_PREFIX ## _post_TPDO,\
+ \
+ /* PDO */\
+ process_var: {\
+ count: 0,\
+ data: {0,}},\
+ \
+ /* General */\
+ toggle: 0,\
+ canSend: NODE_PREFIX ## _canSend,\
+ scanIndexOD: NODE_PREFIX ## _scanIndexOD\
+}
+
+#endif // __data_h__
+
+