Discussion:
[UrJTAG-dev] Tclurjtag: a Tcl binding for liburjtag
Gaston Rodriguez
2011-01-26 14:46:24 UTC
Permalink
Hello all.

In the past days I created an almost complete binding of liburjtag to
the Tcl scripting language. For each exported function in the library I
created one Tcl command with the same name which accepts the same number
and "types" of arguments. In reality the types of the library are
coverted to and from Tcl objects.

The source code can be downloaded from here:
http://code.google.com/p/gasty-projects/downloads/list

Current version is 0.11

Some remarks:
* Tclurjtag is a C extension for Tcl. Their functions can be made
accessible with "package require Tclurjtag" in any Tcl script. The Tcl
global variable "auto_path" should be modified previously. All functions
reside in the "::urjtag" namespace
* The wrapping of liburjtag functions was automated with a tool
developed specifically for this task. For this reason the source
code should not be edited manually. Any bug found must be corrected
"touching" configuration scripts. This tool will be published in the
Tcl/Tk wiki soon...
* Pointers to data structures in the C code was casted and passed
to Tcl as integers. This is not the safest way of doing it, maybe in the
future the concept of Tcl "handles" can be used, i.e. assign an unique
string ID to each pointer. In any case the Tcl API should not change.
* Only a small part of the API was tested so far.
* Some custom functions are created for convenience:
- urj_get_driver_id cable_name: get a pointer to a cable
descriptor.
- urj_open_file filename: get a pointer to a FILE open as read.
Used by urj_svf_run
- urj_close_file: close a file open with urj_open_file
- urj_set_log_level: change the verbosity level
- urj_set_svf_callback: set the Tcl callback command

Pending issues:
* Some functions cannot be wrapped. In all cases because the
argument types are hard to convert to/from Tcl objects:
- urj_part_init_register
- urj_part_find_init
- urj_tap_parport_set_control
- urj_tap_parport_set_data
In the case of urj_tap_parport_set_* functions, if the modifier
const for data and control chars are removed the functions can be
wrapped ok.

* In the current state, additional parameters cannot be passed to
the function urj_bus_init_bus.

* SVF callback: when playing SVF files from the command line with
the progress flag enabled, a message indicating the progress was shown
in the stdout. For emulate the same behaviour and allow a more flexible
implementation of the progress callback (for instance setting the state
of a progress widget in a gui), some workaround needs to be applied. A
quick and dirty solution for this problem is:
- the original body of the function "progress_nl" in the file
"src/svf/svf_flex.l" was replaced for a call to an extern function:

static void
progress_nl (YYLTYPE *mylloc, YY_EXTRA_TYPE extra)
{
// call extern function
svf_progress_callback(mylloc->last_line, extra->num_lines);
}

- svf_progress_callback was declared as extern in svf.h:
extern void svf_progress_callback(int last_line, int num_lines);

- svf_progress_callback was defined in Tclurjtag.c. When this
function are called, a tcl command are executed, passing last_line and
num_lines as arguments.

- If the same function are defined in jtag.c, the normal
behavior of urjtag can be obtained:

void svf_progress_callback(int last_line, int num_lines)
{
int percent;

if (last_line % 10 == 0)
{
percent = ((last_line * 100) + 1) / num_lines;
if (percent<= 1)
return; // dont bother printing< 1 %
urj_log (URJ_LOG_LEVEL_DETAIL, "\r");
urj_log (URJ_LOG_LEVEL_DETAIL, _("Parsing %6d/%d (%3.0d%%)"),
last_line, num_lines, percent);
}
}

There is a better way of do this?

* Also when the SVF detect a mismatch, a message are printed in
stdout, but this stuation are not reflected in the exit status of the
function. There is no way that a Tcl script detect if the SVF play was
ok or not...

* When detecting parts using BSDL files, if any IDCODE match the
code of a bsd file, the file path are print in stdout, even with log
level in silent. The cause is that in urj_bsdl_scan_files
(src/bsdl/bsdl.c) there is a "printf" instead a log:
printf (_(" Filename: %s\n"), name);

