diff --git a/iPDC/assets/blue.png b/iPDC/assets/blue.png new file mode 100644 index 0000000..9e6becb Binary files /dev/null and b/iPDC/assets/blue.png differ diff --git a/iPDC/assets/grey.png b/iPDC/assets/grey.png new file mode 100644 index 0000000..d29f8af Binary files /dev/null and b/iPDC/assets/grey.png differ diff --git a/iPDC/assets/pink.png b/iPDC/assets/pink.png new file mode 100644 index 0000000..c9027be Binary files /dev/null and b/iPDC/assets/pink.png differ diff --git a/iPDC/assets/utility_tools.ui b/iPDC/assets/utility_tools.ui index 2edcca0..51cb0b5 100644 --- a/iPDC/assets/utility_tools.ui +++ b/iPDC/assets/utility_tools.ui @@ -296,18 +296,6 @@ 0 - - - 600 - 500 - True - False - - - 1 - 0 - - 150 @@ -324,6 +312,7 @@ True False + 16 False @@ -495,7 +484,8 @@ True False - >6900V + >65600V or +< 65300 1 @@ -530,8 +520,8 @@ True False - <6800V -<6300V + <65600V +>65300V 1 @@ -761,6 +751,7 @@ True False + > 0.5 1 @@ -795,7 +786,7 @@ True False - Normal + < 0.5 1 @@ -927,7 +918,7 @@ True False - RSS + IITdh 1 @@ -942,7 +933,39 @@ - + + + True + False + + + True + True + True + rgb(0,255,0) + + + 0 + 0 + + + + + True + False + dharwad + + + 1 + 0 + + + + + False + True + 2 + @@ -1003,7 +1026,7 @@ True False - RSS + IITdh 1 @@ -1018,7 +1041,39 @@ - + + + True + False + + + True + True + True + rgb(0,255,0) + + + 0 + 0 + + + + + True + False + dharwad + + + 1 + 0 + + + + + False + True + 2 + @@ -1079,7 +1134,7 @@ True False - RSS + IITdh 1 @@ -1094,7 +1149,39 @@ - + + + True + False + + + True + True + True + rgb(0,255,0) + + + 0 + 0 + + + + + True + False + dharwad + + + 1 + 0 + + + + + False + True + 2 + @@ -1109,6 +1196,59 @@ 3 + + + + True + False + + + 600 + 500 + True + False + + + 0 + 1 + + + + + True + False + 3 + 3 + Voltage Magnitude + + + + + + 0 + 0 + + + + + True + False + Voltage Magnitude + + + + + + 0 + 2 + + + + + 1 + 0 + + diff --git a/iPDC/assets/utility_tools.ui~ b/iPDC/assets/utility_tools.ui~ index f0a7144..b74503e 100644 --- a/iPDC/assets/utility_tools.ui~ +++ b/iPDC/assets/utility_tools.ui~ @@ -296,18 +296,6 @@ 0 - - - 600 - 500 - True - False - - - 1 - 0 - - 150 @@ -324,9 +312,9 @@ True False + 16 - True False vertical @@ -496,7 +484,8 @@ True False - >6900V + >65600V or +< 65300 1 @@ -531,8 +520,8 @@ True False - <6800V -<6300V + <65600V +>65300V 1 @@ -592,6 +581,7 @@ + True False vertical @@ -629,7 +619,7 @@ True False - Attack/Event + Deviation > 0.5 mHz 1 @@ -664,7 +654,7 @@ True False - Normal + deviation < 0.5mHz 1 @@ -761,7 +751,7 @@ True False - Attack/Event + > 0.5 1 @@ -796,7 +786,7 @@ True False - Normal + < 0.5 1 @@ -1110,6 +1100,59 @@ 3 + + + + True + False + + + 600 + 500 + True + False + + + 0 + 1 + + + + + True + False + 3 + 3 + Voltage Magnitude + + + + + + 0 + 0 + + + + + True + False + Voltage Magnitude + + + + + + 0 + 2 + + + + + 1 + 0 + + diff --git a/iPDC/inc/map_vis.h b/iPDC/inc/map_vis.h index 37ac914..9c533d7 100644 --- a/iPDC/inc/map_vis.h +++ b/iPDC/inc/map_vis.h @@ -17,7 +17,9 @@ struct vis_data{ GdkColor color; OsmGpsMapImage *last_image; // TODO: GTimeVal last_update_time; - LiveChartSerie *serie; + LiveChartSerie *serie_vol; + LiveChartSerie *serie_freq; + LiveChartSerie *serie_dfreq; struct vis_data *next; }; diff --git a/iPDC/inc/utility_tools.h b/iPDC/inc/utility_tools.h index 425f8e1..456aa81 100644 --- a/iPDC/inc/utility_tools.h +++ b/iPDC/inc/utility_tools.h @@ -39,10 +39,11 @@ struct _UtData GtkWidget *swfreq; GtkWidget *swdfreq; GtkWidget *swad; + GtkWidget *maplabel; + GtkWidget *graphlabel; }; UtData *utdata; -LiveChartSerie *serie; // global variables int curr_measurement; diff --git a/iPDC/src/Attack_detect.c b/iPDC/src/Attack_detect.c index 7dfd2ca..095253d 100644 --- a/iPDC/src/Attack_detect.c +++ b/iPDC/src/Attack_detect.c @@ -12,7 +12,7 @@ struct freqlist int idcode; long double AVERAGE_OF_FREQUENCY; unsigned long long int COUNT; - struct freqlist* next; + struct freqlist *next; }; struct vollist @@ -20,10 +20,9 @@ struct vollist int idcode; long double AVERAGE_OF_VOLTAGE; unsigned long long int COUNT; - struct vollist* next; + struct vollist *next; }; - struct freqlist *head = NULL; struct vollist *headvol = NULL; @@ -34,7 +33,7 @@ gboolean attack_detect_freq(struct data_frame *df) head = (struct freqlist *)malloc(sizeof(struct freqlist)); head->AVERAGE_OF_FREQUENCY = 50; head->COUNT = 500; - head->idcode=to_intconvertor(df->idcode); + head->idcode = to_intconvertor(df->idcode); return TRUE; } else @@ -46,10 +45,12 @@ gboolean attack_detect_freq(struct data_frame *df) if (to_intconvertor(df->idcode) == temp->idcode) { float CURR_FREQ; - if (df->dpmu[0]->fmt->freq == '0'){ + if (df->dpmu[0]->fmt->freq == '0') + { CURR_FREQ = 50 + to_intconvertor(df->dpmu[0]->freq) * 1e-3; } - else{ + else + { CURR_FREQ = decode_ieee_single(df->dpmu[0]->freq); } printf("Current freq: %f\n", CURR_FREQ); @@ -75,17 +76,17 @@ gboolean attack_detect_freq(struct data_frame *df) return TRUE; } } - previous=temp; - temp=temp->next; + previous = temp; + temp = temp->next; } - if(temp==NULL) + if (temp == NULL) { - struct freqlist* bring = (struct freqlist *)malloc(sizeof(struct freqlist)); + struct freqlist *bring = (struct freqlist *)malloc(sizeof(struct freqlist)); bring = (struct freqlist *)malloc(sizeof(struct freqlist)); bring->AVERAGE_OF_FREQUENCY = 50; bring->COUNT = 500; bring->idcode = to_intconvertor(df->idcode); - previous->next=bring; + previous->next = bring; return TRUE; } } @@ -96,30 +97,48 @@ gboolean attack_detect_vol(struct data_frame *df) float CURR_vol; if (df->dpmu[0]->fmt->phasor == '0') { - unsigned char s1[2]; - unsigned char s2[2]; - strncpy(s1, df->dpmu[0]->phasors[0], 2); - strncpy(s2, df->dpmu[0]->phasors[0] + 2, 2); - long double v1 = to_intconvertor(s1); - long double v2 = to_intconvertor(s2); - CURR_vol = sqrt((v1 * v1) + (v2 * v2)); + if (df->dpmu[0]->fmt->polar == '0') + { + unsigned char s1[2]; + unsigned char s2[2]; + strncpy(s1, df->dpmu[0]->phasors[0], 2); + strncpy(s2, df->dpmu[0]->phasors[0] + 2, 2); + long double v1 = to_intconvertor(s1); + long double v2 = to_intconvertor(s2); + CURR_vol = sqrt((v1 * v1) + (v2 * v2)); + } + else + { + unsigned char s1[2]; + strncpy(s1, df->dpmu[0]->phasors[0], 2); + CURR_vol = to_intconvertor(s1); + } } else { - unsigned char s1[2]; - unsigned char s2[2]; - strncpy(s1, df->dpmu[0]->phasors[0], 4); - strncpy(s2, df->dpmu[0]->phasors[0] + 2, 4); - long double v1 = decode_ieee_single(s1); - long double v2 = decode_ieee_single(s2); - CURR_vol = sqrt((v1 * v1) + (v2 * v2)); + if (df->dpmu[0]->fmt->polar == '0') + { + unsigned char s1[4]; + unsigned char s2[4]; + strncpy(s1, df->dpmu[0]->phasors[0], 4); + strncpy(s2, df->dpmu[0]->phasors[0] + 2, 4); + long double v1 = decode_ieee_single(s1); + long double v2 = decode_ieee_single(s2); + CURR_vol = sqrt((v1 * v1) + (v2 * v2)); + } + else + { + unsigned char s1[4]; + strncpy(s1, df->dpmu[0]->phasors[0], 4); + CURR_vol = decode_ieee_single(s1); + } } if (headvol == NULL) { headvol = (struct vollist *)malloc(sizeof(struct vollist)); headvol->AVERAGE_OF_VOLTAGE = CURR_vol; headvol->COUNT = 500; - headvol->idcode=to_intconvertor(df->idcode); + headvol->idcode = to_intconvertor(df->idcode); return TRUE; } else @@ -174,6 +193,4 @@ gboolean attack_detect_freq_vol(struct data_frame *df) return attack_detect_freq(df) && attack_detect_vol(df); } - - /* pavan changes */ \ No newline at end of file diff --git a/iPDC/src/Dynamic_time_warping.c b/iPDC/src/Dynamic_time_warping.c index 8678814..ef4cc93 100644 --- a/iPDC/src/Dynamic_time_warping.c +++ b/iPDC/src/Dynamic_time_warping.c @@ -29,7 +29,6 @@ struct DTWvollist struct DTWvollist *next; }; - struct DTWfreqlist *dtwhead = NULL; struct DTWvollist *dtwheadvol = NULL; @@ -43,7 +42,7 @@ int DTWfreqDistance(struct data_frame *df) dtwhead->flag = 0; dtwhead->idcode = to_intconvertor(df->idcode); dtwhead->next = NULL; - dtwhead->result=1; + dtwhead->result = 1; return 1; } else @@ -151,7 +150,7 @@ int DTWfreqDistance(struct data_frame *df) bring->flag = 0; bring->idcode = to_intconvertor(df->idcode); bring->next = NULL; - bring->result=1; + bring->result = 1; previous->next = bring; return 1; } @@ -169,7 +168,7 @@ int DTWvolDistance(struct data_frame *df) dtwheadvol->flag = 0; dtwheadvol->idcode = to_intconvertor(df->idcode); dtwheadvol->next = NULL; - dtwheadvol->result=1; + dtwheadvol->result = 1; return 1; } else @@ -183,23 +182,41 @@ int DTWvolDistance(struct data_frame *df) float CURR_vol; if (df->dpmu[0]->fmt->phasor == '0') { - unsigned char s1[2]; - unsigned char s2[2]; - strncpy(s1,df->dpmu[0]->phasors[0],2); - strncpy(s2,df->dpmu[0]->phasors[0]+2,2); - long double v1 = to_intconvertor(s1); - long double v2 = to_intconvertor(s2); - CURR_vol = sqrt((v1*v1)+(v2*v2)); + if (df->dpmu[0]->fmt->polar == '0') + { + unsigned char s1[2]; + unsigned char s2[2]; + strncpy(s1, df->dpmu[0]->phasors[0], 2); + strncpy(s2, df->dpmu[0]->phasors[0] + 2, 2); + long double v1 = to_intconvertor(s1); + long double v2 = to_intconvertor(s2); + CURR_vol = sqrt((v1 * v1) + (v2 * v2)); + } + else + { + unsigned char s1[2]; + strncpy(s1, df->dpmu[0]->phasors[0], 2); + CURR_vol = to_intconvertor(s1); + } } else { - unsigned char s1[4]; - unsigned char s2[4]; - strncpy(s1,df->dpmu[0]->phasors[0],4); - strncpy(s2,df->dpmu[0]->phasors[0]+2,4); - long double v1 = decode_ieee_single(s1); - long double v2 =decode_ieee_single(s2); - CURR_vol = sqrt((v1*v1)+(v2*v2)); + if (df->dpmu[0]->fmt->polar == '0') + { + unsigned char s1[4]; + unsigned char s2[4]; + strncpy(s1, df->dpmu[0]->phasors[0], 4); + strncpy(s2, df->dpmu[0]->phasors[0] + 2, 4); + long double v1 = decode_ieee_single(s1); + long double v2 = decode_ieee_single(s2); + CURR_vol = sqrt((v1 * v1) + (v2 * v2)); + } + else + { + unsigned char s1[4]; + strncpy(s1, df->dpmu[0]->phasors[0], 4); + CURR_vol = decode_ieee_single(s1); + } } // printf("count1: %d\ncount2: %d\n",count_track1,count_track2); @@ -289,7 +306,7 @@ int DTWvolDistance(struct data_frame *df) bring->flag = 0; bring->idcode = to_intconvertor(df->idcode); bring->next = NULL; - bring->result=1; + bring->result = 1; previous->next = bring; return 1; } diff --git a/iPDC/src/Kmeans.c b/iPDC/src/Kmeans.c index 1fd95b7..1bdf2ea 100644 --- a/iPDC/src/Kmeans.c +++ b/iPDC/src/Kmeans.c @@ -11,14 +11,14 @@ struct kmeans1 { int idcode; - unsigned long long int count_A = 1000; - unsigned long long int count_B = 1000; - unsigned long long int count_C = 1000; - long double A = 50; - long double B = 49; - long double C = 51; + unsigned long long int count_A; + unsigned long long int count_B; + unsigned long long int count_C; + long double A; + long double B; + long double C; struct kmeans1 *next; -} +}; struct kmeans1 *headk = NULL; @@ -26,6 +26,7 @@ gboolean kmeans(struct data_frame *df) { if (headk == NULL) { + headk = (struct kmeans1 *)malloc(sizeof(struct kmeans1)); headk->A = 50; headk->B = 49; headk->C = 51; @@ -38,8 +39,8 @@ gboolean kmeans(struct data_frame *df) } else { - struct kmeans1 *temp == headk; - struct kmeans1 *previous == NULL; + struct kmeans1 *temp = headk; + struct kmeans1 *previous = NULL; while (temp != NULL) { if (temp->idcode == to_intconvertor(df->idcode)) @@ -79,10 +80,10 @@ gboolean kmeans(struct data_frame *df) } break; } - previous=temp; + previous = temp; temp = temp->next; } - if(temp==NULL) + if (temp == NULL) { struct kmeans1 *bring = (struct kmeans1 *)malloc(sizeof(struct kmeans1)); bring->A = 50; @@ -93,7 +94,7 @@ gboolean kmeans(struct data_frame *df) bring->count_C = 1000; bring->next = NULL; bring->idcode = to_intconvertor(df->idcode); - previous->next=bring; + previous->next = bring; return TRUE; } } diff --git a/iPDC/src/map_vis.c b/iPDC/src/map_vis.c index 88dff2e..5c18853 100644 --- a/iPDC/src/map_vis.c +++ b/iPDC/src/map_vis.c @@ -37,100 +37,143 @@ gboolean update_images(gpointer* pars){ //printf("map_vis A: %Lf, B: %Lf,C: %Lf\n",A,B,C); //gboolean green = kmeans(df); - if (curr_measurement==0) - { - int i = 0, k = 0; - float freq,vol_magnitude,angle, dfreq; - unsigned char freq_fmt, anal_fmt, phas_fmt, polar_fmt; - while (df!=NULL){ - float lat; - float lon; - loops++; - printf("loops: %d\n", loops); - - id = to_intconvertor(df->idcode); - printf("id = %d\n",id); - pthread_mutex_lock(&mutex_cfg); - temp_cfg = cfgfirst; - // Check for the IDCODE in Configuration Frame - while(temp_cfg != NULL){ - if(id == to_intconvertor(temp_cfg->idcode)){ - cfg_match = 1; - printf("Matched - id : %d\n",id); - freq_fmt = temp_cfg->pmu[0]->fmt->freq; - anal_fmt = temp_cfg->pmu[0]->fmt->analog; - phas_fmt = temp_cfg->pmu[0]->fmt->phasor; - polar_fmt = temp_cfg->pmu[0]->fmt->polar; - break; - } else { - temp_cfg = temp_cfg->cfgnext; - } + int i = 0, k = 0; + float freq,vol_magnitude,angle, dfreq; + unsigned char freq_fmt, anal_fmt, phas_fmt, polar_fmt; + while (df!=NULL){ + float lat; + float lon; + loops++; + printf("loops: %d\n", loops); + + id = to_intconvertor(df->idcode); + printf("id = %d\n",id); + pthread_mutex_lock(&mutex_cfg); + temp_cfg = cfgfirst; + // Check for the IDCODE in Configuration Frame + while(temp_cfg != NULL){ + if(id == to_intconvertor(temp_cfg->idcode)){ + cfg_match = 1; + printf("Matched - id : %d\n",id); + freq_fmt = temp_cfg->pmu[0]->fmt->freq; + anal_fmt = temp_cfg->pmu[0]->fmt->analog; + phas_fmt = temp_cfg->pmu[0]->fmt->phasor; + polar_fmt = temp_cfg->pmu[0]->fmt->polar; + break; + } else { + temp_cfg = temp_cfg->cfgnext; } - pthread_mutex_unlock(&mutex_cfg); - - // get data from df. - if(freq_fmt == '1'){ - freq = decode_ieee_single(df->dpmu[i]->freq); - printf("freq = %f\n",freq); - }else{ - freq = to_intconvertor(df->dpmu[i]->freq)*1e-6+50; - } - - unsigned char first2bytes[2]; - strncpy(first2bytes, df->dpmu[i]->phasors[0], 2); - unsigned char last2bytes[2]; - strncpy(last2bytes, df->dpmu[i]->phasors[0]+2, 2); - vol_magnitude = to_intconvertor(first2bytes); - float imaginary = to_intconvertor(last2bytes); - printf("vol = %f imag = %f\n",vol_magnitude, imaginary); - - live_chart_serie_add(serie, freq); - - // check lower layer details to get longitude and lattitude. - // pthread_mutex_lock(&mutex_Lower_Layer_Details); - // LLptr = LLfirst; - // match = 0; - // while(LLptr != NULL){ - // printf("pmuid = %d\n",LLptr->pmuid); - // if(LLptr->pmuid == id){ - // match = 1; - // lat = LLptr->latitude; - // lon = LLptr->longitude; - // printf("lat = %f; lon = %f\n",lat,lon); - // break; - // } - // LLptr = LLptr->next; - // } - // pthread_mutex_unlock(&mutex_Lower_Layer_Details); - - vis_ptr = vis_data_head; - match = 0; - while(vis_ptr != NULL){ - printf("vis_ptr->id = %d\n",vis_ptr->id); - if(vis_ptr->id == id){ - match = 1; - printf("Matched - id : %d\n",id); - break; - } - vis_ptr = vis_ptr->next; - } - - - if(match == 1 && cfg_match == 1){ - printf("lat = %f, lon = %f, freq = %f\n",lat,lon,freq); - if(parameters->g_last_image != 0){ - osm_gps_map_image_remove(parameters->util_map, parameters->g_last_image); - } - if (DTWvolDistance(df)){ - parameters->g_last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_green_image); - }else{ - parameters->g_last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_red_image); - } - } - df = df->dnext; - // i++; - k++; } + pthread_mutex_unlock(&mutex_cfg); + + // get data from df. + if(freq_fmt == '1'){ + freq = decode_ieee_single(df->dpmu[i]->freq); + printf("freq = %f\n",freq); + }else{ + freq = to_intconvertor(df->dpmu[i]->freq)*1e-6+50; + } + + unsigned char first2bytes[2]; + strncpy(first2bytes, df->dpmu[i]->phasors[0], 2); + unsigned char last2bytes[2]; + strncpy(last2bytes, df->dpmu[i]->phasors[0]+2, 2); + vol_magnitude = to_intconvertor(first2bytes); + float imaginary = to_intconvertor(last2bytes); + printf("vol = %f imag = %f\n",vol_magnitude, imaginary); + + vis_ptr = vis_data_head; + match = 0; + while(vis_ptr != NULL){ + printf("vis_ptr->id = %d\n",vis_ptr->id); + if(vis_ptr->id == id){ + match = 1; + printf("Matched - id : %d\n",id); + break; + } + vis_ptr = vis_ptr->next; + } + + lat = vis_ptr->lat; + lon = vis_ptr->lon; + + live_chart_serie_add(vis_ptr->serie_freq, freq); + live_chart_serie_add(vis_ptr->serie_vol, vol_magnitude); + live_chart_serie_add(vis_ptr->serie_dfreq, dfreq); + + if(match == 1 && cfg_match == 1){ + printf("lat = %f, lon = %f, freq = %f\n",lat,lon,freq); + if(vis_ptr->last_image != 0){ + osm_gps_map_image_remove(parameters->util_map, vis_ptr->last_image); + } + + if(curr_measurement == 0){ + if(vol_magnitude > 65600 || vol_magnitude < 65300){ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map, lat, lon, parameters->g_red_image); + }else{ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map, lat, lon, parameters->g_green_image); + } + }else if(curr_measurement == 1){ + if (freq > 300){ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_green_image); + }else{ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_red_image); + } + }else if(curr_measurement == 2){ + if (dfreq < 0.5){ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_green_image); + }else{ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_red_image); + } + }else if(curr_measurement == 3){ + if(algorithm==0 && dimmension == 0){ + if (!attack_detect_vol(df)){ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_red_image); + }else{ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_green_image); + } + }else if (algorithm==0 && dimmension == 1){ + if (!attack_detect_freq(df)){ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_red_image); + }else{ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_green_image); + } + }else if (algorithm==0 && dimmension == 2){ + if (!attack_detect_freq_vol(df)){ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_red_image); + }else{ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_green_image); + } + }else if (algorithm==1 && dimmension == 0){ + if(!kmeans(df)){ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_red_image); + }else{ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_green_image); + } + }else if (algorithm==1 && dimmension == 1){ + + }else if (algorithm==1 && dimmension == 2){ + + }else if (algorithm==2 && dimmension == 0){ + if(!DTWvolDistance(df)){ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_red_image); + }else{ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_green_image); + } + }else if (algorithm==2 && dimmension == 1){ + if(!DTWfreqDistance(df)){ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_red_image); + }else{ + vis_ptr->last_image = osm_gps_map_image_add(parameters->util_map,lat, lon, parameters->g_green_image); + } + }else if (algorithm==2 && dimmension == 2){ + + } + } + } + df = df->dnext; + // i++; + k++; } pthread_mutex_unlock(&mutex_on_TSB); diff --git a/iPDC/src/utility_tools.c b/iPDC/src/utility_tools.c index 3db4ac9..218cd72 100644 --- a/iPDC/src/utility_tools.c +++ b/iPDC/src/utility_tools.c @@ -7,10 +7,14 @@ #include "livechart.h" #include "connections.h" +// TODO: change this when in production #define UI_fILE "./assets/utility_tools.ui" #define RED_IMAGE "./assets/red.png" #define GREEN_IMAGE "./assets/green.png" - +#define YELLOW_IMAGE "./assets/yellow.png" +#define BLUE_IMAGE "./assets/blue.png" +#define GREY_IMAGE "./assets/grey.png" +#define PINK_IMAGE "./assets/pink.png" // void change_image(OsmGpsMap *map, float lat, float lon, OsmGpsMapImage *image) // { @@ -132,9 +136,20 @@ void on_voltage_clicked(GtkButton *but, gpointer udata) curr_measurement = 0; gtk_widget_show(utdata->ml_vol); + gtk_widget_show(utdata->graph_layoutvol); + gtk_widget_show(utdata->swvol); + gtk_widget_show(utdata->graphlabel); + + gtk_label_set_label(utdata->maplabel, "Voltage Magnitude"); + gtk_label_set_label(utdata->graphlabel, "Voltage Magnitude"); + gtk_widget_hide(utdata->ml_freq); gtk_widget_hide(utdata->ml_dfreq); gtk_widget_hide(utdata->ml_ad); + gtk_widget_hide(utdata->graph_layoutfreq); + gtk_widget_hide(utdata->graph_layoutdfreq); + gtk_widget_hide(utdata->swfreq); + gtk_widget_hide(utdata->swdfreq); gtk_widget_hide(utdata->algorithm); gtk_widget_hide(utdata->dimmension); @@ -153,9 +168,21 @@ void on_frequency_clicked(GtkButton *but, gpointer udata) curr_measurement = 1; gtk_widget_show(utdata->ml_freq); + gtk_widget_show(utdata->graph_layoutfreq); + gtk_widget_show(utdata->swfreq); + gtk_widget_show(utdata->graphlabel); + + gtk_label_set_label(utdata->maplabel, "Frequency"); + gtk_label_set_label(utdata->graphlabel, "Frequency"); + gtk_widget_hide(utdata->ml_vol); gtk_widget_hide(utdata->ml_dfreq); gtk_widget_hide(utdata->ml_ad); + gtk_widget_hide(utdata->swdfreq); + gtk_widget_hide(utdata->swvol); + gtk_widget_hide(utdata->graph_layoutdfreq); + gtk_widget_hide(utdata->graph_layoutvol); + gtk_widget_hide(utdata->algorithm); gtk_widget_hide(utdata->dimmension); @@ -175,9 +202,20 @@ void on_dfreq_clicked(GtkButton *but, gpointer udata) curr_measurement = 2; gtk_widget_show(utdata->ml_dfreq); + gtk_widget_show(utdata->graph_layoutdfreq); + gtk_widget_show(utdata->swdfreq); + gtk_widget_show(utdata->graphlabel); + + gtk_label_set_label(utdata->maplabel, "Frequency Rate"); + gtk_label_set_label(utdata->graphlabel, "Frequency Rate"); + gtk_widget_hide(utdata->ml_vol); gtk_widget_hide(utdata->ml_freq); gtk_widget_hide(utdata->ml_ad); + gtk_widget_hide(utdata->graph_layoutfreq); + gtk_widget_hide(utdata->graph_layoutvol); + gtk_widget_hide(utdata->swvol); + gtk_widget_hide(utdata->swfreq); gtk_widget_hide(utdata->algorithm); @@ -207,9 +245,18 @@ void on_attack_detection_clicked(GtkButton *but, gpointer udata) gtk_widget_show(utdata->dimm_label); gtk_widget_show(utdata->ml_ad); + gtk_label_set_label(utdata->maplabel, "Attack Detection"); + gtk_widget_hide(utdata->ml_vol); gtk_widget_hide(utdata->ml_freq); gtk_widget_hide(utdata->ml_dfreq); + gtk_widget_hide(utdata->swvol); + gtk_widget_hide(utdata->swfreq); + gtk_widget_hide(utdata->swdfreq); + gtk_widget_hide(utdata->graph_layoutdfreq); + gtk_widget_hide(utdata->graph_layoutfreq); + gtk_widget_hide(utdata->graph_layoutvol); + gtk_widget_hide(utdata->graphlabel); printf("Attack Detection\n"); } @@ -234,6 +281,11 @@ void utility_tools(GtkButton *but, gpointer udata) { GdkPixbuf *g_red_image; GdkPixbuf *g_green_image; + GdkPixbuf *g_yellow_image; + GdkPixbuf *g_blue_image; + GdkPixbuf *g_pink_image; + GdkPixbuf *g_grey_image; + OsmGpsMapImage *g_last_image; // ------------------- GtkBuilder *builder; @@ -268,7 +320,8 @@ void utility_tools(GtkButton *but, gpointer udata) utdata->swvol = GTK_WIDGET(gtk_builder_get_object(builder, "swvol")); utdata->swfreq = GTK_WIDGET(gtk_builder_get_object(builder, "swfreq")); utdata->swdfreq = GTK_WIDGET(gtk_builder_get_object(builder, "swdfreq")); - utdata->swad = GTK_WIDGET(gtk_builder_get_object(builder, "swad")); + utdata->maplabel = GTK_WIDGET(gtk_builder_get_object(builder, "maplabel")); + utdata->graphlabel = GTK_WIDGET(gtk_builder_get_object(builder, "graphlabel")); gtk_widget_set_sensitive(utdata->voltage, FALSE); gtk_widget_set_visible(utdata->algorithm, FALSE); @@ -287,6 +340,7 @@ void utility_tools(GtkButton *but, gpointer udata) g_red_image = gdk_pixbuf_new_from_file_at_size(RED_IMAGE, 24, 24, NULL); g_green_image = gdk_pixbuf_new_from_file_at_size(GREEN_IMAGE, 24, 24, NULL); + g_grey_image = gdk_pixbuf_new_from_file_at_size(GREY_IMAGE, 24, 24, NULL); utdata->util_map = g_object_new(OSM_TYPE_GPS_MAP, "map-source", OSM_GPS_MAP_SOURCE_OSMC_TRAILS, @@ -297,14 +351,14 @@ void utility_tools(GtkButton *but, gpointer udata) osm_gps_map_set_center_and_zoom(utdata->util_map, 15.4589, 75.0078, 10); // TODO: add the points to window. - g_last_image = osm_gps_map_image_add(utdata->util_map, 15.4589, 75.0078, g_red_image); - g_last_image = osm_gps_map_image_add(utdata->util_map, 15.518597, 74.925584, g_green_image); + // g_last_image = osm_gps_map_image_add(utdata->util_map, 15.4589, 75.0078, g_red_image); + // g_last_image = osm_gps_map_image_add(utdata->util_map, 15.518597, 74.925584, g_green_image); curr_measurement = 0; algorithm = 0; dimmension = 0; - myParameters parameters = {utdata->util_map, g_red_image, g_green_image, g_last_image}; + myParameters parameters = {utdata->util_map, g_red_image, g_green_image, g_grey_image, g_last_image}; gpointer data = (gpointer)¶meters; gtk_widget_set_size_request(GTK_WIDGET(utdata->util_map), 600, 500); @@ -312,52 +366,93 @@ void utility_tools(GtkButton *but, gpointer udata) gtk_container_add(utdata->map_layout, GTK_WIDGET(utdata->util_map)); // add live chart - serie = live_chart_serie_new("IIT", (LiveChartSerieRenderer*)live_chart_line_new(live_chart_values_new(10000))); - // live_chart set color to the serie - GdkRGBA color = getIndexColor(0); - live_chart_path_set_color(live_chart_serie_get_line(serie), &color); + // serie = live_chart_serie_new("IIT", (LiveChartSerieRenderer*)live_chart_line_new(live_chart_values_new(10000))); + // // live_chart set color to the serie + // GdkRGBA color = getIndexColor(0); + // live_chart_path_set_color(live_chart_serie_get_line(serie), &color); // iterate over llptr and load the map_vis_head structure // vis_data_head = (struct map_vis_head *)malloc(sizeof(struct vis_data)); + + LiveChartConfig *config_vol = live_chart_config_new(); + live_chart_yaxis_set_unit(config_vol->y_axis, "V"); + live_chart_xaxis_set_tick_interval(config_vol->x_axis, 20); + live_chart_xaxis_set_tick_length(config_vol->x_axis, 100); + live_chart_yaxis_update_bounds(config_vol->y_axis, 1); + live_chart_path_set_visible(config_vol->x_axis->lines, FALSE); + + LiveChartChart *chart_vol = live_chart_chart_new(config_vol); + + LiveChartConfig *config_freq = live_chart_config_new(); + live_chart_yaxis_set_unit(config_freq->y_axis, "mHz"); + live_chart_xaxis_set_tick_interval(config_freq->x_axis, 20); + live_chart_xaxis_set_tick_length(config_freq->x_axis, 100); + live_chart_yaxis_update_bounds(config_freq->y_axis, 1); + live_chart_path_set_visible(config_freq->x_axis->lines, FALSE); + + LiveChartChart *chart_freq = live_chart_chart_new(config_freq); + + + LiveChartConfig *config_dfreq = live_chart_config_new(); + live_chart_yaxis_set_unit(config_dfreq->y_axis, "mHz"); + live_chart_xaxis_set_tick_interval(config_dfreq->x_axis, 20); + live_chart_xaxis_set_tick_length(config_dfreq->x_axis, 100); + live_chart_yaxis_update_bounds(config_dfreq->y_axis, 1); + live_chart_path_set_visible(config_dfreq->x_axis->lines, FALSE); + + LiveChartChart *chart_dfreq = live_chart_chart_new(config_dfreq); + + + + + // live_chart_chart_add_serie(chart, serie); struct Lower_Layer_Details *llptr = LLfirst; - struct vis_data * visptr = vis_data_head; + vis_data_head = (struct vis_data *)malloc(sizeof(struct vis_data)); + struct vis_data * temp_visptr = vis_data_head; int index = 0; while (llptr != NULL) { - visptr = (struct vis_data *)malloc(sizeof(struct vis_data)); - visptr->id = llptr->pmuid; - visptr->lat = llptr->latitude; - visptr->lon = llptr->longitude; - visptr->last_image = osm_gps_map_image_add(utdata->util_map, llptr->latitude, llptr->longitude, g_red_image); // TODO: change the image - visptr->serie = live_chart_serie_new(llptr->ip, (LiveChartSerieRenderer*)live_chart_line_new(live_chart_values_new(10000))); - // live_chart set color to the serie + printf("\ncat\n"); + temp_visptr->id = llptr->pmuid; + temp_visptr->lat = llptr->latitude; + temp_visptr->lon = llptr->longitude; + temp_visptr->last_image = osm_gps_map_image_add(utdata->util_map, llptr->latitude, llptr->longitude, g_grey_image); // TODO: change the image + + temp_visptr->serie_freq = live_chart_serie_new(llptr->ip, (LiveChartSerieRenderer*)live_chart_line_new(live_chart_values_new(10000))); GdkRGBA color = getIndexColor(index); - live_chart_path_set_color(live_chart_serie_get_line(visptr->serie), &color); - visptr->next = NULL; - visptr = visptr->next; + live_chart_path_set_color(live_chart_serie_get_line(temp_visptr->serie_freq), &color); + live_chart_chart_add_serie(chart_freq, temp_visptr->serie_freq); + + temp_visptr->serie_vol = live_chart_serie_new(llptr->ip, (LiveChartSerieRenderer*)live_chart_line_new(live_chart_values_new(10000))); + live_chart_path_set_color(live_chart_serie_get_line(temp_visptr->serie_vol), &color); + live_chart_chart_add_serie(chart_vol, temp_visptr->serie_vol); + + temp_visptr->serie_dfreq = live_chart_serie_new(llptr->ip, (LiveChartSerieRenderer*)live_chart_line_new(live_chart_values_new(10000))); + live_chart_path_set_color(live_chart_serie_get_line(temp_visptr->serie_dfreq), &color); + live_chart_chart_add_serie(chart_dfreq, temp_visptr->serie_dfreq); + + temp_visptr->next = (struct vis_data *)malloc(sizeof(struct vis_data)); + temp_visptr = temp_visptr->next; index++; llptr = llptr->next; } + temp_visptr->next = NULL; guint pid = g_timeout_add(20, (GSourceFunc)update_images, data); - LiveChartConfig *config = live_chart_config_new(); - live_chart_yaxis_set_unit(config->y_axis, "mHz"); - live_chart_xaxis_set_tick_interval(config->x_axis, 20); - live_chart_xaxis_set_tick_length(config->x_axis, 100); - live_chart_yaxis_update_bounds(config->y_axis, 1); - live_chart_path_set_visible(config->x_axis->lines, FALSE); - - LiveChartChart *chart = live_chart_chart_new(config); - live_chart_chart_add_serie(chart, serie); // gtk_widget_set_hexpand(GTK_WIDGET(chart), TRUE); // gtk_widget_set_vexpand(GTK_WIDGET(chart), TRUE); - gtk_widget_set_size_request(GTK_WIDGET(chart), 600, 150); + gtk_widget_set_size_request(GTK_WIDGET(chart_freq), 600, 150); + gtk_widget_set_size_request(GTK_WIDGET(chart_vol), 600, 150); + gtk_widget_set_size_request(GTK_WIDGET(chart_dfreq), 600, 150); + + gtk_container_add(utdata->graph_layoutvol, GTK_WIDGET(chart_vol)); + gtk_container_add(utdata->graph_layoutfreq, GTK_WIDGET(chart_freq)); + gtk_container_add(utdata->graph_layoutdfreq, GTK_WIDGET(chart_dfreq)); - gtk_container_add(utdata->graph_layoutvol, GTK_WIDGET(chart)); @@ -383,7 +478,8 @@ void utility_tools(GtkButton *but, gpointer udata) gtk_widget_hide(utdata->ml_ad); gtk_widget_hide(utdata->swfreq); gtk_widget_hide(utdata->swdfreq); - gtk_widget_hide(utdata->swad); + gtk_widget_hide(utdata->graph_layoutdfreq); + gtk_widget_hide(utdata->graph_layoutfreq); gtk_main(); } \ No newline at end of file