TSP: The Transport Sample Protocol



Main Page | Modules | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

config.c

00001 #include <errno.h>
00002 #include <glib.h>
00003 #include <stdio.h>
00004 #include <assert.h>
00005 #include "page.h"
00006 #include "support.h"
00007 #include "page_config.h"
00008 
00009 #include "config.h"
00010 
00011 #include "math.h"
00012 
00013 
00014 extern   display_page* pages;
00015 
00016 
00017 
00018 conf_data_t conf_data;
00019 
00020 static variable_type pgc_vtype_to_local_vtype(PGC_var_type_t pgc_vtype)
00021 {
00022   variable_type local_vtype;
00023   
00024   switch(pgc_vtype)
00025     {
00026     case PGC_DOUBLE :
00027       local_vtype = VAR_DOUBLE;
00028       break;
00029     case PGC_TITLE :
00030       local_vtype = VAR_TITLE;
00031       break;
00032     case PGC_HEXA :
00033       local_vtype = VAR_HEXA;
00034       break;
00035     case PGC_BIN :
00036       local_vtype = VAR_BIN;
00037       break;  
00038     case PGC_STRING :
00039       local_vtype = VAR_STRING;
00040       break;
00041       
00042     default :
00043       fprintf(stderr, "Unknown var type : libpage_config version mismatch\n");
00044       exit(-1);      
00045     }
00046   return local_vtype;
00047 }
00048 
00049 static widget_type_t pgc_widgettype_to_local_widgettype(PGC_widget_type_t pgc_widgettype)
00050 {
00051   widget_type_t local_widgettype;
00052   
00053   switch(pgc_widgettype)
00054     {
00055     case PGC_WIDGET_DRAW :
00056       local_widgettype = WIDGET_DRAW;
00057       break;
00058     case PGC_WIDGET_VIEW :
00059       local_widgettype = WIDGET_VIEW;
00060       break;
00061     default :
00062       fprintf(stderr, "Unknown widget type : libpage_config version mismatch\n");
00063       exit(-1);      
00064     }
00065   return local_widgettype;
00066 }
00067 
00068 
00069 gboolean
00070 load_config (gchar *filename, conf_data_t* data)
00071 {
00072   
00073   int i = 0;
00074   PGC_handle_t pgc;
00075   PGC_page_t page;
00076   PGC_var_t var;
00077   PGC_global_t pgc_global;
00078   variable *new_var;
00079 
00080   data->tsp_requested.len = 0;
00081 
00082   pgc = PGC_open_file(filename);
00083 
00084 
00085   if(!pgc)
00086     {
00087       fprintf(stderr, "unable to parse file='%s'", filename);
00088       return FALSE;
00089     }
00090   
00091   /* Allocate room for tsp symbols */
00092   /* FIXME : 0 symbols ? */
00093   data->tsp_requested.val =
00094     (TSP_consumer_symbol_requested_t*)calloc(PGC_get_nb_var(pgc),sizeof(TSP_consumer_symbol_requested_t));
00095 
00096   data->nb_page = PGC_get_nb_page(pgc);
00097   PGC_get_global(pgc, &pgc_global);
00098   data->display_frequency = pgc_global.display_frequency;
00099     
00100   printf("nb_page = %d\n", PGC_get_nb_page(pgc));
00101   printf("nb_var = %d\n", PGC_get_nb_var(pgc));
00102  
00103   /* Allocate memory for pages */
00104   pages = (display_page*)g_malloc0(data->nb_page*sizeof(display_page));
00105   for (i=0; i < data->nb_page ; i++)
00106     {
00107     pages[i].variables = g_ptr_array_new();
00108 
00109   }
00110 
00111   i = 0;
00112   while( PGC_get_next_page(pgc, &page))
00113     {
00114 
00115       pages[i].position.x = page.x;
00116       pages[i].position.y = page.y;
00117       pages[i].position.width = page.width;
00118       pages[i].position.height = page.height;
00119       pages[i].position.height = page.height;
00120       pages[i].default_is_visible = page.is_visible;
00121       pages[i].no_border = page.no_border;
00122       pages[i].title = page.title;
00123 
00124       /* if 0 for rows, autocalculation */
00125       if(page.rows)
00126         pages[i].rows = page.rows;
00127       else
00128         pages[i].rows = sqrt((double)(PGC_get_page_nb_var(pgc, i)));  /* FIXME : Should depend on view | draw */
00129 
00130 
00131       while( PGC_get_next_var(pgc, &var) )
00132         {
00133 
00134           new_var = g_malloc0(sizeof(variable));
00135           if (!new_var)
00136             {
00137               fprintf(stderr, "Memory allocation failed");
00138               return FALSE;
00139           }       
00140           new_var->type = pgc_vtype_to_local_vtype(var.type);
00141           new_var->widget = NULL;
00142           new_var->text = var.name;
00143           new_var->legend = var.legend;
00144           new_var->widget_type = pgc_widgettype_to_local_widgettype(var.widget_type);
00145           new_var->provider_global_index = -1;
00146           new_var->period = var.period;
00147           new_var->duration = var.duration;
00148           g_ptr_array_add(pages[i].variables, new_var);
00149           
00150           switch(var.type)
00151             {
00152             case VAR_TITLE:
00153               /* no TSP variable */
00154               break;
00155             case VAR_DOUBLE:
00156             case VAR_HEXA:
00157             case VAR_BIN:
00158             case VAR_STRING:
00159               {
00160                 /* We do not want to ask twice the same variable */
00161                 int u; int found = FALSE;
00162                 for ( u = 0; u < data->tsp_requested.len ; u++)
00163                   {
00164                     if( !strcmp(data->tsp_requested.val[u].name,var.name))
00165                       {
00166                         found = TRUE; break;
00167                       }
00168                   }
00169                   
00170                 if(!found)
00171                   {
00172                     int current = data->tsp_requested.len++;
00173                     data->tsp_requested.val[current].name = var.name;
00174                     data->tsp_requested.val[current].period = var.period;
00175                     data->tsp_requested.val[current].phase = 0;
00176                   }
00177               }
00178               break;
00179             }
00180         }
00181 
00182       if( PGC_STATUS_FATAL == PGC_get_last_error(pgc) )
00183         {
00184           fprintf(stderr, "error parsing file='%s'", filename);
00185           return FALSE;
00186         }
00187 
00188       i++;
00189     }
00190   
00191   if( PGC_STATUS_FATAL == PGC_get_last_error(pgc) )
00192     {
00193       fprintf(stderr, "error parsing file='%s'", filename);
00194       return FALSE;
00195     }
00196 
00197   return TRUE;
00198 }
00199 
00200 
Framework Home Page.

Beware !! TSP wave is coming...