* A big one: The BSDL detection of parts only works if the
following files are in the "current" directory of the application:
STD_1149_1_1990
STD_1149_1_1994
STD_1149_1_2001
STD_1532_2001
STD_1532_2002

This is a little impractical issue for a general purpose Tcl package...

Other minor issues:
* Some function declarations not show names for the input
arguments, for instance:

int urj_bsdl_read_file (urj_chain_t *, const char *, int, const char *);

The automated scripts use the argument names to generate a proper error
message when the number of arguments provided is different of the
expected. For example:
wrong # args: should be "urj_tap_cable_set_frequency cable frequency"

In these cases when argument names are empty, the message will look like:
wrong # args: should be "urj_bsdl_read_file arg0 arg1 arg2"

which is not so descriptive.

Demo:
A simple demo that mimics the urjtag command line app are provided.

Binary:
The binary provided is a windows dll. This version use FTD2XX
drivers for usb.

Along with the "Tclurjtag" package, a Tcl only package "Jtag" was
written. The purpose of these package is encapsulate in a TclOO class
all the low level calls to Tclurjtag commands. This package create the
class "Chain" in the namespace "::jtag". This class can be extended
using inheritance. This package is also a good reference in the usage
of Tclurjtag.

Demo: A simple script that play SVF files. This demo was tested with a
Actel's A3P250 Fpga. The log level was set to "normal" only to see the
original urjtag messages, but by default the log level should be "silent"

License:
Currently Tclurjtag use a GPL2 license for being compatible with urjtag.
I think that a less restrictive one should be more adequate for a
package/module/library...

if anyone is interested, please run the demos and provide me with any
feedback. This is a hyper-beta release, so I need some qualified testers ;)

Please forgive the long email and the poor english!

Best regards,
Gastón.
Mike Frysinger
2011-02-07 03:22:38 UTC
Permalink
Post by Gaston Rodriguez
In the past days I created an almost complete binding of liburjtag to
the Tcl scripting language. For each exported function in the library I
created one Tcl command with the same name which accepts the same number
and "types" of arguments. In reality the types of the library are
coverted to and from Tcl objects.
http://code.google.com/p/gasty-projects/downloads/list
are you interested in integrating things into urjtag itself ?
-mike
Jean-Brieuc Feron
2012-08-07 10:42:28 UTC
Permalink
Post by Gaston Rodriguez
Hello all.
In the past days I created an almost complete binding of liburjtag to
the Tcl scripting language. For each exported function in the library I
created one Tcl command with the same name which accepts the same number
and "types" of arguments. In reality the types of the library are
coverted to and from Tcl objects.
http://code.google.com/p/gasty-projects/downloads/list
Current version is 0.11
Hi everyone,

I'm interested by this module, but it's quite difficult to install.
Is there any additional documentation, update or a documented archive for linux?

I also found this documentation:
http://sourceforge.net/apps/mediawiki/urjtag/index.php?title=Tcl_Command_Structure
Are those functions implemented somewhere?

Thank you for your help!

Regards,

J-B
Gaston Rodriguez
2012-08-07 14:35:26 UTC
Permalink
Post by Jean-Brieuc Feron
Post by Gaston Rodriguez
Hello all.
In the past days I created an almost complete binding of liburjtag to
the Tcl scripting language. For each exported function in the library I
created one Tcl command with the same name which accepts the same number
and "types" of arguments. In reality the types of the library are
coverted to and from Tcl objects.
http://code.google.com/p/gasty-projects/downloads/list
Current version is 0.11
Hi everyone,
I'm interested by this module, but it's quite difficult to install.
Is there any additional documentation, update or a documented archive for linux?
Hi Jean-Brieuc!
I use this Tcl extension in windows for some applications: one is a FPGA
programmer, another is an internal logic analizer for FPGAs.
Since I've never need to run these applications in Linux I never tried
to compile for this platform, but I suppose it should be easy.

