00001
00002
00003 #include <RC_Config.h>
00004 #include <rtsSystems.h>
00005 #include <stdio.h>
00006 #include <string.h>
00007 #include <ctype.h>
00008 #include <rtsLog.h>
00009 #include "cfgutil.h"
00010
00011
00012
00013
00014 static int init=0;
00015 static char evpgroups[32][40];
00016
00017 int getRccnf(const char *fn, rccnf *desc)
00018 {
00019 char buff[80];
00020
00021
00022
00023 memset(desc, 0, sizeof(rccnf));
00024
00025 FILE *f = fopen(fn, "ro");
00026 if(!f) return -1;
00027
00028 if(fscanf(f,"run %d\n",&desc->run) != 1) {
00029 fclose(f);
00030 return -1;
00031 }
00032
00033 if(fscanf(f,"detmask 0x%x\n",&desc->detMask) != 1) {
00034 printf("Blah\n");
00035 fclose(f);
00036 return -1;
00037 }
00038
00039 desc->detMask |= (1<<TRG_ID);
00040 desc->detMask |= (1<<SC_ID);
00041 desc->detMask &= ~(1<<DAQ_ID);
00042
00043
00044 int found=0;
00045 while(fgets(buff,80,f)) {
00046 if(strstr(buff, "evpgroups:") != buff) continue;
00047 found = 1;
00048 break;
00049 }
00050
00051 if(!found) {
00052 fclose(f);
00053 return -1;
00054 }
00055
00056 int in1,in2;
00057
00058 while(fscanf(f,"%s %d %d\n",buff,&in1,&in2) == 3) {
00059 desc->grpMask |= (1<<in1);
00060 }
00061
00062 fclose(f);
00063 return 0;
00064 }
00065
00066 void initEvpGroups()
00067 {
00068 char str[80],str2[80];
00069 memset(evpgroups, 0, sizeof(evpgroups));
00070 int id;
00071
00072 FILE *f = fopen("/RTS/conf/handler/evpGroups.txt", "ro");
00073 if(!f) return;
00074
00075 while(fgets(str, 80, f) == str) {
00076 if(str[0] == '#') continue;
00077
00078 sscanf(str, "%d %s\n",&id, str2);
00079
00080 strcpy(evpgroups[id],str2);
00081 }
00082
00083 printf("Bye\n");
00084
00085 fclose(f);
00086 init = 1;
00087 }
00088
00089
00090
00091 int s2did(char *str)
00092 {
00093 for(int i=0;i<32;i++) {
00094 const char *t = rts2name(i);
00095 if(t) {
00096 if(strcasecmp(t,str) == 0) return i;
00097 }
00098 }
00099
00100 return -1;
00101 }
00102
00103
00104 UINT32 str2detmask(const char *str)
00105 {
00106 char s[256];
00107 UINT32 mask = 0;
00108 int id;
00109
00110 strcpy(s,str);
00111 char *t = strtok(s,",");
00112
00113 while(t) {
00114 id = s2did(t);
00115 if(id >= 0) {
00116 mask |= (1<<id);
00117 }
00118 else {
00119 LOG(DBG, "Invalid detector: %s",t,0,0,0,0);
00120 }
00121
00122 t = strtok(NULL,",");
00123 }
00124
00125 return mask;
00126 }
00127
00128
00129 int s2gid(const char *str)
00130 {
00131 for(int i=0;i<32;i++) {
00132 if(strcasecmp(str,evpgroups[i]) == 0) return i;
00133 }
00134
00135 return -1;
00136 }
00137
00138
00139 UINT32 str2evpgroupmask(const char *str)
00140 {
00141 char s[256];
00142 UINT32 mask = 0;
00143 int id;
00144
00145 if(init == 0) initEvpGroups();
00146
00147 strcpy(s,str);
00148 char *t = strtok(s,",");
00149
00150 while(t) {
00151 id = s2gid(t);
00152
00153 if(id >= 0) {
00154 mask |= (1<<id);
00155 }
00156 else {
00157 LOG(ERR, "Invalid evpgroup: %s",t,0,0,0,0);
00158 }
00159
00160 t = strtok(NULL,",");
00161 }
00162
00163 return mask;
00164 }
00165
00166 #ifdef DEBUG_UTIL
00167
00168 int main(int argc, char *argv[])
00169 {
00170 rtsLogLevel(DBG);
00171 rtsLogOutput(RTS_LOG_STDERR);
00172
00173 rccnf x;
00174
00175 getRccnf("0.txt",&x);
00176
00177 printf(":::%d : 0x%x : 0x%x\n",x.run,x.detMask,x.grpMask);
00178
00179 LOG(ERR, "Hello",0,0,0,0,0);
00180 char *str = "tpc,daq,trg,svt,horse";
00181 char *str2 = "pedestal,b1,b3,b4";
00182 printf("dets: %s 0x%x\n",str,str2detmask(str));
00183 printf("evpgrps: %s 0x%x\n",str2,str2evpgroupmask(str2));
00184 }
00185
00186 #endif