etherlab/etherlab_ext.c
changeset 2086 8e4992e0f147
child 2165 02a2b5dee5e3
--- /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()
+{
+}