The source code is located in the "src" directory withing the
Tclurjtag-0.11.rar, and his content is:
Tclurjtag-0.11\src\make.sh
Tclurjtag-0.11\src\Tclurjtag.c
Tclurjtag-0.11\src\Tclurjtag_Utils.h

To compile it you should edit some variables in make.sh first and then
run it as a bash script.

TCLINC and TCLLIB points to the Tcl headers.
TARGET and TARGET_PATH refers to the output extension file, use what you
want
FTD2XX is the path to the headers of the FTDI library.
URJTAG_BASE points to the source code directory of UrJtag

Maybe for linux you don't need FTDI support so you can drop "-lm
$FTD2XX/i386/ftd2xx.lib" in the LIBS variable.

To make it work in Linux you should also edit the gcc command:
gcc -Wall -mno-cygwin -O2 -shared -o $TARGET.dll $TARGET.c $INCLUDES
-DUSE_TCL_STUBS $LIBS

Something like this will work (not tested):
gcc -Wall -O2 -shared -o $TARGET.so $TARGET.c $INCLUDES -DUSE_TCL_STUBS
$LIBS

Urjtag should be previously compiled as a library:

This extension uses UrJTAG 0.10 #1868. I can update Tclurjtag to a newer
UrJtag version, and try to compile it in Linux if there is interest, but
I can't promise when...

Regards,
Gastón.
Jean-Brieuc Feron
2012-08-08 13:19:23 UTC
Permalink
Hi Gaston,

Thank you for your answer!
I tried to compile your codes by myself after modifying the make script, but
I've errors:

=================================================
$ sh make.sh
Tclurjtag.c: In function ‘part_bypass_Cmd’:
Tclurjtag.c:254:2: warning: implicit declaration of function ‘part_bypass’ [-
Wimplicit-function-declaration]
Tclurjtag.c: In function ‘chain_scan_select_Cmd’:
Tclurjtag.c:350:2: warning: implicit declaration of
function ‘chain_scan_select’ [-Wimplicit-function-declaration]
Tclurjtag.c: In function ‘chain_dbgstat_get_Cmd’:
Tclurjtag.c:406:2: warning: implicit declaration of
function ‘chain_dbgstat_get’ [-Wimplicit-function-declaration]
Tclurjtag.c: In function ‘chain_emupc_get_Cmd’:
Tclurjtag.c:462:2: warning: implicit declaration of function ‘chain_emupc_get’
[-Wimplicit-function-declaration]
Tclurjtag.c: In function ‘chain_dbgstat_clear_ovfs_Cmd’:
Tclurjtag.c:521:2: warning: implicit declaration of
function ‘chain_dbgstat_clear_ovfs’ [-Wimplicit-function-declaration]
Tclurjtag.c: In function ‘chain_check_emuready_Cmd’:
Tclurjtag.c:572:2: warning: implicit declaration of
function ‘chain_check_emuready’ [-Wimplicit-function-declaration]
Tclurjtag.c: In function ‘part_sticky_in_reset_Cmd’:
Tclurjtag.c:601:2: warning: implicit declaration of
function ‘part_sticky_in_reset’ [-Wimplicit-function-declaration]
Tclurjtag.c: In function ‘chain_wait_in_reset_Cmd’:
Tclurjtag.c:626:2: warning: implicit declaration of
function ‘chain_wait_in_reset’ [-Wimplicit-function-declaration]
Tclurjtag.c: In function ‘chain_wait_reset_Cmd’:
Tclurjtag.c:677:2: warning: implicit declaration of
function ‘chain_wait_reset’ [-Wimplicit-function-declaration]
Tclurjtag.c: In function ‘chain_register_get_Cmd’:
Tclurjtag.c:963:2: warning: implicit declaration of
function ‘chain_register_get’ [-Wimplicit-function-declaration]
Tclurjtag.c: In function ‘chain_register_set_Cmd’:
Tclurjtag.c:1032:2: warning: implicit declaration of
function ‘chain_register_set’ [-Wimplicit-function-declaration]
Tclurjtag.c: In function ‘chain_register_set_same_Cmd’:
Tclurjtag.c:1065:2: warning: implicit declaration of
function ‘chain_register_set_same’ [-Wimplicit-function-declaration]
Tclurjtag.c: In function ‘chain_emuir_set_same_Cmd’:
Tclurjtag.c:1136:2: warning: implicit declaration of
function ‘chain_emuir_set_same’ [-Wimplicit-function-declaration]
Tclurjtag.c: In function ‘chain_emuir_set_same_2_Cmd’:
Tclurjtag.c:1212:2: warning: implicit declaration of
function ‘chain_emuir_set_same_2’ [-Wimplicit-function-declaration]
Tclurjtag.c: In function ‘chain_emulation_enable_Cmd’:
Tclurjtag.c:1406:2: warning: implicit declaration of
function ‘chain_emulation_enable’ [-Wimplicit-function-declaration]
Tclurjtag.c: In function ‘chain_emulation_disable_Cmd’:
Tclurjtag.c:1457:2: warning: implicit declaration of
function ‘chain_emulation_disable’ [-Wimplicit-function-declaration]
Tclurjtag.c: In function ‘chain_emulation_trigger_Cmd’:
Tclurjtag.c:1508:2: warning: implicit declaration of
function ‘chain_emulation_trigger’ [-Wimplicit-function-declaration]
Tclurjtag.c: In function ‘chain_emulation_return_Cmd’:
Tclurjtag.c:1559:2: warning: implicit declaration of
function ‘chain_emulation_return’ [-Wimplicit-function-declaration]
Tclurjtag.c: In function ‘bfin_core_reset_Cmd’:
Tclurjtag.c:1666:2: error: too few arguments to function ‘bfin_core_reset’
/home/feronjb/sw/urjtag/trunk/urjtag/include/urjtag/bfin.h:273:6: note:
declared here
Tclurjtag.c: In function ‘software_reset_Cmd’:
Tclurjtag.c:1689:2: error: too few arguments to function ‘software_reset’
/home/feronjb/sw/urjtag/trunk/urjtag/include/urjtag/bfin.h:274:6: note:
declared here
Tclurjtag.c: In function ‘chain_emupc_reset_Cmd’:
Tclurjtag.c:1717:2: warning: implicit declaration of
function ‘chain_emupc_reset’ [-Wimplicit-function-declaration]
Tclurjtag.c: In function ‘urj_cmd_find_next_Cmd’:
Tclurjtag.c:4781:2: warning: implicit declaration of
function ‘urj_cmd_find_next’ [-Wimplicit-function-declaration]
Tclurjtag.c:4781:9: warning: assignment makes pointer from integer without a
cast [enabled by default]
Tclurjtag.c: In function ‘urj_parse_stream_Cmd’:
Tclurjtag.c:5759:2: error: incompatible type for argument 1
of ‘urj_parse_stream’
/home/feronjb/sw/urjtag/trunk/urjtag/include/urjtag/parse.h:66:5: note:
expected ‘struct urj_chain_t *’ but argument is of type ‘urj_log_level_t’
Tclurjtag.c:5759:2: warning: passing argument 2 of ‘urj_parse_stream’ from
incompatible pointer type [enabled by default]
/home/feronjb/sw/urjtag/trunk/urjtag/include/urjtag/parse.h:66:5: note:
expected ‘struct FILE *’ but argument is of type ‘struct urj_chain_t *’
Tclurjtag.c:5759:2: error: too many arguments to function ‘urj_parse_stream’
/home/feronjb/sw/urjtag/trunk/urjtag/include/urjtag/parse.h:66:5: note:
declared here
Tclurjtag.c: In function ‘urj_parse_file_Cmd’:
Tclurjtag.c:5795:2: error: incompatible type for argument 1 of ‘urj_parse_file’
/home/feronjb/sw/urjtag/trunk/urjtag/include/urjtag/parse.h:76:5: note:
expected ‘struct urj_chain_t *’ but argument is of type ‘urj_log_level_t’
Tclurjtag.c:5795:2: warning: passing argument 2 of ‘urj_parse_file’ from
incompatible pointer type [enabled by default]
/home/feronjb/sw/urjtag/trunk/urjtag/include/urjtag/parse.h:76:5: note:
expected ‘const char *’ but argument is of type ‘struct urj_chain_t *’
Tclurjtag.c:5795:2: error: too many arguments to function ‘urj_parse_file’
/home/feronjb/sw/urjtag/trunk/urjtag/include/urjtag/parse.h:76:5: note:
declared here
Tclurjtag.c: In function ‘urj_part_parts_print_Cmd’:
Tclurjtag.c:6312:2: error: too few arguments to function ‘urj_part_parts_print’
/home/feronjb/sw/urjtag/trunk/urjtag/include/urjtag/part.h:133:5: note:
declared here
Tclurjtag.c: In function ‘urj_tap_detect_parts_Cmd’:
Tclurjtag.c:6802:2: error: too few arguments to function ‘urj_tap_detect_parts’
/home/feronjb/sw/urjtag/trunk/urjtag/include/urjtag/tap.h:48:5: note: declared
here
Tclurjtag.c: In function ‘urj_tap_detect_register_size_Cmd’:
Tclurjtag.c:6859:2: error: too few arguments to
function ‘urj_tap_detect_register_size’
/home/feronjb/sw/urjtag/trunk/urjtag/include/urjtag/tap.h:52:5: note: declared
here
Tclurjtag.c: In function ‘urj_tap_detect_Cmd’:
Tclurjtag.c:6942:2: error: too few arguments to function ‘urj_tap_detect’
/home/feronjb/sw/urjtag/trunk/urjtag/include/urjtag/tap.h:65:5: note: declared
here
==========================================

