TSP: The Transport Sample Protocol



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

bb_read.c

00001 
00002 #include <stdio.h>
00003 #include <malloc.h>
00004 #include <unistd.h>
00005 #include <stdlib.h>
00006 #include <assert.h>
00007 #include <string.h>
00008 
00009 #include <bb_core.h>
00010 
00011 int 
00012 main (int argc, char ** argv) {
00013 
00014   /* Définitions des variables */
00015   int retcode=0;
00016   void* sym_value;
00017   S_BB_DATADESC_T sym_data_desc;
00018   S_BB_T* mybb;
00019   char*    array_name;
00020   int32_t  array_index; 
00021 
00022   if (argc<3) {
00023     fprintf(stderr,"%s : argument missing\n",argv[0]);
00024     fprintf(stderr,"Usage: %s <bbname> <symbol_name>\n",argv[0]);
00025     exit(-1);
00026   }
00027   else {
00028     /* do we want to read a single element of an array var */
00029     array_name = strstr(argv[2],"[");
00030     if (array_name) {
00031       char* temp = "%d";
00032       char* temp2;
00033       temp2  = strdup(argv[2]);
00034       array_name  = strtok(temp2,"[");
00035       strncpy(sym_data_desc.name,array_name,VARNAME_MAX_SIZE);
00036       array_name = strtok(NULL,"]");
00037       sscanf(array_name,temp,&array_index);
00038       free(temp2);
00039     } else {
00040       array_index = -1;
00041       strncpy(sym_data_desc.name,argv[2],VARNAME_MAX_SIZE);  
00042     }
00043     
00044     if (array_name) {
00045       fprintf(stdout,"%s: Trying to read index <%d> of array symbol <%s> on blackboard <%s>...\n",
00046               argv[0],array_index,sym_data_desc.name,argv[1]);
00047     } else {
00048       fprintf(stdout,"%s: Trying to read symbol <%s> on blackboard <%s>...\n",
00049               argv[0],argv[2],argv[1]);
00050     }
00051     fflush(stdout);
00052   }
00053 
00054   /* Attach to BB */
00055   /****************/
00056   if (E_OK != bb_attach(&mybb,argv[1])) {
00057     fprintf(stderr,"Cannot attach to blackboard <%s>!!\n",argv[1]);
00058     exit(-1);
00059   }
00060 
00061   /* 
00062    * Use low-level subscribe in order to discover the 
00063    * type of the variable
00064    */
00065   sym_value = bb_subscribe(mybb,&sym_data_desc);
00066 
00067   if (NULL==sym_value) {
00068     fprintf(stdout,"%s: symbol not found\n",argv[0]);
00069   } else {
00070     if ((array_index!=-1) && (sym_data_desc.dimension <= array_index)) {
00071       fprintf(stdout,"%s: index <%d> exceeding symbol array dimension <%d>\n",
00072               argv[0],array_index,sym_data_desc.dimension);
00073     } else {
00074       bb_data_header_print(sym_data_desc,stdout,array_index);
00075       bb_value_print(mybb,sym_data_desc,stdout,array_index);
00076       bb_data_footer_print(sym_data_desc,stdout,array_index);
00077     }
00078   }        
00079   /* Detach from BB */
00080   /******************/
00081   retcode = bb_detach(&mybb);  
00082   
00083   return (retcode);
00084 }
Framework Home Page.

Beware !! TSP wave is coming...