recreate.h File Reference

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

void recreate_cfg_objects ()
void init_cfgparser (unsigned char[])

Function Documentation

void init_cfgparser ( unsigned  char[]  ) 

WHILE EACH PMU IS HANDLED

PHASOR FACTORS

INCOMPLETE

Definition at line 109 of file recreate.c.

References format::analog, channel_names::angnames, for_each_pmu::annmr, for_each_pmu::anunit, for_each_pmu::cfg_cnt, cfgfirst, cfg_frame::cfgnext, for_each_pmu::cnext, copy_cbyc(), for_each_pmu::data_format, cfg_frame::data_rate, dgnames::dg_next, dgnames::dgn, for_each_pmu::dgnmr, for_each_pmu::dgunit, channel_names::first, for_each_pmu::fmt, for_each_pmu::fnom, cfg_frame::fracsec, cfg_frame::framesize, format::freq, for_each_pmu::idcode, cfg_frame::idcode, mutex_cfg, mutex_file, cfg_frame::num_pmu, format::phasor, channel_names::phnames, for_each_pmu::phnmr, for_each_pmu::phunit, cfg_frame::pmu, format::polar, cfg_frame::soc, for_each_pmu::stn, cfg_frame::time_base, to_intconvertor(), and to_long_int_convertor().

Referenced by recreate_cfg_objects().