I think it's caused by the the different UrJTAG version used.
You explained that you had automatically generated the C source code, is it
possible to regenerate it for the new UrJtag version?
If you don't have the time to do so, could you send me your automation scripts
and explain me briefly how to proceed, in order to move formward with this
interesting UrJTAG binding?

Thank you!

Regards,

J-B
Gaston Rodriguez
2012-08-08 16:26:54 UTC
Permalink
Post by Jean-Brieuc Feron
I think it's caused by the the different UrJTAG version used.
You explained that you had automatically generated the C source code, is it
possible to regenerate it for the new UrJtag version?
If you don't have the time to do so, could you send me your automation scripts
and explain me briefly how to proceed, in order to move formward with this
interesting UrJTAG binding?
Ok, I will send to you my scripts by private message.
Thanks!
Gastón
Gaston Rodriguez
2012-08-08 18:52:31 UTC
Permalink
Post by Gaston Rodriguez
Post by Jean-Brieuc Feron
I think it's caused by the the different UrJTAG version used.
You explained that you had automatically generated the C source code, is it
possible to regenerate it for the new UrJtag version?
If you don't have the time to do so, could you send me your automation scripts
and explain me briefly how to proceed, in order to move formward with this
interesting UrJTAG binding?
Ok, I will send to you my scripts by private message.
Thanks!
Gastón
I've been lucky to update and build Tclurjtag to the latest Urjtag
version for myself, so I've updated it in my google-code repository,
adding the autogeneration scripts and a little Readme.txt for the
instructions to build the extension for windows:
http://code.google.com/p/gasty-projects/downloads/detail?name=Tclurjtag-0.20.zip&can=2&q=

Please Jean-Brieuc give it a try and give me some feedback about it.

