etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: image/svg+xml etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@149: etisserant@149: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: Implementation overview etisserant@0: etisserant@149: etisserant@0: Targetinterface etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: (GUI generated .c+.h file,one per node,to compile and link with your code) etisserant@0: Node DATA CO_Datadata.h etisserant@0: OBJECT DICTIONARY etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: OD ACCESSobjaccess.c etisserant@0: etisserant@0: CanFestival Library etisserant@0: CanOpen Protocols etisserant@0: Node Management etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: STATE MACHINEstates.c etisserant@0: CanDispatch etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: SERVICE DATA OBJECTSsdo.c etisserant@0: etisserant@0: etisserant@0: etisserant@0: PROCESS DATA OBJECTSpdo.c etisserant@0: etisserant@0: etisserant@0: etisserant@0: NETWORK MANAGEMENTnmtMaster.c + nmtSlave.c etisserant@0: etisserant@0: etisserant@0: etisserant@0: SYNCHRONIZATIONsync.c etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: AUTO CAN BAUDRATElss.c etisserant@0: etisserant@0: Application(master/slave) etisserant@0: etisserant@0: etisserant@0: etisserant@0: libcanfestival_$(CAN_DRIVER).so$(CAN_DRIVER).dll,cyg$(CAN_DRIVER).dll etisserant@0: libcanfestival.a etisserant@0: etisserant@0: Mandatory:- Open CAN interfaces- Initiate TImersOptional:- Declare some callbacksEach call to the CanFestival API provide a pointer to the related node's CO_Data struct.In order to respect data integrity in the stack, all calls to the API should be made from mandatory nodes callback. etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: Node Callbacks:SDOtimeoutErrorheartbeatErrorcanSendinitialisationpreOperationaoperationalstoppedpost_syncpost_TPDO etisserant@0: etisserant@0: etisserant@0: etisserant@0: NodesInitialisationCalled atinitialisationof stack,once CANinterfacesopened. etisserant@0: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: SCHEDULINGtimer.c etisserant@149: etisserant@149: etisserant@149: etisserant@149: SYSTEM TIMERSINTERFACEtimers_xxx.c etisserant@149: etisserant@149: libcanfestival_$(TARGET).acanfestival_$(TARGET).lib etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: etisserant@149: OS interfaceunix.corwin32.c etisserant@149: etisserant@149: etisserant@149: CAN DRIVERINTERFACEcan_xxx.c etisserant@149: RCV etisserant@149: TRS etisserant@149: etisserant@149: CANinterface etisserant@149: Dynamicaly loadedor Linked etisserant@0: etisserant@0: