00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #include <stdio.h>
00032 #include <stdlib.h>
00033 #include <string.h>
00034 #include <sys/socket.h>
00035 #include <netinet/in.h>
00036 #include <sys/time.h>
00037 #include <gtk/gtk.h>
00038 #include "CfgFunction.h"
00039 #include "function.h"
00040 #include "PmuGui.h"
00041
00042 #define max_data_rate 200
00043 #define MAX_STRING_SIZE 5000
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061 int frmt, fdf, af, pf, pn, phnmr, annmr, dgnmr, num_pmu = 1;
00062 int cfg2_frm_size, data_frm_size = 18, data_rate, cfgcnt = 0;
00063 int i, j, n, pmu_id, indx = 0, fnom = 0,global_data_frm_size=0;
00064 long int soc, fracsec = 0, TB = 1000000;
00065 long int phunit = 915527, anunit = 1, digunit = 0;
00066 double t1;
00067 char temp_5[16];
00068 unsigned char cfg2_frm[MAX_STRING_SIZE];
00069 unsigned char temp[2], temp_1[4], temp_6[16];
00070 struct timeval tim;
00071 uint16_t chk;
00072
00073
00074
00075
00076
00077
00078
00079
00080 void header_frm_gen(int len)
00081 {
00082
00083 int i, indx = 0;
00084 unsigned char header[MAX_STRING_SIZE];
00085 static const char filename_1[] = "header.bin";
00086 FILE *file_1;
00087
00088 memset(header, '\0', sizeof(header));
00089
00090
00091 header[indx++] = 0xAA;
00092 header[indx++] = 0x001;
00093
00094
00095 i2c(0, temp);
00096 B_copy(header, temp, indx, 2);
00097 indx = indx + 2;
00098
00099
00100 i2c(pmu_id, temp);
00101 B_copy(header, temp, indx, 2);
00102 indx = indx + 2;
00103
00104
00105 time_t tm = time(NULL);
00106 soc = tm;
00107 li2c(soc, temp_1);
00108 B_copy(header, temp_1, indx, 4);
00109 indx = indx + 4;
00110
00111
00112 gettimeofday(&tim, NULL);
00113 t1=tim.tv_sec+(tim.tv_usec/1000000.0);
00114 fracsec = (t1-soc)*100000;
00115 li2c(fracsec, temp_1);
00116 B_copy(header, temp_1, indx, 4);
00117 indx = indx + 4;
00118
00119
00120 for (i = 0; i < len; i++)
00121 {
00122 header[indx+i] = hdr_frame[i];
00123 }
00124 indx = indx + i;
00125
00126
00127 chk = compute_CRC(header,indx);
00128 header[indx++] = (chk >> 8) & ~(~0<<8);
00129 header[indx++] = (chk ) & ~(~0<<8);
00130
00131
00132 header[2] = indx>>8;;
00133 header[3] = indx;
00134
00135 file_1 = fopen (filename_1,"wb");
00136 {
00137
00138 fwrite(header, sizeof(unsigned char), indx, file_1);
00139 }
00140 fclose (file_1);
00141
00142 printf("\n-> Size of Header frame is %d Bytes.", indx);
00143 validation_result ("\t\tHeadre Frame successfully generated.\t\t\n");
00144 };
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157 void reconfig_cfg_CC()
00158 {
00159
00160 int old_data_rate, indx=2;
00161 int j, global_frmt;
00162 unsigned char stn[16];
00163 static const char filename_1[] = "cfg2.bin";
00164 static const char filename_2[] = "change.bin";
00165 FILE *file_1;
00166
00167
00168 memset(stn, '\0', 16);
00169 strncpy((char *)stn, cfg_info->cfg_STNname, 16);
00170
00171
00172 global_frmt = frmt;
00173
00174
00175 if(new_cfg_info->add_remove_choice == 1)
00176 {
00177 phnmr = cfg_info->cfg_phnmr_val + new_cfg_info->new_cfg_phnmr_val;
00178 annmr = cfg_info->cfg_annmr_val + new_cfg_info->new_cfg_annmr_val;
00179 }
00180 else if(new_cfg_info->add_remove_choice == 2)
00181 {
00182 phnmr = cfg_info->cfg_phnmr_val - new_cfg_info->new_cfg_phnmr_val;
00183 annmr = cfg_info->cfg_annmr_val - new_cfg_info->new_cfg_annmr_val;
00184 }
00185
00186
00187 cfg2_frm_size = 0;
00188 cfg2_frm_size = 54 + (16*phnmr) + (16*annmr) + (256*dgnmr) + (4*phnmr) + (4*annmr) + (4*dgnmr);
00189
00190
00191 global_data_frm_size = data_frm_size;
00192 data_frm_size = 0;
00193 data_frm_size = 18;
00194
00195
00196 if (cfg_info->cfg_pf == 0)
00197 {
00198 data_frm_size = data_frm_size + (4*phnmr);
00199 }
00200 else
00201 {
00202 data_frm_size = data_frm_size + (8*phnmr);
00203 }
00204
00205
00206 if (cfg_info->cfg_af == 0)
00207 {
00208 data_frm_size = data_frm_size + (2*annmr);
00209 }
00210 else
00211 {
00212 data_frm_size = data_frm_size + (4*annmr);
00213 }
00214
00215
00216 if (cfg_info->cfg_fdf == 0)
00217 {
00218 data_frm_size = data_frm_size + 4;
00219 }
00220 else
00221 {
00222 data_frm_size = data_frm_size + 8;
00223 }
00224
00225
00226 data_frm_size = data_frm_size + (2*dgnmr);
00227 printf("\nCFG = %d, Data Frame = %d\n", cfg2_frm_size, data_frm_size);
00228
00229
00230 memset(cfg2_frm,'\0',sizeof(cfg2_frm));
00231 indx = 0;
00232 cfg2_frm[indx++] = 0xAA;
00233 cfg2_frm[indx++] = 0x31;
00234
00235
00236 i2c(cfg2_frm_size, temp);
00237 B_copy(cfg2_frm, temp, indx, 2);
00238 indx = indx + 2;
00239
00240
00241 i2c(pmu_id, temp);
00242 B_copy(cfg2_frm, temp, indx, 2);
00243 indx = indx + 2;
00244
00245
00246 soc = 0;
00247 li2c(soc, temp_1);
00248 B_copy(cfg2_frm, temp_1, indx, 4);
00249 indx = indx + 4;
00250
00251
00252 li2c(fracsec, temp_1);
00253 B_copy(cfg2_frm, temp_1, indx, 4);
00254 indx = indx + 4;
00255
00256
00257 li2c(TB, temp_1);
00258 B_copy(cfg2_frm, temp_1, indx, 4);
00259 indx = indx + 4;
00260
00261
00262 i2c(num_pmu, temp);
00263 B_copy(cfg2_frm, temp, indx, 2);
00264 indx = indx + 2;
00265
00266
00267 B_copy(cfg2_frm, stn, indx, 16);
00268 indx = indx + 16;
00269
00270
00271 i2c(pmu_id, temp);
00272 B_copy(cfg2_frm, temp, indx, 2);
00273 indx = indx + 2;
00274
00275
00276 i2c(global_frmt, temp);
00277 B_copy(cfg2_frm, temp, indx, 2);
00278 indx = indx + 2;
00279
00280
00281 i2c(phnmr, temp);
00282 B_copy(cfg2_frm, temp, indx, 2);
00283 indx = indx + 2;
00284
00285
00286 i2c(annmr, temp);
00287 B_copy(cfg2_frm, temp, indx, 2);
00288 indx = indx + 2;
00289
00290
00291 i2c(dgnmr, temp);
00292 B_copy(cfg2_frm, temp, indx, 2);
00293 indx = indx + 2;
00294
00295
00296 if (new_cfg_info->add_remove_choice == 1)
00297 {
00298
00299 B_copy(cfg2_frm, (unsigned char *)cfg_info->cfg_phasor_channels, indx, cfg_info->cfg_phnmr_val*16);
00300 indx = indx + (cfg_info->cfg_phnmr_val*16);
00301
00302 if (new_cfg_info->new_cfg_phnmr_val > 0)
00303 {
00304
00305 B_copy(cfg2_frm, (unsigned char *)new_cfg_info->new_cfg_phasor_channels, indx, (new_cfg_info->new_cfg_phnmr_val*16));
00306 indx = indx + (new_cfg_info->new_cfg_phnmr_val*16);
00307 free(new_cfg_info->new_cfg_phasor_channels);
00308 }
00309 cfg_info->cfg_phnmr_val = cfg_info->cfg_phnmr_val + new_cfg_info->new_cfg_phnmr_val;
00310
00311
00312 B_copy(cfg2_frm, (unsigned char *)cfg_info->cfg_analog_channels, indx, cfg_info->cfg_annmr_val*16);
00313 indx = indx + (cfg_info->cfg_annmr_val*16);
00314 if (new_cfg_info->new_cfg_annmr_val > 0)
00315 {
00316
00317 B_copy(cfg2_frm, (unsigned char *)new_cfg_info->new_cfg_analog_channels, indx, (new_cfg_info->new_cfg_annmr_val*16));
00318 indx = indx + (new_cfg_info->new_cfg_annmr_val*16);
00319 free(new_cfg_info->new_cfg_analog_channels);
00320 }
00321 cfg_info->cfg_annmr_val = cfg_info->cfg_annmr_val + new_cfg_info->new_cfg_annmr_val;
00322 }
00323
00324
00325 else if (new_cfg_info->add_remove_choice == 2)
00326 {
00327
00328 cfg_info->cfg_phnmr_val = cfg_info->cfg_phnmr_val - new_cfg_info->new_cfg_phnmr_val;
00329 B_copy(cfg2_frm, (unsigned char *)cfg_info->cfg_phasor_channels, indx, cfg_info->cfg_phnmr_val*16);
00330 indx = indx + (cfg_info->cfg_phnmr_val*16);
00331
00332
00333 cfg_info->cfg_annmr_val = cfg_info->cfg_annmr_val - new_cfg_info->new_cfg_annmr_val;
00334 B_copy(cfg2_frm, (unsigned char *)cfg_info->cfg_analog_channels, indx, cfg_info->cfg_annmr_val*16);
00335 indx = indx + (cfg_info->cfg_annmr_val*16);
00336 }
00337
00338
00339 B_copy(cfg2_frm, (unsigned char *)cfg_info->cfg_digital_channels, indx, (cfg_info->cfg_dgnmr_val*256));
00340 indx = indx + (cfg_info->cfg_dgnmr_val*256);
00341
00342
00343 for(j=0; j<cfg_info->cfg_phnmr_val; j++)
00344 {
00345 li2c(phunit, temp_1);
00346 B_copy(cfg2_frm, temp_1, indx, 4);
00347 indx = indx + 4;
00348 }
00349 for(j=0; j<cfg_info->cfg_annmr_val; j++)
00350 {
00351 li2c(anunit, temp_1);
00352 B_copy(cfg2_frm, temp_1, indx, 4);
00353 indx = indx + 4;
00354 }
00355 for(j=0; j<cfg_info->cfg_dgnmr_val; j++)
00356 {
00357 li2c(digunit, temp_1);
00358 B_copy(cfg2_frm, temp_1, indx, 4);
00359 indx = indx + 4;
00360 }
00361
00362
00363 i2c(fnom, temp);
00364 B_copy(cfg2_frm, temp, indx, 2);
00365 indx = indx + 2;
00366
00367
00368 old_data_rate = data_rate;
00369 if (new_cfg_info->data_rate_choice == 1)
00370 {
00371 data_rate = new_cfg_info->new_data_rate;
00372 cfg_info->cfg_dataRate = new_cfg_info->new_data_rate;
00373 printf("\n-> Data Rate Changed = %d\n", data_rate);
00374 }
00375
00376
00377 if ((global_data_frm_size != data_frm_size) || (old_data_rate != data_rate))
00378 {
00379 cfgcnt = cfgcnt + 1;
00380 printf("\n-> CFG COUNT incremented = %d\n", cfgcnt);
00381 i2c(cfgcnt, temp);
00382 B_copy(cfg2_frm, temp, indx, 2);
00383 indx = indx + 2;
00384 }
00385 else
00386 {
00387 i2c(cfgcnt, temp);
00388 B_copy(cfg2_frm, temp, indx, 2);
00389 indx = indx + 2;
00390 }
00391
00392
00393 i2c(data_rate, temp);
00394 B_copy(cfg2_frm, temp, indx, 2);
00395 indx = indx + 2;
00396
00397
00398 time_t tm = time(NULL);
00399 soc = tm;
00400 li2c(soc, temp_1);
00401 B_copy(cfg2_frm, temp_1, 6, 4);
00402
00403
00404 gettimeofday(&tim, NULL);
00405 t1=tim.tv_sec+(tim.tv_usec/1000000.0);
00406 fracsec = (t1-soc)*100000;
00407 li2c(fracsec, temp_1);
00408 B_copy(cfg2_frm, temp_1, 10, 4);
00409
00410
00411 chk = compute_CRC(cfg2_frm,indx);
00412 cfg2_frm[indx++] = (chk >> 8) & ~(~0<<8);
00413 cfg2_frm[indx++] = (chk ) & ~(~0<<8);
00414
00415
00416 if ((global_data_frm_size != data_frm_size) || (old_data_rate != data_rate))
00417 {
00418 file_1 = fopen (filename_1,"wb");
00419 {
00420 fwrite(cfg2_frm, sizeof(unsigned char), indx, file_1);
00421 }
00422 fclose (file_1);
00423
00424
00425 file_1 = fopen (filename_2,"w");
00426 {
00427 fprintf(file_1, "%s", "5");
00428 }
00429 fclose (file_1);
00430
00431 free(new_cfg_info);
00432 validation_result ("Modification in Configuration frame successfully updated.");
00433 }
00434 else
00435 {
00436 validation_result ("No modification has been done in Configuration frame.");
00437 }
00438
00439 printf("\n-> CFG Size = %d Bytes. And Data Frame = %d Bytes.\n\n[", cfg2_frm_size, data_frm_size);
00440 for(j=0; j<indx; j++)
00441 {
00442 printf("%x",cfg2_frm[j]);
00443 }
00444 printf("], %d\n", indx);
00445 }
00446
00447
00448
00449
00450
00451
00452
00453
00454 int create_cfg()
00455 {
00456 int j, indx = 0, a, x1;
00457 char stn[16];
00458 unsigned char cline[MAX_STRING_SIZE];
00459 static const char filename_1[] = "cfg2.bin";
00460 static const char filename_2[] = "change.bin";
00461 FILE *file_1;
00462
00463
00464 file_1 = fopen (filename_1,"rb");
00465 if (file_1 != NULL)
00466 {
00467 memset(cline,'\0',sizeof(cline));
00468 fread(cline, sizeof(unsigned char), sizeof(cline), file_1);
00469 fclose(file_1);
00470
00471
00472 cfg_info = malloc(sizeof(struct ConfigurationFrame));
00473 cfg_info->cfg_STNname = malloc(16);
00474 memset(cfg_info->cfg_STNname,'\0',16);
00475
00476
00477 temp[0] = cline[2];
00478 temp[1] = cline[3];
00479 cfg2_frm_size = c2i(temp);
00480
00481
00482 temp[0] = cline[4];
00483 temp[1] = cline[5];
00484 pmu_id = c2i(temp);
00485 cfg_info->cfg_pmuID = pmu_id;
00486
00487
00488 temp_1[0] = cline[14];
00489 temp_1[1] = cline[15];
00490 temp_1[2] = cline[16];
00491 temp_1[3] = cline[17];
00492 TB = c2li(temp_1);
00493
00494
00495 for(a=0; a<16; a++)
00496 {
00497 stn[a] = cline[20+a];
00498 }
00499 strcpy(cfg_info->cfg_STNname, stn);
00500
00501
00502 temp[0] = cline[38];
00503 temp[1] = cline[39];
00504 frmt = c2i(temp);
00505
00506
00507 if(frmt == 15)
00508 {
00509 fdf=1, af=1, pf=1, pn=1;
00510 }
00511 else if(frmt == 14)
00512 {
00513 fdf=1, af=1, pf=1, pn=0;
00514 }
00515 else if(frmt == 13)
00516 {
00517 fdf=1, af=1, pf=0, pn=1;
00518 }
00519 else if(frmt == 12)
00520 {
00521 fdf=1, af=1, pf=0, pn=0;
00522 }
00523 else if(frmt == 11)
00524 {
00525 fdf=1, af=0, pf=1, pn=1;
00526 }
00527 else if(frmt == 10)
00528 {
00529 fdf=1, af=0, pf=1, pn=0;
00530 }
00531 else if(frmt == 9)
00532 {
00533 fdf=1, af=0, pf=0, pn=1;
00534 }
00535 else if(frmt == 8)
00536 {
00537 fdf=1, af=0, pf=0, pn=0;
00538 }
00539 else if(frmt == 7)
00540 {
00541 fdf=0, af=1, pf=1, pn=1;
00542 }
00543 else if(frmt == 6)
00544 {
00545 fdf=0, af=1, pf=1, pn=0;
00546 }
00547 else if(frmt == 5)
00548 {
00549 fdf=0, af=1, pf=0, pn=1;
00550 }
00551 else if(frmt == 4)
00552 {
00553 fdf=0, af=1, pf=0, pn=0;
00554 }
00555 else if(frmt == 3)
00556 {
00557 fdf=0, af=0, pf=1, pn=1;
00558 }
00559 else if(frmt == 2)
00560 {
00561 fdf=0, af=0, pf=1, pn=0;
00562 }
00563 else if(frmt == 1)
00564 {
00565 fdf=0, af=0, pf=0, pn=1;
00566 }
00567 else
00568 {
00569 fdf=0, af=0, pf=0, pn=0;
00570 }
00571
00572
00573 cfg_info->cfg_fdf = fdf;
00574 cfg_info->cfg_af = af;
00575 cfg_info->cfg_pf = pf;
00576 cfg_info->cfg_pn = pn;
00577
00578
00579 temp[0] = cline[40];
00580 temp[1] = cline[41];
00581 phnmr = c2i(temp);
00582 cfg_info->cfg_phnmr_val = phnmr;
00583
00584
00585 temp[0] = cline[42];
00586 temp[1] = cline[43];
00587 annmr = c2i(temp);
00588 cfg_info->cfg_annmr_val = annmr;
00589
00590
00591 temp[0] = cline[44];
00592 temp[1] = cline[45];
00593 dgnmr = c2i(temp);
00594 cfg_info->cfg_dgnmr_val = dgnmr;
00595
00596
00597 indx = 46 + (16*phnmr) + (16*annmr) + (256*dgnmr) + (4*phnmr) + (4*annmr) + (4*dgnmr) + 2;
00598 temp[0] = cline[indx++];
00599 temp[1] = cline[indx++];
00600 cfgcnt = c2i(temp);
00601
00602
00603 temp[0] = cline[indx++];
00604 temp[1] = cline[indx++];
00605 data_rate = c2i(temp);
00606 cfg_info->cfg_dataRate = data_rate;
00607
00608
00609 cfg_info->cfg_phasor_channels = (char *)malloc((phnmr*16) * sizeof(char));
00610 memset(cfg_info->cfg_phasor_channels, '\0', sizeof(cfg_info->cfg_phasor_channels));
00611 for(x1=0, indx=46; x1< (phnmr*16); x1++,indx++)
00612 {
00613 cfg_info->cfg_phasor_channels[x1] = cline[indx];
00614 }
00615
00616
00617 cfg_info->cfg_analog_channels = (char *)malloc((annmr*16) * sizeof(char));
00618 memset(cfg_info->cfg_analog_channels, '\0', sizeof(cfg_info->cfg_analog_channels));
00619 for(x1=0, indx; x1< (annmr*16); x1++,indx++)
00620 {
00621 cfg_info->cfg_analog_channels[x1] = cline[indx];
00622 }
00623
00624
00625 cfg_info->cfg_digital_channels = (char *)malloc((dgnmr*16*16) * sizeof(char));
00626 memset(cfg_info->cfg_digital_channels, '\0', sizeof(cfg_info->cfg_digital_channels));
00627 for(x1=0, indx; x1< (dgnmr*16*16); x1++,indx++)
00628 {
00629 cfg_info->cfg_digital_channels[x1] = cline[indx];
00630 }
00631
00632 validation_result ("\tConfiguration Frame Objects are created.\t\n");
00633 }
00634 else
00635 {
00636
00637 fdf = cfg_info->cfg_fdf;
00638 af = cfg_info->cfg_af;
00639 pf = cfg_info->cfg_pf;
00640 pn = cfg_info->cfg_pn;
00641
00642 if(fdf==1 && af==1 && pf==1 && pn==1)
00643 {
00644 frmt = 15;
00645 }
00646 else if(fdf==1 && af==1 && pf==1 && pn==0)
00647 {
00648 frmt = 14;
00649 }
00650 else if(fdf==1 && af==1 && pf==0 && pn==1)
00651 {
00652 frmt = 13;
00653 }
00654 else if(fdf==1 && af==1 && pf==0 && pn==0)
00655 {
00656 frmt = 12;
00657 }
00658 else if(fdf==1 && af==0 && pf==1 && pn==1)
00659 {
00660 frmt = 11;
00661 }
00662 else if(fdf==1 && af==0 && pf==1 && pn==0)
00663 {
00664 frmt = 10;
00665 }
00666 else if(fdf==1 && af==0 && pf==0 && pn==1)
00667 {
00668 frmt = 9;
00669 }
00670 else if(fdf==1 && af==0 && pf==0 && pn==0)
00671 {
00672 frmt = 8;
00673 }
00674 else if(fdf==0 && af==1 && pf==1 && pn==1)
00675 {
00676 frmt = 7;
00677 }
00678 else if(fdf==0 && af==1 && pf==1 && pn==0)
00679 {
00680 frmt = 6;
00681 }
00682 else if(fdf==0 && af==1 && pf==0 && pn==1)
00683 {
00684 frmt = 5;
00685 }
00686 else if(fdf==0 && af==1 && pf==0 && pn==0)
00687 {
00688 frmt = 4;
00689 }
00690 else if(fdf==0 && af==0 && pf==1 && pn==1)
00691 {
00692 frmt = 3;
00693 }
00694 else if(fdf==0 && af==0 && pf==1 && pn==0)
00695 {
00696 frmt = 2;
00697 }
00698 else if(fdf==0 && af==0 && pf==0 && pn==1)
00699 {
00700 frmt = 1;
00701 }
00702 else
00703 {
00704 frmt = 0;
00705 }
00706
00707
00708 phnmr = cfg_info->cfg_phnmr_val;
00709
00710
00711 annmr = cfg_info->cfg_annmr_val;
00712
00713
00714 dgnmr = cfg_info->cfg_dgnmr_val;
00715
00716
00717 cfg2_frm_size = 54 + (16*phnmr) + (16*annmr) + (4*phnmr) + (4*annmr) + (4*dgnmr) + (256*dgnmr);
00718
00719
00720 if (pf == 0)
00721 {
00722 data_frm_size = data_frm_size + (4*phnmr);
00723 }
00724 else
00725 {
00726 data_frm_size = data_frm_size + (8*phnmr);
00727 }
00728
00729
00730 if (af == 0)
00731 {
00732 data_frm_size = data_frm_size + (2*annmr);
00733 }
00734 else
00735 {
00736 data_frm_size = data_frm_size + (4*annmr);
00737 }
00738
00739
00740 if (fdf == 0)
00741 {
00742 data_frm_size = data_frm_size + 4;
00743 }
00744 else
00745 {
00746 data_frm_size = data_frm_size + 8;
00747 }
00748
00749
00750 data_frm_size = data_frm_size + (2*dgnmr);
00751
00752
00753 memset(cfg2_frm,'\0',sizeof(cfg2_frm));
00754 cfg2_frm[indx++] = 0xAA;
00755 cfg2_frm[indx++] = 0x31;
00756
00757
00758 i2c(cfg2_frm_size, temp);
00759 B_copy(cfg2_frm, temp, indx, 2);
00760 indx = indx + 2;
00761
00762
00763 pmu_id = cfg_info->cfg_pmuID;
00764 i2c(pmu_id, temp);
00765 B_copy(cfg2_frm, temp, indx, 2);
00766 indx = indx + 2;
00767
00768
00769 soc = 0;
00770 li2c(soc, temp_1);
00771 B_copy(cfg2_frm, temp_1, indx, 4);
00772 indx = indx + 4;
00773
00774
00775 li2c(fracsec, temp_1);
00776 B_copy(cfg2_frm, temp_1, indx, 4);
00777 indx = indx + 4;
00778
00779
00780 li2c(TB, temp_1);
00781 B_copy(cfg2_frm, temp_1, indx, 4);
00782 indx = indx + 4;
00783
00784
00785 i2c(num_pmu, temp);
00786 B_copy(cfg2_frm, temp, indx, 2);
00787 indx = indx + 2;
00788
00789
00790 strncpy(temp_5, (const char *)cfg_info->cfg_STNname, 16);
00791 B_copy(cfg2_frm, (unsigned char *)temp_5, indx, 16);
00792 indx = indx + 16;
00793
00794
00795 i2c(pmu_id, temp);
00796 B_copy(cfg2_frm, temp, indx, 2);
00797 indx = indx + 2;
00798
00799
00800 i2c(frmt, temp);
00801 B_copy(cfg2_frm, temp, indx, 2);
00802 indx = indx + 2;
00803
00804
00805 i2c(phnmr, temp);
00806 B_copy(cfg2_frm, temp, indx, 2);
00807 indx = indx + 2;
00808
00809
00810 i2c(annmr, temp);
00811 B_copy(cfg2_frm, temp, indx, 2);
00812 indx = indx + 2;
00813
00814
00815 i2c(dgnmr, temp);
00816 B_copy(cfg2_frm, temp, indx, 2);
00817 indx = indx + 2;
00818
00819
00820
00821 B_copy(cfg2_frm, (unsigned char *)cfg_info->cfg_phasor_channels, indx, 16*phnmr);
00822 indx = indx + 16*phnmr;
00823
00824
00825 B_copy(cfg2_frm, (unsigned char *)cfg_info->cfg_analog_channels, indx, 16*annmr);
00826 indx = indx + 16*annmr;
00827
00828
00829 B_copy(cfg2_frm, (unsigned char *)cfg_info->cfg_digital_channels, indx, 16*16*dgnmr);
00830 indx = indx + 16*16*dgnmr;
00831
00832
00833 for(j=0; j<phnmr; j++)
00834 {
00835 li2c(phunit, temp_1);
00836 B_copy(cfg2_frm, temp_1, indx, 4);
00837 indx = indx + 4;
00838 }
00839 for(j=0; j<annmr; j++)
00840 {
00841 li2c(anunit, temp_1);
00842 B_copy(cfg2_frm, temp_1, indx, 4);
00843 indx = indx + 4;
00844 }
00845 for(j=0; j< dgnmr; j++)
00846 {
00847 li2c(digunit, temp_1);
00848 B_copy(cfg2_frm, temp_1, indx, 4);
00849 indx = indx + 4;
00850 }
00851
00852
00853 i2c(fnom, temp);
00854 B_copy(cfg2_frm, temp, indx, 2);
00855 indx = indx + 2;
00856
00857
00858 i2c(cfgcnt, temp);
00859 B_copy(cfg2_frm, temp, indx, 2);
00860 indx = indx + 2;
00861
00862
00863 data_rate = cfg_info->cfg_dataRate;
00864 i2c(data_rate, temp);
00865 B_copy(cfg2_frm, temp, indx, 2);
00866 indx = indx + 2;
00867
00868
00869 time_t tm = time(NULL);
00870 soc = tm;
00871 li2c(soc, temp_1);
00872 B_copy(cfg2_frm, temp_1, 6, 4);
00873
00874
00875 gettimeofday(&tim, NULL);
00876 t1=tim.tv_sec+(tim.tv_usec/1000000.0);
00877 fracsec = (t1-soc)*100000;
00878 li2c(fracsec, temp_1);
00879 B_copy(cfg2_frm, temp_1, 10, 4);
00880
00881
00882 chk = compute_CRC(cfg2_frm,indx);
00883 cfg2_frm[indx++] = (chk >> 8) & ~(~0<<8);
00884 cfg2_frm[indx++] = (chk ) & ~(~0<<8);
00885
00886
00887 file_1 = fopen (filename_1,"wb");
00888 {
00889 fwrite(cfg2_frm, sizeof(unsigned char), indx, file_1);
00890 }
00891 fclose (file_1);
00892
00893
00894 file_1 = fopen (filename_2,"w");
00895 {
00896 fprintf(file_1, "%s", "0");
00897 }
00898 fclose (file_1);
00899
00900 printf("\nCFG Frame size = %d, ", cfg2_frm_size);
00901 printf("& Data Frame size = %d.\n\n", data_frm_size);
00902
00903
00904 printf("\n[");
00905 for(j=0; j<indx; j++)
00906 {
00907 printf("%x",cfg2_frm[j]);
00908 }
00909 printf("], %d\n", indx);
00910 }
00911 return 0;
00912 }
00913
00914
00915
00916
00917
00918
00919
00920
00921 void show_pmu_details (GtkWidget *widget, gpointer udata)
00922 {
00923
00924 char tmpBuffer[30];
00925 GtkWidget *new_window, *scrolled_window;
00926 GtkWidget *label, *table, *close_but;
00927
00928
00929 new_window = gtk_dialog_new ();
00930 g_signal_connect (new_window, "destroy", G_CALLBACK (gtk_widget_destroy), new_window);
00931 gtk_window_set_title (GTK_WINDOW (new_window), "PMU Simulator");
00932 gtk_container_set_border_width (GTK_CONTAINER (new_window), 10);
00933 gtk_widget_set_size_request (new_window, 400, 500);
00934
00935
00936 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
00937 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
00938
00939
00940
00941 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
00942
00943
00944 gtk_box_pack_start (GTK_BOX (GTK_DIALOG(new_window)->vbox), scrolled_window, TRUE, TRUE, 0);
00945 gtk_widget_show (scrolled_window);
00946
00947
00948 table = gtk_table_new (14, 2, FALSE);
00949
00950
00951 gtk_table_set_row_spacings (GTK_TABLE (table), 35);
00952 gtk_table_set_col_spacings (GTK_TABLE (table), 25);
00953
00954
00955 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table);
00956 gtk_widget_show (table);
00957
00958
00959 close_but = gtk_button_new_with_label ("OK");
00960
00961
00962 label = gtk_label_new (" ");
00963 markup1 = g_markup_printf_escaped ("<span foreground=\"#990033\" font='12'><b>PMU SERVER Details</b></span>");
00964 gtk_label_set_markup (GTK_LABEL (label), markup1);
00965 gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1);
00966 gtk_widget_show (label);
00967 g_free (markup1);
00968
00969 label = gtk_label_new ("Server Port ");
00970 gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2);
00971 gtk_widget_show (label);
00972
00973 label = gtk_label_new ("Protocol ");
00974 gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 2, 3);
00975 gtk_widget_show (label);
00976
00977
00978 FILE *file_1 = fopen ("PmuServer.txt","r");
00979 if (file_1 != NULL)
00980 {
00981 char *p1, *p2;
00982
00983
00984 memset(tmpBuffer,'\0',30);
00985 fgets (tmpBuffer, 30, file_1);
00986 p1 = strtok (tmpBuffer," ");
00987 p2 = strtok (NULL," ");
00988
00989 label = gtk_label_new (p1);
00990 gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 1, 2);
00991 gtk_widget_show (label);
00992
00993 label = gtk_label_new (p2);
00994 gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 2, 3);
00995 gtk_widget_show (label);
00996 }
00997
00998 label = gtk_label_new (" ");
00999 markup1 = g_markup_printf_escaped ("<span foreground=\"#33AAFF\" font='12'><b>--------</b></span>");
01000 gtk_label_set_markup (GTK_LABEL (label), markup1);
01001 gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 3, 4);
01002 gtk_widget_show (label);
01003 g_free (markup1);
01004
01005 label = gtk_label_new (" ");
01006 markup1 = g_markup_printf_escaped ("<span foreground=\"#33AAFF\" font='12'><b>--------</b></span>");
01007 gtk_label_set_markup (GTK_LABEL (label), markup1);
01008 gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 3, 4);
01009 gtk_widget_show (label);
01010 g_free (markup1);
01011
01012
01013
01014 label = gtk_label_new (" ");
01015 markup1 = g_markup_printf_escaped ("<span foreground=\"#990033\" font='12'><b>PMU Configuration Details</b></span>");
01016 gtk_label_set_markup (GTK_LABEL (label), markup1);
01017 gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 4, 5);
01018 gtk_widget_show (label);
01019 g_free (markup1);
01020
01021 label = gtk_label_new ("PMU ID ");
01022 gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 5, 6);
01023 gtk_widget_show (label);
01024
01025 label = gtk_label_new ("Station Name ");
01026 gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 6, 7);
01027 gtk_widget_show (label);
01028
01029 label = gtk_label_new ("Number of Phasors");
01030 gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 7, 8);
01031 gtk_widget_show (label);
01032
01033 label = gtk_label_new ("Number of Analog ");
01034 gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 8, 9);
01035 gtk_widget_show (label);
01036
01037 label = gtk_label_new ("Digital Status Word");
01038 gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 9, 10);
01039 gtk_widget_show (label);
01040
01041 label = gtk_label_new ("Data Rate ");
01042 gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 10, 11);
01043 gtk_widget_show (label);
01044
01045 label = gtk_label_new ("Format Word ");
01046 gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 11, 12);
01047 gtk_widget_show (label);
01048
01049 label = gtk_label_new ("Configuration Count ");
01050 gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 12, 13);
01051 gtk_widget_show (label);
01052
01053 label = gtk_label_new ("CFG Frame Size ");
01054 gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 13, 14);
01055 gtk_widget_show (label);
01056
01057
01058 memset(tmpBuffer,'\0',30);
01059 sprintf(tmpBuffer,"%d",cfg2_frm_size);
01060 label = gtk_label_new (tmpBuffer);
01061 gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 13, 14);
01062 gtk_widget_show (label);
01063
01064 memset(tmpBuffer,'\0',30);
01065 sprintf(tmpBuffer,"%d",cfg_info->cfg_pmuID);
01066 label = gtk_label_new (tmpBuffer);
01067 gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 5, 6);
01068 gtk_widget_show (label);
01069
01070 memset(tmpBuffer,'\0',30);
01071 label = gtk_label_new (cfg_info->cfg_STNname);
01072 gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 6, 7);
01073 gtk_widget_show (label);
01074
01075 memset(tmpBuffer,'\0',30);
01076 sprintf(tmpBuffer,"%d",frmt);
01077 label = gtk_label_new (tmpBuffer);
01078 gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 11, 12);
01079 gtk_widget_show (label);
01080
01081 memset(tmpBuffer,'\0',30);
01082 sprintf(tmpBuffer,"%d",cfg_info->cfg_phnmr_val);
01083 label = gtk_label_new (tmpBuffer);
01084 gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 7, 8);
01085 gtk_widget_show (label);
01086
01087 memset(tmpBuffer,'\0',30);
01088 sprintf(tmpBuffer,"%d",cfg_info->cfg_annmr_val);
01089 label = gtk_label_new (tmpBuffer);
01090 gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 8, 9);
01091 gtk_widget_show (label);
01092
01093 memset(tmpBuffer,'\0',30);
01094 sprintf(tmpBuffer,"%d",cfg_info->cfg_dgnmr_val);
01095 label = gtk_label_new (tmpBuffer);
01096 gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 9, 10);
01097 gtk_widget_show (label);
01098
01099 memset(tmpBuffer,'\0',30);
01100 sprintf(tmpBuffer,"%d",cfgcnt);
01101 label = gtk_label_new (tmpBuffer);
01102 gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 12, 13);
01103 gtk_widget_show (label);
01104
01105 memset(tmpBuffer,'\0',30);
01106 sprintf(tmpBuffer,"%d",cfg_info->cfg_dataRate);
01107 label = gtk_label_new (tmpBuffer);
01108 gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 10, 11);
01109 gtk_widget_show (label);
01110
01111
01112 g_signal_connect_swapped (close_but, "clicked", G_CALLBACK (gtk_widget_destroy), new_window);
01113
01114
01115 gtk_widget_set_can_default (close_but, TRUE);
01116 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (new_window)->action_area), close_but, TRUE, TRUE, 0);
01117
01118
01119 gtk_widget_grab_default (close_but);
01120 gtk_widget_show (close_but);
01121
01122
01123 gtk_widget_show (new_window);
01124 };
01125
01126