|
@@ -7,7 +7,7 @@
|
|
|
Description : lala
|
|
|
============================================================================
|
|
|
*/
|
|
|
-
|
|
|
+#define _XOPEN_SOURCE 1 //TODO HACK
|
|
|
#include <stdio.h>
|
|
|
#include <stdlib.h>
|
|
|
|
|
@@ -18,7 +18,20 @@
|
|
|
#include <sys/types.h>
|
|
|
#include <sys/wait.h>
|
|
|
#include <unistd.h>
|
|
|
+#include <fcntl.h>
|
|
|
#include "raspberrypi_io.h"
|
|
|
+#include <sys/ipc.h>
|
|
|
+#include <sys/shm.h>
|
|
|
+#define MAXMYMEM 4
|
|
|
+void readTemp1(float *temp)
|
|
|
+{
|
|
|
+ *temp = *temp + 0.3772f;
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
UA_Int32 serverCallback(void * arg) {
|
|
|
char *name = (char *) arg;
|
|
|
printf("%s does whatever servers do\n",name);
|
|
@@ -34,37 +47,52 @@ UA_Int32 serverCallback(void * arg) {
|
|
|
|
|
|
|
|
|
//FIXME: add the I/O code for raspberry pi here
|
|
|
-#ifdef raspi
|
|
|
- static float *temperature;
|
|
|
+//#ifdef RASPI
|
|
|
+
|
|
|
+
|
|
|
|
|
|
- UA_Node *foundNode = UA_NULL;
|
|
|
+
|
|
|
+
|
|
|
+ const UA_Node *foundNode = UA_NULL;
|
|
|
Namespace_Entry_Lock *lock;
|
|
|
//node which should be filled with data (float value)
|
|
|
UA_NodeId tmpNodeId;
|
|
|
|
|
|
tmpNodeId.encodingByte = UA_NODEIDTYPE_TWOBYTE;
|
|
|
tmpNodeId.identifier.numeric = 110;
|
|
|
- tmpNodeId.namespace 0;
|
|
|
-
|
|
|
- // build up the mapped memory
|
|
|
- temperature = mmap(NULL, sizeof *temperature, PROT_READ | PROT_WRITE,
|
|
|
- MAP_SHARED | MAP_ANONYMOUS, -1, 0);
|
|
|
-
|
|
|
- Namespace_get(ns0,&tmpNodeId,&foundNode,&lock);
|
|
|
- ((UA_VariableNode *)foundNode)->value.data = temperature;
|
|
|
-
|
|
|
- if (fork() == 0) {
|
|
|
- while(1){
|
|
|
- readTemp(temperature);
|
|
|
- sleep(500);
|
|
|
- }
|
|
|
-
|
|
|
- } else {
|
|
|
- wait(UA_NULL);
|
|
|
- printf("%d\n", *temperature);
|
|
|
- munmap(temperature, sizeof *temperature);
|
|
|
- }
|
|
|
-#endif
|
|
|
+ tmpNodeId.namespace = 0;
|
|
|
+
|
|
|
+ if(Namespace_get(ns0,&tmpNodeId, &foundNode,&lock) == UA_SUCCESS){
|
|
|
+ int shID;
|
|
|
+ char *myPtr;
|
|
|
+ int processId;
|
|
|
+
|
|
|
+ shID = shmget(2404, MAXMYMEM, IPC_CREAT | 0666);
|
|
|
+ if (shID >= 0) {
|
|
|
+ myPtr = shmat(shID, 0, 0);
|
|
|
+ if(myPtr!=(void*)-1)
|
|
|
+ {
|
|
|
+ ((UA_VariableNode *)foundNode)->value.data = myPtr;
|
|
|
+ if((processId = fork()) < 0) {
|
|
|
+ printf("serverCallback - ERROR: process not created");
|
|
|
+ }
|
|
|
+ else if(processId == 0) {
|
|
|
+
|
|
|
+ while(1){
|
|
|
+ (*(float*)myPtr) = (*(float*)myPtr) + 0.3312f;
|
|
|
+ #ifdef RASPI
|
|
|
+ readTemp((float*)myPtr);
|
|
|
+ #endif
|
|
|
+ sleep(100);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ printf("serverCallback - ERROR: no shared memory allocated");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
|
|
|
return UA_SUCCESS;
|
|
|
}
|