Commit in epics/trunk/epics_example/myexampleApp on MAIN
Db/dbSubExample.db+20740 -> 741
src/client_util.c+45-15740 -> 741
   /dbSubExample.c+52740 -> 741
   /dbSubExample.dbd+2740 -> 741
+119-15
4 modified files
Added ao records and set config test. Work in progress.

epics/trunk/epics_example/myexampleApp/Db
dbSubExample.db 740 -> 741
--- epics/trunk/epics_example/myexampleApp/Db/dbSubExample.db	2014-06-25 22:54:11 UTC (rev 740)
+++ epics/trunk/epics_example/myexampleApp/Db/dbSubExample.db	2014-06-26 01:02:08 UTC (rev 741)
@@ -4,6 +4,7 @@
     field(SNAM,"mySubProcess")
     field(SCAN,"5 second")
     field(FLNK,"$(user):subExampleTemp")
+    #field(FLNK,"$(user):subExampleCalDelay")
     
 }
 
@@ -25,8 +26,27 @@
 
 }
 
+record(sub,"$(user):subExampleCalDelay")
+{
+    field(INAM,"mySubCalDelayInit")
+    field(SNAM,"mySubCalDelayProcess")
+    field(SCAN,"Passive")
+    #field(,"$(user):SVT:CalDelaySet")
+    #field(FLNK,"$(user):subExample")
+
+}
+
 record(ai, SVT:temp) {
   field(INP, "$(user):subExampleTemp CP")
   field(DTYP,"Soft Channel")
 }
 
+record(ai, SVT:CalDelay) {
+  field(INP, "$(user):subExampleCalDelay CP")
+  field(DTYP,"Soft Channel")
+}
+
+record(ao, SVT:CalDelaySet) {
+  field(OUT, "$(user):subExampleCalDelay.A CPP")
+  field(DTYP,"Soft Channel")
+}

epics/trunk/epics_example/myexampleApp/src
client_util.c 740 -> 741
--- epics/trunk/epics_example/myexampleApp/src/client_util.c	2014-06-25 22:54:11 UTC (rev 740)
+++ epics/trunk/epics_example/myexampleApp/src/client_util.c	2014-06-26 01:02:08 UTC (rev 741)
@@ -42,7 +42,8 @@
 void getSystemDOM(int* sockfd, xmlDoc** document, xmlNode** root){
 
   //int debug = 0;
-  char* xml_string = (char*) read_system_xml_string(sockfd);
+  char xml_string[300*256];
+  read_system_xml_string2(sockfd,xml_string,300*256);
   if(client_util_debug!=0) printf("Got %d long xml string\n",strlen(xml_string));
   if(client_util_debug!=0) printf("create xml document\n");
   *document = xmlReadMemory(xml_string,strlen(xml_string),"noname.xml",NULL,0);
@@ -50,11 +51,20 @@
   *root = xmlDocGetRootElement(*document);
   if(client_util_debug!=0) printf("found root name %s\n",(*root)->name);
   if(client_util_debug!=0) printf("free the string\n");
-  free(xml_string);
 }
 
 
 void writeCalDelay(int* sockfd,char value[],const unsigned int MAX) {
+  
+  char buffer[256];
+  bzero(buffer,256);
+  int n;
+  sprintf(buffer,"<system><config><cntrlFpga><CalDelay>%s</CalDelay></cntrlFpga></config></system>\f",value);
+  if(client_util_debug) printf("Executing:\"%s\"\n",buffer);
+  n = write(*sockfd,buffer,strlen(buffer));
+  if(n<0) 
+    socket_error("ERROR writing to socket");
+  return;
 
 }
 
@@ -82,6 +92,28 @@
   xmlCleanupParser();
 }
 
+void readCalDelay(int* sockfd,char value[],const unsigned int MAX) {
+  //int debug=0;
+  char tag[] = "system:status:cntrlFpga:CalDelay";
+  xmlDoc* document = NULL;
+  xmlNode* root = NULL;
+  if(client_util_debug!=0) printf("readTemp: get DOM\n");
+  getSystemDOM(sockfd,&document,&root);
+  if(document==NULL) {
+    printf("couldn't get xml document %p\n",document);
+    return;
+  }
+  if(root==NULL) {
+    printf("couldn't get root from document\n");
+    document=NULL;
+    return;
+  }  
+  if(client_util_debug!=0) printf("retrieve value\n");
+  retrieveValue(document,root,tag,value,MAX);
+  if(client_util_debug!=0) printf("free the xml\n");
+  xmlFreeDoc(document);
+  xmlCleanupParser();
+}
 
 
 
@@ -171,7 +203,7 @@
     }
     
     if(n_endings>=2) {
-      if(debug!=0) printf("\nfound two endings at read_i %d with total len\n",read_i,strlen(buffer_read));      
+      if(debug!=0) printf("\nfound two endings at read_i %d with total len %d\n",read_i,strlen(buffer_read));      
       break;
     }
 