Thanks,
Gastón.
Jean-Brieuc Feron
2012-08-09 14:09:53 UTC
Permalink
Post by Gaston Rodriguez
I've been lucky to update and build Tclurjtag to the latest Urjtag
version for myself, so I've updated it in my google-code repository,
adding the autogeneration scripts and a little Readme.txt for the
http://code.google.com/p/gasty-projects/downloads/detail?name=Tclurjtag-0.20.zip&can=2&q=
Post by Gaston Rodriguez
Please Jean-Brieuc give it a try and give me some feedback about it.
Thanks,
Gastón.
Thank you for sharing your work!

I successfully generated the shared library and could run your demo tcl file.

I have some comments which could be integrated to the readme file in the zip
archive.
It would ease installation for future users.
- TCL v8.6 is required as object oriented TCL (OO TCL) is necessary, TCL 8.5 is
not sufficient. Executing the libwrapper main.tcl script with tclsh8.6 is then
recommended.
-A small modification to the source/Tclurjtag.c file is necessary for linux
compilation. Replace the header name 'Tcl.h' to 'tcl.h'
-In the readme document, replace "change to 'sources' directory" by "change to
'source' directory"

I also had some warning during the compilation:
Tclurjtag.c: In function ‘urj_set_dr_Cmd’:
Tclurjtag.c:118:2: warning: pointer targets in passing argument 3 of
‘tclStubsPtr->tcl_GetLongFromObj’ # # differ in signedness [-Wpointer-sign]
Tclurjtag.c:118:2: note: expected ‘long int *’ but argument is of type ‘long
unsigned int *’
mv: cannot stat `pkgIndex.tcl': No such file or directory

Here is my make file, which should fit linux users:

#!/bin/sh

# Path to the tcl headers (tcl.h, ...)
export TCLINC="/usr/local/include"
# Path to the libtcl8.6.so file
export TCLLIB="/usr/local/lib"
# Path to the libftd2xx.so file
export FTD2XX="/usr/local/lib"
export URJTAG_BASE="~/SVN_urjtag/trunk/urjtag"

# Input and output files name
export TARGET="Tclurjtag"
# Destination file of the generated library and pkgIndex.tcl
export TARGET_PATH="../Tclurjtag"
export INCLUDES="-I$URJTAG_BASE -I$URJTAG_BASE/include -I$FTD2XX -I$TCLINC"

export LIBS="-L$URJTAG_BASE/src/.libs/ -lurjtag -L$FTD2XX -lftd2xx -L$TCLLIB
-ltclstub8.6"

gcc -Wall -O2 -shared -o $TARGET.so $TARGET.c $INCLUDES -DUSE_TCL_STUBS $LIBS

mv $TARGET.so $TARGET_PATH
mv pkgIndex.tcl $TARGET_PATH


Finally, is there any documentation about the new tcl functions available?
If not, the demo is sufficient to understand how to use this Tcl binding library!

So, thank you very much for your help Gaston,

Regards,

J-B

PS: If needed, I can send you via PM the Tclurjtag.so file in order to join it
to the zip archive...
Gaston Rodriguez
2012-08-09 15:00:44 UTC
Permalink
Post by Jean-Brieuc Feron
Post by Gaston Rodriguez
Please Jean-Brieuc give it a try and give me some feedback about it.
Thanks,
Gastón.
Thank you for sharing your work!
I successfully generated the shared library and could run your demo tcl file.
I have some comments which could be integrated to the readme file in the zip
archive.
It would ease installation for future users.
- TCL v8.6 is required as object oriented TCL (OO TCL) is necessary, TCL 8.5 is
not sufficient. Executing the libwrapper main.tcl script with tclsh8.6 is then
recommended.
Yes, TclOO is only required to run the automated scripts, the extension
can be compiled to Tcl 8.5.
Post by Jean-Brieuc Feron
-A small modification to the source/Tclurjtag.c file is necessary for linux
compilation. Replace the header name 'Tcl.h' to 'tcl.h'
This also work for windows, so I.ve added it to the scripts.
Post by Jean-Brieuc Feron
-In the readme document, replace "change to 'sources' directory" by "change to
'source' directory"
Ok.
Post by Jean-Brieuc Feron
Tclurjtag.c:118:2: warning: pointer targets in passing argument 3 of
‘tclStubsPtr->tcl_GetLongFromObj’ # # differ in signedness [-Wpointer-sign]
Tclurjtag.c:118:2: note: expected ‘long int *’ but argument is of type ‘long
unsigned int *’
Strange, I don't see the same in Cygwin.. I should check this.
Post by Jean-Brieuc Feron
mv: cannot stat `pkgIndex.tcl': No such file or directory
Yes, 'pkgIndex.tcl' is generated by the scripts (just to set the
Tclurjtag version), so if you run "make.sh" twice the second will raise
this error. I will change the scripts to send this file to the extension
directory and no to 'source'.
Post by Jean-Brieuc Feron
#!/bin/sh
# Path to the tcl headers (tcl.h, ...)
export TCLINC="/usr/local/include"
# Path to the libtcl8.6.so file
export TCLLIB="/usr/local/lib"
# Path to the libftd2xx.so file
export FTD2XX="/usr/local/lib"
export URJTAG_BASE="~/SVN_urjtag/trunk/urjtag"
# Input and output files name
export TARGET="Tclurjtag"
# Destination file of the generated library and pkgIndex.tcl
export TARGET_PATH="../Tclurjtag"
export INCLUDES="-I$URJTAG_BASE -I$URJTAG_BASE/include -I$FTD2XX -I$TCLINC"
export LIBS="-L$URJTAG_BASE/src/.libs/ -lurjtag -L$FTD2XX -lftd2xx -L$TCLLIB
-ltclstub8.6"
gcc -Wall -O2 -shared -o $TARGET.so $TARGET.c $INCLUDES -DUSE_TCL_STUBS $LIBS
mv $TARGET.so $TARGET_PATH
mv pkgIndex.tcl $TARGET_PATH
Good!
Post by Jean-Brieuc Feron
Finally, is there any documentation about the new tcl functions available?
Not really. The API is 'altmost' the same that the API of liburjtag, so
documenting this one should be enough.

