diff -r 31dc4ec8710c -r 7802a7d5584f examples/kerneltest/TestMasterSlave.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/kerneltest/TestMasterSlave.c Tue Feb 12 09:44:55 2008 +0100 @@ -0,0 +1,103 @@ +#include "canfestival.h" + +#include "Master.h" +#include "Slave.h" +#include "TestMasterSlave.h" + + +static UNS32 OnMasterMap1Update(CO_Data* d, const indextable * unsused_indextable, UNS8 unsused_bSubindex) +{ + eprintf("OnSlaveMap1Update:%d\n", SlaveMap1); + return 0; +} + +s_BOARD SlaveBoard = {"0", "125K"}; +s_BOARD MasterBoard = {"1", "125K"}; + +/*************************** INIT *****************************************/ +static void InitNodes(CO_Data* d, UNS32 id) +{ + /****************************** INITIALISATION SLAVE *******************************/ + if(strcmp(SlaveBoard.baudrate, "none")) { + setNodeId(&TestSlave_Data, 0x02); + + setState(&TestSlave_Data, Initialisation); + } + + /****************************** INITIALISATION MASTER *******************************/ + if(strcmp(MasterBoard.baudrate, "none")){ + RegisterSetODentryCallBack(&TestMaster_Data, 0x2000, 0, &OnMasterMap1Update); + + // Defining the node Id + setNodeId(&TestMaster_Data, 0x01); + + setState(&TestMaster_Data, Initialisation); + } +} + +int TestMasterSlave_start (void) +{ + if(strcmp(SlaveBoard.baudrate, "none")){ + + TestSlave_Data.heartbeatError = TestSlave_heartbeatError; + TestSlave_Data.initialisation = TestSlave_initialisation; + TestSlave_Data.preOperational = TestSlave_preOperational; + TestSlave_Data.operational = TestSlave_operational; + TestSlave_Data.stopped = TestSlave_stopped; + TestSlave_Data.post_sync = TestSlave_post_sync; + TestSlave_Data.post_TPDO = TestSlave_post_TPDO; + TestSlave_Data.storeODSubIndex = TestSlave_storeODSubIndex; + TestSlave_Data.post_emcy = TestSlave_post_emcy; + + if(!canOpen(&SlaveBoard,&TestSlave_Data)){ + eprintf("Cannot open Slave Board (%s,%s)\n",SlaveBoard.busname, SlaveBoard.baudrate); + return 1; + } + } + if(strcmp(MasterBoard.baudrate, "none")){ + + TestMaster_Data.heartbeatError = TestMaster_heartbeatError; + TestMaster_Data.initialisation = TestMaster_initialisation; + TestMaster_Data.preOperational = TestMaster_preOperational; + TestMaster_Data.operational = TestMaster_operational; + TestMaster_Data.stopped = TestMaster_stopped; + TestMaster_Data.post_sync = TestMaster_post_sync; + TestMaster_Data.post_TPDO = TestMaster_post_TPDO; + TestMaster_Data.post_emcy = TestMaster_post_emcy; + TestMaster_Data.post_SlaveBootup=TestMaster_post_SlaveBootup; + + if(!canOpen(&MasterBoard,&TestMaster_Data)){ + eprintf("Cannot open Master Board (%s,%s)\n",MasterBoard.busname, MasterBoard.baudrate); + if(strcmp(MasterBoard.baudrate, "none")) canClose(&TestMaster_Data); + return 1; + } + } + + // Start timer thread + StartTimerLoop(&InitNodes); + + return 0; +} + +void TestMasterSlave_stop (void) +{ + eprintf("Finishing.\n"); + + EnterMutex(); + masterSendNMTstateChange (&TestMaster_Data, 0x02, NMT_Reset_Node); + LeaveMutex(); + + // Stop master + EnterMutex(); + setState(&TestMaster_Data, Stopped); + LeaveMutex(); + + // Stop timer thread + StopTimerLoop(); + + // Close CAN devices (and can threads) + if(strcmp(SlaveBoard.baudrate, "none")) canClose(&TestSlave_Data); + if(strcmp(MasterBoard.baudrate, "none")) canClose(&TestMaster_Data); + + eprintf("End.\n"); +}