etisserant@391: #include "canfestival.h" etisserant@391: etisserant@391: #include "Master.h" etisserant@391: #include "Slave.h" etisserant@391: #include "TestMasterSlave.h" etisserant@391: etisserant@391: etisserant@391: static UNS32 OnMasterMap1Update(CO_Data* d, const indextable * unsused_indextable, UNS8 unsused_bSubindex) etisserant@391: { etisserant@391: eprintf("OnSlaveMap1Update:%d\n", SlaveMap1); etisserant@391: return 0; etisserant@391: } etisserant@391: etisserant@391: s_BOARD SlaveBoard = {"0", "125K"}; etisserant@391: s_BOARD MasterBoard = {"1", "125K"}; etisserant@391: etisserant@391: /*************************** INIT *****************************************/ etisserant@391: static void InitNodes(CO_Data* d, UNS32 id) etisserant@391: { etisserant@391: /****************************** INITIALISATION SLAVE *******************************/ etisserant@391: if(strcmp(SlaveBoard.baudrate, "none")) { etisserant@391: setNodeId(&TestSlave_Data, 0x02); etisserant@391: etisserant@391: setState(&TestSlave_Data, Initialisation); etisserant@391: } etisserant@391: etisserant@391: /****************************** INITIALISATION MASTER *******************************/ etisserant@391: if(strcmp(MasterBoard.baudrate, "none")){ etisserant@391: RegisterSetODentryCallBack(&TestMaster_Data, 0x2000, 0, &OnMasterMap1Update); etisserant@391: etisserant@391: // Defining the node Id etisserant@391: setNodeId(&TestMaster_Data, 0x01); etisserant@391: etisserant@391: setState(&TestMaster_Data, Initialisation); etisserant@391: } etisserant@391: } etisserant@391: greg@467: /*************************** EXIT *****************************************/ greg@467: void Exit(CO_Data* d, UNS32 id) greg@467: { greg@467: masterSendNMTstateChange(&TestMaster_Data, 0x02, NMT_Reset_Node); greg@467: greg@467: //Stop master greg@467: setState(&TestMaster_Data, Stopped); greg@467: } greg@467: greg@467: etisserant@391: int TestMasterSlave_start (void) etisserant@391: { greg@467: TimerInit(); greg@467: etisserant@391: if(strcmp(SlaveBoard.baudrate, "none")){ etisserant@391: etisserant@391: TestSlave_Data.heartbeatError = TestSlave_heartbeatError; etisserant@391: TestSlave_Data.initialisation = TestSlave_initialisation; etisserant@391: TestSlave_Data.preOperational = TestSlave_preOperational; etisserant@391: TestSlave_Data.operational = TestSlave_operational; etisserant@391: TestSlave_Data.stopped = TestSlave_stopped; etisserant@391: TestSlave_Data.post_sync = TestSlave_post_sync; etisserant@391: TestSlave_Data.post_TPDO = TestSlave_post_TPDO; etisserant@391: TestSlave_Data.storeODSubIndex = TestSlave_storeODSubIndex; etisserant@391: TestSlave_Data.post_emcy = TestSlave_post_emcy; etisserant@391: etisserant@391: if(!canOpen(&SlaveBoard,&TestSlave_Data)){ etisserant@391: eprintf("Cannot open Slave Board (%s,%s)\n",SlaveBoard.busname, SlaveBoard.baudrate); etisserant@391: return 1; etisserant@391: } etisserant@391: } etisserant@391: if(strcmp(MasterBoard.baudrate, "none")){ etisserant@391: etisserant@391: TestMaster_Data.heartbeatError = TestMaster_heartbeatError; etisserant@391: TestMaster_Data.initialisation = TestMaster_initialisation; etisserant@391: TestMaster_Data.preOperational = TestMaster_preOperational; etisserant@391: TestMaster_Data.operational = TestMaster_operational; etisserant@391: TestMaster_Data.stopped = TestMaster_stopped; etisserant@391: TestMaster_Data.post_sync = TestMaster_post_sync; etisserant@391: TestMaster_Data.post_TPDO = TestMaster_post_TPDO; etisserant@391: TestMaster_Data.post_emcy = TestMaster_post_emcy; etisserant@391: TestMaster_Data.post_SlaveBootup=TestMaster_post_SlaveBootup; etisserant@391: etisserant@391: if(!canOpen(&MasterBoard,&TestMaster_Data)){ etisserant@391: eprintf("Cannot open Master Board (%s,%s)\n",MasterBoard.busname, MasterBoard.baudrate); etisserant@391: if(strcmp(MasterBoard.baudrate, "none")) canClose(&TestMaster_Data); etisserant@391: return 1; etisserant@391: } etisserant@391: } etisserant@391: etisserant@391: // Start timer thread etisserant@391: StartTimerLoop(&InitNodes); etisserant@391: etisserant@391: return 0; etisserant@391: } etisserant@391: etisserant@391: void TestMasterSlave_stop (void) etisserant@391: { etisserant@391: eprintf("Finishing.\n"); etisserant@391: etisserant@391: // Stop timer thread greg@467: StopTimerLoop(&Exit); etisserant@391: etisserant@391: // Close CAN devices (and can threads) etisserant@391: if(strcmp(SlaveBoard.baudrate, "none")) canClose(&TestSlave_Data); etisserant@391: if(strcmp(MasterBoard.baudrate, "none")) canClose(&TestMaster_Data); etisserant@391: greg@467: TimerCleanup(); etisserant@391: eprintf("End.\n"); etisserant@391: }