From c98db34d6f3beb7352327ef39cfd248b4b3f271c Mon Sep 17 00:00:00 2001 From: greg Date: Fri, 4 May 2007 10:32:08 +0000 Subject: [PATCH] Master configure slave's heartbeat producer time by concise DCF. --- examples/TestMasterSlave/Master.c | 77 +- examples/TestMasterSlave/TestMaster.c | 50 +- examples/TestMasterSlave/TestMaster.h | 3 - examples/TestMasterSlave/TestMaster.od | 5367 +++++++++++++++++++- examples/TestMasterSlave/TestMasterSlave.c | 45 +- examples/TestMasterSlave/TestSlave.c | 8 +- examples/TestMasterSlave/TestSlave.od | 119 +- examples/TestMasterSlave/TestSlaveC.c | 329 ++ examples/TestMasterSlave/TestSlaveC.h | 18 + 9 files changed, 5782 insertions(+), 234 deletions(-) create mode 100644 examples/TestMasterSlave/TestSlaveC.c create mode 100644 examples/TestMasterSlave/TestSlaveC.h diff --git a/examples/TestMasterSlave/Master.c b/examples/TestMasterSlave/Master.c index f848381..fc5af89 100644 --- a/examples/TestMasterSlave/Master.c +++ b/examples/TestMasterSlave/Master.c @@ -40,7 +40,7 @@ void TestMaster_initialisation() UNS32 PDO1_COBID = 0x0182; UNS32 PDO2_COBID = 0x0282; UNS8 size = sizeof(UNS32); - + eprintf("TestMaster_initialisation\n"); /***************************************** @@ -61,6 +61,25 @@ void TestMaster_initialisation() RW); /* UNS8 checkAccess */ } +// Step counts number of times ConfigureSlaveNode is called +static init_step = 0; + +/*Froward declaration*/ +static void ConfigureSlaveNode(CO_Data* d, UNS8 nodeId); + +/**/ +static void CheckSDOAndContinue(CO_Data* d, UNS8 nodeId) +{ + UNS32 abortCode; + if(getWriteResultNetworkDict (d, nodeId, &abortCode) != SDO_FINISHED) + eprintf("Master : Failed in initializing slave %2.2x, step %d, AbortCode :%4.4x \n", nodeId, init_step, abortCode); + + /* Finalise last SDO transfer with this node */ + closeSDOtransfer(&TestMaster_Data, nodeId, SDO_CLIENT); + + ConfigureSlaveNode(d, nodeId); +} + /******************************************************** * ConfigureSlaveNode is responsible to * - setup slave TPDO 1 transmit time @@ -76,72 +95,59 @@ void TestMaster_initialisation() * then it called again each time a SDO exchange is * finished. ********************************************************/ + static void ConfigureSlaveNode(CO_Data* d, UNS8 nodeId) { - // Step counts number of times ConfigureSlaveNode is called - static step = 1; - - UNS8 Transmission_Type = 0x01; + /* Master configure heartbeat producer time at 1000 ms + * for slave node-id 0x02 by DCF concise */ + + UNS8 Transmission_Type = 0x01; UNS32 abortCode; UNS8 res; eprintf("Master : ConfigureSlaveNode %2.2x\n", nodeId); - switch(step++){ + switch(++init_step){ case 1: /*First step : setup Slave's TPDO 1 to be transmitted on SYNC*/ eprintf("Master : set slave %2.2x TPDO 1 transmit type\n", nodeId); res = writeNetworkDictCallBack (d, /*CO_Data* d*/ - *TestSlave_Data.bDeviceNodeId, /*UNS8 nodeId*/ + nodeId, /*UNS8 nodeId*/ 0x1800, /*UNS16 index*/ 0x02, /*UNS8 subindex*/ 1, /*UNS8 count*/ 0, /*UNS8 dataType*/ &Transmission_Type,/*void *data*/ - ConfigureSlaveNode); /*SDOCallback_t Callback*/ break; + CheckSDOAndContinue); /*SDOCallback_t Callback*/ + break; + case 2: /*Second step*/ - /*check and warn for previous slave OD access error*/ - if(getWriteResultNetworkDict (d, nodeId, &abortCode) != SDO_FINISHED) - eprintf("Master : Couldn't set slave %2.2x TPDO 1 transmit type. AbortCode :%4.4x \n", nodeId, abortCode); - - /* Finalise last SDO transfer with this node */ - closeSDOtransfer(&TestMaster_Data, - *TestSlave_Data.bDeviceNodeId, - SDO_CLIENT); - - /*Setup Slave's TPDO 1 to be transmitted on SYNC*/ eprintf("Master : set slave %2.2x TPDO 2 transmit type\n", nodeId); writeNetworkDictCallBack (d, /*CO_Data* d*/ - *TestSlave_Data.bDeviceNodeId, /*UNS8 nodeId*/ + nodeId, /*UNS8 nodeId*/ 0x1801, /*UNS16 index*/ 0x02, /*UNS16 index*/ 1, /*UNS8 count*/ 0, /*UNS8 dataType*/ &Transmission_Type,/*void *data*/ - ConfigureSlaveNode); /*SDOCallback_t Callback*/ - break; - case 3: /*Last step*/ - /*check and warn for previous slave OD access error*/ - if(getWriteResultNetworkDict (d, nodeId, &abortCode) != SDO_FINISHED) - eprintf("Master : Couldn't set slave %2.2x TPDO 2 transmit type. AbortCode :%4.4x \n", nodeId, abortCode); - - /* Finalise last SDO transfer with this node */ - closeSDOtransfer(&TestMaster_Data, - *TestSlave_Data.bDeviceNodeId, - SDO_CLIENT); - + CheckSDOAndContinue); /*SDOCallback_t Callback*/ + break; + case 3: + + /****************************** START *******************************/ + /* Put the master in operational mode */ setState(d, Operational); - + /* Ask slave node to go in operational mode */ masterSendNMTstateChange (d, nodeId, NMT_Start_Node); - } + } } void TestMaster_preOperational() { eprintf("TestMaster_preOperational\n"); - ConfigureSlaveNode(&TestMaster_Data, 2); + ConfigureSlaveNode(&TestMaster_Data, 0x02); } @@ -167,7 +173,7 @@ char waiting_answer = 0; void TestMaster_post_TPDO() { eprintf("TestMaster_post_TPDO\n"); - +// // { // char zero = 0; // if(MasterMap4 > 0x80){ @@ -217,5 +223,4 @@ void TestMaster_post_TPDO() 0); waiting_answer = 1; } - } diff --git a/examples/TestMasterSlave/TestMaster.c b/examples/TestMasterSlave/TestMaster.c index ce66c24..9828a52 100644 --- a/examples/TestMasterSlave/TestMaster.c +++ b/examples/TestMasterSlave/TestMaster.c @@ -26,7 +26,7 @@ UNS32 TestMaster_valueRangeTest (UNS8 typeValue, void * value) /* The node id */ /**************************************************************************/ /* node_id default value.*/ -UNS8 TestMaster_bDeviceNodeId = 0x00; +UNS8 TestMaster_bDeviceNodeId = 0x01; /**************************************************************************/ /* Array of message processing information */ @@ -85,14 +85,6 @@ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ UNS32 TestMaster_obj1010_Save_Communication_Parameters = 0x0; /* 0 */ UNS32 TestMaster_obj1010_Save_Application_Parameters = 0x0; /* 0 */ UNS32 TestMaster_obj1010_Save_Manufacturer_Parameters = 0x0; /* 0 */ - ODCallback_t TestMaster_Index1010_callbacks[] = - { - NULL, - NULL, - NULL, - NULL, - NULL, - }; subindex TestMaster_Index1010[] = { { RO, uint8, sizeof (UNS8), (void*)&TestMaster_highestSubIndex_obj1010 }, @@ -108,14 +100,6 @@ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ UNS32 TestMaster_obj1011_Restore_Communication_Default_Parameters = 0x0; /* 0 */ UNS32 TestMaster_obj1011_Restore_Application_Default_Parameters = 0x0; /* 0 */ UNS32 TestMaster_obj1011_Restore_Manufacturer_Default_Parameters = 0x0; /* 0 */ - ODCallback_t TestMaster_Index1011_callbacks[] = - { - NULL, - NULL, - NULL, - NULL, - NULL, - }; subindex TestMaster_Index1011[] = { { RO, uint8, sizeof (UNS8), (void*)&TestMaster_highestSubIndex_obj1011 }, @@ -129,7 +113,7 @@ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ UNS8 TestMaster_highestSubIndex_obj1016 = 1; /* number of subindex - 1*/ UNS32 TestMaster_obj1016[] = { - 0x20802 /* 133122 */ + 0x5DC /* 1500 */ }; subindex TestMaster_Index1016[] = { @@ -230,11 +214,21 @@ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1601[1] } }; -/* index 0x2000 : Mapped variable MasterMap1 */ - ODCallback_t MasterMap1_callbacks[] = +/* index 0x1F22 : Concise DCF. */ + UNS8 TestMaster_highestSubIndex_obj1F22 = 2; /* number of subindex - 1*/ + UNS8* TestMaster_obj1F22[] = + { + "", + "\x01\x00\x00\x00\x17\x10\x00\x02\x00\x00\x00\xe8\x03" + }; + subindex TestMaster_Index1F22[] = { - NULL, + { RO, uint8, sizeof (UNS8), (void*)&TestMaster_highestSubIndex_obj1F22 }, + { RW, domain, 0, (void*)&TestMaster_obj1F22[0] }, + { RW, domain, 13, (void*)&TestMaster_obj1F22[1] } }; + +/* index 0x2000 : Mapped variable MasterMap1 */ subindex TestMaster_Index2000[] = { { RW, uint8, sizeof (UNS8), (void*)&MasterMap1 } @@ -273,6 +267,7 @@ const indextable TestMaster_objdict[] = { (subindex*)TestMaster_Index1401,sizeof(TestMaster_Index1401)/sizeof(TestMaster_Index1401[0]), 0x1401}, { (subindex*)TestMaster_Index1600,sizeof(TestMaster_Index1600)/sizeof(TestMaster_Index1600[0]), 0x1600}, { (subindex*)TestMaster_Index1601,sizeof(TestMaster_Index1601)/sizeof(TestMaster_Index1601[0]), 0x1601}, + { (subindex*)TestMaster_Index1F22,sizeof(TestMaster_Index1F22)/sizeof(TestMaster_Index1F22[0]), 0x1F22}, { (subindex*)TestMaster_Index2000,sizeof(TestMaster_Index2000)/sizeof(TestMaster_Index2000[0]), 0x2000}, { (subindex*)TestMaster_Index2001,sizeof(TestMaster_Index2001)/sizeof(TestMaster_Index2001[0]), 0x2001}, { (subindex*)TestMaster_Index2002,sizeof(TestMaster_Index2002)/sizeof(TestMaster_Index2002[0]), 0x2002}, @@ -288,8 +283,8 @@ const indextable * TestMaster_scanIndexOD (UNS16 wIndex, UNS32 * errorCode, ODCa case 0x1001: i = 1;break; case 0x1005: i = 2;*callbacks = TestMaster_Index1005_callbacks; break; case 0x1006: i = 3;*callbacks = TestMaster_Index1006_callbacks; break; - case 0x1010: i = 4;*callbacks = TestMaster_Index1010_callbacks; break; - case 0x1011: i = 5;*callbacks = TestMaster_Index1011_callbacks; break; + case 0x1010: i = 4;break; + case 0x1011: i = 5;break; case 0x1016: i = 6;break; case 0x1018: i = 7;break; case 0x1280: i = 8;break; @@ -297,10 +292,11 @@ const indextable * TestMaster_scanIndexOD (UNS16 wIndex, UNS32 * errorCode, ODCa case 0x1401: i = 10;break; case 0x1600: i = 11;break; case 0x1601: i = 12;break; - case 0x2000: i = 13;*callbacks = MasterMap1_callbacks; break; - case 0x2001: i = 14;break; - case 0x2002: i = 15;break; - case 0x2003: i = 16;break; + case 0x1F22: i = 13;break; + case 0x2000: i = 14;break; + case 0x2001: i = 15;break; + case 0x2002: i = 16;break; + case 0x2003: i = 17;break; default: *errorCode = OD_NO_SUCH_OBJECT; return NULL; diff --git a/examples/TestMasterSlave/TestMaster.h b/examples/TestMasterSlave/TestMaster.h index 37be524..bde9340 100644 --- a/examples/TestMasterSlave/TestMaster.h +++ b/examples/TestMasterSlave/TestMaster.h @@ -10,10 +10,7 @@ const indextable * TestMaster_scanIndexOD (UNS16 wIndex, UNS32 * errorCode, ODCa /* Master node data struct */ extern CO_Data TestMaster_Data; -extern ODCallback_t Store_parameters_callbacks[]; /* Callbacks of index0x1010 */ -extern ODCallback_t Restore_Default_Parameters_callbacks[]; /* Callbacks of index0x1011 */ extern UNS8 MasterMap1; /* Mapped at index 0x2000, subindex 0x00*/ -extern ODCallback_t MasterMap1_callbacks[]; /* Callbacks of index0x2000 */ extern UNS8 MasterMap2; /* Mapped at index 0x2001, subindex 0x00*/ extern UNS8 MasterMap3; /* Mapped at index 0x2002, subindex 0x00*/ extern UNS8 MasterMap4; /* Mapped at index 0x2003, subindex 0x00*/ diff --git a/examples/TestMasterSlave/TestMaster.od b/examples/TestMasterSlave/TestMaster.od index 1c46975..c8a6cda 100644 --- a/examples/TestMasterSlave/TestMaster.od +++ b/examples/TestMasterSlave/TestMaster.od @@ -1,10 +1,5014 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - +TestMaster + @@ -23,7 +5027,7 @@ - + @@ -35,17 +5039,9 @@ - - - - - - - - - + @@ -53,9 +5049,27 @@ + + + + + + + + + + + + + + + + + + - + @@ -64,42 +5078,33 @@ - + - - - - - - - - - + - - + + - - - - + + + - + @@ -107,55 +5112,95 @@ - - - + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + - + + + - + - - + + - - - - - - - + + + + + + + + + + + + + + + + + + MasterMap1 + + + + + + + MasterMap1 - - - - - - - + + - - - - + + - - + + @@ -170,14 +5215,14 @@ - + MasterMap2 - + MasterMap2 @@ -186,16 +5231,16 @@ - - + + - - + + @@ -210,14 +5255,14 @@ - + MasterMap3 - + MasterMap3 @@ -226,16 +5271,16 @@ - - + + - - + + @@ -250,14 +5295,14 @@ - + MasterMap4 - + MasterMap4 @@ -265,50 +5310,196 @@ + + - - + + - - + + + + + + + + + + + + + + + + + + + + - + - + - + + + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - +DS-401 +master + diff --git a/examples/TestMasterSlave/TestMasterSlave.c b/examples/TestMasterSlave/TestMasterSlave.c index 7511ff2..04d2263 100644 --- a/examples/TestMasterSlave/TestMasterSlave.c +++ b/examples/TestMasterSlave/TestMasterSlave.c @@ -49,8 +49,8 @@ UNS32 OnMasterMap1Update(CO_Data* d, const indextable * unsused_indextable, UNS8 return 0; } -s_BOARD SlaveBoard = {"0", "500K"}; -s_BOARD MasterBoard = {"1", "500K"}; +s_BOARD SlaveBoard = {"0", "125K"}; +s_BOARD MasterBoard = {"1", "125K"}; #if !defined(WIN32) || defined(__CYGWIN__) void catch_signal(int sig) @@ -69,7 +69,8 @@ void help() printf("* A simple example for PC. It does implement 2 CanOpen *\n"); printf("* nodes in the same process. A master and a slave. Both *\n"); printf("* communicate together, exchanging periodically NMT, SYNC, *\n"); - printf("* SDO and PDO. *\n"); + printf("* SDO and PDO. Master configure heartbeat producer time *\n"); + printf("* at 1000 ms for slave node-id 0x02 by concise DCF. *\n"); printf("* *\n"); printf("* Usage: *\n"); printf("* ./TestMasterSlave [OPTIONS] *\n"); @@ -92,7 +93,7 @@ void help() void InitNodes(CO_Data* d, UNS32 id) { /****************************** INITIALISATION SLAVE *******************************/ - if(SlaveBoard.baudrate) { + if(strcmp(SlaveBoard.baudrate, "none")) { /* Defining the node Id */ setNodeId(&TestSlave_Data, 0x02); /* init */ @@ -100,21 +101,15 @@ void InitNodes(CO_Data* d, UNS32 id) } /****************************** INITIALISATION MASTER *******************************/ - if(MasterBoard.baudrate){ + if(strcmp(MasterBoard.baudrate, "none")){ RegisterSetODentryCallBack(&TestMaster_Data, 0x2000, 0, &OnMasterMap1Update); - + /* Defining the node Id */ setNodeId(&TestMaster_Data, 0x01); /* init */ setState(&TestMaster_Data, Initialisation); - - /****************************** START *******************************/ - /* Put the master in operational mode */ - setState(&TestMaster_Data, Operational); - - /* Ask slave node to go in operational mode */ - masterSendNMTstateChange (&TestMaster_Data, 0x02, NMT_Start_Node); + } } @@ -188,7 +183,8 @@ int main(int argc,char **argv) LoadCanDriver(LibraryPath); #endif // Open CAN devices - if(strcmp( SlaveBoard.baudrate, "none")){ + + if(strcmp(SlaveBoard.baudrate, "none")){ TestSlave_Data.heartbeatError = TestSlave_heartbeatError; TestSlave_Data.initialisation = TestSlave_initialisation; @@ -204,8 +200,7 @@ int main(int argc,char **argv) goto fail_slave; } } - - if(strcmp( MasterBoard.baudrate, "none")){ + if(strcmp(MasterBoard.baudrate, "none")){ TestMaster_Data.heartbeatError = TestMaster_heartbeatError; TestMaster_Data.initialisation = TestMaster_initialisation; @@ -216,27 +211,31 @@ int main(int argc,char **argv) TestMaster_Data.post_TPDO = TestMaster_post_TPDO; if(!canOpen(&MasterBoard,&TestMaster_Data)){ - eprintf("Cannot open Master Board (%s,%s)\n",SlaveBoard.busname, SlaveBoard.baudrate); + eprintf("Cannot open Master Board (%s,%s)\n",MasterBoard.busname, MasterBoard.baudrate); goto fail_master; } } - + sleep(2); // Start timer thread StartTimerLoop(&InitNodes); // wait Ctrl-C + pause(); eprintf("Finishing.\n"); + masterSendNMTstateChange (&TestMaster_Data, 0x02, NMT_Reset_Node); + eprintf("reset\n"); + // Stop master + setState(&TestMaster_Data, Stopped); + // Stop timer thread StopTimerLoop(); // Close CAN devices (and can threads) - if(strcmp( SlaveBoard.baudrate, "none")) canClose(&TestSlave_Data); + if(strcmp(SlaveBoard.baudrate, "none")) canClose(&TestSlave_Data); fail_master: - if(strcmp( MasterBoard.baudrate, "none")) canClose(&TestMaster_Data); + if(strcmp(MasterBoard.baudrate, "none")) canClose(&TestMaster_Data); fail_slave: - - - return 0; + return 0; } diff --git a/examples/TestMasterSlave/TestSlave.c b/examples/TestMasterSlave/TestSlave.c index 92b4217..67563db 100644 --- a/examples/TestMasterSlave/TestSlave.c +++ b/examples/TestMasterSlave/TestSlave.c @@ -130,7 +130,11 @@ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ UNS32 TestSlave_obj1016[]={0}; /* index 0x1017 : Producer Heartbeat Time. */ - UNS16 TestSlave_obj1017 = 0x3E8; /* 1000 */ + UNS16 TestSlave_obj1017 = 0x0; /* 0 */ + ODCallback_t TestSlave_Index1017_callbacks[] = + { + NULL, + }; subindex TestSlave_Index1017[] = { { RW, uint16, sizeof (UNS16), (void*)&TestSlave_obj1017 } @@ -280,7 +284,7 @@ const indextable * TestSlave_scanIndexOD (UNS16 wIndex, UNS32 * errorCode, ODCal case 0x1006: i = 3;*callbacks = TestSlave_Index1006_callbacks; break; case 0x1010: i = 4;*callbacks = TestSlave_Index1010_callbacks; break; case 0x1011: i = 5;*callbacks = TestSlave_Index1011_callbacks; break; - case 0x1017: i = 6;break; + case 0x1017: i = 6;*callbacks = TestSlave_Index1017_callbacks; break; case 0x1018: i = 7;break; case 0x1200: i = 8;break; case 0x1800: i = 9;break; diff --git a/examples/TestMasterSlave/TestSlave.od b/examples/TestMasterSlave/TestSlave.od index 73ec6a8..67dd19a 100644 --- a/examples/TestMasterSlave/TestSlave.od +++ b/examples/TestMasterSlave/TestSlave.od @@ -1,10 +1,10 @@ - - + + - + @@ -22,8 +22,14 @@ - - + + + + + + + + @@ -34,22 +40,22 @@ - - - + + + + + + + - - - - - + @@ -58,41 +64,41 @@ - + + + + + + + + - + - + - - - - - - - - + - + @@ -100,22 +106,16 @@ - - - - - - - - + + - + - + - + @@ -124,7 +124,16 @@ - + + + + + + + + + + @@ -133,10 +142,10 @@ - + - + @@ -145,7 +154,7 @@ - + @@ -156,7 +165,7 @@ - + @@ -164,18 +173,18 @@ - + - + - - + + @@ -207,15 +216,15 @@ - + - - + + @@ -247,15 +256,15 @@ - + - - + + @@ -287,15 +296,15 @@ - + - - + + @@ -326,7 +335,7 @@ - + diff --git a/examples/TestMasterSlave/TestSlaveC.c b/examples/TestMasterSlave/TestSlaveC.c new file mode 100644 index 0000000..55f0102 --- /dev/null +++ b/examples/TestMasterSlave/TestSlaveC.c @@ -0,0 +1,329 @@ + +/* File generated by gen_cfile.py. Should not be modified. */ + +#include "TestSlaveC.h" + +/**************************************************************************/ +/* Declaration of the mapped variables */ +/**************************************************************************/ +UNS8 SlaveMap1 = 0x0; /* Mapped at index 0x2000, subindex 0x00 */ +UNS8 SlaveMap2 = 0x0; /* Mapped at index 0x2001, subindex 0x00 */ +UNS8 SlaveMap3 = 0x0; /* Mapped at index 0x2002, subindex 0x00 */ +UNS8 SlaveMap4 = 0x0; /* Mapped at index 0x2003, subindex 0x00 */ + +/**************************************************************************/ +/* Declaration of the value range types */ +/**************************************************************************/ + +UNS32 TestSlave_valueRangeTest (UNS8 typeValue, void * value) +{ + switch (typeValue) { + } + return 0; +} + +/**************************************************************************/ +/* The node id */ +/**************************************************************************/ +/* node_id default value.*/ +UNS8 TestSlave_bDeviceNodeId = 0x00; + +/**************************************************************************/ +/* Array of message processing information */ + +const UNS8 TestSlave_iam_a_slave = 1; + +TIMER_HANDLE TestSlave_heartBeatTimers[1]; + +/* +$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ + + OBJECT DICTIONARY + +$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ +*/ + +/* index 0x1000 : Device Type. */ + UNS32 TestSlave_obj1000 = 0x12D; /* 301 */ + subindex TestSlave_Index1000[] = + { + { RO, uint32, sizeof (UNS32), (void*)&TestSlave_obj1000 } + }; + +/* index 0x1001 : Error Register. */ + UNS8 TestSlave_obj1001 = 0x0; /* 0 */ + subindex TestSlave_Index1001[] = + { + { RO, uint8, sizeof (UNS8), (void*)&TestSlave_obj1001 } + }; + +/* index 0x1005 : SYNC COB ID. */ + UNS32 TestSlave_obj1005 = 0x80; /* 128 */ + ODCallback_t TestSlave_Index1005_callbacks[] = + { + NULL, + }; + subindex TestSlave_Index1005[] = + { + { RW, uint32, sizeof (UNS32), (void*)&TestSlave_obj1005 } + }; + +/* index 0x1006 : Communication / Cycle Period. */ + UNS32 TestSlave_obj1006 = 0x0; /* 0 */ + ODCallback_t TestSlave_Index1006_callbacks[] = + { + NULL, + }; + subindex TestSlave_Index1006[] = + { + { RW, uint32, sizeof (UNS32), (void*)&TestSlave_obj1006 } + }; + +/* index 0x1010 : Store parameters. */ + UNS8 TestSlave_highestSubIndex_obj1010 = 4; /* number of subindex - 1*/ + UNS32 TestSlave_obj1010_Save_All_Parameters = 0x0; /* 0 */ + UNS32 TestSlave_obj1010_Save_Communication_Parameters = 0x0; /* 0 */ + UNS32 TestSlave_obj1010_Save_Application_Parameters = 0x0; /* 0 */ + UNS32 TestSlave_obj1010_Save_Manufacturer_Parameters = 0x0; /* 0 */ + ODCallback_t TestSlave_Index1010_callbacks[] = + { + NULL, + NULL, + NULL, + NULL, + NULL, + }; + subindex TestSlave_Index1010[] = + { + { RO, uint8, sizeof (UNS8), (void*)&TestSlave_highestSubIndex_obj1010 }, + { RW, uint32, sizeof (UNS32), (void*)&TestSlave_obj1010_Save_All_Parameters }, + { RW, uint32, sizeof (UNS32), (void*)&TestSlave_obj1010_Save_Communication_Parameters }, + { RW, uint32, sizeof (UNS32), (void*)&TestSlave_obj1010_Save_Application_Parameters }, + { RW, uint32, sizeof (UNS32), (void*)&TestSlave_obj1010_Save_Manufacturer_Parameters } + }; + +/* index 0x1011 : Restore Default Parameters. */ + UNS8 TestSlave_highestSubIndex_obj1011 = 4; /* number of subindex - 1*/ + UNS32 TestSlave_obj1011_Restore_All_Default_Parameters = 0x0; /* 0 */ + UNS32 TestSlave_obj1011_Restore_Communication_Default_Parameters = 0x0; /* 0 */ + UNS32 TestSlave_obj1011_Restore_Application_Default_Parameters = 0x0; /* 0 */ + UNS32 TestSlave_obj1011_Restore_Manufacturer_Default_Parameters = 0x0; /* 0 */ + ODCallback_t TestSlave_Index1011_callbacks[] = + { + NULL, + NULL, + NULL, + NULL, + NULL, + }; + subindex TestSlave_Index1011[] = + { + { RO, uint8, sizeof (UNS8), (void*)&TestSlave_highestSubIndex_obj1011 }, + { RW, uint32, sizeof (UNS32), (void*)&TestSlave_obj1011_Restore_All_Default_Parameters }, + { RW, uint32, sizeof (UNS32), (void*)&TestSlave_obj1011_Restore_Communication_Default_Parameters }, + { RW, uint32, sizeof (UNS32), (void*)&TestSlave_obj1011_Restore_Application_Default_Parameters }, + { RW, uint32, sizeof (UNS32), (void*)&TestSlave_obj1011_Restore_Manufacturer_Default_Parameters } + }; + +/* index 0x1016 : Consumer Heartbeat Time */ + UNS8 TestSlave_highestSubIndex_obj1016 = 0; + UNS32 TestSlave_obj1016[]={0}; + +/* index 0x1017 : Producer Heartbeat Time. */ + UNS16 TestSlave_obj1017 = 0x0; /* 0 */ + subindex TestSlave_Index1017[] = + { + { RW, uint16, sizeof (UNS16), (void*)&TestSlave_obj1017 } + }; + +/* index 0x1018 : Identity. */ + UNS8 TestSlave_highestSubIndex_obj1018 = 4; /* number of subindex - 1*/ + UNS32 TestSlave_obj1018_Vendor_ID = 0x0; /* 0 */ + UNS32 TestSlave_obj1018_Product_Code = 0x0; /* 0 */ + UNS32 TestSlave_obj1018_Revision_Number = 0x0; /* 0 */ + UNS32 TestSlave_obj1018_Serial_Number = 0x0; /* 0 */ + subindex TestSlave_Index1018[] = + { + { RO, uint8, sizeof (UNS8), (void*)&TestSlave_highestSubIndex_obj1018 }, + { RO, uint32, sizeof (UNS32), (void*)&TestSlave_obj1018_Vendor_ID }, + { RO, uint32, sizeof (UNS32), (void*)&TestSlave_obj1018_Product_Code }, + { RO, uint32, sizeof (UNS32), (void*)&TestSlave_obj1018_Revision_Number }, + { RO, uint32, sizeof (UNS32), (void*)&TestSlave_obj1018_Serial_Number } + }; + +/* index 0x1200 : Server SDO Parameter. */ + UNS8 TestSlave_highestSubIndex_obj1200 = 2; /* number of subindex - 1*/ + UNS32 TestSlave_obj1200_COB_ID_Client_to_Server_Receive_SDO = 0x601; /* 1537 */ + UNS32 TestSlave_obj1200_COB_ID_Server_to_Client_Transmit_SDO = 0x581; /* 1409 */ + subindex TestSlave_Index1200[] = + { + { RO, uint8, sizeof (UNS8), (void*)&TestSlave_highestSubIndex_obj1200 }, + { RO, uint32, sizeof (UNS32), (void*)&TestSlave_obj1200_COB_ID_Client_to_Server_Receive_SDO }, + { RO, uint32, sizeof (UNS32), (void*)&TestSlave_obj1200_COB_ID_Server_to_Client_Transmit_SDO } + }; + +/* index 0x1800 : Transmit PDO 1 Parameter. */ + UNS8 TestSlave_highestSubIndex_obj1800 = 5; /* number of subindex - 1*/ + UNS32 TestSlave_obj1800_COB_ID_used_by_PDO = 0x182; /* 386 */ + UNS8 TestSlave_obj1800_Transmission_Type = 0x1; /* 1 */ + UNS16 TestSlave_obj1800_Inhibit_Time = 0x0; /* 0 */ + UNS16 TestSlave_obj1800_Compatibility_Entry = 0x0; /* 0 */ + UNS16 TestSlave_obj1800_Event_Timer = 0x0; /* 0 */ + subindex TestSlave_Index1800[] = + { + { RO, uint8, sizeof (UNS8), (void*)&TestSlave_highestSubIndex_obj1800 }, + { RW, uint32, sizeof (UNS32), (void*)&TestSlave_obj1800_COB_ID_used_by_PDO }, + { RW|TO_BE_SAVE, uint8, sizeof (UNS8), (void*)&TestSlave_obj1800_Transmission_Type }, + { RW|TO_BE_SAVE, uint16, sizeof (UNS16), (void*)&TestSlave_obj1800_Inhibit_Time }, + { RW, uint16, sizeof (UNS16), (void*)&TestSlave_obj1800_Compatibility_Entry }, + { RW, uint16, sizeof (UNS16), (void*)&TestSlave_obj1800_Event_Timer } + }; + +/* index 0x1801 : Transmit PDO 2 Parameter. */ + UNS8 TestSlave_highestSubIndex_obj1801 = 5; /* number of subindex - 1*/ + UNS32 TestSlave_obj1801_COB_ID_used_by_PDO = 0x282; /* 642 */ + UNS8 TestSlave_obj1801_Transmission_Type = 0x1; /* 1 */ + UNS16 TestSlave_obj1801_Inhibit_Time = 0x0; /* 0 */ + UNS16 TestSlave_obj1801_Compatibility_Entry = 0x0; /* 0 */ + UNS16 TestSlave_obj1801_Event_Timer = 0x0; /* 0 */ + subindex TestSlave_Index1801[] = + { + { RO, uint8, sizeof (UNS8), (void*)&TestSlave_highestSubIndex_obj1801 }, + { RW, uint32, sizeof (UNS32), (void*)&TestSlave_obj1801_COB_ID_used_by_PDO }, + { RW, uint8, sizeof (UNS8), (void*)&TestSlave_obj1801_Transmission_Type }, + { RW, uint16, sizeof (UNS16), (void*)&TestSlave_obj1801_Inhibit_Time }, + { RW, uint16, sizeof (UNS16), (void*)&TestSlave_obj1801_Compatibility_Entry }, + { RW, uint16, sizeof (UNS16), (void*)&TestSlave_obj1801_Event_Timer } + }; + +/* index 0x1A00 : Transmit PDO 1 Mapping. */ + UNS8 TestSlave_highestSubIndex_obj1A00 = 2; /* number of subindex - 1*/ + UNS32 TestSlave_obj1A00[] = + { + 0x20000008, /* 536870920 */ + 0x20010008 /* 536936456 */ + }; + subindex TestSlave_Index1A00[] = + { + { RW, uint8, sizeof (UNS8), (void*)&TestSlave_highestSubIndex_obj1A00 }, + { RW, uint32, sizeof (UNS32), (void*)&TestSlave_obj1A00[0] }, + { RW, uint32, sizeof (UNS32), (void*)&TestSlave_obj1A00[1] } + }; + +/* index 0x1A01 : Transmit PDO 2 Mapping. */ + UNS8 TestSlave_highestSubIndex_obj1A01 = 2; /* number of subindex - 1*/ + UNS32 TestSlave_obj1A01[] = + { + 0x20020008, /* 537001992 */ + 0x20030008 /* 537067528 */ + }; + subindex TestSlave_Index1A01[] = + { + { RW, uint8, sizeof (UNS8), (void*)&TestSlave_highestSubIndex_obj1A01 }, + { RW, uint32, sizeof (UNS32), (void*)&TestSlave_obj1A01[0] }, + { RW, uint32, sizeof (UNS32), (void*)&TestSlave_obj1A01[1] } + }; + +/* index 0x2000 : Mapped variable SlaveMap1 */ + subindex TestSlave_Index2000[] = + { + { RW, uint8, sizeof (UNS8), (void*)&SlaveMap1 } + }; + +/* index 0x2001 : Mapped variable SlaveMap2 */ + subindex TestSlave_Index2001[] = + { + { RW, uint8, sizeof (UNS8), (void*)&SlaveMap2 } + }; + +/* index 0x2002 : Mapped variable SlaveMap3 */ + subindex TestSlave_Index2002[] = + { + { RW, uint8, sizeof (UNS8), (void*)&SlaveMap3 } + }; + +/* index 0x2003 : Mapped variable SlaveMap4 */ + subindex TestSlave_Index2003[] = + { + { RW, uint8, sizeof (UNS8), (void*)&SlaveMap4 } + }; + +const indextable TestSlave_objdict[] = +{ + { (subindex*)TestSlave_Index1000,sizeof(TestSlave_Index1000)/sizeof(TestSlave_Index1000[0]), 0x1000}, + { (subindex*)TestSlave_Index1001,sizeof(TestSlave_Index1001)/sizeof(TestSlave_Index1001[0]), 0x1001}, + { (subindex*)TestSlave_Index1005,sizeof(TestSlave_Index1005)/sizeof(TestSlave_Index1005[0]), 0x1005}, + { (subindex*)TestSlave_Index1006,sizeof(TestSlave_Index1006)/sizeof(TestSlave_Index1006[0]), 0x1006}, + { (subindex*)TestSlave_Index1010,sizeof(TestSlave_Index1010)/sizeof(TestSlave_Index1010[0]), 0x1010}, + { (subindex*)TestSlave_Index1011,sizeof(TestSlave_Index1011)/sizeof(TestSlave_Index1011[0]), 0x1011}, + { (subindex*)TestSlave_Index1017,sizeof(TestSlave_Index1017)/sizeof(TestSlave_Index1017[0]), 0x1017}, + { (subindex*)TestSlave_Index1018,sizeof(TestSlave_Index1018)/sizeof(TestSlave_Index1018[0]), 0x1018}, + { (subindex*)TestSlave_Index1200,sizeof(TestSlave_Index1200)/sizeof(TestSlave_Index1200[0]), 0x1200}, + { (subindex*)TestSlave_Index1800,sizeof(TestSlave_Index1800)/sizeof(TestSlave_Index1800[0]), 0x1800}, + { (subindex*)TestSlave_Index1801,sizeof(TestSlave_Index1801)/sizeof(TestSlave_Index1801[0]), 0x1801}, + { (subindex*)TestSlave_Index1A00,sizeof(TestSlave_Index1A00)/sizeof(TestSlave_Index1A00[0]), 0x1A00}, + { (subindex*)TestSlave_Index1A01,sizeof(TestSlave_Index1A01)/sizeof(TestSlave_Index1A01[0]), 0x1A01}, + { (subindex*)TestSlave_Index2000,sizeof(TestSlave_Index2000)/sizeof(TestSlave_Index2000[0]), 0x2000}, + { (subindex*)TestSlave_Index2001,sizeof(TestSlave_Index2001)/sizeof(TestSlave_Index2001[0]), 0x2001}, + { (subindex*)TestSlave_Index2002,sizeof(TestSlave_Index2002)/sizeof(TestSlave_Index2002[0]), 0x2002}, + { (subindex*)TestSlave_Index2003,sizeof(TestSlave_Index2003)/sizeof(TestSlave_Index2003[0]), 0x2003}, +}; + +const indextable * TestSlave_scanIndexOD (UNS16 wIndex, UNS32 * errorCode, ODCallback_t **callbacks) +{ + int i; + *callbacks = NULL; + switch(wIndex){ + case 0x1000: i = 0;break; + case 0x1001: i = 1;break; + case 0x1005: i = 2;*callbacks = TestSlave_Index1005_callbacks; break; + case 0x1006: i = 3;*callbacks = TestSlave_Index1006_callbacks; break; + case 0x1010: i = 4;*callbacks = TestSlave_Index1010_callbacks; break; + case 0x1011: i = 5;*callbacks = TestSlave_Index1011_callbacks; break; + case 0x1017: i = 6;break; + case 0x1018: i = 7;break; + case 0x1200: i = 8;break; + case 0x1800: i = 9;break; + case 0x1801: i = 10;break; + case 0x1A00: i = 11;break; + case 0x1A01: i = 12;break; + case 0x2000: i = 13;break; + case 0x2001: i = 14;break; + case 0x2002: i = 15;break; + case 0x2003: i = 16;break; + default: + *errorCode = OD_NO_SUCH_OBJECT; + return NULL; + } + *errorCode = OD_SUCCESSFUL; + return &TestSlave_objdict[i]; +} + +/* To count at which received SYNC a PDO must be sent. + * Even if no pdoTransmit are defined, at least one entry is computed + * for compilations issues. + */ +UNS8 TestSlave_count_sync[2] = {0,}; + +quick_index TestSlave_firstIndex = { + 8, /* SDO_SVR */ + 0, /* SDO_CLT */ + 0, /* PDO_RCV */ + 0, /* PDO_RCV_MAP */ + 9, /* PDO_TRS */ + 11 /* PDO_TRS_MAP */ +}; + +quick_index TestSlave_lastIndex = { + 8, /* SDO_SVR */ + 0, /* SDO_CLT */ + 0, /* PDO_RCV */ + 0, /* PDO_RCV_MAP */ + 10, /* PDO_TRS */ + 12 /* PDO_TRS_MAP */ +}; + +UNS16 TestSlave_ObjdictSize = sizeof(TestSlave_objdict)/sizeof(TestSlave_objdict[0]); + +CO_Data TestSlave_Data = CANOPEN_NODE_DATA_INITIALIZER(TestSlave); + diff --git a/examples/TestMasterSlave/TestSlaveC.h b/examples/TestMasterSlave/TestSlaveC.h new file mode 100644 index 0000000..4b9aada --- /dev/null +++ b/examples/TestMasterSlave/TestSlaveC.h @@ -0,0 +1,18 @@ + +/* File generated by gen_cfile.py. Should not be modified. */ + +#include "data.h" + +/* Prototypes of function provided by object dictionnary */ +UNS32 TestSlave_valueRangeTest (UNS8 typeValue, void * value); +const indextable * TestSlave_scanIndexOD (UNS16 wIndex, UNS32 * errorCode, ODCallback_t **callbacks); + +/* Master node data struct */ +extern CO_Data TestSlave_Data; + +extern ODCallback_t Store_parameters_callbacks[]; /* Callbacks of index0x1010 */ +extern ODCallback_t Restore_Default_Parameters_callbacks[]; /* Callbacks of index0x1011 */ +extern UNS8 SlaveMap1; /* Mapped at index 0x2000, subindex 0x00*/ +extern UNS8 SlaveMap2; /* Mapped at index 0x2001, subindex 0x00*/ +extern UNS8 SlaveMap3; /* Mapped at index 0x2002, subindex 0x00*/ +extern UNS8 SlaveMap4; /* Mapped at index 0x2003, subindex 0x00*/ -- 2.39.2