00109                                        { 
00110 
00111           unsigned char *s;
00112           int cfglen = 0;
00113           int i,j,k,dgchannels;
00114           struct cfg_frame *cfg;
00115           struct channel_names *cn;
00116           unsigned long int l_phunit,l_anunit;
00117 
00118           unsigned char *sync,*frame_size,*idcode_h,*soc,*fracsec,*time_base,*num_pmu,*stn,*idcode_l,*format,*phnmr,*annmr,*dgnmr;
00119           unsigned char *fnom,*cfg_cnt,*data_rate,*buf;
00120 
00121           sync = malloc(3);
00122           frame_size = malloc(3);
00123           idcode_h= malloc(3);
00124           soc = malloc(5);
00125           fracsec = malloc(5);
00126           time_base = malloc(5);
00127           num_pmu = malloc(3);
00128           stn = malloc(17);
00129           idcode_l = malloc(3);
00130           format = malloc(5);
00131           phnmr = malloc(3);
00132           annmr = malloc(3);
00133           dgnmr = malloc(3);
00134 
00135           fnom = malloc(3);
00136           cfg_cnt = malloc(3);
00137           data_rate = malloc(3);
00138           buf = malloc(9);
00139         
00140 
00141           memset(sync,'\0',3);
00142           memset(frame_size,'\0',3);
00143           memset(idcode_h,'\0',3);
00144           memset(soc,'\0',3);
00145           memset(fracsec,'\0',5);
00146           memset(time_base,'\0',5);
00147           memset(num_pmu,'\0',3);
00148           memset(stn,'\0',17);
00149           memset(idcode_l,'\0',3);
00150           memset(format,'\0',3);
00151           memset(phnmr,'\0',3);
00152           memset(annmr,'\0',3);
00153           memset(dgnmr,'\0',3);
00154         
00155           memset(fnom,'\0',3);
00156           memset(cfg_cnt ,'\0',3);
00157           memset(data_rate,'\0',3);
00158           memset(buf,'\0',9);
00159         
00160 
00161 /******************** PARSING BEGINGS *******************/
00162 
00163            pthread_mutex_lock(&mutex_file);
00164           
00165            cfg = malloc(sizeof(struct cfg_frame));
00166            if(!cfg) {
00167                 printf("No enough memory for cfg\n");
00168            }
00169 
00170            printf("Inside INIT cfgparser()\n");
00171            s = st;
00172 
00173          //Copy sync word to file
00174           copy_cbyc (sync,s,2);
00175           sync[2] = '\0';
00176           s = s + 2;
00177 
00178         // Separate the FRAME SIZE
00179           copy_cbyc (frame_size,s,2);
00180           frame_size[2]='\0';
00181           cfg->framesize = to_intconvertor(frame_size);
00182           printf("FRAME SIZE %d\n",cfg->framesize);
00183           s = s + 2;
00184           cfglen += 2;
00185 
00186          //SEPARATE IDCODE
00187           copy_cbyc (idcode_h,s,2);
00188           idcode_h[2] = '\0';
00189           cfg->idcode = to_intconvertor(idcode_h);
00190           printf("ID Code %d\n",cfg->idcode);
00191           s = s + 2;
00192           cfglen += 2;
00193         
00194          //SEPARATE SOC 
00195           copy_cbyc (soc,s,4);
00196           soc[4] = '\0';
00197           sscanf((unsigned int *)soc,"%x", (unsigned int *)&cfg->soc);                  
00198           printf("SOC %ld\n",cfg->soc);
00199           s =s + 4;
00200           cfglen += 4;
00201 
00202          //SEPARATE FRACSEC     
00203           copy_cbyc (fracsec, s,4);
00204           fracsec[4] = '\0';
00205           cfg->fracsec = to_long_int_convertor(fracsec);         
00206           printf("FracSec %ld\n",cfg->fracsec);
00207           s = s + 4;
00208           cfglen += 4;
00209         
00210           //SEPARATE TIMEBASE
00211           copy_cbyc (time_base, s,4);
00212           time_base[4]='\0';
00213           cfg->time_base = to_long_int_convertor(time_base);                    
00214           printf("Time Base %ld\n",cfg->time_base);
00215           s = s + 4;
00216           cfglen += 4;
00217 
00218           //SEPARATE PMU NUM
00219           copy_cbyc (num_pmu, s,2);
00220           num_pmu[2] = '\0';    
00221           cfg->num_pmu = to_intconvertor(num_pmu);              
00222           printf("Number of PMU's %d\n",cfg->num_pmu);
00223           s = s + 2;
00224           cfglen += 2;
00225 
00226           // Allocate Memeory For Each PMU
00227           cfg->pmu = malloc(cfg->num_pmu* sizeof(struct for_each_pmu *));
00228           if(!cfg->pmu) {
00229               printf("Not enough memory pmu[][]\n");
00230               exit(1);
00231           }
00232         
00233           for (i = 0; i < cfg->num_pmu; i++) {
00234               cfg->pmu[i] = malloc(sizeof(struct for_each_pmu));
00235           }
00236         
00237           j = 0;
00238                 
00240           while(j<cfg->num_pmu) {
00241 
00242                   //SEPARATE STATION NAME
00243                   memset(cfg->pmu[j]->stn,'\0',17);
00244                   copy_cbyc (cfg->pmu[j]->stn, s,16);
00245                   cfg->pmu[j]->stn[16] = '\0';
00246 
00247                   printf("STATION NAME %s\n",cfg->pmu[j]->stn);                         
00248                   s = s + 16;
00249                   cfglen += 16;
00250 
00251                   //SEPARATE IDCODE             
00252                   copy_cbyc (idcode_l, s,2);
00253                   idcode_l[2]='\0';
00254                   cfg->pmu[j]->idcode = to_intconvertor(idcode_l);
00255                   printf("ID Code %d\n",cfg->pmu[j]->idcode);
00256                   s = s + 2;
00257                   cfglen += 2;
00258         
00259                   //SEPARATE DATA FORMAT                
00260                   copy_cbyc ((unsigned char *) cfg->pmu[j]->data_format, s,2);
00261                   cfg->pmu[j]->data_format[2]='\0';
00262                   printf("PMU format %s\n",cfg->pmu[j]->data_format);
00263                   s = s + 2;
00264                   cfglen += 2;
00265 
00266                   char hex = cfg->pmu[j]->data_format[1];
00267                   hex <<= 4;
00268                         
00269                   // Extra field has been added to identify polar,rectangular,floating/fixed point      
00270                   cfg->pmu[j]->fmt = malloc(sizeof(struct format));
00271                   cfg->pmu[j]->fmt->freq = (hex & 0x80) >> 7;
00272                   cfg->pmu[j]->fmt->analog = (hex & 0x40) >> 6;
00273                   cfg->pmu[j]->fmt->phasor = (hex & 0x20) >> 5;
00274                   cfg->pmu[j]->fmt->polar = (hex & 0x10) >> 4;       
00275                      
00276                   //SEPARATE PHASORS    
00277                   copy_cbyc (phnmr, s,2);
00278                   phnmr[2]='\0';
00279                   cfg->pmu[j]->phnmr = to_intconvertor(phnmr);
00280                   printf("Phasors %d\n",cfg->pmu[j]->phnmr);
00281                   s = s + 2;
00282                   cfglen += 2;
00283 
00284                   //SEPARATE ANALOGS                    
00285                   copy_cbyc (annmr, s,2);
00286                   annmr[2]='\0';
00287                   cfg->pmu[j]->annmr = to_intconvertor(annmr);
00288                   printf("Analogs %d\n",cfg->pmu[j]->annmr);
00289                   s = s + 2;
00290                   cfglen += 2;
00291 
00292                   //SEPARATE DIGITALS                   
00293                   copy_cbyc (dgnmr, s,2);
00294                   dgnmr[2]='\0';
00295                   cfg->pmu[j]->dgnmr = to_intconvertor(dgnmr);
00296                   printf("Digitals %d\n",cfg->pmu[j]->dgnmr);
00297                   s = s + 2; 
00298                   cfglen += 2;
00299 
00300                   cn = malloc(sizeof(struct channel_names));
00301                   cn->first = NULL;
00302 
00304                  if(cfg->pmu[j]->phnmr != 0){
00305                            cn->phnames = malloc((cfg->pmu[j]->phnmr) * sizeof(char*));
00306                            if(!cn->phnames) {
00307                                    printf("Not enough memory cfg->pmu[j]->cn->phnames[][]\n");
00308                                    exit(1);
00309                            }
00310                 
00311                         for (i = 0; i < cfg->pmu[j]->phnmr; i++) {
00312 
00313                                 cn->phnames[i] = malloc(17*sizeof(char));
00314                                 memset(cn->phnames[i],'\0',17);
00315 
00316                         }
00317 
00318                         cfg->pmu[j]->phunit = malloc(cfg->pmu[j]->phnmr*sizeof(float*));
00319                         if(!cfg->pmu[j]->phunit) {
00320                                 printf("Not enough memory cfg.pmu[j]->phunit[][]\n");
00321                                 exit(1);
00322                         }
00323         
00324                         for (i = 0; i < cfg->pmu[j]->phnmr; i++) {
00325                                 cfg->pmu[j]->phunit[i] = malloc(sizeof(float));
00326                         }
00327 
00328                 
00329                         i = 0;//Index for PHNAMES
00330                         while(i<cfg->pmu[j]->phnmr){
00331 
00332                                 copy_cbyc (cn->phnames[i], s,16);
00333                                 cn->phnames[i][16] = '\0';
00334                                 printf("Phnames %s\n",cn->phnames[i]);
00335                                 s = s + 16;
00336                                 cfglen += 16;
00337                                 i++;
00338                         }       
00339                  }              
00340                                         
00341                 //SEPARATE ANALOG NAMES
00342                  if(cfg->pmu[j]->annmr != 0){
00343                           cn->angnames = malloc((cfg->pmu[j]->annmr)*sizeof(char*));
00344                           if(!cn->angnames) {
00345 
00346                                 printf("Not enough memory cfg->pmu[j]->cn->phnames[][]\n");
00347                                 exit(1);
00348                           }
00349                         
00350                           for (i = 0; i < cfg->pmu[j]->annmr; i++) {
00351 
00352                                 cn->angnames[i] = malloc(17*sizeof(char));
00353                                 memset(cn->angnames[i],'\0',17);
00354                           }
00355                         
00356                           cfg->pmu[j]->anunit = malloc(cfg->pmu[j]->annmr*sizeof(float*));
00357                           if(!cfg->pmu[j]->anunit) {
00358                                 printf("Not enough memory cfg.pmu[j]->anunit[][]\n");
00359                                 exit(1);
00360                           }
00361 
00362                           for (i = 0; i < cfg->pmu[j]->annmr; i++) {
00363                                 cfg->pmu[j]->anunit[i] = malloc(sizeof(float));
00364                           }
00365                          
00366                           i = 0;//Index for ANGNAMES
00367 
00368                           while(i<cfg->pmu[j]->annmr){
00369                                 copy_cbyc (cn->angnames[i], s,16);
00370                                 cn->angnames[i][16]='\0';
00371                                 printf("ANGNAMES %s\n",cn->angnames[i]);
00372                                 s = s + 16; 
00373                                 cfglen += 16;
00374                                 i++;
00375                           }
00376                  }
00377                         
00378 
00379                  if(cfg->pmu[j]->dgnmr != 0){
00380                 
00381                         cfg->pmu[j]->dgunit = malloc(cfg->pmu[j]->dgnmr*sizeof(char*));
00382                         if(!cfg->pmu[j]->dgunit) {
00383 
00384                                 printf("Not enough memory cfg->pmu[j]->dgunit[][]\n");
00385                                 exit(1);
00386                         }
00387                 
00388                         for (i = 0; i < cfg->pmu[j]->dgnmr; i++) {
00389 
00390                                 cfg->pmu[j]->dgunit[i] = malloc(5);
00391                         }
00392                  }
00393                  struct dgnames *q;
00394                  i = 0; //Index for number of dgwords
00395                  while(i < cfg->pmu[j]->dgnmr) {
00396 
00397                         struct dgnames *temp1 = malloc(sizeof(struct dgnames));
00398                         temp1->dgn = malloc(16*sizeof(char *)); 
00399                         if(!temp1->dgn) {
00400 
00401                                 printf("Not enough memory temp1->dgn\n");
00402                                 exit(1);
00403                         }
00404 
00405                         for (i = 0; i < 16; i++) {
00406 
00407                                 temp1->dgn[i] = malloc(17*sizeof(char));
00408 
00409                         }
00410                         
00411                         temp1->dg_next = NULL;
00412 
00413                         for(dgchannels = 0;dgchannels < 16;dgchannels++){
00414 
00415                                    memset(temp1->dgn[dgchannels],'\0',16);
00416                                    copy_cbyc (temp1->dgn[dgchannels], s,16);
00417                                    temp1->dgn[dgchannels][16] = '\0';
00418                                    s += 16;
00419                                    cfglen += 16;
00420                                    k = 0;  
00421                                    printf("%s\n",temp1->dgn[dgchannels]);
00422                          }
00423 
00424                          if(cn->first == NULL){
00425                                 cn->first = q = temp1;
00426 
00427                          } else {
00428 
00429                                 while(q->dg_next!=NULL){
00430                                         q = q->dg_next;
00431                                 }
00432                                 q->dg_next = temp1;                            
00433                          }  
00434                  
00435                         i++;  
00436                 } //DGWORD WHILE ENDS
00437 
00438                 cfg->pmu[j]->cnext = cn;//Assign to pointers
00439 
00441                 if(cfg->pmu[j]->phnmr != 0){
00442                 
00443                         i = 0;
00444                         while(i < cfg->pmu[j]->phnmr){ //Separate the Phasor conversion factors
00445 
00446                                   memset(buf,'\0',9);
00447                                   copy_cbyc (buf, s,4);
00448                                   buf[4] = '\0';
00449                                   l_phunit = to_long_int_convertor(buf);
00450                                   *cfg->pmu[j]->phunit[i] = l_phunit * 0.00001;
00451                                   printf("Phasor Fact %d = %f\n",i,*cfg->pmu[j]->phunit[i]);
00452                                   s = s + 4;
00453                                   cfglen += 4;
00454                                   i++;
00455                         }
00456                   }//if for PHASOR Factors ends
00457         
00458                 //ANALOG FACTORS
00459                   if(cfg->pmu[j]->annmr != 0){
00460 
00461                         i=0;
00462                         while(i<cfg->pmu[j]->annmr){ //Separate the Phasor conversion factors
00463 
00464                                   memset(buf,'\0',9);
00465                                   copy_cbyc (buf, s,4);
00466                                   buf[4] = '\0';
00467                                   l_anunit = to_long_int_convertor(buf);
00468                                   *cfg->pmu[j]->anunit[i] = l_anunit*0,00001;
00469                                   printf("Analog Fact %d = %f\n",i,*cfg->pmu[j]->anunit[i]);
00470                                   s = s + 4;
00471                                   cfglen += 4;
00472                                   i++;
00473                         }
00474         
00475                   } // if for ANALOG FActtors ends
00476                 
00478                   if(cfg->pmu[j]->dgnmr != 0){
00479                 
00480                         i = 0;
00481                         while(i < cfg->pmu[j]->dgnmr ){ //Separate the Phasor conversion factors
00482 
00483                                   copy_cbyc(cfg->pmu[j]->dgunit[i],s,4);
00484                                   cfg->pmu[j]->dgunit[i][4] = '\0';
00485                                   printf("DGWORD %s\n",cfg->pmu[j]->dgunit[i]); 
00486                                   s += 4;
00487                                   cfglen += 4;
00488                                   i++;
00489                         }
00490                   } //if for Digital Words FActtors ends
00491                                         
00492                   copy_cbyc (fnom, s,2);
00493                   fnom[2]='\0';
00494                   cfg->pmu[j]->fnom = to_intconvertor(fnom);
00495                   printf("FREQUENCY %d\n",cfg->pmu[j]->fnom);
00496                   s = s + 2;
00497                   cfglen += 2;
00498                 
00499                   copy_cbyc (cfg_cnt, s,2);
00500                   cfg_cnt[2] = '\0';
00501                   cfg->pmu[j]->cfg_cnt = to_intconvertor(cfg_cnt);
00502                   printf("CFG CHANGE COUNT %d\n",cfg->pmu[j]->cfg_cnt);
00503                   s = s + 2;
00504                   cfglen += 2;
00505                   j++; 
00506           }//While for PMU number ends
00507                 
00508                 
00509           copy_cbyc (data_rate, s,2);
00510           data_rate[2] = '\0';
00511           cfg->data_rate = to_intconvertor(data_rate);
00512           printf("Data Rate %d\n",cfg->data_rate);
00513           s += 2;
00514           cfglen += 2;
00515           cfg->cfgnext = NULL;
00516      
00517 // Adjust the configuration object pointers
00518 // Lock the mutex_cfg    
00519         pthread_mutex_lock(&mutex_cfg);
00520 
00521         if (cfgfirst == NULL)  { // Main if
00522 
00523                 cfgfirst = cfg; 
00524 
00525         } else {
00526 
00527                 struct cfg_frame *temp_cfg = cfgfirst;
00528 
00529                 //Check if the configuration frame already exists
00530                 while(temp_cfg->cfgnext != NULL){
00531 
00532                         temp_cfg = temp_cfg->cfgnext;
00533                         
00534                 }// While ends
00535                 temp_cfg->cfgnext = cfg;
00536           
00537         } //Main if
00538 
00539         pthread_mutex_unlock(&mutex_cfg);
00540         pthread_mutex_unlock(&mutex_file);
00541 
00542         free(sync);
00543         free(frame_size);
00544         free(idcode_h);
00545         free(soc);
00546         free(fracsec);
00547         free(time_base);
00548         free(num_pmu);
00549         free(stn);
00550         free(idcode_l);
00551         free(format);
00552         free(phnmr);
00553         free(annmr);
00554         free(dgnmr);
00555         free(fnom);
00556         free(cfg_cnt);
00557         free(data_rate);
00558         free(buf);
00559 
00560 
00561 } 

