
Go to the source code of this file.
Data Structures | |
| struct | cfg_frame |
| struct | for_each_pmu |
| struct | channel_names |
| struct | dgnames |
| struct | format |
Defines | |
| #define | MAXBUFLEN 2000 |
Functions | |
| void | cfgparser (unsigned char[]) |
| void | cfginsert (struct cfg_frame *) |
| int | dataparser (unsigned char data[]) |
| char * | hexTobin (char s) |
| int | check_statword (unsigned char stat[]) |
| void | remove_old_cfg (int idcode, unsigned char frame[]) |
| unsigned int | to_intconvertor (unsigned char array[]) |
| unsigned long int | to_long_int_convertor (unsigned char *array) |
| float | decode_ieee_single (const void *v) |
| void | copy_cbyc (unsigned char dst[], unsigned char *s, int size) |
| int | ncmp_cbyc (unsigned char dst[], unsigned char src[], int size) |
Variables | |
| struct cfg_frame * | cfgfirst |
| void cfginsert | ( | struct cfg_frame * | ) |
Definition at line 684 of file parser.c.
References channel_names::angnames, for_each_pmu::annmr, for_each_pmu::anunit, for_each_pmu::cnext, conn_cfg, cfg_frame::data_rate, dgnames::dg_next, dgnames::dgn, for_each_pmu::dgnmr, for_each_pmu::dgunit, channel_names::first, for_each_pmu::fnom, cfg_frame::fracsec, for_each_pmu::idcode, cfg_frame::idcode, mutex_MYSQL_CONN_ON_CFG, cfg_frame::num_pmu, channel_names::phnames, for_each_pmu::phnmr, for_each_pmu::phunit, cfg_frame::pmu, cfg_frame::soc, for_each_pmu::stn, cfg_frame::time_base, and to_long_int_convertor().
Referenced by cfgparser().
00684 { 00685 00686 int i,j,k; 00687 char *cmd,*cmd2; 00688 MYSQL_RES *res1,*res2,*res3,*res4; 00689 00690 printf("INSIDE CFG INSERT\n"); 00691 00692 cmd = malloc(1000); 00693 cmd2 = malloc(500); 00694 memset(cmd,'\0',1000); 00695 memset(cmd2,'\0',500); 00696 00697 pthread_mutex_lock(&mutex_MYSQL_CONN_ON_CFG); 00698 00699 sprintf(cmd2, "SELECT * FROM MAIN_CFG_TABLE WHERE PDC_ID = %d",cfg->idcode); 00700 00701 00702 if (mysql_query(conn_cfg,cmd2)) { 00703 00704 fprintf(stderr, "%s\n", mysql_error(conn_cfg)); 00705 exit(1); 00706 } 00707 00708 res1 = mysql_use_result(conn_cfg); 00709 if(mysql_fetch_row(res1)== NULL) { 00710 00711 mysql_free_result(res1); 00712 printf("No Entry Make Insert into table\n"); 00713 memset(cmd,'\0',1000); 00714 sprintf(cmd, "INSERT INTO MAIN_CFG_TABLE VALUES(%d,%ld,%ld,%ld,%d,%d)",cfg->idcode,cfg->soc,cfg->fracsec, 00715 cfg->time_base,cfg->num_pmu,cfg->data_rate); 00716 if (mysql_query(conn_cfg, cmd)) { 00717 00718 fprintf(stderr, "%s\n", mysql_error(conn_cfg)); 00719 exit(1); 00720 } 00721 printf("%s\n",cmd); 00722 00723 j = 0; 00724 while(j < cfg->num_pmu){ 00725 00726 memset(cmd,'\0',1000); 00727 //unsigned long int data_format = to_long_int_convertor(cfg->pmu[j]->data_format); 00728 00729 sprintf(cmd,"INSERT INTO SUB_CFG_TABLE(PDC_ID,PMU_ID,SOC,FRACSEC,STN,PHNMR,ANNMR,DGNMR,FNOM) VALUES(%d,%d,%ld,%ld,\"%s\",%d,%d,%d,%d)",cfg->idcode,cfg->pmu[j]->idcode,cfg->soc,cfg->fracsec,cfg->pmu[j]->stn,cfg->pmu[j]->phnmr,cfg->pmu[j]->annmr,cfg->pmu[j]->dgnmr,cfg->pmu[j]->fnom); 00730 00731 printf("%s\n",cmd); 00732 00733 if (mysql_query(conn_cfg, cmd)) { 00734 00735 fprintf(stderr, "%s\n", mysql_error(conn_cfg)); 00736 exit(1); 00737 } 00738 00739 00740 if(cfg->pmu[j]->phnmr != 0){ 00741 for(i = 0;i<cfg->pmu[j]->phnmr;i++) { 00742 00743 memset(cmd,'\0',1000); 00744 sprintf(cmd,"INSERT INTO PHASOR(PDC_ID,PMU_ID,PHASOR_NAMES,PHUNITS) VALUES (%d,%d,\"%s\",%f)",cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->cnext->phnames[i],*cfg->pmu[j]->phunit[i]); printf("%s\n",cmd); 00745 00746 if (mysql_query(conn_cfg, cmd)) { 00747 00748 fprintf(stderr, "%s\n", mysql_error(conn_cfg)); 00749 exit(1); 00750 } 00751 } 00752 } 00753 00754 if(cfg->pmu[j]->annmr != 0){ 00755 for(i = 0;i<cfg->pmu[j]->annmr;i++) { 00756 00757 memset(cmd,'\0',1000); 00758 sprintf(cmd,"INSERT INTO ANALOG(PDC_ID,PMU_ID,ANALOG_NAMES,ANUNITS) VALUES(%d,%d,\"%s\",%f)",cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->cnext->angnames[i],*cfg->pmu[j]->anunit[i]); printf("%s\n",cmd); 00759 if (mysql_query(conn_cfg, cmd)) { 00760 00761 fprintf(stderr, "%s\n", mysql_error(conn_cfg)); 00762 exit(1); 00763 } 00764 } 00765 } 00766 00767 if(cfg->pmu[j]->dgnmr != 0){ 00768 00769 unsigned long int dunit; 00770 struct dgnames *temp_dnames = cfg->pmu[j]->cnext->first; 00771 for(i = 0;i<cfg->pmu[j]->dgnmr;i++) { 00772 00773 for(k = 0;k<16;k++) { 00774 00775 dunit = to_long_int_convertor(cfg->pmu[j]->dgunit[i]); 00776 memset(cmd,'\0',1000); 00777 sprintf(cmd,"INSERT INTO DIGITAL(PDC_ID,PMU_ID,DIGITAL_NAMES,DIGITAL_WORD) VALUES(%d,%d,\"%s\",%u)",cfg->idcode,cfg->pmu[j]->idcode,temp_dnames->dgn[k],(unsigned int)dunit); 00778 00779 if (mysql_query(conn_cfg, cmd)) { 00780 00781 fprintf(stderr, "%s\n", mysql_error(conn_cfg)); 00782 exit(1); 00783 } 00784 } 00785 00786 temp_dnames = temp_dnames->dg_next; 00787 } 00788 } 00789 00790 j++; 00791 } 00792 00793 } else { 00794 00795 // update 00796 mysql_free_result(res1); 00797 printf("Update the existing entry in table\n"); 00798 memset(cmd,'\0',1000); 00799 sprintf(cmd, "UPDATE MAIN_CFG_TABLE SET SOC = %ld,FRACSEC = %ld,TIMEBASE = %ld,NUM_OF_PMU = %d,DATA_RATE = %d WHERE PDC_ID = %d",cfg->soc,cfg->fracsec,cfg->time_base,cfg->num_pmu,cfg->data_rate,cfg->idcode); 00800 printf("%s\n",cmd); 00801 00802 if (mysql_query(conn_cfg,cmd)) { 00803 00804 fprintf(stderr, "%s\n", mysql_error(conn_cfg)); 00805 exit(1); 00806 } 00807 mysql_query(conn_cfg, "COMMIT"); 00808 00809 int j = 0; 00810 while(j < cfg->num_pmu){ 00811 00812 memset(cmd2,'\0',500); 00813 sprintf(cmd2, "SELECT * FROM SUB_CFG_TABLE WHERE PDC_ID = %d AND PMU_ID = %d AND STN = \"%s\"",cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->stn); 00814 if (mysql_query(conn_cfg, cmd2)) { 00815 00816 fprintf(stderr, "%s\n", mysql_error(conn_cfg)); 00817 exit(1); 00818 } 00819 res2 = mysql_use_result(conn_cfg); 00820 printf("%s\n",cmd2); 00821 00822 if(mysql_fetch_row(res2)== NULL) { 00823 00824 mysql_free_result(res2); 00825 memset(cmd,'\0',1000); 00826 sprintf(cmd,"INSERT INTO SUB_CFG_TABLE(PDC_ID,PMU_ID,SOC,FRACSEC,STN,PHNMR,ANNMR,DGNMR,FNOM) VALUES(%d,%d,%ld,%ld,\"%s\",%d,%d,%d,%d)",cfg->idcode,cfg->pmu[j]->idcode,cfg->soc,cfg->fracsec,cfg->pmu[j]->stn,cfg->pmu[j]->phnmr,cfg->pmu[j]->annmr,cfg->pmu[j]->dgnmr,cfg->pmu[j]->fnom); 00827 00828 if (mysql_query(conn_cfg, cmd)) { 00829 00830 fprintf(stderr, "%s\n", mysql_error(conn_cfg)); 00831 exit(1); 00832 } 00833 printf("%s\n",cmd); 00834 00835 } else { 00836 00837 mysql_free_result(res2); 00838 memset(cmd,'\0',1000); 00839 sprintf(cmd, "UPDATE SUB_CFG_TABLE SET PHNMR = %d,ANNMR = %d,DGNMR = %d,FNOM = %d WHERE PDC_ID = %d AND PMU_ID = %d AND STN = \"%s\"",cfg->pmu[j]->phnmr,cfg->pmu[j]->annmr,cfg->pmu[j]->dgnmr,cfg->pmu[j]->fnom,cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->stn); 00840 00841 if (mysql_query(conn_cfg, cmd)) { 00842 00843 fprintf(stderr, "%s\n", mysql_error(conn_cfg)); 00844 exit(1); 00845 } 00846 00847 mysql_query(conn_cfg, "COMMIT"); 00848 printf("%s\n",cmd); 00849 } 00850 00851 if(cfg->pmu[j]->phnmr !=0){ 00852 for(i = 0;i<cfg->pmu[j]->phnmr;i++) { 00853 00854 memset(cmd2,'\0',500); 00855 sprintf(cmd2, "SELECT * FROM PHASOR WHERE PDC_ID = %d AND PMU_ID = %d AND PHASOR_NAMES = \"%s\"",cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->cnext->phnames[i]); 00856 if (mysql_query(conn_cfg, cmd2)) { 00857 00858 fprintf(stderr, "%s\n", mysql_error(conn_cfg)); 00859 exit(1); 00860 } 00861 printf("%s\n",cmd2); 00862 res3 = mysql_use_result(conn_cfg); 00863 if(mysql_fetch_row(res3)== NULL) { 00864 00865 mysql_free_result(res3); 00866 memset(cmd,'\0',1000); 00867 00868 sprintf(cmd,"INSERT INTO PHASOR(PDC_ID,PMU_ID,PHASOR_NAMES,PHUNITS) VALUES (%d,%d,\"%s\",%f)",cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->cnext->phnames[i],*cfg->pmu[j]->phunit[i]); 00869 if (mysql_query(conn_cfg, cmd)) { 00870 00871 fprintf(stderr, "%s\n", mysql_error(conn_cfg)); 00872 exit(1); 00873 } 00874 printf("%s\n",cmd); 00875 00876 } else { 00877 00878 mysql_free_result(res3); 00879 memset(cmd,'\0',1000); 00880 sprintf(cmd,"UPDATE PHASOR SET PHUNITS = %f WHERE PDC_ID = %d AND PMU_ID = %d AND PHASOR_NAMES = \"%s\"",*cfg->pmu[j]->phunit[i],cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->cnext->phnames[i]); 00881 if (mysql_query(conn_cfg, cmd)) { 00882 00883 fprintf(stderr, "%s\n", mysql_error(conn_cfg)); 00884 exit(1); 00885 } 00886 mysql_query(conn_cfg, "COMMIT"); 00887 printf("%s\n",cmd); 00888 00889 } 00890 } 00891 } // Phasors 00892 00893 if(cfg->pmu[j]->annmr !=0){ 00894 for(i = 0;i<cfg->pmu[j]->annmr;i++) { 00895 00896 memset(cmd2,'\0',500); 00897 sprintf(cmd2, "SELECT * FROM ANALOG WHERE PDC_ID = %d AND PMU_ID = %d AND ANALOG_NAMES = \"%s\"",cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->cnext->angnames[i]); 00898 if (mysql_query(conn_cfg, cmd2)) { 00899 00900 fprintf(stderr, "%s\n", mysql_error(conn_cfg)); 00901 exit(1); 00902 } 00903 res4 = mysql_use_result(conn_cfg); 00904 if(mysql_fetch_row(res4)== NULL) { 00905 00906 mysql_free_result(res4); 00907 memset(cmd,'\0',1000); 00908 sprintf(cmd,"INSERT INTO ANALOG(PDC_ID,PMU_ID,ANALOG_NAMES,ANUNITS) VALUES (%d,%d,\"%s\",%f)",cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->cnext->angnames[i],*cfg->pmu[j]->anunit[i]); 00909 if (mysql_query(conn_cfg, cmd)) { 00910 00911 fprintf(stderr, "%s\n", mysql_error(conn_cfg)); 00912 exit(1); 00913 } 00914 printf("%s\n",cmd); 00915 00916 } else { 00917 00918 mysql_free_result(res4); 00919 memset(cmd,'\0',1000); 00920 sprintf(cmd,"UPDATE ANALOG SET ANUNITS = %f WHERE PDC_ID = %d AND PMU_ID = %d AND ANALOG_NAMES = \"%s\"",*cfg->pmu[j]->anunit[i],cfg->idcode,cfg->pmu[j]->idcode,cfg->pmu[j]->cnext->angnames[i]); 00921 if (mysql_query(conn_cfg, cmd)) { 00922 00923 fprintf(stderr, "%s\n", mysql_error(conn_cfg)); 00924 exit(1); 00925 } 00926 mysql_query(conn_cfg, "COMMIT"); 00927 printf("%s\n",cmd); 00928 } 00929 } 00930 } // Analog 00931 j++; 00932 } // while ends 00933 } // Update else ends 00934 pthread_mutex_unlock(&mutex_MYSQL_CONN_ON_CFG); 00935 free(cmd); 00936 free(cmd2); 00937 00938 }


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


| int check_statword | ( | unsigned char | stat[] | ) |
Definition at line 1352 of file parser.c.
Referenced by dataparser().
01352 { 01353 01354 int ret = 0; 01355 // printf("Inside check_statword() STAT = %s\n",stat); 01356 01357 if(stat[0] == 0x0f) { 01358 //Programmer has used these bits as an indication for PMU data that has not arrived 01359 ret = 16; 01360 return ret; 01361 01362 } else if ((stat[0] & 0x04) == 0x04) { 01363 01364 printf("Configuration Change error\n"); 01365 ret = 10; 01366 return ret; 01367 01368 } else if ((stat[0] & 0x40) == 0x40) { 01369 01370 printf("PMU error including configuration error\n"); 01371 ret = 14; 01372 return ret; 01373 01374 } else if((stat[0] & 0x80) == 0x80) { 01375 01376 printf("Data invalid\n"); 01377 ret = 15; 01378 return ret; 01379 01380 } else if ((stat[0] & 0x20) == 0x20) { 01381 01382 printf("PMU Sync error\n"); 01383 ret = 13; 01384 return ret; 01385 01386 } else if ((stat[0] & 0x10) == 0x10) { 01387 01388 printf("Data sorting error\n"); 01389 ret = 12; 01390 return ret; 01391 01392 } else if ((stat[0] & 0x08) == 0x08) { 01393 01394 printf("PMU Trigger error\n"); 01395 ret = 11; 01396 return ret; 01397 01398 } 01399 printf("RET from check_statword() %d\n",ret); 01400 return ret; 01401 }

| void copy_cbyc | ( | unsigned char | dst[], | |
| unsigned char * | s, | |||
| int | size | |||
| ) |
Definition at line 1494 of file parser.c.
Referenced by cfgparser(), dataparser(), DB_udp(), init_cfgparser(), and remove_old_cfg().

| int dataparser | ( | unsigned char | data[] | ) |
Definition at line 947 of file parser.c.
References format::analog, channel_names::angnames, for_each_pmu::annmr, for_each_pmu::anunit, cfgfirst, cfg_frame::cfgnext, check_statword(), for_each_pmu::cnext, conn_data, copy_cbyc(), decode_ieee_single(), for_each_pmu::dgnmr, for_each_pmu::fmt, cfg_frame::fracsec, cfg_frame::framesize, format::freq, for_each_pmu::idcode, cfg_frame::idcode, mutex_cfg, mutex_MYSQL_CONN_ON_DATA, 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, to_intconvertor(), and to_long_int_convertor().
Referenced by DB_process_UDP().
00947 { 00948 00949 struct cfg_frame *temp_cfg; 00950 int match = 0,i,j = 0; 00951 int stat_status,config_change = 0; 00952 unsigned int t_id,num_pmu,phnmr,annmr,dgnmr; 00953 float fp_r,fp_i,fp_real,fp_imaginary,fp_analogs; 00954 unsigned long int f_r,f_i,f_analogs,f_freq,f_dfreq,l_soc,l_fracsec; 00955 float fp_freq,fp_dfreq; 00956 00957 unsigned char *sync,*framesize,*idcode,*soc,*fracsec,*stat,*phasors,*analogs,*digital,*freq,*dfreq,*d; 00958 unsigned char *fp_left,*fp_right; 00959 unsigned char *f_left,*f_right; 00960 unsigned char *fp_analog,*f_analog; 00961 char *cmd; 00962 00963 cmd = malloc(500); 00964 sync = malloc(3*sizeof(unsigned char)); 00965 framesize = malloc(3*sizeof(unsigned char)); 00966 idcode = malloc(3*sizeof(unsigned char)); 00967 soc = malloc(5*sizeof(unsigned char)); 00968 fracsec = malloc(5*sizeof(unsigned char)); 00969 stat = malloc(3*sizeof(unsigned char)); 00970 phasors = malloc(9*sizeof(unsigned char)); 00971 analogs = malloc(5*sizeof(unsigned char)); 00972 digital = malloc(3*sizeof(unsigned char)); 00973 freq = malloc(5*sizeof(unsigned char)); 00974 dfreq = malloc(5*sizeof(unsigned char)); 00975 00976 memset(cmd,'\0',500); 00977 memset(sync,'\0',3); 00978 memset(framesize,'\0',3); 00979 memset(idcode,'\0',3); 00980 memset(soc,'\0',5); 00981 memset(fracsec,'\0',5); 00982 memset(stat,'\0',3); 00983 memset(phasors,'\0',9); 00984 memset(analogs,'\0',5); 00985 memset(digital,'\0',3); 00986 memset(freq,'\0',5); 00987 memset(dfreq,'\0',5); 00988 00989 00990 fp_left = malloc(5); 00991 fp_right = malloc(5); 00992 f_left = malloc(3); 00993 f_right = malloc(3); 00994 fp_analog = malloc(5); 00995 f_analog = malloc(3); 00996 00997 memset(fp_left,'\0',5); 00998 memset(fp_right,'\0',5); 00999 memset(f_left,'\0',3); 01000 memset(f_right,'\0',3); 01001 memset(fp_analog,'\0',5); 01002 memset(f_analog,'\0',3); 01003 01004 d = data; 01005 //Skip SYN 01006 d += 2; 01007 01008 //SEPARATE FRAMESIZE 01009 copy_cbyc (framesize,d,2); 01010 framesize[2] = '\0'; 01011 d += 2; 01012 01013 //SEPARATE IDCODE 01014 copy_cbyc (idcode,d,2); 01015 idcode[2] ='\0'; 01016 d += 2; 01017 01018 pthread_mutex_lock(&mutex_cfg); 01019 // Check for the IDCODE in Configuration Frame 01020 temp_cfg = cfgfirst; 01021 t_id = to_intconvertor(idcode); 01022 printf("ID Code %d\n",t_id); 01023 01024 while(temp_cfg != NULL){ 01025 01026 if(t_id == temp_cfg->idcode) { 01027 01028 match = 1; 01029 break; 01030 01031 } else { 01032 01033 temp_cfg = temp_cfg->cfgnext; 01034 01035 } 01036 } 01037 pthread_mutex_unlock(&mutex_cfg); 01038 01039 pthread_mutex_lock(&mutex_MYSQL_CONN_ON_DATA); 01040 // idcode matches with cfg idcode 01041 if(match){ 01042 01043 printf("Inside dataparser() data_frame and matched with cfg\n"); 01044 01045 // Allocate Memeory For Each PMU 01046 num_pmu = temp_cfg->num_pmu; 01047 01048 //Copy SOC 01049 copy_cbyc (soc,d,4); 01050 soc[4] = '\0'; 01051 l_soc = to_long_int_convertor(soc); 01052 d += 4; 01053 01054 //Copy FRACSEC 01055 copy_cbyc (fracsec,d,4); 01056 fracsec[4] = '\0'; 01057 l_fracsec = to_long_int_convertor(fracsec); 01058 d += 4; 01059 01060 // Separate the data for each PMU 01061 while(j < num_pmu) { 01062 01063 copy_cbyc (stat,d,2); 01064 stat[2] = '\0'; 01065 d += 2; 01066 01067 // Check Stat Word for each data block 01068 stat_status = check_statword(stat); 01069 01070 01071 // If the data has not arrived 01072 if(stat_status == 16) { 01073 01074 memset(stat,'\0',3); 01075 j++; 01076 continue; 01077 01078 } else if((stat_status == 14)||(stat_status == 10)) { 01079 01080 memset(stat,'\0',3); 01081 config_change = stat_status; 01082 j++; 01083 continue; 01084 01085 } 01086 01087 // Extract PHNMR, DGNMR, ANNMR 01088 phnmr = temp_cfg->pmu[j]->phnmr; 01089 annmr = temp_cfg->pmu[j]->annmr; 01090 dgnmr = temp_cfg->pmu[j]->dgnmr; 01091 01092 //Phasors 01093 if(phnmr != 0) { 01094 if(temp_cfg->pmu[j]->fmt->phasor == '1') { // Floating 01095 01096 for(i = 0;i<phnmr;i++){ 01097 01098 memset(fp_left,'\0',5); 01099 memset(fp_right,'\0',5); 01100 copy_cbyc (fp_left,d,4); 01101 fp_left[4] = '\0'; 01102 d += 4; 01103 01104 copy_cbyc(fp_right,d,4); 01105 fp_right[4] = '\0'; 01106 d += 4; 01107 01108 fp_r = decode_ieee_single(fp_left); 01109 fp_i = decode_ieee_single(fp_right); 01110 01111 if(temp_cfg->pmu[j]->fmt->polar == '1') { // POLAR 01112 01113 fp_real = fp_r*cos(f_i); 01114 fp_imaginary = fp_r*sin(f_i); 01115 01116 memset(cmd,'\0',500); 01117 sprintf(cmd,"INSERT INTO PHASOR_MEASUREMENTS SELECT %d,%d,%ld,%ld,\"%s\",%f,%f FROM MAIN_CFG_TABLE MCT,SUB_CFG_TABLE SCT,PHASOR WHERE MCT.PDC_ID = %d AND SCT.PMU_ID = %d AND PHASOR.PHASOR_NAMES = \"%s\"",temp_cfg->idcode,temp_cfg->pmu[j]->idcode,l_soc,l_fracsec,temp_cfg->pmu[j]->cnext->phnames[i],fp_real,fp_imaginary,temp_cfg->idcode,temp_cfg->pmu[j]->idcode,temp_cfg->pmu[j]->cnext->phnames[i]); 01118 01119 if (mysql_query(conn_data, cmd)) { 01120 01121 fprintf(stderr, "%s\n", mysql_error(conn_data)); 01122 exit(1); 01123 } 01124 printf("%s\n",cmd); 01125 01126 } else { // Rectangular 01127 01128 fp_real = fp_r; 01129 fp_imaginary = fp_i; 01130 memset(cmd,'\0',500); 01131 sprintf(cmd,"INSERT INTO PHASOR_MEASUREMENTS SELECT %d,%d,%ld,%ld,\"%s\",%f,%f FROM MAIN_CFG_TABLE MCT,SUB_CFG_TABLE SCT,PHASOR WHERE MCT.PDC_ID = %d AND SCT.PMU_ID = %d AND PHASOR.PHASOR_NAMES = \"%s\"",temp_cfg->idcode,temp_cfg->pmu[j]->idcode,l_soc,l_fracsec,temp_cfg->pmu[j]->cnext->phnames[i],fp_real,fp_imaginary,temp_cfg->idcode,temp_cfg->pmu[j]->idcode,temp_cfg->pmu[j]->cnext->phnames[i]); 01132 if (mysql_query(conn_data, cmd)) { 01133 01134 fprintf(stderr, "%s\n", mysql_error(conn_data)); 01135 exit(1); 01136 } 01137 printf("%s\n",cmd); 01138 01139 } 01140 01141 } 01142 } else { // Fixed point 01143 01144 for(i = 0;i < phnmr; i++){ 01145 01146 memset(f_left,'\0',3); 01147 memset(f_right,'\0',3); 01148 copy_cbyc (f_left,d,2); 01149 f_left[2] = '\0'; 01150 d += 2; 01151 01152 copy_cbyc(f_right,d,2); 01153 f_right[2] = '\0'; 01154 d += 2; 01155 01156 f_r = to_intconvertor(f_left); 01157 f_i = to_intconvertor(f_right); 01158 01159 if(temp_cfg->pmu[j]->fmt->polar == '1') { 01160 01161 fp_real = *temp_cfg->pmu[j]->phunit[i] *f_r*cos(f_i); 01162 fp_imaginary = *temp_cfg->pmu[j]->phunit[i] *f_r*sin(f_i); 01163 01164 memset(cmd,'\0',500); 01165 sprintf(cmd,"INSERT INTO PHASOR_MEASUREMENTS SELECT %d,%d,%ld,%ld,\"%s\",%f,%f FROM MAIN_CFG_TABLE MCT,SUB_CFG_TABLE SCT,PHASOR WHERE MCT.PDC_ID = %d AND SCT.PMU_ID = %d AND PHASOR.PHASOR_NAMES = \"%s\"",temp_cfg->idcode,temp_cfg->pmu[j]->idcode,l_soc,l_fracsec,temp_cfg->pmu[j]->cnext->phnames[i],fp_real,fp_imaginary,temp_cfg->idcode,temp_cfg->pmu[j]->idcode,temp_cfg->pmu[j]->cnext->phnames[i]); 01166 if (mysql_query(conn_data, cmd)) { 01167 01168 fprintf(stderr, "%s\n", mysql_error(conn_data)); 01169 exit(1); 01170 } 01171 printf("%s\n",cmd); 01172 01173 } else { 01174 01175 fp_real = *temp_cfg->pmu[j]->phunit[i] *f_r; 01176 fp_imaginary = *temp_cfg->pmu[j]->phunit[i] *f_i; 01177 01178 memset(cmd,'\0',500); 01179 sprintf(cmd,"INSERT INTO PHASOR_MEASUREMENTS SELECT %d,%d,%ld,%ld,\"%s\",%f,%f FROM MAIN_CFG_TABLE MCT,SUB_CFG_TABLE SCT,PHASOR WHERE MCT.PDC_ID = %d AND SCT.PMU_ID = %d AND PHASOR.PHASOR_NAMES = \"%s\"",temp_cfg->idcode,temp_cfg->pmu[j]->idcode,l_soc,l_fracsec,temp_cfg->pmu[j]->cnext->phnames[i],fp_real,fp_imaginary,temp_cfg->idcode,temp_cfg->pmu[j]->idcode,temp_cfg->pmu[j]->cnext->phnames[i]); 01180 if (mysql_query(conn_data, cmd)) { 01181 01182 fprintf(stderr, "%s\n", mysql_error(conn_data)); 01183 exit(1); 01184 } 01185 printf("%s\n",cmd); 01186 } 01187 } 01188 } // Phasors Insertion ends 01189 } 01190 //Freq 01191 if(temp_cfg->pmu[j]->fmt->freq == '1') { 01192 01193 memset(freq,'\0',5); 01194 copy_cbyc (freq,d,4); 01195 freq[4] = '\0'; 01196 d += 4; 01197 01198 memset(dfreq,'\0',5); 01199 copy_cbyc (dfreq,d,4); 01200 dfreq[4] = '\0'; 01201 d += 4; 01202 01203 fp_freq = decode_ieee_single(freq); 01204 fp_dfreq = decode_ieee_single(dfreq); 01205 01206 memset(cmd,'\0',500); 01207 sprintf(cmd,"INSERT INTO FREQUENCY_MEASUREMENTS SELECT %d,%d,%ld,%ld,%f,%f FROM MAIN_CFG_TABLE MCT,SUB_CFG_TABLE SCT WHERE MCT.PDC_ID = %d AND SCT.PMU_ID = %d",temp_cfg->idcode,temp_cfg->pmu[j]->idcode,l_soc,l_fracsec,fp_freq,fp_dfreq,temp_cfg->idcode,temp_cfg->pmu[j]->idcode); 01208 if (mysql_query(conn_data, cmd)) { 01209 01210 fprintf(stderr, "%s\n", mysql_error(conn_data)); 01211 exit(1); 01212 } 01213 printf("%s\n",cmd); 01214 01215 } else { 01216 memset(freq,'\0',5); 01217 copy_cbyc (freq,d,2); 01218 freq[2] = '\0'; 01219 f_freq = to_intconvertor(freq); 01220 d += 2; 01221 01222 memset(dfreq,'\0',5); 01223 copy_cbyc (dfreq,d,2); 01224 dfreq[2] = '\0'; 01225 //sscanf(dfreq,"%x",&f_freq); 01226 f_dfreq = to_intconvertor(dfreq); 01227 d += 2; 01228 01229 memset(cmd,'\0',500); 01230 sprintf(cmd,"INSERT INTO FREQUENCY_MEASUREMENTS SELECT %d,%d,%ld,%ld,%ld,%ld FROM MAIN_CFG_TABLE MCT,SUB_CFG_TABLE SCT WHERE MCT.PDC_ID = %d AND SCT.PMU_ID = %d",temp_cfg->idcode,temp_cfg->pmu[j]->idcode,l_soc,l_fracsec,f_freq,f_dfreq,temp_cfg->idcode,temp_cfg->pmu[j]->idcode); 01231 if (mysql_query(conn_data, cmd)) { 01232 01233 fprintf(stderr, "%s\n", mysql_error(conn_data)); 01234 exit(1); 01235 } 01236 printf("%s\n",cmd); 01237 01238 }// Freq Insert Ends 01239 01240 //Analogs 01241 if(annmr != 0) { 01242 if(temp_cfg->pmu[j]->fmt->analog == '1') { 01243 01244 for(i = 0; i < annmr; i++){ 01245 01246 memset(analogs,'\0',5); 01247 copy_cbyc(analogs,d,4); 01248 analogs[4] = '\0'; 01249 fp_analogs = decode_ieee_single(analogs); 01250 fp_analogs = *temp_cfg->pmu[j]->anunit[i]*fp_analogs;; 01251 memset(cmd,'\0',500); 01252 sprintf(cmd,"INSERT INTO ANALOG_MEASUREMENTS SELECT %d,%d,%ld,%ld,\"%s\",%f FROM MAIN_CFG_TABLE MCT,SUB_CFG_TABLE SCT,ANALOG WHERE MCT.PDC_ID = %d AND SCT.PMU_ID = %d AND ANALOG.ANALOG_NAMES = \"%s\"",temp_cfg->idcode,temp_cfg->pmu[j]->idcode,l_soc,l_fracsec,temp_cfg->pmu[j]->cnext->angnames[i],fp_analogs,temp_cfg->idcode,temp_cfg->pmu[j]->idcode,temp_cfg->pmu[j]->cnext->angnames[i]); 01253 if (mysql_query(conn_data, cmd)) { 01254 01255 fprintf(stderr, "%s\n", mysql_error(conn_data)); 01256 exit(1); 01257 } 01258 printf("%s\n",cmd); 01259 d += 4; 01260 01261 } 01262 } else { 01263 for(i = 0; i < annmr; i++){ 01264 01265 memset(analogs,'\0',5); 01266 copy_cbyc (analogs,d,2); 01267 analogs[2] = '\0'; 01268 f_analogs = to_intconvertor(analogs); 01269 f_analogs = *temp_cfg->pmu[j]->anunit[i]*f_analogs ; 01270 memset(cmd,'\0',500); 01271 sprintf(cmd,"INSERT INTO ANALOG_MEASUREMENTS SELECT %d,%d,%ld,%ld,\"%s\",%ld FROM MAIN_CFG_TABLE MCT,SUB_CFG_TABLE SCT,ANALOG WHERE MCT.PDC_ID = %d AND SCT.PMU_ID = %d AND ANALOG.ANALOG_NAMES = \"%s\"",temp_cfg->idcode,temp_cfg->pmu[j]->idcode,l_soc,l_fracsec,temp_cfg->pmu[j]->cnext->angnames[i],f_analogs,temp_cfg->idcode,temp_cfg->pmu[j]->idcode,temp_cfg->pmu[j]->cnext->angnames[i]); 01272 if (mysql_query(conn_data, cmd)) { 01273 01274 fprintf(stderr, "%s\n", mysql_error(conn_data)); 01275 exit(1); 01276 } 01277 printf("%s\n",cmd); 01278 d += 2; 01279 } 01280 } 01281 } 01282 01283 // Digital 01284 if(dgnmr != 0) { 01285 01286 unsigned int dgword; 01287 01288 for(i = 0; i<dgnmr; i++) { 01289 01290 memset(digital,'\0',3); 01291 copy_cbyc (digital,d,2); 01292 digital[2] = '\0'; 01293 dgword = to_intconvertor(digital); 01294 01295 memset(cmd,'\0',500); 01296 sprintf(cmd,"INSERT INTO DIGITAL_MEASUREMENTS SELECT %d,%d,%ld,%ld,%u FROM MAIN_CFG_TABLE MCT,SUB_CFG_TABLE SCT WHERE MCT.PDC_ID = %d AND SCT.PMU_ID = %d ",temp_cfg->idcode,temp_cfg->pmu[j]->idcode,l_soc,l_fracsec,dgword,temp_cfg->idcode,temp_cfg->pmu[j]->idcode); 01297 if (mysql_query(conn_data, cmd)) { 01298 01299 fprintf(stderr, "%s\n", mysql_error(conn_data)); 01300 exit(1); 01301 } 01302 printf("%s\n",cmd); 01303 d += 2; 01304 } 01305 } 01306 j++; 01307 } //While ends 01308 01309 } else { 01310 01311 printf("NO CFG for data frames\n"); 01312 // exit(1); //No match for configuration frame 01313 01314 } 01315 01316 pthread_mutex_unlock(&mutex_MYSQL_CONN_ON_DATA); 01317 01318 free(cmd); 01319 free(sync); 01320 free(framesize); 01321 free(idcode); 01322 free(soc); 01323 free(fracsec); 01324 free(stat); 01325 free(phasors); 01326 free(analogs); 01327 free(digital); 01328 free(freq); 01329 free(dfreq); 01330 01331 free(fp_left); 01332 free(fp_right); 01333 free(f_left); 01334 free(f_right); 01335 free(fp_analog); 01336 free(f_analog); 01337 01338 01339 if((config_change == 14) ||(config_change == 10)) 01340 return config_change; 01341 else return stat_status; 01342 01343 }


| float decode_ieee_single | ( | const void * | v | ) |
Definition at line 1439 of file parser.c.
Referenced by dataparser().
01439 { 01440 01441 const unsigned char *data = v; 01442 int s, e; 01443 unsigned long src; 01444 long f; 01445 float value; 01446 01447 src = ((unsigned long)data[0] << 24) | 01448 ((unsigned long)data[1] << 16) | 01449 ((unsigned long)data[2] << 8) | 01450 ((unsigned long)data[3]); 01451 01452 s = (src & 0x80000000UL) >> 31; 01453 e = (src & 0x7F800000UL) >> 23; 01454 f = (src & 0x007FFFFFUL); 01455 01456 if (e == 255 && f != 0) { 01457 /* NaN (Not a Number) */ 01458 value = DBL_MAX; 01459 01460 } else if (e == 255 && f == 0 && s == 1) { 01461 /* Negative infinity */ 01462 value = -DBL_MAX; 01463 } else if (e == 255 && f == 0 && s == 0) { 01464 /* Positive infinity */ 01465 value = DBL_MAX; 01466 } else if (e > 0 && e < 255) { 01467 /* Normal number */ 01468 f += 0x00800000UL; 01469 if (s) f = -f; 01470 value = ldexp(f, e - 150); 01471 } else if (e == 0 && f != 0) { 01472 /* Denormal number */ 01473 if (s) f = -f; 01474 value = ldexp(f, -149); 01475 } else if (e == 0 && f == 0 && s == 1) { 01476 /* Negative zero */ 01477 value = 0; 01478 } else if (e == 0 && f == 0 && s == 0) { 01479 /* Positive zero */ 01480 value = 0; 01481 } else { 01482 /* Never happens */ 01483 printf("s = %d, e = %d, f = %lu\n", s, e, f); 01484 assert(!"Woops, unhandled case in decode_ieee_single()"); 01485 } 01486 01487 return value; 01488 }

| char* hexTobin | ( | char | s | ) |
| int ncmp_cbyc | ( | unsigned char | dst[], | |
| unsigned char | src[], | |||
| int | size | |||
| ) |
Definition at line 1505 of file parser.c.
Referenced by remove_old_cfg().
01505 { 01506 01507 int i,flag = 0; 01508 for(i = 0; i< size; i++) { 01509 01510 if(dst[i] != src[i]) { 01511 01512 flag = 1; 01513 break; 01514 } 01515 } 01516 return flag; 01517 }

| void remove_old_cfg | ( | int | idcode, | |
| unsigned char | frame[] | |||
| ) |
Definition at line 575 of file parser.c.
References copy_cbyc(), cfg_frame::framesize, ncmp_cbyc(), and to_intconvertor().
Referenced by cfgparser().
00575 { //void remove_old_cfg(char idcode[],char frame[]) Begins 00576 00577 FILE *file,*newfile; 00578 int result; 00579 unsigned int idCODE,framesize; 00580 unsigned char *s,id[3],*line,frame_len[2]; 00581 unsigned long fileLen; 00582 00583 file = fopen("cfg.bin","rb"); 00584 newfile = fopen("ncfg.bin","wb"); 00585 if (file != NULL) { 00586 00587 //Get file length 00588 fseek(file, 0, SEEK_END); 00589 fileLen = ftell(file); 00590 fseek(file, 0, SEEK_SET); 00591 printf("BEFORE REMOVAL OF OLDFRAME FILE LEN %ld\n",fileLen); 00592 00593 while (fileLen != 0) /* Till the EOF */{ 00594 00595 fseek (file,2 ,SEEK_CUR); 00596 fread(frame_len, sizeof(unsigned char),2, file); 00597 fseek (file,-4 ,SEEK_CUR); 00598 00599 framesize = to_intconvertor(frame_len); 00600 line = malloc(framesize*sizeof(unsigned char)); 00601 memset(line,'\0',sizeof(line)); 00602 fread(line, sizeof(unsigned char),framesize,file); 00603 s = line; 00604 s += 4; 00605 //match IDCODE in cfg.bin file 00606 copy_cbyc (id,s,2); 00607 id[2] = '\0'; 00608 idCODE = to_intconvertor(id); 00609 00610 if(idCODE == idcode) { 00611 00612 printf("MATCH the new cfg with old cfg in file cfg.bin\n"); 00613 break; 00614 00615 } else { 00616 00617 //Place rest of lines in the new file 00618 00619 fwrite(line, sizeof(unsigned char),framesize,newfile); 00620 free(line); 00621 fileLen -= framesize; 00622 } 00623 }//While ends 00624 00625 // The new cfg is copied in the ncfg.bin file 00626 unsigned int len; 00627 unsigned char *p = frame; 00628 p += 2; 00629 copy_cbyc (frame_len,p,2); 00630 len = to_intconvertor(frame_len); 00631 fwrite(frame, sizeof(unsigned char),len,newfile); 00632 00633 // If cfg.bin file still contains data copy it to ncfg.bin 00634 while (fileLen != 0) /* Till the EOF */{ 00635 00636 fseek (file,2 ,SEEK_CUR); 00637 fread(frame_len, sizeof(unsigned char),2, file); 00638 fseek (file,-4 ,SEEK_CUR); 00639 00640 framesize = to_intconvertor(frame_len); 00641 line = malloc(framesize*sizeof(unsigned char)); 00642 memset(line,'\0',sizeof(line)); 00643 fread(line, sizeof(unsigned char),framesize,file); 00644 00645 if(!ncmp_cbyc(line,frame,framesize)) { 00646 00647 //This skips the last line of the file that contains already added cfg 00648 //hence we dont copy this line to ncfg.bin 00649 break; 00650 00651 } else { 00652 00653 fwrite(frame, sizeof(unsigned char),framesize,newfile); 00654 free(line); 00655 fileLen -= framesize; 00656 } 00657 00658 } 00659 00660 //File renaming 00661 fclose (file); 00662 fclose(newfile); 00663 00664 if( remove( "cfg.bin" ) != 0 ) 00665 perror( "Error deleting file" ); 00666 result= rename("ncfg.bin","cfg.bin"); 00667 if ( result == 0 ) 00668 fputs ("File successfully renamed",stdout); 00669 else 00670 perror( "Error renaming file" ); 00671 00672 } else { 00673 perror ("cfg.bin"); /* why didn't the file open? */ 00674 } 00675 00676 }


| unsigned int to_intconvertor | ( | unsigned char | array[] | ) |
Definition at line 1408 of file parser.c.
Referenced by cfgparser(), dataparser(), init_cfgparser(), recreate_cfg_objects(), and remove_old_cfg().
01408 { 01409 01410 unsigned int n; 01411 n = array[0]; 01412 n <<= 8; 01413 n |= array[1]; 01414 return n; 01415 }

| unsigned long int to_long_int_convertor | ( | unsigned char * | array | ) |
Referenced by cfgparser(), dataparser(), and init_cfgparser().
1.6.3