diff -r ae263886ae92 -r 8e4992e0f147 etherlab/etherlab_ext.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etherlab/etherlab_ext.c Thu Oct 25 19:55:02 2012 +0200 @@ -0,0 +1,42 @@ +#include "iec_types_all.h" + +#define FREE 0 +#define ACQUIRED 1 +#define ANSWERED 2 + +long SDOLock = FREE; +extern long AtomicCompareExchange(long* atomicvar,long compared, long exchange); + +int AcquireSDOLock() { + return AtomicCompareExchange(&SDOLock, FREE, ACQUIRED) == FREE; +} + +void SDOAnswered() { + AtomicCompareExchange(&SDOLock, ACQUIRED, ANSWERED); +} + +int HasAnswer() { + return SDOLock == ANSWERED; +} + +void ReleaseSDOLock() { + AtomicCompareExchange(&SDOLock, ANSWERED, FREE); +} + +int __init_etherlab_ext() +{ + SDOLock = FREE; + return 0; +} + +void __cleanup_etherlab_ext() +{ +} + +void __retrieve_etherlab_ext() +{ +} + +void __publish_etherlab_ext() +{ +}