But also in the first release I put along with the extension another
package 'Jtag' that encapsulate some of the most useful features. This
package can be extended and documented, maybe using the same interface
that use the Python UrJtag binding.
Post by Jean-Brieuc Feron
If not, the demo is sufficient to understand how to use this Tcl binding library!
So, thank you very much for your help Gaston,
Regards,
J-B
PS: If needed, I can send you via PM the Tclurjtag.so file in order to join it
to the zip archive...
Yes of course! Is for Linux ix86 or amd64?

Thanks a lot!
Gastón.
Gaston Rodriguez
2012-09-07 15:50:04 UTC
Permalink
Post by Gaston Rodriguez
I've been lucky to update and build Tclurjtag to the latest Urjtag
version for myself, so I've updated it in my google-code repository,
adding the autogeneration scripts and a little Readme.txt for the
http://code.google.com/p/gasty-projects/downloads/detail?name=Tclurjtag-0.20.zip&can=2&q=
Please Jean-Brieuc give it a try and give me some feedback about it.
Hello all:
with the help of Jean-Brieuc Feron I've updated the Tclurjtag release:
http://code.google.com/p/gasty-projects/downloads/detail?name=Tclurjtag-0.21.zip&can=2&q=

Changes include:
* Updated version of Tclurjtag for UrJTAG 0.10 #2027
* Documentation enhanced in Readme.txt, in particular instructions to
build under Linux have been added
* New custom functions "urj_get_string_dr" and "urj_set_string_dr"
* Custom functions "urj_get_dr" and "urj_set_dr" renamed to
"urj_get_value_dr" and "urj_set_value_dr"

Regards,
Gastón.

Loading...