etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: image/svg+xml etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: My_App.c etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: CanSend etisserant@149: etisserant@149: etisserant@149: etisserant@149: CAN driver interfacecan_xxx.c)canOpen_drivercanClose_drivercanSend_drivercanReceive_driver etisserant@149: etisserant@149: OSinterface etisserant@149: etisserant@149: etisserant@149: SYSTEM TIMERSINTERFACE(timers_xxx.c)CreateReceiveTaskWaitReceiveTaskEnd(Start/Stop)TimerLoop etisserant@149: etisserant@149: etisserant@149: etisserant@149: ThreadCANReceiveLoop etisserant@149: etisserant@149: Timer etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: creates/stopthread etisserant@149: etisserant@149: etisserant@149: etisserant@149: } etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: SCHEDULINGtimer.cTimeDispatch etisserant@149: etisserant@149: CanFestival Library etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: CANDISPATCHINGstates.ccanDispatch etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: mutex etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: creates/stoptimer etisserant@149: etisserant@149: etisserant@149: etisserant@149: createsmutex etisserant@149: etisserant@149: #include canfestival.h //GUI generated header #include MyNode.hvoid InitNode(CO_Data* d, UNS32 id){ setNodeId(&MyNode_Data, 0x01); setState(&MyNode_Data, Initialisation);}void Operational(){ /* Your code for Operational State */}int main(int argc, char *argv[]){ LoadCanDriver("can_peak_win32.dll"); MyNode_Data.operational = Operational; s_BOARD SlaveBoard = {"0", "500K"}; MyCanHandle = canOpen(&MyBoard,&MyNode_Data); StartTimerLoop(&InitNode); /* Your Code Here */ StopTimerLoop(); canClose(&MyNode_Data);} etisserant@149: etisserant@149: etisserant@149: unix.c or win32.c etisserant@149: etisserant@149: CAN_xxx .dll/.so etisserant@149: etisserant@149: etisserant@149: LoadCanDriver etisserant@149: etisserant@149: etisserant@149: etisserant@149: canOpen etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: canClose etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: Callbacks etisserant@149: Predefined or OD entry accesscallbacks registered withRegisterSetODentryCallBack etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: Register the predefined"On Operational State" callback. etisserant@149: Start the scheduler with InitNode as the firstscheduled function call. etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: Always surround satck calls withEnterMutex()LeaveMutex() etisserant@149: etisserant@149: ! etisserant@149: etisserant@149: etisserant@149: Load the CAN interfacedynamic linking library (optional) etisserant@149: etisserant@149: Open Can poard and associateit with the CanOpen node. etisserant@149: etisserant@149: CanFestival integration with Unix and win32 OS etisserant@149: etisserant@149: