Can_open_masternode

Dependencies:   mbed

Committer:
sam_grove
Date:
Wed Sep 26 05:48:14 2012 +0000
Revision:
7:537bae5a6fc6
Parent:
0:9dd7c6129683
Pushing the project into the new repo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sam_grove 0:9dd7c6129683 1 /*
sam_grove 0:9dd7c6129683 2 This file is part of CanFestival, a library implementing CanOpen
sam_grove 0:9dd7c6129683 3 Stack.
sam_grove 0:9dd7c6129683 4
sam_grove 0:9dd7c6129683 5 Copyright (C): Edouard TISSERANT and Francis DUPIN
sam_grove 0:9dd7c6129683 6
sam_grove 0:9dd7c6129683 7 See COPYING file for copyrights details.
sam_grove 0:9dd7c6129683 8
sam_grove 0:9dd7c6129683 9 This library is free software; you can redistribute it and/or
sam_grove 0:9dd7c6129683 10 modify it under the terms of the GNU Lesser General Public
sam_grove 0:9dd7c6129683 11 License as published by the Free Software Foundation; either
sam_grove 0:9dd7c6129683 12 version 2.1 of the License, or (at your option) any later version.
sam_grove 0:9dd7c6129683 13
sam_grove 0:9dd7c6129683 14 This library is distributed in the hope that it will be useful,
sam_grove 0:9dd7c6129683 15 but WITHOUT ANY WARRANTY; without even the implied warranty of
sam_grove 0:9dd7c6129683 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
sam_grove 0:9dd7c6129683 17 Lesser General Public License for more details.
sam_grove 0:9dd7c6129683 18
sam_grove 0:9dd7c6129683 19 You should have received a copy of the GNU Lesser General Public
sam_grove 0:9dd7c6129683 20 License along with this library; if not, write to the Free Software
sam_grove 0:9dd7c6129683 21 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
sam_grove 0:9dd7c6129683 22 USA
sam_grove 0:9dd7c6129683 23 */
sam_grove 0:9dd7c6129683 24 /*!
sam_grove 0:9dd7c6129683 25 ** @file nmtMaster.c
sam_grove 0:9dd7c6129683 26 ** @author Edouard TISSERANT and Francis DUPIN
sam_grove 0:9dd7c6129683 27 ** @date Tue Jun 5 08:47:18 2007
sam_grove 0:9dd7c6129683 28 **
sam_grove 0:9dd7c6129683 29 ** @brief
sam_grove 0:9dd7c6129683 30 **
sam_grove 0:9dd7c6129683 31 **
sam_grove 0:9dd7c6129683 32 */
sam_grove 0:9dd7c6129683 33 #include "nmtMaster.h"
sam_grove 0:9dd7c6129683 34 #include "canfestival.h"
sam_grove 0:9dd7c6129683 35 #include "sysdep.h"
sam_grove 0:9dd7c6129683 36
sam_grove 0:9dd7c6129683 37 /*!
sam_grove 0:9dd7c6129683 38 **
sam_grove 0:9dd7c6129683 39 **
sam_grove 0:9dd7c6129683 40 ** @param d
sam_grove 0:9dd7c6129683 41 ** @param Node_ID
sam_grove 0:9dd7c6129683 42 ** @param cs
sam_grove 0:9dd7c6129683 43 **
sam_grove 0:9dd7c6129683 44 ** @return
sam_grove 0:9dd7c6129683 45 **/
sam_grove 0:9dd7c6129683 46 UNS8 masterSendNMTstateChange(CO_Data* d, UNS8 Node_ID, UNS8 cs)
sam_grove 0:9dd7c6129683 47 {
sam_grove 0:9dd7c6129683 48 Message m;
sam_grove 0:9dd7c6129683 49
sam_grove 0:9dd7c6129683 50 MSG_WAR(0x3501, "Send_NMT cs : ", cs);
sam_grove 0:9dd7c6129683 51 MSG_WAR(0x3502, " to node : ", Node_ID);
sam_grove 0:9dd7c6129683 52 /* message configuration */
sam_grove 0:9dd7c6129683 53 m.cob_id = 0x0000; /*(NMT) << 7*/
sam_grove 0:9dd7c6129683 54 m.rtr = NOT_A_REQUEST;
sam_grove 0:9dd7c6129683 55 m.len = 2;
sam_grove 0:9dd7c6129683 56 m.data[0] = cs;
sam_grove 0:9dd7c6129683 57 m.data[1] = Node_ID;
sam_grove 0:9dd7c6129683 58
sam_grove 0:9dd7c6129683 59 return canSend(d->canHandle,&m);
sam_grove 0:9dd7c6129683 60 }
sam_grove 0:9dd7c6129683 61
sam_grove 0:9dd7c6129683 62
sam_grove 0:9dd7c6129683 63 /*!
sam_grove 0:9dd7c6129683 64 **
sam_grove 0:9dd7c6129683 65 **
sam_grove 0:9dd7c6129683 66 ** @param d
sam_grove 0:9dd7c6129683 67 ** @param nodeId
sam_grove 0:9dd7c6129683 68 **
sam_grove 0:9dd7c6129683 69 ** @return
sam_grove 0:9dd7c6129683 70 **/
sam_grove 0:9dd7c6129683 71 UNS8 masterSendNMTnodeguard(CO_Data* d, UNS8 nodeId)
sam_grove 0:9dd7c6129683 72 {
sam_grove 0:9dd7c6129683 73 Message m;
sam_grove 0:9dd7c6129683 74
sam_grove 0:9dd7c6129683 75 /* message configuration */
sam_grove 0:9dd7c6129683 76 UNS16 tmp = nodeId | (NODE_GUARD << 7);
sam_grove 0:9dd7c6129683 77 m.cob_id = UNS16_LE(tmp);
sam_grove 0:9dd7c6129683 78 m.rtr = REQUEST;
sam_grove 0:9dd7c6129683 79 m.len = 0;
sam_grove 0:9dd7c6129683 80
sam_grove 0:9dd7c6129683 81 MSG_WAR(0x3503, "Send_NODE_GUARD to node : ", nodeId);
sam_grove 0:9dd7c6129683 82
sam_grove 0:9dd7c6129683 83 return canSend(d->canHandle,&m);
sam_grove 0:9dd7c6129683 84 }
sam_grove 0:9dd7c6129683 85
sam_grove 0:9dd7c6129683 86 /*!
sam_grove 0:9dd7c6129683 87 **
sam_grove 0:9dd7c6129683 88 **
sam_grove 0:9dd7c6129683 89 ** @param d
sam_grove 0:9dd7c6129683 90 ** @param nodeId
sam_grove 0:9dd7c6129683 91 **
sam_grove 0:9dd7c6129683 92 ** @return
sam_grove 0:9dd7c6129683 93 **/
sam_grove 0:9dd7c6129683 94 UNS8 masterRequestNodeState(CO_Data* d, UNS8 nodeId)
sam_grove 0:9dd7c6129683 95 {
sam_grove 0:9dd7c6129683 96 /* FIXME: should warn for bad toggle bit. */
sam_grove 0:9dd7c6129683 97
sam_grove 0:9dd7c6129683 98 /* NMTable configuration to indicate that the master is waiting
sam_grove 0:9dd7c6129683 99 for a Node_Guard frame from the slave whose node_id is ID
sam_grove 0:9dd7c6129683 100 */
sam_grove 0:9dd7c6129683 101 d->NMTable[nodeId] = Unknown_state; /* A state that does not exist
sam_grove 0:9dd7c6129683 102 */
sam_grove 0:9dd7c6129683 103
sam_grove 0:9dd7c6129683 104 if (nodeId == 0) { /* NMT broadcast */
sam_grove 0:9dd7c6129683 105 UNS8 i = 0;
sam_grove 0:9dd7c6129683 106 for (i = 0 ; i < NMT_MAX_NODE_ID ; i++) {
sam_grove 0:9dd7c6129683 107 d->NMTable[i] = Unknown_state;
sam_grove 0:9dd7c6129683 108 }
sam_grove 0:9dd7c6129683 109 }
sam_grove 0:9dd7c6129683 110 return masterSendNMTnodeguard(d,nodeId);
sam_grove 0:9dd7c6129683 111 }
sam_grove 0:9dd7c6129683 112