epics/trunk/epics_example/myexampleApp/Db
--- 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
--- 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
--- 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);