diff options
| author | nicolas.zilio@hotmail.fr <> | 2015-09-15 14:17:23 +0200 | 
|---|---|---|
| committer | nicolas.zilio@hotmail.fr <> | 2015-09-15 14:17:23 +0200 | 
| commit | 1234f4a7e2410b127120aaa20dfe3c996ad34ef4 (patch) | |
| tree | 57327792e2a3f2ace196a65e5b343565d9b0b576 | |
| parent | 33db9c07bd08fae74c145c547f1b0e9f55ab25ae (diff) | |
| download | pcitool-1234f4a7e2410b127120aaa20dfe3c996ad34ef4.tar.gz pcitool-1234f4a7e2410b127120aaa20dfe3c996ad34ef4.tar.bz2 pcitool-1234f4a7e2410b127120aaa20dfe3c996ad34ef4.tar.xz pcitool-1234f4a7e2410b127120aaa20dfe3c996ad34ef4.zip | |
correction of some fails to load correct
| -rw-r--r-- | pcilib/xml.c | 22 | ||||
| -rw-r--r-- | xml/test/camera.xml | 22 | 
2 files changed, 28 insertions, 16 deletions
| diff --git a/pcilib/xml.c b/pcilib/xml.c index ebef91e..31b9926 100644 --- a/pcilib/xml.c +++ b/pcilib/xml.c @@ -121,20 +121,22 @@ pcilib_get_associated_views(pcilib_t* ctx, const char* reg_name,xmlXPathContextP    }      if (!xmlXPathNodeSetIsEmpty(nodeset)) { -      int i,k; +      int i,k,l=0;        /*if we correctly get a nodeset, then we iterate through the nodeset to get all views, using their names*/  	for (i = 0; i < nodeset->nodeNr; i++) {  	  view_name=(char*)nodeset->nodeTab[i]->children->content; -  	  /* if the view name obtained is for an enum view, we get all pcilib_enum_t corresponding to the register*/  	  for(k=0; ctx->views[k].name; k++){  	    if(!(strcasecmp(view_name, ctx->views[k].name))){ -	      ctx->register_ctx[id].views=realloc(ctx->register_ctx[id].views,(k+1)*sizeof(pcilib_enum_t)); -	      ctx->register_ctx[id].views[k]=ctx->views[k]; +	      ctx->register_ctx[id].views=realloc(ctx->register_ctx[id].views,(l+1)*sizeof(pcilib_view_t)); +	      ctx->register_ctx[id].views[l]=ctx->views[k]; +	      l++;  	    }  	  } -  	} +	ctx->register_ctx[id].views=realloc(ctx->register_ctx[id].views,(l+1)*sizeof(pcilib_view_t)); +	ctx->register_ctx[id].views[l].name=NULL; +      }      xmlXPathFreeObject(nodes); @@ -305,6 +307,7 @@ static int pcilib_xml_create_register(pcilib_t *ctx, pcilib_register_bank_t bank  	int i;  	for (i = 0; i < nodeset->nodeNr; i++) { +	  views_ok=0;  	    memset(&fdesc, 0, sizeof(pcilib_xml_register_description_t));  	    fdesc.base.bank = desc.base.bank; @@ -575,7 +578,6 @@ static int pcilib_xml_create_view(pcilib_t *ctx, xmlXPathContextPtr xpath, xmlDo  	  desc.description = value;          }else if (!(strcasecmp((char*)name,"enum"))) { -  	  desc.parameters=realloc(desc.parameters,(i+1)*sizeof(pcilib_enum_t));  	  ((pcilib_enum_t*)(desc.parameters))[i].name=value;  @@ -700,6 +702,7 @@ static int pcilib_xml_process_document(pcilib_t *ctx, xmlDocPtr doc, xmlXPathCon  	pcilib_xml_create_view(ctx,xpath,doc,nodeset->nodeTab[i]);        }      } +      xmlXPathFreeObject(views_nodes);       banks:      bank_nodes = xmlXPathEvalExpression(BANKS_PATH, xpath);  @@ -718,7 +721,6 @@ static int pcilib_xml_process_document(pcilib_t *ctx, xmlDocPtr doc, xmlXPathCon  	}      }      xmlXPathFreeObject(bank_nodes); -          return 0;  } @@ -852,20 +854,20 @@ int pcilib_process_xml(pcilib_t *ctx, const char *location) {  	err = pcilib_xml_load_file(ctx, model_path, file->d_name);  	if (err) pcilib_error("Error processing XML file %s", file->d_name);      } - +          for(i=0;i<ctx->num_views;i++){        pcilib_get_unit_of_view(ctx,&(ctx->views[i]),ctx->views[i].base_unit.name);      }      for(i=0;i<ctx->num_reg;i++){ +      if(!(ctx->register_ctx[i].views)) continue;        for(j=0;j<ctx->num_views;j++){  	if(!(ctx->register_ctx[i].views[j].name)) break; -	if(ctx->register_ctx[i].views){ +	if(ctx->register_ctx[i].views[j].name){  	  pcilib_get_unit_of_view(ctx,&(ctx->register_ctx[i].views[j]),ctx->register_ctx[i].views[j].base_unit.name);  	}        }      } -      closedir(rep);      return 0; diff --git a/xml/test/camera.xml b/xml/test/camera.xml index ed01014..021ed61 100644 --- a/xml/test/camera.xml +++ b/xml/test/camera.xml @@ -253,6 +253,10 @@            <rwmask>all</rwmask>            <mode>RW</mode>            <name>fr_num_lines_thr</name> +	  <views> +            <view>formuu2</view> +            <view>enumm2</view> +          </views>          </register>          <register>            <address>0x100</address> @@ -278,8 +282,8 @@                <mode>R</mode>                <name>sensor_temperature</name>                <views> -        		<view>formuu1</view> -    		    <view>formuu2</view> +        	<view>formuu1</view> +    		<view>formuu2</view>                  <view>enumm2</view>                </views>              </register_bits> @@ -294,10 +298,6 @@                <size>10</size>                <mode>RW</mode>                <name>fpga_temperature</name> -              <views> -                <view>formuu1</view> -                <view>enumm1</view> -              </views>              </register_bits>              <register_bits>                <offset>29</offset> @@ -348,6 +348,11 @@                <size>5</size>                <mode>RW</mode>                <name>motor_phi</name> +	  <views> +	    <view>formuu1</view> +	    <view>enumm3</view> +	  </views> +              </register_bits>              <register_bits>                <offset>5</offset> @@ -392,6 +397,11 @@            <rwmask>0</rwmask>            <mode>RW</mode>            <name>num_triggers</name> +	  <views> +	    <view>formuu1</view> +	    <view>formuu3</view> +	    <view>enumm3</view> +	  </views>          </register>          <register>            <address>0x180</address> | 
