Print

Print


Commit in epics/trunk/epics_example/myexampleApp on MAIN
Db/dbFebTemp.db+1776 -> 777
  /dbHybLV.db+375-5776 -> 777
src/client_util.c+31-29776 -> 777
   /dbSubExample.c+128-178776 -> 777
+535-212
4 modified files
More work on harmonizing calls and adding db records for testing.

epics/trunk/epics_example/myexampleApp/Db
dbFebTemp.db 776 -> 777
--- epics/trunk/epics_example/myexampleApp/Db/dbFebTemp.db	2014-07-16 00:16:27 UTC (rev 776)
+++ epics/trunk/epics_example/myexampleApp/Db/dbFebTemp.db	2014-07-16 00:16:41 UTC (rev 777)
@@ -5,6 +5,7 @@
     field(INAM,"subTempInit")
     field(SNAM,"subTempProcess")
     field(SCAN,"Passive")
+    field(FLNK,"SVT:lv:hyb:bot:0:dvdd:i_rd")
 }
 
 record(ai, SVT:lv:fe:0:anap:i_rd) {

epics/trunk/epics_example/myexampleApp/Db
dbHybLV.db 776 -> 777
--- epics/trunk/epics_example/myexampleApp/Db/dbHybLV.db	2014-07-16 00:16:27 UTC (rev 776)
+++ epics/trunk/epics_example/myexampleApp/Db/dbHybLV.db	2014-07-16 00:16:41 UTC (rev 777)
@@ -1,37 +1,407 @@
 
-record(sub,SVT:lv:hyb:bot:0:dvdd:vn_sub)
+
+
+
+
+####### DVDD I_RD BOT
+
+
+record(sub,SVT:lv:hyb:bot:0:dvdd:i_rd_sub)
 {
     field(INAM,"subLVInit")
     field(SNAM,"subLVProcess")
     field(SCAN,"Passive")
+    field(FLNK,"SVT:lv:hyb:bot:1:dvdd:i_rd")
 }
 
-record(ai, SVT:lv:hyb:bot:0:dvdd:vn) {
+record(ai, SVT:lv:hyb:bot:0:dvdd:i_rd) {
   #field(SCAN, "5 second")
-  #field(FLNK,"SVT:lv:hyb:bot:0:dvdd:vn_sub PP")
-  field(INP, "SVT:lv:hyb:bot:0:dvdd:vn_sub CPP")
+  field(FLNK,"SVT:lv:hyb:bot:0:dvdd:i_rd_sub PP")
+  field(INP, "SVT:lv:hyb:bot:0:dvdd:i_rd_sub CPP")
   field(DTYP,"Soft Channel")
 }
 
+record(sub,SVT:lv:hyb:bot:1:dvdd:i_rd_sub)
+{
+    field(INAM,"subLVInit")
+    field(SNAM,"subLVProcess")
+    field(SCAN,"Passive")
+    field(FLNK,"SVT:lv:hyb:bot:2:dvdd:i_rd")
+}
 
+record(ai, SVT:lv:hyb:bot:1:dvdd:i_rd) {
+  #field(SCAN, "5 second")
+  field(FLNK,"SVT:lv:hyb:bot:1:dvdd:i_rd_sub PP")
+  field(INP, "SVT:lv:hyb:bot:1:dvdd:i_rd_sub CPP")
+  field(DTYP,"Soft Channel")
+}
 
 record(sub,SVT:lv:hyb:bot:2:dvdd:i_rd_sub)
 {
     field(INAM,"subLVInit")
     field(SNAM,"subLVProcess")
     field(SCAN,"Passive")
+    field(FLNK,"SVT:lv:hyb:bot:3:dvdd:i_rd")
 }
 
 record(ai, SVT:lv:hyb:bot:2:dvdd:i_rd) {
-  field(SCAN, "5 second")
+  #field(SCAN, "5 second")
   field(FLNK,"SVT:lv:hyb:bot:2:dvdd:i_rd_sub PP")
   field(INP, "SVT:lv:hyb:bot:2:dvdd:i_rd_sub CPP")
   field(DTYP,"Soft Channel")
 }
 
+record(sub,SVT:lv:hyb:bot:3:dvdd:i_rd_sub)
+{
+    field(INAM,"subLVInit")
+    field(SNAM,"subLVProcess")
+    field(SCAN,"Passive")
+    field(FLNK,"SVT:lv:hyb:bot:0:avdd:i_rd")
+}
 
+record(ai, SVT:lv:hyb:bot:3:dvdd:i_rd) {
+  #field(SCAN, "5 second")
+  field(FLNK,"SVT:lv:hyb:bot:3:dvdd:i_rd_sub PP")
+  field(INP, "SVT:lv:hyb:bot:3:dvdd:i_rd_sub CPP")
+  field(DTYP,"Soft Channel")
+}
 
 
+
+####### AVDD I_RD BOT
+
+
+record(sub,SVT:lv:hyb:bot:0:avdd:i_rd_sub)
+{
+    field(INAM,"subLVInit")
+    field(SNAM,"subLVProcess")
+    field(SCAN,"Passive")
+    field(FLNK,"SVT:lv:hyb:bot:1:avdd:i_rd")
+}
+
+record(ai, SVT:lv:hyb:bot:0:avdd:i_rd) {
+  #field(SCAN, "5 second")
+  field(FLNK,"SVT:lv:hyb:bot:0:avdd:i_rd_sub PP")
+  field(INP, "SVT:lv:hyb:bot:0:avdd:i_rd_sub CPP")
+  field(DTYP,"Soft Channel")
+}
+
+record(sub,SVT:lv:hyb:bot:1:avdd:i_rd_sub)
+{
+    field(INAM,"subLVInit")
+    field(SNAM,"subLVProcess")
+    field(SCAN,"Passive")
+    field(FLNK,"SVT:lv:hyb:bot:2:avdd:i_rd")
+}
+
+record(ai, SVT:lv:hyb:bot:1:avdd:i_rd) {
+  #field(SCAN, "5 second")
+  field(FLNK,"SVT:lv:hyb:bot:1:avdd:i_rd_sub PP")
+  field(INP, "SVT:lv:hyb:bot:1:avdd:i_rd_sub CPP")
+  field(DTYP,"Soft Channel")
+}
+
+record(sub,SVT:lv:hyb:bot:2:avdd:i_rd_sub)
+{
+    field(INAM,"subLVInit")
+    field(SNAM,"subLVProcess")
+    field(SCAN,"Passive")
+    field(FLNK,"SVT:lv:hyb:bot:3:avdd:i_rd")
+}
+
+record(ai, SVT:lv:hyb:bot:2:avdd:i_rd) {
+  #field(SCAN, "5 second")
+  field(FLNK,"SVT:lv:hyb:bot:2:avdd:i_rd_sub PP")
+  field(INP, "SVT:lv:hyb:bot:2:avdd:i_rd_sub CPP")
+  field(DTYP,"Soft Channel")
+}
+
+record(sub,SVT:lv:hyb:bot:3:avdd:i_rd_sub)
+{
+    field(INAM,"subLVInit")
+    field(SNAM,"subLVProcess")
+    field(SCAN,"Passive")
+    field(FLNK,"SVT:lv:hyb:bot:0:v125:i_rd")
+}
+
+record(ai, SVT:lv:hyb:bot:3:avdd:i_rd) {
+  #field(SCAN, "5 second")
+  field(FLNK,"SVT:lv:hyb:bot:3:avdd:i_rd_sub PP")
+  field(INP, "SVT:lv:hyb:bot:3:avdd:i_rd_sub CPP")
+  field(DTYP,"Soft Channel")
+}
+
+
+
+####### V125 I_RD BOT
+
+
+record(sub,SVT:lv:hyb:bot:0:v125:i_rd_sub)
+{
+    field(INAM,"subLVInit")
+    field(SNAM,"subLVProcess")
+    field(SCAN,"Passive")
+    field(FLNK,"SVT:lv:hyb:bot:1:v125:i_rd")
+}
+
+record(ai, SVT:lv:hyb:bot:0:v125:i_rd) {
+  #field(SCAN, "5 second")
+  field(FLNK,"SVT:lv:hyb:bot:0:v125:i_rd_sub PP")
+  field(INP, "SVT:lv:hyb:bot:0:v125:i_rd_sub CPP")
+  field(DTYP,"Soft Channel")
+}
+
+record(sub,SVT:lv:hyb:bot:1:v125:i_rd_sub)
+{
+    field(INAM,"subLVInit")
+    field(SNAM,"subLVProcess")
+    field(SCAN,"Passive")
+    field(FLNK,"SVT:lv:hyb:bot:2:v125:i_rd")
+}
+
+record(ai, SVT:lv:hyb:bot:1:v125:i_rd) {
+  #field(SCAN, "5 second")
+  field(FLNK,"SVT:lv:hyb:bot:1:v125:i_rd_sub PP")
+  field(INP, "SVT:lv:hyb:bot:1:v125:i_rd_sub CPP")
+  field(DTYP,"Soft Channel")
+}
+
+record(sub,SVT:lv:hyb:bot:2:v125:i_rd_sub)
+{
+    field(INAM,"subLVInit")
+    field(SNAM,"subLVProcess")
+    field(SCAN,"Passive")
+    field(FLNK,"SVT:lv:hyb:bot:3:v125:i_rd")
+}
+
+record(ai, SVT:lv:hyb:bot:2:v125:i_rd) {
+  #field(SCAN, "5 second")
+  field(FLNK,"SVT:lv:hyb:bot:2:v125:i_rd_sub PP")
+  field(INP, "SVT:lv:hyb:bot:2:v125:i_rd_sub CPP")
+  field(DTYP,"Soft Channel")
+}
+
+record(sub,SVT:lv:hyb:bot:3:v125:i_rd_sub)
+{
+    field(INAM,"subLVInit")
+    field(SNAM,"subLVProcess")
+    field(SCAN,"Passive")
+    field(FLNK,"SVT:lv:hyb:bot:0:dvdd:vn")
+}
+
+record(ai, SVT:lv:hyb:bot:3:v125:i_rd) {
+  #field(SCAN, "5 second")
+  field(FLNK,"SVT:lv:hyb:bot:3:v125:i_rd_sub PP")
+  field(INP, "SVT:lv:hyb:bot:3:v125:i_rd_sub CPP")
+  field(DTYP,"Soft Channel")
+}
+
+
+
+
+
+####### DVDD VN BOT
+
+
+record(sub,SVT:lv:hyb:bot:0:dvdd:vn_sub)
+{
+    field(INAM,"subLVInit")
+    field(SNAM,"subLVProcess")
+    field(SCAN,"Passive")
+    field(FLNK,"SVT:lv:hyb:bot:1:dvdd:vn")
+}
+
+record(ai, SVT:lv:hyb:bot:0:dvdd:vn) {
+  #field(SCAN, "5 second")
+  field(FLNK,"SVT:lv:hyb:bot:0:dvdd:vn_sub PP")
+  field(INP, "SVT:lv:hyb:bot:0:dvdd:vn_sub CPP")
+  field(DTYP,"Soft Channel")
+}
+
+record(sub,SVT:lv:hyb:bot:1:dvdd:vn_sub)
+{
+    field(INAM,"subLVInit")
+    field(SNAM,"subLVProcess")
+    field(SCAN,"Passive")
+    field(FLNK,"SVT:lv:hyb:bot:2:dvdd:vn")
+}
+
+record(ai, SVT:lv:hyb:bot:1:dvdd:vn) {
+  #field(SCAN, "5 second")
+  field(FLNK,"SVT:lv:hyb:bot:1:dvdd:vn_sub PP")
+  field(INP, "SVT:lv:hyb:bot:1:dvdd:vn_sub CPP")
+  field(DTYP,"Soft Channel")
+}
+
+record(sub,SVT:lv:hyb:bot:2:dvdd:vn_sub)
+{
+    field(INAM,"subLVInit")
+    field(SNAM,"subLVProcess")
+    field(SCAN,"Passive")
+    field(FLNK,"SVT:lv:hyb:bot:3:dvdd:vn")
+}
+
+record(ai, SVT:lv:hyb:bot:2:dvdd:vn) {
+  #field(SCAN, "5 second")
+  field(FLNK,"SVT:lv:hyb:bot:2:dvdd:vn_sub PP")
+  field(INP, "SVT:lv:hyb:bot:2:dvdd:vn_sub CPP")
+  field(DTYP,"Soft Channel")
+}
+
+record(sub,SVT:lv:hyb:bot:3:dvdd:vn_sub)
+{
+    field(INAM,"subLVInit")
+    field(SNAM,"subLVProcess")
+    field(SCAN,"Passive")
+    field(FLNK,"SVT:lv:hyb:bot:0:avdd:vn")
+}
+
+record(ai, SVT:lv:hyb:bot:3:dvdd:vn) {
+  #field(SCAN, "5 second")
+  field(FLNK,"SVT:lv:hyb:bot:3:dvdd:vn_sub PP")
+  field(INP, "SVT:lv:hyb:bot:3:dvdd:vn_sub CPP")
+  field(DTYP,"Soft Channel")
+}
+
+
+
+
+####### AVDD VN BOT
+
+
+record(sub,SVT:lv:hyb:bot:0:avdd:vn_sub)
+{
+    field(INAM,"subLVInit")
+    field(SNAM,"subLVProcess")
+    field(SCAN,"Passive")
+    field(FLNK,"SVT:lv:hyb:bot:1:avdd:vn")
+}
+
+record(ai, SVT:lv:hyb:bot:0:avdd:vn) {
+  #field(SCAN, "5 second")
+  field(FLNK,"SVT:lv:hyb:bot:0:avdd:vn_sub PP")
+  field(INP, "SVT:lv:hyb:bot:0:avdd:vn_sub CPP")
+  field(DTYP,"Soft Channel")
+}
+
+record(sub,SVT:lv:hyb:bot:1:avdd:vn_sub)
+{
+    field(INAM,"subLVInit")
+    field(SNAM,"subLVProcess")
+    field(SCAN,"Passive")
+    field(FLNK,"SVT:lv:hyb:bot:2:avdd:vn")
+}
+
+record(ai, SVT:lv:hyb:bot:1:avdd:vn) {
+  #field(SCAN, "5 second")
+  field(FLNK,"SVT:lv:hyb:bot:1:avdd:vn_sub PP")
+  field(INP, "SVT:lv:hyb:bot:1:avdd:vn_sub CPP")
+  field(DTYP,"Soft Channel")
+}
+
+record(sub,SVT:lv:hyb:bot:2:avdd:vn_sub)
+{
+    field(INAM,"subLVInit")
+    field(SNAM,"subLVProcess")
+    field(SCAN,"Passive")
+    field(FLNK,"SVT:lv:hyb:bot:3:avdd:vn")
+}
+
+record(ai, SVT:lv:hyb:bot:2:avdd:vn) {
+  #field(SCAN, "5 second")
+  field(FLNK,"SVT:lv:hyb:bot:2:avdd:vn_sub PP")
+  field(INP, "SVT:lv:hyb:bot:2:avdd:vn_sub CPP")
+  field(DTYP,"Soft Channel")
+}
+
+record(sub,SVT:lv:hyb:bot:3:avdd:vn_sub)
+{
+    field(INAM,"subLVInit")
+    field(SNAM,"subLVProcess")
+    field(SCAN,"Passive")
+    field(FLNK,"SVT:lv:hyb:bot:0:v125:vn")
+}
+
+record(ai, SVT:lv:hyb:bot:3:avdd:vn) {
+  #field(SCAN, "5 second")
+  field(FLNK,"SVT:lv:hyb:bot:3:avdd:vn_sub PP")
+  field(INP, "SVT:lv:hyb:bot:3:avdd:vn_sub CPP")
+  field(DTYP,"Soft Channel")
+}
+
+
+
+
+
+####### V125 VN BOT
+
+
+record(sub,SVT:lv:hyb:bot:0:v125:vn_sub)
+{
+    field(INAM,"subLVInit")
+    field(SNAM,"subLVProcess")
+    field(SCAN,"Passive")
+    field(FLNK,"SVT:lv:hyb:bot:1:v125:vn")
+}
+
+record(ai, SVT:lv:hyb:bot:0:v125:vn) {
+  #field(SCAN, "5 second")
+  field(FLNK,"SVT:lv:hyb:bot:0:v125:vn_sub PP")
+  field(INP, "SVT:lv:hyb:bot:0:v125:vn_sub CPP")
+  field(DTYP,"Soft Channel")
+}
+
+record(sub,SVT:lv:hyb:bot:1:v125:vn_sub)
+{
+    field(INAM,"subLVInit")
+    field(SNAM,"subLVProcess")
+    field(SCAN,"Passive")
+    field(FLNK,"SVT:lv:hyb:bot:2:v125:vn")
+}
+
+record(ai, SVT:lv:hyb:bot:1:v125:vn) {
+  #field(SCAN, "5 second")
+  field(FLNK,"SVT:lv:hyb:bot:1:v125:vn_sub PP")
+  field(INP, "SVT:lv:hyb:bot:1:v125:vn_sub CPP")
+  field(DTYP,"Soft Channel")
+}
+
+record(sub,SVT:lv:hyb:bot:2:v125:vn_sub)
+{
+    field(INAM,"subLVInit")
+    field(SNAM,"subLVProcess")
+    field(SCAN,"Passive")
+    field(FLNK,"SVT:lv:hyb:bot:3:v125:vn")
+}
+
+record(ai, SVT:lv:hyb:bot:2:v125:vn) {
+  #field(SCAN, "5 second")
+  field(FLNK,"SVT:lv:hyb:bot:2:v125:vn_sub PP")
+  field(INP, "SVT:lv:hyb:bot:2:v125:vn_sub CPP")
+  field(DTYP,"Soft Channel")
+}
+
+record(sub,SVT:lv:hyb:bot:3:v125:vn_sub)
+{
+    field(INAM,"subLVInit")
+    field(SNAM,"subLVProcess")
+    field(SCAN,"Passive")
+}
+
+record(ai, SVT:lv:hyb:bot:3:v125:vn) {
+  #field(SCAN, "5 second")
+  field(FLNK,"SVT:lv:hyb:bot:3:v125:vn_sub PP")
+  field(INP, "SVT:lv:hyb:bot:3:v125:vn_sub CPP")
+  field(DTYP,"Soft Channel")
+}
+
+
+
+
+
+
+
+
 record(sub,SVT:lv:hyb:bot:0:dvdd:v_set_sub)
 {
     field(INAM,"subLVInit")

epics/trunk/epics_example/myexampleApp/src
client_util.c 776 -> 777
--- epics/trunk/epics_example/myexampleApp/src/client_util.c	2014-07-16 00:16:27 UTC (rev 776)
+++ epics/trunk/epics_example/myexampleApp/src/client_util.c	2014-07-16 00:16:41 UTC (rev 777)
@@ -10,8 +10,13 @@
 xmlDoc* doc = NULL;
 xmlNode* xml_root = NULL;
 
+char* strToUpper( char* s )
+  {
+  char* p = s;
+  while (*p = toupper( *p )) p++;
+  return s;
+  }
 
-
 double extractTempValFromString(char value[]) {
   double t = 0.0;
   char* p_start = strstr(value,"C (");
@@ -301,9 +306,9 @@
   xmlCleanupParser();
 }
 
-void readXadcT(int feb_id, char value[],const unsigned int MAX) {
-  char tag[] = "system:status:FrontEndTestFpga:FebCore:AxiXadc:Temperature";
-  if(client_util_debug!=0) printf("readAxiXadcT: get DOM\n");
+
+void getXMLValue(char tag[], char value[],const unsigned int MAX) {
+  if(client_util_debug!=0) printf("getXMLValue for tag: %s\n",tag);
   if(doc==NULL) {
     printf("couldn't get xml document %p\n",doc);
     return;
@@ -314,38 +319,35 @@
   }  
   if(client_util_debug!=0) printf("retrieve value\n");
   retrieveValue(doc,xml_root,tag,value,MAX);
-  if(client_util_debug!=0) printf("free the xml\n");
-  //xmlFreeDoc(document);
-  //xmlCleanupParser();
+  if(client_util_debug!=0) printf("retrieve value done\n");
 }
 
-void readHybridI(int sockfd,int feb_id, int hyb_id,char ch_name[], char value[],const unsigned int MAX) {
+
+void readFebT(int feb_id, char value[],const unsigned int MAX) {
+  char tag[] = "system:status:FrontEndTestFpga:FebCore:AxiXadc:Temperature";
+  getXMLValue(tag,value,MAX);
+}
+
+void readHybridI(int feb_id, int hyb_id,char ch_name[], char value[],const unsigned int MAX) {
   char tag[256];
-  sprintf(tag,"system:status:FrontEndTestFpga:FebCore:PowerMonitor:Hybrid%d_%s_Current",hyb_id,ch_name);
-  xmlDoc* document = NULL;
-  xmlNode* root = NULL;
-  int* p_sockfd = &sockfd;
-  if(client_util_debug!=0) printf("readHybridCurrent: get DOM\n");
-  getSystemDOM(p_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();
+  sprintf(tag,"system:status:FrontEndTestFpga:FebCore:PowerMonitor:Hybrid%d_%s_Current",hyb_id,strToUpper(ch_name));
+  getXMLValue(tag,value,MAX);
 }
 
+void readHybridT(int feb_id, int hyb_id,char ch_name[], char value[],const unsigned int MAX) {
+  char tag[256];
+  sprintf(tag,"system:status:FrontEndTestFpga:FebCore:PowerMonitor:Hybrid%d_%s_Current",hyb_id,strToUpper(ch_name));
+  getXMLValue(tag,value,MAX);
+}
 
+void readHybridV(int feb_id, int hyb_id,char ch_name[], char ch_pos[], char value[],const unsigned int MAX) {  
+  char tag[256];
+  sprintf(tag,"system:status:FrontEndTestFpga:FebCore:PowerMonitor:Hybrid%d_%s_%s",hyb_id,ch_name,strToUpper(ch_pos));
+  getXMLValue(tag,value,MAX);
+}
 
 
+
 xmlNode* retrieveElement(xmlDoc* doc, xmlNode* node, char* tag) {
   xmlNode* cur_node = NULL;
   xmlNode* found_it = NULL;
@@ -559,7 +561,7 @@
 
 
 void read_system_xml_string4(int socketfd) {
-  const float wait_interval_usec = 100000;  
+  //const float wait_interval_usec = 100000;  
   char* buf = NULL;
   char* buf_more = NULL;
   int buf_len = 0;

epics/trunk/epics_example/myexampleApp/src
dbSubExample.c 776 -> 777
--- epics/trunk/epics_example/myexampleApp/src/dbSubExample.c	2014-07-16 00:16:27 UTC (rev 776)
+++ epics/trunk/epics_example/myexampleApp/src/dbSubExample.c	2014-07-16 00:16:41 UTC (rev 777)
@@ -10,7 +10,7 @@
 
 int mySubDebug = 0;
 char *hostName = "localhost";// "134.79.229.141";
-int port = 8090;
+int port = 8091;
 int sockfd = -1;
 int counter = 0;
 const int BUF_SIZE = 256;
@@ -46,175 +46,75 @@
 
 
 
-static void readAxiXadcTemp(subRecord* precord, int fpga_id)
-{
-  if(mySubDebug) {
-    printf("Record %s called readAxiXadcTemp for fgpa_id=%d\n",precord->name,fpga_id);
-  }
 
-  //set to default
-  precord->val = def_AxiXadcTemp;
 
-  sockfd = open_socket(hostName,port);
-  if(sockfd<0) {
-    printf("ERROR could not open socket %d for host %s in readAxiXadcTemp\n",port,hostName);
-    return;
-  }
-  if (mySubDebug) {
-    printf("Opened TCP/IP socket %d\n",sockfd);
-  }
-  char value[BUF_SIZE];
-  memset(value,0,BUF_SIZE);
-  if (mySubDebug) {
-    printf("Read Config\n");
-  }
-  writeReadConfig(sockfd);
-  readAxiXadcT(sockfd,fpga_id,value,BUF_SIZE);    
-  if (mySubDebug) {
-    printf("Got value=\"%s\"\n",value);
-  }
-  if(strlen(value)>0) {
-    precord->val = atof(value);
-    if (mySubDebug) {
-      printf("precord-val is now %f \n",precord->val);
-    }
-  }
-  if (mySubDebug) {
-    printf("close socket\n");
-  }
-  close_socket(sockfd);
-}
 
 
 
-static void readFebTemp(subRecord *precord,char id[],char ch_name[]) {
-  
-  if(mySubDebug) {
-    printf("Record %s called readFebTemp %s for id=%s\n",precord->name,ch_name,id);
-  }
-  
-  precord->val=def_AxiXadcTemp;
-  char* p_end = id;
-  long int li_id = strtol(id,&p_end,0);
-  if(p_end!=id) {
-    if(li_id>=0 && li_id<10) {     
-      if(strcmp(ch_name,"axixadc")==0) {
-	//readAxiXadcTemp(precord,(int)li_id);
-	char value[BUF_SIZE];
-	memset(value,0,BUF_SIZE);
-	readXadcT((int)li_id,value,BUF_SIZE);    
-	if (mySubDebug) {
-	  printf("Got value=\"%s\"\n",value);
-	}
-	if(strlen(value)>0) {
-	  precord->val = atof(value);
-	  if (mySubDebug) {
-	    printf("precord-val is now %f \n",precord->val);
-	  }
-	}	
-      } else {
-	printf("Invalid FEB ch_name %s \n",ch_name);
-      }      
-    } else {
-      printf("Invalid FEB id %s (%ld) \n",id,li_id);
-    }
-  } else {
-    printf("Invalid conversion of FEB id %s \n",id);
-  }
-}
 
-
-
-
-
-
-static void readHybridVoltageNear(subRecord* precord, char half[],char id[],char ch_name[])
+  static void readHybrid(subRecord* precord,char action[], char half[],int id, int feb_id, char ch_name[])
 {
+  double constant;
   if(mySubDebug) {
-    printf("Record %s called readHybridVoltageNear for half=%s id=%s ch_name=%s\n",precord->name,half,id,ch_name);
+    printf("Record %s called readHybrid %s for half=%s id=%d ch_name=%s\n",precord->name,action,half,id,ch_name);
   }
 
   //set to default
-  precord->val = def_hyb_v;
-
-  //sockfd = open_socket("134.79.229.141",8090);
-  sockfd = open_socket(hostName,port);
-  if(sockfd<0) {
-    printf("ERROR could not open socket %s:%d in readHybridVoltage\n",hostName,port);
-    return;
-  }
-  if (mySubDebug) {
-    printf("Opened TCP/IP socket %d\n",sockfd);
-  }
+  precord->val = def_hyb_i;
+  
   char value[BUF_SIZE];
   memset(value,0,BUF_SIZE);
-  if (mySubDebug) {
-    printf("Read CalDelay\n");
+  constant = 1.;
+  if(strcmp(action,"i_rd_sub")==0) {
+    readHybridI(feb_id, id, ch_name, value, BUF_SIZE);
+    constant = 1e3;
+  } 
+  else if(strcmp(action,"t_rd_sub")==0) {
+    readHybridT(feb_id, id, ch_name, value, BUF_SIZE);
+  } 
+  else if(strcmp(action,"vn_sub")==0) {
+    readHybridV(feb_id, id, ch_name, "NEAR", value, BUF_SIZE);
+  } 
+  else if(strcmp(action,"v_set_sub")==0) {
+    // need to move this to a write function?
+    printf("ERROR: need to move the set voltage function!\n");
+    exit(1);
   }
-  writeReadConfig(sockfd);
-  readCalDelay(&sockfd,value,BUF_SIZE);    
   if (mySubDebug) {
     printf("Got value=\"%s\"\n",value);
   }
   if(strlen(value)>0) {
-    precord->val = atof(value);
+    precord->val = atof(value)*constant;
     if (mySubDebug) {
       printf("precord-val is now %f \n",precord->val);
     }
   }
-  if (mySubDebug) {
-    printf("close socket\n");
-  }
-  close_socket(sockfd);
 }
 
 
-
-
-static void readHybridCurrent(subRecord* precord, char half[],char id[],char ch_name[])
+  static void readFeb(subRecord* precord,char action[], int feb_id, char ch_name[])
 {
   if(mySubDebug) {
-    printf("Record %s called readHybridCurrent for half=%s id=%s ch_name=%s\n",precord->name,half,id,ch_name);
+    printf("Record %s called readFeb %s feb_id=%d ch_name=%s\n",precord->name,action,feb_id,ch_name);
   }
 
-  // use default value until the DAQ map can be added
-  int feb_id;
-  feb_id = 0;
-  
   //set to default
-  precord->val = def_hyb_i;
-
-  //sockfd = open_socket("134.79.229.141",8090);
-  sockfd = open_socket(hostName,port);
-  if(sockfd<0) {
-    printf("ERROR could not open socket %s:%d in readHybridCurrent\n",hostName,port);
-    return;
-  }
-  if (mySubDebug) {
-    printf("Opened TCP/IP socket %d\n",sockfd);
-  }
+  precord->val=def_AxiXadcTemp;
+  
   char value[BUF_SIZE];
   memset(value,0,BUF_SIZE);
-  writeReadConfig(sockfd);
-  char* p_end = id;
-  long int li_id = strtol(id,&p_end,0);
-  if(p_end!=id) {
-    if(feb_id==0) {     
-      if(li_id>=0 && li_id<18) {     
-	if(strcmp(ch_name,"dvdd")==0) {
-	  readHybridI(sockfd,feb_id, (int)li_id, "DVDD", value, BUF_SIZE);	
-	} else {
-	  printf("Invalid hybrid ch_name %s \n",ch_name);
-	}      
-      } else {
-	printf("Invalid Hyb id %s (%ld) \n",id,li_id);
-      }
+  if(strcmp(action,"t_rd_sub")==0) {
+    if(strcmp(ch_name,"axixadc") ==0 ) {
+      readFebT(feb_id, value, BUF_SIZE);
     } else {
-      printf("Invalid FEB id %d \n",feb_id);
+      printf("No such ch_name %s implemented for readFeb!\n",ch_name);
+      return;      
     }
-  } else {
-    printf("Invalid conversion of hyb id %s \n",id);
-  }
+  } 
+  else {
+    printf("No such action %s implemented for readFeb!\n",action);
+    return;
+  } 
   if (mySubDebug) {
     printf("Got value=\"%s\"\n",value);
   }
@@ -224,10 +124,6 @@
       printf("precord-val is now %f \n",precord->val);
     }
   }
-  if (mySubDebug) {
-    printf("close socket\n");
-  }
-  close_socket(sockfd);
 }
 
 
@@ -238,8 +134,8 @@
   if(mySubDebug) {
     printf("Record %s called writeHybridVoltage to val=%f for half=%s id=%s ch_name=%s\n",precord->name,precord->val,half,id,ch_name);
   }
-
-
+  
+  
   sockfd = open_socket(hostName,port);
   if(sockfd<0) {
     printf("ERROR could not open socket in readHybridVoltageNear\n");
@@ -279,6 +175,7 @@
     printf("Record %s called subLVProcess(%p)\n", precord->name, (void*) precord);
   }
   //SVT:lv:hyb:bot:0:dvdd:vn_sub
+  int feb_id;
   char type[BUF_SIZE];
   char board_type[BUF_SIZE];
   char half[BUF_SIZE];
@@ -300,91 +197,144 @@
     printf("ERROR this type is not valid \"%s\"\n",type);
     return 0;
   }
-  
+
+
+  // use default value until the DAQ map can be added
+  if(strcmp(half,"bot")==0) {
+    feb_id = 0;
+  } else {
+    printf("ERROR only bot half can be used. Need to implement DAQ map!\n");
+    return 0;
+  }
+
   if(strcmp(board_type,"hyb")==0) {
-    if(strcmp(action,"vn_sub")==0) {
-      readHybridVoltageNear(precord,half,id,ch_name); 
+    if(strcmp(ch_name,"dvdd")!=0 && strcmp(ch_name,"avdd")!=0 && strcmp(ch_name,"v125")!=0) {
+      printf("ERROR wrong option for hybrid ch: %s\n",ch_name);
+      return 0;
     }
-    else if(strcmp(action,"v_set_sub")==0) {
-      writeHybridVoltage(precord,half,id,ch_name); 
+    if(strcmp(action,"vn_sub")!=0 || strcmp(action,"i_rd_sub")!=0  || strcmp(action,"v_set_sub")!=0) { 
+      printf("ERROR this hybrid action type is not valid \"%s\"\n",action);
+      return 0;
     }
-    else if(strcmp(action,"i_rd_sub")==0) {
-      readHybridCurrent(precord,half,id,ch_name); 
+    char* p_end = id;
+    long int li_id = strtol(id,&p_end,0);
+    if(p_end!=id) {
+      if(li_id<0 && li_id>17) {     
+	printf("ERROR this hybrid id %ld is not valid\n",li_id);
+	return 0;
+      }
     } else {
-      printf("ERROR this action \"%s\" is not defined yet\n",action);
+      printf("ERROR converting this hybrid id %s is not valid\n",id);
+      return 0;      
     }
+    readHybrid(precord,action,half,(int)li_id,feb_id,ch_name);  
   }
   else if(strcmp(board_type,"feb")==0) {
-    printf("ERROR this board type \"%s\" is not implemented yet\n",board_type);
-  }
+    printf("No LV implementation exists for feb\n");
+    return 0;
+  } 
   else {
     printf("ERROR this board type is not valid \"%s\"\n",board_type);
+    return 0;
   }
   
   
+  
+  
   return 0;
 }
 
 
+
 static long subTempProcess(subRecord *precord) {
   if (mySubDebug) {
     printf("Record %s called subTempProcess(%p)\n", precord->name, (void*) precord);
   }
-
-  //record(sub,SVT:lv:fe:0:axixadc:t_rd_sub)
+  //SVT:temp:hyb:bot:0:temp1:t_rd_sub
+  //SVT:temp:hyb:bot:0:temp2:t_rd_sub
+  //SVT:temp:fe:0:axixadc:t_rd_sub)
+  int feb_id;
   char type[BUF_SIZE];
   char board_type[BUF_SIZE];
+  char half[BUF_SIZE];
+  char id[BUF_SIZE];
+  char ch_name[BUF_SIZE];
+  char action[BUF_SIZE];
   getType(precord->name,type,BUF_SIZE);
   getBoardType(precord->name,board_type,BUF_SIZE);
+  getHalf(precord->name,half,BUF_SIZE);
+  getId(precord->name,id,BUF_SIZE);
+  getChName(precord->name,ch_name,BUF_SIZE);
+  getAction(precord->name,action,BUF_SIZE);
 
   if (mySubDebug) {
     printf("Record %s has type %s board type \"%s\"\n", precord->name, type,board_type);
   }
 
-  if(strcmp(type,"lv")!=0) {
+  if(strcmp(type,"temp")!=0) {
     printf("ERROR this type is not valid \"%s\"\n",type);
     return 0;
   }
 
-  char id[BUF_SIZE];
-  char ch_name[BUF_SIZE];
-  char action[BUF_SIZE];
+  if(strcmp(action,"t_rd_sub")!=0) {
+    printf("ERROR this action type is not valid \"%s\"\n",action);
+      return 0;
+  }
+  
 
+  // use default value until the DAQ map can be added
+  if(strcmp(half,"bot")==0) {
+    feb_id = 0;
+  } else {
+    printf("ERROR only bot half can be used. Need to implement DAQ map!\n");
+    return 0;
+  }
+
   if(strcmp(board_type,"hyb")==0) {
-    
-    char half[BUF_SIZE];    
-    getHalf(precord->name,half,BUF_SIZE);
-    getId(precord->name,id,BUF_SIZE);
-    getChName(precord->name,ch_name,BUF_SIZE);
-    getAction(precord->name,action,BUF_SIZE);
-  
-    if(strcmp(action,"t_rd_sub")==0) {
-      //readHybridVoltageNear(precord,half,id,ch_name); 
+    if(strcmp(ch_name,"temp1")!=0 && strcmp(ch_name,"temp2")!=0) {
+      printf("ERROR wrong option for hybrid ch: %s\n",ch_name);
+      return 0;
+    }
+    char* p_end = id;
+    long int li_id = strtol(id,&p_end,0);
+    if(p_end!=id) {
+      if(li_id<0 && li_id>17) {     
+	printf("ERROR this hybrid id %ld is not valid\n",li_id);
+	return 0;
+      }
     } else {
-      printf("ERROR this action \"%s\" is not defined yet\n",action);
+      printf("ERROR converting this hybrid id %s is not valid\n",id);
+      return 0;      
     }
-  }
-  else if(strcmp(board_type,"fe")==0) {
 
-    getFebId(precord->name,id,BUF_SIZE);
-    getFebChName(precord->name,ch_name,BUF_SIZE);
-    getFebAction(precord->name,action,BUF_SIZE);
+    readHybrid(precord,action,half,(int)li_id,feb_id,ch_name);  
 
-    if(strcmp(action,"t_rd_sub")==0) {
-      readFebTemp(precord,id,ch_name);
-    } else {
-      printf("ERROR this action \"%s\" is not defined yet\n",action);
-    }
   }
+  else if(strcmp(board_type,"feb")==0) {
+    if(strcmp(ch_name,"axixadc") ) {
+      printf("ERROR wrong option for hybrid ch: %s\n",ch_name);
+      return 0;
+    }
+    
+    readFeb(precord,action,feb_id,ch_name);  
+    
+    //SVT:temp:fe:0:axixadc:t_rd_sub)
+    
+  } 
   else {
     printf("ERROR this board type is not valid \"%s\"\n",board_type);
+    return 0;
   }
   
   
+  
+  
   return 0;
 }
 
 
+
+
 static long subPollProcess(subRecord *precord) {
   if (mySubDebug) {
     printf("Record %s called subPollProcess(%p)\n", precord->name, (void*) precord);
SVNspam 0.1