Here is the call graph for this function:

Here is the caller graph for this function:

void recreate_cfg_objects (  ) 

Definition at line 56 of file recreate.c.

References init_cfgparser(), mutex_cfg, mutex_file, mutex_MYSQL_CONN_ON_CFG, mutex_MYSQL_CONN_ON_DATA, and to_intconvertor().

Referenced by main().

00056                            { 
00057 
00058 /* ---------------------------------------------------------------- */
00059 /*        Initialize Global Mutex Variable from global.h            */
00060 /* ---------------------------------------------------------------- */
00061         pthread_mutex_init(&mutex_file, NULL);
00062         pthread_mutex_init(&mutex_cfg, NULL);
00063         pthread_mutex_init(&mutex_MYSQL_CONN_ON_DATA, NULL);
00064         pthread_mutex_init(&mutex_MYSQL_CONN_ON_CFG, NULL);
00065 
00066         static const char filename[] = "cfg.bin";        
00067 
00068         FILE *file = fopen (filename,"rb");
00069         unsigned char *line,frame_len[2];
00070         unsigned int framesize;
00071         unsigned long fileLen;
00072 
00073         if (file != NULL) {
00074 
00075                         //Get file length
00076                         fseek(file, 0, SEEK_END);
00077                         fileLen = ftell(file);
00078                         fseek(file, 0, SEEK_SET);
00079                         printf("FILE LEN LEFT %ld\n",fileLen);
00080                         printf("Creating objects for entries in cfg.bin\n");
00081 
00082                         while (fileLen != 0) /* Till the EOF */{
00083 
00084                                 fseek (file,2 ,SEEK_CUR);
00085                                 fread(frame_len, sizeof(unsigned char),2, file);
00086                                 fseek (file,-4 ,SEEK_CUR);
00087                                 
00088                                 framesize = to_intconvertor(frame_len);
00089                                 line = malloc(framesize*sizeof(unsigned char));
00090                                 memset(line,'\0',sizeof(line));
00091                                 fread(line, sizeof(unsigned char),framesize,file);                              
00092                                 init_cfgparser(line);
00093                                 free(line);
00094                                 fileLen -= framesize;
00095                         }
00096                         fclose (file);
00097 
00098         } else {
00099                         perror (filename); /* why didn't the file open? */
00100         }
00101 } 

Here is the call graph for this function:

Here is the caller graph for this function:

Generated on Tue Jun 7 13:41:21 2011 for iPDC-DBServer by  doxygen 1.6.3