@@ -196,22 +228,20 @@
     if(start!=NULL) {
       if(debug!=0) printf("\nstart at %p offset %d\n",start,start-buffer_read);
       if(end2!=NULL) {
-	if(debug!=0) printf("\n end2 at %p offset %d\n",end2,end2-buffer_read);
-      }
-      //char* end = strstr(start+2,"\f");
-      char* end = strchr(start+1,'\f');
-      if(end!=NULL) {
-	if(debug!=0) printf("\nend at %p\n",end);
-	memcpy(buffer,start+1,end-(start+1));
-	buffer[end-(start+1)+1] = NULL; // terminate it
-	if(debug!=0) printf("\ncopied %d chars to %p\n%s\n",end-(start+1),buffer,buffer);	
-      } else {
+	if(debug!=0) printf("\nend at %p\n",end2);
+	if (start!=end2) { 
+	  memcpy(buffer,start+1,end2-(start+1));
+	  buffer[end2-(start+1)+1] = '\0'; // terminate it
+	  if(debug!=0) printf("\ncopied %d chars to %p\n%s\n",end2-(start+1),buffer,buffer);	
+	} else {
+	  if(debug!=0) printf("\n start and end are the same\n");
+	}
+      }else {
 	if(debug!=0) printf("\n no end found\n");
       }
     } else {
       if(debug!=0) printf("\n no start found found\n");
-    }
-    
+    }    
   }
 
   return;

epics/trunk/epics_example/myexampleApp/src
dbSubExample.c 740 -> 741
--- epics/trunk/epics_example/myexampleApp/src/dbSubExample.c	2014-06-25 22:54:11 UTC (rev 740)
+++ epics/trunk/epics_example/myexampleApp/src/dbSubExample.c	2014-06-26 01:02:08 UTC (rev 741)
@@ -38,6 +38,14 @@
   return 0;
 }
 
+static long mySubCalDelayInit(subRecord* precord) 
+{
+  if(mySubDebug) {
+    printf("Record %s called mySubCalDelayInit(%p)\n",precord->name,(void*) precord);
+  }
+  return 0;
+}
+
 double extractTempValFromString(char value[]) {
   double t = 0.0;
   char* p_start = strstr(value,"C (");
@@ -83,6 +91,48 @@
 }
 
 
+static long mySubCalDelayProcess(subRecord* precord) 
+{
+  if(mySubDebug) {
+    printf("Record %s called mySubCalDelayProcess(%p)\n",precord->name,(void*) precord);
+  }
+  sockfd = open_socket("134.79.229.141",8090);
+  if (mySubDebug) {
+    printf("Opened TCP/IP socket %d\n",sockfd);
+  }
+  char value[256];
+  memset(value,0,sizeof(value));
+  //if(precord->a) {
+  sprintf(value,"%d",(int)precord->a);
+  if (mySubDebug) {
+    printf("precord->a %f so write %s to record\n",precord->a,value);
+  }
+  writeCalDelay(&sockfd,value,sizeof(value));
+  //} 
+  if (mySubDebug) {
+    printf("Read CalDelay\n");
+  }
+  readCalDelay(&sockfd,value,sizeof(value));    
+  if (mySubDebug) {
+    printf("Got value=\"%s\"\n",value);
+    //"23.44 C (0x0843)"
+  }
+
+  if (mySubDebug) {
+    printf("close socket\n");
+  }
+  double val = atof(value);
+  precord->val = val;
+  //if (mySubDebug) {
+  printf("mySubCalDelayProcess got %f \n",precord->val);
+  //}
+  close_socket(sockfd);
+  
+ return 0;
+}
+
+
+
 static long myAsubInit(aSubRecord *precord)
 {
     if (mySubDebug)
@@ -106,5 +156,7 @@
 epicsRegisterFunction(mySubProcess);
 epicsRegisterFunction(mySubTempInit);
 epicsRegisterFunction(mySubTempProcess);
+epicsRegisterFunction(mySubCalDelayInit);
+epicsRegisterFunction(mySubCalDelayProcess);
 epicsRegisterFunction(myAsubInit);
 epicsRegisterFunction(myAsubProcess);

epics/trunk/epics_example/myexampleApp/src
dbSubExample.dbd 740 -> 741
--- epics/trunk/epics_example/myexampleApp/src/dbSubExample.dbd	2014-06-25 22:54:11 UTC (rev 740)
+++ epics/trunk/epics_example/myexampleApp/src/dbSubExample.dbd	2014-06-26 01:02:08 UTC (rev 741)
@@ -3,5 +3,7 @@
 function(mySubProcess)
 function(mySubTempInit)
 function(mySubTempProcess)
+function(mySubCalDelayInit)
+function(mySubCalDelayProcess)
 function(myAsubInit)
 function(myAsubProcess)
SVNspam 0.1